PNDSD SOURCE ROOT SET VOLUME #1 1 NOV 78 22-2362 (P  24999-18049 1840 S 0100 RJE MASTER TO SLAVE ET              H0101 * ************************************************************ * * * REMOTE JOB ENTRY SYSTEM *** 91780A * * * * -MASTER TO SLAVE TEST DATA TAPE- * * * * CARTRIDGE #24999-13329 * * PROCESS DOCUMENT: HP 91780-90003 * * * * REVISED FOR DATECODE 1840, 10-01-78 * * D. HANCOCK * * * ************************************************************ * * * THIS ASCII TEST TAPE WAS READ BY THE MASTER * * CRT TERMINAL (STATION BEING TESTED) AND IS LISTED * * ON THE SLAVE SYSTEM CONTROL DEVICE (STATION DOING * * THE TESTING). IT DEMONSTRATES SUCCESSFUL * * TRANSMISSION OF INFORMATION BY THE MASTER STATION * * TO THE SLAVE STATION. * * * ************************************************************ * * * END OF TEST .... ANOTHER SUCCESSFUL RJE * * * * * #E #E   24999-18050 1840 S 0100 RJE SLAVE TO MASTER ET              H0101 * * ************************************************************ * * * * * REMOTE JOB ENTRY SYSTEM * * * * -SLAVE TO MASTER TEST DATA TAPE- * * * * * * CARTRIDGE #24999-13330 * PROCESS DOCUMENT: HP 91780-90003 * * * * * ************************************************************ * * * * * THIS ASCII TEST FILE IS BEING READ BY THE SLAVE * * CRT TERMINAL (STATION DOING THE TESTING) AND IS * * LISTED ON THE MASTER LIST DEVICE(STATION BEING * * TESTED). * * * * * * * * * * * * * * * * SOMEWHERE BEFORE NOW THE OPERATOR SHOULD HAVE * * GOTTEN THE ATTENTION OF THE MASTER STATION(HIT * * ANY KEY ON THE SYSTEM CONTROL DEVICE)AND ENTERED * * THE FOLLOWING COMMAND: * * * * * * *BR,RJE * *  * * * * * * * * * * AFTER A NOTICEABLE DELAY, THIS WILL INTERRUPT THE * * OUTPUT TO THE MASTER LIST DEVICE AND RETURN CONTROL * * TO THE MASTER SYSTEM CONTROL DEVICE WHERE A # PROMPT * * CHARACTER WILL APPEAR FOR THE OPERATOR. HE SHOULD * * THEN ENTER THE FOLLOWING COMMANDS(THE SYSTEM PROMPT * * IS SHOWN): * * * * ##C,,,1 * * #CTRL-D * * * * * * THE FIRST COMMAND WILL CHANGE THE LIST DEVICE * * TO THE SYSTEM CONTROL DEVICE(TTY/CRT). THE * * CTRL-D(OBTAINED BY PUSHING THE CTRL AND D KEYS * * TOGETHER)SIGNIFIES AN END-OF-FILE FOR THE TTY/CRT * * AND CAUSES COMPUTER PROCESSING TO RESUME. THE * * REST OF THE SLAVE'S TEST FILE WILL BE LISTED ON * * ON THE MASTER'S SYSTEM CONTROL DEVICE. * * * * * * * * * * * * * * * * THIS LISTING DEMONSTRATES THAT THE MASTER SYSTEM * * IS RECEIVING ASCII DATA FROM THE SLAVE. IF DATA * * CAN BE TRANSMITTED BETWEEN THE TWO SYSTEMS THEN * * WE CAN ASS4 UME THE MASTER'S REMOTE JOB ENTRY (91780) * * SYSTEM WAS PUT TOGETHER CORRECTLY. IN ADDITION, * BY USING #C,,,1 TO CHANGE LIST DEVICES, WE HAVE * * DEMONSTRATED THAT THE RJE CONTROL ROUTINE WAS * * INCORPORATED CORRECTLY WITHIN THE RTE-II/III SYSTEM. * * THE USE OF *BR,RJE DEMONSTRATES THAT THE FILE * * MANAGER VERSION OF RJE WILL CORRECTLY RESPOND TO * * THE RTE-II/III BREAK COMMAND. * * * * * * * * IF BOTH MASTER-TO-SLAVE AND SLAVE-TO-MASTER * * LISTINGS ARE CORRECT, THEN THIS CONCLUDES * * VERIFICATION OF THE RJE GENERATION. * * * * * ************************************************************ * * #D   24999-18071 1839 S 0200 "UTIL SSK DOCUMENTATION              H0102  SOFTWARE SERVICE KIT DOCUMENTATION SYSTEM 1000 24999-90001 REVISION CODE 1839 AUGUST 23, 1978 SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 1 I. MATERIAL LIST NAME REL BINARY SOURCE REVISION PART # PART # CODE RECON 24999-16044 24999-18052 1752 JSAVE 24999-16048 24999-18065 1752 JRSTR 24999-16049 24999-18066 1752 SDLS4 24999-16050 24999-18067 1752 MXREF 24999-16051 24999-18068 1805 CMM3 24999-16052 24999-18069 1752 FGETR 24999-16053 24999-18070 1752 CLASS 24999-16055 24999-18083 1752 PATCH 24999-16100 24999-18100 1839 CMMM 24999-16101 24999-18101 1839 CMM4 24999-16102 24999-18102 1839 JVRFY 24999-16163 24999-18163 1752 MLOAD 24999-16167 24999-18167 1731 MDUMP 24999-16168 24999-18168 1731 LTAT 24999-16171 24999-18171 1752 SAMSZ 24999-16178 24999-18178 1814 CDA4 24999-16197 24999-18197 1839 SNPSH 24999-16198 24999-18198 1839 CDMP 24999-16199 24999-18199 1839 "UTIL 24999-18071 1839 SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 2 II. TABLE OF CONTENTS NAME PAGE DESCRIPTION DEBUGGING AIDS: CMM3 3 PERMITS MODIFICATION OF MEMORY OR DISC, GIVES LISTING OF SYSTEM TABLES, ETC FOR RTE-II AND RTE-III CMM4 3 PERMITS MODIFICATION OF MEMORY OR DISC, GIVES LISTING OF SYSTEM TABLES, ETC FOR RTE-IV CMMM 3 PERMITS MODIFICATION OF MEMORY OR FLOPPY, GIVES LISTING OF SYSTEM TABLES, ETC FOR RTE-M PATCH 7 PATCHES SYSTEM FROM A FILE CONTAINING BINARY ABSOLUTE CODE CRASH DUMP ANALYSIS: CDA4 8 GIVES LISTINGS OF SYSTEM TABLES, ETC FROM THE MEMORY UNDER THE SYSTEM MAP OF A CRASHED SYSTEM. OUTPUT AND USE IS SIMILAR TO CMM4 CDMP 8 DUMPS THE MEMORY UNDER THE SYSTEM MAP TO CASSETTE FOR USE BY CDA4 SNPSH 8 SAVES SYSTEM SNAPSHOT ON CASSETTE FOR USE BE CDA4 MLOAD 14 LOADS SYSTEM MEMORY MAG TAPE FROM MDUMP TO CPU MDUMP 15 DUMPS SYSTEM MEMORY TO MAG TAPE FOR MLOAD FILE RELATED UTILITIES: SDLS4 16 READ CUPERTINO DISTRIBUTION TAPE INTO FMP FILES JSAVE 18 SAVE DISC CARTRIDGE ON MAG TAPE JRSTR 19 RESTORES DISC CARTRIDGE FROM JSAVE MAG TAPE JVRFY 20 VERIFY DISC CARTRIDGE AND JSAVE TAPE FGETR 21 ACCESS A FILE AND DIRECTORY ON JSAVE MAG TAPE PERFORMANCE UTILITIES: CLASS 22 DISPLAYS STATUS OF CLASS TABLE, LIST CONTENTS OR CLEAR PENDING BUFFERS LTAT 23 DISPLAYS THE CONTENTS OF TRACK ASSIGNMENT TABLE SAMSZ 40 DETERMINES THE AMOUNT OF SYSTEM AVAILABLE MEMORY(SAM) SIZE DYNAMICALLY MISCELLANEOUS: MXREF 26 GENERATES CROSS REFERENCE MAP OF A PROGRAM RECON 31 BOOTSTRAP RECONFIGURATION FOR GRANDFATHER DISC APPENDIX A SDLS4 TAPE FORMAT APPENDIX B JSAVE/JRSTR TAPE FORMAT SOFTWARE SERVICE KIT DOCUMENTATILON,SYSTEM 1000 PAGE 3 III. DEBUGGING AIDS, CMM3, CMM4, CMMM PROCEDURE NAMES: CMM3, CMM4 AND CMMM PART NUMBER: 24999-16052, 24999-16102 AND 24999-16101 DESCRIPTION: CMM3, CMM4 AND CMMM CAN BE USED AS DEBUGGING AID FOR PROGRAM DEVELOPMENT OR AS TOOLS FOR TROUBLE SHOOTING. THEY ALLOW THE USER TO EXAMINE OR MODIFY MEMORY CELLS, TO LIST SYSTEM TABLES AN PERIPHERAL INFORMATION, TO TRACE PROGRAM LINKAGE LISTS, AND TO MODIFY THE DISC. CMM3 SHOULD BE USED FOR RTE II AND RTE III, CMM4 FOR RTE-IV AND CMMM FOR RTE M. USAGE: CMM3 CAN BE CALLED BY A COMMAND RU,CMM3 CMM4 CAN BE CALLED BY A COMMAND RU,CMM4 CMMM CAN BE CALLED BY A COMMAND RU,CMMM WHEN THE CMM PROGRAM IS READY, A PROMPTING CHARACTER "-" IS DISPLAYED AND IT WA FOR THE FOLLOWING COMMANDS TO BE ENTERED. DESCRIPTION OF CMM COMMANDS: NUMBERS USED FOR PARAMETERS MAY BE ENTERED IN DECIMAL(NN) OR OCTAL(NNB) FORM. THE STANDARD OUTPUT IS PRODUCED IN ONE WORD PER LINE IN DECIMAL, OCTAL, AND ASCII ALONG WITH THE LOCATION. IN ADDITION, CMM4 PRINTS SYMBOLIC OUTPUT (INVERSE ASEMBLE). ANY COMMANDS WHICH PRODUCES MORE THAN ONE WORD OF OUTPUT MAY BE APPENDED WITH PK (E.G. INPK,6,10). IT CAUSES THE OUTPUT TO BE PRODUCED IN 8 WORDS OF OCTAL AND ASCII PER LINE INSTEAD OF ONE WORD PER LINE. COMMAND DESCRIPTION ?? DISPLAYS ALL AVAILABLE CMM COMMANDS WITH DESCRIPTION. ??,XX DISPLAYS SYNTAX FORMAT FOR THE COMMAND XX. ??,LI /E, EN, OR EX EXITS FROM CMM ID,XXXX DISPLAYS ID .SEGMENTS OF THE PROGRAM XXXX. IF THE PROGRAM IS A SEGMENT, 9 WORDS ARE DISPLAYED; OTHERWISE, 28 WORDS ARE DISPLAYED. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 4 ID,N DISPLAYS ALL ID SEGMENTS. N=ANY NUMBER. ID,FMGR ID,1 EQ,N1 DISPLAYS THE CONTENTS OF EQUIPMENT TABLE EQ,N1,N2 ENTRIES N1 THROUGH N2. EQ,4 EQ,1,9 DR,N1 DISPLAYS THE CONTENTS OF DEVICE REFERENCE DR,N1,N2 TABLE ENTRIES N1 THROUGH N2. EACH ENTRY IS DISPLAYED IN TWO PARTS. DR,1 DR,1,5 IN,N1 DISPLAYS THE CONTENTS OF INTERRUPT TABLE IN,N1,N2 ENTRIES N1 THROUGH N2. IN,6 IN,6,13 LM,N1 LIST N2 MEMORY LOCATIONS STARTING AT N1 LM,N1,N2 ADDRESS. LM,2000B LM,2000B,300 TA DISPLAYS COMPLETE TRACK ASSIGNMENT TABLE TA,LU # IF THE LOGICAL UNIT IS NOT SPECIFIED; TA,LU #,TRK #,# OF TRKS OTHERWISE, THE TRACK ASSIGNMENT FOR THE SYSTEM DISC(LU=2) OR AUXILLARY DISC(LU=3) AS MANY TRACKS SPECIFIED FROM THE SPECIFIED TRACK. TA,2 PM,N1,N2 PATCH MEMORY ADDRESS N1 WITH THE VALUE N2. THE CONTENTS OF N1 FOLLOWED BY THE MESSAGEW "YES" OR "NO" ARE DISPLAYED. TYPE "YES" TO PATCH IT; OTHERWISE, TYPE "NO" TO QUIT. PN,2000B,100B F/,XX,N1,N2 FIND ALL OCCURRENCE OF VALUE XX IN NEXT N2 LOCATIONS STARTING AT ADDRESS N1. F/,77B,2000B,200 LI,XXXX LIST THE ADDRESS OF THE ENTRY POINT NAME XXXX. LI,CMM3 DI,XXXX LIST THE DISC ADDRESS OF THE 4 WORD DICTIONARY THAT DESCRIBES THE ENTRY POINT XXXX. DI,CMM3 LE LIST ALL ENTRY POINTS IN THE SYSTEM SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 5 LL,LU # CHANGE THE LIST DEVICE TO LU #. IT IS INITIALLY SET TO THE TERMINAL WHERE THE RU,CMM3 COMMAND WAS ENTERED. LL,6 TR,N1 TRACES A THREADED LIST STARTING AT THE TR,N1,N2 ADDRESS N1 UNTIL THE ADDRESS CONTAINS THE VALUE N2. IF N2 IS OMITTED, THE VALUE OF 0 OR NEGATIVE NUMBER TERMINATES THE TRACE. TR,1711B XT,N1 IT IS THE SAME AS TR EXCEPT THAT IT TRACES XT,N1,N2 THE SYSTEM MAP. DP,N DISPLAYS THE VALUE N IN OCTAL, DECIMAL, AND ASCII FORMAT. DP,3479 DL,LU,TRK,SCTR,# OF SCTRS DISC LISTING OF ANY NUMBER OF SECTORS STARTING AbT THE SPECIFIED SECTOR. DM DISC MODIFICATION IN INTERACTIVE MODE AS FOLLOWS: MODIFY OP SYSTEM ? YES OR NO ? LU,TRK,SECTR,WORD,VALUE TYPE LU #, TRACK #, SECTOR #, WORD # TO SPECIFY THE ADDRESS AND THE VALUE TO BE ENTERED. THE CONTENTS OF THE SPECIFIED ADDRESS IS DISPLAYED. IF IT IS THE CELL TO BE CHANGED TYPE "YES"; OTHERWISE, TYPE "NO". /D TERMINATES DM MODE. DS,LU #,TRK #,VALUE SCANS THE DISC AND DISPLAYS ALL OCCURRENCES OF THE VALUE FOUND ON THE TRACK. USE THIS INFORMATION WITH DM TO UNPURGE FILES. XL,N1 LIST THE CONTENTS OF N2 LOCATIONS IN THE XL,N1,N2 SYSTEM MAP STARTING WITH THE ADDRESS N1. XL,46000B XL,46000B,100 XF,N1,N2,N3 SCANS FOR THE VALUE N1 IN NEXT N3 LOCATIONS IN THE SYSTEM MAP STRATING AT N2 ADDRESS. XF,111B,46000B,1000 XP,N1,N2 PATCH THE SYSTEM MAP AT THE ADDRESS N1 WITH THE VALUE N2. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 6 LP,XXXX,N LIST THE ABSOLUTE PROGRAM XXXX ON DISC. THE SECTOR NUMBER CORRESPONDING TO THE RELOCATABLE ADDRESS N IS LISTED. PG,PG #,# OF WORDS,OFFSET LIST ANY NUMBER OF WORDS STARTING AT THE % FIRST WORD OF THE PAGE PLUS OFFSET PP,PG #,OFFSET,VALUE PATCH A WORD IN PHYSICAL MEMORY AT OFFSET IN PAGE. PHYSICAL MEMORY STARTS AT PAGE 0. NS,# OF SECTORS SET NUMBER OF SECTORS PER TRACK. IF TWO NS,# OF SECTORS,# OF SECTORS VALUES ARE ENTERED, THE SECOND VALUE WILL BE USED AS THE NUMBER OF SECTORS PER TRACK IN THE NEW TRACK OF THE MS COMMAND. MS,LU1,TRACK1,SECTOR1,LU2,TRACK2,SECTOR2,# OF SECTORS MOVE DISC SECTORS FROM ONE TRACK AND SECTOR TO ANOTHER. USE THE NS COMMAND IF THE SOURCE AND DESTINATION LU'S HAVE A DIFFERENT NUMBER OF TRACKS PER SECTORS. FP FOOTPRINT COMMAND. DISPLAYS THE LAST 190 PAST DISC MODIFICATIONS. THE FOLLOWING COMMANDS ARE NOT AVAILABLE IN CMM3: PP NS MS FP THE FOLLOWING COMMANDS ARE NOT AVAILABLE IN CMMM: TA LI DI LE LP PG PP NS MS FP SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 7 PROCEDURE NAME: PATCH PART NUMBER: 24999-16100 DESCRIPTION: PATCH IS A PROGRAM WHICH CAN BE USED TO PUT PATCHES INTO THE OPERATING SYSTEM AFTER IT HAS BEEN BOOTED UP. PATCH IS NORMALLY RUN FROM THE WELCOM FILE. PATCH CAN BE SCHEDULED WITH: RU,PATCH,TERMINAL LU,FILE NAMR WHWERE TERMINAL LU IS USED TO LOG ERROR MESSAGES AND FILE NAMR IS A BINARY ABSOLUTE FILE (TYPE 7) CO6NTAINING THE PATCHES TO BE MADE. CHANGE PROGRAM LOADR NAME TO XXADR UPON BOOTUP. 1. USING CMM3, FIND WORD 13 OF THE ID SEGMENT OF LOADR (23435B). 2. ASSEMBLE THE FOLLOWING PROGRAM INTO FILE PATCH1::-2 ASMB,A,L ORG 23435B ASC 1,XX END 3. PUT THE FOLLOWING STATEMENT INTO THE WELCOM FILE: :RU,PATCH,1,PATCH1::-2 ERRORS: 2 - FIRST PARAMETER NOT INTEGER 3 - SECOND PARAMETER NOT A NAMR 4 - FILE IS NOT BINARY ABSOLUTE (TYPE 7) 6 - CHECKSUM DOES NOT COMPUTE 7 - RECORD TOO LARGE SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 8 IV. CRASH DUMP ANALYSIS PROCEDURE NAME: CDA4, SNPSH, CDMP PART NUMBER: 24999-16197, 24999-16198, 24999-16199 DESCRIPTION AND USAGE: THE CRASH DUMP ANALYZE PACKAGE PROVIDES A MEANS BY WHICH A COPY OF A CRASHED SYSTEM CAN BE SAVED ON A MINI-CARTRIDGE AND BE EXAMINED AND ANALYZED AT A LATER TIME. THE PACKAGE CONSISTS OF THREE PARTS: 1. !CDMP - THE DUMP PROGRAM DUMPS THE FIRST 32K OF PHYSICAL MEMORY, THE SYSTEM MAP, THE USER MAP, AND BOTH PORT MAPS (IE THE CRASHED SYSTEM) TO A MINI-CARTRIDGE. 2. SNPSH - THE SNAPSHOT PROGRAM DUMPS A SYSTEM'S SNAPSHOT (IE ENTRY POINT INFORMATION) TO A MINI-CARTRIDGE. 3. CDA4 - THE ANALYZE PROGRAM PERFORMS THE ACTUAL EXAMINATION AND ANALYSIS OF THE CRASHED SYSTEM. SNAPSHOT PROGRAM SNPSH IS DESIGNED TO RUN ON-LINE ON AN UP AND RUNNING SYSTEM. IT WILL DUMP A SNAPSHOT OF THE SYSTEM ONTO A MINI-CARTRIDGE. RTE KEEPS A SNAPSHOT OF THE OPERATING SYSTEM ON THE DISC. THIS SNAPSHOT CONTAINS ALL THE ENTRY POINT NAMES, TYPES AND LOCATIONS OF ALL THE MODULES (EXCEPT TYPE 8) THAT WERE INCLUDED AT GENERATION TIME. SNPSH WILL READ THIS SNAPSHOT FROM THE DISC AND DUMP IT TO A MINI-CARTRIDGE IN 128 WORD RECORDS. TO RUN SNPSH FROM A TERMINAL: RU,SNPSH,CTU LU WHERE CTU LU IS THE LOGICAL UNIT NUMBER OF THE CARTRIDGE TAPE UNIT TO WHICH SNPSH DIRECTS ITS OUTPUT. AFTER SUCCESSFUL COMPLETION THE MESSAGE: SNAPSHOT WRITTEN TO CASSETTE APPEARS ON THE TERMINAL. IN ORDER TO OPERATE CORRECTLY, CDA4 REQUIRES A TYPE 1 FILE WHICH CONTAINS THE SNAPSHOT GENERATED BY SNPSH. THIS FILE SHOULD BE OBTAINED FROM THE MINI-CARTRIDGE CREATED ABOVE USING THE FMGR COMMAND: :ST,CTU LU,NAME::CRN:1:-1,BN SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 9 WHERE CTU LU IS THE LOGICAL UNIT NUMBER OF THE CARTRIDGE TAPE UNIT WHERE THE SNPSH OUTPUT IS LOCATED, NAME IS THE NAME OF THE FILE TO CONTAIN THE SNAPSHOT AND CRN IS AN OPTIONAL CARTRIDGE REFERENCE NUMBER ON WHICH NAME IS TO BE CREATED. THE SNAPSHOT PROGRAM NEED ONLY BE RUN ONCE FOR A GIVEN GENERATION, WHEREAS THE DUMP PROGRAM MUST BE RUN ONCE FOR EVERY SYSTEM CRASH. DUMP PROGRAM !CDMP IS AN ABSOLUTE PROGRAM WHICH DUMPS A CRASHED SYSTEM TO A MINI-CARTRIDGE. THE FIRST 32K OF PHYSICAL MEMORY, THE SYSTEM MAP, THE USER MAP, THE PORT A MAP AND THE PORT B MAP WILL BE DUMPED. !CDMP MUST FIRST BE PUT ON A PAPER TAPE OR A MINI-CARTRIDGE SO THAT IT CAN BE LOADED INTO MEMORY BY EITHER THE PAPER TAPE OR MINI-CARTRIDGE ROM BOOT IN THE EVENT OF A SYSTEM CRASH. THIS IS DONE BY USING THE FMGR COMMAND: :DU,!CDMP,LU # WHERE LU # IS THE LOGICAL UNIT NUMBER OF EITHER THE PAPER TAPE PUNCH OR A CARTRIDGE TAPE UNIT. WHEN THIS IS DONE, AND THE SYSTEM CRASHES, THE PROGRAM CAN BE BROUGHT INTO MEMORY BY USING THE APPROPRIATE ROM BOOT. THE PROGRAM BEGINS AT ADDRESS 77463B AND ENDS AT ADDRESS 77677B, IE IT IS LOCATED RIGHT BEFORE THE ROM BOOT IN HIGH MEMORY. CONSEQUENTLY, THE ORIGINAL 140 WORDS OF MEMORY WHICH THE PROGRAM REPLACES ARE LOST. TO RUN THE PROGRAM ONCE IT IS IN MEMORY, SELECT NO PARITY FOR THE TERMINAL AND PLACE THE MINI-CARTRIDGE IN THE LEFT CTU. THE TERMINAL MUST BE ONE WHICH IS NORMALLY DRIVEN BY DVR05. SET THE P-REGISTER TO 2 (THE BEGINNING OF THE DUMP PROGRAM) AND THEN SET THE S-REGISTER TO THE SELECT CODE OF THE TERMINAL. PRESS RUN AND THE PROGRAM SHOULD EXECUTE. A HLT 77 INDICATES A NORMAL COMPLETION. A HLT 42 INDICATES THAT AN ERROR OCCURRED TRYING TO WRITE TO THE CTU. BY PRESSING RUN AFTER A HLT 42 THE DUMP PROGRAM WILL BE RETRIED. IN ORDER TO OPERATE CORRECTLY, CDA4 REQUIRES A TYPE 1 FILE WHICH CONTAINS THE CRASHED SYSTEM. SUCH A FILE CAN BE OBTAINED FROM THE MINI-CARTRIDGE CREATED ABOVE BY USING THE FMGR COMMAND: :ST,CTU LU,NAME::CRN:1:257,BN WHERE CTU LU IS THE LOGICAL UNIT NUMBER OF THE CARTRIDGE TAPE UNIT WHERE THE DUMP PROGRAM OUTPUT IS LOCATED, NAME IS THE NAME OF THE FILE TO BE CREATED TO CONTAIN THE CRASHED SYSTEM AND CRN IS AN OPTIONAL CARTRIDGE REFERENCE NUMBER ON WHICH NAME IS TO BE CREATED. THE DUMP PROGRAM MUST BE RUN ONCE FOR EVERY SYSTEM CRASH WHEREAS THE SNAPSHOT PROGRAM NEED ONLY BE RUN ONCE FOR A GIVEN GENERATION. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 10 ANALYZE PROGRAM INTRODUCTION CDA4 IS A PROGRAM DESIGNED TO WORK WITH ONE TYPE 1 FILE CONTAINING THE CRASHED SYSTEM'S SNAPSHOT AND ANY NUMBER OF TYPE 1 FILES CONTAINING CRASHED SYSTEMS. THE CDA4 COMMANDS ARE ENTERED INTERACTIVELY AT A TERMINAL. THE COMMANDS PERFORM THE FOLLOWING FUNCTIONS: * CONTROL CDA4 OPERATION * EXAMINE SPECIFIED MEMORY LOCATIONS OF THE CRASHED SYSTEM * LIST VARIOUS SYSTEM TABLES OF THE CRASHED SYSTEM * LIST SPECIFIED SYSTEM INFORMATION CDA4 COMMANDS ALL THE CDA4 COMMANDS ARE SUMMARIZED IN THE FOLLOWING TABLE. THIS TABLE PRESENTS THE COMMANDS IN THE SAME FUNCTINAL GROUPS IN WHICH THEY ARE DESCRIBED. FUNCTIONAL GROUP COMMAND FUNCTION CDA4 FI SPECIFY CRASHED SYSTEM FILE OPERATION LL CHANGE LIST DEVICE PK PACKED LISTING ?? REQUEST COMMAND INFORMATION DP DISPLAY INPUT IN OCTAL, DECIMAL, ASCII AND SYMBOLIC EP EJECT PAGE IF LINE PRINTER /E, EN, EX TERMINATE CDA4 MEMORY LM LIST MEMORY EXAMINATION TR TRACE LIST F/ FIND A VALUE IN MEMORY TABLE ID LIST ID SEGMENT EXAMINATION EQ LIST EQT DR LIST DEVICE REFERENCE TABLE IN LIST INTERRUPT TABLE TA LIST TRACK ASSIGNMENT TABLE LI LIST ENTRY POINT SYSTEM DU DUMP SYSTEM INFORMATION AN ANALYSIS OF SYSTEM MA DUMP ALL FOUR MAPS PLEASE NOTE THAT THE COMMAND STRUCTURE, SYNTAX RULES AND MANY OF THE COMMANDS ARE IDENTICAL TO THOSE OF CMM3 AND CMM4. CDA4 OPERATION SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 11 TO USE CDA4 YOU SIMPLY RUN THE PROGRAM FROM A TERMINAL. IT RESPONDS WITH A REQUEST FOR A SNAPSHOT FILE AND A PROMPT. UPON ENTERING THE SNAPSHOT FILE NAME, IT REMINDS YOU THAT THE FIRST THING YOU SHOULD DO IS TO SPECIFY THE FILE CONTAINING A CRASHED SYSTEM BY USING THE FI COMMAND. IT THEN ISSUES AN EQUAL (=) PROMPT, AT WHICH TIME YOU MAY ENTER ANY COMMAND. WHEN YOU RUN CDA4 IT ASSUMES THE TERMINAL WHICH INITIATED CDA4 AS THE DEFAULT DEVICE USED FOR COMMAND INPUT, TO LOG ERRORS AND TO LIST OUTPUT. YOU MAY CHANGE THE LIST DEVICE DURING OPERATION OF CDA4 WITH THE LL COMMAND. CDA4 OPERATION IS TERMINATED WITH A /E, EN OR EX COMMAND. RUNNING PROGRAM CDA4 TO REQUEST CDA4 FROM YOUR TERMINAL, SIMPLY RUN CDA4 AS FOLLOWS: RU,CDA4,DEVICE WHERE DEVICE IS THE LOGICAL UNIT NUMBER FOR INPUT OF CDA4 COMMANDS, LOGGING OF ERRORS AND DEFAULT FOR LISTING. THE DEFAULT IS THE LOGICAL UNIT NUMBER OF THE DEVICE WHERE CDA4 WAS SCHEDULED. CDA4 WILL RESPOND WITH THE MESSAGE: CDA4! THE RTE IV CRASH DUMP ANALIZE PROGRAM! INPUT SNAPSHOT FILE NAME = A TYPE 1 FILE CONTAINING THE SYSTEM SNAPSHOT SHOULD BE SPECIFIED USING THE FORMAT: =NAME[:[SECURITY][:CRN]] WHERE NAME IS THE NAME OF THE TYPE 1 FILE CREATED BY SNPSH AS DESCRIBED ABOVE, SECURITY IS ITS OPTIONAL SECURITY CODE AND CRN IS ITS OPTIONAL CARTRIDGE REFERENCE NUMBER. IN THE EVENT OF AN ERROR, AN ERROR MESSAGE WILL BE PRINTED FOLLOWED BY THE MESSAGE: ENTER /E TO EXIT AND ANOTHER PROMPT TO ENTER THE SNAPSHOT FILE. TO EXIT CDA4, INPUT /E, OTHERWISE TRY TO INPUT THE SNAPSHOT FILE NAME AGAIN. NOTE THAT THE SNAPSHOT FILE NAME CANNOT BE /E. WHEN A CORRECT SNAPSHOT FILE NAME HAS BEEN ENTERED, CDA4 PRINTS THE MESSAGE: SPECIFY FILE CONTAINING CRASHED SYSTEM WITH FI COMMAND = SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 12 THE EQUAL PROMPT INDICATES THAT YOU MAY ENTER ANY COMMAND. THE MESSAGE INDICATES THAT THE FIRST COMMANDq ENTERED SHOULD BE AN FI COMMAND TO SPECIFY THE FILE CONTAINING THE CRASHED SYSTEM. AFTER ENTERING AN FI COMMAND, CDA4 RESPONDS WITH ANOTHER EQUAL PROMPT. EXPLANATION OF COMMANDS EP EJECT PAGE IF LINE PRINTER THE EP COMMAND WILL DO A TOP OF FORM IF THE OUTPUT LU IS A LINE PRINTER AND WILL SPACE ONE LINE IF THE OUTPUT LU IS A TERMINAL. FORMAT: EP FI SPECIFY THE FILE CONTAINING THE CRASHED SYSTEM YOU MAY SPECIFY THE FILE NAME YOU WISH TO USE AS THE FILE CONTAINING THE CRASHED SYSTEM WITH THE FI COMMNAD. FORMAT: FI,NAMR DU DUMP THE SYSTEM TO THE LIST DEVICE THE DU COMMAND WILL LIST 32K WORDS OF THE CRASHED SYSTEM'S MEMORY TO THE LIST DEVICE. THE FORMAT OF THE OUTPUT IS 64 WORD SECTIONS IN PACKED FORMAT. FORMAT: DU AN ANALYSIS OF SYSTEM THE AN COMMAND WILL LIST SEVERAL SYSTEM ENTRY POINTS, BASE PAGE LOCATIONS AND TABLES. IN ADDITION, IT WILL TRACE SEVERAL SYSTEM LISTS. THE FOLLOWING ENTRY POINTS ARE GIVEN: $OP - THE LAST OPERATOR COMMAND ENTERED. $LIST - IF $LIST IS NON-ZERO, A LIST CHANGE WAS MADE, BUT THE CRASH OCCURRED BEFORE ANOTHER PROGRAM COULD BE DISPATCHED. $UNPE - IF $UNPE IS ZERO, NO PARITY ERROR OCCURRED. $PVCN - IF $PVCN IS NON-ZERO, THE CRASH WAS DUE TO A JSB $LIBR CALL. $CIC - CONTENTS OF $CIC (CENTRAL INTERRUPT CONTROLLER) WHEN CRASH OCCURRED. $POWR - CONTENTS OF $POWR (POWER UP/DOWN ENTRY) WHEN CRASH OCCURRED. $WORK - ADDRESS OF LAST ID SEGMENT THAT $LIST PROCESSED. $LSTM - ADDRES OF LAST $LIST CALLER $LSTM+1 - OLD STATUS OF LAST PROGRAM MOVED $LSTM+2 - LAST $LIST FUNCTION CODE. $PETB - PHYSICAL PAGE NUMBER OF PARITY ERROR $PETB+1 - LOGICAL PARITY ERROR ADDRESS $PETB+2 - MAP CONTAINING PARITY ERROR $PETB+3 - ID SEGMENT ADDRESS IF PROGRAM $PETB+4 - PARTITION NUMBER(S) IF PROGRAM $DMS -  DMS STATUS AT INTERRUPT SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 13 $DMS+1 - INTERRUPT SYSTEM ON (0) OR OFF (1) $CIC0+13B THE LAST CLF XX INSTRUCTION CONFIGURED THE FOLLOWING BASE PAGE LOCATIONS ARE LISTED: 1660B-1672B ADDRESSES FOR 1771B-1774B CURRENT EQT ENTRY 1673B CHAN - CURRENT DMA CHANNEL NUMBER 1700B RQPI - CURRENT EXEC REQUEST NUMBER 1717B XEQT - ID SEGMENT ADDRESS OF CURRENTLY EXECUTING PROGRAM. 1720B XLINK - ID SEGMENT ADDRESS OF LAST EXECUTING PROGRAM THE FOLLOWING TABLES ARE PRINTED. ALL ID SEGMENTS AND EXTENSIONS ALL EQUIPMENT TABLE ENTRIES INTERRUPT TABLE DEVICE REFERENCE TABLE $CLASS TABLE $RNTB TABLE MEMORY ALLOCATION TABLE ($MATA TABLE) THE FOLLOWING LISTS ARE TRACED: SKEDD THE SCHEDULE LIST SUSP2 THE GENERAL WAIT LIST SUSP3 THE MEMORY SUSPEND LIST SUSP4 THE DISC SUSPEND LIST THE DEVICE SUSPEND LIST FOR EACH EQT ENTRY $ZZZZ THE ABORT LIST FORMAT: AN OR ANPK (FOR A PACKED LISTING) MA DUMP THE FOUR MAPS TO THE LIST DEVICE THE SYSTEM MAP, USER MAP, PORT A MAP AND PORT B MAP CAN BE LISTED WITH THE MA COMMAND. THE 32 WORDS OF EACH MAP WILL BE PRINTED IN PACKED FORMAT. FORMAT: MA THE FOLLOWING COMMANDS PERFORM IDENTICALLY AS IN CMM3 AND CMM4: LL PK ?? DP /E EN EX LM TR F/ ID EQ DR IN TA LI SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 14 LOADS SYSTEM MEMORY FROM MAG TAPE PROCEDURE NAME: MLOAD PART NUMBER: 24999-16167 DESCRIPTION: MLOAD LOAD THE SYSTEM MEMORY FROM MAG TAPE GENERATED BY MDUMP BACK TO CPU. IT ALLOWS THE USER TO CREATE A MEMORY STATE  EXACTLY THE WAY IT WAS WHEN IT WAS DUMPED. USAGE: 1) BOOT LOAD THE MLOAD PAPER TAPE USING THE PAPER TAPE LOADER. ROM(IBL). 2) SET P=76600 S=LOWER SELECT CODE OF MAG TAPE IN BITS 5-0. 3) MOUNT MAG TAPE ON DRIVE 0 AND BRING IT ON-LINE. 4) PRESET AND RUN. 5) MLOAD WILL READ THE MAG TAPE. 6) WHEN THE FILE MARK IS REACHED ON THE MAG TAPE, THE TAPE WILL BE REWOUND TO LOAD POINT AND MLOAD IS COMPLETED. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 15 DUMP THE SYSTEM FROM MEMORY TO MAG TAPE PROCEDURE NAME: MDUMP PART NUMBER: 24999-16168 DESCRIPTION: MDUMP DUMPS THE MEMORY UNDER THE SYSTEM MAP (LOCATION 0 TO 77777B) TO A MAG TAPE IN ONE PAGE PER RECORD FORMAT. IT CAN BE USED TO SAVE THE STATE OF THE SYSTEM IN MEMORY ON TAPE WHICH CAN BE EXAMINED LATER OR ON SOME OTHER SYSTEM. USAGE: 1) BOOT LOAD THE MDUMP PAPER TAPE USING THE PAPER TAPE LOADER ROM (IBL). 2) SET P=76600 S = LOWER SELECT CODE OF MAG TAPE IN BITS 5-0. A = CLEAR, B = CLEAR 3) MOUNT MAG TAPE ON DRIVE 0 WITH WRITE RING AND BRING IT ON-LINE 4) PRESET AND RUN. 5) THE CPU WILL HALT WITH HLT 70 (102070). VERIFY A AND B REGISTERS THAT THEY ARE STILL CLEAR. 6) PRESS RUN AGAIN. 7) THE TAPE WILL BE REWOUND TO LOAD POINT AND MDUMP IS COMPLETED. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 & PAGE 16 IV. FILE RELATED UTILITIES READ CUPERTINO DISTRIBUTION TAPE PROCEDURE NAME: SDLS4 PART NUMBER: 24999-16050 DESCRIPTION: SDLS4 IS A ROUTINE WHICH WILL READ INFORMATION FROM CUPERTINO DISTRIBUTION TAPES (SDLS OR MTLS FORMAT,PAGE 20) DIRECTLY INTO RTE FMP FILES. IT ACCEPTS ABSOLUTE, RELOCATABLE, OR SOURCE FILES, BUT IT DOES NOT READ "DATA" FILES FROM THE MTLS TAPES. SDLS4 CONSISTS OF TWO PARTS, A MAIN PROGRAM WRITTEN IN FORTRAN-IV TO INTERACT WITH THE OPERATOR, AND A SUBROUTINE "GETRC"(ASMB) WHICH CONTROL AND READS THE MAG TAPE, PASSING INFOMATION RECORDS BACK TO THE MAIN PROGRAM FOR PROCESSING. SDLS4 REQUIES AN 8K BACKGROUND AREA IN ORDER TO OPERATE. SDLS4 CHECKS THE BREAK FLAG (BR,SDLS4) AT EACH MAG TAPE RECORD. IF A LOAD IS IN PROGRESS, THE LOAD FILE IS PURGED AND THE TAPE SET BACK TO THE BEGINNING OF THAT FILE. USAGE: SDLS4 CAN BE CALLED BY RU,SDLS4. IT REQUESTS THE LU # OF THE MAG TAPE , LOCKS IT, AND REWINDS THE TAPE. WHEN IT IS READY, A MEASSAGE "TASK:" IS DISPLAYED AND WAITS FOR THE FOLLOWING COMMANDS TO BE ENTERED: COMMAND DESCRIPTION LABEL READS THE TAPE LABEL AND PRINTS IT ON THE TERMINAL ?? DISPLAYS AVAILABLE SDLS4 COMMANDS DIRECTORY SEARCHES THE TAPE FOR ALL PROGRAM ID BLOCKS AND CREATES A FILE SUITABLE FOR DUMPPING TO LINE PRINTER. THE RESULT IS A DIRECTORY OF THE TAPE, GIVING PART NUMBER, REVISION NUMBER, TYPE, AND THE TAPE FILE POSITION NUMBER. THE LIST FILE NAMR WILL BE REQUESTED BY "LIST FILE:". THE LIST FILE MAY BE NON-DISC FILE (TYPE 0) OR A DISC FILE. REWIND REWINDS THE TAPE N PRINTSl CURRENT FILE POSITION NUMBER ON TAPE LL CHANGES LOG DEVICE. THE LOG DEVICE IS INITIALLY SET UP TO BE THE TERMINAL FROM WHICH THE RU,SDLS4 COMMAND WAS ENTERED. LOAD LOADS A SPECIFIC FILE ON TAPE TO DISC. THE DESTINATION FMP NAMR IS REQUESTED BY "LOAD INTO FILE:". THE TAPE FILE ID (PART NUMBER) OR FILE POSITION NUMBER(AVAILABLE FROM THE DIRECTORY OUTPUT) IS REQUESTED BY "ENTER STOCK # OR FILE #". IF THE FILE NUMBER IS GIVEN, A RANDOM SEARCH OF THE FILE IS APPLIED. IF THE PART NUMBER IS GIVEN, THE TAPE SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 17 WILL BE SEARCHED FORWARD ONLY. A REVISION CODE MAY BE SPECIFIED ALONG WITH THE PART NUMBER. IF IT DOES NOT MATCH WHAT IS ON TAPE, A MESSAGE "REV DESCRIPANCY" WILL BE DISPLAYED. IN ANY CASE, THE FILE IS STILL LOADED. WHEN THE TAPE FILE IS FOUND, THE ID AND THE DESTINATION FILE ARE LOGGED ON THE LOG DEVICE IN ORDER THAT A RECORD OF TRANSACTION CAN BE KEPT. THE OLD FILES ARE OVERWRITTEN IF EXISTING NAMES ARE GIVEN AS DESTINATION FILES. THIS IS REPORTED ON THE LOG DEVICE. THE DESTINATION FILES MAY BE NON-DISC FILES(TYPE 0). BATCH GETS LOAD COMMANDS FROM AN FMP FILE. THE FORMAT OF THE COMMAND FILE IS AS FOLLOWS: FILE NAMR PART NUMBER REV OR FILE NUMBER FILE NAMR . . FILE NAMR PART NUMBER OR FILE NUMBER /E THE /E CAUSES A TAPE TO REWIND AND RETURN TO INTERACTIVE MODE. UPDATE JUST LIKE BATCH MODE, EXCEPT THAT ljfIT REQUIRES PART NUMBER REV AND NOT FILE NUMBER. IN THIS MODE, SDLS4 WILL ONLY LOAD THOSE FILES WHOSE REV CODES ARE MORE RECENT THAN THAT SPECIFIED IN THE COMMAND FILE. IT WILL UPDATE THE COMMAND FILE REV PARAMETER TO REFLECT THE CURRENT REV, SO THAT NEXT MONTH THE SAME COMMAND FILE CAN BE USED TO UPDATE. END OR EXIT EXIT FROM SDLS4 THE LIST OF ERROR CODES OUTPUT BY SDLS4 AND THEIR MEANING. CODE MEANING 0 END OF TAPE REACHED 1 CHECKSUM ERROR ON MAG TAPE PHYSICAL RECORD 2 CHECKSUM ERROR ON DATA RECORD 3 ILLEGAL LOGICAL RECORD TYPE ON MAG TAPE(WRONG FORMAT) 4 BREAK FLAG WAS SET 5 INTERNAL ERROR 6 TAPE LOGICAL RECORD SIZE GREATER THAN PHYSICAL RECORD 7 ILLEGAL RECORD SIZE (WRONG FORMAT) 8 ILLEGAL LOGICAL RECORD SIZE 9 INTERNAL ERROR (GETRC) 10 INTERNAL ERROR(GETRC) 11 INTERNAL ERROR(GETRC) 12 DATA RECORD SIZE> 255 13 ILLEGAL PROGRAM TYPE(DATA OR CARTRIGDE IMAGE) 14 RECORD OUT OF SEQUENCE l SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 18 SAVE DISC CARTRIDGE ON TO MAG TAPE PROCEDURE NAME: JSAVE PART NUMBER: 24999-16048 DESCRIPTION: JSAVE WILL SAVE A DISC CARTRIDGE ON TO A MAG TAPE WITH A CARTRIDGE HEADER AND DIRECTORY OF FILES IN THE CARTRIDGE. THE TAPE FORMAT THAT JSAVE GENERATES IS SHOWN IN PAGE 21. IF JVRFY PROGRAM IS RESIDENT PARMANENTLY, IT IS SCHEDULED BY JSAVE AT THE END OF ITS PROCEDURE FOLLOWED BY A MESSAGE "VERIFY ?". ENTER "YES" FOR VERIFICATION ; OTHERWISE, TYPE "NO". USAGE: JSAVE CAN BE CALLED BY RU,JSAVE. WHEN JSAVE IS READY, THE FOLLOWING QUESTIONS WILL BE REQUESTED INTERACTIVELY: MAG TAPE LU: ENTER LU # OF THE MAG TAPE DRIVE DISC LU: ENTER DISC LU # OR 0 TO TERMINATE JSAVE PROCEDURE MAG TAPE FILE NUMBER: ENTER TAPE FILE NUMBER WHERE THE SAVING TAKES PLACE. EACH JSAVE PROCEDURE GENERATES A TAPE FILE STARTING WITH TAPE FILE # 1. IF THE TAPE FILE NUMBER ENTERED IS GREATER THAN 1, IT ASSUMES THAT THE TAPE ALREADY CONTAINS N-1 FILES AND THOSE FILES WILL BE SKIPPED OVER IN ORDER TO POSITION THE TAPE. JSAVE HEADER: ENTER ANY FILE IDENTIFICATION OR COMMENT UPTO 60 CHARACTERS. IT IS SAVED ON TAPE AS THE TAPE FILE HEADER AND CAN BE DISPLAYED BY JRSTR TO IDENTIFY THE FILE. THE QUESTIONS WILL BE REPEATED UNTIL 0 IS ENTERED AS THE DISC LU #.  SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 19 RESTORE DISC CARTRIDGE FROM JSAVE TAPE PROCEDURE NAME: JRSTR PART NUMBER: 24999-16049 DESCRIPTION: JRSTR RESTORES A DISC CARTRIDGE FROM A MAG TAPE SAVED BY JSAVE. USAGE: JRSTR CAN BE CALLED BY RU,JRSTR. WHEN JRSTR IS READY, THE FOLLOWING QESTIONS WILL BE REQUESTED INTERACTIVELY: MAG TAPE LU: ENTER LU # OF THE MAG TAPE DRIVE MAG TAPE FILE: ENTER THE FILE POSITION THAT CONTAINS THE CARTRIDGE DATA TO BE RESTORED. ENTERING THE FILE NUMBER 0 TERMINATES JRSTR PROCEDURE. ENTERING A NEGATIVE VALUE CUASES TO DISPLAY ALL OF THE FILE HEADERS ON MAG TAPE. JRSTR POSITIONS THE TAPE TO THE REQUESTED FILE AND DISPLAYS THE HEADER. IF IT IS THE DESIRED FILE, TYPE "YES"; OTHERWISE, TYPE "NO". DISC LU: ENTER DISC CARTRDIGE LU # TO RESTORE. NOTE: JRSTR DOES NOT UPDATE THE CARTRIDGE NUMBER. DC AND MC COMMANDS ARE NEEDED AFTER JRSTR IN ORDER TO UPDATE THE CARTRIDGE NUMBER. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 20 COMPARE JSAVE MAG TAPE AND DISC CARTRIDGE PROCEDURE NAME: JVRFY PART NUMBER: 24999-16163 DESCRIPTION: JVRFY COMPARES THE CONTENTS OF A MfAG TAPE FILE AGAINST THE CONTENTS OF A DISC CARTRIDGE. THE MAG TAPE MUST BE IN THE FOLLOWING FORMAT: N CONSECUTIVE RECORDS WITH 6145 WORDS PER RECORD(THE FIRST WORD OF A LAST RECORD MUST BE THE ASSOCIATED DISC TRACK NUMBER). IT TERMINATES ON EOF MARK ON TAPE. SINCE A JSAVE TAPE FILE CONTAINS A HEADER RECORD OF UP TO 60 CHARACTERS AS THE FIRST RECORD, THIS RECORD MUST BE BY-PASSED BY A COMMAND CN,MAG TAPE LU,FR IF JVRFY IS TO BE CALLED FROM A COMMAND. USAGE: JVRFY CAN BE CALLED BY A COMMAND: CN,MAG TAPE LU,FR RU,JVRFY,LIST LU #,DISC LU #, MAG TAPE LU # JVRFY CAN BE CALLED FROM A PROGRAM( E.G.JSAVE, JRSTR): CALL EXEC (ICODE,JVRFY, LIST LU #,DISC LU #, MAG TAPE LU #) WHERE : LIST LU # = DEVICE FOR THE MESSAGE TO BE DISPLAYED DISC LU # = LU NUMBER OF THE DISC CARTRIDGE MAG TAPE LU # = LU NUMBER OF THE MAG TAPE DRIVE ICODE = 9,10,23, OR 24. 9 OR 23 ALLOWS TO RETRIEVE ADDITIONAL INFORMATION UPON RETURN FROM JVRFY USING CALL RAMPAR(IPBUF). SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 21 READ A FILE OR DIRECTORY ON JSAVE TAPE PROCEDURE NAME: FGETR PART NUMBER: 24999-16053 DESCRIPTION: FGETR READS JSAVE TAPE AND PROVIDES DISC DIRECTORY LISTING OR ALLOWES TO TRANSFER FILES FROM THE TAPE TO DISC ONE AT A TIME. USAGE: IT CAN BE CALLED BY RU,FGETR. WHEN IT IS READY, IT WILL REQUEST INFORMATION INTERACTIVELY. DIRECTORY LIST REQUEST: MAG TAPE LU: ENTER LU # OF OTHE MAG TAPE DRIVE DO YOU WISH A DIRECTORY ?ENTER YES WHAT LU ? ENTER LU # OF THE LISTING DEVICE MAG TAPE FILE: ENTER JSAVE TAPE FILE POSITION WHICH CONTAINS THE DESIRED CARTRIDGE DIRECTORY. FGETR POSITIONS THE TAPE AND DISPLAYS THE FILE HEADER CREATED BY JSAVE FOLLOWED BY A QUESTION MARK(?). ENTER "YES" IF THIS IS THE FILE WHICH CONTAINS THE DESIRED DIRECTORY. ANY MORE ? ENTER "NO" TO TERMINATE FGETR OR "YES" TO CONTINUE TO ANOTHER FILE OR DIRECTORY LISTING. MAG TAPE LU: ENTER LU # OF THE MAGE TAPE DRIVE DO YOU WISH A DIRECTORY ?TYPE "NO" FILE NAMR,:ENTER NANR OF THE DESIRED FILE ON TAPE. IF THE NEW NAMR IS SUPPLIED, THE FILE WILL BE STORED ON DISC WITH THE NEW NAMR. MAG TAPE FILE: ENTER JSAVE MAG TAPE FILE POSITION WHICH CONTAINS THE DESIRED FILE NAMR. FGETR POSITIONS THE TAPE AND DISPLAYS THE FILE HEADER CREATED BY JSAVE FOLLOWED BY A QUESTION MARK(?). ENTER "YES" IF IT IS THE TAPE FILE. ANY MORE ? ENTER "NO" TO TERMINATE FGETR OR "YES" TO CONTINUE TO ANOTHER FILE. /E ENTERED FOR ANY INQUIRY TERMINATES FGETR. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 22 VI. PERFORMANCE UTILITIES DISPLAY CLASS TABLE PROCEDURE NAME: CLASS PART NUMBER: 24999-16055 DESCRIPTION: CLASS DISAPLAYS THE STATUS OF THE CLASS TABLE FOR THE SPECIFIED CLASS NUMBER, LIST THE CONTENTS OF THE CLASS TABLE, OR CLEAR THE PENDING CLASS BUFFERS FOR THE SPECIFIED CLASS NUMBER. USAGE: IT CAN BE CALLED BY RU,CLASS. CLASS DISPLAYS THE AVAILABLE COMMANDS AND THEIR DESCRIPTION AND WAITS FOR THE USER TO ENTER A COMMAND AFTER THE TASK:. CLASS AVAILABE COMMANDS: DISPLAY,N1,N2,LU DISPLAYS STATUS OF THE CLASS TABLE FOR CLASS NUMBERS N1 THROUGH N2 ON LOGICAL UNIT LU. CLASS OUTPUTS THE CLASS NUMBER, POSSIBLE OWNERS, CLASS NUMBER SEQURITY CODE, THE NUMBER OF REQUESTS, THE TOTAL BLOCK LENGTH OF THE ENTRY IN THE CLASS TABLE, THE TRACK OPTION WORD, AND THE SECTOR OPTION WORD. LIST,LU LISTS THE CONTENTS OF THE CLASS TABLE ON LU. CLEAR CLEARS PENDING CLASS BUFFERS. THE CLASS NUMBER IS THEN REQUESTED TO BE ENTERED. END TERMINATES CLASS PROCEDURE. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 23 DISPLAY TRACK ASSIGNMENT TABLE PROCEDURE NAME: LTAT PART NUMBER: 24999-16171 DESCRIPTION: LTAT DISPLAYS THE TRACK ASSIGNMENT TABLE ON THE SYSTEM DISC (LU # 2) AND ,IF AVAILABLE , ON THE AUXILLARY DISC (LU # 3). THE DISPLAY CONTAINS THE MAP OF TRACKS WITH THE USAGE INDICATION AS FOLLOWS: 1) SYSTEM WHERE THE OPERATING SYSTEM RESIDE 2) NAME& WHERE THE PERMANENT PROGRAMS RESIDE 3) LIBRY- TRACKS WHICH CONTAIN THE SYSTEM RELOCATABLE LIBRARY 4) NAME RUN-TIME TRACKS WHICH ARE USED BY PROGRAMS SUCH AS EDITR 5) NAME^ TRACKS WHICH ARE USED ASD SWAP TRACKS FOR DISC RESIDENT PROGRAMS 6) LG TRACKS WHICH ARE USED FOR LOAD AND GO AREA 7) -ENTS- TRACKS WHICH CONTAINS THE ENTRY POINTS TO THE SY%STEM 8) -FMP- TRACKS WHICH ARE ALLOCATED FOR FMGR USAGE: LTAT CAN BE CALLED BY A COMMAND RU,LTAT,LU WHERE LU = LOGICAL UNIT OF THE LISTING DEVICE. THE DEFAULT IS THE TERMINAL WHERE THE COMMAND WAS ENTERED. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 24 FIND SAM SIZE, SAMSZ PROCEDURE NAME: SAMSZ PART NUMBER: 24999-16178 DESCRIPTION: SAMSZ PROVIDES A MEANS TO DETERMINE DYNAMICALLY THE AMOUNT OF SYSTEM AVAILABLE MEMORY (SAM) SIZE AT ANY TIME WHICH ALLOWS YOU TO: DETERMINE WHETHER LACK OF SAM IS A BOTTLENECK TO YOUR SYSTEM DETERMINE WHETHER SAM IS BEING LEFT ALLOCATED, DUE TO SOFTWARE BUGS. DETERMINING HOW MUCH SAM MAY BE REQUIRED FOR PLANNED EXPANSION OF A SYSTEM. --ETC. THIS PROGRAM TOTALS THE SIZE OF ALL BLOCKS OF MEMORY IN THE FREE LIST TO GET REPEATED SAMPLES. IT PRINTS THE TIME OF DAY FOR EACH SAMPLE, THE TOTAL AMOUNT OF SAM AVAILABLE, AND THE LARGEST BLOCK FOUND. THIS LAST FEATURE ALLOWS YOU TO SPOT SEVERE SAM FRAGMENTATION PROBLEMS, IF ANY. YOU CAN USE THE PRINTED TIME-OF-DAY TO CORRELATE THE PRINTOUT WITH OTHER EVENTS THE SYSTEM MAY BE DOING. IT MUST BE RUN AT THE HIGHEST PRIORITY IN THE SYSTEM, OR THERE IS THE POTENTIAL PROBLEM OF THE LIST BEING RE-LINKED DURING SAMSZ'S SAMPLE, WITH THE CONSEQUENCE THAT SAMSZ MAY "GO OFF THE DEEP END." USAGE: SAMSZ CAN BE SCHEDULED BY A COMMAND, ON,SAMSZ,LU WHERE LU = LU YOU WANT THE PRINTOUT TO COME OUT ON. IT MAY BE A TTY, CRT, CASSETTE, MAG TAPE, LINEPRINTER, ETC. DEFAULT IS 1 PRINT FORMAT IS ONE LINE PER SAMPLE, AS SHOWN BELOW: TIME: 76: 12: 58, 3207 WORDS, MAX BLK = 3207 ^ ^ ^ ^ ^ ! ! ! ! +--- LARGEST BLOCK ! ! ! ! (SIZE IN DECIMAL) ! ! ! +-------- AVAILABLE SAM, IN WORDS (DECIMAL) ! ! +--------------- TIME-OF-DAY (MINUTES) ! +----------------------- TIME-OF-DAY (SECONDS) +------------------------------- TIME-OF-DAY (CENTOSECONDS) SAMSZ CAN BE SCHEDULED FOR REPEATED SAMPLINGS BY: SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 25 *IT,SAMSZ,2,2 (PROGRAM IS TO RUN EVERY TWO SECONDS) *ON,SAMSZ,NOW,1 TIME: 76: 14: 58, 3207 WORDS, MAX BLK = 3207 TIME: 76: 16: 58, 3207 WORDS, MAX BLK = 3207 NOTE: THIS PROGRAM USES $OPSY TO DETERMINE WHICH OPERATING SYSTEM IT'S IN. IT USES CROSS-MAP INSTRUCTIONS FOR EXAMINING TABLES WHEN IN A MAPPED-MEMORY RTE. THE SAM FREE-LIST HEAD IS NOT AN ENTRY POINT, SO SAMSZ MUST ACCESS IT VIA AN OFFSET VALUE. THIS TECHNIQUE IS REGRETTABLE, BECAUSE IT IMPLIES THAT VARIOUS VERSIONS AND REVISIONS OF RTE MAY, FROM TIME TO TIME, CHANGE THE OFFSET VALUE REQUIRED. ONE MEANS FOR DETERMINING THE PROPER VALUE IS TO DUMP ABOUT 400 (OCTAL) WORDS FROM THE ENTRY POINT OF $ALC AND FOLLOWING. LOOK FOR 77777 AND COUNT BACK ABOUT 3 LOCATIONS. SUBTRACT $ALC'S ADDRESS FROM THIS ADDRESS, AND THAT'S YOUR OFFSET. AS A CHECK, THE WORD IMMEDIATELY PRECEDING THE CORRECT LOCATION SHOULD BE  NEGATIVE. YOU SHOULD RUN SAMSZ WHEN THE SYSTEM IS FIRST BOOTED UP, AND BEFORE ANY SAM HAS BEEN ALLOCATED. IT SHOULD PRINT THE SAME NUMBER YOUR SYSTEM GENERATION LISTING SHOWS AS THE SIZE OF SAM. IF THE NUMBER IS FAR TOO LARGE, OR SAMSZ LOOPS ENDLESSLY, YOU SHOULD ABORT IT AND CHECK THE OFFSET CAREFULLY. NOTE THAT SAMSZ, IN CONJUNCTION WITH LGTAT, CAN BE USED TO DETERMINE WHETHER EITHER OF THE TWO MOST LIKELY BOTTLENECKS ARE AFFECTING YOU. TO DETERMINE WHETHER THE AVAILABLABILITY OF DISC SWAPPING TRACKS IS A BOTTLENECK, SIMPLY PUT LGTAT IN THE TIME LIST, RUNNING EVERY FEW SECONDS, AND PASS IT PARAMETERS TO PRINT OUT ONLY THE NUMBER OF AVAILABLE TRACKS AND LARGEST FREE BLOCK OF TRACKS. DETERMINE THE SWAP-TRACK REQUIREMENTS FOR THE LARGEST PROGRAMS YOU HAVE SCHEDULED AT THE TIME, AND BE SURE THERE ARE NO SAMPLES PRINTED WITH LESS THAN THIS NUMBER AVAILABLE. NOTE: IT IS POSSIBLE THAT THESE SAMPLER PROGRAMS MAY ONLY BE RUNNABLE AT TIMES WHEN THE RESOURCES THEY MONITOR ARE AVAILABLE. FOR EXAMPLE, IF THE PRINTOUT DEVICE IS BUFFERED, RTE WILL DELAY THEM UNTIL SUFFICIENT SAM IS AVAILABLE FOR PRINTING. IT MAY BE THAT SAM WILL PERIODICALLY BE ALMOST ENTIRELY ALLOCATED, THEN QUICKLY BE RELEASED (SAY, DUE TO A SINGLE, VERY LARGE CLASS-I/O REQUEST). SAMSZ WOULD NEVER "SEE" THIS CONDITION IF THE PRINTOUT TERMINAL WAS BUFFERED. SIMILARLY, IF THE AVAILABILITY OF SWAP TRACKS IS A BOTTLENECK, THE UTILITY SHOULD BE LOCKED INTO A PARTITION DURING THE DURATION OF ITS SAMPLING. CHECK THE TIME OF DAY PRINTED BY SAMSZ TO SEE HOW CLOSELY THE SAMPLE PERIOD IS MAINTAINED. IF NECESSARY, MODIFY THE JCODE SO IT LOCKS ITSELF IN MEMORY. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 26 CROSS REFERENCE MAP LISTING PROCEDURE NAME:MXREF PART NUMBER: 24999-16051 DESCRIPTION: MXREF PROVIDES CROSS REFERENCES OF MODULES USED BY A SPECIFIC PROGRAM. THE CROSS REFERENCE LISTING CONTAINS FOUR PARTS. THE FIRST PART PROVIDES THE LISTING OF USED MODULES WITH EACH MODULE DESCRIPTION SUCH AS THE NAME, THE SIZE, THE ENTRY POINTS, AND EXTERNAL REFERENCES. THE SECOND PART PROVIDES THE LISTING OF MODULES WITH EACH MODULE'S LEVEL AND REFERENCES WHERE IT IS USED. THE THIRD PART PROVIDES THE LIST OF ENTRY POINT NAMES WITH REFERENCES TO WHERE THEY ARE DEFINED AND USED. THE LAST PART PROVIDES THE UNRESOLVED EXTERNAL NAMES AND REFERENCES WHERE THEY ARE USED. USAGE: MXREF CAN BE CALLED BY RU,MXREF,INPUT LU,LOG LU, WHERE INPUT LU IS THE LU WHERE INPUT WILL COME FROM (TERMINAL) AND LOG LU IS WHERE THE MXREF OUTPUT WILL BE PRINTED. WHEN MXREF IS READY, A PROMPTING CHARACTER "-" IS DISPLAYED AND IT WAITS FOR THE FOLLOWING COMMANDS TO BE ENTERED: COMMAND DESCRIPTION NAMR REQUEST TO PRODUCE CROSS REFERENCE LIST FOR THE RELOCATABLE BINARY NAMR LU # REQUEST TO PRODUCE CROSS REFERENCE LIST OF THE RELOCATABLE BINARY WHICH IS ON THE DEVICE SPECIFIED BY THE LOGICAL UNIT. 2 SPACES REQUEST TO PRODUCE CROSS REFERENCE LIST OF THE RELOCATABLE BINARY IN LOAD-AND GO AREA. CONTROL-D SIGNIFIES THAT THE LAST FILE REQUEST HAS BEEN SPECIFIED AND REQUEST TO9 START PROCESSING NOTE: "LEVEL" REFERS TO THE STRUCTURED PROGRAMMING CONCEPT. IF MXREF SEES A MODULE WHICH IS NOT CALLED FROM ANY OTHER MODULE, THEN IT ASSIGNS THAT MODULE LEVEL 0. THE MODULES TO WHICH THIS MODULE CALLS ARE ASSIGNED LEVEL 1, AND SO ON. LEVELS ARE ASSIGNED BY THE MAXIMUM DEPTH FROM WHICH THEY ARE CALLED. FOR EXAMPLE, IF A UTILITY SUBROUTINE IS CALLED FROM VARIOUS LEVELS, ITS LEVEL WOULD THEN BE ONE LARGER THAN THE LARGEST LEVEL NUMBER OF ANY SUBROUTINE WHICH CALLS IT. OCCAIONALLY, IT IS NECESSARY FOR SOFTWARE TO REFER TO LEVELS ABOVE IT. THAT IS , A MODULE AT LEVEL N REFERS TO ANOTHER MODULE WITH A LOWER LEVEL NUMBER. IN THIS CASE, MXREF SIMPLY GIVES UP AND ASSIGNS LEVEL NUMBER 100. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 27 ERROR MESSAGES: OPEN ERROR FILE NAMED COULD NOT BE OPENED. CAUSE OF ERROR IS NOT PRINTED. BAD COMMAND COMMAND IS NOT RECOGNIZED. TYPE IT AGAIN CORRECTLY. READ ERROR FILE-READ OR PARITY ERROR. FILE MAY BE CORRUPT. CHECKSUM BAD CHECKSUM, OR FILE IS NOT RELOCATABLE BINARY. ILL RECORD RECORD TYPE READ NOT DEFINED IN RELOCATABLE BINARY. ILL RECORD SEQUENCE LEGAL RECORD SEQUENCE IS ALWAYS NAM FIRST. DUP MODULE NAME MODULE OF THE SAME NAME HAS BEEN SEEN BEFORE. NOT ENOUGH SPACE TO COMPUTE LEVEL NUMBER WARNING:CR# OF FILE DOES NOT MATCH CR# USED-- POSSIBLE THAT MXREF IS USING THE WRONG FILE. CHECK FOR CORRECTNESS. THIS SITUATION IS CAUSED BY USE OF ON- OFF-LINE DISC RESTORE UTILTY IN ORDER TO CHANGE THE FILE | SYSTEM ON A PERIPHERAL DISC, WITHOUT FIRST DISMOUNTING OLD CARTRIDGE, OR REMOVING A CARTRIDGE AND INSERTING A NEW CARTRIDGE. SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 28 SAMPLE MXREF OUTPUT MODULE MODULE SIZE (OCTAL) NAME MODULE IDENT. BPAG MAIN COMM ------------------------------------------------------- FILE NAME: %MXLIB:: 215: 5: 20: 000 IS ON LU 17 AVMEM 7 FEB 74 -TLD- 00000 00104 00000 ENT= GLWAM GFWAM EXT= EXEC IFCHR 14 JAN 74 -TLD- 00000 00033 00000 ENT= IFCHR EXT= .ENTR ISCHR 14 JAN 74 -TLD- 00000 00043 00000 ENT= ISCHR EXT= .ENTR CVTNP 25 JAN 74 -TLD- 00000 00153 00000 ENT= CVTNP EXT= .ENTR IFCHR NAMFM 25 JAN 74 -TLD- FMGR NAMR PARSE 00000 00512 00000 ENT= NAMFM EXT= .ENTR IFCHR ISCHR CVTNP RDDSK 1 FEB 74 -TLD- 00000 00126 00000 ENT= RDDSK EXT= EXEC .ENTR RREAD 1 FEB 74 -TLD- 00000 00117 00000 ENT= RREAD EXT= DCB4 .ENTR READG RBINY 15 FEB 74 -TLD- 00000 00402 00000 ENT= RBIN RBILU #DCB RBLU EXT= .ENTR RREAD READF EXEC .L.G.T 1 FEB 74 -TLD- 00000 00467 00000 ENT= DCB DCB4 READG OPNLG EXT= .ENTR RDDSK EXEC FILE NAME: XMXREF:: 2: 5: 27: 000 IS ON LU 2 MXREF 23 FEB '77 -LAW- -TLD- -KH- 00000 03622 00000 EXT= RBIN RBILU #DCB RMPAR EXT= .ENTR OPNLG OPEN NAMFM EXT= CLOSE FSTAT LOCF GLWAM EXT= EXEC GFWAM RBLU REIO END= 00001 TOTAL 00000 06247 00000 SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 29 MODULE LEVEL MODULES WHERE USED ------------------------------------------------------- .L.G. 4 RREAD MXREF AVMEM 2 MXREF CVTNP 3 NAMFM IFCHR 4 CVTNP NAMFM ISCHR 3 NAMFM MXREF 1 NAMFM 2 MXREF RBINY 2 MXREF RDDSK 5 .L.G. RREAD 3 RBINY ENTRY DEFN-MOD MODULES WHERE USED ------------------------------------------------------- #DCB RBINY MXREF CVTNP CVTNP NAMFM DCB .L.G. DCB4 .L.G. RREAD GFWAM AVMEM MXREF GLWAM AVMEM MXREF IFCHR IFCHR CVTNP NAMFM ISCHR ISCHR NAMFM NAMFM NAMFM MXREF OPNLG .L.G. MXREF RBILU RBINY MXREF RBIN RBINY MXREF RBLU RBINY MXREF RDDSK RDDSK .L.G. READG .L.G. RREAD RREAD RREAD RBINY UNRESOLVED EXT MODULES WHERE USED ------------------------------------------------------- .ENTR IFCHR ISCHR CVTNP NAMFM RDDSK RREAD RBINY .L.G. MXREF CLOSE MXREF EXEC AVMEM RDDSK RBINY .L.G. MXREF FSTAT MXREF LOCF MXREF OPEN MXREF READF B RBINY REIO MXREF RMPAR MXREF END OF CROSS REF SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 30 INTERNAL TABLE FORMATS: SYMBOL TABLE -- GROWS DOWNWARD FROM LWAM WORD 7 - ADDRESS OF DEFINING MODULE ENTRY WORD 6 - ADDRESS OF FIRST ENTRY IN USER-MODULE LIST WORD 5 - ADDRESS OF NEXT ALPHA. SYMBOL TABLE ENTRY WORD 4 - ADDRESS OF NEXT ALPHA. ENTRY IN MODULE-ENT LIST WORD 3 - CHARACTER 5 OF NAME; FLAGS WORD 2 - CHARACTERS 3 AND 4 OF NAME WORD 1 - CHARACTERS 1 AND 2 OF NAME USER-MODULE LIST -- GROWS DOWNWARD WITH THE SYMBOL TABLE WORD 2 - ADDRESS OF NEXT ENTRY IN USER-MODULE LIST WORD 1 - ADDRESS OF MODULE ENTRY REFERENCING THIS SYMBOL MODULE-TABLE -- GROWS UPWARD FROM FWAM; LENGTH VARIES AS THE NUMBER OF EXT'S IN A MODULE VARY WORD N - ADDRESS OF S.T. ENTRY FOR EXT #N : : WORD 8 - ADDRESS OF S.T. ENTRY FOR EXT #1 WORD 7 - NUMBER OF EXT'S FOR THIS MODULE WORD 6 - NOT USED WORD 5 - ADDRESS OF FIRST S.T. ENTRY IN MODULE-ENT LIST WORD 4 - ADDRESS OF NEXT ALPHA. MODULE TABLE ENTRY WORD 3 - CHARACTER 5 OF NAME; FLAGS WORD 2 - CHARACTERS 3 AND 4 OF NAME WORD 1 - CHARACTERS 1 AND 2 OF NAME SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 31 BOOTSTRAP RECONFIGULATION PROCEDURE NAME: RECON PART NUMBER: 24999-16044 DESCRIPTION: RECON IS A UTILITY TOOL DESIGNED FOR THE PURPOSE OF MAKING A GRANDFATHER DISC. IT IS NOT A GENERAL PURPOSE ROUTINE AND # SHOULD NOT BE USED AS SO. RECON REQUIES THE SYSTEM DISC TO HAVE TWO SURFACES AND THE SYSTEM TO BEGIN ON SURFACE ZERO. RECON WILL NOT RECONFIGURE A PRIVLEDGED INTERRUPT CARD, THUS ASSUMING A NONPRIVLEDGED SYSTEM. ALSO, TO INSURE THAT THE SYSTEM WILL BOOT ON ANY OTHER CONFIGULATION, THE INTERRUPT TABLE MUST BE EXTENDED TO SELECT CODE 77. THIS CAN BE DONE BE INCLUDING A DUMMY ENTRY IN TNE INTERRUPT TABLE AT GENERATION REFERENCING SELECT CODE 77. THE LU OF THE CONSOLE MAY BE ENTERED WHEN RECON IS RUN. THE DEFAULT VALUE IS ONE. RECON DOES NOT REQUIRE ANY PARAMETERS TO BE PASSED BY THE USER. ALSO, THERE IS NO MESSAGE TO ANNOUNCE THE COMPLETION. HOWEVER, IF RECON HAS ALREADY BEEN RUN ON THIS SYSTEM, AN ERROR MESSAGE WILL BE GENERATED. RECON PATCHES THE BOOTSTRAP ON TRACK 0 SO THAT A "BOOT EXTENSION" IS USED. THE BOOT EXTENSION IS STORED ON A TRACK WHICH IS GIVEN TO THE SYSTEM BY RECON (TRACK ASSIGNMENT TABLE MODIFIED). THE BOOT EXTENSION ACCEPT INPUT FROM THE SWITCH REGISTER (CONSOLE AND TBG SELECT CODES) AND PATCHES THE SYSTEM IN MEMORY SO THAT IT CAN USE SPECIFIED SELECT CODES FOR CONSOLE , TBG, AND DISC (DISC SELECT CODE IS GOTTEN FROM BOOTSTRAP IN UPPER 64 WORDS OF MEMORY). SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 32 APPENDIX A CUPERTINO DISTRIBUTION TAPE FORMAT REEL 1 I------------------I I TAPE LABEL I --> CONTAINS THE REEL INFORMATION: REV, DATE, I I REEL #, TITLE, ETC. I------------------I + I TAPE MARK I I------------------I I DIRECTORY I --> ONLY ON THE FIRST REEL: CONTAINS INFORMATION I------------------I FOR ALL FILES ON LIBRARY. (NOT CURRENTLY I TAPE MARK I SUPPLIED). I------------------I I PROGRAM 1 I --> THE 1ST RECORD IS THE ID BLOCK I------------------I I TAPE MARK I I------------------I I . I I . I I------------------I I PROGRAM N I I------------------I I TAPE MARK I I------------------I I TAPE MARK I --> END OF LOGICAL TAPE I------------------I I - - - - I I - - - - I REEL 2 12 WORDS<=ALL PHYSICAL RECORD<=1024 WORDS I------------------I I TAPE LABEL I 1ST WORD OF A RECORD=CHARACTER COUNT OF I------------------I THE RECORD I TAPE MARK I I------------------I LAST WORD OF A RECORD = RECORD CHECKSUM I PROGRAM N+1 I I------------------I I TAPE MARK I I------------------I I . I I . I I------------------I I PROGRAM N+M I I------------------I I TAPE MARK I I------------------I I PN,REV=999...99 I --> ONLY ON THE LAST REEL I------------------I I TAPE MARK I I------------------I I TAPE MARK I I------------------I I - - - I I - - - - - I SOFTWARE SERVICE KIT DOCUMENTATION,SYSTEM 1000 PAGE 33 APPENDIX B JSAVE/JRSTR TAPE FORMAT I-------------I I I A TAPE FILE I k`^Z I I FILE 1 I I---------------------I I I I HEADER I I I I 60 CHARACTERS I I-------------I I---------------------I I I I TRACK # I I I FILE 2 I I---------I I -->6145 WORDS I I I DIRECTORY TRACK I (1 TRACK) I I I---------------------I I-------------I I TRACK # I I I . I I---------I I --> 6145 WORDS I . I I FILE TRACK 1 I I . I I---------------------I I-------------I I . I I I I . I I FILE N I I---------------------I I I I TRACK # I I I I I---------I I -->=<6145 WORDS I-------------I I FILE TRACK N I I I I---------------------I ` ', 24999-18197 1839 S 0100 CDA4 SOURCE              H0101 FTN4 PROGRAM CDA4 (3,90),24999-16197 REV. 1839 780807 C C C MIKE MANLEY RTE IV VERSION C 8/07/78 EFH C C DIMENSION IPBUF(33),LU(5),IBUF(30),IREG(2) DIMENSION IPRAM(6) DIMENSION IARRAY(64),IDISC(36) DIMENSION IGO(20),ITYP1(15) C ^ DIMENSION ICSMES(27),IXMES(8),IDCB(144) DIMENSION IFILE(10),ISSMES(13) EQUIVALENCE(IREG,REG,IA),(IREG(2),IB) EQUIVALENCE(IPBUF(2),IPRS1),(IPBUF(6),IPRS2),(IPBUF(10),IPRS3) EQUIVALENCE(IPBUF(14),IPRS4),(IPBUF(18),IPRS5) EQUIVALENCE(IPBUF(22),IPRS6),(IPBUF(26),IPRS7) EQUIVALENCE(IPBUF(30),IPRS8) C DATA IBUF/2H ,2HCD,2HA4,2H !,2H T,2HHE,2H R,2HTE, & 2H I,2HV ,2H C,2HRA,2HSH,2H D,2HUM,2HP , & 2H/A,2HNA,2HLI,2HZE,2H P,2HRO,2HGR,2HAM,2H !, & 2H ,2H08,2H/0,2H7/,2H78/ C ^ DATA IDISC/2H ,2HLU,2H =,2H ,2H ,2H ,2H ,2HTR,2HK ,2H= , & 2H ,2H ,2H ,2H ,2HSE,2HCT,2HR ,2H= ,2H ,2H ,2H , & 2H ,2HWO,2HRD,2H =,2H ,2H ,2H ,2H ,2HOL,2HD(,2H8), & 2H =,2H ,2H ,2H / DATA IGO/2HID,2HEQ,2HDR,2HLM,2HIN,2HLL,2HFI,2HF/, & 2HLI,2HEP,2HTA,2HTR, & 2HDP,2HAN,2HDU,2HMA,2H??,2H/E,2HEX,2HEN/ C DATA ICSMES/2HSP,2HEC,2HIF,2HY ,2HFI,2HLE,2H C,2HON,2HTA, & 2HIN,2HIN,2HG ,2HCR,2HAS,2HHE,2HD ,2HSY,2HST, & 2HEM,2H W,2HIT,2HH ,2HFI,2H C,2HOM,2HMA,2HND/ DATA ISSMES/2H ,2HIN,2HPU,2HT ,2HSN,2HAP,2HSH,2HOT, & 2H F,2HIL,2HE ,2HNA,2HME/ DATA IFILE/2H ,2HFM,2HP ,2H E,2HRR,2HOR,2H -,2H ,2H ,2H / DATA IXMES/2HEN,2HTE,2HR ,2H/E,2H T,2HO ,2HEX,2HIT/ DATA ITYP1/2H ,2HSN,2HAP,2HSH,2HOT,2H F,2HIL,2HE , & 2HMU,2HST,2H B,2HE ,2HTY,2HPE,2H 1/ C C CALL RMPAR(LU) LU1=LU IF(LU1.EQ.0) LU1=1 LU2 = LU1+200B C CALL EXEC(2,LU1,IBUF,30) IPRMPT = 2H= C C C *****ASK FOR SNAPS-HOT ***** C C 10 CALL EXEC (2,LU1,ISSMES,13) CALL EXEC (2,LU1+2000B,IPRMPT,-2) REG= REIO (1,LU1+400B, IBUF,10) ISTRC = 1 CALL NAMR (IPBUF,IBUF,IB*2,ISTRC) IF (IPBUF(1).EQ.2H/E) CALL EXSUB(IDCB,IFILE,LU1,1) CALL OPEN (IDCB,IERR,IPBUF(1),1,IPBUF(5),IPBUF(6)) IF (IERR.EQ.1) GO TO 12 IF (IERR.LT.0) GO TO 11 CALL EXEC (2,LU1,ITYP1,15) GO TO 15 11 CALL CNUMD( -(IERR),IFILE(8)) CALL EXEC (2,LU1,IFILE,10) 15 CALL EXEC (2,LU1,IXMES,8) GO TO 10 C C 12 CALL EXEC (2,LU1,ICSMES,27) C C C C SET UP THE IPRAM BUFFER. THIS BUFFER IS USED BY THE I/O C SUBROUTINES (DOIO & DISC3) TO DETERMINE HOW THE I/O IS C TO BE DONE. C 1 IPRAM = 1 IPRAM(2) = 0 IPRAM(3) = 0 IPRAM(4) = 0 IPRAM(5) = 0 IPRAM(6) = -1 CALL EXEC(2,LU1+ 2000B,IPRMPT,-2) REG = REIO(1,LU1 + 400B,IBUF,17) CALL PARSE(IBUF,IB*2,IPBUF) C SEE IF THE PACKED FORM OF THE OUTPUT IS DESIRED IF(IPBUF(3).EQ.2HPK) IPRAM(5) = 1 C C C FIND OUT WHICH COMMAND IT WAS C C DO 20 I = 1,20 IF(IPRS1.EQ.IGO(I)) GO TO(100,200,300,400,500,600,700, &800,900,1000,1500,1600,1700,2000,2100,2200,9000, &50,50,50) I 20 CONTINUE CALL IWSUB(LU1) GO TO 1 C C C 100 CALL IDSUB(IPBUF,IFILE,IDCB,IPRAM,LU2,LU1) GO TO 1 200 CALL EQSUB(IBUF,IPRS2,IPRS3,IPRAM,LU2,LU1) GO TO 1 300 CALL DRSUB(IPRS2,IPRS3,IPRAM,LU2) GO TO 1 C C*****LIST ANY MEMORY LOCATION REQUESTED***** C 400 CALL DOIO(IPRS2,IPRS2+IPRS3-1,LU2,IPRAM) GO TO 1 500 CALL INSUB(IPRS2,IPRS3,IPRAM,LU2,LU1) GO TO 1 C C*****CHANGE OUTPUT LU***** C 600 LU2 = IPRS2+200B GO TO 1 C C*****OPEN CRASHED SYSTEM FILE***** C 700 ISTRC = 1 CALL NAMR (IPBUF,IBUF,IB*2,ISTRC) CALL NAMR (IPBUF,IBUF,IB*2,ISTRC) CALL MINIT(IPBUF,LU1) GO TO 1 800 CALL FSSUB(IPRS2,IiePRS3,IPRS4,IPRAM,LU2,LU1) GO TO 1 900 CALL LISUB(IDISC,IFILE,IPRS2,IDCB,IPRAM,LU2,LU1) GO TO 1 C C*****EJECT PAGE (TOP OF FORM FOR LINE PRINTER)***** C 1000 CALL EXEC (3,LU2+700B,-1) GO TO 1 1500 CALL TASUB(IPRS2,IPRS3,IPRS4,IPRAM,LU2,LU1) GO TO 1 1600 CALL TRSUB(IPRS2,IPRS3,IPRAM,LU2) GO TO 1 1700 CALL DPSUB(IPRS2,IPRS3,IPRS4,IDISC,IARRAY,IPRAM,LU2) GO TO 1 2000 CALL ANSUB(IDISC,IFILE,IBUF,IPBUF,IDCB,IPRAM,LU2,LU1) GO TO 1 2100 CALL DUSUB(IPRAM,LU2) GO TO 1 2200 CALL MASUB(IARRAY,LU2) GO TO 1 9000 CALL QUSUB(IGO,IPRS2,LU2,LU1) GO TO 1 50 CALL EXSUB(IDCB,IFILE,LU1,0) END C C C ILLEGAL COMMAND C C SUBROUTINE IWSUB(LU1) DIMENSION IWHAT(6) DATA IWHAT/2H ,2HSA,2HY ,2HWH,2HAT,2H ?/ CALL EXEC(2,LU1,IWHAT,-12) RETURN END C C *****OUT OF RANGE MESSAGE***** C SUBROUTINE ITSUB(LU1) DIMENSION IOUT(7) DATA IOUT/2H ,2HOU,2HT ,2HOF,2H R,2HAN,2HGE/ CALL EXEC(2,LU1,IOUT,7) RETURN END C C *****NOT FOUND MESSAGE***** C SUBROUTINE NFSUB(ITEM,LU1) DIMENSION IMES11(9),ITEM(3) DATA IMES11/2H ,2H ,2H ,2H ,2HNO,2HT ,2HFO,2HUN,2HD / DO 60 I = 1,3 IMES11(I) = ITEM(I) 60 CONTINUE CALL EXEC(2,LU1,IMES11,9) RETURN END C C *****EXIT STUFF***** C SUBROUTINE EXSUB(IDCB,IFILE,LU1,IFG) DIMENSION IDCB(144),IFILE(10),IMESS0(8) DATA IMESS0/2H ,2H =,2HCD,2HA4,2H D,2HON,2HE ,2H! / IF (IFG.EQ.1) GO TO 52 CALL MCLOS CALL CLOSE (IDCB,IERR) IF (IERR.GE.0) GO TO 52 CALL CNUMD (-(IERR),IFILE(8)) CALL EXEC (2,LU1,IFILE,10) 52 CALL EXEC(2,LU1,IMESS0,-16) CALL EXEC(6,0) RETURN END C C C **********GET ID SEGMENT INFO************** C C SUBROUTINE IDSUB(IPBUF,IFILE,IDCB,IPRAM,LU2,LU1) DIMENSION IPBUF(33),IPRAM(6),ItMESS1(9),IEXT(4) DIMENSION IFILE(10),IDCB(144),IDEX(3),IBMES(11) DIMENSION ISBID(9),ILBID(9) DATA IMESS1/2H ,2HID,2H S,2HEG,2H O,2HF / DATA IEXT/2H ,2HEX,2HTE,2HNT/ DATA IDEX/2H$I,2HDE,2HX / DATA IBMES/2H ,2H ,2H ,2H ,2HVI,2HRG,2HIN,2H I,2HD , & 2HSE,2HGS/ DATA ISBID/2H ,2H/ DATA ILBID/2H ,2H / C C IBLNK = 0 IBFLG = -1 IFRST = 0 KYWORD = IGET(1657B) -1 IF(IPBUF(5).EQ.1) GO TO 175 C C 150 DO 170 I = 1,257 KYWORD = KYWORD +1 IF(IGET(KYWORD).EQ.0) GO TO 190 IF(((IPBUF(6).EQ.IGET(IGET(KYWORD)+12)).AND. & (IPBUF(7).EQ.IGET(IGET(KYWORD)+13))).AND. & (IPBUF(8).EQ.IOR(IAND(IGET(IGET(KYWORD)+14),177400B),40B))) & GO TO 176 170 CONTINUE 175 KYWORD = KYWORD +1 IF(IPRAM(3).EQ.9999) RETURN IF(IGET(KYWORD).EQ.0) GO TO 186 IF(IGET(IGET(KYWORD)+12).NE.0) GO TO 176 IMESS1(7) = 2H IBFLG = 0 GO TO 180 176 IMESS1(7) = IGET(IGET(KYWORD)+12) IMESS1(8) = IGET(IGET(KYWORD)+13) IMESS1(9) = IGET(IGET(KYWORD)+14) C 180 ISTART = IGET(KYWORD) ISTOP = ISTART +32 ITEMP = IAND(IGET(IGET(KYWORD) +14),17B) ITEMP1= IAND(IGET(IGET(KYWORD) +14),20B) IF(ITEMP1.EQ.20B) ISTART= IGET(KYWORD) +11 IF(ITEMP1.EQ.20B) ISTOP = ISTART + 8 IF ((ITEMP1.EQ.20B).AND.(IFRST.EQ.0)) GO TO 186 160 IF(ITEMP.EQ.1) ISTOP = ISTART + 28 C C 'ID' COMMAND, SO GIVE HIM THE ID SEGMENT !! IF (IBFLG.EQ.-1) GO TO 183 IF (IBFLG.EQ.1) GO TO 182 DO 181 I = ISTART,ISTOP IF ((I.EQ.(ISTART+3)).AND.(IGET(I).EQ.20B)) GO TO 181 IF (IGET(I).NE.0) GO TO 183 181 CONTINUE IBFLG = 1 182 IBLNK = IBLNK + 1 GO TO 175 183 CALL EXEC (3,LU2+700B,1) CALL EXEC(2,LU2,IMESS1,-17) CALL DOIO(ISTART,ISTOP,LU2,IPRAM) C C IF NOT EMA OR IF IT'S A SEGMENT OR MEM RES C THEN DON'T PRINT THE ID EXTENSION C IF((ITEMP1 .EQ. 20B).OR. (ITEMP .EQ. 1)) GO TO 185 IF(IGET(IGET(KYWORD)+28).EQ.0) GO TO 185 C GET THE ID EXTENSION CALL FNDET(IDEX,IERR,IDCB,MYTYP,IWRD4) IF (IERR.NE.0) GO TO 187 IF (MYTYP.EQ.3) CALL NFSUB(IDEX,LU1) IF (MYTYP.EQ.3) GO TO 185 ISTART = IAND(IGET(IGET(KYWORD)+28),111111B) ISTART=IGET(IGET(IWRD4)+ISTART/1024) CALL EXEC(2,LU2,IEXT,4) CALL DOIO(ISTART,ISTART+2,LU2,IPRAM) 185 IF(IPBUF(5).EQ.1) GO TO 175 RETURN C C 186 IBFLG = -1 IF ((IGET(KYWORD).EQ.0).AND.(IBLNK.EQ.0)) RETURN IF (IBLNK.EQ.0) GO TO 166 CALL EXEC (3,LU2+700B,1) CALL CNUMD(IBLNK,IBMES) CALL EXEC (2,LU2,IBMES,11) IF ((ITEMP1.EQ.20B).AND.(IGET(KYWORD).EQ.0)) &CALL EXEC(2,LU2,ISBID,9) IF (IFRST.EQ.0) CALL EXEC(2,LU2,ILBID,9) IF (IGET(KYWORD).EQ.0) RETURN IBLNK = 0 166 IFRST = 1 GO TO 160 C C 187 CALL CNUMD(-(IERR),IFILE(8)) CALL EXEC (2,LU1,IFILE,10) GO TO 185 C C 190 CALL NFSUB(IPBUF(6),LU1) RETURN END C C C **********GET EQT INFO************* C C SUBROUTINE EQSUB(IBUF,IPRS2,IPRS3,IPRAM,LU2,LU1) DIMENSION IPRAM(6),IBUF(30),IMESS2(11) DATA IMESS2/2H ,2HEQ,2HT ,2H# ,2H ,2H ,2H ,2H ,2HDV,2HR / C C IEQTA = IGET(1650B) IEQTNO = IGET(1651B) IPRL2 = IPRS2 IPRL3 = IPRS3 IF(IPRS3 .GT. IEQTNO) IPRL3 = IEQTNO IF(IPRS2.GT.IEQTNO) GO TO 220 IF(IPRS2.LT. 1) IPRL2 = 1 C C DO 210 I = IPRL2,IPRL3 IF(IPRAM(3) .EQ. 9999) RETURN ISTART = IEQTA + (I - 1)*15 CALL CNUMD(I,IBUF(2)) IMESS2(4) = IBUF(4) IBUF = (IAND(IGET(ISTART+4),37400B)/256) IBUF = IBUF + 2*(IBUF/8) CALL CNUMD(IBUF,IBUF(2)) C INSERT A 0 SO DVR00 DOESNT LOOK LIKE DVR 0 IF (IAND(IBU;F(4),177400B).EQ.20000B) IBUF(4) = IBUF(4) + 10000B IMESS2(11) = IBUF(4) C CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IMESS2,11) CALL DOIO(ISTART,ISTART +14,LU2,IPRAM) 210 CONTINUE RETURN 220 CALL IWSUB(LU1) RETURN END C C C C **********GET DEVICE REF TABLE************** C SUBROUTINE DRSUB(IPRS2,IPRS3,IPRAM,LU2) DIMENSION IPRAM(6),IMESS3(6) DATA IMESS3/2H ,2HDR,2HT ,2HPA,2HRT,2H / C C IDRT = IGET(1652B) LUMAX = IGET(1653B) IPRL2 = IPRS2 IPRL3 = IPRS3 IMESS3(6) = 20061B C C CALL EXEC(2,LU2,IMESS3,6) IF(IPRS3.GT.LUMAX) IPRL3 = LUMAX IF(IPRS2.LE.0) IPRL2 = 1 IF (IPRS3.EQ.0) IPRL3 = IPRL2 CALL DOIO(IDRT + IPRL2-1,IDRT + IPRL3-1,LU2,IPRAM) IMESS3(6) = 20062B CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IMESS3,6) CALL DOIO(IDRT+IPRL2-1+LUMAX,IDRT+IPRL3-1+LUMAX,LU2,IPRAM) RETURN END C C C *************GET THE INTERUPT TABLE***************** C C SUBROUTINE INSUB(IPRS2,IPRS3,IPRAM,LU2,LU1) DIMENSION IPRAM(6),IMESS5(6),IMESS8(11) DATA IMESS5/2H ,2HIN,2HT ,2HTA,2HBL,2HE / DATA IMESS8/2HIN,2HT ,2HTA,2HBL,2HE ,2HST,2HAR,2HTS, & 2H A,2HT ,2H6./ C C INTBA = IGET(1654B) INTLG = IGET(1655B) IPRL3 = IPRS3 C C IF(IPRS2.LT.6) GO TO 550 CALL EXEC(2,LU2,IMESS5,-12) IF(IPRS3.GT.INTLG) IPRL3 = INTLG IF (IPRS3.EQ.0) IPRL3 = IPRS2 ISTART = INTBA + IPRS2 -6 ISTOP = INTBA +IPRL3 -6 IPRAM = IPRS2 IPRAM(2) = 1 CALL DOIO(ISTART,ISTOP,LU2,IPRAM) RETURN 550 CALL EXEC(2,LU1,IMESS8,-22) RETURN END C C C*******FIND A WORD BETWEEN GIVEN LIMITS IN MEMORY******** C SUBROUTINE FSSUB(IPRS2,IPRS3,IPRS4,IPRAM,LU2,LU1) DIMENSION IPRAM(6),IDUM(3) DATA IDUM/2H ,2H ,2H / C C IF((IPRS3.LT.0).OR.(IPRS3+IPRS4-1.LT}.0)) GO TO 860 DO 850 I = IPRS3,IPRS3+IPRS4-1 IF(IGET(I).EQ.IPRS2) GO TO 820 GO TO 850 820 CALL DOIO(I,I,LU2,IPRAM) IF(IPRAM(3).EQ.9999) RETURN IPRAM(3) = 1 IPRAM = IPRAM + 1 850 CONTINUE IF(IPRAM(3).EQ.0) CALL NFSUB(IDUM,LU1) RETURN 860 CALL ITSUB(LU1) RETURN END C C C*******FIND ADDRESS OF SELECTED SYSTEM ENTRY POINTS******** C C C C C C SUBROUTINE LISUB(IDISC,IFILE,IPRS2,IDCB,IPRAM,LU2,LU1) DIMENSION IABS(7),IRP(6),LDISC(5),IDISC(36),IFILE(10) DIMENSION IDCB(144),IPRAM(6) DATA IABS/2H ,2HAB,2HS ,2H / DATA IRP/2H ,2HRP,2H / DATA LDISC/2H ,2HDI,2HSC,2H R,2HES/ C C IERR = 0 C C FIND TYPE AND 4TH WORD INFO FOR SELECTED ENTRY POINT C BRANCH ACCORDINGLY C CALL FNDET(IPRS2,IERR,IDCB,MYTYP,IWRD4) IF (IERR.NE.0) GO TO 992 GO TO (975,980,995,985,990) MYTYP C C C MEMORY RESIDENT C C 975 CALL DOIO (IWRD4,IWRD4,LU2,IPRAM) RETURN C C C DISK RESIDENT C C 980 CALL EXEC (2,LU2,LDISC,5) IDISC(7) = 2H CALL CNUMD(IWRD4/128,IDISC(11)) CALL CNUMD(IAND(IWRD4,177B),IDISC(19)) CALL EXEC (2,LU2,IDISC(7),15) RETURN C C C ABSOLUTE C C 985 CALL CNUMO(IWRD4,IABS(5)) CALL EXEC (2,LU2,IABS,7) RETURN C C C RP MICRO CODED MACRO C C 990 CALL CNUMO(IWRD4,IRP(4)) CALL EXEC (2,LU2,IRP,6) RETURN C C C ERROR CONDITION C C 992 CALL CNUMD(-(IERR),IFILE(8)) CALL EXEC (2,LU1,IFILE,10) RETURN C C 995 CALL NFSUB(IPRS2,LU1) RETURN END C C C C*********** PRINT OUT THE TRACK ASSIGNMENT TABLE ****************** C SUBROUTINE TASUB(IPRS2,IPRS3,IPRS4,IPRAM,LU2,LU1) DIMENSION IAUX(5),ISYS(5),ITAT(12),IPRAM(6) DATA IAUX/2H ,2HAU,2HX ,2HDI,2HSC/ DATA ISYS/2H ,2HSY,2HS ,2HDI,2HSC/ DATA ITAT/2H ,2HTR,2HAC,2HK ,2HAS,2HSI,2HGN,2HME,2HNT, &2H T,2HAB,2HLE/ C C CALL EXEC(2,LU2,ITAT,12) IPRAM = 0 IF((IPRS2.GT.3).OR.(IPRS2.LT.0)) GO TO 1530 C GET # OF TRACKS ON AUX DISC INEED =-( IGET(1755B))- IGET(1756B) C GET STOP ADDRESS OF TAT FOR SYS DISC ISTOP = IGET(1656B) + IGET(1756B) - 1 IF (IPRS2 .EQ. 3) GO TO 1510 C PRINT OUT SYS DISC TRACK ASSIGNMENTS CALL EXEC(2,LU2,ISYS,5) C IF(IPRS3.EQ.0) GO TO 1505 IPRAM = IPRS3 C ISTART = IGET(1656B) + IPRS3 IF(ISTART .GT. ISTOP ) GO TO 1530 IF(ISTART+IPRS4-1.LT.ISTOP)ISTOP=ISTART+IPRS4-1 1505 CALL DOIO(IGET(1656B)+IPRS3,ISTOP,LU2,IPRAM) C C IF(IPRAM(3).EQ.9999) RETURN 1510 IF(IPRS2.EQ.2) RETURN IF (INEED .EQ.0 ) RETURN C CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IAUX,5) ISTART = ISTOP + 1 + IPRS3 ISTOP = ISTOP + INEED IF(ISTART .GT.ISTOP) GO TO 1530 IF(IPRS3 .EQ. 0 ) GO TO 1520 IPRAM = IPRS3 IF(ISTART+IPRS4-1 .LT. ISTOP)ISTOP = ISTART+IPRS4-1 1520 CALL DOIO(ISTART,ISTOP,LU2,IPRAM) RETURN 1530 CALL IWSUB(LU1) RETURN END C C C******************* TRACE A LIST IN ANY MAP ************************** C SUBROUTINE TRSUB(IPRS2,IPRS3,IPRAM,LU2) DIMENSION IPRAM(6) C C IPRL2 = IPRS2 1610 IF((IPRL2 .LT.1).OR. (IPRL2 .EQ.IPRS3)) RETURN CALL DOIO(IPRL2,IPRL2,LU2,IPRAM) IF (IPRAM(3).EQ.9999) RETURN IPRAM(3) = 1 IPRL2 = IGET(IPRL2) GO TO 1610 END C C*********DISPLAY WHATEVER THE USER HAS INPUT ************ C C SUBROUTINE DPSUB(IPRS2,IPRS3,IPRS4,IDISC,IARRAY,IPRAM,LU2) DIMENSION IARRAY(64),IDISC(36),IPRAM(6) C C IF(IPRS3.EQ.0) GO TO 1750 IF(IPRS3.EQ.2H* )IPRS2 = IPRS2*IPRS4 IF(IPRS3.EQ.2H+ )IPRS2 = IPRS2+IPRS4 IF(IPRS3.EQ.2H/ )IPRS2 = IPRS2/IPRS4 IF(IPRS3.EQ.2H- )IPRS2 = IPRS2-IPRS4 1750 IARRAY = IPRS2 IPRAM = 0 IPRAM(3)N = 1 CALL DISC3(1,1,1,1,IARRAY,IPRAM,LU2,IDISC) RETURN END C C C *****ANALYSIS OF THE SYSTEM***** C C SUBROUTINE ANSUB(IDISC,IFILE,IBUF,IPBUF,IDCB,IPRAM,LU2,LU1) DIMENSION IDISC(36),IFILE(10),IBUF(30),IPBUF(33),IDCB(144) DIMENSION IPRAM(6),ITABS(12),MATAB(6),MNP(3),IZZZ(3),IEPLST(38) DIMENSION IMLOC1(15),IMLOC(72),ICOMES(14) DIMENSION ILST(52),IEQLS(17) DIMENSION ICONT(3),IOFSET(5),IADR(4),LEN(5),ITAD(4),LLEN(5) C C DATA IEPLST/2H$O,2HP ,2H ,2H$L,2HIS,2HT ,2H$U,2HNP,2HE , & 2H$P,2HVC,2HN ,2H$C,2HIC,2H ,2H$P,2HOW,2HR ,2H$W,2HOR, & 2HK ,2H$L,2HST,2HM ,2H ,2H$P,2HET,2HB ,2H ,2H$D,2HMS, & 2H ,2H ,2H$C,2HIC,2H0 ,2H+1,2H3B/ DATA IMLOC1/2HAD,2HDR,2HES,2HS ,2HFO,2HR ,2HCU,2HRR, & 2HEN,2HT ,2HEQ,2HT ,2HEN,2HTR,2HY / DATA IMLOC/2HCH,2HAN,2H--,2HCU,2HRR,2HEN,2HT ,2HDM, & 2HA ,2HCH,2HAN,2HNE,2HL ,2HNU,2HMB,2HER, & 2HRQ,2HP1,2H--,2HCU,2HRR,2HEN,2HT ,2HEX, & 2HEC,2H R,2HEQ,2HUE,2HST,2H N,2HUM,2HBE,2HR , & 2HXE,2HQT,2H--,2HID,2H S,2HEG,2HME,2HNT, & 2H A,2HDD,2HR ,2HOF,2H C,2HUR,2HRE,2HNT,2H P, & 2HRO,2HGR,2HAM, & 2HXL,2HIN,2HK-,2H-I,2HD ,2HSE,2HGM,2HEN,2HT , & 2HAD,2HDR,2H O,2HF ,2HLA,2HST,2H P,2HRO,2HGR,2HAM/ DATA ILST/2HSK,2HED,2HD-,2H-S,2HCH,2HED,2HUL,2HE , & 2HLI,2HST, & 2HSU,2HSP,2H2-,2H-G,2HEN,2HER,2HAL,2H W, & 2HAI,2HT ,2HLI,2HST, & 2HSU,2HSP,2H3-,2H-M,2HEM,2HOR,2HY ,2HSU, & 2HSP,2HEN,2HD ,2HLI,2HST, & 2HSU,2HSP,2H4-,2H-D,2HIS,2HC ,2HSU, & 2HSP,2HEN,2HD ,2HLI,2HST/ DATA IEQLS/2HEQ,2HT ,2H #,2H ,2H ,2H ,2H ,2HDE, & 2HVI,2HCE,2H S,2HUS,2HPE,2HND,2H L,2HIS,2HT / DATA ITABS/2H$C,2HLA,2HS ,2HTA,2HBL,2HE , & 2H$R,2HNT,2HB ,2HTA,2HBL,2HE / DATA MATAB/2H$M,2HAT,2HA ,2HTA,2HBL,2HE / DATA MNP/2H$M,2HNP,2H / DATA IZZZ/2H$Z,2HZZ,2HZ / DATA ICOI3NT/3,5,2/ DATA IOFSET/2H ,2H+1,2H+2,2H+3,2H+4/ DATA LEN/0,16,17,20,19/ DATA IADR/1673B,1700B,1717B,1720B/ DATA LLEN/0,10,12,13,12/ DATA ITAD/1711B,1713B,1714B,1715B/ DATA ICOMES/2H ,2HCU,2HRR,2HEN,2HT ,2HOC,2HCU,2HPA,2HNT,2H =, & 2H ,2H ,2H ,2H / C C ENTRY POINTS C DO 2010 I = 1,19,3 CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IEPLST(I),3) CALL LISUB(IDISC,IFILE,IEPLST(I),IDCB,IPRAM,LU2,LU1) IF (IPRAM(3).EQ.9999) RETURN 2010 CONTINUE C C DO 2020 I = 22,30,4 CALL FNDET(IEPLST(I),IERR,IDCB,MYTYP,IWRD4) IF (IERR.NE.0) GO TO 2090 IF (MYTYP.EQ.3) CALL NFSUB(IEPLST(I),LU1) IF (MYTYP.EQ.3) GO TO 2020 INDX = 1 + (I-19)/4 DO 2025 J = 1,ICONT(INDX) IEPLST(I+3) = IOFSET(J) CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IEPLST(I),4) CALL DOIO(IWRD4+J-1,IWRD4+J-1,LU2,IPRAM) IF (IPRAM(3).EQ.9999) RETURN 2025 CONTINUE C 2020 CONTINUE C C CALL FNDET(IEPLST(34),IERR,IDCB,MYTYP,IWRD4) IF (IERR.NE.0) GO TO 2090 IF (MYTYP.EQ.3) CALL NFSUB(IEPLST(34),LU1) IF (MYTYP.EQ.3) GO TO 2026 CALL EXEC (3,LU2+700B,1) CALL EXEC(2,LU2,IEPLST(34),5) CALL DOIO(IWRD4+13B,IWRD4+13B,LU2,IPRAM) IF (IPRAM(3).EQ.9999) RETURN C C MEMORY LOCATIONS C 2026 CALL EXEC (3,LU2+700B,1) CALL EXEC(2,LU2,IMLOC1,15) CALL DOIO(1660B,1672B,LU2,IPRAM) IF (IPRAM(3).EQ.9999) RETURN IPRAM = 12 IPRAM(3) = 1 CALL DOIO(1771B,1774B,LU2,IPRAM) IF (IPRAM(3).EQ.9999) RETURN IPRAM = 1 IPRAM(3) = 0 C IX = 1 DO 2027 I = 1,4 IX = IX + LEN(I) CALL EXEC (3,LU2+700B,1) CALL EXEC (2,LU2,IMLOC(IX),LEN(I+1)) CALL DOIO (IADR(I),IADR(I),LU2,IPRAM) IF (IPRAM(3).EQ.9999) RETURN 2027 CONTINUE C C TABLES C IPBUF(5) = 1 C CALL EXEC (3,LU2+700B,1) CALL IDSUB(IPBUF,IFILE$,IDCB,IPRAM,LU2,LU1) IF (IPRAM(3).EQ.9999) RETURN C CALL EXEC (3,LU2+700B,1) CALL EQSUB(IBUF,(1),IGET(1651B),IPRAM,LU2,LU1) IF (IPRAM(3).EQ.9999) RETURN C CALL EXEC (3,LU2+700B,1) CALL INSUB((6),IGET(1655B),IPRAM,LU2,LU1) IF (IPRAM(3).EQ.9999) RETURN IPRAM = 1 IPRAM(2) = 0 C CALL EXEC (3,LU2+700B,1) CALL DRSUB((1),IGET(1653B),IPRAM,LU2) IF (IPRAM(3).EQ.9999) RETURN C C DO 2030 K = 1,7,6 CALL FNDET(ITABS(K),IERR,IDCB,MYTYP,IWRD4) IF (IERR.NE.0) GO TO 2090 IF (MYTYP.EQ.3) CALL NFSUB(ITABS(K),LU1) IF (MYTYP.EQ.3) GO TO 2030 CALL EXEC (3,LU2+700B,1) CALL EXEC (2,LU2,ITABS(K),6) CALL DOIO(IWRD4+1,IWRD4+IGET(IWRD4),LU2,IPRAM) IF (IPRAM(3).EQ.9999) RETURN 2030 CONTINUE C C CALL FNDET(MNP,IERR,IDCB,MYTYP,IWRD4) IF (IERR.NE.0) GO TO 2090 IF (MYTYP.EQ.3) CALL NFSUB(MNP,LU1) IF (MYTYP.EQ.3) GO TO 2036 IMALG = 7 * (IGET(IWRD4)) CALL FNDET(MATAB,IERR,IDCB,MYTYP,IWRD4) IF (IERR.NE.0) GO TO 2090 IF (MYTYP.EQ.3) CALL NFSUB(MATAB,LU1) IF (MYTYP.EQ.3) GO TO 2036 CALL EXEC (3,LU2+700B,1) CALL EXEC (2,LU2,MATAB,6) C C DO 2035 I = IGET(IWRD4),IGET(IWRD4)+IMALG-1,7 CALL DOIO (I,I+6,LU2,IPRAM) IF (IPRAM(3).EQ.9999) RETURN IF (IGET(I+2).NE.0) GO TO 2032 ICOMES(12) = 2H GO TO 2034 2032 ICOMES(12) = IGET(IGET(I+2) +14B) ICOMES(13) = IGET(IGET(I+2) +15B) ICOMES(14) = IGET(IGET(I+2) +16B) 2034 CALL EXEC(2,LU2,ICOMES,-27) 2035 CONTINUE C C LISTS C 2036 IX = 1 DO 2037 I = 1,4 IX = IX + LLEN(I) CALL EXEC (3,LU2+700B,1) CALL EXEC (2,LU2,ILST(IX),LLEN(I+1)) CALL TRSUB(ITAD(I),(0),IPRAM,LU2) IF (IPRAM(3).EQ.9999) RETURN 2037 CONTINUE C C IEQTA = IGET(1650B) IEQTNO = IGET(1651B) C DOZ 2040 I = 1,IEQTNO CALL CNUMD(I,IEQLS(4)) CALL EXEC (3,LU2+700B,1) CALL EXEC(2,LU2,IEQLS,17) CALL TRSUB(IEQTA,(0),IPRAM,LU2) IF (IPRAM(3).EQ.9999) RETURN IEQTA = IEQTA+15 2040 CONTINUE C C CALL FNDET(IZZZ,IERR,IDCB,MYTYP,IWRD4) IF (IERR.NE.0) GO TO 2090 IF (MYTYP.EQ.3) CALL NFSUB(IZZZ,LU1) IF (MYTYP.EQ.3) GO TO 2060 CALL EXEC (3,LU2+700B,1) CALL EXEC (2,LU2,IZZZ,3) CALL DOIO(IWRD4,IWRD4,LU2,IPRAM) IF (IGET(IWRD4).LT.1) GO TO 2060 IWRD4 = IGET(IWRD4) IPRAM(3) = 1 C 2050 IF (IWRD4.LT.1) GO TO 2060 CALL DOIO(IWRD4-8,IWRD4-8,LU2,IPRAM) IF (IPRAM(3).EQ.9999) RETURN IPRAM(3) = 1 IWRD4 = IGET(IWRD4) GO TO 2050 C 2060 IPRAM(3) = 0 RETURN C C C 2090 CALL CNUMD(-(IERR),IFILE(8)) CALL EXEC (2,LU1,IFILE,10) C C RETURN END C C C *****DUMP THE SYSTEM TO LIST DEVICE***** C C SUBROUTINE DUSUB(IPRAM,LU2) DIMENSION IPRAM(6) IPRAM(5) = 1 CALL DOIO(0,32767,LU2,IPRAM) RETURN END C C C *****DUMP THE FOUR MAPS TO THE LIST DEVICE***** C C SUBROUTINE MASUB(IARRAY,LU2) DIMENSION IARRAY(37),IMPMS(5),IBUF(128) DATA IMPMS/2H ,2H ,2H ,2H M,2HAP/ CALL RDMAP (IBUF) DO 2260 I = 1,4 GO TO (2210,2220,2230,2240) I C C SYSTEM MAP C 2210 IMPMS(1) = 2HSY IMPMS(2) = 2HST IMPMS(3) = 2HEM GO TO 2250 C C USER MAP C 2220 IMPMS(1) = 2HUS IMPMS(2) = 2HER IMPMS(3) = 2H GO TO 2250 C C PORT A MAP C 2230 IMPMS(1) = 2HPO IMPMS(2) = 2HRT IMPMS(3) = 2H A GO TO 2250 C C PORT B MAP C 2240 IMPMS(3) = 2H B C C 2250 CALL EXEC(2,LU2,IMPMS,5) IND = I*32-31 DO 2255 J = 1,4 CALL PACK(8,0,IBUF(IND),IARRAY) CALL EXEC(2,LU2,IARRAY,37) IND = IND + 8 2255 CONTINUE 2260 CONTINUE RETU!RN END C C******** MAKE THE PROGRAM FRIENDLY FOR THE PEOPLE ************ C SUBROUTINE QUSUB(IGO,IPRS2,LU2,LU1) DIMENSION IGO(20) DIMENSION IDP(22) DIMENSION IX(8),I1(11),I2(13),I3(12),I4(9),I5(13),I6(12) DIMENSION I9(14),IG(11) DIMENSION IL(12),IO(15) DIMENSION IN(8),IPACK(23),MORUSE(8),ITEL30(9),ITEL31(17) DIMENSION ITEL1(9),ITEL2(9),ITEL3(16),ITEL4(5),ITEL5(19),ITEL6(12) DIMENSION ITEL7(6),ITEL8(5),ITEL9(23),ITEL10(5),ITEL11(26) DIMENSION ITEL12(7),ITEL14(22),ITEL15(11) DIMENSION ITEL19(6),ITEL20(6),ITEL21(6) DIMENSION IT(17),ITEL26(2),ITEL27(5),ITEL28(13) DIMENSION IFUN(4) C ^ DIMENSION IDU(9),IAN(12),IFI(17),IMA(12),ITEL13(5),IEP(16) DATA ITEL1/2H ,2HID,2H,P,2HRO,2HGR,2HAM,2H N,2HAM,2HE / DATA ITEL2/2H ,2HID,2H,S,2HEG,2HME,2HNT,2H N,2HAM,2HE / DATA ITEL3/2H ,2HID,2H,N,2HUM,2HBR,2H =,2H A,2HLL,2H I, & 2HD',2HS ,2HIN,2H S,2HYS,2HTE,2HM / DATA ITEL4/2H ,2HEQ,2H,N,2HUM,2HBR/ DATA ITEL5/2H ,2HEQ,2H,N,2HUM,2HBR,2H,N,2HUM,2HBR,2H , & 2HGI,2HVE,2HS ,2HEQ,2HTS,2H I,2HNC,2HLU,2HSI, & 2HVE/ DATA ITEL6/2H ,2HLM,2H,A,2HDD,2HRE,2HSS,2H,#,2H O,2HF , & 2HWO,2HRD,2HS / DATA ITEL7/2H ,2HLM,2H,A,2HDD,2HRE,2HSS/ DATA ITEL8/2H ,2HDR,2H,N,2HUM,2HBR/ DATA ITEL9/2H ,2HDR,2H,N,2HUM,2HBR,2H,N,2HUM,2HBR,2H , & 2HGI,2HVE,2HS ,2HDR,2HT ,2HEN,2HTR,2HIE,2HS , & 2HIN,2HCL,2HUS,2HIV,2HE / DATA ITEL10/2H ,2HIN,2H,N,2HUM,2HBR/ DATA ITEL11/2H ,2HIN,2H,N,2HUM,2HBR,2H,N,2HUM,2HBR,2H , & 2HGI,2HVE,2HS ,2HIN,2HT ,2HTA,2HBL,2HE ,2HEN, & 2HTR,2HIE,2HS ,2HIN,2HCL,2HUS,2HIV,2HE / DATA ITEL12/2H ,2HLL,2H,L,2HIS,2HT ,2HLU,2H# / DATA ITEL14/2H ,2HF/,2H,V,2HAL,2HUE,2H T,2HO ,2HFI,2HND, & 2H,S,2HTA,2HRT,2H A, & 2HDD,2HRE,2HSS,2H,#,2H O,2HF ,2HWO,2HRD,2HS / h DATA ITEL15/2H ,2HLI,2H,E,2HNT,2HRY,2H P,2HOI,2HNT,2H N, & 2HAM,2HE / DATA ITEL26/2H ,2HTA/ DATA ITEL27/2H ,2HTA,2H,L,2HU ,2H# / DATA ITEL28/2H ,2HTA,2H,L,2HU ,2H#,,2HTR,2HK ,2H#,, & 2H #,2H O,2HF ,2HTR,2HKS/ DATA ITEL19/2H ,2HEX,2H ,2H ,2HEX,2HIT/ DATA ITEL20/2H ,2HEN,2H ,2H ,2HEX,2HIT/ DATA ITEL21/2H ,2H/E,2H ,2H ,2HEX,2HIT/ DATA ITEL30/2H ,2HDP,2H,V,2HAL,2HUE,2H,*,2H,V,2HAL,2HUE/ DATA ITEL31/2H ,2HTR,2H,S,2HTA,2HRT,2H L,2HOC,2HAT,2HIO,2HN,, &2HLI,2HST,2H D,2HEL,2HIM,2HIT,2HER/ DATA IX/2H I,2HNP,2HUT,2H ,2HFU,2HNC,2HTI,2HON/ DATA I1/2H ,2HID,2H ,2HLI,2HST,2H I,2HD ,2HSE,2HGM,2HEN,2HT / DATA I2/2H ,2HEQ,2H ,2HLI,2HST,2H E,2HQT,2H A,2HND,2H E,2HXT, & 2HEN,2HTS/ DATA I3/2H ,2HDR,2H ,2HLI,2HST,2H D,2HEV,2H R,2HEF,2H T,2HAB & / DATA I4/2H ,2HLM,2H ,2HLI,2HST,2H M,2HEM,2HOR,2HY / DATA I5/2H ,2HIN,2H ,2HLI,2HST,2H I,2HNT,2HER,2HUP,2HT ,2HTA, & 2HBL,2HE / DATA I6/2H ,2HLL,2H ,2HCH,2HAN,2HGE,2H L,2HIS,2HT ,2HDE,2HVI, & 2HCE/ DATA I9/2H ,2HF/,2H ,2HFI,2HND,2H A,2H V,2HAL,2HUE,2H I,2HN , & 2HME,2HMO,2HRY/ DATA IG/2H ,2HLI,2H ,2HLI,2HST,2H E,2HNT,2HRY,2H P,2HOI,2HNT/ DATA IL/2H ,2H/E,2H O,2HR ,2HEN,2H O,2HR ,2HEX,2H T,2HO , &2HEX,2HIT/ DATA IDP/2H ,2HDP,2H ,2HDI,2HSP,2HLA,2HY ,2HIN,2HPU,2HT , &2HIN,2H O,2HCT,2HAL,2H D,2HEC,2HIM,2HAL,2H &,2H A,2HSC,2HII/ DATA IN/2H ,2HTR,2H ,2HTR,2HAC,2HE ,2HLI,2HST/ DATA IPACK/2H ,2HA ,2HPK,2H A,2HFT,2HER,2H T,2HHE,2H I,2HNP, &2HUT,2H G,2HIV,2HES,2H A,2H P,2HAC,2HKE,2HD ,2HLI,2HST,2HIN, &2HG / DATA MORUSE/2H ,2HOR,2H U,2HSE,2H ,2H ,2HPK,2H, / DATA IT/2H ,2HTA,2H ,2HLI,2HST,2H T,2HRA,2HCK,2H A,2HSS, &2HIG,2HNM,2HEN,2HT ,2HTA,2HBL,2HE / DATA IO/2H ,2HFO,2HR ,2HMO,2HRE,2H I,2HNF,2HO ,2HDO,2H A, & 2H ?,2H?,,s2HIN,2HPU,2HT / DATA IFUN/2H,*,2H,/,2H,+,2H,-/ C ^ DATA IDU/2H ,2HDU,2H ,2HDU,2HMP,2H S,2HYS,2HTE,2HM / DATA IAN/2H ,2HAN,2H ,2HAN,2HAL,2HYS,2HIS,2H O,2HF ,2HSY, & 2HST,2HEM/ DATA IFI/2H ,2HFI,2H ,2HSP,2HEC,2HIF,2HY ,2HCR,2HAS,2HHE, & 2HD ,2HSY,2HST,2HEM,2H F,2HIL,2HE / DATA IMA/2H ,2HMA,2H ,2HDU,2HMP,2H T,2HHE,2H F,2HOU,2HR , & 2HMA,2HPS/ DATA IEP/2H ,2HEP,2H ,2HEJ,2HEC,2HT ,2HPA,2HGE,2H I,2HF , & 2HLI,2HNE,2H P,2HRI,2HNT,2HER/ DATA ITEL13/2H ,2HFI,2H,N,2HAM,2HR / DO 9025 I = 1,20 IF(IPRS2.EQ.IGO(I)) GO TO(9100,9200,9300,9400,9500,9600,9700, &9800,9900,9910,9930, &9984,9982,9950,9960,9970,9050,9940,9940,9940) I 9025 CONTINUE C C CALL EXEC(2,LU2,IX,8) CALL EXEC(2,LU2,I1,11) CALL EXEC(2,LU2,I2,13) CALL EXEC(2,LU2,I3,12) CALL EXEC(2,LU2,I4,9) CALL EXEC(2,LU2,I5,13) CALL EXEC(2,LU2,IT,17) CALL EXEC(2,LU2,IN,8) CALL EXEC(2,LU2,IDP,22) CALL EXEC(2,LU2,I6,12) CALL EXEC(2,LU2,I9,14) CALL EXEC(2,LU2,IG,11) C ^ CALL EXEC(2,LU2,IFI,17) CALL EXEC(2,LU2,IDU,9) CALL EXEC(2,LU2,IAN,12) CALL EXEC(2,LU2,IMA,12) CALL EXEC(2,LU2,IEP,16) CALL EXEC(2,LU2,IL,12) CALL EXEC(2,LU2,IO,15) CALL EXEC(2,LU2,IPACK,23) RETURN C C 9050 CALL IWSUB(LU1) RETURN C C 9100 CALL EXEC(2,LU2,ITEL1,9) CALL EXEC(2,LU2,ITEL2,9) CALL EXEC(2,LU2,ITEL3,16) GO TO 9999 9200 CALL EXEC(2,LU2,ITEL4,5) CALL EXEC(2,LU2,ITEL5,19) GO TO 9999 9300 CALL EXEC(2,LU2,ITEL8,5) CALL EXEC(2,LU2,ITEL9,23) GO TO 9999 9400 CALL EXEC(2,LU2,ITEL7,6) CALL EXEC(2,LU2,ITEL6,12) GO TO 9999 9500 CALL EXEC(2,LU2,ITEL10,5) CALL EXEC(2,LU2,ITEL11,26) GO TO 9999 9600 CALL EXEC(2,LU2,ITEL12,7) RETURN 9700 CALL EXEC(2,LU2,ITEL13,5) RETURN 9800> CALL EXEC(2,LU2,ITEL14,22) RETURN 9900 CALL EXEC(2,LU2,ITEL15,11) RETURN 9910 CALL EXEC(2,LU2,IEP,2) RETURN 9930 CALL EXEC(2,LU2,ITEL26,2) CALL EXEC(2,LU2,ITEL27,5) CALL EXEC(2,LU2,ITEL28,13) GO TO 9999 9940 CALL EXEC(2,LU2,ITEL21,6) CALL EXEC(2,LU2,ITEL20,6) CALL EXEC(2,LU2,ITEL19,6) RETURN 9950 CALL EXEC(2,LU2,IAN,2) GO TO 9999 9960 CALL EXEC(2,LU2,IDU,2) RETURN 9970 CALL EXEC(2,LU2,IMA,2) RETURN 9982 CALL EXEC(2,LU2,ITEL30,5) DO 9983 I = 1,4 ITEL30(6) = IFUN(I) CALL EXEC(2,LU2,ITEL30,9) 9983 CONTINUE RETURN 9984 ITEL31(2) = IPRS2 CALL EXEC(2,LU2,ITEL31,17) RETURN C 9999 MORUSE(6) = IPRS2 CALL EXEC(2,LU2,MORUSE,8) RETURN C ^ END END$ FTN4 SUBROUTINE DOIO(ISTART,ISTOP,LU,IPRAM) DIMENSION IBUF(40),IMESS(29),IPRAM(6),LMESS(17) DIMENSION IPAGE(11) INTEGER OBUF(37) C DATA IMESS/2H ,2HWO,2HRD, &2H ,2HLO,2HCA,2HTI,2HON,2H , &2HVA,2HLU,2HE(,2H8),2H ,2HVA,2HLU,2HE(,2H10,2H) , &2HVA,2HLU,2HE(,2HAS,2H) ,2HVA,2HLU,2HE(,2HSY,2HM)/ DATA IPAGE/2H ,2HPH,2HYS,2HIC,2HAL,2H P,2HAG,2HE / DATA LMESS/2H ,2HLO,2HCA,2HTI,2HON,2HS ,2H ,2H ,2H , &2H T,2HHR,2HOU,2HGH,2H / DATA IBUF/40*2H / C C C THE IPRAM ARRAY TELLS HOW TO DO THE I/O C IPRAM(1) = WORD # TO START COUNTING AT, C IPRAM(2) = 0 MEANS WORD COUNT TO BE IN DECIMAL C IPRAM(2) = 1 MEANS WORD COUNT TO BE IN OCTAL C IPRAM(3) = 0 MEANS PRINT HEADER. = 1 MEANS NO HEADER. C IPRAM(4) =-1 MEANS WE ARE DOING A CROSS MAP LOAD C IPRAM(5) = 1 MEANS A PACKED LISTING IS DESIRED C IPRAM(6) =+N MEANS A MAPPED IN LISTING OF PHYS MEMORY C WHERE N = PHYSICAL PAGE NUMBER C IPRAM(6) =-1 MEANS WE ARE DOING NORMAL I/O C C ISTART IS LOCATION TO START COUNTING AT C ISTOP IS LOCATION TO STOP COUNTING AT. C LU IS THE OUTPUT LU. C C K = IPRAM-1 C IF(IPRAM(5).EQ.1) GO TO 500 C IF(IPRAM(6).LT.0) GO TO 1 CALL CNUMD(IPRAM(6),IPAGE(9)) CALL EXEC(2,LU,IPAGE,11) 1 IF(IPRAM(3).EQ. 0) CALL EXEC(2,LU,IMESS,-58) C C DO 100 I = ISTART,ISTOP K = K + 1 IF((IPRAM(6).LT.0).OR.(K.NE.1024)) GO TO 2 K = 0 IPRAM(6) = IPRAM(6) + 1 2 CALL CNUMD(K,IBUF(1)) IF(IPRAM(2) .EQ.1) CALL CNUMO(K,IBUF(1)) CALL CNUMO(I,IBUF(5)) IF(IPRAM(6).LT.0) GO TO 5 CALL CNUMD(IPRAM(6),IBUF(5)) IBUF(5) = 2HPG 5 IF(IPRAM(4) .NE.-1) GO TO 50 CALL CNUMO(IXGET(I),IBUF(10)) CALL CNUMD(IABS(IXGET(I)),IBUF(15)) IF(IXGET(I).LT.0)IBUF(15) = IBUF(15) + 6400B C CALL IASCI(IXGET(I),IBUF(22)) CALL INVRS(I,IXGET(I),IBUF(25),16,IWRD) C GO TO 75 50 CALL CNUMO(IGET(I),IBUF(10)) CALL CNUMD(IABS(IGET(I)),IBUF(15)) IF (IGET(I).LT.0) IBUF(15) = IBUF(15) + 6400B C CALL IASCI(IGET(I),IBUF(22)) CALL INVRS(I,IGET(I),IBUF(25),16,IWRD) C 75 CALL EXEC(2,LU,IBUF,24+IWRD) IF(IFBRK(IDMY))200,100 100 CONTINUE GO TO 300 200 IPRAM(3) = 9999 300 RETURN C C 500 K = ISTART 550 IF((ISTOP-K).LT.0) RETURN CALL CNUMO(K,LMESS(7)) CALL CNUMO(ISTOP,LMESS(15)) IF(((ISTOP-K)/64).GT.0) CALL CNUMO(K + 63,LMESS(15)) C IF(IPRAM(6).LT.0) GO TO 551 CALL CNUMO(IPRAM,LMESS(7)) CALL CNUMO(IPRAM+ISTOP - ISTART,LMESS(15)) CALL CNUMD(IPRAM(6),IPAGE(9)) C 551 CALL EXEC(3,LU + 700B,1) IF(IPRAM(6).GE.0) CALL EXEC(2,LU,IPAGE,11) CALL EXEC(2,LU,LMESS,17) CALL EXEC(3,LU + 1100B,1) C DO 800 I = 1,8 C CALL PACK (ISTOP - K + 1,IPRAM(4)+1,K,OBUF) CALL EXEC(2,LU,OBUF,37) C K = K + 8 IF((ISTOP-K).LT.0) RETURN IF(IFBRK(IDMY)) 200,800 800 CONTINUE C GO TO 550 END SUBROUTINE DISC3(LU,ITRK,ISECTR,INDEX,IARRAY,IPRAM,LU2,IDISC) DIMENSION IARRAY(64),IPRAM(6),IBUF(36) INTEGER OBUF(37) DIMENSION IDISK(25),IDISC(28) DATA IDISK/2H ,2HWO,2HRD,2H ,2H V,2HAL,2HUE,2H(8,2H) , & 2H V,2HAL,2HUE,2H(1,2H0),2H ,2HVA,2HLU,2HE(, & 2HAS,2H) ,2HVA,2HLU,2HE(,2HSY,2HM)/ DATA IBUF/36*2H / C C C THIS SUBROUTINE DOES THE I/O FOR ALL DISC READS. THE MAIN C PROGRAM DOES THE READ PASSING THE 64 WORDS READ IN IARRAY. C THIS ROUTINE FORMATS THE OUTPUT. C C IN ADDITION IT DOES THE OUTPUT FOR THE ' DP ' INSTRUCTION C THIS IS A SLIGHT PERTERBATION FROM THE SUBROUTINES REAL C PURPOSE. C C C IF IPRAM(1) #0 THEN 64 WORDS ARE OUTPUT C IF IPRAM(1) =0 THEN ONLY ONE WORD IS OUTPUT C IF IPRAM(3) # 0 THEN NO DISC TRK & SECTOR INFO IS PRINTED C IF IPRAM(4) = 1 THEN 64 WORDS ARE OUTPUT PLUS THE WORD # C IF IPRAM(5) = 0 THEN A PACKED LISTING IS DESIRED C IF IPRAM(6) = 1 THEN DONT PRINT ANY HEADER INFOD C CALL CNUMD(INDEX,IDISC(26)) IF(IPRAM .EQ.0) GO TO 55 NUMBR = 64 INDEX = 1 ID = 21 IF(IPRAM(4).EQ.1) ID = 28 GO TO 100 C 55 NUMBR = 1 ID = 28 C 100 IF(IPRAM(6) .EQ. 1) GO TO 150 CALL CNUMD(LU,IDISC(4)) CALL CNUMD(ITRK,IDISC(11)) CALL CNUMD(ISECTR,IDISC(19)) IF(IPRAM(3).NE.1) CALL EXEC(2,LU2,IDISC,ID) IF(IPRAM(5).NE.1) CALL EXEC(2,LU2,IDISK,25) C SEE IF JUST LIST OF DISC LOCATION DESIRED IF(IPRAM(2).EQ.1) RETURN C IF(IPRAM(5).EQ.1) GO TO 2000 C C 150 DO 1020 I = INDEX,NUMBR C CALL IASCI(IARRAY(I),IBUF(17)) C C C C CALL CNUMD(I,IBUF) CALL CNUMO(IARRAY(I),IBUF(5)) CALL CNUMD(IABS(IARRAY(I)),IBUF(10)) IF (IARRAY(I).LT.0) IBUF(10) = IBUF(10) + 6400B CALL INVRS (0,IARRAY(I),IBUF(21),16,IWRD) CALL EXEC(2,LU2,IBUF,20+IWRD) IF(IFBRK(IDUMY)) 999,1020 1020 CONTINUE RETURN 999 IPRAM(3) = 9999 RETURN C C SjC FIX UP A POINTER TO THE ARRAY IARRAY SO THAT THE C PACK ROUTINE WILL WORK. C 2000 CALL DUMMY(IARRAY,IPOINT) C DO 3000 I = 1,8 CALL PACK(8,1,IPOINT,OBUF) CALL EXEC(2,LU2,OBUF,37) IPOINT = IPOINT + 8 IF(IFBRK(IDUMY)) 999,3000 3000 CONTINUE END END$ ASMB,L NAM PACK4,7 ENT PACK,IASCI,DUMMY,MAPXX * ENT IGET,IPUT EXT $LIBR,$LIBX,.ENTR,.ENTP,$IDEX,IGET * * * * * * * * * * * * * * * * * THIS ROUTINE ACCEPTS UP TO 8 WORDS OF INPUT AND CONVERTS THOSE * WORDS TO OCTAL ASCII IN A PACKED FORMAT . EIGHT WORDS OF OCTAL * DELIMITED BY A * AND THEN THEIR ASIII REPRESENTATION. * THE WORDS MAY EITHOR BE IN THE CRASHED SYSTEM OR THE 128 * WORDS OF THE MAP REGISTERS. * THE ROUTINE IS FORTRAN CALLABLE AS: * * CALL PACK(#WORDS,MAP,INPUT BUFFER,OUTPUT BUFFER) * * MAP = 0 MAPS * MAP >= 1 CRASHED SYSTEM * * THE OUTPUT BUFFER MUST BE 36 WORDS LONG * * * KOUNT NOP MAP NOP INBUF NOP ASSLC NOP PACK NOP JSB .ENTR GET THE PARAMETER ADDRESSES DEF KOUNT * LDA KOUNT,I GET THE # OF WORDS TO CONVERT BACK CMA,INA MAKE NEG AND SSA,RSS IF 0 OR NEG WORDS INPUT THEN FORGET IT JMP PACK,I STA KOUNT NOW SAVE FOR LOOP * ADA D8 ADD 8 TO SEE IF INPUT # SSA,RSS GREATER THAN 8 JMP CONTU ALL IS WELL ! LDA D8 JMP BACK * * CONTU LDA MAP,I GET THE MAP AND SAVE STA MAP FOR LATER * SZA,RSS SYS OR MAPS? JMP NOID MAPS OK AS IS LDA INBUF,I SYS NEED TO TAKE CARE OF STA INBUF INDIRECTION * NOID LDA ASSLC GET THE ADDRESS LDB ASSLC TWICE STB TEMP SAVE TEMPORARIALLY INA BUMP IT CLE,ELA CONVERT TO A BYTE ADDRESS STA ASSLC AND SAVE FOR LATER ADB D29 NOW DEFINE THE ASCII ADDRESSt STB OABUF AND SAVE FOR THE IASCI SUBROUTINE STB YTEMP * LDA DM37 NOW CLEAR OUT THE OLD BUFFER STA XTEMP LDB BLANK GET A BLANK READY * LOOPX STB TEMP,I SET A BLANK INTO THE OUTPUT BUFFER ISZ TEMP STEP BUFFER POINTER ISZ XTEMP DONE YET ? JMP LOOPX NO * * * LOOP LDA MAP CRASHED SYS OR MAPS? SZA,RSS MAPS? JMP MAPPP YES * JSB IGET NO DEF *+2 GET THE INFO FROM THE DEF INBUF CRASHED FILE LDB A JMP OUT * MAPPP LDB INBUF,I GET THE INFO FROM THE MAP OUT STB XTEMP SAVE FOR THE IASCI SUBROUTINE JSB ASCI AND CONVERT TO OCTAL ASCII * JSB IASCI AND PLACE THROUGH THE ASCII FILTER DEF *+3 DEF XTEMP DEF TEMP * STB OABUF,I PUT RESULT INTO THE OUTPUT BUFFER * ISZ INBUF BUMP OUR ISZ OABUF POINTERS ISZ ASSLC AND THE CHAR ADDRESS * ISZ KOUNT ARE WE DONE ? JMP LOOP NOT YET * CCB YES,GET THE END OF THE OCTAL #'S ADB YTEMP LDA B,I NOW GET THE LAST WORD IOR ASTRK PUT IN AN ASTRISK STA B,I NOW PUT IT BACK * JMP PACK,I RETURN TO THE CALLER * * * * ** DATA TO OCTAL ASCII CONVERSION ** SPC 1 * CALLING SEQUENCE: LDB (DATA WORD) * LDA (ADDRESS AT START OF STORAGE) * JSB ASCI SPC 1 ASCI NOP OUTPUT 6 DIGITS * STA ASSLC SET THE ADDRESS (NOT USED AT THE MOMENT ) LDA KM6 GET NO. OF DIGITS TO CONVERT RBL MOVE FIRST DIGIT TO LOW B JSB NUM.F CONVERT THE NUMBER JMP ASCI,I RETURN SPC 2 *SCI2 NOP 5 DIGITS & BLANK * LDA KM5 GET NO OF DIGITS TO CONVERT * BLF POSITION FIRST DIGIT * JSB NUM.F CONVERT THE NUMBER * JMP AShCI2,I RETURN * * *********************************** * * CONVERT DIGITS TO ASCII BASE 8 * * *********************************** * * NUM.F NOP STA T1NUM SAVE THE DIGIT COUNT CPA KM6 IF 6 THEN CLA,INA,RSS USE 1 AS A MASK FOR FIRST DIGIT NUM00 LDA K7 ELSE USE 7 AND B ISOLATE THE DIGIT ADA "0" ADD 60 TO MAKE ASCII JSB PUT.F PUT IN THE BUFFER BLF,RBR POSITION THE NEXT DIGIT ISZ T1NUM DONE? JMP NUM00 NO DO NEXT DIGIT * JMP NUM.F,I YES RETURN * T1NUM NOP KM6 DEC -6 * SPC 2 * * ******************************** * * PUT CHARACTER IN LIST BUFFER * * ******************************** * PUT.F NOP STB T1PUT SAVE B LDB ASSLC GET CURRENT BUFFER ADDRESS AND B177 ISOLATE THE CHARACTER CLE,ERB WORD ADDRESS TO B E=UPPER,LOWER FLAG SEZ,RSS IF UPPER CHAR ALF,SLA,ALF POSITION AND SKIP XOR B,I INCLUSION OF HIGHER CHAR. XOR B40 ADD,TAKE AWAY LOWER BLANK STA B,I SET THE WORD DOWN ISZ ASSLC STEP THE CHAR ADDRESS LDB T1PUT RESTORE B JMP PUT.F,I RETURN * T1PUT NOP OABUF NOP B40 OCT 40 K7 DEC 7 D8 DEC 8 "0" OCT 60 D29 DEC 29 DM37 DEC -37 BLANK ASC 1, ASTRK OCT 52 LOWER BYTE = * B177 OCT 177 TEMP NOP D64 DEC 64 D1024 DEC 1024 XTEMP NOP YTEMP NOP ADDRS NOP PONTR NOP DUMMY NOP THIS IS A DUMMY SUBROUTINE TO FIX UP A POINTER JSB .ENTR SO THAT THE PACK ROUTINE CAN WORK WITH ARRAYS DEF ADDRS IN A PROGRAM AS WELL AS MEMORY ADDRESSES. * LDA ADDRS STA PONTR,I JMP DUMMY,I SPC 1 * * * * * * * THE IASCI SUBROUTINE TAKES ONE WORD OF INPUT AND CONVERTS THAT * WORD TO ASCII. IF ANY BYTE CAN NOT BE CONVERTED TO ASCII THEN * AN ASCII BLANK IS RETURNED FOR THAT BYTE. * * * CALLING SEQUENCE : JSB IASCI * DEF RETURN * DEF VALUE VALUE TO BE CONVERTED * DEF ASCII RETURNED ASCII VALUE * ---- * * ON RETURN, THE B REGISTER HAS THE ASCII VALUE * VALUE NOP LOCTN NOP IASCI NOP JSB .ENTR DEF VALUE * LDA VALUE,I GET THE VALUE TO CONVERT STA TEMP1 SAVE IT AND M377 KEEP ONLY LOWER BYTE JSB CNVRT AND CONVERT STB VALUE SAVE THE RETURNED VALUE * LDA TEMP1 GET THE WORD BACK AGAIN AND M1774 KEEP ONLY THE UPPER BYTE ALF,ALF SHIFT TO LOW ORDER JSB CNVRT AND GO CONVERT BLF,BLF PUT INTO UPPER BYTE ADB VALUE NOW MERGE ADD IN LOWER BYTE STB LOCTN,I AND RETURN IT TO THE USER JMP IASCI,I * * * THIS SUBROUTINE CONVERTS LOWER BYTE OF A TO ASCII AND PLACES * THE RETURNED ASCII INTO B * CNVRT NOP STA B AND SAVE CMA,INA ADA B135 SSA IS IT OK JMP BLNK2 NO LDA B40 CMA,INA ADA B SSA OK ? BLNK2 LDB B40 NO JMP CNVRT,I * * * * A EQU 0 B EQU 1 M1774 OCT 177400 B135 OCT 137 M377 OCT 377 TEMP1 NOP DM64 DEC -64 SIGN OCT 100000 * * * ************************************** * * MAP IN ANY PAGE OF PHYSICAL MEMORY * * ************************************** * * * THE PURPOSE OF THIS SUBROUTINE IS TO MAP IN THE PAGE REQUESTED * AND READ 64 WORDS OF THAT MAPPED PAGE. THE ROUTINE IS FORTRAN * CALLABLE. TO BE USED ONE OF TWO CONDITIONS MUST BE MET. * THE PROGRAM USING THE ROUTINE MUST NOT BE GREATER THAN 30K * IN LENGTH (IE IF PROGRAM IS 10K AND LARGEST ADDRESSABLE * PARTITION IS 12K YOUR OK. IF LARGEST ADDRESSABLE PARTITION IS * 11K YOU HAVE PROBLEMS). ALTERNATELY IF THE PROGRAM EXTENDS * INTO THE LAST TWO PAGES OF MEMORY MAKE SURE THIS ROUTINE * AND THE INPUT PARAMETERS TO THIS ROUTINE DO NOT RESIDE THERE * AND YOU WILL BE ALLRIGHT. * * THE PROGRAM MODIFIES THE USER MAP REGISTERS BUT ALSO RESTORES THEM. * * * CALLING SEQUENCE JSB MAPXX * DEF RETURN * DEF PAGE# PHYSICAL PG # (0-1023) * DEF OFFSET (NOT GREATER THAN 1023 DECIMAL) * DEF ARRAY (ARRAY OF 64 WORDS) * DEF FLAG 1/2/3 READ/WRITE/READ BUT DON'T * UPDATE PAGE# OR OFFSET * DEF NVAL NEW VALUE (FLAG = 2) * * * PAGE# NOP OFSET NOP ARRAY NOP FLAG NOP NVAL NOP * MAPXX NOP JSB $LIBR NOP JSB .ENTP DEF PAGE# * LDA MPBUF GET THE ADDRESS OF THE MAP BUFFER ADA SIGN SET THE SIGN BIT SO IT IS A READ USA GET THE USER MAP * LDA MAP31 GET THE OLD VALUE STA OLD31 AND SAVE IT LDA MAP32 OLD VALUE. STA OLD32 SAVE THIS TOO LDB PAGE#,I GET THE DESIRED PAGE STB MAP31 PUT IT INTO THE OLD PAGE INB BUMP PAGE # TO ACCOUNT FOR OVERFLOW STB MAP32 SET NEXT PAGE INTO THE LAST LOCATION * LDA MPBUF GET THE USER MAP BUFFER ADDRESS USA !!!!!! LOAD THE USER MAP !!!!!! * LDA FLAG,I GET THE READ WRITE FLAG CPA D2 ARE WE READING OR WRITING ? JMP WRTPG WRITING ! * * * * LDA DM64 GET LOOP INDEX STA XTEMP LDA START GET THE START ADDRESS ADA OFSET,I ADD IN THE OFFSET STA YTEMP SAVE POINTER LDA ARRAY GET ARRAY ADDRESS MLOOP LDB YTEMP,I GET THE WORD STB A,I AND PUT INTO BUFFER ISZ YTEMP BUMP OUR INA POINTERS dISZ XTEMP DONE ? JMP MLOOP NO * * RTMAP LDA OLD31 YES RESTORE THE USER MAP STA MAP31 LDA OLD32 STA MAP32 * LDA MPBUF GET THE ADDRESS USA !!!!!!!!!!RESTORE THE USER MAP!!!!!!!!!!!!!!!! JSB $LIBX RESTORE INTERUPTS DEF *+1 DEF *+1 * LDA FLAG,I GET THE FLAG CPA D1 DO WE UPDATE THE PAGE # & OFFSET RSS YES JMP MAPXX,I NO, SO RETURN TO THE CALLER * LDA OFSET,I GET THE OFFSET ADA D64 ADD 64 WORDS FOR WHAT WE JUST DID CLB DIV D1024 DIVIDE NEW OFFSET BY # OF WORDS IN PAGE ADA PAGE#,I ADD OLD PAGE # TO GIVE NEW PAGE # STA PAGE#,I AND SEND THE RESULT BACK STB OFSET,I SEND THE NEW OFFSET BACK TOO * JMP MAPXX,I RETURN TO CALLER * * WRTPG LDA START GET THE START ADDRESS ADA OFSET,I ADD THE OFFSET INTO THE PAGE LDB NVAL,I GET THE NEW VALUE STB A,I AND SET IT UP. JMP RTMAP RESET THE MAP & RETURN * * * D1 DEC 1 D2 DEC 2 START OCT 74000 START ADDRESS OF NEWLY MAPPED AREA MPBUF DEF MAPIT MAPIT BSS 30 BUFFER FOR 1ST 30 WORDS OF USER MAP MAP31 NOP THIS LOCATION IS USED TO CHANGE MAP MAP32 NOP THIS LOCATION IS FOR I/O OVERFLOW OLD31 NOP OLD32 NOP * * END FTN4,L SUBROUTINE FNDET(IEPN,IERR,IDCB,MYTY,IWRD4) C C C *****GIVEN AN ENTRY POINT NAME THIS SUBROUTINE C FINDS THE ENTRY IN THE SNAPSHOT FILE AND C RETURNS THE TYPE AND THE 4TH WORD OF THE ENTRY C C DIMENSION IEPN(3),IDCB(144),IBUFR(128) C C DO 200 I = 1,32767 CALL READF(IDCB,IERR,IBUFR,128,ILEN,I) IF (IERR.LT.O) GO TO 250 C C DO 100 J = 1,128,4 IF (((IBUFR(J).EQ.IEPN(1)).AND. &(IBUFR(J+1).EQ.IEPN(2))).AND. &(IOR(IAND(IBUFR(J+2),177400B),40B).EQ.IEPN(3))) GO TO 300 C C 100 CONTINUE C C 200 CONTINUE C C 250 IF (IERR.NE.-12) RETURN MYTY = 3 IERR = 0 RETURN C C 300 MYTY = IAND(IBUFR(J+2),177B) +1 IWRD4 = IBUFR(J+3) RETURN END END$ ASMB,Q NAM IGET,7 ENT MINIT,MCLOS,IGET,RDMAP EXT OPEN,CLOSE,READF,EXEC,MERR SUP * * MINIT NOP LDA MINIT,I GET RETURN ADDRESS STA RETRN SAVE RETURN ISZ MINIT DLD MINIT,I GET THE NAMR & LU ADDRESSES LDB B,I GET LU STB LU SAVE LU STA NAME SAVE THE DEF TO THE NAME ADA D4 STA SC AND DEF TO SEC CODE INA STA CR AND DEF TO CR# * JSB OPEN WELL, OPEN THE CRASHED FILE DEF *+7 DEF IDCB1 SET THE DCB DEF IERR NAME NOP DEF PROGRAM NAME DEF D1 NON-EXCLUSIVE OPEN SC NOP SECURITY CODE CR NOP CART REF * SSA ANY ERRORS ? JMP ERRO1 YES LET ERRO1 HANDLE IT. * LDB IDCB1+2 GET THE FILE TYPE CPB D1 BETTER BE A TYPE 1. JMP RETRN,I IT IS * LDA DM32K NO, SO SET A SPECIAL FLAG JMP ERRO2 AND LET ERRO2 HANDLE IT. * * IDCB1 BSS 16 DCB IBUFR BSS 128 BUFFER DM32K DEC -32767 D1 DEC 1 D4 DEC 4 RETRN NOP LU NOP * * SKP * * * THIS IGET ROUTINE IS IN REALITY A FILE IGET ROUTINE * IT TRANSLATES MEMORY ADDRESSES INTO ADDRESSES IN THE * FILE. * * IGET NOP DLD IGET,I GET RETURN AND ADDRESS STA IGET SAVE RETURN * LDA B,I GET ADDRESS OF DESIRED DATUM CLB DIV D128 FIGURE OUT WHICH RECORD IT IS INA RECORDS COUNT FROM 1 NOT 0 STA REC# SAVE THE RECORD # STB OFSET AND THE OFSET INTO THE BUFFER * JSB READF NOW GO PULL IT OFF THE DISC DEF *+7 DEF IDCB1 SPECIFY THE FILE DEF IERR DIBUF DEF IBUFR O DEF D128 DEF LEN DEF REC# * SSA ANY ERRORS ? JMP ERRO3 YES * LDA DIBUF GET ADDRESS OF BUFFER ADA OFSET ADD IN OFSET LDA A,I PULL IT IN JMP IGET,I AND RETURN * * OFSET NOP OFFSET INTO 128 WORD SECTOR WHERE WORD IS REC# NOP RECORD NUMBER OF WORD D128 DEC 128 * * SKP * * * THIS ROUTINE READS THE MAPS IN THE LAST RECORD OF THE * CRASH FILE AND RETURNS THEM IN THE BUFFER PARAMETER. * * RDMAP NOP DLD RDMAP,I GET RETURN AND BUFFER ADDRESS STA RDMAP SAVE RETURN STB DBUF SET UP WHICH BUFFER TO READ INTO * JSB READF GO GET THE RECORD DEF *+7 DEF IDCB1 SPECIFY THE FILE DEF IERR DBUF DEF IBUFR THIS IS FILLED IN **NOT REALLY IBUFR** DEF D128 DEF LEN DEF D257 MAPS ARE IN REC. 257 * SSA ANY ERRORS? JMP ERRO3 YES * JMP RDMAP,I NO-RETURN * * D257 DEC 257 * * SKP * * * MCLOS NOP JSB CLOSE DEF *+3 DEF IDCB1 DEF IERR * SSA ANY ERRORS JMP ERRO4 THEN GO REPORT * ISZ MCLOS BUMP RETURN JMP MCLOS,I * * SKP * * ERRO1 STA IERR SAVE ERROR NUMBER JSB MERR GO PRINT ERROR MESSAGE DEF *+4 DEF IERR ERROR NUMBER DEF D1 OPEN ERROR DEF LU LU # * JMP RETRN,I JUST GO BACK * * * * ERRO2 JSB EXEC GO PRINT ERROR MESSAGE DEF *+5 THEN HALT DEF D2 WRITE CODE DEF LU WHERE TO SEND MESSAGE DEF E2MES FILE NOT TYPE 1 DEF E2LEN * JSB MCLOS CLOSE THE FILE NOP JMP RETRN,I GO BACK * * E2MES ASC 18,/CDA4: CRASH FILE NOT A TYPE 1 FILE E2LEN DEC 18 LENGTH OF E2MES * * * * ERRO3 STA IERR SAVE ERROR NUMBER JSB MERR  GO PRINT ERROR MESSAGE DEF *+4 DEF IERR ERROR NUMBER DEF D16 READ ERROR DEF LU LU # * JSB MCLOS CLOSE THE FILE NOP JMP QUIT GO BYE BYE * * * * ERRO4 STA IERR SAVE ERROR NUMBER JSB MERR GO PRINT ERROR MESSAGE DEF *+4 DEF IERR ERROR NUMBER DEF D31 CLOSE ERROR DEF LU LU # * * * * QUIT JSB EXEC HALT DEF *+2 TOO BAD DEF D6 * * D2 DEC 2 D6 DEC 6 D16 DEC 16 D31 DEC 31 * IERR NOP NOP NOP LEN NOP A EQU 0 B EQU 1 * * END ASMB,Q,C NAM INVRS,7 * * THIS ROUTINE INVERSE ASSEMBLES HP 21MX * INSTRUCTIONS * * THE CALLING SEQUENCE IS AS FOLLOWS * * JSB INVRS * DEF RTRN * DEF ADDRSS LOGICAL ADDRESS OF INSTRUCTION * DEF VALUE INSTRUCTION AT ADDRSS * DEF IBUF OUTPUT BUFFER * DEF ISIZE SIZE OF OUTPUT BUFFER * DEF IWRDS RETURNED NO OF WORDS FILLED * RTRN ... * * FORTRAN CALL: * * CALL INVRS(IADRS,VALUE,IBUF,ISIZE,IWRDS) * * ENT INVRS EXT .ENTR * * A EQU 0 B EQU 1 * * ADDRS BSS 1 VALUE BSS 1 BUFAD BSS 1 BSIZE BSS 1 WCNT BSS 1 INVRS NOP JSB .ENTR DEF ADDRS LDA BUFAD RAL MAKE BYTE ADDRESS STA BUFAD STA BPNTR LDB BSIZE,I GET BUFFER SIZE RBL MAKE INTO BYTES ADA B COMPUTE END OF BUFFER STA BFEND LDA ADDRS,I STA IADR SAVE ADDRESS OF INSTRUCTION LDA B2 SET NO OF WORDS/ENTRY STA INCR IN INCREMENT JSB LOAD FETCH INSTRUCTION STA INSTR STA TEMP AND B70K IS IT A MEMORY REFERENCE SZA JMP MRGI YES GO GET IT LDA INSTR NO ELA,ALF PUT SIGN IN E REG RAL AND BITS 10&11 IN BITS 0&1 SEZ IF E SET(I.E. SIGN) MUST BE I/O OR EIG JMP IOGI * AND B3 SET UP OP CODE TABLE COUNTER LDB M18 SHIFT ROTATE SLA LDB M12 ALTER SKIP STB CNTR ADA GRTBL GET ADDRESS OF GROUP TABLE LDB A,I * LOOP1 LDA TEMP FETCH REMAINING BITS OF INSTRUCTION AND B,I ARE ALL REQUIRED BITS SET XOR B,I SZA,RSS JMP FOND1 YES GO GET MNEMONIC LOP1A ADB INCR BUMP ADDRESS ISZ CNTR JMP LOOP1 * NFND LDA BUFAD IF WE FALL THROUGH NOT COMPLETELY STA BPNTR DEFINED SO JUST PRINT OCTAL LDA INSTR JSB PN JMP EXIT * IADR BSS 1 INCR BSS 1 INSTR BSS 1 TEMP BSS 1 CNTR BSS 1 BPNTR BSS 1 * B2 OCT 2 B3 OCT 3 B70K OCT 70000 M12 DEC -12 M18 DEC -18 BFEND BSS 1 * GRTBL DEF *+1 DEF SRGA DEF ASGA DEF SRGB DEF ASGB * MRGA1 DEF MRG-4 * FOND1 JSB POPCD PRINT MNEMONIC LDA B,I REMOVE OPCODE FROM AND B1777 INSTRUCTION XOR TEMP STA TEMP AND B1777 ARE ANY BITS LEFT SZA,RSS JMP EXIT NO,THEN RETURN LDA COMMA JSB TYO PRINT COMMA JMP LOP1A GO LOOK FOR REST * B1777 OCT 001777 COMMA OCT 54 * MRGI LDA INSTR ALF,RAL AND B17 RAL TIMES 2 ADA MRGA1 COMPUTE TABLE POSITION LDB A JSB POPCD PRINT MNEMONIC LDA INSTR COMPUTE ADDRESS AND B2000 MERGE WITH PROPER PAGE SZA LDA IADR XOR INSTR AND B76K XOR INSTR JSB PADR PRINT ADDRESS JMP EXIT * B17 OCT 17 B2000 OCT 2000 B76K OCT 76000 * IOGI LDB IOGTB FETCH TABLE OF LOOP FOR I/O SLA,RSS IF EIG INSTEAD LDB DSGTB THEN GET TABLE FOR EIG'S STB PNTR PARMETERS LDB PNTR,I SET B TO START ISZ PNTR LOOP2 LDA PNTR,I GET COUNT FOR THIS TYPE SSA JMP LOP2A IF NEGATIVE CONTINUE * SZA,RSS IF ZERO THEN DONE JMP NFND LDA B3 STA INCR ELSE SET INCREMENT TO 3 LDA PNTR,I AND MAKE COUNT NEGATIVE CMA,INA * LOP2A STA CNTR ISZ PNTR LOOP3 LDA INSTR FETCH INSTRUCTION XOR B,I SEARCH FOR MATCH AND PNTR,I MASK UNWANTED BITS SZA,RSS JMP FOND2 ADB INCR BUMP ADDRESS IN OPCTBL ISZ CNTR DONE WITH THIS TYPE JMP LOOP3 NO CONTINUE ISZ PNTR JMP LOOP2 YES GO TO NEXT TYPE * * PNTR BSS 1 * FOND2 JSB POPCD GO PRINT MNEMONIC LDA PNTR,I FETCH MASK CMA IF EXACT NO OPERAND IN SAME WORD AND B77 SZA,RSS JMP OPRND * AND INSTR STRIP OFF OPERAND STA TEMP SAVE FOR COMMA C TEST LDB PNTR,I IS MASK FOR CPB DSMSK A DOUBLE SHIFT GROUP SZA AND OPERAND EQUAL 0 RSS LDA B20 YES MAKE OPERAND IT 16 AND B77 AND MASK C BIT JSB PNUMB GO PRINT NUMBER LDA TEMP AND B1000 IS A COMMA C REQUIRED SZA,RSS NO RETURN JMP EXIT LDA COMMA JSB TYO PRINT COMMA LDA "C JSB TYO PRINT "C" JMP EXIT * * * PRINTS MULTI WORD OPERANDS * OPRND LDA TFLAG TRACING SZA,RSS JMP EXIT NO THEN RETURN * * MUTIWORD PRINT HERE * JMP EXIT * * TFLAG OCT 0 * B20 OCT 20 B77 OCT 77 B1000 OCT 1000 "C OCT 103 * * * PRINT ONE CHARACTER * TYO NOP STB TEMP2 SAVE B REG LDB BPNTR CPB BFEND JMP EXIT IF FULL THEN COMPLETE SBT ELSE STORE BYTE STB BPNTR UPDATE POINTER LDB TEMP2 RESTORE B REG JMP TYO,I * IOGTB DEF *+1 DEF OVFG DEC -4 OVERFLOW GROUP OCT 177777 *DEC -1 CLF OCT 177700 DEC -12 I/O GROUP OCT 176700 OCT 0 INDICATES END OF IO TABLE DSGTB DEF *+1 DEF DSG DEC -6 DOUBLE SHIFT GROUP DSMSK OCT 5760 DEC -90 REST OF BASE SET OCT 5777 * MICROCODED INSTRUCTIONS DEC 27 POSITIVE COUNT MEANS CHANGE INCREMENT OCT 5777 OCT 0 THIS INDICATES END * LOAD NOP LDA VALUE,I JMP LOAD,I * TEMP2 BSS 1 * * PRINT MNEMONIC POPCD NOP STB TEMP3 INB LDA B,I FETCH FIRST 3 CHARS JSB DSQZ GO PRINT THEM LDA INCR CPA B2 DOES MNEMONIC HAVE MORE THAN 3 CHARS JMP POP1 NO,GO TO RETURN LDB TEMP3 ADB B2 YES FETCH NEXT 3 CHARS LDA B,I JSB DSQZ GO TO PRINT THEM POP1 LDB TEMP3 RESTORE B REG JMP POPCD,I RETURN * * DSQZ NOP CLB A=SQOZE CODE DIV D1600 JSB CONV A=FIRST CHAR,B=2ND,3RD LDA B CLB DIV D40 SPLIT SECOND 2 CHARS JSB CONV LDA B JSB CONV JMP DSQZ,I * * A REG = ONE SQOZE CHARACTER * CONV NOP SZA,RSS IF ZERO THEN TERMINATE DSQZ JMP DSQZ,I * CPA B45 IS IT A "." CCA YES SET TO CONVERT TO 56B ADA M13B IS IT A LETTER SSA,RSS ADA B7 YES ADD 101B ADA B72 NO ADD 57B JSB TYO GO PRINT IT JMP CONV,I RETURN * B7 OCT 7 B45 OCT 45 B72 OCT 72 M13B OCT -13 D40 DEC 40 D1600 DEC 1600 * TEMP3 BSS 1 * * * A =ADDRESS TO BE PRINTED * * PADR NOP PRINT ADDRESS STA SIGN SAVE INDIRECT BIT ELA,CLE,ERA REMOVE SIGN BIT * ************INSERT SYMBOL SEARCH HERE * JSB PNUMB GO PRINT NUMBER LDA SIGN SSA,RSS IS ",I" REQUIRED JMP PADR,I NO THEN RETURN *  LDA COMMA YES THEN PRINT ",I" JSB TYO LDA "I JSB TYO JMP PADR,I AND RETURN * "I OCT 111 RADIX DEC 8 * SIGN BSS 1 * * A =NUMBER TO BE PRINTED * PNUMB NOP STA TEMP3 LDA BLANK JSB TYO PRINT BLANK LDA TEMP3 JSB PN PRINT NUMBER JMP PNUMB,I * PN NOP LDB TBADD SET TEMP BUFFER STB TBPTR PN1 CLB CLEAR B FOR DIV DIV RADIX ADB M12B CONVERT TO ASCII SSB,RSS ADB B7 ADB B72 JSB SRBT PUT IN TEMP BUFFER SZA IF QUOTIENT NON ZERO CONTINUE JMP PN1 * LDB TBADD ELSE MOVE TO OUTPUT BUFFER CMB,INB SET UP CHAR COUNT ADB TBPTR STB TEMP3 * PN2 ISZ TBPTR BUMP POINTER LDA TBPTR,I FETCH CHARACTER JSB TYO PRINT CHARACTER ISZ TEMP3 JMP PN2 CONTINUE UNTIL ALL ARE MOVED JMP PN,I AND THEN RETURN * * SRBT NOP SAVE CHARACTERS IN REVERSE ORDER STB TBPTR,I CCB ADB TBPTR DECREMENT POINTER STB TBPTR JMP SRBT,I AND RETURN * BLANK OCT 40 M12B OCT -12 * TBPTR BSS 1 BSS 16 TBADD DEF *-1 * EXIT LDA BLANK FILL WITH BLANK CHAR JSB TYO LDA BUFAD COMPUTE WORD COUNT CMA,INA ADA BPNTR ARS STA WCNT,I JMP INVRS,I AND RETURN * * MRG EQU * MEMORY REFERENCE GROUP AND 0 OCT 044216 JSB 0 OCT 100624 XOR 0 OCT 154204 JMP 0 OCT 100262 IOR 0 OCT 075304 ISZ 0 OCT 075554 ADA 0 OCT 043373 ADB 0 OCT 043374 CPA 0 OCT 052533 CPB 0 OCT 052534 LDA 0 OCT 105673 LDB 0 OCT 105674 STA 0 OCT 134773 STB 0 OCT 134774 SRGA EQU * SHIFT ROTATE GROUP rALF OCT 044100 ELA OCT 060473 ERA OCT 061053 ALR OCT 044114 RAR OCT 130324 RAL OCT 130316 ARS OCT 044475 ALS OCT 044115 OCT 40 CLE OCT 052277 SLA OCT 134273 OCT 27 ALF OCT 044100 OCT 26 ELA OCT 060473 OCT 25 ERA OCT 061053 OCT 24 ALR OCT 044114 OCT 23 RAR OCT 130324 OCT 22 RAL OCT 130316 OCT 21 ARS OCT 044475 OCT 20 ALS OCT 044115 SRGB EQU * BLF OCT 047200 ELB OCT 060474 RBR OCT 130374 RBL OCT 130366 BRS OCT 047575 BLS OCT 047215 OCT 4040 CLE OCT 052277 SLB OCT 134274 OCT 4027 BLF OCT 047200 OCT 4026 ELB OCT 060474 OCT 4025 ERB OCT 061054 OCT 4024 BLR OCT 047214 OCT 4023 RBR OCT 130374 OCT 4022 RBL OCT 130366 OCT 4021 BRS OCT 047575 OCT 4020 BLS OCT 047215 ASGA EQU * ALTER SKIP GROUP CCA OCT 051523 CLA OCT 052273 CMA OCT 052343 SEZ OCT 133674 CCE OCT 051527 OCT 2100 CLE OCT 052277 CME OCT 052347 SSA OCT 134723 SLA OCT 134273 INA OCT 075213 SZA OCT 135353 RSS OCT 131645 ASGB EQU * CCB OCT 051524 CLB OCT 052274 CMB OCT 052344 OCT 6040 SEZ OCT 133674 OCT 6300 CCE OCT 051527 OCT 6100 CLE OCT 052277 OCT 6200 CME OCT 052347 SSB OCT 134724 SLB OCT 134274 INB  OCT 075214 SZB OCT 135354 OCT 6001 RSS OCT 131645 OVFG EQU * OVERFLOW GROUP CLO OCT 052311 STO OCT 135011 SOS OCT 134505 SOC OCT 134465 CLF EQU * CLEAR FLAG CLF 0 OCT 052300 IOG EQU * I/O GROUP CLC 0 OCT 052275 STC 0 OCT 134775 OTB 0 OCT 120374 OTA 0 OCT 120373 LIB 0 OCT 106204 LIA 0 OCT 106203 MIB 0 OCT 111304 MIA 0 OCT 111303 SFS 0 OCT 133735 SFC 0 OCT 133715 STF 0 OCT 135000 HLT 0 OCT 072016 DSG EQU * DOUBLE SHIFT GROUP OCT 003100 RRR 1 WORD OCT 131574 OCT 003040 LSR 1 WORD OCT 107044 OCT 003020 ASR 1 WORD OCT 044544 OCT 002100 RRL 1 WORD OCT 131566 OCT 002040 LSL 1 WORD OCT 107036 OCT 002020 ASL 1 WORD OCT 044536 EIG1 EQU * 1 WORD EXTENDED AND DMS GROUP OCT 003741 CAX 1 WORD OCT 051432 OCT 003751 CAY 1 WORD OCT 051433 OCT 007741 CBX 1 WORD OCT 051502 OCT 007751 CBY 1 WORD OCT 051503 OCT 003744 CXA 1 WORD OCT 053233 OCT 007744 CXB 1 WORD OCT 053234 OCT 003754 CYA 1 WORD OCT 053303 OCT 007754 CYB 1 WORD OCT 053304 OCT 007761 DSX 1 WORD OCT 056052 OCT 007771 DSY 1 WORD OCT 056053 OCT 007760 ISX 1 WORD OCT 075552 OCT 007770 ISY 1 WORD OCT 075553 OCT 003747 XAX 1 WORD OCT 153132 OCT 003757 XAY 1 WORD OCT 153133 OCT 007747 XBX 1 WORD OCT 153202 OCT 007757 XBY 1 WORD OCT 153203 OCT 007763 LBT 1 WORD OCT 105576 OCT 007764 SBT 1 WORD OCT 133476 OCT 007767 SFB 1 WORD OCT 133714 OCT 007100 FIX 1 WORD OCT 063432 OCT 007120 FLT 1 WORD OCT 063616 OCT 003727 LFA 1 WORD OCT 106013 OCT 007727 LFB 1 WORD OCT 106014 OCT 007703 MBF 1 WORD OCT 110660 OCT 007702 MBI 1 WORD OCT 110663 OCT 007704 MBW 1 WORD OCT 110701 OCT 007706 MWF 1 WORD OCT 112370 OCT 007705 MWI 1 WORD OCT 112373 OCT 007707 MWW 1 WORD OCT 112411 OCT 003712 PAA 1 WORD OCT 122103 OCT 007712 PAB 1 WORD OCT 122104 OCT 003713 PBA 1 WORD OCT 122153 OCT 007713 PBB 1 WORD OCT 122154 OCT 003730 RSA 1 WORD OCT 131623 OCT 007730 RSB 1 WORD OCT 131624 OCT 003731 RVA 1 WORD OCT 132013 OCT 007731 RVB 1 WORD OCT 132014 OCT 003710 SYA 1 WORD OCT 135303 OCT 007710 SYB 1 WORD OCT 135304 OCT 003711 USA 1 WORD OCT 143123 OCT 007711 USB 1 WORD OCT 143124 OCT 003722 XMA 1 WORD OCT 154043 OCT 007722 XMB 1 WORD OCT 154044 OCT 007720 XMM 1 WORD OCT 154057 OCT 007721 XMS 1 WORD OCT 154065 EIG2 EQU * 2 WORD EXTENDED AND DMS GROUP OCT 010400 DIV 2 WORDS OCT 055230 OCT 014200 DLD 2 WORDS OCT 055376 OCT 014400 DST 2 WORDS OCT 056046 OCT 010200 MPY 2 WORDS OCT 111763 OCT 015000 FAD 2 WORDS OCT 062706 OCT 015060 FDV 2 WORDS OCT 063120 OCT 015040 FMP 2 WORDS OCT 063662 OCT 015020 FSB 2 WORDS OCT 064224 OCT 015746 ADX  2 WORDS OCT 043422 OCT 015756 ADY 2 WORDS OCT 043423 OCT 011742 LAX 2 WORDS OCT 105532 OCT 011752 LAY 2 WORDS OCT 105533 OCT 015742 LBX 2 WORDS OCT 105602 OCT 015752 LBY 2 WORDS OCT 105603 OCT 015745 LDX 2 WORDS OCT 105722 OCT 015755 LDY 2 WORDS OCT 105723 OCT 011740 SAX 2 WORDS OCT 133432 OCT 011750 SAY 2 WORDS OCT 133433 OCT 015740 SBX 2 WORDS OCT 133502 OCT 015750 SBY 2 WORDS OCT 133503 OCT 015743 STX 2 WORDS OCT 135022 OCT 015753 STY 2 WORDS OCT 135023 OCT 015714 SSM 2 WORDS OCT 134737 OCT 011726 XCA 2 WORDS OCT 153223 OCT 015726 XCB 2 WORDS OCT 153224 OCT 011724 XLA 2 WORDS OCT 153773 OCT 015724 XLB 2 WORDS OCT 153774 OCT 011725 XSA 2 WORDS OCT 154423 OCT 015725 XSB 2 WORDS OCT 154424 EIG2J EQU * 2 WORD JUMPS OCT 015762 JLY 2 WORDS OCT 100223 OCT 015772 JPY 2 WORDS OCT 100463 OCT 015732 DJP 2 WORDS OCT 055272 OCT 015733 DJS 2 WORDS OCT 055275 OCT 015734 SJP 2 WORDS OCT 134172 OCT 015735 SJS 2 WORDS OCT 134175 OCT 015736 UJP 2 WORDS OCT 142372 OCT 015737 UJS 2 WORDS OCT 142375 EIG3 EQU * 3 WORD JRS OCT 017715 JRS 3 WORDS OCT 100575 OCT 017766 CBT 3 WORDS OCT 051476 OCT 017765 MBT 3 WORDS OCT 110676 OCT 017776 CMW 3 WORDS OCT 052371 OCT 017777 MVW 3 WORDS OCT 112341 OCT 017774 CBS 3 WORDS OCT 051475 OCT 017773 SBS 3 WORDS OCT 133475 OCT 017775 TBS 3 WORDS OCT 136575 MIC REQU * MICRO CODED MACROS OCT 005201 DBLE 0 FORTRAN CALLABLE OCT 054566 OCT 056700 OCT 005202 SNGL 0 FORTRAN CALLABLE OCT 134421 OCT 104600 OCT 025203 .XMPY 4 WORD(S) OCT 166247 OCT 123770 OCT 025204 .XDIV 4 WORD(S) OCT 166236 OCT 075700 OCT 017205 .DFER 3 WORD(S) OCT 164600 OCT 061040 OCT 025213 .XADD 4 WORD(S) OCT 166233 OCT 054660 OCT 025214 .XSUB 4 WORD(S) OCT 166255 OCT 141640 OCT 177221 .GOTO 31 SPECIAL PROCESSING OCT 165001 OCT 137550 OCT 175222 ..MAP 30 SPECIAL PROCESSING OCT 166437 OCT 044320 OCT 167223 .ENTR 29 SPECIAL PROCESSING OCT 164660 OCT 137740 OCT 167224 .ENTP 29 SPECIAL PROCESSING OCT 164660 OCT 137620 OCT 015225 .PWR2 2 WORD(S) OCT 165561 OCT 127570 OCT 007226 .FLUN 1 WORD(S) OCT 164726 OCT 142600 OCT 015227 .SETP 2 WORD(S) OCT 165727 OCT 137620 OCT 015230 .PACK 2 WORD(S) OCT 165533 OCT 052210 OCT 007220 .XFER 1 WORD(S) OCT 166240 OCT 061040 OCT 015206 .XPAK 2 WORD(S) OCT 166252 OCT 044010 OCT 005207 XADD 0 FORTRAN CALLABLE OCT 153106 OCT 053600 OCT 005210 XSUB 0 FORTRAN CALLABLE OCT 154447 OCT 045400 OCT 005211 XMPY 0 FORTRAN CALLABLE OCT 154062 OCT 155300 OCT 005212 XDIV 0 FORTRAN CALLABLE OCT 153303 OCT 144000 OCT 015215 .XCOM 2 WORD(S) OCT 166235 OCT 117730 OCT 015216 ..DCM 2 WORD(S) OCT 166426 OCT 052330 OCT 005217 DDINT 0 FORTRAN CALLABLE OCT 054703 OCT 115260 OCT 005257 .EMAP 0 FORTRAN CALLABLE OCT 164657 OCT 044320 OCT 005240 .EMIO 0 FøORTRAN CALLABLE OCT 164657 OCT 075250 OCT 005241 MMAP 0 FORTRAN CALLABLE OCT 111543 OCT 121200 END END MCEND EQU * END END FTN4,L SUBROUTINE MERR(IERR,ISUB,LU) C C C MINIT,IGET,RDMAP,AND MCLOS USE THIS ROUTINE TO C OUTPUT A FMP ERROR MESSAGE, AND THEN QUIT. C THE PARAMETERS ARE IERR -- THE NEG. FMP ERROR # C ISUB -- THE SUBSCRIPT INTO IFMER FOR THE C APPROPRIATE MESSAGE C LU -- THE OUTPUT LU # C C DIMENSION IFMER(45) DATA IFMER/2H/C,2HDA,2H4:,2H F,2HMP,2H O,2HPE,2HN , & 2HER,2HRO,2HR ,2H- ,2H ,2H ,2H , & 2H/C,2HDA,2H4:,2H F,2HMP,2H R,2HEA,2HD , & 2HER,2HRO,2HR ,2H- ,2H ,2H ,2H , & 2H/C,2HDA,2H4:,2H F,2HMP,2H C,2HLO,2HSE, & 2H E,2HRR,2HOR,2H -,2H ,2H ,2H / CALL CNUMD(-(IERR),IFMER(ISUB+12)) CALL EXEC(2,LU,IFMER(ISUB),15) RETURN END END$ ASMB,L NAM IXGP,7 ENT IXGET,IXPUT EXT $LIBR,$LIBX * * * *GET NOP * DLD IGET,I * SWP * LDA A,I * LDA A,I * JMP B,I * * * IXGET NOP DLD IXGET,I SWP LDA A,I XLA A,I JMP B,I * * * *PUT NOP * JSB $LIBR * NOP * LDA IPUT,I * STA IGET * ISZ IPUT * DLD IPUT,I * LDA A,I * LDB B,I * STB A,I * JSB $LIBX * DEF IGET * * * IXPUT NOP JSB $LIBR NOP LDA IXPUT,I STA IXGET ISZ IXPUT DLD IXPUT,I LDA A,I LDB B,I XSB A,I JSB $LIBX DEF IXGET * * A EQU 0 B EQU 1 END  )/ 24999-18198 1839 S 0100 SNPSH SOURCE              H0101 FTN4 PROGRAM SNPSH ,,89 DIMENSION LU(5),IBUF(128),INMES(15) DATA INMES/2H ,2HSN,2HAP,2HSH,2HOT,2H W,2HRI,2HTT,2HEN,2H T, &2HO ,2HCA,2HSS,2HET,2HTE/ C C C RU,SNPSH,CASSETTE LU C SNPSH PUTS A SNAPSHOT OF THE ENTRY POINTS C FROM DISK ONTO A CASSETTE C C CALL RMPAR(LU) LUCAS = LU C C ITRK = IGET(1761B)/128 ISECT = IAND(IGET(1761B),177B) - 1 ICNT = IGET(1762B)+IGET(1764B) C C WRITE FULL BLOCKS C DO 100 I = 1,(ICNT+31)/32 ISECT = ISECT + 1 IF (ISECT.NE.IGET(1757B)) GO TO 80 ISECT = 0 ITRK = ITRK + 1 80 CALL EXEC(1,102B,IBUF,64,ITRK,ISECT) ISECT = ISECT + 1 IF (ISECT.NE.IGET(1757B)) GO TO 90 ISECT = 0 ITRK = ITRK + 1 90 CALL EXEC(1,102B,IBUF(65),64,ITRK,ISECT) CALL EXEC (2,LUCAS+100B,IBUF,128) 100 CONTINUE C C WRITE PARTIAL BLOCK C ILFT = IAND(ICNT,37B) IF (ILFT.EQ.0) GO TO 300 DO 200 J = (ILFT*4)+1,128 IBUF(J) = 0 200 CONTINUE CALL EXEC (3,LUCAS+200B) CALL EXEC (2,LUCAS+100B,IBUF,128) C C WRITE EOF C 300 CALL EXEC (3,LUCAS+100B) CALL EXEC (3,LUCAS+500B) C C ILU = LOGLU(IDUM) CALL EXEC(2,ILU,INMES,15) C C END END$   24999-18199 1839 S 0100 CDMP SOURCE              H0101 ASMB,A,L ORG 2 RUN PROGRAM JMP 3,I BY SETTING P REG DEF START TO 2 * * ORG 77463B * * * THIS PROGRAM DUMPS 32K OF MEMORY AND THE 4 SYSTEM MAPS * TO A CARTRIDGE TAPE ON THE LEFT CTU. * A HALT 42 INDICATES A NONRECOVERABLE WRITE ERROR. BY HITTING * RUN YOU CAN TRY AGAIN. * A HALT 77 INDICATES A NORMAL COMPLETION. * * A EQU 0 B EQU 1 SC EQU 25B * * * CONFIGURE * * START LIA 1 LOAD DISPLAY REG INTO A REG ADA SFS1 BUILD INST SFS SC STA FIX1 ADA LIA2 BUILD INST LIA SC STA FIX3 ADA OTA3 BUILD INST OTA SC STA FIX4 ADA STC4 BUILD INST STC SC,C STA FIX5 STA FIX2 * * * INITIALIZE * * INIT LDA NREC GET #OF RECS TO DUMP STA RTMP STA MFLAG MFLAG=-1 IF LOADING MAPS CLA STA ADR BEGIN AT ZERO * * * ESCAPE SEQUENCE * * ESCQ LDA EPTR RESET POINTER STA *+1 ESLP LDB ESC GET A WORD OF THE ESC SEQ ISZ *-1 MOVE TO NEXT WORD JSB OTWD OUTPUT CURRENT WORD CPB EOT IS IT END OF ESC SEQ? RSS YES-GO WAIT FOR ACK JMP ESLP NO-DO NEXT ESC SEQ WORD * * * ACKNOWLEDGE * * WACK LDA ENQ SEND ENQ JSB OTBYT JSB INBYT GET ACK CPA ACK IS IT ACK? CLE,RSS YES-SKIP JMP WACK NO-LOOP * * * OUTPUT RECORDS * * LDA M128 GET COUNTER #WDS/REC STA TMP OTLP LDB ADR,I GET WORD OF MEM JSB OTWD WRITE THE WORD ISZ ADR GET THE NEXT ADDRESS ISZ TMP DONE WITH REC? JMP OTLP NO-DO NEXT WORD LDA DC1 YES-SEND DC1 JSB OTBYT JSB INBYT GET TAPE STATUS CPA S S-SUCCESS? (F-FAIL) JMP *+3 YES-SKIP HLT 42B NO-HALT JMP INIT 2ND CHANCE TO RUN  JSB INBYT WAIT FOR CR ISZ RTMP ANY MORE RECS? JMP ESCQ YES-BEGIN ESC SEQ AGAIN ISZ MFLAG NO-HAVE WE DONE MAPS? JMP MAPP NO-GO DO MAPS * * * WRITE EOF * * LDB ESC JSB OTWD LDB P5 JSB OTWD LDA C JSB OTBYT * * HLT 77B * * * WRITE OUT MAPS * * MAPP LDA S128 LOAD AT LOC 128 SYA SYS MAP USA PROG MAP PAA PORT A PBA PORT B LDA P128 SET ADR TO 128 STA ADR LDA M1 FUDGE REC COUNT STA RTMP STA MFLAG SET MAP FLAG JMP ESCQ * * * OUTPUT ONE WORD * * OTWD NOP OUTPUT ONE WORD TO CTU CCE START WITH UPPER HALF LDA B PUT DATA IN A REG ALF,ALF PUT IN LOWER POSITION AND B377 MASK OUT UPPER HALF JSB OTBYT OUTPUT BYTE SEZ,RSS SECOND HALF WRITTEN? JMP OTWD,I YES-RETURN LDA B N0-PUT DATA IN A REG CLE SET LOWER HALF FLAG JMP OTWD+4 WRITE IT * * * INPUT ONE BYTE * * INBYT NOP INPUT ONE BYTE JSB SETUP FIX UP I O INTERFACE CARD LDA RCV PUT IN RECEIVE MODE JSB OUT FIX2 STC SC,C DO IT FIX3 LIA SC PUT THE BYTE INTO A-REG SSA,RSS VALID? JMP *-2 NO. GET ANOTHER. AND B377 MASK OUT UPPER HALF JMP INBYT,I RETURN * * * OUTPUT ONE BYTE * * OTBYT NOP OUTPUT ONE BYTE STA OVAL SAVE VALUE TO SEND JSB SETUP FIX UP I O INTERFACE CARD LDA XMIT PUT IN TRANSMIT MODE JSB OUT LDA OVAL GET VALUE TO SEND JSB OUT SEND THE BYTE FIX5 STC SC,C PUT CARD IN DATA MODE FIX1 SFS SC IS I/O DONE? JMP *-1 NO-WAIT JMP OTBYT,I RETURN * * * DO ONE OTA * * OUT NOP ZS FIX4 OTA SC JMP OUT,I * * * SET UP THE INTERFACE CARD * * SETUP NOP LDA MSET MASTER RESET JSB OUT LDA CHMD PUT IN CHAR MODE JSB OUT LDA FRAM CHAR FRAME CONTROL JSB OUT JMP SETUP,I RETURN * * * SFS1 OCT 102300 TO BUILD SFS COMMAND LIA2 OCT 000200 TO BUILD LIA COMMAND OTA3 OCT 000100 TO BUILD OTA COMMAND STC4 OCT 001100 TO BUILD STC,C COMMAND * * NREC DEC -256 M128 DEC -128 P128 DEC 128 M1 OCT 177777 S128 OCT 100200 B377 OCT 377 * * OVAL NOP RTMP NOP MFLAG NOP ADR NOP TMP NOP * * MSET OCT 150077 MASTER RESET FRAM OCT 30003 CHAR FRAME CONTROL RCV OCT 40340 PUT IN RECEIVE MODE XMIT OCT 40740 PUT IN TRANSMIT MODE CHMD OCT 10040 PUT IN CHAR MODE * * EPTR LDB ESC * * ESC OCT 015446 ASCII "ESC" "&" OCT 070061 ASCII LOWER CASE "P" "1" OCT 062062 ASCII LOWER CASE "D" "2" OCT 032466 ASCII "5" "6" EOT OCT 053421 ASCII UPPER CASE "W" "DC1" P5 OCT 070065 ASCII LOWER CASE "P" "5" C OCT 000103 ASCII UPPER CASE "C" ENQ OCT 000005 ASCII "ENQ" ACK OCT 000006 ASCII "ACK" DC1 OCT 000021 ASCII DEVICE CONTROL 1 S OCT 000123 ASCII UPPER CASE "S" * * END START @  24999-18200 1839 S 0100 PATCH SOURCE              H0101 ASMB,R,L HED READ ABS BIN FILE AND WRITE TO MEMORY 6/17/77 JCB * * *ON,PATCH,, * * FILE NAMR MUST BE ABS BINARY (TYPE 7) * INTERNAL CHECKSUM IS COMPUTED AND MUST MATCH CHECKSUM WORD * NAM PATCH,3,1 PROGRAM TO WRITE PATCHES INTO MEMORY FROM ABS FILE EXT IPUT,EXEC,OPEN,CLOSE,READF,NAMR,GETST A EQU 0 B EQU 1 START NOP JSB GETST GET STRING PASSED BY OPERATOR DEF R1 DEF BUFIN INPUT BUFFER DEF M80 = 80 CHARACTERS (M80=-80) DEF LOG R1 LDA D1 STA STR SET POINTER TO START OF BUFIN FOR NAMR JSB NAMR DEF R2 DEF TERM PARAMETER BUFFER DEF BUFIN INPUT BUFFER DEF LOG DEF STR R2 SSA JMP ERR2 PARAMETER INPUT ERROR * LDA TERM+3 GET PARAMETER TYPE AND D3 CPA D1 INTEGER LU? RSS YES JMP ERR2 NO PARAMETER ERROR * JSB NAMR DEF R3 DEF NAME PARMETER BUFFER DEF BUFIN DEF LOG DEF STR R3 SSA JMP ERR3 PARMETER INPUT ERROR * LDA NAME+3 GET PARAMETER TYPE AND D3 CPA D3 ASCII FILE NAME? RSS YES JMP ERR2 NO. PARAMETER ERROR * JMP BEGIN BEGIN PROGRAM * TERM NOP TERMINAL LU NAME NOP FILE NAME NOP NOP PTR NOP POINTER TO WORD IN ABS BINARY RECORD SEC NOP SECURITY CODE CR NOP CARTRIDGE REFERENCE VALU NOP VALUE OF WORD TO STORE IN MEMORY ADDR NOP ADDRESS TO STORE IT AT! LEN NOP LEN OF ABS BINARY REC RETURNED HERE WCTR NOP WORD COUNT IN BINARY REC (NEG 2'S COMP) BEGIN JSB OPEN COME HERE AFTER WE HAVE ALL PARAMETERS DEF R4 AND OPEN THE FILE DEF DCB DEF ERROR DEF NAME DEF ZERO DEF SEC DEF CR R4 LDA ERROR CPA D7 MUST BE TYPE 7 FILE (ABSOLUTE BINARY) RSS JMP ERR4 CLOSE FILE AND REPORT ERROR * RD JSB READF GET A RECORD FROM THE FILE DEF R5 DEF DCB DEF ERROR DEF BUFIN DEF D500 DEF LEN R5 LDA ERROR SZA JMP ERR5 * LDA LEN SZA,RSS JMP RD IGNORE ZERO LENGTH RECORDS * SSA EOF? JMP FINI YES * CMA,INA ADA D500 SZA,RSS DID WE TRUNCATE THE INPUT TO THE BUF SIZE? JMP ERR7 YES! * LDA BUFIN+1 STA ADDR SET STARTING ADDRESS FOR TARGET IN MEMORY LDA BUFIN ALF,ALF GET RECORD LENGTH CMA,INA STA WCTR SET WORD COUNTER NEGATIVE STA B SAVE FOR CHECKSUM COMPUTATION LDA BPTR STA PTR SET POINTER IN INPUT BUFFER LDA ADDR START CHECKSUM COMPUTATION ADA PTR,I ISZ PTR INB,SZB JMP *-3 * CPA PTR,I DOES CHECKSUM MATCH? RSS YES JMP ERR6 NO * LDA BPTR RESET STA PTR THE BUFFER POINTER NEXT LDA PTR,I GET WORD FROM INPUT BUFFER STA VALU JSB IPUT DEF *+3 DEF ADDR DEF VALU ISZ ADDR ISZ PTR ISZ WCTR JMP NEXT * JMP RD * ERR7 ISZ N RECORD TOO LARGE ERR6 ISZ N CHECKSUM DOESN'T COMPUTE! ERR5 ISZ N NOT USED ERR4 ISZ N FILE TYPE NOT 7 (ABS BINARY) ERR3 ISZ N 2ND PARM NOT ASCII FILE NAME ERR2 ISZ N 1ST PARM NOT INTEGER LU ERR1 ISZ N NOT USED LDA N ADA A60 OCTAL 60 = BASE FOR ASCII NUMBER STA ERN ERROR NUMBER TO REPORT JSB EXEC DEF FINI DEF D2 WRITE REQUEST DEF TERM TO THIS TERMINAL DEF MESS ERROR MESSAGE DEF D9 FINI JSB CLOSE DEF DONE DEF DCB DEF ERROR DONE JSB EXEC DEF *+2 y DEF D6 ZERO NOP D1 DEC 1 D2 DEC 2 D3 DEC 3 D6 DEC 6 D8 DEC 8 D9 DEC 9 D7 DEC 7 D14 DEC 14 D15 DEC 15 D500 DEC 500 LOG NOP N NOP ERROR # STORED HERE M80 DEC -80 A60 ASC 1, 0 * ERROR NOP STR NOP MESS ASC 8, PATCH ERROR : * ERN NOP ERROR NUMBER STORED HERE IN ASCII BPTR DEF BUFIN+2 START OF DATA IN ABSOLUTE BINARY RECORD DCB BSS 144 BUFIN BSS 500 END START END$ m  24999-18201 1839 S 0100 CMMM SOURCE              H0101 FTN4 PROGRAM CMMM (3,90), 24999-16101 REV 1839 RTE M SYS MGR PROG. C C C MIKE MANLEY REVISION 2 C RTE M VERSION C C DIMENSION IPBUF(33),LU(5),IBUF(17),IREG(2),IMESS5(6),IDP(22) DIMENSION IMESS0(8),IMESS1(9),IMES11(6),IMESS3(6),IMESS7(7) DIMENSION IMESS2(11),IWHAT(6),IMESS8(11),IPRAM(5),IVALU2(13) DIMENSION IARRAY(128),IDISC(26),IVALUE(9) DIMENSION IEXT(4),ITEL22(14),ITEL23(20),ITEL24(17),ITEL25(22) DIMENSION IX(8),I1(11),I2(13),I3(12),I4(9),I5(13),I6(12) DIMENSION I7(9),I9(14),IH(11),IJ(11),IK(9),IOUT(7) DIMENSION IL(12),IO(15),IP(16),IQ(17),IR(21) DIMENSION IN(8),IM(22),IPACK(23),MORUSE(8),ITEL30(5),ITEL31(17) DIMENSION ITEL1(9),ITEL2(9),ITEL3(16),ITEL4(5),ITEL5(19),ITEL6(12) DIMENSION ITEL7(6),ITEL8(5),ITEL9(23),ITEL10(5),ITEL11(26) DIMENSION ITEL12(7),ITEL13(11),ITEL14(22),ITEL16(16) DIMENSION ITEL17(13),ITEL18(17),ITEL19(6),ITEL20(6),ITEL21(6) DIMENSION IBEGIN(22),IGTOUT(27) EQUIVALENCE(IREG,REG,IA),(IREG(2),IB) EQUIVALENCE(IPBUF(2),IPRS1),(IPBUF(6),IPRS2),(IPBUF(10),IPRS3) EQUIVALENCE(IPBUF(14),IPRS4),(IPBUF(18),IPRS5) C DATA IMESS1/2H ,2HID,2H S,2HEG,2H O,2HF / DATA IEXT/2H ,2HEX,2HTE,2HNT/ DATA IVALUE/2H ,2HWO,2HRD,2H ,,2H V,2HAL,2HUE,2H ,2H / DATA IVALU2/2H ,2HLU,2H,T,2HRK,2H,S,2HEC,2HTR,2H,W,2HOR, & 2HD,,2HVA,2HLU,2HE / DATA IGTOUT/2H ,2HDI,2HSC,2H M,2HOD,2H !,2H ,2HEN,2HTE,2HR , & 2HA ,2H/D,2H A,2HT ,2HAN,2HY ,2HTI,2HME,2H T,2HO , & 2HEX,2HIT,2H T,2HHI,2HS ,2HMO,2HDE/ DATA IWHAT/2H ,2HSA,2HY ,2HWH,2HAT,2H ?/ DATA IMESS2/2H ,2HEQ,2HT ,2H# ,2H ,2H ,2H ,2H ,2HDV,2HR / DATA IMES11/2H ,2HNO,2HT ,2HFO,2HUN,2HD / DATA IMESS3/2H ,2HDR,2HT ,2HPA,2HRT,2H / DATA IMESS5/2H ,2HIN,2HT ,2HTA,2HBL,2HE / DATA IMESS0/2H ,2H =,2HCM,2HM3,2H D,2HON,2HE ,2H! /  DATA IBEGIN/2H ,2HCM,2HMM,2H !,2H ,2H ,2HRT,2HE , & 2HM2,2H &,2H M,2H3 ,2H ,2HVE,2HRS,2HIO, & 2HN ,2H ,2H03,2H/0,2H1/,2H77/ DATA IMESS7/2H ,2HYE,2HS ,2HOR,2H N,2HO ,2H? / DATA IMESS8/2HIN,2HT ,2HTA,2HBL ,2HE ,2HST,2HAR,2HTS, & 2H A,2HT ,2H6./ DATA IDISC/2H ,2HLU,2H =,2H ,2H ,2H ,2HTR,2HK ,2H= , & 2H ,2H ,2H ,2HSE,2HCT,2HR ,2H= ,2H ,2H ,2H , & 2H ,2HWO,2HRD,2H =,2H ,2H ,2H / DATA IOUT/2H ,2HOU,2HT ,2HOF,2H R,2HAN,2HGE/ DATA ITEL1/2H ,2HID,2H,P,2HRO,2HGR,2HAM,2H N,2HAM,2HE / DATA ITEL2/2H ,2HID,2H,S,2HEG,2HME,2HNT,2H N,2HAM,2HE / DATA ITEL3/2H ,2HID,2H,N,2HUM,2HBR,2H =,2H A,2HLL,2H I, & 2HD',2HS ,2HIN,2H S,2HYS,2HTE,2HM / DATA ITEL4/2H ,2HEQ,2H,N,2HUM,2HBR/ DATA ITEL5/2H ,2HEQ,2H,N,2HUM,2HBR,2H,N,2HUM,2HBR,2H , & 2HGI,2HVE,2HS ,2HEQ,2HTS,2H I,2HNC,2HLU,2HSI, & 2HVE/ DATA ITEL6/2H ,2HLM,2H,A,2HDD,2HRE,2HSS,2H,#,2H O,2HF , & 2HWO,2HRD,2HS / DATA ITEL7/2H ,2HLM,2H,A,2HDD,2HRE,2HSS/ DATA ITEL8/2H ,2HDR,2H,N,2HUM,2HBR/ DATA ITEL9/2H ,2HDR,2H,N,2HUM,2HBR,2H,N,2HUM,2HBR,2H , & 2HGI,2HVE,2HS ,2HDR,2HT ,2HEN,2HTR,2HIE,2HS , & 2HIN,2HCL,2HUS,2HIV,2HE / DATA ITEL10/2H ,2HIN,2H,N,2HUM,2HBR/ DATA ITEL11/2H ,2HIN,2H,N,2HUM,2HBR,2H,N,2HUM,2HBR,2H , & 2HGI,2HVE,2HS ,2HIN,2HT ,2HTA,2HBL,2HE ,2HEN, & 2HTR,2HIE,2HS ,2HIN,2HCL,2HUS,2HIV,2HE / DATA ITEL12/2H ,2HLL,2H,L,2HIS,2HT ,2HLU,2H# / DATA ITEL13/2H ,2HPM,2H,A,2HDD,2HRE,2HSS,2H,N,2HEW, & 2H V,2HAL,2HUE/ DATA ITEL14/2H ,2HF/,2H,V,2HAL,2HUE,2H T,2HO ,2HFI,2HND, & 2H,S,2HTA,2HRT,2H A, & 2HDD,2HRE,2HSS,2H,#,2H O,2HF ,2HWO,2HRD,2HS / DATA ITEL16/2H ,2HDL,2H,L,2HU,,2HTR,2HK,,2HSE,2HCT,2HR,, & 2H #,2H O,2HF ,2HSE,2HCT,2a5HOR,2HS / DATA ITEL17/2H ,2HDS,2H,L,2HU,,2HTR,2HK,,2HVA,2HLU,2HE , & 2HTO,2H F,2HIN,2HD / DATA ITEL18/2H ,2HDM,2H ,2H ,2HDI,2HSC,2H M,2HOD,2H , & 2H ,2H / DATA ITEL19/2H ,2HEX,2H ,2H ,2HEX,2HIT/ DATA ITEL20/2H ,2HEN,2H ,2H ,2HEX,2HIT/ DATA ITEL21/2H ,2H/E,2H ,2H ,2HEX,2HIT/ DATA ITEL22/2H ,2HXL,2H,A,2HDD,2HRE,2HSS,2H ,2H ,2H(S, & 2HYS,2HTE,2HM ,2HMA,2HP)/ DATA ITEL23/2H ,2HXL,2H,A,2HDD,2HRE,2HSS,2H,#,2H O,2HF , & 2HWO,2HRD,2HS ,2H ,2H(S,2HYS,2HTE,2HM ,2HMA, & 2HP)/ DATA ITEL24/2H ,2HXP,2H,A,2HDD,2HRE,2HSS,2H,V,2HAL,2HUE, & 2H ,2H ,2H(S,2HYS,2HTE,2HM ,2HMA,2HP)/ DATA ITEL25/2H ,2HXF,2H,V,2HAL,2HUE,2H T,2HO ,2HFI,2HND, & 2H,S,2HTA,2HRT,2H A,2HDD,2HRE,2HSS,2H,#,2H O, & 2HF ,2HWO,2HRD,2HS / DATA ITEL30/2H ,2HDP,2H,V,2HAL,2HUE/ DATA ITEL31/2H ,2HTR,2H,S,2HTA,2HRT,2H L,2HOC,2HAT,2HIO,2HN,, &2HLI,2HST,2H D,2HEL,2HIM,2HIT,2HER/ DATA IX/2H I,2HNP,2HUT,2H ,2HFU,2HNC,2HTI,2HON/ DATA I1/2H ,2HID,2H ,2HLI,2HST,2H I,2HD ,2HSE,2HGM,2HEN,2HT / DATA I2/2H ,2HEQ,2H ,2HLI,2HST,2H E,2HQT,2H A,2HND,2H E,2HXT, & 2HEN,2HTS/ DATA I3/2H ,2HDR,2H ,2HLI,2HST,2H D,2HEV,2H R,2HEF,2H T,2HAB, & 2HLE/ DATA I4/2H ,2HLM,2H ,2HLI,2HST,2H M,2HEM,2HOR,2HY / DATA IP/2H ,2HXL,2H ,2HLI,2HST,2H M,2HEM,2HOR,2HY ,2H , & 2H(S,2HYS,2HTE,2HM ,2HMA,2HP)/ DATA I5/2H ,2HIN,2H ,2HLI,2HST,2H I,2HNT,2HER,2HUP,2HT ,2HTA, & 2HBL,2HE / DATA I6/2H ,2HLL,2H ,2HCH,2HAN,2HGE,2H L,2HIS,2HT ,2HDE,2HVI, & 2HCE/ DATA I7/2H ,2HPM,2H ,2HPA,2HTC,2HH ,2HME,2HMO,2HRY/ DATA IQ/2H ,2HXP,2H ,2HPA,2HTC,2HH ,2HME,2HMO,2HRY,2H ,2H , & 2H(S,2HYS,2HTE,2HM ,2HMA,2HP)/ DATA I9/2H ,2HF/,2H ,2HFI,2HND,2H A,2H V,2HAL,M(2HUE,2H I,2HN , & 2HME,2HMO,2HRY/ DATA IR/2H ,2HXF,2H ,2HFI,2HND,2H A,2H V,2HAL,2HUE,2H I,2HN , & 2HME,2HMO,2HRY,2H ,2H(S,2HYS,2HTE,2HM ,2HMA,2HP)/ DATA IH/2H ,2HDL,2H ,2HLI,2HST,2H D,2HIS,2HC ,2HSE,2HCT,2HOR/ DATA IJ/2H ,2HDM,2H ,2HDI,2HSC,2H M,2HOD,2H ,2HAN,2HY ,2HLU/ DATA IK/2H ,2HDS,2H ,2HDI,2HSC,2H S,2HEA,2HRC,2HH / DATA IL/2H ,2H/E,2H O,2HR ,2HEN,2H O,2HR ,2HEX,2H T,2HO , &2HEX,2HIT/ DATA IDP/2H ,2HDP,2H ,2HDI,2HSP,2HLA,2HY ,2HIN,2HPU,2HT , &2HIN,2H O,2HCT,2HAL,2H D,2HEC,2HIM,2HAL,2H &,2H A,2HSC,2HII/ DATA IN/2H ,2HTR,2H ,2HTR,2HAC,2HE ,2HLI,2HST/ DATA IM/2H ,2HXT,2H ,2HTR,2HAC,2HE ,2HLI,2HST,2H (,2HSY, &2HST,2HEM,2H M,2HAP,2H) / DATA IPACK/2H ,2HA ,2HPK,2H A,2HFT,2HER,2H T,2HHE,2H I,2HNP, &2HUT,2H G,2HIV,2HES,2H A,2H P,2HAC,2HKE,2HD ,2HLI,2HST,2HIN, &2HG / DATA MORUSE/2H ,2HOR,2H U,2HSE,2H ,2H ,2HPK,2H, / DATA IO/2H ,2HFO,2HR ,2HMO,2HRE,2H I,2HNF,2HO ,2HDO,2H A, & 2H ?,2H?,,2HIN,2HPU,2HT / C CALL RMPAR(LU) LU1=LU(1) IF(LU1.EQ.0) LU1=1 LU2 = LU1 C CALL EXEC(2,LU1,IBEGIN,22) C IPRMPT = 2H= 1 IPRAM(1) = 1 IPRAM(2) = 0 IPRAM(3) = 0 IPRAM(4) = 0 IPRAM(5) = 0 CALL EXEC(2,LU1+ 2000B,IPRMPT,-2) REG = REIO(1,LU1 + 400B,IBUF,17) CALL PARSE(IBUF,IB*2,IPBUF) C SEE IF THE PACKED FORM OF THE OUTPUT IS DESIRED IF(IPBUF(3).EQ.2HPK) IPRAM(5) = 1 C C C C C C IF(IPRS1.EQ.2HID) GO TO 100 IF(IPRS1.EQ.2HEQ) GO TO 200 IF(IPRS1.EQ.2HDR) GO TO 300 IF(IPRS1.EQ.2HXL) GO TO 400 IF(IPRS1.EQ.2HLM) GO TO 410 IF(IPRS1.EQ.2HIN) GO TO 500 IF(IPRS1.EQ.2HLL) GO TO 600 IF(IPRS1.EQ.2HPM) GO TO 710 IF(IPRS1.EQ.2HXP) GO TO 700 IF(IPRS1.EQ.2HF/) GO TO 810 IF(IPRS1.EQ.2HXF) GO TO 800 IF(IPRS1.EQ.2HDL) GO TO 1000 IF(IPRS1.EQ.2HDM) GO TO 1100 IF(IPRS1.EQ.2HDS) GO TO 1400 IF(IPRS1.EQ.2HTR) GO TO 1610 IF(IPRS1.EQ.2HXT) GO TO 1600 IF(IPRS1.EQ.2HDP) GO TO 1700 IF(IPRS1.EQ.2H??) GO TO 9000 IF(IPRS1.EQ.2H/E) GO TO 50 IF(IPRS1.EQ.2HEX) GO TO 50 IF(IPRS1.EQ.2HEN) GO TO 50 25 CALL EXEC(2,LU1,IWHAT,-12) GO TO 1 30 CALL EXEC(2,LU1,IOUT,7) GO TO 1 50 CALL EXEC(2,LU1,IMESS0,-16) CALL EXEC(6,0) C C C **********GET ID SEGMENT INFO************** 100 KYWORD = IGET(1657B) -1 IF(IPBUF(5).EQ.1) GO TO 175 C IMESS1(7) = IPRS2 IMESS1(8) = IPBUF(7) IMESS1(9) = IPBUF(8) C 150 DO 170 I = 1,156 KYWORD = KYWORD +1 IF(IGET(KYWORD).EQ.0) GO TO 190 IF(((IPRS2.EQ.IGET(IGET(KYWORD)+12)).AND. & (IPBUF(7).EQ.IGET(IGET(KYWORD)+13))).AND. & (IPBUF(8).EQ.IOR(IAND(IGET(IGET(KYWORD)+14),177400B),40B))) & GO TO 180 170 CONTINUE 175 KYWORD = KYWORD +1 IF(IPRAM(3).EQ.9999) GO TO 1 IF(IGET(KYWORD).EQ.0) GO TO 1 IF(IGET(IGET(KYWORD)+12).NE.0) GO TO 176 IMESS1(7) = 2H GO TO 180 176 IMESS1(7) = IGET(IGET(KYWORD)+12) IMESS1(8) = IGET(IGET(KYWORD)+13) IMESS1(9) = IOR(IAND(IGET(IGET(KYWORD)+14),177400B),40B) C 180 CALL EXEC(3,LU2+1100B,1) CALL EXEC(2,LU2,IMESS1,-18) ISTART = IGET(KYWORD) ISTOP = ISTART +27 ITEMP = IAND(IGET(IGET(KYWORD) +14),17B) ITEMP1= IAND(IGET(IGET(KYWORD) +14),20B) IF(ITEMP1.EQ.20B) ISTART= IGET(KYWORD) +11 IF(ITEMP1.EQ.20B) ISTOP = ISTART + 8 IF((((ITEMP.EQ.1).OR.(ITEMP.EQ.9)).OR.(ITEMP.EQ.17)).OR. &(ITEMP.EQ.25)) ISTOP = ISTART + 21 CALL DOIO(ISTART,ISTOP,LU2,IPRAM) IF(IPBUF(5).EQ.1) GO TO 175 GO TO 1 190 CALL EXEC(2,LU1,IMES11,-12) GO TO 1 C C C **********GET EQT INFO************* C C 200 IEQTA = IGET(1650B) IEQTNO = IGET(1651B) IF(I3PRS3 .GT. IEQTNO) IPRS3 = IEQTNO IF(IPRS2.GT.IEQTNO) GO TO 25 IF(IPRS2.LT. 1) IPRS2 = 1 C C DO 210 I = IPRS2,IPRS3 IF(IPRAM(3) .EQ. 9999) GO TO 1 ISTART = IEQTA + (I - 1)*15 CALL CNUMD(I,IBUF(2)) IMESS2(4) = IBUF(4) IBUF(1) = (IAND(IGET(ISTART+4),37400B)/256) IBUF(1) = IBUF(1) + 2*(IBUF(1)/8) CALL CNUMD(IBUF(1),IBUF(2)) C INSERT A 0 SO DVR00 DOESNT LOOK LIKE DVR 0 IF (IAND(IBUF(4),177400B).EQ.20000B) IBUF(4) = IBUF(4) + 10000B IMESS2(11) = IBUF(4) C CALL EXEC(3,LU2+1100B,1) CALL EXEC(2,LU2,IMESS2,11) CALL DOIO(ISTART,ISTART +14,LU2,IPRAM) C C 210 CONTINUE C GO TO 1 C C C **********GET DEVICE REF TABLE************** C 300 IDRT = IGET(1652B) LUMAX = IGET(1653B) IMESS3(6) = 61B C C CALL EXEC(2,LU2,IMESS3,6) IF(IPRS3.GT.LUMAX) IPRS3 = LUMAX IF(IPRS2.LE.0) IPRS2 = 1 CALL DOIO(IDRT + IPRS2-1,IDRT + IPRS3-1,LU2,IPRAM) IMESS3(6) = 62B CALL EXEC(3,LU2+1100B,1) CALL EXEC(2,LU2,IMESS3,6) CALL DOIO(IDRT+IPRS2-1+LUMAX,IDRT+IPRS3-1+LUMAX,LU2,IPRAM) GO TO 1 C C C C ***********LIST ANY MEMORY LOCATION REQUESTED**************** C C 400 IPRAM(4) = -1 IF((IPRS2.LT.0).OR.(IPRS3+IPRS2-1.LT.0)) GO TO 30 410 CALL DOIO(IPRS2,IPRS2+IPRS3-1,LU2,IPRAM) GO TO 1 C C C *************GET THE INTERUPT TABLE***************** C C 500 INTBA = IGET(1654B) INTLG = IGET(1655B) C C IF(IPRS2.LT.6) GO TO 550 CALL EXEC(2,LU2,IMESS5,-12) IF(IPRS3.GT.INTLG) IPRS3 = INTLG IF(IPRS2.LE.0) IPRS2 = 1 ISTART = INTBA + IPRS2 -6 ISTOP = INTBA +IPRS3 -1 IPRAM(1) = IPRS2 IPRAM(2) = 1 CALL DOIO(ISTART,ISTOP,LU2,IPRAM) GO TO 1 550 CALL EXEC(2,LU1,IMESS8,-22) GO TO 1 C C C C ***********CHANGE OUTPUT LU*************** C C 600 LU2 = IPRS2 GO TO 1 C  C C C ***********PATCH MEMORY ANY MEMORY LOCATION**************** C 700 IPRAM(4) = -1 710 CALL DOIO(IPRS2,IPRS2,LU2,IPRAM) CALL EXEC(2,LU1,IMESS7,-14) CALL REIO(1,LU1+400B,IPBUF(7),1) C IF YOU CHANGE YOUR MIND THIS IS THE ESCAPE ROUTE IF(IPBUF(7).NE.2HYE) GO TO 1 IF(IPRAM(4).EQ.0)CALL IPUT(IPRS2,IPRS3) IF(IPRAM(4).EQ.-1)CALL XPUT(IPRS2,IPRS3) CALL DOIO(IPRS2,IPRS2,LU2,IPRAM) GO TO 1 C C C*******FIND A WORD BETWEEN GIVEN LIMITS IN MEMORY******** C 800 IPRAM(4) = -1 810 IF (IPRS3.LT.0) IPRS3 = 1 IF((IPRS3.LT.0).OR.(IPRS3+IPRS4-1.LT.0)) GO TO 30 DO 850 I = IPRS3,IPRS3+IPRS4-1 IF((IGET(I).EQ.IPRS2).AND.(IPRAM(4).EQ.0)) GO TO 820 IF((IXGET(I).EQ.IPRS2).AND.(IPRAM(4).EQ.-1)) GO TO 820 GO TO 850 820 CALL DOIO(I,I,LU2,IPRAM) IF(IPRAM(3).EQ.9999) GO TO 1 IPRAM(3) = 1 IPRAM(1) = IPRAM(1) + 1 850 CONTINUE IF(IPRAM(3).EQ.0) GO TO 190 GO TO 1 C C C********LOOK AT ANY DISC LOCATION************ 1000 DO 1050 J = 1,IPRS5 CALL EXEC(1,IPRS2 + 100B,IARRAY,128,IPRS3,IPRS4) CALL DISC3(IPRS2,IPRS3,IPRS4,IPRAM(1),IARRAY,IPRAM,LU2,IDISC) IF(IPRAM(3).EQ.9999) GO TO 1 IPRS4 = IPRS4 + 2 IF(IPRS4.LT.60) GO TO 1050 IPRS4 = 0 IPRS3 = IPRS3 + 1 1050 CONTINUE GO TO 1 C C C C*************MODIFY OP SYSTEM ON THE DISC**************** C C C 1100 CALL EXEC(2,LU1,IGTOUT,27) C C** THIS SECTION ALLOWS MODIFICATION OF ANY DISC** C C 1150 CALL EXEC(2,LU1+2000B,IVALU2,13) REG=REIO(1,LU1+400B,IBUF,10) CALL PARSE(IBUF,IB*2,IPBUF) IF(IPRS1.EQ.2H/D) GO TO 1 ILU= IPRS1 ITRK= IPRS2 ISECTR = IPRS3 IWORD = IPRS4 IF(IWORD .LE. 0 ) GO TO 25 IFIX = IPBUF(18) INULL = IPBUF(17) C ASSIGN 1150 TO ILABEL C C 1210 CALL EXEC(1,ILU+100B,IARRAY,128,ITRK,ISECTR) IPRAM(1) = 0 CALL DISC3(ILU,ITRK,ISECTR,IWOfRD,IARRAY,IPRAM,LU2,IDISC) C IF (INULL.EQ.0) GO TO ILABEL CALL EXEC(2,LU1+2000B,IMESS7,-14) CALL REIO(1,LU1+400B,IPBUF(7),1) IF(IPBUF(7).EQ. 2H/D) GO TO 1 IF(IPBUF(7).NE. 2HYE) GO TO ILABEL C C C C LETS GO MODIFY THE TRACK ASSIGNMENT TABLE SO WE CAN WRITE C ON SYSTEM TRACKS. C 1300 IARRAY(IWORD) = IFIX C !!!!!PATCH DISC!!!!!! CALL EXEC(100002B,ILU+100B,IARRAY,128,ITRK,ISECTR) GO TO 1310 C C FIX TRACK ASSIGNMENT TABLE C 1333 INULL = 0 1310 INULL = 0 GO TO 1210 C C C C C C***THIS SECTION WILL SEARCH A TRACK FOR ALL OCCURRENCES OF A *** C*** GIVEN VALUE. USE THIS SECTION TO UNPURGE A FILE. *** C*** HINT ! IF YOU UNPURGE DON'T FORGET THE EXTENTS OR YOU WILL *** C*** DEVELOP A FMGR -005 ERROR . C C C 1400 ISTART = 0 DO 1450 I =0,58,2 CALL EXEC(1,IPRS2 + 100B,IARRAY,128,IPRS3,I) DO 1425 J = 1,128 IF(IARRAY(J).NE.IPRS4) GO TO 1425 ISTART = 1 CALL CNUMD(I,IDISC(17)) CALL CNUMD(J,IDISC(24)) CALL EXEC(2,LU2,IDISC(12),15) IF(IFBRK(IDUMY)) 1,1425 1425 CONTINUE 1450 CONTINUE IF (ISTART .EQ. 0) GO TO 190 GO TO 1 C C******************* TRACE A LIST IN ANY MAP ************************** C 1600 IPRAM(4) = -1 1610 IF((IPRS2 .LT.1).OR. (IPRS2 .EQ.IPRS3)) GO TO 1 CALL DOIO(IPRS2,IPRS2,LU2,IPRAM) IPRAM(3) = 1 IF(IPRAM(4).EQ.0) IPRS2 = IGET(IPRS2) IF(IPRAM(4).EQ.-1) IPRS2 = IXGET(IPRS2) GO TO 1610 C C 1700 IARRAY(1) = IPRS2 IPRAM(1) = 0 IPRAM(3) = 1 CALL DISC3(1,1,1,1,IARRAY,IPRAM,LU2,IDISC) GO TO 1 9000 IF(IPRS2.EQ.2HID) GO TO 9100 IF(IPRS2.EQ.2HEQ) GO TO 9200 IF(IPRS2.EQ.2HDR) GO TO 9300 IF(IPRS2.EQ.2HLM) GO TO 9400 IF(IPRS2.EQ.2HIN) GO TO 9500 IF(IPRS2.EQ.2HLL) GO TO 9600 IF(IPRS2.EQ.2HPM) GO TO 9700 IF(IPRS2.EQ.2HF/) GO TO 9800 IF(IPRS2.EQ.2HDL) GO TO 9905 c IF(IPRS2.EQ.2HDM) GO TO 9910 IF(IPRS2.EQ.2HDS) GO TO 9920 IF(IPRS2.EQ.2H/E) GO TO 9940 IF(IPRS2.EQ.2HEX) GO TO 9940 IF(IPRS2.EQ.2HEN) GO TO 9940 IF(IPRS2.EQ.2HXL) GO TO 9960 IF(IPRS2.EQ.2HXP) GO TO 9970 IF(IPRS2.EQ.2HXF) GO TO 9980 IF(IPRS2.EQ.2HDP) GO TO 9982 IF(IPRS2.EQ.2HTR) GO TO 9984 IF(IPRS2.EQ.2HXT) GO TO 9984 C C C CALL EXEC(2,LU2,IX,8) CALL EXEC(2,LU2,I1,11) CALL EXEC(2,LU2,I2,13) CALL EXEC(2,LU2,I3,12) CALL EXEC(2,LU2,I4,9) CALL EXEC(2,LU2,IP,16) CALL EXEC(2,LU2,I5,13) CALL EXEC(2,LU2,IN,8) CALL EXEC(2,LU2,IM,15) CALL EXEC(2,LU2,IDP,22) CALL EXEC(2,LU2,I6,12) CALL EXEC(2,LU2,I7,9) CALL EXEC(2,LU2,IQ,17) CALL EXEC(2,LU2,I9,14) CALL EXEC(2,LU2,IR,21) CALL EXEC(2,LU2,IH,11) CALL EXEC(2,LU2,IJ,11) CALL EXEC(2,LU2,IK,9) CALL EXEC(2,LU2,IL,12) CALL EXEC(2,LU2,IO,15) CALL EXEC(2,LU2,IPACK,23) GO TO 1 C C C C 9100 CALL EXEC(2,LU2,ITEL1,9) CALL EXEC(2,LU2,ITEL2,9) CALL EXEC(2,LU2,ITEL3,16) GO TO 9999 9200 CALL EXEC(2,LU2,ITEL4,5) CALL EXEC(2,LU2,ITEL5,19) GO TO 9999 9300 CALL EXEC(2,LU2,ITEL8,5) CALL EXEC(2,LU2,ITEL9,23) GO TO 9999 9400 CALL EXEC(2,LU2,ITEL7,6) CALL EXEC(2,LU2,ITEL6,12) GO TO 9999 9500 CALL EXEC(2,LU2,ITEL10,5) CALL EXEC(2,LU2,ITEL11,26) GO TO 9999 9600 CALL EXEC(2,LU2,ITEL12,7) GO TO 1 9700 CALL EXEC(2,LU2,ITEL13,11) GO TO 1 9800 CALL EXEC(2,LU2,ITEL14,22) GO TO 1 9905 CALL EXEC(2,LU2,ITEL16,16) GO TO 9999 9910 CALL EXEC(2,LU2,ITEL18,17) GO TO 1 9920 CALL EXEC(2,LU2,ITEL17,13) GO TO 1 9940 CALL EXEC(2,LU2,ITEL21,6) CALL EXEC(2,LU2,ITEL20,6) CALL EXEC(2,LU2,ITEL19,6) GO TO 1 9960 CALL EXEC(2,LU2,ITEL22,14) CALL EXEC(2,LU2,ITEL23,19) GO TO 9999 9970 CALL EXEC(2,LU2,ITEL24,17) GO TO 1 9980 CALL EXEC(2,LU2,ITEL25,22) GO TO 1 9982 CALL EXEC(2,LU2,ITEL30,5) GO TO 1 9984 ITEL31(2) = IPRS2 CALL EXEC(2,LU2,ITEL31,17) GO TO 1 C 9999 MORUSE(6) = IPRS2 CALL EXEC(2,LU2,MORUSE,8) GO TO 1 END END$ FTN4,L SUBROUTINE DOIO(ISTART,ISTOP,LU,IPRAM) DIMENSION IBUF(25),IMESS(27),IPRAM(5),OBUF(37),LMESS(17) C DATA IMESS/2H ,2H ,2H ,2HWO,2HRD, &2H ,2H ,2HLO,2HCA,2HTI,2HON,2H , &2HVA,2HLU,2HE(,2H8),2H ,2HVA,2HLU,2HE(,2H10,2H) , &2HVA,2HLU,2HE(,2HAS,2H) / DATA LMESS/2H ,2HLO,2HCA,2HTI,2HON,2HS ,2H ,2H ,2H , &2H T,2HHR,2HOU,2HGH,2H / DATA IBUF/25*2H / C C C THE IPRAM ARRAY TELLS HOW TO DO THE I/O C IPRAM(1) = WORD # TO START COUNTING AT, C IPRAM(2) = 0 MEANS WORD COUNT TO BE IN DECIMAL C IPRAM(2) = 1 MEANS WORD COUNT TO BE IN OCTAL C IPRAM(3) = 0 MEANS PRINT HEADER. = 1 MEANS NO HEADER. C IPRAM(4) =-1 MEANS WE ARE DOING A CROSS MAP LOAD C IPRAM(5) = 1 MEANS A PACKED LISTING IS DESIRED C C ISTART IS LOCATION TO START COUNTING AT C ISTOP IS LOCATION TO STOP COUNTING AT. C LU IS THE OUTPUT LU. C C K = IPRAM(1)-1 C IF(IPRAM(5).EQ.1) GO TO 500 C 1 IF(IPRAM(3).EQ. 0) CALL EXEC(2,LU,IMESS,-54) C C DO 100 I = ISTART,ISTOP K = K + 1 CALL CNUMD(K,IBUF(3)) IF(IPRAM(2) .EQ.1) CALL CNUMO(K,IBUF(3)) CALL CNUMO(I,IBUF(8)) IF(IPRAM(4) .NE.-1) GO TO 50 CALL CNUMO(IXGET(I),IBUF(13)) CALL CNUMD(IABS(IXGET(I)),IBUF(18)) IF(IXGET(I).LT.0)IBUF(18) = IBUF(18) + 6400B C CALL IASCI(IXGET(I),IBUF(25)) C GO TO 75 50 CALL CNUMO(IGET(I),IBUF(13)) CALL CNUMD(IABS(IGET(I)),IBUF(18)) IF (IGET(I).LT.0) IBUF(18) = IBUF(18) + 6400B C CALL IASCI(IGET(I),IBUF(25)) C 75 CALL EXEC(2,LU,IBUF,-50) IF(IFBRK(IDMY))200,100 100 CONTINUE GO T1O 300 200 IPRAM(3) = 9999 300 RETURN C C 500 K = ISTART 550 IF((ISTOP-K).LT.0) RETURN CALL CNUMO(K,LMESS(7)) CALL CNUMO(ISTOP,LMESS(15)) IF(((ISTOP-K)/64).GT.0) CALL CNUMO(K + 63,LMESS(15)) C CALL EXEC(3,LU + 1100B,1) CALL EXEC(2,LU,LMESS,17) CALL EXEC(3,LU + 1100B,1) C DO 800 I = 1,8 C CALL PACK (ISTOP - K + 1,IPRAM(4)+1,K,OBUF) CALL EXEC(2,LU,OBUF,37) C K = K + 8 IF((ISTOP-K).LT.0) RETURN IF(IFBRK(IDMY)) 200,800 800 CONTINUE C GO TO 550 END SUBROUTINE DISC3(LU,ITRK,ISECTR,INDEX,IARRAY,IPRAM,LU2,IDISC) DIMENSION IARRAY(128),IPRAM(4),IBUF(17),OBUF(37) DIMENSION IDISK(20),IDISC(20) DATA IDISK/2H ,2HWO,2HRD,2H ,2H V,2HAL,2HUE,2H(8,2H) , & 2H V,2HAL,2HUE,2H(1,2H0),2H ,2HVA,2HLU,2HE(, & 2HAS,2H) / DATA IBUF/17*2H / C C C THIS SUBROUTINE DOES THE I/O FOR ALL DISC READS. THE MAIN C PROGRAM DOES THE READ PASSING THE 128 WORDS READ IN IARRAY. C THIS ROUTINE FORMATS THE OUTPUT. C C IN ADDITION IT DOES THE OUTPUT FOR THE ' DP ' INSTRUCTION C THIS IS A SLIGHT PERTERBATION FROM THE SUBROUTINES REAL C PURPOSE. C C C IF IPRAM(1) #0 THEN 128 WORDS ARE OUTPUT C IF IPRAM(1) =0 THEN ONLY ONE WORD IS OUTPUT C IF IPRAM(3) # 0 THEN NO DISC TRK & SECTOR INFO IS PRINTED C IF IPRAM(5) = 0 THEN A PACKED LISTING IS DESIRED C IF(IPRAM(1).EQ.0) GO TO 55 NUMBR = 128 INDEX = 1 ID = 19 GO TO 100 C 55 NUMBR = 1 ID = 26 C 100 CALL CNUMD(LU,IDISC(3)) CALL CNUMD(ITRK,IDISC(9)) CALL CNUMD(ISECTR,IDISC(17)) CALL CNUMD(INDEX,IDISC(24)) IF(IPRAM(3).NE.1) CALL EXEC(2,LU2,IDISC,ID) IF(IPRAM(5).NE.1) CALL EXEC(2,LU2,IDISK,20) C IF(IPRAM(5).EQ.1) GO TO 2000 C C DO 1020 I = INDEX,NUMBR C CALL IASCI(IARRAY(I),IBUF(17)) C C C C CALL CNUMD(I,IBUF) CALL CNUMO(IARRAY(I),IBUF(5)) CALL CNUMD(IABS(IARRAY(I)),IBUF(10)) IF (IARRAY(I).LT.0) IBUF(10) = IBUF(10) + 6400B CALL EXEC(2,LU2,IBUF,17) IF(IFBRK(IDUMY)) 999,1020 1020 CONTINUE RETURN 999 IPRAM(3) = 9999 RETURN C C C FIX UP A POINTER TO THE ARRAY IARRAY SO THAT THE C PACK ROUTINE WILL WORK. C 2000 CALL DUMMY(IARRAY,IPOINT) C DO 3000 I = 1,16 CALL PACK(8,1,IPOINT,OBUF) CALL EXEC(2,LU2,OBUF,37) IPOINT = IPOINT + 8 IF(IFBRK(IDUMY)) 999,3000 3000 CONTINUE END END$ ASMB,L NAM IXGET,7 ENT IXGET,XPUT,PACK,IASCI,DUMMY ENT IGET ENT IPUT EXT $LIBR,$LIBX,.ENTR * * * IGET NOP DLD IGET,I SWP LDA A,I LDA A,I JMP B,I * * * IXGET NOP DLD IXGET,I SWP LDA A,I XLA A,I JMP B,I * * * IPUT NOP JSB $LIBR NOP LDA IPUT,I STA IGET ISZ IPUT DLD IPUT,I LDA A,I LDB B,I STB A,I JSB $LIBX DEF IGET * * * XPUT NOP JSB $LIBR NOP LDA XPUT,I STA IXGET ISZ XPUT DLD XPUT,I LDA A,I LDB B,I XSB A,I JSB $LIBX DEF IXGET * * * * * * * * * THIS ROUTINE ACCEPTS UP TO 8 WORDS OF INPUT AND CONVERTS THOSE * WORDS TO OCTAL ASCII IN A PACKED FORMAT . EIGHT WORDS OF OCTAL * DELIMITED BY A * AND THEN THEIR ASIII REPRESENTATION. * THE WORDS MAY EITHOR BE IN THE SYSTEM MAP OR THE USER MAP * THE ROUTINE IS FORTRAN CALLABLE AS: * * CALL PACK(#WORDS,MAP,INPUT BUFFER,OUTPUT BUFFER) * * MAP = 0 SYSTEM MAP * MAP >= 1 USER MAP * * THE OUTPUT BUFFER MUST BE 36 WORDS LONG * * * KOUNT NOP MAP NOP INBUF NOP ASSLC NOP PACK NOP JSB .ENTR GET THE PARAMETER ADDRESSES DEF KOUNT * LDA KOUNT,I GET THE # OF WORDS TO CONVERT BACK CMA,INA MAKE NEG AND SSA,RSS IF 0 OR NEG WORDS INPUT THEN FORGET IT JMP PACK,I STA KOUNT NOW SAVE FOR LOOP * ADA D8 ADD 8 TO SEE IF INPUT # SSA,RSS GREATER THAN 8 JMP CONTU ALL IS WELL ! LDA D8 JMP BACK * * CONTU LDA MAP,I GET THE MAP AND SAVE STA MAP FOR LATER * LDA INBUF,I STA INBUF * LDA ASSLC GET THE ADDRESS LDB ASSLC TWICE STB TEMP SAVE TEMPORARIALLY INA BUMP IT CLE,ELA CONVERT TO A BYTE ADDRESS STA ASSLC AND SAVE FOR LATER ADB D29 NOW DEFINE THE ASCII ADDRESS STB OABUF AND SAVE FOR THE IASCI SUBROUTINE STB YTEMP * LDA DM37 NOW CLEAR OUT THE OLD BUFFER STA XTEMP LDB BLANK GET A BLANK READY * LOOPX STB TEMP,I SET A BLANK INTO THE OUTPUT BUFFER ISZ TEMP STEP BUFFER POINTER ISZ XTEMP DONE YET ? JMP LOOPX NO * * * LOOP LDB INBUF GET THE 1ST WORD LDA MAP GET THE MAP TO USE SZA,RSS SYS MAP ? JMP SYSTM YES LDB B,I NO JMP OUT SYSTM XLB B,I GET THE INFO FROM THE SYSTEM MAP OUT STB XTEMP SAVE FOR THE IASCI SUBROUTINE JSB ASCI AND CONVERT TO OCTAL ASCII * JSB IASCI AND PLACE THROUGH THE ASCII FILTER DEF *+3 DEF XTEMP DEF TEMP * STB OABUF,I PUT RESULT INTO THE OUTPUT BUFFER * ISZ INBUF BUMP OUR ISZ OABUF POINTERS ISZ ASSLC AND THE CHAR ADDRESS * ISZ KOUNT ARE WE DONE ? JMP LOOP NOT YET * CCB YES,GET THE END OF THE OCTAL #'S ADB YTEMP LDA B,I NOW GET THE LAST WORD IOR ASTRK PUT IN AN ASTRISK STA B,I NOW PUT IT BACK * JMP PACK,I RETURN TO THE CALLER * * * * ** DATA TO OCTAL ASCII CONVERSION ** SPC 1 * CALLING SEQUENCE: LDB (DATA WORD) * LDA (ADDRESS AT START OF STORAGE) * JSB ASCI SPC 1 ASCI NOP OUTPUT 6 DIGITS * STA ASSLC SET THE ADDRESS (NOT USED AT THE MOMENT ) LDA KM6 GET NO. OF DIGITS TO CONVERT RBL MOVE FIRST DIGIT TO LOW B JSB NUM.F CONVERT THE NUMBER JMP ASCI,I RETURN SPC 2 *SCI2 NOP 5 DIGITS & BLANK * LDA KM5 GET NO OF DIGITS TO CONVERT * BLF POSITION FIRST DIGIT * JSB NUM.F CONVERT THE NUMBER * JMP ASCI2,I RETURN * * *********************************** * * CONVERT DIGITS TO ASCII BASE 8 * * *********************************** * * NUM.F NOP STA T1NUM SAVE THE DIGIT COUNT CPA KM6 IF 6 THEN CLA,INA,RSS USE 1 AS A MASK FOR FIRST DIGIT NUM00 LDA K7 ELSE USE 7 AND B ISOLATE THE DIGIT ADA "0" ADD 60 TO MAKE ASCII JSB PUT.F PUT IN THE BUFFER BLF,RBR POSITION THE NEXT DIGIT ISZ T1NUM DONE? JMP NUM00 NO DO NEXT DIGIT * JMP NUM.F,I YES RETURN * T1NUM NOP KM6 DEC -6 * SPC 2 * * ******************************** * * PUT CHARACTER IN LIST BUFFER * * ******************************** * PUT.F NOP STB T1PUT SAVE B LDB ASSLC GET CURRENT BUFFER ADDRESS AND B177 ISOLATE THE CHARACTER CLE,ERB WORD ADDRESS TO B E=UPPER,LOWER FLAG SEZ,RSS IF UPPER CHAR ALF,SLA,ALF POSITION AND SKIP XOR B,I INCLUSION OF HIGHER CHAR. XOR B40 ADD,TAKE AWAY LOWER BLANK STA B,I SET THE WORD DOWN ISZ ASSLC STEP THE CHAR ADDRESS LDB T1PUT RESTORE B JMP PUT.F,I RETURN * T1PUT NOP OABUF NOP B40 OCT 40 K7 DEC 7 D8 DEC 8 "0" OCT 60 D29 DEC 29 DM37 DEC -37 BLANK ASC 1, ASTRK OCT 52 LOWER BYTE = * B177 OCT 177 TEMP NOP XTEMP NOP YTEMP NOP ADDRS NOP PONTR NOP DUMMY NOP THIS IS A DUMMY SUBROUTINE TO FIX UP A POINTER JSB .ENTR SO THAT THE PACK ROUTINE CAN WORK WITH ARRAYS DEF ADDRS IN A PROGRAM AS WELL AS MEMORY ADDRESSES. * LDA ADDRS STA PONTR,I JMP DUMMY,I SPC 1 * * * * * * * THE IASCI SUBROUTINE TAKES ONE WORD OF INPUT AND CONVERTS THAT * WORD TO ASCII. IF ANY BYTE CAN NOT BE CONVERTED TO ASCII THEN * AN ASCII BLANK IS RETURNED FOR THAT BYTE. * * * CALLING SEQUENCE : JSB IASCI * DEF RETURN * DEF VALUE VALUE TO BE CONVERTED * DEF ASCII RETURNED ASCII VALUE * ---- * * ON RETURN, THE B REGISTER HAS THE ASCII VALUE * VALUE NOP LOCTN NOP IASCI NOP JSB .ENTR DEF VALUE * LDA VALUE,I GET THE VALUE TO CONVERT STA TEMP1 SAVE IT AND M377 KEEP ONLY LOWER BYTE JSB CNVRT AND CONVERT STB VALUE SAVE THE RETURNED VALUE * LDA TEMP1 GET THE WORD BACK AGAIN AND M1774 KEEP ONLY THE UPPER BYTE ALF,ALF SHIFT TO LOW ORDER JSB CNVRT AND GO CONVERT BLF,BLF PUT INTO UPPER BYTE ADB VALUE NOW MERGE ADD IN LOWER BYTE STB LOCTN,I AND RETURN IT TO THE USER JMP IASCI,I * * * THIS SUBROUTINE CONVERTS LOWER BYTE OF A TO ASCII AND PLACES * THE RETURNED ASCII INTO B * CNVRT NOP STA B AND SAVE CMA,INA ADA B135 SSA IS IT OK JMP BLNK2 NO LDA B40 CMA,INA ADA B SSA OK ? BLNK2 LDB B40 NO JMP CNVRT,I * * * * A EQU 0 B EQU 1 M1774 OC/-`^ZT 177400 B135 OCT 137 M377 OCT 377 TEMP1 NOP END ܹ`   24999-18202 1839 S 0100 CMM4 SOURCE              H0101 FTN4 PROGRAM CMM4 (3,90),24999-16102 REV. 1839 780807 C C C MIKE MANLEY RTE IV VERSION C 8/07/78 EFH C C DIMENSION IPBUF(33),LU(5),IBUF(30),IREG(2),IMESS5(6),IDP(22) DIMENSION IMESS0(8),IMESS1(9),IMES11(6),IMESS3(6),IMESS7(7) DIMENSION IMESS2(11),IWHAT(6),IMESS8(11),IPRAM(6),IVALU2(13) DIMENSION IARRAY(64),IDISC(36),MDISK(10),IVALUE(9),ITEL33(28) DIMENSION IEXT(4),ITEL22(14),ITEL23(20),ITEL24(17),ITEL25(22) DIMENSION IX(8),I1(11),I2(13),I3(12),I4(9),I5(13),I6(12) DIMENSION I7(9),I9(14),IG(11),IH(11),IJ(11),IK(9),IOUT(7) DIMENSION IL(12),IO(15),IP(16),IQ(17),IR(21),IDI(28),MEMR(7) DIMENSION IN(8),IM(22),IPACK(23),MORUSE(8),ITEL30(9),ITEL31(17) DIMENSION ITEL1(9),ITEL2(9),ITEL3(16),ITEL4(5),ITEL5(19),ITEL6(12) DIMENSION ITEL7(6),ITEL8(5),ITEL9(23),ITEL10(5),ITEL11(26) DIMENSION ITEL12(7),ITEL13(11),ITEL14(22),ITEL15(11),ITEL16(16) DIMENSION ITEL17(21),ITEL18(17),ITEL19(6),ITEL20(6),ITEL21(6) DIMENSION IGTOUT(27),ITAT(12),ISYS(5),IAUX(5),LDISC(5),IABS(7) DIMENSION IT(17),ITEL26(2),ITEL27(5),ITEL28(13),ITEL34(13) DIMENSION IPR(14),ILE(17),ITEL35(2),IGO(31),IRP(6),INBS(10) DIMENSION IPG(19),ITEL36(14),IPP(22),ITEL37(14),IFUN(4) DIMENSION INS(16),ITEL38(27),IMS(23),ITEL39(3),ISOR(19) C ^ DIMENSION IFPHD(29),IFPMS(17),IKIL(18),IFP(14),IFPAR(6),ILSEC(8) DIMENSION IBDSK(10) EQUIVALENCE(IREG,REG,IA),(IREG(2),IB) EQUIVALENCE(IPBUF(2),IPRS1),(IPBUF(6),IPRS2),(IPBUF(10),IPRS3) EQUIVALENCE(IPBUF(14),IPRS4),(IPBUF(18),IPRS5) EQUIVALENCE(IPBUF(22),IPRS6),(IPBUF(26),IPRS7) EQUIVALENCE(IPBUF(30),IPRS8) C DATA IMESS1/2H ,2HID,2H S,2HEG,2H O,2HF / DATA MEMR/2H ,2HME,2HM ,2HRE,2HS ,2HPR,2HOG/ DATA IEXT/2H ,2HEX,2HTE,2HNT/ DATA IVALUE/2H ,2HWO,2HRD,2H ,,2H V,2HAL,2HUE,2H ,2H / DATA IVALU2/2H ,2HLU,2H,T,2HRK,2H,S,2HEC,;_2HTR,2H,W,2HOR, & 2HD,,2HVA,2HLU,2HE / DATA MDISK/2H ,2HMO,2HDI,2HFY,2H O,2HP ,2HSY,2HST,2HEM,2H ?/ DATA IGTOUT/2H ,2HDI,2HSC,2H M,2HOD,2H !,2H ,2HEN,2HTE,2HR , & 2HA ,2H/D,2H A,2HT ,2HAN,2HY ,2HTI,2HME,2H T,2HO , & 2HEX,2HIT,2H T,2HHI,2HS ,2HMO,2HDE/ DATA IWHAT/2H ,2HSA,2HY ,2HWH,2HAT,2H ?/ DATA IMESS2/2H ,2HEQ,2HT ,2H# ,2H ,2H ,2H ,2H ,2HDV,2HR / DATA IMES11/2H ,2HNO,2HT ,2HFO,2HUN,2HD / DATA IMESS3/2H ,2HDR,2HT ,2HPA,2HRT,2H / DATA IMESS5/2H ,2HIN,2HT ,2HTA,2HBL,2HE / DATA IMESS0/2H ,2H =,2HCM,2HM4,2H D,2HON,2HE ,2H! / DATA IBUF/2H ,2HCM,2HM4,2H !,2H T,2HHE,2H R,2HTE, & 2H I,2HV ,2H S,2HYS,2HTE,2HM ,2H M,2HOD, & 2H/A,2HNA,2HLI,2HZE,2H P,2HRO,2HGR,2HAM,2H !, & 2H ,2H08,2H/0,2H7/,2H78/ DATA IMESS7/2H ,2HYE,2HS ,2HOR,2H N,2HO ,2H? / DATA IMESS8/2HIN,2HT ,2HTA,2HBL ,2HE ,2HST,2HAR,2HTS, & 2H A,2HT ,2H6./ C ^ DATA IDISC/2H ,2HLU,2H =,2H ,2H ,2H ,2H ,2HTR,2HK ,2H= , & 2H ,2H ,2H ,2H ,2HSE,2HCT,2HR ,2H= ,2H ,2H ,2H , & 2H ,2HWO,2HRD,2H =,2H ,2H ,2H ,2H ,2HOL,2HD(,2H8), & 2H =,2H ,2H ,2H / DATA IOUT/2H ,2HOU,2HT ,2HOF,2H R,2HAN,2HGE/ DATA ITEL1/2H ,2HID,2H,P,2HRO,2HGR,2HAM,2H N,2HAM,2HE / DATA ITEL2/2H ,2HID,2H,S,2HEG,2HME,2HNT,2H N,2HAM,2HE / DATA ITEL3/2H ,2HID,2H,N,2HUM,2HBR,2H =,2H A,2HLL,2H I, & 2HD',2HS ,2HIN,2H S,2HYS,2HTE,2HM / DATA ITEL4/2H ,2HEQ,2H,N,2HUM,2HBR/ DATA ITEL5/2H ,2HEQ,2H,N,2HUM,2HBR,2H,N,2HUM,2HBR,2H , & 2HGI,2HVE,2HS ,2HEQ,2HTS,2H I,2HNC,2HLU,2HSI, & 2HVE/ DATA ITEL6/2H ,2HLM,2H,A,2HDD,2HRE,2HSS,2H,#,2H O,2HF , & 2HWO,2HRD,2HS / DATA ITEL7/2H ,2HLM,2H,A,2HDD,2HRE,2HSS/ DATA ITEL8/2H ,2HDR,2H,N,2HUM,2HBR/ DATA ITEL9/2H ,2HDR,2H,N,2HUM,2HBR,2H,N,2HUM,2HBR,2H ,  & 2HGI,2HVE,2HS ,2HDR,2HT ,2HEN,2HTR,2HIE,2HS , & 2HIN,2HCL,2HUS,2HIV,2HE / DATA ITEL10/2H ,2HIN,2H,N,2HUM,2HBR/ DATA ITEL11/2H ,2HIN,2H,N,2HUM,2HBR,2H,N,2HUM,2HBR,2H , & 2HGI,2HVE,2HS ,2HIN,2HT ,2HTA,2HBL,2HE ,2HEN, & 2HTR,2HIE,2HS ,2HIN,2HCL,2HUS,2HIV,2HE / DATA ITEL12/2H ,2HLL,2H,L,2HIS,2HT ,2HLU,2H# / DATA ITEL13/2H ,2HPM,2H,A,2HDD,2HRE,2HSS,2H,N,2HEW, & 2H V,2HAL,2HUE/ DATA ITEL14/2H ,2HF/,2H,V,2HAL,2HUE,2H T,2HO ,2HFI,2HND, & 2H,S,2HTA,2HRT,2H A, & 2HDD,2HRE,2HSS,2H,#,2H O,2HF ,2HWO,2HRD,2HS / DATA ITEL15/2H ,2HLI,2H,E,2HNT,2HRY,2H P,2HOI,2HNT,2H N, & 2HAM,2HE / DATA ITEL16/2H ,2HDL,2H,L,2HU,,2HTR,2HK,,2HSE,2HCT,2HR,, & 2H #,2H O,2HF ,2HSE,2HCT,2HOR,2HS / DATA ITEL17/2H ,2HDS,2H,L,2HU,,2HTR,2HK,,2H W,2HOR,2HD , & 2HTO,2H F,2HIN,2HD ,2H, ,2H(5,2H W,2HOR,2HDS, & 2H M,2HAX,2H) / DATA ITEL26/2H ,2HTA/ DATA ITEL27/2H ,2HTA,2H,L,2HU ,2H# / DATA ITEL28/2H ,2HTA,2H,L,2HU ,2H#,,2HTR,2HK ,2H#,, & 2H #,2H O,2HF ,2HTR,2HKS/ DATA ITEL18/2H ,2HDM,2H ,2H ,2HDI,2HSC,2H M,2HOD,2H , & 2H ,2H / DATA ITEL19/2H ,2HEX,2H ,2H ,2HEX,2HIT/ DATA ITEL20/2H ,2HEN,2H ,2H ,2HEX,2HIT/ DATA ITEL21/2H ,2H/E,2H ,2H ,2HEX,2HIT/ DATA ITEL22/2H ,2HXL,2H,A,2HDD,2HRE,2HSS,2H ,2H ,2H(S, & 2HYS,2HTE,2HM ,2HMA,2HP)/ DATA ITEL23/2H ,2HXL,2H,A,2HDD,2HRE,2HSS,2H,#,2H O,2HF , & 2HWO,2HRD,2HS ,2H ,2H(S,2HYS,2HTE,2HM ,2HMA, & 2HP)/ DATA ITEL24/2H ,2HXP,2H,A,2HDD,2HRE,2HSS,2H,V,2HAL,2HUE, & 2H ,2H ,2H(S,2HYS,2HTE,2HM ,2HMA,2HP)/ DATA ITEL25/2H ,2HXF,2H,V,2HAL,2HUE,2H T,2HO ,2HFI,2HND, & 2H,S,2HTA,2HRT,2H A,2HDD,2HRE,2HSS,2H,#,2H O, v & 2HF ,2HWO,2HRD,2HS / DATA ITEL30/2H ,2HDP,2H,V,2HAL,2HUE,2H,*,2H,V,2HAL,2HUE/ DATA ITEL31/2H ,2HTR,2H,S,2HTA,2HRT,2H L,2HOC,2HAT,2HIO,2HN,, &2HLI,2HST,2H D,2HEL,2HIM,2HIT,2HER/ DATA ITEL33/2H ,2HDI,2H,E,2HNT,2HRY,2H P,2HOI,2HNT,2H N,2HAM, &2HE / DATA ITEL34/2H ,2HLP,2H,P,2HRO,2HG ,2HNA,2HME,2H,R,2HEL, &2H A,2HDD,2HRE,2HSS/ DATA ITEL35/2H ,2HLE/ DATA ITEL36/2H ,2HPG,2H, ,2HPG,2H#,,2HOF,2HFS,2HET,2H,#,2H O, &2HF ,2HWO,2HRD,2HS / DATA ITEL37/2H ,2HPP,2H, ,2HPG,2H#,,2H O,2HFF,2HSE,2HT,, &2H N,2HEW,2H V,2HAL,2HUE/ DATA ITEL38/2H ,2HNS,2H, ,2H# ,2HOF,2H S,2HEC,2HTS,2H/T,2HRK, & 2H, ,2H# ,2HOF,2H S,2HEC,2HTS,2H/T,2HRK, &2H ,2H(F,2HOR,2H M,2HS ,2HCO,2HMM,2HAN,2HD)/ DATA ITEL39/2H ,2HMS,2H, / DATA IX/2H I,2HNP,2HUT,2H ,2HFU,2HNC,2HTI,2HON/ DATA I1/2H ,2HID,2H ,2HLI,2HST,2H I,2HD ,2HSE,2HGM,2HEN,2HT / DATA I2/2H ,2HEQ,2H ,2HLI,2HST,2H E,2HQT,2H A,2HND,2H E,2HXT, & 2HEN,2HTS/ DATA I3/2H ,2HDR,2H ,2HLI,2HST,2H D,2HEV,2H R,2HEF,2H T,2HAB, & 2HLE/ DATA I4/2H ,2HLM,2H ,2HLI,2HST,2H M,2HEM,2HOR,2HY / DATA IP/2H ,2HXL,2H ,2HLI,2HST,2H M,2HEM,2HOR,2HY ,2H , & 2H(S,2HYS,2HTE,2HM ,2HMA,2HP)/ DATA I5/2H ,2HIN,2H ,2HLI,2HST,2H I,2HNT,2HER,2HUP,2HT ,2HTA, & 2HBL,2HE / DATA I6/2H ,2HLL,2H ,2HCH,2HAN,2HGE,2H L,2HIS,2HT ,2HDE,2HVI, & 2HCE/ DATA I7/2H ,2HPM,2H ,2HPA,2HTC,2HH ,2HME,2HMO,2HRY/ DATA IQ/2H ,2HXP,2H ,2HPA,2HTC,2HH ,2HME,2HMO,2HRY,2H ,2H , & 2H(S,2HYS,2HTE,2HM ,2HMA,2HP)/ DATA I9/2H ,2HF/,2H ,2HFI,2HND,2H A,2H V,2HAL,2HUE,2H I,2HN , & 2HME,2HMO,2HRY/ DATA IR/2H ,2HXF,2H ,2HFI,2HND,2H A,2H V,2HAL,2HUE,2H I,2HN , & 2HME,2HMO,2HRY,2H ,2H(S,2HYS,2HTE,2HM ,2HMA,2HP)/ DATA IG/2H ,2HLI,2H ,2HLI,2HST,2H E,2HNT,2HRY,2H P,2HOI,2HNT/ DATA IDI/2H ,2HDI,2H ,2HRE,2HPO,2HRT,2H D,2HIS,2HC ,2HDI,2HCT, &2HIO,2HNA,2HRY,2H A,2HDD,2HRE,2HSS,2H O,2HF ,2H A,2HN ,2HEN,2HTR, &2HY ,2HPO,2HIN,2HT / DATA ILE/2H ,2HLE,2H ,2HLI,2HST,2H A,2HLL,2H E,2HNT,2HRY, &2H P,2HOI,2HNT,2HS ,2HIN,2H S,2HYS/ DATA IH/2H ,2HDL,2H ,2HLI,2HST,2H D,2HIS,2HC ,2HSE,2HCT,2HOR/ DATA IJ/2H ,2HDM,2H ,2HDI,2HSC,2H M,2HOD,2H ,2HAN,2HY ,2HLU/ DATA IK/2H ,2HDS,2H ,2HDI,2HSC,2H S,2HEA,2HRC,2HH / DATA IL/2H ,2H/E,2H O,2HR ,2HEN,2H O,2HR ,2HEX,2H T,2HO , &2HEX,2HIT/ DATA IDP/2H ,2HDP,2H ,2HDI,2HSP,2HLA,2HY ,2HIN,2HPU,2HT , &2HIN,2H O,2HCT,2HAL,2H D,2HEC,2HIM,2HAL,2H &,2H A,2HSC,2HII/ DATA IN/2H ,2HTR,2H ,2HTR,2HAC,2HE ,2HLI,2HST/ DATA IPG/2H ,2HPG,2H ,2HLI,2HST,2H A,2HNY,2H L,2HOC,2HAT,2HIO, &2HN ,2HIN,2H P,2HHY,2HS ,2HME,2HMO,2HRY/ DATA IPP/2H ,2HPP,2H ,2HMO,2HDI,2HFY,2H A,2HNY,2H L,2HOC, &2HAT,2HIO,2HN ,2HIN,2H P,2HHY,2HSI,2HCA,2HL ,2HME,2HMO,2HRY/ DATA IM/2H ,2HXT,2H ,2HTR,2HAC,2HE ,2HLI,2HST,2H (,2HSY, &2HST,2HEM,2H M,2HAP,2H) / DATA IPR/2H ,2HLP,2H ,2HLI,2HST,2H D,2HIS,2HC ,2HRE,2HS , &2HPR, 2HOG,2HRA,2HM / DATA IPACK/2H ,2HA ,2HPK,2H A,2HFT,2HER,2H T,2HHE,2H I,2HNP, &2HUT,2H G,2HIV,2HES,2H A,2H P,2HAC,2HKE,2HD ,2HLI,2HST,2HIN, &2HG / DATA MORUSE/2H ,2HOR,2H U,2HSE,2H ,2H ,2HPK,2H, / DATA IT/2H ,2HTA,2H ,2HLI,2HST,2H T,2HRA,2HCK,2H A,2HSS, &2HIG,2HNM,2HEN,2HT ,2HTA,2HBL,2HE / DATA IO/2H ,2HFO,2HR ,2HMO,2HRE,2H I,2HNF,2HO ,2HDO,2H A, & 2H ?,2H?,,2HIN,2HPU,2HT / DATA ITAT/2H ,2HTR,2HAC,2HK ,2HAS,2HSI,2HGN,2HME,2HNT, &2H T,2HAB,2HLE/ DATA ISYS/2H ,2HSY,2HS ,2HDI,2HSC/ DATA INBS/2H# ,2HOF,2H S,2HEC,2HTO,2HRS,2H =/ DATA ISOR/2H ,2H ,2H ,2H , & 2HSO,2HUR,2HCE,2H I,2HS:,2H ,2H , & 2HDE,2HST,2HIN,2HAT,2HIO,2HN ,2HIS,2H: / DATA INS/2H ,2HNS,2H ,2HSE,2HT ,2H# ,2H O,2HF ,2HSE,2HUCT,2HRS, &2H P,2HER,2H T,2HRA,2HCK/ DATA IMS/2H ,2HMS,2H ,2HMO,2HVE,2HS ,2HDI,2HSC,2H S,2HEC,2HTO, &2HRS,2H T,2HO ,2HAN,2HOT,2HHE,2HR ,2HDI,2HSC,2H A,2HRE,2HA / DATA IAUX/2H ,2HAU,2HX ,2HDI,2HSC/ DATA IRP/2H ,2HRP,2H / DATA LDISC/2H ,2HDI,2HSC,2H R,2HES/ DATA IABS/2H ,2HAB,2HS ,2H / DATA IGO/2HID,2HEQ,2HDR,2HXL,2HLM,2HIN,2HLL,2HPM,2HXP,2HF/, & 2HXF,2HLI,2HDI,2HLE,2HDL,2HDM,2HDS,2HTA,2HTR,2HXT, & 2HDP,2HLP,2H??,2H/E,2HEX,2HEN,2HPG,2HPP,2HMS,2HNS,2HFP/ C DATA NSECTS/96/ DATA NSECT2/96/ DATA IFUN/2H,*,2H,/,2H,+,2H,-/ C ^ DATA IFPHD/2H ,2HFO,2HOT,2HPR,2HIN,2HT ,2HAR,2HEA,2H :,2H #, & 2H O,2HF ,2HCH,2HAN,2HGE,2HS ,2H= ,2H ,2H , & 2H ,2H ,2HLA,2HTE,2HST,2H 1,2H90,2H S,2HAV,2HED/ DATA IFPMS/2H ,2HNU,2HMB,2HER,2H O,2HF ,2HSE,2HCT,2HOR,2HS ,2HMO, & 2HVE,2HD ,2H= ,2H ,2H ,2H / DATA IKIL/2H ,2HTU,2HRN,2H O,2HFF,2H D,2HIS,2HK ,2HWR,2HIT,2HE , & 2HPR,2HOT,2HEC,2HT ,2HON,2H L,2HU2/ DATA IFP/2H ,2HFP,2H ,2HDI,2HSP,2HLA,2HY ,2HPA,2HST,2H D,2HIS, & 2HK ,2HMO,2HDS/ DATA ILSEC/2H ,2HIL,2HLE,2HGA,2HL ,2HSE,2HCT,2HOR/ DATA IBDSK/2H ,2HBA,2HD ,2HDI,2HSK,2H R,2HEF,2HER,2HEN,2HCE/ CALL RMPAR(LU) LU1=LU IF(LU1.EQ.0) LU1=1 LU2 = LU1+200B C ^ C NO GO IF WE CANNOT INITIALIZE ON LU 2 C CALL CINIT (IARRAY) IF (IARRAY(1).NE.1) GO TO 5 CALL EXEC (2,LU1,IKIL,-36) GO TO 50 5 DO 10 I = 2,7 IFPAR(I-1) = IARRAY(I) 10 CONTINUE C CALL EXEC(2,LU1,IBUF,30) C IPRMPT = 2H= C C SET UP THE IPRAM BUFFER. THIS BUFFER IS USED BY THE I/O C SUBROUTINES (DOIO & DISC3) TO DETERMINE HOW THE I/O IS C TO BE DONE. C 1 IPRAM = 1 IPRAM(2) = 0 IPRAM(3) = 0 IPRAM(4) = 0 IPRAM(5) = 0 IPRAM(6) = -1 CALL EXEC(2,LU1+ 2000B,IPRMPT,-2) REG = REIO(1,LU1 + 400B,IBUF,17) CALL PARSE(IBUF,IB*2,IPBUF) C SEE IF THE PACKED FORM OF THE OUTPUT IS DESIRED IF(IPBUF(3).EQ.2HPK) IPRAM(5) = 1 C C C FIND OUT WHICH COMMAND IT WAS C C DO 20 I = 1,31 IF(IPRS1.EQ.IGO(I)) GO TO(100,200,300,400,410,500,600,710,700, &810,800,900,900,900,1000,1100,1400,1500,1610,1600,1700,100,9000, &50,50,50,1900,1900,2100,2200,2300) I 20 CONTINUE C C C ILLEGAL COMMAND C C 25 CALL EXEC(2,LU1,IWHAT,-12) GO TO 1 30 CALL EXEC(2,LU1,IOUT,7) GO TO 1 40 CALL EXEC (2,LU1,IBDSK,10) GO TO 1 50 CALL EXEC(2,LU1,IMESS0,-16) CALL EXEC(6,0) C C C **********GET ID SEGMENT INFO************** 100 KYWORD = IGET(1657B) -1 IF(IPBUF(5).EQ.1) GO TO 175 C C 150 DO 170 I = 1,257 KYWORD = KYWORD +1 IF(IGET(KYWORD).EQ.0) GO TO 190 IF(((IPRS2.EQ.IGET(IGET(KYWORD)+12)).AND. & (IPBUF(7).EQ.IGET(IGET(KYWORD)+13))).AND. & (IPBUF(8).EQ.IOR(IAND(IGET(IGET(KYWORD)+14),177400B),40B))) & GO TO 176 170 CONTINUE 175 KYWORD = KYWORD +1 IF(IPRAM(3).EQ.9999) GO TO 1 IF(IGET(KYWORD).EQ.0) GO TO 1 IF(IGET(IGET(KYWORD)+12).NE.0) GO TO 176 IMESS1(7) = 2H GO TO 180 176 IMESS1(7) = IGET(IGET(KYWORD)+12) IMESS1(8) = IGET(IGET(KYWORD)+13) IMESS1(9) = IGET(IGET(KYWORD)+14) C 180 ISTART = IGET(KYWORD) ISTOP = ISTART +32 ITEMP = IAND(IGET(IGET(KYWORD) +14),17B) ITEMP1= IAND(IGET(IGET(KYWORD) +14),20B) IF(ITEMP1.EQ.20B) ISTART= IGET(KYWORD) +11 IF(ITEMP1.EQ.20B) ISTOP = ISTART + 8 IF(ITEMP.EQ.1) ISTOP = ISTART + 28 C C SEE IF THIS IS 'ID' OR 'PL' COMMAND C IF(IPRS1 .EQ.2HLP) GO TO 1800 C C 'ID' COMMAND, SO GIVE HIM THE ID SEGMENT !! CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IMESS1,-17) CALL DOIO(ISTART,ISTOP,LU2,IPRAM) C C IF NOT EMA OR IF IT'S A SEGMENT OR MEM RES C THEN DON'T PRINT THE ID EXTENSION C IF((ITEMP1 .EQ. 20B).OR. (ITEMP .EQ. 1)) GO TO 185 IF(IGET(IGET(KYWORD)+28).EQ.0) GO TO 185 C GET THE ID EXTENSION ISTART = IDEX(IGET(KYWORD)) CALL EXEC(2,LU2,IEXT,4) CALL DOIO(ISTART,ISTART+2,LU2,IPRAM) 185 IF(IPBUF(5).EQ.1) GO TO 175 GO TO 1 190 CALL EXEC(2,LU1,IMES11,-12) GO TO 1 C C C **********GET EQT INFO************* C C 200 IEQTA = IGET(1650B) IEQTNO = IGET(1651B) IF(IPRS3 .GT. IEQTNO) IPRS3 = IEQTNO IF(IPRS2.GT.IEQTNO) GO TO 25 IF(IPRS2.LT. 1) IPRS2 = 1 C C DO 210 I = IPRS2,IPRS3 IF(IPRAM(3) .EQ. 9999) GO TO 1 ISTART = IEQTA + (I - 1)*15 CALL CNUMD(I,IBUF(2)) IMESS2(4) = IBUF(4) IBUF = (IAND(IGET(ISTART+4),37400B)/256) IBUF = IBUF + 2*(IBUF/8) CALL CNUMD(IBUF,IBUF(2)) C INSERT A 0 SO DVR00 DOESNT LOOK LIKE DVR 0 IF (IAND(IBUF(4),177400B).EQ.20000B) IBUF(4) = IBUF(4) + 10000B IMESS2(11) = IBUF(4) C CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IMESS2,11) CALL DOIO(ISTART,ISTART +14,LU2,IPRAM) C C C GET THE DISC ADDRESS OF THE EQT CALL DTRK(ISTART+11,ITRK,ISECTR,IWORD,ISTOP,IARRAY) C GET THE SECTOR CALL EXEC(1,102B,IARRAY,64,ITRK,ISECTR) C IF IT IS DVR00 THERE ARE NO EXTENTS C IF # OF EXTENT WORDS IS NEG THERE ARE NO EXTENTS IF((IARRAY(IWORD).LT.1).OR.(IBUF(4).EQ.30060B)) GO TO 210 IDRT = IARRAY(IWORD) C NOW GET THE ADDRESS OF THE EXTENT CALL DTRK(ISTART+12,ITRK,ISECTR,IWORD,ISTOP,IARRAY) CALL EXEC(1,102B,IARRAY,64,ITRK,ISECTR) C IF ADDRESS OF EXTENT IS NEG THERE ARE NO EXTENTS IF(IARRAY(IWORD).LT.1) GO TO 210 C C CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IEXT,4) CALL DOIO(IARRAY(IWORD),IARRAY(IWORD)+IDRT-1,LU2,IPRAM) 210 CONTINUE GO TO 1 C C C C **********GET DEVICE REF TABLE************** C 300 IDRT = IGET(1652B) LUMAX = IGET(1653B) IMESS3(6) = 20061B C C CALL EXEC(2,LU2,IMESS3,6) IF(IPRS3.GT.LUMAX) IPRS3 = LUMAX IF(IPRS2.LE.0) IPRS2 = 1 IF (IPBUF(9).EQ.0) IPRS3 = IPRS2 CALL DOIO(IDRT + IPRS2-1,IDRT + IPRS3-1,LU2,IPRAM) IMESS3(6) = 20062B CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IMESS3,6) CALL DOIO(IDRT+IPRS2-1+LUMAX,IDRT+IPRS3-1+LUMAX,LU2,IPRAM) GO TO 1 C C C C ***********LIST ANY MEMORY LOCATION REQUESTED**************** C C 400 IPRAM(4) = -1 IF((IPRS2.LT.0).OR.(IPRS3+IPRS2-1.LT.0)) GO TO 30 IF (IPBUF(9).EQ.0) IPRS3 = 1 410 CALL DOIO(IPRS2,IPRS2+IPRS3-1,LU2,IPRAM) GO TO 1 C C C *************GET THE INTERUPT TABLE***************** C C 500 INTBA = IGET(1654B) INTLG = IGET(1655B) C C IF(IPRS2.LT.6) GO TO 550 CALL EXEC(2,LU2,IMESS5,-12) IF(IPRS3.GT.INTLG) IPRS3 = INTLG IF (IPBUF(9).EQ.0) IPRS3 = IPRS2 ISTART = INTBA + IPRS2 -6 ISTOP = INTBA +IPRS3 -6 IPRAM = IPRS2 IPRAM(2) = 1 CALL DOIO(ISTART,ISTOP,LU2,IPRAM) GO TO 1 550 CALL EXEC(2,LU1,IMESS8,-22) GO TO 1 C C C C ***********CHANGE OUTPUT LU*************** C C 600 LU2 = IPRS2 + 200B GO TO 1 C C C C ***********PATCH MEMORY ANY MEMORY LOCATION**************** C 700 IPRAM(4) = -1 710 CALL DOIO(IPRS2,IPRS2,LU2,IPRAM) CALL EXEC(2,LU1,IMESS7,-14) CALL REIO(1,LU1+400B,IPBUF(7),1) C IF YOU CHANGE YOUR MIND THIS IS THE ESCAPE ROUTE IF(IPBUF(7).NE.2HYE) GO TO 1 IF(IPRAM(4).EQ.0)CALL IPUT(IPRS2,IPRS3) IF(IPRAM(4).EQ.-1)CALL IXPUT(IPRS2,IPRS3) CALL DOIO(IPRS2,IPRS2,LU2,IPRAM) GO TO 1 C C C*******FIND A WORD BETWEEN GIVEN LIMITS IN MEMORY******** C 800 IPRAM(4) = -1 810 IF((IPRS3.LT.0).OR.(IPRS3+IPRS4-1.LT.0)) GO TO 30 DO 850 I = IPRS3,IPRS3+IPRS4-1 3 IF(IPRAM(4).EQ.-1) GO TO 815 IF(IGET(I).EQ.IPRS2) GO TO 820 GO TO 850 815 IF(IXGET(I).EQ.IPRS2) GO TO 820 GO TO 850 820 CALL DOIO(I,I,LU2,IPRAM) IF(IPRAM(3).EQ.9999) GO TO 1 IPRAM(3) = 1 IPRAM = IPRAM + 1 850 CONTINUE IF(IPRAM(3).EQ.0) GO TO 190 GO TO 1 C C C*******FIND ADDRESS OF SELECTED SYSTEM ENTRY POINTS******** C C C C C C 900 ITRK = IGET(1761B)/128 ISECTR = IAND(IGET(1761B),177B)-1 IPRAM(4) = -1 ICT = 1 C ^ DO 993 I = 1,(IGET(1762B)+IGET(1764B)+15)/16 ISECTR = ISECTR + 1 IF(ISECTR.NE.IGET(1757B)) GO TO 910 ISECTR = 0 ITRK = ITRK + 1 910 CALL EXEC(1,102B,IARRAY,64,ITRK,ISECTR) DO 992 J = 1,64,4 IF(IFBRK(IDUMY))1,911 911 IF(IPRS1.EQ.2HLE) GO TO 965 IF(((IARRAY(J).EQ.IPBUF(6)).AND.(IARRAY(J+1).EQ.IPBUF(7))).AND. &(IOR(IAND(IARRAY(J+2),177400B),40B).EQ.IPBUF(8))) GO TO 970 GO TO 992 C 965 CALL EXEC(2,LU2,IARRAY(J),-5) C C C 970 IF(IPRS1.EQ.2HDI) GO TO 995 MYTYPE = IAND(IARRAY(J+2),177B) + 1 GO TO (975,980,190,985,990) MYTYPE C C 975 CALL DOIO(IARRAY(J+3),IARRAY(J+3),LU2,IPRAM) IF(IPRAM(3).EQ.9999) GO TO 1 IPRAM(3) = 1 IPRAM = IPRAM + 1 GO TO 991 C C 980 CALL EXEC(2,LU2,LDISC,5) IDISC(7) = 2H CALL CNUMD((IARRAY(J+3)/128),IDISC(11)) CALL CNUMD(IAND(IARRAY(J+3),177B),IDISC(19)) CALL EXEC(2,LU2,IDISC(7),15) GO TO 991 C C C 985 CALL CNUMO(IARRAY(J+3),IABS(5)) CALL EXEC(2,LU2,IABS,7) GO TO 991 C C 990 CALL CNUMO(IARRAY(J+3),IRP(4)) CALL EXEC(2,LU2,IRP,6) C 991 IF(IPRS1.EQ.2HLI) GO TO 1 C ^ IF (ICT.EQ.(IGET(1762B)+IGET(1764B))) GO TO 1 ICT = ICT + 1 992 CONTINUE 993 CONTINUE IF(IPRS1.EQ.2HLE) GO TO 1 GO TO 190 C 995 IPRAM = 0 CALL DISC3(2,ITRK,ISECTR,J,IARRAY,IPRAM,LU2,IDISC) GO TO 1 C C . C********LOOK AT ANY DISC LOCATION************ 1000 INSEC = NSECTS IF(IPRS2 .LE. 3) INSEC = IGET(1755B + IPRS2) DO 1050 J = 1,IPRS5 CALL EXEC(100001B,IPRS2 + 100B,IARRAY,64,IPRS3,IPRS4) GO TO 40 1010 CALL DISC3(IPRS2,IPRS3,IPRS4,IPRAM,IARRAY,IPRAM,LU2,IDISC) IF(IPRAM(3).EQ.9999) GO TO 1 IPRS4 = IPRS4 + 1 IF(IPRS4.LT.INSEC) GO TO 1050 IPRS4 = 0 IPRS3 = IPRS3 + 1 1050 CONTINUE GO TO 1 C C C C*************MODIFY OP SYSTEM ON THE DISC**************** C C C 1100 CALL EXEC(2,LU1,IGTOUT,27) CALL EXEC(2,LU1,MDISK,10) CALL EXEC(2,LU1+2000B,IMESS7,7) REG = REIO(1,LU1+400B,IBUF,1) IF(IBUF.EQ.2H/D) GO TO 1 IF(IBUF.NE.2HYE) GO TO 1150 C C C C ASK FOR THE LOCATION AND REPLACEMENT VALUE C 1125 CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU1+2000B,IVALUE,9) REG = REIO(1,LU1 +400B,IBUF,10) CALL PARSE(IBUF,IB*2,IPBUF) IF(IPBUF.EQ.2) GO TO 1 IFIX = IPRS2 ILU = 2 INULL = IPBUF(5) C CALL DTRK(IPRS1,ITRK,ISECTR,IWORD,ISTOP,IARRAY) C SEE IF WORD IS BEYOND ACTUAL OP SYSTEM SIZE C IF(IPRS1.GT.ISTOP) GO TO 30 C ASSIGN 1125 TO ILABEL C GO TO 1205 C C C** THIS SECTION ALLOWS MODIFICATION OF ANY DISC** C C 1150 CALL EXEC(2,LU2,IMESS1,1) CALL EXEC(2,LU1+2000B,IVALU2,13) REG=REIO(1,LU1+400B,IBUF,10) CALL PARSE(IBUF,IB*2,IPBUF) IF(IPBUF.EQ.2) GO TO 1 ILU= IPRS1 ITRK= IPRS2 ISECTR = IPRS3 IWORD = IPRS4 IF(IWORD .LE. 0 ) GO TO 25 IFIX = IPBUF(18) INULL = IPBUF(17) C ASSIGN 1150 TO ILABEL C C 1205 IPRAM(6) = 0 1210 CALL EXEC(100001B,ILU+100B,IARRAY,64,ITRK,ISECTR) GO TO 40 1220 IPRAM = 0 CALL DISC3(ILU,ITRK,ISECTR,IWORD,IARRAY,IPRAM,LU2,IDISC) C IF (INULL.EQ.0) GO TO ILABEL CALL EXEC(2,LU1+2000B,IMESS7,-14) CALL REIO(1,LU1+400B,IPBUF(7),1) IF(IPBUF(7y).NE. 2HYE) GO TO ILABEL C ^ C CHECK THAT IS NOT FP AREA 1ST TRK AND SECTR IF ((ILU.EQ.2).AND.(ITRK.EQ.IFPAR(5)).AND.(ISECTR.EQ.IFPAR(6))) & GO TO 1320 C C C C LETS GO MODIFY THE TRACK ASSIGNMENT TABLE SO WE CAN WRITE C ON SYSTEM TRACKS. C 1300 LUTYP = 0 IF(ILU.EQ.3) LUTYP = IGET(1756B) ITAT = IGET(1656B) + ITRK +LUTYP C ^ ITEMP = IARRAY(IWORD) IARRAY(IWORD) = IFIX ISTART = IGET(ITAT) IF(ILU.LT.4)CALL IPUT(ITAT,IGET(1717B)) C !!!!!PATCH DISC!!!!!! CALL EXEC(100002B,ILU+100B,IARRAY,64,ITRK,ISECTR) GO TO 1310 C ^ 1305 IF(ILU.LT.4) CALL IPUT(ITAT,ISTART) CALL EXEC (1,ILU+100B,IARRAY,64,ITRK,ISECTR) IF (IARRAY(IWORD).NE.IFIX) GO TO 1315 CALL IMFP(IFPAR,ILU,ITRK,ISECTR,IWORD-1,ITEMP,IARRAY) GO TO 1315 C C FIX TRACK ASSIGNMENT TABLE 1310 IF(ILU.LT.4)CALL IPUT(ITAT,ISTART) C C C C 1315 IPRAM(6) = 1 INULL = 0 GO TO 1210 1320 CALL EXEC(2,LU1,ILSEC,8) GO TO 1 C C C C C**********************DISC SEARCH ROUTINE************************ C C C C*** USE THIS SECTION TO UNPURGE A FILE. *** C*** HINT ! IF YOU UNPURGE DON'T FORGET THE EXTENTS OR YOU WILL *** C*** DEVELOP A FMGR -005 ERROR . C C 1400 ISTOP = 0 JK = 1 KK = 5 I = 0 IF(IPBUF(33).LT.4) GO TO 25 CALL EXEC(100001B,IPRS2,IARRAY,64,IPRS3,I) GO TO 40 C C 1405 DO 1410 K = 1,5 LU(K) = IARRAY(K) 1410 CONTINUE C C 1415 DO 1420 K = 1,IPBUF(33)-3 IF(LU(K).NE.IPBUF(10 + K*4)) GO TO 1430 1420 CONTINUE C C ISTART = I ISTOP = 1 IF(JK + IPBUF(33) -4 .GT. 64) ISTART = I - 1 CALL CNUMD(ISTART,IDISC(19)) CALL CNUMD(JK,IDISC(26)) CALL EXEC(2,LU2,IDISC(14),15) C C 1430 DO 1440 K = 1,4 LU(K) = LU(K + 1) 1440 CONTINUE C C JK = JK + 1 IF(JK .EQ. 65) JK = 1 KK = KK + 1 IF(KK.EQ.65) GOO TO 1475 1450 LU(5) = IARRAY(KK) GO TO 1415 C C 1475 I = I + 1 KK = 1 IF(I .EQ. NSECTS) GO TO 1495 CALL EXEC(1,IPRS2,IARRAY,64,IPRS3,I) GO TO 1450 C C 1495 IF(ISTOP .EQ. 0) GO TO 190 GO TO 1 C C C C*********** PRINT OUT THE TRACK ASSIGNMENT TABLE ****************** C 1500 CALL EXEC(2,LU2,ITAT,12) IPRAM = 0 IF((IPRS2.GT.3).OR.(IPRS2.LT.0)) GO TO 25 C GET # OF TRACKS ON AUX DISC INEED =-( IGET(1755B))- IGET(1756B) C GET STOP ADDRESS OF TAT FOR SYS DISC ISTOP = IGET(1656B) + IGET(1756B) - 1 IF (IPRS2 .EQ. 3) GO TO 1510 C PRINT OUT SYS DISC TRACK ASSIGNMENTS CALL EXEC(2,LU2,ISYS,5) C IF(IPRS3.EQ.0) GO TO 1505 IPRAM = IPRS3 C ISTART = IGET(1656B) + IPRS3 IF(ISTART .GT. ISTOP ) GO TO 25 IF(ISTART+IPRS4-1.LT.ISTOP)ISTOP=ISTART+IPRS4-1 1505 CALL DOIO(IGET(1656B)+IPRS3,ISTOP,LU2,IPRAM) C C IF(IPRAM(3).EQ.9999) GO TO 1 1510 IF(IPRS2.EQ.2) GO TO 1 IF (INEED .EQ.0 ) GO TO 1 C CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IAUX,5) ISTART = ISTOP + 1 + IPRS3 ISTOP = ISTOP + INEED IF(ISTART .GT.ISTOP) GO TO 25 IF(IPRS3 .EQ. 0 ) GO TO 1520 IPRAM = IPRS3 IF(ISTART+IPRS4-1 .LT. ISTOP)ISTOP = ISTART+IPRS4-1 1520 CALL DOIO(ISTART,ISTOP,LU2,IPRAM) IF(IPRAM(3) .EQ. 9999) GO TO 1 GO TO 1 C C C******************* TRACE A LIST IN ANY MAP ************************** C 1600 IPRAM(4) = -1 1610 IF((IPRS2 .LT.1).OR. (IPRS2 .EQ.IPRS3)) GO TO 1 CALL DOIO(IPRS2,IPRS2,LU2,IPRAM) IPRAM(3) = 1 IF(IPRAM(4).EQ.0) IPRS2 = IGET(IPRS2) IF(IPRAM(4).EQ.-1) IPRS2 = IXGET(IPRS2) GO TO 1610 C C*********DISPLAY WHATEVER THE USER HAS INPUT ************ C C 1700 IF(IPRS3.EQ.0) GO TO 1750 IF(IPRS3.EQ.2H* )IPRS2 = IPRS2*IPRS4 IF(IPRS3.EQ.2H+ )IPRS2 = IPRS2+IPRS4 IF(IPRS3.EQ.2H/ )IPRS2 = IPRS2/IPRS4 IF(IPRS3.EQ.2H- )IPRS2 = IPRS2-IPRS4 1750 IARRAY = IPRS2 IPRAM = 0 IPRAM(3) = 1 CALL DISC3(1,1,1,1,IARRAY,IPRAM,LU2,IDISC) GO TO 1 C C C*********DISPLAY ABSOLUTE PROGRAM ON THE DISC*********** C C 1800 IF(ISTOP - ISTART .EQ. 28) GO TO 1880 IF(ISTOP - ISTART .EQ. 8) ISTOP = ISTOP +6 ISTART = IGET(ISTOP - 6) IPRS2 = 2 IF(ISTART.LT.0) IPRS2 = 3 INSEC = IGET(IPRS2 + 1755B) ISECTR = IAND(ISTART,177B) ITRK = (IAND(ISTART,77777B)/128) C SET A FLAG FOR THE DTRK SUBROUTINE IARRAY = -IPRS2 CALL DTRK(IPRS3+2,IARRAY,IARRAY(2),IPRAM,ISTOP,IARRAY) C ON RETURN IARRAY(1) =TRK#,IARRAY(2) = SECTR# C IWORD = WORD # C IPRS3 = ITRK+IARRAY IPRS4 = ISECTR + IARRAY(2) IPRS5 = 1 IPRAM(4) = 1 IF((IPRS4 -INSEC - 1).LE.0) GO TO 1850 C OPPS TOO MANY SECTORS C IPRS3 = IPRS3 + 1 IPRS4 = IPRS4 - INSEC C 1850 GO TO 1000 1880 CALL EXEC(2,LU1,MEMR,7) GO TO 1 C C C************ LIST ANY LOCATION IN PHYSICAL MEMORY ********* C C 1900 IF((IPRS2.GT.1023).OR.(IPRS2.LT.0))GO TO 25 IF((IPRS1.EQ.2HPG).AND.(IPRS4.LT.1)) GO TO 25 CALL DUMMY(IARRAY,ISTART) IF(IPRS3.LT.1024) GO TO 1910 ISTOP = IPRS3/1024 IPRS2 = IPRS2 + ISTOP IPRS3 = IPRS3 -(ISTOP * 1024) C 1910 ISTOP = 63 J = IPRS4 IPRAM(2) = 1 C DO 1950 I = 1,IPRS4,64 IPRAM = IPRS3 IPRAM(6) = IPRS2 IF(IPRS1 .EQ. 2HPP) GO TO 2000 CALL MAPXX(IPRS2,IPRS3,IARRAY,1,0) IF(J .LT. 64) ISTOP = J - 1 CALL DOIO(ISTART,ISTART + ISTOP,LU2,IPRAM) C IF(IPRAM(3).EQ.9999) GO TO 1 IPRAM(3) = 1 J = J - 64 1950 CONTINUE GO TO 1 C C C************MODIFY ANY LOCATION IN PHYSICAL MEMORY********************* C C 2000 CALL MAPXX(IPRS2,IPRS3,IARRAY,3,0) CALL DOIO(ISTART,ISTART,LU2,IPRAM) CALL EXEC(2,LU1,IMESS7,-14) CALL REIO(1,LU1+400B,InPBUF(7),1) IF(IPBUF(7).NE.2HYE) GO TO 1 CALL MAPXX(IPRS2,IPRS3,IARRAY,2,IPRS4) CALL MAPXX(IPRS2,IPRS3,IARRAY,3,0) CALL DOIO(ISTART,ISTART,LU2,IPRAM) GO TO 1 C C C********************* MOVE DATA ON THE DISC *************************** C C C THIS SECTION OF CMM4 CAN DESTROY A SYSTEM FASTER AND BETTER C THAN ANYTHING I KNOW. C YOU ARE LITERALLY TAKING YOUR LIFE IN YOUR HANDS !!!!!! C 2100 INSECS = NSECTS INSEC2 = NSECT2 IF(IPRS2 .LT. 4) INSECS = IGET(1755B + IPRS2) IF(IPRS5 .LT. 4) INSEC2 = IGET(1755B + IPRS5) IPRAM(5) = 1 IPRAM(2) = 1 C ^ ITEMP = IOR(IPRS7,100000B) CALL EXEC(2,LU1,ISOR(5),5) CALL DISC3(IPRS2,IPRS3,IPRS4,ISTART,IARRAY,IPRAM,LU2,IDISC) CALL EXEC(2,LU1,ISOR(12),8) CALL DISC3(IPRS5,IPRS6,IPRS7,ISTART,IARRAY,IPRAM,LU2,IDISC) CALL CNUMD(IPRS8,INBS(8)) CALL EXEC(2,LU1,INBS,10) CALL EXEC(2,LU1,IMESS7,-14) CALL REIO(1,LU1+400B,IPBUF(7),1) IF(IPBUF(7).NE.2HYE) GO TO 1 IF (IPRS8 .EQ. 0) GO TO 1 DO 2150 I = 1,IPRS8 C ^ IF ((IPRS5.EQ.2).AND.(IPRS6.EQ.IFPAR(5)).AND.(IPRS7.EQ.IFPAR(6))) & GO TO 2107 CALL EXEC(100001B,IPRS2,IARRAY,64,IPRS3,IPRS4) GO TO 40 2101 LUTYP = 0 IF(IPRS5.EQ.3) LUTYP = IGET(1756B) ITAT = IGET(1656B) + IPRS6 + LUTYP ISTART = IGET(ITAT) IF(IPRS5 .LT. 4) CALL IPUT(ITAT,IGET(1717B)) C ^ CALL EXEC(100002B,IPRS5,IARRAY,64,IPRS6,IPRS7) GO TO 2105 2103 CALL ABREG(IA,IB) IF (IPRS5.LT.4) CALL IPUT (ITAT,ISTART) IF(IB.NE.64) GO TO 2107 IF (I.EQ.1) CALL IMFP(IFPAR,IPRS5,IPRS6,ITEMP,0,IPRS8,IARRAY) GO TO 2107 2105 IF(IPRS5 .LT. 4) CALL IPUT(ITAT,ISTART) 2107 IPRS4 = IPRS4 + 1 IF (IPRS4.LT.INSECS) GO TO 2110 IPRS4 = 0 IPRS3 = IPRS3 + 1 2110 IPRS7 = IPRS7 + 1 IF(IPRS7.LT.INSEC2) GO TO 2150 IPRS7 = 0 IPRS6 = IPRS6 + 1 2150 CONTINUE GOK TO 1 C C **************SET UP THE # OF 64 WORD SECTORS/TRACK *********** C 2200 IF(IPRS3.NE.0) NSECT2 = IPRS3 NSECTS = IPRS2 GO TO 1 C ^ C C **********DISPLAY PAST DISK MODS******************** C C C 2300 ITEMP = IFPAR(4) C *** HEADER *** CALL CNUMD(ITEMP,IFPHD(18)) CALL EXEC(2,LU2,IFPHD,29) IF (ITEMP.EQ.0) GO TO 1 C PRINT 190 MAX IF (ITEMP.GT.190) ITEMP = 190 ITRK = IFPAR(5) ISECTR = IFPAR(6) IWORD = 9 CALL EXEC (1,2,IARRAY,64,ITRK,ISECTR) C C LOOP TO SET UP AND PRINT EACH ENTRY C DO 2320 I = 1,ITEMP CALL CNUMD(IARRAY(IWORD)/64,IDISC(4)) CALL CNUMD(IARRAY(IWORD+1),IDISC(11)) IF (IARRAY(IWORD+2).LT.0) GO TO 2305 C C DISK MOD C CALL CNUMD(IARRAY(IWORD+2),IDISC(19)) IFIX = IAND(IARRAY(IWORD),77B) + 1 CALL CNUMD(IFIX,IDISC(26)) CALL CNUMO(IARRAY(IWORD+3),IDISC(34)) CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IDISC,36) GO TO 2380 C C MOVE SECTORS C 2305 CALL CNUMD(IAND(IARRAY(IWORD+2),77777B),IDISC(19)) CALL EXEC(3,LU2+700B,1) CALL EXEC(2,LU2,IDISC,21) CALL CNUMD(IARRAY(IWORD+3),IFPMS(14)) CALL EXEC(2,LU2,IFPMS,17) C ******* UPDATE POINTERS ******* 2380 IWORD = IWORD + 4 IF (IWORD.LE.64) GO TO 2320 IWORD = IWORD -64 ISECTR = ISECTR + 1 IF (ISECTR.LT.IGET(1757B)) GO TO 2310 ISECTR = 0 ITRK = ITRK + 1 C READ ANOTHER SECTOR WHEN NECESSARY 2310 CALL EXEC(1,2,IARRAY,64,ITRK,ISECTR) 2320 CONTINUE GO TO 1 C C******** MAKE THE PROGRAM FRIENDLY FOR THE PEOPLE ************ C 9000 DO 9025 I = 1,31 IF(IPRS2.EQ.IGO(I)) GO TO(9100,9200,9300,9960,9400,9500,9600, &9700,9970,9800,9980,9900,9988,9992,9905,9910,9920,9930,9984, &9984,9982,9990,25,9940,9940,9940,9994,9996,9997,9998,9950) I 9025 CONTINUE C C CALL EXEC(2,LU2,IX,8) CALL EXEC(2,LU2,I1,11) CALL EXEC(2,LU 2,I2,13) CALL EXEC(2,LU2,I3,12) CALL EXEC(2,LU2,I4,9) CALL EXEC(2,LU2,IP,16) CALL EXEC(2,LU2,I5,13) CALL EXEC(2,LU2,IT,17) CALL EXEC(2,LU2,IN,8) CALL EXEC(2,LU2,IM,15) CALL EXEC(2,LU2,IPR,14) CALL EXEC(2,LU2,IDP,22) CALL EXEC(2,LU2,IPG,19) CALL EXEC(2,LU2,IPP,22) CALL EXEC(2,LU2,I6,12) CALL EXEC(2,LU2,I7,9) CALL EXEC(2,LU2,IQ,17) CALL EXEC(2,LU2,I9,14) CALL EXEC(2,LU2,IR,21) CALL EXEC(2,LU2,IG,11) CALL EXEC(2,LU2,IDI,28) CALL EXEC(2,LU2,ILE,17) CALL EXEC(2,LU2,IH,11) CALL EXEC(2,LU2,IJ,11) CALL EXEC(2,LU2,IK,9) CALL EXEC(2,LU2,IMS,23) CALL EXEC(2,LU2,INS,16) C ^ CALL EXEC(2,LU2,IFP,14) CALL EXEC(2,LU2,IL,12) CALL EXEC(2,LU2,IO,15) CALL EXEC(2,LU2,IPACK,23) GO TO 1 C C C C 9100 CALL EXEC(2,LU2,ITEL1,9) CALL EXEC(2,LU2,ITEL2,9) CALL EXEC(2,LU2,ITEL3,16) GO TO 9999 9200 CALL EXEC(2,LU2,ITEL4,5) CALL EXEC(2,LU2,ITEL5,19) GO TO 9999 9300 CALL EXEC(2,LU2,ITEL8,5) CALL EXEC(2,LU2,ITEL9,23) GO TO 9999 9400 CALL EXEC(2,LU2,ITEL7,6) CALL EXEC(2,LU2,ITEL6,12) GO TO 9999 9500 CALL EXEC(2,LU2,ITEL10,5) CALL EXEC(2,LU2,ITEL11,26) GO TO 9999 9600 CALL EXEC(2,LU2,ITEL12,7) GO TO 1 9700 CALL EXEC(2,LU2,ITEL13,11) GO TO 1 9800 CALL EXEC(2,LU2,ITEL14,22) GO TO 1 9900 CALL EXEC(2,LU2,ITEL15,11) GO TO 1 9905 CALL EXEC(2,LU2,ITEL16,16) GO TO 9999 9910 CALL EXEC(2,LU2,ITEL18,17) GO TO 1 9920 CALL EXEC(2,LU2,ITEL17,21) GO TO 1 9930 CALL EXEC(2,LU2,ITEL26,2) CALL EXEC(2,LU2,ITEL27,5) CALL EXEC(2,LU2,ITEL28,13) GO TO 9999 9940 CALL EXEC(2,LU2,ITEL21,6) CALL EXEC(2,LU2,ITEL20,6) CALL EXEC(2,LU2,ITEL19,6) GO TO 1 9960 CALL EXEC(2,LU2,ITEL22,14) CALL EXEC(2,LU2,ITEL23,19) GO TO 9999 99g70 CALL EXEC(2,LU2,ITEL24,17) GO TO 1 9980 CALL EXEC(2,LU2,ITEL25,22) GO TO 1 9982 CALL EXEC(2,LU2,ITEL30,5) DO 9983 I = 1,4 ITEL30(6) = IFUN(I) CALL EXEC(2,LU2,ITEL30,9) 9983 CONTINUE GO TO 1 9984 ITEL31(2) = IPRS2 CALL EXEC(2,LU2,ITEL31,17) GO TO 1 9988 CALL EXEC(2,LU2,ITEL33,11) GO TO 1 9990 CALL EXEC(2,LU2,ITEL34,13) GO TO 9999 9994 CALL EXEC(2,LU2,ITEL36,14) GO TO 9999 9996 CALL EXEC(2,LU2,ITEL37,14) C 9999 MORUSE(6) = IPRS2 CALL EXEC(2,LU2,MORUSE,8) GO TO 1 9992 CALL EXEC(2,LU2,ITEL35,2) GO TO 1 C ^ 9950 CALL EXEC(2,LU2,IFP,2) GO TO 1 9997 CALL EXEC(2,LU2,ISOR,19) CALL EXEC(2,LU2+1600B,ITEL39,3) CALL EXEC(2,LU2+1600B,IVALU2,-15) CALL EXEC(2,LU2+1600B,IVALU2,-15) CALL EXEC(2,LU2,INS(6),6) 9998 CALL EXEC(2,LU2,ITEL38,10) CALL EXEC(2,LU2,ITEL38,27) GO TO 1 END END$ ASMB,Q * * * CINIT * FIND THE END OF THE ENTRY POINTS. IF MARKED, * WE'VE INITIALIZED ALREADY, OTHERWISE WE'D BETTER * DO IT. WE TAKE 12 SECTORS FOR THE FOOTPRINT AREA * * 1ST 5 WORDS OF FP AREA IARRAY * 1 = FLAG (-1 DONE) 1 = INIT FLAG (1 BAD) * 2 = NEXT TRACK (IFPAR(1)) * 3 = NEXT SECTOR (IFPAR(2)) * 4 = NEXT WORD (IFPAR(3)) * 5 = COUNT (IFPAR(4)) * 6 = START TRACK FP AREA * (IFPAR(5)) * 7 = START SECTOR FP AREA * (IFPAR(6)) * * NAM CINIT,7 ENT CINIT,DSKOT EXT EXEC, $LIBR, $LIBX, .ENTR * RRAY NOP CINIT NOP JSB .ENTR DEF RRAY * LDA RRAY CAX STA ELOC STA DLOC STA FLOC * LDA DSCLB DISC ADDR OF RES LIB ENTRY PTS CLB DIV D128 QUOTIENT = TRACK REM = SECT STA STRAK !j TRACK STB SSECT SECTOR * LDA DSCLN # RES LIB ENTRY PTS ADA DSCUN # RTE LIB ROUTINES CLB DIV D16 DIV BY # ENTS/SECT = # SECTS NEEDED SZB NEED PARTIAL SECTOR? INA ADD 1 TO # SECTS NEEDED ADA SSECT ADD IN START SECT ADA D6 OP SYS TAKES 384 MORE FOR GOOD MEASURE CLB DIV SECT2 DIV BY # SECT/TRACK = # TRACKS NEEDED ADA STRAK ADD IN START TRACK STA STRAK START TRACK OF FP AREA STB SSECT START SECTOR OF FP AREA * JSB EXEC GO READ THE SECTOR DEF *+7 DEF D1 READ DEF ICNWD LU2 BINARY ELOC NOP REALLY RRAY DEF IBUFL 64 WORDS DEF STRAK FP AREA 1ST TRACK DEF SSECT FP AREA 1ST SECTOR * LDA RRAY,I GET 1ST WORD SZA ZERO? JMP NEXT NO. HAVE INITIALIZED ALREADY * CCA YES. MUST INITIALIZE STA EFLAG STA RRAY,I SET FLAG LDA STRAK SAX D1,I SET TRACK LDA SSECT SAX D2,I SET SECT LDA D8 SAX D3,I SET OFFSET * JSB DSKOT WRITE TO DISK DEF *+5 DEF STRAK THIS TRACK DEF SSECT THIS SECTOR DLOC NOP BUFFER TO WRITE DEF IBUFL # OF WORDS * * JSB EXEC READ BACK DEF *+7 TO CHECK THE WRITE DEF D1 DEF ICNWD FLOC NOP DEF IBUFL DEF STRAK DEF SSECT * LDA RRAY,I GET THE FIRST WORD CPA M1 IS IT -1 JMP NEXT CLB,INB STB RRAY,I FLAG IF NO WRITE DONE * NEXT LDA STRAK RETURN START TRACK SAX D5,I LDA SSECT RETURN START SECTOR SAX D6,I JMP CINIT,I * A EQU 0 B EQU 1 TAT EQU 01656B FWA OF TRACK ASSIGN TABLE XEQT EQU 01717B ID SEG ADDR OF CURRENT PROG SECT2 EQU 01757B # SECT/TRACK ON LU2 DSCLB EQU 01761B DISC ADDR IF RES LIB ENTRY PTS DSCLN EQU 01762B # RES LIB ENTRY PTS DSCUN EQU 01764B # RTE LIB ROUTINES * M1 OCT 177777 -1 FLAG D1 DEC 1 D2 DEC 2 D3 DEC 3 D5 DEC 5 D6 DEC 6 D8 DEC 8 D16 DEC 16 D128 DEC 128 * STRAK NOP SSECT NOP EFLAG NOP * ICNWD OCT 102 LU2, BINARY IBUFL DEC 64 BUFFER LENGTH * * * * DSKOT * SUBROUTINE TO WRITE TO DISK * MUST FUDGE TAT SO CAN WRITE ON * SYSTEM TRACKS * * TRK NOP SCT NOP BUF NOP BUFL NOP DSKOT NOP JSB .ENTR DEF TRK * LDA TAT TAT ADA TRK,I OFFSET FOR TRACK STA TTAT SAVE POINTER LDB A,I STB SAVE SAVE VALUE LDB XEQT GET OWN ID SEG ADDR * JSB $LIBR TURN OFF INTERRUPT SYS NOP STB A,I PUT OWN SELF IN AS OWNER OF TRK JSB $LIBX TURN ON INTERRUPT SYS DEF *+1 DEF *+1 * JSB EXEC WATCH OUT! WRITING ON DISK DEF *+7 DEF CODE WRITE,ERR RETURN SET DEF ICNWD DEF BUF,I DEF BUFL,I DEF TRK,I DEF SCT,I JSB SERR ERROR RETURN * SERR LDA TTAT GET POINTER LDB SAVE GET SAVED VALUE JSB $LIBR TURN OFF INTERRUPT SYS NOP STB A,I PUT TAT BACK HOW WE FOUND IT JSB $LIBX TURN INTERRUPT SYS BACK ON DEF *+1 DEF *+1 JMP DSKOT,I BYE BYE * * TTAT NOP TEMP POINTER SAVE NOP TEMP VALUE CODE OCT 100002 END FTN4 SUBROUTINE IMFP (INFO,IL,IT,IS,IW,IV,IB) DIMENSION INFO(6),IB(64) C C C IMFP C I MAKE FOOTPRINTS C C FOUR WORDS/ENTRY C 1. LU (15-6) WORD (5-0) C 2. TRACK C 3. FLAG (15) SECTOR C 4. OLD VALUE (FLAG = 0) C # SECTORS MOVED (FLAG = 1) C C INFO = FOOTPRINT AREA INFORMATION C IL,IT,IS,IW = LU,TRACK,SECTOR,WORD MODIFIED C IV = OLD VALUE (DM) # SECTRS MOVED (MS) C C CALL EXEC (1,102B,IB,64,INFO(5),INFO(6)) C C MAKE SURE THEY DIDN'T CHANGE DISKS ON US C IF (IB(1).NE.-1) GO TO 200 DO 100 I = 2,5 IF (IB(I).NE.INFO(I-1)) GO TO 200 100 CONTINUE C C SET UP NEW ENTRY C CALL EXEC (1,102B,IB,64,INFO(1),INFO(2)) ITMP = INFO(3) IB(ITMP+1) = IOR((IL*64),IW) IB(ITMP+2) = IT IB(ITMP+3) = IS IB(ITMP+4) = IV C C MAKE A FOOTPRINT, MAKE SURE WE MADE IT, C IF EVERYTHING IS PEACHY, UPDATE THE POINTERS C FOR THE NEXT FOOTPRINT C IFLAG = -1 CALL DSKOT(INFO(1),INFO(2),IB,64) C CALL EXEC(1,102B,IB,64,INFO(1),INFO(2)) IF (IB(ITMP+1).EQ.IOR((IL*64),IW).AND.(IB(ITMP+2).EQ.IT) &.AND.(IB(ITMP+3).EQ.IS).AND.(IB(ITMP+4).EQ.IV)) &CALL UPTRS(INFO(1),INFO(2),INFO(3),INFO(4),INFO(5),INFO(6),IB) C 200 CONTINUE END C C C C C SUBROUTINE UPTRS (INT,INS,INW,ICT,IST,ISS,IDSK) DIMENSION IDSK(64) C C C UPDATE POINTERS C C INCREMENT COUNT, IF WE'VE FILLED THE FOOTPRINT C AREA, FILL IT UP ALL OVER AGAIN. C FIX THINGS IN CASE WE CROSS SECTOR OR TRACK C BOUNDARY SO WE KNOW WHERE TO STEP NEXT. C UPDATE ON DISK, TOO. C C ICT = ICT +1 IF (ICT-((ICT/190)*190).EQ.0) GO TO 101 INW = INW +4 IF (INW.LT.64) GO TO 201 INW = INW - 64 INS = INS + 1 ISECN = IGET(1757B) IF (INS.LT.ISECN) GO TO 201 INS = INS - ISECN INT = INT + 1 GO TO 201 101 INW = 8 INS = ISS INT = IST 201 CALL EXEC (1,102B,IDSK,64,IST,ISS) MIDSK(2) = INT IDSK(3) = INS IDSK(4) = INW IDSK(5) = ICT CALL DSKOT(IST,ISS,IDSK,64) END END$ FTN4 SUBROUTINE DOIO(ISTART,ISTOP,LU,IPRAM) DIMENSION IBUF(40),IMESS(29),IPRAM(6),LMESS(17) DIMENSION IPAGE(11) INTEGER OBUF(37) C DATA IMESS/2H ,2HWO,2HRD, &2H ,2HLO,2HCA,2HTI,2HON,2H , &2HVA,2HLU,2HE(,2H8),2H ,2HVA,2HLU,2HE(,2H10,2H) , &2HVA,2HLU,2HE(,2HAS,2H) ,2HVA,2HLU,2HE(,2HSY,2HM)/ DATA IPAGE/2H ,2HPH,2HYS,2HIC,2HAL,2H P,2HAG,2HE / DATA LMESS/2H ,2HLO,2HCA,2HTI,2HON,2HS ,2H ,2H ,2H , &2H T,2HHR,2HOU,2HGH,2H / DATA IBUF/40*2H / C C C THE IPRAM ARRAY TELLS HOW TO DO THE I/O C IPRAM(1) = WORD # TO START COUNTING AT, C IPRAM(2) = 0 MEANS WORD COUNT TO BE IN DECIMAL C IPRAM(2) = 1 MEANS WORD COUNT TO BE IN OCTAL C IPRAM(3) = 0 MEANS PRINT HEADER. = 1 MEANS NO HEADER. C IPRAM(4) =-1 MEANS WE ARE DOING A CROSS MAP LOAD C IPRAM(5) = 1 MEANS A PACKED LISTING IS DESIRED C IPRAM(6) =+N MEANS A MAPPED IN LISTING OF PHYS MEMORY C WHERE N = PHYSICAL PAGE NUMBER C IPRAM(6) =-1 MEANS WE ARE DOING NORMAL I/O C C ISTART IS LOCATION TO START COUNTING AT C ISTOP IS LOCATION TO STOP COUNTING AT. C LU IS THE OUTPUT LU. C C K = IPRAM-1 C IF(IPRAM(5).EQ.1) GO TO 500 C IF(IPRAM(6).LT.0) GO TO 1 CALL CNUMD(IPRAM(6),IPAGE(9)) CALL EXEC(2,LU,IPAGE,11) 1 IF(IPRAM(3).EQ. 0) CALL EXEC(2,LU,IMESS,-58) C C DO 100 I = ISTART,ISTOP K = K + 1 IF((IPRAM(6).LT.0).OR.(K.NE.1024)) GO TO 2 K = 0 IPRAM(6) = IPRAM(6) + 1 2 CALL CNUMD(K,IBUF(1)) IF(IPRAM(2) .EQ.1) CALL CNUMO(K,IBUF(1)) CALL CNUMO(I,IBUF(5)) IF(IPRAM(6).LT.0) GO TO 5 CALL CNUMD(IPRAM(6),IBUF(5)) IBUF(5) = 2HPG 5 IF(IPRAM(4) .NE.-1) GO TO 50 CALL CNUMO(IXGET(I),IBUF(10)) CALL CNUMD(IABS(IXGET(I)),IBUF(15)) IF(IXGET(I).LT.0)IBUF(15) = IBUF(15) + 6400B C CALL IASCI(IXGET(I),IBUF(22)) CALL INVRS(I,IXGET(I),IBUF(25),16,IWRD) C GO TO 75 50 CALL CNUMO(IGET(I),IBUF(10)) CALL CNUMD(IABS(IGET(I)),IBUF(15)) IF (IGET(I).LT.0) IBUF(15) = IBUF(15) + 6400B C CALL IASCI(IGET(I),IBUF(22)) CALL INVRS(I,IGET(I),IBUF(25),16,IWRD) C 75 CALL EXEC(2,LU,IBUF,24+IWRD) IF(IFBRK(IDMY))200,100 100 CONTINUE GO TO 300 200 IPRAM(3) = 9999 300 RETURN C C 500 K = ISTART 550 IF((ISTOP-K).LT.0) RETURN CALL CNUMO(K,LMESS(7)) CALL CNUMO(ISTOP,LMESS(15)) IF(((ISTOP-K)/64).GT.0) CALL CNUMO(K + 63,LMESS(15)) C IF(IPRAM(6).LT.0) GO TO 551 CALL CNUMO(IPRAM,LMESS(7)) CALL CNUMO(IPRAM+ISTOP - ISTART,LMESS(15)) CALL CNUMD(IPRAM(6),IPAGE(9)) C 551 CALL EXEC(3,LU + 700B,1) IF(IPRAM(6).GE.0) CALL EXEC(2,LU,IPAGE,11) CALL EXEC(2,LU,LMESS,17) CALL EXEC(3,LU + 1100B,1) C DO 800 I = 1,8 C CALL PACK (ISTOP - K + 1,IPRAM(4)+1,K,OBUF) CALL EXEC(2,LU,OBUF,37) C K = K + 8 IF((ISTOP-K).LT.0) RETURN IF(IFBRK(IDMY)) 200,800 800 CONTINUE C GO TO 550 END SUBROUTINE DISC3(LU,ITRK,ISECTR,INDEX,IARRAY,IPRAM,LU2,IDISC) DIMENSION IARRAY(64),IPRAM(6),IBUF(36) INTEGER OBUF(37) DIMENSION IDISK(25),IDISC(28) DATA IDISK/2H ,2HWO,2HRD,2H ,2H V,2HAL,2HUE,2H(8,2H) , & 2H V,2HAL,2HUE,2H(1,2H0),2H ,2HVA,2HLU,2HE(, & 2HAS,2H) ,2HVA,2HLU,2HE(,2HSY,2HM)/ DATA IBUF/36*2H / C C C THIS SUBROUTINE DOES THE I/O FOR ALL DISC READS. THE MAIN C PROGRAM DOES THE READ PASSING THE 64 WORDS READ IN IARRAY. C THIS ROUTINE FORMATS THE OUTPUT. C C IN ADDITION IT DOES THE OUTPUT FOR THE ' DP ' INSTRUCTION C THIS IS A SLIGHT PERTERBATION FROM THE SUBROUTINES REAL C PURPOSE. C C C IF IPRAM(1) #0 THEN 64 WORDS ARE OPUTPUT C IF IPRAM(1) =0 THEN ONLY ONE WORD IS OUTPUT C IF IPRAM(3) # 0 THEN NO DISC TRK & SECTOR INFO IS PRINTED C IF IPRAM(4) = 1 THEN 64 WORDS ARE OUTPUT PLUS THE WORD # C IF IPRAM(5) = 0 THEN A PACKED LISTING IS DESIRED C IF IPRAM(6) = 1 THEN DONT PRINT ANY HEADER INFOD C CALL CNUMD(INDEX,IDISC(26)) IF(IPRAM .EQ.0) GO TO 55 NUMBR = 64 INDEX = 1 ID = 21 IF(IPRAM(4).EQ.1) ID = 28 GO TO 100 C 55 NUMBR = 1 ID = 28 C 100 IF(IPRAM(6) .EQ. 1) GO TO 150 CALL CNUMD(LU,IDISC(4)) CALL CNUMD(ITRK,IDISC(11)) CALL CNUMD(ISECTR,IDISC(19)) IF(IPRAM(3).NE.1) CALL EXEC(2,LU2,IDISC,ID) IF(IPRAM(5).NE.1) CALL EXEC(2,LU2,IDISK,25) C SEE IF JUST LIST OF DISC LOCATION DESIRED IF(IPRAM(2).EQ.1) RETURN C IF(IPRAM(5).EQ.1) GO TO 2000 C C 150 DO 1020 I = INDEX,NUMBR C CALL IASCI(IARRAY(I),IBUF(17)) C C C C CALL CNUMD(I,IBUF) CALL CNUMO(IARRAY(I),IBUF(5)) CALL CNUMD(IABS(IARRAY(I)),IBUF(10)) IF (IARRAY(I).LT.0) IBUF(10) = IBUF(10) + 6400B CALL INVRS (0,IARRAY(I),IBUF(21),16,IWRD) CALL EXEC(2,LU2,IBUF,20+IWRD) IF(IFBRK(IDUMY)) 999,1020 1020 CONTINUE RETURN 999 IPRAM(3) = 9999 RETURN C C C FIX UP A POINTER TO THE ARRAY IARRAY SO THAT THE C PACK ROUTINE WILL WORK. C 2000 CALL DUMMY(IARRAY,IPOINT) C DO 3000 I = 1,8 CALL PACK(8,1,IPOINT,OBUF) CALL EXEC(2,LU2,OBUF,37) IPOINT = IPOINT + 8 IF(IFBRK(IDUMY)) 999,3000 3000 CONTINUE END END$ FTN4,L SUBROUTINE DTRK(IPRS1,ITRK,ISECTR,IWORD,ISTOP,IARRAY) DIMENSION IARRAY(64) C C SEE WHETHER WE ARE LOOKING AT A PROGRAM OR OP SYS. C IF(ITRK.GE.0) GO TO 1200 C C A PROGRAM ! C C GET THE # OF SECTORS PER TRACK NSECTS = IGET(1755B - ITRK) IPAST = IPRS1 ISTART = 0 GO TO 1240 C 1200 CALL EXEC(Z1,102B,IARRAY,64,0,1) NSECTS = IGET(1757B) DO 1207 I = 1,64 IF(((IARRAY(I).EQ.2).AND.(IARRAY(I+1).EQ.2000B)).AND. &(IARRAY(I+3).EQ.2000B))GO TO 1208 1207 CONTINUE C C C GRANDFATHER DISC C C C BASE PAGE STARTS HERE IBASE = 2 C ASSUME OP SYSTEM ENDS HERE ISTOP = 77770B C OP SYSTEM STARTS HERE ISTART = 18 C GO TO 1233 C C C STARTING SECTOR OF OP SYSTEM ON DISC 1208 ISTART = IARRAY(I+5) C LAST WORD OF OP SYSTEM ISTOP = IARRAY(I+4) C STARTING SECTOR OF BASE PAGE VALUES ON THE DISC IBASE = IARRAY(I+2) C C C SEE IF WORD IS ON BASE PAGE C 1233 IPAST = IPRS1 - 1024 IF(IPAST.GE. 0) GO TO 1240 C C WORD ON BASE PAGE C ITRK = 0 ISTART = IBASE ITEMP = IPRS1 GO TO 1250 C C 1240 ITRK = IPAST/6144 ITEMP = IPAST - (ITRK * 6144) 1250 ISECTR = ITEMP/64 IWORD = ITEMP - (ISECTR * 64) ISECTR = ISECTR +ISTART IF((ISECTR - NSECTS - 1).LE.0) GO TO 1210 C C OOPS TOO MANY SECTORS C ITRK = ITRK + 1 ISECTR = ISECTR - NSECTS C C C C CHANGE RANGE OF WORD FROM 0-63 TO 1-64 SO FORTRAN CAN HANDLE IT. 1210 IWORD = IWORD + 1 END END$ ASMB,L NAM PIDMI,7 ENT PACK,IASCI,DUMMY,MAPXX,IDEX * ENT IGET,IPUT EXT $LIBR,$LIBX,.ENTR,.ENTP,$IDEX * * * *GET NOP * DLD IGET,I * SWP * LDA A,I * LDA A,I * JMP B,I * * * *IXGET NOP * DLD IXGET,I * SWP * LDA A,I * XLA A,I * JMP B,I * * * *PUT NOP * JSB $LIBR * NOP * LDA IPUT,I * STA IGET * ISZ IPUT * DLD IPUT,I * LDA A,I * LDB B,I * STB A,I * JSB $LIBX * DEF IGET * * * *IXPUT NOP * JSB $LIBR * NOP * LDA IXPUT,I * STA IXGET * ISZ IXPUT * DLD IXPUT,I * LDA A,I * LDB B,I * XSB A,I * JSB $LIBX * DEF IXGET * IDEXX NOP IDEX NOP ROUTINE TO GET ADDRESS OF ID EXT JSB .ENTR GET THE PARAMETER DEF IDEXX LDB IDEXX,I GET THE ID ADDRESS ADB D28 INDEX TO ID EXT WORD LDA B,I PULL IT IN ALF ROTATE ARROUND RAL,RAL AND M77 KEEP ONLY ID EXT # ADA $IDEX ADD ADDRESS OF ID EXT TABLE LDA A,I PULL IN ADDRESS STA IDEXX,I AND GIVE TO CALLER JMP IDEX,I * D28 DEC 28 M77 OCT 77 * * * * * * * THIS ROUTINE ACCEPTS UP TO 8 WORDS OF INPUT AND CONVERTS THOSE * WORDS TO OCTAL ASCII IN A PACKED FORMAT . EIGHT WORDS OF OCTAL * DELIMITED BY A * AND THEN THEIR ASIII REPRESENTATION. * THE WORDS MAY EITHOR BE IN THE SYSTEM MAP OR THE USER MAP * THE ROUTINE IS FORTRAN CALLABLE AS: * * CALL PACK(#WORDS,MAP,INPUT BUFFER,OUTPUT BUFFER) * * MAP = 0 SYSTEM MAP * MAP >= 1 USER MAP * * THE OUTPUT BUFFER MUST BE 36 WORDS LONG * * * KOUNT NOP MAP NOP INBUF NOP ASSLC NOP PACK NOP JSB .ENTR GET THE PARAMETER ADDRESSES DEF KOUNT * LDA KOUNT,I GET THE # OF WORDS TO CONVERT BACK CMA,INA MAKE NEG AND SSA,RSS IF 0 OR NEG WORDS INPUT THEN FORGET IT JMP PACK,I STA KOUNT NOW SAVE FOR LOOP * ADA D8 ADD 8 TO SEE IF INPUT # SSA,RSS GREATER THAN 8 JMP CONTU ALL IS WELL ! LDA D8 JMP BACK * * CONTU LDA MAP,I GET THE MAP AND SAVE STA MAP FOR LATER * LDA INBUF,I STA INBUF * LDA ASSLC GET THE ADDRESS LDB ASSLC TWICE STB TEMP SAVE TEMPORARIALLY INA BUMP IT CLE,ELA CONVERT TO A BYTE ADDRESS STA ASSLC AND SAVE FOR LATER ADB D29 NOW DEFINE THE ASCII ADDRESS STB OABUF AND SAVE FOR THE IASCI SUBROUTINE STB YTEMP * LDA DM37 NOW CLEAR OUT PTHE OLD BUFFER STA XTEMP LDB BLANK GET A BLANK READY * LOOPX STB TEMP,I SET A BLANK INTO THE OUTPUT BUFFER ISZ TEMP STEP BUFFER POINTER ISZ XTEMP DONE YET ? JMP LOOPX NO * * * LOOP LDB INBUF GET THE 1ST WORD LDA MAP GET THE MAP TO USE SZA,RSS SYS MAP ? JMP SYSTM YES LDB B,I NO JMP OUT SYSTM XLB B,I GET THE INFO FROM THE SYSTEM MAP OUT STB XTEMP SAVE FOR THE IASCI SUBROUTINE JSB ASCI AND CONVERT TO OCTAL ASCII * JSB IASCI AND PLACE THROUGH THE ASCII FILTER DEF *+3 DEF XTEMP DEF TEMP * STB OABUF,I PUT RESULT INTO THE OUTPUT BUFFER * ISZ INBUF BUMP OUR ISZ OABUF POINTERS ISZ ASSLC AND THE CHAR ADDRESS * ISZ KOUNT ARE WE DONE ? JMP LOOP NOT YET * CCB YES,GET THE END OF THE OCTAL #'S ADB YTEMP LDA B,I NOW GET THE LAST WORD IOR ASTRK PUT IN AN ASTRISK STA B,I NOW PUT IT BACK * JMP PACK,I RETURN TO THE CALLER * * * * ** DATA TO OCTAL ASCII CONVERSION ** SPC 1 * CALLING SEQUENCE: LDB (DATA WORD) * LDA (ADDRESS AT START OF STORAGE) * JSB ASCI SPC 1 ASCI NOP OUTPUT 6 DIGITS * STA ASSLC SET THE ADDRESS (NOT USED AT THE MOMENT ) LDA KM6 GET NO. OF DIGITS TO CONVERT RBL MOVE FIRST DIGIT TO LOW B JSB NUM.F CONVERT THE NUMBER JMP ASCI,I RETURN SPC 2 *SCI2 NOP 5 DIGITS & BLANK * LDA KM5 GET NO OF DIGITS TO CONVERT * BLF POSITION FIRST DIGIT * JSB NUM.F CONVERT THE NUMBER * JMP ASCI2,I RETURN * * *********************************** * * CONVERT DIGITS TO ASCII BASE 8 * * ******L***************************** * * NUM.F NOP STA T1NUM SAVE THE DIGIT COUNT CPA KM6 IF 6 THEN CLA,INA,RSS USE 1 AS A MASK FOR FIRST DIGIT NUM00 LDA K7 ELSE USE 7 AND B ISOLATE THE DIGIT ADA "0" ADD 60 TO MAKE ASCII JSB PUT.F PUT IN THE BUFFER BLF,RBR POSITION THE NEXT DIGIT ISZ T1NUM DONE? JMP NUM00 NO DO NEXT DIGIT * JMP NUM.F,I YES RETURN * T1NUM NOP KM6 DEC -6 * SPC 2 * * ******************************** * * PUT CHARACTER IN LIST BUFFER * * ******************************** * PUT.F NOP STB T1PUT SAVE B LDB ASSLC GET CURRENT BUFFER ADDRESS AND B177 ISOLATE THE CHARACTER CLE,ERB WORD ADDRESS TO B E=UPPER,LOWER FLAG SEZ,RSS IF UPPER CHAR ALF,SLA,ALF POSITION AND SKIP XOR B,I INCLUSION OF HIGHER CHAR. XOR B40 ADD,TAKE AWAY LOWER BLANK STA B,I SET THE WORD DOWN ISZ ASSLC STEP THE CHAR ADDRESS LDB T1PUT RESTORE B JMP PUT.F,I RETURN * T1PUT NOP OABUF NOP B40 OCT 40 K7 DEC 7 D8 DEC 8 "0" OCT 60 D29 DEC 29 DM37 DEC -37 BLANK ASC 1, ASTRK OCT 52 LOWER BYTE = * B177 OCT 177 TEMP NOP D64 DEC 64 D1024 DEC 1024 XTEMP NOP YTEMP NOP ADDRS NOP PONTR NOP DUMMY NOP THIS IS A DUMMY SUBROUTINE TO FIX UP A POINTER JSB .ENTR SO THAT THE PACK ROUTINE CAN WORK WITH ARRAYS DEF ADDRS IN A PROGRAM AS WELL AS MEMORY ADDRESSES. * LDA ADDRS STA PONTR,I JMP DUMMY,I SPC 1 * * * * * * * THE IASCI SUBROUTINE TAKES ONE WORD OF INPUT AND CONVERTS THAT * WORD TO ASCII. IF ANY BYTE CAN NOT BE CONVERTED TO ASCII THEN * AN ASCII BLANK IS RETURNED FOR THAT BYTE. * * * CALLING SEQUENCE : JSB IASCI * DEF RETUR N * DEF VALUE VALUE TO BE CONVERTED * DEF ASCII RETURNED ASCII VALUE * ---- * * ON RETURN, THE B REGISTER HAS THE ASCII VALUE * VALUE NOP LOCTN NOP IASCI NOP JSB .ENTR DEF VALUE * LDA VALUE,I GET THE VALUE TO CONVERT STA TEMP1 SAVE IT AND M377 KEEP ONLY LOWER BYTE JSB CNVRT AND CONVERT STB VALUE SAVE THE RETURNED VALUE * LDA TEMP1 GET THE WORD BACK AGAIN AND M1774 KEEP ONLY THE UPPER BYTE ALF,ALF SHIFT TO LOW ORDER JSB CNVRT AND GO CONVERT BLF,BLF PUT INTO UPPER BYTE ADB VALUE NOW MERGE ADD IN LOWER BYTE STB LOCTN,I AND RETURN IT TO THE USER JMP IASCI,I * * * THIS SUBROUTINE CONVERTS LOWER BYTE OF A TO ASCII AND PLACES * THE RETURNED ASCII INTO B * CNVRT NOP STA B AND SAVE CMA,INA ADA B135 SSA IS IT OK JMP BLNK2 NO LDA B40 CMA,INA ADA B SSA OK ? BLNK2 LDB B40 NO JMP CNVRT,I * * * * A EQU 0 B EQU 1 M1774 OCT 177400 B135 OCT 137 M377 OCT 377 TEMP1 NOP DM64 DEC -64 SIGN OCT 100000 * * * ************************************** * * MAP IN ANY PAGE OF PHYSICAL MEMORY * * ************************************** * * * THE PURPOSE OF THIS SUBROUTINE IS TO MAP IN THE PAGE REQUESTED * AND READ 64 WORDS OF THAT MAPPED PAGE. THE ROUTINE IS FORTRAN * CALLABLE. TO BE USED ONE OF TWO CONDITIONS MUST BE MET. * THE PROGRAM USING THE ROUTINE MUST NOT BE GREATER THAN 30K * IN LENGTH (IE IF PROGRAM IS 10K AND LARGEST ADDRESSABLE * PARTITION IS 12K YOUR OK. IF LARGEST ADDRESSABLE PARTITION IS * 11K YOU HAVE PROBLEMS). ALTERNATELY IF THE PROGRAM EXTENDS * INTO THE LAST TWO PAGES OF MEMORY MAKE SURE THIS ROUTINE * AND THE INPUT PARAMETERS TO THIS ROUTINE, LDA MPBUF GET THE ADDRESS USA !!!!!!!!!!RESTORE THE USER MAP!!!!!!!!!!!!!!!! JSB $LIBX RESTORE INTERUPTS DEF *+1 DEF *+1 * LDA FLAG,I GET THE FLAG CPA D1 DO WE UPDATE THE PAGE # & OFFSET RSS YES JMP MAPXX,I NO, SO RETURN TO THE CALLER * LDA OFSET,I GET THE OFFSET ADA D64 ADD 64 WORDS FOR WHAT WE JUST DID CLB DIV D1024 DIVIDE NEW OFFSET BY # OF WORDS IN PAGE ADA PAGE#,I ADD OLD PAGE # TO GIVE NEW PAGE # STA PAGE#,I AND SEND THE RESULT BACK STB OFSET,I SEND THE NEW OFFSET BACK TOO * JMP MAPXX,I RETURN TO CALLER * * WRTPG LDA START GET THE START ADDRESS ADA OFSET,I ADD THE OFFSET INTO THE PAGE LDB NVAL,I GET THE NEW VALUE STB A,I AND SET IT UP. JMP RTMAP RESET THE MAP & RETURN * * * D1 DEC 1 D2 DEC 2 START OCT 74000 START ADDRESS OF NEWLY MAPPED AREA MPBUF DEF MAPIT MAPIT BSS 30 BUFFER FOR 1ST 30 WORDS OF USER MAP MAP31 NOP THIS LOCATION IS USED TO CHANGE MAP MAP32 NOP THIS LOCATION IS FOR I/O OVERFLOW OLD31 NOP OLD32 NOP * * END ASMB,Q,C NAM INVRS,7 * * THIS ROUTINE INVERSE ASSEMBLES HP 21MX * INSTRUCTIONS * * THE CALLING SEQUENCE IS AS FOLLOWS * * JSB INVRS * DEF RTRN * DEF ADDRSS LOGICAL ADDRESS OF INSTRUCTION * DEF VALUE INSTRUCTION AT ADDRSS * DEF IBUF OUTPUT BUFFER * DEF ISIZE SIZE OF OUTPUT BUFFER * DEF IWRDS RETURNED NO OF WORDS FILLED * RTRN ... * * FORTRAN CALL: * * CALL INVRS(IADRS,VALUE,IBUF,ISIZE,IWRDS) * * ENT INVRS EXT .ENTR * * A EQU 0 B EQU 1 * * ADDRS BSS 1 VALUE BSS 1 BUFAD BSS 1 BSIZE BSS 1 WCNT BSS 1 INVRS NOP JSB .ENTR DEF ADDRS LDA BUFAD RAL MAKE BYTE ADDRESS E STA BUFAD STA BPNTR LDB BSIZE,I GET BUFFER SIZE RBL MAKE INTO BYTES ADA B COMPUTE END OF BUFFER STA BFEND LDA ADDRS,I STA IADR SAVE ADDRESS OF INSTRUCTION LDA B2 SET NO OF WORDS/ENTRY STA INCR IN INCREMENT JSB LOAD FETCH INSTRUCTION STA INSTR STA TEMP AND B70K IS IT A MEMORY REFERENCE SZA JMP MRGI YES GO GET IT LDA INSTR NO ELA,ALF PUT SIGN IN E REG RAL AND BITS 10&11 IN BITS 0&1 SEZ IF E SET(I.E. SIGN) MUST BE I/O OR EIG JMP IOGI * AND B3 SET UP OP CODE TABLE COUNTER LDB M18 SHIFT ROTATE SLA LDB M12 ALTER SKIP STB CNTR ADA GRTBL GET ADDRESS OF GROUP TABLE LDB A,I * LOOP1 LDA TEMP FETCH REMAINING BITS OF INSTRUCTION AND B,I ARE ALL REQUIRED BITS SET XOR B,I SZA,RSS JMP FOND1 YES GO GET MNEMONIC LOP1A ADB INCR BUMP ADDRESS ISZ CNTR JMP LOOP1 * NFND LDA BUFAD IF WE FALL THROUGH NOT COMPLETELY STA BPNTR DEFINED SO JUST PRINT OCTAL LDA INSTR JSB PN JMP EXIT * IADR BSS 1 INCR BSS 1 INSTR BSS 1 TEMP BSS 1 CNTR BSS 1 BPNTR BSS 1 * B2 OCT 2 B3 OCT 3 B70K OCT 70000 M12 DEC -12 M18 DEC -18 BFEND BSS 1 * GRTBL DEF *+1 DEF SRGA DEF ASGA DEF SRGB DEF ASGB * MRGA1 DEF MRG-4 * FOND1 JSB POPCD PRINT MNEMONIC LDA B,I REMOVE OPCODE FROM AND B1777 INSTRUCTION XOR TEMP STA TEMP AND B1777 ARE ANY BITS LEFT SZA,RSS JMP EXIT NO,THEN RETURN LDA COMMA JSB TYO PRINT COMMA JMP LOP1A GO LOOK FOR REST * B1777 OCT 001777 COMMA OCT 54 * MRGI LDA INSTR ALF,RAL AND B17 RAL TIMES 2  ADA MRGA1 COMPUTE TABLE POSITION LDB A JSB POPCD PRINT MNEMONIC LDA INSTR COMPUTE ADDRESS AND B2000 MERGE WITH PROPER PAGE SZA LDA IADR XOR INSTR AND B76K XOR INSTR JSB PADR PRINT ADDRESS JMP EXIT * B17 OCT 17 B2000 OCT 2000 B76K OCT 76000 * IOGI LDB IOGTB FETCH TABLE OF LOOP FOR I/O SLA,RSS IF EIG INSTEAD LDB DSGTB THEN GET TABLE FOR EIG'S STB PNTR PARMETERS LDB PNTR,I SET B TO START ISZ PNTR LOOP2 LDA PNTR,I GET COUNT FOR THIS TYPE SSA JMP LOP2A IF NEGATIVE CONTINUE * SZA,RSS IF ZERO THEN DONE JMP NFND LDA B3 STA INCR ELSE SET INCREMENT TO 3 LDA PNTR,I AND MAKE COUNT NEGATIVE CMA,INA * LOP2A STA CNTR ISZ PNTR LOOP3 LDA INSTR FETCH INSTRUCTION XOR B,I SEARCH FOR MATCH AND PNTR,I MASK UNWANTED BITS SZA,RSS JMP FOND2 ADB INCR BUMP ADDRESS IN OPCTBL ISZ CNTR DONE WITH THIS TYPE JMP LOOP3 NO CONTINUE ISZ PNTR JMP LOOP2 YES GO TO NEXT TYPE * * PNTR BSS 1 * FOND2 JSB POPCD GO PRINT MNEMONIC LDA PNTR,I FETCH MASK CMA IF EXACT NO OPERAND IN SAME WORD AND B77 SZA,RSS JMP OPRND * AND INSTR STRIP OFF OPERAND STA TEMP SAVE FOR COMMA C TEST LDB PNTR,I IS MASK FOR CPB DSMSK A DOUBLE SHIFT GROUP SZA AND OPERAND EQUAL 0 RSS LDA B20 YES MAKE OPERAND IT 16 AND B77 AND MASK C BIT JSB PNUMB GO PRINT NUMBER LDA TEMP AND B1000 IS A COMMA C REQUIRED SZA,RSS NO RETURN JMP EXIT LDA COMMA JSB TYO PRINT COMMA LDA "C JSB TYO PRINT "C" JMP EXIT * * * PRINTS MULTI WORD OPERANDS * OPRND LDA TFISSA,RSS ADA B7 YES ADD 101B ADA B72 NO ADD 57B JSB TYO GO PRINT IT JMP CONV,I RETURN * B7 OCT 7 B45 OCT 45 B72 OCT 72 M13B OCT -13 D40 DEC 40 D1600 DEC 1600 * TEMP3 BSS 1 * * * A =ADDRESS TO BE PRINTED * * PADR NOP PRINT ADDRESS STA SIGN SAVE INDIRECT BIT ELA,CLE,ERA REMOVE SIGN BIT * ************INSERT SYMBOL SEARCH HERE * JSB PNUMB GO PRINT NUMBER LDA SIGN SSA,RSS IS ",I" REQUIRED JMP PADR,I NO THEN RETURN * LDA COMMA YES THEN PRINT ",I" JSB TYO LDA "I JSB TYO JMP PADR,I AND RETURN * "I OCT 111 RADIX DEC 8 * SIGN BSS 1 * * A =NUMBER TO BE PRINTED * PNUMB NOP STA TEMP3 LDA BLANK JSB TYO PRINT BLANK LDA TEMP3 JSB PN PRINT NUMBER JMP PNUMB,I * PN NOP LDB TBADD SET TEMP BUFFER STB TBPTR PN1 CLB CLEAR B FOR DIV DIV RADIX ADB M12B CONVERT TO ASCII SSB,RSS ADB B7 ADB B72 JSB SRBT PUT IN TEMP BUFFER SZA IF QUOTIENT NON ZERO CONTINUE JMP PN1 * LDB TBADD ELSE MOVE TO OUTPUT BUFFER CMB,INB SET UP CHAR COUNT ADB TBPTR STB TEMP3 * PN2 ISZ TBPTR BUMP POINTER LDA TBPTR,I FETCH CHARACTER JSB TYO PRINT CHARACTER ISZ TEMP3 JMP PN2 CONTINUE UNTIL ALL ARE MOVED JMP PN,I AND THEN RETURN * * SRBT NOP SAVE CHARACTERS IN REVERSE ORDER STB TBPTR,I CCB ADB TBPTR DECREMENT POINTER STB TBPTR JMP SRBT,I AND RETURN * BLANK OCT 40 M12B OCT -12 * TBPTR BSS 1 BSS 16 TBADD DEF *-1 * EXIT LDA BLANK FILL WITH BLANK CHAR JSB TYO LDA BUFAD COMPUTE WORD COUNT CMA,INA ADA BPNTR ARS %+STA WCNT,I JMP INVRS,I AND RETURN * * MRG EQU * MEMORY REFERENCE GROUP AND 0 OCT 044216 JSB 0 OCT 100624 XOR 0 OCT 154204 JMP 0 OCT 100262 IOR 0 OCT 075304 ISZ 0 OCT 075554 ADA 0 OCT 043373 ADB 0 OCT 043374 CPA 0 OCT 052533 CPB 0 OCT 052534 LDA 0 OCT 105673 LDB 0 OCT 105674 STA 0 OCT 134773 STB 0 OCT 134774 SRGA EQU * SHIFT ROTATE GROUP ALF OCT 044100 ELA OCT 060473 ERA OCT 061053 ALR OCT 044114 RAR OCT 130324 RAL OCT 130316 ARS OCT 044475 ALS OCT 044115 OCT 40 CLE OCT 052277 SLA OCT 134273 OCT 27 ALF OCT 044100 OCT 26 ELA OCT 060473 OCT 25 ERA OCT 061053 OCT 24 ALR OCT 044114 OCT 23 RAR OCT 130324 OCT 22 RAL OCT 130316 OCT 21 ARS OCT 044475 OCT 20 ALS OCT 044115 SRGB EQU * BLF OCT 047200 ELB OCT 060474 RBR OCT 130374 RBL OCT 130366 BRS OCT 047575 BLS OCT 047215 OCT 4040 CLE OCT 052277 SLB OCT 134274 OCT 4027 BLF OCT 047200 OCT 4026 ELB OCT 060474 OCT 4025 ERB OCT 061054 OCT 4024 BLR OCT 047214 OCT 4023 RBR OCT 130374 OCT 4022 RBL OCT 130366 OCT 4021 BRS OCT 047575 OCT 4020 BLS OCT 047215 ASGA EQU * ALTER SKIP GROUP CCA OCT 051523 CLA OCT 052273 CMA OCT 052343 SEZ OCT 133674 CCE  OCT 051527 OCT 2100 CLE OCT 052277 CME OCT 052347 SSA OCT 134723 SLA OCT 134273 INA OCT 075213 SZA OCT 135353 RSS OCT 131645 ASGB EQU * CCB OCT 051524 CLB OCT 052274 CMB OCT 052344 OCT 6040 SEZ OCT 133674 OCT 6300 CCE OCT 051527 OCT 6100 CLE OCT 052277 OCT 6200 CME OCT 052347 SSB OCT 134724 SLB OCT 134274 INB OCT 075214 SZB OCT 135354 OCT 6001 RSS OCT 131645 OVFG EQU * OVERFLOW GROUP CLO OCT 052311 STO OCT 135011 SOS OCT 134505 SOC OCT 134465 CLF EQU * CLEAR FLAG CLF 0 OCT 052300 IOG EQU * I/O GROUP CLC 0 OCT 052275 STC 0 OCT 134775 OTB 0 OCT 120374 OTA 0 OCT 120373 LIB 0 OCT 106204 LIA 0 OCT 106203 MIB 0 OCT 111304 MIA 0 OCT 111303 SFS 0 OCT 133735 SFC 0 OCT 133715 STF 0 OCT 135000 HLT 0 OCT 072016 DSG EQU * DOUBLE SHIFT GROUP OCT 003100 RRR 1 WORD OCT 131574 OCT 003040 LSR 1 WORD OCT 107044 OCT 003020 ASR 1 WORD OCT 044544 OCT 002100 RRL 1 WORD OCT 131566 OCT 002040 LSL 1 WORD OCT 107036 OCT 002020 ASL 1 WORD OCT 044536 EIG1 EQU * 1 WORD EXTENDED AND DMS GROUP OCT 003741 CAX 1 WORD OCT 051432 OCT 003751 CAY 1 WORD OCT 051433 OCT 007741 CBX 1 WORD OCT 051502 OCT 007751 CBY 1 WORD OCT 051503 OCT 003744 CXA 1 WORD OCT 053233 OCT 007744 CXB 1 WORD  OCT 053234 OCT 003754 CYA 1 WORD OCT 053303 OCT 007754 CYB 1 WORD OCT 053304 OCT 007761 DSX 1 WORD OCT 056052 OCT 007771 DSY 1 WORD OCT 056053 OCT 007760 ISX 1 WORD OCT 075552 OCT 007770 ISY 1 WORD OCT 075553 OCT 003747 XAX 1 WORD OCT 153132 OCT 003757 XAY 1 WORD OCT 153133 OCT 007747 XBX 1 WORD OCT 153202 OCT 007757 XBY 1 WORD OCT 153203 OCT 007763 LBT 1 WORD OCT 105576 OCT 007764 SBT 1 WORD OCT 133476 OCT 007767 SFB 1 WORD OCT 133714 OCT 007100 FIX 1 WORD OCT 063432 OCT 007120 FLT 1 WORD OCT 063616 OCT 003727 LFA 1 WORD OCT 106013 OCT 007727 LFB 1 WORD OCT 106014 OCT 007703 MBF 1 WORD OCT 110660 OCT 007702 MBI 1 WORD OCT 110663 OCT 007704 MBW 1 WORD OCT 110701 OCT 007706 MWF 1 WORD OCT 112370 OCT 007705 MWI 1 WORD OCT 112373 OCT 007707 MWW 1 WORD OCT 112411 OCT 003712 PAA 1 WORD OCT 122103 OCT 007712 PAB 1 WORD OCT 122104 OCT 003713 PBA 1 WORD OCT 122153 OCT 007713 PBB 1 WORD OCT 122154 OCT 003730 RSA 1 WORD OCT 131623 OCT 007730 RSB 1 WORD OCT 131624 OCT 003731 RVA 1 WORD OCT 132013 OCT 007731 RVB 1 WORD OCT 132014 OCT 003710 SYA 1 WORD OCT 135303 OCT 007710 SYB 1 WORD OCT 135304 OCT 003711 USA 1 WORD OCT 143123 OCT 007711 USB 1 WORD OCT 143124 OCT 003722 XMA 1 WORD OCT 154043 OCT 007722 XMB 1 WORD OCT 154044 OCT 007720 XMM  OCT 134175 OCT 015736 UJP 2 WORDS OCT 142372 OCT 015737 UJS 2 WORDS OCT 142375 EIG3 EQU * 3 WORD JRS OCT 017715 JRS 3 WORDS OCT 100575 OCT 017766 CBT 3 WORDS OCT 051476 OCT 017765 MBT 3 WORDS OCT 110676 OCT 017776 CMW 3 WORDS OCT 052371 OCT 017777 MVW 3 WORDS OCT 112341 OCT 017774 CBS 3 WORDS OCT 051475 OCT 017773 SBS 3 WORDS OCT 133475 OCT 017775 TBS 3 WORDS OCT 136575 MIC EQU * MICRO CODED MACROS OCT 005201 DBLE 0 FORTRAN CALLABLE OCT 054566 OCT 056700 OCT 005202 SNGL 0 FORTRAN CALLABLE OCT 134421 OCT 104600 OCT 025203 .XMPY 4 WORD(S) OCT 166247 OCT 123770 OCT 025204 .XDIV 4 WORD(S) OCT 166236 OCT 075700 OCT 017205 .DFER 3 WORD(S) OCT 164600 OCT 061040 OCT 025213 .XADD 4 WORD(S) OCT 166233 OCT 054660 OCT 025214 .XSUB 4 WORD(S) OCT 166255 OCT 141640 OCT 177221 .GOTO 31 SPECIAL PROCESSING OCT 165001 OCT 137550 OCT 175222 ..MAP 30 SPECIAL PROCESSING OCT 166437 OCT 044320 OCT 167223 .ENTR 29 SPECIAL PROCESSING OCT 164660 OCT 137740 OCT 167224 .ENTP 29 SPECIAL PROCESSING OCT 164660 OCT 137620 OCT 015225 .PWR2 2 WORD(S) OCT 165561 OCT 127570 OCT 007226 .FLUN 1 WORD(S) OCT 164726 OCT 142600 OCT 015227 .SETP 2 WORD(S) OCT 165727 OCT 137620 OCT 015230 .PACK 2 WORD(S) OCT 165533 OCT 052210 OCT 007220 .XFER 1 WORD(S) OCT 166240 OCT 061040 OCT 015206 .XPAK 2 WORD(S) OCT 166252 OCT 044010 OCT 005207 XADD 0 FORTRAN CALLABLE OCT 153106 OCT 053600 OCaT 005210 XSUB 0 FORTRAN CALLABLE OCT 154447 OCT 045400 OCT 005211 XMPY 0 FORTRAN CALLABLE OCT 154062 OCT 155300 OCT 005212 XDIV 0 FORTRAN CALLABLE OCT 153303 OCT 144000 OCT 015215 .XCOM 2 WORD(S) OCT 166235 OCT 117730 OCT 015216 ..DCM 2 WORD(S) OCT 166426 OCT 052330 OCT 005217 DDINT 0 FORTRAN CALLABLE OCT 054703 OCT 115260 OCT 005257 .EMAP 0 FORTRAN CALLABLE OCT 164657 OCT 044320 OCT 005240 .EMIO 0 FORTRAN CALLABLE OCT 164657 OCT 075250 OCT 005241 MMAP 0 FORTRAN CALLABLE OCT 111543 OCT 121200 END END MCEND EQU * END END ASMB,L NAM IXGP,7 ENT IXGET,IXPUT EXT $LIBR,$LIBX * * * *GET NOP * DLD IGET,I * SWP * LDA A,I * LDA A,I * JMP B,I * * * IXGET NOP DLD IXGET,I SWP LDA A,I XLA A,I JMP B,I * * * *PUT NOP * JSB $LIBR * NOP * LDA IPUT,I * STA IGET * ISZ IPUT * DLD IPUT,I * LDA A,I * LDB B,I * STB A,I * JSB $LIBX * DEF IGET * * * IXPUT NOP JSB $LIBR NOP LDA IXPUT,I STA IXGET ISZ IXPUT DLD IXPUT,I LDA A,I LDB B,I XSB A,I JSB $LIBX DEF IXGET * * A EQU 0 B EQU 1 END <  -8 25117-80661 1523 S 0122 RTE DVR47 DRIVER             H0101 8ASMB,R,B,L,T,C * NAM DVR47 ENT I.47,C.47 * * THIS DRIVER IS DESIGNED TO OPERATE THE DIGITAL MULTI- * FUNCTION METER / SCANNER SUBSYSTEM. * * THE STANDARD EQUIPMENT CONSISTS OF: * * 1. HP 3480-OPT 004 DVM * 2. HP 3484-OPT HO4,041,042,043 * 3. HP 2911A CROSSBAR SCANNER * 4. HP 2911B-OPT. 033 SCANNER CONTROL * 5. HP 02116-6123 CROSSBAR SCANNER I/O CARD * 6. HP 28037-60003 CONTROLLER MICROCIRCUIT CARD * 7. HP 28037-60004 DATA SOURCE INTERFACE CARD * * THE FORTRAN CALL TO DVR47 IS: * * CALL EXEC (1,IDRT,DATA,NUMB,IPROG,ISCAN) * * WHERE: IDRT = SUBSYSTEM LOGICAL UNIT NUMBER * DATA = USERS DATA BUFFER ADDRESS * NUMB = NUMBER OF READINGS (1 IF NOT DIGITIZE) * NOTE: THIS IS NOT THE # OF CPU WORDS! * IPROG= MULTIFUNCTION UNIT PROGRAM WORD * ISCAN= SCANNER PROGRAM WORD * * PROGRAM WORD: BITS MEANING * (IPROG) ---- ------- * * 15 DMA (OPTIONAL W/SAMPLE&HOLD) * * 14-12 NOT USED * * 11-9 EXTERNAL PACER: 0= NO * 1= YES * * 8-6 FILTER: 0= NO FILTER * 1= FILTER A * 2= FILTER B * * 5-3 FUNCTION: 0= DC * 1= AC(AC) * 2= OHMS * 3= AC(DC) * 4= SAMP/HOLD (NO DELAY) * 5= SAMP/HOLD (W/DELAY) * * 2-0 RANGE: 0= --- , 10 MOHM * 1= 1000V, 1 MOHM * 2= 100V, 100 KOHM * 3= 10V, 10 KOHM *  4= 1V, 1 KOHM * 5= 100MV, 100 OHM * * * * SCANNER PROGRAM: BITS MEANING * (ISCAN) ---- ------- * * 15 BLOCK SCAN ENABLE= 1 * * 14-12 DELAY: 0= 27MS * 1= 27MS * 2= 27MS * 3= 27MS * 4= 42MS * 5= 62MS * 6= 145MS * 7= 500MS * * 11-9 NOT USED * * 8-0 CHANNEL NUMBER (INTEGER) * * * THE FORTRAN CALL TO CLEAR ALL DVM PROGRAM LINES IS: * * CALL EXEC (1,IDRT,0) * * WHERE: IDRT = SUBSYSTEM LOGICAL UNIT NUMBER * * SKP * * INITITION SECTION * I.47 NOP LDB EQT6,I CHECK FOR CPB D1 READ REQUEST JMP SETIO OK- CONFIGURE I/O ERROR CLA,INA,RSS REJECT ERROR LDA D5 DMA NEEDED! CLB JMP I.47,I RETURN * SETIO INA IOR OTA FORM "OTA PGM" STA OTA1 STORE OUTPUT INSTRUCTION STA OTA6 XOR B1100 FORM "STC PGM,C" STA STCC1 STORE XOR B1200 FORM "LIA PGM" STA LIA1 STORE XOR B1400 FORM "CLF PGM" STA CLF1 STORE INA XOR B1000 FORM "STF SCAN" STA STF1 STORE XOR B700 FORM "OTA SCAN" STA OTA5 STORE XOR B5000 FORM "OTB SCAN,C" STA OTB1 STORE XOR B5000 FORM "STC SCAN" IOR B100 STA STC2 STORE * LDB EQT7,I CLEAR DVM SZB PROGRAM LINES ? JMP BUFR NO, CHECK BUFFER LENGTH CLA OTA6 OTA 0 CLEAR LINES LDA D4 SET IMMEDIATE COMPLETION CCB SET B REG. TO -1 JMP I.47,I RETURN * BUFR LDA EQT8,I GET NUMBER OF READINGS ADA DM1 SUBTRACT 1 SSA IS COUNT 1 OR GREATER ? JMP ERR02 NO, REJECT * LDA EQT10,I GET SCANNER PROGRAM ALF AND B7 ISOLATE DELAY STA B SAVE ADA DM3 SSA CODE <3 ? LDB B3 YES, SET DELAY= 27 MS ADA DM5 SSA,RSS CODE >7 ? JMP ERR02 YES, REJECT OTB1 OTB 0,C OUTPUT DELAY CODE * LDA EQT10,I GET SCANNER PROGRAM AND B7777 ISOLATE CHANNEL # CLB DIV D10 CONVERT STB WORD CLB TO DIV D10 ALF BCD ADA B ALF ADA WORD STF1 STF 0 ENABLE CHANNEL BITS OTA5 OTA 0 OUTPUT CHANNEL STC2 STC 0 ENCODE SCANNER * LDA EQT9,I GET PROGRAM WORD LDB DM6 JSB DECOD DECODE RANGE STB WORD SAVE LDA EQT9,I GET PROGRAM WORD ASR 3 LDB DM6 JSB DECOD DECODE FUNCTION BLF,BLS LDA WORD COMBINE: IOR B RANGE & FUNCTION CPB B1000 SAMPLE & HOLD DELAY ? IOR B400 YES, ADD DELAY BIT STA WORD SAVE AND B100 ISOLATE OHMS SZA OHMS ? JMP *+5 LDA EQT9,I NO,IS AND B7 RANGE 0 ? SZA,RSS JMP ERR02 YES, REJECT LDA EQT9,I GET PROGRAM WORD ASR 6 LDB DM3 JSB DECOD DECODE FILTER SZB,RSS FILTER PROGRAMMED ? JMP *+5 LDA WORD AND B240 YES, IS AC SZA JMP ERR02 YES, REJECT LDA B ASL 10 IOR WORD COMBINE: RANGE, FUNCTION, FILTER STA WORD SAVE SZB,RSS IF JMP *+6 SAMPLE & HOLD AND B400 PROGRAMMED SZA,RSS WITH m JMP *+3 FILTER, ERR02 LDA D2 REJECT JMP ERROR+2 * CLA STA DMAFL CLEAR DMA FLAG LDA EQT9,I GET PROGRAM WORD ASR 9 LDB DM2 JSB DECOD DECODE PACER LDA WORD SZB,RSS PACER ? JMP *+6 AND B400 YES, IS SAMPLE/HOLD SZA,RSS PROGRAMMED ? JMP ERR02 NO, REJECT LDA B100K STA DMAFL SAVE ENCODE CONTROL CLB LDA EQT9,I GET DVM PROGRAM WORD AND B20 SZA,RSS OHMS? JMP COMB NO! LDA EQT9,I AND B300 SZA FILTER ? JMP COMB LDA EQT9,I AND B7 ADA DM2 SSA 1 OR 10 MOHM RANGE ? LDB B2000 YES, FORCE FILTER COMB LDA WORD IOR B FORCE FILTER BIT ? IOR DMAFL EXTERNAL ENCODE ? IOR B20K ADD HOLD BIT STA WORD SAVE PROGRAM WORD IOR B10K CLF1 CLF 0 PROG. ENCODE RESET OTA1 OTA 0 OUTPUT PROGRAM WORD LDA EQT8,I GET # OF READINGS CMA,INA STA EQT11,I NEG. READING COUNT INA,SZA,RSS WAS COUNT 1 ? JMP RTDMA YES, RETURN DMA CHAN. LDA WORD GET PROGRAM WORD AND B6340 DC, NO FILTER ? SZA JMP RTDMA NO, RETURN DMA CHAN. LDA EQT10,I GET SCANNER PROGRAM SSA BLOCK SCAN ? JMP RTDMA YES, RETURN DMA CHAN. LDA EQT9,I GET DVM PROGRAM WORD AND B40 SZA SAMPLE AND HOLD ? JMP *+4 NO! LDA EQT9,I YES, DMA REQUESTED ? SSA,RSS JMP RTDMA NO, RETURN DMA CHAN. JSB DMAA DMA ASSIGNED YET ? JMP ERROR+1 NO! * IOR OTA FORM "OTA DMA" STA OTA2 STORE ADA DM4 FORM "OTA DMA-4" STA OTA3 STORE STA OTA4 XOR B100 FORM "STC DMA-4" STA STC1 STORE XOR B4000 FORM "CLC DMo"A-4" STA CLC1 STORE * LDA EQT4,I INITIALIZE DMA AND B77 ISOLATE DSI CHAN. # IOR CW1 OTA2 OTA DMA OUTPUT CONTROL WORD 1 CLC1 CLC DMA-4 LDA EQT7,I GET FWA OF USER BUFFER IOR B100K OTA3 OTA DMA-4 OUTPUT CONTROL WORD 2 STC1 STC DMA-4 LDA EQT8,I GET NUMBER OF READINGS ADA A DOUBLE IT AND CMA,INA MAKE NEGITIVE OTA4 OTA DMA-4 OUTPUT CONTROL WORD 3 CLA,INA SET STA DMAFL DMA FLAG * BYDMA LDB DM1 SET B REG = -1 LDA EQT9,I GET PROGRAM WORD AND B30 ISOLATE AC(DC) CODE CPA B30 AC(DC) ? LDB DM5 YES, SET B REG = -5 LDA EQT9,I GET PROGRAM WORD AND B327 ISOLATE OHMS CODE CPA B120 10 MOHM, FIL A ? LDB DM10 YES, SET B REG = -10 CPA B220 10 MOHM, FIL B ? LDB DM20 YES, SET B REG = -20 STB EQT13,I ESTABLISH DELAY COUNTER * LDA DMAFL SAVE DMA RAR FLAG IN BIT 15 IOR EQT7,I GET BUFFER ADDRESS STA EQT12,I ESTABLISH WORKING POINTER LDA WORD STA EQT7,I SAVE PROGRAM WORD LDB CNTR1 SET TIME OUT COUNTER IN B REG. LIA1 LIA 0 TEST FOR SLA,RSS PROGRAM JMP LEAVE ACKNOWLEDGE FLAG ISZ B INCREMENT TIME JMP LIA1 OUT COUNTER LDA B3 SET A REG. = 3 JMP I.47,I ERROR RETURN * RTDMA JSB DMAA WAS A DMA CHAN ASSIGNED? JMP BYDMA NO! LDB INTBA YES! B=FWA INT TABLE SLA CH7 ? INB YES! B=FWA INT TABLE+1 CLA CLEAR STA B,I TABLE ENTRY STA DMAFL AND DMA FLAG JMP BYDMA * LEAVE CCA STA EQT9,I SET FIRST READING FLAG STCC1 STC 0,C ENABLE SCANNER FLAG CLA JMP I.47,I RETURN * DECOD NOP CONVERT CODE TO SINGLE LINE AND B7 5aISOLATE CODE ADB A IS IT VALID ? SSB,RSS JMP ERR02 NO ,REJECT CLB SZA,RSS CODE = 0 ? JMP DECOD,I YES,RETURN CLB,INB SET B REG = 1 ADA DM1 SUBTRACT 1 FROM CODE SZA,RSS DONE ? JMP DECOD,I YES, B REG = SINGLE LINE CODE BLS JMP *-4 * DMAA NOP TO DETERMINE DMA STATUS DLD INTBA,I GET FWA'S OF EQT HOLDING DMA CPA EQT1 CH6 ASSIGNED ? LDA D6 YES! CPB EQT1 CH7 ASSIGNED ? LDA B7 YES! CPA D6 ADJUST RSS THE CPA B7 RETURN ISZ DMAA ADDRESS JMP DMAA,I & RETURN * * SKP * * COMPLETION SECTION * C.47 NOP CPA D6 EXIT JMP P.1+1 IF CPA B7 DMA JMP P.1+1 INTERRUPT IOR CLC STA *+1 CLEAR CONTROL CLC 0 ON INT SOURCE * LDB EQT1,I IS THIS A SZB SPURIOUS INTERRUPT ? JMP *+3 NO STB EQT15,I YES, PREVENT TIMEOUT JMP P.2 AND CONTINUE * LDA EQT4,I AND B77 ISOLATE DSI CHANNEL IOR CLC XOR B200 FORM "LIB DSI" STA LIB1 STORE XOR B4000 FORM "LIA DSI" STA LIA2 STORE XOR B1200 FORM "STC DSI,C" STA STCC4 STORE INA FORM "STC PGM,C" STA STCC5 STORE XOR B1100 FORM "OTA PROG" STA OTA7 STORE XOR B300 FORM "LIA PROG" STA LIA3 STORE INA XOR B200 FORM "STC SCAN" STA STC3 STORE * LDA EQT6,I GET INTERRUPT SOURCE FLAG SZA,RSS SCANNER INTERRUPT JMP *+4 NO! CLA STA EQT6,I CLEAR SCANNER INTERRUPT JMP STCC4 LDA EQT9,I SZA,RSS FIRST READING ? JMP *+3 NO! ISZ EQT13,I INCR#EMENT DELAY COUNTER JMP STCC4 MORE DELAY NEEDED! LDA EQT8,I GET # OF READINGS CPA D1 ONE ? JMP DATA YES! LDA EQT7,I GET PROGRAM WORD ASR 10 AND B3 SZA FILTER PROGRAMMED ? JMP DMACK YES! LDA EQT7,I GET PROGRAM WORD OTA7 OTA 0 REMOVE EXT. TRIG. DELAY LDB CNTR1 SET TIME OUT COUNTER LIA3 LIA 0 TEST FOR SLA,RSS PROGRAM JMP DMACK ACKNOWLEDGE ISZ B FLAG JMP LIA3 CLA,INA JMP C.47,I NO FLAG, REJECT * DMACK LDA EQT12,I SSA DMA FLAG SET ? JMP DMAON YES! CLA STA EQT9,I CLEAR FIRST READING FLAG DATA LDA EQT12,I GET CURRENT ELA,CLE,ERA STA POINT USER BUFFER ADDRESS LIA2 LIA 0 LOAD FIRST DATA WORD LIB1 LIB 0 LOAD SECOND DATA WORD DST POINT,I STORE READING ISZ EQT11,I ADVANCE READING COUNTER RSS JMP P.1 ALL DONE!!! * ISZ EQT12,I INCREMENT ISZ EQT12,I BUFFER ADDRESS LDA EQT10,I GET SCANNER PROGRAM WORD SSA,RSS BLOCK SCAN JMP STCC4 NO, START NEXT READING STC3 STC 0 YES ,ADVANCE CHANNEL STCC5 STC 0,C ENABLE SCANNER FLAG CLA,INA SET SCANNER STA EQT6,I INTERRUPT FLAG JMP P.2 WAIT * DMAON JSB DMAA CHECK DMA STATUS JMP ERROR+1 IOR CLC FORM "CLC DMA" STA CLC2 STORE XOR B5000 FORM "STC DMA,C" STA STCC2 STORE STCC2 STC DMA,C INITIATE DMA CLA SPECIAL CPA DUMMY PROCESSING REQUIRED ? JMP STCC4 NO, START MEASUREMENT CLC2 CLC DMA CLEAR DMA CONTROL LDB INTBA GET LDA CHAN INTERRUPT TABLE CPA B7 CONTENTS INB FOR THE LDA B,I DMA CHANNEL IOR B100K SET STA B,I 0.* BIT 15= 1 CLA STCC4 STC 0,C ENCODE DVM * P.2 CLA ISZ C.47 SET UP AND PERFORM JMP C.47,I CONTINUATION RETURN * P.1 CLA,RSS LDA B100K SET BIT 15= 1 LDB EQT8,I GET # OF READINGS ADB B DOUBLE IT JMP C.47,I COMPLETION RETURN SKP * * SYSTEM BASE PAGE COMMUNICATION AREA * . EQU 1650B EQT1 EQU .+8 EQT4 EQU .+11 EQT6 EQU .+13 EQT7 EQU .+14 EQT8 EQU .+15 EQT9 EQU .+16 EQT10 EQU .+17 EQT11 EQU .+18 .. EQU 1771B EQT12 EQU .. EQT13 EQU ..+1 EQT15 EQU ..+3 * CHAN EQU 1673B INTBA EQU 1654B DUMMY EQU 1737B * * SKP * * CONSTANTS, COUNTERS, AND STORAGE * A EQU 0 B EQU 1 B3 OCT 3 B7 OCT 7 B20 OCT 20 B30 OCT 30 B40 OCT 40 B77 OCT 77 B100 OCT 100 B120 OCT 120 B200 OCT 200 B220 OCT 220 B240 OCT 240 B300 OCT 300 B327 OCT 327 B400 OCT 400 B700 OCT 700 B1000 OCT 1000 B1100 OCT 1100 B1200 OCT 1200 B2000 OCT 2000 B1400 OCT 1400 B4000 OCT 4000 B5000 OCT 5000 B6340 OCT 6340 B7777 OCT 7777 B10K OCT 10000 B20K OCT 20000 B100K OCT 100000 CNTR1 DEC -250 CW1 OCT 120000 D1 DEC 1 D2 DEC 2 D4 DEC 4 D5 DEC 5 D6 DEC 6 D10 DEC 10 DM1 DEC -1 DM2 DEC -2 DM3 DEC -3 DM4 DEC -4 DM5 DEC -5 DM6 DEC -6 DM10 DEC -10 DM20 DEC -20 DMAFL NOP POINT NOP WORD NOP CLC CLC 0 OTA OTA 0 DMA EQU 6B * END ^q0   25117-80687 1805 S 0122 7970B 7TRK RTE DRIVER (DVR24)             H0101 ASMB,R,L,C NAM DVR24 ENT I.24,C.24 * * * M. SCHOENDORF 8/31/73 REV. B * M. SCHOENDORF 3/28/74 REV. C * G. SPRADER 5/ 2/74 REV. D * R. CHIPMAN REV. 1813 * * * * SOURCE TAPE 25117-80687 * HED ** HP 7970 7 TRACK MT RTE DRIVER ** ,[HJF,4/16/72] * INITIATION SECTION. SPC 1 I.24 NOP ENTRY POINT LDB EQT11,I LOAD THE "EOT" FLAG WORD. M5600 ELB *SHIFT THE FLAG INTO "E". LDB CHAN LOAD THE "DMA" CHANNEL NUMBER. ELB,CLE,RBR *INCLUDE THE "EOT" FLAG BIT. STB EQT11,I *STORE THE "EOT" FLAG WORD JSB SETIO SET I/O INSTRUCTIONS FOR MT. STA C.24 SET THE INITIATOR FLAG LDA N3 LOAD: A=-3. STA EQT10,I SET THE ERROR RETRY COUNTER. LDA EQT6,I LOAD REQUEST CONTROL WORD AND DEC64 ISOLATE MODE BIT CCE,SZA BCD? CLA,CME NO! ERA YES! STA BCD,I BCD FLAG = 100000 FOR BCD LDA EQT6,I LOAD THE REQUEST CONTROL WORD. AND DEC3 ISOLATE THE REQUEST CODE. CPA DEC3 *IS REQUEST A CONTROL REQUEST? JMP R3 *YES, GO EXAMINE FUNCTION CODE. SLB,RBR *IS UNIT IN LOCAL MODE? JMP I.A.3 YES, GO DOWN THE UNIT. SLA,ARS *NO; IS THE REQUEST TO READ? JMP READ YES, CONTINUE. RBR,SLB NO; IS WRITE ENABLE RING IN? JMP I.A.3 NO, GO REJECT THE REQUEST. JSB CEOT *GO CHECK FOR END-OF-TAPE (EOT). JSB NBUFL GO GET THE NEGATIVE WORD COUNT. SZB,RSS IS THE BUFFER LENGTH = 0? JMP I.A.4 YES, GIVE IMMEDIATE COMPLETION. * M5000 BLS *CONVERT TO CHARS(-) LDA BCD,I *GET THE BCD FLAG. SSA,RSS *BINARY MODE ? JMP M1100-1 *YES! SKIP LIMIT CHECK . SEZ ODD # OF CHARACTERS? ADB M1 *YES! ADD ONE CHARACTER . ADB M4 *B= -[# OF CHARACTERS] + 4 ADB P130  *YES! SSB *MORE THAN 134 CHARACTERS? CLB *YES FORCE 134! ADB M134 *NO! LDA B *A= -[# OF CHARACTERS TO WRITE] CMA,SZA *ONE OR CPA M1 * TWO CHARACTERS ? LDA DEC3 *YES! ADJUST FOR FOUR CMA,RSS * CHARACTERS TO BE WRITTEN. LDA B *A= -[# OF CHARACTERS TO WRITE] M1100 ARS *A= -[# OF WORDS] STA EQT13,I *SAVE THE NEGATIVE WORD COUNT. LDA BCD,I GET BCD FLAG REJ CLE,SSA,RSS *BCD MODE ? JMP BINRY *NO! GO WRITE BINARY * * CONVERT FROM ASCII TO BCD * LDA EQT7,I *GET ADDRESS OF USERS BUFFER STA PAKUN *USE PAKUN AS POINTER * * ASSIGN AN INTERNAL (DRIVER) BUFFER * TO A DMA CHANNEL * JSB WBUF *GET INTERNAL BUFFER ADDRESS STA BPNTR *SAVE IT. * INA * STA CLC.0 *SAVE INTERNAL BUF ADDRESS + 1 . LDA DBLNK *GET DOUBLE BLANK. STA CLC.0,I *SET INTO 2ND WORD. * LOOP LDA PAKUN,I GET UPPER CHAR ALF,ALF MOVE DOWN AND M77 CUT OFF UPPER CHARACTER ADA TBLAD ADD TABLE ADDRESS LDA A,I GET EQUIV AND M37.4 *KEEP UPPER SIX BITS. INB,SZB ALL DONE? JMP *+4 NO, GO AND DO NEXT XOR O20 YES, PUT BCD BLANK IN LAST CHAR CCB SET B=-1 TO FORCE EXIT JMP SECND STORE LAST WORD STA STAT. STORE TEMPORARILY LDA PAKUN,I GET LOWER CHAR AND M77 CUTOFF UPPER CHAN ADA TBLAD ADD TABLE ADDRESS LDA A,I GET EQUIV ALF,ALF MOVE AROUND AND M77 KEEP SIX. IOR STAT. ADD IN UPPER CHAR SECND STA BPNTR,I PLACE CHARS IN DVR BUFFER ISZ PAKUN INCREMENT USER BUFFER POINTER ISZ BPNTR INCREMENT DVR BUFF POINTER INB,SZB DONE? JMP LOOP NO, GO BACK JSB WBUF *GET INTERNAL BJUFFER ADDRESS CLE,RSS *RESTORE READ/WRITE FLAG TO WRITE SPC 1 BINRY LDA EQT7,I LOAD OUTPUT BUFFER ADDRESS STA EQT7,I *SAVE OUTPUT BUFFER ADDRESS[REJ] JSB IODMA GO PERFORM THE OPERATION. LDB M301 LOAD: WRITE COMMAND CODE ADB BCD,I ADD BIT 15 IF BCD MODE LDA .1 *LOAD THE INTERRUPT RETURN. JSB FUNCT GO INITIATE THE FUNCTION. DEF REJ *REJECT INTERRUPT RETURN ADDRESS. * DBLNK OCT 010020 N3 DEC -3 N6 DEC -6 M134 DEC -134 M1 OCT 1 M4 OCT 4 P130 DEC 130 M301 OCT 301 M37.4 OCT 37400 O20 OCT 20 BCD BLANK * * WBUF NOP *ENTRY. LDA EQT11,I *GET THE DMA CHANNEL WORD. AND M7 *ISOLATE THE DMA CHANNEL #. ADA N6 *SUBTRACT SIX. ADA BUFRS *ADD THE INTERNAL BUFFER POINTER. LDA A,I *A=ADDRESS OF DVR INTERNAL BUFFER. JMP WBUF,I *RETURN. * * BUFRS DEF *+1 DEF OBUF1 (USED BY DMA CH 6) IFZ DEF OBUF2 (USED BY DMA CH 7) XIF DEF OBUF1 (USED BY DMA CH 7) * .1 DEF ..1 ..1 JSB CHECK *ANY PARITY ERRORS? ..4 LDB DEC5 YES, LOAD: BACKSPACE COMMAND. LDA .5 LOAD THE INTERRUPT RETURN. JSB FUNCT GO INITIATE THE FUNCTION. DEF ..4 *REJECT INTERRUPT RETURN ADDRESS. * ..5 LDA .20 LOAD THE INTERRUPT RETURN. LDB M121 LOAD: GAP COMMAND CODE JSB FUNCT GO INITIATE THE FUNCTION. .5 DEF ..5 REJECT, INTERRUPT ADDRESS RETURN. * * * .20 DEF ..20 ..20 LDA EQT5,I LOAD THE MT UNIT STATUS. AND M22 GET PARITY & TIMING BITS SZA WERE THERE ANY ERRORS? JMP W.ERR YES, GO ABORT THE REQUEST. JSB CEOT NO, GO CHECK FOR END-OF-TAPE. JMP BINRY *TRY TO WRITE AGAIN SPC 2 READ CPA EQT8,I IS THE BUFFER LENGTH = ZERO(0)? JMP SKIP. YES, GO CHECK THE MODE. JSB EOTF NO, GO CHECK FOR "EOT" CONDITION. ..6 JSB NBUFL GO GET THE NEGATIVE WORD COUNT. CCE *SET "E" TO INDICATE DMA INPUT. LDA EQT7,I LOAD THE USER BUFFER ADDRESS. JSB IODMA GO PERFORM THE OPERATION. LDB M203 LOAD: READ COMMAND CODE ADB BCD,I ADD BIT 15 IF BCD MODE LDA .7 LOAD THE INTERRUPT RETURN. JSB FUNCT GO INITIATE THE FUNCTION. .6 DEF ..6 REJECT, INTERRUPT ADDRESS RETURN. * M203 OCT 203 * .7 DEF ..7 ..7 LDA BCD,I *GET XMISSION COMPLETE FLG. RAR,SLA *CONVERSION DONE YET? RSS JMP TLOG *NO! JSB CHECK *CHECK FOR R/W PARITY ERRORS. ..7.5 ISZ EQT10,I IS THIS THE LAST RETRY? JMP *+2 *NO! SKIP. JMP FINI *UPDATE THE TRANSMISSION LOG. ..8 LDB DEC5 LOAD: BACKSPACE COMMAND LDA .6 LOAD THE INTERRUPT RETURN. JSB FUNCT GO INITIATE THE FUNCTION. DEF ..8 REJECT, INTERRUPT ADDRESS RETURN. * DEC5 DEC 5 * SKIP. LDA EQT6,I LOAD THE FUNCTION REQUEST CODE. AND DEC64 ISOLATE THE MODE BIT. SZA IS THE MODE BINARY? JMP FSR YES, GO SKIP FORWARD 1 RECORD. CLB I.A.4 LDA DEC4 LOAD: A=4. IMMEDIATE COMP. JMP I.24,I RETURN TO THE USER;B=X-LOG SPC 2 R3 LDA EQT6,I GET THE REQUEST CONTROL WORD. AND M1700 *ISOLATE THE FUNCTION CODE. CPA M600 IS IT A DYNAMIC STATUS REQUEST? JMP I.A.4-1 *YES, GIVE AN IMMEDIATE RETURN. SLB,RBR IS THE UNIT IN LOCAL MODE? JMP I.A.3 YES, THEN DOWN UNIT. CPA M200 *NO; IS IT A BACKSPACE REQUEST? JMP BSR YES, CONTINUE. CPA M300 NO; IS IT FORWARD SPACE REQUEST? JMP FSR YES, CONTINUE. CPA M400 NO; IS IT A REWIND REQUEST? JMP REW YES, CONTINUE. CPA DEC64 NO; WRITE END-OF-FILE REQUEST? JMP EOF YES, CONTINUE. CPA M1200 NO; IS IT A GAP REQUESښT? JMP GAP YES, CONTINUE. CPA M1300 NO; IS IT FORWARD SPACE FILE? JMP FSF YES, CONTINUE. CPA M1400 NO; IS IT BACKSPACE FILE? JMP BSF YES, CONTINUE. CPA M500 IS IT A REWIND/STANDBY REQUEST? JMP RWS YES, CONTINUE. JMP I.A.2 NO, GO REJECT THE REQUEST. * M77 OCT 77 DEC64 DEC 64 @100 M200 OCT 200 M300 OCT 300 M400 OCT 400 M600 OCT 600 M1200 OCT 1200 M1300 OCT 1300 M1400 OCT 1400 M1700 OCT 1700 * BSR JSB CSOT *GO CHECK FOR "BOT" CONDITION. JSB RWCHK CHECK IF REWINDING ..9 LDB DEC5 LOAD: BACKSPACE COMMAND LDA .10 LOAD THE INTERRUPT RETURN. JSB FUNCT GO INITIATE THE FUNCTION. DEF ..9 REJECT, INTERRUPT ADDRESS RETURN. .10 DEF ..10 * FSR JSB CEOT GO CHECK FOR "EOT" CONDITION. ..11 LDA .TLOG LOAD THE INTERRUPT RETURN. LDB DEC3 LOAD: FORWARD SPACE COMMAND CODE. JSB FUNCT GO INITIATE THE FUNCTION. DEF ..11 REJECT, INTERRUPT ADDRESS RETURN. * REW JSB CSOT *GO CHECK FOR "BOT" CONDITION. JSB RWCHK *SEE IF UNIT ALREADY REWINDING. ..12 LDB M11 LOAD: REWIND COMMAND CODE LDA .10 LOAD THE INTERRUPT RETURN. JSB FUNCT GO INITIATE THE FUNCTION. DEF ..12 REJECT, INTERRUPT ADDRESS RETURN. * M11 OCT 11 * * RWS STA EQT10,I *SET REW/STANDBY FLAG. JSB RWCHK *SEE IF UNIT ALREADY REWINDING. LDA STORE *GET THE HARDWARE STATUS. ALF,ALF *MOVE "BOT" RAL,RAL * TO SIGN. SSA,RSS *IS TAPE AT LOAD POINT? JMP ..RWS *NO! LDA .RWS *SET INTERRUPT RETURN ADDRESS. LDB DEC3 *GET FORWARD SPACE CODE. JSB FUNCT *INITIATE THE FUNCTION. DEF *-3 *REJECT INTERRUPT ADDRESS. * ..RWS LDB M31 *LOAD REWIND/OFF-LINE COMMAND. LDA .10 LOAD THE INTERRUPT RETURN. JSB FUNCT GO INITIATE THE FUNCTI/=ON. DEF RWS+2 *REJECT, INTERRUPT ADDRESS RETURN. * .RWS DEF ..RWS M31 OCT 31 * RWCHK NOP *ENTRY. LDA STORE *GET HARDWARE STATUS. ALF,RAL *MOVE REWIND BIT TO SIGN. SSA *UNIT CURRENTLY REWINDING ? JMP I.A.4-1 *YES! RETURN IMMEDIATELY! JMP RWCHK,I *NO. CONTINUE. * FSF JSB CEOT GO CHECK FOR "EOT" CONDITION. ..14 LDA .TLOG LOAD THE INTERRUPT RETURN. LDB M1.43 JSB FUNCT GO INITIATE THE FUNCTION. DEF ..14 REJECT, INTERRUPT ADDRESS RETURN. .TLOG DEF TLOG0 * M1.43 OCT 100043 * * BSF JSB CSOT *GO CHECK FOR "BOT" CONDITION. JSB RWCHK CHECK IF REWINDING ..15 LDA .10 LOAD THE INTERRUPT RETURN. LDB M1.45 JSB FUNCT GO INITIATE THE FUNCTION. DEF ..15 REJECT, INTERRUPT ADDRESS RETURN. * M1.45 OCT 100045 * * GAP RBR,SLB IS WRITE RING PROVIDED? JMP I.A.3 NO, GO REJECT THE REQUEST. JSB CEOT YES, GO CHECK FOR END-OF-TAPE. ..23 LDA .22 LOAD THE INTERRUPT RETURN. LDB M121 LOAD: GAP COMMAND CODE JSB FUNCT GO INITIATE THE FUNCTION. DEF ..23 REJECT, INTERRUPT ADDRESS RETURN. * M22 OCT 22 M121 OCT 121 * * .22 DEF ..22 ..22 LDA EQT5,I LOAD THE MT UNIT STATUS. AND M22 GET PARITY & TIMING BITS SZA WERE THERE ANY ERRORS? JMP W.ERR YES, GO ABORT THE REQUEST. JMP TLOG0 NO, GO UPDATE TRANSMISSION LOG. * EOF RBR,SLB IS WRITE RING PROVIDED? JMP I.A.3 NO, GO REJECT THE REQUEST. ..13 JSB EOTF GO CHECK FOR END-OF-TAPE. ..17 LDB S1161 LOAD: WRITE EOF COMMAND LDA .18 LOAD THE INTERRUPT RETURN. JSB FUNCT GO INITIATE THE FUNCTION. DEF ..17 REJECT, INTERRUPT ADDRESS RETURN. * S1161 OCT 100161 * .18 DEF ..18 ..18 LDA EQT5,I LOAD THE MT UNIT STATUS. AND M22 GET PARITY & TIMING BITS SZA,RSS WERE THERE ANY ERRORS? JMP TLOG. NO, GO UPDATE TRANSMISSION LOG. ..19 LDB DEC5 YES, LOAD: BACKSPACE COMMAND LDA .13 LOAD THE INTERRUPT RETURN. JSB FUNCT GO INITIATE THE FUNCTION. DEF ..19 REJECT, INTERRUPT ADDRESS RETURN. .13 DEF ..13 SPC 2 STAT. NOP ENTRY POINT. LIA1C LIA CMND GET MIXED UP BITS FROM 13182A STB CONFG SAVE B STA STORE SAVE MIXED BITS AND M3012 REW,NOT READY,REJ,P/E STA B PUT A IN B TO BUILD STATUS LDA STORE NEXT BITS AND M160 EOF,BOT,EOT ALS MOVE ONE LEFT ADB A ADD TO STATUS LDA STORE NEXT BITS AND M401 OFF LINE, CONTROLLER BUSY ALF,ALF SWAP BITS ROUND ADB A ADD TO STATUS LDA STORE NEXT BIT AND DEC4 TIMING ERROR ALS,ALS MOVE LEFT TWO ADB A ADD TO STATUS LDA STORE LAST BIT AND M200 PROTECTED ALF,ALF 12 LEFT + 1 RIGHT ALF,ARS = 5 RIGHT ADA B A = STATUS LDB CONFG RESTORE B JMP STAT.,I *RETURN * M160 OCT 160 M401 OCT 401 M3012 OCT 3012 * CEOT NOP ENTRY POINT. LDA EQT5,I LOAD THE MT UNIT STATUS. AND M40 EOT STATUS BIT CLE,SZA,RSS IS MT UNIT AT END-OF-TAPE (EOT)? JMP CEOT,I NO, RETURN. I.A.2 LDB C.24 LOAD THE INTERRUPT FLAG LDA DEC2 LOAD: A=2;ILLEG CONTL/EOT SSB,RSS INTERRUPT RETURN? JMP C.24,I YES, GIVE A COMPLETION RETURN JMP I.24,I NO, RETURN TO USER SPC 1 I.A.3 LDA DEC3 LOAD: A=3;NOT READY JMP I.24,I RETURN TO THE USER * DEC2 DEC 2 DEC3 DEC 3 DEC4 EQU M4 M40 OCT 40 * NBUFL NOP ENTRY POINT. LDB EQT8,I LOAD THE BUFFER LENGTH REQUEST. CCE,SSB,RSS IS THE LENGTH IN WORDS? CMB,CLE,INB,RSS SI!CONVERT THuO NEGATIVE; SKIP. ERB NO, CONVERT TO WORDS. STB EQT13,I *STORE THE NEGATIVE WORD COUNT. JMP NBUFL,I RETURN: B=(-)WORD COUNT * E=0=>WDS OR EV # CHRS * E=1=>ODD # CHARS SPC 2 * JSB SETIO *SET THE MT I/O INSTRUCTIONS. SPC 2 TLOG LIA CMND *LOAD THE HARDWARE STATUS. AND DEC64 *ISOLATE THE "EOF" BIT. SZA WAS IT AN END-OF-FILE (EOF) ? JMP TLOG0 *RETURN 0 XMISSION LOG. W.CNT LIA DMA-4 LOAD THE WORD COUNT REGISTER. SZA DID "DMA" GO TO COMPLETION? IOR DMASK *NO! RESTORE THE LOST BITS [-] . LDB EQT6,I LOAD THE REQUEST CONTROL WORD. RBR,ERB SHIFT THE WRITE BIT TO "E". CMA,SEZ,INA,SZA DID THE WRITE COMPLETE? JMP W.ERR NO, GO ABORT THE REQUEST. LDB EQT13,I *YES! GO GET NEGATIVE WORD COUNT. ADB A LET "B" = -(WORDS TRANSMITTED). STB CTEMP *SAVE THE ACTUAL COUNT. ISZ BCD,I *BUMP THE XMISSION COMPLETE FLAG. LDA EQT6,I *GET THE REQUEST WORD. CCE,SLA,RSS *READ REQUEST ? JMP STEER *NO! LDA BCD,I GET BCD FLAG SSA,RSS *BCD MODE ? JMP STEER *NO! CONTINUE. SPC 1 * * START BCD TO ASCII CONVERSION * SPC 1 LDB CTEMP YES, LOAD NEG WORD COUNT STB MBUFC STORE COUNT LDA EQT7,I GET USER BUFFER ADDRESS STA UNPAK USE UNPAK AS POINTER RSS * NEWCH ISZ UNPAK *ADVANCE BUFFER POINTER. LDA UNPAK,I *GET TWO CHARACTERS. ALF,ALF USE UPPER BCD CHAR AND M77 GET 6 BITS ADA TBLAD ADD TABLE ADDRESS LDA A,I GET ASCII EQUIV. AND M377 USE LOWER 8 BITS. ALF,ALF MOVE BACK UP STA STAT. STORE TEMPORARILY LDA UNPAK,I GET OTHER CHAR AND M77 ADA TBLAD LDA #A,I AND M377 IOR STAT. ADD IN UPPER CHAR STA UNPAK,I PUT BACK IN BUFFER ISZ MBUFC DONE? JMP NEWCH NO, GO BACK * STEER JSB DMAI *DMA INTERRUPT ? ISZ BCD,I *YES! INCREMENT XMISSION FLAG. LDA EQT11,I *GET THE DMA CHANNEL #. JMP SPURI *RETURN. * CTEMP NOP WORD COUNT STORAGE * DMAI NOP *ENTRY. LDA C.24 *GET COMPLETION ENTRY POINT. SSA *POST INTERRUPT PHASE? JMP NDMAI *NO! LIA 4 *GET INTERRUPT SOURCE CODE. CPA M6 *INT FROM DMA CH6 ? JMP DMAI,I *YES! RETURN "P+1" . CPA M7 *INT FROM DMA CH7 ? JMP DMAI,I *YES! RETURN "P+1" . NDMAI ISZ DMAI *ADVANCE RETURN ADDRESS. JMP DMAI,I *RETURN "P+2" . * CHECK NOP *ENTRY POINT. JSB CEOT *CHECK FOR EOT. LDA BCD,I *GET MODE WORD. ELA *PRESERVE CLA,SEZ * MODE BIT IN ERA * CASE OF STA BCD,I * REJECT. LIA3C LIA CMND *LOAD THE MT UNIT STATUS. AND DEC2 *GET PARITY BIT. CLE,SZA *PARITY ERROR? JMP CHECK,I *YES! RETURN. * FINI LDB CTEMP *RESTORE WORD COUNT IN B. SSB CMB,INB LDA EQT8,I LOAD THE USER BUFFER LENGTH. SSA WAS THE REQUEST FOR CHARACTERS? BLR *YES! CREATE [+] CHARACTERS. LDA EQT10,I *GET THE RETRY COUNTER. SZA *WERE 3 TRYS NEEDED? JMP END *NO! <3 ; RETURN TO SYSTEM. LDA DEC3 *YES! A=3 ; XMISSION ERROR! JMP END+1 *GIVE COMPLETION RETURN. * M377 OCT 377 * EOTF NOP ENTRY POINT. LDA EQT5,I LOAD THE MT UNIT STATUS. AND M40 EOT STATUS BIT CCE,SZA,RSS IS MT UNIT AT END-OF-TAPE (EOT)? JMP EOTF,I NO, RETURN. LDA EQT11,I YES, LOAD THE "EOT" FLAG WORD. ELA,RAR SHIFT THE "EOT" FLAG TO "E". STA EQT11,I STORE THE "EOT" FLAG. SEZ,CCE WAS END-OF-TAPE ALREADY REACHED? JMP I.A.2 YES, GO REJECT THE REQUEST. JMP EOTF,I NO, RETURN. * DMASK OCT 140000 "DMA" WORD COUNT MASK * CSOT NOP ENTRY POINT. LDA EQT5,I LOAD THE MT UNIT STATUS. AND DEC64 SOT STATUS BIT SZA,RSS *IS THE MT UNIT AT "BOT" ? JMP CSOT,I NO, RETURN. ..10 CLA ENTER: A=0. STA EQT11,I CLEAR THE "EOT" FLAG. TLOG0 CLB,RSS ENTER: B=0; SKIP. TLOG. CLB,INB ENTER: B=1. LDA C.24 LOAD THE INTERRUPT FLAG SSA IS CONTROL FROM INTERRUPT? JMP I.A.4 NO, GIVE IMMEDIATE COMPLETION. END CLA ENTER: A=0. CLC.G CLC CMND *CLEAR CMND CONTROL. JMP C.24,I GIVE A COMPLETION RETURN SPC 2 IODMA NOP ENTRY POINT. ISZ S.DMA CLEAR THE "DMA" SKIP FLAG; SKIP. S.DMA OCT -1 "DMA" SKIP FLAG. CLC2F CLC DMA-4 PREPARE THE ADDRESS REGISTER. RAL,ERA SET THE READ/WRITE BIT. OTA3E OTA DMA-4 OUTPUT THE BUFFER ADDRESS. LDA CSOT *LOAD MT DATA CHANNEL NUMBER. IOR M20K *INCLUDE THE CLC OPTION . OTA1C OTA DMA ASSIGN THE DMA CHANNEL. LDA EQT13,I *LOAD THE NEGATIVE WORD COUNT. STC2F STC DMA-4 *PREPARE WORD COUNT REGISTER OTA4E OTA DMA-4 OUTPUT THE WORD COUNT. JMP IODMA,I RETURN. * M20K OCT 020000 * REJCT CCA ENTER: A=-1. STA S.DMA SET THE "DMA" SKIP FLAG. LDA FUNCT,I LOAD REJECT INTERRUPT ADDRESS. LDB M110 LOAD THE CLEAR COMMAND CODE. RSS SKIP. * FUNCT NOP ENTRY POINT. STA EQT9,I STORE THE RETURN ADDRESS. CLC1D CLC DATA *CLEAR DATA CONTROL. OTB1C OTB CMND OUTPUT THE COMMAND CODE. LIA2C LIA CMND *GET HARDWARE STATUS. RAR,RAR SHIFT I/O REJECT BIT TO 0. RAR,SLA WAS THE COMMAND REJECTED? JMP REJCT YES, GO ISSUE A CLEAR REQUEST. CLA,CCVE NO, ENTER: A=0; E=1. CPA S.DMA IS THE REQUEST A READ OR WRITE? JMP R.W YES, GO INITIALIZE THE TRANSFER. CPB M110 *CLEAR COMMAND? JMP C.RTN-1 *YES! * * RETURN DMA CHANNEL TO SYSTEM * LDA CHAN A=DMA CHANNEL JSB FITAB GET INTERRUPT TABLE ADDRESS LDA B,I *GET INT TABLE ENTRY ELA,CLE,ERA *REMOVE THE SIGN BIT. STA B,I *SET NEW TABLE ENTRY. STC1C STC CMND,C *INITIALIZE MT UNIT CONTROL. * C.RTN LDA C.24 LOAD THE INTERRUPT CONTROL FLAG INA,SZA,RSS IS CONTROL THROUGH INTERRUPT? JMP I.24,I NO, RETURN TO THE USER JMP A,I YES, SYSTEM INTERRUPT RETURN. * R.W EQU * CLF1D CLF DATA *CLEAR DATA CHANNEL FLAG. RWCON STC CMND,C *INITIALIZE MT UNIT CONTROL. STC1E STC DMA,C *INITIALIZE DMA CHANNEL JMP C.RTN *RETURN. * * * ENTRY: A=DMA CHANNEL # FITAB NOP LDB INTBA LOAD INT TABLE ADDRESS CPA M7 IS "DMA" CH 7 BEING USED? INB YES! INCR TABLE ADDRESS JMP FITAB,I * EXIT: B=ADDRESS OF INTERRUPT TABLE ENTRY * SETIO NOP ENTRY POINT. LDA EQT4,I *GET MT CHANNEL WD. AND M77 *ISOLATE THE DATA CHANNEL. STA CSOT *STORE MT DATA CHANNEL NUMBER. IOR CLC *FORM A "CLC DATA". STA CLC1D *SET THE INSTRUCTION. STA *+1 *PUT CLC DATA IN NEXT LOCATION NOP * AND EXECUTE XOR M5600 *FORM "CLF DATA" . STA CLF1D *STORE THE INSTRUCTION. XOR M600 *FORM "STC DATA,C" . INA *FORM A "STC CMND,C". STA STC1C *STORE THE INSTRUCTION. STA RWCON *STORE THE INSTRUCTION. XOR M5000 *FORM A "CLC CMND". STA CLC.G *STORE THE INSTRUCTION. XOR M4200 *FORM A "LIA CMND". STA LIA1C *STORE THE INSTRUCTION. STA LIA2C *STORE THE INSTRUCTION. STA LIA3C *STORE THE INSTRUCTION. STA TLOG *STORE THE INSTRUCTION. XOR M4300 *FORM A "OTB CMND". STA OTB2C *STORE THE INSTRUCTION. STA OTB1C *STORE THE INSTRUCTION. LDA EQT11,I *GET THE ELA,CLE,ERA * DMA CHANNEL #. IOR STCC *FORM A "STC DMA,C". STA STC1E *SET THE INSTRUCTION. XOR M1100 *FORM A "OTA DMA". STA OTA1C *SET THE INSTRUCTION. ADA N4 *"SUBTRACT": "DMA" - 4 . STA OTA3E *STORE THE INSTRUCTION. STA OTA4E *STORE THE INSTRUCTION. XOR DEC64 *FORM A "STC DMA-4". STA STC2F *STORE THE INSTRUCTION. XOR M200 *FORM A "LIA DMA-4". STA W.CNT *STORE THE INSTRUCTION. XOR M4200 *FORM A "CLC DMA-4". STA CLC2F *STORE THE INSTRUCTION. JSB DMAI *DMA INTERRUPT ? JMP IOSET *YES! BYPASS STATUS CHECK. LDA EQT4,I *LOAD THE UNIT NUMBER. AND M300 *ISOLATE THE UNIT NUMBER. ALF,ALF *ROTATE UNIT TO RAL,RAL * LOW A-REG. CMA *SET AS COUNTER. LDB M400 *PRE-SET B-REG. BLS *SET B TO UNIT INA,SZA *THIS UNIT? JMP *-2 *NO! TRY NEXT ONE. ADB M400 *YES! COMPLETE THE WORD. OTB2C OTB CMND *OUTPUT THE MT UNIT SELECT CODE. JSB STAT. *GET MT STATUS IN "A" AND M377 *ISOLATE BITS 7-0 . LDB A *SAVE THE STATUS IN "B" . LDA EQT5,I *LOAD THE STATUS WORD FROM EQT. AND M1774 *REMOVE THE OLD STATUS. IOR B *INCLUDE THE NEW STATUS. STA EQT5,I *UPDATE THE STATUS WORD IN EQT . IOSET CCA *SET A= -1 . STA S.DMA *SET THE "DMA" SKIP FLAG. JMP SETIO,I *RETURN: A= -1 , B=STATUS * M1774 OCT 177400 N4 DEC -4 M7 OCT 7 M6 DEC 6 M110 OCT 110 M4200 OCT 4200 M4300 OCT 4300 CONFG NOP * SKP * COMPLETION SECTION. SPC 1 C.24 NOP ENTRY POINT LDB EQT11,I LOAD THE "DMA" CHANNEL NUMBER. RBܤL,CLE,ERB REMOVE THE "EOT" FLAG BIT. CPA B *DMA INTERRUPT? JMP GO *YES! START PROCESSING. LDB EQT1,I LOAD THE DEVICE LIST POINTER SZB,RSS DID A SPURIOUS INTERRUPT OCCUR? JMP SPURI YES! IGNORE THE INTERRUPT. JSB SETIO *SET I/O INSTRUCTIONS FOR MT. ERB *SHIFT LOCAL BIT TO "E". LDB EQT10,I *LOAD THE REWIND/STANDBY FLAG. LDA EQT9,I *LOAD THE CONTINUATION ADDRESS. SSA,RSS *INDIRECT ADDRESS ? JMP *+3 *NO! CONTINUE . LDA A,I *GET THE JMP *-3 * EFFECTIVE ADDRESS . SEZ,CLE IS THE MT UNIT IN "LOCAL"? CPB M500 YES;IS THE INTERRUPT FROM "RWS"? JMP A,I YES, GO CONTINUE PROCESSING. * W.ERR CLA,INA ENTER: A=1.(NOT READY) CLB ENTER: B=0. JMP C.24,I COMPLETION RETURN SPC 2 M500 OCT 500 SPC 2 * SPURI LDB A SAVE THE CHANNEL NUMBER. IOR CLC *CONFIGURE "CLC XX" STA CLC.0 *SET THE INSTRUCTION. CLC.0 CLC 00B CLEAR CONTROL. CLA STA EQT15,I PREVENT TIMEOUT LDB BCD,I *GET THE I/O XMISSION FLAG. ERB *SET THE CONTINUATION/COMPLETION FLG. LDA C.24 *GET THE RETURN ADDRESS. SEZ,INA,RSS *CONTINUATION RETURN ? JMP A,I *YES! JSB CHECK *ANY R/W PARITY ERRORS? JMP ..7.5 *READ PARITY ERROR! * * GO LDB DUMMY *LOAD SPECIAL INTERRUPT FLAG. SZB,RSS *PRIVILEGED INTERRUPT ACTIVE ? JMP TLOG-1 *NO! CONTINUE. JSB FITAB *YES! GET INTERRUPT TABLE ADDRESS. STB CONFG *SAVE TABLE ADDRESS. LDB B,I *LOAD THE TABLE ENTRY. ELB,CLE,ERB *REMOVE BIT 15 . STB CONFG,I *STORE NEW TABLE ENTRY. JMP TLOG-1 *START PROCESSING. * * * BEGIN "LOCAL STORAGE". SPC 1 A EQU 00000B "A" REGISTER ADDRESS DEFINITION. B EQU 00001B "B" REGISTER ADDRESS DEFINITION. BPNTR  TRNEQU SETIO CLC CLC 00B DMA EQU 06B "DMA" CHANNEL NUMBER 1. MBUFC EQU NBUFL PAKUN EQU CHECK STCC STC 00B,C STORE EQU PAKUN UNPAK EQU CHECK DATA EQU 00B DATA CHANNEL NUMBER. CMND EQU DATA+01B COMMAND CHANNEL NUMBER. SKP * SYSTEM BASE PAGE COMMUNICATION AREA: SPC 2 . EQU 1657B EQT1 EQU .+1 EQT4 EQU .+4 EQT5 EQU .+5 EQT6 EQU .+6 EQT7 EQU .+7 EQT8 EQU .+8 EQT9 EQU .+9 EQT10 EQU .+10 EQT11 EQU .+11 .. EQU 1770B EQT12 EQU ..+1 EQT13 EQU ..+2 EQT15 EQU ..+4 SPC 2 BCD EQU EQT12 BCD FLAG WORD, =100000 FOR BCD CHAN EQU 1673B CURRENT "DMA" CHANNEL NUMBER. DUMMY EQU 1737B INTBA EQU 1654B *FWA OF INTERRUPT TABLE SUP SPC 1 SPC 1 HED ********** CONVERSION TABLE *********** * * ASCII => BCD / BCD => ASCII * (HIGH) / (LOW) * TBLAD DEF *+1 * @ A B C D E F G ASC 08,L 11223344556677 * * H I J K L M N O ASC 08,8899!0"=#@$:%>&# * * P Q R S T U V W ASC 08,' (/)SRTSUTVUWVX * * X Y Z [ \ ] ^ ASC 08,WYXZY_=,^(-'?\Z" * * ! " # $ % & ' ASC 08,P-*J_KOL+M/N0O]P * * ( ) * + , - . / ASC 08,\Q ? ASC 08,HHIIM?..>)K[N<:^ HED <*** OUTPUT BUFFERS ***> OBUF1 EQU * OCT 10020,10020 (BCD BLANKS) BSS 65 IFZ OBUF2 EQU * OCT 10020,10020 (BCD BLANKS) BSS 65 XIF PLEN EQU *+1 PROGRAM LENGTH (OCTAL) END T   25117-80763 A S 0122 RTE HP3480/85 SUBSYSTEM VERIFICATION TEST (V3485)             H0101 jFTN,L,T,B PROGRAM V3485 DIMENSION DATA(10) IDRT=7 WRITE(1,1000) DO 20 IFIL=0,1 WRITE(1,2000) C READ CHANNELS 1 TO 10 IN RANDOM MODE DO 10 I=1,10 10 CALL R3485(IDRT,DATA(I),1,I,21B+IFIL*64) C PRINT THE DATA WRITE(1,6000)(I,DATA(I),I=1,10) WRITE(1,3000) C READ CHANNELS ONE TO FIVE IN SEQUENTIAL MODE CALL R3485(IDRT,DATA(1),5,1,20B+IFIL*64) C READ CHANNELS SIX TO TEN IN SEQUENTIAL MODE CALL R3485(IDRT,DATA(6),5,6,20B+IFIL*64) C PRINT THE DATA WRITE(1,6000)(I,DATA(I),I=1,10) WRITE(1,4000) C READ CHANNEL SEVEN "TEN TIMES" IN DIGITIZE MODE CALL R3485(IDRT,DATA,10,7,22B+IFIL*64) C PRINT THE DATA WRITE(1,6000)(7,DATA(I),I=1,10) IF(IFIL)20,15,20 15 WRITE(1,7000) 20 CONTINUE WRITE(1,5000) 1000 FORMAT(3/,15X,"3485 VERIFICATION TEST",3/) 2000 FORMAT(2/,"RANDOM MODE:") 3000 FORMAT(2/,"SEQUENTIAL BLOCK MODE:") 4000 FORMAT(2/,"DIGITIZE MODE:") 5000 FORMAT("END OF TEST") 6000 FORMAT(5X,"CHANNEL # ",I2," = ",E11.5) 7000 FORMAT(4/,"WITH FILTER ENABLED,") 1 CONTINUE END END$    25154-18008 B S 0100 TASMB TEST TAPE              H0101 +ASMB,R,B,L NAM TASMB ENT TASMB EXT CLRIO,RMPAR,PRTN,EXEC EXT .DIO.,.DTA.,.IAY.,.IIO. ********* THIS LINE SHOULD HAVE BEEN DELETED WITH EDIT ******** * * TASMB TEST TAPE * 25154-18008 * * IB BSS 5 LP DEF L L BSS 35 TASMB JSB CLRIO DEF *+1 JSB RMPAR DEF *+2 IBP DEF IB CLA,INA STA IA CLB JSB .DIO. DEF F0 DEF *+2 JSB .DTA. CLA,INA CLB JSB .DIO. DEF F1 DEF *+2 JSB .DTA. CLA,INA CLB,INB JSB .DIO. OCT 0 DEF *+4 JSB .IAY. DEF IB O5 OCT 5 CLA,INA CLB JSB .DIO. DEF F2 DEF *+2 JSB .DTA. CLA,INA CLB,INB JSB .DIO. OCT 0 DEF *+3 JSB .IIO. DEF IA CLA,INA CLB JSB .DIO. DEF F3 DEF *+2 JSB .DTA. CLA,INA CLB,INB JSB .DIO. DEF F4 DEF D CLA,INA STA Q C LDA Q ADA M1 ADA LP STA S JSB .IIO. DEF S,I LDA Q INA STA Q CMA,INA ADA O43 SSA,RSS JMP C D CLA,INA STA I P LDA IB CLB JSB .DIO. DEF F5 DEF M CLA,INA STA Q N LDA Q ADA M1 ADA LP STA S JSB .IIO. DEF S,I LDA Q INA STA Q CMA,INA ADA O43 SSA,RSS JMP N JSB .DTA. M LDA I INA STA I CMA,INA ADA IA SSA,RSS JMP P JSB PRTN DEF *+2 DEF IB JSB EXEC DEF O6 DEF O6 O6 OCT 6 O43 OCT 43 M1 OCT -1 IA BSS 1 Q BSS 1 S BSS 1 I BSS 1 SUP F0 ASC 11,(/," HP ASSEMBLER",/) F1 ASC 9,(" OUTPUT LUN? _") F2 ASC 12,(" NUMBER OF LINES? _") F3   ASC 14,(" ENTER A DATA STRING: _") F4 ASC 3,(35A2) F5 ASC 4,(X,35A2) END TASMB END$ R   25154-18009 B S 0100 TFTN TEST TAPE              H0101 FTN,B,L PROGRAM TFTN C C TFTN TEST PROGRAM C 25154-18009 C DIMENSION IBUF(5),LINE(35) CALL RMPAR(IBUF) 5 FORMAT(/," HP FORTRAN",/) 10 FORMAT(" OUTPUT LUN? _") 20 FORMAT(" NUMBER OF LINES? _") 30 FORMAT(" ENTER A DATA STRING: _") 40 FORMAT(35A2) 50 FORMAT(X,35A2) IA=1 WRITE(1,5) WRITE(1,10) READ(1,*)IBUF WRITE(1,20) READ(1,*)IA WRITE(1,30) READ(1,40)(LINE(L),L=1,35) DO 100 I=1,IA II=IBUF(1) WRITE(II,50)(LINE(L),L=1,35) 100 CONTINUE CALL PRTN(IBUF) END END$ )N  25154-18010 B S 0100 TFTN4 TEST TAPE              H0101 FTN4,B,L PROGRAM TFTN4 C C TFTN4 TEST PROGRAM C 25154-18010 C DIMENSION IBUF(5),LINE(35) CALL RMPAR(IBUF) 5 FORMAT(/," HP FORTRAN 4",/) 10 FORMAT(" OUTPUT LUN? _") 20 FORMAT(" NUMBER OF LINES? _") 30 FORMAT(" ENTER A DATA STRING: _") 40 FORMAT(35A2) 50 FORMAT(X,35A2) IA=1 WRITE(1,5) WRITE(1,10) READ(1,*)IBUF WRITE(1,20) READ(1,*)IA WRITE(1,30) READ(1,40)(LINE(L),L=1,35) DO 100 I=1,IA II=IBUF(1) WRITE(II,50)(LINE(L),L=1,35) 100 CONTINUE CALL PRTN(IBUF) END END$ %  25154-18011 B S 0122 TALGOL TEST TAPE              H0101 =HPAL,B,L,"TALGOL" & & TALGOL TEST TAPE & 25154-18011 & BEGIN INTEGER ARRAY IBUF[1:5]; INTEGER ARRAY LINE[1:35]; INTEGER IA,Z,Y,II; PROCEDURE RMPAR(I);INTEGER I;CODE; PROCEDURE PRTN(J);INTEGER J;CODE; FORMAT F0(/," HP ALGOL",/); FORMAT F1(" OUTPUT LUN? _"); FORMAT F2(" NUMBER OF LINES? _"); FORMAT F3(" ENTER A DATA STRING: _"); FORMAT F4(35A2); FORMAT F5(X,35A2); RMPAR(IBUF[1]); II_IBUF[1]; IA_1; WRITE(1,F0); WRITE(1,F1); READ(1,*,II); WRITE(1,F2); READ(1,*,IA); WRITE(1,F3); READ(1,F4,FOR Z_1 TO 35 DO LINE[Z]); FOR Y_1 STEP 1 UNTIL IA DO WRITE(II,F5,FOR Z_1 TO 35 DO LINE[Z]); IBUF[1]_II; PRTN(IBUF[1]); END$ L  25154-18012 B S 0100 RTE-II/BSM TEST TAPE              H0101 oF:SV,1 :SE,1,1G :ST,5,TSTED,AS :ST,5,TSTEDR,AS :ST,5,TSTAS,AS :ST,5,TSTFT,AS :ST,5,TSTFT4,AS :ST,5,TSTAL,AS :ST,5,TASMB,AS :ST,5,TFTN,AS :ST,5,TFTN4,AS :ST,5,TALGOL,AS :ST,5,JOB1,AS :ST,5,JOB2,AS :ST,5,JOB3,AS :ST,5,TJOB1,AS :ST,5,TJOB2,AS :ST,5,TJOB3,AS :ST,5,SHUTDN,AS :TE,* A DIR. LIST SHOULD BE PRODUCED. :DL,,XX :SV,0 :TR :SV,1 :TE,* USE EDIT TO MOD. TASMB. :MS,TASMB,EDIT :TE,* ENTER THE FOLLOWING EDIT COMMANDS: :TE,* /D,6 :TE,* /E :RU,EDIT,1,2,2 :TE,* EDIT EXECUTED! SAVE SOURCE BY :TE,* ENTERING THE FOLLOWING FMGR COMMANDS: :TE,* :LS,NN,XXXX :TE,* :PU,TASMB :TE,* :SA,LS,TASMB :SV,0 :TR :SV,1 :TE,* USE EDITR TO MODIFY TFTN4. :TE,* ENTER THE FOLLOWING EDITR COMMANDS: :TE,* /TFTN4 :TE,* /6 :TE,* /- :TE,* /ERTFTN4 :RU,EDITR :TE,* EDITR EXECUTED! :SV,0 :TR :SV,1 :TE,* PROCESS AND RUN TASMB. :LG,1 :MS,TASMB,ASMB :RU,ASMB,2,,64,99 :RU,LOADR,99 :RU,TASMB,1P :OF,TASMB,8 :TE,* ASSEMBLER EXECUTED! :SV,0 :TR :SV,1 :TE,* PROCESS AND RUN TFTN. :LG,1 :MS,TFTN,FTN :RU,FTN,2,,64,99 :RU,LOADR,99 :RU,TFTN,1G :OF,TFTN,8 :TE,* FORTRAN EXECUTED! :SV,0 :TR :SV,1 :TE,* PROCESS AND RUN TFTN4. :LG,1 :MS,TFTN4,FTN4 :RU,FTN4,2,,64,99 :RU,LOADR,99 :RU,TFTN4,1P :OF,TFTN4,8 :TE,* FORTRAN IV EXECUTED! :SV,0 :TR :SV,1 :TE,* PROCESS AND RUN TALGOL. :LG,1 :MS,TALGOL,ALGOL :RU,ALGOL,2,,64,99 :RU,LOADR,99 :RU,TALGOL,1P :OF,TALGOL,8 :TE,* ALGOL EXECUTED! :SV,0 :TR ASMB,R,B,L NAM TASMB ENT TASMB EXT CLRIO,RMPAR,PRTN,EXEC EXT .DIO.,.DTA.,.IAY.,.IIO. ********* THIS LINE SHOULD HAVE BEEN DELETED WITH EDIT ******** * * TASMB TEST TAPE * 25154-18008 * * IB BSS 5 LP DEF L L BSS 35 TASMB JSB CLRIO DEF *+1 JSB RMPAR DEF *+2 IBP DEF IB CLA,INA STA IA CLB JSB .DIO. DEF F0 DEF *+2 JSB .DTA. CLA,INA CLB JSB .DIO. DEF F1 DEF *+2 JSB .DTA. CLA,INA CLB,INB JSB .DIO. OCT 0 DEF *+4 JSB .IAY. DEF IB O5 OCT 5 CLA,INA CLB JSB .DIO. DEF F2 DEF *+2 JSB .DTA. CLA,INA CLB,INB JSB .DIO. OCT 0 DEF *+3 JSB .IIO. DEF IA CLA,INA CLB JSB .DIO. DEF F3 DEF *+2 JSB .DTA. CLA,INA CLB,INB JSB .DIO. DEF F4 DEF D CLA,INA STA Q C LDA Q ADA M1 ADA LP STA S JSB .IIO. DEF S,I LDA Q INA STA Q CMA,INA ADA O43 SSA,RSS JMP C D CLA,INA STA I P LDA IB CLB JSB .DIO. DEF F5 DEF M CLA,INA STA Q N LDA Q ADA M1 ADA LP STA S JSB .IIO. DEF S,I LDA Q INA STA Q CMA,INA ADA O43 SSA,RSS JMP N JSB .DTA. M LDA I INA STA I CMA,INA ADA IA SSA,RSS JMP P JSB PRTN DEF *+2 DEF IB JSB EXEC DEF O6 DEF O6 O6 OCT 6 O43 OCT 43 M1 OCT -1 IA BSS 1 Q BSS 1 S BSS 1 I BSS 1 SUP F0 ASC 11,(/," HP ASSEMBLER",/) F1 ASC 9,(" OUTPUT LUN? _") F2 ASC 12,(" NUMBER OF LINES? _") F3 ASC 14,(" ENTER A DATA STRING: _") F4 ASC 3,(35A2) F5 ASC 4,(X,35A2) END TASMB END$ FTN,B,L PROGRAM TFTN C C TFTN TESC!T PROGRAM C 25154-18009 C DIMENSION IBUF(5),LINE(35) CALL RMPAR(IBUF) 5 FORMAT(/," HP FORTRAN",/) 10 FORMAT(" OUTPUT LUN? _") 20 FORMAT(" NUMBER OF LINES? _") 30 FORMAT(" ENTER A DATA STRING: _") 40 FORMAT(35A2) 50 FORMAT(X,35A2) IA=1 WRITE(1,5) WRITE(1,10) READ(1,*)IBUF WRITE(1,20) READ(1,*)IA WRITE(1,30) READ(1,40)(LINE(L),L=1,35) DO 100 I=1,IA II=IBUF(1) WRITE(II,50)(LINE(L),L=1,35) 100 CONTINUE CALL PRTN(IBUF) END END$ FTN4,B,L PROGRAM TFTN4 C C TFTN4 TEST PROGRAM C 25154-18010 CCCCCCCCC THIS LINE SHOULD BE DELETED BY EDITR CCCCCCCCCC C DIMENSION IBUF(5),LINE(35) CALL RMPAR(IBUF) 5 FORMAT(/," HP FORTRAN 4",/) 10 FORMAT(" OUTPUT LUN? _") 20 FORMAT(" NUMBER OF LINES? _") 30 FORMAT(" ENTER A DATA STRING: _") 40 FORMAT(35A2) 50 FORMAT(X,35A2) IA=1 WRITE(1,5) WRITE(1,10) READ(1,*)IBUF WRITE(1,20) READ(1,*)IA WRITE(1,30) READ(1,40)(LINE(L),L=1,35) DO 100 I=1,IA II=IBUF(1) WRITE(II,50)(LINE(L),L=1,35) 100 CONTINUE CALL PRTN(IBUF) END END$ HPAL,B,L,"TALGOL" & & TALGOL TEST TAPE & 25154-18011 & BEGIN INTEGER ARRAY IBUF[1:5]; INTEGER ARRAY LINE[1:35]; INTEGER IA,Z,Y,II; PROCEDURE RMPAR(I);INTEGER I;CODE; PROCEDURE PRTN(J);INTEGER J;CODE; FORMAT F0(/," HP ALGOL",/); FORMAT F1(" OUTPUT LUN? _"); FORMAT F2(" NUMBER OF LINES? _"); FORMAT F3(" ENTER A DATA STRING: _"); FORMAT F4(35A2); FORMAT F5(X,35A2); RMPAR(IBUF[1]); II_IBUF[1]; IA_1; WRITE(1,F0); WRITE(1,F1); READ(1,*,II); WRITE(1,F2); READ(1,*,IA); WRITE(1,F3); READ(1,F4,FOR Z_1 TO 35 DO LINE[Z]); FOR Y_1 STEP 1 UNTIL IA DO WRITE(II,F5,FOR Z_1 TO 35 DO LINE[Z]); IBUF[1]_II; PRTN(IBUF[1]); END$ :JO,JOB1 :SV,1 :LG,1 :MS,TJOB1,FTN4 :RU,FTN4,2,64,64,99 :RU,LOADR,99,64 :RU,TJOB1 :OF,TJOB1 :SV,0 :EO :JO,JOB2 :SV,1 :LG,1 :MS,TJOB2,FTN4 :RU,FTN4,2,64,64,99 :RU,LOADR,99,64 :RU,TJOB2 :OF,TJOB2 :SV,0 :EO :JO,JOB3 :SV,1 :LG,1 :MS,TJOB3,FTN4 :RU,FTN4,2,64,64,99 :RU,LOADR,99,64 :RU,TJOB3 :OF,TJOB3 :SV,0 :EO FTN4,B,L PROGRAM TJOB1 DIMENSION IT(5) CALL EXEC(11,IT,IY) WRITE(6,10) 10 FORMAT(X,"THIS IS JOB 1.",/,X,"THE TIME IS:") WRITE(6,20)IY,IT(5),IT(4),IT(3),IT(2),IT(1) 20 FORMAT(6(5X,I4)) END END$ FTN4,B,L PROGRAM TJOB2 DIMENSION IT(5) CALL EXEC(11,IT,IY) WRITE(6,10) 10 FORMAT(X,"THIS IS JOB 2.",/,X,"THE TIME IS:") WRITE(6,20)IY,IT(5),IT(4),IT(3),IT(2),IT(1) 20 FORMAT(6(5X,I4)) END END$ FTN4,B,L PROGRAM TJOB3 DIMENSION IT(5) CALL EXEC(11,IT,IY) WRITE(6,10) 10 FORMAT(X,"THIS IS JOB 3.",/,X,"THE TIME IS:") WRITE(6,20)IY,IT(5),IT(4),IT(3),IT(2),IT(1) 20 FORMAT(6(5X,I4)) END END$ :SV,1 :LG,0 :LS,0 :PU,JOB1 :PU,JOB2 :PU,JOB3 :PU,TJOB1 :PU,TJOB2 :PU,TJOB3 :PU,TALGOL :PU,TFTN4 :PU,TFTN :PU,TASMB :PU,TSTAL :PU,TSTFT4 :PU,TSTFT :PU,TSTAS :PU,TSTEDR :PU,TSTED :PU,SETUP :PU,SHUTDN :PK :SV,0 :EX :XE,JOB1 :XE,JOB2 :XE,JOB3 B   25154-80027 A S 0106 RDTS MASTER TO SLAVE TEST TAPE             H0101 2* ************************************************************ * * * REMOTE DATA TRANSMISSION SYSTEM * * MASTER TO SLAVE TEST DATA TAPE * * * * SOURCE: HP 25154-80027 * * LISTING: HP 25154-80027-1 * * PROCESS DOCUMENT: HP 91780-90003 * * * ************************************************************ * * * THIS ASCII TEST TAPE WAS READ BY THE MASTER * * PHOTOREADER(STATION BEING TESTED)AND IS LISTED * * ON THE SLAVE SYSTEM CONTROL DEVICE(STATION DOING * * THE TESTING). IT DEMONSTRATES SUCCESSFUL * * TRANSMISSION OF INFORMATION BY THE MASTER STATION * * TO THE SLAVE STATION. * * * ************************************************************ * #E   25154-80028 A S 0106 RDTS SLAVE TO MASTER TEST TAPE             H0101 ,!* * ************************************************************ * * * * * REMOTE DATA TRANSMISSION SYSTEM * * SLAVE TO MASTER TEST DATA TAPE * * * * * * SOURCE: HP 25154-80028 * * LISTING: HP 25154-80028-1 * * PROCESS DOCUMENT: HP 91780-90003 * * * * * ************************************************************ * * * * * THIS ASCII TEST TAPE IS BEING READ BY THE SLAVE * * PHOTOREADER(STATION DOING THE TESTING)AND IS * * LISTED ON THE MASTER LIST DEVICE(STATION BEING * * TESTED). * * * * * * * * * * * * * * * * * * * * * * SOMEWHERE BEFORE NOW THE OPERATOR SHOULD HAVE * * GOTTEN THE ATTENTION OF THE MASTER STATION(HIT * * ANY KEY ON THE SYSTEM CONTROL DEVICE)AND ENTERED * * THE FOLLOWING COMMAND: | * * * * * * *ON,#INRP * * * * * * AFTER A NOTICEABLE DELAY, THIS WILL INTERRUPT THE * * OUTPUT TO THE MASTER LIST DEVICE AND RETURN CONTROL * * TO THE MASTER SYSTEM CONTROL DEVICE WHERE A # PROMPT * * CHARACTER WILL APPEAR FOR THE OPERATOR. HE SHOULD * * THEN ENTER THE FOLLOWING COMMANDS(THE SYSTEM PROMPT * * IS SHOWN): * * * * ##C,,,1 * * #CTRL-D * * * * * * THE FIRST COMMAND WILL CHANGE THE LIST DEVICE * * TO THE SYSTEM CONTROL DEVICE(TTY/CRT). THE * * CTRL-D(OBTAINED BY PUSHING THE CTRL AND D KEYS * * TOGETHER)SIGNIFIES AN END-OF-FILE FOR THE TTY/CRT * * AND CAUSES COMPUTER PROCESSING TO RESUME. THE * * REST OF THE SLAVE'S PAPER TAPE WILL BE LISTED ON * * ON THE MASTER'S SYSTEM CONTROL DEVICE. * * * * * * * * * * THIS LISTING DEMONSTRATES THAT THE MASTER SYSTEM * * IS RECEIVING ASCII DATA FROM THE SLAVE. IF DATA * * CAN BE TRANSMITTED BETWEEN THE TWO SYSTEMS THEN * * WE CAN ASSUME THE MASTER'S REMOTE DATA TRANSMISSION * * SYSTEM WAS PUT TOGETHER CORRECTLY. IN ADDITION, * * BY USING #INRP TO CHANGE LIST DEVICES, WE HAVE * * DEMONSTRATED THAT THE RDTS INTERRUPT ROUTINE WAS * * INCORPORATED CORRECTLY WITHIN THE RTE/RTE-C SYSTEM. * * * * * * * * IF BOTH MASTER-TO-SLAVE AND SLAVE-TO-MASTER * * LISTINGS ARE CORRECT, THEN THIS CONCLUDES * * VERIFICATION OF THE RDTS GENERATION. * * * * * ************************************************************ * * #D !  28051-80001 B S 0122 K21-5321B DIGITAL CLOCK CLK 21             H0101 NB PGAMK à àHSUNŠSDSGNDϠVYPPҠPAN àHŠHPDGA̠KSUBSYSM.HŠUPMNԠNSSS àƠAK-53BDGA̠K566-600ɯϠADAND àNAŠAB. à àHŠPGAMUSSBSDVҠD.3ANDAS"GK""SAD". à à A̠SAD(00AND(SS(5B Š(00 AD(0 A̠SAD(3Bì A̠SAD(0000 Ԡ0 à àPNԠPAAMҠNMAN à 0(0 PAUS (SS(5030 0Š(03 (0 PAUS à 30Ơ(SS(0600 à àMŠƠDAYS à 0AD(NDAYNHUҬNMNNSìMS (NDAY-9990 0(NDAY-365 Š(0 GϠϠ50 5Š(0NDAYNHUҬNMNNSìMS Ơ(SS(3050 Š(0 50PAUS GϠϠ30 à àPUSŠANNUPԠS à 60Š(05 AD(0 Ơ(-3B66 6Ơ(-B656 65Š(09 GϠϠ50 6MUɽ0 Š(ԬMU Ơ(-3B090 0A̠GK(Sԩ Ơ(Sԩ090 0Š(06 90Ơ(SS(3050 à àMAԠSN à 00MAԠ("HPDGA̠KSUBSYSMVAN" "KɯϠSԠD?" 0MA("ϠDSPAYNSUNSSԠS.5PSSUN" 0MAԠ(K 03MAԠ("ϠADMŠƠDAY:"6"SԠSH00""ϠS PUSŠAN:""SԠSH0"5"PUSŠAND- -""Sà0"0"00MSà"".Sà""0M 3Sà5"0"0MSà""MSà6""MSà3 ""DSABŠ"" 5DSABŠNUPԬADDA̠0ϠHŠABVŠD.""ҠAMP 6HŠDŠҠAMSàPUSŠANUPUԠS3.""ϠBYPASS NMANPNUԬSԠSH50." 03  MAԠ(ج3"DAYS"ɲ"HUS"ɲ"MNS"ɲ"SS" 3"MS" 05MAԠ("NҠNUPԠDŠ_" 06MAԠ("NUPԠSԠAD-NϠAGUND" 0MAԠ("MŠҠ-SԠK" 0MAԠ("NϠPNԠMMAND" 09MAԠ("GA̠DŠ-NUPԠAŠϠAS" 0MA("SԠSHGSҠPNPSSUN" à ND ND$ Z   28063-80001 B S 0122 28063A MULTIPROGRAMMER SS FUNCT TEST (BASE PRGM)             H0101 O 5MP063-000VB 0M33ݬZ۱0ݬ۱ݬA۴ ƠZ3ݽHN000 3ƠZ3ݽHN500 ƠZ3ݽ3HN000 5ƠZ3ݽHN500 6ƠZ3ݽ5HN3000 ƠZ3ݽ6HN3500 9ƠZ۱ݽHN500 0ƠZ۱ݽ3HN5000 ƠZ۱ݽHN5500 ƠZ۱ݽ5HN6000 3ƠZ۱ݽ6HN6500 ƠZ۱ݽHN000 5ƠZ۱ݽHN500 6ƠZ۱ݽ9HN000 35PNԠAB("63AUNԠS" 0GSUB9500 5GSUB65 6ƠZ۱ݽGSUB30 9ƠZ۱ݽGSUB500 50GSUB5 0Ԡ۲ݽ35 5Ԡ۲ݽ5 0Ԡ۲3ݽ55 Ơ۲ݾ0GϠ95 ҠɽϠ6 3Ԡݽ۲3 NԠ 5Ԡ۲ݽ063. 95GSUB900 00GϠ535 5MPG(0A:GϠ9950 5MPGS(0 30ƠZ۱ݣUN 35DP(000 0UN 65DSPAY"NҠS" 0DSPAY"PU̠GN" DSPAY"PҠSUP" DSPAY"3SBD" 3DSPAY"YBD" 5DSPAY"5̠BD" DSPAY"6DGNPԠBD" 90DSPAY"D-ABD" 9DSPAY"VNԠBD" 9DSPAY"9690S" 99DSPAY"99MNAŠ" 300NPUԠZ۱ 30ƠZ۱ݽ99GϠ9950 305UN 30GSUB900 35DSPAY"SԠ" 30DSPAY"A" 35DSPAY"DH" 330DSPAY"3DY" 335DSPAY"Š" 30DSPAY"5AMP" 35DSPAY"6S" 355NPUԠZ3 360GSUB900 365DSPAY"9A" 30DSPAY"95A" 35NPUԠ33 30UN 00DSPAY"69Ϡ" 05NPUԠU 0GSUB900 0UN 500DSPAY"SYPUԠ" 505NPUԠ 50Ơؽ0UN 50SYPU(905 5SYPU(90 55Ơ33ݽHN5 5SYPU(9 50GϠ55 5SYPU(95 55UN 535M 536DSPAY"ADP-0"AB( 53ƠZ3ݽDSPAY"00" 50ƠZ3ݽDSPAY"003" 55ƠZ3ݽ3DSPAY"00" 550ƠZ3ݽDSPAY"005" 555ƠZ3ݽ5DSPAY"006" 560ƠZ3ݽ6DSPAY"00" 565ƠZ۱ݽDSPAY"00" 50ƠZ۱ݽ3DSPAY"009" [55ƠZ۱ݽDSPAY"0" 50ƠZ۱ݽ5DSPAY"00" 55ƠZ۱ݽ6DSPAY"0" 590ƠZ۱ݽDSPAY"03" 595ƠZ۱ݽDSPAY"0" 600ƠZ۱ݽ9DSPAY"05" 605ND 500M 50DSPAY 50DSPAY"DADPYҠSGNAUŠ" 506NPUԠ۲9 50Ơ۲9MPNԬɠYS.UN DBBADDɠHBUҠNGH SZBNGHSNN-Z SSBANDPSV? MPʱN.GA̠US MBNBMPMNԠҠUNS MPNԬɠUN ANP B00Ԡ00 DBSYNP DԠDBMDŠHHҠDV'SMD SZANMDŠSPNPDMA AҬSAAҠDDҠNԠ? MPD5YS. SASSSPA̠PNPDMAMD? MPDԷYS A SSASSSDPNҠMD? MPʱN.GA̠US PBB5HҠMDŠSSDPN? MPDԸYS. MPMPN.NMPABŠMDS D5SZBHҠMDŠSPNPDMA PBBҠDD? MPDԸYS. MPMPN.NMPABŠMDS DԷPBBHҠMDŠSSPA̠PNN? SSYS. MPMPN.NMPABŠMDS DԸDA.00SԠŠDAANY SAAGPANAG D9DAAHKHAA SBUPAANDUPU DԱ0DASñ SAMD A SBMUԠSԠANSMSSNMD MPD.65ɠUNϠ. .00Ԡ0000 USԠANDDAAANSMSSNMD .DԠPBB5ԠBUҠNGH? SSYS. MPʱN.GA̠US SBDƠSԠUSԠANDDAAAG DBSUBHANSMSSNMD DAGHADŠAG SZAAD? MPD0N. PBB5SDPN? DBB0YS.SԠPANB SBDMADDSPA̠NԠPNP? MPʱN.GA̠US SZBSSDMAPNP? NBYS.SԠPANB SBAGԠSAVŠPANB MPDԱ D0{PBBSPA̠NԠPNP? MPʱYS.GA̠US DԱB SBNԠHDAABUҠADDSS SADPBUƠANDNGH. SAPBU SBDN SBN SZBADD DԲB SBNԠHUSԠBUҠADDSS SAPBUƠSAV DBBADDɠHUSԠBUҠNGH SSBUSԠBUҠNGHPSV MPʱN. MBMAKŠNGAVŠUN SBNҠANDSAV DADHUSԠMNGHAA SBUPAUPUԠHAA ANASԠUPUԠUS SAAGPANAG MPDԱ0 DԠ00 DSUBNP GNP ANP GNP SPANSMSSNMD SPANASAUSϠUSԠMPD MPMP .00Ԡ000 SɠA SASƠSԠSNAG BNBSԠSAUSBS SBSASUSԠMPD MPSA NDBBNHUSԠBUҠNGH PBB3ԠBUҠNGH? SSYS. MPʱN.GA̠US SBNԠHUSԠBUҠADDSS SAPBUƠANDNGH. SBNҠSAV. DAS SZASSSNҠPNGNABD? DAB5N.DAUԠϠPNG SASSAGSNMD? MPN SANƠSԠNPUԠP̠AG SSSS0HAAҠVD? MPNN. SBPYàHAA? MPNN. MPNN. MPNN. SSYS. MPNN. DABSԠPANAG SAAGϠNPUԠUS MPD9 NDA3SԠUP SAMDŠSԠVŠAGMD DBB00SԠSAUSϠNϠUS MPS+3#VD. NDABSԠPANAG SAAGϠVNGUS N3DAAHNנHAA MP0 ҠNP SAASAVŠA BNBSԠSNDMŠAG DAұHSԯSND SAұԠAGANDSAV SASSSԠM? MPҲYS. AҬSASNDM SZҠN.UNP+3 ADBBYS.SԠHD SZҠMŠAG. ҲSBұSAVŠAG DAASŠA MPҬɠUN MDŠNP SUBNP GNP B3Ԡ3 SƠNP GNP MUԠNP MDŠNPSԠANSMSSNMD MPMUԬɠUN DMANP DADPBUƠHDAABUҠADDSS AAҠADDNPUԯUPUԠBԬ SAנANDSAV Ơ0DSABŠNUPԠSYSM DMAADADMAñHDMAHANN̠AGD ŬSZASSHANN̠AVAAB? MPNDMAN. SSAHANN̠BUSY? MPBUSYYS. SADMAƠSAVŠHANN̠SԠD AAҠADDBUSYB SADMAñANDS MPNK BUSYDADMAòHDMAHANN̠AGD SZASSHANN̠AVAAB? MPDMAAN. SSAHANN̠BUSY? MPDMAAYS. SADMAƠSAVŠHANN̠SԠD AAҠADDBUSYB SADMAòANDS NKSƠ0NABŠNUPԠSYSM DAױɠHNUPԠNKAND SADMAƬɠSŠNDMANUPԠ DAàNGUŠDMAɯϠNSUNS ҠDMA Ҡ.00 SASD Ҡ.050 SAD SAD3 SAD ADAMN SAD Ҡ.00 SASD ҠB00 SAAD SAAD3 -ADAB SAAD DAױHADSԠD DBנUPU SSBSSUS? Ҡ.00YS.ADDàNABŠB ADA0UPUԠN̠D Dà0 DAנUPU ADA0N SDSà0D DADNҠHBUҠNGH AD3A0UPU MANASAVŠUNԠ SAUNԠANSMSSNG SDSà0AVAŠDMA DABHנҠPA MPDMAɠUN NDMASƠ0NABŠNUPԠSYSM BSԠBϠA ADBAƠUSҠA DAB3SԠAϠSAYNϠDMAAVAAB MP B0Ԡ0 B5Ԡ5 DMAƠNP SñNP SñNP BԠ .00Ԡ0000 .3Ԡ300 SAԠDAUNԠHƠDSANSMD DBGAҠA̠AS SZBSSSԠNY? MPSAԱYS DBGɠUPDAŠANSMSSNG ҠBAND SAGɠS B ADBG DABɠUPDAŠSAUS AND.3AND ҠSAS SABɠS DBDMAƠHDMAAVADAG SZBSSDMAANSҠSAD? MPSAԱN. SBSSHANN̠6USD? SBDMAñYS.AҠBUSYB SBN. SBDMAòAҠH.BUSYB SAԱDA3 DBSƠHSNAG SZBNABD? SBYS.AGMD? SASñYS.SԠVŠAGMD AAҠAGS SADBSY SAD3 SAUNԠAҠAGS SADMA SAұ SAAG SAұ SAPN SAN SA SA SAPY SAMP3 MPԱ ND̈́SBGSԠANSMԠAGMD DBBS SBAGNDNGAG DAADAYMUSԠBŠUS SBUPAUPUԠD MPԲ DƠNP AGԠNP NҠNP PBUƠNP BԠ BԠ ҠBNBSԠSAUSBS SBSASUSԠMPD SASƠAҠSNNABDAG SAGAҠANGAG SAGAҠVDUSԠAG SBGSԠVŠAGMD SBDD.SAҠVҠANDSAUSDS D3NPàDMAƠDMAANSҠSAD MPSA .65NP 3à0 SAASAVŠA SBBSAVŠB AAS S NA SAASAVŠŬ DAAGHPANAG SAAҠUPUNGUS? MPUԠYS. SAAҠNPUNGUS? MPNYS. SAAҠNDNGANSMSSN? MPNDYS. SAAҠPNPDMAADUS? MPDAҠYS. SAAҠPNPDDADUS? MPDҠYS. SAAҠSPA̠PNPNҠAD? MPSNҠYS. SAAҠSDPNҠADUS? MPNҠYS. SAAҠPNPDMAŠUS? MPDAנYS. SAAҠSPA̠PNPDMA? MPDAנYS. SAAҠPNPDDŠUS? MPDנYS. SAAҠPNPNҠŠUS? MPNנYS. SAAҠSDPNҠŠUS? MPNנYS. SANAŠDAANYUS? MPŠYS. SBPYADHAA MPԱNԠ.GN MPԱNԠ. MPԱNԠ. DA.65SAVŠUN SAG<:6SԠVDUSԠAG SAS.65ADDSS *<SAS.65ADDSS DAASAV SAA3A DABGSS SAB DAA SAA DBDԠSŠUNADDSSNN65 SBN65NYPN DAD65HADDSSƠN65 SSASSND? MP+N. AŬAYS.MVŠNDԠB DAAɠHVŠADDSS MP-YAGAN ADAB3ADD3 MPAɠMPϠN65+3 ԠDƠ+ANMPABY Ơ0DSABŠNUPԠSYSM DAAS SAAA SƠ DAA3 DBB SƠ0NABŠNUPԠSYSM MPS.65ɠUN DԠDƠ D65DƠN65 A3NP ANP BNP ANP S.65NP DNҠNP DPBUƠNP BNP SҠNP NҠNP PBUƠNP SASNP AԠ0360 àԠ0060 NSBPAҠPAY? MPԱYS. SBҠSԠҠSNDD? MPNS. MPNSND. SAPBUƬɠSŠVDD SZUNԠNMNԠANSMSSNUN SZPBUƠNMNԠUSԠBUƠADDSS N0SZSҠASԠD? MPN3N. DBGHANGAG SZBS? N5ASSYS. DAAHNנHAA N6BNBSԠSAUSBSϠK NSBSAS MPNDK NDBNҠNUMBҠƠUS MBNBPAAMS ADBAϠAG SSASSPNN? MPPNYS. NB SSBҠBU? MPN3YS. SASҠMUSԠUN MPN3 N3DAàHSPHAA DBBSԠSAUSBSϠNA 4MPN NŬSSASSSHҠDVҠANG? BN. AAҠMVŠANGB SBGSԠANGAG SAMDŠSŠVDANSMSSNMD MPN0 ԲDASñ SS ԱDASñ SAMD DAASŠGSS SAA SƠ DAA DBB SBMUԠSԠANSMSSNMD MP.65ɠUN UPANP SADSAVŠDASASԠANSMD AA0UPUԠA MPUPAɠUN AGNP GNP òà0àSԠVŠAGMD MPGɠUN UԠSBҠSԠҠSNDPY? MP9S. MP5SND. SZNҠASԠPY? MPԷN. SBPYYS.ADPY MP3K. MPԲ. MPԱS. MPԱGN ԱDAB0SԠSAUSBSϠDAA MPԱANSMSSNNԠNAD ԲDANҠHBUҠNGHUN MANAS MAAS SANҠUN DADANSMԠAS MP0D 3DAD SZASSUPUԠUSԠNY? MPN6YS. AAҠANSMSSN SAUNԠUN DAGHADAG SZAADUS? MP5N. DAAGԠHMPPANBS MPD0 5DASUBHANSMSSNMD DB.00SԠPANB PAB5SDPN? MP6YS. BҠSԠPANB PAB3PNPN? MP6YS. BҠSԠPANB PABPNPDD? MP6YS. NBҠSԠPANB PABSPA̠PNPDMA? MP6YS. BҠSԠPANҠPNPDMA 6SBAGSԠPANAG BƬB SSBPNPDMA? MPDMAנYS. SBSPA̠PNPDMA? MPDMAנYS. BҬSBPNPDD? MPDDנYS. BҬSBPNPN? MPNנYS. MPNנSDPN NƠNP MP3NP ұNP ұԠNP UNԠNP DMAנ SBDMAAVAŠDMA DBAGHPANAG BƬB SBSSSPA̠PNPDMA? MPԲN. Ơ0DSABŠNUPԠSYSM SBGSԠAGϠSAԠANSMSSN DAADAY DAAMNMUM DAA DAAU-S DAA S3Sà0àSԠVŠMD SƠ0NABŠNUPԠSYSM MPԱ GNP ñà0SԠANSMԠAGMD MPGɠUN נNP MNԠ B0Ԡ0 ԷA SBPYADPY MPԸN. MPԲ ԸDAPBUƬɠHNԠUSԠD SZPBUƠNMNԠUSԠBUƠADDSS SZUNԠNMNԠANSMSSNUN 0SBUPAUPUԠD MPԱ 9SBPYADPY MP3N. MPԴ. MPԲS. DAB0.SԠSAUSBS ԱSASASϠSMUANUSUSS. A MPNDK ԲDABSԠSAUSBS MPԱUSԠNԠAPD. 3DANҠHUSԠNGH MP0ANDUPU ԴAAҠS SAұDAG SAԠAҠנUN MPԲ+ 5SBPYADPY MPԷN MP6 MPԲS ANA?.AҠSND SAұDAG. MPԱ 6ANAAҠSND SAұDAG MP3 ԷDBDƠHUSԠNYAG DASUBHANSMSSNMD ŬSZBUSԠNY? AAҠN.ADDANGB MP0UPUԠANSMSSNMD NDKSZAV?A0 MPNDN.ANSM DAMP5HVҠSAUS AҬSAAҠMSSDD? SSYS. MPSAԠN. SASSPNNPSS MPNDN. SAPGSԠPAA̠PNAG DABSԠPAN SAAGAGϠNDNG MPԱ NDDABHנHAA MPND PYNP PNԠNP ԠNP PGNP DNP BԠ00 NDDAPG SZAPAA̠PNAGS? MPNDYS. Ơ0DSABŠNUPԠSYSM AòA0àADSAUS AҬAҠPNN SAA̠PSS? MPND6YS. SSANנDNV? MPND3YS. B ND6SBMPSԠPNNPSSAG AA0AҠV BòB0àADSAUS SƠ0NABŠNUPԠSYSM BҬBҠPNN SBSSPSS? MPNDN. SBPGSԠPAA MPԱPNAG NDSBDD.SADPAA̠D AAҠPAA SAPGPNAG MPND5 ND3SƠ0NABŠNUPԠSYSM SBPYADD MPSAԠNԠ.&iGN MPSAԠNԠ MPSAԠNԠ ND5DAB. SBUPAUPUԠ MPSA NDDBMPPNN SZBPSSAGS? MPND5YS. SBADSADSAUS SASSVҠDSABD? MPSAԠN. BYS.A MPND6VҠAGAN ŠA SBPYADPY MP5SND. MPԱ? DAҠSBPAҠPAY? MPDAұ Dà0AҠDMAHANN MPN5+ DAұ SBDMASԠDMA DABUPU MP0נHAA DҠƠ0DSABŠNUPԠSYSM DAAHSNDHAA SBUPAANDUPU SSSS0DAADVD? MP-N. A3A0YS.ADD SADPBUƬɠSŠDAADNBU SZDPBUƠNMNԠDAABUƠADDSS SZUNԠNMNԠUN SZDNҠASԠD? MPSSN. SBPAҠPAY? MPDҲYS. SƠ0N.NABŠNUPԠSYSM MPN5+ DҲSBDԠSԠҠANSMSSN MPSS MPNP ADSNP AñA0àADSAUSD MPADSɠUN DD.SNP AA0ADDAAD BñB0àADSAUSD SADSUBSAVŠDAA SBSSVҠDSABD? MPDD.SɠN.UN BҬBҠPNN SBPSS? MPDDYS. B̬B̠SŠSAUS BSMVŠV BSDSABDB AA0AҠV DADSUBSŠDAA MPDD.SɠUN DDB̬B̠SŠDAA MPDD.SɠŖUN SNҠA0ADDAAD SBSDAASŠDAAD MPSҲASNԠASԠD SBPAҠPAY? MPSұYS. MPN5+N. SұSBDԠSԠҠANSMSSN MPԱ SҲDAAHNנHAA MP0ANDUPU SDAANP BSԠSŠAG SADPBUƬɠSŠDAADNBU SDAԱSZDPBUƠNMNԠDAABUƠADDSS SZUNԠNMNԠUN SZBSSSŠҠH? MPDAAɠH.UN SZDNҠASԠD? MPSDAAɠN.UNP+ SZSDAAYS.NMNԠUNADDSS MPSDAAɠUNP+ NҠSBPAҠPAY? MPԱYS. SBSDAAN.SŠDAAD MPSҲASNԠASԠD MPN5+ DAנSBADSADSAUS Dà0AҠDMAHANN SAMPANDSAV SASSVҠDSABD? MPԱN. AҬAҠPNN SASSPSS? MPDAױN. A̬SAMSSDPN? SAMP3SԠMSSDDAG MPԱ DAױDAMP3MSSDD SZASSAGS? MP+N. DAMPYS.ADDMSSD ҠBPN SAMPBԠϠSDSAUS A SBPYADPY MPSòK. MPDMAנ. SòSà0àSԠVŠMD A DBMPHVҠSAUS BҬSBMSSDD? SSYS. MPN6N. DAMP5HASԠVҠSAUS ҠBADDMSSDDB BNBSԠSAUSBS SBSASϠUSԠMPD MPNDK+3 MP5NP DԠNP ,A SAUNԠAҠUN SAנAҠPYAG DAPBUƠSԠDAA SADPBUƠBUҠADDSS DANҠAND SADNҠNGH. MPDԬɠUN DDנƠ0DSABŠNUPԠSYSM SBGSԠANSMԠAGMD DױDADPBUƬɠHDAADMBU SS3SS0ASԠDNASMD? MP-N. AA0UPUԠDAAD SZDPBUƠNMNԠDAABUҠADDSS SZUNԠNMNԠUN SZDNҠASԠD? MPDױN. SBGYS.SԠVŠAGMD SƠ0NABŠNUPԠSYSM MPԱ DנA SBPYADPY MPN6K. SBDԠ.SԠҠANSMSSN MPDD NנSBDAAHDAAD MP0ANDUPU NנA SBPYADPY MPױK. DAD.HASԠDAAD MP0ANDUPU ױSZDNҠPYϠASԠD? MPNנN. MPN5YS. DAANP BSԠHAG DADPBUƬɠHDAAD MPSDAԱ NנDAנPYAGS? SZA MPױYS. SBGN.SԠANSMԠAGMD SBDAAHDAAD SZDNҠASԠD? MPND+N. BYS. SBנSԠPYAG SBGSԠVŠAGMD SADPBUƠSAVŠDAAD SBDD.SAҠVҠAG DADPBUƠSŠDAAD MP0ANDUPU ױA SBPYADPY MPN6K. SBDԠ.SԠҠANSMSSN MPN NUMBNP B00Ԡ00 PYNP SANUMBA0HNPSSBŠPS SBDD.SADPYANDSAUS SBMP5SAVŠVҠSAUS SAPYSAVŠPY ҠAHKHHAAҠA SBBNҠUNԠBS DANUMB SZASSҠPSSBŠPS? MPPY6. SBHAҴHAAҠABҠNH? MPPY3A. MPPYB. DAPY?.HPYAGAN ҠàHKHHAAҠ SBBNҠUNԠBS SBHAҴHAAҠìDҠNN? MPPY. MPPYD. PY0DAұԠ?.SŠSԠ SAұSNDAG. DAPYHPYAGAN SZABKNN? MP+N. PNDBB00YS.SԠSAUS SBSASBSϠBKNN MP+ DANƠHNPUԠP̠AG SZASSS? MPԱN.GNŠHAA SZPYYS.SԠUNҠP+5 PYSZPY PYSZPY SZPY PY3AAҠנUN SA MPPYɠUN PYSZԠNMNԠנUN DA ADAMN0ADD- SZPYNMNԠUNADDSS SSAGHԠNSUVŠ? MPPYɠN.UNϠP+ AYS PY5DBB0SԠSAUSBS MPNϠPAY PY6ADBMN0NUMBҠƠBSS SSBҠSS? MPPY3A SZBNUMBҠƠBSS? MPPYB MPPY0? BNҠNP DBMN0MUNҠ SBBNԱ6BS. BAҠB BNԲSAAҠHKSBƠAAŠNŠB NBUNNNGUNԠƠBSS. SZBNԱA̠6BSƠAHKD? MPBNԲN. MPBNҬ640ɠYS.UN.BNUMBҠƠBS BNԱNP MN0Ԡ0 MN0Ԡ60 MNԠ6 B0Ԡ0 HAҴNPBNUMBҠƠBSS ADBMNNUMBҠƠBSS SSB3ҠSS? MPHAҴɠYS.HA.AҠìUNP+ ADBMNN.NUMBҠƠBSS SSBUA̠ϠҠGAҠHAN3? SZHAҴN.NHҠHA.UNP+3 SZHAҴYS.HA.BҠDUNP+ MPHAҴɠUN PAҠNP SBDD.SADDAADANDSAUS SBMP5SAVŠVҠSAUS SSBPAY? MPPAұYS. BN.A SBPNԠP..UN SZPAҠNMNԠUNADDSS MPPAҬɠUNP+ PAұSZPNԠNMNԠPŠUN DBPN ADBMN0ADD- SSBSSGHԠNSUVŠP..? MPPAҲYS. DABN.HנHAA DBAGPN BҬBҠP BҬBҠDMA SBSSAD? SBUPAN.UPUԠ MPPAҬɠUNP+ PAҲDABHנHAA MPPY5 AU0 BU ND \6 )B 29004-80001 A S 0122 COUPLER SERIAL INTERFACE BCS DRIVER D.66             H0101 ASMBҬB̬ HD3NAŠBSDVҠD.66(3Է NAMD.66 NԠD.66.66 D.66NP SAASAVŠԠADDSS SBASAVŠUSԠDŠADDSS DAD.66SԠNNUAҠ SA.66ϠàUN DABɠHUSԠDŠD ANDM00SAŠUNN ŬSZAAҠUS? MP+3N. SAAYS.SԠAҠAG MP+ DBDBSYHDVҠBUSYAG SZBDVҠBUSY? MPʱYS. SBAAҠANNNUAҠ DBB PA.0BNAYADUS? BSŠYS.SԠPANAGϠ. PA.00ASɠADUS? BSŠYS.SԠPANAGϠ. PA.0BNAYŠUS? BSŬBSYS.SԠPANAGϠ6. PA.00ASɠŠUS? BSŬBSYS.SԠPANAGϠ. PA.30NMAZŠN̠US? MPѠYS.SԠPANAGϠ. SZSSASGA̠US? MPѠYS. ʠBSSUSԠDŠ.B0 ʱDBS.0DVҠBUSY.BNG ANAPANDD.A MPD.66ɠUNϠ NSANS M00Ԡ600 .0Ԡ000 .00Ԡ0000 .0Ԡ000 .00Ԡ0000 .30Ԡ3000 AàA0 BԠ .00Ԡ00 .0500Ԡ5000 .000Ԡ000 .050Ԡ500 B00Ԡ00 B00Ԡ00 ANP ANP AҠSBDD.SAҠSAUSANDDAADS MPSK ѠSBAGSAVŠPANAG DAAɠHSԠDŬSAŬ ANDBANDNGUŠɯϠNSUNS ҠA SAA SAN3 Ҡ.00 SAñ Ҡ.0500 SASò Ҡ.000 BSAñ SAò SA+ à0àSԠVŠAGMD Ҡ.050 SASS ҠB00 SASñ ҠB00 SAA Ҡ.0500 SABñ SABò SAB3 SADBSYSԠDVҠBUSYAG DBAMADDSS ŬNBԠD.(SAUS DABɠHԠSAUSD AAҠADDDVŠBUSYB SABɠANDS. NBMADDSSƠANSMSSN SBGGANDSAV. DBA SZBSSAҠUS? MPAҠYS. DBAGHPANAG BҬB SBNMAZŠUS? MPñYS. SBDD.SADVҠANDSAUSD DAM55NAZŠH-ϠAG SAHϠϠH DBAM ADBBBUҠADDSS DABɠHDAABUҠADDSS A̬ŬSAAND? DAAɠYS.HVŠADDSS SSANDԠAGAN? MP-3YS. NBMADDSSƠBUҠNGH DBBɠHBUҠNGH SZBSSZ? MPʠYS. SADPBUƠSŠDAABUҠADDSS SBUNԠSAVŠGNA̠UN SSBNGAV? MP+3YS. B̠N.NVԠϠHAAҠUN MBNBMPMN SBDNҠSŠASUN DBAGHPANAG BҬSBBҠASɠ MP0BNAY BҬSBBҠADUS? MP0YS. SBSSASɠ? MPײYS. DADPBUƬɠN.HS MPN3BNAYD 0DANנHNנHAA SAƠSԠADAG MPN3 NSANS M55gԠ555 S.0Ԡ00000 ANP ײDADNҠHBUҠNGH SADDƠHAAS? BYS.SԠHɠHAAҠAG NAM MANAADDSS AS ADADPBUƠASԠHAA DAAɠHASԠHAA SZBSSHɠҠϠHAA? AƬAƠH.AŠϠϠHA ANDB3SAŠϠHAA PAAԠHAAҠS? MP״YS. MPHA NSANS AԠԠ00 BԠ DBSYNP ״SANDNƠSԠNϠDNŠAG SZDNҠNMNԠBUҠNGH SZUNԠSUBAԠNŠMGNA̠UN MPHA .66NP òà0àSԠVŠAGMD SAASAVŠGSS SBB A SAA DAAGHPANAG SAAҠPYASɠ? MPAԠYS. SAAҠBNAYAD? MPBDYS. SAAҠNMAZŠUS? MPNYS. SAAҠASɠAD? MPADYS. SBPAҠPAYҠҠMPPҠPY? SZDN SZDNҠPYϠASԠHAA? SSN. MPSKYS. SZDPBUƠNMNԠBUҠADDSS DADPBUƬɠHNԠD MPN3 NDANSYNHN-SYNSNԠAG BA SBUNԠGNA̠UN SBDNҠANDUN SZAAGS? MPñYS SBDD.SADVҠANDSAUS SSBPAY? MPNYS. PANנNנPY? MPSKYS. NDASYNԠHSYNUN PABHAVŠYSBNAMPD? MPSMŠYS. SZSYNԠ ^NMNԠSYNUN DASYNHSYNHAA N3A0UPUԠHAA SADSŠASASԠD PAנ? SSYS. SANDSŠASASԠNN-נD NDAASŠGSS A DBB DAA SòSà0àSԠVŠNUPԠMD MP.66ɠUN NSANS SYNԠ00 UNԠNP AGNP GNP ANP BNP BԠ HϠNP DNҠNP DPBUƠNP DD.SNP AA0ADVҠD BñB0àADSAUSD AƬAƠGHԠUSY AƬAҠDAAD MPDD.S ñà0SԠANSMԠAGMD AA SANSYNN-SYNAG DAAA DAAMMMUM DAA DAAUS SSSS0ASԠDSU? MPNN. ñà0àSԠVŠAGMD Ơ0DSABŠNUPԠSYSM BòB0àADSAUS BҬB SBPNNPSS? MPN3YS. DASYNHSYNHAA AA0UPU B3B0àADSAUS SƠ0NABŠNUPԠSYSM BҬB SBPNNPSS? MPNYS MPN NSBNSYNSԠN-SYNAG A SñSà0SԠANSMԠNUPԠMD MPD.66ɠUN B3Ԡ3 ƠNP NנԠ00 B0Ԡ0 NSYNNP NDNƠNP NBSSSԠSNDPNAG N3DBNDNƠHSNDPNAG DAB0HPNNŠSAUSB SƠ0NABŠNUPԠSYSM SZBS? MPSA0YS. SANDNƠN.SԠSNDPNAG NSANSYN͗SԠN-SYNAG MPN SKANASSSԠSAUSϠANSMSSNK SMŠDABSԠSAUSϠMMUNAN MPSA0 AԠSBPAҠPAYҠҠMPPҠPY? DADNҠN.HBUҠNGHUN SZASSPYϠASԠHAA? MPSKYS. HAҠDADPBUƬɠHUNԠD DBHϠHH-ϠAG SBSSϠHA? MPϠYS. AƬAƠAŠHɠHAƠϠ MPM ϠSZDPBUƠNMNԠBUҠADDSS MANDB3SAŠBԠHAA BҠSԠN SBHϠHϠAG SZDNҠASԠHAA? MPN3N. DBNDNƠYS.HNϠDNŠAG SZBSSAGS? Ҡ.000N.ADDDNŠBԠϠHAA MPN3 NSANS .000Ԡ000 SYNԠNP נԠ00 DNP NDNP BԠ ADSBPAҠPAYҠҠMPPҠPY? ANDB3SAŠϠBԠHAA DBHϠHH-ϠAG SBSSϠHA? MPSϠYS. AƬAƠAŠBSϠHɠHA SADPBUƬɠANDS MPSM SϠDBDPBUƬɠHUNԠHɠHA ҠBMGŠNϠHA SADPBUƬɠANDS. SZDPBUƠNMNԠBUҠADDSS SMDBHϠSԠN BҠH SBHϠAG ADDANSYNHDAGAN AƬA̠DNŠB SZDNҠBUҠU? SSAN.DNŠBԠS? MP+3YS.YS. DANנN.HN MPN3HAA SSADNŠBԠS? ANASSYS.SԠSAUSBSϠK DABSԠSAUSϠN-DNŠDD SA0SAAGSAVŠSAUSBS DBDNҠ~HUN DAUNԠHGNA̠UN ŬSSASSDS? ASŬSAYS.DUBŠANDSKP MANAMPMNԠHAAҠUN ADABANUMBҠƠHAS.ANSMD DBUNԠDS SSBUSD? MP+N. SAASYS.NVԠHAAҠUNԠ NADS.ҠDDHAS.ADD ҠS.0SԠBNAYAG SAGɠSŠNUMBҠASANSMSSNG BMADDSS ADBGԠSAUSD DABɠUPDA AND.3 ҠAGSAUS SABɠD A SADBSY SANDN SA SAP SA SA SASYN DAñ SASò MPN .3Ԡ300 BDSBPAҠPAYҠҠMPPҠPY? ANDB3SAŠϠBS SADPBUƬɠSŠDNBU SZDPBUƠNMNԠBUҠADDSS SZDN MPAD PAҠNP SBDD.SADVҠANDSAUS SSBPAY? MPPA5YS. SANSYNN.SAVŠHAA BAҠPAY SBPԠҠUN PAננPY? MPPA6YS. SBԠAҠנUN AƬAƠDD SABԠS? MPPAҷYS. SBԠAҠDDUN AƬA DBƠHADAG SZBAGS? MPPA3YS.(AD PANנNנPY? MPPAҴYS. SZASSZϠPY?(PNN? MPNYS PAұDBPYHMPPҠPYUN SZBSNDMPPҠPY? MPSMŠYS. SZPY*($NMNԠMPPҠPYUN PAҲDAנHנHAA MPN3 PA3PANנNנPY? MPPAұYS. PAҴBAҠMPP SBPYPYUN MPPAҬɠUN. NSANS PYNP ԠNP PԠNP ԠNP MNԠ6 PA5DBPԠHPAYҠUN PBBGHԠNSUVŠS? MPSPŠYS. SZPԠNMNԠPAYҠUN MPPAҲ PA6DBPԠHPAYҠUN SZBPVUSPAY? MPSPŠYS. DBԠHנUN PBBGHԠNSUVŠS? MPSPŠYS. SZԠNMNԠנUNԠ6 DADHASԠDUPU MPN3 PAҷDBPԠHPAYҠUN ADBMNGA SSBSSHAN? MPSPŠYS. DBԠHDDUN PBBGHԠNSUV? MPSPŠYS. SZԠNMNԠDDUN DANDHASԠNN-נDUPU MPN3 B0Ԡ0 SPŠDAB0SԠSAUSBS MPSA0PAY AU0 BU ND 6* * 6 29005-80001 1636 S 0122 12665 DIAGNOSTIC              H0101 ASMB,A,B,L,C HED 12665 DIAGNOSTIC PROGRAM -- BASIC TESTS ORG 2 * * 12665 DIAGNOSTIC PROGRAM * * SOURCE TAPES 29005-80001 (1 OF 2) DATE CODE 1636 * AND 29005-80002 (2 OF 2) DATE CODE 1636 * * STARTING ADDRESS 2 * * RESTARTING ADDRESS 100B * * REQUIRES TAPE READER ONLY, THE SWITCH REGISTERS ARE * USED FOR ENTERING THE NECESSARY INFORMATION REQUIRED * BY THE PROGRAM. THE FOLLGWING TABLE SHOWS THE PROGRAM * WORD ORGANIZATION. * * * ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ * BIT^15^14^13^12^11^10^ 9^ 8^ 7^ 6^ 5^ 4^ 3^ 2^ 1^ 0^ * ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ * ^ ^ ^ ^ ^ ^ ^ * ^ ^ ^ ^ ^ ^ ^ * ^ ^ ^ ^ ^ * / ^ ^ / / * DMA INDI- / / / / * CATOR / WIRED BIT / SELECT CODE * 1 - YES / LENGTH COMPUTER FROM 10 TO 77 * 0 - NO / 000- 1US 000- ILL. OCTAL * / 001- 2US 011-2114/15 BELOW 10B ILL. * / 010- 4US 001/010 ILL. HALT * 2570 IN- 011- 8US -2100/16 AT 2 * DICATOR 100-16US 100 - 21MX * 1 - YES 101-32US 101-21MX E-SERIES * 0 - NO 110- ILL. ILL. HALT * 111- ILL. AT 1 * ILL. HALT * AT 3 * * IF HALT HAPPENS AT 1, 2, 3, CORRECT THE SWITCH REGISTERS, * THEN "RUN" * IF HALT AT ANY OTHER LOCATION, LOOK THE ERROR MESSAGE TABLE * FOR DESCRIPTION OF ERROR, THE OPERATOR WILL THEN HAVE ONE * OPTION TO CHOOSE, * WITH BIT 15 1 -- SKIP THE SCOPE LOOP AND CONTINUE THE NEXT * TEST AFTER "RUN" * 0 -- GO INTO SCOPE SERVICE LOOP AFTER "RUN" * * AT THE COMPLETION OF DIAGNOSIS, THE COMPUTER WILL HALTax THE 77B. * TO COMPLETE THE PARITY CHECK IT IS REQUIRED FOR THE OPERATOR * TO CONNECT TEST POINT TP18 TO GROUND, THEN "RUN", THE * COMPUTER WILL HALT AT 76B IF THE PARITY LOGIC IS CORRECT, AND * HALT AT 54B INDICATES INCORRECT PARITY LOGIC. * * FOR COMPUTER TO COMPUTER SYSTEM CHECK, IT REQUIRES THAT THE * DIAGNOSTIC PROGRAM BE LOADED AND EXECUTED ONCE IN EACH COMPUTER * THEN TIE THESE TWO COMPUTERS TOGETHER THROUGH THE COMMUNICATION * CABLE. TO START THE TEST, SIMPLY LOAD * * ADDRESS 4000B INTO THE ORIGINATING COMPUTER * * ADDRESS 5000B INTO THE RESPONDING COMPUTER * * THEN "RUN" FOR BOTH COMPUTERS. * * HALT AT 70B WILL HAPPEN WHENEVER THERE IS ANY ERROR SPOTTED * IN THE TRANSMISSION. TO CONTINUE THE TEST SIMPLY "RUN" * * RETEST AFTER HALT AT 77B REQUIRES "RUN" ONLY * * ABBREVIATIONS US -- MICROSECOND * MS -- MILLISECOND * JMP 110B,I ORG 100B RESTART ADDRESS JMP 101B,I ORG 101B RESTART BASE PAGE LINKAGE DEF ITEST ORG 110B BASE PAGE LINKAGE DEF START ORG 2000B START LIA 1 READ CONTROL WORD FROM SW REGISTERS STA DIAGW SAVE DIAGNOSTIC CONTROL WORD ALF ROTATE FOUR PLACES AND M3 MASK THE LAST TWO BITS STA TEMP0 SAVE AND M1 MASK BIT 0 STA A2570 SET 2570 INDICATOR LDA TEMP0 FETCH RAR ROTATE A RIGHT ONE PLACE AND M1 MASK BIT 0 STA ADMA SAVE IN DMA INDICATOR LDA DIAGW FETCH CONTROL WORD ALF,ALF RAR AND M7 MASK BIT LENGTH INFORMATION STA BLNG LDA DIAGW FETCH CONTROL WORD ALF,ALF RAL,RAL AND M7 MASK COMPUTER TYPE INFORMATION SZA,RSS JMP *+2 JMP *+3 HLT1 HLT 1 ERROR! CHECK COMPUTER TYPE BITS 6 TO 8 JMP START RECONFIGURE STA CTYPE SAVE LDB M67 PREPARE LDA HIS TRAPS STA *+2 FOR LDA HI ILLEGAL STA 10B INTERRUPT ISZ *-1 FROM INA ANY INB,SZB DEVICE JMP *-4 LDA DIAGW FETCH CONTROL WORD AND M77 MASK SELECT CODE STA ADDR SAVE ADDRESS AND M70 MASK BITS 3,4,5 SZA,RSS CHECK FOR ACCEPTABLE CODE JMP *+2 JMP *+3 HLT2 HLT 2 ERROR! ILLEGAL SELECT CODE JMP START RECONFIGURE JSB ADIN CONFIGURE ADDRESS INTO INSTRUCTIONS JSB WDTMM CALCULATE THE TIME MULTIPLIER * * INITIAL TEST --- CHECK THE TRANSMITTING/RECEIVING * MODE F/F, THE FLAG F/F, THE FLAG * BUFFER F/F, THE CONTROL F/F, THE * INTERRUPT CIRCUITRY, AND ALL THE * ASSOCIATED GATES. * ITEST NOP CLC 0,C TURN-OFF INTERRUPT SYSTEM CLC1 CLC 0 SET CARD IN TRANSMITTING MODE LDB CNT3 WAIT INB FOR SZB AT LEAST JMP *-2 10 US SFS1 SFS 0 TEST FLAG SET JMP HLT10 JMP *+3 HLT10 HLT 10B ERROR! FLAG IS NOT SET JSB LOOP1 SFC1 SFC 0 TEST FLAG CLEAR JMP *+3 HLT11 HLT 11B ERROR! FLAG IS CLEARED JSB LOOP1 OTA1 OTA 0 CLEAR THE FLAG SFS2 SFS 0 TEST FLAG JMP *+3 HLT12 HLT 12B ERROR! FLAG IS SET JSB LOOP1 GO TO SERVICE LOOP SFC2 SFC 0 JMP HLT13 JMP *+3 HLT13 HLT 13B ERROR! FLAG IS NOT CLEARED JSB LOOP1 GO TO SERVICE LOOP LDB CNT1 FETCH COUNTS INB WAIT SZB ABOUT JMP *-2 1 MS * * 10 US ONE - SHOT TEST * CLCC1 CLC 0,C SET CARD IN RECEIVING MODE LIA1 LIA 0 x READ A DATA WORD, CLEAR FLAG CLC2 CLC 0 SET CARD IN TRANSMITTING MODE NOP WAIT SFS3 SFS 0 TEST FLAG SET JMP *+3 OK! HLT14 HLT 14B ERROR! FLAG IS SET TOO SOON JSB LOOP1 GO TO SERVICE LOOP LDB CNT2 WAIT INB AT LEAST SZB 10 JMP *-2 US SFS4 SFS 0 TEST FLAG JMP HLT15 JMP *+3 HLT15 HLT 15B ERROR! FLAG IS NOT SET YET JSB LOOP1 GO TO SERVICE LOOP * * INTERRUPT LOGIC TEST * CLC 0,C TURN-OFF INTERRUPT SYSTEM CLCC2 CLC 0,C SET CARD IN RECEIVING MODE LIA2 LIA 0 CLEAR FLAG STCC1 STC 0,C SET CONTROL SFC3 SFC 0 TEST FLAG CLEAR JMP HLT16 JMP *+3 HLT16 HLT 16B ERROR! FLAG IS NOT CLEARED JSB LOOP1 GO TO SERVICE LOOP LDA ERR SET ERROR IN STA ADDR,I TRAP CELL STF 0 TURN-ON INTERRUPT SYSTEM NOP WAIT NOP LDA OK SET OK IN STA ADDR,I TRAP CELL STC1 STC 0 SET CONTROL LDB CNT3 WAIT INB FOR SZB INTERRUPT JMP *-2 NOP HLT0 HLT 0 ERROR! WRONG INTERRUPT JSB LOOP1 GO TO SERVICE LOOP OKXX LDA HLT0 RESTORE IOR ADDR TRAP STA ADDR,I CELL CLF 0 TURN-OFF INTERRUPT SYSTEM * * TRANSMITTER/RECEIVER TEST * CLCC3 CLC 0,C SET CARD IN RECEIVING MODE LIA3 LIA 0 CLEAR FLAG SFC4 SFC 0 TEST FLAG CLEAR JMP HLT17 JMP *+3 HLT17 HLT 17B ERROR! FLAG IS NOT CLEARED JMP LOOP2 GO TO SERVICE LOOP LIAC1 LIA 0,C READ STATUS WORD LIAC2 LIA 0,C READ STATUS WORD * * AFTER READ DATA WORD AND STATUS WORD THE RECEIVER * ENABLED , MISSED WORD, RECEIVER IN PROCESS AND PARITY * FLIP-FLOPS SHOULD ALL BE CLEARED * SLA 2CHECK JMP HLT20 RECEIVER ENABLE JMP *+3 FLIP FLOP HLT20 HLT 20B ERROR! RECEIVER IS DISABLED JSB LOOP2 GO TO SERVICE LOOP SSA CHECK JMP HLT21 PARITY JMP *+3 F/F HLT21 HLT 21B ERROR! PARITY F/F IS SET JSB LOOP2 GO TO SERVICE LOOP RAR,RAR SSA CHECK JMP HLT22 MISSED WORD JMP *+3 F/F HLT22 HLT 22B ERROR! M.W. F/F IS SET JSB LOOP3 GO TO SERVICE LOOP SLA CHECK JMP HLT23 RECEIVER IN PROCESS JMP *+3 F/F HLT23 HLT 23B ERROR! R.I.P. F/F IS SET JSB LOOP2 GO TO SERVICE LOOP * * * TRANSMIT A WORD TO CHECK STATUS BITS, ONLY THE REC. * IN PROCESS F/F SHOULD CHANGE STATE * OTA2 OTA 0 TRANSMIT A WORD ISZ .5WTM WAIT FOR ABOUT JMP *-1 HALF A WORD TIME LIAC3 LIA 0,C READ STATUS SLA CHECK JMP HLT24 REC. JMP *+3 ENA. F/F HLT24 HLT 24B ERROR! RECEIVER IS DISABLED TOO JSB LOOP2 SOON; BIT TIME MAY BE WRONG RAR SLA CHECK JMP HLT25 M.W. F/F JMP *+3 HLT25 HLT 25B ERROR! M.W. F/F SHOULD NOT BE SET JSB LOOP3 GO TO SERVICE LOOP RAR SLA CHECK JMP *+3 R.I.P. F/F HLT26 HLT 26B ERROR! R.I.P. F/F IS NOT SET JSB LOOP2 EITHER F/F OR CLOCK IS BAD ISZ WTM WAIT FOR JMP *-1 ONE COMPLETE WORD TIME SFS5 SFS 0 TEST JMP HLT27 FLAG JMP *+3 SET HLT27 HLT 27B ERROR! FLAG DID NOT SET JSB LOOP2 GO TO SERVICE LOOP * LDA CNT RESTORE STA WTM TIMING LDA .5CNT MULTIPLIERS STA .5WTM * * READ STATUS BEFORE READ DATA, SHOULD FIND THAT * RECEIVER IS DISABLED * LIIAC4 LIA 0,C READ STATUS SLA TEST JMP *+3 R. ENA. F/F HLT30 HLT 30B ERROR! RECEIVER IS NOT DISABLED JSB LOOP2 GO TO SERVICE LOOP * * TRANSMIT ANOTHER WORD WOULD CAUSE M.W. F/F TO BE SET * OTA3 OTA 0 TRANSMIT ANOTHER WORD LDB CNT1 FETCH COUNTS FOR DELAY INB WAIT SZB ABOUT JMP *-2 1 MS LIAC5 LIA 0,C READ STATUS WORD AGAIN SLA CHECK JMP *+3 R.ENA. F/F HLT31 HLT 31B ERROR! RECEIVER IS NOT DISABLED JSB LOOP3 GO TO SERVICE LOOP RAR SLA CHECK M.W. F/F JMP *+3 OK! HLT32 HLT 32B ERROR! M.W. F/F IS NOT SET JSB LOOP3 GO TO SERVICE LOOP LIAC6 LIA 0,C READ STATUS AGAIN * * SHOULD CLEAR M.W. F/F,R.D. F/F REMAIN SET AND FLAG SET * SLA CHECK JMP *+3 R. ENA. F/F HLT33 HLT 33B ERROR! RECEIVER IS NOT DISABLED JSB LOOP2 GO TO SERVICE LOOP RAR SLA CHECK M.W. F/F AGAIN JMP HLT34 JMP *+3 OK! HLT34 HLT 34B ERROR! M.W. F/F IS NOT CLEARED JSB LOOP3 GO TO SERVICE LOOP SFS6 SFS 0 TEST FLAG JMP HLT35 JMP *+3 OK! HLT35 HLT 35B ERROR! FLAG DID NOT STAY SET JSB LOOP2 GO TO SERVICE LOOP * * READ DATA WORD SHOULD CLEAR FLAG , THEN READ STATUS * SHOULD CLEAR ALL FOUR STATUS BITS * LIA4 LIA 0 READ DATA WORD SFC5 SFC 0 TEST FLAG CLEAR JMP HLT36 JMP *+3 OK! HLT36 HLT 36B ERROR! FLAG DID NOT CLEAR JSB LOOP2 GO TO SERVICE LOOP LIAC7 LIA 0,C READ STATUS WORD SSA CHECK PARITY F/F JMP HLT37 JMP *+3 OK! HLT37 HLT 37B ERROR! PARITY F/F IS SET JSB LOOP2 GO TO SERVICE LOOP SLA CHECK R. ENA. F/F JMP HLT40 JMP *+3 OK! HLT40 HLT 40B 1 ERROR! RECEIVER IS NOT ENABLED JSB LOOP2 GO TO SERVICE LOOP RAR,RAR SSA JMP HLT41 JMP *+3 OK! HLT41 HLT 41B ERROR! M.W. F/F IS NOT CLEARED JSB LOOP3 GO TO SERVICE LOOP SLA CHECK I.P. F/F JMP HLT42 JMP *+3 HLT42 HLT 42B ERROR! I.P. F/F IS SET JSB LOOP2 * * THE FOLLOWING SUBROUTINE IS DESIGNED TO TEST * BLOCK TRANSMITTING AND RECEIVING WITH 1'S AND * 0'S PROPAGATING THROUGH THE TRANSMISSION WORDS * LDB CNT4 STB CNT5 SET COUNTER CLC3 CLC 0 SET CARD IN TRANSMIT MODE LDA ADATA STA IDATA SET START ADDRESS OF DATA BLOCK PLOOP NOP LDA IDATA,I LOAD DATA OTA4 OTA 0 TRANSMIT DATA LDB CNT1 INB WAIT SZB ABOUT JMP *-2 1 MS LIA5 LIA 0 READ DATA WORD STA TEMP0 LIBC1 LIB 0,C READ STATUS WORD SSB CHECK PARITY BIT JMP HLT43 JMP *+3 OK! HLT43 HLT 43B ERROR! PARITY F/F JSB LOOP2 GO TO SERVICE LOOP LDB A2570 READ 2570 INDICATOR SLB JMP P1 YES, CARD IS WIRED FOR 2570 CMA,INA ADA IDATA,I ADD ORIGINAL DATA TO THE COMPLE- * MENT OF THE RECEIVED DATA JMP P2 P1 NOP LDA IDATA,I LOAD ORIGINAL DATA AND M3777 MASK OFF THE UNWANTED BITS ALF SHIFT RAL 5 BITS LEFT STA TEMP1 SAVE LDA TEMP0 LOAD THE RECEIVED DATA CMA,INA CHANGE TO NEGATIVE NUMBER ADA TEMP1 ADD TO THE TRANSMITTED DATA P2 SZA TEST RESULT JMP *+2 JMP *+3 HLT44 HLT 44B ERROR! SUM IS NOT ZERO JSB LOOP2 LDA IDATA LOAD THE ADDRESS OF DATA INA INCREMENT ONE STA IDATA RESTORE THE CURRENT ADDRESS ISZ CNT5 INCREMENT ADDRESS COUNTER, TEST JMP PLOOP GO BACK TO TRANSMIT NEXT WORD LDA ADMA FETCH DMA INDICATOR SLA CHECK TO SEE IF DMAT IS NEEDED JSB DMAT GO ON TO TEST DMA IN AND OUT HLT 77B TEST COMPLETION JSB PARIT CHECK PARITY LOGIC JMP ITEST+1 HED 12665 DIAGNOSTIC PROGRAM -- ROUTINES AND SERVICE LOOPS * PREPARE WORD TIME MULTIPLIER * WDTMM NOP LDB CTYPE CPB A3 JMP P1415 CPB M1 JMP P0016 CPB A2 JMP P0016 CPB A4 JMP PMX CPB A5 JMP PXE JMP HLT1 UNRECOGNIZABLE COMPUTER TYPE P0016 LDA A2570 CHECK 2570 INDICATOR LDB A4 FETCH A4 SLA LDB A3 FETCH A3 JMP P3 P1415 LDA A2570 FETCH 2570 INDICATOR LDB A3 FETCH A3 SLA LDB A2 FETCH A2 JMP P3 PXE LDA A2570 FETCH 2570 INDICATOR LDB A9 SLA LDB A7 LDA DM4 STA CNT2 LDA DM5 STA CNT3 LDA DM300 STA CNT1 JMP P4 PMX LDA A2570 FETCH 2570 INDICATOR LDB A5 NO, FETCH A5 SLA LDB A4 FETCH A4 P3 LDA DM2 STA CNT2 LDA DM3 STA CNT3 LDA DM160 STA CNT1 P4 STB MPLR SET BASIC MULTIPLIER LDA BLNG LOAD BIT LENGTH INFORMATION ADA M6 SSA,RSS CHECK FOR ILLEGAL BIT LENGTH JMP HLT3 YES LDA BLNG NO, LOAD BIT LENGTH INFORMATION CMA,RSS BLS CHECK BITS AND DOUBLE COUNTER INA,SZA JMP *-2 P7 CMB,INB CHANGE TO NEGATIVE NUMBER STB CNT FINAL WORD TIME MULTIPLIER STB WTM BRS STB .5CNT HALF WORD TIME MULTIPLIER STB .5WTM JMP *+3 HLT3 HLT 3 JMP START RECONFIGURE JMP WDTMM,I RETURN TO MAIN PROGRAM * * DMA TEST ROUTINE * DMAT NOP DMA OUTPUT LDA ADDR PREPARE OT Y640A 6 CLC 2 DMA LDA CW2 OTA 2 TO STC 2 LDA CW3 OUTPUT A WORD OTA 2 CLCC4 CLC 0,C SET CARD IN RECEIVING MODE LIA6 LIA 0 CLEAR THE FLAG OF 12665 STC 6B,C ACTIVATE DMA OTA5 OTA 0 SET THE FLAG, CARD IS ACTIVATED NOP WAIT NOP FOR FLAG TO BE CLEARED SFS7 SFS 0 TEST FLAG JMP *+3 HLT45 HLT 45B ERROR! FLAG SHOULD BE CLEARED JSB LOOP5 GO TO DMA OUTPUT SERVICE LOOP LDB CNT1 BLS INB WAIT SZB ABOUT JMP *-2 2 MS CLC 6,C SFC6 SFC 0 TEST FLAG JMP *+3 HLT46 HLT 46B ERROR! FLAG IS NOT SET JSB LOOP5 GO TO SERVICE LOOP LIAC8 LIA 0,C READ STATUS SLA TEST R. ENA. F/F JMP *+3 HLT47 HLT 47B ERROR! R. ENA.F/F IS NOT SET JSB LOOP5 AND M1006 SZA TEST FOR ZERO JMP *+2 JMP *+3 HLT50 HLT 50B ERROR! JSB LOOP5 LIA7 LIA 0 READ DATA STA RWDA SAVE CMA,INA CONVERT TO NEGATIVE NUMBER ADA WDA ADD TO THE WORD TRANSMITTED BY DMA SZA CHECK JMP *+2 NO JMP *+3 OK HLT51 HLT 51B ERROR! WORD RECEIVED IS ERRONEOUS JSB LOOP5 GO TO DMA OUTPUT SERVICE LOOP * * END OF TAPE 29005-80001 * CONTINUATION OF PROGRAM ON TAPE 29005-80002 * 6 + 9 29005-80002 1636 S 0122 12665 DIAGNOSTIC              H0101 * * 12665 DIAGNOSTIC PROGRAM * SOURCE TAPE 29005-80002 DATE CODE 1636 * CONTINUATION OF TAPE 29005-80001 * DMA INPUT * CLCC5 CLC 0,C SET CARD IN RECEIVING MODE LIA8 LIA 0 READ DATA LIAC9 LIA 0,C READ STATUS LDA ADDR PREPARE OTA 6 CLC 2 DMA LDA CW5 OTA 2 TO STC 2 LDA CW6 INPUT A WORD OTA 2 STC 6,C ACTIVATE DMA LDA A550 OTA6 OTA 0 OUTPUT THE WORD LDB CNT1 INB WAIT SZB ABOUT JMP *-2 1 MS OTA7 OTA 0 OUTPUT THE SAME WORD AGAIN LDB CNT1 INB WAIT SZB ABOUT JMP *-2 1 MS CLC 6,C TURN OFF DMA LDA RA550 FETCH THE RECEIVED DATA AND M1007 SZA CHECK FOR ZERO JMP *+2 JMP *+3 HLT52 HLT 52B ERROR! JSB LOOP6 GO TO DMA INPUTTING SERVICE LOOP LDA RA550 CHECK CMA,INA THE VALUE ADA A550 OF SZA THE JMP *+2 RECEIVED JMP *+3 WORD HLT53 HLT 53B ERROR! RECEIVED A WRONG WORD JSB LOOP6 GO TO DMA INPUT SERVICE LOOP JMP DMAT,I RETURN TO MAIN PROGRAM * * TRANSMIT MODE SCOPE SERVICE LOOP FOR FLAG AND * INTERRUPT LOGIC * LOOP1 NOP LIA 1 FETCH A WORD FROM SW. REG. SSA WANT TO SKIP? JMP ENDL1 YES! CLC 0,C TURN OFF INTERRUPT SYSTEM CLCC6 CLC 0,C SET CARD TO RECEIVING MODE LIA9 LIA 0 CLEAR DATA WORD LAC10 LIA 0,C CLEAR STATUS WORD CLA STA ADDR,I NOP IN TRAD CELL CLC 0 GENERATE CRS FOR SYNC STCC2 STC 0,C TOGGLE IRQ CONTROL F/F, CLCC7 CLC 0,C NO CHANGE TO FLAG MODE F/F STC2 STC 0 SET CARD TO TRANSMIT MODE SFC7 SFC 0 NOP ISZ [WTM WAIT FOR JMP *-1 FLAG TO BE SET LDB CNT STB WTM RESTORE WORD TIME COUNTS STF 0 TURN ON INTERRUPT SYSTEM NOP IAK SHOULD BE GENERATED, * FLAG BUFFER F/F CLEARED CLC4 CLC 0 SET CARD TO TRANSMIT MODE SFS8 SFS 0 NOP LDB CNT3 INB WAIT SZB FOR FLAG JMP *-2 FLAG BUFFER F/F SHOULD BE SET OTA8 OTA 0 SHOULD CLEAR FLAG AND FLAG BUFFER F/F CLF 0 TURN OFF INTERRUPT SYSTEM ISZ WTM WAIT FOR JMP *-1 ONE WORD TIME LDB CNT STB WTM RESTORE WORD TIME COUNT STCC3 STC 0,C SET CARD TO RECEIVE MODE LAC11 LIA 0,C LIA10 LIA 0 CLEAR DATA WORD JMP LOOP1+10 ENDL1 JMP LOOP1,I RETURN TO MAIN PROGRAM * * RECEIVE MODE SCOPE SERVICE LOOP * LOOP2 NOP LIA 1 FETCH A WORD FROM SW. REG. SSA WANT TO SKIP? JMP ENDL2 YES CLC 0,C TURN OFF INTERRUPT SYSTEM CLCC8 CLC 0,C SET CARD TO RECEIVE MODE LIA11 LIA 0 LAC12 LIA 0,C CLEAR STATUS WORD CLC 0 GENERATE CRS FOR SCOPE SYNC CLCC9 CLC 0,C SET CARD TO RECEIVE MODE ,FLAG STCC4 STC 0,C SET TO RECEIVE MODE ,INTERRUPT CLA OTA9 OTA 0 OUTPUT A WORD ISZ WTM JMP *-1 WAIT LDB CNT STB WTM RESTORE COUNTS LIBC2 LIB 0,C READ STATUS WORD INTO B LIB1 LIB 0 READ DATA WORD INTO B INA OTA10 OTA 0 OUTPUT A WORD AGAIN ISZ WTM WAIT JMP *-1 LDB CNT STB WTM RESTORE COUNTS LAC13 LIA 0,C READ STATUS WORD LIA12 LIA 0 CLEAR DATA WORD JMP LOOP2+8 ENDL2 JMP LOOP2,I RETURN TO MAIN PROGRAM * * MISSED WORD SCOPE SERVICE LOOP * LOOP3 NOP LIA 1 FETCH A WORD FROM SW. REG. SSA WANT TO SKIP SCOPE LOOP? JMP ENDL03 YES CLC 0,C TURN-OFF INTERRUPT SYSTEM CCC10 CLC 0,C SET CARD TO RECEIVE MODE LIA13 LIA 0 READ DATA WORD LAC14 LIA 0,C READ STATUS WORD CLC 0 GENERATE CRS TO SYNC OTA11 OTA 0 OUTPUT A WORD ISZ WTM WAIT JMP *-1 LDB CNT STB WTM RESTORE COUNTS LAC15 LIA 0,C CLEAR STATUS WORD CLA OTA12 OTA 0 OUTPUT THE COMPLEMENTARY WORD ISZ WTM WAIT JMP *-1 LDB CNT STB WTM RESTORE COUNTS LAC16 LIA 0,C READ STATUS WORD LIA14 LIA 0 READ DATA WORD JMP LOOP3+8 ENDL3 JMP LOOP3,I RETURN TO MAIN PROGRAM * * PARITY ERROR SCOPE SERVICE LOOP * LOOP4 NOP LIA 1 FETCH A WORD FROM SW. REG. SSA WANT TO SKIP THE SERVICE LOOP? JMP ENDL4 YES! CLC 0,C TURN OFF INTERRUPT SYSTEM LIA15 LIA 0 CLEAR DATA WORD LAC17 LIA 0,C CLC 0 GENERATE CRS FOR SYNC CLA CLEAR A OTA13 OTA 0 OUTPUT A WORD SFS9 SFS 0 TEST FLAG JMP *-1 WAIT FOR FLAG TO BE CLEAR LIB2 LIB 0 READ DATA LIBC3 LIB 0,C READ STATUS INA INCREMENT A OTA14 OTA 0 OUTPUT A AGAIN SFS10 SFS 0 TEST FLAG JMP *-1 WAIT FOR FLAG TO BE CLEARED LIB3 LIB 0 CLEAR DATA WORD LIBC4 LIB 0,C READ STATUS WORD JMP LOOP4+7 ENDL4 JMP LOOP4,I RETURN TO MAIN PROGRAM * * DMA OUTPUT SCOPE SERVICE LOOP * LOOP5 NOP LIA 1 FETCH A WORD FROM SW. REG. SSA WANT TO SKIP SERVICE LOOP? JMP ENDL5 YES! CLC 0,C TURN OFF INTERRUPT SYSTEM CCC11 CLC 0,C SET CARD TO RECEIVE MODE LIA16 LIA 0 LAC18 LIA 0,C CLEAR STATUS WORD LDA CCW1 PREPARE OTA 6 CLC 2 DMA LDA CW8 OTA 2 TO OUTPUT STC 2 LDA CW9 TWO WORDS OTA 2 U STC 6,C ACTIVATE DMA CLC5 CLC 0 SET CARD TO TRANSMIT MODE LDA CNT WAIT ALS ADA CNT FOR STA WTM ISZ WTM THREE JMP *-1 LDA CNT WORD TIMES STA WTM CLC 6 TURN OFF DMA JMP LOOP5+4 LOOP BACK ENDL5 JMP LOOP5,I * * DMA INPUT SCOPE SERVICE LOOP * LOOP6 NOP LIA 1 FETCH A WORD FROM SW. REG. SSA WANT TO SKIP SERVICE LOOP? JMP ENDL6 YES! CLC 0,C TURN OFF INTERRUPT SYSTEM CCC12 CLC 0,C SET CARD IN RECEIVE MODE LIA17 LIA 0 CLEAR DATA WORD LAC19 LIA 0,C CLEAR STATUS WORD LDA ADDR PREPARE OTA 6 CLC 2 DMA TO LDA CW11 OTA 2 INPUT STC 2 LDA CW12 A WORD OTA 2 STC 6,C ACTIVATE DMA CLA OTA15 OTA 0 OUTPUT A WORD ISZ WTM WAIT ONE JMP *-1 WORD TIME LDB CNT STB WTM RESTORE WORD TIME COUNTS. CLC 6 TURN OFF DMA JMP LOOP6+4 LOOP BACK ENDL6 JMP LOOP6,I RETURN TO MAIN PROGRAM * * ADDRESS INCLISION ROUTINE FOR CONFIGURING ALL * INSTRUCTIONS AND DMA CONTROL WORDS REQUIRING * THE CARD ADDRESS. * ADIN NOP CLC 0,C * PUT CARD ADDRESS INTO SFS INSTRUCTION JSB INCLU SFS 0 STA SFS1 STA SFS2 STA SFS3 STA SFS4 STA SFS5 STA SFS6 STA SFS7 STA SFS8 STA SFS9 STA SFS10 STA SFSI1,I STA SFSI2,I STA SFS13 * PUT CARD ADDRESS INTO SFC INSTRUCTION JSB INCLU SFC 0 STA SFC1 STA SFC2 STA SFC3 STA SFC4 STA SFC5 STA SFC6 STA SFC7 * PUT CARD ADDRESS INTO CLC INSTRUCTION JSB INCLU CLC 0 STA CLC1 STA CLC2 STA CLC3 STA CLC4 STA CLC5 * ! PUT CARD ADDRESS INTO CLC CLEAR FLAG INSTRUCTION JSB INCLU CLC 0,C STA CLCC1 STA CLCC2 STA CLCC3 STA CLCC4 STA CLCC5 STA CLCC6 STA CLCC7 STA CLCC8 STA CLCC9 STA CCC10 STA CCC11 STA CCC12 STA CCCI1,I STA CCCI2,I STA CCC15 * PUT CARD ADDRESS INTO STC INSTRUCTION JSB INCLU STC 0 STA STC1 STA STC2 * PUT CARD ADDRESS INTO STC CLEAR FLAG INSTRUCTION JSB INCLU STC 0,C STA STCC1 STA STCC2 STA STCC3 STA STCC4 * PUT CARD ADDRESS INTO OTA INSTRUCTION JSB INCLU OTA 0 STA OTA1 STA OTA2 STA OTA3 STA OTA4 STA OTA5 STA OTA6 STA OTA7 STA OTA8 STA OTA9 STA OTA10 STA OTA11 STA OTA12 STA OTA13 STA OTA14 STA OTA15 STA OTAI1,I STA OTAI2,I STA OTA18 * PUT CARD ADDRESS INTO LIA INSTRUCTION JSB INCLU LIA 0 STA LIA1 STA LIA2 STA LIA3 STA LIA4 STA LIA5 STA LIA6 STA LIA7 STA LIA8 STA LIA9 STA LIA10 STA LIA11 STA LIA12 STA LIA13 STA LIA14 STA LIA15 STA LIA16 STA LIA17 STA LIAI1,I STA LIAI2,I STA LIAI3,I STA LIA21 * PUT CARD ADDRESS INTO LIA CLEAR FLAG INSTRUCTION JSB INCLU LIA 0,C STA LIAC1 STA LIAC2 STA LIAC3 STA LIAC4 STA LIAC5 STA LIAC6 STA LIAC7 STA LIAC8 STA LIAC9 STA LAC10 STA LAC11 STA LAC12 STA LAC13 STA LAC14 STA LAC15 STA LAC16 STA LAC17 STA LAC18 STA LAC19 STA LACI1,I STA LACI2,I STA LAC22 * PUT CARD ADDRESS INTO LIB INSTRUCTION JSB INCLU LIB 0 STA sLIB1 STA LIB2 STA LIB3 STA LIBI1,I STA LIB5 * PUT CARD ADDRESS INTO LIB , CLF INSTRUCTION JSB INCLU LIB 0,C STA LIBC1 STA LIBC2 STA LIBC3 STA LIBC4 STA LBCI1,I STA LIBC6 * PUT CARD ADDRESS INTO OCTAL NUMBER 20000 JSB INCLU OCT 20000 STA CCW1 CONFIGURED FOR LOOP5 JMP ADIN,I RETURN TO MAIN PROGRAM * * INCLUSION ROUTINE * INCLU NOP LDA INCLU,I IOR ADDR ISZ INCLU JMP INCLU,I * * PARITY TEST ROUTING * PARIT NOP CLC 0,C TURN OFF INTERRUPT SYSTEM CCC15 CLC 0,C SET CARD IN RECEIVE MODE LIA21 LIA 0 CLEAR DATA LAC22 LIA 0,C CLEAR STATUS CLA OTA18 OTA 0 OUTPUT 0 SFS13 SFS 0 WAIT FOR THE JMP *-1 WORD TRANS. TO COMPLETE LIB5 LIB 0 READ DATA INTO B REG. LIBC6 LIB 0,C READ STATUS INTO B REGISTER SSB TEST PARITY BIT TO BE SET JMP *+3 HLT54 HLT 54B ERROR! PARITY BIT IS NOT SET JSB LOOP4 GO TO SERVICE LOOP HLT 76B PARITY LOGIC WORKED FINE JMP PARIT,I RETURN TO MAIN PROGRAM HED 12665 DIAGNOSTIC PROGRAM -- COMPUTER TO COMPUTER TEST * THE FOLLOWING SUBROUTINE IS DESIGNED TO CHECK THE * CARD TIED TO ANOTHER COMPUTER THROUGH A CABLE. IT * REQUIRES DIAGNOSTIC PROGRAM TO BE LOADED AND THE BASIC * TESTS BE EXECUTED ONCE IN EACH COMPUTER. THEN LOAD * ADDRESS 4000B INTO THE ORIGINATING COMPUTER AND * ADDRESS 5000B INTO THE RESPONDING COMPUTER * * COMMANDING ROUTINE * ORG 4000B STARTING ADDRESS OF ORIGINATING COMPUTER COMMD NOP CLC 0,C CCC13 CLC 0,C SET CARD IN RECEIVE MODE LIA18 LIA 0 CLEAR DATA WORD LAC20 LIA 0,C CLEAR STATUS WORD CLA INA OTA16 OTA 0 OUTPUT THE WORD IN A REG. OTA 1 STA TEMP0 SAVE THE WORD SFS11 SFS 0 WAIT FOR THE C8OMMUNICATION WORD JMP *-1 TO BE RECEIVED LIB4 LIB 0 READ DATA WORD STB TEMP1 SAVE THE RECEIVED WORD CPB TEMP0 CHECK THE RECEIVED WORD JMP *+2 OK! HLT70 HLT 70B ERROR! RECEIVED A WRONG WORD LIBC5 LIB 0,C READ STATUS WORD LDB CNT6 SET SKIPPING COUNTS INB INA,SZA CHECK FOR A REG. TO BE ZERO JMP *+2 NO! A IS NOT ZERO JMP EOL YES! A IS ZERO SZB CHECK B REG. FOR ZERO JMP *-5 NO! DO NOT SEND THE NEXT WORD YET JMP OTA16 SEND THE NEXT WORD EOL NOP HLT 77B JMP COMMD+1 * * RESPONDING ROUTING * ORG 5000B STARTING ADDRESS OF THE RESPONDING COMPUTER RESPN NOP CLC 0,C CCC14 CLC 0,C SET CARD TO RECEIVE MODE LIA19 LIA 0 CLEAR DATA WORD LAC21 LIA 0,C CLEAR STATUS WORD SFS12 SFS 0 WAIT FOR COMMUNICATION WORD JMP *-1 TO BE RECEIVED LIA20 LIA 0 READ DATA WORD OTA17 OTA 0 RETRANSMIT THE RECEIVED WORD OTA 1 JMP SFS12 HED 12665 DIAGNOSTIC PROGRAM -- CONSTANTS ORG 300B A2 OCT 2 A3 OCT 3 A4 OCT 4 A5 OCT 5 A7 OCT 7 A9 OCT 11 A550 OCT 550 A2570 OCT 0 ADATA DEF DATA ADDR OCT 0 ADMA OCT 0 BLNG OCT 0 CNT OCT 0 .5CNT OCT 0 CNT1 NOP CNT2 NOP CNT3 NOP CNT4 OCT -21 CNT5 OCT 0 CNT6 OCT -1 DM2 DEC -2 DM3 DEC -3 DM4 DEC -4 DM5 DEC -5 DM160 DEC -160 DM300 DEC -300 CTYPE OCT 0 CCW1 OCT 0 CW2 OCT 112 CW3 OCT -1 CW5 OCT 100113 CW6 OCT -2 CW8 OCT 114 CW9 OCT -2 CW11 OCT 100116 CW12 OCT -2 DATA OCT 0,1,3,7,17,37,77,177,377,777,1777,3777 OCT 7777,17777,37777,77777,177777 DIAGW OCT 0 ERR JMP ERRX,I HI HLT 10B HIS STA 10B IDATA DEF DATA M1 OCT 1 M3 OCT 3 M6 DEC -6 M7 OCT 7 M67 OCT -67 M70 OCT 70 M77 OCT 77 M3777 OCT 3777 M1006 OCT 100006 M1007 OCT 100007 MP 0.*LR OCT 0 OK JMP OKX,I RWDA OCT 0 TEMP0 OCT 0 TEMP1 OCT 0 WTM OCT 0 .5WTM OCT 0 ORG 112B WDA OCT 155555 ORG 113B RA550 OCT 0 ORG 115B WDB OCT 0 WDC OCT 0 ORG 117B RAWD OCT 0 ORG 111B OK INTERRUPT LINKAGE OKX DEF OKXX ORG 120B ERROR INTERRUPT LINKAGE ERRX DEF HLT0 SFSI1 DEF SFS11 SFSI2 DEF SFS12 CCCI1 DEF CCC13 CCCI2 DEF CCC14 OTAI1 DEF OTA16 OTAI2 DEF OTA17 LIAI1 DEF LIA18 LIAI2 DEF LIA19 LIAI3 DEF LIA20 LACI1 DEF LAC20 LACI2 DEF LAC21 LIBI1 DEF LIB4 LBCI1 DEF LIBC5 END $END 0 , 9 29006-80001 A S 0122 12813 DIAGNOSTIC              H0101 ASMBAB̬ HD3ADAGNSàPGAM--PAN G 3ADAGNSàPGAM AUGUSԠ9 SANGADDSSҠNGUNGPGAM-- SANGADDSS--00B NGUNGHŠPGAM .SAԠAԠADDSS .NHŠSHGSҬSԠSHS0-5ϠHŠ665Aɯ ADDSSANDSHS6-ϠHŠSԠNUMBҠƠHŠ3A. 3.PSSUNANDHŠMPUҠ̠HAԠANDDSPAYAHAԠ0. .AҠHŠSHGS. UNNNGHŠPGAM .GUNDPNHŠ665AANDPSSUN.HŠMPUҠ̠HA ANDDSPAYAHAԠ. .UNGUNDPANDPSSUN.HŠMPUҠ̠HAԠAND DSPAYAHAԠ. 3.GUNDPANDPSSUN.HŠMPUҠ̠HAԠANDDSPAYA HAԠ3. .UNGUNDP 5.PSSUNANDHŠMPUҠ̠HAԠANDDSPAYAHAԠ0. N:HAԠ0SHŠSANSH ƠHŠDAGNSàS SHGSҠPGAMN̠ SHN:SPS-(UNNNGHŠPGAMAŠMD. SHN:DAGNSàUNSNNUUSYƠSHSN. SH0N:DAGNSàPSNAADSԠMHŠSA ƠHŠSԠϠHŠPNԠƠAU. ҠHAS ƠSAŠDDDAGNSàNMAN̠BŠNANDN ϠSUSSVŠHAS.HŠSԠHAԠUSHNHŠҠS DD.BS3-5ƠHŠHAԠAŠHŠMSԠSGNANԠDGԠAND BS0-AŠHŠNԠMSԠSGNANԠDGԠƠA3-DGԠ ANSMSSNNUMB.PUSHUNANDHŠSNDHAԠ̠U.BS 0-ƠHŠHAԠAŠHŠASԠSGNANԠDGԠƠHŠANSMSSN NUMBҠANDBS3-5AŠHŠA̠NUMBҠƠHŠҠYP. ҠNUMBS: .NϠPY .PAYҠNPY 3.NԠPYPY̠BŠNANDN"B"GS. .UNPDPY HD3ADAGNSàPGAM--MANSS PGAMNGUAN MPN G00B MPSA N̠AADSHGS ANDMSKSAŠBS0-5 SAADDҠANDSAVŠN665AADDSS. SBADNADDADDSSϠɯϠNSUNS AADSHGSҬ ANDMSKSAŠBS6-9 AҬAҠGHԠUSYHMAND SAADDҠSAVŠN3AADDSS. SBADNADDADDSSϠ50ANSUNS. DAADD ADA.NAS3A SZAADDSS? MP+N DAADDҠYSSUBAԠN ADA.NAMND50A MP+3ADDSS DAADDҠADDN ADA.PAϠND50AADDSS SAADDҠADDADDSS SBADN3YàNSUN SAԠHԠ0B à0 0à0 BB0 AñA0 AS SAMԠMԠUN AGԠBԲ AҬAҠMSHGS SASSSKPPAYSS? MP0N DAMԠADD ADA.P5ϠM SAMԠUN MP̴ PAYҠUԠS: 0DADAA DB SB NP MP0 נ-50ANMAZDS: HԠB ̱DA DB SB NP MP̱ HD3ADAGNSàPGAM--MANSS SYN-NנS: ̲SBSYN DDBԠS: HԠB 3DADAA DB SB NP MP3 HԠ3B 3ADA DBN SB NP MP3A SBŠUSԠS: ̴SBSYN SBDA SBDñ MP̴ UMPҠײNPSNBS:  5SBSYN DADAA SBN SBDñ MP5 "A"MMANDS: 6SBSYN DAAD DBNSN SB SBDñ MP6 ""MMANDS: ̷SBSYN DAD DBN SB SBDñ MP̷ HD3ADAGNSàPGAM--MANSS SBŠUSԠNABŠSԠ: ̸SBSYN SB SBDñ MP̸ SBY SBDò MP̸ DADAA SBN SBD3 MP̸ SBŠUSԠNABŠSԠ: 9SBSYN SB SBDñ MP9 SB SBDò MP9 SBY SBD3 MP9 SBDA SBDô MP9 DADAA SBN SBD5 MP9 DADAA SBN SBD6 MP9 HD3ADAGNSàPGAM--MANSS VDDPAYS: ̱0SBSYN DADAA3 DBN SB SBDñ MP̱0 DADAA DBN SB SBDò MP̱0 DADAA5 DBN SB SBD3 MP̱0 DAàS50 ANDMSKS5ADN PAMSKS6SԠ5? MP̱0AYS DADAA6N SBN SBDô MP̱0 MP̱ ̱0ADADAA6 DBN SB SBDô MP̱0 ɠANDϠMMANDSANDDAASԠ: ̱SBSYN SB SBDñ MP̱ SB SBDò MP̱ SB SBD3 MP̱ SBDAD SBDô MP̱ HD3ADAGNSàPGAM--MANSS ɠANDϠMMANDSANDDAASԠ: ̱SBSYN & SB SBDñ MP̱ SB SBDò MP̱ SB SBD3 MP̱ DADAA DBDAA SB SBDô MP̱ ɠANDϠMMANDSANDDAASԠ3: ̱3SBSYN SB SBDñ MP̱3 SB SBDò MP̱3 SB SBD3 MP̱3 DADAA DBDAA SB SBDô MP̱3 HD3ADAGNSàPGAM--MANSS KAND̠MMANDSANDDAAS: ̱SBSYN SB SBDñ MP̱ SBK SBDò MP̱ DA DBN SB SBD3 MP̱ DADN DBDN SB SBDô MP̱ DA DBN SB SBD5 MP̱ DAD SBN SBD6 MP̱ SBDA SBD÷ MP̱ KMMANDS: ̱5SBSYN SB SBDñ MP̱5 SBK SBDò MP̱5 SB SBD3 MP̱5 SBDAD SBDô MP̱5 SB SBD5 MP̱5 SBDAD SBD6 MP̱5 HD3ADAGNSàPGAM--MANSS NMMANDS: ̱6SBSYN SB SBDñ MP̱6 SBK SBDò MP̱6 SB SBD3 MP̱6 SBDAD SBDô MP̱6 DAN DBN SB SBD5 MP̱6 SB SBD6 MP̱6 SBDA SBD÷ MP̱6 BMMANDDAAS ̱SBSYN SB SBDñ MP̱ SB SBDò H)MP̱ SBB SBD3 MP̱ SBDAD SBDô MP̱ HD3ADAGNSàPGAM--MANSS BMMANDS: ̱SBSYN SBB SBDñ MP̱ DA DBN SB SBDò MP̱ DA DBN SB SBD3 MP̱ DA DBN SB SBDô MP̱ DA\ DBN SB SBD5 MP̱ DADAA SBN SBD6 MP̱ HD3ADAGNSàPGAM--MANSS נS: ̱9SBSYN SB SBDñ MP̱9 SB SBDò MP̱9 SB SBD3 MP̱9 SBDAD SBDô MP̱9 DA DBDAA SB SBD5 MP̱9 SBDA SBD6 MP̱9 DA DBN SB SBD÷ MP̱9 DMMANDS: ̲0SBSYN SB SBDñ MP̲0 DAD DBN SB SBDò MP̲0 SB SBD3 MP̲0 SB SBDô MP̲0 DADAA SBN SBD5 MP̲0 DASYN DBN SB SBD6 MP̲0 HD3ADAGNSàPGAM--MANSS PNDAGNSàDMNAN AGԠBԱ AҠMSHGS SASSAUMAàSA? MPSAԠN AYSGԠBԲ AҬAҠMSHGS SASKPPAYSS? MPSA+YS MPSAԠN HD3ADAGNSàPGAM--SԠUNS. DUPUԠANDPYҠSԠUNŬPYPD. ҠNP SAB SBB SBPUԠUPUԠD SZSSPYVD? MP+YSHKPAY SBNŠNϬSԠNϠPYҠB SBHAԠPN? MPҬɠYS SBPŠN.PAY? MP+3NϬHKҠԠPY SBHAԠYS.PN? MPҬɠYSUN DABàN SBҠԠPY? MP+3YSUN+ SBHAԠN.PN? MPҬɠYSUN SZMԠBUMPMԠUN SZ SZ MPҬ DUPUԠANDPYҠSԠUNŬNϠPYPD. NNP SAB SBPUԠUPUԠD SZPYVD? MP+N.GDUN+ SBŠYSSԠPYҠB SBHAԠPN? MPNɠYSUN SZM SZNNϬUN+ SZN MPN HD3ADAGNSàPGAM--SԠUNS DUPUԠUN. PUԠNP ŠAҠNϠPYAG DAMŠSԠN SAMҠPYM DABϠGԠD A0A0ANDUPUԠ S0Sà0PYVD? MPA0YS SZMҠN.MŠUP? MPS0N.KPANG ŠYSSԠNϠPYAG MPPUԬɠANDUN A0A0àGԠSAUS B0B0GԠD BƬBƠANDGH BƬBҠUSY MPPUԬ ҠHAԠUN. HAԠNP SBPPNADS? MPHAԬɠYS DAMAŠSA ANDMSKBҠBԬ AƠMPUԠ A̬A̠NB3Ҡ5 SAMPANDSAVŠ DAMAŠSA ANDMSKDMԠSD ҠMPANDM ҠH0SԠ SAH̱+ DAMAŠSA ANDMSKMDMԠMSD AҬAҠGH AҠUSY ҠH0ANDM SAH̱SNDҠHA H̱NPSԠҠHAԬMԠUNԠMSD NPNDҠHAԬMԠUNԠSD SBPPNADS? MPHAԬɠYS H̲SZHA MPHAԬ PNҠUN. PNP AGԠSHGS SAP? SSYS SZPN MPP HD3ADAGNSàPGAM--SԠUNS SԠPYҠPAYҠUN. PŠNP SSASSPAY MPPŬɠNϬUN DAMԠYSGԠMԠUN ҠBANDADD SAMAŠPAYҠB SZPŠANDUN+ MPPŬ SԠҠԠPYUN. ҠNP PBAGɠԠPY? MPҬɠYSUN DAMԠNϬGԠMԠUN ҠB3ADD SAMAŠPAYҠB SZҠANDUN+ MPҬ SԠҠNϠPYҠUN. NŠNP SAMP DAMԠADDNϠPY ҠB3ҠB SAMAŠϠSM DAMPUN MPNŬ SԠҠUNPDPYUN. ŠNP SAMP DAMԠADDPY ҠB5ҠB SAMAŠϠM DAMPUN MPŬ SYNANSMSSNUN. SYNϠNP DASYNUPUԠSYN DBNנANDHK SBҠҠS MPSYN+ҠPUN NP MPSYNϬɠUN HD3ADAGNSàPGAM--SԠUNS àANSMSSNUN. ϠNP DAàUPUԠ DBNנANDHK SBҠҠS MP+PN NP SZϠDϠNԠP SZ MPϬ YàANSMSSNUN. YϠNP DAYàUPUԠY DBNנANDHK SBҠҠS MP+PN NP SZY SZYϠDϠNԠP MPYϬ ϠANSMSSNUN. ϠNP DAϠUPUԠ DBNנANDHK SBҠҠS MP+PN NP SZϠDϠNԠP SZ MPϬ ɠANSMSSNUN. ϠNP DAɠUPUԠ DBNנANDHK SBҠҠS MP+PN NP SZϠDϠNԠP SZ MPϬ HD3ADAGNSàPGAM--SԠUNS KANSMSSNUN. KϠNP DAKUPUԠK DBNנANDHK SBҠҠS MP+PN NP SZK SZK MPKϬɠDϠNԠP BANSMSSNUN. BϠNP DABUPUԠB DBNנANDHK SBҠҠS MP+PN NP SZBϠDϠNԠP SZB MPBϬ DN.ANSMSSNUN. DAϠNP DADAAUPUԠDAA DBNנANDHK SBҠҠS MP+PN NP SZDAϠDϠNԠP SZDA MPDAϬ DN.ANSMSSNUN. DADNP DADAAUPUԠDAA DBDAAANDHK SBҠҠS MP+PN NP SZDADDϠNԠP SZDAD MPDAD HD3ADAGNSàPGAM--SVŠUNS DMNԠANSMSSNUNԠUNS. DñNP DA.N SBD MPDñ DòNP DA.N SBD MPDò D3NP DA.N3 SBD MPD3 DôNP DA.N SBD MPDô D5NP DA.N5 SBD MPD5 D6NP DA.N6 SBD MPD6 D÷NP DA.N SBD MPD÷ DàNP ADAM SAM MPDì ADDSSNUSNUNŠ-665A ADNNP SBNUPUԠADDSS AA0NϠA SAA0 SBNUPUԠADDSS SàSà0NϠSà SAS0 SBNUNϠA AàA0 SAAñ SAA0 SBNUPUԠADDSS BB0NϠB SAB0 SAB SBNUPUԠADDSS àà0àNϠàج SA0 MPADN HD3ADAGNSàPGAM--SVŠUNS ADDSSNUSNUNŠ-3A ADNNP SBNUPUԠADDSS AԠ0NϠA SAAD SBNUPUԠADDSS BԠ0NϠB SAB SBNUPUԠADDSS àԠ03NϠ SA SBNUPUԠADDSS DԠ0NϠD SAD SBNULPUԠADDSS ŠԠ05NϠ SAD SBNUPUԠADDSS ɠԠNϠ SA SBNUPUԠADDSS KԠ3NϠK SAK SBNUPUԠADDSS ̠ԠNϠ SA SBNUPUԠADDSS NԠ6NϠN SAN SBNUPUԠADDSS ϠԠNϠ SA SBNUPUԠADDSS ADDؠNPNϠ AҬA AҬA SA MPADN ADDSSNUSNUNŬ3AYàNSUN ADN3NP SBNUPUԠADDSS YԠ03NϠY SAY MPADN3 NUSNUN NUNP DANUɠGԠNSUN ҠADDҠNUDŠADDSS SZNUUN MPNUɠ+ HD3ADAGNSàPGAM--NSANSANDVAABS ANSMSSNANDPYNSANS. NנԠ00 נԠ60 SYNԠ00 NSNԠ005 NϠԠ60 ADԠ0 BԠ0 àԠ03 YàԠ03 DԠ0 DԠ05 ɠԠ KԠ3 ̠Ԡ NԠ6 ϠԠ Ԡ00 DNŠԠ00 DԠ05 ɠԠ ؠԠ03AADDSS \Ԡ3 DAAԠ5 DAAԠ5 DAA3Ԡ0 DAAԠ3 DAA5Ԡ5 DAA6Ԡ55 DAAԠ5 DAAԠ3 HD3ADAGNSàPGAM--NSANSANDVAABS HҠNSANS. MŠԠ60 00.0MS 6.MS 3.MS B3Ԡ0000 BԠ0000BԠ AGԠ0ҠNDԠϠAGS B3Ԡ60000 B5Ԡ00000 .NԠ .NAԠ60 .NԠ6 .N3Ԡ5 .NԠ .N5Ԡ3 .N6Ԡ .NԠ .NAԠ6@B@<0 .PAԠ0 .P5Ԡ5 H0HԠ0 MSKԠ MSKԠ00 MSKS5Ԡ60SAS3AADDSSNNSUN MSKS6Ԡ0 MSKBԠ60000SASҠBԠNMԠUN MSKDԠSASASԠSGNANԠDGԠƠMԠUN MSKMDԠ0SASMSԠSGNANԠDGԠƠMԠUN VAABS. MAŠNPMԠUNԠANDҠB MҠNPNϠPYM BàNPDϠBŠMPADHPY BϠNPDϠBŠUPU MԠNPMԠUN MPNP ADDҠNP ND B -= 29007-80001 C S 0122 2313A BCS DRIVER (NON-DMA)D.62             H0101 UASMBҬB̬ HD33A(NN-DMABSDVҠD.6903V. NAMD.6 NԠD.6.6 SPà HSDVҠPASHŠ33ASUBSYSMNHŠBS NVNMN.ԠSADDYM ASSMBYANGUAG.ҠUSŠHANҠAG ҠϠHŠAG̯N-DVҠNAŠUNŠ(ɲ33. HŠASҠAҠANDSAUSAŠSANDADH SAUSBԠ0Ҡ930VADANDBԠҠPA AŠϠAS.SAUSSDYNAMà(BSAND5 ԠDMAYBHBŠSԩ. HŠADA̠SASS(BHHMPؠ930: SB.. ԠSUҠ 29008-80002 E S 0122 2313A BCS DRIVER (DMA) D.62A             H0101 B3Ԡ3 BUSYNP NԠNP MASKNP B3000Ԡ3000 DMAƠNP B0Ԡ0 SPà3 PSSMPؠUSԠ SPà MPؠBNBHKNUMB PBNUMBҠƠADNGS? ҠPBԠ SABGԠ930N DA.930ADADDSS ANDB0ԠNϠMMAND ҠBD SBUԠUPUԠMMAND(NҠ930Sѩ ҠPBԠSԠPAҠN SAMND3ANDSAVŠҠSNDNY BGԠD SBPBԠPAҠBԠSAG SPà DAB3000GԠ930DGZŠ(AŠGũ BNBHKNUMB PBNUMBҠƠADNGS DAB5000-GԠANDM(AŠGũ DBSBSUB-UNNBԠ SBHKҠADDSSDSAB? ҠB9-DSABŠADDSS SAMNDSAVŠMMANDD SPà DBB5000GԠSUNA SBSDBԠD DBMSKSԠHANN SBMASKNUMB SBMASKMASKS SKP BHHMPؠMPؠUSS SPà HN̠DANBUƬɠGԠSԠHANN ANDMASKNUMBҠANDҠ ҠMNDNϠMMAND SAMNDSAVŠMMANDD SPà BNBHKNUMB PBNUMBҠƠADNGS MPSNG-GϠSԠANDMAG SPà DAMND DBƠSUB- SZBSSUNN? MP̲BKSAN SSB MP̱SNGŠHANN ҠSDSUNA̠-MSѠMND DBS930930NNA SZBSUNA̠MD? ҠB9YS-AҠBԠ9 MP+ SPà ̱DBSBSUB-UNN SBBԠ? ANDMSKMPؠ-DSABŠADSGAN  SAMND DANBUƬɠGԠHANN̠NUMB ANDMASKANDҠ DBSBSUB-UNN SBBԠ? MP+930 BNBSUNA PBƠSAN? ADANYS-DUŠHBY ANDBPVNԠNGHV ҠMNDMMMAND ҠPBԠSԠPAҠBԠƠUD SAMND MPDMAGϠDMA SPà SBNP BԱ5Ԡ00000 ƠNP SAVANP S930NP PBԠNP MSKԠ0 ѠNP ײNP SKP ̲SZ3NҠƠADNGS SZNBUƠNMNԠHBUҠADDSS DANBUƬɠGԠHANN̠NUMB ANDMASKANDҠ ҠMNDNϠMMAND ҠPBԠHPAҠBԠƠUD SAMNDSAVŠNנMMAND SPà DAMNDUPUԠS SBUԠMMAND-GNŠSUS DBSBSUB-UNN SBSSBԠ? MPḆHMP DASAPŠSAPŠM SBUԠ930AND DAMND3-NҠH SBUԠPAҠN ḆDAMNDGԠSNDMMAND MPSA DMASKԠ6 MNDNP NGNP SDNP DGNP MND3NP SPà PAAMҠSԠSAGŠ SPà NBUƠNP NUMBҠNP DBUƠNP .930NP SKP NDAVAABŠDMAHANN̠ SPà DMASƠ0UNNNUPԠAND NPAנҠANDNUP Ơ0UNƠNUP DADMAñGԠDMAHAGD ŬSZASSDMAHAVAAB? MPDMAN SSAYS-BUSY? MPDMA.YS SABNϠ-SAVŠDMAHS AAҠSԠDMAHBUSYAG SADMAñ DA \DMAAGԠSAVŠADDSS MPGDMADMAñUSŠASAG SPà DMAADƠDMAñ BԠ MNDNP B600Ԡ600 NԠ- BԠ PDAANP B00Ԡ00 AA0 MASKNP DMAADƠDMAò SAVAؠNP 3NP SPà DMADADMAòGԠDMAHAGD SZASSDMAHAVAAB? MPUB̠NϠ-BHUNAVAAB DMA.DADMAòGԠDMAHAGD SZASSDMAHAVAAB MPDMAN SSAYS-BUSY? MPDMAYS SABNϠ-SAVŠDMAHS AAҠSԠDMAHBUSYAG SADMAò DADMAAGԠSAVŠADDSS GDMASADMAƠDMAòUSŠASAG SƠ0SŠNUPԠSYSM SPà DAàPUԠNUPԠNSUN SABɠNϠDMASԠD ASԠDMAMDŠS SADMAԠANDSԠADNGS SADMASԠNϠNNUAҠSN SKP NGUŠDMAMMANDNSUNS SPà DAAM"AHDMA" ҠBNSUN SAADANDSŠ ADANM"ADMA"NSUN SAADANDSŠ SAAD3 ҠB00M"àDMA"NSUN SADANDSŠ ADABM"àHDMA"NSUN SADANDSŠ SAD3 ҠB600M"SƠHDMA"NSUN SASDANDSŠ ҠB600M"SàHDMA"NSUN SASDANDSŠ SASD3 ADANM"SàDMA"NSUN SASDANDSŠ ҠB500M"BDMA"NSUN SABDANDSŠ SPà SԠUPDMAHANN̠ SPà DAױGԠDMAPGAMN̠D ADAHDMAUPUԠϠUPPҠDMAS DàDMASԠҠDMASàҠBUƠADS DAײGԠBUҠADDSSAND ADADMAUPUԠϠҠDMAS SDSàDMAàSԠҠDMASàҠDUN DA3GԠDUNԠAND AD3ADMAUPUԠϠҠDMAS SPà SAԠPAN SPà DAѠSUS SSASSҠDA? MPDDAàYS DAMNDGԠSԠMMAND DBSBSUB-UNN SBSSBԠ? MPSAԠHMP SBUԠUPUԠSԠMNDϠ930 DASAPŠSAPŠM930 SBUԠAND-NҠH DAMND3PAҠN SPà SAԠAADɠUPUԠAMMAND ANMA B NDSàADɬàSAԠBKANS MPD.6 SPà B500Ԡ500 B600Ԡ600 SKP DAàDMASA-UP SPà DDAàDASSAҠNNUAҠDMA SADMASԠSA-UPSԠNSUN ANMA B SD3SàHDMAàSAԠDMAANS MPD.6 SPà NŠPANNY SPà SNGBSԠANDMMDŠAG SBNGҠNŠPAN ҠPBԠSԠPAҠN̠B MPSA SPà BUSYԠ SPà BDBBԱ5SԠBԠ5ƠBҠDVŠBUSY ANASԠAGϠASԠAG MPD.6ɠUNϠ.. SPà DMANԠAVAABŠSϠ HSSANVABŠҠ SPà UB̠B ADBSAVBBSԠDƠUS'SA DAB3SԠAҠNϠDMA(3 MP*ҠGϠHAԠ(VABũ SPà AGUPUԠUNŠ SPà HSUNŠSUSDBYBHH NAҠNNUAҠSNS ҠUPUNGHUԠNUP. SPà UԠNP DBSìɠGԠANDSAV SBDGAP̠NNS BAҠHŠAP SBSìɠϠPVNԠNUP AAADɠUPUԠDPASSDNAG SôSàADɬàND SSSSAD MP- 3àADɠUNƠɯϠAD DBDGSŠH SBSìɠAP MPUԬ SPà MNDNP SAPŠԠ66000 SKP NNUAҠSN SPà .6NP SASAVAؠSAVŠAGS SBSAVBؠSAVŠBGS AASSAV SàŠAND NA SA.930GSS SPà DMASԠSSNPҠSԠDMAADNG MPUK DMUԠSSNPҠDAàDMADN MPHND DMAԠSSNPƠDMA MPDMAN SPà DBѠHKUSԠD SSBAD? MPNPUԠYS SZBNϠ-N̠? MPHNDYS(SSHDNũ DBSBSUB-UNN SBSSBԠ? MPDAà0(DAàUSԩ SZNԠSԠDUNҠϠN MPHNDPAҠUSԠ-DN SPà PSSADUSS SPà NPUԠAADɠGԠDAAMɯϠAD SADBUƬɠANDSŠNDAABU SZNԠNMNԠDUN SZ3ANDƠADNGS-DN? SSSSN MPNSMAYB SZNBUƠNMNԠHANN̠BUvƠADS DANBUƬɠANDGԠNנHAN(GAND ANDMASK ҠMNDSԠMMANDBS ҠPBԠSԠPAŠB MP3 SPà B0Ԡ0 SPà PSSDAàUSԠ SPà DAàDADGHKDàAG SADAA? MPDAYS SZ3NϠ-NàƠSNGS SS MPHNDDN SKP DBƠSUB-UNN SZBSSBKSAN? SZNBUƠYS-NàBUҠҠNԠH DANBUƬɠGԠHANN̠NUMB PBBSUNA̠SAN? SSYS MP9N ̸NPϠBŠSAԠH?(SSƠSϩ ADAB0NMNԠHNUMB BAҠSA SB̸HANN̠SH SANBUƬɠSAVŠNנHNUMB ANDB60\ SAB\ DAS930HSϠBŠNDHANN? ANDB60 PAB MP+3YS DANBUƬɠNϠ-VҠHNUMB MP9 DASDSŠSAԠHANN SANBUƬɠҠNԠPASS DBSSSԠSA SB̸HANN̠SH DAS930GԠNDHANN ҠBSԠS 9ANDDMASKM ҠMNDMMANDD DB3SHSϠB NBSZBSSHŠASԠSNG MP+3YS DBƠNϠ-SUB- SSBUNN? ҠBSԠSŠ\\0(SNGŠHAN MP̱ SPà MSKԠ6 SAVBؠNP SPà DAAUPU SPà DADAPDAAAU.PҬADҠDAàAS DAԠSSNPƠPҬADҠDAàAS MP+ DADBUƬɠGԠDAàDAAD ANDMSKANDMNAŠBS03 SZDBUƠsNMNԠDAABUҠADDSS SZNԠNMNԠDUN SPà ̱DBDGHANG BҠSAŠ SBDGDàAG MPA SKP DMAPSS SPà DMANDADMAƬɠA AŬAPP SADMAƬɠDMAAG AA SADMAƠDVҠDMAAG SPà DANUMBҠS SANԠDUN DAѠUS SSASSD? MPDMDAàŠ(DAé D3àHDMAUNƠDMAHANN DAANSSUŠ"AN"MMAND SBUԠҠMPؠAD MP+3 SPà GԠASԠADNG ANDԠ930SѪ SPà NSSZNGANDMMDŠAG? MP30NϠ-GԠASԠADNG DASAPŠYS-GԠ930AԠMMAND DBSBSUB-UNN SBBԠ? SBUԠ-Ԡ930ASUN SPà DNŠ-AҠBUSYà SPà HNDDASAVAɠAҠԠD AŬABUSYB SASAVA DANԠSԠDUN SZSAVANϠ ҠBԱ5D3 SASAVAɠ(ANSMSSNG AAҠDV SABUSYBUSYAG SANԠANDDUN SPà DA3SԠ SAS5NDNҠDN MP SKP GԠASԠADNG SPà 30A SA3SԠƠPSϠ- SANGSԠANDMMDŠAG DASS3GԠ"AN"MNDҠASԠDNG SPà 3SZDBUƠNàDAABU AAADɠUPUԠNנMND MPԠҠDAA SPà MNAŠDAàDMAA̠ ^0.*SPà DMDAàASԠSH SADMUԠҠNUP DAD3 SAS5 MP SPà PSSSԠDGҠDMASAԠDMA SPà UKDASSAҠSԠDG SADMASԠSԠNNUP DAMNDGԠMMAND AñAADɬ SDSàHDMAàUNNDMA SPà ԠPNԬDNŠҠHҠ SPà ԠDA.930S ϠŠAND SAA SϠGSS DASAVAؠSŠAGS DBSAVBؠSŠBGS SPà S5SàADɬàNDŠ(PԠHNDNŠ-é SPà MP.6 SPà NDƠDVҠ SPà ND q0 0 = 29009-80001 C S 0222 2313B RTE DRIVER DVR62             H0102 tASMB,R,B,L,C HED 2313B RTE DRIVER -- DVR62 75156 TLD * * NAM DVR62 29009-60001 REV. C 75156 -TLD- ENT I.62,C.62 SUP SPC 2 * THIS DRIVER OPERATES THE 2313B SUBSYSTEM IN THE RTE * ENVIRONMENT. IT REQUIRES THE USE OF INTERFACE ROUTINES * TO SIMPLIFY OPERATION. IT CAN, HOWEVER, BE CALLED * DIRECTLY BY AN EXEC CALL IF THE USER FOLLOWS THE * FOLLOWING FORMAT: * * FORTRAN: CALL EXEC(ICODE,ICNWD,IQUE,N) * * FOR RTE VERSIONS WHICH SUPPORT CLASS I/O A CLASS I/O * EXEC CALL CAN BE MADE IN THE FORMAT: * * FORTRAN: DIMENSION IREGS(2) * EQUIVALENCE (REGS,IREGS),(IA,IREGS(1)),(IB,IREGS(2)) * CALL EXEC(ICOD,ICNWD,IQUE,NWORD,N,IPRM,ICLAS) * REGS=EXEC(ICOAD,ICLAS,0,0) * IF(IAND(IA,140000B).NE.0)GO TO 1 * : * : * * * 1 CONTINUE * C PROCESS ERROR HERE * : * : * * * ASSEMBLY: * (NORMAL) (CLASS I/O) * * EXT EXEC EXT EXEC * : : * : : * JSB EXEC JSB EXEC * DEF *+5 DEF *+8 * DEF ICODE DEF ICOD WRITE REQUEST * DEF ICNWD DEF ICNWD * DEF IQUE DEF IQUE * DEF N DEF NWORD SEE NOTE BELOW * DEF N * DEF IPRM (PARAMETER PLACE HOLDER) * DEF ICLAS * * . * : * JSB EXEC * DEF *+5 * DEF ICOAD * DEF ICLAS * DEF ZERO * DEF ZERO * RAL * SLA * JMP ERROR *  SSA * JMP ERROR * : * : * * * ERROR EQU * * * PROCESS ERROR HERE * : * : * * WHERE: * * ICODE=2 (NORMAL CALLS ASSUME WRITE PATH) * ICOD =18(CLASS CALLS ASSUME WRITE PATH) * ICOAD=21(CLASS GET) * ICNWD=BITS 0-5 ARE THE LOGICAL UNIT # * BIT 6 IS 1 TO SPECIFY DMA NEEDED * (NOT USED FOR REMOTE,I.E.,SUBCHANNEL 1 - SEE BELOW) * IQUE=ADDRESS OF QUEUE BUFFER CONTAINING * ALL OPERATIONS * N=NUMBER OF "ENTRIES" IN IQUE * NWORD=NUMBER OF WORDS IN QUEUE BUFFER ONLY. NOTE THAT ANY * BUFFER POINTED TO BY THE QUEUE BUFFER MUST NOT BE * IN A DISK RESIDENT AREA. IN ADDITION, NO BUFFER * POINTER IN THE QUEUE BUFFER SHOULD POINT TO AN AREA * INCLUDED IN THE QUEUE BUFFER WORDS (NWORDS). THE * QUEUE BUFFER WILL BE MOVED TO SYSTEM MEMORY, AND * ANY POINTERS TO DATA BUFFERS IN THE QUEUE BUFFER WILL * NOT BE RELOCATED TO POINT TO NEW LOCATION OF QUEUE * BUFFER IN SYSTEM MEMORY. IF QUEUE BUFFER * CONTAINS POINTERS TO ELSEWHERE IN QUEUE BUFFER * THESE POINTERS WILL NOT BE ADJUSTED WHEN THE * QUEUE BUFFER IS MOVED TO SYSTEM MEMORY. * IPRM =A PARAMETER PLACE HOLDER * ICLAS=CLASS NUMBER * ZERO=0 * * * IQUE CONTAINS A NUMBER OF MULTIPLE WORD ENTRIES * WHICH DEFINE OPERATIONS. MOST PRACTICAL USES OF * THE 2313B WILL REQUIRE MORE THAN ONE OPERATION. * ALL OPERATIONS IN IQUE ARE EXECUTED IN ONE CALL * TO THE DRIVER. THIS METHOD PREVENTS ANOTHER * PROGRAM FROM CHANGING SUB-SYSTEM PARAMETERS * DURING RELATED OPERATIONS. SPC 2 * ONE WORD ENTRIES: * * TYPE = 1 ISSUE SYSTEM NORMALIZE (NO DMA) * * TYPE = 2 ISSUE 2930A LOOP ESCAPE (NO DMA) * * THREE WORD ENTRIES: * * TYPE = 3 OUTPUT NUMB WORDS (DMA AVAILABLE - LOCAL ONLY) * NUMB = NUMBER TO OUTPUT * BUFF = ADDRESS OF OUTPUT BUFFER * * TYPE = 4 INPUT NUMB WORDS (DMA AVAILABLE - LOCAL ONLY) * NUMB = NUMBER TO INPUT * BUFF = ADDRESS OF INPUT BUFFER * * FOUR WORD ENTRIES: * * TYPE = 5 OUTPUT THEN INPUT NUMB PAIRS (NO DMA) * NUMB = NUMBER OF OUT-IN PAIRS * OBUF = ADDRESS OF OUTPUT BUFFER * IBUF = ADDRESS OF INPUT BUFFER * * TYPE = 6 OUTPUT NUMB ADRS THEN DATA PAIRS (NO DMA) * NUMB = NUMBER OF OUT-OUT PAIRS * OBF1 = ADDRESS OF CHANNEL BUFFER * OBF2 = ADDRESS OF DATA BUFFER * * TYPE = 7 OUTPUT NUMB CHAN THEN DATA PAIRS (NO DMA) * NUMB = NUMBER OF DATA POINTS TO OUTPUT * CHAN = ADDRESS OF THE CHANNEL NUMBER * OBUF = ADDRESS OF DATA BUFFER * * TYPE = 8 OUTPUT NUMB DATA POINTS SEQUENTIALLY (NO DMA) * NUMB = NUMBER OF DATA POINTS TO OUTPUT * OBF1 = ADDRESS OF 2 WORD BUFF CONTAINING START & END CHAN * OBF2 = ADDRESS OF DATA BUFFER * * TYPE = 9 OUTPUT NUMB ERASE COMMANDS (NO DMA) * NUMB = NUMBER OF DACS TO ERASE * OBUF = ADDRESS OF CHANNEL BUFFER * CMND = ADDRESS OF THE DATA WORD (ERASE) * * ADDITIONAL COMMENTS: * * IN ALL CASES NUMB MUST NOT BE LESS THAN 0. FOR ALL BUT * TYPE 3 NUMB MUST BE GREATER THEN 0. FOR TYPE 3 NUMB * MAY BE 0 TO INDICATE OUTPUT BUT DO NOT ENCODE. * (FOR REMOTE NO OUTPUT WILL BE DONE BUT THE WORD WILL * BE SAVED TO BE OUTPUT FOR NEXT ENTRY IF NEEDED.) * * FOR TYPE 3 WITH DMA REQUESTED, DMA WILL BE USED * WHEN NUMB IS GREATER THAN 2. FOR TYPE 4 WITH DMA REQUESTED, * DMA WILL BE USED. DMA IS NEVER USED FOR REMOTE (SUBCHANNEL 1) * * TYPES 3 THROUGH 7 MAKE THIS DRIVER A GENERAL * PURPOSE MICROCIRCUIT I/O CARD DRIVER * (MUST BE SUBCHANNEL 0 -- SEE BELOW) * * THE RTE MUST BE CONFIGURED FOR SUBCHANNEL 0 FOR LOCAL, * SUBCHANNEL 1 FOR REMOTE. SKP ******************************************************************** * * * * * >>>>>>> IMPORTANT NOTE FOR FUTURE MODIFIERS <<<<<<< * * * * * * BECAUSE OF THE ORIGINAL DESIGN OF THIS DRIVER, SOME SECTIONS * * OF THIS CODE ARE RTE CORE LAYOUT DEPENDENT. THOSE SECTIONS OF * * THE CODE WHICH ARE SO DEPENDENT ARE MARKED WITH A LABEL THAT * * BEGINS WITH A "!". IF AND WHEN THE RELATIVE * * LOCATIONS OF VARIOUS SECTIONS OF RTE ARE CHANGED, CHANGES WILL * * MOST LIKELY BE REQUIRED IN THOSE SECTIONS OF CODE MARKED WITH * * "!". NO OTHER AREAS OF THE CODE SHOULD BE AFFECTED BY SUCH * * CHANGES. * * * * * ******************************************************************** SKP ************************ * * * INITIATION SECTION * * * ************************ SPC 2 I.62 NOP JSB CNFGR CONFIGURE ALL I/O INSTRUCTIONS LDA BIT7 FORM MASK CMA TO TURN OFF AND EQT5,I XMSN ERROR STATUS BIT STA EQT5,I AND RESTORE STATUS WORD DLD INTBA,I \ CPA EQT1 \ JMP HVDMA > CHECK FOR DMA ASSIGNED CPB EQT1 / JMP HVDMA / SPC 2 * ** VALID REQUEST CHECK ** SPC 1 LDA EQT6,I GET REQUEST CONTROL WORD LDB A RBL SSB,SLB,RSS CLASS REQUEST? JMP NORML NORMAL--NOT CLASS REQUEST SPC 1 * CHECK FOR LEGAL CLASS WRITE-READ REQUEST SPC 1 LDB EQT9,I GET FIRST OPTIONAL PARAMETER AND MASK MASK REQUEST CODE CPA CLASS LEGAL CLASS REQUEST? SZB,RSS 1ST OPTIONAL PARAMETER GIVEN? JMP ERROR NO, ERROR STB EQT8,I YES, TAKE AS # OF ENTRIES COUNT JMP CHKQU GO ON TO CHECK QUEUE BUFFER NORML EQU * AND B77 MASK REQUEST TYPE CPA TWO WRITE REQUEST? JMP CHKQU YES - GOOD CPA THREE CONTROL REQUEST? CLA,INA,RSS YES - A=2 FOR RETURN ERROR EQU * CLA READ REQUEST - A=1 FOR RETURN INA (ALSO FOR BAD ENTRIES) JMP I.62,I ERROR RETURN SPC 2 MASK OCT 140077 CLASS REQUEST MASK CLASS OCT 140002 CLASS WRITE REQUEST WORD SKP * THIS ROUTINE CHECKS A SPECIFIED BUFFER TO SEE IF ANY PART * OF IT LIES IN A DISK RESIDENT PROGRAM AREA. IF ANY PART * OF THE BUFFER IS IN A DISK AREA THEN RETURN IS TO (P+1), * OTHERWISE TO (P+2). * ENTER WITH (A)=BUFFER ADDRESS, (B)=BUFFER LENGTH SPC 2 DRA? NOP ENTRY (A)=ADDRESS,(B)=LENGTH !1 SSA ADDR < 0? !2 JMP ERROR YES - ERROR !3 STA TEMP4 NO - SAVE ADDRESS !4 LDA BKDRA GET FWA BKGND DISK AREA !5 CMA,INA NEGATE !6 ADA TEMP4 ADD BUFFER ADDR !7 SSA,RSS > 0? !8 JMP !DRA YES - LIES IN BKGND DISK AREA !9 LDA RTDRA GET FWA RT DISK AREA !10 CMA,INA NEGATE !11 ADA TEMP4 ADD BUFFER ADDR !12 SSA < 0? !13 JMP !RTND YES - GO CHECK END BUFFER ADDR !14 LDA AVMEM GET LWA+1 OF RT DISK AREA !15 CMA,INA NEGATE !16 ADA TEMP4 ADD BUFFER ADDR !17 SSA < 0? !18 JMP !DRA YES - LIES IN RT DISK AREA !19 LDA BKDRA FETCH BKGND DISK AREA BOUNDARY !20 RSS NO - CHECK END BUFFER ADDR !RTND EQU * !21 LDA RTDRA FETCH RT DISK AREA BOUNDARY !22 CMA NEGATE4 !23 ADA TEMP4 ADD BUFFER ADDR !24 ADA B ADD BUFFER LENGTH !25 SSA < 0? !26 ISZ DRA? YES - NOT IN DISK AREA !DRA EQU * JMP DRA?,I NO - LIES IN DISK AREA SKP * ** CHECK QUEUE BUFFER ** SPC 1 CHKQU EQU * LDA EQT8,I CHECK QUEUE CMA,INA BUFFER # OF ENTRIES SSA,RSS >0? JMP ERROR NO - REJECT SPC 2 * ** VALID ENTRY TYPES CHECK ** SPC 1 LDB EQT7,I GET & SAVE STB TEMP1 QUEUE BUFFER ADDRESS STA TEMP2 SAVE ENTRY COUNTER STB TEMP3 SPC 1 L1 EQU * LDB TEMP1,I GET CURRENT ENTRY TYPE NUMBER ISZ TEMP1 ADVANCE QUEUE BUFFER ADDRESS CPB ONE TYPE = 1? RSS YES - OK CPB TWO TYPE = 2? JMP L6 YES - OK LDA TEMP1,I GET NUMBER OF STA TEMP5 OPERATIONS AND CMA,SSA,RSS CHECK FOR <0 JMP ERROR <0 SO REJECT CPB THREE TYPE = 3? JMP L2 YES - OK SZB IF ENTRY TYPE = 0 THEN ERROR CMA,SZA,RSS CHECK # OF OPERATIONS FOR 0 JMP ERROR =0 SO REJECT LDA MIN10 IS TYPE ADA B MORE THAN SSA THREE BUT SSB LESS THAN TEN? JMP ERROR NO SPC 2 * ** CORE RESIDENT CHECK ** * * IF THE QUEUE BUFFER IS NOT IN A DISK RESIDENT AREA (EITHER RT * OR BACKGROUND) THEN NO DATA BUFFER MAY BE IN A DISK RESIDENT * AREA. (IF CLASS I/O CALL THEN QUEUE BUFFER IS IN SYS. AV. MEM. * WHICH IS NOT A DISK RESIDENT AREA.) * L2 EQU * STB TEMP6 SAVE (B) ISZ TEMP1 POINT TO BUFFER ADDR LDA EQT6,I GET REQUEST CONTROL WORD RAL ROTATE SIGN BIT TO BIT 0 SSA,SLA,RSS CLASS CALL? (BITS 14 & 15) RSS NORMAL CALL - NOT CLASS JMP CORE YES-BUFFR NOT LTO BE IN DISK AREA LDA TEMP3 GET QUEUE ADDR CLB SET LENGTH TO 0 JSB DRA? NORML CALL--CHECK QUEUE LOCATION JMP NOSWP QUEUE IN DISK AREA-NOT SWAPABLE CORE EQU * MAKE SURE BUFFR NOT IN DISK AREA LDB TEMP5 DEFAULT BUF LEN TO TEMP5 CONTENTS LDA TEMP6 GET ENTRY TYPE CPA DM9 IF TYPE=9, 2ND BUFF ADDR CLB,INB THEN LENGTH = 1 CPA SEVEN IF TYPE=7, 1ST BUFF ADDR CLB,INB THEN LENGTH = 1 CPA EIGHT IF TYPE=8, 1ST BUFF ADDR LDB TWO THEN LENGTH = 2 LDA TEMP1,I FETCH BUFFER ADDRESS JSB DRA? CHECK BUFFER LOCATION JMP ERROR BUFFER IS IN DISK AREA -- ERROR SPC 1 NOSWP EQU * QUEUE IN DISK AREA OR BUFFER NOT LDB TEMP6 RESTORE (B) SSB FIRST BUFFER? JMP L3 NO CPB FOUR YES - TYPE = 4? JMP L4 YES - CHK VALIDITY CPB THREE TYPE = 3? JMP L5 YES - BUFFER OK CMB,INB SET FOR SECOND BUFFER CHECK JMP L2 SPC 2 MIN10 DEC -10 DM9 DEC -9 SPC 2 L3 EQU * CMB,INB RECOVER TYPE CPB FIVE TYPE = 5? RSS YES - CHECK VALIDITY JMP L5 NO - BUFFERS OK SKP * ** VALID BUFFER CHECK ** SPC 1 L4 EQU * !50 LDA RTORG GET FWA PROGRAM AREA !51 CMA,INA NEGATE !52 ADA TEMP1,I ADD BUFFER ADDR !53 SSA < 0? !54 JMP ERROR YES - IN SYSTEM AREA - ERROR !55 LDA TEMP1,I GET BUFFER ADDR !56 ADA TEMP5 ADD BUFFER LENGTH !57 CMA,INA NEGATE !58 ADA BKLWA ADD LWAM !59 INA ADJUST TO END OF BUFFER !60 SSA < 0? !61 JMP ERROR YES-BUFFR ENDS ABOVE LWAM-ERROR SPC 2 * ** CHECKED ALL ENTRIES? ** SPC 1 L5 ISZ TEMP1 ADVANCE QUEUE ADDRESS L6 ISZ TEMP2 CHECKED ALL ENTRIES? JMP L16H NO - CHECK NEXT ONE SKP * ** NEED DMA? ** SPC 1 LDA REMOT GET REMOTE/LOCAL FLAG SLA REMOTE? JMP NODMA YES, NO DMA LDA EQT6,I CHECK CONWD BIT 6 AND BIT6 TO SEE IF DMA SZA,RSS HAS BEEN REQUESTED BY USER JMP NODMA NOT REQUESTED LDA FIVE COMPLETE TO GET JMP I.62,I DMA ASSIGNED SPC 1 * ** DON'T USE DMA ** SPC 1 NODMA EQU * LDA EQT6,I MAKE SURE THAT CONWD AND DMMSK IS CLEAR OF STA EQT6,I UNDESIRABLE BITS JMP OP SPC 2 DMMSK OCT 140177 BIT7 OCT 200 SPC 2 * ** HAVE DMA ** SPC 1 HVDMA EQU * LDA EQT6,I SET CONWD AND DMMSK FOR DMA IOR BIT7 OPERATIONS STA EQT6,I WHERE POSSIBLE LDB EQT9,I FETCH EQT9 RAL ROTATE FOR CLASS I/O CHECK SSA,SLA,RSS CHECK FOR CLASS REQUEST RSS STB EQT8,I RESTORE EQT8 FR EQT9 (DMA WIPED) SPC 1 LDA CHAN CONFIGURE JSB DCFGR DMA INSTRUCTIONS SPC 2 * ** CALL MAIN PROCESSOR ** SPC 1 OP EQU * LDA EQT8,I CREATE CMA NUMBER OF ENTRIES STA EQT8,I COUNTER CCA FORCE STA EQT10,I START-UP JSB PROC START OPERATIONS CLA,RSS OPERATION INITIATED LDA FOUR IMMEDIATE COMPLETION CLB JMP I.62,I RETURN TO SYSTEM SPC 2 THREE DEC 3 FIVE DEC 5 SIX DEC 6 SKP ***************************************** * * * CONTINUATION AND COMPLETION SECTION * * * ***************************************** SPC 2 C.62 NOP LDB EQT1,I SPURIOUS SZB,RSS INTERRUPT? JMP SPURI YES - IGNORE IT SPC 1 CPA SIX WAS RSS INTERRUPT CPA SEVEN FROM RSS DMA JMP DEV NO JSB DCFGR YES - CONFIGURE DMA SPC 1 CLCD1 CLC HDMA TURN OFF DMA CCA FORCE NEW STA EQT10,I ENTRY CHECK LDA EQT6,I IS A DEVICE \ ALF,ALF INTERRUPT CHECKS BIT 9 RAR,SLA REQUIRED? / JMP CONT YES LDA EQT4,I NO - GET DEVICE AND B77 SELECT CODE SPC 2 * ** CALL MAIN PROCESSOR ** SPC 1 DEV EQU * JSB CNFGR CONFIGURE ALL I/O INSTRUCTIONS SPC 1 LDA REMOT REMOTE? SLA,RSS YES - SKIP JMP LOCAL NO - SKIP STATUS WORD CHECK LIA2 LIA .2313,C READ STATUS WORD AND SMASK SAVE PARITY, MISSED, & RIP BITS SZA,RSS CHECK FOR BAD STATUS JMP LOCAL GOOD STATUS - CONTINUE LDA EQT5,I BAD STATUS IOR BIT7 SET XMSN ERROR BIT STA EQT5,I IN STATUS WORD JMP PERR AND RETURN TO CALLER LOCAL EQU * LDA EQT6,I IS A \ ALF,ALF DMA CHANNEL CHECKS BIT 7 SSA,RSS ASSIGNED? / JMP L7 NO DLD INTBA,I \ ELA,CLE,ERA \ ELB,CLE,ERB \ CPA EQT1 > GET PROPER LDA SIX / DMA CHANNEL CPB EQT1 / LDA SEVEN / JSB DCFGR GO CONFIGURE DMA SPC 1 L7 EQU * JSB PROC START OR CONT OPERATION JMP CONT OPERATION CONTINUATION CLB,INB,RSS ALL OPERATIONS DONE (B=1) PERR EQU * CLB PARITY ERROR(B=0) LDA BIT15 SET A= BIT 15 TO RELEASE DMA CLC1 CLC .2313,C TURN OFF DEVICE JMP C.62,I RETURN TO SYSTEM (COMPLETED) SPC 2 TWO DEC 2 SMASK OCT 100006 SPC 2 SPURI EQU * STB EQT15,I CLEAR TIME OUT ON SPURIOUS INT CONT<:6 EQU * ISZ C.62 SET RETURN FOR CONTINUATION JMP C.62,I RETURN TO SYSTEM SPC 2 ONE DEC 1 B77 OCT 77 < SKP ******************** * * * MAIN PROCESSOR * * * ******************** SPC 2 PROC NOP ISZ EQT10,I CHECK FOR END OF CURRENT ENTRY JMP MORE MORE TO GO ON THIS ONE NEXT EQU * LDA STCC1 SET ENCODE STA STCC2 COMMAND ISZ EQT8,I MORE ENTRIES TO GO? RSS YES JMP DONE NO - ALL DONE LDB EQT7,I GET NEW TYPE NUMBER LDB B,I AND SAVE STB EQT9,I IT IN EQT ISZ EQT7,I ADVANCE QUEUE ADRS CCA ASSUME TYPE 1 OR 2 AND STA EQT10,I SET FOR 1 OPERATION CPB ONE TYPE = 1? JMP SYNRM YES - GO DO A SYSTEM NORMALIZE CPB TWO TYPE = 2? JMP ESCPE YES - ISSUE 2930A ESCAPE WORD LDA EQT7,I GET TRANSFER LDA A,I LENGTH FROM QUEUE BUFFER CMA MAKE IT A NEGATIVE STA EQT10,I COUNTER & STORE IN EQT ISZ EQT7,I ADVANCE QUEUE ADRS LDA EQT7,I GET 1ST OR ONLY BUFF ADRS LDA A,I AND PLACE IT IN STA EQT11,I EQT IN POSITIONS FOR BOTH STA EQT12,I BUFFER ADDRESSES ISZ EQT7,I ADVANCE QUEUE ADRS CPB THREE TYPE = 3? JMP OUT YES - GO DO SIMPLE OUTPUT CPB FOUR TYPE=4? JMP IN YES--GO DO SIMPLE INPUT LDA EQT7,I GET 2ND BUFF ADRS LDA A,I AND PLACE IT IN STA EQT12,I THE EQT ISZ EQT7,I ADVANCE QUEUE ADRS CPB FIVE TYPE = 5? JMP OUTPT YES - GO TO OUTPUT (THEN INPUT) LDA EQT11,I GET & SAVE LDA A,I THE 1ST WORD OF STA EQT13,I THE 1ST BUFFER LDA EQT10,I ADJUST THE INA OPERATIONS COUNTER BIT9 ALS FOR DOUBLE OPERATIONS STA EQT10,I ON THE DUAL DAC JMP DAC SKP SEVEN DEC 7 EIGHT DEC 8 SYN OCT 140001 SPC 1 * ** ISSUE SYSTEM NORMALIZE ** SPC 1 SYNRM EQU * LDA SYN GET SYSTEM NORMALIZE COMMAND LDB REMOT GET REMOTE/LOCAL FLAG SLB REMOTE? JMP R/L YES,ISSUE COMMAND REMOTE CLC2 CLC .2313,C CLC TO GET ENCODE EDGE OTA1 OTA .2313 AND ISSUE IT STCC1 STC .2313,C DOUBLE ENCODE NOP TO INSURE STC1 STC .2313 RESPONSE JMP PROC,I CONTINUATION RETURN SPC 1 FOUR DEC 4 BIT8 OCT 400 SPC 1 * ** CONTINUATION ** SPC 1 MORE EQU * LDB EQT9,I GET CURRENT TYPE NUMBER CPB THREE TYPE = 3? JMP OUTPT YES - CONT SIMPLE OUTPUT CPB FOUR TYPE = 4? JMP INPT1 YES - CONT SIMPLE INPUT CPB FIVE TYPE = 5? JMP INPT2 YES - GO INPUT (THEN OUTPUT) SPC 1 DAC EQU * LDA EQT6,I GET REQUEST CONTROL WORD XOR BIT8 TOGGLE BIT 8 FOR MIXED IN/OUT STA EQT6,I SAVE IT ALF,ALF POSITION FOR TESTING LATER CPB SIX TYPE = 6? JMP BLOCK YES - GO DO BLOCK SCAN ON DAC CPB SEVEN TYPE = 7? JMP SINGL YES - GO DO SINGLE CHAN ON DAC CPB EIGHT TYPE = 8? JMP SEQTL YES - GO TO SEQUENTIAL ON DAC SLA TYPE = 9: CHECK CONWD BIT 8? JMP CHANL CHANNEL # OUTPUT LDA EQT12,I GET DATA WORD LDA A,I JMP R/L GOTO REMOTE LOCAL OUTPUT SKP SEQTL EQU * SLA,RSS DAC SEQ SCAN: CHECK CONWD BIT 8? JMP DATA DATA OUTPUT LDA EQT13,I GET ADDRESS TO BE OUTPUT AND DMASK & ELIMINATE WAIT BIT STA B LDA EQT11,I GET END CHANNEL INA ADDRESS FOR SEQUENTIAL LDA A,I SCAN AND CHECK AND DMASK TO SEE IF CPA B CURRENT CHAN IS END CHAN JMP NWSCN IT IS - START NEW SCAN LDA EQT13,I \ STA B \ INCREMENT " ADB B20 / CHANNEL # STB EQT13,I / SPC 2 CLB,INB IS THIS THE CMB LAST CHANNEL CPB EQT10,I TO BE SET? JMP DWAIT YES - SET WAIT BIT JMP R/L# SPC 1 ESCPE EQU * LDA SCAPE (GET 2930A ESCAPE WORD) R/L EQU * REMOTE/LOCAL OUTPUT FROM (A) REGISTER STA EQT13,I SAVE LAST OUTPUT WORD R/L# EQU * LDB REMOT GET REMOTE/LOCAL FLAG SLB,RSS LOCAL? JMP OTA2 YES SPC 1 REOUT EQU * REMOTE OUTPUT ONLY STCC4 STC .2313,C SET RECEIVE MODE LIB1 LIB .2313,C CLEAR STATUS LIB2 LIB .2313 CLEAR DATA OTA3 OTA .2313 OUTPUT COMMAND WORD TO 2313 JMP PROC,I RETURN AND WAIT FOR FLAG SPC 1 OTA2 OTA .2313 ISSUE A WORD * * NOTE: THE FOLLOWING INSTRUCTION IS NORMALLY A CONFIGURED * "STC SC,C" EXCEPT FOR TYPE 3 ENTRIES WITH N=0. IN THIS * CASE, IT IS A "JMP NEXT". * STCC2 JMP NEXT AND ENCODE JMP PROC,I CONTINUATION RETURN SPC 2 B20 OCT 20 DMASK OCT 7776 BIT6 OCT 100 SCAPE OCT 146000 BIT15 OCT 100000 SKP NWSCN EQU * LDB EQT11,I DAC SEQ NEW SCAN LDB B,I RESTORE CURRENT CHAN ADRS STB EQT13,I STORAGE WITH START CHAN ADRS LDA EQT11,I INA LDA A,I DWAIT EQU * IOR ONE SET FLAG WAIT BIT JMP R/L# SPC 1 SINGL EQU * SLA,RSS DAC SINGLE CHAN: CHK CONWD B8? JMP DATA DATA OUTPUT LDA EQT11,I GET "THE" CHANNEL LDA A,I NUMBER JMP R/L SPC 1 BLOCK EQU * SLA,RSS DAC BLK SCAN: CHK CONWD BIT 8? JMP DATA DATA OUTPUT CHANL EQU * LDA EQT11,I GET NEXT CHANNEL LDA A,I NUMBER ADVNC EQU * ISZ EQT11,I ADVANCE CHAN BUFF ADDRESS JMP R/L SPC 1 DATA EQU * LDA EQT12,I DAC DATA OUTPUT: LDA A,I GET D{ATA WORD FROM BUFFER ISZ EQT12,I ADVANCE DATA BUFF ADDRESS JMP R/L# GO OUTPUT THE DATA WORD SPC 2 * ** SIMPLE OUTPUT (TYPE 3) ** SPC 1 OUT EQU * ISZ EQT10,I ADJUST OPERATIONS COUNTER JMP DMCHK IF >0 OPS THEN GO CHK MORE LDA SAJMP FOR 0 OPS ELIMINATE STA STCC2 ENCODE AND FORCE NEXT ENTRY LDA REMOT \ SLA,RSS \ JMP OUTPT (LOCAL) LDA EQT11,I SKIP OUPUT BUT LDA A,I SAVE OUTPUT WORD STA EQT13,I / ISZ EQT11,I / JMP NEXT / SPC 1 OUTPT EQU * LDA EQT11,I GET OUTPUT WORD LDA A,I FROM BUFFER JMP ADVNC SKP DMCHK EQU * LDA REMOT GET REMOTE FLAG SLA REMOTE JMP OUTPT YES,NO DMA LDA EQT10,I CHECK NUMBER OF CMA,INA OPERATIONS CPA ONE FOR >2? JMP OUTPT =1 (NO DMA) CPA TWO >1 JMP OUTPT =2 (NO DMA) LDA EQT6,I >2 SO CHECK CONWD ALF,ALF BIT 7 SSA,RSS FOR DMA? JMP OUTPT NO DMA ALF,CLE,ALF SET BIT 9 OF CONWD (DEV INTRPT IOR BIT9 REQUIRED) & CLEAR E (OUTPUT) JMP DMSET GO START OUTPUT DMA SPC 2 B377 OCT 377 BIT13 OCT 20000 SPC 1 * ** SIMPLE INPUT (TYPE 4) ** SPC 1 IN EQU * LDA REMOT SLA,RSS JMP IN1 NCODE EQU * LDA EQT13,I JMP REOUT IN1 EQU * LDA EQT6,I CHECK CONWD ALF,ALF BIT 7 FOR SSA,RSS DMA OPERATION? JMP STCC2 NO DMA - GO ENCODE ALF,ALF CLEAR CONWD BIT 9(NO DEV INTRPT) AND B377 REQUIRED) & SET E CCE FOR DMA INPUT SPC 1 * ** SET UP & START DMA ** * (LOCAL ONLY) SPC 1 DMSEQT EQU * STA EQT6,I SAVE CONWD LDA EQT4,I FORM DMA AND B77 COMMAND WORD 1 WITH DEVICE IOR BIT15 SELECT CODE & STC OPTION SEZ INPUT? IOR BIT13 YES - SET CLC OPTION OTAD1 OTA HDMA ISSUE CW1 & CLCD2 CLC LDMA PREPARE FOR CW2 LDA EQT11,I GET BUFFER ADDRESS FOR CW2 SEZ INPUT? IOR BIT15 YES - SET INPUT MODE BIT OTAD2 OTA LDMA ISSUE CW2 & STCD1 STC LDMA PREPARE FOR CW3 LDA EQT10,I GET TRANSMISSION LENGTH SEZ AS CW3 AND INA ADJUST IF INPUT OTAD3 OTA LDMA ISSUE CW3 - DMA IS NOW READY CLF 0 TURN OFF INTERRUPT SYSTEM SEZ,RSS OUTPUT? STF1 STF .2313 YES - SET DEVICE FLAG SEZ INPUT? STCC3 STC .2313,C YES - START DEVICE STCD2 STC HDMA,C START DMA TRANSFER CLA PRIVILEGED I/O CPA DUMMY PRESENT? JMP PROC,I NO - CONTINUATION EXIT CLCD3 CLC HDMA YES - TURN OFF DMA INTERRUPT LDB INTBA GET ADDRESS LDA CHAN OF APPROPRIATE CPA SEVEN DMA CHANNEL INB IN INTERRUPT LDA B,I TABLE IOR BIT15 SET BIT 15 TO INDICATE THIS DMA STA B,I CHANNEL IS IN USE STF 0 TURN INTERRUPT SYSTEM BACK ON JMP PROC,I CONTINUATION EXIT SPC 2 SAJMP NOP SPC 2 DONE EQU * ISZ PROC SET FOR COMPLETION JMP PROC,I AND RETURN SPC 2 * ** INPUT ROUTINE ** SPC 1 INPUT NOP LIA1 LIA .2313 GET READING FROM I/O CARD LDB EQT12,I GET BUFFER ADDRESS STA B,I AND STORE THE READING ISZ EQT12,I ADVANCE BUFFER ADDRESS LDA EQT10,I GET OPERATION COUNTER INA,SZA AND CHECK FOR DONE? JMP INPUT,I NO - GO ON JMP NEXT YES - GET NEXT ENTRY SPC 2 INPT1 EQU * CONTINUE SIMPLE INPU>T OPERATION JSB INPUT CONTINUE SIMPLE INPUT LDB REMOT SLB JMP NCODE JMP STCC2 OPERATION SPC 1 INPT2 EQU * JSB INPUT CONT INPUT THEN GO JMP OUTPT OUTPUT NEXT CHAN # SKP ******************************* * * * I/O CONFIGURATION ROUTINE * * * ******************************* SPC 1 CNFGR NOP LDB STCC2 SAVE JUMP STB SAJMP INSTRUCTION CLB FIRST TIME STB *-2 ONLY IOR OTA0 FORM "OTA SC" INST STA OTA1 AND STA OTA2 STORE IT STA OTA3 IOR BIT6 FORM "STC SC" INST STA STC1 AND STORE IT XOR B5000 FORM "CLC SC,C " INST STA CLC1 AND STORE IT STA CLC2 XOR BIT11 FORM "STC SC,C" INST STA STCC1 AND STA STCC2 STORE STA STCC3 IT STA STCC4 XOR B1200 FORM "LIA SC" INST STA LIA1 AND STORE IT IOR BIT9 FORM "LIA SC,C" INST STA LIA2 AND STORE IT IOR BIT11 FORM "LIB SC,C" INSTRUCTION STA LIB1 XOR BIT9 FORM "LIB SC" INSTRUCTION STA LIB2 XOR BIT8 FORM "STF SC" INST STA STF1 AND STORE IT LDA EQT4,I GET SUBCHANNEL ASR 6 SHIFT TO LSB STA REMOT JMP CNFGR,I SPC 2 REMOT NOP REMOTE/LOCAL FLAG OTA0 OTA 0 BIT11 OCT 4000 B1200 OCT 1200 B5000 OCT 5000 NB4 OCT -4 SKP ******************************************* * * * DMA INSTRUCTION CONFIGURATION ROUTINE * * * ******************************************* SPC 1 DCFGR NOP STA CHAN SAVE CHANNEL IOR OTA0 FORM "OTA 6 OR 7" INST STA OTAD1 AND STORE IT ADA NB4 FORM "OTA 2 OR 3" INST  STA OTAD2 AND STA OTAD3 STORE IT IOR BIT6 FORM "STC 2 OR 3" INST STA STCD1 AND STORE IT IOR BIT11 FORM "CLC 2 OR 3" INST STA CLCD2 AND STORE IT ADA FOUR FORM "CLC 6 OR 7" INST STA CLCD1 AND STA CLCD3 STORE IT XOR B5000 FORM "STC 6,C OR 7,C" INST STA STCD2 AND STORE IT LDB INTBA \ SLA \ INB \ CLEAR BIT 15 OF LDA B,I / PROPER INTBL LOC. ELA,CLE,ERA / STA B,I / JMP DCFGR,I SKP **************************************** * * * BASE PAGE POINTERS AND OTHER EQU'S * * * **************************************** SPC 2 A EQU 0 B EQU 1 .2313 EQU 0 LDMA EQU 0 HDMA EQU 0 SPC 1 TEMP1 EQU CLCD1 TEMP2 EQU C.62 TEMP3 EQU OTAD1 TEMP4 EQU CLCD2 TEMP5 EQU OTAD2 TEMP6 EQU PROC SPC 1 INTBA EQU 1654B SPC 1 . EQU 1657B ESTABLISHES REF POINT EQT1 EQU .+1 EQT4 EQU .+4 EQT5 EQU .+5 EQT6 EQU .+6 EQT7 EQU .+7 EQT8 EQU .+8 NEG. COUNT OF # OF ENTRIES EQT9 EQU .+9 CURRENT ENTRY TYPE # EQT10 EQU .+10 # BUFFER WORDS IN CURRENT ENTRY EQT11 EQU .+11 1ST BUFFER ADDRESS EQT12 EQU 1771B 2ND BUFFR ADDR(=EQT11 IF NO 2ND) EQT13 EQU 1772B LAST WORD OUTPUT (LAST ADDR DAC) SPC 1 EQT15 EQU 1774B TIME-OUT TIMER SPC 1 CHAN EQU 1673B DUMMY EQU 1737B RTORG EQU 1746B RTDRA EQU 1750B AVMEM EQU 1751B BKDRA EQU 1754B SPC 1 BKLWA EQU 1777B SPC 3 ******************* * * * END OF DRIVER * * * ******************* SPC 1 END 80.**0 2J 29010-80001 A S 0122 2313A ALGOL/FTN DRIVER I/F I2313             H0101 ASMBҬB̬ HD33AAG̯N-DVҠɯƠɲ33 NAMɲ33 NԠɲ33 Ԡ.NҬ.. SPà HSUNŠSUSDBYANҠAG̠ϠA̠HŠ33A BSDVS(NN-DMAD.6DMAD.6A.ɲ33SADD HHŠPGAMASASUBUNŠ(AG̠DŠPDUũ. SPà HŠANASAŠASS:(UGA̠UNԠNUMBҩ SPà AҠUSԠ(SSUSSYSMNMAZũ A̠ɲ33(U0 SAUSUSԠ(DSNԠASSHŠDVҩ A̠ɲ33(USAԬG NUNSAԠUŠ-33ABUSY\HSSA ASŠ-33AAVAABŠҠD.6A H:UŠANYNGAVŠNUMB ASŠANYPSVŠNUMB NADDN: AND(SAԬ30NϠS\ 930AVADD\ PANGϠASԠD.6NY 3930AVADDAND PANGϠASԠ GANSMSSNG(NUMBҠƠADNGS ANSDHNA̠AS MPDҠMNAD SKP 3ADUSS(HMPؠ930 A̠ɲ33(UPMDBƬNBƬDҠHMP A̠ɲ33(U3PMDBƬNBƬNAŬAҠ930 H: P0(ASũUNPAD -(UũPAD MD0SNGŠHANN̠(ҠMŠADNGS BKSAN(ANDMDҠƠHANNS SUNA̠SAN 3930ANNA̠SUNA̠SAN BƠBUҠƠHANN̠NUهMBS(GANDSҠ930 ҠBKSANDMNSNB(N HŠHANN̠(GANDũҠSNGŠHANN HŠSANGHANN̠(GANDũҠSUNA̠SAN NNUMBҠƠADNGSϠAK BƠBUҠϠSŠADNGSDMNSNB(N D0(ASũSNGŠNDDHANNS\HMPؠSUNA -(UũDNA̠HANNSNY NAŠ0(ASũA̠MDS(930NYADSANYHANN -(Uũ930SNGŠHANBKSANNY NHBSADDSSNABŠϠ930S ADDSSBؠNY(GANDũ A33AADADSƠ930N̠AD(930NY ŠUSS(DAé A̠ɲ33(UPMDBƬNBƬDMA H: P0(ASũUNPAD -(UũPAD MD0SNGŠHANN̠(ҠMŠADNGS BKSAN(ANDMDҠƠHANNS SUNA̠SAN BƠBUҠƠHANN̠NUMBSҠBKSAN HŠHANN̠ҠSNGŠHANN HŠSAԠANDNDHANNSҠSUNA̠SAN NADBUҠ(DAAAҠHҠDMA NNUMBҠƠSNGSϠMAK BƠBUҠƠDAàSNGSϠBŠUPUԠDMNSNB(N DMA0(ASũNN-DMA\D.6A -(UũDMANY 5ŠUSS(DAàASũ A̠ɲ33(U500BƬN H: BƠBUҠƠDAàADADDSSSϠBŠASD NNUMBҠƠDAàADSϠBŠASD 6ŠUSS(PAҩ A̠ɲ33(U6ìجAŬMUԬSADD H: à0(ASũHANGŠAŠMMDAY -(UũHANGŠAŠAԠNԠPAŠPUS ؠ0(ASũDSABŠNA̠SAԯSP -*(UũNABŠNA̠SAԯSP AŠ0-55DMA̠ҠBASàPDNMSNDS MUԠ0-PҠƠ0MUP S0(ASũSYSMPA -(UũAUAYPA ADD33AADADSƠAUAYPA ŠUSS(ASԠADDSSDҬAD A̠ɲ33(U0MDADDASԩ H: MD0UNƠAD UNNADSԠNנASԠADS ADD33AADADDSSƠAD ASԠHMPؠASԠHANN̠ADSҠSѠSAN N̠USԠ(SMUANUSSAMPŠHD A̠ɲ33(UP H: P0(ASũUNPAD -(UũPAD SKP HŠAG̠ASAŠASS:(UNԠGA̠UNԠNUMBҩ SPà ADŠPDUŠDAANMUSԠBŠNUDDNHŠAG PGAM.HŠAŠANUMBҠƠAYSHSUDBŠDN. HŠNGSANAMPŠƠHנԠMGHԠBŠDN: PDUŠɲ33(UNԬYPŬPAŬMDŬBUƬNDBUƬDSABŬN̩ VAUŠUNԬYPŬPAŬMDŬNDSABŬN̻ NGҠUNԬYPŬMDŬBUƬNDBUƬN̻ BANPAŬDSABŻ DŻ AҠUSԠ(SSUSSYSMNMAZũ ɲ33(UNԬ000DUMMY0DUMMY00 DUMMYSUSԠAPAŠHDҠҠPAAMSADBYNAM SAUSUSԠ(DSNԠASSHŠDVҩ ɲ33(UNԬSAUSGDUMMY0DUMMY00 NUNSAUSUŠ-33ABUSY\HSSA ASŠ-33AAVAABŠҠD.6A NADDN: SAUSAND30NϠS\ 930AVADD\ PANGϠASԠD.6NY 3930AVADDAND PANGϠASԠ GANSMSSNG(NUMBҠƠADNGS ANSDHNA̠AS MPDҠMNAD SKP 3ADUSS(HMPؠ930 HMP: ɲ33(UNԬPAŬMDŬHANNBU۱ݬNNBU۱ݬDN0 930: ɲ33(UNԬ3PAŬMDŬHANNBU۱ݬNNBU۱ݬDSABŬN̩ H: PAŠASŠ(0UNPAD UŠ(-PAD MDŠ0SNGŠHANN̠(ҠMŠADNGS BKSAN(ANDMDҠƠHANNS SUNA̠SAN 3930ANNA̠SUNA̠SAN HANNBUƠBUҠƠHANN̠NUMBS(GANDSҠ930 ҠBKSAN(NGҠAAYHANNBU۱:Nݻ HŠHANN̠(GANDũҠSNGŠHANN HŠSANGHANN̠(GANDũҠSUNA NNUMBҠƠADNGSϠAK NBUƠBUҠϠSŠADNGS (NGҠAAYNBU۱:Nݻ DNASŠ(0SNGŠNDDHANNS\HMPؠSUNA UŠ(-DNA̠HANNSNY DSABŠASŠ(0A̠MDS(930NYADSANYHANN UŠ(-930SNGŠHANBKSANNY NHBSADDSSNABŠϠ930S ADDSSBؠNY(GANDũ N̠33AADADSƠ930N̠AD(930NY SKP ŠUSS(DAé ɲ33(UNԬPAŬMDŬHANNBU۱ݬNUBU۱ݬDMA0 H: PAŠASŠ(0UNPAD UŠ(-PAD MDŠ0SNGŠHANN̠(ҠMŠADNGS BKSAN(ANDMDҠƠHANNS SUNA̠SAN HANNBUƠBUҠƠHANN̠NUMBSҠBKSAN HŠHANN̠ҠSNGŠHANN HŠSAԠANDNDHANNSҠSUNA̠SAN NADBUҠƠHANN̠NUMBSANDDAA AN(DAAAҠHҠDMA(D.6ANY NNUMBҠƠSNGSϠMAK UBUƠBUҠƠDAàSNGSϠBŠUPUԠ-NNDMANY (NGҠAAYUBU۱:Nݻ DMAASŠ(0NN-DMA\D.6A(USŠNAD UŠ(-DMANYBUҩ 5ŠUSS(DAàASũ ɲ33(UNԬ500HANNBU۱ݬNDUMMY00 H: HANNBUƠBUҠƠDAàADADDSSϠBŠASD NNUMBҠƠDAàADSϠBŠASD SKP 6ŠUSS(PAҩ ɲ33(UNԬ6AԬNA̬PDMUPҬSìADDSS0 H: AԠASŠ(0HANGŠAŠMMDAY UŠ(-HANGŠAŠAԠNԠPAŠPUS NA̠ASŠ(0DSABŠNA̠SAԯSP UŠ(-NABŠNA̠SAԯSP PD0-55DMA̠ҠBASàPDNMSNDS MUPҠ0-PҠƠ0MUP SàASŠ(0SYSMPA UŠ(-AUAYPA ADDSS33AADADDSSƠAUAYPA ŠUSS(ASԠADDSSDҬAD ɲ33(UNԬ0MDŬADDSSASADSDUMMY00 H: MDŠ0UNƠAD UNNADSԠNנASԠADS ADDSS33AADADSƠASԠADSD ASADSHMPؠASԠHANҠSѠSAN N̠USԠ(SMUANUSSAMPŠHD ɲ33(UNԬPAŬ0DUMMY0DUMMY00 H: PAŠASŠ(0UNPAD UŠ(-PAD MAKŠSUŠA̠PAAMFSUSDNA̠AGŠNYP HHSŠUSDNHŠDAAN SKP 33AADDSSSAŠASS: HMP:BS9-HH0BؠNUMB BS5-HHADSԠHN0B BS0-HHHANN̠NHMP (DƠNPUSVNHNY 930N̠AD:BS5-ADSԠN0Bؠ0 930HANNS:BS6-HH930BؠNSPDN̠D BS3-5930MDUŠHNB BS0-HANN̠NMDU DAìADANDAUAYPA: BԠMUSԠBŠSԠBS35AҠҠDMA BԠDAàPAŠN̠(USҠSDҠDMA USҠMAYSԠASDSDDUNG UNPADAS(NN-DMA BS9-0BؠNUMB BS5-ADSԠHN0B BԠDAàHANN̠(NԠUSDBYPAҠҠAD BԠ0DAàAGN̬ASԠADSD MUSԠHAVŠHSSԠϠҠDMA. PADSNGSNNŠDAàHANN MUSԠASϠHAVŠHSBԠSԠϠ. ADAàMAYBŠASDDUNGADAAANS BYSNGBԠƠHŠDAAD. ҠDAABԠMUSԠBŠMADŠA0. ҠSUNA̠SANNDASBUҠHAN MUSԠNANDS(SAԠHANN ANDNDHANN̩. HNUSNGHŠASԠADDSSDҠNSNG-NDD HANNSHŠSANGHANN̠MUSԠBŠANVNNUMB SKP ANGPAAMҠSԠ SPà UNԠNP YPŠNP PAŠNP MDŠNP NBUƠNP\ NUMBҠNP\ASϠ DBUƠNPA̠Ϡ.. MDؠNP .930NP SPà SAԠƠUNŠ SPà ɲ33NP SB.NҠGԠ!yPAAM DƠUNԠADDSSSNϠSԠABV SPà DAUNԬɠGԠUNԠNŠNUMB DBYPŬɠGԠYPŠƠUS SZBAҠUS? MPMŠN SPà A̠ҠAҠUSԠ SPà SA+SŠUNԠƠNA SB..A̠ NPAҠUS MPɲ33ɠDN SPà MŠBҬBҠN PBϠUS?(SSH SSYS MPS̠N SKP A̠ҠN̠(SSHѠ SPà ҠN̠SԠN̠ѠNϠUNԠ DBPAŬɠSHŠPA SSBϠBŠUSD? ҠBԱ0YS-ADDPAŠMDŠB SA+SŠѠDŠNA SB..A̠ NPN: MP-SSHPAN MPɲ33ɠDN SPà S̠PBBԱSAUSUS? SSYS MPAGANN SPà A̠ҠSAUSUSԠ SPà ҠBԱSԠSAUSѠNϠUNԠ SA+SŠѠDŠNA SB..A̠ NPSAUS SPà BŬBMNAŠBԠ5ƠANG SBMDŬɠUNANGϠUS ANDMASKNMAN SAPAŬɠANDUN MPɲ33ɠDN SPà AGANDAMDŬɠMV SAMDŠNDS DAMDجɠMMD SAMDؠANDMD DAUNԬɠVҠUNԠNŠ SPà SBMPؠUS? MPŠN SPà A̠ҠMPؠUSS SPà ҠADSԠADѠNϠUNԠ B̠SHSA SSBHMPؠUS? SPà  A̠ҠMPؠUSԠ SPà ҠBԱSԠMPؠBԠNѠDŠD SKP ASҠMP'SANDDAà SPà DAMPؠDBPAŬɠSHŠPA SSBϠBŠUSD? ADҠBԱ0YS-ADDPAŠMDŠB SAB DAMDŠGԠMDŠAND ANDHŠSAŠ AƬA̠HNPSNN A̠BS6 ҠBPAŠMDŠNѠD SPà A̠ADŠAS SPà DBMDؠSHSҠDNA PAҠSSBHANNS(ҠGANNY? ҠBԸYS-SԠAMDŠBԠ( DB.930ɠGԠANDPAŠ0 SBMDؠADDSSƠ930N SPà DBNUMBҬɠPUԠƠADNGS(ҠPA SBNUMBҠANGũNNUMBҠD SA+SŠѠDŠNA SPà SB..A ѠNP MP-DV DƠNBUƠ DàADҠ SPà A SAMD MPɲ33ɠDNŠ SKP A̠ҠŠUSS SPà ŠҠŠSԠŠѠNϠUNԠ SSBSBSSPAҠҠAD? MPDAàNϠ(DAé SPà A̠ҠPAҠUSԠ SPà ҠBԱSԠPAҠBԠNѠD SA DANBUƬɠMVŠND SANBUƠMNBUƠ(PAŠPD DA B SSBAD? MPADYS DBPAŬɠGԠ"HANG"PAAM SSBHANGŠAԠNԠPAŠPUS? ҠB6YS-PUԠ"HANG"BԠN DBMDŠGԠ"ԠSS"PAAM SSBԠSAԯSP? ҠBԷYS-PUԠSSBԠN SPà DBDBUƬ8640ɠPUԠPAҠAD SBUNԠADDSSN DBMDؠDBUƠAND SBDBUƠPUԠAUAY DBUNԠPAҠAG MPPAҠNϠMD SPà DAàANDDAàASŠAS SPà DAàPBNŠDAàDAA? MPDAAYS BSԠMDؠϠUŠ(DAàASũ MPPAҠNSHASŠA̠NPA SPà DAADBMDؠDMA? SSBSS MPDAMPؠN BNBSԠMDŠ SBMDŠDMA MPDAMP SKP NSANS SPà BU SPà B6Ԡ00 BԷԠ00 BԸԠ00 BԱ0Ԡ000 BԱԠ000 BԱԠ0000 N̠Ԡ300 MASKԠ00003 ADԠ000 ŠԠ000 NŠԠ ϠԠ HŠԠ3 SPà NDƠNAŠUNŠ SPà ND ޥ6 3 A 29011-80001 E S 0122 2313B RTE - DVR I/F MAIN MODULE, R2313             H0101 GASMB,R,B,L,C HED 2313B RTE-DVR I/F -- MAIN MODULE 75021 -TLD- NAM R2313,7 29011-60001 REV. E 75021 TLD ENT R2313,A2313,B2313,S2313 ENT ?QUE?,?LU? EXT EXEC,.ENTR SPC 2 * THIS SET OF ROUTINES IS USED TO OPERATE THE 2313A * RTE DRIVER (DVR62). THIS SET OF ROUTINES ALLOW THE * USER TO TAKE READINGS FROM MULTIPLEXER CARDS AND TO * ISSUE SUB-SYSTEM NORMALIZE. FOR SEQUENTIAL SCANS, A * CALL TO SET UP THE LAST ADDRESS DETECTOR (LAD) IS * INCLUDED. FOR OPERATION WITH 2930A, DAC, ETC. OTHER * MODULES ARE REQUIRED. ADDITIONAL ENTRY POINTS (?QUE? * AND ?LU?) ARE AVAILABLE TO THESE OTHER MODULES. * * TO USE THIS ROUTINE IT IS NECCESSARY TO CONSTRUCT A * QUEUE BUFFER AND PASS ITS LOCATION AND LENGTH TO THIS * ROUTINE. THE LENGTH OF THIS BUFFER MAY BE DETERMINED * BY THE USER WHEN HE KNOWS THE NUMBER AND TYPE OF CALLS * WHICH MUST BE USED IN A GIVEN OPERATION. THE NUMBER OF * WORDS CONSUMED BY EACH TYPE OF CALL IS AS FOLLOWS: * * 1. SYSTEM NORMALIZE 1 * 2. MPX (N=1) 3 * 3. MPX, MODE=0 14 (PACED) & 10 (UNPACED) * 4. MPX, MODE=1 14 * 5. MPX, MODE=2 14 * 6. LAD 5 * 7. SYSTEM PACER 4 * 8. AUXILIARY PACER 5 * 9. 2930A (N=1) 8 * 10. 2930A, MODE=0 18 (PACED) & 14 (UNPACED) * 11. 2930A, MODE=1 18 (PACED) & 14 (UNPACED) * 12. 2930A, MODE=2 18 (PACED) & 14 (UNPACED) * 13. 2930A, MODE=3 18 (PACED) & 14 (UNPACED) * 14. DAC DATA, MODE=0 4 * 15. DAC DATA, MODE=1 4 * 16. DAC DATA, MODE=2 4 * 17. DAC DATA, DMA 3 * 18. DAC ERASE 5 * * * THE FOLLOWING CALLS SET UP THE BUFFER (A CODE PROCEDURE * MUST BE DECLARED FOR ALGOL - BOTH PARAMETERS ARE INTEGER * AND ONLY LENGTH MAY BE CALLED BY VALUE): * * FORTRAN: CALL B2313(IQBUF,LNGTH) * * ALGOL: B2313(QUEBUFF[1],LENGTH); * * ASSEMBLY: JSB B2313 (DECLARED EXT) * { DEF CONT1 * DEF IQBUF * DEF LNGTH * CONT1 SKP * ALL OPERATIONAL CALLS MUST CONTAIN THE LOGICAL UNIT * NUMBER (LU) FOR THE DEVICE. SETTING LU NEGATIVE WILL * CAUSE THE SPECIFIED OPERATION TO BE PLACED IN THE QUEUE * BUT THE DRIVER IS NOT CALLED. SETTING LU POSITIVE WILL * CAUSE THE SPECIFIED OPERATION TO BE PLACED IN THE QUEUE * AND THE DRIVER IS CALLED WITH ALL QUEUE'D OPERATIONS * * UPON RETURN FROM A CALL THE VALUE OF THE PARAMETER "IRTN" * WILL BE AS FOLLOWS: * * IRTN = 0 CALL PLACED IN QUEUE (DRIVER NOT CALLED) * = 1 DRIVER CALLED & ALL CALLS IN QUEUE COMPLETED * =-1 NO QUEUE HAS BEEN SET UP \ * =-2 QUEUE BUFFER LENGTH EXCEEDED > REJECTS * =-3 MORE THAN ONE LU SPECIFIED / * =-4 TRANSMISSION ERROR STATUS RETURNED FROM DRIVER * * * CALLS FOR SYSTEM NORMALIZE: * * FORTRAN: CALL S2313(LU,IRTN) * * ALGOL : S2313(LU,IRTN); * * ASSEMBLY: JSB S2313 * DEF CONT2 * DEF LU * DEF IRTN * CONT2 * * * CALLS FOR MPX READINGS: * * FORTRAN: CALL R2313(LU,IRTN,IP,MD,LBF,N,IBF,ID) * * ALGOL: R2313(LU,IRTN,IP,MD,LBF[1],N,IBF[1],ID); * * ASSEMBLY: JSB R2313 * DEF CONT3 * DEF LU * DEF IRTN * DEF IP * DEF MD * DEF LBF * DEF N * DEF IBF * DEF ID * CONT3 * * WHERE: * IP = 0 (FALSE) FOR UNPACED * = -1 (TRUE) FOR PACED * * * CONTINUED NEXT PAGE SKP * PARAMETER DEFINITIONS CONTINUED: * * MD = 0 FOR SINGLE CHANNEL (1 OR MORE READINGS) * = 1 FOR BLOCK SCAN (RANDOM ORDER OF CHANNELS) * = 2 FOR SEQUENJTIAL SCAN * * LBF = BUFFER OF CHANNEL NUMBERS FOR BLOCK SCAN * = THE CHANNEL FOR SINGLE CHANNEL * = THE START CHANNEL FOR SEQUENTIAL SCAN * * N = NUMBER OF READINGS TO TAKE * *** SEE NOTE ON DMA BELOW *** * * IBF = BUFFER IN WHICH TO STORE READINGS * * ID = 0 (FALSE) SINGLE ENDED CHANNELS \ HLMPX SEQUENTIAL * = -1 (TRUE) DIFFERENTIAL CHANNELS / ONLY * * *** FOR DMA OPERATION *** * * IF FAST SEQUENTIAL SCANS OR SINGLE CHANNEL OPERATIONS * ARE NEEDED, DMA MAY BE REQUESTED BY SETTING N NEGATIVE. * THE ABSOLUTE VALUE OF N MUST STILL BE THE NUMBER OF * READINGS TO TAKE. * * ++++++++++ A NOTE OF CAUTION ++++++++++ * * IF DMA IS REQUESTED IT WILL BE ASSIGNED TO THE DRIVER * FOR ALL CALLS IN THE QUEUE WHETHER USED OR NOT. * ALL CALLS WHICH CAN USE IT WILL. IT IS, THEREFORE, * RECOMMENDED THAT SLOW OPERATIONS ARE NOT MIXED * WITH DMA OPERATIONS. * * * CALLS TO SET UP LAST ADDRESS DETECTOR: * * FORTRAN: CALL A2313(LU,IRTN,ION,ICA,LAST) * * ALGOL: A2313(LU,IRTN,ION,ICA,LAST); * * ASSEMBLY: JSB A2313 * DEF CONT4 * DEF LU * DEF IRTN * DEF ION * DEF ICA * DEF LAST * CONT4 * * WHERE: * ION = 0 (FALSE) TURN OFF LAD * = -1 (TRUE) TURN ON LAD & SET NEW LAST ADRS * * ICA = 2313A CARD ADDRESS OF LAD * * LAST = MPX LAST CHANNEL ADRS FOR SEQUENTIAL SCAN SKP ************************************ * * * S2313 -- SYSTEM NORMALIZE CALL * * * ************************************ SPC 2 .LU NOP .IRTN NOP SPC 1 S2313 NOP JSB .ENTR DEF .LU SPC 1 LDA .LU,I CHECK LU FOR WAIT & FOR DIFF LU JSB ?LU? AND MSEE IF QUEUE BUFF EXISTS JMP ENDS REJECT SPC 1 STA LU PLACE LU IN QCALL STB WAIT SET UP WAIT PARAMETER IN QCALL SPC 1 CCA SET ENTRY STA XLNTH LENGTH WORDS STA ELNTH IN QCALL SPC 1 CLA,INA SET TYPE 1 CALL STA EW1 AS ENTRY IN QCALL SPC 1 JSB QCALL CALL TO QUEUE SPC 1 ENDS STA .IRTN,I SET RETURN CODE JMP S2313,I SKP *********************** * * * R2313 -- MPX CALL * * * *********************** SPC 2 LU. NOP IRTN. NOP IP NOP MD NOP LBF NOP N NOP IBF NOP ID NOP SPC 1 R2313 NOP JSB .ENTR DEF LU. SPC 1 LDA LU.,I CHECK LU FOR WAIT & DIFF LU JSB ?LU? AND SEE IF QUEUE BUFF EXISTS JMP ENDR REJECT SPC 1 STA LU PLACE LU IN QCALL STB WFLAG SET UP WAIT INDICATOR SPC 1 CLB LDA IP,I ARE READINGS SSA TO BE PACED? LDB BIT12 YES STB PBIT SET OR CLEAR PACE BIT SPC 1 CLA LDB N,I IS DMA SSB,RSS TO BE USED (N<0)? JMP *+3 NO CMB,INB YES - MAKE N + AND CCA SET-UP DMA FLAG STB N SAVE N DIRECT STA DMA SET OR CLEAR DMA FLAG SKP * ** ISSUE FIRST WORD ** SPC 1 CLA,INA \ STA EW2 \ LDA LBF \ STA EW3 \ LDA THREE \ / 3 \ STA EW1 > SET UP ENTRY < 1 > CMA,INA / \ LBF / STA ELNTH / CCA / STA XLNTH / STA WAIT / SPC 1 LDA LBF,I GET & MASK AND MASK1 FIRST CHANNEL # CPB ONE N=1? JMP RANDM YES - GO DO RANDOM MODE IOR DIGTZ NO - OR ON DIGITIZE COMMAND STA LBF,I & PUT BACK IN BUFFER SPC 1 JSB QCALL MAKE CALL WITH WAIT SSA REJECT? JMP ENDR YES SPC 2 * ** DETERMINE MODE ** SPC 1 LDA MD,I GET MODE SZA,RSS SINGLE CHANNEL? JMP SINGL YES CPA ONE BLOCK SCAN? JMP BLOCK YES SPC 2 * ** SEQUENTIAL SCAN ** SPC 1 LDA LBF,I GET START CHANNEL & AND MASK2 MAKE SURE IT IS EVEN ADA MIN2 REDUCE CH # BY 2 AND MASK1 PREVENT NEG CH ROLLOVER IOR SEQTL OR IN SEQUENTIAL COMMAND IOR PBIT OR IN PACE BIT LDB ID,I ARE THE CHANNELS SSB,RSS DIFFERENTIAL? INA NO - SET S.E. INDICATOR SKP * ** SEQUENTIAL SCAN CONT & SINGLE ** SPC 1 SISEQ STA XW1 PLACE WORD FOR QCALL CLA \ STA EW2 \ LDA MIN2 \ SET UP / 3 \ STA XLNTH / ENTRY < 0 > LDA BIT15 / \ XW1 / STA EW3 / SPC 1 JSB QCALL MAKE CALL WITH WAIT SSA REJECT? JMP ENDR YES JMP SING SPC 2 * ** SINGLE CHAN -- PACED? ** SPC 1 SINGL LDA PBIT TO BE SZA,RSS PACED? JMP SING NO IOR LBF,I YES - ADD PACE BIT JMP SISEQ SPC 2 * ** SINGLE CHAN & FINISH SEQ ** SPC 1 SING LDA IBF \ STA EW3 \ START SETTING LDA N > UP ENTRY STA EW2 / JMP FINIS / SPC 2 WFLAG NOP PBIT NOP DIGTZ OCT 120000 SEQTL OCT 160000 MASK2 OCT 7776 ONE DEC 1 MASK1 OCT 7777 BIT12 OCT 10000 SKP * D ** BLOCK SCAN ** SPC 1 BLOCK LDA DIGTZ FORM COMPLETE DIGITIZE IOR PBIT COMMAND WITH PACE BIT STA EW4 AND SAVE TEMPORARILY CLA,INA SET POINTER ADA LBF FOR SECOND STA XW2 WORD IN LBF STA EW3 AND SET EW3 CCB SET COUNTER ADB N FOR N-1 STB EW2 & SAVE AS EW2 CMB,INB & MAKE NEG FOR CNTR SPC 1 LDA XW2,I \ AND MASK1 \ IOR EW4 \ STA XW2,I > PUT COMMAND ON ALL ISZ XW2 / CHAN #'S IN LBF INB,SZB / JMP *-6 / SPC 1 LDA FIVE \ STA EW1 \ / 5 \ LDA IBF \ SET UP / N-1 \ STA EW4 / ENTRY \ LBF+1 / LDA MIN4 / \ IBF / STA ELNTH / SPC 1 JSB QCALL MAKE CALL WITH WAIT SSA REJECT? JMP ENDR YES SPC 2 * ** GET FINAL READING IN BLOCK SCAN ** SPC 1 LDA EW2 \ ADA IBF \ STA EW3 > START SETTING CLA,INA / UP ENTRY STA EW2 / SPC 2 * ** FINISH ALL BUT RANDOM ** SPC 1 FINIS LDA FOUR \ STA EW1 \ CCA \ FINISH / 4 \ STA XLNTH > ENTRY < N OR 1 > ADA MIN2 / \ IBF OR IBF+N-1 / STA ELNTH / JSB QCALL / SPC 1 SSA REJECT? JMP ENDR YES SKP LDA THREE \ STA EW1 \ LDA CLEAN \ STA XW1 \ MAKE ENTRY TO LDA MIN2 \ ISSUE "CLEAN" STA XLNTH / COMMAND FOR STA EW3 / LLMPX CARD CLA,INA / STA EW2 / JMP LAST / Mb SPC 3 MIN4 OCT -4 BIT15 OCT 100000 FOUR DEC 4 FIVE DEC 5 CLEAN OCT 120000 SPC 3 * ** RANDOM (N=1) CALL ** SPC 1 RANDM IOR BIT15 FORM IOR PBIT RANDOM STA LBF,I COMMAND SPC 1 \ LDA FIVE \ STA EW1 \ / 5 \ LDA IBF \ SET UP / 1 \ STA EW4 / ENTRY \ LBF / LDA MIN4 / \ IBF / STA ELNTH / SPC 2 * ** FINAL CALL FOR ALL MODES ** SPC 1 LAST LDA WFLAG SET WAIT STA WAIT CONDITION IN QCALL SPC 1 JSB QCALL MAKE FINAL (OR ONLY) CALL SPC 2 * ** EXIT POINT ** SPC 1 ENDR STA IRTN.,I JMP R2313,I SPC 2 LAD OCT 40000 MASK OCT 7740 THREE DEC 3 SKP *********************************************** * * * A2313 -- LAST ADDRESS DETECTOR (LAD) CALL * * * *********************************************** SPC 2 LU.. NOP ?IRTN NOP ION NOP ICA NOP LASTA NOP SPC 1 A2313 NOP JSB .ENTR DEF LU.. SPC 1 LDA LU..,I CHECK LU FOR WAIT & DIFF LU JSB ?LU? AND SEE IF QUEUE BUFF EXISTS JMP ENDA REJECT SPC 1 STA LU PLACE LU IN QCALL STB WAIT SET UP WAIT PARAMETER IN QCALL SPC 1 LDA ICA,I FORM AND MASK LAD IOR LAD COMMAND STA XW2 & PLACE FOR ENTRY SPC 1 LDA LASTA,I GET END AND MASK1 CHANNEL NUMBER LDB ION,I IS THIS A SSB TURN ON REQUEST? IOR BIT12 YES - SET TURN ON BIT STA XW1 PLACE FOR ENTRY SPC 1 LDA TWO \ STA EW2 \ LDA BIT15 \ STA EW3 \n / 3 \ LDA THREE > SET UP ENTRY < 2 > STA EW1 / \ XW2 / CMA,INA / STA XLNTH / STA ELNTH / SPC 1 JSB QCALL MAKE CALL FOR LAD SPC 1 ENDA STA ?IRTN,I RETURN WITH JMP A2313,I STATUS INFORMATION SKP ************************* * * * QCALL - CALLS ?QUE? * * * ************************* SPC 1 QCALL NOP JSB ?QUE? LU NOP LOGICAL UNIT REF # DMA NOP DMA FLAG WAIT NOP WAIT FLAG XLNTH NOP # OF PARAMS BELOW XW1 NOP \ PARAMETER(S) TO BE XW2 NOP / PLACED IN END OF QUEUE BUFF ELNTH NOP ENTRY LENGTH (1, 3, OR 4) EW1 NOP \ EW2 NOP \ ENTRY EW3 NOP / EW4 NOP / JMP QCALL,I SPC 2 MIN2 OCT -2 SPC 2 ******************************************* * * * ?LU? -- LU, WAIT, & QUEUE AVAIL CHECK * * * ******************************************* SPC 1 ?LU? NOP LDB QFLAG HAS A QUEUE BUFFER SSB BEEN SET UP YET? JMP *+3 YES CCA NO - REJECT WITH JMP ?LU?,I A = -1 CLB IS THE CALL SSA,RSS PROGRAMMED FOR WAIT? JMP *+3 NO CMA,INA YES - LU_-LU CCB STB WAIT SET OR CLEAR WAIT FLAG (TEMP) LDB ECNTR NUMBER OF SZB,RSS ACTIVE ENTRIES = 0? JMP OK YES LDB CONWD NO - CHECK LU'S SWP TO SEE AND B77 THAT THEY CPA B ARE THE SAME JMP OK YES LDA MIN3 NO - REJECT JMP ?LU?,I Q8 A = -3 OK ISZ ?LU? OK RETURN - ADVANCE RTN ADRS LDB WAIT GET WAIT FLAG FOR RETURN JMP ?LU?,I SKP B EQU 1 MIN3 OCT -3 QFLAG NOP B77 OCT 77 SPC 4 ******************************************* * * * B2313 -- QUEUE BUFFER SETTING ROUTINE * * * ******************************************* SPC 2 FWAB NOP LWAB NOP SPC 1 B2313 NOP JSB .ENTR DEF FWAB SPC 1 LDA FWAB SET FIRST WORD OF BUFFER INTO STA FWOB FIRST WORD AVAILABLE IN BUFF SPC 1 ADA LWAB,I FORM LAST WORD ADA MIN1 OF BUFFER AND STA LWOB SAVE, ALSO SET LAST STA LWAB WORD AVAILABLE IN BUFFER SPC 1 CCA SET QUEUE BUFFER STA QFLAG AVAILABLE FLAG SPC 1 CLA CLEAR STA ECNTR ENTRY COUNTER STA CONWD & CONTROL WORD SPC 1 JMP B2313,I SPC 2 MIN1 OCT -1 BIT6 OCT 100 TWO DEC 2 ELEVN DEC 11 ECNTR NOP SKP *************************************************************** * * * ?QUE? - PUTS ENTRIES IN QUEUE BUFF & CALLS DVR WHEN READY * * * *************************************************************** SPC 2 ?QUE? NOP LDA ?QUE? SET PARAMETER STA PNTR POINTER ADA ELEVN ADVANCE STA ?QUE? RETURN ADDRESS SPC 1 LDA PNTR,I GET LU & ADVANCE ISZ PNTR PARAMETER POINTER LDB ECNTR IF THERE ARE NO ENTRIES SZB,RSS CURRENTLY IN THE QUEUE STA CONWD THEN SET LU SPC 1 LDB PNTR,I GET DMA FLAG AND ISZ PNTR ADVANCE PARAMETER POINTER IOR BIT6 SET 4oBIT 6 SSB OF CONWD IF STA CONWD DMA IS REQUESTED SPC 1 LDA PNTR,I GET & SAVE WAIT ISZ PNTR FLAG AND ADVANCE STA WAIT PARAMETER POINTER SPC 1 LDA PNTR GET PARAMETER POINTER AND SAVE LDB PNTR,I AND GET XLNTH STA ?LU? ADA THREE ADVANCE PARAMETER STA PNTR POINTER SPC 1 L0 ISZ ?LU? ADVANCE XTRA P POINTER INB,SZB,RSS DONE? JMP L1 YES LDA FWAB NO - CHECK TO ADA MIN1 SEE IF CPA LWAB LWABP 29012-80008 B S 0122 2313A VERIFICATION (CODES # 3)             H0101 ~HD33AVƠ--DŠPDUS--NGҠ NGҠ--NGUŠɯϠNSUNS SPà HNSANGADDSSSA̠000 AUMPϠHŠUSSϠHAԠA DVSANBŠDND. SPà NGҠà0 A SBSԠSAVŠSMŠANS(SԠMũ DBYà\\\\\\\\\\\\\\\\\\\ SBY̬ɠSŠYNK\ DBàSŠ33A\ SBSìɠAP̠\ SA.930ɠAҠ\ SAAD.ɠA̠\ SAGNYɠPSSBŠ\N SAPɠSԠS SAPADɠNDNSM NASԠ SADVYàKYBAD SABAHɠMDŠ DAABԠSԠABԠAUŠ SAB̴ SPà SBADDSGԠԠADDS DAϠSԠԠNGH SABɠϠ NBMAKŠADDSƠSԠD SBADƠYNYANDSAV ADBHŠMAKŠADDSƠHD DABɠƠYNYANDGԠDVҠADS SAADSAVŠDVҠD.00NYPN DBADɠGԠDSԠD DBBɠGԠAP̠NNS SPà NAADNנSԠD ANDBANDSAŠ SBSHKSԠVAD? HԠBN MPNYAGAN SAADɠYS-PUԠN SAYSàSAVŠSàҠY DAYSìɠSAVŠNNSƠ̠ SAYANHҠDV SBYSìɠSԠYAP SPIà SB..AҠɯ NŲԠNY SKP NDADMSGϠGԠ33A DBM̱S SBGԠD PAYSàSAMŠASY? SSYS-PS! SBSHKSԠVAD? SBҠN MPNYAGAN SASàSAVŠSԠD SPà SBADDSGԠԠADDS ADBVŠSԠҠ33A SBADNYANDSAV DBBɠGԠD33AS SAADɠSԠNנ33AS DABɠGԠAP̠NNS PBYSàMAKŠSUŠHSSH DAYPPҠAP̠N. SAàSAVŠNNS SASìɠSԠNנAP SPà N3DADMSGϠGԠPH- DBM̲ADҠS SBGԠD SZASSSԠZ? MPNYYS-NϠPHAD PAYSàSAMŠASY? MP+YS-PS! PASàSAMŠAS33A? SSYS-PS! SBSHKSԠVAD? SBҠN MPN3YAGAN SASàSAVŠSԠD SPà SBADDSGԠԠADDS DAHŠHANGŠԠNGH SABɠϠH DASàGԠPҠSԠD ADBBSԠԠADDSҠPҠNY SABɠPUԠNנSàN DAYSìɠGԠYAP̠NNS SASìɠANDSԠҠP ADBHŠSԠԠADDSҠDVҠNY DAADGԠYDVҠNY SABɠANDSԠNϠPҠԠNY SPà DAB3SԠUPAPŠMD SSҠPH-AD NYASԠUPAPŠMD SAḆҠY SKP DASàGԠ33ASԠD SPà ҠSSؠMSSؠNSUN(33A SASS\ SASS3\ SASS\ SASS5\AND SAADSŠ SAD SASS SASS9 SPà ҠB500MAؠNSUN(33A SAA\ SAA3\ SAA\AND SAA5SŠ SAA6 SAA SPà ҠB00MSàجàNSUN(33A SASò\ SAS3\ SASô\ SAS5\ SAS6ANDSŠ SAS÷ SAANDG SASø AS9 SPà ҠB9BMàؠNSUN(33A SAòANDSŠ SPà ҠB600MSƠؠNSUN(33A SASƲANDSŠ SPà ҠB00MAؠNSUN(33A SAA\AND SAASŠ SPà DAYSàS ҠAؠMD SAAMMAND ҠB00MSàجàNSUN(Y SASñANDSŠ ҠB9BMàؠNSUN(Y SAñANDSŠ ҠB600MSƠؠNSUN(Y SASƱANDSŠ DAYSìɠSAVŠAP ANDB̠NK SAY̠ANDNK DAAɠNNS SAYà(Y MPBGϠNϠAG SKP GԠ--GԠYҠPHADҠSԠDŠ SPà GԠNP SAMSSPUԠMSSAGŠPAAMS SBM̠UNϠA̠Ϡ SB..UPU Ԡ000US MP-ҠA MSSNPS M̠NPD ANA\ BNB\ SB.D.\ DƠM3NPUԠN DƠ+SԠD SB.. MPGԬɠ SPà3 SԠ-SAVŠSMŠANSSԠMŠNY SPà GH SԠNP DBB̴SAVŠAB SBABԠAPABY DBḆSAVŠNMA SBB3APŠMD DBDϠG BŬBAND DBBɠSAV ADBB30MԠ SBDϠADDSS DBDҠSԠUPM SBDϬɠҠSAP SZDϠANDUN DBSԠAҠH ADBMNA̠ SABɠHSUN ADBBUNϠNGҠUN MPBɠAҠ"NԠSԠM"AA SPà B30Ԡ30USDNYBY DҠMPMҠHSUN SKP SHK--HKҠVADSԠDŠ SPà SHKNP SAGԠSAVŠS ADANB0S SSAMŠHAN? MPSHKɠNϠ-ҠUN SPà DAGԠS MANASSHAN ADAB60? SSA MPSHKɠNϠ-ҠUN DAGԠSŠS SZSHKSԠK SZSHKUN M* PSHK SPà ADDS--NDԠADDSS SPà B ADDSNP DBSADGԠSԠADDSS SSBSSSԠND? MP+N BŬBYS-MɠB DBBɠGԠNԠV MP-GϠHKAGAN ADBSؠKMAKŠԠADDSS MPADDS HD33AVƠ--DŠPDUS--SVŠUNS HK--AԠҠYϠBŠAVAABŠ SPà HKNP SB..SAUSA Ԡ000Ϡ SSABUSY MP-3YS MPHKɠN SPà DVDŠ--SԠDANDBԠPNSҠVD SPà DVDŠNP B SB.DVDVDŠDG-BY6 DƠD6UNԠNAMANDҠNB ADABUҠADDBUҠADDSSϠ SAPNҠϠSԠDPN MBSԠҠNG-ҠBԠUN MPDVDŬ SPà Ҡ--PNԠ"??"NY SPà B ҠNP SB..UPU Ԡ000MSSAG MP- DƠNGY Dà-3(?? MPҬ SKP  HHK--HKҠҽҠ). THIS REQUEST HAS THE * SPECIAL FORMAT: * * (EQ T7,I) 'CONTAINS A POINTER TO A GROUP OF * 3 OR 4 WORDS CONTAINING THE BUFFER ADDRESS(WORD 1), * LENGTH(WORD 2) AJtND TRACK/SECTOR(WORD 3 OR IF SIGN * BIT IS SET ON WORD 3 THEN IT IS THE SECTOR (THE SIGN * IS STRIPED) AND WORD FOUR IS THE TRACK) ADDRESS FOR * EACH TRANSFER. THE GROUP OF TRANSFER VECTORS IS * OPEN-ENDED AND IS TERMINATED BY A ZERO-WORD. * ALL TRANSFERS ARE MADE BEFORE A COMPLETION * RETURN TO IS MADE. SKP RWSUB NOP READ/WRITE ROUTINE ENTRY * E = 0 WRITE * E = 1 READ * * B = BUFFER ADDRESS * A = -LENGTH IN WORDS * * * STB UBUF SAVE BUFFER ADDRESS. STA LN.N SAVE LENGTH LDB TRACK GET THE TRACK AND BLF,BLF COMBINE WITH ADB UNIT THE UNIT CPB LTRUN SAME AS IN LOCAL BUFFER? LDB BM10 YES; B_-8. LDA HDSC CHECK THE HEAD SECTOR CPA LHDSC SAME AS IN LOCAL BUFFER? INB YES; !_B+1 LDA LN.N UNDER 129 WORDS SEZ,RSS IF WRITE JMP WRT1 GO DO WRITE TESTS * ADA D128 REQUESTED? CPB BM7 ALL CONDITIONS MET? SSA MET? JMP RD2 NO; GO READ * LDA LBUFA YES; SET FOR MOVE CPA UBUF IF DATA IS WANTED IN LOCAL JMP CLE BUFFER CLE AND RETURN * STA LBUFP SET UP FOR LDA LN.N MOVE LDB UBUF JSB MOVE AND MOVE DATA CLE CLE SET E FOR CONTINUATION JMP RWSUB,I RETURN * B40 EQU CLE * * * RD2 LDB UBUF READ; TO LOCAL CPB LBUFA BUFFER? STA LHDSC SHOW LOCAL SECTOR BUFFER ENPTY WRT1 SSB,RSS IF SAME TRACK JMP WRIT DIFFERENT TRACK SKIP * ADA D128 AND REQUEST TO WRITE MORE THAN 128 CLE,SSA,RSS WORDS OR CPB BM7 TO WRITE ON LOCAT SECTOR STB LHDSC YES; SET TO SHOW NONE IN WRIT LDA TRACK SET FOR SEEK JSB SEEK SEEK RECORD w LDB RDCM GET THE READ COMMAND SEZ,CME,RSS READ? LDB WRCM NO - USE WRITE COMMAND ADB UNIT SET UNIT BITS CLCC5 CLC CMND PRESET THE COMMAND CHANNEL OTBC2 OTB CMND SEND COMMAND TO THE CONTROLLER LDB UBUF GET BUFFER ADDRESS SEZ,RSS ADB ADDCM AND SET DIRECTION BIT STFD STF DATA SET UP THE INTERFACE SSB FOR THE STCD1 STC DATA,C TRANSFER LDA DMAC GET THE DMA CONTROL WORD DMASW NOP DMA SWITCH NOP IF CHAN #6 ELSE RSS JMP CHAN6 CHANNEL SIX; GO DO IT. * OTA 7 CHANNEL 7; SEND CONTROL WORD CLC 3 SET FOR BUFFER OTB 3 SEND BUFFER ADDRESS LDA LN.N GET LENGTH STC 3 SET FOR LENGTH OTA 3 SEND IT. STC 7,C START DMA STCC1 STC CMND,C START DISC CLC 7 INHIBIT DMA INTERRUPT JSB WAITI GO WAIT FOR INTERRUPT STF 7 FOURCE DMA COMPLETION LIA 3 SAVE DMA RESIDUE. JMP CHAN7 GO TO DO STATUS * CHAN6 OTA 6 CHANNEL SIX; CLC 2 SAME OTB 2 IDEA LDA LN.N AS STC 2 ABOVE. OTA 2 STC 6,C STCC2 STC CMND,C CLC 6 JSB WAITI STF 6 LIA 2 * CHAN7 JSB STAT DO STATUS JMP WRIT ERROR; RETRY * LDA UBUF WAS XFER TO LOCAL BUFFER CPA LBUFA ? RSS JMP RWSUB,I NO; RETURN * LDA HDSC UPDATE THE STA LHDSC LOCAL BUFFER LDA TRACK GET THE CURRENT TRACK ALF,ALF TO HIGH A ADA UNIT COMBINE WITH UNIT STA LTRUN SET TRACK/UNIT WORD JMP RWSUB,I RETURN * * TRACK NOP DMAC OCT 120000 HDSC NOP LHDSC OCT -1 LTRUN NOP LN.N NOP UBUF NOP RDCM OCT 20000 READ COMMAND WRCM OCT 10000 WRITE COMMAND D128 DEC 128 BM7 OCT -7 * * * SEEK NOP SEEK ROUTINEܻ * 1. SEEK RECORD WHOSE TRACK IS * IN A, UNIT HDSC * 2. KEEP LAST TRACK FLAG AND * DO ADDRESS RECORD IF SAME * TRACK/UNIT. CLCC2 CLC CMND CLEAR COMMAND. OTAD1 OTA DATA SEND CYLINDER NO. STCD2 STC DATA,C TO DATA CARD. LDB UNIT GET THE UNIT ADB LSTB ADD THE LAST SEEK TABLE ADDRESS STB CYL SAVE THE LAST SEEK ADDRESS LDB SEEKC GET THE SEEK COMMAND CPA CYL,I SAME AS LAST TIME? ADB ADDCM YES ADD THE ADDRESS COMMAND BIT ADB UNIT SET UNIT BITS OTBC1 OTB CMND SEND COMMAND STCC3 STC CMND,C START SEEK STA CYL,I SET LAST SEEK FLAG FOR NEXT TIME SWP WAIT SERVAL MORE CYCLES LDB HDSC GET THE HEAD AND SECTOR SFSD1 SFS DATA DATA READY? JMP NRERR NO; TAKE NOT READY EXIT * OTBD1 OTB DATA SEND HEAD/SECTOR INFO STCD3 STC DATA,C TELL CONTROLLER JMP SEEK,I RETURN * SEEKC OCT 30000 SEEK COMMAND LSTB DEF *+1 ADDRESS OF LAST SEEK TABLE OCT -1,-1,-1,-1 CYL NOP ADDRESS OF LAST SEEK FLAG FOR CURRENT UNIT. * * IGNOR STA EQT15,I ZERO TIME OUT JSB STATW DO STATUS JMP IGNO2 IGNOR THE RESULT * * * * * WAITI SUBROUTINE * A: SAVE E * B. IF FIRST EXIT SEND ACCEPT CODE * C. ELSE DO CONTINUATION RETURN * D. ON INTERRUPT SAVE RETURN * ADDRESS * E. NOT INTERRUPT FOR NEXT ENTRY * F. RESTOR E AND RETURN WAITI DEF IGNOR ELB B_E STB MOVE SAVE E CLA SET A FOR OPERATION INITIATED STA RTNCD - SET RETURN CODE TO SHOW COMPLETION AFTER INTERRUPT IGNO2 ISZ C.XX STEP TO CONTINUATION RETURN JMP C.XX,I RETURN TO RTIOC * * * C.XX NOP INTERRUPT ENTRY FROM RTIOC LDB MOVE RESTORE E-REG. ERB JMP WAITI,I RETURN TO CONTINUE PROSSING * RTNCD OCT 4 ADDCM OCT 100000 HEAD NOP UNIT NOP * * * * STATUS CHECK SECTION * STATUS SHOULD BE RETURNED IMMEDIATELY. * IF IT IS NOT A NOT READY RETURN IS MODE * THE ERROR COUNTER IS RESET FOR EACH CORRECT * STATUS. * THE STATUS WORD IN THE E QT IS SET AS FOLLOWS * 0 - ANY ERROR * 1 - DATA ERROR * 2 - SEEK CHECK (ADDRESS A NON-EXISTANT TRACK) * 3 - FLAGGED CYLINDER (3 AND 4 IMPLIES DEFECTIVE) * 4 - ADDRESS ERROR (3 ALONE IMPLIES WRITE PRO.) * 5 - END OF TRACK (DATA TOO LONG) * 6 - NOT READY (POWER, SERVO, MECHANICAL) * * * A WRITE PROTECT OR FLAGED CYLINDER ERROR WILL * FOURCE A PARITY ERROR RETURN * NOT READY WILL FOURCE A NOT READY RETURN * * OVERRUN WILL FORCE THE STATUS ROUTINE TO RETRY * THE TRANSFER AN INFINITE # OF TIMES. * * OTHER ERRORS WILL CAUSE THE STATUS ROUTINE TO * RETRY THE TRANSFER UP TO TEN TIMES. * * STAT NOP STA SEEK SAVE DMA RESIDUE. JSB STATW DO STATUS COMMAND STA STATW SAVE THE STATUS AND B377 MASK TO 8 BITS IOR B IN WITH THE NEW STA EQT5,I SET IT IN THE TABLE. B30 SLA,ALS ANY ERRORS JMP ANALZ YES; GO ANALIZE * LDA SEEK GET DMA RESIDUE AND CME,SZA RETRY IF NONZERO. JMP STAT,I ISZ STAT NO; LDB BM12 STB ERCTR RESET COUNTER RTRY CME JMP STAT,I RETURN * * STATW NOP CORE STAUTUS ROUTINE CLCC3 CLC CMND CLEAR THE CHANNEL STCD4 STC DATA,C SET UP DATA CHANNEL. LDB UNIT SEND DRIVE UNIT LIAC1 LIA CMND GET THE ATTENTION BITS IF ANY SZA,RSS ANY SET ?? JMP OTBC3 NO GO USE THE CURRENT UNIT * CLB YES SET TO FIND IT ULOOP SLA,RAR TEST THE BITS JMP OTBC3 FOUND ONE GO DO IT * INB STEP B AND JMP ULOOP GO TRY AGAIN * OTBC3 OTB CMND TO COMMAND CHANNEL. STCC5 STC CMND,C START STATUS. LDA EQT5,I GET STATUS WORD AND B1774 OUT WITH THE OLD SWP B SAVE IN B(ALSO DELAY). SFSD2 SFS DATA IF NOT BACK JMP NRERR THEN GO TO NOT READY. * LIAD1 LIA DATA GET STATUS. RAL,ARS SET 15 IF 14 IS SET SSA,RSS FIRST STATUS?? JMP STATW,I RETURN TO ANALIZE STATUS * STA LHDSC SHOW NO SECTOR IN CORE LDB I.XX WAS THE DRIVER DOWNED BY US?? SZB,RSS YES IF ZERO SO JMP $UPIO GO UP IT * LDB RTNCD WHO HAS CONTROL? SZB,RSS IGNORE IF C.XX ENTRY JMP IGNO2 ELSE IGNOR THE INTERRUPT * LDA SEEKC ELSE SET UP CONTROLER FOR OTAC2 OTA CMND ANOTHER STATUS STCC6 STC CMND,C AND THEN JMP CLCC3 GO REDO THE STATUS * * ANALZ LDB STATW GET THE SAVED STATUS WORD RBR,BLR CLEAR SIGN AND LEAST BITS CPB B10 IF WRITE PROTECT RSS OR CPB B30 BAD CYLINDER FLAG SET JMP PARER ISSUE PARITY ERROR * LSR 6 IF NOT SLB,RBR READY? JMP NRERR ISSUE NOT READY ERROR. * * * IT MAY BE POSSIBLE TO RECOVER * SO RETRY * * ALF,SLA IF STILL SEEKING JMP SKCK1 GO WAIT FOR ATTENTION * CPB B100 IF OVERRUN, THEN JMP RTRY TRY AN INFINITE # OF TIMES. * ISZ ERCTR STEP COUNT CLA,CME,RSS IF NOT LAST RETRY SKIP JMP }PARER ELSE ISSUE PARITY ERROR * ISZ CYL,I RBR,SLB SEEK CHECK?? JMP STAT,I YES RETRY NOW * JSB SEEK SEEK 0 SKCK1 JSB WAITI GO WAIT FOR INTERRUPT JSB STATW DO CORE STATUS REQUEST JMP STAT,I TAKE RETRY EXIT. * B400 OCT 400 B1774 OCT 177400 B377 OCT 377 BM12 OCT -12 ERCTR OCT -12 D202 DEC 202 EQT# DEC 1 SET ON FIRST ENTRY * * NRERR CLA,INA NOT READY -SET A=1 -POST INTERRUPT CLB SET BEEN STB I.XX HERE FLAG LDB RTNCD GET THE RETURN CODE SZB,RSS IF ZERO DO COMPLETION EXIT JMP COMEX * ISZ C.XX PARER LDA B3 A_3 ERROR RETURN COMEX LDB EQT9,I COMPLETION RETURN STA RTNCD SET THE RETURN CODE JMP NRRTN AND TAKE THE CENTRAL EXIT * * B3 OCT 3 LBUFA DEF BUF BUFA EQU LBUFA * * MOVE NOP MOVE SUBROUTINE * ENTER WITH A = -COUNT * B = DESTINATION/SOURCE * E = 1 FROM LOCAL BUF * E = 0 TO LOCAL BUF * LBUFP = LOCAL BUFFER ADD * FOR THIS MOVE CMA,INA SET COUNT POSITIVE STA COUNT SET COUNTER LDA LBUFP GET LOCAL BUFFER ADDRESS SEZ,RSS IF FROM USER BUFFER SWP SWAP THE ADDRESSES. JSB .MVW GO MOVE THE WORDS DEF COUNT NOP JMP MOVE,I NO; RETURN. * * LBUFP NOP COUNT NOP SKP * THE TRIPLET PROCESSOR TAKE SYSTEM OR USER * GENERATED TRIPLETS AND TRANSLATES THEM * INTO READ, WRITE, AND MOVE REQUESTS * * CALLING SEQUENCE: * * EQT8 NEG REQUEST LENGTH IN WORDS * EQT9 SYSTEM TRACK NUMBER (NOT ACTUAL) * EQT10 SYSTEM SECTOR NUMBER (NOT ACTUAL) * EQT1x1 REQUEST BUFFER ADDRESS. (SIGN BIT SET FOR READ) * * * $TB30 IS UESE TO TRANSLATE THE SYSTEM TRACK TO * AN ACTUAL UNIT AND CYLINDER NUMBER. * THE FORMAT IS: * * WORDS 1 TO 8 THE NUMBER OF TRACKS ON * UNITS 0-7 * WORDS 9 TO 16 THE FIRST TRACK ON UNITS * 0-7 * CONSTANTS FOR TIPLT * BM10 OCT -10 TB31A DEF TBXX MXSIZ NOP MAX NO OF WORDS PER TRACK * * * * TIPLT DLD EQT9,I GET TRACK AND SECTOR ADDRESSES SSA,RSS IF EITHER IS NEGATIVE SSB THEN JMP REJCT GO REJECT THE CALL * RRL 6 SECTOR * 64 CMB,INB SET NEGATIVE ADB EQT8,I ADD THE NO OF WORDS IN XFER ADB MXSIZ SUBTRACT FROM MAX WORD COUNT SSB TRACK WRAP AROUND? JMP REJCT YES GO REJECT THE REQUEST * LDA BM12 SET ERROR COUNTER STA TPER FOR 10 TRIES TIPRT LDA SUBCH GET THE SUBCHANNEL ADA TB31A ADD THE TABLE ADDRESS LDB A,I GET THE FIRST TRACK TO B ADB EQT9,I ADD THE ADDRESSED TRACK STB TRACK SAVE THE TRACK ADDRESS ADA B10 STEP TO THE NUMBER OF TRACKS ADDRESS LDB A,I GET THE NUMBER OF TRACKS LDA B SET IN B FOR POSSIBLE REJECT CMA,INA NEGATE THE NUMBER ADA EQT9,I ADD THE ADDRESSED TRACK NUMBER SSA IF POSITIVE THE ERROR JMP TIP0 NEGATIVE SO OK - CONTINUE * LDA EQT5,I SET THE IOR B40 END OF TAPE BIT IN THE STATUS STA EQT5,I EQT STATUS WORD JMP NRRTN EXIT ERROR * TIP0 LDB EQT8,I BRING IN THE STB TPLN LENGTH LDB EQT11,I AND THE STB TPBUF BUFFER ADDRESS LDB SUBCH GET THE SUBCHANNEL CLA,CLE SET A FOR AN ODD SUBCHANNEL SLB,RSS IF EVEN INA RESET A FOR HEAD 2 LDB EQT10,ѫI GET THE BRS ACTUAL SECTOR STB MOVE YES SAVE ADB NSEC IS IT ON THE ODD SSB,RSS SIDE OF THE DISC STB MOVE YES RESET ELA MOVE IN THE SECOND HEAD BIT ALF,ALF ROTATE HEAD TO BITS 8-9. STA HEAD SET HEAD WORD ADA MOVE ADD THE SECTOR STA HDSC SAVE FOR ADDRESS STA CHDSC AND FOR CYCLICK CHECK. * * LDA TPLN PRESET A FOR EVEN SECTOR LDB EQT10,I GET SECTOR CCE,SLB,RSS IF EVEN JMP TPNXT JUMP * LDB BUFA ELSE READ LDA DM128 128 WORDS TO JSB RWSUB LOCAL BUFFER LDA HLBUF SET MOVE BUFFER STA LBUFP ADDRESS LDB TPLN GET LENGTH ADB B100 LESS 64 LDA TPLN USE MIN OF REQUEST CLE,SSB AND LDA BM100 6 4 LDB TPBUF GET ADDRESS ELB,RBR CLEAR SIGN & SET READ/WRITE JSB MOVE GO MOVE THE WORDS. LDA DM128 SET TO WRITE LDB BUFA THE SECTOR SEZ,RSS WRITE REQUEST? JSB RWSUB YES; WRITE IT OUT. LDA BM100 UP DATE POINTERS TPA CMA,INA TO REFLECT STA MOVE LAST TRANSFER ADA TPBUF ADJUST BUFFER ADDRESS STA TPBUF LDA MOVE ADA B100 ROUND UP THE COUNT CLB CLEAR B FOR SHIFT LSR 7 SHIFT TO GET SECTOR COUNT ADA HDSC ADD TO THE CURRENT SECTOR STA HDSC SAVE FOR NEXT ACCESS AND B377 MASK TO SECTOR ONLY ADA NSEC SIDE TWO? IOR HEAD SET UP THE HEAD BITS IOR B400 SET SIDE TWO BIT SSA,RSS IF SIDE TWO STA HDSC RESET THE HEAD SECTOR ADDRESS LDA TPLN GET THE LENGTH ADA MOVE SUBTRACT THE NUMBER XFERED CLE,SSA,RSS IF NONE LEFT CHECK JMP CYCK FOR CYCLIC CHECK * STA TPLN SAVE LENGTH TPNXT LDB TPBUF GET BUFFER ADDRESS CLE,SSB READ? JMP TPRD YES; GO TRANSFER REST OF RECORD * ADA B100 NO; MORE THAN 64 WORDS LEFT CCE,SSA,RSS ? JMP TPB NO; GO TRANSFER LAST WORDS * LDA TPLN YES; TEST FOR MORE THAN LESS THAN AND B100 64 WORDS MOD 128 LEFT STA B SAVE FLAG ADA TPLN GET LENGTH TO SET FOR X-FER CLE,SZB IF LESS THAN 64 MOD 128 LEFT AND DM128 DELETE EXCELL OVER EVEN SECTORS LDB TPBUF GET BUFFER ADDRESS TPRD ELB,RBR SET READ/WRITE FLAG JSB RWSUB DO THE TRANSFER. LDA LN.N GET THE LENGTH AND JMP TPA GO UP DATE THE POINTERS * * TPB LDA DM128 WRITE OF LAST 64 WORD IN LDB BUFA FIRST HALF OF SECTOR STB LBUFP SET UP JSB RWSUB AND READ THE SECTOR LDA TPLN SET UP TO LDB TPBUF MOVE THE USER WORDS JSB MOVE GO MOVE TO THE BUFFER LDA DM128 WRITE THE BUFFER OUT AGAIN. LDB BUFA AGAIN JSB RWSUB * * * CYCK LDA EQT6,I REQUEST FOR CYCLIC AND B2002 CHECK CPA B2002 AND WRITE RSS YES SKIP JMP EOXF NO- RETURN * LDA CHDSC SET THE HEAD/SECTOR FOR STA HDSC SEEK LDA TRACK GET TRACK FOR SEEK JSB SEEK LDB EQT8,I CALCULATE THE CMB,INB NUMBER LDA EQT10,I OF B10 SLA SECTORS TRANSFERED ADB B100 START ODD - ADD 64 TO COUNT ADB B177 ROUND UP TO NEXT HIGHER SECTOR LSR 7 SECTOR COUNT TO B LDA CHCKC GET CHECK COMMAND ADA UNIT SET UNIT BITS CLCC4 CLC CMND PRESET THE COMMAND CHANNEL OTBD2 OTB DATA SEND SECTOR COUNT STCD5 STC DATA,C TO DATA OTAC1 OTA CMND SEND COMMAND STCC4 STC CMND,C START CHECK JSB WAITI GO WAIT CLA JSB STAT DO STATUS RSS RSS  BAD - SKIP JMP EOXF O-K RETURN * ISZ TPER STEP COUNTER JMP TIPRT TOO MANY? - NO TRY AGAIN * JMP PARER YES; TAKE PARITY ERROR EXIT. * * * HLBUF DEF BUF+64 TPLN NOP TPBUF NOP TPER NOP CHCKC OCT 60000 CYCLIC CHECK COMMAND CHDSC NOP SUBCH NOP B100 OCT 100 DM128 DEC -128 BM100 OCT -100 NSEC NOP B7 OCT 7 * * REJCT CLA,INA ILLEGAL CALL SO REJECT JMP I.XX,I IT SKP * INITIATOR ENTRY POINT I.XX NOP JMP CONFI CONFI CLEARS THIS WORD * LDA RSS SET UP LDB CHAN THE DMA SLB,RSS CHANNEL CLA SWITCH STA DMASW NOP IF CHANNEL 6, RSS IF 7. CCA ADA I.XX SET RETURN STA C.XX ADDRESS LDA B4 SET THE RETURN CODE STA RTNCD LDA EQT4,I GET THE UNIT RRR 6 FROM THE EQT AND B7 MASK TO UNIT NUMBER STA SUBCH SET THE SUBCHANNEL CLE,ERA SHIFT TO THE UNIT STA UNIT SET THE UNIT JSB STATW CHECK TO MAKE SURE DISC IS READY RRR 6 SHIFT THE READY BIT SLA READY?? JMP NRERR NO GO TAKE NOT READY EXIT * LDA EQT6,I GET AND ISOLATE AND B3 THE REQUEST CPA B3 CONTROL? CLA,INA,RSS YES; SET FOR REJECT AND SKIP JMP OK NO; CONTINUE * JMP NRRTN GO NOT READY REJECT. * OK LDA BM12 RESET STA ERCTR THE ERROR COUNTER LDA EQT6,I GET THE REQUEST CODE SYS2 LDB EQT7,I GET BUFFER ADDRESS SSA SYSTEM REQUEST? JMP SYS YES; GO DO SYSTEM THING. * LNTS LDA EQT6,I GET THE CON WORD AGAIN RAR,CLE,ELA SET READ WRITE BIT RBL,ERB SET SIGN OF BUFFER ADDRESS TO SHOW DIRECTION STB EQT11,I AND SAVE FOR TIPLT CALL LDA EQT8,I GET THE LENGTH. STA EQT12,I SAVE FOR EXIT SSA,_RSS MAKE NEGATIVE CMA,INA,RSS WORDS ARS AND STA EQT8,I SAVE B2002 SZA IF ZERO SKIP CALL JMP TIPLT CALL FOR X-FER * EOXF LDA EQT6,I GET REQUEST CODE SSA SYSTEM JMP SYS2 YES; GO GET NEXT TRIPLET * DONE LDB EQT12,I NO; DONE; GET TLOG CCE,SSB SET POSITIVE CMB,INB IF NEG. NRRTN LDA DIGNO GET THE DUMMY INTERRUPT ADDRESS STA WAITI AND SET IT. LDA RTNCD GET RETURN CODE (0 OR 4) CPA B4 IF 4 ISZ C.XX BUMP RETURN (DID -1 ON IT ABOVE) JMP C.XX,I ELSE JUST EXIT * DIGNO DEF IGNOR * SYS STB MOVE SYSTEM TRIPLET PROCESSOR INB STEP TO THE ADDRESS OF LDA B,I LENGTH AND STORE IT IN STA EQT8,I THE EQUIPMENT TABLE INB STEP TO THE DISC ADDRESS LDA B,I GET THE ADDRESS RAL,CLE,SLA,ERA IF SIGN BIT SET THEN INB,RSS THIS IS A PURE SECTOR ADDRESS AND B177 MASK THE SECTOR AND STA EQT10,I AND SET IT IN THE EQT XOR B,I GET THE TRACK ADDRESS ALF,ALF ROTATE TO LOW A RAL SEZ IF FULL WORD TRACK LDA B,I USE FULL WORD STA EQT9,I AND SET IN THE EQT INB STEP TO ADDRESS OF NEXT TRIPLET STB EQT7,I AND SET IT IN THE EQT LDB MOVE,I GET THE BUFFER ADDRESS SZB IF ZERO THEN DONE JMP LNTS GO DO THE TRANSFER. * * LDA RTNCD GET THE RETURN CODE SZA,RSS IF ZERO- JMP DONE GO RETURN * LDA UNIT GET THE ADA LSTB LAST TRACK SEEKED ON LDA A,I THE CURRENT UNIT AND JSB SEEK SEEK SAME CYL. JSB WAITI GO WAIT FOR A INTERRUPT JMP DONE EXIT * * B4 OCT 4 B177 OCT 177 SKP BUF BSS 128 LN EQU * ORG BUF CONFI STA B SAVE THE SELECT CODE IOR vOTA CONFIGURE STA OTAD1 ALL XOR B4000 THE STA OTBD1 I/O STA OTBD2 INSTRUCTIONS XOR B5100 STA STCD1 STA STCD2 STA STCD3 STA STCD4 STA STCD5 XOR B5000 XOR B4400 STA SFSD1 STA SFSD2 XOR B0600 STA LIAD1 XOR B0400 STA STFD XOR B221. STA DMAC INA NOW THE COMMAND CHANNEL XOR B226. STA OTAC1 STA OTAC2 XOR B4000 STA OTBC1 STA OTBC2 STA OTBC3 XOR B5100 STA STCC1 STA STCC2 STA STCC3 STA STCC4 STA STCC5 STA STCC6 XOR B5000 STA CLCC2 STA CLCC3 STA CLCC4 STA CLCC5 XOR B4200 STA LIAC1 CLB FIND LDA EQTA THE EQT CMA,INA NUMBER ADA EQT1 FOR THE UP REQUEST DIV .15 INA AND STA EQT# SET IT CLA CLEAR THE JUMP TO STA I.XX+1 THIS ROUTINE LDA TB31B GET THE ADDRESS OF THE TABLE ADDRESS LDA A,I GET THE ADDRESS RAL,CLE,SLA,ERA JMP *-2 STIL INDIRECT GO GET NEXT LEVEL * LDB A,I GET THE FIRST WORD OF THE TABLE CMB,SSB,INB,RSS SET POSITIVE IF NEG SKIP IF IT WAS POSITIVE INA,RSS IT WAS NEGATIVE SO STEP THE TABLE ADDRESS LDB SECTR IT WAS POSITIVE SO USE THE BASE PAGE SECTOR COUNT STA TB31A SET THE TABLE ADDRESS BRS,BRS ADDJUST TO NO. SECTORS PER SIDE CMB,INB SET NEGATIVE AND STB NSEC SET FOR THE DRIVER CMB,INB FIND THE BLF,BLF MAX NO STB MXSIZ OF WORDS PER TRACK AND SET JMP I.XX+1 * TB31B DEF TB31A ADDRESS OF THE TABLE ADDRESS OTA OTA 0 B221. OCT 22100 B226. OCT 22600 B4000 OCT 4000 B5100 OCT 5100 B5000 OCT 5000 B4400 OCT 4400 B0600 OCT 0600 B010VTRN0 OCT 0100 B0400 OCT 0400 B4200 OCT 4200 .15 DEC 15 TEST EQU LN-* ERROR HERE MEANS THE CONFIGURE ROUTINE * I TOO LONG. . EQU 1650B EQTA EQU . EQT1 EQU .+8 EQT4 EQU EQT1+3 EQT5 EQU EQT1+4 EQT6 EQU EQT1+5 EQT7 EQU EQT1+6 EQT8 EQU EQT1+7 EQT9 EQU EQT1+8 EQT10 EQU EQT1+9 EQT11 EQU EQT1+10 EQT12 EQU .+81 EQT15 EQU .+84 CHAN EQU .+19 I.31 EQU I.XX C.31 EQU C.XX CMND EQU 0 DATA EQU 0 A EQU 0 B EQU 1 SECTR EQU .+71 LNPG EQU LN DRIVER LENGTH END T @S 29015-80001 B S P0122 FH-RTGEN REAL TIME SYSTEM GENERATOR             H0101 ASMBAB̬àH-GN HDH-GNA̠MŠSYSMGNA AMDMAHV.H HSGNAҠ̬HSנGNA UNԠPAGŠNKSHNPSSBŠϠSAVŠBASŠPAG G00B AU0 BU SUP -HGHŠ- SϠDVS(YPԬHSP -DNS- ---------- ------- -SԠ- ADNKAGŠSUBUNS DSKDVS -0000- PGAMADNGN̠ -6000- ɯϠABŠGNAN PAAMҠNPUԠ -000- X AABŠPGAMNPUԠ NAZAN -00- DAAAAS SKP DNԠMA D:D-NAMŠ D:D-NAMŠ3 D3:D3-NAMŠ5USAGŠAG D:D-MMNNGH D5:D5-UNԠDSKADDSS D6(5:D6-MS D6(0-:D6-PY D6(00-06:D6-YP D:D-UNNVA̠( D:D-UNNVA̠( D9:D9-UNNVA̠(3 D0:D0-DSKNGHBGMANADDSS(BSNY SԠMA D:SԱ-NAMŠ D:SԲ-NAMŠ3 D3:S3-NAMŠ5DNA D:SԴ-DNԠADDSS D5:S5-BPNKADDSS PGAMYPS 0:SYSM :ԠSDN :ԠDSKSDN 3:BGDSKSDN :BGSDN 5:BGSGMN 6:BAY :UY -99:UNUSD SKP ҠDS :NVADYPYϠNAZANPAAMS :HKSUM 3:DUԠƠSUN :NVADDYP 5:DUPAŠNYPNS 6:NVADBPDŠNPGAM :SԯDNԠV :DUPAŠPGAMNAMS 9:PAAMҠNAMŠ 0:PAAMҠYPŠ :PAAMҠPY :PAAMҠUNNVA̠ 3:BGSGMNԠPDSBGDSàSDN :SYSAVMMҠBGBUNDAYS H&5:GA̠A̠BYAYPŠ6PGAM(MAYA̠YPŠ0AND6NY 6:BPNKAGŠAAV :DSKVנ(NԠDSKADDҠDSASԠAVA̠DSKADDҩ :MMYV 9:DB̠DDүPGAMVAY 0:DB̠SԠVנ(MŠHAN65DB̠DS :'$'NԠUNDNADҠSYMB̠AB :DSKADPAYDDŠ 3:NVADABPNKAGŠPY :NVADHANN̠N.NԠD 5:NVADDVҠNAMŠNԠD 6:NVADDBUPANDSNԠD :NVADDVŠNŠN. :NVADNUPԠàHANN̠N. 9:NVADNUPԠàHANN̠N.D 30:NVADNԠDMNMN 3:NVADԠN.NNԠD 3:NVADPGAMNAMŠNNԠD 33:NVADNYPNԠNNԠD 3:NVADABSUŠVAUŠNNԠD 35:BPNUPԠANV 36:NVADMNANGPANDNNԠD 3:NVADMMNNGHNSYSMBAYҠUY 3:ABSUŠSYSMHASVAYDAAABŠPGAM 39:GA̠A̠BYASYSMPGAMƠAYPŠSؠPGAM SKP SASANDNA̠SASMŠϠHSUNŠHH HKSHŠSHG.ANDNSUSHAԠԠSAD. SPà G0B BGNAAMԠϠAҠHŠSHG. ASNDZ AGԠHŠSHG SZASSƠZϠHN MPANSɠSAԠHŠGNA SBSPAŠPUԠHŠDNANנN DAPSŠASKҠHP DBMS0AҠSҠPUSHUN SBDKYɠϠHŠY HԠ MPBGNSԠAGAN SPà MS0DƠ+ ASà9AҠSҠPUSHUN MSASà9HANGŠBPNKAG? SKP G00B MPBGNGϠSԠHŠS DPҠBSSPԠADҠDVҠADDSS DKYBSSKYBADUPUԠDVҠADDSS DHSPBSSHSPUNHDVҠADDSS DYBSSYPŠNPUԠDVҠADDSS AMDƠND AMBSSNDAVA.MM-SԠBYDVS DMAGԠ000000(MPMAGAPŠDVҠADDҩ .U650BDNŠGNƠSYSMMAA SBPABS.ASԠD+ƠNKAGŠAA BPABS-.NGAVŠƠABV ANSDƠGNANSҠADDҠϠGN ANPԠDƠNPUԠADDSSƠPGAMNPUԠD PAMDƠPASADDҠƠPAAMҠNAZAN APASDƠPAAMADDSSƠPAAMҠNPUԠD AGNϠDƠGNϠADDҠƠɯϠGNAҠD AGADƠGA̠ADDҠƠGA̠SUB. AGNDƠGNAADDSSƠGNASUB. AGϠDƠGàADDSSƠGàSUB. AGNɠDƠGNԠADDҠƠGNԠSUB. AAPDƠNԠADDҠƠABPNKAGŠD NDADDƠDSKAADDSSƠDSKADDSSMD ADNDƠDSKɠDSKNPUԠDVҠADDSS ADUԠDƠDSKϠDSKUPUԠDVҠADDSS AADDƠADADDSSƠMANADBGN ADSDƠADSADDSSƠSUB-ADBGN ABPԠDƠBPUԠADDҠƠBPUPUԠD AԠDƠԠADDҠƠA̠SԠANGD ADDƠD3AҠPGAM-ADDAGS ADSNDƠDSNADDҠƠSANDNԠD AABDDƠABDϠADDҠƠABSUŠUPUԠSN AMDDƠMDϠADDSSƠMANNGUPUԠDV ANVDƠNVDADDSSƠDMA̯ASɠNV AϠDƠҠADDSSƠD-NGD ADϠDƠDҠADDSSƠSPA̠-NGD AMVŠDƠMVҠADDSSƠMV-DBUƠD AGNDDƠGNDADDҠƠDSGMNԠGNA AUDDƠUDADDҠƠDSGUPUԠN AZUԠDƠZUԠADDҠƠZϠUPUԠϠDSG ADSԠDƠDSԠADDҠƠDSKAKABŠD ANSDƠNSԠADDҠƠPGAMS-ADDS BDҠDƠADADDSSƠ00AD ABASàDƠDMSŠADDҠҠDSADҠ$$ AؠDƠԯSŠADDҠҠԠҠSADҠ$$ ABԠDƠSAԠADDSSƠBSAPAD ASBUƠDƠASPBƠADDSSƠ9-DBUҠNB ASԠDƠSԠDNŠSS-ҠSYS$$ AMSKDƠMASKNMNԠAKVAUŠ$$ AADDƠAD DMԠDƠDM̠ADDSSƠUNŠϠDMŠYPŠ6ϠYPŠ A6DƠ6ADDSSƠYPŠ6AҠUN AS̠DƠS̠ADDSSƠHŠS̠UN ASHƠDƠSHƠADDҠƠSHDUŠSAHUN SKP PGAMNSANԠAS ZϠԠ0 NDà- NDà- N3Dà-3 NDà- N5Dà-5 N6Dà-6 NDà- N9Dà-9 N0Dà-0 NDà- NDà- NDà- N60Dà-60 N6Dà-6 N00Dà-00 PDà P3Dà3 PDà P5Dà5 P6Dà6 PDà PDà P9Dà9 PDà PDà PDà P5Dà5 P6Dà6 PDà PDà PDà P3Dà3 PDà P5Dà5 PDà P33Dà33 P3Dà3 P6Dà6 P99Dà99 6UN6 ̱0UN ̱UN0 60Ԡ-60 ̲000Ԡ-000 MUP MUP MUP M3Ԡ3 M60Ԡ60 MԠ M0Ԡ0 MԠ M3Ԡ3 M060Ԡ06000 M0Ԡ000 M600Ԡ60000 MԠ M000Ԡ000 M00Ԡ00 M00Ԡ00 M006Ԡ006 M3Ԡ003 M00Ԡ00 M000Ԡ000 M600Ԡ600 M00Ԡ00 MԠ SKP DPSDƠ+ P000Dà0000 P000Dà000 P00Dà00 P0Dà0 PDà PSDƠ+ M000Ԡ0000 M000Ԡ000 M00Ԡ00 M0Ԡ0 Ԡ BANKԠ00BANK UBNKԠ0000UPPҠHAҠBANK MSGNԠ00000NGAVŠSGN DSKABԠ3ABSUŠDSKADDSS:03 SKP AҠBUҠHA̠ZS HŠBU̠SUBUNŠASA6-DBUҠHZS. ANGSUN: AGND BADDSSƠBU 2SBBU UN:NNSƠAANDBAŠDSYD. BU̠NP DAN6 SADNԠSԠBUҠNGH6 A SABɠAҠBUҠD NB SZDNԠA̠DSA? MP-3NϠ-NNUŠANG MPBU̬ɠUN SKP NנNŠ(ҬƩNY HŠSPAŠSUBUNŠSUSDϠSPAŠUPHŠPN. ANGSUN: AGND BGND SBSPA UN:NNSƠAANDBAŠDSYD. SPAŠNP ASԠHAAҠUNԠZ SBDKYɠUPUԠҬƠNY MPSPAŬɠUN SKP PN:Ҡ HŠҠSUBUNŠSUSDϠPNԠHŠDAGNSS ҠA̠ҠMSSAGS. ANGSUN: A-DGԠASɠҠD BGND SB UN:NNSƠAANDBAŠDSYD. ҠNPPNԠҠMSSAGS SAAM+3SԠҠDŠNϠMSSAG DAP6 DBAMҠAMҠMSSAGŠADDSS SBDKYɠPNԠҠMSSAG MPҬɠUN VABŠҠ ҠNP SBҠPNԠҠMSSAG H0HԠ0BAԠ-PGAMANNԠNNU MP-VABŠ AMҠDƠ+ ASà3ҠҠMSSAGŠҠ+D SPà 0ASà0DNԯSԠV ұ5ASà5GA̠A̠BYAYPŠ6PGAM ұ6ASà6BPNKAGŠAAV ұASàDSàV ұASàMMYV ұ9ASà9NVADDB̠DүPGVAY ҲASàDSàADPAYDDŠ 3ASà3SYSMVנNϠSAH SKP HŠNDؠANDDؠSUBUNSAŠUSDϠSԠHŠUN ADDSSSҠHŠNYNHŠPGAMDNYAN BKABŠ(DNԩ.HŠADDSSƠHŠNԠNY NHŠDNԠABŠSNANDNDN.NUNM DجDNԠNANSHŠADDSSƠHŠNԠAVAAB NYNDN.HŠADDSSƠHŠSԠNYSNAND NBDNԠANDHŠADDSSƠHŠNDƠDNԠSNAND NPDN. ƠHŠNԠDNԠNYVSNϠHŠASԠSԠNY DؠPNSADAGNSàANDSϠHŠVABŠ SUBUN. SԠNA̠DNԠADDSS NDؠSSHŠADDSSƠHŠSԠNYNHŠDN ABŠASHŠUNԠADDSS. ANGSUN: AGND BGND SBND UN:NNSƠAANDBAŠDSYD. NDؠNP DABDNԠBDNԠNA̠DNԠADDSS SADNԠSԠUNԠDNԠADDSS MPNDجɠUN SKP SԠDNԠADDSSSMDN DؠSSHŠADDSSSƠHŠUNԠ0-DNYNH DNԠABŠMHŠADDSSƠHŠUNԠNY(DNԩ. ANGSUN: AGND BGND SBD UN:NNSƠAANDBAŠDSYD. (N+:UNԠDNԠADDSSSAŠHŠADDSSS ƠHŠNԠAVAABŠDNԠNYҠH NDƠHŠDNԠABŠHASBNAHD. (N+:UNԠDNԠNYADDSSS(NԠNDƠDNԩ DؠNP DADNԠDNԠUNԠDNԠADDSS PAPDNԠNDƠDNԠS? SSYS-UNϠNԠNSUN SZDؠSԠUNADDSSҠN+ SADSԠADDSSƠNAMŠ NA SADSԠADDSSƠNAMŠ3 NA SAD3SԠADDSSƠNAMŠ5USŠAG NA SADSԠADDSSƠMPGNGH NA SAD5SԠADDSSƠUNԠDSKADD NA SAD6SԠADDSSƠMJSPүDSKY NA SADSԠADDSSƠàNV( NA SADSԠADDSSƠàNV( NA SAD9SԠADDSSƠàNV(3 NA SAD0SԠMANDNԠADDҠҠBS DADNԠDNԠUNԠDNԠADD DBA MANA ADAPSԠPSԠUNԠNDSԠADD SSASSSKPƠNϠVAP MPSҠPNԠVנMSSAG ADBN0SԠҠNԠDNԠADDSS SBDNԠSԠNԠDNԠADDSS MPDجɠUN SKP HŠNSԠANDSؠSUBUNSAŠUSDϠSԠHŠUN ADҠSYMB̠ABŠ(SԩADDSSS.HŠADDҠƠHŠNԠNY NSԠSNANDNS.NUNMDجSԠNANS HŠADDSSƠHŠNԠAVAABŠNYNSԬҠHŠADDSS ƠHŠNDƠS.HŠADDSSƠHŠSԠNYNS SAԠBSԠANDHŠADDSSƠHŠNԠAVAABŠNY SAԠPS. ƠHŠNԠNYNSԠVSNϠHŠUN DNԠNYSؠPNSADAGNSàANDS ϠHŠVABŠҠSUBUN. SԠNA̠SԠADDSS NSԠSSHŠADDSSƠHŠSԠNYNS. NSԠNP DABSԠBSԠSԠSԠADDSS SASԠSԠUNԠSԠADDSS MPNSԬɠUN SKP SԠSԠADDSSSMS SؠSSHŠUNԠSԠADDSSSMS. ANGSUN: AGND BGND SBS UN:NNSƠAANDBAŠDSYD. (N+:HŠNDƠSԠSAHDANDHŠUN SԠADDSSSAŠHŠADDSSSƠHŠNԠAVAAB NYNS. (N+:UNԠSԠADDSSSAŠSԠ(NԠNDƠSԩ. SؠNP DASԠGԠUNԠSԠADDSS PAPSԠNDƠSԠAB? SS SvZSؠNҠUNADDSS SASԱSԠDADD NA SASԲSԠDADD NA SAS3SԠD3ADD NA SASԴSԠDADD NA SAS5SԠD5ADD NA SASԠSԠNԠSԠADDSS MANA ADAPDNԠPDNԠADDҠUNԠDN SSASSSKP-NVADSԠNY MPSجɠUN SҠDA0 SBҠVABŠҠ SKP ANBASŠAB BADDƠ+ Ԡ0ABSUŠPGAMBAS P̠Ԡ0UNԠPGBASŠADDSS Ԡ0BPANADDSS MADԠ0UNԠMMNANBAS ABUƠDƠBU ADBUƠDƠDBU ABUƠDƠBUƬ ABUƠDƠBU AKBUƠDƠKBU ABUƠDƠBU PADDƠPS AMSԠDƠMS AMM5DƠMS+5 ASԠDƠS DNԠԠ0MPAYDUN BSԠDƠSԠADDҠƠSԠSԠNY SԠBSSUNԠSԠADD PSԠBSSADDҠƠNԠAVAABŠNY BDNԠBSSADDҠƠSԠDN DNԠBSSUNԠDN PDNԠBSSNԠAVAABŠDN MAàBSSMAؠHAҠUN HAҠBSSMPAYHAҠSAVŠAA NϠBSSA̠DG DSKSYBSSNA̠DSGMNԠDSKADDSS DSZŠBSSDSKSZŠ-N.ƠAKS DSKSàBSSADDSSƠDSKSAHAA PAKBSSNUMBҠƠDSKPDAKS DAUNBSSAUAYDSKSZ SDSBSSSSAKҠSYSMDS$ ADSԠ0SSAKҠAU.DSà$$ PàBSSADD.ƠPVGDɯϠAD$$ DSPBSSPSNƠSԠDSG.NS$ BHNBSSMŠBASŠGNAҠHN SAPƠBSSSAPPNGAG0NϯYS ASMBSSASԠDSYSAVA̠MM PAADBSSaHPAAMҠNPUԠDVҠADDSS YHBSSSYSMYHANN̠N. DNBSSDSKҠUN DSKADBSSUNԠDSKADDSS PGBSSPGAMAD.AG-0̯N DSNԠBSSDSKSGMNԠSҠUN DBSSDNԠADD:NAMŠ DBSSDNԠADD:NAMŠ3 D3BSSDNԠ3ADD:NAMŠ5USAGŠAG DBSSDNԠADD:MMNNGH D5BSSDNԠ5ADD:UNԠDSKADD D6BSSDNԠ6ADD:MSPYYP DBSSDNԠADD:àNV( DBSSDNԠADD:àNV( D9BSSDNԠ9ADD:àNV(3 D0BSSDNԠ0ADD:BGHBSMAN SԱBSSDADDҠ(Sԩ SԲBSSDADDҠ(Sԩ S3BSSD3ADDҠ(Sԩ SԴBSSDADDҠ(Sԩ S5BSSD5ADDҠ(Sԩ NGBSSNԯԠAG-0 NԠBSSSYMB̠UN UA̠BSSUNԠBUƠADDSS NԠBSSUNԠBUƠUN BUƠBSS6ADBU UADBSSUNԠDBUƠADDSS DNԠBSSUNԠDBUƠUN DBUƠBSS6AABŠDSKNPUԠBU BUƠBSS6DSKADҠSANUԠAA UAɠBSSUNԠBUƠUN NԠBSSUNԠBUƠUN BPBSSҠSDNԠBPBUND UBPBSSUPPҠSDNԠBPBUND BBPBSSҠBAKGUNDBPBUND UBBPBSSUPPҠBAKGUNDBPBUND UBPBSSAүԠDSàSBPNKAA$$ BPMAؠBSS SPà MPNP MPNP HNP HNP 0NP 00NP SPà PABASà SKP BUƠBSS6DSGMNԠBU UAKBSSUNԠKBUƠADDSS KNԠBSSUNԠKBUƠUN KBUƠBSS6KYDBU UAԠBSSHUNԠBUƠADDSS NԠBSSUNԠBUƠUN BUƠBSSMPAYBU UAPBSSUNԠPSԠADDSS AMADBSSUNԠMSԠADDSS MSԠBSSMMYMAPBU NԠBSSNGDSGMNԠUN SNԠBSSSHԠDSGMNԠUN MԠBSSMAMUMԠMNGH MBGBSSMAؠBGMNGH DSKYBSSUNԠKYDDSKADDSS DSKDBSSDSKDSGMNԠADDSS KYNBSSA̠KYDUN KYԠBSSUNԠKYDUNԠ$ PYPŠBSSPGAMYP SYBPBSSSԠDSYSBPNKAG SYSADBSSUNԠDSGMNԠADDSS B̠BSSUNԠBPàADD PB̠BSSNA̠BPàADD PP̠BSSNA̠PGàADD ADBSSUNԠŠANADDSS PMANBSSUNԠBGMANPSԠADDSS BSBADBSSBGSGMNԠBPàADD BSPADBSSBGSGMNԠPGàADD AGBSSPGAMS-ADDAG MANBSSUNԠMANDNԠADD HDGBSSHADNGMAԠAG DNԠBSSUNԠMANDNԠADDSS DSKDBSSDSKNPUԠADDSS AԠBSSADDSSƠUPMNԠAB ԠBSSN.NSNUPMNԠAB ASԠBSSADDҠƠDVŠNŠAB SԠBSSN.NSNDV..AB ANԠBSSADDSSƠNUPԠAB NԠBSSN.NSNNUPԠAB DSKNBSSDSKADDҠƠNԠDŠD NNBSSDUNԠƠNԠD U̠BSSUNԠSԠADDSS SԠBSS6USҠSYSMPGDNԠADDҠS DSKؠBSSUNԠAKADD.Ҡ"DBN" DNԠBSSUNԠDSKҠUN DMNDBSSDSKMMANDADDSS MADDҠBSSMMYMMANDADDSS MPPBSSUNԠABSUŠD ABNԠBSSUNԠABSUŠDSPAMN DSKMNBSSNA̠MANDSKADDSS BSSDPBSSNA̠DSKSMANBSSDSP PNԠBSSPMAYNYPN DBADBSSUNԠDB̠ADDSS KYBSSNSUNYPŠBY NSNBSSNSUNYPŠUN DBSSԠDNA NSҠBSSUNԠNSUN PAGNϠBSSUNԠPAGŠN. PNDBSSUNԠPAND PGHBSSPGAMNGH ҠBSSҠBPSԠBUND UPPҠBSSUPPҠBPSԠBUND ANADBSSUNԠPҠANGŠADDSS BGBSS DYPBSS DSKANPADDSSƠHGHSԠDSK DԲBSSNNSƠDSKƠDԠNY D3BSSNNSƠAUؠDSKƠD SHBSSADDSSƠDNԠƠPGMϠBŠSHDUD SHBSSADDҠƠDNԠƠABVŠPGM-NADSUN SH3BSSNGHƠSHDPGMSDSGMN SHBSSDADDSSƠHŠSHDUDPGM 09ASà09PAAMҠNAMŠ ұ0ASà0PAAMҠYPŠ ұASàPAAMҠPY ұASàPAAMҠNVA̠ ҲASà$àNԠUNDNS ҲASàNVADHANN̠N.NԠ Ҳ5ASà5NVADDVҠNAM Ҳ6ASà6NVADDBҠԠPAND ҲASàNVADDVŠ.N. ҲASàNVADNԠàHANN̠N. Ҳ9ASà9NVADNԠHANN̠N.D 30ASà30NVADNԠàMNMN 3ASà3NVADԠN.NNԠD 3ASà3NVADPGAMNAMŠNNԠ 33ASà33NVADNYPNԠNNԠD 3ASà3NVADABSVAUŠNNԠ 35ASà35BPNUPԠANV 36ASà36NVADNA̠PANDNNԠ 3ASà3NVADMMNNSYS.BҠUԠPGM 39ASà39GA̠SYSMUSŠƠYPŠ6PGAM MS0ASà9BGDSàSDNS MS3ASàSYSMSDNDS MS0ASàBPNKAGŠ MSDƠ+ ASàƠBANKDSGMNS? MSDƠ+ ASà3(NNũ MS5DƠ+ ASàUPMNԠABŠNY MS6DƠ+ ASàDVŠNŠAB MS36DƠ+ ASàHANGŠASYSAVMM? MSDƠ+ ASàPV.N.ADADD? MS50DƠ+ ASàSAԠSAH? MS0DƠ+ ASàSSAK? G HDSYSMBASŠPAGŠMMUNANAA SYSMBASŠPAGŠMMUNANAA SYSMABŠDNN AU.+0AƠUPMNԠAB ԣU.+ƠԠNS UMAؠU.+3ƠGA̠UNS(NDԩ DԠU.+AƠDVŠNŠAB NBAU.+AƠNUPԠAB NGU.+5ƠNUPԠABŠNS AԠU.+6AƠAKASSGNMNԠAB KYDU.+AƠKYDBK ɯϠMDUůDVҠMMUNAN ԱU.+ADDSSS ԲU.+9 3U.+0 ԴU.+ 5U.+UN 6U.+3 ԷU.+5-D ԸU.+5 9U.+6 Ա0U.+ ԱU.+NY ԱU.+ Ա3U.+ ԱU.+3 Ա5U.+ HANU.+9UNԠDMAHANN̠ BGU.+0ɯϠADDSSƠM-BASŠAD SYSYU.+ԠNYADDSSƠSYSMY SYSMUSԠPSSҠ''MMUNAN NԠU.+ƠUSԠPAAMS- NU.+3UNPNԠADDSS PU.+ADDSSS PU.+5 P3U.+6ƠUS PU.+ P5U.+PAAMS P6U.+9 PU.+30(SԠҠMAMUM PU.+3PAAMS DNNƠSYSMSS(UUS DMԠUtTRN.+3ADDSSƠ'DMAN'SԬ SKDDU.+33'SHDU'SԬ SUSP3U.+36'AVAABŠMMY'SԬ SUSPU.+3'DSàAAN'SԬ SUSP5U.+3'PAҠSUSPND'S T AT 29015-80002 B S P0122 FH-RTGEN REAL TIME SYSTEM GENERATOR             H0101 DNNƠUNGPGAMDSGMN' ԠU.+39DSGMNԠADD.ƠUNԠPG. NKU.+0'NKAG' MPU.+'MPAY(5-DS PϠU.+6'PY'D PNԠU.+'PMAYNYPN' SUSPU.+'PNԠƠSUSPNSN' AU.+9'AGS'AԠSUSPNSN BU.+50'BGS' ϠU.+5'ŠANDV SYSMMDUŠMMUNANAGS PANU.+5PAүKYBADANNAG PGU.+53PAҠMMUNANAG SAPU.+5ԠDSàSDNԠSAPPNGAG DUMMYU.+55ɯϠADDSSƠDUMMYN.AD DSDAU.+56DSàADD.ƠSԠDSGMN DSDPU.+5-PSNHNS DNNƠMMYAANBASS BPAU.+5AүԠDSàS.BPNKAA BPAU.+59AүԠDSàS.BPNKAA BPA3U.+60ABKGDSàS.BPNKAA BGU.+6AƠSDNԠBAYAA GU.+6AƠA-MŠAA MU.+63NGHƠA̠MŠMMNAA DAU.+6AƠүԠDSàSDNԠAA AVMMU.+65AƠSYSMAVAABŠMMY BKGU.+66AƠBAKGUNDAA BKMU.+6NGHƠBAKGUNDMMNAA BKDAU.+6AƠBKGDSàSDNԠAA UYPAAMS AGU.+69NGHƠAKASSGNMNԠAB ASDU.+0ƠAKSNSYSMDS SԲU.+SSAKNU(SYSM S3U.+SSAKNU3(AU. DSBU.+3DSàADDҠƠSBNYPS DSNU.+ƠSBNYPNS DSUԠU.+5DSàADDҠƠàUYPGS DSUNU.+6ƠàUYPGS GKU.+AD-N-G:USGAKƠKS GàU.+UNԠGϠAKSҠADDSS SUNU.+9SUŠŠUANDDSàADDSS MP̠U.+0MMYPԠNƠAG(0 vNNŠU.+5MMPԠNŠADDSS BKAU.+AƠMMYNBAKGUND HDԠUVŠSYSMGNAҠ G000B NA̠ANSҠSMADŠϠGNBYSNG00( NHŠSHGSҠANDPSSNGUN.ƠANYSA DDDUNGHŠNAZANPHASŬHŠNAZAN SNANBŠPAD. HŠNGMSSAGSAŠPNDDUNGHŠNAZAN PHASŬHHŠSPANSҠAHVADSNS. MSSAGŠSPNS HDSàHN?NҠA̠DGS SYSDSàSZ?NҠ3DMA̠DGS SAԠSAH?NҠ3DMA̠DGS N.PD?NҠDMA̠DGS SSAK?NҠ3DMA̠DGS$$ AUؠDSàSZ?NҠ3DMA̠DGS(ҠZϩ SSAK?NҠ3DMA̠DGS$$ BGHN?NҠA̠DGS PV.N.ADADD?NҠA̠DGS$$ SAPPNG?NҠYSҠN AMM?NҠ5A̠DGS PGMNP? BҠNP?NҠPԬMԬDƬҠY$$ PAMNP? NGSUSSU̠MPNƠHSSN HŠANSҠADDSSSMVDϠHŠNAZANSN ƠHŠADNGPHAS. GNà0àUNƠA̠ɯϬNUPS SBSPAŠNנN SBSPAŠNנN SԠDSKHANN HNDDAP DBMSSMSSADD:HDSKHN? SBPYPNԠMSSAGŬGԠPY DAPSԠҠA̠DGSNPU SBDNGԠDGSUNA MPHNDPAԠNPU SADHN̠SԠDSKHANN̠NUMB GԠSYSMDSKSZ SBSPAŠNנN SZDDAP DBMSSMSSADD:SYSDSKSZ? SBPYPNԠMSSAGŬGԠPY DAN3SԠҠ3D>bMA̠DGSNPU SBDNGԠDGSUNA MPSZDPAԠNPU SADSZŠSԠSYSMDSKSZ SBSPAŠNנN S̠DAP DBMS50MS50ADD:SAԠSAH? SBPYPNԠMSSAGŬGԠPY DAN3SԠҠ3DMA̠DGSNPU SBDNGԠDGSUNA MPS̠PAԠNPU SZASSƠZϠNPUԬUSŠDAUԠVAU MPDAԠ(DSàMD-PNԩ DBDSZŠƠNPUԠGAҠHANDSàSZŬ MBNBŠPAԠNPU ADBA A SSBSS MPS SS DAԠDADSZ AƬAƠAŠԠҠAKADDSS AҬAҠDVDŠBY$$ ANDM600SAŠAKADD.$$ SADSKSàSԠNA̠SAHADDSS SԠN.PDAKS SBSPAŠNנN PDDAP DBMSMSADD:N.PD? SBPYPNԠMSSAGŬGԠPY DANSԠҠDMA̠DGSNPU SBDNGԠDGSUNA MPPDPAԠNPU SAPAKSԠN.PDAKS GԠSSҠSYSMDS SBSPAŠNנNŠ$$ SñDAP6$$ DBMS0MS0ADD:SSAK?$$ SBPYPNԠMSSAGŬGԠPY$$ DAN3SԠҠ3DMA̠DGSNPU$$ SBDNGԠDGSUNA̠$$ MPSñPAԠNPUԠ$$ SASDSSԠSSҠSYSMDSà$$ GԠAUAYDSKSZ SBSPAŠNנN AUDSDAP DBMS33MS33ADD:AUؠDSKSZ? SBPYPNԠMSSAGŬGԠPY DAN3SԠҠ3DXMA̠DGSNPU$$ SBDNGԠDGSUNA MPAUDSPAԠNPU SADAUNSԠAUAYDSKSZ SZASSƠAU.DSàNԠPSNԬ$$ MPHN-SKPƠSSNPU.$$ GԠSSҠAU.DS SBSPAŠNנNŠ$$ SòDAP6$$ DBMS0PAԠ$$ SBPYSS$$ DAN3MSSAGŠAND$$ SBDNNPU.$$ MPSò$$ SAADSSԠSSƠSYSMDSà$$ SԠMŠBASŠGNAҠHANN SBSPAŠNנN HNԠDAP9 DBMS30MS30ADD:BGHN? SBPYPNԠMSSAGŬGԠPY DAPSԠҠA̠DGSNPU SBDNGԠDGSUNA MPHNԠPAԠNPU SABHNSԠBGHANN̠N. GԠPV.N.ADADD. SBSPAŠNנNŠ$$ DUMYDAP$$ DBMSMSADD:PV.N.AD?$$ SBPYPNԠMSSAGŬGԠPY$$ DAPSԠҠA̠DGSNPUԠ$$ SBDNGԠDGS$$ MPDUMY-ҬPAԠNPU.$$ SAPàSԠADD.ƠDUMMYAD.$$ SԠSAPPNGAG SBSPAŠNנN SAPDAP9 DBMS3MS3ADD:SAPPNG? SBPYPNԠMSSAGŬGԠPY DAN3 SBAGNɠMVŠ3HASϠBU SBAGAɠGԠNԠHAҠMBU PAZϠNDƠBU? SSYS-NNU MPSPҠNVADYSPPNS DABUƠGԠANSDHAS PAYHAҠHASY? MPSAPYYS-SԠSAP PANHAҠHASN? MPSAPNYS-SԠSAP0 SPҠSBNҠNVADYSPNS MPSAPPAԠNPU SAPYANASSSԠASKP SAPNASԠA0 SASAPƠSԠSAPPNGAG0NϯYS SԠASԠDAVA̠MMY SBSPAŠNנN SMADAP DBMSS3MSS3ADD:AMM? SBPYPNԠMSSAGŬGԠPY DAP5SԠҠ5A̠DGSNPU SBDNGԠDGSUNA MPSMAPAԠNPU SAASMSԠAMMҠSYSM SԠPGAMNPUԠUN SBSPAŠNנN PGMNDAP0 DBMSSMSSADD:PGMNP? SBPYPNԠMSSAGŬGԠPY SBSNԠGԠDŬANAYS MPPGMNPAԠUNԠNY SAPGMADSԠPGAMNPUԠDVҠADD SԠBAYNPUԠUN SBSPAŠNנN BNDAP0 DBMSS5MSS5ADD:BҠNP? SBPYPNԠMSSAGŬGԠPY SBSNԠGԠDŬANAYS MPBNPAԠNY SABADSԠBNPUԠDVҠADDSS SԠPAAMҠNPUԠUN SBSPAŠNנN PANDAP0 DBMSS6MSS6ADD:PAMNP? SBPYPNԠMSSAGŬGԠPY SBSNԠGԠDŬANAYS MPPANPAԠPAAMҠNPU SAPAADPAADPAMNPUԠDVҠADD SKP NGUŠDSKɯϠNSUNS DAN5 DBHPDSKGԠHGHPYADDSSS SBSDSKSԠHGHPYHANN̠NS. SZDHN̠SԠDSKHN̠N.Ϡ.P. gDAN9 SBSDSKSԠנPYDSKADDSSS A DSK5A0SԠDSKADDSS00 DSK6A0GԠSAUSD ANDMSAŠPԠB SZASKP-AKSPD MP+ SBSPAŠNנN DAP33 DBMS3MS3ADD:UNƠDSK. SBDKYɠPN:UNƠDSKP HԠ3BAԠҠPA MPDSK6PAԠHK DAASBUƬɠGԠADDSSƠBSAPBU ANDMSAŠPAGŠBS SAB DAASMGԠASYSMMMY ANDM060SAŠPAGŠNUMB SABUƠSAVŠPAGŠN.ƠBSAPD ҠBSԠANנBUҠADDSS SAASBUƬɠSԠBUҠADDҠNBSAP DASDSSԠƠSS-Ҡ$$ ADANSYSMDSàN$$ SAASԬɠBSAPAD.$$ MANA$$ ANDMNSUԠANDSԠUPDAŠAK$$ SAAMSKɠHSҠ0VAU.$$ ANASԠDSKADDSS0 DBABԠGԠADDSSƠBSAP SBADUԬɠUPUԠBSAPϠ0 ASԠDSKADDSS00 DBADBUƠGԠADDSSƠDBU SBADNɠADDSK00 DBADBUƠGԠADDSSƠDBU ADBP3ADUSԠҠHDN00 DABɠGԠDƠ00(BASàNԠPԩ SAABASìɠSԠBASàNYP.NNנD DAABԠGԠADDSSƠBSAPAD ANDMSAŠPAGŠBS ҠBUƠADDPAGŠN. SAAجɠSԠԠADҠNYP.ND ASԠDSKADDSS00 DBBDҠGԠADDSSƠ00BSAP SBADUԬɠPUԠUԠ00 DAANPԠGԠADDҠƠN.PG.D SAANSSԠUNԠANSҠADDSS SKP ,NAZŠADNG NPUԠA SADNSԠDSKҠUNԠϠZ SBSPAŠNנN SBSPAŠNנN MAGԠMP+9ƠMAGAPŠNԠDNDSKP- SBDMAGɠHSŬND Ԡ3MԠUN ANAANDSPA BϠ SBDMAGɠNUMB Ԡ. HԠ HԠHAS DAAMGԠASԠDAVA̠MMY ADAN9ADUSԠҠSԠDNԠNGH SABDNԠBDNԠADDҠƠSԠDN SAPDNԠPDNԠADDSSƠNԠDN DABSԠBSԠADDҠƠSԠSԠNY SAPSԠPSԠADDSSƠNDƠS DADSKSàGԠDSKADDSSƠSAHAA SADSKADSԠUNԠDSKADDSS DBADBUƠGԠADDSSƠDBU SBUADNAZŠUNԠDBUƠADDSS SBBU̠AҠDBU DAN6 SADNԠNAZŠUNԠDBUƠUN ASԠA- SAPGPGADNGAG- SԠҠPGBNDƠAD SҠ00-ADNԠSUŠPG SҠ0-MNAŠADNG SҠ0-ADBAYPGAM SNHԠBGԠSҬSԠNPUԠUN AGԠS SASKPƠMŠSϠAD MPSؠPSSNDƠADNDN SNDBPGMADGԠPGNPUԠDVҠADD ASSASKP-ADPGAMAP DBBADGԠBҠNPUԠDVҠADD SBPNADSԠNPUԠUNԠDVҠADD A SAGSԠԠAGGNŠ0 ADBNAYD DNDBABUƠABUƠADDҠƠBU SBBU̠AҠBU DADMAG PAPNAD SS MPPDV. DAN6 DBABU SBPNAD Ԡ000000 MPM MPPA. MPS PDV.DAN6 DBABUƠABUƠADDSSƠBU SBPNADɠGԠBNAYDMNPԠUN SZASԠҠDAMSNPU MPSҠNϠ-PSSD DAGGԠԠAG SZASKPƠMAؠ0ƠPMD MPDNGNŠ0DAMS MԠDAP DBMSSMSSADD: SBDKYɠPN: MPSNSԠSҬSԠNPUԠUNU PSSNPUԠD SҠA SAGSԠԠAGMAؠ0 DABU+GԠDDN AƬAҠAŠàϠנA ANDMSAŠ SAààDDNԠD SZASKPƠABSUŠD ADA6ADD-6B SSASSSԠҠà(5 MPҠNVADDYP SԠHKSUM DBBUƠGԠDNGH BƬBƠAŠϠנB MBNBSԠϠNG ADBP3ADD3ҠDUNԠNHKSUM SSBSSSԠҠSHԠ(3D MPҠSHԠ(-3DD SBDNԠSԠDDUN DABU+GԠD-NAZŠHKSUM DBABUƠABUƠA(BUƩ ADBP3SԠADDҠҠDƠU ADABɠADDDϠHKSUM NBNҠADD SZDNԠSKPƠNDƠD MP-3NNUŠHKSUMS PABU+SԠHGVNHKSUM MPDàPSSVADD NVADHKSUM PA.ŠDA0 SBҠPNԠҠMSSAG HԠ0BAԠҠPAҠNVBN DADMAGƠҠN PAPɘ+NADMASSSAG ASSHNSKP MPDNSŠADHŠD BMASSSAGŠS SBDMAGɠBAKSPA ԠN HԠD HԠAND MPDNADD ҠDA0 SBҠPNԠҠMSSAG HԠ0BAԠҠPAҠNVNN MPDNADD ASSYDSBYYP DàDAàGԠàDNԠD DBPGPGPGAMADNGAG PAPà?(NAM MPNAMҠPSSNAM SZBSKPƠNԠADNG MPNMҠDUԠƠSUN PAPà?(Nԩ MPNҠPSSNԠ PAP3à3?(DB̩ MPDBҠPSSDB̠ PAPà?(ԩ MPҠPSSԠ SKP PSSNDD ANASԠMASK ANDBU+SAŠMS AҠMVŠMSϠSGNPSN ҠD6ɠADDϠPYYP SAD6ɠSԠMSPYYP DADSKDGԠNԠDB̠ADDSS DBABUƠGԠADDSSƠBU SBADUԬɠUPUԠNDD DAADB̠GԠNԠDBSԠADDSS SAPADB̠SAVŠNDƠDBS AGԠMNANADD SAHAҠSԠUNԠ(MNVAU SԱDAMGԠMAؠANADD SAMAàSAVŠMAؠVAU DAABGԠADDҠƠDB̠S. SAADB̠SԠUNԠDBSԠADDSS SԲDAADB̠GԠADDSSƠNԠNY SZADB̠NҠADDҠҠNԠNY PAPADB̠NDƠS? MPS5YS-SԠҠNDƠS DBAɠGԠUNԠVAU MBNB ADBHAҠADDMNVAU SZBSSSKP-NԠUNԠVAU MPS3UPUԠUNԠD SSBSSSKP-GAҬUA̠ϠMN MPSԲGNŠSSHANMN DBAɠGԠUNԠVAU DABSAVŠVAUŠNA MBNB ADBMAàADDMAؠVAU MBSSBNBSZBSKP-NϠNנMA SAMAàSԠNנMA MPSԲGԠNԠVAU S3MAMPMNԠUNԠDBSԠADDSS ADAABADDADDҠƠDB̠S SADNԠSԠDB̠SԠDSPAMN DAPSԠDSKADDSS0 SBNDADɠNҠDB̠DSKADDSS SZDNԠSKP-NDƠSAHҠDB̠ MP-NҠDSKADDSS DBABUƠGԠADDSSƠBU SBADNɠGԠDMDSK SBDԠPAKPUԠUԠϠDSK DABU+MPU ANDMNGH ADABU+3PGAM SAH MPSԲGԠNԠVAU S5DAMAàGԠPVUSMA SAHAҠSԠNנMN PAMNDƠS?(NϠNנMAؠSԩ SS MPSԱNϠ-PSSNԠVAU A SAPGSԠPGADAGADNG SANGSԠAGҠBUԠNDUN DADSKDGԠADDSSƠNDD DBABUƠGԠADDҠƠBU SBADNɠGԠNDD SBDԠPAKPUԠUԠϠDSK DAHMPD? SZASSYS-SKP MPDNNϠ-GԠNԠN DBABUƠNPUԠNAMD SBADN DAHSŠNGH ҠMSGNNϠ SABU+6 DAHUPUԠNAM DBABUƠDAGAN SBADUԬ MPDNNנG NMҠDA03 SBҠPNԠҠMSSAG HԠ03BAԠҠPAҠNVNN MPDNADD SKP NAMDPSS NAMUfBU+3 NAM3UBU+ NAM5UBU+5 NPGUBU+6 NBPUBU+ NMUBU+ NYPUBU+9 NPϠUBU+0 NNԱUBU+ NNԲUBU+ NN3UBU+3 NNԴUBU+ NN5UBU+5 NN6UBU+6 NAMҠSZBSSSKPƠADNG MPNMҠDUԠƠSUN DABUƠGԠDNGH AƬAƠAŠϠנA PAPSԠҠNAMàDS MPSYPSԠNAMàҠ-GNAD PAP9SԠҠNAMà9DS SSYS-NNU MPҠNϠ-NVADDYP DAPGԠNנNAMàNGHD AƬAƠAŠϠHGHA SABUƠSԠNAMàNGHND SYPDANYPGԠUNԠPGAMYP SZASKP-UNԠYPŠSYSM MPNAMKDϠNԠSԠNAMDYP DADMAGƠNPUԠM PAPNADMASSSAG ASSGNҠHŠS AGԠSҠrPGAMYP AҬA AҠAŠϠנA ANDP5SAŠBS0-3 SANYPSԠPGAMYPŠNNAM SZAƠSYSMSԠPYϠZ DAP99 SANPϠSԠPY NAMKDBP3SԠDB̠DSKADDҠ03 SBDSKDSԠUNԠDB̠DSKADDSS B SBDSNԠAҠDSKSGMNԠUN SBNGAҠDSKSGMNԠUNԠAG SBPGSԠPGNԠADNG DAABGԠADDҠƠDB̠S. SAADB̠SԠUNԠDBSԠADDSS SBNDؠNAZŠDNԠADDSSS NNSBDؠSԠDNԠADDSSS MPNNAYS-NҠNAM DANAMGԠNAMŠ PADɠUA? SSYS-NNU MPNNNϠ-YNԠDN DANAM3GԠNAMŠ3 PADɠUA? SSYS-NNUō MPNNNϠ-YNԠDN DANAM5GԠNAMŠ5 ANDM00SAŠUPPҠHA PAD3ɠUA SSYS-NNU MPNNNϠ-YNԠDN DA0GԠҠDŠ-DUPAŠNAMS SBҠPNԠDAGNS DAP5 DBDGԠADDSSƠNAMŠNDN SBDKYɠPNԠDUPAŠPG.NAM MPPNAPAŠSԠƠDN NNADANAMGԠNAMŠ SADɠSԠNAMŠNDN DANAM3GԠNAMŠ3 SADɠSԠNAMŠ3NDN DANAM5GԠNAMŠ5 ANDM00SAVŠUPPҠHA SAD3ɠSԠNAMŠ5NDN DADNԠGԠADDSSƠNԠDN SAPDNԠSAVŠNԠDNԠADDSS PNADANYPGԠPGAMYP ANDMSAŠYP SAD6ɠSԠYPŠNDN DBNMGԠMMNNGH SBDɠSAVŠMMNNGH DBNBPGԠBPNGH SZBSSSKPƠBPNGHNN-Z MPSPҠSԠPY DA06GԠҠD SBҠPNԠDAGNS SPҠDANPϠGԠPY ANDMSAŠPY AƬAƠAŠϠUPPҠA ҠD6ɠADDPYϠYP SAD6ɠSԠPYYPŠNDN DADSKADDSKADUNԠDSKADD SAD5ɠSԠUNԠDSKADDҠNDN DBNPGMPD? SSBSSƠYSSKPSԠSH AHSŬAҠSH SAH DANNԱGԠSUND AƬAƠAŠϠUPPҠA AƬA̠AŠϠUPPҠ3BS ҠNNԲADDUNNVA SADɠSԠSUNDŬàMU DANN3GԠHUS AƬAƠAŠϠUPPҠA ҠNNԴADDMNUS SADɠSԠHUSMNUlS DANN5GԠSNDS AƬAƠAŠϠUPPҠA ҠNN6ADD0'SMSNDS SAD9ɠSԠSNDS0'SMSNDS A SAD0ɠAҠBSDNԠMANADDSS SBDԠPAKDUPUԠϠDSK MPDNGԠNԠD SKP DB̠àPSS DBҠDABU+3GԠANADDSS SAADB̬ɠSAVŠADDҠNDBS SZADB̠NҠDBSԠADDҠҠNԠNY DAADB̠GԠNԠDBSԠADDSS MANA ADAANDB̠ADDADDSSƠNDƠDB̠S SSASSSKP-DB̠V MP+3NϠDB̠V DAҲ0GԠҠDŠ-DB̠V SBҠPNԠDAGNS DADSKDGԠDB̠DSKADDSS DBABUƠGԠADDSSƠBU SBADUԬɠUPUԠDB̠D DADSKDGԠDSKADDSS SBNDADɠNҠADDSS SADSKDSԠNנDSKADDSS MPDNGԠNԠD SKP NԯԠDPSS NҠASSNԠPSS ҠAԠPSS SANGNGNԯԠAG DABU+SԠN.SYMBS ANDM3SAŠN.SYMBS MANA SANԠSԠSYMB̠UN DAABUƠABUƠA(BUƩ ADAP3P3+3 SNؠSASYMSԠSANGSYMB̠ADD NA SASYM3SԠHAS3ADD NA SASYM5SԠHAҠ5ADD SBNSԠNAZŠSԠADDSSS NرSBSؠSԠSԱ-S5 MPN3NDƠS DASYMɠGԠHAS PASԱɠUA? SSYS-NNU MPNرYNԠNY DASYM3ɠGԠHAS3 PASԲɠUA? SSYS-NNU MPNرYNԠNY DASYM5ɠGTRNԠHAҠ5 ANDM00SAŠUPPҠHA PAS3ɠUA? SSYS-NNU MPNرYNԠNY T BU 29015-80003 B S P0122 FH-RTGEN REAL TIME SYSTEM GENERATOR             H0101  DANGGԠNԯԠAG SZASSSKPƠN MPNشMPŠԠPSSNG PSSNԠ DASԴɠGԠDƠSԠNY SZASSSKPƠNN-ZϠ(DND MPNزMAKŠNYҠUNDND SSASKPƠNYMAD MPN6MAKŠNYҠBS DA05SԠDŠ-DUPAŠNYPN SBҠPNԠҠMSSAG DAP5 DBSԱSԱADDҠƠSYMB SBDKYɠPNԠDUPAŠNYSYMB MPNزGNŠDUPAŠN'S N6DAD6ɠGԠUNԠYP ANDMSAŠYP PAP3YPŠBGDSKSDN? SSYS-NNUŠ(ҩ MPNزMAKŠNYҠUNDND DAұ3SԠDŠNVADBGBSD SBҠVABŠ NزDADGԠMANDNԠADDSS SASԴɠNҠDNԠADDҠND MPN5 N3DASYMɠGԠHAS SASԱɠSԠHASNS DASYM3ɠGԠHAS3 SASԲɠSԠHAS3NS DASYM5ɠGԠHAҠ5 ANDM00SAŠUPPҠHA SAS3ɠSԠHAҠ5NS DAS5GԠD5ADD NA SAPSԠPSԠNԠSԠNYADDSS B SBS5ɠAҠD5NSԠNY(BH DANGGԠԯNԠAG SZASKPƠԠNY MPNزSԠDƠNԠNY DAD6ɠGԠYP ANDMSAŠYP DBDGԠMANDNԠADDSS PAP5YPŠBS? MBSSYS-SԠSԴBSƬSKP BNϠ-SԠSԴUNDND SBSԴɠYS-SԠADDSSNSԠD NشDAD6ɠGԠYP ANDMSAŠYP PAP5YPŠBGSGMN? SS:JYS-NNU MPN5NϠ-GNŠBGSGMANADD DADGԠUNԠDNԠADDSS SAMANSAVŠDNԠADDSS DASԴɠGԠDNԠADDSS SZASKPƠUNDND SSASKPƠDNԠADDSS MPN5GNŠUNDND SADNԠSԠDNԠADDSSҠD SBDؠSԠDNԠADDSSS HԠ0DNԠNԠUND DAD6ɠGԠYP SSASSSKPƠMAN MPNMANSԠAGҠGNNGBS ANDMSAŠYP PAP3YPŠBGDSKSDN? BSSSԠAGҠBSƬSKP NMANBSԠAGҠGNNGBS SBHAҠSԠAG0-GNůBS DAMANGԠUNԠDNԠADDSS SADNԠSԠҠNԠDNԠADDSSS SBDؠSԠUNԠDNԠADDSSS HԠ0ADDSSNVAD SZHAҠSKP-SԠDNԠADDҠҠBS MPN5GNŠƠNԠMANBGDSKS DASԴɠGԠBGMANADDSS SAD0ɠSԠMANDNԠADDҠNBSDN N5DASYMGԠSYMB̠ADD ADAP3ADUSԠҠBHNԠ DBNGGԠԯNԠAG SZBSKPƠԠNY NAADUSԠҠNԠà(-DNԩ SZNԠSԠSYMB̠UN MPSNؠPSSNԠSYMB SBDԠPAKDUPUԠϠDSK MPDNGԠNԠD SKP ŠààNDSK DԠPAKSHŠUNԠNNSƠBUƠNϠDBUƠANDDUMPS DBUƠHNԠNANS6DSƠAABŠNPU. ƠHŠNDDSBNGPSSDDԠSS PSSNGBAYPGAMSANDSSHŠN.ƠPAKD AABŠBAYDSND0ƠDNԠ USŠNMVNGHŠAABŠBAYϠHŠPD AAƠHŠDSKA^ҠHŠADNGPHASŠSMP. ANGSUN: AGND BGND SBD UN:NNSƠAANDBDSYD DԠNP DBABUƠGԠADDSSƠBU SBUA̠SAVŠUNԠBUƠADDSS DABUƠGԠDNGH AƬAƠAŠϠנA MANA SANԠSAVŠDNGHUN DDAUA̬ɠGԠDMBU SAUADɠSԠDNϠDBU SZDNԠSKPƠDBUƠU MPG̠SԠҠNDƠBU SBDDUԠUPUԠDBUƠϠDSK SSMԠUNԠDBUƠADDҠNMN G̠SZUADNҠUNԠDBUƠADDSS SZUA̠NҠUNԠBUƠADDSS SZNԠSKPƠBUƠMVDϠDBU MPDMVŠNԠDϠDBU DANGGԠNDAG SZASSSKPƠNDDAD MPDԬɠUN DADN PAN6BUҠMPY? SS SBDDUԠUPUԠϠDSK DAD6ɠGԠYP ANDMSAŠYP PAP5YPŠBGSGMN? MPDԬɠUN DADSNԠGԠA̠BҠDSKSҠUN SAD0ɠSԠA̠SҠUNԠNDN MPDԬɠUN SKP UPUԠDBUƠϠDSK HŠDDUԠSUBUNŠSHŠNNSƠDBUƠNH UNԠDSKS.NGHSDBUƠSAD HŠUNԠADDSSANDUNԠҠDBUƠAŠSԬ ANDHŠNԠDSKADDSSSSԠNϠDSKAD. ANGSUN: AGND BGND SBDDU UN:NNSƠAANDBAŠDSYD DDUԠNP DADSKADGԠUNԠDSKADDSS DBADBUƠGԠBUҠADDSS SBADUԬɠUPUԠDϠDSK DBADBUƠGԠADDSSƠDBU SBUADNAZŠDBUƠUNԠADDSS SBBU̠AҠDBU DAN6 SADNԠNAZŠUNԠDBUƠUN SZDSNԠUNԠD DADSKADGԠUNԠDSKADDSS SBNDADɠNҠUNԠDSKADDSS SADSKADSԠNנDSKADDSS MPDDUԬɠUN SKP PNԠMSSAGŬGԠPY HŠSUBUNŠPYNSHŠPNNGƠH MSSAGŬANGƠHŠNPUԠBUҬSNGҠHAAS ANSMDANDNAZANƠHŠBUҠSAN A̠NAZANMSSAGS. ANGSUN: ANϠHAAS(PS.NMSSAG BADDSSƠMSSAG SBPY UN:NNSƠAANDBAŠDSYD. PYNP SBDKYɠPNԠMSSAG DBABUƠGԠADDSSƠBU SBBU̠AҠBU DAP6 DBABUƠSԠBUҠADDSSҠNPU SBDYɠGԠPYMY SZASSSKPƠHAASANSMD MP-PAԠNPU SBAGNɬɠNAZŠBUƠSAN MPPYɠUN SKP NUMA̠NPUԠN HŠDNSUBUNŠANAYZSHŠNPUԠҠH HANN̠N.DSKSZSBGHANN̠N.ANDAS DƠAVAABŠMMY. ANGSUN: AMAؠN.ƠHAASPMDNSPNS. HŠSGNƠADMNSHŠNVSNM ASɠϠA̠(PS.ҠDMA̠(NG.. BGND SBDN UN: (N+:NNSƠAANDBAŠDSYD.ANNVAD HAAҠHASBNDDNHŠSPNSŬ HŠSPNSŠNANSANNVADN.HAAS. HŠMSSAGŠSϠBŠPADNUN. (N+:ANVDSU DNNP SBAGϬɠGԠA̯DMA̬UNA MP+NVADDG SBAGAɠGԠNԠHAҠMBU PAZϠHAҠZ?(NDƠBUҩ MP+3YS-NNU SBNҠNVADDGԠNY MPDNɠUN SZDNNҠUNADDSS DANϠGԠNVDNUMB MPDNɠUN SKP NVADYSPNS HŠNҠSUBUNŠPNSHŠDAGNSàҠNVAD SPNSSDUNGHŠNAZANSN. ANGSUN: AGND BGND SBN UN:NNSƠAANDBAŠDSYD. NҠNP DA0SԠNVADDVŠҠD SBҠPNԠҠMSSAG MPNҬɠUN SKP APHABàNPUԠN HŠSNԠSUBUNŠANAYZSHŠSPNSŠҠHŠPGAM BAYANDPAAMҠNPU. ANGSUN: AGND BGND SBSN UN: (N+:ANNVADSԠƠHAAS(NԠPԬMԬY ҠN.ƠHAASHASBNDD. AҠPNNGHŠDAGNSìAUNSMADŠ PMԠHŠMSSAGŠϠBŠPAD.HŠNNS ƠAANDBAŠDSYD. (N+:AADDSSƠDSGNADNPUԠDV BDSYD SNԠNP DANSԠMAؠN.DGSҠGNA SBAGNɠMVŠBUƠϠBU SBAGAɠGԠNԠHAҠMBU PAZϠHAҠZ?(NDƠBUҩ MP+3YS-NNU DNSBNҠNVADYSPNS MPSNԬɠUN- DABUƠGԠ-HAAҠD PAYYPYPŠY? MPYUNYS-UNԠSYP PAPYPYPŠPԠAD? MPPUNSԠUNԠPԠAD PAMYPYPŠMAGAP? MPMUNSԠUNԠMAGAP PADYPYPŠDSà? MPMUN-PSSASMAGAP. MPDNNVADPԬMԠҠY YUND}{ADYDYYNPUԠDVҠADDSS SS PUNDADPҠDPҠPԠADҠDVҠADD MPP.DV MUNAMԠҠD PADMAGDVҠADD? MPDNNϠ- SAMAGԠYS:AҠNDPMԠAG DADMAGDMAGMAGAPŠDVҠADD P.DVSZSNԠNҠUNADDSS MPSNԬɠUN SKP NSԠHN̠N.NNSUN HŠSDSKSUBUNŠSSHŠUNԠDSKHANN NS.NHŠɯϠNSUNS. ANGSUN: AN.DSϠBŠNGUD(NG. BADDSSƠNSUNADDҠS SBSDSK UN: ADSYD BNԠNSUNADDSS SDSKNP SADNԠSAVŠN.ƠNSUNS DABɠGԠNSUN ANDM00SAŠNSUND ҠDHN̠NSԠHANN̠N. SABɠSԠNSUNND NBNҠNSUNADDSS SZDNԠSKP-A̠NSUNSNG. MP-6NGUŠNԠNSUN MPSDSKɠUN SKP SԠUNDNDS HŠUNDNDNA̠NSANBŠSDA AHND--APŠNDNSDD. NGMPNƠHŠԠSNGHŠMPU HASϠPMԠHŠPAҠϠUNҠADDNA PGAMNPUԬҠNNUŠHHŠPSSNGƠPAAMS. SؠSBSPAŠNנN SBSPAŠNנN A SANNԠSԠSYMB̠UNԠ- SBNSԠNAZŠSԠADDSSS UNؠSBSؠSԠSԱ-S5 MPUԠNDƠS DASԴɠGԠDƠS MASSANASZASKPƠUNDNDҠBS MPUNؠYNԠSԠSYMB SZNNԠSԠҠSԠUNDƠ MPUؠNϠ-PUԠUԠSYMB̠NAM DAP0 DBMSSMSSADD:UNDƠS SBDKYɠPN:UNDƠS SBSPAŠNנN UؠDAP5 DBSԱSԱA(SYMB̩ SBDKYɠPNԠSYMB MPUNؠYNԠSYMB UԠSZNNԠSԠҠNϠUNDƠS MPNDؠNϠ-MԠMSSAG DAP DBMSS9MSS9ADD:NϠUNDƠS SBDKYɠPNԠMSSAG NDؠSBSPAŠNנN HԠBAԠҠPAҠNVNN AGԠSHGS SASSSKPƠSH0UP MPSNSԠҠPGAMҠBҠAD ASԠDSàHGH SADSKAϠZ SASHSԠSHDUDPGMAGϠZ DAMAGԠƠMԠҠDƠUSD SZAҠNPUԬSKPϠND MPPAMɠNϬNAŠPAAMҠNPU.$$ SBDMAGɠNDSANDBY Ԡ5MԠҠD.$$ MPPAMɠNAŠPAAMҠNPUԠSN SKP 0ASà0NVADYPY 0ASà0HKSUM 03ASà03DUԠƠSUN 0ASà0NVADD 05ASà05DUPAŠNYPNS 06ASà06NVADNAMà-BPNGH 0ASà0DUPAŠPGAMNAMS ұ3ASà3BGSGMNԠPDSBGMAN Ҳ0ASà0DB̠SԠV YYPASàY PYPASàP MYPASàM DYPASàD MSSDƠ+ ASàSYSDSàSZ? MSSDƠ+ ASàHDSàHN? MSS3DƠ+ ASà5AMM? MSSDƠ+ ASà5PGMNP? MSS5DƠ+ ASà5BҠNP? MSS6DƠ+ ASà5PAMNP? MSSDƠ+ ASà MSSDƠ+ MSS9DƠ+ ASàNϠUNDƠS MSDƠ+ ASàN.PD? MS30DƠ+ ASà5BGHN? MS3DƠ+ ASà5SAPPNG? MS3DƠ+ ASàUNƠDSÑ)PԠ-PSSUN MS33DƠ+ ASàAUؠDSàSZ? HPDSKDƠ+ɠHGHPYHANN̠NS. DƠNKG DƠDMA DƠDSK3 DƠDSK DƠDSKB נPYHANN̠NS. DƠDSK DƠDSK DƠDSK5 DƠDSK6 DƠDSK DƠDSK9 DƠDSKAG DƠDSK YHAҠASàY NHAҠASàN DHN̠BSSDSKɯϠHANN̠N.(A̩ PGMADBSSPGAMNPUԠDVҠADDSS BADBSSBNPUԠDVҠADD PNADBSSNPUԠDVҠADDSS GBSSNDAPŠAG-0GNMA NGBSSBUԠNDAG àBSSDDNAND SYMBSSHAҠADD SYM3BSSHAҠ3ADD SYM5BSSHAҠ5ADD NNԠBSSUNDNDSYMB̠UN ABDƠAؠDNŠADDSSSƠSAԠANDND ANDB̠ABS56BHŠDB̠SԠAA. ADB̠BSSUNԠDBSԠADDSS PADB̠BSSADDSSƠNDƠDBS G SKP G000B SԠPAAMSNϠDNS HŠPAAMҠNPUԠSNPMSAAN(ҠNDUN ƠHŠYPŬPYANDUNNVA̠ҠAHPGAM. AHPAAMҠDHASNŠƠHŠNGMAS: NAMŬYP NAMŬYPŬPY NAMŬYPŬPYUNNVA YPŠDMA̠DGS(-99 PYDMA̠DGS(0-99 UNNVA̠6PANDS -SUNDŠ(DMA̠DGS -UNMUPŠ(5DMA̠DGS 3-HUS(DMA̠DGS -MNUS(DMA̠DGS 5-SNDS(DMA̠DGS 6-0'SMSNDS(DMA̠DGS N:YPŠƠBGDSKSDNSHAVNGBGSGMNSMAYN BŠADHUԠDSYNGANSHP. PAAMSBSPAŠNנN DAP0 1 DBMSMSADD:PAAMS SBDKYɠPN:PAAMS SBSPAŠNנN DBPAADGԠPAAMNPUԠDVҠADDSS PBDYNPUԠUNԠY? SSYS-NNU HԠBAԠҠNSNƠPAAMS PASԠDBABUƠGԠADDSSƠBU SBBU̠AҠBU DAP6 DBABUƠGԠADDSSƠBU SBPAADɠGԠASɠPAAMҠD SZASSSKPƠHASNPU MP-PAԠPAAMҠNPU SAPANϠSAVŠPAAMҠDNGH SBGNԠNAZŠBUҠSAN DAN5 SBGNAMVŠHASMBUƠϠBU PAPMHAS? MPSBYS-SԠBAYYPŠNDN SBGA̠GԠNԠHAҠMBU PABANKHAҠBANK?(DMҠMMA MP+3YS-NNU PANҠDA09PAAMҠNAMŠ MPPA SBNDؠNAZŠDNԠADDSSS NDSBDؠSԠUNԠDNԠADDSSS MPPANҠYS-NVADNAM DADɠGԠNAMŠ PABUƠUA? SSYS-NNU MPNDNϠ-YNԠDN DADɠGԠNAMŠ3 PABU+UA? SSYS-NNU MPNDNϠ-YNԠDN DAD3ɠGԠNAMŠ5 ANDM00SAŠUPPҠHA PABU+UA? SSYS-NNU MPNDNϠ-YNԠNAM SԠYP DAN SBGàNVԠϠA MPPAҠNVADDG SBGA̠GԠNԠHAҠMBU PAZϠHAҠZ?(NDƠBUҩ SSYS-NMU PABANKHAҠBANK?(DMҠMMA MPSYPSԠPGAMYPŠNDN PAҠDAұ0PAAMҠYPŠ MPPA  SYPBƠHSSHŠSHDUDPGM DADAGAN PASHHN SBSHAҠSAG DBNϠGԠNVDNUMB DAD6ɠGԠPVUSYP ANDM600SԠPVUSYPŠZ ҠBNSԠNנYP SAD6ɠSԠNנYP DBDPSԠBϠDNԠADDSS ANDM0MASK0BS PAM0S? SSYS-SKP MPSYNϠ-NNU ҠD6ɠZϠ0BSAND SAD6ɠSԠDN SSASSƠSUBUNŠGN MPSYGNҠSUBUN ANDMGԠYPŠϠA SZAƠZϠ ADAN5MŠHAN SSASKP SBSHSŠSԠPGMDNԠNSHAG SYSBGA̠GԠNԠHAҠMBU PAZϠHAҠZϠ?(NDƠBUҩ MPPASԠYS-GԠNԠPAAMҠD SԠNנPGAMPY DANSԠUNԠҠDMA̠NVSN SBGàNVԠϠA MPPAPҠPY SBGA̠GԠNԠHAҠMBU PAZϠHAҠZϠ?(NDƠBUҩ SSYS-NNU PABANKHAҠBANK?(DMҠMMA MPSNҠSԠPY PAPҠDAұPAAMҠPY MPPA SNҠDAD6ɠGԠYP ANDMSAŠYP DBNϠGԠPY SZBSSSKP-PYND DBP99PAŠZϠPYH99 SZASSSKP-NԠSYSMPGAM BSԠSYSMPYϠZ BƬBƠAŠPYϠUPPҠB DAD6ɠGԠPVUSPY ANDM3SAŠPYSԠϠZ ҠBNSԠNנPY SAD6ɠSԠNנPY SBGA̠GԠNԠHAҠrMBU PAZϠHAҠZϠ?(NDƠBUҩ MPPASԠYS-GԠNԠPAAMҠD GԠSUND DANSԠҠDMA̠DGS SBNԠGԠDGSMBU AƬAƠAŠϠUPPҠA AƬA̠AŠϠUPPҠ3BSNA ANDM600SAŠUPPҠ3BSNA SADɠSԠNDNԠ GԠUNMUP DAN5SԠUNԠҠDMA̠NVSN SBNԠGԠDGSMBU ANDM600SAŠUPPҠ3BSNA SZASKPƠVADMUP MPPAҠNVADUNNVMA DANϠGԠNVDNUMB ҠDɠADDϠSUND SADɠSԠNDNԠ GԠHUS DANSԠҠDMA̠DGS SBNԠGԠDGSMBU AƬAƠAŠϠUPPҠA SADɠSԠNDNԠ GԠMNUS DANSԠҠDMA̠DGS SBNԠGԠDGSMBU ҠDɠADDϠHUS SADɠSԠNDNԠ GԠSNDS DANSԠҠDMA̠DGS SBNԠGԠDGSMBU AƬAƠAŠϠUPPҠA SAD9ɠSԠNDNԠ9 GԠNSƠMSNDS DANSԠҠDMA̠NVSN SBGàNVԠϠA MPPAҠNVADDG SBGA̠GԠNԠHAҠMBU PAZϠHAҠ0?(NDƠBUҩ SSYS-NNU MPPAҠNϠ-NVADDM DANϠGԠNVDNUMB ҠD9ɠADDϠSS SAD9ɠSԠNDNԠ9 MPPASԠGԠNԠPAAMҠD pUNNVA̠NPUԠN NԠNP SBGàNVԠϠA MPPAҠNVADDG SBGA̠GԠNԠHAҠMBU PABANKHAҠBANK?(DMҽMMA SSYS-NNU MPPAҠNϠ-NVADDM DANϠGԠNVDNUMB MPNԬɠUNHNUMBҠNA PAҠDAұPAAMҠNVA̠ PAҠSAMPŠSAVŠҠD SBPNԠSԠҠPNNGBU DAMPŠGԠҠD SBҠPNԠҠMSSAG SBSPAŠNנN MPPASԠADPAAMҠD PNԠBUƠUNSSMY PNԠNPPNԠNNSƠBU DBPAADGԠADDSSƠPAAMҠUN PBDYDVŠY? MP+YS-MԠPNNGNY DAPANϠPANϠPAAMҠDNGH DBABUƠABUƠBUҠADDSS SBDKYɠPNԠPAAMҠD MPPNԬɠUN SBSBPNԠSԠҠPNNG SBSPAŠNנN SKP SԠBAYMYPŠAS HSSNSUDHNHŠPAAMSHAV BNMPYADN.ԠMPUSHŠMAMUMNGH BHHŠA̠MŠANDBAKGUNDMMNAAS. NADDNԠDMSHSŠBAYPGAMSMBAY(6 ϠUY(ƠHYHAVŠNԠBNADBYSDNԠPGAMS. NAYԠSVSA-DSNƠDŠҠAHUS PGAM(PUSANADDNA̠6DSƠDSKSDNԩ GNAŠHŠDSGMNS.NAYԠSVSAKYD NANHŠADDSSƠAHDSGMN. ԠASϠSSUPHŠDNԠADDSSƠHŠPGAM BŠADDUSԠPҠϠHŠPGAMϠBŠPUԠNH SHDUDSԬƠANY. A SAKYNAҠA̠KYDUN = SASNԠAҠSHԠDSGUN SANԠAҠNGDSGUN SAMԠAҠԠMNGH SAMBGAҠBGMNGH SBNDؠNAZŠD SؠSBDؠSԠDNԠADDSSS MPMNMNAŠDSGMNԠUN DAD6ɠGԠYP ANDMSAŠYP DBDɠGԠMMNNGH PAPYPŠԠSDN? MPSàSԠԠMMNNGH PAPYPŠԠDSKSDN? MPSàSԠԠMMNNGH PAP3YPŠBGDSKSDN? MPSBàSԠBGMMNNGH PAPYPŠBGSDN? MPSBàSԠBGMMNNGH PAP5YPŠBGSGMN? MPSBàSԠBGMMNNGH PAZϠYPŠSYSM? SSYS-NNU PAP6YPŠBAY? SZBSSSKP-HASNVADMMN MPSؠPSSNԠDN DA3SԠDŠNVADMMN SBҠPNԠDAGNS DAP5 DBDGԠDNԠADDSS SBDKYɠPNԠPGNAMŠҠNVADM MPSؠPSSNԠDN SBàDAMBGGԠPVUSMAؠMMNNGH MANA ADABSԠAPGM-PVUSM SSASSSKPƠPVUSGA SBMBGSԠNנMAؠBGMMNNGH DAD6ɠGԠMS SSASSSKPƠMAN MPSؠPSSNԠDN SZKYNNҠA̠KYDUN ANDMSAŠYP PAPYPŠBGSDN? MPNSàYS-UNԠSHԠDSGMN NàSZNԠNҠA̠NGDSGMNԠUN MPSؠPSSNԠDN NSàSZSNԠNҠA̠SHԠDSGUN MPSؠPSSNԠDN SàDAMԠGԠPVUSMAؠMMNNGH MANA ADABSԠ6zTRNAPGM-PVUSM SSASSSKPƠPVUSGA SBMԠSԠNנMAؠԠMNGH DAD6ɠGԠMS SSASSSKPƠMAN MPSؠPSSNԠDN SZKYNNҠA̠KYDUN ANDMSAŠYP PAPYPŠԠSDN? MPNSàYS-UNԠSHԠDSGMN MPNàNϠ-UNԠNGDSGMN %eT CV 29015-80004 B S P0122 FH-RTGEN REAL TIME SYSTEM GENERATOR             H0101  MNSBSPA DAP3 DBMSMSADD:ƠBANKD'S$$ SBAADɠPNԠANDGԠPY DANGԠ$$ SBGàDMA̠DGSNVԠ$$ MPM-NVADNPU.$$ SZASSƠZϬADD$$ NAҠBKG.N-NŠADNG.$$ SABSAVŠ.$$ ADANԠADDϠNGDSGMNԠUN.$$ SANԠ$$ ADBKYNADDϠKYDUNԬ$$ NBADDҠMNA.$$ SBKYN$$ SBASHƬɠSԠUPHŠSHDUŠPGMPAAMS DAAAPGԠADDSSƠADNGSN SAANSSԠANSҠADDSSϠAD MPAAPɠADABSUŠSYSM MDAM3PNԠ$$ SBҠ"Ҡ0"$$ MPMN+ M3ASà0$$ SKP AҠUNDNDS PASSBNSԠNAZŠS S3SBSؠSԠSԠADDSSS MPNDBSԠUSAGŠAGS DASԴɠGԠDNԠADDSS SSASSSKP-UNDND MPS3GNŠDNDNYPN A SASԴɠAҠDNԠADDSS MPS3YNԠSԠNY HSUNŠSADAҠHŠSYSMSADDBUԠBŠH BAY. SPà AҠADAGSҠYPŠ6PGMS 6NP SBNDؠNAZŠD SؠSBDؠSԠDNԠADDSSS MP6ɠNDƠDNS DAD6ɠGԠYP ANDMSAŠYP PAP6YPŠBAY? SSYS-NNU MPSؠPSSNԠDN DAD3ɠ YPŠ6-GԠADAG AҬŬAADBԠϠŠ-ANDAD SAD3ɠSԠADAG SZSSASԠADD? MPSؠNϠ-NNU DA39YS-GA̠SYSMN SBҠҠ39 DAP5NנSNDHŠNAM DBDƠHŠADPGM SBDKY SPà SBNSԠNAZŠS SUؠSBSؠSԠUNԠSԠADDSSS MPSؠND-NNUŠDSAN DASԴɠGԠDNԠADDSS PADNԠBNGSϠUNԠPG? ASSYS-NNU MPSUؠNϠ-YNԠN SAS5ɠSԠNKϠZ. MPSUؠNNUŠSAH SPà DM̠NPDMŠUNADYPŠ6ϠYPŠ DABDNԠSԠUPHŠSAN SADNԠPAAMS DAP6ҠYPŠ6 SAPYPŠSAN DMSSBADSNɠGϠSԠDADDSSS MPDM̬ɠND-SϠUN DBD3ɠASPGM SBSSADD? SZD6ɠNϻHANGŠϠYPŠ. MPDMSYSNϠNNUŠSAN NDBDAAPASGԠADDҠƠPAAMҠNPUԠD SAANSSԠNA̠ANSҠADDSS MPPAAMGԠPAAMS SKP GNAŠɯϠABS HSSNƠDŠGNASHŠɯϠABS ҠHŠSYSM.HSŠNUDŠHŠUPMNԠABŠ(ԩ SANDADDVŠNŠABŠ(DԩANDNUPԠAB. HŠԠDSHAVŠHŠNGMA: NDVN (16 BIT WORD) * (I.E.,XXB,2XXB,OR 20XXB, WHERE "XX" IS * THE PRINTER LU) * * IF "H"=0, THE "V" BIT, IF SET, ENABLES * THE PRINTING OF THE FIRST CHARACTER IN * THE USER'S BUFFER. IF BOTH "H" AND "V" * ARE ZERO, THE FIRST CHARACTER IN THE * BUFFER IS USED FOR VERTICAL FORMAT CON- * TROL, AS FOLLOWS: * ::=SINGLE SPACE * 0::=DOUBLE SPACE * 1::=PAGE EJECT * *::=SUPPRESS SPACE * OTHERS::=SINGLE SPACE * AN 81 CHARACTER REQUEST LENGTH IS AL- * LOWED IN THIS MODE, SINCE THE FIRST * CHARACTER IS USED FOR FORMAT CONTROL. * * IF "H"=1, HONESTY MODE IS SPECIFIED. * THE CHARACTER STRING IS OUTPUT TO THE * PRINTER, AND THE USER IS RESPONSIBLE * FOR SUPPLYING HIS OWN CR, LF, OR FF * CHARACTERS. AN LF OR FF RESULTS IN AN * AUTOMATIC CR. IF THE LINE EXCEEDS 80 * CHARACTERS, ANY ADDITIONAL ONES WILL * WILL BE DISCARDED UNTIL A CR, LF OR * FF IS FOUND. * IBUFR=USER BUFFER ADDRESS * IBUFL=USER BUFFER LENGTH (POSITIVE FOR WORDS AND * NEGATIVE FOR CHARACTERS) * * * * * * * NAM DVR12 29028-60002 780103 REV 1805 ENT I.12,C.12 SKP * ENTRY/EXIT OF INITIATION SECTION SPC 2 I.12 NOP ENTRY/EXIT JSB SETIO CONFIGURE DRIVER A2700 CLA,CCE STA IC12 I.12 ENTRY FLAG STA EQT9,I STA EQT10,I CLEAR EQT TABLE AREAS LDB A3 SET REJECT CODE IN B JSB STAT CHECK STATUS JMP EXIT EXIT REJECT LDA EQT6,I FETCH CONTROL WORD AND A3 BITS 3-0 ARE REQUEST CODE CLB,INB SET REJECT CODE IN B CPA A2 PRINT REQUEST? JMP PRINT YES CPA A3 CONTROL REQUEST? JMP CNTRL YES EXIT LDA B REASON FOR EXIT IN B JMP I.12,I EXIT SKP * PROCESS CONTROL REQUEST SPC 2 CNTRL LDA EQT6,I FETCH CONTROL WORD ALF,ALF RAL,RAL AND A77 LDB A2 SET EXIT CODE CPA A11 LEGAL CONTROL REQUEST? JMP CNTR1 YES CPA A15 CONDITIONAL FORM FEED? RSS YES JMP EXIT NO, EXIT CLA,INA CPA COUNT AT TOP OF PAGE? JMP EXIT4 YES - BAIL OUT JMP PGEJT+1 NO - THEN GO TO TOP * CNTR1 LDA EQT7,I FETCH PARAM SSA PAGE EJECT? JMP PGEJT YES CMA,INA ADA D63 SSA UNDEFINED REQUEST? JMP EXIT4 YES, TAKE IMMED. COMPL. EXIT LDB EQT7,I SZB PARAM = 0? JMP SIM NO, GO PROCESS CONTROL REQUEST LDA EQT11,I YES, SET * FOR IOR A100 NEXT STA EQT11,I REQUEST EXIT4 LDA A4 IMMEDIATE COMPLETION JMP I.12,I EXIT SKP * PROCESS PRINT REQUEST SPC 2 PRINT LDB EQT7,I CONVERT BUFFER WORD ADDRESS RBL TO STB EQT7,I CHARACTER ADDRESS CLA LDB EQT8,I CONVERT NUMBER OF CHARACTERS OR CCE,SSB WORDS TO NEGATIVE CHARACTERS JMP *+3 CMB,INB BLS,CLE ERA SET B15 OF EQT11 TO INDICATE IOR EQT11,I REQUESTED WORDS OR CHARACTERS STA EQT11,I BACK STB EQT8,I SAVE COUNT ADB DM1 STB EQT9,I SET EQT9 TO ONE LESS INB LDA HFLAG HONESTY? IF SO, DON'T TRUNCATE SZA INPUT BUFFER TO 80 CHARACTERS JMP MUOUT ADB D80 LDA VFLAG TEST FOR "V" BIT SET SZA,RSS IF NOT SET, ALLOW 81 CHARACTERS INB SSB,RSS MAX OF 80 CHARS? JMP AWAY YES LDB D80 NO, SET TO 80 SZA,RSS IF "V" BIT NOT SET, SET CHARS TO 81 INB CMB,INB JMP BACK AWAY CPA A200 "V" BIT SET ? JMP MUOUT YES, OUTPUT CHARS JSB CHA FETCH FIRST CHAR (COLUMN 1) JMP ONELN NO MORE CHAR, EXIT CPB STAR *? JMP STARR YES LDA A200 CPB A60 0? (DOUBLE SPACE?) JMP DBSPC YES CPB A61 1? (PAGE EJECT?) RSS JMP MUOUT NO STA DBFLG YES JMP PGEJT DBSPC STA DBFLG JMP ONELN SEND SINGLE SPACE SPC 2 STARR LDA EQT11,I IOR A100 STA EQT11,I SET STAR NOW FLAG SPC 2 MUOUT JSB CHA FETCH CHARACTER JMP DONE ALL CHARS OUT JSB LFFCR CHECK FOR LF, FF, OR CR SZA,RSS JMP MU.1 NOT SPECIAL CHARACTER CPA A1 IS IT A LF? JMP LFX YES CPA A2 CR? JMP LFX+1 YES - OUTPUT IT CLA,INA FF - RESET LINE COUNT STA COUNT RSS LFX JSB LNCNT KICK LINE COUNTER FOR LF LDA DM81 STA EQT13,I RESET CHARACTER POINTER MU.0 LDA DM20 CHARACTER IS LF OR FF,SO  STA EQT12,I RESET BUFFER COUNT JMP OTB1 AND OUTPUT LF OR FF MU.1 ISZ EQT13,I 81ST CHARACTER? JMP MU.2 NO - OUTPUT IT CCA YES - RESET EOL COUNTER STA EQT13,I JMP MUOUT AND THROW CHARACTER AWAY MU.2 ISZ EQT12,I USE INTERRUPT EXIT? JMP OTB2 NO JMP MU.0 YES OTB2 OTB CH OUTPUT CHARACTER STC2 STC CH,C NOP DELAY 3 CYCLES BEFORE CHECKING JSB STAT STATUS JMP REJ JMP MUOUT SPC 2 DONE LDA HFLAG HONESTY? SZA NO - CONTINUE JMP EOLFN YES - GO TO COMPLETION LDA EQT11,I AND A100 SZA,RSS * NOW? JMP ONELN NO LDA EQT11,I YES, CLEAR AND A1767 * NOW STA EQT11,I AND JMP CARTN SEND HOLD SPC 2 CHA NOP FETCH CHARACTER ISZ EQT9,I MORE CHARACTERS? RSS JMP CHA,I NO, RETURN TO P+1 LDA EQT7,I CLE,ERA LDA A,I ISZ EQT7,I SEZ,RSS ALF,ALF AND A377 STA B JSB LFFCR LF, FF, OR CR? SZA JMP QRS+1 YES - SKIP VALIDITY CHECK LDA B ADA AM40 SSA CHAR < 40? JMP QRS YES ADA AM140 SSA,RSS CHAR > 177? QRS LDB A100 YES, OUTPUT @ SYMBOL ISZ CHA JMP CHA,I RETURN P+2 WITH CHAR IN B SPC 2 SIM CMB,INB SIMULATE TAPE LEVEL FORMAT STB EQT10,I ADB D55 SSB,RSS CARRIAGE CONTROLS 1-67B? JMP CLOP YES, LINE ADVANCE CMB NO, SIMULATE TAPE ADB TA LDA COUNT GET CURRENT LINE COUNT ADA B,I SUBTRACT INCREMENT SSA,RSS OVERFLOW? JMP *-2 NO - REPEAT STA EQT10,I YES - SAVE NEW INCREMENT CMA,INA ADA COUNT ADA DM60 IS TOTAL COUNT >60? SSA,RSS JMP PGEJT YES - PAGE EJECT BZJMP CLOP NO - OUTPUT REQUIRED NUMBER OF LINES SPC 2 TA DEF *+1 DM1 DEC -1 ONE LINE DEC -2 DOUBLE LINE DEC -3 TRIPLE LINE DEC -30 HALF PAGE DEC -15 QUARTER PAGE DEC -10 SIXTH PAGE DEC -59 PAGE BOTTOM DM60 DEC -60 PAGE EJECT SPC 2 PGEJT CLA,INA PAGE EJECT STA COUNT RESET LINE COUNT CLA STA EQT10,I LDB A14 JMP OTB1 CARTN LDB A15 JMP OTB1 ONELN CCA ONE LINE SPACE STA EQT10,I CLOP JSB LNCNT INCREMENT LINE COUNTER LDB A12 ISZ EQT10,I NOP OTB1 OTB CH JSB PAK PACK DATA INTO EQP TABLE STC1 STC CH,C CLA CPA IC12 JMP I.12,I OPERATION INITIATED STA IC12 ISZ C.12 JMP C.12,I CONTINUATION EXIT SKP * ENTRY/EXIT OF COMPLETION SECTION SPC 2 C.12 NOP ENTRY/EXIT ISZ IC12 C.12 ENTRY FLAG JSB SETIO CONFIGURE DRIVER JSB STAT CHECK STATUS JMP REJ EXIT REJECT CLA CPA DBFLG DOUBLE SPACE OR PG EJ? JMP *+3 NO STA DBFLG YES, RESET FLAG AND JMP MUOUT OUTPUT CHARS CPA EQT10,I MORE SPACES TO SIMULATE? RSS NO JMP CLOP YES CPA EQT9,I MORE CHARACTERS? RSS NO JMP MUOUT YES EOLFN JSB PAK LDB EQT8,I READY THE TLOG SSA CONVERT TO WORDS OR CHARACTERS JMP *+3 AS REQUIRED CMB,INB BRS CLA CLC CLC CH CLEAR CONTROL CPA HFLAG HONESTY? JMP C.12,I NO - EXIT P+1 CPA IC12 YES - CHECK IC12: IF STILL IN JMP EXIT4 INITIATOR, EXIT W/ IMMED. COMPL. JMP C.12,I EXIT P+1, COMPLETION RETURN REJ LDA A3 REJECT EXIT CODE CLB CPB IC12 JMP I.12,I INITIALIZATION RETURN STB IC12 CLA,INA JMP C.12,I COMPLETION RETURN SKP SPC 2 * SUBROUTINES AND CONSTANTS SPC 2 UNPAK NOP UNPACK EQT TABLE LDA EQT6,I AND A200 STA VFLAG SET VFLAG IF "V" BIT IS SET LDA EQT11,I AND A77 SZA,RSS SET 0 = 1 CLA,INA STA COUNT PRINTER LINE COUNT POINTER LDA EQT11,I AND A200 STA DBFLG DOUBLE LINE SKIP FLAG LDA EQT6,I CHECK FOR HONESTY ALF,RAL SSA,RSS CLA IF NOT, CLEAR HFLAG STA HFLAG IF SO, SET HFLAG SZA,RSS IS HFLAG SET? JMP *+3 NO UP1 RSS JMP UNPAK,I YES - EXIT LDB DM20 -20 DECIMAL CHAR STB EQT12,I PRINT BUFFER CHARACTER POINTER LDB DM81 NO HONESTY, SO RESET CHAR PNTR STB EQT13,I CLA STA UP1 NOP UP1 AFTER FIRST PASS JMP UNPAK,I SPC 2 PAK NOP PACK EQT TABLE LDA EQT11,I AND A1025 IOR COUNT IOR DBFLG STA EQT11,I JMP PAK,I SPC 2 LNCNT NOP INCREMENT LINE COUNT LDA COUNT INA CPA D61 CLA,INA RESET LINE COUNT STA COUNT JMP LNCNT,I SPC 2 SETIO NOP CONFIGURE DRIVER IOR LIA SELECT CODE IN A STA STAT1 ADA A1200 STA STC1 STA STC2 ADA A2700 CLA,CLE STA OTB1 STA OTB2 ADA A100 STA CLC JSB UNPAK SET ALL EQT CONSTANTS IN PRG JMP SETIO,I EXIT SPC 2 STAT NOP FETCH STATUS STAT1 LIA CH INPUT HARDWARE STATUS SZA,RSS HARDWARE BUSY OR NOT READY? ISZ STAT NO, RETURN P+2 JMP STAT,I YES, RETURN P+1 SPC 2 LFFCR NOP LF, CR, OR FF CHECK ROUTINE LDA HFLAG SZA,RSS HONESTY? JMP LFFCR,I NO - RETURN A=0 CLA CPB A12 IF LF, SET A=1 0.*INA CPB A15 IF CR, SET A=2 LDA A2 CPB A14 IF FF, SET A=-1 CCA JMP LFFCR,I SPC 2 LIA LIA 0 A1 OCT 1 A2 OCT 2 A3 OCT 3 A4 OCT 4 A11 OCT 11 A12 OCT 12 A14 OCT 14 A15 OCT 15 A60 OCT 60 A61 OCT 61 A77 OCT 77 A100 OCT 100 A200 OCT 200 A377 OCT 377 A1025 EQU LIA A1200 OCT 1200 A1767 OCT 177677 AM40 OCT -40 AM140 OCT -140 D55 DEC 55 D61 DEC 61 D63 EQU A77 D80 DEC 80 DM20 DEC -20 DM81 DEC -81 IC12 NOP COUNT NOP VFLAG NOP DBFLG NOP HFLAG NOP STAR OCT 52 SPC 2 A EQU 0 B EQU 1 CH EQU 10B SPC 2 EQT1 EQU 1660B RTE EQT1 EQT6 EQU 1665B RTE EQT6 EQT7 EQU 1666B RTE EQT7 EQT8 EQU 1667B RTE EQT8 EQT9 EQU 1670B RTE EQT9 EQT10 EQU 1671B RTE EQT10 EQT11 EQU 1672B RTE EQT11 EQT12 EQU 1771B RTE EQT12 EQT13 EQU 1772B RTE EQT13 END GS0 O \ 29029-80001 1740 S C0222 RTE DVR 00              H0102 |ASMB,R,L,C RTE CONSOLE DRIVER DVR00 HED ** RTE DRIVER DVR00 29029-60001 **** NAM DVR00,0 29029-60001 REV 1740 770808 * ENT I.00,C.00,I.01,C.01,I.02,C.02 EXT $LIST,$OPSY ****************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED * REPRODUCED OR TRANSLATED INTO ANOTHER PROGRAM LANGUAGE WITHOUT * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. ****************************************************************** * ****** PROGRAM DESCRIPTION ****** * * DRIVER 00 OPERATES UNDER THE CONTROL OF THE * I/O CONTROL MODULE OF THE REAL-TIME EXECUTIVE. * THIS DRIVER IS RESPONSIBLE FOR CONTROLLING DATA * TRANSMISSION WITH A TELETYPE ASR 33/35 WITH THE * 2116 PARALLEL INTERFACE. <00> IS THE EQUIPMENT * CODE ASSIGNED TO THIS TYPE OF DEVICE. I.00 IS * THE ENTRY POINT FOR THE *INITIATION* SECTION AND * C.00 FOR THE *COMPLETION* SECTION. * * - THE INITIATION SECTION IS CALLED FROM I/O * CONTROL TO INITIALIZE A DEVICE AND INITIATE * A DATA TRANSFER OR CONTROL FUNCTION. * * CALLING SEQUENCE: * * - ADDRESSES OF DEVICE EQT ENTRY * SET IN "EQT1-EQT15" - * * (A) = I/O ADDRESS OF DEVICE * * (P) JSB I.00 * (P+1) - RETURN - * * (A) = 0, OPERATION INITIATED, OR * (A) = REJECT CODE: * * 2, ILLEGAL CONTROL REQUEST, * OR CONTROL FUNCTION HAS * BEEN DONE (E.G., SET EOT * STATUS). * * * - THE COMPLETION SECTION IS CALLED BY CENTRAL * INTERRUPT CONTROL TO CONTINUE OR COMPLETE * AN OPERATION. * * CALLING SEQUENCE: * * - ADDRESSES OF DEVICE EQT ENTRY * SET IN "EQT1-EQT15" - * * (A) = I/O ADDRESS OF DEVICE * * (P) JSB C.00 * (P+1) -- COMPLETION RETURN -- * D (P+2) -- CONTINUATION RETURN -- * * - COMPLETION RETURN: * (A) = 0, SUCCESSFUL COMPLETION WITH * (B) = # WORDS OR CHARS. TRANSFERRED * (A) = 2 IF SIMULATED EOT ENCOUNTERED, * (A) = 4 IF TIME OUT OCCURED. * (B) = 0 * * - CONTINUATION RETURN: REGISTERS * MEANINGLESS. * * * - RECORD FORMATS: * * ASCII (INPUT): A STRING OF CHARACTERS TERMIN- * ----- ATED BY A LINE-FEED. IF THE * REQUESTED LENGTH IS FULFILLED * BEFORE A LINE FEED, THE RE- * MAINING CHARACTERS ARE IGNORED * UNTIL A LINE-FEED IS INPUT. * THE 8-LEVEL BIT (BIT 07) IS * SET = 0 FOR 7-BIT ASCII CODE. * * SPECIAL CHARACTER PROCESSING: * * RETURN - ALWAYS IGNORED AND IS NOT * TRANSMITTED TO USER BUFFER * LINE-FEED - IGNORED IF INPUT BEFORE * THE FIRST VALID CHARACTER * OF A RECORD; RECORD TERMINATOR * AT THE END OF A RECORD AND IS * NOT TRANSMITTED TO BUFFER OR * COUNTED. * CONTROL/A - DELETES PREVIOUS CHARACTER * BACKSPACE (CRT) OR CONTROL/Y -DELETES PREVIOUS CHARACTER * CONTROL/H * RUB-OUT - DELETES CURRENT RECORD; * AFTER LINE-FEED IS INPUT, * NEXT RECORD IS READ. * CONTROL/D - FOURCES EOT IF ENTERED AT ANY TIME * * ASCII (OUTPUT): A STRING OF CHARACTERS, THE * ----- NUMBER DESIGNATED BY THE * "BUFFER LENGTH" IN THE REQUEST, * TERMINATED BY A RETURN AND * LINE-FEED (SUPPLIED BY THE * DRIVER). * * SPECIAL PROCESSING FOR ASCII * OUTPUT IS PROVIDED IF BIT 09 * IN THE CONTROL WAzORD = 1. THIS * MEANS THAT THE ASCII INFOR- * MATION IS TO BE PUNCHED INSTEAD * OF PRINTED ON AN ASR-35. * * SPECIAL CHARACTER PROCESSING: * * LEFT-ARROW: IF A LEFT-ARROW IS THE * LAST CHARACTER IN THE USER * BUFFER, THE RETURN/LINE-FEED * AND ARROW CODES ARE NOT OUTPUT. * * A ZERO BUFFER LENGTH CAUSES ONLY A * RETURN/LINE-FEED TO BE OUTPUT. * * * BINARY (INPUT): A STRING OF CHARACTERS * ------ SPECIFIED BY THE BUFFER * "LENGTH" IN THE REQUEST. * * "V-FORMAT": IF THE "V" FIELD * IN THE CONTROL WORD OF THE * REQUEST = 1, THE LENGTH OF * THE RECORD IS DESIGNATED (IN * WORDS) BY THE FIRST CHARACTER * OF THE RECORD. THE WORD COUNT * INCLUDES THE FIRST WORD. IF * THE WORD COUNT IS LARGER THAN * THE BUFFER LENGTH, THE BUFFER * LENGTH IS USED. * * BINARY (OUTPUT): A STRING OF CHARACTERS * ------ SPECIFIED BY THE BUFFER * "LENGTH" IN THE REQUEST. * FOUR (4) FEED-FRAMES ARE * OUTPUT AT THE END OF THE * END TO SERVE AS AN INTER- * RECORD GAP. * * * - SIMULATED END-OF-TAPE: IF CONTROL/D IS ENTERED DURING A NORMAL * --------- --- -- ---- ASCII READ OR IF 30 FEED-FRAMES * (ZEROS) ARE INPUT * BEFORE THE FIRST CHAR- * ACTER OF A RECORD, AN * EOT INDICATION IS * SET IN THE STATUS FIELD * (BIT 05 OF WORD 5) OF * THE EQT ENTRY AND THE * ǯ INPUT TERMINATED. IF * THE EOT BIT IS SET * WHEN THE CONDITION IS * ENCOUNTERED, THE EOT * IS IGNORED AND CHARS * ARE INPUT UNTIL A * RECORD IS STARTED (I.E, * LEADER IS AUTOMATICALLY * SKIPPED AFTER EOT). * * SPECIAL FORMAT BIT:THE SPECIAL FORMAT BIT(10) ALLOWS * READING OF NONSTANDARD TAPE FORMATS * IF SET AND V IS NOT SET THEN NO * LEADERILL BE SKIPPED ON READS * AND ON BINARY OUTPUT THE INTERRECORD * FOUR FEED FRAMES WILL BE SUPPRESSED. * IN ADDITION ALL CHARACTERS INA AN ASCII * EXCEPT THE TERMINAL LINE FEED ARE PASSED * TO THE USER BUFFER AND ARE COUNTED. * IF ON INPUT THE V-BIT IS SET THE * RECORD WILL BE PROCESSED AS AN ABSOLUTE * BINARY RECORD IN THAT 3 WILL BE ADDED * TO THE WORD COUNT IN THE FIRST NON-ZERO * CHARACTER. THE V-BIT IS NOT TESTED * FOR OUTPUT SO THE FOUR FEED-FRAMES WILL * BE SUPPRESSED AS IF THE V-BIT WERE NOT . * * - CONTROL FUNCTIONS ACCEPTED: * * 10 - TEN INCHES OF ZEROS (FEED-FRAMES) ARE * OUTPUT FOR LEADER/TRAILER. * * 11 - LINE SPACING: THE PARAMETER WORD OF THE * REQUEST DETERMINES THE NUMBER OF * LINE-FEEDS TO BE OUTPUT. * * 07 - THE EOT STATUS BIT IS SET TO ALLOW * "LEADER" TO BE SKIPPED ON THE NEXT * INPUT REQUEST. * * * - SYSTEM TELETYPE PROCESSING: THE SYSTEM * TELETYPE IS ALWAYS LEFT IN THE * "INPUT STATE" WITH CONTROL SET/ * FLAG CLEARED TO LEAVE THE KEYBOARD * ACTIVE. IF A KEY IS STRUCK WITH * NO INPUT IN EFFECT, THE FLAG * "OPATN" IN BASE PAGE IS SET NON- * ZERO. IF A KEY IS STRUCK DURING * AN OUTPUT OPERATION TO THE SYSTEM * TTY, THE FLAG IS SET. * * * - SPECIAL PROCESSING SPC 1 * THIS DRIVER HAS BEEN MODIFIED TO CORRECTLY DRIVE * THE PUNCH AND PHOTO READER. IT ALSO CHECKS FOR * BUSY STATUS ON THE TTY INTERFACE AND TAKES THE * ACTION NEEDED TO AVOID LOSS OF SYNC. SPC 1 * - 2762 PRINTER PROCESSING SPC 1 * THE 2762 PRINTER REQUIRES THE FOLLOWING SPECIAL ACTIONS: * 1. STALL CHARACTERS ARE PROVIDED ON THE END OF EACH OUTPUT. * THE NUMBER OF STALLS IS A FUNCTION OF WHETHER IT IS A * 2762 A OR B AND THE # OF CHARACTERS PREVIOUSLY OUTPUT * IN THE LINE. * 2. CONTROL/H IS SENT AS PART OF BACKSPACE PROCESSING * INSTEAD OF CONTROL/Y. SPC 1 * THE ABOVE PROCESSING IS DONE FOR * DEVICES WITH ODD SUBCHANNELS. * (SEE BELOW FOR MEANING OF OTHER SUBCHANNEL BITS) SPC 2 * - EOT/TIME OUT OPTIONS SPC 1 * TIME OUT IS INTERCEPTED BY THIS DRIVER AND EOT DETECTED BY * IT. THE CALLER WILL ALWAYS RECEIVE THE * STATUS APPROPIATE TO * THE CONDITION, HOWEVER THE SYSTEM NEED NOT BE NOTIFIED OF * THE CONDITION. THE DRIVER ANDS THE UNIT NUMBER WITH THE * A REGISTER PRIOR TO A COMPLETION RETURN THUS THE SUBCHANNEL * DEFINES THE POSSIBLE ERRORS SENT TO THE SYSTEM. * TIME OUT IS 4 AND EOT IS 2 THUS: SPC 1 * IF EOT IS TO PUT THE DEVICE DOWN SET SUBCHANNEL TO 2,3,6,OR 7. * IF TIME OUT IS TO PUT THE DEVICE DOWN SET * SUBCHANNEL 4,5,6 OR 7. SPC 1 * THIS DOES NOT AFFECT THE NOT-READY ERROR CAUSED BY LOW TAPE * ON THE PUNCH SINCE THIS IS DETECTED AT INITIATION. SPC 1 * THE ABOVE INPLIES TT A ZERO OR 1 S&UBCHANNEL TTY OR PHOTO * READER IS ONLY SET DOWN BY AN OPERATOR "DN" REQUEST. SPC 2 * - PROGRAM SCHEDULING SPC 1 * IF A PROGRAM IS LINKED TO THE TRAP CELL FOR ONE OR * MORE OF THE EQT ENTRIES FOR THIS DRIVER THEN THAT * TTY IS A TERMINAL. * * A TERMINAL, WHEN ENABLED, MAY SCHEDULE THE SO LINKED * PROGRAM (MAY BE A DIFFERENT PROGRAM FOR EACH TERMINAL) * BY STRIKING ANY KEY AND TIME * THAT THE TTY IS NOT DOING INPUT * ( THE SAME AS GETTING SYSTEM ATTENTION). IF THE * TERMINAL IS THE SYSTEM TTY THE SYSTEM ATTENTION FLAG * IS SET AND THE PROGRAM IS NOT SCHEDULED. * WHEN THE PROGRAM RUNS A CALL TO RMPAR WILL RECOVER * WORDS 4 THRU 8 OF THE EQT OF THE INTERRUPTING * TTY, THAT IS EQT4 IS SET IN THE PROGRAMS B REG. SPC 1 * - BUFFER FLUSHING SPC 1 * A BUFFER FLUSH CALL HAS BEEN IMPLEMENTED. AFTER THIS * CALL ALL WRITES AND ACTION (I.E. LEADER AND PAGING) * CONTROL REQUESTS ARE IGNORED UNTIL EITHER: SPC 1 * 1.) THE QUE IS EMPTY OR * 2.) A RESTORE CONTROL REQUEST IS PROCESSED OR * 3.) AN INPUT REQUEST IS PROCESSED. * - ADDED REQUESTS SPC 1 * CONTROL SUBFUNCTION ACTION SPC 1 * 20 ENABLE TERMINAL SPC 1 * 21 DISABLE TERMINAL SPC 1 * 22 SET TIME OUT ( THE EXTRA CONTROL * WORD IS TO BE THE NEW TIME OUT) SPC 1 * 23 CLEAR THE OUTPUT QUE (BUFFER FLUSH) SPC 1 * 24 RESTORE OUTPUT PROCESSING * THIS REQUEST NEED ONLY BE GIVEN IF * SOME OF THE BUFFER IS TO BE SAVED. SPC 1 * - EQT USAGE - * * EQT5 STATUS BITS ARE USED AS FOLLOWS: * * BIT 0 - NOT USED.  * BIT 1 - TERMINAL IS ENABLED (1)/DISABLED (0) * BIT 2 - 0 IF BOL STALL / 1 IF EOL STALL * BIT 3 - NOT USED. * BIT 4 - NOT USED. * BIT 5 - EOT FLAG. * BIT 6 - NOT USED. * BIT 7 - BUFFER FLUSH IS IN PROGRESS (NEVER SEEN BY A USER). * * EQT6 FUNCTION BITS AS SEEN IN THE CALL, I.E.: * * BIT 6 - BINARY OR M BIT * BIT 7 - VARIABLE LENGTH BINARY OR (V) BIT * BIT 8 - ECHO BIT SET TO ECHO ON INPUT (E) BIT * BIT 9 - PUNCH BIT SET TO PUNCH ASCII. * BIT 10- HONEST BIT (SEE ABOVE) (H) BIT. * * EQT7 USER BUFFER LENGTH * * EQT8 USER BUFFER ADDRESS. * * EQT9 RUNNING CHARACTER ADDRESS,POINTS AT NEXT CHARACTER * ON CONTROL OR BINARY GAP - NUMBER LEFT TO DO. * * EQT10 ADDRESS OF LAST CHARACTER IN USER BUFFER FOR READ/WRITE * ALSO OPERATION COUNT ON LEADER AND SPACING CONTROL OPS. * * EQT11 STALL COUNTER - EOT COUNTER * RESIDUE COUNTER ON VARIABLE LENGTH BINARY READS. * * EQT12 ADDRESS TO GO TO ON INTERRUPT. * * EQT13 -1 IF NOT A TERMINAL ELSE ID SEG ADDRESS OF TERMINAL PROG. HED 29029-60001 * ********* INITIATION SECTION ********** * * I.00 NOP I.01 EQU I.00 I.02 EQU I.00 * STA NXQU SAVE THE SELECT CODE JSB SETIO SET I/O INSTRUCTIONS FOR UNIT. LDA DIMX SET UP C.XX FOR CONTINUATION STA C.00 RETURN * LDA EQT13,I GET SCHEDULE FLAG SZA DEFINED?? JMP CONT YES CONTINUE LDA NXQU NO SO SET UP ADA N6 INDEX INTO THE INTBLE ADA INTBA TO GET THE SCEDULE WORD LDB A,I GET THE WORD CMB,CLE,SSB,INB SET POSITIVE IF EQT THEN CCB,CCE SET TO -1 IE NO PGM TO BE SCHEDULED STB EQT13,I SAVE FOR PGM CALL LDB EQT1 SET EQT ADDRESS IN STB A,I THE INTERRUPT TABLE LDA EQT4,I SET THE "I WILL HANDLE TIME OUT" IOR BIT12 BIT IN EQT4 STA EQT4,I RESTORE THE WORD * CONT H*LDA EQT6,I GET CONTROL WORD OF REQUEST, .23B OCT 23 RAR ROTATE TO TEST FOR SSA,SLA CONTROL REQUEST JMP CONTL - CONTROL REQUEST - * LDB EQT5,I BLF,BLF CHECK IF IGNOR BIT IS SET SLA,ELA IF READ SKIP E=1/0 READ/WRITE SSB,RSS IF WRITE AND FLUSHING,SKIP JMP NSET FAILED ONE OF THE CONDITIONS * JSB NXQU GO TEST THE CONDITIONS IMCOM LDA .4 THEN DO AN JMP I.00,I IMMEADIATE EXIT SPC 1 .4 OCT 4 BIT12 OCT 10000 DIMX DEF IMCOM N30 DEC -30 MAX STALL COUNT FOR 2762B NULCT NOP N6 DEC -6 N7 DEC -7 MAX STALL COUNT FOR 2762A SKP * * CONSTRUCT DEVICE PROGRAM CODE ACCORDING TO REQUEST * NSET LDB PRINT SET FOR PRINT SEZ IF READ REQUEST ADB BIT13 SET TO KEYBOARD RBR,ELB SET LEAST B 1/0 READ/WRITE * LDA EQT7,I CONVERT BUFFER ADDRESS TO EVEN RAL CHARACTER ADDRESS AND SET STA EQT9,I AS CURRENT BUFFER ADDRESS. LDA EQT8,I GET BUFFER LENGTH. CMA,SSA,INA,RSS IF CHARACTERS SPECIFIED, JMP D02.1 USE VALUE. .20B OCT 20 ALS CONVERT WORDS TO CHARACTERS. CMA,INA MAKE NEGATIVE D02.1 SLB,RSS SKIP ZERO CHECK JMP D02.3 IF WRITE SZA,RSS IF CHAR. COUNT = ZERO, SET = -1 CLE,INA FOR SYSTEM PROTECTION. D02.3 ADA EQT9,I SET ADDRESS OF LAST CHAR. STA EQT10,I IN EQT 10 SPC 1 LDA EQT6,I POSITION CONTROL ALF,ALF INFORMATION .22B OCT 22 RAL FIELD FOR EXAMINATION CCE,SLB IF REQUEST IS FOR INPUT, JMP D01 GO TO SELECT DEVICE CONDITIONS. * RAL,SLA,RAR IF BINARY MODE, JMP D00 GO TO SELECT PUNCH UNIT. B1100 ARS ROTATE "P" BIT TO RAR,SLA BIT 00, TEST BIT. D00 ADB MPUNC IF PUNCH SUBTRACT TO THE PUNCH CLA,INA SET A TO ILLEGAL DRIVER TYPE FOR THIS REQUEST JMP D02 FOR PUNCH ASCII (P=1). * D01 ERA,SLA,RAR IF KEYBOARD MODE SELECTED, ADB BIT13 TURN ON THE ECHO BIT SEZ,CME,RSS IF V-BIT SKIP HONIST BIT SET E RAR,ERA ELSE HONEST BIT TO E LDA .2 ILLEGAL TYPE CODE TO A * * INITIALIZE FLAGS,EOT COUNTER ECT. * D02 CPA TEMP5 IF ILLEGAL CALL FOR THIS DRIVER JMP ILCOD TYPE GO REJECT THE CALL * LDA EOTC FOR INPUT, SET EOT COUNTER CME,SLB,RSS ELSE CLA SET TO ZERO TO AVOID POSSIBLE STALL STA EQT11,I SPC 1 LDA WCONT SET UP THE CONTINUE ADD * * SELECT DEVICE OPERATING CONDITIONS - DEVICE * NEEDS TO BE SELECTED ONLY ONCE FOR EACH * OPERATION. * D02.6 STA EQT12,I SET RETURN ADDRESS IN EQT 12. LDA TEMP3 GET THE TTY STATUS SLB,RSS SKIP IF READ SSA,RSS IF WRITE SKIP IF BUSY IO1 OTB TTY SEND SET UP COMMAND UNLESS BUSY. SEZ,SLB IF READ JMP D23.1 GO DO READ THING SLB IF HONEST INPUT JMP D21.2 GO DO HONEST READ THING CLE,SSA,RSS IF NOT BUSY JMP D19 GO OUTPUT FIRST CHARACTER JSB INCR GO WAIT FOR INTERRUPT! JMP CONT TRY TO SET UP AGAIN SPC 2 ILCOD CLA,INA ILLEGAL REQUEST EXIT JMP I.00,I TAKE ACCEPT RETURN SPC 2 N4 OCT -4 MPUNC OCT -10000 BIT13 OCT 20000 PUNCH OCT 110000 PRINT OCT 120000 WCONT DEF D31 ADDRESS OF OUTPUT PROCESSOR SPC 3 NXQU NOP LDA $OPSY WHAT OP SYSTEM IS THIS ? CPA DM9 RTE 4 ? RSS YES. CPA DM13 RTE M4 ? RSS YES JMP NXQU1 NOT RTE 4. * RSA GET THE DMS STATUS ALF SEE WHICH MAP WE WERE ENTERED UNDER SLA,RSS SYS OR USER MAP ? JMP NXQU1 SYSTEM MAP. * XLA EQT1,I USER MAP SO DO CROSS LOADS TO GET INFO XLA A,I JMP X<:6NXQU2 GO SEE IF THIS IS LAST REQUEST. * NXQU1 LDA EQT1,I IF THE LAST REQUEST IN THE QUEUE LDA A,I THEN CLEAR NXQU2 CLE,SZA THE IGNOR BIT JMP NXQU,I NOT LAST REQUEST SO EXIT LDA EQT5,I LAST REQUEST SO CLEAR AND NT204 THE IGNOR BIT STA EQT5,I RESET THE WORD JMP NXQU,I AND RETURN SPC 2 NT204 OCT 177577 B200 OCT 200 .11B OCT 11 .21B OCT 21 .24B OCT 24 EOTC DEC -29 DM9 DEC -9 DM13 DEC -13 SKP x<* * CONTROL REQUEST PROCESSING * CONTL LSR 5 ROTATE CONTROL BITS TO LOW PART OF WORD AND B177 ISOLATE FUNCTION FIELD. LDB EQT7,I GET THE EXTRA CONTROL WORD SSB,RSS IF POSITIVE CMB,INB SET NEGATIVE CPA .10B FIELD = <10> TO GENERATE JMP D05 LEADER (10 INCHES OF BLANK TAPE) CPA .11B FIELD = <11> FOR LINE JMP D06 SPACING CPA .7 IF FUNCTION = 7, GO TO SET JMP EOTSM SIMULATED EOT STATS. CPA .20B IF 20 THEN JMP ON GO TURN ON THIS TERMINAL CPA .21B IF 21 JMP OFF GO TURN OF THIS TERMINAL CPA .22B IF 22 THEN JMP TIME GO SET THE TIME OUT PRAMETER CPA .23B IGNOR REQUEST? JMP CLBUF YES GO EFFECT A BUFFER CLEAR CPA .24B RESTORE NORMAL I/O? JMP RSTOR YES GO RESTORE IT * REJ JSB NXQU CHECK FOR EMPTY QUE * LDA .2 SET (A) = 2 FOR ILLEGAL CONTROL JMP I.00,I - RETURN FOR REJECT- * CLBUF LDA B200 SET THE FLUSH FLAG .10B SLA SKIP * EOTSM LDA B40 SET BIT 05 (EOT STATUS) TO IOR5 IOR EQT5,I SKIP LEADER ON ST5 STA EQT5,I NEXT INPUT, CAUSE REJECT RETURN * * REQUEST ERROR - CAUSE REJECT RETURN TO I/O CONTROL * JMP REJ DO ILLEGAL REJECT * ON LDA EQT13,I GET THE ID ADDRESS INA,SZA IF NO ADDRESS THEN SKIP (A=0) JSB D30 ENABLE THE INTERRUPT RAL,CLE,ELA ROTATE SIGN TO BIT 1 JMP IOR5 GO STORE IT SPC 1 OFF LDA N3 GET NOT OF BIT 1. AND5 AND EQT5,I MASK BIT OUT OF STATUS JMP ST5 GO RESTORE IT IN THE EQT * TIME STB EQT14,I SET THE NEW TIME OUT IN THE EQT. JMP REJ GO TO THE REJECT EXIT * N100 DEC -100 * * LEADER/TRAILER GENERATOR * D05 RSS OR NOP IF 2762 JMP REJ REJECT LEADR REQUEST FOR 2762 SPC 1 LDA N100 SET INDEX COUNTER FOR FEED FR+AMES STA EQT9,I = -100. LDB PUNCH CLA (A) = 0 FOR JMP D07 FEED FRAME. * * RESTOR NORMAL OPERATION I,E . STOP IGNORING REQUESTS * RSTOR LDA NT204 GET THE MASK TO A JMP AND5 GO MASK AND RESTORE EQT5 * * LINE SPACING * D06 SZB,RSS PROTECT AGAINST CCB,CLE A ZERO VALUE. STB EQT9,I SET INDEX. LDA FLINF (A) = LINE FEED CODE LDB PRINT D07 STA EQT10,I SET ACTION CODE, LDA EQT5,I CHECK THE IGNOR BIT AND B200 SET SZA JMP REJ YES REJECT THE REQUEST CLA,INA IF TYPE CPA TEMP5 IS O1 JMP REJ THEN REJECT THE CONTROL LDA DFCNT SET UP THE INTERRUPT ADDRESS IN A JMP D02.6 NO RETURN TO START OUTPUT,(B)00=0 SPC 3 FLINF OCT 412 LINE FEED WITH FLAG SET DFCNT DEF D39 B177 OCT 177 HED 29029-60001 * SUBROUTINE: * * PURPOSE: TO CONFIGURE THE I/O INSTRUCTIONS * IN THE DRIVER TO REFERENCE THE * SUBJECT TELETYPE. * * CALL: (A)05-00 CONTAINS I/O ADDRESS * (P) JSB SETIO * (P+1) -RETURN- (REGISTERS MEANINGLESS) * SETIO NOP TEMP2 EQU SETIO IOR LIB COMBINE WITH I/O ADDRESS STA IO3 AND SET. IO3 LIB TTY GET THE CHARACTER AND TEMP3 EQU IO3 SAVE IT STB TEMP3 * XOR B4300 CONSTRUCT INSTRUCTION. STA IO2 STA IO6 STA IO9 * IOR B1100 CONSTRUCT INSTRUCTION STA IO4 STA IO7 * IOR B4000 CONSTRUCT INSTRUCTION. STA IO5 XOR B1100 STA IO1 STORE OTB INSTRUCTION LDA EQT4,I CONFIGURE FOR THE 2762 ALF,ALF ROTATE THE LEAST RAL,ELA SUBCHANNEL BIT TO E LDB N7 DELAY COUNT FOR 30CPS AND .10B EXTRACT BIT9 SZA LDB N30 DELAWY COUNT FOR 120CPS STB NULCT STALL COUNT FOR 2762 A OR B LDA RSS GET A RSS TO A CLB,SEZ NOP TO B SWP SWAP IF 2762 STA D05 SET SWITCH 2 STB D20.1 SET SWITCH 4 STB SW5 SET SWITCH 5 LDA EQT5,I SET UP ALF,ALF THE DVR NUMBER AND .3 IN STA TEMP5 TEMP5 * JMP SETIO,I SPC 2 B4300 OCT 4300 B4000 OCT 4000 .7 OCT 7 .2 OCT 2 LIB LIB 0 HED < DRIVER 00 *COMPLETION SECTION*> 29029-60001 * ********* COMPLETION SECTION ********** * * C.00 NOP C.02 EQU C.00 C.01 EQU C.00 * JSB SETIO SET I/O INSTRUCTIONS FOR UNIT. * LDA EQT1,I GET THE QUE WORD CCE,SZA IF NO QUE THEN SKIP JMP D19 QUE SO GO HANDLE I/O FUNCTION STA EQT15,I SET TIME OUT TO ZERO (NO ACTIVE RQ) JSB SCHD NO QUE SO A SCHEDULE OR ATTN. JMP EXIT GO TAKE CONTINUATION EXIT * D19 LDA EQT4,I CHECK FOR TIME OUT ALF IF TIME OUT ENTRY SSA TEST BIT 11 JMP TMX1 GO DO TIME OUT EXIT. LDB EQT6,I GET REQUEST CONTROL WORD - RBR,SLB,BLF IF OUTPUT GO DO OUTPUT JMP D20 CHECKS D19.1 RBL,CLE,RBL POSITION THE WORD ELB,BLF H - BIT TO E,M - BIT TO B(00) LDA B40 SET A TO ASCII BLANK SLB,ERB H TO B(15),V TO B(00) M TO E-REG CLA IF BINARY WIPE THE BLANK STA FILL SET FILL CHARACTER STB TEMP2 SET TEMP2 :H---P:E:V: LDA TEMP3 GET CHAR :15--2:1:0: SPC 1 SEZ,RSS IF ASCII REMOVE AND B177 THE 8-LEVEL BIT. LDB EQT12,I GET THE RETURN ADDRESS AND JMP B,I GO TO IT. SPC 3 D20 LDA TEMP3 GET THE CHARACTER SEZ,CLE,RSS IF FIRST OUTPUT JMP D20.2 GO TEST FOR EOT ON PUNCH SPC 1 AND B377 MASK OUT THE CHARACTER Ϯ CPA B377 IF RUBOUT RSS SKIP;ELSE JSB SCHD SCHEDULE THE PROG OR SET ATTN. * D20.0 LDA EQT11,I PENDING STALLS COUNTER SZA,RSS ANY PENDING STALLS? JMP D19.1 NO - CONTINUE ISZ EQT11,I YES - NOW DONE IF SKIPS! JMP D20.X PUT OUT A STALL * LDA EQT5,I BIT2 = 0 IF BEGINNING OF LINE STALL AND .4 EXTRACT IT SZA,RSS IS IT BOL STALL? JMP D20.X YES BYPASS OUTPUT OF LF CODE XOR EQT5,I NO - FIRST CLEAR BIT2 STA EQT5,I LDA LINF THEN SEND THE LINEFEED LDB EQT12,I RETURN ADDRESS JMP IO9 BYPASS CHECKS FOR LF CODES D20.X LDA EQT12,I SET RETURN ADDRESS FOR OUTCR STA OUTCR JMP STAL2 DO A STALL * D20.2 AND B60 MASK TO THE EOT BITS CMA,CLE,INA SET E IF NOT EOT LDA N3 PRECEED ALL OUTPUT WITH 3 STALLS D20.1 NOP RSS IF 2762 - ELSE NOP CLA OMIT STALLS IF ITS A NOP STA EQT11,I SET STALL COUNTER LDA .2 CHECK IF DVR02 CPA TEMP5 ? SEZ,CCE,INA IE EOT AND DVR02 SKIP JMP D20.0 GO LOOK FOR STALLS JMP I.00,I ILLEGAL CALL REJECT IT. * * INPUT SECTION * D23.1 JSB INCR GO GET A CHARACTER. SZA IF NON-ZERO CHARACTER, JMP D21 PROCESS. * * CHECK FOR POSSIBLE EOT CONDITION * LDA EQT5,I IF EOT FLAG AND B40 ALREADY SET SZA,RSS IGNOR LEADER ISZ EQT11,I INDEX EOT COUNTER. JMP D23.1 -INDEX NOT ZERO, TRY NEXT CHAR. SPC 1 D23.2 CLB SET (B) = 0 FOR EOT AND GO JMP D28 TO STATUS COMPLETION SECTION. * * PROCESS INPUT CHARACTER * D21 SEZ,RSS IF ASCII GO JMP D22 DO ASCII THING. * * VARIABLE LENGTH CHECK AND PROCESSING * LDB TEMP2 CONTINUE IF SLB,RSS INPUT RECORD IS JMP D23 NOT VARIABLE LENGTH SSB u TEST THE HONEST BIT ADA .3 ADD THREE IF ABSOLUTE * B60 CLE,ALS CONVERT TO # CHARACTERS, ADA EQT9,I ADD CHARACTER BUFFER ADDRESS STA B SAVE POSSIBLE NEW EOR ADDRESS CMA,INA SUBTRACT FROM CURRENT EOR ADDRESS ADA EQT10,I AND IF SSA,RSS BUFFER IS BIG ENOUGH STB EQT10,I SET UP TO READ THE WHOLE RECORD STA EQT11,I SAVE OVERAGE FOR EOR SKIPPING LDA TEMP3 RESTORE CHAR. TO A. JMP D23 GO STORE THE CHARACTER. SPC 1 B31 OCT 31 .1 DEC 1 .3 DEC 3 SPC 1 D21.2 JSB INCR GET THE NEXT CHAR. SEZ IF BINARY JMP D23 GO STORE IT * * ASCII INPUT PROCESSING * D22 LDB TEMP3 IF TTY IS BUSY HE IS SSB TOO FAST FOR US SO JMP D24 GO RUB HIM OUT!! CPA RETN IF RETURN THEN JMP ASEOL GO DO EOR PROCESSING * LDB TEMP2 IF HONEST MODE SSB THEN JMP D23 GO STORE THE CHARACTER CPA B177 JMP D24 - RUBOUT - CPA LINF JMP D21.2 - LINE FEED - CPA .10B IF TRUE BACKSPACE OR IF RSS CPA B31 CONTROL Y (2600 BACKSPACE) RSS RSS SKIP TO CONTROL A PROCESSOR CPA .1 JMP D25 - CONTROL/A - CPA .4 EOT SIMULATE INPUT? JMP D23.2 YES GO SET EOT. * * STORE CHARACTER IN USER BUFFER * D23 LDB EQT9,I GET CURRENT BUFFER ADDRESS. CPB EQT10,I IF BUFFER FULL JMP D21.2 GO GET NEXT CHAR. CLE,ERB CONVERT TO WORD ADDR., CHARACTER ISZ EQT9,I POSITION IN E, INDEX ADDRESS. SEZ,RSS SHIFT TO UPPER POSITION IF ALF,SLA,ALF EVEN ADDRESS AND SKIP XOR B,I IF ODD ADDRESS ADD OLD CHAR. XOR FILL ADD/DELETE FILL CHARACTER STA B,I REPLACE FULL WORD * LDA FILL GET ASCII/BINARY FLAG LDB EQT9,I CPB EQT10,I  LAST CHARACTER? SZA IF LAST CHAR. AND BINARY SKIP JMP D21.2 ELSE GO GET THE NEXT ONE * LDB TEMP2 IF NOT VARIABLE LENGTH LDA EQT11,I OR IF BUFFER WAS LONG ENOUGH SSA THEN SLB,RSS GO JMP D27 DO BINARY EOR TERMINATE * D23.0 JSB INCR GET A CHARACTER ISZ EQT11,I STEP COUNT JMP D23.0 GO GET NEXT ONE JMP D27 DONE GO EXIT * CONTINUATION EXIT * INCR NOP WAIT FOR CHARACTER ROUTINE LDB INCR RETURN ADDRESS TO B CXT1 STB EQT12,I SAVE THE RETURN ADDRESS IN EQT12 IO4 STC TTY SET DEVICE TO INPUT NEXT CHAR. SPC 1 CLA SET A FOR ACCEPT EXIT ISZ C.00 STEP RETURN ADDRESS JMP C.00,I -RETURN TO INTERRUPT CONTROL - SPC 1 * ATTENTION INTERRUPT PROCESSOR SCHD NOP ENTER HERE IF SCHEDULE INTERRUPT FILL EQU SCHD STB TURN SAVE B REGISTER LDB EQT1 IF DEVICE IS CPB SYSTY THE SYSTEM TTY JMP OPF GO SET THE OPERATOR FLAG LDB EQT13,I ELSE GET THE ADDRESS OF THE ID LDA EQT5,I AND THE ENABLE FLAG. RAR,SLA IF OFF OR SSB IF NEGATIVE JMP SCHPL NOT SET UP SO IGNORE STB SCH SET FOR THE LIST CALL LDB EQT4 SET THE B REG TO POINT TO EQT4 STB BVAL SO HE KNOWS "WHO DONE IT". * JSB $LIST ELSE SCHEDULE THE PGM OCT 601 SCH NOP 'ID ADDRESS' BVAL NOP 'B-REG AT SUSPENSION' * SCHPL CLE,RSS SKIP * OPF ISZ OPATN SET THE OPERATOR ATTENTION FLAG LDB TURN RESTORE B AND JMP SCHD,I RETURN SPC 2 TURN NOP ROUTINE TO RESET FOR OUTPUT CLA,INA FIRST TEST FOR DVR01 CPA TEMP5 IF DVR01 JMP TURN,I EXIT P+1 NOP CCB COMPUTE CALL ADB TURN ADDRESS AND LDA TEMP3 IF TTYi IS BUSY SSA THEN JMP CXT1 GO WAIT FOR END OF CYCLE ISZ TURN ELSE EXIT P+2 LDA PRINT GET THE PRINT COMMAND IO2 OTA TTY SEND TO THE INTERFACE JMP TURN,I RETURN P+2 SPC 2 B40 OCT 40 B377 OCT 377 RETN OCT 15 LINF OCT 12 LINFF OCT 1012 .15 DEC 15 \ OCT 134 SPC 3 * RUB-OUT CODE PROCESSOR (DELETION OF ASCII RECORD) * D24 JSB TURN TURN CARD AROUND TO OUTPUT JMP CONT DVR01 SO GO RESTART LDA \ OUTPUT "\" JSB OUTCR THEN LDA RETN RETURN JSB OUTCR LDA LINFF LINE FEED JSB OUTCR JMP CONT GO SET UP FOR INPUT AGAIN * * CONTROL/A PROCESSOR (CHARACTER DELETION) * D25 LDA EQT7,I IF CONTROL/A RAL IF FIRST CPA EQT9,I NON-ZERO CHARACTER INPUT, JMP D24 TREAT AS RUBOUT * CCB -1 TO A ADB EQT9,I SUBTRACT 1 FORM STB EQT9,I CHARACTER ADDRESS. CLE,ERB GET THE LAST CHARACTER INPUT LDA B,I AND AND HCHAR MASK OUT THE LOW END ADA FILL PUT IN THE FILL CHARACTER STA B,I RESET THE WORD JSB TURN TURN THE DEVICE AROUND JMP D21.2 DVR01 SO GO CONTINUE INPUT LDA ARROW SENT A "_" JSB OUTCR AND LDA B31 A 2600 BACKSPACE JSB OUTCR LDA KEYBD RESET FOR INPUT LDB TEMP2 IF ECHO RBR,SLB THEN ADA BIT13 ADD THE PRINT BACK BIT JSB OUTCR REPROGRAM AND START INPUT JMP D22 CONTINUE INPUT * ASEOL JSB TURN TURN THE CARD AROUND * CLA,RSS DVR01 SKIP A CHARACTER LDA LINFF JSB OUTCR ELSE SEND A LINE FEED TO THE TTY HED < STATUS AND COMPLETION SECTION*> 29029-60001 * * STATUS AND TRANSMISSION COMPLETION SECTION * D27 LDB EQT9,I COMPUTE THE NO CMB,INB OF CHARACTERS TRANSMITTED ADB 1EQT7,I FROM THE ADB EQT7,I FINAL BUFFER ADDRESS LDA EQT8,I IF WORDS SSA,RSS THEN BRS CONVERT TO WORDS CMB,INB,SZB,RSS SET POSITIVE IF ZERO JMP CONT GO TRY AGAIN * D28 CLA,CCE UNLESS LDA B40 SET THE EOT BIT D28.1 IOR EQT5,I IN THE EQT AND NT204 REMOVE THE IGNOR BIT. SEZ,SZB IF NO EOT THEN XOR B40 CLEAR IT STA EQT5,I CLA,CME SET NORMAL STATUS SEZ,SZB,RSS IF EOT DETECTED, SET LDA .2 RETURN STATUS = 2 FOR EOT. TMX STA SW5 FOR RETURN TO INTERRUPT CONTROL. * * COMPLETION EXIT SECTION * CXT2 CLC 0 CLEAR DEVICE CONTROL IO5 EQU CXT2 * LDA EQT5,I GET THE ON/OFF FLAG RAR,SLA IF ON THEN JSB D30 SET UP THE INTERFACE LDA SYSTY IF DEVICE IS SYSTEM CPA EQT1 TELETYPE, GO TO SET DEVICE JSB D30 FOR INPUT KEYBOARD MODE. * LDA EQT4,I GET THE SUBCHANNEL TO ALF,ALF LOW RAL,RAL A AND AND SW5 MASK THE RETURN CODE SPC 1 JMP C.00,I EXIT TO INTERRUPT CONTROL. * TMX1 LDA .4 SET A TO THE TIME OUT CODE CLB SET TLOG TO ZERO JMP TMX GO EXIT SPC 1 D30 NOP TEMP5 EQU D30 LDA KEYBD SET SYSTEM TELETYPE IN INPUT IO6 OTA TTY MODE. IO7 STC TTY,C JMP D30,I RETURN HED 29029-60001 HCHAR OCT 177400 KEYBD OCT 140000 SPC 1 * * WRITE REQUEST PROCESSOR * EOLT LDB TEMP2 GET FLAG WORD SSB IF HONEST MODE JMP OUT SEND THE CHAR. LDB FILL IF SZB,RSS BINARY JMP OUT GO SEND THE WORD CPA ARROW IF "_" THEN JMP D36 INHIBIT THE TRANSMISSION SPC 1 OUT JSB OUTCR SEND THE CHARACTER D31 LDB EQT9,I GET THE BUFFER ADDRESS CPB EQT10,I IF BUFFER EXAUSTED JMP D33 GO CLEAN UP ISZ EQT9,I INDEX FOR NEXT CHAR. CLE,ERB CONVERT TO WORD ADDR. LDA B,I GET WORD AND SEZ,RSS POSITION PROPER ALF,ALF CHARACTER IN A(07-00). AND B377 REMOVE UPPER POSITION DATA. LDB EQT9,I IF THIS IS LAST CHAR CPB EQT10,I THEN JMP EOLT GO PROCESS END OF LINE JMP OUT GO SEND THE CHARACTER * * * OUTPUT CHARACTER TO PRINTER/PUNCH UNIT * OUTCR NOP CHARACTER OUTPUT ROUTINE * SW5 NOP OR RSS IF 2762 JMP OUT1 RETURN TO INTERRUPT CONTROL. SPC 2 CPA B31 IF 2600 BACKSPACE AND A LDA .10B 2762 SET TRUE BACKSPACE CLB SET UP THE STALL COUNT FOR CPA LINF A 2762 LINE FEED? JMP STALX FIND HOW MANY STALL NEEDED CPA FLINF IF CONTROL LINE FEEDS LDB NULCT USE MAX STALL (7 OR 30 + OH) STAL SSB,RSS ANY STALLS REQUIRED? JMP OUT1 NONE OF THE ABOVE GO DO IT STB EQT11,I SET THE STALL COUNT LDA EQT5,I SET FLAG TO FORCE LF AFTER STALLS IOR .4 STA EQT5,I STAL2 LDA B377 STALL CODE SPC 1 OUT1 LDB OUTCR SET RETURN ADDRESS IN B IO9 OTA TTY OUTPUT CHARACTER TO CARD. JMP CXT1 GO RETURN SPC 1 STALX LDB EQT7,I WORD BUFFER ADDRESS RBL CONVERT TO CHARS CMB,INB MAKE IT NEG ADB EQT9,I ADD CURRENT CHAR ADDRESS ADB NULCT ADD MAX STALL COUNT JMP STAL ARROW OCT 137 "_" N3 DEC -3 SPC 3 * * END-OF-RECORD PROCESSING * D33 LDA TEMP2 CHECK MODE SSA OF TRANSFER. JMP D36 - HONEST - GO EXIT * LDA FILL BINARY OR ASCII? SZA,RSS JMP D34 - BINARY - * LDA RETN OUTPUT FIRST A JSB OUTCR RETURN * LDA LINF LINE FEED WITH DELAY JSB OUTCR A LINE FEED JMP ~<:6D36 GO SET TLOG AND EXIT * D34 STA EQT10,I *BINARY RECORD* OUTPUT LDA N4 4 FEED FRAMES FOR STA EQT9,I EOR. * D39 LDA EQT10,I GET THE CHARACTER JSB OUTCR SEND THE CHAR. ISZ EQT9,I STEP THE COUNT JMP D39 GO OUTPUT THE CHARACTER * * END OF OUTPUT PROCESSING * D36 LDB EQT8,I SET (B) = TRANSMISSION SSB LOG AS POSITIVE # OF WORDS OR CMB,INB CHARACTERS. CLA,CLE SET COMPLETION INDICATOR JMP D28.1 * HED 29029-60001 SPC 3 * * HANDY EQU'S FOR VARIOUS GOODIES. * A EQU 0 DEFINE SYMBOLIC REFERENCE FOR B EQU 1 A AND B REGISTERS. TTY EQU 14 * SPC 3 * *** SYSTEM BASE PAGE COMMUNICATION AREA *** * . EQU 1650B ESTABLISH ORIGIN OF AREA * * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 11-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * INTBA EQU .+4 * SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG * ORG * DRIVER LENGTH END f< Qk 29030-80001 1710 S 0122 HP2892A CARD READER RTE DRIVER DVR11             H0101 HNASMB,R HED * RTE HP2892A CARD READER DRIVER, DVR11 *** NAM DVR11 29030-60001 REV 1710 3-1-77 ENT I.11,C.11 EXT $UPIO * SUP * SPC 4 * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * ***HP 2892A RTE DVR 11*** * * SOURCE TAPE: 29030-80001 * RELOC. TAPE: 29030-60001 * SMALL PROG.MANUAL: 29030-95001 * * REVISION B * JUNE 1974 A.M. WERNICK * * REV. 1710 3-1-77 * * * THIS DRIVER CAN CONVERT EITHER EBCDIC OR BCD CARDS: SPC 1 * WHEN CONFIGURING THIS DRIVER INTO RTE SYSTEM, * ASSIGN CARD READER THREE LOGICAL UNIT NUMBERS * LU#N = READER,SUBCHANNEL 0 * LU#M = READER,SUBCHANNEL 1 * LU#L = READER,SUBCHANNEL 2 * TO CONVERT EBCDIC PUNCH SET - ADDRESS READER AS SUBCHANNEL 0 * TO CONVERT BCD PUNCH SET - ADDRESS READER AS SUBCHANNEL 1 * TO CONVERT EBCDIC-RDTS PUNCH SET - ADDRS READER AS SUBCHN 2 SPC 2 * THIS CARD READER DRIVER PROCESSES READ AND CONTROL REQ'S. * WRITE REQ'S AND ILLEGAL CONTROL REQ'S ARE REJECTED. SPC 1 * TO PROCESS A READ, STATUS IS FIRST CHECKED. IF IT IS * "OK TO PICK" A PICK COMMAND IS ISSUED AND A DMA TRANSFER * IS BEGUN. IF STATUS IS NOT "OK TO PICK" A NOT READY * RETURN IS MADE TO THE SYSTEM. * THE DMA TRANSFER IS INTO THE DRIVER'S INTERNAL BUFFER. * THE DRIVER IS ENTERED UPON DEVICE CONTROLLER INTERRUPT. * THE CARD DATA IS CONVERTED FROM COLUMN IMAGE TO THE FORMAT * * SPECIFIED BY THE READ REQUEST AND STORED INTO THE CALLING * PROGRAM'S BUFFER. * THE THREE FORMATS A READ REQUEST CAN SPECIFY ARE: * ASCIIu SUBFUNCTION 0 * PACKED BINARY SUBFUNCTION 3 * COLUMN BINARY SUBFUNCTION 1 SPC 1 * NO CONTROL REQUESTS ARE PROCESSED * * * *****EQT USAGE***** * * EQT5 STATUS BITS HAVE THE FOLLOWING * MEANINGS WHEN SET TO 1 : * * BIT 0 CARD READER IS ON LINE BUT NOT READY * OR CARD READER IS OFF LINE. * BIT 1 AN ILLEGAL CARD CODE WAS ENCOUNTERED * DURING THE PREVIOUS READ OPERATON OR * THE CARD READER HAD HARDWARE TROUBLE. * BIT 2 CARD READER IS OFF LINE. * BIT 3 TIMING ERROR OR PICK FAILURE WAS SENSED * DURING PREVIOUS READ OPERATION. * BIT 4 PICK FAILURE OR CARD MOTION ERROR WAS * SENSED DURING PREVIOUS READ OPERATION. * BIT 5 IF BOTH BITS 3 & 5 ARE ON, NO DATA WAS * TRANSMITTED DURING PREVIOUS READ OPERATION. * IF BIT 3 IS OFF & BIT 5 IS ON, THE PREVIOUS * READ REQUEST WAS REJECTED BECAUSE THE HOPPER * WAS EMPTY OR THE STACKER WAS FULL. * BIT 6 STACKER IS FULL. * BIT 7 THE PREVIOUS READ OPERATION LEFT THE INPUT * HOPPER EMPTY AND THE END OF FILE SWITCH * WAS ON DURING THE READ OPERATION. * * EQT6 FUNCTION BITS HAVE THE FOLLOWING MEANINGS: * * BIT 6 MODE BIT: 0=ASCII,1=BINARY * BIT 7 'V' BIT: 0=COLUMN BINARY,1=PACKED BINARY * * EQT7 USER BUFFER ADDRESS * * EQT8 USER BUFFER LENGTH * * EQT9 CURRENT DMA CHANNEL * * EQT10 CARD READER STATUS BITS ARE DEFINED AS FOLLOWS: * * BIT 0 CARD READER NOT READY,OFF LINE, OR BUSY * BIT 1 TROUBLE DURING READ * BIT 2 CARD READER OFF LINE * BIT 3 DATA LOST * BIT 4 NOT USED * BIT 5 HOPPER EMPTY OR STACKER FULL * BIT 6 STACKER FULL * BIT 7 END OF FILE AND HOPPER EMPTY * BIT 8 PICK STATUS * BIT 9 LIGHT/DARK READ ERROR * BIT 10 NOT USED * BIT 11 MOTION/PICK FAILURE * BIT 12 COMPUTER POWER TURN-ON/PRESET OR * END OF OPERATION INTERRUPT * BIT 13 NOT USED * BIT 14 NOT USED * BIT 15 END OF OPERATION * * *v EQT11 SUBCHANNEL FOR CONVERSION:0=STD EBCDIC * 1=BCD * 2=RDTS EBCDIC * * EQT12 END OF FILE/HOPPER EMPTY FLAG * * EQT13 CARD READER NOT READY/OFF LINE FLAG * * EQT15 DEVICE TIME OUT CLOCK * SKP * INITIATION SECTION. * * I.11 NOP ENTRY POINT. LDB CHAN STB EQT9,I STORE CURRENT DMA CHN JSB SETIO SET I/O INSTRUCTIONS FOR CR. STA EQT5,I SET NEW STATUS IN EQT TABLE LDA EQT4,I SET UP EQT4 SO THAT DRIVER IOR BIT12 CAN HANDLE ITS OWN STA EQT4,I TIME OUTS LDA I.11 SET COMMON EXIT STA C.11 LDA EQT6,I LOAD THE REQUEST CONTROL WORD. AND DEC3 ISOLATE THE REQUEST CODE. CPA DEC3 IS REQUEST A CONTROL REQUEST? JMP I.A.4 YES, EXIT SLA,ARS NO; IS THE REQUEST TO READ? JMP READ YES, CONTINUE. JMP C.11,I RETURN TO THE USER. A=1 ILL. R\W SPC 1 A.2 LDA DEC2 NO, LOAD DECIMAL 2 INTO A REG. JMP C.11,I RETURN TO THE USER. SPC 1 READ LDA EQT12,I GET EOF/HOPR EMTY FLG AND B200 GET BIT 7 SZA EOF AND HOPR EMTY? JMP EOF YES,EXIT STA EQT15,I CLEAR TO CLOCK READ0 STB EQT13,I CR NOT RDY/OFF LINE FLAG SLB IS THE CR NOT READY OR OFF-LINE? JMP NR YES, GO DOWN THE UNIT. LDA EQT4,I SAVE AND B100 SUBCHANNEL RAR FOR STA EQT11,I CONVERSION LDA INDEX LOAD THE CR CHANNEL NUMBER. DMA EQU 06B STANDARD "DMA" CHANNEL NUMBER. DMA.0 OTA DMA ASSIGN THE "DMA" CHANNEL. LDA BUFAD LOAD THE INTERNAL BUFFER ADDRESS. DMA.1 CLC DMA-4 PREPARE THE ADDRESS REGISTER. DMA.2 OTA DMA-4 OUTPUT THE BUFFER ADDRESS. LDA DM80 LOAD: A-80. DMA.3 STC DMA-4 PREPARE DMA FOR WORD COUNT DMA.6 OTA DMA-4 OUTPUT THE NEGATIVE WOeRD LENGTH. CR.0 STC CR,C ISSUE A PICK COMMAND TO THE CR. DMA.7 STC DMA,C ACTIVATE THE "DMA" CHANNEL. * DMA10 CLC DMA INHIBIT DMA INTERRUPT A.0 CLA,RSS CLEAR A REG. A.3 LDA DEC3 LOAD: A3. JMP C.11,I RETURN TO THE USER. SPC 1 NR LDB DM80 SET UP TIME OUT STB EQT15,I LDB EQT11 BYPASS TIMEOUT STB EQT15 CLEAR JMP A.3 EXIT SPC 1 EOF IOR EQT5,I UPDATE STATUS BIT 7 STA EQT5,I STORE NEW STATUS CLB STB EQT12,I CLEAR EOF/HOPR EMTY FLG ** JMP ON1 I.A.4 LDA EQT12,I GET EOF FLAG AND B200 LOOK AT BIT 7 (EOF) XOR EQT5,I IF SET WE HAVE NOT YET ISSUED NEXT READ TO RETURN STA EQT5,I EOF. IF NOT SET LEAVE STATUS AS IS ON1 LDA DEC4 JMP C.11,I RETURN ** SPC 2 BIT12 OCT 10000 SPC 2 SETIO NOP ENTRY POINT. STA INDEX STORE THE CR CHANNEL NUMBER. IOR LIA.0 MAKE LIA INSTRUCTION STA LIA.1 STA CR.3 ADA B100 OTA CARD READER STA CR.2 STA OTA.2 IOR B1100 STC,C CARD READER STA CR.0 ** LDA INDEX SET CLC ON CR FLAG IOR CLC.0 STA CLCCR ** LDA STF.0 CONFIGURE DMA STF INSTRUCTION IOR EQT9,I STA DMA.8 CR.2 OTA CR UPDATE THE CR STATUS REGISTER. ADA B500 OTA DMA STA DMA.0 IOR B1100 STC,C DMA STA DMA.7 ADA B3000 CLC DMA (10670D - 4 ) STA DMA10 LDA EQT9,I GET DMA CHANNEL ADA N4 IOR LIA.0 LIA DMA-4 STA DMA.9 ADA B100 OTA DMA-4 STA DMA.2 STA DMA.6 ADA B100 STA DMA.3 STC DMA-4 IOR CLC.0 CLC DMA-4 STA DMA.1 CR.3 LIA CR LOAD THE CR STATUS REGISTER. STA EQT10,I SAVE STATUS WORD AND M377 If GET BITS 0 - 7 ONLY CPA DEC3 ARE BITS 0 AND 1 0N , OTHERS OFF LDA B50 YES, SET BITS 3 AND 5 ON IOR EQT10,I ADD ORIGINAL STATUS BACK IN ALF PUT BIT 11 IN BIT 15 SSA PICK OR MOTION CHECK?? IOR B1400 YES, SET BITS 4 AND 5 TO 1 RAL PUT BIT 10 TO BIT 15 SSA COMPARE CHECK IOR B40 YES, SET BIT ZERO TO 1 ALF,ALF RESET STATUS WORD ALF,RAR TO ITS NORMAL CONFIGURATION ELA,RAR SHIFT THE "EOP" BIT TO "E". AND M377 ISOLATE BITS 7-0. LDB A SAVE THE STATUS IN "B". LDA EQT5,I LOAD THE STATUS WORD. AND M1774 REMOVE THE OLD STATUS. IOR B INCLUDE THE NEW STATUS. JMP SETIO,I RETURN. STF.0 STF 0 CLC.0 CLC 0 LIA.0 LIA 0 SPC 2 B100 OCT 100 B200 OCT 200 B700 OCT 700 CRSET NOP LAST EBCDIC CHAR SET SPC 2 * STD HP EBCDIC CHARS HWPTB DEF *+1 ASC 1,!$ ASC 1,;] ASC 1,+^ SPC 1 * RDTS EBCDIC CHARS OCT 56444 RDTS CHAR = VERT BAR,$ OCT 35536 RDTS CHAR = ;,] OCT 25441 RDTS CHAR = +,UNDERSCORE SPC 2 READ2 RBR,SLB WERE THERE ANY I/O ERRORS? JMP OPERR YES, GO FLAG OPERATOR ATTENTION. CPA EQT8,I NO; WAS A RECORD BEING SKIPPED? JMP R.ERR YES, GO INITIALIZE ONLINE FLAG. STA DMA.7 NO, INITIALIZE THE WORD COUNTER. DMA.9 LIA DMA-4 LOAD THE WORD COUNT REGISTER. CPA DM80 WAS ANY DATA TRANSMITTED? JMP NREDY NO, GO SET I/O ERROR STATUS. CMA,INA YES, WORD COUNT RESIDUE POSITIVE. ADA DM80 "SUBTRACT": 80 - RESIDUE. STA DMA.9 STORE THE WORD COUNT INDEX. LDB BUF LOAD INTERNAL BUFFER ADDRESS. STB DMA.8 STORE BUFFER ADDRESS INDEX. LDB EQT6,I LOAD THE FUNCTION REQUEST CODE. BLF,BLF SHIFT "M-BIT" TO BIT 15. RBL SH)IFT "M-BIT" TO BIT 15. SSB IS THE MODE BINARY? JMP BINRY YES, GO PROCESS BINARY CARD. CLB NO, ENTER: B0. STB DMA.2 INITIALIZE THE COLUMN COUNTER. STB DMA.1 INITIALIZE THE CHARACTER COUNTER. LDA EQT4,I GET THE SUBCHANNEL NO. AND B700 CPA B100 BCD? JMP OUTS YES-DONT FUSS WITH TABLE AND B200 STD EBCDIC OR RDTS EBCDIC? CPA CRSET SAME AS LAST CHAR SET? JMP OUTS YES, DONT OVERLAY TABLE STA CRSET STORE LAST CHAR SET FLG LDB HWPTB ADDRESS OF STD EBCDIC TABLE CPA B200 RDTS EBCDIC? ADB DEC3 YES, USE RDTS CHARS LDA 1,I GET 1ST CHAR FOR OVERLAY STA LASC1 OVERLAY 1ST CHAR INB ADDRESS OF NEXT CHAR LDA 1,I GET 2ND CHAR FOR OVERLAY STA LASC2 INB LDA 1,I STA LASC3 OUTS LDA DMA.9 RESTORE A REG SPC 1 LDB EQT8,I LOAD THE ORIGINAL REQUEST LENGTH. SSB IS THE REQUEST IN WORDS? CMB,INB,RSS NO, COMPLEMENT CHARACTER COUNT. RBL YES, CONVERT WORDS TO CHARACTERS. SSB CHARACTER LENGTH OVERFLOW? JMP .16K YES, CONTINUE. ADA B "SUBTRACT": REQUEST- CARD LENGTH. CMB,INB NEGATE THE CHARACTER COUNT. SSA IS THE REQUEST LESS THAN CARD? STB DMA.9 YES, STORE THE WORD COUNT INDEX. .16K LDA EQT7,I LOAD THE USER BUFFER ADDRESS. CLE,ELA SHIFT TO FORM CHARACTER ADDRESS. STA DMA.6 SAVE THE CHARACTER ADDRESS. LOOP LDA DMA.8,I LOAD THE DATA COLUMN. ISZ DMA.2 INCREMENT THE COLUMN COUNTER. SZA,RSS IF CHARACTER IS BLANK, MAKE IT ONE. JMP ZERO SET CHARACTER A BLANK. LDB DMA.2 LOAD THE CURRENT COLUMN COUNTER. STB DMA.1 UPDATE RETURN COLUMN COUNT. * AND B7000 MASK OFF ALL BUT BITS 12,11,0 CLB CLEAR B tSFOR LATER SZA,RSS ANY HIGH PUNCHES ? JMP NOHI NO, TEST FOR LOW PUNCHES * CPA B1000 BIT 0 PUNCHED ? LDB B40 YES, LOAD 32 CPA B2000 BIT 11 PUNCHED ? LDB DEC16 YES, LOAD 16 CPA B4000 BIT 12 PUNCHED ? LDB DEC48 YES, LOAD 48 SZB,RSS WAS ONLY ONE COLUMN PUNCHED ? JMP BAD NO, ILLEGAL PUNCH * NOHI STB DMA.0 SET HIGH FIELD WEIGHT XOR DMA.8,I ISOLATE LOWER BITS OF COLUMN SZA,RSS ANY LOW BITS PUNCHED ? JMP NOLOW NO, CHARACTER COMPLETED. * CCE,SLA BIT 9 SET ? LDB DEC9 YES, LOAD WEIGHT SLA,ARS BIT 9 SET ? JMP SET YES, TEST FOR MORE BITS. * SLA,ARS BIT 8 SET ? CLB,RSS YES,CLEAR B FOR LATER JMP CONTN BIT 8 WAS NOT SET. CLE,SZA,RSS WAS ONLY BIT 8 SET ? JMP BIT8 YES, EXIT TO FORM CHARACTER. * CONTN BSS 0 * LDB DEC7 LOAD WEIGHT COUNTER SLA,ARS IS BIT 7 SET ? JMP SET YES, CHECK FOR OTHER PUNCHES * LDB DEC6 SIX SLA,ARS IS BIT 6 SET ? JMP SET YES LDB DEC5 FIVE SLA,ARS IS BIT 5 SET ? JMP SET YES LDB DEC4 FOUR SLA,ARS IS BIT 4 SET ? JMP SET YES LDB DEC3 THREE SLA,ARS IS BIT 3 SET ? JMP SET YES LDB DEC2 TWO SLA,ARS IS BIT 2 SET ? RSS YES,SKIP JUMP. JMP ONE NO, BIT 1 MUST BE. SET SZA ANY OTHER PUNCHES ? JMP BAD.1 YES, ILLEGAL COMBINATION SEZ,RSS IS THE BIT 8 FLAG ON ? BIT8 ADB D8 YES, ADD WEIGHT FOR IT. BIT1 ADB DMA.0 ADD WEIG3HT FOR FIELD BITS. NOLOW SLB,BRS PLACE ODD BIT IN A-REG. CLA,INA SET ODD CHARACTER FLAG ADB TABLE FIND PLACE IN TABLE. ADB EQT11,I ADDS 40 FOR BCD IF REQUESTED CLE,SZA ODD CHARACTER ? CCE LDA B,I GET WORD WITH TWO CHARS. SEZ,RSS ODD CHARACTER ? ALF,ALF YES, PUT IT INTO BOTTOM. AND M377 ISOLATE THE CHARACTER. LEGAL BSS 0 ISZ DMA.8 INCREMENT BUFFER ADDRESS POINTER. LDB DMA.6 LOAD CHARACTER BUFFER ADDRESS. CLE,ERB SHIFT, FORM WORD BUFFER ADDRESS. SEZ,RSS IS NEW CHARACTER TO BE LOWER? ALF,SLA,ALF NO, SHIFT TO HIGH ORDER; SKIP. IOR B,I YES, INCLUDE THE HIGH ORDER PART. STA B,I STORE THE WORD IN USER BUFFER. ISZ DMA.6 INCREMENT BUFFER ADDRESS POINTER. ISZ DMA.9 IS THE BUFFER EXHAUSTED? JMP LOOP NO, GO PROCESS NEXT COLUMN. LDB DMA.1 YES, LOAD # NON-BLANK CHARACTERS. LDA EQT8,I LOAD THE ORIGINAL REQUEST TYPE. CLE,SSA,RSS WAS THE REQUEST IN CHARACTERS? ERB NO, CONVERT CHARACTERS TO WORDS. END CLA,SEZ WAS THE CHARACTER COUNT ODD? INB YES, INCREMENT THE WORD COUNT. JMP C.11,I GO TO COMPLETION RETURN. * ZERO LDA B40 LOAD ASCII BLANK JMP LEGAL STORE LEGAL CHARACTER * BAD LDB EQT11,I DO EXTRA SZB,RSS BCD TESTS? JMP BAD.1 NO * * CPA B3000 11 - 0 PUNCH ? JMP BCDEX YES, MAY BE ! CPA B5000 12 - 0 PUNCH ? JMP BCDQU YES, MAY BE ? * BAD.1 LDA EQT5,I SET ILLEGAL PUNCH STATUS IOR DEC2 STA EQT5,I QUES LDA M77 LOAD ASCII QUESTION MARK. JMP LEGAL STORE CHARACTER * ONE CLB,SEZ,INB,RSS SET WEIGHT, TEST BIT 8 FLAG ON ? JMP BAD.1 BIT 8 FLAG WAS ON, ILLEGAL PUNCH. JMP BIT1 JUST BIT 1 PUNCH[ED * DEC5 DEC 5 DEC6 DEC 6 B3000 OCT 3000 * * BCDEX XOR DMA.8,I TEST FOR OTHER BITS SZA JMP BAD.1 ILLEGAL PUNCHES LDA B41 LOAD ! JMP LEGAL STORE SPECIAL CHARACTER * BCDQU XOR DMA.8,I TEST FOR OTHER PUNCHES SZA JMP BAD.1 JMP QUES GO LOAD AND STORE ? * B41 OCT 41 ! B5000 OCT 5000 SKP BINRY CCE,SLB CONVERT FROM PACKED BINARY? JMP PAK.B YES, GO PROCESS PACKED BINARY. JSB INDEX NO, GO COMPUTE WORD COUNT INDEX. COL.B LDA DMA.8,I LOAD THE DATA COLUMN. ISZ DMA.8 INCREMENT BUFFER ADDRESS POINTER. STA DMA.6,I STORE THE WORD IN USER BUFFER. ISZ DMA.6 INCREMENT BUFFER ADDRESS POINTER. ISZ DMA.7 INCREMENT THE WORD COUNTER. ISZ DMA.9 IS THE BUFFER EXHAUSTED? JMP COL.B NO, CONTINUE. TLOG LDA EQT8,I LOAD THE ORIGINAL REQUEST TYPE. LDB DMA.7 LOAD THE TRANSMISSION LOG. CLE,SSA WAS THE REQUEST IN CHARACTERS? BLS YES, CONVERT WORDS TO CHARACTERS. JMP END GO ISSUE A COMPLETION RETURN. SPC 2 INDEX NOP ENTRY POINT. LDB EQT7,I LOAD THE USER BUFFER ADDRESS. STB DMA.6 SAVE THE USER BUFFER ADDRESS. LDB EQT8,I LOAD THE ORIGINAL REQUEST LENGTH. SSB,RSS IS THE REQUEST IN WORDS? CMB,INB,RSS YES, COMPLEMENT WORD COUNT; SKIP. BRS NO, CONVERT CHARACTERS TO WORDS. CMA,INA MAKE THE RECORD LENGTH POSITIVE. ADA B "SUBTRACT": RECORD COUNT-REQUEST. SSA,RSS IS THE REQUEST LESS THAN RECORD? STB DMA.9 YES, STORE THE REQUEST LENGTH. JMP INDEX,I RETURN. SPC 1 PAK.B LDA DMA.8,I LOAD THE FIRST DATA COLUMN. RAR,RAR SHIFT ROWS 12-5 TO LOWER. RAR,RAR SHIFT ROWS 12-5 TO LOWER. AND M377 ISOLATE THE RECORD WORD LENGTH. CMA,INA,SZA,RSS IS THE RECORD LENGTH ZERO(0)? Ρ JMP NREDY YES, GO FLAG WORD COUNT ERROR. STA DMA.9 NO, SAVE THE RECORD WORD LENGTH. JSB INDEX GO COMPUTE THE WORD COUNT INDEX. LDA DMA.9 LOAD THE WORD COUNT INDEX. ADA D60 "SUBTRACT": 60- WORD COUNT INDEX. SSA IS THE WORD COUNT > 60? JMP NREDY YES, GO FLAG WORD COUNT ERROR. LDB DMA.8,I NO, LOAD DATA COLUMN 1 OF 4. ISZ DMA.8 INCREMENT BUFFER ADDRESS POINTER. UNPAK BLF SHIFT COLUMN TO BITS 15-4. STB DMA.1 SAVE THE DATA COLUMN. LDA DMA.8,I LOAD DATA COLUMN 2 OF 4. ISZ DMA.8 INCREMENT BUFFER ADDRESS POINTER. ALF,ALF SHIFT ROW 12 TO BIT 3. LDB A SAVE THE DATA COLUMN. AND M17 ISOLATE ROWS 12-1. IOR DMA.1 INCLUDE COLUMN #1. JSB STORE GO STORE DATA WORD 1 OF 3. AND M1774 ISOLATE ROWS 2-9. STA DMA.1 SAVE THE PARTIAL DATA COLUMN. BLF,BLF SHIFT ROW 12 TO BIT 7. BLF SHIFT ROW 12 TO BIT 7. LDA B LOAD DATA COLUMN 3 OF 4. AND M377 ISOLATE ROWS 12-5. IOR DMA.1 INCLUDE COLUMN #2. JSB STORE GO STORE DATA WORD 2 OF 3. AND B17 ISOLATE ROWS 6-9. IOR B INCLUDE DATA COLUMN 4 OF 4. JSB STORE GO STORE DATA WORD 3 OF 3. JMP UNPAK GO PROCESS THE NEXT 4 COLUMNS. SPC 2 STORE NOP ENTRY POINT. STA DMA.6,I STORE THE BINARY DATA WORD. ISZ DMA.6 INCREMENT BUFFER ADDRESS POINTER. ISZ DMA.7 INCREMENT THE WORD COUNTER. LDA B LOAD THE PREVIOUS DATA COLUMN. LDB DMA.8,I LOAD THE NEXT DATA COLUMN. ISZ DMA.8 INCREMENT BUFFER ADDRESS POINTER. ISZ DMA.9 IS THE BUFFER EXHAUSTED? JMP STORE,I NO, RETURN. JMP TLOG YES, GO LOAD TRANSMISSION LOG. SPC 1 OPERR LDA DEC3 LOAD: A3. JMP R.ERR GO INITIALIZE THE ONLINE FLAG. SPC 1 NREDY LDA EQT5,I: LOAD THE STATUS WORD. IOR DEC2 INCLUDE THE I/O ERROR STATUS. STA EQT5,I UPDATE THE STATUS WORD. JMP R.ERR NO, GO INITIALIZE ONLINE FLAG. SPC 1 NEOF OCT 177537 BIT 7 MASK SKP * COMPLETION SECTION. SPC 1 C.11 NOP ENTRY POINT. * * A REG CONTAINS INTERRUPT SLOT * LDB EQT13,I IS AN INTERRUPT EXPECTED ? SLB JMP EXTRA NO, SET UP TIMEOUT & EXIT. ** LDB EQT1,I CHECK FOR SPURIOUS INTERRUPT. I.E SZB,RSS WHEN POWER TURNED OFF JMP EXTRA SPURIOUS INTERRUPT ** JSB SETIO SET I/O INSTRUCTIONS FOR CR. STA EQT12,I SAVE STATUS WORD IN EQT12 ALF,ALF PUT BIT 7 TO BIT 15 SSA IF BIT 7 NOT SET SKIP JMP BY IF SET THEN SKIP OTHER TESTS RAL,RAL SET BIT 5 TO 15 POSITION SSA,RSS IF NOT SET THEN NO CHANGE JMP BY CONTINUE RAL,RAL SET BIT 3 TO 15 POSITION SSA IS BIT 3 SET 1 JMP BY YES, SKIP CHANGE CLB NO,SET EQT10,I STB EQT10,I FOR HOP MTY/STACK FUL LDA EQT12,I RESTORE STATUS TO A-REGISTER AND BIT51 CLEAR BITS 5 AND 1 RSS SKIP NEXT LOAD BY LDA EQT12,I RESTORE STATUS TO A-REGISTER AND NEOF INCLUDE EOF/HOPR EMTY STATUS STA EQT5,I RESET EQT WORD TO NEW STATUS CLA,CME ENTER: A0; COMPLEMENT "EOP". DMA.8 STF DMA SET FLAG ELA,SLA IS THE END-OF-OPERATION FLAG ON? R.ERR CLB,RSS ENTER: B0; SKIP. JMP READ2 YES, GO PROCESS THE CARD IMAGE. LDA EQT10,I LOAD HE/SF FLAG WORD SZA,RSS IF SET 0 JMP A.2 THEN HE/SF, EXIT A 2 LDA EQT5,I GET STATUS WORD SLA,RSS IS BIT 0 SET TO 1 JMP A.0 YES, NO TROUBLE, EXIT A 0 RAR PUT BIT 1 TO 0 POSITION D8 SLA IS BIT 1 SET TO 0 ? JMP A.3 \EXIT A - 3 CLA,INA IF NONE OF ABOVE EXIT A - 1 JMP C.11,I SPC 1 EXTRA ISZ C.11 ADVANCE TO CONT. RETURN CLA CLEAR TO CLOCK STA EQT15,I ** OTA.2 OTA CR UPDATE CR STATUS LIA.1 LIA CR IF STILL NOT SLA,RSS READY IF BIT ZERO CLR JMP $UPIO GO UP CR CLCCR CLC CR INHIBIT ANY MORE SPURIOUS INTERRUPTS JMP NR NOW SET FOR NOT READY ** SKP CR EQU 11B FAKE CARD READER SELECT CODE BUF DEF I.BUF INPUT BUFFER ADDRESS DEFINITION. BUFAD DEF I.BUF,I "DMA" BUFFER ADDRESS FOR INPUT. B17 OCT 170000 N4 DEC -4 DEC2 DEC 2 DEC3 DEC 3 DEC4 DEC 4 DEC7 DEC 7 DEC9 DEC 9 DEC16 DEC 16 DEC48 DEC 48 M17 OCT 17 M377 OCT 000377 M1774 OCT 177400 D60 DEC 60 B40 OCT 40 B1400 OCT 1400 B50 OCT 50 B1000 OCT 1000 B2000 OCT 2000 B4000 OCT 4000 B7000 OCT 7000 B1100 OCT 1100 B500 OCT 500 M77 OCT 77 ASCII QUESTION MARK BIT51 OCT 177735 MASK FOR BITS 5 AND 1 DM80 DEC -80 I.BUF BSS 80 INTERNAL DATA BUFFER. LAST BSS 0 SPC 1 TABLE DEF *+1 ASCII LOOKUP TABLE START * * EBCDIC CARD PUNCH CHARACTER SET * ASC 13, 123456789:#@'="-JKLMNOPQR LASC1 ASC 1,!$ ASC 1,*) LASC2 ASC 1,;] ASC 15,0/STUVWXYZ\,%_>?&ABCDEFGHI[.<( LASC3 ASC 1,+^ SKP * BCD CARD PUNCH CHARACTER SET * ASC 16, 123456789?=':>?-JKLMNOPQR?$*];] ASC 16,0/STUVWXYZ?,(_\?+ABCDEFGHI[.)[<^ SKP SPC 2 EQT1 EQU 1660B EQT4 EQU 1663B EQT5 EQU 1664B EQT6 EQU 1665B EQT7 EQU 1666B EQT8 EQU 1667B EQT9 EQU 1670B EQT10 EQU 1671B EQT11 EQU 1672B EBCDIC OR BCD CHAN EQU 1673B CURRENT "DMA" CHANNEL NUMBER. EQT12 EQU 1771B EOF/HOPR EMTY FLAG EQT13 EQU EQT12+1 CR NOT RDY/OFF LINE FLAG EQT15 EQU EQT12+3 A EQU 0 B EQU 1 END NLHHN Rd 29033-80001 B S P0222 RTE FMGR D.RTR             H0102 RSPà DPMMMVŠDSàPAAMSҠUNԠUN ANGSUN Ž0-SAVŠPAAMS Ž-MVŠPAAMSBAK DPMMNP DANSA DBSGN SBP.PAS NDà- NSàNP SԠDà96 ASҠNP KNP NҠNP BADNP BADNP BAD3NP BADNP BAD5NP BAD6NP NP DBK ADBAKMPUŠHŠADDSSƠAK SBҠSŠSԠHŠADDSS DBDUSAVŠHŠUNԠU SBDPSҠŠSDNԠSPD MPDPMM SPà5 AGHKSҠPNAGS ASSUMSAGAPNSϠHŠAGAA AGNP AAҠHŠPNUN SAUNAND DANSԠϠS SAUNHŠPNAGS DBAGAGԠHŠAGADDSS AGDABɠGԠPNAG A̬ŬAMVŠPSSBŠUSVŠB SBDMSԠҠDMAN SZUNSPPNAGUN NBSPϠNԠNY SZUNSPUNԻNDƠAGS? MPAGNϻYNԠN MPAGɠYSUN SPà5 DMHKϠSŠƠPGAMSDMAN DADDSSNA ANϠBŠSԠϠZ'SADDSSNB UNP+ƠNԠDMANԻSŠP+ DMNP SBMPSAVŠBG ŬSZASSƠZϠHNUSԠUNP+ ŬSSSϠSKPS PADƠPNϠHSPGMŠS MPDMSϠGϠ DBKYDMAKŠSUŠHŠAGPNS SBSUBϠAVAD DMDBSUBɠDSGMN PBAHSN? MPDM3YSNNU SZSUBNϠYHŠNԠN SZBƠNDHN MPDM MPDMNԠVADGϠAҠAG DM3ADA.ADDSSƠSjUSPNDPN DBAɠϠB MBŬNBSZBSSƠZϠ(DMANԩ_ DMSZDMSŠSKP DBMPSŠBG ASZHANGŠϠDMAN SABɠSԠϠZ SZAND SBSSԠŠAG MPDMɠUN SPà رANASS زDA. SS 6DA.6 SS ظDA. SS ر3DA.3 SS رDA. MANASS رDAN MP SPà .Dà .3Dà3 .Dà BԠ NDà- SԠNP UNNP UNNP BADƠBAD BADҠNP SKP AԠSBDPASADHŠSKNDY DADSԠUPUSVŠPNAG ҠSGNADDHŠUSVŠB SADSAVŠ AAҠHŠNԠAG SAGSàSAVŠԠҠHŠDY DAABUƠMVŠ SBMVűHŠSAVŠAA SBSDҠSԠϠADHŠDY SBN.SHҠSAHҠHŠNAM A0ŬSSNԠUNDSKP MPزUND-AKŠDUPNAMŠ SZASSƠDYU MPرAKŠ SBSADSԠHŠADDSSS DADAMVŠN SBMVű DADSԠHŠPNAG SAAGA DBBAGԠSԠBADAKADDSS HKBԠDABɠƠNDƠS SZASSHN MP̠NUNU MAŠSŠS ADANҠBADҠ SZSSPNԠ MP̠SԠBADAK NBN MPHKB ̠SBBADҠSԠBADAKPN DBNSàGԠHŠNԠAK DANҠANDS ASAAKAɠSԠHŠAK ADBGSàADDHŠNԠD SBSAɠSԠHŠSԯN DBSìɠGԠHŠUSԠSZ DABADҬz(ɠANDHŠSԠBADAK SZAƠGDSKP SSBSSSŠƠSԠƠDSàSKP MPAGϠAUAŠSZ A3NABADAKNSԠƠDSà SZBADҠSԠŠABVŠԠAND BYAGAN MPA SPà ASSBƠSԠƠDS MPA5MP SBNԯSMPUŠHŠNԠAKANDS SASADSҠ-SAVŠASԠAK DABADҬɠGԠASԠAVAABŠAK SZASSƠNԠBAD DAASҠHŠASԠNDS+ MANASUBAԠM ADASADASԠŠAK SSA0Ҡ+? MPAYSԠS DABADҬɠNϻN'Ԡ SZAASԠABADAK? MPA3YSYABVŠ DAGSàƠNԠA SZASSHNSKPϠҠ MPNԠSŠYNԠDS MP6NϠMҠNԠ SPà ADASADԠԠS A6SANҠUPDAŠHŠN SBNSàAKANDS SZSSԠHŠŠAG DASìɠGԠHŠUNPAM SBPMANDGϠSԠUPHŠUN SBSDҠSԠUPϠADS SASԠDYBK SBDNBAD .Dà ŠMVŠN SBDPMMNԠAKANDSԠDS SZSN-SԠϠ MPԠAND SPà A5DAAKAɠUSԠҠSԠƠDS MANAMPUŠH ADAASҠNUMBҠ MPYSԠSS DBSAɠAVAAB MBNBAND ADABS SASìɠNHŠŠNY SZASSƠZ MPNԠYNԠDS DAASҠSŠPSԠϠS BHŠDS MPA6ANDGϠAPԠUP SPà MVűϠMV#>ŠDYNSϯM HŠA̠SAVŠAADND HN. ANGSUN: Ž0ϠHSSAVŠAA ŽMHSSAVŠAA AADDSSƠHҠAA MVűMVS9DS MVŲMVS3DS MVűNP DBSGNSԠBϠMVŠDS SBP.PASA̠ϠMV N9Dà-99DS NAMŠBSS9 SàUNAM+5 MPMVűɠUN SPà MVŲNP DBSGNSԠBҠMV SBP.PASA̠ϠMV N3Dà-33 BSS3DS MPMVŲɠUN SPà GKNP GUNP GSàNP GSàNP SKP GNSBS̠SԠGAYƠA SBSDҠSԠUPϠASSHŠDY SBDPASADHŠPASSDDAA SBUDADUPDAŠDYASS MPؠNDGϠ ŠSԠŠҠDPMMA SZSԠSԠS? SSNϻSKP SBDPMMYSGϠAԠHŠDSàPAMS SZSSԠϠ SBSҠŠHŠSS MPDPAGϠGԠHŠNԠBK SPà S̠NP DABɠGԠHŠK DBMPƠKD PADϠA SZBSSANDԠDSàSPàSKP MPر0SŠAKŠҠ MPS̬ SPà5 DPADADHŠPASSDDAA DPASNP DAPGԠHŠADDSS ANDBSAŠHŠU SAGUANDS ҠPSAŠHŠAK AƬA̠AŠ A̬AƠנA SAGKANDS DAPGԠHŠSSAK A̬ŬAMNAŠHŠSGN SAGSàANDS ASԠҠS SAGSàZ DPASADUSHנHŠBKNԠN ^SBàADHŠSS DƠGN DƠ. DƠGU DƠBU DƠ. DƠGK DƠGS GNPB.DSà? SSNϻNNU MPرYSAKŠDSàҠ DAGSàUPDAŠH ADA.DSàADDSS PAGSàNDƠAK? AYS-USŠ0S. SAGSàSԠS ŬSZASSƠ SZGKSPAKADDSS MPDPASɠUN SKP SPà5 K5DAPNDƠDY DBP5ƠGNA PB.AND SSASSSGNBԠSԠSKP MP6SŠ-NԠUND SBDPASNנDYҠDSS-AD MP3GϠŠAND SPà3 PAKSBS̠SԠGAYƠA SBSPҠSԠUPHŠDSàPAAMS DAPGԠAVŠDUBŠS MANASZASSSԠNGAVŠƠZ MPPAKSKP SAUNSԠUN PAKSBUDADBUMPADDSS MPر0NDƠDY SZUNSPUNһDN? MPPAKNϻGϠBUMPAGN PAKSBDPASYSADHŠNנS. 3SZSSԠŠAG ԴAANDAK MPؠAPԠ SPà DNP MPNP MPNP DADNP AKNP SԠNP SNP AUNP DҠNP SKP KDAMPDSàMUSԠBŠSPD SZASS MPر0NԠSPD- SBSDҠSԠϠSAHҠPNAGS KSBDNBADNY MPKNDƠDY-GANԠK DANSԠUNҠҠNS SASH DAABUƠSԠA_ADDSSƠS KDBAɠND SSBƠPUGD MPK3GN SZBSSDY? MPKYSGANDK SBSADNϻSԠNYADDSSS SBAGSԠҠAGS DBUNANY SZBS? MPظYSԠK DADANϻGԠADDSSϠA K3ADA.6SPϠNԠNY SZSHNDƠBK? MPKNϻYNԠNY MPKYSYNԠBK SPà KSBDPSKGANABŻADDS DADDYAND BS ADBDADH K5SABɠK MP3 SPà5 UKAUNK-A MPK5ANDGϠSԠ SPà ر0DAN0 NASS ر0DAN0 MP SPà N0Dà-0 .6Dà6 B3Ԡ3 NDà- SKP NAMSBDPASHANGŠNAM-ADNנNAM DAABUƠMVŠԠ SBMVŲA̠SAVŠAA DAABUƠSԠUPHŠNAM SBMVűҠDUPHK SBSDҠSԠUPϠADHŠDY SBN.SHҠSAHҠDUPAŠNAM SSNԠUNDSϠSKP MPزAKŠDUPNAMŠ SBDKGϠGԠDYNY DAAGAɠPNUSVY A̬ŬAAҠUSVŠBԠANDSAVŠN PAPϠA? SZŬSSYSSKP MPر0Nϻ NAMDADAYSMV SBMVŲHŠNנNAMŠN SBSHSAHҠNԠƠHS MPNAMYSGϠSԠNנNAM SPà SHNPDҠSAHҠNSϠMDY SZSSԠHŠŠAG SBSHҠSAHҠN MPԴNԠUNDSϠ MPSHɠUNDUN SPà5 DKADADYNY-SԠAGS HKPNAGS. DKNP DAAUDϠŠAADY PADPSHAVŠHŠDSàSPS? SSYSSϠSKPSԠUP SBSPҠSԠUPHŠDSàPAAMS DADҠS SAAKAK DAPGԠHŠPASSD ANDB3S SASԠANDSԠ ҠPNנGԠH AƬAƠS ADAABUƠADDHŠBUҠADDSS SBSADSԠDYADDSSS SBSUBADHŠBK DADAMVŠHŠNYϠA SBMVűSAG MPDK SKP SPà5 SŠSBDKSŻGԠHŠS DANSԠҠNS SDBAGAɠND B̬ŬBAS PBDAG MPSUND SZAGANԻYԠYNԠN NASZAM? MPSYSK MPرNϻҠ-NԠPNϠA SPà SAUNDAҠH SAAGAɠAG DAPGԠUNAŠD SZAƠZϠHNSKPNϠAN SZSSUSVŠPN? MP3Nϻ SSASSƠPSVŠHN MPPUҠGϠPUGŠHŠNS ADASìɠAUAŠNנŠSZ SASSGNҠƠDDSҠUN SSAƠSUԠSSHANZ MP3HNGNҠ ŬSZASSƠZ MPPUGŠGϠPUG SAMPSAVŠHŠNנSZ SBAS?ASԠ? ŬSSNϬAҠŠSKP ŠYSSԠ DAMPSԠHŠNנSZ SASìɠNHŠDY SZSSƠNԠHŠASԠNY MPPUҠGϠPUGŠANYNS MPPUGSŠGϠUPDAŠDSàPAMS SPà5 NԯSNPAUAŠHŠNԠAKANDS DBSìɠGԠHŠŠSZ DASAɠGԠHŠNϠƠSSNHŠ ANDB3SA ADBASUM ASҠ6NDϠA DVSԠDVDŠBYHŠNSԠPҠAK ADAAKAɠADDHŠUNԠAKADDSS MPNԯSɠUNANԠAKBNԠS SPà5 SHҠNPNԠSAHUN DBDƠSԠUNADDSSN SBN.SHҠNAMŠSAHUN MPNSH0GϠϠNAMŠSAH DƠDƠ+UNADDSSҠNAMŠSHAH MPSHҬɠNԠUNDSϠ SBSADUNDSԠHŠADDSSS DBSHҠSPHŠUNADDSS ŬNBAND DASAɠMAKŠSUŠHSSNԠHŠMAN PASàSAMŠASMAN? MPSҠYSSϠYAGAN MPBɠUN SPà AS?NP DBYPŬɠƠYPŠSؠ PB.6HNA MPAS?ɠASNԠAS SBNԯSMPUŠHŠNԠAKANDS PANҠSAMŠAK? AYSA_ PBNSàSAMŠASNԠS? NASZAYSASԠSAMŠAKAS? MPAS?ɠNϻNԠASԠŠԠP+ SZAS?YSASԠ MPAS?ɠԠP+ SPà3 SPҠNPADANDSԠUPHŠDSàPAAMS SBSDҠSԠUPϠASSHŠD SBDNBADANDSԠPAMS N6Dà-6 MPSPҬɠUNϠA SPà .6Dà6 SKP PUGŠA PUG0SADAɠSԠPUGŠAG SBAS?ASԠ? MPPUҠNϻGϠHKҠNS PUGSADAɠMAKŠNYAVAAB DADASHSHŠS SASSԠϠŠUNԠBK PAABUƠNYNHŠUNԠBK? MPPUG5YSGϠADPVUSBK PUGADAN6NϻBAKUPϠPVUS SBSADNYNDSԠUNPUGD DBYPŬɠHKYP DADAɠNY PB.6ƠYPŠSؠ ŠDϠNԠAMPԠVY SZBYPŠZϠ-ƠSϠSKP SZNASZi640ASSPUGD? MPPUGYSYPVUSNY SPà SSAUNDNY-SԠH MPPUG3DSàSPàNY?-YSUMP PUGSBNԯSNϻAUAŠHŠNԠAKANDS MPA6GϠSԬŠ SPà PUG3DAAKAɠSԠϠSH BNԠAVAABŠS MPA6SSԠS SPà PUG5SBSҠŠUNԠS DBSԠGԠSҠADDSS SZBSSƠSAԠƠAK SZAKDYAK ADBNSUBAԠSS SSBƠNGAVŠHN ADBSԠADDHŠN.PҠAK SBSԠSԠNנSҠADDSS SBSUBADHŠBK DAABUƠSԠADDSS ADA.ASԠNY MPPUGNHŠBK SPà PUҠSBSHSAHҠNSϠPUG MPPUGŠGϠPUGŠN SKP P.PASNA ANGSUN _0ҠSUP _ϠMVŠU B_0ϠSԠADDSS B_00000ϠSԠPAAMS AADDSSƠM-ϠAA SBP.PAS Dà-NN.ƠPAAMSϠBŠMVD BSSNAASԠUPҠMVDU SPà .Dà AU0 BU .U650B KYDU.+ ASDU.+0 ԠU.+39 NU NDBGN ]6ASMBҬ̬ HDŠŠMANAGҠDYUNŠ NAMD.Ҭ ԠìPNP.PAS SUP ŠMPDYUNŠNVGAA HSPGAMSHŠNA̠MANAGҠƠHŠŠŠMANAGMN SYSM.ԠNSHŠDYANDPMSA̠S N. PGAMSHNGϠASSHŠDY SHDUŠ(HAԩHSPGAM. ASAŠASS(PPP3PP5AŠHŠPASSDPAAMS: .PN P.DA'SDSGMNԠADDSSHSGNBԠS P.ŬNAM((BԠ5NDASUSVŠPNƠS P3.0NAM(3 P.0NAM(56 P5.-U+ADGŠAB̬0ƠZϠSAHA̠MUNDADGS .S P.DA'SDSGMNԠADDSS P.0-(N.SSϠBŠDD+PUGŠNSNY P3.ҬU P.SԬSҠDYADDSS P5.0NDASS 3.A P.D P.ҬUDAAAKADDSS P3.-U+ADGŬ0SŠ.P5. P. P5.NDASA .HANGŠNAM P.D P.ҬUDAAAKADDSS P3.ҬU\ P.SԬSҠ\DYADDSSƠŠBNGNAMD P5.NDASNAMŠHANGŠA 6.SԬAҠKNDS P.D P. P3.-U+ADGŠ(0NԠGA̩DSàϠBŠKD P. P5.3ҠSԠ5ҠA .GNAŬPAKUPDAŠA P.D P.ҬUDAAAKADDSS P3.-U+ADGŠ(0NԠGA̩DSàϠBŠUPDAD P.SSïAKS(BԠ5ƠDSàDYUPDA P5.NDASGNAŠA. .NSNPN P.D P.NSNNUMB P3.ҬU\ P.SԬSҠ\DYADDSSƠMASҠNY P5.6NDASNSNUSԠ(ADũ 9.PAK :2P.D P.ҬUDAAAKADDSS P3.-U+ADGŠSŠGNA P.AVŠDYSҠ(NYϠBŠHANGD P5.9 SKP DAAAKMAԠҠAԠANDHANGŠNAM .NAM(\ .NAM(3ҠNנNAM 3.NAM(56 .YP 5. 6. .SSUSDҠ-ҠSԠƠDS .DSZŠ(YPŠS 9.SUYD DMASҠDUBŠDUYDS 5...65..05......0 AKޠUSS SïS UNPAAMS ұ.ҠDŠƠ0HNSàNAԠҠYPŠNPN Ҳ.ҬU\ 3.SԬSҠ\DYADDSS-PNAŠAS Ҵ.ҠŠADDSSNPNAŠAS 5.SïҬSҠ ҠDS 0ҠPSVŠ-NϠ -DSàDN -DUPAŠNAM -3ŠNԠUND -5ADNԠPNANDNԠNԠUND -6ADGŠNԠUND -ŠSUNYPN(ASϠҠԠK -9ŠUNYPNϠHŠSAMŠPGAM -ŠNԠPN(Sũ -3DSàKD -DYU -0GA̠PAAMSNA -0GA̠A̠SUNŠ(KNԠUSDSԩ SKP BUƠBSS PAMADƠP SPà BGNDABPAMADDSSϠA BŠSԠUPϠMVŠPAMS BAND SBP.PASGϠGԠHM N5Dà-5 PNP PNP P3NP PNP P5NP SPà DAPGԠHŠSԠPAM DBKYDANDHŠADDSSƠHŠDSG A̬ŬASԻAҠPSSBŠSGNB SADSAVŠDSGADDSS SԠDABɠSAH NBDADDSSN SZASSKYDS MPԲNDƠSԻҠ PADHSN? NASSYSSKP MPSԠNϻYNԠN DBAɠUNDGԠAԠDADDSS ADA.A_SAUSADDSS DAAɠA_SAUS PBԠƠANGNHSPGM BSԠB_0 AƬSAƠAԠBԠSS SZBANDANGҠHSPGMSKP MPԲSŠԠ-GA̠A SPà SBMP DAABUƠSԠKSAHҠS SADADNY SPà HŠKUNŠSAHSHŠDSàDYҠH NDDS. ҠHŠSԠA̠DADSHUDPNԠAԠH SԠDNABU.SUBSUNYK ̠UPDAŠDADAHA. HHŠPNƠHŠDSàDYUPDAŠHŠDS MUSԠBŠUND.NHSASŬԠSϠHŠAԠUN NԠAAKNANSHŠDYAK AUNANSHŠDYU ANANSHŠKD NSUBSUNԠASƠHŠDSàDAS0HŠN DSàSUND.ƠHŠDSàDASNԠ0 ANԠUNDԠSAKN. NԠDAP5GԠHŠD-BԠ5NDAŠDS DBPDNP5 SSBDNP5? MPK0YSSKP ŬSASSNϻP5SUNNVN? MPK3YSGϠAԠU DAP3NϻUSNP3 K0MAŬSSANA_0NDASADGŠAB MAŬNA_NDASU(SԠ+ DBMPGԠPVUSD SAMPSŠD MŬSZBƠNԠAZϬDNSND MP6A̠AKŠ-6 SPà A̬ASԠSGNBԠƠAAB̠SAH SAMPANDSԠҠMPA SPà K6SBDPSADHŠPAAMϥS DAMPSԠHŠUNDBԠNŠ MAŬNAAZϠD DBDADGԠUNԠDYADD. KDABɠGԠSԠD SZASSƠ0HNND MPK5SϠGϠHKҠDY SAAUUPDAŻSŠSAVŠU PAMPSHSHŠUDDS? ŠYSSԠŠϠϠNDAŠUND NBSPϠAKADDSSAND DABɠS SAAAKNAAK NBSP DABɠAB̠ANDH ҠSGNSԠSGNҠMPA SZNBSSSPϠKADDSSSKPƠUND PAMPSHSHŠUSDDS? MPKYSGϠ NBNϻSPϠNԠN MPKANDGϠHK SPà K3DAP3UANDAKNP3 ANDBMASKϠU SAMPSAVŠU SABSAVŠUNBҠS ҠP3MASKϠAK AƬA̠AŠ A̬AƠנAAND SADҠSAVŠHŠAK PBDPSDϠŠHAVŠHSNŠAADY? MPDDYSSϠGϠDDŠHŠUS MPK6NϠSϠGϠKҠ SPà KSBDADUND-UPDAŠUN SZDADADDSSҠNԠM DABɠKϠA SZAƠNԠKD PADҠKDϠA MPDDSKP DAMPSŠ SZASSMU-DSàSAH MPNԠNNU MPر3SŠԠKDDS SPà DDDAPƠPN SSAUS MPPNGϠPN DAP5S SSAHKUSԠD MPر0NGAVŠ- ADAN0 SSASS MPر0GAҠHAN9- ADAABADNDؠNϠHŠUNN MPAɠGϠUŠHŠUNN SPà ABADDƠABA+0 ABAMPSŠ0 MPAԠ MPNAM MPK3 MPر0 MPUK5 MPPN6 MPGN MPPN MPPAK9 SPà5 DPSADHŠDSàDY DPSԠ- SBSҠŠUNԠSҠBK NAA_ SADUSԠҠU-SYSDS AMPUŠASԠAK ADAASDADDSSAND SAAKS ASԠSԠADDSS SASԠZ SBSUBADHŠBK MPDPSɠUN SPà5 SҠŠUNԠBK SҠNP DASGԠŠAG SZנSԠUSԠDŠϠ SZAƠNԠNNSKP SBSUBSŠŠHŠBK ANASԠUSԠDŠ SAנAD MPSҬɠANDԠ(A SPà נNP DUNP SPà SUBUNŠϠADҠŠA-SҠBK SUBNP DDנHHŠNנPNS ADBP SBPM SASSƠŠHN MPSUGϠDϠ PBDUSŠ DBNSAMŠBKAS DAAKUNԠN PAAàHN NB DASԠN PASԠANS ŬNB PBN5UDS MPSUBɠUN SUSBàNԠSAMŠBKA̠ DƠNUN DƠנADŠD DƠPMU ABUƠDƠBUƠBU DƠ.DS DƠAKNAK DƠSԠS NAŠAҠHŠ SASAG DADUSԠUPASԠPNSҠNԠM SADU DAAKSAVŠHŠAK SAAàADDSKSANDH DASԠS SAA+ADDSS PB.DSà? MPSUBɠNϠ-UN SADUYSSԠNԠNŠAG MPرYS-AKŠDSàҠ SPà DUNP AàNP SԠNP SKP PNDDP3SԠNAMŠDSAND3 DSԠNAM+NϠHŠNAMŠBU DAPSԠNAMŠD A̬ŬASSPSSBŠSGNB SANAMŠNϠHŠNAMŠBU SBSDҠSԠUPϠADHŠDY SBN.SHҠGϠNDHŠ MPNԠNԠUND-YNԠDS SBSADUND-GϠSԠHŠADDSSS SBAGHKHŠPNAGS DBUNƠPNS PB.HNNϠMS MPظ DAPƠUSVŠPN ŬSSASSHNSKP MPPN3NNUSVŠSKP ŬSZBƠANYPNSHN MPظԠUSVŠPN PN3DBSàGԠHŠAGADDSSSSN PN5NBSAHҠPNSPԠNAGS DABɠGԠAGD SSAƠSGNBԠSԠHN MPظŠSUSVYPNϠSMŠN SZAHSD? MPPN5NϻGϠYNԠN DAPYSGԠHŠDADDSS A̬ASԠHŠUSVůNN-USV SABɠAGANDPUԠNHŠDY SASSԠϠŠHŠBK PNDAYPŬɠSԠUPHŠUNPAAMS ؠSBPMSԠHŠUNPAMS ԠSBSҠŠHŠS SBPNPASSHŠUNPAMS DƠ+AND DƠұHN ԲSBàMP DƠ+ DƠ.6 SPà NSNPNUN PNSBDKGϠADNHŠMASҠDYNY AAҠH SADPNAGD DAPSԠH SZoASSƠAҠHŠMANHN MPPNŠHAVŠԠAADY AƬAƠNSNNϠҠPSSB SAGSàNSNA SBSHҠSAHҠHŠUDN MPPԠNԠUNDSϠGϠSԠƠAD AƬAƠNԠNϠϠA ANDB3MASK PAPHS? MPPNYSSϠGϠUNHŠPAMS SҠDAYPŠNϠSϠNNU MPNSHҴHŠSAH SPà PԠDBP5ƠNԠPNS PB.ŠHŠGϠAԠHŠN MPA0GϠ DAN5SŠUNGA̠D MPؠGϠ SPà .Dà .Dà ANAMŠDƠNAM AAKNP SGNԠ00000 SPà SDҠUNŠϠSԠUPϠADADY SDҠNP SBSҠŠUNԠS ASԠS SASԠAGϠNDAŠSԠBK DAAAKSԠHŠAK SAAKADDSS DAAUANDHŠU SADUADDSS PA.ƠU ASSUSŠZ DANSŠ-(UDADADDS SASԠSԠHŠS MPSDҬɠUN NDà- N.SHҠDYSAHUN AGԠNAMŠNNAM UN PàԠ000 S UNS: P+NDƠDYANԠADD.(ƠA0NDƠSPAũ P+UNDUNANYADD. N.SHҠNP SBDNBADHŠDY MPN.SHҬɠNDƠDSàUN NSH0DAABUƠSԠAϠHŠBUҠADDSS DBNSԠUNԠҠHŠN.NABK SBUN NSHұŠSԠUNDAG(Ž DBANAMŠSԠHŠNAMŠADDSS SBMPNMP DBN3SԠҠ3-DNAM SBUN NSHҲDBAɠGԠANAMŠD SZBSSƠZϠ-NDƠDYa MPN.SHҬɠSϠ PBMPɠMAH? NASSYS-SԠҠNԠDSKP ŬNANϠ-SԠNԠUND-SPNAM SZMPSPANS SZUNANDUNԠMŠNAM MPNSHҲYSGϠDϠ BSZŬNBNϻUND? MPNSH3YSGϠAKŠUND NSHҴADA.3NϻSԠҠNԠNY SZUNDNŠHBK? MPNSHұNϻDϠNԠNY MPN.SH+YSGϠADNԠBK NSH3ADBN.SHҠUND-SPUNADDSS ADAN3ADUSԠϠSAԠƠNY MPBɠUN SADϠSԠUPADDSSSҠDYNYNBUƠA ADDSSPNDϠBYA SADNP B SBP.PAS N0Dà-0 DANP NP NP YPŠNP AKANP SANP SàNP ̠NP SàNP AGANP MPSAD SPà SPà PMNP SAұSԠSԠUNPAM DAAKAKU S̠6 ADAAUUN SAҲ DAABUƠS MANAAND ADADAS AƬAƠ ADASԠUN SA33 DAAKAɠAKƠŠ SAҴUN DASAɠGԠHŠSҠADDSS ANDB3SAŠ DBSԠGԠHŠNUMBҠƠSSAK BƬBƠAŠAND ADABMBNŠHHŠS SA5UN5 MPPM SPà ұNP ҲNP 3NP ҴNP 5NP SPà DNBADNԠDYBK DNBNP SBUDADUPDAŠHŠADDSSS MPDNBɠNDƠDYUN SBSUBADHŠBK SZDNBSPϠKUN SZSԠSԠBK? MPDNBɠNϻSϠUN SPà ${640 SBDPMM MPDNBɠUN UDAD--UPDAŠHŠDYADDSS UDADNP SBSҠŠUNԠBK DA.A_ ADASԠADDϠHŠS BPPAŠҠDVD DVSԠDVDŠBYHŠNϠƠSS0AK SBSԠSԠHŠNנSҠADDSS SZAƠNϠVҠ SZBƠSҠSZϠHNSKP(NנAK MPUDADSŠGϠ SPà BSԠϠDMNԠAK ASԠAҠҠUN ADBAKADDSS PBҠUԠƠDY? MPUDADɠYSSϠUN SBAKSԠHŠNנAK UDADSZUDADSPUN MPUDADɠAKŠҠUN SPà ҠNP NSADƠBU+5 m&6 Tl 29033-80002 B S P0122 RTE FMGR PRTN,CREAT,OPEN,PURGE             H0101 ASMBҬ̬ HDPNϠUNPAMSϠHŠSHDUNGPGAM NAMPN6 NԠPM NԠPN Ԡ$BҬ$B SPà HSUNŠSUSDϠPASSVŠPAAMSϠHŠPGAM HAԠSHDUDHŠAҠHA. HŠSHDUNGPGAMMAYVҠHSŠPAAMSHMPA. HŠAԠAGSADSϠHŠAҠSHUDHAVŠHGH PYHANHŠSHDUҠϠPVNԠASAP. ANGSUN: SBPN DƠ+SANDADANSUN DƠPAMADDSSƠHŠVŠUNPAMAS SBàPGAMSHUDMP DƠ+ DƠS SPà3 PNNPNYPN SB$BҠGϠDϠPVDGŠHNG UNԠNP DAPNGԠHŠADDSSƠHŠA̠PAMS DBAɠGԠUNADDSS SBNSAVŠ NASPϠPAMADDSS DAAɠGԠPAMADDSS A̬ŬSAAMVŠPSSBŠND MP-ƠNDԠYAGAN SAPNSAVŠHŠPAMADDSS DAKYDGԠHADƠHŠKYDS SAPMSAVŠԠAY MPNԱ+GϠSANHŠS SPà NԠBNBADDN ADBAϠԠϠGԠHŠAԠDADDSS SBDASϠHŠPAMSAVŠADDSSSAVŠ DBBɠGԠHŠD PBԠHSHŠSHDUNGPGAM? MPUNDKSGDGϠHKHŠSAUS NԱSZPMSPKYDADDSS DAPMɠGԠNԠNY SZAƠNDƠSԠ MPNԠNԠNDYNԠD SPà ԠDAPSԠHŠPNҠPNNY SAPN SB$BؠԠϠHŠSYSMԠUN DƠNUNADDSS SPà NNP DNP SAԠNP SPà UNDDBD5AUAŠASԠPAMADDSS ADBAϠB SS-BASԠSAVŠԠҠSNG ADBD0AUAŠHŠSAUSADDSS SBSAԠSAVŠ DBBɠGԠSAUSƠSHDU BƬSBSHŠANG? PNBŬSBBҠNASSҠPM MPNԱNϠYNԠPGM BƬBƠAŠBHŠS BƠƠHŠAYAUND SBSAԬɠSԠSAUSϠSHDUD VҠNASԠϠPMAA DBPNɠGԠSԠPAM SBAɠSԠPAM SZPNSPADDSS PAASԠASԠPAM? BNBSSYSB_ANDSKP MPVҠNϠGϠDϠNԠN ADAD5YSSԠϠBGADDSS DBDGԠADDSSƠPAMAA SBAɠSԠBGSAVŠϠPNԠϠPAMS MPԠDNŠUNϠPGM SPà3 PBŬSBB NASNASSPMNYAPN ASԠNP D5Ԡ5 D0Dà0 SPà PMNPPNA̠NYҠU SB$BҠPAMҠPASSHUԠANG NPHŠAԠB DANASGԠHŠPNA̠NSUN SAPNSԠԠNHŠD DAPMGԠHŠUNADDSS SAPNSԠԠNHŠMANNYPN MPUN+GϠϠMANNŠANDDϠHŠB SPà AU0 BUA+ KYDU65B ԠUB ND ASMBҬ̬ NAMAԬ NԠA ԠSŬ$PN.N ԠNAM..MPA Ԡ SUP AԠSHŠŠANMDUŠƠHŠA̠M ŠMANAGMNԠPAKAG. HŠANANGSUNŠS: A̠A(DBҬNAMŬSZŬYPŬSU Ϡ ҠA(DBҬNAMŬSZŬYPŬSU נHŠҠ: DBSHŠADDSSƠA-DAAYHH AԠ̠USŠASASAHAA. SZ<0HNHŠADɄ,ŠSAS PNDϠHSDAAN̠BK. ҠSHŠADDSSϠHHHŠҠD SUND.HSNMANSAS UNDNHŠAGS. ҠDSA: 0HŠAԠASSUSSU̠-HŠSSSUND -HŠDSàSDN -DUPAŠNAM -ŠϠNG -6ADGŠNԠUND -0NԠNUGHPAAMSNHŠA -3DSàKD -DYU -5GA̠NAM -6GA̠YPŠҠSZ NAMŠSA3-DAAYNANNGHŠNנ'SNAM. HŠNAMŠMUSԠNANNYGA̠AS HAASNUDNGMBDDDBANKS.MMAS +SGN-SGNAŠNԠAD. NADDNHŠS HAAҠMUSԠBŠNN-NUMàANDNN-BANK. SZŠA-DAAY.DSHŠSZŠN -DDUBŠSS.DSUSD NYҠYPŠSANDSHŠDNGH. YPŠSHŠŠYP--MUSԠBŠ0. S(PNA̩SHŠ'SSUYD. ƠS0HŠŠSŠPD. ƠS<0HŠŠSPNPD. ƠS0ҠSNԠDDHŠŠSPUB. U(PNA̩DSHŠAԠ: ƠU<0HNHŠDSàAԠGA̠UNԠ(-U. ƠU0HNHŠDSàHAB̠U. ƠU0ҠNԠDDHŠSԠAVAAB DSàHNUGHMSUSD. SKP DBNP ҠNP NAMŠNP SZŠNP YPŠDƠZ SàDƠZ UDƠZ SPà AԠNPNYPN SB.NҠANSҠHŠPAAMS DƠDB DAYPŠMAKŠSUŠHŠA PADZϠNUGH MPұ0NϠ-Ҡ SBSŠ@GϠSŠHŠDҠ(ƠPN DƠ+ DƠDB SZANϠ PANANDNԠPNҠ-K SSSϠSKPƠHSSHŠAS MPԠSŠԠSMŠSŠ SBNAM..GϠHKHŠNAM DƠ+ DƠNAMŬ SZAƠKSKP MPԠSŠԠ SPà DANAMŬɠGDNAMŠS SABUƠS SZNAMŠUP DDNAMŬɠSKNDY DSԠBU+NYNBU DAYPŬ SZAYPŠMUSԠB SSA0 MPұ6NԠ0 SABU+3 DBSZŬɠGԠHŠSZ BSDUBŠϠGԠ6-DSS SSBMUSԠBŠ0 BSԠϠ- SZBSSƠZ MPұ6 SBBU+6S SZSZŠSPϠDSZ PA.ƠNԠYPŠ ASSHN MPASKPSZŠS SҠ0SHԠϠAҠDVD DVSZŬɠƠVҠנHŠDSZŠϠSMA SàƠKSKP MPҴSŠҠŠϠAG ADASZŬ DBBU+3GԠYP PB.ƠYPŽ DA.SԠSZŠϠ PB.ƠYPŠϠSZŠMUSԠBŠGVN SSASSSZŠGVN? SSYSҠNԠYPŠϠSKP MPҴSŠ A3SABU+SԠDSZ DASìɠS SABU+SUYD SPà SBàG DƠѠN DƠ.AK DƠ.M DƠAKH DƠDUSYSM DƠMP ѠSBà DƠNH DƠ.DY DƠDUNY DƠBUƠN DƠ.H )tDƠAKAK DZϠDƠZϠAԠSҠZ NASԠϠDSàҠD PB.DSà SSNϻSKP MPԠYS DAAKMBN S̠6AK ADADUANDU SAMPҠD. SHPSBàSHDU DƠSHԠD. DƠ.9 DƠD.ҠA DƠԠH DƠMP DƠUɠPASSNG DƠMPH DƠ.AK SHԠSZASHDUŠK MPSHPNϻYAGAN SPà SBMPAҠYS DƠ+A̠MPA DƠBU+ϠGԠUNDS SBàAS DƠNH DƠ.5SYSM DƠ.AK DƠAK DƠDU NDABU+GԠD.ҠMPN SSADŠ-K MPԠNϻAKŠ DABU+5YSSԠUP SADBɠϠA DBDB$PN ŬNB DABU+6PN SABɠH DADB DBSì SB$PNSԠUPSԠƠDB DƠBU+ADDSSƠNϠƠSSAK MPԠDSàҠ- DAYPŬɠGԠYP ADAN3Ơ3ҠM SSASKPϠŠ MP0NԠANDMASS ASԠNNANDƠAGNDB DBDBGԠŠAG ADB.3ADDSS SABɠSԠNNAG ADB.3SPϠHŠBUҠANDSԠ SABɠNSԠDƠBU 0DABU+NϻUSŠD.ҠUNҠ ԠDBDZϠD SBSàS SBUA̠DS SBYPŠҠNԠA SAҬɠhSԠҠD MPAԬɠAND SPà3 ҴDANSԠ MPԠD ұ0DAN0AND MPԠ SPà3 ұ6DAN6GԠHŠҠD MPԠAKŠ SPà3 MPNP N6Dà-6 N0Dà-0 NDà- N3Ԡ-3 NԠ- .Ԡ .Dà .3Ԡ3 .Dà .9Dà9 .5Dà5 .3Dà3 .Dà DUNP AKNP ZϠNP UNԠU BUƠBSS9 D.ҠASà3D. SPà3 AU0 BU ԠUB SPà NDU SPà ND ASMBҬ̬ NAMPN NԠPN ԠìSŬMPAҬ$PN Ԡ.N SUP PNSHŠŠPNUNŠƠHŠA̠M ŠMANAGMNԠPAKAG HŠANANGSUNŠS: A̠PN(DBҬNAMŬPSU נHŠҠ: DBSA-DDAAN̠BK(AAY ϠBŠUSDHA̠ASSϠHŠ UNDҠHSPN. ҠSHŠUNҠDŠ(ASϠUNDNA NAMŠSHŠ6-HAAҠ(3DNAMŠAAY. P(PNA̩SHŠPNPNAGD PNSA: BԠMANNGƠS 0NN-USVŠPN UPDAŠPN ŠϠYPŠPN S(PNA̩SHŠPDSUYD. U(PNA̩SHŠDSàSPD. ƠU0HNUSŠDSàABDU ƠU<0HNUSŠDSàAԠGA̠UNԠ(-U PNSAŠASS: -DSà -6ŠNԠUND -NGSUYD -ŠSUNYPN(ƠUSVŠUSԩ SUNYPNϠHҠPGAMS -9AMPԠϠPNYPŠ0ASYPŠ -0NԠNUGHPAAMS -3DSàKD SKP DBNP ҠNP NAMŠDƠZ PDƠZ SàDƠZ UDƠZ SPà PNNPNYPN SB.NҠANSҠPAAMS DƠDBϠA̠AA DAN0 DBNAMŠDDŠG PBDZϠNUGHPAAMS? MPԠNϻҠ- SPà SBSŠS DƠ+ DƠDBɠPN SZASKPƠNϠS PANҠƠNԠPN ŬSS MPԠSŠAKŠҠ DANAMŬɠGԠNAMŠD DBPɠANDPN BUSVŠBԠϠ MŠNVԠAND A̬ASԠNSGNƠA SANAMűSԠҠA̠ϠD. SZNAMŠG DDNAMŬɠSԠ DSԠNAMű+NAMŠANDSԠҠD.ҠA DAԠGԠD ŠAND A̬AS SADSGNҠD.ҠA SDԠSBàSHDU DƠSND. DƠ.9HA DƠD.ҠϠPN ؠPHŠ DƠD+- DƠU SNSZASHDUŠK? MPSDԠNϻYAGAN SBMPAҠYSGԠHŠUN DƠ+DS DƠDϠA̠AA DADGԠҠD SSAƠ MPԠ DDD+SŠS DSԠDBɠHŠDBҠ$PN ϠSԠ DAPɠ AҬSAAҠNDA SϠUPDAŠPN AANDŠҠYPŠV-D SAUSAVŠAG DADBGԠDBADDSS DBSìɠANDSUYD SB$PNANDGϠSԠUPHŠDB DƠD+ADDSSƠNϠƠSSPҠAK MPPNҠ-SŠAND SSAƠPNP SSBANDDŠMSMAHHNSKP MPPNSŠGϠԠ-GDPN SPà DANSԠԠD PNSADND SBSŠGA̠PNSϠS DƠ+H DƠDBɠ PNDADSNDҠD DBUGԠSUBUNNAG SBƠNԠS SZAҠNԠYPŠZ MPԠHN SPà DBDBAUAŠDBSUBUNN ADB.3ADDSS SBDBSAVŠ DAPɠGԠHŠPNSUBUNN ANDB300MASKԠ SABANDSAVŠ DADBɠGԠHŠUNԠD ANDBSAVŠHŠU ADABADDNHŠNנSUBUNN SADBɠSԠԠNHŠDB AAҠAAND SPà ԠDBDZϠSԠH YPDAU SBNAM+-YPAAMS SAҬɠSԠHŠҠD MPPNɠANDUN SPà SPà3 DZϠDƠZ N0Dà-0 NDà- DNP NAMűBSS NDà- ZϠNP D.ҠASà3D. .3Dà3 B300Ԡ300 BԠ .9Dà9 SPà3 AU0 BU ԠUB SPà3 NDU ND ASMBҬ̬ NAMPUGŬ NԠPUG ԠPN Ԡ.NҬS SUP PUGŠSHŠŠDNUNŠҠHŠ ŠMANAGMNԠPAKAG HŠANANGSUNŠS: A̠PUG(DBҬNAMŬSU נHŠҠ: DBSA-DDAAN̠BK HHSUSDBYPUGŠASA KNGBU.DBS ҠHҠUSŠAҠAPUG. ҠSHŠҠUNAN. NAMŠSHŠNAMŠƠHŠŠϠBŠPUGD. SSHŠ'SSUYD. USHŠDSàHAԠHŠŠSN. ƠU0HNNDSàABDU ƠU<0HNNDSàAԠGA̠UNԠ(-U SUNDBYPUGŠA: DŠASN 0NϠS -DSàADŠ -6Š(ҠDSéNԠUND -GA̠SUYD -ŠSPNϠSMŠHҠPGAM -0NԠNUGHPAAMS -3DSàKD -6AMPԠϠPUGŠAYPŠ0 SKP DBNP ҠNP NAMŠDƠZ SàDƠZ UDƠZ SPà PUGŠNPNYPN SB.NҠDϠNYUN DƠDB DAN0NԠNUGHPAM DBNAMŠ PBDZϠ? MPԠYS- AAҠHŠUNAŠD SANGAND SPà SBPNNϻG DƠPNPN DƠDBɠUSVY DƠҬɠ DƠNAMŬɠA DZϠDƠZ DƠSìɠPASSHŠSUYD DƠUɠANDHŠDSàD PNSSAPN? MPԠYS SZASSNϻYPŠZ MPر6YS-GA̠PUG SPà DADBGԠADDSS ADA. DBAɠSUY SSBSSƠMSMAH MPطGϠSԠҠ SPà ADANADDSSƠŠNGH DAAɠGԠŠNGH ASSԠϠBKNGH SANGSԠҠUNAŠD SPà SSBSŠSŠHŠŠANDUNAŠϠZ <:6DƠ+(..PUGŠԩ DƠDBɠ DƠUDUMMYҠUN DƠNGUNAŠDADDSS DBҬɠGԠUNԠҠD SSBƠNNŠSKP DABSŠUSŠ ԠSAҬɠSԠHŠҠD DBDZϠS ؠP3H SBNAM+-ؠNY MPPUGŬɠAND SPà طDA.SԠ MANASSDŠANDSKP ر6DAN6 SAҬɠSԠDŠNUSҠAA MPSGϠSŠHŠ SPà3 NDà- N0Dà-0 .Dà N6Dà-6 NGNP ZϠNP D.ҠASà3D. SPà ԠUB AU0 BU SPà NDU ND < Ud 29033-80003 B S P0122 RTE FMGR NAMF,READF,FSTAT             H0101 ܼASMBҬ̬ NAMNAMƬ Ԡì.NҬSŬNAM..PN NԠNAM NAMƠSHŠŠNAMŠHANGŠMDUŠƠH ŠŠMANAGMNԠPAKADG. ANGSUN: A̠NAM(DBҬNAMŬNNAMŬSU H: DBSADDAAN̠BK HSAASŠAҠHŠA. ҠSHŠҠUNAN SAŠUNDHŠANDN HŠAGS. DNDSA: 0NϠ -DSàDN -DUPAŠNAM -6ADGŠҠŠNԠUND -NVADSUYD -ŠUNYPN -0NԠNUGHPAAMS -3HŠUDDSàSKD -5GA̠NנNAM NNAMŠHŠNנ6HAAҠŠNAM SPNA̠-HŠŠSUYD UPNA̠-HŠSDSàD. PDNGNSANS NDà- .Dà N0Dà-0 SPà3 DBDƠZϠDN ҠDƠZϠPAAMA NAMŠDƠZϠADDSSS NNAMŠDƠZ SDƠZ UDƠZ SPà NAMƠNPNYPN SB.NҠHPAAMADDSSS DƠDBϠA̠S SPà DAN0ADҠNԠNUGHPAM DBNNAMŠNנNAMŠSUPPD? PBDZ MPԠNϻGϠ SPà SBNAM..YSNנNAM DƠNAM.ҠGA DƠNNAMŬɠҠAŠNAM? NAM.ҠSZA MPԠNϻ SBPNA DƠPN DƠDBɠPN DƠҬɠH DƠNAMŬɠ DƠZϠUSVY DƠSɠH DƠUɠUSҠPAMS PNSSASUSS=U̠PN? MPԠNϻ DADBYSHK ADA.H DBAɠSUY DAND SSBSSMAH? MPؠNϻSŠAND SBàG DƠұA DƠ.SYSM DƠ.AK DƠAK DƠU DƠDB ұSBà DƠҲH DƠ.N DƠUNAM DƠNNAMŬɠN DƠ.H DƠAKAK DƠZϠSҠZ ҲDDDBɠGԠDBϠB SBDBANDSAVŠ DAAKMAKU S̠6D ADAU SANAMŠD.ҠA SHSBàA DƠ3D. DƠ.9 DƠD.ҠHANG DƠԠH DƠNAMŠ DƠDBɠNAM DƠDB DƠ. 3SZASHDU MPSHN-HNYAGAN DABɠҠAGϠA SANAMŠSAVŠ SBàUN DƠҴH DƠ.5SYSM DƠ.AK DƠAK DƠU SPà ҴSSSKPҠNY ؠSANAMŠSAVŠҠD SBSŠS DƠұH DƠDBɠ ұDBNAMŠGԠҠD SZBƠNNŠSKP DABSŠUSŠ ԠSAҬɠSԠUN DBDZϠS ؠP3H SB-+NNAMŠADDSSS MPNAMƬɠԠϠUS SPà3 NGNSANS SPà DBNP UNP AKNP ZϠNP DZϠDƠZ SPà MPSNDNYBYDS SPà .Dà .Dà6 .Dà .5Dà5 .9Dà9 .Dà D.ҠASà3D. SPà ASSMBYADS SPà AU0 BU ԠUB SPà NDUPG.NGH SPà ND ASMBҬ̬ NAMADƬ NԠADƬ Ԡìү$.NҬP.PAS Ԡ$UB$KP ԠG$ SUP HSSHŠŠŠMANAGMNԠPAKAG ADŠSUBUN. HSUNŠ̠ADҠŠANYYŠ. ANGSUN: A̠AD(DBҬBUƬ̬̬N Ϡ ҠAD(DBҬBUƬ̬̬N ϠADϠ A̠(DBҬBUƬ̬N Ϡ Ҡ(DBҬBUƬ̬N Ϡ. נHŠҠ: DBSHŠDDAAN̠BK ҠHŠND. ҠSHŠҠUNAN SAŠASS: DŠҠNDN 0Ҡ0NϠ -AUDDSàҠDVŠSDN -5GA̠DNUMBҠ AMPԠϠADADNԠN -NVADSUYDŠ Š(ŠSADNY -0AUDPAAMҠSMSSNG -HŠDBSNԠPN -SƠҠƠSNSDNAD -GA̠USԠϠAYPŠZϠ ҠSŠҠ-UNDASUNN BUƠSHŠBUҠϠBŠUSDϠADҠ. ̠SHŠUSDANSҠNGHNDS. ̠SHŠNGHASADNDS. NSHŠUSDDNUMB ƠN0ҠƠN<0HŠAVŠD NUMBҠMHŠJUNԠPSN. NSGA̠NYPŠANDSNY. ϠPԠɠϠNS: ̠SPNA̠NYPŠANDS. NYPŠSSUSD NYPŠSHŠDNGHSUSD. ̠SPNA̠AԠA̠MS. NSPNA̠ANDSGNDNS ƠYPSHҠHANAND.ƠN SUPPDZϠSUSD. HŠSԠDNAŠSD. ŠؠԠŠҠNA̠S: $UBSUSDϠADҠŠDS MҠϠSƠYPŠ ABV.ԠHANDSA̠SҬ AKANDNԠSHNG HSŠSANDASϠSAND ADSBKSMHŠŠAS UD.ADSAŠNDNA NG$.AGBA̠AGHH MUSԠBŠNN-ZϠBŠAAD SUD. $UBANGSUNŠS: DBDS DADBADDSS ůŠůAD SB$UBA DƠUBUƠADDSSƠUS'SBU MPҠҠUN(ANDN --NMA̠UN SPà P$NSUSDϠAUAŠHŠPSN ƠYPŠANDS. P$NANGSUNŠS: DADBADDSS DBDNUMB SBP$NA NPBUҠSԠUNDH MPҠƠUN --NMA̠UN AAKBS ƠDà-ŠNYPN DAƠANSҠUNADDSS SAADƠϠADNY MPAD+ANDGϠϠADNY SPà3 DBNPDBPN ҠNPҠB BUƠԠ-USҠBUҠADDSS ۂDƠDMUSԠNGH ̠DƠZ0UNNGH NDƠZ0DNUMB ADƠNPADNYPN SB.NҠANSҠH DƠDBPAAMS DADBSԠUPH BŠDB SBP.PASADDSSS NDà- MPNPUSŠSԠϠAS MPNPMPSAG YPŠNPADDSSƠYP U0NPU(Ҡ0ũ AKUU0ASϠAK 0NPƠDŠ(0ũ BSԠU0ASϠS SPAàNPSPANGDŠ(0ũ SZŠUSPAàASϠŠSZ ̠NPDNGH SMϠNPSUYPNMD SïԠNPSSAK GNPPNAG ҠNPUNԠAK SԠNPUNԠS BUPԠNPUNԠPSN GNPADŠAG àNPDUN MPNP BUDNP SPà DAN0PSԠҠMSSNGPAM DBBUƠBUҠMUSԠB SSBSUPPD MPԠSŠMSSNGPAM DBGɠƠNԠPN DAN PBԠHN SS MPԠԠŠNԠPN DBƠGԠADŠAG DASMϬɠANDSUYD SSBSSƠ SSAAND MPSKBADSUY DANHN ԠDBN SBBUƠS DBDMBUƠPNA SB̠PAAM DBDZ0ADDSS SB̠ SBNN BA SBZ0 SBDM B SBƠSԠADŠAGAND SAҬɠSԠHŠҠD MPADƬɠUN SPà SK̠SHԠSGNϠנA SAG$USŠAADAG DB̬ɠGԠNҠ SAƠAD DBNɠGԠADN DAYPŬɠGԠYP PA. MPSԠGϠSԠҠ PA.ƠYPŠN ASSSKP MPSSŠGϠϠƠS ANDMASS SPà SAGɠNHBԠү$ŠҠYPŠNŠS DA.UŠNGHϠҠYPŠS SA̬ɠҠHŠPSNUN SPà SԠDA̬ɠGԠHŠUSԠNGH SSAƠƠUSԠHN MPKGϠԠNϠAN SZBPSNPN? SSBYSƠ<0 ADBìɠADDUNԠPSN SBMPSAVŠSU A ADABMUPYDNGH SSAƠNGDN MPؠAKŠҠ MPY̬ɠBYHŠDSDD SAMPSAVŠנPA ANDBMASKϠS SAGSԠHŠS ҠMPSŠHŠHGHPA ASҠ6VNSԠADDSSϠA SAMPSAV MAHK ADASZŬɠ SSAƠNԠƠSKP MPؠAKŠҠ DAMPSŠA ADABSԬɠADDHŠBASŠS DVSïԬɠDVDŠBYN.SԯAK ADAAKɠADDBASŠAK-AAK DSԠMPSAVŠNנүSҠADDSS PAҬɠƠSAM AAS PBSԬɠUN DB0PSN ŬSSBHN MPASSKP DBDBS SBү$ŠHŠUNԠBK MPԠƠNSSAY DDMPHNS DSԠҬɠHŠN SPàADDSS ASDAGSԠHŠS ADABUDADDBUҠADDSS DSABUPԬɠANDSԠHŠPN DAMPSԠH SAìɠNנDNUMB SPà SDABUPԠSԠHŠND ADAMSGNBԠN SABUPԠHŠBUҠPN DAYPŬɠGԠŠYP MANASZASSƠ0 MPYP00Ҡ NASZASSGϠDϠ0HNG MP.YP NASZASSƠYPŠ MPYGϠDϠADS NSDAGɠGԠHŠNŠAG ŬSZAƠN MPSPGϠSԠҠ DBDBSŠAD SBү$HŠBK MPԠҠ SPà SPDAYPŬɠGԠHŠYPŠAGAN נDB̬ɠGԠHŠDNGH(YPŠ PA.ƠYPŠ MP.נGϠDϠAD SPà YPŠ3ANDABVŠADŠP DAƠSԠADŠAG ANŠ0ŠAD DBBUPԬɠGԠUNԠD SSBSSƠ<0HN MPDNNϠ<0-SKP BSZSSƠƠAND MPSɠGϠAҠHŠADAG ƠDAGɠƠANDAD AҬAҠS AA̠ SAGɠBԠNDB 0ASԠUNNGH SA̬ɠҠ ASZƠSԠƠSKP ؠDANSŠƠ SSASSƠSԠƠHN SZìɠSPHŠDUN MPԠGϠ SPà SɠSBG$AҠHŠADAG DNBSZƠAD MPDűSKPŠHKS DA̬ɠGԠUSԠNGH MAŬSSANASSƠŠ MPҠGϠŠ ADABUPԬɠMPAŠNנNGHϠD DBG$GԠADAG ŬSZAƠNנNGHD SZBSSҠƠNԠUPDA MPDŲNNUŠ SPà 5DAN5@SŠUPDAŠ MPԠGϠ SPà DűDADMBUƠGԠNGHUNADDSS DŲBSZNBSSƠ DA̠USŠUSԠNGH SABUASԠADDSSƠBU DADBSԠHŠDBADDSS SB$UBGϠADSԠNGHD BUADƠ̬ MPԠҠ DBA .נDAƠGԠADŠAG AϠ ASZSSƠŠHNSKP MPԠŠSϠSKP DA̠HKƠNGHSUPPD PADMBUƠƠMPAŠHNNϠNGH ASSNԠSUPPDSϠŠANS DABSUPPDSϠHKҠD MANAϠNG ADA̬ɠBU SSASKPƠK DB̬ɠϠNGSϠUSŠSUPPDNGH SB̬ɠSԠASUNNGH ԠSASKPSAVŠSDUŠҠSKPAҠAD DADBDBϠA SB$UBADHŠD DƠBUƬɠϠUSҠBU MPԠҠ DBYPŬɠGԠŠYP PB.Ơ MPK-HNDNŠ-GϠ DADBSԠUPϠSKP DBSKPHŠSDU MBSSBNBSԠ+NϠDSSKPƠ0 MPNSKP<0SϠDN'ԠSKP SB$KPGϠSKPHŠDS MPԠҠ NSKPDAƠS ASԠ ASZSSADŠH DA̠ND SABUAAD DADBϠDUM BNBҠM SB$UBUS. BUAANP MPԠҠ- PABUAɠƠNMSMAH BSS MP5HNBADD- DAG$GԠADAG ŬSZASSƠNԠADNG MPҠGϠSԠƠN 0SZìɠSPHŠDUN KADNŠ-KS MPԠ k|SPà ҠSBBUPԬɠSԠƠNDB BB SBGɠNNANDƠAGNHŠDB MPK-GϠ SPà YDBG$GԠADŠAG SZBƠADNG MPNSGϠSԠҠN MPSPSŠGϠ. SPà YPŠ0ҠŠ--ANSҠM .YPDA̠GԠNGHADDSS DBAɠGԠNGH PADMBUƠƠNԠSUPPDHN DB.USŠ SB̠SAVŠAY ADBBUNDUP SҠGԠƠSSVD SBSKPSAVŠUNDDNGH ADBìɠƠDDS SBMPSAVŠNנD ADBNSUBAԠ(D'SSAԠAԠ BSNVԠϠ6DSS MBNBSUBA ADBSPAìɠMŠSZ SSBƠUԠƠ MPؠAKŠƠ SPà DASKPGԠUNDDNGH S̠SԠϠԠPSN DBƠAND SSBSSSԠ SA̠ SSBSSUN SA̬ɠNGHҠAD SPà DADB ANDB ADAP SAU SPà NҠDASԬɠMPUŠH MANAMAؠDҠHS ADASïԬɠASS S̠6AND SANSԠҠ MANASUBA DB̠M ADAB SSAƠϠMUH SBNSԠANSҠϠUSԠ SA̠SԠNUMBҠԠϠD AؠDAƠSԠUP BNBH SSASSUS NBD SBѠAND SBàA DƠNH DƠѠ DƠUҠ DƠBUƬɠɯ DƠNϯ DƠҬɠ_M DƠSԬɠUS NSZSKPDSà?? MPDSàYSGϠDϠDSàҠHK SZMPƠ MP0SKPƠSS SB̬ɠSԠHŠUNNGH SPà A̬ŬAPUԠHŠDNBԠN AƬA̠SHԠHŠƠB A̠ϠBԠ5 SSAƠƠBԠS MP00GϠDϠƠHNG SZBƠZϠDSADHNSKP MP0SŠGϠԠGD ANDB0MASKHŠHGHDҠYPŠB SZŬSZAƠNԠDNҠƠYPŠ<0HN MPYP00SŠYHŠ SPà 00 MP0DϠƠYPŠZϠ SPà DSàAPSԠҠ PBNDSà? SSNϻSKP MPԠYS ADBBUƠUPDAŠH SBBUƠBUҠADDSS ASԠUPҠPSSBŠAKSH SASԬɠSԠS SZҬɠSPHŠAKADDSS DA̠GԠMANNGNGH MASSANASZASKPƠNԠGAҠHNZ MPNҠMŠSϠGϠDϠHŠNԠBK SPà DAMPDNŠUPDA SAìɠHŠDUN MPKAND UN PàԠ000 S SPà3 0SBàŠYPŠZϠ DƠԠUNADDSS DƠ.3 DƠ0 DƠN ԠMPK SPà3 رDANSԠUPGA̠USԠAG MPԠGϠ SPà YP00DBƠƠAD SBMPSԠADŠAGҠƠS DA̬ɠGԠHŠADŠGA̠AG SSBSSƠ AҠSHԠHŠŠAGϠBԠ5 SSASSSԠHŠAG MPرGA̠USԠGϠ SPà AƠAD SSBHN MPYP0SKP PA̬ɠ? MP0YSGϠMAKŠN̠ SPà YP0SASKPSԠYPŠ0AG DAU0ɠGԠGA SAUҠUNԠANDS DA̬ɠGԠUSԠNGH SANANDS MPAؠGϠA̠ àϠNSԠANԠS NԠ- .Ԡ .Ԡ .3Ԡ3 .Dà MSGNDƠ0 DZ0DƠZ0 Z0NP DMBUƠDƠDM DMNP NDà- N0Dà-0 NԠ- NDà- N5Ԡ-5 BԠ B6Ԡ600 B0Ԡ0 BԠ B0Ԡ0 SPà5 SKPNP ѠNP UҠNP NNP SPà3 AU0 BU ԠUB SPà PNGU ND ASMBҬ̬ NAMSAԬ NԠSA Ԡì.N SPà SAԠADSHŠDYƠDSSϠH USҠSPD5DBU ANGSUN: SPà A̠SA(SAԩ SPà H:SAԠSA5DBUҠN HHHŠDY̠BŠAD. SPà5 SAԠNP SPà SAԠNPNYPN SB.NҠHH DƠSAԠADDSS SPà AMPUŠAS ADAASDSYSMDS SAAKAKNUMB SBàA̠ DƠN DƠ.AD DƠ.MU DƠSAԬɠϠHŠUSҠBU DƠ.55DS DƠAKMHŠASԠAK DƠ.0SҠ0 NMPSAԬɠUN SPà3 .Dà .Dà .5Dà5 .0NP AKNP56B SPà AU0 BU ASDU56B SPà NDU SPà ND uHFBBH Vg 29033-80004 B S P0122 RTE FMGR RWNDF,POSNT APOSN,FCONT,LOCF             H0101 ASASMBҬ̬ NAMNDƬ NԠND Ԡ.NҬND$ Ԡү$ HŠMDUŠƠHŠŠŠMANAGҠPMS HŠNDҠSԠUNN AŠSSԠϠNԠ0DVAND$ AYPŠZϠUNԠSUNDVAANDàA ANGSUN A̠ND(DBҩ H: DBSHŠSDAAN̠BKAAY ҠSHŠҠUNAN. SAŠUNDNHŠAG AS. SDSA: 0NϠ -DBNԠPN SPà PŠNSANԠAA SPà .3Dà3 YPŠNP .Ԡ .Dà .5Dà5 SPà3 DBDƠDB ҠDƠDB SPà NDƠNPNYPN SB.NҠH DDMDƠDBPAMADDSSS SPà DBDBGԠDBADDSS ADB.NDؠϠYPŠAND SBYPŠSԠADDSS ADB.NDؠϠPNAGAND DABɠH PAԠPN? ANASSYSSԠANDDUNԯSKP MPNPNNϻAKŠҠ ADB.5NDؠϠDUNԠAND SABɠSԠDUN DAYPŬɠGԠYP ŬSZAƠNԠZ MPDSàGϠDϠDSàHNG SPà SZYPŠYPŠ0-SPϠU DAYPŬɠHUAND ANDBSAŠԠHN ADAB00ADDHŠNDB SAYPŠANDSAVŠҠ SPà SBàA̠à DƠNND DƠ.3YP DƠYPŠZϠ NASSSԠҠDŠANDSKPϠ NPNDANNԠPN-Ԡ- ԠSAҬɠSԠҠD DBDDMSԠNYADDSSS SBDBAN"D SBҠHN MPNDƬɠUN SPà MDNSANԠAA SPà BԠ B00Ԡ00 NDà- SPà3 DSàDBDBSԠUPAND SBү$ŠHŠBKƠNSSAY MPԠƠҠ SPà DBDBDSà-A AND$ SBND$ϠSԠUPDB MPԠҠUN MPNNMA̠UN SPà PSԠNSANԠAA SPà AU0 BU ԠUB SPà NDU SPà ND ASMBҬ̬ NAMPSNԬ NԠPSN Ԡì.NҬG$P.PASADƬ$KP PSNԠSHŠŠPSNUNŠҠH ŠŠMANAGMNԠPAKAG ANGSUN: A̠PSNԠ(DBҬNPҩ H: DBSHŠSDAAN̠BK ADDSS ҠSHŠҠUNADDSS PSNԠSA: 0NN -DSàDN -5ANGA̠DASNUND (NGHSAԠAHNDDDNԠMAH -0NԠNUGHPAAMS -DBNԠPN -ƠҠSƠSNSD NPƠ0HNSKPNPDS Ơ<0HNBAKSPAŠNPDS Ơ0HNNϠPAN Ҡ(PNA̩ƠNԠDDҠZ NPSAVŠHZ NPSABSUŠ(NPMUSԠBž0 SPà3 PŠSAG SPà N0Dà-0 NDà- DZҠDƠZ ZϠNP DBNP ҠNP NPDƠZ ҠDƠZ SPà PSNԠNPNYPN SB.NҠH DƠDBADDSSS DAN0NUGH DBNPPAMS PBDZҠSUPPD? MPԠNϬ SBG$UŠADSHŠSPANG BŠS DADBUP SBP.PASA Dà-5DB UNPADDSSS DUMNP YPŠNPYP UNPUҠYPŠ0 ƠNPƠDŠҠYPŠ0 SPAŠNPSPANGGA̠AGŠYPŠ0 NNDNP NNP NP PNNPPNAG ABàNP NNP BPԠNPBUҠPNҠYPŠ3ANDABV GNPADŠƠAG àNPDUN DANGԠNԠPN.DŠϠA DBPNɠGԠPNAGϠB PBԠPN ŬSSYSSKPSԠ MPԠNϻԠPN DABPԠGԠBUҠPNҠADDSS A̬ASԠNDԠB SABPԠSԠPN DAҬɠGԠAVŠABSUŠAG BASSUMŠABSU SZASSAV? DBìɠYSGԠUNԠDN. ADBNPɠADDHŠUSDMVMN SBABàSAVŠNנABSUŠADDSS MBNBSԠNGAVŠAND ADBìɠMPUŠAVŠDNUMB MBNBSZBSSSԠϠGHԠSGN-Z? MPKYS-GϠ SBUNϻSԠUN SPà DAYPŬɠGԠYPŠƠ MANASZASSYPŠZ? MPYP0YSGϠϠYPŠZϠUN NASZAYPŻ NASZASSҠ MPYYSGϠϠANDMASSPSN SPà MBSSBNBYPŠ3ҠABVŠ-AD MPSàSPAŠ-YSGϠDϠ. SPà YPŠ3ANDABVŠBAKSPAŠUN SPà BSàDABPԬɠGԠUNԠPSN NASZASԠ? MPBS3NϻGϠBAKSPA DAGɠYSGԠHŠAD AҬŬAҠAGANDAҠHŠƠB AA"̠HN SAGɠSŠHŠAG SZASԠS? MPBS5YSUNԠASAD BS3BNϻBAKSPAŠ DADBD SB$KPHH MPԠSKPUN DABPԬɠGԠHŠDNGH SANSAVŠ MABAKSPAŠ SABH DADBN SB$KPHH MPԠSKPUN DABPԬɠGԠN PANNSMAH? BS5ASSYSSKP MP5NϻҠ-5 ADAìɠDMNԠH SAìɠDUN SZUSPBAKSPAŠUNԠDN? MPBS3NϻDϠHŠNԠN MPK ADSPAŠYPŠZϠAND3ANDABVŠS SàSBUSԠUN SñSBADƠAD DƠAԠA DƠDBɠD DƠҬɠ DƠDUMA̠DUMMY DƠ.NŠDBU DƠN AԠSSAƠ MPԠ DBN SSB MP SZU MPSñ MP SPà N3Dà-3 SPà YPŠZϠSPAŠUN SPà YP0MBSSBNBƠADSPA MPSàGϠϠADUN SPà DAN3PSԠҠ DBSPAŬɠBAKSPAŠG SSBSSGA̠D MPԠBAKSPAŠNԠGA- SPà DAUɠGԠAND ANDBSAŠU ADAB00ADDBAKSPAŠUNN SANNDSԠҠA ASԠSԠƠDAG SP0SAPNNPN SBàA̠ DƠN DƠ.3BAK DƠNNDSPA NANDB00MASKƠB BDMN ADBìɠHŠDUN /SBì BSԠBϠADSPAŠ SZASSƠƠSԠҠS MP+3SŠSKPϠUNԠHŠD SZPNSKPƠƠNSԠD MPSàSŠGϠADSPA SZUDN? MPSP0NϻDϠNԠN MPKYSGϠ SPà N5Dà-5 B00Ԡ00 BԠ SPà 5DAN5NGHMSMAH MPԠSNDҠD SPà YPŠANDϠSPAŠUN HŠNנDN.SSԠNY NϠƠHKSDN NGAVŠҠZϠD NUMBSAŠPAD HANDSƠҠSN YDAABàGԠHŠABSUŠDN. ŬSZAƠZ SSAҠNGAV AŬNASԠϠN SAìɠSԠNנDN. SZƠUDϠNŠAKŠSƠ SPà KASSGD ؠDANƯSƠ SPà ԠDBDZҠ-S SBNPPNA SBҠADDSSS SAҬɠSԠҠAND MPPSNԬɠUN SPà NDà- PSԠSAG SPà .Dà .3Dà3 SPà AU0 BU ԠUB SPà NDU SPà ND ASMBҬ̬ NAMAPSN NԠAPSN Ԡ$KPN$ìG$.NҬ SPà HŠAPSNUNŠDSABSUŠŠPSNNG ƠŠS ANGSUN: A̠APSN(DBҬìSƩ SPà H: DBSHŠSDAAN̠BK ҠSANҠUNAG.PSSBŠS 0NϠ -DSàDN -5SPANGBYNDNDƠDNDN -9AMPԠϠPSNYPŠZϠ -0NԠNUGHPAAMS -DBNԠPN -SƠŠà< àHŠDNUMBҠϠBŠADN S(UDҠ3ABVŠNYH AVŠBKƠHŠNԠD ƠHŠBKSԠƠHŠN D(UDҠYPŠ3AND ABVŠNY SPà5 PŠNSANԠSAG SPà YPŠNP .Dà .Dà NDà- N3Dà-3 àUYP SPà5 DBNP ҠNP àNP SNP ƠNP SPà APSNNPNYPN SB.NҠHPAM DƠDBADDSSS SPà BNBSԠHŠAD SBG$AG DBDBMPU ADB.YP SBYPŠAND ADB.PNAGADDSSS DANS DBBɠDB PBԠPN? NASSYSSKP MPԠNϻ NASԠA9 DBYPŬɠSŠYP SZBSSZ? MPԠYS ADBN3ƠYPŠҠ DAàSԠҠDPAM SSBSSSŠS DAƠҠU̠PAM SZASSS MPұ0NԠNUGHPAMS- SSBƠҠ MPSԠGϠSԠDN. SPà SBƠUSŠƠ DƠԠG DƠDBɠUN DƠҬɠAV DƠàS DƠSADDSS ԠBA DADBSKP SB$KP MPԠSԠUPN$ DBSGԠUNԠBK MBNBSUBAԠM ADBSɠDSDBK SZBSSƠAADYH MPSԠSKPPSNA SBN3U$àPSNHN$ MPԠҠ- SԠDBDBGԠDB ADB.MPUŠBUҠPNҠADDSS SBASAV ADBƬɠMPUŠDSDD ADB.NNS SBAɠANDS ADA.SPϠHŠDADDSS DBìɠSԠDNUMB SZBZ SSBҠNG MPұԠ SBAɠSԠDNUMB ASSK- ұ0DAN0 ԠBA SBàPAM SBƠADDSSSҠNԠM SAҬɠSԠҠD MPAPSNɠUN. SPà ұDANSNDƠ MP SPà PSԠNSANS SPà NDà- .Dà .Dà N0Dà-0 SNP SPà AU0 BU ԠUB SPà NDU SPà ND ASMBҬ̬ NAMNԬ NԠN Ԡ.NҬ HSSHŠYPŠZϠN̠UNŠ HŠŠŠMANAGMNԠPAKAG. ASANDADŠN̠USԠSSSUD ϠHŠDVŠVAHŠàƠH PBSPNϠAYPŠZϠ. ANGSUN A̠N(DBҬNN H: DBSHŠDAAN̠BK HŠ. ҠSHŠANҠUND S. PSSBŠSA: 0NϠS -DBNԠPN -ƠSNSD 0NԠAYPŠZϠŠ(ҽYPũ NSN̠D-HŠDV USMUGDNϠHŠ 6BSƠHSD NSN̠DϠ-PNA ZϠSUSDƠNԠSPD NUNA BDVŠSAUS SPà3 PŠNSANԠAA .Ԡ .3Ԡ3 YPŠNP .Ԡ SPà3 DBDƠZϠPAAM ҠDƠZϠADDSS NDƠZϠAA NDƠZ SPà NԠNPNYPN SB.NҠHPAAMS DƠDB DBDBGԠDB ADB.ADDSS SBYPŠƠYP ADB.AND DBBɠPNAG PBԠPN? MPKYSNNU DANNϻSNDNԠPN ԠSAҬɠϠA DBDZϠS ؠPNY SB-+DBADDSS BAҠDUMMY SBZϠZ DBSAԠSAUSϠBAND MPNԬɠUN SPà MDNSANԠAA SPà NDà- DZϠDƠZ ZϠNP SAԠNP SPà BԠ SPà3 KDAYPŬɠGԠŠYP SZAZ? MPԠNϻԠ:YPŠNA SPà SZYPŠYSSPϠDHU DAYPŬɠGԠU ANDBANDSAŠHN SABSAV DANɠGԠHŠUNN ANDBMAKŠSUŠHŠנNDSZ ҠBPUԠHMGH SANSԠҠA SBàA̠à DƠND DƠ.3H DƠNN DƠNɠUNN NSASAԠSAVŠSAUSҠUN ANDB00MASKƠB SZAƠ? DANYSSNDƠNDN MPԠGϻ SPà3 PSԠNSANԠAA SPà BԠ00 B00Ԡ00 NDà- SPà AU0 BU ԠUB SPà NDU SPà ND ASMBҬ̬ NAMƬ NԠ EԠP.PAS.N SPà ƠUNSHŠUNԠSAUSƠA ŠŠϠHŠA. SPà HŠANANGSUNŠS: SPà A̠(DBҬìSƬSìUYé SPà נHŠҠ: SPà DBSHŠDAAN̠BKҠHŠ. ҠSHŠҠDŠUN. PSSBŠDSA: 0-NϠ --DBNԠPN -0-NԠNUGHPAAMS àSHŠDNUMBҠƠHŠNԠD. SSHŠAVŠSҠƠHŠNԠD. ƠSHŠSԠNHŠSҠƠHŠNԠD. SàSHŠN.ƠSSNHŠŠ(ҠNԩ. USHŠ'SGA̠UN. YSHŠ'SYP. àSHŠDSZ. SPà A̠PAAMSAҠàAŠPNA. SKP DBNP ҠDƠDM àDƠDM SDƠDM ƠDƠDM SàDƠDM UDƠDM YDƠDM àDƠDM ƠNPNY SB.NҠG DDBDƠDBPAAMSADDSSS DAN0NԠNUGH DBàPAM PBDDMS MPԠNԠNUGH- DADBSԠAϠGԠDB BŠSԠϠG BŠAUA̠DS SBP.PASA̠ϠPASS N6Dà-6DB UNPPAAMS ADNP YPNP KNP SàNP SàNP SZŠNP UNԠNP SïԠNP PSNP KNP SàNP BUPԠNP MPNP àNP NϠNP DBPSS DAN PBԠPN? MPKYSUMP ԠSAҬɠNϻSԠԠD DBN9SԠUP SBUNԠAND DBDDBS SBADDUMMY _bDBDDMPAAM SBADɠADDSSS SZAD SZUNԠN MP-3A MPƬɠ SPà3 KDBàGԠAND SBìɠSԠDN. DBSàS SBSìɠHŠŠSZŠNSS DAYPGԠHŠYP MANASZASSSԠNԠANDSԠҠZ MPYPSԠZϠSϠUMP ADA.ƠHŠҠGA SSAHN MPNAUMPNԠANDMASS AMPUŠHŠS ADAàANDBK MPYSZŠ SAMPYP ANDBNŠAND SAƬɠ ҠMPS ASҠN MPSSGϠSŠ NADADBMPU MANAUN ADABUPԠBUҠS ADAN6ADUSԠҠBUҠADDSS SAƬɠUNS DASàGԠAND MPYNϠMPUŠNԠS SAMPANDSAV DAKMPUŠAV MANAS ADAKK-K MPYSïԠ(K-KSïAK DBS MBNB ADAB(K-KS-S ADASà(K-KS-S+S ADAMPADDSSNPVUSNS ASDVDŠBY SSSASɠANDPASSϠA YPSԠDBYPGԠANDS SBYɠYP DAUGԠU(DSàũ SZBSSSԠADSà? DAKNϻUSŠYPŠ0U ANDBMASK SAUɠANDS DASZŠGԠHŠD SAìɠSZŠANDSԠ ANϠS MPԠUN SPà BԠ .Dà N0Dà-0 NDà- N9Dà-9 BԠ DDMDƠ+ DMNP AU0 BU ԠUB@ MAX ALLOWED LDA VOLT LDB VOLT+1 JSB .FMP MFACT NOP PRESET WITH ADRS OF 200/2000 JSB IFIX INTEGERIZE LDB VSIGN SSB NEGATIVE VOLTAGE ? CMA,INA YES- TAKE 2'S COMPLEMENT STA WORD1 SET UP OUTPUT WORD1 * * PROCESS CURRENT LIMIT * DLD ACL,I JSB .FDV DIVFA NOP STUFFED WITH ADRS OF 1/5/15 JSB IFIX INTEGERIZE SSA JMP ERR1 CURRENT LIMIT IS NEGATIVE CMA,INA STA SAVEA CLA LDB CLADD INITIALIZE POINTER TO STB TEMPA CURRENT LIMIT TABLE ENTRIES CLTBL LDB SAVEA GET NEXT CL TABLE VALUE ADB TEMPA,I SSB,RSS JMP CLFND CL FOUND INA ISZ TEMPA ISZ CLISZ PRESET TO -8 OR -6 JMP CLTBL JMP ERR1 CL > ALLOWABLE MAX * * FORMAT OUTPUT WORD1+1 * CLFND ALF,RAR LINE UP CL BITS IOR WORD1+1 BRING IN RESOLUTION BIT LDB M9 ADB AUNIT,I VERIFY VALIDITY OF UNIT # SSB,RSS JMP ERR1 UNIT # > 8 ADB .8 SSB JMP ERR1 UNIT # < 1 ADA 1 FORMAT STA WORD1+1 DVS ADDRESS SKP * * OUTPUT DATA BY CALLING DVR70 THRU THE REAL TIME EXECUTIVE * JSB EXEC CALL RTE DEF *+5 DEF .2 WRITE REQUEST DEF LUDVS LU OF DVS SUBSYSTEM DEF WORD1 OUTPUT BUFFER DEF .2 BUFFER LENGTH JMP DCVSH,I *** NORMAL EXIT *** SKP * * ENTRϏY TO SET POWER SUPPLY TO LOW RANGE * * TABLE OF CALL PARAMETER ADDRESSES BUNIT BSS 1 UNIT # (INTEGER) BV BSS 1 VOLTAGE(FL.PT.) BCL BSS 1 CURRENT LIMIT(FT.PT.) * DCVSL NOP ENTRY PT. FOR LOW V-RANGE JSB .ENTR FILL PARAMETER ADRS TABLE DEF BUNIT JSB GTABL GET FIRST ADDRESS OF DVS TABLE * * MOVE PRMTR ADRS & RETURN ADRS TO TABLE FOR DCVSH * LDA BUNIT STA AUNIT LDA BV STA AV LDA BCL STA ACL LDA DCVSL STA DCVSH * * CHOOSE HIGH V RESOLUTION & LOW V LIMIT * LDA B100 STA WORD1+1 LDB HRMFA SELECT V*2000 LDA A16 VOLTAGE LIMIT = 16.383 V JMP SLENT GO & EXECUTE DCVSH CODE SKP * * ERROR PROCESSING * ERR1 JSB ERROR PRINT ERROR MESSAGE ON SYS. TTY DEF *+5 DEF ONE DEF A479E DEF #ERRU DEF DCVSH JMP DCVSH,I * * GET FIRST ADDRESS OF DVS TABLE (CHAIN THROUGH INDIRECTS) * GTABL NOP CLA STA ERRCD CLEAR ERROR FLAG! LDA CTABL SSA,RSS JMP *+4 AND M7777 LDA 0,I JMP *-4 CMA,INA NOTE THAT FIRST IS ACTUALLY THE ADDRESS CMA BEFORE THE START OF THE TABLE. STA FIRST JMP GTABL,I M7777 OCT 77777 SKP * * ENTRY TO SET ALL DVS'S TO ZERO, * PREVENT INTERRUPTS & ERASE CURRENT LATCH HISTORY * DCVCL NOP * JSB .ENTR DEF DCVCL JSB GTABL GET FIRST ADDRESS OF DVS TABLE * SET ALL DVS'S IN SUBSYSTEM TO 0 VOLTS LDB B77 WILL BE BUMPED TO B100 FOR 1ST DVS STB ZERO+1 LDA FIRST STA WORD1 NEXT ISZ WORD1 ADDRESS OF DVS TYPE LDB WORD1,I SZB,RSS IS THIS THE LAST DVS JMP CLEAR ISZ ZERO+1 INCREMENT DVS SUBCHANNEL ADDRESS LDA ZERO+1 IS THIS CPA B110 THE 9TH DVS? JMP CLEAR YZYES * PROGRAM DVS'S TO 0 VOLTS JSB EXEC DEF *+5 DEF .2 DEF LUDVS DEF ZERO DEF .2 JMP NEXT * CLEAR STATUS WORDS & PREVENT INTERRUPTS FROM DVS CLEAR JSB EXEC DEF *+3 DEF .3 CONTROL REQUEST DEF LUDVS JMP DCVCL,I RETURN SKP * * ENTRY TO RETURN DVS STATUS INFORMATION * * TABLE OF RETURNED CALL PARAMETER ADDRESSES IAV BSS 1 ISTAT BSS 1 LATCH BSS 1 HSTRY BSS 1 * DCVRS NOP JSB .ENTR DEF IAV CLA STA ERRCD CLEAR ERROR FLAG * GET STATUS FROM WORD 5 OF DVS EQT JSB EXEC DEF *+4 DEF .13 STATUS REQUEST DEF LUDVS LU OF DVS SUBSYSTEM DEF ISTAT,I * GET AVAILABILITY BITS INTO LOWER 2 BITS OF IAV LDA ISTAT,I GET BITS 14 & 15 RAL,RAL AND .3 STA IAV,I SZA IF DVS SYSTEM IS NOT READY, RETURN JMP DCVRS,I WITH ONLY AVAILABILITY STATUS * GET HARDWARE STATUS WORD & HISTORY FROM DVS CARD JSB EXEC DEF *+5 DEF ONE READ CALL DEF LUDVS LU OF DVS SUBSYSTEM DEF STAT READ BUFFER DEF .2 BUFFER LENGTH * GET STATUS FROM WORD 5 OF DVS EQT JSB EXEC DEF *+4 DEF .13 STATUS REQUEST DEF LUDVS LU OF DVS SUBSYSTEM DEF ISTAT,I * RETURN STATUS LDA ISTAT,I AND .3 STA ISTAT,I LDA STAT AND B377 MASK OFF LOWER 8 BITS STA LATCH,I RETURN LATCH STATUS LDA STAT+1 AND B377 MASK OFF LOWER 8 BITS STA HSTRY,I RETURN LATCH HISTORY JMP DCVRS,I RETURN!! SKP * * CONSTANTS * .16 DEC 16.383502 VOLTAGE LIMIT TABLE .50 DEC 50.00001,100.00001 .1 DEC 1.,5.,15.,12.5 *** THE FOLLOWING CONSTANTS MUST NOT BE REARRANGED * IE. DEC 20,50,70,100,200,500,700,1000 *** CLMT DEC 20 CURRENT LIMIT TABLE DEC 50 DEC 70 DEC 10*V$"0 DEC 200 DEC 500 DEC 700 DEC 1000 *** *** THE ABOVE CONSTANTS MUST NOT BE REARRANGED * IE. DEC 20,50,70,100,200,500,700,1000 * CLADD DEF CLMT ADDR OF FIRST ENTRY IN CURR TBL HRMFA DEF HRMF ADDRESS OF HGH RES MULT FACT HRMF DEC 2000.002 HGH RES MULT FACT LRMFA DEF LRMF ADDRESS OF LOW RES MULT FACT LRMF DEC 200. LOW RES MULT FACT A.1 DEF .1 A50 DEF .50 A16 DEF .16 ONE DEC 1 .2 DEC 2 .3 DEC 3 .4 DEC 4 .6 DEC 6 .8 DEC 8 .13 DEC 13 B77 OCT 77 B100 OCT 100 B110 OCT 110 B377 OCT 377 LOWER 8 BITS M8 DEC -8 M9 DEC -9 .6128 DEC 6128 .6129 DEC 6129 .6131 DEC 6131 .6933 DEC 6933 ZERO DEC 0.0 WORD1 BSS 2 OUTPUT BUFFER * * EQUATED STORAGE * SAVEA EQU MFACT TEMPA EQU DIVFA VSIGN EQU BUNIT CLISZ EQU DCVCL ISZ FOR CURRENT LIMIT TABLE VOLT EQU BV NCNT EQU ISTAT LUDVS EQU #DCVU STAT EQU WORD1 * DEFINE ERROR PRINTOUT MNEMONIC A479E DEC 3 ASC 2,DCV FIRST BSS 1 CTABL DEF #DCVT * * END OF DRIVER LINK * END $ x 29100-18002 A S 0122 RTE-B DVS VERIF TEST  (6130 ETC)             H0101 o100 REM 110 REM DVS SUBSYSTEM RTE-B VERIFICATION TEST 120 REM LISTING: A-29100-18002-2 125 REM ERS: A-29100-18002-1 130 REM SOURCE: 29100-18002 135 REM 140 REM W.M.PARRISH 7/74 145 REM 148 PRINT 150 PRINT "DVS SUBSYSTEM VERIFICATION" 152 PRINT 200 REM CHECK S/S STATUS 205 PRINT "**CHECKING DVS SUBSYSTEM FOR AVAILABILITY**" 210 DCVRS(I1,I2,I3,I4) 220 IF I1=0 THEN 300 230 PRINT "SUBSYSTEM IS NOT READY -- CODE ="I1 240 PAUSE 250 GOTO 200 300 REM CHECK CLEAR CALL 305 PRINT "SUBSYSTEM AVAILABLE" 307 PRINT 310 PRINT "**CLEARING DVS SUBSYSTEM**" 315 PRINT "A TIME-OUT ERROR MEANS AT LEAST ONE DVS NOT RESPONDING" 317 PRINT "OR TIME-OUT NOT PROPERLY SPECIFIED" 320 DCVCL 330 PRINT "DVS SYSTEM CLEARED" 340 PRINT 400 PRINT "**CHECK VOLTAGE PROGRAMMING CALLS**" 410 PRINT "USE 0 FOR UNIT NUMBER TO STOP PROGRAM" 420 PRINT 430 PRINT "ENTER UNIT NUMBER, VOLTAGE (VDC) AND CURRENT LIMIT (MA)"; 440 INPUT U,V,C 450 IF U=0 THEN 800 460 IF (ABS(V)-16)>0 THEN 600 500 REM LOW RANGE 510 DCVSL(U,V,C) 520 WAIT (100) 530 DCVRS(J1,J2,J3,J4) 540 IF J2=0 THEN 430 550 GOSUB 1000 560 GOTO 430 600 REM HIGH RANGE 610 DCVSH(U,V,C) 620 GOTO 520 800 REM STATUS HISTORY CHECK 805 REM NOTE REVERSED ORDER ON CALL 810 DCVRS(J1,J2,J4,J3) 815 PRINT "LATCH HISTORY" 820 GOSUB 1020 830 PRINT "CLEARING DVS SUBSYSTEM" 840 DCVCL 850 STOP 1000 REM CHECK LATCH STATUS 1010 PRINT "AT LEAST ONE DVS LATCHED CODE=";J2 1015 PRINT "LATCH STATUS FOR DVS UNITS" 1020 GOSUB 2000 1030 FOR I=0 TO 7 1040 IBTST(J3,I,Z) 1050 PRINT Z" "; 1060 NEXT I 1070 RETURN 2000 REM DISPLAY NUMBERS OVER LATCH STATUS OR HISTORY ARRAYS 2010 FOR I=1 TO 8 2020 PRINT I" "; 2030 NEXT I 2040 PRINT 2050 RETURN 3000 END    y 29100-18004 A S 0122 RTE DEVICE SUBROUTINE  DFEXT             H0101 ASMB,R,L,C,F NAM DFEXT,7 29100-16004 REV.A * * *************************************************************** * * RELOC: 29100-16004 REV.A * ERS: 29100-16004-1 * LISTING: 29100-16004-2 * SOURCE: 29100-18004 * ************************************************************** * * * DFEXT CONTAINS DEFAULT EXTERNAL CONFIGURATION CONSTANTS FOR * RTE DEVICE SUBROUTINES. THEY ARE USED TO SATISFY * REMAINING EXTERNALS AFTER A SEARCH IS MADE OF THE * INSTRUMENT TAPE, WHICH CONTAINS USER ENTERED * CONFIGURATION CONSTANTS. * * CONTENTS: * * #ERRU----A SINGLE CONSTANT ENTRY POINTING TO THE CONTROL * CONSOLE (LU #1) AS THE DESTINATION DEVICE FOR * DEVICE SUBROUTINE ERROR MESSAGES. * * ************************************************************** * ENT #ERRU * #ERRU DEC 1 * END  z 29100-18005 A S 0122 RTE DEVICE SUBROUTINE  ERROR             H0101 ASMB,R,L,C,F * ******************************************************* * * RELOC. TAPE: 29100-16005 * ERS: 29100-16005-1 * LISTING: 29100-16005-2 * SOURCE TAPE: 29100-18005 REV A * ******************************************************* * NAM ERROR,7 29100-16005 REV.A * ENT ERROR,ERRCD,INERR,SERR EXT EXEC,.DIV,.ENTR * NUM NOP MNEM NOP LUN NOP ADDR NOP * ERROR NOP JSB .ENTR DEF NUM * LDA LUN,I SAVE LUN OF DESTINATION DEVICE STA DEVIC * LDA MPSA SET MP START STA MP * LDB MNEM,I GET MNEM LENGTH IN CHARS INB ADD CHAR FOR ROUNDING BRS MAKE IT WORDS CMB,INB MAKE NEGATIVE COPY ISZ MNEM MOVE POINTER TO TEXT LDA MNEM,I LOAD ASCII WORD JSB MPSTR STORE INTO OUTPUT BUFFER INB,SZB DONE ? JMP COPY NO. * LDB PLUS SET SIGN OF ERROR STB MP,I LDB MINUS GET POSSIBLE - SIGN LDA NUM,I GET ERROR NUMBER STA ERRCD AND SAVE IT SSA STB MP,I STORE - SIGN SSA CMA,INA MAKE ERROR NUMBER POSITIVE STA NUM SAVE ERROR NUMBER * ISZ MP MOVE POINTER * LDA BLANK LOAD 2 BLANKS REP 3 JSB MPSTR STORE BLANKS CCA ADA MP SAVE DECREMENTED POINTER STA FAKE * LDA NUM LOAD ERROR NUMBER LOOP CLB SET UP FOR DIVIDE JSB .DIV DEF D10 STA NUM SAVE RESULT SWP PUT B INTO A IOR BLDIG MAKE ASCII STA MP,I SAVE * CLB LDA NUM JSB .DIV DEF D10 STA NUM SAVE RESULT SWP PUT B INTO A ALF,ALF IOR DIGIT IOR MP,I STA FAKE,I STORE 2 ASCII NUMBERS CCA ADA FAKE  DECREMENT POINTER STA FAKE * LDA NUM GET RESULT SZA DONE ? JMP LOOP NO. * LDA IN GET INSERT JSB MPSTR STORE IN OUTPUT BUFFER LDA IN+1 JSB MPSTR * LDB XEQT GET CURRENT ID SEGMENT ADDRESS ADB D12 MOVE TO NAME AREA LDA B,I GET START OF NAME JSB MPSTR INB LDA B,I GET MIDDLE JSB MPSTR STORE INB LDA B,I GET END OF NAME AND H377 MASK OFF LOW CHARACTER IOR B40 ADD A BLANK JSB MPSTR STORE * LDA AT LOAD "AT" JSB MPSTR STORE INTO OUTPUT BUFFER * LDA ADDR,I GET CALL ADDRESS JSB INDCK REMOVE INDIRECTS STA ADDR SAVE * ALF POSITION AND B7 MASK IOR BLDIG MAKE IT A BLANK AND A DIGIT JSB MPSTR STORE * LDB ADDR GET NUMBER BLF POSITION JSB FAKE * LDB ADDR GET NUMBER AGAIN BLF,BLF RBL,RBL POSITION JSB FAKE * LDA MPA LOAD START OF BUFFER CMA,INA NEGATE ADA MP GET BUFFER LENGTH STA FAKE SAVE FOR WRITE * JSB EXEC WRITE BUFFER DEF *+5 DEF WCODE DEF DEVIC MPA DEF ERR DEF FAKE JMP ERROR,I RETURN * MPSTR NOP ROUTINE TO STORE A REG INTO BUFFER STA MP,I ISZ MP JMP MPSTR,I RETURN * FAKE NOP ROUTINE TO CONVERT 6 HIGH BITS IN B REG * TO DIGITS CLA RRL 3 LONG SHIFT 3 (EAU) ALF,RAL RRL 3 IOR DIGIT JSB MPSTR STORE INTO BUFFER JMP FAKE,I RETURN * * ENTRY POINT TO SET ERRCD TO DESIRED VALUE * PTR NOP * SERR NOP SET ERRCD TO PASSED VALUE JSB .ENTR DEF H PTR LDA PTR,I STA ERRCD JMP SERR,I * *ENTRY POINT TO FETCH ERRCD * VALU NOP * INERR NOP JSB .ENTR DEF VALU LDA ERRCD STA VALU,I JMP INERR,I RETURN IN THE A REGISTER * * INDCK NOP RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I * WCODE DEC 2 ERRCD NOP DEVIC BSS 1 IN ASC 2, IN LNGTH NOP XEQT EQU 1717B D10 DEC 10 D12 DEC 12 DIGIT OCT 30060 BLDIG OCT 20060 PLUS ASC 1, + MINUS ASC 1, - ERR ASC 3,ERROR BSS 33 MPSA DEF ERR+3 MP NOP AT ASC 1,AT * B7 OCT 7 H377 OCT 177400 B EQU 1 A EQU 0 B40 OCT 40 BLANK BLANK ASC 1, * END  { 29100-18006 A S 0122 RTE DEVICE SUBROUTINE  XERLU             H0101  ASMB,R,L,C,F * ************************************************************** * * RELOC. TAPE: 29100-16006 * ERS: 29100-16006-1 * LISTING: 29100-16006-2 * SOURCE TAPE: 29100-18006 * ************************************************************** * NAM XERLU,7 29100-16006 REV.A * ENT XERLU EXT #ERRU,.ENTR * NUM NOP * XERLU NOP JSB .ENTR RECEIVE PARAMETER ADDRESS DEF NUM LDA #ERRU FETCH CURRENT LU LDB NUM,I FETCH NEW LU SZB NEW LU SENT? (LU # 0) STB #ERRU YES. SAVE STA NUM,I REPORT OLD LU JMP XERLU,I RETURN END ?q | 29100-18007 A S 0122 RTE DEVICE SUBROUTINE  BCD6             H0101 ASMB,R,L,C,B HED RTE-BASIC FLOATING POINT TO BCD UTILITY NAM BCD6,7 29100-16007 REV.A **************************************** * RTE-BASIC FLOATING POINT TO BCD UTILITY * 29100-16007 * REVISION A **************************************** * EXT. REF. SPEC. A-29100-16007-1 * LISTING A-29100-16007-2 * SOURCE TAPE 29100-18007 * RELOC. BIN. TAPE 29100-16007 * ENT BCD6 * EXT .IENT,.FSB,.ENTR,.DLD,.DST * * ****FLOATING POINT TO BCD CONVERSION**** * * FORTRAN CALL: CALL BCD6(VALUE,IBCD(1)) * ANSWER IN IBCD(1) AND IBCD(2) * * * ASSEMBLY LANGUAGE CALL: EXT BCD6 * . * . * JSB BCD6 * DEF *+3 * DEF DATA * DEF IBCD * * IBCD BSS 2 * (V3.1) * THIS IS NOT A GOOD ALGORITHM, BECAUSE OF ROUNDING * IN THE FLOATING POINT OPERATIONS. * VALUE BSS 1 IBCD BSS 1 BCD6 NOP JSB .ENTR DEF VALUE JSB .DLD DEF VALUE,I LP1 STA .T1. STB .T1.+1 JSB .FSB DEF .100K SUBTRACT 100000.0 SSA RESULT POS.? JMP *+3 NO. ISZ TCNTA YES. JMP LP1 DO AGAIN LDA TCNTA POSITION ALF FIRST STA TCNTA DIGIT. LDA .T1. RECOVER NO. LDB .T1.+1 LP2 STA .T1. STB .T1.+1 JSB .FSB DEF .10K SUBTRACT 10000.0 SSA RESULT POS.? JMP *+3 ISZ TCNTA JMP LP2 LDA .T1. LDB .T1.+1 JSB .IENT CONVERT REMAINING NOP LDB 0 LDA DPTR STA CONV LDA TCNTA STA .T1.+1 CLA STA TCNTA BCL STB .T1. SAVE CONVERSION SO Fm  AR ADB CONV,I SUBTRACT 10^N SSB JMP BCM NEGATIVE, DONE ENOUGH INA POSITIVE, JMP BCL DO MORE * BCM ALF POSITION DIGIT ISZ CONV CLB CPB CONV,I DONE? JMP BCX YES. LDB .T1. RECOVER VALUE JMP BCL CONVERT SOME MORE * BCX ADA .T1. LDB .T1.+1 GET MSD'S JSB .DST DEF IBCD,I STORE RESULT JMP BCD6,I ***RETURN*** * .100K DEC 1.0E+5 .10K DEC 1.0E+4 DPTR DEF *+1 DEC -1000,-100,-10,0 CONV BSS 1 .T1. BSS 2 TCNTA OCT 0 * END 4  } 29100-80001 A S 0122 RFMAP              H0101 ASMBҬB HDMAP---MAPMŠŠPAMS NAMMAP NԠMAPSPNSP Ԡ.NҬ$BҬ$B NASKU9NUMBҠƠASKS MB̠U503MMUNANSBUҠNGH MAP .AADϬ0-5- SSDƠNŠSAUS SSDƠPG.SAUS SS3DƠANS.G ASKDƠASK NNDƠPAM.BUҠNGH NAMDƠŠNAM ̠DƠŠ YPDƠŠYP SàDƠŠSUY SZDƠŠSZ NGDƠDSZ SPAŠDƠUNUSD SDDƠSAND NDƠPVAŠN MNDƠMMNN MAPNP SB.NҠHPAMS DƠSS DASSɠHNŠSAUS SZAK??? MPұNϬANSMSSN DANNɠHPAMBUҠNGH PASS3ɠMAHANSMSSNG??? MPMPYSPD ұANANϬANSMSSN MPMAPɠDD MPDAASKɠHASK SSANSUŠASK0 MPҲ MANANSUŠASK DƠ DƠYP DƠS DƠSZ DƠNG DƠSPA DƠSD DƠN DƠMN SASSDҠSAUS SZAANYS? MPԠYSD SBPNPNUSD DƠ+ DƠDBDAAN̠BK DƠSASҠSAUS DƠNAMŠNAM DƠ.0USŠDNDYPŬUS DƠSàSUYD DƠNSANPVAŠN SSASSANYS? MPSK.NϬNNU PAM6Ҡ-6NԠUND??? MPSK. MPSKҠNϬPԠҠ SK.SBPNYSYMMNN DƠ+ DƠDB DƠSAS DƠNAM DƠ.0 DƠS DƠMN SSAS? MPSKҠYSϠBAD SK.DADBNSUŠŠS PA.9DAAYP MPSK.3YSK DAM6NϬSSU SASASGA̠YPŠD MPSԠANUPU SK.3SBPSNԠPSN DƠ+5D DƠDB DƠSASҠSAUS DƠ.D DƠ.ABSUŠD SSAS?? MPSԠYSD SBADƠADүנPNS DƠ+6 DƠDBDAAN̠BU DƠSASҠSAUS DƠ̠USŠŠBU DƠ.DS DƠNGHAUA̠NGH SSAANYS? MPSԠYSANUPU DANGHNϬAD? PA. MPSK.NϬK DAM5YSSSUŠ SASASDŠ-5 MPSԠ SK.DA.SԠUPBU SANNANS.NG#IH SBSPנSNDN DƠ+3ϠMŠSAN DƠNN DƠSS AAҠSAUSD SASAS DASSHKNŠSAUS DBSS3ANSMSSNG PB.DSANSMD?? SZANŠK?? SZSASNϬDSAUS SԠSBSŠSŠ DƠ+ DƠDB DBSASHKҠSAUS SBSS SZBADҠ?? MPԠYSDԠ SSASSSŠҠ?? ANϬҠDŽ0 SKҠSASSD ԠSBSPŠNYSPƠMPN DƠ+ DƠSS SBàMNAŠASK DƠ+ DƠ.6 HԠ3B SAGŠNSANS .0Dà0 .Dà .Dà .6Dà6 .Dà .9Dà9 .Dà M5Dà-5 M6Dà-6 M6Dà-6 DBUMN+5 NGHBSS SASBSS SSUMN+3NŠSAUS SSUMN+PGAMSAUS SS3UMN+5ANSMSSNG ASKUMN+6ASK NNUMN+NԠPAMBUҠNGH NAMUMN+ŠNAM ̠UMN+Š YPUMN+3ŠYP SàUMN+ŠSUY SZUMN+5ŠSZ NGUMN+6DNGH SPAŠUMN+UNUSD SDUMN+5SAND NUMN+53SANPVAŠN MNUMN+5SANMMNN DBUMN+55DAAN̠BK MNUMN+99MMUN.BU.NGH. MBƠUMN+00MMUN.BU. SZŠU NDASK ԭ  29100-80009 A S 0122 TSK8$ CLOSE              H0101 ԂASMBҬB HDASK:SŠDAAŠNGUAN SK$:SŠDAA:SAN$ SAԠNGUAN HANGŠA̠UANSƠ$ϠHŠAPPPA SANDN.HSŠMHŠNG: ABìDŠҠ. NAMSK$0DNŠPGAMNAM ԠSP$ASSAŠNA SPŠUSP$AN DNŠMMUNANɯϠBUҠNGHDS. MNMUMSZŽ53.NϠMAMUMSDND.HANG A̠UANSƠϠHŠDSDVAU. MMNBKSMUSԠBŠMANANDҠAH MŠSANNHŠSYSM.ABKS MAYBŠMVD.HUSƠNϠSANSA DNDHNHŠDSBUVŠSYSMNY HŠSԠϠMMNBKSMUSԠBŠPSVD. MB̠UDNŠBUҠSZ MSNA(00SNA.( MSNB(00SNB.( MSN(00SN.( MSND(00SND.( MSN(00SN.( MSN(00SN.( SԠMMNBKҠHSASSMBY.HANGŠA ϠAPPPAŠSANDN MNUSN$ NDNGUAN UN̠SUPPSSSNG HDASK:SŠDAA DϠNԠHANGŠHŠNG ԠMAP ԠPNƬPSNԬS Ԡ ASK:SŠDAA .AADϬ0-- ASKSBMAPMAPPAMSҠSŠASK DƠ+6 DƠSS DƠSS DƠSS3 DƠASK DƠNN DƠNAM DƠ DƠYP DƠS DƠSZ {DƠNG DƠSPA DƠSD DƠN DƠMN SASSDҠSAUS SZAANYS? MPԠYSPԠ SBPNPNUSD DƠ+ DƠDBDAAN̠BK DƠSASҠSAUS DƠNAMŠNAM DƠ.USUPDAAMD DƠSàSUYD DƠNSANPVAŠN SSASSANYS? MPSK.NϬNNU PAM6Ҡ-6NԠUND?? MPSK. MPSKҠNϬDҠ SK.SBPNYSYMMNN DƠ+ DƠDB DƠSAS DƠNAM DƠ. DƠS DƠMN SSAS? MPSKҠYSϠBAD SK.DADBNSUŠŠS PA.9DAAYP MPSK.3YSK DAM6NϬSSU SASASGA̠YPŠD MPSԠANUPU SK.3SBPSNԠPSNϠD DƠ+5 DƠDB DƠSASҠSAUS DƠ.D DƠ.ABSDPS. SSAANYS?? MPSԠYSAB SBƠŠүנPNS DƠ+5 DƠDBDAAN̠BK DƠSASҠSAUS DƠ̠үנPҠBU. DƠ.DS SSAANYS? MPSԠYSD ANϬAҠҠSAUS SASAS SԠSBSŠSŠ DƠ+ DƠDB DBSASHKҠSAUS SBSS SZBADҠ?? MPԠYSDԠ SSASŠҠ?? SKҠSASSD ԠSBSPŠNYSPƠMP N DƠ+ DƠSS SBàMNAŠASK DƠ+ DƠ.6 HԠ3B SAGŠNSANS .Dà .6Dà6 .Dà .9Dà9 M6Dà-6 M6Dà-6 SASBSS DBUMN+5 SSUMN+3NŠSAUS SSUMN+PGAMSAUS SS3UMN+5ANSMSSNG ASKUMN+6ASK NNUMN+NԠPAMBUҠNGH NAMUMN+ŠNAM ̠UMN+Š YPUMN+3ŠYP SàUMN+ŠSUY SZUMN+5ŠSZ NGUMN+6DNGH SPAŠUMN+UNUSD SDUMN+5SAND NUMN+53SANPVAŠN MNUMN+5SANMMNN DBUMN+55DAAN̠BK MNUMN+99MMUN.BU.NGH. MBƠUMN+00MMUN.BU. SZŠU NDASK   29100-80010 A S 0122 TSK9$ DREAD/DRITE              H0101 3ASMBҬB HDASK9:DADDŠDAANGUAN SK9$:DAD.DŠDAA:SAN$ SAԠNGUAN HANGŠA̠UANSƠ$ϠHŠAPPPA SANDN.HSŠMHŠNG: ABìDŠҠ. NAMSK9$0DNŠPGAMNAM ԠSP$ASSAŠNA SPŠUSP$AN ԠSP$ASSAŠNA SPҠUSP$AN ԠSP$ASSAŠNA SPנUSP$AN DNŠMMUNANɯϠBUҠNGHDS. MNMUMSZŽ53.NϠMAMUMSDND.HANG A̠UANSƠϠHŠDSDVAU. MMNBKSMUSԠBŠMANANDҠAH MŠSANNHŠSYSM.ABKS MAYBŠMVD.HUSƠNϠSANSA DNDHNHŠDSBUVŠSYSMNY HŠSԠϠMMNBKSMUSԠBŠPSVD. MB̠UDNŠBUҠSZ MSNA(00SNA.( MSNB(00SNB.( MSN(00SN.( MSND(00SND.( MSN(00SN.( MSN(00SN.( SԠMMNBKҠHSASSMBY.HANGŠA ϠAPPPAŠSANDN MNUSN$ NDNGUAN UN̠SUPPSSSNG HDASK9:DADDŠDAA DϠNԠHANGŠHŠNG ԠMAP ԠPNSŬADƬ Ԡ ASK9:DADDŠDAA .AADϬ-3- ASK9SBMAPMAPPAMSҠSŠASK DƠ+6 DƠSS DƠSS DƠSS3 DƠASK DƠNN DƠNAM DƠ DƠYP DƠS DƠSZ DƠNG DƠSPA DƠSD DƠN DƠMN SASSDҠSAUS SZAANYS? MPԠYSPԠ SBPNPNUSD DƠ+ DƠDBDAAN̠BK DƠSASҠSAUS DƠNAMŠNAM DƠ.ŠYPŠASS DƠSàSUYD DƠNSANPVAŠN SSASSANYS? MPSK.NϬNNU PAM6Ҡ-6NԠUND?? MPSK. MPSKҠNϬDҠ SK.SBPNYSYMMNN DƠ+ DƠDB DƠSAS DƠNAM DƠ. DƠS DƠMN SSAS? MPSKҠYSϠBAD SK.DASZSԠUPVAABŠUN MA-VAABS- SASZ BUNNBUҠAG SBSBƠSUŠBU.N.AG SBDBƠDS.BU.N.AG SZGŠUSԠ? MPSK.3 SBGYSMANANŠAG DASSAԠŠASSA ADBϠŠDS MPSK. SK.3DAADSNϬSAԠŠASSA ADBADϠADDS SK.SAD SBS SK.5SBHHAVAAB MPSK.6NDƠDAA SBSUƠGVŠ MPSK.5NNU SK.6SBUSHUSHDS.BU SԠSBSŠSŠDAA DƠ+ DƠDB DBSSADŠS SZBDD?? MPԠYSPԠ SSASSKSŠҠ? ANϬAҠSAUS SKҠSASSYSD ԠSBSPŠNYSP DƠ+MPN DƠSS SBàMNAŠASK DƠ+ DƠ.6 HԠ3BNϠUN SKP HNP SZSZNDƠDAA?? SS MPHɠYSAKŠMPN ñSZGŠUSԠ? MPòNϬPSSAD AYSMANAN SAGŠAG SZSBƠANYDAANSUŠBU? MP3YSGϠPSS DAMBZNϬSԠUP ASASADMŠDAA SAMNNSUŠVNDUN SBSPҠDϠ DƠ+3 DƠMNBUҠADDҠNGH DƠSSSAUSBU ANA DBSSHKNŠSAUS SZBS?? MPҠYSDAB DBMBASUŠBUҽ SBSBADҠMMUNANBU DBSS3 SZBSSNSUŠDAAAS MPH BSSUŠBUҠNGH MB-VAABS- SBSBNG MP3 òSZSBƠANYDAANSUŠBU?? MP3YSGϠPSS SBADƠNϬADSMŠDAA DƠ+ DƠDBDAAN̠BK DƠSASҠSAUS DBUADƠDB6NPUԠBU DƠ.DS DƠDSANSMSSNG DƠDNԠD SSAANYS?? MPҠYSAB A DBDSNSUŠANSMSSN PB.GMAHSUSԠ?? SS MPҠNϬAB SZDKBUMPϠNԠD DADBUASUŠBUҽ ADASԠDSKɯϠBU SASBAD DASԠSUŠBUҠNGH AS ADAM65 SASBNG A SASԠAҠS 3SZSBNGNDƠBU?? MPô AYSSԠN SASBƠSUŠBUҠAG MPñGԠMŠDAA ôDASBADҬɠNϬHN SZSBADҠVAAB DBSBADҬ SZSBAD SZH MPHɠ SKP SUƠNP SAMPASAVŠUN SBMPBVAAB SUƱSZGDAAŠUSԠ?? MPSUƲ AYSMANAN SAGAG SZDBƠNԠDS.BUҠ?? MPSU3NϬPSSDAA SBADƠYSADUN DƠ+D DƠDBDAAN̠BK DƠSASҠSAUS DƠDB6DSKɯϠBU DƠ.DS6VAABS DƠDSANSMSSNG DƠDNԠD SSAS? MPҠYSAB A DBDSNSUŠANSMSSN PB.GMAHSUS SS MPҠNϬDSKɯϠ DADBUAKSԠUP ADASԠDS.BU.ADDҽ SADBADҠDSKɯϠBU+S DAS ASDS.BU.NGH ADAM65-VAABS- SADBNG AAҠS SAS MPSU3 SUƲSZDBƠNԠDS.BUҠ?? MPSU3 DAMBAYSDS.BUҽ SADBADҠMMUNANBU DAMBZDS.BU.NGH AS MA-VAABS- SADBNG SU3SZDBNGNDƠBUҠ?? MPSUƴ SBUSHYSUPUԠ MPSUƱNNU SUƴDAMPANϬANS SADBADҬɠN SZDBADҠVAAB DBMPB SBDBADҬɠDS. SZDBADҠBU MPSUƬɠ USHNP SZGŠUSԠ?? MPSH AYSMANAN SAGAGSAUS SBƠŠDAA DƠ+6DSK DƠDBDAAN̠BK DƠSASҠSAUS DƠDB6DSKɯϠBU DƠ.DS DƠDUNԠD SSAS? MPҠYSAB SZDNϬBUMPϠNԠD MPSH SHDAMBADMNŠ MANADSNɯϠBU ADADBAD SZASS0DUNԠ?? MPSH SAMNNϬSԠUPANSMSSN SBSPנSNDԠϠM DƠ+3 DƠMN DƠSS ANA DBSSHKҠS SZB??? MPҠYSAB DBSS3 PBMN??? SS MPҠҬAB SHASԠDSԬBU SADBƠNԠNDN MPUSHɠUN ҠSASSD MPSԠAB SKP SAGŠNSANS GUMN+6DAAADŠUSԠAG ADSUMN+5ADD ADϠUMN+6ADS SUMN+ŠD ϠUMN+ŠS DB6UMN+DSKɯϠBUҠADD MBADƠMBƠMMUN.BU.ADD MBZDƠMB̠MMUN.BU.NGH SBƠBSSSUŠBUҠNԠAG SBADҠBSSSUŠBUҠADDSS SBNGBSSSUŠBUҠNGH DBƠBSSDS.BUҠNԠAG DBADҠBSSDS.BUҠADDSS DBNGBSSDS.BUҠ$"NGH DBSSUNԠADŠD SԠBSSSԠHүנD SASBSS DSBSS MPABSS MPBBSS .Dà .6Dà6 .Dà M6Dà-6 M65Dà-65 SSUMN+3NŠSAUS SSUMN+PGAMSAUS SS3UMN+5ANSMSSNG ASKUMN+6ASK NNUMN+NԠPAMBUҠNGH NAMUMN+ŠNAM ̠UMN+Š YPUMN+3ŠYP SàUMN+ŠSUY SZUMN+5ŠSZ NGUMN+6DNGH SPAŠUMN+UNUSD SDUMN+5SAND NUMN+53SANPVAŠN MNUMN+5SANMMNN DBUMN+55DAAN̠BK MNUMN+99MMUN.BU.NGH. MBƠUMN+00MMUN.BU. SZŠU NDASK9 W$  29100-80011 A S 0122 ESP INTERRUPT PROCESSOR              H0101 )xASMBҬB HDSP$---SPNUPԠPSSҬSAN$ SPNUPԠPSS SAԠNGUAN HANGŠA̠UANSƠ$ϠHŠAPPPA APHASANDN.HSŠMH NG:ABìDŠҠ. NAMSP$0PGAMNAM DNŠMMUNANɯϠBUҠNGHDS. MNMUMSZŽ53.NϠMAMUMSDND.HANG A̠UANSƠϠHŠDSDVAU. MMNBKSMUSԠBŠMANANDҠAH MŠSANNHŠSYSM.ABKS MAYBŠMVD.HUSƠNYϠSANSA DNDHNHŠDSBUVŠSYSMNY HŠSԠϠMMNBKSMUSԠBŠPSVD. MB̠UMMUN.BUҠNGHMNA MSNA(00SNA.( MSNB(00SNB.( MSN(00SN.( MSND(00SND.( MSN(00SN.( MSN(00SN.( SUP MNUSN$ SNASà3SN:$ HŠASà0NŠҠNSP$ DNŠGA̠UNԠNUMBҠƠSA NNNԠNŠҠSAN$. HANGŠBϠAPPPAŠU. UUBGA̠UNԠƠNNN NDNGUAN UN̠SUPPSSSNG HDŠSPNUPԠPSS Ԡ SPɠBSS0 SP$HANDSNUPSҠHANN̠$ HNHANN̠$SNABD SBàADMŠUS'SPAAMS DƠ+6 DƠN DƠD DƠPBUƱ DƠH DƠ SBSAԠSԠҠBADSAUS DAPBUƲADUS SZASSSAUSNY? MPSPYSSPND PAMNDҠAҠ? EMPԠYS MPHANDYSYԠ! SUP MԠ- SKP NAB̠BSS0 SBà-NABŠHANN DƠ+3 DƠH DƠNABA SASSUSԠMPD? MPNAB̠NϬYAGAN. SPBSS0 A SAPBUƱ SAPBU3 SAPBUƲ SAUN SBàSHUDNANSMSSN DƠ+6 DƠ DƠD DƠPBUƱ DƠH DƠ ԠSBà DƠ+ DƠS SAԠNPSԠSAUSBS SABADSAUS? MPSAԬɠNϬUN SBà̠PA DƠ+5 DƠ DƠN DƠH DƠN MPԠNDANSMSSN NDà0 SKP HANDBSS0 DBPBU3 SZBSSZϠNGHŠ? MPSSԠYS SBBUƲ ANSMԠUSԠAND SBàADNAŠBU DƠ+6 DƠN DƠD DƠBU DƠU DƠZ SBSAԠHKSAUS SSԠSBGSԠANSMSSNG SBBN DAPBUƲHKҠBADA SSA MPNAB̠NDHANGŠANDNABŠAD B SBSAԠAҠNŠSAUSD DBPBUƱSԠMŠSAUS SBSAԠSԠMŠSAUS SAUNàSԠPSNԠUNND ANDBDUŠASNSSAY ҠNAM0MGŠK0 SANAMŲPUԠNASKNAM SBàAҠAD DƠ+3 DƠH DƠA SHDNP SBàSHDUŠUSDPGAM DƠ+3 DƠNN DƠNAMű SZA׍G ASPGAMSHDUD? MPSHDNϬYAGAN DAUNàADUNN SZASSASASKABD? MPԠN. PAVŠDSԠ? MPԠYSGNŠAB AYS SAUNàZϠUNN SNSSBàSHDUŠSAԠPGAM DƠ+3 DƠN DƠSN SZASHDUD? MPSNSNϬY MPԠYS SKP SAGŠNSANS PBUƱUMN PBUƲUMN+ PBU3UMN+ SAԠUMN+3 SAԠUMN+ GUMN+5 UNàUMN+6 BNUMN+ BUҠUMN+ SKP ZϠԠ0 BUҠDƠBU BUƲNP DƠPBUƱ HŠDà3 DϠNԠSPAAŠPVUSNS DԠABSU NABAABS00B+U00B+U AABS00B+U NŠDà ϠDà UҠDà VŠDà5 SؠDà6 NNŠDà9 NAM0ASàK0 NAMűASàS NAMŲNP NAM$ASà$ BԠ NDSP Ϝ  29100-80012 A S 0122 ESP READ/WRITE FUNCTION PROCESSOR             H0101 rASMBҬB HDSP:$---SPADŠUNN SPADŠUNN SAԠNGUAN HANGŠA̠UANSƠ$ϠHŠAPPPA APHASANDN.HSŠMH NG:ABìDŠҠ. NAMSP:$SUBUNŠNAM NԠSP$SPADNY NԠSP$SPŠNY NԠSP$SPNDNY DNŠMMUNANɯϠBUҠNGHDS. MNMUMSZŽ53.NϠMAMUMSDND.HANG A̠UANSƠϠHŠDSDVAU. MMNBKSMUSԠBŠMANANDҠAH MŠSANNHŠSYSM.ABKS MAYBŠMVD.HUSƠNYϠSANSA DNDHNHŠDSBUVŠSYSMNY HŠSԠϠMMNBKSMUSԠBŠPSVD. MB̠UMMUN.BUҠNGHMNA MSNA(00SNA.( MSNB(00SNB.( MSN(00SN.( MSND(00SND.( MSN(00SN.( MSN(00SN.( MNUSN$ DNŠGA̠UNԠNUMBҠƠSA NNNԠNŠҠSAN$. HANGŠBϠAPPPAŠU. UUBGA̠UNԠƠNNN UN̠SUPPSSSNG HDSPADŠUNN Ԡì.N PBUƱUMN PBUƲUMN+ PBU3UMN+ UNàUMN+6 A̠SPҠ(BU(ɩSA( BUҠNP SAҠNP SPҠNPADNYPN SB.N DƠBU DBSAҠADSAUSAAYADDSS SBSAԠSԠSAUSPNS NB SBSA NB SBG A SASAԬɠAҠSAUS DBBUҬɠADUSԠܘNGH SSBMAKŠPSV MBNBSS ŬSS ŬB SZ NB BGSԠҠPAMA SBPAMŠPAAMSϠM SBPAMADMŠUS PAϠŠ? SSYS. MPNDPSSBŠND DABUҬ SBSBUƠSԠBUҠNGH MPԠSԠUPԠNGH GNDABUҠSԠBUҠSA NA SABUS SBNŠADNŠPAAM SBàADDAA DƠ+6 DƠN DƠD BUSNP DƠBU DƠN SBSAԠSԠSAUS NDDABUҬɠSԠG ԠSSAPSVŠ? BSNϬMAKŠHAAҠUN SBG MPSPҠɠ NDBZϠG PAMND? SSYS SBԠNϬ SBUNàZϠUNN MPNDUN ԠBSS0 SSASSϠBGAŠ? SBԠYS DBPBU3ADMŠSZ SBBUɠSԠADNGH SZBZϠ? MPGNGϠNANDAD SBUNàUNԠ MPNDND ԠNPԠUS ANASԠԠSAUS SASAԬ A SAG SAUNàNDANS MPSPҠɠ BUɠNP MԠ- SKP SAԠNPSԠSAUS SABADSAUS? MPSAԬɠN ASԠBADNŠSAUS SASAԬ BAҠBҠPAMA SBPAM̠HҠND ԠAAҠGSS B MP SKP BUנNP SAנNP SPנNPŠNYPN SB.N oDƠBU DASPנSԠUNҠS SASP DBSAנADSAUSAAYADDSS SBSA NB SBSA NB SBG A SASAԬɠAҠNŠSAUS SABàAҠŠA DABUנSԠBUҠSA NA SABUS DABU׬ɠADUSԠNGH SABU̠SԠA̠BUҠ AGANBPAԠPNԠANDSԠBGҠPAM SBPAMŠPAAMS SBPAMADMŠUS PANŠŠ? SSYS. SBԠNϬSPUS DABU׬ɠADUSԠNGH SZASSAPUԠNZϠ MPZNŠYS̠M DABU̠SԠBUҠNGH SBSBU MPԠҠUN DABUɠSԠŠNGH SBƠSABU SBàŠDAA DƠ+6 DƠ DƠD DƠBUS DƠU DƠZ SBSAԠSԠSAUS ADBBàSUMSϠDA SBBàSAVŠҠNԠPASS DABUԠADUNԠŠNGH MANANGA ADABU̠ADDA̠BUҠ SSADNŠ? MPԠYS SZASS MPԠYS SABU̠NϬSԠNנA̠BUҠ DABUSSԠNנBUҠSA ADABU SABUS MPAGANDUԠHŠNԠBK ԠDABU׬ɠSԠG MPԠ ԠBSS0 DABUɠSԠA̠BUҠ SABU DAPBU3SԠŠNGH MPSBƠSUMŠNMA̠PAN ZNŠBSS0 SAUNàZϠUNN SBàŠNŠPAAMҠNY =DƠ+6 DƠ DƠD DƠZ DƠN DƠ MP BUSNP BUԠNP DƠ- NŠDà ZϠԠ0 BàNP BU̠NP SKP SBUƠNPSԠBUҠNGH SSAPSVŠ? MANASSNϬMAKŠPSV ŬSSPSVŠ.K. ŬAMAKŠHASNϠDS SZ NA SABUɠSԠDNGH MANASԠҠUԠƠANG ADAPBU3 SSASSNMA̠Ԡ? SZSBUƠYS MPSBUƬɠUN PAMNPŠPAAMSϠM SBPBU3SԠNԠůADNGHMA DAUNàADPSNԠUNN SZASSSUSԠVAD? MPNNϠNϠ!!!! DASAԬɠSԠNA̠SAUS SAPBUƱSԠҠANSMSSN DASAԬɠSԠNŠSAUS SAPBUƲ SBàŠPAAMS DƠ+6 DƠ DƠD DƠPBUƱ DƠH DƠ SASSҠ? MPԠYSND MPPAMɠUN NNϠDAϠADBADUSԠAG SASAԬɠSԠNA̠SAUS MPSPҠɠ SKP PAMNPADMŠUS PADAN SANԠSԠNA̠PAԠUN PBSBàADUS DƠ+6 DƠN DƠD DƠPBUƱ DƠH DƠ PAMASKY? MPPàYS SBSAԠSԠSAUS DAPBUƱSԠMŠSAUS SASAԬ DAPBUƲADUSԠYP MPPAMɠUN PàSZNԠPAԠDNŠ? MPPBNϬYAGAN DAUNàGԠUNN PAVŠDSԠ? SSYSSUSPND MPPBNϬKPYNG SBàYSSUSPND. DƠ+6 DƠV DƠZ DƠN DƠZ MPPADϠPAԠAGAN VDà NŠԠ-0 ϠԠ-300 NԠNP MASKԠ30 SAԠNP SAԠNP GNP NŠNPADNŠPAAM SB DƠ+6 DƠN DƠD DƠPBU3 DƠN DƠ PAMASKMŠNԠADY? MPԠYSND. DAPBU3SԠNԠANSMSSNNGH SABU MPNŬɠUN SKP SAŠNP SPŠNPNDNYPN SB.N DƠSA DASP SASPҠSԠUNADDSSҠS DBSAŠADSAUSADDSS SBSA NB SBSA NB SBG A SASAԬ DAUNàADPSNԠUNN SZASSAŠŠBUSY? MPNABNϬUN B SBPAMŠPAAMS SBPAMADMŠUS PANŠADMMŠ? MPZŠDϠZϠ PAMNDUSԠ? MPNABYSND. SBԠAA̠ ZŠBSS0 A SAPBUƱSԠZϠŠUN SBàŠPAAMҠNY DƠ+6 DƠ DƠD DƠPBUƱ DƠN DƠ NABSBàNABŠSNMD DƠ+3 DƠH DƠNABA SASS MPNAB A SASAԬ SAG SAUNàAҠUNN MPSPŠɠ DԠABSU NABAABS00B+U ϠDà HŠDà3 UҠDà VŠDà5 SԠSUMŠSNG HANGŠA̠R$"UANSƠ$ϠHŠAPPPA APHASANDN.HSŠMH NG:ABìDŠҠ. SP$USP SP$USP SP$USP NDNGUAN ND f$  29100-80013 A S 0122 REMOTE STATION ENABLE PROGRAM             H0101 RASMBҬB HDSN:$---SANNABŠPGAM MŠSANNAB SAԠNGUAN HANGŠA̠UANSƠ$ϠHŠAPPPA APHASANDN.HSŠMH NG:ABìDŠҠ. NAMSN:$0PGAMNAM DNŠGA̠UNԠNUMBҠƠSA NNNԠNŠҠSAN$. HANGŠBϠAPPPAŠU. UUBGA̠UNԠƠNNN NDNGUAN UN̠SUPPSSSNG HDŠSPSANNAB Ԡ SN:$ASANDNABSMNA̠$ SN:$SBàAҠHANN̠$ DƠ+3 DƠH DƠ$ SBàNABŠHAN$ DƠ+3 DƠH DƠNAB$ SASSUSԠMPŠ? MPSN:$NϬYAGAN SBàNMPAҠ? DƠ+5 DƠ DƠN DƠBU DƠBU SBà DƠ+ DƠS DԠABSU $ABS00B+U NAB$ABS00B+U SUP BUҠASà0SAN$NABD! BU̠Dà0 NŠDà ϠDà HŠDà3 SؠDà6 NDSN:$   29100-80014 A S P0122 91701A/B RTE CENTRALMODULE NAME: QUEUE             H0101 RASMBҬB NAMUUŬ0 NԠUU ԠUŬ AU0 BU UUŠNP DVҠUNSPNҠϠԠD DABPKUPԠADDSS NMNԠϠSAԠƠNԠ(5DԠNY ADAD ADDSAԠADDSSƠ DBԬ MBNB ADAB DVDŠBYԠNYNGHϠGԠԠNY B DVN ANDSAVŠ SAN PKUPƠDԠNS DAD NA DAA SA ADUSԠDԠNSϠAUNԠҠSANDAD DVS ADAD-6 MANA SAN SPϠSԠUSҠDNDDԠD DBDԬ ADBD6 PKUPNԠDԠD ԠԠƠNUPNGDV? ƠYS'VŠUNDԠHSŠPHUGHAB PDAB ANDM PAN MPUND NB SZN MPP AUҠSSUMAHNԠUND SB DƠ+5 DƠD DƠD DƠMSS3 DƠMS3 MPDN UNDDAN ADA NA SAU ADUSԬҠHKѬSYNHSZŠѠƠ AMŠMAS SBàPKUPHŠUS DƠ+6ANDS DƠDԠNBU DƠU DƠBU DƠB DƠD SASSANYҠNADNG? MPҠYSUPUԠҠMSG. SԠUPUSԠBUҠADDSS-NMNA̠AS DABA SAADD DABUƠNϠ-SHSANN-SANDAD SSAѠMAMDDBB SBSPҠBSAP?ƠSϠBUDAUS NנŠAŠADYϠNҠHŠUSԠNϠH UU ADDҠNANSHŠADDSSƠHŠUSԠ BŠNSDANDUS'SGA̠UNԠ SBUŠBUDHŠUSԠN DƠ+ DƠU DƠADD QIDƠDB ANYҠNU'SUNDAG HŠUSԠHASNנBNUUDUP SBàSHDUŠDSPϠDSPAH DƠ+3ƠDSPSDMAN-ƠSHDS DƠD0NԠSUSSU̠DSPSS DƠNAMŠAVŠ̠SŠHŠUS NYYNŠHN SPà5 DNŠSBàDAVAŠHŠUUNG DƠ+MDU DƠD6 SUBUNS. SPà5 ҠSBàUPUԠMMUNAN DƠ+5MSSAGŠϠHŠPA DƠDHN-NYHSNŠUS DƠD̠BŠS DƠMSS DƠMSS SNDҠZϠBAKϠMNA SԠHŠAGSҠ-B0HNPUԠNPYBU ұA SABU+ A SABU+3 NŠNA̠KYHDSAMSUBSAM NVҠADANDHUSAŠNԠNHŠBU NנSNDHŠҠPYBAKϠHŠMNA SB DƠ+6 DƠD DƠU DƠBU DƠD DƠMD NנASHŠANҠNHŠҠPY ANSMSSNAS??? SA MPDN YSHŠASANHҠҠNYNA̠PA UҠSB DƠ+5 DƠD DƠD DƠMSS DƠMS MPDN SPà5 SPҠNPBUDASANDADDAUԠ. SHSAMDBB̠US?ҠASYSMUS NԠNDNGMNҠAN? ƠHŠSHDƠHŠSԠDS0 SAMDDBB̠US ƠASPA̠USԠHŠSHDSUSD ASHŠNDؠƠAMPUDGϠ HŠSYSMUSԠAPABYANBŠNAGD BYMDANƠSYSѠϠNנƠUSS SҠADDNSϠSYSBNנSUBUNS BҠҠN SAŠHŠSHD(BS0- ANDSԠҠZ A̬A A ANDB00003 SZASS MPMDB SHDNNZϠSԠMAMUMSZ YSAMP MANA ADASYS SSA MPұ VADSHNDؠSBϠPSS SŠABŠNDؠ(SHD DAMP ADDABŠSAԠ- ADASYSA DAA SBA ԠAҠMPNGSYSMUS MPSPҬ SPà0 MDB̠DABU SAŠHŠUSDPGAMNUMB AKŠHŠPGAMNUMBҠHHSANA̠NUMB ANDMAKŠԠASɠBYSPNGHŠ BYSAND"'NGN"ANA̠60 SAŠHŠSԠDGԠANDADDHŠ60 ANDB00000 ҠB000060 SAMP NנPKUPSNDDGԠMVŠԠϠHŠHGH DҠBYŠANDADDHŠ60 DABU ANDB00000 AƬAS ҠB030000 NנPUԠHMGH ҠMP PUԠԠNHŠABADBU SANUM DAU AƬA ANDB00 ҠBY SAU SԠHŠUSԠADDSSϠHŠSPA̠ASŠBU DASPBA SAADD MPSPҬɠUN SPà5 ѱNP HSUSԠUNSHŠUϠHŠUS ANDMNAS DAU SABU+ AҠPUNGHŠUNHŠUSԠBU UNԠϠHŠUSNGMNA SB DƠ+6 DƠD DƠU DƠBU DƠD3 DƠMD MPŠMNA SAҠNANSMSSN? MPDN MPU SPà5 HSSAHADDD.DŽ63PAMB HDAUԠPYƠ HŠSGNBԠSSԠNHŠSAMSϠNϠPY ̠BŠSNԠBYAMSNŠHŠMNA̠N' KNנHAԠϠDϠHԠANYAY SPBADƠSPBU SPBUƠԠ00006 DàSUBSAM Dà63.DŽ63 Ԡ00000ԠUSD Ԡ000PYGVN Ԡ0NϠDAA Ԡ0000ѠDŠ.B. Ԡ005006ý0(Dé006.B. ASà3PG̠PGAMADMDU HŠNԠPAAM1ҠSN̠BYŠ(0U Ԡ0000 HŠNԠPAAMҠS.B.HŠSPҠ(N ASɩ UNP ASàP HŠNԠPAAMҠS.B.HŠSGN AS Ԡ0 HŠNԠPAAMҠSA.B.ASPAŠҠH AS"ZD"PGAMNUMB Ԡ0360 NUMNP NP SPà5 NSANSANDSAG SYSADƠSYSB- SYSBDƠѱSYSMUSԠ SYSѠDà BABUƠNP MDŠԠ0000 GNP UNP MԱASà3(3ɲ ADDҠNP DDà D3Dà3 DDà BUƠBSS5 B̠Dà5 NAMŠASà3DSP D0Dà0 D6Dà6 DDà B60Ԡ60 BADƠBU ԠԠ650 NDà5 DԠԠ65 NNP NҠNP MԠ0000 ̠NP MSSASàMMҠNPU MSSASà9MMҠUPU MSS3ASàGUNԠ MSS̠Dà-6 MS̠Dà- MS3̠Dà- MPNP BYŠԠ0000 SPà0 HŠNGBUҠNANSHŠMPDB ҠHŠŠUNYBNGASSD DBP53 Ԡ0 NDUU aq  29100-80015 A S P0122 91701A/B RTE CENTRALMODULE NAME: DISP             H0101 BASMBҬB NAMDSP0 NԠDSP ԠìDS DSPNP PSBDSSAHHŠUUŠ DƠ+3NԠUS DƠNUSԠADDSS(ҠZϩ DƠU ANYHNGUND? DANPKUPHŠADDSS SZASSANYHNGϠDSPAH? MPDNŠN-A̠DN SBàYS-DSPAHAM DƠ+5 DƠDŠSHDHAԠH DƠNAMŠMDUŠAMPASS DƠNHŠUSԠADDSS DƠUUSNGU MPPANYHNGPUԠN""DUNGAM? DNŠSB DƠ+ DƠD6 D6Dà6 NAMŠASà3AM DŠDà9 NNP UNP NDDSP   29100-80016 A S P0122 91701A/B RTE CENTRALMODULE NAME: TAM             H0101 ASMBҬB̬ NAMAM30 NԠAM Ԡ$BҬ$B Ԡ AU0 BU HDMMUNANSASSMN SPà0 AMNP PKUPSAMYPŠϠDMNŠMN DAB SAPAMBSAVŠUSԠADDSS NBPKUPHŠUƠHŠUSNG DABɠDVŠSŠԠMPAY SAUNUMVDAҠϠSԠNY SԠHŠDAUԠMNA̠YP ..HŠUSԠSNԠMAMDBB̠MNA ANDHUSANVŠASAUSPY DBPAMB SBBKA B SBMDB SԠUPHŠҠGS BNBҠYPŽMPSSAM SHŠSAMYPŠ0? DAPAMBɠGԠSAMYP NנHKUSԠGN-SԠMAMDBB ƠSϠSԠNϠUNAG HNAҠHŠMDBB̠NDAҠAG SSASS MP+ SBMDB ANDMSK SBN SZASS MP SHŠSAMYPŠϠBG ADASMADDNGAVŠƠƠDND SSASSSAMYPS+. MP ԠKSGD-NVKŠMN PKUPSAԠƠMNҠABŠϠNDDSPA- MNԠANDSHDUŠHŠMN HŠSHDUNGPSSBנSAGNA̠N ԠHASBNHSNϠMAKŠHŠADDN ƠMNSHҠHNHŠMŠŠASS MNҠ(AMASY. ƠNϠHҠMNSAŠϠBŠADDD HŠABVŠDŠUDBŠPADAԠHŠNԠ AMҠSGHYDUDVHAD DBD3SԠUPҠGS SBSAVB DAPAMBɠSŠSAMYP ADAB- MPYH ADAMNA SANAM SHDSB DƠ+ DƠD NAMŠNP DƠPAMB DƠU DƠMDB DƠSAVB DƠPAMB+ SHSB DƠ+ DƠD6 SPà5 ҠSBSAVB DANA SANAM M  PSHD SPà5 NҠNP SAPM3 SB$B NP DAPM3 SABKA SB$B DƠN SPà5 MNADƠMN MNҠASà3 ASà3 ASà3 ASà3 ASà3 ASà3AM ASà3 ASà3 SPà5 NSANSANDABS NADƠNM NMASà3 D6Dà6 PAMBNP UNP BKANP MDB̠NP PM3NP MSKԠ0 HŠԠ3 DŠDà9 SAVBNP SMDà-9 NDAM P   29100-80017 A S P0222 91701A/B RTE CENTRALMODULE NAME: RFAM             H0102 ?ASMBҬB̬ NAMAM30 Ԡ$BҬ$B Ԡ ԠPM Ԡү$ ԠVAADDSSƠVנŠN ԠDBAADDSSƠUNԠDBNUDS ԠMPA AU0 BU SZŠSHŠSZŠƠHŠBSSAVAABŠҠ HŠSԠANDAMDABS(HŠNGHƠHŠ BԠSUBUNŠSASϠADDDԠSA UNNƠHŠGUNDDSàSDNԠAA SZŠ SPà5 SZŠU005 SPà5 HDMŠŠASSMN SPà0 PAM6NP UNP MDB̠NP SAVBNP NP AMNPHSSHŠMŠŠASSMN NAY"BG"NANSADDSSƠUS BUҠADDSSϠBŠPSSD. ƠB-HSSASHDUŠMHŠM S:SMPY-SHDU. PBB- MPSH AHҠHANMNANGHSMDUŠSPAD NHŠMŠSԠSϠHAԠSAPPNG̠AKŠPA ƠAHGHҠPYPGAMNDSHŠ.HS ̠PSVŠNGYƠHŠŠSAŠAB. SBMPA DƠ+ DƠPAM6 DAPAM6 SAPAMB DAA SAPAMB+ HKHŠNGHƠHŠSԠABŠNY SPà5 DASԠHASHŠSYSM SZASSBNBDUPY? MPBԠN-GϠDϠ ̠MDBԠUS? DAPAMBSNPASSSA99ϠAM PAD99SNBԠUSSA MPSHGA̠AԠHSPNԠNM A̠NSϠHSPGAMAŠMŠŠASS USSANDASSUHMUSԠBŠADHUGHH ŠSAŠABŠ(Sԩ. DMNŠHŠUNNDŠƠHŠUS ANDiҠHK SԠUPҠGS DBD DAPAMBPKUPH ADABUNN DAA ANDB0003D-MASKUԠHŠSSSN ADABASŠNUMBҠANDADUSԠSϠԠS SADŠAVADKUPPN SSASHŠUNNDŠNGAV SBҠƠSϠԠSN SZASSSHŠUNND SBҠZ-ƠSϠ ADAMANSHŠUNNDŠAG SSASSHANHSŠDND?ƠS SBҠԠSN USŠBGSҠASҠNDA NŠHŠNAMŠSNԠNPAMB+6ҠHŠSAUS A SԠHŠNנŠNAMŠMUSԠBŠPKDUP ԠSSPԠASSDBUNDASNPAMBS HŠSҠPKUPSUSD-ԠSSAVDNHŠAAY NNAM DBPAMB ADBNAMD SBPKUP SANNAM SBPKUP SANNAM+ SBPKUP SANNAM+ SԠHŠMŠàA̠AGϠHŠDAU NDN B SBAG SԠUPANDA̠AMSԠPSS DAD ADASA DAA SBA SB DƠ+ DƠD9 DƠDS DƠPAM6 DƠMDB DƠAG DƠUҠŠSAUSàAS SԠUPHŠAMPSԠPSSSҠANDUŠ DAD ADASB DAA SBA SHB SB DƠNDA DƠD DƠD0SHDUŠANGPGAM DƠS DƠD0 DƠSԠN3HUS. NDA̠SBAM HDMŠŠASSS'S MSԠNP NנUSSAŠPSSDH ANנUSԠMUSԠBŠNSDƠAMDB PSSNGANMMN SAHAMDҠANMPYSԠASDNDBYA0 NHŠSԠNAMŠD. NUNPNϠPNSϠSԠAMDNAMŠD NMA̠UNSB+ ҠUNSB+(NϠMNkAMD BNBAҠNYUN DAAMAPKUPADDSSƠSԠAMD SAPNϠADDSSPKUPSԠD PDAPNϬɠƠNAMŠS PAB- MPNM SZASSZ-ƠNԠHSNYS MPMSԬɠNMA̠UN DAPNϠSPϠNԠNAMŠPN ADAAD SAPN NBNMNԠNYUN MPPƠNԠYAGAN NMԠDBB5ƠDN-NϠMNHŠNN SZMSԠNϠ"M"SS-UN MPMSԬ SPà5 SԠNP HSSҠKSHUGHHŠAMDAB ANDDMNSƠMŠHANNŠMNA HASAGVNŠPNUNY-ԠUNSH NUMBҠƠSPNNHŠVAABŠţ ANAZŠHŠNUMBҠƠS SAţPNϠZ DBAMAPKUPHŠDYADDSS PDABɠPKUPHŠSԠD PAB-HŠNԠDYNY MPSԬɠƠ-ŠAŠDN HSSAVADNYSϠHKNAMŠNMN UNԠƠԠMAHS PANNAM MP+3 ADBB5 MPP SԠDNAMŠMAHS-DSSND? NB DAB PANNAM+ MP+3 ADBB MPP SNDNAMŠDMAHS-DSHD? NB DAB PANNAM+ MP+3 ADBB3 MPP NAMŠMAHSSϠNMNԠNUMBҠƠMNAS HAԠUNYHAVŠHSŠPN SZţ GϠKҠM SBţ+ ADBD3SPϠNԠAMDNY MPP SPà5 MҠNP HSSUBUNŠSNDSBAKHŠ- HAԠUDDNAYMŠBAKMHŠMP HŠҠϠBŠPASSDBAKSNHŠAG. SAP SԠUPHŠàA̠ϠHŠDV DAMDBUDHŠMD ҠD SAMD DAD5BUDHŠDUN ܆SAB DAPAMBSԠUPHŠVUҠADDSS SABU NנUNƠHŠNUPSANDSԠUPHŠPY BU SB$B NP BSԠUNDABϠ0 ADAD SBA NA SBA NA DBPPKUPҠYP SBA UNNNUPSANDSNDԠBAK SB$B DƠ+ DƠ+ SNDASPƠԠSAADҠ DAD PADSԠ? MPSPYS PAD5SԠAAD? MPSPYS MPGҠN-NNU SNDSP SPSB DƠ+3 DƠD3 DƠU SNDԠBAK GҠSB DƠ+6 DƠD DƠU BUƠNP DƠB DƠMD MPSH SPà5 SŠNP SBSԠPNϠHҠMŠUSS? DAţPKUPNUMBҠƠUSSHϠHAV PAZϠŠPN-ƠNBDYDϠA MPSSSANDADS ADAMHSŠPN-MŠHAN? SSASSƠYSMAYBŠASPA̠S MPSASԠϠS SBDSԠHSŠPNϠ-SԠUS MPSSYSSANDADSŠUD MҠDAMPNϠSMBDYS-ANԠS SBM SASBDSԠSUҠUSҠAMUNGHS MP+HŠPN?ҠƠN MPM YSSPA̠SŠUDASS: HSSPA̠SŠSҠUSHŠDBϠB SԠUPPҠϠA-NŠHAԠԠAKSH PAŠƠHŠDSàSHDU SBSԲASԠUPHŠSNGDB DBDBA NB SBү$ SBM SNDPYPSPSS PSSBS3BPSPSSHŠS DADBAPKUPHŠADDSS ADAD5ƠHŠUND DAAɠҠDMMP SBMTHҠHNSNDHŠPY SSSBSԲAUŠSANDADS MPSŬ SPà5 S3ANP HSSҠPPSSSPUGŠANDNAMŠ SPA̠NSDANS ƠAPUGŠҠNAMŠSUDNAŠPN ϠϠҠMŠMNASHNASPA̠AS SS SBSԠMŠHANMNA̠HASHS DAţŠPNƠţSGA PAZ MPSԴZ ADAMHAN SSAƠSϠSNDBAKA- MPSԴؠƠNԠPSSASUSUSA SԴYDAMSԠUP-ҠD SBMҠANDUN HSŠSNYPNϠNŠMNA̠BUԠ MAYNԠBŠUҠUS-NHHASŠԠS AN SԴؠSBDS MP+ԠSUҠUS-ԠԠHU MPSԴYSMBDYS- SԴZSBSԲAUŠSANDADPPSS MPS3AɠSUBUNŠ SPà5 SԴANP SԠHŠPNAGϠNNUSV A SAG HSSҠHANDSPNUSSҠHŠSPA USVŠPNAS-ƠAŠSϠBŠPND USVYHNAHKSMADŠϠDMN ƠANYHҠMNA̠USSHAVŠԠPN UNY-ƠNNŠDϠԠSADANDHŠ MANAGҠ̠AHANYNNŠMNA̠DUPANS ƠHŠPNSNԠUSVŠԠSAD HUGHҠNMA̠PSSNG SԠƠUSVŠPN DBPAMBPKUPN̠BYŠҠS ADBD9PNA̠PAAM-ƠNԠPS DABɠ-NԠDAUԠ(USVŠPN ANDMSKSPA̠BUԠN̠BY SZASSƠ.B.0HNNDƠPAMB MPPDAUԠNDN ƠPSNԠPKUPHŠDSԠBԠ NB DABɠPKUPPASSDPAAMҠ ANDMSK3AҠA̠BUԠBԠ SZASSƠBԠS0USVŠPN MPPGϠMAKŠUSVŠPNS ƠNԠUSVŠPNHSUSԠANBŠ HUGHHŠGUAҠG HŠNנUSԠSNԠUSV-BUԠԠANB HNDNYƠHŠAŠNϠHҠMNASH HŠŠUSVYPNAADY DMNŠHנMANYMNASHAVŠHSŠPN SBS DAţPKUPƠMNAS PAZϠƠZϠA̠SԠϠԠԠHU MPSԲY PADƠNԠ0ҠMUSԠBŠNNUSV MPSԲVGϠHKUSҠҠؠPN MPSԲYMŠHANMUSԠBŠK SԲVDAţ+PKUPADDSSƠASԠD NAƠNAMŠANDNMNԠϠU DAAɠPKUPANDSԠؠAGB SSA(SGNBԩ-ƠSԠHN'S- MPSԲנPN-ƠNԠUS SԲYSBSԲA MPSԴAɠUNAҠGUAҠPSSNG HŠUSVŠPNSAŠHANDDH SԠSŠHנMANYGUYSHAVŠHSŠPN PSBS DAţƠHSNUMBҠS0ԠҠP PAZϠBAUSŠHSŠSNԠPN MPSԲUϠANYMNA PADƠԠSHNHŠŠMAY MPSԲZBŠPNϠHSUSҠAADY ƠPNϠMŠHANNŠHNANUSVŠPN ANNԠBŠAD SԲؠSBDSԠPNAD-SSŠUD? MP+YS-SԠUPDBҠSŠA MPSԲԠNϠDB-SŠNԠNDD SBSԲAGϠSԠUPDBҠS DBDBASԠUPHŠDBADDSS NBSPPASԠHŠAGD SBү$A̠SŠHUҠHŠPAMB SBMҠҠUN(AG- SBDA SԲԠDAMSԠUPPNҠAG SBM SԲZSBDSԠƠHŠNYUSҠϠHMHS MPSԲUŠSPNSUҠUSҠ'SK MPSԲؠHSŠ'SN SԠHŠPNAGϠUSV SԲUA SAG MPSԲYNNUŠPSSNG SԲנSBDSԠNDUԠƠNYSUS MP+YS-NNU MPSԲؠNϠUNҠMSG. DBţ+SԠUPϠAҠHŠؠPNAG NB DABɠPKUPUDA ANDMSKHŠ-PNAG SABɠHNPUԠԠBAK MPSԲYNנPSSHŠNNUSVŠPN SPà5 S5ANP HSSҠPSSSHŠASNYAS HSŠHHANSUԠNANUSVŠPN NDNUPNSUSSU̠MPN SHSŠPNϠANYNŠHҠHANHŠA SBSԠDMNŠHנMANYMNAS DAţHAVŠHSŠPN! PAZϠƠZϠ'ҠP MPS5Y PADƠNYS̠MAYBŠK MPS5ZBUԠNYƠUҠMNA-GϠS MŠHANNŠMNA̠HASԠSϠUSV PNN'ԠD-GVŠDUPAŠNAMŠ S5ؠDAM SBMҠGVŠSMUADMP S5ZSBDSԠNDUԠHϠHASԠAADY MPS5Y'SUSԠԠHUGH MPS5ؠSMBDYSŠSND- ƠA̠S̠N̠H S5YSBSԲADϠSANDADPPSS MPS5AɠANDUNAҠ'SDN SPà5 DSԠNP NUN: BGPNSϠHŠSAԠƠHŠAMDNY (NMA̠UNNY NMA̠UNNGSB BNANSҠDŠ(-NNԠUND ҠUN(NԠUN HŠAMDDY̠NנBŠSAHD AMAHUN̠A-SNUND(NDƠABũ SԠPKUPHŠABŠADDSS DBAMA PDAB PAB- MPNH HSSAVADNYSϠHKNAMŠHNU PANNAM MP+3 ADBB5 MPP SԠDNAMŠMAHSDSSND? NB DAB PANNAM+ MP+3 ADBB MPP SNDNAMŠDMAHS-DSHD? NB DAB PANNAM+ MP+3 ADBB3 MȿPP HDNAMŠDMAHS-DSUƠUSNG MNA NB DAB ANDMSKSPƠSAUSBS PAU ƠHŠNYHASBNUNDŠAŠ"DUN" MPDUN ƠNԠPBAKҠHŠNԠNY ADBB MPP ƠHŠNYSNԠNHŠABŠN̠MS H NHҠDAM SԠUPHŠҠAGNHŠBGNMN ϠHŠҠUNUN SZDS MPDSԬ DUNADBB-3 MPDSԬ SPà5 SAPNP HSSҠPSHŠAGSҠϠNANH AVŠNY(NHŠSԩƠHŠDBHAԠS ϠBŠDMDB.ASϠHŠSGNBԠ̠B SԠϠƠAϠAYMVŠSϠBŠMAD. ŠHŠŠGSҠSS SSAϠZϠƠHŠMVŠS ŠNŠAY ANDMSKPKUPHŠAV SASNàSAVŠHŠSԠNMN AUAŠADDSSƠSԠSԠDϠBŠMVD ADAB- MPYSNSԠUP ADASADDSNAN SASUàADSS SASN+SAVŠHŠSԠADDSS DBDBA SBDS SԠUPPUN DBSN MBNB SBN P3DADSԬɠPKUPDBDNAG$S SZDNB(ƠϠAYMVũ DBSUìɠHNSŠANS SASUìɠƠAϠAYMVŠS SZBNDàHUSNŠY SBDSԬɠSMP NMNԠPPNSNNU SZSUàNMNԠSUŠ SZDSԠDSNANUNS SZNҠNMNԠPUNҠ MPP3NNUŠUN̠DN SHŠNYMVDϠSԠUSU̠ҠASDBMPY DAŠƠMPYNϠNDϠSԠUP SZAHŠAMDPNҠBAUSŠ MPSAPɠDSN'ԠSԠANYM NנSԠŠPNҠNNYHAԠASNDB ϠNנSԠPSN DASN+ɠPKUPSԠSԠD AƬAƠSAŠHŠAMDNYPN AƬASNANDH-HNNV ANDMSKHSNYϠANNY ADAB-ADDSSҠD5ƠAMD MPYAD̠NY ADAAMA ADAD SASN+SŠAUADADDSS DASN+ɠPKUPD5ƠAMDNY ANDMSKAҠHŠDSԠPN DBSNàNנPKUPNנSԠNMNԠ BƬBƠAŠԠNϠBS-HN ҠBMGŠԠNϠD5ƠAMD SASN+ɠNYNAYPUԠԠBAK SԠSԠNYBUSY DASN+ ҠMSK5 HŠNGSADUPANƠԠP ҠASAPAҠA̠U-HNԠSNDD ANDMSKDNSԠNY ҠNҠϠHŠN.ƠNS ADAM SASN+ɠN MPSAPɠUN SPà0 AGŠNP AGŠSSAGŠƠA̠SUNYN ŠSUԠHŠDSԠN-HŠNYƠH VAADSԠNYSUNDNHŠAG. BNBNAZŠHŠNY SBMP+NUMBҠHN DANԠBUDAUNҠҠ MANAƠSԠNSN SANҠŠUNY DBSADPKUPADDSSƠSԠNY PDABɠNנPKHŠNSAԠAM ADAM SAB ANDMSK3ANDKҠHŠZϠAGŠNY PAZ SSDU MP+3 DAMP+ SA ADBSNNNUŠϠNMNԠHŠPN- SZMP+SUN̠HŠNŠAVŠS SZNҠHASBNAMND. MPP ̠UԠNYH HŠNYϠ̠UԠSN"" AŠHŠAMDNY DA̠NVԠHŠSԠNY ADAMϠANADDSS MPYSNPKUPHŠSԠD ADASADƠHŠNYHŠSA SABAD DAAɠHŠAMDPN AƬAƠNANDHN AƬAS ANDMSK NנAŠHŠŠDNUMB ADAMNVԠHŠAMDNYϠAN MPYAD̠ADDSSPKUPHŠH ADAAMADƠHAԠNYSA ADADHŠDSàPNҠNAND DBA DAAɠHN SԠ"NDS"AGB ҠMSK5 SAB ANDMSK SԠUPHŠNYNUMB SBAàAUAŠAKSҠADDS. SADSKAD+SAVŠAK SBDSKAD+SAVŠSҠ DAVAAŠHŠU ADADNHŠMDUŠUDS DAAɠPKԠUP ҠNDHNADDHŠSԠBS SADSKAD+3ANDSԠԠASDŠҠHŠA SB DƠ+ DƠDŠPAN DƠDSKAD+3N̠D BADNPBUҠADDSS ̠AKŠPA-HUSSPDNGHŠŠPAN A00DŠSUSDSϠHAԠNϠPAKNG DƠD00BUҠNGH DƠDSKAD+AK DƠDSKAD+SҠ ASHŠADSUSSU? DBD5SԠUPHŠҠGS SSAMP? MP-N ANDMSKYS---? SZAƠZϠNϠ SBҠ DA MPAGŬɠPNҠUN SPà5 HŠNGSҠPKSUPNŠDMPAMB HAԠSSPԠASSADBUNDAY ԠPSHŠADDSSƠHŠSԠBYŠNHŠBGS ԠUNSHŠMPDDNHŠAGS ANDHŠADUSDADDSSNHŠBGS ԠANHUSBŠADSAYҠNSUV DSBYNYSNGUPBN PKUPNP SBPUPADSŠHŠPKUPADDSS DABɠPKUPHŠSԠBY AƬAƠԠUSY ANDMSK6HנAAYHŠGABAGŠBY B@  29100-80034 A S 0122 LINE PRINTER DRIVER (2767) SIO 24K            H0101 *ASMBAB̬ìN HDSϠNŠPNҠDVҠ(HP6 G MP3 DƠNԠNAZANAN G0B DƠNPPGAMSAԯԠAN SPà N KŠU50000B Z KŠU0000B SKP GK+6000B SPà NԠANGUŠHŠDV ANDA SA DAñM ANDP00AND ҠS SAHAH DAò ANDP00AND Ҡ SAHSàH DA3 ANDP00AND Ҡ SAH3SSH DAô ANDP00AND Ҡ SAHàH DA5 ANDP00 Ҡ SAH5 HԠBHNHA MPN SPà AԠ P00Ԡ00 ñA0 òSà0 3SS0 ôà0 5A0 SKP G06B ABSK+0B GK+55B SPà NPNPNY MANA SA SSAHAAҠUNԠҠMMAND? MPBDHAҠUN SAB DAAADYPAGŠ SZBSSSMMANDNŠSPAŠҠPG? UADAANŠSPA SBUAUPUԠAND MPNPɠԠDV SPà BDADAD0 SSASSHAҠUNԠ0? MPP+N DAD0YSSԠϠ0 MPNP+ PDBB B̬ŬSBBSBUҠADDSSND? MPPYSHNԠV HUԠDABɠPKUPDMBU SZSSUPPҠHAA? AƬAƠYS BSAVŠHAAҠADDSSNB ANDA3 SAUAMPSAV ADAAM0 SSAHAҠ<0? MPѠYS ADAAM00N D  SSAHAҠ3? MP+3N ѠDAA00YSGԠSYMB SS DAUAPAŠHAA SBUAUPUԠϠPN NBNMNԠHAAҠADDSSAND ŬBSHBAKϠBUƠADDSS SZԠASԠHAAҠU? MPHUԠN MPUAYSPNԬSPAŠAND SPà UANPUPUԠHAASANDMMANDS SAMP H5A0 SZAPNҠNԠADYҠBUSY? MP-YS DAMP HA0 HSà0 H3SS0UPUԠMP? MP-NϬHANGNH Hà0YSADDHŠSNGAND MPUAɠԠNDY SPà AԠ AԠ A3Ԡ3 BU ԠNP D0Dà0 AM0Ԡ-0 A00Ԡ00 AM00Ԡ-00 MPNP ND f   29100-80035 A S 0122 MAG TAPE DRIVER (7970)  SIO 24K            H0101 ASMBAB̬ìN N HDKSϠHP90DVҬ30VB Z HD6KSϠHP90DVҬ30VB G0006B DƠMD-ASԠDAVAABŠMMY DƠMDDVҠNYPN SPà DVҠNAZANSN SPà PUPSŠƠHSSNSϠSԠHŠɯ NSUNSϠNŠADSGNADɯ ADDSSҠHŠ90MAGAPŠDV. SPà UNƠHSSNSBGUNAԠAN: SPà (MP3 (3DƠ.M SPà HSHS00-05ɯϠADDSS SPà HSSNSASDAҠHŠNAZAN SMPD. SPà G0000B MP00003BɠSԠSANG DƠ.MԠPNԠNAND3 SPà N KŠU50000BKVSN. Z KŠU0000B3KVSN. SPà GK+06000B SPà NGUŠɯ0NSUNS SPà NGHԠ00B SPà SSנU0BSNSŠSHGSҠADDSS. .MԠASSנGԠDAAHANN̠ADDSS SAUNSSAVŠHŠSHPNS. AND. SABSAVŠDAAHANN̠ADDSSNB ADAM.0"SUBA":S..-0B. SSASHANN̠NUMBҠ<0B? MPNGYSGϠSAԠNGUAN. ADAMAH"SUBA":S..-0B. SSASSSHANN̠NUMBҠ6B? MPNGYSGϠSAԠNGUAN. SPà DAñADAAàNSUNS ADAB SAM.3 SPà DAòADAAàNSUNS ADAB SAM.3 SPà DAôàDAANSUNS ADAB SAM.5 SAM.50 SAM.3 SPà DA5SSDAANSUNS ADAB SAM. SAM.6 SPà t| DAñSàDAAàNSUNS ADABNUDŠHŠHANN̠NUMB. SAM.9SŠHŠNSUN. SAM.SŠHŠNSUN. SPà DAñ3ƠDAANSUN. ADABNUDŠHŠHANN̠NUMB. SAM.SŠHŠNSUN. SPà DA6AMNDNSUNS ADAB SAS. SPà DA÷BMNDNSUNS ADAB SAS.0 SPà DAøSàMNDNSUNS ADAB SAP SAM.0SŠHŠNSUN. SPà DA9SSMNDNSUNS ADAB SAM.0 SAM. SPà DAñ0AMNDNSUNS ADAB SAM. SAM. SPà DAñSàMNDàNSUNS ADAB SAM. SAM.6 SPà DA0BMNDNSUN. ADAB SA.B SPà DA3àMNDNSUN. ADAB SAM. SAM.6 SPà DAUNSADHŠSHPNS. A̬A̠SHԠBԠϠBԠ0. SAA̠SMAMUMUNԠ3? MPNGYSһSA. A̠SHԠUNԠMAMUMϠ-0. AND.3SAŠHŠMAMUMUNԠNUMB. PA.3AŠHŠU(MԠUNS? MPSPYSMNAŠNGUAN. DBS0NϬADHŠS0MMAND. SBS3SԠUNԠ3ϠBŠUNԠ0. PADòAŠHŠH(3MԠUNS? MPSPYSMNAŠNGUAN. SBS̲NϬMAKŠUNԠUUNԠ0. PADñAŠHŠ(MԠUNS? MPSPYSMNAŠNGUAN. SBS̱NϬMAKŠUNԠUUNԠ0. SPà SPHԠBNDƠDVҠNGUAN. SPà DA.S̱xADHŠSԠUNԠMMAND. SAS̱SŠHŠMMAND. DA.S̲ADHŠSԠUNԠMMAND. SAS̲SŠHŠMMAND. DA.S3ADHŠSԠUNԠ3MMAND. SAS3SŠHŠMMAND. MP.M SPà .Ԡ M.0Ԡ-0 MAHԠ-60 UNSNP .S̱Ԡ0000SԠUNԠMMAND. .S̲Ԡ0000SԠUNԠMMAND. .S3Ԡ0000SԠUNԠ3MMAND. SPà ɯϠNSUNS SPà 0BMND ñADAA òADAA 3àMND ôàDAA 5SSDAA 6AMND ÷BMND øSàMND 9SSMND ñ0AMND ñSàMND ñSàDAA ñ3ƠDAA SPà NDƠASABŠNAZANSN SPà .P.̠U005BDVҠNGH. GK+035B-.P. SPà ..A.ƠSϠMԠDVҠMUSԠBŠ66B. SPà ..A.ƠSϠMԠDVҠMUSԠBŠ<ط35B. SKP ANGSUN:(ůAD SPà DA HED * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * * * THE TERM RTS/2100 IS SYNONYMOUS WITH RTE-C AND THE TERMS * ARE USED INTERCHANGEABLY THROUGHOUT THIS DOCUMENT. * * RTE-C EXEC * REV.A 15MAR74 E.WONG * REV.B 15APR74 JDH * REV.C 10MAR75 D.L.S. COPYRIGHT * ******************************************************* * NAM EXEC * ENT EXEC,$ABRT,$ERMG,$ALC,$RTN,$RQST ENT $LIBR,$LIBX,$PVCN * EXT $CVT3,$SYMG,$LIST,$TREM,$XEQ EXT $IRT SUP * ***** < EXEC > PROGRAM DESCRIPTION ***** * * THE PRIMARY FUNCTION OF THIS PROGRAM IS * TO PROVIDE GENERAL CHECKING AND EXAMINATION * OF SYSTEM SERVICE REQUESTS AND TO CALL THE * APPROPRIATE PROCESSING ROUTINE IN OTHER * SECTIONS OF THE REAL-TIME EXECUTIVE. * * THIS PROGRAM IS CALLED DIRECTLY FROM THE * CENTRAL INTERRUPT CONTROL SECTION * WHEN A MEMORY PROTECT VIOLATION IS ACKNOWLEDGED. * ALL SYSTEM REQUESTS BY A USER PROGRAM CAUSE A * PROTECT VIOLATION. * * SYSTEM REQUEST FORMAT: * ---------------------- * * THE GENERAL FORMAT OF A SYSTEM REQUEST IS * A BLOCK CONTAINING AN EXECUTABLE INSTRUCTION * TO GAIN ENTRY TO THE EXECUTIVE AND AN ADDRESS * LIST OF PARAMETERS. THE FIRST PARAMETER IS * A NUMERIC CODE IDENTIFYING THE REQUEST TYPE. * THE LENGTH OF THE PARAMETER LIST VARIES * ACCORDING TO THE AMOUNT OF INFORMATION RE- * QUIRED FOR EACH REQUEST (OR VARIATIONS WITHIN * A SINGLE REQUEST). THIS FORMAT ALLOWS SYSTEM * REQUESTS TO BE SPECIFIED IN A FORTRAN CALL ,* STATEMENT IN ADDITION TO ASSEMBLY LANGUAGE FORMAT. * * CALL EXEC (P1,P2,...PN) * * OR * * EXT EXEC * JSB EXEC (CAUSES MEMORY PROTECT VIOLATION) * DEF *+1+N DEFINE EXIT POINT, N= # PARAMETERS * DEF RCODE DEFINE REQUEST CODE * DEF P1 DEFINE PARAMETER LIST, 1 TO N * . * . (PARAMETERS MAY BE INDIRECTLY * . REFERENCED, E.G. DEF P3,I) * DEF PN * - EXIT POINT - * * RCODE DEC N * P1 DEC/OCT/DEF,ETC TO DEFINE A VLAUE * * * RE-ENTRANT LIBRARY REQUEST * -------------------------- * * THE SYSTEM LIBRARY (RESIDENT) CONTAINS * PROGRAMS STRUCTURED IN 'RE-ENTRANT' FORMAT * OR IN 'PRIVILEGED' EXECUTION FORMAT. * * - RE-ENTRANT FORMAT ALLOWS A LIBRARY * PROGRAM TO BE RE-ENTERED BY A CALL FROM * A HIGHER-PRIORITY PROGRAM DURING THE * PROCESSING OF A CALL FROM A LOWER-PRIORITY * PROGRAM. * * - PRIVILEGED EXECUTION FORMAT ALLOWS A * SHORT-RUNNING LIBRARY PROGRAM TO BE EXECUTED * WITH THE INTERRUPT SYSTEM DISABLED. * * * * MEMORY PROTECT ERROR: * --------------------- * * IF THE INSTRUCTION CAUSING THE PROTECT VIOLATION * IS NOT A JSB EXEC OR A JSB TO LIBRARY * PROGRAM, THEN A USER PROGRAM ERROR IS * ASSUMED. A DIAGNOSTIC IS OUTPUT TO THE SYSTEM * TELETYPE LISTING THE PROGRAM NAME AND ADDRESS * OF VIOLATING INSTRUCTION AND THE PROGRAM IS * SET DORMANT IN THE PROGRAM ABORT PROCEDURE. * SKP * EXEC NOP * HLT 0 PROTECTION AGAINST DIRECT CALL. * RTRQP LIA 5 GET ADDRESS OF VIOLATION. STA TEMP3 SAVE VIOLATION ADDRESS. STA XSUSP,I SET AS POINT OF SUSPENSION. STA TEMP1 SAVE (P+1) OF ISZ TEMP1 CALL. AND G76 MASK TO SAVE CURRENT STA TEMP2 PAGE ADDRESS. LDA TEMP3,I GET VIOLATING INSTRUCTION AND G74 GET INSTR CODE CPA JSB  IS IT JSB? RSS JMP MPERR NO, IT IS MEM PROT ERR * XOR TEMP3,I GET OPERAND ADDR ALF,CLE CHECK IF DIRECT RAL,ELA OR INDIRECT REF RAL,RAL AND CURRENT OR ALF,ALF BASE PAGE LINK SEZ IF INDIRECT. ADA TEMP2 JSB EFFAD GET EFFECTIVE ADDR CPA EXECA -EXEC-. JMP R0 YES, REQUEST TO BE ANALYSED. CPA LIBRA -LIBRARY ROUTINE CALLING FOR JMP LIBRC RE-ENTRANT OR PRIVILEGED RUN. CPA LIBXA -LIBRARY ROUTINE RETURNING JMP LIBXC TO CALLER. * * CHECK FOR USER CALL TO LIBRARY PROGRAM * STA B SAVE OPERAND ADDRESS. LDA LBORG SUBTRACT LIBRARY CMA,INA AREA ORIGIN FROM ADA B OPERAND ADDRESS. SSA MEMORY PROTECT ERROR IF JMP MPERR OPERAND LT LIBRARY ORIGIN. LDA RTORG SUBTRACT REAL-TIME CMA,INA AREA ORIGIN FROM ADA B OPERAND ADDRESS. SSA,RSS IF NOT CALL TO LIBRARY RESIDENT, JMP MPERR THEN VALID MEMORY PROTECT ERROR. LDA TEMP1 -CALL TO LIBRARY. STA B,I SET (P+1) ADDRESS IN ENTRY POINT ADB .2 SET (P+1) OF STB LIBR JSB LIBR IN -LIBR-. JMP LB1 - TRANSFER TO LIBR SECTION. SPC 1 JSB JSB 0 G76 OCT 76000 G74 OCT 74000 EXECA DEF EXEC RQP2A DEF RQP2 .16 DEC 16 N9 DEC -9 * * ANALYZE SYSTEM REQUEST * R0 LDB TEMP1 (B) = P+1 OF JSB EXEC. LDA B,I GET EXIT ADDRESS, STA RQRTN SAVE IN BASE PAGE INB STB TEMP1 SAVE REQUEST WORD 3 ADDRESS. CMB,INB SUBTRACT WORD 3 ADDRESS FROM ADA B EXIT ADDRESS. ADA N1 SUBTRACT 1 AGAIN TO DETERMINE STA RQCNT AND SAVE # OF ACTUAL PARAMETERS. STA B * SSA ERROR IF # JMP RQERR IS NEGATIVE OR ADA N9 IS GREATER SSA,RSS THAN s JMP RQERR 8. * LDA DEF10 SET DEF TO LOCAL VARIABLE STA RQP1 IN BASE PAGE. CLA - ZERO STA RQP2 STA RQP3 PARAMETER STA RQP4 STA RQP5 ADDRESS STA RQP6 STA RQP7 AREA STA RQP8 * CMB,INB SET PARAMETER # NEG. FOR INDEX * LDA TEMP1,I JSB EFFAD GET EFFECTIVE ADDR OF REQ WORD. LDA A,I SAVE ORIG. REQ CODE IN RQP10. STA RQP10 SZB,RSS IF NO ACTUAL PARAMS GIVEN, JMP R2 SKIP NEXT SECTION. * LDA RQP2A SET (TEMP2) = STA TEMP2 ADDRESS OF RQP2 IN BASE PAGE. ISZ TEMP1 R1 LDA TEMP1,I GET PARAM ADDR JSB EFFAD GET EFFECTIVE OPERAND ADDRESS. STA TEMP2,I SET IN BASE PAGE. ISZ TEMP2 INDEX ISZ TEMP1 ADDRESSES AND INB,SZB PARAMETER COUNT. JMP R1 - CONTINUE - SKP * * CHECK LEGALITY OF REQUEST CODE * R2 LDA RQP10 GET REQUEST CODE. LDB XEQT GET ADDR OF STATUS WORD ADB .15 IN ID SEGMENT. STB EFFAD LDB B,I GET STATUS BITS IN B. RAL,CLE,ERA PUT ABORT OPTION BIT IN E. RBL,ERB PUT E INTO SIGN OF STATUS. STB EFFAD,I SAVE IN ID SEGMENT. SSB IF OPTION SELECTED, ISZ RQRTN INCREMENT RETURN ADDR. STA RQP10 SAVE REAL REQ. CODE. CMA,INA,SZA ERR IF ZERO OR NEG SSA,RSS JMP RQERR SUBTRACT FROM # ADA CODE# OF REQUEST TYPES. SSA -ERROR IF LARGER JMP RQERR THAN # DEFINED. * LDA RQP1,I ADD REQUEST CODE ADA RQTBL TO FWA-1 OF REQUEST TABLE. LDA A,I GET LINK ADDR. OF PROCESSOR. JSB EFFAD GET EFFECTIVE ADDR * * TRANSFER TO REQUEST PROCESSOR * JMP A,I ACTIVATE PROCESSOR - NO RETURN. * * SUBROUTINE , COMPUTE EFFECTIVE ADDRESS * EFFAD NOP EFFD1 SZA ERR IF ADDR =  CPA .1 0 OR 1 JMP RQERR (A OR B REGISTERS) RAL,CLE,SLA,ERA TEST I-BIT AND CLEAR RSS -INDIRECT- JMP EFFAD,I RETURN WITH (A) = ADDRESS. LDA A,I GET NEXT ADDRESS IN INDIRECT JMP EFFD1 CHAIN AND PROCESS. SPC 1 .1 DEC 1 .2 DEC 2 N1 DEC -1 N2 DEC -2 TEMP1 NOP TEMP2 NOP TEMP3 NOP MASK4 OCT 77777 .15 DEC 15 DEF10 DEF RQP10 RQP10 NOP SKP * SUBROUTINES: AND USED FOR * SAVING AND RESTORING REGISTERS * IN LIBRARY PROGRAM PROCESSING. * SAVER NOP STA XA,I STB XB,I ERA,ALS SOC INA STA XEO,I JMP SAVER,I * RSTR NOP LDA XEO,I CLO SLA,ELA STF 1 LDA XA,I LDB XB,I JMP RSTR,I HED ** SUPERVISORY CONTROL OF LIBRARY PROGRAM EXECUTION ** * * SUPERVISORY CONTROL OF PROGRAM LIBRARY EXECUTION * * ALL LIBRARY PROGRAMS REFERENCED BY USER PROGRAMS * IN THE SYSTEM ARE COMBINED IN A BLOCK OF MEMORY * WHICH IS PROTECTED FROM THE REAL-TIME AREA. THE * LIBRARY AREA IS IMMEDIATELY BELOW THE RT AREA * AND JUST ABOVE THE SYSTEM AREA. * * A USER LIBRARY CALL CAUSES A PROTECT VIOLATION. * THIS SECTION FACILITATES ENTRY INTO THE LIBRARY * PROGRAM BY PERFORMING THE NECESSARY PROCESSING * FOR RE-ENTRANCY OR OPERATING THE PROGRAM WITH * THE INTERRUPT SYSTEM TURNED OFF FOR A 'PRIVILEGED' * EXECUTION PROGRAM. * * RE-ENTRANT OR PRIVILEGED PROGRAM FORMAT: * ---------------------------------------- * * ENTRY NOP * JSB LIBR * DEF TDB (OR 'NOP' IF PRIVILEGED) * - FIRST INSTRUCTION FOR FUNCTION - * - CODE * - TO * - PERFORM * - PROGRAM FUNCTION * EXIT JSB LIBX * DEF TDB (OR DEF ENTRY IF PRIVILEGED) * DEC N RETURN ADJUSTMENT FOR RE-ENTRANT * - * TDB NOP H!_OLDS LINKAGE TO PREVIOUS BLOCK * DEC N LENGTH OF TEMPORARY DATA BLOCK * NOP RETURN ADDRESS OF CALL. * - BLOCK USED FOR * HOLDING TEMPORARY * VALUES GENERATED * BY THE ROUTINE. * * * < LIBR > IS ENTERED WHEN A LIBRARY * PROGRAM IS CALLED. IF THE CALLED * PROGRAM IS 'RE-ENTRANT' AND IS CALLED * DURING THE PROCESSING OF A PREVIOUS * CALL, THE TEMPORARY-DATA-BLOCK IS * MOVED INTO A BLOCK IN AVAILABLE MEMORY * BEFORE THE ROUTINE IS ENTERED. * * LIBRA DEF LIBR * LIBRC LDA TEMP1 SET (P+1) OF STA LIBR JSB LIBR IN -LIBR-. JMP LB1 SKIP SAVING REGISTERS. * LIBR NOP -NON INTERRUPT ENTRY-- JSB SAVER ( SAVE REGISTERS IN ID SEGMENT) * LB1 LDB LIBR,I GET (P+2) OF -LIBR- CALL. SZB,RSS IF (P+2) = 0, THEN CALLED PROGRAM JMP PVEXC IS IN 'PRIVILEGED' FORMAT. * STB TEMP1 SAVE -TDB- ADDRESS. LDA B,I GET WORD 1 OF DATA BLOCK. INA IF -LINK- WORD = 0, THEN NEED NOT CPA .1 MOVE BLOCK BUT -LINK- WORD IS JMP LB4 SET TO = 1 AS FLAG. * INB GET -TDB- LDA B,I WORD LENGTH. STA LB2 SAVE FOR MEMORY ALLOCATION CMA,INA AND AS INDEX STA MVCNT FOR BLOCK MOVE. * JSB .ALC. ALLOCATE TEMPORARY BLOCK IN LB2 NOP AVAILABLE MEMORY. * SZA,RSS IF NO MEMORY AVAILABLE, JMP LB5 REJECT ORIGINAL CALLER. * STB TEMP3 SAVE NEW BLOCK LENGTH STA TEMP2 SAVE NEW BLOCK LOCATION. STA MVADR LDB TEMP1 (B) = TDB ADDRESS. LB3 LDA B,I MOVE TDB STA MVADR,I FROM ISZ MVADR LIBRARY RE-ENTRANT PROGRAM INB TO BLOCK ISZ MVCNT IN AVAILABLE JMP LB3 MEMORY. LDB TEMP3 CHECK NEW BLOCK CPB LB2 LENGTH AGAINST REQ. LENGTH. JMP LB4-1 = LDA TEMP2 NOT =, NEW ;BLOCK IS INA 1 WORD LONGER. LDB A,I SET BLOCK LENGTH WORD IN CMB,INB WORD 2 NEGATIVE TO STB A,I INDICATED CONDITION. LDA TEMP2 (A) = NEW BLOCK ADDRESS. * LB4 STA TEMP1,I SET 1 OR NEW ADDR. IN TDB(1). LDB TEMP1 (B) = ADDR. OF TDB. ADB .2 SET LDA LIBR (P+1) ADA N2 OF ORIGINAL LDA A,I CALL IN STA B,I WORD 3 OF TDB IN PROGRAM. ISZ LIBR SET TO FIRST INSTR IN LIB. PROG. * LDA LBORG SET MEMORY PROTECT BOUNDARY STA FENCE OTA 5 TO LIBRARY ORIGIN. * JSB $IRT RESET INTERRUPT CONDITIONS JSB RSTR RESTORE REGISTERS. * STF 0 TURN ON INTERRUPT SYSTEM STC 5 TURN ON MEMORY PROTECT * JMP LIBR,I TRANSFER TO LIBRARY PROGRAM. SPC 1 MVADR NOP MVCNT NOP PVCNT NOP * * REJECT SECTION CAUSED BY NO MEMORY * AVAILABLE FOR -TDB-. CALLING USER PROGRAM * IS SUSPENDED BACK TO POINT OF CALL AND * LINKED INTO MEMORY SUSPENSION LIST. * LB5 LDA XEQT SET ID SEGMENT ADDRESS STA LB6 IN CALL TO LIST * JSB LIST SUSPEND OCT 104 PROGRAM LB6 NOP JMP XEQ TRANSFER TO EXECUTE SECTION. * * * INITIATE PRIVILEGED EXECUTION OF USER PROGRAM * PVEXC JSB RSTR RESTORE REGISTERS. ISZ LIBR INDEX TO (P+2) OF CALL. ISZ PVCNT ADD 1 TO PRIV. EXECUTION COUNT. JMP LIBR,I TRANSFER TO PROGRAM. * SKP * < LIBX > IS ENTERED WHEN A LIBRARY * PROGRAM TERMINATES ITS EXECUTION. A * TEMPORARY DATA BLOCK IS MOVED BACK * INTO THE LIBRARY PROGRAM, IF REQUIRED, * BEFORE RETURN TO THE ORIGINAL CALLER. * * LIBXA DEF LIBX * LIBXC LDA TEMP1 SET (P+1) OF STA LIBX JSB LIBX JMP LB10 IN LIBX. * LIBX NOP - NON-INTERRUPT ENTRY - JSB SAVER SAVE REGISTERS. * LB10 LDA PVCNT IF PVCNT IS ZERO, THEN SZA,bRSS RETURNING PROGRAM JMP LB13 IS RE-ENTRANT. * ADA N1 -PRIVILEGED- PROGRAM. STA PVCNT SUBTRACT 1 FROM PVCNT. LDB LIBX,I GET (P+1): LOCATION OF ENTRY LDB B,I POINT. GET AND STB LIBX SET RETURN ADDRESS. SZA,RSS IF PVCNT NOW = 0, THEN RETURNING JMP LB11 TO USER OR RE-ENTRANT PROGRAM. * JSB RSTR RETURNING TO JMP LIBX,I 'PRIVILEGED' PROGRAM. * LB11 LDA LIBX IF RETURN CMA,INA POINT IS TO ADA RTORG USER, SSA GO TO SET JMP LB16 MEMORY PROTECT FENCE. * LB12 JSB $IRT RESET INTERRUPT CONDITIONS JSB RSTR -RETURN TO RE-ENTRANT OR USER. STF 0 TURN INTERRUPT SYSTEM ON. STC 5 TURN MEMORY PROTECT ON. JMP LIBX,I -RETURN- * * RE-ENTRANT PROGRAM RETURNING TO USER CALL. * LB13 LDB LIBX,I SET -TDB- ADDRESS. STB TEMP1 IN TEMP1. ISZ LIBX SET TO (P+2) OF CALL TO -LIBX-. INB GET TDB LDA B,I LENGTH - CMA,INA SET AS INDEX STA MVCNT FOR PREVIOUS TDB MOVE. INB GET LDA B,I RETURN POINT ADJUSTMENT. ADA LIBX,I ADD TO (P+1) OF LIBRARY CALL STA LIBX AND SET FOR RETURN TO USER. * LDB TEMP1,I GET PREVIOUS -TDB- LOCATION. CLA IF NO CPB .1 PREVIOUS BLOCK, THEN GO JMP LB17 TO SET WORD 1 OF TDB = 0. STB MVADR SAVE PREVIOUS STB LB15 TDB ADDRESS. LDB TEMP1 (B) = ADDR. OF TDB AREA IN PROG. LB14 LDA MVADR,I MOVE STA B,I PREVIOUS ISZ MVADR -TDB- INB BACK ISZ MVCNT INTO RE-ENTRANT JMP LB14 LIBRARY PROGRAM. LDB TEMP1 CHECK INB FOR NEED TO LDA B,I RELEASE 1 MORE THAN TDB LENGTH. SSA,RSS IF LENGTH WORD +, JMP *+4 THEN USE STATED LENGTH. 1CMA,INA SET POSITIVE AND STA B,I RESTORE IN PROGRAM TDB. INA ADD 1 FOR RELEASE CALL. STA LB15+1 * JSB .RTN. RELEASE PREVIOUS -TDB- AREA. LB15 NOP - FWA BLOCK AREA - NOP - LENGTH IN WORDS- JMP LB11 GO TO CHECK RETURN ADDRESS * * SET MEMORY PROTECT FENCE FOR RETURN TO USER * LB16 LDB RTORG (B) = REAL-TIME ORIGIN STB FENCE OTB 5 SET MEMORY PROTECT FENCE REGISTER * JMP LB12 GO TO RETURN TO USER. * * LB17 STA TEMP1,I FOR NO MOVE, SET WORD 1 OF PROG. JMP LB11 TDB = 0, GO TO CHECK RETURN. * HED * DYNAMIC MEMORY ALLOCATION ROUTINE * * DYNAMIC MEMORY ALLOCATION ROUTINE * * THIS ROUTINE PROVIDES FOR THE DYNAMIC * ALLOCATION AND RELEASE OF BLOCKS IN THE * SYSTEM AVAILABLE MEMORY AREA WHICH IS * POSITIONED BETWEEN THE REAL-TIME * AND BACKGROUND AREAS. * * .ALC. : ALLOCATE BLOCK * .RTN. : RELEASE BLOCK * * CALLING SEQUENCES: * * 1. .ALC. * . REGISTERS MEANINGLESS * (P) JSB .ALC. * (P+1) (# WORDS NEEDED) * (P+2) - RETURN - * * ON RETURN: * (A) = FWA NEW BLOCK OR (A) = 0 * (B) = # WORDS ALLOCATED ( MAY BE 1 * GREATER THAN REQUESTED) * (A) = 0 IF NO MEMORY AVAILABLE * * 2. (P) JSB .RTN. * (P+1) (FWA OF BUFFER) * (P+2) (# WORDS RETURNED) * (P+3) - RETURN - REGISTERS MEANINGLESS * * * .ALC. NOP LDA PNTR CHECK FOR FIRST SZA CALL. JMP MEM1 NO. * LDA AVMEM YES, INITIALIZE MEMORY BLOCK. CMA,INA SET WORD1 = # AVAILABLE. ADA BKORG ( BKORG - FWA AVAILABLE MEMORY ) STA AVMEM,I LDB AVMEM INITIALIZE STB PNTR -PNTR- TO FWA BLOCK. INB SET WORD2 = 77777 LDA MASK4 TO MEAN ONLY STA B,I 1 LARGE BLOCK. LDA 4PNTR * MEM1 CPA MASK4 PNTR = 77777 MEANS NO MEMORY JMP MEM7 IS NOW AVAILABLE, REJECT. STA AAD OTHERWISE, BEGIN SEARCH. * MEM2 LDB .ALC.,I (B) = LENGTH REQUESTED : (X). STB SAVB SET BUFFER LENGTH. CMB,INB - X ADB A,I LENGTH CURRENT (I) - LENGTH (X) SSB,RSS >=0? JMP MEM3 YES, ALLOCATE THIS BLOCK. INA LDB A,I (B) = FORWARD ADDRESS (FWD) OF I CPB MASK4 IF FWD(I)=77777 THEN DONE, JMP MEM7 NO BLOCK WAS FOUND, REJECT. LDB AAD MOVE THIS BLOCK POINTER STB BAD TO LAST BLOCK POINTER, LDA A,I AND NEXT BLOCK TO STA AAD THIS BLOCK. JMP MEM2 REPEAT LOOP. * MEM3 ADB N2 IS BLOCK AT LEAST 2 WORDS SSB LARGER THAN REQUEST? JMP MEM4 -NO, ALLOCATE ENTIRE BLOCK. ADB .2 (B) = LENGTH(I) - LENGTH(X) STB AAD,I SET NEW L(I). ADB AAD STB SAVA SAVA = NEW BLOCK ADDRESS. JMP MEM6 -EXIT-. * MEM4 LDB AAD,I SET BUFFER TO LENGTH(I) TO ALLO- STB SAVB CATE LENGTH (X) + 1. STA SAVA AAD IS BUFFER ADDRESS. CPA PNTR IS THIS FIRST BLOCK? JMP MEM5 YES, MOVE PNTR TO FWD(I) INA NO - LDB A,I FWD(I) TO LDA BAD INA STB A,I FWD(I-1) JMP MEM6 * MEM5 INA SET LDB A,I PNTR TO NEW STB PNTR FIRST BLOCK. * MEM6 ISZ .ALC. ADJUST RETURN TO (P+2). LDA SAVA (A) FWA OF NEW BLOCK LDB SAVB (B) LENGTH OF BLOCK JMP .ALC.,I - EXIT - * MEM7 CLA -REJECT, SET (A) = 0. ISZ .ALC. ADJUST RETURN TO (P+2) JMP .ALC.,I AND -EXIT- SKP .RTN. NOP LDA .RTN.,I (A) = FWA RETURN BUFFER STA ADX TO (ADX). ISZ .RTN. LDA .RTN.,I # WORDS RETURNED (X) ADA N2 SSA < 2 ? JMP MEM18 )7 BUFFER TOO SMALL-IGNORE. * CLA STA BAD LDB PNTR * MEM10 STB AAD PNTR TO AAD CMB,INB ADB ADX SSB ADX - AAD >= 0? JMP MEM11 LDA AAD YES, STA BAD AAD TO BAD INA LDB A,I NEXT BUFFER ADDRESS TO AAD JMP MEM10 - CONTINUE SCAN. * MEM11 ADB .RTN.,I X + ADX >= AAD? SSB JMP MEM12 NO LDA AAD LDB ADX CMB,INB ADB AAD ADB AAD,I STB ADX,I L(X) = L(A) + AAD - ADX INA LDB A,I (B) = FWD(A) LDA ADX INA STB A,I FWD(A) TO FWD (X) JMP MEM13 * MEM12 LDA .RTN.,I X NOT CONTIGUOUS WITH A STA ADX,I LDA ADX INA LDB AAD STB A,I FWD(X) = AAD * MEM13 LDB BAD SZB,RSS ANY LOWER BLOCKS? JMP MEM14 NO, DONE INB LDA ADX CPA BAD SAME BLOCK? RSS YES, DO NOT SET FWD(B). STA B,I ADX TO FWD(B) LDA BAD ADA BAD,I LDB ADX CMB,INB ADB A SSB BAD + L(B) >= ADX? JMP MEM15 NO, DONE. LDA ADX YES, B AND X OVERLAP INA LDB A,I LDA BAD INA STB A,I FWD(X) TO FWD(B) CMA,INA INA ADA ADX ADA ADX,I STA BAD,I L(B) = L(X) + ADX - BAD JMP MEM15 * MEM14 LDA ADX X IS NOW STA PNTR FIRST BLOCK * * A BLOCK HAS BEEN RETURNED - ALL PROGRAMS * WAITING FOR AVAILABLE MEMORY ARE LINKED * BACK INTO THE SCHEDULE LIST FROM THE * MEMORY SUSPENSION LIST. * MEM15 LDA SUSP3 GET SUSPENSION LIST POINTER SZA,RSS IF EMPTY LIST, JMP MEM18 GO TO EXIT. * MEM16 STA MEM17 SAVE ID SEGMENT ADDRESS. LDA A,I GET NEXT LINK ADDRESS STA SAVA AND SAVE. * JSB LIST CALL *SCHEDULER* TO OCT 101 LINK INTO -SCHEDULE- LIST. MEM17 2HFBNOP - ID SEGMENT ADDRESS - * LDA SAVA IF END OF LIST, SZA EXIT ROUTINE JMP MEM16 -SCHEDULE NEXT PROGRAM IN LIST- * MEM18 ISZ .RTN. JMP .RTN.,I * * PNTR NOP AAD NOP BAD NOP ADX NOP * SAVA NOP SAVB NOP * =H SKP HED * EXEC - ERROR MESSAGE AND ABORT SECTION * * * ERROR SECTION * * THE FOLLOWING DIAGNOSTICS ARE OUTPUT ON THE * SYSTEM TELETYPEWRITER ON DETECTION OF: * * 1) VALID MEMORY PROTECT VIOLATION (I.E THE * INSTRUCTION CAUSING THE VIOLATION IS * NOT JSB EXEC. * * MP -PNAME- -PADDR- * * 2) REQUEST CODE UNDEFINED OR ILLEGAL * NUMBER OF PARAMETERS * * RQ -PNAME- -PADDR- * * THE ROUTINE -ERMSG- IS USED TO FORMAT * THE DIAGNOSTIC AND CALL FOR ITS OUTPUT. * * MPERR LDA MP (A) = 'MP' RSS * RQERR LDA RQ1 (A) 'RQ' LDB BLANK (B) = BLANKS JSB ERMSG LDA XEQT ABORT JSB ABORT PROGRAM. JMP XEQ * MP ASC 1,MP BLANK ASC 1, RQ1 ASC 1,RQ * * SUBROUTINE: * * PURPOSE: THIS ROUTINE FORMATS A DIAGNOSTIC * MESSAGE WHICH CONTAINS A FOUR * CHARACTER MNEMONIC DESCRIBING THE * ERROR WITH THE PROGRAM NAME AND * LOCATION OF THE ERROR. IT THEN * CALLS THE ROUTINE TO * OUTPUT THE MESSAGE. * * CALL: (A),(B) CONTAIN A 4 ASCII CHARACTER * MNEMONIC OR CODE DESCRIBING THE ERROR * * (P) JSB ERMSG * (P+1) - RETURN - (REGISTERS MEANINGLESS) SKP * ERMSG NOP * STA MSG+1 SET ERROR MNEMONIC IN STB MSG+2 FIRST 4 CHARACTERS OF MESSAGE. * LDB XEQT GET ADDR OF SUSPENSION ADB .8 WORD IN ID SEG AND SAVE. STB DSKD2 ADB .4 LDA B,I SET STA MSG+4 PROGRAM INB NAME LDA B,I IN STA MSG+5 MESSAGE. CLE,INB (E=0 FOR ASCII CONVERSION) LDA B,I AND MASK5 IOR .40 STA MSG+6 INB GET STATUS WORD FROM ID SEG. LDA B,I RAL,CLE,SLA,ERA IF ABORT OPTION SET, JMP NOABT GO SET IT UP. * ERM LDA XSUSP,I GET LOCATION OF ERROR JSB CVT3 p CONVERT TO OCTAL/ASCII FORMAT STA B (B) = ADDR. OF 3-WORD BLOCK LDA B,I MAKE AND MASK3 LEADING IOR UBLNK ZERO A BLANK FOR STA MSG+7 5-DIGIT MEMORY ADDRESS. INB SET LDA B,I ADDRESS STA MSG+8 IN INB MESSAGE. LDA B,I STA MSG+9 * LDA MSGA CALL TO JSB SYSMG OUTPUT DIAGNOSTIC. * JMP ERMSG,I * MASK3 OCT 377 MASK5 OCT 177400 UBLNK OCT 20000 * MSGA DEF *+1 * MSG DEC -18 ASC 9, * N6 DEC -6 .4 DEC 4 .6 DEC 6 .8 DEC 8 DSKD2 NOP DSKED NOP * NOABT ADB N6 DECR. TO ADDR OF A,B WORDS STB ABM OF ID SEG AND SAVE. LDA DSKD2,I GET SUSPENSION ADDR. LDB XEQT WAS IS SET UP? CPB XLINK LDA RQRTN NO, SO USE RQRTN-1. ADA N1 STA DSKED SAVE FOR ABORT ROUTINE. DLD MSG+1 GET ABORT WORDS. CPA MP IF MEMORY PROTECT, JMP ERM GO ABORT ANYWAY. DST ABM,I SEND ABORT MSG BACK IN A,B. ISZ AB0 CHANGE ABORT TO SCHEDULE. JMP ERMSG,I SKP * ROUTINE: < ABORT > * * PURPOSE: THIS ROUTINE PROVIDES FOR REMOVING * A USER PROGRAM FROM EXECUTION USUALLY * AFTER AN ERROR CONDITION IS DETECTED * WHICH PROHIBITS CONTINUED EXECUTION. * THE PROGRAM IS SET TO THE DORMANT * STATE, TIME INTERVAL REMOVED AND * THE PROGRAM NAME IS SET IN THE MESSAGE * "XXXXX ABORTED" WHICH IS PRINTED * ON THE SYSTEM TELETYPE. * * CALL: (A) = ID SEGMENT ADDRESS * (P) JSB ABORT * (P+1) -RETURN- (REGISTERS MEANINGLESS) * ABORT NOP SET ID SEGMENT ADDRESS STA AB1 IN CALL TO . JSB LIST CALL TO SET AB0 OCT 100 PROGRAM IN DORMANT LIST. AB1 NOP -HOLDS PROGRAM ID SEGMENT ADDR. LDA AB0 GET SCHED FLAG. f& RAR,CLE,ELA SET BACK TO DORMANT STA AB0 AND RESTORE, SEZ IF ABORT OPTION SET, JMP AB2 THEN GO SET SUSP ADDR. LDB AB1 (B) = ADDR. OF -TLINK- IN ADB .16 ID SEGMENT. JSB TREMP REMOVE TIME SELECTION LDB AB1 SET (B) = ADDRESS OF 3-WORD ADB .12 PROGRAM NAME IN ID SEGMENT. LDA B,I SET STA ABM PROGRAM INB NAME LDA B,I IN STA ABM+1 MESSAGE INB LDA B,I AND MASK5 IOR .40 STA ABM+2 LDA ABMA PRINT MESSAGE: JSB SYSMG "XXXXX ABORTED" JMP ABORT,I -EXIT- * AB2 LDA DSKED GET PT OF SUSP. STA DSKD2,I SET INTO ID SEGMENT. JMP ABORT,I RETURN. * ABMA DEF *+1 DEC -13 ABM ASC 7,XXXXX ABORTED SPC 1 .12 DEC 12 .40 OCT 40 HED * EXEC -- EQU TABLE * * ENTRY POINTS OF THE MODULES OF THE REAL-TIME * EXECUTIVE BEGIN WITH '$' TO AVOID DUPLICATE * ENTRY POINT NAMES WITH USER PROGRAMS. * $ABRT EQU ABORT $ERMG EQU ERMSG $ALC EQU .ALC. $RTN EQU .RTN. $RQST EQU RTRQP $LIBR EQU LIBR $LIBX EQU LIBX $PVCN EQU PVCNT CVT3 EQU $CVT3 SYSMG EQU $SYMG LIST EQU $LIST TREMP EQU $TREM XEQ EQU $XEQ SPC 1 A EQU 0 B EQU 1 HED * EXEC -- REQUEST CODE TABLE * *** REQUEST CODE TABLE *** * * THIS DEFINES THE RELATION FOR SYSTEM * REQUEST CODES AND CORRESPONDING PROCESSORS. * THE TABLE CONSISTS OF ONE-WORD ENTRIES IN * NUMERIC ORDER CORRESPONDING TO THE DEFINED * SYSTEM REQUEST CODES. THE CONTENTS OF EACH * ENTRY IS THE BASE PAGE LINKAGE ADDRESS OF * THE WORD CONTAINING THE ENTRY POINT ADDRESS * OF THE PROCESSOR. AN -EXT- MUST BE USED * WITH THE -DEF- IN DEFINING THE TABLE. * * THE WORD LABELLED -CODE#- CONTAINS THE * TOTAL # OF REQUEST CODE. * RQTBL DEF * DEFINE FWA-1 OF TABLE * EXT $IORQ IOREQ EQU $IORQ DEF IOREQ CODE 1 NI/O READ DEF IOREQ CODE 2 I/O WRITE DEF IOREQ CODE 3 I/O CONTROL * DEF RQERR CODE 4 DISC TRACK ALLOCATION DEF RQERR CODE 5 DISC TRACK RELEASE * EXT $MPT1 MEMP1 EQU $MPT1 DEF MEMP1 CODE 6 PROGRAM COMPLETION * EXT $MPT2 MEMP2 EQU $MPT2 DEF MEMP2 CODE 7 OPERATOR SUSPENSION * DEF RQERR CODE 8 LOAD PROGRAM SEGMENT * EXT $MPT4 MEMP4 EQU $MPT4 DEF MEMP4 CODE 9 SCHEDULE WITH WAIT * EXT $MPT5 MEMP5 EQU $MPT5 DEF MEMP5 CODE 10 SCHEDULE PROGRAM * EXT $MPT6 MEMP6 EQU $MPT6 DEF MEMP6 CODE 11 REAL TIME/DATE * EXT $MPT7 MEMP7 EQU $MPT7 DEF MEMP7 CODE 12 TIME SELECTION * DEF IOREQ CODE 13 I/O DEVICE STATUS * DEF RQERR CODE 14 NOT VALID * DEF RQERR CODE 15 GLOBAL TRACK ASSIGNMENT DEF RQERR CODE 16 GLOBAL TRACK RELEASE * * * * DEFINE END OF TABLE AND # ENTRIES IN TABLE. * -CODE# MUST FOLLOW TABLE ENTRIES. * -ADDITIONAL REQUESTS MAY BE INSERTED * AT THIS POINT. * CODE# ABS *-1-RQTBL * BSS 0 SIZE OF EXEC MODULE HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** * *** SYSTEM BASE PAGE COMMUNICATION AREA *** * . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15 - WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 8 PARAMETERS) * * DEFINITION OF SYSTEM LISTS (QUEUES) * * DORMT EQU .+32 ADDRESS OF 'DORMANT' LIST, SKEDD EQU .+33 'SCHEDULE' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU =$".+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BABKGSMUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND * END EXEC $  29101-80002 B S C0522 RTE-C SCHED              H0105 eASMB,R,B,L,C * * THE TERM RTS/2100 IS SYNONYMOUS WITH RTE-C AND THE TERMS * ARE USED INTERCHANGEABLY THROUGHOUT. NAM SCHED 29101-60002 REV.B 12-17-74 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * * RTE-C SCHED * SOURCE: 29101-80002 REV.B * BINARY: 29101-60002 REV.B * E. WONG * MAR. 15, 1973 * * SCHED ENTRY POINT NAMES * ENT $XEQ,$LIST,$MESS,$CVT3,$STRT,$TYPE ENT $MPT1,$MPT2,$MPT4,$MPT5,$MPT6 ENT $MPT7,$CLCK,$TADD,$TREM ENT $WORK,$LINK * * SCHED EXTERNAL REFERENCE NAMES * EXT $XSIO,$IOUP,$IODN,$ERMG EXT $ABRT,$LUPR,$EQST,$IOCL EXT $SYMG,$IRT,$DEVT,$CHTO * SUP * ******************************************************************** * * THE SCHED MODULE OF HP2100 REAL TIME EXECUTIVE CONSISTS OF * * * 1. TIME PROCESSOR ROUTINES * * 2. PROGRAM SCHEDULE, EXECUTION, AND SWITCHING ROUTINES * * 3. LIST PROCESSORS * * 4. LINK PROCESSORS * * 5. OPERATOR INPUT MESSAGE PROCESSORS * * 6. SYSTEM START UP AND OPER INPUT REQUEST ACKNOWLEDGE * * 7. MEMORY PROTECT VIOLATION SCHEDULER PREPROCESSORS * * ******************************************************************** HED REAL TIME CLOCK-TIME LIST PROCESSING ******************************************************************** * THE REAL TIME CLOCK PROCESSOR SECTION OF HP-2100 REAL TIME* * EXECUTIVE HANDLES ALL TIME DEPENDENT FUNCTIONS: yr * * 1. INCREMENT REAL TIME CLOCK VALUES EVERY 10 MILLISECOND. * * 2. SCHEDULE PROGRAMS AT THE REQUESTED TIME AND COMPUTE ITS* * NEXT START TIME. * * 3. ADD PROGRAMS TO THE TIME LIST. * * 4. REMOVE PROGRAMS FROM THE TIME LIST. * * 5. OUTPUT CURRENT SYSTEM TIME TO USER ARRAY. * * 6. SET ID SEGMENT VALUES AS REQUESTED BY USER. * ******************************************************************** ** * THE $CLCK ROUTINE FUNCTIONS AS FOLLOWS: * * THE ROUTINE IS ENTERED EVERY 10 MILLISECOND DUE * * TO TIME BASE GENERATOR INTERRUPTS. * * THE TIME VALUE IS INCREMENTED BY 10 MILLISECONDS. * * THE TIME VALUES OF EACH PROGRAM IN TIME LIST IS * * COMPARED TO THE CURRENT TIME. IF THE TIMES * * COMPARE AND THE PROGRAM IS DORMANT, A SCHEDULE * * REQUEST IS MADE VIA LIST PROCESSOR. REGARDLESS * * OF PROGRAM STATUS, THE NEXT START TIME IS * * COMPUTED UNLESS THE MULTIPLE VALUE IS ZERO- * * WHICH MEANS THAT THE PROGRAM IS TO BE REMOVED * * FROM TIME LIST. * * THE TIME-OUT CLOCKS FOR ALL ACTIVE DEVICES ARE * UPDATED. IF ANY DEVICE HAS TIMED-OUT, * RTIOC IS ENTERED TO PROCESS THE CONDITION. * * * $CLCK ISZ TMS INCR 10 MSEC COUNT JMP CL010 GO TO PROCESS LISTS LDA TTAB+1 RESET 10 MSEC STA TMS ISZ SECS INCREMENT SECONDS COUNTER JMP CL010 GO TO PROCESS LISTS LDA TTAB+2 RESET SEC COUNT STA SECS ISZ MINS INCREMENT MINUTES COUNTER JMP CL010 GO TO PROCESS LISTS STA MINS ISZ HRS INCREMENT HOURS COUNTER JMP CL010 GO TO PROCESS LISTS LDA TTAB+4 RESET HR COUNT STA HRS ISZ DAYS INCREMENT DAYS COUNTER * * CHECK IF TIME TO SCHEDULE PROGRAM CL010 LDB TLIST TIME LIST CL011 SZB,RSS IF THRU PROCESSING IT, GO JMP IOTOP PROCESS DEVICE TIME-OUT CLOCKS- STB TLINC SAVE TIME LINK ADB D2 B NOW PTS TO 10 S OF MILLISECOND LDA B,I CPA TMS INB,RSS TENS OF MILLISECOND COMPARE JMP CH010 DO NOT COMPARE, SO CHECK NEXT PROG * LDA B,I CPA SECS INB,RSS SECONDS COMPARE JMP CH010 DO NOT COMPARE-GO TO NEXT PROG * LDA B,I CPA MINS INB,RSS MINUTES COMPARE JMP CH010 DO NOT COMPARE-GO TO NEXT PROG * LDA B,I CPA HRS JMP CH020 HOURS COMPARE-SO TIME COMPARES * * INCREMENT TO NEXT PROGRAM IN LIST CH010 LDB TLINC,I GET ADDR OF NEXT PROG IN LIST JMP CL011 GO TO COMPARE NEXT PROG IN LIST * * PROGRAM TO BE SCHEDULED CH020 LDA TLINC COMPUTE ID SEGMENT ADDRESS ADA DM16 STA CH025 ADA D15 LDA A,I AND D15 CHECK STATUS SZA DORMANT SO GO SCHEDULE IT JMP CH026 NOT DORMANT, GO COMPUTE NEXT TIME JSB $LIST CALL LIST PROCESSOR TO SCHED PROG OCT 101 THE PROGRAM CH025 DEF * * * CHECK IF NEXT SCHEDULE TIME TO BE COMPUTED CH026 LDB TLINC INB LDA B,I RES CODE/MULT FACTOR AND M7777 SZA,RSS IF ZERO, THEN NO NEW START TIME JMP CH040 GO REMOVE PROG FROM LIST STA TEMP SAVE MULTIPLICATION FACTOR XOR B,I FORM RESOLUTION CODE ALF,CLE,ERA STA TEMP1 RESOLUTION CODE ADB A TIME VALUE ADDRESS ADA TTAB STA TEMP2 TABLE VALUE ADDRESS * LDA TEMP1 ADA DM5 STA TCC LOOP COUNTERR STB TEMP1 SAVE ADDR OF RES CODE LDB TEMP GET MULT CH027 LDA TEMP1,I GET TIME VALUE ADA B INCRE BY MULT CLB CH030 STA TEMP1,I STORE IT BACK SSA DONE YET? JMP CH035 -, SO DONE ADA TEMP2,I ADD TABLE VALUE INB INCRE COUNT JMP CH030 GO TO CHECK IF O K CH035 ISZ TCC SZB,RSS JMP CH010 DONE WITH ALL VALUES ISZ TEMP2 INCR TABLE ADDRESS ISZ TEMP1 GO TO NEXT TIME VALUE JMP CH027 * * REMOVE PROGRAM FROM TIME LIST CH040 LDB TLINC VALUE OF TLINK JSB $TREM GO TO REMOVE PROGRAM JMP CH010 GO TO PROCESS NEXT PROGRAM * * REAL TIME IS INITIALIZED TO 0,0,0,0,0 TLIST NOP TOP OF TIME SCHEDULE LIST TMS DEC -100 REAL TIME TENS OF MILLISEC SECS DEC -60 REAL TIME SECONDS MINS DEC -60 REAL TIME MINUTES HRS DEC -24 REAL TIME HOURS DAYS NOP REAL TIME DAYS * * TABLE OF CONSTANTS FOR CLOCK PROCESSING TTAB DEF * DEC -100 DEC -60 DEC -60 DEC -24 * * PROCESS DEVICE TIME-OUT CLOCKS * IOTOP LDA EQT# SET NEGATIVE OF CMA,INA NUMBER OF EQT STA TEMP ENTRIES FOR INDEX LDA EQTA POINT TO WORD 15 IOTO2 ADA D14 OF EQT ENTRY LDB A,I LOAD WORKING CLOCK- SZB IS IT ACTIVE? ISZ A,I YES: INCREMENT IT INA,RSS IT HAS NOT TIMED-OUT JMP $DEVT GO TO TIME-OUT PROCESSOR ISZ TEMP THRU? JMP IOTO2 NO: GO DO NEXT ONE JMP $XEQ YES; NO TIME-OUTS-RETURN SPC 1 M7777 OCT 7777 HED TIME ROUTINE TO GET CURRENT SYSTEM TIME * THE TIME ROUTINE CONVERTS THE CURRENT REAL TIME VALUES * * AND STORES THE VALUES INTO A USER SPECIFIED BUFFER. * * * * ROUTINE TO PROVIDE CURRENT SYSTEM TIME * n CALLING SEQUENCE * JSB TIME * RQP2 CONTAINS BEGIN ADDRESS OF 5 WORD BUFFER * ON RETURN, * ARRAY(1) = TENS OF MILLISECOND * ARRAY(2) = SECONDS * ARRAY(3) = MINUTES * ARRAY(4) = HOURS * ARRAY(5) = DAYS * TIME NOP ENTRY/EXIT LDB RQP2 ADDRESS OF ARRAY LDA TMS ADA D100 STA B,I TENS OF MILLISECONDS INB LDA SECS ADA D60 STA B,I SECONDS INB LDA MINS ADA D60 STA B,I MINUTES INB LDA HRS ADA D24 STA B,I HOURS INB LDA DAYS STA B,I DAYS JMP TIME,I EXIT HED TIMER ROUTINE SETS UP ID SEGMENT TIME VALUES * * * THE TIMER ROUTINE WHICH ALLOWS USER TO ENTER TIME VALUES * * INTO AN ID SEGMENT FUNCTIONS AS FOLLOWS: * * IF PROG VALUE IS ZERO, THEN CURRENT EXECUTING PROG. * * AND IF NON-ZERO, THEN SEARCH FOR ID SEGMENT * * ADDRESS. * * IF RESOLUTION CODE SPECIFIED IS ZERO, THEN ERROR * * EXIT TAKEN. * * IF RESOLUTION CODE IS NON-ZERO, THEN RES/MULT WORD * * STORED. THE NEXT VALUE IS CHECKED FOR + OR -. * * IF PLUS, THEN NEXT START TIME VALUES GIVEN AND * * ARE STORED AND PROGRAM ENTERED INTO TIME LIST. * * IF MINUS, THEN THE COMPLEMENT OF VALUE IS ADDED* * TO THE CURRENT TIME AND ENTERED INTO THE ID * * SEGMENT. IF PROG VALUE IS ZERO, THIS IS TO BE A* * TIME DELAY OF CURRENT PROGRAM AND THUS PROGRAM * * IS SET DORMANT VIA LINK PROCESSOR BUT POINT OF * * SUSPENSION IS NOT CLEARED. IF PROG VALUE IS NON* * ZERO, THEN PROGRAM IS ENTERED INTO TIME LIST. * * THIS IS METHOD FOR SPECIFYING AN INITIAL OFFSET* * TIME. * * * ROUTINE TO SET ID SEGMENT TIME VALUES * CALLING SEQUENCE * JSB EXEC * DEF *+6 OR DEF *+9 * DEF REQUEST CODE ADDRESS RQP1 * DEF PROG RQP2 * DEF RES RQP3 * DEF MULT RQP4 * DEF OFFSET OR DEF HRS RQP5 * DEF MINS RQP6 * DEF SECS RQP7 * DEF TENS OF MSEC RQP8 * WHERE * PROG = 0 IF CURRENTLY EXECUTING * = ADDRESS OF PROGRAM NAME * RES = 1 FOR 10 MILLISECOND RESOLUTION * = 2 FOR SECONDS RESOLUTION LIST * = 3 FOR MINUTES RESOLUTION LIST * = 4 FOR HOURS RESOLUTION LIST * MULT = 0 FOR N0 MULTIPLE VALUE * = N A POSITIVE INTEGER FOR COMPUTING * NEXT SCHEDULE TIME * OFFSET= M A NEGATIVE INTEGER FOR COMPUTING INITIAL * OFFSET TIME * HRS= START TIME HOURS * MINS= START TIME MINUTES * SECS= START TIME SECONDS * TENS= START TIME TENS OF MILLISECONDS * TIMER NOP ENTRY/EXIT LDA RQP2,I LOAD PROG VALUE SZA,RSS JMP TI010 ZERO SO CURRENT PROG LDB RQP2 JSB TNAME GO TO GET PROG ID SEGMENT ADDRESS LDB ER5 NO SUCH PROG ERR RETURN SZA,RSS ANY ERROR? JMP TI011 YES * LDB A RSS TI010 LDB XEQT AD[B D17 RESOLUTION CODE ADDR STB TCC ISZ TCC TCC=TMSEC ADDR LDA RQP3,I CHECK RES CODE VALUE SZA IF ZERO, THEN ILLEGAL VALUE JMP TI009 * TI008 LDB ER6 RES CODE ERROR TI011 INA JMP TIMER,I TIMER ERROR RETURN * TI009 ADA DM5 IF RES GREATER THAN 4, SSA,RSS THEN ILLEGAL VALUE JMP TI008 ERROR RETURN LDA B,I SAVE BIT12 IN (E) ALF,ERA SINCE PROG MAY BE IN TIME LIST LDA RQP3,I GET RESOL CODE ELA,ALF FILL IN BIT12 ALF,ALF AND FILL IN XOR RQP4,I MULT FACTOR STA B,I SAVE NEW RES/MULT WORD LDA RQP5,I NEGATIVE IF OFFSET SSA,RSS POSITIVE IF START TIME JMP TI100 * * OFFSET TIME * LDA RQP2,I CHECK IF CURRENT XEQ PROGRAM SZA JMP TI012 NO LDB XEQT SETUP TO CALL LINK PROCESSOR STB WORK TO REMOVE PROG FROM SCHEDULE STB WLINK LIST AND ENTER INTO DORMANT ADB D6 LIST WITHOUT CLEARING PT OF STB WPRIO SUSPENSION, ETC ADB D9 STA B,I JSB LINK CALL LINK PROCESSOR OCT 1 REMOVE PROG FROM SCHED LIST OCT 0 ADD PROG TO DORMANT LIST * TI012 LDA TEMPA STA RQP2 JSB TIME GET CURRENT SYSTEM REAL TIME LDB TEMPA ADB DM1 ADB RQP3,I COMPUTE OFFSET MULTIPLE ADDRESS LDA RQP5,I OFFSET VALUE CMA,INA ADA B,I STA B,I * TI015 LDA TTAB RE-GROUP TIME VALUES. INA STA TEMP4 SET TABLE ADDR OF NEG CONST. LDA TEMPA STA TEMP5 SET TEMP ADDR OF CURR TIME LDA DM4 STA TEMP6 CLB * TI020 LDA TEMP5,I GET CURR TIME VALUE ADA B ADD CARRY CLB CLEAR CARRY TI030 ADA TEMP4,I SUBTR MAX VALUE STA TCC,I SAVE REMAINDER IN ID SEG SSA NEG YET? JMP TI040 YES, DO NEXT VALUE INB NO, BUT INCRE CARRY JMP TI030 REPEAT SUBTRACTION * TI040 ISZ TEMP4 NEXT CONSTANT ISZ TEMP5 NEXT TIME VALUE ISZ TCC NEXT ID SEG ADDR FOR TIME VALUE ISZ TEMP6 DONE YET? JMP TI020 NO * LDB TCC ADB DM6 JSB $TADD ENTER PROG INTO TIME LIST CLA JMP TIMER,I NORMAL RETURN * * GIVEN START TIME * TI100 STA TEMP3 HOURS LDA RQP6,I MINUTES STA TEMP2 LDA RQP7,I SECONDS STA TEMP1 LDA RQP8,I TENS OF MSEC STA TEMP JMP TI015 GO TO STORE VALUES IN ID SEGMENT * TCC NOP TLINC NOP ER6 ASC 1,06 NO OR ILLEGAL RES CODE VALUE ERROR HED ADDITION OF PROGRAM TO TIME RESOLUTION CODE LIST * * THE $TADD ROUTINE FUNCTIONS AS FOLLOWS: * * IF RESOLUTION CODE IS ZERO, THEN EXIT * * IF NON-ZERO RESOLUTION, AND PROGRAM NOT IN TIME LIST* * (BIT 12 OF RES/T/MULT 0), THEN SET BIT 12 OF * * MULT WORD TO SIGNIFY THAT IT IS IN TIME LIST. * * IF TIME LIST IS NULL, THEN SET IT TO POINT TO * * PROGRAM TIME LINK AND SET TLINK TO ZERO. * * IF PROGRAM NOT IN LIST, THEN IT IS ADDED TO * * TOP OF TIME LIST AND ITS TLINK VALUE MADE * * TO POINT TO THE PREVIOUS TOP OF LIST * * PROGRAM. * * * * * ADDING A PROGRAM TO A TIME RESOLUTION CODE LIST * CALLING SEQUENCE * LDB ADDRESS OF ID SEGMENT TLINK VALUE * JSB $TADD * $TADD NOP STB TLINC SAVE TLINK ADDRESS INB INCR TO RES CODE/MULT FACTOR ADD LDA B,I ALF,CLE,ERA AND D7 SZA,RSS JMP $TADD,I EXIT SEtNZ PROG IN TIME LIST? JMP $TADD,I YES, SO EXIT * LDA B,I IOR MWAIT SET T BIT STA B,I LDB TLIST LOAD VALUE OF TOP OF LIST LDA TLINC SET LINK OF NEW PROG TO PREVIOUS STB A,I OF TIME LIST STA TLIST SET TOP OF TIME LIST TO NEW PROG TLINK ADDRESS JMP $TADD,I RETURN HED REMOVE A PROGRAM FROM TIME LIST * * * THE $TREM ROUTINE FUNCTIONS AS FOLLOWS: * * IF PROGRAM NOT IN TIME LIST, THEN EXIT * * IF PROGRAM IN TIME LIST, THEN CLEAR BIT 12 OF * * RES/T/MULT TO INDICATE NOT IN TIME LIST. * * A SEARCH IS MADE OF THE TIME LIST PROGRAMS * * UNTIL PROGRAM FOUND OR END OF LIST. THE * * TLINK VALUES ARE CHANGED AS NECESSARY. * * * * * CALLING SEQUENCE * LDB TLINK ADDRESS OF ID SEGMENT * JSB $TREM * $TREM NOP ENTRY/EXIT STB TLINC COMPUTE LIST ADDRESS INB LDA B,I CHECK IF PROGRAM IS IN TIME LIST AND MWAIT SZA,RSS JMP $TREM,I NO, SO EXIT XOR B,I CLEAR T-BIT STA B,I LDB DTLST GET ADDR OF TOP OF LIST PNTR STB TCC SAVE ADDR OF LINK WORD LDB TLIST GET TOP OF LIST ADDR * TR010 CPB TLINC IS THIS THE PROG? JMP TR030 YES SZB,RSS END OF LIST? JMP $TREM,I YES, RETURN STB TCC SAVE ADDR OF CURRENT LINKWORD LDB B,I GET LINK TO NEXT PROG JMP TR010 GO CHECK NEXT PROG * TR030 LDB B,I LINK NEXT PROG STB TCC,I TO PREV PROG TO REMOVE JMP $TREM,I RETURN SPC 1 DTLST DEF TLIST MWAIT OCT 10000 CWAIT OCT 167777 HED REAL TIME SCHEDULER---EXEC}UTION SECTION--- * * THE $XEQ SECTION OF THE HP-2100 REAL TIME EXECUTIVE * * PERFORMS THE FOLLOWING FUNCTIONS: * * 1. IDLE LOOP WHEN NO PROGRAMS ARE SCHEDULED OR CANNOT BE * * EXECUTED. * * 2. SWITCHES PROGRAM EXECUTION SUCH THAT THE HIGHEST * * PRIORITY EXECUTABLE PROGRAM EXECUTES. * * 3. SETS THE FENCE REGISTER . * * * CALLING SEQUENCE * JMP $X * $XEQ LDA ZZZZZ CHECK IF PROGRAM TO BE ABORTED CLB STB ZZZZZ RESET ABORT FLAG SZA JSB $ABRT CALL ABORT ROUTINE LDA SKEDD LOAD TOP OF SCHEDULE LIST SZA IF ZERO, THEN NO PROG SCHED JMP X0010 GO TO PROCESS SCHED LIST * * NO PROGRAM SCHEDULED--SETUP FOR IDLE LOOP * * * THE IDLE LOOP SECTION CONSISTS OF: * * CLEARING XEQT WORD TO SIGNIFY THAT NO PROGRAM * * CURRENTLY EXECUTING. * * STORE ADDRESS OF 4 DUMMY WORDS INTO XSUSP-XSUSP+3 * * DUE TO I/O PROCESSING. * * SET MEMORY PROTECT REGISTER TO ZERO. * * CALL INTERRUPT RESTORE ROUTINE, $IRT * SET A AND B REGISTERS TO ALL ONES. * * TURN INTERRUPT SYSTEM BACK ON * * JUMP TO * * * * X0005 LDA DM4 SET XSUSP TO XSUSP+3 TO ADDRESS STA TMP OF FOUR DUMMY WORDS LDB DSUSP ADDRESS OF XSUSP LDA VSUSP ADDRESS OF IDLE DUMMY WORDS STA B,I INA INB ISZ TMP JMP *-4 CLA STA XEQT CLEAR XEQT ADDRESS VALUE STA FENCE SAVE FENCE REGISTER OTA 5B SET MEM PROTECT REG TO 0 JSB $IRT -RESET INTERRUPT CONDITIONS CCA SET A REGISTER TO ALL ONES CCB SET B REGISTER TO ALL ONES STF 0 TURN ON INTERRUPTS STC 5 TURN ON MEMORY PROTECT JMP * IDLE LOOP XQDEF DEF XEQT XEQT TABLE ADDRESS DSUSP DEF XSUSP ADDRESS OF XEQT SUSPEND VALUE VSUSP DEF *+1 ADDRESS OF IDLE DUMMY WORDS BSS 4 DUMMY XEQT IDLE WORDS * * THE SWITCHING SECTION USES THE SCHEDULE LIST TO DETERMINE * * WHICH PROGRAM TO EXECUTE-STARTING FROM TOP OF LIST. * * IF PROGRAM FROM LIST OF LOWER PRIORITY, THEN * * EXECUTION OF CURRENT PROGRAM CONINUES. * * IF PROGRAM FROM LIST OF HIGHER PRIORITY * * EXECUTION SWITCHING TAKES PLACE.* * X0010 STA ZWORK SCHED LIST PROG ID SEG ADDRESS STA ZLINK LINKAGE ADDRESS ADA D6 STA ZPRIO PRIORITY ADDRESS ADA D8 STA ZTYPE TYPE ADDRESS * CHECK FOR WAIT BIT SET LDB ZWORK ID SEGMENT ADDRESS ADB D15 LOCATE STATUS WORD LDA B,I AND MWAIT ISOLATE WAIT BIT SZA,RSS CHECK IF WAIT BIT SET JMP X0015 NO LDB ZWORK YES, SO CHECK IF CALLED INB PROGRAM DORMANT LDA B,I ADA D15 CALLED PROGRAM STATUS LDA A,I SZA SKIP IF DORMANT JMP X0035 NO, SO TRY NEXT PROGRAM X0015 LDA XEQT SEE IF PROGRAM CURRENTLY EXECUTING SZA,RSS YES JMP X0040 NO, SO GO XECUTE IT ADA D15 CHECK STATUS OF XEQT ID SEGMENT LDA A,I CPA D1 IF SCHEDULED, GO CHECK PRIORITY RSS JMP X0040 NOT SCHEDULED -SO GO SWITCH LDA XPRIO,I LOAD CURRENT XECUTING PROGRAM PR CMA,INA MAKE NEGATIVE ADA ZPRIO,I SCHEDULED PROGRAM PRIORITY SS$wA IF SIGN A=O THEN PROG OF LOWER PRIOR JMP X0040 PROGRAM OF HIGHER PRIORITY LDA XSUSP,I NO, SO CONT AT PT OF SUSP X0025 STA TEMP RETURN ADDRESS STORED * LDB XEQT CURR PROG WAIT BIT SET? ADB D15 LDA B,I AND MWAIT SZA,RSS YES, CHECK IF PROG DORMANT JMP X0026 NO, GO EXECUTE IT LDA XTEMP,I WAIT PROGRAM DORMANT? ADA D15 LDA A,I SZA JMP X0035 NOT DORMANT-SO TRY NEXT PROG LDA B,I AND CWAIT STA B,I CLEAR WAIT BIT * * CHECK IF PT OF SUSPENSION IN LIBRARY AREA * X0026 LDA XSUSP,I CHECK PT OF SUSPENSION VALUE LDB RTORG SZA,RSS JMP X0028 PROGRAM NOT SUSPENDED CMA,INA CHECK IF IN LIBRARY AREA ADA RTORG SSA,RSS LDB LBORG SET FENCE REGISTER TO LIBRARY X0028 STB FENCE SET FENCE REGISTER OTB 5B * * RESTORE REGISTERS, MEMORY PROTECT, AND TURN ON INTERRUPT SYSTEM JSB $IRT -RESET INTERRUPT CONDITIONS LDA XEO,I RESTORE CLO E, SLA,ELA OVERFLOW STF 1 LDA XA,I A AND LDB XB,I B REGISTERS STF 0 TURN ON INTERRUPTS STC 5B TURN ON MEMORY PROTECT JMP TEMP,I GO TO EXECUTE PROGRAM * * * CHECK NEXT PROGRAM IN LIST X0035 LDA ZLINK,I GET NEXT ID SEGMENT ADDRESS SZA JMP X0010 GO TO FETCH NEXT SCHED ID SEGMENT JMP X0005 * DM12 DEC -12 * * LOAD PROGRAM ID SEGMENT ADDRESSES INTO XEQT AREA X0040 LDA DM12 LOAD PROGRAM TO BE EXECUTED STA TMP INTO XEQT AREA LDA XQDEF LDB ZWORK STB 0,I INA STB 0,I INB ISZ TMP JMP *-4 LDA XSUSP,I CHECK IF PROGRAM SUSPENDED SZA,RSS NO, SO START AT PRIMARY ENTRY LDA XPENT,I SET TO PRIMARY START ADDRESS JMP X0025 GO TO SET FENCE,REGISTERS AND XEQ * NLH* * nNZWORK NOP SCHED LIST ID SEGMENT ADDRESS ZLINK NOP SCHED LIST LINKAGE ADDRESS ZPRIO NOP SCHED LIST PRIORITY LIST ZTYPE NOP SCHED LIST PRIORITY ADDRESS ZZZZZ NOP SPC 1 $WORK EQU * DO NOT REARRANGE NEXT 3. WORK NOP WORK ID SEGMENT ADDRESS WLINK NOP WORK LINKAGE ADDRESS WPRIO NOP WORK PRIORITY ADDRESS TEMPA DEF TEMP ADDR OF TEMP AREA TEMP BSS 1 TEMPORARY WORKING STORAGE AREA TEMP1 BSS 1 (DO NOT REARRANGE!) TEMP2 BSS 1 TEMP3 BSS 1 TEMP4 BSS 1 TEMP5 BSS 1 TEMP6 BSS 1 TMP BSS 1 TEMPORARY STORAGE AREA TMP1 BSS 1 (DO NOT REARRANGE!) TMP2 BSS 1 TMP3 BSS 1 * DM3 DEC -3 DM4 DEC -4 DM5 DEC -5 DM16 DEC -16 * D2 DEC 2 D4 DEC 4 D5 DEC 5 D6 DEC 6 D7 DEC 7 D8 DEC 8 D9 DEC 9 D14 DEC 14 D15 DEC 15 D17 DEC 17 D24 DEC 24 D60 DEC 60 * M1 OCT 1 M3 DEC 3 M377 OCT 377 HED REAL TIME SCHEDULER---LIST PROCESSOR SECTION--- * * THE $LIST PROCESSOR SECTION OF THE HP-2100 REAL TIME * EXECUTIVE PROCESSES THE FOLLOWING LIST REQUESTS * 1. DORMANT * 2. SCHEDULE * 3. OPERATOR SUSPEND * 4. NON-OPERATOR SUSPEND * A. I/O * B. MEMORY AVAILABLE * 5. SEGMENT LOADING * * * * CALLING SEQUENCE: * JSB $LIST * OCT (ADDRESS CODE)(FUNCTION CODE) * DEF (ADDRESS) * WHERE * FUNCTION CODE * 0 = DORMANT REQUEST * 1 = SCHEDULE REQUEST * 2 = I/O SUSPEND REQUEST * 3 = *****NOT CURRENTLY USED***** * 4 = MEMORY AVAILABEL REQUEST * 5 = *****NOT CURRENTLY USED***** * 6 = OPERATOR SUSPEND REQUEST * 7 = *****NOT CURRENTLY USED***** * 17 = RELINK PROGRAM REQUEST *  10 THRU 16 ARE NOT ASSIGNED * ADDRESS CODE * 1 = ID SEGMENT ADDRESS * 2 = ASCII PROGRAM NAME ADDRESS * 3 = ID SEGMENT ADDRESS IN WORK * ADDRESS * KEYWORD, ID SEGMENT, WORK TEMP STORAGE OR * PROGRAM NAME ADDRESS AS SPECIFIED BY CODE * * RETURNS: * * IF A = 0, THEN NO MESSAGE * A NOT 0, THEN ADDR OF MESSAGE * IF ERROR, (B) CONTAINS ASCII ERR CODE * $LIST NOP ENTRY/EXIT LDA $LIST,I WORD 1 AND D15 STA L0091 STORE AWAY REQUEST CODE XOR $LIST,I FORM ADDR CODE ALF,ALF RAL,RAL ISZ $LIST INCR TO WORD 2 CPA M1 SEE IF ID SEGMENT ADDRESS JMP L0020 YES, SO SETUP TO READ IT IN CPA M3 CHECK IF DATA IN WORK AREA JMP L0060 YES * L0030 LDB $LIST,I ASCII NAME ADDR JSB TNAME SEARCH KEYWORDS FOR PROGRAM NAME SZA NOT FOUND, SO ERROR RETURN JMP L0021 PROG FOUND, SO GO PROCESS LDA NOPRG NO SUCH PROG ERROR MESSAGE LDB ER5 NO SUCH PROG ERROR CODE JMP L0015 GO TO RETURN * L0014 CLA CLEAR A REGISTER FOR NORMAL RETURN L0015 ISZ $LIST INCR TO EXIT ADDR JMP $LIST,I EXIT * L0020 LDA $LIST,I ID SEGMENT ADDR L0021 STA WORK SAVE ID SEG ADDR * * PROCESS ID SEGMENT ACCORDING TO REQUEST CODE L0060 LDA WORK ID SEGMENT ADDRESS STA WLINK LINKAGE ADDRESS ADA D6 STA WPRIO PRIORITY ADDRESS ADA D9 STA WSTAT STATUS ADDRESS LDA WSTAT,I AND D15 STA L0090 STORE CURRENT PROG STATUS STA TEMP LDA L0091 REQUEST CODE SZA,RSS CHECK IF DORMANT REQUEST JMP L0100 DORMANT REQUEST CPA M1 CHECK IF SCHEDULE REQUEST JMP L0200 YES CPA D2 CHECK IF I/O SUSPEND REQUEST JMP L0400 YES CPA D6 CHECK IF OPERATOR SUSPEND REQUEST JMP L0300 YES CPA D4 CHECK IF MEM AVAIL SUSPEND REQUEST JMP L0400 CPA D15 CHECK IF LINKAGE UPDATE REQUEST JMP L0080 YES * L0075 LDA ILSTT ILLEGAL STATUS MESSAGE ADDRESS LDB ERMS3 ILLEGAL STATUS ERROR CODE JMP L0015 GO TO EXIT * * LIST PROCESSOR--LINK UPDATE REQUEST/LINK CALL * * * LINKAGE UPDATE * L0080 LDA TEMP PROG PRIOR CHANGED , RELINK STA L0090 PROGRAM MUST BE RELINKED STA L0091 JSB CLINK CALL LINKAGE PROCESSOR JMP L0015 GO TO EXIT * HED LIST PROCESSOR--DORMANT REQUEST * * DORMANT REQUEST * * THE DORMANT REQUEST IS PROCESSED AS FOLLOWS: * * IF ABORT BIT SET, MAKE PROGRAM DORMANT * * IF ALREADY DORMANT, RETURN * * IF SCHEDULED, THEN ENTERED INTO DORMANT LIST, POINT * * OF SUSPENSION CLEARED. * * IF NOT ONE OF ABOVE, THEN DORMANT BIT SET IN STATUS * L0100 LDA WSTAT,I CHECK IF ABORT BIT SET AND M4000 SZA JMP L0110 YES, SO GO MAKE DORMANT LDA TEMP GET CURRENT PROGRAM STATUS SZA,RSS JMP L0115 ALREADY DORMANT CPA M1 JMP L0110 PROGRAM SCHEDULED- SO MAKE DORMANT CPA D6 JMP L0110 PROGRAM OPERATOR SUSPENDED LDA WSTAT,I SET OFF BIT IN STATUS IOR M100 STA WSTAT,I JMP L0014 GO TO EXIT * L0110 CLA MAKE PROG DORMANT STA L0091 SET LINK CALL PARAM TO 0 STA WSTAT,I SET STATUS TO DORMANT JSB CLINK CALL LINK PROCESSOR L0115 JSB CLIDS GO TO CLEAR ID SEG TEMP AND SET B CLA LDB WORK ADB D8 STA B,I CLEAR PT OF SUSPENSION JMP L0015 GO TO EXIT HED LIST PROCESSOR--SCHEDULE REQUEST * * SCHEDULE REQUEST * * THE SCHEDULE REQUEST IS PROCESSED AS FOLLOWS: * * IF ABORT BIT SET, STORE ID SEGMENT ADDRESS SUCH THAT* * PROGRAM WILL BE ABORTED AT NEXT ENTRY FROM XEQ * * IF DORMANT BIT SET, GO TO DORMANT REQUEST * * IF OPERATOR-SUSPEND BIT SET, GO TO OPERATOR-SUSPEND * * REQUEST * * IF SCHEDULED, THEN STATUS ERROR EXIT * * IF OPERATOR-SUSPENDED, THEN STATUS ERROR EXIT * * IF CURRENT STATUS NOT ONE OF ABOVE, THE PROGRAM IS * * ENTERED INTO THE SCHEDULE LIST. * * * ;zL0200 LDA WSTAT,I GET STATUS ALF,RAL SLA,RSS IS ABORT BIT11 SET? JMP *+4 NO LDA WORK YES, SO SAVE ID ADDRESS STA ZZZZZ AND JMP L0014 RETURN * RAL,CLE,ELA SAVE BIT9 IN (E) RAL,RAL SSA IS DORMANT BIT6 SET? JMP L0110 YES, MAKE DORMANT. SEZ IS SUSPEND BIT9 SET? JMP L0320 YES, SO MAKE PROG OPER-SUSP * LDA TEMP NO, PROG ALREADY SCHED? CPA M1 JMP L0075 ALREADY SCHED-SO STATUS ERROR CPA D6 IF OPER-SUSP, THEN CANNOT SCHED JMP L0075 STATUS ERROR JSB CLINK CALL LINK PROCESSOR TO SCHEDULE CLB,INB STB WSTAT,I UPDATE STATUS TO SCHEDULE JMP L0015 GO TO EXIT HED LIST PROCESSOR--SUSPEND REQUESTS * * OPERATOR SUSPEND REQUEST * * THE OPERATOR-SUSPEND REQUEST IS PROCESSED AS FOLLOWS: * * IF DORMANT, THEN ENTER INTO OPERATOR SUSPEND LIST * * IF ALREADY OPERATOR SUSPEND, THEN STATUS ERROR EXIT * * IF SCHEDULED, THEN ENTER INTO OPERATOR SUSPEND LIST * * IF NOT ONE OF ABOVE, THEN OPERATOR-SUSPEND BIT SET * * * L0300 LDA TEMP SZA,RSS PROGRAM DORMANT SO JMP L0320 GO MAKE IT OPER SUSPEND CPA D6 CHECK IF ALREADY OPER SUSPENDED JMP L0075 ILLEGAL STATUS ERROR RETURN CPA M1 CHECK IF PROGRAM SCHEDULED JMP L0320 YES, SO OPERATOR SUSPEND IT LDA WSTAT,I SET OPER-SUSP BIT IN STATUS IOR M1000 STA WSTAT,I JMP L0014 GO TO EXIT * L0320 LDA D6 STA L0091 SET LINKAGE CALL PARAM 2 STA WSTAT,I UPDATE STATUS TO OPER-SUSPEND JSB CLINK CALL LINK PROCESSOR JMP L0015 GO TO EXIT SPC 6 * * * NON-OPERATOR SUSPEND REQUEST  * * * THE NON-OPERATOR SUSPEND REQUEST IS PROCESSED AS FOLLOWS: * * THE PROGRAM IS ENTERED INTO THE REQUESTED LIST AND * * THE NEW STATUS REPLACES THE 4 LOW ORDER BITS OF THE * * PROGRAM STATUS-THUS SAVING THE DORMANT OR OPERATOR- * * SUSPEND BITS THAT MAY BE PRESENT. * * * L0400 JSB CLINK CALL LINK PROCESSOR LDA WSTAT,I UPDATE STATUS SAVING ALL AND MASTS BUT LOW 4 BITS IOR L0091 STA WSTAT,I JMP L0014 GO TO EXIT SPC 1 MASTS OCT 177760 * HED LINK SUBROUTINE CALL * CLINK NOP ENTRY/EXIT JSB LINK CALL LINK PROCESSOR L0090 OCT 0 CODE OF PROGRAM REMOVAL LIST L0091 OCT 0 CODE OF PROGRAM ADDITION LIST JMP CLINK,I RETURN SPC 7 * * LIST PROCESSOR--ERROR MESSAGES * SPC 3 * * * ILSTT DEF *+1 ILLEGAL STATUS ERROR MESSAGE DEC -14 ASC 7,ILLEGAL STATUS ERMS3 ASC 1,03 ILLEGAL STATUS ERROR CODE ER5 ASC 1,05 NO SUCH PROG ERROR CODE HED LINK UPDATE PROCESSOR * * THE LINK PROCESSOR SECTION OF THE HP-2116 REAL TIME * * EXECUTIVE * * 1. REMOVES A PROGRAM FROM A LIST * * AND * * 2. ENTERS THE PROGRAM INTO ANOTHER LIST AT THE PROPER PLACE * * ACCORDING TO PRIORITY LEVEL. * * * * * * CALLING SEQUENCE * JSB LINK * OCT CODE1 * OCT CODE2 * WHERE * CODE1 = CODE OF REMOVAL LIST * CODE2 = CODE OF INSERTION LIST * THE ID SEGMENT IS ASSUMED TO BE LOCATED IN WORK * AND WLINK AND WPRIO SET * * m * * THE REMOVAL OF PROGRAM FROM A LIST CONSISTS OF: * * 1. IF I/O LIST (CODE 2), THEN THIS IS SPECIAL CASE * * AND DOES NOT REQUIRE REMOVAL. * * 2. IF NULL LIST, THEN ERROR EXIT TAKEN. * * 3. IF FIRST AND ONLY PROGRAM IN LIST, THEN LIST * * VALUE SET TO ZERO. * * 4. IF FIRST PROGRAM IN LIST, BUT NOT THE ONLY * * PROGRAM IN LIST(LINKAGE NOT ZERO), THEN SET LIST * * VALUE TO THE LINKAGE VALUE. * * 5. IF IN MIDDLE OF LIST, THE LINKAGE OF THE ID SEG * * MENT WHICH POINTS TO THE PROGRAM TO BE REMOVED * * IS SET TO THE LINKAGE VALUE OF THE PROGRAM THAT * * IS REMOVED. * * 6. IF LAST PROGRAM IN LIST, THE LINKAGE VALUE OF * * PREVIOUS PROGRAM IN LIST IS SET TO ZERO. * * $LINK EQU * LINK NOP ENTRY/EXIT LDA LINK,I GET CODE 1 VALUE CPA D2 SPECIAL CODE? JMP LK100 YES, SEE IF ADDITION. ADA LLIST ADD TOP OF LIST POINTER * LK010 STA TEMP TOP OF REMOVAL LIST LDA A,I GET TOP OF LIST POINTER SZA,RSS END OF LIST? JMP LK150 YES, RETURN CPA WORK MATCHES PROGRAM? RSS YES JMP LK010 NO, KEEP SEARCHING LDA WLINK,I UPDATE LINKAGE TO BYPASS STA TEMP,I THE DELETED ID SEG HED LINK PROCESSOR--ADDING PROGRAM TO A LIST * * ADD A PROGRAM TO A LIST * * THE ADDITION OF PROGRAM TO A LIST CONSISTS OF: * * 1. IF I/O LIST (CODE 2), THEN THIS IS SPECIAL CASE * * AND NO ADDITION MADE TO LIST. * * 2. IF NULL LIST, THEN LIST VALUE SET TO POINT TO ID * * SEGMENT OF PROGRAM TO BE ADDyED AND THE LINKAGE * * SET TO ZERO. * * 3. IF NOT NULL LIST, THE PROGRAM IS INSERTED INTO * * LIST ACCORDING TO PRIORITY LEVEL AND LINKAGES * * CHANGED TO REFLECT THIS INSERTION. * * 4. IF OF LOWER PRIOR. THAN ANY PROGRAM IN LIST, THEN* * LAST LINKAGE IS SET TO POINT TO THE PROGRAM TO * * BE ADDED AND THE PROGRAM LINKAGE IS CLEARED. * * LK100 ISZ LINK INCREMENT TO CODE2 LDA LINK,I GET CODE 2 VALUE CPA D2 SPECIAL CODE? JMP LK150 YES, RETURN ADA LLIST ADD TOP OF LIST POINTER * LK110 STA TEMP SAVE TOP OF LIST POINTER LDA A,I GET POINTER SZA,RSS END OF LIST? JMP LK140 YES, LINK IN NEW PROG CPA WORK IS IT A DUPLIC. PROG? JMP LK150 YES, DUPLIC SO RETURN STA B NOT DUPLIC, COMPARE PRIORITY ADB D6 OF WORK ID SEG LDB B,I AGAINST CMB,INB CURRENT ADB WPRIO,I ID SEG SSB,RSS WORK < CURRENT? JMP LK110 NO, SEE NEXT ONE * LK140 STA WLINK,I LINK THIS TO FOLLOW WORK LDA WORK LINK WORK TO FOLLOW STA TEMP,I PREVIOUS PROG * LK150 CLA ISZ LINK INCRE RETURN ADDR JMP LINK,I FOR RETURN * * LLIST DEF DORMT TOP OF LIST ADDRESS WSTAT NOP WORK STATUS ADDRESS DM31 DEC -31 M100 OCT 100 M1000 OCT 1000 M4000 OCT 4000 COM OCT 54 AZERO OCT 30000 HED OPERATOR INPUT MESSAGE PROCESSOR * * THE $MESS PROCESSOR SECTION OF HP-2116 REAL TIME EXECUTIVE* * PROCESSES THE FOLLOWING OPERATOR INPUT REQUESTS: * * 1. TURN ON A PROGRAM * * ON,XXXXX * * ON,XXXXX,NOW * * ON,XXXXX,P1,= ...,P5 * * ON,XXXXX,NOW,P1,...,P5 * * 2. TURN OFF A PROGRAM * * OF,XXXXX,P * * 3. OPERATOR SUSPEND A PROGRAM * * SS,XXXXX * * 4. CONTINUE A OPERATOR SUSPENDED PROGRAM * * GO,XXXXX * * GO,XXXXX,P1,...,P5 * * 5. CURRENT STATUS OF A PROGRAM * * ST,XXXXX * * 6. CHANGE PROGRAM ID SEGMENT TIME PARAMETERS. * * IT,XXXXX,R,MMM * * IT,XXXXX,R,MMM,HR,MN * * IT,XXXXX,R,MMM,HR,MN,SC * * IT,XXXXX,R,MMM,HR,MN,SC,MS * * 7. CHANGE PROGRAM PRIORITY * * PR,XXXXX,ZZ * * 8. SET REAL TIME CLOCK AND START TIME BASE GENERATOR * * TM,DAY,HR,MN,SC * * 9. CURRENT REAL TIME CLOCK VALUES * * TI * * 10. SET A EQUIPMENT DOWN * DN,NN * * 11. SET A EQUIPMENT UP * * UP,NN * * 12. LOGICAL UNIT * * LU,N1 * * LU,N1,N2 * * LU,N1,N2,N3 * 13. EQUIPMENT STATUS mK * * EQ,NN * * 14. CHANGE DEVICE TIME-OUT PARAMETER * TO,N1 * TO,N1,N2 * HED OPERATOR INPUT MESSAGE DECIPHER ROUTINE * * CALLING SEQUENCE: * B CONTAINS NUMBER OF CHARACTERS * JSB $MESS * RETURNS: * (A) = MEANINGLESS * (B) = MEANINGLESS * * * INPUT DECIPHER ROUTINE ROUTINE SCANS THE ASCII OPERATOR * * INPUT AND STORES THE DATA INTO PARAMETERS. * * THIS ROUTINE ASSUMES THE CHARACTER COUNT IN B ON ENTRY AND* * DATA IN BUFFR. COMMA IS USED TO SEPARATE PARAMETERS. A PARA- * * METER MAY BE UP TO 6 ASCII CHARACTERS- EXCEPT FOR OP CODE * * WHICH MUST BE 2 CHARACTERS. A MAXIMUM OF 40 CHARACTERS MAY BE * * INPUT. A COUNT IS KEPT OF THE NUMBER OF PARAMETERS INPUT AND * * A CHARACTER COUNT IS KEPT FOR EACH PARAMETER. THE VALUES ARE * * STORED LEFT ADJUSTED IN THE BUFFERS. * * * $MESS NOP ENTRY/EXIT CLA STA TEMP2 CLEAR CHAR FLAG CMB,INB,SZB,RSS COMP CHAR CT, EXIT IF ZERO JMP $MESS,I YES, SO EXIT * STB TEMP3 AND STORE LDB DM31 CLEAR PARAM AREA STB TEMP LDB PARPT STA B,I INB ISZ TEMP JMP *-3 * LDB BUFAD LOAD B WITH INPUT BUFF ADDR CLE,ELB STB TEMPP LDA INIT INIT CURRENT STA TEMP5 PARAM PNTR LDA TEMP5,I STA TEMP4 INIT STORE PNTR ADA DM1 STA TEMP6 PARAM CHAR COUNT ADDR * DEC10 LDB TEMPP SET ADDR OF NEXT WORD CLE,ERB TO FETCH LDA B,I NEXT CHAR SEZ,RSS CHECK IF TO EXAMINE UPPER/LOWER ALF,ALF UPPER, SO ROTATE TO LOWER BITS AND M377 MASK OFF ALL BUT LOW ORDER * CPA COM SEE IF A COMMA JMP DEC60 YES  CPA LASCI CHECK IF BLANK CHAR JMP DEC50 YES, SO SKIP CHAR LDB TEMP6,I ADD -1 TO CHAR COUNT ADB DM1 STB TEMP6,I * LDB TEMP2 CHECK IF TO BE UPPER/LOWER CHAR SLB UPPER JMP DEC40 LOWER ALF,ALF POSITION TO UPPER STA TEMP4,I STORE IN TEMPORARY ISZ TEMP2 SET FLAG TO LOWER CHAR JMP DEC50 GO TO INCR DATA CHAR * DEC40 XOR TEMP4,I COMBINE UPPER AND LOWER CHARS STA TEMP4,I STORE ISZ TEMP2 RESET FLAG TO UPPER CHAR ISZ TEMP4 INCR STORE LOCATION * DEC50 ISZ TEMPP INCRE BUFF ADDR ISZ TEMP3 INCRE CHAR COUNT, DONE YET? JMP DEC10 NO, GO TO PROCESS NEXT CHAR DEC55 ISZ PARAM YES, INCRE PARAM COUNT JMP M0000 GO TO EXIT * DEC60 CLA START A NEW PARAM STA TEMP2 RESET UPPER CHAR FLAG DEC70 ISZ TEMP5 INCRE PARAM PNTR ISZ PARAM LDA PARAM CPA D8 GOT 7 PARAMS ALREADY? JMP M0000 YES, EXIT. * LDA TEMP5,I STA TEMP4 ADA DM1 STA TEMP6 PARAMETER CHARACTER COUNT ADDR CLA INSURE CHAR CNT IS STA TEMP6,I SET TO ZERO JMP DEC50 GO INCRE DATA BUF HED MESSAGE PROCESSOR--OP REQUEST SEARCH * * THIS SECTION CHECKS THE OPERATOR REQUEST CODE AGAINST THE * * LEGAL REQUEST CODES AND JUMPS TO THE PROPER PROCESSOR. * ******************************************************************** * TO ADD NEW REQUEST ONE MERELY, * * A. CHANGES WORD -OPCNT- * * B. ADDS ASCII OPERATION CODE TO TABLE -LDOPC- * * C. ADDS PROCESSOR START ADDRESS TO TABLE -LDJMP- * * D. ADDS PROCESSOR CODING TO PROCESS THE REQUEST. * ******************************************************************** * M0000 LDB OP OPERATION CODE INTO A CPB TI CVHECK IF IT IS 'TI' JMP M0750 IF SO, GO TO 'TI' PROCESSOR * CPB PL CHECK IF APLDR - PROG LIST JMP AP010 YES CPB LO CHECK IF APLDR - LOAD PROG JMP AP020 YES * LDA OPCNT SET OPERATION COUNTER STA TEMP LDA LDOPC SET OPERATION TABLE POINTER STA TEMP1 LDA LDJMP SET OPERATION PROC. JUMP ADDRESS STA TEMP2 CLA,INA CHECK IF ONLY ONE PARAMETER CPA PARAM JMP M0950 ERROR, ONLY ONE PARAMETER M0030 CPB TEMP1,I COMPARE WITH TABLE VALUE JMP M0040 COMPARES ISZ TEMP1 DOES NOT COMPARE-INCREMENT OP TABLE ISZ TEMP2 INCREMENT JUMP ADR. ISZ TEMP INCREMENT COUNTER JMP M0030 GO TO COMPARE NEXT OP CODE LDA OPERR ILLEGAL OPERATION CODE REQUEST JMP $MESS,I * TI ASC 1,TI SYSTEM TIME REQUEST PL ASC 1,PL APLDR-PROGRAM LIST LO ASC 1,LO APLDR-LOAD PROGRAM * OPCNT DEC -14 OP CODE COUNT LDOPC DEF *+1 OPERATION CODE TABLE ADDRESS ASC 14,ONOFSSGOSTPRITTMDNUPLUEQTORP LDJMP DEF *+1 JUMP ADDRESS FOR EACH OPER. CODE DEF M0100 TURN ON DEF M0200 TURN OFF DEF M0300 OPERATOR SUSPEND DEF M0400 REMOVE OPERATOR SUSPEND DEF M0500 STATUS DEF M0650 PRIORITY CHANGE DEF M0600 INTERVAL TIME CHANGE DEF M0700 REAL TIME CLOCK INITIALIZATION DEF M0780 DN REQUEST DEF M0800 UP REQUEST DEF M0850 LU REQUEST DEF M0900 EQ REQUEST DEF M0990 TO REQUEST DEF AP030 RP: APLDR-REPLACE PROGRAM * M0040 LDB TEMP2,I JMP B,I HED MESSAGE PROCESSOR--ON,XXXXX COMMAND * * ON,XXXXX * ON,XXXXX,NOW * ON,XXXXX,P1,...,P5 * ON,XXXXX,NOW,P1,...,P5 * * THE ON REQUEST FUNCTIONS AS FOLLOWS: * * IF NO RESOLUTION CODE, THEN PROGRAM SCHEDULED. * * IF -NOW- OPTION, THEN ENTER PROGRAM INTO TIME LIST * * AND SET TIME VALUES TO CURRENT TIME PLUS 10 MSC* * IF NOT ONE OF ABOVE, AND TIME VALUES ARE ZERO THEN * * PROGRAM FUNCTIONS SAME AS -NOW- OPTION. * * IF NOT ONE OF ABOVE, AND TIME VALUES ARE PRESENT, * * THEN PROGRAM IS ADDED TO TIME LIST. * * NOTE: ALL THE ABOVE OPTIONS ALLOW PARAMETERS TO BE * * PASSED TO THE PROGRAM. THESE MUST BE ASCII * * DECIMAL NUMBERS WHICH ARE CONVERTED TO BINARY * * AND STORED IN ID SEGMENT TEMP AREA. UPON * * EXECUTION, THE B REGISTER WILL POINT TO TEMP. * * UP TO 5 PARAMETERS MAY BE INPUT. IF NO PARA- * * METERS ARE INPUT, THE TEMP AREA ARE ZEROS BUT * * B REGISTER WILL STILL POINT TO TEMP. AREA * * * M0100 JSB TTNAM FIND ID SEGMENT ADDR ADA D15 CHECK IF PROGRAM DORMANT LDA A,I SZA JMP M0405 ILLEGAL STATUS ERROR LDB WORK ADB D17 COMPUTE RES/T/MULT ADDR LDA B,I ALF,RAR AND D7 CHECK RESOLUTION CODE SZA NONE, SO GO TO SCHED NOW JMP M0110 JSB PLOAD GO TO PROCESS CONTROL PARAMETERS JSB $LIST SCHEDULE PROGRAM OCT 301 DEF WORK JMP $MESS,I RETURN M0110 LDA P2 CPA NOPRG+2 CHECK IF -NOW- OPTION JMP M0130 * * CHECK IF NON ZERO ID SEGMENT TIME VALUES * LDB WORK COMPUTE ID SEGMENT TIME ADDRESS ADB D18 LDA B,I TENS OF MILLISECOND VALUE ADA D100 SZA JMP M0135 NOT ZERO, SO ENTER IN TIME LIST * INB LDA B,I SECONDS VALUE ADA D60 SZA JMP M0135 NOT ZERO, SO ENTER IN TIME LIST * INB LDA B,I MINUTES VALUE ADA D60 SZA JMP M0135 NOT ZERO, SO ENTER IN TIME LIST * INB LDA B,I HOURS VALUE ADA D24 SZA JMP M0135 NOT ZERO, SO ENTER IN TIME LIST * M0130 LDB WORK STORE CURRENT TIME + 10 MSEC ADB D18 INTO ID SEGMENT TIME VALUES LDA TMS STORE TMS+1 INTO ID SEGMENT INA STA B,I INB LDA SECS STORE SECS INTO ID SEGMENT STA B,I INB LDA MINS STORE MINS INTO IDS SEGMENT STA B,I INB LDA HRS STORE HRS INTO ID SEGMENT STA B,I * LDB WORK CHECK IF TMS+1 OVERFLOWS INTO SECS ADB D18 LDA B,I SZA JMP M0135 * LDA DM100 SET ID SEGMENT TMS = 0 STA B,I INB ISZ B,I JMP M0135 * LDA DM60 SET ID SEGMENT SECS = 0 STA B,I INB ISZ B,I JMP M0135 * STA B,I SET ID SEGMENT MINS = 0 INB ISZ B,I JMP M0135 * LDA DM24 SET ID SEGMENT HRS = 0 STA B,I M0135 JSB PLOAD GO TO PROCESS CONTROL PARAMETERS LDB WORK ADB D16 JSB $TADD ADD PROGRAM TO TIME LIST JMP M0RET RETURN HED MESSAGE PROCESSOR--OF,XXXXX COMMAND * * OF,XXXXX * OF,XXXXX,1 "ABORT" * OF,XXXXX,8 "ABORT AND REMOVE FROM SYSTEM" * * THE OF REQUEST FUNCTIONS AS FOLLOWS: * * IF PROGRAM DORMANT, IT MAY STILL BE IN TIME LIST SO * * A CALL IS MADE TO REMOVE PROGRAM FROM TIME LIST* * IF ABORT OPTION 1, THEN $ABRT PROCESSOR IS * * CALLED. IF ABORT OPTION 8, THEN THE NAME * * FIELD IN THE ID SEGMENT IS CLEARED SO THAT THE * * PROGRAM CANNOT BE CALLED AGAIN. * * IF PROGRAM SCHEDULED OR OPERATOR-SUSPENDE(ZB@ 0. * M0204 LDA WSTAT,I NORMAL "OFF", IOR M100 SO SET DORMANT BIT STA WSTAT,I IN STATUS AND RESTORE JMP M0220 GO REMOVE FROM TIME LIST * M0205 LDA WSTAT,I AND D15 CPA D4 CHECK IF AVAILABLE MEMORY SUSP JMP M0220 YES, SO GO CALL ABORT * LDA WSTAT,I SET ABORT BIT IOR M4000 STA WSTAT,I AND D15 GET STATUS CPA D2 I/O SUSPEND? RSS JMP M0RET NOT SUSPENDED, RETURN. * LDA WORK YES, SUSPENDED JMP $IOCL CLEAR I/O * M0210 JSB $LIST CALL $LIST TO CHANGE OCT 300 SCHED AND OPERATOR SUSP INTO DEF WORK DORMANT LIST M0220 LDB WORK STB TEMPH ADB D16 JSB $TREM REMOVE PROGRAM FROM TIME LIST LDA PARAM 3 PARAMETERS? CPA D2 YES, ABORT IT. JMP M0RET NO, RETURN * JSB CVP2 CONVERT PARAMETER SZA,RSS IF 0, EXIT IMMEDIATELY JMP $MESS,I * STA TMP3 LDA WSTAT,I IOR M4000 STA WSTAT,I LDA TEMPH JSB $ABRT GO TO ABORT ROUTINE LDA TMP3 RELEASE PROG'S ID SEG? CPA D8 IF P = 8, RSS YES JMP M0RET NO-SO RETURN VIA $MESS,I * M0227 LDB TEMPH ADB D12 CLA CLEAR STA B,I ALL 3 WORDS INB OF NAME STA B,I TO REMOVE INB FROM SYSTEM STA B,I * M0RET CLA NORMAL RETURN, SO CLEAR A REGISTER JMP $MESS,I RETURN SPC 1 TEMPH NOP D12 DEC 12 D16 DEC 16 D18 DEC 18 DM1 DEC -1 DM24 DEC -24 DM60 DEC -60 HED MESSAGE PROCESSOR--SS,XXXXX COMMAND * * SS,XXXXX PROCESSOR * * THE SUSPEND REQUEST FUNCTIONS AS FOLLOWS: * * IF PROGRAM DORMANT OR OPERATOR SUSPENDED, THEN * * ILLEGAL STATUS ERROR * * IF SCHEDULED, THEN OPERATOR SUSPEND VIA $LIST * * IF OTHER THAN ABOVE, SET THE OPERATOR-SUSPEND BIT * * IN STATUS. * * * M0300 JSB TTNAM GO TO FIND ID SEG ADDR ADA D15 STA WSTAT STATUS ADDRESS LDA WSTAT,I SZA,RSS CHECK IF PROGRAM DORMANT JMP M0405 DORMANT, SO ILLEGAL STATUS ERROR CPA D6 CHECK IF PROGRAM OPERATOR SUSPEND JMP M0RET * CPA D1 CHECK IF PROGRAM SCHEDULED JMP M0310 PROG SCHEDULED SO MAKE DORMANT IOR M1000 SO SET OPER SUSP BIT IN STATUS M0305 STA WSTAT,I JMP M0RET GO TO EXIT * M0310 JSB $LIST OCT 306 SCHED TO OPER-SUSP DEF WORK JMP $MESS,I EXIT HED MESSAGE PROCESSOR--GO COMMAND * * GO,XXXXX * GO,XXXXX,P1,...,P5 * * * THE CONTINUE FROM POINT OF SUSPENSION FUNCTIONS AS * * FOLLOWS: * * IF NOT OPERATOR SUSPEND: * BIT SET - REMOVE OPER-SUSP BIT IN STATUS * BIT NOT SET - ERROR EXIT FOR MESSAGE * IF OPERATOR SUSPEND, SCHEDULE PROGRAM * M0400 JSB TTNAM GO TO  FIND ID SEG ADDR ADA D15 STA WSTAT STATUS ADDR LDA WSTAT,I AND D15 CPA D6 CHECK IF PROGRAM OPERATOR-SUSPEND JMP M0410 OPERATOR-SUSPEND--SO GO TO PROCESS LDA WSTAT,I NOT OPER SUSP - AND M1000 IS BIT SET? SZA,RSS JMP M0405 NO, ERROR- XOR WSTAT,I YES, CLEAR BIT JMP M0305 * M0405 LDA ILSTT ILLEGAL STATUS MESSAGE ADDRESS LDB ERMS3 ILLEGAL STATUS ERROR CODE JMP $MESS,I EXIT * M0410 LDA D2 CHECK IF CONTROL PARAMETERS FOLLOW CPA PARAM RSS NO JSB PLOAD GO TO PROCESS CONTROL PARAMETERS * CLA,INA SCHEDULE PROG THRU LINK PROCESSOR STA WSTAT,I SINCE LIST WILL NOT SCHEDULE LDA WORK STA WLINK ADA D6 STA WPRIO JSB LINK A OPERATOR SUSPENDED PROGRAM OCT 6 OCT 1 JMP $MESS,I RETURN HED MESSAGE PROCESSOR--ST,XXXXX COMMAND * * ST,XXXXX PROCESSOR * * THE STATUS REQUEST OUTPUTS THE REQUESTED PROGRAM STATUS * * IN THE FOLLOWING FORMAT: * * PR S R MMM HR MN SC MS T * * * * PR =PRIORITY * * S = STATUS (0 THRU 6 * * R = RESOLUTION CODE (0 THRU 4) * * MMM = MULTIPLE VALUE * * HR = NEXT START TIME -HR * * MN = NEXT START TIME -MIN * * SC = NEXT START TIME -SEC * * MS = NEXT START TIME -10 MSEC * * T = PRESENT IF PROGRAM IN TIME LIST * * M0500 JSB TTNAM GO TO FIND ID SEGMENT ADDR LDA DM24 STA BUFFR STORE CHFARACTER COUNT IN BUFFER LDB WORK ADB D6 PRIORITY ADDRESS LDA B,I JSB DCONV CONVERT PRIORITY TO ASCII LDA ASCI+2 STA BUFFR+1 STORE PRIORITY IN BUFFER * ADB D9 STATUS ADDRESS LDA B,I AND D15 JSB DCONV CONVERT STATUS TO ASCII LDA ASCI+2 AND M377 XOR UASCI STA BUFFR+2 STORE STATUS IN BUFFER * ADB D2 LDA B,I ALF,RAR AND D7 JSB DCONV CONVERT RESOLUTION CODE TO ASCII LDA ASCI+2 AND M377 XOR UASCI STA BUFFR+3 STORE RESOLUTION CODE IN BUFFER * LDA B,I AND M7777 JSB DCONV CONVERT MULTIPLE TO ASCII LDA ASCI+1 AND M377 XOR UASCI STA BUFFR+4 STORE MULTIPLE IN BUFFER LDA ASCI+2 STA BUFFR+5 STORE MULTIPLE IN BUFFER * LDA B,I CHECK IF PROG IN TIME LIST AND MWAIT SZA NO JMP *+3 YES LDA AASCI PROGRAM NOT IN TIME LIST RSS LDA TZERO PROG IN TIME LIST STA BUFFR+12 STORE ASCII BLANK OR T IN BUFFER ADB D4 * LDA B,I HR ADA D24 JSB DCONV CONVERT HOURS TO ASCII LDA ASCI+2 ALF,ALF AND M377 XOR UASCI STA BUFFR+6 STORE HOURS IN BUFFER LDA ASCI+2 ALF,ALF AND MASKU XOR LASCI STA BUFFR+7 STORE HOURS IN BUFFER * ADB DM1 MIN LDA B,I ADA D60 JSB DCONV CONVERT MINUTES TO ASCII LDA ASCI+2 STA BUFFR+8 STORE MINUTES IN BUFFER * ADB DM1 SEC LDA B,I ADA D60 JSB DCONV CONVERT SECONDS TO ASCII LDA ASCI+2 ALF,ALF AND M377 XOR UASCI STA BUFFR+9 STORE SECONDS IN BUFFER LDA ASCI+2 ALF,ALF AND MASKU XOR LASCI STA BUFFR+10 STORE SECONDS IN BUFFER * ADB DM1 TENS OF MILLISECOND LDA B,I  ADA D100 JSB DCONV CONVERT TENS OF MSEC TO ASCII LDA ASCI+2 STA BUFFR+11 STORE TENS OF MSEC IN BUFFER LDA BUFAD LOAD A WITH OUTPUT BUFFER ADDRESS JMP $MESS,I RETURN SPC 1 TZERO ASC 1, T HED MESSAGE PROCESSOR--IT,XXXXX COMMAND * * IT,XXXXX,R,MMM * IT,XXXXX,R,MMM,HR,MN * IT,XXXXX,R,MMM,HR,MN,SC * IT,XXXXX,R,MMM,HR,MN,SC,MS * * * R=RESOLUTION CODE * 1= TEN MILLISECOND CODE * 2= SECONDS CODE * 3= MINUTES CODE * 4= HOURS CODE * MM= MULTIPLICATION FACTOR * HR= START HOURS * MN= START MINUTES * SC= START SECONDS * MS= START TENS OF MILLISECONDS * M0600 JSB TTNAM GO FIND ID SEG ADDR ADA D15 LDA A,I STATUS AND D15 SZA PROG MUST BE DORMANT TO CONTINUE JMP M0405 ILLEGAL STATUS ERROR * LDA WORK ADA D17 STA TEMPP STORE STARTING ADDRESS LDA TEMPP,I SAVE T BIT OF RES/T/MULT AND MWAIT STA TEMPP,I * JSB CVP2 CONVERT AND STORE RESOLUTION CODE SZA,RSS CHECK IF RESOL CODE 1,2,3, OR 4 JMP M0950 0-ILLEGAL RESOLUTION CODE LDB A ADB DM5 SSB,RSS JMP M0950 GREATER THAN 4-ILLEGAL CODE * ALF,ALF ALF,RAL OK, SO PUT IN UPPER 3 BITS XOR TEMPP,I STA TEMPP,I * JSB CVT1 CONVERT MULTIPLY FACTOR DEF P3 DEF CP3 AND M7777 MASK OFF ALL BUT LOW 12 BITS XOR TEMPP,I STA TEMPP,I RESOL CODE/MULT FACTOR STORED ISZ TEMPP INCR TO TMS ADDRESS LDA PARAM CHECK IF TIME VALUES GIVEN CPA D4 JMP M0610 NO , SO GO SET TO ZERO * JSB CVT1 CONVERT TENS OF MILLISECOND DEF P7 DEF CP7 ADA DM100 SSA,RSS MINUS, IF LEGAL VALUE JMP vM0950 INPUT ERROR M0602 STA TEMPP,I STORE 10 MSEC VALUE ISZ TEMPP INCR TO SECONDS ADDRESS * JSB CVT1 CONVERT SECONDS DEF P6 DEF CP6 ADA DM60 SSA,RSS MINUS, IF LEGAL VALUE JMP M0950 INPUT ERROR M0605 STA TEMPP,I STORE SECONDS ISZ TEMPP INCR TO MINUTES ADDRESS * JSB CVT1 CONVERT MINUTES AND STORE DEF P5 DEF CP5 ADA DM60 SSA,RSS YES, SO CONVERT TO DECIMAL JMP M0950 INPUT ERROR STA TEMPP,I STORE MINUTES ISZ TEMPP INCR TO HOURS ADDRESS * JSB CVT1 CONVERT HOURS AND STORE DEF P4 DEF CP4 ADA DM24 SSA,RSS MINUS, IF LEGAL VALUE JMP M0950 INPUT ERROR STA TEMPP,I STORE HOURS JMP M0RET RETURN. * M0610 LDA DM100 SET TIME VALUES IN ID SEG TO 0 STA TEMPP,I 10 S OF MSEC ISZ TEMPP LDA DM60 STA TEMPP,I SECONDS ISZ TEMPP STA TEMPP,I MINUTES ISZ TEMPP LDA DM24 STA TEMPP,I HOURS JMP M0RET RETURN HED MESSAGE PROCESSOR--PR,XXXXX,ZZ COMMAND * * PR,XXXXX,ZZ PROCESSOR * * THE PRIORITY CHANGE ROUTINE FUNCTIONS AS FOLLOWS: * * IF PROGRAM STATUS OTHER THAN DORMANT, STATUS ERROR. * * IF DORMANT, THEN PRIORITY VALUE CHANGED AND PROGRAM * * LIST UPDATED VIA LINK PROCESSOR. * * * M0650 JSB TTNAM GO TO FIND ID SEG ADDR ADA D15 STATUS ADDRESS LDA A,I CHECK PROGRAM STATUS AND D15 SZA PROG MUST BE DORMANT TO CONTINUE JMP M0405 ILLEGAL STATUS MESSAGE * JSB CVP2 CONVERT PRIORITY TO DECIMAL SZA,RSS CHECK IF ZERO PRIORITY REQ JMP M0950 ERROR-ILLEGAL VALUE * LDB A ADA DM100 MINUS DECIMAL 100 SSA,RSS CHECK IF GREATER THAN=D 100 JMP M0950 INPUT ERROR * LDA WORK ADA D6 STB A,I STORE NEW PRIORITY VALUE JSB $LIST CALL LIST PROCESSOR TO OCT 317 RELINK PROGRAMS DEF WORK JMP $MESS,I RETURN HED MESSAGE PROCESSOR--TM COMMAND * TM,DAY,HR,MN,SC PROCESSOR * THE REAL TIME CLOCK INITIATOR FUNCTIONS AS FOLLOWS: * * THE INPUT VALUES FOR DAY, HR, MN, SC ARE CONVERTED * * AND STORED. THE 10 MSEC VALUE IS SET TO ZERO. SPC 1 M0700 JSB CVP1 CONVERT DAYS TO DECIMAL LDB A ADA DM367 SSA,RSS JMP M0950 INPUT ERROR STB DAYS STORE DAYS * JSB CVP2 CONVERT HOURS TO DECIMAL ADA DM24 SSA,RSS JMP M0950 INPUT ERROR STA HRS STORE HOURS * JSB CVT1 CONVERT MINUTES TO DECIMAL DEF P3 DEF CP3 ADA DM60 SSA,RSS JMP M0950 INPUT ERROR STA MINS STORE MINUTES * JSB CVT1 CONVERT SECONDS TO DECIMAL DEF P4 DEF CP4 ADA DM60 SSA,RSS JMP M0950 INPUT ERROR STA SECS STORE SECONDS * LDA DM100 STA TMS STORE TENS OF MILLISECONDS JMP M0RET RETURN SPC 1 DM367 DEC -367 HED MESSAGE PROCESSOR--TI COMMAND * * * THE REQUEST TO GET CURRENT SYSTEM TIME OUTPUTS CURRENT * * DAY NUMBER, HOUR, MINUTES, AND SECONDS IN THE * * FOLLOWING FORMAT: * * DAY HR MN SC * * * M0750 LDA DM16 STA BUFFR SET OUTPUT CHARACTER COUNT LDA DAYS JSB DCONV CONVERT AND STORE DAYS DLD ASCI+1 AND M377 XOR UASCI DST BUFFR+1 * LDA AASCI STUFF NECESSARY WORDS WITH STA BUFFR+3 BLANKS STA BUFFR+5  STA BUFFR+7 * LDA HRS ADA D24 JSB DCONV CONVERT AND STORE HOURS LDA ASCI+2 STA BUFFR+4 * LDA MINS ADA D60 JSB DCONV CONVERT AND STORE MINUTES LDA ASCI+2 STA BUFFR+6 * LDA SECS ADA D60 JSB DCONV CONVERT AND STORE SECONDS LDA ASCI+2 STA BUFFR+8 LDA BUFAD SET A TO POINT TO OUTPUT BUFFER JMP $MESS,I RETURN HED MESSAGE PROCESSOR--DN,NN COMMAND * * REQUEST TO SET A DEVICE DOWN * M0780 JSB CVP1 CONVERT NN TO BINARY JMP $IODN GO TO $IODN ROUTINE SPC 3 * * MESSAGE PROCESSOR--UP,NN COMMAND * * * REQUEST TO SET A DEVICE UP * M0800 JSB CVP1 CONVERT NN TO BINARY JMP $IOUP GO TO $IOUP ROUTINE HED MESSAGE PROCESSOR--LU,N1,N2 COMMAND * * REQUEST OF LOGICAL UNIT ASSIGNMENT(N1 VALUE ONLY) OR * REQUEST LOGICAL UNIT REASSIGNMENT(N1 AND N2 * OR N1,N2 AND N3 PRESENT) * M0850 CLA SET N3-POSSIBLE SWITCH JSB P1OR2 JMP $LUPR GO TO $LUPR ROUTINE * * MESSAGE PROCESSOR--EQ,N1,N2 COMMAND * * REQUEST EQUIPMENT STATUS (N1 PARAMETER ONLY) * REQUEST EQUIPMENT BUFFERING OR NON BUFFERING (N1,N2 PARAMETERS) * N2 = 0 FOR NO BUFFERING * N2 = 1 FOR BUFFERING * M0900 CCA CLEAR N3-POSSIBLE SWITCH JSB P1OR2 JMP $EQST GO TO $EQST ROUTINE SPC 3 * * INPUT ERROR MESSAGE OUTPUT * * M0950 LDA INERR INPUT ERROR MESSAGE JMP $MESS,I RETURN SPC 3 * * MESSAGE PROCESSOR - TO,N1,N2 COMMAND * SPC 3 * REQUEST DEVICE TIME-OUT PARAMETER (N1 PARAMETER ONLY) * REQUEST TO ASSIGN DEVICE TIME-OUT PARAMETER (N1,N2 PARAMETERS) * N1 = DEVICE EQUIPMENT NUMBER * N2 = TIME-OUT PARAMETER TO BE ASSIGNED * M0990 CCA CLEAR N3-POSSIBLE SWITCH JSB P1OR2 JMP $CHTO HED ?MESSAGE PROCESSOR--APLDR FUNCTIONS PL,LO,RP * PL,LU * PROGRAM LIST * AP010 JSB CVP1 CONVERT 1ST PARAM STA TEMPH SAVE AS LU CLA STA CP1 CLEAR 1ST PARAM STA TCC SET FUNCTION CODE = 0 JMP AP100 CALL APLDR PROGRAM * SPC 3 * LO,XXXXX,LU,FN,KB * LOAD PROGRAM * AP020 CLA,INA SET FUNCTION CODE = 1 JMP AP035 GET LU, THEN CALL APLDR SPC 3 * RP,XXXXX,LU,FN,KB * REPLACE PROGRAM * AP030 LDA D2 SET FUNCTION CODE = 2 AP035 STA TCC SAVE FUNCTION CODE JSB CVP2 CONVERT 2ND PARAM STA TEMPH SAVE LU * AP100 LDA CP1 ELA CLA,SEZ,RSS IF NOT NEG COUNT, STA P1 CLEAR PROG NAME SEZ IF NAME GIVEN, JSB BLKNM FILL IN TRAILING BLANKS LDB APLDR FIND ID SEG JSB TNAME OF APLDR PROGRAM STA WORK SZA,RSS IF CAN'T FIND, JMP TTN01 GIVE -NO SUCH PROG- MSG * ADA D15 GET STATUS LDA A,I OF APLDR SZA DORMANT? JMP M0405 NO, -ILLEGAL STATUS- JSB CLIDS CLEAR PROG'S TEMP AREA * JSB CVT1 GET KEYBOARD UNIT DEF P4 CONVERT IT DEF CP4 ALF,ALF PUT IN UPPER HALF ADA TCC WITH FUNCTION STA B,I (1) SET KB,FU INB JSB CVT1 GET FILE NUMBER DEF P3 CONVERT IT DEF CP3 ALF,ALF PUT IN UPPER HALF ADA TEMPH WITH LU STA B,I (2) SET FN,LU INB LDA P1 STA B,I (3) SET NAM12 INB LDA P1+1 STA B,I (4) SET NAM34 INB LDA P1+2 STA B,I (5) SET NAM50 * JSB $LIST SCHEDULE APLDR OCT 301 DEF WORK JMP $MESS,I RETURN * APLDR DEF *+1 ASC 3,APLDR HED MESSAGE PROCESSOR SUBROUTINES P1OR#<:62 NOP ENTRY/EXIT STA TEMP (A)=N3 SWITCH 0=YES JSB CVP1 STA TEMPP LDA PARAM CHECK IF JUST ADA DM3 ONE PARAMETER SSA MORE THAN ONE JMP P1OR5 JSB CVP2 LDB TEMP IS A THIRD PARAMETER POSSIBLE? SZB,RSS JMP P1OR7 YES P1OR3 LDB A LOAD B WITH 'N2' OR 'N3:N2' LDA TEMPP LOAD A WITH N1 JMP P1OR2,I RETURN * P1OR5 CCB SET B REG TO -1 FOR 1 PARAMETER JMP *-3 P1OR7 AND M377 SAVE BITS 7-0 STA TEMP OF 'N2' LDB PARAM CHECK IF THREE PARAMETERS ADB DM4 SSB JMP P1OR3 P1OR9 JSB CVT1 CONVERT 'N3' TO BINARY DEF P3 DEF CP3 AND D7 KEEP BITS 2-0 AND LSL 11 MOVE TO BITS 13-11 IOR TEMP ASSEMBLE 'N3:N2' INTO A JMP P1OR3 SPC 3 CVP1 NOP CONVERT P1 JSB CVT1 DEF P1 DEF CP1 JMP CVP1,I SPC 3 CVP2 NOP CONVERT P2 JSB CVT1 DEF P2 DEF CP2 JMP CVP2,I SPC 3 DCONV NOP DECIMAL CONVERSION CCE (E)=1 FOR DECIMAL JSB $CVT3 CALL GENERAL PURPOSE CONV JMP DCONV,I RETURN HED MESSAGE PROCESSOR BUFFERS, POINTERS, ETC * * PARAMETER POINTERS FOR DATA STORAGE INIT DEF TAB PARAMETER INITIALIZATION POINTER TAB DEF OP OPERATION CODE BUFFER ADDRESS DEF P1 PARAMETER 1 BUFFER ADDRESS DEF P2 PARAMETER 2 BUFFER ADDRESS DEF P3 PARAMETER 3 BUFFER ADDRESS DEF P4 PARAMETER 4 BUFFER ADDRESS DEF P5 PARAMETER 5 BUFFER ADDRESS DEF P6 PARAMETER 6 BUFFER ADDRESS DEF P7 PARAMETER 7 BUFFER ADDRESS a<* PARAMETER STORAGE PARPT DEF PARAM PARAM NOP PARAMETER COUNTER NOP CHARACTER COUNT-OP CODE OP BSS 1 OPERATION CODE CP1 NOP CHAR COUNT-PARAM 1 P1 BSS 3 PARAM 1 (UP TP 3 WORDS-6CHAR.) CP2 NOP CHAR COUNT-PARAM 2 P2 BSS 3 PARAMETER 2 CP3 NOP CHAR COUNT-PARAM 3 P3 BSS 3 PARAMETER 3 CP4 NOP CHAR COUNT-PARAM 4 P4 BSS 3 PARAMETER 4 CP5 NOP CHAR COUNT -PARAM 5 P5 BSS 3 PARAMETER 5 CP6 NOP CHAR COUNT-PARAM 6 P6 BSS 3 PARAMETER 6 CP7 NOP CHAR COUNT-PARAM 7 P7 BSS 3 PARAMETER 7 LASCI OCT 000040 ASCII BLANK IN LOW CHARACTER UASCI OCT 020000 ASCII BLANK IN HIGH CHARACTER AASCI OCT 020040 ASCII BLANK IN BOTH CHAR MASKU OCT 177400 UPPER CHARACTER MASK (AND) TEMPP NOP TEMPORARY STORAGE KEY NOP TEMPORARY STORAGE OPERR DEF *+1 OPERATION CODE ERROR MESSAGE DEC -12 ASC 6,OP CODE ERR NOPRG DEF *+1 NO SUCH PROGRAM ERROR MESSAGE DEC -12 ASC 6,NO SUCH PROG INERR DEF *+1 INPUT ERROR MESSAGE DEC -12 ASC 6,INPUT ERROR HED CONTROL PARAMETER CONVERSION AND STORE IN ID SEGMENT * * PLOAD NOP ENTRY/EXIT JSB CLIDS GO TO CLEAR ID SEG TEMP AND SET B STB TEMP1 SAVE B-REG LDB D2 LDA P2 CPA NOPRG+2 CHECK IF -NOW- OPTION INB LDA PARAM CHECK IF ANY CONTROL PARAMETERS CMA,INA ADA B STA KEY COUNT OF CONTROL PARAMETERS SZA,RSS JMP PL040 RETURN * ADB INIT STB TEMPP STARTING LOCATION OF CONTROL PARAMETERS ADA D5 SSA OK-5 OR LESS CONTROL PARAMETERS JMP M0950 ERROR-MORE THAN 5 PARAMETERS * * CONVERT AND STORE PARAMETERS * PL030 LDA TEMPP,I STA *+4 DATA ADDRESS ADA DM1 STA *+3 CHARACTER ADDRESS JSB CVT1 CONVERT PARAMETER TO DECIMAL DEF * DEF * STA TEMP,I STORE CONVERTED DATA INTO TEMP ISZ TEMP INCREMENT STORE ADDRESS ISZ TEMPP INCREMENT DATA ADDRESS ISZ KEY INCREMENT COUNT JMP PL030 GO TO NEXT CONTROL PARAMETER PL040 LDB TEMP1 RESTORE B-REG JMP PLOAD,I RETURN * * SUBROUTINE TO CLEAR ID SEGMENT TEMPORARY * AND SET B REGISTER TO POINT TO TEMP AREA * CLIDS NOP ENTRY/EXIT LDA DM5 STA TEMP CLEAR OUT ID SEGMENT TEMP AREA LDB WORK COMPUTE ID SEG TEMP AREA ADDRESS CLA CLID2 INB STA B,I ISZ TEMP JMP CLID2 LDB WORK INB STB TEMP ID SEGMENT TEMP ADDRESS LDA WORK ADA D10 STB A,I SET ID SEG B REG TO PT TO TEMP JMP CLIDS,I RETURN * * SUBROUTINE FOR FILLING IN TRAILING BLANKS IN A NAME * BLKNM NOP ENTRY/EXIT LDA CP1 GET CHAR COUNT CMA MAKE POSITIVE LESS 1 CLE,ERA CONVERT TO WORDS, EVEN/ODD IN E STA B COPY TO B ADA TAB+1 ADDR OF WORD OF LAST CHAR ADB DEFBL ADDR TO BLANKER STB TEMPP SAVE ADDR IN TEMP LDB A,I GET LAST WORD ADB LASCI ADD LOWER BLANK SEZ,RSS IF EVEN CHAR-COUNT, SKIP STB A,I ELSE BLANK LOWER HALF * LDB AASCI GET DOUBLE BLANKS JMP TEMPP,I GO BLANK REST OF NAME DEFBL DEF *+1 STB P1+1 BLANK 3,4 STB P1+2 BLANK 5,6 JMP BLKNM,I EXIT * HED MESSAGE PROCESSOR NAME SEARCH * * CALL TO NAME SEARCH ROUTINE * JSB TTNAM * RETURNS: * (A) = ADDR OF PROG ID SEG (ALSO IN WORK) * TTNAM NOP JSB BLKNM BLANK-FILLL REST OF NAME LDB TAB+1 ADDRESS OF ASCII PROG NAME JSB TNAME CALL TO NAME SEARCH ROUTINE STA WORK SZA IF ZERO, THEN PROG NOT FOUND JMP TTNAM,I h EXIT TTN01 LDA NOPRG NO SUCH PROG ERROR JMP $MESS,I EXIT * * * SEARCH KEYWORD LIST FOR PROGRAM NAME * ON ENTRY * B IS ADDRESS OF ASCII PROGRAM NAME * ON RETURN * A IS 0 IF PROGRAM NOT FOUND * A IS ID SEGMENT ADDRESS OF REQUESTED PROGRAM * TNAME NOP ENTRY/EXIT LDA B,I ASCII NAME CHAR 1 AND 2 STA TEMP3 INB INCR TO CHAR 3 AND 4 ADDR LDA B,I ASCII NAME CHARS 3 AND 4 STA TEMP4 INB INCR TO CHAR 5 ADDR LDA B,I ASCII NAME CHAR 5 AND X AND MASKU MASK OFF X STA TEMP5 LDA KEYWD STA KEY TOP OF KEYWORD LIST * TN005 LDA KEY,I CHECK IF AT END OF LIST SZA,RSS JMP TNAME,I END OF LIST ERROR RETURN ADA D12 LDB A,I ID SEG ASCII NAME CHARS 1 AND 2 CPB TEMP3 COMPARE WITH REQUESTED CHAR 1,2 INA,RSS COMPARES JMP TN030 DOES NOT COMPARE-GO TO NEXT PROG LDB A,I ID SEG ASCII NAME CHARS 3 AND 4 CPB TEMP4 COMPARE WITH REQUESTED CHARS 3,4 INA,RSS COMPARES JMP TN030 DOES NOT COMPARE-GO TO NEXT PROG LDA A,I ID SEG ASCII NAME CHARS 5,X AND MASKU MASK OFF X CPA TEMP5 COMPARE CHARACTER 5 JMP TN040 COMPARES-SO PROGRAM FOUND * TN030 ISZ KEY INCREMENT KEYWORD ADDRESS JMP TN005 GO TO COMPARE CHARACTERS TN040 LDA KEY,I LOAD A WITH ID SEGMENT ADDRESS JMP TNAME,I EXIT HED CVT1 (ASCII TO BINARY CONVERSION) * * ASCII TO BINARY CONVERSION ROUTINE (DECIMAL) * * CALLING SEQUENCE * JSB CVT1 * DEF DATA BUFFER ADDRESS * DEF ADDRESS OF CHARACTER COUNT * * RETURNS: * (A) = VALUE * (B) = UNCHANGED * CVT1 NOP ENTRY/EXIT STB TEMP3 LDB CVT1,I LOAD DATA ADDR INTO B CLE,ELB STB TEMP2 FORM AND STORE CHAR ADDRESS ISZ CVT1 INCR TO CHARACTER COUNT LDB CVT1,I LDB B,I STB TMP1 STORE CHARACTER COUNT ISZ CVT1 INCR TO EXIT ADDR * CLA SSB,RSS IF NON-NEGATIVE COUNT JMP CV020 THEN ERROR, RETURN (A)=0 * CV015 MPY D10 MULT PREVIOUS DIGITS * 10 STA TMP STORE MULTIPLIED VALUE LDB TEMP2 LOAD B WITH CHAR ADDR CLE,ERB FORM WORD ADDRESS LDA B,I LOAD A WITH DATA VALUE SEZ,RSS IF E SET, THEN LOWER CHAR. ALF,ALF UPPER CHAR., SO ROTATE INTO LOWER AND M377 MASK OFF ALL BUT LOWER CHAR. * ADA DM58 CHECK IF LEGAL DATA CHARACTER SSA,RSS JMP M0950 ERROR ADA D10 SSA JMP M0950 ERROR * ADA TMP ADD TO ACCUMULATED ISZ TEMP2 INCR CHAR ADDRESS ISZ TMP1 INCREMENT CHARACTER COUNT JMP CV015 GO TO PROCESS NEXT CHARACTER * CV020 LDB TEMP3 RESTORE B-REG JMP CVT1,I RETURN SPC 1 DM58 DEC -58 HED CVT3 (BINARY TO ASCII CONVERSION) * * BINARY TO ASCII CONVERSION ROUTINE * * CALLING SEQUENCE * * SET E TO 0 IF OCTAL CONVERSION OR * SET E TO 1 FOR DECIMAL CONVERSION * LDA NUMBER TO BE CONVERTED * JSB $CVT3 * * RESULTS IN ASCI, ASCI+1, ASCI+2 $CVT3 NOP ENTRY/EXIT STB TEMP6 SAVE B REGISTER LDB PTT INIT LOCATION OF BUFFER STB TEMP2 LDB FILL SET BUFFER=ASCII 0'S STB ASCI STB ASCI+1 STB ASCI+2 CLB,SEZ,CCE JMP % DECIMAL CONVERSION * * OCTAL CONVERSION * RRR 15 SHIFT INTO B RSS SO LEFTMOST 3-BITS RRL 3 ARE IN A-REG JSB DPCK TO BE CONVERTED. SZB DONE YET? JMP *-3 NO, CONV NEXT DIGIT JSB DPCK YES, SAVE DIGIT * * COMMON EXIT ROUTINE FOR $CVT3 * CVTX LDA PTT LOAD A WITH ASCI BUFF>ER ADDRESS LDB TEMP6 RESTORE B JMP $CVT3,I RETURN * * DECIMAL CONVERSION * % LDB LPDG INIT DIVISOR BY STB CVTY POWERS OF 10 ISZ TEMP2 * DPCR CLB DIV D1000 DIV BY POWRS OF 10 CVTY EQU *-1 USED TO MODIFY POWER OF 10 JSB DPCK CONVERT A DIGIT TO ASCII ISZ CVTY CHANGE POWER OF 10 FOR NEXT DIV LDA B GET AND CHECK REMAINDER SZA DONE? JMP DPCR NO, DIV AGAIN JMP CVTX YES, GO EXIT * * CONVERT DIGIT TO ASCII * DPCK NOP ADA TEMP2,I SEZ,CME ALF,ALF SHIFT TO UPPER HALF STA TEMP2,I SAVE IN WORD CLA,SEZ ISZ TEMP2 BUMP ADDR IF RIGHT CHAR JMP DPCK,I EXIT * DM6 DEC -6 FILL OCT 30060 DM100 DEC -100 PRIORITY CODE LPDG DEF *+1 D1000 DEC 1000 D100 DEC 100 D10 DEC 10 D1 DEC 1 PTT DEF ASCI ASCI BSS 3 HED SYSTEM START UP ******************************************************************** * THE START SECTION: * * CLEARS INTERRUPT SYSTEM * * SETS FENCE REGISTER TO 0 * * CLEARS XEQT * * SCHEDULES 'FMGR' IF PRESENT * STARTS THE CLOCK (TBG) * OUTPUTS MESSAGE TO SET TIME (ON CLOCK) * THIS SECTION IS EXECUTED ONCE - IT IS OVERLAYED ******************************************************************** * * $STRT CLC 0 CLEAR INTERRUPT SYSTEM * CLA STA FENCE OTA 5B SET FENCE REGISTER TO ZERO STA XEQT CLEAR XEQT WORD * STA DUMMY,I ZERO OUT PRIV INT LOC * SPC 1 TBGON LDA TBG IOR OTA STA *+5 IOR M1100 STA *+4 BREAD NOP LDA D2 SET INTERRUPT OTA 0 INTERVAL TO 10 MSEC STC 0,C SPC 1 M LDA BEGIN OUTPUT JSB $SYMG "SET TIME" SPC 1 JMP $XEQ SPC 1 OTA OTA 0 M1100 OCT 1100 BEGIN DEF *+1 DEC -10 OCT 6412 ASC 4,SET TIME BUFFR BSS 22 HED OUTPUT *_ ON SYSTEM TELETYPE ******************************************************************** * THE $TYPE SECTION FUNCTIONS AS FOLLOWS: * * ENTRY IS MADE BY STRIKING ANY SYSTEM TELETYPE KEY. * * IF TELETYPE FLAG NOT BUSY, THEN * IS OUTPUT AND A * * REQUEST IS MADE FOR INPUT. IF FLAG IS SET THEN * * IGNORE REQUEST. UPON COMPLETION OF INPUT (LF), * * THE MESSAGE PROCESSOR ROUTINE IS CALLED. * * UPON RETURN, IF A REGISTER IS ZERO THEN NO * * MESSAGE TO BE OUTPUT. IF A NON-ZERO, THEN A IS * * ADDRESS OF MESSAGE TO OUTPUT WITH CHARACTER * * COUNT THE FIRST WORD IN BUFFER. * ******************************************************************** * * $TYPE LDA OPFLG CHECK SYSTEM TTY FLAG SZA JMP $XEQ BUSY, SO RETURN TO $XEQ * JSB $XSIO CALL TO OUTPUT ASTERISK(*) OCT 1 ON SYSTEM TELETYPE NOP NOP OCT 2 DEF ASTRK DEC -4 OUTPUT CHARACTER COUNT * JSB $XSIO CALL TO REQUEST OPERATOR INPUT OCT 1 DEF TYP10 INPUT COMPLETION ADDRESS NOP OCT 401 INPUT WITH TYPEOUT BUFAD DEF BUFFR DEC -44 DETERMINED BY $STRT ROUTINE * ISZ OPFLG SET SYSTEM TTY BUSY FLAG JMP $XEQ GO TO $XEQ * TYP10 JSB $MESS GO TO MESSAGE PROCESSOR ROUTINE SZA,RSS CHECK IF MESSAGE TO BE OUTPUT JMP TYP30 NO MESSAGE-SO GO RETURN LDB A,I STB TYP26 INA STA TYP25 * TYP20 JSB $XSIO CALL TO OUTPUT ERR MESSAGE OCT 1 DEF TYP30 COMPLETION ADDRESS NOP OCT 2 TYP25 NOP TYP26 NOP JMP $XEQ GO TO $XEQ * TYP30 CLA CLEAR SYSTEM FLAG FOR NEXT STA OPFLG REQUEST JMP $XEQ * ASTRK OCT 006412 CR, LF ASC 1,*_ ASTERISK, LEFT ARROW HED MEMORY PROTECT VIOLATION SCHEDULER PREPROCESSORS ******************************************************************** * THE $MPT1 THRU $MPT7 PREPROCESSORS CONSIST OF MEMORY * * PROTECT VIOLATION CALLS FROM EXEC THAT INVOLVE LIST * * PROCESSING. * * THE FOLLOWING REQUESTS ARE HANDLED: * * PROGRAM COMPLETION (DORMANT) * * SUSPEND (OPERATOR) * * BACKGROUND SEGMENT LOAD * * SCHEDULE WITH WAIT * * SCHEDULE WITHOUT WAIT * * CURRENT SYSTEM TIME (TIME ROUTINE CALL) * * SET ID SEGMENT TIME VALUES (TIMER ROUTINE CALL) * ******************************************************************** SPC 3 * * DORMANT REQUEST - PROGRAM HAS RUN TO COMPLETION * $MPT1 LDA XEQT ID SEG ADDR OF CURRENT STA *+3 EXECUTING PROGRAM JSB $LIST OCT 100 DORMANT REQUEST DEF * JMP $XEQ GO TO $XEQ SPC 3 * * PROGRAM SUSPEND REQUEST * $MPT2 LDA XEQT ID SEG ADDR OF CURRENT STA *+3 EXECUTING PROGRAM JSB $LIST OCT 106 OPERATOR SUSPEND REQUEST DEF * JMP MPT7A+1 SPC 3 * $MPT4 EQU * MPTA JSB IDCKK CHECK IF PROGRAM DORMANT LDA WORK STA XTEMP,I STORE WAIT PROG ID SEGMENT ADDR IN TEMP LDB XEQT ADB D15 LDA B,I IOR MWAIT SET STATUS WAIT REQUEST BIT  STA B,I INTO CURRENT EXEC PROGRAM RSS * * SCHEDULE REQUEST WITHOUT WAIT * $MPT5 JSB IDCKK CHECK IF PROGRAM DORMANT LDA RQCNT CHECK PARAMETER COUNT CMA,INA INA SZA,RSS JMP MEM15 NO SCHEDULING PARAMETERS * STA TEMP SAVE LOOP COUNT ADA D5 SSA JMP MEM30 * LDB DEFR3 RQP3 ADDRESS LDA WORK INA STA TEMP1 STORE ADDRESS LDA B,I GET SCHEDULING PARAMETER LDA A,I STA TEMP1,I AND STORE ISZ TEMP1 INB ISZ TEMP JMP *-6 GO TO STORE NEXT SCHED PARAMETER LDB WORK ADB XD10 LDA WORK INA STA B,I * MEM15 LDA RQRTN STA XSUSP,I POINT JMP $XEQ * LDB ERMS3 MEM20 LDA ASY OUTPUT SC ERROR CODE JSB $ERMG CALL SYSTEM ERROR MESSAGE ROUTINE LDA XEQT JSB $ABRT GO TO ABORT ROUTINE JMP $XEQ RETURN CONTROL TO $XEQ * MEM25 LDB ER5 NO SUCH PROG ERROR CODE JMP MEM20 MEM30 LDB ASC01 ILLEGAL PARAMETER COUNT JMP MEM20 SPC 6 * * CALL TO GET SYSTEM REAL TIME * $MPT6 CCA CHECK PARAMETER COUNT ADA RQCNT SZA JMP MEM30 PARAMETER COUNT ERROR LDA XEQT FORM PROG TYPE ADDR ADA D14 LDA A,I LOAD IN PROG TYPE AND D15 LDB RQP2 USER BUFFER ADDRESS CMB ADB RTORG CHECK IF LEGAL RT AREA ADDRESS SSB JMP MPT6B LDB ASC02 NO, SO LOAD B WITH ERROR CODE JMP MEM20 ERROR * MPT6B JSB TIME JMP MEM15 GO TO STORE RETURN ADDRESS SKP * * CALL TO SET ID SEGMENT TIME VALUES * $MPT7 LDA RQCNT CHECK PARAM COUNT FOR 4 OR 7 CPA D7 RSS CPA D4 RSS JMP MEM30 ERROR IN PARAMETER COUNT MPT7A JSB TIMER CALL TIMER ROUTINE SZA JMP MEM20 JMP MEM15 O * * CHECK IF PROGRAM DORMANT AND THEN SCHEDULE * IDCKK NOP LDB RQP2 GET ID SEGMENT ADDRESS JSB TNAME SZA,RSS JMP MEM25 NO SUCH PROGRAM ERROR STA IDCKL SAVE ID SEG ADDRESS FOR $LIST ADA D15 CHECK PROGRAM STATUS FOR DORMANT LDA A,I STA XA,I RETURN PROG STATUS IN A REG SZA DORMANT? JMP MEM15 NO - DO NOT SCHEDULE JSB $LIST YES - SCHEDULE OCT 101 IDCKL DEF * JMP IDCKK,I RETURN SPC 1 XD10 DEC 10 ASY ASC 1,SC ASCII -SC- FOR SCHED ERROR ASC01 ASC 1,01 ILLEGAL PARAM COUNT ERR CODE ASC02 ASC 1,02 ILLEGAL BUFFER ADDRESS ERR CODE DEFR3 DEF RQP3 HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** * * *** SYSTEM BASE PAGE COMMUNICATION AREA *** * . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES * DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) * INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES * TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE * KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26  OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 8 PARAMETERS) * * DEFINITION OF SYSTEM LISTS (QUEUES) * * DORMT EQU .+32 ADDRESS OF 'DORMANT' LIST, SKEDD EQU .+33 'SCHEDULE' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BACKGROUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTOR0 B@ * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * * * THE TERMS RTS/2100 AND RTE-C ARE SYNONYMOUS AND * THE TERMS ARE USED INTERCHANGEABLY IN THIS DOCUMENT. * * RTE-C RTIOC * E.WONG 15MAR73 * REV.C 10MAR75 D.L.S. COPYRIGHT * ******************************************************* * NAM RTIOC * ENT $CIC,$XSIO,$SYMG,$IORQ,$IOUP,$IODN ENT $IRT,$XCIC,$DEVT ENT $CVEQ * EXT $RQST,$CLCK,$XEQ,$TYPE,$LIST,$ALC,$RTN EXT $CVT3,$ERMG,$MESS EXT $ABRT * SUP * * * THIS MODULE INCLUDES THE FOLLOWING MAJOR SECTIONS: * 1) CENTRAL INTERRUPT CONTROL * 2) INPUT / OUTPUT CONTROL * - I/O REQUEST PROCESSING * - I/O COMPLETION PROCESSING * - GENERAL I/O ERROR PROCESSING * 3) SYSTEM ERROR DIAGNOSTIC PRINT ROUITNE * 4) PROCESSOR FOR OPERATOR I/O STATEMENTS * HED < CENTRAL INTERRUPT CONTROL > * *** C E N T R A L I N T E R R U P T C O N T R O L *** * * THE PROCESSING OF SYSTEM INTERRUPTS IS CONTROLLED * BY DIRECTING ALL SOURCES TO THE ENTRY POINT < CIC >. * < CIC > IS RESPONSIBLE FOR SAVING AND RESTORING * THE CURRENT STATE OF THE MACHINE, ANALYSING THE * SOURCE OF THE INTERRUPT, AND ACTIVATING THE * APPROPRIATE PROCESSOR. THIS ROUTINE IS TABLE-DRIVEN * BY THE *INTERRUPT TABLE*. * * SPECIAL PROCESSING FOR A "PRIVILEGED" CLASS OF * INTERRUPTS IS PROVIDED BY CIC. THIS IS DESCRIBED * FULLY IN SECTION III BELOW. BRIEFLY, A SPECIAL * I/O CARD CAN BE USED TO SEPARATE SPECIAL INTERRUPTS * FROM NORMAL SYSTEM CONTROLLED INTERRUPTS. THE * PRESEKNCE AND LOCATION OF THE SPECIAL CARD IS * NOTED AT SYSTEM CONFIGURATION TIME. IF IT IS * PRESENT, THE EXEC OPERATIONS ARE NOT PERFORMED * WITH THE INTERRUPT SYSTEM DISABLED BUT RATHER * WITH THE CONTROL SET ON THE SPECIAL CARD TO * HOLD OFF SYSTEM I/O INTERRUPTS. * * I. INTERRUPT TABLE (INTBL) * * A TABLE, ORDERED BY HARDWARE INTERRUPT PRIORITY, * DESIGNATES THE ASSOCIATED SOFTWARE PROCESSOR AND * THE PROCEDURE FOR INITIATING THE PROCESSOR. THIS * TABLE IS CONSTRUCTED BY *RTGEN* ON INFORMATION * SUPPLIED BY THE USER IN CONFIGURING THE SYSTEM. * THE TABLE CONSISTS OF ONE ENTRY PER INTERRUPT * SOURCE: EACH ENTRY CONTAINS ONLY ONE WORD. THE * CONTENTS OF EACH VALID ENTRY IS THE IDENTIFIER * OF THE PROCESSOR. SYSTEM PROCESSORS ARE NOTED * BY POSITIVE VALUES, USER PROCESSORS BY NEGATIVE * VALUES: * * 1. SYSTEM - THE IDENTIFIER IS THE ADDRESS OF * THE EQT ENTRY IDENTIFYING THE I/O DEVICE. * * 2. USER - THE ADDRESS OF THE PROGRAM * IDENTIFICATION SEGMENT IS IN 2-S COMPLEMENT * FORM IN THE ENTRY. * * 3. ILLEGAL - AN ENTRY CORRESPONDING TO AN * ILLEGAL INTERRUPT SOURCE CONTAINS ZERO. * * A PROCESSOR IS CALLED DIRECTLY IF IT RESPONDS * TO STANDARD SYSTEM INTERRUPT (E.G., CLOCK, * MEMORY PROTECT, I/O DEVICE CONTROLLED BY A * SYSTEM DRIVER) OR IS SCHEDULED IN THE NORMAL * PRIORITY ORDER IF IT RESPONDS TO A USER * CONTROLLED DEVICE OR INTERRUPT SOURCE. SKP * II. INTERRUPT PROCESSING * * INTERRUPT ACKNOWLEDGEMENT BY THE CPU CAUSES * THE INSTRUCTION IN THE WORD CORRESPONDING * TO THE I/O CHANNEL ADDRESS TO BE EXECUTED. * FOR ALL ACTIVE I/O CHANNELS ( PLUS LOCATIONS * 5-7 ) CONTROLLED BY THE SYSTEM, THE INSTRUCTION * SET IN EACH INTERRUPT LOCATION IS A JUMP * SUBROUTINE INDIRECTLY TO < CIC >. * SKP * PERFORMS THE FOLLOWING: * * 1. DISABLES THE INTERRUPT SYSTEM. * * so 2. SAVES ALL REGISTERS PLUS THE INTERRUPT * RETURN POINT IN THE EXECUTING * ID SEGMENT. * * 3. CLEARS THE FLAG OF THE INTERRUPT SOURCE. * * 4. SETS 'MPTFL' = 1 TO MEAN MEMORY PROTECT * IS OFF - FLAG FOR PRIVILEGED PROCESSORS. * * 5. CHECKS FOR SPECIAL INTERRUPT PROCESSING. * IF 'DUMMY' IN BASE PAGE COMMUNICATION * AREA = 0, THEN LEAVE THE INTERRUPT SYSTEM * DISABLED AND GO TO STEP 6. * * 'DUMMY' > 0 - PRIVILEGED INTERRUPTS: * -THE CONTENTS OF 'DUMMY' IS THE I/O * ADDRESS OF THE CARD; THIS IS USED TO * SET THE CONTROL FF ON THE CARD (FLAG * IS ALREADY SET) TO HOLD OFF LOWER * PRIORITY INTERRUPTS (SYSTEM INTERRUPTS) * -CLEARS THE CONTROL FLIP-FLOP OF * EACH DMA CHANNEL TO PROHIBIT POSSIBLE * INTERRUPTS FROM OCCURRING. * -ENABLE THE INTERRUPT SYSTEM. * * 6. TRANSFERS DIRECTLY TO THE INTERRUPT * PROCESSOR FOR SOURCES OF: * * 5 - MEMORY PROTECT VIOLATION * (TBG) - TIME BASE GENERATOR * * FOR OTHER SOURCES, THE INTERRUPT SOURCE * CODE IS USED TO INDEX THE INTERRUPT TABLE. * THE CONTENTS OF THE INTBL ENTRY DETERMINES * THE MANNER IN INITIATING THE PROCESSOR: * * A. +, THE CONTENTS OF THE ENTRY IS * ASSUMED TO BE THE FWA OF AN EQT ENTRY. * THE ADDRESSES OF THE 15-WORD ENTRY * ARE SET IN AND CONTROL * TRANSFERRED DIRECTLY TO THE COMPLETION * SECTION ADDRESS (WORD 3 OF EQT ENTRY). * * B. -, THE VALUE IS SET POSITIVE AND IS * SET IN A CALL TO IN THE * SCHEDULING MODULE- THE CALL IS MADE IF * THE USER PROGRAM IS DORMANT- CONTROL IS * TRANSFERRED TO $XEQ. IF THE PROGRAM IS * NOT DORMANT, IT IS NOT SCHEDULED AND THE * DIAGNOSTIC "SC03 INT XXXXX" IS OUTPUT * TO THE SYSTEM TTY- XXXXX IS THE PROGRAM * NAME. CONTROL IS RETURNED TO THE INTER- * RUPTED SEQUENCE. * * C. 0, ILLEGAL OR UNDEFINED INTERRUPTS ARE * NOT PROCESSED BUT THE DIAGNOSTIC * "ILL INT XX" IS OUTPUT TO THE SYSTEM * TTY. XX IS THE INTERRUPT CODE. * * 7. I/O DRIVER RETURNS INDICATE CONTINUATION * OR COMPLETION OF THE OPERATION BY THE * DRIVER OR DEVICE: * * A. RETURN AT (P+1): COMPLETION OF THE * OPERATION. CIC TRANS- * FERS DIRECTLY TO THE * IOC COMPLETION SECTION * AT < IOCOM >. CONTROL * IS NOT RETURNED TO * < CIC >. * * B. RETURN AT (P+2): CONTINUATION OF THE * OPERATION. CIC RETURNS * TO THE INTERRUPTED * SEQUENCE AS DESCRIBED * IN STEP 8 FOLLOWING. * * 8. RESTORING INTERRUPT CONDITIONS AND RETURN * TO POINT OF INTERRUPTION. A SUBROUTINE * CALLED '$IRT' IS PROVIDED FOR USE BY * OTHER MODULES OF THE R/T EXEC TO RESET * FLAGS AND THE DMA CHANNELS. THE CALL TO * '$IRT' MUST BE IN THE FOLLOWING SEQUENCE * TO PROPERLY RESET AND TO ENABLE INTERRUPTS: * * - JSB $IRT - * --RESTORE REGISTERS-- * - STF 0 - * - STC 5 - * - JMP -,I - * * $IRT PERFORMS THE FOLLOWING: * - DISABLES THE INTERRUPT SYSTEM * - SETS 'MPTFL' = 0 TO MEAN THAT MEMORY * PROTECT IS ON (ENABLED). * - IMMEDIATE RETURN IF 'DUMMY' = 0 * - ISSUES A CLC TO CLEAR THE CONTROL * FF ON THE SPECIAL CARD. V* - SETS THE CONTROL FF ON EITHER DMA * CHANNEL IF BIT 15 OF THE INTBL WORD * =1 TO MEAN IT IS ACTIVE. THIS * ENABLES DMA INTERRUPTS ONLY. * - RETURNS TO CALLER. * * * SKP * III. SPECIAL (PRIVILEGED) INTERRUPTS * * THIS PROVISION ALLOWS INTERRUPTS FROM SPECIAL * DEVICES TO BE RECOGNIZED WITHIN 100 MICRO SECONDS * AND TO BE PROCESSED BY SPECIAL, COMPLETELY * INDEPENDENT ROUTINES CLASSIFIED AS SYSTEM TYPE * PROGRAMS. INTERRUPTS ARE CHANNELED DIRECTLY * TO THE ENTRY POINT OF A ROUTINE BY A JSB INDIRECT * IN THE CORRESPONDING CORE LOCATION. $CIC IS * NOT AWARE OF THESE SPECIAL INTERRUPTS OCCURRING; * IT ONLY ALLOWS THE INTERRUPT SYSTEM TO BE * ENABLED AND A SOFTWARE FLAG SET TO INDICATE * THE STATUS OF MEMORY PROTECT. THE JSB TO THE * ENTRY POINT FOR A ROUTINE IS SET BY USING THE * "ENT,XXXXX" STATEMENT IN RTGEN WHEN CONFIGURING * A REAL-TIME SYSTEM. * THE SPECIAL PROCESSING ROUTINES CANNOT USE * ANY FEATURES OR REQUESTS OF THE STANDARD * R/T EXEC. THESE ARE INDEPENDENT ROUTINES. * COMMUNICATION BETWEEN A NORMAL PROGRAM UNDER * THE CONTROL OF THE R/T EXEC AND A SPECIAL * INTERRUPT PROCESSOR CAN BE DONE THROUGH * THE APPROPRIATE COMMON REGION: I.E. FLAGS OR * INDICATORS CAN BE SET IN PRE-DEFINED WORDS * IN COMMON TO INITIATE PROCESSING. THE NORMAL * USER PROGRAM CAN BE SCHEDULED TO RUN AT A * PERIODIC TIME INTERVAL TO SCAN THE INDICATORS. * THIS FACILITY IS PROVIDED TO ACCOMODATE HIGH- * SPEED PROGRAM CONTROLED DATA TRANSMISSION * WHICH REQUIRES QUICK RESPONSE. * THE SPECIAL INTERRUPT PROCESSORS ARE * RESPONSIBLE FOR SAVING AND RESTORING ALL * REGISTERS USED AND FOR RESTORING MEMORY * PROTECT TO ITS STATE BEFORE THE SPECIAL * INTERRUPT OCCURRED. MEMORY PROTECT IS * AUTOMATICALLY DISABLED AT THE OCCURRENCE *  OF ANY INTERRUPT. THE WORD 'MPTFL' IN THE * BASE PAGE COMMUNICATION AREA IS SET BY THE * R/T EXEC TO INDICATE THE STATUS OF THE * MEMORY PROTECT: * * 'MPTFL' = 0 MEANS MEMORY PROTECT IS 'ON'. * THE SPECIAL ROUTINE MUST ISSUE * A STC 5 IMMEDIATELY BEFORE * RETURNING TO THE INTERRUPTED * SEQUENCE BY A JMP -,I * * = 1 MEANS THAT THE R/T EXEC ITSELF * WAS EXECUTING WHEN THE INTERRUPT * OCCURRED AND THAT MEMORY * PROTECT IS 'OFF'. THE ROUTINE * MUST NOT ISSUE THE STC 5 IN * THIS CASE. * * IF A SPECIAL INTERRUPT ROUTINE MUST EXECUTE * WITH THE INTERRUPT SYSTEM DISABLED, THE * STC 0 TO RE-ENABLE INTERRUPTS JUST PRIOR TO * EXITING MUST BE IN THE FOLLOWING SEQUENCE IF * MEMORY PROTECT IS ALSO TO BE TURNED ON: * * - STF 0 - * - STC 5 - * - JMP -,I - SKP CIC NOP * CLF CLF 0 DISABLE INTERRUPT SYSTEM * * PRESERVE CURRENT STATUS OF MACHINE * DST XA,I SAVE REGISTERS ERA,ALS A,B SOC E AND INA OVERFLOW STA XEO,I LIA 4 GET INTERRUPT SOURCE CODE. IOR CLF CONSTRUCT A CLF XX INSTRUCTION STA *+1 AND CLEAR INTERRUPT FLAG TO * ALLOW SPECIAL USER INTERRUPTS NOP TO BE ACKNOWLEDGED. * $XCIC LIA 4 ### SPECIAL ENTRY TO SKIP CLF ### STA INTCD SAVE INTERRUPT SOURCE CODE. * CLA,INA SET 'MPTFL' = 1 TO MEAN STA MPTFL MEMORY PROTECT IS OFF. * SW1 JMP CIC.0 (NOP IF PRIVILEDGED OPTION) * * PROVIDE FOR SPECIAL (PRIVILEGED) INTERRUPTS * STC1 STC 12B SET CONTROL ON THE DUMMY I/O * CLC 6 CLEAR DMA CHANNELS CLC 7 CONTROL FF. * STF STݕF 0 RE-ENABLE INTERRUPTS * * CIC.0 LDB INTCD GET INTERRUPT CODE AGAIN. LDA CIC SAVE P-REGISTER AS POSSIBLE STA XSUSP,I POINT OF SUSPENSION. * * CHECK FOR TRANSFER TO NON-I/O SYSTEM PROCESSOR * CPB .5 IF MEMORY PROTECT VIOLATION, JMP MPT GO TO EXAMINE ADDRESS IN I/O 5. * CPB TBG IF TIME BASE GENERATOR, JMP CLOCK GO TO TIME PROCESSOR. * * CHECK LEGALITY OF INTERRUPT * LDA INTCD INTERRUPT ADA N6 CODE - 6. STA B (SAVE FOR TABLE INDEX) SSA - ERROR IF CODE JMP CIC.4 LT 6, ISSUE DIAGNOSTIC. CMA CHECK FOR BEYOND RANGE ADA INTLG OF INTERRUPT TABLE SSA ERROR IF JMP CIC.4 NEGATIVE, ISSUE DIAG. * * GET PROCESSOR IDENT FROM INTERRUPT TABLE * ADB INTBA INDEX TO PROPER ENTRY BY SOURCE LDA B,I CODE. GET CONTENTS OF ENTRY SZA,RSS UNDEFINED INTERRUPT JMP CIC.4 IF VALUE = 0, ISSUE DIAG. * * LDB INTCD REMOVE CPB .6 BIT 15 OF INTBL WORD RSS IF DMA CPB .7 CHANNEL RAL,CLE,ERA INTERRUPT. * SSA,RSS SYSTEM PROCESSOR IS TO BE CALLED JMP CIC.2 IF VALUE IS POSITIVE. * ** INTERRUPT PROCESSOR IS USER ROUTINE TO BE ** SCHEDULED FOR PRIORITY EXECUTION * CMA,INA SET POSITIVE TO GET ID SEGMENT STA CIC.1 ADDRESS, SET IN CALL TO . * ADA .15 CHECK STATUS OF PROGRAM. LDA A,I IF STATUS IS ZERO (DORMANT), SZA SCHEDULE PROGRAM, OTHERWISE JMP CIC.5 ISSUE DIAGNOSTIC. * JSB LIST CALL SCHEDULER TO LINK PROGRAM OCT 101 INTO SCHEDULE LIST. CIC.1 NOP HOLDS ID SEGMENT ADDRESS JMP XEQ SPC 1 N6 DEC -6 * * * ASSUME PROCESSOR FOR CODE GT= 6 IS A * SYSTEM I/0 DRIVER. VALUE OF INTERRUPT * TABLE ENTRY IS THE STARTING A"DDRESS * OF THE EQUIPMENT TABLE ENTRY CORRESPONDING * TO THE INTERRUPTING DEVICE. * CIC.2 JSB SETEQ SET EQT ENTRY ADDRESSES. * LDA INTCD (A) = INTERRUPT SOURCE CODE * CIC.6 LDB EQT14,I SET DEVICE STB EQT15,I TIME-OUT CLOCK * * CALL I/O PROCESSOR, COMPLETION SECTION * LDB EQT3,I CALL DRIVER JSB B,I *COMPLETION* SECTION. * JMP IOCOM (P+1): *COMPLETION RETURN* * CLA (P+2): *CONTINUATION RETURN* LDB OPATN CHECK FOR OPERATOR ATTENTION. STA OPATN -CLEAR OPERATOR FLAG- SZB IF FLAG SET, JMP TYPE ACKNOWLEDGE. * * * RESET INTERRUPT CONDITIONS - RETURN TO SEQUENCE * CIC.3 JSB $IRT RESET CONDITIONS LDA XEO,I CLO SLA,ELA STF 1 -RESTORE DLD XA,I REGISTERS- STF 0 ENABLE INTERRUPT SYSTEM STC 5 TURN ON -MEMORY PROTECT- JMP CIC,I --- RETURN --- * * ILLEGAL OR UNDEFINED INTERRUPT * CIC.4 LDA INTCD GET THE INTERRUPT CODE. CLE E = 0 FOR ASCII/OCTAL JSB CVT3 CONVERSION. ADA .2 STORE (WORD 3 FROM CVT3) LDA A,I INTERRUPT CODE IN MESSAGE. STA CICM1+6 LDA CICM1 PRINT JSB SYSMG "ILL INT XX", JMP CIC.3 RETURN TO INTERRUPTED SEQUENCE. * * ISSUE DIAGNOSTIC FOR BEING UNABLE TO * SCHEDULE USER PROGRAM ON INTERRUPT. * CIC.5 LDB CIC.1 SET (B) TO ADDRESS OF ADB .12 NAME IN LDA B,I PROGRAM ID SEGMENT. STA CICM2+7 STORE INB PROGRAM DLD B,I NAME IN DST CICM2+8 DIAGNOSTIC AND PRINT LDA CICM2 "SC03 INT XXXXX" JSB SYSMG JMP CIC.3 RETURN TO INTERRUPTED SEQUENCE. SKP * * SUBROUTINE: '$IRT' * $IRT NOP CLF 0 DISABLE INTERRUPT SYSTEM * CLA CLEAR 'MPTFL' TO MEAN STA MPTFL MEMORY PROTECT IS ON. * SW2 JMP $IRT,I RETURN IF NOT PRIV. (ELSE NOP) * CLC1 CLC 12B CLEAR CONTROL AND SET FLAG STF1 STF 12B BUFFER ON DUMMY I/O CARD * DLD INTBA,I CHECK CONDITION OF DMA CHANNELS SSA IF BIT = 1 FOR DMA #1 (ACTIVE) STC 6 THEN SET CONTROL TO ENABLE SSB INTERRUPTS. SAME FOR STC 7 DMA CHANNEL #2. * JMP $IRT,I -RETURN- SPC 4 * MEMORY PROTECT / PARITY ERROR ANALYSIS * - PROTECT VIOLATION CAUSES TRANSFER TO "RTRQP" * - PARITY ERROR CAUSES HALT CONDITION. * MPT LIA 5 GET VIOLATION ADDRESS: IF BIT 15 SSA,RSS =0, PROCESS AS PROTECT VIOLATION JMP RTRQP AND POSSIBLE SYSTEM REQUEST. HLT 0 PARITY ERROR HALT (BIT 15 = 1) STF 5 RESTART, RESET PARITY ERROR BOARD JMP CIC.3 AND RETURN TO INTERRUPT SEQUENCE * CICM1 DEF *+1 DEC -10 ASC 5,ILL INT XX * CICM2 DEF *+1 DEC -15 ASC 8,SC03 INT XXXXX * INTCD NOP HOLDS INTERRUPT SOURCE CODE * HED < RT EXECUTIVE INPUT/OUTPUT CONTROL > *** I N P U T / O U T P U T C O N T R O L *** * * THE I/O SCHEDULING AND CONTROL MODULE < IOC > * IS RESPONSIBLE FOR ALLOCATING THE USE OF ALL * STANDARD I/O DEVICES AND THE TWO DMA CHANNELS. * I/O DRIVERS OPERATE UNDER CONTROL OF AND * FOR INITIATION AND COMPLETION OF SYSTEM * AND USER DIRECTED I/O OPERATIONS. I/O DRIVERS * ARE INDEPENDENT PROGRAMS IDENTIFIED TO * BY THE DEVICE ASSOCIATED EQUIPMENT TABLE. DRIVERS * ARE COMPOSED TO TWO SECTIONS: *INITIATION* AND * *COMPLETION*. THE *INITIATION* SECTION IS * CALLED BY TO EXAMINE AND INITIATE AN I/O * OPERATION. THE *COMPLETION* SECTION IS CALLED * BY TO CONTINUE OR COMPLETE THE OPERATION. * DRIVERS PROVIDE FOR SIMULTANEOUS MULTI-DEVICE * CONTROL BY USING THE DEVICE EQT ENTRY FOR * VARIABLE STORAGE. * * I. * EQUIPMENT TABLE * (EQT) * * EACH I/O DEVICE CONTROLLED BY THE IOC/DRIVER * RELATIONSHIP IS DEFINED BY STATIC AND DYNAMIC * INFORMATION IN THE EQUIPMENT TABLE. THE EQT * IS A SYSTEM RESIDENT TABLE WHICH IS CONSTRUCTED * FROM USER DIRECTIVES BY . EACH EQT * ENTRY IS COMPOSED OF 15-WORDS IN THE FOLLOWING FORMAT: * SKP * * WORD CONTENTS * ---- ---------------------------- * 1 * I/O LIST . LINK POINTER * * 2 *DRIVER *INITIATION ADDRESS* * 3 *DRIVER *COMPLETION ADDRESS* * 4 *DB//T/////UNIT#--CHANNEL #* * 5 *AV-TYPE CODE- UNIT STATUS* * 6 *REQUEST CONTROL WORD * * 7 *REQUEST BUFFER ADDRESS * * 8 *REQUEST BUFFER LENGTH * * 9 *TEMPORARY OR DISC TRACK # * * 10 *TEMPORARY OR DISC SECTOR #* * 11 *DRIVER TEMPORARY STORAGE* * 12 * " " " * * 13 * " " " * * 14 * DEVICE CLOCK RESET VALUE * * 15 * " " WORKING " * * * D: =1 IF A DMA CHANNEL REQUIRED FOR TRANSFER * B: =1 IF AUTOMATIC OUPUT BUFFERING DESIRED * T: DEVICE TIME-OUT BIT - CLEARED BEFORE EACH * IO INITIATION; SET IF DEVICE TIMES-OUT. * UNIT#: OPTIONAL FOR DEVICES REQUIRING * SUB-CHANNEL DESIGNATION * CHANNEL#: I/O SELECT CODE (LOWER # IF * MULTI-BOARD INTERFACE) * AV (AVAILABILITY INDICATOR): * =0, UNIT AVAILABLE FOR OPERATION * =1, UNIT DISABLED * =2, UNIT CURRENTLY IN OPERATION * =3, UNIT WAITING FOR DMA CHANNEL * TYPE CODE: CODE IDENTIFYING TYPE OF I/O DEVICE * UNIT STATUS: ACTUAL OR SIMULATED UNIT STATUS * AT END OF OPERATION * * II. * DEVICE REFERENCE TABLE * (DRT) * * THE DEVICE REFERENCE TABLE PROVIDES FOR * LOGICAL ADDRESSING OF PHYSICAL UNITS DEFINED * IN THE EQUIPMENT TABLE. THE *DRT* CONSISTS * OF 1-WORD ENTRIES CORRESPONDING TO THE RANGE * OF USER-SPECIFIED "LOGICAL" UNITS, 1 TO N * WHERE N IS LT OR = TO 63(10). THE CONTENTS OF * THE WORD CORRESPONDING TO A LOGICAL UNIT IS * THE RELATIVE POSITION OF THE EQT ENTRNY * DEFINING THE ASSIGNED PHYSICAL UNIT,IN * BITS 5 - 0, AND THE SUBCHANNEL OF THE * EQT ENTRY TO BE REFERENCED BY THIS * LOGICAL UNIT NUMBER, IN BITS 13 - 11. * * CERTAIN LOGICAL UNIT #S ARE PERMANENTLY * ASSIGNED TO FACILITATE SYSTEM, USER AND * SYSTEM SUPPORT I/O OPERATIONS. THESE ARE: SKP * 1 - SYSTEM TELETYPEWRITER * 2 - SYSTEM DISC * 3 - AUXILIARY DISC * 4 - 'STANDARD' PUNCH UNIT * 5 - 'STANDARD' INPUT UNIT * 6 - 'STANDARD' LIST UNIT * 7 - ASSIGNED * . BY * . USER * 63 - * * III. INPUT/OUTPUT REQUESTS * * I/O REQUESTS INCLUDE COMMANDS FOR * READ, WRITE, CONTROL(FUNCTIONS) AND STATUS. * THE FORMAT OF THESE REQUESTS CONFORM TO * THE GENERAL SYSTEM REQUEST FORMAT. THE * NUMBER OF PARAMETERS VARIES DEPENDING * ON THE TYPE OF REQUEST AND THE CHARAC- * TERISTICS OF THE REFERENCED DEVICE. * * A USER I/O REQUEST IS DIRECTED TO * AT -IOREQ- BY THE EXECUTIVE REQUEST * PROCESSOR . SYSTEM I/O REQUESTS * ARE IN A DIFFERENT FORMAT AND ARE PROCESSED * AT THE SECTION -XSIO- IN . REFER TO * THAT SECTION FOR DETAILED DESCRIPTION. * * A *STATUS* REQUEST IS PROVIDED * FOR USER AND SYSTEM SUPPORT PROGRAMS * WHICH REQUIRE KNOWLEDGE OF DEVICE * CONDITIONS OR TYPE BEFORE A READ/WRITE/ * CONTROL REQUEST IS MADE. THE PROGRAM * IS NOT SUSPENDED ON THIS CALL. * A PARAMETER WORD IS INCLUDED IN THE * REQUEST TO CONTAIN THE DEVICE STATUS ON * RETURN TO THE USER. THIS STATUS IS FROM WORD * 5 OF THE EQT ENTRY FOR THE DEVICE. * ALSO, AN ADDITIONAL PARAMETER WORD CAN BE * INCLUDED IN THE REQUEST- WORD 4 OF THE * EQT ENTRY IS RETURNED IF THE ADDITIONAL * PARAMETER WORD IS INCLUDED. * * A DYNAMIC STATUS REQUEST CAN BE MADE BY * MEANS OF A CONTROL REQUEST, THE FORMAT * OF WHICH IS DEFINED BELOW. IN THIS CASE, * THE REQUEST IS QUEUED, THE DRIVER IS ENTERED, * AND THE STATUS IS RETURNED TSHFBO THE CALLING * PROGRAM IN THE A REGISTER. * SKP H* * A. READ/WRITE REQUEST FORMAT * * EXT EXEC * JSB EXEC * DEF EXIT (DEFINE EXIT POINT) * DEF RCODE (DEFINE READ (1) OR WRITE(2)) * DEF CONWD (DEFINE CONTROL WORD) * DEF BUFFR (DEFINE BUFFER LOCATION) * DEF BUFFL (DEFINE BUFFER LENGTH) * DEF DTRAK (OPTIONAL - DISC TRACK #) * DEF DSECT (OPTIONAL - DISC SECTOR #) * EXIT --- * . * . * RCODE DEC 1 OR 2 * CONWD OCT NNNNN CONTROL INFO/LOGICAL UNIT # * BUFFL DEC N OR -N WORD OR CHARACTER LENGTH * DTRAK DEC N DISC TRACK # * DSECT DEC N STARTING SECTOR # * * * B. CONTROL REQUEST FORMAT * * EXT EXEC * JSB EXEC * DEF EXIT (DEFINE EXIT POINT) * DEF RCODE (DEFINE REQUEST CODE) * DEF CONWD (DEFINE CONTROL WORD) * DEF PARAM (DEFINE OPTIONAL PARAMETER) * EXIT --- * . * . * RCODE DEC 3 * CONWD OCT NNNNN CONTROL CODE/LOGICAL UNIT # * PARAM DEC N PARAMETER REQUIRED BY TYPE OF CODE * * CONTROL CODES (FIELD 10-06 OF CONTROL WORD): * * 01 - WRITE END-OF-FILE --/ PRIMARILY * 02 - BACKSPACE 1 RECORD / FOR * 03 - FORWARD SPACE 1 RECORD / MAGNETIC * 04 - REWIND / TAPE * 05 - REWIND STANDBY / UNITS * 06 - DYNAMIC STATUS --/ * 07 - SET EOT STATUS (FOR PAPER TAPE INPUT) * 10 - GENERATE LEADER FOR PAPER TAPE * 11 - LIST OUTPUT LINE SPACING SKP * * C. DEVICE STATUS REQUEST FORMAT * * EXT EXEC * JSB EXEC * DEF EXIT (DEFINE EXIT POINT) * DEF RCODE (DEFINE REQUEST CODE) * DEF CONWD (DEFINE CONTROL WORD) * DEF STAT1 (DEFINE STATUS WORD 1) * DEF STAT2 (DEFINE STATUS WORD 2 -- OPTIONAL) * EXIT --- * . * . * RCODE DEC 13 STATUS REQUEST CODE = 13 * CONWD OCT NN LOGICAL UNIT # * STAT1 NOP WORD 5 OF EQT ENTRY FOR * DEVICE STORED IN THIS WORD. * STAT2 NOP WORD 4 OF EQT ENTRY FOR * DEVICE STORED IN THIS WORD * IF PRESENT IN REQUEST. * * * IV. GENERAL OPERATION * * ALL INPUT/OUTPUT OPERATIONS ARE PERFORMED * CONCURRENTLY WITH PROGRAM COMPUTATION IN THE * OVERALL SYSTEM. AN I/O OPERATION IS CONSIDERED * TO BE NON-BUFFERED TO THE REQUESTING USER * PROGRAM AS THE PROGRAM IS SUSPENDED UNTIL * THE TRANSMISSION OR OPERATION IS COMPLETED. * THE EXCEPTION TO THIS IS IN PROVIDING FOR * AUTOMATIC BUFFERING OF OUTPUT TO USER- * DESIGNATED DEVICES. IN THIS CASE, THE USER * BUFFER IS MOVED TO SYSTEM AVAILABLE MEMORY * AND THE USER PROGRAM IS NOT SUSPENDED. SKP IOREQ CLA SET CONTROL FLAG = 0 TO MEAN STA CONFL *REQUEST* SECTION ENTERED * LDA RQCNT INSURE ADA N1 THAT AT LEAST 1 SSA PARAMETER WAS SUPPLIED. JMP ERR01 - NO, ISSUE DIAGNOSTIC. * * LOGICAL UNIT REFERENCE VALIDITY CHECK * LDA RQP2,I EXTRACT LOGICAL UNIT # FROM AND MASK1 PARAMETER 1 STA B (SAVE #) CMA,INA,SZA,RSS CHECK FOR ZERO AND JMP ERR02 FOR A ADA LUMAX VALUE GT THE LARGEST SSA DEFINED #. JMP ERR02 - ERROR, EXCEEDS RANGE. * ADB N1 INDEX TO ADB DRT DEVICE-REFERENCE-TABLE LDA B,I GET EQT ASSIGNMENT. AND MASK2 MASK OUT SUBCHANNEL SZA,RSS -ERROR JMP ERR03 IF NOT ASSIGNED. JSB CVEQT CONVERT TO ABSOLUTE EQT ADDRESSES * * REQUEST CODE ANALYSIS * LDB RQP1,I GET REQUEST CODE (PARAMETER 1). CPB .3 IF REQUEST IS , JMP L.02 SKIP FURTHER ANALYSIS. * CPB .13 TRANSFER IF JMP L.15 * STAT%.US * REQUEST. * LDA RQCNT CHECK # OF ADA N3 PARAMETERS SUPPLIED SSA FOR READ OR WRITE. JMP ERR01 -ERROR, LT 3. * * BUFFER LEGALITY CHECK FOR INPUT. * LDA RQP4,I GET THE LENGTH CLE,SSA,RSS CONVERT TO JMP *+3 WORDS IF ARS CHARACTERS CMA,INA SET POSITIVE AND STA TEMP2 SAVE. SPC 1 CPB .2 IF WRITE REQUEST, JMP L.02 SKIP BUFFER CHECK. SPC 1 LDA RQP3 GET THE BUFFER ADDRESS CMA AND CHECK TO SEE IF ADA RTORG BELOW THE PROGRAMS CLE,SSA,RSS AREA. ERROR IF ATTEMPT TO READ JMP ERR04 INTO SYSTEM AREA. * LDB TEMP2 CHECK TO SEE IF EXCEEDING ADB RQP3 LWA MEMORY. SEZ ERROR IF NEGATIVE WRAP-AROUND JMP ERR04 WITH OVERFLOW. CMB,INB -IF WRAP-AROUND ADB BKLWA ERROR, SSB,INB,SZB ISSUE JMP ERR04 ERROR 4 DIAGNOSTIC * SPC 1 * * * CHECK FOR AUTOMATIC BUFFERING REQUIREMENT * L.02 LDB RQP1,I SKIP CHECK CPB .1 IF REQUEST JMP L.10 IS INPUT. LDA EQT4,I CHECK THE UNIT DESCRIPTOR RAL WORD IN ITS EQT ENTRY,BIT 14, SSA,RSS FOR BUFFERING. JMP L.10 -NO * * AUTOMATIC BUFFERING SECTION * CLA CPB .3 IF REQUEST IS FOR -CONTROL-, JMP L.03 SKIP BUFFER SIZE CHECK. LDA TEMP2 GET THE XFER LENGTH CMA,INA SET NEG AND STA TEMP3 -SET AS MOVE INDEX- CMA,INA (SET POSITIVE) L.03 ADA .5 ADD 5 FOR BLOCK CONTROL WORDS. STA L.04 SET TOTAL LENGTH FOR ALLOCATION. ADA .2 CHECK FOR BUFFER CMA,INA SIZE TO BE GREATER LDB AVMEM THAN MAXIMUM CMB,INB AMOUNT ADB BKORG OF SYSTEM ADA B AVAILABLE MEMORY. SSA IF YES, THEN ABORT JMP ERR04 PROGRAM. * * ALLOCATE BLOCK IN TEMPORARY STORAGE * JSB .ALC. CALL AT SYSTEM ENTRY POINT L.04 NOP - REQUESTED LENGTH OF BLOCK - * SZA IF BLOCK AVAILABLE, (A) CONTAINS JMP L.06 STARTING ADDRESS. * * NO MEMORY AVAILABLE FOR BLOCK - CALLING USER * PROGRAM IS TO BE LINKED INTO MEMORY SUSPENSION * LIST AND RE-SCHEDULED AT POINT OF REQUEST * WHEN A PREVIOUSLY ALLOCATED BLOCK IS RELEASED. * LDA XEQT SET PROGRAM ID SEGMENT ADDRESS STA L.05 IN CALL TO LINK JSB LIST CALL TO LINK PROGRAM INTO OCT 104 MEMORY SUSPENSION LIST. L.05 NOP JMP XEQ SKP * SET REQUEST PARAMETERS, PROGRAM PRIORITY AND * USER BUFFER INTO TEMPORARY BLOCK. * L.06 STB L.05 SET ACTUAL BLOCK LENGTH. STA TEMP1 SAVE BLOCK STA B LOCATION INB STB TEMPW SAVE ADDRESS JSB WORD2 ASSEMBLE CONTROL WORD IOR MASK5 SET = 1 FOR BUFFERING. LDB TEMPW STA B,I AND SET IN WORD 2 OF BLOCK. INB LDA XPRIO,I SET REQUESTING PROGRAM PRIORITY STA B,I IN WORD 3. STA TEMP2 SAVE PRIORITY FOR LINKING. INB LDA L.05 SET BLOCK LENGTH IN STA B,I WORD 4. INB LDA .3 IF REQUEST CPA RQP1,I IS -CONTROL-, SKIP JMP L.08 BUFFER MOVE LDA RQP4,I SET USER BUFFER LENGTH STA B,I IN WORD 5. SZA,RSS IF LENGTH = 0, JMP L.13 SKIP BUFFER MOVE. * * MOVE USER BUFFER TO TEMPORARY BLOCK. * INB LDA RQP3 SET USER BUFFER STA TEMP4 ADDRESS FOR MOVE. L.07 LDA TEMP4,I PERFORM STA B,I BUFFER MOVE ISZ TEMP4 ((B) = BLOCK ADDRESS, INB (TEMP4) = BUFFER ADDRESS, ISZ TEMP3 (TEMP3) = BUFFER LENGTH INDEX) JMP L.07 JMP L.13 GO TO EXIT SECTION. * L.08 LD"A RQP3,I FOR CONTROL REQUEST, SET WORD 3 STA B,I (PARAM) IN PLACE OF RECORD JMP L.13 LENGTH. SKP * * REQUEST IS A NORMAL WRITE, CONTROL OR READ. * THE PARAMETERS OF THE REQUEST ARE MOVED * INTO THE ID SEGMENT OF THE REQUESTING * PROGRAM. THE ID SEGMENT IS THEN LINKED * INTO THE I/O LIST FOR THE REFERENCED DEVICE. * THE -SCHEDULER- IS THEN CALLED TO REMOVE * THE PROGRAM FROM THE SCHEDULED LIST AND TO * CHANGE THE PROGRAM STATUS TO I/O SUSPENSION. * L.10 JSB WORD2 ASSEMBLE CONTROL WORD STA XTEMP,I SAVE IN TEMPORARY #1. LDB RQP1,I (B) = REQUEST CODE. LDA RQP3 SET BUFFER ADDRESS CPB .3 OR CONTROL LDA RQP3,I PARAMETER STA XTEMP+1,I WORD, LDA RQP4,I BUFFER STA XTEMP+2,I LENGTH AND LDA RQP5,I ADDITIONAL PARAMETERS IF STA XTEMP+3,I PROVIDED, LDA RQP6,I E.G., DISC STA XTEMP+4,I TRACK/SECTOR ADDRESSES. * LDA XPRIO,I SET PRIORITY OF REQUESTING STA TEMP2 PROGRAM IN TEMP2. LDA XLINK SET ADDRESS OF LINK WORD STA TEMP1 IN TEMP1. STA L.11 * JSB LIST CALL SCHEDULER TO SUSPEND PROG. OCT 102 - ID SEG. ADDR./I/O SUSPEND - L.11 NOP - ADDRESS OF ID SEGMENT. * * CALL -LINK- TO PERFORM THE LINKING OF THE NEW * BLOCK INTO THE DEVICE QUEUE OF * WAITING OPERATIONS. * L.13 JSB LINK * SZA,RSS IF QUE WAS EMPTY CALL DRIVR. * * EMPTY LIST, CALL TO INITIATE CURRENT REQUEST. * JSB DRIVR JMP L.14 - OPERATION INITIATED - LDA RQRTN STA XSUSP,I JMP NOTRD * L.14 LDA RQRTN SET REQUEST -EXIT- ADDRESS STA XSUSP,I AS POINT OF SUSPENSION. JMP XEQ TRANSFER TO EXECUTE SECTION. * * STATUS REQUEST SECTION * L.15 LDA RQCNT INSURE THAT AT LEAST 2 ADA N2 PARAMETERS PROVIDED - ONE SSA TO STORE STATUS WORD. JMP ERR01 -NO, ERROR '01'. * LDB EQT5,I STORE WORD 5 OF EQT ENTRY IN STB RQP3,I 'STAT1' LDB EQT4,I STORE WORD 4 OF EQT ENTRY IN CPA .1 'STAT2' IF PARAMETER 3 IS STB RQP4,I PRESENT. JMP L.14 GO TO RETURN TO XEQ. SKP * * ASSEMBLE CONTROL WORD * WORD2 NOP LDA RQP2,I COMBINE REQUEST CODE WITH AND MASK3 CONTROL INFORMATION IOR RQP1,I IN PARAMETER TWO AND STA B TEMPORARILY STORE IT- LDA RQP2,I EXTRACT LOGICAL UNIT # AND MASK1 FROM PARAMETER TWO ADA N1 INDEX TO ENTRY IN ADA DRT DEVICE REFERENCE TABLE LDA A,I GET SUBCHANNEL AND MASK9 ASSIGNMENT AND COMBINE IOR B IT WITH CONTROL WORD JMP WORD2,I EXIT - SPC 1 SPC 1 MASK3 OCT 3700 .12 DEC 12 .13 DEC 13 N3 DEC -3 SKP * SUBROUTINE: -LINK- * * PURPOSE: THIS ROUTINE PROVIDES FOR ADDING * AN I/O REQUEST INTO THE SUSPENDED * LIST (QUEUE) CORRESPONDING TO THE * REFERENCED DEVICE. THE PROCEDURE * OF ADDING AN ENTRY INTO THE LIST * INVOLVES ONLY THE ALTERATION OF * THE LINKAGE VALUE IN THE NEW ENTRY * AND IN THE ENTRY PRECEDING THE * NEW ONE IN THE PRIORITY CHAIN. * THE NEW ENTRY IS LINKED ACCORDING * TO ITS PRIORITY AND ON A FIFO * BASIS WITHIN THE SAME PRIORITY * LEVEL. THE END OF A LIST IS MARKED * BY A LINKAGE VALUE OF ZERO. THE * FIRST ENTRY IN A LIST IS SKIPPED * BECAUSE IT IS ASSUMED TO BE THE * REQUESTOR FOR THE CURRENT I/O * OPERATION. IF THE LIST IS EMPTY, * THE LINK WORD IN THE EQT ENTRY * IS SET TO POINT TO THE NEW ENTRY * AND AN INDICATION IS GIVEN TO * THE CALLER OF -LINK- THAT THE * NEW REQUEST MAY BE INITIATED. * * CALL: THE FOLLOWING LOCATIONS RMUST BE * SET TO THE INDICATED VALUES * BEFORE THE CALL IS MADE: * * TEMP1 = LOCATION OF NEW REQUEST * TO BE LINKED INTO THE * I/O LIST DEFINED BY THE * CURRENT EQT ENTRY. THE * ADDRESS OF THE LINKAGE * WORD IN THE EQT ENTRY * IS IN -EQT1-. * * TEMP2 = PRIORITY OF THE NEW * REQUEST. * * * - JSB LINK * - (RETURN) (A) = 0 IF THE NEW * REQUEST IS THE ONLY ENTRY * IN THE I/O LIST, I.E. THE * DRIVER MAY BE CALLED TO * INITIATE THE NEW OPERATION. * * THERE ARE NO ERROR CONDITIONS * DETECTED OR DIAGNOSED BY THIS * ROUTINE. * * SKP LINK NOP LDB EQT1,I IF THE I/O LIST IS NULL, SZB,RSS EQT LIST POINTER = 0, JMP LINK4 SKIP TO ADD NEW REQUEST. * * FIRST ENTRY IN LIST IS SKIPPED BECAUSE IT * IS THE CALLER FOR THE CURRENT OPERATION * ACTIVE ON THE I/O DEVICE. * JMP LINK7 GO START THE SCAN * LINK1 STB TEMP3 TEMP3 = ADDRESS OF CURRENT ENTRY. INB EXAMINE THE LDA B,I TYPE FIELD IN WORD 2 OF BLOCK INB TO DETERMINE LOCATION RAL,SLA OF PRIORITY. JMP LINK5 IF SYS REQ, SET PR=0 SSA,RSS IF NORMAL USER REQUEST, PRIORITY ADB .4 IS IN WORD 7 OF ID SEGMENT. LDA B,I GET PRIORITY OF CURRENT ENTRY. LINK2 LDB TEMP3 CMA,INA SUBTRACT CURRENT PRIORITY FROM ADA TEMP2 PRIORITY OF NEW REQUEST. SSA IF CURRENT IS LOWER PRIORITY JMP LINK3 (HIGHER #), GO TO LINK NEW. LINK7 STB TEMP5 SAVE PREVIOUS ENTRY POINTER LDB B,I GET NEXT ENTRY SZB IF END-OF-LIST, SKIP. JMP LINK1 -CONTINUE SCAN. * * PROPER POSITION (BY PRIORITY) IS FOUND IN LIST, * OR ELi"0.*SE THE SCAN OF THE LIST IS FINISHED AND * THE NEW REQUEST IS ADDED AS THE LAST ENTRY. * LINK3 LDA TEMP1 SET ADDRESS OF NEW ENTRY IN STA TEMP5,I LINKAGE VALUE OF PREVIOUS ENTRY. LINK6 STB TEMP1,I SET ADDRESS OF NEXT OR 0 IF LAST JMP LINK,I IN NEW - EXIT TO CALLER. * * NULL LIST- REQUEST IS MADE FIRST IN LIST AND FLAG FOR SET FOR CALLER. * LINK4 LDA TEMP1 SET ADDRESS OF NEW IN LIST POINT- STA EQT1,I ER IN EQT ENTRY. CLA SET NEXT LINK ADDR. IN NEW = 0. JMP LINK6 GO FINISH LINK AND EXIT SPC 1 * A SYSTEM REQUEST HAS BEEN FOUND IN THE QUE * LINK5 CLA SYSTEM REQUEST, SET JMP LINK2 PRIORITY=0, LINK OLD REQUEST SKP SKP 0* SUBROUTINE: -DRIVR- * * PURPOSE: THIS ROUTINE PROVIDES A CENTRAL POINT * FOR CALLING AN I/O DRIVER TO INITIATE * A NEW OPERATION. THIS ROUTINE, BEFORE * CALLING A DRIVER, SETS THE REQUEST * PARAMETERS INTO THE APPROPRIATE WORDS * IN THE EQT ENTRY CORRESPONDING TO THE * REFERENCED DEVICE AND ASSIGNS A DMA * CHANNEL IF REQUIRED. * IT ALSO SETS THE DEVICE TIME-OUT CLOCK. * * REQUIREMENTS: THE ADDRESSES OF THE EQUIPMENT * TABLE ENTRY (15 WORDS) MUST BE SET * IN EQT1 TO EQT15 BEFORE THE ROUTINE * IS CALLED. * * CALLING SEQUENCE: - PARAMETER SET UP AS ABOVE- * - (REGISTERS MEANINGLESS) - * * (R) JSB DRIVR * (P+1) -OPERATION INITIATED OR STACKED * (P+2) -OPERATION REJECTED OR COMPLETED- * * ERRORS/DIAGNOSTICS: A DRIVER IS CALLED ONLY * IF THE UNIT IS AVAILABLE * AND NOT BUSY; OTHERWISE, * RETURN IS MADE TO THE * CALLER. IF THE DRIVER * FINDS THE UNIT UNAVAILABLE * OR THE REQUEST ILLEGAL FOR * THE UNIT, THE INDICATION IS * RETURNED TO THE CALLER FOR * FURTHER ACTION. * DRIVR NOP LDA EQT5,I CHECK AVAILABILITY RAL,RAL OF AND .3 DEVICE. STA TEMP6 SAVE AVAILABILITY STATUS. CPA .1 IF DOWN OR NOT READY JMP DRIVR,I EXIT IMMEDIATELY. CPA .2 IF CURRENTLY BUSY, JMP DRIVR,I ALSO EXIT. * * DEVICE IS AVAILABLE - CHECK FOR DMA REQUIREMENT * CPA .3 IF IN DMA QUE JMP DVR00 GO ATTEMPT ASSIGNMENT LDA EQT4,I SKIP DMA CHANNEL ASSIGNMENT IF SSA,RSS NOT REQUIRED ( D FIELD = 0 ) JMP DRV02 IN WORD 4 OF EQT ENTRY. SPC 1 G* LDB EQT1,I SKIP DMA CHANNEL ASSIGNMENT IF * INB CONTROL REQUEST (CODE = 3) * LDA B,I * AND .3 * CPA .3 * JMP DRV02+2 * * DMA CHANNEL REQUIRED - ATTEMPT TO ASSIGN CHANNEL * DVR0 LDA DMACF IF DMA QUE IS NOT EMPTY SZA JMP DVR1 THEN JUST ADD THIS EQT TO QUE. * DVR00 LDA .6 INITIALIZE FOR STA CHAN CHANNEL 6 (DMA # 1 ) LDB INTBA ADDR. OF DMA 1 IN INTERRUPT TABLE CLA IF DMA CHANNEL # 1 CPA B,I AVAILABLE (INTBL ENTRY = 0), JMP DRV01 GO TO ASSIGN IT TO THIS UNIT. INB SET FOR CHANNEL 7, ISZ CHAN DMA CHANNEL # 2. CPA B,I IF THIS CHANNEL AVAILABLE, JMP DRV01 GO TO ASSIGN IT. * * NO CHANNEL AVAILABLE - SET FLAGS AND RETURN * DVR1 LDA EQT5,I IF DEVICE SSA IS ALREADY WAITING FOR DMA, JMP DRIVR,I EXIT. IOR MASK4 SET AVAIL TO SAY WAITING FOR STA EQT5,I DMA, ADD 1 TO ISZ DMACF # DEVICES WAITING. JMP DRIVR,I - EXIT TO CALLER - * * ASSIGN AVAILABLE CHANNEL * DRV01 LDA EQT1 SET EQT ENTRY ADDRESS IN INTER- STA B,I RUPT TABLE ENTRY FOR CHANNEL. LDB DMACF IF UNIT WAS LDA TEMP6 PREVIOUS WAITING CPA .3 FOR A DMA ADB N1 CHANNEL, SUBTRACT 1 FROM # OF STB DMACF UNITS WAITING. LDA EQT5,I CLEAR AND MASK6 STA EQT5,I FIELD. * * TRANSFER REQUEST PARAMETERS TO EQT ENTRY * DRV02 LDB EQT1,I GET CURRENT REQUEST ADDRESS INB FROM LINK WORD OF EQT ENTRY. LDA B,I GET REQUEST CONTROL WORD, AND MASKS SET SUBCHANNEL BITS TO ZERO STA EQT6,I SET IN EQT 6. XOR B,I SET SUBCHANNEL ALF,ALF NUMBER INTO ALF,RAR BITS 8-6 STA TEMPL OF EQT4 LDcA B,I RAL IF REQUEST IS SSA HELD AS A TEMPORARY BLOCK FOR JMP DRV03 BUFFERING, JUMP. INB LDA B,I SET BUFFER STA EQT7,I ADDRESS. INB LDA B,I SET BUFFER STA EQT8,I LENGTH. INB DLD B,I SET ADDITIONAL 2 DST EQT9,I PARAMETERS IF SUPPLIED. JMP DRV05 * DRV03 ADB .3 * TEMPORARY BLOCK * RAR,SLA CHECK REQUEST CODE. RSS - CONTROL REQUEST - JMP DRV04 - WRITE REQUEST - LDB B,I SET CONTROL PARAMETER JMP DVR4 IN THE EQT DRV04 LDA B,I GET BUFFER LENGTH STA EQT8,I OF THE BLOCK. INB ADDRESS OF WORD 6 IS DVR4 STB EQT7,I THE BUFFER ADDRESS. CLA CLEAR STA EQT9,I WORDS 9 AND 10 OF STA EQT10,I EQT ENTRY. * * CALL DRIVER -INITIATION- SECTION * DRV05 LDA EQT14,I SET DEVICE LDB EQT15,I TIME OUT IF NOT STILL ACTIVE SZB,RSS ELSE SKIP RESETTING IT STA EQT15,I LDA EQT4,I ZERO TIME-OUT AND MASK7 BIT AND SET IOR TEMPL IN SUBCHANNEL STA EQT4,I SET (A) = CHANNEL AND MASK1 # OF I/O DEVICE. LDB EQT2,I CALL DRIVER *INITIATION* JSB B,I SECTION. SKP * DRIVER RETURNS AN INDICATION OF THE ACCEPTANCE * OR REJECTION OF THE REQUESTED OPERATION: * (A) = 0, OPERATION SUCCESSFULLY INITIATED * (A) NOT = 0, OPERATION REJECTED AND (A) * CONTAINS A NUMERIC CODE * IDENTIFYING THE CAUSE OF * THE REJECT. * * = 1 READ OR WRITE REQUEST ILLEGAL FOR DEVICE * = 2 CONTROL REQUEST ILLEGAL OR NOT DEFINED * = 3 EQUIPMENT MALFUNCTION OR NOT READY * = 4 IMMEDIATE COMPLETION OF OPERATION * = 5 DRIVER REQUIRES DMA BUT FLAG IS NOT SET IN EQT * STA TEMP6 SAVE DRIVER CODE. SZA  IF REJECTED, JMP DRV06 EXAMINE REASON * * OPERATION INITIATED * LDA EQT5,I SET IOR MSIGN = 2 TO SAY DEVICE STA EQT5,I IN OPERATION. JMP DRIVR,I EXIT. * * OPERATION REJECTED * DRV06 STB TEMPW SAVE (B) CLA CLEAR DEVICE STA EQT15,I TIME-OUT CLOCK JSB CLDMA CLEAR DMA IF ALLOCATED LDA TEMP6 (A) = REJECT CODE. CPA .5 IF DMA REQUIRED JMP DVR0 GO ATTEMPT ASSIGNMENT ISZ DRIVR SET RETURN TO (P+2). CPA .3 IF NOT READY THEN JMP DRIVR,I -EXIT. JMP ILLCD ELSE GO TO SEND THE MESSAGE SPC 1 MASK7 OCT 173077 MASK9 OCT 34000 MASKS OCT 143777 HED < I/O MODULE SUBSECTION - SYSTEM REQUEST PROCESSOR > * SYSTEM I/O REQUEST PROCESSOR - XSIO - * * A PRIVATE ENTRY IS PROVIDED AT ENTRY POINT * < XSIO > TO ALLOW MODULES OF THE REAL TIME * EXECUTIVE TO CALL FOR I/O OPERATIONS WITHOUT * INCURRING THE OVERHEAD AND PROCEDURES * INVOLVED WITH USER I/O REQUESTS. NO ERROR * CHECKING IS PERFORMED, THE REQUEST IS LINKED * INTO THE APPROPRIATE I/O LIST AT A PRIORITY * LEVEL OF ZERO (HIGHEST PRIORITY), AND CONTROL * IS RETURNED TO THE FIRST WORD FOLLOWING THE * REQUEST CALL. * REQUEST FORMAT: A SYSTEM I/O REQUEST DIFFERS * FROM THE USER I/O REQUEST IN * FORMAT AND POWER. SPECIFICALLY, * A COMPLETION ADDRESS CAN BE * SPECIFIED FOR OPERATION OF * AN OPEN SUBROUTINE AT THE * END OF THE OPERATION. THIS * FACILITY IS ONLY AVAILABLE * TO SYSTEM ROUTINES AND IS * USED TO RESET FLAGS, ETC. * BECAUSE AN OPERATION IS * ALWAYS BUFFERED TO THE * SYSTEM. A ZERO COMPLETION * ADDRESS INDICATES ABSENCE * OF A COMPLETION ROUTINE. * WORD * ---- EXT XSIO * X 1 JSB XSIO * 2 OCT * 3 DEF * 4 NOP * 5 OCT * 6 DEF * 7 DEC * SKP * XSIO NOP LDB XSIO,I GET LOGICAL UNIT #. ADB N1 SUBTRACT 1 AND INDEX TO ADB DRT DEVICE REFERENCE TABLE. LDA B,I GET ASSIGNED EQT ENTRY #. AND MASK9 MASK OUT SUBCHANNEL STA TEMPL AND SAVE IT XOR B,I EQT # INTO A JSB CVEQT CONVERT TO ABSOLUTE EQT ADDRESSES * LDB XSIO SET ADDRESS ADB .2 OF LIST POINTER WORD IN STB TEMP1 REQUEST FOR . * CCE,INB SET LDA B,I FIELD (BITS 15-14) OF AND MASKS IOR TEMPL WORD 5 = 2 FOR SYSTEM REQUEST ELA,RAR AND SET IN SUBCHANNEL NUMBER STA B,I IDENTIFICATION. CLA SET PRIORITY OF REQUEST = 0 STA TEMP2 FOR , STA CONFL SET CONTROL FLAG = 0 (REQUEST). ADB .3 SET B TO RETURN ADDR STB XSIO AND SAVE IT. JSB LINK CALL TO LINK REQUEST IN I/O LIST. * SZA,RSS IF DEVICE NOT BUSY * JSB DRIVR CALL DRIVER TO INITIATE OPERATION JMP XSIO,I -GOOD REQUEST,EXIT * LDB XSIO BAD NEWS SO TRANSFER THE STB XSIOE RETURN ADDRESS FOR NR ROUTINE * JMP NOTRD PRINT DIAGNOSTIC. SPC 1 XSIOE NOP HED < I/O CONTROL MODULE - COMPLETION SUBSECTION > * * I/O COMPLETION SUBSECTION * * THIS SECTION IS RESPONSIBLE FOR THE INITIATION * OF STACKED I/O OPERATIONS, PLACING A USER * PROGRAM BACK IN A SCHEDULED STATE WHEN ITS * I/O OPERATION IS COMPLETED, DYNAMIC ALLOCATION * OF THE TWO DMA CHANNELS AMONG SYNCHRONOUS * DEVICES, AND CALLING FOR OPERATOR NOTIFICATION * OF EQUIPMENT MALFU^NCTION. * * IS ENTERED DIRECTLY FROM INTERRUPT CONTROL * WHEN AN I/O OPERATION IS TERMINATED AND ALL * ERROR RECOVERY PROCEDURES HAVE BEEN ATTEMPTED. * ON ENTRY TO THIS SECTION, (B) CONTAINS THE * NUMBER OF WORDS TRANSFERRED. THE ADDRESSES OF * THE EQUIPMENT TABLE ENTRY ARE SET IN -EQT1- TO * - EQT 15-. * * REQUESTS ARE STACKED IN LISTS FOR EACH DEVICE * ACCORDING TO PRIORITY. THE REQUESTS ARE EITHER * USER (NORMAL), USER (AUTOMATIC OUTPUT BUFFERING) * OR SYSTEM - IDENTIFICATION OF REQUEST TYPE * THE CODE IN BITS 15-14 OF THE * IN EACH REQUEST CALL. THE FORMATS OF THE THREE * TYPES OF REQUESTS AS THEY APPEAR IN THE I/O * LISTS ARE: * * 1) USER (NORMAL OPERATION) * * THE PARAMETERS FROM THE REQUEST ARE STORED * IN THE TEMPORARY AREA OF THE PROGRAM ID * SEGMENT. THE LINK WORD OF THE SEGMENT IS * USED TO LINK INTO THE I/O LIST. * * WORD CONTENTS * ---- -------- * 1 < LINKAGE WORD > * 2 * 3 * 4 * 5 * 6 * 7 * . -REMAINDER OF ID SEGMENT . * * SKP * 2) USER (AUTOMATIC OUTPUT BUFFERING) * * REQUESTS OF THIS TYPE ARE CONSTRUCTED * IN THE SECTION OF SYSTEM AVAILABLE MEMORY. * * WORD CONTENTS * ---- -------- * 1 < LINKAGE WORD > * 2 * 3 * 4 * 5 * 6 * . . . . * . . . . * N+5 * * * 3) SYSTEM REQUEST * * THE SYSTEM REQUEST IS LINKEYD INTO * THE I/O LIST BY USING WORD 4 OF THE * CALL AS A LINK WORD. A SYSTEM * REQUEST ASSUMES THE PRIORITY LEVEL * OF ZERO (HIGHEST PRIORITY). * * WORD CONTENTS * ---- -------- * 1 < JSB XSIO > * 2 < LOGICAL UNIT # > * 3 * 4 < LINKAGE WORD > * 5 * 6 * 7 * * THE FIELD (BITS 15-14 IN CONTROL WORD) * IDENTIFIES THE REQUEST TYPE AS: * * 00 USER (NORMAL OPERATION) * 01 USER (AUTOMATIC BUFFERING) * 10 SYSTEM * * SKP IOCOM RAL,CLE,ERA CLEAR THE SIGN BIT AND SAVE IN E STA TEMP3 SAVE STATUS FROM DRIVER AND STB TLOG TRANSMISSION LOG * CLA CLEAR STA COMPL CLEAR COMPLETION ADDRESS. STA EQT15,I CLEAR TIME-OUT CLOCK * LDA EQT4,I SET THE COMPLETION SECTION FLAG STA CONFL AND TEST FOR DMA RETURN SEZ,RSS SIGN OF A IS EXPLICID RETURN OF SSA DMA CHANNEL, CALL TO JSB CLDMA RELEASE ITS ASSIGNMENT. * LDB EQT1,I GET CONTROL WORD FROM SZB,RSS IF ILLEGAL ENTRY JMP CIC.4 SEND ERROR MESSAGE INB REQUEST BLOCK TO LDA B,I EXTRACT FIELD. STA TEMP0 SAVE CONTROL WORD. RAL,SLA IF BIT 15 = 1 ( = 2) JMP L.53 PROCESS AS SYSTEM REQUEST. SSA,RSS IF = 0, PROCESS JMP L.51 AS NORMAL USER REQUEST. * * RELEASE AUTOMATIC BUFFERING BLOCK * LDA TEMP3 BY PASS RELEASE OF SZA BUFFER IF MALFUNCTION JMP IOERR OCCURRED ADB .2 GET TOTAL LDB B,I BLOCK LENGTH AND STB L.50+1 SET IN RELEASE CALL. LDB EQT1,I SET ADDRESS OF BLOCK STB L.50 , IN CALL. LDA B,I SET LINK TO NEXT STACKED STA EQT1,I REQUEST IN EQT ENTRY - WORD 1. * JSB .RTN. RELEASE BLOCK TO AVAILABLE MEM. L.50 NOP - BLOCK ADDRESS - NOP - BLOCK LENGTH - JMP L.55 * * NORMAL USER OPERATION COMPLETION * L.51 LDB EQT1,I GET ID SEGMENT ADDRESS LDA B,I SET NEXT LINK ADDRESS STA EQT1,I IN WORD 1 OF EQT ENTRY. STB L.52 SET CURRENT ADDR. FOR SCHEDULER. * ADB .9 SET (B) = ADDR. OF XA IN ID SEG. LDA TEMP3 GET COMPLETION STATUS CLE,SZA SET BIT 14 CCE IN STATUS WORD LDA EQT5,I IF THE STATUS RAL,RAL IS NON-ZERO ERA,CLE,ERA AND SAVE IN USER A-REG. STA B,I CONTENTS OF PROGRAM. INB STB TEMP9 SAVE TRANSMISSION LOG ADDRESS LDA TLOG SET TRANSMISSION LOG AS STA B,I SAVED B-REGISTER. * JSB LIST CALL SCHEDULER MODULE TO PLACE OCT 101 USER PROGRAM INTO L.52 NOP LIST. JMP L.54 * * SYSTEM REQUEST COMPLETION * L.53 LDB EQT1,I GET CURRENT REQUEST ADDR. LDA B,I SET NEXT LINK ADDRESS STA EQT1,I IN EQT ENTRY. * ADB N1 GET WORD 3 OF REQUEST LDA B,I . STA COMPL SAVE COMPLETION ADDR. OR ZERO. * * < L.54 > : AT THIS POINT: * 1) A TEMPORARY BUFFER HAS BEEN RELEASED, * 2) A NORMAL OPERATION HAS CAUSED THE * REQUESTING PROGRAM TO BE LINKED * BACK INTO THE LIST, OR * 3) A SYSTEM REQUEST COMPLETION ADDRESS * HAS BEEN SAVED. * L.54 LDA TEMP3 BY PASS INITIATING THE NEXT SZA OPERATION IF A MALFUNCTION HAS JMP IOERR OCCURRED ON THIS DEVICE. * * L.55 LDA EQT5,I CHECK FIELD. SSA,RSS IF AV SAYS BUSY JMP IOCX SKIP ELSYE GO EXIT * * SECTION <60> PROVIDES FOR INITIATING THE NEXT * OPERATION WAITING FOR THE COMPLETED DEVICE. * L.60 LDA EQT5,I SET AND MASK6 FIELD STA EQT5,I = 0 TO SAY AVAILABLE. JMP L.68 GO START THE NEXT REQUEST * .11 DEC 11 SPC 1 * * THIS DEVICE IS COMPETING WITH OTHER DEVICES FOR * THE USE OF THE AVAILABLE DMA CHANNEL. THE * FIELD IN THE CURRENT ENTRY IS SET = 3 TO MEAN * WAITING FOR DMA. THE EQT IS THEN SCANNED FROM * FIRST TO LAST ORDER (#1 TO N) TO FIND THE FIRST * UNIT WAITING FOR DMA. THEREFORE, THE ORDER OF * THE EQT DETERMINES PRIORITY FOR DYNAMIC ASSIGN- * MENT OF DMA CHANNELS - THE SYSTEM DISC SHOULD * BE THE FIRST ENTRY IN THE EQT. * L.63 LDA EQT# SET # OF CMA,INA EQT ENTRIES STA TEMP1 AS AN INDEX VALUE. LDB EQTA INITIALIZE TO FIRST EQT ENTRY. * L.64 STB TEMP2 SAVE CURRENT ENTRY ADDR. ADB .4 EXTRACT LDA B,I FIELD FROM AND AFLD WORD 5. CPA DMACW IF A = 3, GO TO JMP L.66 ASSIGN DMA. * L.65 ADB .11 SET (B) FOR NEXT ENTRY. ISZ TEMP1 END OF EQT? JMP L.64 - NO, CONTINUE SCAN JMP IOCX1 -YES, EXIT * L.66 CLA,INA IF ONLY 1 DEVICE WAITING CPA DMACF FOR DMA, GO TO JMP L.67 ASSIGN TO THIS DEVICE. LDA TEMP2 IF CURRENT UNIT IS CPA EQTA FIRST IN EQT (I.E SYSTEM DISC) JMP L.67 ASSIGN ANYWAY. CPA EQT1 IF SAME DEVICE JUST COMPLETED, JMP L.65 ALLOW OTHER DEVICES DMA TIME. * L.67 LDA TEMP2 IF DEVICE TO BE INITIATED IS CPA EQT1 SAME AS INTERRUPTING DEVICE, JMP L.68 SKIP SETTING EQT ADDRESSES. * JSB SETEQ SET EQT ADDRESSES. * * CALL IF A REQUEST IS STACKED OR A * WAITING UNIT IS ASSIGNED A DMA CHANNEL. * L.68 LDA EQT1,I IF NO REQUEST SZA,RSS WAITING, JMP IOCX q<:6 EXIT. * JSB DRIVR CALL RSS IF GOOD REQUEST THEN SKIP JMP NOTRD DIAGNOSTIC IF NOT AVAILABLE. * * I/O COMPLETION - EXIT SECTION. * * THIS ROUTINE CHECK FOR A DMA QUE AND IF ANY AND IF A CHANNEL IS * AVAILABLE THE CHANNEL ASSIGNMENT ROUTINE IS ENTERED. * IOCX LDA DMACF GET THE DMA QUE FLAG SZA,RSS IF EMPTY QUE THEN JMP IOCX1 GO EXIT * DLD INTBA,I ELSE GET THE DMA FLAGS SZA IF ANY SZB,RSS AVAILABLE JMP L.63 GO ALLOCATE IT. * IOCX1 LDA COMPL IF SYSTEM REQUEST LDB TLOG SZA COMPLETION ROUTINE SPECIFIED, JMP COMPL,I OPERATE IT. * LDB OPATN GET OPERATOR ATTENTION FLAG STA OPATN - CLEAR FLAG - SZB IF OPERATOR DESIRES CONTROL, JMP TYPE ACKNOWLEDGE. JMP XEQ TRANSFER TO EXECUTE SECTION. * * I/O DEVICE COMPLETION ERROR FROM DRIVER * (A) = ERROR CODE IS NON ZERO * ;< HED < I/O CONTROL MODULE - ERROR SECTION > * * I/O REQUEST ERROR SECTION * * PART 1: ERRORS ENCOUNTED IN ANALYSING A * USER REQUEST CAUSE A DIAGNOSTIC * TO BE PRINTED ON THE SYSTEM * TELETYPEWRITER AND THE USER * PROGRAM ABORTED. THE FORMAT OF * THE DIAGNOSTIC IS: * * 'IONN PNAME RADDR' * * AS CONSTRUCTED AND SET * BY THE ROUTINE -ERMSG- IN * THE PROGRAM . -NN- IS A * CODE IDENTIFYING THE ERROR TYPE. * ERR01 CLB,INB INSUFFICIENT # OF PARAMETERS JMP RQERR ERR02 LDB .2 ILLEGAL LOGICAL UNIT REFERENCE, JMP RQERR = 0 OR UNDEFINED. ERR03 LDB .3 LOGICAL UNIT NOT ASSIGNED JMP RQERR TO UNIT IN -EQT-. ERR04 LDB .4 USER BUFFER VIOLATES SYSTEM JMP RQERR OR OTHER BOUNDARIES. * RQERR LDA ERIO (A) = ASCII * IO *. * ADB E00 JSB ERMSG - WRITE DIAGNOSTIC - LDA XEQT -ABORT JSB $ABRT USER PROGRAM * JMP XEQ * E00 ASC 1,00 E07 ASC 1,07 ERIO ASC 1,IO SKP * PART 2: ILLEGAL REQUEST DETECTED BY * I/O DRIVER. THE REASON IS A READ OR * WRITE OPERATION IS ILLEGAL FOR THE * DEVICE OR A CONTROL REQUEST IS * MEANINGLESS FOR THE DEVICE. * AN ADDITIONAL REASON FOR TRANSFER TO THIS * SECTION IS AN "IMMEDIATE COMPLETION" (CODE 4) * RETURN FROM THE DRIVER; PROCESSED AS A * CONTROL REJECT. * * * ERROR PROCEDURE IS: * 1. IF THE REQUEST IS PROCESSED AS * BUFFERED OUTPUT, THE TEMPORARY * BLOCK IS RELEASED TO AVAILABLE * MEMORY. * * 2. THE REJECT IS IGNORED IF A SYSTEM * PROGRAM GENERATED THE REQUEST - * HOWEVER, A COMPLETION ROUTINE, * IF SPECIFIED IN THE REQUEST, IS * OPERATED. (NOTE: THIS PHILOSOPHY * IS BASED ON THE ASSUMPTION THAT * THIS CONDITION SHOULD NEVER OCCUR.) * * 3. A USER CONTROL REQUEST WHICH IS * REJECTED IS TREATED AS IF IT * WAS PERFORMED. THE PROGRAM IS * LINKED BACK INTO THE SCHEDULE LIST. * * 4. A USER READ OR WRITE REQUEST REJECT * CAUSES A DIAGNOSTIC TO BE ISSUED * AND THE PROGRAM ABORTED. SKP ILLCD CPA .4 IF CODE =4 FOR IMMEDIATE LDA .2 COMPLETION, TREAT AS CONTROL STA TEMP4 REJECT, SAVE CODE. LDB EQT1,I GET LOCATION OF LDA B,I ILLEGAL REQUEST (LINK ADDR.) STA TEMP0 SAVE NEXT REQUEST ADDRESS. INB GET CONTROL WORD LDA B,I OF REQUEST BLOCK STA EQT6,I SAVE FOR REXIT RAL CHECK FIELD SSA,RSS FOR TYPE OF REQUEST BLOCK. JMP R02 -USER OR SYSTEM- * ADB .2 BUFFERED BLOCK. LDB B,I GET TOTAL BLOCK LENGTH. STB R01+1 SET IN RELEASE CALL. LDA EQT1,I SET FWA OF BLOCK STA R01 IN RELEASE CALL. JSB .RTN. RELEASE BLOCK. R01 NOP - FWA - NOP - # WORDS - JMP REXIT * R02 SLA,RSS CHECK FIELD AGAIN. JMP R03 -USER PROGRAM REQUEST- * ADB N2 GET WORD IN SYSTEM REQUEST LDA B,I CONTAINING -COMPLETION ROUTINE- STA COMPL ADDRESS OR 0 AND SAVE IT. JMP REXIT * R03 LDA TEMP4 USER REQUEST- CPA .2 CONTINUE IF CONTROL REQUEST JMP R04 REJECTED. LDA XSUSP,I SAVE CURRENT EXECUTING STA TEMP7 PROGRAM ID SEGMENT LDA XEQT ADDR. AND STA TEMP8 POINT OF SUSPENSION. LDA EQT1,I SET ID SEGMENT ADDRESS OF PROGRAM STA XEQT CONTAINING ERROR. ADA .8 GET POINT OF SUSPENSION ADDRESS LDA A,I AND SET IN STA XSUSP,I XSUSP,I FOR ERMSG. LDA EQT1 SAVE CURRENT STA TEl_MP9 EQT ENTRY ADDRESS. LDA CONFL SAVE CURRENT STA SCONF *CONTROL FLAG* LDA ERIO (A) = ASCII * IO * LDB E07 (B) = 07 FOR ILLEGAL READ/WRITE JSB ERMSG PRINT DIAGNOSTIC LDA TEMP7 RESET CURRENT STA XSUSP,I PROGRAM SUSPENSION POINT LDA TEMP8 AND ID SEGMENT STA XEQT ADDRESS. LDA TEMP9,I SET ID SEGMENT STA *+3 ADDRESS IN LIST CALL. JSB LIST TEMPORARILY OCT 101 'SCHEDULE' NOP PROGRAM FOR SUBSEQUENT 'ABORT'. LDA TEMP9,I (A)= ID SEGMENT ADDRESS JSB $ABRT -- ABORT PROGRAM -- LDA SCONF RESTORE STA CONFL *CONTROL FLAG* LDA TEMP9 RESTORE UNIT JSB SETEQ EQT ENTRY ADDRESSES. JMP REXIT * R04 LDA EQT1,I SET PROGRAM ID SEGMENT STA R05+2 ADDR. IN LIST CALL. ADA .9 (A) = ADDR. OF XA IN ID SEGMENT. LDB EQT5,I SET DEVICE STATUS STB A,I WORD IN XA. LDB TEMP6 CPB .2 STORE TLOG IF IMMEDIATE RETURN CLB,RSS FROM DRIVER (A)=4; LDB TEMPW OTHERWISE, STORE ZERO INA TRANSMISSION LOG STB A,I IN XB. R05 JSB LIST CALL SCHEDULER OCT 101 TO LINK PROGRAM BACK NOP INTO SCHEDULE LIST. * REXIT LDA TEMP0 SET NEXT LIST STA EQT1,I ENTRY ADDRESS. LDB CONFL IF THE IOC *COMPLETION* SZB SECTION IS IN CONTROL, JMP L.60 RETURN TO L.60 FOR NEXT REQUEST * LDA EQT6,I REJECT OCCURRED IN IOC *REQUEST* SSA SECTION. RETURN TO JMP XSIO,I SYSTEM CALLER. LDA TEMP4 IF REJECTING LDB RQRTN A CONTROL REQUEST TO IOREQ, CPA .2 SET EXIT IN POINT STB XSUSP,I OF SUSPENSION. JMP XEQ -EXECUTE SECTION IN SCHEDULER. SKP * * I/O DEVICE ERROR SECTION * * THIS SECTION IS ENTERED WHEN A DEVICE * IS UNA4VAILABLE FOR INITIATION OF AN * OPERATION OR WHEN AN ERROR IS DETECTED * AT THE END OF AN OPERATION. A DIAGNOSTIC * IS PRINTED ON THE SYSTEM TELETYPE IN THE * FOLLOWING FORMAT: * * I/O ERROR MN EQT #NN * * WHERE NN IS THE EQT ENTRY # OF THE DEVICE * AND MN IS A MNEMONIC DESCRIBING THE * CONDITION: * * 1. NR - DEVICE NOT READY * 2. ET - END OF TAPE OR TAPE SUPPLY LOW * 3. PE - TRANSMISSION PARITY ERROR * 4. TO - DEVICE TIMED-OUT * - NEW CODES MAY BE ADDED - * * ON ENTRY TO THE SECTION, (A) CONTAINS A # * CORRESPONDING TO THE ASSOCIATED MNEMONIC * AND EQT1 CONTAINS ADDRESS OF DEVICE. * * NOTRD CLA,INA -SPECIAL NOT READY ENTRY- * IOERR ADA ERTBL INDEX TO ERROR CODE TABLE. LDA A,I GET MNEMONIC AND STA IOMSG+4 SET IN DIAGNOSTIC MESSAGE. * LDA EQT1 STA TEMP9 LDA EQT5,I GET STATUS WORD FROM EQT AND MASK6 SET IOR MASK5 FIELD TO 1, STA EQT5,I -UNIT DISABLED- * JSB CPEQT COMPUTE EQT ENTRY #. STA IOMSG+8 I/O DIAGNOSTIC. * LDA CONFL SAVE CURRENT STA SCONF *CONTROL FLAG* * LDA IOMSA (A) = ADDR. OF DIAGNOSTIC JSB SYSMG CALL TO PRINT. * LDA SCONF RESTORE *CONTROL FLAG*. STA CONFL LDB TEMP9 CPB SYSTY JMP L.60 LDB B,I GET FIELD INB WORD LDB B,I TO B. SZA SECTION IN CONTROL, JMP IOCX GO EXIT IOC SSB *REQUEST* SECTION. IF SYSTEM JMP XSIOE,I REQUEST, RETURN TO CALLER. JMP XEQ GO TO EXECUTE SECTION. * IOMSA DEF *+1 DEC -18 IOMSG ASC 4,I/O ERR NOP ASC 3, EQT # NOP * * I/O DEVICE ERROR MNEMONIC TABLE - ORDERED * BY ERROR CODE DESCRIBING CONDITION * ERTBL DEF * * ASC 1,NR - NOT READY - * ASC 1,ET - END OF TAPE (INFORMATION) - * ASC 1,PE - ;TRANSMISSION PARITY ERROR - * ASC 1,TO - TIMED-OUT - * * NEW CODES ADDED AT THIS POINT * * HED < IO-DEVICE TIME-OUT PROCESSOR > * * * AFTER A DEVICE IS DISCOVERED TO HAVE TIMED-OUT * BY THE SCHEDULER'S CLOCK PROCESSOR,THIS * ROUTINE IS ENTERED. ITS PURPOSE IS TO * CLEAR THE PENDING IO TRANSFER AND ENTER * IOCOM IN SUCH A WAY AS TO SIMULATE AN IO * COMPLETION RETURN FROM THE DRIVER ITSELF. * * * ENTER FROM SCHEDULER MODULE: * * (A)
* * $DEVT ADA N14 POINT TO EQT JSB SETEQ SET EQT ADDRESSES LDA EQT4,I IOR MASK8 SET TIME-OUT BIT STA EQT4,I STA B SAVE WORD IN B FOR TEST AND MASK1 SELECT CODE TO A BLF,SLB IF DRIVER TO HANDLE TIME JMP CIC.6 OUT GO CALL THE DRIVER. JSB CLCHS CLEAR ALL CHANNELS LDA .4 SERVICED BY THIS ENTRY CLB SIMULATE COMPLETION JMP IOCOM RETURN FROM DRIVER SPC 1 N14 DEC -14 HED < I/O CONTROL MODULE - DATA SECTION > * CONSTANT AND VARIABLE STORAGE AREA A EQU 0 DEFINE SYMBOLIC REFERENCES B EQU 1 FOR A AND B REGISTERS. .1 DEC 1 .2 DEC 2 .3 DEC 3 .4 DEC 4 .5 DEC 5 .6 DEC 6 .7 DEC 7 .8 DEC 8 .9 DEC 9 .15 DEC 15 N1 DEC -1 N2 DEC -2 N10 DEC -10 * MASK1 OCT 77 MASK2 OCT 377 MASK4 OCT 140000 MASK5 OCT 40000 MASK6 OCT 37777 MASK8 OCT 4000 MSIGN OCT 100000 M7400 OCT 177400 UPPER CHARACTER MASK * TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP TEMP5 NOP TEMP6 NOP TEMP7 NOP TEMP8 NOP TEMP9 NOP TEMP0 NOP TEMPL NOP TEMPW NOP * CONFL NOP SCONF NOP TLOG NOP COMPL NOP AFLD EQU MASK4 DMACW EQU MASK4 DMACF NOP FLAGS USED IN ALLOCATING HED ** I/O CONTROL - OPERATOR COMMUNICATION ** * * I/O MODULE // OPERATOR COMMUNICATION * * * THE SYSTEJM PES FOR COMMANDS FROM THE * OPERATOR TO CONTROL THE OVERALL STATUS OF * I/O EQUIPMENT, CHANGE ASSIGNMENT OF LOGICAL * UNITS AND TO INTERROGATE THE STATUS AND * PROPERITES OF THE DEVICES IN THE EQUIPMENT * TABLE. * * OPERATOR STATEMENTS ARE PROCESSED ONLY * FROM THE DESIGNATED SYSTEM TELETYPE. THE * ROUTINE IN THE SCHEDULING MODULE * IS RESPONSIBLE FOR STATEMENT DECODE AND * PARAMETER SEPARATION AND CONVERSION. THE * ASSOCIATED STATEMENT PROCESSOR IS CALLED * TO PERFORM THE REQUESTED ACTION. THE * STATEMENT PROCESSING IS ALL TABLE-DRIVEN * AS DESCRIBED IN THE LISTING AND DOCUMENTATION * OF THE SCHEDULING MODULE. * * * TWO OF THE FOLLOWING STATEMENT PROCESSORS * MUST BE INCLUDED IN THE BASIC SYSTEM PACKAGE. * THESE ARE THE 'UP' AND 'DOWN' STATEMENTS * CONCERNING THE OVERALL STATUS OF I/O DEVICES. * THE OTHER THREE STATEMENT PROCESSORS ( LOGICAL * UNIT ASSIGNMENT, TIME-OUT, AND EQT STATUS) * ARE OPTIONAL AND MAY BE REMOVED BY DELETING * THE SECTIONS AND RE-ASSEMBLING THIS MODULE. * SKP * * 'DOWN' STATEMENT (REQUIRED) * * FORMAT: DN,NN WHERE NN IS THE EQT # * OF THE I/O DEVICE * * ACTION: THE AVAILABILITY FIELD OF THE * REFERENCED DEVICE (EQT ENTRY #) * IS SET = 1 (UNIT DISABLED) * * CALL (FROM MESSAGE PROCESSOR): * * (A) = NN (EQT #) IN BINARY * (P) JMP IO.DN * * RETURN IS TO IF ACTION TAKEN OR * TO -MESS,I- TO PRINT ERROR DIAGNOSTIC * * INPUT ERROR * IF NN IS ILLEGAL. * IO.DN JSB IODNS CHECK 'NN' AND SET EQT ADDRESSES. LDA EQT1 IF ATTEMPT TO 'DOWN' SYSTEM CPA SYSTY TELETYPE, IGNORE ACTION AND JMP IODNE TREAT AS 'INPUT ERROR'. LDA EQT5,I SET AVAILABITY FIELD AND MASK6 =1 TO IOR MASK5 MEAN STA EQT5,I UNAVAILABLE. * EXT1 CLA CLEAR OPERATOR STA OPFLG CONTROL FLAG JMP XEQ -- EXIT. * * *IODNS* SUBROUTINE TO CHECKg5 LEGALITY OF AN * EQT # (IN A-REGISTER) AND TO CALL * A SUBROUTINE TO CONSTRUCT THE EQT * ENTRY ADDRESSES. * IODNS NOP STA B ERROR SZA,RSS IF NN JMP IODNE = 0 CMB,INB ERROR ADB EQT# IF NN SSB GT JMP IODNE LENGTH OF EQT. * JSB CVEQT SET EQT ENTRY ADDRESSES. JMP IODNS,I * IODNE LDA IODMG EXT2 LDB MESS JMP B,I * IODMG DEF *+1 N12 DEC -12 ASC 6,INPUT ERROR SKP * * ' UP ' STATEMENT (REQUIRED) * * FORMAT: UP,NN WHERE NN IS THE EQT # * OF THE I/O DEVICE * * ACTION: THE AVAILABILITY FIELD OF THE * REFERENCED DEVICE (EQT ENTRY #) * IS SET = 0 (UNIT AVAILABLE). * * IF I/O REQUESTS ARE SUSPENDED IN * THE DEVICE QUEUE, THE *IOCOM* * SECTION (AT *L.68*) IS ENTERED * TO INITIATE THE WAITING OPERATION. * * CALL (FROM MESSAGE PROCESSOR): * * (A) = NN (EQT #) IN BINARY * (P) JMP IO.UP * * RETURN IS *IOCOM* OR TO *XEQ* IF ACTION * IS TAKEN. IF NN ILLEGAL, RETURN IS TO * *MESS,I* TO PRINT 'INPUT ERROR'. * * IO.UP JSB IODNS CHECK 'NN' AND SET EQT ADDRESSES. LDA EQT5,I GET AVAILABILITY AND MASK4 FIELD FROM EQT ENTRY. * CLB CLEAR OPERATOR STB OPFLG CONTROL FLAG. * CPA MASK5 IF DEVICE IS RSS NOT CURRENTLY DOWN JMP XEQ EXIT - NO ACTION. * LDA EQT5,I DEVICE WAS 'DOWN' AND MASK6 SET AVAILABILITY FIELD STA EQT5,I = 0. * CPB EQT1,I IF NO REQUESTS WAITING, JMP XEQ EXIT TO *XEQ*. * CLA,INA SET CONTROL FLAG = 1 STA CONFL FOR IOCOM. STB COMPL CLEAR COMPLETION FLAG. JMP L.68 TRANSFER TO *IOCOM*. * HED < I/O CONTROL MODULE - SUBROUTINE SECTION > * * SUBROUTINE: < SYSMG > (SYSTEM MESSAGE) * * PURPOSE: THIS ROUTINE PROVIDES FOR THE * OUTPUT OF SYSTEM MESSAGES AND * ERROR DIAGNOSTICS ON THE SYSTEM * TELETYPEWRITER. THE ROUTINE * MAINTAINS A 'ROTATING' BUFFER * AREA CONSISTING OF 5 10-WORD * BLOCKS - I.E., THE MAXIMUM * LENGTH OF A MESSAGE IS 18 * CHARACTERS (9-WORDS) PLUS 1 * WORD PRECEDING THE MESSAGE * WHICH CONTAINS THE CHARACTER * COUNT. * * CALL: (A) = ADDRESS OF FIRST WORD OF * MESSAGE BLOCK - THIS WORD * CONTAINS THE CHARACTER * LENGTH OF THE MESSAGE AS * A NEGATIVE VALUE. * * (P) JSB SYSMG * (P+1) -RETURN- * * ON RETURN: * (A) = 0 - MESSAGE ACCEPTED AND * MOVED TO BUFFER. * (A) NOT = 0 - BUFFER FILLED, * MESSAGE REJECTED * * SYSMG NOP JMP SBUF CHANGED TO NOP ON FIRST ENTRY LDB SY# IF BUFFER CPB .5 IS FILLED, JMP SYSMG,I REJECT EXIT. * LDB SYC SET CURRENT STB SYT1 ENTRY ADDRESS FOR MOVE LDB N10 SET -10 STB SYT2 AS MOVE INDEX. ISZ SY# COUNT ENTRY. * SYS1 LDB A,I MOVE STB SYT1,I CALLER ISZ SYT1 MESSAGE INA INTO ISZ SYT2 CURRENT ENTRY JMP SYS1 IN BUFFER LDB SYC (B) = CURRENT ENTRY ADDRESS. LDA SYT1 (A) = NEXT ENTRY ADDRESS CPA SBL IF NEXT EXCEEDS BUFFER, LDA SBF RESET TO FWA BUFFER STA SYC AND SAVE. * LDA SY# IF ENTRY. CPA .1 COUNT = 1, JMP SYS3 INITIATE OUTPUT. * SYS2 CLA (A) = 0 FOR EXIT WITH JMP SYSMG,I MESSAGE ACCEPTED. * SYS3 LDA B,I GET MESSAGE LENGTH, STA SYS7 SET IN I/O CALL. INB ADD 1 AND SET STB SYS6 FWA OF MESSAGE TEXT JSB SYSCL INITIATE OUTPUT, JMP SYS2 EXIT. * * CALL TO INITIATE OUTPUT * SYSCL NOP JSB XSIO OCT 1 - LOGICAL UNIT 1 - SYS TTY DEF SYS8 - COMPLETION ROUTINE ADDRESS NOP OCT 2 - ASCII WRITE - SYS6 NOP MESSAGE ADDRESS SYS7 NOP MESSAGE LENGTH JMP SYSCL,I * * COMPLETION ROUTINE FROM I/O CALL * SYS8 LDA SY# SUBTRACT 1 FROM ADA N1 ENTRY COUNT FOR STA SY# MESSAGE JUST OUTPUT. SZA,RSS IF NO MORE IN BUFFER, JMP XEQ EXIT. * LDA SYS6 SET ADA .9 NEXT ENTRY CPA SBL ADDRESS LDA SBF LDB A,I GET AND SET STB SYS7 LENGTH INA AND STA SYS6 MESSAGE ADDRESS. JSB SYSCL INITIATE OUTPUT JMP XEQ -EXIT. * SY# NOP SYT1 NOP SYT2 NOP SYC DEF SBUF -INITIALIZED TO SBUF SBF DEF SBUF -INITIALIZED TO SBUF SKP * SUBROUTINE: * * PURPOSE: THIS ROUTINE CONVERTS AN EQT * ENTRY # TO AN EQT DISPLACEMENT * AND CALLS TO SET THE * ENTRY ADDRESSES. * * CALLING SEQUENCE: * * (A) = EQT ENTRY # * * (P) JSB CVEQT * (P+1) -RETURN- REGISTERS MEANINGLESS * * CVEQT NOP ADA N1 SUBTRACT 1 AND STA B MULTIPLY EQT ENTRY # CMB,INB BY 15 ALF TO ADA B COMPUTE THE ADA EQTA ABSOLUTE ADDRESS. * JSB SETEQ SET ALL 15 ADDRESSES. * JMP CVEQT,I -RETURN- * * SUBROUTINE: * * PURPOSE: THIS ROUTINE COMPUTES THE ENTRY # * OF THE ENTRY DESCRIBED BY -EQT1-. * THE # IS CONVERTED TO DECIMAL ASCII. * * CALLING SEQUENCE: (P) JSB CPEQT * (P+1) - RETURN - * ON RETURN, (A) = # IN ASCII <:6* * CPEQT NOP LDB EQTA SUBTRACT DEVICE CMB,INB EQT ENTRY ADDRESS ADB EQT1 FROM FWA OF EQT. CLA,INA DETERMINE CCE,SZB,RSS POSITION JMP *+4 OF INA ENTRY ADB N15 IN JMP *-4 EQT. * JSB CVT3 CONVERT TO DECIMAL ADA .2 SET EQT # LDA A,I IN JMP CPEQT,I SPC 1 N15 DEC -15 SKP 6<* SUBROUTINE: < SETEQ > * * PURPOSE: THIS ROUTINE SETS THE ADDRESSES * OF THE 15 WORDS OF AN * EQUIPMENT TABLE ENTRY IN THE * 15 WORDS IN BASE PAGE COMMUNICATION * AREA LABELLED -EQT1- TO -EQT15-. * * CALLING SEQUENCE: * * (A) - STARTING ADDRESS OF THE EQT * ENTRY FOR THE REFERENCED * I/O UNIT. * * (P) JSB SETEQ * (P+1) - RETURN - (A),(B) MEANINGLESS * * THERE ARE NO ERROR RETURNS OR * ERROR CONDITIONS DETECTED. * * SETEQ NOP STA EQT1 INA STA EQT2 INA STA EQT3 INA STA EQT4 INA STA EQT5 INA STA EQT6 INA STA EQT7 INA STA EQT8 INA STA EQT9 INA STA EQT10 INA STA EQT11 INA STA EQT12 INA STA EQT13 INA STA EQT14 INA STA EQT15 JMP SETEQ,I * * SKP * * SPECIAL SECTION "I/O CLEAR " * ENTRY POINT IS "$IOCL" * * PURPOSE: THE FUNCTION OF THIS ROUTINE * IS TO REMOVE A PROGRAM FROM AN * I/O HANG-UP CONDITION RESULTING * FROM AN INPUT REQUEST NOT BEING * COMPLETED BY THE DEVICE. * * THIS "CLEARING" PROCEDURE IS * INITIATED BY THE OPERATOR IN * USING THE I/O ABORT VERSION OF THE * "OF,XXXXX,1" COMMAND. THE "OF" * STATEMENT PROCESSOR IN 'SCHED' * CALLS THIS SECTION IF THE REF- * ERENCED PROGRAM IS SUSPENDED * FOR AN I/O INPUT REQUEST. * * PROCESS: THE LIST OF EACH EQT ENTRY * IS SEARCHED TO FIND THE QUEUED * REQUEST CORRESPONDING TO THE * ID SEGMENT OF THE REFERENCED * PROGRAM. THE ENTRY IS REMOVED * FROM THE LIST AND THE LIST IS * APPROPRIATELY LINKED TO REFLECT * THE CHANGE. * * IF THE ENTRY WAS THE FIRST ONE * IN THE LIST (I.E. THE ACTIVE * REQUEST), THE DEVICE'S CHANNELS * AND DMA CHANNEL, IF ASSIGNED,ARE * CLEARED. THE DEVICE'S TIME-OUT * CLOCK IS CLEARED. $ABRT IS * CALLED TO ABORT THE PROGRAM AND * CONTROL IS TRANSFERRED TO "$XEQ" * IF THE DEVICE WAS NOT CLEARED * OR TO "L.55" IN "IOCOM" TO * INITIATE THE NEXT STACKED * REQUEST (OR TO ALLOCATE THE * DMA CHANNEL). * * CALLING SEQUENCE: * * (A)= ID SEGMENT ADDRESS OF PROGRAM * * (P) JMP $IOCL * * -NO RETURN - * * SKP ENT $IOCL * $IOCL STA TEMP1 SAVE ID SEGMENT ADDRESS. M2400 CLA STA OPFLG LDA EQT# SET TEMP2 = NEGATIVE CMA,INA NUMBER OF EQT STA TEMP2 ENTRIES. LDA EQTA INITIALIZE FOR * STA IOCL5 EQT ENTRY WORD STA IOCL6 1 ADDRESS. * IOCL1 LDA A,I GET LINK ADDRESS. CPA TEMP1 JUMP IF A JMP IOCL2 MATCH TO PROGRAM. * SZA IF NOT END OF LIST, JMP IOCL1-1 CONTINUE SCAN. * LDA IOCL5 SET (A) = ADDRESS OF ADA .15 NEXT EQT ENTRY. ISZ TEMP2 IF NOT END OF EQT, GO JMP IOCL1-2 TO SCAN NEXT ENTRY LIST. JMP $XEQ -NOT FOUND, EXIT TO XEQ SE * * PROGRAM REQUEST ENTRY FOUND, UNLINK REQUEST. * IOCL2 LDB A,I GET NEXT LINK AND SET STB IOCL6,I IN PREVIOUS LINK. * LDA TEMP1 "ABORT LDB A CHECK IF INB THIS IS A LDB B,I SYSTEM REQUEST SSB,RSS IF SO SKIP ABORT JSB $ABRT PROGRAM" * LDA IOCL5 IF PROGRAM REQUEST CPA IOCL6 WAS CURRENT ENTRY, CLB,RSS SKIP TO CLEAR DEVICE. JMP $XEQ -EXIT TO $XEQ. * JSB SETEQ * STA CONFL FOR IOCOM. STB COMPL COMPLETION FLAG. STB EQT15,I eHCLEAR DEVICE TIME-OUT CLOCK * JSB CLCHS CLEAR DEVICE CHANNELS JMP L.55 EXIT TO IOCOM CODE SPC 1 IOCL5 NOP IOCL6 NOP SKP * * ROUTINE TO CLEAR DMA CHANNEL IF ASSIGNED TO DEVICE * CLDMA NOP LDB INTBA GET THE INTERRUPLE ADDRESS TO B LDA B,I AND DMA 6 ENTRY TO A RAL,CLE,ERA CLEAR THE SIGN BIT CPA EQT1 THIS CHANNEL ASSIGNED? CLA,RSS YES- SKIP JMP IOCL3 NO TRY NEXT CHANNEL CLC 6 CLEAR CHANNEL STF 6 6. STA B,I SET IT AVAILABLE IN INTBA SPC 1 IOCL3 INB STEP TO DMA 7 ENTRY LDA B,I GET TO A AND RAL,CLE,ERA CLEAR THE SIGN BIT CPA EQT1 THIS CHANNEL ASSIGNED? CLA,RSS YES - SKIP JMP CLDMA,I NO - EXIT CHANNELS CLEARED CLC 7 CLEAR CHANNEL 7 STF 7 AND STA B,I MAKE IT AVAILABLE. JMP CLDMA,I * * ROUTINE TO CLEAR ALL CHANNELS SERVICED BY EQT ENTRY * CLCHS NOP JSB CLDMA CLEAR DMA CHANNEL IF ASSIGNED LDA INTLG STORE INTERRUPT CMA,INA TABLE LENGTH- ADA .2 RELATED INDEX STA TEMPW LDA CLR10 STORE INITIAL STA CLCSC CLC S.C. LDA INTBA INSTRUCTION ADA .2 CLRNX LDB A,I GET NEXT TABLE ENTRY- CPB EQT1 DOES IT REFERENCE THIS EQT? CLCSC CLC 00B YES-GO CLEAR IT ISZ TEMPW THRU TABLE? INA,RSS NO-INDEX TO NEXT ENTRY JMP CLCHS,I YES-EXIT ISZ CLCSC JMP CLRNX * CLR10 CLC 10B HED ** OPTIONAL OPERATOR STATEMENTS ** * * 'LOGICAL UNIT' STATEMENT (OPTIONAL) * * FORMAT: LU,N1(,N2(,N3)) WHERE: * * N1 = LOGICAL UNIT # * N2 = 0, EQT ENTRY #, OR NOT PRESENT * N3 = SUBCHANNEL # OR NOT PRESENT IN WHICH * CASE IT DEFAULTS TO ZERO * * ACTION: 1) N2 AND N -3 NOT INPUT; THE ASSIGNMENT OF * LOGICAL UNIT N1 IS PRINTED AS: * ' LU #N1 = #XX,U Y' XX = EQT * ENTRY # OF ASSIGNED DEVICE. * Y = SUBCHANNEL #; ,U Y PRINTED IF Y NON-ZERO * * 2) N2 = 0; THE ASSIGNMENT IS RELEASED, * I.E, THE CORRESPONDING * WORD IN THE DEVICE * REFERENCE TABLE (DRT) * IS SET = 0. * * 3) N2 = EQT ENTRY # OF I/O DEVICE TO * BE ASSIGNED TO LOGICAL UNIT N1; * IF N2 IS A LEGITIMATE EQT #, * THEN N2 AND N3 ARE STORED IN WORD N1 * IN THE DRT - ASSIGNMENT OF * LOGICAL UNIT TO PHYSICAL UNIT * IS MADE. * * CALL (FROM MESSAGE PROCESSOR): * * (A) = N1 (LOGICAL UNIT) IN BINARY * (B) = -1 IF N2 NOT INPUT OR N3:N2 * (IN BINARY) WHERE N3 IS IN BITS 13-11 * (P) JMP LUPR * * RETURN IS TO MESS,I WITH A=0 FOR ACTION * TAKEN OR (A) = ADDRESS OF MESSAGE IN 1). * ENT $LUPR * LUPR STA TEMP1 SAVE 'N1' $LUPR EQU LUPR STB TEMPW SAVE 'N2' AND 'N3' CPB N1 IF NO 'N2','N3' JMP LUPR0 PARAMETERS, CONTINUE CPA .2 PREVENT JMP IODNE REASSIGNMENT CPA .3 OF LU 2 OR 3 JMP IODNE TO OTHER DEVICES LDA B AND MASK2 SAVE 'N2' IN TEMP2 STA B STA TEMP2 LDA TEMP1 LUPR0 SZA,RSS ERROR IF JMP IODNE N1 = 0 CMA,INA CHECK FOR ADA LUMAX N1 > LENGTH SSA OF DRT. JMP IODNE YES, UNDEFINED N1. * CCA COMPUTE ADA TEMP1 LOCATION OF N1 ADA DRT IN DRT. STA TEMP3 (SAVE DRT ADDRESS) LDA A,I GET N1 ASSIGNMENT ( 0 OR EQT #) STA TEMPL SAVE CHAN & SUBCHAN #'S AND MASK2 MASK OUT SUBCHANNEnL STA TEMP4 AND SAVE. * SZB IF N2 = 0, RELEASE ASSIGNMENT. JMP LUPR1 * * RELEASE L.U. ASSIGNMENT * CLA,INA ERROR IF CPA TEMP1 ATTEMPT TO RELEASE JMP IODNE LU #1, SYSTEM TELETYPE. STB TEMP3,I SET DRT WORD = 0 JMP EXT1 - EXIT - * LUPR1 INB,SZB,RSS IF (B) = -1, THEN GO TO JMP LUPR3 PRINT CURRENT ASSIGNMENT. * * ASSIGN L.U. TO PHYSICAL DEVICE * LDA DRT PREVENT INA ASSIGNMENT DLD A,I OF ANY LU CPA TEMPW NUMBER TO SYSTEM RSS OR AUXILIARY CPB TEMPW DISC/DRUM JMP IODNE * LDA TEMP2 CHECK N2 AND SET EQT ADDRESSES. JSB IODNS CLB,INB IF LOGICAL UNIT = CPB TEMP1 1 (SYSTEM TELETYPE). JMP LUPR5 GO TO CHANGE ASSIGNMENT. LDA TEMPW SET CHAN AND SUBCHAN IN STA TEMP3,I DRT WORD ( N1 ). JMP EXT1 * * PRINT CURRENT LOGICAL UNIT ASSIGNMENT * LUPR3 LDA TEMP1 CONVERT N1 JSB LUPS TO ASCII STA LUMG1 AND SET IN MESSAGE. LDA TEMP4 SAME JSB LUPS FOR CURRENT STA LUMG2 EQT ASSIGNMENT. LDA TEMPL GET CHAN AND SUBCHAN AND M7400 MASK OUT CHANNEL SZA SUBCHANNEL ZERO? JMP LUPR4+1 NO - ADD IT TO MESSAGE LDA N12 STA LUMGA+1 LDA LUMGA (A) = ADDRESS OF MESSAGE. LUPR4 JMP EXT2 * ALF,RAL CONVERT SUBCHANNEL (N3) JSB LUPS TO ASCII AND STA LUMG3 SET IN MESSAGE LDA N16 JMP LUPR4-2 * LUPR5 LDA EQT5,I GET *EQUIPMENT AND MASKT CODE FOR REFERENCED UNIT SZA IF UNIT IS NOT A TELETYPE, CPA M2400 RSS JMP IODNE REJECT OPERATION. LDA EQT5,I CHECK STATUS AND MASK4 OF NEW DEVICE. CPA MASK5 IF NEW DEVICE 'DOWN', JMP IODNE DIS-ALLOW THIS REQUEST. LDA ?EQT1 SET NEW EQT ADDRESS STA SYSTY IN BP. LDA TEMPW SET CH # STA TEMP3,I IN DRT(1). LDA NSYSM OUTPUT '**' TO EFFECT JMP EXT2 OPERATOR COMMUNICATION. * NSYSM DEF *+1 DEC -2 ASC 1,** * LUMGA DEF *+1 NOP * ASC 2,LU # LUMG1 NOP ASC 2, = # LUMG2 NOP ASC 1,,U LUMG3 NOP * LUPS NOP BINARY/DECIMAL(ASCII) PREPROCESSOR CCE (E = 1 FOR DECIMAL) JSB CVT3 - CALL CONVERSION (A) = NUMBER - ADA .2 SET (A) LDA A,I = ASCII OF NUMBER. JMP LUPS,I -RETURN * N16 DEC -16 SKP * * ' EQT DEVICE STATUS ' STATEMENT (OPTIONAL) * * FORMAT: EQ,NN WHERE NN = EQT ENTRY # * FOR I/O DEVICE * * ACTION: THIS STATEMENT REQUESTS THE CURRENT * STATUS OF EQT ENTRY #NN. THE PRINTED * REPLY IS: * * ' SC DVRNN D B UN AV' WHERE: * * SC = I/O CHANNEL # (SELECT CODE) * DVRNN = DRIVER NAME, EQUIP TYPE NN. * D, IF DMA CHANNEL REQUIRED- 0 IF NOT * B, IF BUFFERING SELECTED - 0 IF NOT * UN = UNIT N (FOR SUB-UNIT ADDRESSING) * AV = 0 UNIT AVAILABLE * 1 UNIT DISABLED (DOWN) * 2 UNIT IN OPERATION * 3 UNIT WAITING FOR A DMA CHANNEL * * CALL (FROM MESSAGE PROCESSOR): * * (A) = NN (EQT #) IN BINARY * (B)= 0,1 OR -1 (-1 MEANS NO PARAMETER #2) * IF 2ND PARAMETER SUPPLIED, THE B FIELD * IN THE EQT ENTRY IS SET TO THE VALUE * OF THE PARAMETER: 0=NO BUFFERING, * 1(NON-ZERO)= BUFFERING. * * * (P) JMP EQ.ST * -RETURN IS TO MESS,I WITH (A) = ADDRESS OF * REPLY OR ADDRESS OF ERROR MESSAGE IF NN * IS ILLEGAL. * ENT $EQST * EQ.ST STB TEMP1 SAVE PARAM # 2 * $EQST EQU EQ.ST * JSB IODNS CHECK NN AND SET EQT ADDRESSES LDB TEMP1 CHECK P;ARAM #2. LDA EQT4,I GET CHANNEL WORD INB,SZB IF =-1, OUTPUT EQT STATUS JMP EQST1 PARAM FOR BUFFERING SELECTION * AND MASK1 I/O CHANNEL # JSB EQCVT STA EQMS1 * LDA EQT4,I CONVERT ASR 6 UNIT #. AND .7 JSB EQCVT STA EQMS5 LDA EQT4,I SET LDB EQBLK D (FOR DMA CHANNEL) RAL,SLA OR LDB EQBD 0 STB EQMS3 LDB EQBLK SET SSA B (FOR AUTOMATIC BUFFERING) LDB EQBB OR STB EQMS4 0 LDA EQT5,I SET RAL,RAL AVAILABILITY AND .3 STATUS ADA EQBLK (0,1,2,OR3) STA EQMS6 LDA EQT5,I CONVERT ALF,ALF EQUIPMENT AND MASK1 TYPE JSB EQCVT FOR STA EQMS2 DVRNN. LDA EQMSA (A) = ADDRESS OF REPLY JMP EXT2 EQST1 RBR,ERB ROTATE BIT 1 TO E RAL,RAL AND PUT IN ERA,RAR 14 OF EQT4 STA EQT4,I AND RESTORE JMP EXT1 * EQMSA DEF *+1 DEC -20 ASC 1, EQMS1 NOP I/O CHANNEL # ASC 2, DVR EQMS2 NOP EQUIP TYPE CODE EQMS3 NOP D OR 0 EQMS4 NOP B OR 0 ASC 1, U EQMS5 NOP UNIT # EQMS6 NOP AVAILABILITY * EQCVT NOP (A) = NUMBER CLE CONVERT JSB CVT3 TO OCTAL ASCII ADA .2 AND LDA A,I RETURN IN A. JMP EQCVT,I * EQBLK ASC 1, 0 EQBD ASC 1, D EQBB ASC 1, B SKP * * ' DEVICE TIME-OUT PARAMETER ' STATEMENT (OPTIONAL) * * FORMAT: TO,N1,N2 WHERE * * N1 = EQT # * N2 = TIME-OUT PARAMETER OR -1 * * ACTION: IF N2 = -1, A SECOND PARAMETER WAS NOT * RECEIVED FROM THE MESSAGE PROCESSOR; * THEREFORE, PRINT THE CURRENT TIME-OUT * PARAMETER OF DEVICE N1. * * BOTH N1 AND N2 PRESENT, ASSIGN N2 AS THE * NEW TIME-OUT PARAMETER FOR DEVICE N1. * * * CALL (FROM MESSAGE PROCESSOR): * * (A) = N1 * (B) = N2 OR -1 * * (P) JMP $CHTO * - RETURN IS TO MESS,I WITH (A) = ADDRESS OF REPLY * OR ADDRESS OF ERROR MESSAGE IF N1 IS ILLEGAL. * ENT $CHTO SPC 1 $CHTO STA TEMP1 SAVE N1 STB TEMPW AND N2 JSB IODNS CHECK VALIDITY OF N1 LDB TEMPW LOOK AT N2 SZB,RSS IF N2 ZERO, DISABLE JMP CHTO2 TIME-OUT FOR DEVICE INB,SZB IF N2 = -1, OUTPUT T-O PARAMETER JMP CHTO1 OTHERWISE, ENTER NEW T-O VALUE * LDA EQT14,I CONVERT T-O PARAMETER CCE,SZA TO DECIMAL ASCII CMA JSB CVT3 CCE,INA DLD A,I STORE IN MESSAGE DST TOMS1+2 * LDA TEMP1 CONVERT EQT # JSB CVT3 TO DECIMAL ASCII ADA .2 LDA A,I STA TOMS1 STORE INTO MESSAGE LDA TOMSA JMP EXT2 SKP TOMSA DEF *+1 DEC -12 ASC 2,TO# TOMS1 NOP ASC 1, = NOP NOP * .500 DEC 500 MASKT OCT 37400 * CHTO1 CMB,INB ERROR IF ATTEMPT LDA EQT5,I TO SET TYPE 0 OR 5 AND MASKT DEVICE TIME-OUT SZA VALUE TO LESS THAN CPA M2400 FIVE SECONDS. RSS RSS JMP CHTO2 OTHERWISE, STORE LDA .500 NEW TIME-OUT ADA B VALUE. SSA,RSS JMP IODNE CHTO2 STB EQT14,I JMP EXT1 HED * SYSMG BUFFER AND PRIVLEDGE I/O CONFIGURE SECTION * * SBUF BSS 50 ORG SBUF PUT IOC CONFIGURING ROUTINE IN BUFFER STA SBUF SAVE THE A REG. CLA STA SYSMG+1 CLEAR CALL TO HERE LDB DUMMY GET THE DUMMY I/O ADDRESS SZB,RSS IF NONE JMP NOPRV GO EXIT STA SW1 SET THE PRIVILEDGE STA SW2 SWITCHES LDA CLCP ADA B CONFIGURE THE DURwMMY ADDRESSES STA CLC2,I USE INDIRECTS TO AVOID LINKS LDA STCP ADA B NEED AN CLC STA STC2,I STC LDA STFP AND ADA B STA STF2,I AND STF NOPRV LDA SBUF DONE JMP SYSMG+1 GO CONTINUE THE MESSAGE BIT SPC 2 STCP STC 0 CLCP CLC 0 STFP STF 0 STC2 DEF STC1 STF2 DEF STF1 CLC2 DEF CLC1 SPC 2 L EQU 50+SBUF-* ERROR HERE MEANS WE RAN OUT OF BUFFER ORR LEAVE THE BUFFER * SBL DEF * HED * SYSTEM ENT/EXT SYMBOL DEFINITION * * ENTRY POINTS WITHIN THE MODULES OF THE * R/T EXECUTIVE BEGIN WITH '$' TO AVOID * DUPLICATE ENTRY POINT CONFLICTS WITH * USER PROGRAMS. * $CIC EQU CIC $XSIO EQU XSIO $SYMG EQU SYSMG $IORQ EQU IOREQ $IOUP EQU IO.UP $IODN EQU IO.DN RTRQP EQU $RQST CLOCK EQU $CLCK XEQ EQU $XEQ TYPE EQU $TYPE LIST EQU $LIST .ALC. EQU $ALC .RTN. EQU $RTN CVT3 EQU $CVT3 ERMSG EQU $ERMG MESS EQU $MESS $CVEQ EQU CVEQT HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * E RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 8 PARAMETERS) * * DEFINITION OF SYSTEM LISTS (QUEUES) * * DORMT EQU .+32 ADDRESS OF 'DORMANT' LIST, SKEDD EQU .+33 'SCHEDULE' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA * * UTILITY PARAMETERS * MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND * ORG * LENGTH OF RTIOC END CIC TCB@< ABSOLUTE PROGRAM LOADER * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * * * * RTE-C APLDR * E. WONG * REV.A E.WONG 25MAY73 * REV.B E.WONG 3AUG73 * REV.C D.L.S. 10MAR75 COPYRIGHT * * SOURCE : 29101-80004 * RELOC : 29101-60004 * LISTING: 29101-80004-2 * * NAM APLDR,1,60 ENT APLDR EXT $LIBR,$LIBX,EXEC * A EQU 0 B EQU 1 KEYWD EQU 1657B BPA1 EQU 1742B BPA2 EQU 1743B RTORG EQU 1746B RTCOM EQU 1747B AVMEM EQU 1751B BKLWA EQU 1777B SUP * * * APLDR IS SCHEDULED BY THE SYSTEM WHEN OPERATOR INPUTS * ONE OF THE FOLLOWING: * PL,LU * LO,PNAME,LU,FL,KB * RP,PNAME,LU,FL,KB * * THE SCHEDULE CALL PASSES THE PARAMETERS IN THE FOLLOWING * ORDER: * P1 - KEYBOARD LU # / FUNCTION CODE * P2 - FILE NUMBER / INPUT-OUTPUT LU # * P3 - CHARACTER #1 / CHARACTER #2 * P4 - CHARACTER #3 / CHARACTER #4 * P5 - CHARACTER #5 / * * WHERE FUNCTION CODE IS: * 0 - PROGRAM LIST * 1 - LOAD PROGRAM * 2 - REPLACE PROGRAM * * * * APLDR NOP LDA DKBFN GET ADDR OF BUFFER STA TEMP1 SAVE TEMPORARILY LDA MD5 STA TEMP2 RMPLP LDA B,I GET PARAM FROM ID SEG STA TEMP1,I SAVE IN BUFFER INB ISZ TEMP1 ISZ TEMP2 JMP RMPLP * LDA NAM50 MAKE SURE 6 CHAR AND LHALF IS ZERO. STA NAM50 * CLA LDB FILLU GET FILE NO.&I/O LU LSR 8 SAVE LEFT HALF STB FILE Q AS FILE NUMBER. * ALF,ALF SAVE RIGHT HALF STA LU AS I/0 LU. * LDB KBFUN GET KYBD UNIT AND FUNC LSR 8 SAVE LEFT HALF SZB,RSS IF ZERO, LDB CONSL USE DEFAULT STB KYBDU AS KEYBOARD UNIT. * ALF,ALF GET FUNC FROM RIGHT HALF SZA,RSS IS IT LIST? 0 JMP LIST CPA B1 IS IT LOAD? 1 JMP LOAD CPA B2 IS IT REPLACE? 2 JMP REPL JMP ABORT NO, IT IS ERROR. * DKBFN DEF KBFUN MD5 DEC -5 * HED L0: LOAD PROGRAM LOAD LDA NAM12 IF NO NAME GIVEN SZA,RSS SKIP DUPLIC NAME JMP *+3 CHECKING JSB DUPID CHECK IF DUPLICATE DEF NAM12 ID NAME. * JSB STRID NOT DUPLI, FIND LOAD2 JSB SRCID A BLANK DFNUL DEF ZERO ID SEG. JMP LOADD NO BLANK ID SEG. JMP LOAD2 KEEP LOOKING. STA CURID GOT IT, SAVE ADDR. * LOAD3 JSB IHILO INIT HI,LO ADDRS LDA DWRD1 INIT SPEC REC STA WORD1 DUMMY ID ADDR. LDA DWRD2 STA WORD2 LDA RSS INITIALIZE SWITCH STA ABS12 FOR SPEC. REC. STA LDRCT INIT LEADER COUNT STA IDOFS INDICATE NO ABS YET. * LDA LU GET LU PARAM, SZA,RSS IF ZERO LDA DINPT USE DEFAULT IOR B2300 FOR THE ABS STA LU INPUT UNIT. * * * * READ ABSOLUTE RECORD * * ABS0 JSB EXEC MAKE REQUEST DEF *+5 TO DEF B1 READ DEF LU ABS RECORD DEF ABSBF INTO BUF DEF D64 OF MAX SIZE. * AND B240 CHECK FOR EOF/EOT SZA,RSS IS IT EOF? JMP ABS0A NO LDA LDRCT YES, IS IT SZA,RSS JUST LEADER? JMP LOAD5 IS EOF. JMP ABS0 IGNORE LEADER * ABS0A SZB,RSS ANYTHING TRANSMITTED? JMP ABS0 NO * STA LDRCT SET LDRCT FOR EOT LDB ABSCT GET WORD COUNT. BLF,BLF SHIFT TO LOW BITS STB ABSSZ SAVE REC SIZE CMB,INB STB TEMP1 SAVE NEG COUNT LDB ABSAD GET ADDR, START CKSM. LDA DABSD STA TEMP2 SET DATA ADDR. ABS0B LDA TEMP2,I GET A WORD ADB A ADD TO CKSM ISZ TEMP2 BUMP TO NEXT ISZ TEMP1 BUMP COUNT JMP ABS0B REPEAT TIL DONE. * LDA TEMP2,I CPA B COMPARE CKSMS JMP ABS1 MATCHES LDB ERR10 CHECKSUM ERROR- JMP ERPR4 ERR MSG THEN ABORT * * * * FIND WHERE ABSOLUTE RECORD FITS IN CORE * * ABS1 LDA ABSAD OK, SO FETCH ADDR CPA B2 IS IT SPECIAL RECORD? JMP ABS12 YES AND BPMSK IS IT BASE PAGE? CPA ABSAD JMP ABS2 YES, BASE PAGE. * LDA RTORG GET DEFAULT LOWEST ADDR STA TEMP LDA AVMEM GET DEFAULT HIGHEST ADDR STA TEMP1 LDA DMAIN GET PTRS TO MAIN HI/LO LDB D22 SET OFFSET FOR MAIN JMP ABS3 ADDRS IN ID SEG. * ABS2 LDA BPA1 GET DEFAULT LOWEST ADDR STA TEMP LDA BPA2 GET DEFAULT HIGHEST ADDR STA TEMP1 LDA DBASE GET PTRS TO BASE HI/LO LDB D24 SET OFFSET FOR BASE PAGE * * * * FIND THE HI AND LO MEMORY BOUNDS OF FREE CORE * * ABS3 STB IDOFS SAVE OFFSET TO GET ADDRS STA TEMP4 SAVE ADDR OF LFREE ADA B2 STA TEMP5 SAVE ADDR OF HFREE LDA TEMP CMA,INA CHECK IF ABS REC < FWABP USER LINKS ADA ABSAD SSA JMP ABS14 ABS < FWABP, ERROR LDA ABSAD ADA ABSSZ CMA,INA CHECK IF ABS REC > LWAM USER SPACE ADA TEMP1 SSA JMP ABS14 ABS > LWAM, ERROR LDA TEMP4,I CPA TEMP RSS ADDRS ALREADY SET? JMP ABS6 YxES, SKIP SEARCH FOR HI/LO * JSB STRID INIT ID SEARCH. ABS4 JSB SRCID SEARCH EACH ID DEF ZERO EXCEPT BLANK ONES, JMP ABS6 FOR THE HI/LO RSS RSS ADDRS WHICH JMP ABS4 DEFINE FREE CORE. CPA CURID IS THIS ID FOR PRG? JMP ABS4 YES, IGNORE THIS ID BOUNDS ADA IDOFS STA TEMP SET ADDR OF ID ADDR. * CMA CHECK IF ID SEG > 22 WORDS ADA ADRID,I SSA JMP ABS4 NEG, IGNORE IF RTE ID SEG. CLA STA TEMP1 CLEAR OVERLAP FLAG * LDA TEMP,I GET ID LOW CMA,INA ADA ABSAD IS ID LOW > ABS REC? SSA JMP ABS4B LOW>ABS, CHECK MORE ISZ TEMP1 LOW<=ABS, CHECK IF OVERLAP JMP ABS5 BY CHECKING IF HI>=ABS * ABS4B LDA TEMP,I GET ID LOW AGAIN CMA SUBTRACT IT ADA TEMP5,I FROM LAST HFREE SSA AND JMP ABS5 IF IT IS LDA TEMP,I LOWER THEN KEEP IT DST TEMP5,I AS NEW HFREE * ABS5 ISZ TEMP LDA TEMP,I GET ID HIGH ADDR CMA,INA ADA ABSAD SSA,RSS ID HIGH < ADDR OF REC? JMP ABS5B HI<=ABS, CHECK MORE CLA,INA HI>ABS, MIGHT OVERLAP CPA TEMP1 DOES ABS OVERLAP? JMP ABS13 YES, GIVE OF ERR JMP ABS4 NO, IGNORE * ABS5B LDA TEMP,I GET ID HI CMA,INA SUBTRACT IT ADA TEMP4,I FROM LAST LFREE SSA,RSS AND IF IT IS JMP ABS4 LDA TEMP,I HIGHER, WE KEEP IT DST TEMP4,I AS NEW LFREE JMP ABS4 REPEAT FOR EACH ID * * * * ALREADY GOT MEMORY BOUNDS; SEE IF ABS CAN FIT * * ABS6 LDA ABSAD GET ADDR OF ABS REC LDB ABSSZ ADB A GET ADDR OF END OF ABS REC JSB CKBND CHECK BOUNDS WITH LFREE,HFREE JMP ABS13 ERROR. * * * * COPY ABS RECORD TO CORE IF WITHIN BOUNDS * * ABS10 LDA ABSSZ SET UP ABSSZ CMA,INA FOR TRANSFER STA TEMP OF RECORD. LDA DABSD SET UP BUFFER STA BADDR ADDR OF DATA WORDS. LDB ABSAD SET UP CORE ADDR. ABS11 LDA BADDR,I GET A DATA WORD. JSB SYSET PUT INTO CORE. INB ISZ BADDR ISZ TEMP JMP ABS11 REPEAT UNTIL DONE. JMP ABS0 GO GET ANOTHER RECORD * * * * PROCESS SPECIAL TRAILER RECORDS. * * ABS12 RSS NOP-ED AFTER 1ST ENTRY.! JMP AB12B SO ONLY DO THIS ONCE. LDA MD28 STA TEMP1 SET COUNTER LDB DDMID TO CLEAR OUT CLA AB12A STA B,I SPECIAL RECORDS INB ISZ TEMP1 JMP AB12A STA ABS12 NOP SWITCH * AB12B DLD ABSD1 PICK UP 2 DATA WORDS STA WORD1,I PUT 1ST INTO DUMMY ID. STB WORD2,I PUT 2ND INTO DUMMY ID. ISZ WORD1 BUMP DUMMY ID ISZ WORD2 LOCATIONS. JMP ABS0 * * * * REACHED END-OF-FILE ON PROGRAM INPUT * * LOAD5 LDB IDOFS CHECK IF ANY ABS CPB RSS WAS READ YET. JMP IDERR ERROR IF NONE. LDA WORD1 SPEC REC MUST BE AT END CPA DWRD2 WAS IT THERE? JMP LOAD6 YES. IDERR LDA B5 NO. LDB ERR13 NO SPECIAL RECORDS, JMP ERPR4 PRINT ERR MSG/ABORT * LOAD6 DLD NAM12 NAME GIVEN IN COMMAND? SZA,RSS JMP LOAD7 NO, USE NAME FROM SPEC REC DST PNM12 YES, USE NAME FROM COMMAND LDA NAM50 GET 5TH CHAR STA PNM50 JMP LOAD8 WE DID DUP.CHECK ALREADY. LOAD7 JSB DUPID NAME GIVEN IN SPECIAL RECORD, DEF PNM12 CHECK FOR DUPLICATE. * LOAD8 LDB SZCOM GET SIZE OF COMMON SZB,RSS JMP LOD8A SKIP CHECK IF NO COMMON LDA FWAC GET FWA COMMON CMA SUBTR FROM ADA RTORG FWA REAL-TIME COMMON SSA,RSS FWACAVMEM? JMP LOADE YES, ERROR. * LOD8A LDA DMAIN GET FREE AREA POINTERS STA TEMP4 FOR THE MAIN AREA DLD PRGMN GET FINAL BOUNDS OF PROG JSB CKBND SEE IF FIT. (IN CASE BSS USED) JMP LOADC ERROR. * LDA DBASE GET FREE AREA POINTERS STA TEMP4 FOR THE BASE PAGE AREA DLD PRGBP GET FINAL BOUNDS OF PROG JSB CKBND SEE IF FIT. (IN CASE BSS USED) JMP LOADC ERROR. * * * * MOVE ID SEGMENT TO SYSTEM AREA * * LOD8B LDA PNM50 GET 5TH CHAR AND LHALF MASK OUT TYPE INA FORCE TO TYPE 1 STA PNM50 LDA MD28 DONE LOAD, COPY ID SEG. STA TEMP SET UP COUNT. LDA DDMID SET UP ADDR STA BADDR FOR DATA WORDS. LDB CURID SET ADDR FOR CORE LOC. JMP *+3 DON'T MOVE LINKAGE WORD * LOAD9 LDA BADDR,I JSB SYSET MOVE A WORD TO ID SEG INB ISZ BADDR ISZ TEMP JMP LOAD9 REPEAT TILL DONE. * LDA MSG1+1 SET UP DONE STA BUF MESSAGE WITH LDA MSG1+2 PROG NAME STA BUF+1 LDA MSG1+3 STA BUF+2 LDB DWRD1+1 GET ADDR OF PROG NAME LDA LINE2 GET ADDR IN MSG FOR NAME INA JSB MVNAM MOVE NAME TO MSG LDA D10 STA TEMP3 JSB DSPLA DISPLAY MESSAGE JMP STOP END APLDR. * * * ERROR RETURNS FROM LOADING SECTION * ABS13 JSB REMER MEMORY ERROR JSB IHILO CLEAR HI,LO ADDR JMP ABS1 GO RE-ESTABLISH HI/LO. * ABS14 LDB ERR12 ABSLWAM JMP ERPR4 SO ABORT * LOADC LDA B,I GET NAM12 FROM ID SZA,RSS PROG REMOVED YET? JMP LOD8B YES. JSB REMER FINAL MEMORY ERROR JMP LOD8A C CHECK AGAIN * LOADD LDA DBLNK NO BLANK STA MT.ID+1 ID SEG LDA A00 SET ZEROES IN MSG STA MT.ID+2 LDA D11 LDB MT.ID SET UP MESSAGE ERMPR JSB STUFP PRINT MESSAGE JMP ABORT THEN ABORT. * LOADE LDB ERR11 ABS USED TOO MUCH COMMON ERPR4 LDA B2 GET COUNT TO JMP ERMPR PRINT ERR MSG, ABORT SKP * **************************** * SUBROUTINES USED IN LOAD AND ABSOLUTE RECORD PROCESSORS * **************************** * * DUPID CHECKS FOR DUPLICATE PROGRAM NAME, ISSUES ERROR * MESSAGE AND ATTEMPTS TO CHANGE PROGRAM NAME. ABORTS IF * STILL NOT UNIQUE. * JSB DUPID * DEF PNAME * * DUPID NOP SEARCH FOR DUPLICATE LDA DUPID,I ID NAME. STA DUPNM SAVE ID NAME. ISZ DUPID DUP1 JSB STRID INIT ID SCANNER. DUP2 JSB SRCID FIND ID SEG DUPNM NOP WITH SAME NAME JMP DUPID,I NO DUPLICATE. JMP DUP2 REPEAT TIL DONE. LDA ERR02 DUPLIC. PROG ERR LDB DUPNM JSB ERROR * LDA C$$ CHANGE NAME ONLY ONCE CPA DUPNM,I IF NAME ALREADY CHANGED, JMP ABORT THEN ABORT, STA DUPNM,I ELSE SEARCH AGAIN. JMP DUP1 * * **************************** * * SYSET SETS A WORD INTO A CORE LOCATION. * LDA WORD * LDB ADDR * JSB SYSET * * SYSET NOP SYSTEM WORD SETTER. JSB $LIBR TURN OFF THE NOP INTER. SYS. STA B,I STORE WORD INTO SYS. JSB $LIBX RESTORE INTER SYS DEF SYSET AND RETURN. * * *********************************** * * IHILO INITIALIZES DEFAULT HIGH AND LOW BOUNDS * OF FREE MEMORY. * JSB IHILO * * IHILO NOP INITIALIZE HI/LO ADDRS LDA BKLWA TO FIND HIGHEST F STA HMAIN AND LOWEST LDA B1647 STA HBASE ADDRS OF UNUSED LDA RTORG CORE WHICH MAY BE STA LMAIN USED FOR LOADING LDA BPA1 STA LBASE ABS PROGRAMS CLA STA LMID STA HMID STA LBID STA HBID JMP IHILO,I RETURN * * ******************************* * * CKBND CHECKS PROGRAM BOUNDS AGAINST THAT OF FREE * CORE (TEMP4 POINTS TO FREE CORE POINTERS). * LDA PRGLO LOW ADDR OF CORE USED * LDB PRGHI HI ADDR * JSB CKBND * * * CKBND NOP CHECK BOUNDS OF PROG DST TEMP AGAINST BOUNDS OF FREE CORE DLD TEMP4,I GET LFREE CMA,INA SUBTR FROM ADA TEMP LOW ADDR SSA ADDR>=LFREE? JMP CKBND,I NO, ERROR * LDA TEMP4 ADA B2 DLD A,I GET HFREE CMA SUBTR FROM ADA TEMP1 HI ADDR SSA ADDR<=HFREE? ISZ CKBND RETURN TO P+2 IF NO ERROR JMP CKBND,I RETURN TO P+1 IF ERROR * * ************************** * * REMER ISSUES "REM XXX" ERROR MESSAGE IF NEED TO REMOVE * A PROGRAM TO GET SPACE IN CORE, THEN SUSPENDS APLDR. * IF SPACE BELONGS TO THE SYSTEM, APLDR IS ABORTED. * LDB PNAME PROG WHICH MUST BE REMOVED * JSB REMER * * REMER NOP -REM XXXXX- ERROR SZB,RSS MEMORY ERROR. JMP ABS14 OUTSIDE AVAILABLE MEM LDA ERR01 GIVE -REM XXXXX- MESSAGE JSB ERROR JSB EXEC CALL EXEC DEF *+2 TO SUSPEND DEF B7 THE APLDR. JMP REMER,I RETURN * * ****************************** * * MD28 DEC -28 * B240 OCT 240 B1647 OCT 1647 B2300 OCT 2300 * * D24 DEC 24 D64 DEC 64 * BPMSK OCT 1777 C$$ ASC 1,$$ NAME CHANGE CHAR. * ABSSZ NOP NvFILE NOP CURID NOP IDOFS NOP BADDR NOP LDRCT NOP WORD1 NOP WORD2 NOP * * DO NOT CHANGE ORDER OF FOLLOWING * LMAIN NOP LMID NOP HMAIN NOP HMID NOP LBASE NOP LBID NOP HBASE NOP HBID NOP DMAIN DEF LMAIN ADDR OF HI/LO ADDR FOR MAIN DBASE DEF LBASE ADDR OF HI/LO ADDR FOR BASE PAGE * * DWRD2 DEF DWR2,I DWRD1 DEF *+1,I DUMMY ID ADDRESSES DEF PNM12 NAM12 DEF PNM50 NAM50/TYPE DEF RESML RESOL/MULT DEF HRS HR DEF SEC SEC DEF PRGMN LOW MAIN DEF PRGBP LOW BASE DEF FWAC FWA COMMON DDMYD DEF JMPXF JMP XFER * DWR2 DEF PNM34 NAM34 DEF PRIOR PR DEF SPAR1 SPARE WORD DEF MIN MIN DEF MSEC MSEC DEF PRGM2 HMAIN DEF PRGB2 HBASE DEF SZCOM SIZE COMMON DEF XFER XFER ADDR * HED RP: REPLACE PROGRAM REPL LDA NAM12 IS IT A SZA,RSS BLANK NAME? JMP REPNO YES, ERROR * REP00 JSB STRID INIT ID SEARCH REP01 JSB SRCID TO FIND ID SEG DFNAM DEF NAM12 WITH SAME NAME JMP REPNO NO SUCH PROG JMP REP01 STA CURID GOT IT, SAVE ID ADDR STB TEMP SAVE ADDR OF ID NAME * JSB $LIBR TURN OFF INT. SYS. NOP ADA D8 LDA A,I POINT OF SUSPENSION SZA IS ZERO? JMP REP03 NO, SUSPEND APLDR ADB B3 LDA B,I SZA IS STATUS DORMANT? JMP REP03 NO, SUSPEND APLDR ADB B2 LDA B,I ALF,CLE,ERA SEZ IN TIME LIST? JMP REP03 YES, SUSPEND APLDR * DLD ZERO CLEAR OUT NAME DST NAM12 -IN CALL SO WE CAN STA NAM50 USE NAME FROM ABS PROG DST TEMP,I CLEAR ID SEGMENT LDB TEMP ADB B2 FOR REPLACEMENT STA B,I BY THE RP COMMAND JSB $LIBX RESTORE INT SYS DEF *+1 DEF LOAD3 GO LOAD PROG * * ERROR RETURNS FROM REPLACE * REP03 JSB $LIBX RESTORE INT SYS DEF *+1 DEF *+1 LDA ERR04 PUT NAME INTO LDB DFNAM -OF XXXXX- BECAUSE JSB ERROR NON-ZERO SUSP OR T-LIST JSB EXEC SUSPEND APLDR DEF *+2 DEF B7 JMP REP00 TRY TO REPLACE AGAIN * REPNO LDA ERR03 NO SUCH PROG LDB DFNAM PUT NAME IN ERR MSG JSB ERROR PRINT ERR MSG JMP ABORT THEN ABORT HED PL: PROGRAM LIST * LIST PROGRAMS. * LIST LDA LU GET LU PARAM. SZA,RSS IF ZERO, LDA DLIST USE DEFAULT. STA LU SET LIST UNIT. * JSB SPACE PRINT LDA D19 HEADING. LDB HEAD1 JSB PRINT JSB SPACE * LDA DBLNK SET UP OUTPUT BUFFER. STA BUF STA BUF+4 STA BUF+6 STA BUF+13 * CLA CLEAR OUT BLANK ID SEG. STA TEMP5 COUNTER. * JSB STRID INIT ID SCANNER. LIST2 JSB SRCID SEARCH ID SEGS DEF ZERO JMP LIST7 EOF JMP LIST3 NON BLANK ID SEG ISZ TEMP5 BLANK ID SEG JMP LIST2 GO SEE NEXT ONE. * LIST3 STB TEMP1 SAVE NAME ADDR STA TEMP SAVE ID ADDR LDA LINE PUT PROG NAME INA INTO LINE JSB MVNAM * LDB TEMP ADB B6 GET PRIORITY LDA B,I WORD JSB DIV10 DIVIDE BY 10 STA BUF+5 * LDB TEMP ADB D22 GET PROG ADDRS. STB TEMP LDA M2 SET -2 TO GET STA TEMP4 MAIN AND BASE PAGE. LDB LINE INITIALIZE ADDR ADB B7 FOR NUMBER STUFFING. LIST4 LDA TEMP,I GET LOW ADDR. JSB CONV CONVERT TO ASCII. ISZ TEMP LDA TEMP,I GET HIGH ADDR. ADA M1 -1 TO GET REAL HIGH ADDR JSB CONV CONV\ERT TO ASCII. * INB LEAVE A SPACE. ISZ TEMP ISZ TEMP4 JMP LIST4 GO GET NEXT PAIR OF ADDRS. * LDA D20 LDB LINE JSB PRINT PRINT PROG INFO. * JMP LIST2 GO GET NEXT ID SEG. * LIST7 LDA TEMP5 GET # OF BLANK ID SEGS JSB DIV10 DIVIDE BY 10 STA MT.ID+2 LDA D11 LDB MT.ID JSB PRINT PRINT "# BLANK ID SEGMENTS" * DONE LDA B2 PRINT "DONE" LDB MSG1 AFTER THE "APLDR:" JMP STOP1 * ABORT LDA B4 PRINT "ABORTED" LDB ERR99 AFTER THE "APLDR:" STOP1 JSB STUFP STOP JSB EXEC CALL EXEC DEF *+2 TO END DEF B6 APLDR. * SKP * SUBROUTINES FOR APLDR. * * ***************************** * * SPACE PRINTS A BLANK LINE ON LIST DEVICE. * JSB SPACE * * SPACE NOP PRINT BLANK CLA LINE. LDB MSG1 (B)=DUMMY BUFFER JSB PRINT JMP SPACE,I * * ***************************** * * PRINT PRINTS A LINE ON LIST DEVICE. * LDA WORDS NO. OF WORDS * LDB ADDR ADDR OF TEXT * JSB PRINT * * PRINT NOP STA TEMP1 STB MADDR JSB EXEC CALL EXEC DEF *+5 TO PRINT DEF B2 ON LIST DEVICE DEF LU MADDR NOP DEF TEMP1 JMP PRINT,I * * ******************************** * * STUFP STUFFS A MESSAGE WITH THE IDENTIFIER "APLDR:" AND * PRINTS IT ON CONSOLE. * LDA WORDS * LDB ADDR * JSB STUFP * * STUFP NOP STUFF MESSAGE INTO STB TEMP SPECIAL IDENTIFIER LDB B4 ADD 4 TO ADB A MESSAGE LENGTH STB TEMP3 FOR TOTAL LENGTH CMA,INA STA TEMP2 NEGATIVE COUNT. LDB MSG0 STFLP LDA TEMP,I STA B,I INB ISZ TEMP ISZ TEMP2 JMP STFLP JSB DSPLA DISPLAY MESSAGE JMP STUFP,I RETURN * * ****************************** * * DSPLA PRINTS A MESSAGE ON THE CONSOLE. THE MESSAGE * ADDRESS IS IN MSG AND THE WORD LENGTH IS IN TEMP3. * JSB DSPLA * * DSPLA NOP JSB EXEC DEF *+5 DEF B2 CALL EXEC DEF KYBDU TO WRITE DEF MSG MESSAGE ON DEF TEMP3 OPERATOR CONSOLE. JMP DSPLA,I RETURN * * ****************************** * * MVNAM MOVES A PROGRAM NAME (3 WORDS) AND FILLS AN * ASCII BLANK IN THE DESTINATION NAME. * LDA DEST ADDR OF DESTINATION FOR NAME * LDA SORC ADDR OF SOURCE NAME * JSB MVNAM * * MVNAM NOP MOVE PROG NAME STA TEMP4 TO GIVEN DESTINATION LDA B,I STA TEMP4,I MOVE CHAR1,2 ISZ TEMP4 INB LDA B,I STA TEMP4,I MOVE CHAR3,4 ISZ TEMP4 INB LDA B,I AND LHALF PUT ASCII BLANK IOR B40 IN CHAR6 STA TEMP4,I THEN MOVE JMP MVNAM,I RETURN * * ******************************* * * ERROR PUTS A PROGRAM NAME INTO AN ERROR MESSAGE * THEN PRINTS IT ON THE CONSOLE. * LDA ERRAD ADDR OF ERROR MESSAGE * LDB PNAME ADDR OF PROGRAM NAME * JSB ERROR * * ERROR NOP PUT NAME INTO STB TEMP5 ERR MSG THEN DLD A,I PRINT IT DST BUF MOVE ERR MSG TO OUTPUT AREA LDB TEMP5 GET ADDR OF NAME LDA LINE2 TO PUT INTO MSG JSB MVNAM LDA D9 STA TEMP3 SET LENGTH FOR JSB DSPLA DISPLAY JMP ERROR,I RETURN * * ***************************** * * STRID INITIALIZES ID SEGMENT SEARCH ROUTINE. * * STRID NOP INITIALIZE ID SCANNER. LDA KEYWD GET KEYWORD ADDRESS STA ADRID STORE AS ID ADDRESS. JMP STRID,I RETURN * * ***************************** * * SRCID FETCHS AN ID SEGMENT AND SEES IF MATCH/NO MATCH/BLANK. * JSB SRCID * DEF PNAME ADDR OF NAME TO SEARCH FOR * * * * A CONTAINS ADDR OF ID SEGMENT * B CONTAINS ADDR OF NAME IN ID SEGMENT * SRCID NOP SEARCH ID SEGMENTS LDA SRCID,I FOR A CERTAIN NAME. STA TEMP1 SAVE ADDR OF NAME ISZ SRCID SET RETURN AT P+2 LDB ADRID,I PICK UP AN ID ADDR SZB,RSS IS IT END OF ID SEGS? JMP EOFID YES ADB D12 BUMP TO NAME IN ID STB TEMP2 SAVE ADDR OF NAME LDA B,I CPA TEMP1,I CHECK NAME 1,2 INB,RSS MATCHES. JMP NOMAT NO MATCH. ISZ TEMP1 LDA B,I CPA TEMP1,I CHECK NAME 3,4 INB,RSS MATCHES. JMP NOMAT NO MATCH. ISZ TEMP1 LDA B,I AND LHALF STA STRID SAVE TEMPORARILY LDA TEMP1,I AND LHALF CPA STRID COMPARE NAME 5 ISZ SRCID MATCHES, SET RETURN P+4 * NOMAT ISZ SRCID NO MATCH, RETURN P+3 LDA ADRID,I READY FOR RETURN. ISZ ADRID LDB TEMP2 EOFID JMP SRCID,I RETURN. * * ***************************** * SUBROUTINE: CONV (CONVERT 15-BIT BINARY NUMBER * TO 6-CHAR (LEADING BLANK) ASCII FORM OF OCTAL NUMBER * CALLING SEQUENCE: * (A)-BINARY VALUE FOR CONVERSION * (B)-ADDRESS OF 3-WORD AREA FOR * STORING ASCII/OCTAL CHARACTERS * (P) JSB CONV * (P+1) (RETURN): * (A) DESTROYED. * (B) ADDRESS OF NEXT STORAGE * CONV NOP STB TEMP1 SAVE STORAGE AREA ADDRESS LDB A RBL POSITION FIRST DIGIT TO B(15-13). LDA M3 LET CONVERT COUNTER STA TEMP2 = -3. LDA B40 MAKE FIRST CHARACTER A SPACE. CONV1 ALF,ALF ROTATE CHAR. TO UPPER POSITION STA TEMP3 AND SAVE. BLF,RBR POSITION NEXT DIGIT TO B(02-00), LDA B AND B7 ISOLATE DIGIT. IOR B60 MAKE AN ASCII CHAR. (60 - 67). IOR TEMP3 PACK IN UPPER CHARACTER STA TEMP1,I AND STORE IN STORAGE AREA. ISZ TEMP1 ADD 1 TO STORAGE AREA ADDRESS. BLF,RBR ROTATE NEXT DIGIT TO LOW B, LDA B ISOLATE CHAR AND B7 IN LOW A, IOR B60 MAKE AN ASCII CHAR. ISZ TEMP2 INDEX CONVERT COUNTER JMP CONV1 NOT FINISHED. LDB TEMP1 FINISHED, SET (B)= NEXT STORAGE JMP CONV,I AREA WORD ADDRESS AND EXIT. * * *********************************** * * DIV10 CONVERTS A VALUE TO ASCII CHARACTERS * (DECIMAL CONVERSION, 99 MAX). * LDA VALUE * JSB DIV10 * * DIV10 NOP DIVIDE BY 10 (99 MAX) CLB RETURN ASCII IN (A) DIV D10 ALF,ALF MOVE TO LEFT HALF ADA B ADD REMAINDER ADA A00 MAKE ASCII JMP DIV10,I RETURN SKP * CONSTANTS AND STORAGE. * UNS M3 OCT -3 M2 OCT -2 M1 OCT -1 * B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B40 OCT 40 B60 OCT 60 * D8 DEC 8 D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D19 DEC 19 D20 DEC 20 D22 DEC 22 * A00 ASC 1,00 CONSL EQU B1 OPERATOR CONSOLE. DINPT EQU B5 DEFAULT INPUT UNIT. DLIST EQU B6 DEFAULT LIST UNIT. LHALF OCT 177400 ZERO OCT 0,0,0 ADRID NOP KYBDU NOP LU NOP * TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP TEMP5 NOP |ZXT* KBFUN NOP 5-WORD TABLE. FILLU NOP NAM12 NOP NAM34 NOP NAM50 NOP * SKP * MESSAGES FROM APLDR WITH LOVE. * * ERR01 DEF *+1 ASC 2,REM * ERR02 DEF *+1 ASC 2,DUP * ERR03 DEF *+1 ASC 2,NO * ERR04 DEF *+1 ASC 2,OF * ERR10 DEF *+1 ASC 2,CKSM * ERR11 DEF *+1 ASC 2,COM * ERR12 DEF *+1 ASC 2,MEM * ERR13 DEF *+1 ASC 2,ID? * ERR99 DEF *+1 ASC 4,ABORTED * * MSG1 DEF *+1 ASC 3,DONE- * * MT.ID DEF *+1 ASC 11, BLANK ID SEGMENTS * HEAD1 DEF *+1 ASC 19, PROGRAM LIST: NAME,PRIORITY,MAIN,BASE * * DBLNK EQU ERR04-1 DOUBLE BLANK WORD DABSD DEF ABSBF+2 DDMID DEF DMYID LINE DEF MSG+4 LINE2 DEF MSG+6 MSG0 EQU LINE * MSG ASC 9, APLDR: BUF EQU MSG+4 * ABSBF BSS 64 * ABSCT EQU ABSBF ABSAD EQU ABSBF+1 ABSD1 EQU ABSBF+2 ABSD2 EQU ABSBF+3 * DMYID EQU ABSBF+35 JMPXF EQU DMYID-4 SPAR1 EQU DMYID-3 FWAC EQU DMYID-2 SZCOM EQU DMYID-1 PRIOR EQU DMYID+6 XFER EQU DMYID+7 PNM12 EQU DMYID+12 PNM34 EQU DMYID+13 PNM50 EQU DMYID+14 RESML EQU DMYID+17 MSEC EQU DMYID+18 SEC EQU DMYID+19 MIN EQU DMYID+20 HRS EQU DMYID+21 PRGMN EQU DMYID+22 PRGM2 EQU DMYID+23 PRGBP EQU DMYID+24 PRGB2 EQU DMYID+25 * BSS 0 SIZE OF APLDR * * END APLDR NjZ  29101-80005 B S C0122 RTE-C RELOCATING LOADER MAIN CONTROL             H0101 NASMB,B,R,L,C HED RTS RELOCATING LOADER/2100 * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * * * THE TERM RTS/2100 IS SYNONYMOUS WITH RTE-C AND * THE TERMS ARE USED INTERCHANGEABLY THROUGHOUT * THIS DOCUMENT * ********************************************************* * * RTE-C LOADER MAIN CONTROL * REV.A JACK COOLWY 15MAY73 * REV.B D.L.S. 10MAR75 COPYRIGHT * ********************************************************* * NAM LOADR * * ENTRY POINT NAMES * ENT PNAME,PNAMA,PRAMS ENT LOADR * * EXTERNAL REFERENCE NAMES * EXT LOEND EXT PRCMD EXT BPLOC,LOCC,BPAG4 EXT B2,MD24,MD60,UPCM EXT CNTR,?XFER,OPT.3 EXT FWABP,LTG,ABRC1,FWAM,FWAC,COML EXT PACK,PUNCH,LST EXT LISTO,ASR33,B7 EXT DIAG,ABORT * B EQU 1 * SUP ********************************************************** * THE FUNCTION OF THIS LOADER IS TO RELOCATE AND LINK * RELOCATABLE BINARY MODULES TOGETHER, AND PREPARE * THEM FOR EXECUTION ON AN RTS SYSTEM. AFTER * LOADING THIS LOADER INTO CORE USING THE BBL OR BBDL, * THE SIO DRIVERS TO BE USED ARE LOADED AND CONFIGURED * THE SNAPSHOT CAN THEN BE READ IN FROM THE PHOTO * READER BY TYPING TR ON THE TTY. * THIS SNAPSHOT CONTAINS THE DEFAULT * MEMORY BOUNDS, SYSTEM COMMON, AND DEFINES THE * CORE-RESIDENT LIBRARY ROUTINES FOR THE TARGET RTS * SYSTEM. * SYMBOL TABLE ENTRY FORMAT: * * WORD 5 - OCT 0 (LINK OR FIXUP TABLE ADDRESS) * 4 - DEF SYMBOL (HOLDS SYMBOL VALUE) * 3 - OCT XX000 CHAR 5 AND FLAGS * 2 - % ASC 1, CHARS 3,4 OF NAME * 1 - ASC 1, CHARS 1,2 OF NAME * SHOULD ONLY BE REFERENCED VIA POINTERS LST1 THRU LST5, * USING SUBROUTINES LSTI AND LSTP. * ************************************************************************ * LOADR JMP BEGIN SET ENTRY POINT AT 100 BSS 4 DEF LOEND SET UP LOC 105B WITH LAST WRD USED BSS 2 BEGIN NOP START UP LOADER LDA ABJMP SET UP LOC 100 FOR STA LOADR SUBSEQUENT STARTUPS LIA 1 GET SSW CONTENTS SSA,RSS IF BIT 15 IS CLA NOT SET, ASR33=0 STA ASR33 SET, ASR33 = NON-ZERO LDA 106B GET LAST WORD OF FREE MEMORY STA OPT.3 SAVE STA LTEMP LDA M1020 ZERO BASE PAGE LINK TABLE STA CNTR LDB BPAG4 GET ADDRESS OF THE LINK TABLE CLA STA B,I INB ISZ CNTR JMP *-3 STA PNAME STA ?XFER CLEAR "HAVE MAIN" FLAG STA LOCC STA BPLOC STA COML INITIALIZE "COMMON USED " FLAG STA LST INITIALIZE SYM TAB LENGTH LDA LISTO RESET THE BIT TO OUTPUT MAP AND B7 HEADING (BIT # 3), BUT KEEP STA LISTO BITS 0-2. JSB LTG PUNCH LEADER. LDB ONMSG PRINT MESSAGE JSB DIAG "LOADER STARTED" JSB PRCMD PROCESS LOADER COMMANDS JMP RESET RETURN HERE AFTER ABORT LDA PRCMD NORMAL RETURN ADA M1 SET UP PRCMD TO ALLOW STA PRCMD RESTART AT LOC 100 AS WELL AS RUN BUTTON LDA LOCC SZA,RSS IF NO MODULES RELOCATED, JMP NOINP DONT OUTPUT SPECIAL RECORDS LDA B2 STA ABRC1 STORE ADDRESS OF TIE-OFF RECORDS DLD PNAME GET PROGRAM NAME JSB TYOFF PUNCH CHARS 1,2,3,4 OF NAME LDA PNAME+2 AND UPCM IOR PRAMS CHAR 5,TYPE LDB PRAMS+1 GET PRIORITY JSB TYOFF LDA PRAMS+2 RAR,RAR RES. CODE RAR 4 IOR PRAMS+3 CLB SPARE JSB TYOFF DLD PRAMS+4 ADA MD24 24-COMPLEMENT HOURS ADB MD60 60-COMPLEMENT MINUTES JSB TYOFF OUTPUT HOURS AND MINUTES DLD PRAMS+6 GET SECONDS & TENS OF MSECS ADA MD60 60-COMPLEMENT SECS ADB M100 100-COMPLEMENT T.MSECS JSB TYOFF OUTPUT SECONDS AND TENS OF MILLISECONDS LDA FWAM GET LOW MAIN LDB LOCC GET HIGH MAIN JSB TYOFF OUTPUT LDA FWABP GET LOW BASE PAGE LDB BPLOC GET HIGH BASE PAGE JSB TYOFF OUTPUT LOW & HIGH BASE PAGE LDA FWAC LDB COML JSB TYOFF LDA JMP3 LDB ?XFER GET TRANSFER ADDRESS JSB TYOFF JSB LTG NOINP HLT 77B RESET LDA LTEMP STA 106B JMP BEGIN RESTART SPC 1 ABJMP JMP ABORT JMP3 JMP 3,I LTEMP NOP M1020 DEC -1020 LENGTH OF BP LINKS TABLE(EXCL.LOC 0-4) M100 DEC -100 M1 DEC -1 PNAMA DEF PNAME PNAME REP 3 PROGRAM NAME NOP BSS 3 MODULE LENGTHS FOR MAIN PRAMS DEC 3 DEFAULT TYPE DEC 99 DEFAULT PRIORITY REP 6 DEFAULT OTHER PARAMS NOP SPC 2 TYOFF NOP PUNCH TWO-WORD TIE-OFF RECORD JSB PACK WORD 1 FROM (A) LDA B WORD 2 FROM (B) JSB PACK JSB PUNCH JMP TYOFF,I ONMSG DEF *+1 DEC 14 ASC 7,LOADER STARTED * SPC 2 END LOADR @  29101-80006 B S C0422 RTE-C RELOCATING LOADER SUB CONTROL             H0104 ASMB,R,L,B,C * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * * * THE TERM RTS/2100 IS SYNONYMOUS WITH RTE-C AND * THE TERMS ARE USED INTERCHANGEABLY THROUGHOUT * THIS DOCUMENT * ************************************************************************ * * RTE-C LOADER SUBORDINATE CONTROL * REV.A JACK COOLEY 15MAY73 * REV,B D.L.S. 11MAR75 COPYRIGHT * * ******************************************************************** * HED RTS RELOCATION SUBORDINATE CONTROL NAM RTRLC * * ENTRY POINT NAMES * ENT LST,.MEM.,.MEM1,.MEM2,.MEM3,.MEM4,.MEM5,.MEM6 ENT IBUFR,PUNCH,OPT.3,ABRC1,PLK,?XFER,PLKS,LSTA1 ENT UEXFL,SSTBL,LST1,LST2,LST3,LST4,LST5,LTG ENT MEMRY,PRCMD,PACK,BPLOC,LOCC ENT LINK,ASR33,B7,PCHX,DIAG ENT MOVEX,B2,B4,MD24,MD60,UPCM,FWAM,FWAC,COML ENT CNTR,BPAGA,MD6,FWABP ENT BPAG4,LISTO ENT LOUT,NAMR.,ABORT ENT LOEND * * EXTERNAL REFERENCE NAMES * EXT PNAME,PNAMA,PRAMS * A EQU 0 B EQU 1 SUP ************************************************************************ * * THESE ROUTINES ARE USED BOTH IN THE RTS LOADER ITSELF AND IN * THE RTS GENERATOR RTSGN. THESE ROUTINES,CALLED A SUBORDINATE * CONTROL MODULE, COMPRISE A COMMAND PROCESSOR FOR LOADER COMMANDS. * THIS MODULE IS CALLED AS IF IT WERE A SUBROUTINE WITH NO * PARAMETERS AND TWO RETURNS. THE (P+1) RETURN IS USED FOR ABNORMAL * TERMINATION CONDITIONS, WHILE THE (P+2) RETURN IS USED FOR NORMAL * RETURNS VIA THE END COMMAND.THE CALLING SEQUENCE IS AS FOLLOWS: * * JSB ePRCMD * RETURN1 RELOCATION ABORTED RETURN * RETURN2 NORMAL RETURN * ******************************************************************** HED RTS LOADER UTILITY SUBROUTINES ***** * ** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF) * CALLING SEQUENCE: * * JSB BLINE * RETURN * ***** BSS 1 BLINE NOP LDA LBUFA STA BLINE-1 LDA MD24 LDB BLANK STB BLINE-1,I ISZ BLINE-1 INA,SZA JMP *-3 JMP BLINE,I ***** * ** RBIN ** READ RELOCATABLE BINARY INPUT FROM SIO DRIVER TO (LBUF) * CALLING SEQUENCE: * * JSB RBIN * RETURN * * NOTE: NUMBER OF WORDS TRANSMITTED IS COMPLEMENTED AND STORED IN * THE FIRST WORD OF THE BUFFER, OVERLAYING FIRST INPUT WORD ***** RBIN NOP LDA MD60 LDB LBUFA JSB 101B,I CMA,INA GET NEG. # DATA WORDS IN RECORD STA LBUF STORE JMP RBIN,I ***** * ** IBUFR ** INITIALIZE THE ABSOLUTE RECORD BUFFER (ABREC) SO IT MAY * BE FILLED UP FOR LATER OUTPUT * CALLING SEQUENCE: * JSB IBUFR * RETURN * ***** IBUFR NOP CLA ZERO OUT STA ABREC WORD COUNT STA CKS AND CHECKSUM LDA ABL2 INITIALIZE STA ABL1 NEXT WORD POINTER JMP IBUFR,I * MEMRY DEF FWABP STMP1 NOP * ***** * ** DELIM ** ADVANCE POINTERS TO ASCII INPUT BUFFER PAST NEXT * DELIMETER. ACCEPTABLE DELIMITERS ARE A COMMA, ONE OR * MORE BLANKS, OR A COMMA IMBEDDED IN BLANKS. * CALLING SEQUENCE: * * JSB DELIM * RETURN1 NOTHING BUT BLANKS TO END OF LINE * RETURN2 DELIMETER FOUND * * NOTE: IF NO VALID DELIMITER IS FOUND (OR COMMA WITH NOTHING BUT * BLANKS TO THE END OF LINE) A DIRECT JUMP TO THE COMMAND * ERROR ROUTINE WILL RESULT. THUS CONTROL MAY NOT BE RETURNED ***** DELIM NOP JSB QGETC GET THE NEXT CHAR JMP DELIM,I END OF LINE , RETURN (P+1) LDB KM2 INITIALIZE STB STMP1 COMMA COUNTER CPA B40 IS THIS A BLANK? JMP DEL01 YES CPA B54 NO, IS IT A COMMA? RSS JMP CMER NO, ERROR ISZ STMP1 DEL01 JSB NXTC GET NEXT NON BLANK CHAR JMP DEL02 END OF LINE CPA B54 GOT ONE, IS IT A COMMMA? RSS JMP DEL03 NO ISZ STMP1 YES, IS IT THE SECOND ONE? JMP DEL01 NO, GET NEXT NON BLANK CHARACTER DEL03 JSB BAKUP YES, BACK UP BUFFER POINTERS ISZ DELIM AND EXIT (P+2) JMP DELIM,I DEL02 ISZ STMP1 WAS THERE A COMMA? JMP DELIM,I NO, EXIT (P+1) JMP CMER YES, ERROR ***** * ** BAKUP ** BACK UP INPUT BUFFER (QIBUF) POINTERS BY ONE CHARACTER * CALLING SEQUENCE: * * JSB BAKUP * RETURN * ***** BAKUP NOP LDA QQCNT DECREMENT CHAR COUNT ADA M1 STA QQCNT LDB QQPTR SLA AND IF NECESSARY, ADB M1 DECREMENT POINTER STB QQPTR JMP BAKUP,I ***** * THE ABSOLUTE RECORD BUFFER * ABREC OCT 0 ABRC1 BSS 49 BUFFER FOR ABSOLUTE RECORD * ***** * ** PACK ** INSERT A WORD INTO THE ABSOLUTE RECORD BUFFER * CALLING SEQUENCE: * * LDA WORD TO BE PLACED IN RECORD * JSB PACK * RETURN * * NOTE: .B. IS NOT ALTERED BY THIS SUBROUTINE ***** PACK NOP STA ABL1,I STORE WORD AT NEXT LOCATION ISZ ABL1 IN BUFFER, INCREASE ADDRESS. ADA CKS ADD WORD TO CHECKSUM STA CKS AND RESTORE WORD ISZ ABREC COUNT WORD JMP PACK,I AND EXIT. ***** * ** PUNCH ** OUTPUT THE RECORD IN THE ABSOLUTE RECORD BUFFER * CALLING SEQUENCE: * * JSB PUNCH * RETURN * * NOTE: THIS SUBROUTINE INSERTS CHECKSUM AND WORDCOUNT BEFORE OUTPUT ***** PUNCH NOP ENTRY/EXIT LDA CKS ADD LOAD ADDRESS TO CHECK-SUM ADA ABREC+1 AND SET RECORD SUM STA ABL1,I IN LAST WORD OF RECORD.  LDA ABREC ADD 2 TO RECORD WORDCOUNT ALF,ALF POSITION AS FIRST CHAR. AND STA ABREC SET. ALF,ALF REPOSITION, ADD 3 FOR TOTAL ADA B3 LENGTH AND SET FOR CMA,INA LDB .ABR JSB PCHX JSB IBUFR SET UP OUTPUT JMP PUNCH,I EXIT- ***** * ** PCHX ** PUNCH OUT THE CONTENT OF A SPECIFIED BUFFER * IF USING AN ASR33 TTY, THE COMPUTER WILL HALT (07) WHEN * SWITCHING FROM KEYBOARD TO PUNCH MODE. * CALLING SEQUENCE: * * LDA LENGTH, POSITIVE IF CHARS, NEGATIVE IF WORDS * LDB BUFFER ADDRESS * JSB PCHX * RETURN * ***** PCHX NOP ENTRY: LDA,LDB,JSB. STA TMP SAVE (A) LDA ASR33 ARE WE USING ASR33 TTY? SZA,RSS JMP NO33 NO, DO OUTPUT USPCH HLT 7B YES, HALT IF NOT IN PUNCH MODE CLA STA USPCH CLEAR USPCH TO SET PUNCH MODE LDA HLT.K AND SET HALT FOR STA USKBD SWITCH TO KEYBOARD MODE NO33 LDA TMP RESTORE (A) JSB 103B,I DO OUTPUT JMP PCHX,I * TMP NOP ASR33 NOP HLT.K HLT 70B ***** * ** PRCMD ** MAIN ENTRY POINT FOR THE SUBORDINATE CONTROL MODULE. * CONTROL IS PASSED TO TYMOD OR NXTCM TO GET THE NEXT * COMMAND. THAT COMMAND IS PARSED, AND CONTROL IS PASSED * TO ITS ASSOCIATED PROCESSING ROUTINE. IF A FATAL ERROR * IS DETECTED, CONTROL IS RETURNED TO THE ROUTINE CALLING * PRCMD AT (P+1). THE ONLY OTHER EXIT IS VIA THE END * COMMAND (P+2). AFTER PROCESSING ANY OTHER COMMAND, * CONTROL RETURNS TO NXTCM TO PROCESS THE NEXT COMMAND. * ***** PRCMD NOP PROCESS RTE LOADER/2100 COMMANDS TYMOD LDA TTYIN INITIALIZE TO STA CMDLU TTY MODE NXTCM JSB CMDIN GET NEXT COMMAND LINE LDA CTACN LDB CTABL JSB SCAN SCAN 1ST ELEMENT FOR MATCH JMP CMER COMMAND ERROR. ADA PTABL JUMP TO PROCESSOR LDA A,I JMP A,I * CMER1 DEF *+1 OCT 5 ASC 3,CMND? ***** * CONTROL COMES HERE ON DETECTING A COMMAND ERROR. THE MESSAGE * 'CMND?' IS OUTPUT, INPUT IS SWITCHED TO TTY, AND GET NEXT CMD. ***** CMER LDB CMER1 OUTPUT CMND? MESSAGE JSB DIAG JMP TYMOD GET NEXT COMMAND FROM TTY HED RTS LOADER TABLES ***** * * BRANCH TABLE FOR COMMAND PROCESSORS. * ORDER OF THIS TABLE MUST CONFORM TO ORDER OF FIRST ENTRIES IN * COMMAND PNEUMONIC TABLE. * ***** PTABL DEF * DEF BNDST BOUNDS STATEMENT DEF MAPST MAP STATEMENT DEF RELST RELOCATE STATEMENT DEF SERST SEARCH STATEMENT DEF NXTCM OUTPUT STATEMENTS IGNORED DEF DSPST DISPLAY STATEMENT DEF TR TRANSFER DEF TR TR DEF EOL END STATEMENT DEF SETST SET STATEMENT DEF LNKST LINKS STATEMENT ***** * * COMMAND PNEUMONIC TABLE * * BITS 15-8 # CHARS IN ASCII KEYWORD TABLE * BITS 7-0 OFFSET IN THAT TABLE (TO LOCATE ASCII WORDS) * * THE ORDER OF ENTRIES IN THIS TABLE IS USED IN DETERMINING THE * OFFSET ASSOCIATED WITH KEYWORDS. THUS ORDER IN THIS TABLE IS * OF PARAMOUNT IMPORTANCE. IF ANY KEYWORD IS EXACTLY THE SAME * AS THE BEGINNING OF A LONGER KEYWORD, THE LONGER KEYWORD MUST * APPEAR FIRST. (FOR EXAMPLE TRANSFER APPEARS BEFORE TR) * ***** CTACN ABS CTABS-CTABN NEG NBR ENTRIES IN TABLE CTABL DEF CTABS CTABS ABS 3000B+ABOUD-CMTBL BOUNDS ABS 1400B+AMAP-CMTBL MAP ABS 4000B+ARELC-CMTBL RELOCATE ABS 3000B+ASEAR-CMTBL SEARCH ABS 3000B+AOTPU-CMTBL OUTPUT ABS 3400B+ADISP-CMTBL DISPLAY ABS 4000B+ATRAN-CMTBL TRANSFER ABS 1000B+ATR..-CMTBL ABBR. OF TRANSFER ABS 1400B+AEND.-CMTBL END ABS 1400B+ASET.-CMTBL SET ABS 2400B+ALINK-CMTBL LINKS CTABN EQU * KTABS ABS 2400B+AFWAB-CMTBL FWABP ABS 2400B+ALWAB-CMTBL LWA BP ABS 2000B+AFWAM-CMTBL FWAM ABS 2000B+ALWAM-CMTBL LWAM ABS 2000B+AFWAC-CMTBL FWAC ABS 2000B+ALWAC-CMTBL LTABS ABS 2000B+ALOCC-CMTBL LOCC ABS 3000B+ABPLC-CMTBL BPLOCC ABS 2400B+AXFER-CMTBL .XFER ABS 2400B+ATBLE-CMTBL TABLE ABS 3000B+AUNDE-CMTBL UNDEFS MTABS ABS 3400B+AMODS-CMTBL MODULES ABS 3400B+AGLOS-CMTBL GLOBALS ABS 2400B+ALINK-CMTBL LINKS ABS 1400B+AOFF.-CMTBL OFF ATABS ABS 1400B+AYES.-CMTBL YES ABS 1000B+ANO..-CMTBL NO TSTRT ABS 2400B+ASTRT-CMTBL STATR TAT ABS 1000B+AAT..-CMTBL AT TTO ABS 1000B+ATO..-CMTBL TO STABL DEF TSTRT ATTBL DEF TAT TOTBL DEF TTO LTABL DEF LTABS KTABL DEF KTABS MTABL DEF MTABS ATABL DEF ATABS ***** * ASCII KEYWORD TABLE * ORDER OF ENTRIES IN THIS TABLE IS ON NO IMPORTANCE ***** CMTBL DEF * ABOUD ASC 3,BOUNDS AMAP ASC 2,MAP ARELC ASC 4,RELOCATE ASEAR ASC 3,SEARCH AOTPU ASC 3,OUTPUT ADISP ASC 4,DISPLAY ATBLE ASC 3,TABLE AUNDE ASC 3,UNDEFS AMODS ASC 4,MODULES AGLOS ASC 4,GLOBALS ALINK ASC 3,LINKS AOFF. ASC 2,OFF ATRAN ASC 4,TRANSFER ATR.. ASC 1,TR AEND. ASC 2,END AFWAM ASC 2,FWAM ALWAM ASC 2,LWAM AFWAB ASC 3,FWABP ALWAB ASC 3,LWABP AFWAC ASC 2,FWAC ALWAC ASC 2,LWAC ALOCC ASC 2,LOCC ABPLC ASC 3,BPLOCC AXFER ASC 3,?XFER AYES. ASC 2,YES ANO.. ASC 1,NO ASTRT ASC 3,START AAT.. ASC 1,AT ASET. ASC 2,SET ATO.. ASC 1,TO * PRPTA DEF *+1 ASC 1,-- * PTR NOP CNTR NOP PTR2 NOP CCNT NOP QQCN1 NOP QQPT. NOP TEMP NOP NCHAR NOP CNT NOP SKP HED SCANNER ROUTINE ***** * ** SCAN ** SCAN INPUT BUFFER (QIBUF) FOR KEYWORD * CALLING SEQUENCE: * * LDA NUMBER OF ENTRIES TO SEARCH * LDB ADDRESS OF PNEUMONIC TABLE ENTRY ASSOC WITH FIRST CHOICE * JSB SCAN * RETURN1 NOT FOUND * RETURN2 FOUND, OFFSET FROM FIRST ENTRY SEARCHED IN .A. * * NOTE: THIS ROUTINE WILL SKIP LEADING BLANKS IN ATTEMPTING A MATCH. * FURTHEEuR,BUFFER POINTERS ARE ADVANCED PAST THE KEYWORD * MATCHED OR RESET IF NO MATCH OCCURRED. ***** SCAN NOP ENTRY/EXIT STB PTR INITIALIZE SCANNER STA CNTR CLA STA CNT INITIALIZE OFFSET COUNTER SCAN1 LDA PTR,I GET COMMAND POINTER WORD AND B377 MASK COMMAND TABLE OFFSET ADA CMTBL STA PTR2 STORE POINTER TO ASCII COMMAND LDA PTR,I ALF,ALF AND B377 GET # CHARS. STA NCHAR ISZ CNT BUMP OFFSET COUNTER CLA STA CCNT LDA QQCNT SAVE CHARACTER STREAM STA QQCN1 LDA QQPTR STA QQPT. POINTERS. JSB NXTC GET THE FIRST NON-BLANK CHAR CLA END OF LINE JMP SCAN5 GET REST OF CHARS IN LOOP SCAN2 JSB QGETC GET NEXT CHARACTER. CLA NO MORE CHARS. SCAN5 STA TEMP LDA PTR2,I LDB CCNT ISZ CCNT CPB NCHAR ALL CHARS. MATCH? JMP SCAN4 YES-CHECK END OF INPUT ELEMENT. SLB,RSS IS CHAR IN HIGH-ORDER BYTE? ALF,ALF YES--ROTATE TO LOW AND B177 MASK SLB BUMP ASCII COMMAND TABLE POINTER ON ISZ PTR2 EVEN-NUMBERED CHARACTERS. CPA TEMP DO CHARS. MATCH? JMP SCAN2 YES--SO FAR. SCAN3 LDA QQPT. NO--BACKUP POINTERS STA QQPTR LDA QQCN1 STA QQCNT SPC 1 * NOW BUMP COMMAND TABLE POINTER, OR TAKE ERROR EXIT * IF NO MORE LEFT SPC 1 ISZ PTR ISZ CNTR END OF TABLE? JMP SCAN1 NO JMP SCAN,I SPC 1 SCAN4 LDA TEMP IS NEXT SOURCE CHAR A DELIMITER? SZA END OF LINE? JSB BAKUP LDA CNT ISZ SCAN JMP SCAN,I HED INPUT COMMAND LINE ***** * ** CMDIN ** INPUT NEXT COMMAND LINE USING SIO DRIVERS * CALLING SEQUENCE: * * JSB CMDIN * RETURN * * NOTE: CMDIN CHECKS FOR '-' IF REQUIRED AND DOES A JMP CMER IF NOT * TH?ERE. IT ALSO SKIPS COMMENTS AND ADVANCES INPUT BUFFER * POINTERS PAST THE '-' IF IT APPEARS IN THE INPUT BUFFER. * * THE IDENTIFIER CMDLU IS USED TO SET UP TTY VS PHOTORDR INPUT * * CMDLU=JSB 104B,I FOR KEYBOARD(TTY) INPUT * NO COMMAND ID CHAR. REQUIRED. NO ECHO. * * =JSB 101B,I FOR BATCH INPUT(E.G., PHOTOREADER, * OR CASSETTE). * COMMAND ID REQUIRED IN COLUMN. 1, AND ECHO TO LIST UN * IMPLIED. * * RETURN: QQCHC= POSITIVE # CHARS TRANSMITTED * ***** CMDIN NOP CLA RESET INCOMING CHARACTER STA QQCNT POINTERS LDA QBUFA STA QQPTR LDA CMDLU TTY? CPA TTYIN TTY? RSS JMP CMD1 NO--SKIP PROMPT CLA,INA LDB PRPTA JSB LOUT CMD1 LDB QBUFA GET COMMAND INPUT LINE LDA D72 CMDLU JSB 104B,I GET NEXT COMMAND LINE STA QQCHC SZA EOT? JMP CMD2 CPA NDATA NEED TO SKIP LEADER? JMP CMD1 YES LDA TTYIN AUTOMATIC TRANSFER TO TTY. STA CMDLU JMP CMDIN+5 * CHECK INPUT LINE FOR COMMAND IDENTIFIER CHAR CMD2 LDA CMDLU ECHO? CPA TTYIN JMP *+4 NO LDA QQCHC YES; GET CHARACTER COUNT, LDB QBUFA AND BUFFER ADDRESS JSB LOUT AND ECHO ON LIST DEVICE LDA QBUFA,I GET 1ST CHARACTER. STA NDATA CLEAR SKIP LEADER FLAG. ALF,ALF AND B177 CPA STAR COMMENT? JMP CMDIN+1 YES LDB CMDLU CPB TTYIN JMP CMD3 YES--COMMAND ID OPTIONAL CPA B55 IS COMMAND ID (-) THERE? RSS JMP CMER NO--PRINT ERROR & SWITCH TO TTY. ISZ QQCNT JMP CMDIN,I CMD3 CPA B55 IS COMMAND ID SUPPLIED? ISZ QQCNT YES--BUMP CHAR. POINTER JMP CMDIN,I TTYIN JSB 104B,I INSTR. FOR KEYBOARD COMMAND INPUT PRDR JSB 101B,Il " " STANDARD " " STAR OCT 52 COMMENT CHARACTER SPC 1 HED SEARCH SYMBOL TABLE FOR MATCH ROUTINE ***** * ** SSTBL ** SEARCH SYMBOL TABLE * CALLING SEQUENCE * * LDA ADDRESS OF 5 CHAR NAME TO MATCH * JSB SSTBL * RETURN1 SYMBOL NOT FOUND * RETURN2 FOUND, LST1-LST5 POINT TO MATCHED ENTRY * * NOTE: THE NAME INPUT FOR MATCH MUST START ON A WORD BOUNDARY ***** SPC 1 SSTBL NOP STB CMDIN SAVE TEMPORARILY JSB LSTI INITIALIZE SYMBOL TABLE SSTB1 JSB LSTP SET LST ENTRY ADDRESSES JMP SSTBL,I END OF TABLE--ERROR RETURN LDB CMDIN RETRIEVE ADDRESS OF TARGET MATCH LDA B,I CPA LST1,I CHARS. 1&2 MATCH? INB,RSS JMP SSTB1 NO--GET NEXT ENTRY LDA B,I CPA LST2,I INB,RSS JMP SSTB1 LDA B,I XOR LST3,I AND UPCM CHECK CHAR. 5 SZA JMP SSTB1 * MATCH FOUND -- MAKE SUCCESS RETURN ISZ SSTBL JMP SSTBL,I * MOVE3 NOP * ***** * ** MOVE. ** MOVE BLOCK OF CHARS FROM INPUT BUFFER (QIBUF) TO A * SPECIFIED LOCATION. STOP AT FIRST DELIMITER. * CALLING SEQUENCE: * * LDA ADDRESS OF DESTINATION * JSB MOVE. * RETURN * ***** MOVE. NOP STA MOVE3 SAVE DESTINATION ADDRESS JSB NXTC GET NEXT NON BLANK CHAR JMP CMER NONE FOUND MOV01 ALF,ALF POSITION CHAR TO LEFT, STA MOVE3,I AND STORE IN OUTPUT BUFFER JSB QGETC GET NEXT CHAR JMP MOV03 END OF LINE CPA B40 BLANK? JMP MOV02 CPA B54 COMMA? JMP MOV02 CPA B51 RIGHT PAREN? JMP MOV02 IOR MOVE3,I PUT LOWER HALF STA MOVE3,I IN BUFFER JSB QGETC GET NEXT CHAR JMP MOV03 END OF LINE CPA B40 BLANK? JMP MOV02 CPA B54 COMMA? JMP MOV02 CPA B51 RIGHT PAREN? JMP MOV02 ISZ MOVE3 BUMP OUTP';<:6UT POINTER JMP MOV01 KEEP GOING MOV02 JSB BAKUP BACK UP OVER LAST CHAR MOV03 LDA MOVE3,I WAS LAST CHAR AND UPCM CPA MOVE3,I AN EVEN NUMBERED CHAR? RSS JMP MOVE.,I NO, BUFFER IS OK IOR B40 NO,APPEND A BLLANK STA MOVE3,I AND STORE IT AWAY JMP MOVE.,I SPC 1 HED *** COMMAND PROCESSORS *** 3<***** * ** TRANSFER COMMAND PROCESSOR * ***** * NDATA NOP * TR LDA TTYIN SWITCH CPA CMDLU INPUT LDA PRDR DEVICE STA CMDLU CLA SET SKIP LEADER FLAG STA NDATA JMP NXTCM AND GET NEXT COMMAND ***** * ** RELOCATE ** SEARCH COMMAND PROCESSORS * ***** RELST CLA,RSS SET SEARCH FLAG OFF. SPC 1 SERST CLA,INA SET SEARCH FLAG ON. SPC 1 STA LIBFL STORE FLAG CLA STA NREC CLEAR #GOOD RECORDS COUNTER STA RIC STA XNAM STA SERNM LDA LOCC HAS LOCC BEEN SET YET? SZA JMP *+5 YES LDA FWAM NO--SET TO FWAM STA LOCC LDA FWABP ALSO SET BASE PAGE STA BPLOC JSB NXTC GET NEXT NON-BLANK CHAR JMP LDRIN NO MORE CPA B50 LEFT PAREND? RSS YES JMP CMER NO--COMMAND ERROR LDA BLANK BLANK OUT XNAM STA XNAM+1 STA XNAM+2 LDA XNAMA JSB MOVE. * JSB NXTC GET NEXT NON BLANK CHAR JMP CMER NO MORE CPA B51 RIGHT PAREN? JMP LDRIN YES JMP CMER NO, ERROR JMP LDRIN XNAMA DEF XNAM LBUFA DEF LBUF ***** * ** DISPLAY COMMAND PROCESSOR * ***** DSPST JSB BLINE BLANK PRINT LINE LDA QQPTR SAVE STA STMP BUFFER LDA QQCNT POINTERS STA SVAL LDA LBUFA MOVE NAME OF ENTITY TO BE DISPLAYED JSB MOVE. INTO THE OUTPUT BUFFER LDA STMP STA QQPTR RESTORE BUFFER POINTERS LDA SVAL STA QQCNT LDA MD11 LDB KTABL JSB SCAN IS THIS A KEYWORD? JMP DSP10 NO, IT MUST BE AN IDENTIFIER CPA D11 UNDEFS? JMP OLSTU CPA D10 TABLE? JMP OLSTE CPA B3 LDB FWAM CPA B4 LDB LWAM CPA B1 LDB FWABP CPA B2 LDB LWABP CPA B5 LDB FWAC L CPA B6 LDB LWAC CPA D8 LDB BPLOC CPA D9 LDB .XFER CPA B7 LDB LOCC GET CURRENT LOCATION COUNTER JMP DSP20 YES SPC 2 DSP10 LDB LBUFA JSB SSTBL SEARCH SYMBOL TABLE JMP DSP30 SYMBOL IS UNDEFINED LDB LST4,I GET VALUE DSP20 LDA LBUF+2 SET EQUAL SIGN(=) IN 6TH CHAR AND UPCM OF PRINT LINE IOR B75 STA LBUF+2 LDA LBUF4 JSB CONV CONVERT THE VALUE TO ASCII LDA D12 DSP25 LDB LBUFA JSB LOUT PRINT THE LINE JMP NXTCM FINISHED, GET NEXT COMMAND DSP30 LDA MD5 MOVE "UNDEFINED" TO LBUF LDB DSP40 JSB MOVEX LBUF4 DEF LBUF+3 LDA D15 JMP DSP25 * DSP40 DEF *+1 ASC 5,UNDEFINED ***** * ** MAP COMMAND PROCESSOR * * LISTO--CORE MAP LISTING FLAG * BIT 0 GLOBAL VARIABLES * 1 MODULES * 2 LINKS * 3 HEADING HAS BEEN PRINTED ***** MAPST LDA LISTO AND D8 STA LISTO MAP1 LDA MD4 LDB MTABL JSB SCAN JMP CMER STA B LDA LISTO CPB B1 MODULES? IOR B2 CPB B2 GLOBALS? IOR B1 CPB B3 LINKS? IOR B4 CPB B4 OFF? CLA RESET POINTER STA LISTO JSB DELIM ADVANCE PAST DELIMITERS RSS JMP MAP1 LDA LISTO SZA,RSS ANY OPTIONS ON? JMP NXTCM NO, GET NEXT COMMAND AND D8 HAS HEADING BEEN PRINTED? SZA JMP NXTCM YES, GET NEXT COMMAND LDA LISTO RESTORE IOR D8 STA LISTO LDA HEAD1 LDB HEAD1+1 JSB 102B,I LDA HEAD1 LDB HEAD2 JSB 102B,I LDA HEAD1 LDB HEAD3 JSB 102B,I JMP NXTCM GET NEXT COMMAND SPC 1 HEAD1 DEC 47 # CHARS. IN EACH PRINT LINE. DEF *+1 ASC 24, PROGRAM ENTRY LOW HIGH LOW HIGH HEAD2 DEF *+P1 ASC 24, MODULE POINT MAIN MAIN BASE BASE HEAD3 DEF *+1 ASC 24, ---------------------------------------------- LISTO NOP LIST OPTIONS FLAG. ***** * ** BOUNDS COMMAND PROCESSOR * ***** BNDST LDA MD6 LDB KTABL JSB SCAN JMP CMER NO MORE KEYWORDS ADA M1 ADA MEMRY COMPUTE ADDRESS STA NCHAR SAVE ADDRESS TEMPORARILY JSB NXTC GET NEXT NON BLANK CHAR JMP CMER CPA B75 EQUAL SIGN? RSS JMP CMER NO,ERROR GOTEQ JSB NSCAN GET OCTAL NUMBER JMP CMER NO MORE CHARS. JMP CMER NOT NUMERIC SSA IS IT POSITIVE OR ZERO? JMP BER1 NO. ISSUE ERROR AND IGNORE. STA NCHAR,I LEGAL ADDRESS, POST VALUE AND JSB DELIM JMP NXTCM JMP BNDST LOOK FOR NEW PARAMETERS SPC 1 BER1 LDB BER2 ISSUE "IL BND" ERROR JSB DIAG JMP NXTCM AND GET NEXT COMMAND * BER2 DEF *+1 DEC 6 ASC 3,IL BND ***** * ** SET COMMAND PROCESSOR * ***** SETST CLA STA STMP LDA M2 LDB LTABL LOCC OR BPLOCC? JSB SCAN JMP SET01 NO, MUST BE SYM TAB ENTRY ADA RBTA YES, SAVE ADDRESS TO STA STMP PUT VALUE INTO JMP SET02 SET01 JSB BLINE BLANK OUT THE BUFFER LDA LBUFA THEN MOVE NAME TO BUF JSB MOVE. FOR LATER CHECKING SET02 CCA LDB TOTBL LOOK FOR "TO" JSB SCAN JMP CMER NOT FOUND, ERROR JSB NSCAN GET VALUE JMP CMER JMP CMER STA SVAL SAVE VALUE LDB STMP IF SYM TAB ENTRY, SZB,RSS JMP SET03 THEN JUMP TO SET03 STA STMP,I ELSE SET VALUE INTO LOCC JMP NXTCM OR BPLOCC AND GET NEXT COMMAND SET03 LDB LBUFA LOOK FOR SYMBOL IN JSB SSTBL SYMBOL TABLE JMP SET04 NOT FOUND LDA SVAL IF FOUND, STA LST4,I STORE VALUE, JMP NXTCM AND GET NEXT COMMAND SET04 LDA LST5 CHECK CMA,INA FOR ADA OPT.3 SYMBOL SSA TABLE JMP LER5 OVERFLOW LDA SVAL STA LST4,I STORE THE VALUE CLA STA LST5,I INITIALIZE LINK POINTER ISZ LST BUMP ENTRIES COUNTER LDB LBUFA LDA B,I STA LST1,I STORE FIRST 2 CHARS INB LDA B,I STA LST2,I STORE SECOND TWO CHARS INB LDA B,I AND UPCM ZER OUT EXT ID NBR STA LST3,I AND STORE FIFTH CHAR JMP NXTCM THEN GET NEXT COMMAND * STMP NOP SVAL NOP ***** * ** LINKS START AT ** COMMAND PROCESSOR * ***** LNKST CCA LDB STABL JSB SCAN LOOK FOR "START" JMP CMER CCA LDB ATTBL JSB SCAN LOOK FOR "AT" JMP CMER JSB NSCAN GET LINK ADDRESS JMP CMER JMP CMER STA LINKA AND SAVE IT JSB NXTC GET NEXT NON-BLANK CHAR JMP CMER CPA B54 IS IT A COMMA? RSS YES, GOOD JMP CMER NO, ERROR JSB NSCAN GET LINK VALUE JMP CMER JMP CMER STA LINKV AND SAVE IT JSB LSTI INITIALIZE SYMBOL TABLE POINTERS LNK01 JSB LSTP ADVANCE TO NEXT ENTRY JMP NXTCM NO MORE, GET NEXT COMMAND LDB LINKA LDA LST4,I CPA LINKV STB LST5,I JMP LNK01 * LINKA NOP LINKV NOP * ***** * ** NXTC ** GET NEXT NON-BLANK CHAR FROM INPUT BUFFER (QIBUF) *CALLING SEQUENCE: * * JSB NXTC * RETURN1 NO MORE NON-BLANK CHARS * RETURN2 GOT ONE, AND IT IS RETURNED IN .A. * ***** NXTC NOP GET NEXT NONN-BLANK CHARACTER. JSB QGETC JMP NXTC,I ERROR RETURN CPA B40 BLANK? JMP *-3 YES ISZ NXTC TAKE NORMAL EXIT JMP NXTC,I MD4 DEC -4 ***** * ** LTG ** LEADER-TRAILER GENERATOR * CALLING SEQUENCE: * * JSB LTG * RETURN * ***** LTG NOP LDA .ABR SET (ABREC) INA  = ADDRESS STA ABREC OF ABREC LDB MD46 SET ABREC+1 CLA TO STA ABREC,I ABREC+46 ISZ ABREC = ZERO INB,SZB JMP *-3 STA ABREC CLEAR ABREC LDA MD46 LDB .ABR JSB PCHX JSB IBUFR JMP LTG,I EXIT. * CKS OCT 0 HOLDS COMPUTED CHECKSUM ABL1 DEF ABREC+2 HOLDS CURRENT BUFFER ADDRESS ABL2 DEF ABREC+2 .ABR DEF ABREC MD46 DEC -46 ***** * ** DIAG ** OUTPUT MESSAGES THAT ARE STORED WITH THE CHAR COUNT * IMMEDIATELY PRECEEDING THE BUFFER. * CALLING SEQUENCE: * * LDB ADDRESS OF BUFFER MINUS 1, WHICH CONTAIN BUFFER LENGTH * JSB DIAG * RETURN * ***** DIAG NOP ENTRY: LDB,JSB LDA B,I INB JSB LOUT OUTPUT DIAGNOSTIC JMP DIAG,I RETURN. * * * DIAGNOSTIC OUTPUT SECTION * LER3 LDB ERR03 MEMORY OVERFLOW JMP ERROR * LER4 LDB ERR04 LINKAGE AREA OVERFLOW JMP ERROR * LER5 LDB ERR05 SYMBOL TABLE OVERFLOW ERROR JSB DIAG PRINT DIAGNOSTIC ABORT LDB RAMSG PRINT MESSAGE JSB DIAG FOR RELOCATION ABORTED CLA STA NDATA CLEAR LEADER ALLOWED FLAG STA UEXFL CLEAR UNDEF EXTERNS FLAG STA NAMR. ALLOW A NAM RECORD STA DIRFL DEFAULT IS FOR FORCED INDIRECT JSB LSTI INITIALIZE SYM TAB POINTERS LOOP1 JSB LSTP GO TO NEXT SYM TAB ENTRY JMP PRCMD,I NO MORE, RETURN (P+1) LDA LST3,I CLEAR AND UPCM EXTERNAL STA LST3,I ID NUMBER JMP LOOP1 DO FOR ALL SYM TAB ENTRIES * RAMSG DEF *+1 OCT 6 ASC 3,REL AB * ERR03 DEF *+1 OCT 6 ASC 3,MEM OV * ERR04 DEF *+1 OCT 6 ASC 3,BPG OV * ERR05 DEF *+1 OCT 6 ASC 3,SYM OV * ERR06 DEF *+1 OCT 6 ASC 3,COM OV * ERR07 DEF *+1 OCT 6 ASC 3,DU ENT * * ILBP LDB ILBP. JMP ERROR ILBP. DEF *+1 OCT 6 ASC 3,IL BPL SPC 2 ***** * ** LOUT ** OUTPUT TO TTY * CALLING SEQUENCE: * * LDA POSITIVE # OF CHARS TO OUTPUT * LDB ADDRESS OF BUFFER * JSB LOUT * RETURN * * NOTE: IF USING ASR33 TTY, COMPUTER WILL HALT (70) WHEN * SWITCHING FROM PUNCH TO KEYBOARD MODE. ***** LOUT NOP STA TMP SAVE (A) LDA ASR33 ARE WE USING ASR33 TTY? SZA,RSS JMP NOT33 NO,DO OUTPUT USKBD HLT 70B YES, HALT IF NOT IN KBD MODE STB TMP2 SAVE (B) CLA,INA WHEN SWITCHING TO KEYBOARD MODE, LDB B40 FORCE A CRLF TO COMPENSATE JSB 102B,I FOR INFO ECHOED WHEN PUNCHING LDB TMP2 RESTORE (B) LDA JMPL AFTER THE SWITCH STA USKBD CLEAR THE HALT LDA HLT.P AND SET HALT FOR STA USPCH SWITCH TO PUNCH MODE NOT33 LDA TMP RESTORE (A) JSB 102B,I DO OUTPUT JMP LOUT,I * HLT.P HLT 7B JMPL JMP NOT33 TMP2 NOP * HED *** ROUTINES FOR PROCESSING RECORDS ****** SPC 2 ***** * ** NAM RECORD PROCESSOR *** RIC = 1 * * THIS ROUTINE IS CALLED TO ASSIGN SPACE FOR A PROGRAM * TO BE LOADED. THE NAM RECORD IS MOVED FROM LBUF TO * NBUF BEFORE THIS ROUTINE IS CALLED. * SPECIAL CONVENTIONS APPLY TO FORTRAN AND ALGOL * PROGRAMS. IN A FORTRAN PROGRAM (IDENTIFIED BY 1 IN * SIGN POSITION OF WORD 7 OF NAM RECORD) THE PROGRAM * LENGTH IN WORD 7 MAY BE GREATER THAN THE ACTUAL LENGTH. * THEREFORE THE UPPER BOUND IS NOT SET UNTIL LOADING * OF DATA BLOCKS. ***** NAMR NOP LDA NBUF+10 CHECK BASE PAGE LENGTH SSA JMP ILBP ILLEGAL BASE PAGE LENGTH(<0) LDB NBUF+11 GET COMMON LENGTH. SZB,RSS JMP NM1 NO COMMON LDA FWAC SZA,RSS JMP NM6 ALLOCATE 1ST COMMON CMA,INA ADA LWAC INA STA COML CMB,INB ADB A CHECK FOR COMMON LENGTH OVERFLOW SSB,)RSS JMP NM1 LENGTH GOOD LDB ERR06 COMMON BLOCK ERROR JMP ERROR SPC 2 NM6 STB COML ALLOCATE 1ST COMMON LDA LOCC MOVE PROGRAM RELOCATION BASE UP. STA FWAC ADA COML STA LWAC INA STA LOCC RESET LOCATION COUNTER NM1 LDA BPLOC SET LOWER BOUND OF BASE PAGE AREA STA BPPTR INITIALIZE BASE PAGE POINTER LDA LOCC SET LOWER BOUND OF PROGRAM AREA STA PAPTR INITIALIZE PROGRAM AREA POINTER LDA FWAC STA COMOR LDA NBUF+9 GET PROGRAM LENGTH STA FTNFL SET FORTRAN LOADING FLAG - BIT 15 CPA M1 ALGOL PROGRAM? JMP NAMR,I YES. LIMITS SET DURING LOADING. * * ALLOCATE BASE PAGE STORAGE * LDA NBUF+10 GET BASE PAGE AGAIN SZA,RSS IF NO BP ALLOCATION, JMP NM2 CHECK FOR PROGRAM ALLOCATION. ADA BPLOC COMPUTE LAST LOCATION & STA B CHECK FOR OVERFLOW ADA M1 CMA,INA ADA LWABP SSA NEGATIVE MEANS OVERFLOW JMP LER4 OF BASE PAGE AREA STB BPPTR SET UPPER LIMIT B. P. * * ALLOCATE PROGRAM AREA STORAGE * NM2 LDA NBUF+9 GET PROGRAM LENGTH SZA,RSS IF PROGRAM LENGTH = 0, JMP NAMR,I LDB FTNFL COMPILER-GENERATED? SSB JMP NAMR,I YES,LIMITS SET DURING DBL PROCESSING ADA LOCC COMPUTE HIGH ADDRESS & STA B CHECK FOR OVERFLOW CMA,INA ADA LWAM SSA NEGATIVE RESULT MEANS OVERFLOW JMP LER3 MEMORY OVERFLOW ERROR STB PAPTR SET UPPER BOUND JMP NAMR,I SPC 1 COML OCT 0 HOLDS INITIAL COMMON LENGTH SPC 2 ***** * ** ENT ** EXT RECORD PROCESSORS * * ENT RECORD PROCESSOR (RIC = 2) * EXT RECORD PROCESSOR (RIC = 4) * * PURPOSE OF THIS SECTION IS TO PROCESS ENTRY POINTS * AND EXTERNAL SYMBOLS, ADD SYMBOLS TO THE * LOADER SYMBOL TABLE, AND *  SET A FLAG IF AN ENTRY POINT FROM A LIBRARY * LOAD MATCHES AN UNDEFINED EXTERNAL SYMBOL. * CONTROL RETURNED FROM THIS SECTION TO -LDRIN-. * * WORDS USED FOR TEMPORARY STORAGE: * * LBUF - RECORD TYPE FLAG: 1 = ENT, 0 = EXT * LBUF+1 - NEGATIVE COUNT OF ENT/EXT ENTRIES IN RECORD. * LBUF+2 - FIRST WORD ADDRESS OF CURRENT ENTRY. ***** EXTR CLA,RSS EXT: FLAG=0 ENTR CLA,INA ENT: FLAG=1 STA LBUF SAVE RECORD TYPE LDA LBUF+1 GET AND ISOLATE AND B77 RECORD ITEM COUNT. CMA,INA SET NEGATIVE FOR STA LBUF+1 COUNTER IN PROCESSING LDA LBUFA SET LBUF+2 = ADDRESS OF ADA B3 FIRST ENTRY STA LBUF+2 IN RECORD JSB LSTI INITIALIZE LST PROCESSOR ENTX1 JSB LSTP SET LST ENTRY ADDRESSES JMP ENTX6 END OF LST - MAKE NEW ENTRY * * CHECK LST AND RECORD ENTRIES FOR MATCHING SYMBOLS * LDB LBUF+2 (B) = RECORD ENTRY ADDR. LDA B,I GET WORD 1 REC. ENTRY, CPA LST1,I COMPARE TO WORD 1 LST ENTRY INB,RSS EQUAL, SET FOR WORD 2. JMP ENTX1 NOT =, CHECK NEXT ENTRY LDA B,I CHECK WORD 2 OF CPA LST2,I THE ENTRIES INB,RSS =, SET FOR WORD 3. JMP ENTX1 NOT =, CHECK NEXT ENTRY. LDA B,I CHECK UPPER CHAR XOR LST3,I IN WORD 3. AND UPCM SZA SKIP IF SYMBOLS MATCH JMP ENTX1 NOT =, CHECK NEXT ENTRY. LDA LBUF IF RECORD TYPE SZA,RSS JMP EXT0 IS EXT, GO POST ORDINAL. * * SYMBOL MATCH IN ENT RECORD * LDA UDFE IS ENT DEFINED? CPA LST4,I JMP ENT21 NO. SET VALUE FROM RECORD. LDB SERFG YES, LOADING FROM LIBRARY SZB JMP ENTX5 IGNORE DUPLICATE FROM LIBRARY. LDB ERR07 JSB DIAG COMPLAIN ABOUT DUPLICATE LDB LBUF+2 LDA B5 PRINT "OFFENDING" ENT SYMBOL JSB LOUT JMP ENTX5 * * ADD ENTRY POINT ADDRESS TO 640 LST ENTRY. * ENT21 CLA CLEAR "LIBRARY LOAD" FLAG. STA SERFG ENT22 LDA B,I GET WORD 3 OF RECORD ENTRY STA LST3,I AND STORE IN LST WORD 3. INB GET WORD 4 OF RECORD ENTRY LDB B,I (ENTRY VALUE). CMB NEGATE TO INDICATE UNRELOCATED STB LST4,I SAVE IN LST FOR LATER ACTION. * * ENTRY FROM INPUT LOADING * * * ADVANCE TO NEXT RECORD ITEM * ENTX5 LDB LBUF+2 GET OLD RECORD ENTRY ADDRESS ADB B3 ADD 3 FOR NEXT EXT ENTRY. ADB LBUF ADD ONE MORE FOR ENT RECORD. STB LBUF+2 SET ADDRESS OF NEXT ENTRY. ISZ LBUF+1 INDEX ENTRY COUNT - JMP ENTX1-1 MORE TO PROCESS. JMP LDRIN FINISHED- GET NEXT RECORD. y6* * NO MATCH IN LST FOR RECORD ENTRY SYMBOL - ADD * NEW ENTRY - CHECK FIRST FOR MEMORY CONFLICT. * OPT.3 NOP END OF MEMORY POINTER. * ENTX6 LDA LST5 CMA,INA ADA OPT.3 SSA JMP LER5 OVERFLOW LDB LBUF+2 (B) = RECORD ENTRY ADDR. LDA B,I MOVE WORDS 1 AND 2 OF RECORD STA LST1,I ENTRY TO WORDS INB 1 AND 2 NEW LST ENTRY LDA B,I (WORD 3 WILL BE SET LATER) STA LST2,I INB (B) = ADDR. OF WORD 3, REC. ENTRY LDA UDFE STA LST4,I DENOTE UNDEFINED. CLA STA LST5,I DENOTE NO LINK ASSIGNED ISZ LSTA,I ADD 1 TO LST ENTRY COUNT. LDA LBUF GET RECORD TYPE FLAG SZA JMP ENT22 ENT; GO POST VALUE. EXT0 LDA B,I GET WORD 3 OF RECORD ENTRY, STA LST3,I STORE TO POST EXT ORDINAL. LDA DIRFL FORCED INDIRECT FLAG 0-FORCED INDIRECT SZA 1-MAKE DIRECT LINK IF YOU CAN JMP ENTX5 NON-ZERO, POSTPONE LINK ASSIGNMENT LDA LST5,I HAS A LINK ALREADY BEEN ASSIGNED? SZA JMP ENTX5 YES, CONTINUE PROCESSING LDA LST4,I NO, ALLOCATE ONE CPA UDFE LINK ROUTINE RECOGNIZES UNDEFINED AS CLA 0 IN .A.(VALUE OF SYMBOL PARAM) JSB LINK ALLOCATE THE LINK STB LST5,I AND UPDATE SYMBOL TABLE JMP ENTX5 THEN CONTINUE JMP ENTX5 GO PROCESS NEXT ITEM. * * ER10 LDB LST1,I MOVE SYMBOL INTO STB ER10B ERROR MESSAGE. LDB LST2,I STB ER10B+1 LDB LST3,I STB ER10B+2 LDB ERR10 JSB DIAG LDA NBUF+2 STORE OPCODE ONLY. JMP DBL3 * ERR10 DEF *+1 OCT 21 ASC 6, UNDEF EXT: ER10B BSS 3 DIRFL NOP DIRECT FLAG, 1=DIRECT OPTION, 0=ALWAYS INDIRECT ***** * ** RELEN ** RELOCATE ENTRY POINT ADDRESS * CALLING SEQUENCE: (B) = UNRELOCATED ENT VALUE * (A)=CONTENTS OF LST3(RELOCATIO+N BASE) * JSB RELEN * RETURN: (A) = LINK ADDRESS, IF ANY * (B) = RELOCATED ENT ADDRESS * * PURPOSE: RELOCATES ENT ADDRESS AS DESIGNATED * BY THE RELOCATION FIELD (R) IN BITS * 00-01 OF (LST3). 0 = PROGRAM, 1 = BASE * PAGE, 2 = COMMON, 3 = ABSOLUTE. * ALSO POSTS VALUE IN LINK TABLE. * BITS 07-00 OF (LST3) ARE CLEARED. ***** RELEN NOP ENTRY/EXIT POINT AND B7 GET R-FIELD ADA RBTO ADB A,I RELOCATE SYMBOL VALUE STB LST4,I POST ENTRY VALUE IN LST. LDA LST5,I GET LINK ADDRESS, IF ANY SZA,RSS IS LINK ASSIGNED? JMP RELEN,I NO. EXIT. ADA BPAGA C174 STB A,I YES. POST VALUE IN LINK TABLE. LDA LST5,I RECOVER LINK ADDRESS JMP RELEN,I EXIT SKP ***** * ** LSTI / LSTP ** SYMBOL TABLE ACCESSING SUBROUTINES * * PURPOSE: TO SET IN WORDS LST1 - LST5 THE * ADDRESSES OF THE FIVE WORDS IN AN * ENTRY IN THE LST (LOADER SYMBOL TABLE) * * INITIAL SETUP IS MADE BY THE ROUTINE * -LSTI- THIS SECTION INITIALIZES * THE NEGATIVE COUNT OF THE NUMBER * OF ENTRIES IN THE LST AND SETS LST5 POINTING TO * THE "-1"TH ENTRY. SPC 1 * THE SECTION -LSTP- SETS THE FIVE * ADDRESSES OF THE NEXT LST ENTRY * IN LST1-LST5. IT ALSO INDEXES THE * ENTRY COUNTER. WHEN THE COUNTER = ZERO * EXIT FROM LSTP IS TO P+1 OF THE CALL * AND LST1-LST5 CONTAIN THE ADDRESSES * FOR A NEW ENTRY. IF THE COUNT AFTER * INDEXING IS NOT ZERO, EXIT IS TO * P+2 OF THE CALL. SPC 1 * CALLING SEQUENCE: (P-1) JSB LSTI * (P) JSB LSTP * (P+1) (END OF LST RETURN) * (P+2) (NEXT ENTRY ADDRESSES * SET RETURN) ;OSPC 2 * - INITIALIZER- SPC 1 LSTI NOP LDA LSTA,I GET NUMBER OF LST ENTRIES - SET CMA NEGATIVE THE VALUE + 1. STA LSTPX STORE LDA LSTA SET ADDRESS+1 OF WORD 1 OF FIRST STA LST5 JMP LSTI,I EXIT SPC 2 * - PROCESSOR - SPC 1 LSTP NOP LDA LST5 INA STA LST1 INA STA LST2 INA STA LST3 INA STA LST4 INA STA LST5 ISZ LSTPX INDEX ENTRY COUNTER. ISZ LSTP NOT END OF LST - SET P+2 EXIT JMP LSTP,I -EXIT- TO P+1 IF END OF LST. SPC 2 * LSTA1 DEF LST+1 LSTA DEF LST DEFINE STARTING ADDRESS OF LST LSTPX OCT 0 HOLDS ENTRY COUNTER(NEG. #+1). LST1 OCT 0 LST2 OCT 0 LST3 OCT 0 LST4 OCT 0 LST5 NOP ******************************************************************** * THE BASE PAGE LINKS TABLE (STORED IN BPAGE) * HAS ROOM FOR 1020 WORDS, CORRESPONDING * TO CORE ADDRESSES(OCTAL) 4-1777. * LOCATIONS 0-1 ARE INACCESSIBLE ANYWAY, AND LOCATIONS * 2,3 ARE RESERVED FOR RTS PROGRAM DESCRIPTION RECORDS. * BSS 4 PROTECT AGAINST FWABP<4 * BPAGE BSS 1020 BASE PAGE LINKS TABLE BPAGA DEF BPAGE-4 OFFSET HED DBL RECORD PROCESSING * DATA BLOCK RECORD PROCESSOR (RIC = 3) SPC 2 * THIS SECTION RELOCATES THE LOAD ADDRESS OF A DATA * BLOCK AND RELOCATES AND STORES THE WORDS IN IT. * * A RELOCATION BYTE IS ASSOCIATED WITH EACH * INSTRUCTION OR DATA WORD IN A DBL RECORD. * THIS 3-BIT BYTE CONTAINS ONE OF THE * FOLLOWING RELOCATION INDICATORS: SPC 1 * 000 - ABSOLUTE * 001 - PROGRAM RELOCATABLE * 010 - BASE PAGE RELOCATABLE * 011 - COMMON RELOCATABLE * 100 - EXTERNAL SYMBOL REFERENCE (NO OFFSET) * 101 - TWO-WORD GROUP. WORD 1 CONTAINS OPCODE, * RELOCATION BYTE FOR OFFSET, AND AN OPTIONAL * EXTERNAL SYMBOL ORDINAL. WORD 2 CONTAINS THE * /b OFFSET (ADDRESS). THE RELOCATION BYTE CAN BE: * 00 - PROGRAM * 01 - BASE PAGE * 10 - COMMON * 11 - ABSOLUTE * * THIS SECTION USES THE RELOCATION BASE * TABLE (RBT) TO RELOCATE THE LOAD * ADDRESS AND DATA WORDS. THE RELOCATION * BASES IN THE RBT ARE SET BY THE NAM * RECORD PROCESSOR. THE TABLE IS STRUCTURED * AS: * RBTA DEF *+1 * RBT OCT 0 (ABSOLUTE) * PREL (PROGRAM ORIGIN - FWA) * BPREL (BASE PAGE ORIGIN (FROM ORB) * COMOR (COMMON AREA ORIGIN) * OCT 0 (ABSOLUTE AGAIN) * * IF A FORTRAN GENERATED PROGRAM IS BEING LOADED, * A CHECK FOR MEMORY OVERFLOW IS MADE BEFORE * EACH DBL RECORD IS PROCESSED. IF OVERFLOW OCCURS, * AN IMMEDIATE TERMINATION OF LOADING IS MADE * BY TRANSFERRING TO THE ERROR ROUTINE. OTHERWISE, * THE NEW FWA OF THE MEMORY AREA IS SET AND * LOADING CONTINUES. THE DBL RECORDS FOR A FTN * OBJECT PROGRAM ARE GENERATED IN ASCENDING * ORDER - I.E. THE LOAD ADDRESS OF EACH DBL RECORD * IS LARGER THAN THE PREVIOUS - AND THE LAST DBL * RECORD LOADED IS THE LAST PROGRAM SEGMENT (I.E., * A BSS DOES NOT FOLLOW) SO THE NEW FWA OF AVAIL. * MEMORY IS KNOWN AFTER THE LAST DBL RECORD IS * PROCESSED. ******************************************************************** SPC 2 ***** * ** DBL RECORD PROCESSOR * ***** SPC 2 DBLR LDA LBUF+1 RELOCATE THE ASR 6 DBL AND B3 LOAD XOR B1 ADDRESS STA QGETC SAVE RELOCATION BASE CODE ADA RBTO LDA A,I NOW GET RELOCATED ADDRESS ADA LBUF+3 AND ADD RECORD RELOCATION STA LBUF STORE RELOCATED RECORD ADDRESS STA ABREC+1 STORE ABSOLUTE RECORD ADDRESS. LDA LBUF+1 GET # OF AND B77 INSTRUCTIONS CMA,INA AND MAKE NEGATIVE STA LBUF+1 STORE INSTRUCTION COUNT * * CHECK FOR MEMORY OVERFLOW OF FTN OR ALGOL PGM * CMA,INA RESET WORD COUNT TO POSITIVE. ADA LBUF ADD LOAD ADDR. TO WORD COUNT. LDB FTNFL FORTRAN OR ALGOL PROGRAM? SSB,RSS JMP DBL0 NO. LIMIT CAME FROM NAM REC. LDB QGETC GET RELOCATION CODE SZB PROGRAM RELOCATION BASE? JMP DBL0 NO, CONTINUE PROCESSING STA PAPTR YES, SAVE HIGH MAIN ADDRESS CMA,INA ADA LWAM SSA A NEGATIVE RESULT MEANS OVERFLOW JMP LER3 AND TERMINATION OF LOADING. DBL0 LDA LBUF5 GET ADDRESS OF WORD 5 OF DBL * RECORD (FIRST RELOC. BYTE WORD) STA LBUF+2 IN LBUF+2. DBL1 LDB LBUF+2,I SET RELOCATION BYTE WORD STB LBUF+3 IN LBUF+3. LDA M5 SET BYTE COUNTER STA NBUF = -5 ISZ LBUF+2 SET ADDRESS FOR FIRST DATA WORD. DBL2 LDA LBUF+3 GET RELOC. BYTE WORD - ROTATE ALF,RAR 3-BIT BYTE FOR NEXT INSTR. TO STA LBUF+3 LOW A AND RESTORE WORD. AND B7 ISOLATE BYTE. CPA B4 IF BYTE = 4, THEN GO TO EXTERNAL JMP DBL4 REFERENCE SECTION. CPA B5 IF BYTE = 5, THEN GO TO 2-WORD JMP DBL6 MEMORY REFERENCE GROUP SECTION. ADA RBTA BYTE = 0-3. ADD ADDR. OF RBT LDA A,I TO BYTE AND GET BASE VALUE. ADA LBUF+2,I ADD DATA WORD TO RELOCATION BASE DBL3 JSB PACK ISZ LBUF+1 INDEX DATA WORD COUNT JMP DBL9 MORE IN RECORD. JSB PUNCH OUTPUT THE ABSOLUTE RECORD. JMP LDRIN PROCESS NEXT INPUT RECORD. * DBL9 ISZ LBUF ADD 1 TO LOAD ADDRESS. ISZ LBUF+2 ADD 1 TO RECORD ADDRESS ISZ NBUF INDEX REL-BYTE COUNTER JMP DBL2 MORE BYTES IN WORD JMP DBL1 GET NEXT BYTE WORD. * * * RELOCATION BASE TABLE ( RBT ) * * THE ORDER OF THESE ENTRIES MUST BE MAINTAINED RBTO DEF LOCC RBTA DEF B0 B0 NOP ABSOLUTE RELOCATION BASE LOCC NOP PRaOGRAM RELOCATION BASE BPLOC NOP BASE PAGE RELOCATION BASE COMOR OCT 0 COMMON RELOCATION OCT 0 ABSOLUTE * * CODE 4: ADDRESSABLE INSTRUCTION OR DEF REFERENCING * AN EXTERNAL SYMBOL (WITHOUT OFFSET). ADDRESSABLES * USE PRIOR LINK AS FIRST CHOICE SO AS TO RE-USE * LINKS OUT OF CURRENT AREA. DEFS USE DIRECT ADDRESS * AS FIRST CHOICE. * DBL4 LDA LBUF+2,I GET INSTR. WORD STA NBUF+2 SAVE IT JSB ORDSR SEARCH FOR EXT ORDINAL LDA NBUF+2 AND C074 GET OPCODE SZA,RSS DEF? JMP DBL45 YES. USE VALUE IF DEFINED. LDB LST5,I GET LINK ADDRESS SZB IS LINK ASSIGNED? JMP DBL46 YES. USE IT. DBL45 LDB LST4,I GET VALUE CPB UDFE DEFINED? CLA,RSS NO. JMP DBL10 YES, LINK MAY NOT BE NEEDED LDB LST5,I GET LINK ADDRESS SZB,RSS IS LINK ASSIGNED? JSB LINK NO. GET ONE. STB LST5,I SAVE LINK ADDRESS. DBL46 LDA NBUF+2 GET INSTRUCTION SSA FORWARD REFERENCES INDIRECTLY TO JMP ER10 EXTERNALS ARE NOT YET SUPPORTED. AND C174 REMOVE EXT ORDINAL IOR C1000 SET FOR INDIRECT IOR B COMBINE ADDRESS JMP DBL3 GO STORE INSTRUCTION * DBL10 CLA STA RTMP1 SET UP RTMP FOR NO LINK CASE JSB SPLIC BUILD INSTR,ALLOC LINK IF LDB RTMP1 NEEDED,AND STORE VALUE SZB (IF NOT ZERO) STB LST5,I IN SYMBOL TABLE ENTRY JMP DBL3 * RTMP1 NOP * ORDSR NOP AND B377 ISOLATE EXT ORDINAL STA NBUF+1 SAVE ORDINAL SZA,RSS EXT PRESENT? JMP ORDSR,I NO. EXIT. JSB LSTI INITIALIZE LST PROCESSOR DBL5 JSB LSTP SET LST ENTRY ADDRESSES. JMP ILEXT ORDINAL MUST EXIST LDA LST3,I GET WORD 3 OF LST ENTRY, ISOLATE AND B377 BITS 07-00, AND COMPARE VALUE TO CPA NBUF+1 SAVED EXT ORDINAL RSS R JMP DBL5 NOT FOUND, KEEP SEARCHING LST LDA LST4,I FOUND SSA,RSS IS IT REALLY AN EXT ID #? JMP ORDSR,I YES, RETURN JMP DBL5 NO, KEEP LOOKING * * CODE 5: 2-WORD GROUP FOR MEMORY REFERENCE OR * EXTERNAL REFERENCE WITH OFFSET. * DBL6 LDA LBUF+2,I GET WORD 1 (OP-CODE,REL. BYTE) STA NBUF+2 SAVE IT RAR,RAR JSB ORDSR ANY EXTERNAL? ISZ LBUF+2 POINT AT OFFSET LDB LBUF+2,I GET OFFSET LDA NBUF+2 GET WORD 1 AND B3 SAVE REL BYTE ADA RBTO ADB A,I RELOCATE OPERAND LDA NBUF+1 SZA,RSS ANY EXTERNAL? JMP DBL62 NO. LDA LST4,I CPA UDFE IS EXTERNAL DEFINED? JMP ER10 NO. COMPLAIN. ADB LST4,I YES, ADD VALUE. DBL62 JSB SPLIC JMP DBL3 STORE IT. ***** * ** SPLIC ** * * THIS ROUTINE COMBINES OPCODES WITH ADDRESSES IN * ADDRESSABLE INSTRUCTIONS. BASE PAGE LINKS ARE USED * AS REQUIRED TO HANDLE PAGE CROSSINGS. ***** SPLIC NOP LDA NBUF+2 RECOVER OPCODE AND C174 STA NBUF+2 SAVE INSTRUCTION RAL,CLE,SLA,ERA IF INSTR IS INDIRECT, SET ADB C1000 INDIRECT BIT IN ADDRESS. SZA,RSS ADDRESSABLE INSTRUCTION? JMP DBL6B NO. GO STORE VALUE. C074 STB A GET OPERAND ADDRESS AND C076 GET PAGE ADDRESS SZA,RSS IN BASE PAGE? JMP DBL8 YES. XOR LBUF COMPARE WITH LOAD ADDRESS AND C076 SAVE MODULE/PAGE ADDRESS. SZA,RSS JMP DBL7 OPERAND IS IN SAME PAGE. LDA B DIFFERENT: (A)_OPERAND ADDRESS JSB LINK GET BASEPAGE LINK STB RTMP1 SAVE LOCATION OF LINK * POTENTIAL LOSSAGE HERE! LDA NBUF+2 (B) =LOCATION OF LINK,(A) = INSTR. IOR C1000 SET INDIRECT BIT DBL6B IOR B COMBINE ADDRESS JMP SPLIC,I * * OPERAND IN SAME PAGE AS INSTRUCTION. * DBL7 LDA B c GET OPERAND ADDRESS AND AMASK ISOLATE PAGE AREA ADDRESS. IOR B2000 SET Z BIT = 1 (CURRENT PAGE) DBL7A IOR NBUF+2 COMBINE OPCODE, IND JMP SPLIC,I * * REFERENCE TO BASE PAGE OPERAND * DBL8 LDA B GET OPND JMP DBL7A * ILEXT LDB ILEX1 OUTPUT "IL EXT" ERROR JMP ERROR * * CONSTANT AND STORAGE SECTION FOR -DBLR-. * ILEX1 DEF *+1 OCT 6 ASC 3,IL EXT ASC 3,IL.EXT M5 OCT -5 B377 OCT 377 AMASK OCT 101777 SAVE INDIRECT C076 OCT 76000 B2000 OCT 2000 LBUF5 DEF LBUF+4 * SKP ***** * ** LINK ** ALLOCATE LINK WORD * * PURPOSE: TO SEARCH BASE PAGE LINK TABLE * FOR AN EXISTING OPERAND ADDRESS MATCHING * THE PARAMETER OPERAND AND TO ALLOCATE * A WORD TO CONTAIN THE OPERAND ADDRESS * IF A MATCH IS NOT FOUND. SPC 1 * THE OPERAND ADDRESS PARAMETER IS STORED * IN THE LINKAGE WORD IF A MATCH IS NOT * FOUND IN THE LINKAGE AREA. SPC 1 * THE OPERAND ADDRESS PARAMETER IS IN * THE A-REGISTER ON ENTRY TO LINK. THE * LOCATION OF THE WORD IN THE LINKAGE * AREA CONTAINING THE OPERAND IS RETURNED * TO THE CALLER IN THE B-REGISTER. * * ENTRY: (A) = OPERAND ADDRESS FOR SEARCH THRU LINKS * TABLE(BPAGE), OR 0 IF VALUE IS UNDEFINED * AND THE ALLOCATION OF A LINK IS TO BE * FORCED. * SPC 2 LINK NOP ENTRY/EXIT POINT STA LINK3 SAVE OPERAND LDB BPPTR GET HIGHET BASE PAGE LOC STION SZA IS THE LINK AREA TO BE SEARCHED? LDB FWABP YES,START AT BOTTOM LINK1 CPB BPPTR HAS ENTIRE LINK AREA BEEN SEARCHED? JMP LINK2 MATCH, GOTO ALLOCATE WORD. LDA B ADA BPAGA LDA A,I GET LINK WORD CPA LINK3 MATCH? JMP LINK,I YES INB JMP LINK1 SPC 2 LINK2 STB A CMB,INB ADB LWABP OVERFLOW? SSB JMP LER4 YES NO LINK ROOM. ADA BPAGA GET ADDRESS IN BASE PAGE LINK TABLE LDB LINK3 STORE VALUE STB A,I IN THERE LDB BPPTR RETURN WITH LINK ADDRESS IN (B) ISZ BPPTR INCREMENT BASE PAGE BOUND JMP LINK,I EXIT WITH LINK ADDRESS IN (B) LINK3 NOP TEMP FOR OPND ADDRESS HED **** RECORD PROCESSING CONTROL ****** ******************************************************************** * THIS SECTION CONTROLS THE INPUT OF OBJECT * PROGRAMS FROM THE STANDARD INPUT AND PROGRAM * LIBRARY DEVICES. THE TRANSFER OF CONTROL TO * THE APPROPRIATE RECORD PROCESSORS IS MADE * FROM THIS SECTION. EACH PROCESSOR (EXCEPT * NAM PROCESSOR) RETURNS TO THE LABEL -LDRIN-. * * INPUT RECORD, LEGALITY CHECK AND CHECKSUM SECTION ******************************************************************** EOFT LDA RIC LEADER? SZA JMP NXTCM TRAILER; END OF FILE LDRIN LDA RIC WAS LAST RECORD AN END RECORD? CPA B5 JMP NXTCM GET NEXT COMMAND INCHK JSB RBIN GET NEXT RELOCATABLE RECORD SZA,RSS EOT? JMP EOFT END OF FILE. RBR,SLB,RBR WAS THERE A MT PARITY ERROR? JMP LER1 YES. RBR,RBR SHIFT THE TIMING BIT TO 0. SLB WAS THERE A MT TIMING ERROR? JMP LER1 YES. * * CHECK RECORD LEGALITY * LDA LBUF+1 GET WORD 2 OF RECORD, ALF,RAR ROTATE RIC FIELD TO AND B7 LOW A AND ISOLATE CODE. STA RIC SAVE CODE FOR PROCESSING. SZA IF RIC = 0, SKIP ADA M6 SUBTRACT 6 TO TEST FOR 1 TO 5. SSA,RSS IF RESULT IS POSITIVE OR JMP LER2 ZERO, ERROR. ILLEGAL RECORD. * * LEGAL RECORD - COMPUTE AND CHECK CHECKSUM * LDA LBUF GET NEG. #DATA WORDS. STA CONV ADA B3 SET UP COUNTER SSA,RSS (PROTECTION AGAINST JMP LER1 LT 4 WORD VRECORD.) STA LBUF SET COUNTER LDB LBUFA SET B = ADDRESS ADB B3 OF WORD 4. LDA LBUF+1 START CKSM WITH I. D. WORD ADA B,I ADD INB REMAINING ISZ LBUF WORDS IN JMP *-3 RECORD - SUM IN A CPA LBUF+2 COMPARE WITH RECORD CHECKSUM JMP LDRC EQUAL, ASSUME RECORD GOOD. SPC 2 * CHECKSUM ERROR SPC 1 LER1 LDB ERR01 CHECKSUM ERROR RSS LER2 LDB ERR02 ILLEGAL RECORD CODE (RIC). JSB DIAG JSB BUMSG BACKUP? JMP ABORT NO, ABORT RELOCATION JMP INCHK YES READ NEXT RECORD * BUASC DEF *+1 OCT 7 ASC 4,BACKUP? ***** * ** BUMSG ** HANDLE RECOVERABLE ERRORS WITH 'BACK UP' OPTION * CALLING SEQUENCE: * * JSB BUMSG * RETURN1 ANSWER WAS 'NO' * RETURN2 ANSWER WAS 'YES' * ***** BUMSG NOP BMSG1 LDB BUASC PRINT JSB DIAG "BACKUP?" LDB QBUFA GET LDA D72 INPUT JSB 104B,I FROM STA QQCHC TTY CLA STA QQCNT RESET COUNTER LDA QBUFA AND RESET STA QQPTR BUFFER POINTER LDA M2 LOOK FOR LDB ATABL "YES" OR "NO" JSB SCAN IS INPUT A KEYWORD? JMP BMSG1 NO,ASK AGAIN CPA B1 ISZ BUMSG YES, EXIT (P+2) JMP BUMSG,I NO, EXIT (P+1) * SPC 2 * PROCESS VALID RECORD LDRC ISZ NREC BUMP COUNT # GOOD RECORDS. LDA RIC (A) = RECORD TYPE LDB SERFG (B) = LIBRARY LOAD FLAG CPA B1 IF RIC = 1, THEN GO TO PROCESS JMP LDRC3 NAM RECORD. SSB,RSS JMP SERJP IF LOADING, CONTINUE PROCESSING CPA B5 IF NOT LOADING, RSS AND IF THIS IS AN END RECORD, JMP INCHK LDA SERNM AND IF THIS IS THE NAMED MODULE SSA IN A SEARCH (NAME) COMMAND JMP NXTCM THEN GET THE NEXT COMMAND JMP INCHpB@ LWAM * CLEAR RTS BP AREA LDA SYMAD GET START OF SYS MEMORY ADA N1 ADJUST FOR LWAM RSS SETA1 LDA TEMP3 DEFAULT TO LWAM STA .MEM4 UPPER LOAD BOUNDS * SET PRIV CHAN IN BP LDA PIOC PRIV. INT CHANNEL STA SETAD,I PUT IN BUFFER LDA DUMMY ADDRESS WHERE TO GO IN BP LDB A JSB SETCR GO SET IT IN BP * GO REL SYS MODULES JSB SPACE NEW LINE LDA P12 PRINT: LDB MES2 "REL SYS MODS" JSB AOTLY,I PRINT * RELOCATE FROM RTS/2100 LOADER LDA LWAM SET START OF INT PROG NAME TBL STA OPT.3 LAST ADDRESS OF LST STORAGE LDA P2 STA .XFER NON ZERO TO LOAD SYS MODULES JSB CLBPL CLEAR BASE PAGE LINKS STA PNAME CLEAR NAME FLAG STA LOCC CLEAR LOCC IN LOADER STA BPLOC SAME FOR BPLOC JSB PRCMD GO RELOCATE SYS MODULES JMP BEGIN ERROR FROM LOADER, TRY AGAIN LDA LOCC UPDATE FWAM STA .MEM3 FWAM LDA BPLOC UPDATE FWABP STA .MEM1 LDA LST STA LSTSV SAVE FOR RELOCATION ERROR LDA UEXFL WERE THERE ANY UNDEFINED? SZA,RSS JMP *+4 NO CONTINUE RELSE LDA ERR33 YES,PRINT: JSB ERROR "ERR AD" JMP BEGIN START RTSGN OVER LDB A$STR JSB SSTBL WAS $STRT LOADED? JMP RELSE NO, ERROR, LDA LST4 YES, GET STARTING ADDRESS LDA A,I STA STRAD SAVE IT FOR CLEAN-UP AT END OF RTSGN LDB A$CIC $CIC NAME JSB SSTBPL WAS $CIC LOADED? JMP RELSE NO, ERROR, START OVER LDA LST4 BUILD A BP LINK FOR $CIC LDA A,I STA SETAD,I OUTPUT BP LINK LDA .MEM1 FOR $CIC LDB A JSB SETCR LDB LST5 LDA .MEM1 STA A$CIA SAVE FOR JSB INSTRUCTION STA B,I ISZ .MEM1 BUMP TO NEXT LINK JMP AGNIO,I YES, GO BUILD I/O TABLES * * * * NUMERICAL INPUT CONTROL * * THE DOCON SUBROUTINE ANALYZES THE INPUT FOR THE * CHANNEL NO., TBG CHANNEL NO., AND LAST * WORD OF AVAILABLE MEMORY. * * CALLING SEQUENCE: * A = MAX NO. OF CHARACTERS PERMITTED IN RESPONSE. * THE SIGN OF A DETERMINES THE CONVERSION FROM * ASCII TO OCTAL (POS.) OR DECIMAL (NEG.). * B = IGNORED * JSB DOCON * * RETURN: * (N+1): CONTENTS OF A AND B ARE DESTROYED. AN INVALID * CHARACTER HAS BEEN DETECTED IN THE RESPONSE, OR * THE RESPONSE CONTAINS AN INVALID NO. CHARACTERS. * THE MESSAGE IS TO BE REPEATED ON RETURN. * (N+2): A = CONVERTED RESULT * DOCON NOP JSB AGETO,I GET OCTAL/DECIMAL, RETURN OCTAL JMP *+4 INVALID DIGIT JSB AGETA,I GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP *+3 YES - CONTINUE JSB INERR INVALID DIGIT ENTRY JMP DOCON,I RETURN ISZ DOCON INCR RETURN ADDRESS LDA OCTNO GET CONVERTED NUMBER JMP DOCON,I RETURN SKP * * INVALID TTY RESPONSE * * THE INERR SUBROUTINE PRINTS THE DIAGNOSTIC FOR INVALID * RESPONSES DURING THE INITIALIZATION SECTION. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INERR * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * INERR NOP LDA ERR10 SET INVALID DEVICE ERROR CODE JSB ERROR PRINT ERROR MESSAGE JMP INERR,I RETURN * * " CLEAR BASE PAGE LINKS * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB CLBPL * * * RETURN: A IS CLEARED, B IS DESTROYED * * CLBPL NOP LDA N1020 CLEAR STA WDCNT BASE PAGE CLA LDB BPAG4 LINKAGE STA B,I AREA INB FOR LOADER. ISZ WDCNT JMP *-3 JMP CLBPL,I ALL DONE, RETURN SKP * * ALPHABETIC INPUT CONTROL * * THE SINIT SUBROUTINE ANALYZES THE RESPONSE FOR THE PROGRAM, * LIBRARY, AND PARAMETER INPUT. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB SINIT * * RETURN: * (N+1): AN INVALID SET OF CHARACTERS (NOT 1(TTY),5(PTR)) * OR NO. OF CHARACTERS HAS BEEN DETECTED. * AFTER PRINTING THE DIAGNOSTIC, A RETURN IS MADE TO * PERMIT THE MESSAGE TO BE REPEATED. THE CONTENTS * OF A AND B ARE DESTROYED. * (N+2): A = ADDRESS OF DESIGNATED INPUT DRIVER * B = DESTROYED * SINIT NOP CLA,INA SET MAX NO. DIGITS FOR GETNA JSB AGETN,I MOVE LBUF TO TBUF JSB AGETA,I GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP *+3 YES - CONTINUE CODIN JSB INERR INVALID TTY RESPONSE JMP SINIT,I RETURN - ERROR LDA TBUF GET 2-CHARACTER CODE CPA TYTYP TYPE = TTY? JMP TYUN YES - UNIT IS TELETYPE CPA PTTYP TYPE = PT READER? JMP PTUN SET UNIT = PT READER JMP CODIN INVALID PT, MT OR TY TYUN LDA DRTTY DRTTY = TTY INPUT DRIVER ADDRESS RSS PTUN LDA DRPTR DRPTR = PT READER DRIVER ADDR PT.DV ISZ SINIT INCR RETURN ADDRESS JMP SINIT,I RETURN * TYTYP OCT 61 PTTYP OCT 65 * MES27 DEF MS27 MES34 DEF SYMES SYMES ASC 6,FWA SYS MEM? MS27 ASC 4,FWA BP? MESS3 DEF *+1 ASC 5,LWA MEM? MESS6 DEF *+1 ASC 5,PRAM INPT?  MES30 DEF *+1 ASC 5,TBG CHNL? A$STR DEF *+1 ASC 3,$STRT A$CIC DEF *+1 ASC 3,$CIC * * ERPNT NOP PRINT CONTENTS OF LBUF LDB PARAD GET ADDRESS OF PARAMETER UNIT CPB DRTTY DEVICE = TTY? JMP *+4 YES - OMIT PRINTING ON TTY LDA PARNO PARNO = PARAMETER RECORD LENGTH LDB ALBUF ALBUF = BUFFER ADDRESS JSB DRKEY,I PRINT PARAMETER RECORD JMP ERPNT,I RETURN HED RTSGN GENERATE I/O TABLES A-29101-60007-1 REV.B ORR * * GENERATE I/O TABLES * * THIS SECTION OF CODE GENERATES THE I/O TABLES * FOR THE SYSTEM. THESE INCLUDE THE EQUIPMENT TABLE (EQT), * STANDARD DEVICE REFERENCE TABLE (DRT), AND INTERRUPT TABLE. * * THE EQT RECORDS HAVE THE FOLLOWING FORMAT: * * N1,DVRN2<,D><,B><,T=> * * N1 = CHANNEL NO. (2 OCTAL DIGITS) * N2 = DRIVER CLASS. CODE (2 OCTAL DIGITS) * D = DMA FLAG (OPTIONAL) * B = BUFFERING FLAG (OPTIONAL) * T = TIME-OUT VALUE TO BE ENTERED * * IF T= IS ENTERED, A VALUE FOR THE DEVICE'S TIME-OUT * CLOCK MUST NEXT BE ENTERED. * THE OPERATOR MUST ENTER A POSITIVE DECIMAL NUMBER * OF UP TO FIVE DIGITS. THIS IS THEN THE NUMBER OF * TIME BASE GENERATOR INTERRUPTS (10 MSEC INTERVALS) * BETWEEN THE TIME IO IS INITIATED ON THE DEVICE AND * THE TIME AFTER WHICH THE DEVICE SHOULD HAVE INTERRUPTED. * IF THE DEVICE HAS NOT INTERRUPTED BY THIS TIME, IT * IS CONSIDERED TO HAVE TIMED-OUT. * * * EACH DRT RECORD CONSISTS OF A 2-DIGIT NO. SPECIFYING THE * CORRESPONDING ENTRY IN THE EQUIPMENT TABLE * AND AN OPTIONAL 1-DIGIT NO. SPECIFYING A * SUBCHANNEL WITHIN THAT ENTRY. FOR EXAMPLE, IN * RESPONSE TO THE MESSAGE: 5 = ?, THE RESPONSE 6 INDICATES THAT * THE LOGICAL UNIT NO. 5 IS TO USE DEVICE 6 IN EQT. * WHEREAS THE RESPONSE 6,2 INDICATES THAT THE * LOGICAL UNIT NO. 5 IS TO USE SUBCHANNEL 2 OF * DEVICE 6 IN EQT. * * * THE INT RECORDS HAVE k`ONE OF THE FOLLOWING FORMATS: * * N1,EQT,N2 * N1,PRG,NAME * N1,ENT,ENTRY * N1,ABS,N3 * * N1 = CHANNEL NO. (2 OCTAL DIGITS - MUST BE IN INCREASING ORDER) * EXCEPTION: IF N1 = 04 (POWER - FAIL), * THIS ENTRY DOES NOT HAVE TO BE IN ORDER. ALSO, * ONLY AN ENT OR AN ABS TYPE ENTRY IS ACCEPTED * FOR N1 = 04. * N2 = EQT NO. * NAME = PROGRAM NAME TO BE SCHEDULED * ENTRY = ENTRY POINT TO WHICH TRANSFER IS TO BE MADE * N3 = ABSOLUTE VALUE (6 OCTAL DIGITS) * * GENIO CLA STA IDNOS ID'S MADE STA STRPN START UP PROGRAM FLAG STA CEQT NOS OF EQT'S STA PROCT NOS OF INT PROG ENTRIES JSB SPACE NEW LINE LDA .MEM3 FWAM STA AEQT EQT STARTING ADDRESS STA PPREL LDA P7 PRINT: LDB MES25 "EQT TBL" JSB AOTLY,I JSB SPACE NEW LINE * SEQT JSB SPACE LDA CEQT EQT COUNT INA LDB MES6A STUFF INTO PRINT BUFFER JSB STFNM LDA P9 PRINT: LDB MES6 "EQT XX =?" JSB AREAD,I AND INPUT DRIVER REQUEST LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA PTERM CHARS= END ? JMP SSQTI YES, TRY TO END CPA REQT REPEAT? JMP GENIO YES * JSB GINIT INITIALIZE BUFFER SCAN LDA P2 JSB GETOC GET 2 OCTAL DIGITS, CONVERT JMP IOERR INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP CLDBU YES - SET CHNL NO., CLEAR D,B,U IOERR LDA ERR24 SET CODE = INVALID CHNL IN EQT JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * DVERR LDA ERR25 SET CODE = INVALID DRIVER NAME JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * CLDBU LDB OCTNO GET I/O CHANNEL NO. STB IOADD SET I/O ADDRESS ADB N8 IS CHANNEL EQ. LESS SSB,RSS "w THAN 10? JMP GOOD NO-CONTINUE ADB P4 YES--TEST=4 SZB SC FOR POWER FAIL? JMP IOERR NO, CHANNEL ERROR GOOD CLA STA TIMWD CLEAR TIME WORD STA IODMA CLEAR DMA FLAG STA IOBUF CLEAR AUTOMATIC BUFFERING FLAG ISZ CHNGE NEED TO RESET ENTRY POINT NAMES?? JMP NORM LDA CDEC FETCH ASCII C. STA ASCDR+1 RESET COMP NAME ADA B3000 CREATE ASCII I. STA ASIDR+1 RESET INIT. NAME NORM CCA STA TFLAG CLEAR TIME-OUT FLAG LDA N2 JSB GETNA MOVE TWO CHAR TO TBUF CPA CHADV CHAR=DV RSS YES CONTINUE JMP DVERR INVALID DRIVER NAME CLA,INA SET UP FOR CALL TO GETNA JSB GETNA MOVE CHAR 3 TO TBUF CPA CHA.R CHAR=R JMP STYPE YES GET DRIVER NAME IOR C0 OR IN C-BLANK STA ASCDR+1 SET UP ENTRY POINT NAME ADA B3000 SET UP IYXX STA ASIDR+1 SET ENTRY POINT NAME CCA SET ENTRY POINT RESET FLAG STA CHNGE * STYPE LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF STA ASTYP SAVE 2 ASCII CHARS FOR I.XX,C.XX STA ASCYP SAVE FOR C.XX COMPARE CCA ADA CURAL ADJUST CURRENT LBUF ADDR STA CURAL RESET CURAL TO CONVERT TYPE LDA P2 JSB GETOC GET 2 OCTAL CHARS, CONVERT JMP DVERR INVALID DRIVER NAME LDB OCTNO GET DRIVER TYPE BLF,BLF ROTATE TO UPPER B STB IOTYP SET DRIVER TYPE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP LISCN SCAN FOR I.XX, C.XX CPA BLANK CHAR = COMMA? RSS YES - CONTINUE JMP DVERR NO - INVALID DRIVER NAME * CCA STA DFLAG SET DMA-IN FLAG STA BFLAG SET BUFFERING-IN FLAG * INDBU CCA STA CMFLG SET COMMA FLAG = NO COMMA IN JSB GETAL GET NE`XT CHAR FROM LBUF CPA CHARD CHAR = D? JMP SEDMA YES - SET DMA CODE CPA CHARB CHAR = B? JMP SETBU YES - SET BUFFERING CODE CPA CHART CHAR = T? JMP SETIM YES - SET TIME-OUT FLAG UNERR LDA ERR10 SET CODE = INVALID D,B,T JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD SETIM ISZ TFLAG SKIP - FIRST T ENTERED JMP UNERR DUPLICATE T'S ENTERED JSB GETAL GET NEXT CHAR CPA AEQUL IS IT "=" ? RSS YES ACCEPT TIME VALUE JMP UNERR NO, ITS AN ERROR LDA N5 5 CHAR VALUE JSB GETOC FETCH TIME OUT TIME JMP UNERR NUMBER IS NO GOOD SZA WAS ZERO INPUT? CMA ONE'S COMPLEMENT FOR THAT RTS STA TIMWD SAVE FOR OUTPUT EQTST JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP LISCN SCAN FOR I.XX, C.XX CPA BLANK CHAR = COMMA? JMP INDBU YES - GET NEXT D,B,U, ENTRY JMP UNERR NO - INVALID D,B,U CHARACTER * SEDMA ISZ DFLAG SKIP - FIRST D ENTERED JMP UNERR DUPLICATE D'S ENTERED LDA MSIGN SET BIT 15 = 1 FOR DMA FLAG STA IODMA SET DMA CODE JMP EQTST TEST FOR NEXT OPERAND * SETBU ISZ BFLAG SKIP - FIRST B ENTERED JMP UNERR DUPLICATE B'S ENTERED LDA BIT14 SET BIT14 = 1 STA IOBUF SET AUTOMATIC BUFFERING CODE JMP EQTST TEST FOR NEXT OPERAND * LISCN LDB ASIDR ADDRESS OF I.XX BUFFER JSB SSTBL IS IT IN THE SYMBOL TABLE? JMP DVERR NO LDA LST4 YES, GET THE ADDRESS LDA A,I STA I.XX SAVE FOR OUTPUT LDB ASCDR ADDRESS OF C.XX BUFFER JSB SSTBL IS IT IN SYMBOL TABLE? JMP NOCXX NO, USE ADDRESS OF I.XX LDA LST4 YES, GET ADDRESS LDA A,I STCXX STA C.XX SAVE DRIVER EXIT POINT * LDB ALBUF CLEAR OUTPZUT BUFFER JSB BUFCL OCT 0 LDA IODMA GET DMA CODE IOR IOBUF ADD BUFFERING CODE IOR IOADD ADD CHANNEL NO. STA LBUF+3 OUTPUT BUFFER LDA I.XX STA LBUF+1 INT. ADDRESS LDA C.XX STA LBUF+2 COMPLETE ADDRESS * LDA IOTYP GET EQUIPMENT TYPE CODE AND M7000 ISOLATE UPPER 7 BITS SZA SKIP - TYPE = 0,I CLA,RSS SET STATUS = 0, SKIP LDA BLANK SET STATUS = 40(8) IOR IOTYP ADD EQUIPMENT TYPE CODE STA LBUF+4 LDA TIMWD WAS A TIME INPUT ? SZA STA LBUF+13 YES, SAVE IT IN EQT LDA PPREL GET CURRENT EQT ADDRESS LDB A ADB P14 ADDRESS OF END OF EQT STB PPREL JSB SETCR OUTPUT IN ABS ISZ PPREL BUMP TO NEXT EQT ENTRY ISZ CEQT INCR EQT ENTRY COUNT JMP SEQT PROCESS NEXT EQT RECORD * SPC 1 NOCXX LDA I.XX C.XX NOT FOUND SO USE JMP STCXX I.XX ADDRESS * SSQTI LDA CEQT ANY EQT'S BEEN LOADED? SZA JMP SSQT YES, CAN END LDA ERR10 NO,AT LEAST ONE REQUIRED JSB ERROR PRINT: "ERR PA" JMP SEQT START OVER * * * * SET DEVICE REFERENCE TABLE (SQT) * SSQT JSB SPACE NEW LINE LDA CEQT GET NO. OF EQT'S ALF MULT X16 LDB CEQT NO. OF EQT'S CMB,INB ADA B SUB. FOR X15 ADA .MEM3 ADD ORIG REL ADDRESS STA PPREL UPDATE REL ADDRESS STA ASQT SAVE SQT ADDRESS CLA,INA STA CSQT SET SQT COUNT = 1 LDA P13 LDB MES26 MES26 = ADDR: *DEV REF TABLE JSB AOTLY,I PRINT: * DEVICE REFERENCE TABLE * DEVRE LDA CSQT GET CURRENT DEV REF NO. LDB MES28 JSB STFNM STUFF NUM IN BUFFER JSB SPACE NEW LINE LDA P11 LDB MES28 MES28 = ADDR: XX = EQT #? JSB 6kAREAD,I GET SQT RECORD FROM TTY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA PTERM CHARS = /E? JMP SINTI YES - SET INTERRUPT TABLE CPA RDRT REPEAT DRT? JMP SSQT YES, START OVER CPA REQT REPEAT EQT? JMP GENIO YES, GO BACK JSB GINIT RE-INITIALIZE LBUF SCAN LDA N3 JSB GETOC GET 2 DECIMAL DIGITS, CONVERT JMP DRERR INVALID DIGIT ENTERED STA TEMPL SAVE DEV. REF. NO. SZA,RSS IF NO CHANNEL JMP NOSUB IGNOR SUBCHANNEL LDA CMFLG COMMA ENCOUNTERED? SZA YES - GO GET SUBCHANNEL JMP NOSUB NO - DEFAULT IT TO ZERO INA JSB GETOC GET ONE OCTAL DIGIT JMP DRERR JSB GETAL GET NEXT CHAR CPA ZERO END OF BUFFER? RSS YES JMP DRERR NO, SHOULD BE BUT ISN'T LDA OCTNO GET SUB CHANNEL RSS SKIP OVER DEFAULT NOSUB CLA DEFAULT TO ZERO STA TEMPS SAVE SUB CHANNEL ALF,ALF SET SUBCHANNEL NO. ALF,RAR INTO BITS 13 - 11 STA TEMPH SAVE SUBCHANNEL NO. LDA TEMPL GET DEV. REF. NO. CMA,INA COMPLEMENT ADA CEQT ADD NO. EQT ENTRIES SSA SKIP IF VALID DEV. REF NO. JMP DRERR INVALID DEV. REF. NO. (NO EQT) LDA TEMPL GET DEV. REF NO. LDB CSQT GET CURRENT SQT NO. CPB P1 FIRST ENTRY? RSS YES - CONTINUE JMP SETQT PUT OUT DEV REF NO. TO SQT SZA,RSS SKIP IF DEV REF IS NOT ZERO JMP DRERR INVALID DEV. REF. NO. CMA,INA COMPLEMENT CURRENT DEV. REF. NO. LDB AEQT GET ADDRESS OF EQT INA,SZA,RSS SKIP - DEV. REF. NOT 1 JMP *+4 SET TTY CHANNEL NO. = FIRST EQT ADB P15 ADJUST CURRENT EQT ADDRESS INA,SZA SKIP - EQT FOUND JMP *-2 CONTINUE CURRENT EQT SEARCH  STB LBUF+1 SET EQT ADDR IN TTY CHANNEL LDA TBCHN TBG CHANNEL STA LBUF PUT IN OUT PUT BUFFER LDA TBG ADDRESS WHERE TO GO LDB SYSTY JSB SETCR OUTPUT IN ABSOLUTE * SETQT LDA TEMPL GET DEV. REF. NO. IOR TEMPH SET IN SUBCHANNEL NO. STA LBUF FOR OUTPUT LDA PPREL ABS ADDRESS LDB A JSB SETCR GO BUILD ABS DATA ISZ PPREL INCR CURRENT RELOC ADDRESS ISZ CSQT INCR CURRENT SQT COUNT JMP DEVRE GET NEXT SQT ENTRY DRERR LDA ERR27 SET CODE = INVALID DEV. REF. NO. JSB ERROR PRINT DIAGNOSTIC JMP DEVRE REPEAT INPUT * TEMPL NOP TEMPH NOP TEMPS NOP * SINTI LDA CSQT HAVE ANY DRT'S BEEN ENTERED? ADA N1 STA CSQT SSA,RSS JMP SINTT YES, GO TO INT PROCESSING JMP DRERR NO, ERROR , START OVER * SKP * ROUTINE TO INPUT TO BUFFER FROM TTY * * READ NOP JSB LOUT LDA WONLY WRITE ONLY FLAG SZA,RSS WRITE ONLY REQUEST? JMP *+4 NO CLA STA WONLY CLEAR WONLY JMP OTNLY,I LDA P64 LDB ALBUF GET ADDRESS OF LBUF JSB PARAD,I ENTRY FROM TTY SZA,RSS SKIP - DATA INPUT JMP *-4 REPEAT INPUT STA PARNO INA CLE,ERA ADA ALBUF BUILD ADDRESS OF NEXT CLB STB A,I RESTOR WITH BLANK (0) JSB ERPNT CHECK FOR ECHO OF INPUT JSB GINIT INITIALIZE LBUF SCAN JMP READ,I RETURN * * * * OUTPUT ONLY ROUTINE * OTNLY NOP STB WONLY SET THE WRITE ONLY FLAG JMP READ+1 * HED RTSGN I/O TABLE GENERATION ROUTINES A-29101-60007-1 REV.B * * GET CHAR FROM LBUF, RETURN IN A * * THE FOLLOWING SUBROUTINE SUPPLIES THE CHARACTERS FOR * GETNA AND GETOC. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB G)B@ OR = CURRENT TIME FSB TSTIM SSA JMP INSRT ENTRY TIME < CURRENT TIME ORDR2 DLD TMPAR ENTRY TIME > CURRENT TIME FSB ENPTR,I SSA JMP INSRT GIVEN TIME < ENTRY TIME JMP NEXT GIVEN TIME > OR = ENTRY TIME ORDR1 DLD ENPTR,I FSB TSTIM SSA JMP ORDR2 ENTRY TIME < CURRENT TIME JMP NEXT GIVEN TIME > CURRENT TIME * ** HERE TO INSERT NEW ENTRY AT TSPTR * INSRT DLD TMPAR SET UP DST TSPTR,I TIME PART OF ENTRY LDB TSPTR ADB B2 SET UP LDA SNPAR SEQUENCE NUMBER STA 1,I PART OF ENTRY LDA TSNXT UPDATE STA 1 TSNXT POINTER ADA B3 STA TSNXT CPB TSPTR CHECK IF NEW ENTRY NEXT TO EXEC RSS YES JMP INSR1 NOS MAKE TRAP ENTRY NOW * ** HERE IF NEW ENTRY WILL EXECUTE NEXT * DLD TSTIM GET NEW FSB TSPTR,I MINUS TIME TILL NEXT EXECUTION SZA,RSS IF TO GO NOW, JMP INSR3 ALLOW TSCNT TO BE ZERO SSA IF POSITIVE JMP INSR3 FSB FLDAY SUBTRACT ONE DAY INSR3 DST TSCNT THEN SET UP COUNTER WITH NEW VAL * ** HERE TO MAKE TRAP TABLE ENTRY * INSR1 LDA SNPAR JSB FINDS DOES A TRAP ENTRY ALREADY EXIST JMP INSR2 NO, MAKE ONE LDB TRPTR YES, SET ENABLE BIT INB  LDA 1,I IOR BIT15 STA 1,I JMP BSCED,I RETURN INSR2 LDA SNPAR SET UP STA SEQNO SEQUENCE NUMBER CLA STA TRPNO TRAP NUMBER (DEFAULT = 0) LDA D99 STA PRINO PRIORITY (DEFAULT = 99) JSB TRMAK MAKE TRAP TABLE ENTRY RSS NO ROOM JMP BSCED,I DONE, RETURN LDA AD2 JSB BSERR JMP BSCED,I TRNOE LDA AD5 TIME SCHED TABLE FULL JSB BSERR JMP BSCED,I SKP ***** * ** TIMCK ** ROUTINE TO CHECK TIME SCHED TABLE * * JSB TIMCK * RETURN * ***** * TIMCK NOP JSB TIME SAVE DEF *+2 DEF TIMT1 CURRENT TIME TIMC3 FSB TSTIM GET-TIME ELAPSED FROM LAST CHECK SSA,RSS CORRECT JMP TIMC4 FOR CHANGE FAD FLDAY OF DAY TIMC4 FAD TSCNT UPDATE SECONDS TO EXECUTION DST TSCNT SSA,RSS HAS THAT TIME ELAPSED? JMP TIMC1 YES DLD TIMT1 NO, UPDATE TIME OF LAST CHECK DST TSTIM JMP TIMCK,I AND RETURN * ** HERE IF TASK AT TOP IS TO BE SCHEDULED * TIMC1 LDB TSNXT ADB M1 LDA 1,I GET SEQ NBR ADB M2 BACK UP TSNXT TO STB TSNXT DELETE ENTRY JSB FINDS LOOK FOR ENTRY WITH THAT SEQ NBR JMP TIMCE NOT FOUND LDB TRPTR LDA 1,I FOUND, IOR BIT15 SET TRAP BIT STA 1,I STA TRFLG SET UP TO POLL TABLE * ** HERE TO SET UP NEXT ENTRY * LDB TSNXT SET POINTER ADB M3 TO NEXT STB TSPTR ENTRY DLD TSTIM USE OLD VALUE OF CURRENT TIME FSB TSPTR,I SINCE THIS TASK MAY HAVE TO BE SSA EXECUTED NOW ALSO JMP TIMC2 FSB FLDAY IF POSITIVE, SET UP FOR TOMORROW TIMC2 DST TSCNT SET UP NEW COUNTER DLD TIMT1 GET REAL CURRENT TIME VALUE JMP TIMC3 AND TRY AGAIN TIMCE LDA AD6 JSB BSERR JSB .STOP SKP ******************* PRIORITY STACK ************** * PRSTK DEF *+1 POINTER TO FIRST ENTRY D100 DEC 100 FIRST ENTRY IS PRIORITY 100 BSS 21 ALLOW 21 ACTUAL ENTRIES PREND DEF * POINTER TO END OF STACK AREA+1 TRPRI NOP POINTER TO TOP ENTRY ON STACK * ************************************************** ****************** TIME SCHED TABLE ************* * * WORD 1&2: FLOATING POINT TIME (SEC) * * WORD 3 SEQUENCE NUMBER * TSTBL DEF *+1 POINTER TO BEGINNING OF TABLE BSS 48 ALLOW 16 ENTRIES TSEND DEF * POINTER TO END+1 OF TABLE TSPTR NOP GENERAL USE TABLE POINTER TSNXT NOP POINTER TO NEXT FREE ENTRY TSTIM BSS 2 TIME OF LAST UPDATE OF TIME SCHD TSCNT BSS 2 -# SECONDS TILL SCHED NEXT TASK * * ********************************************************* SKP **************************************************** * **************** CONSTANTS ************************* SCHED DEC 5 ASC 3,SCHED BSCT2 NOP TEMPORARY LYNNO NOP CONTENT OF .B. IN TRAP CALLS TFLAG NOP =-1 IF GIVEN SEQ NBR NEGATIVE ENPTR NOP POINTER TO NEXT ENTRY (IN TIMCK) SNPAR NOP TIMT1 BSS 2 TEMPORARY FLDAY DEC 86400. FLOATIN POINT # SEC IN DAY F.100 DEC 100. F.60 DEC 60. TMPAR BSS 2 WHOLE BSS 2 HHMM BSS 2 HH BSS 2 MM BSS 2 SS BSS 2 MAXNG EQU MNEG MAXIMUM NEG FLOAT PT NBR B2 EQU .2 B3 EQU .3 .5 DEC 5 D99 DEC 99 AD2 DEF .2 AD3 DEF .3 AD4 DEF .4 AD5 DEF .5 AD6 DEF .6 **************************************************** SKP **************************************************************** * * * RTE-B TIME STATEMENT * * **************************************************************** * * * *THIS ROUTINE IS A FORTRAN AND BASIC CALLABLE ROUTINE THAT *RETURNS THE TIME OF DAY IN FLOATING POINT SECONDS TO THE *NEAHFBREST 100 MS (OR TENTH OF A SECOND).THE VALUE OF ZERO *REPRESENTS MIDNIGHT. * * JSB TIME ASSEMBLY LANGUAGE * DEF *+2 * DEF TI * * 100 TIME(T) BASIC * * ON RETURN A/B=TIME IN TENS OF MS * * * TM BSS 1 TIME NOP JSB .ENTR DEF TM DLD $TIME GET TIME FROM SYSTEM CLE CLEAR FOR ADD ADA PRS1 CONVERT TO POSITIVE 24HRS SEZ INB ADB PRS2 DIV .6000 A=MINS,B=SECS STA MINS ASR 16 POSITION FOR DIV DIV D100 A=SECS,B=10S OF MS STB MS10 FLT DST TM,I TEMPORARY TIME LDA MINS FLT FMP F.60 MINS IN SECONDS FAD TM,I DST TM,I LDA MS10 MS IN SECONDS FLT FDV F.100 FAD TM,I DST TM,I JMP TIME,I RETURN * .6000 DEC 6000 PRS1 OCT 153000 PRS2 OCT 203 MS10 BSS 1 MINS BSS 1 END .H  29102-80004 B S P0222 RTE-B SYSTEM SUPERVISOR BSUPV             H0102 ASMB,R,L,C,F HED BSUPV---BASIC SUPERVISOR A-29102-60004-1 REV. B NAM BSUPV,7 29102-60004 REV. B ****************************************************** * * BSUPV * * LIST: A-29102-60004-1 * SOURCE: 29102-80004 REV.B * RELOC: 29102-60004 * ****************************************************** * * ENT INIT,GTLYN ENT SWLST,LYNCK,LYNC1,LSTIT ENT CHAR,CHARN,DELM,CRLF,ATEMP ENT PGOLM,LIMCK,LOLIM,HILIM,CKLLN,INTIN ENT SWDEV,XQCMD ENT ONS,FROMS,ABREV,XSYNF ENT SCR,FRMTO ENT LSTR,PLSTA,LOKCK,CRLF1 * EXT PROGF,PROGL EXT INBAD,INCNT,BLANK,TYPE,GTCHR EXT LISTA,LISTR,LINE,MFASE,SBUFA EXT .BUFA EXT TFLAG,LIST EXT INDCK EXT PRNIN,TSTIT EXT TBSRH,TBLPT,LNGTH EXT DIGCK,INTCK EXT FNDPS EXT DRQST EXT SYE25,CALER,INVSC EXT MAXSN EXT .1,.2,.3,.7,.10,.32,.48 EXT M1,M2,M3,M8 EXT DEVCT,SETLP * ******************************************************* * ** LOKCK ** DUMMY VERSION, TYPE M, ONE EACH * LOKCK NOP JMP LOKCK,I * ******************************************************* SKP * ************************************************** * * START APPROPRIATE PHASE OF BASIC * ************************************************** * ** INIT JSB RTINT SET UP FWAM,LWAM FOR RTE TYPE SYSTEMS LDA KEYIA INITIALIZE INPUT DEVICE STA READR TO KEYIN DEVICE LDA BUFA STA .BUFA INIT TTY BUFFER POINTER LDA LWAM JSB INDCK STA LWAM ADA M110 STA SBUFA INIT SYNTAX BUFFER POINTER JSB PRNIN INITIALIZE OUTPUT BUFFER POINTER PATCH JMP SETUP BECOMES "STF 0" JSB EFASE EXECUTION PHASE? RSS NO JMP MFASE YES LDA M8 STA TFLAG LOKCK THROW OUT OPERATOR INPUT LDB RDYA JSB DSPLY DISPLAY "READY"  JSB CRLF GTLYN LDA .32 INITIALIZE STA BLANK DELETE CHARACTER FOR GETCR JSB LINE ACCEPT A BASIC LINE JMP GTLYN * SKP * * ONCE ONLY CODE FOLLOWS - AREA THEN USED FOR I/O BUFFER * SETUP LDA FWAM JSB INDCK STA FWAM LDB PROGF CPB PROGL START ADDR=END ADDR? JMP SCRCH YES, SET BOTH TO FWAM, INFORM USER CMA,INA ADA PROGF SSA PROGF < FWAM? JMP SCRCH YES LDA PROGL CMA,INA ADA LWAM SSA PROGL >= LWAM? JMP SCRCH YES ITSOK SSB ADDRESS NEGATIVE? JMP SCRCH YES, GO TXPE "SCR" CPB PROGL HAS LAST LINE BEEN DONE? JMP GOMAN YES, GO TYPE "READY" LDA 1 INCREMENT LINE'S ADDRESS INA BY LENGTH OF LINE ADB 0,I TO GET NEXT LINE ADDRESS LDA 0,I CHECK LINE LENGTH ADA M3 SSA WAS INCREMENT POSITIVE? JMP SCRCH NO ADA M110 SSA WAS INCREMENT REASONABLE? JMP ITSOK YES SCRCH JSB SCR GOMAN LDA PAT STA PATCH FROM SETUP ON IS ONCE-ONLY CODE LDA SETLP STA LPCNT SET UP NBR OF LINE PRTR COLUMNS JMP PATCH * PAT NOP BSS SETUP+37-* 37TH WD OF I/O BUFFER HERE * * END OF ONCE ONLY CODE * SKP * *************************************************** * * SETUP FOR I/O, SWITCH TO REQUESTED ROUTINE * * CALL SEQ: JSB SWLST * DEF (ROUTINE ADDR) * RETURN: P+2: NORMAL EXIT * **************************************************** * SWLST NOP LDA LISTA SOURCE POINTER LDB LISTR DEST POINTER JSB MOVE SAVE PREVIOUS LIST DEVICE STATUS LDA SWLST,I SOURCE POINTER JSB INDCK LDB LISTA DEST POINTER JSB MOVE POST NEW LIST DEVICE STATUS LDA SPTR,I GET OUTPUT FUNCTION CODE STA CRLF1 INITIALIZE FUNCTION WORD PARAMS STA LYNC1 ISZ SPTR POINT AT SUBROUTINE ENTRY LDA SPTR STA LISTR PUT LIST SUBRTN PTR IN LISTR ISZ SWLST SKIP OVER PARAM JMP SWLST,I * MOVE NOP ADA M3 ADB M3 STA SPTR STB DPTR LDB M2 LDA SPTR,I STA DPTR,I ISZ SPTR ISZ DPTR INB,SZB JMP *-5 JMP MOVE,I * SKP * **************************************************** * * CHECK LINE POSITION & DO ASCII OUTPUT * * CALL SEQ: JSB LYNCK * RETURN: P+1: COMPLETION * *************************************************** * LYNCK NOP STA TEMPA STB TEMPB LDA LYNCK ASSUMES JSB LYNCK FOLLOWS ENTRY ADA M2 TO OUTPUT ROUTINE STA *+2 PASS DEVICE STATUS TO SWLST JSB SWLST BSS 1 UPDAT LDA TEMPA CMA,INA ADA TYPE STA TYPE UPDATE CARRIAGE POSITION CLA JSB TSTIT SZA,RSS DID TSTIT DO CR-LF? JMP UPDAT YES LDA TEMPA LDB TEMPB JSB DOIO LYNC1 BSS 1 SET UP BY SWLST JMP LYNCK,I * *************************************************** * * LSTIT IS AN ASC OUTPUT ROUTINE SWITCH * PLIST WILL START IC TO ASC CONV IN BASIC * ************************************************** * LSTIT NOP JSB LSTR,I DO LISTING TASK JMP LSTIT,I & RETURN * PLIST NOP LDA PLIST SET UP RETURN STA LIST LDA LSTAD JSB INDCK ADA .2 STA PLIST LDA HILIM PASS LIMITS LDB LOLIM JMP PLIST,I GOTO LIST+2 * * SKP ***************************************************** * * CHAR WILL FETCH THE NEXT INPUT CHAR * CHARN WILL FETCH THE NEXT NON-BLANK CHAR * ***************************************************** * CHAR NOP LDA .10 SET UP FOR STA BLANYK FIXED FORMAT SCAN JSB CHRIN GET INPUT JMP CHAR,I * CHARN NOP LDA .32 SET UP FOR STA BLANK FREE FORMAT SCAN JSB CHRIN GET INPUT JMP CHARN,I * CHRIN NOP CHRN1 JSB GTCHR FETCH NEXT CHAR STA ATEMP CPA .10 EOF? JMP CHRN2 JSB DELM NO, DELIMITER? JMP CHRIN,I YES, IGNORE CLB NO, CLEAR STB CONT. CONT. FLAG JMP CHRIN,I & RETURN CHRN2 LDB CONT. YES, IS CONT. SZB,RSS ENABLED ?? JMP CHRIN,I NO, RETURN LDA M2 YES, GIVE 2 LDB BLNKA BLANKS JSB DSPLY & JSB DRQST GET MORE INPUT JMP CHRN1 * SKP * **************************************************** * * DELM WILL TEST FOR A DELIMITER * **************************************************** * DELM NOP CPA .32 BLANK ? JMP DELM,I YES, P+1 RETURN CPA O54 COMMA ? JMP DELM1 YES ISZ DELM NEITHER, TAKE JMP DELM,I P+2 RETURN DELM1 ISZ CONT. INSURE CONT. FLAG IS ON JMP DELM,I (FOR INPUT OUTSIDE OF CHRIN) * ************************************************ * * DO CARRIAGE RETURN, LINE FEED OUTPUT * ************************************************ * CRLF NOP USED AS FLAG BY "LIST" IN BASIC LDA M2 LDB RDYA CPA CRLF1 KLUDGE TO ALLOW BLOCKING UP JMP LYNC1,I OUTPUT, THIS DOES FLUSH JSB DOIO DO CARRIAGE RETURN, LINE FEED CRLF1 BSS 1 SET UP BY SWLST CLA STA TYPE DENOTE NEW LINE JMP CRLF,I * SKP * ****************************************************** * * FIND REQUESTED PROGRAM CORE LIMITS * * CALL SEQ: (A)=NEXT CHAR * JSB PGOLM * RETURN: P+1: EOF DETECTED * P+2: MORE INPUZT TO COME * (A)=NEXT CHAR * LOLIM=LOW CORE LIMIT * HILIM=HI CORE LIMIT * ***************************************************** * PGOLM NOP JSB LIMCK FETCH PROGRAM LIMITS STA ATEMP SAVE NEXT CHAR LDA LOLIM JSB FNDPS FIND POSITION NOP OF 1ST STATEMENT NOP STB LOLIM SAVE IT LDA HILIM INA JSB FNDPS FIND POSITION NOP OF LAST STATEMENT NOP STB HILIM SAVE IT LDA ATEMP RETRIEVE NEXT CHAR CPA .10 EOF ?? JMP PGOLM,I YES, TAKE P+1 RETURN ISZ PGOLM JMP PGOLM,I NO, TAKE P+2 EXIT * * SKP * ******************************************************** * * FETCH PROGRAM LIMITS FROM INPUT BUFFER * ACCORDING TO THE FOLLOWING SYNTAX: * ...... * ...... * ...... * * CALL SEQ: (A)=NEXT CHAR * JSB LIMCK * RETURN: (A)=NEXT CHAR * LOLIM=LO LIMIT * HILIM=HI LIMIT * ******************************************************** * LIMCK NOP CLB,INB SET UP STB LOLIM DEFAULT LIMITS LDB .9999 1-9999 STB HILIM LDB M2 STB CNT1 LDB .10 SET UP FOR STB BLANK FIXED FORMAT SCAN RSS JSB CHAR FETCH NEXT CHAR LIM1 JSB DELM DELIMITER ? JMP *-2 YES, IGNORE JSB DIGCK DIGIT ? JMP LIMCK,I NO,EXIT ADA .48 YES, JSB INTIN FETCH # DEF MAXSN & STB HILIM SAVE IT ISZ CNT1 DONE ? RSS JMP LIM2 STB LOLIM NO, CONTINUE JMP LIM1 LIM2 INB INSURE CMB,INB LOLIM<=HILIM ADB LOLIM SSB,RSS JMP SYE25 IT'S NOT, ERROR LDhB .32 OK, SET UP FOR STB BLANK FREE FORMAT INPUT RSS FETCH NEXT JSB CHARN NON-DELIMITER JSB DELM CHARACTER JMP *-2 (A)=NEXT CHAR JMP LIMCK,I & RETURN * SKP * **************************************************** * * CHECK LEGAL LINE # LIMITS OF INPUT * * CALL SEQ: (A)=CHAR COUNT * (B)=BUFFER ADDRESS * JSB CKLLN * RETURN: P+1: OUTSIDE OF LIMITS * P+2: WITHIN LIMITS * *************************************************** * CKLLN NOP CMA SET UP FOR STA INCNT GETCR RBL ROUTINE STB INBAD LDB LOLIM INPUT LIMITS CPB .1 OTHER THAN RSS 1-9999 ??? JMP CKLL1 LDB HILIM CPB .9999 JMP CKLL2 NO, TAKE P+2 EXIT CKLL1 JSB GETCR YES, FETCH NEXT CHAR JMP CKLLN,I NULL RECORD, TAKE FAIL EXIT CPA .32 IGNORE PRECEEDING JMP CKLL1 BLANKS JSB INTIN GET CURRENT LINE # DEF MAXSN LDA LOLIM CMA,INA ADA 1 SSA #>=LOLIM ? JMP CKLLN,I NO, P+1 CMB,INB ADB HILIM SSB #<=HILIM ? JMP CKLLN,I NO, P+1 CKLL2 ISZ CKLLN JMP CKLLN,I YES, P+2 * * SKP * ***************************************************** * * INTIN WILL BUILD AN INTEGER FROM INPUT * * CALL SEQ: (A)=CURRENT CHAR * JSB INTIN * DEF (MAX #) * RETURN: (B)=INTEGER * ***************************************************** * INTIN NOP STA ATEMP SAVE CUR. CHAR. LDA INTIN,I FETCH JSB INDCK MAXIMUM STA INTI1 ALLOWABLE ISZ INTIN LIMIT LDA SBPTR SAVE STA TEMP1 SBPTR LDA TEMAD STATUS STA SBPTR LDA ATEMP RECOVER CUR.CHAR. JSB INTCK FETCH INTEGER INTI1 BSS 1 STA ATEMP LDA TEMP1 RESTORE STA SBPTR SBPTR STATUS LDA ATEMP JMP INTIN,I * SKP *************************************************** * * SEARCH COMMAND DEVICE TABLE FOR VALID SYNTAX * * CALL SEQ: (A)=CURRENT CHAR * (B)=-TAB LENGTH * JSB SWDEV * DEF (TABLE START ADDRESS) * RETURN: P+2: FAIL RETURN * (A)=CURRENT CHAR * P+3: SUCCES RETURN * (A)=CURRENT CHAR * (B)=TABLE POSITION * TBLPT=ENTRY ADDRESS * ************************************************** * SWDEV NOP STA ATEMP SAVE CURRENT CHAR LDA SWDEV,I FIND TABLE START JSB INDCK STA SWDV1 ISZ SWDEV SWDV0 LDA ATEMP RETRIEVE CURRENT CHAR SZB,RSS ANY ENTRIES ? JMP SWDEV,I NO, TAKE FAIL EXIT JSB TBSRH YES, SEARCH DEVICE SWDV1 NOP TABLE JMP SWDV3 NOT FOUND * JSB CHARN FOUND,FETCH NEXT CAHR JSB DELM IGNORE DELIMITERS JMP *-2 STA ATEMP SAVE A LDA COUNT FIND JSB INDCK CURRENT ADA M2 COUNT LDB 0,I SWDV2 CMB & ADB LNGTH COMPUTE CMB,INB TABLE POSITION LDA ATEMP ISZ SWDEV MOVE TO SUCCES RETURN JMP SWDEV,I & EXIT * SWDV3 LDB LNGTH SWDV4 LDA SWDV1,I ALLOW 0 LENGTH SYMBOL AND .7 AS VALID TABLE ENTRY SZA,RSS 0 LENGTH ? JMP SWDV5 ADA .3 NO, MOVE TO NEXT ENTRY ARS ADA SWDV1 STA SWDV1 INB,SZB END OF TABLE ? JMP SWDV4 NO, CONTINUE JMP SWDV0 YES, NO MATCH * SWDV5 LDA SWDV1 0 LNGTH SYMBOL FOUND STA TBLPT |k SAVE ENTRY ADDRESS JMP SWDV2 * SKP ******************************************************* * * EXECUTE SPECIFIED COMMAND * * CALL SEQ: (A)=NEXT CHARACTER * (B)=EXECUTION TABLE POSITION * JSB XQCMD * DEF (EXECUTION TABLE START) * NOP (USED FOR STORAGE BY XQCMD) * RETURN: P+3: COMPLETION RETURN * P+4: CONTINUATION RETURN (WHEN REQUIRED) * ********************************************************* * XQCMD NOP STA ATEMP SAVE CURRENT CHAR ADB M1 FIND EXECUTION RBL,SLB TABLE ADDRESS JSB CALER LDA XQCMD,I JSB INDCK ADB 0 (B)=EXECUTION TABLE ENTRY ISZ XQCMD STB XQCMD,I SAVE IT IN USER SUPPLIED STORAGE INB LDA 1,I GET ADDRESS OF I/O ROUTINE JSB INDCK FROM BRTBL ISZ XQCMD LDB XQCMD SAVE IT IN CALLER STB 0,I SUPPLIED STORAGE INA STA TEMPX LDB TBLPT GET ADDRESS OF MNEM ENTRY AND LDB 1,I EXTRACT THE LOGICAL UNIT NO. LSR 9 AND RIGHT JUSTIFY LDA ATEMP RECOVER CURRENT CHAR JMP TEMPX,I TRANSFER TO REQUESTED ROUTINE * SKP **************************************************** * * CHECK OCCURANCE OF "ON" OR "FROM" SYNTAX * IF XSYNF=1 ON/FROM/TO MUST OCCUR IN COMMAND SYNTAX * IF XSYNF=1 ON/FROM MUST OCCUR IN COMMAND SYNTAX * IF XSYNF=0 ON/FROM MAY BE OMITTED FROM COMMAND * * CALL SEQ: JSB ONS * RETURN: P+1: FOUND, (A)=NEXT CHAR * * CALL SEQ: JSB FROMS * RETURN: P+1: FOUND, (A)=NEXT CHAR * * ***************************************************** * ONS NOP CHECK "ON" SYNTAX LDB ONA JSB SYNCH CLB SET ON/FROM FLAG TO ZERO STB FRMTO FRMTO FLAG=0 FOR "ON" LDB DEVCT GET -# OF DEVICE MNEM.  JMP ONS,I OK, RETURN * FROMS NOP CHECK "FROM" SYNTAX LDB FROMA JSB SYNCH CLB,INB FRMTO FLAG=1 FOR "FROM" STB FRMTO LDB DEVCT GET -# OF DEVICE MNEM. JMP FROMS,I OK, RETURN * SYNCH NOP STB SYNC1 CCB JSB TBSRH SEARCH INPUT BUFFER SYNC1 NOP JMP SYNC2 NOT FOUND JSB CHARN FETCH NEXT NON-BLANK CHAR JSB DELM DELIMITER ? JMP *-2 YES, IGNORE CPA .10 EOF ?? JMP INVSC YES, INPUT ERROR JMP SYNCH,I NO, OK EXIT SYNC2 LDB XSYNF IS SYNTAX REQUIRED SZB ??? JMP INVSC YES, ERROR JMP SYNCH,I NO, OK EXIT SKP * *************************************************** * * ALLOW SYNTAX ABREVIATION * * CALL SEQ: JSB ABREV * DEF (ABREVIATED SYNTAX) * RETURN: P+1: FOUND * P+2: NOT FOUND, (A)= NEXT CHAR * ************************************************** * ABREV NOP LDA ABREV,I STA ABRE1 ISZ ABREV JSB CHARN CCB JSB TBSRH ABRE1 BSS 1 ISZ ABREV JMP ABREV,I * SKP **************************************************** * * SCRATCH SUBROUTINE * * CALL SEQ: JSB SCR * RETURN: P+1: NORMAL * *************************************************** * SCR NOP LDA FWAM STA PROGF STA PROGL JMP SCR,I * SKP * * STORAGE & CONSTANTS & OTHER THINGS OF INTEREST * SUP BUFA DEF SETUP I/O BUFFER ADDRESS LSTAD DEF LIST INDEX TO LIST ROUTINE IN BASIC COUNT DEF LNGTH INDEX TO TABLE POSITION IN TBSRH LSTR DEF PLIST INIT TO PLIST PLSTA DEF PLIST ADDRESS OF PLIST ROUTINE * CONT. NOP KBD INPUT CONTINUATION FLAG ATEMP NOP CURRENT CHARACTER XSYNF OCT 1 ON.FROM SYNTAX SWITCH, INIT. TO YES LOLIM NO P LOW LIMIT HILIM NOP HIGH LIMIT * O54 OCT 54 .9999 DEC 9999 M110 DEC -110 * RDYA DEF *+1 BASIC'S "READY" MESSAGE OCT 6412 ASC 3,READY * BLNKA DEF *+1 INPUT CONTINUATION PROMPT ASC 1, * ONA DEF *+1 "ON" SYNTAX OCT 2 ASC 1,ON * FROMA DEF *+1 "FROM" SYNTAX OCT 4 ASC 2,FROM * * TEMAD DEF TMP TMP BSS 1 TEMP1 BSS 1 TEMPA BSS 1 TEMPB BSS 1 TEMPX BSS 1 CNT1 BSS 1 SPTR BSS 1 DPTR BSS 1 FRMTO BSS 1 HED ****** DOIO ****** A-29102-60004-1 REV. B * ********************************************* * DOIO * * ******************************************** * * ENT DOIO * EXT EXEC EXT B2000,B777,.63,M1,.1,.2 * DOIO NOP STA LENTH STB BUFAD STORE ADDRESS OF BUFFER LDB DOIO,I GET CONTROL WORD ISZ DOIO LDA 1 AND FMASK EXTRACT FUNCTION CODE ALF STA ICODE AND STORE IT AWAY LDA 1 AND CMASK EXTRACT CONTROL INFO STA ICNWD AND STORE IT AWAY AND DMASK EXTRACT LOGICAL UNIT NBR CPA .2 RSS JMP SETX LDA M1 ADA ICNWD STA ICNWD LU 2 CHANGE TO LU 1 SETX LDA ICODE SET X BIT FOR HONESTY MODE ON CPA .1 INPUT JMP DOIT LDA ICNWD IOR BIT10 STA ICNWD DOIT JSB EXEC MAKE EXEC CALL DEF *+5 DEF ICODE DEF ICNWD BUFAD DEF BUFAD DEF LENTH AND .32 BIT 5 SET MEANS EOF SZA MAKE SURE EOF SHOWS CLB ZERO LENGTH RECORD STB 0 SET CHAR COUNT IN AREG JMP DOIO,I LENTH NOP ICODE NOP ICNWD NOP BIT10 EQU B2000 FMASK OCT 170000 CMASK EQU B777 DMASK EQU .63 HED * BASIC I-O ROUTINES FOR RTE-B * A-29102-60004-1 REV. B * **************************************[SB@<********** * * READR * * ************************************************ * * FCINP EQU 10400B FUNCTION CODE FOR INPUT FCOUT EQU 24000B FUNCTION CODE FOR OUTPUT * **************************************************** * * ENTRY POINTS: * * ENT LOAD,LOADA,L.RDR ENT EREED,RDNBR,REDNO ENT L.PUN,LEADR,ERCRD,RCRD ENT LIST.,L.LST,ELIST ENT DSPLY,DSPLA,EDSPL ENT KEYIA,KEYIN,EINP,ETTYS ENT LPPOS * * * EXTERNAL REFERENCES: * EXT .10,INVSC,MO100,READR EXT EINPT EXT TFLAG,ZERO,EFASE,EFIO,READS EXT EREAD EXT GETCR,BCKSP,SBPTR,M1 EXT FSC,M2,SYMCK,COMM1,ERROR,.STOP EXT TEMPS EXT MO133 EXT PRINS,EPRIN EXT .1 EXT SEQNO EXT M6,.7,.23 * * ******************************************************* * SKP \~B SKP ***** * GET INPUT PROGRAM (FROM COMMAND) ***** L.RDR NOP CPA .10 EOF ? RSS JMP INVSC NO, ERROR LDA FRMTO SZA,RSS L.RDR AND "ON" INCOMPATIBLE JMP INVSC LDA STFCI SET UP I/O IOR 1 CODE STA FNCTW LDA PLODA SWITCH BASIC TO GET STA READR NEXT RECORD FROM PLOAD ROUTINE LDA L.RDR INA SET RETURN FOR CONTINUATION JMP 0,I LET BASIC PROCESS INPUT * PLOAD NOP JSB LOAD GET A RECORD LDB TMPB2 FETCH BUF ADDR JSB CKLLN LINE LIMITS SATISFIED ? JMP LOAD1 NO, IGNORE IT LDA TFLAG YES,GIVE IT TO BASIC JMP PLOAD,I FOR PROCESSING * * OTHER NAMES FOR L.RDR * PHOT1 EQU L.RDR PHOT2 EQU L.RDR * CARD1 EQU L.RDR CARD2 EQU L.RDR * ** MAKE THEM ENTRY POINTS ALSO * ENT PHOT1,PHOT2,CARD1,CARD2 * SKP ***** * PROVIDE PUNCHED PROGRAM OUTPUT ***** L.PUN NOP JSB SETOT SET UP FOR OUTPUT DEVICE LDA MO133 GIVE LEADER JSB LEADR JSB LSTIT GIVE PROGRAM LDA MO133 JSB LEADR GIVE TRAILER JMP L.PUN,I RETURN ***** * PROVIDE PROGRAM LISTING ***** L.LST NOP JSB SETOT SET UP FOR OUTPUT DEVICE JSB LSTIT LIST PROGRAM JSB LSKIP GIVE FORM FEED JMP L.LST,I & RETURN ***** * SET UP FOR OUTPUT DEVICE ***** * SETOT NOP CPA .10 EOF? RSS JMP INVSC NO,ERROR LDA FRMTO SZA OUTPUT AND "FROM" ARE INCOMPATIBLE JMP INVSC LDA STFCO IOR 1 STA WORD JSB SWLST DEF CTTYS JMP SETOT,I * ** OTHER NAMES FOR OUTPUT * PNCH1 EQU L.PUN PNCH2 EQU L.PUN * LP1 EQU L.LST LP2 EQU L.LST * CRT1 EQU L.LST CRT2 EQU L.LST CRT3 EQU L.LST CRT4 EQU L.LST * TTY1 EQU L.LST TTY2 EQU L.LStT TTY3 EQU L.LST TTY4 EQU L.LST * ** MAKE THEM ENTRIES TOO * ENT PNCH1,PNCH2,LP1,LP2 ENT CRT1,CRT2,CRT3,CRT4 ENT TTY1,TTY2,TTY3,TTY4 SKP ***** * ** COME HERE UPON RECOGNIZING THE STRING "READ" AT * SYNTAX TIME, OR WHEN EXECUTING A READ STATEMENT * ***** EREED NOP JSB EFIO EXECUTION PHASE? JMP CKRED NO, GO CHECK SYNTAX JMP EREAD YES, CODE IS IN BASIC INTERPRETER ***** ** HERE AT SYNTAX TIME ***** CKRED JSB GETCR GET NEXT CHAR JMP CKTT1 (END OF INPUT LINE) CPA NUMSN IS THAT CHAR A "#"? JMP CKTT2 YES, SET UP FOR READ# CKTT1 JSB BCKSP NO, BACKUP OVER THAT CHAR JMP READS AND PROCESS NORMAL READ STATEMENT CKTT2 LDB SBPTR GET ADDRESS OF CALL ADB M1 IN SYNTAX BUFFER LDA 1,I AND INCREMENT BRANCH TABLE INA OFFSET BY ONE STA 1,I THEN PUT IT BACK JSB FSC GET FORMULA FOR LU# CPA .10 END OF STATEMENT? JMP READS YES, PROCESS NORMALLY FROM HERE LDB M2 NO, IS THE DELIMITER JSB SYMCK A COMMA DEF COMM1 OR SEMICOLON? RSS JMP READS YES, PROCESS NORMALLY FROM HERE JSB ERROR NO, ERROR 21 DEF *+3 DEF .21 DEF ZERO JSB .STOP ***** * ** HERE TO EXECUTE READ# STATEMENT * ***** RDNBR NOP JSB SEQNO GET NEW LU NUMBER STA TMPA2 SAVE LU NUMBER ISZ TEMPS MOVE INTERP CODE PTR BY END FORMULA ADA STFCI MAKE NEW FUNCT CONTROL WORD STA FNCTW AND PUT IT IN THE CALL TO DOIO LDA TMPA2 RECALL LU NUMBER JSB GETOF GET TABLE OFFSET FOR DEVICE ADA INTBL ADD TABLE ADDRESS LDA 0,I THEN GET ADDRESS OF ROUTINE STA READR AND SET UP FOR INPUT JMP EINPT FROM HERE TREAT AS INPUT STMT ***** * HERE FOR PRINT STATEMENT ***** ELIST NOP JSB EFIO EXECUTION PHASE ?  JMP CKTTY SYNTX PHASE CK FOR PRINT# JSB SWLST YES, SWITCH TO LST DEVICE DSPLA DEF DSPLY JMP EPRIN GO EXECUTE STATEMENT * CKTTY JSB GETCR GET NEXT CHAR JMP NOLUK (END OF INPUT LINE) CPA NUMSN IS THAT CHAR "#" JMP UBET YES, SETUP FOR PRINT# NOLUK JSB BCKSP NO,BACKUP OVER THAT CHAR JMP PRINS AND PROCESS NORMALLY UBET LDA SBPTR GET ADDRESS OF ADA M1 CALL IN SYNTX BUFFER LDB 0,I AND INCREMENT BRANCH TBL ADB .1 OFFSET BY ONE STB 0,I THEN PUT IT BACK JMP PRINS FROM THERE PROCESS NORMALLY ***** * HERE FOR INPUT STATEMENT ***** EINP NOP JSB EFIO EXECUTION PHASE ? JMP READS NO, GO CHECK SYNTAX LDA KEYIA YES, SET UP FOR STA READR KBD INPUT JMP EINPT GO EXECUTE INPUT STATEMENT ***** * HERE TO EXECUTE PRINT# ***** ETTYS NOP JSB SEQNO GET NEW LU # STA TMPA2 ADA STFCO MAKE NEW FUNCT CONTROL WORD STA WORD AND STORE IT AWAY LDA TMPA2 GET LU NUMBER JSB GETOF ADA OUTBL GET ADDRESS OF TABLE ENTRY LDA 0,I THEN GET ADDRESS OF OUTPUT RTN STA ETT1 AND SET UP OUTPUT JSB SWLST SET UP FOR APPROPIATE DEVICE ETT1 DEF CTTYS JMP EPRIN THEN PROCESS NORMALLY HED ****** INPUT ROUTINES ****** A-29102-60004-1 REV. B ***** * READ A RECORD FROM READR ***** LOAD NOP STA TMPA2 SAVE MAX COUNT (-CHARS, BCS CONV.) STB TMPB2 SAVE BUFFER ADDRESS LOAD1 LDA TMPA2 LDB TMPB2 JSB REDNO GET A RECORD CPA ZERO ANY DATA ? JMP EOT NO, JUST LEADER/TRAILER STA TFLAG YES, NEXT TIME WILL BE TRAILER JMP LOAD,I * EOT LDB TFLAG SSB JMP LOAD1 LEADER; GO READ MORE STA TFLAG ASSUME LEADER FOR NEW TAPE NEXT JMP L.xRDR,I EXIT TO COMPLETION RETURN ***** ** HERE TO GET INPUT LINE ***** REDNO NOP CMA,INA MAKE CHAR COUNT NEGATIVE JSB DOIO DO THE INPUT FNCTW NOP THIS WORD SET UP BY RDNBR JMP REDNO,I ***** * HERE FOR INPUT FROM LU# 1 ***** KEYIN NOP CMA,INA SET CHAR COUNT NEG. STA TMPA2 SAVE A STB TMPB2 SAVE B JSB EFASE EXECUTION PHASE ?? JMP SKPIT NO CCA LDB QMRKA OUTPUT QUESTION MARK JSB DSPLY SKPIT LDA TMPA2 RECOVER CHAR COUNT LDB TMPB2 JSB DOIO GET INPUT ABS FCINP+1 INPUT WITH ECHO FROM LU# 1 JMP KEYIN,I * HED * SMALL ROUTINES FOR EACH OUTPUT A-29102-60004-1 REV. B * ***** * FOR LU# 4 ***** NOP STORAGE FOR CARRIAGE POSITION DEC -73 72 CHARS/LINE ABS FCOUT+4 RCRD NOP JSB LYNCK DO ASCII OUTPUT JMP RCRD,I ***** * FOR LU# 6 ***** LPPOS NOP STORAGE FOR CARRIAGE POSITION LPCNT DEC -81 ABS FCOUT+6 LIST. NOP JSB LYNCK ASCII OUTPUT JMP LIST.,I ***** * FOR LU# 1 * NOP DEC -73 ABS FCOUT+1 DSPLY NOP JSB LYNCK JMP DSPLY,I ***** * FOR MULTI-DEVICE OUTPUT * ***** NOP DEC -73 THIS CODE WORD NOP SETS UP CTTYS NOP A NEW JSB LYNCK "DEVICE" JMP CTTYS,I FOR OUTPUT HED ****** UTILITY ROUTINES ****** A-29102-60004-1 REV. B * ***** * OUTPUT LEADER/TRAILER ***** LEADR NOP STA ERCRD SAVE COUNT LDA LYNC1 GET OUTPUT FUNCTION CODE STA LEAD1 LEAD CCA ONE FRAME LDB ZEROA JSB DOIO ASSUME DEVICE ALREADY SWITCHED LEAD1 BSS 1 ISZ ERCRD DONE?? JMP LEAD NO JMP LEADR,I ***** * DO A PAGE EJECT ***** LSKIP NOP LDA WORD GET FUNC CONTROL WORD AND .63 ISOLATE LU # CPA .1 IF LU #1 JMP LSKIP,I RETURN IMMEDIATELY CCA 1 CHAR LDB SKPCD JSB CTTYS OUTPUT SKIP CODE JSB CRLF KEEP IN SYNC WITH LP JMP LSKIP,I ***** * ** GETOF ** CONVERT LU # TO OFFSET IN TABLE * * LDA LOGICAL UNIT NUMBER * JSB GETOF * RETURN .A.=OFFSET * * NOTE: AN ERROR RESULTS IF LU IS 0 OR NEGATIVE * ANY LU > 6 RETURNS AN OFFSET OF 7 * ***** * GETOF NOP ADA M1 IF LU IS SSA 0 OR NEGATIVE, JMP LUERR ISSUE ERROR ADA M6 IF LU IS SSA,RSS 7 OF GREATER JMP USE7 THEN RETURN OFFSET OF 7 ADA .7 RSS USE7 LDA .7 JMP GETOF,I * LUERR JSB ERROR DEF *+3 DEF .23 DEF ZERO JSB .STOP HED **** CONSTANTS AND STORAGE **** A-29102-60004-1 REV. B ********************************************************* * ** CONSTANTS AND STORAGE * *************************************************** * .21 DEC 21 NUMSN OCT 43 ERCRD NOP ZEROA DEF ZERO EDSPL EQU ELIST SKPCD DEF *+1 OCT 6000 FORM FEED KEYIA DEF KEYIN QMRKA DEF *+1 ASC 1,? TMPA2 BSS 1 TMPB2 BSS 1 LOADA DEF LOAD PLODA DEF PLOAD STFCI ABS FCINP STFCO ABS FCOUT ************************************************* * * TABLES TO SET UP PRINT# AND READ# LU'S * ********************************************************** OUTBL DEF * DEF DSPLY DEF CTTYS DEF CTTYS DEF RCRD DEF CTTYS DEF LIST. DEF CTTYS * INTBL DEF * DEF KEYIN DEF REDNO DEF REDNO DEF REDNO DEF REDNO DEF REDNO DEF REDNO * *********************************************************** HED RTE-B BASIC CONTROL A-29102-60004-1 REV. B **************************************** * RTE-B BASIC CONTROL |**************************************** * SPC 5 ENT START * EXT .STOP * START JMP INIT JSB .STOP SPC 5 * ENT RUNIT,.RUN * EXT XH,XL,EENDA,PEXMA * RUNIT NOP RUN THE PROGRAM .RUN CLA STA XH INA STA XL LDA EENDA STA PEXMA JMP INIT SKP ENT ELINK * EXT PXMKA,PEXMA * ELINK LDB PXMKA STB PEXMA JMP INIT SPC 5 ENT EPAUS * EXT M10 * FCNRD EQU 10401B READ CONTROL WORD * EPAUS NOP EXECUTE "PAUSE" LDA M10 LOAD -# OF CHARACTERS LDB PAZA JSB DSPLY OUTPUT "PAUSE" EP1 CLA,INA READ ONE WORD LDB CTRLA JSB DOIO READ ABS FCNRD LDB CTRL GET OPERATOR MESSAGE CPB GO IS IT CONTINUE JMP EPAUS,I YES! CPB AB IS IT ABORT? JSB .STOP YES JMP EP1 * PAZA DEF PAZ PAZ OCT 6412 ASC 3,PAUSE OCT 6412 CRLF * CTRLA DEF *+1 CTRL BSS 1 GO ASC 1,GO AB ASC 1,AB * ENT TRACE * EXT TRAP * TRACE NOP JSB TRAP JMP TRACE,I SKP * * BRANCH AND MNEMONIC TABLE ADDRESS POINTERS * * ENT SRULA,ADRED,CMDAD,ASBTB,SBTBE,FCNTB,XNFOA,STDCA ENT FWAM,LWAM * EXT SRULE,MNEM,CMDS,SBTBL,LSBTB,FCNEX,XNFO,STDCL * SRULA DEF SRULE START OF SPECIAL CALL MNEMONICS ADRED DEF MNEM START OF CALL MNEMONICS CMDAD DEF CMDS START OF COMMAND MNEMONICS SBTBE DEF LSBTB END OF FUNCTION TABLE ASBTB DEF SBTBL START OF BRANCH TABLE FCNTB DEF FCNEX START OF FUNCTION TABLE XNFOA DEF XNFO START OF PARAMETER TYPE TABLE STDCA DEF STDCL END OF SUBROUTINE CALL FWAM NOP FIRST WORD AVAILABLE MEMORY LWAM NOP LAST WORD AVAILABLE MEMEORY HED RTE-B CATCH-ALL MODULE A-29102-60004-1 REV. B SUP PRESS ASCII LISTING **************************************** * RTE-B CATCH-ALL MODULE **************************************** * * ENT RTINT,NORML,OVDVR,.IENT ENT EINT,.FLUN ENT .LOGA,.EXPA * EXT ERROR,.STOP EXT B377,M8,M16,.PACK EXT .15,.23,M1 EXT INDCK,.PEXP,MANT1,MANT2 EXT STRT5,PROGF,PROGL,FCORE,SYMTF,SYMTA EXT M4,ERROR,INDCK,ZERO EXT .1,.2,.4 EXT ALOG,EXP ** AVMEM EQU 1751B FWA SYSTEM BUFFER BKGRG EQU 1752B FWA BACKGROUND BKLWA EQU 1777B LWA BACKGROUND XEQT EQU 1717B ADDRESS OF BASICS ID SEGMENT ** ** INITIALIZE FWAM,LWAM FOR RTE TYPE SYSTEMS ** * RTINT NOP CLA STA START SETUP SO RE-ENTRY POINT IS BSTOP LDA XEQT GET THE ADDRESS OF BASICS ID SEG ADA .23 GET ADDRESS OF MEMORY BOUNDS LDA 0,I GET LAST WORD OF BASIC INA STA FWAM LDA BKLWA CHECK FOR AVAILABLE BACKGROUND CMA,INA IF NONE THERE THEN ADA BKGRG ASSUME RTE-C OR RTE-B AND SZA THEN RUN IN FOREGROUND JMP RT1 THERE IS BACKGROUND! LDA AVMEM THERE ISNT! ADA M1 RT2 STA LWAM SET UP LWAM FOR BASIC USER AREA JMP RTINT,I RETURN * RT1 LDA BKLWA JMP RT2 * .LOGA OCT 100100 DEF ALOG * .EXPA OCT 100100 DEF EXP * * SKP * * * RTE-B DUMMY OVERLAY DRIVER * * * OVDVR NOP *** ENTER *** STA TMPA3 SAVE AREG STB TMPB3 SAVE BREG LDA OVDVR,I GET CALL TABLE ENTRY ADDRESS JSB INDCK MAKE INTO DIRECT ADDRESS LDB 0,I GET FUNC. CTRL. WRD. INA POINT AT ENTRY POINT OF DRIVER LDA 0,I GET ENTRY ADDRESS JSB INDCK MAKE INTO DIRECT ADDRESS STA TEMP ISZ OVDVR SSB HAS FUNC. GOT JSB ERR0 ON IT JMP OV1 YES! LDA OVDVR STA TEMP,I FAKE JSB TO ENTRY FROM POSITION ISZ TEMP OF DEF FOLLOWING "JSB OVDVR" LDA TMPA3 RESTORE AREG LDB TMPB3 JMP TEMP,I CALL THE DRIVER * OV1 LDA TMPA3 RESTORE REGS LDB TMPB3 JSB TEMP,I EXECUTE FUNCTION RSS IS THERE AN ERROR RETURN JMP OVDVR,I NO! AND .15 MAKE INTO DECIMAL ADA .60 AND ADD IN ERROR # OFFSET STA TT2 SAVE FUNCTION NUMBER JSB ERROR PRINT ERROR MESSAGE DEF *+3 DEF TT2 OF THE FORM DEF ZERO "ERROR NN IN LINE XX" JSB .STOP RETURN TO READY IN BASIC * * * * * NORMALIZE (A), (B), AND EXPONENT * * * * NORML NOP SET STA TT2 LEFT SHIFT-COUNTER CLA TO ZERO STA TT1 LDA TT2 SZA,RSS ON SZB ZERO JMP NORM3 CLEAR STA .PEXP EVERYTHING STA MANT1 STORE NORM1 STB MANT2 MANTISSA JMP NORML,I AND RETURN * NORM2 ISZ TT1 COUNT LEFT SHIFTS NORM3 CLE,ELB ROTATE (A) AND ELA (B) LETF INTO (E) SEZ,SSA,RSS TWO HIGHEST BITS 0? JMP NORM2 YES, + UNNORMALIZED SEZ,SSA NO, TWO HIGHEST BITS 1? JMP NORM2 ERA SHIFT TO ERB,CLE NORMALIZED MANTISSA STA MANT1 NO, LDA TT1 COMPUTE CMA,INA CORRECTED ADA .PEXP EXPONENT STA .PEXP VALU LDA MANT1 JMP NORM1 * * THE FOLLOWING THREE ITEMS MUST REMAIN IN THE EXACT ORDER .60 DEC 60 TT1 BSS 1 TT2 BSS 1 TMPA3 EQU TT1 TMPB3 EQU TT2 TEMP BSS 1 * * * * SKP *** UNPACK LOW WORD OF NUMBER ** * .FLUN NOP LDA 1 (A) = (B) AND B377 GET EXPONENT CMB SUBTRACT OFF ADB 0 EXPONENT FROM CMB MANTISSA IN (B) SLA,RAR NEGATIVE EXPONENT? IOR MSK4 (77600) YES, PROPAGATE SIGN JMP .FLUN,I EXIT * *** INTEGERIZE FLOATING POINT NUMBER ** * IFIX NOP STF 1 SET OVERFLOW FLAG STA NORML SAVE (A) JSB .FLUN SSA EXPONENT NON-NEGATIVE? JMP IFIX3 NO. RETURN 0 OR -1. ADA M16 SSA EXPONENT LESS THAN 16? CLF 1 YES. CLEAR OVERFLOW. ADA M8 SSA,RSS EXPONENT LESS THAN 24? JMP IFIX,I NO. ERROR EXIT, NO FRACTION. ADA M8 BINARY POINT TO RT END OF B STA .FLUN SAVE SHIFT COUNT LDA NORML RETRIEVE HIGH MANTISSA JMP IFIX2 * IFIX1 CLE,SLA,ARS LONG RIGHT SHIFT CME SLB,ERB STF 1 SET OVERFLOW IF 1 LOST IFIX2 ISZ .FLUN DONE? JMP IFIX1 NO, SHIFT MORE ISZ IFIX DONE, SKIP RETURN JMP IFIX,I * IFIX3 LDA NORML NEGATIVE EXPONENT; RETRIEVE (A) CLE,SSA CCA,RSS TRUNCATE TO -1 OR 0 CLA,RSS CCB,RSS CLB JMP IFIX2+2 SKIP RETURN * SKP * * SUBROUTINE TO COMPUTE THE ENTIER OF A * NUMBER WHOSE EXPONENT IS LESS THAN 15 * THIS ROUTINE HAS SPECIAL PROPERTIES FOR BASIC: * OVERFLOW IS SET (ON NORMAL RETURN) IF ANY BIT LOST * E IS SET IF HIGH FRACTION BIT LOST * .IENT NOP JSB IFIX JMP .IENT,I OVERFLOW XOR 1 (A) SHOULD BE FULL OF SIGN BITS SSA (B) SHOULD HAVE A SIGN TOO JMP .IENT,I IT DOESN'T, ERROR EXIT. CPA 1 IF (A) WAS ZERO, JMP *+3 ALL WAS OK. CMA IF (A) WAS -1, CPA 1 ISZ .IENT ALSO OK; SKIP RETURN. JMP .IENT,I LEAVE WITH RESULT IN A, B. * SKP * EINT NOP STB TEMP SAVE (B) JSB IFIX JMP EINT1 NOT FIXABLE JSB .PACK BUILD FLTG RESULT DEC 31 JMP EINT,I * EINT1 LDB TEMP RETURN ORIGINAL NUMBER LDA NORML JMP EINT,I * SKP ******************************************************** * * BASIC DOUBLE STORE AND TEST ROUTINE * ******************************************************* * ENT .DST * * .DST NOP STA XTEMP SAVE INFO STB XTMP1 TO BE STORED LDA TBLAD POINT AT STA PTR RESTRICTED AREA TABLE LDA M4 4 RESTRICTED AREAS STA CTR LDA .DST,I JSB INDCK REMOVE INDIRECT CHAIN STA ADR PROPOSED STORE ADDRESS ISZ .DST SET UP FOR EXIT JSB CHECK CHECK FOR ADR IN RESTRICTED AREA ISZ CTR MORE AREAS? JMP *-2 YES CHKOK LDA XTEMP ALL CLEAR, DO THE STORE STA ADR,I ISZ ADR LDB XTMP1 STB ADR,I JMP .DST,I * CHECK NOP LDA PTR,I GET LOWER LIMIT ISZ PTR LDB PTR,I GET UPPER LIMIT ISZ PTR SET UP FOR NEXT TIME CMA,INA ADA ADR INA SSA (ADR)+1 < LOWER LIMIT? JMP CHKXT YES, OUTSIDE LIMITS THEN CMB,INB ADB ADR SSB,RSS (ADR) >= UPPER LIMIT? CHKXT JMP CHECK,I YES, OUTSIDE LIMITS ISZ CTR INSIDE LIMITS, SIMPLE VARIABLE? JMP ERR NO, ERROR LDB SYMTF START AT BEGINNING OF SYMBOL TABLE NEXT CPB SYMTA ANY MORE ENTRIES? JMP ERR NO, ADR DIDN'T MATCH ANY SMPLE VAR LDA 1,I FETCH VARIABLE NAME AND .15 ISOLATE TYPE FIELD CPA .15 FUNCTION? JMP FN YES, TWO WORD ENTRY CPA .1 1 DIMENSIONAL ARRAY? JMP ARAY YES, SKIP THE ENTRY CPA .2 2 DIMENSIONAL ARRAY? JMP ARAY YES, SKIP THE ENTRY INB POINT AT SIMPLE VAR ADDRESS CPB ADR DO WE WANT TO STORE HERE? JMP CHKOK YES, THEN ALL IS WELL FN ADB .2 SMPL VARS HAVE 3 WORDS PjER ENTRY JMP NEXT CHECK NEXT ENTRY * ARAY ADB .4 ARRAYS HAVE 4 WORDS PER ENTRY JMP NEXT CHECK NEXT ENTRY * ERR JSB ERROR DEF *+3 DEF .1 DEF DST JSB .STOP DOOM. * TBLAD DEF TABLE,I * TABLE DEF ZERO BASIC INTERPRETER DEF STR5A * DEF PROGF INTERP. CODE DEF PROGL * DEF FCORE STACK AREA DEF SYMTF * DEF SYMTF SIMPLE VARIABLE AREA DEF SYMTA * STR5A DEF STRT5 DST DEC 3 ASC 2,DST XTEMP EQU TT1 XTMP1 EQU TT2 PTR BSS 1 CTR BSS 1 ADR BSS 1 MSK4 OCT 77600 * HED RTE-B CALL STATEMENT EXECUTION A-29102-60004-1 REV. B **************************************** * RTE-B BASIC CALL STATEMENT EXECUTION * **************************************** * ENT ECALL,CLXIT ENT XITPT,PTBLA,DSTA,FLOTA,CLXTA * EXT TEMPS,B777,HSTPT,SETSX,PRADD EXT OPMSK,B4000,FORMX,FNDSB,FCORE,TSTPT EXT ERRCD,XEC4,FLOAT,FRTFX,FRTF2 EXT B1000,BHSTP,B177,SCALL EXT .STOP SUP * *** *** ** EXECUTE CALL ** *** *** * ECALL CLA CLEAR PARAMETER AREA STA PTBL STA PTBL+1 STA PTBL+2 STA PTBL+3 STA PTBL+4 STA PTBL+5 STA PTBL+6 STA ARGCT STA ERRCD LDA TEMPS LDA 0,I AND B777 ISOLATE INTERNAL CALL NUMBER STA SCALL SAVE TEMPORARILY LDA HSTPT SAVE HIGH CORE STA MWDNO STACK POINTER LDA PTBLA STA EFMT INITIALIZE PARAMETER POINTER ECAL1 ISZ TEMPS LDA TEMPS LDA 0,I AND OPMSK ISOLATE OPERATOR CPA B4000 RT PAREN (END OF PARAMS)? JMP ECAL2 YES. LDB TEMPS INB LDA 1,I AND OPMSK CPA B1000 QUOTE STRING BEING PASSED? JMP ECAL6 YES JSB FORMX EVALUATE PARAMETER. ECAL3 LDA HSTPT LDA 0,I STA EFMT,I SET UP DEF TABLE FOR .ENTR STA RTRN SAVE ADDRESS OF LAST PARAM ISZ ARGCT ISZ EFMT JMP ECAL1 * ECAL2 LDB ARGPA ADB ARGCT INITIALIZE DEF *+N STB ARGP LDB CLXTA STB XITPT LDB SCALL GET CALL TBL ENTRY NUMBER JSB FNDSB FIND STB ARGCT SAVE B IN ARGCT TEMPORARILY INB LDB 1,I GET CALL TABLE POINTER STB TMPX2 SAVE CALL TBL ENTRY ADDRESS LDB ARGCT RESTORE B FROM ARGCT CMB ADB STDCA LDA SCALL SSB,RSS STANDARD CALL? JSB FRTFX NO, GO DO FORTRAN FIX CCA LOAD ADDRESS OF ADA MWDNO PARAMETER ADDRESSES JSB TMPX2,I CALL EXTERNAL SUBROUTINE OR FUNCTION ARGP DEF *+0 PTBL OCT 0,0,0,0,0,0,0 JMP *+1,I XITPT DEF CLXIT FRTFX MAY CHANGE THIS FLTIT JSB FLOAT FOR FORT. FCNS. RETURNING INTEGER DSTL JSB .DST FOR FORTRAN FUNCTIONS, RETURN RESULT RTRN BSS 1 ADDRESS OF LAST PARAM CLXIT LDA FCORE STA TSTPT RESTORE LDA MWDNO STA HSTPT POINTERS LDB ARGCT CMB ADB STDCA SSB,RSS STANDARD CALL? JSB FRTF2 NO, FIX RETURNED PARAMS LDB ERRCD SZB,RSS ANY ERROR? JMP XEC4 NO. EXECUTE NEXT STATEMENT. ISZ TEMPS LDB PRADD CPB TEMPS ANY FAIL STATEMENT? JSB .STOP NO. ABORT EXECUTION. ISZ TEMPS JMP SETSX GO PROCESS STATEMENT * ECAL6 LDA 1 SAVE POINTER JSB BHSTP ALLOCATE PLACE FOR POINTER STA 1,I PUT " STRING POINTER ON STACK LDA 0,I AND B177 ISOLATE STRING CHARACTER COUNT INA ARS ADA 1,I COMPUTE ADDRESS OF END OF STRING STA TEMPS TO FIND NEXT CALL PARAMETER JMP ECAL3 * * PTBLA DEF PTBL DSTA DEF DSTL FLOTA DEF FLTIT CLXTA DEF CLXIT ARGPA DEF ARGP+1 ADDRESS OF LAS.NLHT ARG +1 ARGCT BSS 1 NUMBER OF PARAMETERS MWDNO BSS 1 TMPX2 BSS 1 CONTAINS THE ADDRESS OF EXTERNAL SUBROUTINE * EFMT EQU TMPX2 * END START oN  29102-80005 B S P0122 RTE-B SYSTEM COMMANDS CMNDS             H0101 oASMBҬ̬ì HDMNDS---BASàMMANDN̠A-90-60005-V.B NAMMNDS90-60005V.B PUUSYSMN̠DVŠUPU PUNUUPUNHDVŠUPU DUU5ADҠDVŠNPU SUU6SԠDVŠUPU MNDS S:A-90-60005- SU:90-0005 :90-60005V.B NԠ$D̬$UN$SԬ$M NԠ$AD$SAVŬ$MG NԠ$Ƭ$SKPƬ$ ԠHANDMMK ԠDGKNN..3 ԠNSMS ԠSDVMDPGM ԠAMPMHM ԠNԬNVSìABVSA Ԡ.0SҬPSA Ԡ.UNSҬDSM Ԡ.SԬ.PUN.D ԠDVBDV Ԡ$MŬM Ԡ SKP HŠ:D̠ OR = TABLE SSA VALUE, THEN JMP SGN2 SET UP GAIN ISZ AFCTR INCREMENT GAIN ISZ AFCTR TABLE POINTER ISZ CNTR LAST ENTRY? JMP SGN1 NO, CONTINUE LOOKING SPC 1 SGN2 LDA ADRS,I FETCH GAIN ENTRY AND ASL 3 SHIFT GAIN BITS INTO "B" LDB CNTR PUT NEW ADB .7 GAIN IN "B" ASR 3 SHIFT GAIN BITS BACK INTO "A" SPC 2 JSB $LIBR TURN OFF INTERRUPT SYSTEM NOP AND UPDATE STA ADRS,I CONFIGURATION TABLE ENTRY JSB $LIBX TURN INTERRUPT SYSTEM BACK DEF ENTRY ON AND RETURN SKP * "NORM" PERFORMS A SYSTEM NORMALIZE ON THE SPECIFIED UNIT * IF NO UNIT NUMBER IS SPECIFIED OR ZERO THE FIRST SUBSYSTEM * IN THE CONFIGURATION TABLE IS ASSUMED * UNIT NOP NORM NOP JSB .ENTR FETCH PARAMETER DEF UNIT ADDRESS LDA NORM SAVE RETURN STA ENTRY ADDRESS LDB UNIT FIND SUBSYSTEM JSB FNDLU LOGICAL UNIT NUMBER SPC 1 JSB EXEC ************************************* DEF *+5 SYSTEM DEF .2 NORMALIZE DEF LU REQUEST DEF .1 DEF .1 ************************************** * AND =B200 SZA,RSS SZB,RSS IF TRANSMISSION LOG JMP ERR1 EQUALS ZERO GIVE ERROR 1 JMP ENTRY,I ELSE, RETURN SPC 3 * "FNDLU" FINDS THE LOGICAL UNIT NUMBER CORRESPONDING TO THE * SUBSYSTEM NUMBER SPECIFIED IN THE CALL. IF THE NUMBER IS ZERO * OR NEGATIVE AN ERROR IS GIVEN, OR IF THE UNIT NUMBER IS NOT DEFINED * AN ERROR IS ALSO GIVEN * FNDLU NOP CLA,INA ASSUME UNIT 1 SZB IF UNIT SPECIFIED LDA B,I FETCH IT SSA,RSS COMPLEMENT AND CMA,INA,SZA,RSS JMP ERR2 IF <=0 THEN GIVE ERROR 2 STA CNTR SAVE COMP. FOR LOOP COUNTER LDB ..ADC FETCH ADDRESS OF CONFIG. TABLE ADA B,I LEGITIMATE UNIT SSA ADDRESS? JMP ERR2 NO - GIVE ERROR # 2 INB,RSS BUMP TBL PNTR TO 1ST SUBSYS. ENTRY SPC 1 NXTSS ADB B,I FETCH NEXT SUBSYSTEM ENTRY ISZ CNTR UNIT FOUND? JMP NXTSS NO, CONTINUE SEARCH SPC 1 INB FETCH SUBSYSTEM LDB B,I LOGICAL UNIT NUMBER STB LU AND SAVE JMP FNDLU,I RETURN SKP * "AIRDV" PEFORMS ANALOG INPUT FROM THE CHANNELS SPECIFIED IN * A REAL ARRAY. THE RESULTS ARE CONVERTED TO FLOATING POINT VOLTS * AND RETURNED IN ANOTHER REAL ARRAY. * * CALLING SEQUENCE: * CALL AIRDV(NUM1,RCHN,VOLT,ERR) * WHERE: NUM1 - NUMBER OF CHANNELS TO BE READ ( IF N<0 THEN * PERFORM PACED CONVERSION) * RCHN - REAL ARRAY CONTAINING CHANNEL NUMBERS * VOLT - REAL ARRAY FOR CONVERTED DATA * ERR - ERROR RETURN PARAMETER * BIT 0 = OVERFLOW ON AT LEAST ONE READING * BIT 1 = PACE ERROR ON AT LEAST ONE READING * NUM1 NOP RCHN NOP VOLT NOP ERR NOP AIRDV NOP JSB .ENTR FETCH PARAMETER DEF NUM1 ADDRESSES LDA AIRDV 8FSAVE RETURN STA ENTRY ADDRESS LDA NUM1,I FETCH NUMBER OF CHANNELS JSB SETUP GO TO PARAMETER CHECK SPC 2 AIRD1 DLD RCHN,I LOAD NEXT CHANNEL NUMBER FIX CHANGE TO INTEGER JSB FCHN FIND HARDWARE ADDRESS IOR =B100000 SET TO RANDOM MODE IOR PACED OR IN PACE BIT STA CHANL AND SAVE SSB IF GAIN IS NEGATIVE JMP RDHL GO TO HIGH LEVEL READ XOR =B140000 SET UP GAIN STA GCHN CHANNEL ENTRY SPC 1 JSB EXEC ***************************** DEF *+5 LOW DEF .2 LEVEL DEF LU RANDOM DEF RBUF1 READ DEF .2 ***************************** JMP AIRD2 GO TO VOLTAGE CONVERSION SPC 2 RDHL JSB EXEC ************************* DEF *+5 HIGH DEF .2 LEVEL DEF LU RANDOM DEF RBUF2 READ DEF .1 ***************************** SPC 1 AIRD2 SZB,RSS IF TRANSMISSION LOG EQUALS JMP ERR1 ZERO, GIVE ERROR 1 SPC 1 LDB RDNG FETCH READING JSB CONV PERFORM CONVERSION ISZ RCHN BUMP CHANNEL ISZ RCHN ADDRESS ISZ CNTR LAST CHANNEL JMP AIRD1 NO, CONTINUE JMP ENTRY,I YES, RETURN SPC 4 SETUP NOP CLB INITIALIZE ERROR STB ERR,I TO ZERO SSA IF NEGATIVE LDB =B10000 SET STB PACED PACE BIT SSA IF NEGATIVE CMA,INA MAKE POSITIVE STA NUM AND SAVE CMA,INA,SZA,RSS COMPLEMENT # OF CHANNELS JMP ERR2 IF ZERO GIVE ERROR STA CNTR SAVE FOR LOOP COUNTER CMA COMPUTE ADDRESS OF ALS LAST ELEMENT IN ADA VOLT ARRAY VOLT STA TEMP AND SAVE JSB .DST USE BASIC'S DOUBLE STORE DEF TEMP,I TO CHECK ARRAY BOUNDS JMP SETUP,I SKP * "FCHN" IS A SUBROUTINE WHICH FINDS THE ENTRY IN THE 2313 * CONFIGURATION TABLE WHICH CORRESPONDS TO A GIVEN CHANNEL NUMBER * * CALLING SEQUENCE : * "A" CONTAINS THE SOFTWARE ANALOG CHANNEL NUMBER * RETURNED : * "A" CONTAINS THE HARDWARE ADDRESS OF THE DESIRED MPX CHANNEL * "LU" _ LOGICAL UNIT NUMBER OF THE SUBSYSTEM CONTAINING "A" * "ADRS" _ ADDRESS OF THE CONF. TABLE ENTRY FOR "A" * "GAIN" _ GAIN FOR THE CHANNEL (-1 IF HIGH LEVEL) * "REMCH" _ # OF CHANNELS REMAINING IN ENTRY * * IF THE CHANNEL IS OUTSIDE THE BOUNDS OF THE TABLE "FCHN" * BRANCHES TO "ERR2" * FCHN NOP CMA,SSA,INA,SZA COMPLEMENT CHANNEL NUM. RSS IF LESS THAN OR JMP ERR2 EQUAL TO ZERO GIVE ERROR #2 STA MCHN SAVE -(CHANNEL NUM.) STA NMCHN CCA ASSUME STA GAIN HIGH LEVEL LDA ..ADC FETCH ADDRESS OF FIRST STA .ADC INA SUBSYSTEM ENTRY IN CONF. TABLE CLB "B"_ CURRENT SUBSYSTEM # JMP STFCH SEARCH FOR SUBSYS. CONTAINING CHAN. SPC 1 NXSUB STA NMCHN SAVE # OF CHNLS PAST LAST SUBSYS. INB INCREMENT NUMBER OF SUBSYSTEMS CPB .ADC,I LAST SUBSYSTEM? JMP ERR2 YES - GO TO CHANNEL NOT FOUND LDA ADRS FETCH ADDRESS OF ADA ADRS,I NEXT SUBSYSTEM STFCH STA ADRS AND SAVE ADA .2 IS LAST CHANNEL IN LDA A,I CURRENT SUBSYSTEM BEYOND ADA MCHN THE DESIRED SSA CHANNEL? JMP NXSUB NO - GO TO NEXT SUBSYSTEM SPC 1 * SUBSYSTEM CONTAINING CHANNEL FOUND. THE FOLLOWING CODE * SEARCHES THE SUBSYSTEM ENTRY FOR ACTUAL CHANNEL ENTRY * LDA ADRS FETCH THE INA LOGICAL UNIT NUMBER LDB A,I OF THE SUBSYSTEM STB LU AND SAVE ADB =B100 SET UP DMA LU STqB DMALU AND SAVE ADA .2 COMPUTE ADDRESS OF HIGH LEVEL STA ADRS1 SINGLE ENDED CHANNEL COUNT STA ADRS AND SAVE LDB NMCHN FETCH -(CHANNEL IN THIS SUBSYSTEM) RSS NXTEN ISZ ADRS BUMP ENTRY ADDRESS LDA ADRS,I FETCH AND MASK AND =B3777 NEXT ENTRY ADB A CHANNEL IN SSB THIS ENTRY? JMP NXTEN NO, CONTINUE SEARCH SPC 1 INB ENTRY FOUND, STB REMCH SAVE CHANNELS REMAINING ISZ NMCHN COMPUTE -(CHNLS-1) NOP CLA LDB ADRS1 FETCH HL-SE ADDRESS CPB ADRS IF ENTRY IS HIGH LEVEL - SE JMP HLSE1 GO TO COMPUTE LOCATION INB IF ENTRY IS CPB ADRS HIGH LEVEL DIF. JMP HLDIF GO TO COMPUTE DIF. LOCATION * CHANNEL MUST BE LOW LEVEL THEN, SO COMPUTE GAIN LDB ADRS,I FETCH RRL 3 GAIN STA GAIN AND SAVE SPC 2 * TO CONVERT CHANNEL NUMBER TO 2313 HARDWARE ADDRESS THE * FOLLOWING ALGORITHM IS APPLIED: * * BOX = (N-1)/384 (384= 12 SLOTS * 32 CHANNELS/SLOT) * * SLOT.CHANNEL = REMAINDER FROM THE ABOVE QUOTIENT * * WHERE "N" IS THE SUBSYSTEM RELATIVE CHANNEL ADDRESS. SINCE * MULTIPLEXERS CANNOT OCCUPY SLOTS 0-2 IN BOX 0, * 96 MUST BE ADDED TO CHANNEL NUMBERS. * ALSO DIFFERENTIAL INPUT CHANNELS MUST BE COUNTED TWICE. * HLDIF LDA ADRS1,I COMPUTE ADA NMCHN NUMBER HLSE1 ADA NMCHN OF CMA,INA CHANNELS ADA .96 START SLOT =3 CLB COMPUTE DIV .384 HP 2313 ALF,ALF BOX, SLOT ALS AND CHANNEL IOR B ADDRESS LDB GAIN RETURN WITH ADDRESS IN JMP FCHN,I "A" AND GAIN IN "B" SPC 1 .32 DEC 32 .96 DEC 96 .384 DEC 384 SKP * "CONV" IS A SUBROUTINE WHICH CONVERTS 2313 READINGS TO * FLOATING POINT VOLTS. * * CALLING SEQUENCE: * "B" - 2313 READING * * RETURNED: * THE COMPUTED VOLTAGE IS PUT IN THE ADDRESS SPECIFIED BY * "VOLT" AND THEN "VOLT" IS INCREMENTED TO POINT AT THE NEXT * FLOATING POINT LOCATION. * * ERR HAS BIT 0 SET IF OVERFLOW AND BIT 1 SET IF PACE ERROR. * ALSO ON OVERFLOW, + OR - 1E37 IS RETURNED FOR VOLTAGE. * CONV NOP LDA ERR,I LOAD CURRENT ERROR VALUE BRS,SLB,BRS SHIFT READING AND TEST FOR PACE ERROR IOR .2 SET PACE ERROR BIT STA ERR,I SAVE CURRENT VALUE OF ERR BRS,CLE,BRS TOTAL SHIFT 4 PLACES CPB =B3777 IF POS. OVERFLOW, E_1 CCE,RSS AND GO TO OVERFLOW CPB =B174000 IF NEG. OVERFLOW, E_0 JMP OVRFL AND GO TO OVERFLOW LDA B MOVE READING TO A REG. LDB GAIN COMPUTE BLS ADDRESS OF ADB DFCTR CONVERSION FACTOR STB TEMP AND SAVE FLT FLOAT THE 2313 READING FMP TEMP,I MULTIPLY BY CONVERSION FACTOR STVLT DST VOLT,I STORE VOLTAGE IN ARRAY ISZ VOLT COMPUTE NEXT ISZ VOLT FLOATING POINT ADDRESS JMP CONV,I RETURN SPC 1 OVRFL SZA,RSS SET OVERFLOW BIT IOR .1 STA ERR,I IN "ERR" DLD =F1E37 RETURN POSITIVE SEZ,RSS OR NEGATIVE JSB ..FCM INFINITY FOR JMP STVLT READING SKP SKP *************************** DFCTR DEF FACTR+2 FACTR DEC .005,5E-6,1E-5,2E-5,4E-5 DEC 5E-5,1E-4,2E-4,4E-4 RBUF1 OCT 3 ---------------------------------- OCT 2 Q BUFFER DEF GCHN FOR LOW LEVEL RBUF2 OCT 5 --------- OCT 1 Q BUFFER DEF CHANL FOR HIGH LEVEL DEF RDNG ---------------------------------- RDNG NOP SPC 1 M7 DEC -7 .7 OCT 7 SPC 1 GCHN NOP GAIN GAIN NOP BUFFER SPC 1 SKP * "AISQV?" PERFORMS ANALOG INPUT IN SEQUENTIAL ORDER. THE RESULTS * ARE CONVERTED TO FLOATING POINT VOLTS AND RETURNED IN A REAL ARRAY. * * CALLING SEQUENCE: * CALL AISQV(NUM2,SCHAN,VOLT2,ERR1) * WHERE: NUM2 - NUMBER OF CHANNELS TO BE READ ( IF N<0 THEN * PERFORM PACED CONVERSION) * SCHAN - STARTING CHANNEL OF SCAN (IF SCHAN<0 THEN * PERFORMS NUM2 READINGS FROM CHANNEL -SCHAN) * VOLT2 - REAL ARRAY FOR CONVERTED DATA * ERR - ERROR RETURN PARAMETER * BIT 0 = OVERFLOW ON AT LEAST ONE READING * BIT 1 = PACE ERROR ON AT LEAST ONE READING * NUM2 NOP SCHAN NOP VOLT2 NOP ERRA NOP AISQV NOP JSB .ENTR FETCH PARAMETER DEF NUM2 ADDRESSES LDA VOLT2 MOVE VOLT ARRAY ADDRESS LDB ERRA ERROR ADDRESS TO STA VOLT LOCATIONS USED BY UTILITIES STB ERR SHARED BY AIRDV AND AISQV LDA NUM2,I FETCH NUMBER OF CHANNELS JSB SETUP GO TO PARAMETER CHECK LDA VOLT2 SET UP INPUT BUFFER ADA NUM ADDRESS TO LAST HALF OF STA VOLT1 FLOATING PNT. ARRAY "VOLT2" SPC 2 LDA SCHAN,I SAVE START CHANNEL AS NXTSC STA SINGL SINGLE CHAN. FLAG SSA IF NEGATIVE CMA,INA MAKE POSITIVE JSB FCHN FETCH CHANNEL HARDWARE ADDRESS IOR DIGTZ FORM DIGITIZE COMMAND STA CHANL WORD AND SAVE IOR PACED OR IN PACE BIT SSB,RSS IF LOW LEVEL JMP LLSQ GO PROCESS LDB SINGL IF SINGLE CHANNEL SSB SCAN GO TO JMP HLSQR HIGH LEVEL EXEC CALL IOR =B160000 GENERATE SEQUENTIAL LDB ADRS COMMAND, SETTING CPB ADRS1 BIT 0 IF IOR .1 SINGLE ENDED SCAN SPC 1 LDB REMCH LENGTH OF SCAN ADB CNTR IS THE SMALLER CMB,SSB,INB,RSS OF -CNTR CLB OR THE REMAINDER K ADB REMCH OF THE CHANNELS STB NUM IN THIS ENTRY SPC 1 HLSQR STA SEQ SAVE MODE SPC 1 JSB EXEC **************************** DEF *+5 PERFORM DEF .2 HIGH DEF DMALU LEVEL DEF SBUF2 SCAN DEF .3 *********************** AND =B200 SZA,RSS SPC 1 SQCON SZB,RSS IF TRANSMISSION LOG EQUALS JMP ERR1 ZERO, GIVE ERROR 1 * THE FOLLOWING INSTRUCTIONS CONVERT THE DATA JUST READ IN * TO FLOATING POINT AND UPDATE POINTERS "VOLT", AND "VOLT1" * TO POINT AT REMAINING STORAGE. LDA NUM COMPLEMENT CMA,INA NUMBER OF CHANNELS STA LOOPC READ FOR LOOP COUNTER SPC 1 SQC1 LDB VOLT1,I FETCH NEXT READING JSB CONV CONVERT TO FLOATING POINT ISZ VOLT1 BUMP DATA ADDRESS ISZ LOOPC LAST CHANNEL " JMP SQC1 NO - CONTINUE SPC 1 LDB NUM UPDATE -(NUMBER OF CHNLS) ADB CNTR REMAINING SSB,RSS IF CNTR=0 , END OF JMP ENTRY,I SCAN SO RETURN STB CNTR OTHERWISE SAVE LDA NUM COMPUTE NEW ADA SINGL START CHANNEL CMB,INB SAVE POSITIVE NUMBER OF STB NUM CHANNELS REMAINING JMP NXTSC GO TO NEXT SCAN SPC 4 LLSQ XOR =B160000 SET UP STA GCHN GAIN ENTRY XOR =B160000 RESTORE "A" TO DIGITIZE LDB SINGL IF NOT SINGLE SSB,RSS CHANNEL SCAN, IOR =B160000 CHANGE TO SEQUENTIAL STA SEQ AND SAVE SSB IF SINGLE CHANNEL SCAN JMP LLSQR GO PERFORM SCAN AND =B37 COMPUTE THE NUMBER CMA,INA OF CHANNELS REMAINING ADA .32 ON THE ADDRESSED ARS LOW LEVEL CARD ADA CNTR SCAN LENGTH CMA,SSA,INA IS EQUAL CLA TO THE SMALLEST OF ADA CNTR THE FOLLOWING: ADA REMCH 1. # CHNLS LEFT ON CARD CMA,SSA,INA,RSS CLA 2. # CHNLS LEFT IN SCAN ADA REMCH STA NUM 3. # CHNLS LEFT IN TABLE ENTRY SPC 1 LLSQR JSB EXEC *********************** DEF *+5 PERFORM DEF .2 LOW DEF DMALU LEVEL DEF SBUF1 SCAN DEF .5 ************************ SPC 1 JMP SQCON CONVERT DATA TO FLOATING VOLTS SPC 4 SBUF1 OCT 3 ----------------------------- OCT 2 DEF GCHN SBUF2 OCT 3 OCT 1 DEF CHANL OCT 3 OCT 0 DEF SEQ OCT 4 NUM NOP NUMBER OF READINGS VOLT1 NOP DATA STORAGE OCT 3 CLEAN OCT 1 UP OPERATION DEF DIGTZ TO RELEASE LL MPX SPC 4 DIGTZ OCT 120000 M1 DEC -1 SKP * "PACER" SETS UP THE SYSTEM PACER, OR IF THE PACE RATE IS ZERO * TURNS OFF THE SYSTEM PACER. * * CALLING SEQUENCE: * * CALL PACER(RATE,MULT,MODE [,UNIT]) * WHERE: * RATE - BASIC PACER RATE (0 <= RATE <= 256) * MULT - DECADE MULTIPLIER TIMES THE BASIC 1 MICROSECOND * RATE ( 0 <= MULT <= 7 ) * MODE - EXTERNAL/START STOP MODE (BITS 11 AND 12 OF PACER * COMMAND WORD - SEE 12755A MANUAL) * UNIT - SUBSYSTEM NUMBER (OPTIONAL - ASSUMED 1) * RATE NOP MULT NOP MODE NOP UNIT1 NOP PACER NOP JSB .ENTR FETCH PARAMETER DEF RATE ADDRESSES LDA PACER SAVE RETURN STA ENTRY ADDRESS LDB UNIT1 FETCH LOGICAL JSB FNDLU UNIT NUMBER SPC 1 CLB CHECK ALL LDA RATE,I PARAMETERS ASR 5 FOR THE FOLLOWING IOR MULT,I LIMITS: ARS RATE 0 - 255 IOR MODE,I MODE 0 - 3 ARS,ARS MULT 0 - 7 SZA IF ANY PARAMETER OUT OF JMP ERR2 RANGE GIVE ERROR 2 SPC )1 CLA,INA ASSUME ONE STA ENTNM WORD ENTRY LDB DCMD2 FETCH OUTPUT BUFFER ADDRESS LDA MODE,I IF MODE = 0 SZA,RSS AND RATE IS NOT 0 CPA RATE THEN GO TO GENERATE JMP NZMOD PACER COMMAND WORD ADB M1 ELSE, GENERATE A 10 MS DELAY INA BEFORE PROGRAMMED ISZ ENTNM RATE STARTS SPC 1 NZMOD STB DEFBF STORE QUEUE BUFFER ADDRESS LSL 3 GENERATE IOR MULT,I PACER LSL 8 COMMAND IOR RATE,I WORD IOR =B60000 AND STA CMD2 SAVE SPC 1 JSB EXEC ************************ DEF *+5 SET DEF .2 UP DEF LU PACER DEF QBUF DEF .1 ******************************* * AND =B200 SZA JMP ERR1 SPC 1 SZB IF ZERO TRANS. LOG GIVE ERROR 1 JMP ENTRY,I SPC 4 * ERROR ROUTINES FOR 2313 INTERFACE * ERR1 - ERROR NUMBER 1 * ERR2 - ERROR NUMBER 2 * ERRC - ERROR NUMBER (A REGISTER) * ERR1 CLA,INA,RSS SET ERROR TO 1 ERR2 LDA .2 SET ERROR TO 2 ERRC STA ERRNM SAVE ERROR NUMBER JSB ERROR CALL DEF *+3 BASIC DEF ERRNM ERROR DEF ERRMS ROUTINE SPC 1 JMP ENTRY,I RETURN SKP ERRMS DEC 3 ERROR MESSAGE IN ASCII ASC 2,ADC STRING NOTATION SPC 1 QBUF OCT 3 ENTNM NOP DEFBF NOP DCMD2 DEF CMD2 OCT 61412 10 MS START IMMEDIATE CMD2 NOP SKP A EQU 0 B EQU 1 NMCHN EQU NUM1 CNTR EQU NUM2 ERRNM EQU FCHN LU EQU ERRA SINGL EQU AIRDV SEQ EQU GN1 CHANL EQU CHN2 REMCH EQU SGAIN .ADC EQU RATE ADRS EQU NORM ADRS1 EQU SETUP MCHN EQU SCHAN TEMP EQU GCHN AFCTR EQU RGAIN ENTRY EQU AISQV .1 EQU RBUF2+1 .2 EQU RBUF1+1 .3 EQU RBUF1 .5 EQU RBUF2 PACED EQU CHN1 LOOPC EQU FCHN C*DMALU EQU PACER END ASMB,R,L,C,F,B HED BASIC DEVICE SUBROUTINES FOR HP2313B NAM AOV,7 ENT AOV EXT .ENTR,EXEC,ERROR,..DAC SUP A EQU 0 B EQU 1 * * AOV PERFORMS ANALOG OUTPUT TO THE HP2313B DUAL DAC CARD USING * RTE DRIVER DVR62. * * CALLING SEQUENCE: * CALL AOV(NUM,CHAN,VOLT,ERR) * WHERE: * NUM - ABS(NUM) = NUMBER OF OUTPUT VALUES * NUM < 0 PACED OUTPUT * NUM > 0 UNPACED OUTPUT * CHAN - FLOATING POINT ARRAY OF ANALOG OUTPUT CHANNEL NUMBERS * VOLT - FLOATING POINT ARRAY OF OUTPUT VOLTAGES * ERR - NUMBER OF OUTPUT VALUES EXCEEDING MAXIMUM * * IF AN OUTPUT VALUE EXCEEDS THE MAXIMUM, THE MAXIMUM VALUE OF THE * CORRESPONDING SIGN IS OUTPUT AND THE ERROR NOTED IN IERR. * NUM NOP CHAN NOP VOLT NOP ERR NOP AOV NOP JSB .ENTR FETCH PARAMETER DEF NUM ADDRESSES CLB INITIALIZE ERROR STB ERR,I FLAG TO ZERO LDA NUM,I FETCH NUMBER OF CHNLS SZA,RSS IF ZERO JMP ERR2 RETURN SSA IF NEGATIVE LDB =B10000 SET PACE BIT STB PACED AND SAVE SSA,RSS IF POSITIVE CMA,INA COMPLEMENT AND STA NUM SAVE FOR LOOP COUNTER SKP * ANALOG OUTPUT LOOP STARTS HERE AOV1 DLD VOLT,I FETCH OUTPUT FMP =F3200. VOLTAGE AND CONVERT FIX TO INTEGER SOS IF OVERFLOW IS CLEAR JMP STVLT STORE VOLTAGE LDB VOLT,I ELSE, SET DAC TO SSB MAXIMUM POSITIVE CMA OR NEGATIVE VOLTAGE ISZ ERR,I BUMP ERROR COUNTER SPC 1 STVLT AND =B177760 MASK UPPER 12 BITS STA OUTV AND SAVE IN OUTPUT BUFR SPC 1 DLD CHAN,I FETCH CHANNEL NUMBER FIX CONVERT TO INTEGER CMA,SSA,INA,SZA AND COMPLEMENT RSS IF < = 0 THEN JMP ERR2 GIVE ERROR #2 ɐ STA CNTR SAVE -( CHANNEL NUM. ) LDB ..DAC FETCH DAC TABLE ADDRESS ADA B,I IF ADDRESSED SSA CHANNEL IS NOT DEFINED JMP ERR2 GIVE ERROR SPC 1 RSS FDAC STA CNTR SAVE -(#CHANNELS REMAINING) INB BUMP DAC TABLE ADDRESS LDA B,I FETCH NEXT TABLE ENTRY AND =B7 AND MASK OF #CHNLS-1 ADA CNTR ADDRESSED CHANNEL SSA,INA,SZA IN THIS ENTRY? JMP FDAC NO, CONTINUE SEARCH SPC 1 LDA B,I FETCH CHANNEL ENTRY CLB EXTRACT LU ASL 6 FROM ENTRY STB LU AND SAVE ASR 4 SHIFT AND AND =B7740 MASK BOX AND SLOT NUMBER LDB CNTR FETCH CHANNEL CMB NUMBER AND BLF "OR" INTO IOR B COMMAND WORD IOR PACED OR IN PACE BIT IOR =B40001 OR IN COMMAND CODE STA CMND SAVE COMMAND WORD SPC 1 JSB EXEC ************************* DEF *+5 DEF .2 PERFORM DEF LU ANALOG DEF QBUF OUTPUT DEF .1 ************************** * AND =B200 SZA,RSS SPC 1 SZB,RSS IF TRANSMISSION LOG EQUALS JMP ERR1 ZERO, GO TO ERROR 1 SPC 1 ISZ VOLT UPDATE ISZ VOLT VOLTAGE ISZ CHAN AND ISZ CHAN CHANNEL ARRAY POINTERS ISZ NUM LAST CHANNEL? JMP AOV1 NO, CONTINUE JMP AOV,I YES, RETURN SPC 2 ERR1 CLA,INA,RSS ERROR #1 HERE ERR2 LDA .2 ERROR #2 HERE STA ERRNM SAVE ERROR NUMBER JSB ERROR CALL DEF *+3 BASIC'S DEF ERRNM ERROR DEF ERRMS ROUTINE JMP AOV,I AND RETURN SPC 2 ERRMS OCT 3 ASC 2,AOV QBUF OCT 3 .2 OCT 2 DEF CMND SPC 1 CMND NOP OUTV NOP PACETRND NOP ERRNM EQU PACED CNTR NOP LU NOP .1 OCT 1 END 5T  29102-80029 A S 0122 RTE-B 12604 DSI SUB-SYSTEM             H0101 LASMBҬ̬ì HD60BDSɠNKҠBASàϠŠDVҠDVҴ0 NAM6090-6009V.A NԠDS S:90-6009- SNG:90-6009- SUŠAP:90-009 .AP:90-6009 D.BŠ3AP̠V.A NA̠UYUNSUSD SASDBYŠSYSM Ԡ SASDBYBASàANDBASàBAY ԠBƬNVҬD SASDBYANGP.AABŠB. ԠAԬ.DSԬ.N NGUANNMAN NYҠBASàBANHANDMNMNàABŠGNA: DS(ɬɬҬҩSUBDS NYMAԠANDUNN DS(UNVƩ UDSɠADGA̠UNԠN. NNUMBҠƠDGSϠBŠNVD(06 V ƠN0SNDDADNBDMA N0VAUŠƠSؠMSԠSGNANԠDAADGS Ơ ƠN0SԠDADNBDMA N6UNNDG NҠASԠSGNANԠDAADGS DSɠҠMSSAGS Ҡ:PAAMҠ :DAA.NԠDAANVD PGAMMAN UNԠNP NDGNP VAUNP UNàNP DSɠNPNY SB.NҠHPAAMADDSSS DƠUN A SADAҠҠD SANԠAҠҠUN SAGAҠDGԠAG DAUNԬɠHGA̠UNԠN. SAUNANDSAV MANA SSASSUNԠ<0? MPұYS.PAM! SBàN.ADMDV DƠ+5 DƠ. DƠUN DƠSD DƠ. BD0DANDGɠHNUMƠDGSϠNV SZA0:BDUPU? MPDG6N.NԠHK DAMSDYS.SAVŠNDBDD SBA SB.DS DƠVAU DASDSAVŠSԠBDD SBA SB.DS DƠUNì MPDSɬɠBDUPUԠԪ DG6MANASԠUPҠҠN.ƠDGS ADA.5 SANDG DAMSD DBSD SZNDGɠ6DGS? MPDGԷN.NԠHK AƬAƠYS.UNàϠBS0-3 ANDBMASKANDSŠUN SAMP MPNS DGԷSZNDGɠDGS? MPDGԸN.NԠHK ҠYS.SԠUP6DAADGS SZGSԠGϠ MPN DGԸSZNDGɠDGS? MPұN.PAM! ҠYS.SԠUP6DAADGS NԠSBSDSŠSDAADGS B PBGDGS? ̠SHԠVƠDGSNϠB ̠SHԠVƠDGԠNϠB SBMPSŠVƠDG(S AƬAƠGԠMSDAADGNBS0- BNB PBGDGS? AƠYS. ANDB3MASKƠMSDAADGS ADAB00SԠUNàDŠϠҠNV SAMSDSŠMSDGSUN NSDAMSDAD6DAADGSN DBSDABGS SBNVNVDGSϠA MPҲDAA! SB.DS DƠVAUɠSŠNVDVAUŠN'V' A DBMPADUNïҠVƠDGS SBBƠNVϠA MPҲDAA! SB.DSԠSŠN''  DƠUNì MPDSɬɠNVSNԪ ҠPNG ҲSZN ұSZN SB DƠ+3 DƠN DƠMN MPDSɬɠҠԪ NSANS .Dà .Dà .5Dà5 BԠ B3Ԡ3 B00Ԡ00 MNàDà3 ASàDS SAG NԠNPҠUN UNNPGA̠UNԠN. SDNPDAABU MSDNP GNPDGԠAG NDGɠNPN.ƠNDGS MPNPMPUN ND   29103-80002 A S P0122 SXL              H0101 ASMBج̬ 00SP̬̬MϬԬ 00NAMŠS(399 NAMS̬399 .A.U0 .B.U NԠUMAN NԠŴ NԠSK ԠSG ԠSMAN Ԡ.MP ԠPSH ԠDNG ŴԠ000000 SKԠ000000 .Ԡ00000 .Ԡ00003 .3Ԡ00006 .Ԡ00005 003! 00!ŠSYSMSS-ADҠMANN 005! 006! 00ԠSANBŠNSAN(!SANN 00ԠSNؠBŠNSAN(!SYNAؠANAYZ 009ԠDDBŠNSAN(59 00ԠSGNԠBŠNSAN(6!NDؠƠSGN 0ԠSGSMANBŠUNNNA 0Ԡ.MPҬìSPGPSHBŠSUBUNŬNA 03ԠUMANBŠAB̬GBA 0ԠDNGBŠNGҬNA 05ԠŴBŠNGҬGBA̻ 06NAZŠŴϠ0 0ԠSKBŠNGҬGBA̠!ANSҠŠSAKPN 0NAZŠSKϠ0 09! 00S:A̠.MPҠ!GԠNPUԠPAAMS S̠NP SB.MP DƠ+ 0UMN:A̠$(SG(SGNԩ UMNSBSG DƠ+ DƠ. SB.A. DƠ+ 0UMAN:A̠$(SG(DD!GԠNԠSAMN UMANSBSG DƠ+ DƠ. SB.A. DƠ+ 03A̠$(SG(SAN!GԠUSHDD SBSG DƠ+ DƠ.3 SB.A. DƠ+ 0A̠$(SG(SNة!DϠSYNAؠANAYSS SBSG DƠ+ DƠ. SB.A. DƠ+ 05A̠SMAN!DϠSMANàANAYSS SBSMAN DƠ+ 06A̠PSH!UŠMMAND SBPSH   DƠ+ 0NԠDNGHNGϠUMANSŠGϠUMN DADNG SZA MPUMN MPUMAN 0NDS NDS 09ND$ P   29103-80003 B S 0122 SGMTR              H0101 3ASMB,R,L,C NAM SGMTR,8 6/19/75 SXL SEGMENTER ROUTINE .A. EQU 0 .B. EQU 1 ENT SEGNM ENT SEG ENT SGIN2 ENT EXBAS EXT .ENTR EXT EXEC SEGNM ASC 2,SG01 CURRENT SEGMENT OCT 46005 NAME BUFFER; TYPE =5 EXBAS NOP S DEC 1 INITIAL SEGMENT:SG01L .2 OCT 176000 .10 DEC 8 .S DEF S D10 DEC 10 *003 ! *010 LET EXEC BE SUBROUTINE,EXTERNAL *012 LET EXBAS BE INTEGER,GLOBAL *013 ! *014 ! * ENTER HERE DIRECTLY FROM NEW SEGMENT FWS NOP SGIN2 NOP JSB .ENTR DEF FWS *017 GOTO SEG1 JMP SEG1 *018 END *019 ! *020 SEG: FUNCTION(INDEX)GLOBAL INDEX NOP SEG NOP JSB .ENTR DEF INDEX *021 ! *022 !LOAD REQUESTED SEGMENT INTO CORE IF NOT ALREADY THERE *023 !INDEX::REQUESTED SUBROUTINE NUMBER *024 ! LDA FWS HAS A SEGMENT BEEN LOADED YET? SZA,RSS SKIP IF YES JMP SEG2 NO--USE INITIAL VALUE OF S SEG1 LDA FWS,I GET ADDRESS OF DIRECTORY TABLE. ADA INDEX,I * 0 <= TABLE VALUE <2000K THEN USE AS INDEX FOR * NEW SEGMENT NAME. LDA .A.,I STA S *027 IFNOT S AND 176000K THEN GOTO SEG2 AND .2 SZA,RSS JMP SEG2 LDA .S LDA 0,I CHASE RAL,CLE,SLA,ERA DOWN JMP *-2 INDIRECTS JMP SEG,I AND RETURN WITH 15-BIT ADDRESS SEG2 LDA S CLB DIV D10 CONVERT 2-DIGIT DECIMAL ALF,ALF ROTATE QUOTIENT TO HIGH 8 BITS ADA .B. PUT REMAINDER IN LOW 8 BITS ADA =B30060 CONVERT TO TWO-DIGIT ASCII STA SEGNM+1 *036 CALL EXEC(8,SEGNM) JSB EXEC DEF *+3 DEF .10 DEF SEGNM *037 END *038 END END     29103-80004 A S P0122 SPROC              H0101 7ASMBج̬ 00SP̬̬MϬԬ 00NAMŠSP( NAMSPì .A.U0 .B.U NԠASAK NԠAVAU NԠSMAN NԠPSH Ԡ.N ԠPP ԠSAK ԠSG ԠSPG ԠP ԠPP ASAKԠ000000 AVAUԠ000000 SAKԠ000000 ԠBSS .6BSS .BSS .DƠGN .9DƠNK .0DƠGN .DƠNK 003! 00!PSSPASNGSNGSANDPSHSNGS 005! 006ԠSMB̠BŠPSUDϬNA 00ԠASAKBŠNGҬGBA̠!ANSAK 00ԠAVAUBŠNGҬGBA̠!ANUNŠVAU 009ԠPPBŠUNNNA̠!SNGSANPUGŠUY 00ԠSAKBŠPSUDϬNA̠!SAKUY 0ԠSGBŠUNNNA̠!SGMNANUY 0ԠSPGBŠSUBUNŬNA̠!SAKSNGPUG 03ԠSYPBŠPSUDϬNA 0ԠPBŠPSUDϬNA 05NAZŠASAKAVAUSAKϠ3(0 06ԠPҬPPҠBŠNGҬNA 0! 0SP:SUBUN(NSҬGNNK NSҠNP GNNP NKNP SPàNP SB.N DƠNS 09! 00ASAKAVAU_0 A SAASAK SAAVAU 0AAYSD_PP(NSҩ?UNݠ\ HNƠ<0HNSAK(ASAK_Ԭ\ SAVAU_0$(SG(ԩ$(GNݬ\ SŠ$(NK .SBPP DƠ+ DƠNSҬ SZ MPSPì SA SZASS MP. DA SSASS MP. DA SBSAK DƠ+ DƠASAK MP.3 .A SAAVAU SBSG DƠ+ N]DƠ SB.A. DƠ+ DBGN SA.6 SB.B. DƠ+ .3MP.5 .DANK SB. SB.A. DƠ+ .5MP. 0ND 03! 0SMAN:SUBUNŠGBA SMANNP SB.N DƠSMAN 05P_0 A SAP 06NԠPPҠHNUN DAPP SZASS MPSMAN 0SP(PPҬGNNK SBSP DƠ+ DƠPP DƠ. DƠ.9 0P_SAK(SAK SBSAK DƠ+ DƠSAK SAP 09UN MPSMAN 030ND 03! 03GN:SUBUN GNNP SB.N DƠGN 033! 03SAK(SAK_AVAU DAAVAU SBSAK DƠ+ DƠSAK 035A̠SPG(ASAK SBSPG DƠ+ DƠASAK 036UN MPGN 03ND 03! 039NK:SUBUN NKNP SB.N DƠNK 00! 0SAK(ASAK_SAK(SAK SBSAK DƠ+ DƠSAK SBSAK DƠ+ DƠASAK 0UN MPNK 03ND 0! 05! 06PSH:SUBUNŠGBA PSHNP SB.N DƠPSH 0SP(PҬGNNK SBSP DƠ+ DƠP DƠ.0 DƠ. 0UN MPPSH 09ND 050! 05GN:SUBUN GNNP SB.N DƠGN 05! 053ƠAVAUHNSAK(ASAK_AVAU DAAVAU SZASS MP. DAAVAU  SBSAK DƠ+ DƠASAK 05UN .MPGN 055ND 056! 05NK:SUBUN NKNP SB.N DƠNK 05! 059UN MPNK 060ND 06ND ND 06ND$ 0  29103-80005 1715 S 0122 LDUMM ASM              H0101 ֈASMB,R,L NAM LDUMM,8 REV G 770415 ENT UFREB ENT LOCC ENT BPLOC ENT XCOM ENT DFLCM ENT FWAM ENT LWAM ENT FWABP ENT LWABP ENT FWAC ENT LWAC ENT NXTPG ENT XFER ENT LCOMM ENT NBPLK ENT LWAM1 ENT MAXA ENT MINA ENT MAXAB ENT MINAB ENT XBPLK ENT XMAXA ENT LINKF ENT UNDF1 ENT UNDFS ENT UNDX1 ENT UNDFX ENT EXTX1 ENT EXTX ENT LISTO ENT ABRTF ENT FILEX ENT BPLKS ENT GUESS ENT NGESS ENT NLINK ENT SEC ENT XSEC ENT PXFER ENT XGESS ENT ERCO ENT FREBE ENT .LCAT ENT .POSN ENT .READ ENT ENTR1 ENT DCB4 ENT DCBB4 ENT SLNKS ENT XLNKS ENT SYSIZ ENT XMINA ENT ERR ENT FPNAM ENT DCB ENT DCBBO ENT SODCB ENT SODC4 ENT OBT,CMDLN ENT CHAR,SOURC,SPTR ENT REV EXT RIC,STAK,PRFOP,SMBL ENT CCPTR,PTPTR ENT INLU,EKOLU,LSTLU,OUTLU,DNFLG ENT IAILU * * UFREB NOP 'USED' BP LINKS STACK POINTER. XCOM NOP COMMON LENGTH EACH MODULE DFLCM NOP DEFAULT COMMON FLAG INLU NOP IAILU NOP INTERACTIVE INPUT LU FLAG, =0 IF NON-IA EKOLU NOP LSTLU NOP OUTLU NOP DNFLG NOP CCPTR NOP PTPTR NOP REV NOP REVISION CODE STRING POINTER CHAR NOP SOURC NOP SPTR NOP OBT ASC 1, - BSS 40 COMMAND INPUT BUFFER LOCC OCT 000000 BPLOC OCT 000000 FWAM OCT 000000 LWAM OCT 000000 FWABP OCT 000000 LWABP OCT 000000 FWAC OCT 000000 LWAC OCT 000000 NXTPG OCT 000000 XFER OCT 000000 LCOMM OCT 000000 NBPLK OCT 000000 LWAM1 }< OCT 000000 MAXA OCT 000000 MINA OCT 000000 MAXAB OCT 000000 MINAB OCT 000000 XBPLK OCT 000000 XMAXA OCT 000000 CMDLN NOP LINKF OCT 000000 UNDF1 OCT 000000 UNDFS OCT 000000 UNDX1 OCT 000000 UNDFX OCT 000000 EXTX1 OCT 000000 EXTX OCT 000000 LISTO OCT 000000 ABRTF OCT 000000 FILEX OCT 000000 BPLKS OCT 000000 GUESS OCT 000000 NGESS OCT 000000 NLINK OCT 000000 SEC OCT 000000 XSEC OCT 000000 PXFER OCT 000000 XGESS OCT 000000 ERCO OCT 000000 FREBE OCT 000000 .LCAT OCT 000000 .POSN OCT 000000 .READ OCT 000000 ENTR1 NOP DCB4 DEF DCB+3 SLNKS OCT 000000 XLNKS OCT 000000 SYSIZ DEC 2 # SYMBOL TABLE PAGES -1 XMINA OCT 000000 ERR NOP FPNAM OCT 000000 DCB OCT 020040 OCT 020040 OCT 020040 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 BSS 127 DCBBO OCT 020040 OCT 020040 OCT 020040 DCBB4 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 BSS 127 SODCB OCT 020040 OCT 020040 OCT 020040 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 OCT 000000 * * THE FOLLOWING INITIALIZATIp/ ON CODE IS PART OF THE * DATA CONTROL BLOCK AREA FOR SODCB * * IT IS USED FOR OBTAINING ON,SXL PARAMETERS * RATHER THAN CALLING RMPAR * B EQU 1 M5 DEC -5 .PTR DEF INLU SPC 1 ENT .RMPR .RMPR NOP ENTRY/EXIT LDA .RMPR,I GET RETURN ADDRESS STA .RMPR SAVE LDA B,I GET PARAMETER STA .PTR,I SAVE ISZ .PTR INB ISZ M5 JMP *-5 JMP .RMPR,I BSS 115 SODC4 DEF SODCB+3 *031 END END   29103-80006 A S P0122 ULIBR              H0101 &ASMBҬ̬ NAMUBҬ NԠ..N Ԡ.D .A.U0 .B.U ԱBSS ԲBSS 3BSS ..NҠNP DA..NҬ SAԱADD.ƠSԠ.P. SZ..N DB..NҬ SBԲNYPNԠƠPSUD-VA. SZ..NҠSԠ MAŬNA DB.B. B̬B SBԲɠSԠԠƠPSUD-VA. ADAԲ NA SAԲ(N.Ơ.P.+ B̬ŬB SB3(ADD.ƠSԠA.P.- DB.B. MBNB ADB3-((N.ƠA.P.+ ADA.B. MBNB(N.ƠA.P.+ SSAƠ<0MŠA.P.'SS... DBԲUSŠ.P.UN MBŬNB-(P.UN+ DA3 A̬ASԠA.P.PNҠND SA3 PNBSZBSSNSHD? MP..NҬɠYSSϠ SZ3BUMPA.P.PN SB.DԠHA.P. DƠ3 SAԱɠSԠ.P. SZԱ MPP ND   29103-80007 A S P0122 DIAG              H0101 p(ASMBج̬ 00SP̬̬MϬԬ 00NAMŠDAG(!DAGNSàS NAMDAG .A.U0 .B.U NԠDAG Ԡ.N ԠSG ԠUMAN ҠBSS DAԠBSS .Ԡ00003 003ԠDGSԠBŠNSAN(3 00ԠSGBŠUNNNA 005ԠUMANBŠAB̬NA 006DAG:SUBUN(NϬDAAGBA NϠNP DAANP DAGNP SB.N DƠN 00_Nϻ DANϬ SA 00DA_DAA!SAVŠPAAMSAY. DADAA SADA 009A̠$(SG(DGSԩ(ҬDAԩ!ADSNGSGMNԦPNԠDAGN SBSG DƠ+ DƠ. SB.A. DƠ+3 DƠ DƠDA 00GϠUMAN MPUMAN 0ND 0ND ND 03ND$ C  29103-80008 A S P0122 SPTRU              H0101 :ASMBج̬ 00SP̬̬MϬԬ 00NAMŠSPU( NAMSPU .A.U0 .B.U NԠP NԠPP NԠP NԠPP NԠDP NԠDP NԠDPP NԠDP NԠS Ԡ.N Ԡ..N ԠGK ԠPUK PPҠBSS AGBSS ɠBSS ʠBSS KBSS DPPƠBSS PVBSS PƠBSS .Ԡ00000 .3Ԡ00000 .6BSS PPVBSS .BSS PVBSS PƠBSS .3Ԡ0 .6Ԡ0003 .Ԡ00000 .Ԡ00 .5BSS PPVBSS DPVBSS DPPVBSS .3BSS DPVBSS SVBSS 003! 00!SNGPNҠUYUNS: 005!P(PSUDϩADSҠSADNSNG 006!ANDNMNSHŠPN. 00!PP(UNNADSADANDNMNSH 00!PNҬPUGNGANYBKS 009!HHAŠMPY. 00!P(PSUDϩSAMŠASPBUԠҠHAA 0!SNGS.AHAAҠSNG 0!PNҠNANSHŠADDSS 03!HŠUNԠDHHŠSGN 0!BԠSԠƠHŠHAAҠSN 05!HŠGHԠHAƠƠHŠD. 06!PP(UNNSAMŠASPPBUԠҠHAA 0!SNGS. 0!DP(UNNADSADSNGNHŠVS 09!DN.USASND 00!AGUMNԠHHSAPNҠ 0!HŠSԠDƠHŠSNG. 0!DPP(UNNMVSASԠDMSNGAND 03!UNSPVUSD. 0!DP(UNNSAMŠASDPBUԠҠHAA 05!SNGS. 06!SҠ(UNNNAZSASNG. 0! 0ԠGKPUKBŠSUBUNŬNA 09! 030ԠPPҬAGɬʬKDPPƠBŠNGҠ!MPAS 03! 03RԠMSKBŠNGҬNSAN(K!N-H 033!NSNUMBҠƠDSNABK 03ԠSBԠBŠNGҬNSAN(00000K!SGNB 035ԠNSBԠBŠNGҬNSAN(K 036ԠHMSKBŠNGҬNSAN(00K!ԠHAƠMASK 03ԠHMSKBŠNGҬNSAN(3K!GHԠHAƠMASK 03ԠMàBŠNGҬNSAN(00K!MNAҠHAA 039! 00P:PSUD(PҩGBA̬ PҠNP PNP SAPV ASZ MA SAP SB..N DƠP DƠP 0ԠPҠBŠNG 0!PҠSPNҠϠNԠPSNNSNGϠB 03!ADMҠNN. 0!VAUŠSDϠBŠADҠN. 05!00000KSNAҠAHDASAMNA. 06!ƠMNAҠSNUNDHNADNGVAU 0!SSԠϠZϠANDUNSMADŠHPNҠUNHANGD. 0!ƠŠSAMPDHPҽ0ANנSNGS 09!AD. 050! 05ƠPƠHNGϠϠP DAP SZA MPP 05NԠPҠHNGϠA̱ DAPҬ SZASS MPA̱ 053PV_$P DAPҬ DA.A. SAPV 05P_P+ DAPҬ NA SAPҬ 055Ơ(PҠANDMSKMSKHNPP_PһP_$P AND. PA. SS MP. DAPҬ SAPP DAPҬ DA.A. SAPҬ 056ƠPVSBԠHNGϠA̱ .DAPV PA.3 MPA̱ 05UN DAPV MPP 05A̱:PV_0 A̱A SAPV 059UN MPP 060P:NԠPҠHNGK(Pҩ PDAPҬ SZA MP. SBYGK DƠ+ DƠPҬ 06D$P_PVP_P+ .DAPҬ DBPV SB.A. DAPҬ NA SAPҬ 06Ơ(PҠANDMSKMSKHNGK($Pҩ\ P_$P AND. PA. SS MP.5 DAPҬ SA.6 SBGK DƠ+ DƠ.6 DAPҬ DA.A. SAPҬ 063$P_SB .5DAPҬ DB.3 SB.A. 06UN DAPV MPP 065ND 066! 06PP:UNN(PPGBA̬ PPNP PPNP SB.N DƠPP 06ԠPPBŠNG 069!PPKSHŠSAMŠASHŠADMƠPP 00!HAԠHŠSNGSPUGDASԠSSANND. 0!HŠNDƠHŠSNGSADHŠNŠSNG 0!SPUGDANDBHHŠVAUŠANDHŠPN 03!AŠSԠϠ0. 0! 05PPVPP_0 A SAPPV SAPP 06PPV_P(PP?PUK(PPPP_0 SBP DƠ+ DƠPP SZSS MP. SA. SBPUK DƠ+ DƠPP A SAPP DA. .SAPPV 0ƠPPҠHNPUK(PPҩ DAPP SZASS MP.9 SBPUK DƠ+ DƠPP 0ƠPPHNUNSŠUN .9DAPP SZASS MP.0 DAPPV MPPP .0DAPPV MPPP 09ND 00! 0P:PSUD(PҩGBA̬ PҠNP PNP SAPV ASZ MA SAP SB..N DƠP DƠP 0ԠPҠBŠNG 03!PSHŠSAMŠASPPԠHAԠԠPAS 0!NHAAҠSNGSNSADƠDSNGS. 05!HAASNHŠVAUŠDAŠGHԠUSD. 06!MàSUSDASAMNA. 0!HŠԠHAƠƠADSDS. 0! 09ƠP<0HNAG_SBԻP_PҠANDNSBݬ\ SAG_0 DAPҬ SSASS MP. DA.3 SAAG DAPҬ AND.3 SAPҬ MP. .A SAAG 090ƠPƠHNGϠϠP .DAP SZA MPP 09NԠPҠHNGϠA̲ DAPҬ SZASS MPA̲ 09PV_HMSKANDƠAGHN$PҬ\ SŠ($P- DAAG SZASS MP. DAPҬ DA.A. MP.5 .DAPҬ DA.A. AƬA .5AND.6 SAPV 093ƠPVMàHNP_PҠҠAG\ GϠA̲ PA. SS MP. DAPҬ ҠAG SAPҬ MPA̲ 09ƠAGHN_P(Pҩ\ SŠP_PҠҠSB .DAAG SZASS MP.9 SBP DƠ+ DƠPҬ SA MP.0 .9DAPҬ Ҡ.3 SAPҬ 095UN .0DAPV MPP 096A̲:PV_0 A̲A SAPV 09UN MPP 09P:NԠPҠHNGK(Pҩ PDAPҬ SZA MP. SBGK DƠ+ DƠPҬ 099ƠAGԫHNP(Pҩ_($PҠANDHMSK(PVANDHMSK\ $P_SBݬ\ S$P_((PVANDHMSK-<\ ҠMû\ P_PҠҠSB .DAAG SZASS MP. DAPҬ DA.A. AND. SA.5 DAPV AND.6 Ҡ.5 SBP DƠ+ DƠPҬ DAPҬ DB.3 SB.A. MP.3 .DAPV AND.6 AƬA Ҡ. DBPҬ SA.B. DAPҬ Ҡ.3 SAPҬ 00UN .3DAPV MPP 0ND 0! 03PP:UNN(PPGBA̬ PPNP PPNP SB.N DƠPP 0ԠPPBŠNG 05!PPSHŠSAMŠASPPPԠHAԠԠPAS 06!NHAAҠSNGS. 0! 0PP_0 A SAPP 09PPV_P(PP?PUK(PPPP_0\ UN SBP DƠ+ DƠPP SZSS MP.6 SBPUK DƠ+ DƠPP A SAPP DAPPV MPPP .6SAPPV 0ƠPPҠHNPUK(PPҩ DAPP SZASS MP. SBPUK DƠ+ DƠPP UN .DAPPV MPPP ND 3! DP:SUBUN(DPҬPҩGBA̬ DPҠNP PҠNP DPԠNP SB.N DƠDP 5ԠDPҬPҠBŠNG 6!DPԠDMNSHŠUNԠPN.ƠHŠUN !PNҠUASHŠNhA̠PNҠANUNS !MAD. 9! 0ƠDPҽPҠHNUN DADPҬ PAPҬ SS MP. MPDPԬ K_DP .DADPҬ SAK NԠKANDMSKHNK_PҠҠMSK\ AAYSDϠ۠\ Ơ$KDPҠHN\ GϠϠDPԱ\ SŠK_$KҠMSK AND. SZA MPDPԱ DAPҬ Ҡ. SAK .9DAK PADPҬ MPDPԱ DAK Ҡ. SAK MP.9 3DPԱ:DP_K- DPԱA ADAK SADPҬ UN MPDPԬ 5ND 6! DP:UNN(DPҬPҩGBA̬ DPҠNP PҠNP DPNP SB.N DƠDP ԠDPҬPҠBŠNG 9!DPADSHŠDPҠϠHŠNŠASԠAD 30!HP.ƠHŠBGNNNGƠHŠSNGS 3!NUNDDPVSSԠϠ0ANDANAUN 3!SMAD. 33! 3DP(DPҬPҩ?GϠA3 SBDP DƠ+3 DƠDPҬ DƠPҬ SZ MPA3 35_DP DADPҬ SA 36DP(ɬPҩ?GϠA3 SBDP DƠ+3 DƠ DƠPҬ SZ MPA3 3DPV_$ DAɬ SADPV 3UN MPDP 39A3:DPV_0 A3A SADPV 0UN MPDP ND ! 3DPP:UNN(DPPPPGBA̬ DPPNP PPNP DPPNP SB.N DƠDPP M ԠDPPPPBŠNG 5!DPPKSHŠSAMŠASDPPԠHŠNDƠHŠSNG 6!SMVDBAKANDMPDBKSAŠPUGD. _DPP DADPP SA DPP_0 A SADPP 9DPPV_DP(ʬPP?DPP_ SBDP DƠ+3 DƠ DƠPP SZSS MP.3 SA.3 ANA SADPP DA.3 .3SADPPV 50$_SB DA.3 SAʬ 5Ơ+DPPHNPUK(DPP DA NA PADPP MP.33 SBPUK DƠ+ DƠDPP 5DPP_ .33DA SADPP 53ƠDPPƠHNUNSŠUN DADPP SZASS MP.3 DADPPV MPDPP .3DADPPV MPDPP 5ND 55! 56DP:UNN(DPҬPҩGBA̬ DPҠNP PҠNP DPNP SB.N DƠDP 5ԠDPҬPҠBŠNG 5!DPSHŠSAMŠASDPPԠHAԠԠPAS 59!NHAAҠSNGS. 60! 6ƠDP<0HNAG_SBݬ\ SŠAG_0 DADPҬ SSASS MP.35 DA.3 SAAG MP.36 .35A SAAG 6_DPҠANDNSB .36DADPҬ AND.3 SA 63_PҠANDNSB DAPҬ AND.3 SA 6DP(ɬʩ?GϠA̴ SBDP DƠ+3 DƠ DƠ SZ MPA̴ 65ƠɽʠHNƠAG0HNƠP<0HN\ GϠA̴ݠ DA PA SS MP.3 0.* DAAG SZA MP.3 DAPҬ SSA MPA̴ 66DP_ƠAGHN(DPҠANDNSBԩ\ SŠ(ɠҠSBԩ .3DAAG SZASS MP.39 DADPҬ AND.3 MP.0 .39DA Ҡ.3 .0SADPҬ 6DPV_HMSKANDƠAGHN$ɬSŠ$- DAAG SZASS MP. DAɬ MP. .DAɬ AƬA .AND.6 SADPV 6UN MPDP 69A̴:DPV_0 A̴A SADPV 0UN MPDP ND ! 3S:UNN(SPҩGBA SPҠNP SҠNP SB.N DƠSP ԠSPҠBŠNG 5!SҠGSABKƠKSPAŠANDUNSA 6!PNҠϠԠNBHSAGUMNԠANDS !VAU.HŠSԠDƠHŠBKSS !ϠMNA.HSUNŠSNNDD 9!NAZŠASNGSNA̠PNҬAND 0!SUNԠPN. ! GK(SPҩ SBGK DƠ+ DƠSPҬ 3SV_SP DASPҬ SASV $SV_SB DA.3 SASV 5UN DASV MPSҬ 6ND ND ND ND$ C0  29103-80009 A S P0122 PAGER              H0101 ASMBج̬ 00SP̬̬MϬԬ 00NAMŠPAG( NAMPAGҬ .A.U0 .B.U NԠUN NԠPAG NԠS NԠS NԠAS NԠKP NԠPD NԠPDSZ NԠS NԠK NԠSSZ NԠSZ NԠD NԠZZZ NԠPAG NԠPGPG NԠGAB NԠGM Ԡ.N Ԡ.MPY Ԡ.DV Ԡ..N ԠBAS ԠDAG Ԡ UNԠBSS PAGŠBSS SԠBSS SԠBSS ASԠBSS KPBSS PDBSS00 PDSZBSS SԠԠ00000 KBSS SSZBSS SZŠBSS DBSS ZZZBSS PAGVBSS PAGƠBSS .3Ԡ000 .BSS .5Ԡ0600 KBSS SàBSS .6BSS .BSS .Ԡ00000 .9Ԡ00000 .0BSS .BSS .Ԡ00000 ADDҠBSS PDNؠBSS KBSS DADBSS .3Ԡ0 ɠBSS .Ԡ .DƠPD .9Ԡ00006 .0Ԡ000000 .Ԡ000003 .3BSS .BSS PGADBSS .Ԡ60 DPNϠBSS .30BSS .3Ԡ00000 MBSS NBSS ѠBSS .3Ԡ00000 003! 00!HSMDUŠHANDSAANƠDYNAMàŠAAҠSYMBS 005!ANDҠKSPA.SYMB̠AANSMHANZDHUAVUA 006!ADDSSNGPAGNGSHMŠHŠKSPAŠSMHANZDHUA 00!DSZŠABSUŠADDSSSHM. 00! 009ԠUNԠBŠNGҬGBA 00ԠBASBŠNGҬNA!SԠDŠMMY 0ԠPAGŠBŠNGҬGBA̠!AGSԠPAGŠNUMB 0ԠUNԠBŠNGҠ!ASԠUSAGŠUN 03ԠSԠBŠNGҬGBA̠!Š7KSPAŠSԠPN 0ԠSԠBŠNGҬGBA̠!SMASԠADDSSNԠUSD 05ԠASԠBŠNGҬGBA̠!AGSԠADDSSNԠUSD 06ԠKPBŠNGҬGBA̠!AGSԠUSABŠADDSSMD 0ԠPD(00BŠNGҠ!PAGŠDYҠSYMB̠AB 0ԠPDSZBŠNGҬGBA 09ԠSԠBŠNGҬGBA!SSN-DBK 00NAZŠSԠϠ! 0ԠDAGBŠSUBUNŬNA 0ԠàBŠSUBUNŬNA 03ԠKBŠNGҬGBA̠!SԠNSNAK 0ԠSSZBŠNGҬGBA̠!N.ƠAKSNNSN 05ԠSZŠBŠNGҬGBA̠!N.ƠSSAK 06ԠDBŠNGҬGBA 0ԠPDBŠNGҠ(00GBA 0ԠZZZBŠNGҬGBA 09! 030!MAMUMS..PAGSADSUA̠ϠHŠSZŠ 03!PDAAYҠSSƠHŠ-ŠSAG. 03! 033PAG:PSUD(PAGA3GBA PAGA3NP PAGŠNP SAPAGV ASZ MA SAPAG SB..N DƠPAGA3 DƠPAG 03! 035!NSSYDSPAGŠDƠVUA̠ADDSS 036! 03ƠPAGƠ\ HNPAGA3_(PAGA3ANDKҠ((PAGV-ASMBҬ̬ NAMSM .B.U .A.U0 NԠSM Ԡ.NҬNSYSMA SƱNP SؠԠ0003 SMSAUNNA̠DϠDMNŠƠA HAAҠSNGMAHSANYSYMB̠NHŠSYMB̠AB (UNYDNDNYPNԠNAMSNY. UNS0ƠNϠMAHUS S..ADDSSƠMAHƠNŠUD. SҠNP SMNP SB.N DƠS SAԠSYMB̠ABŠSAN DASؠSAԠƠSANAҠPUNUAN SASƱ GԠNԠSYMB'SADDSS 039SƲ:SƱ_NSY(SƱ?UN0 SƲSBNSY DƠ+ DƠSƱ ASZ MPSMɠNϠMŠSYMBSUNZ 00ƠSMA(SƱSҩHNUNSƱ!MAHUDND SBSMA DƠ+3 DƠSƱ DƠSҬ SZASS MPSƲHSSYMB̠DDN'ԠMAHGԠNԠN DASƱUNSYMB̠ABŠADDSS MPSMɠҠ0ƠNϠMAHUD. ND ߠ  29103-80055 A S P0122 BLOK              H0101 z4ASMBج̬ 00SP̬̬MϬԬ 00NAMŠBK( NAMBK .A.U0 .B.U NԠBK Ԡ.N Ԡ.D ԠABU ԠPP ԠBNY ײBSS ױBSS ADDSBSS UNԠBSS .Ԡ00005 3BSS HKBSS DAABSS GBSS .Ԡ .5Ԡ00000 .6Ԡ000003 .Ԡ00006 .BSS .9Ԡ00000 003BK:SUBUN(SGGBA SGNP BKNP SB.N DƠSG 00! 005!SUBUNŠϠAŠDSNHŠABSUŠ 006!MHŠNKSSNG"SG". 00!"SG"SPUGDN. 00! 009!SGSASNGƠNANADSUBSNGSHŠS 00!DNAHSUBSNGSHŠADDSSƠHŠSUBSNG 0!HŠSUBSNGSAŠDMDBYADNANNG-ҠHŠND 0!ƠHŠSNG 03! 0!PDU:HŠADDSSƠAHSUBSNGSBANDASH 05!ADDSSƠHŠABSUŠDNKADDSSSAŠBAND 06!MHŠNKSSNGUSNGHŠUNNPPUP 0!5DS.ANABSUŠDSMADŬNUDNGD 0!NGHABSUŠADADDSSANDHKSUMNBB-MPA- 09!BŠMAԬHNVҠHŠBUҠBMSU̠ҠASUBSNG 00!SHAUSD.DSAŠNϠHŠABSUŠ 0!UN̠HŠNKSSNGHASBNHAUSD. 0! 03ԠABUԠBŠSUBUNŬNA 0ԠPPBŠUNNNA 05ԠBNYBŠNGҬNA 06ײ_ױ_BNY+!NAZŠBUҠPNS SB.D DƠBNY SAױ NA SAײ 0B:ADDS_PP(SG?UNݠ!ADDSSƠSUBSNG. BSBPP DƠ+ DƠSG SZ MPBK SAADDS 0B:UN_!UN. BDA. SAUN 093_ײ+ DAײ NA SA3 030HK$ײ_ADDS DAADDS SAHK SAײ 03$ױ_0 A SAױ 03B3:DAA_PP(SG?G_0GϠPݽ-HNG_GϠP B3SBPP DƠ+ DƠSG SZSS MP. A SAG MPP .SADAA PA. SS MP.3 ANA SAG MPP 033HK_HK+$3_DAAݠ!SŠDAAKPHKSUM. .3DADAA SA3 ADAHK SAHK 033_3+ DA3 NA SA3 035$ױ_$ױ+00K!NS.UN. DAױ ADA.5 SAױ 036ADDS_ADDS+ DAADDS NA SAADDS 03UN_UN-ݽ0HNGϠB3 A ADAUN SAUN SSASS MPB3 03G_3!BUҠU̠NDN. DA.6 SAG 039P:$3_HK!HKSUMNϠD. PԠDAHK SA3 00A̠ABU(50-UNԬBNY DAUN MANA ADA. SA. SBABU DƠ+3 DƠ. DƠBNY 0NԠGHNUN!SNGHAUSD. DAG SZASS MPBK 0ƠGHNGϠB!SAԠNנSUBSNG. DAG PA.9 MPB 03GϠB MPB 0ND 05ND ND 06ND$    29103-80056 A S P0122 STMA              H0101 2ASMBج̬ 00SP̬̬MϬԬ 00NAMŠSMA( NAMSMA .A.U0 .B.U NԠSMA Ԡ.N ԠP ԠGAB SMAVBSS NPҠBSS ADDҠBSS DBSS .Ԡ00000 HAҠBSS .3Ԡ00000 .Ԡ000 .5Ԡ0003 .BSS .9Ԡ00000 .0Ԡ 003!UNNϠDMNŠƠHŠSYMB̠AԠSADNHŠSYMB̠AB 00!MAHSHŠHAAҠSNGS. 005! 006! 00ԠPBŠPSUDϬNA 00ԠGABBŠSUBUNŬNA 009! 00SMA:UNN(SADSҩGBA SADNP SҠNP SMANP SB.N DƠSAD 0NP_S DASҬ SANP 0GAB(SADADDҩ!GԠŠADDSSƠSYMB SBGAB DƠ+3 DƠSAD DƠADD 03D_$(ADD+ DAADD ADA. DA.A. SAD 0NԠD<0HNGϠSNҠ!ҠHAAҠNAM SSASS MPSN 05GAB(DADDҩ!NDADDSSƠNAM. SBGAB DƠ+3 DƠD DƠADD 06D_0 A SAD 0S:HA_P(NPҩ?(DAND00KHN\ GϠSUìSŠGϠA S SBP DƠ+ DƠNP SZSS MP. DAD AND.3 SZASS MPA MPSU .SAHA 0D_$ADD DAADDҬ SAD 09((D- 29103-80079 1715 S 0122 SG11L ASM              H0101 vASMB,X,L NAM SG11L,5 REV G 770321 ENT SEG11 EXT UMAIN EXT SGIN2 EXT PRFOP EXT SXLNM TBL DEF * DEF 1 DEF 1 DEF 1 DEF 1 DEF 1 DEF 1 DEF 1 DEF 1 DEF 1 DEF 1 DEF 1 DEF 1 DEF 1 DEF 1 DEF 2 DEF 2 DEF 2 DEF 2 DEF 2 DEF 2 DEF 2 DEF 2 DEF 2 DEF 2 DEF 3 DEF 4 DEF 5 DEF 5 DEF 5 DEF 5 DEF 6 DEF 7 DEF 7 DEF 7 DEF 8 DEF 8 DEF 9 DEF 9 DEF 9 DEF 9 DEF 9 DEF 9 DEF 9 DEF 9 DEF 9 DEF 9 DEF 10 DEF PRFOP DEF SXLNM DEF 12 DEF 12 DEF 13 DEF 13 DEF 13 DEF 14 DEF 14 DEF 15 DEF 16 DEF 17 DEF 18 DEF 19 DEF 20 DEF 20 DEF 20 DEF 21 DEF 21 DEF 12 SEG11 NOP JSB SGIN2 DEF *+2 DEF TBL END SEG11  -3 29103-80080 A S P0122 NAMR              H0101 3ASMBج̬ 00SP̬̬MϬԬ 00NAMŠNAM(!NAMŠDPSS NAMNAMҬ .A.U0 .B.U NԠNAM Ԡ.N ԠDAG ԠSMM Ԡ. ԠSVU ԠP ԠSAK ԠGNNS ԠB6 ԠSMA ԠS ԠMN Ԡ ԠBP ԠNGH ԠN ԠABP ԠA ԠA ԠNPG ԠMM ԠNK ԠUNDر ԠUND Ԡر Ԡ ԠBNYA ԠBPKS ԠNBPK ԠGUSS ԠNGSS ԠNNK Ԡ Ԡ.A Ԡ Ԡ ԠDB ԠDBB ԠB ԠBPK ԠGSS ԠS ԠS ԠBPñ ԠSH ԠV ԠMV. .BSS .Ԡ .3Ԡ0000 .5Ԡ00000 .6Ԡ000000 ԠBSS PҠBSS PGBSS àBSS .Ԡ005 .Ԡ0 .5Ԡ00005 ABSS ɠBSS .0Ԡ00000 BBSS 003ԠPԠBŠNSAN(005K!"P" 00ԠGSSSGSSBŠSUBUN 005ԠDAGSPGSMM.ƠBŠSUBUNŬNA 006ԠSVUPSAKBŠPSUDϬNA 00ԠGNNSB6SMASҬMNBŠUNNNA 00NAM:SUBUN(NAMجNAMSجPGHPNVPAGŬNP̱\ NP̲APAGGBìSƬAì\ ASAƬDƬBSHSHH\ BKUP.SAVŬNBKNHAìAìMPBASŬ\ BASŬBBASŬNجNұ\ GBA NAMؠNP NAMSؠNP PGHNP PNNP VNP PAGŠNP NP̱NP NP̲NP APAGNP GBNP .JàNP SNP ƠNP AàNP ASNP AƠNP DƠNP BNP SHNP SHHNP BKUPNP .SAVŠNP NBKNP NHNP AàNP AàNP MNP PBASŠNP BASŠNP BBASŠNP NؠNP NұNP NAMҠNP SB.N DƠNAM 009ԠìBPìNGHNɬABPAìAìNPG\ MMNKƬUNDرUNDجرج\ BNYABPKSNBPKGUSSNGSSNNK\ Ϭ.AԬìҬDBDBBBŬ\ BPKGSSSìSàBŠNGҬNA 00ԠBPñBŠAB̬NA 0ԠSHVƬSPGMV.DAGBŠSUBUNŬNA 0A̠SH SBSH DƠ+ 03!GԠPSNƠAABŠ 0A̠$(.Aԩ($DBҬìSƩ DADB DB.A SA. SB.B. DƠ+6 DƠ. DƠ DƠì DƠS DƠƬ 05!GԠPSNƠABS. 06A̠.(DBBҬAìASAƩ SB. DƠ+6 DƠDBB DƠ DƠAì DƠAS DƠAƬ 0NHDƬBϬGUSSNGSSSìNP̱\ NP̲_0 A SANH SADƬ SAB SA SAGUSS SANGSS SAS SANP̱ SANP̲ 0SH_SHH DASHH SASH 09BKUP_- A SABKUP 00A̠MV.(NBPK.SAVŬ9 SBMV. DƠ+ DƠNBPK DƠ.SAVŬ DƠ.3 0A̠V SBV DƠ+ 0ƠàHNA̠DAG(0!NϠNAMD DA PA.5 MP. SBDAG DƠ+3 DƠ.5 DƠ.6 03NAM_GNNS .SBGNNS DƠ+ SANAMج 0_N+ DAN NA SA 05P_NAMS DANAMSج SAP 06NBK_NBPK DANBPK SANBK 0A_Aû DAA SAAì 0A_Aû DAA SAAì 09M_MM DAMM SAM 030PG_P(Pҩ?GϠP!SKPMDUŠNAMŠHKƠNNŠGVN SBP DƠ+ DƠP SZ MPP SAPG 03N:ƠPGPԠHN_-GϠN NDAPG PA. SS MP. A SA MPN 03ƠSMA(PGNAMةHN\MAHUNDϠHSMDUNAM NԠàHNGϠPSŠGϠSKP .SBSMA DƠ+3 DƠPG DƠNAMج SZASS MPN DA SZA MPSKP MPP 033N:PG_P(Pҩ?ƠàHNGϠPSŠGϠSKP N SBP DƠ+ DƠP SZSS MP.0 DA SZASS MPSKP MPP .0SAPG 03GϠN MPN 035!SKPMDU 036SKP:SH_- SKPA SASH 03GϠP9!SԠSKPPNGAG MPP9 03! 039! 00!PSSSԠƠNAM 0!ANAMDHASBNADANDHҠNϠPGAMSHAV 0!SPAYBNNAMDҠHSNAMMAHSNŠϮƠHS 03!GVN.HKMMYBUNDSMANANMAMUMMMNNGH 0!ANDSԠUPϠAMPԠADNG. 05! 06P:PN_PGH_$ݠANDK PDAԬ SAPGH AND. SAPN 0_+ DA NA SA 0GB_$ݠHN\ƠBDAASAԠNנBPNKSSUBSNG ƠGB<0HNA̠DAG(3NAMةS\ P(BPK_-P(BPK_BP+GB DAԬ SAGB SZASS MP. DAGB SSASS MP. SBDAG DƠ+3 DƠ.5 DƠNAMج MP. .DA. SBP DƠ+ DƠBPK DABP ADAGB SBP DƠ+ DƠBPK 09ƠBP+GBABPHNA̠DAG(9NAMة!BPV .DABP ADAGB MANA ADAABP SSASS MP.6 SBDAG DƠ+3 DƠ.3 DƠNAMج 050!HKҠMAMUMMMN 05Ơ$(_+ݩHNSMM($ԩ!PSSMMNDAAN. .6DA NA SA DA.A. SZASS MP. SBSMM DƠ+ DƠԬ 05_+ .DA NA SA 053!PSSVSND. 05!HŠVSNDŠ̠HAVŠNԠA̠PAAMSBYNDHŠ 055!MMNNGH. 056A_BNYA+NGH!GԠNDƠDADDSS DABNYA ADANGH SAA 05_S(V!NAZŠVSNDŠSNG SBS DƠ+ DƠV SA 05UN̠ԽADP(ɩ_$Ի_+ .DA PAA MPƱ DAԬ:` SBP DƠ+ DƠ DA NA SA MP. 059!MAKŠGUSSASϠPMAYAA. 060Ʊ:NPG_PAG_B6(é+000K!MPUŠPAGŠADDSSS ƱSBB6 DƠ+ DƠ SAPAGŬ ADA.0 SANPG 06N(NKƠANDHNGϠP3!BASPAGŠNYMD DANK AND.5 SZASS MPP3 06ƠPGH-HNA̠SGSS?GϠP3ݻGSSGϠP3 DAPGH PA. SS MP. SBSGSS DƠ+ SZ MPP3 SBGSS DƠ+ MPP3 063!HKƠAGUSSAANDSϠBŠAD 06ƠPAGŽB6(+PNHNGϠP!NϠPAGŠSSNG. .DA ADAPN SA. SBB6 DƠ+ DƠ. PAPAGŬ MPP 065SGSS?A_NPG-ûB_PN-ANGSS_(MN((A-B- SBSGSS DƠ+ SZSS MP. DA MANA ADANPG SAA MANA ADAPN SAB DAA AS SA. SBMN DƠ+3 DƠ. DƠB ASAS SANGSS 066GSS .SBGSS DƠ+ 06P:S_S(Sé PSBS DƠ+ DƠS SAS 06P(Sé_+PN DA ADAPN SBP DƠ+ DƠS 069P3:NPG_PAG_B6(é+000K P3SBB6 DƠ+ DƠ SAPAGŬ ADA.0 SANPG 00APAG_B6(+PN!MPUŠASPAGŠHSMDU DA ADAPN SA. SBB6 DƠ+ DƠ. SAAPAG 0P5:PBAS_û P5DA SAPBASŬ 0BBAS_BPû DABP SABBASŬ 03BAS_A!SԠANBASS DAA SABASŬ 0_S(ر SBS DƠ+ DƠر SA 05N_S(Nұ SBS DƠ+ DƠNұ SANج 06UND_S(UNDر SBS DƠ+ DƠUNDر SAUND 0!SAVŠDSAKNNSƠBASŠPAGŠNKSSAKNASŠA 0!BAKUPPASSSAD. 09P_B DAB SAP 00AAYSDNԠ$PҠHNGϠP9\ SAK(B_P(Pҩ?GϠP9 .3DAPҬ SZASS MPP9 SBP DƠ+ DƠP SZ MPP9 SBSAK DƠ+ DƠB MP.3 0P9:A̠VƠ!GԠNԠD. P9SBV DƠ+ 0GϠBPñ MPBPñ 03ND 0SGSS:SUBUNŠ SGSSNP SB.N DƠSGSS 05NԠNNKHNUN DANNK SZA MP. MPSGSS 06NGSS_SVU(NNK . SBSVU DƠ+ DƠNNK SANGSS 0UN MPSGSS 0ND 09GSS:SUBUN GSSNP SB.N DƠGSS 090GUSS_S(GSS SBS DƠ+ DƠGSS SAGUSS 09P(GSS_ D*($A SBP DƠ+ DƠGSS 09_+NGSS DA ADANGSS SA 093UN MPGSS 09ND 095ND ND 096ND$ o* . : 29103-80081 A S P0122 SCOMM              H0101 0ASMBج̬ 00SP̬̬MϬԬ 00NAMŠSMM( NAMSMM .A.U0 .B.U NԠSMM Ԡ.N ԠA ԠA ԠAM Ԡ ԠMM ԠMNA ԠDAG .Ԡ00006 003!SUBUNŠϠHANDŠMMNDAANSNUDNGDAUS. 00SMM:SUBUN(MGBA MNP SMMNP SB.N DƠM 005ԠMBŠNGҠ!NGHƠUNԠMMNDAA 006ԠAìAìAMìMMMNABŠNGҬNA 00ԠDAGBŠSUBUNŬNA 00!HKҠDAUS. 009ƠAàHNGϠSM!AàHASBNDND DAA SZA MPSM 00ƠAàHNGϠSM5!AàNYHASBNDND. DAA SZA MPSM5 0!DAUԠDNNƠMMNHNNHҠAàNҠAàHAS 0!BNDND:PAŠMMNSANGAԠUNԠVAUŠ 03!ìANDNASŠàVҠHŠMMNBK 0SM:A__A_+MM_M- SMDA SAA DBM SBMM ADB.A. SB A ADA.B. SAA 05UN MPSMM 06SM:ƠAàHN\BHDNDHKҠMMNNGH MM_A-A+ƠMM 29103-80100 A S P0122 RDCRD              H0101 .ASMBج̬ 00SP̬̬MϬԬ 00NAMŠDD( NAMDD .A.U0 .B.U NԠDD Ԡ.N Ԡ.D ԠSU ԠSP ԠSDô ԠMDN ԠHA ԠB ԠNU ԠKU ԠSDB ԠAD Ԡ ԠBAK ԠDAG ԠS ԠP NNԠ00006 PMPԠԠ0030 Ԡ0653 ԠBSS UBSS .Ԡ0000 .3Ԡ00000 .Ԡ00000 ҠBSS .5BSS .6Ԡ000050 .9Ԡ00000 àBSS .Ԡ000 .Ԡ05000 .6Ԡ0600 .Ԡ0000 .Ԡ000000 .9Ԡ000 .0Ԡ00000 ̠BSS .5Ԡ00005 003 00!SUBUNŠϠADNԠN 005D:SUBUN DNP SB.N DƠD 006ԠSUìSPҠBŠNGҬNA 00ԠSDôMDNHAҬBԬNUKUBŠNGҬNA 00ԠSDBBŠNGҬNA 009ԠADƠBŠSUBUNŬNA 00ԠìBAKDAGBŠSUBUNŬNA 0ԠSҠBŠUNNNA 0ԠPBŠPSUDϬNA 03ԠNNBŠNGҠ!NNUANHAA 0NAZŠNNϠ"" 05ԠMDBŠNSAN(600K!MMANDDHA(- 06ԠPMPԠBŠNG(!PMPԠHAA 0NAZŠPMPԠϠ30K"-_" 00:HAҬ_B+ 0SB.D DƠB NA SAHA SA 09U_NUANDK DANU AND. SAU 00ƠUHNA̠(NUPMPԬ!PNԠPMP PA.3 SS MP. SB DƠ+5 DƠ. DƠNU DƠPMP DƠ. 0A̠AD($SDôҬ$Ԭ0MDN .DASDô SA.5 SBAD DƠ+6 DƠ.5 DƠ DƠԬ DƠ.6 DƠMDN 0ƠMDN<0HNA̠BAKGϠ0!--ANSҠBAK DAMDN SSASS MP. SBBAK DƠ+ MP0 03Ơ<0HNA̠DAG(6SDB .DA SSASS MP. SB.D DƠSDB SA.5 SBDAG DƠ+3 DƠ.9 DƠ.5 0ƠKUHNA̠(KUBԬMDN+ .DAKU SZASS MP.0 DAMDN NA SA.5 SB DƠ+5 DƠ. DƠKU DƠB DƠ.5 05!HKҠMMN 06_$ԠAND00Kݠ5000K\""GNŠMMNS HNGϠ0!GNŠMMNS .0DAԬ AND. SA PA. MP0 0!HKҠMMANDDNҠHAA 0ƠãMDHNƠUHN\ A̠DAG(0ݬ\!MMANDDUDBUԠNԠUND SŠ$_($ԠANDKҠ0000K!SԠMMANDDHAҠϠBANK DA PA.6 MP. DAU PA.3 MP.3 SBDAG DƠ+3 DƠ. DƠ. .3MP.5 .DAԬ AND.9 Ҡ.0 SAԬ 09UN .5MPD 030ND 03DD:SUBUNŠGBA DDNP SB.N DƠDD 03!SUBUNŠϠADNԠSAMN 033SU_S(SPҩ SBS DƠ+ DƠSP SASU 03ұ:A̠D!GԠNԠN ұSBD DƠ+ 035_MDN<- 1 DAMDN AS SA 036HŠ̠D\ _$ԻNԠ(̠ANDHN_-<\ SŠ_+_àANDKݽNNHNGϠұ\ P(SPҩ_û_- .DA SZASS MP. DAԬ SA DA AND.3 SZA MP.3 DA AƬA SA MP. .3DA NA SA .DA AND.9 SA PANN MPұ DA SBP DƠ+ DƠSP A ADA SA MP. 03P(SPҩ_5K!PUԠNAAGŠUN .DA.5 SBP DƠ+ DƠSP 03SP_SUà!SAԠAԠHADƠSNG DASU SASP 039UN MPDD 00ND 0ND ND 0ND$ U 9A 29103-80101 A S P0122 CRTOP              H0101 9ASMBج̬ 00SP̬̬MϬԬ 00NAMŠP( NAMP .A.U0 .B.U NԠP Ԡ.N Ԡ.D ԠSAK ԠSVU ԠDAG ԠBNK ԠMSB ԠA ԠASAK ԠDB ԠDB Ԡ SZŠBSS YPŠBSS ҠBSS SàBSS SVBSS .3Ԡ000000 .Ԡ000003 .5BSS .Ԡ0000 003! 00!AŠŠPSHPA 005! 006!NNSƠASAKHNAD(MPƠSAKDN 00! 00!NGAVŠBKSZ 009!S..PNҠϠŠNAM 00!NGAVŠYPŠ(--6Ҡ- 0!S..PNҠϠADGŠDN(HHSNUMé 0!S..PNҠϠSUYD(HHSASϠNUMé 03! 0! 05ԠSAKSVUBŠPSUDϬNA 06ԠDAGBNKMSB̬AԠBŠSUBUNŬNA 0ԠASAKDBDBҠBŠNGҬNA 0ԠSZŬYPŬҬSàBŠNG 09S:UNN SNP SB.N DƠS 00UN(SV_SAK(ASAKݠHNSVU(SV\ SŠ0ݩ SBSAK DƠ+ DƠASAK SASV SZASS MP. SBSVU DƠ+ DƠSV MP. .DA.3 .MPS 0ND 0P:SUBUNŠGBA PNP SB.N DƠP 03SZ_-SAK(ASAK!GԠPS.BKSZ SBSAK DƠ+ DƠASAK MANA SASZ 0A̠BNK(DB3 SBBNK DƠ+3 DƠDB DƠ. 05A̠MSB(SAK(ASAKDBYPũ!BANKMVŠ SBSAK S  DƠ+ DƠASAK SA.5 SBMSB DƠ+ DƠ.5 DƠDB DƠYP 06!GԠŠNAMŠANDMVŠϠDAAN̠BKNAMŠAA 0YP_-SAK(ASAK!GԠPS.ŠYP SBSAK DƠ+ DƠASAK MANA SAYP 0!GԠADGŠ.D.ANDSUYDŠVAU 09_S SBS DƠ+ SA 030S_S SBS DƠ+ SAS 03! 03!NנAŠHŠ 033A̠A($DBҬDBSZŬYPŬSìҩ DADB SA.5 SBA DƠ+ DƠ.5 DƠ DƠDB DƠSZ DƠYP DƠS DƠ 03Ơ<0HNA̠DAG(0DB!AŠŠ DA SSASS MP.6 SB.D DƠDB SA.5 SBDAG DƠ+3 DƠ. DƠ.5 035UN .6MPP 036ND 03ND ND 03ND$   :A 29103-80102 A S P0122 SG18L              H0101 ASMBج NAMSG̬5 NԠSG ԠUMAN ԠSGN ԠP B̠DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ3 DƠ DƠ5 DƠ5 DƠ5 DƠ5 DƠ6 DƠ DƠ DƠ DƠ DƠ DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ0 DƠ DƠ DƠ DƠ DƠ3 DƠ3 DƠ3 DƠ DƠ DƠ5 DƠ6 DƠ DƠP DƠ9 DƠ0 DƠ0 DƠ0 DƠ DƠ DƠ SGNP SBSGN DƠ+ DƠB NDSG J ;A 29103-80103 A S P0122 SG19L              H0101 ASMBج NAMSG9̬5 NԠSG9 ԠUMAN ԠSGN ԠSNPP B̠DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ DƠ3 DƠ DƠ5 DƠ5 DƠ5 DƠ5 DƠ6 DƠ DƠ DƠ DƠ DƠ DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ9 DƠ0 DƠ DƠ DƠ DƠ DƠ3 DƠ3 DƠ3 DƠ DƠ DƠ5 DƠ6 DƠ DƠ DƠSNPP DƠ0 DƠ0 DƠ0 DƠ DƠ DƠ SG9NP SBSGN DƠ+ DƠB NDSG9 mB <B 29103-80104 A S P0122 SNPOP              H0101 5ASMBج̬ 00SP̬̬MϬԬ 00NAMŠSNPP( NAMSNPP .A.U0 .B.U NԠSNPP Ԡ.N Ԡ.D ԠPP ԠN ԠNSY ԠSVU ԠSYP ԠP ԠUNS Ԡ ԠMSB Ԡ ԠA ԠSPG ԠABU ԠBNK Ԡ ԠBP ԠAM ԠAM ԠABP ԠABP ԠA ԠA ԠUNDƱ ԠBPKS ԠSNKS ԠASAK ԠDB ԠDB BUƠBSS0 MԠ0650 Ԡ055 Ԡ00 Ԡ050 Ԡ03 Ԡ0055 Ԡ0005 Ԡ0000 Ԡ0000 Ԡ0000 Ԡ06 Ԡ05350 Ԡ065 Ԡ0000 Ԡ0000 Ԡ0000 Ԡ0606 Ԡ05350 Ԡ00 Ԡ0360 Ԡ0000 Ԡ0000 Ԡ0000 Ԡ06 Ԡ05350 Ԡ00 Ԡ0360 Ԡ0000 Ԡ0000 Ԡ0000 Ԡ0606 MԠ06506 Ԡ05350 Ԡ05 Ԡ0000 Ԡ0000 Ԡ0000 Ԡ06 Ԡ05350 Ԡ05 BSS .3Ԡ00000 .Ԡ00000 .5Ԡ00000 .6BSS .Ԡ000003 BUƱBSS BUƱ3BSS BUƱBSS BUƱBSS BUƱ0BSS BU9BSS BUƸBSS BUƷBSS BU6BSS BU5BSS BUƴBSS BU3BSS BUƲBSS BUƱBSS .DƠBU .9Ԡ00000 .0DƠM .BSS .Ԡ00005 .3Ԡ0000 .Ԡ000033 .5DƠM .6Ԡ0000 .Ԡ00003 .Ԡ0000 .9Ԡ000050 .0Ԡ060 ԠBSS PҠBSS NHAҠBSS .BSS .6Ԡ0050 .DƠ. .DƠ.3 .9Ԡ005 .30DƠ.5 .3Ԡ000 .3Ԡ006 .33Ԡ0003 .3Ԡ000030 .36Ԡ .3Ԡ000006 .3Ԡ .39Ԡ00 .0Ԡ00 ƱBSS .Ԡ00000 ɠBSS .BSS .DƠ.3 .DƠ. .9DƠ.6 ʠBSS NKADBSS .5Ԡ0000 .53Ԡ0030 .5Ԡ0050 .55Ԡ0600 .5Ԡ00000 NAMBSS UPBSS SԠBSS SBԠBSS NSԠBSS .59Ԡ00000 ADDҠBSS NKBSS .6Ԡ00000 .6Ԡ000 NBSS .6Ԡ00000 .65Ԡ00006 .66Ԡ00055 .6Ԡ00053 .Ԡ0500 ƱBSS ʱBSS SBԱBSS NSԱBSS ʲBSS ҠBSS .3BSS 003! 00!SNAPSAMNԠPSHUN 005! 006!SNAPND 29103-80106 A S P0122 SGINT              H0101 -ASMBج̬ 00SP̬̬MϬԬ 00NAMŠSGN( NAMSGNԬ .A.U0 .B.U NԠSGN Ԡ.N ԠBAS ԠSGNM Ԡ ԠDN ԠNԱ MSGԠ005 Ԡ0600 Ԡ05505 Ԡ0355 Ԡ056 Ԡ053 Ԡ006 Ԡ05 Ԡ0006 Ԡ055 Ԡ00 Ԡ0000 NMAàԠ000000 HKKBSS .Ԡ000 .Ԡ000005 KYB̠BSS .3Ԡ0065 DPҠBSS .Ԡ00006 .5Ԡ5 .6Ԡ0550 .Ԡ0000 SSSBSS .Ԡ00005 SGNUMBSS .9Ԡ000 .0Ԡ50000 .BSS .Ԡ0000 .3Ԡ0 .Ԡ5 NMBSS .6Ԡ0000 .Ԡ00005 .Ԡ00000 .9Ԡ00000 .0Ԡ00003 .Ԡ000006 003SGN:SUBUNŠGBA SGNԠNP SB.N DƠSGN 00! 005!SGMN-NAZҠUNŠҠ. 006!ϠNAZŠKSPAŬHŠSYMB̠ABŬANDHŠSGMN 00!AKDY: 00!A̠SGN 009! 00! 0!SGNԠSAHSHUHŠDSGMNSNHŠBASŠPAGŠ 0!A̠DMANԠPGAMS.ԠHKSҠAMAHNHŠNG 03!D: 0!YPŠMUSԠBŠUA̠5 05!ASԠHAAҠMUSԠBŠUA̠ϠHŠNNSƠSUج 06!3SԠϠHAASƠNAMŠMUSԠUA̠"SG". 0!HŠNUMBҠPSNDBYHŠ3DANDHHAAS 0!MUSԠBŠGAҠHANZϠANDSSHANҠUA̠ϠSG. 09! 00!HNAMAHHASBNUNDHŠ"BASSS 0!ϠHŠADDSSƠHŠASԠD+ƠHŠAGSԠSGMN. 0!ԠSMADŠHNHŠNUMBҠƠSUHMAHSSG". 03!AHKSMADŠԴHAԠHŠNUMBҠƠSUHMAHSUAS"SG". 0!ƠSSHANHAԠNUMBҠƠMAHSAŠUND 05!ADAGNSԠSPNDANDHŠUN 06!ASҠMPNHAN(6A. 0! 0ԠSUؠBŠNSAN(K 09ԠSGԠBŠNSAN( 030ԠMSGBŠNG( 03NAZŠMSGϠ"A̠SGMNSNԠUND." 03ԠBASBŠNGҬNA̠!SԠϠSԠDAVAABŠMM 033ԠSGNMBŠNG(3NA 03ԠàBŠSUBUNŬNA 035ԠDNԬNԱBŠSUBUNŬNA 036NAZŠNMAàϠ0 03! 03HKK_SU-<Ҡ5!NAMŠƠSGMNԠׯSU. DA. AƬA Ҡ. SAHKK 039KYB_$65K!KYDBK DA.3 SAKYB 00P:NDP_$KYBݠHNGϠND!NDƠBK PDAKYB̬ SADP SZASS MPND 0!HKPGAMYP.SUPPSS"ADDN-N"B. 0ƠHKK(($(DP+AND5KHNGϠ DADP ADA. DA.A. AND.5 PAHKK SS MP 03Ơ$(DP+"SG"HNGϠ!HKPGAMNAM(SԠHA DADP ADA. DA.A. PA.6 SS MP 0!NDSGMNԠNUMB.ԠƠ"SG" 05SSS_$(DP+3 DADP ADA. DA.A. SASSS 06SGNUM_((((SSSAND00K-30000K-<-<3+((SSSANDK-60K AND.9 ADA.0 AƬA AƬA SA. DASSS AND. ADA.3 ADA. SASGNUM 0ƠSGNUMSGԠHNGϠ ADA. SSASS MP 0! 09!-m UNDASGMNԠNAM.GԠSPAAMS. 050NM_$(DP+3ݾBASHNBAS_NM!BANMA.NH. DADP ADA.6 DA.A. SANM MANA ADABAS SSASS MP.5 DANM SABAS 05(NMA_NMA+ݩSGԠHNGϠ .5DANMA NA SANMA PA. SS MP 05GϠND!A̠SGMNSUND. MPND 053! 05:KYB_KYB+ ؠDAKYB NA SAKYB 055GϠP MPP 056! 05ND:ƠNMAýSGԠHNGϠND!HKҠA̠SGSUND. NDDANMA PA. MPND 05(MSG SB DƠ+5 DƠ. DƠ.9 DƠMSG DƠ.0 059(6!NԠA̠UND.U. SB DƠ+ DƠ. 060ND:DNԻ NDSBDN DƠ+ 06NԱ!N.S..HҠPAAMS. SBNԱ DƠ+ 06UN MPSGNԬ 063ND 06ND ND 065ND$ k  ?G 29103-80107 A S P0122 DINIT              H0101 *ASMBج 00SP̬̬MϬ 00NAMŠDN( NAMDNԬ .A.U0 .B.U NԠDN Ԡ.N Ԡ.MPY Ԡ.DV Ԡ.D ԠPD Ԡ Ԡ. ԠMN ԠMV. ԠS ԠUN ԠS ԠZZZ ԠPAG ԠS ԠBAS ԠSYSZ ԠAS ԠKP ԠSZ ԠSSZ ԠK ԠD ԠPDSZ ԠSYM AGԠ003 Ԡ05 Ԡ00 Ԡ005 Ԡ05 Ԡ00 Ԡ0006 Ԡ05 Ԡ000 Ԡ053 Ԡ00 Ԡ05 Ԡ00503 Ԡ0553 ʠBSS .BSS .BSS .3BSS ɠBSS .Ԡ00000 .Ԡ000003 .9Ԡ00000 .3Ԡ .Ԡ633 .Ԡ00 .9Ԡ .0Ԡ00000 .Ԡ000005 .Ԡ00000 .3Ԡ00000 .6Ԡ00000 .Ԡ00006 .Ԡ000 003!MAYBŠKPԠNASGMNԠƠDSD. 00ԠPDBŠNG(NA 005Ԡì.àBŠSUBUNŬNA 006ԠMNBŠUNNNA 00ԠMV.BŠSUBUNŬNA 00ԠSԬUNԬSԬZZZPAGŬSԬBASSYSZASԬKP\ SZŬSSZKDPDSZSYMԠBŠNGҬNA 009DN:SUBUNŠGBA DNԠNP SB.N DƠDN 00! 0!NAZSA̠ƠKSPAůSYMB̠ABŠMHANSM 0! 03ԠAGBŠNG( 0NAZŠAGϠ"S̠ANGҠDSàAKS" 05MV.($SYMԬ$BAS_(SYSZ+-<ݩ!MVŠSYMԠϠNSNAA. DASYM DBBAS S A. DASYSZ NA A AƬA SA SB. SA.3 SBMV. DƠ+ DƠ. DƠ. DƠ.3 06Ҡ_0ϠSYSZ-7 RETURN END ! RWPAG:SUBROUTINE(PNO,PAD,RWCOD) ! ! SUBROUTINE TO READ/WRITE SYMBOL TABLE PAGES ! ! PNO=PAGE NUMBER ! PAD=PAGE ADDRESS ! RWCOD=1(READ), OR 2(WRITE) ! RTRK_FETRK+(PNO/TSIZE) RSEC_(PNO-(TSIZE*(RTRK-FETRK)))<-1* CALL EXEC(RWCOD, LID,$PAD,128,RTRK,RSEC) RETURN END ! PDXAD:SUBROUTINE ! ! CONVERTS PAGE DIRECTORY INDEX (>0) TO ABSOLUTE ADDRESS OF PAGE CADDR_EXBAS+((PDINX-1)-<7) RETURN END ! ADPDX:SUBROUTINE ! ! CONVERTS ABSOLUTE (CORE) PAGE ADDRESS ! TO PAGE DIRECTORY INDEX ( > 0) ! PDINX_(((CADDR-EXBAS)AND 77600K)->7)+1 RETURN END ! OLDPG:SUBROUTINE ! ! DETERMINES CORE ADDRESS OF EXTENSION PAGE WHICH HAS BEEN IN ! CORE FOR THE LONGEST PERIOD WITHOUT BEING REFERENCED ! ! ! THIS IS DONE BY SEARCHING EACH PAGE IN CORE FOR THE MINIMUM ! VALUE OF THE LAST-USAGE COUNTER. ! DO[OLDAD,PDINX_0; K_77777K] WHILE PD([PDINX_PDINX+1])=>0 DO \ [PDXAD;IF K>$([I_CADDR+2])THEN[OLDAD_CADDR; K_$I]] IF OLDAD THEN RETURN ! ! NOTE: CONTROL IS PASSED TO ER50 (SYMBOL TABLE OR WORKSPACE ! OVERFLOW) FOR ANY ONE OF THE FOLLOWING REASONS: ! 1. "PRGPG" CALLED BUT NO PAGES IN CORE, ! 2."GETRM" CALLED TO CREATE NEW PAGE, BUT ! THE MAXIMUM PAGE HAS ALREADY BEEN ALLOCATED, ! 3. OLDPG CALLED BUT NO PAGES LEFT IN CORE. ! ER50: DIAG(50,0) END ! PRGPG:SUBROUTINE(GADPR)GLOBAL ! ! ! THIS SUBROUTINE IS CALLED TO ROLL A SYMBOL TABLE PAGE ! OUT TO THE DISC, TO MAKE ROOM FOR ANOTHER, OR TO MAKE ! WORKSPACE AVAILABLE. ! ! GADPR = CORE ADDRESS OF PAGE TO BE ROLLED OUT. ! ! IF SPECIFIED PAGE IS DIFFERENT THAN ITS DISK IMAGE (IF ANY), ! IT IS WRITTEN ON THE DISK. THE APPROPRIATE PAGE DIRECTORY ! SLOT IS SET TO ZERO. ! ! IF GADPR
126 \ THEN [PRGAD_FIRST; FIRST_FIRST+128],\ ELSE [OLDPG; PRGAD_OLDAD; PRGPG(PRGAD)] ! ZZZ:CREATE/LOAD PAGE FLAG. 0=PAGE TO BE CREATED ONLY. ! ZZZ # 0 PAGE TO BE READ FROM DISC IF ZZZ THEN CALL RWPAG(PAGE(LDPNO),PRGAD,1),\ ELSE [$PRGAD_4; $(PRGAD+1)_127] $(PRGAD+3)_0 CADDR_PRGAD ADPDX PD(PDINX)_LDPNO RETURN END ! GETAB:SUBROUTINE (VRTAD,CORAD) GLOBAL ! ! CONVERTS VIRTUAL ADDRESS (VRTAD) TO CORE ADDRESS (CORAD). ! PAGE IS ALWAYS IN CORE ON RETURN. ! GET1: LDPNO_VRTAD AND 77600K PDINX_1 GET2: IF PD(PDINX)=LDPNO \ THEN[PDXAD; CORAD_CADDR+(VRTAD AND 177K);\ $(CADDR+2)_[LUCNT_(LUCNT+1) AND 77777K];RETURN] IF PD(PDINX)<0 THEN[ZZZ_-1; LDPAG; GOTO GET2] GET3: PDINX_PDINX+1 GOTO GET2 END ! GETRM:SUBROUTINE(NO,VRTUL) GLOBAL ! ! IF NO=0 A 4 WORD SYMBOL BLOCK IS ALLOCATED FROM SYMB PAGE(TOP DWN) ! IF NO>0 A (NO) WORD BLOCK IS ALLOCATED FROM SYMB PAGE (BOTTOM UP) ! NEW PAGES ARE CREATED AS REQUIRED ! GRM1: M_0 PAGE(M)_LPAGE GETAB(M,N) Q_[IF NO THEN NO, ELSE 4] IF -($N+Q)+$(N+1)+1=>0 THEN GOTO GRM2 ZZZ,LDPNO_0 IF [LPAGE_LPAGE+1] => PDSIZ THEN GOTO ER50 PAGE(LDPNO)_LPAGE LDPAG GETAB(LDPNO,Q) GOTO GRM1 GRM2: IF NO \ THEN[VRTUL_M+$([I_N+1])-NO+1; M_-NO+N+$I+1; $I_$I-NO],\ ELSE[VRTUL_M+$N;M_N+$N;$N_$N+4] VRTUL_VRTUL OR 100000K WHILE Q DO [$M_0;M_M+1;Q_Q-1] $(N+3)_1 RETURN END ! END END$  PX 29103-80127 A S P0122 ALLOC SPL             H0101 ̔SP̬̬MϬԬ NAMŠA( ԠPGPGBŠSUBUNŬNA ԠKPASԬSԬSԠBŠNGҬNA ! ! GK:SUBUN(GPҩGBA ƠSԠHNGP_SԻS_$GPһGϠG9 NԠ(AS-Sԩ6HNS_S-PGPG(Sԩ GP_AS- AS_GP- ƠAS0 DO \DEFINE LOOP [PUSH; PTOP_S; GTOP_DEF; VTOP_0] IFNOT CHAR THEN GOTO M IF DEF THEN[CALL $(SEG($GTOP))(CHAR) ?[GO TO M]],\P-TERM ELSE [IF CHAR#$GTOP THEN GO TO M] !MATCH ! VTOP_[IF CHAR<0 THEN CHAR, ELSE -CHAR] !SET V STACK CALL $(AINCC)() !GET NEXT CHARACTER G: DO [PUSH; GTOP_$(GTOP+3); VTOP_0] !SUCCESSOR H: IF GTOP>0 THEN GO TO B !GO TO DEFINE LOOP CALL $(AGNRT)(S,PTOP,GTOP,VTOP) !GENERATE IF S THEN GO TO G !GO AHEAD IFNOT CHAR THEN RETURN, ELSE FRETURN !DONE ! M: DO [GTOP_[IF GTOP THEN $(GTOP+2),ELSE 0]; \ VTOP_0] !GET ALTERNATE IF GTOP THEN GO TO H !GO TO DEF LOOP DO [POP; IFNOT S THEN FRETURN] !BACKTRACK IF VTOP>0 THEN FRETURN,\ DELETE ELSE [IF VTOP<0 THEN [CALL $(ADECC)()]] !DECC GO TO M !TRY AGAIN END ! PUSH: SUBROUTINE DO [STAK(S)_VTOP; STAK(S)_GTOP; STAK(S)_PTOP] RETURN END ! POP: SUBROUTINE DO [PTOP_STAK(S); GTOP_STAK(S); VTOP_STAK(S)] RETURN END END END$ .U V\ 29103-80134 C S 0122 SCNMN              H0101 +SPL,L,M,O,T,C ! 11/14/75 REV C NAME SCNMN(8) ! ! SCANNER MAIN MODULE, CONTAINING: ! SCAN: SCAN FUNCTION CALLED BY COMPILER EXEC ! INCC,DECC,GENRT,DELET ROUTINES TOBE PASSED TO ! THE PARSING ALGORITHM (NOT GLOBAL). ! LET P.ARS,STPRG,DIAG,EXEC BE SUBROUTINE, EXTERNAL LET ISTR,DCP,SEG BE FUNCTION, EXTERNAL LET IWP,ICP,STAK BE PSEUDO, EXTERNAL LET SCGRM,CCPTR,CHAR,SOURC,SPTR BE INTEGER,EXTERNAL SCAN: SUBROUTINE GLOBAL CCPTR_ISTR(CCODE) P.ARS(@SCGRM,@GENRT,@INCC,@DECC) \ ?[GO TO FAIL] CALL STPRG(SOURC) RETURN ! FAIL: CHAR_ICP(SPTR); GOTO DIAG5 END SCAN ! INCC: SUBROUTINE GLOBAL CHAR_ICP(SPTR)?(0) RETURN END INCC ! DIAGNOSTIC CODE 5: ILLEGAL CHARACTER, OR NO CR/LF DIAG5: CALL DIAG(5,CHAR) ! DECC: SUBROUTINE GLOBAL CHAR_DCP(SPTR,SOURC) RETURN END DECC ! GENRT: SUBROUTINE(STKP,P,G,V) LET STKP,P,G,V BE INTEGER S_STKP ASTR_0 STAK(ASTR)_100000K ALWAYS DO[PTOP_STAK(S);GTOP_STAK(S); \ VTOP_STAK(S); \ IFNOT P=PTOP THEN GO TO GENR1; \ STAK(ASTR)_VTOP] GENR1: $(SEG($GTOP))(ASTR,CCODE,V) P_PTOP G_GTOP STKP_S RETURN END GENRT ! END END$ ~p W] 29103-80142 A S P0122 SNPST SPL             H0101 SP̬̬MϬԬ NAMŠSNPS( ! !SNAPSAMNԠSMANàUN ! ԠPBŠNSAN(60 ԠSNPPBŠNSAN(6 ԠPBŠNSAN(5 ԠASAKDBDBAVAUBŠNGҬNA ԠàBŠSUBUNŬNA ԠKDBBŠSUBUNŬNA ԠSAKSYPSVUPBŠPSUDϬNA ԠSҠBŠUNNNA ԠUNAMŬҬSàBŠNG NAZŠɠϠU S:SUBUN $_SAK(ASAK?(0 U_SAK(ASAK!HנAAYNDVAU UN ND DAV:SUBUN(DԱ P(ԩ_DԱ UN ND ! SNPS:SUBUNŠGBA̠!SNAPSAMNԠSMANàUN _S(AVAU!NAZŠPSHSNG PAԠMSD\ A̠S_+ U_!SԠDAUԠSNAPŠU NԠNAMŠHNGϠSNP5!AKŠDB (SYP(NAMũANDHNGϠSNP6!YPŠ0 !AŠPSH A̠DAV(SéA̠DAV(ҩA̠DAV(- A̠DAV(NAMũA̠DAV(-A̠DAV(P SNP:A̠DAV(SNPPA̠DAV(P UN ! !AKŠDBҠYPŠ0S SNP6:U_SVU(NAMũ SNP5:A̠KDB($DBU000K+U0 A̠(3000K+U!PUNHAD GϠSNP ND ND ND$  X^ 29103-80143 1715 S 0122 FKDCB SPL             H0101 ĆSPL,L,M,O,T,C NAME FKDCB(8) "REV G 770321" ! ! SUBROUTINE TO FAKE DATA CONTROL BLOCK POINTERS FOR TYPE 0 FILES ! FKDCB: SUBROUTINE(DCB,LU,EOFCD,BSPCO,RWCOD) GLOBAL LET EXEC BE SUBROUTINE,EXTERNAL DCB,$(@DCB+2)_0 !SET"FAKED DCB" FLAG.TYPE =0 $(@DCB+3)_LU OR 400K !LOGICAL UNIT $(@DCB+4)_EOFCD !EOF CODE $(@DCB+5)_BSPCO !BACKSPACE CODE $(@DCB+6)_RWCOD !READ/WRITE CODE $(@DCB+7)_100000K !OPENED "SUCCESSFULLY" $(@DCB+9)_$1717K !ID SEGMENT ADDRESS CALL EXEC(3,700K+LU) !SET END-OF-TAPE RETURN END END END$  Y_ 29103-80145 1715 S 0122 LDUM2 SPL             H0101 SPL,L,M,O,T,C NAME LDUM2(8) "REV G 770325" ! ! RELOCATE/SEARCH STATEMENT SEMANTIC ROUTINES ! ! FOR EACH FILE, POLISH OUTPUT IS: ! ! AVALU: ! ! ********************************************************************* ! * * * * * * ! *S.T.PTR TO* * +1) * LIST * * ! * * * * PTR) * * ! ********************************************************************* ! ! LET ASTAK,AVALU BE INTEGER,EXTERNAL LET ISTR BE FUNCTION,EXTERNAL LET ATRB,STYP,STAK,IWP BE PSEUDO,EXTERNAL LET ASTAV,ASPOP,WDTAV,STPRG,ASTAV BE SUBROUTINE,EXTERNAL ! DEFINE GLOBAL CONSTANTS LET LOCC,BPLOC,FWAM,LWAM,FWABP,LWABP,FWAC,LWAC,NXTPG, XFER,\ LCOMM,LINKF,UNDF1,UNDFS,UNDX1,UNDFX,EXTX1,EXTX,LISTO,ABRTF,\ FILEX,BPLKS,NBPLK,GUESS,NGESS,LWAM1,NLINK,MAXA,MINA,\ MAXAB,MINAB,XBPLK,XGESS,XSEC BE INTEGER ,EXTERNAL ! PNAME: SUBROUTINE GLOBAL ! TYPE A GIVEN NAME AS "PROGRAM NAME" ASTAV !MOVE PROGRAM NAME TO AVALU RETURN END ! PRLST: SUBROUTINE GLOBAL ! PASSES A STRING OF PROGRAM NAMES TO PRFLS P1_ISTR(P0) !INITIALIZE STRING ASPOP?[GOTO PRL1] ! FORM STRING OF PROGRAM NAMES. POP COMMAS FROM ASTAK. ALWAYS DO[IWP(P1)_STAK(ASTAK)?[GOTO PRL1]; ASPOP?[GOTO PRL1]]! PRL1: WDTAV(P0) !PASS STRING(POSSIBLY EMPTY) TO PRFLS RETURN END ! PRFLS: SUBROUTINE GLOBAL P1_ISTR(P0)! INITIALIZE FILES STRING PRFL1: P3_ISTR(P4) !INITIALIZE PROGRAM STRING IWP(P3)_STAK(ASTAK) !PUT FILE NAME INTO STRING IWP(P3)_STAK(ASTAK)?(0) PRFL2: IWP(P1)_P4 ASPOP?[GOTO PRFL3] !POP COMMA, OR F-RETURN IF NONE LEFT GOTO PRFL1 ! ! PUT FILE/PROGRAM STRING POINTER INTO AVALU ! PRFL3: WDTAV(P0) RETURN END FNAME: SUBROUTINE GLOBAL ASTAV    !MOVE FILE NAME TO AVALU RETURN END ! ID1: SUBROUTINE GLOBAL ASTAV RETURN END ! ! PSEUDO-TERMINAL ROUTINES FOR GRAMMAR ! SMPCN: SUBROUTINE(SMPC1) GLOBAL,FEXIT LET STYP BE PSEUDO,EXTERNAL IF(STYP(SMPC1) AND 1) THEN RETURN!ACCEPT SIMPLE CONSTANTS FRETURN END ! NAEM: SUBROUTINE (NAEM1) GLOBAL,FEXIT ! SYMBOL CAN BE USED AS A NAME IF IT ISN'T A SPECIAL CHARACTER ! OPERATOR. IF(STYP(NAEM1)AND 1) THEN GOTO NFAIL!REJECT CONSTANTS IF (NAEM1 AND 77777K)>34K THEN RETURN !ALLOW RSERVED WORDSDS. NFAIL:FRETURN END END END$ Z  Za 29103-80146 A S P0122 FSEMU SPL             H0101 ۛSP̬̬MϬԬ NAMŠSMU( ! !USҠSMANàUNS ԠSYPSAKSA׬SASBŠPSUDϬNA ԠASAKAVAUBŠNGҬNA ASAV:SUBUNŠGBA̬Ԡ!ASAK--AVAU. Ա_SAK(ASAK?UNݠ!PPASAKA̠UNƠMPY NԠAVAUHNAVAU_ԱUN ƠAVAU<0HNԲ_0SA(Բ_AVAUAVAU_Բ!SAԠSNG ƠԱ<0HNSA(AVAU_Ա\APPNDSYMB̠ADDSS SŠSAS(AVAU_Ա!APPNDSNG UN ND DAV:SUBUN(PAԩGBA̠!ANYD--AVAU NԠAVAUHNAVAU_PAԻUN ƠAVAU<0HNԱ_0SA(Ա_AVAUAVAU_Ա SA(AVAU_PA UN ND ! ! ! ! ! ASPP:SUBUNŠGBA̬ !PPSPNYƠASAKANDDSADS.UNƠMPY. _SAK(ASAK?UN UN ND ND ND$ +% [a 29103-80147 A S P0122 FU9 SPL             H0101 pSP̬̬MϬԬ NAMŠU9( ԠPUKBŠSUBUNŬNA ԠGKSPGBŠSUBUNŬNA ! SA:PSUD(SPҩGBA NԠSPҠHNGK(DשSPҬDS_D׻\ $DS_SAV_GϠSA5 ƠSPҽDSHNY_DנAND0KZ_DנANDKGϠSA3 DSY_SP HZ_$(Y+DϠY_Z UN̠$(D_Y+Zݩ00000KDϠZ_Z+ SA3:$D_SAV ƠZ6HN_GϠSA׷ GK(Dש $(Y+_D _0 SA5:$(D+_0 SA׷:$(D_D+ݩ_00000K UN ND ! ! NS:PSUDϠ(SPԬNDةGBA̬ NԠSPԠHNGϠNS9 ƠSPԽSPԲHNƠNDؽNDز+HN\ ZY__Բ+\ (ԲAND6HN_$Ի\ GϠNS3 _SP Y_ND NS:NԠؠHNGϠNS9 ƠYHNY_Y-_$(+GϠNSݬ\ SŠY_Y-Z_0 NS:_+Z NS3:Ơ$Խ00000KHNGϠNS9 ƠZYHNZ_Z+GϠNS ƠNSƠHN$_NSV\ SŠNSV_$ Բ_ NDز_ND SPԲ_SP UN NS9:NSV_0 UN ND ! ! SAS:PSUDϠ(SPGBA _0 SAS:_+ SA(SP_NS(SASVש?GϠSAS GϠSAS SAS:SPG(SASV UN ND ! ! ND ND$ W` \b 29103-80151 A S P0122 POLG SPL             H0101 SP̬̬MϬԬ NAMŠPG(!AůPSNUNSҠB.G !BANDGUNHŠAKSҠANDSԠƠH !NԠDNHŠBAYANDADGϠSSPVY. !PBANDP.GPMANABSUŠPSNϠSAԠA !SNDPASSVҠAABŠƠBNAYMHŠBAYAND !ADANDGϠAASSPVY. !BHUSŠAKSҠANDSԠNMANBANDM !APVUSAŠA.NNA̠NMANHAҬSSAVD !SNŠHŠSN'ԠANYMNHŠANGSUN. ԠàBŠSUBUNŬNA SUP:SUBUN ԠHAҠBŠNGҬNA ԠDBҠBŠNGҬNA Dñ_DB_DB6_DB5_DB_DB3_DB_\ DB_DB++++++++9 UN ND B:SUBUN(BDBBҬìSƩGBA ԠBDBBŠNG( A̠SUP _$DB!AK S_$DB!S _$DB3!S HA_$DB5!SAVŠPGSUN UN ND ! !AŠAD-N-GϠAA ! G:SUBUN(GDBGҬGìGSGƩGBA ԠGDBBŠNG( A̠SUP G_$DB!AK GS_$DB!S G_$DB3!S UN ND ! !PSNBAY ! PB:SUBUN(PDBPҬPìPSPƩGBA ԠPDBBŠNG( A̠SUP $DB5_HAҠ!PUԠBAKPGSUN $DB_Pà!AK $DB_PS!S $DB3_PƠ!S A̠($Dñ6PìPS UN ND ! !PSNAD-N-GϠAA ! P.G:SUBUN(.GDB.GҬ.Gì.GS.GƩGBA Ԡ̻  .GDBBŠNG( A̠SUP $DB_.Gà!AK $DB_.GS!S $DB3_.GƠ!S $DB_0!PUԠNADUMMYPAKDSàAD. A̠($DB$Dñ6$DB.GS!UPDAŠPAKNGBU .G_0 UN ND ND ND$ ԬSP NSP̬56  ]d 29103-80152 A S P0122 REDGL SPL             H0101 وSP̬̬MϬԬ NAMŠDG(!ADAD-N-GϯSYSMBAY ! !AD̠ADSHŠSYSMAABŠUYUNS ! ԠGàBŠNSAN(66K!UNԠAD-N-GϠAK ԠDDSKàBŠSUBUNŬNA ԠSUPBŠSUBUNŠ!SUPPNS AD:SUBUN(DBҬDUƬ̬NHGBA ԠDBBŠNG(!DAAN̠BK.DNA̠ !"DB(" _0!NϠS A̠SUP NԠ$DB5HN\NSHDADNGBAY NH_-UN A̠DDSK(DUƬ$DB$DB$DB3$DB5$DB6$DB\ NH$Dñ $Dñ UN ND ! !ADAD-N-GϠAA ! ADG:SUBUN(GDBGҬGBUƬG̬GNHGBA ԠGDBBŠNG(!SAMŠASDB( A̠SUP !HNPAKDDSàAKSҠNNSƠ66NBASŠPAGŬ !HNSMUAŠANNDƠŠANDUN $DB$GàHNGNH_-UN A̠DDSK(GBUƬ$DB$DB$DB3$DB$DB5$DB6\ $DBGNH$Dñ UN ND ! !AŠBAYPSN ! SUP:SUBUN ԠDBҠBŠNGҬNA Dñ_DB_DB6_DB5_DB_DB3_DB_\ DB_DB++++++++9 UN ND ND ND$ ] ^d 29103-80156 1715 S 0122 ENDR SPL             H0101 SPL,L,M,O,T,C NAME ENDR(8) "REV G 770415" ! ! END RECORD PROCESSOR ! LET BPRC1,BPRC0 BE LABEL,EXTERNAL LET .BKUP,NXTI,NAMX,UNDX1,EXTX1 BE INTEGER,EXTERNAL ! DECLARE 'USED' BASE PAGE LINKS STACK, CONTAINING THE ! LINKS WHICH WERE ALLOCATED FROM THE "FREE" BASE PAGE LINKS ! STACK, BUT WHICH WILL NOT NECESSARILY BE USED ON THE SECOND ! PASS. LET UFREB BE INTEGER,EXTERNAL LET ABINY BE INTEGER,EXTERNAL ! ENDR: SUBROUTINE(PLGTH,LENTH,NCPL1,NCPL2,LGB1,NBLK1,REV,\ TDIFF,RREC,RRS,ROFF,AREC,\ ARS,AOFF,.SAVE,OFREB,PBASE,PLEN7,BINY2,NXTII)GLOBAL LET BINY BE INTEGER(60),EXTERNAL LET SWTCH,BLNK,STPRG,MOVE.,POSN.,RVERF,\ PRENT,OCTAQ,EXEC,DIAG,PBPLK BE SUBROUTINE,EXTERNAL LET PRT BE SUBROUTINE LET LOCC,BPLOC,LISTO,GUESS,SEC,NBPLK,ERR,MAXAB,XMAXA,ERCO,\ NXTPG,LWAM1,LWABP,LSTLU,.POSN,DCB4,DCBB4,FREBE,NGESS,XBPLK,\ RIC,XGESS,XSEC,BINY,LSTLU BE INTEGER,EXTERNAL LET B76,IWPP,ISTR,MAX BE FUNCTION,EXTERNAL LET ICP,IWP,STAK BE PSEUDO,EXTERNAL ! CALL SWTCH BIN17_[BIN13_ABINY+12]+4 IF PLGTH<0 THEN PLGTH_LENTH !USE ACTUAL LENGTH IF COMPILER-GENERA ! ! IS BACKUP NECESSARY? ! NOT PERFORMED IF INPUT OR OUTPUT FILE NON-DISC, OR IF ! SECOND PASS ALREADY DONE, OR IF GUESS AREA COMPLETELY USED. ! IF NGESS=NCPL1 THEN GOTO ENDR1 !GUESS AREA ALL USED. IFNOT .BKUP THEN GOTO ENDR1! THIS IS THE SECOND PASS IFNOT$(DCB4+2) THEN GOTO ENDR1 !INPUT FILE NON-DISC IFNOT $(@DCBB4+2) THEN GOTO ENDR1 !"OUTPUT " " " ! ! BACKUP PASS CALLED FOR. BACKUP POINTERS AND REPOSITION INPUT ! AND OUTPUT FILES. ! .BKUP_0 CALL $(.POSN)($DCB4,ERR,RREC,RRS,ROFF)!POSITION R.B. FILE CALL POSN.(DCBB4,ERR,AREC,ARS,AOFF)!" ABS. FILE X_UNDX1 !BACKUP TEMPORARY UNDEFINEDS AND FIXUPS ALWAYS DO[I1_IWP(X)?[GOTO E1];REF1_IWP(X);FIX_IWP(X);\ CALL STPRG($(REF1 OR 7)); $REF1_100000K] ! E1: CALL MOVE.(.SAVE,NBPLK,9) $XBPLK_100000K; CALL STPRG($(XBPLK OR 7)) PBASE,LOCC_LOCC-[TDIFF_NGESS-NCPL1]! BACK DOWN LOCC NGESS_NCPL1;NCPL1,NCPL2_0 ! CALL STPRG(GUESS); CALL STPRG(SEC); CALL STPRG(FREBE) ALWAYS DO \ BE SURE ALL LINKS TAKEN FROM "FREE BASE PAGE CALL PBPLK ( STAK(UFREB)? [GOTO E3] , 0) ! ARE CLEARED TO ZERO. E3: GUESS_ISTR(XGESS); IWP(XGESS)_LOCC-NGESS SEC_ISTR(XSEC); IWP(XSEC)_[PLEN7_PLGTH]+LOCC NXTPG_[XPAGE_B76(LOCC)]+2000K IF LGB1 THEN[IWP(XBPLK)_-1; IWP(XBPLK)_BPLOC+LGB1] ALWAYS DO[STAK(FREBE)_STAK(OFREB)?[GOTO E2]] ! ! GET 1ST DBL OR END RECORD ! E2: CALL RVERF IF RIC<3 THEN GOTO E2 IF RIC=4 THEN GOTO E2 GOTO BPRC1 !GO GET PROPER RECORD PROCESSOR ! ENDR1: CALL STPRG(UFREB) ! GET RID OF 'USED' LINKS STACK. BINY2_$(ABINY+1) !SAVE WORD 2 OF END RECORD NXTII_$NXTI IFNOT(LISTO AND 2) THEN GOTO ENDRC CALL BLNK (BINY,40) X1_0;X_NAMX ALWAYS DO\ MOVE NAME AND COUNT CHARACTERS [C_ICP(X)?[GOTO EN01];\ IF X1 AND 1 THEN \ODD-NUMBERED CHAR. $NXTI_($NXTI AND 77400K)OR C,\MAKE SURE BUFFER IS BLANK-FILLED ELSE[NXTI_NXTI+1;$NXTI_C-<8 OR 40K];\ X1_X1+1] ! ! PUT IN REVISION CODE, IF ANY ! EN01: NXTI_NXTI+1 ! SKIP OVER TIME PARAMETERS ! T_REV; REPEAT 8 TIMES DO I_IWP(T)?[GOTO EN00] ! ! IF NAM HAS EVEN # CHARS, PUT LEADING BLANK AHEAD OF REV CODE. ! IFNOT (X1 AND 1) THEN [X1_X1+2; NXTI_NXTI+1] ALWAYS DO[$NXTI_IWP(T)?[GOTO EN00];\ X1_X1+2; NXTI_NXTI+1] EN00: IF X1>8 THEN\ [IF (LISTO AND 2) THEN CALL PRT(10+X1)] CALL OCTAQ($BIN13,LOCC) ! ENDRC: X_GUESS; FS_SEC G_IWP(X)?(0) !ADDRESS 1ST WORD GUESS AREA. LG_G+NCPL1-1 !LAST WORD OF GUESS AREA. FS_IWP(FS)?(0) !ADDRESS 1ST WORD OF SECOh3 NDARY AR X1_[LOCC_LOCC+PLGTH]-1 !LAST ADDRESS OF PROGRAM CALL OCTAQ($BIN17,X1) !CONVERT IT TO OCTAL CALL OCTAQ($(ABINY+20),BPLOC) NXTPG_B76([LOCC_LOCC+NCPL2]+2000K) BPLOC_BPLOC+LGB1+NBPLK-NBLK1 CALL OCTAQ($(ABINY+24),BPLOC-1) IF (LISTO AND 2) THEN CALL PRT(56) ! ! CHECK IF 'LINKS' OPTION SELECTED, AND IF SO, PRINT OUT LIMITS ! FOR GUESS AND SECONDARY AREAS. ! IF (LISTO AND 20K) THEN\ PRINT GUESS,SECONDARY AREA LIMITS [IF NCPL1 THEN\ [ CALL OCTAQ($BIN13,G); CALL OCTAQ($BIN17,LG);\ CALL PRT(38)]; IF NCPL2 THEN\ [IFNOT NCPL1 THEN CALL PRT(1);\PRINT BLANK LINE CALL OCTAQ($BIN13,FS); CALL OCTAQ($BIN17,LOCC-1);\ CALL PRT(38)]] ! ! CHECK IF MEMORY OVERFLOWED. ! XMAXA_MAX(XMAXA,LOCC) IF XMAXA>LWAM1 THEN CALL DIAG(8,NAMX) IF MAXAB>LWABP THEN CALL DIAG(9,NAMX) !BP OVERFLOW IF ERCO THEN CALL DIAG(ERCO,NAMX) CALL STPRG(EXTX1) RETURN ! END PRT: SUBROUTINE(PRT1) !OUTPUT PRINT LINE:PRT1=#CHARS. I_(PRT1+1)>-1 CALL EXEC(2,LSTLU,BINY,I) !OUTPUT PRINT LINE TO COREMAP FILE CALL BLNK(BINY,I) RETURN END END END$  _g 29103-80158 A S P0122 MAXR SPL             H0101 SP̬̬MϬԬ NAMŠMA( MA:UNN(MAرMAزGBA MAV_ƠMAرMAزHNMAرSŠMAز UN ND MN:UNN(MɱMɲGBA MNV_ƠMɱ-6 IF (LINKF AND 4000K) \ RTE-II. ROUND BP TO EVEN SECTOR THEN SIZE_SIZE +(SIZE AND 1) SIZE_-(((SIZE + ((MAXAB-MINAB+64)>-6)+3)>-1)) CALL WDTAV(SC); CALL WDTAV(CR); CALL WDTAV(-6) CALL WDTAV(FNAME); CALL WDTAV(SIZE); CALL WDTAV(CRTOP) GOTO AE0 END ! CNTST: SUBROUTINE GLOBAL LET ASTAK,AVALU BE INTEGER,EXTERNAL AVALU_STAK(ASTAK)?(0) RETURN END END END$ '  ls 29103-80176 A S P0122 RELST SPL             H0101 SP̬̬MϬԬ NAMŠS( !MDUŠϠPSSADSAMN ԠBYBŠNSAN(0050K!"BY" Ԡ.GBŠNSAN(0050K!".G" ԠUA̠BŠNSAN(0003K!"" ԠNԲBŠNSAN(55!SNDAYNAZAN ԠPPBŠNSAN(!PSSŠPA ԠPNPBŠNSAN(53!PNŠPA ԠPBŠNSAN(5!NDؠƠ"P"UN ԠPNBBŠNSAN(65!PNBAYPA ԠPNGBŠNSAN(66!"ADGϠ" ԠSPGMSB̬BNKBŠSUBUNŬNA ԠDAVBŠSUBUN ԠSҠBŠUNNNA ԠSAKPSVUBŠPSUDϬNA ԠSàBŠSUBUN!ADSAHMMNPSS !DNŠGBA̠NSANS ԠNKƬجҬAVAUASAKNNK\ BŠNGҬNA S:SUBUNŠGBA SHH_-!SԠSAHAG"" S UN ND SS:SUBUNŠGBA SHH_-!SԠSAHAG"N" S UN ND S:UNN!UNSVYHҠVAUŠƠASAK SV_SAK(ASAK UNSAK(ASAK ND ! S:SUBUN Ѭѱ_S!SKP"A"ANDGԠŠNAM _S(AVAU!NAZŠPSHSNG DS:PP0_P(ѩ?GϠDS _P(P !NSԠPSHDŠϠNAZŠ-BNAY !PSSNG(NYƠNԠDNŠAADY N(NKƠAND0000KHNA̠DAV(NԲ\ NK_NKƠҠ0000K !NSԠPSHDŠϠPNHŠ DAV(ة!ŠNAMŠPN !PUԠNPSHҠPNNGŬ !PNPSҠSHҠHAN"BY"AND".G" !PNGSҠ"BY"PNGSҠ".G" ! _ƠؽBYHNPNBS\ Ơؽ.GHNPNGSŠPNP A̠DAV(ɩ!PUԠNSԠϽ  ƠMDUNAMS A̠DAV(SHH!PUԠNSAHAG. _P(PҠ00000K!SԠSGNBԠƠS A̠SPG(P0!PUGŠHŠSNG A̠DAV(ɩ!PUԠNSԠƠMDUŠNAMS A̠DAV(PP!PSSŠPA A̠DAV(P!SŠŠPAҠD !ƠŠNAMŠ"BY"HNPUԠNAN !A"PNBAY"PAҠDŬ !PKUPNSϠ-SDNԠBAY !UNS. ƠؽBYHNA̠DAV(ة\ A̠DAV(PNBA̠DAV(P GϠDS DS:A̠SPG(ѱ G_S!GԠAGԠADDSS ƠGԠUA̠HNG_0NNK_SAK(ASAK\ GϠDS NNK_S!GԠNKS NNK_SAK(ASAK!GԠNKSSUPPD DS:ƠGԾ0HN_G ƠNNKHNNK_NKƠҠ UN ND!-1) GOTO SRTRN ! ERROR # 11 -- FILE MANAGER OPEN ERROR LET M11 BE INTEGER(12) INITIALIZE M11 TO "OPEN ERR " SER11: T1_[T_[T3_@M11]+3]+6; GOTO SR10 ! ERROR 12 -- SET $() WHERE EXPR EVALUATES < 2 LET M12 BE INTEGER(12) INITIALIZE M12 TO "EVAL.ERR,EXPR= (8) " SER12: T_@M12+7 CALL OCTAQ($T,DATA) CALL .XEC(2,M12,12) GOTO SRTRN ! ERROR 13 -- BP LNTH IN NAM RECORD <0 LET M13 BE INTEGER(6) INITIALIZE M13 TO "ILL.BP LNTH " SER13: CALL .XEC(2,M13,6) GOTO SER4. ! ERROR # 14 -- COMMON BLOCK ERROR LET M14 BE INTEGER(20) INITIALIZE M14 TO "COMMON LNTH ERR,LNTH= ,NOW= " SER14: T1_[T_@M14+11]+6 CALL OCTAQ($T,XCOM); CALL OCTAQ($T1,LCOMM) CALL .XEC(2,M14,20); DATA_0 GOTO SER4. ! ERROR # 15 -- NAM OUT OF SEQUENCE LET M15 BE INTEGER(8) INITIALIZE M15 TO "NAM OUT OF SEQ." SER15: CALL .XEC(2,M15,7 ) GOTO SER4. ! ERROR 16 -- FILE READ OR WRITE ERROR LET M16 BE INTEGER(22) INITIALIZE M16 TO "FILE READ OR WRITE ERR= FILE = " SER16: T1_[T_@M16+12]+6 CALL DECV($T,ERR,I); CALL MOVE.($DATA,$T1,3) CALL .XEC(2,M16,22) GOTO SRTRN ! ERROR # 17 -- NO COMMAND ID CHARACTER AND NON-KEYBOARD CMND INPUT LET M17 BE INTEGER(5) INITIALIZE M17 TO "NO CMND ID" SER17: CALL .XEC(2,M17,5) GOTO SRTRN ! ERROR # 18 -- ABORT BECAUSE OF UNDEFINEDS(ABORT IF UNDEFS SET) LET M18 BE INTEGER(6) INITIALIZE M18 TO "UNDEFS ABORT" SER18: CALL .XEC(2,M18,6) GOTO SRTT ! ERROR 19 -- NO MAIN P~ROGRAM LET M19 BE INTEGER(6) INITIALIZE M19 TO "NO MAIN PRGM" SER19: CALL .XEC(2,M19,6) GOTO SRTRN ! ERROR 20 --DUPLICATE ABSOLUTE FILE LET M20 BE INTEGER(7) INITIALIZE M20 TO "DUPL.ABS.FILE" SER20: CALL .XEC(2,M20,7); GOTO SRTRN ! !ERROR 21 ABORT SXL SER21: GOTO SRTT LET M50 BE INTEGER(9) INITIALIZE M50 TO "WORKSPACE OVERFLOW" ! ERROR 50 -- WORKSPACE OVERFLOW SER50: CALL .XEC(2,M50,9) GOTO SRTT ! SRTRN: IFNOT(ABRTF AND 2) THEN GOTO TRTTY SRTT: CALL .XEC(2,ABRT,6) CALL EXEC(5,-1) !RELEASE DISC TRACKS $(@DCBB4+15)_0 !SET CURRENT EXTENT# TO 0 FOR PURGING IF DCBB4 THEN CALL CLOSE(DCBB4,ERR,48)!PURGE ABS. FILE IF(LISTO AND 27K)THEN CALL EXEC(3,1100K+LSTLU,-1) ALWAYS DO\ CLOSE ALL TRANSFER FILES [CALL ILOSE($SODC4,ERR);\ IF TRSTK THEN CALL TRBAK, ELSE CALL EXEC(6)] TRTTY: CALL LOCF($SODC4,ERR,REC,RS,OFF,JSEC,JLU,JTY) IF IAILU = 0 THEN \ DON'T STACK IF FILE = TTY [CALL ILOSE($SODC4,ERR); T_@JTY; REPEAT 6 TIMES DO\ [STAK(TRSTK)_$T; T_T+1]; T_SODC4; REPEAT 3 TIMES DO\ [T_T-1; STAK(TRSTK)_$T]; \ INLU_401K; CALL FKDCB($SODC4,INLU,0,0,100000K)] GOTO UMAIN END PSER: SUBROUTINE(PROG) LET PSERM BE INTEGER(14) INITIALIZE PSERM TO "FILE NAME= NAME= " T1_[T_@PSERM+5]+6 CALL MSTBL(FILEX,$T,I); IF PROG THEN\ [T2_CCON(PROG); CALL UNSTR(PROG,$T1,T2); I_17] CALL .XEC(2,PSERM,((I+11)>-1)) GOTO SRTRN END END END$  qz 29103-80182 A S P0122 UNSTR SPL             H0101 SP̬̬MϬԬ NAMŠUNS( ԠPBŠPSUDϬNA !SNG--AAYNVSN UNS:SUBUNŠ(PҬAAYNMAةGBA !AKSHAS.MASNG"P"ANDPAKSHMN !AAY"AAY"ϠϠAD.NϠMŠHANNMAؠHAS !BŠANSDANDHŠAAY̠BŠBANK-DƠHŠAŠ ԠPBŠPSUDϬNA _AAY P_P ìK_ PAԠNMAؠMSDϠHUUN Ơý0KHNGϠUN!BANK-. _(P(P?(0KANDK UN:(KANDHN$_(- = <6-DIGIT OCTAL VALUE> ! OR: ! = UNDEFINED ! LET XNDFS BE CONSTANT(100104K) !"UNDEFS" LET XNDFD BE CONSTANT(100110K) !"UNDEFINED" LET SLOCC BE CONSTANT(100250K) !"LOCC" LET SXFER BE CONSTANT(100514K) !".XFER" LET TABLE BE CONSTANT(100214K) !"TABLE" LET LOCC,ASTAK,BINY,ABINY BE INTEGER,EXTERNAL LET DSUDF,STPRG,UNSTR,OCTAQ,EXEC,MSTBL,BLNK\ BE SUBROUTINE,EXTERNAL LET STAK,SVLU,STYP BE PSEUDO,EXTERNAL LET NXSY BE FUNCTION,EXTERNAL LET BINY BE INTEGER(60),EXTERNAL LET IAILU,INLU BE INTEGER,EXTERNAL ! CK: SUBROUTINE(CKBUF,CKN) CALL EXEC(2,LU,CKBUF,CKN) ! PRINT THE LINE CALL BLNK(CKBUF,CKN) ! FOLLOWED BY A BLANK LINE RETURN END ! S: FUNCTION !DISCARDS NEXT VALUE IN ASTAK ! AND RETURNS 2ND VALUE SV_STAK(ASTAK); RETURN STAK(ASTAK) END ! DSPST: SUBROUTINE GLOBAL CALL BLNK(BINY,40) J_S !POP "DISPLAY" AND GET NAME LU_S !POP "ON" AND GET LOGICAL UNIT LU_[ IF LU THEN SVLU(LU)\ !GET LOGICAL UNIT NUMBER ,ELSE [IFNOT IAILU THEN 1\ ,ELSE INLU]] DSP1: IF J=XNDFS THEN GOTO DSP4 !DISPLAY UNDEFS IF J=TABLE THEN GOTO DSP8 !DISPLAY TABLE. CALL MSTBL(J,$(ABINY+1),N) N_((N+3)>-1) BINY([N_N+1])_" =" IF(STYP(J) AND 30K)=30K THEN\ DEFINED ENTRY POINT NAME [T_SVLU(J); GOTO DSP2],\ ELSE[ IF J<=SXFER THEN\ CHECK FOR KEYWORD [IF J=>SLOCC THEN[T_$(@LOCC+((J-SLOCC)>-2)); GOTO DSP2]]] ! ! SYMBOL IS NOT AN ENTRY POINT NAME WHICH IS CURRENTLY DEFINED. !    CALL MSTBL(XNDFD,BINY(N+1),J); N_N+5; GOTO DSP3 DSP2: CALL OCTAQ(BINY(N+1),T); N_N+3 DSP3: CALL CK(BINY,N) DSP: RETURN DSP4: CALL DSUDF(LU,0,BINY,J) !PRINT UNDEFINEDS RETURN ! ! DISPLAY TABLE ! DSP8: J_0 !START S.T. SEARCH FOR E.P. NAMES DSP10: J_NXSY(J)?[GOTO DSP] !GET NEXT SYMBOL IF(STYP(J) AND 30K)#30K THEN GOTO DSP10 CALL MSTBL(J,BINY(2),N) IF N<6 THEN N_6 N_3+(N>-1); BINY(N)_" =" CALL OCTAQ(BINY(N+1),SVLU(J)) N_N+4; CALL CK(BINY,N); GOTO DSP10 END END END$ O  u| 29103-80189 C S 0122 DSUDF SPL             H0101 gSP̬̬MϬԬ NAMŠDSUD( !V-à ! ԠUPUNSҬSPGMSB̬BNKBŠSUBUNŬNA ԠKBŠSUBUN ԠSNAMSVUSYPPBŠPSUDϬNA ԠNBŠUNNNA̠!UNSHAS.NSNG. ԠUNDƱBNYBŠNGҬNA ! DSUD:SUBUN(UAҬBUƬNSGBA ! !SUBUNŠϠPNԠNAS("NϠUNDS"ƠNNũ ! ԠUBŠNGҠ!DSPAYGA̠UN ԠAҠBŠNGҠ!AG:Ơ0HN"DN"AH ԠNSBŠNGҠ!UND<0ƠNϠSUNDND !ASANNYPNԠƠVAUŠZ ԠBUƠBŠNG(0 ԠMSGBŠNG(5 NAZŠMSGϠ"NϠUNDS" ԠMSGBŠNG( NAZŠMSGϠ"UNDS" ! P_UNDƱ!SAVŠSNGPN NS_-!NUMBҠƠSUN. Ա__BU+ DSU:A̠BNK(BUƬ0!PUԠBANKSNPNԠN NP_P(Pԩ?GϠNSHݠ!GԠNAMŠSNG.0ƠDND. D_P(PԩP_P(Pԩݠ!GԠSԠ.UPS NԠNPԠHNGϠDSU!NYNϠNGҠUNDND NNS_NS+ݠHN\PNԠ"UNDS" A̠K(MSG NHA_0 NS_N(NPԩ+!GԠHAAҠUN ƠNS LWABP THEN CALL DIAG(9,NAMX) ] ! CHECK FOR MAXIMUM COMMON IF [XCOM_$([T_T+1])] THEN CALL SCOMM T_T+1 ! PROCESS REVISION CODE. ! THE REVISION CODE WILL HAVE IN IT ALL PARAMETERS BEYOND THE ! COMMON LENGTH. A_BINYA+RLNGH!GET END OF RECORD ADDRESS I_ISTR(REV) !INITIALIZE REVISION CODE STRING UNTIL T=A DO[IWP(I)_$T;T_T+1] ! MAKE GUESS AS TO PRIMARY AREA. F1: NXTPG_[PAGE_B76(LOCC)]+2000K!COMPUTE PAGE ADDRESSES IFNOT(LINKF AND 1) THEN GOTO FP3!BASEPAGE ONLY MODE IF PLGTH = -1 THEN[CALL SGESS?[GOTO FP3];FGESS;GOTO FP3] ! CHECK IF A GUESS AREA NEEDS TO BE CREATED IF PAGE=B76(LOCC+PLEN7) THEN GOTO FP1!NO PAGE CROSSING. SGESS?[A_NXTPG-LOCC;B_PLEN7-A;NGESS_(MIN((A>-1),B))>-2] FGESS FP1: SEC_ISTR(XSEC) IWP(XSEC)_LOCC+PLEN7 FP3: NXTPG_[PAGE_B76(LOCC)]+2000K LAPAG_B76(LOCC+PLEN7)!COMPUTE LASTPAGE THIS MODULE FP5: PBASE_LOCC; BBASE_BPLOC; CBASE_FWAC!SET RELOCATION BASES EXTX_ISTR(EXTX1); ENTRX_ISTR(ENTR1); UNDFX_ISTR(UNDX1) ! SAVE OLD STACK CONTENTS O( F BASE PAGE LINKS STACK, IN CASE A ! BACKUP PASS IS CALLED FOR. PTR_FREBE ALWAYS DO[IFNOT $PTR THEN GOTO FP9;\ STAK(OFREB)_IWP(PTR)?[GOTO FP9]] FP9: CALL RVERF !GET NEXT RECORD. GOTO BPRC1 END SGESS: SUBROUTINE FEXIT,DIRECT IFNOT NLINK THEN FRETURN NGESS_SVLU(NLINK) RETURN END FGESS: SUBROUTINE DIRECT GUESS_ISTR(XGESS) IWP(XGESS)_LOCC LOCC_LOCC+NGESS RETURN END END END$  { 29103-80198 C S 0122 SCOMM SPL             H0101 aSP̬̬MϬԬ !Và NAMŠSMM( !SUBUNŠϠHANDŠMMNDAANSNUDNGDAUS. SMM:SUBUNŠGBA ԠMBŠNGҠNA!NGHƠUNԠMMNDAA ԠDMBŠNGҬNA!MMNDAUDAG ԠAìAìAMìMMMNABŠNGҬNA ԠϠBŠNGҬNA̠!ҠDŠAG !HKҠDAUS. ƠAàHNGϠSM!AàHASBNDND ƠAàHNGϠSM5!AàNYHASBNDND. !DAUԠDNNƠMMNHNNHҠAàNҠAàHAS !BNDND:PAŠMMNSANGAԠUNԠVAUŠ !ìANDNASŠàVҠHŠMMNBK SM:A__A_+DMMM_M- UN SM:ƠAàHN\BHDNDHKҠMMNNGH MM_A-A+ƠMM7) AND 377K !TRACK ADR.RES.LIB.ENTRY POINTS. SEC_SEC AND 177K LU_2 !LIBRARY IS ALWAYS ON SYSTEM DISC NSPTK_$1757K !#SECTORS/TRACK ON LU2 CNTR_$DSCLN Yz !COUNTER #RES.LIB.ENTRY POINTS. NBLK_(((((CNTR-<2)+ 77K))->6)AND 177K)!COUNT MAX#BLOCKS TO SEARCH ! ! READ SECTOR OF RESIDENT LIBRARY ENTRY POINT NAMES. ! OPLB1: IF[NBLK_NBLK-1]<0 THEN GOTO OPL20 CALL RDSK !READ NEXT BLOCK OF RES.LIB.ENTRY CNTR_[T3_CNTR]-NENTS ! SET COUNTER TO MINIMUM OF # ENTRY PTS THIS BLOCK AND ! # ENTRY POINTS REMAINING. IF T3 > NENTS THEN T3_NENTS T_DCB13 !SET BLOCK POINTER OPLB2: T_T+4 !ADVANCE POINTER LNKAD_$([TP3_[TP2_T+2]+1])!GET SYMBOL VALUE/LINK ADDRESS REPFL,TYPE_$TP2 AND 7!GET SYMBOL TYPE.SET REPLACEMENT INSTR.FLAG IF [T3_T3-1] < 0 THEN GOTO OPLB1! CHECK FOR END OF BLOCK IFNOT[ FSYMB_FSYMB+1]\ FIRST SYMBOL ENCOUNTERED THEN [ IF LNKAD=2001K THEN \ MUST CERTAINLY BE RTE-II LINKF_ LINKF OR 4000K] IF TYPE = 1 THEN\ "VALUE" IS DISC-RESIDENT ADDRESS. IGNORE. GOTO OPLB2 OPLB5: STRG_UNDF1 ! ! BEGIN SEARCH:: COMPARE EACH SYMBOL IN THE UNDEFINEDS STRING ! WITH THE SYMBOL POINTED TO BY "T". IF A MATCH OCCURS, ! THEN DEFINE THE SYMBOL AND RESOLVE THE FIXUPS. IF NO ! MATCH IS FOUND, THEN DEFINE THE SYMBOL ANYWAY ONLY IF ! ITS TYPE IS 4 (REPLACEMENT INSTRUCTION CODE). IN THIS EVENT, ! THE SYMBOL MUST BE "FAKED" TO APPEAR TO BE A STRING, SO ! THAT THE SYMBOL TABLE-MANIPULATION ROUTINES MAY BE USED. ! OPLB6: STRX_STRG !SAVE NAME POINTER NAM_IWP(STRG)?[ GOTO OPNL7] ! GET UNDEFS NAME STRING PTR REF1_IWP(STRG) ! GET UNDEFS 1ST REFERENCE FIX_IWP(STRG) ! GET UNDEFS FIXUP LIST PTR IFNOT NAM THEN GOTO OPLB6 ! SKIP ENTRIES ALREADY DEFINED IFNOT [MFLAG_MAT2($T,NAM,5)] \ NO MATCH. TRY NEXT UNDEF. THEN GOTO OPLB6 ! ! ! MATCH FOUND. ! ! OBTAIN TYPE CODE, AND PROCESS ACCORDING TO TYPE: ! ! TYPE PROCESSED AS: ! 0 NORMAL ENzTRY POINT. FOR RTE-I, TABLE ENTRY WORD 4 ! CONTAINS THE LINK; $(WORD 4) CONTAINS THE SYMBOL ! VALUE. FOR RTE-II, WORD 4 CONTAINS THE SYMBOL ! VALUE(THE RESIDENT BASE PAGE LINKS AREA MUST BE ! SEARCHED FOR A LINK [ONE MAY NOT EXIST]). ! ! EXAMPLES: EXEC, $LIBR,$LIBX ! ! ! 1 DISC-RESIDENT (IN UTILITY LIBRARY). "VALUE" IS DISC ! ADDRESS IN LIBRARY OF MODULE. SXL IGNORES THIS ! DIRECTORY. ! ! 4 REPLACEMENT-TYPE ENTRY POINTS. ALL REFERENCES ! TO THE SYMBOL ARE REPLACED BY THE INSTRUCTION ! CODE FOUND IN THE "VALUE". EXAMPLES: EAU ! AND FLOATING-POINT INSTRUCTIONS. ! OL10: IF TYPE = 4 THEN [VALUE_$(TP3); TYPS_70K; GO TO CFX] TYPS_ 30K; REPFL_-1 IF (LINKF AND 4000K) \CHECK WHETHER VALUE IS SYMBOL OF LINK THEN [VALUE_LNKAD;LNKAD_0;\RTE-II \ SCAN RESIDENT BASE PAGE LINKS AREA FOR MATCH \ IF NO LINK FOUND, USE THE ONES IN THE \ FIXUP LIST. FOR LOOPV_10 TO ($BPA1-1) DO\ [ IF $LOOPV=VALUE THEN\ GOTO CFX]],\ ELSE VALUE_$LNKAD ! RTE-I ! ! RESOLVE FIXUP LIST ! CFX: IF FIX THEN CALL CFXUP(FIX,VALUE,LNKAD,BINY,REPFL) ! ENTER SYMBOL IN SYMBOL TABLE CALL GETRM(0,ENTAD) !GET SYMBOL TABLE SPACE STYP(ENTAD)_TYPS SVLU(ENTAD)_VALUE SATR(ENTAD)_FILEX ! GET ROOM FOR SYMBOL P_T !SET UP BUFFER POINTER IF ($(T+1) AND 77400K) > 20000K \SYMBOL > 2 CHARS. THEN [CALL GETRM(3,NAMAD); SMBL(ENTAD+2)_NAMAD],\ ELSE NAMAD_ENTAD+2 ! ENTAD = SYMBOL TABLE POINTER VIRTUAL ADDRESS ! NAMAD = SYMBOL NAME VIRTUAL ADDRESS ! MOVE SYMBOL NAME TO VIRTUAL MEMORY ! SN2: IF([J_[WORD_$P] AND 77400K]) <= 20000K\SYMBOL ENDED W/ PREVIOUS THEN[SMBL(NAMAD-1)_SMBL(NAMAD-1) OR 200K; GOTO SN3]! WORD IF(WORD AND 177K) <= 40K \ SYMBOL ENDS WITH HIGH-WORD THEN WORD_J OR 200K SMBL(NAMAD)_WORD !STORE CHARACTERS IN VIRTUAL MEMORY IF (WORD AND 200K) THEN GOTO SN3 P_P+1 NAMAD_NAMAD+1 GOTO SN2 ! IF SYMBOL IS A MATCH TO AN UNDEFINED, PURGE ! THE NAME STRING AND DELETE IT FROM ! THE UNDEFINEDS LIST SN3: IF (LISTO AND 1) \ LIST ENTRY PTS OPTION THEN CALL PRENT(ENTAD,VALUE,BINY,REF1) IFNOT MFLAG THEN GOTO OPLB2 CALL STPRG($STRX) !PURGE NAME STRING & DELETE FROM UNDEFS LIST IFNOT LNKAD THEN GOTO OPLB2!NO LINK FOUND IFNOT SLNKS THEN XLNKS_ISTR(SLNKS),ELSE IWP(XLNKS)_-1 IWP(XLNKS)_LNKAD IWP(XLNKS)_VALUE GOTO OPLB2 ! ! NO MATCH TO $T EXISTS IN UNDEFINEDS STRING. ! IF SYMBOL IS TYPE 4, DEFINE IT ANYWAY. ! OPNL7: IF (TYPE OR (LINKF AND 2000K))# 4 THEN GOTO OPLB2 ! ! BIT 10 OF LINKF IS SET AFTER THE FIRST SYSTEM LIBRARY ! SCAN TO PREVENT TYPE 4 ENTS FROM BEING ENTERED MORE ! THAN ONCE. ! MFLAG,FIX,REF1_0 ! GOTO OL10 ! ! FINISHED WITH CORE-RESIDENT LIBRARY ROUTINES. ! SET UP DISC POINTERS ETC. TO READ RELOCTABLE UTILITY LIBRARY ! PROGRAMS. OPL20: $(DCB4+1),TRAK_(([SEC_$DSCUT])->7)AND 377K !TRACK $(DCB4+4),SEC_SEC AND 177K !SECTOR $(DCB4),$(DCB4+3),ERR_0 $(DCB4+2),LU_2 !SYSTEM LIB.ALWAYS ON LU2 $(DCB4+5)_-($DSUNN) !NEG.#PROGS COUNTER $(DCB4+6)_NSPTK !#SECTORS/TRACK(64-WORD) CALL RDSK LINKF_LINKF OR 2000K !SET FIRST-LIBR. PASS FLAG RETURN END ! ! READ DISC ROUTINE ! RDSK: SUBROUTINE DCB17_[DCB13_DCB4+12]+4!POINTER TO 128-WORD PACKING BUFFER CALL EXEC(1,LU,$DCB17,LENTH,TRAK,SEC)  IFNOT[SEC_SEC+1] 7!TRACK $(DCB4+6),NSPTK_$(1755K+LU) !#SECTORS/TRACK $(DCB4+7)_0 ERR_[IF $LGOTK THEN 0,ELSE -6] CALL RDSK !GET 1ST SECTOR RETURN END LET BLNK,MSTBL,EXEC BE SUBROUTINE,EXTERNAL LET FILEX,ASTAK,LISTO,LSTLU,DCB BE INTEGER,EXTERNAL LET STAK BE PSEUDO,EXTERNAL LET BUF BE INTEGER(4) INITIALIZE BUF TO 4(" ") STUP: SUBROUTINE FILEX_STAK(ASTAK) !GET FILE NAME S.T. POINTER CALL BLNK(DCB,3) CALL MSTBL(FILEX,DCB,T) CALL MSTBL(FILEX,BUF(2),T) IF LISTO AND 4 THEN CALL EXEC(2,LSTLU,BUF,4) RETURN END END END$ '   29103-80212 C S 0122 CLOP SPL             H0101 eSP̬̬MϬԬ NAMŠP(!ƠAABŠŠSŠ !V-B5 ԠPKUDƬSŠBŠSUBUNŬNA ԠҬDBBŠNGҬNA P:SUBUNŠGBA A̠S($DBҩ A̠PKUDƠ!PAKUNDNDSSNG. UN ND ND ND$ ܋  29103-80214 C S 0122 DBL SPL             H0101 +SP̬̬MϬԬ NAMŠDB(!DB̠DPSS !Và ԠìSPGDAGABUԬSHVƠBŠSUBUNŬNA ԠSVUPBŠPSUDϬNA ԠNDPMAجMNNKB6BŠUNNNA !DNŠGBA̠NSANS ԠAMABPNPGNKƬNGSSAMMNAϬ\ رABNY\ MNABBŠNGҬNA ԠNɠBŠNGҬNA ԠABUƠBŠNG(50 ԠMAجMNBŠUNNNA ԠSBԠBŠNSAN(00000K!SGNB. ԠBPñBŠAB̬NA NAZŠDϠABU BY:UNNDԠ!GԠNԠANBY. !UNSNԠANBY !$BYPUNԠANBYSD.HSSDYN- !AMAYMDDBYHSUNŠASAHBYŠSUND !SϠHAԠHŠנ3BSAŠHŠNԠBY. !BNԽUNԠƠUND.SԠAҠ5. !NUNNSҠNSUNDŬSBԽNSUNSGNB. ƠBNԽ5HNBYP_NɻBN_0N_N+ SB_(NS_$NݠAND00000K BN_BN+ UN($BYP_($BYP-<3ݠAND ND ! ! DB:SUBUN(NP̱NP̲BASPNHAPAG\ GBA ԠBNYBŠNG(NA A̠SH!SHADŠPNSAUND. D3_D_D++ _ABNY+N_AD_N+ BN_5 !GԠBASŠϠSAԠADNG. YP_(((($ԩ-6AND3Ҡ D_NNS_$ԠANDK+HK$DADDS_$(YP+BASP+$AD $D_(NNSԠ-LWABP THEN -1,ELSE 0]!SET BASE PAGE FULL FLAG. ! ! SEARCH PRIMARY CURRENT PAGE AREA FOR LINK WHICH IS ON SAME ! PAGE AS REFERENCE WORD. ! LIN2: CALL PGCK(GUESS,SGPAG,CP1F,LOCC)?[GOTO LIN4] RETURN LIN4: CALL PGCK(SEC,SC2PG,CP2F,MIN(NXTPG,LWAM1))?[GOTO LINK7] RETURN ! ! SEARCH "SECRET BASE PAGE LINKS STRING". IF MATCH NOT FOUND, ! TOUGH. THIS STRING CAN ONLY BE DEFINED BY LINKS CREATION ! STATEMENT ! LINK7: X_SLNKS SC3PG_IWP(X)?[GOTO LINK8] CALL CHEK(SC3PG)?[GOTO LINK8] RETURN SC3PG !FOUND A SECRET LINK. ! ! MUST ALLOCATE A LINK._ ! LINK8: IF LINKF AND 1 THEN GOTO CURRN,ELSE GOTO BASEP!BRANCH ON LINK MOD LET BP,CP1,CP2 BE SUBROUTINE,DIRECT ! SUBROUTINES TO ALLOCATE LINKS FROM BASEPAGE,PRIMARY OR SECONDARY ! AREAS. ! THEY WILL TRANSFER DIRECTLY TO LNK12 IF A LINK CAN BE ALLOCATED F ! FROM THE RESPECTIVE AREAS, AND WILL RETURN ONLY IF NONE ! CAN BE ALLOCATED. ! BASEP: CALL BP !TRY TO ALLOCATE FROM BASE PAGE FRETURN !IN THIS MODE, ONLY THIS CHOICE POSSIBLE ! CURRN: IF EXTF THEN CALL BP !ATTEMPT BASE PAGE LINK FOR EXTS CALL CP1 !ELSE PRIMARY AREA ! CALL CP2 !TRY TO ALLOCATE FROM SECONDARY AREA. GOTO BASEP !IF NONE OF ABOVE POSSIBLE. ! ! END BP: SUBROUTINE DIRECT!TRY ALLOCATING FROM BASEPAGE AREA. SBPAG_STAK(FREBE)?[GOTO BP5] STAK(UFREB) _ SBPAG ! KEEP TRACK OF THE LINKS OBTAINED FROM ! "FREBE" CALL PBPLK(SBPAG,VALUE); GOTO LNK11 BP5: IF BPF THEN RETURN !BASE PAGE AREA FULL. IWP(XBPLK)_VALUE NBPLK_NBPLK+1 MAXAB_MAX(MAXAB,SBPAG) GOTO LNK11 END CP1: SUBROUTINE DIRECT!TRY ALLOCATING FROM PRIMARY AREA IF CP1F THEN RETURN !PRIMARY AREA FULL. IWP(XGESS)_VALUE LINKV_SGPAG !LINK ADDRESS NCPL1_NCPL1+1 GOTO LNK12 END CP2: SUBROUTINE DIRECT!TRY ALLOCATING FROM SEC. LINKS AREA IF CP2F THEN RETURN !SECONDARY AREA FULL. IWP(XSEC)_VALUE LINKV_SC2PG !LINK ADDRESS NCPL2_NCPL2+1 GOTO LNK12 END CHEK: SUBROUTINE(CHE) FEXIT,DIRECT !SUBROUTINE TO SCAN EITHER ! BASE PAGE, OR EITHER CURRENT PAGE LINK STRING, DEPENDING ON WHICH ! OF THESE "X" POINTS TO, TO DETERMINE IF ANY OF THE LINKS IN THE LINK ! STRING MATCHES "VALUE." A NORMAL RETURN, WITH CHE = ADDRESS OF THE ! IS MADE IF A MATCH OCCURS, OTHERWISE AN F-RETURN IS MADE, WITHH CHE1 ! POINTING TO THE PLACE IN THE STRING WHERE THE LINK VALUE IS TO ! GO, IF IT IS APPLICABLE. ! ! IF ANY LINK IN THE LINKS STRING IS FOUND TO BE -1,THEN IT ! MARKS THE END OF THAT GROUP. ANOTHER GROUP MAY START, THE ! NEXT WORD IN THE STRING BEING THE START ADDRESS OF THE NEXT ! LINKS GROUP. THIS ALLOWS DATA TO BE MIXED WITH LINKS ! RELATIVELY INDISCRIMINATELY. ! CHEK0: IFNOT[CHEKV_IWP(X)?[FRETURN]] < -1 THEN\ [IF CHEKV < 2 THEN GOTO CHEK1] IF CHEKV#VALUE THEN GOTO CHEK1 !REJECT LINK IF <2 OR IF NO MATCH RETURN CHEK1: CHE_CHE+1 IF CHEKV #(-1) THEN GOTO CHEK0 CHE_IWP(X)?[FRETURN] GOTO CHEK0 END PGCK: SUBROUTINE(LSTRG,CPG,CPF,PLAST) FEXIT,DIRECT ! SUBROUTINE TO CHECK IF A LINKS STRING IS ON THE CURRENT ! PAGE(RPAGE), AND TO SET THE PAGE-STRING CLOSED FLAG(CPF) IF ! NOT, AND TO DETERMINE IF A LINK ALREADY EXISTS ON THAT STRING. X_LSTRG !SET DYNAMIC POINTER TO BEG. OF STRING CPG_IWP(X)?[GOTO CLOSE]!GET ADDRESS OF STRING; CLOSE IF NO STRING IF B76(CPG)#RPAGE THEN GOTO CLOSE!STRING NOT ON RIGHT PAGE CALL CHEK(CPG)?[GOTO MCLOS]!SEARCH STRING FOR MATCH;MAYBE CLOSE I LINKV_CPG !RETURN ADDRESS OF MATCHING LINK RETURN MCLOS: IF CPG < PLAST THEN FRETURN !STILL ROOM LEFT IN LINK AREA CLOSE: CPF_-1 !SET AREA CLOSED FLAG FRETURN END END END$ [  29103-80217 1715 S 0122 RDCRD SPL             H0101 SPL, L, M, O, T, C NAME RDCRD(8) "REV G 770324" ! ! SUBROUTINE TO READ NEXT LINE RD: SUBROUTINE LET SOURC,SPTR BE INTEGER,EXTERNAL LET SODC4,CMDLN,CHAR,OBT,INLU,EKOLU BE INTEGER,EXTERNAL LET SODCB BE INTEGER,EXTERNAL LET READF BE SUBROUTINE,EXTERNAL LET EXEC,TRBAK,DIAG BE SUBROUTINE,EXTERNAL LET ISTR BE FUNCTION,EXTERNAL LET ICP BE PSEUDO,EXTERNAL LET CONTN BE INTEGER !CONTINUATION CHARACTER INITIALIZE CONTN TO "&" LET COMID BE CONSTANT(26400K) !COMMAND ID CHAR(-) LET PRMPT BE INTEGER(2) !PROMPT CHARACTER INITIALIZE PRMPT TO 3407K,"-_" LET IAILU BE INTEGER,EXTERNAL !INTERACTIVE INPUT DEVICE FLAG LET EQT5 BE INTEGER LET DRT BE CONSTANT(1652K) ! R0: CHAR,T_@OBT+1 IAILU _ 0 LU77 _ INLU AND 77K EQT5 _ $($DRT+LU77-1) AND 77K IF LU77 # 0 AND EQT5 # 0 THEN [\ MUST BE A VALID LU CALL EXEC(13,LU77,EQT5);\ !GET STATUS OF INPUT DEVICE IF [EQT5_(EQT5 -> 8) AND 77K] = 5\ IF TYPE = 5 THEN CHECK THEN [EQT5_(($($DRT+LU77-1) -<5) AND 37K)];\ FOR SUBCH 0 IF EQT5 = 0 THEN [\ !SET INTERACTIVE FLAG ON, IAILU _ 1;\ CALL EXEC (2,INLU,PRMPT,2)]] ! AND PRINT PROMPT CALL READF($SODC4,ERR,$T,40,CMDLN) IF CMDLN<0 THEN [CALL TRBAK; GOTO R0]!EOF--TRANSFER BACK IF ERR<0 THEN CALL DIAG(16,@SODCB) IF EKOLU THEN CALL EXEC(2,EKOLU,OBT,CMDLN+1) ! ! CHECK FOR COMMENT IF[C_ $T AND 77400K] =25000K\"*"; IGNORE COMMENTS THEN GOTO R0 !IGNORE COMMENTS ! ! CHECK FOR COMMAND IDENTIFIER CHARACTER ! IF C# COMID THEN[ IF IAILU =0 THEN\ CALL DIAG(17,0)],\!COMMAND ID REQUIRED BUT NOT FOUND ELSE $T_($T AND 177K) OR 20000K!SET COMMAND ID CHAR TO BLANK RETURN END ! RDCRD: SUBROUTINE GLOBAL ! SUBROUTINE TO READ NEXT STATEMENT    SOURC_ISTR(SPTR) R1: CALL RD !GET NEXT LINE L_CMDLN<-1; WHILE L DO\ [C_$T; IFNOT (L AND 1) THEN C_C-<8,\ ELSE T_T+1;IF[C_C AND 177K]=CONTN THEN GOTO R1;\ ICP(SPTR)_C; L_L-1] ICP(SPTR)_15K !PUT IN CARRIAGE RETURN SPTR_SOURC !START AT HEAD OF STRING RETURN END END END$   29103-80218 A S P0122 CRTOP SPL             H0101 SP̬̬MϬԬ NAMŠP( ! !AŠŠPSHPA ! !NNSƠASAKHNAD(MPƠSAKDN ! !NGAVŠBKSZ !S..PNҠϠŠNAM !NGAVŠYPŠ(--6Ҡ- !S..PNҠϠADGŠDN(HHSNUMé !S..PNҠϠSUYD(HHSASϠNUMé ! ! ԠSAKSVUBŠPSUDϬNA ԠDAGBNKMSB̬AԠBŠSUBUNŬNA ԠASAKDBDBҠBŠNGҬNA ԠSZŬYPŬҬSàBŠNG S:UNN UN(SV_SAK(ASAKݠHNSVU(SV\ SŠ0ݩ ND P:SUBUNŠGBA SZ_-SAK(ASAK!GԠPS.BKSZ A̠BNK(DB3A̠MSB(SAK(ASAKDBYPũ!BANKMVŠ !GԠŠNAMŠANDMVŠϠDAAN̠BKNAMŠAA YP_-SAK(ASAK!GԠPS.ŠYP !GԠADGŠ.D.ANDSUYDŠVAU _SS_S ! !NנAŠHŠ A̠A($DBҬDBSZŬYPŬSìҩ Ơ<0HNA̠DAG(0DB!AŠŠ UN ND ND ND$   29103-80221 C S 0122 SNPOP SPL             H0101 gSP̬̬MϬԬ NAMŠSNPP( !V-à ! !SNAPSAMNԠPSHUN ! !SNAPN-1 !ASSIGN # PAGES / TRACK IFNOT SESIZ THEN\ NO TRACKS AVAILABLE.PRINT WAITING MSG & [CALL .XEC(2,WATG,14); CALL EXEC(7);\ SUSPEND GOTO RT3]    !RETRY ON OPERATOR "GO" RT1: PDSIZ_MIN(240, TSIZE*SESIZ) RETURN END END END$   29103-80226 C S 0122 INIT1 SPL             H0101 lSP̬̬MϬԬ !Và0 NAMŠNԱ( ԠMMҬPNDAGKDBMV.BŠSUBUNŬNA ԠSVUSYPBŠPSUDϬNA ԠSҠBŠUNNNA ԠSDôDBDBBDNGNUKUSUUUBŠNGҬ\ NA ԠSDBìBPìҬNKƬUNDƱUNDSSϬ\ BPKSNBPKMAAMNAMAAPҬBŬSNKSNKSMNA\ ҬPNAMPVSKMAABMNABBŠNGҬNA ԠàBŠSUBUNŬNA ! !DNŠADDSSSƠHSԠSYSMPAAMS: ! ԠDSBBŠNSAN(6K!-SDNԠBAYNYPNS ԠDSUԠBŠNSAN(63K!DS-SDNԠUYBAYADD ԠSԲBŠNSAN(5K!SSAKSYS.DS NԱ:SUBUNŠGBA DNGNBPKSKBPìҬMAABMNABMNA\ MAAìUNDƱBPKSMAAUNDSPҬBŬSNKS\ NKSMNAPNAMPV_0 ƠNKƠAND0000KHNGϠNԲ!SUPU'SNYN. NK_NKƠ\SԠBԠƠ- Ơ$DSB<$DSUԠHN0\- SŠ000K!- NԠNUHNNU_5!DAUԠNPUԠUN NԠSUHNSU_6SŠS_K NԠUUHNUU_ !HKƠSԠ3PAAMSAŠAŠNAM ƠNU0000KHN\YS--MVŠHASϠSUŠD..B. P_NU\ƠŠNAM<6HAS.BANK- PAԠ3MSD\ ۠($PҠAND00K<0000KHN\ $P_0000K\ Ơ($PҠANDK<0KHN\ $P_(($PҩAND00K+0K\ P_P+ݻ\ A̠MV.(NUSDB3\MVŠNAMŠϠSUŠDB NU_0SUKU_0UU_\ A̠PN($SDôҬSDBƠҠ<0HN\ NU_0KA̠KDB($SDôNU000000K\ A̠DAG(6SDBݬ\ SƠNUHNNU_0KA̠KDB($SDôٖ  NU0\ 00000K NԲ:NK_(NKƠAND3KҠ0000K A̠MMҠ!SUPDAUԠPGAMBUNDS UN ND ND ND$ S   29103-80227 A S P0122 MEMR SPL             H0101 SP̬̬MϬԬ NAMŠMM( !SUBUNŠϠUNDAUԠBUNDSƠAVAABŠMMY. ! ! !DNŠNSANSҠŠBAKGUNDDSàSDNԠPGAMS. ! Ԡ.AMBŠNSAN(K!ABKD Ԡ.AMBŠNSAN(5K!A" Ԡ.ABBŠNSAN(K Ԡ.ABBŠNSAN(6K!ABP6K Ԡ.AàBŠNSAN(5K Ԡ.MBŠNSAN(53K !NDSYSM-DPNDNԠNSANS ԠAMAMABPABPAìAìMMBŠNGҬNA ԠAMBŠNGҬNA !HKƠMMYBUNDSNSANSDNDPVUSYAS !UDBŠPSSBŠҠSGMNԠPSSNG. MM:SUBUNŠGBA NԠAMHNAM_$.AM NԠAMHNAM_$.AM NԠABPHNABP_$.AB NԠABPHNABP_.AB NԠAMHNAM_$.AM UN ND ND ND$ &  29103-80228 1715 S 0122 MAPST SPL             H0101 SPL,L,M,O,T,C NAME MAPST(8) "REV G 770325" ! MAP OPTION ROUTINE SEMANTICS. ! ! LISTO IS THE LIST OPTIONS FLAG , CODED AS FOLLLOWS: ! BIT 0 (1) GLOBALS ! 1 (2) MODULES ! 2 (4) FILES ! 3(10) HEADING HAS BEEN PRINTED. ! 4(20) LINKS ! LET OFFS BE CONSTANT(100404K) !"OFF" LET FILS BE CONSTANT(100234K) !"FILES" LET GLBS BE CONSTANT(100240K) !"GLOBALS" LET MODS BE CONSTANT(100224K) !"MODULES" LET LINKS BE CONSTANT(100100K) !"LINKS" LET ON BE CONSTANT(100220K) !"ON" LET ALL BE CONSTANT(100410K) !"ALL" LET LSTLU,ERR,ASTAK,LISTO BE INTEGER,EXTERNAL LET EXEC BE SUBROUTINE,EXTERNAL LET STAK,SVLU BE PSEUDO,EXTERNAL LET MSG1 BE INTEGER(31) ! TITLE LET MSG2 BE INTEGER(19) ! MESSAGE LET MSG3 BE INTEGER(35) ! BUFFERS LET DATE BE INTEGER (5) INITIALIZE MSG1 TO\ " FILE PROGRAM GLOBAL FIRST LAST BASE PAGE REF.BY " INITIALIZE MSG2 TO\ " NAME MODULE VARS. ADDRS. ADDRS." INITIALIZE MSG3 TO " ",34("--") INITIALIZE DATE TO " SXL REV G" S: SUBROUTINE !POP TWO VALUES FROM ASTAK SV_STAK(ASTAK) T_STAK(ASTAK)?(0) RETURN END !RETURN F-RETURN STATUS IN (E) REG. ! MAPST: SUBROUTINE GLOBAL LISTO_LISTO AND 10K !CLEAR MAP OPTIONS FLAG MP1: CALL S?[GOTO QUIT] !GET NEXT TWO ITEMS FROM ASTAK IF SV=ON THEN GOTO QUIT IF T=FILS THEN LISTO_LISTO OR 4 !"FILES" IF T=MODS THEN LISTO_LISTO OR 2 !"MODULES" IF T=GLBS THEN LISTO_LISTO OR 1 !"GLOBALS" IF T=LINKS THEN LISTO_LISTO OR 20K IF T= OFFS THEN LISTO_LISTO AND 10K IF T = ALL THEN LISTO_LISTO OR 27K GOTO MP1 !LOOP ON GETTING OPTIONS. ! QUIT: IF T THEN LSTLU_SVLU(T) IF LISTO AND 27K THEN[\ IFNOT(LISTO A6  ND 10K)THEN\ PRINT HEADER [CALL EXEC(3,LSTLU+1100K,-1); CALL EXEC(2,LSTLU,DATE,5);\ CALL EXEC(2,LSTLU,MSG1,31);\ CALL EXEC(2,LSTLU,MSG2,19);\ CALL EXEC(2,LSTLU,MSG3,35);\ LISTO_LISTO OR 10K]] RETURN END END END$ 7   29103-80229 C S 0122 LNKST SPL             H0101 kSP̬̬MϬԬ !Và NAMŠNKS( ԠDԠBŠNGҬNSAN(00500K!"D" ԠUNԠBŠNSAN(000K!"UN"NS.. ԠSBԠBŠNSAN(00000K!SGNB. ! !NK:NKMDŠAG !BԠMANNG !BԠVAUŠMANNG !50NDԠNKNGMD !DԠNKNGMD !00BASŠPAGŠNY !UNԠPAG !0NAZANƠGA̠UNSNԠPMDY. !""""HASBNPMD. !0- !- !00SԠPASSƠ-SDNԠSYSMNYPNSN !PMD. !SԠPASS-S.NYPSHASBNPMD. ! ! ԠSAKBŠPSUDϬNA ԠAVAUASAKBŠNGҬNA ԠNKƠBŠNGҬNA S:UNN!GԠVAUŠƠASAK UNSAK(ASAK ND NKS:SUBUNŠGBA !PP"NKSN" SV_S SV_S NK_ƠSUNԠHNSŠ0ݠҠ(NKƠAND6000K AAYSDϠ\HKҠ"D" ƠS?UNݠDԠHNNK_NKƠҠSB ND ND ND$   29103-80231 A S P0122 MAT2 SPL             H0101 mSP̬̬MϬԬ NAMŠMAԲ( ! MAԲ:UNN(BUҬSجNGBA ! !UNNϠHKAHAAҠSNGAGANSԠAŠBU. !HAASAŠVDASBԠDAABYSƠAZϠAMŬ !ҠASɠBANK(0KҠMMA(5KSUNDNBUҬMP- !ASNMNASSUSSUYƠHŠHAAҠSNGS !MPYҠAUŠMNASƠN. !HSŬAMAMUMNHAASSHKD. ! ԠBUҠBŠNG(!ŠHAAҠBU ԠSؠBŠNGҠ!HAAҠSNGPN ԠNBŠNGҠ!MAMUMHAASϠHK. ԠPBŠPSUDϬNA̠!NMNԠHAAҠPN ! SP_Sؠ!SAVŠSNGPNҠNNAY. BP_BU Ҡ_ϠNDϠHUMAԲ _$BPҠ!GԠBUҠàHAA (ɠANDHN_-7? JMP HLT73 NO! GO TELL OPERATOR. LIA 1 GET SW. REG. AGAIN. ALF,ALF SHIFT SECOND RAL,RAL SC AROUND TO LOWER BYTE. AND B77 MASK TO SECOND IBI SC. STA IBH2 SAVE IT FOR TESTING. SZA,RSS IS THERE A SECOND SC? JMP NOSC1 NO! GO HALT NORMALLY. AND B70 MASK TO UPPER SC DIGIT. SZA IS SC > 7 ? JMP NOSC1 YES! CONTINUE NORMALLY. HLT73 HLT 73B NO! TELL OPERATOR HE ENTERED JMP CONFG ILLEGAL SC AND THEN RETURN. NOSC1 CLA OTA 1 CLEAR SW REG HLT 70B TEST SC'S ENTERED PROPERLY. LIA 1 GET SW.REG. WITH MYADDR(S). STA SAVEA SAVE IT FOR LATER USE. AND B77 MASK TO FIRST MYADDR. CPA B37 ADDRESS 37 IS NOT ALLOWED JMP HLT73 TRY AGAIN STA MYA1 SAVE IT. LDA SAVEA GET ORIGINAL SW. REG. ALF,ALF ROTATE SECOND MYADDR INTO RAL,RAL POSITION FOR MASK. AND B77 MASK TO SECOND MYADDR. CPA B37 ADDRESS 37 IS NOT ALLOWED JMP HLT73 TRY AGAIN STA MYA2 SAVE IT. CLA OTA 1 CLEAR SW REG HLT 71B MYADDR(S) ENTERED. LIA 1 GET PPPID INPUT FROM SW.REG. AND B377 MASK TO FIRST PPPID. STA PID1 SAVE IT. LIA 1 GET SW. REG. AGAIN. ALF,ALF SHIFT SECOND PPPID AROUND AND B377 AND MASK IT OFF. STA PID2 SAVE IT. LDA IBH2 IS THERE A SECOND SC SZA UNDER TEST? JMP NOSSC YES! GO HALT 74B. LDA IBH1 NO! UPDATE ALL INPUT PARAMETERS STA IBH2 SO THAT ONLY ONE IBI LDA MYA1 WILL BE TESTED BECAUSE OPERATOR STA MYA2 INDICATED ONLY ONE IBI IS LDA PID1 PRESENT. STA PID2 NOSSC CLA OTA 1 CLEAR SW REG HLT 74B END OF CONFIGURATION. SKP * * START OF MAIN DIAGNOSTIC * STARX LDA HALTC GET TRAP CELL HALT. LDB TWO GET FIRST TRAP CELL LOCATION. TRAPL STA B,I PUT A HALT IN THE TRAP CELL. CPB B77 STORED LAST TRAP CELL? JMP SKIN YES! GO TO TESTING. INB NO! UPDATE TRAP CELL POINTER. JMP TRAPL GO STORE THE NEXT TRAP CELL. SKIN CLA INITIALIZE THE STA PASCT PASS COUNT. LDB BIT10 SEE IF OPERATOR SUPPRESSED NON- JSB SWRT ERROR MESSAGES. DID HE? JMP CKTSM YES! SKIP PRINTING. CLE LDA DSN GET DSN LDB HDMX ADDR OF MESSAGE STRING JSB O2AS,I CONVERT OCTAL TO ASCII. JSB PCRLF GO PRINT CR-LF. CLA,CLE LDB INTMS GET INFORMATION AND MESSAGE POINTER. JSB FMTR,I GO PRINT MESSAGE. CKTSM JSB GETTM SEE IF OPERATOR WANTS TS MODULE. CLA CLEAR THE STA CTLWD CONTROL WORD. LDA B7760 GET THE INITIAL TEST MASK. STA MASK SAVE IT FOR TEST. CCA INITIALIZE PASS STA PSIND INDICATOR. MAINL JSB NOTWM SET ERROR REPORTING MODE. JSB SWAP GO SET UP TEST INFORMATION. CLA SET UP INITIAL STA ERRCD ERROR HALT NUMBER. * * TEST FLAG AND SKF LOGIC OF IBI * CLC INTP,C SHOULD SET IFC FLG FF. JSB CLCCF CLEAR FLAG ON IBI. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JSB SFCIB IS I-O FLAG CLEAR? E000 DEF FLGER NO! REPORT ERROR. JSB CONT SET ACTIVE AND OCT 100205 SRQFLGEN. I-O FLAG SHOULD SET. JSB SFSIB DID FLAG SET? E001 DEF FLGER NO! REPORT ERROR. IO.02 SFS IBI SKF SHOULD OCCUR. RSS IT DIDN'T. ERROR. JMP SK6 IT DID . CONTINUE. JSB SENDM REPORT ERROR. E002 DEF FLGER NO SKF ON SFS. SK6 ISZ ERRCD UPDATE ERROR CODE. JSB CLCCF SHOULD CLEAR IFC FLG FF. IO.03 SFC IBI SKF SHOULD OCCUR. RSS IT DIDN'T. REPORT ERROR. JMP SK7 IT DID SO CONTINUE NORMALLY. JSB SENDM REPORT ERROR. E003 DEF FLGER NO SKF ON SFC. SK7 ISZ ERRCD UPDATE ERROR CODE. SKP * * TEST INTERRUPT LOGIC * JSB STUFJ SET UP RETURN JMP IN THE DEF RTN1 IBI TRAP CELL. CLC INTP,C SET IFC FLG FF. JSB TIMOT ALLOW IFC TIME TO SETTLE. JSB CONT SET SRQFLGEN TO SET OCT 100205 THE IBI FLAG FF. IO.04 STC IBI SET THE CONTROL FF. STF INTP TURN I/O SYSTEM ON THEN CLF INTP TURN IT OFF. NOP IBI SHOULDN'T INTERRUPT. JMP XSCTT IT DIDN'T.GO TO NEXT TEST. RTN1 JSB SENDM IT DID SO REPORT ERROR. E004 DEF IENFL IEN LOW DIDN'T HOLD OFF INT. XSCTT ISZ ERRCD UPDATE ERROR CODE. * * TEST FOR ILLEGAL SELECT CODE DECODE. * LDB BIT3 START WITH SC 10. SCLOP CLC INTP,C ISSUE CRS TO IBI. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JSB CONT SET ACTIVE AND OCT 100205 SRQEN. LDA IO.04 GET I-O INSTRUCTION. AND B77 MASK TO SC. CPB A IS THIS THE IBI TEST SC? JMP EXCTT YES! SKIP TEST. LDA CLC NO! SET UP AND NB77 A CLC IBI,C IOR B INSTRUCTION. STA CLC PUT IT IN LINE. CLC CLC IBI,C ISSUE CLRINTFLG TO IBI. JSB SFSIB WAS FLAG CLEARED ILLEGALLY? E005 DEF SCFL YES! REPORT ERROR. JSB DECEC DECREMENT ERROR CODE. EXCTT CPB B77 IS TEST FINISHED? JMP BIO6C YES! GO EXIT. INB NO! UPDATE TO NEXT SC JMP SCLOP AND GO TEST IT. * * CHECK CONTROL FF LOW * HOLDS OFF AN INTERRUPT. * BIO6C ISZ ERRCD UPDATE ERROR CODE. JSB STUFJ PUT RETURN JMP IN IBI DEF RTN2=/ TRAP CELL. IO.06 STC IBI SET CONTROL FF ON IBI. STF INTP TURN ON INTERRUPT SYSTEM. IO.15 CLC IBI CLEAR CONTROL FF ON IBI. NOP ALLOW TIME TO INTERRUPT. JMP XINTT NO INT? GO DO NEXT TEST. RTN2 JSB SENDM INT? SEND ERROR MESSAGE. E006 DEF CLCFL CNTL LOW DIDN'T HOLD OFF INT. XINTT ISZ ERRCD UPDATE ERROR CODE. * * CHECK IBI CAN INTERRUPT * JSB STUFJ SET UP RETURN JMP DEF RTN5 IN IBI TRAP CELL. IO.16 STC IBI SET CONTROL FF ON IBI. NOP IBI SHOULD INTERRUPT HERE. JSB SENDM NO INTERRUPT SO E007 DEF INTFL REPORT ERROR. RTN5 ISZ ERRCD UPDATE ERROR CODE. JSB STUFJ SET UP RETURN JMP IN DEF RTN6 IBI TRAP CELL. STF INTP TURN ON INTERRUPT SYSTEM. NOP NO INT SHOULD OCCUR. JMP CINST IT DIDN'T! CONTINUE. RTN6 JSB SENDM IT DID! REPORT ERROR. E010 DEF IAKFL IAK DID NOT WORK. * * TEST INITIAL STATUS OF IBI1 AND IBI2. * CINST CLF INTP TURN OFF INT. SYSTEM. ISZ ERRCD UPDATE ERROR CODE. LDA PSCAE UPDATE ERROR MESSAGE STA PARAM CONTROL WORD. JSB CLCCF INITIALIZE I-O. JSB INITF INITIALIZE OBR LOGIC. LDB ISTAT GET EXPECTED IBI STATUS WORD. JSB STAT GET IBI STATUS. IS IT OK? E011 DEF ISTAF NO! INITIAL STATUS FAILURE. SKP * * TEST THE SET AND CLEAR CONTROL WORD * CAPABILITIES OF THE ACTIVE,REN,ATN,TALK * AND LISTEN FLIP-FLOPS. * JSB PRWMS SET UP ERROR REPORTING MODE. STO SET MESG INDICATOR. LDA B760 SET UP STA MASK TEST MASK. LDA MTABL SET STA MTAB1 UP LDA CTABL MESSAGE, STA CTAB1 CONTROL DATA AND LDA ETABL EXPECTED STA ETAB1 DATA TABLE POINTERS. TL01B LDA MTAB1,I GET ERROR MESSAGE POINTER. STA E012 PUT IT IN LINE. LDA CTAB1,I -c GET CONTROL WORD FROM TABLE. STA INLCO PUT IT IN LINE. LDB ETAB1,I GET EXPECTED STATUS. JSB CONT OUTPUT CONTROL WORD TO IBI . INLCO NOP CONTORL WORD. JSB STAT GET STATUS FROM IBI . E012 DEF * ERROR MESG POINTER. *E012 - E027* ISZ CTAB1 INCREMENT CONTROL WORD POINTER. LDA CTAB1,I GET CONTROL WORD. CPA MIN1 IS THIS THE END OF THE TABLE? JMP TL02A YES! GO TO NEXT TEST. ISZ ETAB1 NO! INCREMENT EXPECTED DATA TABLE. SOS OVERFLOW SET? JMP SK8 NO! GO UPDATE MESG TABLE PNTR. CLO YES! CLEAR OVERFLOW AND SKIP JMP TL01B MESG PNTR UPDATE. SK8 STO SET OVERFLOW. ISZ MTAB1 UPDATE MESSAGE TABLE PNTR. JMP TL01B GO CONTINUE TESTING. SKP * * THIS SECTION TESTS THE IFC ONE-SHOT LOGIC * CAN CLEAR ATN AND SET ACTIVE. * TL02A JSB CONT SET ATN AND OCT 64 CLEAR ACTIVE JSB IFCMD SET IFC. LDB B31 EXPECTED STATUS. JSB STAT GET IBI STATUS. IS IT OK? E030 DEF IFCF1 NO! IFC OS FAILURE. * * NOW TEST IFC OS STAYS ON FOR APPROXIMATELY * 40 MICROSECONDS. * JSB IFCMD TRIGGER IFC. JSB CACTV CLEAR ACTIVE. JSB STAT GET IBI STATUS. ACTIVE CLEAR? E031 DEF IFCF1 YES! IFC FAILED AFTER 40 US. * * INSURE IFC OS EVENTUALLY CLEARS * JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JSB CACTV CLEAR ACTIVE. LDB B11 GET EXPECTED STATUS. JSB STAT DID ACTIVE CLEAR? E032 DEF IFCF1 NO! REPORT ERROR. * * THIS SECTION TESTS THE ABILITY OF CRS TO * SET IFC AND CLEAR REN. * JSB CONT SET THE OCT 3 REN FF. CLC INTP,C ISSUE CRS. JSB TIMOT ALLOW IFC TIME TO SETTLE. LDB B31 GET EXPECTED STATUS. JSB STAT IS ACTIVE SET & REN CLEAR? E033 DEF RNIFC NO! REN OR IFSHFBC FAILURE. SKP * * THIS SECTION TESTS THE EORFLG * AND EORFLGEN LOGIC * LDB BIT12 SET TEST STB MASK MASK TO 10000. JSB SPPMD SET ATN FF AND EOI FF. JSB SINPD STROBE EOR FF. JSB STAT GET IBI STATUS. IS EOR FF SET? E034 DEF EOR NO! EOR FAILURE. * * ATN SHOULD BE CLEAR FROM STROBE INPUT DATA, * THUS DISABLING EOI. * JSB CLCCF CLEAR EOR FF. JSB SATN SET ATN AND CLEAR EOI. JSB SINPD STROBE EOR FF CLEAR. CLB GET EXPECTED STATUS. JSB STAT GET IBI STATUS. IS EOR FF CLEAR? E035 DEF EOR NO! EOR FAILURE. * * NOW CHECK THAT CLC IBI,C CLEARS THE EOR FF. * JSB SPPMD SET END OR IDENTIFY AND ATN. JSB SINPD STROBE EOR FF SET. JSB CLCCF CLC IBI,C CLEARS THE EOR FF. JSB STAT GET IBI STATUS. IS EOR FF CLEAR? E036 DEF EOR NO! EOR FAILURE. * * CHECK NO ATN DISABLES EOI TO IB * JSB SEOI CLEAR ATN, SET EOI. JSB SINPD CLOCK EOI LOW. JSB STAT DID EOI CLEAR? E037 DEF EOR NO! REPORT ERROR. * * THIS SECTION CHECKS THE EOI FF CAN BE CLEARED. * JSB SATN SET ATN FF. CLEAR EOI FF. JSB SINPD STROBE EOR FF. SHOULD CLEAR IT. JSB STAT GET IBI STATUS. IS EOR CLEAR? E040 DEF EOR NO! EOR FAILURE. JSB STALK SET TALK MODE. JSB SEOI SET EOI FF. JSB IFCMD TRIGGER IFC. CLEARS EOI. JSB TIMOT ALLOW IFC TO SETTLE OUT. JSB SINPD STROBE EOR FF. SHOULD CLEAR IT. JSB STAT GET IBI STATUS. IS EOI CLEAR? E041 DEF EOR NO! EOR FAILURE. SKP H  59310-18003 1728 S 0122 HPIB DIAG.              H0101 * * CHECK IBI FLAG LOGIC IS ENABLED * BY EORFLG AND EORFLGEN. * JSB NOTWM SET ERROR REPORTING MODE. JSB CLCCF CLF ON IBI. JSB SFCIB SFC ON IBI. IS IT CLEAR? E042 DEF IOFLG NO! I-O FLAG ERROR. JSB CACTV DISABLE PPREQ. JSB SPPMD SET ATN AND EOI. JSB SINPD SET EOR FF. JSB SFCIB FLAG SHOULD NOT BE SET. IS IT? E043 DEF IOFLG YES! I-O FLAG ERROR. * * CHECK ABILITY TO SET THE IBI FLAG VIA EORFLG. * JSB CONT SET EOR OCT 10200 FLAG ENABLE. JSB SFSIB I-O FLAG SHOULD BE SET. IS IT? E044 DEF EOFEN NO! EORFLG ERROR. * * INSURE CRS CLEARS EORFLGEN. * CLC INTP,C CRS SHOULD CLEAR EORFLGEN. JSB TIMOT ALLOW IFC TO SETTLE. JSB CLCCF CLC IBI,C. JSB SPPMD SET JSB SINPD EOR FF. JSB SFCIB FLAG SHOULD NOT SET. DID IT? E045 DEF EOFEN YES! EORFLG ERROR. * * CHECK ABILITY TO CLOCK EORFLGEN LOW. * JSB CLCCF CLEAR EOR FF. JSB CONT SET OCT 10200 EORFLGEN. JSB CG3MC CLEAR MODE CONTROL (EORFLGEN). JSB SPPMD SET ATN AND EOI FF'S. JSB SINPD CLOCK EOR FF HIGH. JSB SFCIB FLAG SHOULD NOT SET. DID IT? E046 DEF EOFEN YES! EORFLG ERROR. * * CHECK EORFLG LOW DOESN'T SET IBI FLAG. * JSB CLCCF CLEAR EOR FF. JSB CONT SET OCT 10200 EORFLGEN. JSB SFCIB FLAG SHOULD NOT SET. DID IT? E047 DEF EOFEN YES! EORFLG ERROR. SKP * * THIS SECTION TESTS THE ABILITY TO CHECK * STATUS ON THE DAV,RFD AND DAC SIGNALS. * JSB PRWMS SET ERROR REPORTING MODE. LDA B7000 SET UP STA MASK TEST MASK. JSB IFCMD INITIALIZE IBI(DAV CLEARS). JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. LDB B3000 GET EXPECTED STATUS. JSB STAT IS RFD-DAC HIGH,DAV CLEAR? E050 DEF HANDS NO! REPORT ERROR. JSB 5INITF SET RFD FF. JSB SLSTN SET LISTEN. CLB FORM EXPECTED STATUS. JSB STAT IS DAV,RFD AND DAC LOW? E051 DEF HANDS NO! REPORT ERROR. JSB LIAIB CLEAR RFD FF. LDB BIT10 GET EXPECTED STATUS. JSB STAT IS RFD HIGH,DAV-DAC LOW? E052 DEF HANDS NO! REPORT ERROR. JSB INITF SET RFDFF. CLB FORM EXPECTED STATUS. JSB STAT IS RFD,DAC & DAV CLEAR? E053 DEF HANDS NO! REPORT ERROR. JSB CONT SET ATN,EOI OCT 10270 AND EORFLGEN. JSB SINPD CLOCK EOR FF HIGH. JSB INITF CLEAR RFD FF. JSB SEOI CLEAR ATN. JSB STAT ALL HANDSHAKE SIGNALS CLEAR? E054 DEF HANDS NO! REPORT ERROR. JSB CONT SET ATN AND EOI AND OCT 270 CLEAR MODE CONTROL. LDB BIT10 GET EXPECTED STATUS. JSB STAT ONLY RFD SHOULD BE HIGH. E055 DEF HANDS NO! REPORT ERROR. JSB CONT SET OCT 10200 EORFLGEN. JSB CLCCF CLEAR EOR FF. JSB STAT ONLY RFD SHOULD STILL BE HIGH. E056 DEF HANDS NO! REPORT ERROR. JSB INITF SET RFD FF. JSB CTLSN CLEAR LISTEN MODE. LDB B3000 GET EXPECTED STATUS. JSB STAT RFD & DAC HIGH? E057 DEF HANDS NO! REPORT ERROR. LDB BIT10 GET EXPECTED STATUS. JSB SLSTN SET LISTEN. JSB SATN SET ATTENTION. JSB STAT RFD STILL HIGH? E060 DEF HANDS NO! REPORT ERROR. SKP * * THIS SECTION TESTS THE ORAFLG AND ORAFLGEN LOGIC * JSB SDMOD FORCE RFD JSB SLSTN LOW. JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. LDB BIT13 GET EXPECTED STATUS. STB MASK SET UP TEST MASK. JSB STAT GET IBI STATUS. ORAFLG HIGH? E061 DEF ORAFL NO! ORA FLG ERROR. CLA OUTPUT ZEROS JSB DATOT TO IB DATA BUS. CLEAR OWRL FF. CLB GET EXPECTED STATUS. JSB STAT GET IBI STATUS, ORAFLG LOW? E062 DEF ORAFL NO! ORAFLG ERROR. JSB NOTWM SET ERROR REPORTING MODE. CLC INTP,C CLEAR ORAFLGEN IN CASE IT WAS SET. JSB TIMOT ALLOW IFC TO SETTLE. JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. JSB SFCIB IS FLAG SET? E063 DEF ORAFL YES! ORAFLG ERROR. * * TEST ABILITY TO SET ORAFLGEN. * JSB CONT SET OCT 20200 ORAFLGEN. JSB SFSIB I-O FLAG SET? E064 DEF ORAFL NO! ORAFLG ERROR. * * TEST ABILITY TO CLEAR ORAFLGEN. * JSB CG3MC CLEAR ORAFLGEN. JSB CLCCF CLC IBI,C. SHOULD STAY CLEAR. JSB SFCIB WAS ORAFLGEN CLEARED? E065 DEF ORAFL NO! ORAFLG ERROR. * * CHECK CRS CLEARS ORAFLGEN. * JSB CONT SET OCT 20200 ORAFLGEN. CLC INTP,C CRS SHOULD CLEAR ORAFLGEN. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JSB CLCCF CLC IBI,C. FLAG SHOULD STAY CLEAR. JSB SFCIB DID CRS CLEAR ORAFLGEN? E066 DEF ORAFL NO! ORAFLG ERROR. * * THIS SECTION WILL TEST THE IRLFLGEN AND * IRL FLG LOGIC. * THE PREVIOUS CLC INTP,C SHOULD HAVE INSURED PAKEN WAS CLEAR. * JSB PRWMS SET ERROR REPORTING MODE. JSB SINPD CLOCK IRL FF HIGH. LDB BIT14 GET EXPECTED STATUS. STB MASK SET UP TEST MASK. JSB STAT DID IRL FF GET SET? E067 DEF IRLFL NO! IRL FLG ERROR. SKP * * CHECK ABILITY TO CLEAR IRL FF. * LDB B100 RESET THE STB ERRCD ERROR CODE. JSB LIAIB CLEAR IRL FF. INPUT BYTE CNTR * SHOULD STAY LOW FROM PACKEN. CLB GET EXPECTED STATUS. JSB STAT DID IRL FF CLEAR? E100 DEF IRLFL NO! IRL FLG ERROR. * * CHECK ABILITY TO SET IRL FF. * JSB SINPD CLOCK IRL FF HIGH. LDB BIT14 GET EXPECTED STATUS. JSB STAT DID IRL FF GET SET? E101  DEF IRLFL NO! IRL FLG ERROR. JSB LIAIB IF PACKEN CLEAR THEN INPUT BYTE JSB SINPD CNTR CLEAR. CLEAR IRL FF. JSB STAT DID IRL FF CLEAR? E102 DEF IRLFL NO! IRL FLG ERROR. JSB CLCCF CLC IBI,C. JSB SINPD SET IRL FF FROM INPUT BYTE CNTR. JSB NOTWM SET ERROR REPORTING MODE. JSB SFCIB IBI FLAG CLEAR? E103 DEF IRLFL NO! IRL FLG ERROR. * * CHECK ABILITY TO SET IRLFLGEN. * JSB CONT SET OCT 40200 IRLFLGEN. JSB SFSIB IS IBI FLAG SET NOW? E104 DEF IRLFL NO! IRL FLG ERROR. * * CHECK CRS CLEARS IRLFLGEN. * CLC INTP,C CRS SHOULD CLEAR IRLFLGEN. JSB CLCCF CLC IBI,C. JSB SFCIB IBI FLAG SHOULD BE CLEAR. E105 DEF IRLFL NO! IRL FLG ERROR. * * CHECK ABILITY TO CLEAR IRLFLGEN. * JSB CONT SET OCT 40200 IRLFLGEN. JSB CG3MC CLEAR IRLFLGEN. JSB CLCCF CLC IBI,C. JSB SFCIB IS IBI FLAG STILL CLEAR? E106 DEF IRLFL NO! IRL FLG ERROR. SKP * * THIS SECTION TESTS THE SRQFLGEN,SRQFLG,RFDFF,OBRLFF, * NSRQFLG,GENSRQEN AND SERIAL POLL MODE LOGIC. * * CHECK ABILITY TO SET AND CLEAR SRQFLG. * JSB IFCMD SET IFC AND ACTIVE. JSB TIMOT ALLOW IFC TO SETTLE. JSB PRWMS SET ERROR REPORTING MODE. LDB BIT15 GET EXPECTED STATUS. STB MASK SET UP TEST MASK. JSB STAT SRQFLG HIGH? E107 DEF SRQFL NO! REPORT ERROR. JSB CACTV CLEAR ACTIVE. CLB GET EXPECTED STATUS. JSB STAT SRQFLG LOW? E110 DEF SRQFL NO! REPORT ERROR. * * CHECK ABILITY TO CLEAR SRQFLGEN. * JSB CONT SET OCT 100200 SRQFLGEN. JSB CG3MC CLEAR ALL FLAG ENABLES. JSB NOTWM SET ERROR REPORTING MODE. JSB SACTV SET ACTIVE. SRQFLG HIGH. JSB SFCIB I-O FLAG CLEAR? E111 DEF SRQFL NO! REPORT ERROR * * CHECK ABILITY TO SET SRQFLGEN. * JSB CONT SET SSRQE OCT 100200 SRQFLGEN. JSB SFSIB DID IT SET? E112 DEF SRQFL NO! REPORT ERROR. * * CHECK CRS CLEARS SRQFLGEN. * CLC INTP,C SHOULD CLEAR SRQFLGEN. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JSB CLCCF CLC IBI,C. JSB IFCMD TRIGGER IFC. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JSB SFCIB DID CRS CLEAR SRQFLGEN? E113 DEF SRQFL NO! REPORT ERROR. SKP * * CHECK CONTROL WORD BIT 7 LOGIC WHICH ENABLES * CLOCKS TO TO FLGEN LOGIC. * JSB CONT SHOULD NOT SET SRQFLGEN OCT 100000 WITHOUT CONTROL BIT 7 SET. JSB SFCIB FLAG SHOULD BE CLEAR. IS IT? E114 DEF SRQFL NO! REPORT ERROR. LDA SSRQE OUTPUT DATA WORD WHICH JSB DATOT SHOULD NOT SET SRQFLGEN. JSB SFCIB I-O FLAG SHOULD NOT SET. DID IT? E115 DEF SRQFL YES! REPORT ERROR. JSB CONT SET OCT 100200 SRQFLGEN. JSB SFSIB I-O FLAG SHOULD SET. DID IT? E116 DEF SRQFL NO! REPORT ERROR. * * CHECK NSRQFLG CAN GENERATE IBI FLAG AND * CHECK NSRQFLG LOGIC. * JSB CLCCF SHOULD CLEAR IFCFLG. JSB SFCIB NO I-O FLAG WITH IFCFLG CLEAR. E117 DEF SRQFL IF SET REPORT ERROR. * * CHECK GENSRQEN LOGIC * JSB PRWMS SET ERROR REPORTING MODE. JSB CONT SET OCT 1200 GENSRQEN. JSB STALK CLEAR LISTEN FF. JSB LIAIB CLOCK RFDFF LOW. SRQFLG HIGH. LDB BIT15 GET EXPECTED STATUS. STB MASK SET TEST MASK. JSB STAT IS SRQFLG HIGH? E120 DEF SRQFL NO! REPORT ERROR. JSB STLAT SET TALK AND LISTEN FF'S. CLB GET EXPECTED STATUS. JSB STAT IS SRQFLG LOW? E121 DEF SRQFL NO! REPORT ERROR. JSB CG3MC CLEAR GENSRQEN. JSB STALK CLEAR LISTEN MODE. JSB STAT IS SRQFLG LOW? E122 DEF SRQFL NO! REPORT ERROR. ,JSB CONT SET OCT 1200 GENSRQEN. JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. JSB STAT IS SRQFLG LOW? E123 DEF SRQFL NO! REPORT ERROR. SKP * * CHECK CRS CLEARS GENSRQEN * CLC INTP,C CRS SHOULD CLEAR GENSRQEN. JSB TIMOT WAIT FOR IFC TO SETTLE. JSB LIAIB CLEAR RFD FF. JSB CLCCF ISSUE CLRINTFLG TO IBI. JSB STAT DID CRS CLEAR GENSRQEN? E124 DEF SRQFL NO! REPORT ERROR. * * CHECK FOR CROSSTALK ERROR IN THE MODE CONTROL LOGIC. * JSB CONT SET ALL MODE CONTROLS OCT 6600 EXCEPT GENSRQEN. JSB STAT I-O FLAG STILL CLEAR? E125 DEF SRQFL NO! REPORT ERROR. JSB CONT SET OCT 1200 GENSRQEN. JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. JSB STAT SRQFLG CLEAR? E126 DEF SRQFL NO! REPORT ERROR. * * CHECK INPUT BYTE CNTR AND RFDFF LOGIC. * JSB CONT SET PACKEN AND OCT 5200 GENSRQEN. JSB LIAIB CLEAR RFD FF. LDB BIT15 GET EXPECTED STATUS. JSB STAT SRQFLG SET? E127 DEF SRQFL NO! REPORT ERROR. JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. JSB SINPD CLEAR RFDFF. E130 JSB STAT SRQFLG HIGH? DEF SRQFL NO! REPORT ERROR. JSB SINPD SHOULD CLOCK RFDFF HIGH. CLB GET EXPECTED STATUS. JSB STAT SRQFLG LOW? E131 DEF SRQFL NO! REPORT ERROR. JSB CONT CLEAR OCT 2 REN. LDA BIT8 SET UP TEST STA MASK MASK. JSB STAT DOES SRQ DRAG REN LOW ON IB? E132 DEF RENF YES! REPORT ERROR. SKP * * CHECK OBRL FF INPUTS TO THE NSRQFLG LOGIC. * JSB SLSTN SET LISTEN FF. JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. JSB DATOT SET OBRL FF. LDB BIT15 GET EXPECTED STATUS. JSB STAT SRQFLG HIGH? E133 DEF SRQFL NO! REPORT ERROR. JSB INIT F INITIALIZE OBR LOGIC FOR OUTPUT. CLB GET EXPECTED STATUS. JSB STAT DID OBRL FF CLEAR? E134 DEF SRQFL NO! REPORT ERROR. JSB DATOT SET OBRL FF. LDB BIT15 GET EXPECTED STATUS. JSB STAT DID OBRL FF SET? E135 DEF SRQFL NO! REPORT ERROR. JSB STALK SET TALK FF. CLB GET EXPECTED STATUS. JSB STAT IS SRQFLG CLEAR? E136 DEF SRQFL NO! REPORT ERROR. JSB CG3MC CLEAR GENSRQEN. JSB CTLSN CLEAR TALK MODE. JSB STAT SRQFLG LOW? E137 DEF SRQFL NO! REPORT ERROR. * * CHECK ABILITY OF SPMFLG AND ACTIVE * LOGIC TO SET IBI FLAG. * JSB IFCMD GENERATE IFC. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JSB SACTV CLEAR ACTIVE FF. JSB SATN SET ATN. LDA B30 SET JSB DATOT SPM FF. JSB CACTV CLEAR ACTIVE. LDB BIT15 GET EXPECTED STATUS. JSB STAT SRQFLG HIGH(NACTIVE AND SPM)? E140 DEF SRQFL NO! REPORT ERROR. JSB IFCMD CLEAR SPM FF. JSB TIMOT ALLOW IFC TO SETTLE. JSB CACTV CLEAR ACTIVE. CLB GET EXPECTED STATUS. JSB STAT DID SPM FF CLEAR? E141 DEF SRQFL NO! REPORT ERROR. SKP * * CHECK NO DATA COMBINATION (EXCEPT 30B) WILL SET * THE SPM FF. * JSB SATN SET ATN. CLA INITIALIZE DATA. PTLOP CPA B30 IS THIS "SET THE SPM FF DATA"? JMP NOTST YES! DON'T TEST PATTERN. JSB SACTV GATE DATA TO IB. JSB DATOT SHOULD NOT SET SPM FF. JSB CACTV CLEAR ACTIVE. STA CTLWD PUT DATA IN CONTROL WORD. JSB STAT DID SPM FF SET? E142 DEF SPMFF YES! REPORT ERROR. RSS SKIP ERROR CODE UPDATE. NOTST ISZ ERRCD UPDATE ERROR CODE. CPA B177 END OF DATA? JMP CKSPM YES! EXIT. JSB DECEC NO! DECREMENT ERROR NUMBER. INA DO A TNOTHER JMP PTLOP PATTERN. * * CHECK 30B DATA WILL SET THE SPM FF. * CKSPM JSB SACTV SET ACTIVE. LDA B30 SET JSB DATOT SPM FF. JSB CACTV CLEAR ACTIVE. LDB BIT15 GET EXPECTED STATUS. JSB STAT DID SPM FF SET? E143 DEF SPMFF NO! REPORT ERROR. * * CHECK 31B WILL CLEAR THE SPM FF * JSB CLCCF CLEAR IFCFLG FF. JSB SACTV GATE DATA TO IB. LDA B31 CLEAR JSB DATOT SPM FF. JSB CACTV CLEAR ACTIVE. CLB GET EXPECTED STATUS. JSB STAT DID SPM FF CLEAR? E144 DEF SPMFF NO! REPORT ERROR. JSB SACTV SET ACTIVE MODE. LDA B30 SET JSB DATOT SPM FF. JSB STAT SRQ FLG LOW? E145 DEF SRQFL NO! REPORT ERROR. SKP * * THIS SECTION WILL TEST THE PPPID(SW1) * AND MYADDR(SW2) LOGIC. * JSB CLCCF CLEAR IFCFLG FF. LDA B17 SET UP STA MASK DATA TEST MASK. CLA SAVE EXPECTED STA PATTN STATUS WORD. PPLOP JSB DATOT OUTPUT DATA. LDB PATTN GET EXPECTED STATUS JSB STAT PPPID OK? E146 DEF PPFL2 NO! REPORT ERROR. CPA B377 END OF DATA PATTERNS? JMP NXTST YES! GO DO NEXT TEST. JSB DECEC NO! DECREMENT ERROR COUNT. CCE SET E-REG FOR SHIFT. ELA SHIFT PATTERN. ISZ PATTN UPDATE EXPECTED STATUS. JMP PPLOP GO TRY ANOTHER PATTERN. * * CHECK IFCFLG FF FORCES PPPID TO 11B. * NXTST JSB IFCMD SET IFC. JSB TIMOT ALLOW IFC TO SETTLE. LDB B11 GET EXPECTED STATUS. JSB STAT IS PPPID=11B? E147 DEF PPFL2 NO! REPORT ERROR. * * CHECK PPP ID ENABLED ONTO IB. * JSB CTLSN DISABLE OUTPUT DATA TO IB. JSB SINPD CLOCK IB DATA TO INPUT REGISTER. CLB EXPECTED DATA. JSB CDATA GET ACTUAL DATA. IS IT OK? E150 DE_F BUSDF NO! IB DATA NOT ONES. JSB CONT SET GENSRQEN AND OCT 1300 CLEAR TALK AND LISTEN. JSB LIAIB CLEAR RFD FF. JSB SPPMD SET ATN AND EOI. CLA OUTPUT ZERO TO JSB DATOT IBI. JSB SINPD IB DATA SHOULD BE ZERO. LDB EXPID GET EXPECTED PPPID. JSB CDATA GET ACTUAL DATA. DOES IT COMPARE? E151 DEF PPFL2 NO! REPORT ERROR. SKP * * CHECK MY ADDRESS LOGIC INCLUDING THE ABILITY * TO SET AND CLEAR THE TALK AND LISTEN MODES. * THIS SECTION ALSO INSURES THE IBI RESPONDS * TO ONLY ONE ADDRESS. * CCA MARK STA NOLSN NO LISTEN AND STA NOTAK NO TALK INDICATORS. CLA INITIALIZE TLLOP STA PATTN TALK ADDR PATTERN. JSB CTLSN CLEAR LISTEN. JSB SATN SET ATN. LDA PATTN GET ADDRESS PATTERN. JSB DATOT OUTPUT ADDRESS. JSB STFIB GET IBI JSB LIAIB STATUS. AND B140 MASK TO TALK-LISTEN STATUS BITS. SZA IS TALK OR LISTEN SET? JMP PROTL YES! GO CHECK FOR ERROR. TLOOP ISZ PATTN UPDATE TEST PATTERN. LDA PATTN GET TEST PATTERN. CPA BIT7 END OF TEST? JMP NXTFC YES! GO DO NEXT TEST. JMP TLLOP NO! GO CHECK NEXT DATA. SKP * * INSURE ADDR LOGIC DID NOT RESPOND TO BIT5-6=0 * PROTL STA SAVIO SAVE ACTUAL INPUT. CLB FORM EXPECTED STATUS. LDA PATTN GET OUTPUT PATTERN. AND B140 MASK TO TALK-LISTEN CNTL BITS. SZA WAS IS IT A TALK OR LISTEN? JMP SK9 YES! CONTINUE NORMALLY. LDA SAVIO NO! RESTORE ACTUAL STATUS. JSB SENDM SEND ERROR MESSAGE. E152 DEF MYADR TALK-LSTN SET W/O CNTL. SK9 LDA PATTN GET OUTPUT DATA AGAIN. AND B37 MASK TO ADDRESS. ISZ ERRCD UPDATE ERROR NUMBER. CPA EXMYA DOES ADDRESS COMPARE? JMP SK10 Z YES! CONTINUE NORMALLY. LDA SAVIO RESTORE ACTUAL STATUS. JSB SENDM SEND ERROR MESSAGE. E153 DEF MYADR ILLEGAL MYADDR DECODED. SK10 JSB DECEC DECREMENT ERROR CODE. LDA PATTN GET ADDRESS PATTERN AGAIN. AND B40 STRIP TO BIT 5. SZA WAS THIS A LISTEN ADDRESS? STA NOLSN YES! SAVE ADDRESS. LDA PATTN GET ADDRESS. AND B100 STRIP TO BIT 6. SZA WAS THIS A TALK ADDRESS? STA NOTAK YES! SAVE ADDRESS. JMP TLOOP GO DO ANOTHER PATTERN. NXTFC JSB NOTWM SET ERROR REPORTING MODE. ISZ ERRCD UPDATE ERROR CODE. LDA NOLSN GO SEE IF A LISTEN E154 JSB CKMYA ADDRESS WAS FOUND. JSB DECEC DECREMENT ERROR CODE. LDA NOTAK GO SEE IF A TALK E155 JSB CKMYA ADDRESS WAS FOUND. SKP * * CHECK THE UNLISTEN AND UNTALK LOGIC. ALSO, CHECK THE * REST OF THE TALK AND LISTEN LOGIC. * * CHECK IFC WILL CLEAR LISTEN * JSB PRWMS SET ERROR REPORTING MODE. LDA B100 SET UP STA MASK TEST MASK. JSB STLAT SET TALK AND LISTEN FF'S. JSB IFCMD SHOULD CLEAR TALK-LISTEN FF. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JSB STAT DID IFC CLEAR LISTEN? E156 DEF LSTNF NO! REPORT ERROR. * * CHECK IFC WILL CLEAR TALK. * LDA B40 CHANGE STATUS MASK STA MASK TO LOOK AT TALK FF. JSB STAT DID IFC CLEAR TALK? E157 DEF TALKF NO! REPORT ERROR. * * CHECK UNTALK WILL CLEAR TALK * JSB SDMOD CLEAR ATN. LDA EXMYA GET CALCULATED MYADDR. INA CHANGE TO CREATE UNTALK. IOR B100 FORM TALK ADDR DATA. STA HOLDD SAVE FOR LATER TEST. JSB STALK SET TALK FF. JSB DATOT OUTPUT TALK ADDR DATA. JSB SATN CLOCK TALK FF LOW. STA CTLWD PUT DATA IN CONTROL WORD. JSB STAT DID TALK CLEAR? E160 DEF TALKF t NO! UNTALK DIDN'T WORK. * * CHECK FOR NO TALK ADDR W/O DAV * JSB SLSTN SET LISTEN MODE. LDA EXMYA GET TALK ADDRESS. IOR B100 FORM MY TALK ADDRESS. JSB DATOT OUTPUT IT. JSB STAT TALK SHOULD NOT SET. E161 DEF TALKF TALK SET W/O ATN OR DAV. SKP * * CHECK FOR NO UNTALK W/O DAV. * JSB STALK SET TALK FF. LDA HOLDD GET UNTALK ADDR. JSB DATOT SHOULD NOT CLEAR TALK. LDB B40 GET EXPECTED STATUS. JSB STAT DID TALK CLEAR? E162 DEF TALKF YES! UNTALK W/O DAV. * * CHECK FOR NO LISTEN W/O DAV. * LDA B100 SET TEST MASK TO STA MASK LISTEN MODE. LDA EXMYA FORM IOR B40 LISTEN ADDRESS. JSB DATOT OUTPUT LISTEN DATA. CLB LISTEN SHOULD NOT SET JSB STAT W/O DAV. DID IT? E163 DEF LSTNF YES! REPORT ERROR. * * CHECK LISTEN DOES NOT OCCUR W/O DAV. * JSB STLAT SET TALK AND LISTEN FF'S. LDA B177 OUTPUT JSB DATOT UNLISTEN DATA. LDB B100 EXPECTED STATUS. JSB STAT DID LISTEN CLEAR W/O DAV? E164 DEF LSTNF YES! REPORT ERROR. * * THIS SECTION TESTS ALL LOGIC INVOLVED IN * TRANSFERRING DATA TO AND FROM THE IB. * CLA SAVE DATA STA HOLDD FOR TEST. DLOP1 JSB CTLSN CLEAR TALK AND LISTEN. JSB SATN READY DATA LINES TO IB. ISZ HOLDD UPDATE DATA. LDA HOLDD GET DATA TEST PATTERN. CPA BIT9 END OF TEST? JMP PACKT GO DO PACK-WORD TEST. JSB DATOT OUTPUT PATTERN TO IB. JSB SINPD STROBE DATA IN FROM IB. LDA HOLDD GET EXPECTED DATA. STA CTLWD PUT DATA IN CONTROL WORD. AND B377 MASK TO LOWER BYTE. STA B SAVE DATA. JSB CDATA CHECK INPUT DATA. IS IT OK? E165 DEF BUSDF NO! REPORT FAILURE. JSB DECEC DECREMENT ERROR CODE. ˻ JMP DLOP1 GO DO ANOTHER PATTERN SKP * * NOW TEST THE ABILITY TO SEND AND RECEIVE * 16-BIT WORDS VIA THE IB. * PACKT ISZ ERRCD UPDATE ERROR CODE. CLA SET DATA STA HOLDD PATTERN. JSB CONT SET OCT 4200 PACKEN. JSB LIAIB SET INPUT-BYTE CNTR. DLOP2 JSB CTLSN CLEAR LISTEN AND TALK. JSB SATN SET ATTENTION. ISZ HOLDD UPDATE DATA PATTERN. LDA HOLDD GET DATA PATTERN JSB DATOT PUT UPPER BYTE ON IB. JSB DATOT PUT LOWER BYTE ON IB. JSB SINPD PACK IN JSB SINPD ACTUAL WORD OFF IB. STA CTLWD PUT DATA IN CONTROL WORD. LDB HOLDD GET EXPECTED WORD. BLF,BLF SHIFT DATA TO UPPER BYTE. ADB HOLDD MERGE IN LOWER BYTE. JSB CDATA VERIFY DATA. IS IT OK? E166 DEF BUSDF NO! REPORT FAILURE. CPB MIN1 LAST PATTERN CHECKED? JMP SK11 YES! EXIT. JSB DECEC NO! DECREMENT ERROR CODE. JMP DLOP2 TRY ANOTHER PATTERN. * * CHECK PACKEN LOW CLEARS INPUT REGISTER * BITS 8-15 * SK11 JSB CG3MC CLEAR PACKEN. JSB LIAIB GET INPUT DATA. CPA B377 DID PACKEN CLEAR IR8-15? JMP EOTST YES! EXIT. LDB B377 NO! GET EXPECTED DATA. JSB SENDM REPORT ERROR. E167 DEF BUSDF INPUT REG # 377B. SKP * * CHECK THE ENABLE OF THE ASCIIMODE LOGIC * EOTST LDA BIT7 SET ERROR CODE STA ERRCD TO 200 FOR HLT 106000. LDA BIT8 SET THE STATUS STA MASK TEST MASK. JSB CONT SET THE REN FF OCT 603 AND ASCIIMODE. LDA THREE LOAD THE OBR WITH 3(LOCAL). CLB EXPECTED STATUS. E200 JSB ASCOT CHECK ASCII COMMAND. JSB CONT SET THE OCT 3 REN FF. LDB BIT8 GET EXPECTED STATUS. JSB STAT OBRL FF DISALLOW ASCIIMODE? E201 DEF ASCIM NO! REPORT ERROR. NLH LDA B43 OBR BIT 5 SHOULD NOT ALLOW LOCAL. E202 JSB ASCOT CHECK ASCII COMMAND. LDA B103 OBR BIT 6 SHOULD NOT ALLOW LOCAL. E203 JSB ASCOT CHECK ASCII COMMAND. JSB CG3MC CLEAR ASCIIMODE. LDA THREE ASCIIMODE LOW SHOULD NOT ALLOW LOCAL. E204 JSB ASCOT CHECK ASCII COMMAND. * * INSURE CRS CLEARS ASCIIMODE. * CLB FORM EXPECTED STATUS. JSB CONT SET ASCIIMODE HIGH OCT 603 AND REN HIGH. CLC INTP,C GENERATE CRS. JSB TIMOT WAIT FOR IFC TO SETTLE. LDA TWO ASCIIMODE SHOULD BE CLEAR FROM CRS. E205 JSB ASCOT CHECK ASCII COMMAND. SKP bN  59310-18004 1728 S 0122 HPIB DIAG.              H0101 * * CHECK EOR INPUT TO EORFLG FF * JSB CLCCF CLEAR EORFLG FF. JSB CONT SET ASCIIMODE OCT 603 AND REN HIGH. LDA B12 SHOULD JSB DATOT GENERATE EOR AND EOI. JSB SATN ENABLE DATA TO IB. JSB SINPD CLOCK EORFLG FF HIGH. LDB BIT12 EXPECTED STATUS. STB MASK SET TEST MASK. JSB STAT IS EORFLG FF SET? E206 DEF ASCIM NO! REPORT ERROR. * * CHECK ASCIIMODE INPUTS TO EOI AND EOR LOGIC. * JSB CLCCF CLEAR EOR FF. JSB CG3MC CLEAR ASCIIMODE. JSB SATN ENABLE DATA TO IB. LDA B12 SET ASCIIMODE EOR JSB DATOT INTO OBR. JSB SINPD CLOCK EORFLG FF LOW. CLB NO EORFLG JSB STAT WITH ASCIIMODE LOW? E207 DEF ASCIM NO! REPORT ERROR. SKP * * CHECK DECODE OF EOR AND EOI(ASCIIMODE) * JSB CONT SET ASCIIMODE OCT 603 AND REN HIGH. STB HOLDD INITIALIZE TEST PATTERN. ALOP1 JSB SDMOD CLEAR ATN AND EOI. LDA HOLDD GET TEST DATA. CPA B12 IS THIS EOR DATA? JMP NXTAT YES! DON'T TEST IT. CPA B33 IS THIS ASCIIMODE IFC DATA? JMP NXTAT YES! DON'T TEST IT. JSB DATOT OUTPUT DATA. JSB SINPD CLOCK EORFLG FF. STA CTLWD SAVE OUTPUT DATA. JSB STAT DID ILLEGAL EOI GET GENERATED? E210 DEF ASCIM YES! REPORT ERROR. JSB SATN ENABLE DATA TO IB. JSB SINPD CLOCK EORFLG FF. STA CTLWD SAVE OUTPUT CONTROL WORD. JSB STAT DID ILLEGAL EOR OCCUR? E211 DEF EOR YES! REPORT ERROR. LDA HOLDD GET DATA TEST PATTERN. CPA B37 END OF DATA PATTERNS? JMP NXAT YES! GO DO NEXT TEST. JSB DECEC DECREMENT JSB DECEC ERROR CODE TWICE. NXTAT ISZ HOLDD UPDATE DATA PATTERN. JMP ALOP1 GO DO ANOTHER TEST. * * CHECK UPPER DECODE BITS OF IB EOR DECODE[ LOGIC * NXAT LDA B52 GET EOR TEST PATTERN. JSB DATOT OUTPUT DATA TO IB. JSB SINPD CLOCK EORFLG FF. JSB STAT DID ILLEGAL EOR OCCUR? E212 DEF EOR YES! REPORT ERROR. LDA B112 GET NEXT EOR TEST PATTERN. JSB DATOT OUTPUT DATA TO IB. JSB SINPD CLOCK EORFLG FF. JSB STAT DID ILLEGAL EOR OCCUR? E213 DEF EOR YES! REPORT ERROR. SKP * * CHECK ASCIIMODE IFC. * STB HOLDD INITIALIZE DATA PATTERN. JSB CACTV CLEAR ACTIVE. LDA BIT4 SET UP STA MASK TEST MASK. ALOP2 JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT LDA HOLDD GET TEST DATA CPA B33 IS THIS THE IFC ASCIIMODE DATA? JMP NXATA YES! DON'T TEST IT. E214 JSB ASCOT CHECK ASCII COMMAND. CPA B37 END OF DATA PATTERNS? JMP EATST YES! EXIT. JSB DECEC NO! DECREMENT ERROR NUMBER. NXATA ISZ HOLDD UPDATE DATA PATTERN. JMP ALOP2 DO ANOTHER PATTERN. * * CHECK ASCIIMODE IFC CAN BE TRIGGERED * EATST JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. LDA B33 GET IFC ASCIIMODE COMMAND. LDB BIT4 GET EXPECTED STATUS. E215 JSB ASCOT CHECK ASCII COMMAND. * * CHECK ASCIIMODE REMOTE COMMAND * JSB CONT SET OCT 2 LOCAL MODE. LDA BIT8 SET UP STA MASK TEST MASK. CLB INITIALIZE STB HOLDD TEST DATA PATTERN. ALOP3 JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. LDA HOLDD GET DATA PATTERN. CPA TWO IS THIS A REMOTE COMMAND? JMP EALP2 YES! DON'T TEST IT. E216 JSB ASCOT CHECK ASCII COMMAND. CPA B37 END OF DATA PATTERNS? JMP NXAL2 YES! DO NEXT TEST. JSB DECEC NO! DECREMENT ERROR NUMBER. EALP2 ISZ HOLDD UPDATE TEST PATTERN. JMP ALOP3 GO DO NEXT PATTERN. SKP * * CHECK 2B WILL SET ASCIIMODE REMOTE * NXAL2 tJSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. LDA TWO OUTPUT ASCIIMODE REMOTE TO IB. LDB BIT8 GET EXPECTED STATUS. E217 JSB ASCOT CHECK ASCII COMMAND. * * CHECK ASCIIMODE LOCAL ILLEGAL DECODE * CLA INITIALIZE STA HOLDD TEST DATA PATTERN ALOP4 JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. LDA HOLDD GET TEST PATTERN. CPA THREE IS THIS A LOCAL COMMAND? JMP LOPA4 YES! DON'T TEST. E220 JSB ASCOT CHECK ASCII COMMAND. CPA B37 END OF DATA PATTERNS? JMP NXAL4 YES! GO DO NEXT TEST. JSB DECEC NO! DECREMENT ERROR CODE. LOPA4 ISZ HOLDD UPDATE TEST PATTERN. JMP ALOP4 GO DO NEXT TEST PATTERN. * * CHECK ASCIIMODE DECODE OF SET ATN * NXAL4 JSB SDMOD CLEAR ATTENTION. LDA BIT7 SET UP STA MASK TEST MASK. CLB SET EXPECTED STATUS. STB HOLDD INITIALIZE TEST DATA. ALOP5 JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. LDA HOLDD GET TEST DATA. CPA B33 IS THIS AN IFC COMMAND? JMP NXAL5 YES! DON'T TEST DATA. CPA B16 IS THIS A SET ATN COMMAND? JMP NXAL5 YES! DON'T TEST DATA. E221 JSB ASCOT CHECK ASCII COMMAND. CPA B37 END OF DATA PATTERNS? JMP NXALT YES! GO DO NEXT TEST. JSB DECEC DECREMENT ERROR COUNT. NXAL5 ISZ HOLDD UPDATE DATA PATTERN. JMP ALOP5 GO TEST NEXT PATTERN. SKP * * CHECK ABILITY TO GENERATE AN ASCIIMODE * SET ATN. * NXALT JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. LDB BIT7 SET EXPECTED STATUS. LDA B16 OUTPUT AN ASCIIMODE SET ATN. E222 JSB ASCOT CHECK ASCII COMMAND. * * CHECK ASCIIMODE DECODE OF CLEAR ATN. * CLA INITIALIZE STA HOLDD TEST DATA PATTERN. ALOP6 JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. LDA HOLDD GET DATA PATTERN. CPA B33 IS THIS AN IFC COMMAND? 8R JMP NXAL6 YES! DON'T TEST IT. CPA B17 IS THIS A CLEAR ATN COMMAND? JMP NXAL6 YES! DON'T TEST IT. E223 JSB ASCOT CHECK ASCII COMMAND. CPA B37 END OF DATA PATTERNS? JMP NXTS6 YES! GO DO NEXT TEST. JSB DECEC NO! DECREMENT ERROR COUNT. NXAL6 ISZ HOLDD UPDATE DATA PATTERN. JMP ALOP6 DO NEXT DATA PATTERN. * * CHECK ABILITY TO GENERATE AN ASCIIMODE * CLEAR ATN * NXTS6 JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. CLB EXPECTED STATUS. LDA B17 OUTPUT A CLEAR ATN COMMAND. E224 JSB ASCOT CHECK ASCII COMMAND. SKP * * THIS SECTION CHECKS THE ASCIIMODE DAV OPERATION * * CHECK ILLEGAL DECODE OF DAV * JSB CLCCF CLEAR IFCFLG FF. JSB CTLSN CLEAR TALK AND LISTEN. LDA BIT15 SET UP STA MASK TEST MASK. JSB CONT SET ACTIVE,GENSRQEN OCT 1605 AND ASCIIMODE. STB HOLDD INITIALIZE DATA PATTERN. LDB BIT15 GET EXPECTED STATUS(SRQFLG SET) ALOP7 JSB INITF INITIALIZE OBR LOGIC FOR OUTPUT. LDA HOLDD GET TEST PATTERN CPA TWO IS THIS A REMOTE COMMAND? JMP NXAL7 YES! DON'T TEST IT. CPA THREE IS THIS A LOCAL COMMAND? JMP NXAL7 YES! DON'T TEST IT. CPA B16 IS THIS AN ATN COMMAND? JMP NXAL7 YES! DON'T TEST IT CPA B17 IS THIS A CLEAR ATN COMMAND? JMP NXAL7 YES! DON'T TEST IT. CPA B33 IS THIS AN IFC COMMAND? JMP NXAL7 YES! DON'T TEST IT. E225 JSB ASCOT CHECK ASCII COMMAND. CPA B37 END OF DATA PATTERNS? JMP NXTS7 YES! EXIT. JSB DECEC NO! DECREMENT ERROR CODE. NXAL7 ISZ HOLDD UPDATE DATA PATTERN. JMP ALOP7 GO TEST NEXT PATTERN. * * CHECK ASCIIMODE DAV AND BE GENERATED * NXTS7 LDA BIT11 SET UP STA MASK TEST MASK. CLB GET EXPECTED STATUS. LDA TWO ʩOUTPUT AN ASCIIMODE REMOTE. E226 JSB CKDAV GO CHECK FOR DAV. LDA THREE FORM AN ASCIIMODE LOCAL E227 JSB CKDAV GO CHECK DAV EXECUTED. LDA B16 FORM ASCIIMODE SET ATN. E230 JSB CKDAV CHECK DAV EXECUTED. LDA B17 FORM ASCIIMODE CLEAR ATN. E231 JSB CKDAV CHECK DAV EXECUTED. LDA B33 FORM ASCIIMODE IFC. E232 JSB CKDAV CHECK DAV EXECUTED. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JMP *+1,I CONTINUE TESTING DEF NXPAG ON THE NEXT MEMORY PAGE. SKP ORG 4000B * * THIS SECTION TESTS THE ABILITY OF THE IBI * TO TRANSMIT DATA TO AND FROM THE IB USING * THE TALK-LISTEN MODE. * NXPAG JSB CLCCF CLC IBI,C. JSB NOTWM SET ERROR REPORTING MODE. JSB CONT SET ATN,TALK,LISTEN OCT 20375 AND ORAFLGEN. JSB INITF INITIALIZE OBR LOGIC. LDA B252 GET DATA PATTERN. JSB DATOT TALK-LISTEN SHOULD SET ORAFLAG. JSB SDMOD SET DATA MODE. JSB SFSIB DID ORA FLAG SET? E233 DEF ORAFL NO! REPORT ERROR. JSB CONT SET OCT 40200 IRLFLGEN. JSB CLCCF CLC IBI,C. JSB SFSIB IRL FLAG SHOULD SET FLAG. E234 DEF IRLFL NO! REPORT ERROR. JSB PRWMS SET ERROR REPORTING MODE. JSB SINPD CLOCK DATA IN FROM IB. LDB B252 GET EXPECTED DATA. STB CTLWD SAVE DATA OUTPUT WORD. JSB CDATA WAS DATA TRANSFERRED? E235 DEF HANDS NO! REPORT ERROR. JSB NOTWM SET ERROR REPORTING MODE. JSB STALK CLEAR LISTEN ONLY. LDA B125 DATA SHOULD JSB DATOT NOT TRANSFER WITH NO LISTEN. JSB CLCCF CLC IBI,C. JSB SFCIB IRL FLAG SHOULD NOT SET. E236 DEF IRLFL IT DID! REPORT ERROR. JSB CONT SET OCT 20200 ORAFLGEN. JSB SFCIB ORA FLAG SHOULD NOT SET. E237 DEF ORAFL IT DID! REPORT ERROR. JSB PRWMS SET ERRO?R REPORTING MODE. JSB CDATA OBR SHOULD BE UNCHANGED. E240 DEF HANDS NO! REPORT ERROR. JSB CTLSN CLEAR TALK AND LISTEN. JSB SLSTN SET LISTEN,CLEAR TALK. JSB DATOT OUTPUT COMPLEMENTED PATTERN. JSB CDATA CHECK NO XFER OCCURRED. E241 DEF HANDS IT DID! REPORT ERROR. SKP * * THIS SECTION CHECKS FOR A SHORT BETWEEN REN AND DIO8 * LDA BIT8 FORM STA MASK TEST MASK. JSB CONT SET ATN OCT 65 AND ACTIVE. CCA PUT ZEROS ONTO JSB DATOT THE IB (ONES IN THE OBR). CLB EXPECTED STATUS. JSB STAT DOES DIO8 DRAG REN LOW? E242 DEF RENF YES! REPORT FAILURE. SKP * * THIS SECTION TESTS THE * DMA RELATED LOGIC OF THE IBI. * JSB NOTWM SET ERROR REPORTING MODE. LDA CPTO GET COMPUTER OPTIONS WORD. AND FOUR MASK TO DMA OPTION BIT. SZA,RSS IS DMA PRESENT? JMP NODMA NO! DON'T RUN THIS SECTION. JSB LIAIB CLEAR IRL FF. JSB INITF CLEAR DMAOUTREQFLG. JSB CG3MC CLEAR DMARWSEL FF. SRQ NOW HIGH. JSB ITDMA INITIALIZE DMA. SFS DMA DMA DONE? E243 JSB DMAER NO! NO SRQ FROM IBI. ISZ ERRCD UPDATE ERROR CODE. JSB CLCCF SET DMAOUTREQFLG. JSB ITDMA INITIALIZE DMA. SFC DMA NO XFER WITH NO SRQ? E244 JSB DMAER NO! ILLEGAL SRQ. ISZ ERRCD UPDATE ERROR CODE. JSB CONT SET OCT 2200 DMARWSEL. JSB INITF CLEAR DMAOUTREQFLG. SFC DMA NO XFER SHOULD'VE OCCURRED. E245 JSB DMAER IT DID! ILLEGAL SRQ. ISZ ERRCD UPDATE ERROR CODE. JSB CLCCF SET DMAOUTREQFLG. JSB CG3MC CLEAR DMARWSEL. JSB SINPD SET IRL FLAG. SFC DMA NO XFER SHOULD OCCUR. DID IT? E246 JSB DMAER YES! ILLEGAL SRQ. ISZ ERRCD UPDATE ERROR CODE. JSB CONT  SET OCT 2200 DMARWSEL. SFS DMA FLAG SHOULD BE SET FROM SRQ. E247 JSB DMAER NO SRQ. ISZ ERRCD UPDATE ERROR CODE. SKP * EXECUTE THE PRESET IBI TEST * NODMA LDA B257 UPDATE STA ERRCD ERROR CODE. LDB B8A12 SUPPRESS OPERATOR JSB SWRT INTERVENTION TESTS? JMP CHK2I-1 YES! GO HALT. LDB BIT10 NO! SUPPRESS NON- JSB SWRT ERROR MESSAGES? JMP DOPRE YES! GO HALT. CLA,CLE READY FORMATTER. LDB PRMSG PRESET MESG POINTER. JSB FMTR,I PRINT MESSAGE. DOPRE JSB CONT SET OCT 3 REN. JSB DEBON DEBOUNCE SW.REG. H256 OCT 106056 PRESS PRESET,RUN. LDB B31 GET EXPECTED STATUS. JSB STAT PRESET WORK? E257 DEF PRERR NO! REPORT ERROR. RSS SKP * THIS SECTION VERIFIES PROPER OPERATION OF THE * PPREQ AND PPLEX LOGIC. * ISZ ERRCD UPDATE ERROR CODE. CHK2I LDB BIT3 JSB SWRT NEW IBI? RSS YES! DO PPREQ TEST. JMP FINIT NO! EXIT. JSB CLCCF CLEAR IBI FLAG. JSB IFCMD SET IFCFLG. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JSB CG3MC CLEAR ALL FLG ENABLES. JSB SACTV SET ACTIVE. JSB SPPMD SET PPLEX. JSB SFSIB PPLEX+PPREQ SHOULD SET FLAG. E260 DEF PPREQ NO? REPORT ERROR. JSB CACTV CLEAR ACTIVE. JSB CLCCF CLEAR IBI FLAG. JSB IFCMD SET IFCFLG. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. JSB CACTV CLEAR ACTIVE. JSB SPPMD SET ATN AND EOI. JSB SFCIB DID ILLEGAL PPLEX OCCUR? E261 DEF PPREQ YES! REPORT ERROR. JSB SEOI CLEAR ATN. JSB SACTV SET ACTIVE. JSB SFCIB PPLEX LOW WITH ATN LOW? E262 DEF PPREQ NO! REPORT ERROR. JSB SATN SET ATN. CLEAR EOI. JSB SFCIB PPLEX LOW WITH EOI LOW? E263 DEF IPPREQ NO! REPORT ERROR. JSB CLCCF CLEAR IFCFLG. JSB SPPMD SET ATN AND EOI. JSB SFCIB PPREQ LOW WITH PPPID=0? E264 DEF PPREQ NO! REPORT ERROR. SKP * END OF TEST * FINIT LDA IBH1 GET FIRST SC. CPA IBH2 ONLY ONE SC UNDER TEST? JMP CABTS YES! GO TO CABLE TEST. LDA PSIND GET PASS INDICATOR. SZA,RSS IS THIS THE LAST PASS? JMP MANL,I NO! GO DO SECOND PASS. HED CABLE TEST * * CABLE TEST SECTION * * SINCE ANY SHORTS IN THE CABLE WOULD HAVE BEEN CAUGHT * BY THE PREVIOUS SECTION OF DIAGNOSTIC, THIS TEST SECTION * ONLY TESTS THE CABLE'S ABILITY TO TRANSMIT A ZERO LOGIC * LEVEL FOR EACH SIGNAL. * CABTS LIA 1 GET SW. REG. OPTIONS. SLA,RSS IS BIT 0 SET? JMP CKH77 NO! GO CHECK FOR END OF TEST. LDA B250 UPDATE STA ERRCD ERROR CODE. LDB IBH1 GET FIRST SC. CPB IBH2 ARE THE SC'S THE SAME? RSS YES! GO HALT. JMP DOCTS NO! DO CABLE TEST. JSB DEBON INSURE NO SR BITS ARE PRESSED. E250 OCT 106050 NO TEST WITH ONE SC. JMP CABTS GO CHECK AGAIN. DOCTS LDA NIOTB GET I-O INST. TABLE POINTER. JSB INTIO GO UPDATE I-O INSTRUCTIONS. ISZ ERRCD UPDATE ERROR NUMBER. * * THIS SECTION TESTS THE ABILITY OF THE * CABLE TO TRANSMIT IFC. * JSB PRWMS SET ERROR REPORTING MODE. JSB CONX SET ACTIVE ON THE OCT 5 FIRST IBI. JSB IFCMD SHOULD CLEAR ACTIVE ON FIRST IBI. JSB TIMOT ALLOW TIME FOR IFC TO SETTLE. LDB BIT4 SET UP TEST STB MASK MASK. CLB FORM EXPECTED STATUS. JSB STAT DID IFC CLEAR ACTIVE? E251 DEF CABLF NO! REPORT ERROR. SKP * * THIS SECTION TESTS THE ABILITY OF THE * CABLING TO XMIT DATA AND TO HANDSHAKE. * JSB LIAIB INITIALIZE THE JSB CONX SEC#OND IBI OCT 7 FLAGS FOR DATA TRANSFER. JSB CONT SET ATN OCT 65 AND ACTIVE ON SECOND IBI. LDA MYA2 GET SECOND IBI MYADDR. IOR B100 FORM TALK ADDRESS. JSB DATOT OUTPUT IT TO THE IB. LDA MYA1 GET FIRST IBI MYADDR. IOR B40 FORM LISTEN ADDRESS. JSB DATOT OUTPUT IT TO THE IB. JSB SDMOD SET DATA MODE. LDA MIN2 GET TEST PATTERN. CABLP STA PATTN SAVE THE PATTERN. AND B377 MASK TO LOWER 8 BITS. STA SAVAH SAVE BYTE FOR COMPARISON LATER. JSB DATOT OUTPUT PATTERN TO IB. JSB LIAIB SYNC DATA TRANSMISSION. JSB LIAIB BRING IN DATA FROM FIRST IBI. CPA SAVAH WAS IT THE SAME AS XMITTED? JMP SK12 YES! CONTINUE NORMALLY. LDB SAVAH NO! GET EXPECTED DATA. JSB SENDM REPORT ERROR. E252 DEF CABLF DATA DIDN'T XMIT. SK12 LDA PATTN GET TEST PATTERN. RAL ROTATE IT. CPA NBIT8 IS TEST DONE? RSS YES! SKIP TO NEXT TEST. JMP CABLP NO! GO TEST NEXT PATTERN. * * THIS SECTION TESTS THE ABILITY OF THE CABLING * TO TRANSMIT REN. * ISZ ERRCD UPDATE ERROR CODE. LDB BIT8 GET EXPECTED STATUS. STB MASK SET TEST MASK. JSB CONT SET OCT 3 REN ON SECOND IBI. JSB STAT DID FIRST IBI RECEIVE IT? E253 DEF CABLF NO! REPORT ERROR. SKP * * THIS SECTION TESTS THE ABILITY OF THE * CABLING TO TRANSMIT SRQ. * JSB CLCCF CLEAR SECOND IBI FLAG. JSB NOTWM SET ERROR REPORTING MODE. IO.X3 CLC IBI,C CLEAR IFCFLG ON FIRST IBI. JSB CONX SET TALK AND LISTEN TO CLEAR OCT 100335 SRQFLG ON FIRST IBI. JSB CONT SET SRQEN AND OBRLFLG OCT 1307 AND CLEAR TALK-LISTEN ON SECOND IBI. JSB DATOT SET OBRLFLG. JSB SFSIB FIRST IBI FLAG SHOULD SET. E254 DEF CABLF NO! SRQ DID NOT XMIT. * * THIS SECTION TESTS THE ABILITY OF THE * CABLING TO TRANSMIT ATN. * JSB PRWMS SET ERROR REPORTING MODE. LDB BIT7 SET UP TEST STB MASK MASK AND EXPECTED STATUS. JSB CONT SET ATN ON OCT 65 SECOND IBI. JSB STAT DID FIRST IBI RECEIVE ATN? E255 DEF CABLF NO! REPORT ERROR. CKH77 ISZ PASCT UPDATE PASS COUNT. NOP ROLLOVER PROTECTION. * * END OF TEST * LDB BIT10 SUPPRESS NON- JSB SWRT ERROR MESSAGES? JMP CKIB YES! GO HALT. CLE FOR CONVERSION ROUTINE. LDA PASCT GET PASS COUNT. LDB PASPT GET STRING POINTER. JSB O2AS,I CONVERT PASS COUNT TO ASCII. CLA,CLE READY FORMATTER. LDB PASSN GET MESSAGE POINTER. JSB FMTR,I PRINT PASS COUNT. CKIB LDB BIT12 DOES OPERATOR WANT TO JSB SWRT LOOP ON TEST? JMP CMORG YES! GO FLASH OVERFLOW. JSB GETTM SEE IF OPERATOR WANTS TS MODULE. LDA PASCT GET PASS COUNT. HLT77 HLT 77B END OF TEST. JMP STAR,I GO TO START OF TEST. HED HPIB TROUBLESHOOTING MODULE * * THIS SECTION IS INCLUDED TO AID THE OPERATOR * IN TROUBLESHOOTING EITHER AN IBI OR AN IB DEVICE * USING THE IBI AS SYSTEM CONTROLLER. * ORG 5000B IBTSM LDB CONSC GET CONSOLE SC. SZB,RSS IS THERE A CONSOLE? JMP GOHT7 NO! GO HALT 77 FOR END OF TEST. LDB FOUR DOES OPERATOR WANT TO JSB SWRT USE THE SECOND IBI SC? JMP GSCSC YES! GET SECOND IBI SC. LDB IBH1 NO! GET FIRST IBI SC. RSS SKIP SECOND SELECT CODE. GSCSC LDB IBH2 GET SECOND SELECT CODE. LDA IOTBL GET IBI I-O INST TABLE PNTR. JSB INTIO GO INITIALIZE IBI I-O INST'S. CLA,CLE READY FORMATTER. LDB TSINM GET INTRODUCTION MESSAGE. JSB FMTR,I PRINT MESSAGE. ESCRN JSB PCRLF GO PRINT CR-LF. TYINL CLA,CLE READY FORMATTER. LDB PRMPT PRINT JSB FMTR,I PROMPT MESSAGE. JSB GCHAR GO GET A CHARACTER. CPA ASCA IS IT AN "A" FOR ABORT? JMP GOHT7 YES! GO HALT 77 FOR END OF TEST. CPA ASCS IS IT A "S" FOR STATUS REPORT? JMP PSTAT YES! GO PRINT IBI STATUS. CPA ASCI IS IT AN "I" FOR INPUT DATA? JMP PDATA YES! GO GET DATA WORD FROM IBI. CPA B103 IS IT A "C" FOR CONTROL IBI. JMP GOCWD YES! GO GET THE CONTROL WORD. CPA ASCD IS IT A "D" FOR DATA OUTPUT? JMP GODWD YES! GO GET DATA WORD. INPER CLA,CLE NO! READY FORMATTER. LDB ERMSG PRINT JSB FMTR,I "INPUT ERROR" MESSAGE. JMP TYINL GO GET ANOTHER CHARACTER. SPC 3 GOCWD JSB FORMD GO FORM THE CONTROL WORD FROM OPERATOR. JSB STFIB READY CONTROL MODE ON IBI. JSB DATOT OUTPUT CONTROL TO IBI. JMP TYINL GET NEXT CHARACTER. SPC 3 GODWD JSB FORMD GO FORM DATA WORD FROM OPERATOR. JSB DATOT OUTPUT DATA TO IBI. JMP TYINL GET NEXT CHARACTER. SKP PSTAT JSB STFIB SET IBI TO CONTROL MODE. JSB LIAIB GET STATUS WORD FROM IBI. JSB PRINT GO PRINT IT ON TTY. JMP TYINL GET NEXT CHARACTER. SPC 3 PDATA JSB LIAIB GET DATA WORD FROM IBI. JSB PRINT GO PRINT IT ON TTY. JMP TYINL GET NEXT CHARACTER. SPC 3 PRINT NOP CLE READY CONVERSION ROUTINE. LDB BUFFR SET BUFFER POINTER. JSB O2AS,I CONVERT NUMBER TO ASCII. CLA,CLE READY FORMATTER. LDB BUFFR SET BUFFER POINTER. JSB FMTR,I GO PRINT NUMBER. JMP PRINT,I RETURN SPC 3 FORMD NOP LDA INPUT GET INPUT BUFFER POINTER. STA PNTR SAVE IT. CLA PUT LDB MIN6 ZEROS STA PNTR,I IN ISZ PNTR THE INB,SZB INPUT JMP *-3 BUFFER. LDB MIN6 GET CHARACTER INPUT COUNT. BADIN STB SAVPB SAVE CHARACTER COUNT. JSB GCHAR GO GET A CHARACTER. LDB SAVPB RESTORE CHARACTER COUNT. SZA,RSS DID OPERATOR PRESS LINE FEED? JMP PRCES YES! GO PROCESS INPUT NUMBER. CPA ASCE NO! WAS E KEY PRESSED? JMP ESCRN YES! EXIT INPUT. STA SAVIN NO! SAVE INPUT. AND B170 IS INPUT CPA B60 A NUMBER <=7? RSS YES! GO PUT IT IN BUFFER. JMP INPER NO! INPUT ERRORAND GET NEXT INPUT. LDA SAVIN RESTORE INPUT. STB SAVPT SAVE CHAR. COUNT. ADB EOBUF FORM CHAR POINTER IN BUFFER. STA B,I PUT CHAR IN BUFFER. LDB SAVPT RESTORE CHARACTER COUNT. INB,SZB SIX CHARACTERS ENTERED? JMP BADIN NO! GO GET ANOTHER NUMBER. JSB PCRLF PRINT A CR-LF ON CONSOLE. SKP PRCES LDB BUFFR GET THE DESTINATION BUFFER PNTR. LDA INPUT GET THE SOURCE BUFFER POINTER. STA LPNTR SAVE IT. JSB STUFA GO PACK SIX JSB STUFA ASCII CHARACTERS INTO JSB STUFA A THREE WORD BUFFER. CCA,CLE READY ASCII TO OCTAL CONVERSION. LDB BUFFR GET ASCII BUFFER POINTER. JSB ASCON,I CONVERT. JMP FORMD,I EXIT ROUTINE. SPC 3 STUFA NOP LDA LPNTR,I GET AN ASCII NUMBER. ALF,ALF SHIFT IT TO UPPER BYTE. ISZ LPNTR UPDATE SOURCE BUFFER PNTR. IOR LPNTR,I MERGE IN NEXT ASCII NUMBER. STA B,I PUT PACKED DATA IN DEST. BUFFER. ISZ LPNTR UPDATE SOURCE BUFFER POINTER. INB UPDATE DESTINATION BUFFER POINTER. JMP STUFA,I RETURN. SPC 3 GCHAR NOP CLA,INA SET UP FOR ONE CHAR. INPUT. STA PARAM CLEAR UPPER BYTE OF INPUT BUFFER. LDB _NLHCHRIN GET POINTER TO INPUT BUFFER. JSB SLOIN,I GO GET A CHARACTER FROM CONSOLE. LDA PARAM GET INPUT CHARACTER. ALF,ALF SHIFT IT TO LOWER BYTE. AND B177 STRIP OFF ANY PARITY. JMP GCHAR,I RETURN. SPC 3 GOHT7 LDB BIT12 TEST FOR LOOP JSB SWRT ON DIAGNOSTIC. JMP CMORG YES? GO LOOP. JMP HLT77 NO? GO HALT 77B. FWAA EQU * END FWAA EQU * END STA *+1 PUT HALT IN LINE. HLT 0 ERROR HALT. ISZ SENDM MOVE PAST CONTROL WORD JMP SENDM,I OF JSB AND RETURN. -N  59310-18005 1840 S 0222 HP-IB DRIVER              H0102  IFZ HED DVR37, NO SRQ ALARM SERVICE NAM DVR37,0 59310-16002 REV. 1840 780811 XIF * IFN HED DVR37, WITH SRQ ALARM SERVICE NAM DVR37,0 59310-16003 REV. 1840 780811 XIF * ENT I.37,C.37 EXT $LIST * ***************************************************** * (C) COPYRIGHT HEWLETT-PACKARD CO., 1975 * * ALL RIGHTS RESERVED * ***************************************************** * * DVR37 - RTE HP-IB DRIVER * * RELOC: 59310-16002 (NO SRQ SERVICE) * RELOC: 59310-16003 (WITH SRQ SERVICE) * SOURCE: 59310-18005 * ***************************************************** * R.FAJARDO, 760329 * * * ASSEMBLE WITH N OPTION FOR SRQ ALARM SERVICE * ASSEMBLE WITH Z OPTION TO EXCLUDE SRQ SERVICE * INTBA EQU 1654B FWA INTERRUPT TABLE DUMMY EQU 1737B PRIVILEDGED INTERRUPT I/O * EQT1 EQU 1660B DEVICE SUSPEND LIST POINTER EQT2 EQU 1661B DRIVER INITIATION SECTION ADDR EQT3 EQU 1662B DRIVER COMPLETION SECTION ADDR EQT4 EQU 1663B DRIVER I/O ASSIGNMENTS, EQT5 EQU 1664B DRIVER STATUS INFORMATION EQT6 EQU 1665B CURRENT I/O REQUEST, EQT7 EQU 1666B DATA BUFR ADDR/CONTROL PARM EQT8 EQU 1667B DATA BUFR LNG/CONTROL PARM EQT9 EQU 1670B CONTROL BUFR ADDR EQT10 EQU 1671B CONTROL BUFR LNG EQT11 EQU 1672B DRIVER CONTROL WORD, EQT12 EQU 1771B EQT ENTRY COUNT, EQT13 EQU 1772B EQT EXTENSION ADDR EQT14 EQU 1773B DEVICE TIME OUT VALUE EQT15 EQU 1774B DEVICE TIME OUT CLOCK * SUP SKP * * EQT ENTRY WORD FORMATS AS FOLLOW: * ******EQT4 - FORMAT: D BPS TUU UUU CCC CCC * D=DMA ASSIGNED, 1=YES * B=BUFFERING ON, 1=YES * P=PWR FAIL SERVICED BY DVR, 0=NO * S=TIME OUT SERVICED BY DVR, 1=YES * T=TIME OUT OCCURANCE, 1=YES * U=UNIT OR SUBCHAN, THIS REQUEST * C=I/O CHANNEL, THIS REQ. * ******EQT5 - FORMAT: A ATT TTT TSS SSS SSS * A=AVAILABILITY * T=DEVICE TYPE, 37 * S=STATUS BYTE * ******EQT6 - FORMAT: C C0Z 0FF FFF 000 0RR * C=REQUEST TYPE, 0/1/2/3:STANDARD/BUFFERED/SYSTEM/CLASS * F=SUBFUNCTION * R=I/O REQUEST, 1/2/3:READ/WRITE/CNTRL * Z=0/1 SINGLE/DOUBLE BUFR REQUEST * ******EQT11 - FORMAT: S A0E B00 H00 00C MDI * S=SRQ SERVICE IN PROGRESS, 1=YES * A=I/O REQUEST ABORTED TO SERVICE SRQ, 1=YES * E=EXPECT/ISSUE EOR WITH I/O, 1=YES * B=EXPECT/ISSUE EOR WITH LAST DATA BYTE, 1=YES * H=ENABLE ASCII MODE I/O CARD LOGIC, 1=YES * C=ENABLE CRLF POST PROCESSING, 1=YES * M=DATA MODE, 1=ASCII, 0=BINARY * D=DMA ACTIVE ON PENDING REQUEST, 1=YES * I=I/O DIRECTION, 1=INPUT, 0=OUTPUT * ******EQT12 - FORMAT: S PAB BBB BFE EEE EEE * S=SRQ PENDING FLAG * P=ALARM PROG SCHEDULING ACTIVE * A=SRQ INTERRUPT ARMING FLAG * B=# ACTIVE BEQT ENTRIES, 0-31 * F=FIRST DIRECT I/O REQUEST FLAG * E=# EQT EXTENSION WORDS, 12-127 * ******EQT13 - FORMAT: I AAA AAA AAA AAA AAA * I=INITIATOR/CONTINUATOR FLAG * A=EQT EXTENSION ADDRESS * SKP * * I/O INITIATOR SECTION * I.37 NOP CLB NO CLC,C JSB SETUP CNFG I/O & BEQT ADDRS JSB MINE REGAIN HP-IB CONTROL JSB DMA? SZA HAVE WE DMA? JMP I37A LDA EQT6,I NO, DO WE NEED IT? AND B3 CPA B3 JMP I37A CONTROL REQUEST, NO. LDA BEQT1,I I/O REQUEST, RAL,RAL DMA REQUIRED? SSA,RSS JMP I37A LDA B5 YES, GO GET IT JMP I.37,I I37A EQU * * IFN **IF SRQ SERVICE***** CLA * * LDB EQT11,I *SRQ SERVICE BUSY? * SSB * * JMP I.37,I * YES, AWAIT COMPLETION XIF ********************* * LDA EQT13,I INDICATE IOR BIT15 INITIATOR b STA EQT13,I SECTION LDA EQT4,I CLAIM IOR BIT12 TIME OUT STA EQT4,I PROCESSING * * RSTRT CLA,CCE CLEAR: STA EQT11,I DRIVER CNTRL WORD STA STSWD,I PENDING EQT STATUS WORD STA XLOG,I PENDING TRANSMISSION LOG JSB STATS INTERRUPT FLAG FROM PREVIOUS OP. LDA EQT6,I AND B3 GET REQUEST CPA B3 JMP I.CRQ CONTROL! SKP * * I/O REQUESTS HERE * I000 LDA EQT6,I LOAD I/O CTL WORD ALF SHIFT Z-BIT TO LSB AND B1 MASK STA ZBIT AND SAVE SZA,RSS Z=1? JMP *+4 NO * LDA EQT10,I LOAD CTL BUFR LNGTH SZA LENGTH=0? JMP I005 NO LDB UNIT YES,LOAD SUBCHANNEL SZB,RSS SUBCHANNEL=0? JMP I015 YES,CHECK FOR DATA LDA ZBIT NO,LOAD Z-BIT CPA B1 Z-BIT=1? JMP I015 YES,CHECK FOR DATA LDA EQT8,I NO,LOAD DATA BUFR LNGTH SZA LENGTH=0? JMP I010 NO,GENERATE AUTO ADDR CMNDS LDA EQT6,I YES,LOAD EQT WORD 6 AND B2103 MASK I/O REQ CODE CPA B2 REQUEST CODE=2(WRITE REQ)? JMP I010 YES,GENERATE AUTO ADDR CMNDS & CR-LF JMP L.XIT NO,EXIT * * ISSUE CONTROL BUFFER * I005 SSA CTL BUFR LGTH NEG(CHARS)? CMA,INA,RSS YES,MAKE POSITIVE & SKIP ALS NO,WORDS. CNVRT TO +CHARS LDB EQT9,I LOAD CMND BUFR ADDRESS JMP I012 AND OUTPUT * I010 LDA EQT6,I EXTRACT I/O REQ AND B3 & XOR B3 FORM CMNDS: ALF,RAL IOR UNIT ALF,ALF UNT,UNL,TLK/LSN STA CMDBA+1,I LDA B3 ADDRESS DEVICE LDB CMDBA I012 JSB DOIO DO OUTPUT OCT 60 * * SET UP DATA TRANSFER * I015 LDA EQT8,I SZA ANY DATA? JMP I020 YES, GIVE IUT CPA UNIT DIRECT I/O REQ? JMP L.XIT YES,EXIT CPA ZBIT Z-BIT=0? JMP I020 YES,ISSUE DATA JMP L.XIT NO,EXIT I020 SSA CMA,INA,RSS MAKE +CHAR CNT ALS STA T1 LDA EQT6,I EXTRACT I/O REQ AND B3 & FORM CPU XOR B3 TLK/LSN CMND, ALF,RAR DATA MODE IOR B100 STA I028A LDA EQT6,I ERA,RAL (E)=I/O DIRECTION ASR 6 AND B21 EXTRACT SUB-FUNCTION STA 1 LDA BEQT1,I INIT DVR CNTRL WORD: AND BIT13 GET DMA REQUIREMENT ALF BIT 1: DMA ACTIVE, 1=YES RAR,ELA BIT 0: I/O DIRECTION, 1/0 SLB,RSS TRANSLATE M BIT IOR B4 BIT 2: ASCII/BINARY, 1/0 SLB,RSS ASCII READ REQUEST? SLA,RSS OR CPB B20 HONESTY MODE ASCII? IOR BIT8 BIT 8: ASCII LOGIC ON, 1=YES STA EQT11,I SLA DETERMINE EOR REQUIREMENTS JMP I021 CLA OUTPUT, CPB B1 BINARY RECORD? LDA BEQT1,I YES, USE CNFG WORD RAL,RAL NO, EOR NOT REQUIRED JMP I022 I021 LDA B14K INPUT, SLB BINARY ANYTHING? LDA BEQT1,I YES, USE CNFG WORD I022 AND B14K NO, REQUIRE EOR W/BYTE IOR EQT11,I STA EQT11,I POST REQUIREMENTS * SZB ASCII RECORD? JMP I028 NO. SLA,RSS YES, DIRECTION? CPB T1 WRITE REQUEST! JMP I026 READ REQUEST! OR 0 LNG WRITE! CCA ADA T1 CHECK "_" CROCK ARS ADA EQT7,I FIND BUFR END LDA 0,I LDB T1 CMB,SLB,INB,RSS ODD CHAR? ALF,ALF YES, POSITION AND B377 & AXE CPA B137 "_" ? INB YES, DROP CNT CMB,INB STB T1 CPA B137 "_" ? JMP I028 YES, NO CRLF I026 LDLA EQT11,I FLAG CRLF IOR B10 POST-PROC. STA EQT11,I REQUIREMENT * SKP I028 LDA T1 LDB EQT7,I DO I/O OP JSB DOIO I028A NOP (CNTRL WORD) IOR XLOG,I MAINTAIN ERR STATUS (IF ANY) STA XLOG,I POST XMIS LOG JMP L.XIT & COMPLETE * * DISPATCH CONTROL REQUESTS * I.CRQ LDA EQT6,I EXTRACT SUB-FUNCTION ASR 6 AND B37 STA 1 LDA UNIT GET DEVICE ADDR CLE,SZA,RSS UNIT 0? JMP IBCRQ YES, BUS CONTROL SZB,RSS NO, DEVICE CONTROL JMP ID00 DEVICE CLEAR CPB B1 JMP ID01 DEVICE EOR CPB B6 JMP ID06 DEVICE STATUS CPB B11 JMP ID11 DEVICE LINE/FORM FEED CPB B16 JMP IB16 REN TRUE IFN **IF SRQ SERVICE***** CPB B20 * * JMP ID20 *ARM ALARM PROG * CPB B21 * * JMP ID21 *CLEAR ALARM PROG * XIF ********************* CPB B25 JMP ID25 SET DEVICE CNFG.WORD CPB B27 JMP ID27 CLEAR DEVICE CNFG.WORD JMP L.XIT ELSE, IGNORE * IBCRQ SZB,RSS JMP IB00 BUS CLEAR CPB B1 JMP IB01 BUS EOR CPB B6 JMP IB06 BUS STATUS CPB B16 JMP IB16 REN TRUE CPB B17 JMP IB17 REN FALSE CPB B25 JMP ID25 CONFIGURE BUS CPB B27 JMP IB27 UNCONFIGURE BUS CPB B30 JMP IB30 PARALLEL POLL JMP L.XIT * SKP * * SELECTED DEVICE CLEAR * ID00 IOR #LSN FORM CMNDS: ALF,ALF IOR #SDC UNT,UNL,LSN,SDC STA CMDBA+1,I LDA B4 LDB CMDBA ID00A JSB DOIO & ISSUE OCT 60 (CMND MODE) JMP L.XIT * * ISSUE DEVICE EOR * ID01 IOR #LSN FORM CMNDS: ALF,ALF STA CMDBA+1,I UNT,UNL,LSN LDA B3 LDB CMDBA JSB DOIO ISSUE NOW OCT 60 IB01 CLA,INA LDB .0A JSB DOIO GIVE EOR OCT 150 (DATA MODE) JMP L.XIT * * DEVICE STATUS * ID06 IOR #TLK FORM CMNDS: IOR #SPE. STA CMDBA+1,I UNT,UNL,SPE,TLK LDA B4 LDB CMDBA JSB DOIO NOTIFY CNTRLR OCT 60 ISZ EQT11,I INDICATE INPUT CLA,INA & LDB STSWD JSB DOIO TAKE STATUS OCT 120 (DATA MODE, CPU LSN) LDA STSWD,I ALF,ALF POSITION STATUS BYTE STA STSWD,I CLA STA EQT11,I INDICATE OUTPUT LDA B2 LDB A#SPD JMP ID00A SERIAL POLL DISABLE * * DEVICE LINE/FORM FEED * ID11 LDB EQT7,I LOAD CTL PARAMETER SZB,RSS PARAMETER=0? JMP L.XIT YES,EXIT IOR #LSN NO,MERGE LSN CMND WITH SUBCH ALF,ALF SHIFT TO UPPER BYTE STA CMDBA+1,I AND SAVE IN CMND BUFR LDA B3 LOAD CMND BUFR LNGTH LDB CMDBA LOAD CMND BUFR ADDR JSB DOIO GO OUTPUT UNT,UNL,LSN CMNDS OCT 60 LDA EQT7,I LOAD CTL PARAMETER CMA,SSA,INA,RSS JMP ID11B GO ISSUE A FORM FEED * STA EQT7,I SAVE LF CTR(- # OF CRLF'S) ID11A LDA B14 LOAD DRIVER CTL WORD STA EQT11,I AND SAVE IN EQT11 CLA JSB DOIO GO OUTPUT CR/LF OCT 110 ISZ EQT7,I LAST CR/LF? JMP ID11A NO,OUTPUT ANOTHER JMP L.XIT YES,EXIT * ID11B CLA,INA SET BUFR LNGTH=1 LDB FORMA LOAD FORM FEED CMND ADDRESS JSB DOIO ISSUE FORM FEED CMND ONCE OCT 110 JMP L.XIT AND EXIT SKP IFN **IF SRQ SERVICE***** * * ARM SRQ ALARM PROG (IF "ASMB,...,N") * ID20 LDB EQT7,I GET ALARM PROG BUFFER ADDRESS LDA 1,I GET 1ST TWO CHARS OF ALARM PROG NAME STA T2b AND STORE INB GET ADDRESS OF 2ND PAIR OF CHARS DLD 1,I GET 2ND AND 3RD PAIRS OF CHARS DST T2+1 AND STORE JSB $LIST OCT 217 GET ID ADDRESS OF ALARM PROGRAM DEF T2 SZA ID ADDRESS FOUND? JMP LOSE4 NO, GO LOSE! NO SUCH PROGRAM LDB BEQT2 YES, LOAD ADDRESS OF 2ND BEQT WORD LDA T2 LOAD 1ST TWO CHARS OF ALARM PROG NAME STA 1,I AND STORE IN 2ND WORD OF BEQT INB INCREMENT TO ADDR OF 3RD WORD IN BEQT STB T1 AND STORE LDA T2+1 LOAD 2ND LDB T2+2 AND 3RD PAIRS OF CHARS DST T1,I AND STORE IN WORDS 3 AND 4 OF BEQT LDA EQT12,I LOAD EQT WORD 12,SET SRQ INTERRUPT IOR BIT13 ARMING FLAG BIT 13 STA EQT12,I AND STORE IN EQT WORD 12 JMP L.XIT XIF * * CLEAR DEVICE EQT EXTENSION * ID27 CLA 0 CNFG WORD ENTRY STA BEQT1,I * * CLEAR ACTIVE SQR ALARM PROGRAM * ID21 CLA LDB BEQT2 LOAD ADDR OF ALARM PROG NAME BUFFER STA 1,I AND CLEAR 1ST PAIR OF CHARS INB INCREMENT TO ADDR OF 3RD WORD IN BEQT STB T1 AND STORE CLB DST T1,I CLEAR 2ND AND 3RD PAIR OF CHARS JMP L.XIT * * ESTABLISH DEVICE/BUS CNFG WORD * ID25 LDA EQT7,I GET CNFG WORD AND HI11 & IOR UNIT MERGE DEVICE ADDR STA BEQT1,I JMP L.XIT SKP * * GENERAL HP-IB CLEAR * IB00 LDA EQT6,I REQUEST FROM SYSTEM RRL 2 IN RESPONSE TO AND B3 CPA B2 OF,PROG,1 ??? JMP L.XIT YES, DISMISS! CLA,INA ISSUE IFC CMND JSB CNTLR & LDA HI10 DELAY NO LESS INA,SZA THAN 100 USEC JMP *-1 JSB MINE REGAIN CNTRL LDB EQT7,I SZB IF OPT.PARM#0 JMP L.XIT DO IFC ONLY! CLA,INA LD B A#DCL ADD UNIVERSAL JMP ID00A DEVICE CLEAR * * DO PARALLEL POLL * IB30 LDA B70 ISSUE PPE CMND JSB CNTLR LDA B6 STROBE DIO LINES JSB CNTLR TO INPUT REG. IO5 LIA BUS & TAKE DATA BYTE JMP IB06A & POST IN EQT * * TAKE HP-IB STATUS * IB06 JSB STATS GET STATUS WORD, (E)=0 ASR 4 ISOLATE BUS SIGNAL LINE AND B377 & BUS FUNCTION STATUS IB06A STA STSWD,I & POST IN EQT JMP L.XIT * * REN TRUE/FALSE * IB16 LDA B3 REN TRUE RSS IB17 LDA B2 REN FALSE JSB CNTLR JMP L.XIT * * CLEAR BUS CONFIGURATION * IB27 LDA EQT12,I LOAD EQT WORD 12 AND B177 MASK # OF EQT EXTENSION WORDS STA EQT12,I AND RESTORE LDA DFCFG LOAD DEFAULT BUS CNFG WORD LDB EQT4,I LOAD EQT WORD 4 SSB DMA BIT 15=0? IOR BIT13 NO,SET DMA BIT IN DFLT WORD STA BCNFG,I AND SAVE IN BUS CNFG WORD JMP L.XIT * SKP * * I/O CONTINUATOR SECTION * C.37 NOP STA I.37 =INTERRUPT SOURCE CLB,INB ENABLE CLC,C JSB SETUP CNFG I/O & BEQT ADDRS JMP OUCH IFC DETECTED! IFN **IF SRQ SERVICE***** LDA T1 * LDB EQT11,I * SSB SRQ SERVICE ACTIVE? * JMP C37C YES, RESUME OPERATIONS SSA SRQ INTERRUPT? * JMP C.SRQ YES, POSSIBLE ALARM* XIF ********************* * C37A LDA EQT1,I SZA I/O IN PROGRESS? JMP C37B YES. IFN **IF SRQ SERVICE***** LDA EQT12,I * RAL,SLA SRQ PENDING? * JMP C.SRQ YES, SERVICE NOW. * SSA ALARM PROG WAITING? * JSB C.SCH YES, SCHEDULE IT * XIF ********************* a  JMP C.OFF NO, LEAVE * C37B LDA T1 LDB EQT11,I RBR,SLB,RBL DMA I/O ACTIVE? JMP C.DMA YES, SPECIAL HANDLING * C37C RAL,RAL SLB,RSS INPUT REQUEST? JMP C37D SLA YES, EXPECT IRL FLAG JMP C.IRL INPUT READY. JMP C37E C37D SSA NO, EXPECT ORA FLAG JMP C.ORA OUTPUT ACCEPTED. * C37E LDA EQT4,I ALF TIME OUT? SSA,RSS JMP L.RTN NO, DISMISS IFN **IF SRQ SERVICE***** LDA BIT15 SSB SERIAL POLL HUNG? * JMP CONT. BAD, BAD, LEROY BUS... XIF ********************* SLB INPUT REQUEST? BLF,SLB EOR REQUIRED? JMP LOSE1 DEVICE QUIT. JMP C.IR3 ASSUME COMPLETE SKP * * INTERFACE CLEAR SERVICE * OUCH LDA EQT1,I I/O IN PROGRESS? SZA JMP OUCH1 YES. IFN **IF SRQ SERVICE***** LDB EQT11,I * SSB SRQ SERVICE ACTIVE? * JMP C.SR8 YES, NO LONGER... * XIF ********************* JMP C.OFF NO, IGNORE OUCH1 JSB MINE REGAIN CNTRL JMP LOSE2 & QUIT SKP IFN **IF SRQ SERVICE** * * SERVICE REQUEST HANDLING (IF "ASMB,...,N") * C.SRQ LDA EQT1,I SZA,RSS I/O IN PROGRESS? JMP C.SR1 NO, GO POLL LDB BEQT1,I SRQ ALLOWED TO SSB KILL I/O OP? JMP C.SR0 LDA EQT12,I NO, DELAY SERVICE IOR BIT15 STA EQT12,I JMP C37A * C.SR0 LDA BIT14 YES, INDICATE SUCH C.SR1 IOR BIT11 (IN CASE OF EOR) STA EQT11,I LDA EQT12,I CLEAR PENDING ELA,CLE,ERA SRQ NOTIFICATION STA EQT12,I JSB SBEQT GET #BEQT ENTS & BEQT ADDR CMA,INA,SZA,RSS ANY? JMP CSR3A NO, DISABLE SRQ INTRPT STA BQCNT,I * C.SR2 STB BEQTA,I STORE DEVICE EQT EXT START ADDR INB INCREMENT TO 2ND WORD IN CURRENT EQT EXT LDA 1,I LOAD 2ND WORD SZA IS SRQ ALARM PROG SET UP FOR THIS DEVICE? JMP C.SR4 YES C.SR3 ADB B4 NO,GO TO 1ST WORD IN NEXT DEVICE EQT EXT ISZ BQCNT,I JMP C.SR2 LDA EQT11,I SSA SRQ SERVICE ACTIVATED? JMP C.SR7 YES, NO CLAIMERS, (MAYBE?)... CSR3A LDA EQT12,I NO, DISABLE FUTURE SRQ IOR BIT13 INTERRUPTS FOR NOW XOR BIT13 STA EQT12,I JMP C.SR8 * C.SR4 LDB BEQTA,I POSSIBLE SRQ SOURCE LDA 1,I LOAD DEVICE CONFIGURATION WORD AND B37 MASK DEVICE ADDRESS IOR #TLK LDB EQT11,I CCE,SSB SRQ SERVICE ACTIVATED YET? JMP C.SR5 RBL,ERB NO, ACTIVATE NOW STB EQT11,I IOR #SPE. FORM CMNDS: STA CMDBA+1,I UNT,UNL,SPE,TLK LDA B4 LDB CMDBA JMP C.SR6 * C.SR5 ALF,ALF YES, ADDR NXT TLKER STA STSWD,I CLA,INA LDB STSWD C.SR6 JSB DOIO DO SERIAL POLL OCT 60 SSA ERRORS ?? JMP DOWN YES, NO MERCY... ISZ EQT11,I INDICATE INPUT CLA,INA & LDB STSWD TAKE STATUS JSB DOIO OCT 120 (DATA MODE, CPU LSN) SSA TIME OUT? JMP LOSE7 YES, GO LOSE! LDA EQT11,I INDICATE OUTPUT ERA,CLE,ELA STA EQT11,I LDB BEQTA,I LOAD ADDRESS OF 1ST WORD IN CURRENT BEQT INB INCREMENT TO ADDR OF 2ND WORD LDA STSWD,I AND BIT14 SZA,RSS SRQ CLAIMED? JMP C.SR3 NO, TRY AGAIN * LDA 1,I YES IOR BIT15 SET SRQ PROGRAM SCHED ACTIVE BIT IN BEQT2 STA 1,I AND STORE ADB B3 INCREMENT TO BEQT WORD 5,SRQ STATUS BYTE LDA STSWD,I LOAD SRQ STATUS BYTE ALF,ALF SHIFT TO LOWER BYTE ^ STA 1,I SAVE STATUS BYTE IN BEQT WORD 5 LDA EQT12,I LOAD EQT WORD 12 AND SET ALARM IOR BIT14 PROGRAM SCHEDULING ACTIVE BIT 14 STA EQT12,I AND STORE LDB BEQTA,I INB JMP C.SR3 TRY FOR MORE * C.SR7 LDA B2 LDB A#SPD ISSUE SERIAL POLL JSB DOIO DISABLE CMND OCT 60 SSA TIME-OUT? JMP DOWN YES, LOSE JSB C.SCH SKP * C.SR8 LDB EQT11,I RBL SSB,RSS I/O ABORTED? JMP CSR10 LDB BEQT1,I YES, ATTEMPT RESTART? RBL SSB JMP RSTRT YES, DO IT JMP LOSE3 NO, ABORT IT * CSR10 LDB EQT1,I SZB NO, BUSY NOW? JMP RSTRT YES, RESUME STB EQT11,I NO, CLEAR DVR CNTRL WORD JMP C37A * SKP * * ALARM PROGRAM SCHEDULING (IF "ASMB,...,N") * C.SCH NOP LDA EQT12,I LOAD EQT WORD 12,EQT ENTRY COUNT XOR BIT14 SET ALARM SCHEDULING ACTIVE BIT STA EQT12,I AND STORE JSB SBEQT GET #BEQT ENTRIES(A),ADDRESS OF 1ST BEQT(B) CMA,INA SET COUNTER TO -#BEQT ENTRIES STA BQCNT,I AND STORE * C.SC1 INB GO TO ADDR OF 2ND WORD IN CURRENT BEQT STB BEQTA,I AND STORE IN BEQTA LDA 1,I LOAD SECOND WORD OF CURRENT BEQT SSA SCHEDULING ACTIVE BIT 15 SET? JMP C.SC3 YES,TRY TO SCHEDULE PROGRAM IF IT EXISTS C.SC2 ADB B4 NO,GO TO 1ST WORD IN NEXT BEQT ISZ BQCNT,I INCREMENT BEQT COUNTER JMP C.SC1 JMP C.SCH,I DONE, SO LEAVE * C.SC3 ELA,CLE,ERA FOUND, CLEAR SCHEDULING ACTIVE BIT 15 STA 1,I AND STORE BACK INTO 2ND WORD IN BEQT STB C.SC4 STORE ADDR FOR SCHEDULING SRQ PROG ADB B3 INCR ADDR TO 5TH WORD IN BEQT,SRQ STATUS BYTE STB PARM1 AND STORE ADB M4 GO TO ADDR OF 1ST WORD IN CURRENT BEQT LDA 1,I LOAD DEVICE CONFIGURATION WORD *AND B37 MASK DEVICE ADDRESS STA PARM2 AND STORE LDA EQT1 LOAD DEVICE EQT ADDRESS STA PARM3 AND STORE * JSB $LIST SCHEDULE ALARM PROGRAM OCT 701 BY NAME AND PASS IT DEF *+5 THREE PARAMETERS C.SC4 NOP ALARM PROGRAM NAME BUFFER ADDRESS PARM1 NOP SRQ STATUS BYTE DEF PARM2 DEVICE ADDRESS DEF PARM3 EQT ADDRESS * SZA SUCCESSFUL SCHEDULE? JMP C.SC5 NO,CHECK ERROR CODE JMP C.SC6 YES,LOAD ADDR OF 2ND WRD IN CURRENT BEQT * C.SC5 CPB B5 IS PROGRAM THERE? JMP LOSE5 NO,GO LOSE! LDA EQT12,I YES, MAINTAIN ALARM PROGRAM IOR BIT14 SCHEDULING ATTEMPT BY SETTING STA EQT12,I SCHEDULING ACTIVE BIT IN EQT WORD 12 LDB BEQTA,I LOAD ADDR OF 2ND WORD IN CURRENT BEQT LDA 1,I LOAD 2ND WORD IN BEQT IOR BIT15 RESET SRQ PROG SCHED ACTIVE BIT STA 1,I AND STORE INTO 2ND WORD IN BEQT * C.SC6 LDB BEQTA,I LOAD ADDR OF 2ND WORD IN CURRENT BEQT JMP C.SC2 CONTINUE... XIF SKP * * DMA COMPLETION SERVICE * C.DMA BLF,ELB GET EOR CHARACTERISTICS RAL,RAL ELA A(15)=EOR FLAG, A(0)=W/BYTE STA T1 JSB DMA? GET DMA CHAN STA T2 & JSB CFGIO CNFG I/O INSTRUCTIONS DEF DMAT2 LDA DIO12 XOR B4 FORM LIB 2/3 STA DIO12 STA DIO13 DIO13 LIB 2 STB T3 LDA T2 LDB EQT11,I CPA I.37 DMA COMPLETION? JMP C.DMD YES. LDA T1 SSA EOR INDICATED? JMP C.DM1 YES. LDA EQT4,I ALF SSA,RSS TIME OUT? JMP L.RTN NO, DISMISS * C.DM1 SLB,RSS DMA HUNG! INPUT? JMP DIO10 NO, SKIP WIERD CRAP IO6 STC BUS DISABLE DMA'S CLF LDA B6 TO NOT CLEAR EOR FF JSB CNTLR w^FORCE DMA CYCLE TO GET LAST BYTE IO7 CLC BUS ENABLE LATER CLF INSTRUCTIONS DIO10 CLC 6 & DIO11 STF 6 STOP DMA SLB,RSS INPUT? JMP LOSE1 NO, DEVICE DOWN * C.DM2 LDB T1 SSB EOR SEEN? SLB EXPECTED AFTER LAST BYTE? C.DM3 CLA,RSS CCA YES, ADJUST CNT DIO12 LIB 2 TAKE DMA REMAINS CPB T3 SAME AS PREVIOUS CNT?? RSS YES, MUST HAVE BEEN EVEN CNT ADA M1 NO, ADJUST FOR ODD CNT BLS ADB 0 ADB IOCNT,I ADB IOLNG,I =XMITTED CHAR CNT LDA 1 ARS ADA IOADR,I STA IOADR,I =BUFR END ADDR LDA EQT11,I SLA CHECK I/O DIRECTION JMP C.DM4 * XOR B2 OUTPUT, CLEAR DMA STA EQT11,I ACTIVE STATUS AND BIT8 MAINTAIN ASCII LOGIC IOR REACT ARM SRQ,ORA,PACKING JSB CNTLR & JMP C.OR8 DUMP REMAINDER * C.DM4 STB IOCNT,I INPUT, POST APPROX.CNT AND B10 CRLF POST PROC? SZA,RSS JMP C.IR3 NO, ALLOW ODD CHAR.FILL LDB IOCNT,I YES, END ON CRLF ADB M2 CLE,SSB,RSS SZB,RSS CLB,CCE CCA,SEZ CLA ADA IOADR,I STA IOADR,I C.DM5 LDA IOADR,I GET CUR.WORD LDA 0,I SLB,RSS EVEN CNT? ALF,ALF YES, POSITION AND B377 EXTRACT CHAR CPA B15 CR? JMP C.DM6 OR CPA B12 LF? JMP C.DM6 OR CPB IOCNT,I EOB? JMP C.IR3 YES, DONE SLB,INB ODD CNT? ISZ IOADR,I YES, ADVANCE JMP C.DM5 & CONTINUE * C.DM6 STB IOCNT,I POST VALID CHAR CNT JMP C.IR3 * C.DMD SLB DMA COMPLETION FOR: JMP C.DM2 INPUT. JMP C.DM3 OUTPUT. SKP * * OUTPUT CONTINUATOR SERVICE * C.ORA LDA EQT11,I GET EOR CHARACTERISTICS o ALF,CLE A(0)=EOR REQ., A(15)=W/BYTE LDB IOCNT,I SZB,RSS BUFR FLUSHED? JMP C.OR5 YES. (E)=0 CPB B1 WEIRD CRAP? JMP C.OR3 YES, (E)=0 INB,SZB,RSS ODD BYTE? JMP C.OR3 YES. (E)=1 INB,SZB,RSS LAST WORD? JMP C.OR2 YES. (E)=1 STB IOCNT,I * C.OR1 LDA IOADR,I LDA 0,I GET DATA WORD SEZ ODD BYTE? ALF,ALF YES, POSITION LDB IOCNT,I CCE,SSB WEIRD STUFF? ISZ IOADR,I NO, ADVANCE BUFR IO1 OTA BUS ISSUE DATA C.OR8 JSB STATS GET STATUS RAL,RAL CHECK FOR QUICK RESPONSE SSA ?? JMP C.ORA YES, CONTINUE JMP L.RTN NO, AWAIT INTERRUPT * C.OR2 CLB,INB INDICATE MORE STB IOCNT,I TO COME CLB JMP C.OR4 DISABLE PACKING * C.OR3 CLB LAST BYTE! STB IOCNT,I SLA EOR REQUIRED? SSA,RSS W/LAST BYTE? JMP C.OR4 NO. LDB B50 YES, GIVE EOR XOR B1 CLEAR FUTURE REQ. C.OR4 ALF,ALF ALF STA EQT11,I AND BIT8 MAINTAIN ASCII LOGIC IOR 1 IOR REARM ARM SQR,ORA INTRPT JSB CNTLR NOTIFY CNTRLER JMP C.OR1 * C.OR5 SLA,RSS EOR REQUIRED? JMP C.OR6 NO, POSSIBLE CRLF IOR BIT15 YES, DO IT NOW LDB .0A STB IOADR,I JMP C.OR3 * C.OR6 ALF,ALF CRLF REQUIRED SSA,RSS AT COMPLETION? JMP DOIOX RAL,CLE,ERA YES, CLEAR FUTURE ALF,ALF REQUIREMENT IOR BIT12 ENABLE ASCII LOGIC LDB CRLFA STB IOADR,I READY CRLF BUFR ISZ IOLNG,I ISZ IOLNG,I KEEP CNT HONEST JMP C.OR2 & ISSUE NOW ?ZXTTZ* SKP * * INPUT CONTINUATOR SERVICE * C.IRL BLF,ELB GET EOR CHARACTERISTICS ELA & MERGE CUR EOR STATUS STA T1 A(15)=EOR, A(0)=W/BYTE REQ. SSA,RSS EOR? JMP C.IR1 NO, TAKE DATA SLA,RSS EXPECT W/BYTE? JMP C.IR3 NO, EOR ONLY * C.IR1 LDA IOADR,I STA T2 IO2 LIA BUS TAKE DATA BYTE BLF,BLF BIT 3, CRLF CHECK SLB,RSS JMP C.IR2 CPA B15 YES, IGNORE CR'S JMP CIR2A CPA B12 LF? JMP C.IR3 YES, END IT NOW * C.IR2 LDB IOCNT,I RETREIVE CNT SLB,RSS EVEN BYTE? ALF,ALF YES, POSITION SLB IOR T2,I NO, MERGE STA T2,I POST IN BUFR SLB,INB ODD BYTE? ISZ IOADR,I YES, ADVANCE BUFR STB IOCNT,I & CNT CHAR CPB IOLNG,I ALL DATA TAKEN? JMP C.IR3 YES, DONE CIR2A LDB T1 CCE,SSB EOR? JMP C.IR3 YES, END IT ALL * C.IR4 JSB STATS GET STATUS, CLEAR MAIN FLAG RAL,RAL SLA,RSS CHECK QUICK RESPONSE? JMP L.RTN NOT YET, AWAIT INTERRUPT LDB EQT11,I HAVE IT, CONTINUE... JMP C.IRL * C.IR3 CCE CLEAR PENDING IRL JSB STATS INTERRUPT CLA ADJUST FOR VALID STA IOLNG,I XMIS. LOG LDB IOCNT,I ODD CNT? SLB,RSS NO, DONE JMP DOIOX LDB EQT11,I RBR,RBR SLB,RSS DATA TYPE? CLB,RSS BINARY, 0 FILL LDB B40 ASCII, BLANK FILL STB T2 LDB IOADR,I LDA 1,I AND HI8 IOR T2 STA 1,I JMP DOIOX * SKP * * ERRORS * LOSE1 CLA,INA,RSS *I/O ERROR LOSE2 LDA B2 *I/O ABORTED BY IFC JMP LOSE * IFN ************IF SRQ SERVICE********** LOSE3 LDA B3 * I/O ABORTED BY SRQ * JMP LOSE * t * LOSE4 LDA B4 * NO ALARM PROGRAM FOUND WITH NAME * JMP LOSE *SPECIFIED WHEN CTL REQ 20 WAS MADE* LOSE5 LDA B5 *ON SRQ INTERRUPT, DRIVER COULD NOT* JSB EQSTS *SCHEDULE ALARM PROGRAM SPECIFIED * JMP DOWN *IN DEVICE BEQT * LOSE7 LDA B7 *NO STATUS RETURNED BY DEVICE IN * JSB EQSTS *RESPONSE TO A SERIAL POLL PRIOR TO* JMP DOWN *TIMEOUT OCCURRING * XIF ************************************ * LOSE6 LDA EQT13,I *EQTX FULL IOR BIT15 STA EQT13,I INDICATE INITIATOR LDA B6 LOSE STA STSWD,I POST ERR STATUS LDA BIT15 STA XLOG,I GIVE ERR JMP L.XIT & QUIT * DOWN CCA *CRITICAL ERROR! STA CHAN LDB EQT13,I & DOWN BUS NOW SSB,RSS VIA CLA,INA,RSS CONTINUATOR LDA B3 INITIATOR JMP LXIT2 * * LOGICAL I/O CONTINUATOR EXITS * C.OFF LDA IDLE JSB CNTLR ARM SQR, SET DATA MODE IO8 CLC BUS,C & OFF 59310B CLA,CLE,RSS INDICATE CLOCK OFF L.RTN CLA,CCE INDICATE CLOCK ON STA T1 CLO INDICATE CONTINUATION ISZ C.37 JMP LXIT3 SKP * * LOGICAL I/O COMPLETION EXITS * L.XIT LDA STSWD,I POST EQT STATUS JSB EQSTS & LDA XLOG,I GIVE XMIS.LOG RAL,CLE,ERA LDB EQT8,I SSB WORDS REQUESTED? JMP LXIT1 NO, GIVE +CHARS INA YES, GIVE +WORDS ARS LXIT1 SEZ IOR BIT15 MAINTAIN ERR BIT STA XLOG,I SSA,RSS ANY ERRORS? JMP LXT1A NO LDA EQT6,I YES,LOAD EQT WORD 6 RAL,RAL ROTATE REQ TYPE TO LOWER BIT AND B3 AND MASK SZA REQ TYPE=0? JMP DOWN NO,BUFRD REQ,AL ERRORS FATAL! LDA BEQT1,I YES,UNBUFRD REQ,LOAD CNFG WORD ALF,ALF ROTATE E-BIT TOl LSB SLA,RSS E-BIT=0? JMP DOWN YES,ALL ERRORS FATAL! * LXT1A LDB EQT13,I SSB INITIATOR? LDA B4 YES, IMMED.COMPLETE. SSB,RSS LDA BIT15 NO, FREE DMA CHAN. LXIT2 STA T1 =RETURN CODE LDA IDLE JSB CNTLR ALLOW SQR, SET DATA MODE IO9 CLC BUS,C & KILL 59310B NOW CLA,CLE INDICATE CLOCK OFF STA EQT11,I CLEAR DVR CNTRL WORD STO INDICATE COMPLETION LXIT3 LDA EQT13,I SSA DETERMINE EXIT ROUTE LDB I.37 INITIATOR. SSA,RSS LDB C.37 CONTINUATOR STB T2 =RETURN ADDR LDA EQT13,I ELA,CLE,ERA CLEAR I/C INDICATOR STA EQT13,I LDA EQT4,I IOR BIT11 XOR BIT11 CLEAR TIME OUT FLAG STA EQT4,I SEZ,RSS CLOCK OFF? CLA,RSS YES, CLEAR IT LDA EQT14,I NO, RECOVER TIME VALUE * SKP * IFN **IF SRQ SERVICE***** SOC I/O COMPLETION? * JMP LXIT4 YES. * LDB EQT1,I * SZB I/O BUSY? * JMP LXIT5 YES. * LDB EQT11,I * SSB SRQ SERVICE BUSY? * JMP LXIT5 YES. * LXIT4 LDB EQT12,I * RBL,SLB SRQ PENDING? * CCA YES, HANDLE ON NXT INTRPT SSB PROG SCHEDULING DELAYED? LDA TIME YES, ACTIVATE TIME OUT XIF ********************* * LXIT5 STA EQT15,I IFN *******IF SRQ SERVICE********** LDA DTOUT *LOAD ADDRESS OF DUMMY TIMEOUT* SOC *IF COMPLETION EXIT * STA EQT15 *AVOID RTIOC CLOCK CLEAR * XIF ******************************* LDA T1 LDB XLOG,I ISZ CHAN CRITICAL ERR? IO4 STC BUS NZ NO, ENABLE INTERRUPT JMP T2,I & LEAVE GRACEFULLY SKP * DO I/O OPERATION * * (A)=+CHAR CNT, (B)=BUFR ADDR * JSB DOIO * DEF * (A)=+CHAR CNT XMITTED * DOIO NOP STA IOLNG,I POST CHAR LNG STB IOADR,I POST BUFR ADDR LDB EQT11,I SLB CHECK I/O DIRECTION? CLA,RSS INPUT, INIT UP CNT CMA,INA OUTPUT, INIT DOWN CNT STA IOCNT,I * DOIO0 LDA EQT11,I CONSTRUCT HP-IB CNTRL WORD: AND BIT8 ALLOW ASCII MODE LOGIC IOR DOIO,I MERGE CMND/DATA MODE LDB EQT11,I SLB,RBR I/O DIRECTION? JMP DOIO1 * IOR BIT11 OUTPUT, PACKING ON SLB,RSS DMA? IOR BIT13 NO, ARM ORA INTRPT JMP DOIO2 * DOIO1 SLB,RSS INPUT, DMA? IOR B50K NO, ARM IRL,EOR INTRPT SLB IOR B16K YES, ARM EOR,PACKING,DMA STA T1 SAVE CONTROL WORD LDA ENABL LOAD CONTROL WORD TO SET NRFD FALSE JSB CNTLR GO ISSUE IT LDA T1 LOAD HP-IB CONTROL WORD * DOIO2 IOR ENABL ENABLE FUNNY FUNCTIONS JSB CNTLR ISSUE CONTROL WORD FOR ATN FALSE,ETC... LDA DOIO INA POST RESUME ADDR STA ZOOM,I RBL,SLB INPUT REQUEST? IIO1 LIA BUS,C YES, SET RFD FLOP RBR,SLB,RBL DMA REQUEST? JMP DOIO3 CCE,SLB NO, DIRECTION? JMP C.IR4 INPUT, AWAIT INTERRUPT JMP C.ORA OUTPUT, START CONTINUATOR * DOIO3 LDA IOLNG,I INIT DMA I/O OP INA ARS DETERMINE I/O LNG CMA,INA,SZA,RSS 0 LNG? JMP DOIO5 YES, CRLF ONLY! STA T1 SLB,BLF OUTPUT? JMP DOIO6 NO, IGNORE WHAT FOLLOWS! LDA IOLNG,I ERA ALLOW FOR EOR ACTIVITY CCA,SEZ ODD BYTE? JMP DOIO4 YES, ALLOW FOR IT CLA SLB,RSS EOR REQUIRED"? JMP DOIO4 NO, NO ADJUSTMENT SSB EOR W/BYTE? LDA M2 YES, ALLOW FOR IT DOIO4 STA IOCNT,I POST ADJUSTMENT, IF ANY SZA ISZ T1 REDUCE DMA I/O LNG JMP DOIO6 DOIO5 LDA EQT11,I NOTHING LEFT, CLEAR XOR B2 DMA ACTIVE STATUS STA EQT11,I JMP DOIO0 & TRY AGAIN * DOIO6 JSB DMA? GET DMA CHAN JSB CFGIO CONFIGURE DMA I/O DEF DMAT1 INSTRUCTIONS LDA DIO1 AND B3 JSB CFGIO ALL OF THEM! DEF DMCT1 LDA CHAN GET HP-IB CHANNEL DIO1 OTA 6 & TELL DMA CIO1 CLC 2 LDB EQT11,I SLB INPUT REQ?? IIO2 STC BUS YES, $%&'&%$#$#&%$ ERB ESTABLISH I/O LDA IOADR,I DIRECTION RAL,ERA & CIO2 OTA 2 BUFR ADDR CIO3 STC 2 LDB T1 & CIO4 OTB 2 -WORD CNT CLF 0 INTERRUPTS OFF DIO2 STC 6,C START DMA CLA CPA DUMMY PRIVILEDGED INTRPTS? JMP L.RTN NO, AWAIT RESPONSE DIO3 CLC 6 YES, KILL DMA INTPRPT LDB INTBA LDA DIO1 & SLA INB LDA 1,I IOR BIT15 ALLOW RTE TO HANDLE STA 1,I STF 0 INTERRUPTS ON JMP L.RTN AWAIT DMA RESPONSE * DOIOX LDA IOLNG,I I/O OP COMPLETION HERE... ADA IOCNT,I (A)=XMIS LOG CONT. LDB ZOOM,I & JMP 1,I RESUME SKP * FIND DMA CHANNEL ASSIGNMENT * DMA? NOP DLD INTBA,I ELA,CLE,ERA FIND AVAILABLE CPA EQT1 DMA CHANNEL JMP DMA1 ELB,CLE,ERB CPB EQT1 JMP DMA2 CLA NONE! JMP DMA?,I DMA1 CLA,RSS DMA2 CLA,INA ADA B6 (A)=DMA CHAN JMP DMA?,I * * ISSUE HP-IB CONTROLLER CMND * CNTLR NOP IFN ** IF SRQ SERVICE ** STA DMA? * LDA EQT11,I  IF DMA RUNNING SSA,RSS OR BUSY WITH SRQ RAR,SLA THEN KILL SRQ CLA,RSS INTERRUPT LDA EQT12,I GET SRQ INTERRUPT * RAL,RAL ARMING FLAG & * AND BIT15 ISSUE WITH CONTROL * IOR DMA? WORD * XIF ******************** CNTL1 STF BUS CNTL2 OTA BUS JMP CNTLR,I * * TAKE HP-IB CONTROLLER STATUS * (E)=1 TO ALSO CLEAR MAIN FLAG * STATS NOP STAT1 STF BUS ENABLE CARD CONTROL MODE SEZ (E)=1 TO CLEAR MAIN FLAG ONLY STAT2 CLC BUS,C WITH NO CHANGE TO EOR FF, ETC STAT3 LIA BUS DISABLE CONTROL MODE JMP STATS,I * * REGAIN HP-IB CONTROL * MINE NOP LDA B5 JSB CNTLR SET ACTIVE CNTRLR IO3 CLC BUS,C CLEAR IFC STATUS JMP MINE,I * SKP * * POST EQT STATUS BYTE * EQSTS NOP AND B377 STA MINE (A)=STATUS BYTE LDA EQT5,I AND HI8 IOR MINE STA EQT5,I JMP EQSTS,I * * CONFIGURE I/O INSTRUCTIONS * * (A)=I/O CHAN * JSB CFGIO * DEF * P+2: RETURN * CFGIO NOP STA MINE (A)=CHAN LDB CFGIO,I GET TAB ADDR LDA 1,I STA EQSTS GET # ENTRIES CFG1 CCE,INB SET INDIRECT BIT RBL,ERB ON TAB ENT ADDR LDA 1,I AND HI10 CNFG INSTRUCTION IOR MINE STA 1,I ISZ EQSTS JMP CFG1 ISZ CFGIO JMP CFGIO,I * * GET #BEQT ENTRIES, 1ST BEQT ENTRY ADDR * SBEQT NOP LDA EQT12,I ALF,ALF AND B37 LDB EQT13,I ELB,CLE,ERB ADB FIXSZ JMP SBEQT,I * SKP * * CNFG I/O & SETUP BEQT * * (A)=I/O CHANNEL * (B)=0/1: DISABLE/ENABLE CLC,C * JSB SETUP * P+1: HP-IB CONTROL LOST * P+2: NORMAL RETURN * SETUP NOP STB T3 LDA EQT4,I INSURE WE HAVE AND B77 1 BUS CHANNEL STA CHAN JSB CFGIO CNFG I/O INSTRUCTIONS DEF IOTAB LDB FIXSZ CMB,INB STB T1 LDA EQT12,I INSURE AND B177 MINIMUM ADA 1 SIZE EQTX SSA JMP LOSE6 LOSE!! LDA EQT13,I LDB XEQTA SET1 STA 1,I POST FIXED INA EQTX ADDRS INB ISZ T1 JMP SET1 * LDA EQT12,I LOAD EQT WORD 12 AND MASK MASK # OF DEVICE ENTRIES SZA # OF DEVICE ENTRIES ZERO? JMP SET8 NO, SKIP AUTO ADDR BUFR INITIALIZATION DLD CMDBF YES,INITIALIZE AUTO ADDR CMND BUFR DST CMDBA,I FOR THIS HP-IB TO UNT,UNL,0,0 * SET8 LDA EQT4,I ASR 6 EXTRACT AND B37 SUB-CHANNEL STA UNIT SZA UNIT 0? JMP SET2 NO LDA EQT12,I YES,LOAD EQT WORD 12 AND BIT7 MASK FIRST DIRECT I/O REQUEST FLAG SZA FLAG=0? JMP SET NO,BEEN THRU BEFORE LDA EQT12,I YES,LOAD EQT WORD 12 IOR BIT7 MERGE BIT 7 STA EQT12,I AND STORE LDB EQT4,I LOAD EQT WORD 4 LDA DFCFG LOAD DEFAULT BUS CNFG WORD SSB DMA BIT 15=0? IOR BIT13 NO,SET DMA BIT IN DEFAULT WORD STA BCNFG,I SAVE DEFAULT BUS CNFG WORD SET LDA BCNFG LOAD BUS CNFG WORD ADDR STA BEQT1 AND SAVE LDB .0A NO ALARM PROGRAM JMP SET7 * SET2 JSB SBEQT GET #BEQT ENTS & ADDR STA T2 CMA STA T1 CLA STA BEQT1 JMP SET4 * SET3 LDA 1,I SZA,RSS BEQT ENTRY EMPTY? STB BEQT1 YES, REMEMBER IT AND B37 GET DEVICE ADDR CPA UNIT OF INTEREST? JMP SET6 YES, GOT IT ADB B5 SET4 ISZ T1 NO, TRY NEXT JMP SET3 * LDA BEQT1 NOT FOUND SZA EMPTY ENTRY? JMP SET5 STB BEQT1 NO, NLEED TO MAKE ONE ADB B4 LDA EQT12,I INSURE ROOM EXISTS AND B177 ADA EQT13,I CMA,INA ADA 1 SSA,RSS ?? JMP LOSE6 NO, FULL! LDA T2 CPA B37 31 ENTRIES YET? JMP LOSE6 YES, FULL! LDA EQT12,I ALF,ALF INA OK, CNT ENTRY ALF,ALF STA EQT12,I * SET5 LDB BEQT1 LOAD ADDRESS OF IST BEQT WORD LDA UNIT LOAD DEVICE ADDRESS IOR DFCFG MERGE DEFAULT DEVICE CONFIG WORD STA 1,I AND STORE IN 1ST BEQT WORD INB INCREMENT TO 2ND BEQT WORD STB T1 AND SAVE ADB B2 INCREMENT TO 4TH BEQT WORD STB T2 AND STORE CLA CLB DST T1,I CLEAR BEQT WORDS 2 AND 3 DST T2,I CLEAR BEQT WORDS 4 AND 5 LDB T1 LOAD ADDRESS OF BEQT WORD 2 JMP SET7 * SET6 STB BEQT1 SAVE ADDRESS OF 1ST WORD IN BEQT INB INCREMENT TO ADDRESS OF 2ND WORD IN BEQT * SET7 STB BEQT2 STORE ADDRESS OF 2ND WORD IN BEQT LDB T3 ERB (E)=1 FOR CLC,C JSB STATS TAKE STATUS, CLEAR FLAG STA T1 AND B17 CPA B11 IFC DETECTED? JMP SETUP,I YES, LEAVE P+1 LDA T1 AND B20 CPA B20 ACTIVE CONTROLLER? ISZ SETUP YES, EXIT P+2 JMP SETUP,I SKP * * EQT EXTENSION FIXED AREA ASSIGNMENTS * FIXSZ DEF FIXND-*-2 EQTX MIN.SIZE REQ. XEQTA DEF *+1 *BEGIN FIXED EQTX AREA IOLNG BSS 1 CUR I/O CHAR LNG IOADR BSS 1 CUR I/O BUFR ADDR IOCNT BSS 1 CUR I/O CHAR CNT XLOG BSS 1 PENDING XMISSION LOG STSWD BSS 1 PENDING EQT STATUS BYTE BEQTA BSS 1 SRQ, PENDING BEQT ADDR BQCNT BSS 1 SRQ, PENDING BEQT CNT ZOOM BSS 1 I/O RESUME ADDR BCNFG BSS 1 BUS CONFG WORD DTOUT BSS 1 DUMMY TIMEOUT CMDBA BSS 2 AUTO ADDRESSING COMMAND BUFFہER FIXND EQU * *END FIXED EQTX AREA * * EQT EXTENSION VARIABLE AREA ENTRY * ONE ASSIGNMENT PER UNIQUE SUBCHANNEL * BEQT1 BSS 1 DEVICE CNFG WORD BEQT2 BSS 1 SRQ ALARM PROG * * STORAGE, ETC * BUS EQU 20B NOMINAL HP-IB CHANN TIME DEC -100 SCHEDULE RETRY @ 10MSEC UNIT BSS 1 CHAN BSS 1 T1 BSS 1 T2 BSS 3 T3 BSS 1 CFGWA DEF *+1 BSS 1 ZBIT BSS 1 Z-BIT IN LSB PARM2 BSS 1 ALARM DEVICE ADDRESS PARM3 BSS 1 ALARM DEVICE EQT ADDRESS * .0A DEF .0 A#SPD DEF #SPD. A#DCL DEF #DCL. CRLFA DEF CRLF * .0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B10 OCT 10 B11 OCT 11 B12 OCT 12 B14 OCT 14 B15 OCT 15 B16 OCT 16 B17 OCT 17 B20 OCT 20 B21 OCT 21 B25 OCT 25 B27 OCT 27 B30 OCT 30 B37 OCT 37 B40 OCT 40 B50 OCT 50 B70 OCT 70 B77 OCT 77 B100 OCT 100 B137 OCT 137 B177 OCT 177 B377 OCT 377 B2103 OCT 2103 B6K OCT 6000 B14K OCT 14000 B16K OCT 16000 DFCFG OCT 17000 B50K OCT 50000 MASK OCT 17400 ENABL OCT 207 IDLE OCT 247 REACT OCT 24200 REARM OCT 20200 * BIT7 OCT 200 BIT8 OCT 400 BIT11 OCT 4000 BIT12 OCT 10000 BIT13 OCT 20000 BIT14 OCT 40000 BIT15 OCT 100000 HI8 OCT 177400 HI10 OCT 177700 HI11 OCT 177740 CRLF OCT 6412 FORMA DEF B6K M1 DEC -1 M2 DEC -2 M4 DEC -4 * * #LSN EQU B40 LISTEN ADDR #TLK EQU B100 TALK ADDR #SDC EQU B4 SELECTED DEVICE CLEAR #SPE. EQU B14K SERIAL POLL ENABLE #SPD. OCT 14537 SERIAL POLL DISABLE,UNTALK #DCL. OCT 12000 UNIVERSAL DEVICE CLEAR CMDBF OCT 57477,0 UNTALK,UNLISTEN,XXXX,XXXX * SKP IOTAB ABS *+1-IOTAE DEF IO1 DEF IO2 DEF IO3 DEF IO4 DEF IO5 DEF IO6 DEF IO7 DEF IO8 DEF IO9 DEF IIO1 DEF IIO2 DEF CNTL1 DEF CNTL2 DEF ST<:6AT1 DEF STAT2 DEF STAT3 IOTAE EQU * * DMAT1 ABS *+1-DMT1E DEF DIO1 DEF DIO2 DEF DIO3 DMT1E EQU * * DMCT1 ABS *+1-DMC1E DEF CIO1 DEF CIO2 DEF CIO3 DEF CIO4 DMC1E EQU * * DMAT2 ABS *+1-DMT2E DEF DIO10 DEF DIO11 DEF DIO12 DMT2E EQU * * * SIZE EQU * DRIVER SIZE CHECK END k<  59310-18006 1710 S 0122 HPIB UTLTY (DVR 37)              H0101 "IASMB,R,L,C HED HPIB, RTE BUS UTILITY NAM HPIB,7 59310-16004 REV. 1710, 770224 * ENT HPIB,SRQ,CMDR,CMDW ENT SRQSN,IBERR,IBSTS EXT .ENTR,EXEC,SRQ.T,IPUT * *************************************************** * (C) COPYRIGHT HEWLETT-PACKARD CO., 1975 * * ALL RIGHTS RESERVED * *************************************************** * * HPIB - RTE BUS UTILITY * * RELOC: 59310-16004 * SOURCE: 59310-18006 * *************************************************** * R.FAJARDO, 751017 * EQTA EQU 1650B DRT EQU 1652B LUMAX EQU 1653B * * HPIB CONTROL REQUESTS * * CALL HPIB(LU,IFUN,IPARM) * HPIB NOP JSB SET RECOVER VALID PARMS LDA CPAR2,I HPIB1 ASL 6 IOR LU FORM CNTRL WORD STA T1 JSB EXEC DO CONTROL REQ. DEF *+4 DEF .3 REQ.CODE DEF T1 CNTRL WORD DEF CPAR3,I OPTIONAL PARM JMP RTN * SKP * * GENERAL HPIB I/O REQUESTS * * CALL CMDW/CMDR(LU,ICMND,IDATA) * CMDR NOP HERE FOR READ REQ. JSB SET GET PARMS, ETC. JMP CMDS * CMDW NOP HERE FOR WRITE REQ. JSB SET CCB,CCE,RSS * CMDS CLB,CLE STB T5 LDA T2 ALF,RAL INSURE WE HAVE UNIT=0 AND B37 SZA JMP LOSE NO, LOSE! SEZ,INA INA FORM I/O REQ.CODE STA T1 LDA LU IOR BIT12 ADD Z-BIT FOR STA T2 2 BUFR REQUEST LDA CPAR3,I GET DATA BUFR LNG AND B377 CMA,INA MAKE IT -CHARS STA T3 & LDA CPAR3 STA T6 ISZ CPAR3 ADJUST BUFR ADDR LDA CPAR2,I AND B377 GET CMND BUFR LNG CMA,INA MAKE -CHARS STA T4 & ISZ CPAR2 ADJUST BUFR ADDR JSB EXEC DEF *+7 DO I/O DEF T1 I/O REQ.CODE DEF T2 CNTRL WORD DEF CPAR3,I DATA BUFR DEF T3 DATA LNG DEF CPAR2,I CMND BUFR DEF T4 CMND LNG ISZ T5 INPUT REQUEST? STB T6,I YES, POST CNT JMP RTN * SKP * * BASIC'S SRQ/TRAP SERVICE * * CALL SRQSN(LU,TRAP#) -SET TRAP @LU * SRQSN NOP JSB SET GET PARMS & VALIDATE ADB .3 INDEX TO EQT WORD4 STB T3 LDA 1,I & AND B77 EXTRACT CHANNEL STA 1 * LDA T2 =DRT ENTRY ALF,RAL AND B37 EXTRACT SUB-CHANNEL SZA,RSS SUB-CHAN=0? JMP LOSE YES, NOT AVAIL TO DIRECT I/O ALF,ALF POSITION TO HI BITS IOR 1 & MERGE WITH CHANNEL STA T1 * LDA CPAR2,I VALIDATE PARM2: CMA,SSA,INA TRAP #'S 1-16 SZA,RSS ARE LEGAL JMP LOSE ADA .16 SSA JMP LOSE OTHERS LOSE * CCB ADB SRQ.T INDEX TO ADB CPAR2,I INDICATED STB T2 TRAP # JSB IPUT POST SUB-CHAN/CHAN DEF *+3 DEF T2 DEF T1 LDA SRQ.P STA CPAR3 =SRQ PROG NAME ADDR LDB T3 JMP SRQ1 * SKP * * SRQ SERVICE-SCHEDULE PROG * * CALL SRQ(LU,16,"PROG") * SRQ NOP JSB SET RECOVER PARMS LDA CPAR2,I CPA B20 RSS JMP HPIB1 ADB .3 SRQ1 LDA 1,I CHECK EQT4 FOR AND BIT14 BUFFERING BIT=1 SZA,RSS ?? JMP SRQ2 XOR 1,I YES, FORCE NON-BUFFERED STB T3 REQUEST FOR THIS CALL STA T4 JSB IPUT POST @ EQT4 DEF *+3 DEF T3 DEF T4 CCA FLAG IT FOR RESET LATER SRQ2 STA T2 LDA B2000 BUILD CNTRL WORD IOR LU =2000B+LU STA T1 ISZ CPAR3 &MOVE BUFR BEYOND JSB EXEC CALL DRIVER NOW DEF *+4 DEF RQ3 REQ.CODE-NO ABORT DEF T1 CNTRL WORD DEF CPAR3 PROG NAME ADDR CCB IN CASE OF ERR ISZ T2 EQT MODIFIED? JMP RTN NO, LEAVE STA T1 YES, SAVE REGS STB T2 FOR USER LDA T3,I IOR BIT14 RESTORE BUFFERING STA T4 INDICATOR JSB IPUT DEF *+3 DEF T3 DEF T4 LDB T2 SSB,RSS ERRS? JMP RTN1 NO, EXIT JMP LOSE YES, ABORT * SKP * * ERROR STATUS FUNCTION * * I=IBERR(LU) * IBERR NOP JSB SET GET PARMS & VALIDATE ADB .12 LDA 1,I FIND EQTX AREA ELA,CLE,ERA ADA .3 RETRIEVE XLOG WORD LDB 0,I SSB ERRS INDICATED? JMP IBER1 CLA NO,(A)=0 JMP RTN * IBER1 LDA T1 RECOVER ERR CODE AND B377 SZA,RSS DMA TROUBLES? INA YES, I/O ERR JMP RTN (A)=ERR CODE * * STATUS RECOVERY: I=IBSTS(LU) * IBSTS NOP JSB SET GET LU & VALIDATE LDA T1 AND B377 (A)=STATUS BYTE * RTN STA T1 RTN1 LDA .0A CLEAR OPT. PARMS STA CPAR2 STA CPAR3 LDA T1 JMP XIT,I & LEAVE * SKP * GET PARMS & VALIDATE * SET NOP LDA SET RECOVER RETURN ADDR ADA M2 & LDA 0,I GET PARM LIST ADDR STA XIT JMP SET1 * CPAR1 DEF * CPAR2 DEF * CPAR3 DEF .0 (OPTIONAL) * XIT NOP SET1 JSB .ENTR GET PARMS DEF CPAR1 LDA CPAR1,I AND B77 EXTRACT LU STA LU CMA,INA INSURE VALID LU ADA LUMAX SSA JMP LOSE WRONG! LDA DRT ADA LU INDEX TO ADA M1 APPROPRIATE LDA 0,I DRT ENTRY SZA,RSS JMP RTN (IGNORE BIT dBUCKET) STA T2 & AND B77 EXTRACT EQT # ADA M1 MPY .15 FIND EQT ADDR ADA EQTA LDB 0 ADA .4 GET EQT WORD 5 LDA 0,I & STA T1 CHECK DEVICE TYPE ALF,ALF AND B77 CPA B37 HPIB? JMP SET,I OK, LEAVE, (B)=EQT ADDR * LOSE LDA .0A STA CPAR2 CLEAR OPT.PARMS STA CPAR3 JSB EXEC DEF *+5 DEF .2 DEF .1 "ILL RQ-HPIB" DEF MSGA DEF .12 JSB EXEC & QUIT! DEF *+2 DEF .6 * * * STORAGE, ETC... * SUP .0 DEC 0 .1 DEC 1 .2 DEC 2 .3 DEC 3 .4 DEC 4 .6 DEC 6 .12 DEC 12 .15 DEC 15 .16 DEC 16 M1 DEC -1 M2 DEC -2 M16 DEC -16 B20 OCT 20 B37 OCT 37 B77 OCT 77 B377 OCT 377 B2000 OCT 2000 BIT12 OCT 10000 BIT14 OCT 40000 RQ3 OCT 100003 * .0A DEF .0 * LU BSS 1 T1 EQU HPIB T2 EQU CMDR T3 EQU CMDW T4 EQU IBERR T5 EQU IBSTS T6 EQU SET * SRQ.P DEF * ASC 3,SRQ.P * MSGA ASC 12,ILL RQ-HPIB PROG ABORTED * SIZE EQU * END wn  59310-18007 1805 S 0122 HP-IB SRQ/TRAP PROGRAM FOR BASIC             H0101 RAASMB,R,L,C HED SRQ.P-SPECIAL SRQ/TRAP SERVICE PROGRAM FOR BASIC NAM SRQ.P,17,30 59310-16005 REV 1805 780110 * EXT EXEC,RMPAR,SRQ.T,TRPNT * **************************************************** * * SRQ.P-SPECIAL SRQ/TRAP SERVICE PROGRAM * * THIS PROGRAM WHEN ACTIVATED BY DVR37 WILL * SEARCH THE SRQ/TRAP TABLE MAINTAINED WITHIN * THE DRIVER & INVOKE ANY TRAPS ARMED BY THE * BASIC USER. NOTE THIS ROUTINE IS USED IN * CONJUNCTION WITH THE SRQSN CALL IN BASIC. * * RELOC: 59310-16005 * SOURCE: 59310-18007 * **************************************************** * S JSB RMPAR RECOVER SCHEDULE PARMS DEF *+2 DEF T1 LDA T3 GET EQT ADDR ADA .3 & INDEX TO WORD4 LDA 0,I EXTRACT CHANNEL AND B77 LDB T2 GET SUB-CHANNEL BLF,BLF POSITION TO HI BITS IOR 1 STA T1 * LDA SRQ.T SET TO STA T2 SCAN LDA M16 SRQ/TRAP STA T3 TABLE S1 LDA T2,I & DO IT CPA T1 MATCH? JMP S3 YES, INVOKE TRAP S2 ISZ T2 ISZ T3 END TABLE? JMP S1 NO, CONTINUE JSB EXEC YES, QUIT DEF *+2 *NO RETURN* DEF .6 * S3 LDA T3 ENTRY FOUND, ADA .17 (A)=TRAP # JSB TRPNT GO TRAP NOP JMP S2 * * STORAGE * T1 BSS 1 T2 BSS 1 T3 BSS 1 BSS 2 .3 DEC 3 .6 DEC 6 .17 DEC 17 M16 DEC -16 B77 OCT 77 * END S H  59310-18011 1805 S 0122 &MESS RTE HP-IB MESSAGE LIB             H0101 ASMB,R,L,C HED MESS, RTE HP-IB MESSAGE SUBROUTINE LIBRARY NAM MESS,7 59310-16011 REV 1805 780105 * * ENT TRIGR,CLEAR,RMOTE,GTL,LLO,LOCL ENT STATS,PPOLL,PSTAT,CNFG,ABRT * EXT .ENTR,EXEC,IPUT * *************************************************** * (C) COPYRIGHT HEWLETT-PACKARD CO., 1978 * * ALL RIGHTS RESERVED * *************************************************** * * * MESS - RTE HP-IB MESSAGE UTILITY LIBRARY * * * * RELOC: 59310-16011 * * SOURCE: 59310-18011 * * * *************************************************** * EQTA EQU 1650B DRT EQU 1652B LUMAX EQU 1653B * ************************************************** * * * HP-IB MESSAGE SUBROUTINES * * * * TRIGR,CLEAR,RMOTE,GTL,LLO,LOCL,STATS, * * PPOLL,PSTAT,CNFG,ABRT * * * ************************************************** * * ****************************************************************** * * * * TRIGGER * CALL TRIGR(LU) * * * * * * WHERE: LU=AUTO ADDRESSING OR DIRECT * * * I/O LU IN RANGE OF 1-63 * * * * ****************************************************************** TRIGR NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA,RSS ; SUBCHANNEL=0? JMP TRIG1 YES(DIRECT I/O MODE) * * * TRIGR - AUTO ADDRESSING MODE * * JSB CNTL NO, FORM AUTO ADDR CTL WORD * LDA UNLSN LOAD UNL,LSN COMMANDS IOR T3 MERGE SUBCHANNEL STA CBUFR SAVE IN FIRST WORD OF CMND BUFR LDA GET LOAD GET COMMAND STA CBUFR+1 SAVE IN SECOND WORD OF CMND BUFR * LDA M3 LOAD AUTO ADDR CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT AUTO ADDR TRIGR CMNDS JMP RTN1 EXIT * * * TRIGR - DIRECT I/O MODE * * TRIG1 JSB CNTL FORM DIRECT I/O CTL WORD * LDA GET LOAD GET COMMAND STA CBUFR SAVE IN COMMAND BUFR * LDA M1 LOAD DIRECT I/O CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT DIRECT I/O TRIGR CMNDS JMP RTN1 EXIT * SKP ****************************************************************** * * * * CLEAR * CALL CLEAR(LU,I) * * * * * * WHERE: LU=AUTO ADDRESSING OR DIRECT * * * I/O LU IN RANGE 1-63 * * * * * * I=FUNCTION CODE * * * I=1 FOR SELECTED DEVICE CLEAR * * * I=2 FOR UNIVERSAL DEVICE CLEAR * * * (DIRECT I/O ONLY) * * * * ****************************************************************** CLEAR NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL $o * LDB CPAR2,I LOAD I PARAMETER CPB .1 I=1? JMP CLR1 YES CPB .2 NO,I=2? JMP CLR2 YES JMP LOSE INVALID I PARAMETER,EXIT WITH ERROR * CLR1 SZA,RSS I=1,SUBCHANNEL=0? JMP CLR3 YES(DIRECT I/O MODE) JMP CLR4 NO(AUTO ADDR MODE) * CLR2 SZA I=2,SUBCHANNEL=0? JMP LOSE NO,INVALID LU,EXIT WITH ERROR * * * CLEAR - DIRECT I/O MODE * * CLR3 JSB CNTL FORM DIRECT I/O CTL WORD * CPB .1 I=1? JMP *+3 YES LDA DCL NO,I=2,LOAD UNIV DEV CLEAR CMND JMP *+2 LDA SDC LOAD SELECTED DEVICE CLEAR CMND STA CBUFR SAVE IN DIRECT I/O CMND BUFR * LDA M1 LOAD DIRECT I/O CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT DIRECT I/O CLEAR CMND JMP RTN1 * * * CLEAR - AUTO ADDRESSING MODE * * CLR4 JSB CNTL FORM ATO ADDR CTL WORD * LDA T3 LOAD SUBCHANNEL IOR UNLSN MERGE UNL,LSN CMNDS WITH SUBCHANNEL STA CBUFR SAVE IN FIRST WORD OF AUTO ADDR CMND BUFR * LDA SDC LOAD SELECTED DEVICE CLEAR CMND AND STA CBUFR+1 SAVE IN SECOND WORD OF AUTO ADDR CMND BUFR * LDA M3 LOAD AUTO ADDR CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT AUTO ADDR CLEAR CMNDS JMP RTN1 EXIT * SKP ****************************************************************** * * * * REMOTE * CALL RMOTE(LU) * * * * * * WHERE: LU=AUTO ADDRESSING OR DIRECT * * * I/O LU IN RANGE 1-63  * * * * ****************************************************************** RMOTE NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * LDA CTL16 LOAD REN CONTROL REQUEST CODE IOR LU MERGE LU STA CTLWD AND SAVE IN CONTROL WORD * JSB CTLR1 MAKE REN ENABLE CONTROL REQUEST * JSB SUBCH GET SUBCHANNEL * SZA,RSS SUBCHANNEL=0? JMP RTN1 YES,EXIT(DIRECT I/O MODE) * * * RMOTE - AUTO ADDRESSING MODE * * JSB CNTL NO,FORM AUTO ADDR CTL WORD * LDA UNLSN LOAD UNL,LSN COMMANDS IOR T3 MERGE SUBCHANNEL AND STA CBUFR SAVE IN AUTO ADDR COMMAND BUFR * LDA M2 LOAD AUTO ADDR CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT AUTO ADDR REMOT CMNDS JMP RTN1 EXIT * SKP ****************************************************************** * * * * GO TO LOCAL * CALL GTL(LU) * * * * * * WHERE: LU=AUTO ADDRESSING OR DIRECT * * * I/O LU IN RANGE OF 1-63 * * * * ****************************************************************** GTL NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA,RSS SUBCHANNEL=0? JMP GTL1 YES(DIRECT I/O MODE) * * * GTL - AUTO ADDRESSING MODE * * JSB CNTL NO,FORM AUTO ADDR CTL WORD * LDA UNLSN LOAD UNL,LSN COMMANDS \ IOR T3 MERGE SUBCHANNEL STA CBUFR SAVE IN FIRST OF AUTO ADDR CMND BUFR LDA GOLOC LOAD GTL COMMAND AND STA CBUFR+1 STORE IN SECOND WORD OF AUTO ADDR CMND BUFR * LDA M3 LOAD AUTO ADDR CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT AUTO ADDR GTL CMNDS JMP RTN1 EXIT * * * GTL - DIRECT I/O MODE * * GTL1 JSB CNTL FORM DIRECT I/O CTL WORD * LDA GOLOC LOAD GTL COMMAND STA CBUFR AND SAVE IN DIRECT I/O CMND BUFR * LDA M1 LOAD DIRECT I/O CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT DIRECT I/O GTL COMMANDS JMP RTN1 EXIT * SKP ****************************************************************** * * * * LOCAL LOCK OUT * CALL LLO(BLU) * * * * * * WHERE: BLU=DIRECT I/O LU IN RANGE * * * * ****************************************************************** LLO NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA SUBCHANNEL=0? JMP LOSE NO,INVALID LU,EXIT WITH ERROR * JSB CNTL YES,FORM DIRECT I/O CTL WORD * LDA LLOCK LOAD LLO COMMAND AND STA CBUFR AND SAVE IN DIRECT I/O CMND BUFR * LDA M1 LOAD COMMAND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT DIRECT I/O LLO CMNDS JMP RTN1 EXIT * SKP ****************************************************************** * *  * * LOCAL * CALL LOCL(BLU) * * * WHERE: BLU=DIRECT I/O LU IN RANGE * * * OF 1-63 * * * * ****************************************************************** LOCL NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SBCHANNEL * SZA SUBCHANNEL=0? JMP LOSE NO,INVALID LU,EXIT WITH ERROR * LDA CTL17 YES(DIRECT I/O),LOAD CONTROL REQUEST CODE IOR LU MERGE LU STA CTLWD AND SAVE IN DIRECT I/O CONTROL WORD * JSB CTLR1 MAKE LOCAL ENABLE CONTROL REQUEST JMP RTN1 EXIT * SKP ****************************************************************** * * * * DYNAMIC STATUS * CALL STATS(LU,I) * * * * * * WHERE: LU=AUTO ADDRESSING OR DIRECT * * * I/O LU IN RANGE OF 1-63 * * * I=DEVICE/BUS STATUS RETURNED * * * IN LOWER BYTE * * * * ****************************************************************** STATS NOP JSB SET RETRIEVE VALID PARAMETERS * LDA CTL6 LOAD CONTROL REQUEST CODE IOR LU MERGE LU STA CTLWD AND SAVE IN CONTROL WORD * STAT ADB .3 INCREMENT EQT ADDRESS TO WORD 4 LDA 1,I LOAD EQT WORD 4 AND BIT14 ISOLATE BUFFERING BIT 14 SZA,RSS BIT 14=0? JMP STAT1 YES(UNBUFFERED),GO MAKE STATUS REQUEST * oXOR 1,I NO(BUFFERED),FORCE UNBUFFERED,SET BIT14=0 STB T3 SAVE EQT WORD 4 ADDRESS STA T4 SAVE NEW UNBUFFERED EQT WORD 4 * JSB BUFCG STORE UNBUFFERED EQT WORD 4 * CCA SET FLAG TO RESET BIT 14 LATER STA T2 AND SAVE * STAT1 JSB CTLR1 MAKE STATUS CONROL REQUEST * * (A)=STATUS WORD * AND B377 MASK LOWER STATUS BYTE STA CPAR2,I STORE STATUS BYTE IN USER BUFFER * ISZ T2 EQT MODIFIED? JMP RTN1 NO,EXIT LDA T3,I YES,LOAD EQT WORD 4 IOR BIT14 RESET BUFFER BIT 14 STA T4 AND SAVE * JSB BUFCG RESTORE BUFFERING IN EQT WORD 4 JMP RTN1 EXIT * SKP ********************************************************************** * * * * PPOLL * CALL PPOLL(LU,I,ASGN) * * * * * * WHERE: LU=AUTO ADDRESSING OR DIRECT * * * I/O LU IN RANGE OF 1-63 * * * * * * I=FUNCTION CODE * * * I=1,PARALLEL POLL ENABLE(PPE) * * * I=2,PARALLEL POLL DISABLE(PPD) * * * I=3,PARALLEL POLL UNCONFIGURE(PPU) * * * (DIRECT I/O ONLY) * * * * * * ASGN=POSITIVE OR NEGATIVE INTEGER * * * IN THE RANGE OF 1-8 REPRESENTING * * * HPIB DIO LINE ON WHICH TO RESPOND * * * TO A PARALLEL POLL.# * * * * * * POSITIVE INTEGER INDICATES A * * * ZERO RESPONSE AND A NEGATIVE * * * INTEGER INDICATES A ONE RESPONSE * * * TO A PARALLEL POLL. * * * * ********************************************************************** PPOLL NOP JSB SET RETRIEVE VALID PARAMETERS * LDA CPAR2,I LOAD FUNCTION CPA .1 I=1? JMP PPOL1 YES(PPE) CPA .2 NO,I=2? JMP PPOL2 YES(PPD) CPA .3 NO,I=3? JMP PPOL4 YES(PPU) JMP LOSE NO,INVALID FUNCTION,EXIT WITH ERROR * PPOL1 LDA CPAR3,I I=1,LOAD ASSIGNMENT PARAMETER SZA,RSS ASSIGNMENT=0? JMP LOSE YES,INVALID ASSIGNMENT,EXIT WITH ERROR * SSA,RSS NO,IS ASSIGNMENT NEGATIVE? JMP *+2 NO,ASSIGNMENT IS POSITIVE * CMA,INA YES,CONVERT TO POSITIVE NUMBER * ADA M9 SUBTRACT NINE FROM ASSIGNMENT SSA,RSS 1<=ASGN<=8 ?? JMP LOSE NO,INVALID ASSIGNMENT,EXIT WITH ERROR * ADA .8 ADD EIGHT TO ASSIGNMENT IOR PPCE MERGE DATA LINE AND PPC,PPE CMNDS * LDB CPAR3,I LOAD ASSIGNMENT AGAIN SSB IS ASSIGNMENT POSITIVE? IOR .8 NO,SET BIT 3 IN COMMAND WORD STA CBUFR YES,SAVE FIRST COMMAND WORD JMP *+3 * PPOL2 LDA PPCD LOAD PPC,PPD COMMANDS STA CBUFR AND SAVE IN COMMAND WORD * JSB IOSTA GET I/O STATUS REQUEST * JSB SUBCH GET SUBCHANNEL * SZA,RSS SUBCHANNEL=0? JMP PPOL3 YES(DIRECT I/O MODE) * * * PPOLL - AUTO ADDRESSING MODE (PPE,PPD) * * JSB CNTL NO,FORM AUTO ADDR CTL WORD * LDA CBUFR LOAD SECOND COMMAND WORD STA CBUFR+1 AND STORE IN SECOND WORD OF CMND BUFR * LDA UNLSN LOAD UNL,LSN COMMANDS IOR T3 MERGE SUBCHANNEL STA CBUFR AND SAVE IN FIRST WORD OF CMND BUFR * LDA M4 LOAD COMMAND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT AUTO ADDR PPOLL CMNDS JMP RTN1 EXIT * * * PPOLL - DIRECT I/O MODE (PPE,PPD) * * PPOL3 JSB CNTL FORM DIRECT I/O CTL WORD * LDA M2 LOAD DIRECT I/O CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT GO OUTPUT DIRECT I/O PPOLL CMNDS JMP RTN1 * * * PPOLL - UNCONFIGURE (DIRECT I/O ONLY) * * PPOL4 JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA SUBCHANNEL=0? JMP LOSE NO,INVALID LU,EXIT WITH ERROR * JSB CNTL YES,FORM DIRECT I/O CTL WORD * LDA PPU LOAD PPU COMMAND STA CBUFR AND SAVE IN DIRECT I/O CMND BUFR * LDA M1 LOAD DIRECT I/O CMND BUFR LENGTH STA CLGTH AND SAVE * JSB OUTPT OUTPUT DIRECT I/O PPOLL COMMANDS JMP RTN1 EXIT * SKP ********************************************************************** * * * * PARALLEL POLL STATUS * CALL PSTAT(BLU,I) * * * * * * WHERE: BLU=DIRECT I/O LU IN RANGE * * * OF 1-63 * * * & * * * I=INTEGER VARIABLE IN WHICH * * * STATUS OF BUS DATA LINES * * * DIO1-DIO8 WILL BE RETURNED * * * IN THE LOWER BYTE. * * * BIT0=DIO1,BIT1=DIO2,ETC. * * * * ********************************************************************** PSTAT NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA SUBCHANNEL=0? JMP LOSE NO,INVALID LU,EXIT WITH ERROR * LDA B3000 YES,LOAD PARALLEL POLL REQUEST CODE IOR LU MERGE LU STA CTLWD AND SAVE IN DIRECT I/O CONTROL WORD * JMP STAT INITIATE PARALLEL POLL STATUS REQUEST * SKP ******************************************************************* * * * * CONFIGURE * CALL CNFG(LU,I,IW) * * * * * * WHERE: LU=AUTO ADDRESSING OR DIRECT * * * I/O LU IN RANGE OF 1-63 * * * * * * I=FUNCTION CODE * * * I=1,CONFIGURATION REQUEST * * * I=2,UNCONFIGURE REQUEST * * * * * * IW=DEVICE/BUS CONFIGURATION WORD * * * * ******************************************************************* CNFG NOP JSB SET RETRIE4VE VALID PARAMETERS * LDA CPAR2,I LOAD FUNCTION CPA .1 I=1? JMP CNFG1 YES(CONFIGURE REQUEST) CPA .2 NO,I=2? JMP CNFG2 YES(UNCONFIGURE REQUEST) JMP LOSE NO,INVALID FUNCTION,EXIT WITH ERROR * CNFG1 LDA CTL25 LOAD CONFIGURE REQUEST CODE IOR LU MERGE LU STA CTLWD AND SAVE IN CONTROL WORD * JSB CTLR2 MAKE CONFIGURE CONTROL REQUEST JMP RTN1 EXIT * CNFG2 LDA CTL27 LOAD UNCONFIGURE REQUEST CODE IOR LU MERGE LU STA CTLWD AND SAVE IN CONTROL WORD * JSB CTLR1 MAKE UNCONFIGURE CONTROL REQUEST JMP RTN1 EXIT * SKP ******************************************************************** * * * * ABORT * CALL ABRT(BLU,I) * * * * * * WHERE: BLU=DIRECT I/O LU IN RANGE OF 1-63 * * * * * * I=FUNCTION CODE * * * I=1,ISSUE IFC COMMAND ONLY * * * I=2,ISSUE IFC AND DCL COMMANDS * * * I=3,ISSUE UNT,UNL COMMANDS * * * * ******************************************************************** ABRT NOP JSB SET RETRIEVE VALID PARAMETERS * JSB IOSTA GET I/O STATUS * JSB SUBCH GET SUBCHANNEL * SZA SUBCHANNEL=0? JMP LOSE NO,INVALID LU,EXIT WITH ERROR * LDA LU YES(DIRECT I/O),LOAD LU STA CTLWD AND SAVE IN DIRECT I/O CONTROL WORD * LDA CPAR2,I LOAD FUNCTION CPA .1  I=1? JMP ABRT1 YES CPA .2 NO,I=2? JMP ABRT2 YES CPA .3 NO,I=3? JMP ABRT3 YES JMP LOSE NO,INVALID FUNCTION,EXIT WITH ERROR * ABRT1 LDA .1 LOAD CTL REQ PARAMETER JMP *+2 * ABRT2 CLA STA PARM3 AND SAVE IN CTL WORD PARM BUFR * JSB EXEC MAKE ABORT CONTROL REQUEST DEF *+4 DEF .3 DEF CTLWD DEF PARM3 JMP RTN1 EXIT * ABRT3 JSB CNTL FORM DIRECT I/O CTL WORD BUFR * LDA UNTLK LOAD UNT,UNL CMNDS STA CBUFR AND SAVE IN CMND BUFR * LDA M2 LOAD CMND BUFR LNGTH STA CLGTH AND SAVE * JSB OUTPT OUTPUT UNT,UNL CMNDS JMP RTN1 EXIT * SKP ************************** ************************ * * * * * * * SUBROUTINES * * * * * * ************************ * ************************** * ********************************************** * * * SUBROUTINE TO EXIT UTILITY LIBRARY * * * ********************************************** RTN1 LDA .0A STA CPAR2 STA CPAR3 JMP XIT,I * ********************************************************** * * * SUBROUTINE TO RETREIVE PARAMETERS AND VALIDATE * * * ********************************************************** SET NOP LDA SET LOAD RETURN ADDRESS ADA M2 SUBTRACT TWO LDA 0,I LOAD PARAMETER LIST ADDRESS STA XIT AND SAVE JMP SET1 * * CPAR1 DEF * FIRST PARAMETER CPAR2 DEF * SECOND PARAMETER CPAR3 DEF .0 THIRD PARAMETER * * XIT NOP SET1 JSB .ENTR RETRIEVE PARAMETERS }` DEF CPAR1 LDA CPAR1,I LOAD FIRST PARAMETER AND B77 MASK LU STA LU AND SAVE CMA,INA CONVERT TO NEGATIVE LU ADA LUMAX ADD TO LAST CONFIGURED LU SSA VALID LU? JMP LOSE NO,EXIT WITH ERROR MESSAGE LDA DRT YES,LOAD DRT TABLE ENTRY ADDRESS ADA LU INDEX TO APPROPRIATE ADA M1 DRT ENTRY LDA 0,I LOAD DRT ENTRY SZA,RSS ENTRY=0? JMP RTN1 YES,EXIT(IGNORE BIT BUCKET) STA T2 NO,SAVE DRT ENTRY AND B77 MASK EQT# ADA M1 INDEX TO MPY .15 APPROPRIATE ADA EQTA EQT TABLE LDB 0 LOAD EQT ADDRESS INTO B-REG ADA .4 INDEX TO EQT WORD 5 LDA 0,I LOAD EQT WORD 5 STA T1 AND SAVE ALF,ALF SHIFT AND AND B77 MASK DEVICE TYPE CPA B37 DEVICE TYPE=37? JMP SET,I YES,RETURN(B-REG=EQT ADDRESS) * ****************************************************** * * * ERROR SUBROUTINE - INDICATES BAD PARAMETER * * * ****************************************************** LOSE LDA .0A LOAD ZERO STA CPAR2 SET PARAMETERS STA CPAR3 TO ZERO * JSB EXEC DEF *+5 DEF .2 WRITE "ILL RQ-HPIB" MESSAGE DEF .1 DEF MSGA DEF .12 * JSB EXEC DEF *+2 AND QUIT DEF .6 * ************************************************ * * * SUBROUTINE FOR RETRIEVING SUBCHANNEL * * * ************************************************ SUBCH NOP LDA T3 LOAD STATUS WORD THREE AND B37 MASK SUBCHANNEL STA T3 AND SAVE JMP SUBCH,I * ************************************************ *  * * SUBROUTINE FOR FORMING CONTROL WORD * * FOR DOUBLE BUFFER I/O REQUEST * * * ************************************************ CNTL NOP LDA LU LOAD LU IOR BIT12 MERGE DIRECT I/O BIT 12 STA CTLWD AND SAVE JMP CNTL,I * ************************************************ * * * SUBROUTINE FOR I/O STATUS EXEC CALL * * * ************************************************ IOSTA NOP JSB EXEC DEF *+6 DEF .13 DEF LU DEF T1 DEF T2 DEF T3 JMP IOSTA,I * ******************************************************* * * * SUBROUTINE FOR EXEC WRITE REQUEST TO DVR37 * * * ******************************************************* OUTPT NOP JSB EXEC DEF *+7 DEF .2 DEF CTLWD DEF .0 DEF .0 DEF CBUFR DEF CLGTH JMP OUTPT,I * ************************************************************** * * * SUBROUTINE FOR CNTL REQ WITHOUT OPTIONAL PARAMETER * * * ************************************************************** CTLR1 NOP JSB EXEC DEF *+3 DEF .3 DEF CTLWD JMP CTLR1,I * *********************************************************** * * * SUBROUTINE FOR CNTL REQ WITH OPTIONAL PARAMETER * * * *********************************************************** CTLR2 NOP JSB EXEC DEF *+4 DEF .3 ZXT DEF CTLWD DEF CPAR3,I JMP CTLR2,I * ************************************************************* * * * SUBROUTINE TO CLEAR OR RESET BUFFERING BIT 14 IN * * EQT WORD FOUR * * * ************************************************************* BUFCG NOP JSB IPUT DEF *+3 DEF T3 DEF T4 JMP BUFCG,I * * SKP * ******************************** * **************************** * * * * * * * CONSTANT STORAGE,ETC. * * * * * * * **************************** * ******************************** SUP .0 DEC 0 .1 DEC 1 .2 DEC 2 .3 DEC 3 .4 DEC 4 .6 DEC 6 .8 DEC 8 .12 DEC 12 .13 DEC 13 .15 DEC 15 M1 DEC -1 M2 DEC -2 M3 DEC -3 M4 DEC -4 M9 DEC -9 B37 OCT 37 B77 OCT 77 B377 OCT 377 B3000 OCT 3000 BIT12 OCT 10000 BIT14 OCT 40000 CTL6 OCT 600 CTL16 OCT 1600 CTL17 OCT 1700 CTL25 OCT 2500 CTL27 OCT 2700 DCL OCT 12000 GET OCT 4000 GOLOC OCT 400 LLOCK OCT 10400 PPCD OCT 2560 PPCE OCT 2540 PPU OCT 12400 SDC OCT 2000 UNLSN OCT 37440 UNTLK OCT 57477 * .0A DEF .0 * LU BSS 1 CBUFR BSS 2 CLGTH BSS 1 CTLWD BSS 1 PARM3 BSS 1 * T1 NOP T2 NOP T3 BSS 1 T4 BSS 1 * MSGA ASC 12,ILL RQ-HPIB PROG ABORTED * SIZE EQU * END |Z  59310-80020 1609 S 0222 BCS D.37 A & B              H0102  IFN HED ** D.37A: BCS BUS I/O DRIVER ** NAM D.37A 59310-60020 REV.C, 760227 XIF IFZ HED ** D.37B: BCS BUS I/O DRIVER ** NAM D.37B 59310-60021 REV.C, 760227 XIF ENT D.37,I.37 EXT .BUFR IFZ EXT DMAC1,DMAC2,IOERR XIF SKP ******************************************* * * *** I N I T I A T O R S E C T I O N *** * * ******************************************* * ENTER WITH * * A = ADDR OF WD1 OF EQT ENTRY * B = ADDR OF WD2 OF I/O REQUEST * * EXIT VIA D.37,I WITH * A = 0 REQUEST INITIATED * A = 1 REQUEST REJECTED REASON IN B * B15 = 1 THE DRIVER IS BUSY OR * THE DEVICE IS BUSY * B0 = 1 DMA CHANEL(S) BUSY * B15-B0=0 ILLEGAL * * EXIT TO IOERR IF DMA REQUEST AND NOT AVAIALBLE IN SYSTEM * A=3 DMA REQUESTED NOT IN SYSTEM * B15-B0 ADDRESS OF WD1 OF USER CALL * D.37 NOP ENTRY FROM IOC STA EQTAD SAVE ADDR OF EQT WD1 STB REQAD SAVE ADDR OF REQUEST WD2 * * GET FROM USER CALL * LDA REQAD,I GET WD2 OF USER REQUEST AND =B177700 ISOLATE * * TEST FOR CLEAR REQUEST * SZA,RSS TEST FOR CLEAR REQUEST JMP CLEAR YES: GO PROCESS CLEAR REQUEST * * TEST IF DRIVER CONTINUATOR SECTION IS BUSY * LDB DVRBF GET DRIVER BUSY FLAG SSB TEST IF BUSY JMP REJRQ YES: GO TO REJECT EXIT,B=100000 * NO:CONTINUE * * ISOLATE * GFC ALF PUT FUNCTION BITS INTO BITS 0-3 AND =B17 ISOLATE STA FCODE SAVE IT * * TEST FOR LEGAL * * NOTE:ALL 1,2 &3 ARE LEGAL * FOR THIS DRIVER * * * GET FROM EQT AND TEST IF NEW CH # * LDA EQTAD,I GET WD 1 FROM EQT AND =B77 ISOLATE SC BITS CPA OLDSC IS CURRENT SC = TO OLD SC JMP X.1 YES: BYPASS CONFIGURATION SECTION * NO: RECONFIGURE ALL I/O INSTUCTIONS * * CONFIGURE I/O INSTRUCTIONS * STA OLDSC UPDATE OLD SC TO NEW VALUE IOR STFI STA STF1 STA STF2 STA STF3 ADA =B000100 CONVERT STF TO SFC STA SFC1 XOR =B000700 CONVERT SFC TO LIA STA LIA1 STA LIA3 UNL IFZ LST STA LIA4 STA LIA5 XIF LST ADA =B000100 CONVERT LIA TO OTA STA OTA1 ADA =B000100 CONVERT OTA TO STC STA STC1 STA STC2 UNL IFZ LST STA STC3 XIF LST XOR =B001200 CONVERT STC TO LIA ,C STA LIAC1 STA LIA2 ADA =B000100 CONVERT LIA ,C TO OTA ,C STA OTAC1 STA OTAC2 XOR =B005300 CONVERT OTA ,C TO LIB STA LIB1 IOR =B000700 CONVERT LIB TO CLC STA CLC1 IOR =B001200 CONVERT CLC TO CLC ,C STA CLCC2 STA CLCC4 UNL IFZ LST STA CLCC5 XIF LST SKP * *** GET PARAMETERS USED IN COMMON BY READ,WRITE & CONTROL SECTIONS *** * * * GET CODE * X.1 LDA EQTAD,I GET EQT WD 1 ALF,ALF PUT BITS RAL,RAL INTO BIST 0-4 AND =B37 ISOLATE CODE STA SUBUN SAVE IT * * GET * LDA REQAD,I GET WD2 OF USER REQUEST ALF,ALF PUT BITS RAL,RAL INTO BITS 0-5 AND =B67 ISOLATE STA SUBFU SAVE IT * * SET UP POINTERS TO EQT WD2 AND WD3 * LDA EQTAD GET ADDR OF EQT WD1 INA SET TO WD2 STA EQTW2 a SAVE IT INA SET TO WD3 STA EQTW3 SAVE IT * * BRANCH TO CONTROL OR READ/WRITE SECTION * * LDA FCODE CPA =B3 IS IT A CONTROL REQUEST JMP CTLRQ YES: * NO: CONTINUE TO R/W REQUEST SKP * *** GET REMAINING PARAMETERS FOR A READ/WRITE REQUEST *** * * * GET AND RESOLVE * ISZ REQAD SET REQAD TO WD3 ISZ REQAD SET REQAD TO WD4 LDA REQAD PUT ADDR OF WF4 INTO A LDA A,I GET FROM USER REQUEST RAL,CLE,SLA,ERA TEST AND CLEAR INDIRECT JMP *-2 INDIRECT: REPEAT,GET NEXT LEVEL STA UBUFA DIRECT: SAVE * * GET FROM USER REQUEST AND CONVERT TO + BYTES * ISZ REQAD SET REQ. ADDR TO WD5 LDA REQAD,I GET STA UBUFL SAVE IT SSA TEST IF WORDS OR BYTES JMP *+3 -:BYTES,CONVERT TO +BYTES * +:WDS,CONVERT TO BYTES ALS CONVERT WDS TO BYTES RSS CMA,INA CONV -BYTES TO +BYTES STA ULFLG SAVE +BYTES FOR XMISSION LOG COMP * * SET-UP READ/WRITE FLAG * LDA FCODE GET ERA PUT BIT0 INTO E CLA SET A=0 ERA PUT E INTO A15 STA RWFLG SAVE RESULT UNL IFZ LST * *** CLAIM A DMA CHANNEL IF DMA REQUESTED *** * LDA EQTAD,I GET WD1 OF EQUIP.TBL. SSA,RSS TEST IF DMA IS TO BE USED JMP SETBY 0:DMA NOT REQUIRED,GOTO BUSY EXIT * 1:USE DMA,CONTINUE * * CHECK CH1 FOR AVAILABILITY AND BUSY * LDB DMAC1 GET DMA CH1 FLAG CCE,SZB,RSS SET E=1,TEST IF SYSTEM HAS DMA? JMP NODMA NO:GO TO ABORT EXIT * YES:CHECK IF CH1 IS BUSY SSB TEST IF CH1 BUSY 1TJMP CKCH2 1:YES,TRY CH 2 * 0:NO,CONTINUE * * CLAIM DMA CH1 * STB DMAC# SAVE DMA CH# RBL,ERB SET BIT15=1 FOR BUSY FLAG,E=0 STB DMAC1 RESTORE DMAC1 WITH BUSY FLAG JMP SETBY GO TO SET BUSY SEC * * CHECK CH 2 FOR AVAILABILITY AND BUSY * CKCH2 LDB DMAC2 GET DMA CH2 FLAG SZB,RSS TEST IF SYSTEM HAS DMA JMP NODMA NO: GO TO ABORT EXIT * YES: CONTINUE SSB,RSS TEST IF CH2 BUSY JMP CDMA2 0:NO,GO CLAIMIT * YES: REJECT CALL * 1:YES,REJECT CALL,DMA BUSY * * REJECT REQUEST,BOTH DMA CHANNELS BUSY * CLB,INB SET B=1 JMP REJRQ EXIT VIA REJECT RETURN * * ABORT REQUEST, NO DMA * NODMA CCB SET B= -1 ADB REQAD ADD IN ADDR OF WD2 OF USER REQ. LDA =B3 SET A= 3 JMP IOERR EXIT TO IOC ERROR HALT * * CLAIM DMA CH2 * CDMA2 STB DMAC# SAVE DMAC# RBL,ERB SET BIT 15 = 1,E=1 STB DMAC2 RESTORE DMAC2 WITH BUSY FLAG XIF LST * * SET DRIVER BUSY FLAG * SETBY LDB =B100000 SET B15=1 STB DVRBF SET DVR BUSY FLAG TO BUSY * * SET DEVICE BUSY FLAG IN EQT WD2 * JSB UEQT2 GO UPDATE EQT WD2 * * CLEAR TRANSMISSION LOG * CLA SET A = 0 STA EQTW3,I CLEAR TRANSMISSION LOG * *** DETERMINE IF AUTO-ADDRESSING REQUESTED *** * AADCK LDA SUBUN GET SZA,RSS TEST IF FOR BUS(0) OR DEVICE(>0) JMP NOADR 0:GOTO NO ADDRESSING SECTION * >0: ENTER ADDRESSING SECTION SKP * *** AUTO ADDRESSING SECTION *** * * THIS SECTION ADDRESSES THE DEVICE TO TALK (READ REQUEST) * OR LISTEN (WRITE REQUEST) USING FOR THE * BUS ADDR. * * * PUT I/O CARD INTO CONTROLLER MODE WITH PACKING * LDA =B024267 GET CTL WD FOR CTLR MODE WITH PACING JSB CTLWD OUPUT CTL WD * * CONSTRUCT DEVICE ADDRESS FROM AND PUT INTO ADDR BUFFER * LDB RWFLG GET RED/WRT FLAG LDA =B000100 GET TALK ADDR BITS SSB,RSS TEST IF READ OR WRITE LDA =B000040 0:WRT,REPLACE WITH LISTEN ADDR * GROUP BITS * 1:RED,LEAVE AS IS IOR SUBUN ADD IN FOR ADDR ALF,ALF PUT INTO UPPER HALF WD STA ADDRB+1 PUT IT INTO ADDR BUFFER * * SET-UP OUTPUT SECTION PARAMETERS FOR OUTPUT OF ADDRESS * LDA ADRBA GET ADDR OF ADDR BUFEER STA BPNTR PUT INTO BUFFER POINTER LDA =B-2 GET # OF WDS STA WCNTR PUT INTO WORD COUNTER CLA,INA SET A0 = 1 STA OBFLG SET ODD BYTE FLAG LDA OBUFA GET ADDR OF OUPUT BUF CONT SEC STA IENTP PUT INTO INT.ENT PNTR * * SET-UP CONTINUATOR SECTION TO EXIT TO AUTO-ADDRESSING * COMPLETION SECTION * LDA ADRCA GET ADDR OF AUTO-ADDR'G COMPLT. SEC. STA OBEP PUT INTO OUT. BUF EXIT PNTR JMP AADIN GO TO AUTO-ADDR'G INIT. EXIT * * ADDRESS BUFFER * ADRBA DEF ADDRB ADDRB OCT 057477 UNTALK & UNLISTEN COMMANDS OCT 0 STORAGE FOR DEVICE ADDRESS SKP * *** AUTO-ADDRESSING COMPLETION SECTION *** * * PUT THE I/O CARD INTO THE TALK MODE(WRITE REQUEST) * OD LISTEN MODE(READ REQUEST) AND TAKE IT OUT * OF THE CONTROLLER MODE * ADDRC LDB RWFLG GET R/W FLAG LDA =B000110 GET CTL WD TO ENABLE TALK SSB TEST IF RED OR WRT LDA =B000120 1:RED,REPLACE WITH LISTEN CTLWD * 0:WRT,LEAVE AS IS JSB CTLWD OUTPUT IT JMP INIRW GO TO INITIATE RED/WRT SEC. SKP * *** NO ADDRESSING SECTION *** * * * DETERMINE IF I/O CARD IS * ADDRESSED TO TALYK (WRITE REQUEST) * ADDRESSED TO LISTEN (READ REQUEST) * * * GET CURRENT I/O CARD & BUS STATUS * NOADR JSB STAWD * * DETERMINE IF READ OR WRITE REQUEST * LDB RWFLG GET R/W FLAG SSB,RSS TEST IF READ OR WRITE REQ. JMP ATCHK 0:WRT, GO TO ADDR'D TO TALK CHK * 1:RED,CONTINUE TO ADDR'D TO LIST,CHK * * IF READ,TEST IF ADDRESSED TO LISTEN, * MRE=HIGH,RFD=HIGH, & DAC=LOW * AND =B000300 ISOLATE MRE & LISTEN BITS CPA =B000100 TEST IF MRE=H & LISTEN=1 JMP INIRW YES:GO TO RW INIT SEC JMP REJNA NO: GO TO NOT AVAIL REJ * * IF WRITE,TEST IF * 1.ADDRESED TO TALK AND MRE=HIGH * OR 2.ACTIVE AND MRE=LOW * ATCHK LDB A SAVE STATUS AND =B000240 ISOLATE TALK & MRE BITS CPA =B000040 IS TALK=1 & MRE=0? JMP INIRW YES: GO TO RW INIT. SEC. * NO:TRY CTLR MODE LDA B GET STATUS AND =B000220 ISOLATE MRE & ACTIVE BITS CPA =B000220 IS ACTIVE=1 & MRE=1? JMP INIRW YES: GO TO RW INIT. SEC. * NO:CONT. TO REJECT EXIT * * REJECT TEQUEST,CARD AND/OR BUS NOT READY * REJNA CLB,INB GET DEV NOT AVAILABLE STATUS JSB UEQT2 GO UPDATE EQT WD2 STB DVRBF CLR DVR BUSY FLG JMP REJRW SKP * *** READ/WRITE INITIATOR SECTION *** * * * SET-UP RECORD FORMAT FLAGS * INIRW LDB SUBFU GET SUBFUNCTION CODE RBR PUT A/B BIT INTO A15 * F/V BIT INTO A0 * R/A BIT INTO A3 STB RFMTF PUT RESULT INTO REC FMT FLGS UNL IFZ LST * * TEST IF DMA IS TO BE USED * LDA DMAC# GET DMA CH # CLAIMED SZA,RSS TEST IF ONE CLAIMED OR NOT JMP SUIRW 0:NO,GO SET-UP FOR INT. R/W * 6,7:YES,SE9T-UP FOR DMA R/W ERA SET E TO INDICATE DMA CH# TO USE * 0=6,1=7 * *** SET-UP READ OR WRITE USING DMA TRANSFER *** * * * SET DMA COMPLETION INTERUPT LINKAGE * SUDMA LDA OLDSC,I GET JSB,I FROM I/O INT.TRAP CELL STA DMAC#,I PUT IT IN DMA COMPLETION INT.LOC LDA DTCAD GET ADDR OF DMA XFER COMPLET SEC STA IENTP PUT INTO INT.ENT.PNTR * * ENABLE I/O CARD FOR DMA TRANSFER * LDB RWFLG GET R/W FLAG LDA =B004207 WRT:GET CTL WD FOR DMA WRT SSB TEST IF RED REQ. IOR =B012000 1:RED,ADD IN DMA REQ.FLAG SEL.BIT * AND EOR FLG ENABLE LDB RFMTF GET REC FMT FLGS SSB,RSS TEST A/B BIT IOR =B000400 0:ASCII,ADD IN ASCII MODE BIT JSB CTLWD OUTPUT IT * * FORM CTL WD 3 IN B (-WORD COUNT) * LDB ULFLG GET LENGTH OF USER BUF IN +BYTES INB ADD 1 TO ROUND UP TO WORDS BRS DIVIDE BY 2 TO MAKE WORDS STB WCNTR SAVE FOR XMISSIOM LOG COMP. CMB,INB MAKE IT NEGATIVE * * FORM CTL WD 1 IN A (RED/WRT MODE AND SELECT CODE) * LDA =B020000 GET DMA CTL WD 1:STC=0,WORD,CLC=0 IOR OLDSC ADD IN SC OF BUS I/O CARD * * DETERMINE DMA CHANNEL TO BE USED * SEZ TEST E FOR DMA CH# TO INITILIZE JMP ICH2 1:CH2,GO TO CH2 INIT. SEC. * 0:CH1,CONT. TO CH1 INIT. SEC. * * INITILIZE CH1 * ICH1 OTA 6 PUTPUT CW1 TO DMA CH1 LDA UBUFA GET BUFFER ADDR IOR RWFLG ADD IN R/W CTL BIT CLC 2 SET-UP DMA CH1 TO RCV CW2 OTA 2 SEND SW2 STC 2 SET-UP DMA CH1 TO RCV CW3 OTB 2 SEMD CW3 JMP DMAEX GOTO DMA EXIT ROTUTNE * * INITILIZE CH2 * ICH2 OTA 7 OUTPUT CW1 TO DMA CH2 LDA UBUFA GET BUFFER ADDR IOR RWFLG ADD IN R/W CTL BIT CLC 3 SET-UP DMA CH2 TO RCV CW2 OTA 3 SEND CW2 STC 3 SET-UP DMA CH2 TO RCV CW3 OTB 3 SEND CW3 * * CONFIGURE DMA STC INSRUCTION * DMAEX LDA STCCI GET CTC ,C INST IOR DMAC# ADD IN DMA CH # IN USE STA STCD1 STA STCD2 * * TURN ON INTERRUPT ON I/O CARD * CLCC5 CLC SC,C CLR FLG LDA =B000007 JSB CTLWD INITILIZE I/O CARD STC3 STC SC TURN ON INTERRUPT ON I/O CARD * * DETERMINE IF AUTO ADDRESSING USED * LDA SUBUN GET SUB UNIT REQUESTED SZA TEST IF AUTO ADDR'G UXSED JMP DMACX >0:YES,GOTO DMA CONT EXIT * 0:NO,CONT TO INITATOR EXIT * * IF AUTO ADD'G NOT USED,EXIT VIA INITIATORR SECTION * LIA4 LIA SC SET RFD FF TO START READ STCD1 STC 6,C TURN ON DMA CHANNEL JMP REQIN GOYTO REQ INIT EXIT * * IF AUTO ADDR'G USED, EXIT VIA CONTINUATOR SEC * DMACX LDA I.37 GET ADDR OF LOC FROM WHICH INT OCCURED STA DMAIR SAVE TI LIA5 LIA SC SET RFD FF TO START READ JSB RESTR RESTORE THE REGISTER CONTENTS STCD2 STC 6,C TURN ON DMA JMP DMAIR,I RETURN * DMAIR OCT 0 STCCI STC 0,C XIF LST SKP * *** SET-UP READ OR WRITE USING INTERRUPT TRANSFER *** * * * INITILIZE BUFFER POINTER * SUIRW LDA UBUFA GET VALUE OF USER STA BPNTR PUT INTO BUFFER POINTER * * INITILIZE BYTE COUNTER FOR READ * WORD COUNTER & ODD BYTE FLG FOR WRITE * LDA ULFLG GET LENGTH OF USER BUF IN +BYTES SZA,RSS TEST IF BUF LENGTH=0 JMP BUFL0 0:YES,GOTO BUF LEN 0 EXIT CMA,INA CONVERT TO -BYTES STA BCNTR SAVE -BYTES FOR READ STA OBFLG SAVE ODD BYT CNT FOR WRT INA ROUND DOWN ARS CONVERT TO WDS LESS ODD BYTE ADA =B-1 SET WD CNT TO 1 LESS STA WCNTR SAVE WD CNT FOR WRT * * SET-UP FOR ASCII R/W * CLA SSB,RSS TEST IF ASCII FMT LDA =B000400 0:ASCII,GET CTLWD BIT FOR ASCII MODE * 1:BINARY,LEAVE=0 * * DETERMINE IF READ OR WRITE REQUEST * LDB RWFLG GET READ/WTIRE FLAG SSB TEST IF RED OR WRT JMP SURED 1:RED,GO TO SET-UP RED SEC. * 0:WRT,CONTINUE TO SET-UP WRT SEC. * * SET-UP FOR WRITE * SUWRT LDB OBUFA GET ADDR OF WRT CONTINUATOR ROUT STB IENTP PUT INTO INT ENTRY PNTR LDB CMPLA GET ADDR OF CMPLTION SEC SZA TEST IF ASCII OR BINARY LDB SUCLA 1:ASCII,GET ADDR OF CRLF OUT SEC * 0:BIN,LEAVE AS IS STB OBEP PUT INTO OUT BUF ROUT EXIT PNTR IOR =B024207 ADD CTL WD FOR WRITE JSB CTLWD OUTPUT THE CONTROL WORD JMP RWRIN GO TO RED/WRT REQ INITIALTED EXIT * * SET-UP READ * SURED LDB REDAD GET ADDR OF READ ONTINUATOR ROUT. STB IENTP PUT IT INTO POINTER IOR =B050200 ADD IN CTL WD BITS FOR READ JSB CTLWD OUTPUT THE CONTROL WORD * * INITILIZE UPPER/LOWER BYTE FLAG * CLB STB ULFLG UNL IFZ LST * * INITIALIZE EOF COUNTER * LDB =D-30 STB EOFCT XIF LST * * SET-UP INPUT SEC TO BRANCH TO LEADER PROCESSOR * IFN LDA PACKA GET ADDR OF INPUT PACKING SEC XIF IFZ LDA INLDA GET ADDR OF LEADER PROC'G SEC XIF STA INPTP PUT INTO INPUT SEC BRANCH PNTR * * TEST IF RFD FF NEEDS TO BE SET * LIA2 LIA SC,C SET RFD FF TO START READ JMP RWRIN GO TO RED/WRT REQ INITIATED EXIT * * BUFFER LENGTH=0 EXIT PROCESING * BUFL0 LDB SUBUN GET SUB UNIT REQUESTED SZB TEST IF AUTO ADDR'G USED JMP CMPLT >0r:YES,GOTO COMPLT'N SEC * 0:NO,SET-UP INITIATOR EXIT LDA REQIA GET ADDR OF REQ INIT EXIT STA I.37 PUT INTO CONT SEC FOR .BUFR RET JMP CMPLT GOTO COMPLT'N SEC SKP * *** PROCESS A CLEAR REQUEST *** * * * CONFIGURE I/O INSTRUCTONS USED BY CLEAR PROCESSOR * CLEAR LDA EQTAD,I GET WD1 FROM EQT AND =B000077 ISOLATE BITS IOR STFI MAKE INTO STF INSTRUCTION STA STF9 STA STF8 IOR =B000400 CONVERT STF TO LIA STA LIA9 ADA =B000100 CONVERT LIA TO OTA STA OTA9 STA OTA8 IOR =B005300 CONVERT OTA TO CLC ,C * * TURN OFF INTERRUPT AND CLEAR FLAG * CLCC9 CLC SC,C * * IF = 0, EOP BUS * LDA EQTAD,I GET WD1 OF EQT AND =B003700 ISOLATE BITS SZA TEST FOR = 0 JMP CLR1 N/:BYPASS EOP * YES:CONTINUE TO EOP SECTIOM LDA =B000001 GET CTRL WD FOR EOP STF9 STF SC OTA9 OTA SC * * CLEAR IRL FF * CLR1 LIA SC LIA9 EQU CLR1 * * CLEAR OWRLFF,OBRLFF,RFD FF * LDA =B000007 STF8 STF SC OTA8 OTA SC * * CLEAR DRIVER BUSY FLAG * CLB STB DVRBF CLEAR DVR BUSY FLAG * * CLEAR EQT TABLE ENTRIES * LDA EQTAD GET ADDR OF EQT WD1 INA SET TO WD2 STA EQTW2 PUT INTO EQT WD2 ADDR INA SET ADDR TO EQT W&3 STB A,I CLEAR TRAMSMISSION LOG JSB UEQT2 CLEAR BITS 0-7: * BITS 14: R/W ERROR FLG * BIT 15: DEVICE BUSY FLG UNL IFZ LST * * RELEASE DMA CHANNEL IF CLAIMED * LDA DMAC# GET DMA CH # CURRENTLY IN USE SZA TEST IF DMA IN USE JSB RCDMA >0:GORELEASE & CLEAR DMA * 0:NO,GO TO EXIT XIF ,B@< SZA TEST IF AUTO-ADDR'NG SEC USED JMP CONTI >0:YES,EXIT VIA CONT. SEC * =0:NO,EXIT VIA INIT. SEC. * * TURN ON INTERRUPT AND EXIT * AADIN CLC SC,C CLR FLAG CLCC2 EQU AADIN STC1 STC SC TURN ON INTERRUPT ON I/O CARD * * INITATOR SECTION "REQUEST INITIATED" RETURN ROUTINE * REQIN CLA SET A=0 TO INDICATE REQUEST INITIATED JMP D.37,I RETURN TO IOC REQIA DEF REQIN SKP * * SUBROUTINE TO OUTPUT A CONTROL WORD * CTLWD NOP STF1 STF SC OTA1 OTA SC JMP CTLWD,I * * SUBROUTINE TO INPUT A STATUS WORD * STAWD NOP STF2 STF SC LIA1 LIA SC JMP STAWD,I * *** SUBROUTINE TO UPDATE EQT WD2 STATUS BITS 0-7,14,15 *** * * ENTER WITH 1.NEW VALUE FOR BITS 0-7,14,15 IN B * 2.EQTW2 SET TO ADDR OF EQT WD 2 * UEQT2 NOP ENTRY LDA EQTW2,I GET CURRENT VALUE OF WD2 FROM EQT AND =B037400 MASK OFF BITS 0-7,14,15 IOR B ADD IN NEW STATUS STA EQTW2,I RESTORE WD2 TO EQT JMP UEQT2,I RETURN * * INITIATOR SECTION PARAMETERS * * * USER REQUEST AND DEVICE PARAMETERS * REQAD OCT 0 ADDR OF USER REQUEST EQTW2 OCT 0 ADDR OF EQT WD 2 EQTW3 OCT 0 ADDR OF EQT WD 3 OLDSC OCT 100 CURRENT SC OF I/O INST. FCODE OCT 0 * 0 = CLEAR REQ. * 1 = READ REQ. * 2 = WRITE REQ. * 3 = CONTROL REQ. SUBFU OCT 0 SUBUN OCT 0 UBUFA OCT 0 USER BUFFER ADDR UBUFL OCT 0 USER BUFFER LENGHT DVRBF OCT 0 DRIVER BUSY FLAG UNL IFZ LST DMAC# OCT 0 DMA CH# CURRENTLY IN USE * 0 = NONE IN USE * 6 = CH 6 IN USE * 7 = CH 7 IN USE XIF LST SKP *********************************************** * * *** C O N T I N U A T O R S E C T I O N *** * * *********************************************** * * * THIS SECTION IS ENTERED FROM A JSB LINK,I LOCATED IN * THE INTERRUPT TRAP CELL.LINK CONTAINS A DEF I.37 * I.37 NOP ENTRY * * SAVE THE CONTENTS OF THE A,B,E &O REGISTERS * STA SAVA SAVE A STB SAVB SAVE B ERA,ALS PUT E INTO A15,O INTO A0 SOC TEST 0 REG INA SET A0=1 IF 0=1 STA SAVEO SAVE E & 0 CLC1 CLC SC TURN OFF INT.ENABLE CLF JMP IENTP,I BRANCH TO APPROPIATED CONT. ROUTINE IENTP DEF IENTP INTERRUPT ENTRY POINTER * NOTE:THIS POINTER IS NODIFIED * BY THE INITIATOR SECTION TO * POINT TO THE APROPIATE CONTINUATOR * ROUTINE * * POINTERS TO VAROUS CONTINUATOR ROUTINES * REDAD DEF RED PNTR TO READ CONT. SEC. OBUFA DEF OBUF PNTR TO OUTPUT BUFFER ROUT UNL IFZ LST DTCAD DEF DMATC PNTR TO DMA COMPLETION SEC. XIF LST SKP *** *** *** WRITE ROUTINES *** *** *** * *** OUTPUT CONTENTS OF BUFFER *** * OBUF ISZ WCNTR TEST IF LAST BYTE WAS OUTPUT RSS NO:CONTINUE JMP OOB YES:GO TO ODD BYTE OUT CHK LDA BPNTR,I GET WORD FROM BUFFER OTAC1 OTA SC,C OUTPUT IT ISZ BPNTR INCREMENT BUFFER POINTER JMP CONTI MCONTINUE INTERRUPT PROCESSING * * DETERMINE IF AN ODD # OF BYTES IS TO BE OUTPUT * OOB LDA OBFLG GET ODD BYTE FLG SLA,RSS TEST IF ODD BYT JMP OBEP,I 0:NO,DONE,EXIT * 1:YES,CONTINUE * * OUTPUT ODD BYTE * LDA =B020200 TAKE CARD OUT OF PACKING MODE JSB CTLWD OUTPUT CTL WD LDA BPNTR,I GET WD FROM BUFFER ALF,ALF POSITION BYTE TO LOW WD OTAC2 OTA SC,C OUTPUT IT * * SET-UP OUTPUT SECTION TO OUTPUT LAST BYTE AND EXIT * LDA =B-1 GET WD CNT FOR LAST OUTPUT STA WCNTR PUT INTO WD CNTR CLA SET A=0 STA OBFLG CLR ODD BYTE FLG JMP CONTI CONT INT PROC'G * *** OUTPUT OF BUFFER COMPLETE BFANCH TABLE *** * OBEP DEF OBEP OUTPUT COMPLET EXIT PNTR CMPLA DEF CMPLT PNTR TO COMPLETION SECTION ADRCA DEF ADDRC PNTR TO AUTO-ADDR'G COMPLETION SECTION SUCLA DEF SCRLF PNTR TO SET-UP OF CR LF OUTPUT SKP * *** SET-UP OUTPUT OF CR,LF FOR ASCII WRITE *** * SCRLF LDA =B024607 RESTORE PACKING MODE JSB CTLWD OUTPUT IT * * SET-UP OUTBUF SEC PARAMS FOR OUTPUT OF CRLF * LDA CRLFA GET ADDR OF CR,LF BUFFER STA BPNTR PUTINTO BUF PNTR LDA =B-2 GET WD COUNT STA WCNTR PUT INTO WD COUNTER * * SET-UP OUTPUT BUFF SEC TO EXIT TO COMPLETION SEC. * LDA CMPLA GET ADDR OF CMPLT EXIT STA OBEP PUT INTO OUT BUF EXIT PNTR JMP CONTI CONTINUE INT. PROC. * * CARRAGE RETURN,LINE FEED BUFFER * CRLFA DEF CRLF CRLF OCT 006412 SKP *** *** *** READ ROUTINS *** *** *** * *** INPUT BYTE,TEST FOR EOR & BRANCH TO PROC'G SEC *** * RED STF SC SET-UP I/O CARD TO INPUT STATUS STF3 EQU RED LIB1 LIB SC INPUT STATUS BLF,SLB POS BIT 12 INTO BIT0 & TEST EORFLG JMP EORP 1:EOR,GO TO EOR PROC SEC. * vR 0:NOT EOR,CONT LIAC1 LIA SC,C INPUT DATA BYTE,CLR FLAG JMP INPTP,I INPTP DEF INPTP,I * * INPUT PROCESSING BRANCH TABLE * PACKA DEF PACK UNL IFZ LST INLDA DEF INLED * *** PROCESS LEADER *** * * ENTER WITH BYTE IN LOW A * INLED SZA TEST IF BYTE = 000 JMP FBYTE NO: GOTO FIRST BYTE PROC'G * YES: CONT TO EOF TEST * * TEST IF EOF * ISZ EOFCT TEST IF JMP CONTI NO:CONT INT. PROC'G * YES:CONT TO EOF EXIT * * SET-UP EOF & EOT STATUS & GOTO COMPT * LDB =B240 GET EOT & EOF STATUS JMP CMPLS GOTO COMPLETION SEC * *** PROCESS FIRST NON-ZERO BYTE *** * * * SET-UP INPUT SEC. TO BRANCH TO PACK'G SEC * FBYTE LDB PACKA GET ADDR OF PACK'G SEC. STB INPTP PUT INTO INPUT BRANCH PNTR * * DETERMINE READ FORMAT * LDB RFMTF GET READ FORMAT FLAGS SLB,RSS TEST BIT0 JMP PACK 0:ASCII OR FIXED BINARY, * GOTO PACK'G SEC. * 1:VARIABLE BIN FMTS,SDT-UP RL * * DETERMINE IF ABS OR REL BIN FMT * STA TEMP SAVE BYTE1 FOR PACK SECTION RBR,RBR POSITION R/A BIT(BIT3) RBR,SLB INTO BIT0 AND TEST ADA =D3 1:ABS FMT, ADD 3 TO * 0:REL,LEAVE AS IS * * CONVERT TO BYTES * ALS CONVERT TO BYTES STA RECL SAVE FOR * * DETERMINE IF BUFFER IS LARGE ENOUGH TO TAKE RECORD * ADA BCNTR ADD -BUF BYTES TO REC LEN BYTES SSA,RSS TEST RESULT JMP FBEX +:RL >= BL,USE BL * -:RL < BL,USE RL * * CONVERT TO BYTE FOR BYTE CNTR * LDA RECL GET CMA,INA MAKE NEG STA BCNTR PUT INTO BYTE CNTR * * P RESTORE BYTE 1 TO A REG & GOTO PACK SECTION * FBEX LDA TEMP GET BYTE1 XIF LST * *** PACK BYTE INTO BUFFER UNTIL FULL *** * * * TOGGLE UPPER/LOWER FLAG * PACK LDB ULFLG GET UPPER/LOWER FLAG INB TOGGLE IT STB ULFLG SAVE RESULT * * DETERMINE IF UPPER OR LOWER BYTE INPUT * SLB,RSS TEST JMP LBYTE 0:LOWER,GOTO LOW BYTE PROC'G * 1:UPPER,CONT. TO UP BYTE PROC'G * * PROCESSING FOR UPPER BYTE * UBYTE ALF,ALF PUT BYTE INTO UPPER HALF WD STA TEMP SAVE IT FOR LOW BYTE PROC'G JMP BUFFT GOTO BUF FULL TEST * * PROCESSING FOR LOWER BYTE * LBYTE IOR TEMP STA BPNTR,I ISZ BPNTR INCREMENT BUFFER PNTR * * DETERMINE IF BUFFER IS FULL * BUFFT ISZ BCNTR INCREMENT BYTE CNTR & TEST IF FULL JMP CONTI NO:CONT INT. PROC'G * YES:CONT.TO BUF.FULL PROC'G * *** BUFFER FULL PROCESSING *** * * * PAD LAST WD IF ODD # BYTE REMAINING * BUFFP SLB,RSS TEST IF ODD BYTE REMAINING JMP CMPLT 0:NO,EXIT * 1:YES,CONT & PAD LDB RFMTF GET REC FMT FLGS SSB,RSS TEST IF ASCII OR BIN FMT PADA IOR =B040 0:ASCII,ADD IN SPACE CHAR * 1:BIN,LEAVE 0'S BUFFE STA BPNTR,I PUT RESULT INTO BUFFER JMP CMPLT EXIT TO CMPLT'N SEC * *** END OF RECORD PROCESSING *** * * * DETERMINE RECORD FORMAT * EORP LIA SC INPUT BYTE,DON'T CLR EOR FLG LIA3 EQU EORP LDB RFMTF GET REC FMT FLGS SSB,RSS TEST A/B BIT JMP AEOR 0:ASCII,GOTO ASCII EOR PROC'G * 1:BIN,CONT TO BIN EOR PROC'G * * BINARY EOR PROCESSING * BEOR CCB SET B=-1 STB BCNTR SET BYTE CNTR=-1 TO FAKE BUF FULL JMP PACK GOTO BUF PACK'G SEC * * ASCII EOR PR~HOCESSING * * * BACK-UP BYTE COUNTER SO AS NOT TO COUNT CR * AEOR CCB SET B=-1 ADB ULFLG DECREMENT UPPER/LOWER FLG STB ULFLG RESTORE IT * * DETERMONE IF CR PUT INTO BUFFER * SLB,RSS TEST IF LAST INPUT ODD OR EVEN JMP CMPLT 0:EVEN,GO TO COMPLT'N SEC * 1: ODD,REMOVE CR FROM BUFFER * * GET CR FROM BUFFER & MASK OFF * CCB SET B=-1 ADB BPNTR DECREMENT BUF BNTR STB BPNTR RESTOR BUF PNTR VALUE LDA B,I GET VALUE FROM BUFFER AND =B177400 MASK OFF CR JMP PADA GOTO ASCII PAD SEC SKP * * CONTINUE INTERRUPT PROCESSING * CONTI SFC SC TEST IF FLAG HAS BEEN SET SFC1 EQU CONTI JMP IENTP,I YES:BYPASS INPTERRUPT PROCESSING JSB RESTR NO:RESTORE REGISTERS STC2 STC SC TURN I/O CARD INTERRUPT BACK ON JMP I.37,I RETURN TO INTERRUPTED LOCATION * * SUBROUTINE TO RESTORE REGISTERS * RESTR NOP LDA SAVEO CLO SLA,ELA STO LDA SAVA LDB SAVB JMP RESTR,I EXIT * * CONTINUATOR SECTION PARMETERS * SAVA OCT 0 TEMP FOR A DURING INTERRUPT SAVB OCT 0 TEMP FOR B DURING INTERRUPT SAVEO OCT 0 TEMP FOR E & O DURING INTERR0PT BPNTR OCT 0 POINTER TO CURRENT LOC. IN BUFFER BCNTR OCT 0 BYTE COUNTER TEMP OCT 0 TEMP FOR UPPER HALF IN READ RFMTF OCT 0 RECORD FORMAT FLAGS * BIT0=0/1=F/V=FIXED/VARI LENGHT * BIT3=0/1=R/A=REL/ABS FMT * BIT15=0/1=A/B=ASCII/BINARY ULFLG OCT 0 UPPER/LOWER BYTE FLAG RWFLG OCT 0 READ/WRITE FLAG * BIT15=0: WRITE * BIT15=1: READ WCNTR OCT 0 WORD COUNTER OBFLG OCT 0 ODD BYTE FLAG IFZ EOFCT OCT 0 EOF MHCOUNTER RECL OCT 0 XIF SKP ********************************************** * * *** C O M P L E T I O N S E C T I O N *** * * ********************************************** UNL IFZ LST * *** DMA TRANSFER COMPLETE *** * * THIS SECTION ENTERED VIA INTERRUPT FROM THE DMA COMPLETION * INTERRUPT LOCATION OR FROM THE INTERRUPT TRAP CELL IF * AN EOR OCCURS ON INPUT BEFORE DMA WD CNT IS =0 * * DETERMINE IF READ OR WRITE REQ * DMATC LDB RWFLG GET RED/WRT FLAG SSB TEST IF RED OR WRT REQ JMP DMARC 1:RED,GO TO RED CMPLT SEC * 0:WRT,CONT TO WRT CMPLT SEC * *** DMA WRITE COMPLETE PROCESSING *** * DMAWC LDA DMAC# GET DMA CH# IN SSE JSB RCDMA GO CLR & RELEASE IT * * SET-UP TO WAIT FOR LAST BYTE TO BE ACCEPTED * LDA =B024200 GET CTL WD TO EN ORAFLG & PACK'G JSB CTLWD GO OUTPUT IT LDA CMPLA GET ADDR OF CMPLT'N SEC STA IENTP PUT INTO INT ENT PNTR JMP CONTI GO WAIT FOR INT TO OCCUR * *** DMA READ COMLETE PROCESSING *** * DMARC LDA =B000006 GET CTL WD FOR FORCED INPUT CYCLE JSB CTLWD GO OUTPUT IT * * GET BALANCE OF DMA WD CNT AND COMPUTE # OF BYTES INPUT * LDA DMAC# GET DMA CH IN USE ADA =D-4 OFFSET IT TO SC FOR WDCNT INPUT IOR LIAI CONFIG LIA INSRTUCTION STA LIAD1 STORE IT SO IT CAN BE EXECUTED LIAD1 LIA 2 GET BAL OF DMA WD CNT RAL,RAL JUSTIFY NEG WD CNT ARS,ARS TO NORMAL INTEGER FMT ADA WCNTR ADD LENGTH OF USER BUF * RESULT= # WDS INPUT ALS CONVER TO + BYTES STA ULFLG SAVE TRANS LOG COMP * * RELEALSE AND CLEAR DMA CHANNEL * LDA DMAC# GET DMA CH. # IN USE JSB RCDMA G0 RELEASE & CLR DξMA CH. JMP CMPLT GOTO CMPLT'N SEC * *** RCDMA: SUBROUTINE TO RELEASE DMA CH# TO IOC AND CLEZR DMA *** * * * ENTER WITH DMA CHANNEL NUMBER IN USE IN A * RCDMA NOP ENTRY * * NEUTRALIZE DMA COMPLETION INTERRUPT LOCATION * LDB STFI GET STF INSTRUCTION ADB A ADD DMA CH# STB STFD1 CONFIGURE STF DMA INSTRUCTION ADB CLCM ADD IN BITS FOR CLC INST. STB A,I PUT INTO DMA INTERRUPT LOCATION STB CLCD1 CONFIGURE CLC DMA INSTUCTION * * TURN OFF DMA * CLCD1 CLC 6 TURN OFF DMA CHAMNEL CMPLT INTERRUPT STFD1 STF 6 TURN OFF DMA * * RELEASE DMA CHANNEL TO IOC * CPA =B6 TEST IF CH6 STA DMAC1 YES:CLR BUSY STATUS IN DMAC1 CPA =B7 NO:TEST IF CH7 STA DMAC2 YES:CLR BUSY STATUS IN DMAC2 CLA SET A=0 STA DMAC# CLR DMA CH. IN USE FLAG JMP RCDMA,I RETURN XIF SKP LST * *** INTERUPT TRANSFER COMPLET *** * * * THIS SECTION ENTERED FROM THE CONTINUATOR SECTION * WHRN A READ/WRITE TRANSFER IS COMPLETE * * ENTER WITH STATUS IN B * * UPDATE EQT STATUS * CMPLT CLB SETB=0 FOR NORMAL COMPLT STATUS CMPLS JSB UEQT2 GO UPDATE EQT WD2 * * CLEAR RFD FF BEFORE COMPLETION EXIT * RCMPL LDA =B000007 JSB CTLWD CLR RFD FF CLCC4 CLC SC,C TURN OFF INT & CLR FLAG * * CONVERT # OF BYTES TRANSFERED TO +WDS OR +BYTES PER USER REQ. * LDA ULFLG GET # OF BYTES TRANSFERED LDB UBUFL GET MODE OF REQUEST SSB TEST IF BYTES OR WDS REQUESTED JMP *+3 -:BYTES,GO ON,LEAVE AS IS INA +:WDS,ROUND UP IF ODD # XFERED ARS CONVERT IT TO WORDS * * SET BIT 15 TO INDICATE FORMAT * LDB RFMTF GET RECORD FMT FLGS ELB PUT A/B BIT INTO E RAL,ERA PUT E INTO BIT15 * * UPDATE TRANSMISSION LOG * <:6 STA EQTW3,I PUT IT INTO EQT * * CLEAR DRIVER BUSY FLAG * CLB STB DVRBF CLR DVR BUSY FLG * * SUT-UP RETURN TO .BUFER * LDA I.37 STA RETAD JSB RESTR JSB .BUFR RETAD OCT 0 EQTAD OCT 0 SKP * * STORAGE * A EQU 0 B EQU 1 * * CONSTANTS * CLCCI CLC 0,C STFI STF 0 CLCM OCT 004600 LIAI LIA 0 SC EQU 0 END (<  59310-80051 1609 S 0122 HEADER (BLIB#)              H0101 ASMB,R,L,B ** BLIB : BUS LIBRARY HEADER REV 2 ** HED ** BLIB : BUS LIBRARY HEADER ** REV A NAM BLIBA * NOTE: THE PURPOSE OF THIS ROUTINE IS TO PROVIDE A * MEANS TO IDENTIFY THE VERSION OF THE LIBRARY TAPE BY * LISTING THE FIRST NAM RECORD END #  59310-80052 1609 S 0122 REMOTE ROUT (REMOTE)              H0101 pASMB,R,L,T,C,B ** REMOTE: SWITCH BUS TO REMOTE ROUTINE ** HED ** REMOT: SWITCH BUS TO REMOTE ** REV A NAM REMOT ENT REMOT EXT .ENTR,.IOC.,CMD SKP UREF# OCT 0 MODE DEF ZERO * REMOT NOP ENTRY JSB .ENTR GET PARAM DEF UREF# ADDR'S FROM USER CALL * * CONFIGURE IOC REQUEST * LDA UREF#,I GET UNIT REFERENCE # AND =B000077 LIMIT TO 2 OCTAL DIGITS IOR RMTRC ADD IN REQUEST CODE FOR REMOTE STA RCODE PUT IT INTO CALLING SEQ. TO IOC * * EXECUTE CONTROL REQUEST TO IOC * JSB .IOC. CALL IOC RCODE OCT 030300 RCODE = 0303 CONFIGURED JMP *-2 REPEAT IF REJECTED * * CHECK MODE * LDA MODE,I GET FROM USER CALL SZA,RSS TEST IT JMP END O:"SOFT REMOTE",EXIT * >0:"LOCAL LOCK OUT,CONTINUE * * OUTPUT COMMAND FOR LOCAL LOCK OUT * JSB CMD CALL COMMAND ROTINE DEF *+3 PNTR TO RETURN DEF UREF#,I ODDR OF BUS UREF# DEF LLO ADDR OF BUFFER CONTAINING * LOCAL LOCK OUT COMMAND * * SET MODE PARAMER TO ZERO FOR DEFALT CASE * END LDA ZEROA GET ADDR OF VALUE OF 0 STA MODE PUT IT INTO PARAM ADDR LIST JMP REMOT,I EXIT * * CONSTANTS * LLO OCT 1 BUFFER LENGTH OCT 010400 LLO CMD IN UPPER HALF WD * LLO CMD = 021 OCTAL * 0 001 000 100 000 000 ZEROA DEF ZERO ADDR OF ZERO ZERO OCT 0 VALUE ZERO RMTRC OCT 030300 REQ. CODE FOR SW TO REMOTE END X  59310-80053 1609 S 0122 LOCAL ROUT (LOCL)              H0101 4#ASMB,R,L,T,C,B ** LOCL: SWITCH BUS TO LOCAL ** HED ** LOCL: SWITCH BUS TO LOCAL ** REV A NAM LOCL ENT LOCL EXT .ENTR,.IOC. SKP UREF# OCT 0 * LOCL NOP ENTRY JSB .ENTR GET ADDR'S OF PARAMS DEF UREF# FROM USER CALL * * CONFIGURE IOC REQUEST * LDA UREF#,I AND =B000077 IOR RCLOC STA RCODE * * EXECUTE CONTROL REQUEST TO IOC * JSB .IOC. RCODE OCT 030200 JMP *-2 * * EXIT * JMP LOCL,I * * CONSTANTS * RCLOC OCT 030200 END R  59310-80054 1609 S 0122 DEVICE CLEAR ROUT (DEVL)              H0101 ASMB,R,L,T,C,B ** DEVCL: CLEAR ALL DEVICES ON BUS ** HED ** DEVCL: CLEAR ALL DEVICES ON BUS ** REV A NAM DEVCL ENT DEVCL EXT .ENTR,CMD SKP UREF# OCT 0 * DEVCL NOP ENTRY JSB .ENTR GET ADDR OF BUS UREF# DEF UREF# FROM USER CALL * * OUTPUT COMMAND FOR DEVICE CLEAR * JSB CMD CALL COMMAND ROUTINE DEF *+3 PNTR TO RETURN DEF UREF#,I ADDR OF BUS UREF # DEF DCR ADDR OF BUFFER CONTAINING * DEVICE CLEAR COMMAND * EXIT * JMP DEVCL,I EXIT * * CONSTANTS * DCR OCT 1 BUFFER LENGTH OCT 012000 DCR COMMAND IN UPPER HALF * DCR CMD = 024 OCTAL * 0 001 010 000 000 000 END R  59310-80055 1609 S 0122 CMMD ROUT (CMD)              H0101 ASMB,R,L,T,C,B **CMD: BUS COMMAND ROUTINE ** REV A HED ** CMD: BUS COMMAND ROUTINE ** REV A NAM CMD,6 ENT CMD EXT .ENTR,.IOC. SKP * * * UREF# OCT 0 WHO1 OCT 0 WHAT1 OCT 0 WHO2 OCT 0 WHAT2 OCT 0 WHO3 OCT 0 DUMY OCT 0 * CMD NOP JSB .ENTR GET ADDR'S OF PARAMETERS DEF UREF# * * CONFIGURE REQUEST CODES WITH UINIT REF # * LDA RC1 IOR UREF#,I STA RC1C STA RCCLC LDA RC2 IOR UREF#,I STA RCWRT LDA RC3 IOR UREF#,I STA RCSTA * * INITIALIZE PARAMETERS * LDA PARMA GET ADDR OF FIRST PARAM IN LIST RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 STA PARMA STA PARMP PUT IT INTO POINTER CLB STB WWFLG INITILIZE WHO/WHAT FLAG STB DUMY NOP LAST PARAM ADDR TO INSURE * EXIT SKP * *** MAIN LOOP *** * LOOP LDB PARMP,I GET ADDR OF PARMETER SZB,RSS TEST FOR MORE PARAMS JMP END 0:NO MORE PARAM'S LDA B,I GET CHAR COUNT AND =B377 MASK OFF MYSTERIOUS BIT 9 CMA,INA MAKE IT NEGATIVE STA LENTH PUT IT INTO THE CALLING SEQUENCE INB SET BUFFER ADDR TO WD2 OF BUFFER STB BUFAD PUT IT INTO THE CALLING SEQUENCE * * CHECK IF DIVER IS READY FOR NEXT OPERATION * JSB .IOC. INITIATE A STATUS REQUEST RCSTA OCT 040000 RCODE = STAUTS REQUEST SSA TEST FOR COMPLETION JMP *-3 NO:REPEAT STATUS CHECK * * SET-UP AND EXECUTE CONTROL REQUEST * IF ODD # PARAM,SET INTO CONTRILLER MODE * IF EVEN # PARAM,CLEAR CONTROLLER MODE * LDB WWFLG GET WHO/WHAT MODE FLAG LDA RC1C GET CTL RCODE TO CLR CTRL MODE SLB,RSS TEST MODE IOR =B000200 WHO: SET CONTOLLER MODE STA RCCTL PUT INTO THE CALLING JS5  B .IOC. INITATE A CONTROL REQUEST RCCTL OCT 030000 CONTROL REQUEST JMP *-2 * * OUTPUT THE WHO OR WHAT FIELD * JSB .IOC. INITIATE A WRITE REQUEST RCWRT OCT 020100 RCODE=WRITE BINARY JMP *-2 REPEAT REQUEST IF REJECTED BUFAD DEF BUFAD POINTER TO BUFFER LENTH OCT 0 # OF CHAR. * * SET UP OR NEXT PARAMETER * LDB WWFLG GET WHO/WHAT INB TOGGLE IT STB WWFLG REPLACE IT ISZ PARMP INCREMENT PARAMETER POINTER JMP LOOP SKP * * ZERO OUT PARAM ADDR S FOR NEXT EXECUTION * END LDA PARMA STA PARMP LDB =D-5 CLA STA PARMP,I ISZ PARMP INB,SZB JMP *-3 LDA WWFLG GET WHO/WHAT FLAG SLA,RSS TEST IF WHO OR WHAT WAS LAST JMP CMD,I WHAT: EXIT * WHO: CLEAR CONTROLLER MODE * * CLEAR CONTROLLER MODE BEFORE EXIT * JSB .IOC. RCCLC OCT 034400 JMP *-2 JMP CMD,I SKP * * STORAGE * RC1C BSS 1 PARMP BSS 1 WWFLG BSS 1 A EQU 0 B EQU 1 * * CONSTANTS * RC1 OCT 034400 RC2 OCT 020100 RC3 OCT 040000 PARMA DEF WHO1 END   59310-80056 1609 S 0122 BUFFRD READ ROUT (READB)              H0101 ASMB,R,L,T,C,B ** READB: BUFFERED READ ** HED ** READB: BUFFERED READ ** REV A NAM READB ENT READB EXT .ENTR,.IOC.,.DIO.,.IOR.,.IOI.,.DST SKP UREF# OCT 0 FMT BSS 1 ARRAY BSS 1 #REDS BSS 1 #ELMT BSS 1 BUFR BSS 1 BUFL BSS 1 * READB NOP ENTRY JSB .ENTR DEF UREF# * * CONFIGURE I/O REQUESTS * LDA UREF#,I GET VALUE OF AND =B77 ISOLATE TO 2 OCTAL DIGITS LDB A SAVE RESULT IN B IOR RARC ADD IN REQ.CODE FOR ASCII READ STA RC1 PUT INTO CALLING STA RC2 SEQUENCES LDA SRC GET REQ. CODE FOR STATUS CHECK IOR B ADD IN STA RC3 PUT INTO CALLING STA RC4 SEQUENCES. * * INITILIZE # OF READS COUNTER * LDA #REDS,I GET VALUE OF <# OF READS> CMA,INA MAKE IT NEGATIVE STA RCNTR PUT RESULT INTO COUNTR * * INITILIZE # OF ELEMENTS PER RECORD COUNTER * LDA #ELMT,I GET VALUE OF <# OF ELEMENTS> CMA,INA MAKE IT NEGATIVE STA ELCNT PUT RESULT INTO TEMP STORAGE * * INITILIZE INPUT BUFFER POINTERS * LDA BUFR GET ADDR OF BUFFER STA BUF1A PUT INTO CALLING SEQ. OF CALLS STA BUF1B TO IOC AND FMTR LDA BUFL,I GET VALUE OF INA ARS DIVIDE IT IN HALF ADA BUFR ADD ADDR OF TO LENGTH STA BUF2A PUT RESULT IN CALLING SEQ. OF I/O CALL STA BUF2B PUT EESULT IN CALLING SEQ. OF CONV.CALL * * INITILIZE INPUT BUFFER LENGHTS * LDA BUFL,I GET VALUE OF CMA,INA MAKE IT NEGATIVE STA BUF1L PUT RESULT INTO CALLING STA BUF2L SEQENCES FOR LENGTH * * INITILIZE POINTERS TO FORMAT SPECIFICATION * LDB FMT GET ADDR OF FORMAT SPECIFICATION INB BYPASS CHAR. COUNT LDA B,I GET FIRST TWO CHAR OF FMT SPEC AND =B077400 ISOLATE UPPER CHARACTER CPA ASTR IS IT A ASTERIC CLB YES:SET B=0 FOR FREE FEILD READ * NO:LEAVE B WITH ADDR OF FMT SPEC STB FMT1 PUT IT INTO CALLS TO FMTR STB FMT2 * * INITIATE FIRST READ INTO BUFFER 1 * JSB READ1 * ** MAIN LOOP ** * LOOP ISZ RCNTR RSS JMP END1 * * INITIATE READ INTO BUFFER 2, THEN CONVERT BUFFER 1 * JSB READ2 JSB CONV1 * * TEST FOR MORE READS * ISZ RCNTR RSS JMP END2 * * INITIATE READ INTO BUFFER 1,THEN CONVERT BUFFER 2 * JSB READ1 JSB CONV2 JMP LOOP * ** END 1 ** * END1 JSB .IOC. RC3 OCT 040000 SSA JMP *-3 JSB CONV1 JMP READB,I EXIT * ** END 2 ** * END2 JSB .IOC. RC4 OCT 040000 SSA JMP *-3 JSB CONV2 JMP READB,I EXIT SKP * * SUBROUTINE TO READ INTO BUFFER 1 * READ1 NOP JSB .IOC. RC1 OCT 010000 JMP *-2 BUF1A DEF BUFR,I BUF1L OCT 0 JMP READ1,I * * SUBROUTINE TO READ INTO BUFFER 2 * READ2 NOP JSB .IOC. RC2 OCT 010000 JMP *-2 BUF2A DEF BUFR,I BUF2L OCT 0 JMP READ2,I * *** SUBROUTINE TO CONVERT BUFFER1 *** * CONV1 NOP CLA CLB,INB JSB .DIO. BUF1B DEF BUFR,I FMT1 DEF FMT,I DEF ECON1 * * INITILIZE # OF ELEMENTS COUNTER * LDA ELCNT STA ECNTR * * CONVERT EACH ELEMENT AND STORE INTO ARRAY * NEXT1 JSB .IOR. JSB .DST DEF ARRAY,I ISZ ARRAY ISZ ARRAY ISZ ECNTR JMP NEXT1 ECON1 JMP CONV1,I * *** SUBROUTINE TO CONVERT BUFFER 2 *** * CONV2 NOP CLA CLB,INB JSB .DIO. BUF2B DEF BUFR,I FMT2 DEF FMT,I DEF ECON2 * * INITILIZE # OF ELEMENTS COUNTER * LDA ELCNT o STA ECNTR * * CONVERT EACH ELEMENT AND STORE INTO ARRAY * NEXT2 JSB .IOR. JSB .DST DEF ARRAY,I ISZ ARRAY ISZ ARRAY ISZ ECNTR JMP NEXT2 ECON2 JMP CONV2,I SKP * * STORAGE * A EQU 0 B EQU 1 ELCNT OCT 1 ECNTR BSS 1 RCNTR BSS 1 * * CONSTANTS * RARC OCT 010400 SRC OCT 040000 ASTR OCT 025000 ASCII ASTERIC IN UPPER HALF END   59310-80057 1609 S 0122 FTN IOC INTFC (CIOC)              H0101 rASMB,R,L,T,C,B ** CIOC: CALL IOC ** HED ** CIOC: FORTRAN CALLABLE IOC INTERFACE ** NAM CIOC,6 ENT CIOC EXT .ENTR,.IOC. SKP * *** CIOC: CALL IOC *** * UREF# OCT 0 RCODE OCT 0 STAT OCT 0 BUFAD OCT 0 BUFL OCT 0 * CIOC NOP JSB .ENTR GET PARAM DEF UREF# ADDRESSES * * FORM WD2 (+) OF CALL TO IOC * LDA UREF#,I GET AND =B77 IOSOLATE BITS 0-5 LDB RCODE,I GET BLF POSTION IN RBL,RBL UPPER WORD IOR B MERGE AND STA WD2 PUT INO WD2 OF CALL * * FORM WD3 OF CALL TO IOC * AND =B030000 ISOLATE BITS 12-13 LDB JMPC GET JMP CMPLT INST SZA TEST IF = 1,2 OR 3 LDB JMPR YES: GET JMP REJ INST * NO: USE JMP CMPLT INST STB WD3 PUT INTO WD3 OF CALL * * DETERMINE IF CONTROL REQUEST * CPA =B030000 TEST IF CTL REQ.(RCODE =03XX) JMP SUCTL YES: GO TO CTL SET-UP SEC. * NO: CONTINUE TO R/W SET-UP SEC. * * SET-UP CALL FOR READ OR WRITE * SURW LDA BUFAD STA WD4 LDA BUFL,I STA WD5 JMP CALL JMPR JMP REJ * * SET-UP CALL FOR CTL REQUEST * SUCTL LDA JMPC GET JMP RET INSTRUCT STA WD4 PUT IT INTO WD4 OF CALL TO IOC SKP * * CALL TO IOC * CALL JSB .IOC. WD2 OCT 0 + WD3 NOP :CLEAR & STATUS REQ. * :READ,WRITE,CONTROL REQ. WD4 DEF BUFAD,I FOR READ,WRITE REQ. * FOR CONTROL REQUEST WD5 DEF BUFL,I WD6 JMP REQC FOR READ,WRITE REQ JMPC EQU WD6 * * SET-UP FLAG FOR REJ OR CMPLT RETURN * REJ ,  CCE SET E FOR REJ FLAG RSS REQC CLE * * PUT CONTENTS OF A AND B INTO STATUS BUFFER * RET STA STAT,I PUT CONTENTS OF A INTO WD1 OF STATUS BUFFER ISZ STAT SET POINTER TO WD2 STB STAT,I PUT CONTENTS OF B INTO WD2 OF STATUS BUFFER ISZ STAT SET PNTR TO WD3 CLA ERA PUT E INTO A15 STA STAT,I PUT REJ FLG INTO WD3 * * EXIT * JMP CIOC,I EXIT SKP * * VARIABLES * A EQU 0 B EQU 1 * * CONSTANTS * END   91000-80002 A S 0106 HP 91000A VERIFICATION GEN. INFORMATION AND START            H0101 TASMB,R,B,L HED 91000A VERIF -- GENERAL INFORMATION -- 10/31/73 NAM START * * THE 91000A SUBSYSTEM VERIFICATION ALLOWS THE * USER TO EXERCISE THE 91000A IN ALL MODES. * * THE PROGRAM HAS A NUMBER OF TESTS WHICH ARE CALLED BY * TYPING THE COMMAND (SEE LIST BELOW). * * THE PROGRAM ISSUES A PROMPTER (>) WHEN IT IS READY TO * ACCEPT A COMMAND. * * * * T E S T S: * * * * 1. SINGLE CHANNEL * * 1 TO 200 READINGS ARE TAKEN ON A SINGLE SPECI- * FIED CHANNEL. THE RESULTS ARE PRESENTED * AS AN AVERAGE OF ALL READINGS, THE HIGHEST * AND LOWEST READINGS AND THEIR DIFFERENCE * (PEAK-TO-PEAK), AND THE RMS ERROR BETWEEN THE * READINGS AND THE AVERAGE. * * * 2. TWO CHANNEL * * 2 TO 200 READINGS ARE TAKEN ALTERNATING * BETWEEN TWO SPECIFIED CHANNELS. THE AVERAGE, * ETC., ARE PRESENTED FOR EACH CHANNEL. * * * 3. SEQUENTIAL * * 1 TO 200 READINGS ARE TAKEN SEQUENTIALLY FROM * A SPECIFIED STARTING CHANNEL. IF THE TOTAL * NUMBER OF READINGS EXCEEDS THE NUMBER OF * CONTIGUOUS CHANNELS AVAILABLE, THE SUBSYSTEM * WILL AUTOMATICALLY RESET TO THE STARTING CHANNEL * AND RESUME THE SCAN. NO INFORMATION IS PRESENTED * DIRECTLY. A LIST OF READINGS MAY BE MADE (SEE * LIST). SKP * 4. HISTOGRAM * * 1 TO 32767 READINGS ARE TAKEN ON ONE SPECI- * FIED CHANNEL AND CATEGORIZED. EACH DIFFERENT * VALUE READ IS A CATEGORY AND THE NUMBER OF * READINGS FOUND IN A CATEGORY ARE COUNTED. * UP TO 20 CATEGORIES CAN BE USED. AN ATTEMPT * TO CREATE A 21ST CATEGORY CAUSES EARLY TERM- * INATION OF THE TEST (THE NUMBER OF READINGS * TAKEN IS PRESENTED). THE AVERAGE, P-P, HIGH, * LOW, AND RMS ERR(yOR ARE PRESENTED. * * * 5. DISPLAY * * READINGS ARE CONTINOUSLY TAKEN ON ONE SPECI- * FIED CHANNEL. THE RESULTS ARE DISPLAYED IN * THE B REGISTER (2115/2116) OR IN THE SWITCH * REGISTER (2100/2114). IF THE ANSWER TO * AVERAGE IS YES, A 16 WORD AVERAGE IS DISPLAYED. * IF THE ANSWER TO AVERAGE IS NO, EACH READING * IS DISPLAYED. * * * 6. NORMALIZE * * ISSUE THE SYSTEM NORMALIZE COMMAND. * * * 7. REPEAT * * REPEAT THE LAST TEST AS SPECIFIED. REPEAT IS * NOT AVAILABLE AFTER ENTERING A NEGATIVE * NUMBER TO ABORT INPUT REQUESTS. IT IS * ALSO NOT AVAILABLE INITIALLY. * * * 8. LIST * * LIST ANY PART OR ALL OF THE DATA BUFFER * (READINGS 1 TO 200). IF THE LAST TEST WAS * HISTOGRAM, LIST THE HISTOGRAM OVER. LIST IS * NOT AVAILABLE AFTER DISPLAY, WITH REPEAT * CONDITION SET, OR WHENEVER A TEST IS ABORTED. * * * 9. TAPE * * TAKE ALL FURTHER COMMANDS FROM TAPE READER. * THIS MAY BE A PHOTO-READER (IF AVAILABLE) OR * THE TTY. IF THE TTY IS USED (ANSWER 0 TO * TAPE-READER SELECT CODE WHEN CONFIGURING) * THIS MODE DISABLES THE KEYBOARD ABORT FEATURE. SKP * 10. KEYBOARD * * TAKE ALL FURTHER COMMANDS FROM KEYBOARD (TTY). * THIS SHOULD ALWAYS BE THE LAST COMMAND ON A * TAPE OF COMMANDS. THIS IS THE NORMAL MODE * ENTERED AFTER LOADING THE PROGRAM. * * * 11. * * * THE ASTERISK IS USED FOR COMMENTS. THIS * ALLOWS THE USER TO DOCUMENT HIS TESTS. WHEN * ENCOUNTERED THE REST OF THAT LINE IS IGNORED. * * * 12. CONDITIONS * * ALL ACTIVE CONDITIONS ARE IDENTIFIED BY THEIR * FIRST LETTER. * * * 13. INSTRUCTIONS * * PROGRAM PRINTS A BRIEF SUMMARY OF * THE OPERATING COMMANDS. * * * C O N D I T I O N S: * * * TO PLACE CONDITIONS ON A TEST, TYPE THE WORD "SET" * FOLLOWED BY THE DESIRED CONDITION. * * * A. SET DELAY * * ALL TESTS FOLLOWING WILL USE A SOFTWARE DELAY * BETWEEN READINGS OF A MULTIPLE OF 10 MICRO- * SECONDS SPECIFIED AT THIS TIME. * * * B. SET PACER * * ALL TESTS FOLLOWING WILL BE TIMED BY AN * EXTERNAL PACER. DELAY IS OVERRIDDEN * IF PREVIOUSLY SET. * * * C. SET REPEAT * * REPEAT THE SPECIFIED TEST WITHOUT PRINTOUTS * UNTIL A KEYBOARD KEY IS PRESSED. HISTOGRAM * DOES CONTINUE PRINTING ALL INFORMATION * UNLESS SWITCH 15 IS UP. WITH SWITCH 15 * UP ONLY THE AVG WILL BE PRINTED. SKP * * * * CONDITIONS ARE CLEARED AS FOLLOWS: * * A. CLEAR DELAY * B. CLEAR PACER * C. CLEAR REPEAT * D. CLEAR ALL (CLEARS ALL CONDITIONS) * * WHENEVER THE USER LOSES TRACK OF HIS CONDITIONS, REFER * TO THE COMMAND "CONDITIONS" (12). * * * A D D I T I O N A L N O T E S: * * * SWITCH 15 ON THE SWITCH REGISTER MAY BE USED TO TERM- * INATE A LISTING EARLY (LINE-BY-LINE). WITH REPEAT * CONDITION SET AND HISTOGRAM CALLED, SWITCH 15=1 * WILL CAUSE ONLY THE AVERAGE TO BE PRINTED. ANY TIME * LIST IS CALLED WHILE SWITCH 15 IS UP WILL RESULT * IN LISTING ONE READING ONLY. * * ANY TEST MAY BE ABORTED DURING ITS SETUP BY ENTERING * A NEGATIVE NUMBER TO ANY NUMERICAL INPUT REQUEST * (I.E., NO=; CHANNEL=; ETC.). REPEAT WILL NOT BE * AVAILABLE AFTER THIS TYPE OF ABORT. * * ANY TEST MAY BE ABORTED WHILE RUNNING BY PRESSING ANY * KEYBOARD KEY (UNLESS IN TAPE MODE WITHOUT A PHOTO- * READER). LIST WILL NOT BE AVAILABLE BUT REPEAT WILL. * * PRESYSING A KEYBOARD KEY IS THE PROPER WAY TO TERMINATE * THE DISPLAY MODE OR ANY TEST WITH REPEAT SET. * HED START -- 91000A VERIF -- CONFIGURING LINK -- 10/31/73 * CONFIGURING ROUTINE LINK * * * THIS ROUTINE IS A ONE WORD * LINK TO CNFGR WHICH IS IN * THE CODE PROCEDURES SECTION. * * IT ALLOWS THE USER TO GET * TO THE CONFIGURING ROUTINE BY * USING 2000 (OCTAL) AS A START ADDRESS. * * STARTING AT OCTAL 2 WILL * BYPASS THIS ROUTINE AND GO * DIRECTLY TO THE ALGOL PORTION. SPC 2 ENT START EXT CNFGR SPC 1 START JMP CNFGR SPC 1 END Fb  91000-80003 A S 0106 HP 91000A VERIFICATION VERIF - ALGOL             H0101 HPAL,L,B,"VERIF" BEGIN COMMENT OCTOBER 31,1973 THIS ALGOL PROGRAM IS PRIMARILY A CONTROL ROUTINE. MOST OF THE WORK IS DONE IN ASSEMBLY LANGUAGE CODE PROCEDURES. THE ALGOL WRITES MESSAGES, READS QUANTITIES AND CHANNEL NUMBERS, CHECKS FOR ERROR ENTRIES, SETS UP THE REQUESTED TEST AND CALLS THE 2313B DRIVER (THROUGH THE FTN-ALGOL INTER- FACE, V2313), AND LISTS TEST RESULTS. ; PROCEDURE STATPAC(DATA,NUMBERTAKEN,MODE,HOWMANY); COMMENT THIS PROCEDURE CALCULATES THE AVERAGE OF ALL READINGS TAKEN ON ONE CHANNEL IN THE SI, TW, OR HI TESTS. IT ALSO CALCULATES THE HIGHEST AND LOWEST VALUES AND THEIR DIFFERENCE (PEAK-TO-PEAK). FINALLY, IT CALCULATES THE RMS ERROR BETWEEN THE READINGS AND THE AVERAGE. IT THEN PRINTS THESE VALUES ; VALUE MODE,HOWMANY; INTEGER NUMBERTAKEN,MODE,HOWMANY; REAL DATA; CODE; PROCEDURE I2313(UNIT,TYPE,PACE,MODE,CHANNELBUFFER,NUMBER, DATABUFFER,DIFFERENTIAL); COMMENT THIS IS THE ALGOL/FTN-DRIVER INTERFACE WHICH CALLS THE 2313B DRIVER (D.62V) ; VALUE UNIT,TYPE,PACE,MODE,NUMBER,DIFFERENTIAL; INTEGER UNIT,TYPE,PACE,MODE,NUMBER,CHANNELBUFFER, DIFFERENTIAL; REAL DATABUFFER; CODE; PROCEDURE INTRP(WHERE,SC,TC,RS,BS,SS,HI,DI,ADDRESS,CO, LAD,REPEATOK,USEGAIN,LOOP,PACED,RATE,RANGE,EXTSS,LISTOK,IN); COMMENT THIS PROCEDURE IS THE COMMAND INTERPRETER. IT DOES THE COMMUNICATING WITH THE OPERATOR WHEN FIRST CALLING A TEST OR SETTING A CONDITION ; INTEGER WHERE,SC,TC,RS,BS,SS,HI,DI,ADDRESS,LOOP, LISTOK,USEGAIN,PACED,RANGE,EXTSS,REPEATOK,CO,IN,RATE,LAD; CODE; PROCEDURE CNVRT(OUTBUFFER,INBUFFER,RGAIN,RGAIN2,START,NUMBER); COMMENT  THIS PROCEDURE CONVERTS THE RAW INTEGER DATA IN THE BUFFER INTO REAL VOLTAGES (INCLUDING ADJUSTMENT FOR GAIN); VALUE RGAIN,RGAIN2,START,NUMBER; INTEGER START,NUMBER; REAL OUTBUFFER,INBUFFER,RGAIN,RGAIN2; CODE; & & & & & & PROCEDURE DSPLY(CHANNEL,PACED,S); COMMENT THIS PROCEDURE OPERATES THE 91000A SUBSYSTEM DIRECTLY, DISPLAYING THE RESULTS IN THE B AND SWITCH REGISTERS ; VALUE CHANNEL,PACED; INTEGER CHANNEL,PACED,S; CODE; PROCEDURE HISTO(CHANNEL,PACED,RGAIN,HOWMANY,BUCKETS, NUMBERBUFFER,READINGBUFFER); COMMENT THIS PROCEDURE OPERATES THE 91000A SYSTEM DIRECTLY TO TAKE UP TO 32767 READINGS AND CATEGORIZE THEM INTO A HISTOGRAM ; VALUE CHANNEL,PACED; INTEGER CHANNEL,PACED,BUCKETS,HOWMANY,NUMBERBUFFER; REAL READINGBUFFER,RGAIN; CODE; PROCEDURE EXIT(TEST,WHERETO); COMMENT THIS PROCEDURE IS USED TO ABORT THE TEST OR TO GET OUT OF LOOP OR DISPLAY. IT SETS UP A SPECIAL TTY INTERRUPT AND JUMPS OPERATION DIRECTLY TO THE SPECIFIED LABEL UPON TTY INTERRUPT ; VALUE TEST; INTEGER TEST; LABEL WHERETO; CODE; PROCEDURE READ1(IN,NO,P1); COMMENT READ1 AND READ2 ARE REALLY THE SAME PRO- CEDURE BUT WITH DIFFERENT LENGTH CALLS. THE READX PROCEDURE, WHICH THESE CALL, READS THE TTY OR PHOTO-READER DEPENDING UPON WHAT IS SPECIFIED (TAPE OR KEYBOARD). ; VALUE IN,NO; INTEGER IN,NO,P1; CODE; PROCEDURE READ2(IN,NO,P1,P2); COMMENT SEE READ1; VALUE IN,NO; INTEGER IN,NO,P1,P2; CODE; PROCEDURE DELAY; COMMENT DELAY BETWEEN SCANS; CODE; INTEGER IN_1,OUT_2,CHANNEL,CHANNEL2,GAIN2,RATE, RANGE,EXTSS,DONE,LOOP_0,DUMMY_0,I,J,K,MODE, 0 LISTOK,WHERE,HOWMANY,START,FINISH,PACED_0,FIRST,LAD_0, ADDRESS,FIRSTCHANNEL,SC,CO,GAIN,ANSR, TC,RS,BS,SS,HI,DI,USEGAIN_0,NUMBER,REPEATOK,SAVEHOWMANY, DIFFERENTIAL,STATUS,BUCKETS,QUANT,SAVE,ABRT1; INTEGER ARRAY CHANNELBUFFER[1:200],N[1:25]; COMMENT CHANNELBUFFER IS USED TO STORE THE CHANNEL CODES ; & & & & & & & REAL ARRAY DATA[1:200]; COMMENT DATA IS USED IN TWO WAYS. THE DRIVER FILLS THE SECOND HALF OF DATA WITH INTEGERS (CONVERSION DATA). CNVRT TAKES THESE INTEGERS AND PUTS REAL VOLTAGES INTO DATA IN A NORMAL WAY. THAT IS, READING ONE IS IN DATA [1] AND IS THE FIRST TWO COMPUTER WORDS IN THE ARRAY; REAL RDUMMY_0.0,RGAIN,RGAIN2; BOOLEAN FIRSTTIME_TRUE; LABEL INITIALIZE,BACK,NUMBERIN,GETOUT, HISTLIST,SINGLECHANNEL,TWOCHANNEL,DISPLAY, TAKEREADINGS,WAIT,HISTOGRAM, ABORT,TERM,RITEABORT,READIN, ENDLIST,LISTER,DIRECTIONS,INFO, REPEAT,READDIFF,NORMALIZE,DODISPLAY, GETREADINGS,DISABLELIST,INABORT,STATREAD; SWITCH OPERATE_INITIALIZE,INITIALIZE,DIRECTIONS, BACK,INITIALIZE,INITIALIZE, DISPLAY,REPEAT,LISTER,NORMALIZE; COMMENT THIS SWITCH USES 'WHERE' TO DETERMINE WHAT INFORMATION (IF ANY) MUST BE ENTERED BY THE USER. ; SWITCH DOIT_SINGLECHANNEL,TWOCHANNEL,BACK, BACK,SINGLECHANNEL,HISTOGRAM; COMMENT AGAIN, 'WHERE' IS THE ARGUMENT. ONLY THE FIRST 6 VALUES OF 'WHERE' CAN GET TO THIS SWITCH. THE 2ND REFERENCE FOR SINGLE- CHANNEL IS USED BY SEQUENTIAL SCAN ; FORMAT F1(/" 91000A VERIF 10/31/73"), F3(A2),F4(" NO= _"), F6(" CHANNEL_"), F9(" "),F11(" = _"), F12(" ??"),F13(" WANT DIRECTIONS? _"), F14(" DIFF? _"), F16(" AVERAGE? _"), F18(" 1ST CH"),F19(" 2ND CH"), Fy20(" ABORT"), F24(I10),F25(" START,FINISH= _"),F26(7X,F10.6," _"), F28(" RDGS TAKEN"),F29(F11.6," _"), F30(" NO FINISH:",I7," RDGS"), F31(I6),F32(14X,"_"), F33(//"1-200 RDGS TOTAL UNLESS NOTED"// "A PROMPTER IS ISSUED:"// ">"//"RESPOND WITH:"// " SINGLE CH = ONE CH"/, " TWO CH = ALTERNATING CHS"/, " SEQUENTIAL = FROM START CH"/, " HISTOGRAM = 1-32767 RDGS ON 1 CH ARE CATEGORIZED"/, " DISPLAY = LOOP ON 1 CH, DISPLAY RDGS IN B OR SW REG"/ " AVERAGE=YES: 16 WD AVG; BIT 0", " (LSB)=0.3125MV"/, " AVERAGE=NO: DISPLAY EACH RDG;", " BIT 4 (LSB)=5.0MV"/, " REPEAT = REPEAT LAST TEST AS SPECIFIED"/ " LIST = LIST ANY PART OF DATA BUFFER"/ " NORMALIZE = ISSUE SYSTEM NORMALIZE"/ " CONDITIONS = LIST COND THAT ARE SET"/ "INSTRUCTIONS = GIVE BRIEF INSTRUCTIONS"/ " TAPE = INPUT COMMANDS FROM TAPE-RDR"/ " KEYBOARD = INPUT COMMANDS FROM KEYBD"/ " * = COMMENT - IGNORE LINE"// "CONDITIONS:"// "SET DELAY (LIMITS SCAN RATE)"/ "SET PACER (OVERRIDES DELAY)"/ "SET REPEAT"// "CLEAR DELAY"/,"CLEAR PACER"/,"CLEAR REPEAT"/, "CLEAR ALL (CLEARS ALL COND)",//"NOTES:",// "SW15 = 1 CAUSES EXIT FROM LIST",// "ABORT REQUEST WITH NEG # (REPEAT DISABLED)",// "ABORT A TEST; EXIT REPEAT OR DISPLAY WITH ANY KEYBD KEY ", "(LIST DISABLED)",///); PROCEDURE READNUM; BEGIN READIN: WRITE(OUT,F6);WRITE(OUT,F11);CHANNEL_201; READ1(IN,1,CHANNEL); IF CHANNEL THEN GO INABORT; IF CHANNEL>15 THEN BEGIN WRITE(OUT,F12);GO READIN;END;CHANNEL_CHANNEL+16; END; COMMENT CLEAR OUT ANY ABORT MODES (FOR RESTART);r EXIT(0,GETOUT);WRITE(OUT,F1); CO_-1; IF FIRSTTIME THEN BEGIN INFO: WRITE(OUT,F13); READ1(IN,-1,ANSR); IF ANSR= "YE" THEN WRITE(OUT,F33) ELSE IF ANSR# "NO" THEN GO TO INFO; COMMENT IF THE PROGRAM WAS JUST LOADED, ALLOW THE INSTRUCTIONS TO BE PRINTED. C DON'T PRINT THE INSTRUCTIONS ON RESTART; CO_FIRSTTIME_FALSE; WRITE(OUT,F9); END; COMMENT INITIALLY NO DATA IS AVAILABLE TO LIST AND NO VALID TEST IS DEFINED (NO REPEAT ALLOWED); REPEATOK_0; & COMMENT LIST MUST, ALSO, BE DISABLED WHEN LOOPING; DISABLELIST: LISTOK_0; NORMALIZE: COMMENT ISSUE SYSTEM NORMALIZE; I2313(8,0,0,0,DUMMY,0,RDUMMY,0); BACK: COMMENT THE DESIRED TEST AND CONDITIONS ARE TO BE ENTERED; INTRP(WHERE,SC,TC,RS,BS,SS,HI,DI,ADDRESS,CO,LAD, REPEATOK,USEGAIN,LOOP,PACED,RATE,RANGE,EXTSS,LISTOK,IN); REPEATOK_LISTOK_FIRSTCHANNEL_-1; & & & & GO OPERATE[WHERE]; COMMENT THIS SWITCH DETERMINES WHETHER OR NOT A TEST REQUIRING INPUT HAS BEEN ENTERED < <<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> VALUE OF WHERE TEST ENTERED DESTINATION WHY ----- ------------ ----------- --- 1 SINGLE CHANNEL INITIALIZE GET NO OF READINGS 2 TWO CHANNEL INITIALIZE GET NO OF READINGS 3 INSTRUCTIONS DIRECTIONS GIVE INSTRUCTIONS 4 NONE BACK SPARE 5 SEQUENTIAL SCAN INITIALIZE GET NO OF READINGS 6 HISTOGRAM INITIALIZE GET NO OF READINGS 7 DISPLAY DISPLAY SKIP TO CHANNEL NO 8 REPEAT REPEAT DO TEST OVER 9 LIST LISTER LIST DATA 10 NORMALIZE NORMALIZE ISSUE SYS NORM <<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; INITIALIZE: I_GAIN2_RGAIN2_1; J_NUMBER_STATUS_0;Q COMMENT GET NO. OF READINGS; NUMBERIN: HOWMANY_0; WRITE(OUT,F4); READ1(IN,1,HOWMANY); COMMENT NEGATIVE NO. ABORTS; IF HOWMANY THEN GO INABORT ELSE COMMENT IS IT A VALID NUMBER?; IF HOWMANY=0 OR NOT HI AND HOWMANY>200 OR TC AND HOWMANY=1 THEN BEGIN WRITE(OUT,F12); GO TO NUMBERIN; END; SAVEHOWMANY_HOWMANY; IF SS THEN WRITE(OUT,F18);READNUM; GO DOIT[WHERE]; COMMENT THIS SWITCH DETERMINES WHICH TEST TO BE CON- STRUCTED (SEE DEFINITION OF WHERE ABOVE); SINGLECHANNEL: COMMENT ALSO SEQUENTIALSCAN; CHANNELBUFFER[1]_CHANNEL; MODE_0; COMMENT FOR SEQUENTIAL SCAN ASK IF CHANNELS ARE DIFFERENTIAL OR SINGLE-ENDED AND SET THE INDICATOR; IF SS THEN BEGIN MODE_2; DIFFERENTIAL_0; READDIFF: WRITE(OUT,F14); DONE_0; READ1(IN,-1,DONE); IF DONE="AB" THEN GO INABORT; IF DONE="YE" THEN DIFFERENTIAL_-1 ELSE IF DONE#"NO" THEN GO READDIFF; END; GO TAKEREADINGS; TWOCHANNEL: COMMENT ON FIRST TIME THROUGH (ON EACH CALL TO 2C) SAVE FIRST CHANNEL INFORMATION AND GO BACK TO INPUT SECTION; IF FIRSTCHANNEL THEN BEGIN CHANNEL2_CHANNEL; FIRSTCHANNEL_0; READNUM;GO DOIT[WHERE]; END; & & & COMMENT FORM OUTPUT BUFFER CONTAINING ALTERNATING CHANNEL NUMBERS; FOR I_1 STEP 2 UNTIL 199 DO BEGIN CHANNELBUFFER[I]_CHANNEL2; CHANNELBUFFER[I+1]_CHANNEL; END; MODE_1; TAKEREADINGS: EXIT(-1,GETOUT); GETREADINGS: COMMENT INITIATE READINGS; I2313(8,2,PACED,MODE,CHANNELBUFFER[1],HOWMANY, DATA[101],DIFFERENTIAL); WAIT: COMMENT MAKE STATUS CALL TO SEE IF READINGS HAVE ALL BEEN TAKEN; I2313(8,1,STATUS,0,DUMMY,0,RDUMMY,0); IF STATUS THEN GO WAIT; COMMENT NOT DONE; COMMENT DONE; IF LOOP THEN BEGIN DELAY; GO GETREADINGS;END; & COMMENT CONVERT THE DATA FROM SINGLECHANNEL, TWOCHANNEL, OR SEQUENTIALSCAN. HERE ALL GAIN INFORMATION IS PASSED IN ONE CALL AND ALL DATA CONVERTED ; CNVRT(DATA[1],DATA[101],1.0,1.0,0,HOWMANY); DONE_2; EXIT(0,GETOUT); COMMENT CLEAR ABORT FEATURE; IF TC THEN BEGIN DONE_4; COMMENT CALL STATPAC TO OPERATE ON FIRST CHANNEL DATA ON TWOCHANNEL (STATPAC MODE = 3); WRITE(OUT,F18); STATPAC(DATA[1],N[1],3,HOWMANY); WRITE(OUT,F19); END ELSE IF NOT SC THEN BEGIN WRITE(OUT,F28); GO BACK; END; COMMENT CALL STATPAC FOR SECOND CHANNEL DATA ON TWOCHANNEL (MODE = 4) OR FOR ALL DATA ON SINGLECHANNEL (MODE = 2); STATPAC(DATA[1],N[1],DONE,HOWMANY); GO BACK; COMMENT ALL DONE, GO LOOK FOR A NEW COMMAND; & DISPLAY: READNUM; COMMENT ASK IF AVERAGE IS DESIRED; STATREAD: WRITE(OUT,F16); DONE_0; READ1(IN,-1,DONE); STATUS_0; IF DONE="AB" THEN GO INABORT; IF DONE="YE" THEN STATUS_-1 ELSE IF DONE#"NO" THEN GO STATREAD; DODISPLAY: DSPLY(CHANNEL,PACED,STATUS); GO DISABLELIST; COMMENT NOTHING TO LIST AFTER DISPLAY; REPEAT: IF DI THEN GO DODISPLAY; IF NOT HI THEN GO TAKEREADINGS; & HISTOGRAM: NUMBER_HOWMANY; RGAIN_1.0; HISTO(CHANNEL,PACED,RGAIN, NUMBER,BUCKETS,N[1],DATA[1]); COMMENT N[21] IS TRUE IF AN ABORT WAS MADE; IF N[21] THEN GO GETOUT; COMMENT THE NUMBER IS NEGATIVE IF THE HISTOGRAM TERM- INATES EARLY AND GIVES THE NUMBER OF READINGS YET TO TAKE; IF NUMBER THEN WRITE(OUT,F30,HOWMANY+NUMBER); COMMENT CALL STATPAC FOR THE HISTOGRAM CATEGORIES (STATPAC MODE = 1); STATPAC(DATA[1],N[1],1,BUCKETS); HISTLIST: COMMENT LIST ALL CATEGORIES FOUND IN HISTOGRAM; FOR I_1 TO BUCKETS DO BEGIN COMMENT CHECK SWITCH 15 TO ESCAPE FROM LIST; IF KEYS THEN GO TERM; WRITE(OUT,F29,DATA[I]); WRITE(OUT,F24,N[I]); END; TERM: IF LOOP THEN BEGIN WRITE(OUT,F9); GO TO HISTOGRAM; END; GO ENDLIST; COMMENT THIS IS THE LISTER CALLED BY THE LIST COMMAND; LISTER: IF HI THEN GO HISTLIST; START_FINISH_0; HOWMANY_SAVEHOWMANY; COMMENT READ THE FIRST AND LAST READING NUMBERS TO BE LISTED; WRITE(OUT,F25); READ2(IN,2,START,FINISH); COMMENT GET OUT IF EITHER IS NEGATIVE; IF START OR FINISH THEN GO BACK; COMMENT VALID FIRST AND LAST?; IF START>FINISH OR START=0 OR START>HOWMANY THEN GO TO LISTER; IF FINISH>HOWMANY THEN FINISH_HOWMANY; WRITE(OUT,F9); IF NOT TC THEN BEGIN COMMENT START LISTING GROUPS; FOR J_START TO FINISH DO BEGIN WRITE(OUT,F29,DATA[J]);WRITE(OUT,F9); IF KEYS THEN GO ENDLIST;END;END; COMMENT PRINT TWO COLUMNS FOR TWOCHANNEL; IF TC THEN BEGIN DONE_1; IF START MOD 2=0 THEN BEGIN DONE_-1; WRITE(OUT,F32); END; FOR I_START TO FINISH DO BEGIN WRITE(OUT,F29,DATA[I]); IF DONE THEN WRITE(OUT,F9); DONE_-DONE; & COMMENT ESCAPE?; IF KEYS THEN GO ENDLIST; END; IF NOT DONE THEN WRITE(OUT,F9); END; ENDLIST: WRITE(OUT,F9); GO BACK; COMMENT PRINT 'ABORT' AND DISABLE LIST. ALSO WILL DO A SYSTEM NORMALIZE; ABORT: LISTOK_0; RITEABORT: WRITE(OUT,F20); GO NORMALIZE; INABORT: COMMENT THIS IS WHERE A NEGATIVE INPUT SENDS YOU FOR ABORT; REPEATOK_0; GO RITEABORT; GETOUT: COMMENT THIS IS WHERE ABORT FEATURE SENDS YOU WHEN A TTY KEY IS PRESSED. WHEN LOOPING THIS IS A NORMAL EXIT AND IT IS NOT DESIRED THAT ABORT BE PRINTED; IF LOOP THEN GO DISABLELIST; GO ABORT; DIRECTIONS: REPEATOK_LISTOK_0; WRITE(OUT,F33); WRITE(OUT,F9); GO hG640BACK; END$ db6   91000-80004 A S 0306 HP 91000A VERFICATION CODE PROCEDURES - CODES             H0103 "ASMB,R,B,L,C HED 91000A VERIF -- CODE PROCEDURES 10/31/73 * * * THIS ASSEMBLY LANGUAGE PROGRAM * CONTAINS 8 CODE PROCEDURES USED * BY THE 91000A VERIFICATION PROGRAM. * * IT ALSO CONTAINS A PROGRAM FOR CONFIGURING * AND A NUMBER OF SERVICE SUB-ROUTINES USED * BY THE PROCEDURES * * THE DIFFERENT PROCEDURES ARE IDENTIFIED * BY THEIR ENTRY POINTS. * * 1. INTRP - COMMAND INTERPRETER * 2. CNVRT - CONVERTS DATA TO VOLTAGE * 3. EXIT - SET-UP AND CHECK FOR ESCAPE * 4. DELAY - DELAYS FOR SPECIFIED TIME (10 USEC MULTIPLES) * 5. HISTO - HISTOGRAM ROUTINE * 6. DSPLY - REGISTER DISPLAY ROUTINE * 7. STATP - COMPUTES AVG, P-P, HIGH, LOW, & RMS * 8. CNFGR - RECONFIGURE BCS AND CONFIGURE DSPLY/HISTO * 9. READX - READS FROM TTY OR PHOTOREADER WITH ENTRY * POINTS: READ1, READ2 * * NAM CODES ENT INTRP,CNVRT,STATP,DSPLY ENT HISTO,EXIT,CNFGR,DELAY ENT READ1,READ2,GONLY EXT .IOC.,.DIO.,.IOI.,.SQT.,SQRT,.IOR. EXT FLOAT,.FDV,.DTA.,.ENTR,.RTOI,.IAR. SUP HED 91000A VERIF -- CODE PROCEDURES -- INTRP 10/31/73 ********************************** * * * INTRP -- COMMAND INTERPRETER * * * ********************************** SPC 1 * THE PROMPTER IS ISSUED BY THIS PROCEDURE. * * THE COMMAND IS SCANNED AND THE PROPER * INDICATORS SET FOR THE ALGOL. * * ERRORS IN COMMANDS ARE TRAPPED AND THE * PROMPTER IS RE-ISSUED. * * WHEN SETTING THE PACER, ITS PARAMETERS ARE * REQUESTED AND READ. SPC 2 WHERE NOP SC. NOP TC. NOP RS. NOP BS. NOP SS. NOP HI. NOP DI. NOP NOP CO. NOP NOP RPTOK NOP GONLY NOP LOOP NOP PACED NOP NOP NOP NOP LSTOK NOP BATCH NOP SPC 1 INTRP NOP JSB .ENTR DEF WHERE SKP LDA CO.,I PRINT SSA COND|ITIONS? JMP .COND YES SPC 1 START JSB .IOC. WRITE OUT OCT 20002 THE JMP *-2 PROMPTER (>) DEF CMND AND HOLD ONE DEC 1 THE LINE SPC 1 JSB READ4 \\\\\\\\\\\ DEF *+4 READ IN \ DEF DEVYC THE > DEF MIN1 COMMAND/ DEF PIN /////////// SPC 1 CLB CLEAR LDA DI.,I DATA DISPLAY SSA IN SWITCH OTB 1 REGISTER SPC 1 LDA DESC IS THE AND UPPER INPUT A CPA ASTER COMMENT? JMP START YES SPC 1 LDA DESC CHECK COMMAND: CPA LI LIST? JMP LISTR YES CPA RE REPEAT? JMP REPET YES CPA SE SET A CONDITION? JMP SET MAYBE CPA CL CLEAR A CONDITION? JMP CLEAR YES SPC 1 CPA CO PRINT CONDITIONS? JMP COND YES SPC 1 CPA BA GO TAPE? JMP BAT YES CPA TY GO KEYBOARD? JMP TYPE1 YES SKP GO.ON LDA NB12 INITIALIZE STA CNTR1 COUNTERS LDA IASC AND STA PNTR1 POINTERS LDA NB10 FOR STA CNTR FINDING LDA PARAM TEST TO STA PNTR BE CALLED AGAIN LDA PNTR1,I HAS A TEST CPA DESC BEEN FOUND JMP EKUAL YES ISZ PNTR1 NO - POINT TO NEXT TEST ISZ CNTR1 CHECKED ALL TESTS & FOUND NONE? JMP AGAIN NO - LOOK AGAIN ERRR JSB ERROR YES - WRITE "??" JMP START GO GIVE PROMPTER AGAIN EKUAL INB TEST HAS BEEN FOUND - INC TEST # ISZ PNTR ADVANCE TEST BOOLEAN POINTER ISZ CNTR INC CNTR FOR VALID TEST BOOLEAN ZERO NOP ISZ CNTR1 DONE?  JMP EKUAL NO STB WHERE,I YES - SET TEST INDICATOR CCB FORM "TRUE" LDA PNTR,I GET BOOLEAN STA PNTR LOCATION LDA CNTR CHECK FOR VALID SSA,RSS TEST BOOLEAN? JMP INTRP,I NO SPC 1 CLA STA SC.,I \\\\\\\\\\\ STA TC.,I \ STA RS.,I CLEAR \ STA BS.,I PREVIOUS > STA SS.,I COMMAND / STA HI.,I / STA DI.,I /////////// SPC 1 STB PNTR,I SET TRUE INTO TEST JMP INTRP,I GO BACK TO ALGOL SKP LISTR LDA LSTOK,I IS THERE SSA A DATA BUFFER TO LIST? JMP GO.ON YES JMP ERRR NO SPC 1 REPET LDA RPTOK,I IS THERE A TEST SSA THAT CAN BE REPEATED? JMP GO.ON YES JMP ERRR NO SPC 1 SET LDA DES WHAT IS THE THIRD CHAR? AND UPPER WAS IT A T? CPA T RSS YES - SO IT IS SET JMP GO.ON NO - SO MUST BE SEQUENTIAL CCB GET CONDITION LDA ST TO BE SET RSS SPC 1 CLEAR LDA FROM GET COND TO BE CLEARED ALF,ALF POSITION AND AND B377 ISOLATE FIRST CHARACTER CPA P PACER COND? JMP PCR YES CPA R REPEAT COND? JMP LOP YES CPA D SET DELAY? JMP SETD YES CPA ALL CLEAR ALL CONDITIONS? JMP CLRAL YES JMP ERRR INVALID COND - WRITE "??" SPC 2 LOP STA LSTOK,I CLEAR LIST CAPABILITY STB LOOP,I SET OR CLEAR LOOP CONDITION JMP START RE-ISSUE PROMPTER CLRAL SSB CLEAR REQUEST? JMP ERRR NO STB LOOP,I YES - CLEAR LOOP STB PACED,I CLEAR PACER JMP SETD2 CLEAR DELAY SPC 1 BAT LDA FIVE \\\\ \\\\\\\ LBL1 JMP LBL2 OR NOP (NO P.R.)\ CLB,RSS \ TYPE1 LDB ABRT SET TAPE OR \ STB LBL4 KEYBOARD MODE > LDA ONE / LBL2 STA DEVYC / STA BATCH,I / JMP START /////////// SPC 1 SPC 1 PCR STB PACED,I SET OR CLEAR PACE MODE JMP START AND RE-ISSUE PROMPTER SPC 1 SKP .COND JSB .IOC. PRINT OUT OCT 20002 " COND:" JMP *-2 DEF MSG4 DEC 3 SPC 1 COND CLB STB CO.,I CLEAR COND REQUEST STB OUTBF INDICATOR LDA PACED,I PACED SSA,RSS CONDITION? JMP LABL1 NO - GO ON LDA P YES - SET UP IOR SPACE P TO PRINT ADB .CO.. STA B,I ISZ OUTBF SPC 1 LABL1 LDA LOOP,I REPEAT SSA,RSS CONDITION? JMP LABL2 NO - GO ON LDA R YES - SET UP IOR SPACE R TO PRINT LDB OUTBF ADB .CO.. STA B,I ISZ OUTBF SPC 1 LABL2 LDA DELC DELAY SSA,RSS CONDITION? JMP LABL5 NO - GO ON LDA D YES - SET UP IOR SPACE D TO PRINT LDB OUTBF ADB .CO.. STA B,I ISZ OUTBF SPC 1 LABL5 LDB OUTBF SET OUTPUT PRINT STB LABL7 LENGTH FOR CONDITIONS SZB WERE THERE ANY COND? JMP LABL6 YES - GO PRINT THEM LDA NO NO - SET UP STA .CO..,I NONE TO PRINT CLB,INB LDA NE ADB .CO.. STA B,I LDA TWO SET PRINT LENGTH STA LABL7 FOR NONE SPC 1 LABL6 JSB .IOC. PRINT OCT 20002 CONDITIONS JMP *-2 OR .CO.. DEF TOP NONE LABL7 NOP JMP START SETD SSB,RSS SET DELAY? JMP SETD2 NO SPC 1 *c JSB .IOC. YES- REQUEST OCT 20002 DELAY JMP *-2 VALUE DEF MSG7 DEC -8 SPC 1 JSB READ1 READ IN DEF SETD1 DELAY DEF DEVYC VALUE DEF ONE (# OF DEF PIN MILLISECONDS) SPC 1 SETD1 LDB PIN RBL,CLE,SLB,ERB ABORT? JMP START YES CMB,INB SET COUNTER FOR SETD2 STB DELC # OF MILLISECONDS JMP START SPC 2 ****************** * * * END OF INTRP * * * ****************** HED 91000A VERIF -- CODE PROCEDURES -- CNVRT 10/31/73 ******************************************* * * * CNVRT -- CONVERT DATA TO REAL VOLTAGE * * * ******************************************* SPC 1 * THIS ROUTINE TAKES INTEGER DATA STORED * IN THE UPPER 12 BITS OF EACH WORD OF * AN INTEGER ARRAY (IN THIS CASE, THE * UPPER HALF OF THE REAL ARRAY - DATA) * AND CONVERTS IT TO REAL VOLTAGE * STORING IT IN A REAL ARRAY (DATA). * * TWO GAINS ARE USED ALTERNATING BUT * BOTH WILL OFTEN BE THE SAME. SPC 2 VOLTS NOP DATA NOP GAIN1 NOP GAIN2 NOP FIRST NOP NUMBR NOP SPC 1 CNVRT NOP JSB .ENTR DEF VOLTS SPC 1 * ** INITIALIZE ** SPC 1 DLD GAIN1,I OBTAIN DST FGAIN GAIN1 DLD GAIN2,I OBTAIN DST SGAIN GAIN2 LDA NUMBR,I SET COUNTER CMA,INA FOR NUMBER OF READINGS STA NUMBR TO BE CONVERTED LDA DATA SET INPUT BUFFER ADA FIRST,I POINTER TO STARTING STA DATA POINT LDA FIRST,I SET OUTPUT BUFFER ALS POINTER ADA VOLTS TO STARTING STA VOLTS POINT SKP LDA TEST SET UP ALTERNATING TEST MORE STA DESC SAVE AŗLTERNATING TEST LDB XL3 GET SECOND GAIN SLA FIRST OR SECOND? LDB XL2 FIRST - GET FIRST GAIN STB XL4 SET PROPER GAIN LDA DATA,I GET RAW DATA WORD ARS,ARS DIVIDE BY 16 ARS,ARS (RIGHT JUSTIFY) JSB FLOAT MAKE INTO REAL NUMBER FMP .005 MAKE IT VOLTAGE JSB .FDV ADJUST VOLTAGE XL4 DEF FGAIN BY AMOUNT OF GAIN STA VOLTS,I STORE ISZ VOLTS VOLTAGE STB VOLTS,I IN OUTPUT ISZ VOLTS ARRAY (INTO ALGOL) ISZ DATA NEXT DATA ISZ NUMBR DONE? RSS NO JMP CNVRT,I YES - RETURN TO ALGOL LDA DESC GET ALTERNATING TEST RAR SWITCH ALTERNATING TEST JMP MORE NEXT DATA SPC 2 ****************** * * * END OF CNVRT * * * ****************** HED 91000A VERIF -- CODE PROCEDURES -- EXIT 10/31/73 ********************************************* * * * EXIT -- SET UP AND CHECK TTY FOR ESCAPE * * * ********************************************* SPC 1 * THE TTY TRAP CELL LINK IS MADE * TO POINT AT I.EX BELOW SO THAT * AN INTERRUPT FROM THE TTY COMES HERE. * * THE LINK IS RESTORED ON INTERRUPT AND * CONTROL SENT TO A LABEL PASSED IN THE CALL. * * A CLEAR REQUEST HERE RESTORES THE LINK. * * THE 91000A TRAP CELL IS RESTORED WHENEVER * THE TTY LINK IS RESTORED. SPC 2 TEST1 NOP LABEL NOP SPC 1 EXIT NOP JSB .ENTR DEF TEST1 SPC 1 LDA TEST1,I LBL4 INA,SZA SET UP? JMP RSET NO - GO CLEAR IT JSB CHECK YES - IS TTY BUSY? LDA TTYIN GET NEW TRAP CELL LINK STA TTYL,I SET UP LINK LDA INTTY GET TTY INPUT MODE WORD AND OTA1 OTA TTY OUTPUT STCC1 STC TTY,C ENCODE| *($ THE TTY FOR INPUT JMP EXIT,I SPC 1 RSET JSB CLRIT GO CLEAR JMP EXIT,I SPC 1 I.EX NOP INTERRUPT ENTRY POINT JSB CLRIT GO CLEAR JMP LABEL,I GO TO ALGOL INTERRUPT POINT SPC 1 CLRIT NOP LDA TTYLC GET BCS TTY LINK CLC1 CLC TTY TURN OFF TTY STF1 STF TTY RESTORE FLAG STA TTYL,I RESTORE TRAP LINK CLC2 CLC .2313 TURN OFF 91000A LDA TCC RESTORE STA SC,I TRAP CELL STF2 STF .2313 JMP CLRIT,I SPC 1 * ** END OF EXIT ** * HED 91000A VERIF -- CODE PROCEDURES -- DELAY 10/31/73 ************************************************* * * * DELAY -- WAIT A SPECIFIED TIME INTERVAL * * * ************************************************* SPC 2 DELAY NOP ISZ DELAY SET RETURN POINT STA ASAVE SAVE A REGISTER LDA DELC GET 10 USEC MULTIPLE SZA,RSS IS IT 0? JMP DEL2 YES - JUST RETURN (NO DELAY) STA COU1 NO - SET COUNTER SPC 1 DEL1 LDA MIN2 GET 10 USEC COUNTER ISZ A \ JMP *-1 \ COUNT ISZ COU1 / DOWN JMP DEL1 / SPC 1 DEL2 LDA ASAVE RESTORE A REGISTER JMP DELAY,I SPC 1 * ** END OF DELAY ** HED 91000A VERIF -- CODE PROCEDURES -- DSPLY/HISTO 10/31/73 ****************************************** * * * DSPLY/HISTO -- COMBINED PROCEDURES * * * * DSPLY -- ADC DISPLAY FOR CALIBRATION * * HISTO -- HISTOGRAM ROUTINE * * * ****************************************** SPC 1 * DSPLY OR HISTO IS ENTERED AND * INITIAL SET-UP WHICH IS COMMON * IS ACCOMPLISHED. SPC 1 *************************************************** * * * COMBINED ENTRY POINT FOR BOTH DSPLY AND HISTO * * * *************************************************** SPC 2 * ** CALLING PARAMETER LIST ** SPC 1 CHANN NOP PACER NOP GAIN NOP QUANT NOP BUKTS NOP NBUFF NOP RBUFF NOP SPC 1 * ** START OF ROUTINE ** SPC 1 HISTO NOP DSPLY EQU HISTO JSB .ENTR DEF CHANN SPC 1 JSB EXIT SET UP DEF *+3 TTY ESCAPE DEF MIN1 CAPABILITY DEF ABORT SPC 1 LDA DI.,I DISPLAY SSA MODE? JMP K6 YES LDB NBUFF SET ADB D20 UP STB ATEST ABORT STA ATEST,I INDICATOR SKP K6 CLA STA SC,I CLEAR THE TRAP CELL SPC 1 LDA N.16 SET MPX STA MASK HISTO MASK SPC 1 LDA CHANN,I GET MPX ADDRESS IOR B1513 AND FORM COMMAND WORD LDB PACER,I TO BE SSB PACED? IOR BIT12 YES OTA5 OTA .2313 SET UP CHANNEL STCC5 STC .2313,C NUMBER LDA DI.,I IS THIS SSA,RSS DISPLAY MODE? JMP HIST NO - THEN HISTOGRAM * * THIS IS THE REGISTER DISPLAY ROUTINE * LDA JMPX LDB GAIN,I 16 WORD AVERAGE? SSB CLA NO - DISPLAY EACH READING STA JMPY YES LDA LDAX SET SSB,RSS PROPER LDA LDAY WORD STA LDAW COUNTER DISP CLA CLEAR SUM TO MAKE STA SUM ROOM FOR NEXT DISPLAY LDAW LDA N.16 OR MIN1 -- SET WORD COUNTER STA CNTR REED SFS .2313 JMP *-1 LIA1 LIA .2313 GET A DATA WORD STA KTVU AND SAVE IT LDA PACER,I SSA,RSS PACED? JSB DELAY NO - SO DELAY NOP YES - CONTINUE LDA KTVU AND BEXL4 STCC6 STC .2313,C START NEXT READING JMPY JMP AHEAD OR NOP FOR AVG. ARS,ARS DIVIDE ARS,ARS BY 16 ADA SUM ADD DATA AHEAD STA SUM TO THE SUM ISZ CNTR DONE WITH AVG? JMP REED NO - GET NEXT DATA WORD LDB SUM YES - DISPLAY RESULT IN THE OTB 1 B & SWITCH REGISTERS JMP DISP START NEW AVERAGE JMPX JMP AHEAD SPC 2 * ** END OF DISPLAY LOOP PORTION OF DSPLY/HISTO ** SKP * HERE BEGINS THE HISTOGRAM PORTION SPC 1 HIST CCA INITIALIZE # ADA NBUFF BUFFER STA NBUFF POINTER LDA FSTIM SET STA K8 FIRST TIME LDA QUANT,I SET STA EQTAD CMA,INA NUMBER STA QUANT,I COUNTER SPC 1 SFS5 SFS .2313 IGNORE FIRST JMP *-1 READING (GARBAGE) SSB,RSS PACED? JSB DELAY NO - SO DELAY NOP STCC7 STC .2313,C START FIRST GOOD READING CLA,INA \ STA J J_1 STA K K_1 LDA RBUFF SET ADA B62 POINTER STA PNTR / ADA MIN1 / STA INARY / SPC 1 READ SFS .2313 JMP *-1 LIA2 LIA .2313 GET READING (R) LDB PACER,I \ DELAY BETWEEN SSB,RSS > READINGS IF JSB DELAY / NOT PACED NOP ANRDG STC .2313,C START NEXT READING AND MASK K8 JMP STORE 1ST TIME (NOP THE REST) EQUAL JSB HCHK IS R=,>, OR < D[J]? ISZ PNTR R>D[J] ISZ J J_J+1 LDB J \ CMB,INB \ IS ADB K / J>K? SSB,RSS / JMP EQUAL NO LDB K \ YES CPB D20 K=20? JMP DONE YES - TOO MANY BUCKETS ISZ K NO - K_K+1 (NEW BUCKET) FSTIM JMP STORE SPC 1 INCR LDB NBUFF \ ADB J > N[J]_N[J]+U ISZ B,I / JMP CHEK SKP LOWER LDB J \ CPB ONE2 J=1? JMP K11 YES ADB MIN1 \ NO STB J \ LDB PNTR > J_J-1 ADB MIN1 / STB PNTR / JSB HCHK IS R=,>, OR < D[J]? ISZ J ISZ PNTR K11 LDB K R>D[J] CPB D20 K=20? JMP DONE YES - TOO MANY BUCKETS STB I NO - I_K 6 ISZ K K_K+1 (NEW BUCKET) STA TEMP SAVE R SPC 1 SORT LDB INARY \\\\\\\\\\\\ ADB I \ \ LDA B,I > D[I+1]_ \ INB / D[I] \ STA B,I / \ LDB NBUFF \ \ ADB I \ \ LDA B,I > N[I+1]_N[I] \ SORT INB / / UP STA B,I / / LDB I \ / CPB J \ I=J? / JMP *+4 YES - DONE / ADB MIN1 NO - I_I-1 / STB I / / JMP SORT //////////// SPC 1 LDA TEMP RESTORE R SPC 1 STORE STA PNTR,I D[J]_R LDB NBUFF \ ADB J \ N[J]_1 CLA,INA / STA B,I / CLA SET FIRST TIME INSTRUCTION STA K8 FOR REMAINING READINGS SPC 1 CHEK ISZ QUANT,I DONE? JMP READ NO - ANOTHER READING CLA SFS7 SFS .2313 YES JMP *-1 LDB CLEAN ISSUE OTA6 OTB .2313 CLEAN STCC8 STC .2313,C UP SKP * FINISHED FILLING THE BUCKETS SPC 1 STA BOTOM LDA RBUFF \ STA OUTRY \ ISZ INARY \ SET UP CALL LDA GAIN / TO CNVRT STA G1 / STA G2 / JSB CNVRT CALL DEF NDLST CNVRT OUTRY NOP \ INARY NOP \ G1 NOP \ PARAMETER G2 NOP / LIST DEF ZERO / DEF K / NDLST LDA K SET NUMBER OF BUCKETS STA BUKTS,I FOR RETURN SPC 1 LDA EQTAD \ ADA TEST2 \ IOR BOTOM \ IF (HOWMANY<10000 OR AND LOOP,I / BUCKETS>20) AND LOOP SSA,RSS / THEN WAIT JMP SFS8 / LDA N.4 \ STA BOTOM \ CLA \ STA TOP \ WAIT ISZ TOP / LOOP: JMP *-1 / (1-2.5 SEC) ISZ BOTOM / JMP *-5 / SPC 1 SFS8 SFS .2313 JMP *-1 SPC 1 ENND JSB CLRIT CLEAR ESCAPE CAPABILITY JMP HISTO,I GO BACK TO ALGOL SPC 1 ABORT LDA HI.,I DISPLAY SSA,RSS MODE? JMP ENND YES STA ATEST,I SET ABORT INDICATOR JMP ENND SPC 2 DONE CCA TOO MANY BUCKETS JMP SFS7 SPC 2 **************************** * * * END OF DSPLY/HISTO * * * **************************** HED 91000A VERIF -- CODE PROCEDURES -- STATPAC 10/31/73 ************************************************** * * * STATPAC -- CALCULATE AVG, P-P, HI, LO, & RMS * * * ************************************************** SPC 1 * THIS PROCEDURE CALCULATES THE AVERAGE OF ALL READINGS TAKEN ON * ONE CHANNEL IN THE SINGLE CHANNEL, TWO CHANNEL, OR HISTOGRAM * TESTS. IT ALSO CALCULATES THE HIGHEST AND LOWEST VALUES AND * THEIR DIFFERENCE (PEAK-TO-PEAK). FINALLY, IT CALCULATES THE * RMS ERROR BETWEEN THE READINGS AND THE AVERAGE. IT THEN PRINTS * THESE RESULTS. * * * MODE = 1 FOR HISTOGRAM * MODE = 2 FOR SINGLE CHANNEL * MODE = 3 FOR TWO CHANNEL (1ST CHANNEL) * MODE = 4 FOR TWO CHANNEL (2ND CHANNEL) SPC 2 RDGS NOP #TAKN NOP MODE NOP #RDGS NOP SPC 1 STATP NOP JSB .ENTR DEF RDGS SPC 2 LDB #RDGS,I \\\\\\\\\\\\\\\\\\\\\\\ LDA MODE,I \ CPA ONE2 TOTAL_ IF MODE=1 THEN 0 \ JMP LBL5 ELSE IF MODE=2 THEN \ CPA TWO HOWMANY ELSE \ RSS HOWMANY/2; \ BRS  / SZB,RSS TOTAL NEVER <1 / INB IF MODE#0 / RSS / LBL5 CLB / STB TOTAL /////////////////////// SPC 1 CLB DIV TWO STA QUOT MODE\2 STB REMDR AND MODE MOD 2 CLA CLB DST RMS RMS_AVG_0.0; DST AVG INA STA NUM NUMBER_1; CMA ADA RDGS STA RDGS SKP LDA QUOT \\\\\\\\\\\\\\\\\\\\\\ IOR REMDR \ ALS MEAN_BOTTOM_ \ ADA RDGS DATA[MODE\2 OR \ STA TEMP MODE MOD 2]; / DLD TEMP,I / DST BOTOM / DST MEAN /////////////////////// SPC 1 LDA MODE,I --------------------------\ CPA ONE2 \ JMP XYZ1 \ DLD BOTOM \ JMP XYZ2 TOP_IF MODE=1 THEN \ XYZ1 LDA #RDGS,I DATA[HOWMANY] ELSE BOTTOM; > ALS / ADA RDGS / STA TEMP / DLD TEMP,I / XYZ2 DST TOP --------------------------/ SPC 1 ******************************************************************** CCA * * ADA #TAKN * * STA #TAKN * FOR I_MODE * LDA QUOT * STEP MODE\2+MODE MOD 2 * ADA REMDR * UNTIL HOWMANY DO * STA STEP * * LDA MODE,I * BEGIN * XYZ3 STA I ******************************** *  * LDB A ******************************** CMB,INB * * ADB #RDGS,I * ** TEST FOR END OF LOOP ** * SSB * * JMP XYZ10 * DONE! * * ******************************** * * ALS \ * ADA RDGS \ * STA TEMP > VOLTAGE_DATA[I]; * DLD TEMP,I / * DST VOLTS / * * * LDA MODE,I \\\\\\\\\\\\\\\\\ * CPA ONE2 \ * RSS \ * JMP XYZ4 \ * LDA I \ \ * ADA #TAKN \ NUMBER_ > MODE=1 * LDA A,I / NUMBERTAKEN[I]; / * STA NUM / / * ADA TOTAL \ TOTAL_ / * STA TOTAL / TOTAL+NUMBER; / * JMP XYZ6 ///////////////// * SKP XYZ4 DLD TOP \\\\\\\\\\\\\\\\\\\\ * FSB VOLTS \ \ * SSA,RSS \ IF VOLTAGE>TOP \ * JMP XYZ5 / THEN TOP_ \ * DLD VOLTS / VOLTAGE; \ * DST TOP / \MODE * XYZ5 DLD VOLTS \ / #1 * FSB BOTOM \ IF VOLTAGE AVG_MEAN+AVG/TOTAL; FDV TOTAL / FAD MEAN / DST AVG / SKP ******************************************************************** LDA QUOT * FOR I_MODE\2 OR MODE MOD 2 * IOR REMDR * STEP MODE\2+MODE MOD 2 * XYZ7 STA I * UNTIL HOWMANY DO BEGIN * * ******************************** * * LDB A ******************************** CMB,INB * * ADB #RDGS,I * ** TEST FOR END OF LOOP ** * SSB * * JMP XYZ11 * DONE! * * ******************************** * * CLB,INB \\\\\\\\\\\\\\\\\\\\\\ * CPB MODE,I \ * RSS \ * JMP XYZ8 \ MODE * ADA #TAKN \  / =1 * LDA A,I > NUMBER_ / * STA NUM / NUMBERTAKEN[I]; / * * ////////////////////// * * * XYZ8 LDA I \----------------------\ * ALS \ ) \ * ADA RDGS \ (DATA[I] ) \ * STA TEMP > -AVG) ) \ * DLD TEMP,I / ) \ * FSB AVG / ) RMS_ \ * DST TEMP / ) RMS+ \ * JSB .RTOI \ ) (DATA[I] \* DEF TEMP \ ( )^2 ) -AVG)^2 * DEF TWO / ) *NUMBER/* DST TEMP / ) / * LDA NUM \ ) / * JSB FLOAT > ( )^2*NUMBER ) / * FMP TEMP / ) / * FAD RMS \ RMS_RMS+ ) / * DST RMS / ( )^2*NUMBER; ) / * * -----------------------/ * * * LDA I ******************************** ADA STEP * NEXT I * JMP XYZ7 * * ******************************************************************** SKP XYZ11 DLD RMS \ FDV TOTAL \ RMS_ JSB SQRT / SQRT(RMS/TOTAL); DST RMS / SPC 1 *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ LDA TWO + + CLB + WRITE(OUT,FOR1,AVG,TOP- + JSB .DIO. + BOTTOM,TOP,BOTTOM,RMS); + DEF FOR1 + + DEF ND ++++++++++++++++++++++++++++++++ * 7 + DLD AVG \ PRINT + JSB .IOR. / AVG + * + JSB .DTA. + * + ND LIA 1 \ + AND LOOP,I \ SKIP REST OF PRINT + SSA / IF LOOP AND SW15 + JMP .END / + * + LDA TWO \ + CLB \ + JSB .DIO. > SET UP REST OF PRINT + DEF FOR2 / + DEF .END / + * + DLD TOP \ + FSB BOTOM > PRINT + JSB .IOR. / P-P + * + DLD TOP \ PRINT + JSB .IOR. / HI + * + DLD BOTOM \ PRINT + JSB .IOR. / LO + * + DLD RMS \ PRINT + JSB .IOR. / RMS + * + * ++++++++++++++++++++++++++++++++ * + + JSB .DTA. + END OF PRINT + * + + *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,.B@<++++++++ SPC 2 .END JMP STATP,I SPC 2 ******************** * * * END OF STATPAC * * * ******************** SB HED 91000A VERIF -- CODE PROCEDURES -- CNFGR 10/31/73 ***************************************** * * * CNFGR -- CONFIGURE I/O INSTRUCTIONS * * * ***************************************** SPC 1 * WHEN STARTING ADDRESS IS OCTAL 2000 * A JUMP TO HERE OCCURS SO THAT ALL * DEVICES CAN BE IDENTIFIED. SPC 2 CNFGR CLC 0,C CLA JSB FRST SAVE SOME LOCATIONS (1ST TIME) LDB TTYLC \\\\\\\\\\\\\\\\\\\ STB TTYL,I RESTORE TTY LINK \ LDB TCC RESTORE 91000A \ STB SC,I TRAP CELL \ NOP CLEAR ALL \ NOP POSSIBLE \ NOT STA LOOP,I TEST \ FIRST STA PACED,I CONDITIONS / TIME STA DELC / INA SET / STA DEVYC KEYBOARD / STA BATCH,I MODE / LDA ABRT SET ABORT FEATURE / STA LBL4 /////////////////// SPC 1 JSB ADDRS GET EQT ADDRS LDA TWO SET EQT LENGTH STA B,I TO TWO INB MAKE ADDRS OF 1ST WORD STB EQTAD OF TTY ENTRY AND SAVE ADB THREE MAKE ADDRS OF 4TH WORD LDA B,I OF TTY ENTRY AND GET DRVR ADRS STA TAD SAVE DRIVER D.00 ENTRY POINT LDB EQTAD,I GET OLD SELECT CODE LDB B,I GET TRAP CELL CONTENTS SPC 1 IN1 LIA 1 READ NEW SELECT CODE AND B77 AND ISOLATE IT JSB SCHK IS IT VALID? HLT 1B NO JMP IN1 TRY AGAIN STA EQTAD,I YES - PUT IN EQT STA TTYSC SAVE SC FOR TTY LDA TTYSC,I SAVE CONTENTS OF CELL FOR STA TTY11 ANOTHER DEVICE STB TTYSC,I SET TTY TRAP CELL SPC 1 JSB .IOC. CLEAR I/O ONE2 OCT 1 ON! TTY SKP IN2 LDA DMES1 GO GET 91000A LDB ML2 SELECT JSB GETIT CODE CPA TTYSC SAME AS TTY? RSS YES - OOPS! JSB SCHK IS IT VALID? JSB ERROR NO JMP IN2 TTY AGAIN STA SC SAVE SELECT CODE SPC 1 JSB ADDRS GET EQT ADDRS ADB FIVE SET FOR 91000A STB EQTAD ENTRY AND SAVE LDB B,I GET OLD 91000A SC STA EQTAD,I SET NEW 91000A SC LDA B,I GET TRAP CELL CONTENTS CPB TTYSC MAKE SURE THIS IS THE LDA TTY11 PROPER TRAP CELL CONT. STA TCC SAVE CONTENTS STA SC,I SET NEW TRAP CELL SPC 2 IN3 LDA DMES2 GO GET PHOTO- LDB ML2 READER SELECT JSB GETIT CODE SZA,RSS IS IT ZERO? JMP TONLY YES - NO PHOTOREADER CPA TTYSC SAME AS TTY? JMP *+4 YES - OOPS! CPA SC SAME AS 91000A? RSS YES - OOPS TOO! JSB SCHK IS IT VALID? JSB ERROR NO JMP IN3 TRY AGAIN STA TSC SAVE SELECT CODE SPC 1 JSB ADDRS GET EQT ADDRS LDA THREE CHANGE EQT LENGTH STA B,I TO THREE LDA TSC GET PR SELECT CODE ADB B11 SET EQT ADDRS FOR PR ENTRY STA B,I PUT NEW SC IN EQT LDA TTYSC,I GET TTY TRAP CELL CONTENTS STA TSC,I AND SET FOR PR ADB THREE SET EQT ADDRS FOR DRVR ENTRY LDA TAD GET TTY DRIVER ENTRY STA B,I AND SET INTO PR EQT ENTRY SPC 1 LDA LBL3 SET UP TAPE MODE RSS FOR PHOTO-READER TONLY CLA SET UP TAPE MODE STA LBL1 FOR TTY SKP LDA SC GET 91000A SELECT CODE IOR SFSX FORM SFS XX INSTRUCTION (91000A) STA SFS5 \ STA READ \ AND STA SFS7 > W STORE IT STA SFS8 / STA REED / SPC 1 XOR B500 FORM OTA XX INSTRUCTION (91000A) STA OTA5 \ AND STA OTA6 / STORE IT SPC 1 IOR B1100 FORM STC XX,C INSTRUCTION (91000A) STA STCC5 \ STA STCC6 \ AND STA STCC7 > STORE IT STA ANRDG / STA STCC8 / SPC 1 XOR B9B11 FORM CLC XX INSTRUCTION (91000A) STA CLC2 AND STORE IT SPC 1 XOR B4600 FORM STF XX INSTRUCTION (91000A) STA STF2 AND STORE IT SPC 1 IOR B400 FORM LIA XX INSTRUCTION (91000A) STA LIA1 \ AND STA LIA2 / STORE IT SPC 1 LDA OTA6 IOR B4600 STA OTA6 SPC 1 LDA TTYSC SET IOR OTAX MODE STA OTA1 COMMAND IOR B1100 FORM STC XX,C INSTRUCTION (TTY) STA STCC1 AND STORE IT XOR B9B11 FORM CLC XX INSTRUCTION (TTY) STA CLC1 AND STORE IT XOR B4600 FORM STF XX INSTRUCTION (TTY) STA STF1 AND STORE IT LDA TTYSC,I SAVE TRAP AND B77 CELL LINK STA TTYL AND LINK LDA A,I CONTENTS STA TTYLC (TTY) JMP 2B GO ON TO ALGOL SKP ************************************************* * * * GETIT -- GET TTY OR PHOTOREADER SELECT CODE * * * ************************************************* SPC 2 GETIT NOP STA MESS PUT MESSAGE PARAMETERS STB ML INTO CALL TO IOC JSB .IOC. OUTPUT OCT 20002 REQUEST JMP *-2 FOR A MESS NOP SELECT ML NOP CODE CLA,INA \ CLB,INB \ JSB .DIO. \ DEF FMT3 ׋ > INPUT NEW DEF *+2 / SELECT CODE JSB .IOI. / JMP GETIT,I / SPC 3 ************************************************* * * * FRST - SAVE SOME LOCATIONS, FIRST TIME ONLY * * * ************************************************* SPC 2 ORG WHERE FRST NOP LDB LBL4 SAVE ABORT STB ABRT CAPABILITY LDB LBL1 SAVE NORMAL STB LBL3 TAPE MODE LDB DEFIO GET ELB,CLE,ERB AND LDB B,I SAVE ADB B301 *FMT ERROR STB DEFIO ADDRESS LDB DEFER SET UP *FMT STB DEFIO,I ERROR ESCAPE ISZ DEFIO AND RETURN LDB FRST CLEAR THE ADB MIN1 CALL TO STA B,I THIS ROUTINE ADB EQTAD RETURN TO CNFGR ROUTINE JMP B,I AFTER "NOT FIRST TIME" AREA SPC 1 B301 OCT 301 USED ONLY BY DEFER JMP FMTER THIS ROUTINE ORR SKP ***************************************** * * * SCHK -- CHECK FOR VALID SELECT CODE * * * ***************************************** SPC 2 SCHK NOP STA GETIT SAVE SC ADA NB10 IS IT SSA MORE THAN 7? JMP SCHK,I NO - ERROR RETURN SPC 1 LDA GETIT IS IT CMA,INA LESS THAN ADA B67 70? SSA JMP SCHK,I NO - ERROR RETURN LDA GETIT RESTORE SC ISZ SCHK SET OK ISZ SCHK RETURN JMP SCHK,I SPC 4 ******************************* * * * ADDRS -- FIND EQT ADDRESS * * * ******************************* SPC 2 ORB ADDRS NOP LDB SQTAD GET SQT ADDRESS 3 SSB,RSS IS IT INDIRECT? JMP *+4 NO ELB,CLE,ERB YES - ELIM I BIT LDB B,I GET NEXT LEVEL JMP *-4 GO CHECK AGAIN ADB SIX OK, MAKE EQT ADDRESS JMP ADDRS,I HED 91000A VERIF -- CODE PROCEDURES -- SERVICE ROUTINES ******************************************* * * * CHECK -- WAIT FOR TTY TO BE AVAILABLE * * * ******************************************* SPC 2 CHECK NOP JSB .IOC. STATUS CALL OCT 40001 TO IOC SSA BUSY JMP *-3 YES JMP CHECK,I NO SPC 4 ********************************* * * * ERROR -- PRINT " ??" ON TTY * * * ********************************* SPC 2 ERROR NOP JSB .IOC. OUTPUT OCT 20002 MESSAGE JMP *-2 TO DEF WRONG TTY DEC -3 ( ??) JMP ERROR,I SKP *********************************************** * * * HCHK -- CHECK FOR R=,>, OR < D[J] (HISTO) * * * *********************************************** SPC 2 HCHK NOP LDB PNTR,I \ CPA B R=D[J]? JMP INCR YES SSA NO - R<0? JMP *+4 YES SSB NO - D[J]<0? JMP HCHK,I YES - (R>D[J]) JMP *+3 NO SSB,RSS - D[J]<0? JMP LOWER NO - (RD[J]? SSB / JMP LOWER NO - (RD[J]) SPC 3 *************************************** * * y * FORMATTER OVERLAY FOR *FMT ERRORS * * * *************************************** SPC 2 FMTER LDB BIGST GET LARGE NUMBER LDA NMBR,I \ AND HI.,I > HISTO & READ1? SSA / CLB YES - GET A 0 STB P1,I PUT 0 OR LG # IN PARAMETER JMP DEFIO,I RETURN TO FORMATTER ORR HED 91000A VERIF -- CODE PROCEDURES -- READX 10/31/73 ******************************************** * * * READX -- READ FROM TTY OR PHOTO-READER * * * ******************************************** SPC 1 * THIS ROUTINE READS A 72 CHARACTER * STRING FROM EITHER THE TTY OR * THE PHOTOREADER. * * FOR THE PHOTOREADER, THE ENTIRE * STRING IS PRINTED ON THE TTY. * * FOR NUMBERS THE FORMATTER IS * THEN USED FOR INTERNAL CONVERSION. SPC 2 * ** CALLING PARAMETER LIST ** SPC 1 DVICE NOP NMBR NOP P1 NOP NOP NOP NOP SPC 2 * ** START OF ROUTINE ** SPC 1 READ4 NOP ALL ENTRY READ1 EQU READ4 NAMES ARE READ2 EQU READ4 THE SAME JSB .ENTR DEF DVICE SPC 1 LDA DVICE,I IOR REDIT SET READ REQUEST STA *+2 AND STORE IT JSB .IOC. READ THE OCT 10401 OR OCT 10005 JMP *-2 PHOTOREADER DEF DESC OR TTY LONG DEC -72 (72-CHAR STRING) LDA DVICE,I GET DEVICE TYPE IOR BIT14 MAKE STATUS REQUEST CODE STA *+2 AND STORE IN CALL STAT JSB .IOC. CHECK INPUT OCT 40005 UNIT STATUS SSA DONE? JMP STAT NO - TRY AGAIN ELB,CLE,ERB YES - USE TRANS LOG LDA B SET NEGATIVE CMA,INA FOR CHARACTERS STA L41 SET OUTPUT STRING LENGTH ] SKP LDA B SET POINTER INA TO FIRST B1100 ARS UNUSED ADA DEFST BUFFER STA PNTR WORD INB STORE ADB LONG COMMA BRS PAIRS SZB,RSS IN JMP LW1 THE LDA COMMA REST STA PNTR,I OF ISZ PNTR THE INB,SZB STRING JMP *-3 BUFFER SPC 1 LW1 CLB,INB PHOTO- CPB DVICE,I READER? JMP L42 NO - TTY JSB .IOC. OUTPUT OCT 20002 THE JMP *-2 STRING DEF DESC ON TTY L41 DEC -72 SPC 1 L42 LDA NMBR,I FREE-FIELD NUMBERS SSA OR ASCII CHAR? JMP ALPHA ASCII JSB CHECK WAIT FOR TTY TO FINISH CLA \\\\\\\\\\\\\ CLB,INB \ JSB .DIO. \ DEFST DEF DESC \ OCT 0 CALL FOR \ DEF L43 INTEGER / LDA NMBR,I CONVERSION / LDB P1 / JSB .IAR. / L43 JMP READ4,I ///////////// ALPHA LDA DESC MOVE ASCII CHARACTERS STA P1,I INTO PROPER STORAGE JMP READ4,I SPC 2 ****************** * * * END OF READX * * * ****************** HED 91000A VERIF -- CODE PROCEDURES -- CONSTANTS, ETC *************************************** * * * CONSTANTS, STORAGE, MESSAGES, ETC * * * *************************************** SPC 1 * ** CONSTANTS ** SPC 1 ORB A EQU 0 ALL OCT 101 INTRP ASTER OCT 25000 INTRP SPC 1 B EQU 1 BA ASC 1,TA INTRP B11 OCT 11 INTRP,CNFGR B62 OCT 62 DSPLY/HISTO B67 OCT 67 SCHK B77 OCT 77 CNFGR B377 OCT 377 INTRP B400 OCT 400 INTRP,CNFGR B500 OCT 500 CNFGR B1513 OCT 120000 DSPLY/HISTO B9B11 OCT 5000 CNFGR B4600 OCT 4600 CNFGR BIT12 OCT 10000 DSPLY/HISTO BIT14 OCT 40000 READX BIGST OCT 77777 FMTER BEXL4 OCT 177760 DSPLY/HISTO SPC 1 CL ASC 1,CL INTRP CLEAN OCT 120000 DSPLY/HISTO CMND ASC 1,>_ INTRP CO ASC 1,CO INTRP COMMA ASC 1,,, READX SPC 1 D OCT 104 INTRP ASC(NULL D) D20 DEC 20 DSPLY/HISTO DEFIO DEF .DTA. CNFGR DEVYC OCT 1 INTRP,CNFGR DMES1 DEF MES1 CNFGR DMES2 DEF MES2 CNFGR SPC 1 FIVE OCT 5 INTRP,CNFGR FMT3 ASC 4,(K6) GETIT FOR1 ASC 9,(" AVG="F10.6"_") STATPAC FOR2 ASC 24,(" PP="F10.6" HI="F10.6" LO="F10.6" RMS="F10.8) SKP * ** CONSTANTS, CONT. ** SPC 1 SPC 1 IASC DEF NO INTRP INTTY OCT 140000 EXIT SPC 1 LDAX LDA N.16 DSPLY LDAY LDA MIN1 DSPLY SPC 1 MES1 OCT 6412 CNFGR ASC 11, 91000A SELECT CODE= _ CNFGR MES2 ASC 12, TAPE-RDR SELECT CODE= _ CNFGR MIN1 OCT -1 INTRP,DSPLY/HISTO,FRST MIN2 OCT -2 DELAY ML2 DEC 12 CNFGR MSG4 ASC 3, COND: INTRP MSG7 ASC 4, MULT= _ INTRP SPC 1 NB10 OCT -10 INTRP,SCHK NB12 OCT -12 INTRP NE ASC 1,NE INTRP N.4 DEC -4 DSPLY/HISTO N.16 DEC -16 DSPLY/HISTO SPC 1 OTAX OTA 0 CNFGR SPC 1 P OCT 120 INTRP (ASC NULL-P) PARAM DEF WHERE INTRP SPC 1 R OCT 122 INTRP (ASC, NULL-R) REDIT OCT 10401 READX SPC 1 SFSX SFS 0 CNFGR SIX OCT 6 ADDRS SPACE OCT 20000 INTRP SQTAD DEF .SQT. ADDRS SPC 1 T OCT 52000 INTRP (ASC T-NULL) TEST OCT 52525 CNVRT TEST2 DEC -10000 DSPLY/HISTO THREE OCT 3 CNFGR TTYIN DEF I.EX EXIT TTY EQU 12B EXIT TWO OCT 2 INTRP,STATPAC,CNFGR TY ASC 1,KE INTRP SPC 1 UPPER OCT 177400 INTRP,READX SPC 1 WRONG ASC 2, ?? ERROR SPC 1 XL2 DEF FGAIN CNVRT XL3 DEF SGAIN CNVRT SPC 1 .005 DEC .005 CNVRT .2313 EQU 11B SKP * ** INTRP SPECIAL CONSTANTS ** SPC 1 NO ASC 1,NO \ LI ASC 1,LI \ RE ASC 1,RE \ ASC 1,DI \ ASC 1,HI \ DO NOT SE ASC 1,SE / RE-ARRANGE NOP / ASC 1,IN / ASC 1,TW / ASC 1,SI / SPC 2 * ** STORAGE ** SPC 2 DESC NOP DES NOP ST NOP FROM NOP SUM NOP KTVU NOP ATEST NOP FGAIN NOP NOP I NOP J NOP K NOP MASK NOP COU1 NOP SGAIN NOP NOP ASAVE NOP TEMP NOP NOP AVG NOP NOP MEAN NOP NOP TOP BSS 2 BOTOM BSS 2 EQTAD OCT 17 BSS 44 SKP SPC 3 ABRT NOP INTRP,CNFGR,FRST SPC 1 CNTR EQU ADDRS INTRP, DESCR CNTR1 NOP INTRP SPC 1 DELC NOP INTRP,DELAY SPC 1 LBL3 NOP CNFGR,INTRP SPC 1 SPC 1 NUM EQU K STATPAC SPC 1 PIN NOP INTRP,DESCR OUTBF NOP \ INTRP, DESCR PNTR OCT 57400 INTRP, DSPLY/HISTO, HCHK, READX PNTR1 NOP INTRP SPC 1 QUOT EQU ATEST STATPAC SPC 1 REMDR EQU FROM STATPAC RMS EQU SGAIN STATPAC SPC 1 SC NOP EXIT, DSPLY/HISTO, CNFGR STEP EQU J STATPAC SPC 1 TAD NOP CNFGR TCC NOP CNFGR,EXIT TOTAL EQU FGAIN STATPAC TSC NOP CNFGR TTY11 NOP CNFGR <:6TTYL NOP EXIT,CNFGR TTYLC NOP EXIT,CNFGR TTYSC NOP CNFGR **************************** * * * END OF CODE PROCEDURES * * * **************************** SPC 1 END /< " 91062-18001 A S 0122 BCS RELO TAPE START             H0101 uASMBҬB NAMSA NԠSA ԠVMSN SAԠNP SBVMSN DƠ+ HԠB NDSA   91062-18002 A S 0122 BCS RELO TAPE .CURE             H0101 VASMBҬB NAM.U ԠD..B NԠD.6.6 D.6NP SBD. MPD.6 .6NP SB.B MP.6 ND   91062-18003 A S 0122 BCS HP3480/85 SUBSYSTEM VERIFICATION TEST (VMSCN)             H0101 NB SUBUNŠVMSN àHSUNŠSDSGNDϠVYPPҠPANƠH à305SUBSYSM.HŠUPMNԠNSSSƠA30 àDVMA35ASANNҠPUG-NNADϠANHPMPUҠVA àAN03-6000DSɠADANDA03-60003NҠM- àUԠAD. àHSPGAMUSSASAN-YPŠ"NA"BSDVҠAD àD..HŠSUBUNŠNVSASϠUSDϠNVԠHŠDAA àMBDϠANGPN. àHŠVANPGAMSDVDDNϠHŠSԠSGMNS: à.AUMAàSANHSDSANNҠPGAMS-HANNS àHU0AŠSANNDHHŠ35APGAMMDASSԠUPBY àHŠNAZANƠHŠ"PGM"AAY. à.ANDMMDŠSԠ-PAҠND àHSSԠASASNGŠADNGNAHANN̠ҠANUMB àƠADNGSSPDBYHŠPGAMD. à3.SP(SUNA̩MDŠSԠ-PAҠND àBKSANSSDNHSMD. àSHGSҠPNS: àϠPAԠPVUSSԠS0 àϠMNAŠUNԠSԠSױ àϠPNUNԠSԠSײ àϠSUPPSSDAAPNUԠSױ5 DMNSNDAA(00UN(50HAN(50PGM(50 UVANŠ(ҬND àɯϠNAZAN A̠SAD(6BAND(SS(5B Š(00 Š(0 AD(0 A̠SAD(Bì A̠SAD(6B+ A̠SAD(0000 A̠ àAUMAàSANAAYNAZAN PGM( PGM( PGM(30 PGM(B PGM(50B PGM(6 HAN( HAN( HAN(33 HAN( HAN(55 HAN(66 àAUMAàS 5Š(03 0A̠SN PAUS Ơ(SS(90 0Š(5 kA̠ND A̠SNҠ(DAA(HAN(PGM(ҬUN( 5Ơ(-530 30A̠SNҠ(DAA(5HAN(5PGM(56ҬUN(5 35Ơ(-6350 0A̠SNB(DAA(HAN(6PGM(65ҬUN( Ơ(-55 5Ơ(SS(59550 50Š(0 SԽ0 A̠NV(DAA(5Sԩ ʽ DϠ90ɽ5 Š(0ʬDAA(ɩ Ơ(UN(ɩ-95560 55Š(05 GϠϠ0 60Š(06 0ʽ+ Ơ(-5905 5Ơ(-0090 0ʽ- 90NNU 95Ơ(SS(9 9Š(6 Š(03 PAUS A̠SN Ơ(SS(0000 àANDMMDŠS 00Ơ(SS(00 0Š(0 AD(HAN( Š(09 AD(0PGM( Ơ(PGM(-B5 Š(3 AD(NUMB GϠϠ 5NUMB A̠SNҠ(DAA(HAN(PGM(NUMBҬUN( Ơ(-NUMB9 9Ơ(SS(5600 0Š(0 SԽ0 A̠NV(DAA(NDSԩ DϠ50ɽ Š(0HAN(DAA(ɩ Ơ(UN(ɩ-9300 30Š(05 GϠϠ50 0Š(06 50NNU 60Ơ(SS(0 0Š( Š(03 PAUS A̠SN Ơ(SS(0000 àSPMDŠS 00Ơ(SS(3000 0Š( AD(HAN( Š(09 AD(0PGM( Š( AD(NUMB A̠SNB(DAA(HAN(PGM(NUMBҬUN( 5Ơ(-NUMB5 Ơ(SS(5600 0Š(0 SԽ0 NHAN( A̠NV(DAA(NDSԩ DϠ50ɽ Š(0NDAA(ɩ NN+ Ơ(UN(ɩ-9300 3 0Š(05 GϠϠ50 0Š(06 50NNU 60Ơ(SS(0 0Š( Š(03 PAUS A̠SN Ơ(SS(00300 300Š( PAUS GϠϠ àMAԠSN 00MAԠ("305SUBSYSMVAN" 0MAԠ("DAAADɯϠSԠDŠ?_" 0MAԠ(K3 03MAԠ("SԠSHG.PNS-PSSUN" 0MAԠ(جɲج9.53ج"_" 05MAԠ("DàVS" 06MAԠ("VAD" 0MAԠ("HANN""DAA"5"UNN" 0MAԠ("ANDMMDŠS-"3"HANN̠?_" 09MAԠ(3"PGAMD?_" MAԠ("SPMDŠS-"3"SANGHANN̠?_" MAԠ(3"ƠHANNS?_" 3MAԠ(3"ƠADNGS?_" MAԠ("NDƠSԠ-PSSUNϠSA" 5MAԠ(3"AUMAàS" 6MAԠ("NDAUϠS" MAԠ("NDANDMS" MAԠ("NDSPS" ND ND$   91065-80001 B S 0122 TIMER-COUNTER SUBSYSTEM BCS LINK (LNK27)             H0101 ];ASMBҬB̬ HDHP9065ABSNKSUBUNŠ NAMNK NԠNK Ԡ.NҬ...AD.DV BNAY:9065-6000 S:A-9065-6000- SNG:A-9065-6000- SU:9065-000 HSUNŠSDSGNDϠSMPYMŠPGAMMNGH MҠUNҠSUBSYSMSNHŠBSPANGSYSM. ϠPGAMUNҠ(AN: A̠NK(UUNìMŬSPGAGBANAANBDVM H:UUNԠ.N.Ơ0BԠGSҠAD UNàUNND MŠMŠBASŠD SPAANDBNPUԠSPŠDŬSPM GANPUԠAGGҠV GBNPUԠBGGҠV ANANPUԠAANUAҠANDAïDàD ANBNPUԠBANUAҠANDAïDàD DVMDGA̠VMҠ(536B53BNY SKP UBSS UNàDà- MŠBSS SPBSS GADà- GBDà- ANADà- ANBDà- DVMDà- NKNPNYPN SB.NҠGԠPAAMҠADDS DƠU A SADAAA SADAADAA SADAA3D SADAASAG SADAA5BUS DAUN MASZASSAҠA̠NS? MPDNŠYS! DASԱ SAPNұPS DASԲPNS SAPNҲ DAS3 SAPN3 DASԴ SAPNҴ DAS5 SAPN5 DAUNìɠBNGNUNN ADAD-0SUBAԠ0 SSAHK? MP+3 DBS5YS SBDAASԠUPHK SSA DAUNì DBDVM LMBSZBSSDVMUSԠ? MP+ DBDVM SZBDVMDŠ0? MPMŠNϬGϠGԠMŠBAS SZASSYSSUNN0? MPK BNB PABMPAŠD MP+6 NBNMNԠDŠKY SZPNұNMNԠPN PBSԴ+ MPKGA̠DŽ MP-6 DAPNұɠSԠUP ҠDAAD SADAA MŠDAMŬɠBNGNMŠBASŠD B PABMPAŠD MP+6 NBNMNԠDŠKY SZPNҲNMNԠPN PBSԴ+0 MPKGA̠D- MP-6 DAPNҲɠSԠUP SADAAD DASPɠBNGNSPŬSPM ADAD- SSAMMN? MP+5 BNB SBDAAYSSԠMB ADAS5+NV SSϠA DASP ANDBSAŠSPŠD B PABMPAŠD MP+6 NBNMNԠDŠKY SZPN3NMNԠPN PBS5 MPKGA̠D- MP-6 DAPN3ɠSԠUP SADAA3D3 ANANA̠PGAM SADAA5 DAGASԠV̠AAG MASZAPAAMҠUSD? MP+3YSGϠNV DAB000NϬSԠV̠Ϡ-.05V MP+ DDGAɠBNGNV̠ADAA SBGҠNV ҠDAA SADAASŠNBU DAGBSԠV̠BAG MASZAPAAMҠUSD? MP+3YSGϠNV DAB000NϬSԠV̠Ϡ-.05V MP+ DDGBɠBNGNV̠BDAA SBGҠNV ҠDAA5 SADAA5SŠNBU DAANASԠNPUԠAAN.AG MASZASS MPDNŠرر DAANAɠGԠAN.AD SBMPҠGϠGԠDAAD ҠDAA3 SADAA3 DAANBSԠNPUԠBAN.AG MASZASS MPDN DASԴADUS ADAD6ANUA SAPNҴPN DAANBɠGԠAN.BD SBMPҠGϠGԠDAAD ҠDAA3 SADAA3SŠNBU DADVMSԠDVM MASZASS MPDNŠNԠUSD DADVM SZASS MPDN DAB3000 ҠDAA SADAADVMUNN DADVMɠBNGNDVMD BNB PABMPAŠD MP+6 NBNMNԠDŠKY SZPN5NMNԠPN PBS5ADAҠB? MP+6YS MP-6 DAPN5ɠGԠDAAD ҠDAA SADAASŠDAAD MPDN PAS5ADA? MP+6YS NBNMNԠDŠKY SZPN5NMNԠPN PAB5ADB? SSYS MPKGA̠D- DAPN5ɠADAҠBDAA SADAASŠNBU DASԱ+ SADAA0MSGA DNŠDAUɠA̠D.5 ҠB0000 SANS SB.. NSԠԠ0000 MP- DƠDAA0 Ԡ6 A SԠBS SBUN SBGABU SBGBAGS SBANA SBANB SBDVM MPNKɠNMA̠UN KASԠAG- MPSԠUN DAA0NP DAANPDAA DAANPD DAA3NPSAG DAANPBUS DAA5NP PNұDƠSԱUNNS SԱԠ5000 Ԡ500 Ԡ00 Ԡ0 Ԡ00 Ԡ000 Ԡ6000 Ԡ600 Ԡ0 PNҲDƠSԲMŠBASŠS SԲԠ00 Ԡ000 Ԡ600 Ԡ6000 Ԡ500 Ԡ5000 Ԡ00 Ԡ000 Ԡ300 PN3DƠS3SPŠS S3Ԡ0 Ԡ Ԡ000 Ԡ00 PNҴDƠSԴANUASS SԴԠ0 Ԡ00 Ԡ000 Ԡ000 Ԡ00 Ԡ5000 Ԡ0 Ԡ Ԡ Ԡ0 Ԡ Ԡ PN5DƠS5DVMS S5Ԡ Ԡ Ԡ Ԡ000 Ԡ300 GҠNPNVԠGGҠV̠DAA SB.ADADD3.5ANDV̠DAA DƠANG SB.DVDVDŠSUԠBY50MV DƠSV SBؠNVԠ.P.ϠNG MANVԠBS SAHD ANDBADUS A SABBS DAHD ANDB0UPU AƬA ҠB MPGҬ ANGŠDà3.5 SVDà.05 HDNP MPҠNPANUAҠMPA B PABMPAŠD MP+6 NBNMNԠDŠKY SZPNҴNMNԠPN PBB6 MPKGA̠D- MP-6 DAPNҴɠGԠDAAD MPMPҬ SԱDƠSԱ SԲDƠSԲ S3DƠS3 SԴDƠSԴ S5DƠS5 D6Dà6 BU ND ND--AP ND--AP ND--AP    91065-80002 B S 0122 VERCT              H0101 NB à PGAMV à àHSPGAMSDSGNDϠVYPPҠPANƠH àHPMүUNҠANDHPMүUNүDVMSUBSYSMS. à àUNŠVԠPASNHŠBSPANGSYSMANDUS àBSDVSD.0D.5ɯϠNGUNGUNŠSADAND àNKSUBUNŠNK. à àVANSDVDDNϠϠSGMNS: à à.AUMAàS:SUBSYSMAUSAŠSDH àMNMUMPAҠAD. à à.MANUA̠S:ASHŠPAҠϠSPYPGAM àPAAMSNHŠSYSMNSŠKYBAD. à àSHGSҠPNS: à àAUMAàSԠS00 àMANUA̠SԠS0 àPAԠN̠Sױ à à à àɯϠNAZAN à A̠SAD(6BAND(SS(5B Š(000 AD(00 A̠SAD(0Bì ý+B A̠SAD(5Bì A̠SAD(0000 à àMDŠS à Š(00 AD(003KND à 0Š(00 PAUS A̠NK(0B Ơ(SS(050000 à àAUMAàS à 00Š(005 A̠NK(0B60 A̠DSɠ(6 Š(006 PAUS à Š(00 A̠NK(0B30 A̠DSɠ(3 MDAND(KND00B Ơ(MD-00 0Š(00 A̠NK(0B90 A̠DSɠ(9 à 0Š(009 MŽ DϠ30ɽ A̠NK(0BMŬ0 A̠DSɠ(Mũ MŽM- 30NNU à Š(00 0Ơ(SS(9050 50Ơ(SS(5600 60A̠NK(0B Š( A̠NK(0B0 0Ơ(SS(500 0A̠NK(0B500 AD(0DAA Š(0DAA GϠϠ0 à 90Š(03 PAUS 'Š(0 MŽ3 DϠ00ɽ A̠NK(0BMŬ0 A̠DSɠ(Mũ MŽM- 00NNU à Š(05 A̠NK(0B600 A̠DSɠ(60 Š(06 A̠NK(0B00.0.33 A̠DSɠ(0 Š(0 A̠NK(0B00.0.33 A̠DSɠ(0 à YPŽAND(KNDB Ơ(YP-300 0Š(0 PAUS Š(09 DϠ0ɽ3 A̠NK(0B000.0.00ɩ A̠DSɠ(0ɩ 0NNU à Š(00 A̠NK(0B0503.0.00 A̠DSɠ(00 Š(0 A̠NK(0B0500.-3.005 A̠DSɠ(005 30Ơ(SS(000 à àMANUA̠SԠ-PAҠND à 500DVM0 Š(0 AD(UN Š(03 AD(M Ơ(UNé50550505 505Š(0 AD(SP Š(05 AD(GA Š(06 AD(GB Š(0 AD(ANA Š(0 AD(ANB GϠϠ50 50Ơ(AND(KNDB5553055 55SP0 GA0 GB0 ANA0 ANB0 Š(09 AD(DVM à 50Ơ(UN-55555 5Š(00 53Ơ(SS(5905 5Ơ(SS(55553 55Š( ANK(0BUNìMŬSPGAGBANAANBDVM Ơ(A53050 530Š(030 GϠϠ500 50Ơ(UN-560550560 550Ơ(SS(5550555 555A̠NK(0B500 AD(0DAA Š(0DAA GϠϠ53 à 560Ơ(DVM-5050 50A̠DSɠ(0MŬDVM GϠϠ590 50A̠DSɠ(UNìMũ 590Ơ(SS(500 à àMAԠSN à c000MAԠ("HPMүUNҠSUBSYSMVAN" "DAAADɯϠSԠDŠ?" 00MAԠ(K6 00MAԠ("UNҠMD̠N.(53A.?" 003MAԠ(A5 00MAԠ("SԠS.G.PN-PSSUN" 005MAԠ("AUMAàS""HKDSPAY0000.00KHZ" 006MAԠ("SԠNPUԠAANDà.Ϡ00KHZ-PSSUN" 00MAԠ("Ѡà(0S" 00MAԠ("ѠàPSAŠ(S" 009MAԠ("ѠA(S.S0MSMS" 00MAԠ("SAԯSPS"5"ϠSAԠUNԠSױ5"5 "ϠSPUNԠSױ50"5ج"ϠԠSԠSױ" 0MAԠ(جű0.05ة 0MAԠ(جɷ 03MAԠ("SԠNPUԠA.Ϡ0HZ-PSSUN" 0MAԠ("PDA(.MS0USUS.US" 05MAԠ("PDAVGA" 06MAԠ("..AϠB" 0MAԠ("..AVGAϠB" 0MAԠ("DVMSԠ-APPYDàϠDVMNPUԠ-PSSUN" 09MAԠ("0V00V000VANG" 00MAԠ("ADA" 0MAԠ("ADB" 0MAԠ("MANUA̠S""NҠPGAMPAAMS" 3"UNN?" 03MAԠ("MŠBASŠ?" 0MAԠ("SPŠ?" 05MAԠ("GGҠV̠A?" 06MAԠ("GGҠV̠B?" 0MAԠ("ANUAҠA?" 0MAԠ("ANUAҠB?" 09MAԠ("DVM?" 030MAԠ("NVADPGAMPAAM" à ND SUBUNŠDSɠ(NNN3 à àDAANVSNANDPNԠSUBUN à DMNSNDAA(Nұ(6NҲ(5N3(NҴ(3N5( DMNSNDò(D3(3Dô(D5(5D6(6( à UVANŠ(DñDAA((DòDAA(6(D3DAA(5 UVANŠ(DôDAA((D5DAA(3(D6DAA( UVANŠ(NұNҲN3NҴN5N6DAA( à Š( AD(000UNDAA à Ơ(UN000 0Š(00 UN à 0UNýN MŽ(N+ DVMN3 ^Ơ(UN-50030 30Ơ(UN-0500 0UNýUN-0 50GϠϠ(00000060603000030000UN 60UN à 00(05B (3B GϠϠ(3055355009050M 5Š(00DAA UN 5Š(003NұDñ UN 30(00B 35Š(00NҲDò UN 5Š(005N3D3 UN 50(03B 55Š(006NҴDô UN 0(03B GϠϠ5 0(03B GϠϠ35 90(03B GϠϠ5 à 00(000B (500B GϠϠ(0030050355560M 0(05B GϠϠ5 0(05B GϠϠ5 30(05B GϠϠ35 0(05B GϠϠ5 50(05B GϠϠ5 60(005B (000B GϠϠ5 à 300(06B (50B GϠϠ(303033053555530350M 30(05B GϠϠ5 30(05B GϠϠ35 330(05B GϠϠ5 30Š(00N5D5 UN 350Š(00N6D6 UN à 00(03B (3B GϠϠ(003005055355M 0(00B GϠϠ5 0(00B GϠϠ35 30(05B GϠϠ5 0(05B GϠϠ5 50(05B GϠϠ35 à 500Ơ(UN-35050 50P̽50B GϠϠ530 50P̽60B 530Ơ(DVM-506060 50Ơ(DVM-55056050 550GϠϠ(6006006006006006063060600M 560GϠϠ(6006006006006006060630600M 50GϠϠ(60060060069g006006006060600M à 600Š(009P̬DAA UN 60Š(00P̬NұDñ UN 60Š(0P̬NҲDò UN 630Š(0P̬N3D3 UN 60Š(03P̬NҴDô à à 000MAԠ(ɱAة 00MAԠ("V" 00MAԠ(A"."A 003MAԠ(6A"."AA 00MAԠ(5A"."AA 005MAԠ(A"."3AA 006MAԠ(3A"."AA 00MAԠ(A"."5AA 00MAԠ(A"."6AA 009MAԠ(AA".VS" 00MAԠ(A6A"."A"VS" 0MAԠ(A5A"."A"VS" 0MAԠ(AA"."3A"VS" 03MAԠ(A3A"."A"VS" à ND ND$ R   91200-18001 1648 S 0122 DVR13 DRVR SRC              H0101 ASMB,L,C HED RTE DRIVER FOR <91200> VIDEO GENERATOR A-91200-16001-2 * * NAME: RTE-II DRIVER FOR 91200 VIDEO GENERATOR * SOURCE: 91200-18001 * BINARY: 91200-16001 * PGMR: R.M.C. REV.C(1648) MADE BY DENTON ANDERSON * * NAM DVA13,0 91200-16001 REV 1648 -- 761124 SPC 1 ENT IA13,CA13 SUP PRESS EXTRANEOUS LISTING SPC 1 * THIS DRIVER IS RESPONSIBLE FOR PROCESSING EXEC I/O CALLS FOR * THE <91200> VIDEO DISPLAY GENERATOR. IT RECOGNIZES WRITE AND * CONTROL REQUESTS. * * WRITE REQUESTS WILL INITIATE A DMA TRANSFER OF YX * COORDINATES OF POINTS TO BE WRITTEN ON OR ERASED FROM * THE VIDEO MONITOR SCREEN BY THE <91200>. * Y=BITS 15-8, X=BITS 7-0. * * CONTROL REQUESTS ARE USED TO:- * SET COLOR (BLACK FOR SELECTIVE ERASE) * SET SENSE (VIDEO POLARITY) * PERFORM A BULK ERASE. * INDICATE A POWER FAIL. * * THE FUNCTION BITS FOR CONTROL REQUESTS ARE DEFINED AS FOLLOWS:- * * BITS 10, 9, & 6 SELECT COLOR AS FOLLOWS: * * 00 XX0 WHITE * 00 XX1 BLACK (SELECTIVE ERASE) * 01 XX0 RED -----\ * 01 XX1 GREEN \ * 10 XX0 BLUE \ NOT FOR 1 CARD * 10 XX1 YELLOW (RED & GREEN / SYSTEMS * 11 XX0 MAGENTA (RED & BLUE) / * 11 XX1 CYAN (BLUE & GREEN) -----/ * * BIT 7 IS THE SENSE BIT, IF SET TO 1 IT CAUSES THE VIDEO * OUTPUT OF THE CARD TO INVERT. * * BIT 8 SET TO 1 CAUSES BULK ERASE (TO SENSE PREVIOUSLY SET). * IF BIT 7 IS ALSO SET THEN BIT 0 OF EQT5 IS SET TO SHOW THE * USER THAT A POWER FAIL HAS OCCURRED. * * WHEN BIT 8 OF THE CONTROL WORD IS SET (TO ERASE), BITS * 6, 9, & 10 OF THE CONTROL WORD ARE IGNORED. * * THE DRIVER PROCESSES TIMEOUT SO THAT THE SYSTEM WILL NOT * ISSUE A CLC FOLLOWI[ NG A TIMEOUT INTERRUPT. SKP * INITIATION SECTION SPC 1 I.XY NOP STA TVSC SAVE THE SELECT CODE LDA EQT5,I IS THE EQT SSA BUSY? JMP PFAIL YES - MUST BE AUTO RESTART LDA EQT4,I SHOW RTE THAT TIMEOUT AND IOR PS PWR FAIL WILL BE HANDLED HERE. STA EQT4,I LDA EQT6,I REQUEST CODE WITH EXEC CALL AND B3 TYPE IN LOW BITS. CPA B3 JMP CNTRL B10 SLA IF A=1,RETURN CODE IS RIGHT JMP I.XY,I TO SHOW ILLEGAL READ. SPC 1 LDA CHAN CONFIGURE DMA IOR OTA0 102606/7 STA DMAO XOR B4 102602/3 STA DMAO1 STA DMAO2 IOR B300 102702/3 STA DMAS IOR B1200 103702/3 ADA B4 103706/7 STA DMASC XOR B5000 106706/7 STA DMAC1 XOR B4 106702/3 STA DMAC END DMA CONFIGURATION SPC 1 LDA TVSC ASSIGN TV CARD TO DMA AND IOR BIT15 ASK STC AFTER EACH TRANSFER, DMAO OTA DMA BUT NO FINAL CLC. IOR STF0 CONFGR STF FOR TV STA STF1 LDA EQT7,I SEND BUFFER ADDRESS DIRECTLY DMAC CLC DMA-4 DMAO1 OTA DMA-4 TO ADDRESS REGISTER. LDA EQT8,I SEND TWO'S COMPLEMENT OF CMA,INA BUFFER LENGTH TO DMAS STC DMA-4 WORD COUNT REGISTER. DMAO2 OTA DMA-4 STF1 STF TVGEN READY TV CARD DMASC STC DMA,C TURN ON DMA, BUT DMAC1 CLC DMA PREVENT INTERRUPT FROM IT. CLA JMP I.XY,I SKP CNTRL DLD INTBA,I FIND DMA CHANNEL CPA EQT1 AND RELEASE IT. CLA CPB EQT1 CLB DST INTBA,I SPC 1 LDA TVSC CONFIGURE I/O INSTRUCTIONS IOR STF0 1021SC STA STFTV ADA B300 1024SC STA MIATV IOR B1200 1036SC STA OTATV IOR B100 1037SC STA STCTV XOR B5000 1067SC ( STA CLCTV XOR B5600 1031SC STA ERASE END I/O CONFIGURATION SPC 1 LDB EQT6,I GET CONTROL WORD BLF,BLF CHECK BIT 8 SLB JMP ERASE DO BULK 'ERASE' SPC 1 LDA EQT4,I AND MASK CHECK FOR SZA,RSS NON-ZERO SUB-CHANNEL JMP GO.ON IS ZERO - SO COLOR LDA B NOT ZERO - KILL COLOR RAR,ERA IS COLOR NOT SEZ,SLA,RSS WHITE OR BLACK? JMP GO.ON YES - SO OK! LDA B NO - SO KILL COLOR TO AND MASK2 WHITE ONLY STA B SPC 1 GO.ON CLE,ELB CALL IS TO SET OR CHANGE BRS,BRS COLOR AND/OR SENSE. CLA POSITION ELA,RAL CONTROL BITS RBR,ERB 6, 9, & 10 RBL,RBL FOR TESTING SSB,SLB,RSS CYAN OR GREEN? JMP *+3 NEITHER IOR B1 IT IS CYAN OR GREEN JMP *+4 WHICH? SLB,RSS MAGENTA OR RED? JMP *+5 NEITHER IOR B4 IT IS CYAN/MAGENTA OR GREEN/RED SEZ,RSS CYAN/MAGENTA OR GREEN/RED? IOR B10 IT IS GREEN OR RED JMP STFTV DONE SKP SSB,RSS YELLOW OR BLACK? JMP *+5 NEITHER (IT IS BLUE OR WHITE) IOR B10 IT IS YELLOW OR BLACK SEZ,RSS YELLOW OR BLACK? IOR B5 IT IS BLACK JMP STFTV DONE SEZ BLUE OR WHITE? IOR B5 IT IS BLUE SPC 1 STFTV STF TVGEN BECAUSE RTE DID CLF. CLCTV CLC TVGEN SWITCH MODE FF OTATV OTA TVGEN,C TO STEER OUTPUT TO MODE PFAIL LDA B4 REGISTER AND DO IMMEDIATE JMP I.XY,I COMPLETION SPC 4 ERASE CLF TVGEN CLEAR ANY PRESET STATE OF CARD CLA,INA SET STATUS BIT (PWR FAIL BIT) IOR EQT5,I ON EQT5 WORD SSB,RSS IS BIT 7 OF CNTRL WORD SET? AND EQ5 NO - SO CLEAR PWR FAIL. BIT STA EQT5,I MIATV MIA TVGEN ANY INPUT WILL BULK ERASE STCTV STC TVGEN,C INTERRUPT NEEDED TO COMPLETE. CLA JMP I.XY,I SPC 3 TVSC NOP STORE CURRENT IO SELECT CODE. BIT15 OCT 100000 PS OCT 30000 EQ5 OCT 177400 OTA0 OTA 0 STF0 STF 0 B1 OCT 1 B3 OCT 3 B4 OCT 4 B5 OCT 5 B100 OCT 100 B300 OCT 300 B1200 OCT 1200 B5000 OCT 5000 B5600 OCT 5600 BIT11 OCT 4000 MASK OCT 2700 MASK2 OCT 137771 SKP * CONTINUATOR SECTION. SPC 1 C.XY NOP LDB EQT1,I SZB,RSS JMP EXTRA SPURIOUS INTERRUPT. LDA EQT4,I EXAMINE BIT 11 FOR A AND BIT11 TIME-OUT ENTRY. SZA JMP TMOUT LDB EQT8,I GET TRANSMISSION LOG JMP C.XY,I A ALREADY CLEAR. SPC 1 TMOUT XOR EQT4,I BIT 11 IS SET, SO CLEAR STA EQT4,I IT AND STORE BACK. CLA HANDLE TIME-OUT HERE TO JMP C.XY,I PREVENT A CLC BY SYSTEM, SPC 1 AND DOWNED DEVICE. EXTRA STB EQT15,I IGNORE INTERRUPT AND ISZ C.XY PREVENT TIMEOUT FROM IT. JMP C.XY,I SPC 3 B EQU 1 CA13 EQU C.XY IA13 EQU I.XY TVGEN EQU 0 DMA EQU 6 NOMINAL DMA CHANNEL TBL EQU 1650B CHAN EQU TBL+23B INTBA EQU TBL+4 EQTBL EQU TBL+7 EQT1 EQU EQTBL+1 EQT4 EQU EQTBL+4 EQT5 EQU EQTBL+5 EQT6 EQU EQTBL+6 EQT7 EQU EQTBL+7 EQT8 EQU EQTBL+8 EQT15 EQU 1774B SPC 2 END 8  91200-18002 1648 S 0222 VIDEO LIBRARY              H0102 *ASMB,L,C HED RTE BASIC 'CHAR' INTERFACE A-91200-16002-2 * * NAME: RTE BASIC 'CHAR' INTERFACE * SOURCE: 91200-18002 (FILE 1) * BINARY: 91200-16002 (MODULE 1) * PGMR: L.W.S. ADDED TO LIBRARY BY DENTON ANDERSON. * REV.B(1603) IS FOR COLOR OPERATION. * REV.C(1648) IS FOR POWER FAIL - AUTO RESTART. * * NAM CHARS,7 91200-16002 REV 1648 -- 761124 ENT CHARS EXT .ENTR,CH#R SPC 2 * THIS ROUTINE SERVES AS AN INTERFACE BETWEEN THE TV LIBRARY * ROUTINE 'CHAR' AND A BASIC CALLING PROGRAM. IT ACCEPTS THE * ADDRESS OF A STRING VARIABLE (AS WELL AS A STRING IN QUOTES), * PUTS THE STRING LENGTH TEMPORAIRLY IN WORD 1 OF THE STRING * ARRAY, AND THEN CALLS THE CHAR LIBRARY ROUTINE TO DISPLAY * THE CHARACTER STRING. ALL OTHER PARAMETERS ARE PASSED DIRECTLY * TO CHAR AS RECEIVED. THE BASIC USER MUST CALL IT AS FOLLOWS: * * 10 CALL CHARS(X,Y,A$,S,D,N,M,P) * * X,Y --> X,Y COORDINATES OF LOWER-LEFT HAND POINT WHERE * CHARACTER STRING IS TO BE DISPLAYED. * * A$ --> STRING VARIABLE CONTAINING STRING TO BE DISPLAYED. * * S --> CHARACTER SIZE. * * D --> DIRECTION. * * N --> ARRAY STRUCTURE (FORCED TO 0). * * M --> DISPLAY MODE. * * P --> POWER FAIL INDICATOR. SKP * TYPICAL BASIC PROGRAM * --------------------- * * 10 DIM A$(72) * 20 PRINT "ENTER TV LU #, DISPLAY SENSE: "; * 30 INPUT L,S * 40 CALL VIDLU(L,S) * 50 CALL ERASE * 60 PRINT "ENTER ANY CHARACTER STRING OR /E" * 70 INPUT A$ * 80 IF A$(1,2)="/E" THEN 160 * 90 PRINT "ENTER X,Y,SIZE,DIREC,MODE: "; * 100 INPUT X,Y,S,D,M * 110 CALL CHARS(X,Y,A$,S,D,0,M,P) * 120 IF P#0 THEN 140 * 130 GO TO 50 * 140 PRINT"POWER FAIL, START OVER" * 150 GO TO 20 * 160 PRINT"DONE" * 170 END * * * BRANCH & MNEMONIC TABLE CONSIDERATIONS *  -------------------------------------- * * THE FOLLOWING TYPE OF ENTRY MUST BE MADE: * * FOR RTE-B: * CHARS(I,I,R,I,I,I,I,V) * * FOR REAL TIME BASIC: * CHARS(I,I,RA,I,I,I,I,IV) * * THE ENTRY POINT MUST BE 'CHARS' WITH EIGHT PARAMETERS EXACTLY * AS SHOWN. PARAMETER NUMBER 3 MUST BE SPECIFIED AS REAL SO THAT * THE STRING ARRAY (A$) CAN BE RETRIEVED DURING RUN TIME. PARAMETER * NUMBER 6 CAN BE SPECIFIED AS ANYTHING SINCE IT IS ALWAYS PASSED * AS ZERO TO THE TV LIBRARY ROUTINE. SKP X NOP STARTING X & Y COORDINATES OF THE Y NOP THE LOWER-LEFT CORNER. BUFR NOP ADRS OF CHAR. STRING OR LITERAL. SIZE DEF .0 CHARACTER SIZE. DIREC DEF .0 STRING DIRECTION. NUMBR NOP ARRAY STRUCTURE. MODE DEF .0 DISPLAY MODE. PFL NOP POWER FAIL INDICATOR. SPC 1 CHARS NOP << ENTRY POINT >> JSB .ENTR GET PARAMETER ADDRESSES. DEF X SPC 1 LDA BUFR,I SAVE STATEMENT COMPILE CODE. STA TEMP SAVE FOR LATER RESTORE. AND .377 ISOLATE STRING LENGTH. STA BUFR,I TEMPORARILY PUT BACK IN STRING. LDA PFL TRANSFER POWER FAIL INDICATOR STA PFAIL ADDRESS FOR NEXT CALL. SPC 1 *... CALL CHAR LIBRARY ROUTINE ... SPC 1 JSB CH#R CALL DEF *+9 THE DEF X,I ACTUAL DEF Y,I TV DEF BUFR,I LIBRARY DEF SIZE,I ROUTINE. DEF DIREC,I DEF .0 DEF MODE,I PFAIL NOP SPC 1 LDA TEMP RESTORE ACTUAL FIRST WORD IN STA BUFR,I BASIC SYMBOL TABLE. LDA DEF0 RE-ESTABLISH DEFAULTS STA SIZE / STA DIREC / STA MODE / CLA / STA PFL / JMP CHARS,I RETURN TO BASIC. SPC 1 TEMP NOP HOLDS ORIGINAL FIRST WORD OF S.T. .0 OCT 0 BUFFER STRUCTURE PARAMETER. .3I77 OCT 377 STRING COUNT MASK VALUE. DEF0 DEF .0 SPC 1 END ASMB,L,C HED RTE BASIC 'POINT' INTERFACE A-91200-16002-2 * * NAME: RTE BASIC 'POINT' INTERFACE * SOURCE: 91200-18002 (FILE 2) * BINARY: 91200-16002 (MODULE 2) * PGMR: L.W.S. ADDED TO LIBRARY BY DENTON ANDERSON * REV.B(1603) IS FOR COLOR OPERATION. * REV.C(1648) IS FOR POWER FAIL - AUTO RESTART. * P NAM PNTS,7 91200-16002 REV 1648 -- 761124 ENT PNTS EXT .ENTR,POINT,IFIX SUP PRESS EXTRANEOUS LISTING SPC 1 * THIS ROUTINE SERVES AS AN INTERFACE BETWEEN THE TV LIBRARY * ROUTINE 'POINT' AND A BASIC CALLING PROGRAM. IT ACCEPTS A * CONTIGUOUS ARRAY OF FLOATING-POINT X & Y SCREEN COORDINATES, * CONVERTS EACH TO INTEGER, AND SENDS UP TO 64 PAIRS OF COORD- * INATES TO THE ROUTINE 'POINT' AT A TIME. THE BASIC USER MUST * SET UP THE ARRAY OF X & Y COORDINATES AS FOLLOWS: * * A(1) = FIRST X COORDINATE * A(2) = FIRST Y COORDINATE * A(3) = SECOND X COORDINATE * A(4) = SECOND Y COORDINATE * . . * . . * . . * A(N-1) = LAST X COORDINATE * A(N) = LAST Y COORDINATE * * THE BASIC USER THEN CALLS IT AS FOLLOWS: * * 10 CALL PNTS(A(1),N,M,P) * * * A(1) --> FIRST WORD OF ARRAY OF POINTS * * N --> NUMBER OF POINTS (X,Y PAIRS) * * M --> DISPLAY MODE * * P --> POWER FAIL INDICATOR SKP * TYPICAL BASIC PROGRAM * --------------------- * * 10 DIM A(400) * 15 VIDLU(12,0) * 20 FOR I=1 TO 400 STEP 2 * 30 A(I)=((I+1)/2)-1 * 40 A(I+1)=((I+1)/2)-1 * 50 NEXT I * 60 CALL PNTS(A(1),200,3,P) * 70 IF P#0 THEN 15 * 80 END * * THE ABOVE EXAMPLE CALLS THE POINT LIBRARY ROUTINE WITH 200 PAIRS * OF X & Y COORDINATES. IMPORTANT: WHEN SUPPLYING THE AR)RAY * NAME, IT MUST BE SPECIFIED AS AN ARRAY. * * BRANCH & MNEMONIC TABLE CONSIDERATIONS * -------------------------------------- * * THE FOLLOWING TYPE OF ENTRY MUST BE MADE: * * FOR RTE-B: PNTS(R,I,I,V) * * FOR REAL TIME BASIC: PNTS(RA,I,I,IV) * * THE ENTRY POINT MUST BE 'PNTS' WITH FOUR PARAMETERS EXACTLY * AS SHOWN. SKP BUFER NOP REAL ARRAY ADRS FOR POINTS. NUMBR DEF B1 NUMBER OF (X,Y) POINTS. MODE DEF ZERO SCREEN DISPLAY MODE. PFL NOP POWER FAIL INDICATOR. SPC 1 PNTS NOP << ENTRY >> JSB .ENTR GET PARAMETER ADDRESSES. DEF BUFER SPC 1 LDA NUMBR,I SET USERS POINT COUNT. SZA,RSS IF =0, RETURN. JMP PNTS,I CMA,INA SET NEGATIVE. STA NUMBR LDA PFL TRANSFER POWER FAIL INDICATOR STA PFAIL ADDRESS FOR NEXT CALL. SPC 1 NEXTB LDA BUFAD INITIALIZE INTERNAL POINT BUFFER ADDRESS. STA BUF LDA M64 SET-UP LOOP STA COUNT CONTROL FOR 64 POINTS. CLA INITIALIZE ACTUAL BUFFER COUNT. STA NPT SPC 1 NEXTP JSB GETP GET A REAL X-COORDINATE & FIX. STA XY SAVE FOR LATER MERGE WITH Y-COORDINATE. JSB GETP GET A REAL Y-COORDINATE & FIX. ALF,ALF POSITION Y IN HIGH 8 BITS. IOR XY MERGE TO FORM (Y,X) STA BUF,I PUT AWAY IN INTERNAL BUFFER. ISZ NUMBR LAST USER POINT ? RSS NO. JMP DUMP YES, DUMP TO TV.? ISZ COUNT 64 PAIRS ? RSS JMP DUMP DUMP TO TV. ISZ BUF BUMP INTERNAL BUFFER ADDRESS. ISZ NPT UPDATE NUMBER OF POINTS. JMP NEXTP GET NEXT POINT. SPC 1 DUMP ISZ NPT UPDATE ACTUAL NUMBER OF POINTS. JSB POINT SEND DEF *+5 64 (OR LESS) DEF BUFFR PAIRS DEF NPT OF DEF MODE,I POINTS. PFAIL NOP SPC 1 LDA NUMBR  TIME TO SZA,RSS GET OUT? JMP DONE YES! JMP NEXTB NO, START NEXT BUFFER. SKP DONE LDA DEFB1 RE-ESTABLISH DEFAULTS STA NUMBR / LDA DEF0 / STA MODE / CLA / STA PFL / JMP PNTS,I ALL FINISHED!! SPC 2 GETP NOP < GET NEXT REAL POINT & FIX > DLD BUFER,I GET THE FLOATING-POINT VALUE. JSB IFIX CONVERT TO INTEGER LDB BUFER UPDATE USER'S BUFFER ADDRESS. ADB .2 STB BUFER JMP GETP,I RETURN. SPC 2 DEFB1 DEF B1 B1 OCT 1 .2 DEC 2 XY NOP HOLDS FORMED (Y,X) POINT M64 DEC -64 MAXIMUM POINT CONTROL VALUE NPT NOP ACTUAL NUMBER OF POINTS IN BUFFER COUNT NOP BUFFER LOOP CONTROL VALUE DEF0 DEF ZERO ZERO OCT 0 BUF NOP USERS BUFFER ADDRESSR ADDRESS BUFAD DEF *+1 INTERNAL POINT BUFFER BUFFR BSS 64 POINT BUFFER AREA. SPC 1 END ASMB,L,C HED VIDEO CHARACTER GENERATOR SUBROUTINE A-91200-16002-2 * * NAME: CHARACTER GENERATOR OF VIDEO DISPLAY LIBRARY * SOURCE: 91200-18002 (FILE 3) * BINARY: 91200-16002 (MODULE 3) * PGMR: R.M.C. REV.C(1648) MADE BY DENTON ANDERSON * REV.B(1603) IS FOR COLOR OPERATION. * REV.C(1648) IS FOR POWER FAIL - AUTO RESTART. * NAM CHAR,7 91200-16002 REV 1648 -- 761124 ENT CHAR,CH#R EXT .ENTR,DI[T,[TAB,VECTR SUP PRESS EXTRANEOUS LISTING SPC 1 XCHAR NOP "X" COORDINATE, LOWER LEFT POINT. YCHAR NOP "Y" COORDINATE, LOWER LEFT POINT. BUFAD NOP BEGINNING OF CHARACTER STRING. SIZE DEF ZERO CHARACTER SIZE (>0). ROT DEF ZERO 90 DEGREE ROTATION (0:3). LEN DEF ZERO STRING LENGTH PARAMETER. MODE DEF ZERO 0 TO WRITE, NON-0 TO ERASE. PFL NOP POWER FAIL INDICATOR. SPC 1 CHAR NOP ENTRY POINT.  JSB .ENTR TRANSFER THE PARAMETER ADDRESSES. DEF XCHAR LDA ROT,I AND B3 MOD 4 STA ROT LDA PFL TRANSFER POWER FAIL INDICATOR STA PFAIL ADDRESS FOR NEXT CALL. LDA YCHAR,I RETRIEVE INITIAL Y AND STA YV X CO-ORDINATES FOR TRANSFER LDA XCHAR,I TO 'VECTR' SUBROUTINE. STA XV LDA SIZE,I LOAD THE CHARACTER SIZE. SSA IS THE CHARACTER SIZE NEGATIVE? JMP EXIT ERROR, RETURN; "CALL" REJECTED. SZA,RSS IF SIZE 0 OR DEFAULTED, CLA,INA SET TO SIZE 1 AND B77 LIMIT TO A REASONABLE VALUE. STA SIZE CCA STA PCT PRESET THE PARENS COUNT, STA CHCTR AND CHARACTER COUNT. LDA LEN,I SSA STRING DELIMITED BY PARENS JMP BYTAD WHEN LEN IS NEGATIVE.. SZA,RSS STRING LENGTH IN FIRST WORD LDA BUFAD,I WHEN LEN=0. AND B77 REMOVE POSS HIGH CHAR. STA PCT PROTECT AGAINST ALL ('S. CMA USUAL INA SUPPRESSED TO ALLOW STA CHCTR LATER TEST WITH ISZ. SKP LDA LEN,I SZA,RSS TEST AGAIN FOR 0 PARAMETER ISZ BUFAD & BUMP TO PASS OVER. SPC 1 BYTAD LDA BUFAD CLE,ELA FORM BYTE ADDRESS. STA BUFAD ISZ CHCTR SKIPS IF PARENS MODE RSS CHCTR IS SAFE, & INITIALLY, NCH ISZ BUFAD INCREMENT FOR THE NEXT CHARACTER. LDA BUFAD LOAD THE ADDRESS WORD. CLE,ERA SAVE BIT 0 IN "E"; SHIFT ADDRESS. LDA A,I GET THE CHARACTER WORD. SEZ,RSS IS THE CHARACTER IN BITS 15-8? ALF,ALF YES, SO SHIFT IT INTO BITS 7-0. LDB DI[T DICTIONARY PARAMETERS ADDRESS AND B,I MASK TO LOWER BYTE (7 OR 8 INB BITS AS DEFINED IN DICTIONARY). ADA B,I SUBTRACT BASE CODE OF TABLE. SSA IF THE CHAR CODE IS < THE BASE, JMP FNCH IGNORE THIS CHARACTER. INB POINT TO TABLE LENGTH. ADA B,I IF THE CHARACTER IS STILL NOT SSA,RSS IN THE TABLE,THEN TRY TO ADA M40 FORCE LOWER CASE TO UPPER CASE. SSA,RSS IF STILL NOT IN THE TABLE, JMP NCH IGNORE THE CHARACTER. CMA,INA RESTORE DICTIONARY OFFSET IN ADA B,I A ROUND-ABOUT WAY CMA,INA CPA LPARC IS THIS CHARACTER A "("? JMP LPARN YES. CPA RPARC IS THIS CHARACTER A ")"? ISZ PCT YES. IS IT THE FINAL ONE? JMP D NO, CONTINUE. JMP EXIT YES, FINAL ")" SO RETURN. SPC 1 B3 OCT 3 B7 OCT 7 B17 OCT 17 B77 OCT 77 B777 OCT 777 M1 OCT -1 M40 OCT -40 LPARC ABS 50B-40B ( P NOP PCT NOP PARENTHESIS COUNTER. RPARC ABS 51B-40B ) SKP LPARN LDA PCT LOAD THE PARENTHESIS COUNTER. ADA M1 DECREMENT BY ONE(1). STA PCT STORE IT IN "PCT". LDA LPARC GET LPAREN CODE AGAIN D INB START OF DICTIONARY ADA B LDB A TEMP SAVE OF DICTIONARY ADDRESS. LDA B,I DICTIONARY CHARACTER CODE WORD. ALF NUMBER OF CONTROL WORDS TO 4 LSB. AND B17 MASK OFF BITS 3-0. CMA,INA NEGATE FOR COUNTING. CLE,ELA FORM THE BYTE COUNT. STA CCT PRESET TO -(# OF VECTORS). LDA B,I GET THE DICTIONARY WORD AGAIN. AND B777 MASK OFF THE RELATIVE ADDRESS. LDB [TAB ADD BEGINNING OF TABLE ADDRESS. ADA B CLE,ELA FORM THE BYTE ADDRESS STA P SAVE "A" AT "P". NCW LDB P CHARACTER ADDRESS OF COMMAND. ISZ P INCREMENT "P" FOR THE NEXT CODE. CLE,ERB FORM MEMORY ADDRESS OF COMMAND. LDB B,I LOAD THE WORD CONTAINING COMMAND. SEZ TEST THE COMMAND LOCATION. BLF,BLF SHIFT COMMAND TO BITS |0.*15-8. RBL,RBL STB A AND B3 ORIGINAL CODE BITS 6,7 STA TYPE BLF,RBR STB A AND B7 ORIGINAL CODE BITS 3,4,5 ADA ROT CORRECT FOR STRING'S ROTATION ADA ROT AND B7 MAKE MOD 8 STA THETA BLF,RBR STB A AND B7 ORIGINAL CODE BITS 0,1,2 MPY SIZE STA VLEN JSB VOUT CCA SET XV NEGATIVE SO THAT NEXT STA XV VECTOR WILL BE APPENDED. ISZ CCT MORE COMMAND WORDS? JMP NCW GET EM. ISZ CHCTR MORE CHARACTERS? JMP NCH GET EM. SKP EXIT LDA B100K DO A COMPLETION CALL TO STA VLEN VECTOR. JSB VOUT LDA DZERO RESTORE DEFAULT PARAMETERS STA SIZE FOR NEXT ENTRY STA ROT STA VLEN STA MODE CLA STA PFL JMP CHAR,I SPC 1 VOUT NOP JSB VECTR DEF CHK DEF XV DEF YV DEF THETA DEF VLEN DEF TYPE DEF MODE,I DEF ZERO PFAIL NOP CHK JMP VOUT,I SPC 3 CCT NOP CODE COUNTER. ZERO OCT 0 B100K OCT 100000 DZERO DEF ZERO SPC 1 CHCTR NOP CHARACTER COUNT THETA NOP VECTOR ROTATION 0:7 TYPE NOP VECTOR CONTROL 'WORD' * 0 NON-WRITING * 1 SUPPRESS FIRST POINT * 2 WRITE ALL POINTS * 3 SUPPRESS FIRST & LAST POINTS. SPC 1 A EQU 0 B EQU 1 CH#R EQU CHAR XV EQU XCHAR YV EQU YCHAR VLEN EQU LEN SPC 2 END yD0ASMB,L,C HED VIDEO SUBROUTINE [TABL (ASCII CODE TABLE)A-91200-16002-2 * * NAME: DICTIONARY/CODE TABLE OF VIDEO DISPLAY LIBRARY. * SOURCE: 91200-18002 (FILE 4) * BINARY: 91200-16002 (MODULE 4) * PGMR: R.M.C. REV.B(1603) MADE BY DENTON ANDERSON * REV.B(1603) IS FOR COLOR OPERATION. IT * DID NOT CHANGE THIS MODULE. * THERE IS NO CHANGE TO THIS MODULE FOR REV.C(1648). * * NAM [TABL,7 91200-16002 REV 1603 -- 751222 SPC 1 ENT DI[T,[TAB SPC 2 * DIRECTORY FORMAT: .XXX-.+NN0000B SPC 1 * WHERE, ".XXX" IS THE NAME OF THE FIRST * VECTOR CODE WORD; SPC 1 * "NN" IS THE NUMBER OF VECTOR CODE * WORDS FOR ".XXX". (4 BITS). SPC 3 ************* DO NOT REARRANGE THE ORDERING OF THIS TABLE! ******* DI[T DEF MASK ADDRESS DEFINITION FOR CHAR. * MASK OCT 177 ALLOW DEFINITION OF CODE LEVEL * BASE OCT -40 NEG OF FIRST ALLOWED CODE * LENTH ABS STBL-ETBL -(# OF ENTRIES IN DICTIONARY) * * * DICT ABS .SPC-.+010000B SPACE * STBL EQU DICT * ABS .EXP-.+030000B ! * ABS .QTE-.+040000B " * ABS .NUM-.+050000B # * ABS .S-.+110000B $ * ABS .PCT-.+100000B % * ABS .AND-.+060000B & * ABS .PRM-.+030000B ' APPOSTROPHE * ABS .LP-.+030000B ( * ABS .RP-.+030000B ) * ABS .STR-.+040000B * * ABS .PLS-.+030000B + * ABS .CMA-.+040000B , COMMA * ABS .MIN-.+020000B - * ABS .PER-.+030000B . ӫ * ABS .SLH-.+020000B / * ABS .0-.+100000B 0 * ABS .1-.+030000B 1 * ABS .2-.+060000B 2 * ABS .3-.+070000B 3 * ABS .4-.+030000B 4 * ABS .5-.+060000B 5 * ABS .6-.+060000B 6 * ABS .7-.+030000B 7 * ABS .8-.+110000B 8 * ABS .9-.+060000B 9 * ABS .CLN-.+060000B : * ABS .SCN-.+100000B ; * ABS .LTN-.+030000B < * ABS .EQU-.+030000B = * ABS .GTN-.+020000B > * ABS .QM-.+050000B ? * ABS .ATS-.+070000B @ * ABS .A-.+040000B A * ABS .B-.+070000B B * ABS .C-.+060000B C * ABS .D-.+040000B D * ABS .E-.+040000B E * ABS .F-.+030000B F * ABS .G-.+110000B G * ABS .H-.+030000B H * ABS .I-.+040000B I * ABS .J-.+050000B J * ABS .K-.+030000B K * ABS .L-.+020000B L * ABS .M-.+030000B M * ABS .N-.+030000B N * ABS .O-.+050000B O * ABS .P-.+040000B P * ABS .Q-.+060000B Q * ABS .R-.+060000B R * ABS .S-.+070000B S * ABS .T-.+030000B T  * ABS .U-.+040000B U * ABS .V-.+040000B V * ABS .W-.+060000B W * ABS .X-.+040000B X * ABS .Y-.+050000B Y * ABS .Z-.+040000B Z * ABS .LBK-.+030000B [ * ABS .RSL-.+020000B \ * ABS .RBK-.+030000B ] * ABS .UAW-.+030000B ^ * ABS .LAW-.+040000B _ * ETBL EQU * * ************* DO NOT REARRANGE THE CONTENTS OF THIS TABLE! ******* * END OF "ASCII CODE DIRECTORY". SKP * VECTOR BYTE CODES ARE PACKED TWO(2) PER * VECTOR CODE WORD. SPC 1 * FORM: CCDDDLLL,CCDDDLLL SPC 1 * WHERE, C/CODE: 0 = NON-WRITING, * 1 = FIRST AND LAST POINTS * ARE SUPPRESSED (IT IS * USED TO DRAW A VECTOR * BETWEEN TWO(2) OTHER * VECTORS), * 2 = FULL VECTOR (ALL POINTS * ARE DISPLAYED), * 3 = FIRST POINT IS * SUPPRESSED (IT IS USED * TO CONTINUE FROM THE * END OF AN EXISTING * VECTOR); SPC 1 * D/DIRECTION CODES: STARTING WITH * ZERO(0) DEGREES ON THE UNIT * CIRCLE, THERE ARE EIGHT (8) * POSSIBLE DIRECTIONS AT : 0,45,90,135,180, * 225,270,AND 315 DEGREES RESPECTIVELY. * RANGE = 0:7 SPC 1 * L/LENGTH: MAY BE 0 TO 7 UNITS LONG. SPC 3 * WATCH OUT FOR COMBINED CODES FOR THE FYOLLOWING GROUPS:- SPC 1 * [B P R] [C G] [E F] [% / 0 O] [, ;] [. :] [$ S] SPC 2 [TAB DEF . DEFINES THE CODE TABLE BASE ADDR&. .SPC OCT 3000 (SPACE). . EQU .SPC .EXP OCT 1200,11224,36062 ! .QTE OCT 4423,111002,131073,30400 " .NUM OCT 11204,11244,4664,1224,35462 # .AND OCT 2234,150711,174761,165361,174701,145072 & .PRM OCT 5022,111074,31000 ' .LP OCT 5423,124764,174403 ( .RP OCT 12411,134764,164405 ) .STR OCT 10614,21264,1234,36401 * .PLS OCT 11604,15264,34403 + .SCN OCT 5022,110741,170501,31052 ; (USES COMMA) .CMA OCT 34611,151341,170501,34403 , .MIN OCT 11011,101073 - .PER OCT 601,150741,70405 . OCT 16241,170701,50474 2ND DOT FOR : .PCT OCT 12221,140761,60473,110701,170541,21461 % .SLH OCT 10614,31472 / .0 EQU .SLH OCT 46 0 (USES / & O) OX OCT 631,152311,141371,172351,61005 O .1 OCT 602,20726,164475 1 .2 OCT 12611,141371,170751,161351,171304,1000 2 .3 OCT 12611,141371,170751,160452,134702,144721 3 OCT 54473 3 .4 OCT 1626,165761,142072 4 .5 OCT 10671,141311,151331,161722,142072,64 5 .6 OCT 631,151712,140453,141771,170751,61005 6 .7 OCT 13204,170753,171005 7 .8 OCT 5611,150731,161351,170771,141371,170751 8 OCT 161331,150711,1073 8 .9 OCT 101312,151731,161351,170771,41472,61 9 .CLN EQU .PER : .LTN OCT 5422,125372,34402 < .EQU OCT 5642,30602,35001 = .GTN OCT 4612,155075 > .QM OCT 12611,140771,170751,170462,100004 ? SKP .ATS OCT 12611,141371,172351,161331,150711,140563 @ OCT 1002 @ .A OCT 112312,175364,15042,42072 A * .B LOCATED BEFORE .P .C OCT 10624,144702,174454,174702,144471,400 C GX OCT 20433,101162,34401 G .D OCT 113303,174764,164543,3000 D .E OCT 142044 E .F OCT 113304,25441,141473 F .G EQU .C .H OCT 113063,42023,133002 H .I OCT 602,20526,20602,35463 I .J OCT 10671,140711,52441,101072,64 J .K OCT 113064,146053,175402 K .L OCT 13266,142002 L .M OCT 113372,145366,1000 M .N OCT 113061,76025,133002 N .O EQU OX SKP .B OCT 141711,150531,25400 B (USES P) .P OCT 113303,174761,164543,35403 P RX OCT 15442,175402 R .Q OCT 1241,154724,144702,174763,65022,135002 Q .R EQU .P .S OCT 10671,141311,150731,161331,150711,141371 OCT 35063 S OCT 22126,36062 $ .T OCT 13204,21366,2000 T .U OCT 13265,174702,144725,35064 U .V OCT 13264,175312,152072,32000 V .W OCT 13265,174711,151062,174711,152472,32000 W .X OCT 110714,150444,130774,170402 X .Y OCT 13261,175312,150452,30763,2000 Y .Z OCT 13204,170754,170704,1000 Z9 SKP .LBK OCT 11413,121366,141002 [ .RSL OCT 12674,34401 \ .RBK OCT 12411,101366,161004 ] .UAW OCT 12212,175032,173004 ^ .LAW OCT 11612,25372,15304,35061 _ * SPC 1 END ASMB,L,C HED VIDEO SUBROUTINES VECTR, AREA, VEND A-91200-16002-2 * * NAME: VECTOR GENERATOR, ETC. OF VIDEO DISPLAY LIBRARY. * SOURCE: 91200-18002 (FILE 5) * BINARY: 91200-16002 (MODULE 5) * PGMR: R.M.C. REV.C(1648) MADE BY DENTON ANDERSON * REV.B(1603) IS FOR COLOR OPERATION. * REV.C(1648) IS FOR POWER FAIL - AUTO RESTART. * * NAM VECTR,7 91200-16002 REV 1648 -- 761124 SPC 1 ENT VECTR,VEND,VAREA EXT .ENTR,POINT SPC 1 XV NOP X ORIGIN OF VECTOR. YV NOP Y ORIGIN OF VECTOR. ROT NOP ROTATION 0:7. LEN NOP VECTOR LENGTH (POINTS-1). TYPE DEF B2 VECTOR CONTROL WORD: * 0 NON-WRITING. * 1 SUPPRESS FIRST POINT. * 2 WRITE ALL POINTS. * 3 SUPPRESS FIRST & LAST POINTS. VMODE DEF ZERO DEFAULTS TO WHITE (0). DU\LO DEF ZERO 0/NON 0 =LOAD/LOAD & DUMP PBUFR. PF NOP POWER FAIL INDICAT%OR. SPC 1 VECTR NOP ENTRY POINT. JSB .ENTR TRANSFER THE PARAMETER ADDRESSES. DEF XV LDA VMODE,I TRANSFER MODE ADDRESS AND STA NMODE POWER FAIL LDA PF INDICATOR STA PFAIL FOR POINT CALL LDB LEN,I CHECK FIRST FOR LEN=100000B, CLE,ELB AND IF SO, DUMP WITHOUT SEZ,RSS VECTOR GENERATION. JMP *+3 SZB,RSS JMP EXIT1 SKP LDA XV,I IF X IS -VE, IGNORE X AND Y SSA AND APPEND VECTOR. JMP ADDTO ALF,ALF "X" COORDINATE TO BITS 15-8. XOR YV,I "Y" COORDINATE INTO BITS 7-0. ALF,ALF STA LOC SAVE THE NEXT DISPLAY LOCATION. ADDTO LDB TYPE,I RBR MOVE TYPE INTO BITS 15 STB TYPE AND 0 FOR EASY TESTING LDA ROT,I LDB LEN,I SZB,RSS IF LENGTH IS ZERO, JMP NOL GO CHECK SINGLE POINT CASE. CCE,SSB,RSS CMB,CLE,INB NEGATE FOR COUNTING. STB LEN SEZ IF LEN WAS -VE, REVERSE VECTOR ADA B4 DIRECTION. AND B7 MOD 8 ADA DBASE ADDRESS OF DISPLACEMENT CONSTANT. LDA A,I LOAD THE DISPLACEMENT CONSTANT. STA DISP SAVE FOR MODIFICATION WITH "LOC". LDA LOC LOAD THE CURRENT "GUN" LOCATION. LDB TYPE SSB,RSS NON-WRITE OR WRITE 1ST POINT? JMP TRAW YES ADA DISP SKIP THE FIRST POINT. STA LOC STORE "GUN" LOCATION IN "LOC". NPT ISZ LEN IS THIS THE LAST POINT? JMP EMIT NO, EMIT THE POINT AND CONTINUE. LDB TYPE SLB SUPPRESS LAST POINT? JSB .PPNT NO, SO DISPLAY THE POINT. JMP EXIT SPC 2 DISP NOP LOC NOP LOCATION OF NEXT DISPLAY POINT. B4 OCT 4 B7 OCT 7 SKP EMIT JSB .PPNT DISPLAY POINT AT "LOC". LDA LOC LOAD THE CURRENT "GUN" LOCATION. p ADA DISP ADD IN THE DISPLACEMENT. STA LOC STORE "LOC" TO SAVE IT FOR LATER. JMP NPT GO SEE IF THIS IS THE LAST POINT. SPC 1 TRAW SLB IS THIS A WRITE? JMP EMIT YES, GO DISPLAY THE FIRST POINT. LOOP2 ADA DISP NON-WRITE, "LOC" IS IN "A". ISZ LEN ARE THERE MORE DISPLACEMENTS? JMP LOOP2 YES, REPEAT THE ADD. STA LOC JMP EXIT SPC 1 NOL LDA LOC LOAD THE CURRENT "GUN" LOCATION. LDB TYPE CHECK FOR TYPE 2. SLB JSB .PPNT DISPLAY THE FIRST POINT. SPC 1 EXIT LDA DU\LO,I IF OUTPUT IS NOT FORCED SZA,RSS BY THE CALLER, JMP EXIT2 DON'T DUMP THE BUFFER. EXIT1 LDA PLEN WHEN OUTPUT IS FORCED, SZA DUMP ONLY IF BUFFER JSB DUMP HAS SOME POINTS. EXIT2 LDA DZERO RESTORE DEFAULT PARAMETERS STA DU\LO FOR NEXT ENTRY BY STA VMODE CALLER. LDA DEFB2 STA TYPE CLA STA PF JMP VECTR,I SPC 2 PBLEN ABS -BLEN .POUT DEF PBUFR CURRENT POINTER .PBUF DEF PBUFR FIXED POINTER TO START PLEN OCT 0 ACCUMULATOR PCTR ABS -BLEN OVERFILL PREVENTER SKP .PPNT NOP STA ALOC SAVE POINT LDB NMODE IS THE NEW MODE CPB MODE THE SAME AS OLD MODE? JMP .VPNT YES - GO ON LDB PLEN SZB IS THE BUFFER EMPTY? JSB DUMP NO - SO DUMP WITH OLD MODE LDB NMODE ESTABLISH STB MODE NEW MODE .VPNT STA .POUT,I ISZ .POUT ISZ PLEN ISZ PCTR JMP .PPNT,I JSB DUMP PBUFR IS FULL JMP .PPNT,I SPC 1 DUMP NOP JSB POINT DEF RSTR DEF PBUFR DEF PLEN DEF MODE PFAIL NOP RSTR LDB .PBUF STB .POUT LDB PBLEN STB PCTR CLB STB PLEN LDA ALOC RESTORE POINT JMP DUMP,I !e SPC 2 MODE NOP NMODE NOP SKP * CURRENT LOCATION ROUTINE. SPC 1 IX NOP ADDRESS FOR THE "X" COORDINATE. IY NOP ADDRESS FOR THE "Y" COORDINATE. VEND NOP ENTRY POINT. JSB .ENTR CALL WITH TWO(2) PARAMETERS. DEF IX LDA LOC LOAD THE LAST POINT ADDRESS. AND B377 EXTRACT THE X COORDINATE STA IX,I & STORE IT IN THE PARAMETER. LDA LOC LOAD THE LAST POINT ADDRESS. ALF,ALF SHIFT THE "Y" COORDINATE. AND B377 EXTRACT THE Y COORDINATE STA IY,I & STORE IT IN THE PARAMETER. JMP VEND,I SPC 2 A EQU 0 BLEN EQU 350 LENGTH OF PBUFR SPC 1 VLEN NOP STORE AREA VECTOR LENGTH ZERO OCT 0 B2 OCT 2 B3 OCT 3 SPC 1 DZERO DEF ZERO DEFB1 DEF B1 DEFB2 DEF B2 SPC 2 * ROTATION OFF-SET VALUES (45 DEGREE). SPC 1 DBASE DEF *+1 B1 OCT 1,401,400 B377 OCT 377,-1,177377 ROTATIONS 3,4,5 M400 OCT 177400,177401 ROTATIONS 6,7 SKP * AREA ERASE OR WRITE SUBROUTINE. * * THE AREA DEFINED IN THE CALL IS 'WRITTEN' FROM THE TOP LEFT * CORNER, COLUMN BY COLUMN. * * * CALCULATION OF INTERNAL PARAMETERS FOR AREA: SPC 1 ************************************************************** * VALUE OF AROT (0:3) * * * 00 * 01 * 10 * 11 * ************************************************************** * X ORIGIN * XA * XA-DELTY * XA-DELTX * XA * * Y ORIGIN * YA+DELTY * YA+DELTX * YA * YA * * LENGTH * DELTY * DELTX * DELTY * DELTX * * # OF VECTORS * DELTX+1 * DELTY+1 * DELTX+1 * DELTY+1 * ************************************************************** SPC 1 XA NOP YA NOP DELTX NOP INTERNAL USE AS VECTOR COUNTER. DELTY NOP INTERNAL USE AS LENGTH COUNTER. B AROT DEF ZERO DEFAULT L-TO-R FROM LOWER LHC. AMODE DEF B1 DEFAULT BLACK (1). PFL NOP POWER FAIL INDICATOR. SPC 1 VAREA NOP ENTRY POINT JSB .ENTR DEF XA LDA AMODE,I TRANSFER MODE ADDRESS AND STA NMODE POWER FAIL LDA PFL INDICATOR STA PFAIL FOR POINT CALL. LDA AROT,I AND B3 MOD 4 STA AROT LDB DELTY,I SLA,RAR LDB DELTX,I SSB NEG. LENGTH? JMP EAREA YES -- DON'T DO IT! CMB SAVE AS PRESET FOR STB VLEN LENGTH COUNTER. CMB RESTORE FOR YA CALCULATION. SLA CLB ADB YA,I STB YA SKP LDA AROT LDB DELTX,I SLA LDB DELTY,I SSB NEG. LENGTH? JMP EAREA YES -- DON'T DO IT! CMB STB DELTX -(# OF VECTORS) INB ADJUST FOR X-ORIGIN USE. INA ADD 1 SO THAT ROTS 0,3 CAN BE RAR SEPARATED FROM ROTS 1,2 SLA,RSS CLB ADB XA,I STB XA COLUM LDB VLEN STB DELTY LDA YA ALF,ALF XOR XA DOTS JSB .PPNT ADA M400 ISZ DELTY JMP DOTS ISZ XA ISZ DELTX JMP COLUM JSB DUMP OUTPUT PARTIAL BUFFER. EAREA LDA DZERO RESTORE DEFAULT PARAMETERS STA AROT STA DU\LO LDA DEFB1 FOR NEXT CALL. STA AMODE CLA STA PFL JMP VAREA,I SPC 2 ALOC NOP CURRENT COORDINATES FOR AREA. PBUFR BSS BLEN THEND EQU * SPC 2 END ASMB,L,C HED VIDEO SUBROUTINES POINT,VIDLU,ERASE A-91200-16002-2 * * NAME: EXEC INTERFACE OF VIDEO DISPLAY LIBRARY * SOURCE: 91200-18002 (FILE 6) * BINARY: 91200-16002 (MODULE 6) * PGMR: R.M.C. REV.C(1648) MADE BY DENTON ANDERSON * REV.B(1603) IS FOR COLOR OPERATION. *  REV.C(1648) IS FOR POWER FAIL - AUTO RESTART. * * NAM POINT,7 91200-16002 REV 1648 -- 761124 SPC 1 ENT POINT,VIDLU,ERASE EXT .ENTR,EXEC,RSFLG SPC 1 BUFFR NOP NUM DEF B1 MODE DEF ZERO PFAIL NOP POWER FIAL INDICATOR. SPC 1 POINT NOP ENTRY POINT JSB .ENTR DEF BUFFR LDA NUM,I SZA,RSS IF 0,RETURN WITH NO JMP PRTN ACTION. STA NUM LDA CPRAM AND B200 KEEP BIT 7 OF CPRAM FOR CONTROL STA B REQUEST TO DRIVER LDA MODE,I GET COLOR CODE AND B7 CLE,ERA POSITION RAL,RAL COLOR BITS ELA,ALF FOR CONTROL RAL,RAL CALL IOR B FORM MODE BITS FOR CONTROL WORD IOR LU COMPLETE CONTROL WORD STA CPRAM AND SAVE SPC 1 LDA PFAIL IS POWER FAIL SZA,RSS TO BE CHECKED? JMP SMODE NO - GO ON SPC 1 JSB EXEC STATUS CALL FOR POWER FAIL DEF SRTN DEF D13 DEF LU DEF PSTAT SPC 1 SRTN LDA PSTAT AND B1 STA PFAIL,I SKP SMODE JSB EXEC SEND LAST SENSE AND CURRENT DEF P1 MODE TO DRIVER IN DEF B3 CONTROL REQUEST. DEF CPRAM SENSE & MODE PARAMETERS & LU. SPC 1 P1 JSB EXEC SEND COORDINATES OF EACH DEF PRTN POINT IN USER'S BUFFER DEF B2 DEF LU DEF BUFFR,I DEF NUM SPC 1 PRTN LDA DEFB1 RESTORE DEFAULT STA NUM PARAMETERS FOR NEXT CALL. LDA DZERO STA MODE CLA STA PFAIL JMP POINT,I SPC 2 B EQU 1 B1 OCT 1 B2 OCT 2 B3 OCT 3 B7 OCT 7 B77 OCT 77 B200 OCT 200 B400 OCT 400 D13 DEC 13 ZERO OCT 0 DEFB1 DEF B1 DZERO DEF ZERO CPRAM NOP PSTAT NOP SKP LU NOP SENSE DEF ZERO SPC 1 VIDLB@ SET TEST RAR / BIT STORAGE STA BIT7 / RAR / STA BIT8 / RAR / STA BIT9 / JMP SAVE,I SKP **************************************************************** * * * -- GAIN CHECK ROUTINE FOR TV -- * * Qh * **************************************************************** SPC 1 * THE GAIN SUBROUTINE GENERATES A RECTANGLE * AND ARROWS TO TEST THE HEIGHT AND WIDTH ON THE TV SPC 1 GAIN NOP SZB WAIT? JSB TIME5 YES JSB ERASE ERASE ENTIRE SCREEN JSB MODE SET WRITE MODE SPC 1 LDB TESTM GET AMERICAN SCAN INDICATOR LDA X GET Y = 256 SZB AMERICAN SCAN? LDA YAMER YES - GET Y = 240 STA Y SET VERTICAL DIMENSION LDA SA0 GET RECT 1 Y FOR NON-AMER. SZB AMERICAN SCAN? ADA STADR YES - Y = Y - 8 STA S0 SET VERTICAL POSITION 1 LDA SA1 GET RECT 2 Y FOR NON-AMER SZB AMERICAN SCAN? ADA STADR YES - Y = Y - 8 STA S1 SET VERTICAL POSITION 2 CLA GET NOP FOR ARROW POS. REDUCER SZB AMERICAN SCAN? LDA ADDX YES - GET INST. FOR POS. RED. STA ADD SET ARROW POSITION REDUCER SPC 1 JSB SQUAR GO TO SQUAR SBR TO DRAW A RECT. OCT 0 Y DEC 256 VERT. DIM. OF RECT. X DEC 256 HORIZ. DIM. OF RECT. SPC 1 LDA SYMBL GET NUMBER OF DOTS IN SYMBOL STA DOTC PUT IN DOT COUNTER LDA POSIT GET NUMBER OF POSITIONS STA POSC PUT IN POSITION COUNTER LDA LOOPS GET NUMBER OF LOOPS (ARROWS) STA LOOPC PUT IN LOOP COUNTER LDA ARW1S GET START OF SYMBOL STA ARW1 AND SAVE LDA ARW1T GET START OF COMMON POSITION STA ARW1P AND SAVE SKP **************************************************************** * * * -- GAIN ROUTINE CONTINUED -- * * * **************************************************************** SPC 1 HEAD1 LDA ARW1,I GET DOT LDB ARW1P,I GET POSITION ADA B ADD DOT TO POSITION ADD ADA STADR REDUCE Y BY 8 FOR AMER SCAN ONLY JSB OUTR SEND DOT TO SCOPE ISZ DOTC INCREMENT DOT COUNTER JMP *+2 SKIP JMP HEAD2 GET NEXT POSITION ISZ ARW1 INCREMENT DOT POINTER JMP HEAD1 SET UP NEXT DOT SPC 1 HEAD2 LDA SYMBL GET -12 STA DOTC PUT IN DOT COUNTER ISZ POSC INCREMENT POSITION JMP *+2 ALL 5 NOT DRAWN JMP HEAD3 RESTORE POSC AND TEST LOOPC LDA ARW1 ADA D11 STA ARW1 ISZ ARW1P JMP HEAD1 SPC 1 HEAD3 LDA POSIT GET -5 STA POSC PUT IN POSITION COUNTER ISZ LOOPC ARE ALL SYMBOLS DRAWN JMP *+2 ALL SYMBOLS NOT DRAWN JMP HEAD4 ALL SYMBOLS DRAWN ISZ ARW1 5 SYMBOLS OF ONE TYPE DRAWN ISZ ARW1P JMP HEAD1 SPC 1 HEAD4 JSB SQUAR WRITE A S0 OCT 77575 CROSS DEC 2 IN THE DEC 6 MIDDLE JSB SQUAR OF THE S1 OCT 76577 SCREEN DEC 6 BY WRITING DEC 2 TWO RECTANGLES CCB DONE! JMP GAIN,I SPC 2 ADDX ADA STADR Y POSITION REDUCING INSTRUCTION SKP **************************************************************** * * * -- PIN CUSHION TEST, CROSS HATCH PATTERN -- * * * **************************************************************** SPC 1 PIN NOP PIN CUSHION TEST SZB WAIT? JSB TIME5 YES JSB ERASE ERASE ENTIRE SCREEN JSB MODE SET WRITE MODE CLA SET eWRITE STA TOGG INDICATOR SPC 1 LDB TESTM GET AMERICAN SCAN INDICATOR LDA MASK0 GET VERT MIDDLE DONE, NON-AMER SZB AMERICAN SCAN? LDA MASK6 YES - GET VERT MID DONE FOR AMER STA MSK0 SET VERTICLE MIDDLE DONE TESTER LDA MASK6 GET VERT MIDDLE, NON-AMER SZB AMERICAN SCAN? LDA MASK1 YES - GET VERT MID FOR AMER STA MSK6 SET VERTICLE MIDDLE TESTER LDA MASK9 GET VERT NXT TO MID, NON-AMER SZB AMERICAN SCAN? LDA MASK5 YES - GET NXT TO MID FOR AMER STA MSK9 SET VERT NEXT TO MIDDLE TESTER SPC 1 UNPIN CLB CLEAR X COUNTER PIN1 CLA CLEAR Y COUNTER FAX1 IOR B MERGE X INTO Y JSB OUTR DRAW DOT AND MASK2 MASK OUT X PORTION CPA MASK2 TEST FOR Y LINE FINSIHED JMP FAX2 Y LINE FINISHED ADA CON7 ADD 1 TO Y JMP FAX1 SPC 1 FAX2 CPB MASK3 IS LAST LINE FINISHED? JMP FAX4 LAST FINISHED CPB MASK4 IS NEXT TO MIDDLE FINISHED? JMP FAX3 YES CPB MASK7 IS THIS THE MIDDLE? JMP FAX3A YES CPB MASK8 IS MIDDLE FINISHED? JMP FAX3 YES ADB CON3 ADD 10B TO X JMP PIN1 DRAW NEXT VERTICLE SPC 1 FAX3 ADB B7 ADD 7B TO X JMP PIN1 SPC 1 FAX3A ADB B1 ADD 1 TO X JMP PIN1 SKP **************************************************************** * * * -- PIN CUSHION TEST CONTINUED -- * * * **************************************************************** SPC 1 FAX4 CLB CLEAR Y COUNTER FAX5 CLA CLEAR X COUNTER FAX6 IOR B MERGE Y INTO X JSB OUTR DRAW DOT AND MASK3 }HFBMASK OUT Y PORTION CPA MASK3 TEST FOR HORIZONTAL FINISHED JMP FAX7 FINISHED INA ADD 1 TO X JMP FAX6 SPC 1 FAX7 CPB MASK2 IS LAST LINE FINISHED? JMP PIN2 LAST FINISHED RETURN TO MAIN CPB MSK6 IS NEXT TO MIDDLE FINISHED? JMP FAX8 YES CPB MSK9 IS THIS THE MIDDLE? JMP FAX8A YES CPB MSK0 IS MIDDLE FINISHED? JMP FAX8 YES ADB B4000 ADD 10B TO Y JMP FAX5 DRAW NEXT HORIZONTAL SPC 1 FAX8 ADB CON2 ADD 7B TO Y JMP FAX5 SPC 1 FAX8A ADB CON7 ADD 1 TO Y JMP FAX5 SPC 2 PIN2 LDA TOGG CHANGE STATE INA OF WRITE STA TOGG INDICATOR SLA,RSS TIME TO ERASE? JMP RESP NO - DONE LDB TEST YES SZB,RSS IS THIS FROM GO-NOGO? JMP RESP NO - DONE SPC 1 JSB TIME5 WAIT JSB MODE1 SET ERASE MODE JMP UNPIN GO ERASE SPC 1 RESP CCB DONE! JMP PIN,I SKP H**************************************************************** * * * -- SETTLING TIME, SQUARES IN 4 CORNERS -- * * * **************************************************************** SPC 1 SETTM NOP SETTLING TIME ROUTINE SZB WAIT? JSB TIME5 YES JSB ERASE ERASE ENTIRE SCREEN JSB MODE SET WRITE MODE SPC 1 LDB TESTM GET AMERICAN SCAN INDICATOR LDA SA2 GET RIGHT SQUARE POS, NON-AMER SZB AMERICAN SCAN? LDA SXA2 YES - GET RT SQR FOR AMER STA S2 SET RIGHT SQUARE STARTING POINT LDA STADR GET LEFT SQUARE POS, NON-AMER SZB AMERICAN SCAN? LDA SXA3 YES - GET LEFT SQR FOR AMER STA S3 SET LEFT SQUARE STARTING POINT SPC 1 JSB SQUAR PUTS 8X8 SQUARE ZERO OCT 0 IN THE CON3 DEC 8 LOWER LEFT DEC 8 CORNER JSB SQUAR PUTS 8X8 SQUARE S2 OCT 174370 IN THE DEC 8 UPPER RIGHT DEC 8 CORNER JSB SQUAR PUTS 8X8 SQUARE S3 OCT 174000 IN THE DEC 8 UPPER LEFT DEC 8 CORNER JSB SQUAR PUTS 8X8 SQUARE OCT 370 IN THE DEC 8 LOWER RIGHT DEC 8 CORNER CCB DONE! JMP SETTM,I SKP **************************************************************** * * * -- QUICKLY WRITE & ERASE ALL POINTS -- * * * **************************************************************** SPC 1 QUICK NOP CPB B1 FLASH BACKGROUND? RSS MAYBE JMP LA X@ NO LIA 1 IOR TESTC AND HLT0 CPA HLT0 ? JMP QUICK,I NO - IGNORE JMP ON YES LA LIA 1 SSA REPEAT MODE IN SUPER TEST? JMP LB YES - SO DO IT ALF,RAL SSA FLASH MODE IN SUP TEST? JMP QUICK,I YES - IGNORE LB SZB WAIT JSB TIME5 YES JSB ERASE ERASE ENTIRE SCREEN JSB MAP GET COLOR & POLARITY INFO ON CLA SET WRITE/ERASE STA W.E INDICATOR TO WRITE OLOOP LDB W.E PREPARE CARD FOR MODE LDA MD SLB LDA B15 IOR POL JSB SETMD OUTPUT MODE LDA W.E CLB ESTABLISH ADDRESS 0,0 JMP *+3 START SKP **************************************************************** * * * -- QUICK CONTINUED -- * * * **************************************************************** SPC 1 LOOP INB,SZB,RSS INCREMENT ADDRESS - DONE? JMP DONE YES SLA WRITE? CMB NO - COMP. FOR UPPER SCREEN OTB1 OTB TV OUTPUT STCC4 STC TV,C POINT SLA WRITE? CMB NO - COMP. BACK FOR INCREMENT JMP LOOP CONTINUE DONE LDA TESTA SZA WRITE ONLY? JMP OUT YES - ALL DONE LDA W.E CHANGE STATE OF XOR B1 WRITE/ERASE STA W.E INDICATOR SLA WRITE? JMP OLOOP NO - GO ERASE OUT CCB YES - DONE! JMP QUICK,I SKP **************************************************************** * * * -- DISPLAY HP LOGO -- * * i * **************************************************************** SPC 1 LOGO NOP CLA,INA SET INDICATOR FOR STA TESTB FLASHING MODE SZB WAIT? JSB TIME5 YES JSB ERASE ERASE ENTIRE SCREEN JSB MODE SET WRITE MODE LDA CW1 SET OTA 6B UP CLC 2B DMA LDA BUFAD TRANSFER OTA 2B / STC 2B / LDA BUFLN / OTA 2B / LIB 2B READ BACK WORD COUNT SZB,RSS ZERO (NO DMA CARDS)? JMP NODMA DON'T USE DMA INB,SZB,RSS NEG ONE (NO DCPC CARD)? JMP NODMA DON'T USE DMA STC 6B,C TURN ON DMA SFS 6B WAIT FOR JMP *-1 DMA TO COMPLETE CLC 6B TURN OF DMA JMP EXIT DONE SPC 1 NODMA STA CNT4 SET WORD COUNT FOR NON-DMA LDB BUFAD GET BUFFER ADDRESS MORE LDA B,I GET A POINT FROM BUFFER JSB OUTR OUTPUT THE POINT INB ADVANCE BUFFER ADDRESS ISZ CNT4 COUNT DOWN - DONE? JMP MORE NO - GET NEXT POINT EXIT CCB DONE! CLA CLEAR FLASHING STA TESTB INDICATOR JMP LOGO,I SKP **************************************************************** * * * -- ERASE SCREEN -- * * * **************************************************************** SPC 1 BLANK NOP SZB WAIT? JSB TIME5 YES JSB ERASE DO THE BULK ERASE JSB MODE SET SCREEN POLARITY CCB JMP BLANK,I SPC 3 ***************************************************************** * D * * -- BIT 14 HALT PROCESSOR -- * * * ***************************************************************** SPC 1 ..HLT JSB .HALT FROM FLASH OR BARS LDA TEST SZA SUPER TEST? JMP BRS NO - BARS JMP RESTT YES - RESTART SPC 1 .HALT NOP JSB DEL SWITCH DE-BOUNCE LIA 1 CLEAR AND CLHLT HALT BIT (14) OTA 1 IN SWITCH REGISTER HLT 77B HALT LDA HLT77 RESTART STA *-2 JMP .HALT,I SKP **************************************************************** * * * -- FLASHING ROUTINE -- * * * **************************************************************** SPC 1 FLSH LDA B3 JSB SET STA SWCH CLEAR SWITCH TO DO 1 TEST FSH CLB JSB LOGO WRITE LOGO WITH BACKGROUND SPC 1 FLASH LDA TEST CPA B4 BARS? JMP CLR? YES SZA,RSS GO-NOGO TEST? JMP CLR? NO - SUPER TEST JSB TIME5 WAIT A SECOND LDA FTIME ESTABLISH LDB MD NUMBER SZB OF ARS TIMES STA FCNTR TO FLASH JMP FLSH0 START FLASHING SPC 1 CLR? LIA 1 FOR SUPER TEST & BARS ALF,RAL DO WE SSA,RSS WANT TO FLASH? JMP CLEAR NO SPC 1 FLSH0 LDA B2 GET BLACK-ON-WHITE BIT STA TESTC FLSH1 JSB SETMD SET VIDEO POLARITY STA TEMP SAVE POLARITY MODE LDA TEST CPA B4 BARS? JMP TIME YES SZA,RSS GO-NOGO TEST? JMP TIME NO JSB TIMEF YES - WAIT A BIT ISZ FCNTR COUNT DOWN # OF FLASHES - DONE? RSS NO JMP CLEER YES - GO CLEAR THINGS JMP FLSH2 CONTINUE FLASHING - NEXT PAGE SPC 1 TIME JSB TIME5 SUPER TEST OR BARS - WAIT LIA 1 WANT RAL TO SSA HALT? JMP ..HLT YES ALF WANT TO SSA,RSS CONTINUE FLASHING? JMP CLEAR NO - GO CLEAR THINGS SKP **************************************************************** * * * -- FLASHING ROUTINE CONTINUED * * * **************************************************************** SPC 1 LDA TEST CPA B4 BARS? JMP FLSH2 YES LIA 1 WANT TO STOP AND TEMP1 FLASHING THIS SZA,RSS PATTERN? JMP CLEAR YES - GO CLEAR THINGS SPC 1 FLSH2 LDA TEMP CHANGE VIDEO XOR B2 POLARITY MODE JMP FLSH1 AND GO FLASH SPC 1 CLEER CLA SET WHITE-ON-BLACK JSB SETMD FOR GO-NOGO TEST LIA 1 WANT TO SSA,RSS REPEAT? JMP FHLT NO - HALT RAL SSA INCREMENT COLORS? JSB INC YES JMP SWCH FHLT HLT 77B LDA HLT77 GO REPEAT STA *-2 THE TEST(S) SPC 1 SWCH NOP SWITCH - RSS IF ALL 3 TESTS RUN JMP FTEST GO FLASH AGAIN JSB ERASE ERASE SCREEN JMP BEGIN GO REDO I/O CHECK,ETC. SPC 1 CLEAR LDA TEST CPA B4 BARS? JMP DUNN YES LIA 1 SSA GO BACK TO REPEAT MODE? JMP LC YES AND CLR CLEAR SWITCH REGISTER OTA 1 FOR SUPER TEST LC JSB DEL  WAIT FOR SWITCH DEBOUNCE JMP AGAIN GET NEXT TEST SPC 1 FTEST LDB MD JSB MAP CPA B SAME COLOR? JMP FLASH YES - REPEAT IT JMP FSH NO - GET NEW ONE SKP **************************************************************** * * * -- COLOR OR GRAY BARS ROUTINE -- * * * **************************************************************** SPC 1 BRS LDA B4 JSB SET LIA 1 SET VIDEO POLARITY RAR,RAR FROM SWITCH REGISTER BIT 3 AND B2 =0 NORMAL STA TEMP =1 INVERTED JSB SETMD CLA INITIALIZE INSTRUCTION STA L0 FOR FIRST PASS JSB ERASE DO BULK ERASE SPC 1 CLB SET FIRST POINT (0,0) SPC 1 LOOPB LDA B OUTPUT JSB OUTR POINT SPC 1 INB,SZB,RSS INCREMENT POINT AND TEST JMP DUNN ALL DONE CPB ALL LOWER WHITE AREA COMPLETE? JMP T0 YES - MODIFY LOOP L0 NOP UNTIL LOWER AREA DONE, THEN RSS JMP LOOPB GO OUTPUT POINT SPC 1 LDA B CHECK X COORDINATE AND MASK3 FOR START OF CPA ZERO BLACK AREA? JMP T0 SET BLACK CPA FIRST BLUE AREA (1/8)? JMP T1 SET BLUE CPA SECND GREEN AREA (1/4)? JMP T2 SET GREEN CPA FS CYAN AREA (3/8)? JMP T1 SET CYAN CPA MASK8 RED AREA (1/2)? JMP T3 SET RED CPA FT MAGENTA AREA (5/8)? JMP T1 SET MAGENTA CPA B300 YELLOW AREA (3/4)? JMP T2 SET YELLOW CPA FST WHITE AREA (7/8)? JMP T1 SET WHITw0E JMP LOOPB GO OUTPUT THE POINT SKP **************************************************************** * * * -- BAR GENERATOR, CONTINUED -- * * * **************************************************************** SPC 1 DUNN LIA 1 STA TEMP1 SSA,RSS REPEAT? JMP *+3 NO JSB TIME5 YES - DELAY LOOP JMP BRS GO DO AGAIN LDA TEMP1 CHECK FOR ALF,RAL FLASHING CONDITION SSA (SWITCH 10)? JMP FLASH YES - GO FLASH BHLT HLT 77B NO - SO STOP! LDA HLT77 INSURE HALT COMMAND STA *-2 FOR 2100 JMP BRS DO IT AGAIN SPC 2 * COLOR SETTING ROUTINES SPC 1 T0 LDA XRSS \ STA L0 \ SET LDA B15 / BLACK JMP T4 / SPC 1 T1 LDA MD \ AND B7 > TURN BLUE ON JMP T4 / SPC 1 T2 LDA MD \ AND B13 \ TURN BLUE OFF IOR B10 / AND GREEN ON JMP T4 / SPC 1 T3 LDA MD \ AND B16 > TURN BLUE & GREEN OFF IOR B14 / AND RED ON SPC 1 T4 STA MD \ IOR TEMP \ SET REQUESTED MODE & POLARITY, JSB SETMD / THEN RETURN TO LOOP JMP LOOPB / SKP **************************************************************** * * * -- DRAW SPECIFIED SQUARE -- * * * **************************************************************** SPC 1 * ** USED BY GAIN AND SETTM ** SPC 1 SQUAR NOP LDA SQUAR,I THIS GETS LLHC STA BUFF _LDB SQUAR INB LDA 1,I ADDRESS OF VERT IN B CMA,INA TAKE TWO'S COMP INA ADD ONE STA VERT1 STA VERT2 STORE IN TWO COUNTERS INB ADD TO ADDRESS LDA 1,I GET HORIZONTAL CMA,INA TAKE TWO'S COMP INA ADD ONE STA HORZ1 STA HORZ2 STORE IN TWO COUNTERS INB PREPARE RETURN ADDRESS STB SQUAR STORE IN RETURN POINT LDA BUFF SPC 1 UP ADA CON7 A+1 TO A JSB OUTR DRAW DOT ISZ VERT1 ADD ONE TO VERT JMP UP SPC 1 RIGHT ADA B1 JSB OUTR ISZ HORZ1 JMP RIGHT SPC 1 DOWN ADA CON1 WHERE CON1=-400B JSB OUTR ISZ VERT2 JMP DOWN SPC 1 LEFT ADA XCONN WHERE XCONN=-1 JSB OUTR ISZ HORZ2 JMP LEFT SPC 1 JMP SQUAR,I SKP **************************************************************** * * * -- BULK ERASE ROUTINE -- * * * **************************************************************** SPC 1 ERASE NOP CLF3 CLF TV CLEAR PRESET LIA1 LIA TV ISSUE BULK ERASE CMND STCC1 STC TV,C STF 0 TURN ON THE INTERRUPT SYSTEM JSB TIMER TIME ERASE FOR 44 MILLISECONDS HLT 2B THE ERASE TOOK TOO LONG! LDA HLT2 RESTORE HALT STA *-2 FOR 2100A ENDE CLF 0 TURN OFF THE INTERRUPT SYSTEM JMP ERASE,I RETURN SPC 4 **************************************************************** * * * -- ERASE DURATION TIMER -- * * * ************************************************************ .**** SPC 1 * THIS IS A 44 MILLISECOND TIMER COMPENSATED * FOR COMPUTER MODEL. SPC 1 TIMER NOP LDB COMP SZB,RSS 2100? LDA MILC6 YES CPB B1 2114/2115? LDA MILC5 YES CPB B2 2116? LDA MILCT YES CPB B3 21MX? LDA MILCX YES CPB B4 21MX-E SERIES? JMP DXE YES SPC 1 ISZ A TIMING JMP *-1 LOOP JMP TIMER,I SPC 1 DXE LDA LOOPS 21MX-E SEREIS DXE1 LDB MILCE TIMING OCT 100060 LOOP INA,SZA JMP DXE1 JMP TIMER,I SKP **************************************************************** * * * -- GENERAL PURPOSE TIME DELAY -- * * * **************************************************************** SPC 1 * THE FOLLOWING IS NOT COMPENSATED FOR CYCLE TIME; * THE TIME IS SET BY BITS 11-13 (APPROXIMATELY) SPC 1 TIME5 NOP <1, 1 OR 5 SECOND TIMER LIA 1 CHECK LDB TEST SZB CPB B4 RSS CLA,INA,RSS ALF,RAR BITS 13 & 12 LDB TCON5 GET 5 SECOND COUNT SLA 1 SECOND? LDB POSIT MAYBE SSA QUICK? CCB YES RAL EXTREMELY SSA,RSS QUICK? JMP *+3 NO LDA TCONF YES RSS LDA TCON1 STA TCON SAVE PROPER COUNTER SPC 1 LDA TCON GET INNER TIMER ISZ A INNER TIMER JMP *-1 COUNT-DOWN LOOP ISZ B OUTER TIMER JMP *-4 COUNT-DOWN LOOP JMP TIME5,I SPC 4 **************************************************************** * D * * -- FLASH RATE DELAY FOR GO-NOGO TEST -- * * * **************************************************************** SPC 1 TIMEF NOP LDA TCONF ESTABLISH COUNTER LDB MD SZB WHITE? LDA TCON1 NO - SO FLASH SLOWER ISZ A COUNT JMP *-1 LOOP JMP TIMEF,I SKP **************************************************************** * * * -- OUTPUT A POINT -- * * * **************************************************************** SPC 1 OUTR NOP OTA1 OTA TV \ STCC2 STC TV,C \ OUTPUT POINT SFS1 SFS TV / TO CARD JMP *-1 / JMP OUTR,I SPC 4 **************************************************************** * * * -- SW REG CONTACT CHATTER DELAY ROUTINE -- * * * **************************************************************** SPC 1 DEL NOP STA ATMP1 SAVE A LDA CNT1 STA CNT4 SET COUNTER LDA ATMP1 RESTORE A ISZ CNT4 DELAY JMP *-1 LOOP JMP DEL,I SPC 4 **************************************************************** * * * -- SET ERASE MODE -- * * * **************************************************************** SPC 1 MODE1 NOP SET ERASE MODE LDA B15 STA MODE2 JSB MODE GO SET ERASE MODE CLA RESTORE STA MODE2 WRITE MODE BIT  JMP MODE1,I SKP **************************************************************** * * * -- SET WRITE MODE -- * * * **************************************************************** SPC 1 MODE NOP SET WRITE MODE JSB SETUP GET COLOR INFORMATION IOR MODE2 SET ERASE BIT IF DESIRED JSB SETMD OUTPUT MODE JMP MODE,I SPC 4 **************************************************************** * * * -- SET REQUESTED MODE -- * * * **************************************************************** SPC 1 SETMD NOP CLC1 CLC TV GET CARD READY FOR MODE WORD OTA2 OTA TV OUTPUT STCC3 STC TV,C MODE WORD SFS2 SFS TV JMP *-1 JMP SETMD,I SPC 4 **************************************************************** * * * -- INITIALIZE TEST PARAMETERS -- * * * **************************************************************** SPC 1 SET NOP STA TEST SAVE TEST INDICATOR LDA TRAPC RESTORE ERASE INTERRUPT STA SC,I IN TV TRAP CELL CLA ESTABLISH HALT CONDITION STA HALT? FOR AUTO RESTART JMP SET,I SKP **************************************************************** * * * -- POWER FAIL - AUTO RESTART -- * * * **************************************************************** SPC 1 + PFAIL NOP POWER FAIL - AUTO RESTART SFC 4B POWER UP? JMP ASTRT YES CCA SET RUNNING STA HALT? CONDITION LIA 1 SAVE SWITCH STA TEMP REGISTER LDA PFAIL SAVE RESTART STA TEMP1 ADDRESS FOR CNFGR CLC 4B SET RESTART INDICATOR HLT 4B SHUTDOWN SPC 1 ASTRT STC 4B ISSUE POPIO AND CRS JSB DEL SHORT DELAY JSB ERASE BULK ERASE LDB HALT? GET RUN/HALT CONDITION LDA TEMP GET SAVED SWITCH REG SZB HALT? OTA 1 NO - SO RESTORE SWITCH REG LDA TEST GET TEST INDICATOR CPA B1 GO-NOGO? JMP BEGIN YES - DO IT SZB,RSS HALT? JMP STUCK YES - STUCK HALT SSA RAM TEST? JMP RAMS YES - DO IT SZA,RSS "SUPER TEST"? JMP RESTT YES - DO IT CPA B2 PATTERN TEST (GO-NOGO)? JMP PATRN YES - DO IT CPA B3 LOGO FLASHER (GO-NOGO)? JMP FLSH YES - DO IT CPA B7 I/O CHECK (GO-NOGO)? JMP IOCHK YES - DO IT CPA B17 CONFIGURING? JMP TEMP1,I YES - FINISH IT CPA B4 COLOR BARS? JMP BRS YES - DO IT JMP STUCK INVALID TEST INDICATOR SKP **************************************************************** * * * -- COLOR INFORMATION COLLECTOR -- * * * **************************************************************** SPC 1 MAP NOP STB TEMP2 SAVE B REGISTER LIA 1 GET COLOR INFORMATION BITS AND B17 AND ISOLATE THEM STA MD THEN SAVE TEMPORARILY AND B7 ISOLATE COLOR BITS SZA,RSS WHITE? CLBB YES CPA B1 BLACK? LDB B15 YES CPA B2 RED? LDB B14 YES CPA B3 GREEN? LDB B11 YES CPA B4 BLUE? LDB B5 YES CPA B5 YELLOW? LDB B10 YES CPA B6 MAGENTA? LDB B4 YES CPA B7 CYAN? LDB B1 YES LDA MD RECOVER BITS RAR,RAR AND ISOLATE AND AND B2 POSITION POLARITY STA POL SAVE VIDEO POLARITY IOR B CONSTRUCT TOTAL MODE STB MD SAVE COLOR INFORMATION LDB TEMP2 RECOVER B REGISTER JMP MAP,I SKP **************************************************************** * * * -- SET COMP. BKGRND. FOR FLASHING -- * * * **************************************************************** SPC 1 SETUP NOP LDA TEST CPA B3 FLASHING ONLY (103B)? JMP L2 YES CPA B1 PATTERNS ONLY (102B)? JMP L1 YES SZA SUPER TEST? JMP ONN NO LIA 1 YES ALF,RAL SSA FLASHING IN SUPER TEST? JMP L2 YES JMP ONN NO SPC 1 L1 LDA TESTB IN LOGO SZA,RSS PATTERN? JMP ONN NO L2 JSB MAP GET LDA MD COLOR BITS SZA,RSS WHITE? JMP ONN YES - SKIP XOR B15 NO - COMPLEMENT STA MD CLB,INB STB TESTA SET INDICATOR FOR WRITE ONLY JSB QUICK GENERATE BACKGROUND ONN JSB MAP GET REQUESTED COLOR JMP SETUP,I SPC 2 **************************************************************** * qcTRN * * -- INCREMENT COLORS -- * * * **************************************************************** SPC 1 INC NOP LIA 1 GET AND AND MASKB SAVE THE STA B NON COLOR BITS LIA 1 GET THE CURRENT INA COLOR BITS AND INCREMENT AND B7 ISOLATE THE COLOR BITS CPA B1 BLACK? JMP *-3 YES - INCREMENT AGAIN IOR B MERGE WITH NON COLOR BITS OTA 1 SET IN SW REG JMP INC,I SKP 2T**************************************************************** * * * -- LOGO BUFFER -- * * * **************************************************************** SPC 1 BUFLN DEC -2013 BUFFER LENGTH (# OF POINTS) SPC 1 BUFAD DEF *+1 BUFFER STARTING ADDRESS SPC 2 ******** CHARACTERS ******** SPC 1 OCT 107115,107116,107117,107120,107121 OCT 106517,106117,105517,105117,104517 OCT 104117 OCT 107123,106523,106123,105523,105123 OCT 104524,104125,104526,105127,105527 OCT 106127,106527,107127 OCT 104140,104141,104142,104541,105141 OCT 105541,106141,106541,107140,107141 OCT 107142 OCT 104145,104545,105145,105545,106145 OCT 106545,107145,106146,105547,105150 OCT 107151,106551,106151,105551,105151 OCT 104551,104151 OCT 107153,107154,107155,107156,107157 OCT 106555,106155,105555,105155,104555 OCT 104155 OCT 104162,104163,104164,104165,104161 OCT 104561,105161,105561,106161,106561 OCT 107161,105564,105563,105562,105561 OCT 107162,107163,107164,107165 OCT 104167,104567,105167,105567,106167 OCT 106567,107167,107170,107171,107172 OCT 106573,106173,105572,105571,105570 OCT 105171,104572,104173 OCT 104175,104575,105175,105575,106175 OCT 106575,107175,105600,105577,105576 OCT 105575,107176,107177,107200,107201 OCT 104203,104603,105203,105603,106203 OCT 106604,107205,106606,106207,105607 OCT 105207,104607,104207,105204,105205 OCT 105206 OCT 104611,105211,105611,106211,106611 OCT 107212,107213,107214,106615,104615 OCT 104214,104213,104212 OCT 104220,104221,104222,104223,104217 OCT 104617,105217,105617,106217,106617 OCT 107217,105622,105621,105620,105617 A OCT 107220,107221,107222,107223 SKP **************************************************************** * * * -- LOGO BUFFER CONTINUED -- * * * **************************************************************** SPC 1 ******** CHARACTERS ******** SPC 1 OCT 104633,105233,105633,106233,106633 OCT 107234,107235,107236,106637,104637 OCT 104236,104235,104234 OCT 104241,104641,105241,105641,106241 OCT 106642,107243,106644,106245,105645 OCT 105245,104645,104245,105242,105243 OCT 105244 OCT 104247,104647,105247,105647,106247 OCT 106647,107247,107250,107251,107252 OCT 106653,106253,105652,105651,105650 OCT 105251,104652,104253 OCT 104255,104655,105255,105655,106255 OCT 106655,107255,107256,107257,107260 OCT 106661,106261,105661,105261,104661 OCT 104260,104257,104256 SPC 2 *********** LOGO *********** SPC 1 OCT 36544,36144,41145,40545,40145 OCT 37545,37145,36545,36145,44146 OCT 43546,43146,42546,42146,41546 OCT 41146,40546,40146,37546,37146 OCT 36546,36146,46147,45547,45147 OCT 44547,44147,43547,43147,42547 OCT 42147,41547,41147,40547,40147 OCT 37547,37147,36547,36147,50550 OCT 50150,47550,47150,46550,46150 OCT 45550,45150,44550,44150,43550 OCT 43150,42550,42150,41550,41150 OCT 40550,40150,37550,37150,36550 OCT 36150,53151,52551,52151,51551 OCT 51151,50551,50151,47551,47151 OCT 46551,46151,45551,45151,44551 OCT 44151,43551,43151,42551,42151 OCT 41551,41151,40551,40151,37551 OCT 37151,36551,36151,55552,55152 OCT 54552,54152,53552,53152,52552 OCT 52152,51552,51152,50552,50152 OCT 47552,47152,46552,46152,45552 OCT 45152,44552,44152,43552,4315)s2 OCT 42552,42152,41552,41152,40552 OCT 40152,37552,37152,36552,36152 OCT 60153,57153,56153,55553,55153 OCT 54553,54153,53553,53153,52553 OCT 52153,51553,51153,50553,50153 SKP **************************************************************** * * * -- LOGO BUFFER CONTINUED -- * * * **************************************************************** SPC 1 *********** LOGO *********** SPC 1 OCT 47553,47153,46553,46153,45553 OCT 45153,44553,44153,43553,43153 OCT 42553,42153,41553,41153,40553 OCT 40153,37553,37153,36553,36153 OCT 63154,62154,61154,60154,57154 OCT 56154,55554,55154,54554,54154 OCT 53554,53154,52554,52154,51554 OCT 51154,50554,50154,47554,47154 OCT 46554,46154,45554,45154,44554 OCT 44154,43554,43154,42554,42154 OCT 41554,41154,40554,40154,37554 OCT 37154,36554,36154,65155,64155 OCT 63155,62155,61155,60155,57155 OCT 56155,55555,55155,54555,54155 OCT 53555,53155,52555,52155,51555 OCT 51155,50555,50155,47555,47155 OCT 46555,46155,45555,45155,44555 OCT 44155,43555,43155,42555,42155 OCT 41555,41155,40555,40155,37555 OCT 37155,36555,36155,67156,66156 OCT 65156,64156,63156,62156,61156 OCT 60156,57156,56156,55556,55156 OCT 54556,54156,53556,53156,52556 OCT 52156,51556,51156,50556,50156 OCT 47556,47156,46556,46156,45556 OCT 45156,44556,44156,43556,43156 OCT 42556,42156,41556,41156,40556 OCT 40156,37556,37156,36556,36156 OCT 72157,71157,70157,67157,66157 OCT 65157,64157,63157,62157,61157 OCT 60157,54557,54157,53557,53157 OCT 52557,52157,51557,51157,50557 OCT 50157,47557,47157,46557,46157 OCT 45557,45157,44557,44157,43557 OCT 43157,42557,42157,41557,41157 OCT 40557,40157,37557,37157,36557 OCT 36157,74160,73160,72160,71160 OCT 70160,67160,66160,65160,64160 OCT 63160,62160,53160,52560,52160 OCT 51560,51160,50560,50160,47560 OCT 47160,46560,46160,45560,45160 OCT 44560,44160,43560,43160,42560 OCT 42160,41560,41160,40560,40160 OCT 37560,37160,36560,36160,76161 OCT 75161,74161,73161,72161,71161 OCT 70161,67161,66161,65161,64161 SKP **************************************************************** * * * -- LOGO BUFFER CONTINUED -- * * * **************************************************************** SPC 1 *********** LOGO *********** SPC 1 OCT 63161,52161,51561,51161,50561 OCT 50161,47561,47161,46561,46161 OCT 45561,45161,44561,44161,43561 OCT 43161,42561,42161,41561,41161 OCT 40561,40161,37561,37161,36561 OCT 36161,76162,75162,74162,73162 OCT 72162,71162,70162,67162,66162 OCT 65162,64162,54162,53562,53162 OCT 52562,51162,50562,50162,47562 OCT 47162,46562,46162,45562,45162 OCT 44562,44162,43562,43162,42562 OCT 42162,41562,41162,40562,40162 OCT 37562,37162,36562,36162,76163 OCT 75163,74163,73163,72163,71163 OCT 70163,67163,66163,65163,64163 OCT 57163,56563,56163,55563,55163 OCT 54563,54163,53563,53163,52563 OCT 50563,50163,47563,47163,46563 OCT 46163,45563,45163,44563,44163 OCT 43563,43163,42563,42163,41563 OCT 41163,40563,40163,37563,37163 OCT 36563,36163,76164,75164,74167 OCT 73164,72164,71164,70164,67164 OCT 66164,65164,61164,60564,60164 OCT 57564,57164,56564,56164,55564 OCT 55164,54564,54164,53564,53164 OCT 52564,50164,47564,47164,4656a4 OCT 46164,45564,45164,44564,44164 OCT 43564,43164,42564,42164,41564 OCT 41164,40564,40164,37564,37164 OCT 36564,36164,76165,75165,74165 OCT 73165,72165,71165,70165,67165 OCT 66165,65165,63565,63165,62565 OCT 62165,61565,61165,60565,60165 OCT 57565,57165,56565,56165,55565 OCT 55165,54565,54165,53565,53165 OCT 52565,50165,47565,47165,46565 OCT 46165,45565,45165,44565,44165 OCT 43565,43165,42565,42165,41565 OCT 41165,40565,40165,37565,37165 OCT 36565,36165,76166,75166,74166 OCT 73166,72166,71166,70166,67166 OCT 66166,65166,64566,64166,63566 OCT 63166,62566,62166,61566,61166 OCT 60566,60166,57566,57166,56566 OCT 56166,55566,55166,54566,54166 SKP **************************************************************** * * * -- LOGO BUFFER CONTINUED -- * * * **************************************************************** SPC 1 *********** LOGO *********** SPC 1 OCT 53566,47566,47166,46566,46166 OCT 45566,45166,44566,44166,43566 OCT 43166,42566,42166,41566,41166 OCT 40566,40166,37566,37166,36566 OCT 36166,76167,75167,74167,73167 OCT 72167,71167,70167,67167,66167 OCT 65567,65167,64567,64167,63567 OCT 63167,62567,62167,61567,61167 OCT 60567,60167,57567,57167,56567 OCT 56167,47167,46567,46167,45567 OCT 45167,44567,44167,43567,43167 OCT 42567,42167,41567,41167,40567 OCT 40167,37567,37167,36567,36167 OCT 76170,75170,74170,73170,72170 OCT 71170,70170,67170,66170,65570 OCT 65170,64570,64170,63570,63170 OCT 62570,62170,61570,61170,60570 OCT 60170,47170,46570,46170,45570 OCT 45170,44570,44170,43570,43170 OCT 42570,42170,41570,41170,4057/0 OCT 40170,37570,37170,36570,36170 OCT 76171,75171,74171,73171,72171 OCT 71171,70171,67171,66171,65571 OCT 65171,64571,64171,63571,63171 OCT 61571,61171,60571,60171,53571 OCT 53171,52571,46571,46171,45571 OCT 45171,44571,44171,43571,43171 OCT 42571,42171,41571,41171,40571 OCT 40171,37571,37171,36571,36171 OCT 76172,75172,74172,73172,72172 OCT 71172,70172,67172,66172,65572 OCT 65172,61572,61172,60572,60172 OCT 56572,56172,55572,55172,54572 OCT 54172,53572,53172,52572,46572 OCT 46172,45572,45172,44572,44172 OCT 43572,43172,42572,42172,41572 OCT 41172,40572,40172,37572,37172 OCT 36572,36172,76173,75173,74173 OCT 73173,72173,71173,70173,67173 OCT 66173,61573,61173,60573,60173 OCT 57573,57173,56573,56173,55573 OCT 55173,54573,54173,53573,53173 OCT 52573,46573,46173,45573,45173 OCT 44573,44173,43573,43173,42573 OCT 42173,41573,41173,40573,40173 OCT 37573,37173,36573,36173,76174 SKP **************************************************************** * * * -- LOGO BUFFER CONTINUED -- * * * **************************************************************** SPC 1 *********** LOGO *********** SPC 1 OCT 75174,74174,73174,72174,71174 OCT 70174,67174,66174,61574,61174 OCT 60574,60174,57574,57174,56574 OCT 56174,55574,55174,54574,54174 OCT 53574,53174,52574,46574,46174 OCT 45574,45174,44574,44174,43574 OCT 43174,42574,42174,41574,41174 OCT 40574,40174,37574,37174,36574 OCT 36174,76175,75175,74175,73175 OCT 72175,71175,70175,67175,66175 OCT 61575,61175,60575,60175,57575 OCT 57175,56575,56175,55575,55175 OCT 54575,54175,53575,46575,461755 OCT 45575,45175,44575,44175,43575 OCT 43175,42575,42175,41575,41175 OCT 40575,40175,37575,37175,36575 OCT 36175,76176,75176,74176,73176 OCT 72176,71176,70176,67176,66176 OCT 61176,60576,60176,57576,57176 OCT 56576,56176,51176,50576,50176 OCT 47576,47176,46576,46176,45576 OCT 45176,44576,44176,43576,43176 OCT 42576,42176,41576,41176,40576 OCT 40176,37576,37176,36576,36176 OCT 76177,75177,74177,73177,72177 OCT 71177,70177,67177,66177,60203 OCT 53577,53177,52577,52177,51577 OCT 51177,50577,50177,47577,47177 OCT 46577,46177,45577,45177,44577 OCT 44177,43577,43177,42577,42177 OCT 41577,41177,40577,40177,37577 OCT 37177,36577,36177,76200,75200 OCT 74200,73200,72200,71200,70200 OCT 67200,66200,56200,55600,55200 OCT 54600,54200,53600,53200,52600 OCT 52200,51600,51200,50600,50200 OCT 47600,47200,46600,46200,45600 OCT 45200,44600,44200,43600,43200 OCT 42600,42200,41600,41200,40600 OCT 40200,37600,37200,36600,36200 OCT 76201,75201,74201,73201,72201 OCT 71201,70201,67201,66201,60601 OCT 60201,57601,57201,56601,56201 OCT 55601,55201,54601,54201,53601 OCT 53201,52601,52201,51601,51201 OCT 50601,50201,47601,47201,46601 SKP **************************************************************** * * * -- LOGO BUFFER CONTINUED -- * * * **************************************************************** SPC 1 *********** LOGO *********** SPC 1 OCT 46201,45601,45201,44601,44201 OCT 43601,43201,42601,42201,41601 OCT 41201,40601,40201,37601,37201 OCT 36601,36201,76202,75202,74202 OCT 73202,72202,71202,70202,67202 OCT 66202,61602,61202,60602,6020TC2 OCT 57602,57202,56602,56202,55602 OCT 55202,54602,54202,53602,53202 OCT 52602,52202,51602,51202,50602 OCT 46602,46202,45602,45202,44602 OCT 44202,43602,43202,42602,42202 OCT 41602,41202,40602,40202,37602 OCT 37202,36602,36202,76203,75203 OCT 74203,73203,72203,71203,70203 OCT 67203,66203,61603,61203,60603 OCT 61203,57603,57203,56603,56203 OCT 55603,55203,54603,54203,53603 OCT 53203,52603,46603,46203,45603 OCT 45203,44603,44203,43603,43203 OCT 42603,42203,41603,41203,40603 OCT 40203,37603,37203,36603,36203 OCT 76204,75204,74204,73204,72204 OCT 71204,70204,67204,66204,61604 OCT 61204,60604,60204,57604,57204 OCT 56604,56204,55604,54204,53604 OCT 53204,52604,47204,46604,46204 OCT 45604,45204,44604,44204,43604 OCT 43204,42604,42204,41604,41204 OCT 40604,40204,37604,37204,36604 OCT 36204,76205,75205,74205,73205 OCT 72205,71205,70205,67205,66205 OCT 61605,61205,60605,60205,54205 OCT 53605,53205,52605,47205,46605 OCT 46205,45605,45205,44605,44205 OCT 43605,43205,42605,42205,41605 OCT 41205,40605,40205,37605,37205 OCT 36605,36205,76206,75206,74206 OCT 73206,72206,71206,70206,67206 OCT 66206,61606,61206,60606,60206 OCT 54606,54206,53606,53206,52606 OCT 47606,47206,46606,46206,45606 OCT 45206,44606,44206,43606,43206 OCT 42606,42206,41606,41206,40606 OCT 40206,37606,37206,36606,36206 OCT 76207,75207,74207,73207,72207 OCT 71207,70207,67207,66207,65207 SKP **************************************************************** * * * -- LOGO BUFFER CONTINUED -- * * * **************************************************************** SPC 1 *********** LOGO *********** SPC 1 OCT 61607,61207,60607,60207,57207 OCT 56607,56207,55607,55207,54607 OCT 54207,53607,53207,52607,47607 OCT 47207,46607,46207,45607,45207 OCT 44607,44207,43607,43207,42607 OCT 42207,41607,41207,40607,40207 OCT 37607,37207,36607,36207,76210 OCT 75210,74210,73210,72210,71210 OCT 70210,67210,66210,65210,61610 OCT 61210,60610,60210,57610,57210 OCT 56610,56210,55610,55210,54610 OCT 54210,53610,53210,50210,47610 OCT 47210,46610,46210,45610,45210 OCT 44610,44210,43610,43210,42610 OCT 42210,41610,41210,40610,40210 OCT 37610,37210,36610,36210,76211 OCT 75211,74211,73211,72211,71211 OCT 70211,67211,66211,65211,64211 OCT 61611,61211,60611,60211,57611 OCT 57211,56611,56211,55611,55211 OCT 54611,54211,53611,53211,50611 OCT 50211,47611,47211,46611,46211 OCT 45611,45211,44611,44211,43611 OCT 43211,42611,42211,41611,41211 OCT 40611,40211,37611,37211,36611 OCT 36211,76212,75212,74212,73212 OCT 72212,71212,70212,67212,66212 OCT 65212,64212,61212,60612,60212 OCT 57612,57212,56612,56212,55612 OCT 55212,54612,54212,51212,50612 OCT 50212,47612,47212,46612,46212 OCT 45612,45212,44612,44212,43612 OCT 43212,42612,42212,41612,41212 OCT 40612,40212,37612,37212,36612 OCT 36212,76213,75213,74213,73213 OCT 72213,71213,70213,67213,66213 OCT 65213,64213,63213,60613,60213 OCT 57613,57213,56613,51613,51213 OCT 50613,50213,47613,47213,46613 OCT 46213,45613,45213,44613,44213 OCT 43613,43213,42613,42213,41613 OCT 41213,40613,40213,37613,37213 OCT 36613,36213,76214,75214,74214 OCT 73214,72214,71214,70214,67214 OCT 66214,65214,64214,63214,62214 OCT 52614,52214,51614,51214,50614 SKP ****************************************************I************ * * * -- LOGO BUFFER CONTINUED -- * * * **************************************************************** SPC 1 *********** LOGO *********** SPC 1 OCT 50214,47614,47214,46614,46214 OCT 45614,45214,44614,44214,43614 OCT 43214,42614,42214,41614,41214 OCT 40614,40214,37614,37214,36614 OCT 36214,76215,75215,74215,73215 OCT 72215,71215,70215,67215,66215 OCT 65215,64215,63215,62215,61215 OCT 53615,53215,52615,52215,51615 OCT 51215,50615,50215,47615,47215 OCT 46615,46215,45615,45215,44615 OCT 44215,43615,43215,42615,42215 OCT 41615,41215,40615,40215,76216 OCT 75216,74216,73216,72216,71216 OCT 70216,67216,66216,65216,64216 OCT 63216,62216,61216,60216,57216 OCT 56216,55616,55216,54616,54216 OCT 53616,53216,52616,52216,51616 OCT 51216,50616,50216,47616,47216 OCT 46616,46216,45616,45216,44616 OCT 44216,43616,43216,42616,76217 OCT 75217,74217,73217,72217,71217 OCT 70217,67217,66217,65217,64217 OCT 63217,62217,61217,60217,57217 OCT 56217,55617,55217,54617,54217 OCT 53617,53217,52617,52217,51617 OCT 51217,50617,50217,47617,47217 OCT 46617,46217,45617,45217,76220 OCT 75220,74220,73220,72220,71220 OCT 70220,67220,66220,65220,64220 OCT 63220,62220,61220,60220,57220 OCT 56220,55620,55220,54620,54220 OCT 53620,53220,52620,52220,51620 OCT 51220,50620,50220,47620,76221 OCT 75221,74221,73221,72221,71221 OCT 70221,67221,66221,65221,64221 OCT 63221,62221,61221,60221,57221 OCT 56221,55621,55221,54621,54221 OCT 53621,53221,52621,52221,76222 OCT 75222,74222,73222,72222,71222 OCT 70222,67222,66222,65222,64222 OCT 63222,62222,B B@<61222,60222,57222 OCT 56222,55622,55222,54622,76223 OCT 75223,74223,73223,72223,71223 OCT 70223,67223,66223,65223,64223 OCT 63223,62223,61223,60223,57223 OCT 76224,75224,74224,73224,72224 SKP **************************************************************** * * * -- LOGO BUFFER CONTINUED -- * * * **************************************************************** SPC 1 *********** LOGO *********** SPC 1 OCT 70224,70224,67224,66224,65224 OCT 64224,63224,62224,76225,75225 OCT 74225,73225,72225,71225,70225 OCT 67225,66225,65225,64225,76226 OCT 75226,74226,73226,72226,71226 OCT 70226,67226,66226,76227,75227 OCT 74227,73227,72227,71227,76230 OCT 75230,74230,76231,74164,71224 SPC 5 *************** *************** ** ** ** ** ** THE END ** ** ** ** ** *************** *************** SPC 4 END B 8 91200-18004 1648 S 0422 TV INTFC VERIF SRC              H0104 ASMB,R,L,C TV INTFC. CARD VERIF. HED TV INTFC CARD VERIF. A-91200-16004-2 12/03/76 REV.C(1648) NAM TVERF,3 91200-16004 REV 1648 -- 761203 ENT TVERF EXT EXEC,VIDLU,ERASE,POINT,VECTR,VAREA,CHAR,VEND SUP A EQU 0 B EQU 1 SPC 2 * LOAD THIS PROGRAM USING THE RTE LOADER. IT MAY BE USED IN * FOREGROUND OR BACKGROUND. IT IS SUGGESTED THAT IT BE TEMPORARILY * LOADED INTO BACKGROUND AND SAVED WITH THE FMGR COMMAND "SP". IT * CAN THEN BE USED WHENEVER NEEDED AND DOES NO WASTE AN ID SEGMENT. * IT WILL NOT SWAP WHILE IN I/O SUSPENSION AS IT DOES NOT * USE COMMON. * * THE PROGRAM IS ACTIVATED BY: * * ON,TVERF[,LU] OR * RU,TVERF[,LU] (RTE II OR RTE III) * * THE LU IS THE LOGICAL UNIT # OF THE TERMINAL THAT IS TO BE USED * FOR CONTROLING THE PROGRAM. IF NO LU IS SPECIFIED IT WILL DEFAULT * TO 1 (THE SYSTEM CONSOLE). IN MULTIPLE TERMINAL OPERATION OF * RTE II OR RTE III THE SYSTEM WILL PASS THE LU OF THE ACTIVATING * TERMINAL IF NONE IS SUPPLIED BY THE OPERATOR. * * THE PROGRAM WILL PRINT: * * TV INTERFACE LU = * * THE USER REPLIES WITH THE APPROPRIATE LU. THEN THE PROGRAM PRINTS: * * IS CARD IN AMERICAN SCAN MODE? * * THE USER ANSWERS YES OR NO. THEN THE PROGRAM PRINTS: * * IS THIS A 1 CARD SYSTEM? * * THE USER ANSWERS YES OR NO. THEN THE PROGRAM PRINTS: * * COMMAND? * * THE USER ANSWERS YES OR NO. IF THE ANSWER IS YES THE * LIST OF COMMANDS SHOWN ON THE FOLLOWING PAGE IS PRINTED: SKP * COMMANDS ARE ENTERED AS FOLLOWS: * GA GAIN PATTERN FOR ADJUSTING MONITOR HEIGHT, WIDTH, * POSITION, AND FOCUS. * CR CROSSHATCH PATTERN FOR ADJUSTING MONITOR * LINEARITY AND PINCUSHION. * SE RECTANGLES IN THE FOUR CORNERS OF THE SCREEN * FOR CHECKING DISPLAY SETTLING TIME EFFECTS. * PO WRITES ALL POINTS ON THE SCREEN TO CHECK * FOR ANY MISSING POINTS. * LO WRITES HP LOGO ON THE SCREEN. * DE DEMONSRATES YMALL FEATURES OF DISPLAY LIBRARY. * ER ERASES THE SCREEN. * IN INVERT THE VIDEO POLARITY ON THE SCREEN. * FL FLASH ANY SPECIFIED PATTERN. * BA COLOR OR GRAY LEVEL BARS. * LU TO ENTER A NEW TV LU. * MO TO ENTER A DIFFERENT SCAN MODE. * EX EXITS THIS PROGRAM. * * * IF IT IS NOT A 1 CARD SYSTEM THE FOLLOWING IS ALSO PRINTED: * * THE COLOR CODES ARE AS FOLLOWS: * * CODE COLOR GRAY LEVEL * ---- ----- ---------- * B BLUE 1/8 * G GREEN 1/4 * C CYAN 3/8 * R RED 1/2 * M MAGENTA 5/8 * Y YELLOW 3/4 * W WHITE 7/8 * * * WHEN FLASHING, A BACKGROUND IS DISPLAYED FIRST AND IS THE * COMPLIMENT OF THE REQUESTED COLOR. * THE COMPLIMENTS ARE AS FOLLOWS: * WHITE - BLACK * RED - CYAN * GREEN - MAGENTA (YOU MAY GET SICK!) * BLUE - YELLOW SKP ***************************************************************** * * * -- START OF MAIN CONTROL -- * * * ***************************************************************** SPC 1 TVERF NOP LDA B,I GET FIRST PARAMETER PASSED SZA,RSS IF PARAM IS 0 INA SET LU TO 1, OTHERWISE STA LU SET FIRST PARAM INTO LU IOR X SET READ WITH STA RCON ECHO BIT CLA SET INDICATOR FOR STA ICOM FIRST TIME THRU STA POL SET NORMAL VIDEO POLARITY SPC 1 L0 JSB EXEC REQUEST DEF L1 TV INTERFACE LU = DEF B2 DEF LU DEF MES1 DEF ML1 SPC 1 L1 JSB EXEC INPUT TV LU DEF L2 DEF B1 DEF RCON DEF BUFF DEF B1 SPC 1 L2 LDA BUFF CHECK LOWER AND MASK4 CHARACTER FOR CPA D48  ASCII RANGE JMP L3 FROM 0 TO 9 CPA D56 INCLUSIVE JMP *+4 LDA BUFF IF NOT, IS IT AND MASK3 A SPACE CPA D32 CHARACTER RSS JMP L0 IF NOT, ASK FOR LU AGAIN LDA BUFF AND MES16 CPA B1 JMP L3 SZA JMP L0 SKP ***************************************************************** * * * -- MAIN CONTROL CONTINUED -- * * * ***************************************************************** SPC 1 L3 LDA BUFF CHECK UPPER ALF,ALF CHARACTER FOR AND MASK4 ASCII RANGE CPA D48 FROM 0 TO 9 JMP L4 INCLUSIVE CPA D56 RSS IF NOT, ASK FOR JMP L0 LU AGAIN LDA BUFF ALF,ALF AND MES16 CPA B1 JMP L4 SZA JMP L0 SPC 1 L4 LDA BUFF CONVERT 2 ASCII AND MASK3 CHARACTERS INTO STA B INTEGER VALUE AND MES17 OF TV LU # STA LUTV AND SAVE LDA BUFF ALF,ALF AND MES17 CPB D32 JMP *+3 MPY D10 ADA LUTV STA LUTV SPC 1 JSB VIDLU ESTABLISH TV LU IN DEF *+3 VIDEO DISPLAY LIBRARY DEF LUTV DEF POL SPC 1 JSB ERASE ERASE SCREEN DEF *+1 SKP ***************************************************************** * * * -- MAIN CONTROL CONTINUED -- * * * ***************************************************************** SPC 1 L5 JSB EXEC ASK IF CARD JIS IN DEF L6 AMERICAN SCAN MODE DEF B2 DEF LU DEF MES2 DEF D16 SPC 1 L6 JSB EXEC INPUT ANSWER DEF L7 DEF B1 DEF RCON DEF BUFF DEF B1 SPC 1 L7 CLB LDA BUFF CPA NO IS ANSWER NO? JMP *+5 IT IS - MTEST = 0 CPA YES IS ANSWER YES? RSS IT IS - MTEST = 1 JMP L5 NEITHER, ASK AGAIN INB STB MTEST SPC 1 L7A JSB EXEC ASK IF 1 CARD DEF L7B SYSTEM DEF B2 DEF LU DEF MES31 DEF D13 SPC 1 L7B JSB EXEC INPUT ANSWER DEF L7C DEF B1 DEF RCON DEF BUFF DEF B1 SPC 1 L7C CLB,INB LDA BUFF CPA NO JMP *+5 CPA YES RSS JMP L7A CLB STB CTEST SKP ***************************************************************** * * * -- MAIN CONTROL CONTINUED -- * * * ***************************************************************** SPC 1 LDA ICOM IS THIS THE SZA FIRST TIME THRU JMP L11 NO - SKIP NEXT QUESTION INA SET INDICATOR FOR STA ICOM NOT 1ST TIME THRU SPC 1 L8 JSB EXEC ASK IF USER KNOWS DEF L9 THE COMMANDS DEF B2 DEF LU DEF MES3 DEF ML3 SPC 1 L9 JSB EXEC INPUT ANSWER DEF L10 DEF B1 DEF RCON DEF BUFF DEF B1 SPC 1 L10 LDA BUFF CPA YES IS ANSWER YES? JMP L11 IT IS - SKIP COMMAND LIST CPA NO IS ANSWER NO? RSS IT IS - LIST COMMANDS JMP L8 NEITHER, ASK AGAIN SPC 1 JSB EXEC PRINT THjDE DEF L10A LIST OF DEF B2 COMMANDS DEF LU DEF MES4 DEF ML4 SPC 1 L10A LDA CTEST SZA,RSS COLOR SYSTEM? JMP L10B NO - GO ON JSB EXEC YES - BA COMMAND LISTED DEF L10B DEF B2 DEF LU DEF MES36 DEF ML36 SKP ***************************************************************** * * * -- MAIN CONTROL CONTINUED -- * * * ***************************************************************** SPC 1 L10B JSB EXEC PRINT THE DEF L10C REST OF THE DEF B2 LIST OF DEF LU COMMANDS DEF MES37 DEF ML37 SPC 1 L10C LDA CTEST SZA,RSS COLOR SYSTEM? JMP L11 NO - GO ON JSB EXEC YES - LIST COLOR CODES DEF L11 DEF B2 DEF LU DEF MES35 DEF ML35 SPC 1 L11 CLA CLEAR FLASH STA FLSH? COMMAND JSB EXEC PRINT: DEF L12 COMMAND? DEF B2 DEF LU DEF MES5 DEF MES13 SPC 1 L12 JSB EXEC INPUT A COMMAND DEF L13 DEF B1 DEF RCON DEF BUFF DEF B1 SPC 1 L13 LDA BUFF CHECK THE COMMAND CPA GA GA? JMP GAIN DO GA PATTERN CPA CR CR? JMP PIN DO CR PATTERN CPA SE SE? JMP SETTM DO SE PATTERN CPA PO PO? JMP BURN WRITE ALL POINTS SKP ***************************************************************** * * * -- MAIN CONTROL CONTINUED -- * * k * ***************************************************************** SPC 1 CPA LO LO? JMP LOGO WRITE LOGO CPA ER ER? JMP ERSE ERASE SCREEN CPA FL FL? JMP FLASH GO FLASH CPA IN IN? JMP INVRT GO INVERT CPA BA BA? JMP BARS COLOR BARS CPA XLU LU? JMP L0 GET NEW TV LU CPA MO MO? JMP L5 GET NEW SCAN MODE CPA TE TE? JMP TERM TERMINATE PROGRAM CPA EX EX? JMP TERM TERMINATE PROGRAM CPA EN EN? JMP TERM TERMINATE PROGRAM SPC 1 CPA DE IS COMMAND DE? RSS WRITE DEMO PATTERN JMP L8 NO VALID COMMAND, ASK AGAIN SPC 1 JSB GET GET COLOR FOR MULTI-CARD SYSTEMS JSB ERASE ERASE SCREEN DEF *+1 JSB VIDLU SET WRITE MODE DEF *+3 DEF LUTV DEF POL SPC 1 LDA MTEST SZA AMERICAN SCAN? JMP L18 YES - DIFFERENT PATTERN SKP ***************************************************************** * * * -- DEMONSTRATE DISPLAY LIBRARY -- * * * ***************************************************************** SPC 1 * WRITE THE FOLLOWING FOUR WAYS (FOR EUROPEAN OR * NON-STANDARD SCAN MODES): * * "HEWLETT-PACKARD 91200 TV INTERFACE CARD" SPC 1 JSB CHAR WRITE MESSAGE ACROSS TOP DEF L14 DEF D12 DEF D248 DEF MES6 DEF B1 DEF ZERO DEF ZERO DEF COLOR SPC 1 L14 JSB CHAR WRITE MESSAGE DOWN DEF L15 RIGHT SIDE DEF D248 DEF D244 DEF MES6 DEF B1 DEF B3 DEF ZERO DEF COLOR SPC 1 L15 JSB CHAR WRITE MESSAGE UPSIDE DOWN DEF L16 ACROSS BOTTOM DEF D244 DEF MES16 DEF MES6 DEF B1 DEF B2 DEF ZERO DEF COLOR SPC 1 L16 JSB CHAR WRITE MESSAGE UP DEF L17 LEFT SIDE DEF MES16 DEF D12 DEF MES6 DEF B1 DEF B1 DEF ZERO DEF COLOR SPC 1 L17 JMP L22 SKIP TO MAIN PART OF PATTERN SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 2 * WRITE THE FOLLOWING FOUR WAYS (FOR AMERICAN SCAN MODE): * * "HEWLETT-PACKARD 91200 TV INTRFC CARD" SPC 1 L18 JSB CHAR WRITE MESSAGE ACROSS TOP DEF L19 DEF D21 DEF D232 DEF MES7 DEF B1 DEF ZERO DEF ZERO DEF COLOR SPC 1 L19 JSB CHAR WRITE MESSAGE DOWN DEF L20 RIGHT SIDE DEF D248 DEF D226 DEF MES7 DEF B1 DEF B3 DEF ZERO DEF COLOR SPC 1 L20 JSB CHAR WRITE MESSAGE UPSIDE DOWN DEF L21 ACROSS BOTTOM DEF D234 DEF MES16 DEF MES7 DEF B1 DEF B2 DEF ZERO DEF COLOR SPC 1 L21 JSB CHAR WRITE MESSAGE UP DEF L22 LEFT SIDE DEF MES16 DEF D13 DEF MES7 DEF B1 DEF B1 DEF ZERO DEF COLOR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * *  * ***************************************************************** SPC 1 L22 LDA D232 SET STARTING Y VALUE FOR LDB MTEST MESSAGES, Y=232 FOR EUROPEAN SZB AND NON-STANDARD SCAN MODES. LDA D216 Y=216 FOR AMERICAN SCAN MODE. STA VERT1 SPC 1 JSB CHAR WRITE MESSAGE DEF L23 "ALPHANUMERIC CHARACTER DEF D20 GENERATOR" DEF VERT1 DEF MES8 DEF B1 DEF ZERO DEF ZERO DEF COLOR SPC 1 L23 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR WRITE MESSAGE DEF L24 "ABCDEFGHIJKLMNOPQR DEF D20 STUVWXYZ1234567890" DEF VERT1 DEF MES9 DEF B1 DEF ZERO DEF ZERO DEF COLOR SPC 1 L24 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR WRITE MESSAGE DEF L25 "!#$%&'*+,-./:; DEF D20 <=>?@[\]^" DEF VERT1 DEF MES10 DEF B1 DEF ZERO DEF ZERO DEF COLOR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L25 JSB VEND FIND END DEF L26 OF LAST DEF HORZ2 MESSAGE DEF VERT2 SPC 1 L26 JSB CHAR WRITE FOUR CHARACTERS DEF L27 ON END OF PREVIOUS DEF HORZ2 LINE: DEF VERT2 "()_ DEF JBUFR DEF B1 DEF ZERO DEF ZERO DEF COLOR SPC 1 L27 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR WRITE MESSAGE DEF L28 "WRITES IN m DEF D20 FOUR DIRECTIONS" DEF VERT1 DEF MES11 DEF B1 DEF ZERO DEF ZERO DEF COLOR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L28 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR WRITE MESSAGE DEF L29 "MULTIPLE CHARACTER DEF D20 SIZE" DEF VERT1 DEF MES12 DEF B1 DEF ZERO DEF ZERO DEF COLOR SPC 1 L29 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR WRITE MESSAGE DEF L30 "SIZE 1" DEF D20 DEF VERT1 DEF MES13 DEF B1 DEF ZERO DEF ZERO DEF COLOR SPC 1 L30 LDA VERT1 REDUCE Y POSITION ADA ND16 BY 16 STA VERT1 SPC 1 JSB CHAR WRITE SIZE 2 MESSAGE DEF L31 "SIZE 2" DEF D20 DEF VERT1 DEF MES14 DEF B2 DEF ZERO DEF ZERO DEF COLOR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L31 LDA VERT1 REDUCE Y POSITION ADA ND26 BY 26 STA VERT1 SPC 1 JSB CHAR WRITE SIZE 3 MESSAGE DEF L32 "ETC." DEF D20 DEF VERT1 DEF MES15 DEF B3 DEF ZERO DEF ZERO DEF COLOR SPC 1 L32 LDA D123 SET Y VALUE FOG R VECTORS, LDB MTEST Y=123 FOR EUROPEAN OR SZB NON-STANDARD SCAN MODES. LDA D107 Y=107 FOR AMERICAN STA VERT1 SCAN MODE. SPC 1 JSB VECTR DRAW VERTICAL DEF L33 VECTOR OUTLINE DEF D110 (LEFT OF WORD DEF VERT1 "VECTORS") DEF B2 DEF D60 DEF B2 DEF COLOR SPC 1 L33 LDA VERT1 INCREASE Y POSITION ADA D60 BY 60 STA VERT1 SPC 1 JSB VECTR DRAW HORIZONTAL DEF L34 VECTOR OUTLINE DEF D110 (ABOVE WORDS DEF VERT1 "IN 8 DIRECTIONS") DEF ZERO DEF D132 DEF B2 DEF COLOR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L34 LDA D60 REDUCE Y POSITION CMA,INA BY 60 ADA VERT1 STA VERT1 SPC 1 JSB VECTR DRAW VETICAL DEF L35 VECTOR OUTLINE DEF D130 (RIGHT OF WORD DEF VERT1 "VECTORS") DEF B2 DEF MES23 DEF B2 DEF COLOR SPC 1 L35 LDA VERT1 INCREASE Y POSITION ADA D45 BY 45 STA VERT1 SPC 1 JSB VECTR DRAW HORIZONTAL DEF L36 VECTOR OUTLINE DEF D137 (BELOW WORDS DEF VERT1 "IN 8 DIRECTIONS") DEF ZERO DEF D105 DEF B2 DEF COLOR SPC 1 L36 JSB VECTR DRAW VERTICAL DEF L37 VECTOR OUTLINE DEF D242 (CLOSE AREA RIGHT DEF VERT1 OF WORDS DEF B2 "IN 8 DIRECTIONS") DEF MES17 DEF B2B@< DEF COLOR SKP B***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L37 LDA ND35 REDUCED Y POSITION ADA VERT1 BY 35 STA VERT1 SPC 1 JSB VECTR DRAW VECTOR AT DEF L38 45 DEG. ANGLE DEF D165 FROM LOWER LEFT DEF VERT1 TO UPPER RIGHT DEF B1 DEF MES20 DEF B2 DEF COLOR SPC 1 L38 JSB VECTR DRAW VERTICAL DEF L39 VECTOR DEF D180 DEF VERT1 DEF B2 DEF MES20 DEF B2 DEF COLOR SPC 1 L39 JSB VECTR DRAW VECTOR AT DEF L40 45 DEG. ANGLE DEF D195 FROM LOWER RIGHT DEF VERT1 TO UPPER LEFT DEF B3 DEF MES20 DEF B2 DEF COLOR SPC 1 L40 LDA VERT1 INCREASE Y POSITION ADA MES17 BY 15 STA VERT1 SPC 1 JSB VECTR DRAW HORIZONTAL DEF L41 VECTOR DEF D165 DEF VERT1 DEF ZERO DEF MES20 DEF B2 DEF COLOR SKP **************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * **************************************************************** SPC 1 L41 LDA VERT1 INCREASE Y POSITION ADA MES17 BY 15 STA VERT1 SPC 1 JSB VECTR DRAW VERTICAL PORTION DEF L42 OF ARROWHEAD ON DEF D165 VECTOR POINTING TO DEF VERT1 THE UPPER LEFT DEF MES13 DEF B2 Y DEF B2 DEF COLOR SPC 1 L42 JSB VECTR DRAW HORIZONTAL PORTION DEF L43 OF ARROWHEAD ON DEF D165 VECTOR POINTING TO DEF VERT1 THE UPPER LEFT DEF ZERO DEF B2 DEF B2 DEF COLOR SPC 1 L43 LDA MES17 REDUCE Y POSITION CMA,INA BY 15 ADA VERT1 STA VERT1 SPC 1 JSB VECTR DRAW UPPER PORTION DEF L44 OF ARROWHEAD ON DEF D165 VECTOR POINTING TO DEF VERT1 THE LEFT DEF B1 DEF B2 DEF B2 DEF COLOR SPC 1 L44 JSB VECTR DRAW LOWER PORTION DEF L45 OF ARROWHEAD ON DEF D165 VECTOR POINTING TO DEF VERT1 THE LEFT DEF MES16 DEF B2 DEF B2 DEF COLOR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L45 LDA MES17 REDUCE Y POSITION CMA,INA BY 15 ADA VERT1 STA VERT1 SPC 1 JSB VECTR DRAW VERTICAL PORTION DEF L46 OF ARROWHEAD ON DEF D165 VECTOR POINTING TO DEF VERT1 THE LOWER LEFT DEF B2 DEF B2 DEF B2 DEF COLOR SPC 1 L46 JSB VECTR DRAW HORIZONTAL PORTION DEF L47 OF ARROWHEAD ON DEF D165 VECTOR POINTING TO DEF VERT1 THE LOWER LEFT DEF ZERO DEF B2 DEF B2 DEF COLOR SPC 1 L47 LDA VERT1 INCREASE Y POSITION ADA MES20 BY 30 STA VERT1 SPC 1 JSB VECTR DRAW LEFT PORTION DEF L48 OF ARROWHEAD ON DEF 8D180 VECTOR POINTING UP DEF VERT1 DEF B5 DEF B2 DEF B2 DEF COLOR SPC 1 L48 JSB VECTR DRAW RIGHT PORTION DEF L49 OF ARROWHEAD ON DEF D180 VECTOR POINTING UP DEF VERT1 DEF MES16 DEF B2 DEF B2 DEF COLOR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L49 LDA MES20 REDUCE Y POSITION CMA,INA BY 30 ADA VERT1 STA VERT1 SPC 1 JSB VECTR DRAW LEFT PORTION DEF L50 OF ARROWHEAD ON DEF D180 VECTOR POINTING DOWN DEF VERT1 DEF B3 DEF B2 DEF B2 DEF COLOR SPC 1 L50 JSB VECTR DRAW RIGHT PORTION DEF L51 OF ARROWHEAD ON DEF D180 VECTOR POINTING DOWN DEF VERT1 DEF B1 DEF B2 DEF B2 DEF COLOR SPC 1 L51 LDA VERT1 INCREASE Y POSITION ADA MES20 BY 30 STA VERT1 SPC 1 JSB VECTR DRAW HORIZONTAL PORTION DEF L52 OF ARROWHEAD ON DEF D195 VECTOR POINTING TO DEF VERT1 THE UPPER RIGHT DEF JBUFR DEF B2 DEF B2 DEF COLOR SPC 1 L52 JSB VECTR DRAW VERTICAL PORTION DEF L53 OF ARROWHEAD ON DEF D195 VECTOR POINING TO DEF VERT1 THE UPPER RIGHT DEF MES13 DEF B2 DEF B2 DEF COLOR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- ; * * * ***************************************************************** SPC 1 L53 LDA MES17 REDUCE Y POSITION CMA,INA BY 15 ADA VERT1 STA VERT1 SPC 1 JSB VECTR DRAW UPPER PORTION DEF L54 OF ARROWHEAD ON DEF D195 VECTOR POINTING TO DEF VERT1 THE RIGHT DEF B3 DEF B2 DEF B2 DEF COLOR SPC 1 L54 JSB VECTR DRAW LOWER PORTION DEF L55 OF ARROWHEAD ON DEF D195 VECTOR POINTING TO DEF VERT1 THE RIGHT DEF B5 DEF B2 DEF B2 DEF COLOR SPC 1 L55 LDA MES17 REDUCE Y POSITION CMA,INA BY 15 ADA VERT1 STA VERT1 SPC 1 JSB VECTR DRAW VERTICAL PORTION DEF L56 OF ARROWHEAD ON DEF D195 VECTOR POINTING TO DEF VERT1 THE LOWER RIGHT DEF B2 DEF B2 DEF B2 DEF COLOR SPC 1 L56 JSB VECTR DRAW HORIZONTAL PORTION DEF L57 OF ARROWHEAD ON DEF D195 VECTOR POINTING TO DEF VERT1 THE LOWER RIGHT DEF JBUFR DEF B2 DEF B2 DEF COLOR DEF B1 FORCE DUMP OF VECTORS SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L57 CLA ESTABLISH -4096 AS A LDB MTEST CORRECTION FOR AMERICAN SZB SCAN (0 FOR OTHERS) FOR LDA M4096 POINT BUFFER TO DRAW STA VERT2 CURVED PORTION ON BORDER LDA BPNT1 SET UP BUFFER  STA PNTR POINTERS AND LDA BFAD COUNTERS FOR STA ADDX ADJUSTING POINTS LDB LOOPS ON CURVE SPC 1 L58 LDA PNTR,I ADJUST THE ADA VERT2 POINTS ON STA ADDX,I THE CURVE ISZ PNTR ISZ ADDX INB,SZB JMP L58 SPC 1 JSB POINT OUTPUT THE POINTS DEF L59 FOR CURVED PORTION DEF BUFFR OF BORDER AROUND DEF D8 "VECTORS IN 8 DIRECTIONS" DEF COLOR SPC 1 L59 LDA B3 REDUCE Y POSITION CMA,INA BY 3 ADA VERT1 STA VERT1 SPC 1 JSB CHAR OUTPUT MESSAGE DEF L60 VERTICALLY DEF D126 "VECTORS" DEF VERT1 DEF MES16 DEF B1 DEF B1 DEF ZERO DEF COLOR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L60 LDA VERT1 INCREASE Y POSITION ADA D42 BY 42 STA VERT1 JSB CHAR OUTPUT MESSAGE DEF L61 HORIZONTALLY DEF D135 "IN 8 DIRECTIONS" DEF VERT1 DEF MES17 DEF B1 DEF ZERO DEF ZERO DEF COLOR SPC 1 L61 LDA VERT1 REDUCE Y POSITION ADA ND66 BY 66 AND USE STA VERT1 FOR VERTICAL SIZE JSB VAREA DRAW RECTANGULAR DEF L62 AREA ACROSS LOWER DEF D13 PART OF SCREEN DEF D17 DEF D229 DEF VERT1 DEF ZERO DEF COLOR SPC 1 L62 LDA VERT1 INCREASE Y POSITION ADA MES13 BY 6 TO GET START STA VERT1 OF FIRST MESSAGE IN AREA JSB CHAR  OUTPUT MESSAGE DEF L63 (ERASE FROM AREA) DEF D18 " THE PRESENT SCREEN DEF VERT1 SHOWS SOFTWARE" DEF MES18 DEF B1 DEF ZERO DEF ZERO DEF INCLR SPC 1 L63 JSB IYM10 REDUCE Y POSITION BY 10 JSB CHAR OUTPUT MESSAGE DEF L64 (ERASE FROM AREA) DEF D18 "CHARACTER AND DEF VERT1 VECTOR CAPABILITY." DEF MES19 DEF B1 DEF ZERO DEF ZERO DEF INCLR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L64 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR OUTPUT MESSAGE DEF L65 (ERASE FROM AREA) DEF D18 " ALL OF THE DEF VERT1 CHARACTERS IN THE" DEF MES20 DEF B1 DEF ZERO DEF ZERO DEF INCLR SPC 1 L65 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR OUTPUT MESSAGE DEF L66 (ERASE FROM AREA) DEF D18 "SUPPLIED LIBRARY DEF VERT1 ARE SHOWN" DEF MES21 DEF B1 DEF ZERO DEF ZERO DEF INCLR SPC 1 L66 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR OUTPUT MESSAGE DEF L67 (ERASE FROM AREA) DEF D18 " CALLS ARE, ALSO, MADE DEF VERT1 DIRECTLY TO" DEF MES22 DEF B1 DEF ZERO DEF ZERO DEF INCLR SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUEDP -- * * * ***************************************************************** SPC 1 L67 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR OUTPUT MESSAGE DEF L68 (ERASE FROM AREA) DEF D18 "VECTR, VAREA, POINT, DEF VERT1 ERASE, AND VIDLU." DEF MES23 DEF B1 DEF ZERO DEF ZERO DEF INCLR SPC 1 L68 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR OUTPUT MESSAGE DEF L69 (ERASE FROM AREA) DEF D18 " ALL PATTERNS ALLOW DEF VERT1 FOR SCAN MODES." DEF MES24 DEF B1 DEF ZERO DEF ZERO DEF INCLR SPC 1 L69 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 LDA MTEST AMERICAN SCAN SZA MODE? JMP L73 YES - SKIP TO OTHER MSGS. SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 JSB CHAR OUTPUT MESSAGE DEF L70 (ERASE FROM AREA) DEF D18 " THE SCAN MODE YOU DEF VERT1 ARE NOW USING IS" DEF MES25 DEF B1 DEF ZERO DEF ZERO DEF INCLR SPC 1 L70 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR OUTPUT MESSAGE DEF L71 (ERASE FROM AREA) DEF D18 "EITHER THE EUROPEAN DEF VERT1 STANDARD SCAN OR" DEF MES26 DEF B1 DEF ZERO DEF ZERO DEF INCLR SPC 1 L71 JSB IYM10 REDUCE Y POSITION BY 10 SPC 1 JSB CHAR OUTPUT MESSAGE DEF L72 (ERASE FROM AREA) DEF D18 "THE NON-STANDARD DEF VERT1 SCAN." DEF MES27 DEF B1 DEF ZERO DEF ZERO DEF INCLR SPC 1 L72 JMP L76 DONE! SKP ***************************************************************** * * * -- DEMO PATTERN CONTINUED -- * * * ***************************************************************** SPC 1 L73 JSB CHAR OUTPUT MESSAGE DEF L74 (ERASE FROM AREA) DEF D18 "YOU ARE USING DEF VERT1 AMERICAN DEF MES28 STANDARD SCAN." DEF B1 DEF ZERO DEF ZERO DEF INCLR SPC 1 L74 JSB VAREA DRAW AREA ABOVE DEF L75 AMERICAN SCAN'S DEF ZERO VISIBLE RASTER DEF YAMER (FROM Y=240 TO DEF MASK3 Y=255 AND DEF MES17 X=0 TO X=255) DEF ZERO DEF COLOR SPC 1 L75 JSB CHAR OUTPUT MESSAGE DEF L76 (ERASE FROM THE DEF D9 NEW AREA) DEF D245 "YOU HAVE SELECTED DEF MES29 THE WRONG SCAN DEF B1 MODE!!!" DEF ZERO DEF ZERO DEF INCLR SPC 1 L76 LDA FLSH? SZA,RSS FLASH? JMP L11 NO - NEXT JMP F2 YES SKP ***************************************************************** * * * -- FLASHING ROUTINE -- * * * ***************************************************************** SPC 1 FLASH LDA FLSH? SZA ALREADY IN FLASH? i JMP L8 YES - KNOW COMMANDS? CLA,INA STA FLSH? SET FLASH INDICATOR JSB EXEC ASK FOR PATTERN DEF F1 DEF B2 DEF LU DEF MES34 DEF D10 SPC 1 F1 JMP L12 GET PATTERN SPC 2 F2 LDA ND72 GET # OF FLASHES (B/W) LDB COLOR SZB WHITE? ARS NO - HALF THE FLASHES STA PNTR SPC 1 F3 LDA TCONF GET DELAY FOR B/W LDB COLOR SZB WHITE? LDA TCONS NO - SLOWER FLASHING STA ADDX LDA POL TOGGLE POLARITY XOR B1 INDICATOR STA POL JSB VIDLU SET POLARITY DEF F4 (CHANGE IT) DEF LUTV DEF POL SPC 1 F4 ISZ ADDX DELAY JMP *-1 COUNT ISZ PNTR ALL FLASHES DONE? JMP F3 NO - GO AGAIN JMP L11 DONE, GET NEXT COMMAND SKP ***************************************************************** * * * -- COLOR ROUTINE -- * * * ***************************************************************** SPC 1 GET NOP GET COLOR LDA CTEST SZA JMP LXXX STA COLOR INA STA INCLR JMP GET,I SPC 1 LXXX JSB EXEC ASK FOR COLOR DEF LYYY DEF B2 DEF LU DEF MES32 DEF B7 SPC 1 LYYY JSB EXEC INPUT ANSWER DEF LZZZ DEF B1 DEF RCON DEF BUFF DEF B1 SPC 1 LZZZ LDA BUFF AND MASK9 CLB CPA RED LDB B2 CPA GREEN LDB B3 CPA BLUE LDB B4 CPA YELOW LDB B5 CPA MGNTA LDB B6 CPA CYAN LDB B7 STB COLOR LDA D9 CMB,INB ADA B ӿ STA INCLR CMB,INB INB CPB B1 STB INCLR SKP ***************************************************************** * * * -- COLOR ROUTINE CONTINUED -- * * * ***************************************************************** SPC 1 LDA FLSH? SZA,RSS FLASHING? JMP BK3 NO LDA COLOR YES SZA,RSS WHITE? JMP BK2 YES JSB ERASE NO - ERASE DEF *+1 JSB VAREA WRITE COMPLIMENTARY DEF BK1 BACKGROUND DEF ZERO DEF ZERO DEF MASK3 DEF MASK3 DEF ZERO DEF INCLR BK1 ISZ GET ELIMINATE ERASE ISZ GET ON RETURN BK2 JMP GET,I SPC 1 BK3 CLB,INB SET COMPLIMENTARY COLOR TO STB INCLR BLACK WHEN NOT FLASHING JMP GET,I SKP ***************************************************************** * * * -- MISCELLANEOUS ROUTINES -- * * * ***************************************************************** SPC 1 IYM10 NOP SUBROUTINE TO LDA VERT1 REDUCE Y POSITION ADA ND10 BY 10 STA VERT1 JMP IYM10,I SPC 3 ERSE JSB ERASE PROCESS ER DEF *+1 COMMAND JMP L11 GET NEXT COMMAND SPC 3 INVRT LDA POL CHANGE THE XOR B1 STATE OF THE STA POL VIDEO POLARITY INDICATOR JSB VIDLU REVERSE THE VIDEO DEF *+3 POLARITY DEF LUTV DEF POL JMP L11 GET NEXT COMMAND SPC 3 TERM JSB EXEC PRINT MESSAGE DEF L80 ON TERMINAL 5B@< DEF B2 "TVERF: STOP 0077" DEF LU DEF MES30 DEF D8 SPC 1 L80 JSB EXEC TERMINATION DEF L81 CALL DEF MES13 L81 HLT 77B DUMMY!!! SKP B***************************************************************** * * * -- CONSTANTS AND STORAGE -- * * * ***************************************************************** SPC 1 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 D9 DEC 9 D10 DEC 10 D13 DEC 13 D16 DEC 16 D17 DEC 17 D18 DEC 18 D20 DEC 20 D21 DEC 21 D32 DEC 32 D42 DEC 42 D45 DEC 45 D48 DEC 48 D56 DEC 56 D60 DEC 60 D105 DEC 105 D107 DEC 107 D110 DEC 110 D123 DEC 123 D126 DEC 126 D130 DEC 130 D132 DEC 132 D135 DEC 135 D137 DEC 137 D165 DEC 165 D180 DEC 180 D195 DEC 195 D216 DEC 216 D226 DEC 226 D229 DEC 229 D232 DEC 232 D234 DEC 234 D242 DEC 242 D244 DEC 244 D245 DEC 245 D248 DEC 248 ML4 DEC 307 ND10 DEC -10 ND16 DEC -16 ML1 DEC -19 ND26 DEC -26 ML3 DEC -27 ND35 DEC -35 ND66 DEC -66 ND72 DEC -72 SKP ***************************************************************** * * * -- CONSTANTS AND STORAGE CONTINUED -- * * * ***************************************************************** SPC 1 M4096 DEC -4096 ML35 DEC 131 ML36 DEC -33 ML37 DEC -99 TCONF DEC -10000 TCONS DEC -20000 LU NOP ICOM NOP LUTV NOP CTEST NOP COLOR NOP INCLR NOP MTEST NOP RCON NOP FLSH? NOP POL NOP NO ASC 1,NO YES ASC 1,YE GA ASC 1,GA CR ASC 1,CR SE ASC 1,SE PO ASC 1,PO LO ASC 1,LO ER ASC 1,ER FL ASC 1,FL IN ASC 1,IN BA ASC 1,BA XLU ASC 1,LU MO ASC 1,MO TE ASC 1,TE EX ASC 1,EX EN ASC 1,EN DE ASC 1,DE RED OCT 51000 GREEN OCT 43400 BLUE OCT 41000 YELOW OCT 54400 MGNTA OCT 46400 CYAN OCT 41400 BPNT1 DEF BUF BUF OCT 120603,121203,121603,122204 OCT 122605,123206,123607,123610 SA0 OCT 77575 SA1 OCT 76577 YAMER DEC 240 SKP ***************************************************************** * * * -- TERMINAL MESSAGES -- * * * ***************************************************************** SPC 1 MES1 ASC 10,TV INTERFACE LU = _ MES2 ASC 16,IS CARD IN AMERICAN SCAN MODE? _ MES3 ASC 14,DO YOU KNOW THE COMMANDS? _ MES4 OCT 6412,6412 ASC 16,COMMANDS ARE ENTERED AS FOLLOWS: OCT 6412 ASC 18, GA GAIN PATTERN FOR ADJUSTING M ASC 10,ONITOR HEIGHT, WIDTH OCT 26015,5040 ASC 14, POSITION, AND FOCUS OCT 27015,5040 ASC 18, CR CROSSHATCH PATTERN FOR ADJUST ASC 5,ING MONITO OCT 51015,5040 ASC 17, LINEARITY AND PINCUSHION. OCT 6412 ASC 18, SE RECTANGLES IN THE FOUR CORNE ASC 8,RS OF THE SCREEN OCT 6412 ASC 18, FOR CHECKING DISPLAY SETTL ASC 8,ING TIME EFFECTS OCT 27015,5040 ASC 18, PO WRITES ALL POINTS ON THE SCRE ASC 5,EN TO CHEC OCT 45415,5040 ASC 14, FOR MISSING POINTS. OCT 6412 ASC 18, LO WRITES HP LOGO ON THE SCREEN OCT 27015,5040 ASC 17, DE DEMONSTRATES ALL FEATURES O ASC 9,F DISPLAY LIBRARY. OCT 6412 ASC 13, ER ERASES THE SCREEN. OCT 6412 ASC 18, IN INVERT THE VIDEO POLARITY ON ASC 6, THE SCREEN. OCT 6412 ASC 18, FL FLASH ANY SPECIFIED PATTERN. MES36 ASC 17, BA COLOR OR GRAY SCALE BARS. MES37 ASC 14, LU TO ENTER A NEW TV LU OCT 27015,5040 ASC 19, MO TO ENTER A DIFFERENT SCAN MODE. OCT 6412 ASC 14, EX EXITS THIS PROGRAM. l SKP **************************************************************** * * * -- TERMINAL MESSAGES CONTINUED -- * * * **************************************************************** SPC 1 MES5 OCT 6412 ASC 5,COMMAND? _ MES30 ASC 8,TVERF: STOP 0077 MES31 ASC 13,IS THIS A 1 CARD SYSTEM? _ MES32 ASC 7, WHAT COLOR? _ MES34 ASC 10, PATTERN TO FLASH? _ MES35 OCT 6412,6412 ASC 16, THE COLOR CODES ARE AS FOLLOWS: OCT 6412,6412 ASC 13, CODE COLOR GRAY LEVEL OCT 6412 ASC 13, ---- ----- ---------- OCT 6412 ASC 11, B BLUE 1/8 OCT 6412 ASC 11, G GREEN 1/4 OCT 6412 ASC 11, C CYAN 3/8 OCT 6412 ASC 11, R RED 1/2 OCT 6412 ASC 11, M MAGENTA 5/8 OCT 6412 ASC 11, Y YELLOW 3/4 OCT 6412 ASC 11, W WHITE 7/8 SKP ***************************************************************** * * * -- TV MESSAGE STRINGS -- * * * ***************************************************************** SPC 1 MES6 DEC 39 ASC 20,HEWLETT-PACKARD 91200 TV INTERFACE CARD MES7 DEC 36 ASC 18,HEWLETT-PACKARD 91200 TV INTRFC CARD MES8 DEC 32 ASC 16,ALPHANUMERIC CHARACTER GENERATOR MES9 DEC 36 ASC 18,ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 MES10 DEC 23 ASC 12,!#$%&'*+,-./:;<=>?@[\]^ MES11 DEC 25 ASC 13,WRITES IN FOUR DIRECTIONS MES12 DEC 23 ASC 12,MULTIPLE CHARACTER SIZE MES13 DEC 6 ASC 3,SIZE 1 MES14 DEC 6 ASC 3,SIZE 2 MES15 DEC 4 ASC 2,ETC. MES16 DEC 7 ASC 4,VECTORS MES17 DEC 15 ASeC 8,IN 8 DIRECTIONS MES18 DEC 35 ASC 18, THE PRESENT SCREEN SHOWS SOFTWARE MES19 DEC 32 ASC 16,CHARACTER AND VECTOR CAPABILITY. MES20 DEC 30 ASC 15, ALL OF THE CHARACTERS IN THE MES21 DEC 27 ASC 14,SUPPLIED LIBRARY ARE SHOWN. MES22 DEC 35 ASC 18, CALLS ARE, ALSO, MADE DIRECTLY TO MES23 DEC 36 ASC 18,VECTR, VAREA, POINT, ERASE, & VIDLU. MES24 DEC 36 ASC 18, ALL PATTERNS ALLOW FOR SCAN MODES. MES25 DEC 36 ASC 18, THE SCAN MODE YOU ARE NOW USING IS MES26 DEC 36 ASC 18,EITHER THE EUROPEAN STANDARD SCAN OR MES27 DEC 22 ASC 11,THE NON-STANDARD SCAN. MES28 DEC 37 ASC 19,YOU ARE USING AMERICAN STANDARD SCAN. MES29 DEC 40 ASC 20,YOU HAVE SELECTED THE WRONG SCAN MODE!!! SKP **************************************************************** * * * -- CONSTANTS & TABLES FOR ARROW ROUTINE -- * * * **************************************************************** SPC 1 SYM1 OCT 2000,2001,2002,2003,2004,2005,2006,2007 OCT 1005,1406,2406,3005 SYM2 OCT 2000,2001,2002,2003,2004,2005,2006,2007 OCT 1002,1401,2401,3002 SYM3 OCT 0003,0403,1003,1403,2003,2403,3003,3403 OCT 2401,3002,3004,2405 SYM4 OCT 0003,0403,1003,1403,2003,2403,3003,3403 OCT 0402,0404,1001,1005 SYM5 OCT 0000,0401,1002,1403,2004,2405,3006,3407 OCT 3406,3405,3007,2407 SYM6 OCT 0000,0401,1002,1403,2004,2405,3006,3407 OCT 0001,0002,0400,1000 SYM7 OCT 0007,0406,1005,1404,2003,2402,3001,3400 OCT 3401,3402,3000,2400 SYM8 OCT 0007,0406,1005,1404,2003,2402,3001,3400 OCT 0006,0005,0407,1007 SPC 2 * ARROW POSITION TABLE SPC 1 SYM1P OCT 076010,076040,076070,076120,076150 SYM2P OCT 076220,076250,076300,076330,076360 SYM3P OCT 004175,020175,034175,050175,064175 SYM4P OCT 110175,124175,140175,154 175,170175 SYM5P OCT 004010,020040,034070,050120,064150 SYM6P OCT 110220,124250,140300,154330,170360 SYM7P OCT 004360,020330,034300,050250,064220 SYM8P OCT 110150,124120,140070,154040,170010 SPC 1 * DUMMY ADDRESS TO ENABLE PROGRAM TO SEARCH THRU * FOR A PARTICULAR SYMBOL (DOT POINTER) SPC 1 ARW1 DEF SYM1 ARW1S DEF SYM1 SPC 1 * DUMMY ADDRESS TO ENABLE PROGRAM TO SEARCH THRU THE * POSITIONS OCCUPIED BY A PARTICULAR SYMBOL SPC 1 ARW1P DEF SYM1P ARW1T DEF SYM1P SKP **************************************************************** * * * -- GAIN CHECK ROUTINE FOR TV -- * * * **************************************************************** SPC 1 * THE GAIN SUBROUTINE GENERATES A RECTANGLE * AND ARROWS TO TEST THE HEIGHT AND WIDTH ON THE TV SPC 1 GAIN JSB GET GET COLOR FOR MULTI-CARD SYSTEMS JSB ERASE ERASE ENTIRE SCREEN DEF *+1 JSB VIDLU SET WRITE MODE DEF *+3 DEF LUTV DEF POL SPC 1 LDA ADD SAVE POSITION REDUCER INST. STA ADDX LDB MTEST GET AMERICAN SCAN INDICATOR LDA X GET Y = 256 SZB AMERICAN SCAN? LDA YAMER YES - GET Y = 240 STA Y SET VERTICAL DIMENSION LDA SA0 GET RECT 1 Y FOR NON-AMER. SZB AMERICAN SCAN? ADA STADR YES - Y = Y - 8 STA S0 SET VERTICAL POSITION 1 LDA SA1 GET RECT 2 Y FOR NON-AMER SZB AMERICAN SCAN? ADA STADR YES - Y = Y - 8 STA S1 SET VERTICAL POSITION 2 CLA GET NOP FOR ARROW POS. REDUCER SZB AMERICAN SCAN? LDA ADDX YES - GET INST. FOR POS. RED. STA ADD SET ARROW POSITION REDUCER SPC 1 JSB SQUAR GO TO SQUAR SBtUR TO DRAW A RECT. OCT 0 Y DEC 256 VERT. DIM. OF RECT. X DEC 256 HORIZ. DIM. OF RECT. SPC 1 LDA SYMBL GET NUMBER OF DOTS IN SYMBOL STA DOTC PUT IN DOT COUNTER LDA POSIT GET NUMBER OF POSITIONS STA POSC PUT IN POSITION COUNTER LDA LOOPS GET NUMBER OF LOOPS (ARROWS) STA LOOPC PUT IN LOOP COUNTER LDA ARW1S GET START OF SYMBOL STA ARW1 AND SAVE LDA ARW1T GET START OF COMMON POSITION STA ARW1P AND SAVE SKP **************************************************************** * * * -- GAIN ROUTINE CONTINUED -- * * * **************************************************************** SPC 1 HEAD1 LDA BFAD SET BUFFER STA PNTR POINTER STA A1 HEAD0 LDA ARW1,I GET DOT LDB ARW1P,I GET POSITION ADA B ADD DOT TO POSITION ADD ADA STADR REDUCE Y BY 8 FOR AMER SCAN ONLY STA PNTR,I STORE POINT ISZ PNTR IN OUTPUT BUFFER ISZ DOTC INCREMENT DOT COUNTER JMP HEADA SKIP JSB POINT OUTPUT THE DEF *+4 POINT BUFFER A1 NOP DEF D12 DEF COLOR JMP HEAD2 GET NEXT POSITION HEADA ISZ ARW1 INCREMENT DOT POINTER JMP HEAD0 SET UP NEXT DOT SPC 1 HEAD2 LDA SYMBL GET -12 STA DOTC PUT IN DOT COUNTER ISZ POSC INCREMENT POSITION JMP *+2 ALL 5 NOT DRAWN JMP HEAD3 RESTORE POSC AND TEST LOOPC LDA ARW1 ADA ND11 STA ARW1 ISZ ARW1P JMP HEAD1 SKP *************************************************************** * * * -- GAIN ROUTINE CONTINUED -- *  * * *************************************************************** SPC 1 HEAD3 LDA POSIT GET -5 STA POSC PUT IN POSITION COUNTER ISZ LOOPC ARE ALL SYMBOLS DRAWN JMP *+2 ALL SYMBOLS NOT DRAWN JMP HEAD4 ALL SYMBOLS DRAWN ISZ ARW1 5 SYMBOLS OF ONE TYPE DRAWN ISZ ARW1P JMP HEAD1 SPC 1 HEAD4 JSB SQUAR WRITE A S0 OCT 77575 CROSS DEC 2 IN THE DEC 6 MIDDLE JSB SQUAR OF THE S1 OCT 76577 SCREEN DEC 6 BY WRITING DEC 2 TWO RECTANGLES LDA ADDX RESTORE INSTRUCTION STA ADD LDA FLSH? SZA,RSS FLASH? JMP L11 NO - NEXT JMP F2 YES SPC 1 ADDX NOP DOTC NOP BFAD DEF BUFFR PNTR NOP LOOPC NOP BUFFR BSS 256 SYMBL DEC -12 POSC NOP D12 DEC 12 ND11 DEC -11 LOOPS DEC -8 SKP **************************************************************** * * * -- PIN CUSHION TEST, CROSS HATCH PATTERN -- * * * **************************************************************** SPC 1 PIN JSB GET GET COLOR FOR MULTI-CARD SYSTEMS JSB ERASE ERASE ENTIRE SCREEN DEF *+1 JSB VIDLU SET WRITE MODE DEF *+3 DEF LUTV DEF POL SPC 1 LDB MTEST GET AMERICAN SCAN INDICATOR LDA MASK0 GET VERT MIDDLE DONE, NON-AMER SZB AMERICAN SCAN? LDA MASK6 YES - GET VERT MID DONE FOR AMER STA MSK0 SET VERTICLE MIDDLE DONE TESTER LDA MASK6 GET VERT MIDDLE, NON-AMER SZB AMERICAN SCAN? LDA MASK1 YES - GET VERT MID FOR AMER STA MSK6p SET VERTICLE MIDDLE TESTER LDA MASK9 GET VERT NXT TO MID, NON-AMER SZB AMERICAN SCAN? LDA MASK5 YES - GET NXT TO MID FOR AMER STA MSK9 SET VERT NEXT TO MIDDLE TESTER SPC 1 CLB CLEAR X COUNTER PIN1 LDA BFAD SET UP BUFFER STA PNTR POINTER STA A2 CLA CLEAR Y COUNTER FAX1 IOR B MERGE X INTO Y STA PNTR,I PUT POINT INTO ISZ PNTR OUTPUT BUFFER AND MASK2 MASK OUT X PORTION CPA MASK2 TEST FOR Y LINE FINSIHED JMP FAX2 Y LINE FINISHED ADA X ADD 1 TO Y JMP FAX1 SKP *************************************************************** * * * -- PIN CUSHION TEST CONTINUED -- * * * *************************************************************** SPC 1 FAX2 STB POSC SAVE X COUNTER JSB POINT OUTPUT COMPLETE DEF *+4 LINE FROM BUFFER A2 NOP DEF X DEF COLOR LDB POSC RESTORE X COUNTER CPB MASK3 IS LAST LINE FINISHED? JMP FAX4 LAST FINISHED CPB MASK4 IS NEXT TO MIDDLE FINISHED? JMP FAX3 YES CPB MASK7 IS THIS THE MIDDLE? JMP FAX3A YES CPB MASK8 IS MIDDLE FINISHED? JMP FAX3 YES ADB D8 ADD 10B TO X JMP PIN1 DRAW NEXT VERTICLE SPC 1 FAX3 ADB MES16 ADD 7B TO X JMP PIN1 SPC 1 FAX3A ADB B1 ADD 1 TO X JMP PIN1 SPC 1 B1 OCT 1 MASK0 OCT 100000 MASK1 OCT 70000 MASK4 OCT 170 MASK5 OCT 73400 MASK6 OCT 74000 MASK7 OCT 177 MASK8 OCT 200 MASK9 OCT 77400 SPC 2 FAX4 CLB CLEAR Y COUNTER FAX5 LDA BFAD SET BUFFER STA PNTR POINTER STA A3 CLA  CLEAR X COUNTER FAX6 IOR B MERGE Y INTO X STA PNTR,I PUT POINT INTO ISZ PNTR OUTPUT BUFFER AND MASK3 MASK OUT Y PORTION CPA MASK3 TEST FOR HORIZONTAL FINISHED JMP FAX7 FINISHED INA ADD 1 TO X JMP FAX6 SKP **************************************************************** * * * -- PIN CUSHION TEST CONTINUED -- * * * **************************************************************** SPC 1 FAX7 STB POSC SAVE Y COUNTER JSB POINT OUTPUT A COMPLETE DEF *+4 LINE FROM BUFFER A3 NOP DEF X DEF COLOR LDB POSC RESTORE Y COUNTER CPB MASK2 IS LAST LINE FINISHED? JMP RESP LAST FINISHED RETURN TO MAIN CPB MSK6 IS NEXT TO MIDDLE FINISHED? JMP FAX8 YES CPB MSK9 IS THIS THE MIDDLE? JMP FAX8A YES CPB MSK0 IS MIDDLE FINISHED? JMP FAX8 YES ADB B4000 ADD 10B TO Y JMP FAX5 DRAW NEXT HORIZONTAL SPC 1 FAX8 ADB CON2 ADD 7B TO Y JMP FAX5 SPC 1 FAX8A ADB X ADD 1 TO Y JMP FAX5 SPC 1 RESP LDA FLSH? SZA,RSS FLASH? JMP L11 NO - NEXT JMP F2 YES SPC 1 MSK0 NOP MSK6 NOP MSK9 NOP B4000 OCT 4000 CON2 OCT 3400 STADR OCT 174000 SKP **************************************************************** * * * -- WRITE ALL POINTS -- * * * **************************************************************** SPC 1 BURN JSB GET GET COLOR FOR MULTI-CARD SYSTEMS JSB ERASE ERASE ENTIRE SCREEN DEF *+1 JSB VIDLU SET WRITE MODE DEF *+3 DEF LUTV DEF POL SPC 1 JSB VAREA WRITE AREA DEF OUT 256 POINTS BY DEF ZERO 256 POINTS DEF ZERO DEF MASK3 DEF MASK3 DEF ZERO DEF COLOR SPC 1 OUT LDA FLSH? SZA,RSS FLASH? JMP L11 NO - NEXT JMP F2 YES SPC 2 MASK2 OCT 177400 MASK3 DEC 255 POSIT OCT -5 SA2 OCT 174370 SXA2 OCT 164370 SXA3 OCT 164000 SKP **************************************************************** * * * -- SETTLING TIME, SQUARES IN 4 CORNERS -- * * * **************************************************************** SPC 1 SETTM JSB GET GET COLOR FOR MULTI-CARD SYSTEMS JSB ERASE ERASE ENTIRE SCREEN DEF *+1 JSB VIDLU SET WRITE MODE DEF *+3 DEF LUTV DEF POL SPC 1 LDB MTEST GET AMERICAN SCAN INDICATOR LDA SA2 GET RIGHT SQUARE POS, NON-AMER SZB AMERICAN SCAN? LDA SXA2 YES - GET RT SQR FOR AMER STA S2 SET RIGHT SQUARE STARTING POINT LDA STADR GET LEFT SQUARE POS, NON-AMER SZB AMERICAN SCAN? LDA SXA3 YES - GET LEFT SQR FOR AMER STA S3 SET LEFT SQUARE STARTING POINT SPC 1 JSB SQUAR PUTS 8X8 SQUARE ZERO OCT 0 IN THE D8 DEC 8 LOWER LEFT DEC 8 CORNER JSB SQUAR PUTS 8X8 SQUARE S2 OCT 174370 IN THE DEC 8 UPPER RIGHT DEC 8 CORNER JSB SQUAR PUTS 8X8 SQUARE S3 OCT 174000 IN THE DEC 8 UPPER LEFT DEC 8 CORNER JSB SQUAR PUTS 8X8 SQUARE OCT 370 B@ VIDEO GENERATOR * * NAME: BCS DRIVER FOR 91200 VIDEO GENERATORTOR * SOURCE: 91200-18005 * BINARY: 91200-16005 * PGMR: JOHN FLORES * * NAM D.13 91200-16005 REV 1645 SPC 1 ENT D.13,I.13 EXT DMAC1,DMAC2,IOERR SUP PRESS EXTRANEOUS LISTING SPC 1 * THIS DRIVER IS RESPONSIBLE FOR PROCESSING EXEC I/O CALLS FOR * THE <91200> VIDEO DISPLAY GENERATOR. IT RECOGNIZES WRITE AND * CONTROL REQUESTS. SPC 1 * WRITE REQUESTS WILL INITIATE A DMA TRANSFER OF YX * COORDINATES OF POINTS TO BE WRITTEN ON OR ERASED FROM * THE VIDEO MONITOR SCREEN BY THE <91200>. * Y=BITS 15-8, X=BITS 7-0. SPC 1 * CONTROL REQUESTS ARE USED TO:- * SET COLOR (BLACK FOR SELECTIVE ERASE) * SET SENSE (VIDEO POLARITY) * PERFORM A BULK ERASE. SPC 1 * THE FUNCTION BITS FOR CONTROL REQUESTS ARE DEFINED AS FOLLOWS:- SPC 1 * BITS 10, 9, & 6 SELECT COLOR AS FOLLOWS: SPC 1 * 00 XX0 WHITE * 00 XX1 BLACK (SELECTIVE ERASE) * 01 XX0 RED -----\ * 01 XX1 GREEN \ * 10 XX0 BLUE \ NOT FOR 1 CARD * 10 XX1 YELLOW (RED & GREEN / SYSTEMS * 11 XX0 MAGENTA (RED & BLUE) / * 11 XX1 CYAN (BLUE & GREEN) -----/ SPC 1 * BIT 7 IS THE SENSE BIT, IF SET TO 1 IT CAUSES THE VIDEO * OUTPUT OF THE CARD TO INVERT. SPC 1 * BIT 8 SET TO 1 CAUSES BULK ERASE (TO SENSE PREVIOUSLY SET). SPC 1 * WHEN BIT 8 OF THE CONTROL WORD IS SET (TO ERASE), BITS * 6, 7, 9, & 10 OF THE CONTROL WORD ARE IGNORED. SPC 1 SKP * INITIATION SECTION SPC 1 D.13 NOP STA SAVA SAVE EQT ENTRY ADDRESS STB SAVB SAVE REQUEST (WORD 2) ADDRESS. LDA SAVB,I GET WORD 2 OF USER REQUEST. ALF ROTATE REQUEST CODE TO LOW A. AND M17 AND ISOLATE CODE. SZA,RSS IS IT A CLEAR REQUEST? JMP CLREQ YES JMP TO CLEAR REQ ROUTINE. LDB A NO, PUT REQUEST CODE IN B-REG. * * DRIVER BUSY TEST * LDA DFLG IF DRIVER BUSY, SZA (DFLG NOT=0, THEN JMP REJB REJECT REQUEST. LDA SAVA,I GET FIRST WORD OF EQT. AND M77 ISOLATE DEVICE SELECT CODE. STA TVSC SAVE IT IN TVSC. * * CHECK PHYSICAL DEVICE BUSY * IOR SFS1 COMBINE TV S.C. WITH SFS INST. STA I.2 CONFIGURE SFS INST FOR FLG CK. I.2 SFS TVGEN IS TV FLAG SET? JMP REJB NO, REJECT REQ. * * CHECK FOR CONTROL REQUEST * CPB B3 CONTROL REQUEST ??? JMP CNTRL YES, PROCESS CONTROL REQUEST. * * ILLEGAL REQUEST CODE CHECK * CPB B2 WRITE REQUEST ?? RSS YES, PROCESS WRITE. JMP RCER NO, ILLEGAL REQ CODE. SPC 1 * * CHECK FOR AVAILABLE DMA CHANNEL * LDB DMAC1 GET DMA INDICATOR WORD. CCE,SZB,RSS IS DMA DEFINED ? JMP NODMA NO SET ERROR EXIT. SSB YES,IS DMAC1 BUSY ? JMP CH2 YES, TRY DMAC2. STB A SAVE DMA CH NO. RBL,ERB SET THIS DMA CH. STB DMAC1 BUSY. JMP SDMA CH2 LDB DMAC2 GET DMA INDICATOR WORD. SZB,RSS IS DMAC2 DEFINED ? JMP *+3 NO,REJECT SSB,RSS IS DMAC2 BUSY ? JMP *+7 NO. CLB,INB YES,SET DMA BUSY INDICATOR. JMP REJB+1 AND REJECT. NODMA CCB SET B TO FWA ADB SAVB OF USER CALL. LDB B3 SET A=3 TO SAY NO DMA JMP IOERR AND HALT. STB A SAVE DMA CH NO. RBL,ERB SET THIS DMA CH. STB DMAC2 BUSY. SKP * * SET DMA COMPLETION INTERRUPT LINK * SDMA LDB TVSC,I GET THE CONTENTS OF THE DEVICE INTERRUPT STB A,I LOCATION AND PLUG INTO DMA INTERRUPT LOC. STA CHAN SAVE DMA NO. * * CONFIGURE DMA INSTRUCTIONS. * * IOR OTA0 102606/7 STA DMAO XOR B4 102602/3 STA DMAO1 STA DMAO2 IOR B300 102702/3 STA DMAS IOR B1200 103702/3 ADA B4 103706/7 STA DMASC XOR B5000 106706/7 STA DMACX XOR B4 106702/3 STA DMAC END DMA CONFIGURATION * * SET THE DEVICE BUSY FLAG * LDA SAVA GET ADDRESS OF FIRST EQT WORD. STA EQT1 AND SAVE IT. ISZ SAVA SET ADDRESS TO WORD 2 OF EQT. LDB M15 ENTRY, SET BIT 15 ON ( A FIELD = 2) LDA SAVA,I TO SAY BUSY IOR B AND STA SAVA,I RESTORE. * * INITIALIZE TRANSMSSION LOG. * LDA SAVA SET ADDRESS OF INA EQT WORD 3 STA EQTA IN EQTA STB EQTA,I INITIALIZE XMISSION LOG. SPC 1 * * OUTPUT DMA CONTROL WORD. * LDA TVSC ASSIGN TV CARD TO DMA AND IOR BIT15 ASK STC AFTER EACH TRANSFER, DMAO OTA DMA BUT NO FINAL CLC. IOR STF0 CONFGR STF FOR TV STA STF1 SKP * * OUTPUT USER BUFFER ADDRESS * ISZ SAVB INDEX ADDRESS TO WORD 4. ISZ SAVB OF USER REQUEST. LDA SAVB GET WORD 4 OF LDA A,I REQUEST. RAL,CLE,SLA,ERA (IF INDIRECT, JMP *-2 GET EFFECTIVE ADDRESS DMAC CLC DMA-4 SEND BUFFER ADDRESS DIRECTLY. DMAO1 OTA DMA-4 TO ADDRESS REGISTER. * * OUTPUT USER WORD COUNT * ISZ SAVB INDEX TO WORD 5 OF REQUEST LDA SAVB,I GET WORD 5-BUFFER LENGTH STA CHC SAVE WORD COUNT CMA,INA SET WORD COUNT TO NEG. DMAS STC DMA-4 SEND TWO'S COMPLEMENT OF DMAO2 OTA DMA-4 BUFFER LENGTH TO WORD COUNT REG. * * FOLLOWING INSTRUCTIONS STRART DATA TRANSMISSION. * STA DFLG SET DFLG BUSY (NOT=0) CLA A=0, INDICATES OPERATION INITIATE. STF1 STF TVGEN READY TV CARD DMASC STC DMA,C TURN ON DMA, BUT DMACX CLC DMA PREVENT INTERRUPT FROM IT. CLA JMP D.13,I EXIT TO IOC. * * CONFIGURE I-0 INSTRUCTIONS FOR TV CARD CONTROL WORD. * CNTRL LDA TVSC CONFIGURE I/O INSTRUCTIONS IOR MIA0 1024 STA ERASE IOR B1200 1036 STA OTATV IOR B100 1037 STA STCTV XOR B5000 1067 STA CLCTV END I/O CONFIGURATION * * SET EQT BUSY FLAG * LDA SAVA GET ADDRESS OF EQT1 STA EQT1 AND SAVE. ISZ SAVA SET ADDRESS LDA SAVA,I WORD 2 OF EQT ENTRY. IOR M15 SET BIT 15 STA SAVA,I OF WORD 2 = 1 LDA SAVA (A-FIELD=2) TO DAY BUSY AND RESTORE. SKP * * STORE ADDRESS OF EQT 3 IN DRIVER * INA SET ADDRESS OF EQT WORD 3 STA EQTA IN EQTA * * CHECK THE USER CONTROL WORD AND RE-CONFIGURE * IT FOR THE TV CARD. * SPC 1 LDA SAVB,I GET CONTROL WORD (ICNWD). AND =B3700 ISOLATE CONTROL BITS. STA B SAVE IT IN B REG. BLF,BLF CHECK BIT 8 SLB JMP ERASE DO BULK 'ERASE' SPC 1 LDA EQT1,I AND MASK CHECK FOR SZA,RSS NON-ZERO SUB-CHANNEL JMP GO.ON IS ZERO - SO COLOR LDA B NOT ZERO - KILL COLOR RAR,ERA IS COLOR NOT SEZ,SLA,RSS WHITE OR BLACK? JMP GO.ON YES - SO OK! LDA B NO - SO KILL COLOR TO AND MASK2 WHITE ONLY STA B SPC 1 GO.ON CLE,ELB CALL IS TO SET OR CHANGE BRS,BRS COLOR AND/OR SENSE. CLA POSITION ELA,RAL CONTROL BITS RBR,ERB 6, 9, & 10 RBL,RBL FOR TESTING SSB,SLB,RSS CYAN OR GREEN? { JMP *+3 NEITHER IOR B1 IT IS CYAN OR GREEN JMP *+4 WHICH? SLB,RSS MAGENTA OR RED? JMP *+5 NEITHER IOR B4 IT IS CYAN/MAGENTA OR GREEN/RED SEZ,RSS CYAN/MAGENTA OR GREEN/RED? IOR B10 IT IS GREEN OR RED JMP CLCTV DONE SSB,RSS YELLOW OR BLACK? JMP *+5 NEITHER (IT IS BLUE OR WHITE) IOR B10 IT IS YELLOW OR BLACK SKP SEZ,RSS YELLOW OR BLACK? IOR B5 IT IS BLACK JMP CLCTV DONE SEZ BLUE OR WHITE? IOR B5 IT IS BLUE CLCTV CLC TVGEN SWITCH MODE FF OTATV OTA TVGEN,C TO STEER OUTPUT TO MODE REG. LDB EQT1 GET ADDRESS OF FIRST EQT WORD. INB SET TO ADDRESS OF SECOND WORD. LDA B,I GET SECOND WORD. AND =B77777 CLEAR DEVICE BUSY FLAG AND STA B,I RESTORE IT. LDA M15 DO IMMEDIATE JMP D.13,I COMPLETION * * REJECT SECTION * RCER CLB,RSS REQUEST CODE ERROR (B)=0. REJB LDB M15 DRIVER-DEVICE BUSY,(B) SIGN=1, CLA,INA SET(A) NON-ZERO. JMP D.13,I EXIT TO IOC AND REJECT. * * CLEAR REQUEST ROUTINE * CLREQ LDA SAVA,I GET FIRST WORD OF EQT. AND M77 ISOLATE DEVICE SELECT CODE. IOR CLC0 NO,CONFIGURE CLC ON TV CARD. STA CLCSC CLCSC CLC TVGEN,C TURN OF TV CARD. ISZ SAVA SET ADDRESS TO WORD 2 OF EQT. LDA SAVA,I GET CONTENTS OF WORD 2. ELA,CLE,ERA CLEAR DEVICE BUSY FLAG. STA SAVA,I AND RESTORE. ISZ SAVA SET ADDRESS TO WORD 3 OF EQT. LDA SAVA,I GET CONTENTS OF WORD 3. CLA CLEAR XMISSION LOG STA SAVA,I AND RESTORE. JMP D.13,I EXIT TO IOC. * * ERASE SECTION * ERASE MIA TVGEN ANY INPUT WILL BULK ERASE STCTV STC TVGEN,C INTERRUPT NEEDED TO COMPLETE. CLA STB ERFLG 0 SET ERASE FLAG SO THAT I.13 KNOWS STB DFLG INTERRUPT WAS CAUSED BY ERASE. JMP D.13,I ALSO SET DRIVER BUSY FLAG (DFLG) SKP * * CONSTANTS AND STORAGE SECTION * TVSC NOP STORE CURRENT IO SELECT CODE. BIT15 OCT 100000 OTA0 OTA 0 STF0 STF 0 SFS1 SFS 0 CLC0 CLC 0,C MIA0 MIA 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B10 OCT 10 B100 OCT 100 B300 OCT 300 B1200 OCT 1200 B5000 OCT 5000 MASK OCT 700 MASK2 OCT 137771 SAVA OCT 0 SAVB OCT 0 M15 OCT 100000 M17 OCT 17 M77 OCT 77 CHAN OCT 0 USED TO SAVE DMA CHANNEL. DFLG OCT 0 SET CONDITION INDICATES DRIVER BUSY. EQTA OCT 0 EQT1 OCT 0 ERFLG OCT 0 SET CONDITION INDICATES BULK ERASE. SKP * CONTINUATOR SECTION. SPC 1 * * ENTERED BY THE TV CARD INTERRUPT AFTER * COMPLETION OF DMA OR A BULK ERASE. * I.13 NOP STA SAVAX SAVE A-REG STB SAVBX SAVE B-REG ERA,ALS SAVE E, SOC AND STA SAVEX OVERFLOW LDA TVSC CONFIGURE CLC ON TV CARD IOR CLC0 BEFORE STA TVCLC EXIT. * * CHECK FOR COMPLETION OF A BULK ERASE OPERATION * LDA ERFLG DOES ERASE FLAG INDICATE BULK ERASE? SZA JMP RSTOR YES, SO RESTORE REGS,CLEAR FLAGS & RETURN. * * DISMANTLE DMA-DRIVER INTERRUPT LINKAGE * LDA DMACX NO,STORE A CLC INST. IN STA CHAN,I THE DMA INTERRUPT LOCATION. * * CLEAR DMA CHANNEL BUSY FLAG. * LDA CHAN GET DMA CHANNEL NO. CPA B6 WAS CH NO.1 USED ? STA DMAC1 YES,CLEAR CH NO.1 BUSY FLAG. CPA B7 WAS CH NO. 2 USED.? STA DMAC2 YES,CLEAR CH NO.2 BUSY FLAG. * * RESTORE WORD 3 OF EQT ENTRY AND CLEAR DRIVER BUSY FLAG. * RSTOR LDA EQTA,I SET A=WORD 3 OF EQT ENTRY LDB CHC SET B=WORD COUNT ADA B PUT WORD COUNT IN A AND STA EQTAWz*($,I RESTORE WORD 3 IN EQT. CLA CLEAR THE DRIVER STA DFLG BUSY FLAG STA ERFLG AND THE ERASE FLAG. * * CLEAR DEVICE BUSY FLAG * LDB EQT1 GET ADDRESS OF FIRST EQT WORD. INB SET TO ADDRESS OF WORD 2. LDA B,I GET SECOND EQT WORD. AND =B77777 CLEAR DEVICE BUSY BIT. STA B,I AND RESTORE WORD. SKP * * RESTORE REGISTER SECTION * LDA SAVEX RESTORE CLO E SLA,ELA OVERFLOW, STF 1 A, LDA SAVAX AND B AT TIME OF LDB SAVBX INTERRUPT. TVCLC CLC TVGEN,C CLEAR CONROL & CLEAR FLAG ON TY CARD JMP I.13,I RETURN TO IOC. SPC 3 * * CONSTANTS AND STORAGE SECTION * A EQU 0 A-REG. B EQU 1 B-REG. TVGEN EQU 0 DUMMY SELECT CODE. DMA EQU 6 NOMINAL DMA CHANNEL SAVAX OCT 0 SAVEX OCT 0 SAVBX OCT 0 CHC OCT 0 SPC 2 END _{*   91200-18006 1634 S 0122 HP91200 EXEC CALL ADAPTER ROUTINE             H0101 TASMB,R,B,L,T,C HED BCS DRIVER FOR <91200> VIDEO GENERATOR * * NAME: BCS DRIVER FOR 91200 VIDEO GENERATORTOR * SOURCE: 91200-18005 * BINARY: 91200-16005 * PGMR: JOHN FLORES * * NAM D.13 91200-16005 REV 1633 SPC 1 ENT D.13,I.13 EXT DMAC1,DMAC2,IOERR SUP PRESS EXTRANEOUS LISTING SPC 1 * THIS DRIVER IS RESPONSIBLE FOR PROCESSING EXEC I/O CALLS FOR * THE <91200> VIDEO DISPLAY GENERATOR. IT RECOGNIZES WRITE AND * CONTROL REQUESTS. SPC 1 * WRITE REQUESTS WILL INITIATE A DMA TRANSFER OF YX * COORDINATES OF POINTS TO BE WRITTEN ON OR ERASED FROM * THE VIDEO MONITOR SCREEN BY THE <91200>. * Y=BITS 15-8, X=BITS 7-0. SPC 1 * CONTROL REQUESTS ARE USED TO:- * SET COLOR (BLACK FOR SELECTIVE ERASE) * SET SENSE (VIDEO POLARITY) * PERFORM A BULK ERASE. SPC 1 * THE FUNCTION BITS FOR CONTROL REQUESTS ARE DEFINED AS FOLLOWS:- SPC 1 * BITS 10, 9, & 6 SELECT COLOR AS FOLLOWS: SPC 1 * 00 XX0 WHITE * 00 XX1 BLACK (SELECTIVE ERASE) * 01 XX0 RED -----\ * 01 XX1 GREEN \ * 10 XX0 BLUE \ NOT FOR 1 CARD * 10 XX1 YELLOW (RED & GREEN / SYSTEMS * 11 XX0 MAGENTA (RED & BLUE) / * 11 XX1 CYAN (BLUE & GREEN) -----/ SPC 1 * BIT 7 IS THE SENSE BIT, IF SET TO 1 IT CAUSES THE VIDEO * OUTPUT OF THE CARD TO INVERT. SPC 1 * BIT 8 SET TO 1 CAUSES BULK ERASE (TO SENSE PREVIOUSLY SET). SPC 1 * WHEN BIT 8 OF THE CONTROL WORD IS SET (TO ERASE), BITS * 6, 7, 9, & 10 OF THE CONTROL WORD ARE IGNORED. SPC 1 SKP * INITIATION SECTION SPC 1 D.13 NOP STA SAVA SAVE EQT ENTRY ADDRESS STB SAVB SAVE REQUEST (WORD 2) ADDRESS. LDA SAVA,I GET FIRST WORD OF EQT. AND M77 ISOLATE DEVICE SELECT CODE. STA TVSC SAVE IT IN TVSC. * * DRIVER BUSY TEST * DXX.1 LDB DFLG IF DRIVER BUSY, SZB (DFLG NOT=0, THEN JMP REJB REJECT REQUEST. * * CHECK FOR CONTROL REQUEST * LDA SAVB,I GET WORD 2 OF USER REQUEST. ALF ROTATE REQUEST CODE TO LOW A REG. AND M17 AND ISOLATE CODE. CPA B3 CONTROL REQUEST ??? JMP CNTRL YES, PROCESS CONTROL REQUEST. * * ILLEGAL READ CHECK * B10 SLA IF A=1 ,RETURN CODE IS RIGHT JMP D.13,I TO SHOW ILLEGAL READ. SPC 1 * * CHECK FOR AVAILABLE DMA CHANNEL * LDB DMAC1 GET DMA INDICATOR WORD. CCE,SZB,RSS IS DMA DEFINED ? JMP NODMA NO SET ERROR EXIT. SSB YES,IS DMAC1 BUSY ? JMP CH2 YES, TRY DMAC2. STB A SAVE DMA CH NO. RBL,ERB SET THIS DMA CH. STB DMAC1 BUSY. JMP SDMA CH2 LDB DMAC2 GET DMA INDICATOR WORD. SZB,RSS IS DMAC2 DEFINED ? JMP *+3 NO,REJECT SSB,RSS IS DMAC2 BUSY ? JMP *+7 NO. CLB,INB YES,SET DMA BUSY INDICATOR. JMP REJB+1 AND REJECT. NODMA CCB SET B TO FWA ADB SAVB OF USER CALL. LDB B3 SET A=3 TO SAY NO DMA JMP IOERR AND HALT. STB A SAVE DMA CH NO. RBL,ERB SET THIS DMA CH. STB DMAC2 BUSY. SKP * * SET DMA COMPLETION INTERRUPT LINK * SDMA LDB TVSC,I GET THE CONTENTS OF THE DEVICE INTERRUPT STB A,I LOCATION AND PLUG INTO DMA INTERRUPT LOC. STA CHAN SAVE DMA NO. * * CONFIGURE DMA INSTRUCTIONS. * * IOR OTA0 102606/7 STA DMAO XOR B4 102602/3 STA DMAO1 STA DMAO2 IOR B300 102702/3 STA DMAS IOR B1200 103702/3 ADA B4 10r3706/7 STA DMASC XOR B5000 106706/7 STA DMACX XOR B4 106702/3 STA DMAC END DMA CONFIGURATION * * SET THE DEVICE BUSY FLAG * LDA SAVA GET ADDRESS OF FIRST EQT WORD. STA EQT1 AND SAVE IT. ISZ SAVA SET ADDRESS TO WORD 2 OF EQT. LDB M15 ENTRY, SET BIT 15 ON ( A FIELD = 2) LDA SAVA,I TO SAY BUSY IOR B AND STA SAVA,I RESTORE. * * INITIALIZE TRANSMSSION LOG. * LDA SAVA SET ADDRESS OF INA EQT WORD 3 STA EQTA IN EQTA STB EQTA,I INITIALIZE XMISSION LOG. SPC 1 * * OUTPUT DMA CONTROL WORD. * LDA TVSC ASSIGN TV CARD TO DMA AND IOR BIT15 ASK STC AFTER EACH TRANSFER, DMAO OTA DMA BUT NO FINAL CLC. IOR STF0 CONFGR STF FOR TV STA STF1 SKP * * OUTPUT USER BUFFER ADDRESS * ISZ SAVB INDEX ADDRESS TO WORD 4. ISZ SAVB OF USER REQUEST. LDA SAVB GET WORD 4 OF LDA A,I REQUEST. RAL,CLE,SLA,ERA (IF INDIRECT, JMP *-2 GET EFFECTIVE ADDRESS DMAC CLC DMA-4 SEND BUFFER ADDRESS DIRECTLY. DMAO1 OTA DMA-4 TO ADDRESS REGISTER. * * OUTPUT USER WORD COUNT * ISZ SAVB INDEX TO WORD 5 OF REQUEST LDA SAVB,I GET WORD 5-BUFFER LENGTH STA CHC SAVE WORD COUNT CMA,INA SET WORD COUNT TO NEG. DMAS STC DMA-4 SEND TWO'S COMPLEMENT OF DMAO2 OTA DMA-4 BUFFER LENGTH TO WORD COUNT REG. * * FOLLOWING INSTRUCTIONS START DATA TRANSMISSION. * STA DFLG SET DFLG BUSY (NOT=0) CLA A=0, INDICATES OPERATION INITIATE. STF1 STF TVGEN READY TV CARD DMASC STC DMA,C TURN ON DMA, BUT DMACX CLC DMA PREVENT INTERRUPT FROM IT. CLA JMP D.13,I EXIT TO IOC. * * CONFIGURE I-0 INSTRUCTIONS FOR TV CARD CONTROL WORD. * CNTRL LDA TVSC CONFIGURE I/O INSTRUCTIONS 8J IOR MIA0 1024 STA ERASE IOR B1200 1036 STA OTATV IOR B100 1037 STA STCTV XOR B5000 1067 STA CLCTV END I/O CONFIGURATION * * SET EQT BUSY FLAG * LDA SAVA GET ADDRESS OF EQT1 STA EQT1 AND SAVE. ISZ SAVA SET ADDRESS LDA SAVA,I WORD 2 OF EQT ENTRY. IOR M15 SET BIT 15 STA SAVA,I OF WORD 2 = 1 LDA SAVA (A-FIELD=2) TO DAY BUSY AND RESTORE. SKP * * STORE ADDRESS OF EQT 3 IN DRIVER * INA SET ADDRESS OF EQT WORD 3 STA EQTA IN EQTA * * CHECK THE USER CONTROL WORD AND RE-CONFIGURE * IT FOR THE TV CARD. * SPC 1 LDA SAVB,I GET CONTROL WORD (ICNWD). AND =B3700 ISOLATE CONTROL BITS. STA B SAVE IT IN B REG. BLF,BLF CHECK BIT 8 SLB JMP ERASE DO BULK 'ERASE' SPC 1 LDA EQT1,I AND MASK CHECK FOR SZA,RSS NON-ZERO SUB-CHANNEL JMP GO.ON IS ZERO - SO COLOR LDA B NOT ZERO - KILL COLOR RAR,ERA IS COLOR NOT SEZ,SLA,RSS WHITE OR BLACK? JMP GO.ON YES - SO OK! LDA B NO - SO KILL COLOR TO AND MASK2 WHITE ONLY STA B SPC 1 GO.ON CLE,ELB CALL IS TO SET OR CHANGE BRS,BRS COLOR AND/OR SENSE. CLA POSITION ELA,RAL CONTROL BITS RBR,ERB 6, 9, & 10 RBL,RBL FOR TESTING SSB,SLB,RSS CYAN OR GREEN? JMP *+3 NEITHER IOR B1 IT IS CYAN OR GREEN JMP *+4 WHICH? SLB,RSS MAGENTA OR RED? JMP *+5 NEITHER IOR B4 IT IS CYAN/MAGENTA OR GREEN/RED SEZ,RSS CYAN/MAGENTA OR GREEN/RED? IOR B10 IT IS GREEN OR RED JMP CLCTV DONE SSB,RSS YELLOW OR BLACK? JMP *+5 NEITHER (I4!T IS BLUE OR WHITE) IOR B10 IT IS YELLOW OR BLACK SKP SEZ,RSS YELLOW OR BLACK? IOR B5 IT IS BLACK JMP CLCTV DONE SEZ BLUE OR WHITE? IOR B5 IT IS BLUE CLCTV CLC TVGEN SWITCH MODE FF OTATV OTA TVGEN,C TO STEER OUTPUT TO MODE REG. LDB EQT1 GET ADDRESS OF FIRST EQT WORD. INB SET TO ADDRESS OF SECOND WORD. LDA B,I GET SECOND WORD. AND =B77777 CLEAR DEVICE BUSY FLAG AND STA B,I RESTORE IT. LDA M15 DO IMMEDIATE JMP D.13,I COMPLETION * * REJECT SECTION * RCER CLB,RSS REQUEST CODE ERROR,(B)=0 RCER2 CLB,INB CHARACTER REQUEST ILLEGAL FOR BLS,SLB DRIVER, SETB=2. REJB LDB M15 DRIVER-DEVICE BUSY,(B) SIGN=1, CLA,INA SET(A) NON-ZERO. JMP D.13,I EXIT TO IOC AND REJECT. * * ERASE SECTION * ERASE MIA TVGEN ANY INPUT WILL BULK ERASE STCTV STC TVGEN,C INTERRUPT NEEDED TO COMPLETE. CLA STB ERFLG SET ERASE FLAG SO THAT I.13 KNOWS STB DFLG INTERRUPT WAS CAUSED BY ERASE. JMP D.13,I ALSO SET DRIVER BUSY FLAG (DFLG) SKP * * CONSTANTS AND STORAGE SECTION * TVSC NOP STORE CURRENT IO SELECT CODE. BIT12 OCT 10000 BIT15 OCT 100000 OTA0 OTA 0 STF0 STF 0 CLC0 CLC 0,C MIA0 MIA 0 B1 OCT 1 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B100 OCT 100 B300 OCT 300 B1200 OCT 1200 B5000 OCT 5000 BIT11 OCT 4000 MASK OCT 700 MASK2 OCT 137771 SAVA OCT 0 SAVB OCT 0 M15 OCT 100000 M17 OCT 17 M77 OCT 77 CHAN OCT 0 USED TO SAVE DMA CHANNEL. DFLG OCT 0 SET CONDITION INDICATES DRIVER BUSY. EQTA OCT 0 EQT1 OCT 0 ERFLG OCT 0 SET CONDITION INDICATES BULK ERASE. SKP * CONTINUATOR SECTION. SPC 1 * * ENTERED BY THE TV CARD INTERRUPT AFTER * COMPLETION OF DMA OR A BULK ERAESE. * I.13 NOP STA SAVAX SAVE A-REG STB SAVBX SAVE B-REG ERA,ALS SAVE E, SOC AND STA SAVEX OVERFLOW LDA TVSC CONFIGURE CLC ON TV CARD IOR CLC0 BEFORE STA TVCLC EXIT. * * CHECK FOR COMPLETION OF A BULK ERASE OPERATION * LDA ERFLG DOES ERASE FLAG INDICATE BULK ERASE? SZA JMP RSTOR YES, SO RESTORE REGS,CLEAR FLAGS & RETURN. * * DISMANTLE DMA-DRIVER INTERRUPT LINKAGE * LDA DMACX NO,STORE A CLC INST. IN STA CHAN,I THE DMA INTERRUPT LOCATION. * * CLEAR DMA CHANNEL BUSY FLAG. * LDA CHAN GET DMA CHANNEL NO. CPA B6 WAS CH NO.1 USED ? STA DMAC1 YES,CLEAR CH NO.1 BUSY FLAG. CPA B7 WAS CH NO. 2 USED.? STA DMAC2 YES,CLEAR CH NO.2 BUSY FLAG. * * RESTORE WORD 3 OF EQT ENTRY AND CLEAR DRIVER BUSY FLAG. * RSTOR LDA EQTA,I SET A=WORD 3 OF EQT ENTRY LDB CHC SET B=WORD COUNT ADA B PUT WORD COUNT IN A AND STA EQTA,I RESTORE WORD 3 IN EQT. CLA CLEAR THE DRIVER STA DFLG BUSY FLAG STA ERFLG AND THE ERASE FLAG. * * CLEAR DEVICE BUSY FLAG * LDB EQT1 GET ADDRESS OF FIRST EQT WORD. INB SET TO ADDRESS OF WORD 2. LDA B,I GET SECOND EQT WORD. AND =B77777 CLEAR DEVICE BUSY BIT. STA B,I AND RESTORE WORD. SKP * * RESTORE REGISTER SECTION * LDA SAVEX RESTORE CLO E SLA,ELA OVERFLOW, STF 1 A, LDA SAVAX AND B AT TIME OF LDB SAVBX INTERRUPT. TVCLC CLC TVGEN,C CLEAR CONROL & CLEAR FLAG ON TY CARD JMP I.13,I RETURN TO IOC. SPC 3 * * CONSTANTS AND STORAGE SECTION * A EQU 0 A-REG. B EQU 1 B-REG. TVGEN EQU 0 DUMMY SELECT CODE. DMA EQU 6 NOMINAL DMA CHANNEL SAVAX OCT 0 SAVEX OCT 0 SAVBN*($X OCT 0 CHC OCT 0 TEMP OCT 0 SPC 2 END *   91700-18100 1728 S 0222 DS1/B COMM. DRIVER: DVR65             H0102 ASMB,R,L,C HED DVR65 91700-16100 REV.1728 * (C) HEWLETT-PACKARD CO. 1977 * NAM DVR65 91700-16100 REV.1728 770630 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT I.65,C.65 EXT $LIST IFZ EXT $DDT XIF * * * DVR65 * SOURCE: 91700-18100 * BINARY: 91700-16100 * PRGMR: BOB SHATZER * DATE: 12 JAN 76 * * * * THIS IS THE COMMUNICATIONS DRIVER DESIGNED TO SUPPORT THE * DS1B DISTRIBUTED SYSTEMS NETWORK. THIS DRIVER IS NOT COM- * PATABLE WITH EARLIER VERSIONS OF DVR65, SCE/1, OR DS-1. * BOTH THE CALLING SEQUENCES AND THE LINE PROTOCOL HAVE BEEN * MODIFIED TO FACILITATE BETTER RESOURCE MANAGEMENT WITHIN * THE SYSTEM. THE DRIVER IS DESIGNED TO BE USED IN AN RTE-II * OR RTE-III SYSTEM. * * THIS DRIVER IS DESIGNED TO FUNCTION WITH EITHER THE HP 12665 * SERIAL DATA INTERFACE (SDI) CARD OR THE HP 12773 SERIAL * MODEM DATA INTERFACE (SMDI) CARD. THE DRIVER MAKES NO DIS- * TINCTION BETWEEN THE TWO BOARDS OR BETWEEN VARIOUS DATA * RATES. * * * ***** CAUTION ***** CAUTION ***** CAUTION ***** CAUTION ***** * * DO NOT ATTEMPT TO USE THIS DRIVER OUTSIDE OF THE DS-1 ENVIRON- * MENT WITHOUT THE PROPER SUPPORTING COMMUNICATIONS MANAGEMENT * STRUCTURE! THE DRIVER IS SPECIFICALLY DESIGNED TO INTERACT * WITH THE VARIOUS DS-1 MODULES SO AS TO PROVIDE PROPER RESOURCE * MANAGEMENT. * * ***** CAUTION ***** CAUTION ***** CAUTION ***** CAUTION ***** * SKP * * CALLING SEQUENCES * * *** NOTE: THESE CALLING SEQUENCES ARE SHOWN AS CLASS CALLS. * HOWEVER, THE DRIVER IS ABLE TO HANDLE NON-CLASS I/O AS WELL. * TO DO NON-CLASS I/O, SIMPLY CONVERT THE CALLS TO THEIR PROPER * FORMAT. *** SPC 2 * TRANSMIT REQUEST AND RECEIVE OR TRANSMIT DATA SPC 1 * JSB EXEC * DEF *+8 * DEF IRW REQUEST CODE = 20 (CLASS WRITE/READ) * DEF CONWD CONTROL WORD (SEE BELOW) * DEF RBUFR REQUEST BUFFER ADDRESS * DEF RBUFL REQUEST BUFFER LENGTH * DEF DBUFR DATA BUFFER ADDRESS * DEF DBUFL DATA BUFFER LENGTH * DEF CLASS * * * RECEIVE OR TRANSMIT REQUEST OR DATA ONLY SPC 1 * JSB EXEC * DEF *+8 * DEF IRW REQUEST CODE (17 = READ AND 18 = WRITE) * DEF CONWD CONTROL WORD (SEE BELOW) * DEF BUFFR REQUEST OR DATA BUFFER ADDRESS * DEF BUFFL REQUEST OR DATA BUFFER LENGTH * DEF TIME1 TIME TAG WORD 1 (DATA CALLS ONLY) * DEF TIME2 TIME TAG WORD 2 (DATA CALLS ONLY) * DEF CLASS * * * CONTROL REQUEST SPC 1 * JSB EXEC * DEF *+5 * DEF IRW REQUEST CODE = 19 (CLASS CONTROL) * DEF CONWD CONTROL WORD (SEE BELOW) * DEF BUFFR LRN/PRN BUFFER * DEF CLASS * SKP * * THE LRN/PRN BUFFER IS A SIX WORD BUFFER WHICH IS SUPPLIED BY * THE CALLER FOR AN ENABLE LISTEN MODE (MODE=3) CALL. THE DRIVER * PLACES THE FIRST THREE VALUES INTO THE EQT EXTENSION (WORDS 1, 2 * AND 3). THE REMAINING THREE WORDS ARE STORED IN THE DRIVER. * FOR A CLEAR REQUEST (MODES 2 AND 4), THE DRIVER WILL CLEAR * THE LRN/PRN VALUES BEING MAINTAINED IN EQT EXTENSION WORDS * 1 AND 2, AND WILL RETURN THEIR VALUES TO THE USER IN THE * BUFFER ADDRESS SUPPLIED. * * THE FORMAT FOR THE USER-SUPPLIED BUFFER IS AS FOLLOWS: * WORD 1 - LINE RESOURCE NUMBER * WORD 2 - PROGL RESOURCE NUMBER * WORD 3 - INTRA-REQUEST TIMEOUT (-10'S OF MILLISECONDS) * WORD 4 - ADDRESS OF #SBIT SUBROUTINE IN RES * y WORD 5 - ADDRESS OF $CGRN ENTRY POINT IN THE SYSTEM * WORD 6 - #0 IF THIS IS A PRIMARY NETWORK NODE * =0 IF THIS IS A SECONDARY NODE * * NOTE: THE DISTINCTION BETWEEN PRIMARY AND SECONDARY IS NECESSARY * TO RESOLVE THE CONTENTION PROBLEM WHICH PERIODICALLY OCCURS * WHEN TWO REQUESTS ARE MADE SIMULTANEOUSLY, ONE FROM EITHER * END OF THE COMMUNICATIONS LINE. IN THIS CASE, THE SECONDARY * DRIVER YIELDS TO THE OTHER END AND RETURNS TO THE USER WITH * THE 'BR' AND THE 'RB' BITS SET TO INDICATE A SIMULTANEOUS * REQUEST CONDITION OCCURED. IN NORMAL USAGE, ALL SATELLITES * ARE PRIMARY AND CCE IS SECONDARY. A CCE MAY BE MADE PRIMARY IF * IT COMMUNICATES WITH ANOTHER CCE (VIA PTOP OR OPERATOR COMMANDS), * AND IT DOES NOT SUPPORT ANY SATELLITES. * * THE INTRA-REQUEST TIMEOUT IS USED TO PROVIDE A TIMEOUT COUNTER * WHICH RUNS IN THE INTERVAL BETWEEN REQUEST AND DATA PORTIONS OF * A I/O CALL. IN A CCE NODE, THE VALUE SHOULD BE ZERO, SINCE CCE * HAS A MECHANISM FOR PROVIDING AN ALL-ENCOMPASSING TRANSACTION * TIMEOUT. IN SCE/4 AND 5 NODES, A VALUE SHOULD BE SUPPLIED TO * PROVIDE SOME FORM OF TRANSACTION TIMEOUT, SINCE THAT IS NOT * SUPPLIED BY THE SUPPORTING SOFTWARE. * * IF #SBIT AND $CGRN DO NOT EXIST IN A PARTICULAR NODE, A ZERO * IS PASSED FOR EACH OF THESE ADDRESSES. THE DRIVER CHECKS FOR * A ZERO PRIOR TO EXECUTING A 'JSB' TO THAT LOCATION. * SKP * CONTROL WORD FORMAT SPC 1 * 15!14 13 12!11 10 9! 8 7 6! 5 4 3! 2 1 0 * ************************************************* * * * Z*NW*BR*MR* MODE * LOGICAL UNIT * * ************************************************* * * * WHERE: * * NW IS THE NO WAIT BIT WHICH IS USED BY A CALLER TO SPECIFY * THAT HE BE GIVEN CONTROL BACK IMMEDIATELY IF THE REMOTE * CANNOT SERVICE HIS REQUEST PROMPTLY. NOT USED BY THE DRIVER, * BUT IS SPECI&qFIED IN A DRIVER-LIKE CALLING SEQUENCE TO D65MS. * * BR IS THE BLIND REQUEST BIT WHICH IS USED BY A CALLER TO * SPECIFY THAT HE DOES NOT WANT TO WAIT FOR THE REPLY TO COME * BACK FROM THE REMOTE. NOT USED BY THE DRIVER, BUT IS SPECIFIED * IN A DRIVER-LIKE CALL TO D65MS. * * MR IS USED TO INDICATE A MASTER REQUEST TO THE DRIVER SO THAT * IT CAN SET THE I/O COMPLETION FLAG IN THE LIST ENTRY ASSOCIATED * WITH THE CURRENT REQUEST UPON I/O COMPLETION. * * MODE: READ-WRITE REQUESTS * 0 FOR SEND OR RECEIVE REQUEST ONLY * 1 FOR SEND REQUEST AND READ DATA * 2 FOR SEND REQUEST AND SEND DATA * 3 FOR SEND OR RECEIVE DATA ONLY * 4 FOR SEND DATA ONLY WITHOUT A PRE- * EXISTING DATA PENDING CONDITION * CONTROL REQUESTS * 0 FOR SEND STOP * 1 FOR ENABLE LISTEN MODE * 2 FOR CLEAR REQUEST * 3 FOR ENABLE LISTEN MODE AND SETUP LRN AND PRN * 4 FOR CLEAR AND SET EQT DOWN * * Z: REQUIRED BY RTE FOR REQUEST AND DATA CALLS TO FORCE * FORCE THE SYSTEM TO TRANSPORT BOTH REQUEST AND * DATA BUFFERS BEFORE AND AFTER THE I/O CALL. * * NOTE: MODE 4 IS A PRIVILEGED MODE DESIGNED FOR USE BY PROGL AND * OTHER USERS WHO HAVE NEED TO SEND BLOCKS OF PURE DATA AND, IN * DOING SO, MUST BYPASS THE NORMAL COMMUNICATIONS RESOURCE * MANAGEMENT AND TRANSACTION MANAGEMENT FUNCTIONS. THIS MODE * IS LEGAL FOR WRITING ONLY. * SKP * EQUIPMENT TABLE USAGE * ********************* * * EQT # USE * *************************** * 1 DEFINED * 2 DEFINED * 3 DEFINED * 4 DEFINED * 5 DEFINED * 6 DEFINED * 7 FIRST BUFFER ADDRESS * 8 FIRST BUFFER LENGTH * 9  DATA BUFFER ADDRESS (REQ AND DATA) * 10 DATA BUFFER LENGTH (REQ AND DATA) * 11 COROUTINE POINTER * 12 EXTENDED STATUS WORD * 13 EQT EXTENSION ADDRESS * 14 DEFINED TIMEOUT VALUE * 15 TIMEOUT COUNTER * EXT1 VALUE OF LINE RESOURCE NUMBER * EXT2 VALUE OF PROGL RESOURCE NUMBER * EXT3 INTRA-REQUEST TIMEOUT VALUE (- 10'S OF MSECS.) * EXT4 STREAM TYPE FROM CURRENT PARMB * EXT5 MASTER REQUESTOR CLASS NUMBER FROM CURRENT PARMB * EXT6 ID SEG. ADDR. OF PGM. TO BE INTERRUPT SCHEDULED * EXT7 1ST TIME TAG OF LAST RECEIVED REQUEST * EXT8 2ND TIME TAG OF LAST RECEIVED REQUEST * SKP * STATUS WORD FORMAT * * * 15!14 13 12!11 10 9! 8 7 6! 5 4 3! 2 1 0 * ************************************************* * * *BL*IR*IL*SR*TO*CL*BR*GC* EQT 5 * ************************************************* * *RW*OC*RD*DD*MM*LM*RP*DP*TP*SF*RB*RM*PE*PAR CNTR* EQT 12 * ************************************************* * * WHERE: * * BL - BROKEN LINE * IR - ILLEGAL REQUEST TYPE * IL - ILLEGAL LENGTH RECEIVED * SR - STOP RECEIVED (GC ALSO SET IF VALID DATA REJECT) * TO - TIME OUT * CL - ILLEGAL LENGTH SPECIFIED IN CALLING SEQUENCE * BR - BUSY REJECT (RP OR DP CONDITION EXISTS) * GC - GOOD COMPLETION * RW - READ/WRITE DIRECTION FOR CURRENT REQUEST SEGMENT * OC - OPEN/CLOSED LOOP TRANSMISSION MODE * RD - REQUEST AND DATA MODE * DD - DATA DIRECTION FOR REQ AND DATA (1 = WRITE) * MM - MASTER REQUEST MODE * LM - LISTEN MODE ENABLED * RP - REQUEST PENDING * DP - DATA PENDING * TP - TRANSACTION PENDING * SF - SYSTEM FAILURE * RB - REMOTE BUSY * RM - RECEIVED MODE (OPEN/CLOSED LOOP) * PE - PARITY ERROR * q PAR CNTR - PARITY COUNTER * SKP I.65 NOP IFZ JMP *+3 NORMAL DRIVER ENTRY JSB $DDT SPECIAL ENTRY - CALL $DDT DEF *+1 XIF JSB SETIO CONFIGURE I/O INSTRUCTIONS LDA EQT13,I EXT. AREA ADDRESS SZA,RSS SKIP IF ONE SPECIFIED JMP GENER ELSE SYSTEM GENERATED INCORRECTLY LDA EQTX6,I FIRST ENTRY SZA FOR DEVICE? JMP NFIR NO. LDA EQT6,I GET EQT6 AND B377 ISOLATE REQUEST CODE AND MODE CPA B303 IS THIS AN INITIALIZE REQUEST? RSS YES - GO PROCESS IT JMP RQERR NO - REJECT REQUEST LDA EQT4,I FETCH SELECT CODE AND B77 ISOLATE ADA MN6 SUBTRACT 6 TO FIND ADA INTBA ENTRY IN INTERRUPT TABLE LDB A,I FETCH USER INTERRUPT LINK SSB,RSS IS IT POSITIVE? (EQT ADDRESS) JMP GENER YES - SYSTEM INCORRECTLY GENERATED CMB,INB GET INTERRUPT LINK STB EQTX6,I AND SAVE LDB EQT1 SET DRIVER STB A,I INTERRUPT LINK JSB RDD.C CLEAR RECEIVER AND STATUS WORDS LDA EQT4,I TELL RTE THAT I WANT CONTROL ON TIME OUTT IOR BIT12 IOR BIT13 AND ON POWER FAIL STA EQT4,I * NFIR LDA EQT5,I GET EQT WORD 5 SSA,RSS IS THE EQT ENTRY BUSY? JMP NFIR1 NO - NORMAL ENTRY LDA B103 WAS BUSY - SIMULATE LISTEN REQUEST STA EQT6,I (POWER FAIL CONDITION) NFIR1 LDA EQT12,I GET EQT 12 ALF,ALF ROTATE RP AND DP BITS TO LOWER BYTE AND B3 ISOLATE THEM STA STATE AND SAVE AS CURRENT DRIVER STATE LDA EQT6,I GET EQT6 AGAIN ALF,ALF ROTATE MODE TO LOWER BYTE RAL,RAL AND B7 MASK IT OFF STA MODE AND SAVE IT ADA M5 SSA,RSS MODE>4 IS AN ERROR JMP RQERR YES - MODE > 4 - ERROR LDA EQT6,I GEoT EQT6 AGAIN AND B3 ISOLATE REQUEST CODE SZA,RSS IS IT ZERO? JMP RQERR YES - ERROR CPA B3 IS IT A CONTROL REQUEST? JMP CNREQ YES - GO PROCESS ADA M1 MAKE REQUEST CODE 0 OR 1 MPY D15 MULTIPLY BY 15 FOR RQTBL INDEXING LDB MODE GET MODE BLS ADB MODE MODE * 3 ADB 0 ADD REQUEST TYPE ADB STATE AND STATE ADB RQTBL SET UP REQUEST TABLE INDEX LDA 1,I GET CONTENTS OF RQTBL AT INDEX AND MN400 CLEAR LOW HALF SZA,RSS IS IT ZERO? JMP ER.IR YES - ILLEGAL REQUEST SSA IS THE VALUE NEGATIVE? JMP ER.BR YES - DO A 'SOFT' REJECT LDA EQT6,I PICK UP EQT 6 AND BIT9 ISOLATE MASTER REQUEST BIT RAL,RAL ROTATE IT TO BIT 11 STA MSTR AND SAVE IT FOR LATER USAGE LDB 1,I GET ADDRESS FROM TABLE JMP 1,I JUMP TO PROCESSOR * B103 OCT 103 B377 OCT 377 MODE NOP STATE NOP MSTR NOP * SKP * * REQUEST PROCESSOR TABLE * * THIS TABLE IS ACTUALLY A THREE DIMENSIONAL ARRAY WHICH IS INDEXED * BY REQUEST CODE, MODE, AND DRIVER STATE. IF THE ENTRY WHICH IS * INDEXED BY A PARTICULAR REQUEST AT A SPECIFIC TIME IS ZERO, THE * REQUEST IS ILLEGAL AND WILL BE REJECTED BY THE DRIVER (THE SYSTEM * WILL RETURN AN 'IO07' TO THE REQUESTOR.) IF THE ENTRY IS NEGATIVE, * THE DRIVER WILL RETURN WITH AN IMMEDIATE COMPLETION RETURN AND * BIT 1 OF THE EQT5 STATUS AREA WILL BE SET TO INDICATE A DRIVER * BUSY REJECT. IF THE ENTRY IS POSITIVE, THE REQUEST IS VALID AND * THE ENTRY CONTAINS THE ADDRESS OF THE REQUEST PROCESSOR. * * RQTBL DEF *+1 RCODE MODE STATE REQ TYPE ****************************************************************************** B1 DEC 1 1 0 0 READ REQ MN6 OCT 177772 1 0 1 (DP) READ RE Q DEF R.REQ 1 0 2 (RP) READ REQ DEF RQ.RD 1 1 0 REQ & RDATA BIT15 OCT 100000 1 1 1 (DP) REQ & RDATA MN3 OCT 177775 1 1 2 (RP) REQ & RDATA DEF RQ.SD 1 2 0 REQ & SDATA MN4 OCT -4 1 2 1 (DP) REQ & SDATA DCLCC CLC 7,C 1 2 2 (RP) REQ & SDATA B2 DEC 2 1 3 0 READ DATA DEF R.DTA 1 3 1 (DP) READ DATA B3 DEC 3 1 3 2 (RP) READ DATA B4 DEC 4 1 4 0 READ DATA BIT3 OCT 10 1 4 1 (DP) READ DATA BIT5 OCT 40 1 4 2 (RP) READ DATA DEF S.REQ 2 0 0 SEND REQ MN400 OCT 177400 2 0 1 (DP) SEND REQ M1 OCT -1 2 0 2 (RP) SEND REQ DEF RQ.RD 2 1 0 REQ & RDATA RC OCT 170017 2 1 1 (DP) REQ & RDATA TNW OCT 170360 2 1 2 (RP) REQ & RDATA DEF RQ.SD 2 2 0 REQ & SDATA M5 DEC -5 2 2 1 (DP) REQ & SDATA CLCC CLC 0,C 2 2 2 (RP) REQ & SDATA D15 DEC 15 2 3 0 SEND DATA DEF S.DTA 2 3 1 (DP) SEND DATA B77 OCT 77 2 3 2 (RP) SEND DATA DEF SP.DT 2 4 0 SEND DATA DEF SP.DT 2 4 1 (DP) SEND DATA DEF SP.DT 2 4 2 (RP) SEND DATA * SKP * * CONTROL REQUEST PROCESSOR * CNREQ LDA STATE TEST DATA PENDING CONDITION CPA B1 IS IT SET? JMP STPRQ YES - SEND STOP JSB CNPRC CALL CONTROL REQUEST PROCESSOR SUBROUTINE STA EQT12,I SAVE EQT12 STATUS JSB ICHAS SET UP COROUTINE POINTER CLB,INB SET B FOR GOOD COMPLETION JMP ER.BrR+1 AND EXIT * SKP * CONTROL REQUEST PROCESSOR SUBROUTINE * CNPRC NOP LDB MODE GET MODE ADB CNTBL SET UP TO INDEX CONTROL TABLE JMP B,I AND JUMP TO PROCESSOR * CNTBL DEF *+1,I DEF STPRQ MODE 0 DEF LSN.1 MODE 1 DEF CLR.2 MODE 2 DEF LSN.3 MODE 3 DEF CLR.4 MODE 4 * CLR.2 CLB,RSS NORMAL CLEAR REQUEST CLR.4 LDB BIT14 CLEAR AND DOWN REQUEST JSB STAT SET EQT DOWN IF C AND D REQUEST LDB EQT7,I GET ADDRESS PROVIDED BY USER JSB ICHAS CHASE DOWN INDIRECTS LDA EQTX1,I GET LRN STA B,I AND RETURN TO USER INB BUMP USER BUFFER POINTER LDA EQTX2,I GET PRN STA B,I AND RETURN TO USER JSB RDD.C CLEAR THE CARD JSB CGRN CLA STA EQTX1,I CLEAR LRN VALUE IN EQT EXTENTION STA EQTX2,I CLEAR PRN VALUE IN EXTENSION LDB UNKNI GET UNKNOWN INTERRUPT POINTER JMP CNPRC,I AND EXIT * LSN.3 LDB EQT7,I LISTEN AND SETUP MODE JSB ICHAS GET USER BUFFER ADDRESS LDA B,I GET LRN STA EQTX1,I AND SAVE IT INB BUMP BUFFER POINTER LDA B,I GET PRN STA EQTX2,I AND SAVE THAT, TOO INB BUMP BUFFER POINTER LDA B,I GET INTRA-REQUEST TIMEOUT STA EQTX3,I AND SAVE IT INB BUMP BUFFER POINTER LDA B,I GET #SBIT ADDR. AND $CGRN ADDRESS STA #SBIT AND SAVE THEM INB LDA B,I IN BODY OF DRIVER STA $CGRN INB BUMP POINTER AGAIN LDA B,I GET PRIMARY FLAG STA PRIMY AND SAVE IT LSN.1 STC 0,C SET I/O CARD TO LISTEN MODE JSB CGRN LDB LSTNI GET LISTEN INTERRUPT POINT LDA BIT10 GET LISTEN STATUS BIT JMP CNPRC,I AND RETURN SKP * * HERE FOR IMMEDIATE COMPLETION RETURN * A REG SHOULD CONTAIN THEJ STATUS OF LAST REQUEST * * ER.BR LABEL IS USED FOR 'SOFT' REJECTS OF REQUESTS. * THAT IS, A REQUEST WHICH IS RECEIVED WHEN THERE IS * EITHER A REQUEST PENDING OR A DATA PENDING CONDITION IS * CURRENTLY EXISTING. * ER.BR LDB B2 GET BUSY BIT FOR IMMED COMPL REJECT JSB STAT PUT NEW STATUS IN EQT 5 LDA B4 SET FOR IMMEDIATE COMPLETION * * HERE FOR COMPLETION RETURN * EQT 11 WILL BE SET DEPENDING UPON LISTEN MODE STATUS * IDON STA TEMP2 SAVE COMPLETION STATUS LDA EQT12,I GET EQT12 AND BIT10 ISOLATE LISTEN MODE BIT LDB UNKNI SET FOR ILLEGAL INTERRUPT SZA IS THE DRIVER IN LISTEN MODE? LDB LSTNI YES - SET FOR LISTEN INTERRUPT LDA TEMP2 GET STATUS AGAIN IDON1 JSB ICHAS SAVE ROUTINE ADDRESS LDB EQT12,I GET EQT12 FOR RETURN TO CALLER JMP I.65,I RETURN TO RTE SYSTEM * ER.IR LDB BIT6 ILLEGAL REQUEST JSB STAT UPDATE EQT5'S STATUS CLA,INA,RSS SET FOR READ-WRITE ERROR RQERR LDA B2 REQUEST ERROR CODE JMP IDON AND EXIT * GENER LDA B3 SET A=3 FOR DEVICE NOT READY REJECT JMP IDON * SKP * * STOP REQUEST PROCESSOR * STPRQ JSB SSTOP SEND STOP LDB STPRA GET STOP REQUEST CONTINUATOR ADDRESS STRQ1 STC 0 PUT CARD IN TRANSMIT MODE JMP IEXIT+1 AND RETURN WITH OPERATION IN PROGRESS * * SUBROUTINE TO SEND A STOP * SSTOP NOP SAVE RETURN ADDRESS LDA STOP GET STOP WORD JSB OUTPA SEND STOP JMP SSTOP,I RETURN * * SUBROUTINE TO SEND TNW * STNW NOP LDA TNW GET TRANSMIT NEXT WORD JSB OUTPA OUTPUT WORD JMP STNW,I RETURN * * SUBROUTINE TO RETRANSMIT LAST WORD * SRLW NOP LDA RLW RETRANSMIT LAST WORD JSB OUTPA OUTPUT CHARACTER JMP SRLW,I RETURN * SKP * * HERE FOR RECEIVE OR TRANSMIT DAT(lA ONLY * S.DTA CCE,RSS SET E=1 FOR SEND DATA REQUEST R.DTA CLE AND TO ZERO FOR RECEIVE DATA REQUEST JSB DLCHK CHECK DATA LENGTH * LDA EQTX4,I GET FRIENDLY BIT (11) ALF SSA,RSS IS IT FRIENDLY? JMP DTAGO NO, DON'T CHECK TIME-TAGS * LDB EQT10,I EQT10 HAS TAGS ADDR IF XSIO CALL LDA EQT6,I RAL,SLA TEST "T" FIELD SSA SKIP IF "SYSTEM" REQUEST LDB EQT9 NORMAL CALL, EQT 9 & 10 HAVE TAGS LDA 1,I GET 1ST TAG CPA EQTX7,I MATCH REQUEST'S TIME-TAG 1? INB,RSS YES JMP ER.IR NO, TREAT AS ILLEGAL REQUEST LDA 1,I GET 2ND TIME-TAG ISZ EQTX7 CPA EQTX7,I MATCH REQUEST'S TIME-TAG 2? RSS YES, DO THE TRANSFER JMP ER.IR REJECT REQUEST * DTAGO LDA EQT12,I GET EQT12 AND BIT4 ISOLATE REMOTE'S MODE ALF,ALF ROTATE TO BIT 14 TO SET OUR MODE RAL,RAL RAL,ERA SET BIT 15 TO REFLECT DATA DIRECTION IOR EQT12,I INCLUSIVE OR IN EQT12 AND NBIT8 CLEAR DATA PENDING CONDITION STA EQT12,I JSB CLPAR CLEAR PARITY COUNTER LDB WDINT SET FOR POSSIBLE WRITE INTERRUPT SSA READ OR WRITE? JMP TRDT3 WRITE...DO NOT SET FOR DMA TRANSFER UNTIL READY JSB GTDMA SET UP DMA LDB RDINT GET READ INTERRUPT TRDT3 JSB STNW TELL OTHER SIDE TO "LET HER GO" * * ALL NORMAL EXITS FROM INITIATOR COME THRU HERE * IEXIT STC 0,C SET FOR RECEIVE MODE CLA GET A ZERO JMP IDON1 RETURN * * B303 OCT 303 BIT8 OCT 400 NBIT8 OCT 177377 UNKNI DEF IUNKN LSTNI DEF ILSTN RDINT DEF INTRD WDINT DEF INTWD WR1IT DEF ITWR1 BIT10 OCT 2000 BIT9 OCT 1000 * SKP * * * REQUEST AND DATA TRANSMISSION MODE * RQ.RD CLA,RSS SEND REQUEST AND READ DATA RQ.SD LDA BIT12 REQ AND SEND DATA - SET DATA WRITE FLAG l JSB DLCHK DO LENGTH CHECK IOR BIT13 SET REQUEST AND DATA MODE INTO STATUS * * HERE FOR STARTING OF A SEND REQUEST * SREQ1 IOR BIT15 SET FOR WRITING...BIT 15 IOR BIT10 MASK IN LISTEN ENABLED FLAG IOR MSTR STUFF IN MASTER REQUEST BIT STA EQT12,I SAVE IT AWAY LDA EQT7,I GET FIRST 2 WORDS OF REQUEST DLD A,I DST EQTX4,I AND PUT INTO EQT EXTENSION JSB CLPAR CLEAR PARITY COUNTER JSB SRC SEND REQUEST COMING LDB WR1IT JMP IEXIT DO A NORMAL CONTINUATION EXIT * BIT12 OCT 10000 BIT14 OCT 40000 * SKP * * HERE FOR RECEIVE OR TRANSMIT REQUEST ONLY * S.REQ CLA SEND REQUEST ONLY CALL JMP SREQ1 * R.REQ LDA BIT10 SET LISTEN FLAG..CURRENT STATUS OF DRIVER IOR MSTR STUFF IN MASTER REQUEST FLAG STA EQT12,I SAVE NEW STATUS JSB CLPAR CLEAR PARITY COUNTER LDB LNRCI GET READ REQ INTERRUPT JMP TRDT3 TELL OTHER SIDE TO CONTINUE * LNRCI DEF ILNRC * * ROUTINE TO CLEAR PARITY COUNTER * CLPAR NOP LDA PMSK GET MASK FOR PARITY COUNTER AND EQT12,I MASK OFF PARITY COUNT STA EQT12,I AND RESTORE EQT12 JMP CLPAR,I * * ROUTINE TO CHECK DATA LENGTH LEGALITY * DLCHK NOP LDB EQT8,I GET DATA BUFFER LENGTH SZB IS IT ZERO? JMP DLCHK,I NO - RETURN ON LEGAL LENGTH LDB B4 YES JMP ER.IR+1 TAKE ERROR EXIT * SKP * * SPECIAL DATA TRANSMISSION MODE * SP.DT JSB DLCHK CHECK DATA LENGTH LDA EQT12,I GET EQT 12 IOR BIT15 SET TRANSMIT MODE STA EQT12,I AND SAVE IT JSB CLPAR CLEAR PARITY COUNTER LDB DWDEF GET RETURN-POINTER ADDRESS. JSB SPECL GO TO START SPECIAL DMA TRANSMISSION. JMP IEXIT TAKE INITIATOR EXIT. * SP.EN CLE JSB PRIV DEALLOCATE DMA JSB CEXT2 AWAIT RESPJNLHONSE JSB TIMCK REENTERED, IS IT TIMEOUT? JMP LNRC2 YES JSB RDD.D GET SCE-1'S REPLY CPA RLW RETRY? RSS YES JMP REQDN NO, DONE WITH THIS RECORD LDB DWDEF JMP SPDMA RETRY * DWDEF DEF SP.EN * SPECL NOP ENTRY/EXIT: SPECIAL DMA START-UP LDA EQT7,I GET THE FIRST ELEMENT LDA A,I FROM THE CALLER'S DATA BUFFER. DST SPTMP SAVE FIRST WORD AND RETURN POINTER. ISZ EQT7,I ADVANCE BUFFER POINTER FOR DMA. LDB EQT8,I GET THE TRANSMISSION LENGTH. ADB M1 SUBTRACT ONE FOR FIRST WORD. STB EQT8,I SAVE DECREMENTED LENGTH FOR DMA. SZB ONE WORD TRANSMISSION? JSB GTDMA NO. PREPARE FOR DMA TRANSFER. DLD SPTMP GET FIRST DATA WORD & RETURN POINTER. JSB OUTPA OUTPUT IN RCV MODE--RESPONSE STARTS DMA. JMP SPECL,I RETURN: =RETURN-POINTER. * SPTMP OCT 0,0 TEMPORARY STORAGE. N SKP * * CONTINUATION SECTION * C.65 NOP JSB SETIO CONFIGURE I/O INSTRUCTIONS LDA EQT1,I GET EQT WORD 1 SZA IS DRIVER BUSY? JMP C.651 YES - GO ON LDB EQT11,I DRIVER WAS NOT BUSY CPB LSTNI WAS IT IN LISTEN MODE? JMP C.651 YES - THAT'S OK STA EQT15,I SPURIOUS INTERRUPT - KILL TIMEOUT JSB RDD.C CLEAR CARD JMP CEXT4 AND EXIT C.651 LDB EQT11,I GET BRANCH ADDRESS FOR ROUTINE SZB MAKE SURE IT IS NOT ZERO JMP B,I GO TO INTERRUPT PROCESSOR * SKP * * UNKNOWN INTERRUPTS COME HERE * WE'RE IN TROUBLE IF WE EVER GET HERE!!!!! * IUNKN JSB RDD.C CLEAR CARD BY READING IT LDA BIT6 SET SYSTEM FAILURE BIT STA EQT12,I INTO STATUS LDA B4 STA MODE SET UP MODE TO FAKE A CLEAR AND DOWN REQUEST JSB CNPRC CALL CONTROL REQUEST PROCESSOR CLB SET UP TO CLEAR EQT5 JMP CEND AND EXIT * SKP * * HERE FOR FIRST INTERRUPT WHEN CARD IN LISTEN MODE * ILSTN JSB CHECK FIND OUT WHAT THEY SENT US JMP ILSN4 TIME OUT...IGNORE JMP ILSN3 PARITY ERROR...TELL THEM TO RETRY JMP ILSN4 STOP...IGNORE * * IF WE GET THIS FAR...CHECK RETURN A REG WITH DATA WORD * SZA,RSS MAKE SURE A BROKEN LINE DIDN'T SNEAK IN JMP CHCK2 BROKEN LINE...TURN OFF CARD CPA RC REQUEST COMING? JMP ILSN1 YES...PROCESS AS A REQUEST COMING LDB EQT1,I GET EQT 1 WORD SZB,RSS WAS DRIVER BUSY? JMP ILSN4 NO - JUST IGNORE INTERRUPT ILSN6 JSB SSTOP SEND STOP...UNKNOWN WORD JMP ILSN7 & EXIT IN LISTEN MODE * ILSN1 LDA EQT12,I GET EQT 12 AND B1400 IS THERE EITHER REQUEST OR DATA PENDING? SZA,RSS JMP ILSN2 NO - CONTINUE ALF,ALF SLA,RSS IS IT REQUEST PENDING? JMP ILSN4 YES, IGNORE INTERRUPT LDA EQT12,I RP OR DP CONDITION IOR BIT7 SET TRANSACTION PENDING FLAG STA EQT12,I AND STORE IT BACK LDB SCODE PICK UP SELECT CODE BLF,BLF ROTATE TO UPPER BYTE ADB BIT14 SET IN DATA PENDING FLAG LDA EQTX4,I GET STREAM TYPE FROM PENDING REQUEST AND B377 ISOLATE STREAM TYPE ALF,ALF ROTATE TO UPPER BYTE ADA B2 SET 2 INTO LOWER BYTE JSB SBIT SET BREAK FLAG IN STREAM LIST JSB CGRN ILSN2 JSB SCHED GO AND SCHEDULE QUEUE OR WHOM EVER... JMP ILSN6 SEND A STOP IF QUEUE IS BUSY LDA EQT14,I GET TIMEOUT VALUE JMP *+3 SET IT UP AND EXIT ILSN3 JSB SRLW SEND RLW ILSN4 CLA CLEAR TIMEOUT STA EQT15,I JSB RDD.C CLEAR CARD BY READING IT ILSN7 LDB LSTNI SET FOR LISTEN MODE INTERRUPT JMP CEXIT AND EXIT * B6200 OCT 6200 B1400 OCT 1400 * SKP * * SUBROUTINE TO SCHEDULE INTERRUPT-HANDLING PROGRAM * SCHED NOP LDB EQTX6,I GET ID SEGMENT ADDRESS OF PROGRAM STB PROG SAVE ADDRESS ADB B17 GET TO STATUS LDA B,I GET STATUS AND B17 MASK OFF ALL BUT STATUS SZA BUSY? JMP SCHED,I YES...TELL OTHER SIDE TO RETRY ADB M5 GET TO B REG LDA EQT4 GET ADDRESS OF LU STA B,I SAVE ADDRESS JSB $LIST SCHEDULE PROGRAM OCT 101 PROG NOP LDA EQT12,I GET OLD STATUS AND B6200 MASK OFF ALL BUT LE, TP, AND MM IOR BIT9 SET IN REQUEST PENDING STA EQT12,I AND SAVE IT ISZ SCHED BUMP RETURN POINT JMP SCHED,I AND RETURN * SKP * ILNRA JSB STNW ACKNOWLEDGE REDUNDANT RC JSB CEXT2 AWAIT LENGTH * * HERE FOR LENGTH COMING INTERRUPT * ILNRC JSB CCHCK CHECK FOR TIME OUT,PARITY ERROR,STOP CPA RC CHECK FOR RC (PREV. SIM. REQUEST) JMP ILNRA ACKNOWLEJDGE IT LDB BIT5 GET ERROR CODE SSA,INA,RSS BUMP COUNT AND CHECK FOR POSITIVE JMP LNRC4 ILLEGAL LENGTH - SEND STOP ADA EQT8,I IS IT WITHIN RANGE? SSA JMP LNRC4 SEND STOP AND TERMINATE LDA TEMP2 GET LENGTH AGAIN CMA GET COUNT POSITIVE STA EQT8,I SAVE FOR DMA TRANSFER JSB STNW TELL OTHER SIDE TO CONTINUE JSB CEXT2 DO CONTINUATION EXIT...GIVE NEXT INTERRUPT ADDRESS * SKP * * HERE WHEN MODE INTERRUPT OCCURS * JSB CCHCK CHECK TO,PAR.,STOP RAL,CLE,ERA E REG CONTAINS DATA FLAG SZA DMA OPEN? LDA BIT4 NO...SET DMA SPECIAL IOR EQT12,I STUFF INTO EQT12 SEZ IS IT A REQUEST AND DATA? IOR BIT8 YES STA EQT12,I SAVE STATUS IMOD9 LDA EQT12,I GET PARITY COUNT AND BIT3 MASK ALL BUT PARITY ERROR FLAG SZA DONE IT MAX # OF TIMES? JMP LNRC3 YES...PARITY ERROR CPA EQT8,I COMPARE LENGTH JMP ERQ1 ZERO LENGTH TERMINATE JSB GTDMA NO...SET FOR DMA TRANSFER LDA EQT12,I GET PARITY COUNT AND B17 ISOLATE PARITY COUNTER SZA FIRST TIME? JMP IMOD2 NO LDA GDMAW GET DMA AVAILABLE WORD LDB EQT12,I GET EQT 12 FOR MODE BLF,BLF BLF,SLB TEST EQT12 BIT 4 LDA TNW OTHER SIDE DOESN'T HAVE DMA, SEND TNW JSB OUTPA SEND WORD JMP *+3 IMOD2 JSB SRLW SECOND TIME...RLW ISZ EQT12,I BUMP PARITY COUNT JSB CEXT2 DO CONTINUATION EXIT...SUPPLY NEXT INTERRUPT RETURN * SKP * * HERE ON REQUEST COMPLETE INTERRUPT * CLE CLEAR E REG FOR PRIV ROUTINE JSB PRIV DEALLOCATE DMA JSB CHECK CHECK DATA JMP LNRC2 TIME-OUT JMP IMOD9 PARITY ERROR - RETRY JMP LNRC5 STOP RECEIVED ERQ1 LDA EQT12,I GET CURRENT DRIVER STATUS AND MSK12 SAVE LSTEN, DATA PENDING, & DMA MODE STA EQT12,I SAVE STATUS LDA EQT7,I GET WORDS 1 AND 2 OF REQUEST DLD A,I EQTX4 EQU *+1 DST * AND PUT INTO EQT EXTENSION LDA EQT7,I GET REQUEST ADDRESS ADA D33 POINT TO TIME-TAGS DLD 0,I PICK THEM UP EQTX7 EQU *+1 DST * STUFF THEM IN EQT EXTENSION JSB STNW SEND TNW JSB CEXT2 WAIT IN RCV MODE JMP REXIT NOW CLEAR CARD & EXIT GDMAW OCT 67 D33 DEC 33 SKP * * HERE FOR START OF DATA TRANSMIT * INTWD JSB CCHCK JSB TNWCK MAKE SURE IT'S A TNW * * OTHER SIDE NOW READY TO RECEIVE DATA * IWD1 LDB DWDNI GET DATA WRITE INTERRUPT LDA EQT12,I GET MODE OF TRANSFER RAL TEST BIT 14 SSA DMA OPEN? JMP SPDMA NO...SET SPECIAL JSB GTDMA GET DMA FOR TRANSMITTING. JSB CEXTT YES...SET TO TRANSMIT MODE * * HERE FOR FINISHED TRANSMITTING DATA * IDWDN CLE CLEAR E REG JSB PRIV DEALLOCATE DMA JSB CEXT2 TAKE CONTINUATION EXIT...SET FOR DATA DONE * SKP * * HERE ON COMPLETION OF WRITE DATA * JSB CCHCK CPA RLW ERROR? JMP IWD1 TRY AGAIN JMP REQDN OK STATUS & TERMINAYE * DWDNI DEF IDWDN SKP * * HERE FOR COMPLETION OF READ DATA * INTRD CLE JSB PRIV DEALLOCATE DMA JSB CHECK CHECK DATA JMP LNRC2 TIMEOUT JMP IDR1 PARITY ERROR JMP LNRC5 STOP RECEIVED LDA EQT12,I MASK OFF ALL BUT LISTEN AND BIT10 STA EQT12,I SAVE NEW STATUS JSB STNW SEND TNW FOR SUCCESS JSB CEXTT WAIT IN TRANSMIT MODE REXIT JSB RDD.C CLEAR CARD JMP REQDN DO NORMAL COMPLETION * * HERE ON PARITY ERROR ...RETRANSMIT * IDR1 LDA EQT12,I GET PARITY COUNT AND BIT3 MASK OFF ALL BUT PARITY ERRO~R FLAG SZA IS THE FLAG SET? JMP LNRC3 YES...PARITY ERROR JSB GTDMA GET DMA LDB EQT12,I GET MODE WORD ISZ EQT12,I BUMP PARITY COUNT NOP IN CASE IT ROLLS OVER LDA TNW BLF,BLF BLF,SLB TEST MODE BIT LDA RLW NOT FIRST TIME, RLW JSB OUTPA SEND WORD JSB CEXT2 DO CONTINUATION EXIT JMP INTRD * SKP * * PROCESSOR TO HANDLE A STOP RECEIVED IN RESPONSE TO A RC * STPRC LDA BIT10 GET LISTEN ENABLED BIT LDB BIT4 PICK UP STOP RECEIVED BIT FOR EQT 5 JMP ITWR7 * ITWR3 LDA PRIMY GET PRIMARY FLAG SZA IS IT ZERO? JMP SNDRC+1 NO, PRIMARY NODE, AWAIT RESPONSE * ITWR4 JSB SCHED SECONDARY NODE - SCHEDULE QUEUE RSS JMP ITWR6 JSB SSTOP QUEUE BUSY, SEND STOP JSB CEXTT EXIT IN TRANSMIT MODE LDA BIT10 PICK UP LISTEN MODE BIT ITWR6 LDB B2 BIT 1 FOR EQT 5 ITWR7 IOR BIT5 SET IN SIMULTANEOUS REQUEST BIT STA EQT12,I AND PUT BACK INTO EQT12 JMP CEND AND RETURN TO USER * SKP * * HERE TO RETRY RC * SNDRC JSB SRC SEND REQUEST COMING (AGAIN) JSB CEXT2 AWAIT REPLY * * HERE FOR LENGTH WORD NEEDED INTERRUPT * ITWR1 JSB CHECK CHECK RECEIVED CHARACTER JMP SNDRC TIME-OUT, POSSIBLE RETRY JMP LNRC3 PARITY JMP STPRC STOP RECEIVED CPA RC WAS IT A REQUEST COMING? JMP ITWR3 YES, SIMULTANEOUS REQUEST CONDITION CPA RLW RETRANSMIT? JMP SNDRC YES, SEND RC AGAIN JSB TNWCK MAKE SURE IT WAS TNW * * OTHER SIDE IS NOW SCHEDULED AND HAS AN OUTSTANDING REQUEST * JSB CLPAR CLEAR RETRY COUNT LDA EQT8,I GET REQUEST BUFFER LENGTH CMA NEGATE COUNT JSB OUTPA SEND WORD JSB CEXT2 WAIT FOR REPLY * * HERE FOR READY TO SEND MODE IN REGISTER LDA #SBIT GET #SBIT ADDRESS SZA,RSS IS IT ZERO? JMP SBIT,I YES - JUST EXIT LDA STAT IT'S OK - RETRIEVE THE REGISTER JSB #SBIT,I CALL #SBIT ROUTINE IN #RSAX CPA MN4 WAS A MINUS 4 RETURNED? JMP SBIT,I YES - ENTRY IS GONE - RETURN SZA,RSS WAS A ZERO RETURNED? JMP SBIT,I YES - NORMAL RETURN LDA EQT12,I PICK UP EQT12 IOR BIT6 STUFF IN SYSTEM FAILURE BIT STA EQT12,I AND SAVE IT AWAY IFZ HLT 65B XIF JMP SBIT,I * SPC 2 CGRN NOP LDA EQTX1,I LDB $CGRN SZB JSB $CGRN,I JMP CGRN,I SKP * * SEND REQUEST COMING WITH 500 MSEC WAIT * SRC NOP LDA MD50 STA EQT15,I 500 MSEC TIMEOUT ISZ EQT12,I BUMP RETRY COUNT LDA EQT12,I NOW TEST IT RAR,RAR GIVE IT 3 TRIES SLA JMP LNRC2 FAILED 3 TIMES, GIVE TIMEOUT LDA RC JSB OUTPA SEND ANOTHER RC JMP SRC,I RETURN * MD50 DEC -50 * HERE FOR TIME OUT * LNRC2 LDB BIT3 JMP LNRC4 * * CHECK FOR TNW, TREAT AS PARITY IF NOT * TNWCK NOP CPA TNW JMP TNWCK,I RETURN ONLY IF A TNW * * HERE FOR PARITY ERROR * LNRC3 LDA BIT3 PARITY ERROR IOR EQT12,I SET BIT 3 IN EQT WORD 12 STA EQT12,I AND PUT IT BACK CLB SET EQT5 STATUS TO ALL ZEROS * * HERE TO SET ERROR,SEND STOP, AND TERMINATE * LNRC4 JSB SSTOP SEND STOP JSB STAT PUT STATUS INTO EQT 5 JSB CEXTT AND EXIT IN XMIT MODE JSB RDD.C CLEAR CARD BY READING IT JMP CEND+1 TERMINATE * * HERE IF STOP WAS RECEIVED * LNRC5 LDB BIT4 GET STATUS...STOP JMP CEND SKP * ROUTINE TO DO CHECKING OF INPUT DATA * WILL RETURN *+1 TIME OUT * *+2 PARITY ERROR * *+3 STOP RECEIVED * *+4 NORMAL RETURN...A REG CONTAINS DATA WORD * CHECK NOP JSB TIMCK GO CHECK FOR TIMEOUT JMP CHECK,I YES...DO TIME OUT RETURN ISZ CHECK GET PARITY ERROR RETURN * * CHECK FOR PARITY OR MISSED TRANSMISSION JSB RDD.D READ DATA AND STATUS FROM CARD STA TEMP2 SAVE DATA RBR,SLB SEE IF MISSED TRANSMISSION RSS YES...TELL OTHER SIDE TO DO IT AGAIN JMP RDD1 NO...ALL OK JSB SRLW RE-TRANSMIT LAST WORD LIA1 LIA 0 CLEAR CARD FOR NEXT ENTRY LDA TEMP2 GET DATA WORD AGAIN RDD1 RBL,CLE GET TO CORRECT POSITION CPB B7 IF ALL LOWER 3 BITS SET...PARITY ERROR CCE SET FOR PARITY ERROR RBL,ERB SET IN ERROR BIT SSB,RSS PARITY ERROR? JMP CHCK1 NO SZA BROKEN LINE? JMP CHECK,I NO...PARITY ERROR RETURN CHCK2 STA EQT12,I CLEAR LISTEN MODE...TURN OFF CARD LDB BIT7 SET FOR BROKEN LINE JMP CEND YES...TERMINATE CHCK1 ISZ CHECK SET FOR STOP INTERRUPT CPA STOP STOP? JMP CHECK,I YES...DO STOP RETURN ISZ CHECK JMP CHECK,I DO NONE OF THE ABOVE RETURN * * TIME OUT CHECK ROUTINE * RETURN *+1 TIME OUT OCCURED * *+2 NO TIME OUT * TIMCK NOP LDA EQT4,I GET TIME OUT WORD AND NBT11 CLEAR OFF BIT 11 CPA EQT4,I WAS IT ALREADY CLEAR? ISZ TIMCK YES STA EQT4,I SAVE WORD JMP TIMCK,I AND RETURN * BIT7 OCT 20.0 BIT4 OCT 20 MSK12 OCT 2420 B17 OCT 17 PMSK OCT 177760 BIT11 OCT 4000 NBT11 OCT 173777 TEMP2 NOP * * ROUTINE TO READ CARD DATA AND STATUS * RDD.D NOP LIA2 LIA 0 READ DATA WORD LIBC1 LIB 0,C READ STATUS WORD JMP RDD.D,I RETURN * * ROUTINE TO CLEAR CARD * RDD.C NOP CLCC2 CLC 0,C JSB RDD.D JMP RDD.C,I * * ROUTINE TO OUTPUT A WORD TO THE I/O CARD * OUTPA NOP OTA1 OTA 0 OUTPUT A JMP OUTPA,I RETURN * * ROUTINE TO PUT DIRECT CO-ROUTINE ADDRESS IN EQT 11 * ICHAS NOP RSS LDB B,I RBL,CLE,SLB,ERB JMP *-2 STB EQT11,I JMP ICHAS,I * * ROUTINE TO SET UP DMA * ASSUMES LENGTH IN EQT 8, ADDRESS IN EQT 7, * DIRECTION SIGN BIT EQT 12 * GTDMA NOP LDA BIT11 XOR CHAN CONVERT TO A STC 6,C COMMAND STA STCD2 SET FOR ACTIVATE DMA XOR B5004 CHANGE TO CLC 2 OR 3 STA CLCD1 XOR BIT11 CONVERT TO STC 0 COMMAND STA STCD1 XOR BIT6 CHANGE TO OTA 2 OR 3 STA OTAD2 STA OTAD3 XOR B4 CHANGE TO OTA 6 OR 7 STA OTAD1 * LDB EQT12,I GET STATUS CCE,SSB WRITE REQUEST? CLE YES. LDA EQT4,I FETCH SELECT CODE AND B77 SEZ,RSS OUTPUT? IOR BIT13 YES. ADD CLC ENABLE BIT OTAD1 OTA 0 OUTPUT CONTROL WORD 1 CLCD1 CLC 0 LDA EQT7,I FETCH DATA BUFFER ADDRESS ELA,RAR ADD INPUT/OUTPUT BIT OTAD2 OTA 0 OUTPUT CONTROL WORD 2 STCD1 STC 0 LDA EQT8,I FETCH DATA BUFFER LENGTH CMA,INA COMPLEMENT OTAD3 OTA 0 OUTPUT CONTROL WORD 3 CLF 0 DISABLE INTERRUPT SYSTEM STCD2 STC 0,C ACTIVATE DMA LDA DUMMY PRIVILEGED INTERRUPT SZA,RSS PRESENT? JMP GTDMA,I NO. RETURN CCE SET DMA CHANNEL ACTIVE FOR PRIV. DRIVERS JSB PRIV YES. |STF 0 ENABLE INTERRUPT SYSTEM JMP GTDMA,I RETURN * * SUBROUTINE TO TELL PRIVILEGED DRIVERS THAT I NEED DMA * PRIV NOP CHAN CLC 0,C THIS INSTRUCTION SET BY SETIO LDB CHAN LOAD B REG FOR CHANNEL NUMBER CHECK LDA INTBA DEPENDING UPON STATUS OR SLB E REG INA SET OR CLEAR LDB A,I DMA ACTIVE FLA ELB,RBR STB A,I JMP PRIV,I RETURN * BIT13 OCT 20000 B5004 OCT 5004 * * SUBROUTINE TO CONFIGURE I/O INSTRUCTIONS * SETIO NOP LDA EQT13,I GET ADDRESS OF EQT EXTENSION STA EQTX1 & SET-UP EXTENSION POINTERS INA STA EQTX2 INA STA EQTX3 INA STA EQTX4 INA STA EQTX5 INA STA EQTX6 INA STA EQTX7 LDA EQT4,I AND B77 ISOLATE SELECT CODE STA SCODE AND SAVE IT IOR CLCC CLC0,C COMMAND STA CLCC2 STA CLCC3 XOR BIT11 CONVERT TO STC 0,C COMMAND STA LSN.1 STA IEXIT STA CEXIT STA STCC1 XOR BIT9 CONVERT TO STC 0 COMMAND STA CEXT1 STA STRQ1 XOR BIT7 CONVERT TO LIA COMMAND STA LIA1 STA LIA2 XOR B5000 CONVERT TO LIB 0,C COMMAND STA LIBC1 XOR B5300 CONVERT TO OTA 0 COMMAND STA OTA1 LDB DCLCC GET CLC 6,C COMMAND LDA INTBA,I GET EQT1 ADDRESS RAL,CLE,ERA CLEAR SIGN BIT CPA EQT1 CHANNEL 6 OR 7 DMA ADB M1 CHANNEL 6 STB CHAN SAVE CONFIGURED ADDRESS JMP SETIO,I RETURN * * B5000 OCT 5000 B5300 OCT 5300 B4100 OCT 4100 B7 OCT 7 STOP OCT 7760 SEND STOP RLW OCT 7417 RETRANSMIT LAST WORD BIT6 OCT 100 SCODE NOP * EQTX1 NOP EQTX2 NOP EQTX3 NOP EQTX5 NOP EQTX6 NOP * #SBIT NOP SPECIAL STORAGE AREA - DO NOT REORDER! $CGRN NOP PRIMY NOP IFZ BSS 200 qNLHPATCH AREA FOR DEBUG *********** XIF * A EQU 0 B EQU 1 * BSS 0 SEE HOW BIG IT IS SKP * * DEFINE BASE PAGE LOCATIONS NEEDED * * * . EQU 1650B EQT1 EQU .+8 EQT4 EQU .+11 EQT5 EQU .+12 EQT6 EQU .+13 EQT7 EQU .+14 EQT8 EQU .+15 EQT9 EQU .+16 EQT10 EQU .+17 EQT11 EQU .+18 EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 INTBA EQU 1654B DUMMY EQU 1737B END 'N  91700-18101 1614 S 0122 DS1/B CCE MODULE: PLOS              H0101 OASMB,R,L,C HED PLOS 91700-16101 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM PLOS,2,30 91700-16101 REV A 760329 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ************************************************** * *PLOS PROGRAM LOAD SAVE FOR BASIC * *SOURCE PART # 91700-18101 REV A * *REL PART # 91700-16101 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 12-17-74 * *MODIFIED BY JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: DECEMBER 1975 * *************************************************** SPC 1 SUP SPC 2 * * PROGRAM TO DO LOADS AND SAVE ON UP TO * MAXN TERMINALS. WHERE MAXN IS THE NUMBER OF TERMINALS * WHICH CAN OPERATE AT ANY ONE TIME * REMEMBER EACH TERMINAL TAKE 145 WORDS!!! * CENTRAL PROGRAM WHEN SCHEDULED MUST BE * PASSED THE CLASS NUMBER * SPC 2 * DEFINE ENTRY POINTS SPC 2 * DEFINE EXTERNALS SPC 1 EXT EXEC,READF,POSNT,CLOSE,WRITF EXT OPEN,CREAT,D65SV EXT D65CL SPC 2 * DEFINE A AND B REG SPC 1 A EQU 0 B EQU 1 SKP * * PROGRAM STARTS HERE * PLOS LDA B,I GET CLASS NUMBER STA CLSNM SAVE CLASS NUMBER JMP PLOSS AND WAIT FOR FIRST USER * * WE SHOULD ONLY GO THROUGH THE ABOVE ONCE * SPC 1 PLOS0 BSS 0 HERE ON ALL OTHER CALLS PLOSS JSB EXEC DO A GET CALL...WAIT FOR SOMETHING DEF *+5 DEF D21 CODE FOR A GET CALL DEF CLSNM CLASS # DEF RBUF REQUEST BUFFER DEF D35  REQUEST BUFFER LENGTH * LDA RLU GET COMM. LU AND MSK1 KEEP ONLY LOW 6 BITS STA RLU * * * WHEN WE GET HERE SOMEONE WANTS SOMETHING * LDA DCBN GET DCB NUMBER..IF ZERO SZA IT IS A NEW REQUEST JMP PLOS1 NOT A NEW REQUEST LDA CALOC NEW REQUEST...SEE IF WE CAN HANDLE IT ADA MMAXS LDB M3 SET ERROR TO -3 ...CAN'T HANDLE IT SSA,RSS HANDLE REQUEST? JMP TERM NO...TELL THEM TRY LATER LDB M4 GET ERROR CODE IF LENGTH ERROR LDA BLEN GET LENGTH WORD ADA MBUFS SEE IF LARGER THAN BUFFER SSA,RSS JMP TERM YES...ERROR LDA LSFG GET LOAD-SAVE FLAG SSA LOAD OR SAVE LOAD=0,SAVE=1 JMP PSAV1 SAVE PSAV3 JSB OPN GO OPEN FILE JMP PLOS1 OK ON OPEN...TREAT AS STANDARD PSAV2 LDB M2 SET FOR NOT THERE JMP TERM AND TERMINATE * * HERE FOR SAVE * PSAV1 JSB OPN CHECK FOR TYPE 0 FILE RSS POSSIBLE JMP PSAV4 TRY TO CREATE IT LDA DCBN SEE IF TYPE 0 ADA D2 LDA A,I SZA TYPE ZERO? PSAV4 JSB CRET NO...TRY TO CREATE IT JMP PLOS1 OK..GO TO IT JSB DALOC CLOSE FILE IF OPEN JMP PSAV2 TERMINATE * * AT THIS POINT THE DCB IS DEFINED * THE FILE IS OPENED AND WE ARE READ TO DO * OUR THING. * PLOS1 LDA LSFG LOAD OR SAVE? SSA JMP PLOS2 SAVE JSB LBUF LOAD THE BUFFER FROM THE DISC STB STAT SAVE THE FILE STATUS JSB WREC SEND THE DATA ACROSS THE LINE JSB WRPLY SEND STATUS REPLY JMP PLOS0 AND TERMINATE AND WAIT SPC 1 PLOS2 JSB RREC READ THE DATA FOR SAVE CLB TELL THEM ALL WENT WELL STB STAT SAVE IT IN THE STATUS WORD JSB SBUF SAVE BUFFER IN FILE JSB WRPLY SEND REPLY JMP PL\OS0 GO WAIT FOR MORE SKP * * SUBROUTINE TO READ RECORDS FROM A FILE UNTIL * BUFFER IS FULL. * CALLING SEQUENCE * JSB LBUF * UPON RETURN...B REG= STATUS * STATUS= -1=EOF,O=BUFFER FULL * LBUF NOP LDA DBUFA GET DATA BUFFER ADDRESS STA TEMP1 SAVE AS CURRENT DATA ADDRESS INA GET TO FIRST DATA WORD STA LBUF1 SAVE FOR FILE WRITE COMMAND LDA BLEN GET MAX BUFFER SIZE ADA M1 MAKE SURE DON'T OVERWRITE BUFFER STA TEMP2 SAVE CURRENT BUFFER SIZE LBUFA JSB READF GO READ A RECORD DEF *+6 DEF DCBN,I DCB ADDRESS GOES HERE DEF FERR FILE STATUS AFTER READ LBUF1 NOP BUFFER ADDRESS GOES HERE DEF TEMP2 CURRENT MAX BUFFER LENGTH DEF TEMP3 ACTUAL SIZE OF RECORD LDA FERR GET FILE STATUS LDB TEMP3 GET LENGTH SSA,RSS EOF? JMP LBUFF NO CCB YES...SET TO -1 JMP LBUFG AND TERMINATE LBUFF CPB TEMP2 ACTUAL=REQUESTED LENGTH? CLB,RSS YES...SET THAT WE LOST SOMETHING SZB IF LENGTH NOT MATCH, IS IT A ZERO LN REC.? RSS NO...CONTINUE PROCESSING JMP LBUFA YES, ZERO LENGTH RECORD...IGNORE IT LBUFG STB TEMP1,I SET STATUS IN BUFFER SZB EOF OR BUFFER FULL? CPB M1 ? JMP LBUFB YES...EITHER BACKSPACE OR TERMINATE JSB LIMCK CHECK IF IN LIMITS JMP LBUFA NOT IN LIMITS...IGNORE LDB TEMP3 GET RECORD LENGTH AGAIN ADB LBUF1 GET ADDRESS OF NEXT RECORD TO READ STB TEMP1 SAVE ADDRESS INB GET TO FIRST DATA WORD STB LBUF1 SAVE AS CURRENT BUFFER ADDESS LDB TEMP3 GET LENGTH OF LAST READ CMB NEGATE AND SUBTRACT 1 (INCLUDE COUNT WORD) ADB TEMP2 SAVE AS NEW LENGTH STB TEMP2 SAVE NEW LENGTH SSB,RSS SHOULD NEVER GO NEGATIVE يJMP LBUFA BUT MAKE SURE ANYWAY * * AT THIS POINT THE BUFFER IS FULL OR AN * EOF HAS BEEN HIT...IN ANY CASE DON'T READ * ANY MORE NOW * LBUFB SZB EOF? JMP LBUFC YES...CLOSE FILE JSB POSNT NO...BACKSPACE ONE RECORD DEF *+4 DEF DCBN,I DEF FERR DEF M1 CLB SET THE B REG...BUFFER FULL JMP LBUF,I RETURN * * EOF HIT...CLOSE FILE * LBUFC JSB DALOC DEALOCATE THE DCB CCB SET B=-1...EOF JMP LBUF,I RETURN SKP * * SUBROUTINE TO MOVE BUFFER TO FILE * CALLING SEQUENCE * JSB SBUF * SBUF NOP LDA DBUFA GET DATA BUFFER ADDRESS STA TEMP1 SAVE BUFFER ADDRESS SBUFA LDA TEMP1,I GET LENGTH OF RECORD SZA,RSS DONE? JMP SBUF,I YES...RETURN INA,SZA,RSS EOF? JMP SBUFB YES...CLOSE FILE STA TEMP2 SAVE LENGTH FOR WRITE LDB C4040 GET TWO SPACES STB TEMP1,I MOVE SPACES INTO LENGTH WORD JSB WRITF WRITE THE RECORD DEF *+5 DEF DCBN,I DEF FERR ERROR STATUS DEF TEMP1,I BUFFER ADDRESS DEF TEMP2 LENGTH OF WRITE GOES HERE LDA TEMP2 GET LENGTH OF LAST WRITE ADA TEMP1 GET ADDRESS OF NEXT WRITE STA TEMP1 SAVE FOR NEXT WRITE JMP SBUFA CONTINUE WRITING ON FILE * * HERE WHEN EOF REACHED * SBUFB JSB DALOC DEALOCATE THE DCB JMP SBUF,I RETURN SKP * * SUBROUTINE TO ALOCATE DCB AND OPEN A FILE * CALLING SEQUENCE * JSB OPN * NORMAL RETURN * ERROR RETURN * OPN NOP JSB ALOC GO GET A DCB ADDRESS LDA DCBN GET DCB ADDRESS STA OPEN1 SAVE DCB ADDRESS JSB OPEN GO TRY TO OPEN FILE DEF *+7 OPEN1 NOP DCB ADDRESS HERE DEF FERR DEF PNAM NAME OF FILE DEF D0 DEF SC DEF LU LDA FERR ANY ERRORS? mSSA,RSS JMP OPN,I NO...RETURN JSB DALOC YES...DEALOCATE THE DCB ISZ OPN SET FOR ERROR RETURN JMP OPN,I ERROR RETURN SKP * * SUBROUTINE TO CREATE A FILE * CALLING SEQUENCE * JSB CRET * NORMAL RETURN * ERROR RETURN * CRET NOP JSB ALOC GO GET A DCB LDA DCBN GET THE DCB ADDRESS STA CRET1 SAVE DCB ADDRESS LDA TYPE GET TYPE WORD SZA,RSS IS IT ZERO? LDA D9 YES...DEFAULT TO TYPE 9 STA TYPE SAVE TYPE WORD LDA SIZE GET SIZE WORD SZA,RSS IS IT ZERO? LDA D40 YES...DEFAULT TO 40 RECORDS STA SIZE SAVE SIZE WORD JSB CREAT CREATE THE FILE DEF *+8 CRET1 NOP DEF FERR DEF PNAM NAME TO BE USED DEF SIZE DEF TYPE TYPE IS DEFINED AS TYPE 9 DEF SC SECURITY CODE DEF LU LDA FERR GET FILE STATUS SSA,RSS ANY ERRORS? JMP CRET,I NO...RETURN JSB DALOC DEALOCTE DCB ISZ CRET SET FOR ERROR RETURN JMP CRET,I RETURN...ERROR SKP * * SUBROUTINE TO ALOCATE A DCB * CALLING SEQUENCE * JSB ALOC * ALOC NOP * * BEFORE WE ALOCATE A DCB, CHECK IF ONE IS * ALREADY ALOCATED * LDA SATA GET ADDRESS OF ACTIVE SATELITE TABLE STA TEMP1 SAVE IN UP COUNTER LDA MMAXS GET MAX # OF ENTRIES INA STA TEMP2 SAVE IN DOWN COUNTER CLA SET UP FOR TABLE DISPLACEMENT STA TEMP3 LDA RLU GET REMOTE LU # ALOC4 CPA TEMP1,I IS THERE A MATCH JMP ALOC5 YES...DCB ALOCATED FOR TERMINAL ALREADY ISZ TEMP1 NO...GET NEXT ENTRY ISZ TEMP3 ISZ TEMP2 DONE? JMP ALOC4 NO...CONTINUE * * TERMINAL DOESN'T ALREADY HAVE A DCB...TRY TO FIND ONE * LDA DCBBA GET ADDRESS OF DCB AVAILABLE TABLE STA TEIMP1 SAVE IN TEMP LOCATION LDA MMAXS GET MAX # OF ENTRIES STA TEMP2 SAVE IN DOWN COUNTER CLA GET A ZERO STA TEMP3 SAVE AS MULT. FACTOR ALOC1 ISZ TEMP2 DONE? JMP ALOC3 NO...CONTINUE LDB M3 YES...NO ROOM JMP TERM TELL OTHER SIDE TO TRY LATER ALOC3 LDA TEMP1,I GET CONTENTS OF TABLE SZA,RSS IS THERE SOMETHING THERE? JMP ALOC2 NO...GOOD FOUND A HOME!!! ISZ TEMP1 GET NEXT ADDRESS ISZ TEMP3 INCREMENT MULT COUNT JMP ALOC1 CONTINUE * * HERE IF WE HAVE ROOM * ALOC2 LDA TEMP3 GET MULT FACTOR MPY D144 GET DISPLACEMENT FROM FIRST ADA DCBA ADDRESS OF AVAILABLE DCB STA TEMP1,I SAVE IN TABLE TO HOLD A PLACE STA DCBN SAVE IN PARMB ISZ CALOC INCREMENT # OF ACTIVE TERMINALS LDA TEMP3 GET DISPLACEMENT ADA SATA ADD FOR SATELLITE TABLE ENTRY LDB RLU GET REMOTE LU STB A,I SAVE PLACE IN TABLE JMP ALOC,I RETURN SPC 3 * * TERMINAL ALREADY HAS A DCB...CLOSE IT AND REUSE IT * ALOC5 LDA TEMP3 GET DISPLACEMENT ADA DCBBA GET TO DCB ADDRESS LDA A,I GET DCB ADDRESS STA DCBN SAVE DCB ADDRESS IN PARMB STA CLSAL SAVE FOR CLOSE JSB CLOSE CLOSE CURRENTLY OPEN DCB DEF *+3 CLSAL NOP DEF FERR JMP ALOC,I DCB IS NOW ALOCATED SKP * * SUBROUTINE TO DALOCATE A DCB * CALLING SEQUENCE * JSB DALOC * DALOC NOP LDA DCBBA GET ADDRES OF DCB ACTIVE TABLE STA TEMP1 SAVE IN TEMP LOCATION LDA MMAXS GET MAX # OF ENTRIES STA TEMP2 SAVE IN TEMP LOCATION LDA SATA GET ADDRESS OF SATELLITE OPEN TABLE STA TEMP3 DALC1 ISZ TEMP2 GONE THRU TABLE? JMP DALC2 NO....GOOD LDB M4 WE IN BIG TROUBLE...SHOULD NEVER GET HERE JMP TERM UNKNOWN DCRB DALC2 LDA TEMP1,I GET ADDRESS IN TABLE CPA DCBN THE SAME? JMP DALC3 YES...DEALOCATE IT ISZ TEMP3 GET TO NEXT SATELLITE ENTRY ISZ TEMP1 GET NEXT BUFFER ADDRESS JMP DALC1 GO TRY AGAIN * * HERE FOR MATCH CONDITION * DALC3 JSB CLOSE CLOSE FILE...IF OPEN DEF *+3 DEF DCBN,I DCB ADDRESS DEF DCBN IGNORE ERROR CLA GET A ZERO STA TEMP1,I CLEAR OUT TABLE LOCATION STA TEMP3,I CLEAR OUT SATELLITE ENTRY STA DCBN CLEAR OUT DCB POINTER LDA CALOC GET CURRENT # OF ACTIVE TERMINALS ADA M1 DECREASE IT BY 1 STA CALOC SAVE AS CURRENT # OF ACTIVE JMP DALOC,I RETURN SKP * * SUBROUTINE TO SEND DATA TO TERMINAL * CALLING SEQUENCE * JSB WREC * WREC NOP * LDA RLU IOR MSK2 DATA ONLY STA IMODE * JSB D65CL SEND DATA CALL DEF *+7 DEF IRWW WRITE DEF IMODE DEF DBUF DEF BLEN DEF RBUF+33 PASS TIME-TAGS DEF RBUF+34 * JMP BAD ERROR RETURN JMP WREC,I RETURN SPC 4 * * ROUTINE TO READ DATA FROM A TERMINAL * CALLING SEQUENCE * JSB RREC * RREC NOP * LDA RLU IOR MSK2 STA IMODE * JSB D65CL READ DATA DEF *+7 DEF IRWR DEF IMODE DEF DBUF DEF BLEN LENGTH DEF RBUF+33 PASS TIME-TAGS DEF RBUF+34 * JMP BAD ERROR RETURN JMP RREC,I RETURN SPC 3 BAD JSB CMER JMP PLOS0 SKP * * SUBROUTINE TO DO LIMIT CHECKING * CALLING SEQUENCE * JSB LIMCK * OUT OF RANGE RETURN * IN RANGE RETURN * B REG=BUFFER LENGTH ON ENTRY * LIMCK NOP LDA LBUF1 GET STARTING BUFFER ADDRESS CLE,ELA CONVERT TO BYTE ADDRESS STA LMCKA SAVE AS STARTING BYTE ADDRESS CLE,ELB COg.NVERT LENGTH TO BYTE LENGTH CMB,INB NEGATE LENGTH STB LMCKC SAVE IN DOWN COUNTER LDA ULIM GET UPPER LIMIT SZA,RSS ANY LIMITS? JMP INRNG NO...ALL LINES IN RANGE CLA GET A ZERO STA LMCKB CLEAR BINARY SUM...LINE # LMCK1 LDB LMCKA GET BYTE ADDRESS ISZ LMCKA GET NEXT BYTE ADDRESS ISZ LMCKC OUT OF BUFFER? RSS NO JMP LIMCK,I YES...TREAT AS OUT OF RANGE JSB ABYTE GET A CHARACTER CPA C40 IS IT A SPACE? JMP LMCK1 YES...IGNORE SPACES STA B MOVE CHAR TO B REG ADB MC60 ADD TO -60B ADA MC72 ADD TO -72B SSA OUT OF RANGE? SSB TO LOW? JMP CKRNG LAST NUMERIC...CHECK RANGE LDA LMCKB GET PARTICAL SUM STB LMCKB SAVE CURRENT VALUE MPY D10 MOVE OVER A PLACE FOR NEXT CHAR ADA LMCKB ADD IN CURRENT NUMBER STA LMCKB SAVE AS PARTICAL JMP LMCK1 GET NEXT CHAR SPC 2 * AT THIS POINT WE HAVE BINARY LINE NUMBER SPC 1 SPC 1 CKRNG LDA LMCKB GET LINE NUMBER CMA,INA CONVERT TO NEGATIVE VALUE STA B GET IT IN B REG ADA M1 ADD 1 FOR CHECKING LOWER LIMIT ADA LLIM ADD IN LOWER LIMIT...+..OUT OF RANGE ADB ULIM ADD IN UPLIM...-..OUT OF RANGE SSA SSB JMP LIMCK,I OUT OF RANGE INRNG ISZ LIMCK IN RANGE...IN RANGE RETURN JMP LIMCK,I SPC 2 LMCKA NOP LMCKB NOP LMCKC NOP * * SUBROUTINE TO SEND A REPLY TO THE TERMINAL * CALLING SEQUENCE * JSB WRPLY * B REG= STATUS * WRPLY NOP LDA RBUF SET IN REPLY BIT IOR BIT14 STA RBUF LDB D35 GET FRIENDLY REPLY SIZE(35WDS) ALF POSITION FRIENDLY BIT(#11) TO SIGN. SSA,RSS IF REPLY GOING TO AN ALIEN SATELLITE, LDB D21 MAX. RBEPLY LENGTH IS 21 WORDS. STB RBUFL CONFIGURE THE REPLY LENGTH. JSB D65SV SEND REPLY DEF *+7 DEF IRWW DEF RLU REQ ONLY DEF RBUF DEF RBUFL LENGTH DEF DUMMY DEF DUMMY JSB CMER ERROR RETURN * JMP WRPLY,I RETURN SPC 4 * * HERE TO TERMINATE ON AN ERROR CONDITION * B REG=STATUS * TERM STB STAT SAVE STATUS JSB D65CL TELL OTHER SIDE, NO DATA DEF *+7 DEF ICR SEND STOP DEF RLU DEF DUMMY DEF DUMMY DEF DUMMY DEF DUMMY * JSB CMER ERROR RETURN JSB WRPLY SEND REPLY...REASON FOR STOP JMP PLOS0 WAIT FOR SOMEONE ELSE SPC 3 * * SUBROUTINE TO GET A CHARACTER * CALLING SEQUENCE * JSB ABYTE * B REG= BYTE ADDRESS....UPON RETURN A REG=CHAR * ABYTE NOP CLE,ERB CONVERT TO WORD ADDRESS LDA B,I GET CHARACTER SEZ,RSS UPPER HALF? ALF,ALF YES AND B377 MASK OFF UPPER HALF ELB,CLE GET BYTE ADDRESS AGAIN JMP ABYTE,I RETURN SPC 3 CMER NOP DST ERVAL JSB EXEC DEF *+5 DEF D2 DEF D1 DEF ERMS DEF ERML * JMP CMER,I SPC 3 ERMS ASC 9,PLOS : COMM. ERROR ERVAL BSS 2 ERML DEC 11 SKP * * TEMP VALUES,CONSTANTS,BUFFERS, WHAT EVER * MAXN EQU 2 MAX # OF OPEN TERMINALS BUFS EQU 512 SIZE OF DATA BUFFER SPC 1 CLSNM NOP CLASS NUMBER B377 OCT 377 BIT14 OCT 40000 D21 DEC 21 D1 DEC 1 D2 DEC 2 D9 DEC 9 D10 DEC 10 D35 DEC 35 D40 DEC 40 D144 DEC 144 MC60 OCT -60 MC72 OCT -72 C40 OCT 40 C4040 ASC 1, M1 DEC -1 M2 DEC -2 M3 DEC -3 M4 DEC -4 MMAXS ABS 0-MAXN-1 MAX # OF TERMINALS + 1 MBUFS ABS 0-BUFS-1 DATA BUFFER SIZE CALOC OCT 0 CURRENT # OF ACTIVE DCB'S TEMP1 NOP TEMP2 NOP TEMP3 NOP <:6 D0 OCT 0 DBUFA DEF DBUF RBUFL NOP REPLY LENGTH: 35WD-FRIEND/21WD-ALIEN. DCBBA DEF DCCB DCBA DEF DCBF SATA DEF SAT IRWW OCT 100002 IRWR OCT 100001 DUMMY OCT 0 MSK1 OCT 77 MSK2 OCT 300 ICR OCT 100003 IMODE NOP SPC 2 * * HERE WE DEFINE THE PRMB * RBUF NOP STREAM ID DCBN NOP DCB ADDRESS LSFG NOP LOAD-SAVE FLAG,OVERIDE FLAG FERR NOP FILE MANAGER STATUS STAT NOP STATUS PNAM NOP PROGRAM NAME BSS 2 SC NOP SECURITY CODE LU NOP LOGICAL UNIT TYPE NOP FILE TYPE SIZE NOP FILE SIZE BLEN NOP BUFFER LENGTH LLIM NOP LOWER LIMIT ULIM NOP UPPER LIMIT BSS 9 NOT USED RLU NOP REMOTE LU BSS 10 SPC 2 * * DEFINE SATELLITE OPEN TABLE * SAT REP MAXN NOP SPC 2 * DEFINE DCB TABLE DCCB BSS 0 REP MAXN NOP SPC 2 * DEFINE DCB AREA DCBF BSS 0 REP MAXN BSS 144 SPC 2 * DEFINE DATA BUFFER DBUF BSS 512 END EQU * END PLOS R<  91700-18102 1633 S 0222 DS1/B CCE MODULE REMAT             H0102 6ASMB,R,L,C HED REMAT 91700-16102 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM REMAT,3,80 91700-16102 REV.A 760812 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ************************************************ * *REMAT OPERATOR INTERFACE PROGRAM FOR DS-1 * *SOURCE PART # 91700-18102 REV A * *REL PART # 91700-16102 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 12-27-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: OCT.11, 1975 * ************************************************** * * RTE PROGRAM TO PROVIDE OPERATOR ACCESS * TO THE CENTRAL STATION FOR VARIOUS CONTROL FUNCTIONS. * TO THE SATELLITE STATION FOR VARIOUS CONTROL FUNCTIONS. * * SUP ENT REMAT * EXT EXEC EXT OPEN,READF,CLOSE,POSNT EXT CREAT,WRITF EXT RNRQ,PURGE EXT DEXEC,$LIBR,$LIBX EXT $PARS,DMESS,$CVT3 EXT DMESG,REIO,RMPAR EXT #ST04,D65MS,CNUMD,.DFER IFN EXT DBUG XIF * A EQU 0 B EQU 1 * * INITIALIZE TRANSFER STACK. * REMAT JSB RMPAR GET PRAMS DEF *+2 DEF P1 SAVE IN TEMP AREA LDB *-1 GET ADDRESS OF TEMP AREA STB TEMP SAVE ADDR OF SCHEDULE PARAMS. SPC 1 IFN DEBUG OPTION LDA B,I GET PRAM CPA D55 DO THEY WANT DEBUG? RSS YES JMP REMC1 NO JSB DBUG DEF *+1 JSB EXEC DEF *+4 DEF B6 DEF B0 DEF B1 JMP REMAT AND TRY AGAIN XIF SPC 1 REMC1 JSB EXEC SET SWAP ONLY WHAT IS NEEDED DEF *+3 DEF D22 DEF B2 LDA STKHD RESET STACK POINTER. STA P.STK CLA,INA SET FIRST STACK ENTRY STA P.STK,I FOR LOGICAL UNIT 1 (DEFAULT). * LDA TEMP,I CHECK IF P1 = ASCII PARAM. AND HB377 SZA,RSS JMP STR NO. MUST BE INPUT LU. * * FETCH SCHEDULE PARAMETERS (FL,NA,ME,SEVERITY,LIST). * DLD P1+1 FILL BLANKS AFTER THE FILE NAME SZA,RSS IF THE NAME IS SHORTER THAN 3 WORDS LDA DBBLK SZB,RSS LDB DBBLK DST P1+1 REPLACE LDA A.$TR GENERATE "$TR,FLNAME" IN BUFFER. STA INBUF LDA A.TR1 STA INBUF+1 LDA TEMP,I STA INBUF+2 ISZ TEMP LDA TEMP,I STA INBUF+3 ISZ TEMP LDA TEMP,I STA INBUF+4 ISZ TEMP * LDA B5 SET COUNT. STA INCNT * LDA TEMP,I SET UP DUMMY SCHEDULE PARAMS. STA ALTBK+3 SEVERITY CODE. ISZ TEMP LDA TEMP,I STA ALTBK+2 LIST LU. * LDA DFALT POINT TO DUMMY PARAMS. STA TEMP * STR STA TRFLG SET/CLEAR FLAG FOR QUERY SECTION. * * FETCH SCHEDULE PARAMETERS (LU,LOG,LIST,SEVERITY CODE). * LDA TEMP,I GET LU OF INPUT DEVICE. SZA,RSS JMP STAT IF NONE, USE DEFAULT. CPA B1 IGNORE IF = 1. JMP STAT * LDB P.STK PUT SPECIFIED LU INTO ADB B4 TRANSFER STACK. STB P.STK STA P.STK,I * STAT LDA P.STK,I JSB EQTYP CHECK EQ. TYPE OF INPUT LU. STA LUTYP * ISZ TEMP LDA TEMP,I GET LU OF LOG DEVICE. SZA JMP SVLOG * DEFLT LDB LUTYP CLA,INA EITHER LU 1 OR SZB,RSS LDA P.STK,I INPUT LU IF TTY DEVICE. SVLOG STA LOGLU * ISZ TEMP LDA TEMP,I GET LU OF LIST DEVICE, SZA,RSS LDA B6 OR USE DEFAULT =`C 6. STA LSTLU * ISZ TEMP LDA TEMP,I SAVE SEVERITY CODE. STA SEVER * LDA TRFLG IF SCHEDULED WITH FILE NAME, SZA ALREADY HAVE TR SIMULATED. JMP CHK$ * * DISPLAY PROMPT CHARACTER (IF TTY DEVICE). * CONTROL RETURNS HERE WHEN REQUEST PROCESSING COMPLETES. * QUERY LDA P.STK,I CHECK WHETHER CURRENT INPUT STA TEMP STA LUTYP IS FROM A TTY TYPE DEVICE. AND HB377 NON ZERO IF FILE NAME, ELSE LU. SZA JMP REMRD REMOTE FILE. * JSB LCALS SET FOR LOCAL ONLY LDA TEMP JSB EQTYP LOCAL LU: CHECK TYPE. STA LUTYP SZA JMP LOCRD LOCAL LU NOT TTY DEVICE. * JSB REIO DISPLAY PROMPT ON TTY DEVICE. DEF *+5 DEF IRWW DEF LOGLU DEF PROMP DEF B1 JMP ERPRN * LDA LOGLU SET ECHO BIT. IOR B400 STA TEMP * * INPUT OPERATOR REQUEST FROM CURRENT DEVICE OR FILE. * LOCRD JSB REIO LOCAL SATELLITE LU. DEF *+5 DEF IRWR DEF TEMP DEF INBUF DEF D40 JMP ERPRN * STA TEMP SAVE STATUS WORD. STB INCNT SAVE WORD COUNT. JSB LCALS SET FOR LOCAL JSB EOFCK CHECK FOR END OF FILE. JMP TRANS GOT IT. JMP ECHO GO ECHO IF NECCESSARY. * REMRD JSB READF CENTRAL STATION FILE. DEF *+6 (OPENED WHEN FIRST TRANSFER DEF IDCB WAS PERFORMED) DEF IERR DEF INBUF DEF D40 DEF INCNT ACTUAL WORD COUNT. * JSB ERCHK CHECK FOR ERRORS. * LDA INCNT IF EOF, GENERATE TR REQUEST. INA,SZA JMP BUMP TRANS LDA A.$TR STA INBUF LDA A.$TR+1 STA INBUF+1 LDA B2 STA INCNT JMP ECHO * BUMP LDA P.STK ADA B3 ISZ A,I BUMP RECORD COUNT. * * ECHO THE REQUEST IF NOT INPUT FROM TTY DEVICE. * ECHO LDA LUTYP SZA,RSܬS JMP CKCNT IT IS A TTY DEVICE. * LDA SEVER INHIBIT ECHO IF CPA B1 SEVERITY CODE = 1. JMP CHK$ * JSB REIO NOT TTY: ECHO. DEF *+5 DEF IRWW DEF LOGLU DEF INBUF DEF INCNT JMP ERPRN * CHK$ LDA INBUF FIRST CHARACTER MUST AND HB377 BE A "$". CPA AS.$ RSS JMP OPER * LDA INBUF BLANK OUT THE "$" SIGN. AND B377 IOR BLANK STA INBUF * CKCNT LDB INCNT IGNORE REQUEST IF NULL. RBL MAKE CHARACTER COUNT. SZB,RSS JMP QUERY * * PARSE THE OPERATOR REQUEST. * LDA BUFAD (A) = BUFAD, (B) = INCNT. JSB $LIBR TURN OFF INTERUPTS NOP JSB $PARS DEF PRAMS PARAMETER BUFFER ADDRESS. JSB $LIBX TURN THEM BACK ON DEF *+1 DEF *+1 * JMP M0000 CHECK IF PROCESSING NEEDED * * SEND CENTRAL RTE COMMANDS. * OTHER LDA INCNT CONVERT LENGTH TO BYTES RAL STA INCNT * * HERE FOR SENDING MESSAGES WILL EITHER SEND TO * CENTRAL OR SATILATE, DEPENDING UPON CONTENTS * OF A REG. 0, CENTRAL, NON ZERO TERMINAL * JSB DMESS SEND COMMAND. DEF *+4 DEF MODE DESINATION CODE DEF INBUF ASCII COMMAND. DEF INCNT COUNT (+POSITIVE BYTES) * SZA,RSS ANY RESPONSE MESSAGE? JMP QUERY NO CPB MD1 IF = -1, JMP DMERR THEN GO TO REPORT A ERROR. STA TEMP SAVE COUNT * JSB REIO DISPLAY REPLY MESSAGE. DEF *+5 DEF IRWW DEF LOGLU DEF INBUF DEF TEMP JMP ERPRN * JMP QUERY * * CHECK THE OPERATOR REQUEST CODE AGAINST THE LEGAL * REQUEST CODES AND JUMP TO THE PROPER PROCESSOR. * * TO ADD NEW REQUEST ONE MERELY: * A. ADDS ASCII OPERATION CODE TO TABLE "LDOPC". * B. ADDS PROCESSOR START ADDRESS TO TABLE %"LDJMP". * C. ADDS PROCESSOR CODING TO PROCESS THE REQUEST. * M0000 LDB OP FETCH OPERATION CODE. STB OPP SET STOP FLAG. LDA LDOPC SET OPERATION TABLE POINTER. STA TEMP1 LDA LDJMP SET PROCESSOR JUMP ADDRESS. STA TEMP2 * M0030 CPB TEMP1,I COMPARE WITH TABLE VALUE. JMP TEMP2,I COMPARES. GO DO IT. * ISZ TEMP1 KEEP LOOKING. ISZ TEMP2 JMP M0030 * LDOPC DEF *+1 OPERATION CODE TABLE ADDRESS. * ASC 1,DU ASC 1,EX ASC 1,ST ASC 1,SW ASC 1,TE ASC 1,TR ASC 1,LO ASC 1,PL ASC 1,RP ASC 1,BT ASC 1,SL ASC 1,SO OPP NOP OP CODE FOR CURRENT REQ. * LDJMP DEF *+1,I JMP ADDRESS FOR EACH OP CODE. DEF M0400 DU REQUEST. DEF M0500 EX REQUEST. DEF M0900 ST REQUEST. DEF M0990 SW REQUEST. DEF M1000 TE REQUEST. DEF M1200 TR REQUEST. DEF M1400 LO REQUEST DEF M1500 PL REQUEST DEF OPER RP TCE/5 REQUEST ILLEGAL DEF M1600 BT...BASIC TRAP REQUEST DEF M1700 SL...SLAVE LIST ROUTINE DEF M1800 SO...SLAVE OFF ROUTINE DEF OTHER NOT SPECIAL JUST SEND IT * OPER LDA D10 INPUT ERROR: 010 OPERS STA IERR JSB ERCHK WON'T RETURN. * DMERR DLD INBUF GET THE ASCII ERROR CODES, JMP ERPRN AND GO TO PRINT THE ERROR. * HED REMAT: DU PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * DU,FLNAME,LU,SECURITY,LABEL * * DUMP CENTRAL FILE ON SATELLITE LOGICAL INIT. * M0400 LDB CP1 ERROR IF NO FILE NAME. JSB ASCHK LDB CP2 ERROR IF NO LU. JSB INTCK * LDA P2 TEST FOR PT PUNCH. JSB EQTYP CPA B2 RSS JMP M0405 * LDA B1000 GENERATE LEADER. IOR P2 STA TEMP * JSB DEXEC DEF *+4 DEF SDILU DEF B3I oDEF TEMP * JMP ERPRN LINE ERROR * * OPEN THE CENTRAL FILE. * M0405 JSB OPEN OPEN THE FILE. DEF *+7 DEF UDCB DEF IERR DEF P1 FILE NAME. DEF B0 OPEN OPTIONS. DEF P3 SECURITY CODE. DEF P4 LABEL. * LDA IERR CHECK FOR ERRORS IF IERR NEG. SSA JSB ERCHK LDA OPNFL SET UDCB OPEN FLAG. ELA,CLE,ERA IOR HIBIT STA OPNFL * * READ A RECORD FROM CENTRAL FILE. * M0410 JSB READF READ. DEF *+6 DEF UDCB DEF IERR DEF INBUF DEF D128 DEF INCNT XMSN LOG. * JSB ERCHK CHECK FOR ERRORS. * LDA INCNT CHECK FOR EOF. INA SZA,RSS JMP M0420 GOT IT. GO PROCESS. * * * OUTPUT THE RECORD ON SATELLITE LOGICAL INIT. * JSB DEXEC DEF *+6 DEF SDILU DEF B2I DEF P2 LU. DEF INBUF DEF INCNT * JMP ERPRN LINE ERROR * JMP M0410 GO GET NEXT RECORD. * * PROCESS END OF FILE CONDITION. * M0420 LDA P2 GET LOGICAL UNIT. JSB EQTYP STA B EQUIPMENT TYPE. * LDA B100 SET DEFAULT TO M.T. DEVICE. CPB B2 XOR B1100 PUNCHED TAPE - TRAILER. CPB D10 IOR B1100 LINE PRINTER - PAGE EJECT. IOR P2 INSERT LOGICAL UNIT. STA TEMP * JSB DEXEC PERFORM I/O CONTROL. DEF *+5 DEF SDILU DEF B3I DEF TEMP FORMATTED CONTROL WORD. DEF MD1 USED ONLY FOR LP. * JMP ERPRN LINE ERROR * JMP M0950 GO CLOSE FILE. HED REMAT: EX PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * EX PROCESSOR * * TERMINATE THE OPERATOR INTERFACE PROGRAM. * M0500 JSB REIO DISPLAY TERMINATION MESSAGE DEF *+5 ON LOG DEVICE. DEF B2 DEF LOGLU DEF TRMSG DEF B6 * JSB CLSFL CLOSE ROPEN FILES. * JSB EXEC EXIT. DEF *+2 DEF B6 * TRMSG ASC 6, $END REMAT HED REMAT: ST PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * ST,LU,FLNAME,SECURITY,LABEL,TYPE,#BLOCKS,RECSIZE * * STORE FROM SATELLITE LU ONTO CENTRAL DISC FILE. * M0900 LDB CP2 ERROR IF NO FILE NAME. JSB ASCHK * LDA B3 DEFAULT FILE TYPE TO 3. LDB P5 SZB,RSS STA P5 * LDA D10 DEFAULT # BLOCKS TO 10. LDB P6 SZB,RSS STA P6 * LDB CP1 ERROR IF NO LU. JSB INTCK * * CREATE THE CENTRAL DISC FILE. * JSB CREAT CREATE FILE. DEF *+8 DEF UDCB DEF IERR DEF P2 FILE NAME. DEF P6 # BLOCKS. DEF P5 FILE TYPE. DEF P3 SECURITY CODE. DEF P4 LABEL. * LDA IERR CHECK FOR ERRORS IF IERR NEG. SSA JSB ERCHK LDA OPNFL SET UDCB OPEN FLAG. ELA,CLE,ERA IOR HIBIT STA OPNFL * * READ INPUT FROM SATELLITE LOGICAL UNIT. * LDA P1 DETERMINE DEVICE TYPE. JSB EQTYP STA LUTYP SAVE DEVICE TYPE. SZA IF TTY, JMP M0910 LDA P1 SET ECHO BIT. IOR B400 STA P1 * M0910 LDA LUTYP IF DEVICE IS A TTY, SZA DISPLAY INPUT PROMPT CHAR. JMP M0920 * JSB DEXEC IT IS. DISPLAY PROMPT, BECAUSE DEF *+6 OF PERCEPTIBLE DELAY BETWEEN DEF SDILU DEF B2I RECORDS. DEF B1 DEF IPRMP ASCII SLASH, SPACE. DEF MD3 * JMP ERPRN LINE ERROR * M0920 JSB DEXEC READ THE INPUT RECORD. DEF *+6 DEF SDILU DEF B1I DEF P1 LOGICAL UNIT. DEF INBUF DEF D128 * JMP ERPRN LINE ERROR * STA TEMP SAVE STATUS WORD. STB INCNT SAVE WORD COUNT. * * CHECK FOR INPUT END OF FILE. * JSB EOFCK JMP M0950 GOT IT. LDA INCNT IGNORE NULL NON-CARD INPUT. SZA,RSS JMP M0910 * * WRITE THE RECORD ON CENTRAL DISC FILE. * JSB WRITF DEF *+5 DEF UDCB DEF IERR DEF INBUF DEF INCNT * LDA IERR CHECK FOR ERRORS. SSA,RSS JMP M0910 NONE. GO READ NEXT RECORD. * JSB PURGE ERROR. PURGE FILE. DEF *+6 DEF UDCB DEF TEMP DEF P2 FILE NAME. DEF P3 SECURITY. DEF P4 LABEL. * LDA OPNFL OUTPUT ERROR MESSAGE. ELA,CLE,ERA STA OPNFL JSB ERCHK * * END OF FILE ON INPUT. * M0950 JSB CLOSE CLOSE THE CENTRAL FILE. DEF *+3 DEF UDCB DEF IERR * LDA OPNFL CLEAR UDCB OPEN FLAG. ELA,CLE,ERA STA OPNFL * JMP QUERY HED REMAT: SW PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * SW,N * * CHANGE DESTINATION OF REMAT OPERATOR REQUESTS. * DESTINATION IS SATELLITE (N=LU), OR THE CENTRAL STATION RTE (N=0). * M0990 LDA CP1 SEE IF VALUE SUPPLIED SZA IF NOT SUPPLIED, PRINT CURRENT VALUE JMP M0991 SUPPLIED, SAVE IT JSB CNUMD CONVERT LU TO DEC DEF *+3 DEF MODE DEF P3 SAVE IN TEMP LOCATION LDA P3+2 GET LAST TWO CHAR STA SWMG1 SAVE FOR PRINT OUT JSB REIO GO PRINT OUT MESSAGE DEF *+5 DEF IRWW DEF LOGLU DEF SWBUF DEF B3 6 CHARS JMP ERPRN JMP QUERY AND RETURN TO USER M0991 LDA P1 SZA,RSS IF THIS IS A LOCAL REFERENCE, JMP M0992 GO TO SET IT UP. JSB LCALS PREPARE NEXT CALL FOR LOCAL REFERENCE. LDA P1 GET THE USER-SPECIFIED LU NUMBER. JSB EQTYP GO TO GET THE EQUIPMENT TYPE-CODE. STA B SAVE THE TYPE-CODE, TEMPORARILY. LDA D56 PREPARE FOR POSSIBLE BAD PARAM. ERROR. CPR$640B B65 IF THE USER'S LU IS LINKED TO DVR65, RSS SKIP TO SET NEW DESTINATION; ELSE, JMP OPERS REPORT BAD PARAMETER ERROR! LDA P1 GET THE DESTINATION LU NUMBER. * M0992 STA MODE 0=LOCAL RTE, N=SATELLITE-LINK LU NO. JMP QUERY * MODE NOP SPC 1 SWBUF ASC 2,SW= SWMG1 ASC 1, HED REMAT: TE PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * TE,-ASCII MESSAGE- PROCESSOR. * * SEND A MESSAGE TO THE CENTRAL STATION OPERATOR. * M1000 LDB CP1 SZB,RSS JMP OPER ERROR 10 IF NO MESSAGE. * CLB FIND THE COMMA IN INBUF. LDA BUFAD STA TEMP * M1010 LDA TEMP,I GET NEXT WORD. AND HB377 ALF,ALF CPA COM JMP M1020 COMMA IN LEFT BYTE. * LDA TEMP,I AND B377 CPA COM JMP M1030 COMMA IN RIGHT BYTE. * ISZ TEMP BUMP TO NEXT WORD. INB COUNT WORDS SKIPPED. JMP M1010 LOOP. * M1020 LDA TEMP,I LEFT. CLEAR COMMA. AND B377 STA TEMP,I JMP M1040 * M1030 ISZ TEMP RIGHT. BUMP TO NEXT WORD. INB * M1040 CMB,INB ADJUST WORD COUNT. ADB INCNT STB INCNT * LDA MODE GET THE COMMUNICATION LU IOR BIT15 SET THE NO-ABORT BIT STA IMODE SAVE FOR CALL TO DMESG * JSB DMESG SEND THE MESSAGE. DEF *+4 DEF IMODE DEF TEMP,I ADDRESS. DEF INCNT LENGTH. * JMP OPER ERROR RETURN * JMP QUERY SPC 3 IMODE NOP BIT15 OCT 100000 S6 HED REMAT: TR PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * TR,XXXXXX PROCESSOR. * * TRANSFER CONTROL TO LOCAL LU OR REMOTE FILE. * M1200 LDA P.STK,I IF CURRENT INPUT IS FROM A AND HB377 CENTRAL FILE, CLOSE IT. SZA,RSS JMP M1210 * JSB CLOSE DEF *+3 DEF IDCB DEF IERR * LDA OPNFL ERA,CLE,ELA CLEAR IDCB OPEN FLAG. STA OPNFL * M1210 LDA P1 GET PARAM 1. SZA,RSS IF NOT SPECIFIED, CCA SIMULATE "TR,-1". * SSA,RSS NEGATIVE INTEGER? JMP M1220 NO. * * BACK UP THROUGH TRANSFER STACK. * LDB P.STK TOP OF STACK? BKUP CPB STKHD JMP M0500 YES. SIMULATE "EX" REQUEST. ADB MD4 NO. BACK UP 1 ENTRY. INA,SZA JMP BKUP LOOP TILL DONE. STB P.STK SET NEW STACK ADDRESS. JMP M1250 GO CHECK FOR CENTRAL FILE. * * ADD NEW CONTROL TO THE TRANSFER STACK. * M1220 LDA P.STK BUMP TO NEXT ENTRY. ADA B4 STA P.STK CPA STKEN RSS JMP M1230 * LDA D13 STACK OVERFLOW. ERROR 013. JMP OPERS * M1230 LDB P1 STORE LU OR FILE NAME. STB A,I INA LDB P1+1 STB A,I INA LDB P1+2 STB A,I INA CLB,INB SET RECORD NUMBER TO 1. STB A,I * * IF CENTRAL FILE, OPEN AND OPTIONALLY POSITION. * M1250 LDA P.STK,I AND HB377 SZA,RSS JMP QUERY LOCAL LU. GO GET NEXT REQUEST. * JSB OPEN OPEN THE FILE. DEF *+4 DEF IDCB DEF IERR DEF P.STK,I * LDA IERR PROCESS ERRORS ONLY IF SSA IERR IS NEGATIVE. JSB ERCHK ISZ OPNFL SET OPEN FLAG. * LDA P.STK POSITIONING REQUIRED? ADA B3 LDB A,I CPB B1 (REC. CNT MORE THAN 1?) JMP QUERY NO. STB TEMP YES. * JSB POSNT POSIWTION TO NEXT RECORD. DEF *+5 DEF IDCB DEF IERR DEF TEMP NUR GREATER THAN ZERO. DEF TEMP ABSOLUTE RECORD NUMBER. * JSB ERCHK CHECK FOR ERRORS. JMP QUERY * * TRANSFER STACK. * * FOR EACH ENTRY, WORD 1 = INTEGER LU OR * FIRST 2 FNAME CHAR. * WORD 2,3 = REST OF FNAME. * WORD 4 = NEXT RECORD NUMBER. * P.STK NOP STACK POINTER. STKHD DEF *+1 * BSS 32 8 ENTRIES. * STKEN DEF * STACK LWA+1. HED REMAT: LO PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * LO PROCESSOR * * LO,FILENAME [,TERMINAL LU] * M1400 LDA CP1 GET TYPE FLAG PRAM #1 CPA B2 IS IT ASC ? RSS YES JMP OPER NO...ERROR..FILENAME MISSING LDA CP2 GET TERMINAL LU LDB MODE GET CURRENT TERMINAL LU SZB,RSS IS THERE A REMOTE LU DEFINED SZA OR DID THEY SUPPLY ONE? RSS YES JMP OPER NO...ERROR CCE,SZA OVERRIDE CURRENT TERMINAL? LDB P2 YES STB P2 SAVE TERMINAL LU LDA LOGLU GET LOG DEVICE ALF,ALF SET TO HIGH ORDER RAL,ERA SET SIGN BIT...FORCE LOAD IOR B1 SET IN LOAD FLAG STA LPWD1 SET IN LOG DEVICE DLD P1 GET FIRST 4 CHAR OF NAME DST NAM LDA P1+2 STA NAM+2 CLA STA LPWD2 LIST LU CLEARED JMP LOPL1 GO SEND PARMB HED REMAT: PL PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * PL REQUEST * * PL[,LIST LU][,TERMINAL LU] * M1500 LDA CP1 GET TYPE FLAG PRAM #1 LDB LSTLU GET DEFAULT LIST LU CPA B1 IS FIRST PRAM SUPPLIED? LDB P1 YES...GET LIST LU STB LPWD2 SAVE LIST LU LDA LOGLU GET LOGLU ALF,ALF SET FOR HIGH HALF OF WORD CCE RAL,ERA SET IN SIGN BIT  STA LPWD1 SAVE FOR LOG DEVICE LDA CP2 SEE IF TERMINAL LU SUPPLIED LDB MODE SZB,RSS CHECK IF ONE OR THE OTHER SUPPLIED CPA B1 RSS YES...AT LEAST ONE SUPPLIED JMP OPER NO...ERROR CPA B1 OVERRIDE? LDB P2 YES...GET SPECIFIED LU STB P2 SET IN REMOTE LU SPC 2 * * HERE WE SEND PARMB TO DO A FORCE DOWN LOAD * CONTROL WILL BE RETURN WHEN APLDR IS COMPLETE * LOPL1 LDA D8 SET IN STREAM TYPE STA LOPMB JSB D65MS SEND REQUEST DEF *+7 DEF IRWW DEF P2 DEF LOPMB DEF LOLNG DEF B0 DEF B0 JMP ERPRN FOR ERROR CONDITION JSB .DFER MOVE SPACE IN PROG NAME DEF APNAM DEF SFILL LDA APLER GET ERROR CODE SZA,RSS IF ZERO, NO ERROR JMP *+3 ADA D59 ERROR CODES START AT -60 CMA,INA MAKE ERROR CODES POSITIVE MPY B3 GET TO ADDRESS ADA ERMGA LDB A,I GET FLAG WORD INA GET TO ERROR MESSAGE STB LOCLN SAVE IN TEMP LOCATION DLD A,I GET ERROR CODE DST ERAPL SAVE ERROR CODE LDA LOCLN GET ERROR FLAG SZA,RSS MOVE NAME? JMP LOPL3 NO JSB .DFER YES DEF APNAM DEF APERM LOPL3 JSB LCALS CHECK IF ECHO SSAGE LDA LOGLU JSB EQTYP SZA ECHO DEVICE? JMP QUERY NO JSB REIO YES DEF *+5 DEF IRWW DEF LOGLU DEF APLMG DEF D10 JMP ERPRN JMP QUERY AND RETURN * IRWR OCT 100001 IRWW OCT 100002 * SPC 2 * * THIS IS THE PARMB FOR FORCED * DOWN LOAD. DO NOT CHANGE ORDER * !!! * D8 DEC 8 D59 DEC 59 LOPMB NOP LOCLN NOP BSS 3 LPWD1 NOP LPWD2 NOP APLER BSS 0 NAM NOP APERM BSS 0 BSS 27 LOLNG DEC 35 SPC 1 ER]MGA DEF *+1 OCT 0 DON'T PRINT NAME ASC 2,DONE OCT 1 ASC 2,REM OCT 1 ASC 2,DUP OCT 1 ASC 2,NO OCT 1 ASC 2,OF OCT 1 ASC 2,FMP OCT 0 ASC 2,0BIS 00 BLANK ID SEGMENTS OCT 0 ASC 2,CKSM OCT 0 ASC 2,COM OCT 0 ASC 2,MEM OCT 0 ASC 2,ID? OCT 0 ASC 2,BUSY SPC 1 APLMG ASC 3,APLDR: ASC 1, ERAPL ASC 2, ASC 1, APNAM ASC 3, SFILL ASC 3, HED REMAT: BT PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 SPC 1 * * BASIC TRAP REQUEST * BT[RAP],XX WHERE XX=TRAP # * M1600 LDA CP1 SEE IF NUMERIC CPA B1 IS IT RSS YES JMP OPER NO...ERROR LDA P1 GET VALUE TO BE CONVERTED ADA D100 ADD VALUE TO FORCE LEADING ZEROS STA P1 JSB CNUMD CONVERT TO DEC. DEF *+3 DEF P1 DEF P3 OUTPUT ASC IN TEMP LOCATION LDA P3+2 GET LOWER 2 CHAR STA TRP# SAVE AS TRAP # LDA SDILU GET LU OF REMOTE TERMINAL LDB CP2 SEE IF THEY SUPPLIED ONE? SZB ONE SUPPLIED? LDA P2 YES...GET VALUE STA P2 JSB DEXEC SEND SCHEDULE TRAP CALL DEF *+4 DEF P2 SDILU DEF D10I DEF TRAP JMP ERPRN LINE ERROR JMP QUERY AND RETURN SPC 1 TRAP ASC 2,TRAP TRP# ASC 1, D100 DEC 100 HED REMAT: SL PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * SLAVE PROGRAM LIST REQUEST * SLIST (,LIST LU) * M1700 LDA CP1 SEE IF LIST LU SUPPLIED LDB LSTLU GET DEFAULT CPA B1 IF TYPE=1 USE SUPPLIED RSS YES...DON'T USE DEFAULT STB P1 SAVE FOR PRINTING LDA C4040 GET SPACE WORD STA CP3 SAVE FOR NAME MOVE JSB EXEC GET SOME DISK SPACE DEF *+6 DEF GETRK  DEF B1 DEF SLPMB DEF DSKLU DEF P7 JMP ERPRN JSB RNRQ GET A RN # DEF *+4 DEF RNALC DEF RNNUM RN # GOES HERE DEF P7 TEMP LOCATION JMP ERPRN JSB RNRQ SET RN # ... TO BE CLEARED BY PTPM DEF *+4 DEF RNGLK DEF RNNUM DEF P7 JMP ERPRN LDA #ST04+1 STA P7 SAVE FOR WRITE JSB EXEC SEND PROGRAM LIST REQ TO PTPM DEF *+8 DEF CLSWR DEF B0 DEF SLPMB DEF B5 DEF P7 DEF P7 DEF P7 JMP ERPRN JSB RNRQ WAIT FOR PTPM TO CLEAR RN# DEF *+4 DEF RNGCL DEF RNNUM DEF P7 JMP ERPRN JSB RNRQ CLEAR OUT RN # DEF *+4 DEF RNRLS DE-ALOCATE RN # DEF RNNUM DEF P7 JMP ERPRN JSB EXEC READ THE DISK DEF *+7 DEF IRWR DEF DSKLU DEF INBUF READ BUFFER...120 WORDS LONG DEF D128 DEF SLPMB DEF B0 JMP ERPRN JSB EXEC RELEASE THE DISK DEF *+5 DEF RLTRK DEF B1 DEF SLPMB DEF DSKLU JMP ERPRN JSB REIO PRINT HEADER MESSAGE DEF *+5 DEF IRWW DEF P1 DEF HDMSG DEF D10 JMP ERPRN LDA BUFAD GET READ BUFFER ADDRESS STA RTEMP SAVE FOR COUNT RDLOP LDB A,I GET VALUE SZB,RSS IS THERE ONE THERE? JMP RNEXT NO CPB MD1 DONE? JMP RDONE YES JSB .DFER MOVE NAME TO PRINT AREA DEF P3 RTEMP NOP JSB REIO WRITE OUT LINE DEF *+5 DEF IRWW DEF P1 WRITE LU DEF CP3 DEF B4 4 WORDS JMP ERPRN RNEXT LDA RTEMP ADA B4 GET TO NEXT ENTRY STA RTEMP JMP RDLOP GET NEXT ENTRY RDONE JSB LCALS SEE IF IT IS THE LINE-PRINTER LDA P1 GET LU  JSB EQTYP GET EQT TYPE CPA D10 LP? RSS YES JMP QUERY NO LDA P1 IOR B1100 OR IN CONTROL WORD STA P1 JSB EXEC DO A PAGE EJECT DEF *+4 DEF CNTRL DEF P1 DEF MD1 JMP ERPRN JMP QUERY AND RETURN FOR NEXT ENTRY * SPC 1 SLPMB NOP TRACK ADDRESS DSKLU NOP DISK LU OCT 5 FLAG...TELL PTPM SPECIAL REQ OCT 0 SECTOR 0 RNNUM NOP RESOURCE NUMBER SPC 1 C4040 ASC 1, RNALC OCT 040020 ALLOCATE GLOBAL RN--NO ABORT RNGLK OCT 040002 LOCK GLOBAL RN--NO ABORT RNGCL OCT 040006 CLEAR GLOBAL RN--NO ABORT RNRLS OCT 040040 RELEASE GLOBAL RN--NO ABORT CNTRL OCT 100003 GETRK OCT 100017 RLTRK OCT 100020 * HED REMAT: SO REQUEST PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * SO REQUEST * SO,PNAME OR SO...TURN OFF ALL SLAVE PTOP PROGRAMS * M1800 LDA #ST04+1 GET CLASS BUFFER ADDRESS STA P7 JSB .DFER MOVE NAME TO PRAMB DEF POPMB+5 DEF P1 ADDRESS OF THE 1ST PARAMETER (PGM NAME) JSB EXEC WRITE TO PTPM CLASS DEF *+8 DEF CLSWR DEF B0 DEF POPMB DEF D8 DEF P7 DEF P7 DEF P7 JMP ERPRN JMP QUERY AND RETURN SPC 1 POPMB NOP NOP OCT 100012 SPECIAL PTPM REQUEST NOP NOP BSS 3 NAME GOES HERE HED REMAT: TC PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 HED REMAT: SUBROUTINE SECTION * (C) HEWLETT-PACKARD CO. 1976 * * SUBROUTINE TO TEST FOR END OF FILE ON LOCAL DEVICES. * * TEMP = EQT STATUS WORD. * INCNT = EQT WORD COUNT. * LUTYP = EQUIPMENT TYPE. * JSB EOFCK * EOF RETURN * NORMAL RETURN * EOFCK NOP CLE LDA LUTYP EOF DEPENDS ON DEVICE. SZA,RSS JMP EOF1 TTY. CPA B1 JMP EOF1 PHOTOREADER. CPA D9 JMP EO F4 CARD READER. CPA D13 JMP EOF4 MARK SENSE. CCE DEFAULT TO MAG TAPE. * EOF1 LDA TEMP GET STATUS WORD. ALF,ALF SEZ,RSS IF E=1, CHECK BIT 7. JMP EOF2 SSA JMP EOF3 EOF2 RAL,RAL CHECK BIT 5. SSA,RSS JMP EOF5 NO EOF. * EOF3 LDA LUTYP GET LU TYPE SZA IS IT A TTY ? JMP EOFND NO, CONTINUE JSB DEXEC YES, GENERATE A CR. DEF *+6 DEF SDILU DEF B2I WRITE DEF P1 LU OF TTY DEF CR DEF B1 * JMP ERPRN LINE ERROR JMP EOFND * EOF4 LDA INCNT CHECK FOR BLANK CARD. SZA EOF5 ISZ EOFCK EOFND JSB LCALC CLEAR IF LOCAL JMP EOFCK,I * * SUBROUTINE TO CHECK FOR ASCII PARAMETER. * ASCHK NOP (B) = CODE WORD. SZB,RSS JMP OTHER IF NOT THERE OR ADB MD2 SZB JMP OTHER NOT ASC LET RTE GIVE US ERROR JMP ASCHK,I * * SUBROUTINE TO CHECK INTEGER PARAMETERS. * INTCK NOP (B) = CODE WORD. LDA D55 SZB,RSS JMP OPERS ERROR 55 IF MISSING. LDA D56 ADB MD1 SZB JMP OPERS ERROR 56 IF NOT NUMERIC. JMP INTCK,I * * SUBROUTINE TO FIND EQUIPMENT TYPE OF AN LU. (IF EQUIPMENT- * TYPE CODE = <05> AND UNIT# = 0, CHANGE TO <00> FOR OUR PURPOSES.) * RETURN WITH (A) = EQUIPMENT-TYPE CODE. * EQTYP NOP (A) = LU. STA TEMP1 JSB DEXEC DEF *+5 DEF SDILU DEF D13I DEF TEMP1 DEF TEMP2 EQT5 RETURNED HERE * JMP ERPRN LINE ERROR * JSB LCALC CLEAR IF LOCAL CHECK * LDA TEMP2 ALF,ALF AND B77 CPA B5 DVR05? RSS YES JMP EQTYP,I NO, RETURN. A=EQUIP-TYPE LDA DRT GET PTR TO DEV REF TABLE ADA TEMP1 ADD LU # ADA MD1 MINUS ONE. LDA A,I GE;oT DRT ENTRY FOR THIS LU AND HB174 ISOLATE UNIT # SZA IF UNIT # = 0, RETURN LDA B5 WITH A = 0, JMP EQTYP,I ELSE A = 5. SPC 1 * * SUBROUTINE TO FORCE TO LOCAL * CALLING SEQUENCE * JSB LCALS * NORMAL RETURN * LCALS NOP LDA SDILU GET DESTINATION LU STA LCAL1 SAVE IN TEMP LOCATION CLA SET FOR LOCAL STA SDILU JMP LCALS,I AND RETURN SPC 1 LCAL1 NOP SPC 1 * * SUBROUTINE TO RESET DESTINATION LU * IF IT WAS FORCED TO ZERO * CALLING SEQUENCE * JSB LCALC * NORMAL RETURN * LCALC NOP LDB LCAL1 GET FLAG SZB,RSS IF ZERO...DON'T RESET JMP LCALC,I AND RETURN STB SDILU SAVE FOR LATTER USE CLB STB LCAL1 CLEAR FLAG JMP LCALC,I AND RETURN SPC 1 * * SUBROUTINE TO PROCESS ERRORS IN RFA CALLS. * ERCHK NOP LDA IERR CAN BE POS. OR NEG. SZA,RSS JMP ERCHK,I NO ERROR. * LDB BLANK MAKE POSITIVE, SET SIGN WORD. SSA,RSS JMP ERCK1 LDB MINUS CMA,INA ERCK1 STB EMSG+3 * CCE DECIMAL CONVERSION. JSB $LIBR TURN OFF INTERUPTS NOP JSB $CVT3 CONVERT TO ASCII. STA B * ADB B2 STORE LAST 2 DIGITS LDA B,I IN MESSAGE BUFFER. IOR LB20 LEADING BLANK TO ASCII 0. STA EMSG+4 ADB MD1 LDA B,I SET UP SIGN AND AND B377 FIRST DIGIT. IOR EMSG+3 IOR B20 LEADING BLANK TO ASCII 0. STA EMSG+3 STORE IN MESSAGE BUFFER. JSB $LIBX TURN INTERUPTS BACK ON DEF *+1 DEF STKRS * ERPRN DST EMSG+3 * STKRS LDA STKHD RESET STACK POINTER. STA P.STK * JSB EXEC DISPLAY ERROR MESSAGE. DEF *+5 DEF B2 DEF LOGLU DEF EMSG DEF B5 * JSB CLSFL CLOSE aFILES CURRENTLY OPEN. * JSB LCALS SET FOR LOCAL EQT CHECK LDA LOGLU GET LU JSB EQTYP GET EQT TYPE SZA,RSS TTY DEVICE? JMP QUERY * LDA A.$TR GENERATE $TR,1 STA INBUF LDA A.TR1 STA INBUF+1 LDA A.TR1+1 STA INBUF+2 LDA B3 STA INCNT JMP ECHO * EMSG ASC 5,REMAT * * SUBROUTINE TO CLOSE THE COMMAND FILE OPEN TO IDCB, * OR USER FILE OPEN TO UDCB IF EITHER OR BOTH ARE OPEN. * CLSFL NOP LDA OPNFL SZA,RSS JMP CLSFL,I BOTH DCB'S ARE CLOSED. * SLA,RSS JMP CLOS2 IDCB NOT OPEN. * JSB CLOSE CLOSE THE COMMAND FILE. DEF *+3 DEF IDCB DEF IERR * LDA OPNFL CLOS2 SSA,RSS JMP CLOS3 UDCB NOT OPEN. * JSB CLOSE CLOSE THE USER FILE. DEF *+3 DEF UDCB DEF IERR * CLOS3 CLA STA OPNFL CLEAR OPEN FLAGS. JMP CLSFL,I RETURN. HED REMAT: CONSTANTS AND STORAGE * (C) HEWLETT-PACKARD CO. 1976 * PARAMETER STORAGE AREA. * SDILU EQU MODE DRT EQU 1652B DEV. REF. TABLE POINTER PRAMS NOP FLAG WORD. OP BSS 3 OPERATION CODE. CP1 NOP FLAG WORD. P1 BSS 3 PARAM 1 (UP TO 6 CHARACTERS). CP2 NOP P2 BSS 3 CP3 NOP P3 BSS 3 CP4 NOP P4 BSS 3 CP5 NOP P5 BSS 3 CP6 NOP P6 BSS 3 CP7 NOP P7 BSS 3 BSS 1 NEED FOR PARSE..# OF PRAMS * B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B20 OCT 20 B65 OCT 65 B77 OCT 77 B100 OCT 100 B377 OCT 377 B400 OCT 400 B1000 OCT 1000 B1100 OCT 1100 CLASN NOP CLSWR OCT 100024 LB20 OCT 10000 HB377 OCT 177400 HB174 OCT 174000 HIBIT OCT 100000 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD4 DEC -4 D9 DEC 9 D10 DEC 10 D13 DEC 13 D22 DEC 22 D40 DEC 40 D55 DEC 55 D56 DEC 56 D128 DEC 128 B1I OC[<:6T 100001 B2I OCT 100002 B3I OCT 100003 D10I OCT 100012 D13I OCT 100015 OPNFL NOP BIT 1 = IDCB; BIT 15 = UDCB. TEMP NOP TEMP1 NOP TEMP2 NOP INCNT NOP # WORDS IN INPUT REQUEST. LUTYP NOP EQ. TYPE OF INPUT DEVICE. LOGLU OCT 1 LU OF LOG DEVICE. LSTLU NOP LU OF LIST DEVICE. SEVER NOP SEVERITY CODE. A.$TR ASC 2,$TR A.TR1 ASC 2,R,1 COM OCT 54 CR OCT 6400 AS.$ OCT 022000 IERR NOP PROMP ASC 1,$_ PROMPT CHARACTER. IPRMP ASC 2,/ _ BLANK OCT 020000 DBBLK OCT 20040 MINUS OCT 026400 DFALT DEF ALTBK ALTBK OCT 0,0,0,0 TRFLG NOP HDMSG ASC 10, ACTIVE SLAVE PROGS BUFAD DEF INBUF INBUF BSS 128 BUFFER. IDCB BSS 144 UDCB BSS 144 * SIZE EQU * * END REMAT mS<  91700-18103 1613 S 0122 DS1/B CCE MODULE: NPRGL              H0101 FASMB,R,L,C HED NPRGL 91700-16103 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM NPRGL,2,30 91700-16103 REV A 760323 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * *********************************************** * *NPRGL PROGRAM TO DO ABSOLUTE DOWN LOADING * *SOURCE PART # 91700-18003 REV B * *REL PART # 91700-16003 REV B * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 8-28-74 * *MODIFIED BY: CHUCK WHELAN * *DATE MODIFIED: MARCH 1976 * ************************************************ SPC 1 SUP SPC 2 * * PROGRAM TO DO DOWN LINK LOADING ON UP TO * MAXN TERMINALS. WHERE MAXN IS THE NUMBER OF TERMINALS * WHICH CAN OPERATE AT ANY ONE TIME * REMEMBER EACH TERMINAL TAKES 173 WORDS!!! * SPC 2 * DEFINE ENTRY POINTS SPC 2 * DEFINE EXTERNALS SPC 1 EXT EXEC,READF,POSNT,CLOSE EXT OPEN EXT D65SV IFN EXT DBUG XIF SPC 2 * DEFINE A AND B REG SPC 1 A EQU 0 B EQU 1 SPC 3 * * STATUS AND ERROR WORD COMMENTS * *STATUS WORD ERROR WORD *0 =NEW REQ DON'T CARE *1 =DATA COMMING STARTING ADDRESS OF RECORD *2 =ID SEG COMMING CONTENTS OF LOCATION 2 *3 =NO ID SEQ 0=NO STARTING ADDRESS OR LOCATION 2 *-2 FMG ERROR FMG ERROR CODE *-3 BUSY 0...TRY LATTER *-4 LOST DCB -103...IN BIG TROUBLE * SKP * * PROGRAM STARTS HERE * PROGL LDA B,I GET CLASS NUMBER STA CLSNM SAVE CLASS NUMBER IFN SPC 1 SZA DO THEY WANT DEBUG JMP PRGL1 JSB DBUG DEF *+1 JSB EXEC DEF *+4 DEF D6 DEF D0 DEF D1 JMP PROGL XIF SPC 2 PLOS0 BSS 0 PRGL1 JSB EXEC DO A GET CALL...WAIT FOR SOMETHING DEF *+5 DEF D21 CODE FOR A GET CALL DEF CLSNM CLASS # DEF RBUF REQUEST BUFFER DEF D35 REQUEST BUFFER LENGTH * LDA RLU GET COMM. LU AND MSK1 KEEP ONLY LOW 6 BITS STA RLU * * WHEN WE GET HERE SOMEONE WANTS SOMETHING * LDA DCBN GET DCB NUMBER..IF ZERO SZA IT IS A NEW REQUEST JMP PLOS2 NOT A NEW REQUEST * JSB ALOC ALLOCATE A DCB * JSB OPEN OPEN IT DEF *+7 DEF DCBN,I DEF FERR DEF PNAM FILE NAME DEF D0 DEF SC DEF LU * LDA FERR ANY ERRORS? CPA D7 MUST BE FILE TYPE 7 CLB,RSS OK JMP ERRM2 DO ERROR RETURN STB DNFLG CLEAR OUT DONE FLAG * * AT THIS POINT THE DCB IS DEFINED * THE FILE IS OPENED AND WE ARE READY TO DO * OUR THING. * PLOS2 LDA DNFLG SEE IF WE ARE DONE SZA DONE? JMP DONE YES JSB LBUF NO...LOAD UP BUFFER STB STAT SAVE THE FILE STATUS JSB STLN SET LENGTH OF REPLY PARMB LDA D1 SET STATUS MORE COMMING STA STAT SZB DONE? ISZ DNFLG YES...SET DONE FLAG FOR NEXT TIME LDA SADD GET STARTING ADDRESS STA STRTA SET IN STARTING ADDRESS LDA DLEN GET LENGTH OF DATA BUFFER STA LNGH SZA,RSS IF LENGTH IS ZERO...DONE JMP DONE ZERO...DONE LDA RBUF GET STREAM TYPE IOR BIT14 STA RBUF SAVE REPLY STREAM TYPE LDA RLU GET COMM. LU IOR B120 SET SEND REQ. AND DATA & Z BIT STA CNWD *  * JSB D65SV SEND DATA TO TERMINAL DEF *+7 DEF IRWW WRITE DEF CNWD DEF RBUF DEF RBUFL DEF DBUF DATA BUFFER DEF DLEN DATA LENGTH * JSB CLOS ERROR, CLOSE & DEALLOCATE DCB JMP PLOS0 TERMINATE AND WAIT * * SUBROUTINE TO CLOSE FILE & DEALLOCATE DCB * CLOS NOP JSB CLOSE CLOSE FILE DEF *+3 DEF DCBN,I DEF FERR JSB DALOC DE-ALLOCATE THE DCB JMP CLOS,I RETURN SKP * * ROUTINE TO LOAD THE BUFFER FROM A FILE * CALLING SEQUENCE * JSB LBUF READ THE BUFFER * UPON RETURN B REG WILL CONTAIN THE STATUS * LBUF NOP CLA STA CADD CLEAR CURRENT ENDING ADDRESS STA SADD CLEAR STARTING ADDRESS STA DLEN CLEAR OUT LENGTH STA FILER SET FOR NO FILE ERRORS * LBUF0 JSB READF READ A RECORD DEF *+6 DEF DCBN,I DEF FERR DEF RDBUF DEF D60 DEF TEMP1 LDA TEMP1 GET LENGTH CPA M1 DONE? JMP LBUFB YES * * DO CHECKSUM CHECKING * LDA RLEN GET LENGTH ALF,ALF CMA NEGATE...INCLUDE STARTING ADDRESS AS LENGTH STA CKLEN LDA STADA GET STARTING ADDRESS CLB CLEAR OUT FOR LOOP LBUF5 ADB A,I DO CHECKSUM INA ISZ CKLEN DONE? JMP LBUF5 NO CPB A,I DO THEY MATCH JMP LBUF6 YES ISZ FILER NO...SET FOR ERROR JMP LBUFB AND TERMINATE * LBUF6 LDA STADD GET BUFFER ADDRESS CPA D2 IS IT PART OF THE ID SEGMENT? JMP IDFIX YES LDA CADD FIRST TIME THRU? SZA CPA STADD IS ADDRESS NEXT RECORD? JMP LBUFC YES LDB SADD GET STARTING ADDRESS CMB,INB NEGATE IT CMA,INA NEGATE ENDING ADDRESS ADA STADD SEE IF WITHIN EXSITING BUFFER ӷADB STADD SSA SSB RSS NOT WITHIN PREVOUS CODE JMP LBUFC IS, SAVE IT SPC 1 LBUFP JSB POSNT HERE IF BUFFER FULL, OR BREAK IN CODE DEF *+4 DEF DCBN,I DEF FERR DEF M1 LDB FILER SET FOR MORE TO COME JMP LBUF,I AND RETURN SPC 2 LBUFB JSB CLOSE HERE IF EOF REACHED DEF *+3 DEF DCBN,I DEF FERR LDB FILER CHECK IF ANY ERRORS CMB NEGATE...IF WAS ZERO..NO ERROR, OTHERWISE FILE ERROR JMP LBUF,I AND RETURN SPC 3 LBUFC LDA CADD GET CURRENT ADDRESS LDB STADD FIRST RECORD? SZA,RSS STB SADD YES...SET IN STARTING ADDRESS LDA RLEN GET RECORD LENGTH ALF,ALF AND B377 GET LENGTH STA RLEN SAVE LENGTH ADA DLEN GET LENGTH AFTER THE MOVE STA B SAVE FOR THE MOMENT ADA MBUFS SEE IF WE HAVE OVERFLOWED THE SSA,RSS DATA BUFFER JMP LBUFP YES WE HAVE STB DLEN SAVE LENGTH LDA RLEN GET LENGTH AGAIN ADA STADD GET ENDING ADDRESS+1 STA B SAVE FOR AWHILE CMA,INA NEGATE IT ADA CADD SEE IF GREATER THAN CURRENT ENDING SSA STB CADD YES...SAVE NEW ENDING ADDRESS LDA SADD GET BEGINING CMA,INA GET DISPLACEMENT INTO BUFFER ADA STADD ADA DBUFA GET STARTING ADDRESS FOR MOVE STA STADD SAVE ADDRESS LDA RLEN GET LENGTH AGAIN CMA,INA NEGATE FOR LOOP COUNT STA RLEN LDB SDBA GET STARTING ADDDRESS OF INPUT BUFFER LBUFD LDA B,I STA STADD,I SAVE DATA WORD INB GET NEXT ADDRESS ISZ STADD ISZ RLEN DONE? JMP LBUFD NO JMP LBUF0 DONE...GET ANOTHER RECORD SPC 2 IDFIX DLD FWRD GET TWO WORDS DST CAIDS,I SAVE WORDS ISZ CAIDS GET NEXTu ADDRESS ISZ CAIDS ISZ CLIDS INCREMENT RECORD COUNT JMP LBUF0 GET ANOTHER REOCRD SKP * * SUBROUTINE TO ALOCATE A DCB * CALLING SEQUENCE * JSB ALOC * ALOC NOP * * BEFORE WE ALOCATE A DCB, CHECK IF ONE IS * ALREADY ALOCATED * LDA SATA GET ADDRESS OF ACTIVE SATELITE TABLE STA TEMP1 SAVE IN UP COUNTER LDA MMAXS GET MAX # OF ENTRIES INA STA TEMP2 SAVE IN DOWN COUNTER CLA SET UP FOR TABLE DISPLACEMENT STA TEMP3 LDA RLU GET REMOTE LU # ALOC4 CPA TEMP1,I IS THERE A MATCH JMP ALOC5 YES...DCB ALOCATED FOR TERMINAL ALREADY ISZ TEMP1 NO...GET NEXT ENTRY ISZ TEMP3 ISZ TEMP2 DONE? JMP ALOC4 NO...CONTINUE * * TERMINAL DOESN'T ALREADY HAVE A DCB...TRY TO FIND ONE * LDA DCBBA GET ADDRESS OF DCB AVAILABLE TABLE STA TEMP1 SAVE IN TEMP LOCATION LDA MMAXS GET MAX # OF ENTRIES STA TEMP2 SAVE IN DOWN COUNTER CLA GET A ZERO STA TEMP3 SAVE AS MULT. FACTOR ALOC1 ISZ TEMP2 DONE? JMP ALOC3 NO...CONTINUE LDB M3 YES...NO ROOM JMP TERM TELL OTHER SIDE TO TRY LATER ALOC3 LDA TEMP1,I GET CONTENTS OF TABLE SZA,RSS IS THERE SOMETHING THERE? JMP ALOC2 NO...GOOD FOUND A HOME!!! ISZ TEMP1 GET NEXT ADDRESS ISZ TEMP3 INCREMENT MULT COUNT JMP ALOC1 CONTINUE * * HERE IF WE HAVE ROOM * ALOC2 LDA TEMP3 GET MULT FACTOR MPY DCBSZ GET DISPLACEMENT FROM FIRST ADA DCBA ADDRESS OF AVAILABLE DCB STA TEMP1,I SAVE IN TABLE TO HOLD A PLACE STA DCBN SAVE IN PARMB ISZ CALOC INCREMENT # OF ACTIVE TERMINALS LDA TEMP3 GET DISPLACEMENT ADA SATA ADD FOR SATELLITE TABLE ENTRY LDB RLU GET REMOTE LU STB A,I SAVE PLACE IN TABLE JMP ALOC6 SET UP THE ID SEGEMENT SPC 3 * * TERMINAL ALREADY HAS A DCB...CLOSE IT AND REUSE IT * ALOC5 LDA TEMP3 GET DISPLACEMENT ADA DCBBA GET TO DCB ADDRESS LDA A,I GET DCB ADDRESS STA DCBN SAVE DCB ADDRESS IN PARMB JSB CLOSE CLOSE CURRENTLY OPEN DCB DEF *+3 DEF DCBN,I DEF FERR ALOC6 LDA DCBN GET DCB ADDRESS ADA D144 GET TO ID SEG ADDRESS STA CAIDS LDB MIDLN GET LOOP OCUNT STB CLIDS CLB STB A,I CLEAR OUT ID SEG INA ISZ CLIDS JMP *-3 JMP ALOC,I AND RETURN SKP * * SUBROUTINE TO DALOCATE A DCB * CALLING SEQUENCE * JSB DALOC * DALOC NOP LDA DCBBA GET ADDRES OF DCB ACTIVE TABLE STA TEMP1 SAVE IN TEMP LOCATION LDA MMAXS GET MAX # OF ENTRIES STA TEMP2 SAVE IN TEMP LOCATION LDA SATA GET ADDRESS OF SATELLITE OPEN TABLE STA TEMP3 DALC1 ISZ TEMP2 GONE THRU TABLE? JMP DALC2 NO....GOOD LDB M4 WE IN BIG TROUBLE...SHOULD NEVER GET HERE JMP TERM UNKNOWN DCB DALC2 LDA TEMP1,I GET ADDRESS IN TABLE CPA DCBN THE SAME? JMP DALC3 YES...DEALOCATE IT ISZ TEMP3 GET TO NEXT SATELLITE ENTRY ISZ TEMP1 GET NEXT BUFFER ADDRESS JMP DALC1 GO TRY AGAIN * * HERE FOR MATCH CONDITION * DALC3 CLA GET A ZERO STA TEMP1,I CLEAR OUT TABLE LOCATION STA TEMP3,I CLEAR OUT SATELLITE ENTRY STA DCBN CLEAR OUT DCB POINTER JMP DALOC,I RETURN SKP * * SUBROUTINE TO SEND A REPLY TO THE TERMINAL * CALLING SEQUENCE * JSB WRPLY * WRPLY NOP JSB STLN SET LENGTH OF REPLY PARMB LDA RBUF GET STREAM TYPE IOR BIT14 SET FOR REPLY STA RBUF JSB D65SV SEND REPLY DEF *+7 DEF IRWW WRITE DEF RLU DATA ONL Y DEF RBUF REQ. BUFFER DEF RBUFL LENGTH DEF DUMMY DEF DUMMY * JSB CMER ERROR RETURN JMP WRPLY,I RETURN SPC 4 * ERRM2 JSB CLOS CLOSE & DEALLOCATE DCB LDB M2 * * HERE TO TERMINATE ON AN ERROR CONDITION * B REG=STATUS * TERM STB STAT SAVE STATUS LDA FERR CPB M3 BUSY? CLA YES CPB M4 DCB LOST? LDA M103 YES...BIG TROUBLE STA FERR JSB WRPLY SEND ERROR REPLY JMP PLOS0 AND WAIT SPC 4 * * ROUTINE TO SEND ID SEGMENT WHEN DONE * DONE LDA DCBN ADA D144 STA IDSEG ADDR OF ID SEG DATA JSB DALOC DEALLOCATE THE DCB LDA CAIDS ADA M2 DLD A,I GET WORDS 2 AND 3 DST PNAM LDB D3 INCASE NO ID SEGMENT LDA CLIDS GET # OF 2/3 ENTRIES SZA,RSS STARTING ADDRESS? STA PNAM+1 NO...SET TO ZERO CMA,INA ADA D1 IF ONLY ONE RECIEVED... NO ID SEQMENT SSA,RSS JMP TERM NO ID SEQ LDA D2 SET FOR ID SEG COMMING STA STAT LDA IDLNH GET LENGTH OF ID INFO STA LNGH SAVE IN LENGTH WORRD LDA RBUF IOR BIT14 SET FOR REPLY STA RBUF LDA RLU IOR B120 SEND REQUEST AND DATA + Z BIT STA CNWD JSB STLN SET LENGTH OF REPLY PARMB JSB D65SV SEND ID SEQMENT DEF *+7 DEF IRWW WRITE DEF CNWD DEF RBUF DEF RBUFL REQ. LENGTH IDSEG NOP ID SEGMENT ADDRESS (DATA) DEF IDLNH DATA LENGTH * JSB CMER ERROR RETURN * JMP PLOS0 AND TERMINATE SPC 3 CMER NOP DST ERVAL JSB EXEC DEF *+5 DEF D2 DEF D1 DEF ERMS DEF ERML * JMP CMER,I SPC 3 STLN NOP THIS ROUTINE SETS THE LENGTH OF THE REPLY DST SAVAB 3- SAVE THE REGISTERS LDA RBUF GET WORD 0 OF PARMB AND MSK2 ISOLATE THE F BIT LDB D35 SZA,RSS IS THE BIT SET ? LDB D25 NO, SET FOR 25 WORDS (OLD PARMB) STB RBUFL SAVE DLD SAVAB RESTORE THE REGISTERS JMP STLN,I RETURN SPC 3 ERMS ASC 9,NPRGL: COMM ERROR ERVAL BSS 2 ERML DEC 11 SKP * * TEMP VALUES,CONSTANTS,BUFFERS, WHAT EVER * MAXN EQU 2 MAX # OF OPEN TERMINALS BUFS EQU 512 SIZE OF DATA BUFFER LNHID EQU 18 LENGTH OF ID SEQMENT INFO SPC 1 CLSNM NOP CLASS NUMBER B377 OCT 377 BIT14 OCT 40000 D21 DEC 21 B120 OCT 10200 D1 DEC 1 D2 DEC 2 D3 DEC 3 D6 DEC 6 D7 DEC 7 D25 DEC 25 D35 DEC 35 D60 DEC 60 D144 DEC 144 M1 DEC -1 M2 DEC -2 M3 DEC -3 M4 DEC -4 M103 DEC -103 MIDLN ABS 0-LNHID NEGATIVE LENGTH OF ID SEG INFO MMAXS ABS 0-MAXN-1 MAX # OF TERMINALS + 1 MBUFS ABS 0-BUFS-1 DATA BUFFER SIZE CALOC OCT 0 CURRENT # OF ACTIVE DCB'S TEMP1 NOP TEMP2 NOP TEMP3 NOP CADD NOP SADD NOP SDBA DEF FWRD D0 OCT 0 DBUFA DEF DBUF DCBBA DEF DCCB STADA DEF STADD CKLEN NOP FILER NOP DCBA DEF DCBF SATA DEF SAT SZDCB EQU 144+LNHID DCBSZ ABS SZDCB MSK1 OCT 77 MSK2 OCT 4000 CNWD NOP DUMMY OCT 0 IRWW OCT 100002 RBUFL NOP DLEN NOP IDLNH ABS LNHID SAVAB BSS 2 SPC 2 * * HERE WE DEFINE THE PRMB * . EQU * RBUF NOP STREAM ID BSS 1 STAT NOP STATUS STRTA BSS 0 FERR NOP LNGH NOP PNAM NOP PROGRAM NAME BSS 2 SC NOP SECURITY CODE DNFLG BSS 0 LU NOP LOGICAL UNIT DCBN NOP CLIDS NOP CURRENT # OF 2 WORD TRANSFERS CAIDS NOP CURRENT ADDRESS WITHIN ID SEGMENT SPC 1 ORG . RE POSITION EVERYBODY BSS 24 RLU NOP LU WHO CALLED UP BSS 10 SPC 2 * * INPUT BUFFER640 FOR READING ABSOLUTE RECORDS * ... EQU * DEFINE FOR REORG RLEN NOP LENGTH WORD STADD NOP STARTING ADDRESS WORD FWRD NOP FIRST DATA WORD SPC 1 * * REORG AND MAKE BUFFER 60 WORDS LONG * ORG ... RDBUF BSS 60 SPC 2 * * DEFINE SATELLITE OPEN TABLE * SAT REP MAXN NOP SPC 2 * DEFINE DCB TABLE DCCB BSS 0 REP MAXN NOP SPC 2 * DEFINE DCB AREA DCBF BSS 0 REP MAXN BSS SZDCB SPC 2 * DEFINE DATA BUFFER DBUF BSS 512 END EQU * END PROGL y6   91700-18104 1614 S 0122 DS1/B CCE MODULE: PROGL              H0101 IASMB,R,L,C HED PROGL 91700-16104 REV A * (C) HEWLETT-PACKARD CO 1976 NAM PROGL,2,30 91700-16104 REV A 760330 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * * * PROGL MODULE FOR CONCURRENT MULTI-TERMINAL DOWNLOADS * ENT PROGL * * WRITTEN BY: CHUCK WHELAN NOV 1975 * * * PROGL * * EXT EXEC,OPEN,READF,CLOSE EXT RNRQ,DRTEQ EXT #RSAX * * * #ACTV EQU 10 NUMBER OF ACTIVE DOWNLOADS AT ONE TIME * #TERM EQU 32 NUMBER OF POSSIBLE COMM. LINES * SKP * * * "PROGL" IS A DISTRIBUTED SYSTEM COMMUNICATIONS MONITOR. IT * SERVICES ALL SYSTEM DOWNLOAD REQUESTS FROM "SCE-1" SOFTWARE AT * REMOTE SATELLITES. WHEN A NEW REQUEST IS RECEIVED, THE REQUESTED * ABSOLUTE FILE CONTAINING THE CORELOAD IS TRANSMITTED RECORD-BY- * RECORD USING CLASS I/O WRITE OPERATIONS TO THE COMMUNICATIONS * DRIVER ("DVR65"). * * WHEN "PROGL" IS NOT EXECUTING IT IS IN A CLASS I/O GET * SUSPENSION WAITING FOR AN ENTRY TO BE PLACED ON THE CLASS QUEUE * FOR ITS CLASS NUMBER. ENTRIES ARE PLACED ON THIS QUEUE WHEN A * NEW DOWNLOAD REQUEST IS RECEIVED OR A PREVIOUS CLASS I/O WRITE * COMPLETES. SINCE NEW REQUESTS ARE WRITTEN TO "PROGL"S CLASS BY * "GRPM" WITH A CLASS I/O MAILBOX WRITE/READ, "PROGL" IS ABLE * TO DIFFERENTIATE BETWEEN THE TWO BY EXAMINING "IPRM3". * * THE PARMB PASSED TO "PROGL" BY "GRPM" CONTAINS THE LU IN THE * 25TH WORD, AND THE DOWNLOAD FILE NUMBER (BINARY) IN THE 2ND WORD. * THESE ARE THE ONLY WORDS IN THE PARMB USED BY "PROGL". THE DOWN- * LOAD FILE NUMBER IS CONVERTED TO AN ASCII FILE NADME CONSISTING * OF "P" FOLLOWED BY THE FIVE ASCII DIGIT OCTAL EQUIVALENT OF THE * NUMBER. NON-SCE1 REQUESTS TO PROGL PLACE A ZERO IN THE 2ND WORD, * AND THE ASCII FILE NAME IN THE 3RD, 4TH, & 5TH WORD OF THE PARMB. * * THE NUMBER OF DOWNLOADS THAT CAN BE ACTIVE AT ANY ONE TIME * IS LIMITED ONLY BY SYSTEM AVAILABLE MEMORY AND THE SIZE OF THE * ACTIVE DOWNLOAD TABLE. IN-PROCESS DOWNLOADS HAVE AN ENTRY IN * THIS TABLE CONSISTING OF LU, TIME-TAGS, SEQ #, AND THE 144 WORD * DCB FOR THE DOWNLOAD FILE. IF A NEW REQUEST IS RECEIVED WHILE * THIS TABLE IS FULL, IT IS PLACED IN A FOUR WORD (LU, TIME-TAGS, & * FILE #) ENTRY IN A WAIT QUEUE. WHEN AN ENTRY BECOMES AVAILABLE * IN THE ACTIVE TABLE, AN ENTRY IN THE WAIT QUEUE CAN BE ACTIVATED. * THE NUMBER OF ENTRIES IN THE ACTIVE TABLE IS SET AT ASSEMBLY TIME * BY THE ITEM "NACTV". * * THE LU AND SEQ # OF A DOWNLOAD REQUEST ARE PASSED IN THE * OPTIONAL PARAMETERS OF EACH CLASS I/O WRITE. THE PROGRAM ENSURES * THAT ONLY ONE DOWNLOAD TO A LU IS IN PROCESS BY RE-USING THE SAME * TABLE ENTRY WITH A NEW SEQ # IF A DOWNLOAD IS RESTARTED, AND * IGNORING I/O COMPLETIONS (ERRORS OR NOT) WITH WRONG SEQ. NUMBERS. * * EACH TIME THAT "PROGL" IS ENTERED ON A CLASS WRITE * COMPLETION, IT CHECKS THE RETURNED ERROR STATUS FOR DRIVER * ERRORS AND IF NONE, READS THE NEXT RECORD FROM THE DOWNLOAD * FILE, WRITES IT TO THE DRIVER AND AGAIN SUSPENDS ON ITS CLASS. * * WHEN ALL RECORDS IN THE DOWNLOAD FILE HAVE BEEN SUCCESSFULLY * TRANSMITTED, "PROGL" SENDS A ONE-WORD REQUEST TO THE SATELLITE * TO INDICATE THE DOWNLOAD IS COMPLETE. AT THIS TIME, THE FILE IS * CLOSED, THE TABLE ENTRY IS CLEARED, AND UNLESS A WAIT QUEUE * ENTRY CAN BE ACTIVATED, "PROGL" AGAIN SUSPENDS ON ITS CLASS. * * SKP * * PROGL IS ENTERED HERE INITIALLY PROGL BSS 0 ENTRY. LDA 1,I AND MSK14 RELEASE CLASS BUFFER SZA SKIP IF NOT 1ST TIME STA ICLAS SAVE CLASS # FORƭ PROGL * * * SUSPEND UNTIL A NEW REQUEST IS WRITTEN TO MONITOR OR COMPLETION * ON A PREVIOUS DRIVER WRITE OCCURS * PGET JSB EXEC WAIT FOR NEXT REQST OR I/O COMPLETION DEF *+8 DEF D21 DEF ICLAS DEF BUFR DEF LEN DEF LU DEF SEQ# DEF TYPE * LDB TYPE CHECK TYPE OF CLASS I/O CPB D2 JMP IOCOM IT WAS WRITE, PROCESS I/O COMPLETION * * PROCESS NEW DOWNLOAD REQUEST * LDA BUFR+24 STA LU SET LU FROM PARMB JSB SRCH SEARCH FOR ENTRY IN DOWNLOAD TABLE CLB,RSS THIS LU WASN'T IN TABLE JMP RSTRT FOUND, CLEAR & RESTART * * NO PREVIOUS ACTIVE ENTRY FOR LU CPB CURAD WAS DOWNLOAD TABLE FULL? JMP FULL YES, QUEUE THIS ENTRY LDA LU LU STA CURAD,I STORE IN 1ST WORD OF DOWNLOAD ENTRY RSS * * SAME LU, USE SAME TABLE ENTRY WITH NEW SEQ # & TIME-TAGS RSTRT JSB CLSE CLOSE PREVIOUS DOWNLOAD FILE DLD BUFR+33 GET TIME-TAGS DST TAGAD,I SAVE IN ACTIVE DOWNLOAD ENTRY LDB BUFR+1 PGM # FROM PARMB SZB SKIP IF A NON-SCE1 REQUEST JMP NEWLD OTHERWISE CONVERT A BINARY PGM # LDA BUFR+2 CHARS 1 & 2 OF FILE NAME STA NAME LDA BUFR+3 CHARS 4 & 5 STA NAME+1 LDA BUFR+4 5TH CHAR JMP SETNM * * CONVERT PGM # TO BE DOWNLOADED NEWLD RRL 4 DUAL ROTATE LEFT 4 AND D7 IOR ASCP0 FORM ASCII OF 1ST 2 CHARS STA NAME CLA RRL 3 POSITION 3RD OCTAL DIGIT ALF,RAL MOVE TO LHW RRL 3 GET 4TH DIGIT IOR ASC00 ASCII FOR 3RD & 4TH DIGITS STA NAME+1 CLA RRL 3 5TH DIGIT ALF,RAL TO LHW RRL 3 GET 6TH & FINAL DIGIT IOR ASC00 CONVERT TO ASCII SETNM STA NAME+2 * LDA POOLS GET SEQ # OF THIS DOWNLOAD FROM POOL STA SEQAD,I 2ND WORD OF DOWNLOAD E oNTRY ISZ POOLS UPDATE POOL SEQUENCE NUMBER ZERO NOP * * OPEN FILE TO BE DOWNLOADED JSB OPEN DO FMGR OPEN DEF *+5 DEF DCBAD,I DCB ADDRESS DEF IERR DEF NAME DEF ZERO * LDA IERR SSA SKIP IF NO ERROR FROM FMP JMP ERR1 SEND REJECT IF ERROR * * LOCK PRN SO PROGL HAS EXCLUSIVE USE OF LINE JSB DORN DO LOCAL LOCK ON PROGL RN OCT 100001 JMP NEXT NOW XFER NEXT RECORD HED SEND NEXT DOWNLOAD RECORD * (C) HEWLETT-PACKARD CO 1976 * * * ENTER HERE WHEN COMPLETION OF PREVIOUS WRITE HAS OCCURRED * IOCOM STA IERR SAVE STATUS JSB SRCH FIND DOWNLOAD TABLE ENTRY FOR LU JMP PGET LU NOT IN TABLE, IGNORE LDA SEQAD,I GET SEQ # OF TABLE ENTRY CPA SEQ# DOES IT MATCH? RSS YES JMP PGET NO, IGNORE THIS COMPLETION * CHECK DRIVER ERROR STATUS LDA IERR GET ERROR STATUS FROM DRIVER SLA,RSS LSB OF EQT5 JMP ERR3 DRIVER ERROR OCCURRED * * THIS SECTION IS ENTERED TO GET NEXT RECORD FROM DOWNLOAD FILE. * NEXT JSB READF READ NEXT RECORD DEF *+6 DCBAD NOP DEF IERR DEF DBUF DEF MAXL MAX ALLOWED LENGTH DEF LENX ACTUAL LENGTH * LDA IERR CHECK FOR ERRORS SSA JMP ERR2 ERROR IN FILE READ * LDA LENX SSA CHECK FOR END-OF-FILE JMP EOFND FOUND, WRAP IT UP * * VERIFY CHECKSUM OF NEXT RECORD TO BE DOWNLOADED * LDA DBUF ALF,ALF AND B377 STA 1 SAVE BUFFER LENGTH IN B CMB,INB NEGATE LENGTH STB DBUF SET IN LENGTH FIELD FOR SCE-1 INA CMA,INA STA CNTR WORD COUNTER. LDB DBFAD BUFFER ADDRESS. CLA CKSML ADA 1,I ADD UP THE WORDS. INB ISZ CNTR JMP CKSML CPA 1,I COMPARE CHECKSUMS. RSS < JMP ERR2 NOT EQUAL. * * CHECKSUM OK, SETUP TO WRITE THIS RECORD LDA LU GET LU IOR B400 WRITE DATA ONLY (PROGL SPECIAL) STA CONWD * * NOW DO CLASS I/O WRITE TO DRIVER * JSB EXEC DEF *+8 DEF D18N NO ABORT BIT IS SET DEF CONWD WRITE DATA DEF DBUF DATA BUFFER ADDRESS DEF LENX LENGTH CURAD NOP OPT.PARAM 1 = LU SEQAD NOP OPT.PARAM 2 = SEQ # OF DOWNLOAD DEF ICLAS WRITE IT ON PROGL'S CLASS * JMP ERR3 ERROR * NOW GO INTO SUSPEND ON PROGL'S CLASS UNTIL A DRIVER WRITE COMPLETES * OR A NEW REQUEST IS RECEIVED. JMP PGET * * * ENTER HERE WHEN END OF DOWNLOAD FILE IS DETECTED * RETURN GOOD STATUS FOR A SUCCESSFUL DOWNLOAD * EOFND JSB CLSE CLOSE DOWNLOAD FILE CLA 0= GOOD DOWNLOAD * TERM STA ISTAT SET STATUS FOR TRANSMISSION * JSB EXEC WRITE FINAL REQUEST DEF *+8 DEF D18N CLASS WRITE TO COMM DRIVER DEF LU REQ ONLY DEF ISTAT 1 WORD REQUEST HAS STATUS DEF D1 DEF LU OPT.PARAM 1 = LU DEF SEQAD,I OPT.PARAM 2 = DOWNLOAD SEQ # DEF ICLAS PROGL CLASS NUMBER NOP * * CLEAR PRN SO ANYONE ELSE CAN USE THIS LU JSB DORN CLEAR PROGL RESOURCE NUMBER OCT 100004 * JSB #RSAX CLEAR TRANSACTION DEF *+5 DEF D3 DEF ST/LS STREAM 9 DEF SCODE SELECT CODE TAGAD NOP ADDR OF TIMETAGS * LDA ISTAT CPA M4 IS THIS A NON-SCE1 BUSY REJECT? JMP PGET YES, DONE * * THIS DOWNLOAD IS OVER * CLEAN OUT DOWNLOAD TABLE ENTRY AND GIVE SPACE TO * ANY ENTRY FOUND IN WAITING QUEUE * CLNUP CLA STA CURAD,I SET DOWNLOAD ENTRY AS AVAILABLE LDB WAITA LDA NQUE STA CNTR COUNTER= -# OF WAITQ ENTRIES CKQUE LDA 1,I SZA SKIP IF SLOT EMPTY JMP ACTIV I:OTHERWISE, ACTIVATE IT ADB D2 ISZ CNTR JMP CKQUE JMP PGET NOTHING QUEUED, GO TO GET SUSPEND * * NOW ACTIVATE A WAITING DOWNLOAD REQUEST FROM THE WAIT QUEUE USING * THE ACTIVE DOWNLOAD TABLE SPACE WHICH WAS JUST MADE AVAILABLE * ACTIV STA CURAD,I MOVE LU TO TABLE ENTRY JUST CLEARED CLA STA 1,I CLEAR WAIT QUEUE ENTRY INB STB TPNT DLD 1,I GET TIME-TAGS FROM WAIT QUEUE ENTRY DST TAGAD,I & SAVE IN ACTIVE DOWNLOAD ENTRY ISZ TPNT ISZ TPNT ADDR OF PGM # IN WAIT QUEUE ENTRY LDB TPNT,I PICKUP PGM # AND START DOWNLOADING IT JMP NEWLD HED PROGL SUBROUTINES & DATA AREA * (C) HEWLETT-PACKARD CO 1976 * * THIS SUBROUTINE SEARCHES FOR A DOWNLOAD TABLE ENTRY FOR * THE PASSED LU. RETURNS TO P+1 IF NOT FOUND, OTHERWISE P+2 * SRCH NOP LDA NACTV STA CNTR - # OF ACTIVE ENTRIES ALLOWED CLA INITIALIZE ADDR OF EMPTY SLOT STA TPNT LDB TABAD ADDR OF DOWNLOAD TABLE SNXT LDA 1,I PICKUP LU OF THIS ENTRY CPA LU DOES THIS ONE MATCH LU? JMP SRCHX YES, FOUND DOWNLOAD ENTRY IOR TPNT NO, IS THIS THE 1ST EMPTY SLOT? SZA,RSS SKIP IF EMPTY SLOT ALREADY FOUND STB TPNT STORE ADDR OF 1ST EMPTY SLOT ADB TLENT BUMP TABLE POINTER ISZ CNTR JMP SNXT TRY NEXT * LU NOT IN ACTIVE TABLE LDB TPNT RETURN 1ST EMPTY SLOT INSTEAD RSS RETURN +1 * * FOUND AN ENTRY IN THE ACTIVE DOWNLOAD TABLE FOR THIS LU SRCHX ISZ SRCH RETURN+2 STB CURAD SET ADDRESS OF ENTRY INB STB SEQAD & ADDRESS FOR SEQ # INB STB TAGAD & ADDRESS FOR TIME-TAGS ADB D2 STB DCBAD & ADDRESS FOR DCB JMP SRCH,I RETURN * * CLOSE DOWNLOAD FILE * CLSE NOP JSB CLOSE DEF *+3 DEF DCBAD,I DEF IERR JMP CLSE,I * * GET P[ROGL RESOURCE NUMBER FOR THIS LU FROM EQT EXTENSION+1 * AND PERFORM REQUESTED LOCK/UNLOCK ON IT * DORN NOP JSB DRTEQ GET EQT FOR LU DEF *+2 DEF LU SSB JMP CLNUP LU NOT FOUND, CLEAN OUT THIS ENTRY ADB D3 LDA 1,I PICK UP EQT 4 AND B77 ISOLATE SELECT CODE ALF,ALF STA SCODE SAVE FOR #RSAX CALL ADB D9 COMPUTE EQT13 ADDR LDB 1,I RBL,CLE,SLB,ERB JMP *-2 RESOLVE INB POINT TO EXTENSION + 1 LDA 1,I GET RESOURCE NUMBER STA PRN * JSB RNRQ DO REQUESTED OPERATION ON RN DEF *+4 DEF DORN,I DEF PRN DEF IERR * ISZ DORN JMP DORN,I * * DOWNLOAD TABLE IS FULL, PUT THIS REQUEST IN WAITING QUEUE * FULL LDA M4 LDB BUFR+1 2ND WORD OF PARMB SZB,RSS IS THIS AN SCE-1 DOWNLOAD? JMP TERM NO, GIVE A BUSY REJECT * LDA NQUE STA CNTR -QUEUE TABLE SIZE CLA STA TPNT LDB WAITA ADDR OF WAIT QUEUE CKQ LDA 1,I GET LU OF THIS ENTRY CPA LU DOES IT MATCH THIS REQUEST JMP BLDQ YES, THEN SET NEW PGM # & TIME-TAGS IOR TPNT CHECK IF THIS IS 1ST EMPTY SLOT IN QUEUE SZA,RSS SKIP IF NOT STB TPNT SAVE ITS ADDRESS ADB D2 BUMP QUEUE POINTER ISZ CNTR JMP CKQ EXAMINE NEXT ENTRY * * WE NOW KNOW THAT THIS LU WASN'T ALREADY IN WAIT QUEUE LDB TPNT GET ADDRESS OF 1ST EMPTY SLOT SZB,RSS WERE THERE ANY EMPTIES? JMP PGET NO, WE'RE IN TROUBLE LDA LU LU STA 1,I INTO 1ST WORD OF WAIT QUEUE ENTRY * BLDQ INB LDA BUFR+33 1ST WORD OF PASSED TIME-TAGS STA 1,I STORE IN WAIT QUEUE ENTRY INB LDA BUFR+34 2ND WORD STA 1,I INB LDA BUFR+1 PGM # STA 1,I GOES INTO 4TH WORD JMP PGET 0.* GO BACK TO SUSPEND ON GET * ERR1 CCA ERROR IN FILE OPEN JMP TERM ERR2 JSB CLSE ERROR IN FILE READ, DO CLOSE LDA M2 JMP TERM ERR3 JSB CLSE DRIVER ERROR, DO CLOSE LDA M3 JMP TERM * * DATA AREA * NAME BSS 3 IERR NOP ISTAT NOP ICLAS NOP PRN NOP TPNT NOP CNTR NOP TYPE NOP LENX NOP CONWD NOP POOLS NOP LU NOP SEQ# NOP SCODE NOP * D1 DEC 1 D2 DEC 2 D3 DEC 3 D7 DEC 7 D9 DEC 9 D21 DEC 21 M2 DEC -2 M3 DEC -3 M4 DEC -4 B77 OCT 77 B400 OCT 400 B377 OCT 377 D18N OCT 100022 MSK14 OCT 137777 ST/LS OCT 4402 * TLENT DEC 146 SIZE OF DOWNLOAD TABLE ENTRY NACTV ABS -#ACTV NQUE ABS #ACTV-#TERM MAXL DEC 255 LEN DEC 35 PARMB LENGTH ASC00 ASC 1,00 ASCP0 ASC 1,P0 * DBFAD DEF DBUF+1 TABAD DEF DT ADDR OF DOWNLOAD TABLE WAITA DEF WAITQ ADDR OF WAITING QUEUE * BUFR BSS 35 PARMB DBUF BSS 255 FILE INPUT BUFFER * * THE FOLLOWING RESERVES SPACE FOR THE ACTIVE DOWNLOAD TABLE DT REP #ACTV DOWNLOAD TABLE: LU,SEQ#,TAGS,& DCB BSS 148 * * THE FOLLOWING RESERVES SPACE FOR THE WAIT QUEUE WAITQ REP #TERM-#ACTV WAITING QUEUE: LU, TIME-TAGS, & PGM # BSS 4 * END PROGL n0   91700-18105 1553 S 0122 DS1/B CCE MODULE: OPERM              H0101 PASMB,L,R,C HED OPERM 91700-16105 REV A 751229 * (C) HEWLETT-PACKARD CO. 1976 NAM OPERM,2,30 91700-16105 REV A 751229 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT OPERM EXT MESSS,EXEC,D65SV,#MBRK IFZ EXT DBUG XIF * * * OPERM * SOURCE: 91700-18105 * BINARY: 91700-16105 * PRGMR: BOB SHATZER * DATE: 29 DEC 75 * * * * OPERM IS THE CCE MONITOR WHICH RECEIVES OPERATOR REQUESTS INIT- * IATED BY A REMOTE CPU. THIS MONITOR OPERATES ON STREAM 7. * * OPERM LDA B,I GET INPUT PARAMETER IFZ SZA,RSS IS IT A ZERO? JMP *+3 YES - CALL DEBUG XIF STA CLSN NO - NORMAL SCHEDULE - SAVE CLASS NUMBER JMP OPER1 GO TO GET THE FIRST REQUEST * IFZ JSB DBUG CALL DEBUG IF P1 WAS 0 DEF *+1 JSB EXEC TERMINATE...SAVE RESOURCES DEF *+4 DEF B6 DEF B0 DEF B1 JMP OPERM TRY AGAIN XIF * OPER1 JSB EXEC DO A CLASS GET AND WAIT FOR REQUEST DEF *+5 DEF D21 DEF CLSN CLASS # DEF PARMB REQUEST BUFFER DEF D35 MAX LENGTH =35 * LDA LNGTH GET LENGTH SZA,RSS IF ZERO...SEND BACK ZERO TO THEM JMP DONE * JSB #MBRK GO CHECK THE BREAK FLAG DEF *+4 DEF D7 STREAM DEF RLU REQUESTING LU DEF TTAGS TIME TAGS JMP OPER1 JMP OPER1 * JSB MESSS CALL SYSTEM MSG PROCESSOR WITH MESSAGE DEF *+3 DEF SMESG ?v   DEF LNGTH CMA,INA MAKE SYSTEM REPLY LENGTH POSITIVE BYTES STA LNGTH SAVE LENGTH * DONE LDA PARMB GET STREAM TYPE IOR BIT14 SET IN FOR REPLY STA PARMB SAVE AS REPLY STREAM LDB D35 GET 35 WORD REPLY LENGTH ALF ROTATE FRIENDLY BIT (BIT 11) TO BIT 15 SSA,RSS IS IT SET? (REUEST FROM SCE/4 OR /5) LDB D25 NO - SET REPLY LENGTH TO 25 WORDS STB RPYLN AND SAVE IT JSB D65SV SEND REPLY DEF *+7 DEF B2 DEF RLU DEF PARMB DEF RPYLN DEF B0 DEF B0 NOP ERROR RETURN POINT JMP OPER1 WAIT FOR ANOTHER REQUEST * B EQU 1 B0 OCT 0 B1 OCT 1 B2 OCT 2 B6 OCT 6 D7 DEC 7 D21 DEC 21 D25 DEC 25 D35 DEC 35 RPYLN NOP BIT14 OCT 40000 CLSN NOP PARMB BSS 35 LNGTH EQU PARMB+5 SMESG EQU PARMB+6 RLU EQU PARMB+24 TTAGS EQU PARMB+33 * END OPERM l   91700-18106 1607 S 0122 DS1/B CCE MODULE: DLIST              H0101 RASMB,R,L,C HED DLIST 91700-16106 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM DLIST,2,30 91700-16106 REV A 760212 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ******************************************************* * *DLIST DIRECTORY LIST PROGRAM FOR DS1/B * *SOURCE PART # 91700-18106 REV A * *REL PART # 91700-16106 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 9-18-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: DECEMBER 1975 * ******************************************************** SPC 2 * * PROGRAM TO DO DIRECTORY LISTING ON AS * MANY REMOTE TERMINALS AS REQUIRED * SPC 3 * * DEFINE ENTRY POINTS * ENT DLIST SPC 3 * * DEFINE EXTERNALS * EXT EXEC,D65SV,D65CL IFZ EXT DBUG XIF SPC 2 * * DEFINE A AND B REG * A EQU 0 B EQU 1 SUP SKP * * MAIN ROUTINE STARTS HERE * DLIST NOP LDA B,I SEE IF THEY WANT DEBUG STA CLSSN SAVE CLASS NUMBER IFZ SZA DO THEY WANT DEBUG JMP DLST0 NO JSB DBUG DEF *+1 JSB EXEC DEF *+4 DEF D6 DEF D0 DEF D1 JMP DLIST XIF SPC 1 DLST0 JSB EXEC DO A GET CALL DEF *+5 DEF D21 DEF CLSSN DEF STYP DEF D35 LDA RLU AND MSK1 KEEP ONLY THE LOWER BITS OF THE COMM. LU STA RLU LDA BROUT GET ADDRESS OF CURRENT COROUTINE SZA,RSS JMP SUB1 m8 JMP A,I GO TO SPECIFIED SUBROUTINE SPC 2 SUB2A DEF SUB2 SUB3A DEF SUB3 SUB4A DEF SUB4 SUB5A DEF SUB5 SUB6A DEF SUB6 SUB7A DEF SUB7 DON1A DEF DONE1 SKP * * HERE ON NEW REQUEST * SUB1 LDA DBFA GET AD OF WHERE DIR DATA INFO STORED INFO STA LUDSP SAVE FOR LU LOOPING SUB2 LDA D2 GET ADDRESS OF SYSTEM DISK STA WCLU SAVE AS WANTED LU LDA TATSD GET # OF TRACK IN SYSTEM DISK ADA M1 GET TO LAST TRACK STA WTRCK SAVE IN WANT TRACK CLB SET FOR SECTOR ZERO STB WSEC SET WANT SECTOR TO ZERO LDA D128 READ 128 WORDS JSB GETSC GET THE SECTOR LDA LUDSP,I GET LU OF CARTRIDGE SZA,RSS DONE? JMP DONE YES LDA BROUT SEE IF FIRST TIME SZA JMP SUB22 NOT FIRST TIME LDB MCODF SEE IF THEY SUPPLIED A MASTER CLE,SZB,RSS JMP SUB21 CMB,INB CODE, AND IF THEY DID, DOES ADB MSCA,I IT MATCH CLE,SZB,RSS IF MATCH,SET E REG CCE MATCH ON SECURITY CODE...SET E REG LDA MCODF SEE IF SECURITY CODE PRESENT LDB MSCA,I GET ACTUAL VALUE SZB,RSS IF MASTER SECURITY CODE...DON'T CHECK SZA,RSS DID THEY SUPPLY ONE, WHEN THERE WASN'T ONE? RSS NO...ONE NOT SUPPLIED CCE ONE SUPPLIED...SET TO ALLOW CLA SET FLAG SUB21 ELA STA MCODF SAVE MASTER SECURITY CODE MATCH SUB22 LDA CRLU DO THEY WANT A SPECIFIED LU? SZA,RSS LU SUPPLIED? JMP MCR NO LDB LUDSP GET DISPLACEMENT CMA,INA ASSUME LU SSA,RSS IS IT LABEL? JMP SUB23 NO...LU CMA,INA YES...LABEL...MAKE POS AGAIN ADB D2 AND GET TO LABEL WORD SUB23 CPA B,I IS LABEL OR LU MATCH? JMP MCR MATCH...PROCESS LU LDA LUDSP NO MATCH GO TO NEXT ONE ADA D4g STA LUDSP JMP SUB2 SKP * * ROUTINE TO PROCESS A MOUNTED CARTRIDGE * SPC 1 MCR LDA SUB5A SET UP FOR RETURN AFTER SENDING THE LINE STA BROUT LDA SECT2 GET # OF SECTORS IN TRACK STA SCTRK SAVE IN SECTORS/TRACK LDA LUDSP,I GET LU OF DISK STA WCLU SAVE AS WANTED CURRENT LU ISZ LUDSP GET TO FIRST DIRECTORY TRACK LDB LUDSP,I GET DIRECTORY TRACK ADDRESS STB WTRCK SAVE TRACK ADDRESS ISZ LUDSP GET TO LOCK WORD ISZ LUDSP LDB LUDSP,I GET LOCK WORD ISZ LUDSP GET TO NEXT ENTRY SZB IS LU LOCKED JMP SUB2 YES CLB ASSUME NOT LU 2 CPA D2 IS IT SYSTEM DISC? LDB D14 YES STB WSEC SAVE STARTING SECTOR ADDRESS LDA DBFA SET FOR ZERO DISPLACEMENT WITHIN BUFFER JSB SCFX GO GET SECTOR JMP SUB2 NO DIRECTORY? LDA DISP GET NAME OF CART. JSB NMOVE MOVE CR NAME TO OUTPUT BUFFER DEF CRNA LDA CRNA GET FIRST WORD OF CR NAME AND B7777 GET RID OF SIGN BIT STA CRNA RESTORE LDA DISP GET TO LABEL WORD ADA D3 LDA A,I CONVERT LABEL WORD TO ASC JSB BNDEC DEF LWA LABEL WORD ADDRESS LDB DISP GET TO # SEC/TRACK ADB D6 LDA B,I GET # OF SECTORS/TRACK STA SCTRK SAVE AS # OF SECTORS/TRACK ADB D2 GET TO # OF DIRECTORY TRACKS LDA B,I ADA WTRCK GET ENDING DIRECTORY TRACK STA NTRKS LDA B,I GET # OF DIRECTORY TRACKS CMA,INA MAKE # POS. JSB BNDEC CONVERT TO ASC DEF DTRKA LDA DTRKA+2 MOVE UP THE LEAST SIGNIFICANT DIGITS STA DTRKA THEY ARE THE ONLY ONES TO BE PRINTED JSB WTLIN SEND LINE TO TERMINAL DEF HEAD1 FIRST HEADING LINE JMP TERM WAIT FOR HIM TO RETURN  SKP * * HERE AFTER FIRST HEADING LINE WRITTEN * SUB3 LDA SUB4A GET ADDRESS WHERE TO GO NEXT TIME STA BROUT JSB WTLIN SEND OUT SEND HEADING LINE DEF HEAD2 JMP TERM GO WAIT FOR HIM TO RETURN SPC 5 * * HERE AFTER HEADING LINE WRITTEN * JUST OUTPUT A BLANK LINE * SUB5 LDA SUB3A GET ADDRESS FOR NEXT TIME STA BROUT JSB WTLIN SEND OUT BLANK LINE DEF BLNKL JMP TERM GO WAIT FOR HIM TO RETURN SPC 5 * * HERE TO START OUTPUTING DIRECTORY * SUB4 LDA DISP GET FILE ENTRY ADA D16 JSB SCFX SEE IF WE NEED NEW SECTOR JMP SUB2 DONE...NO MORE DIRECTORY LDA DISP,I IS THIS FILE PURGED SSA JMP SUB4 YES...GO TO NEXT ONE SZA,RSS DONE? JMP SUB6 YES...2 SPACES & GET NEXT LU JSB MDLIN MOVE THE LINE JMP SUB4 ERROR CONDITION JSB WTLIN GO WRITE THE LINE DEF DLINA ADDRESS OF DETAIL LINE JMP TERM WAIT FOR HIM AGAIN SPC 5 * * HERE TO OUTPUT A BLANK LINE * SUB6 LDA SUB7A GET ADDRESS FOR NEXT TIME STA BROUT JSB WTLIN OUTPUT A BLANK LINE DEF BLNKL JMP TERM SPC 5 * * HERE TO OUTPUT A BLANK LINE * SUB7 LDA SUB2A GET ADDRESS FOR NEXT TIME STA BROUT JSB WTLIN OUTPUT A BLANK LINE DEF BLNKL JMP TERM SKP * * SUBROUTINE TO MOVE DETAIL LINE TO PRINT LINE * CALLING SEQUENCE * JSB MDLIN * NO MATCH RETURN...IE..FILTER MIS-MATCH,TYPE NO MATCH * NORMAL RETURN * SPC 1 MDLIN NOP LDA FLTR IS FILTER SPECIFIED SZA NO CPA SPACA OR IS IT ALL SPACE? JMP NDLN2 NOT SUPPLIED OR SPACE LDA FLTRA GET ADDRESS WHERE FILTER LOCATED CLE,ELA CONVERT TO BYTE ADDRESS STA TEMP SAVE FILTER BYTE ADDRESS LDA DISP $\GET ADDRESS OF NAME CLE,ELA CONVERT TO BYTE ADDRESS STA TEMP1 SAVE IN BYTE ADD COUNTER LDA M6 # OF CHAR IN FILTER STA TEMP2 SAVE IN DOWN COUNTER MDN11 LDB TEMP GET BYTE ADD OF FILTER JSB ABYTE GET BYTE SZA,RSS IF ZERO, CHANGE TO SPACE LDA C40 C40=SPACE CPA FLTRC IS IT A "*"? JMP MDN12 YES...DON'T CHECK STA TEMP3 SAVE IN TEMP LOCATION LDB TEMP1 GET BYTE ADDRESS OF NAME JSB ABYTE GET BYTE CPA TEMP3 IS THERE A MATCH? RSS YES JMP MDLIN,I NO...IGNORE ENTRY MDN12 ISZ TEMP GET TO NEXT ENTRY ISZ TEMP1 ISZ TEMP2 DONE? JMP MDN11 NO SPC 2 * * AFTER CHECKING NAME, CHECK TYPE * NDLN2 LDB DISP GET TO FILE TYPE ADB D3 LDB B,I LDA FTYP CHECK WITH FILE TYPE PASSED RAL,CLE,ERA IS THERE A FILE TYPE? SEZ FILE TYPE SPECIFIED CPA B YES...DOES IT MATCH RSS MATCH...OR NO FILE TYPE SPECIFIED JMP MDLIN,I FILE TYPE NOT MATCHED STB FTYPT SAVE TYPE IN TEMP FOR LATTER LDA B JSB BNDEC CONVERT FILE TYPE TO ASC DEF DTYPA LDA DISP MOVE NAME TO OUTPUT LINE JSB NMOVE DEF DNAMA LDA DISP GET # OF SECTORS OR LU ADA D4 ASSUME LU LDB FTYPT SEE IF TYPE=0 SZB YES? ADA D2 NO...GET # OF SECTORS LDA A,I GET VALUE SZB IF LU...DON'T DIVIDE BY 2 CLE,ERA CONVERT TO # OF BLOCKS JSB BNDEC CONVERT TO ASC DEF DBSLU LDB DISP GET TO SECURITY CODE ADB D8 LDA B,I GET SECURITY CODE JSB BNDEC CONVERT TO ASC DEF DSECA LDB FTYPT CHECK IF THIS REC AN EXTENT LDA DISP ADA D5 LDA A,I IF EXTENT...CAN'T BE TYPE=0 AND UB377 NO EXTENT A=0 SZB IF TYPE 0...DON'T CHECK FOR EXTENT SZA,RSS NOT TYPE 0...EXTENT? ISZ MDLIN NOT EXTENT..OR TYPE 0 NORM RETURN LDA DLLWS LENGTH OF DETAIL LINE WITH S.C. LDB MCODF SUPPLY SECURITY CODE? SZB,RSS LDA DLLS NO...LENGTH WITHOUT SECURITY CODE STA DLINA SAVE FOR TRANSFER JMP MDLIN,I RETURN SPC 1 FTYPT NOP DLLWS DEC 16 DLLS DEC 12 D5 DEC 5 SKP * * HERE WHEN WE ARE ALL DONE * DONE LDA BROUT SEE IF WE SENT THEM ANYTHING SZA JMP DONE1 YES...JUST TERMINATE LDA DON1A GET ADDRESS OF TERMINATION POINT STA BROUT JSB WTLIN SEND "DISK NOT MOUNTED" DEF NOCRM JMP TERM * DONE1 JSB D65CL SEND STOP DEF *+3 DEF D3 CONTROL REQUEST DEF RLU 0 IS THE MODE FOR STOP JSB CMER ERROR RETURN * LDA BIT14 TELL OTHER SIDE, ALL DONE RSS SPC 5 * * HERE WE TERMINATE BY SENDING REPLY * TERM CLA SET FOR MORE TO COME STA STAT SAVE STATUS LDA STYP GET STREAM TYPE IOR BIT14 SET FOR REPLY STA STYP AND B4000 ISOLATE THE F BIT LDB D35 GET F. LENGTH SZA,RSS BIT SET ? LDB D20 NO, OLD LENGTH STB RPLYL SAVE JSB D65SV SEND REPLY DEF *+7 DEF IRWW WRITE DEF RLU REQUEST ONLY DEF STYP DEF RPLYL REPLY LENGTH DEF DUMMY DEF DUMMY * JSB CMER ERROR REPLY JMP DLST0 GO DO A GET CALL SKP * * SUBROUTINE TO SEND DATA TO REMOTE * CALLING SEQUENCE * JSB WTLIN * DEF BUFFER * BUFFER FORMAT * LENGTH WORD, DATA BUFFER * WTLIN NOP LDA WTLIN,I GET ADDRESS OF OUPUT LINE INA GET TO FIRST DATA WORD STA WTLNB LDA RLU GET COMM. LU IOR MSK3 SEND DATA STA IMODE * JSB D65CL DEF *+7 DEF IRWW DEF IMODE WTLNB NOP DATA BUFFER DEF LNGH DEF TAGS DEF TAGS+1 JMP BAD ERROR RETURN * LDB WTLIN,I GET LENGTH OF MESSAGE LDB B,I LDA LNGH GET AVAILABLE LENGTH CMA,INA ADA B SEE IF THERE WAS TO MUCH ROOM SSA CHANGE LENGTH? STB LNGH YES...SET IN CORRECT LENGTH ISZ WTLIN GET RETURN ADDRESS JMP WTLIN,I RETURN SPC 3 BAD JSB CMER JMP DLST0 SKP * * SUBROUTINE TO MOVE NAME TO OUTPUT BUFFER * CALLING SEQUENCE * JSB NMOVE * DEF DESTINATION BUFFER * A REG=SOURCE ADDRESS * WILL MOVE 3 WORDS * NMOVE NOP LDB NMOVE,I GET DESTINATION ADDRESS STB NMOV1 SAVE IN TEMP LOCATION LDB M3 GET DOWN COUNT STB NMOV2 NMOVA LDB A,I GET DATA STB NMOV1,I SAVE DATA INA GET NEXT ADDRESS ISZ NMOV1 ISZ NMOV2 JMP NMOVA NOT DONE...CONTINUE ISZ NMOVE GET TO RETURN ADDRESS JMP NMOVE,I RETURN SPC 2 NMOV1 NOP NMOV2 NOP SKP * * SUBROUTINE TO KEEP DISPLACEMENT ON DISK OK * CALLING SEQUENCE * JSB SCFX * NO MORE DIRECTORY TRACK RETURN * NORMAL RETURN * A REG=DISPLACEMENT * UPON RETURN * WILL UPDATE WTRCK,WSEC,AND DISP AS REQUIRED * ASSUMES DISP STARTS WITH ADDRESS OF BUFFER * SCTRK MUST BE SET TO # OF SECTORS/TRACK * IF TRACK CHANGES, NTRCK=LAST DIRECTORY TRACK-1 * ALL SECTORS ARE ASSUMED TO BE 128 WORDS LONG * SPC 1 SCFX NOP CMA,INA NEGATE ADDRESS ADA DBFA GET DISPLACEMENT CMA,INA MAKE IT POSITIVE CLB CHECK IF OVERFLOW DIV D128 CROSS A SECTOR BOUNDRY ADB DBFA GET DISPLACEMENT AS AN ADDRESS STB DISP SAVE DISPLACEMENT ADDRESS SZA,RSS  SECTOR CHANGE JMP SCFXA NO LDA D14 YES...GET TO NEXT SECTOR ADA WSEC GET TO NEXT SECTOR ADDRESS CLB DIV SCTRK SEE IF WE HAVE A HAVE LOOPED AROUND STB WSEC SAVE NEW SECTOR ADDRESS SZA IF NO ROLLOVER OR SZB NO NEW TRACK NEEDED JMP SCFXA DON'T UPDATE TRACK ADDRESS CCB UPDATE TRACK ADDRESS ADB WTRCK GET TO NEXT TRACK CPB NTRKS DONE? JMP SCFX,I YES STB WTRCK NO...SET IN NEW TRACK ADDRESS SCFXA LDA D128 DO A 128 WORD READ JSB GETSC ISZ SCFX GET TO RETURN JMP SCFX,I RETURN SKP * * SUBROUTINE TO READ A SECTOR * CALLING SEQUENCE * JSB GETSC * THE FOLLOWING MUST BE SET UP * WTRCK,WSEC,WCLU * GETSC NOP STA BUFL SAVE BUFFER READ LENGTH LDA WTRCK GET CURRENT TRACK ADDRESS CPA CTRCK SAME AS ONE WE GOT NOW? RSS YES JMP GTSC1 NO...GO READ IT LDA WSEC IS IT THE SAME SECTOR CPA CSEC ? RSS YES JMP GTSC1 NO...GO READ IT LDA WCLU SAME LU? CPA CCLU JMP GETSC,I YES...DON'T READ SECTOR GTSC1 LDA WCLU SET UP AS CURRENT STA CCLU LDA WTRCK STA CTRCK LDA WSEC STA CSEC JSB EXEC GO READ A SECTOR DEF *+7 DEF D1 DEF WCLU DEF DBUF DEF BUFL DEF WTRCK DEF WSEC JMP GETSC,I GOT SECTOR, RETURN SPC 2 CTRCK OCT -1 CSEC OCT -1 CCLU OCT -1 BUFL NOP SKP * * SUBROUTINE CONVERT BINARY TO DECMAL * CALLING SEQUENCE * JSB BNDEC * DEF BUFFER WHERE TO ASC * A REG=BINARY # * BNDEC NOP STA DTEMP SAVE BINARY # LDB BNDEC,I GET ADDRESS WHERE TO ASC CLE,ELB CONVERT TO BYTE ADDRESS STB DTMP1 SAVE BYTE ADDRESS ISZ BNDEC GET TO RŗETURN ADDRESS LDA DNMA GET ADDRESS OF DIVISORS STA DTMP2 SAVE FOR DIVIDING LDA M5 GET LOOP COUNT STA DTMP3 SAVE IN DOWN COUNTER LDA C40 GET A SPACE CHARACTERR LDB DTEMP GET BINARY VALUE SSB,RSS IF NEGATIVE...CONVERT JMP BNDCB NOT NEGATIVE CMB,INB NEGATIVE, MAKE POSITIVE STB DTEMP LDA C55 SET IN NEG SIGN BNDCB LDB DTMP1 GET BYTE ADDRESS JSB SBYTE SAVE SIGN ISZ DTMP1 GET NEXT BYTE ADDRESS BNDCA LDA DTEMP GET BINARY # CLB GET A ZERO DIV DTMP2,I STB DTEMP SAVE REMAINDER ADA C60 CONVERT TO ASC LDB DTMP1 GET CURRENT BYTE ADDRESS JSB SBYTE SAVE ASC BYTE ISZ DTMP2 GET NEXT DIVISOR ISZ DTMP1 GET NEXT BYTE ADDRESS ISZ DTMP3 DONE? JMP BNDCA NO JMP BNDEC,I RETURN SPC 1 C55 OCT 55 DTEMP NOP DTMP1 NOP DTMP2 NOP DTMP3 NOP DNMA DEF DNM DNM DEC 10000,1000,100,10,1 SKP * * SBROUTINE TO GET A BYTE * CALLING SEQUENCE * JSB ABYTE * B REG= BYTE ADDRESS * A REG= BYTE * UPON RETURN * B AND A REG UNCHANGED * ABYTE NOP CLE,ERB CONVERT TO WORD ADDRESS LDA B,I GET WORD SEZ,RSS CHECK WHICH HALF ALF,ALF AND B377 GET BYTE ELB,CLE GET BYTE ADDRESS AGAIN JMP ABYTE,I RETURN SPC 3 * * SUBROUTINE TO STORE A BYTE * CALLING SEQUENCE * JSB SYBTE * A REG CONTAINS THE BYTE * B REG CONTAINS THE BYTE ADDRESS * SBYTE NOP AND B377 MASK ALL BUT LOWER 8 BITS STA STEMP SAVE IN TEMP LOCATION CLE,ERB CONVERT TO WORD ADDRESS LDA B,I GET WORD SEZ,RSS RIGHT OR LEFT HALF? ALF,ALF LEFT AND UB377 MASK ALL BUT UPPER 8 BITS IOR STEMP OR IN NEW HALF SEZ,RSS LE$FT OR RIGHT? ALF,ALF LEFT STA B,I SAVE WORD ELB,CLE GET BYTE ADDRESS AGAIN JMP SBYTE,I RETURN SPC 1 STEMP NOP SPC 3 CMER NOP DST ERVAL JSB EXEC DEF *+5 DEF D2 DEF D1 DEF ERMS DEF ERML * JMP CMER,I SPC 3 ERMS ASC 9,DLIST: COMM. ERROR ERVAL BSS 2 ERML DEC 11 SKP * * DCB LAYOUT * STYP NOP STREAM TYPE BSS 1 NOT USED STAT NOP STATUS ECOD NOP ERROR CODE LNGH NOP LENGTH WORD FLTR ASC 3, NAME FILTER...0..NO FILTER MCODF NOP MASTER SECURITY CODE CRLU NOP LU OF CART. TO DO FTYP NOP FILE TYPE FILTER BROUT NOP ADDRESS OF CURRENT ROUTINE TO PROCESS 0=START WCLU NOP CURRENT LU FOR DISK READ WTRCK NOP CURRETN TRACK TO READ WSEC NOP CURRENT SECTOR TO READ DISP NOP DISPLACEMENT IN BUFFER SCTRK NOP # OF SECTORS/TRACK LUDSP NOP DISPLACEMENT IN DIRECTORY LU NTRKS NOP # OF DIRECTORY TRACKS * * HERE WE FILL TO GET TO 35 WORD REQ * BSS 5 RLU NOP DEFINED IN QUEUE...LU OF WHO WE ARE TALKING TO BSS 8 TAGS BSS 2 SPC 2 RPLYL NOP LENGTH OF DIRECTORY PARMB B377 OCT 377 C40 OCT 40 C60 OCT 60 D3 DEC 3 D8 DEC 8 UB377 OCT 177400 D35 DEC 35 D21 DEC 21 D14 DEC 14 D20 DEC 20 B4000 OCT 4000 D16 DEC 16 D128 DEC 128 D4 DEC 4 D1 DEC 1 D6 DEC 6 D0 DEC 0 D2 DEC 2 M1 DEC -1 M3 DEC -3 M5 DEC -5 M6 DEC -6 MSK1 OCT 77 MSK3 OCT 300 IRWW OCT 100002 DUMMY NOP IMODE NOP B7777 OCT 77777 BIT14 OCT 40000 FLTRA DEF FLTR FLTRC OCT 52 TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP * TATSD EQU 1756B SECT2 EQU 1757B DBFA DEF DBUF MSCA DEF DBUF+126 CLSSN NOP SPC 1 * * DEFINE OUTPUT LINE INFO * HEAD1 DEC 27 SPACA ASC 1, *B@< ASC 3,ILAB= CRNA ASC 3, ASC 1, ASC 7,REMOTE DLIST ASC 2,CR#= LWA ASC 3, ASC 1, ASC 5,DIR TRKS= DTRKA ASC 3, SPC 1 HEAD2 DEC 16 ASC 16, NAME TYPE #BLKS/LU SCODE SPC 1 NOCRM DEC 8 ASC 8,DISK NOT MOUNTED DLINA DEC 16 ASC 1, DNAMA ASC 3, ASC 1, DTYPA ASC 3, ASC 1 DBSLU ASC 3, ASC 1, DSECA ASC 3, SPC 2 BLNKL DEC 1 OCT 20040 DBUF BSS 128 SPC 3 END EQU * END DLIST *B  91700-18107 1609 S 0122 DS1/B CCE MODULE: UPLIN              H0101 NASMB,R,L,C HED UPLIN 91700-16107 REV A * (C) HEWLETT-PACKARD CO. 1976 * NAM UPLIN,3,3 91700-16107 REV A 760225 SUP SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * * * NAME: UPLIN * SOURCE: 91700-18107 * RELOC: 91700-16107 * PGMR: CHUCK WHELAN [12/5/75] * * * SPC 2 * EXTERNAL REFERENCES EXT EXEC,$LIBR,$LIBX EXT MESSS EXT #RSAX EXT #LDEF,#RFSZ,#RXCL EXT RNRQ,#BUSY,#QRN SPC 3 * UPLIN FOR DS-1B' UPLIN IS SCHEDULED EVERY 5 SECONDS TO PERFORM * THE FOLLOWING FUNCTIONS: * 1. CHECKS/WAITS FOR SYSTEM QUIESCENCE. PRINTS OPERATOR MESSAGE * WHEN QUIESCENCE IS ACHIEVED. * 2. UPDATES SLAVE "TCB" TIMEOUT VALUES, AND IF A TRANSACTION HAS * TIMED OUT, DOES THE FOLLOWING: * A) IF MONITOR IS I/O SUSPENDED DOES NOTHING UNLESS THE EQT TIMER * IS ZERO AND THE "D" BIT IS SET IN WHICH CASE IT STORES A -1 IN * EQT 15 TO FORCE A QUICK TIMEOUT TO THE DRIVER. * B) IF MONITOR IS IN ANY OTHER STATUS, THE TCB IS PURGED, AND IF * THE BREAK FLAG WASN'T SET AND THE EQT "AND DATA" BIT WAS SET, * A STOP IS SENT VIA THE DRIVER. IF THE MONITOR ABORT FLAG IS * SET, THE MONITOR IS THEN ABORTED. * 3. AFTER PROCESSING EACH SLAVE TCB LIST, UPLIN CHECKS TO SEE IF * THE CORRESPONDING MONITOR IS DORMANT, AND IF SO, RESCHEDULES IT. * 4. UPDATES MASTER TCB TIMEOUT VALUES, AND IF A MASTER TCB TIMES-OUT, * IT CHECKS THE PROGRAM STATUS. IF DORMANT, THE MASTER CLASS NUMBER * AND THE TCB ARE CLEARED. IF I/O SUSPENDED AND EQT15 IS ZERO * IT STORES A -1 IN EQT15 TO FORCE A QUICK TIME-OUT TO THE DRIVER. * IF IN A "WAIT" STATE AND THE I/O COMPLETION FLAG IN THE TCB * IS SET, IT WRITES A NULL REQUEST TO THE MASTER REQUESTER'S * CLASS. * 5. RESCHEDULES "GRPM","SRPM", OR "QCLM" IF THEY ARE DORMANT. * 6. CHECKS FOR ANY DOWNED COMMUNICATIONS EQTS, AND DOES "ENABLE * LISTEN" REQUESTS TO ANY FOUND. * * * EQTA EQU 1650B FWA OF EQUIPMENT TABLE DRT EQU 1652B FWA OF DEVICE REFERENCE TABLE LUMAX EQU 1653B NO OF LOGICAL UNITS (IN DRT) INTBA EQU 1654B FWA OF INTERRUPT TABLE BPA1 EQU 1742B FWA RT DISC RES BP LINK AREA SKP UPLIN EQU * * * CHECK FOR SYSTEM QUIESCENCE * LDA GLCW GET GLOBAL RN LOCK/CLEAR COMMAND RAL,ARS SET THE NO-WAIT BIT QRNWT STA RNCW SAVE CONFIGURED CONTROL WORD * JSB RNRQ GO TO RTE TO REQUEST DEF *+4 RESOURCE NUMBER STATUS, DEF RNCW OR TO AWAIT CLEARING OF THE RN. DEF #QRN ADDR OF QUIESCENT RN DEF TEMP RETURN STATUS JMP SLVTS IGNORE ERRORS * LDA RNCW IF PROGRAM HAS BEEN AWAITING CPA GLCW THE CLEARING OF #QRN, THEN JMP SLVTS BYPASS THE MESSAGE CODE. * LDA TEMP QRN STATUS LDB #BUSY ACTIVE TCB COUNT CPA K7 IF QRN WAS LOCKED GLOBALLY, SZB AND NO ACTIVE TCB'S EXIST, SKIP JMP SLVTS ELSE BYPASS QUIESCENT CODE. * JSB EXEC INFORM DEF *+5 THE DEF K2 OPERATOR DEF K1 THAT THE DEF QMES SYSTEM DEF K10 IS QUIESCENT. * LDA GLCW RETURN TO IMMOBILIZE UPLIN JMP QRNWT SKP * * THIS SECTION PROCESSES SLAVE TRANSACTIONS & MONITORS * SLVTS LDA BPA1 CPA K2 IS THIS AN RTE-III OR RTE-IV? RSSI RSS YES JMP SLVT2 NO LDB RSSI GET "RSS"  STB MODI1 MODIFY TO DO CROSS-MAP STORE STB MODI2 MODIFY TO DO CROSS-MAP LOAD * SLVT2 LDA NAMES ADDR OF SLAVE MONITOR NAMES STA NPNT LDA K2 STA ST.LS SLAVE/STREAM ID FOR #RSAX ADA #LDEF STA LPNT PNTR TO SLAVE LIST HEADER ADDRS IN RES LDA N10 NUMBER OF MONITORS STA LCNT COUNTER= - # OF MONITORS * CKLST LDB LPNT,I GET ADDRESS OF HEADER INB STB MCLSA SAVE ADDR OF MONITOR CLASS # INB STB MSEGA ADDR OF MONITOR'S ID SEGMENT ADDR LDB LPNT,I NXTCB STB LSTAD SAVE ADDR OF ADDR OF NEXT TCB * * ENTER HERE TO CHECK EACH SLAVE TCB * CKTCB LDB LSTAD PICK UP ADDR OF ADDR OF TCB JSB LODWD (CROSS)LOAD ADDR OF TCB SZA,RSS IS IT THERE? JMP CKMON NO, END OF THIS LIST JSB TSTCB BUMP TIMER IN TCB JMP NXTCB DIDN'T TIMEOUT, CHECK NEXT TCB SKP * * SLAVE TRANSACTION HAS TIMED OUT * INB TCB ADDR+1 JSB LODWD PICK UP 2ND WORD STA TEMP AND SCMSK ISOLATE SELECT CODE (BITS 13-8) STA PRAM1 * LDA MSEGA,I GET MONITOR'S ID SEG ADDR RAL,CLE,ERA CLEAR SIGN ADA K15 POINT TO STATUS LDA 0,I AND K15 ISOLATE STATUS CPA K2 IS IT IN "I/O SUSPEND"? JMP SLVCK YES, JUMP INB COMPUTE ADDR OF TIME-TAGS JSB LODWD (CROSS)LOAD 1ST TIME TAG WORD STA TAGS INB JSB LODWD (CROSS)LOAD 2ND TIME TAG WORD STA TAGS+1 * JSB #RSAX DELETE SLAVE TCB DEF *+5 DEF K3 DEF ST.LS SLAVE/STREAM ID DEF PRAM1 SELECT CODE DEF TAGS TIME-TAGS * SZA SKIP IF ENTRY DELETED JMP NXLST WHOOPS! IGNORE THIS LIST LDA TEMP RAL,SLA TEST BREAK FLAG JMP CKABT SET, NO STOP REQUIRED SSA,RSS WAS IT A REQ. & DATA? JMP CKABT NO, NO STOP REQUIRED * * SEND A STOP TO CLEAR THE PENDING DATA REQUEST JSB GTEQT COMPUTE ADDR OF EQT LDA EQTA CMA,INA ADA 1 THIS ADDR - 1ST EQT ADDR CLB STB LU DIV K15 COMPUTE RELATIVE EQT NUMBER STA TEMP LDA LUMAX # OF LUS CMA,INA STA CNTR COUNT TO CORRECT LU NUMBER LDB DRT DEVICE REF TABLE ADDRESS * SEARCH FOR THIS EQT NUMBER IN DEVICE REFERENCE TABLE FNDEQ ISZ LU LU NUMBER FOR THIS DRT ENTRY LDA 1,I PICK UP DRT ENTRY AND B77 ISOLATE EQT # CPA TEMP IS THIS OUR EQT? JMP STPIT YES INB BUMP DRT POINTER ISZ CNTR JMP FNDEQ TRY NEXT JMP CKABT SC MUST BE INVALID, IGNORE IT * * IF MONITOR IS I/O SUSPENDED ON COMM. EQT & EQT15=0, SET EQT15=-1 SLVCK JSB GTEQT COMPUTE EQT ADDRESS LDA MSEGA,I GET ID SEG ADDR OF MONITOR RAL,CLE,ERA CLEAR SIGN CPA 1,I IS MONITOR ID BSEG ADDR IN EQT1? JSB EQTIM YES, CHECK/SET EQT15 LDB XACTA JMP NXTCB CHECK NEXT TCB * * CALL DVR TO SEND A STOP STPIT JSB EXEC DEF *+3 DEF K3N DEF LU MODE 0 = SEND STOP NOP * * CHECK MONITOR ABORT FLAG CKABT LDA MSEGA,I SSA,RSS SKIP IF SET JMP CKTCB NOT SET, DON'T ABORT IT, CHECK NEXT TCB * * ABORT THE MONITOR BY GENERATING AN "OF,(NAME),1" MESSAGE * LDA NPNT STA TEMP LDB COMMA COMMA IN 1ST LHW LDA TEMP,I 1ST 2 CHARACTERS OF NAME LSL 8 POSITION "," AND 1ST CHARACTER IN B REG STB MSNAM MOVE TO FIELD FOR "OF" LSL 8 ISZ TEMP LDA TEMP,I GET 3RD & 4TH CHARS OF NAME LSL 8 POSITION 2ND & 3RD CHARS IN B REG STB MSNAM+1 LSL 8 ISZ TEMP LDA TEMP,I GET 5TH CHAR OF NAME LSL 8 POSITION 4TH & 5TH CHARS IN 4B REG STB MSNAM+2 * JSB MESSS CALL RTE MESSAGE PROCESSOR DEF *+3 DEF OFMES "OF,XXXXX,1" DEF K10 NOP JMP UPMON NOW GO & RESCHEDULE IT * * THIS CODE CHECKS MONITOR STATUS TO SEE IF IT HAS ABORTED CKMON LDA MSEGA,I MONITORS ID SEGMENT ADDRESS RAL,CLE,ERA CLEAR OFF SIGN BIT SZA,RSS ADDR SPECIFIED? JMP NXLST NO ADA K15 COMPUTE ADDR OF STATUS LDA 0,I AND K15 ISOLATE STATUS BITS SZA SKIP IF DORMANT JMP NXLST ELSE MONITOR IS STILL GOING * * RESCHEDULE MONITOR UPMON LDA MCLSA,I GET CLASS NUMBER OF MONITOR RAL,CLE,ERA CLEAR SIGN BIT STA PRAM1 LDB NPNT,I 1ST 2 CHARS OF MONITOR NAME CPB RFASC IS IT "RF" JMP RFAGO DO "RFAM" SCHEDULE * JSB EXEC SCHEDULE MONITOR, PASS CLASS NUMBER DEF *+4 DEF K10N NPNT NOP ADDR OF MONITOR NAME DEF PRAM1 NOP JMP NXLST * RFAGO JSB EXEC SCHEDULE "RFAM" DEF *+7 DEF K10N SCHEDULE WITH "NO ABORT" DEF RFASC DEF K99 DEF #RFSZ NUMBER OF RFA ENTRIES FROM "RES" DEF PRAM1 CLASS NUMBER DEF #RXCL RFAEX CLASS NOP * * DONE WITH THIS SLAVE LIST, START ON NEXT NXLST ISZ NPNT ISZ NPNT ISZ NPNT UPDATE POINTER TO MONITOR NAME ISZ LPNT POINT TO NEXT LIST HEADER ADDRESS LDA ST.LS ADA B400 NEXT SLAVE/STREAM ID STA ST.LS ISZ LCNT COUNT # OF MONITORS JMP CKLST PROCESS NEXT LIST * * DONE WITH SLAVE MONITOR/TRANSACTION PROCESSING * SKP * * PROCESS MASTER TCBS * LDB #LDEF ADDR OF LIST HEADER ADDRS INB LDB 1,I GET ADDR OF MASTER HEADER CKMST STB LSTAD SAVE ADDR OF NEXT TCB'S ADDR CKMS2 LDB LSTAD PICK-UP ADDR OF ADDR OF NEXT TCB JSB LODWD (CROSS)LOAD ADDR OF NEXT TCB SZA,RSS JMP RSCHD NO MORE MASTER TCBS TO PROCESS * JSB TSTCB UPDATE THIS TCB'S TIME JMP CKMST DIDN'T TIME-OUT, DO NEXT TCB * * MASTER TCB HAS TIMED OUT * ADB K2 POINT TO 3RD WORD OF MASTER TCB JSB LODWD (CROSS)LOAD CLASS NUMBER IOR BIT15 CLASS # WITH "NO WAIT" BIT SET STA PRAM1 * INB POINT TO 4TH WORD OF MASTER TCB JSB LODWD (CROSS)LOAD ID SEGMENT ADDRESS RAL,CLE,ERA CLEAR OFF SIGN BIT ADA K15 POINT TO STATUS LDA 0,I AND K15 ISOLATE STATUS SZA,RSS DORMANT? JMP CREPT YES, CLEAR IT ALL CPA K3 IS IT "WAIT" STATE? JMP MWAIT YES CPA K2 IS IT IN I/O SUSPEND? JSB EQTIM YES, CHECK/SET EQT15 JMP NXMST * * MASTER REQUESTER IS IN STATE 3 AFTER TCB TIMEOUT MWAIT ADB N2 POINT TO 2ND TCB WORD JSB LODWD (CROSS)LOAD IT SSA,RSS TEST ITS I/O COMPLETION FLAG JMP NXMST NOT SET, DO NOTHING * * WRITE A NULL REQUEST INTO THE MASTER REQUESTERS CLASS JSB EXEC DEF *+8 DEF K20N CLASS WRITE/READ, NO ABORT DEF K0 DEF DUMMY DEF K0 ZERO LENGTH DEF DUMMY DEF DUMMY DEF PRAM1 CLASS NUMBER * K0 NOP * NXMST LDB XACTA GET ADDR OF NEXT TCB ADDR JMP CKMST GO CHECK FOR NEXT TCB * * MASTER REQUESTER IS DORMANT, CLEAR CLASS AND TCB * CREPT CCA SET THE RELEASE RE-TRY SWITCH STA TEMP TO -1 * CLRTN JSB EXEC GO TO RTE TO RELEASE CLASS NUMBER DEF *+5 DEF K21N CLASS GET/NO ABORT DEF PRAM1 MASTER CLASS/RELEASE/NO WAIT DEF K0 DEF K0 RSS IGNORE ERRORS ISZ TEMP RELEASE PROCESSING COMPLETED? JMP CLRES YES. GO TO CLEAR THE TCB INA,SZA NO. ARE ALL PENDING REQUESTS CLEARED? JMP CREPT T` NO. CONTINUE TO CLEAR REQUESTS * LDA PRAM1 GET THE CLASS NUMBER AGAIN AND CLMSK EXCLUDE THE NO-DE-ALLOCATION BIT(#13) STA PRAM1 RESTORE THE MODIFIED CLASS WORD JMP CLRTN RETURN FOR FINAL DE-ALLOCATION * * NOW CLEAR OUT THE MASTER REQUESTERS TCB CLRES JSB #RSAX CALL #RSAX TO PURGE MASTER TCB DEF *+4 DEF K3 DEF K1 STREAM-LIST = MASTER DEF PRAM1 CLASS NUMBER * SZA,RSS SKIP IF TCB NOT DELETED, IGNORE REST JMP CKMS2 CONTINUE WITH NEXT TCB ON CHAIN * SKP * * RESCHEDULE "GRPM","SRPM", "QCLM", OR "RFAEX" IF THEY ARE DORMANT * RSCHD JSB EXEC TRY TO SCHEDULE GRPM (IF DORMANT) DEF *+3 DEF K10N DEF NGRPM NOP * JSB EXEC TRY TO SCHEDULE SRPM (IF DORMANT) DEF *+3 DEF K10N DEF NSRPM NOP * JSB EXEC TRY TO SCHEDULE QCLM (IF DORMANT) DEF *+3 DEF K10N DEF NQCLM NOP * SKP * * CHECK FOR DOWNED COMMUNICATION LINES * LDA LUMAX NUMBER OF LOGICAL UNITS CMA,INA STA LCNT SET COUNTER LDA B101 STA LU MODE= 1 FOR "ENABLE LISTEN" LDA DRT ADDR OF DEVICE REFERENCE TABLE UPEQ2 STA LPNT LDA 0,I PICK-UP DRT ENTRY AND B77 ISOLATE EQT NUMBER ADA N1 MPY K15 REL.POS. IN EQT ADA EQTA POINT TO 1ST WORD OF EQT ADA K4 ADDR OF EQT5 LDB 0 LDA 0,I CONTENTS OF EQT 5 ALF,ALF AND B77 ISOLATE EQUIPMENT TYPE CODE CPA B65 DVR65? JMP UPEQ4 YES, SEE IF IT'S UP * UPEQ3 ISZ LU BUMP LU IN CONTROL WORD LDA LPNT INA INCREMENT DRT POINTER ISZ LCNT JMP UPEQ2 PROCESS NEXT DRT ENTRY * * ALL LU'S HAVE BEEN CHECKED, EXIT UPLIN * JSB EXEC DEF *+2 DEF K6N * * PROCESS COMMUNICATIOrNS EQT * UPEQ4 ADB K7 POINT TO EQT12 DLD 1,I GET CONTENTS OF EQT12 & EQT13 RAL,RAL ALF,SLA IS IT IN LISTEN MODE(BIT 10)? JMP UPEQ3 YES, OK ADB K5 COMPUTE ADDR OF EQTX6 LDA 1,I SZA,RSS HAS THIS EQT BEEN INITIALIZED? JMP UPEQ3 NO * * ISSUE AN "ENABLE LISTEN" REQUEST JSB EXEC DEF *+3 DEF K3N DEF LU CONTROL MODE = 1 NOP JMP UPEQ3 SKP * * SUBROUTINES * SPC 2 * * THIS ROUTINE BUMPS THE TIMEOUT IN A TCB * TSTCB NOP LDB 0 STB XACTA SAVE ADDRESS OF THIS TRANSACTION IFZ LIA 1 ALF,SLA IS SW REG BIT 12 SET? JSB LOGER YES, LOG TCB ON LU #6 XIF INB POINT TO 2ND WORD OF TCB JSB LODWD (CROSS)LOAD TIMER AND B377 ISOLATE IT CPA B377 IS IT ABOUT TO ROLL OVER? JMP TSTC5 YES, DON'T BUMP IT, RETURN + 2 * JSB LODWD (CROSS)LOAD TIMER AGAIN INA BUMP TIMER JSB $LIBR LOWER FENCE NOP MODI1 NOP RSS HERE IF RTE-III OR RTE-IV JMP TSTC3 XSA 1,I STORE INTO SYSTEM MAPPED LOCATION RSS * * BELOW INSTRUCTION IS EXECUTED FOR RTE-II SYSTEMS ONLY TSTC3 STA 1,I STORE UPDATED TIMER IN TCB JSB $LIBX RAISE FENCE DEF *+1 DEF *+2 * TSTC5 ISZ TSTCB RETURN +2 FOR TCB TIMED-OUT LDB XACTA TCB ADDR INTO B REG JMP TSTCB,I RETURN SPC 3 * * IF EQT15 IS ZERO, SET IT TO -1 TO FORCE A QUICK DRIVER TIMEOUT * EQTIM NOP JSB GTEQT COMPUTE EQT ADDRESS ADB K14 POINT TO EQT15 LDA 1,I PICK-UP CURRENT TIMER SZA IS IT RUNNING? JMP EQTIM,I YES, LEAVE IT ALONE CCA JSB $LIBR LOWER FENCE NOP STA 1,I SET QUICK TIMEOUT (-1) IN EQT15 JSB $LIBX RAISE FENCE DEF EQTIM SPC 3 * * THIS ROUTINE COMPUTES EQT ADDRESS FROM SELECT CODE * GTEQT NOP LDB XACTA ADDR OF TRANSACTION INB JSB LODWD (CROSS)LOAD 2ND WORD ALF,ALF RIGHT JUSTIFY SELECT CODE AND B77 ISOLATE IT ADA INTBA USE IT TO INDEX INTERRUPT TABLE ADA N6 TABLE STARTS AT 6 LDB 0,I LOAD EQT ADDRESS JMP GTEQT,I RETURN IT IN B REG SPC 3 * * SUBROUTINE TO LOAD WORD FROM ALTERNATE MAP (IF RTE-III OR IV) * LODWD NOP MODI2 LDA 1,I GET WORD FROM TCB (RSS IF DMS SYSTEM) JMP LODWD,I RETURN IF RTE-II XLA 1,I LOAD WORD FROM ALTERNATE MAP JMP LODWD,I SKP * * DATA AREA * PRAM1 NOP LU NOP RNCW NOP LPNT NOP LCNT NOP CNTR NOP ST.LS NOP XACTA NOP LSTAD NOP MCLSA NOP MSEGA NOP TEMP NOP TAGS DEC 0,0 DUMMY NOP * K1 DEC 1 K2 DEC 2 K3 DEC 3 K4 DEC 4 K5 DEC 5 K7 DEC 7 K10 DEC 10 K14 DEC 14 K15 DEC 15 K99 DEC 99 B65 OCT 65 B77 OCT 77 COMMA OCT 54 B101 OCT 101 B377 OCT 377 B400 OCT 400 BIT15 OCT 100000 K3N OCT 100003 K6N OCT 100006 K10N OCT 100012 K20N OCT 100024 K21N OCT 100025 GLCW OCT 40006 GLOBAL RN LOCK/CLEAR - NO ABORT SCMSK OCT 037400 CLMSK OCT 157777 N1 DEC -1 N2 DEC -2 N6 DEC -6 N10 DEC -10 * OFMES ASC 1,OF MSNAM BSS 3 ASC 1,,1 * QMES ASC 10, SYSTEM IS QUIESCENT * NGRPM ASC 3,GRPM NSRPM ASC 3,SRPM NQCLM ASC 3,QCLM * NAMES DEF *+1 LIST OF SLAVE MONITOR NAMES ASC 3,SMON 0 ASC 3,DLIST 1 ASC 3,PLOS 2 ASC 3,NPRGL 3 ASC 3,PTOPM 4 ASC 3,EXECM 5 RFASC ASC 3,RFAM 6 ASC 3,OPERM 7 ASC 3,PLOSB 8 ASC 3,PROGL 9 * IFZ * NEND DEF * SKP * * THIS ROUTINE IS CALLED TO LOG AN ACTIVE TCB ON LU 6 * LOGER NOP INB 2ND WORD OF TCB  JSB LODWD ALF,ALF RIGHT JUSTIFY SELECT CODE JSB CVOCT CONVERT IT TO ASCII STA SC STORE IN PRINT LINE * JSB LODWD CONVERT LOW 2 DIGITS OF TIMER JSB CVOCT TO OCTAL ASCII STA TIMER+1 JSB LODWD ALF,ALF RAL,RAL RIGHT JUSTIFY HIGH DIGIT AND K3 IOR ASC.0 CONVERT IT TO ASCII STA TIMER * LDA NPNT ADDR OF CURRENT MONITOR NAME CPA NEND IS IT A MASTER TCB? JMP LOG5 YES, USE NAME OF MASTER REQUESTER * JSB LODWD SLAVE TCB, NOW GET BREAK FLAG RAL INTO BIT 0 AND K1 IOR ASC.0 ASCII 0 OR 1 STA BREAK STORE IN PRINT LINE * JSB LODWD GET "D" BIT RAL,RAL AND K1 IOR ASC.0 ASCII 0 OR 1 STA DBIT STORE IN PRINT LINE * INB POINT TO TIME TAGS IN TCB LDA T1AD STA PNT1 POINT TO PRINT LINE FIELD JSB OCT3 CONVERT TO OCTAL ASCII INB NOW 2ND WORD OF TIME TAGS ISZ PNT1 ISZ PNT1 JSB OCT3 TO OCTAL ASCII * LDB NPNT ADDR OF MONITOR NAME LDA K35 LENGTH OF PRINT LINE JMP LOG8 * * ENTER HERE FOR MASTER TCB LOG5 ADB K2 POINT TO ID SEG ADDR IN TCB JSB LODWD PICK-UP ID SEG ADDR LDB 0 RBL,CLE,ERB CLEAR OFF BIT 15 ADB K12 POINT TO NAME FIELD LDA K14 PRINT SHORT RECORD FOR MASTER TCB * LOG8 STA RECL SAVE PRINT LINE LENGTH (WORDS) LDA 1,I STA NAMER 1ST 2 CHARS OF NAME TO PRINT LINE INB LDA 1,I STA NAMER+1 3RD & 4TH CHARS OF NAME INB LDA 1,I AND HIBYT IOR LBLNK FORCE BLANK IN RHW STA NAMER+2 5TH WORD OF NAME + BLANK * JSB EXEC LOG PRINT LINE TO LU #6 DEF *+5 DEF K2 DEF K6 DEF LOGL DEF RECL * LDB XACTA RESTORE TCB EB@ - DS1 INITIALIZATION * (C) HEWLETT-PACKARD CO. 1976 * * NAM LSTEN,3,25 91700-16109 REV.A 760308 SPC 1 ENT LSTEN SPC 1 EXT READF,CLOSE,OPEN,RNRQ,PRTN,MESSS,REIO,PGMAD,CNUMD EXT EXEC,$LIBR,$LIBX,$CGRN,RMPAR,PARSE,#PRMY,#RSAX EXT #FWAM,#GPRN,#MSTO,#NULL, #QRN,#RTRY,#SRPM EXT #ST00,#ST01,#ST02,#ST03,#ST04,#ST05,#ST06,#ST07 EXT #ST08,#ST09,#SVTO,#TBRN,#WAIT,#SWRD,#BUSY EXT #GRPM,#QCLM,#NCLR,#SCLR,#RFSZ,#RXCL,#SBIT,#PLOG EXT #QLOG SUP * * NAME: LSTEN * SOURCE: 91700-18109 * RELOC.: 91700-16109 * PGMR: C.C.H. [ 03/08/76 ] * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** SPC 5 * LSTEN SERVES A DUAL PURPOSE. IT IS USED, PRIMARILY, TO INITIALIZE * THE DISTRIBUTED SYSTEMS NETWORK THROUGH ESTABLISHMENT OF THE * REQUIRED RESOURCES (CLASS NUMBERS, RESOURCE NUMBERS, TRANSACTION * LISTS, POINTERS, TIMERS, AND CONSTANTS), THROUGH THE ACTIVATION * OF 'LISTEN' MODE FOR EACH SPECIFIED COMMUNICATION LINE INTERFACE, * AND BY SCHEDULING THOSE MONITOR-PROGRAMS WHICH SERVICE INCOMING * REQUESTS FROM REMOTE NETWORK NODES. SPC 3 * LSTEN'S SECONDARY PURPOSE IS TO ALLOW THE USER TO RE-ENABLE A * COMMUNICATION LINE INTERFACE, WHICH HAS BEEN INACTIVATED BY * UNFORESEEN MALFUNCTIONS. IT MAY ALSO BE USED TO BRING THE * NETWORK TO A QUIESCENT STATE, IN ORDER TO ADJUST SYSTEM TIMING, * OR FOR ANY OTHER PURPOSE WHICH REQUIRES SUSPENSION OF NETWORK * OPERATIONS, AT THIS PARTICULAR NODE. * SKP * SCHEDULING FOR INITIALIZATION: * ----------------------------- ASPC 1 * *ON,LSTEN,(INPUT LU),(ERROR LU) * * SCHEDULE TO ACCEPT RESPONSES FROM A PERIPHERAL DEVICE. * * NOTE: IF SCHEDULING PARAMETERS ARE NOT SUPPLIED, LU #1 IS THE DEFAULT. * IF THE (INPUT LU) IS LINKED TO AN INTERACTIVE DEVICE, * INTERROGATORY REMARKS WILL BE DISPLAYED ON THE DEVICE. * THE (ERROR LU), IF SPECIFIED, MUST BE LINKED TO AN * INTERACTIVE DEVICE. * * *ON,LSTEN,FI,LE,NM [,SECURITY CODE [,CARTRIDGE NUMBER] ] * * SCHEDULE TO ACCEPT RESPONSES FROM A FILE . * * NOTE: ANY ERRORS WILL BE REPORTED ON LU #1; WILL THEN ABORT. * * * INITIALIZATION QUERIES AND VALID RESPONSES (IN NORMAL ORDER): * ------------------------------------------------------------ SPC 1 * NOTE: CONTROL FILE RESPONSES CONSIST OF ONE RECORD PER RESPONSE. * * /A : ABORT IS A VALID RESPONSE TO ALL QUERIES. * * /LSTEN: PRIMARY SYSTEM? * NOTE: NON-PRIMARY SYSTEMS YIELD, FOR SIMULTANEOUS REQUESTS FROM BOTH. * * /LSTEN: NUMBER OF CURRENT TRANSACTIONS? <1-100 (/D =DEFAULT OF 32)> * NOTE: EACH TRANSACTION USES 4 WORDS OF SYSTEM-AVAILABLE-MEMORY. * * /LSTEN: LINE LU? * /LSTEN: LINE LU? * * /LSTEN: MONITOR NAME? * /LSTEN: MONITOR NAME? * * /LSTEN: INPUT # OF FILES: <1 TO 255 (TOTAL FILES OPEN TO ALL NODES)> * NOTE: ASKED ONLY FOR /D OPTION, OR WHEN SPECIFIED. * * /LSTEN: SECURITY CODE? * * END LSTEN (TERMINATION MESSAGE) * SPC 2 * ONCE THE SYSTEM HAS BEEEN INITIALIZED, SUBSEQUENT SCHEDULING OF * WILL CAUSE ENTRY INTO THE SECONDARY MODE OF OPERATION. * IN THIS MODE, THE USER MAY RE-ENABLE COMMUNICATION LINE INTERFACES, *  SCHEDULE ADDITIONAL MONITORS, ENABLE THE TRANSACTION MONITOR, * OR PLACE THE SYSTEM INTO QUIESCENT MODE. ONCE THE SYSTEM HAS BEEN * MADE QUIESCENT, THE USER MAY, ONLY, ADJUST THE TIMING VALUES, * OR RE-START THE QUIESCENT SYSTEM. * SKP * SCHEDULING FOR SECONDARY MODE OF OPERATION: * ------------------------------------------ SPC 1 * *ON,LSTEN,(LINE LU#),(ERROR LU#) * * THIS PROCEDURE IS USED TO RE-ENABLE THE LINE INTERFACE FOR A * SINGLE LOGICAL UNIT NUMBER. THERE IS NO INTERACTION WITH THE * USER, UNLESS AN ERROR IS DETECTED. IN THE EVENT OF ERROR * DETECTION, THE USER WILL BE QUERIED ON THE (ERROR LU#) DEVICE. * * (INPUT LU#),(ERROR LU#) < DEFAULT = LU#1 FOR BOTH > * / * *ON,LSTEN, * \ * FI,LE,NM [,SECURITY CODE [,CARTRIDGE NUMBER] ] * * IN SECONDARY MODE, SCHEDULING WITH AN INTERACTIVE TERMINAL * AS THE (INPUT LU#) DEVICE, OR UNDER THE CONTROL OF A COMMAND FILE, * WILL ALLOW THE USER TO SELECT SEVERAL POSSIBLE OPERATIONS. * * SECONDARY MODE QUERIES AND VALID RESPONSES: * ------------------------------------------ SPC 1 * NOTE: /A (ABORT ) IS A VALID RESPONSE TO ALL QUERIES. * * **** ACCEPTABLE RESPONSES--NON-QUIESCENT SYSTEM **** * * /LSTEN: OPERATION? * /LSTEN: LU TO BE RE-ENABLED? < LU# (LINKED TO DVR65)> * /LSTEN: LU TO BE RE-ENABLED? * * /LSTEN: OPERATION? * * /LSTEN: OPERATION? * ( P1-P4: OPTIONAL SCHEDULING PARAMETERS FOR PLOG ) * * /LSTEN: OPERATION? * * NOTE: OPTIONAL PARAMETERS FOR ARE PASSED TO , ON * FIRST USE OF EITHER COMMAND. SUBSEQUENT USE OF THE OTHER * COMMAND WILL MERELY ENABLE THE OPTION, WITHOUT CHANGING THE * CURRENT OPERATING MODE OF . * * /LSTEN: OPERATION? * /LSTEN: SYSTEM QUIESCENCE * /LSTEN: SECURITY CODE? < AA (MUST MATCH ORIGINAL SECURITY CODE)> * END LSTEN (TERMINATION MESSAGE) * * /LSTEN: OPERATION? * /LSTEN: MONITOR NAME? * /LSTEN: MONITOR NAME? * /LSTEN: OPERATION? * END LSTEN (TERMINATION MESSAGE) * * /LSTEN: OPERATION? * * ??: LIST COMMANDS * /A: ABORT! * /E: TERMINATE * /L: RE-ENABLE LINE * /Q: QUIESCE NETWORK * /S: SCHEDULE MONITOR(S) * * QUIESCENT SYSTEM ONLY: * /R: RE-START NETWORK * /T: ADJUST TIMING * * * **** ACCEPTABLE RESPONSES--QUIESCENT SYSTEM, ONLY **** * * /LSTEN: OPERATION? * /LSTEN: QUIESCENT RE-START * /LSTEN: SECURITY CODE? < AA (MUST MATCH ORIGINAL SECURITY CODE)> * * /LSTEN: OPERATION? * TIMING MODIFICATION--CURRENT VALUES: * * MASTER T/O = NNNNNN * SLAVE T/O = NNNNNN * REMOTE-BUSY = NNNNNN * REMOTE-QUIET = NNNNNN * * * /LSTEN* MASTER T/O [1 TO 255 (*5 SEC.)]? <1 TO 255 (NUMERIC RESPONSE)> * (INITIAL VALUE = 5) * * /LSTEN: SLAVE T/O [1 TO 255 (*5 SEC.)]? <1 TO 255 (NUMERIC RESPONSE)> * (INITIAL VALUE = 3) * * /LSTEN: REMOTE-BUSY WAIT [1 TO 10 SEC.]? <1 TO 10(NUMERIC)> * (INITIAL VALUE =3) * * /LSTEN: REMOTE-QUIET WAIT [1 TO 10 SEC.]? <1 TO 10 (NUMERIC)> * (INITIAL VALUE =1) * SKP * * ERROR MESSAљGES--INTERPRETATION AND APPROPRIATE ACTION: * ----------------------------------------------------- * * [ ALL MESSAGES ARE PRECEDED BY "/LSTEN:" ] SPC 1 * CLASS I/O ERROR - A REQUIRED CLASS NUMBER CANNOT BE ALLOCATED. * IS ABORTED. THIS ERROR MAY REQUIRE * RE-GENERATION WITH A LARGER ALLOTMENT OF CLASS NO'S. * * END LSTEN - NORMAL COMPLETION MESSAGE. THE TEN CHARACTERS COMPRISING * THE MESSAGE ARE ALSO RETURNED IN THE 5-WORD TEMPORARY * STORAGE AREA OF A SCHEDULER'S I.D. SEGMENT. THEY MAY BE * RECOVERED THROUGH THE USE OF . * IF HAS BEEN ABORTED, THE FIVE WORDS OF RETURNED- * DATA CONSIST OF: 100000B,ER, L,ST,EN * * EOF..INPUT MORE - AN END-OF-FILE CONDITION HAS BEEN DETECTED ON * THE (INPUT LU#) DEVICE. THE QUESTION IS DISPLAYED * ON THE (ERROR LU#) DEVICE, AND THE USER MAY SUPPLY * THE REQUIRED RESPONSE FROM THIS DEVICE. * * ERROR: MON?: AAAAA - THE SPECIFIED MONITOR IS NOT IN THE SYSTEM. * ABORT , USING /A COMMAND, AND THEN LOAD * THE MONITOR INTO THE SYSTEM. RE-START . * * ERROR: STAT: AAAAA - THE MONITOR'S STATUS IS NOT 'DORMANT', AND * THEREFORE IT CANNOT BE SCHEDULED. * ABORT , USING /A COMMAND, AND THEN USE * RTE OPERATOR COMMANDS TO CHANGE THE STATUS. * * FILE ERROR - IMPROPER RESPONSE TO "INPUT # OF FILES". RETRY. * * INVALID NAME! - MONITOR NAME IS NOT RECOGNIZED BY . RETRY. * * INVALID RESPONSE! - OPERATOR ENTRY ERROR. RETRY. * (NO RETRY ALLOWED FOR QUIESCENT OR RE-START MODE) * * LSTEN ABORTED - IF INITIALIZATION WAS IN PROGRESS, THEN ALL ALLOCATED * RESOURCES HAVE BEEN RETURNED TO RTE. * * LU ERROR - IMPROPER LU# SPECIFIEMD, OR LU# NOT LINKED TO DVR65. RETRY. * * NO SYSTEM MEMORY! - INSUFFICIENT SYSTEM AVAILABLE MEMORY FOR USE BY * THE NETWORK. SYSTEM CANNOT BE INITIALIZED. * IS ABORTED. RE-GENERATION OF RTE MAY * BE REQUIRED. * * RN ERROR - A REQUIRED RESOURCE NUMBER CANNOT BE ALLOCATED; * IS ABORTED. RE-GENERATION, WITH A LARGER * ALLOTMENT OF RESOURCE NUMBERS, MAY BE REQUIRED. * * SYSTEM IS NOT QUIESCENT! - TIMING MODIFICATION IS NOT ALLOWED, UNTIL * ALL PENDING TRANSACTIONS HAVE BEEN CLEARED * FROM THE SYSTEM. AWAIT QUIESCENT CONDITION, * AND RE-SCHEDULE . * * TOO MANY LU'S - MORE THAN 32 LOGICAL UNIT NUMBERS HAVE * BEEN SPECIFIED FOR CONFIGURATION. * IS ABORTED. REDUCE THE NUMBER OF * LU'S AND RE-SCHEDULE . * * TR FILE ERROR - THE FILE MANAGER CANNOT PROCESS THE FILE * WHICH WAS SPECIFIED IN THE SCHEDULING * PARAMETERS. CORRECT THE FILE PROBLEM, * AND RE-SCHEDULE . * * ** UPLIN NOT SCHEDULED - THE SYSTEM TRANSACTION-MONITOR AND CLEANUP * PROGRAM COULD NOT BE SCHEDULED. * IS ABORTED! DETERMINE NATURE OF * PROBLEM AND CORRECT. RE-SCHEDULE . * SKP PRAM NOP INPUT LU OR FIRST 2 CHARS. OF FILE NAME. NOP ERROR LU OR SECOND 2 CHARS. OF FILE NAME. NOP THIRD TWO CHARS. OF FILE NAME. NOP FILE SECURITY CODE--OPTIONAL. NOP FILE CARTRIDGE NUMBER--OPTIONAL. LSTEN JSB RMPAR GET THE DEF *+2 PARAMETERS DEF PRAM FOR LOCAL USE. IFZ EXT DBUG LDA PRAM CPA D6 DO THEY WANT DEBUG? RSS  YES JMP LSTN1 NO...LET HER RIP JSB DBUG INVOKE DEBUG DEF *+1 JMP TERM4 TERMINATE AND SAVE RESOURCES. XIF LSTN1 LDA #FWAM GET "ALREADY-INITIALIZED" INDICATOR. STA ONTWO SAVE IN OPTION 1/2 FLAG WORD CCA STA TTYF CLEAR OUT TTY FLAG * LDA PRAM SEE IF PRAM IS SUPPLIED LDB B1 IF NOT, DEFAULT TO LU 1 SZA SUPPLIED? LDB A YES ADA BM100 LU OR FILE? SSA CLA LU...CLEAR FILE FLAG STA FILFG STB RLU SAVE AS READ LU SZA LU OR FILE? JMP LSTN2 FILE * JSB EXEC LU...SEE WHICH ONE DEF *+4 DEF D13 DEF RLU DEF TEMP1 * LDA TEMP1 GET STATUS...SEE IF DVR00 ALF,ALF AND B77 CPA B5 IF EQUIPMENT TYPE-CODE = <05>, CLA CHANGE TO <00> FOR OUR USE. LDB A LDA RLU GET READ LU SZB,RSS TTY? IOR B400 YES...SET IN ECHO BIT STA RLU SAVE AS INPUT LU STB TTYF SAVE TTY FLAG LDA PRAM+1 SZA IS ERROR LU SUPPLIED? JMP LSTN2+1 YES...SAVE IT. SZB,RSS IS INPUT LU A TTY? LDA RLU YES...SET IF FOR ERROR LU SZA,RSS STILL ZERO? * LSTN2 LDA B1 YES...DEFAUT TO SYSTEM STA ERLU SAVE ERROR LU * JSB EXEC FIND OUT STATUS DEF *+4 DEF D13 DEF ERLU DEF TEMP1 * LDA TEMP1 GET STATUS ALF,ALF AND B77 CPA B5 IF EQUIPMENT TYPE-CODE = <05>, CLA CHANGE TO <00> FOR OUR USE. LDB ERLU SZA TTY? LDB B1 NO...SET TO SYSTEM TTY LDA B IOR B400 STA ERLU * JSB CHCKN SEE IF FILE RSS FILE...OPEN IT JMP LSTN3 NOT FILE * JSB OPEN OPEN THE FILE DEF *+7 DEF INDCB DIRECTORY CONTROL BLOCK DEF TEMP1 ERROR-RETURN STORAGE DEF PRAM FILE NAME DEF ZERO OPEN OPTION: EXCLUSIVE/NON-UPDATE DEF PRAM+3 FILE SECURITY CODE DEF PRAM+4 FILE CARTRIDGE NUMBER * LDA TEMP1 ANY ERRORS? SSA,RSS JMP LSTN3 NO * JSB SYSER SYSTEM ERROR DEF TRFM "TR FILE ERROR" * LSTN3 LDA ONTWO OPTION 1/2 FLAG LDB TTYF TTY FLAG (EQUIPMENT TYPE CODE). SZA OPTION 1? JMP OPTN2 NO...OPTION 2 * CPB B65 ATTEMPT TO INITIALIZE WITH SDI LU#? RSS YES. SKIP TO REPORT THE ERROR. JMP INITL NO. GO TO START THE INITIALIZATION. * JSB SYSER INFORM THE USER OF THE DEF LUERM " LU ERROR"--NO RETURN. * * INITIALIZATION CONTROL SECTION. * INITL JSB PRMRY GO TO SEE IF THIS IS PRIMARY SYSTEM. JSB SAM GO SET UP SYS. AVAIL. MEM. FOR LISTS. JSB LUIN READ IN & INITIALIZE THE SPECIFIED LU'S LDA LUBUF SEE IF THEY ENTERED ANY LU'S CLE,SZA,RSS ? JMP ABORT NO...DIDN'T ENTER ANY LU'S JSB MSET SCHEDULE MONITORS & SET UP STREAM LISTS. JSB SECOD SET NETWORK SECURITY CODE FOR THIS NODE. JSB SUPLN SCHEDULE UPLINE PROGRAM JSB SCHDQ SCHEDULE QUEUEING PROCESSORS, JMP TERM AND TERMINATE. * SKP * CHECK FOR PRIMARY SYSTEM--DOES NOT YIELD FOR SIMULTANEOUS REQUESTS. SPC 1 PRMRY NOP ENTRY/EXIT: PRIMARY SYSTEM CHECK. JSB PRINT ASK THE USER IF THIS IS THE DEF PRMSG "PRIMARY SYSTEM?". JSB READ GET THE RESPONSE. CPA B2 IF THE RESPONSE IS ASCII, CCA,RSS PREPARE TO SET THE PRIMARY FLAG; ELSE, JMP PRMER REPORT THE RESPONSE ERROR. CPB /A IF THE USER WISHES TO EXIT, JMP ABRT4 GO TO ABORT THE PROGRAM. CPB "NO" IF THIS IS NOT TܜHE PRIMARY SYSTEM, JMP PRMRY,I THEN RETURN FOR THE NEXT PROCESS. CPB "YE" IF THIS IS TO BE THE PRIMARY, RSS THEN SKIP TO SET THE FLAG. JMP PRMER * ERROR: INFORM THE USER. STA PRMY# SET THE PRIMARY FLAG IN =-1. JMP PRMRY,I RETURN FOR THE NEXT PROCESSING STEP. * PRMER JSB ERROR IMPROPER REPLY: DEF IVRES INFORM THE USER, AND JMP PRMRY+1 ALLOW ANOTHER CHANCE. * PRMSG DEF *+2 DEF D9 ASC 9, PRIMARY SYSTEM? _ * "NO" ASC 1,NO "YE" ASC 1,YE * SKP * SUBROUTINE TO OBTAIN SYSTEM AVAILABLE MEMORY & INITIALIZE NULL LIST. SPC 1 SAM NOP ENTRY/EXIT: SYS. AV. MEM. SET-UP. LDA D32 INITIALIZE DEFAULT NO. STA SVNUM OF TRANSACTIONS =32. LDA DM3 INITIALIZE THE DELAY RE-TRY STA RETRY COUNTER FOR 3 TRIES. SOVER JSB PRINT ASK THE USER TO SPECIFY THE: DEF MSG0 " NO. OF CURRENT TRANSACTIONS?" JSB READ READ THE RESPONSE. CPA B1 IF THE RESPONSE WAS NUMERIC, JMP SVALU GO TO PROCESS IT; ELSE, DETERMINE CPB /D IF DEFAULT VALUE IS TO BE USED. JMP SDFLT USE THE DEFAULT VALUE (32). CPB /A IF THE USER WISHES TO EXIT, JMP ABRT4 GO TO ABORT THE PROGRAM. * SERR JSB ERROR IMPROPER REPLY: DEF IVRES GO TO INFORM THE USER OF THE ERROR; JMP SOVER THEN ALLOW ANOTHER CHANCE. * SVALU STB SVNUM SAVE NO. OF TRANSACTIONS, TEMPORARILY. SSB,RSS IF VALUE NEGATIVE--INFORM USER OF ERROR. CMB,INB,SZB,RSS NEGATE THE NUMBER & CHECK FOR ZERO. JMP SERR * ERROR: NUMBER IS INVALID--TRY AGAIN * ADB D100 ADD THE MAXIMUM ALLOWABLE NO. (100). SSB IS THE SPECIFIED NO. ALLOWABLE? JMP SERR NO. GO INFORM HIM OF THE ERROR! * SDFLT LDB SVNUM GET THE NUMBER OF TRANSACTIONS. CMB,INB FORM A LOOP COUNT u INB,SZB,RSS EQUAL TO (THE NUMBER SPECIFIED-1). CCB PROTECT AGAINST A NULL COUNTER! STB SCNT SAVE THE LOOP COUNT. LDA SVNUM GET THE NUMBER OF TRANSACTIONS. MPY B4 CALCULATE: MEMORY SIZE(WORDS) = STA SZMEM (TRANSACTIONS)*(4 WDS./TRANSACTION) * CLE GET A JSB RNSUB RESOURCE NUMBER DEF TBRN# FOR THE TABLE-ACCESS RN. CLE GET A JSB RNSUB RESOURCE NUMBER DEF GPRN# FOR THE GENERAL PRE-PROCESSOR RN. CLE GET A JSB RNSUB RESOURCE NUMBER DEF QRN# FOR THE SYSTEM-QUIESCENT RN. CLE GET A JSB CLSUB CLASS NUMBER DEF GRPM# FOR THE GENERAL PRE-PROCESSOR MODULE. CLE GET A JSB CLSUB CLASS NUMBER DEF SRPM# FOR THE SLAVE PRE-PROCESSOR MODULE. CLE GET A JSB CLSUB CLASS NUMBER DEF QCLM# FOR THE QUEUE CLEAN-UP MONITOR. CLE GET A JSB CLSUB CLASS NUMBER DEF RXCL# FOR 'RFAM'/'RFAEX' COMMUNICATIONS. * LDA BPA1 IF THE FIRST WORD OF BASE PAGE CPA B2 IS =2, THEN THIS IS A DMS SYSTEM, RSS AND THE CODE MUST BE MODIFIED; JMP SREPT ELSE, BYPASS THE CODE CHANGES. DLD XSBAI GET THE CROSS-STORE INSTRUCTION, DST STLNK AND CONFIGURE THE TWO NULL-LINK DST STERM INSTRUCTIONS FOR DMS OPERATION. * SREPT JSB #RSAX GO TO THE DEF *+3 SYSTEM RESOURCE-CONTROL ROUTINE, DEF ZERO TO REQUEST SYSTEM AVAILABLE MEMORY, DEF SZMEM IN THE AMOUNT SPECIFIED BY THE USER. * CPA M1 IF THE AMOUNT WILL NEVER BE AVAILABLE, JMP NOMER INFORM THE USER OF THE PROBLEM. SZA HAS THE MEMORY BEEN ALLOCATED? JMP NULNK YES. GO TO LINK THE NULL LIST. JSB DELAY NO. IT'S NSOT AVAILABLE NOW--WAIT. JMP NOMER * RETRIES EXHAUSTED: INFORM USER! JMP SREPT TRY AGAIN FOR MEMORY ALLOCATION. * NULNK JSB CLEAR GO TO CLEAR SYSTEM DATA AREA IN . JSB $LIBR GAIN ACCESS TO NOP SYSTEM RESOURCES. LDA #FWAM GET THE ADDRESS OF THE S.A.M. BLOCK, STA #NULL AND INITIALIZE HEAD OF NULL LIST. STA B LINK SLOOP ADB B4 THE STLNK STB A,I NULL [CONTAINS XSB A,I: DMS] NOP LIST [NOP: RTE-II, DEF A,I: DMS] STB A WITH ISZ SCNT FOUR- JMP SLOOP WORD CLB NULL STERM STB A,I ENTRIES. [CONTAINS XSB A,I: DMS] NOP [NOP: RTE-II, DEF A,I: DMS] * SKP * INITIALIZE ALL GLOBAL RN'S, CLASS NUMBERS, AND COUNTERS IN 'RES'. SPC 1 LDA TBRN# STA #TBRN LDA GRPM# STA #GRPM LDA GPRN# STA #GPRN LDA SRPM# STA #SRPM LDA QCLM# STA #QCLM LDA RXCL# STA #RXCL LDA QRN# STA #QRN LDA MSTO# STA #MSTO LDA SVTO# STA #SVTO LDA RTRY# STA #RTRY LDA WAIT# STA #WAIT LDA PRMY# STA #PRMY CLA STA #BUSY * JSB $LIBX RESTORE THE DEF SAM SYSTEM'S DEFENSES. * NOMER JSB SYSER GO TO INFORM THE USER THAT DEF NOMEM MEMORY IS UN-AVAILABLE--NO RETURN. * BPA1 EQU 1742B SZMEM NOP NUMBER OF WORDS OF S.A.M. REQUESTED. XSBAI XSB A,I DMS: CROSS-STORE VIA ALTERNATE MAP. * MSG0 DEF *+2 DEF D16 ASC 16, NO. OF CURRENT TRANSACTIONS? _ IVRES DEF *+2 DEF D9 ASC 9, INVALID RESPONSE! NOMEM DEF *+2 DEF D9 ASC 9, NO SYSTEM MEMORY! * SKP * * DELAY SUBROUTINE: DELAY EXECUTION FOR 1-SECOND. * SET (BEFORE ENTRY) TO NEGATIVE NUMBER OF PASSES ,B* ALLOWED THROUGH , BEFORE RETURN TO P+1 ERROR-RETURN. * NORMAL RETURN IS TO P+2, FOLLOWING DELAY OF 1-SECOND. * DELAY NOP ENTRY/EXIT: DELAY SUBROUTINE. JSB EXEC WAIT DEF *+6 1 SECOND DEF D12 TO ALLOW DEF ZERO SYSTEM DEF B1 CONDITIONS TO DEF ZERO CHANGE DEF DM100 AS REQUIRED. ISZ RETRY IF RETRY COUNT IS NOT EXHAUSTED, ISZ DELAY THEN SET RETURN TO P+2; ELSE, IF JMP DELAY,I EXHAUSTED, RETURN TO P+1--ERROR! * RETRY NOP RE-TRY COUNTER SPC 2 GRPM# NOP GENERAL PRE-PROCESSOR CLASS NUMBER. SRPM# NOP SLAVE PRE-PROCESSOR CLASS NUMBER. QCLM# NOP QUEUE CLEAN-UP MONITOR'S CLASS NUMBER. RXCL# NOP 'RFAM'/'RFAEX' COMMUNICATION CLASS NO. TBRN# NOP TABLE-ACCESS RN. GPRN# NOP GENERAL PRE-PROCESSOR RN. QRN# NOP SYSTEM-QUIESCENT RN. MSTO# ABS 256-5 MASTER-REQUEST TIMEOUT(LOWER BYTE -5) SVTO# ABS 256-3 SLAVE-REQUEST TIMEOUT(LOWER BYTE -3) RTRY# DEC -3 D65MS BUSY-REJECT RETRY COUNT WAIT# DEC -1 D65MS QUIESCENT WAIT INTERVAL * SKP * OPTION 2 IS ENTERED WHEN SYSTEM IS ALREADY INITIALIZED. * OPTN2 LDA LUAD INITIALIZE THE POINTER STA LUPNT TO THE LOGICAL UNIT NO. BUFFER JSB CHCKN SEE IF THEY WANT TO READ FROM A FILE JMP OPT20 YES LDB RLU GET LU...INCASE DVR SUPPLIED IN RMPAR LDA TTYF SEE WHAT TYPE OF DEVICE WE TALK TO CPA B65 IS IT DVR65? JMP OPT22 YES OPT20 JSB PRINT DEF OPMES " OPERATION?_" JSB READ GET THE RESPONSE. CPA B2 ASCII RESPONSE? RSS YES. CONTINUE PROCESSING. JMP EXPLN NO...EXPLAIN THE POSSIBILITIES! * CPB /A REQUEST TO ABORT? JMP ABRT4 YES. DO IT! CPB /E REQUEST TO TERMINATE2NLH? JMP TERM YES. GO TO OBLIGE. CPB PM REQUEST TO MONITOR PARMB'S? RSS YES--SKIP; ELSE, CHECK FOR A CPB QM REQUEST TO MONITOR QUEUEING ERRORS? JMP PLOG YES. SET UP MONITORING FOR EITHER. CPB /S REQUEST TO SCHEDULE MONITOR(S)? JMP SKEDM YES. GO TO SET UP TO SCHEDULE. CPB PC REQUEST TO CANCEL PARMB MONITORING? RSS YES--SKIP; ELSE, CHECK FOR A CPB QC REQUEST TO CANCEL Q-ERROR MONITORING? JMP PCLR YES. GO TO STOP EITHER PROCESS. CPB ?? IS THE USER PUZZLED? JMP EXPLN YES...GIVE HIM SOME ASSISTANCE. JSB RNRQ GO TO RTE DEF *+4 TO OBTAIN THE DEF GLCNW STATUS OF THE DEF #QRN SYSTEM QUIESCENT DEF TEMP1 RESOURCE NUMBER. LDB PARSB+1 GET THE USER COMMAND, AGAIN. LDA TEMP1 GET THE STATUS OF #QRN. CPA B7 IF THE SYSTEM IS ALREADY QUIESCENT, JMP QCHNG THEN ONLY /R AND /T ARE ALLOWED; ELSE, CPB /L REQUEST TO RE-ENABLE A LINE? JMP OPT21 YES. GO TO DETERMINE THE LU NUMBER. CPB /Q REQUEST TO MAKE THIS NODE QUIESCENT? JMP QUIES YES.GO TO PROCESS THE REQUEST. JMP EXPLN USER IS CONFUSED...HELP HIM! * QCHNG CPB /R REQUEST TO RE-START FROM QUIESCENCE? JMP REQUE YES. GO TO START IT UP AGAIN. CPB /T REQUEST TO CHANGE TIMEOUT VALUES, ETC.? JMP TIME YES. GO PROCESS THE REQUESTED CHANGES. * EXPLN JSB PRNTX EXPLAIN THE COMMANDS DEF EXPMS TO THE CONFUSED USER. JMP OPT20 REPEAT THE QUESTION. N* SKEDM CCE =1 TO DISALLOW DEFAULT SCHEDULING. JSB MSET GO TO SCHEDULE MONITOR(S). JMP OPT20 RETURN TO CHECK FOR OTHER OPTIONS. SKP OPT21 JSB PRINT SEE WHICH LU THEY WANT DEF UPLUM " LU TO BE RE-ENABLED?_" JSB READ READ IN # CPA B1 NUMERIC ANSWER? JMP OPT22 YES CPB /E END OF LIST? JMP OPT20 YES. CHECK FOR OTHER OPTIONS. CPB /A REQUEST TO ABORT? JMP ABORT YES. GO DO IT! OPT2E JSB ERROR NO...ERROR DEF LUERM "LU ERROR" JMP OPT21 TRY AGAIN * OPT22 SZB,RSS ZERO..ILLEGAL LU JMP OPT2E ERROR STB LTEMP SAVE THE SPECIFIED LOGICAL UNIT NO. JSB LUTST GO TO TEST FOR LINKAGE TO DVR65. JMP OPT2E * ERROR--TRY AGAIN! * LDA LTEMP GET THE LOGICAL UNIT NUMBER. IOR B200 INCLUDE SUB-FUNCTION =2: CLEAR REQUEST. STA CLU SAVE THE CONFIGURED CONTROL WORD. * CLA INITIALIZE 'LRN' & 'PRN' TO ZERO, STA LRN IN ORDER TO LATER DETERMINE STA PRN IF RELEASE OF THE RN'S IS REQUIRED. * JSB EXEC GO TO RTE DEF *+4 TO REQUEST THAT DEF SD3 DVR65 CLEAR OUT DEF CLU ANY PREVIOUS DEF PBUF CONFIGURATION DATA. JMP OPT2E * RTE-DETECTED ERROR--TRY AGAIN! * * LDA LRN GET THE RETURNED 'LRN'--IF ANY. SZA,RSS IF NOTHING WAS RETURNED, JMP *+4 THEN BYPASS THE RN RELEASE. CCE CLEAR THE FORMER JSB RNSUB RESOURCE NUMBER DEF LRN FOR THE COMM. LINE RN. LDA PRN GET THE RETURNED 'PRN'--IF ANY. SZA,RSS IF NOTHING WAS RETURNED, JMP *+4 THEN BYPASS THE RN RELEASE. CCE CLEAR THE FORMER JSB RNSUB RESOURCE NUMBER DEF PRN FOR THE 'PROGL' RN. JSB LUSET GO TO SET UPBm THE LOGICAL UNIT NO. JMP OPT2E * RTE-DETECTED ERROR--TRY AGAIN! * LDA TTYF IF THE INITIAL REQUEST CPA B65 WAS TO RE-ENABLE A SINGLE LU, JMP TERM THEN DON'T ASK FOR MORE INPUT; ELSE, JMP OPT21 GO BACK FOR MORE. * GLCNW OCT 100006 GLOBAL LOCK/CLEAR--NO WAIT. SD13 OCT 100015 SD3 OCT 100003 SKP ******* DO NOT CHANGE THE ORDER OF THE NEXT SEVEN STATEMENTS! ******* SPC 1 PBUF DEF LRN ADDRESS OF INITIALIZING PARAMETERS. LRN NOP COMM. LINE RESOURCE NUMBER. PRN NOP 'PROGL' RESOURCE NUMBER. NOP (REQUEST & DATA TIMEOUT--SATELLITE ONLY) SDF DEF #SBIT ENTRY ADDRESS: DVR65 LIST PROCESSOR. CDF DEF $CGRN ENTRY ADDRESS: GLOBAL RN CLEAR ROUTINE. PRMY# NOP PRIMARY FLAG: PRIMARY=-1, SECONDARY=0 * SKP * NETWORK TIMING-VALUE MODIFICATION SECTION (QUIESCENT MODE ONLY!). * TIME LDA #BUSY CHECK FOR QUIESCENT SYSTEM. SZA IF IT IS NOT-YET QUIESCENT, THEN JMP NOTQ LET THE USER KNOW; ELSE, JSB GETV GO TO GET CURRENT VALUES. JSB PRNTX PRINT SECTION HEADER. DEF TMES " TIMING MODIFICATION" MQUES JSB PRINT DEF MSTMG " MASTER T/O [1 TO 255 (*5 SEC.)]?_" JSB READ GET THE RESPONSE. SZA,RSS ANY CHANGE DESIRED? JMP SQUES NO. PROCEED TO NEXT QUESTION. CPA B1 NUMERIC RESPONSE? JMP CHEKM YES. SKIP TO CHECK LIMITS. CPB /A ABORT REQUEST? JMP ABRT4 YES. GO TO OBLIGE. MSER JSB ERROR INVALID DEF IVRES RESPONSE! JMP MQUES ASK AGAIN. * CHEKM JSB VCHEK CHECK FOR ACCEPTABLE VALUE DEF D255 (MAXIMUM =255) JMP MSER IMPROPER VALUE. AND D255 ACCEPTABLE--ISOLATE LOWER BYTE, JSB VSTOR AND STORE IT AWAY. DEF #MSTO LOCATION OF CONSTANT IN 'RES'. * SQUES JSB PRINT DEF SLVMG " SLAVE T/O [1 TO 255 (*5 SEC.)?]_" JSB READ GET RESPONSE. SZA,RSS ANY CHANGE DESIRED? JMP BZTRY NO. PROCEED TO NEXT QUESTION. CPA B1 NUMERIC RESPONSE? JMP CHEKS YES. SKIP TO CHECK LIMITS. CPB /A ABORT REQUEST? JMP ABRT4 YES. GO TO OBLIGE. SVER JSB ERROR INVALID DEF IVRES RESPONSE! JMP SQUES ASK AGAIN. * CHEKS JSB VCHEK CHECK VALIDITY OF RESPONSE. DEF D255 (MAXIMUM =255) JMP SVER IMPROPER VALUE. AND D255 ACCEPTABLE--ISOLATE LOWER BYTE, JSB VSTOR AND GO TO STORE IT. DEF #SVTO LOCATION OF CONSTANT IN 'RES'. * BZTRY JSB PRINT DEF BZMG "REMOTE-BUSY WAIT [1 TO 10 SEC.]?_" JSB READ GET RESPONSE SZA,RSS ANY CHANGE DESIRED? JMP WAITQ NO. PROCEED TO NEXT QUESTION. CPA B1 NUMERIC? JMP CHEKB YES. GO TO PROCESS. CPB /A ABORT REQUEST? JMP ABRT4 YES. GO TO OBLIGE. BZER JSB ERROR IMPROPER DEF IVRES RESPONSE! JMP BZTRY ASK AGAIN. * CHEKB JSB VCHEK GO TO CHECK VALIDITY. DEF D10 (MAXIMUM =10) JMP BZER INVALID VALUE. JSB VSTOR GO TO STORE VALUE. DEF #RTRY LOCATION OF CONSTANT IN 'RES'. * WAITQ JSB PRINT DEF WAITM " REMOTE-QUIET WAIT [1 TO 10 SEC]?_" JSB READ GET RESPONSE. SZA,RSS ANY CHANGE DESIRED? JMP OPT20 NO. GO SEE IF OTHER OPTIONS DESIRED. CPA B1 NUMERIC? JMP CHEKW YES. GO CHECK VALIDITY. CPB /A REQUEST TO ABORT? JMP ABRT4 YES. GO DO IT! WERR JSB ERROR INVALID DEF IVRES RESPONSE! JMP WAITQ ASK AGAIN. * CHEKW JSB VCHEK CHECK FOR ACCEPTABLE VALUE. DEF D10 (MAXIMUM =10) JMP WERR IMPROPER VALUE. JSB VSTOR ACCEPTABLE--GO SAVE IT. DEF #WAI{T LOCATION OF CONSTANT IN 'RES'. * JMP OPT20 CHECK FOR OTHER OPTIONS. * VCHEK NOP ENTRY/EXIT: VALID RESPONSE CHECK LDA VCHEK,I GET THE MAXIMUM VALUE TO BE LDA A,I USED FOR LIMIT CHECKING. ISZ VCHEK POINT TO THE ERROR-RETURN ADDRESS. SSB,RSS IF THE VALUE IS NEGATIVE CMB,INB,SZB,RSS OR ZERO, THEN IT JMP VCHEK,I IS UN-ACCEPTABLE! ELSE, STB NVALU THE NEGATIVE VALUE IS SAVED. ADB A IF THE VALUE SSB EXCEEDS THE MAXIMUM, THEN JMP VCHEK,I IT IS IN ERROR! ELSE, LDA NVALU THE NEG. VALUE IS ISZ VCHEK RETURNED TO THE CALLER JMP VCHEK,I AT . * VSTOR NOP ENTRY/EXIT: CONSTANT STORAGE. LDB VSTOR,I GET THE STORAGE ADDRESS. ISZ VSTOR ESTABLISH THE CORRECT RETURN POINT. * JSB $LIBR GAIN ACCESS TO NOP THE SYSTEM'S RESOURCES. STA B,I SAVE THE NEW CONSTANT IN 'RES'. JSB $LIBX RESTORE THE DEF VSTOR SYSTEM'S DEFENSES. * NVALU NOP TEMP. STORAGE: NEGATED VALUE. * NOTQ JSB PRINT INFORM THE USER THAT DEF NOTQM " SYSTEM IS NOT QUIESCENT!" JMP ABRT4 GO TO ABORT THE PROGRAM. * * ROUTINE TO GET CURRENT SYSTEM TIMING VALUES FOR REPORT TO USER. * GETV NOP ENTRY/EXIT LDA #MSTO GET MASTER TIMEOUT VALUE. ADA DM256 FORM FULL DATA WORD. CMA,INA MAKE IT POSITIVE. JSB CNVTD GO TO CONVERT IT TO ASCII. DEF MSVAL SPECIFY DESTINATION OF RESULT. * LDA #SVTO GET SLAVE TIMEOUT VALUE. ADA DM256 FORM FULL DATA WORD. CMA,INA MAKE IT POSITIVE. JSB CNVTD GO TO CONVERT IT TO ASCII. DEF SLVAL SPECIFY DESTINATION OF RESULT. * LDA #RTRY GET REMOTE-BUSY RETRY COUNT. CMA,INA MAKE IT POSITIVE. JSB CNVTD GO TO CCONVERT IT TO ASCII. DEF RTVAL SPECIFY DESTINATION OF RESULT. * LDA #WAIT GET QUIESCENT-WAIT INTERVAL VALUE. CMA,INA MAKE IT POSITIVE. JSB CNVTD GO TO CONVERT IT TO ASCII. DEF WTVAL SPECIFY DESTINATION OF RESULT. JMP GETV,I RETURN. * CNVTD NOP ENTRY/EXIT: ASCII CONVERSION ROUTINE. STA TEMP1 SAVE THE RAW DATA, TEMPORARILY. LDA CNVTD,I GET THE DESTINATION ADDRESS. STA STUFM CONFIGURE THE CALL TO 'CNUMD'. JSB CNUMD GO TO DEF *+3 CONVERT DEF TEMP1 THE VALUE STUFM NOP TO ASCII. ISZ CNVTD ADJUST THE RETURN POINTER, JMP CNVTD,I AND RETURN TO THE CALLER. * SKP * TMES DEF *+2 DEF D70 ASC 19, TIMING MODIFICATION--CURRENT VALUES: OCT 6412 OCT 6412 ASC 8, MASTER T/O = MSVAL ASC 3, OCT 6412 ASC 8, SLAVE T/O = SLVAL ASC 3, OCT 6412 ASC 8, REMOTE-BUSY = RTVAL ASC 3, OCT 6412 ASC 8, REMOTE-QUIET = WTVAL ASC 3, OCT 6412 OCT 6412 * MSTMG DEF *+2 DEF D17 ASC 17, MASTER T/O [1 TO 255 (*5 SEC.)]?_ SLVMG DEF *+2 DEF D17 ASC 17, SLAVE T/O [ 1 TO 255 (*5 SEC.)]?_ BZMG DEF *+2 DEF D17 ASC 17, REMOTE-BUSY WAIT [1 TO 10 SEC.]?_ WAITM DEF *+2 DEF D17 ASC 17, REMOTE-QUIET WAIT [1 TO 10 SEC]?_ NOTQM DEF *+2 DEF D13 ASC 13, SYSTEM IS NOT QUIESCENT! * D70 DEC 70 SKP * 'PLOG' & 'PCLR' ARE USED TO INITIALIZE AND TERMINATE THE PROCESS * WHICH ALLOWS LOGGING OF ALL NETWORK TRANSACTIONS (PARMB'S) WHICH * FLOW THROUGH THIS PARTICULAR NODE OF THE NETWORK. ADDITIONALLY, * QUEUEING ERRORS MAY BE SEPARATELY MONITORED THRU USE OF PLOG. * * WILL SCHEDULE A PROGRAM CALLED , AND PASS IT THE CLASS * NUMBER [P1], FROM WHICH IT MAY EXPECT TO "GET" THE LOGGED PARMB'S. * ADDITIONALLY, PLOG WILL RECEIVE UP TO 4 OPTIONAL SCHEDULING PARAMETERS, * WHICH WERE SPECIFIED BY THE USER: [,P2[,P3[,P4[,P5]]]] * PLOG LDA #PLOG IF EITHER OPTION SZA,RSS HAS BEEN LDA #QLOG PREVIOUSLY SZA INVOKED, THEN JMP STPR1 BYPASS SCHEDULING OF . * CLE GET A JSB CLSUB CLASS NUMBER DEF PRAM1 FOR THE TRANSACTION-LOGGER: . * LDA DM4 INITIALIZE A COUNTER FOR USE IN STA LUTST GATHERING SCHEDULING PARAMETERS. LDA PR2AD INITIALIZE A POINTER FOR STA LUSET PARAMETER STORAGE. LDB PBDEF GET THE ADDRESS OF THE PARSING BUFFER. ADB B4 POINT TO FIRST SCHEDULING PARAMETER. PGET LDA B,I GET THE PARAMETER TYPE-SPECIFICATION. INB POINT TO THE ACTUAL PARAMETER. SZA NULL PARAMETER? LDA B,I NO. GET THE PARAMETER. STA LUSET,I SAVE FOR SCHEDULING. ADB B3 POINT TO NEXT TYPE-SPECIFICATION. ISZ LUSET SET POINTER FOR NEXT STORAGE LOC'N. ISZ LUTST ALL PARAMETERS BEEN OBTAINED? JMP PGET NO. GO BACK FOR MORE. * LDA DPLOG GET THE NAME-ARRAY ADDRESS. STA NAMPT INITIALIZE THE NAME POINTER. CCE GO TO JSB MSKED SCHEDULE . SZA,RSS WAS IT PROPERLY SCHEDULED? JMP PSTOR YES. GO TO SET THE LOGGING SWITCH. CCE NO--RETURN JSB CLSUB THE CLASS NUMBER DEF PRAM1 TO THE SYSTEM. JMP ABRT4 * ABORT THE PROCESS! * * DPLOG DEF *+1 ADDRESS OF NAME-ARRAY. ASC 3,PLOG * SKP STPR1 STA PRAM1 INITIALIZE SWITCH WITH OLD CLASS NO. * PSTOR LDB PARSB+1 GET THE USER'S COMMAND. CPB QM IF Q-ERRORS ARE TO BE MONITORED, CLB THEN PREPARE TO ENABLE #QLOG. JSB $LIBR GAIN ACCESS TO NOP SYSTEM RESOURCES. LDA WPRAM1 GET THE LOGGER'S CLASS NUMBER. SZB IF PARMB'S ARE TO BE LOGGED, STA #PLOG ENABLE LOGGING: SAVE CLASS IN . SZB,RSS OTHERWISE, STA #QLOG ENABLE LOGGING OF QUEUEING ERRORS. JSB $LIBX RESTORE THE DEF *+1 SYSTEM'S DEFENSES, AND DEF OPT20 GO TO CHECK FOR OTHER OPTIONS. SPC 1 * ROUTINE TO CANCEL TRANSACTION MONITORING. SPC 1 PCLR CLE PREPARE TO CLEAR #PLOG. LDB PARSB+1 GET THE USER'S COMMAND. LDA #PLOG GET THE PARMB LOGGING CLASS NO. CPB PC IF USER WISHES TO STOP PARMB LOGGING, CCE,RSS SET =1 (TO SPECIFY #PLOG) & SKIP; LDA #QLOG ELSE, GET Q-ERROR CLASS NO. [=0]. CLB PREPARE TO DISABLE LOGGING. JSB $LIBR GAIN ACCESS TO NOP SYSTEM RESOURCES. SEZ IF =1, STB #PLOG TURN OFF THE TRANSACTION-LOGGING SWITCH; SEZ,RSS ELSE, IF =0, STB #QLOG TURN OFF Q-ERROR LOGGING SWITCH. JSB $LIBX RESTORE DEF *+1 THE SYSTEM'S DEF *+1 DEFENSES. SZA,RSS IF THE OPTION WAS NOT ENABLED, JMP OPT20 GO TO CHECK FOR OTHER REQUESTS. STA MCLAS SAVE CLASS NUMBER FOR POSSIBLE RELEASE. SEZ IF PARMB LOGGING WAS TURNED OFF, LDA #QLOG SEE IF Q-ERROR LOGGING IS ENABLED. SEZ,RSS IF Q-ERROR LOGGING WAS TURNED OFF, LDA #PLOG SEE IF PARMB LOGGING IS ENABLED. SZA IF THE OPPOSITE OPTION IS ENABLED, JMP OPT20 THEN DO NOT ABORT THE LOGGER . * JSB EXEC GO TO RTE DEF *+8 TO WRITE A DEF CLS18 ZERO LENGTH DEF ZERO RECORD INTO DEF ZERO THE LOGGER'S DEF ZERO CLASS. THIS DEF ZERO WILL INFORM DEF ZERO THAT DEF MCLAS LOGGING HAS NOP TERMINATED. * JMP OPT20 GO TO CHECK FOR OTHER OPTIONS. SKP * SUBROUTINE TO VERIFY THAT LU IS LINKED TO 'DVR65'. * LUTST NOP JSB EXEC GO TO RTE DEF *+4 TO GET THE DEF SD13 EQUIPMENT TYPE-CODE DEF LTEMP LINKED TO THE LU NO. DEF TEMP1 SUPPLIED BY THE USER. JMP LUTST,I * INVALID LU--TAKE ERROR-RETURN (P+1) * * LDA TEMP1 ISOLATE THE ALF,ALF EQUIPMENT AND B77 TYPE-CODE. CPA B65 IS THE LU LINKED TO 'DVR65'? ISZ LUTST YES. SET FOR VALID RETURN (P+2). JMP LUTST,I NO. ERROR: RETURN TO P+1. SPC 2 * SUBROUTINE TO SET-UP & ENABLE A LOGICAL UNIT NO. (VIA DVR65). * LUSET NOP CLE GET A JSB RNSUB RESOURCE NUMBER DEF LRN FOR THE COMMUNICATION LINE. CLE GET A JSB RNSUB RESOURCE NUMBER DEF PRN FOR USE BY 'PROGL' (ON THIS LU). * LDB SDF GET LINK TO #SBIT (RES). RSS SKIP TO CHECK FOR INDIRECT LDB B,I GET A RBL,CLE,SLB,ERB DIRECT ADDRESS FOR JMP *-2 DVR65'S ACCESS TO . STB SDF SAVE ADDRESS FOR DRIVER INITIALIZATION. * LDB CDF GET LINK TO $CGRN (RTE). RSS SKIP TO CHECK FOR INDIRECT. LDB B,I GET A RBL,CLE,SLB,ERB DIRECT ADDRESS FOR JMP *-2 DVR65'S ACCESS TO $CGRN. STB CDF SAVE ADDRESS FOR DRIVER INITIALIZATION. * LDA LTEMP GET THE LOGICAL UNIT NUMBER. IOR B300 FORM: SUB-FUN. =3 (SET UP & ENABLE LU). STA CLU SAVE THE CONFIGURED CONTROL WORD. * JSB EXEC GO TO RTE DEF *+4 TO REQUEST THAT DEF SD3 'DVR65' SET UP & ENABLE DEF CLU LISTEN MODE FOR DEF PBUF THE SPECIFIED LU. JMP XXLUSET,I * RTE-DETECTED ERROR--TRY AGAIN! * ISZ LUSET SET FOR NORMAL RETURN (P+2). JMP LUSET,I RETURN TO THE CALLER. * SKP * PROGRAM TERMINATION PROCESSOR. * TERM JSB CHCKN WAS THERE A FILE RSS YES...FILE JMP TERM1 NO...DON'T CLOSE IT * JSB CLOSE CLOSE DEF *+3 THE DEF INDCB CONTROL DEF TEMP1 FILE. * TERM1 LDA ENMSG IF PROGRAM IS BEING ABORTED CPA ABPRM THEN IGNORE JMP TERM3 THE END MESSAGE. * JSB PRNTX GO TO PRINT THE DEF ENDMG TERMINATION MESSAGE--SANS HEADER. * TERM3 JSB PRTN RETURN ERROR INFORMATION DEF *+2 TO THE DEF ENMSG BATCH PROCESSOR. * TERM4 CLB PREPARE FOR NORMAL TERMINATION. LDA PRAM GET FIRST SCHEDULING PARAMETER. CPA D6 IF IT IS =6, THEN CONVERT THE INB TERMINATION CODE TO SAVE RESOURCES. STB TCOD CONFIGURE THE TERMINATION CODE. JSB EXEC GO TO THE DEF *+4 RTE EXECUTIVE DEF D6 TO TERMINATE DEF ZERO THIS PROGRAM, DEF TCOD AND-PERHAPS-TO SAVE RESOURCES. * JMP LSTEN GO BACK TO THE BEGINNING. * TCOD NOP (TERM. CODE: 0-NORMAL/1-SAVE RESOURCES) * SKP * COMMUNICATION LINE ENABLING ROUTINE. * LUIN NOP LDA LUMAX INITIALIZE A COUNTER FOR DETECTION STA LUCNT OF EXCESSIVE NUMBER OF LU'S. LDA LUAD INITIALIZE POINTER FOR STORAGE OF STA LUPNT SPECIFIED LU'S--FOR ABORT PROCESSOR. LSTN4 CLB CLEAR THE CURRENT ENTRY, IN PREPARATION STB LUPNT,I FOR LATER ERROR CHECKING. JSB PRINT DEF MSG1 " LINE LU?_" JSB READ READ A RECORD CPA B1 WAS INPUT BINARY? JMP LSTN6 YES. GO TO PROCESS THE LU. CPB /E END OF LIST? JMP LUIN,I YES. RETURN CPB /A REQUEST TO TERMINATE? JMP ABORT YES. GO TO CLEAN UP & EXIT. LUERR JSB ERROR DEF LUERM "LU ERROR" JMP LSTN4 TRY AGAIN SPC 1 LSTN6 ISZ LUCNT MAXIMUM NO. BEEN PROCESSED? RSS NO. CONTINUE PROCESSING. JMP LUXS * ERROR: TOO MANY LU'S! * STB LTEMP SAVE TEMPORARILY. * JSB LUTST GO VERIFY THAT LU IS LINKED TO 'DVR65'. JMP LURST NOT A DVR 65...ERROR * LDB LUAD GET LU BUFFER ADDRESS FOR INDEX. LLOOP LDA B,I GET AN ENTRY FROM THE LU BUFFER. SZA,RSS END OF BUFFER? JMP LSET YES. GO TO ADD THE NEW LU. CPA LTEMP HAS THE NEW LU ALREADY BEEN INITIALIZED? JMP LURST YES. REPORT THE ERROR! INB NO. ADVANCE THE BUFFER POINTER. JMP LLOOP GO TO EXAMINE THE NEXT BUFFER ENTRY. * LSET LDA LTEMP ADD THE NEW LOGICAL UNIT NUMBER STA LUPNT,I TO THE LU STORAGE BUFFER. JSB LUSET GO TO SET UP & ENABLE THE LU. JMP LURST * RTE-DETECTED ERROR--TRY AGAIN! * * ISZ LUPNT ADVANCE 'LUBUF' POINTER. JMP LSTN4 NO. GO TO REQUEST ANOTHER LU NUMBER. * LUXS JSB SYSER INFORM USER THAT TOO MANY LU'S DEF LUSZR HAVE BEEN SPECIFIED! [NO RETURN]. * LURST LDB LUCNT * ERROR: DECREMENT THE ADB M1 BUFFER COUNTER, AND STB LUCNT RESTORE THE PREVIOUS COUNT. JMP LUERR GO TO INFORM THE USER OF THE ERROR. * LTEMP NOP TEMPORARY LOGICAL UNIT NO. STORAGE. SKP D6 DEC 6 D8 DEC 8 D9 DEC 9 D10 DEC 10 D12 DEC 12 D13 DEC 13 D16 DEC 16 D17 DEC 17 D32 DEC 32 D95 DEC 95 D100 DEC 100 D255 DEC 255 DM2 DEC -2 DM3 DEC -3 DM4 DEC -4 DM100 DEC -100 DM256 DEC -256 B0 OCT 0 ZERO EQU B0 B1 OCT 1 B3 OCT 3 B4 OCT 4 B17 OCT 17 B77 OCT 77 B200 OCT 200 B300 OCT 300 B400 OCT 400 B65 OCT 65 BM100 OCT -100 M1 DEC -1 RLU NOP TEMP1 NOP /A ASC 1,/A /D ASC 1,/D /E ASC 1,/E /L ASC 1,/L /Q ASC 1,/Q /R ASC 1,/R /S ASC 1,/S /T ASC 1,/T PC ASC 1,PC PM ASC 1,PM QC ASC 1,QC QM ASC 1,QM ?? ASC 1,?? CLU NOP TTYF NOP ONTWO NOP SVNUM NOP SCNT NOP LUMAX DEC -33 -(MAX. NUMBER OF LU'S +1) LUCNT NOP LUPNT NOP LUAD DEF LUBUF LUBUF BSS 32 SKP * * ROUTINE TO GET SIZE OF OVERFLOW FILE FOR USE BY 'RFAM'. * FILIN NOP JSB PRINT DEF FILMG " INPUT # OF FILES: _" JSB READ CPA B1 INPUT NUMERIC? JMP GFIL2 YES CPB /A REQUEST TO TERMINATE? JMP ABORT YES. GO TO CLEAN UP & EXIT. * FILER JSB ERROR DEF FERMG "FILE ERROR" JMP FILIN+1 RETRY * GFIL2 STB A SZB,RSS SIZE=0 JMP FILER YES ADB DM256 OR TO LARGE SSA,RSS SSB,RSS OR NEGATIVE JMP FILER ERROR STA RFSIZ SAVE LENGTH FOR RFA SCHEDULE * JSB $LIBR GAIN ACCESS TO NOP SYSTEM RESOURCES. STA #RFSZ SAVE NUMBER OF 'OPEN' RFA FILES. JSB $LIBX RESTORE THE SYSTEM'S DEFENSES, DEF FILIN AND RETURN TO THE CALLER. * RFSIZ NOP SKP * CLASS NUMBER ALLOCATION/DE-ALLOCATION SUBROUTINE. * * ENTER: & - DON'T CARE (DESTROYED ON RETURN). * = 0 - REQUEST A CLASS ALLOCATION FROM RTE. * = 1 - RETURN A CLASS NUMBER TO THE SYSTEM. * - CLASS NUMBER ADDRESS. * NOTE: DE-ALLOCATION ERRORS ARE IGNORED! * CLSUB NOP ENTRY/EXIT: CLASS SUBROUTINE. LDA DM3 INITIALIZE RE-TRY COUNTER FOR 3 PASSES, STA RETRY IN CASE SYS. MEM. UN-AVAILABLE. CLA,SEZ,RSS IF RETURN OPTION: SET TO IGNORE ERRORS; LDA RSSIN ELSE, SET TO RECOGNIZE ERRORS. STA ERRIN CONFIGURE ERROR-HANDLING INSTRUCTION. * LDB CLSUB,I GET THE CLASS NUMBER ADDRESS. ISZ CLSUB SET RETURN TO . LDA B,I GET THE CLASS NUMBER--IF ANY. ALR,RAR REMOVE BUFFER-SAVE BIT(#14)--IF ANY. SEZ,RSS IF REQUEST TO GET A CLASS, CLA USE ZERO CLASS NUMBER. IOR CLREQ SET NO-WAIT/CLASS-SAVE BITS(15,13). STA B,I SAVE MODIFIED CLASS NO. SPECIFICATION. STB CLSAD CONFIGURE THE CALL WITH CLASS NO. ADDR. SEZ DE-ALLOCATION REQUEST? JMP DEALC YES. GO TO RETURN THE CLASS NUMBER. * CLALC JSB EXEC GO TO RTE DEF *+5 TO REQUEST DEF CLCTL THE ALLOCATION DEF ZERO OF A CLASS NUMBER, DEF ZERO WHICH WILL BE RETURNED TO CLSAD NOP THE SPECIFIED STORAGE ADDRESS. JMP CLERR REPORT THE SYSTEM-LEVEL ERROR. * SSA,RSS ALLOCATION ERROR? JMP CLRTN NO. GO CLEAR PENDING REQUEST. CPA DM2 YES. NO MEMORY AT PRESENT TIME? JSB DELAY YES--WAIT A WHILE & RE-TRY. JMP CLERR *ERROR: NO CLASS# OR RE-TRIES EXHAUSTED. JMP CLALC GO TO RE-TRY THE ALLOCATION REQUEST. * DEALC JSB EXEC GO TO RTE DEF *+8 TO WRITE A DEF CLS18 ZERO LENGTH DEF ZERO RECORD INTO DEF ZERO THE CLASS, WHICH DEF ZERO IS TO BE DEF ZERO DE-ALLOCATED. DEF ZERO THIS WILL ALLOW DEF CLSAD,I SUSPENDED PROGRAMS NOP TO BE ABORTED. * SETSW CCA SET THE RELEASE RE-TRY SWITCH STA CEXIT TO =-1. * CLRTN JSB EXEC GO TO RTE DEF *+5 TO CLEAR DEF CLS21 THE PENDING DEF CLSAD,I REQUEST DEF ZERO ON THE DEF ZERO CLASS. ERRIN NOP IGNORE ERRORS(YES-NOP; NO-RSS)? RSSIN RSS YES. SKIP TO CHECK FOR DE-ALLOCATION. vNLH JMP CLERR NO--REPORT THE CLASS ERROR. ISZ CEXIT RELEASE PROCESSING COMPLETE? JMP REM15 YES. GO CLEAR THE NO-WAIT BIT(#15). * CPA M1 NO. ARE ALL PENDING REQUESTS CLEARED? RSS YES. SKIP TO CHECK FOR DE-ALLOCATION. JMP SETSW NO. CONTINUE TO CLEAR REQUESTS. * LDA ERRIN GET ALLOCATION/DE-ALLOCATION INDICATOR. SZA IF ALLOCATION IN PROCESS, JMP REM15 GO TO REMOVE BIT#15 & RETURN. * LDA CLSAD,I FOR DE-ALLOCATION: GET CLASS WORD, AND CLMSK REMOVE NON-RELEASE BIT(#13), STA CLSAD,I AND RESTORE CLASS WORD. JMP CLRTN GO TO RETURN THE CLASS NUMBER TO RTE. * REM15 LDA CLSAD,I GET THE CLASS WORD ALR,RAR RETAIN BUFFER-SAVE BIT(#13) & CLASS NO. STA CLSAD,I RESTORE THE CLASS WORD. * JMP CLSUB,I RETURN TO THE CALLER. * CLCTL OCT 100023 CLREQ OCT 120000 CLS18 OCT 100022 CLS21 OCT 100025 CLMSK OCT 117777 CEXIT NOP * CLERR JSB SYSER GO TO INFORM THE USER OF A DEF CLSER CATASTROPHIC CLASS-PROCESSING ERROR. * fRN SKP * NETWORK SECURITY CODE PROCESSOR. * * [ CAUTION: DO NOT MAKE CHANGES TO ,,OR RTNS. ] * SECOD NOP ENTRY/EXIT: SECURITY CODE ROUTINE. JSB PRINT DEF SECMS " SECURITY CODE?_" JSB READ GET THE RESPONSE. CPA B2 ASCII RESPONSE? RSS YES.CONTINUE PROCESSING. JMP SECOD+1 NO. ASK AGAIN. CPB /A USER WISH TO ABORT? JMP ABORT YES--GO DO IT. SPC 1 UNL JSB *+19 LST JSB $LIBR GAIN ACCESS NOP TO SYSTEM RESOURCES. STB #SWRD SAVE MODIFIED SECURITY CODE IN 'RES'. JSB $LIBX RESTORE THE DEF *+1 SYSTEM'S DEF *+1 DEFENSES. SPC 1 JMP SECOD,I RETURN. SPC 1 SECMS DEF *+2 DEF D9 ASC 9, SECURITY CODE? _ * UNL OCT 0,60001,2011,23,2011 JMP *-2 AND *+7 IOR *+7 STA *+1 OCT 0,7000,60001 JMP *-12,I OCT 17,100020,2003,5477 LST SKP * SYSTEM QUIESCEING ROUTINE (SUSPEND NETWORK COMMUNICATIONS). * * [ CAUTION: DO NOT MAKE CHANGES TO ,, OR RTNS.] * QUIES JSB PRINT DEF QHED " SYSTEM QUIESCENCE" QASK JSB PRINT DEF SECMS " SECURITY CODE?_" JSB READ GET THE RESPONSE. CPA B2 ASCII RESPONSE? RSS YES. CONTINUE PROCESSING. JMP QASK NO. ASK AGAIN. CPB /A REQUEST TO ABORT? JMP ABRT4 YES. OBLIGE THE REQUESTOR! SPC 1 UNL JSB *-27 LST CPB #SWRD DOES THE CALLER KNOW THE SECRET? JMP QUIET <> LET HIM PASS! JSB ERROR <> INFORM HIM OF DEF IVRES THE ERROR OF JMP ABRT4 HIS WAYS!!! SPC 1 QUIET JSB RNRQ GO TO RTE DEF *+4 TO REQUEST DEF B2 A GLOBAL LOCK ]a DEF #QRN UPON THE QUIESCENT DEF TEMP1 RESOURCE NUMBER. * JMP TERM GO TO TERMINATION. * SKP * RE-START A FORMERLY QUIESCED SYSTEM. * * [ CAUTION: DO NOT MAKE CHANGES TO ,, OR RTNS.] * REQUE JSB PRINT DEF RQHED " QUIESCENT RE-START" RQASK JSB PRINT DEF SECMS " SECURITY CODE?_" JSB READ GET THE RESPONSE. CPA B2 ASCII RESPONSE? RSS YES. CONTINUE PROCESSING. JMP RQASK NO. ASK AGAIN. CPB /A ABORT REQUEST? JMP ABRT4 YES. GO TO COMPLY. UNL JSB *-49 LST SPC 1 CPB #SWRD DOES THE USER KNOW THE SECRET? JMP QOVER <> ALLOW RE-START. JSB ERROR INFORM HIM OF DEF IVRES THE ERROR OF JMP ABRT4 HIS WAYS!!!! SPC 1 QOVER JSB RNRQ GO TO RTE DEF *+4 TO REQUEST DEF B4 AN UNLOCKING OF DEF #QRN THE QUIESCENT DEF TEMP1 RESOURCE NUMBER. JMP OPT20 CHECK FOR OTHER OPTIONS. * SPC 1 QHED DEF *+2 DEF D9 ASC 9, SYSTEM QUIESCENCE RQHED DEF *+2 DEF D10 ASC 10, QUIESCENT RE-START * SKP * RESOURCE NUMBER ALLOCATION/DE-ALLOCATION ROUTINE. SPC 1 * ENTER: & - DON'T CARE (DESTROYED ON RETURN) * = 0 - ALLOCATE GLOBALLY & LOCK LOCALLY * - 1 - DE-ALLOCATE * - ADDRESS FOR RETURN OF RESOURCE NUMBER * NOTE: DE-ALLOCATION ERRORS ARE IGNORED! * NOTE: RN'S ARE LOCKED LOCALLY, TO PREVENT USE UNTIL COMPLETES. * RNSUB NOP ENTRY/EXIT: RN ALLOCATION/RELEASE RTN. CCB,SEZ IF THIS IS A DE-ALLOCATION REQUEST, CLB THEN RESET THE FLAG TO IGNORE ERRORS. STB ERRN SAVE THE ERROR-PROCESSING FLAG. LDA GALCA INITIALIZE FOR GLOBAL ALLOCATION. SEZ { IF THE REQUEST IS FOR DE-ALLOCATION, LDA DALCA THEN GET DE-ALLOCATE REQUEST CODE. STA RNCOD CONFIGURE CALL WITH PROPER REQUEST CODE. LDA RNSUB,I GET THE STORAGE ADDRESS FOR THE RN. STA RNAD CONFIGURE THE CALL WITH RN ADDRESS. ISZ RNSUB SET RETURN ADDRESS TO BYPASS RN ADDRESS. * JSB RNRQ GO TO RTE TO REQUEST OR RETURN A DEF *+4 GLOBALLY ALLOCATED/LOCALLY LOCKED RNCOD NOP RESOURCE NUMBER. RNAD NOP DEF RNST DUMMY STATUS INFO STORAGE. ISZ ERRN IF DE-ALLOCATION REQUEST ERROR-- JMP RNSUB,I OR NORMAL COMPLETION: RETURN. * JSB SYSER ALLOCATION ERROR: INFORM THE CALLER. DEF RNERM CATASTROPHIC ERROR--NO RETURN! * GALCA DEF GALC ADDRESS OF ALLOCATION CODE. DALCA DEF DALC ADDRESS OF DE-ALLOCATION CODE. GALC OCT 140021 GLOBAL ALLOCATE/LOCAL LOCK/NO ABORT DALC OCT 140040 RELEASE GLOBAL/NO ABORT ERRN NOP ERROR-HANDLING SWITCH(0-IGNORE/1-REPORT) RNST NOP RN STATUS STORAGE (NOT USED). * SKP * DEFINE TOTAL # OF MONITORS * * [ ADD 1 TO THE VALUE FOR EACH NEW MONITOR TO BE ADDED ] * #MON EQU 10 * * DEFINE - # OF MONITORS * MNMON ABS -#MON SPC 1 NAMA DEF NAMES SPC 1 NAMES ASC 3,SMON DEF #ST00+1 STREAM-TYPE 0 OCT 100000 ABORT O.K. * ASC 3,DLIST DEF #ST01+1 STREAM-TYPE 1 OCT 0 NO ABORT! * ASC 3,PLOS DEF #ST02+1 STREAM-TYPE 2 OCT 0 NO ABORT! * ASC 3,NPRGL DEF #ST03+1 STREAM-TYPE 3 OCT 0 NO ABORT! * ASC 3,PTOPM DEF #ST04+1 STREAM-TYPE 4 OCT 0 NO ABORT! * ASC 3,EXECM DEF #ST05+1 STREAM-TYPE 5 OCT 100000 ABORT O.K. * RFAM ASC 3,RFAM DEF #ST06+1 STREAM-TYPE 6 OCT 0 NO ABORT! * ASC 3,OPERM DEXF #ST07+1 STREAM-TYPE 7 OCT 100000 ABORT O.K. * ASC 3,PLOSB DEF #ST08+1 STREAM-TYPE 8 OCT 0 NO ABORT! * ASC 3,PROGL DEF #ST09+1 STREAM-TYPE 9 OCT 0 NO ABORT! * * NEW ENTRY: .........ASC 3,NAME? << ADD NEW MONITOR NAME HERE >> * .........DEF #ST10+1 << DEFINE STRM.-HEADER CLASS-WORD HERE >> * .........OCT X00000 << UPLIN ABORT O.K.: X=1; NO ABORT: X=0>> * .....................<< ADD EXT FOR STRM.-HEADER ENT IN 'RES'>> SKP * ROUTINE TO SCHEDULE USER-SPECIFIED SLAVE MONITORS. * MSET NOP ENTRY/EXIT: MONITOR SCHEDULING RTN. CLA,SEZ,RSS IF =1, DISALLOW DEFAULT SCHEDULING. CCA INITIALIZE A FLAG TO ALLOW STA MFLAG DEFAULT SCHEDULING ON FIRST PASS. MLOOP LDA MNMON INITIALIZE A COUNTER STA MCNT FOR THE NO. OF MONITORS TO SCHEDULE. LDB NAMA INITIALIZE THE STB NAMPT PROGRAM NAME-ARRAY POINTER. * JSB PRINT ASK FOR THE DEF MONMS " MONITOR NAME? _" * JSB READ GET THE USER'S RESPONSE. CPB /E ALL DONE? JMP MSET,I YES. RETURN FOR NEXT OPERATION. CPB /A REQUEST TO ABORT? JMP ABORT YES. GO TO CLEAN UP & EXIT. CPB /D CHECK FOR DEFAULT SCHEDULING. RSS IF IT IS A "/D", THEN SKIP FOR DEFAULT; JMP MNAM ELSE, CONTINUE CHECKING. ISZ MFLAG IF THIS IS NOT A 1RST-PASS DEFAULT JMP NAMER REQUEST--ERROR!--ELSE, JMP MDFLT DEFAULT: GO TO SCHEDULE ALL MONITORS. * MNAM CPA B2 IF RESPONSE WAS ASCII-ALPHA. CHARACTERS, RSS THEN SKIP TO CHECK FOR A VALID NAME; JMP NAMER ELSE, INFORM THE USER OF HIS ERROR! * LDA NAMPT GET THE POINTER TO THE NAME-ARRAY. MCOMP CPB A,I IF THE FIRST TWO CHARACTERS COMPARE, INA,RSS THEN ADVANCE NAME POINTER & SKIP. N JMP NXNAM NO COMPARISON--GO TO CHECK NEXT ENTRY. * LDB PARSB+2 GET CHARACTERS 3 & 4 FROM USER. CPB A,I IF THESE COMPARE TO THE NAME-ARRAY, INA,RSS THEN ADVANCE NAME POINTER & SKIP. JMP NXNAM NO COMPARISON--GO TO CHECK NEXT ENTRY. * LDB PARSB+3 GET CHARACTERS 5 & 6 FROM USER. CPB A,I IF THESE COMPARE, JMP MFOUN THEN GO TO SCHEDULE THE MONITOR. * NXNAM LDA NAMPT ADVANCE THE ADA B5 NAME-ARRAY POINTER TO POINT STA NAMPT TO THE NEXT MONITOR'S NAME. LDB PARSB+1 GET USER'S FIRST TWO CHARACTERS AGAIN. ISZ MCNT HAVE ALL OF THE NAMES BEEN CHECKED? JMP MCOMP NO. GO TO CHECK THE NEXT ONE. * NAMER JSB ERROR INFORM THE USER OF HAVING SUPPLIED AN DEF INVNM " INVALID NAME!" JMP MLOOP GO BACK TO TRY AGAIN. * SKP MFOUN CLA CLEAR 'MFLAG' IN ORDER TO STA MFLAG DIS-ALLOW DEFAULT SCHEDULING. * CLE SPECIFY MONITOR SCHEDULING. JSB MSKED GO TO SCHEDULE THE MONITOR. JMP MLOOP GO TO ASK FOR THE NEXT NAME. * MDFLT CLE SPECIFY MONITOR SCHEDULING. JSB MSKED GO TO SCHEDULE A MONITOR. LDA NAMPT ADVANCE THE ADA B5 NAME-ARRAY POINTER TO POINT STA NAMPT TO THE NEXT MONITOR'S NAME. ISZ MCNT HAVE ALL MONITORS BEEN SCHEDULED? JMP MDFLT NO. GO TO SCHEDULE THE NEXT ONE. JMP MSET,I YES. RETURN FOR THE NEXT OPERATION. * PRAM1 NOP PROGRAM PRAM2 NOP SCHEDULING PRAM3 NOP PARAMETER PRAM4 NOP STORAGE PRAM5 NOP LOCATIONS. RFMDF DEF RFAM SCHNW OCT 100012 STMPT NOP NAMPT NOP MCNT NOP MFLAG NOP SPC 1 * DO NOT CHANGE ORDER OF 'MCLAS' & 'IDAD' * SPC 1 MCLAS NOP IDAD NOP * QUES ASC 2,MON? ASTAT ASC 2,STAT SMES DEF *+2 DEF D10 ASC 4, ERROR: ERCO[D ASC 3, : SNAM ASC 3,XXXXX MONMS DEF *+2 DEF D8 ASC 8, MONITOR NAME? _ INVNM DEF *+2 DEF B7 ASC 7, INVALID NAME! * D99 DEC 99 B5 OCT 5 * SKP * SUBROUTINE TO SCHEDULE A MONITOR & INITIALIZE IT'S LIST-HEADER ENTRY. * MSKED NOP ENTRY/EXIT: MONITOR SCHEDULER. SEZ MONITOR OR OTHER SCHEDULE REQUEST? JMP SCHED GO TO SCHEDULE ANOTHER PROCESSOR. JSB PGMAD GO TO GET MONITOR'S ID SEGMENT ADDRESS. DEF *+2 DEF NAMPT,I ADDRESS OF MONITOR'S NAME. SZA,RSS IS THE MONITOR PRESENT? JMP MON? NO. INFORM THE USER. STA IDAD YES. SAVE I.D. SEGMENT ADDRESS. LDA B GET MONITOR'S STATUS INTO . AND B17 ISOLATE THE MONITOR'S STATUS. SZA IS IT DORMANT? JMP STERR NO. INFORM USER OF ERROR. * CLE GET A JSB CLSUB CLASS NUMBER DEF MCLAS FOR THE MONITOR. LDB NAMPT GET THE NAME-ARRAY POINTER. ADB B3 ADVANCE TO THE STREAM-LIST ENTRY. LDA B,I GET ADDRESS OF STREAM-LIST CLASS-WORD. STA STMPT SAVE FOR 'RES' INITIALIZATION. INB ADVANCE TO THE ABORT-FLAG ENTRY. LDA IDAD GET THE I.D. SEGMENT ADDRESS. IOR B,I INCLUDE THE ABORT-FLAG BIT(#15)--IF ANY. STA IDAD RESTORE THE FLAGGED I.D. SEGMENT ADDRESS * JSB $LIBR GAIN ACCESS TO NOP SYSTEM RESOURCES. DLD MCLAS GET CLASS NO. & ID SEG. ADDRESS. DST STMPT,I STORE INTO STREAM LIST-HEADER IN 'RES'. JSB $LIBX RESTORE DEF *+1 THE SYSTEM'S DEF *+1 DEFENSES. * CLB CLEAR THE FIFTH STB PRAM5 SCHEDULING PARAMETER. LDA NAMPT GET THE NAME-ARRAY POINTER. CPA RFMDF IF 'RFAM' IS BEING SCHEDULED, THEN JMP RFSCH GO TO SET UP THE REQUIRED PARAMETERS. LDA MCLAS GE#T THE MONITOR'S CLASS NUMBER, AND STA PRAM1 SAVE FOR FIRST SCHEDULING PARAMETER. STB PRAM2 CLEAR ALL STB PRAM3 OF THE OTHER STB PRAM4 SCHEDULING PARAMETERS. JMP SCHED GO TO SCHEDULE THE MONITOR. * RFSCH JSB FILIN GO TO GET THE FILE COUNT FOR , AND STA PRAM2 SAVE FOR SECOND SCHEDULING PARAMETER. LDA D99 DECIMAL 99 (RFAM INITIALIZATION FLAG) IS STA PRAM1 THE FIRST SCHEDULING PARAMETER. LDA MCLAS THE THIRD SCHEDULING PARAMETER STA PRAM3 IS CLASS NUMBER. LDA RXCL# CLASS NUMBER IS THE FOURTH AND STA PRAM4 FINAL SCHEDULING PARAMETER FOR . SKP * SCHED JSB EXEC GO TO RTE DEF *+8 TO SCHEDULE DEF SCHNW THE MONITOR DEF NAMPT,I WITHOUT WAIT. DEF PRAM1 SCHEDULING PARAMETER #1. PR2AD DEF PRAM2 SCHEDULING PARAMETER #2. DEF PRAM3 SCHEDULING PARAMETER #3. DEF PRAM4 SCHEDULING PARAMETER #4. DEF PRAM5 SCHEDULING PARAMETER #5. JMP STCOD * ERROR--REPORT TO USER * SZA WAS IT CORRECTLY SCHEDULED? JMP STERR NO--INCORRECT STATUS ERROR. * * LDB NAMPT GET NAME-ARRAY ADDR OF CURRENT SCHEDULEE CPB RFMDF IF IT IS 'RFAM' THEN RSS SKIP TO AWAIT COMPLETION; ELSE, JMP MSKED,I RETURN TO THE CALLER (=STATUS). * JSB EXEC TERMINATE DEF *+4 AND SAVE RESOURCES, DEF D6 TO AWAIT DEF ZERO RE-AWAKENING BY DEF B1 THE RFA MONITOR. * LDA B,I GET THE RETURNED PARAMETER. CPA RXCL# IF IT IS THE 'RFAEX' CLASS NUMBER, JMP MSKED,I THEN RFA IS SET UP CORRECTLY; ELSE, JMP STERR INFORM USER OF THE ERROR! * MON? DLD QUES GET THE MONITOR-MISSIN NG INDICATOR. JMP STCOD SAVE FOR THE ERROR MESSAGE. STERR DLD ASTAT GET THE STATUS-PROBLEM INDICATOR. STCOD DST ERCOD SAVE THE ERROR CODE. * DLD NAMPT,I GET THE NAME DST SNAM OF THE MONITOR, LDB NAMPT AND SAVE IT ADB B2 FOR USE IN LDA B,I THE ERROR-REPORT STA SNAM+2 MESSAGE. * JSB ERROR GO TO PRINT THE DEF SMES ERROR MESSAGE. JMP MSKED,I RETURN TO THE CALLER. * SKP * SCHEDULE , THE TRANSACTION MONITOR & CLEANUP PROGRAM, * TO RUN EVERY FIVE SECONDS. * SUPLN NOP JSB EXEC GO TO THE DEF *+6 RTE EXECUTIVE DEF SCHTM TO TIME-SCHEDULE DEF UPLIN DEF B2 TO BE RUN DEF B5 EVERY FIVE SECONDS; DEF DM2 TO BEGIN IN TWO SECONDS. RSS IF A SYSTEM ERROR IS DETECTED, SKIP; JMP SUPLN,I ELSE, RETURN TO THE CALLER. * JSB SYSER INFORM THE USER OF A CATASTROPHIC ERROR: DEF UPMES 'UPLIN' WAS NOT SCHEDULED. [NO RETURN] * SCHTM OCT 100014 UPMES DEF *+2 DEF D12 ASC 2, ** UPLIN ASC 3,UPLIN ASC 7,NOT SCHEDULED! * * SCHEDULE QUEUEING PROCESSORS: ,,& . * SCHDQ NOP ENTRY/EXIT LDA NAMAD GET THE ADDRESS OF THE FIRST PROCESSOR. STA NAMPT INITIALIZE POINTER TO PROGRAM NAME ARRAY. LDA NMCNT INITIALIZE A NEGATIVE COUNTER STA NCNTR FOR NUMBER OF PROGRAMS TO BE SCHEDULED. CLA SET THE CLASS PARAMETER =0 (DUMMY), STA PRAM1 SINCE IT'S ALREADY STORED IN . STA PRAM2 CLEAR STA PRAM3 REMAINING STA PRAM4 SCHEDULING STA PRAM5 PARAMETERS. * SCHDL CCE SPECIFY OTHER-PROCESSOR SCHEDULING. JSB MSKED GO TO SCHEDULE THE PROCESSOR. SZA CAhkTASTROPHIC ERROR? JMP ABORT YES ** ABORT ** LDA NAMPT GET THE NAME-ARRAY POINTER. ADA B3 ADD AN OFFSET FOR NEXT NAME ENTRY. STA NAMPT UPDATE THE ARRAY POINTER. ISZ NCNTR ALL QUEUEING PROCESSORS BEEN SCHEDULED? JMP SCHDL NO. GO TO SCHEDULE THE NEXT ONE. JMP SCHDQ,I YES. RETURN TO THE CALLER. * NCNTR EQU SUPLN NMCNT EQU DM3 NAMAD DEF *+1 POINTER TO FIRST PROGRAM'S NAME. ASC 3,SRPM SLAVE PRE-PROCESSING MONITOR. ASC 3,GRPM GENERAL PRE-PROCESSING MONITOR. ASC 3,QCLM QUEUEING CLEAN-UP MONITOR. * SKP * SUBROUTINE TO PRINT MESSAGES ON INTERACTIVE TERMINALS--ONLY. * * CALLING SEQUENCES: * * JSB PRINT....PRINT:" /LSTEN:" JSB PRNTX....PRINT:"" * DEF MESSAGE DEF MESSAGE * PRNTX NOP ENTRY/EXIT: PRINT W/O HEADER LDA PRNTX GET THE RETURN ADDRESS. STA PRINT SAVE FOR THE RETURN. LDA A,I GET THE MESSAGE ADDRESS, STA OLDAD AND SAVE FOR ERROR-TRANSFER ROUTINE. DLD A,I GET THE MESSAGE SPECIFICATIONS, DST PRNT1 AND CONFIGURE THE CALLING SEQUENCE. JMP PRNT0 GO TO PRINT THE MESSAGE W/O HEADER. * PRINT NOP NORMAL ENTRY/EXIT DLD NORMA RE-ESTABLISH THE DST PRNT1 NORMAL MESSAGE SPECIFICATIONS. LDA MSGAD INITIALIZE THE STA BUFPT MESSAGE BUFFER POINTER. LDB PRINT,I GET ADDRESS OF MESSAGE INFORMATION. LDA ERXTM IF THE ERROR-TRANSFER ROUTINE IS SZA,RSS IN CONTROL, BYPASS 'OLDAD' UPDATING. STB OLDAD SAVE IT FOR THE ERROR-TRANSFER ROUTINE. DLD B,I GET BUFFER ADDRESS AND LENGTH. STA MSPNT SAVE FOR SOURCE POINTER. LDB B,I GET THE MESSAGE LENGTH. ADB B5 CONFIGURE THE LENGTH FOR STB PRNTL INCLUSION OF THE HEADER. CMB,INB FORM A NEGATIVE COUNTER e ADB B5 FOR USE IN MOVING THE MESSAGE. LDA D20 IF THE MESSAGE LENGTH ADA B EXCEEDS THE MAXIMUM SSA BUFFER SIZE, THEN JMP PRNTA IGNORE THE REQUEST; ELSE, MSGET LDA MSPNT,I TRANSFER STA BUFPT,I THE ISZ MSPNT MESSAGE ISZ BUFPT TO THE INB,SZB PRINT JMP MSGET BUFFER. LDA TTYF GET TTY FLAG LDB ERFLG GET ERROR FLAG SZB,RSS ERROR OR SZA,RSS OR INTERACTIVE RSS YES...PRINT MESSAGE JMP PRNTA NO ERROR AND NOT INTERACTIVE LDA RLU GET INTERACTIVE LU SZB ERROR? LDA ERLU YES...ERROR LU STA PRTLU SAVE AS PRINT LU PRNT0 JSB REIO PRINT MESSAGE DEF *+5 DEF B2 DEF PRTLU PRINT LU PRNT1 DEF HEDMS MESSAGE ADDRESS. DEF PRNTL MESSAGE LENGTH. PRNTA ISZ PRINT POINT TO RETURN ADDRESS JMP PRINT,I RETURN SPC 1 B2 OCT 2 D20 DEC 20 ERLU NOP ERROR LOGICAL UNIT NO. PRTLU NOP PRNTL NOP OLDAD NOP PREVIOUS MESSAGE ADDRESS. MSPNT NOP BUFPT NOP NORMA DEF HEDMS DEF PRNTL MSGAD DEF MSGBF HEDMS OCT 6412 CARRIAGE-RETURN/LINEFEED. ASC 4, /LSTEN: MSGBF BSS 20 * SPC 2 * ROUTINE TO DECIDE WHICH TYPE OF INPUT DEVICE * EITHER FILE OR LU * IF LU, A REG WILL CONTAIN LU TYPE * CALLING SEQUENCE * JSB CHCKN * FILE RETURN * LU RETURN * CHCKN NOP LDB FILFG GET FILE FLAG LDA TTYF GET TTY FLAG SZB,RSS LU OR FILE ISZ CHCKN LU JMP CHCKN,I AND RETURN * FILFG NOP FILE FLAG. SPC 2 * SUBROUTINE TO PRINT SYSTEM ERROR MESSAGES AND * ABORT * CALLING SEQUENCE * JSB SYSER * DEF ERR MESSAGE * SYSER NOP LDA SYSER,I STA SYSAD JSB PRINT SYSAD NOP JMP ABORT AFTE$R MESSAGE...ABORT * SKP * SUBROUTINE TO READ FROM A SELECTED INPUT DEVICE * WILL PARSE THE INPUT AND PLACE RESULT IN A BUFFER * CALLED PARSB. * CALLING SEQUENCE * JSB READ * UPON RETURN A REG=PARSB, B REG=PARSB+1 * READ NOP JSB CHCKN FILE OR LU JMP READB FILE READA LDA RLU GET READ LU LDB RDER IS THIS AN ERROR READ? SZB LDA ERLU YES...READ FOR ERROR DEVICE STA REDLU SAVE READ LU JSB REIO ISSUE THE READ DEF *+5 DEF B1 DEF REDLU DEF INBUF DEF INBFS SZB EOF HIT? JMP READC NO REDER ISZ RDER SET READ-ERROR FLAG. JSB ERXFR INDICATE ERROR, AND ALLOW RE-TRY. DEF EOFM "EOF...INPUT NEEDED" JMP READA TRY AGAIN SPC 1 READB JSB READF READ FROM A FILE DEF *+6 DEF INDCB DEF RSTAT DEF INBUF DEF INBFS DEF ILEN LDB ILEN GET LENGTH SSB,RSS SZB,RSS ZERO OR - ERROR JMP REDER READC CLE,ELB CONVERT TO BYTE LENGTH STB ILEN SAVE LENGTH JSB PARSE GO PARSE INPUT DEF *+4 DEF INBUF DEF ILEN PBDEF DEF PARSB CLA CLEAR OUT READ-ERROR FLAG STA RDER DLD PARSB LOAD A AND B REG JMP READ,I AND RETURN * RDER NOP REDLU NOP ILEN NOP RSTAT NOP SKP * ROUTINE TO PRINT ERROR MESSAGE. * * CALLING SEQUENCE: * * JSB ERROR * DEF * * WILL SET ERROR FLAG FOR RETRY * ERROR NOP LDA ERROR,I STA ERRAD ISZ ERFLG JSB PRINT ERRAD NOP CLA STA ERFLG ISZ ERROR JSB CHCKN IF A FILE IS IN CONTROL, JMP ABORT THEN NO 2ND CHANCES ARE POSSIBLE! JMP ERROR,I AND RETURN SPC 1 ERFLG NOP SPC 3 * PRINT THE ERROR MESSAGE AND REPEAT THE QUESTION ON THE (ERROR LU) DEVICE. * * CALLING SEQUENCE: * * JSB ERXFR * DEF * ERXFR NOP ENTRY/EXIT: ERROR TRANSFER ROUTINE LDA ERXFR,I GET ADDRESS OF MESSAGE INFORMATION. STA ERXAD SAVE FOR 'PRINT' CALL. LDA OLDAD GET ADDRESS OF QUESTION INFORMATION. STA ERXTM SAVE LOCALLY FOR QUERY. ISZ ERFLG FORCE THE USE OF THE (ERROR LU). JSB PRINT GO TO PRINT ERXAD NOP THE ERROR MESSAGE. * JSB PRINT GO TO REPEAT THE QUESTION DEF ERXTM,I ON THE (ERROR LU) DEVICE. CLA CLEAR OUT STA ERFLG THE ERROR FLAG, STA ERXTM AND THE ERROR-TRANSFER FLAG. ISZ ERXFR BYPASS THE MESSAGE DEFINITION JMP ERXFR,I UPON RETURNING TO THE CALLER. * ERXTM NOP STORAGE: QUESTION DEFINITION ADDRESS. * SKP * HERE ON ANY ABORT CONDITIONS * WILL CLEAR ALL LU'S, FLAGS, * DE-ALLOCATE ALL RN'S AND CLASS NUMBERS, * AND TERMINATE ALL MONITORS. * CALLING SEQUENCE * JMP ABORT * ABORT LDA ONTWO OPTION 1 OR 2 SZA JMP ABRT4 OPTION 2 * LDA LUBUF GET THE CONTENTS OF THE LU BUFFER SZA,RSS HAVE ANY ENTRIES BEEN MADE? JMP MKILL NO. BYPASS LU-CLEAR SECTION. * LDA LUMAX INITIALIZE A COUNTER FOR THE MAXIMUM STA LUCNT NUMBER OF LU'S TO BE PROCESSED. LDA LUAD INITIALIZE POINTER TO STA LUPNT LU STORAGE BUFFER. * LOOP ISZ LUCNT HAS THE LAST LU BEEN CHECKED? RSS NO. CONTINUE TO CLEAR LU'S. JMP MKILL YES. GO ON TO TERMINATE THE MONITORS. * LDA LUPNT,I GET THE CURRENT LU NUMBER. SZA,RSS IS AN LU PRESENT? JMP MKILL NO. GO TO ABORT THE MONITORS. * IOR B200 INCLUDE SUB-FUNCTION =2: CLEAR REQUEST. STA CLU SAVE THE CONFIGURED CONTROL WORD. * JSB EXEC GO TO RTE DEF *+4 TO REQUEST THAT 7NLH DEF SD3 DVR65 CLEAR OUT DEF CLU ANY PREVIOUS DEF LRN CONFIGURATION DATA. NOP * IGNORE ERRORS * * CCE CLEAR THE JSB RNSUB RESOURCE NUMBER DEF LRN FOR THE COMM. LINE RN. CCE CLEAR THE JSB RNSUB RESOURCE NUMBER DEF PRN FOR THE 'PROGL' RN. * ISZ LUPNT ADVANCE POINTER TO THE NEXT LU NO. JMP LOOP GO BACK TO PROCESS THE NEXT LU. * jN SKP MKILL LDA #FWAM IF SYSTEM AVAILABLE MEMORY SZA,RSS HAS NOT BEEN ALLOCATED, JMP ABRT4 THEN GO TO COMPLETION. LDA MNMON GET NEGATIVE NUMBER OF MONITORS. STA MCNT SAVE AS A LOOP COUNTER. LDB NAMA GET THE ADDRESS OF THE NAME-ARRAY. ABMON STB NAMPT SAVE AS A POINTER. ADB B3 POINT TO 'DEF' TO THE STREAM-LIST ENTRY. LDA B,I GET ADDRESS OF THE STREAM-LIST ENTRY. LDA A,I GET THE MONITOR CLASS NO.--IF ANY. SZA,RSS IS THIS MONITOR ACTIVE? JMP ABNEX NO. GO TO TRY THE NEXT MONITOR. STA MCLAS YES. SAVE THE CLASS NO. FOR RELEASE. JSB KILLM GO TO TERMINATE THE MONITOR. * ABNEX LDB NAMPT GET THE NAME-ARRAY POINTER. ADB B5 ADVANCE THE POINTER TO THE NEXT ENTRY. * ISZ MCNT HAVE ALL MONITORS BEEN ABORTED? JMP ABMON NO. GO BACK TO KILL THE NEXT ONE. * * GATHER ALL RN'S AND CLASS NUMBERS FROM 'RES' FOR LOCAL PROCESSING. * LDA #TBRN STA TBRN# LDA #GRPM STA GRPM# LDA #GPRN STA GPRN# LDA #SRPM STA SRPM# LDA #QCLM STA QCLM# LDA #RXCL STA RXCL# LDA #QRN STA QRN# * CCE GO TO RELEASE THE JSB CLSUB CLASS NUMBER DEF RXCL# FOR 'RFAM'/'RFAEX' COMMUNICATIONS. * JSB MESSS ABORT 'RFAEX' DEF *+3 VIA THE DEF RFKIL RTE SYSTEM'S DEF D10 MESSAGE PROCESSOR. * LDA NAMAD GET POINTER TO 'SRPM' NAME ARRAY. STA NAMPT SET POINTER FOR 'KILLM' ROUTINE. LDA SRPM# GET 'SRPM' CLASS NUMBER. STA MCLAS SET FOR RELEASE BY 'KILLM'. JSB KILLM GO TO TERMINATE 'SRPM'. * LDA NAMPT GET NAME ARRAY POINTER. ADA B3 POINT TO 'GRPM' NAME ARRAY. STA NAMPT SET POINTER FOR TERMINATION. LDA GRPM# GET 'GRPM' CLASS NUMHBER. STA MCLAS SET FOR RELEASE BY 'KILLM'. JSB KILLM GO TO TERMINATE 'GRPM'. * LDA NAMPT GET NAME ARRAY POINTER. ADA B3 POINT TO 'QCLM' NAME ARRAY. STA NAMPT SET POINTER. LDA QCLM# GET 'QCLM' CLASS NUMBER. STA MCLAS SET FOR RELEASE. JSB KILLM GO TO TERMINATE 'QCLM'. * CCE GO TO RELEASE THE JSB RNSUB RESOURCE NUMBER DEF TBRN# FOR TABLE-ACCESS CONTROL. CCE GO TO RELEASE THE JSB RNSUB RESOURCE NUMBER DEF GPRN# FOR THE GENERAL PRE-PROCESSOR MODULE. CCE GO TO RELEASE THE JSB RNSUB RESOURCE NUMBER DEF QRN# FOR SYSTEM-QUIESCENCE CONTROL. * JSB #RSAX GO TO THE SYSTEM-RESOURCE DEF *+3 CONTROL-ROUTINE, IN ORDER TO DEF ZERO RETURN SYSTEM AVAILABLE MEMORY, DEF #FWAM WHICH WAS PREVIOUSLY ALLOCATED. * JSB CLEAR GO TO CLEAR SYSTEM DATA AREA IN . * ABRT4 JSB PRINT PRINT ABORT MESSAGE DEF ABRTM "LSTEN ABORTED" DLD ABPRM DST ENMSG JMP TERM * SKP KILLM NOP ENTRY/EXIT: TERMINATION ROUTINE JSB EXEC GO TO RTE DEF *+4 TO REQUEST DEF KILCD TERMINATION DEF NAMPT,I OF THE SPECIFIED DEF B3 PROGRAM. NOP * IGNORE ERRORS * * CCE RELEASE JSB CLSUB THE PROGRAM'S DEF MCLAS CLASS NUMBER. * JMP KILLM,I RETURN TO THE CALLER. SPC 1 B7 OCT 7 KILCD OCT 100006 ABPRM OCT 100000 ASC 1,ER RFKIL ASC 5,OF,RFAEX,1 SPC 3 * ROUTINE TO CLEAR 'LSTEN'-INITIALIZED ENTRIES IN . SPC 1 CLEAR NOP ENTRY/EXIT LDA #NCLR INITIALIZE A COUNTER FOR THE STA TEMP1 SIZE OF THE AREA TO BE CLEARED. LDA #SCLR GET A POINTER TO THE START OF TH#E AREA. RSS SKIP TO CHECK FOR INDIRECT ADDRESS. LDA A,I GET A RAL,CLE,SLA,ERA DIRECT ADDRESS FOR JMP *-2 THE POINTER. STA NAMPT SAVE THE ADDRESS POINTER. JSB $LIBR GAIN ACCESS TO NOP SYSTEM RESOURCES. CLA CLEAR CLOOP STA NAMPT,I THE ISZ NAMPT 'LSTEN'-INITIALIZED ISZ TEMP1 STORAGE LOCATIONS JMP CLOOP IN 'RES'. * JSB $LIBX RESTORE THE DEF CLEAR SYSTEM'S DEFENSES. * SKP * FERMG DEF *+2 DEF D6 ASC 6, FILE ERROR * RNERM DEF *+2 DEF B5 ASC 5, RN ERROR * MSG1 DEF *+2 DEF D6 ASC 6, LINE LU? _ * LUERM DEF *+2 DEF B5 ASC 5, LU ERROR * TRFM DEF *+2 DEF D8 ASC 8, TR FILE ERROR * FILMG DEF *+2 DEF D10 ASC 10, INPUT # OF FILES: _ * LUSZR DEF *+2 DEF B7 ASC 7, TO MANY LU'S * EOFM DEF *+2 DEF D10 ASC 10, EOF..INPUT MORE * ABRTM DEF *+2 DEF D8 ASC 8, LSTEN ABORTED! * CLSER DEF *+2 DEF D9 ASC 9, CLASS I/O ERROR * ENDMG DEF *+2 DEF B5 ENMSG ASC 5, END LSTEN * UPLUM DEF *+2 DEF D12 ASC 12, LU TO BE RE-ENABLED? _ * OPMES DEF *+2 DEF B7 ASC 7, OPERATION? _ * SKP * EXPMS DEF *+2 DEF D95 OCT 6412 CARRIAGE-RETURN/LINE-FEED ASC 9, ??: LIST COMMANDS OCT 6412 ASC 5, /A: ABORT! OCT 6412 ASC 7, /E: TERMINATE OCT 6412 ASC 10, /L: RE-ENABLE LINE OCT 6412 ASC 10, /Q: QUIESCE NETWORK OCT 6412 ASC 12, /S: SCHEDULE MONITOR(S) OCT 6412 OCT 6412 ASC 12, QUIESCENT SYSTEM ONLY: OCT 6412 ASC 11, /R: RE-START NETWORK OCT 6412 ASC 9, /T: ADJUST TIMING * SPC 3 A EQU 0 B EQU 1 BUFS EQU 20 PBUFS EQU 34 INbGBFS ABS BUFS INBUF BSS BUFS PARSB BSS PBUFS INDCB BSS 144 SPC 1 BSS 0 << SIZE OF 'LSTEN' >> SPC 1 END LSTEN c 2 91700-18110 1552 S 0122 DS1/B CCE MODULE: DAPOS              H0101 >ASMB,R,L,C HED DAPOS 91700-16110 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DAPOS,7 91700-16110 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DAPOS EXT APOSN EXT .ENTR SPC 5 * * DAPOS * SOURCE:91700-18110 * BINARY:91700-16110 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 5 NOP DAPOS NOP JSB .ENTR DEF PRAMS * LDA D3 SET UP DEFAULT # OF PARAMETERS STA #PRMS * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * DLD PRAMS+2 MOVE 2ND TWO DST PRAM1+2 * * SZB,RSS WAS THE 4TH ONE THERE? JMP DONE NO DONE * ISZ #PRMS YES INCREMENT COUNT LDA PRAMS+4 MOVE POSSIBLE 5TH * SZA,RSS THERE? JMP DONE NO FINISHED ISZ #PRMS YES BUMP COUNT & STORE AWAY STA PRAM1+4 DONE LDA #PRMS CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR JSB CLEAR CLEAR PARAMETER ARRAY LDA PRAM1+1,I GET IERR JMP DAPOS,I FINISHED RETURN TO USER SPC 5 RFASR NOP JSB APOSN DRTN NOP PRAM1 REP 5 NOP JMP RFASR,I SPC 5 CLEAR NOP CLA CLEAR OPTIONAL PARAMETER DEFS CLB DST PRAMS+3 DST PRAM1+3 JMP CLEAR,I SPC 5 * CONSTANTS D3 DEC 3 ADDS DEF DRTN+1 #PRMS NOP END * AN ERROR EXISTS (G    91700-18111 1552 S 0122 DS1/B CCE MODULE: DCLOS              H0101 @ASMB,R,L,C HED DCLOS 91700-16111 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DCLOS,7 91700-16111 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DCLOS EXT CLOSE EXT .ENTR SPC 5 * * DCLOS * SOURCE:91700-18111 * BINARY:91700-16111 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 3 NOP DCLOS NOP JSB .ENTR DEF PRAMS * * * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * LDA PRAMS+2 MOVE 3RD STA PRAM1+2 * LDA D3 CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR CLB STB PRAMS+2 CLEAR OPTIONAL PARAMETERS STB PRAM1+2 JMP DCLOS,I FINISHED RETURN TO USER RFASR NOP JSB CLOSE DRTN NOP PRAM1 REP 3 NOP JMP RFASR,I SPC 5 * CONSTANTS D3 DEC 3 ADDS DEF DRTN+1 END * AN ERROR EXISTS k  91700-18112 1552 S 0122 DS1/B CCE MODULE: DCONT              H0101 ?ASMB,R,L,C HED DCONT 91700-16112 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DCONT,7 91700-16112 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DCONT EXT FCONT EXT .ENTR SPC 5 * * DCONT * SOURCE:91700-18112 * BINARY:91700-16112 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 4 NOP DCONT NOP JSB .ENTR DEF PRAMS * LDA D3 SET UP DEFAULT # OF PARAMETERS STA #PRMS * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * DLD PRAMS+2 MOVE 2ND TWO DST PRAM1+2 * * SZB,RSS WAS THE 6TH ONE THERE? JMP DONE NO DONE * ISZ #PRMS YES INCREMENT COUNT DONE LDA #PRMS CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR JSB CLEAR CLEAR PARAMETER ARRAY JMP DCONT,I FINISHED RETURN TO USER SPC 5 RFASR NOP JSB FCONT DRTN NOP PRAM1 REP 4 NOP JMP RFASR,I SPC 5 CLEAR NOP CLB CLEAR OPTIONAL PARAMETER DEF STB PRAMS+3 STB PRAM1+3 * JMP CLEAR,I SPC 5 * CONSTANTS D3 DEC 3 ADDS DEF DRTN+1 #PRMS NOP END * AN ERROR EXISTS   91700-18113 1552 S 0122 DS1/B CCE MODULE: DCRET              H0101 6ASMB,R,L,C HED DCRET 91700-16113 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DCRET,7 91700-16113 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DCRET EXT CREAT EXT .ENTR SPC 5 * * DCRET * SOURCE:91700-18113 * BINARY:91700-16113 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 7 NOP DCRET NOP JSB .ENTR DEF PRAMS * LDA PRAMS+6 IS THE DESTINATION SPECIFIED SZA,RSS JMP MORE NO DEFAULT TO CENTRAL INA STEP TP DESTINATION WORD LDA A,I PICK IT UP SZA IS IT LOCAL JMP ERROR NO EXIT WITH ERROR * * MORE LDA D5 SET UP DEFAULT # OF PARAMETERS STA #PRMS * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * DLD PRAMS+2 MOVE 2ND TWO DST PRAM1+2 * DLD PRAMS+4 MOVE 5TH & POSSIBLE 6TH DST PRAM1+4 * SZB,RSS WAS THE 6TH ONE THERE? JMP DONE NO DONE * ISZ #PRMS YES INCREMENT COUNT LDA PRAMS+6 MOVE POSSIBLE 7TH * SZA,RSS THERE? JMP DONE NO FINISHED ISZ #PRMS YES BUMP COUNT & STORE AWAY STA PRAM1+6 DONE LDA #PRMS CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR JSB CLEAR CLEAR PARAMETER ARRAY LDA PRAMS+1,I JMP DCRET,I FINISHED RETURN TO USER SPC 5 * CLEAR ARRAY & CALL CONSOLE OUTPUT ERROR JSB CLEAR LDA MD18 RETURN DESTINATION ERROR PARAMETER STA PRAMS+1,I TO USER JMP   DCRET,I & RETURN SPC 5 RFASR NOP JSB CREAT DRTN NOP PRAM1 REP 7 NOP JMP RFASR,I SPC 5 CLEAR NOP CLA CLEAR DEF TO OPTIONAL PARAM CLB DST PRAMS+5 DST PRAM1+5 JMP CLEAR,I SPC 5 * CONSTANTS A EQU 0 D5 DEC 5 ADDS DEF DRTN+1 MD18 DEC -18 #PRMS NOP END * AN ERROR EXISTS "   91700-18114 1552 S 0122 DS1/B CCE MODULE: DLOCF              H0101 =ASMB,R,L,C HED DLOCF 91700-16114 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DLOCF,7 91700-16114 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DLOCF EXT LOCF EXT .ENTR SPC 5 * * DLOCF * SOURCE:91700-18114 * BINARY:91700-16114 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 9 NOP DLOCF NOP JSB .ENTR DEF PRAMS * LDA APRMS SET UP SOURCE ADDRESS STA PRMSA * LDA APRM1 SET UP DESTINATION ADDRESS STA APRM2 * LDA MD9 SET UP LOOP COUNTER STA CONTR * CLB CLEAR PARAMETER COUNTER * LOOP LDA PRMSA,I MOVE PARAMETERS TO 2NDARY SZA,RSS JMP OUT STA APRM2,I ARRAY COUNTING AS YOU GO INB ISZ PRMSA INCREMENT POINTERS ISZ APRM2 ISZ CONTR DONE YET? JMP LOOP NO-CONTINUE * * OUT ADB ADDS STB DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR JSB CLEAR CLEAR PARAMETER ARRAY JMP DLOCF,I FINISHED RETURN TO USER SPC 5 RFASR NOP JSB LOCF DRTN NOP PRAM1 REP 9 NOP JMP RFASR,I SPC 5 CLEAR NOP LDB APRMS SET UP CLEAR ADDRESS STB PRMSA * LDB PRM1 STB PR1 * LDB MD9 BUILD LOOP COUNTER STB CONTR * CLB LOOP1 STB PRMSA,I CLEAR A WORD STB PR1,I ISZ PRMSA INCREMENT POINTERS ISZ PR1 ISZ CONTR JMP LOOP1 * JMP CLEAR,I SPC 5 * CONSTANTS CONTR NOP APRMS DEF PRAMS PRMSA NOP ADDSo   DEF DRTN+1 MD9 DEC -9 APRM1 DEF PRAM1 APRM2 NOP PRM1 DEF PRAM1 PR1 NOP END * AN ERROR EXISTS )   91700-18115 1552 S 0122 DS1/B CCE MODULE: DNAME              H0101 IASMB,R,L,C HED DNAME 91700-16115 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DNAME,7 91700-16115 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DNAME EXT NAMF EXT .ENTR SPC 5 * * DNAME * SOURCE:91700-18115 * BINARY:91700-16115 * SHANE DICKEY * AUGUST 29,1974 * PRAMS REP 6 NOP DNAME NOP JSB .ENTR DEF PRAMS * LDA PRAMS+5 IS THE DEST CODE SPECIFIED? SZA,RSS JMP MORE CONTINUE * INA STEP PAST CART. LABEL LDA A,I TO DESTINATION CODE SZA CENTRAL CALL? JMP ERROR NO ABORT USER MORE LDA D4 SET UP DEFAULT # OF PRAMS. STA #PRMS * * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * DLD PRAMS+2 DST PRAM1+2 MOVE 2ND TWO * DLD PRAMS+4 MOVE POSSIBLE 5TH & 6TH DST PRAM1+4 * SZA,RSS WAS THE 5TH ONE THERE? JMP DONE NO-DONE * ISZ #PRMS YES INCREMENT COUNT * SZB,RSS THERE? JMP DONE NO FINISHED ISZ #PRMS YES BUMP COUNT & STORE AWAY DONE LDA #PRMS CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR JSB CLEAR CLEAR PARAMETER ARRAY LDA PRAMS+1,I GET IERR JMP DNAME,I FINISHED RETURN TO USER SPC 5 * CLEAR ARRAY & CALL CONSOLE OUTPUT ERROR JSB CLEAR LDA MD18 PICK UP & RETURN STA PRAMS+1,I ERROR CODE JMP DNAME,I & RETURN TO USER SPC 5 RFASR NOP JSB NAMF DRTN NOP 0   PRAM1 REP 6 NOP JMP RFASR,I SPC 5 CLEAR NOP CLA CLEAR DEFS TO OPTIONAL PARAMS. CLB DST PRAMS+4 DST PRAM1+4 * JMP CLEAR,I SPC 5 * CONSTANTS A EQU 0 D4 DEC 4 ADDS DEF DRTN+1 #PRMS NOP MD18 DEC -18 END ]   91700-18116 1552 S 0122 DS1/B CCE MODULE: DOPEN              H0101 BASMB,R,L,C HED DOPEN 91700-16116 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DOPEN,7 91700-16116 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DOPEN EXT .ENTR EXT OPEN SPC 5 * * DOPEN * SOURCE:91700-18116 * BINARY:91700-16116 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 6 NOP DOPEN NOP JSB .ENTR DEF PRAMS * LDA PRAMS+5 IS THE DESTINATION SPECIFIED? SZA,RSS JMP MORE DEFAULT TO CENTRAL CALL * INA STEP PAST CART.LABEL LDA A,I PICK UP DESTINATION CODE SZA CENTRAL CALL? JMP ERROR NO-ABORT USER MORE LDA D3 SET UP DEFAULT # OF PARAMETERS STA #PRMS * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * DLD PRAMS+2 MOVE 2ND TWO DST PRAM1+2 * * SZB,RSS WAS THE 4TH ONE THERE? JMP DONE NO DONE * ISZ #PRMS YES INCREMENT COUNT DLD PRAMS+4 PICK UP POSSIBLE 5TH & 6TH DST PRAM1+4 * SZA,RSS THERE? JMP DONE NO FINISHED ISZ #PRMS YES BUMP COUNT & STORE AWAY * SZB,RSS 6TH PARAMETER THERE? JMP DONE NO ISZ #PRMS YES DONE LDA #PRMS CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR JSB CLEAR CLEAR PARAMETER ARRAY LDA PRAMS+1,I GET IERR JMP DOPEN,I FINISHED RETURN TO USER SPC 5 * CLEAR ARRAY & CALL CONSOLE OUTPUT ERROR JSB CLEAR LDA MD18 PICK UP & RETURN ERR  OR CODE STA PRAMS+1,I TO USER JMP DOPEN,I THEN RETURN SPC 5 RFASR NOP JSB OPEN DRTN NOP PRAM1 REP 6 NOP JMP RFASR,I SPC 5 CLEAR NOP CLA CLEAR DEFS TO OPTIONAL CLB PARAMETERS DST PRAMS+3 DST PRAM1+3 STA PRAMS+5 STA PRAM1+5 * JMP CLEAR,I SPC 5 * CONSTANTS A EQU 0 D3 DEC 3 ADDS DEF DRTN+1 #PRMS NOP MD18 DEC -18 END * AN ERROR EXISTS <   91700-18117 1552 S 0122 DS1/B CCE MODULE: DPOSN              H0101 QASMB,R,L,C HED DPOSN 91700-16117 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DPOSN,7 91700-16117 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DPOSN EXT POSNT EXT .ENTR SPC 5 * * DPOSN * SOURCE:91700-18117 * BINARY:91700-16117 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 4 NOP DPOSN NOP JSB .ENTR DEF PRAMS * LDA D3 SET UP DEFAULT # OF PARAMETERS STA #PRMS * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * DLD PRAMS+2 MOVE 2ND TWO DST PRAM1+2 * SZB,RSS OPTIONAL PARAMETER PRESENT JMP DONE * ISZ #PRMS * DONE LDA #PRMS CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR JSB CLEAR CLEAR PARAMETER ARRAY JMP DPOSN,I FINISHED RETURN TO USER SPC 5 RFASR NOP JSB POSNT DRTN NOP PRAM1 REP 4 NOP JMP RFASR,I SPC 5 CLEAR NOP CLB CLEAR DEF TO OPTIONAL PARAM STB PRAMS+3 STB PRAM1+3 * JMP CLEAR,I SPC 5 * CONSTANTS D3 DEC 3 ADDS DEF DRTN+1 #PRMS NOP END * AN ERROR EXISTS   91700-18118 1552 S 0122 DS1/B CCE MODULE: DPURG              H0101 PASMB,R,L,C HED DPURG 91700-16118 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DPURG,7 91700-16118 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DPURG EXT PURGE EXT .ENTR SPC 5 * * DPURG * SOURCE:91700-18118 * BINARY:91700-16118 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 5 NOP DPURG NOP JSB .ENTR DEF PRAMS * LDA PRAMS+4 IS THE DESTINATION SPECIFIED? SZA,RSS JMP MORE NO DEFAULT TO CENTRAL CALL * INA STEP PAST CART.LABEL LDA A,I TO DESTINATION CODE SZA CENTRAL CALL JMP ERROR NO ABORT THE USER MORE LDA D3 SET UP DEFAULT # OF PARAMETERS STA #PRMS * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * DLD PRAMS+2 MOVE 2ND TWO DST PRAM1+2 * * SZB,RSS WAS THE 4TH ONE THERE? JMP DONE NO DONE * ISZ #PRMS YES INCREMENT COUNT LDA PRAMS+4 MOVE POSSIBLE 5TH * SZA,RSS THERE? JMP DONE NO FINISHED ISZ #PRMS YES BUMP COUNT & STORE AWAY STA PRAM1+4 DONE LDA #PRMS CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR JSB CLEAR CLEAR PARAMETER ARRAY LDA PRAMS+1,I GET IERR JMP DPURG,I FINISHED RETURN TO USER SPC 5 * CLEAR ARRAY & CALL CONSOLE OUTPUT ERROR JSB CLEAR LDA MD18 RETURN ERROR CODE STA PRAMS+1,I TO USER & JMP DPURG,I EXIT SPC 5 RFASR NOP JSB PURGE DRTN   NOP PRAM1 REP 5 NOP JMP RFASR,I SPC 5 CLEAR NOP CLA CLEAR OPTIONAL PARAMETER DEFS CLB DST PRAMS+3 DST PRAM1+3 * JMP CLEAR,I SPC 5 * CONSTANTS A EQU 0 D3 DEC 3 ADDS DEF DRTN+1 #PRMS NOP MD18 DEC -18 END * AN ERROR EXISTS g   91700-18119 1552 S 0122 DS1/B CCE MODULE: DREAD              H0101 AASMB,R,L,C HED DREAD 91700-16119 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DREAD,7 91700-16119 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DREAD EXT READF EXT .ENTR SPC 5 * * DREAD * SOURCE:91700-18119 * BINARY:91700-16119 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 6 NOP DREAD NOP JSB .ENTR DEF PRAMS * * LDA D3 SET UP DEFAULT # OF PARAMETERS STA #PRMS * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * DLD PRAMS+2 MOVE 2ND TWO DST PRAM1+2 * * SZB,RSS WAS THE 6TH ONE THERE? JMP DONE NO DONE * ISZ #PRMS YES INCREMENT COUNT DLD PRAMS+4 MOVE POSSIBLE 3RD & 4TH DST PRAM1+4 * SZA,RSS 3RD PRESENT? JMP DONE NO * ISZ #PRMS YES-INCREMENT COUNT * SZB,RSS 4TH PRESENT? JMP DONE NO * ISZ #PRMS DONE LDA #PRMS CALCULATE RETURN ADA ADDS STA DRTN & PUT IN REBUILT CALL * JSB RFASR JSB CLEAR CLEAR OPTIONAL PARAMETERS LDA PRAMS+1,I GET IERR JMP DREAD,I FINISHED RETURN TO USER SPC 5 RFASR NOP JSB READF DRTN NOP PRAM1 REP 6 NOP JMP RFASR,I SPC 5 CLEAR NOP CLA CLEAR DEFS TO OPTIONAL PARAMETERS CLB DST PRAMS+3 DST PRAM1+3 STA PRAMS+5 STA PRAM1+5 * JMP CLEAR,I SPC 5 * CONSTANTS D3 DEC 3 ADDS DEF DRTN+1 #PRMS NOP END * AN ERROR EXISTS a    91700-18120 1552 S 0122 DS1/B CCE MODULE: DSTAT              H0101 CASMB,R,L,C HED DSTAT 91700-16120 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DSTAT,7 91700-16120 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DSTAT EXT FSTAT EXT .ENTR SPC 5 * * DSTAT * SOURCE:91700-18120 * BINARY:91700-16120 * SHANE DICKEY * JULY 31,1974 * PRAMS NOP DSTAT NOP JSB .ENTR DEF PRAMS * LDA PRAMS MOVE DEFS FOR 1ST TWO STA PRAM1 * LDA D1 CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR JMP DSTAT,I FINISHED RETURN TO USER SPC 5 RFASR NOP JSB FSTAT DRTN NOP PRAM1 NOP JMP RFASR,I SPC 5 * CONSTANTS ADDS DEF DRTN+1 D1 DEC 1 END * AN ERROR EXISTS   91700-18121 1552 S 0122 DS1/B CCE MODULE: DWIND              H0101 TASMB,R,L,C HED DWIND 91700-16121 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DWIND,7 91700-16121 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DWIND EXT RWNDF EXT .ENTR SPC 5 * * DWIND * SOURCE:91700-18121 * BINARY:91700-16121 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 2 NOP DWIND NOP JSB .ENTR DEF PRAMS * LDA D1 SET UP DEFAULT # OF PARAMETERS STA #PRMS * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * * SZB,RSS WAS THE 2ND ONE THERE? JMP DONE NO DONE * ISZ #PRMS YES INCREMENT COUNT DONE LDA #PRMS CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB CLEAR CLEAR PARAMETER ARRAY JSB RFASR JMP DWIND,I FINISHED RETURN TO USER SPC 5 RFASR NOP JSB RWNDF DRTN NOP PRAM1 REP 2 NOP JMP RFASR,I SPC 5 CLEAR NOP CLB CLEAR DEF TO OPTIONAL PARAM STB PRAMS+1 STB PRAM1+1 * JMP CLEAR,I SPC 5 * CONSTANTS D1 DEC 1 ADDS DEF DRTN+1 #PRMS NOP END * AN ERROR EXISTS 9  91700-18122 1552 S 0122 DS1/B CCE MODULE: DWRIT              H0101 OASMB,R,L,C HED DWRIT 91700-16122 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DWRIT,7 91700-16122 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DWRIT EXT WRITF EXT .ENTR SPC 5 * * DWRIT * SOURCE:91700-18122 * BINARY:91700-16122 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 5 NOP DWRIT NOP JSB .ENTR DEF PRAMS * * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * DLD PRAMS+2 MOVE 2ND TWO DST PRAM1+2 * LDA PRAMS+4 MOVE 4TH & POSSIBLE 5TH STA PRAM1+4 * LDA D5 CALCULATE RETURN ADA ADDS STA DRTN & PUT IN CONSTRUCTED CALL * JSB RFASR CLB STB PRAMS+4 STB PRAM1+4 JMP DWRIT,I FINISHED RETURN TO USER SPC 5 RFASR NOP JSB WRITF DRTN NOP PRAM1 REP 5 NOP JMP RFASR,I SPC 5 * CONSTANTS D5 DEC 5 ADDS DEF DRTN+1 END [  91700-18123 1607 S 0122 DS1/B CCE MODULE: POPEN              H0101 IASMB,R,L,C HED POPEN 91700-16123 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM POPEN,7 91700-16123 REV A 760212 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT POPEN,PREAD,PWRIT,PCONT EXT D65MS,D65CL EXT .ENTR * SPC 5 * * POPEN * SOURCE: 91700-18023 * BINARY: 91700-16023 * SHANE DICKEY * JULY 30,1974 * * MODIFIED BY CHUCK WHELAN NOV 1975 * SPC 5 IPCB NOP IERR NOP INAM NOP ILU NOP ITAG NOP SPC 5 POPEN NOP * * MASTER REQUESTS FOR POPEN COME HERE * JSB .ENTR PICK UP THE USER PARAMETERS DEF IPCB LDA POPEN SET UP ERROR RETURN STA RTRN * LDA IERR STA ERRAD LDA DITAG SET PARAM CLEAR LOC STA CLEAR * PARAMETER CHECK LDA ITAG CLB,INB JSB BPARM SET UP BASIC PARMB * DLD INAM,I IRBF5 EQU *+1 DST IRBUF+5 MOVE 1ST TWO WORDS OF NAME LDA INAM ADA D2 LDA 0,I STA IRBUF+7 STORE 3RD WORD OF NAME LDA ITAG SET UP RETURN TAG FIELD ADDRESS STA TAGAD LDB IPCB LDA ILU,I GET LU # ADB D3 SAVE LU IN 4TH WORD OF PCB STA B,I * LDA IPCB NODAT CCB FLAG FOR NO DATA * * THIS CODE IS USED IN COMMON BY ALL P TO P CALLS * MAIN STB RCXMT SAVE OP TYPE STA PCBAD SAVE PCB ADDRESS ADA D3 LDA 0,I GET LU IOR BIT15 SET "NO ABORT" BIT STA DREQ REQ. ONLY IOR B300 STA DDATA DATA ONLY * THE CALL TO D65MS WILL: * 1) GET AN I/O CLASS * 2) COMPLETE WORD i2 OF PARMB * 3) SEND REQUEST * 4) AWAIT REPLY * 5) RETURN REPLY * 6) RETURN CONTROL JSB D65MS ISSUE REQUEST CALL DEF *+8 DEF D2 DEF DREQ WITH SIGN BIT SET DEF IRBUF DEF IRBFL DEF DUMMY DEF DUMMY DEF DUMMY * JMP ERR+1 ERROR DETECTED LDB IRBUF+3 RETURN ERROR WORD STB ERRAD,I LDA IRBF5 STA TAGPR * LDA M3 LDB PCBAD SET UP COUNT & SOURCE JSB MOVE * RETURN THE TAG FIELD LDA IRBF8 STA TAGPR LDA M10 GET COUNT LDB TAGAD JSB MOVE * CLB STB CLEAR,I CLR PARAMETER SIZE CHECK LOC LDB IRBUF+3 SZB WAS ERROR DETECTED? JMP RTRN,I YES, IERR SET LDB IRBUF+2 SSB,RSS WAS REQUEST REJECTED? CLB,RSS NO, OK CLB,INB YES, SET REJECT IERR STB ERRAD,I RETURN IT TO CALLER LDA RCXMT OP CODE SSA,RSS SKIP IF NO DATA SZB SKIP IF NO ERROR JMP RTRN,I OTHERWISE RETURN NOW * * NOW CALL "D65CL" TO DO DATA TRANSFER TO COMPLETE TRANSACTION * JSB D65CL DEF *+7 DEF RCXMT DEF DDATA BUFF NOP DEF LEN DEF IRBUF+33 PASS TIME-TAGS TO DRIVER DEF IRBUF+34 JMP ERR+1 ERROR CLB SET GOOD RETURN JMP RTRN,I * SPC 5 BPARM NOP * SUBSTREAM,STREAM,FUNCTION CODE AND TAG FIELD INSERTED IN * PARMB HERE * THE CLASS IS NOW ALLOCATED AND KNOWN BUILD THE * PARMB FOR THE SATELLITE * ROUTINE ALSO CHECKS FOR SUFFICIENT PARAMETERS IN P TO P CALL STB IRBUF+2 SET FUNCTION CODE SZA,RSS JMP ERR2 TOO FEW PARAMETERS IN CALL STA TAGPR LDA D4 TO BE BUILT-& STORE THE STA IRBUF STREAM TYPE LDA M10 LDB IRBF8 JSB MOVE JMP BPARM,I RETURN SPC 5 ERR NOP DECODE ASCII B REGISTER LDA D4C7 SET INITIAL ERROR CODE CPB ASC01 SUSPEND ERROR? JMP ERR1 YES CPB ASC05 TIME OUT? JMP ERR1 YES INA INCREMENT CODE CPB ASC02 ABORT ERROR? JMP ERR1 YES INA INCREMENT CODE ERR1 CMA,INA,RSS NEGATE THE CODE ERR2 LDA M40 STA ERRAD,I RETURN IERR CLB CLEAR MAX SIZE CHECK STB CLEAR,I JMP RTRN,I & RETURN SKP * * READ REQUESTS * RIPCB NOP RIERR NOP RIBUF NOP RIL NOP RITAG NOP * RTRN EQU * PREAD NOP JSB .ENTR GET USER PARAMETERS DEF RIPCB * LDA RIERR STA ERRAD LDA DRITA GET CLEAR ADDRESS STA CLEAR LDA RITAG LAST REQ PARAM THERE? * LDB D2 SET FUNCTION CODE JSB BPARM * LDA RIPCB JSB MVPCB MOVE PCB TO PARMB * LDA RITAG STA TAGAD * LDA RIBUF SAVE BUFFER ADDRESS STA BUFF LDA RIL,I SAVE DATA LENGTH STA LEN STA IRBUF+18 IN PARMB TOO * LDA RIPCB PCB ADDRESS CLB,INB SET FOR DATA READ JMP MAIN NOW DO LINE COMM & RETURN SKP * * WRITE REQUESTS * PIPCB NOP PIERR NOP PIBUF NOP PIL NOP PITAG NOP * * PWRIT NOP PWRITE REQUESTS HERE JSB .ENTR PICK UP PARAMETERS DEF PIPCB * LDA PWRIT SET UP ERROR RETURN STA RTRN LDA PIERR STA ERRAD LDA DPITA SET CLEAR ADDRESS STA CLEAR LDA PITAG LDB D3 JSB BPARM BUILD BASIC PARMB * LDA PIPCB JSB MVPCB MOVE PCB TO PARMB * LDA PITAG STA TAGAD LDA PIBUF GET DATA ADDRESS STA BUFF LDA PIL,I GET DATA LENGTH STA LEN STA IRBUF+18 * LDA PIPCB LDB D2 SET FOR DATA WRITE JMP MAIN NOW DO LINE COMM & RETURN SKP * * CONTROL REQUEYSTS * CIPCB NOP CIERR NOP CITAG NOP * * PCONT NOP JSB .ENTR GET PARAMETERS DEF CIPCB * LDA PCONT SET UP ERROR RETURN STA RTRN LDA CIERR STA ERRAD LDA DCITA SET UP SIZE CHECK WORD STA CLEAR LDA CITAG LAST REQUIRED LDB D4 SET UP FUNCTION CODE JSB BPARM BUILD BASIC PARMB * LDA CIPCB JSB MVPCB MOVE PCB TO PARMB * LDA CITAG STA TAGAD * LDA CIPCB PCB ADDRESS JMP NODAT DO LINE COMM & RETURN SKP * * MOVE SUBROUTINES * MOVE NOP * A CONTAINS -# OF WORDS TO MOVE * B CONTAINS DESTINATION ADDRESS * TAGPR CONTAINS SOURCE ADDRESS STA CONTR MOVE1 LDA TAGPR,I PICK UP NEXT WORD STA B,I AND PUT IT AWAY INB ISZ TAGPR INCREMENT POINTERS ISZ CONTR JMP MOVE1 TILL DONE JMP MOVE,I * * MOVE PCB INTO PARMB * MVPCB NOP STA TAGPR POINTER TO PCB LDA M3 MOVE 3 WORDS LDB IRBF5 INTO PARMB +5,6,7 JSB MOVE DO IT JMP MVPCB,I SKP * * DATA AREA * IRBUF BSS 35 IRBF8 DEF IRBUF+8 B EQU 1 IRBFL DEC 35 D2 DEC 2 D3 DEC 3 D4 DEC 4 B300 OCT 300 TAGPR NOP M10 DEC -10 M3 DEC -3 CONTR NOP DREQ NOP DDATA NOP PCBAD NOP ERRAD NOP TAGAD NOP RCXMT NOP LEN NOP ASC01 ASC 1,01 SUSPEND ERROR CODE ASC02 ASC 1,02 ABORT ERROR CODE ASC05 ASC 1,05 TIME OUT BIT15 OCT 100000 DCITA DEF CITAG CLEAR NOP M40 DEC -40 DPITA DEF PITAG DRITA DEF RITAG D47 DEC 47 DITAG DEF ITAG DUMMY NOP END   91700-18124 1607 S 0122 DS1/B CCE MODULE: PTOPM              H0101 YASMB,R,L,C HED PTOPM 91700-16124 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM PTOPM,2,30 91700-16124 REV A 760209 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT PTOPM EXT EXEC EXT RNRQ EXT D65CL IFZ EXT DBUG XIF SPC 5 * * PTOPM * SOURCE:91700-18124 * BINARY:91700-16124 * SHANE DICKEY * JULY 30,1974 * * MODIFIED NOV 1975 BY CHUCK WHELAN * * * Z OPTION INCLUDES DEBUG PACKAGE PTOPM NOP * * START LDA B,I IS P1=I/O CLASS IFZ SZA,RSS IF ZERO-INITIALIZE CALL-SET UP JMP *+3 AND TERMINATE- IF REAL LSTEN XIF STA ICLAS SCHEDULE--SET UP GET AND DO IT IFZ JMP GET * JSB DBUG SET UP DBUG DEF *+1 * JSB EXEC SAVE RESOURCES AND TERMINATE DEF *+4 DEF D6 DEF ZERO DEF D1 * JMP START LSTEN CALL STARTS HERE XIF * * ISSUE GET ON I/O CLASS * GET JSB DOGET SUSPEND IN CLASS GET UNTIL REQ. RCVD ICLAS DEC 4 NOP LDA IRBUF+2 SET PARMB REPLY FLAG FOR LATER RETURN IOR MSK5 STA IRBUF+2 * * IS THIS A NEW REQUEST OR AN ACCEPT/REJECT * ON A PREVIOUS ONE? AND B1400 SAVE ONLY THE FLAG FIELD SZA NEW REQUEST? JMP ACREJ NO, POFF/FINISH LDA IRBUF+2 YES AND D7 ADA CODEA ADD ADDRESS OF PROCESS TABLES JMP A,I AND GO DO IT * ALL INCOMING NEW PROG/PROG OPEN REQUESTS * REQUESTS ARE PROCESSED HERE * OPEN REQUESTS CONSIST OF THREE BASIC STEPS TO PROCESS * THESE ARE : *  1) FIND CURRENT LIST SLOT FOR ENTRY(NEW SLOT OR EXISTING ONE) * THEN SET UP C.L. SLOT * 2)UPDATE THE PARMB TO REFLECT THE C.L. SLOT USED * 3) SCHEDULE PROGRAM TO RECEIVE REQUEST * OPEN REQUESTS ARE OF TWO TYPES:PREVIOUSLY EXISTING * AND NEW REQUESTS. THE FIRST OF THESE IS PROCESSED * BEGINNING AT THE LABEL "FOUND" AND THE OTHERS ARE * PROCESSED STARTING WITH THE CODE LOCATED AT * NOTFD (NOT FOUND) * FIRST THE CURRENT LIST MUST BE SEARCHED TO SEE IF * THE REQUESTING PROGRAM NETWORD HAS BEEN EXTABLISHED * (OR FOUND) OPENP JSB SERCL IS THIS AN EXISTING HOOKUP JMP NOTFD NO-NOT FOUND-SET UP NEW ONE * * SET UP THE"FORM B"OF THE PARMB AND PASS IT ON TO THE USER JSB BPARM REPLACE NAME WITH I.D. WORDS * NOTE THAT THE SYSTEM WILL ONLY SCHEDULE A CENTRAL USER * ONCE I.E. WHEN THE 1ST SATELLITE OPEN IS RECEIVED * IF THE CENTRAL USER TERMINATES WITHOUT * ISSUING A FINIS CALL * SYSTEM BUFFER SPACE WILL EVENTUALLY BE FILLED * BY INCOMING SATELLITE MASTER REQUESTS * JMP GET * * * NEW PTOP USERS SET UP HERE * * * * GET SLOT IN CURRENT LIST NOTFD CLA,INA STA PRID# INITIALIZE PROGRAM ID# TO 1 * SEARCH FOR EMPTY ENTRY IN CURRENT LIST LDA CRLSA STARTING TABLE ADDR GET1 LDB 0,I CPB M1 JMP ERMT ERROR IF TABLE FULL SZB,RSS JMP *+4 IF 1ST IS ZERO, THIS ENTRY IS FREE ADA D4 POINT TO NEXT ISZ PRID# INCREMENT PROGRAM ID # JMP GET1 TRY NEXT STA ADDR3 SAVE ADDRESS OF THIS ENTRY ADA D2 LDB NNAME+2 STB A,I INA STA CLSAD ADDR OF CLASS # IN TABLE DLD NNAME ADDR3 EQU *+1 DST * MOVE 1ST 2 WORDS OF NAME LDA B13 GET "NEW CLASS" CLASS WORD STA CLSAD,I TO SET UP CALL * JSB EXEC GET THE I O CLASS NUMBER DEF *+8 BY GETTING AN I-O CLASS DEF D20 DEF ZERO DEF IRBUF DEF D1 DEF D1 DEF =D1 CLSAD NOP SZA HOW WAS THE ALLOCATION ? JMP ERMS BAD, ERROR EXIT * CLEAR REQUEST LDA CLSAD,I STA *+2 JSB DOGET THE PREVIOUS WRITE READ LEFT NOP A DUMMY REQUEST IN THE CLASS, CLR IT. NOP IGNORE ABORT CONDITION JSB BPARM * * SCHEDULE THE PROGRAM JSB EXEC DEF *+4 SCHEDULE REQUESTED PROGRAM DEF D10SB WITHOUT WAIT & PASS IT DEF ADDR3,I IT'S I/O CLASS AS PARAMETER DEF CLSAD,I P1 * * THE PROGRAM MUST BE IN THE DORMANT LIST OR * AN ERROR EXISTS JMP REMER ERROR RETURN-RTE TRIED TO ABORT US SZA,RSS IN DORMANT LIST? JMP GET YES CLA,RSS REMER CLA,INA FLG ERROR STA TEMP INITIALIZE ERROR FLAG * REMOVE CLASS REQUEST WITH A GET CLA CLEAR THE ENTRY IN STA ADDR3,I THE CURRENT LIST LDA CLSAD,I TAKE OFF "DONT DEALLOCATE" BIT AND MSK8 STA UCLA2 * JSB DOGET CLEAR THE UNUSED REQUEST FROM THE UCLA2 NOP I/O CLASS ESTABLISHED * ISZ TEMP WOULD HAVE ABORTED LDB M43 LDA TEMP ABORT ERROR? SZA ADB D2 YES, ERROR -41 JMP ERR PROCESS THE ERROR * * PLIST JSB EXEC WRITE DIRECTORY TO DISC IN LOCN PASSED DEF *+7 DEF D2 DEF IRBUF+1 DISC LU DEF CRLST DIRECTORY ADDRESS DEF D81 DIRECTORY LENGTH DEF IRBUF TRACK ADDRESS DEF IRBUF+3 SECTOR ADDRESS * JSB RNRQ NOW START UP REMAT BY CLEARING RN # DEF *+4 DEF D4 DEF IRBUF+4 DEF IRBUF+5 JMP GET HED ACEPT/REJCT PROC. * (C) HEWLETT-PACKARD CO. 1976 * * HANDLE SLAVE OFF AND FINISH REQUESTS HERE * ACREJ LDA IRBUF+2 AND MSK4 MASK OUT THE REST OF THE PARMB CPA D10 JMP POFF HANDLE SLAVE OFF CPA D9 RSS JMP ER103 UNRECOGNIZED * FI!NIT JSB SERCL IS PROGRAM IN CURRENT LIST? JMP GET NO, NOT DEFINED JSB FINIS CLEAN OUT ENTRY IN CURRENT LIST JMP GET * * CLEAR ENTRY OUT OF CURRENT LIST, AND ABORT PROGRAM IF IT'S HANGING * ON THE CLASS SO THE CLASS NUMBER CAN BE DEALLOCATED. * FINIS NOP STB ADDR3 SAVE ADDR OF NAME * * NOW CLEAR ALL REQUESTS FROM THE I/O CLASS * (ONE AT A TIME) AND CAUSE IT TO BE RELEASED * LDA CLSAD,I GET CLASS NUMBER IOR B1315 SET BIT 13 & 15 IN CLASS WORD STA TEMP THEN SAVE FOR CALL STA CLFLG SET CLASS CLEAR FLAG NON-ZERO * NXGET JSB DOGET GET REQUEST TEMP NOP JMP ABTIT FIRST, PGM MUST BE TERMINATED * CLB CPB CLFLG RELEASE PROCESSING COMPLETE? JMP FIEND YES INA,SZA ALL PENDING REQUESTS CLEARED? JMP NXGET NO, CLEAR MORE STA CLFLG SET FOR ONE MORE LDA TEMP AND MSK8 CLEAR NO DE-ALLOCATE FLAG STA TEMP JMP NXGET * * ABORT USER PROGRAM ABTIT JSB EXEC TERMINATE PROGRAM DEF *+3 DEF D6N DEF ADDR3,I CLB,RSS GET OUT IF WOULD HAVE ABORTED JMP NXGET NOW RELEASE CLASS # * FIEND STB ADDR3,I CLEAR ENTRY IN PTOPM'S LIST JMP FINIS,I & EXIT SPC 5 POFF LDA NNAME PICK UP ENTRY TO BE CLEARED SZA CLEAR ENTIRE TABLE? JMP FINIT NO, CLEAR INDICATED ENTRY LDB CRLS3 POINTER TO CLASS #S LOOP STB CLSAD ADB M3 POINT TO NAME LDA 1,I GET 1ST WORD OF ENTRY CPA M1 END OF TABLE? JMP GET YES SZA SKIP IF THIS SLOT IS EMPTY JSB FINIS OTHERWISE CLEAR & TERMINATE IT LDB CLSAD ADB D4 POINT TO NEXT CLASS # JMP LOOP AND RETURN FOR MORE * * PROCESS ERRORS AND ABNORMAL CONDITIONS HERE * THE B REGISTER CONTAINS THE DETECTED ERROR CODE * RECOGNIZED ERROR CONDITIONS * -42 CURRENT LIST FULL-NO ROOM-RETRY * -43 PROGRAM NOT IN DORMANT LIST * -103 ID#'S IN PARMB OFF OR F.CDE PR PROG ID#,OR SAT#,OR CLASS# * FROM VALCK IN ERROR * FORMAT RETURN PARMB * PUT ERROR CODE IN THE PARMB * * * ERMS CLA STA ADDR3,I CLEAR ENTRY IN CURRENT LIST * ERMT LDB M42 RSS * ER103 LDB M103 ILLEGAL PCB ERR STB IRBUF+3 STORE ERROR WORD * HERE WE CLEAR THE DRIVER TO GET RID OF DATA LDA IRBUF+24 AND MSK9 STA TEMP * JSB D65CL SEND STOP DEF *+7 DEF IRC CONTROL REQUEST DEF TEMP CONWORD (=LU) DEF DUMMY DEF DUMMY DEF DUMMY DEF DUMMY * JSB ERR1 ERROR RETURN * LDA IRBUF+24 AND MSK9 STA IRBUF+24 CLEAR ALL BUT LU * LDA IRBUF IOR BTRPY SET REPLY & FRIENDLY BITS STA IRBUF INTO STREAM WORD * JSB D65CL SEND THE REPLY DEF *+7 DEF IRWW DEF IRBUF+24 REQ ONLY DEF IRBUF DEF IRBFL DEF DUMMY DEF DUMMY * JSB ERR1 ERROR RETURN JMP GET * NOTE: IF PARMB WORD #4 IS RETURNED NON-ZERO * (ERROR CONDITION) THE FLAG FIELD (WORD 2), TAG FIELD, * AND PROGRAM NAME FIELD WILL NOT BE RELIABLE SPC 5 ERR1 NOP DST SAVAB SAVE ERROR CODE FROM A AND B REG. JSB EXEC OUTPUT ERROR MESSAGE DEF *+5 DEF D2 DEF D1 DEF MESS DEF MESSL * JMP ERR1,I RETURN SPC 5 * THIS SUBROUTINE SET'S UP THE PARMB IN A MODIFIED * B FORMAT SO THAT IT'S ENTRY CAN BE FOUND WHEN IT * COMES BACK ACCEPTED OR REJECTED FROM THE USER SUBROUTINE * MODIFY PARMB TO REFLECT C.L. INFORMATION BPARM NOP LDB PRID# PICK UP ID# PREVIOUSLY BUILT STB IRBUF+5 AND SAVE IT IN PARMB LDB CLSAD,I PICK UP USER I/O CLASS STB IRBUF+6 & PUT IN PARMB JSB BLATZ SEND PARMB JMP BPARM,I SPC 5 * VERIFY THAT A READ, WRITE, OR CLOSE REQUEST * IS BEING ISSUED ON A VALID TERMINAL PREVIOUSLY * OPENED AND KNOWN TO THE MONITOR AND IF OK PASS IT TO THE PGM READP LDA IRBUF+5 PICK UP PROG IO # AND MSK3 MASK ALL BUT LOW ORDER 3 BYTE SZA IS I.D. ZERO? ADA M21 GREATER THAN 20? SSA,RSS JMP ER103 ERROR IF YES * THE PROGRAM ID IS IN THE RIGHT RANGE-NO FURTHER CHECKING CAN BE * DONE ON IT * NOW CHECK THE REQUESTED I/O CLASS-IT MUST MATCH ADA D20 THE CURRENT LIST INDEX ALS,ALS CONVERT TO CURRENT LIST ADDRESS ADA CRLSA AND SAVE IN STA ADDR3 * ADA D3 NOW STEP TO THE CLASS WORD STA CLSAD SAVE ADDR OF CLASS # LDA 0,I GET CLASS # LDB M44 PICK UP ERROR CODE CPA NNAME+1 DO THEY MATCH ? CLA,RSS JMP ERR NO- AN ERROR EXISTS * THE PROG ID # AND I/O CLASS APPEAR ALL RIGHT CPA ADDR3,I HAS ENTRY BEEN DELETED? JMP ERR YES REJECT REQUEST JSB BLATZ SEND PARMB JMP GET SPC 5 BLATZ NOP JSB EXEC DO A WRITE READ TO DEF *+8 PASS REQUEST ON DEF D20 TO THE USER FOR HIS DEF ZERO NEXT GET DEF IRBUF DEF IRBFL DEF DUMMY DEF DUMMY DEF CLSAD,I JMP BLATZ,I SPC 5 * * DO A CLASS I/O GET * DOGET NOP JSB EXEC DEF *+5 DEF D21N DEF DOGET,I CLASS # DEF IRBUF DEF IRBFL RSS SKIP IF WE COULD HAVE ABORTED ISZ DOGET ELSE RETURN TO P+2 ISZ DOGET JMP DOGET,I RETURN * * THIS SUBROUTINE SEARCHES THE CURRENT LIST * ON RETURN * B REGISTER POINTS TO THE START OF THE MATCHING * CURRENT LIST ENTRY * (NORMAL RETURN ONLY) * NORMAL RETURN (P+2) * ERROR RETURN (P+1) * * * THE CURRENT LIST WILL NOW BE SEARCHED FOR * A MATCH UNTIL A -1 IS ENCOUNTERED (END OF TABLE) * * SERCL NOP CLB STB PRID# INITIALIZE PROGRAM ID# LDB CRLSA LOOP1 ISZ PRID# LDA B,I CPA M1 JMP SERCL,I NOT FOUND * THIS IS A VALID ENTRY SO CHECK NAME & THEN LU CPA NNAME INB,RSS JMP LOOP7+1 LDA 1,I CPA NNAME+1 INB,RSS JMP LOOP7 LDA 1,I CPA NNAME+2 JMP DUN FOUND ONE ADB M1 LOOP7 ADB M1 ADB D4 JMP LOOP1 * DUN INB STB CLSAD SAVE ADDR OF CLASS # ADB M3 B POINTS TO ENTRY IN CURRENT LIST ISZ SERCL JMP SERCL,I HED CONSTANTS AND VARIABLES * (C) HEWLETT-PACKARD CO. 1976 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D6 DEC 6 D7 DEC 7 D9 DEC 9 D10 DEC 10 D20 DEC 20 B1400 OCT 140000 CRLSA DEF CRLST ADDR OF CURRENT LIST TABLE CRLS3 DEF CRLST+3 ADDR OF CLASS # IN 1ST ENTRY CODEA DEF CODES,I CODES DEF ER103 DEF OPENP DEF READP DEF READP DEF READP DEF PLIST DEF FINIT DEF ER103 IRBFL DEC 35 REQUEST BUFFER LENGTH B13 OCT 020000 BTRPY OCT 044000 B1315 OCT 120000 MSK4 OCT 17 D81 DEC 81 M1 DEC -1 M3 DEC -3 M21 DEC -21 MESSL DEC -30 M42 DEC -42 M43 DEC -43 M44 DEC -44 M103 DEC -103 MSK3 OCT 377 MSK5 OCT 200 MSK8 OCT 157777 MSK9 OCT 77 CLFLG NOP DUMMY OCT 0 D6N OCT 100006 D21N OCT 100025 OP CODE FOR CLASS I/O GET (NO ABORT) IRC OCT 100003 STOP CODE IRWW OCT 100002 WRITE CODE D10SB OCT 100012 PRID# NOP * IRBUF REP 5 OCT 0 NNAME REP 3 OCT 0 REP 27 OCT 0 A EQU 0 B EQU 1 ZERO OCT 0 MESS ASC 12,COMM ERROR OUTPUT-PTOPM ASC 1, SAVAB OCT 0,0 * * 20 ENTRIES OF 4 WORDS EACH IN THE CURRENT LIST * * EACH ENTRY CONTAINS: * WORDS 1-3 = PROGRAM NAME * WORD 4 = ASSIGNED I/O CLASS * CRLST BSS 80 INITIALLY ALL ZEROES UNL CRLST REP 80 NOP LST DEC -1R0.* DELIMITER, DON'T REMOVE END PTOPM 0   91700-18125 1607 S 0222 DS1/B CCE MODULE: RFAEX              H0102 AASMB,R,L,C HED RFAEX 91700-16125 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM RFAEX,18,30 91700-16125 REV A 760212 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 EXT EXEC IFZ EXT DBUG XIF A EQU 0 B EQU 1 * EXTERNALS FOR REMOTE FILE ACCESS-LEVEL 1 EXT NAMF,FCONT,LOCF,APOSN EXT CREAT,PURGE,OPEN,WRITF EXT READF,POSNT,RWNDF,CLOSE EXT FSTAT EXT D65SV EXT D65CL,#RXCL * SPC 5 * * RFAEX * SOURCE:91700-18125 * BINARY:91700-16125 * SHANE DICKEY * JULY 30,1974 * * DATE MODIFIED : JANUARY 1976 * * MODIFIED BY JEAN-PIERRE BAUDOUIN * * * Z OPTION INCLUDES DBUG PACKAGE SPC 5 RFAEX NOP * * GET THE I/O CLASS FOR THIS MONITOR SAET UP BY LSTEN * START LDA B,I IS P1 = I/O CLASS? IFZ CPA D99 IF 99 GO INTO DBUG JMP *+3 AND TERMINATE-IF REAL CALL- JMP GET * JSB DBUG SET UP DBUG DEF *+1 * JSB EXEC SAVE RESOURCES AND TERMINATE DEF *+4 DEF D6 DEF ZERO DEF D1 * JMP START LSTEN CALL STARTS HERE XIF * * ISSUE GET ON I/O CLASS * GET JSB EXEC THIS GET WILL SUSPEND DEF *+5 RFAEX UNTIL RFAM WRITES DEF D21 IN ITS CLASS DEF #RXCL THE REQUEST PARMB WILL BE DEF IRBUF IN THE IRBUF BUFFER AREA DEF IRBFL * * * PARMB+24=LU * * MOVE FILE NAME TO FSNAM FROM PARMB * * LDB PARMB ADB D6 * JSB PIKUP GET 1ST TWO CHARS STA FSNAM * JSB PIKUP THEN NEXT TWO  STA FSNAM+1 * JSB PIKUP STA FSNAM+2 * LDA PARMB ADA D22 * LDB A,I GET CURRENT DCB ADDRESS RSS RESOLVE THE INDIRECT LDB B,I RBL,CLE,SLB,ERB JMP *-2 STB CDCBA * INA INA THEN GET LU # LDB A,I STB FSTLU * * THE ORIGINAL CALL IS RECONSTRUCTED * THE PREPROCESS FLAG IS CHECKED TO DETERMINE * IF THERE IS ANY PREPROCESSING TO BE DONE * AN EXAMPLE OF THIS WOULD BE THE GATHERING OF * A DATA BUFFER BEFORE EXECUTION OF A FILE WRITE * ALSO ERROR CHECKING CAN BE DONE IN PREPROCESS S/R * FOLLOWING THE PREPROCESS THE RECONSTITUTED CALL * IS EXECUTED AND STATUS IS RETURNED TO RFAEX BY FMP * IT IS THE RETURN OF THIS STATUS INFORMA- * TION THAT COMPRISES THE MAJOR PART OF POST- * PROCESSING, OF COURSE OTHER TYPES OF POSTPROCESSES * CAN BE ACCOMPLISHED. AN EXAMPLE IS THE WRITING OF * AN ACQUIRED DATA BUFFER TO THE TERMINAL FOLLOWING * A DATA READ * * * ISOLATE THE FUNCTION CODE LDA PARMB ADA D2 LDA A,I AND MSK0 MASK OUT UPPER BYTE ADA BASE STA FCODE * * * * CLEAR THE JSB BUFFER TO ZEROS AT THE START * LDB DM20 SET UP A COUNTER TO STB CONTR CLEAR 20 WORDS OF THE JSB BUFFER LDA JSBFA TO 0-THEN SET UP START ADDRESS STA AJSBF TO CLEAR CLA LOOP7 STA AJSBF,I CLEAR A WORD * * INCREMENT COUNTERS * * ISZ AJSBF ISZ CONTR JMP LOOP7 IF NOT DONE DO NEXT ONE * * PICK UP THE LU# FROM THE FST AND PUT IT IN FSTLU * * * RECONSTRUCT THE CALL * LDA PARMB BUILD A POINTER TO THE ADA D6 1ST USER PARAMETER IN STA BLOKA PARMB & STORE IT IN BLOKA LDA PRMSA BUILD A POINTER TO THE ASSEMBLY STA APRMS AREA & SAVE IT-ACTUAL PARAMETERS' LDA JSBFA BUILD A POINTER TO THE JSB STA AJSBF ASSEMBLY AREA LDA FCODE GET FCODE TO CHECK IF -IT IS IN THE ADA M1 THE GOOD RANGE. SSA JMP CODER FCODE < 150, ERROR ADA M13 SSA,RSS JMP CODER FCODE > 162, ERROR * LDA FCODE USE CODE AS INDEX IN THE FMGR ADA JSBTA ROUTINES TABLE ADA M1 LDA A,I PICK UP THE ADDRESS OF THE STA AJSBF,I S/R THAT WILL SERVICE ISZ AJSBF THIS REQUEST AND PUT IT ISZ AJSBF IN THE JSB TABLE SPC 2 * AFTER PUTTING IN THE JSB STEP PAST DEF RETURN *(THIS WILL BE COMPUTED AND FILLED IN LATER) * INITIALIZE PARAMETER COUNTER TO DO SAME * * CLA THIS WILL BE INCREMENTED STA PRCNT SPC 2 * BEFORE THE BUFFER IS BUILT FROM PARMB IT MAY * NEED A "MASSAGE" THIS WILL PICK UP ODD-BALL * PARAMETERS LIKE DCB WORK AREA POINTERS THAT * ARE NOT IN THE PARMB REQUEST-THE FOLLOWING * CODE ISOLATES THE ADDRESS OF THIS "MASSAGE" S/R * AND TRANSFERS TO IT. * * LDA PREPA ADA FCODE * * EXECUTE PREPROCESSING S/R * LDB D6 SET UP ERROR REGISTER LDA A,I JSB A,I * * * * PICK UP THE LOCATION OF THE NEXT CONTROL BYTE * JSB PRE7 COMPUTE "DEF RTRN" AS LAST STEP * * THE CALLING SEQUENCE IS COMPLETE-EXECUTE IT!!! * SET THE NO DATA TO BE RETURNED FLAG-NOMINAL CASE * * CLA STA DATA2 SPC 3 * EXECUTE THE CALL * * JSB JSBUF-1 STA SAVEA SAVE A AND B REGISTERS TO PASS THEM BACK TO STB SAVEB THE USER IN WORDS +2 AND +3 OF THE REPLY PARMB. SPC 2 * AFTER THE REQUEST IS EXECUTED THE POST PROCESSING * S/R WILL BE EXECUTED IN A MANNER ANALOGOUS TO THAT * SHOWN ABOVE FOR PREPROCESSING * * SET UP & CALL S/R THAT CONTROLS POSTPROCESSING * * LDA PSTPA ADA FCODE INDEX IN THE POST PROCESSING TABLE LDA A,I GET THE PROPER ADDRESS JSB A,I GO EXECUTE THE ROUTINE * * RETURN IERR TO RFAM THROUGH CDCB FOR POSTPROCESSING * OF ALL REQUESTS EXCEPT FSTAT (NO DCB IN CDCB) * LDA FCODE GET REQUEST TYPE CPA D13 IS IT A FSTAT CALL? JMP PAST YES SKIP IT LDA FERR GET IERR AS RETURNED LDB CDCBA GET CDCB ADDRESS ADB D145 STEP TO IERR WORD STA B,I AND STORE SPC 2 * IF THE DATA FLAG IS SET THE DATA MUST BE * RETURNED BEFORE THE STATUS REPLY CAN BE SENT BACK * IS THIS A REQUEST FROM A MOD BBL TERMINAL? * IF SO NO REPLY CAN BE RETURNED * * PAST LDA DATA2 SZA * * DETERMINE WHICH TYPE OF REPLY IS TO BE RETURNED * JMP *+3 JSB SDREQ JMP QUITS JSB SDATA SEND THE DATA BACK JSB SDREQ SEND THE PREV FORMATTED REQUEST * * * TERMINATE. THIS WILL REACTIVATE RFAM WHICH IS WAITING * ON A SCHEDULE (RFAEX) WITH WAIT. * * QUITS JSB EXEC DEF *+2 DEF D6 HED RFAEX: PREPROC. * (C) HEWLETT-PACKARD CO. 1976 SPC 5 PRE1 NOP * THIS S/R INSERTS DCB & IERR INTO CALL * LDA CDCBA PICK UP THE DCB ADDRESS INA STEP PAST FLAG WORD STA AJSBF,I ISZ AJSBF STORE IT & INCREMENT POINTER LDA FERRA PICK UP THE ERROR POINTER STA AJSBF,I & STORE IT * ISZ AJSBF * ISZ PRCNT INCREMENT THE PRAMETER COUNT ISZ PRCNT * LDA BLOKA PICK UP THE CONTROL BYTE ADDRESS IOR MSK5 ADD JUSTIFICATION FLAG STA PRAM1 JMP PRE1,I SPC 5 PRE2 NOP * INSERT DATA BUFFER RECORD ADDRESS LDA DABFA PICK UP DATA BUFFER ADDRESS STA AJSBF,I AND INSERT IT IN THE NEXT JSB ISZ AJSBF BUFFER SLOT-INCREMENT JSB BUFR ISZ PRCNT POINTER & PARAMETER COUNT * NOTE PRAM1 HASN'T BEEN SET UP JMP PRE2,I SPC 5 PRE3 NOP * USED FOR CREATE,PURGE,OPEN,RENAME JSB PRE1 INSERT DCB & IERR JSB STAND ADD STANDARD PARAMETERS JMP PRE3,I SPC 5 PRE4 NOP * MOVE PARMB POINTER PAST FIp LE NAME LDA BLOKA ADA D3 STA BLOKA * GETCB SETUP STA PRAM1 JMP PRE4,I SPC 5 * PRE5 NOP * USED FOR POSITION RECORD,CLOSE FILE,FILE CONTROL * LOCATE RECORD,ABS. PON RECORD JSB PRE1 INSERT DCB,IERR JSB PRE4 MOVE POINTER PAST FILE NAME * IS THIS CALL FOR RLOCF? IF NOT NEED ONLY * SET UP STANDARD PARAMETERS AND EXIT LDA FCODE PICK UP THE REQUEST FUNCTION CPA D11 CODE AND COMPARE TO 11 (RLOCF) RSS JMP PRE5A * SET UP THE STORAGE FOR THE 7 RETURNED RLOCF * PARAMETERS AND EXIT * LDA DM7 STA CONTR * LDA LOBSA LOOPL STA AJSBF,I INA ISZ AJSBF ISZ PRCNT ISZ CONTR JMP LOOPL JMP PRE5,I & RETURN * SET UP TO STRIP THE STANDARD PARAMETERS PRE5A JSB STAND JMP PRE5,I SPC 5 * PRE6 NOP * WRITE PREPROCESS S/R JSB PRE1 INSERT DCB & ERROR ADDRESS JSB PRE2 INSERT DATA RECORD ADDRESS JSB PRE4 MOVE PAST NAME JSB STAND GET STANDARD PARAMS JSB PRE8 READ DATA RECORD JMP PRE6,I & RETURN SPC 5 * PRE7 NOP * THIS IS THE LAST PREPROCESSING S/R CALLED * BY EACH REQUEST * IT COMPUTES "DEF RTRN" LDA JSBFA PICK UP THE ADDRESS OF THE ADA PRCNT JSB BUFFER & ADD THE # OF PARMS ADA D2 ALREADY INSERTED THEN ADD 1 FOR LDB JSBFA THE DEF RTRN & 1 FOR1ST FREE INB WORD THE FIND SLOT FOR DEF RTRN STA B,I AND INSERT IT FINALLY JMP PRE7,I RETURN SPC 5 PRE8 NOP * CHECK THE RECORD SIZE JSB SIZE * IT IS OK SO SET UP TO READ THE DATA * SET UP EXACT WORD LENGTH LDA PARMB ADA D5 LDA A,I STA IDBFL * * BUILD MODE LDA FSTLU GET THE COMM. LU AND MSK2 KEEP ONLY THE LU IOR MSK3 INSERT DATA ONLY CODE STA IMODE SAVE FOR D65CL CALL * PICK UP THE DATA * * JSkfB D65CL DEF *+7 DEF IRWR READ REQUEST DEF IMODE DEF DABUF DATA BUFFER DEF IDBFL BUFFER LENGTH DEF IRBUF+33 PASS TIME-TAGS TO DRIVER DEF IRBUF+34 * JMP ABERR ERROR RETURN * JMP PRE8,I NO,RETURN SPC 5 SPC 5 PRE10 NOP JSB PRE1 GET DCB & ERROR LOC JSB PRE2 GET DATA RECORD ADDRESS JSB PRE4 MOVE POINTER PAST NAME JSB STAND GET STANDARD PARAMETERS JSB SIZE * IF IT PASSES MUSTER THEN THE REQUEST IS COMPLETE * AND LOOKS OK SO EXIT BACK TO TO EXECUTE THE REQUEST JMP PRE10,I SPC 5 PRE11 NOP * USED FOR STATUS JSB PRE2 LDA D124 STA IDBFL JMP PRE11,I HED RFAEX: POST PROC. * (C) HEWLETT-PACKARD CO. 1976 PST1 NOP * NOTE THAT THE RETURN IS BUILT IN THE ORIGINAL * REQUEST BUFFER BEHIND DATA TYPE & SUBSTREAM * USED BY ALL REMOTE FMP & EXEC CALLS * NOTE THAT THERE ARE NO CONTROL BYTES * IN THE RETURNED BUFFER LDA PARMB PICK UP THE ADDRESS TO RETURN ADA D2 THE VALUES TO STA BLOKA * LDA SAVEA PICK UP SAVED A REG CONTENTS STA BLOKA,I ISZ BLOKA LDA SAVEB PICK UP SAVED B REG CONTENTS STA BLOKA,I ISZ BLOKA * ADJUST THE RETURNED PARAMETER COUNT LDA D4 STA RPCNT JMP PST1,I SPC 5 PST2 NOP * SET THE DATA COUNT * GET THE TRANSMISSION LOG LDA JSBFA ADA D6 LDA A,I LDA A,I STA BLOKA,I ISZ BLOKA ISZ RPCNT * * SET THE DATA TOO FLAG * CLA,INA STA DATA2 JMP PST2,I SPC 5 PST4 NOP JSB PST1 * RETURN THE 124 WORD DISC DIRECTORY FROM LOGICAL * UNIT # 2 FOR THE FILE STATUS FMP COMMAND * SET THE DATA TOO FLAG CLA,INA STA DATA2 JMP PST4,I SPC 5 PST6 NOP * RETURN IERR LDA FERRA,I STA BLOKA,I ISZ BLOKA ISZ RPCNT JMP PST6,I SPC 5 * PST7 NOP * RETURN A & B & IERR JSB PST1 JSB PST6 JMP PST7,I SPC 5 PST10 NOP * READ POST-PROCESSER JSB PST7 JSB PST2 JMP PST10,I SPC 5 PST12 NOP * THIS S/R RETURNED FIVE OPTIONAL LOCATION PARAMS * THE CALL IS SEARCHED AND A PARAMETER IS ASSEMBLED * FOR EACH DEF IN THE CALL THE PROCESS ENDS WHEN A * ZERO IS ENCOUNTERED IN THE JSB BUFFER JSB PST7 FIRST PUT IN A,B,IERR * LDA DM7 STA CONTR * LDB LOBSA LOOP9 LDA B,I * STA BLOKA,I * INB ISZ BLOKA ISZ RPCNT ISZ CONTR JMP LOOP9 JMP PST12,I SPC 5 SPC 5 HED RFAEX: EXEC PREPROC. * (C) HEWLETT-PACKARD CO. 1976 SPC 5 SPC 5 HED RFAEX: UTILITY S'R'S * (C) HEWLETT-PACKARD CO. 1976 STUFF NOP * NOTE THAT THE E REG NEED BESET UP AT THE START ONLY * THEREAFTER (SINCE THE CHARACTERS ARE PICKED UP IN * PAIRS) THE START OF EACH WORD IS IN THE * RELATIVE LOCATION-& THUS E IS OK FOREVERMORE * INCREMENT NUMBER OF ASSEMBLED PARAMETERS * CHECK THE CHAR COUNT FOR "EVENESS" LDB D10 SET UP THE ERROR REGISTER LDA PRMLP SLA JMP ERR ISZ PRCNT * THE LOOP COUNTER IS ALREADY TO GO-PRMLP LDA APRMS PICK UP THE ADDRESS OF THE STA AJSBF,I PARAMETER TO BE BUILT & PUT * IT IN THE JSB BUFFER * INCREMENT "DEF PARAM" POINTER (JSB BUFFER) ISZ AJSBF * * NOW THE INITIAL CHARACTER MUST BE LOCATED LDA BLOKA PICK UP 1ST CHAR LOCATION SSA RIGHT JUSTIFIED? CCE,RSS NO-SET E REG TO 1 CLE YES-SET E REG TO 0 * NOW CLEAR BYTE POINTER AND MSK1 CLEAR SIGN & STORE STA BLOKA POINTER TO NEXT PARAMETER * PICK UP 1ST CHARACTER AGAN4 LDA BLOKA,I PICK UP 1ST CHAR OF PAIR SEZ,RSS AND LEFT JUSTIFY IT ALF,ALF IF REQUIRED AND MSK6 STA PRM4 * PICK UP 2ND CHAR SEZ,RSS HAVE WE CROSSED A WORD BOUNDARY? * NOTE 2ND CHAR IS OPPOSITE JUSTIFICATION OF 1ST 1 ISZ BLOKA YES-INCREMENT SOURCE ADDRESS * LDA BLOKA,I PICK UP CHAR & RIGHT JUSTIFY IT SEZ,RSS IF REQUIRED BEFORE THE MERGING ALF,ALF OF THE TWO CHARS. AND MSK0 * NOW MERGE THE TWO CHARS & STORE THEM IOR PRM4 STA APRMS,I ISZ APRMS * NOW A "DEF PRAM" & AT LEAST ONE PARAM WORD * HAVE BEEN ASSEMBLED-DETERMINE IF THERE ARE * MORE CHARACTERS IN THIS STRING SEZ HAVE WE CROSSED A WORD BOUNDARY ? ISZ BLOKA YET-IF SO INCREMENT STORAGE ISZ PRMLP INCREMENT THE ISZ PRMLP CHARACTER COUNT-ARE THERE MORE? JMP AGAN4 YES-SET UP TO GET TWO MORE * WE ARE DONE WITH THIS CHAR SET UP ADDRESS OF * NEXT CONTROL CHAR TO BE EXTRACTED BY GETCB * LDA BLOKA PICK UP CONTROL CHAR ADDRESS-NOW SEZ IS IT IN THE HIGH ORDER BYTE? IF IOR MSK5 LEFT JUSTIFIED BIT 15=1 & SET IT STA PRAM1 UP FOR THE GETCB CALL TO FOLLOW JMP STUFF,I AND EXIT SPC 5 SDREQ NOP SEND THE REPLY WITH STATUS * AS A REQUEST * * SET THE PARMB RETURN FLAG LDA IRBUF PICK UP THE STREAM TYPE IOR MSK7 OR IN THE REPLY FLAG STA IRBUF & RETURN TO THE PARMB AND B4000 ISOLATE THE F BIT LDB IRBFL GET F LENGTH (35) SZA,RSS F BIT SET ? LDB RPCNT NO, GET SHORT, COMPUTED LENGTH STB LENGT SAVE * * THIS S/R ASSUMES THAT PREVIOUS POST PROCESSING * S/R HAVE SET UP THE REQUEST BUFFER TO BE SENT * IN REPLY TO THE ORIGIONAL REQUEST LDA FSTLU GET COMM. LU AND MSK2 STA IMODE * REPLIES ARE TRANSMITTED SPECIAL OPEN LOOP * & NO DMA AT THE TERMINAL IS ASSUMED JSB D65SV SEND REQUEST REPLY TO TERMINAL DEF *+7 DEF IRWW DEF IMODE DEF IRBUF DEF LENGT BUFFER LENGTH | DEF DUMMY DEF DUMMY * JMP ABERR ERROR RETURN * JMP SDREQ,I NO, RETURN SPC 5 SIZE NOP * FIRST PICK UP THE # OF DATA WORDS LDA PARMB ADA D5 LDA A,I * IS IT ZERO-ERROR IF IT IS SZA,RSS JMP ERR1 * IS IT NEGATIVE-ERROR IF IT IS SSA JMP ERR1 * IT'S POSITIVE BUT IS IT GREATER THAN 128 WORDS * LONG?-ERROR IF IT IS STA IDBFL SAVE DATA BUFFER LENGTH CMA,INA ADA DABFL SSA JMP ERR1 JMP SIZE,I SPC 5 SDATA NOP * * SET UP THE TRANSMIT DATA ONLY CALL MODE * AND INSERT IT IN THE CALL * LDA FSTLU GET COMM. LU AND MSK2 IOR MSK3 SEND DATA ONLY STA IMODE * * EXECUTE THE CALL JSB D65CL DEF *+7 DEF IRWW WRITE DEF IMODE DATA ONLY DEF DABUF DATA BUFFER DEF IDBFL BUFFER LENGTH DEF IRBUF+33 PASS TIME-TAGS TO DRIVER DEF IRBUF+34 * JMP ABERR ERROR RETURN * JMP SDATA,I NO, RETURN SPC 5 SPC 3 CODER LDB MD25 JMP ERR SPC 3 * * D6 PREPROCESSING ERROR * D7 POSTPROCESSING ERROR * D11 SIZE ERROR ERR STB SAVEB * * NOTE THAT THE RETURN IS BUILT IN THE ORIGINAL * REQUEST BUFFER BEHIND DATA TYPE & SUBSTREAM * USED BY ALL REMOTE RFA CALLS * NOTE THAT THERE ARE NO CONTROL BYTES * IN THE RETURNED BUFFER * DETERMINE IF THIS ERROR OCCURED DURING AN RFA READ * OR WRITE IF SO A STOP COMMAND MUST BE SENT TO CLEAR OUT * THE DATA RECORD ON THE LINE LDA PARMB ISOLATE THE FUNCTION CODE ADA D2 LDA A,I AND MSK0 ADA BASE NORMALIZE IT CPA D4 IS IT A 4 (REMOTE WRITE) JMP STOP YES SEND STOP CPA D5 NO-IS IT A 5 (REMOTE READ) JMP STOP YES SEND STOP-ALL OTHERS CONTINUE JMP GO OTHERWISE BUILD ERROR REPLY STOP LDA FSTLU GET COMM. LU AND MSK2 STA FSTLU * JSXB D65CL SEND STOP DEF *+7 DEF ICR CONTROL REQUEST DEF FSTLU STOP DEF DUMMY DEF DUMMY DEF DUMMY DEF DUMMY * JMP ABERR ERROR RETURN * GO LDA PARMB ADA D2 THE VALUES TO STA BLOKA * * SET UP A -1 FOR THE A REG. RETURN * THIS WILL ALERT THE TERM. THAT AN ERROR REPLY * IS BEING SENT LDA SAVEA STA BLOKA,I ISZ BLOKA * PICK UP THE B REG. (ERROR TYPE) LDA SAVEB STB IRBUF+4 SAVE THE ERROR CODE IN THE ERROR RETURN OF THE PARMB * * SET THE REPLY FLAG LDA IRBUF PICK UP THE STREAM WORD IOR MSK7 OR IN THE REPLY FLAG STA IRBUF & RESTORE TO THE BUFFER AND B4000 ISOLATE THE F BIT LDB IRBFL GET F LENGTH (D35) SZA,RSS F BIT SET ? LDB D25 NO, GET SHORT LENGTH STB LENGT SAVE FOR CALL * LDA FSTLU SET UP DRIVER MODE AND MSK2 STA IMODE * REPLIES ARE TRANSMITTED SPECIAL OPEN LOOP * & NO DMA AT THE TERMINAL IS ASSUMED * JSB D65SV SEND REQUEST REPLY TO TERMINAL DEF *+7 DEF IRWW WRITE DEF IMODE DEF IRBUF DEF LENGT DEF DUMMY DEF DUMMY * JMP ABERR ERROR RETURN * * LDA SAVEB GET ERROR CODE AGAIN ABEND LDB CDCBA GET ADDRSS OF CURRENT DCB ADB D145 STEP TO ERROR WORD STA B,I SAVE ERROR CODE JSB EXEC TERMINATE TO REACTIVATE RFAM DEF *+2 DEF D6 SPC 5 ERR1 LDA D11 JMP ERR SPC 5 ABERR DST SSA SAVE DRIVER ERROR RETURN * OUTPUT ERROR MESSAGE * LDA B CONVERT ERROR # IOR B#60 TO ASCII STA COMER+6 FOR OUTPUT * JSB EXEC OUTPUT ERROR MESSAGE DEF *+5 DEF D2 DEF D1 DEF COMER DEF COMEL * wB@< REMOTE EXEC-CALL MONITOR *(C) HEWLETT-PACKARD CO. 1976* * NAM EXECM,2,30 91700-16127 REV.A 760212 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 EXT D65SV EXT D65CL EXT CNUMO EXT REIO EXT #MBRK IFZ EXT DBUG XIF A EQU 0 B EQU 1 SUP EXT EXEC SPC 5 * * EXECM * SOURCE:91700-18127 * BINARY:91700-16127 * SHANE DICKEY * JULY 30.1974 * * MODIFIED BY: C.C.H. [01/11/76] * * Z OPTION INCLUDES DEBUG SPC 5 HED EXEC REQUEST PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * * * GET THE I/O CLASS FOR THIS MONITOR SET UP BY LSTEN * EXECM LDA B,I IS P1 = I/O CLASS? IFZ SZA,RSS IF ZERO INITIALIZE CALL-SET UP JMP *+3 AND TERMINATE-IF REAL LSTEN CALL- XIF STA ICLAS SET UP GET AND DO IT IFZ JMP GET * JSB DBUG SET UP DBUG DEF *+1 * JSB EXEC SAVE RESOURCES AND TERMINATE DEF *+4 DEF D6 DEF ZERO DEF D1 * JMP EXECM LSTEN CALL STARTS HERE XIF * * ISSUE GET ON I/O CLASS * GET JSB EXEC THIS GET WILL SUSPEND DEF *+5 EXECM UNTIL QUEUE SENDS DEF D21 A REMOTE EXEC CALL TO THE MONITOR DEF ICLAS UPON ACTIVATION, REQUEST PARMB WILL BE DEF IRBUF IN THE IRBUF BUFFER AREA DEF IRBFL * * PARMB+24=LU * LDA IRBUF+24 AND MSK2 STA FSTLU * * * THE ORIGINAL CALL IS RECONSTRUCTED * THE PREPROCESS FLAG IS CHECKED TO DETERMINE * IF THERE IS ANY /PREPROCESSING TO BE DONE * AN EXAMPLE OF THIS WOULD BE THE GATHERING OF * A DATA BUFFER BEFORE EXECUTION OF A WRITE REQUEST * ALSO ERROR CHECKING CAN BE DONE IN PREPROCESS S/R * FOLLOWING THE PREPROCESS THE RECONSTITUTED CALL * IS EXECUTED AND STATUS IS RETURNED TO EXECM * BY EXEC-IT IS THE RETURN OF THIS STATUS INFORMA- * TION THAT COMPRISES THE MAJOR PART OF POST- * PROCESSING, OF COURSE OTHER TYPES OF POSTPROCESSES * CAN BE ACCOMPLISHED. AN EXAMPLE IS THE WRITING OF * AN ACQUIRED DATA BUFFER TO THE TERMINAL FOLLOWING * A DATA READ * * * * CLEAR THE JSB BUFFER TO ZEROS AT THE START * LDB DM12 SET UP A COUNTER TO STB CONTR CLEAR 12 WORDS OF THE JSB BUFFER LDA JSBFA TO 0-THEN SET UP START ADDRESS STA AJSBF TO CLEAR CLA LOOP7 STA AJSBF,I CLEAR A WORD * * INCREMENT COUNTERS * ISZ AJSBF ISZ CONTR JMP LOOP7 IF NOT DONE DO NEXT ONE * * RECONSTRUCT THE CALL * LDA PARMB BUILD A POINTER TO THE ADA D6 1ST USER PARAMETER IN STA BLOKA PARMB & STORE IT IN BLOKA LDA PRMSA BUILD A POINTER TO THE ASSEMBLY STA APRMS AREA & SAVE IT-ACTUAL PARAMETERS' LDA JSBFA BUILD A POINTER TO THE JSB STA AJSBF ASSEMBLY AREA LDA JSBTB GET JSB TO EXEC & INSERT IT STA AJSBF,I IN THE BUILDING BUFFER ISZ AJSBF ISZ AJSBF * * AFTER PUTTING IN THE JSB STEP PAST DEF RETURN *(THIS WILL BE COMPUTED AND FILLED IN LATER) * INITIALIZE PARAMETER COUNTER TO DO SAME * CLA THIS WILL BE INCREMENTED STA PRCNT STA RECHK INITIALIZE CHECK-COUNT. * * BEFORE THE BUFFER IS BUILT FROM PARMB IT MAY NEED A "MASSAGE". * THE FOLLOWING CODE ISOLATES THE ADDRESS OF THIS "MASSAGE" S/R * AND TRANSFERS TO IT. * * SET UP THE EXEC PREPROCESS S/R ADDRESS * LDA BLOKA GET ADDR OF ICODE WORD INA * * THE ICODE PARAMETER MUST NOW BE SET UP * LDA A,ԿI ALF,ALF AND MSK0 STA ICODE * SKP * SET UP THE ERROR REGISTER * LDB D9 ADA EXPRA PICK UP ICODE, PROCESSOR,ERROR CHECK ICODE LDA A,I AND XFER TO PROCESS IF DEFINED * * BY WAY OF REVIEW: * BLOKA NOW POINTS TO PARMB+6(START OF PARAMETERS) * APRMS NOW POINTS TO PARMS (PARAMETER STORAGE BUFFER) * AJSBF NOW POINTS TO JSBUF+3 (BUILDING BUFFER 3RD WORD) * THE PARAMETER COUNT (PRCNT) IS ZERO * ICODE CONTAINS THE REQUESTED EXEC ICODE SETTING * THE PARMB IS CONTAINED IN THE IRBUF BUFFER * JSB A,I * * SET THE SIGN BIT & SET UP BOTH RETURNS * LDB JSBUF+2 LDA B,I IOR MSK5 STA B,I * JSB PRE7 COMPUTE "DEF RTRN" & ERROR RETURN * * SET THE NO DATA TO BE RETURNED FLAG-NOMINAL CASE * CLA STA DATA2 * * EXECUTE THE CALL * JSB JSBUF-1 STA SAVEA STB SAVEB * * AFTER THE REQUEST IS EXECUTED THE POST PROCESSING * S/R WILL BE EXECUTED IN A MANNER ANALOGOUS TO THAT * SHOWN ABOVE FOR PREPROCESSING * * SET UP & CALL S/R THAT CONTROLS POSTPROCESSING * JSB PST1 RETURN THE A AND B REGISTERS FIRST * * NOW WE ARE DONE UNLESS THE TIME WORDS ARE TO * BE RETURNED ( EXEC CALL 11) * LDB D9 LDA ICODE AND MSK1 ADA EXPSA PICK UP POSTPROCESSOR,ERROR CHECK ICODE LDA A,I AND EXECUTE POST PROCESSOR JSB A,I * SKP * IF THE DATA FLAG IS SET THE DATA MUST BE * RETURNED BEFORE THE STATUS REPLY CAN BE SENT BACK * * SET BIT14 FOR REPLY TO THE SATELLITE. * LDA IRBUF GET STREAM WORD IOR MSK8 ADD REPLY BIT STA IRBUF & REPLACE IT LDA DATA2 SZA * * DETERMINE WHICH TYPE OF REPLY IS TO BE RETURNED * JSB SDATA SEND THE DATA BACK JSB SDREQ SEND THE PREV FORMATTED REQUEST * * SO RETURN * JMP GET LOOP BACK TO AWAIT NEXT REQUEST * SPC 2 * REPORT ERRORS TO THE SYSTEM OPERATOR. * ERRPT NOP ENTRY/EXIT: ERROR-REPORT RTN. DST ERCOD SAVE THE ASCII ERROR CODE. CPB "02" = ASCII "02" ? CCB,RSS YES. SET =-1 & SKIP FOR MORE CHECKS JMP ERRP0 NO. CONTINUE ERROR-REPORT PROCESSING. CPA "DS" IF ERROR IS "DS02": PREEMPTION, JSB ERR GO TO ENSURE CLEANUP, VIA . * ERRP0 LDA D10 CALCULATE THE ADDRESS CMA,CLE,INA OF THE OFFENDING ADA ERRPT CALLING SEQUENCE. STA ERRPT SAVE THE ADDRESS FOR ASCII CONVERSION. JSB CNUMO GO TO CONVERT DEF *+3 THE ADDRESS TO DEF ERRPT AN OCTAL VALUE IN ASCII CODE. DEF ERADR SAVE THE CODE FOR ERROR-PRINTOUT. * JSB EXEC GO DEF *+5 TO DEF IRWW PRINT DEF D1 THE DEF ERMSG ERROR DEF D15 MESSAGE. NOP IGNORE ERRORS--IF ANY. * JMP GET GO TO AWAIT THE NEXT REQUEST. * ERMSG ASC 8, /EXECM ERROR: ERCOD ASC 4,???? AT ERADR ASC 3,000000 * HED PREPROCESSING S/R'S * (C) HEWLETT-PACKARD CO. 1976 * SKP SPC 10 PRE7 NOP * * THIS IS THE LAST PREPROCESSING S/R CALLED * BY EACH REQUEST * IT COMPUTES "DEF RTRN" & SETS 'CCE,RSS' INTO ERROR-RTN. LOC'N. * AND 'CLE' INTO NORMAL RETURN LOC'N. * IF THE 'EXEC' CALL IS A NON-DISC READ/WRITE CALL FOR <130 WORDS, * THEN A CONVERSION IS MADE, TO CALL , VICE , IN ORDER * TO ALLOW ANOTHER PROGRAM TO GAIN ACCESS TO THE DISC-RESIDENT AREA. * LDA JSBFA PICK UP THE ADDRESS OF THE ADA PRCNT JSB BUFFER & ADD THE # OF PARMS ADA D2 ALREADY INSERTED THEN ADD 1 FOR LDB JSBFA THE DEF RTRN & 1 FOR 1ST FREE INB WORD. THEN FIND SLOT FOR DEF RTRN STA B,I AND INSERT IT. LDB ERRIN GET EXEC-ERROR INSTRUCTION (CCE,RSS). STB A,I  STORE IN ERROR-RETURN LOCATION. INA POINT TO NORMAL-RETURN LOCATION. LDB ERRIN+1 GET NORMAL-RETURN INSTRUCTION (CLE). STB A,I STORE IN NORMAL-RETURN LOCATION. LDA RECHK GET THE CHECK-COUNT. CPA D2 READ/WRITE CALL & BUFFER <130 WORDS? RSS YES, CONTINUE CHECKS. JMP PRE7,I NO--CANNOT USE ! LDB JSBRE GET THE "JSB REIO" INSTRUCTION. ADA PRCNT IF THE PARAMETER COUNT =4 (NON-DISC), & CPA D6 IT'S A READ/WRITE CALL FOR <130 WORDS, STB JSBUF THEN CONVERT TO CALL VIA . JMP PRE7,I RETURN SPC 2 PRE8 NOP ENTRY EXIT: DATA-READ SUBROUTINE. JSB BCHEK CHECK FOR "BREAK", BEFORE USE OF LINE. * LDA FSTLU GET THE LOGICAL UNIT NUMBER. IOR MSK3 INCLUDE MODE FOR DATA-ONLY. STA CONWD SAVE THE CONFIGURED CONTROL WORD. * * PICK UP THE DATA * JSB D65CL CALL DEF *+8 THE DEF IRWR COMMUNICATION LINE DEF CONWD CONTROL ROUTINE DEF DABUF TO DEF IDBFL READ DEF IRBUF+33 THE DEF IRBUF+34 CALLER'S DEF EXTAD DATA. JSB ERRPT * A SYSTEM ERROR HAS BEEN DETECTED! * * JMP PRE8,I * CONWD NOP * SPC 10 HED POST PROCESSING S/R'S * (C) HEWLETT-PACKARD CO. 1976 * PST1 NOP * * NOTE THAT THE RETURN IS BUILT IN THE ORIGINAL * REQUEST BUFFER BEHIND DATA TYPE & SUBSTREAM * USED BY ALL REMOTE FMP & EXEC CALLS * NOTE THAT THERE ARE NO CONTROL BYTES * IN THE RETURNED BUFFER * LDA PARMB PICK UP THE ADDRESS TO RETURN ADA D2 THE VALUES TO STA BLOKA * LDA SAVEA PICK UP SAVED A REG CONTENTS STA BLOKA,I ISZ BLOKA LDA SAVEB PICK UP SAVED B REG CONTENTS STA BLOKA,I ISZ BLOKA * * ADJUST THE R |ETURNED PARAMETER COUNT * LDA D4 STA RPCNT JMP PST1,I SPC 3 * BREAK-CHECK SUBROUTINE. SPC 1 BCHEK NOP ENTRY/EXIT * JSB #MBRK GO TO THE BREAK-CHECK ROUTINE DEF *+4 DEF STRM SPECIFY THIS MONITOR'S STREAM-TYPE (5). DEF FSTLU SPECIFY THE CURRENT LOGICAL UNIT NO. DEF IRBUF+33 SPECIFY LOCATION OF THE TIME-TAGS. * JSB ERRPT ERROR: REPORT THE PROBLEM. * JMP GET BREAK DETECTED--GO AWAIT NEXT REQUEST. * STB EXTAD NO BREAK. SAVE EQT EXT. ADDR. FOR D65CL. JMP BCHEK,I RETURN TO THE CALLER. * HED EXEC PRE PROCESSING S/R'S * (C) HEWLETT-PACKARD CO. 1976 * SPC 5 OK1 NOP PROCESS AN EXEC WRITE CALL * * FIRST FIX UP LOGICAL UNIT # * JSB OK1A THEN READ PARAMS INTO JSB BUFFER * * NOW THE DATA RECORD MUST BE PICKED UP. * LDA IDBFL GET THE DATA LENGTH. SZA ZERO LENGTH WRITE REQUEST? JSB PRE8 NO. GO TO READ DATA FROM THE LINE. JMP OK1,I RETURN FROM PREPROCESSOR SPC 5 OK1A NOP JSB SIZE * * NOW DO STANDARD STUFF I.E. SET UP TO EMPTY PARMB * ISZ BLOKA INCREMENT TO PARMB +07 LDA BLOKA,I MOVE ICODE TO PARMS ALF,ALF AND MSK2 STA APRMS,I LDA APRMS MOVE DEF ICODE TO JSBUF+2 STA AJSBF,I ISZ AJSBF INCREMENT TO JSBUF+3 ISZ PRCNT INCREMENT PARAMETER COUNT TO 1 ISZ BLOKA INCREMENT TO PARMB+8 ISZ APRMS INCREMENT PARAMETER STORAGE ADDRESS * LDB BLOKA,I GET CONTROL WORD STB APRMS,I PUT IN PARAMETER STORAGE LDB APRMS STB AJSBF,I PUT IT IN THE JSB BUFFER THEN ISZ AJSBF INCREMENT THE BUFFER POINTER & ISZ PRCNT THE PARAMETER COUNT ISZ APRMS * * SET UP & CALL STAND & CALL IT TO FILL PARMS * LDB DABFA PICK UP THE DATA BUFFER STB AJSBF,I ADDRESS & PUT IT IN THE JSB THEN ISZ AJSBF INCREMENT THE BUFFER POINTER & ISZ PRCNT THE PARAMETER COUNT ISZ BLOKA LDA BLOKA IOR MSK5 FOR THE 1ST "STANDARD" STA PRAM1 PARAMETER THEN GO AND * JSB STAND PICK THEM UP BEFORE ISZ RECHK SHOW PASSAGE OF USE-CHECK (R/W). JMP OK1A,I RETURNING SPC 5 OK3 NOP THE I/O CONTROL S/R FIRST, LDA BLOKA SETS UP FOR THE IOR MSK5 CALL & THE LOADS THE STA PRAM1 STANDARD PARAMETERS * JSB STAND & THEN JMP OK3,I RETURNS SPC 5 OK11 NOP * * TIME IN TMBSS BUFFER AFTER CALL * LDA ICODA STA AJSBF,I ISZ AJSBF ISZ PRCNT LDA TMBSA STA AJSBF,I ISZ AJSBF ISZ PRCNT JMP OK11,I SPC 5 OK31 NOP JSB OK3 * * PUT IN THE DEF'S TO THE STATUS WORDS * LDA IST1A STA AJSBF,I ISZ AJSBF ISZ PRCNT LDA IST2A STA AJSBF,I ISZ AJSBF ISZ PRCNT JMP OK31,I HED EXEC POST PROCESSING S/R'S * (C) HEWLETT-PACKARD CO. 1976 * SPC 5 OKP2 NOP THE READ EXEC CALL SUB-POST-PROC * * SET THE DATA TOO FLAG & RETURN * LDB IDBFL GET THE DATA BUFFER LENGTH. STB DATA2 RETURN-DATA FLAG: #0=SEND DATA,0=NO DATA JMP OKP2,I RETURN. SPC 2 OKP10 NOP * * THIS SUB-POST-PROCESS IS USED BY EXEC CALLS THAT * RETURN ONLY A&B REGS (I.E. IT IS A DUMMY S/R) * JMP OKP10,I SPC 2 OKP11 NOP THE TIME REQ. SUB-POST-PROCESSOR * * SET UP A LOOP TO PICK UP THE FIVE WORDS IN THE * TIME BSS "TMBSS" * LDA MD5 STA CONTR * LDB TMBSA LOOP5 LDA B,I STA BLOKA,I STORE TIME WORD ISZ BLOKA * * INCREMENT THE RETURNED PARAMETER COUNTER * ISZ RPCNT INB ISZ CONTR JMP LOOP5 JMP OKP11,I SPC 2 OKP13 NOP LDA ISTA1 RETURN, THE TWO STATUS WORDS LDB PARMB SET B TO RETURN BUFFER+4 ADDRESS ADB D4 * STA B,I RETURN 1ST STATUS WORD LDA ISTA2 GET THE NEXT ONE INB STA B,I LDA RPCNT FINALLY ADJUST RETURNED PARAM ADA D2 COUNT & RESTORE STA RPCNT IT & THEN JMP OKP13,I RETURN * SKP STUFF NOP * * NOTE THAT THE E REG NEED BE SET UP AT THE START ONLY * THEREAFTER (SINCE THE CHARACTERS ARE PICKED UP IN * PAIRS) THE START OF EACH WORD IS IN THE * RELATIVE LOCATION-& THUS E IS OK FOREVERMORE * INCREMENT NUMBER OF ASSEMBLED PARAMETERS * CHECK THE CHAR COUNT FOR "EVENESS" * LDB D10 SET UP THE ERROR REGISTER LDA PRMLP SLA JMP ERR+1 ISZ PRCNT * * THE LOOP COUNTER IS ALREADY TO GO-PRMLP * LDA APRMS PICK UP THE ADDRESS OF THE STA AJSBF,I PARAMETER TO BE BUILT & PUT * IT IN THE JSB BUFFER * INCREMENT "DEF PARAM" POINTER (JSB BUFFER) * ISZ AJSBF * * NOW THE INITIAL CHARACTER MUST BE LOCATED * LDA BLOKA PICK UP 1ST CHAR LOCATION SSA RIGHT JUSTIFIED? CCE,RSS NO-SET E REG TO 1 CLE YES-SET E REG TO 0 * * NOW CLEAR BYTE POINTER * AND MSK1 CLEAR SIGN & STORE STA BLOKA POINTER TO NEXT PARAMETER * * PICK UP 1ST CHARACTER * AGAN4 LDA BLOKA,I PICK UP 1ST CHAR OF PAIR SEZ,RSS AND LEFT JUSTIFY IT ALF,ALF IF REQUIRED AND MSK6 STA PRM4 * * PICK UP 2ND CHAR * SEZ,RSS HAVE WE CROSSED A WORD BOUNDARY? * * NOTE 2ND CHAR IS OPPOSITE JUSTIFICATION OF 1ST 1 * ISZ BLOKA YES-INCREMENT SOURCE ADDRESS * LDA BLOKA,I PICK UP CHAR & RIGHT JUSTIFY IT SEZ,RSS IF REQUIRED BEFORE THE MERGING ALF,ALF OF THE TWO CHARS. AND MSK0 * * NOW MERGE THE TWO CHARS & STORE THEM * IOR PRM4 STA APRMS,I  ISZ APRMS * * NOW A "DEF PRAM" & AT LEAST ONE PARAM WORD * HAVE BEEN ASSEMBLED-DETERMINE IF THERE ARE * MORE CHARACTERS IN THIS STRING * SEZ HAVE WE CROSSED A WORD BOUNDARY ? ISZ BLOKA YET-IF SO INCREMENT STORAGE ISZ PRMLP INCREMENT THE ISZ PRMLP CHARACTER COUNT-ARE THERE MORE? JMP AGAN4 YES-SET UP TO GET TWO MORE * * WE ARE DONE WITH THIS CHAR SET UP ADDRESS OF * NEXT CONTROL CHAR TO BE EXTRACTED BY GETCB * LDA BLOKA PICK UP CONTROL CHAR ADDRESS-NOW SEZ IS IT IN THE HIGH ORDER BYTE? IF IOR MSK5 LEFT JUSTIFIED BIT 15=1 & SET IT STA PRAM1 UP FOR THE GETCB CALL TO FOLLOW JMP STUFF,I AND EXIT SPC 1 SDREQ NOP SEND THE REPLY WITH STATUS AS A REQUEST. LDB IRBFL GET FRIENDLY PARMB LENGTH(35 WORDS). LDA IRBUF GET THE FIRST WORD OF THE PARMB. ALF POSITION FRIENDLY BIT(#11) TO THE SIGN. SSA,RSS IS REPLY GOING TO A FRIENDLY SATELLITE? LDB RPCNT NO. GET MINIMUM REPLY LENGTH. STB RPLEN CONFIGURE REPLY LENGTH SPECIFICATION. * * THIS S/R ASSUMES THAT PREVIOUS POST PROCESSING * S/R HAVE SET UP THE REQUEST BUFFER TO BE SENT * IN REPLY TO THE ORIGINAL REQUEST * THE REQUEST IS CONTAINED IN THE TERMQ BUFFER AREA * LDA FSTLU GET THE LOGICAL UNIT NUMBER. STA CONWD SAVE AS CONFIGURED CONTROL WORD. * JSB D65SV SEND REQUEST REPLY TO TERMINAL DEF *+7 DEF IRWW DEF CONWD DEF IRBUF DEF RPLEN DEF DUMMY DEF DUMMY JSB ERRPT * JMP SDREQ,I RETURN SPC 10 SIZE NOP ENTRY EXIT: BUFFER SIZE ANALYZER. LDB ICODE GET THE REQUEST CODE. LDA IRBUF+5 GET THE NUMBER OF DATA WORDS. SZA ZERO WORDS SPECIFIED? JMP NEG? NO--CHECK FOR NEGATIVE. CPB D1 ZERO-LENGTH READ REQUEST? JMP SETLN YES--GO TO SET DNdATA LENGTH. CPB D2 ZERO-LENGTH WRITE REQUEST? JMP SETLN YES--GO TO SET DATA LENGTH. JMP ERR1 NO. ERROR! NEG? SSA NEGATIVE SPECIFICATION? JMP ERR1 YES--ERROR! * * IT'S POSITIVE BUT IS IT GREATER THAN 512 WORDS * LONG?-ERROR IF IT IS * SETLN STA IDBFL SAVE DATA BUFFER LENGTH STA B SAVE LENGTH FOR CHECK. CMA,INA ADA DABFL SSA JMP ERR1 ADB DM130 IF THE DATA BUFFER LENGTH SSB IS <130 WORDS, THEN INDICATE ISZ RECHK THE PASSAGE OF AN USE-CHECK. JMP SIZE,I SPC 1 * IF A DATA FLAG ERROR HAS BEEN DETECTED * SEND A STOP REPLY AND THEN SEND AN ERROR REPLY * * TRANSMIT STOP REPLY * NOW SEND THE STANDARD ERROR REPLY * ERR1 LDB D11 SET UP ERROR REGISTER JMP ERR+1 * * ERROR PROCESSING OF CONFIGURED 'EXEC-CALL' ERRORS. * EXERR DST IRBUF+4 SAVE ASCII ERROR CODE FOR THE USER. CPA "IO" IF THE ERROR WAS AN "IOXX", RSS SKIP TO FURTHER ISOLATE THE TYPE. JMP CKSC GO TO PROCESS NON-"IOXX" ERRORS. CPB "05" IF THE ERROR CODE CLA,RSS WAS "IO05" (ILLEGAL TRK/SECTOR), CPB "08" OR "IO08" (DISC WRITE >1 TRK), CLA,RSS PREPARE FOR ERROR CODE #11; LDB D12 ELSE, USE CODE #12 FOR DEFAULT. SZA,RSS WAS IT "IO05" OR "IO08" ? LDB D11 YES. SET ERROR CODE =11. JMP ERR+1 GO TO RETURN THE ERROR INFORMATION. * CKSC LDB D12 LOAD THE DEFAULT ERROR CODE. CPA "SC" IF THIS WAS A SCHEDULING ERROR, LDB D8 SET THE ERROR CODE =8. JMP ERR+1 GO TO RETURN THE ERROR INFORMATION. * SKP SDATA NOP JSB BCHEK CHECK FOR "BREAK", BEFORE LINE USE. * * SET UP THE TRANSMIT DATA ONLY CALL MODE * AND INSERT IT IN THE CALL * LDA FSTLU GET THE LOGICAL UNIT NUMBER. IOR MSK3w3B@< INCLUDE THE BITS FOR MODE =DATA ONLY. STA CONWD SAVE THE CONFIGURED CONTROL WORD. * * EXECUTE THE CALL * JSB D65CL DEF *+8 DEF IRWW DEF CONWD DEF DABUF DEF IDBFL SET UP IN SIZE S-R DEF IRBUF+33 PASS TIME-TAGS TO DRIVER DEF IRBUF+34 DEF EXTAD JSB ERRPT * JMP SDATA,I JB SKP ERR NOP STB SAVEB * * ERROR 8 = SCHEDULING ERROR. * ERROR 9 = ILLEGAL EXEC ICODE * ERROR10 = ODD PARMB STRING COUNT * ERROR11 = PARMB DATA FLAG (# WORDS OF DATA) ERROR * ERROR12 = "IOXX" ERROR WAS DETECTED. * * NOTE THAT THE RETURN IS BUILT IN THE ORIGINAL * REQUEST BUFFER BEHIND DATA TYPE & SUBSTREAM * USED BY ALL REMOTE EXEC CALLS * NOTE THAT THERE ARE NO CONTROL BYTES * IN THE RETURNED BUFFER * DETERMINE IF THIS ERROR OCCURED DURING AN EXEC READ * OR WRITE IF SO A STOP COMMAND MUST BE SENT TO CLEAR OUT * THE DATA RECORD ON THE LINE * LDA IRBUF+7 PICK UP THE ICODE FROM PARMB ALF,ALF AND MSK0 ADA DM3 IF ICODE =1 OR 2 IT IS A READ SSA,RSS OR WRITE REQUEST SO SEND STOP JMP GO OTHERWISE BUILD ERROR REPLY * JSB D65CL SEND STOP! DEF *+8 DEF IRC DEF FSTLU DEF DUMMY DEF DUMMY DEF DUMMY DEF DUMMY DEF EXTAD NOP * IGNORE ERRORS TO ENSURE CLEANUP * * * SET A =-1 FOR THE A REG. RETURN, TO INDICATE THAT THIS IS AN ERROR REPLY. * GO CCA STA IRBUF+2 LDA SAVEB GET THE ERROR TYPE, AND INSERT STA IRBUF+3 INTO PARMB WORD #4 FOR RETURN. * LDA IRBUF GET THE FIRST WORD OF THE PARMB. IOR MSK8 ADD REPLY BIT STA IRBUF & RETURN IT LDB IRBFL GET FRIENDLY PARMB LENGTH (35 WORDS). ALF POSITION FRIENDLY BIT(#11) TO THE SIGN. SSA,RSS IS THE REPLY GOING TO A FRIENDLY USER? LDB D12 NO. GET MAX. REPLY LENGTH FOR ALIENS. STB RPLEN CONFIGURE REPLY LENGTH SPECIFICATION. * LDA FSTLU GET THE LOGICAL UNIT NUMBER. STA CONWD SAVE THE CONTROL WORD. * SKP JSB D65SV SEND REQUEST REPLY TO TERMINAL DEF *+7 DEF IRWW DEF CONWD DEF IRBUF DEF RPLEN LENGTH OF THE REQUEST/REPLY BUFFER DEF DUMMY DEF DUMM/Y NOP * IGNORE ERRORS TO ENSURE CLEANUP * * JMP GET GO TO AWAIT THE NEXT REQUEST. SPC 3 STAND NOP LDA PRAM1 AGAN3 JSB GETCB * * NOW GO GET CONTROL BYTE AND PARAMETER COUNT * UP AND EXECUTE THE CALL CONTAINED IN IT. * ADJUST PARAMETER LOOP COUNTER * LDA PRMLP PICK UP THE PARAMETER LOOP LDB TEMP COUNTER & THE PARAMETER TYPE SZB,RSS IS THE CONTROL CHAR AN "END" CHAR JMP STAND,I IF SO WE ARE READY TO WRAP UP CMA,INA TRUE LOOP COUNTER & STA PRMLP RESTORE IT * * NOW PROCESS THE PARAMETER * THE CHAR IS EITHER A STRING OR AN INTEGER * SO TWO OR MORE CHARS MUST BE MOVED INTO THE JSB * BUFFER & THE PARAMETER COUNT MUST BE INCREMENTED * BY 1 * LDA BLOKA JSB STUFF * * SET UP THE CONTROL CHARACTER LOCATION * JMP AGAN3 GO GET NEXT PARAMETER JMP STAND,I * SKP GETCB NOP * * THIS S/R PICKS UP THE CONTROL BYTE FOR THE NEXT * PARAMETER * IT ASSUMES THAT THE A REGISTER CONTAINS THE * ADDRESS OF THE WORD CONTAINING THE C.B. AND THE * SIGN TELLS WHICH BYTE IT IS IN * IF BIT 15 IS 0 THE C.B. IS RIGHT JUSTIFIED * IF BIT 15 IS 1 THE C.B. IS LEFT JUSTIFIED * IF E=0 (RT. JUS),SIGN=0 FOR CONTROL BYTE * SSA RIGHT JUSTIFIED ? ERRIN CCE,RSS NO-SET E REG TO 1 CLE YES-SET E REG TO 0 * AND MSK1 CLEAR SIGN BIT & PICK LDA A,I UP WORD SEZ RIGHT JUSTIFY THE C.B. ALF,ALF IF REQUIRED AND MSK0 MASK OUT THE LEFT BYTE * * THE CONTROL BYTE IS NOW ISOLATED IN THE RIGHT BYTE * STA TEMP SAVE FOR LATER * * ISOLATE THE CHAR COUNT * AND MSK2 ISOLATE THE CHAR STA PRMLP COUNT & RETURN TO THE USER * * SET DATA BYTE LOCATION OF STUFF OP. TO FOLLOW * IF CONTROL BYTE IS LEFT JUST. THEN THE DATA BYTE * IS RIGHT JUSTIFIED & VICE VERSA * SEZ,RSS ISZ BLOKA LDA BLéOKA AND MSK1 SEZ,RSS IOR MSK5 STA BLOKA * * BLOKA SIGN AND CONTENTS TELL WHERE THE DATA BYTE * IS-SAME CONVENTIONS AS ABOVE * JMP GETCB,I * SPC 10 MSK0 OCT 000377 MSK1 OCT 077777 MSK2 OCT 000077 MSK3 OCT 000300 MSK5 OCT 100000 MSK6 OCT 177400 MSK8 OCT 40000 * * ADDRESSES OF TABLES * DABFA DEF DABUF EXPRA DEF EXPRT-1 EXEC CALL PROCESS TABLE ADDRESS EXPSA DEF EXPST-1 EXEC CALL POST PROCESS TABLE ADD ICODA DEF ICODE IST1A DEF ISTA1 IST2A DEF ISTA2 JSBFA DEF JSBUF PRMSA DEF PARMS TMBSA DEF TMBSS * * CONSTANTS & STORAGE * ********* CONSTANTS ********* * DABFL DEC 512 DM12 DEC -12 DM130 DEC -130 D1 DEC 1 D2 DEC 2 D5 DEC 5 STRM EQU D5 STREAM-TYPE. D6 DEC 6 D8 DEC 8 D15 DEC 15 D11 DEC 11 D12 DEC 12 IRC OCT 100003 IRWR OCT 100001 IRWW OCT 100002 CODE FOR WRITE REQUEST MD5 DEC -5 D10 DEC 10 D4 DEC 4 DM3 DEC -3 D9 DEC 9 "DS" ASC 1,DS "IO" ASC 1,IO "02" ASC 1,02 "05" ASC 1,05 "08" ASC 1,08 "SC" ASC 1,SC * SKP * ********** STORAGE ********** * IRBUF BSS 35 AJSBF NOP APRMS NOP BLOKA NOP PARMB PARAMETER POINTER CONTR NOP DATA2 NOP EXTAD NOP EQT EXTENSION ADDRESS. ICODE NOP EXEC CALL CODE TYPE STORAGE IRBFL DEC 35 LENGTH OF REQUEST BUFFER ISTA1 NOP ISTA2 NOP PARMB DEF IRBUF REQUEST ADDRESS DEC 6 FIRST WORD OF REQUEST PRAM1 NOP THESE PARAMS MAY BE SET UP BY PRCNT NOP PRMLP NOP PRM4 NOP RECHK NOP USE-CHECK COUNTER. RPCNT NOP RETURNED PARAMETER COUNTER RPLEN NOP REPLY LENGTH STORAGE. SAVEA NOP RETURNED A REG CONTENTS SAVEB NOP TEMP NOP FSTLU NOP * TMBSS BSS 5 * * THE INFORMATION BUFFER FOLLOWS * IDBFL OCT 0 DATA BUFFER LENGTH PARMS BSS 12 BUFFER FOR REQUEST DATA WORDS * JSBTB JSB EXEC JSBRE JSB REIO * * JSBUF IS A S/R CON!]FIGURED BUFFER * NOP ENTRY POINT JSBUF BSS 12 BUFFER FOR ASSEMBLING EXEC REQS. SEZ,RSS DID 'EXEC' DETECT AN ERROR? JMP JSBUF-1,I NO. TAKE NORMAL RETURN. JMP EXERR YES. GO TO PROCESS THE ERROR. * SKP * TABLES * EXPRT DEF OK1A ICODE 1 = READ REQ DEF OK1 ICODE 2 =WRITE REQ DEF OK3 ICODE 3 = CONTROL DEF ERR ICODE 4 = UNDEFINED(DISC ALLOC) DEF ERR ICODE 5 = UNDEFINED (PKG.TRK.REL) DEF ERR ICODE 6 = UNDEFINED(PRG.COMPLET) DEF ERR ICODE 7 = UNDEFINED(PRG.SUSPEND) DEF ERR ICODE 8 = UNDEFINED(SEG.LOAD) DEF ERR ICODE 9 = UNDEFINED(SCHED W.WAIT) DEF OK3 ICODE 10= PROGRAM SCHED(WONTWAIT) DEF OK11 ICODE 11= TIME REQUEST DEF OK3 ICODE 12= EXECUTION TIME DEF OK31 ICODE 13= I/O STATUS DEF ERR ICODE 14 UNDEFINED DEF ERR ICODE 15 UNDEFINED(GLOBTRK.ALL) DEF ERR ICODE 16 UNDEFINED(GLOBTRK.REL) * * EXPST DEF OKP2 ICODE 1 READ REQUEST DEF OKP10 ICODE 2 WRITE DEF OKP10 ICODE 3 CONTROL REQUEST DEF ERR ICODE 4 UNDEFINED (SEE DEF ERR ICODE 5 UNDEFINED ALSO DEF ERR ICODE 6 UNDEFINED THE DEF ERR ICODE 7 UNDEFINED EXPRT DEF ERR ICODE 8 UNDEFINED TABLE) DEF ERR ICODE 9 UNDEFINED DEF OKP10 ICODE 10 PROGRAM SCHED (WOUTWAIT DEF OKP11 ICODE 11 TIME REQUEST DEF OKP10 ICODE 12 EXECUTION TIME DEF OKP13 ICODE 13 I/O STATUS DEF ERR ICODE 14 UNDEFINED (SEE ALSO DEF ERR ICODE 15 UNDEFINED EXPRT DEF ERR ICODE 16 UNDEFINED TABLE) DABUF BSS 512 ICLAS NOP ZERO NOP DUMMY EQU ZERO D21 DEC 21 END EXECM R  91700-18128 1603 S 0122 DS1/B CCE MODULE: DEXEC              H0101 ;ASMB,R,L,C HED REMOTE EXEC-CALL INTERFACE*(C) HEWLETT-PACKARD CO. 1976* * NAM DEXEC,7 91700-16128 REV.A 760116 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 EXT D65AB EXT EXEC EXT D65MS EXT .ENTR * ENT DEXEC SUP * DEXEC * SOURCE:91700-18128 * BINARY:91700-16128 * SHANE DICKEY * AUGUST 1,1974 * * MODIFIED BY J. P. BAUDOUIN * MODIFIED 18 JUN 75 * * MODIFIED BY: CHW [ 01-16-76 ] * SPC 2 * DEXEC NOP LDA DEXEC GET THE RETURN POINTER. STA EXIT SAVE FOR '.ENTR' PROCESSING. LDA MD10 CLEAR THE PARAMETER AREA LDB APRMS TO FACILITATE CHECKING JSB CLERR FOR MISSING PARAMETERS. * JMP GETPR GO TO OBTAIN PARAMETER ADDRESSES. * PRAMS REP 10 NOP SPC 5 EXIT NOP GETPR JSB .ENTR DEF PRAMS * CLA STA ERRFG STA RCXMT LDA MD35 LDB IRBFA JSB CLERR * LDA PRAMS,I * * IS LU = 0? IF SO LOCAL CENTRAL CALL * SZA,RSS LOCAL EXEC CALL? JMP LEXEC YES AND B77 STA IRBUF+24 LDA IRBFA LDB STREM SET UP 1ST PARMB WORD-STREAM TYPE STB A,I * ADA D5 STEP TO WORD 6 OF PARMB STA AIRBF UNDER CONSTRUCTION & CONTINUE * * COMPUTE # OF PARAMETERS * CLA LDB APRMS STB PRMSA GET ADDRESS OF FIRST PASSED PARM * LOOP2 LDB PRMSA,I IS IT THERE (NONZERO) SZB,RSS JMP OUT NO-DONE GET OUT INA YES-INCREMENT PARM COUNT ISZ PRMSA STEP TO NEXT PRAM JMP LOOP2 * OUT ADA M1 DECREMENT TO ACCOUNT FOR IDEST NOT SHIPPED STA PRMS# STA AIRBF,I ISZ AIRBF * * INSERT ICODE INTO PARMB * LDA PRAMS+1,I STA AIRBF,I AND MSK0 STRIP SIGN BIT & SAVE STA ICODE ISZ AIRBF * * SET UP POINTER TO NEXT PARMB ADDRESS TO FILL * LDA AIRBF STA PONTR * * SET UP PARMB BUFFER FILL SUBROUTINE * LDA ICODE LDB D1 ADA M14 SSA,RSS JSB ERR LDA ICODE ZERO? SZA,RSS JSB ERR YES SSA NEGATIVE? JSB ERR YES * * PICK UP THE PROCESSOR * ADA SUBAD LDA A,I * JSB A,I * * DVR65 DRIVER CALL * JSB STUP GO TO SET UP THE MASTER REQUEST. * * THE CALL TO 'D65MS' WILL : * 1) GET AN I/O CLASS * 2) COMPLETE WORD 2 OF PARMB (CLASS) * 3) SEND THE REQUEST * 4) AWAIT THE REPLY * 5) RETURN REPLY TO CALLER FOR EXAMINATION * 6) RETURN CONTROL TO CALLER * * JSB D65MS GO TO THE MASTER-REQUEST INTERFACE. DEF *+8 DEF RCXMT REQUEST CODE DEF CONWD CONTROL WORD (ERROR/Z/MODE/LU #) DEF IRBUF REQUEST BUFFER DEF IRBFL REQUEST LENGTH DEF BUFF,I DATA BUFFER--IF ANY DEF BUFL DATA LENGTH--IF ANY DEF TEMP ERROR-REPORT ADDRESS JMP MSERR * ERROR DETECTED BY 'D65MS'--REPORT IT. * LDB D1 GET ERROR CODE LDA ICODE AND ICODE FOR INDEX ADA PUBAD THEN ADD TABLE START LDA A,I GET PROCESSOR ADDRESS JSB A,I & GO DO IT * SKP * ERRORS SIGNIFIED BY AN ASCII DS,SC,IO (OR) RQ IN THE * PARMB + 5 WORD ON RETURN * IF SIGN BIT SET ON ICODE-RETURN TO USER * OTHERWISE KICK HIM OFF * RETURN THE STATUS * CHECK FOR SATELLITE DETECTED ERROR * LDB D2 SET UP ERROR CODE LDA IRBUF+6 SET UP TERMINALS ERROR RESPONSE STA MSG4+1 IN CASE AN ERROR EXISTS LDA IRBUF+5 STA MSG4 CPA DS IS IT AN ASCII "DS"? JSB ERR YES CPA SC A "SC"? JSB ERR YES CPA IO AN "IO" JSB ERR YES CPA RQ AN"RQ"? JSB ERR YES CPA IL AN "IL" JSB ERR YES * * WELL WE MADE IT * CLEAR THE ENTRY ARRAY, AFTER SETTING CORRECT EXIT POINT. * LDA PRAMS+1,I GET THE USER'S REQUEST CODE. SSA IF THE SIGN-BIT WAS SET, PREPARE ISZ EXIT FOR RETURN TO USER AT P+2. LDA MD10 LDB APRMS JSB CLERR * * RETURN * LDA IRBUF+5 LDB IRBUF+6 JMP EXIT,I HED PARMB CONSTRUCTION ARRAY * (C) HEWLETT-PACKARD CO. 1976 * ICOD1 NOP * * READ S/R * CLA,INA STA RCXMT JSB FILL JMP ICOD1,I SPC 1 ICOD2 NOP * * WRITE S/R * LDA D2 STA RCXMT JSB FILL JMP ICOD2,I SPC 1 ICOD3 NOP * * CONTROL CALL * PICK UP THE CONTROL WORD * LDA PRAMS+2,I STA PONTR,I * ISZ PONTR INCREMENT STORAGE ADDRESS LDA PRAMS+3,I OPTIONAL PARAMETER PRESENT? SZA,RSS JMP ICOD3,I NO EXIT STA PONTR,I AND PUT IN PARMB JMP ICOD3,I SPC 1 ICD10 NOP * * SCHEDULE CALL * JSB NAME * * NOW SET UP TO MOVE OPTIONAL PARAMETERS IN * LDA D5 BUILD LOOP COUNTER CMA,INA STA CONTR LDA APRMS ADA D3 STEP TO DEF TO 1ST ONE LOOP3 LDB A,I GET IT'S ADDRESS SZB,RSS IS IT THERE? JMP ICD10,I NO-EXIT LDB B,I STB PONTR,I ISZ PONTR INA ISZ CONTR JMP LOOP3 JMP ICD10,I ICD11 NOP * * TIME-NO PARAMETERS * LDA D2 STA IRBUF+5 JMP ICD11,I SPC 5 ICD12 NOP * JSB NAME GET PROGRAM NAME LDA APRMS LOOK AT "IOFST" PRAM.IF - THIS I S ADA D5 INITIAL OFFSET VERSION OF CALL LDA A,I LDA A,I * SSA,RSS WHICH ONE IS IT? JMP ABSRT ABSOLUTE START TIME! LDA D3 INITIAL OFFSET! CMA,INA STA CONTR SET UP COUNTER JMP STRT4 AND GO PROCESS ABSRT LDA D6 SET UP COUNTER CMA,INA STA CONTR * STRT4 LDA APRMS ADA D3 LOOP4 LDB A,I GET ADDRESS OF DEF THEN DEF LDB B,I THE PARAMETER IT'SELF STB PONTR,I & PUT IN PARMB ISZ PONTR INA INCREMENT POINTERS ISZ CONTR & IF NOT DONE DO IT AGAIN JMP LOOP4 JMP ICD12,I SPC 1 ICD13 NOP * * STATUS-PICK UP CONTROL WORD * LDA PRAMS+2,I STA PONTR,I JMP ICD13,I SKP * LOCAL EXEC-CALL EXECUTION ARRAY * EXSR NOP JSB EXEC DEF NOP DEFS REP 8 NOP SEZ ANY EXEC-DETECTED ERRORS? JMP MSERR YES. GO TO PROCESS. DST SAVEA SAVE FOR RETURN TO USER. LDA PRAMS+1,I GET THE USER'S REQUEST CODE. SSA IF THE SIGN-BIT WAS SET, ISZ EXIT SET FOR RETURN TO USER AT P+2. JMP EXSR,I RETURN TO THE CALLER. * MSERR DST MSG4 SAVE THE ASCII ERROR CODES. LDB D2 SET FLAG TO RETURN THE ERROR CODE. RSS BYPASS THE 'ERR' ENTRY POINT. * ERR NOP STB SAVEB SAVE ERROR CODE LDA PRAMS+1,I RETURN CONTROL TO USER IF SSA ICODE SIGN BIT SET JMP ERR1 * * OUTPUT MESSAGE TO CONSOLE AND TERMINATE USER * 1 IMPLIES ICODE ERROR-RQ ERROR * 2 IMPLIES SATELLITE RETURNED ERROR * 3 IMPLIES DATA LENGTH ERROR * GET PROGRAM NAME * LDB MESGA LDA SAVEB ADA M1 ADA A ADB A * * CALCULATE ABORTION ADDRESS * LDA PRMS# GET ADDRESS OF USERS JSB ADA D3 CMA,INA ADA EXIT * SKP * OUTPUT ERROR MESSAGE & TERMINATE * JSB D65AB  * * A REGISTER = JSB ADDRESS * B REGISTER = ADDRESS OF MESSAGE BUFFER * ERR1 LDA MESGA LDB SAVEB ADB M1 ADB B ADA B DLD A,I JMP EXIT,I * SPC 2 * * BUILD PARAMETERS FOR 'D65MS' * STUP NOP MASTER CALL SETUP S/R LDA D2 PREPARE FOR REQUEST-ONLY. LDB RCXMT IF THIS IS A REQUEST & DATA CALL, SZB,RSS THEN SKIP; ELSE, STA RCXMT SET REQUEST CODE FOR WRITE. BLF POSITION DRIVER MODE RBL,RBL TO . LDA IRBUF+24 GET THE LOGICAL UNIT NUMBER. IOR MSK2 INCLUDE THE ERROR-RETURN FLAG, IOR B AND THE DRIVER MODE. SZB IF THIS IS A REQUEST & DATA CALL, IOR ZBIT THEN SET THE DOUBLE BUFFER BIT(#12). STA CONWD SAVE THE CONFIGURED CONTROL WORD. LDA PRMS# GET ADDRESS OF USER'S JSB ADA D3 CMA,INA ADA EXIT STA TEMP AND SAVE AS ERROR-REPORT ADDRESS. JMP STUP,I RETURN TO MAKE THE CALL TO D65MS. * SKP CLERR NOP STA CONTR SAVE LOOP COUNTER STB PRMSA SAVE DESTINATION POINTER CLB LOOP6 STB PRMSA,I CLEAR A WORD ISZ PRMSA ISZ CONTR JMP LOOP6 CONTINUE TIL DONE JMP CLERR,I AND RETURN SPC 1 LEXEC LDA MD8 LDB DEFA STB ADEF JSB CLERR * * DON'T LET LOCAL SMESG THROUGH * LDB D1 LDA PRAMS+1,I AND MSK0 CPA D14 JSB ERR IOR MSK2 STA RCODE * LDA APRMS ADA D1 STA PRMSA * LDA MD8 STA CONTR LDA DEFRC CLB,RSS * LOOP7 LDA PRMSA,I SZA,RSS DONE IF PARAMETER IS ZERO JMP DONE7 STA ADEF,I INB ISZ PRMSA ISZ ADEF ISZ CONTR JMP LOOP7 * DONE7 INB ADB DEFB STB DEF LDA ERRIN GET ERROR-DETECTED INSTRUCTION(CCE,RSS). STA B,JI STORE IN ERROR RETURN LOCATION. INB POINT TO NORMAL RETURN LOCATION. LDA ERRIN+1 GET NORMAL-RETURN INSTRUCTION (CLE). STA B,I STORE IN NORMAL-RETURN LOCATION. * JSB EXSR * DLD SAVEA GET FOR RETURN TO USER. JMP EXIT,I ERRIN CCE,RSS CLE DEFRC DEF RCODE RCODE NOP * FILL NOP LDA APRMS GET DATA BUFFER ADDRESS ADA D3 LDB A,I STB BUFF INA LDB A,I GET DATA BUFFER LENGTH LDB B,I STB IRBUF+8 SSB CHARACTERS? JMP CHAR2 YES STB IRBUF+11 NO WORDS SAVE # TO USE AT OTHER STB BUFF+1 END JMP FILL3 THEN CONTINUE * CHAR2 CMB,INB CONVERT TO + CHARS SLB & ROUND UP INB THEN CONVERT TO WORDS BRS STB IRBUF+11 STB BUFF+1 FILL3 LDA B LDB D3 SZA,RSS JSB ERR ADA MD513 SSA,RSS JSB ERR * * INSERT CONWD & OPTIONAL WORDS * (IF PRESENT) IN PARMB * LDA PRAMS+2,I STA PONTR,I ISZ PONTR ISZ PONTR * LDA PRAMS+5 SZA,RSS JMP FILL,I LDA A,I STA PONTR,I ISZ PONTR * LDA PRAMS+6 SZA,RSS JMP FILL,I LDA A,I STA PONTR,I ISZ PONTR JMP FILL,I SPC 5 NAME NOP LDA PRAMS+2 LDB A,I GET 1ST 2 CHARS OF PROG STB PONTR,I NAME & PUT IN PARMB ISZ PONTR INA STEP TO NEXT TWO * LDB A,I STB PONTR,I AND DO IT AGAIN ISZ PONTR INA * LDB A,I THEN AGAIN STB PONTR,I ISZ PONTR JMP NAME,I SPC 5 IPODX NOP * * DUMMY S/R USED FOR NULL POSTPROCESSES * JMP IPODX,I SPC 5 IPD11 NOP * * TIME RETURN TIME VALUES * LDA IRBFA ADA D7 STA AIRBF GET ADDRESS OF RETURNED TIME * LDA D5 CMA,,INA BUILD COUNTER STA CONTR * LDA APRMS GET DEF TO BSS ADA D2 LDA A,I * LOOP5 LDB AIRBF,I STB A,I INA ISZ AIRBF GET A WORD & RETURN IT ISZ CONTR INCREMENT POINTERS JMP LOOP5 & DO IT AGAIN IF NEEDED JMP IPD11,I SPC 5 IPD13 NOP * * STATUS RETURN TWO STATUS WORDS * LDA APRMS ADA D3 LDA A,I GET 1ST STATUS WORD LDB IRBUF+7 STB A,I AND RETURN IT TO USER * LDA APRMS ADA D4 GET 2ND WORD LDB A,I SZB,RSS JMP IPD13,I LDB IRBUF+8 LDA A,I STB A,I * JMP IPD13,I SPC 5 HED CONSTANTS AND STORAGE * (C) HEWLETT-PACKARD CO. 1976 * SUBAD DEF SUBS-1 SUBS DEF ICOD1 DEF ICOD2 DEF ICOD3 DEF ERR DEF ERR DEF ERR DEF ERR DEF ERR DEF ERR DEF ICD10 DEF ICD11 DEF ICD12 DEF ICD13 * * PUBAD DEF PSUBS-1 PSUBS DEF IPODX DEF IPODX DEF IPODX DEF ERR DEF ERR DEF ERR DEF ERR DEF ERR DEF ERR DEF IPODX DEF IPD11 TIME DEF IPODX DEF IPD13 STATUS * * B77 OCT 77 D1 DEC 1 D2 DEC 2 D3 DEC 3 M1 DEC -1 A EQU 0 B EQU 1 PRMSA NOP APRMS DEF PRAMS MD35 DEC -35 IRBFA DEF IRBUF IRBUF BSS 35 CONTR NOP AIRBF NOP STREM DEC 5 D6 DEC 6 D7 DEC 7 PONTR NOP ICODE NOP D4 DEC 4 D5 DEC 5 IRBFL DEC 35 * SKP * THE FOLLOWING TWO STATEMENTS ARE TOGETHER!! * BUFF DEF TEMP NOP BUFL EQU BUFF+1 DEFA DEF DEFS DEFB DEF DEF MD8 DEC -8 M14 DEC -14 MD513 DEC -513 MD10 DEC -10 D14 DEC 14 RCXMT NOP CONWD NOP ZBIT OCT 10000 DS ASC 1,DS SC ASC 1,SC IO ASC 1,IO RQ ASC 1,RQ IL ASC 1,IL SAVEA NOP SAVEB NOP ERRFG NOP MESGA DEF MSG1 * * DO NOT REARRANGE THE FOLLOWING0.* MESSAGE BUFFERS * MSG1 ASC 2,RQ MSG4 ASC 2, ADEF NOP MSK0 OCT 77777 TEMP NOP PRMS# NOP MSK2 OCT 100000 END 90   91700-18129 1605 S 0222 DS1/B CCE MODULE: RES              H0102 ASMB,R,L,C HED * - DS1 RESIDENT STORAGE * (C) HEWLETT-PACKARD CO. 1976 * NAM RES,14 91700-16129 REV.A 760130 SPC 1 ENT #BUSY,#FWAM,#GPRN,#GRPM,#LDEF,#MNUM,#MRTH,#MSTO ENT #NULL, #QRN,#RSAX,#RTRY,#SAVM,#SBIT,#SRPM,#ST00 ENT #ST01,#ST02,#ST03,#ST04,#ST05,#ST06,#ST07,#ST08 ENT #ST09,#ST10,#SVTO,#TBRN,#WAIT,#RXCL,#QCLM,#QLOG ENT #NCLR,#SCLR,#SWRD,#PLOG,#PRMY,#RFSZ,OVFLA EXT $ALC,$CGRN,$LIBR,$LIBX,$RTN,.ENTP * NAME: RES * SOURCE: 91700-18129 * RELOC: 91700-16129 * PGMR: C.C.H. [ 01/30/76 ] * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * RES IS A CORE-RESIDENT SYSTEM LIBRARY MODULE, USED BY THE * DS1 (DISTRIBUTED SYSTEMS) SOFTWARE PACKAGE, TO PROVIDE * CONTROLLED-ACCESS COMMON STORAGE. ITEMS STORED IN ARE NETWORK * GLOBAL CONSTANTS & VARIOUS LISTS WHICH CONTAIN THE TRANSACTION-BLOCK * RECORDS OF CURRENT TRANSACTIONS-IN-PROCESS ON THE NETWORK. * * #RSAX IS A PRIVILEGED LIBRARY ROUTINE, EMBEDDED IN RES, * WHICH CONTROLS ACCESS TO, AND ALLOWS MAINTENANCE OF, THE * NETWORK'S TRANSACTION-CONTROL-BLOCKS FOR CURRENT REQUESTS. * * #RSAX OPERATION: * 1. ON FIRST ENTRY, VERIFY THAT CALLER IS ELSE, ERROR #1! * A. SAVE I.D. SEGMENT ADDRESS FOR S.A.M. VALIDITY CHECKS. * B. IF LOC'N 1742B(BPA1) =2, THEN OP-SYSTEM USES DMS HARDWARE, * REQUIRING CONFIGURATION OF DMS FIRMWARE MACRO INSTRUCTIONS. * C. IF NON-DMS: OP-SYSTEM IS RTE-II--CLEAR DMS REFERENCES. * D. CLEAR THE 'JSB' TO THE INITIALIZATION ROUTINE. * 2. GET PARAMETERS & CHECK VALIDITY OF SPECIFIED STREAM & LIST. * A. IgF IMPROPER LIST - ERROR #1 --- REJECT! * 3. CHECK MODE OF OPERATION: * A. IF =0, GO TO 7. TO ALLOCATE/DE-ALLOCATE SYSTEM MEMORY. * B. IF =1, GO TO 3. TO ADD NEW ENTRY TO MASTER-REQUEST LIST. * C. IF =2, GO TO 4. TO ADD NEW ENTRY TO A SLAVE-STREAM LIST. * D. IF =3, GO TO 5. TO REMOVE AN ENTRY & RETURN IT TO THE POOL. * E. IF =4, SEARCH FOR BRK. FLAG--IF FOUND, CLEAR&RETURN ENTRY(GO TO 5.) * F. IF =5, SEARCH FOR ENTRY--=0:FOUND;=-4: NOT FOUND (GO TO 5.) * G. IF NONE OF THE ABOVE - ERROR #2 --- REJECT! * 4. CHECK FOR AVAILABLE ENTRY, BEFORE ADDING TO THE MASTER LIST. * A. IF NONE AVAILABLE, CALLER HAS NOT CHECKED AVAILABILITY OF * TABLE-ACCESS RN (#TBRN) BEFORE ENTRY - ERROR #3 --- REJECT! * B. IF ENTRY AVAILABLE, SEARCH BY CLASS NO. FOR OBSOLETE ENTRIES * IN THE MASTER REQUEST LIST. * C. FLAG ALL OBSOLETE MASTER-REQUEST ENTRIES AS BAD, IF THEY * ORIGINATED WITH SAME REQUESTOR (BIT#15 =1 OF WORD#4). * D. LINK THE NEW ENTRY INTO THE MASTER REQUEST LIST. * 4.E. TRANSFER THE CALLER'S DATA INTO THE NEW ENTRY. * F. IF ENTRY POOL NOT DEPLETED, CLEAR TABLE-ACCESS RN & RETURN. * 5. CHECK FOR AVAILABLE ENTRY, BEFORE ADDING TO THE SLAVE-STREAM LIST. * A. IF NONE, #TBRN NOT CHECKED BEFORE ENTRY - ERROR #3 --- REJECT! * B. LINK THE NEW ENTRY INTO THE SPECIFIED SLAVE-STREAM LIST. * C. TRANSFER CALLER'S DATA INTO THE NEW ENTRY. * D. RETURN VIA 3.F.(ABOVE), TO UPDATE STATUS OF TABLE-ACCESS RN. * 6. CHECK LIST SPECIFICATION, BEFORE SEARCHING FOR/CLEARING AN ENTRY. * A. IF IMPROPER LIST SPECIFIED - ERROR #1 --- REJECT! * B. SEARCH FOR ENTRY. IF MODE=4,CHECK BREAK FLAG & CLEAR ENTRY, IF SET. * C. IF MODE=5, RETURN; ELSE, CLEAR ENTRY & RESTORE IT TO ENTRY POOL. * D. RETURN VIA 3.F.(ABOVE), TO UPDATE STATUS OF TABLE-ACCESS RN. * 7. VERIFY CALLER TO BE BEFORE ALLOCATION/DE-ALLOCATION OF S.A.M. * A. IF ST/LS = #FWAM GO TO DE-ALLOCATE SYSTEM AVAILABLE MEMORzY. * B. IF ST/LS # #FWAM REQUEST ALLOCATION OF SYSTEM AVAIL. MEMORY. * C. IF REQUEST GRANTED, STORE BLOCK ADDRESS IN #FWAM, SIZE IN #SAVM. * D. IF REQUEST DENIED, RETURN REASON IN , FOR FURTHER ANALYSIS. * SKP * #RSAX CALLING SEQUENCE: * * JSB #RSAX * DEF *+5 * DEF MODE MODE OF OPERATION (0,1,2,3,4,OR 5). * DEF ST/LS STREAM/LIST, OR ALLOCATE: #WORDS, DE-ALLOCATE: #FWAM * DEF KEY KEYWORD FOR LIST SEARCHES. * DEF BUFAD ADDRESS OF DATA BUFFER FOR NEW ENTRY OR SEARCH. * NORMAL: =0, =ENTRY ADDRESS; ERROR: =-N,=0; * BREAK-FLAG FOUND:=0,= ENTRY ADDR.; NOT FOUND:=0 * * WHERE: * MODE =0 - REQUEST ALLOCATION/DE-ALLOCATION OF SYSTEM MEMORY. * MODE =1 - TO ADD A NEW ENTRY TO THE MASTER REQUEST LIST. * MODE =2 - TO ADD A NEW ENTRY TO A SLAVE-STREAM LIST. * MODE =3 - TO REMOVE AN ENTRY FROM A LIST & RETURN IT TO THE POOL. * MODE =4 - SEARCH FOR SLAVE-STRM. BREAK FLAG & CLEAR ENTRY IF SET. * MODE =5 - SEARCH FOR A MASTER OR SLAVE ENTRY. * * ST/LS - MODE =0: ALLOCATE NUMBER OF WORDS SPEC'D. IN ST/LS. * ST/LS - MODE =0: IF ST/LS =(#FWAM), RETURN SYSTEM MEMORY. * ST/LS - MODE=1-5: DUAL-BYTE CODE WORD WHICH IDENTIFIES THE LIST * WHICH IS TO BE MODIFIED. THE UPPER BYTE CONTAINS * THE SLAVE-STREAM IDENTITY (0-12B); THE LOWER BYTE * CONTAINS THE LIST-TYPE IDENTITY (1=MASTER,2=SLAVE): * * LIST IDENTIFICATION STREAM/LIST CODE WORD * ----------------------- --/-- ------- * MASTER REQUEST 00/01 000001B * SLAVE-STREAM 0 REQUEST 00/02 000002B * SLAVE-STREAM 1 REQUEST 01/02 000402B * SLAVE-STREAM 2 REQUEST 02/02 001002B * SLAVE-STREAM 3 REQUEҡST 03/02 001402B * SLAVE-STREAM 4 REQUEST 04/02 002002B * SLAVE-STREAM 5 REQUEST 05/02 002402B * SLAVE-STREAM 6 REQUEST 06/02 003002B * SLAVE-STREAM 7 REQUEST 07/02 003402B * SLAVE-STREAM 8 REQUEST 10/02 004002B * SLAVE-STREAM 9 REQUEST 11/02 004402B * SLAVE-STREAM 10 REQUEST 12/02 005002B * * KEY - UNIQUE KEYWORD FOR LIST SEARCHES. IT MUST BE SPECIFIED * TO BE THE MASTER-REQUESTOR'S CLASS NO., WHEN ADDING TO, * DELETING FROM, OR SEARCHING MASTER LIST (MODE=1,3,5). * 'KEY' MUST BE SUPPLIED AS A DUMMY PARAMETER FOR MODE=2. * IT MUST CONTAIN THE SELECT CODE OF THE COMMUNICATION * LINE I/O CARD (IN THE UPPER BYTE), TO SEARCH FOR OR * DELETE SLAVE-STREAM ENTRIES (MODE=3,4,5; ST/LS=XX/02). * [OPTIONAL (NOT USED) WHEN MODE =0] * * BUFAD - ADDRESS OF 3-WORD DATA BUFFER(MODE=1,2), WITH ELEMENTS * TO BE ADDED TO A LIST ENTRY; OR ADDRESS OF 2-WORD * TIME-TAG TO SEARCH/CLEAR SLAVE ENTRIES (MODE=3,4,5). * [OPTIONAL: CLEAR/SEARCH-FOR MASTER ENTRY (MODE=3,5)]. * [OPTIONAL (NOT USED) WHEN MODE =0] * SKP * DATA BUFFER FORMAT FOR MASTER-LIST ENTRIES: * * WORD #1 - SELECT CODE OF COMM. LINE DEVICE (BITS#13-8) * REQUEST TIMEOUT COUNT (BITS#7-0). * * WORD #2 - MASTER CLASS NUMBER (BITS#12-0). * * WORD #3 - REQUESTOR'S ID SEG. ADDRESS (BITS#14-0). * * DATA BUFFER FORMAT FOR SLAVE-STREAM LIST ENTRIES: * * WORD #1 - SELECT CODE OF COMM. LINE DEVICE (BITS#13-8) * REQUEST TIMEOUT COUNT (BITS#7-0). * * b WORD #2 - TRANSACTION TIME-TAG #1 (LEAST). * * WORD #3 - TRANSACTION TIME-TAG #2 (MOST). * * DATA BUFFER FORMAT FOR SLAVE-LIST CLEARING/BREAK-FLAG CHECK: * * WORD #1 - TRANSACTION TIME-TAG #1 (LEAST). * * WORD #2 - TRANSACTION TIME-TAG #2 (MOST). * * LIST FORMATS: * * 'RES' SYSTEM AVAILABLE MEMORY * ------------------------------- ------------------------- * * #MRTH < ADDR.=1RST MASTER-LIST ENTRY>--- * * * * * #ST00 --- * . * . < TRANSACTION TIME-TAG#1 > * . < TRANSACTION TIME-TAG#2 > * . * . * #STXX < ******* FORMAT SAME ******* >---< **** FORMAT SAME ***** > * < ********* FOR ALL ********* > < ******** FOR ********* > * < ****** SLAVE STREAMS ****** > < ******** ALL ********* > * < *** SLAVE STREAMS **** > * * WHERE: A(#15) = ABORT O.K. FOR MONITOR; B(#15) = BAD CONTENTS; * * SCODE(#13-#8) = COMM. LINE DEVICE'S SELECT CODE; * * I(#15) = I/O COMPLETION FLAG X = NOT USED [RESERVED!] * * !(#15) = MONITOR BREAK FLAG (TRANSACTION WAS INTERRUPTED). * * D(#14) = REQUEST AND DATA TRANSACTION * * *NOTE: 0 IN LIST HEAD OR FIRST WORD OF ENTRY SIGNALS END OF LIST. SKP **************************************************************************** * - * * #SBIT IS A SPECIAL SUBROUTINE TO ALLOW THE COMMUNICATION DRIVER * * TO SET THE I/O COMPLETION FLAG (BIT#15) IN WORD #2 OF MASTER * * REQUEST ENTRIES, AND TO SET THE BREAK FLAG (BIT#15) IN WORD #2 * * OF SLAVE-STREAM ENTRIES. * * * * NOTE: #SBIT SHOULD ONLY BE ENTERED FROM TYPE-0 PROGRAMS, SINCE * * ACCESS TO THE RTE PRIVILEGED PROCESSORS ($LIBR, $LIBX) IS * * NOT PROVIDED AT THIS ENTRY POINT. * * * * TYPE-0 PROGRAMS MUST NOT MAKE EXTERNAL REFERENCES TO * * #SBIT, LEST A COPY OF BE INCORRECTLY APPENDED * * TO THE PROGRAM. THE ADDRESS OF THE ENTRY POINT WILL BE * * PROVIDED TO THE DRIVER WHEN ENABLES THE LU. * * * * * * #SBIT CALLING SEQUENCE: * * * * LDA ST/LS = LIST IDENTIFIER (SEE ABOVE). * * LDB KEY = SEARCH KEY * * JSB #SBIT * * =0: NORMAL; ALWAYS =0. * * * * SEARCH KEY IS: * * * * = D-BIT(#14) & SELECT CODE(BITS#13-8)-SLAVE ENTRY * * = CLASS NUMBER (BITS#12-0) - MASTER LIST ENTRY. * * * * #SBIT ERRORS AT RETURN: =-1 - INVALID LIST * * =-4 - ENTRY COULD NOT BE FOUND * * * **************************************************************************** SPC 4 * #RSAX ERROR INDICATIONS: * * ERROR DETECTION WILL RESULT IN A RETURN TO THE CALLER WITH THE * REQUESTED ACTION NOT PERFORMED. WILL BE =0; IS AS FOLLOWS: * * = -1: AN INVALID LIST IDENTIFIER HAS BEEN SPECIFIED OR * FIRST CALLER IS NOT . * * = -2: THE SPECIFIED MODE OF OPERATION IS UN-DEFINED. * * = -3: NO SPACE FOR A NEW ENTRY. THE CALLER DID NOT WAIT FOR * THE TABLE-ACCESS RESOURCE NUMBER (#TBRN) TO BE CLEARED, * PRIOR TO CALLING #RSAX. (THIS SHOULD NOT OCCUR IF ALL * CALLERS ADHERE TO THE RN CONVENTION, PRIOR TO CALLING.) * * = -4: THE ENTRY TO BE CLEARED CANNOT BE LOCATED. * SKP MODE NOP MODE OF OPERATION. ST/LS NOP STREAM/LIST, #WORDS OR FWA: S.A.M. KEY NOP KEYWORD FOR LIST SEARCHES. BUFAD NOP ADDRESS OF NEW ENTRY BUFFER. SUP [SUPPRESS EXTENDED LISTING] #RSAX NOP ENTRY/EXIT JSB $LIBR DECLARE THIS TO BE NOP A PRIVILEGED ROUTINE. JSB .ENTP OBTAIN DIRECT ADDRESSES DEF MODE FOR PARAMETERS & RETURN POINT. * INIT JSB CONFG 1RST ENTRY: CONFIGURE; 'NOP' THEREAFTER. * LDA KEY,I GET THE SEARCH KEY, STA KEY AND SAVE IT LOCALLY. LDA ST/LS,I GET STREAM/LIST OR S.A.M. PARAMETER. STA ST/LS AND SAVE LOCALLY. LDB MODE,I GET THE MODE OF OPERATION, STB MODE AND SAVE IT LOCALLY, ALSO. * DMS1 JSB MAPSV SAVE MAP STATUS: DMS; 'NOP': RTE-II. * dLDB MODE GET THE MODE OF OPERATION (AGAIN?). SZB,RSS IF MODE =0, THEN THIS IS A S.A.M. JMP SAM ALLOCATION/DE-ALLOCATION REQUEST. * JSB LSTCK GO CHECK VALIDITY & SET LIST CODE. SZA LIST IDENTIFIER ACCEPTABLE? [=LSTCD] JMP ERR01 * NO. ERROR #1: INVALID LIST! * LDA MODE GET THE MODE OF OPERATION. CPA P1 IF MODE =1, GO TO ADD A NEW ENTRY JMP ADENT TO THE MASTER-REQUESTOR LIST. CPA P2 IF MODE =2, GO TO ADD A NEW ENTRY JMP ADENT TO THE SLAVE MONITOR'S LIST. CPA P3 IF MODE =3, GO CLEAR AN ENTRY AND JMP MD345 RETURN IT TO THE NULL ENTRY POOL. CPA P4 IF MODE =4, GO EXAMINE THE LIST FOR JMP MD345 AN ENTRY WITH THE BREAK-FLAG SET. CPA P5 IF MODE =5, REQUEST IS ENTRY SEARCH. JMP MD345 GO TO SEARCH FOR THE ENTRY. JMP ERR02 * ERROR #2: INVALID MODE! * SKP * ADD A NEW ENTRY TO THE MASTER OR SLAVE-STREAM LIST. SPC 1 ADENT LDA #NULL GET THE NULL LIST LINK-WORD. CLE,SZA,RSS IS AN ENTRY AVAILABLE FROM THE POOL? JMP ERR03 * NO. ERROR #3: NO ENTRY AVAILABLE! STA ENTAD YES. SAVE ADDRESS OF NEW ENTRY. LDA MODE GET THE OPERATION MODE. CPA P2 IF A SLAVE ENTRY IS TO BE ADDED, JMP SLVAD GO TO PROCESS LIST CHANGES.[=LSTCD] * LDA CLMSK SET UP CLASS NO. MASK FOR STA KYMSK SEARCH OF EXISTING MASTER ENTRIES. LDB P2 SET UP OFFSET TO ALLOW SEARCH FOR STB OFSET SECOND WORD OF MASTER ENTRIES. ADB BUFAD FORM ADDRESS OF THE THIRD DATA ELEMENT GETID LDA B,I GET NEW ID SEG. ADDR. [XLA B,I: DMS] NOP [DUMMY: RTE-II; DEF B,I: DMS] STA IDSEG SAVE FOR BAD-ENTRY PROCESSING. * MLOOK JSB SERCH SEARCH FOR AN OBSOLETE ENTRY. JMP MSTAD END-OF-LIST: GO TO ADD NEW ENTRY. ADB P3 GET ܋THE 3RD WORD (ID SEGMENT ADDRESS) LDA B,I FROM ENTRY WITH SAME CLASS NUMBER. CPA IDSEG PREVIOUS ENTRY FROM SAME REQUESTOR? IOR SIGN YES. ADD BAD-ENTRY FLAG (BIT#15). STA B,I REPLACE THE MODIFIED WORD. JMP MLOOK SEARCH FOR ADDITIONAL BAD ENTRIES. * MSTAD CLB,INB ADD AN ENTRY TO THE MASTER LIST. * SLVAD CLA REMOVE AN ENTRY FROM THE NULL LIST. JSB LNK GO TO PROCESS LIST CHANGES. SZA LIST-PROCESSING ERROR? JMP ERR04 YES--INFORM THE CALLER! * LDA ENTAD = DESTINATION ADDRESS, WHICH INA IS THE SECOND WORD OF THE NEW ENTRY. STA TEMP SAVE FOR DESTINATION-BUFFER POINTER. LDB M3 GET NEGATIVE COUNT = NUMBER OF MOVES. STB TEMP+1 SAVE FOR WORD-MOVE COUNTER. LDB BUFAD GET THE SOURCE ADDRESS. MVW LDA B,I GET THE SOURCE WORD [XLA B,I: DMS] NOP [DUMMY: RTE-II; DEF B,I: DMS] STA TEMP,I STORE IT INTO THE DESTINATION LOCATION. INB ADVANCE THE SOURCE-BUFFER POINTER. ISZ TEMP ADVANCE THE DESTINATION BUFFER POINTER. ISZ TEMP+1 ALL WORDS BEEN MOVED? JMP MVW NO. GO BACK FOR MORE. * GETAD LDB ENTAD =ENTRY ADDRESS FOR NORMAL RETURN. CLA JMP EXIT GO TO PREPARE FOR RETURN TO CALLER. * SKP * ERROR PROCESSING AND EXIT SECTION. SPC 1 ERR04 LDA P4 =4: ENTRY CANNOT BE LOCATED. JMP ERR01+1 ERR03 LDA M3 =3: NEW ENTRY NOT AVAILABLE. CLB =0: ERROR-RETURN. JMP DMS2 RETURN-DIRECTLY-WITH ERROR INDICATION! ERR02 LDA P2 =2: INVALID MODE PARAMETER. JMP ERR01+1 ERR01 CLA,INA =1: INVALID LIST PARAMETER. CMA,INA NEGATE THE ERROR CODE. CLB =0: FOR ERROR RETURN. * EXIT DST TEMP SAVE TEMPORARILY. LDA #NULL IF NO ENTRIES REMAIN AVAILABLE y SZA,RSS IN THE ENTRY POOL, THEN DO NOT JMP RETRN CLEAR THE TABLE-ACCESS RN; ELSE, LDA #TBRN GET THE TABLE-ACCESS RN AND GO TO RTE JSB $CGRN TO MAKE IT AVAILABLE FOR NEXT ACCESS. RETRN DLD TEMP RESTORE THE REGISTER RETURN-DATA. * DMS2 JSB MPRST RESTORE MAPS: DMS; 'NOP': RTE-II. * JSB $LIBX RETURN TO THE CALLER, VIA THE RTE DEF #RSAX PRIVILEGED ROUTINE PROCESSOR. * SPC 3 * * DYNAMIC MAPPING SYSTEM MAP PROCESSING ROUTINES. SPC 1 MAPSV NOP ENTRY/EXIT: STATUS SAVE RSB GET CURRENT MAP STATUS. RBL,RBL POSITION CURRENT STATUS FOR RESTORATION. STB DMSTS SAVE FOR RESTORATION BEFORE EXIT. SJP MAPSV,I ENABLE SYSTEM MAP AND RETURN. * DMSTS NOP DMS MAP-STATUS STORAGE. * SPC 1 MPRST NOP ENTRY/EXIT: MAP RESTORATION. JRS DMSTS MPRST,I RESTORE MAP AND RETURN. * SKP * PROCESS: CLEAR(3), BREAK-FLAG CHECK(4), AND SEARCH(5) MODES. SPC 1 MD345 LDB BUFAD GET ADDRESS OF USER'S TIME-TAGS. * GTAG1 LDA B,I GET TAG #1 [XLA B,I: DMS] NOP [DUMMY: RTE-II; DEF B,I: DMS] INB POINT TO SECOND TIME-TAG. GTAG2 LDB B,I GET TAG #2 [XLB B,I: DMS] NOP [DUMMY: RTE-II; DEF B,I: DMS] DST TTAG SAVE FOR ENTRY COMPARISON. LDB LSTCD GET THE REMOVAL-LIST IDENTIFIER. ADB #LDEF FIND THE TABLE ADDRESS. LDB B,I GET LIST-HEADER ADDRESS FROM TABLE. LDA B,I GET THE LINK-WORD. SZA,RSS EMPTY LIST? JMP ERR01 * YES. ERROR #1: INVALID LIST! * LDA SCMSK GET MASK FOR SEARCH BY SELECT CODE. CPB MDEF IF A MASTER ENTRY IS TO BE CLEARED, LDA CLMSK THEN CLASS NO. MASK MUST BE USED. STA KYMSK SAVE THE MASK FOR USE BY 'SERCH'. CLA,CLE,INA SET: KEY= 2ND WORD OF SLAVE ENTRY. CPB MDEF IF A MASTER ENTRY IS TO BE CLEARED, INA THEN SEARCH KEY IS IN 3RD WORD. STA OFSET SAVE THE ENTRY-OFFSET FOR 'SERCH'. STB TEMP SAVE THE LIST ADDRESS--TEMPORARILY. * CLOOP JSB SERCH SEARCH FOR THE ENTRY TO BE CLEARED. JMP ERR04 * ERROR #4: ENTRY NOT FOUND! STB ENTAD SAVE THE ENTRY ADDRESS. * LDA TEMP GET THE LIST ADDRESS AGAIN. CPA MDEF IF A MASTER ENTRY IS BEING PROCESSED, JMP MODCK GO CHECK FOR SEARCH OR CLEAR OPTION. ADB P2 POINT TO THE SLAVE TIME-TAG WORDS. DLD B,I GET THE ENTRY'S TIME-TAGS. CPA TTAG IF THE FIRST COMPARES, RSS GO TO CHECK THE SECOND; ELSE, JMP CLOOP CONTINUE SEARCHING. CPB TTAG+1 IF THE SECOND COMPARES, RSS GO CLEAR THE ENTRY; ELSE, JMP CLOOP CONTINUE SEARCH FOR VALID ENTRY. * MODCK LDA MODE GET THE MODE OF OPERATION. CPA P3 IF A CLEAR REQUEST IS IN PROCESS, JMP CLREN GO-DIRECTLY-TO CLEAR THE ENTRY. CPA P4 IF A BREAK-FLAG SEARCH IS IN PROCESS, CLB,INB,RSS PREPARE TO EXAMINE ENTRY'S SECOND WORD. JMP GETAD MODE =5: RETURN WITHOUT ALTERING ENTRY. * ADB ENTAD FORM ADDRESS OF SECOND ENTRY-WORD. LDA B,I GET THE CONTENTS OF THE SECOND WORD. CLB PREPARE TO RETURN NO-BREAK INDICATOR. SSA,RSS IS THE BREAK-FLAG (BIT#15) SET? JMP GETAD+1 NO. EXIT WITHOUT FURTHER ACTION. * CLREN LDA LSTCD REMOVE ENTRY FROM SPECIFIED LIST. CLB ADD ENTRY TO NULL LIST. JSB LNK GO TO PROCESS LIST CHANGES. SZA LIST-PROCESSING ERROR? JMP ERR04 YES. GO TO INFORM THE CALLER! JMP GETAD NO. GO TO MAKE NORMAL RETURN. * SPC 10 * * SYSTEM AVAILABLE MEMORY ALLOCATION/DE-ALLOCATION PROCESSOR. SPC 1 SAM LDA XEQT GET CALLER'S I.D. SEGMENT ADDRESS. CPA VALID ^ IF THIS IS CALLING, RSS THEN ALLOW ACCESS; ELSE, JMP ERR01 REPORT IMPROPER ACCESS! * LDA ST/LS GET THE MEMORY-REQUEST SPECIFICATION. CPA #FWAM IF CURRENT FWA S.A.M. SPECIFIED, JMP RTSAM THEN THIS IS A DE-ALLOCATION REQUEST. * STA SZMEM ALLOCATE: SAVE NO. OF WORDS REQUESTED. JSB $ALC REQUEST SYSTEM AVAILABLE MEMORY (S.A.M.) SZMEM DEC 128 IN THE AMOUNT SPECIFIED BY THE CALLER. JMP DMS2 * NEVER AVAILABLE: =-1,=MAX EVER JMP DMS2 * NOT AVAILABLE NOW: =0,=MAX NOW STA #FWAM O.K. SAVE THE ADDRESS OF MEMORY BLOCK. STB #SAVM SAVE THE SIZE OF THE MEMORY BLOCK. JMP DMS2 RETURN WITH S.A.M. SPECIFICATIONS. * RTSAM LDB #SAVM GET THE NUMBER OF WORDS TO RETURN. DST RTN CONFIGURE THE DE-ALLOCATION REQUEST. JSB $RTN RETURN A SYSTEM-AVAILABLE-MEMORY BLOCK; RTN NOP BEGINNING AT SPECIFIED ADDRESS, AND NOP CONTAINING SPECIFIED NO. OF WORDS. CLA CLEAR THE STORAGE LOCATIONS FOR: STA #FWAM MEMORY BLOCK ADDRESS. STA #SAVM MEMORY BLOCK SIZE. JMP DMS2 RETURN TO THE CALLER. * VALID NOP I.D. SEGMENT ADDRESS: LEGAL CALLER. * SKP * SUBROUTINE FOR DRIVER MANIPULATION OF LIST ENTRIES. SPC 1 * ENTER: = ST/LS; = D-BIT(#14) & SELECT CODE (UPPER BYTE)--SLAVE * = CLASS NO (BITS#12-0)--MASTER * RETURN: & =0: NORMAL; =-1, =0: LIST-CODE ERROR. * =-4, =0: NO SUCH ENTRY. * #SBIT NOP ENTRY/EXIT: DRIVER ACCESS TO LISTS. STB KEY SAVE KEYWORD FOR LIST SEARCH. * DMS3 JSB MAPSV SAVE MAP STATUS: DMS; 'NOP': RTE-II. * JSB LSTCK GO CHECK VALIDITY & SET LIST CODE. SZA VALID LIST IDENTIFIER? JMP SERR1 * NO. INFORM CALLER OF ERROR. [=-1] gNLHCLB,CLE,INB SEARCH COMPARISONS ARE TO BE CPB LSTCD PERFORMED ON 2ND WD. OF SLAVE ENTRIES, INB OR ON 3RD WD. OF MASTER ENTRIES. STB OFSET SAVE THE KEYWORD OFFSET. LDA DSMSK GET MASK: D-BIT AND SELECT CODE. CPB LSTCD IF MASTER LIST IS TO BE SEARCHED, LDA CLMSK THEN CLASS NO. MASK MUST BE USED. STA KYMSK SAVE THE MASK FOR USE BY 'SERCH'. JSB SERCH SEARCH FOR THE ENTRY TO BE MODIFIED. JMP SERR4 * ENTRY NOT FOUND--ERROR! INB POINT TO THE FLAG WORD. LDA B,I GET THE WORD TO BE MODIFIED. IOR SIGN INCLUDE THE FLAG (BIT#15). STA B,I REPLACE THE MODIFIED WORD. * CLA,RSS =0 FOR NORMAL RETURN. SERR4 LDA M4 =-4 FOR UNLOCATED ENTRY. SERR1 CLB =0, FOR ALL RETURNS. * DMS4 JSB MPRST RESTORE MAPS: DMS; 'NOP': RTE-II. * JMP #SBIT,I RETURN TO THE USER. * DSMSK OCT 77400 SEARCH MASK: D-BIT & SELECT CODE. M4 DEC -4 * }N SKP * SUBROUTINE TO CHECK LIST PARAMETER & SET LIST CODE. SPC 1 * ENTER: = ST/LS; = DON'T CARE. * RETURN: =0, =LIST CODE: NORMAL; =-1, =?: ERROR. * LSTCK NOP ENTRY/EXIT: LIST ID ROUTINE. CLB LSL 8 ISOLATE STREAM IN & LIST IN . ALF,ALF POSITION LIST TO LOWER BYTE. ADA B FORM THE LIST CODE FOR TABLE INDEXING. STA LSTCD SAVE FOR USE ELSEWHERE. ADA NMAX CHECK FOR SPECIFICATION SSA OF AN UN-DEFINED LIST. CPA NMAX NULL LIST SPECIFIED? CCA,RSS * ERROR: INVALID LIST! =-1. CLA DEFINED LIST: =0 - NORMAL RETURN. LDB LSTCD =LIST CODE, WHEN JMP LSTCK,I RETURNING TO THE CALLER. * LSTCD NOP LIST IDENTIFICATION CODE. * SKP * SUBROUTINE TO SEARCH FOR A SPECIFIC LIST ENTRY. SPC 1 * ENTER: & = DON'T CARE. * =0: SEARCH FROM TOP; =1: CONTINUE SEARCH. * 'KYMSK' SET TO ISOLATE PERTINENT BITS. * 'OFSET' SET = OFFSET INTO ENTRY FOR KEYWORD. * 'LSTCD' SET TO CODE OF LIST TO BE SEARCHED. * * RETURN: P+1 -- ENTRY NOT LOCATED; MEANINGLESS, =0. * P+2 -- ENTRY WAS LOCATED; MEANINGLESS, = ENTRY ADDRESS. * SERCH NOP ENTRY/EXIT:LIST SEARCH ROUTINE. LDB TEMP+1 GET NEXT-ENTRY ADDRESS TO CONTINUE. SEZ IS THIS A REQUEST TO CONTINUE? JMP SLOOP YES. GO TO CONTINUE THE SEARCH. LDA KEY GET THE CALLER'S SEARCH-KEY. AND KYMSK ISOLATE THE FIELD OF INTEREST, STA KEY AND SAVE THE SEARCH KEY. LDB LSTCD GET THE LIST IDENTIFIER. ADB #LDEF FIND THE TABLE ADDRESS. LDB B,I GET TOP-OF-LIST ADDRESS FROM TABLE. * SLOOP LDB B,I GET THE LINK TO THE NEXT ENTRY. SZB,RSS IS THIS THE END OF THE LIST? JMP SERCH,I YES. TAKE "NOT FOUND" EXIT (P+1). * STB TEMP+1 SAVE POINTER TO NEXT ENTRY. ADB OFSET POINT TO KEYWORD LOCATION. LDA B,I GET THE KEYWORD. AND KYMSK ISOLATE THE PERTINENT BITS. LDB TEMP+1 PREPARE TO RETURN WITH ENTRY ADDRESS. CPA KEY DOES IT MATCH THE CALLER'S KEYWORD? CCE,RSS YES. SET FOR CONTINUATION--SKIP. JMP SLOOP NO. CONTINUE SEARCHING. * ISZ SERCH ENTRY FOUND: SET RETURN TO P+2. JMP SERCH,I RETURN TO THE CALLER. * SKP * SUBROUTINE TO PROCESS LIST LINKAGE. SPC 1 * ENTER: = CODE OF REMOVAL LIST; = CODE OF ADDITION LIST. * 'ENTAD' SET TO ADDRESS OF ENTRY TO BE REMOVED. * * RETURN: & =0: NORMAL; =-1, =UNCHANGED: ERROR. * LNK NOP ENTRY/EXIT: LIST LINK ROUTINE. STA TEMP SAVE REMOVAL-LIST CODE, TEMPORARILY. ADA #LDEF FIND THE TABLE ADDRESS. LDA A,I GET ADDRESS: TOP-OF-REMOVAL-LIST. LNK1 STA PNTR SAVE LIST POINTER. LDA A,I GET THE LINK TO THE NEXT ENTRY. SZA,RSS IF THIS IS THE END OF THE LIST, JMP LNKER THEN INFORM THE CALLER OF THE ERROR. CPA ENTAD IS THIS THE ENTRY TO BE REMOVED? RSS YES. SKIP TO REMOVE IT. JMP LNK1 NO. TRY THE NEXT ONE. LDA ENTAD,I GET THE LINK TO THE FOLLOWING ENTRY, STA PNTR,I AND MOVE IT TO THE PREVIOUS ENTRY. * ADB #LDEF FIND THE TABLE ADDRESS. LDB B,I GET ADDRESS: TOP-OF-ADDITION-LIST. LNK2 STB PNTR SAVE LIST POINTER. LDB B,I GET THE LINK TO THE NEXT ENTRY. SZB IS THIS THE END OF THE LIST? JMP LNK2 NO. CONTINUE SEARCHING FOR THE END. STB ENTAD,I YES. MAKE NEW ENTRY = END-OF-LIST. LDA ENTAD GET THE ADDRESS OF THE NEW ENTRY. STA PNTR,I SAVE IN LINK-WORD OF PREVIOUS ENTRY. * CPB TEMP REMOVING ENTRY FROM NULL LIST? [=0] CLA,INA,RSS YES. PREPARE TO ADD TO ACTIVE COUNT. CCA NO. PREPARE TO DECREMENT ACTIVE COUNT. ADA #BUSY COMPUTE THE NEW 'ACTIVE-ENTRY' COUNT, STA #BUSY AND UPDATE THE INDICATOR. CLA,RSS INDICATE NORMAL RETURN, AND SKIP. LNKER CCA =-1: NO ENTRIES IN REMOVAL LIST. JMP LNK,I RETURN IS MADE TO THE CALLER. * SKP * TABLE OF LIST-HEADER ADDRESSES. LIST CODES: STREAM/LIST SPC 1 #LDEF DEF *+1 START-OF-TABLE DEFINITION. DEF #NULL ENTRY-POOL HEADER 00/00 MDEF DEF #MRTH MASTER-REQUEST HEADER 00/01 SDEF DEF #ST00 SLAVE-STREAM 00 HEADER 00/02 DEF #ST01 SLAVE-STREAM 01 HEADER 01/02 DEF #ST02 SLAVE-STREAM 02 HEADER 02/02 DEF #ST03 SLAVE-STREAM 03 HEADER 03/02 DEF #ST04 SLAVE-STREAM 04 HEADER 04/02 DEF #ST05 SLAVE-STREAM 05 HEADER 05/02 DEF #ST06 SLAVE-STREAM 06 HEADER 06/02 DEF #ST07 SLAVE-STREAM 07 HEADER 07/02 DEF #ST08 SLAVE-STREAM 08 HEADER 10/02 DEF #ST09 SLAVE-STREAM 09 HEADER 11/02 DEF #ST10 SLAVE-STREAM 10 HEADER 12/02 * NEW ENTRY: .........DEF #STXX.....SLAVE-STREAM XX HEADER.....XX/02 NMAX ABS #LDEF+1-* LIST CODE VALIDITY-CHECKING CONSTANT. #MNUM ABS NMAX-SDEF NUMBER OF SLAVE-STREAM TYPES. SPC 1 * CONSTANTS AND STORAGE. SPC 1 CLMSK OCT 17777 MASK FOR ISOLATION OF CLASS NUMBER. ENTAD NOP STORAGE FOR ADDRESS OF LIST ENTRY. IDSEG NOP STORAGE FOR MASTER ID SEGMENT ADDRESS. KYMSK NOP KEYWORD ISOLATION MASK. M3 OCT -3 OFSET NOP KEYWORD OFFSET INTO THE ENTRY. P1 DEC 1 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 PNTR NOP STORAGE FOR LIST POINTER. SCMSK OCT 37400 MASK FOR ISOLATION OF SELECT CODE. SIGN OCT 100000 TEMP OCT 0,0 TEMPORARY STORAGE LOCATIONS. TTAG OCT 0,0 TIME-TAG STORAGE, FOR SLAVE _pSEARCH. SPC 1 * GENERAL SYSTEM DATA [ INITIALIZED BY 'LSTEN' ]. SPC 1 #SCLR DEF #TBRN START OF AREA CLEARED BY 'LSTEN'. #FWAM NOP ADDRESS OF SYSTEM AVAIL. MEMORY BLOCK. #SAVM NOP SIZE OF SYSTEM AVAIL. MEMORY BLOCK. #TBRN NOP TABLE-ACCESS RESOURCE NUMBER. #GRPM NOP GENERAL PRE-PROCESS MODULE CLASS NO. #GPRN NOP GENERAL PRE-PROCESS MODULE RN. #SRPM NOP SLAVE PRE-PROCESSOR CLASS NUMBER. #QCLM NOP QUEUE CLEAN-UP MONITOR CLASS NUMBER. #QRN NOP QUIESCENT(RN) OR SHUT-DOWN(0). #BUSY NOP FLAG:0-NORMAL;#0-HOLD-OFF SLAVE REQUESTS #MSTO NOP MASTER REQUEST TIMEOUT VALUE. #SVTO NOP SLAVE REQUEST TIMEOUT VALUE. #RTRY NOP D65MS BUSY-REJECT RETRY COUNT. #WAIT NOP D65MS QUIESCENT WAIT INTERVAL. #SWRD NOP NETWORK-NODE SECURITY CODE. SKP * LIST HEADERS (REMAINDER OF LISTS LOCATED IN SYSTEM AVAILABLE MEMORY). SPC 1 #NULL NOP LIST HEADER: ENTRY POOL. SPC 1 #MRTH NOP MASTER REQUEST LIST. SPC 1 #ST00 OCT 0,0,0 SLAVE-STREAM 00 LIST. SPC 1 #ST01 OCT 0,0,0 SLAVE-STREAM 01 LIST. SPC 1 #ST02 OCT 0,0,0 SLAVE-STREAM 02 LIST. SPC 1 #ST03 OCT 0,0,0 SLAVE-STREAM 03 LIST. SPC 1 #ST04 OCT 0,0,0 SLAVE-STREAM 04 LIST. SPC 1 #ST05 OCT 0,0,0 SLAVE-STREAM 05 LIST. SPC 1 #ST06 OCT 0,0,0 SLAVE-STREAM 06 LIST. SPC 1 #ST07 OCT 0,0,0 SLAVE-STREAM 07 LIST. SPC 1 #ST08 OCT 0,0,0 SLAVE-STREAM 08 LIST. SPC 1 #ST09 OCT 0,0,0 SLAVE-STREAM 09 LIST. SPC 1 #ST10 OCT 0,0,0 SLAVE-STREAM 10 LIST. SPC 1 * NEW ENTRY: ...#STXX OCT 0,0,0..................SLAVE-STREAM XX LIST. SPC 1 * RFA OVERFLOW FILE SPECIFICATIONS: SP!C 1 NOVSC NOP NUMBER OF SECTORS IN FILE. NOP TRACK ADDRESS OF START OF FILE. NOP SECTOR ADDRESS OF START OF FILE. NOP NUMBER OF SECTORS PER TRACK. NOP LOGICAL UNIT OF OVERFLOW FILE CARTRIDGE. #RFSZ NOP MAXIMUM NUMBER OF 'OPEN' RFA FILES. #RXCL NOP 'RFAEX' CLASS NUMBER. * #PLOG NOP PARMB LOGGING PROGRAM'S CLASS NO. #QLOG NOP CLASS NO. FOR SPECIAL Q ERROR LOGGING #PRMY NOP DVR65 FLAG: #0-PRIMARY, =0-SECONDARY. * #NCLR ABS #TBRN-* NEGATIVE NO: LOCATIONS 'LSTEN' CLEARS. * OVFLA DEF NOVSC ADDRESS OF OVERFLOW-FILE SPECIFICATIONS. SKP * INITIALIZATION SECTION: RTE-II/III SETUP & VALIDITY CHECKING. * * NOTE: THIS CODE IS USED ONLY UPON INITIAL ENTRY. * IT IS OVERLAYED BY THE SYSTEM SPECIFICATIONS. * ORG #TBRN CODE RESIDES IN SYSTEM DATA AREA. * CONFG NOP ENTRY/EXIT: INITIALIZATION ROUTINE. LDB XEQT GET THE CALLER'S I.D. SEGMENT ADDRESS. ADB P12 POINT TO THE FIRST NAME SPECIFICATION. LDA B,I GET CHARACTERS 1 & 2. CPA "LS" IF THE CHARACTERS ARE "LS", INB,RSS ADVANCE THE POINTER & CONTINUE; JMP ERR01 ELSE, DENY THE ACCESS! LDA B,I GET CHARACTERS 3 & 4. CPA "TE" IF THE CHARACTERS ARE "TE", INB,RSS ADVANCE THE POINTER & CONTINUE; JMP ERR01 ELSE, DENY THE ACCESS! LDA B,I GET CHARACTER #5. AND DSMSK ISOLATE THE CHARACTER IN UPPER BYTE. CPA "N0" IF THE CHARACTER IS "N0", THEN THIS RSS IS : ACCESS IS LEGAL! JMP ERR01 DENY ILLEGAL ACCESS! LDA XEQT GET I.D. SEGMENT ADDRESS OF . STA VALID SAVE FOR S.A.M. VALIDITY CHECKING. * LDA BPA1 IF THE FIRST WORD OF BASE PAGE CPA P2 IS =2, THEN THIS IS A DMS SYSTEM, RSS AND THE CODE MUST BE MOD"$"IFIED; ELSE, JMP RTE2X CLEAR PATHS TO DMS CODE AND EXIT. * DLD XLABI GET BOTH PARTS OF 'XLA B,I' INSTRUCTION. DST GETID CONFIGURE I.D. SEGMENT INSTRUCTION. DST MVW CONFIGURE MOVE-WORDS INSTRUCTION. DST GTAG1 CONFIGURE FIRST TIME-TAG INSTRUCTION. LDA XLBIN GET MACRO ONLY: 'XLB B,I' INSTRUCTION. DST GTAG2 CONFIGURE SECOND TIME-TAG INSTRUCTION. JMP DMSEX BYPASS PATH-CLEARING INSTRUCTIONS. * RTE2X CLA CLEAR ALL STA DMS1 PATHS TO STA DMS2 THE DMS STA DMS3 MAP-PROCESSING STA DMS4 INSTRUCTIONS. * DMSEX CLA PREVENT FURTHER CALLS TO STA INIT THE INITIALIZATION ROUTINE. JMP CONFG,I RETURN TO NORMAL PROCESSING. * SKP P12 DEC 12 "LS" ASC 1,LS "TE" ASC 1,TE "N0" OCT 47000 XLABI XLA B,I XLBIN XLB B,I * A EQU 0 B EQU 1 BPA1 EQU 1742B XEQT EQU 1717B SPC 1 ORR [ INDICATES SIZE OF ] SPC 1 END $  91700-18130 1605 S 0122 DS1/B CCE MODULE: QUEUE              H0101 ^ASMB,R,L,C HED QUEUE 91700-16130 REV A 760127 * (C) HEWLETT-PACKARD CO. 1976 NAM QUEUE,1,2 91700-16130 REV.A 760127 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT QUEUE EXT EXEC,RNRQ,#GRPM,#QRN,#BUSY,#QCLM,#CLWT IFZ EXT DBUG XIF * * * QUEUE * SOURCE: 91700-18130 * BINARY: 91700-16130 * PRGMR: BOB SHATZER * DATE: 27 JAN 76 * * * * QUEUE IS THE DS-1 PROGRAM WHICH IS SCHEDULED BY A 'REQUEST * COMING' BEING RECEIVED BY DVR65. QUEUE FIRST CHECKS FOR THE * VALIDITY OF THE INTERRUPT. IF IT IS NOT FROM AN INITIALIZED * DVR65 CHANNEL OR IF IT IS A SPURIOUS INTERRUPT FROM ANOTHER * I/O SLOT, THE INTERRUPT WILL BE IGNORED. QUEUE THEN * DETERMINES THE LU AND SELECT CODE OF THE INTERRUPTING * CHANNEL AND DOES A RESOURCE NUMBER LOCK ON THE LINE RN * TO PREVENT CONTENTION PROBLEMS. THE INCOMING REQUEST IS * THEN READ TO GRPM'S I/O CLASS. * * * ERRORS: THE FOLLOWING ERROR CONDITIONS CAN OCCUR: * * 1. INTERRUPT NOT FROM DVR65 - IGNORE IT * 2. INTERRUPT NOT FROM INITIALIZED COMM LINE - CLEAR THE * DRIVER * 3. INTERRUPT FROM NON-EXISTANT LU - IGNORE IT * 4. BAD LRN - CLEAR THE DRIVER AND DOWN THE EQT * 5. GRPM'S CLASS IS BAD - REPORT CATASTROPHIC ERROR * 6. NOT ENOUGH SYS. AVAIL. MEM. - SEND STOP * * ALL ERROR PROCESSING IS DONE BY THE DISC-RESIDENT MODULE * 'QCLM'. QUEUE WRITES THE NECESSARY ERROR INFORMATION TO * QCLM'S I/O CLASS AND GOES ABOUT IT'S BUSINESS. THIS IS DONE * TO INCREASE THRUPUT THROUGH THE QUEUEING MODULES ACND TO * DECREASE THE REQUIREMENTS FOR A LARGE FOREGROUND CORE- * RESIDENT AREA. * SKP QUEUE STB EQT4 SAVE EQT 4 ADDRESS FROM DRIVER LDA B,I GET SCHEDULE PARAMETER IFZ CPA D99 IS IT 99? RSS JMP Q.1 NO - NORMAL SCHEDULE CALL JSB DBUG CALL DBUG DEF *+1 JMP EXIT EXIT WHEN DONE WITH DBUG XIF Q.1 AND B77 IF NORMAL SCHEDULE, PICK UP SELECT CODE STA SCODE AND SAVE IT LOCALLY ALF,ALF ROTATE SELECT CODE TO UPPER BYTE STA CHANL AND SAVE IT IN QCB INB BUMP POINTER TO EQT 5 LDA B,I GET EQT 5 ALF,ALF ROTATE AND B77 AND ISOLATE EQUIP TYPE CPA B65 IS INTERRUPT FROM DVR65? RSS YES JSB ERR0 NO - IGNORE IT ADB D8 INDEX TO EQT 13 ADDRESS LDA B,I GET EQT EXTENSION ADDRESS LDA A,I GET LRN FROM EXTENSION SZA,RSS IS DRIVER INITIALIZED? JSB ERR1 NO - ILLEGAL INTERRUPT STA LRN GOOD RN - SAVE IT * CLB LDA EQTA GET FWA EQT AREA CMA,INA MAKE IT NEGATIVE ADA EQT4 ADD THE ADDRESS OF EQT4 DIV D15 DIVIDE BY 15 TO GET EQT # INA BUMP BY ONE STA EQT# AND SAVE EQT NUMBER * CLB,INB SET UP B AS LU COUNTER LDA DRT GET FWA DRT STA TEMP AND SAVE IN TEMPORARY LOCATION NEXT LDA TEMP,I GET DRT ENTRY AND B77 MASK OFF EQT # CPA EQT# IS THE THE RIGHT ONE? JMP FOUND YES - PROCEED ISZ TEMP NO - GO TRY AGAIN CPB LUMAX ALL LU'S CHECKED? JSB ERR0 YES - IGNORE INTERRUPT INB NO - BUMP LU COUNTER JMP NEXT AND TRY AGAIN * FOUND STB LU FOUND A VALID LU - SAVE IT LDA CHANL GET CHANNEL FROM QCB IOR LU STUFF IN THE LU STA CHANL AND SA$VE IT AWAY LDA #GRPM GET GRPM'S CLASS NUMBER FROM RES STA GRPM AND SAVE IT LOCALLY * JSB RNRQ DO AN RN LOCK ON THE LRN DEF *+4 DEF LGNW LOCK GLOBAL,NO WAIT,NO ABORT DEF LRN DEF EQT4 JSB ERR2 ERROR RETURN * JSB EXEC READ THE REQUEST TO GRPM'S CLASS DEF *+8 DEF D17I DEF LU DEF ZERO DEF D35 DEF LU DEF SCODE DEF GRPM JSB ERR3 HERE IF CLASS READ FAILS * LDA #BUSY GET # OF TCB'S COUNTER SZA ANY ACTIVE TCB'S? JMP EXIT YES - DO NORMAL EXIT JSB RNRQ IF NONE, HANG ON #QRN - THIS IS DEF *+4 A QUIESCENT CONDITION DEF GLCW DEF #QRN DEF EQT4 JSB ERR0 ERROR RETURN EXIT JSB EXEC TERMINATE QUEUE DEF *+2 DEF D6 * SKP * * ERROR PROCESSING SECTION * ERR0 NOP HERE TO GIVE UP AND TERMINATE DST REGS SAVE REGISTERS IN QCB CLA SET QCB CONTROL WORD TO ZERO LDB ERR0 PICK UP ORIGINATION ADDRESS JMP ERRN AND GO TO GENERAL ERROR PROCESSOR * ERR1 NOP HERE TO CLEAR DRIVER DST REGS LDA B10 LDB ERR1 JMP ERRN * ERR2 NOP HERE TO CLEAR AND DOWN EQT DST REGS LDA B30 LDB ERR2 JMP ERRN * ERR3 NOP HERE TO REPORT CATASTROPHIC ERROR DST REGS LDA BIT15 LDB ERR3 * ERRN STA QCB SAVE CONTROL WORD ADB M1 SUBTRACT 1 FROM ERROR ADDRESS STB ERRAD AND SAVE IT IN THE QCB JSB #CLWT WRITE QCB TO QCLM DEF *+6 DEF #QCLM DEF QCB DEF D7 DEF XEQT DEF ZERO NOP ERROR RETURN JMP EXIT AND GO TERMINATE * SKP * * CONSTANTS AND STORAGE * A EQU 0B B EQU 1B LUMAX EQU 1653B DRT EQU 1652B EQTA EQU 1650B XEQT EQU 1717B } * IFZ D99 DEC 99 BSS 30 ** TEMPORARY PATCH AREA FOR DEBUG ** XIF EQT4 NOP TEMP NOP EQT# NOP GRPM NOP B77 OCT 77 B65 OCT 65 D8 DEC 8 LRN NOP D15 DEC 15 M1 DEC -1 LGNW OCT 140002 GLCW OCT 040006 D17I ABS 100000B+17 D35 DEC 35 D6 DEC 6 D7 DEC 7 B10 OCT 10 B30 OCT 30 LU NOP SCODE NOP BIT15 OCT 100000 QCB NOP QCB - DO NOT REORDER THESE SEVEN WORDS ZERO NOP DUMMY PARAMETER NOP DUMMY PARAMETER CHANL NOP REQUESTING LU AND SELECT CODE ERRAD NOP ERROR ADDRESS POINTER REGS NOP REGISTER STORAGE AREA NOP * END QUEUE   91700-18131 1551 S 0122 DS1/B CCE MODULE: FLOAD              H0101 <ASMB,L,R,C HED FLOAD 91700-16131 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM FLOAD,7 91700-16131 REV A 751219 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ********************************************** * *FLOAD SUBROUTINE TO DO FORCED DOWN LOADS * *SOURCE PART #: 91700-18131 REV A * *REL PART # 91700-16131 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 8-23-74 * *MODIFIED BY: JEAN-PIERRE D. BAUDOUIN * *DATE MODIFIED: DEC 1975 * *********************************************** SPC 1 SUP * EXT D65MS,.ENTR,.DFER,D65AB SPC 1 ENT FLOAD SPC 1 A EQU 0 B EQU 1 SPC 1 * * CALLING SEQUENCE * JSB FLOAD * DEF *+4 OR *+5 * DEF PROGRAM FILE NAME * DEF DESTINATION LOGICAL UNIT * DEF ERROR CODE * DEF OPTIONAL 3 WORD MESSAGE BUFFER SPC 2 FNAM NOP FLU NOP FERCD NOP FERMG NOP FLOAD NOP JSB .ENTR DEF FNAM * LDA FLU,I GET THE COMM. LU AND B77 SET FOR REQ ONLY STA FLU * LDA FERMG STA ERMOV SAVE FOR LATTER MOVE LDB FLOAD GET CALLING ADDRESS ADB M5 GET BACK TO ADD WHO CALLED SZA OPTIONAL PRAM SUPPLIED? ADB M1 YES...TAKE IT INTO ACCOUNT STB ERADD SAVE FOR MSTR CALL LDA D8 GET STREAM TYPE STA STRM SAVE STREAM TYPE LDA BT150 SET BITS 0 AND 15 (FOR LO COMMAND) CLB DST FLGWD SET FLAG WORDS JSB .DFER MOVE NAME INTO PARMB DEF FNAME DEF FNAM,I * JSB D65MS CALL MSTER TO SEND REQ DEF *+7 DEF B2 WRITE DEF FLU CONTROL FOR REQ ONLY DEF STRM PARMB DEF D35 LENGTH OF PARMB DEF DUMMY DEF DUMMY JMP LNERR LINE ERROR LDA FNAME GET ERROR RETURN STA FERCD,I AND SAVE FOR USER LDA FERMG SEE IF WE MOVE OPTIONAL NAME SZA,RSS JMP FLOAD,I NO JSB .DFER MOVE NAME ERMOV NOP DEF ERNM JMP FLOAD,I RETURN SPC 3 LNERR DST ERMS SAVE ERROR MESSAGE FROM A & B REG. CPA ASDS IS IT A "DSXX"ERROR ? JMP DSER YES LDB MSER NO, SYSTEM ERROR, ABORT THE USER LDA ERADD GET MESSAGE @ AND ERROR @ JSB D65AB WE DO NOT RETURN FROM THIS JSB * * WE WILL DECODE THE XX PART OF THE ERROR MESSAGE * AND MAP IT AS A NEGATIVE ERROR CODE FOR THE USER * DSER LDA ERMS+1 GET THE XX PART AND B17 GET VALUE OF THE LS DIGIT STA LCHAR SAVE LDA ERMS+1 GET VALUE AGAIN ALF,ALF SWAP CHARACTERS AND B17 GET UPPER CHARATERS VALUE MPY D10 WEIGHT IT ADA LCHAR WE NOW HAVE THE ERROR # CMA,INA MAKE IT <0 ADA DM46 MAP IT STA FERCD,I PASS IT TO THE USER * LDA FERMG IF THE USER WANTS IT WE WILL PASS HIM SZA,RSS THE ERROR MESSAGE JMP FLOAD,I HE DOES NOT WANT IT, RETURN DLD ERMS GET THE MESSAGE DST FERMG,I PASS IT ISZ FERMG ISZ FERMG STEP TO LAST WORD LDA BLNK GET AN ASCII DOUBLE BLANK STA FERMG,I PASS IT JMP FLOAD,I RETURN SPC 3 D8 DEC 8 D10 DEC 10 BT150 OCT 100001 B2 DEC 2 D35 DEC 35 M5 DEC 5 M1 DEC -1 DM46 DEC -46 B77 OCT 77 B17 OCT 17 DUMMY NOP LCHAR NOP MSER DEF ERMS ERMS NOP BLNK ASC 1, ASDS ASC 1,DS ERADD NOP  SPC 1 STRM NOP NOP CLASS # HERE BSS 3 FLGWD NOP NOP FNAME BSS 1 ERNM BSS 2 ASC 1, BSS 24 MAKE THE PARMB 35 WORDS LONG END ܙ  91700-18132 1608 S 0122 DS1/B CCE MODULE: DMESS              H0101 WASMB,L,R,C HED DMESS 91700-16132 REV.A 760216 * (C) HEWLETT-PACKARD CO. 1976 NAM DMESS,7 91700-16132 REV.A 760216 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DMESS EXT D65MS,MESSS,.ENTR * * * DMESS * SOURCE: 91700-18132 * BINARY: 91700-16132 * PRGMR: BOB SHATZER * DATE: 09 DEC 75 * * MODIFIED BY: C.C.H. 02-16-76 * * DMESS IS A UTILITY SUBROUTINE WHICH IS USED TO SEND OPERATOR * COMMANDS TO A REMOTE CPU. * * CALLING SEQUENCE: * * JSB DMESS * DEF *+4 * DEF * DEF * DEF (IN + BYTES) * * * ON RETURN, THE REGISTERS HAVE THE FOLLOWING MEANING: * * = 0 NO RESPONSE FROM REMOTE * < 0 NEGATIVE OF NUMBER OF BYTES IN RESPONSE * = -1 INDICATES AN ILLEGAL REQUEST LENGTH (>19 BYTES) * * DLU NOP DESTINATION LU BUFAA NOP MESSAGE BUFFER BUFLA NOP MESSAGE LENGTH DMESS NOP START OF ROUTINE JSB .ENTR DEF DLU GET PRAMS LDA DLU,I GET REQUESTED LU CCE,SZA,RSS IS IT LOCAL? JMP LOCAL YES - SEND IT LOCALLY RAL,ERA SET SIGN-BIT FOR ERROR RETURN. STA DLU SAVE LU# AND ERROR-FLAG, LOCALLY. LDA D7 REMOTE - GET STREAM TYPE STA PARMB AND PUT IT INTO PARMB LDA BUFLA,I GET REQUEST LENGTH STA LNGH STORE IT INTO PARMB STA BUFL1 AND SAVE IT FOR COUNTER LDA BUFAA GET BUFFER ADDRESS LDB MESSA GET DESTINATION ADDRESS eQ JSB MOVE MOVE BUFFER BUFL1 NOP LENGTH GOES HERE SPC 1 JSB D65MS WRITE REQUEST TO REMOTE DEF *+7 DEF D2 DEF DLU DEF PARMB DEF D35 DEF DUMMY DEF DUMMY JMP MSERR ERROR RETURN POINT LDA LNGH ANY RETURN MESSAGE? SZA,RSS JMP DMESS,I NO RETURN MESSAGE STA BUFL2 SAVE LENGTH AS POSITIVE BYTES. LDA MESSA GET ADDRESS OF MESSAGE TO BE RETURNED LDB BUFAA GET ADDRESS OF USER'S BUFFER. JSB MOVE GO TRANSFER RESPONSE TO USER'S BUFFER. BUFL2 NOP LDA LNGH GET LENGTH OF MESSAGE CMA,INA JMP DMESS,I AND RETURN SPC 2 LOCAL JSB MESSS HERE IF LOCAL MESSAGE DEF *+3 DEF BUFAA,I DEF BUFLA,I JMP DMESS,I AND RETURN * MSERR DST BUFAA,I SAVE ERROR CODES FOR USER'S ANALYSIS. LDA D4 RETURN WITH = -4, AND = -1, CMA,INA,RSS TO INDICATE 4-BYTE ERROR-CODE MESSAGE. * SZERR CLA BUFFER SIZE ERROR - CLEAR A CCB AND SET B TO -1 JMP DMESS,I AND RETURN SPC 2 * * SUBROUTINE TO MOVE BUFFERS * CALLING SEQUENCE * JSB MOVE * DEC +# OF BYTES * A REG=SOURCE ADDRESS * B REG=DESTINATION ADDRESS * MOVE NOP STA MOVEA SAVE SOURCE ADDRESS LDA MOVE,I GET LENGTH SZA,RSS IS LENGTH ZERO? JMP SZERR YES - BUFFER SIZE ERROR ADA MXSIZ ADD MAXIMUM BUFFER SIZE SSA,RSS DID IT OVERFLOW? JMP SZERR YES - BUFFER SIZE ERROR LDA MOVE,I NO - GO MOVE DATA CLE,ERA CONVERT TO WORD LENGTH SEZ ODD? INA YES CMA,INA NEGATE FOR DOWN COUNT STA MOVE,I SAVE FOR DOWN COUNTER MOVE1 LDA MOVEA,I STA B,I INB ISZ MOVEA ISZ MOVE,I DONE? JMP MOVE1 NO...CONTINUE ISZ MOVE JMP MOVE,I AND j RETURN * B EQU 1 DUMMY NOP MOVEA NOP MXSIZ DEC -36 MESSA DEF PARMB+6 D7 DEC 7 D2 DEC 2 D4 DEC 4 D35 DEC 35 PARMB BSS 35 LNGH EQU PARMB+5 * END   91700-18133 1612 S 0122 DS1/B CCE MODULE: DMESG              H0101 QASMB,R,L,C HED DMESG 91700-16133 REV A * (C) HEWLETT PACKARD CO. 1976 NAM DMESG,7 91700-16133 REV A 760318 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. AL L RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ************************************ ****************************** SPC 2 SPC 1 ****************************************************** * *DMESG TELLOP MESSAGE SUBROUTINE * *SOURCE PART # 91700-18133 * *REL PART # 91700-16133 * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 7-30-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: DEC 1975 * ********************************************************* SPC 1 * * LIBRARY SUBROUTINE APPENDED TO RTE USER * PROGRAM FOR SENDING MESSAGES TO SATELLITE STATION * OPERATOR CONSOLE (LU 1). * * CALLING SEQUENCE: * JSB DMESG * DEF *+4 * DEF COMMUNICATION LU * DEF BUFF ER * DEF BUFFER LENGTH * * * SPC 3 ENT DMESG * EXT DEXEC,.ENTR * A EQU 0 * * GET MESSAGE ADDRESS AND LENGTH. * LU NOP BUFAD NOP BUFL NOP DMESG NOP JSB .ENTR GET PRAM ADDRESS DEF LU LDA BUFL,I GET LENGTH CMA,INA SET FOR DOWN COUNTER STA CNT SZA,RSS MAKE SURE NOT ZERO JMP DMESG,I RETURN IF ZERO ADA D37 TEST FOR LENGTH GREATER THAN 37 WORDS SSA JMP DMESG,I RETURN TO ERROR RETURN IF SO * * MOVE MESSAGE TO INX  TERNAL BUFFER. * LDA DFOUT STA TEMP * LOOP LDA BUFAD,I STA TEMP,I ISZ BUFAD ISZ TEMP ISZ CNT JMP LOOP * LDA BUFL,I ADJUST BUFFER LENGTH. ADA B3 STA BUFL * LDA LU,I GET THE COM. LU LDB D2 GET DEXEC CODE RAL,CLE,SLA,ERA IS SIGN BIT SET (STRIP IT) LDB D2I YES, SET FOR NO ABORT CALL TO DEXEC STB CNWD SAVE FOR CALL STA LU SAVE * * SEND THE MESSAGE WITH ID PREFIX. * JSB DEXEC DEF *+6 DEF LU DEF CNWD DEF B1 DEF OUTBF DEF BUFL * JMP DMESG,I RETURN TO CALLER (ERR RTRN IF LU HAD BIT15) ISZ DMESG SET FOR OK RETURN JMP DMESG,I RETURN SPC 2 * * * CONSTANTS AND WORKING STORAGE. * B1 OCT 1 D2 DEC 2 D2I OCT 100002 B3 OCT 3 D37 DEC 37 CNT NOP TEMP NOP DFOUT DEF OUTBF+3 OUTBF ASC 3,=S00: BSS 37 CNWD NOP * SIZE EQU * * END *   91700-18134 1603 S 0122 DS1/B CCE MODULE: DLK65              H0101 4ASMB,R,L,C HED DLK65 - DVR65 FTN4 LINK SUBR * (C) HEWLETT-PACKARD CO. 1976 * NAM DLK65,7 91700-16134 REV A 760113 ENT DLK65 EXT D65CL,.ENTR,D65AB * * NAME: DLK65 * SOURCE: 91700-18134 * RELOC: 91700-16134 * PGMR: D.J.G. (01-13-76) * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * .IRW NOP .ILU NOP .DBUF NOP .DLNT NOP .RQBF NOP .RQLN NOP .MODE NOP DLK65 NOP JSB .ENTR DEF .IRW * LDA .ILU,I GET LU STA NABRT SAVE AS NO-ABORT FLAG RAL,CLE,ERA STRIP SIGN BIT STA .ILU SAVE STRIPPED LU LDB DLK65 SET UP ERROR REPORT ADDRESS ADB DM6 LDA .MODE IF FEWER THAN 7 PRAMS, IT'S GOTTA SZA,RSS BE A MODE 2 CALL. ELSE MODE 0 JMP MODE2 * ADB DM2 (ERROR REPORT ADDRESS) STB ERRAD * LDA .MODE,I SZA MODE MUST BE 0!!! JMP ERR * CLA,INA SET UP CONWD FOR D65CL CALL LDB .IRW,I SLB,RSS SEND DATA? INA YES, SET MODE IN CONWD = 2 ALF,RAL POSITION MODE BITS TO 6-8 RAL IOR .ILU INCLUDE LU # IOR ZBIT SET Z-BIT STA CONWD * JSB D65CL CALL D65CL DEF *+7 DEF .IRW,I DEF CONWD DEF .RQBF,I DEF .RQLN,I DEF .DBUF,I DEF .DLNT,I JMP ERRTN ERROR RETURN * EXIT CLA RE-SET ADDRESSES FOR NEXT CALL STA .MODE JMP DLK65,I RETURN * * SKP * * * MODE-2 REQUESTS * MODE2 STB ERRAD (ERROR REPORT ADDRESS) LDA .RQBF,I GET MODE VALUE  . MUST = 2!!! CPA TWO RSS JMP ERR LDA .ILU SET UP CONWD FOR D65CL CALL STA CONWD * JSB D65CL CALL D65CL DEF *+7 DEF .IRW,I DEF CONWD DEF .DBUF,I DEF .DLNT,I DEF * DUMMY PARAM DEF * DUMMY PARAM JMP ERRTN ERROR RETURN POINT JMP EXIT * * TWO DEC 2 CONWD NOP NABRT NOP NO-ABORT FLAG ZBIT OCT 10000 ERRAD NOP DM6 DEC -6 DM2 DEC -2 * * ERRTN STA EMSG HERE FOR ERROR RETURN STB EMSG+1 LDA NABRT GET NO-ABORT FLAG SSA NO-ABORT FLAG SET? JMP EXIT YES, RETURN TO CALLER ERR LDA ERRAD SET UP ERROR CALL LDB EMSGA TO 'D65AB' JSB D65AB JMP DLK65,I (JUST IN CASE) * EMSGA DEF EMSG EMSG ASC 2, * A EQU 0 B EQU 1 END U   91700-18135 1614 S 0122 DS1/B CCE MODULE: D65MS              H0101 6ASMB,R,L,C HED MASTER REQUEST INTERFACE * (C) HEWLETT-PACKARD CO. 1976* * NAM D65MS,7 91700-16135 REV.A 760331 SPC 1 ENT D65MS SPC 1 EXT .ENTR,#RSAX,$TIME,#MSTO,#QRN,#WAIT EXT EXEC,D65CL,D65AB,DRTEQ,RNRQ,#TBRN,#PLOG * * NAME: D65MS * SOURCE: 91700-18135 * RELOC: 91700-16135 * PGMR: C.C.H. [ 03/31/76 ] * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * D65MS PROVIDES THE MASTER REQUESTOR WITH AN INTERFACE TO THE * COMMUNICATIONS NETWORK, WHICH GUARDS AGAINST CONFLICTING * REQUESTS FROM OTHER USERS WHO MAY ATTEMPT TO GAIN ACCESS TO * THE SAME COMMUNICATION PATH. * * D65MS OPERATION: * 1. GET USER-SUPPLIED PARAMETERS. * A. FORM ERROR-REPORT ADDRESS =JSB D65MS, IF [ERRAD] NOT SUPPLIED. * B. SET ERROR-RETURN FLAG IF CONWD PARAMETER BIT#15 =1. * C. ISOLATE & REMOVE NO-WAIT BIT(#10) & BLIND REQUEST BIT(#9) IN CONWD. * D. ADD MASTER-REQUEST BIT(#9) TO CONTROL WORD. * E. SAVE FLAG WORD WITH ERROR-RETURN BIT(#15), NO-WAIT BIT(#1), * AND BLIND REQUEST BIT(#0). * 2. CHECK <#QRN> IN 'RES': * A. IF IT IS ZERO, THEN DS1 SYSTEM IS SHUT DOWN; ERROR: "DS00". * B. IF IT IS NON-ZERO, THEN VALUE IS A RESOURCE NUMBER, WHICH MUST BE * CHECKED FOR AVAILABILITY. LOCK & CLEAR THE RN, BEFORE PROCEEDING. * C. IF IT IS ALREADY LOCKED, THEN THE SYSTEM HAS BEEN MADE * QUIESCENT--WAIT FOR UN-LOCK BEFORE PROCEEDING. * D. IF IT IS UN-LOCKED, THEN PROCEED WITH THE RN CLEARED. * E. IF #QRN IS NOW =0, THEN SYSTEM HAS BEEN CHANGED FROM QUIESCENT * TO SHUT-DOWN STATE. RETURN WITH ERROR: "DS00". * 3. GET EQT EXTENSION ADDRESS FOR EQT ASSOCIATED WITH SPECIFIED LU. * A. SAVE EQT EXTENSION ADDRESS FOR USE BY 'D65CL'. * 4. IF BLIND REQUEST, THEN NO NEED TO CHECK REPLY LENGTH-GO TO 5.; ELSE, * CHECK FOR MINIMUM LENGTH =35 WORDS; <35: ERROR: "DS06". * 5. GET CLASS NUMBER FROM RTE FOR USE IN RECEIVING REPLY * VIA QUEUE--WAIT IF UNAVAILABLE. * 6. ADD FRIENDLY SATELLITE BIT(#11) TO FIRST WORD OF PARMB. * 7. PUT MASTER CLASS NO. IN WORD #2 OF PARMB, FOR LATER USE * BY QUEUE, IN FORWARDING THE REPLY. * 8. PUT CURRENT SYSTEM TIME IN WORDS #34 & #35 OF PARMB, AND * IN LOCAL STORAGE. TIME-TAG IS USED TO UNIQUELY IDENTIFY * THE REPLY AS THE EXPECTED REPLY. SKP * 9. WAIT FOR AVAILABILITY OF TABLE-ACCESS RN (#TBRN) BEFORE * BUILDING A MASTER REQUESTOR CONTROL TABLE ENTRY; START MASTER TIMER, * UNLESS CONWD BIT#9 =1 (BLIND REQUEST). * 10. GO TO 'D65CL' TO FORWARD THE REQUEST, VIA THE COMM. LINE. * A. IF #PLOG #0, WRITE PARMB TO PARMB LOGGER'S CLASS NO. * 11. IF BLIND REQUEST, RETURN NOW; ELSE, DO A CLASS GET TO AWAIT REPLY. * 12. CHECK THE REPLY: * A. ZERO LENGTH =TIMEOUT (COURTESY OF 'UPLIN'). * B. AT LEAST 35 WORDS (PARMB SIZE) ARE EXPECTED; ELSE, "DS03" ERROR! * C. SAME TIME-TAG MUST BE RETURNED; ELSE, THIS IS A LATE * OR IMPROPER REPLY, AND IS IGNORED: GO TO 11. * D. IF BUSY-REPLY(WORD#1,BIT#13=1) RECEIVED FROM A QUIESCENT * REMOTE, THEN CHECK 'FLAGS' FOR THE NO-WAIT BIT(#1). * E. IF NO-WAIT & ERROR-RETURN BITS SET, THEN RETURN VIA * WITH &="DS08"; ELSE, GO TO 'D65AB' WITH REGISTERS ="DS08". * F. IF NO-WAIT BIT CLEAR, THEN PLACE PROGRAM IN TIME LIST FOR A * PERIOD OF SECONDS, AS SPECIFIED BY <#WAIT> IN 'RES'. * G. AFTER THE DELAY, RE-SUBMIT THE REQUEST (GO TO 2.). * 13. CHECK FOR A REPLY FROM AN ILLEGAL REQUEST; IF ILLEGAL: "DS03" ERROR! * 14. RETURN THE CLASS NUMBER TO THE SYSTEM. * 15. CLEAR THE MASTER REQUESTOR CONTROL TABLE ENTRY. * 16. RETURN TO THE CALLER AT , WITH DVR65 INFO IN &. * * D65MS CALLING SEQUENCE: * * JSB D65MS * DEF *+7 [OR *+8] * DEF RCODE DRIVER REQUEST CODE * DEF CONWD CONTROL WORD/ERROR-RETURN FLAG (BIT#15). * DEF RQBUF REQUEST BUFFER ADDRESS. * DEF RQLEN REQUEST LENGTH. (MINIMUM SIZE =35 WORDS) * DEF DABUF DATA BUFFER ADDRESS OR DUMMY PARAMETER. * DEF DALEN DATA BUFFER LENGTH OR DUMMY PARAMETER. * [DEF ERRAD] [OPTIONAL ADDRESS FOR ERROR-REPORT PRINTOUT.] * RETURN HERE UPON ERROR DETECTION. * NORMAL RETURN HERE, UPON COMPLETION. * * * CONWD DESCRIPTION: * * BIT#15 - ERROR-RETURN FLAG (SEE D65MS ERROR PROCESSING: ITEM #1). * BITS#14,13 - RESERVED FOR USE BY 'RTE'. * BIT#12 - 'Z' BIT (DOUBLE BUFFER, AS DESCRIBED IN RTE MANUAL). * BIT#11 - RESERVED FOR USE BY 'RTE'. * BIT#10 - NO-WAIT (SEE D65MS OPERATION: ITEMS #12.D THRU #12.G). * BIT#9 - BLIND REQUEST: NO REPLY EXPECTED, AT THIS TIME. * BITS#8,7,6 - REQUEST TYPE (MODE): 0 - REQUEST ONLY * 1 - SEND REQUEST & READ DATA * 2 - SEND REQUEST & SEND DATA * 3 - READ OR SEND DATA ONLY * BITS#5-#0 - LOGICAL UNIT NO. OF COMMUNICATION LINE INTERFACE. * * NOTE: BITS #9,10 -AS SPECIFIED BY THE USER- ARE REMOVED BY 'D65MS', * AND BIT #9 (MASTER REQUEST) IS SET, BEFORE CALLING 'D65CL'. SKP * * D65MS ERROR PROCESSING: * * 1. IF SIGN BIT(#15) OF LU PARAMETER IS SET, ASCII ERROR CODES * ARE SUPPLIED TO THE CALLER IN THE & REGISTERS, UPON * RETURN TO THE POINT IN THE CALLING SEQUENCE. * 2. IF THE SIGN BIT IS NOT SET, THEN THE ROUTINE 'D65AB' IS * CALLED TO ABORT THE CALLER'S PROGRAM, AFTER PRINTING AN * ERROR MESSAGE ON THxGE SYSTEM CONSOLE. THE MESSAGE PRINTED * WILL CONTAIN EITHER THE USER-SUPPLIED ERROR ADDRESS (ERRAD), * OR THE ADDRESS OF THE USER'S CALL TO 'D65MS'. * * D65MS ERROR MESSAGES: * * "DS00" - DS1 IS SHUT-DOWN! * * "DS01" - DVR65 DETECTED ERROR (PARITY, ETC.) - FROM 'D65CL'. * * "DS03" - ILLEGAL REPLY - SHORT PARMB. * * "DS04" - LOGICAL UNIT INVALID OR NO CLCT ENTRY. * * "DS05" - MASTER REQUEST TIMEOUT (COURTESY OF 'UPLIN'). * * "DS06" - ILLEGAL REQUEST. * * "DS07" - 'RES' TABLE-ACCESS ERROR. * * "DS08" - BUSY-REJECT FROM REMOTE [NO-WAIT SET OR RETRIES EXHAUSTED]. * * "IOXX" - \ * - RTE SYSTEM DETECTED ERRORS. * "RNXX" - / * * * SKP SUP [SUPPRESS EXTENDED LISTING] RCODA NOP REQUEST CODE ADDRESS. CONWD NOP CONTROL WORD ADDRESS. RQBUF NOP REQUEST BUFFER ADDRESS. RQLEN NOP REQUEST BUFFER LENGTH. DABUF NOP DATA BUFFER ADDRESS OR DUMMY PARAMETER. DALEN NOP DATA BUFFER LENGTH OR DUMMY PARAMETER. ERRAD NOP OPTIONAL ADDRESS OF ERROR-CAUSING CALL. SPC 1 D65MS NOP ENTRY/EXIT JSB .ENTR OBTAIN DIRECT ADDRESSES DEF RCODA FOR PARAMETERS & RETURN POINT. CLB CLEAR CLASS NUMBER STB CLASN FOR ERROR PROCESSOR. LDA ERRAD,I GET OPTIONAL ERROR-REPORT ADDRESS. STB ERRAD CLEAR PARAMETER FOR NEXT CALL. SZA DID USER SUPPLY AN ADDRESS? JMP STORA YES, GO TO SAVE IT. LDA D65MS NO. SET ERROR ADDRESS TO POINT ADA DM9 TO CALL TO 'D65MS'. STORA STA ERRA SAVE FOR POSSIBLE ERROR PROCESSING. * LDA CONWD,I GET THE CONTROL WORD. RAL,CLE,ERA MOVE THE ERROR-RETURN FLAG TO . STA B SAVE IN , TEMPORARILY. AND B3000 ISOLATE NO-WAIT & BLIND REQUEST BITS. SWP EXCHANGE & FOR BOOLEAN OPERATIONS. XOR B h REMOVE NO-WAIT & BLIND REQUEST BITS. IOR B1000 ADD THE MASTER-REQUEST FLAG (BIT#9). STA CONWD SAVE THE COMPLETE CONTROL WORD, LOCALLY. BLF,BLF POSITION NO-WAIT & BLIND REQUEST BITS ERB TO BITS #1,#0; ADD ERROR-RTN: BIT#15. STB FLAGS SAVE THE COMPLETE FLAG WORD. SPC 1 * CHECK FOR LOCAL SYSTEM SHUT-DOWN OR QUIESCENT STATUS. SPC 1 RETRY LDA #QRN GET THE QUIESCENT/SHUT-DOWN RN. SZA,RSS IS THE DS1 SYSTEM SHUT-DOWN? JMP DOWN YES. GO TELL CALLER THE SAD NEWS. SPC 1 * REQUESTS WILL BE FORCED TO WAIT HERE, IF LOCAL SYSTEM HAS BEEN QUIESCED. SPC 1 JSB RNRQ GO TO RTE TO CHECK FOR SYSTEM QUIESCENCE. DEF *+4 DEF LCGW LOCK/CLEAR/WAIT/NO-ABORT DEF #QRN CHECK SYSTEM-QUIESCENCE RESOURCE NUMBER. DEF TEMP DUMMY PARAMETER. JMP PASER * RTE ERROR - PASS CODE TO CALLER * * LDA #QRN IF QUIESCENT STATE HAS BEEN CHANGED SZA,RSS TO SYSTEM SHUT-DOWN STATE, JMP DOWN THEN TELL THE CALLER THE SAD NEWS. * SKP * LOCATE EQT ADDRESS TO GET DEVICE SELECT CODE & EXTENSION ADDRESS. SPC 1 JSB DRTEQ GO TO FIND EQT ADDRESS. DEF *+2 DEF CONWD RETURN INFO FOR THIS LOGICAL UNIT. * CPA M1 IF INVALID LU DETECTED, JMP LUERR * ERROR: "DS04" IS REPORTED. ADB P3 FORM EQT4 ADDRESS FROM EQT FWA IN . LDA B,I GET CONTENTS OF EQT4. AND B77 ISOLATE THE DEVICE SELECT CODE. STA SCODE SAVE FOR INSERTION INTO MRCT. INB POSITION TO EQT5 ADDRESS. LDA B,I GET CONTENTS OF EQT5. AND EQMSK ISOLATE THE EQUIPMENT TYPE-CODE. CPA TYP65 IS THIS LU LINKED TO DVR65? RSS YES. SKIP TO FIND THE EQT EXTENSION. JMP LUERR NO. * ERROR: "DS04" - INVALID LU! ADB P8 COMPUTE ADDRESS OF EQT13. LDB B,I GET A DIRECT RBL,CLE,SLB,ERB ADDRESS FOR THE JMP *-2 EQT EXTENSION. STB EXTAD SAVE FOR USE BY 'D65CL'. SPC 2 * CHECK FOR MINIMUM REPLY LENGTH OF 35 WORDS. SPC 1 LDA FLAGS GET 'FLAGS' FOR BLIND-REQUEST CHECK. SLA IF THIS IS A BLIND-REQUEST, THEN JMP GCLAS NO NEED TO CHECK REPLY LENGTH. LDA RQLEN,I GET REQUEST BUFFER LENGTH. ADA M35 IF NEGATIVE, OR <35 WORDS SSA WERE SPECIFIED, THEN JMP ILRQ THIS IS AN ILLEGAL REQUEST! SPC 2 * REQUEST A CLASS NUMBER ALLOCATION FROM RTE. SPC 1 GCLAS LDA BIT13 INITIALIZE CLASS NUMBER STA CLASN FOR NON-RELEASE USAGE. JSB EXEC GO TO RTE FOR A CLASS NO.--WAIT FOR IT. DEF *+5 DEF CLS19 CLASS CONTROL(QUICK ALLOCATE)-NO ABORT. DEF ZERO LU ='BIT BUCKET' FOR ALLOCATION. DEF ZERO DUMMY PARAMETER FOR ALLOCATION. DEF CLASN CLASS NUMBER STORAGE ADDRESS. JMP PASER * RTE ERROR: MESSAGE IN & * * JSB EXEC GO TO RTE TO COMPLETE DEF *+5 PREVIOUS ALLOCATION REQUEST. DEF CLS21 CLASS GET--NO ABORT. DEF CLASN CLASS NUMBER STORAGE ADDRESS. DEF ZERO DUMMY PARAMETER. DEF ZERO DUMMY PARAMETER. JMP PASER * RTE ERROR: MESSAGE IN & * * SKP * ADD FRIENDLY SATELLITE BIT(#11) TO FIRST WORD OF PARAMETER BUFFER. SPC 1 LDA BIT11 ADD THE LDB RQBUF FRIENDLY SATELLITE BIT(#11) IOR B,I TO THE FIRST WORD (STREAM,ETC.) STA B,I OF THE PARAMETER BUFFER (PARMB). SPC 1 * ADD CLASS NUMBER & LATE-REPLY TIME TAG TO PARMB. SPC 1 LDA CLASN GET MASTER CLASS NUMBER. STA MBUF+1 SAVE FOR MASTER REQUEST TABLE ENTRY. INB POINT TO 2ND WORD (MASTER CLASS NO.) STA B,I SAVE FOR REPLY (USED BY QUEUE). # ADB P32 POINT TO WORD #34 OF PARMB. STB TEMP SAVE TEMPORARILY. DLD $TIME GET CURRENT SYSTEM TIME. DST TEMP,I SAVE IN PARMB AND LOCAL STORAGE DST TAG FOR VALID REPLY RECOGNITION. SPC 1 * BUILD MASTER REQUESTOR LIST-ENTRY IN 'RES'. SPC 1 LDB FLAGS GET BLIND-REQUEST FLAG. LDA SCODE GET COMM. LINE SELECT CODE. ALF,ALF POSITION TO UPPER BYTE. SLB,RSS IF BLIND REQUEST, NO TIMER NEEDED--SKIP. IOR #MSTO INCLUDE TIMEOUT COUNT IN LOWER BYTE. STA MBUF SAVE IN FIRST WORD OF ENTRY BUFFER. LDA XEQT GET I.D. SEG. ADDRESS OF USER'S PROGRAM. STA MBUF+2 SAVE IN THIRD WORD OF ENTRY BUFFER. SPC 1 * WAIT FOR AVAILABILITY OF LIST-ENTRY SPACE IN 'RES'; ADD NEW ENTRY. SPC 1 JSB RNRQ GO TO RTE TO CHECK THE TABLE-ACCESS RN. DEF *+4 DEF LGW LOCK GLOBAL RN/WAIT FOR IT/NO ABORT. DEF #TBRN TABLE-ACCESS SPACE-AVAILABLE RN. DEF TEMP DUMMY PARAMETER. JMP PASER * RTE ERROR - PASS ERROR CODE TO USER * * JSB #RSAX GO TO 'RES' ACCESS ROUTINE. DEF *+5 DEF P1 ADD A MASTER ENTRY. DEF P1 SPECIFY MASTER LIST. DEF CLASN SEARCH FOR OLD ENTRIES, USING CLASS NO. DEF MBUF ADDRESS OF TABLE ENTRY DATA. SZA ANY ERRORS? JMP RESER * ERROR: "DS07" (NOT LIKELY). * SKP * CALL 'D65CL' TO COMMUNICATE VIA THE COMM. LINE. SPC 1 JSB D65CL GO TO COMM. LINE ACCESS ROUTINE. DEF *+8 DEF RCODA,I REQUEST CODE ADDRESS. DEF CONWD CONTROL WORD. DEF RQBUF,I REQUEST BUFFER ADDRESS. DEF RQLEN,I REQUEST BUFFER LENGTH ADDRESS. DEF DABUF,I DATA BUFFER ADDRESS OR DUMMY PARAMETER. DEF DALEN,I DATA BUFFER LENGTH OR DUMMY PARAMETER. DEF EXTAD ADDRESS OF EQT EXTENSION. JMP PASER * COMM. LINE ERROR: GO PROCESS * DST REG SAVE RETURN INFO FROM DVR65. * JSB PLOG GO TO CHECK FOR PARMB LOGGING REQUEST. * LDA FLAGS IF THIS WAS A SLA BLIND REQUEST (FLAGS BIT#0 =1), JMP BLIND GO TO CLEAN UP; ELSE, SPC 1 * DO A CLASS GET TO WAIT FOR A REPLY FOR THIS TRANSACTION. SPC 1 GETRP JSB EXEC GO TO RTE TO GET THE REPLY. DEF *+5 DEF CLS21 SPECIFY CLASS GET--NO ABORT. DEF CLASN SPECIFY MASTER CLASS NO.--NO RELEASE. DEF RQBUF,I SPECIFY REPLY ADDRESS. DEF RQLEN,I SPECIFY REPLY LENGTH. JMP PASER * RTE ERROR: GO TO PROCESS * SPC 1 * CHECK FOR PROPER REPLY. SPC 1 SZB,RSS CHECK FOR ZERO REPLY LENGTH. JMP MTOER * ZERO LENGTH: GO PROCESS TIMEOUT ERROR * ADB M35 WERE AT LEAST SSB 35 WORDS RETURNED? JMP RPLER * NO. REPLY ERROR "DS03" * LDB RQBUF GET REPLY BUFFER ADDRESS. ADB P33 POINT TO WORD #34. STB TEMP SAVE POINTER TEMPORARILY. DLD TEMP,I GET REPLY WORDS #34 & #35 (TIME TAG). CPA TAG IF FIRST TAG COMPARES, RSS SKIP TO CHECK SECOND; ELSE, JMP GETRP NOT EXPECTED REPLY; TRY AGAIN. CPB TAG+1 IF SECOND TAG COMPARES, RSS THEN THIS IS IT; ELSE, JMP GETRP NOT EXPECTED REPLY; TRY AGAIN. * SKP * CHECK FOR BUSY-REPLY FROM A REMOTE WHICH HAS BEEN MADE QUIESCENT. SPC 1 LDB RQBUF GET REPLY BUFFER ADDRESS. LDA B,I GET THE FIRST WORD OF THE REPLY. AND RPMSK ISOLATE REPLY-BIT(#14) & BUSY-BIT(#13). CPA RPMSK IS THIS A QUIESCENT-REJECT FROM REMOTE? RSS YES. SKIP TO PROCESS THE CONDITION. JMP RPLCK NO. CONTINUE WITH NORMAL PROCESSING. XOR B,I REMOVE THE REPLY & BUSY-REJECT BITS. STA B,I RESTORE THE FIRST WORD OF THE REQUEST. *  LDA FLAGS GET THE FLAG-WORD. AND P2 ISOLATE THE NO-WAIT BIT (#1). SZA CALLER WISH TO WAIT FOR THE REMOTE? JMP BZYER NO. TELL HIM IT'S UN-AVAILABLE. * JSB EXEC GO TO THE RTE 'EXEC' DEF *+6 IN ORDER TO PLACE DEF P12 INTO THE TIME-LIST, DEF ZERO THIS PROGRAM, FOR A PERIOD DEF P2 OF DELAY IN SECONDS, DEF ZERO (ONCE-ONLY) AS DETERMINED BY A DEF #WAIT NEGATIVE VALUE <#WAIT> IN 'RES'. * JSB CLNUP RETURN CLASS# AND CLEAR TABLE ENTRY; JMP RETRY THEN, RE-SUBMIT THE REQUEST. SPC 1 * CHECK FOR A REPLY FROM AN ILLEGAL REQUEST. SPC 1 RPLCK ADB P2 POSITION TO THIRD WORD. LDA B,I GET THE WORD. CPA "IL" IF IT IS ASCII "IL", THEN JMP ILRQ USER MADE AN ILLEGAL REQUEST ("DS06"). BLIND JSB CLNUP GO TO CLEAN UP BEFORE EXITING. SPC 1 * RETURN TO USER AT NORMAL RETURN POINT. SPC 1 DLD REG = DVR65 RETURN INFORMATION. ISZ D65MS SET EXIT POINTER FOR NORMAL RETURN. JMP D65MS,I RETURN TO THE CALLER. * SKP * SUBROUTINE TO RELEASE THE MASTER CLASS AND CLEAR THE MASTER-LIST ENTRY. SPC 1 CLNUP NOP ENTRY/EXIT LDA CLASN GET THE CLASS NUMBER. SZA,RSS IF CLASS NEVER ASSIGNED, JMP CLNUP,I RETURN NOW. * IOR SIGN INCLUDE THE NO-WAIT BIT(#15), STA CLASN AND SAVE FOR RELEASE. CREPT CCA SET THE RELEASE RE-TRY SWITCH STA CEXIT TO =-1. * CLRTN JSB EXEC GO TO RTE TO RELEASE CLASS NUMBER. DEF *+5 DEF CLS21 SPECIFY CLASS GET/NO ABORT DEF CLASN SPECIFY MASTER CLASS/RELEASE/NO WAIT. DEF ZERO DUMMY BUFFER ADDRESS. DEF ZERO DUMMY BUFFER LENGTH. RSS IGNORE ERRORS. * ISZ CEXIT RELEASE PROCESSING COMPLETED? JMP CLRES  YES. GO TO CLEAR THE 'RES' ENTRY. CPA M1 NO. ARE ALL PENDING REQUESTS CLEARED? RSS YES. SKIP TO DE-ALLOCATE THE CLASS. JMP CREPT NO. CONTINUE TO CLEAR REQUESTS. * LDA CLASN GET THE CLASS NUMBER AGAIN. AND CLMSK EXCLUDE THE NO-DE-ALLOCATION BIT(#13). STA CLASN RESTORE THE MODIFIED CLASS WORD. JMP CLRTN RETURN FOR FINAL DE-ALLOCATION. * CLRES LDA CLASN GET THE CLASS WORD. XOR SIGN REMOVE THE NO-WAIT BIT(#15). STA CLASN SAVE VIRGIN CLASS NO. FOR LIST SEARCH. * JSB #RSAX GO TO 'RES' ACCESS ROUTINE. DEF *+5 DEF P3 CLEAR A LIST ENTRY. DEF P1 SPECIFY MASTER LIST. DEF CLASN SEARCH, USING CLASS NUMBER. DEF ZERO DUMMY PARAMETER. JMP CLNUP,I RETURN. * SKP * ERROR PROCESSING SECTION. SPC 1 DOWN LDB "00" SYSTEM IS SHUT-DOWN: "DS00". JMP GETDS RPLER LDB "03" ILLEGAL REPLY/REC.SIZE: "DS03". JMP GETDS LUERR LDB "04" ILLEGAL LU OR NO CLCT ENTRY: "DS04". JMP GETDS MTOER LDB "05" MASTER REQUEST TIMEOUT: "DS05". JMP GETDS ILRQ LDB "06" ILLEGAL REQUEST: "DS06". JMP GETDS RESER LDB "07" 'RES' LIST-ACCESS ERROR: "DS07". JMP GETDS BZYER LDB "08" BUSY-REJECT FROM THE REMOTE: "DS08". * GETDS LDA "DS" GET FIRST HALF OF ERROR MESSAGE "DS". * PASER DST MSGBF SAVE TOTAL ERROR MESSAGE. * JSB CLNUP GO TO CLEAN UP BEFORE EXITING. * LDB MSGAD POINTS TO ERROR MESSAGE ADDRESS. LDA FLAGS GET ERROR-RETURN FLAG. ELA POSITION TO FOR TESTING. LDA ERRA GET THE ERROR-REPORT ADDRESS. SEZ,RSS ABORT OR RETURN TO CALLER? JSB D65AB ABORT! -- NO RETURN. DLD MSGBF GET ERROR CODES AND RETURN TO JMP D65MS,I THE CALLER AT ERROR-RETURN POINT. SPC 1 * IF REQUESTED, WRITE PARMB'S TO THE LOGGER'S CLASS NO. SPC 1 PLOG NOP ENTRY/EXIT: PARMB LOGGING ROUTINE. LDA #PLOG GET REQUEST FLAG FROM . SZA,RSS IS THERE A REQUEST TO LOG PARMB'S? JMP PEXIT NO. COMPLETE MASTER PROCESSING. * STA PCLAS YES. SAVE THE LOGGER'S CLASS LOCALLY. * JSB EXEC WRITE DEF *+8 THE DEF CLS20 PARMB (PARAMETER BUFFER) DEF ZERO TO THE DEF RQBUF,I PARMB LOGGER'S DEF RQLEN,I CLASS NUMBER. DEF XEQT SUPPLY THE I.D. SEGMENT ADDRESS DEF "MS" AND ASCII "MS" SOURCE IDENTIFIER DEF PCLAS AS OPTIONAL PARAMETERS. NOP ** IGNORE ERRORS FOR THIS OPERATION ** * PEXIT DLD REG RESTORE THE REGISTERS. JMP PLOG,I RETURN TO COMPLETE MASTER PROCESSING. * PCLAS NOP LOCAL STORAGE FOR LOGGER'S CLASS NO. * SKP * CONSTANTS AND STORAGE. SPC 1 B EQU 1 B77 OCT 77 B1000 OCT 1000 B3000 OCT 3000 BIT11 OCT 4000 BIT13 OCT 20000 CEXIT NOP CLASS-RELEASE SWITCH STORAGE. CLASN NOP CLASS NUMBER STORAGE. CLMSK OCT 117777 CLASS NUMBER MASK. CLS19 OCT 100023 CLASS CONTROL--NO ABORT. CLS20 OCT 100024 CLASS WRITE/READ--NO ABORT. CLS21 OCT 100025 CLASS GET--NO ABORT. DM9 DEC -9 EQMSK OCT 37400 EQT5 EQUIPMENT TYPE-CODE MASK. FLAGS NOP ER.RTN(#15=1),NWAIT(#1=1),BLIND(#0=1) ERRA NOP ERROR-REPORT ADDRESS. EXTAD NOP EQT-EXTENSION ADDRESS. LCGW OCT 40006 GLOBAL RN LOCK/CLEAR/WAIT/NO-ABORT. LGW OCT 40002 GLOBAL RN LOCK/WAIT/NO ABORT. M1 OCT -1 M35 DEC -35 MBUF OCT 0,0,0 MRCT ENTRY BUFFER. MSGAD DEF *+1 ADDRESS OF ERROR MESSAGE BUFFER. MSGBF ASC 2,DS00 ERROR MESSAGE BUFFER. P1 DEC 1 P2 DEC 2 P3 DEC 3 P8 DEC 8 P12 DEC 12 P32 DEC 32 P33 DEC 33 REG OCT 0,0 DVR65 RETURN REGISTER INFORMATION. RPMSK OCT 60000 BUSY REPLY MASK.{xHFB SCODE NOP DEVICE SELECT CODE STORAGE. SIGN OCT 100000 TAG OCT 0,0 TIME TAG STORAGE FOR REPLY VALIDATION. TEMP NOP TEMPORARY STORAGE. TYP65 OCT 32400 EQUIPMENT TYPE-CODE 65, FOR DVR65. XEQT EQU 1717B USER'S I.D. SEGMENT ADDRESS. ZERO OCT 0 "00" ASC 1,00 "03" ASC 1,03 "04" ASC 1,04 "05" ASC 1,05 "06" ASC 1,06 "07" ASC 1,07 "08" ASC 1,08 "DS" ASC 1,DS "IL" ASC 1,IL "MS" ASC 1,MS SPC 1 END jH  91700-18136 1614 S 0122 DS1/B CCE MODULE: GET              H0101 ASMB,R,L,C HED GET 91700-16136 REV A * (C) HEWLETT-PACKARD CO 1976 NAM GET,7 91700-16136 REV A 760330 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT GET,ACEPT,REJCT,FINIS EXT EXEC EXT .ENTR EXT D65SV EXT CNUMO EXT #ST04 SPC 5 * * GETS * SOURCE:91700-18136 * BINARY:91700-16136 * SHANE DICKEY * JULY 30,1974 * * MODIFIED FOR DS-1B' BY CHUCK WHELAN NOV 14,1975 * SPC 5 * THESE LIBRARY SUBROUTINES ARE USED IN CONJUNCTION * WITH THE PROGRAM TO PROGRAM COMMUNICATION MONITOR * PTOPM TO AFFECT COMMUNICATION WITH SATELLITE PROGRAMS * THEY CONTAIN THE FOUR SLAVE ENTRY POINTS (GET * ACCEPT,AND REJECT AND FINIS) THAT MAY BE ENTERED * BY A PROGRAM IN SLAVE MODE WHICH IS COMMUNICATING * WITH A PROGRAM IN MASTER MODE. * FOR A FURTHER DISCUSSION OF WHAT EACH OF THESE * ENTRY POINTS DOES SEE THE REMARKS UNDER THE SPECIFIC * ENTRY POINT BELOW. * * * THE SUBROUTINES REQUIRE THAT THE USER ENTER * THEM IN A CONTROLLED SEQUENCE. THAT IS TO SAY GET * MUST BE ENTERED FIRST AND * EITHER ACCEPT OR REJECT MUST BE ENTERED SECOND. THIS SEQUENCE IS * REPEATED FOR EACH INCOMING MASTER COMMAND * IT IS NOT DIFFICULT TO IMAGINE THE CONFUSION * THAT RESULTS IF AN ACCEPT REQUEST IS ISSUED ON A REQUEST * NOT YET RECIEVED AND OTHER ANALOGOUS SEQUENCE ERRORS * ALL OF THIS IS KEPT STRAIGHT BY MANIPULATION OF THE VARIABLE * "NEXT" WHICH IS INITIALIZED TO ONE AND MAINTAINED BY THE SUBROUTINE * THE STATES OF THE VARIABLE ARE AS FOLLOWS: * NEXT =1 IMPLIES "GET" CALL REQUIRED NEXT * NEXT=2 IMPLIES ACCEPT/REJ CALL REQUIRED) NEXT * * FINIS MAY BE ISSUED AT ANY TIME HED "GET" PROCESSING * (C) HEWLETT-PACKARD CO 1976 ICLAS NOP IERR NOP IFUN NOP ITAG NOP IL NOP SPC 5 GET NOP SPC 5 * ENTRY HERE SIGNIFIES THAT THE USER SUBROUTINE HAS COMPLETED THE * PROCESSING OF THE LAST CALL AND WISHES TO INTERROGATE HIS I/O * CLASS TO DETERMINE IF THERE ARE ANY MORE REQUESTS * TO BE PROCESSED. IF MORE REQUESTS HAVE BEEN QUED UP ON THE * CLASS THE ONE ON THE TOP OF THE STACK WILL BE PASSED TO THE * USER.IF THERE ARE NO OUTSTANDING REQUESTS THE USER * WILL BE I/O SUSPENDED UNTIL A REQUEST IS RECEIVED * BY THE MONITOR AND PLACED IN THE USER'S I/O CLASS. SPC 5 * SAVE INPUT PARAMETERS JSB .ENTR PICK UP THE PARAMETERS PASSED DEF ICLAS LDB DIL GET SIZE CHECK DEF STB CLEAR LDB GET RETURN ADDR STB EXIT LDB IERR SET UP ERROR PRAM ADDR STB ERRM1 LDA IL ADDRESS SZA,RSS LAST ONE REQ. THERE? JMP ERPAR NO-ERROR CLA,INA LDB ERCOM CPB M47 COMM ERROR OCCURRED LAST XACTION? STA NEXT YES, RESET SEQ INDICATOR CPA NEXT CHECK FOR LEGAL SEQUENCE RSS JMP ERSEQ TAKE ERROR EXIT IF SEQUENCE ERR STA ERCOM * LDA ICLAS,I SET UP THIS USER'S I/O CLASS STA MYCLS JSB EXEC ISSUE GET ON I/O CLASS DEF *+5 DEF D21 DEF MYCLS DEF IRBUF DEF IRBFL * * PASS THE TAG TO THE USER * LDA ITAG SET UP THE TAG FIELD LOCATION STA TAGPR FOR TRANSFER * * MOVE TAG FIELD FROM PARMB TO USER AREA * LDA M10 STA CONTR 10 WORD COUNTER LDA IRBF8 GET1 LDB 0,I STB TAGPR,I STORE WORD IN USER AREA INA ISZ TAGPR BUMP POINTERS ISZ CONTR JMP GET1 ITERATE * GET FUNCTION CODE FROM THE PARMB & USE AS A SWITCH LDA IRBUF+2 GET FUNCTION CODE ^H AND O7 STA FCODE SAVE FUNCTION CODE * SET FUNCTION CODE SO USER WILL KNOW WHAT HE GOT * STA IFUN,I RETURN RECEIVED FUNCTION CODE LDB IRBUF+18 DATA BUFFER LENGTH RAR,SLA SKIP UNLESS READ OR WRITE STB IL,I RETURN LENGTH TO CALLER * RETURN TO THE USER ISZ NEXT SET SEQ INDICATOR * SET IERR FLAG CLB RETURN "NO ERROR" FLAG STB IERR,I TO THE USER STB IL JMP GET,I RETURN TO USER HED "ACCEPT" PROCESSING * (C) HEWLETT-PACKARD CO 1976 AITAG NOP AIERR NOP AIBUF NOP * * ENTRY HERE SIGNIFIES THAT THE LAST REQUEST EXAMINED * WAS AN ACCEPTABLE ONE AND THE REQUEST WAS TO BE HONORED * * THE ACTION TO BE ACCOMPLISHED FOR AN ACCEPT REQUEST * VARIES AS TO THE TYPE OF REQUEST WHICH WAS LAST RECEIVED * ACCEPT REQUESTS ARE PERFORMED FOR ALL FOUR MASTER REQUESTS * EXIT EQU * ACEPT NOP JSB .ENTR PICK UP CALLING PARAMETERS FROM DEF AITAG THE USER * LDB DAIER GET SIZE CHECK LOCATION STB CLEAR * * CHECK FOR ERRORS & MOVE TAG FIELD TO PARMB * DLD AITAG JSB PUTAG * LDA AIBUF SZA STA DATAD SET DATA ADDRESS CLB STB AIERR CLEAR FOR PARAM CK NEXT TIME LDA FCODE RAR,SLA SKIP IF OPEN OR CONTROL(DO REQ ONLY) RSS JMP ACPFG LDB READZ CONWD FOR READ (REQ & WRITE DATA) SSA SKIP IF PREAD LDB WRITZ CONWD FOR WRITE (REQ & READ DATA) LDA AIBUF SZA,RSS WAS DATA BUFFER SPECIFIED JMP ERPAR NO, INSUFFICIENT PARAMS * ACPFG LDA IRBUF+2 SET ACCEPT FLAG IN PARMB IOR BIT14 * * REMAINDER OF THIS SECTION IS SHARED BY "ACEPT" AND "REJCT" * DVR STA IRBUF+2 LDA IRBUF ALF,ELA LDA IRBFL LENGTH=35 WORDS IF FRIENDLY SEZ,RSS TEST FRIENDLY BIT LDA D25 IT'S UNFRIENDLY STA RQLEN LDA IR>BUF IOR BIT14 SET REPLY BIT STA IRBUF LDA IRBUF+24 AND B77 IOR 1 INCLUDE DRIVER REQUEST TYPE STA CONWD CONFIGURE CALL FOR LU & OP TYPE LDA D2 CPB WRITZ IS IT SEND REQ & RCV DATA? CLA,INA YES, OP IS READ STA D2T * JSB D65SV DO CALL TO DRIVER THRU D65SV DEF *+7 DEF D2T DEF CONWD DEF IRBUF DEF RQLEN DATAD DEF DUMMY DEF IRBUF+18 JMP ERRAC COMMUNICATION ERROR ALF,ALF ALF,SLA CHECK FOR STOP RECEIVED JMP ERRAC IT WAS, DATA WAS REJECTED * CLA,INA STA NEXT LDA ERRM1,I RETRN STA ERCOM SAVE RETURN STATUS CLB JMP EXIT,I RETURN FROM ACEPT/REJCT TO CALLER * ERRAC LDA M47 ERROR STATUS= -47 STA ERRM1,I JMP RETRN HED "REJECT" PROCESSING * (C) HEWLETT-PACKARD CO 1976P JITAG NOP JIERR NOP * * ENTRY HERE IS SIMILAR TO THAT FOR THE ACCEPT OPTION * EXCEPT THE REQUEST HAS BEEN DETERMINED NOT TO BE FROM A VALID * SATELLITE AND MUST BE REJECTED. AGAIN THE LOGIC * IS BROKEN UP INTO FOUR SUBCLASSES ACCORDING TO THE TYPE * OF REQUEST BEING REJECTED * REJCT NOP JSB .ENTR PICK UP USER PARAMETERS DEF JITAG LDB DJIER STB CLEAR SET UP SIZE CHECK LOCATION LDB REJCT PICK UP RETURN ADDR STB EXIT * * CHECK FOR ERRORS & MOVE TAG FIELD TO PARMB * DLD JITAG JSB PUTAG * LDA FCODE PICK UP TYPE OF REQUEST RAR,SLA RSS SKIP IF READ OR WRITE FUNCTION JMP REJ4 * LDA IRBUF+24 GET LU IOR BIT6 STA D2T SET UP CONTROL BIT * SEND ENABLE LISTEN REQUEST TO DRIVER JSB EXEC DEF *+3 DEF D3 DEF D2T * REJ4 LDA IRBUF+2 ADA D4 MODIFY CODE * SET THE PARMB REJECT FLAG FOR PTOPM IOR MSK5 CLB DO WRITE REQUEST ONLY w STB JIERR CLEAR FOR PARAM CK NEXT TIME JMP DVR NOW SEND REPLY & EXIT HED "FINISH" PROCESSING * (C) HEWLETT-PACKARD CO 1976 FINIS NOP * GET NAME OF PROGRAM TO BE FINISHED * (THE ONE THAT THIS S-R IS APPENDED TO ) LDA B1717,I GET ID SEGMENT OF CURRENTLY ADA D12 EXECUTING PROGRAM & STEP TO NAME LDB A,I GET FIRST 2 CHARS OF NAME STB IRBUF+5 & MOVE TO PARMB * INA LDB A,I GET 2ND TWO STB IRBUF+6 & SAVE AWAY * INA GET 3RD TWO LDA 0,I AND MSK1 MASK OUT ID SEG STATUS BITS IOR B40 STA IRBUF+7 AND SAVE * CLA,INA STA NEXT RESET SEQUENCE INDICATOR * * SET FUNCTION CODE REPLY FLAG & ACCEPT/REJECT FLAG * LDA HCODE STA IRBUF+2 * * SEND IT TO THE MONITOR * SO THIS PROGRAM CAN BE REMOVED FROM THE ACTIVE LIST * LDA #ST04+1 GET CLASS # FOR PTOPM RAL,CLE,ERA CLEAR OFF SIGN BIT STA PTOP * JSB EXEC SEND THE REQUEST BACK TO PTOPM DEF *+8 DEF D20 DEF ZERO DEF IRBUF DEF IRBFL DEF DUMMY DEF DUMMY DEF PTOP ISZ FINIS JMP FINIS,I RETURN HED UTILITY SUBROUTINES/DATA AREA * (C) HEWLETT-PACKARD CO 1976 * * THIS SUBROUTINE CHECKS FOR CALL ERRORS & RETURNS A MODIFIED * PARMB TO THE SATELLITE MASTER PROGRAM * PUTAG NOP DST TAGPR STORE ADDRS OF TAG FIELD & ERROR FLAG SZB,RSS SKIP IF ERROR DEF WAS PASSED JMP ERPAR OTHERWISE ERROR IN CALL LDA NEXT CHECK SEQUENCE CPA D2 CLA,RSS OK JMP ERSEQ ERROR, NOT TIME FOR ACEPT/REJCT STA ERRM1,I CLEAR ERROR FLAG LDA M10 BUILD A TEN WORD COUNTER STA CONTR LDA IRBF8 BUILD AN ADDRESS IN THE PARMB * PUT1 LDB TAGPR,I PUT A WORD IN PARMB STB A,I INA INCREMENT ISZ TAGPR POINTERS IS/Z CONTR DONE WITH MOVE? JMP PUT1 AND BRANCH BACK IF NOT DONE JMP PUTAG,I ON COMPLETION RETURN SPC 5 ERSEQ LDA M46 -46 = SEQUENCE ERROR RSS ERPAR LDA M40 -40 = INSUFFICIENT PARAMETERS STA ERRM1,I RETURN ERROR TO USER CLB CLEAR PARAM SIZE CHECK WORD STB CLEAR,I JMP EXIT,I AND RETURN SPC 5 ERR1 NOP STA SSA SAVE DRIVER STATUS LDA B1717,I GET THE NAME OF THE PROGRAM ADA D12 THIS S/R IS APPENDED TO LDB A,I FROM THE ID SEGMENT STB COMER+6 & SAVE IN THE OUTPUT * INA BUFFER LDB A,I STB COMER+7 * INA LDB A,I LDA B AND MSK1 STRIP OFF STATUS BITS STA COMER+8 * JSB CNUMO CONVERT STATUS WORD TO ASCII DEF *+3 DEF SSA DEF CNBUF RESULTING ASCII * JSB EXEC OUTPUT DRIVER ERROR DEF *+5 MESSAGE DEF D2 DEF D1 DEF COMER * DEF COMEL JMP ERR1,I & RETURN * * DATA AREA * CONTR NOP FCODE NOP CONWD NOP MYCLS NOP NEXT DEC 1 ERCOM NOP TAGPR DEC 0,0 ERRM1 EQU TAGPR+1 A EQU 0 B EQU 1 M10 DEC -10 D2T NOP BIT6 OCT 100 BIT14 OCT 40000 B40 OCT 40 B77 OCT 77 READZ OCT 10200 REQ & WRITE DATA + Z BIT WRITZ OCT 10100 REQ & READ DATA + Z BIT ZERO OCT 0 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D20 DEC 20 D21 DEC 21 D25 DEC 25 IRBFL DEC 35 RQLEN NOP MSK1 OCT 177400 B1717 OCT 1717 D12 DEC 12 HCODE OCT 40211 MSK5 OCT 100000 O7 OCT 7 PTOP OCT 100004 M46 DEC -46 M47 DEC -47 CLEAR NOP M40 DEC -40 IRBF8 DEF IRBUF+8 DJIER DEF JIERR DAIER DEF AIERR DIL DEF IL * IRBUF EQU * * BSS 35 THIS BUFFER IS ZEROED UNL REP 35 NOP LST CNBUF BSS 3 COMER ASC 7,COMM ERROR - SSA NOP COMEL DEC -16 DUMMY NOP 5*($ END *   91700-18138 1612 S 0222 DS1/B CCE MODULE: SCGN0              H0102 CASMB,L,R,C HED SCGN0 91700-16138 REV.A 760314 * (C) HEWLETT-PACKARD CO. 1976 * NAM SCEGN,3,90 91700-16138 REV.A 760314 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ************************************************* * *SCGN0 MAIN FOR THE SCE GENERATOR-LOADER * *SOURCE PART # 91700-18138 REV A * *REL PART # 91700-16138 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 11-29-74 * *MODIFIED BY: K.HAHN [ C.C.H. ] * *DATE MODIFIED: 09-23-75 [ 03-14-76 ] * *MODIFICATION: ADD CURRENT PAGE LINKING, MAP ALL, AND * COMMENTS. * [ ADD ECHO ON/OFF OPTION TO SUPPRESS COMMAND ECHO, * ADD EXTENDED-NAM PRINTOUT, ADD DVR05 PROCESSING. ] ************************************************** SPC 1 * * * THIS PROGRAM CONTROLS THE SEGMENTS * OF THE RTS GENERATOR * SPC 3 * * DEFINE ENTRY POINTS * ENT .MEM.,.MEM1,.MEM2,.MEM3,.MEM4,.MEM5,.MEM6 ENT ?XFER,ABDCB,ABL1,ABL2,ABRC1,ABREC ENT BPLOC,CKS,COMOR,FWAM,GTOUT,LISTO,LOCC ENT LOUT,LST,LST1,LST2,LST3,LST4,LST5 ENT LSTI,LSTP,LWAM,NAMR.,PACK$,PLK,PLKS ENT PNAMA,PNAME,PRAMS,PRCMD,PRINT,PUNCH,RBTA ENT RBTO,RBIN,SSTBL,UEXFL ENT IBUFR,PLK1,CMDLU,LSDCB ENT RLDCB,SWAPR,FERR,FILCK,PRMT ENT FOPEN,FCRET ENT FTRKA,NSEC,NTRK,SECTK ENT SECA,TRKA,ENDM,DSKLU,SMTLN ENT PARSB,PARSA,FCLOS,ENDLU,COML ENT PARS1,PARS2,PARS3,PARS4,PARS5 ENT PRS21,PRS31,PRS41,PRS51,INDCB ENT STKAD,P:TR,PUSH,NOPRT,LDRCD V ENT SC3CD,S45CD,SWPLC,INDB3 ENT CLSFI,#ECHO ENT PRS22,PRS23,SIZE ENT EFLAG,CPLMG,CPLML SPC 2 * * DEFINE EXTERNALS * EXT LOAD,WRITF,EXEC,CLOSE EXT CREAT,OPEN,READF,CNUMD EXT .ENTR,.DFER EXT PARSE,IFBRK EXT LOCF,APOSN,NBUF9 EXT CPLEN IFN EXT DBUG XIF SPC 2 * * DEFINE A AND B REG * A EQU 0 B EQU 1 SUP SKP * * HERE IS WHERE WE START * SPC 1 START NOP CLA INITIALIZE FOR STA #ECHO ECHO OF COMMANDS. STB CMDLU IFN LDA B,I SEE IF THEY WANT THE DEBUGER CPA B6 RSS YES JMP STRT0 NO JSB DBUG DEF *+1 JSB EXEC TERMINATE...SAVE RESURCES DEF *+4 DEF B6 DEF ZERO DEF B1 JMP START XIF STRT0 JSB SWAP GO GET THE INITIAL SEGMENT DEC 3 JSB A,I GO TO SEGMENT LDA SWPLC GET INDEX TO SEGMENT TABLE STA *+2 JSB SWAP NOP SEGMENT # PLACED HERE JMP A,I UPON RETURN FROM SWAP A REG=START SPC 2 D13 DEC 13 B77 OCT 77 B400 OCT 400 NOPRT NOP ENDLU NOP UP377 OCT 177400 SKP ***** * ** PACK$ ** INSERT A WORD INTO THE ABSOLUTE RECORD BUFFER * CALLING SEQUENCE: * * LDA WORD TO BE PLACED IN RECORD * JSB PACK$ * RETURN * * NOTE: .B. IS NOT ALTERED BY THIS SUBROUTINE ***** PACK$ NOP STA ABL1,I STORE WORD AT NEXT LOCATION ISZ ABL1 IN BUFFER, INCREASE ADDRESS. ADA CKS ADD WORD TO CHECKSUM STA CKS AND RESTORE WORD ISZ ABREC COUNT WORD JMP PACK$,I AND EXIT. SPC 1 * * ABSOLUTE RECORD BUFFER AND POINTERS * ABREC OCT 0 ABRC1 BSS 49 BUFFER FOR ABSOLUTE OUTPUT ABL1 DEF ABREC+2 HOLDS CURRENT BUFFERR ADDRESS ABL2 DEF ABREC+2 .ABR DEF ABREC CKS NOP HOLDS COMP WUTED CHECKSUM SKP ***** * ** PUNCH ** OUTPUT THE RECORD IN THE ABSOLUTE RECORD BUFFER * CALLING SEQUENCE: * * JSB PUNCH * RETURN * * NOTE: THIS SUBROUTINE INSERTS CHECKSUM AND WORDCOUNT BEFORE OUTPUT ***** PUNCH NOP ENTRY/EXIT LDA CKS ADD LOAD ADDRESS TO CHECK-SUM ADA ABREC+1 AND SET RECORD SUM STA ABL1,I IN LAST WORD OF RECORD. LDA ABREC ADD 2 TO RECORD WORDCOUNT ALF,ALF POSITION AS FIRST CHAR. AND STA ABREC SET. ALF,ALF REPOSITION, ADD 3 FOR TOTAL ADA B3 LENGTH AND SET FOR STA PTEMP SAVE LENGTH JSB WRITF GO WRITE THE RECORD DEF *+5 DEF ABDCB DEF FERR DEF ABREC DEF PTEMP JSB IBUFR SET UP OUTPUT JMP PUNCH,I EXIT- SPC 1 B3 OCT 3 PTEMP NOP ***** SKP ***** * ** IBUFR ** INITIALIZE THE ABSOLUTE RECORD BUFFER (ABREC) SO IT MAY * BE FILLED UP FOR LATER OUTPUT * CALLING SEQUENCE: * JSB IBUFR * RETURN * ***** IBUFR NOP CLA ZERO OUT STA ABREC WORD COUNT STA CKS AND CHECKSUM LDA ABL2 INITIALIZE STA ABL1 NEXT WORD POINTER JMP IBUFR,I * SKP **** * * PLK ** * * PLK PUNCHES CORE FROM A TO B IN ABS FORMAT. * IF ALSO LISTS THE PUNCH BOUNDS. A, B SPECIFY THE * FINAL LOAD ADDRESS OF THE DATA. OFFSET IS * ADDED TO GET THE CURRENT CORE LOCATION. * ***** PLK NOP ENTRY: LDA,LDB,JSB. STA PLK1 INB STB PLK3 PL2 LDA MD45 INITIALIZE COUNTER STA PLK2 FOR MAX. BLOCK SIZE OF 45 WORDS. LDA PLK1 STORE LOAD ADDR. OF BLOCK STA ABRC1 IN WORD 2 OF PUNCH BUFFER PL3 LDA PLK1 ADA PLKS ADD OFFSET TO GET ACTUAL ADDRESS IN CORE LDA A,I GET WORD TO PUNCH JSB PACK$ PUT INTO BUFFER ISZ PLK1 ADD 1 TO CURRENT BLOCK ADDR.  LDA PLK1 IF CURRENT BLOCK CPA PLK3 TERMINATED, GO TO JMP PL4 PUNCH LAST BLOCK. ISZ PLK2 INDEX COUNTER. JMP PL3 BUFFER NOT FILLED. JSB PUNCH BUFFER FILLED - PUNCH JMP PL2 FILL NEXT BUFFER. * PL4 JSB PUNCH PUNCH LAST BUFFER - JMP PLK,I EXIT. * PLK1 NOP HOLDS FWA PUNCH AREA PLK2 NOP HOLDS BUFFER INDEX PLK3 NOP HOLDS LWA+1 PUNCH AREA MD45 DEC -45 * SPC 2 SKP * * SEARCH SYSMBOL TABLE FORR MATCH ROUTINE * ***** * ** SSTBL ** SEARCH SYMBOL TABLE * CALLING SEQUENCE * * LDA ADDRESS OF 5 CHAR NAME TO MATCH * JSB SSTBL * RETURN1 SYMBOL NOT FOUND * RETURN2 FOUND, LST1-LST5 POINT TO MATCHED ENTRY * * NOTE: THE NAME INPUT FOR MATCH MUST START ON A WORD BOUNDARY ***** SPC 1 SSTBL NOP STB STEMP SAVE TEMPORARILY JSB LSTI INITIALIZE SYMBOL TABLE SSTB1 JSB LSTP SET LST ENTRY ADDRESSES JMP SSTBL,I END OF TABLE--ERROR RETURN LDB STEMP RETRIEVE ADDRESS OF TARGET MATCH LDA B,I CPA LST1,I CHARS. 1&2 MATCH? INB,RSS JMP SSTB1 NO--GET NEXT ENTRY LDA B,I CPA LST2,I INB,RSS JMP SSTB1 LDA B,I XOR LST3,I AND UP377 CHECK CHAR. 5 SZA JMP SSTB1 * MATCH FOUND -- MAKE SUCCESS RETURN ISZ SSTBL JMP SSTBL,I * * STEMP NOP SKP ***** * ** LSTI / LSTP ** SYMBOL TABLE ACCESSING SUBROUTINES * * PURPOSE: TO SET IN WORDS LST1 - LST5 THE * ADDRESSES OF THE FIVE WORDS IN AN * ENTRY IN THE LST (LOADER SYMBOL TABLE) * * INITIAL SETUP IS MADE BY THE ROUTINE * -LSTI- THIS SECTION INITIALIZES * THE NEGATIVE COUNT OF THE NUMBER * OF ENTRIES IN THE LST AND SETS LST5 POINTING TO * THE "-1"TH ENTRY. SPC 1 * THE SECTION -LSTP- SETS THE FIVE *  ADDRESSES OF THE NEXT LST ENTRY * IN LST1-LST5. IT ALSO INDEXES THE * ENTRY COUNTER. WHEN THE COUNTER = ZERO * EXIT FROM LSTP IS TO P+1 OF THE CALL * AND LST1-LST5 CONTAIN THE ADDRESSES * FOR A NEW ENTRY. IF THE COUNT AFTER * INDEXING IS NOT ZERO, EXIT IS TO * P+2 OF THE CALL. SPC 1 * CALLING SEQUENCE: (P-1) JSB LSTI * (P) JSB LSTP * (P+1) (END OF LST RETURN) * (P+2) (NEXT ENTRY ADDRESSES * SET RETURN) SPC 2 * - INITIALIZER- SPC 1 LSTI NOP JSB BRKCK CHECK IF THEY WANT TO BREAK LDA LST GET NUMBER OF LST ENTRIES - SET CMA NEGATIVE THE VALUE + 1. STA LSTPX STORE CCA SET A =-1 ADA FWAM SET ADDRESS+1 OF WORD 1 OF FIRST STA LST5 LDA FTRKA RESET TRACK ADDRESS STA CTRKA CLA STA CSECA JSB RDSMB GO READ/WRITE SYMBOL TABLE TO DISK JMP LSTI,I EXIT SPC 2 * - PROCESSOR - SPC 1 LSTP NOP LDA LST5 GET ADDRESS FOR NEXT ENTRY ADA ENDM OVERFLOW? SSA JMP LSTP1 NO LDA CSECA YES...GET NEXT BLOCK ADA NSEC CLB SEE IF TRACK SPILL OVER DIV SECTK STB CSECA REMAINDER=SECTOR ADDRESS ADA NTRK GET TO NEXT TRACK ADA CTRKA STA CTRKA SET IN NEW TRACK ADDRESS * ADB NSEC GET LAST+1 SECTOR OF BLOCK CMB,INB ADB SECTK IF END NOT ON SSB,RSS SAME TRACK, JMP *+4 START BLOCK ON CLB NEXT TRACK STB CSECA ISZ CTRKA * JSB RDSMB GO GET SYMBOL TABLE BLOCK CCA RESET TO BEGINING OF BUFFER ADA FWAM STA LST5 LSTP1 LDA LST5 INA STA LST1 INA STA LSl/T2 INA STA LST3 INA STA LST4 INA STA LST5 ISZ LSTPX INDEX ENTRY COUNTER. ISZ LSTP NOT END OF LST - SET P+2 EXIT JMP LSTP,I -EXIT- TO P+1 IF END OF LST. SPC 1 CSECA NOP CTRKA NOP FTRKA NOP NSEC NOP NTRK NOP SECTK NOP ENDM NOP DSKLU NOP SKP * * SUBROUTINE TO READ/WRITE SYMBOL TABLE FROM DISC * CALLING SEQUENCE * JSB RDSMB * RDSMB NOP LDA SECA GET LAST SECTOR ADDRESS LDB TRKA GET LAST TRACK ADDRESS CPA CSECA IS IT EQUAL TO CURRENT? RSS YES JMP WTSMT NO...WRITE AND READ CPB CTRKA HOW ABOUT THE TRACK ADDRESS? JMP RDSMB,I SAME THING...DON'T DO ANYTHING WTSMT JSB EXEC GO WRITE OUT CURRENT DEF *+7 DEF B2 DEF DSKLU DEF FWAM,I DEF SMTLN DEF TRKA DEF SECA JSB EXEC READ IN NEW BLOCK DEF *+7 DEF B1 DEF DSKLU DEF FWAM,I DEF SMTLN DEF CTRKA DEF CSECA LDA CTRKA STA TRKA LDA CSECA STA SECA RESET TRACK SECTOR ADDRESS JMP RDSMB,I AND RETURN SPC 1 TRKA NOP SECA NOP SMTLN NOP SKP * * ROUTINE TO HANDLE THE "PRCMD" JSB FROM THE GENERATOR * PRCMD NOP JSB SWAP DEC 1 LOAD IN LOADER JSB LOAD GO TO IT ("PRCMD" IN SEGMENT) RSS ERROR RETURN ISZ PRCMD NORMAL RETURN JSB SWAP ROLL BACK THE GENERATOR SWPLC NOP JMP PRCMD,I AND GIVE CONTROL BACK SPC 4 * * ROUTINE TO SWAP SEGMENTS * CALLING SEQUENCE * JSB SWAP * DEC SEG # 0=GENERATOR 1=LOADR * A AND B REG SAVED * SWAP NOP LDA SWAP,I GET SEG NAME MPY B3 ADA SGNMA STA SWAPA JSB EXEC ROLL IN SEGMENT DEF *+3 DEF D8 SWAPA NOP SWAPR ISZ SWAP GET RETURN ADDRESS JMP SWAP,I AND RETURN SPC 1 ABREG BSS 2 * * THE FOLLOWING ORDER MUST NOT BE CHANGED * SGNMA DEF *+1 ASC 3,SCGN1 RTC-B GENERATOR SEGMENT ASC 3,SCGN2 LOADER SEGMENT ASC 3,SCGN3 OPERATOR INTERFACE LOADER SEGMENT ASC 3,SCGN4 START UP SEGEMENT ASC 3,SCGN5 SCE3 GENERATOR SEGMENT D8 DEC 8 S45CD OCT 0 LDRCD OCT 2 SC3CD OCT 4 SKP * * SUBROUTINE TO CLOSE AND PURGE ALL FILES * CURRENTLY OPEN TO PROGRAM INCASE OF ERROR * JSB JSB GTOUT * * NOTE: * I AM CHEATING...GEORGE HAS INDICATED THAT IT * IS POSSIBLE TO PURGE A FILE IF ALL I HAVE IS * A DCB. THE WAY THIS IS DONE IS AS FOLLOWS * SET EXTENT POINTER TO 0...MAIN...GET RID OF SEMENTS * GET THE # OF SECTORS IN FILE AND DIVIDE BY 2 * TO GIVE YOU THE # OF BLOCKS. * DO A CLOSE AND TRUNCATE ALL BLOCKS, WHICH MAKES * THE FILE MANAGER ROUTINES DO EFFECTLY A PURGE. * THUS WE HAVE DONE A PURGE WITHOUT THE NAME * THIS IS DEPENDENT ON DCB MEANING...IF IT CHANGES * BYE.... * * GTOUT NOP LDA 1717B GET TO ID NAME ADA D12 ADD TO NAME STA .DFR1 SAVE FOR MOVE JSB .DFER MOVE NAME DEF ABMSG .DFR1 NOP LDA ABM1 GET TO LAST TO CHAR AND UP377 MASK OFF 6TH CHAR IOR B40 STA ABM1 SAVE ONLY 5 CHAR NAME LDA D14 GO PRINT ABORT LDB DFABM MESSAGE TO THE JSB LOUT OUTPUT LIST FILE LDA ABDCB+9 SEE IF FILE OPEN CPA 1717B THATS OUR ID SEGMENT ADDRESS RSS YES JMP GTOT1 NO CLA CLEAR OUT EXTENTS LDB ABDCB+2 SEE IF TYPE 0 SZB,RSS JMP CLSAB IT IS, DON'T PURGE FILE STA ABDCB+15 LDA ABDCB+5 GET # OF SECTORS CLE,ERA CONVERT TO BLOCKS CLSAB STA BLKS AND SAVE IT JSB FCLOS PURGE THE FILE!!! DEF *+3 DEF ABDCB DEF BLKS GTOT1 JSB FCLOS CLOSE LIST FILE DEF *+2 DEF LSDCB JSB FCLOS FCLOS RELOCATABLE INPUT FILE IF OPEN DEF *+2 DEF RLDCB JSB FCLOS CLOSE INPUT FILE DEF *+2 DEF INDCB * * AT THIS POINT ALL FILES ARE CLOSED OR PURGED * TELL WORLD WE ARE DONE * JSB EXEC PRINT OUT ABORT MESSAGE DEF *+5 DEF B2 DEF ENDLU DFABM DEF ABMSG "RTSGN ABORTED" DEF B7 JSB EXEC RELEASE TRACKS DEF *+3 DEF B5 DEF M1 JSB EXEC AND TURN OFF DEF *+2 DEF B6 SPC 1 ABMSG ASC 2, ABM1 ASC 1, ASC 4,ABORTED B1 OCT 1 B2 OCT 2 B5 OCT 5 B6 OCT 6 B7 OCT 7 M1 DEC -1 BLKS NOP D12 DEC 12 SKP * SUBROUTINE TO WRITE ON INTERACTIVE DEVICE * AND LIST FILE * CALLING SEQUENCE * JSB PRINT * A REG= SIO LENGTH WORD * B REG= ADDRESS OF MESSAGE * PRINT NOP DST ABREG SAVE A AND B REG FOR LOUT JSB BYTCN CONVERT SIO TO USUAL INB SKIP OVER LEADING SPACE ADA M1 CUT COUNT NOT INCLUDE SPACE STA PRNTA SAVE LENGTH STB PRNTB SAVE ADDRESS LDA NOPRT DO WE PRINT THIS MESSAGE? SZA JMP PRNT1 NO JSB WRITF OUTPUT MESSAGE DEF *+5 DEF INDCB TO THE INPUT DEVICE DEF FERR PRNTB NOP DEF PRNTA LENGTH PRNT1 LDA #ECHO IF BOTH THE ECHO-OFF FLAG, ADA PRMFL AND THE PROMPT FLAG CPA B2 ARE SET, JMP PRINT,I BYPASS WRITING TO LIST FILE. DLD ABREG GET LENGTH AGAIN JSB LOUT WRITE TO FILE JMP PRINT,I AND RETURN SPC 1 PRNTA NOP SPC 1 * SUBROUTINE TO CONVERT SIO LENGTH TO POSITIVE WORDS * CALLING SEQUENCE * JSB BYTCN * B REG UNCHANGED * BYTCN NOP STA BYTCA SAVE LENGTH FOR CHECKING LATTER SSA WORDS OR CHARACTERS? JMP *+3 WORDS - CMA,INA CONVERT CHAR TO WORDS ARS DIVIDE BY 2+1 STA BYTCC SAVE IN DOWN COUNTER LDA LSBFA GET ADDRESS WHERE TO PUT OUTPUT STA BYTCD SAVE FOR MOVE BYTC1 LDA B,I MOVE MESSAGE STA BYTCD,I ISZ BYTCD INB ISZ BYTCC DONE? JMP BYTC1 NO LDB BYTCA WORDS OR CHARACTERS? SSB JMP BYTC2 WORDS CLE,ERB CONVERT CHARACTERS TO WORDS SEZ,RSS ODD # OF CHAR? JMP BYTC3 NO STB BYTCC YES...SAVE COUNT FOR LATTER ISZ BYTCC INCLUDE ODD CHAR ADB LSBFA GET TO END LDA B,I AND UP377 MASK OFF LOWER HALF IOR B40 OR IN A SPACE STA B,I SAVE IT LDB BYTCC GET LENGTH AGAIN BYTC3 RSS SKIP OVER COMPLEMENTING BYTC2 CMB,INB CHANGE NEG WORDS TO + WORDS LDA B GET LENGTH IN A REG LDB OTBFA GET ADDRESS OF BUFFER...INCLUDING SPACE INA INCLUDE SPACE IN COUNT JMP BYTCN,I AND RETURN SPC 1 BYTCA NOP BYTCC NOP BYTCD NOP OTBFA DEF OTBUF LSBFA DEF OTBUF+1 B40 OCT 40 SPC 1 * SUBROUTINE TO WRITE ONTO A LIST FILE * CALLING SEQUENCE * JSB LOUT * AREG = SIO LENGTH * B REG= BUFFER ADDRESS * LOUT NOP JSB BYTCN CONVERT LENGTH STA LOUTA STB LSBF SAVE BUFFER ADDRESS FOR OUTPUTING LDA LSBFA,I GET FIRST TWO USER-CHARACTERS. CPA PRMCR IF THEY ARE THE PROMPT CHARACTERS, RSS SKIP TO REPLACE THE BACK ARROW. JMP LWRT NOT THE PROMPT--NO NEED TO CHANGE. AND UP377 SAVE THE UPPER BYTE, IOR B40 AND REPLACE THE LOWER WITH A SPACE. STA LSBFA,I RESTORE THE MODIFIED PROMPT CHARACTERS. LWRT JSB WRITF WRITE THE RECORD DEF *+5 LDCBA DEF LSDCB DEF FERR LSBF NOP LIST BUFFER ADDRESS HERE DEF LOUTA JMP LOUT,I AND RETURN[Z SPC 1 LOUTA NOP EFLAG NOP #ECHO NOP COMMAND-ECHO FLAG: 0=ON, 1=OFF. PRMCR ASC 1,-_ PROMPT CHARACTERS. SKP * * SUBROUTINE TO GET NAME * OPEN,READ AND CLOSE A RELOCATABLE * FILE. * CALLING SEQUENCE * JSB RBIN * ERROR RETURN * NORMAL RETURN * * A REG= BUFFER ADDRESS * UPON RETURN * A REG=-1 EOF OR A REG<> DATA IS THERE * LENGTH IN POSITIVE WORDS FIRST WORD * DATA RECORD * RBIN NOP STA RBINA SAVE BUFFER ADDRESS LDA RLDCB+9 SEE IF DCB OPEN CPA 1717B IS IT OPEN JMP RBOPN YES...DON'T RE OPEN JSB BRKCK SEE IF WE WANT OUT LDA PARS2 GET FILE NAME TYPE SZA IF NOT NULL JMP RBIN1 GO OPEN THE FILE LDA B5 DEFAULT IS LU 5 STA PARS2+1 SET LDA B1 SET FILE NAME TYPE STA PARS2 TO NUMERIC RBIN1 JSB FOPEN TRY TO OPEN FILE DEF *+3 DEF RLDCB DEF B300 JSB FILCK JMP RBIN,I RBOPN JSB READF READ THE FILE DEF *+6 DEF RLDCB DEF FERR DEF RBINA,I DEF D60 MAX OF 60 WORDS DEF RLEN LENGTH OF RECORD JSB FILCK SEE IF ANY ERROR JMP RBIN,I ERROR...DO ERROR RETURN ISZ RBIN GET NORMAL RETURN LDA RLEN GET LENGTH STA RBINA,I AND SAVE IN FIRST WORD CPA M1 EOF? RSS JMP RBIN,I NO JSB FCLOS YES...CLOSE FILE DEF *+3 DEF RLDCB DEF ZERO CCA TELL THEM END OF FILE JMP RBIN,I AND RETURN SPC 2 RBINA NOP RLEN NOP * * SUBROUTINE TO OPEN A FILE * CALLING SEQUENCE * JSB FOPEN FILE OPEN * DEF *+3 * DEF DCB ADDRESS * DEF SUBFUNCTION FOR READ OR WRITE IN CASE A TYPE 0 FILE * * ASSUMES THAT PARS2+1=FILE NAME * PARS3+1=SECURITY CODE * PARS4+1=LU * ODCBA HNOP SUBF NOP FOPEN NOP JSB .ENTR DEF ODCBA LDB C4040 LDA PRS22 SZA,RSS STB PRS22 LDA PRS23 SZA,RSS STB PRS23 FOPN1 LDA ODCBA GGET DCB ADDRESSPE LDB SUBF,I GET SUBFUNCTION JSB TYP0 CHECK IF TYPE IS 0 JMP FOPEN,I YES EXIT JSB OPEN TRY TO OPEN FILE DEF *+7 DEF ODCBA,I DEF FERR DEF PARS2+1 NAME DEF ZERO OPEN OPTION DEF PARS3+1 SECURTIY CODE DEF PARS4+1 LOGICAL UNIT LDB ODCBA GET DCB ADDRESS CPB INDEF IS IT INPUT FILE ISZ NOPRT SET NON-ZERO(NO PRINT) JMP FOPEN,I RETURN SKP * SUBROUTINE TO CREATE A DUMMY TYPE 0 FILE * CALLING SEQUENCE * LDA DCB ADDRESS * LDB SUBFUNCTION * JSB TYP0 * RETURN HERE(P+1) IF IT IS TYPE 0 * RETURN HERE(P+2) IF IT IS NOT TYPE 0 * TYP0 NOP STA T0DCB LDA PARS2 CMA,INA,SZA IF NULL OR NUMERIC INA,SZA,RSS THEN OPEN A DUMMY TYPE 0 JMP TYP1 ISZ TYP0 OTHERWISE TAKE NOT JMP TYP0,I TYPE 0 EXIT TYP1 LDA PARS2+1 GET LU SZA,RSS IF NOT DEFINED INA DEFINE AS LU = 1 STA PARS2+1 CLA JSB SET SET DIRECTORY JSB SET ADDRESS TO ZERO JSB SET ALSO SET TYPE TO 0 LDA PARS2+1 GET LOGICAL UNIT IOR B MERGE IN SUBFUNCTION JSB SET AND SET IN DCB JSB EXEC GET DRIVER TYPE DEF *+4 DEF D13 DEF PARS2+1 DEF EQT5 LDA EQT5 GET TYPE ALF,ALF ROTATE TO LOW A AND B77 AND MASK CPA B5 IF THE TYPE-CODE IS <05>, JSB TYPE5 THEN GO TO EXAMINE THE SUBCHANNEL. STA EQT5 SAVE THE EQUIPMENT TYPE-CODE. LDB B100 GET EOF CONTROL SUBFUNCTION ADA MD17 IF TYPE > 16 SSA,RSS JMP SEOF SET EOF CODE LDB B1000 8 LDA EQT5 CPA B2 IS DRIVER A PUNCH JMP SEOF GO SET LEADER GENERATION CLB SZA,RSS IF TYPE=0 DON'T DO PAGE EJECT JMP SEOF LDB B1100 LINE SPACE OPTION SEOF LDA PARS2+1 GET LU IOR B MERGE EOF CONTROL SUBFUNCTION JSB SET SET IN DCB CLA JSB SET SET NO SPACEING LEGAL LDA B1001 SET READ&WRITE LEGAL JSB SET AND SECURITY CODES AGREE JSB SET AND UPDATE MODEES AGREE LDA 1717B GET MY ID ADDRESS ISZ T0DCB INCREMENT TO WORD 9 JSB SET SET OPEN FLAG LDA T0DCB ADA B3 STA T0DCB SET TO WORD 13 CLA SET IN CORE BUFFER FLAG JSB SET TO ZERO INA JSB SET SET RECORD COUNT LDA EQT5 GET TYPE CODE LDB T0DCB GET DCB ADDRESS ADB MD15 RESET TO WORD 1 CPB INDEF IS IT THE INPUT DEVICE STA NOPRT SAVE TO INDICATE PRINT / NO PRINT ADB B4 GET TO CONTROL FUNCTION LOCATION LDB B,I GET CONTROL WORD STB SET SAVE IN TEMP LOCATION ADA MD17 IF THE EQUIPMENT TYPE-CODE SSA,RSS IS > 16 (MAG.TAPE,ETC.), JMP T0END THEN AVOID WRITING AN END-OF-FILE. JSB EXEC DO A PAGE EJECT, OR GENERATE LEADER. DEF *+4 DEF B3 DEF SET TEMP WHERE FUNCTION CODE LOCATED DEF M1 FORCE A PAGE EJECT T0END CLA SPECIFY TYPE 0 OPEN STA FERR CLEAR ERROR CODE JMP TYP0,I * SET NOP STA T0DCB,I SET IN DCB ISZ T0DCB INCREMENT TO NEXT WORD JMP SET,I * INDEF DEF INDCB T0DCB NOP EQT5 NOP MD17 DEC -17 MD15 DEC -15 B4 OCT 4 B12 OCT 12 B23 OCT 23 B37 OCT 37 B100 OCT 100 B300 OCT 300 B1000 OCT 1000 B1001 OCT 100001 B1100 OCT 1100 D60 DEC 60 * FILNM ASC 5,FILE NAME? * SKP * * SUBROUTINE TO CREATE A FILE * CALLING SEQUENCE * JSB FC>WNLHRET * DEF *+5 * DEF DCB ADDRESS * DEF SIZE * DEF TYPE * DEF SUBFUNCTION FOR READ/WRITE IN CASE A TYPE 0 FILE * * ASSUMES THAT PARS2+1=FILE NAME * PARS3+1=SECURITY CODE * PARS4+1=LU * SPC 1 CDCBA NOP CSIZ NOP CTYP NOP CSBUF NOP FCRET NOP JSB .ENTR DEF CDCBA JSB FOPEN GO TRY TO OPEN THE FILE DEF *+3 DEF CDCBA,I DEF CSBUF,I SZA,RSS TYPE 0? JMP FCRET,I YES...RETURN JSB CLOSE IF NOT CLOSE FILE IF OPEN DEF *+3 DEF CDCBA,I DEF FERR JSB CREAT TRY CREATING THE FILE DEF *+8 DEF CDCBA,I DEF FERR DEF PARS2+1 DEF CSIZ,I DEF CTYP,I DEF PARS3+1 DEF PARS4+1 JMP FCRET,I N SKP * * SUBROUTINE TO CLOSE A FILE * USED TO DETERMINE IF CLOSING A DUMMY TYPE 0 * CALLING SEQUENCE * JSB FCLOS * DEF *+3 * DEF DCB ADDRESS * DEF TRUNCATE OPTION (DEFAULT IS ZERO) * * CLDCB NOP COPTN DEF ZERO FCLOS NOP JSB .ENTR DEF CLDCB LDA CLDCB,I GET DIRECTORY DISC ADDRESS SZA,RSS IF ZERO JMP FCLS1 THEN DUMMY DCB JSB CLOSE ELSE DO STANDARD CLOSE DEF *+4 DEF CLDCB,I DEF FERR DEF COPTN,I JMP FCLOS,I FCLS1 LDA DFZER RESET THE OPTION WORD STA COPTN IN CASE NOT SUPPLIED NEXT TIME LDA CLDCB ADA D9 CLB STB A,I LDA CLDCB SEE IF LIST DCB CPA LDCBA RSS YES IT IS CPA ADCBA ABSOLUTE OUTPUT DCB? RSS YES. SKIP TO PROCESS END-OF-FILE. JMP FCLOS,I NO ADA B4 STA FCLS2 SAVE FOR EXEC CALL JSB EXEC PROCESS END-OF-FILE FOR THE DEVICE. DEF *+4 DEF B3 CONTROL REQUEST FCLS2 NOP LU & EOF SUBFUNCTION. DEF M1 PAGE EJECT CODE JMP FCLOS,I AND RETURN * * ZERO OCT 0 D9 DEC 9 * SKP * SUBROUTINE TO CLOSE THE ABSOLUTE OUTPUT FILE * * CALLING SEQUENCE * JSB CLSFI * NORMAL RETURN * * THIS ROUTINE WILL DELETE UNUSED FILE AREA * CLSFI NOP LDA ABDCB+5 GET #SEC MPY ABDCB+15 MULT. BY THE CURRENT EXTENT NO. STA TMP LDA ABDCB+3 TRK CMA,INA ADA ABDCB+10 CTRK - TRK MPY ABDCB+8 (CTRK - TRK) * #SEC/TR LDB ABDCB+4 CMB,INB ADA B (CTRK - TRK) * #S/TR - SEC ADA ABDCB+11 (CTRK - TRK) * #S/TR - SEC + CSEC ADA TMP ADD IN NUMBER OF EXTENTS ARS CONVERT TO NUMBER OF BLOCKS LDB ABDCB+5 GET NUMBER OF SECS CLE,ERB CONVERT TO BLOCKS CMA,INA SET CURRENT BLOCK NEG AD`B A # OF BLKS - CURRENT BLK CCA ADB A ONE MORE FOR GOOD MEASURE STB TMP JSB FCLOS DEF *+3 ADCBA DEF ABDCB ADDRESS OF ABSOLUTE-OUTPUT DCB DEF TMP JMP CLSFI,I * TMP NOP * * TYPE-CODE CONVERSION FOR DVR05(2640/44) SUBCHANNEL SPECIFICATIONS. * TYPE5 NOP ENTRY/EXIT: EQUIP. TYPE <05> PROCESSING. LDA PARS2+1 GET THE CONWORD. AND B77 ISOLATE THE LOGICAL UNIT NUMBER. ADA M1 SUBTRACT ONE FOR DRT INDEXING. ADA DRT CALCULATE THE POSITION IN THE DRT. LDA A,I GET THE DRT ENTRY. ALF,RAL POSITION SUBCHANNEL TO BITS #4-0. AND B37 ISOLATE THE SUBCHANNEL. STA B SAVE IT TEMPORARILY. SZA,RSS IF THE SUBCHANNEL IS ZERO, THEN RETURN JMP TYPE5,I TO SIMULATE A TYPE <00> DEVICE. LDA B23 PREPARE TO SIMULATE A TYPE <23> DEVICE. CPB B4 IF THE SUBCHANNEL IS FOUR, THEN LDA B12 SIMULATE A TYPE <12> DEVICE. JMP TYPE5,I RETURN--DEVICE TYPE: <12>,LP OR <23>,MT * SKP * SUBROUTINE TO PRINT COMMAND AND ACCEPT * INPUT. * CALLING SEQUENCE * JSB PRMT * DEF *+6 * DEF PRINT MESSAGE BUFFER * DEF LENGTH (IN SIO FORMAT) * DEF REPLY ADDRESS * DEF LENGTH (IN + # OF CHARACTERS) * DEF PARSE BUFFER * * A REG= + NUMBER OF CHARACTERS * PMEMB NOP PMEML NOP PRADD NOP PRLEN NOP PPARS NOP PRMT NOP JSB .ENTR DEF PMEMB CLA,INA SET THE STA PRMFL PROMPT-IN-PROCESS FLAG. PRMT1 LDB PMEMB GET BUFFER ADDRESS LDA PMEML,I GET LENGTH JSB PRINT PRINT QUESTION LDA PRLEN,I GET LENGTH INA CONVERT TO WORDS CLE,ERA STA PRMTA SAVE LENGTH CMA,INA CONVERT TO NEGATIVE WORD COUNT STA PRMTB SAVE IN TEMP LDB PRADD GET ADDRESS WHERE TO SPACE FILL LDA C4040 SPACE WORD STA B,I INB ISZ PRMTB DONE? JMP *-3 NO JSB READF GO GET INPUT DEF *+6 DEF INDCB FROM INPUT DEVICE DEF FERR DEF PRADD,I DEF PRMTA DEF PRMTB JSB FILCK SEE IF WE HAD A FILE ERROR JSB GTOUT WE...GET OUT JSB BRKCK SEE IF WE WANT OUT LDA PRMTB GET LENGTH FOR PRINT ON FILE SSA,RSS IS IT A END OF FILE JMP PRMT2 NO LDA TR YES GO SIMIULATE A TR STA PRADD,I COMMAND TO POP LDA PRADD THE STACK LDB B2 JMP PRMT3 * PRMT2 CLE,ELA CONVERT TO CHARACTERS STA PRMTB SAVE THE LENGTH. LDB #ECHO IF THE ECHO FLAG SZB IS OFF, JMP PRMTX THEN BYPASS COMMAND LOGGING. LDB PRADD GET INPUT JSB LOUT WRITE IT ONTO OUTPUT FILE PRMTX LDA PRADD,I SEE IF THEY WANT OUT? CPA !! JSB GTOUT YES...GET OUT AND MASK CHECK FIRST CHAR FOR AN * CPA ASTER MEANING A COMMENT JMP PRMT1 GOTO NEXT COMMAND LDA PRADD,I GET AGAIN JSB PARSE DEF *+4 DEF PRADD,I DEF PRMTB DEF PPARS,I LDB PPARS GET FIRST 2 CHARS. INB LDA B,I CPA TR TRANSFER COMMAND? RSS JMP PRMT4 NO - GO EXIT INB YES, BUT CHECK FURTHER FOR A LDA B,I FOR A BLANK OR COMMA AND MASK IN CHAR 3 CPA BLANK JMP PRMT5 CPA COMMA RSS JMP PRMT4 PRMT5 LDA PRADD GET BUFFER ADDRESS LDB PRMTB GET LENGTH PRMT3 JSB TRCHK GO DO TR THING JMP PRMT1 GO RETRY COMMAND PRMT4 CLB CLEAR THE STB PRMFL PROMPT-IN-PROCESS FLAG. LDA PRMTB GET ACTUAL REPLY LENTH JMP PRMT,I AND RETURN SPC 1 C4040 ASC 1, !! ASC 1,!! TR ASC 1,TR PRMTA NOP PRMTB NOP ASTER OCT 25000 ASTERIwASK IN HIGH MASK OCT 177400 BLANK OCT 020000 COMMA OCT 026000 PRMFL NOP PROMPT FLAG: 0 =NONE, 1= IN PROCESS. SKP * SUBROUTINE TO DETERMINE IF STACK IS TO * BE PUSHED OR POPPED * * IF PUSHED, IT CLOSES THE CURRENT FILE, * SAVES RC,AND OPENS NEW FILE * * IF POPPED, IT CLOSES THE CURRENT FILE, * OPENS THE PREVIOUS FILE, AND POSITIONS * IT TO THE PROPER RECORD. * TRCHK NOP STB PRMTB SAVE LENGTH STA TRCH1 SET BUFF ADDR. JSB PARSE GO REPARSE DEF *+4 TRCH1 NOP DEF PRMTB DEF PARSB LDA PARS2 GET FILE TYPE SZA IF NOT NULL JMP TR3 GO TO PUSH * TR1 JSB FCLOS CLOSE THE CURRENT FILE DEF *+3 DEF INDCB DFZER DEF ZERO JSB POP GO POP STACK JSB GTOUT ERROR, NO MORE ENTRIES STA RC SAVE RECORD COUNT JSB FOPEN OPEN PREVIOUS FILE DEF *+3 DEF INDCB DEF B400 JSB FILCK JMP TRCHK,I LDA INDCB+2 GET TYPE SZA,RSS IF TYPE 0 JMP TRCHK,I EXIT LDA RC GET RECORD COUNT CMA,INA SET NEGATIVE AND STA COUNT SAVE TR2 ISZ COUNT ARE WE THERE YET? RSS JMP TRCHK,I YES...GET OUT JSB READF READ A RECORD DEF *+6 DEF INDCB DEF FERR DEF PRADD,I DEF ZERO DEF RL LDA RL SSA IF EOF...POP STACK JMP TR1 JMP TR2 GET NEXT RECORD SKP * * PLACE NEW INPUT FILE ON STACK AND PUSH * TR3 LDA INDCB+14 GET REC NUMBER OF NEXT RECORD STA RC SAVE AS CURRENT RECORD # JSB FCLOS GO CLOSE THE FILE DEF *+3 DEF INDCB DEF ZERO LDA RC GET RECORD COUNT JSB PUSH GO PUSH STACK JSB GTOUT ERROR STACK OVERFLOW JSB FOPEN GO OPEN NEW FILE DEF *+3 DEF INDCB DEF B400 JSB pFILCK NOP JMP TRCHK,I AND RETURN * * COUNT NOP RC NOP RL NOP SKP * * SUBROUTINE TO PUSH AND POP A STACK * STACK DEFINITION * WORD 4= RECORD COUNT FOR NEXT RECORD TO READ * WORD 3= 0 ELSE CH5&CH6 * WORD 2= 0 ELSE CH3&CH4 * WORD 1= LU ELSE CH1&CH2 * WORD 0= TYPE...1=TYPE 0, 2=REGULAR * * PUSH-PLACES FILE NAME AND TYPE ON STACK * LEAVES POINTER AT RECORD COUNT (WORD 4) * ASSUMES PARS2 CONTAINS INFO NEEDED * CALLING SEQUNCE * LDA RC OF CURRENT FILE * JSB PUSH * ERROR RETURN STACK OVERFLOW * NORMAL RETURN * SPC 1 PUSH NOP STA P:TR,I SAVE CURRENT RECORD COUNT ISZ P:TR INCREMENT TO BEGINNING OF NEXT ENTRY LDA ENDST GET END OF STACK ADDRESS CPA P:TR IF = JMP PUSH,I THEN OVERFLOW DLD PARS2 SAVE TYPE DST P:TR,I ISZ P:TR ISZ P:TR DLD PARS2+2 STORE CHARS 3-6 DST P:TR,I ISZ P:TR ISZ P:TR ISZ PUSH SET FOR NORMAL RETURN JMP PUSH,I AND RETURN SKP * * SUBROUTINE THAT MOVES THE POINTER TO PREVIOUS * STACK ENTRY * PLACES RECORD COUNT IN A REG * LEAVES POINTER AT REC. COUNT * * CALLING SEQUENCE * JSB POP * ERROR RETURN * NORMAL RETURN * A REG=REC. COUNT * SPC 1 POP NOP LDA P:TR GET CURRENT POINTER ADA MD9 DECREMENT TO PREVIOUS ENTRY LDB STKAD GET STACK ADDRESS CMB,INB ADB A IF CURRENT LESS THAN SSB START OF STACK JMP POP,I NO MORE ENTRIES STA P:TR SET AS NEW POINTER DLD P:TR,I GET OLD ENTRY DST PARS2 ISZ P:TR INCREMENT TO WORDS 3 AND 4 ISZ P:TR DLD P:TR,I DST PARS2+2 ISZ P:TR ISZ P:TR LDA P:TR,I GET RECORD COUNT ISZ POP GET NORMAL RETURN JM'P POP,I AND RETURN SPC 2 STKAD DEF STACK BSS 1 STACK BSS 25 ENDST DEF * P:TR DEF STACK-1 MD9 DEC -9 SKP * * FILE CHECK ROUTINE * CALLING SEQUENCE * JSB FILCK * ERROR RETURN * NORMAL RETURN * MUST SEND ERROR PRAM TO FERR * FILCK NOP LDA FERR SSA,RSS ANY ERRORS? JMP FNOER CMA,INA SET POS FOR CONVERT STA FERR JSB CNUMD GET DEC ERROR CODE DEF *+3 DEF FERR DEF FERMA ERROR MESSAGE ADDRESS LDA FERMA+2 GET LAST TWO CHARACTERS STA FERMA SAVE FOR MESSAGE LDA D14 LDB FILEA JSB PRINT SEND ERROR TO USER RSS FNOER ISZ FILCK GET NORMAL RETURN IF NO ERROR JMP FILCK,I AND RETURN SPC 2 FILEA DEF *+1 ASC 5,FILE ERROR ASC 1, - FERMA ASC 4, FERR NOP D14 DEC 14 SKP * * SUBROUTINE TO CHECK IF WE SHOULD ABORT * CALLING SEQUENCE * JSB BRKCK * NORMAL RETURN * NOTE: * ROUTINE WILL NOT RETURN IF WE WANT OUT * BRKCK NOP JSB IFBRK DEF *+1 SZA,RSS WANT OUT? JMP BRKCK,I NO JSB GTOUT YES SKP * SUBROUTINE USED TO OBTAIN MODULE'S LENGTH. * CALLED FROM NAM RECORD PROCESSOR IN SLAG2. * CALL: JSB SIZE * RETURN: (A) = LENGTH, OR A NEG # IF ANY ERROR. * SIZE NOP ENTRY TO GET SIZE OF CURRENT MOD LDA NBUF9 GET WORD 7 FROM NAM RECORD. SSA,RSS IS THIS MOD ASMB, FTN OR ALGOL ? JMP SIZE,I ASMB, NBUF+9 HAS GOOD SIZE. LDA RLDCB+2 GET FILE TYPE FROM DCB. SZA SKIP IF TYPE 0. JMP SIZE0 GO CALCULATE SIZE. LDA NBUF9 GET SIZE WORD AGAIN. CPA M1 IS IT ALGOL ? JMP *+3 YES. ELA,CLE,ERA NO, CLEAR SIGN BIT. JMP SIZE,I RETURN WITH FTN'S (BAD) GUESS. CLA ALGOL MODULE SO TURN OFF LOCAL MODE. STA CPLML JMP SIZE ,I RETURN. SIZE0 JSB LOCF GET CURRENT FILE POSITION. DEF *+4 DEF RLDCB DEF SERR DEF SREC LDA SERR ERROR ? SSA,RSS JMP SIZE,I YES, RETURN NEG #. SIZE1 JSB READF READ DEF *+5 NEXT DEF RLDCB RECORD'S DEF SERR FIRST DEF SBUFR FOUR DEF SLNTH WORDS. LDA SERR ERROR ? SSA,RSS JMP SIZE,I YES, RETURN NEG #. LDA WORD2 ISOLATE CLB IDENT OF RRR 13 RECORD. CPA THREE DBL TYPE ? JMP SIZE2 YES. CPA FIVE END TYPE ? JMP SIZE3 YES. JMP SIZE1 NEITHER, GO GET NXT RECORD. SIZE2 LDB WORD2 IS DATA LSR 7 TO BE ON SSA,RSS BASE OR CURRENT PAGE. JMP SIZE1 BASE, DON'T INCLUDE IN SIZE. LSL 1 DUMP Z/C BIT. CLB ZERO OUT FOR SHIFT. LSR 10 GETS # INSTR WORDS INTO A. ADA WORD4 ADD RELOCATION BASE. STA SIZE5 TUCK IT AWAY. JMP SIZE1 BACK TO GET NEXT RECORD. SIZE3 JSB APOSN REPOSITION DEF SIZE4 THE DEF RLDCB FILE. DEF SERR DEF SREC SIZE4 LDA SERR ERROR ? SSA,RSS JMP SIZE,I YES, RETURN NEG #. LDA SIZE5 NO, RETURN JMP SIZE,I THE SIZE. SIZE5 BSS 1 TEMPORARY STORAGE. SERR BSS 1 SREC BSS 1 SBUFR BSS 4 SLNTH DEC 4 WORD1 EQU SBUFR WORD2 EQU SBUFR+1 WORD3 EQU SBUFR+2 WORD4 EQU SBUFR+3 THREE DEC 3 FIVE DEC 5 * * CONSTANTS TABLES WHAT NOT * SPC 3 . EQU * PARS1 BSS 4 .. EQU * PARS2 BSS 1 PRS21 BSS 1 PRS22 BSS 1 PRS23 BSS 1 PARS3 BSS 1 PRS31 BSS 3 PARS4 BSS 1 PRS41 BSS 3 PARS5 BSS 1 PRS51 BSS 3 SPC 1 ORG . PARSB BSS 34 ORG .. PARSA BSS 34 SPC 3 PNAMA DEF PNAME * PNAME NOP NOP NOP BSS 3 PRAMS DEC 3 DEC 99L0.* REP 6 NOP * SPC 2 * FWAM NOP TO BE CALCULATED AT RUN TIME LST NOP # OF ENTRY PT ENTRYS LSTPX OCT 0 HOLDS ENTRY COUNTER(NEG. #+1). LST1 OCT 0 LST2 OCT 0 LST3 OCT 0 LST4 OCT 0 LST5 NOP CPLMG NOP CURRENT PAGE LINK MODE GLOBAL FLAG. * 0 => BASE PAGE (DEFAULT), 1 => CURRENT PAGE MODE. CPLML NOP CURRENT PAGE LINK MODE LOCAL FLAG. * 0 => LOCAL MODE OFF, 1 => LOCAL MODE ON, -1 => BUFFER FULL. * * * RELOCATION BASE TABLE ( RBT ) * * THE ORDER OF THESE ENTRIES MUST BE MAINTAINED RBTO DEF LOCC RBTA DEF B0 B0 NOP ABSOLUTE RELOCATION BASE LOCC NOP PROGRAM RELOCATION BASE BPLOC NOP BASE PAGE RELOCATION BASE COMOR OCT 0 COMMON RELOCATION OCT 0 ABSOLUTE * * THE FOLLOWING CORE IS THE USER'S MEMORY TABLE. * .MEM. DEF *+1 USER'S MEMORY TABLE .MEM1 OCT 100 SET DEFAULT FWABP .MEM2 OCT 1647 " " LWABP .MEM3 OCT 2000 " " FWAM .MEM4 OCT 17677 " " LWAM .MEM5 NOP " " FWAC .MEM6 NOP " NOP LWAC SPC 2 * ?XFER NOP DRT EQU 1652B ADDRESS OF DEVICE REFERENCE TABLE. LWAM EQU 1777B RTE TELLS US END OF CORE LISTO NOP NAMR. NOP PLKS NOP UEXFL NOP COML NOP SPC 2 * * I-O LU # * CMDLU EQU PARS2+1 SPC 1 * * PRINT BUFFER * OTBUF ASC 1, BSS 39 SPC 4 * * DEFINE DCB'S * ABDCB BSS 144 LSDCB BSS 144 RLDCB BSS 144 INDCB BSS 3 INDB3 BSS 141 SPC 2 END EQU * END START }0  91700-18139 1612 S 0422 DS1/B CCE MODULE: SCGN1              H0104 EASMB,R,L,C HED SCGN1 91700-16139 REV.A 760317 * (C) HEWLETT-PACKARD CO. 1976 * NAM SCGN1,5 91700-16139 REV.A 760317 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ************************************************** * *SCGN1 RTC GENERATOR SEGMENT * *SOURCE PART # 91700-18139 REV.A * *REL PART # 91700-16139 REV.A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 11-29-74 * *MODIFIED BY: K.HAHN, [ C.C.H. CLEAR EQTX BUFFER ] * [ J-P B. END OF IDSEG LIST ] * *DATE MODIFIED: 6-27-75 [02-16-76] * [03-17-76] * *************************************************** ************************************************** A EQU 0 B EQU 1 SUP * * THE TERM RTS/2100 IS SYNONYMOUS WITH RTE-C, AND * THE TERMS ARE USED INTERCHANGEABLY THROUGHOUT * THIS DOCUMENT. * * SKP * * * * * * RTSGN PROGRAM TABLE FORMAT (IDENTS) * * WORD 1: IP1 - NAME 1,2 * WORD 2: IP2 - NAME 3,4 * WORD 3: IP3 - NAME 5,SC * * SC = 0 PROGRAM HAS BEEN LOADED * = XX (OCTAL) INT PRG * * * LST FORMAT * * WORD 1: LST1 - NAME 1,2 * WORD 2: LST2 - NAME 3,4 * WORD 3: LST3 - NAME 5, ORDINAL * WORD 4: LST4 - IDENT ADDRESS * WORD 5: LST5 - BP LINK ADDRESS * * * * ENTERNS AND EXTERNS * * * EXT LST,PLK,PLKS,?XFER,LSTI,LSTP EXT .MEM.,PRCMD EXT UEXFL,SSTBL,.MEM3 EXT LST1,LST2,LST3,LST4,LST5 EXT .MEM1,.MEM4 EXT .MEM2,.MEM5,.MEM6,NAMR.,LISTO EXT PARSA EXT dPNAME,PNAMA EXT EXEC,LOCC,BPLOC,PRINT EXT PRMT,GTOUT,ABDCB EXT FCRET,WRITF,FCLOS,CLSFI EXT FILCK,FERR,SWAPR,LSDCB,CMDLU EXT ENDLU,LOUT,INDCB * * * .XFER EQU ?XFER * * * .MEM. TABLE DEFINITIONS * * .MEM1 = FWABP * .MEM2 = LWABP * .MEM3 = FWAM * .MEM4 = LWAM * .MEM5 = FWAC * .MEM6 = LWAC * * * * ERROR CODES * * TB: SYMBOL TABLE/ID SEG OVERFLOW * NA: PARAMETER NAME ERROR * PA: PARAMETER ERROR * PR: PARAMETER PRIORITY ERROR * IN: PARAMETER EXECUTION INTERVAL ERROR * CH: INVALID CHANNEL NUMBER * DR: INVALID DRIVER NAME * LU: INVALID DEVICE REFERENCE NUMBER * EQ: INVALID EQT. NO. IN INT RECORD * AD: INVALID ENTRY POINT * DU: DUPLICATE PROGRAM NAME SKP * * WDCNT BSS 1 TEMPORARY WORD COUNTER BIDNT BSS 1 ADDR OF FIRST IDENT * MAXC BSS 1 MAX CHAR COUNT TCHAR BSS 1 TEMPORARY CHAR SAVE AREA OCTNO BSS 1 OCTAL DIGIT PIOC BSS 1 ADDR. OF PRIVILEGED I/O CARD $$ TBCHN BSS 1 TIME BASE GENERATOR CHNL * ID5 BSS 1 PRIORITY ID6 BSS 1 RESOLUTION CODE ID7 BSS 1 EXECUTION MULTIPLE ID8 BSS 1 HOURS ID9 BSS 1 MINUTES ID10 BSS 1 SECONDS ID11 BSS 1 TENS OF SECONDS * * CURAL BSS 1 SETAD BSS 1 ABSOLUTE OUTPUT BUFFER ADDRESS * SPC 1 TEMP1 BSS 1 TEMP2 BSS 1 TEMP3 BSS 1 IPXSV BSS 1 SRISV BSS 1 IP1 BSS 1 IP2 BSS 1 IP3 BSS 1 SYMAD BSS 1 FWASM CURAT BSS 1 CURRENT TBUF ADDRESS TCNT BSS 1 CURRENT TBUF COUNT TBUF BSS 4 TEMPORARY BUFFER PPREL BSS 1 TBREL BSS 1 * KEYAD BSS 1 ADDRESS OF KEY WORD TABLE KEYCN BSS 1 TOTAL KEYWORD COUNT * AEQT BSS 1 ADDRESS OF EQUIPMENT TABLE CEQT BSS 1 NO. ENTRIES IN EQUIPMENT TABLE * ASQT BSS 1 ADDR OF DEVICE REFERENCE TABLE CSQT BSS 1 NO. ENTRIES IN DEV. REF. TABLE *  A$CIA BSS 1 ADDRESS OF $CIC ROUTINE PROCT BSS 1 NO. OF INT. ENTRIES STRAD BSS 1 $STRT START ADDRESS * * IDSAD BSS 1 SYSAD BSS 1 IDNOS BSS 1 ACTUAL ID'S FILLED STRPN BSS 3 START UP PROG NAME AINT BSS 1 ADDRESS OF INTERRUPT TABLE CINT BSS 1 NO. ENTRIES IN INTERRUPT TABLE * * * TEMPL BSS 1 TEMPH BSS 1 TEMPS BSS 1 * PARNO BSS 1 PARAMETER RECORD LENGTH * IOADD BSS 1 I/O ADDR (CHANNEL NO.) IN EQT IODMA BSS 1 I/O DMA FLAG IN EQT IOBUF BSS 1 I/O BUFFERING FLAG IN EQT IOTYP BSS 1 I/O DRIVER TYPE IN EQT (OCTAL) DFLAG BSS 1 DMA-IN FLAG FOR EQT BFLAG BSS 1 BUFFERING-IN FLAG FOR EQT TFLAG BSS 1 TIME-OUT ENTRY FLAG FOR EQT INTCH BSS 1 INT RECORD CHANNEL NO. LSTSV BSS 1 LST COUNT SAVE FOR REL UPDATE I.XX BSS 1 DRIVER ENTRY POINT C.XX BSS 1 DRIVER EXIT POINT TIMWD BSS 1 RANAD BSS 1 * DRANG BSS 1 DIGIT RANGE LWABP BSS 1 DIFLG BSS 1 DATA-IN FLAG = -1/0 = NOT IN/IN CMFLG BSS 1 COMMA FLAG = -1/0 = NOT IN/IN BUFUL BSS 1 BUFFER U/L FLAG LBLAD BSS 1 MEMAD BSS 1 EPRGT BSS 122 BUFFER FOR UP TO 25 PROGS SPRGT BSS 3 END OF BUFFER SPC 2 * * HERE IS THE END OF AREA THAT NEEDS TO BE SAVED * MAKE SURE BSS FOR OTHER SEGMENTS AT LEAST THIS * BIG...BSSIZ=THAT SIZE * BSSIZ EQU * SKP * PRINT: ERR XX * * THE ERROR SUBROUTINE IS USED TO PRINT THE DIAGNOSTICS * FOR ALL ERROR MESSAGES. * * CALLING SEQUENCE: * A = 2-CHAR ASCII ERROR CODE * B = IGNORED * JSB ERROR * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * ERROR NOP PRINT ERROR MESSAGES STA AMERR+3 SET ERROR CODE INTO MESSAGE LDA P6 LDB AMERR AMERR = MESSAGE ADDRESS JSB PRINT PRINT ERROR MESSAGE JMP ERROR,I RETURN * AMERR DEF *+1 ASC 3,ERR qERROR MESSAGE = ERR + CODE SKP * * SET DATA TO ABS TAPE * * ROUTINE TO RESERVE AND SET CORE ON THE * LOADER PRODUCED ABSOLUTE OUTPUT. * * CALLING SEQUENCE: * A = FINAL STARTING ADDRES * B = FINAL ENDING ADDRESS * * SETAD = ADDRESS OF THE OUTPUT DATA BUFFER * * JSB SETCR * * RETURN: A AND B ARE DESTROYED * SETCR NOP STA TEMP1 CMA,INA ADA SETAD BUFFER ADDRESS STA PLKS OFFSET ADDRESS LDA TEMP1 STARTING ADDRESS JSB PLK OUTPUT ROUTINE IN THE LOADER JMP SETCR,I * SKP * * THE IPX ROUTINE ADDRESSES THE CURRENT 3 WORD ENTRY * IN THE INTERRUPT PROGRAM TABLE FROM THE ADDRESS OF * THE CURRENT ENTRY (BIDNT) . THE TABLE START ADDRESS * IS LWAM * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB IPX * * RETURN, CONTENTS OF A AND B ARE DESTROYED * IPX NOP LDA BIDNT BUILD POINTERS STA IP1 INA STA IP2 INA STA IP3 ADA N5 STA BIDNT JMP IPX,I * * CLEAR BUFFER TO CALLING SEQ+1 * * THE BUFCL SUBROUTINE STUFFS A 64 WORD BUFFER WITH CALL+1 * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF BUFFER * JSB BUFCL * CALL+1 = DATA TO BE STUFFED * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * BUFCL NOP LDA N64 STA WDCNT SET BUFFER LENGTH = 64 LDA BUFCL,I GET STUFF DATA STA B,I CLEAR BUFFER WORD INB ISZ WDCNT ALL WORDS CLEAR? JMP *-3 NO - CONTINUE CLEARING ISZ BUFCL JMP BUFCL,I RETURN * * ROUTINT TO COMPARE TWO NAME BUFFERS * * * CALLING SEQUENCE: * A = ADDRESS OF SOURCE NAME- 3 ENTRIES * B = ADDRESS OF TABLE 3 ENTRIES * JSB NACMP * * RETURN: A AND B ARE DESTROYED * (N+1) NAMES DO NOT COMPARE * (N+2) NAMES COMPARE * NACMP NOP STA TEMP1 SAVE SOURCE ADDRESS V STB TEMP2 SAVE TABLE ADDRESS LDA N2 LOOP COUNT STA TEMP3 NACM1 LDA TEMP1,I SOURCE ENTRY CPA TEMP2,I TABLE COMPARE RSS YES,COMPARE, LOOK NEXT JMP NACMP,I NO IT DOESN'T RETURN ISZ TEMP1 BUMP SOURCE ISZ TEMP2 BUMP TABLE ISZ TEMP3 JMP NACM1 TRY AGAIN LDA TEMP2,I FIRST TWO COMPARE, LOOK LAST AND M7400 LOOK UPPER ONLY STA B LDA TEMP1,I AND M7400 CPA B ISZ NACMP BUMP RETURN FOR COMPARE! JMP NACMP,I * * * SET INITIAL IPX ADDRESS * * INIPX SETS THE ADDRESS OF THE FRIST ENTRY IN THE * PROGRAM IDENT TABLE AS THE CURRENT ADDRESS. * * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INIPX * * RETURN: A AND B ARE DESTROYED * INIPX NOP LDA SPRGA GET START OF PROGRAM TABLE STA BIDNT JMP INIPX,I SKP * ALBUF DEF LBUF ATBUF DEF TBUF APNAM DEF PNAMA SPRGA DEF SPRGT EPGTA DEF EPRGT-1 * * * ERR09 ASC 1,NA PARAMETER NAME ERROR ERR10 ASC 1,PA PARAMETER ERROR ERR12 ASC 1,IN PARAMETER INTERVAL ERROR ERR24 ASC 1,CH INVALID CHANNEL NO. IN EQT REC ERR25 ASC 1,DR INVALID DRIVER NAME ERR27 ASC 1,LU INVALID DEVICE REF. NO. ERR31 ASC 1,EQ INVALID EQT NO. IN INT RECORD ERR33 ASC 1,AD INVALID ENTRY POINT IN INT RECORD PTERM ASC 1,EN ERRDU ASC 1,DU COMMA OCT 54 COMMA IJSB JSB 0,I I-JSB CODE FOR INTERRUPT LOCS UASCZ OCT 30000 UPPER ASCII ZERO CHAR CHARD OCT 104 ASCII CHAR D CHARB OCT 102 ASCII CHAR B CHART OCT 124 ASCII CHAR T BIT14 OCT 40000 BIT 14=1 CHAVR ASC 1,VR CHRPR ASC 1,PR REQT ASC 1,RE RDRT ASC 1,RD RINT ASC 1,RI CHREN ASC 1,EN CHRAB ASC 1,AB UTCHR ASC 1,T USCHR ASC 1,S ERR11 EQU CHRPR PARAMETER PRIORITY ERROR CHREQ EQU ERR31 MES28 DEF MS28 * MES25 DEF *+1 ASC 4,EQT TBL * MES26 DEF *+1 p ASC 4,DRT TBL ASC 3, LU# * MES42 DEF *+1 ASC 4,#ID SEG? MES41 DEF *+1 ASC 5,PRIV. INT? MES2 DEF *+1 ASC 6,REL SYS MODS MES3 DEF *+1 ASC 6,REL RES LIB MES12 DEF *+1 ASC 4,INT PRGS MES13 DEF *+1 ASC 4,IGNORE? * SKP *** SYSTEM BASE PAGE COMMUNICATION AREA *** * * * SYSTEM TABLE DEFINITION * * . EQU 1650B EQTA DEF .+0 FWA OF EQUIPMENT TABLE EQT# DEF .+1 # OF EQT ENTRIES DRT DEF .+2 FWA OF DEVICE REFERENCE TABLE LUMAX DEF .+3 # OF LOGICAL UNITS (IN DRT) INTBA DEF .+4 FWA OF INTERRUPT TABLE INTLG DEF .+5 # OF INTERRUPT TABLE ENTRIES TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE KEYWD DEF .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG DEF .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY DEF .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 8 PARAMETERS) * * DEFINITION OF SYSTEM LISTS (QUEUES) * * DORMT DEF .+32 ADDRESS OF 'DORMANT' LIST, SKEDD DEF .+33 'SCHEDULE' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY DEF .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 DEF .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG DEF .+61 FWA OF RESIDENT LIBRARY AREA RTORG DEF .+62 FWA OF REAL-TIME AREA RTCOM DEF .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM DEF .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG DEF .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BACKGROUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS BKLWA DEF .+87 LWA OF MEMORY IN BACKGROUND BP<CLR DEF .+44 SKP * * THIS IS WHERE WE START. *** INITIALIZATION *** * SWPIN NOP THIS IS WHERE CONTROL IS PASSED LDA RSTA WHEN SEGMENT ROLLED IN JMP SWAPR CONTROL IS RETURN TO MAIN WITH A REG=START SPC 1 RSTA DEF RSTRT SPC 1 * * * THE FOLLOWING MESSAGES ARE PRINTED DURING THE INITIALIZATION * PHASE, WITH THE SPECIFICATIONS FOR EACH VALID RESONSE. * * * MESSAGE RESPONSE * * TBG CHNL? ENTER 2 OCTAL DIGITS * * PRIV. INT. ENTER 2 OCTAL DIGITS $$ * * FWA BP? ENTER 4 OCTAL DIGITS * * LWA MEM? ENTER 5 OCTAL DIGITS * * FWA SYS MEM? ENTER 5 OCTAL DIGITS * * * RSTRT NOP LDA M2000 SET UP FWAM STA .MEM3 LDA P1647 STA .MEM2 SET LWABP CLA STA LST CLEAR THE SYMBOL TABLE COUNT STA NAMR. LDA LISTO AND N9 CLEAR BIT 3, FOR NEW HEADING STA LISTO * * SET PARAMETER INPUT UNIT * * SET TIME BASE GENERATOR CHANNEL NOP SPACE NEW LINE CHNLT LDA P9 LDB MES30 MES30 = ADDR: TBG CHNL? JSB READ PRINT MESSAGE, GET REPLY LDA P2 SET FOR 2 OCTAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP CHNLT REPEAT INPUT STA TBCHN SET TBG CHANNEL NO. * * GET PRIV. INT. CARD ADDR. NOP SPACE NEW LINE $$ DUMY LDA P10 $$ LDB MES41 MES41 = ADDR: PRIV. INT. CARD?$$ JSB READ PRINT MESSAGE, GET REPLY $$ LDA P2 SET FOR 2 OCTAL DIGITS INPUT $$ JSB DOCON GET DIGITS $$ JMP DUMY -ERROR, REPEAT INPUT. $$ STA PIOC SET ADDR. OF DUMMY CARD. $$ * * * * SET FWA BP LINKAGE FWENT NOP SPACE  $ LDA P7 $ LDB MES27 MES27 = ADDR: FWA BP LINKAGE? JSB READ PRINT AND GET REPLY LDA P4 JSB GETOC GET 4 OCTAL DIGITS, CONVERT JMP LNKER INVALID DIGIT ENTERED JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP SETFB YES - SET FWA BP LINKAGE LNKER JSB INERR JMP FWENT REPEAT MESSAGE SETFB LDB OCTNO GET FWA BP SZB,RSS SKIP - VALID (NON-ZERO) FWA BP JMP LNKER REPEAT FWA BP LINKAGE INPUT STB .MEM1 ADB N1 STB LWABP SAVE FOR INT PROCESSOR NOP SPACE NEW LINE * LDA ALBUF SET OFFSET ADDRESS STA SETAD TO THE CLEARED BUFFER LDB ALBUF ADDRESS OF IN BUFFER JSB BUFCL CLEAR BUFFER TO OCTAL ZEROS OCT 0 LDA EQTA START ADDR OF AREA TO BE CLEARED LDB BPCLR END ADDRESS JSB SETCR CLEAR LOWER HALF LDA BPCLR LDB BKLWA JSB SETCR CLEAR UPPER HALF SMLWA LDA P8 LDB MESS3 MESS3 = ADDR: LWA MEM? JSB READ PRINT MESSAGE, GET REPLY LDA P5 SET FOR 5 OCTAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP SMLWA REPEAT INPUT LDA OCTNO GET LWAM STA TEMP3 SAVE FOR FWA SYS MEMORY PROCESSING STA SETAD,I PUT IN BUFFER LDA BKORG ADDRESS OF BK LWAM LDB A ADDRESS INTO B JSB SETCR OUTPUT ABSOLUTE LDA BKLWA THE OTHER BP REFERENCE LDB A JSB SETCR OUTPUT TO ABS * NOP SPACE GETAV LDA P12 PRINT: LDB MES34 "FWA SYS MEM? JSB READ GET THE ANSWER LDA P5 SET FOR 5 OCTAL DIGITS. JSB DOCON CONVERT TO OCTAL. JMP SYMER -ERROR. JMP SETAV OK , SET BOUNDARY. * SYMER JSB INERR JMP GETAV -REPEAT REQUEST * SETAV LDA OCTNO IF NUMBER STA WSYMAD SZA,RSS EQ 0, LEAVE FWA JMP SETA1 LDB TEMP3 SUBTRACT ORIG. CMA,INA ADB A NEW VALUE SSB ERROR IF JMP SYMER NEW > LWAM * CLEAR RTS BP AREA LDA SYMAD GET START OF SYS MEMORY ADA N1 ADJUST FOR LWAM RSS SETA1 LDA TEMP3 DEFAULT TO LWAM STA .MEM4 UPPER LOAD BOUNDS * SET PRIV CHAN IN BP LDA PIOC PRIV. INT CHANNEL STA SETAD,I PUT IN BUFFER LDA DUMMY ADDRESS WHERE TO GO IN BP LDB A JSB SETCR GO SET IT IN BP * GO REL SYS MODULES NOP SPACE NEW LINE LDA P12 PRINT: LDB MES2 "REL SYS MODS" JSB PRINT PRINT * RELOCATE FROM RTS/2100 LOADER LDA P2 STA .XFER NON ZERO TO LOAD SYS MODULES CLA GET A ZERO STA PNAME CLEAR NAME FLAG STA LOCC CLEAR LOCC IN LOADER STA BPLOC SAME FOR BPLOC JSB PRCMD GO RELOCATE SYS MODULES JSB GTOUT ERROR FROM LOADER...GET OUT LDA LOCC UPDATE FWAM STA .MEM3 FWAM LDA BPLOC UPDATE FWABP STA .MEM1 LDA LST STA LSTSV SAVE FOR RELOCATION ERROR LDA UEXFL WERE THERE ANY UNDEFINED? SZA,RSS JMP *+4 NO CONTINUE RELSE LDA ERR33 YES,PRINT: JSB ERROR "ERR AD" JMP RSTRT START RTSGN OVER LDB A$STR JSB SSTBL WAS $STRT LOADED? JMP RELSE NO, ERROR, LDA LST4 YES, GET STARTING ADDRESS LDA A,I STA STRAD SAVE IT FOR CLEAN-UP AT END OF RTSGN LDB A$CIC $CIC NAME JSB SSTBL WAS $CIC LOADED? JMP RELSE NO, ERROR, START OVER LDA LST4 BUILD A BP LINK FOR $CIC LDA A,I STA SETAD,I OUTPUT BP LINK LDA .MEM1 FOR $CIC LDB A JSB SETCR LDB LST5 LDA .MEM1 STA A$CIA SAVE FOR JSB INSTRUCTION STA B,I ISZ .MEM1 BUMP TO NEXT LINK JMP GENIO YES, GO BUILD I/O TABLES * * * * NUMERICAL INPUT CONTROL * * THE DOCON SUBROUTINE ANALYZES THE INPUT FOR THE * CHANNEL NO., TBG CHANNEL NO., AND LAST * WORD OF AVAILABLE MEMORY. * * CALLING SEQUENCE: * A = MAX NO. OF CHARACTERS PERMITTED IN RESPONSE. * THE SIGN OF A DETERMINES THE CONVERSION FROM * ASCII TO OCTAL (POS.) OR DECIMAL (NEG.). * B = IGNORED * JSB DOCON * * RETURN: * (N+1): CONTENTS OF A AND B ARE DESTROYED. AN INVALID * CHARACTER HAS BEEN DETECTED IN THE RESPONSE, OR * THE RESPONSE CONTAINS AN INVALID NO. CHARACTERS. * THE MESSAGE IS TO BE REPEATED ON RETURN. * (N+2): A = CONVERTED RESULT * DOCON NOP JSB GETOC GET OCTAL/DECIMAL, RETURN OCTAL JMP *+4 INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP *+3 YES - CONTINUE JSB INERR INVALID DIGIT ENTRY JMP DOCON,I RETURN ISZ DOCON INCR RETURN ADDRESS LDA OCTNO GET CONVERTED NUMBER JMP DOCON,I RETURN SKP * * INVALID TTY RESPONSE * * THE INERR SUBROUTINE PRINTS THE DIAGNOSTIC FOR INVALID * RESPONSES DURING THE INITIALIZATION SECTION. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INERR * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * INERR NOP LDA ERR10 SET INVALID DEVICE ERROR CODE JSB ERROR PRINT ERROR MESSAGE JMP INERR,I RETURN * SKP MES27 DEF MS27 MES34 DEF SYMES SYMES ASC 6,FWA SYS MEM? MS27 ASC 4,FWA BP? MESS3 DEF *+1 ASC 5,LWA MEM? MES30 DEF *+1 ASC 5,TBG CHNL? A$STR DEF *+1 ASC 3,$STRT A$CIC DEF *+1 ASC 3,$CIC * CHARX OCT 130 EQXCT NOP XEXTM NOP TEQCT BSS 1 TEQTX BSS 1 AEQTX DEF EQXTB * SKP * * GENERATE I/O TABLES * * THIS SECTION OF CODE GENERATES THE I/O TABLES * FOR THE SYSTEM. THESE INCLUDE THE EQUIPMENT TABLE (EQT), * STANDARD DEVICE REFERENCE TABLE (DRT), AND INTERRUPT TABLE. * * THE EQT RECORDS HAVE THE FOLLOWING FORMAT: * * N1,DVRN2<,D><,B><,T=><,X=> * * N1 = CHANNEL NO. (2 OCTAL DIGITS) * N2 = DRIVER CLASS. CODE (2 OCTAL DIGITS) * D = DMA FLAG (OPTIONAL) * B = BUFFERING FLAG (OPTIONAL) * T = TIME-OUT VALUE TO BE ENTERED * X = EQT EXTENSION AREA SIZE * * IF T= IS ENTERED, A VALUE FOR THE DEVICE'S TIME-OUT * CLOCK MUST NEXT BE ENTERED. * THE OPERATOR MUST ENTER A POSITIVE DECIMAL NUMBER * OF UP TO FIVE DIGITS. THIS IS THEN THE NUMBER OF * TIME BASE GENERATOR INTERRUPTS (10 MSEC INTERVALS) * BETWEEN THE TIME IO IS INITIATED ON THE DEVICE AND * THE TIME AFTER WHICH THE DEVICE SHOULD HAVE INTERRUPTED. * IF THE DEVICE HAS NOT INTERRUPTED BY THIS TIME, IT * IS CONSIDERED TO HAVE TIMED-OUT. * * * EACH DRT RECORD CONSISTS OF A 2-DIGIT NO. SPECIFYING THE * CORRESPONDING ENTRY IN THE EQUIPMENT TABLE * AND AN OPTIONAL 1-DIGIT NO. SPECIFYING A * SUBCHANNEL WITHIN THAT ENTRY. FOR EXAMPLE, IN * RESPONSE TO THE MESSAGE: 5 = ?, THE RESPONSE 6 INDICATES THAT * THE LOGICAL UNIT NO. 5 IS TO USE DEVICE 6 IN EQT. * WHEREAS THE RESPONSE 6,2 INDICATES THAT THE * LOGICAL UNIT NO. 5 IS TO USE SUBCHANNEL 2 OF * DEVICE 6 IN EQT. * * * THE INT RECORDS HAVE ONE OF THE FOLLOWING FORMATS: * * N1,EQT,N2 * N1,PRG,NAME * N1,ENT,ENTRY * N1,ABS,N3 * * N1 = CHANNEL NO. (2 OCTAL DIGITS - MUST BE IN INCREASING ORDER) * EXCEPTION: IF N1 = 04 (POWER - FAIL), * THIS ENTRY DOES NOT HAVE TO BE IN ORDER. ALSO, * ONLY AN ENT OR AN ABS TYPE ENTRY IS ACCEPTED * ]NLH FOR N1 = 04. * N2 = EQT NO. * NAME = PROGRAM NAME TO BE SCHEDULED * ENTRY = ENTRY POINT TO WHICH TRANSFER IS TO BE MADE * N3 = ABSOLUTE VALUE (6 OCTAL DIGITS) 1N* * GENIO CLA STA IDNOS ID'S MADE STA STRPN START UP PROGRAM FLAG STA CEQT NOS OF EQT'S STA PROCT NOS OF INT PROG ENTRIES STA TEQCT #EQTX AREAS OF CONCERN NOP SPACE NEW LINE LDA AEQTX STA TEQTX LDA .MEM3 FWAM STA AEQT EQT STARTING ADDRESS STA PPREL LDA P7 PRINT: LDB MES25 "EQT TBL" JSB PRINT NOP SPACE NEW LINE * SEQT NOP SPACE LDA CEQT EQT COUNT INA LDB MES6A STUFF INTO PRINT BUFFER JSB STFNM LDA P9 PRINT: LDB MES6 "EQT XX =?" JSB READ AND INPUT DRIVER REQUEST LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA PTERM CHARS= END ? JMP SSQTI YES, TRY TO END CPA REQT REPEAT? JMP GENIO YES * JSB GINIT INITIALIZE BUFFER SCAN LDA P2 JSB GETOC GET 2 OCTAL DIGITS, CONVERT JMP IOERR INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP CLDBU YES - SET CHNL NO., CLEAR D,B,U IOERR LDA ERR24 SET CODE = INVALID CHNL IN EQT JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * CLDBU LDB OCTNO GET I/O CHANNEL NO. STB IOADD SET I/O ADDRESS ADB N8 IS CHAN EQ. LESS THAN 10? SSB JMP IOERR YES, CHANNEL ERROR CLA STA TIMWD CLEAR TIME WORD STA IODMA CLEAR DMA FLAG STA IOBUF CLEAR AUTOMATIC BUFFERING FLAG LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF AND A REG. CPA CHRDV CHAR = DV? CCA,RSS YES - CONTINUE JMP DVERR INVALID DRIVER NAME JSB GETNA GET NEXT CHAR IN TBUF AND A REG. CPA ASCR DVRXX ? LDA ASC. ALF,ALF AND M177 CONSERVE ONLY LOWER HALF STA TBUF LDA ASIDR,I AND M7400 IO;R TBUF STA ASIDR,I LDA ASCDR,I AND M7400 IOR TBUF STA ASCDR,I JMP STYPE YES - GET DRIVER TYPE DVERR LDA ERR25 SET CODE = INVALID DRIVER NAME JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD STYPE LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF LDA TBUF STA ASTYP SAVE 2 ASCII CHARS FOR I.XX,C.XX STA ASCYP SAVE FOR C.XX COMPARE CCA ADA CURAL ADJUST CURRENT LBUF ADDR STA CURAL RESET CURAL TO CONVERT TYPE LDA P2 JSB GETOC GET 2 OCTAL CHARS, CONVERT JMP DVERR INVALID DRIVER NAME LDB OCTNO GET DRIVER TYPE BLF,BLF ROTATE TO UPPER B STB IOTYP SET DRIVER TYPE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP LISCN SCAN FOR I.XX, C.XX CPA BLANK CHAR = BLANK? CCA,RSS YES - CONTINUE JMP DVERR NO - INVALID DRIVER NAME * STA DFLAG SET DMA-IN FLAG STA TFLAG SET TIME-OUT FLAG STA EQXCT SET EQTX FLAG STA BFLAG SET BUFFERING-IN FLAG * INDBU CCA STA CMFLG SET COMMA FLAG = NO COMMA IN JSB GETAL GET NEXT CHAR FROM LBUF CPA CHARD CHAR = D? JMP SEDMA YES - SET DMA CODE CPA CHARB CHAR = B? JMP SETBU YES - SET BUFFERING CODE CPA CHART CHAR = T? JMP SETIM YES - SET TIME-OUT FLAG CPA CHARX "X" ? JMP STEQX YES, ALLOW EQT EXTENSION UNERR LDA ERR10 SET CODE = INVALID D,B,T JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * SETIM ISZ TFLAG SKIP - FIRST T ENTERED JMP UNERR DUPLICATE T'S ENTERED JSB GETAL GET NEXT CHAR CPA AEQUL IS IT "=" ? RSS YES ACCEPT TIME VALUE JMP UNERR NO, ITS AN ERROR LDA N5 5 CHAR VALUE JSB GETOC FETCH TIME OUT TIME Vg JMP UNERR NUMBER IS NO GOOD SZA WAS ZERO INPUT? CMA ONE'S COMPLEMENT FOR THAT RTS STA TIMWD SAVE FOR OUTPUT EQTST JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP LISCN SCAN FOR I.XX, C.XX CPA BLANK CHAR = COMMA? JMP INDBU YES - GET NEXT D,B,U, ENTRY JMP UNERR NO - INVALID D,B,U CHARACTER * SEDMA ISZ DFLAG SKIP - FIRST D ENTERED JMP UNERR DUPLICATE D'S ENTERED LDA MSIGN SET BIT 15 = 1 FOR DMA FLAG STA IODMA SET DMA CODE JMP EQTST TEST FOR NEXT OPERAND * SETBU ISZ BFLAG SKIP - FIRST B ENTERED JMP UNERR DUPLICATE B'S ENTERED LDA BIT14 SET BIT14 = 1 STA IOBUF SET AUTOMATIC BUFFERING CODE JMP EQTST TEST FOR NEXT OPERAND * STEQX JSB GETAL GET CHAR CPA AEQUL "="? ISZ EQXCT YES, 1ST TIME THROUGH? JMP UNERR NO, LOSE!! LDA P30 CPA TEQCT ARBITRARY LIMIT <30 EQTX JMP UNERR ENTRIES PER SYASTEM!! LDA N5 GET EQTX AREA SIZE JSB GETOC JMP UNERR NOT # STA EQXCT JMP EQTST * LISCN LDB ASIDR ADDRESS OF I.XX BUFFER JSB SSTBL IS IT IN THE SYMBOL TABLE? JMP DVERR NO LDA LST4 YES, GET THE ADDRESS LDA A,I STA I.XX SAVE FOR OUTPUT LDB ASCDR ADDRESS OF C.XX BUFFER JSB SSTBL IS IT IN SYMBOL TABLE? JMP NOCXX NO, USE ADDRESS OF I.XX LDA LST4 YES, GET ADDRESS LDA A,I STCXX STA C.XX SAVE DRIVER EXIT POINT * LDB ALBUF CLEAR OUTPUT BUFFER JSB BUFCL OCT 0 LDA IODMA GET DMA CODE IOR IOBUF ADD BUFFERING CODE IOR IOADD ADD CHANNEL NO. STA LBUF+3 OUTPUT BUFFER LDA I.XX STA LBUF+1 INT. ADDRESS LDA C.XX STA LBUF+2 COMPLETE ADDRESS * LDA IOTYP GET EQUIPMENT TYPE CODE AND M7000 ISOLATE UPPER 7 BITS SZA SKIP - TYPE = 0,I CLA,RSS SET STATUS = 0, SKIP LDA BLANK SET STATUS = 40(8) IOR IOTYP ADD EQUIPMENT TYPE CODE STA LBUF+4 LDA EQXCT SSA,RSS EQTX SPECIFIED? SZA,RSS JMP LISC1 NO. STA LBUF+11 POST @EQT12 STA TEQTX,I ISZ TEQTX LDA PPREL & ADA P12 STA TEQTX,I SAVE EQT13 ADDR ISZ TEQTX FOR LATER USE ISZ TEQCT LISC1 LDA TIMWD WAS A TIME INPUT? SZA STA LBUF+13 YES, SAVE IT IN EQT LDA PPREL GET CURRENT EQT ADDRESS LDB A ADB P14 ADDRESS OF END OF EQT STB PPREL JSB SETCR OUTPUT IN ABS ISZ PPREL BUMP TO NEXT EQT ENTRY ISZ CEQT INCR EQT ENTRY COUNT JMP SEQT PROCESS NEXT EQT RECORD * SPC 1 NOCXX LDA I.XX C.XX NOT FOUND SO USE JMP STCXX I.XX ADDRESS * SSQTI LDA CEQT ANY EQT'S BEEN LOADED? SZA JMP XEQTX YES, CAN END LDA ERR10 NO,AT LEAST ONE REQUIRED JSB ERROR PRINT: "ERR PA" JMP SEQT START OVER * XEQTX LDA TEQCT CMA,INA,SZA,RSS ANY EQTX AREA? JMP SSQT NO, ON TO SQT SETUP STA TEQCT LDB ALBUF GET ADDRESS OF 'LBUF'. JSB BUFCL GO TO CLEAR THE BUFFER, IN NOP PREPARATION FOR PUNCHING EQTX AREA. LDA AEQTX STA TEQTX XEQX1 LDA PPREL POST EQTX ADDR STA LBUF & ADA TEQTX,I RESERVE SPACE STA PPREL LDA TEQTX,I GET THE CURRENT EQTX SIZE, STA EQXCT AND SAVE IT TEMPORARILY. ISZ TEQTX LDA TEQTX,I EQT13=EQTX ADDR ISZ TEQTX LDB 0 JSB SETCR ISSUE NOW * CLA LDB LBUF STB XEXTM STA LBUF * XLOOP LDA EQXCT GET THE EXTENSION SIZE. SZA,RSS PUNCHING COMPLETED? JMP XDONE YES. GO TO PROCESS NEXT EXTENSION. ADA N64 NO.ADD MAX. SIZE OF DUMMY BUFFER. SSA EXTENSION AREA LARGER THAN 'LBUF'? JMP XNEG NO. GO TO PUNCH THE NULL WORDS. STA EQXCT YES. SAVE THE REMAINDER. LDA B GET THE EQT EXTENSION ADDRESS. ADB P63 FORM LAST ADDRESS: THIS RECORD. JSB SETCR GO TO PUNCH THE NULL WORDS. LDB XEXTM GET CURRENT EXTENSION ADDRESS. ADB P64 ADD OFFSET FOR AREA ALREADY PUNCHED. STB XEXTM SAVE ADDRESS OF NEXT AREA TO BE PUNCHED. JMP XLOOP GO BACK TO PUNCH THE REMAINDER. * XNEG LDA B GET THE EQT EXTENSION ADDRESS. ADB N1 COMPUTE THE LAST ADB EQXCT ADDRESS TO BE PUNCHED. JSB SETCR GO TO PUNCH THE NULL WORDS. * XDONE ISZ TEQCT JMP XEQX1 * * * SET DEVICE REFERENCE TABLE (SQT) * SSQT LDA PPREL UPDATE REL ADDRESS STA ASQT SAVE SQT ADDRESS CLA,INA STA CSQT SET SQT COUNT = 1 LDA P13 LDB MES26 MES26 = ADDR: *DEV REF TABLE JSB PRINT PRINT: * DEVICE REFERENCE TABLE * DEVRE LDA CSQT GET CURRENT DEV REF NO. LDB MES28 JSB STFNM STUFF NUM IN BUFFER NOP SPACE NEW LINE LDA P11 LDB MES28 MES28 = ADDR: XX = EQT #? JSB READ GET SQT RECORD FROM TTY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA PTERM CHARS = /E? JMP SINTI YES - SET INTERRUPT TABLE CPA RDRT REPEAT DRT? JMP SSQT YES, START OVER CPA REQT REPEAT EQT? JMP GENIO YES, GO BACK JSB GINIT RE-INITIALIZE LBUF SCAN LDA N3 JSB GETOC GET 2 DECIMAL DIGITS, CONVERT JMP DRERR INVALID DIGIT ENTERED STA TEMPL SAVE DEV. REF. NO. SZA,RSS IF NO CHANNEL JMP NOSUB IGNOR SUBCHANNEL LDA CMFLG COMMA ENCOUNTERED? SZA YES - GO GET SUBCHANNEL JMP NOSUB NO - DEFAULT IT TO ZERO LDA N2 JSB GETOC GET 2 DEC DIGITS JMP DRERR JSB GETAL GET NEXT CHAR CPA ZERO END OF BUFFER? RSS YES JMP DRERR NO, SHOULD BE BUT ISN'T LDA OCTNO GET SUB CHANNEL CMA,INA ADA P31 SSA <=31 (10) ?? JMP DRERR NO, LOSE!! LDA OCTNO OK, RECOVER SUB-CHANNEL RSS SKIP OVER DEFAULT NOSUB CLA DEFAULT TO ZERO STA TEMPS SAVE SUB CHANNEL ALF,ALF SET SUBCHANNEL NO. ALF,RAR INTO BITS 15 - 11 STA TEMPH SAVE SUBCHANNEL NO. LDA TEMPL GET DEV. REF. NO. CMA,INA COMPLEMENT ADA CEQT ADD NO. EQT ENTRIES SSA SKIP IF VALID DEV. REF NO. JMP DRERR INVALID DEV. REF. NO. (NO EQT) LDA TEMPL GET DEV. REF NO. LDB CSQT GET CURRENT SQT NO. CPB P1 FIRST ENTRY? RSS YES - CONTINUE JMP SETQT PUT OUT DEV REF NO. TO SQT SZA,RSS SKIP IF DEV REF IS NOT ZERO JMP DRERR INVALID DEV. REF. NO. CMA,INA COMPLEMENT CURRENT DEV. REF. NO. LDB AEQT GET ADDRESS OF EQT INA,SZA,RSS SKIP - DEV. REF. NOT 1 JMP *+4 SET TTY CHANNEL NO. = FIRST EQT ADB P15 ADJUST CURRENT EQT ADDRESS INA,SZA SKIP - EQT FOUND JMP *-2 CONTINUE CURRENT EQT SEARCH STB LBUF+1 SET EQT ADDR IN TTY CHANNEL LDA TBCHN TBG CHANNEL STA LBUF PUT IN OUT PUT BUFFER LDA TBG ADDRESS WHERE TO GO LDB SYSTY JSB SETCR OUTPUT IN ABSOLUTE * SETQT LDA TEMPL GET DEV. REF. NO. IOR TEMPH SET IN SUBCHANNEL NO. STA LBUF FOR OUTPUT LDA PPREL ABS ADDRESS LDB A JSB SETCR GO BUILD ABS DATA ISZ PPREL INCR CURRENT RELOC ADDRESS ISZ CSQT INCR CURRENT SQT COUNT JMP DEVRE GET NEXT SQT ENTRY DRERR LDA ERR27 SET CODE = INVALID DEV. REF. NO. JSB ERROR PRINT DIAGNOSTIC JMP DEVRE REPEAT INPUT * SINTI LDA CSQT HAVE ANY DRT'S BEEN ENTERED? ADA N1 STA CSQT SSA,RSS JMP SINTT YES, GO TO INT PROCESSING JMP DRERR NO, ERROR , START OVER * SKP * ROUTINE TO INPUT TO BUFFER FROM TTY * A REG=LENGTH...POSITVE BYTES, NEGATIVE WORDS * B REG=ADDRESS OF MESSAGE * WILL PUT RESPONSE IN LBUF * * MAKE A CALL TO PRMT * CALLING SEQUENCE IS AS FOLLOWS * JSB PRMT * DEF *+6 * DEF MESSAGE BUFFER ADDRESS * DEF LENGTH OF MESSAGE BUFFER (POSITIVE CHAR) * DEF INPUT BUFFER ADDRESS * DEF MAX LENGTH * DEF ERROR PARSE ADDRESS * READ NOP STA RTMP1 STB RTMP2 SAVE LENGTH AND ADD OF MESSAGE JSB PRMT GO TO MAIN FOR INPUT DEF *+6 RTMP2 NOP DEF RTMP1 DEF LBUF DEF P64 DEF PARSA STA PARNO SAVE LENGTH OF INPUT BUFFER INA CONVERT TO WORD ADDRESS CLE,ERA ADA ALBUF GET TO END OF BUFFER CLB PUT ZERO AT END OF BUFFER STB A,I JSB GINIT INITIALIZE LBUF SCAN JMP READ,I AND RETURN RTMP1 NOP * SKP * * GET CHAR FROM LBUF, RETURN IN A * * THE FOLLOWING SUBROUTINE SUPPLIES THE CHARACTERS FOR * GETNA AND GETOC. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB GETAL * * RETURN: * A = CURRENT CHARACTER * B = DESTROYED * GETAL NOP LDA CMFLG CMFLG = COMMA-IN FLAG SZA,RSS SKIP IF NO COMMA IN JMP BLRET RETURN BLANK LDB BUFUL GET U/L FLAG IGNOR LDA CURAL,I GET CHAR FROM LBUF SZB SKIP IF LOWER CHAR ALF,ALF ROTATE TO LOWER AND M377 ISOLATE LOWER CHAR CPA ZERO END OF BUFFER? JMP GETAL,I YES - RETURN WITH ZERO CMB,SZB RESET U/L, SKIP IF UPPER CHAR ISZ CURAL INCR LBUF ADDRESS CPA BLANK CHAR = BLANK? JMP IGNOR IGNORE BLANKS STB BUFUL SAVE U/L FLAG CPA COMMA CHAR = COMMA? ISZ CMFLG RESET FLAG TO SHOW COMMA IN JMP GETAL,I RETURN WITH NON-BLANK CHAR BLRET LDA BLANK REPLACE WITH BLANK CHAR JMP GETAL,I RETURN WITH BLANK SKP * * MOVE ALPHA FROM LBUF TO TBUF * * THE FOLLOWING SUBROUTINE MOVES THE CHARACTERS FROM LBUF * TO TBUF. * * CALLING SEQUENCE: * A = MAX. NO. OF CHARACTERS TO BE MOVED. THE SIGN OF A * DESIGNATES THE POSITION OF THE FIRST CHARACTER. * IF THE SIGN OF A IS POSITIVE, THE FIRST CHAR IS TO * BE MOVED TO THE LOW CHAR IN TBUF. IF A IS NEGATIVE, THE * FIRST CHARACTER IS TO BE MOVED TO THE UPPER CHAR IN TBUF. * B = IGNORED * JSB GETNA * * RETURN: * A = FIRST CHAR (IF ONLY 1 CHAR) OR FIRST 2 CHARS MOVED. * B = DESTROYED * GETNA NOP CCE,SSA,RSS SET E = 1 (EVEN) POSITION CMA,CLE,INA SET E = 0 (ODD) POSITION - COMP STA MAXC MAXC = MAXIMUM NO. CHARS LDA ATBUF ATBUF = ADDR OF TBUF STA CURAT SET CURRENT TBUF ADDRESS CLB STB TBUF CLEAR WORD 1 OF TBUF CCA STA CMFLG SET COMMA-IN FLAG SEZ,RSS SKIP - ODD POSITION JMP OCHAR BEGIN WITH ODD CHARACTER NEXTC JSB GETAL GET CHAR FROM LBUF CPA ZERO END OF BUFFER? LDA BLANK YES - REPLACE CHAR WITH BLANK ALF,ALF ROTATE TO UPPER A STA CURAT,I SET CHARACTER IN TBUF ISZ MAXC CHECK FOR ALL CHARS IN JMP OCHAR GET ODD CHAR FROM LBUF LDA TBUF GET FIRST 2 TRANSFERRED CHARS JMP GETNA,I YES - RETURN OCHAR JSB GETAL GET CHAR FROM LBUF CPA ZERO  END OF BUFFER? LDA BLANK REPLACE ZERO CHAR WITH BLANK IOR CURAT,I ADD TO UPPER CHAR IN TBUF STA CURAT,I SET CHARS IN TBUF ISZ CURAT INCR TBUF ADDRESS ISZ MAXC CHECK FOR ALL CHARS IN JMP NEXTC NO - TRY NEXT UPPER CHAR LDA TBUF GET FIRST 2 TRANSFERRED CHARS JMP GETNA,I RETURN SKP * OUTPUT ID SEGMENT IN ABS * * GENERATE ID SEGMENT * * THIS ROUTINE WILL BUILD AN ID SEGMENT IN THE OUTPUT * BUFFER (LBUF) AREA. THE BUFFER IS CLEARED AND STUFFED * WITH DATA (FROM THE PNAME TABLE). * * CALLING SEQUENCE: * A = ABSOLUTE ADDRESS OF SEGMENT * B = LIST LINK ADDRESS TO NEXT SEGMENT * JSB GENID * * * RETURN: A CONTAINS THE ADDRESS OF THE ID SEGMENT * (FOR THE OUTPUT) * B IS DESTROYED. * GENID NOP STA IDSAV STB LNKSV LDB ALBUF BUFFER ADDRESS JSB BUFCL CLEAR BUFFER OCT 0 LDA LNKSV GET LINK ADDRESS STA LBUF PUT IN BUFFER LDB PNAMA GET DISPLACEMENT INTO ID SEGMENT ADB P7 GET TO WORD 7 LDA B,I GET PRIORITY SZA,RSS LDA P99 DEFAULT TO 99 STA LBUF+6 LDA .XFER ENTRY POINT STA LBUF+7 LDA PNAME NAME 1,2 STA LBUF+12 LDB PNAMA INB LDA B,I NAME 3,4 STA LBUF+13 INB LDA B,I NAME 5, BLNK AND M7400 MASK OUT BLANK INA MAKE TYPE 1 STA LBUF+14 LDB PNAMA ADB P8 GET TO WORD 8 OF NAM RECORD LDA B,I RESOLUTION ALF,ALF ALF,RAL SHIFT INTO PLACE INB IOR B,I MURGE EXEC MULT STA LBUF+17 PUT IN BUFFER INB LDA B,I HOURS SZA,RSS LDA N24 DEFAULT TO 24 STA LBUF+21 INB LDA B,I MINUTES SZA,RSS J LDA N60 DEFAULT TO 60 STA LBUF+20 INB LDA B,I SECONDS SZA,RSS LDA N60 DEFAULT TO 60 STA LBUF+19 INB LDA B,I TENS OF SEC SZA,RSS LDA N100 DEFAULT TO 100 STA LBUF+18 LDA .MEM3 LOW MAIN STA LBUF+22 LDA LOCC HIGH MAIN STA LBUF+23 LDA .MEM1 LOW BASE STA LBUF+24 LDA BPLOC HIGH BASE STA LBUF+25 LDA LOCC UPDATE FWAM STA .MEM3 FWAM LDA BPLOC UPDATE FWABP STA .MEM1 FWABP CLA STA LOCC CLEAR LOCC STA BPLOC " BPLOC LDA IDSAV ABS ADDRESS JMP GENID,I RETURN * IDSAV BSS 1 LNKSV BSS 1 * * * CONVERT OCT/DEC ASCII TO BINARY * * THE GETOC SUBROUTINE CONVERTS THE NEXT CHARACTERS IN LBUF FROM * ASCII (DECIMAL OR OCTAL) TO THEIR BINARY VALUE. * * CALLING SEQUENCE: * A = MAX. NO. OF CHARS IN CONVERSION REQUEST. IF A IS * POSITIVE, THE REQUEST IS FOR OCTAL; IF A IS NEGATIVE, * THE REQUEST IS FOR DECIMAL. * B = IGNORED * JSB GETOC * * RETURN: * (N+1): INVALID DIGIT OR OVERFLOW IN CONVERSION * (N+2): A = CONVERTED NO. * B = DESTROYED * GETOC NOP LDB L10 GET OCTAL RANGE SSA SKIP IF OCTAL REQUEST LDB L12 GET DECIMAL RANGE STB DRANG SET DIGIT RANGE SSA,RSS SKIP IF DECIMAL REQUEST CMA,INA SET REQUEST COUNT TO NEGATIVE STA MAXC SET MAX NO. OF DIGITS CCA STA DIFLG SET DATA-IN FLAG = NO DATA IN STA CMFLG SET COMMA-IN FLAG CLA STA OCTNO OCTNO = OCTAL NUMBER GETNX JSB GETAL GET CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP ENDOC YES - RETURN CPA BLANK CHAR = BLANK? (COMMA IN) JMP ENDOC YES - RETURN ADA L60 SUBTRACT 60B FROM CHAR STA TCHAR SAVE CHAR SSA SKIP IF VALID LOWER LIMIT JMP DGERR INVALID DIGIT ADA DRANG ADD DIGIT RANGE CLE,SSA,RSS CLEAR E - SKIP IF VALID DIGIT JMP DGERR INVALID DIGIT ISZ DIFLG INCR DATA-IN FLAG, SKIP NOP LDA OCTNO GET PREVIOUS OCTAL NO. ADA A SET A = OCTNO X 2 ADA A SET A = OCTNO X 4 LDB DRANG GET DIGIT RANGE CPB L12 RANGE = DECIMAL? ADA OCTNO SET A = OCTNO X 5 ADA A SET A = OCTNO X 10/8 ADA TCHAR SET A = NEW OCTAL NO. STA OCTNO SAVE NEW OCTAL NO. SEZ TEST FOR OVERFLOW JMP DGERR INVALID NO. ISZ MAXC SKIP IF ALL DIGITS PROCESSED JMP GETNX GET NEXT DECIMAL DIGIT ISZ GETOC INCR RETURN ADDRESS LDA OCTNO GET OCTAL EQUIVALENT DGERR JMP GETOC,I RETURN ENDOC ISZ DIFLG SKIP - NO DATA IN JMP *-4 DATA IN - NORMAL RETURN JMP GETOC,I RETURN - ERROR SKP * * * ROUTINE TO CONVERT THE OCTAL NUMBER IN A TO * ASCII AND STUFF THE 2 LOW ORDER DIGITS INTO A BUFFER * ADDRESSED BY B. LEADING ZEROS ARE SUPPRESED * * CALLING SEQUENCE: * * A = OCTAL NUMBER * B = BUFFER ADDRESS * * RETURN: A AND B ARE DESTROYED * STFNM NOP STB STFAD SAVE FINAL ADDRESS LDB ATBUF TEMP BUFFER ADDRESS CMA,INA NEG FOR DECIMAL CONVERT JSB CONVD LDA TBUF+2 LEAST 2 DIGITS AND M7400 ISOLATE UPPER CHAR CPA UASCZ CHAR = ASCII ZERO? LDA UBLNK YES, REPLACE WITH BLANK STA B SAVE UPPER CHAR LDA TBUF+2 GET ORIG DIGITS AND M177 ISOLATE LOWER CHAR IOR B MURGE STA STFAD,I STORE IN BUFFER JMP STFNM,I * STFAD BSS 1 * * LOAD PROG NAME INTO TABLE * * THE 3 WORD PROGRAM NAME IS PUT INTO THE RTSGN PROG * TABLE. THE NAMES ARE LOADED FROM THE TOP DOWN. * * CALLING SEQUENCE: * A = ADDRESS OF PROGRAM NAME * B = IGNORED * JSB LDIPX * * RETURN: A AND B ARE DESTROYED * LDIPX NOP STA IPXSV SAVE PROG NAME ADDRESS JSB INIPX INITIALIZE TO START OF TABLE LDA PROCT NUMBER OF ENTRIES ALS MULT X2 ADA PROCT PLUS ONE TO MAKE IT X3 CMA,INA ADA BIDNT BUILD NEXT NAME ADDRESS STA BIDNT FOR SAVE LDA EPGTA FIND END OF SYMBOL TABLE LDB A LDA BIDNT CHECH FOR OVERFLOW INTO LST CMA,INA ADA B SSA,RSS HAS IT OVERFLOWED? JMP LSERR YES JSB IPX INITIALIZE IP POINTERS LDA IPXSV,I GET N1-N2 STA IP1,I PUT IN TABLE ISZ IPXSV BUMP POINTER LDA IPXSV,I GET N3-N4 STA IP2,I SAVE ISZ IPXSV LDA IPXSV,I GET N5-XX STA IP3,I SAVE ISZ PROCT BUMP NUMBER OF NAMES JMP LDIPX,I RETURN * SPC 2 * * HERE ON OVERFLOW ERRORS * LSERR LDA ERRTB JSB ERROR TELL OPERATOR NO USE JSB GTOUT TERMINATE...GET OUT SPC 1 ERRTB ASC 1,TB IDENT/LST OVERFLOW SKP * * SEARCH RTSGN PROG TABLE * * THIS IS A MULTIPLE ENTRY ROUTINE WHICH WILL EITHER * SEARCH FOR A NAME OR CONTINUE FROM THE LAST FIND. * * CALLING SEQUENCE: * A = ADDRESS OF NAME (3WORD) * B = IGNORED * JSB SRIPX * * RETURN: * (N+1) PROGRAM NAME WAS FOUND IN TABLE, IN IP1-3 * (N+2) REACHED THE END OF THE PROGRAM TABLE * SRIPX NOP LDB WDCNT SEARCH OR CONTINUE? SZB JMP SRIP1 CONTINUE STA SRISV INIT SEARCH JSB INIPX SET UP IP POINTERS LDA PROCT NUMBER OF ENTRIES CMA STA WDCNT SAVE FOR LOOPING SRIP1 ISZ WDCNT ALL DONE? JMP *+3 NO, GO COMPARE NAMES ISZ SRIPX NLH YES, BUMP RETURN JMP SRIPX,I JSB IPX SET POINTERS LDB IP1 NAME IN TABLE LDA SRISV,I LOOK FOR NAME JSB NACMP GO COMPARE JMP SRIP1 DOSN'T COMPARE, LOOK NEXT JMP SRIPX,I DOES COMPARE, RETURN * N SKP * * INITIALIZE CHAR TRANSFER * * THE GINIT SUBROUTINE SETS THE CURRENT ADDRESS AND UPPER/LOWER * FLAG FOR SCANNING LBUF. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB GINIT * * RETURN : CONTENTS OF A AND B ARE DESTROYED * GINIT NOP LDA ALBUF ALBUF = ADDR OF LBUF STA CURAL SET CURRENT LBUF ADDRESS CCB STB BUFUL BUFUL = BUFFER U/L FLAG JMP GINIT,I RETURN * * CONVERT A TO ASCII AT B * * THE CONVD SUBROUTINE CONVERTS THE CONTENTS OF A * INTO ASCII (DECIMAL OR OCTAL) AT THE LOCATION SPECIFIED * BY B. THE CONVERTED RESULT REQUIRES 3 WORDS, AND IS * IN THE FORMAT: XXXXX, WITH A SPACE IN THE FIRST POSITION. * * CALLING SEQUENCE: * A = NO. TO BE CONVERTED. IF THE SIGN OF A IS POS., * THE CONVERSION IS TO BE IN OCTAL; IF NEGATIVE, * IN DECIMAL. * B = ADDRESS OF CORE LOCATION FOR CONVERTED RESULT * JSB CONVD * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * CONVD NOP STB CURAT SET MESSAGE ADDRESS LDB OPWRS GET ADDR OF OCTAL POWERS SSA SKIP IF OCTAL CONV REQUIRED LDB DPWRS GET ADDRESS OF DECIMAL POWERS STB RANAD SET POWER RANGE ADDRESS SSA,RSS SKIP IF NEGATIVE (DECIMAL) CMA,INA CONVERT NUMBER TO NEGATIVE STA B PUT NUMBER IN B (REMAINDER) LDA N2 STA TCNT SET CONVERSION COUNTER JSB GETD GET FIRST DIGIT IOR UBLNK ADD BLANK TO FIRST CHAR STA CURAT,I SAVE FIRST BLANK, CHARACTER ISZ CURAT INCR MESSAGE ADDRESS NEXTD JSB GETD GET NEXT DIGIT ALF,ALF ROTATE TO UPPER STA CURAT,I SAVE UPPER CHARACTER JSB GETD GET NEXT DIGIT IOR CURAT,I ADD UPPER CHAR STA CURAT,I SAVE NEXT 2 CHARACTERS ISZ CURAT INCR MESSAGE ADDRESS ISZ TCNT SKIP - 5 DIGITS IN JMP kNEXTD NO - CONTINUE WITH NEXT DIGIT JMP CONVD,I YES - RETURN * * SET PARAMETERS * * THE PARAMETER INPUT SECTION PERMITS ALTERATION (OR INTRODUCTION) * OF THE NAME, PRIORITY, AND EXECUTION INTERVAL FOR EACH PROGRAM. * EACH PARAMETER RECORD HAS ONE OF THE FOLLOWING FORMATS: * * NAME * NAME,PRIORITY * NAME,PRIORITY,EXECUTION INTERVAL * * PRIORITY = 2 DECIMAL DIGITS (0-99) * EXECUTION INTERVAL = 6 OPERANDS * 1 - RESOLUTION CODE (2 DECIMAL DIGITS) * 2 - EXECUTION MULTIPLE (5 DECIMAL DIGITS) * 3 - HOURS (2 DECIMAL DIGITS) * 4 - MINUTES (2 DECIMAL DIGITS) * 5 - SECONDS (2 DECIMAL DIGITS) * 6 - 10'S MULLISECONDS (2 DECIMAL DIGITS) * * * RETURN: A AND B ARE DESTROYED * (N+1): SOME PARAMETERS WERE ENTERED * (N+2): NO PARAMETERS WERE ENTERED * * TBUF CONTAINS THE ENTERED NAME * * PARAM NOP DST PRSAV TEMPORARILY SAVE PROMPT DATA. JSB READ GET ASCII PARAMETER RECORD SZA,RSS SKIP IF CHARS INPUT JMP PARAM+1 REPEAT PARAMETER INPUT STA PARNO SAVE PARAMETER RECORD LENGTH CLA STA ID5 STA ID6 STA ID7 STA ID8 STA ID9 STA ID10 STA ID11 JSB GETAL CPA M60 RSS JMP *+3 ISZ PARAM JMP PARAM,I JSB GINIT INITIALIZE BUFFER SCAN LDA N5 JSB GETNA MOVE CHARS FROM LBUF TO TBUF JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = BLANK?(DELIMITER = COMMA) JMP SETYP YES - CONTINUE CPA ZERO JMP PARAM,I * PANER LDA ERR09 PARAMETER NAME ERROR JMP PARER * * SET NEW PROGRAM PRIORITY SETYP LDA N2 SET COUNT FOR DECIMAL CONVERSION JSB GETOC CONVERT TO OCTAL JMP PAPER PRIORITY ERROR JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO ? (END OF BUFFER) RSS >. YES - CONTINUE CPA BLANK CHAR = BLANK?(DELIMITER = COMMA) JMP SETNR SET PRIORITY PAPER LDA ERR11 PARAMETER PRIORITY ERROR JMP PARER * SETNR LDB OCTNO GET PRIORITY STB ID5 SET NEW PRIORITY JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO ? (END OF BUFFER) JMP PARAM,I YES,RETURN * * GET RESOLUTION CODE LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF STA ID6 SET IN IDENT 6 * * GET EXECUTION MULTIPLE LDA N5 SET COUNT FOR DECIMAL CONVERSION JSB EXINT GET DIGITS FROM LBUF AND M1600 ISOLATE UPPER 3 BITS IN A SZA SKIP IF VALID MULTIPLE JMP PAIER INVALID EXECUTION INTERV FORMAT LDA OCTNO GET CONVERTED NUMBER STA ID7 * * GET HOURS LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF ADA N24 STA ID8 * * GET MINUTES LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF ADA N60 STA ID9 * * GET SECONDS LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF ADA N60 STA ID10 * * GET TENS OF MILLISECONDS LDA N2 SET FOR DECIMAL CONVERSION JSB GETOC CONVERT TO OCTAL JMP PAIER INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = 0? (END OF BUFFER) RSS YES - CONTINUE JMP PAIER NO - INVALID DELIMITER LDA OCTNO ADA N100 STA ID11 JMP PARAM,I * * EXECUTION INTERVAL INPUT CONTROL EXINT NOP JSB GETOC CONVERT TO OCTAL JMP PAIER INVALID DIGIT q  JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = BLANK? (DELIMITER=COMMA) RSS YES - CONTINUE JMP PAIER NO - INVALID DELIMITER LDA OCTNO GET CONVERTED NUMBER JMP EXINT,I RETURN WITH NUMBER IN A PAIER LDA ERR12 PARAMETER INTERVAL ERROR * PARER JSB ERROR PRINT ERROR MESSAGE DLD PRSAV GET DATA FOR REPEAT OF PROMPT. JMP PARAM+1 RE-READ PARAMETER RECORD * PRSAV OCT 0,0 TEMPORARY PROMPT-DATA STORAGE. * GET DIGIT FOR CONVD * * GETD PROVIDES THE ASCII CHARACTERS FOR CONVD. * * CALLING SEQUENCE: * A = IGNORED * B = REMAINDER * JSB GETD * * RETURN: * A = ASCII DIGIT * B = IGNORED * GETD NOP CLA INCRA ADB RANAD,I ADD POWER CMB,SSB,INB,SZB SKIP - TRY NEXT HIGHER DIGIT JMP *+4 DIGIT FOUND INA INCR DIGIT CMB,INB RESTORE REMAINDER TO NEGATIVE JMP INCRA TRY HIGHER DIGIT ADB RANAD,I ADD POWER CMB,INB RESTORE REMAINDER ISZ RANAD INCR POWER LIST ADDRESS IOR M60 CONVERT TO ASCII JMP GETD,I RETURN WITH DIGIT IN A * * PNAME UPDATE * * THIS ROUTINE WILL UPDATE THE PARAMETERS IN THE * PNAME TABEL. THE SOURCE WILL BE FROM THE * "ENTR PRAMS" TABLE * * CALLING SEQUENCE: * A = SOURCE ADDRESS * B = IGNORED * JSB UPNAM * * RETURN: A AND B ARE DESTROYED * UPNAM NOP STA TEMP1 SAVE SOURCE ADDRESS LDA TEMP1,I GET PRIORITY LDB PNAMA GET ADDRESS OF PRAMS ADB P7 STA B,I YES ISZ TEMP1 LDA TEMP1,I GET RESOLUTION INB SZA STA B,I UPDATE ISZ TEMP1 LDA TEMP1,I EXEC MULT. INB SZA STA B,I ISZ TEMP1 LDA TEMP1,I HOURS INB SZA STA B,I ISZ TEMP1 LDA TEMP1,I MINUTES  INB SZA STA B,I ISZ TEMP1 LDA TEMP1,I SECONDS INB SZA STA B,I ISZ TEMP1 LDA TEMP1,I TENS OF MILLISECONDS INB SZA STA B,I JMP UPNAM,I RETURN * SKP MS28 ASC 6, = EQT #? MES6A DEF MES6I MES6 DEF *+1 ASC 2,EQT MES6I BSS 1 ASC 2, =? MES29 DEF *+1 ASC 4,INT TBL AYES OCT 131 ANO OCT 116 MES5 DEF *+1 ASC 7,STRT-UP PROG? MES7 DEF *+1 ASC 7,# WDS IN COMM? MES8 DEF *+1 ASC 7,REL USER PROGS MES9 DEF *+1 ASC 5,SNAPSHOT? MES10 DEF *+1 ASC 6,ENTER PRAMS MES11 DEF *+1 ASC 7,SCEGN FINISHED BNDS DEF *+1 ASC 4,-BOUNDS MEMOT DEF *+1 ASC 3,FWABP= ASC 3,LWABP= ASC 3,FWAM= ASC 3,LWAM= ASC 3,FWAC= ASC 3,LWAC= ASET DEF *+1 ASC 6,- SET BPLOCC ASTO ASC 2, TO ASTOA DEF ASTO ASLOC DEF *+1 ASC 2,LOCC ASSTL DEF *+1 ASC 8,-LINKS START AT ASPCE OCT 40 ACOMA OCT 26000 MES55 DEF *+1 ASC 10,INPUT SNAPFILE NAME? * * * PROGRAM CONSTANT FACTORS ZERO OCT 0 N1 DEC -1 N2 DEC -2 N3 DEC -3 N4 DEC -4 N5 DEC -5 N6 DEC -6 N8 DEC -8 N9 DEC -9 N10 DEC -10 N24 DEC -24 N28 DEC -28 N60 DEC -60 N64 DEC -64 N100 DEC -100 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P8 DEC 8 P9 DEC 9 P11 DEC 11 P12 DEC 12 P13 DEC 13 P14 DEC 14 P15 DEC 15 P20 DEC 20 P27 DEC 27 P30 DEC 30 P31 DEC 31 P28 DEC 28 P58 DEC 58 P63 DEC 63 P64 DEC 64 P99 DEC 99 P1647 OCT 1647 L10 EQU N8 L12 EQU N10 L60 OCT -60 M60 OCT 60 M77 OCT 77 M177 OCT 177 M377 OCT 377 M1600 OCT 160000 M2000 OCT 2000 M7400 OCT 177400 M7000 OCT 177000 SPC 3 IDAA DEF ID5 STRPA DEF STRPN ASIDR DEF *+1 ASC 1,I. ASTYP BSS 1 UBLNK OCT 20000 JMP3I JMP 3,#I ASCDR DEF *+1 ASC 1,C. ASCYP BSS 1 OCT 20000 AEQUL OCT 75 SKP DPWRS DEF *+1 P0100 DEC 10000 P1000 DEC 1000 P100 DEC 100 P10 DEC 10 P1 DEC 1 OPWRS DEF *+1 M0100 OCT 10000 M1000 OCT 1000 M100 OCT 100 M10 OCT 10 OCT 1 CHRDV ASC 1,DV * SUP BLANK OCT 040 BLANK MSIGN OCT 100000 NEGATIVE SIGN * ?ADD DEF *+1 ASC 1,? UGCHR ASC 1,G ASCR OCT 51000 ASCII R IN UPPER HALF ASC. ASC 1,. SKP * INTERRPUT TABLE PROCESSOR * * SINTT NOP SPACE NEW LINE LDA PPREL GET CURRENT RELOCATION ADDR STA AINT SAVE INTERRUPT TABLE ADDRESS LDA P7 LDB MES29 MES29 = ADDR. * INT TABLE JSB PRINT PRINT: INT TBL LDA A$CIA $CIC ADDRESS IOR IJSB ADD JSB 0,I CODE STA JSCIC SET JSB CIC,I CODE LDB ALBUF GO STUFF BUFFER WITH JSB $CIC JSB BUFCL JSCIC OCT 0 STUFF DATA CLA STA PROCT LDA P5 PG ZERO INT START ADDRESS LDB LWABP CMB,INB ADB P58 SSB JMP *+3 LDB LWABP RSS LDB P58 ADDRESS FIRST HALF JSB SETCR OUTPUT JSB $CIC,I * LDA HLTB4 SET HLT 4 INTO LOC 4 STA LBUF TO OUTPUT BUFFER LDA P4 ADDRESS LDB A JSB SETCR OUTPUT HLT 4 LDB P6 GET ADDR OF FIRST INT LOCATION STB TBREL SET CURRENT BP ADDRESS * SETIN LDA P1 NEW LINE LDB ?ADD JSB READ GET INT RECORD FROM TTY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA PTERM CHARS = -E? JMP ENDIO YES - I/O TABLES COMPLETE CPA RINT REPEAT INTERRUPT? JMP SINTT YES CPA REQT GO BACK TO EQT? JMP GENIO YES CPA RDRT REPEAT DRT? JMP SSQT YES JSB GINIT RE-INITIALIZE LBUF SCAN LDA P2 JSB GETOC GET 2 OCWTAL DIGITS, CONVERT JMP CHERR INVALID INT CHANNEL NO. DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP SETCH SAVE INT CHANNEL NO. CHERR LDA ERR10 SET CODE = INVALID INT CHNL NO. JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * SETCH LDA OCTNO GET INT CHANNEL NO. STA INTCH SAVE CHANNEL NO. ADA N4 CHAN L.T. 4? SSA JMP CHERR YES, CHANNEL ERROR * LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA CHREQ CHARS = EQ? JMP INTEQ YES - PROCESS INT EQT RECORD CPA CHRPR CHARS = PR? JMP INTPR YES - PROCESS INT PRG RECORD CPA CHREN CHARS = EN? JMP INTEN YES - PROCESS INT ENT RECORD CPA CHRAB CHARS = AB? JMP INTAB YES - PROCESS INT ABS RECORD IMNEM LDA ERR09 SET CODE = INVALID INT MNEMONIC JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * INTEQ LDA N2 JSB GETNA MOVE NEXT 2 CHARS TO TBUF CPA UTCHR CHARS = T,BLANK? RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA N2 JSB GETOC GET 2 DECIMAL DIGITS, CONVERT JMP EQUER INVALID EQT NO. IN INT REC LDB OCTNO GET EQT TABLE ENTRY NO. CMB,INB,SZB,RSS SKIP - VALID LOWER LIMIT JMP EQUER INVALID EQT REFERENCE STB TCHAR SAVE EQT NO. ADB CEQT ADD UPPER EQT REF. NO. SSB,RSS SKIP - INVALID UPPER LIMIT JMP TSTIQ TEST FOR FIRST EQT REFERENCE EQUER LDA ERR31 SET CODE = INVALID EQT NO. JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * TSTIQ LDB TCHAR GET EQT REF. NO. LDA AEQT GET ADDR OF EQT INB,SZB,RSS SKIP - NOT FIRST EQT REFERENCE JMP SEQTI SET EQT ADDR IN INT TABLE ADA P15 ADJUST FOR NEXT EQT ENTRY ADDR INB,SZB SKIP - EQT A5DDRESS FOUND JMP *-2 CONTINUE EQT SEARCH SEQTI LDB JSCIC GET JSB CIC CODE JMP COMIN SET INTERRUPT TABLE, LOCATION * INTPR LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA UGCHR CHARS = G,BLANK? RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA TBREL FETCH CHANNEL CMA,INA ADA INTCH ASSENDING ORDER? SSA,SZA JMP IMNEM NO, ERROR LDA N5 JSB GETNA MOVE 5 CHARS TO TBUF LDA TBUF+2 NAME: 5 AND M7400 MASK OUT LOWER HALF IOR INTCH PUT IN CHN(SELECT CODE) STA TBUF+2 SAVE IN TABLE LDA ATBUF ADDRESS OF NAME JSB LDIPX PUT IN TABLE CLA LDB JSCIC JMP COMIN * INTEN LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA UTCHR CHARS = T, BLANK RSS YES - CONTINUE JMP IMNEM INVALID INT MNEMONIC LDA N5 JSB GETNA MOVE 5 CHARS TO TBUF LDB ATBUF ADDR OF NAME JSB SSTBL SEARCH SYMBOL TABLE RSS NOT FOUND, ERROR JMP SETE1 SET ENTRY POINT ADDRESS ENERR LDA ERR33 SET CODE = INVALID ENTRY POINT JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT RECORD INPUT * SETE1 LDA LST5 HAS LINK BEEN MADE? LDA A,I SZA,RSS JMP SETEN NO, GO MAKE ONE IOR IJSB YES, FORM THE JSB FOR BP STA B CLA JMP COMIN SETEN LDA LST4 GET BP LINK ADDRESS LDA A,I STA SETAD,I LDA .MEM1 MAKE A BP LINK LDB A JSB SETCR LDB LST5 LDA .MEM1 STA B,I IOR IJSB ADD JSB 0,I CODE STA B CLA SET INT ENTRY = ZERO ISZ .MEM1 JMP COMIN SET INTERRUPT TABLE, LOCATION * INTAB LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDZA P6 JSB GETOC GET 6 OCTAL DIGITS, CONVERT JMP IMNEM INVALID ABS DIGIT CLA LDB OCTNO GET ABSOLUTE VALUE * COMIN STA TBUF SAVE INT TABLE CODE STB TBUF+1 SAVE INT LOCATION CODE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? RSS YES, CONTINUE JMP ENERR NO, BUT SHOULD BE LDA INTCH GET INT CHANNEL NO. CPA P4 SPECIAL PROCESSING JMP PFINT IF TRAP CELL FOUR CMA,INA ADA TBREL ADD CURRENT ADDRESS SZA,RSS SKIP - NOT NEXT LOCATION JMP STINT SET INTERRUPT TABLES, LOCATION SSA SKIP - INVALID CHANNEL NO. ORDER JMP FILLI FILL IN SKIPPED VALUES EQERR LDA ERR24 SET CODE = INVALID INT CHNL ORDR JSB ERROR PRINT DIAGNOSTIC JMP SETIN GET NEXT INTERRUPT RECORD * PFINT LDA TBUF IF TRAP CELL FOUR, SZA ENTRY MUST BE AN JMP CHERR 'ABS' OR AN 'ENT' LDA P4 LDB TBUF+1 STORE INTO STB SETAD,I TRAP CELL FOUR LDB A JSB SETCR JMP SETIN GET NEXT INTERRUPT RECORD * HLTB4 OCT 103004 TRAP CELL DEFAULT VALUE * FILLI STA TCNT SET NO. OF FILL-INS REQUIRED CLA SET INTERRUPT TABLE ENTRY = ZERO STA SETAD,I LDA PPREL ADDRESS LDB A JSB SETCR ISZ PPREL INCR CURRENT INT TABLE ADDRESS ISZ TBREL INCR CURRENT INT LOCATION ADDR ISZ TCNT SKIP - ALL FILL-INS COMPLETE JMP FILLI+1 CONTINUE INT FILL-IN * STINT LDB TBUF+1 GET INT LOCATION CODE STB SETAD,I PUT INT LOCATION CODE IN INT LOC ISZ TBREL INCR CURRENT BP LOCATION ADDR LDB TBREL GET INT LOCATION ADDR CMB,INB ADB P64 ADD ADDR OF FIRST SYS LINK SSB SKIP - INT LOCATION OVERFLOW JMP EQERR * NOBPO LDA TBREL INT. ADDRESS PLUS ONE ADA N1 ADJUST  LDB A ADDRESS JSB SETCR SET CORE LDA TBUF GET INT TABLE CODE STA SETAD,I TO OUT BUFFER LDA PPREL ADDRESS LDB A JSB SETCR OUTPUT IT ISZ PPREL INCR CURRENT RELOCATION ADDR JMP SETIN GET NEXT INT TABLE RECORD ENDIO LDA AINT GET ADDRESS OF INT CMA,INA ADA PPREL ADD CURRENT RELOCATION ADDR STA CINT SAVE NO. INT ENTRIES NOP SPACE NEW LINE NOP SPACE NEW LINE * * OUTPUT EQTA THRU INTLG * LDA AEQT EQT START ADDRESS STA LBUF LDA CEQT NUMBER OF EQTS STA LBUF+1 LDA ASQT DRT START ADDRESS STA LBUF+2 LDA CSQT NUMBER OF DRT'S STA LBUF+3 LDA AINT INTERRUPT TABLE ADDRESS STA LBUF+4 LDA CINT NUMBER OF INTERRUPT ENTRIES STA LBUF+5 LDA EQTA START ADDRESS-ABS LDB INTLG END ADDRESS JSB SETCR GO BUILD ABS SKP * * GET ID'S AND BUILD KEY WORD TABLE * LDA PPREL KEY WORD TABLE ADDRESS STA LBUF LDA KEYWD ABS ADDRESS LDB A JSB SETCR LDA PPREL STA KEYAD KEY WORD ADDRESS KEYID LDA P8 PRINT: LDB MES42 "# ID SEGS?" JSB READ LDA N2 GET -2 (SET FOR DECIMAL JSB GETOC CONVERSION OF 2 DIGITS) JMP IDWER BAD NUMBER STA KEYCN # OF ID SEGS TO KEY COUNT SZA,RSS JMP IDWER DO NOT ACCEPT ID COUNT OF ZERO! CMA,INA ADA P99 OR GREATER THEN 99 SSA JMP IDWER LDA KEYCN RESTORE A ADA PPREL ADD TO PRESENT LOCATION INA FOR ZERO END STA PPREL UPDATE PPREL STA SYSAD INITIAL ID SEG ADDRESS STA IDSAD FIRST ID SEG ADDRESS JMP *+4 IDWER LDA ERR10 PRINT: JSB ERROR "ERR-PA"  JMP KEYID TRY AGAIN JSB GETAL SZA JMP IDWER NO, ERROR LDA KEYCN NOS OF KEY WORDS CMA,INA STA WDCNT LDA SYSAD STA TEMP2 LDA KEYAD STA TEMP3 KYBLD LDA TEMP2 ADDRESS OF CURRENT ID STA LBUF ID ADDRESS LDA TEMP3 KEY WORD ADDRESS LDB A INTO B ISZ TEMP3 BUMP TO NEXT KEY WORD ADDR JSB SETCR OUT PUT TO ABS LDA TEMP2 UPDATE ID ADDRESS ADA P28 SEG SIZE STA TEMP2 ISZ WDCNT ALL DONE? JMP KYBLD NOT DONE YET STA PPREL NEW RELOCATE ADDRESS CLA STA LBUF GET A ZERO IN THE OUTPUT BUFFER LDA KEYAD ADA KEYCN NOS OF KEY WORDS LDB A JSB SETCR ZERO NEXT TO LAST KEY ENTRY LDB ALBUF CLEAR BUFFER AREA JSB BUFCL OCT 0 LDA KEYCN GET ID SEG COUNT CMA,INA STA WDCNT SAVE NEG LDA SYSAD ADDRESS OF FIRST ID SEG STA TEMP3 CLOOP LDA TEMP3 STARTING ADDRESS LDB A ADB P27 BUMP TO LAST ADDR STB TEMP3 UPDATE STB LBUF ISZ LBUF POINT TO NEXT ID SEG ISZ TEMP3 TO NEXT ADDR JSB SETCR CLEAR ID SEGMENT ISZ WDCNT ALL DONE? JMP CLOOP NO, DO MORE LDA TEMP3 ADA N28 CLEAR CLB LAST STB LBUF LINK LDB A POINTER JSB SETCR SKP * * GET START-UP PROGRAM * NOP SPACE LDA P13 PRINT: LDB MES5 "STRT-UP PROG?" JSB PARAM GO GET PARAMETERS RSS JMP RESLB NO PARAMS WERE INPUT LDA TBUF MOVE NAME 1,2 STA STRPN LDA TBUF+1 NAME 3,4 STA STRPN+1 LDA TBUF+2 NAME 5 STA STRPN+2 LDA SYSAD SEG ONE ADDRESS STA LBUF PUT SEG INTO THE SCHEDULED_ LIST LDA SKEDD ADDRESS IN BASE PAGE LDB A JSB SETCR TO ABSOLUTE LDA SYSAD SEG ONE ADDRESS ADA P28 UPDATE TO NEXT STA SYSAD ISZ IDNOS BUMP NOS OF ID'S SKP * * RELOCATE RESIDENT LIBRARY * RESLB NOP SPACE START ON NEW LINE LDA SYSAD STA SETAD,I FIRST DORMENT SEGMENT LDA DORMT DORMENT LIST POINTER LDB A JSB SETCR SET IT IN BP LDA PPREL UP LOCC FOR RELOCATE STA .MEM3 STA SETAD,I LIBRARY ORG TO BP LDA LBORG LDB A JSB SETCR CLA STA PNAME LDA P11 PRINT: LDB MES3 "REL RES LIB" JSB PRINT LDA P2 STA .XFER MAKE NON-ZERO FOR LIBRARY CLA STA LOCC STA BPLOC LDA LSTSV RESTORE SYMBOL TABLE COUNT STA LST IN THE LOADER JSB PRCMD GO TO LOADER JSB GTOUT LOADER ERROR...GET OUT LDA LOCC SZA,RSS LDA .MEM3 RESTORE WITH SELF IF LOCC IS ZERO STA .MEM3 STA SETAD,I PUT IN BUFFER LDA RTORG BASE PAGE LOCATION LDB A JSB SETCR OUTPUT TO ABS LDA BPLOC SZA STA .MEM1 UPDATE IF NON-ZERO LDA .MEM1 SET BASE PAGE LOWER LIMIT STA LBUF TO BUFFER LDA P1647 SET BASE PAGE UPPER LIMIT STA LBUF+1 TO BUFFER LDA BPA1 FIRST BP ADDRESS LDB A INB LAST BP ADDRESS JSB SETCR SET TO BP COMM AREA LDA LST COUNT OF SYMBOLS STA LSTSV SAVE FOR UPDATE AFTER EACH RELOCATE-CORE RES PROGS * * SET UP COMMON AREA * WDSCM NOP SPACE NEW LINE LDA P14 PRINT: LDB MES7 "# WDS IN COMM?" JSB READ LDA N5 JSB GETOC GET 5 DIGITS JMP WDERR BAD NUMBER JSB GETAL LOOK FOR END OF BUFFNLHER SZA JMP WDERR NOT END ERROR, TRY AGAIN LDA OCTNO GET VALUE SZA,RSS JMP RELRS STA SETAD,I LDA RTCOM COMMON SIZE TO BP LDB A JSB SETCR LDA .MEM3 UPDATE FWAC STA .MEM5 ADA OCTNO UPDATE LWAC STA .MEM3 ADA N1 STA .MEM6 LWAC JMP RELRS GO REL CORE RES PROGS WDERR LDA ERR10 PRINT: JSB ERROR "ERR-PA" JMP WDSCM TRY AGAIN N SKP * * RELOCATE CORE RESIDENT PROGRAMS * RELRS NOP SPACE NEW LINE CLA GET A ZERO STA PNAME STA LOCC STA BPLOC STA .XFER CLEAR FOR CORE RES LOAD LDA LSTSV RESTORE BEFORE EACH RELOCATE STA LST LDA P14 PRINT: LDB MES8 "REL USER PROGS" JSB PRINT JSB PRCMD GO RELOCATE!!!!! JSB GTOUT LOADER ERROR...GET OUT LDA .XFER WAS ZERO INPUT? SZA,RSS JMP SNAPO YES, GO DO SNAPSHOT * CHANGE PARAMETERS SRFIN NOP SPACE LDA P11 PRINT: LDB MES10 "ENTER PRAMS" JSB PARAM GO GET PARAMS RSS PARAMS WERE INPUT JMP SRFI5 NO PARAMS INPUT, NO CHANGE LDA TBUF NAME 1,2 STA PNAME LDA TBUF+1 NAME 3,4 LDB PNAMA INB STA B,I LDA TBUF+2 NAME 5 INB STA B,I LDA IDAA ADDRESS OF PARAMETERS JSB UPNAM UPDATE PARAMETERS SRFI5 CLA STA WDCNT CLEAR FOR FIRST TIME LDA APNAM JSB SRIPX SEARCH FOR DUPS JMP SR5I FOUND ONE LDB PNAMA ADB P2 LDA B,I MASK OUT LOWER BLANK AND M7400 STA B,I AND RESTORE LDA PNAMA THIS NAME NOT IN TABLE JSB LDIPX SO, PUT IT THERE JMP SRFI6 CONTINUE PROCESSING SR5I LDA IP3,I IS THIS AN INT PRG? AND M77 SZA JMP SRFI6 YES, ITS OK LDA ERRDU NO, LOOKS LIKE A DUP ENTRY JSB ERROR JMP SRFIN TRY AGAIN * SRFI6 LDA STRPA ADDRESS OF START UP NAME LDB PNAMA JUST LOADED NAME JSB NACMP COMPARE NAMES JMP SRFI2 NO COMPARE CLA DOES COMPARE STA STRPN CLR STRT FLAG LDA IDSAD SEGMENT ADDRESS CLB POINTS TO ADDRESS JSB GENID GO BUILD ID SEGMENT  LDB A ADB P27 COMPUTE THE END OF ID ADDRESS JSB SETCR OUTPUT IT LDA IDSAD GET ID SEG ADDRESS INA POINT TO TEMPORARY STORAGE STA SETAD,I ADA P9 WORD 11 IN SEG LDB A JSB SETCR ADD WORD TO SEG CLA,INA STA SETAD,I LDA IDSAD ADA P15 PUT A 1 INTO WORD 16 OF THE SEG LDB A JSB SETCR LDA IDSAD GET CORRECT ID SEG ADDRESS JSB SRFI3 "PROGS" WERE ENTERED, GO LOOK FOR IT JMP RELRS GO RELOCATE NEXT * SRFI2 LDA IDNOS ENTERED PROGS EXCEEDED ID SEGS? CMA,INA ADA KEYCN SSA JMP LSERR IRRECOVERABLE ERROR YES!! LDA SYSAD GET CORRECT ID SEG ADDRESS JSB SRFI3 GO CHECK FOR INT-PRGS LDA SYSAD BUILD SEG IN THIS ADDRESS LDB A ADB P28 LOOK TO NEXT SEGMENT STB SYSAD DYNAMIC SEG POINTER JSB GENID BUILD ID SEG LDB A ADB P27 GET ADDRESS OF END OF ID SEG INA SKIP THE 1ST WORD (LINK) ISZ SETAD JSB SETCR OUTPUT IT CCA ADA SETAD STA SETAD ISZ IDNOS UP NOS OF ID' INPUT JMP RELRS GO GET NEXT * SRFI3 NOP STA PPREL SAVE ID SEG ADDRESS CLA STA WDCNT CLEAR FOR INITIAL ENTRY LDA APNAM ADDRESS OF INPUTTED PROG NAME SRFI4 JSB SRIPX GO SEARCH RSS FOUND NAME JMP SRFI3,I END OF TABLE LDA IP3,I COMPARES,GET SC AND M77 SZA,RSS JMP SRFI4 ADA AINT ADDRESS OF INTERRUPT TABLE ADA N6 LDB PPREL SET NEG OF ID ADDRESS CMB,INB INTO THE INTERRUPT TABLE STB SETAD,I LDB A JSB SETCR LDA IP3,I AND M7400 STA IP3,I SHOW ENTRY AS USED JMP SRFI4 LOOK AGAIN SKP * * SNAPSHOT OUTPUT * SNAPO LDA STRPN  WAS START-UP PRG REQUESTED? SZA,RSS BUT NOT LOADED JMP SNAP5 NO,GO CHECK FOR INT PRGS NOP SPACE LDA P12 YES, PRINT: LDB MES5 "STAR-UP PROG" JSB PRINT NOP SPACE LDA P5 PRINT: LDB STRPA START-UP PROG NAME JSB PRINT NOP SPACE JMP RELRS RELOCATE START-UP PROGRAM * SNAP5 CLA STA PPREL HEADER FLAG STA WDCNT LDA P1 NAME ADDRESS SNAP6 JSB SRIPX GO SEARCH RSS FOUND SOMETHING JMP SNAP7 END OF TABLE LDA IP3,I IS IT AN INT PRG NAME? AND M77 SZA,RSS JMP SNAP6 NO, LOOK NEXT LDA PPREL HEADER BEEN PRINTED? SZA JMP *+7 YES NOP SPACE NO, PRINT IT LDA P8 PRINT: LDB MES12 "INT PRG" STA PPREL SET HEADER FLAG JSB PRINT NOP SPACE NEW LINE LDA P5 PRINT: LDB IP1 PRG NAME JSB PRINT JMP SNAP6 LOOK NEXT * SNAP7 LDA PPREL ANY INT PRGS PRINTED? SZA,RSS JMP SNAP8 NO, CONTINUE NOP SPACE YES, ASK IGNORE QUESTION LDA P7 PRINT: LDB MES13 "IGNORE?" JSB READ AND GET THE REPLY CCA STA CMFLG JSB GETAL FRIST LETTER OF REPLY CPA ANO AN "N" ? JMP RELRS YES, TRY TO RELOCATE PRGS CPA AYES NO, IS IT A "Y" ? JMP SNAP8 YES, PROCESS SNAPSHOT LDA ERR10 WAS NEITHER JSB ERROR PRINT: "ERR-PA" JMP SNAP7 TRY AGAIN * SNAP8 LDA JMP3I SET STARTING JMP STA LBUF LDA STRAD SET STARTING ADDRESS STA LBUF+1 LDA P2 LDB P3 JSB SETCR * SET FWA SYS MEM IN BP LDA SYMAD FWA SYS MEM SZA,RSS LDA .MEM3 DEFAULT TO FWAM, IF FWASM EQ 0. STA LBUF+1 TO BUFFER LDA .MEMd3 STA LBUF LDB AVMEM BP ADDRESS LDA B ADA N1 JSB SETCR SET FWA SYS MEM INTO RTS BP JSB CLSFI FCLOS ABSOLUTE OUTPUT FILE NOP SPACE SNAP2 LDA P9 PRINT: LDB MES9 "SNAPSHOT" JSB READ CCA STA CMFLG JSB GETAL GET RESPONSE CPA ANO NO????? JMP ENDGN YEP, END OF RTS GEN CPA AYES YES??????? JMP *+4 YES LDA ERR10 JSB ERROR JMP SNAP2 TRY AGAIN * * GET SNAP FILE NAME * SNP11 LDA P20 LDB MES55 JSB READ READ IN NAME JSB FCRET GO CREATE SNAP FILE DEF *+5 DEF ABDCB DEF P30 DEF P3 DEF ZERO JSB FILCK JMP SNP11 TRY AGAIN LDA .MEM. FRIST ADDRESS STA MEMAD .MEM. ADDRESS LDA MEMOT ADDRESS OF LABELS STA LBLAD LDA N6 NUMBER OF LABELS STA WDCNT JSB GINIT INITIALIZE BUFFER CLA STA MAXC CLEAR WORD COUNT STA PROCT CLEAR TOTAL COUNT SNAP1 LDA N4 NO OF CHARS LDB BNDS ADDRESS OF "-BOUNDS" JSB BUFUP PUNCH ON TAPE JSB LBOUT PUNCH LABELS LDA MEMAD,I NEXT VALUE LDB ATBUF BUFFER TEMP STORAGE JSB CONVD CONVERT TO OCTAL LDA N3 LDB ATBUF JSB BUFUP PUNCH VALUE LDB MES25 FINISH LINE WITH "CRLF" JSB BUFUP ISZ MEMAD BUMP TO NEXT VALUE ISZ WDCNT MORE? JMP SNAP1 YES * LDA LST NUMBER OF SYMBOLS CMA,INA STA WDCNT JSB LSTI SET UP START OF SYMBOL TABLE SNAP4 JSB LSTP READ IN A SYMBOL JMP SNAP3 NO MORE...DONE LDA N3 LDB ASET JSB BUFUP PUNCH "-SET" LDA N2 LDB LST1 JSB BUFUP PUNCH SYMBOL NAME LDB LST3 MOVE TO END OF NAME LDA B,I GET LAST CHAR AND M7400 MASK OUT LOWER IOR ASPCE INSERT SPACE AS LAST CHAR STA B,I RESTORE LDA N1 LDB LST3 JSB BUFUP PUNCH LAST CHAR LDA N2 LDB ASTOA PUNCH " TO " JSB BUFUP LDB LST4 BUMP TO LST4 LDA B,I LDB ATBUF JSB CONVD CONVERT LST4 TO OCTAL LDA N3 LDB ATBUF JSB BUFUP PUNCH LST4 LDB MES25 JSB BUFUP FINISH WITH CRLF LDB LST5 LDA B,I GET LST5 SZA,RSS IS LST5 EQ. 0? JMP SNAP4 YES, SKIP LINKS LDA N8 LDB ASSTL JSB BUFUP PUNCH "-LINKS START AT" LDB LST5 LDA B,I GET LINK LDB IDAA BUFFER ADDRESS JSB CONVD CONVERT LST5 LDA TBUF AND M377 MASK OUT SPACE AS FIRST CHAR IOR ACOMA INSERT A COMMA STA TBUF RESTORE, COMMA AS FIRST LDA N3 LDB IDAA JSB BUFUP PUNCH LST5 LDA N3 LDB ATBUF JSB BUFUP PUNCH LST4 LDB MES25 JSB BUFUP FINISH WITH "CRLF" JMP SNAP4 NO, DO NEXT * SNAP3 LDA N8 LDB ASET JSB BUFUP PUNCH "-SET BPLOCC TO" LDA .MEM1 LDB ATBUF JSB CONVD LDA N3 LDB ATBUF JSB BUFUP PUNCH BPLOC LDB MES25 DUMP BUFFER JSB BUFUP LDA N3 END LINE WITH CRLF LDB ASET ADDRESS OF "SET" JSB BUFUP PUNCH"-SET" LDA N2 LDB ASLOC ADDRESS OF "LOCC" JSB BUFUP PUNCH "LOCC" LDA N2 LDB ASTOA JSB BUFUP PUNCH " TO " LDA .MEM3 FETCH FWAM LDB ATBUF JSB CONVD CONVERT TO ASCII LDA N3 LDB ATBUF JSB BUFUP PUNCH VALUE OF FWAM LDB MES25 JSB BUFUP END LINE WITH CRLF JSB CLSFI GO FCLOS SNAP FILE JMP ENDGN GO TO END RTSGN ROUTINE SKP * * * OUTPUT LABEL ROUTINE * * * CALLING SEQUENCE: * A AND B ARE IGNORED * JSB LBOUT * * RETURN: A AND B ARE DESTROYED * LBOUT NOP LDA N3 LDB LBLAD ADDRESS OF LABEL JSB BUFUP PUNCH LABEL LDA LBLAD UPDATE LABEL POINTER ADA P3 STA LBLAD JMP LBOUT,I RETURN * * * LOAD AND DUMP THE PUNCH BUFFER * * * CALLING SEQUENCE: * A = NEG OF NO. OF WORDS TO LOAD * B = ADDRESS TO LOAD FROM * JSB BUFUP * * RETURN: A AND B ARE DESTROYED * BUFUP NOP CPB MES25 DUMP BUFFER REQUEST? JMP BUFDN YES STA MAXC NO, SAVE NO OF WORDS TO GO ADA PROCT ACCUMULATE THE TOTAL STA PROCT LDA B,I GET THE WORD STA CURAL,I PUT IN BUFFER INB BUMP SOURCE POINTER ISZ CURAL UP BUFFER POINTER ISZ MAXC ALL DONE? JMP *-5 JMP BUFUP,I ALL DONE, RETURN * BUFDN LDA PROCT GET NEG OF WORD COUNT CMA,INA MAKE POSITIVE STA MAXC SAVE LENGTH JSB WRITF WRITE TO SNAP FILE DEF *+5 DEF ABDCB DEF FERR DEF LBUF DEF MAXC SIZE JSB GINIT INITIALIZE BUFFER POINTERS CLA STA MAXC STA PROCT JMP BUFUP,I RETURN * * * * ENDGN NOP SPACE NEW LINE LDA P14 PRINT: LDB MES11 "SCEGN FINISHED" JSB LOUT JSB FCLOS FCLOS PRINT FILE DEF *+3 DEF LSDCB DEF FERR JSB FCLOS CLOSE INPUT FILE DEF *+3 DEF INDCB DEF FERR JSB EXEC PRINT OUT ENDING MESSAGE DEF *+5 DEF P2 DEF ENDLU DEF MES11+1 DEF P7 JSB EXEC RELEASE SYMBOL TABLE TRACKS DEF *+3 DEF P5 DEF N1 JSB EXEC AND TERMINATE DEF *+2 DEF P6 SPC 1 LBUF BSS 64 EQXTB BSS 58 ROOM FOR <30 EQTX SETUPS SIZZ EQU * END SWPIN * 1*($$* 5( 91700-18140 1608 S 0322 DS1/B CCE MODULE: SCGN2              H0103 KASMB,R,L,C HED SCGN2 91700-16140 REV.A 760216 * (C) HEWLETT-PACKARD CO. 1976 * NAM SCGN2,5 91700-16140 REV.A 760216 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ****************************************************** * *SCGN2 SUBORDINATE LOADER CONTROL * *SOURCE PART # 91700-18140 REV.A * *REL PART # 91700-16140 REV.A * *WRITTEN BY: LARRY POMATTO-JACK COOLEY * *DATE WRITTEN: 9-24-74 * *MODIFIED BY: K. HAHN [ C.C.H.] * *DATE MODIFIED: 12-02-75 [02-16-76] * *MODIFICATION: ADD CURRENT PAGE LINKING, MAP ALL, & *COMMENTS * [ FIX INDIRECT EXTERNAL REF. & ADD BYTE ADDRESSING ] * [ FIX C.P. LINK PROCESSING, ADD ECHO ON/OFF COMMAND] * [ ADD EXTENDED-NAM PRINTOUT ] ****************************************************** * * THE TERM RTS/2100 IS SYNONYMOUS WITH RTE-C AND * THE TERMS ARE USED INTERCHANGEABLY THROUGHOUT * THIS DOCUMENT * * * ENTRY POINT NAMES * ENT LSWAP,LOAD ENT NBUF9,CPLEN * * EXTERNAL REFERENCE NAMES * EXT PNAME,PNAMA,PRAMS EXT SIZE,EFLAG,CPLMG,CPLML,#ECHO EXT .MEM.,.MEM1,.MEM2,.MEM3,.MEM4,.MEM5,.MEM6 EXT ?XFER,PLKS,ABRC1,LISTO,UEXFL EXT LST,LST1,LST2,LST3,LST4,LST5 EXT LOCC,BPLOC,RBTO,NAMR. EXT COMOR,RBTA EXT PRINT,PARSB EXT PACK$,LSTP,LSTI,SSTBL,PRMT,PUNCH EXT LOUT,SWAPR,PLK,RBIN,PLK1 EXT FERR,RLDCB,FCLOS,COML * A EQU 0 B EQU 1 SUP SPC 1 ********************************************************************6**** * * THESE ROUTINES ARE USED BOTH IN THE RTS LOADER ITSELF AND IN * THE RTS GENERATOR RTSGN. THESE ROUTINES,CALLED A SUBORDINATE * CONTROL MODULE, COMPRISE A COMMAND PROCESSOR FOR LOADER COMMANDS. * THIS MODULE IS CALLED AS IF IT WERE A SUBROUTINE WITH NO * PARAMETERS AND TWO RETURNS. THE (P+1) RETURN IS USED FOR ABNORMAL * TERMINATION CONDITIONS, WHILE THE (P+2) RETURN IS USED FOR NORMAL * RETURNS VIA THE END COMMAND.THE CALLING SEQUENCE IS AS FOLLOWS: * * JSB PRCMD * RETURN1 RELOCATION ABORTED RETURN * RETURN2 NORMAL RETURN * ******************************************************************** SPC 3 * NOTE!!!!!! * THIS BSS THAT FOLLOWS MUST BE THERE INORDER * TO INSURE THAT NO CODE IS OVERLAYED * FROM THE OTHER SEGMENT * BSS 310B SIZE DEFINED IN RTGEN SEGMENT SPC 4 * * HERE WHEN SEGEMENT IS FIRST LOADED * CONTROL IS PASSED BACK TO THE MAIN * VIA A SWAPR RETURN * LSWAP NOP * * NOTE THE FOLLOWING IS BECAUSE WE DO NOT HAVE * EXTERNALS WITH OFFSET * LDA MD5 GET LOOP COUNTER STA BLINE SAVE IN TEMP LOCATION LDB LSTAA GET ADDRESS OF WHERE LIST ROUTINE LOCATED LOOP LDA B HERE WE CHASE DOWN OUR OWN LDA A,I INDRECTS, AND ADD OUR OWN RAL,CLE,SLA,ERA JMP *-2 IOR BIT15 ADD IN OUR OWN INDIRECT STA B,I AND SAVE IT AGAIN INB ISZ BLINE DONE? JMP LOOP NO JMP SWAPR YES...RETURN SPC 1 BIT15 OCT 100000 LSTAA DEF *+1 LST1A DEF LST1 LST2A DEF LST2 LST3A DEF LST3 LST4A DEF LST4 LST5A DEF LST5 SKP * * RTS LOADER UTILITY SUBROUTINES * SPC 1 ***** * ** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF) * CALLING SEQUENCE: * * JSB BLINE * RETURN * ***** BSS 1 BLINE NOP LDA LBUFA STA BLINE-1 LDA MD60 LDB BLANK STB BLINE-1,I ISZ BLINZE-1 INA,SZA JMP *-3 JMP BLINE,I ***** STMP1 NOP * ***** * ** DELIM ** ADVANCE POINTERS TO ASCII INPUT BUFFER PAST NEXT * DELIMETER. ACCEPTABLE DELIMITERS ARE A COMMA, ONE OR * MORE BLANKS, OR A COMMA IMBEDDED IN BLANKS. * CALLING SEQUENCE: * * JSB DELIM * RETURN1 NOTHING BUT BLANKS TO END OF LINE * RETURN2 DELIMETER FOUND * * NOTE: IF NO VALID DELIMITER IS FOUND (OR COMMA WITH NOTHING BUT * BLANKS TO THE END OF LINE) A DIRECT JUMP TO THE COMMAND * ERROR ROUTINE WILL RESULT. THUS CONTROL MAY NOT BE RETURNED ***** DELIM NOP JSB QGETC GET THE NEXT CHAR JMP DELIM,I END OF LINE , RETURN (P+1) LDB M2 INITIALIZE STB STMP1 COMMA COUNTER CPA B40 IS THIS A BLANK? JMP DEL01 YES CPA B54 NO, IS IT A COMMA? RSS JMP CMER NO, ERROR ISZ STMP1 DEL01 JSB NXTC GET NEXT NON BLANK CHAR JMP DEL02 END OF LINE CPA B54 GOT ONE, IS IT A COMMMA? RSS JMP DEL03 NO ISZ STMP1 YES, IS IT THE SECOND ONE? JMP DEL01 NO, GET NEXT NON BLANK CHARACTER DEL03 JSB BAKUP YES, BACK UP BUFFER POINTERS ISZ DELIM AND EXIT (P+2) JMP DELIM,I DEL02 ISZ STMP1 WAS THERE A COMMA? JMP DELIM,I NO, EXIT (P+1) JMP CMER YES, ERROR ***** * ** BAKUP ** BACK UP INPUT BUFFER (QIBUF) POINTERS BY ONE CHARACTER * CALLING SEQUENCE: * * JSB BAKUP * RETURN * ***** BAKUP NOP LDA QQCNT DECREMENT CHAR COUNT ADA M1 STA QQCNT LDB QQPTR SLA AND IF NECESSARY, ADB M1 DECREMENT POINTER STB QQPTR JMP BAKUP,I ***** * ** PRCMD ** MAIN ENTRY POINT FOR THE SUBORDINATE CONTROL MODULE. * CONTROL IS PASSED TO TYMOD OR NXTCM TO GET THE NEXT * COMMAND. THAT COMMAND IS PARSED, AND CONTROL IS PASSED * TO ITS ASSOCIATED PROC^ESSING ROUTINE. IF A FATAL ERROR * IS DETECTED, CONTROL IS RETURNED TO THE ROUTINE CALLING * PRCMD AT (P+1). THE ONLY OTHER EXIT IS VIA THE END * COMMAND (P+2). AFTER PROCESSING ANY OTHER COMMAND, * CONTROL RETURNS TO NXTCM TO PROCESS THE NEXT COMMAND. * ***** LOAD BSS 0 PRCMD NOP PROCESS RTE LOADER/2100 COMMANDS NXTCM JSB CMDIN GET NEXT COMMAND LINE LDA CTACN LDB CTABL JSB SCAN SCAN 1ST ELEMENT FOR MATCH JMP CMER COMMAND ERROR. ADA PTABL JUMP TO PROCESSOR LDA A,I JMP A,I * CMER1 DEF *+1 OCT 5 ASC 3,CMND? ***** * CONTROL COMES HERE ON DETECTING A COMMAND ERROR. THE MESSAGE * 'CMND?' IS OUTPUT, INPUT IS SWITCHED TO TTY, AND GET NEXT CMD. ***** CMER LDB CMER1 OUTPUT CMND? MESSAGE JSB DIAG JMP PRCMD+1 GET NEXT COMMAND FROM TTY SKP * *RTS LOADER TABLES * ***** * * BRANCH TABLE FOR COMMAND PROCESSORS. * ORDER OF THIS TABLE MUST CONFORM TO ORDER OF FIRST ENTRIES IN * COMMAND MNEMONIC TABLE. * ***** PTABL DEF * DEF BNDST BOUNDS STATEMENT DEF MAPST MAP STATEMENT DEF RELST RELOCATE STATEMENT DEF RELST REL STATEMENT DEF SERST SEARCH STATEMENT DEF NXTCM OUTPUT STATEMENTS IGNORED DEF DSPST DISPLAY STATEMENT DEF EOL END STATEMENT DEF SETST SET STATEMENT DEF LNKST LINKS STATEMENT DEF EXTST EXTERNALS INDIRECT/DIRECT STATEMENT DEF ECOST ECHO ON/OFF STATEMENT ***** * * COMMAND MNEMONIC TABLE * * BITS 15-8 # CHARS IN ASCII KEYWORD TABLE * BITS 7-0 OFFSET IN THAT TABLE (TO LOCATE ASCII WORDS) * * THE ORDER OF ENTRIES IN THIS TABLE IS USED IN DETERMINING THE * OFFSET ASSOCIATED WITH KEYWORDS. THUS ORDER IN THIS TABLE IS * OF PARAMOUNT IMPORTANCE. IF ANY KEYWORD IS EXACTLY THE SAME * AS THE BEGINNING OF A LONGER KEYWORD, THE LONGER KEYWORD MUST * APPEAR FIRST. (FOR EXAMPLE RELOCATE APPEARS BEFORE REL) * ***** CTACN ABS CTABS-CTABN NEG NBR ENTRIES IN TABLE CTABL DEF CTABS CTABS ABS 3000B+ABOUD-CMTBL BOUNDS ABS 1400B+AMAP-CMTBL MAP ABS 4000B+ARELC-CMTBL RELOCATE ABS 1400B+ARELC-CMTBL REL ABS 3000B+ASEAR-CMTBL SEARCH ABS 3000B+AOTPU-CMTBL OUTPUT ABS 3400B+ADISP-CMTBL DISPLAY ABS 1400B+AEND.-CMTBL END ABS 1400B+ASET.-CMTBL SET ABS 2400B+ALINK-CMTBL LINKS ABS 4400B+AEXT-CMTBL EXTERNALS ABS 2000B+AECHO-CMTBL ECHO CTABN EQU * KTABS ABS 2400B+AFWAB-CMTBL FWABP ABS 2400B+ALWAB-CMTBL LWABP ABS 2000B+AFWAM-CMTBL FWAM ABS 2000B+ALWAM-CMTBL LWAM ABS 2000B+AFWAC-CMTBL FWAC ABS 2000B+ALWAC-CMTBL LTABS ABS 2000B+ALOCC-CMTBL LOCC ABS 3000B+ABPLC-CMTBL BPLOCC ABS 2400B+AXFER-CMTBL ?XFER ABS 2400B+ATBLE-CMTBL TABLE ABS 3000B+AUNDE-CMTBL UNDEFS MTABS ABS 3400B+AMODS-CMTBL MODULES ABS 3400B+AGLOS-CMTBL GLOBALS ABS 2400B+ALINK-CMTBL LINKS SWICH ABS 1000B+AON-CMTBL ON ABS 1400B+AOFF.-CMTBL OFF ABS 1400B+AALL-CMTBL ALL BORC ABS 2000B+ABAS-CMTBL BASE ABS 3400B+ACUR-CMTBL CURRENT TSTRT ABS 2400B+ASTRT-CMTBL START ABS 1000B+AIN-CMTBL IN TAT ABS 1000B+AAT..-CMTBL AT TTO ABS 1000B+ATO..-CMTBL TO DIEXT ABS 4000B+AIEXT-CMTBL INDIRECT ABS 3000B+ADEXT-CMTBL DIRECT....THESE TWO MUST BE IN ORDER STABL DEF TSTRT ATTBL DEF TAT TOTBL DEF TTO LTABL DEF LTABS KTABL DEF KTABS MTABL DEF MTABS BCTBL DEF BORC SWTBL DEF SWICH ***** * ASCII KEYWORD TABLE * ORDER OF ENTRIES IN THIS TABLE IS OF NO IMPORTANCE ***** CMTBL DEF * ABOUD ASC 3,BOUNDS AMAP ASC 2,MAP ARELC ASC 4,RELOCATE ASEAR ASC 3,SEARCH AOTPU ASC 3,OUTPUT ADISP ASC 4,DISPLAY ATBLE ASC 3,TABLE AUNDE ASC 3,UNDEFS AMODS ASC 4,MODULES AGLOS ASC 4,GLOBALS ALINK ASC 3,LINKS AON ASC 1,ON AOFF. ASC 2,OFF AALL ASC 2,ALL AEND. ASC 2,END AFWAM ASC 2,FWAM ALWAM ASC 2,LWAM AFWAB ASC 3,FWABP ALWAB ASC 3,LWABP AFWAC ASC 2,FWAC ALWAC ASC 2,LWAC ALOCC ASC 2,LOCC ABPLC ASC 3,BPLOCC AXFER ASC 3,?XFER ABAS ASC 2,BASE ACUR ASC 4,CURRENT ASTRT ASC 3,START AIN ASC 1,IN AAT.. ASC 1,AT ASET. ASC 2,SET ATO.. ASC 1,TO AEXT ASC 5,EXTERNALS AIEXT ASC 4,INDIRECT ADEXT ASC 3,DIRECT AECHO ASC 2,ECHO * PRPTA ASC 1,-_ * PTR NOP CNTR NOP PTR2 NOP CCNT NOP QQCN1 NOP QQPT. NOP TEMP NOP NCHAR NOP CNT NOP SKP SKP * * SCANNER ROUTINE * ***** * ** SCAN ** SCAN INPUT BUFFER (QIBUF) FOR KEYWORD * CALLING SEQUENCE: * * LDA NUMBER OF ENTRIES TO SEARCH * LDB ADDRESS OF MNEMONIC TABLE ENTRY ASSOC WITH FIRST CHOICE * JSB SCAN * RETURN1 NOT FOUND * RETURN2 FOUND, OFFSET FROM FIRST ENTRY SEARCHED IN .A. * * NOTE: THIS ROUTINE WILL SKIP LEADING BLANKS IN ATTEMPTING A MATCH. * FURTHER,BUFFER POINTERS ARE ADVANCED PAST THE KEYWORD * MATCHED OR RESET IF NO MATCH OCCURRED. ***** SCAN NOP ENTRY/EXIT STB PTR INITIALIZE SCANNER STA CNTR CLA STA CNT INITIALIZE OFFSET COUNTER SCAN1 LDA PTR,I GET COMMAND POINTER WORD AND B377 MASK COMMAND TABLE OFFSET ADA CMTBL STA PTR2 STORE POINTER TO ASCII COMMAND LDA PTR,I ALF,ALF AND B377 GET # CHARS. STA NCHAR ISZ CNT BUMP OFFSET COUNTER CLA STA CCNT LDA QQCNT SAVE CHARACTER STREAM STA QQCN1 LDA QQPTR STA QQPT. POINTERS. JSB NXTC GET THE FIRST NON-BLANK CHAR CLA END OF LINE JMP SCAN5 GET REST OF CHARS IN LOOP SCAN2 JSB QGETC GET NEXT CHARACTER. CLA NO MORE CHARS. SCAN5 STA TEMP LDA PTR2,I LDB CCNT ISZ CCNT CPB NCHAR ALL CHARS. MATCH? JMP SCAN4  YES-CHECK END OF INPUT ELEMENT. SLB,RSS IS CHAR IN HIGH-ORDER BYTE? ALF,ALF YES--ROTATE TO LOW AND B177 MASK SLB BUMP ASCII COMMAND TABLE POINTER ON ISZ PTR2 EVEN-NUMBERED CHARACTERS. CPA TEMP DO CHARS. MATCH? JMP SCAN2 YES--SO FAR. LDA QQPT. NO--BACKUP POINTERS STA QQPTR LDA QQCN1 STA QQCNT SPC 1 * NOW BUMP COMMAND TABLE POINTER, OR TAKE ERROR EXIT * IF NO MORE LEFT SPC 1 ISZ PTR ISZ CNTR END OF TABLE? JMP SCAN1 NO JMP SCAN,I SPC 1 SCAN4 LDA TEMP IS NEXT SOURCE CHAR A DELIMITER? SZA END OF LINE? JSB BAKUP LDA CNT ISZ SCAN JMP SCAN,I SKP * * INPUT COMMAND LINE * ***** * ** CMDIN ** INPUT NEXT COMMAND LINE USING SIO DRIVERS * CALLING SEQUENCE: * * JSB CMDIN * RETURN * * NOTE: CMDIN CHECKS FOR '-' IF REQUIRED AND DOES A JMP CMER IF NOT * THERE. IT ALSO SKIPS COMMENTS AND ADVANCES INPUT BUFFER * POINTERS PAST THE '-' IF IT APPEARS IN THE INPUT BUFFER. * * THE IDENTIFIER CMDLU IS USED TO SET UP TTY VS PHOTORDR INPUT * * CMDLU=JSB 104B,I FOR KEYBOARD(TTY) INPUT * NO COMMAND ID CHAR. REQUIRED. NO ECHO. * * =JSB 101B,I FOR BATCH INPUT(E.G., PHOTOREADER, * OR CASSETTE). * COMMAND ID REQUIRED IN COLUMN. 1, AND ECHO TO LIST UN * IMPLIED. * * RETURN: QQCHC= POSITIVE # CHARS TRANSMITTED * ***** CMDIN NOP CLA RESET INCOMING CHARACTER STA QQCNT POINTERS LDA QBUFA STA QQPTR JSB PRMT SEND PROMT,READ REPLY DEF *+6 DEF PRPTA DEF B2 DEF QIBUF DEF D72 DEF PARSB STA QQCHC JMP CMDIN,I AND RETURN * MOVE3 NOP * ***** * ** MOVE. ** MOVE BLOCK OF CHARS FROM INPUT BUFFER (QIBUF) TO A * SPECIFIED LOCATION. STOP AT FIRST DELIMITER. * CALLING SEQUENCE: * * LDA ADDRESS OF DESTINATION * JSB MOVE. * RETURN * ***** MOVE. NOP STA MOVE3 SAVE DESTINATION ADDRESS JSB NXTC GET NEXT NON BLANK CHAR JMP CMER NONE FOUND MOV01 ALF,ALF POSITION CHAR TO LEFT, STA MOVE3,I AND STORE IN OUTPUT BUFFER JSB QGETC GET NEXT CHAR JMP MOV03 END OF LINE CPA B40 BLANK? JMP MOV02 CPA B54 COMMA? JMP MOV02 CPA B51 RIGHT PAREN? JMP MOV02 IOR MOVE3,I PUT LOWER HALF STA MOVE3,I IN BUFFER JSB QGETC GET NEXT CHAR JMP MOV03 END OF LINE CPA B40 BLANK? JMP MOV02 CPA B54 COMMA? JMP MOV02 CPA B51 RIGHT PAREN? JMP MOV02 ISZ MOVE3 BUMP OUTPUT POINTER JMP MOV01 KEEP GOING MOV02 JSB BAKUP BACK UP OVER LAST CHAR MOV03 LDA MOVE3,I WAS LAST CHAR AND UPCM CPA MOVE3,I AN EVEN NUMBERED CHAR? RSS JMP MOVE.,I NO, BUFFER IS OK IOR B40 NO,APPEND A BLLANK STA MOVE3,I AND STORE IT AWAY JMP MOVE.,I SPC 1 SKP * * ****COMMAND PROCESSORS**** * ***** * ** RELOCATE ** SEARCH COMMAND PROCESSORS * ***** RELST CLA,RSS SET SEARCH FLAG OFF. SPC 1 SERST CLA,INA SET SEARCH FLAG ON. SPC 1 STA LIBFL STORE FLAG CLA STA NREC CLEAR #GOOD RECORDS COUNTER STA RIC STA XNAM JSB FCLOS CLOSE OPEN REL INPUT FILE...IF NOT CLOSED. DEF *+2 DEF RLDCB LDA LOCC HAS LOCC BEEN SET YET? SZA JMP *+3 YES LDA .MEM3 NO--SET TO FWAM STA LOCC LDA BPLOC HAS BPLOC BEEN SET YET? SZA JMP *+3 YES. GO GET NEXT NON-BLANK CHARACTER. LDA .MEM1 NO. SET BASE PAGE STA BPLOC TO FWABP+5. JSB NXTC GET NEXT NON-BLANK CHAR JMP LDRIN NO MORE CPA B54 IS IT A COMMA? JMP LDRIN YES...IGNORE REST OF LINE CPA B50 LEFT PAREND? RSS YES JMP CMER NO--COMMAND ERROR LDA BLANK BLANK OUT XNAM STA XNAM+1 STA XNAM+2 LDA XNAMA JSB MOVE. * JSB NXTC GET NEXT NON BLANK CHAR JMP CMER NO MORE CPA B51 RIGHT PAREN? JMP LDRIN YES JMP CMER NO, ERROR JMP LDRIN XNAMA DEF XNAM LBUFA DEF LBUF ***** * ** DISPLAY COMMAND PROCESSOR * ***** DSPST JSB BLINE BLANK PRINT LINE LDA QQPTR SAVE STA STMP BUFFER LDA QQCNT POINTERS STA SVAL LDA LBUFA MOVE NAME OF ENTITY TO BE DISPLAYED JSB MOVE. INTO THE OUTPUT BUFFER LDA STMP STA QQPTR RESTORE BUFFER POINTERS LDA SVAL STA QQCNT LDA MD11 LDB KTABL JSB SCAN IS THIS A KEYWORD? JMP DSP10 NO, IT MUST BE AN IDENTIFIER CPA D11 UNDEFS? JMP OLSTU CPA D10 TABLE? JMP OLSTE CPA B3 LDB .MEM3 CPA B4 LDB .MEM4 CPA B1 LDB .MEM1 CPA B2 LDB .MEM2 CPA B5 LDB .MEM5 CPA B6 LDB .MEM6 CPA D8 LDB BPLOC CPA D9 LDB ?XFER CPA B7 LDB LOCC GET CURRENT LOCATION COUNTER JMP DSP20 YES SPC 2 DSP10 LDB LBUFA JSB SSTBL SEARCH SYMBOL TABLE JMP DSP30 SYMBOL IS UNDEFINED LDB LST4A,I GET VALUE DSP20 LDA LBUF+2 SET EQUAL SIGN(=) IN 6TH CHAR AND UPCM OF PRINT LINE IOR B75 STA LBUF+2 LDA LBUF4 JSB CONV CONVERT THE VALUE TO ASCII LDA D12 DSP25 LDB LBUFA JSB PRINT PRINT THE LINE JMP NXTCM FINISHED, GET NEXT COMMAND DSP30 LDA MD5 MOVE "UNDEFINED" TO LBUF LDB DSP40 JSB DMOVEX LBUF4 DEF LBUF+3 LDA D15 JMP DSP25 * DSP40 DEF *+1 ASC 5,UNDEFINED ***** * ** MAP COMMAND PROCESSOR * * LISTO--CORE MAP LISTING FLAG * BIT 0 GLOBAL VARIABLES * 1 MODULES * 2 LINKS * 3 HEADING HAS BEEN PRINTED ***** MAPST LDA LISTO AND D8 STA LISTO MAP1 LDA MD6 LDB MTABL JSB SCAN JMP CMER STA B LDA LISTO CPB B4 MAP ON? RSS YES. SAME AS MAP ALL. CPB B6 ALL ? IOR B7 YES, SET ALL THREE OPTIONS. CPB B1 MODULES? IOR B2 CPB B2 GLOBALS? IOR B1 CPB B3 LINKS? IOR B4 CPB B5 OFF? CLA RESET POINTER STA LISTO JSB DELIM ADVANCE PAST DELIMITERS RSS JMP MAP1 LDA LISTO SZA,RSS ANY OPTIONS ON? JMP NXTCM NO, GET NEXT COMMAND AND D8 HAS HEADING BEEN PRINTED? SZA JMP NXTCM YES, GET NEXT COMMAND LDA LISTO RESTORE IOR D8 STA LISTO LDA HEAD1 LDB HEAD1+1 JSB LOUT LDA HEAD1 LDB HEAD2 JSB LOUT LDA HEAD1 LDB HEAD3 JSB LOUT JMP NXTCM GET NEXT COMMAND SPC 1 HEAD1 DEC 47 # CHARS. IN EACH PRINT LINE. DEF *+1 ASC 24, PROGRAM ENTRY LOW HIGH LOW HIGH HEAD2 DEF *+1 ASC 24, MODULE POINT MAIN MAIN BASE BASE HEAD3 DEF *+1 ASC 24, ---------------------------------------------- ***** * ** BOUNDS COMMAND PROCESSOR * ***** BNDST LDA MD6 LDB KTABL JSB SCAN JMP CMER NO MORE KEYWORDS ADA M1 ADA .MEM. COMPUTE ADDRESS STA NCHAR SAVE ADDRESS TEMPORARILY JSB NXTC GET NEXT NON BLANK CHAR JMP CMER CPA B75 EQUAL SIGN? RSS JMP CMER NO,ERROR JSB NSCAN GET OCTAL NUMBER JMP CMER NO MORE CHARS. JMP CMER NOT NUMERIC SSA IS IT POSITIVE OR ZERO? JMP BER1 NO. ISSUE ERROR AND IGNORE. STA NCHAR,I LEGAL ADDRESS, POST VALUE AND JSB DELIM JMP NXTCM JMP BNDST LOOK FOR NEW PARAMETERS SPC 1 BER1 LDB BER2 ISSUE "IL BND" ERROR JSB DIAG JMP NXTCM AND GET NEXT COMMAND * BER2 DEF *+1 DEC 6 ASC 3,IL BND ***** * ** SET COMMAND PROCESSOR * ***** SETST CLA STA STMP LDA M2 LDB LTABL LOCC OR BPLOCC? JSB SCAN JMP SET01 NO, MUST BE SYM TAB ENTRY ADA RBTA YES, SAVE ADDRESS TO STA STMP PUT VALUE INTO JMP SET02 SET01 JSB BLINE BLANK OUT THE BUFFER LDA LBUFA THEN MOVE NAME TO BUF JSB MOVE. FOR LATER CHECKING SET02 CCA LDB TOTBL LOOK FOR "TO" JSB SCAN JMP CMER NOT FOUND, ERROR JSB NSCAN GET VALUE JMP CMER JMP CMER STA SVAL SAVE VALUE LDB STMP IF SYM TAB ENTRY, SZB,RSS JMP SET03 THEN JUMP TO SET03 STA STMP,I ELSE SET VALUE INTO LOCC JMP NXTCM OR BPLOCC AND GET NEXT COMMAND SET03 LDB LBUFA LOOK FOR SYMBOL IN JSB SSTBL SYMBOL TABLE JMP SET04 NOT FOUND LDA SVAL IF FOUND, STA LST4A,I STORE VALUE, JMP NXTCM AND GET NEXT COMMAND SET04 LDA SVAL STA LST4A,I STORE THE VALUE CLA STA LST5A,I INITIALIZE LINK POINTER ISZ LST BUMP ENTRIES COUNTER LDB LBUFA LDA B,I STA LST1A,I STORE FIRST 2 CHARS INB LDA B,I STA LST2A,I STORE SECOND TWO CHARS INB LDA B,I AND UPCM ZER OUT EXT ID NBR STA LST3A,I AND STORE FIFTH CHAR JMP NXTCM THEN GET NEXT COMMAND * STMP NOP SVAL NOP ***** * ** LINKS STATEMENT COMMAND PROCESSOR * ***** LNKST LDA M2 LOOK LDB STABL FOR JSB SCAN "START" OR "IN". JMP CMER NEITHER, ERROR. CPA ONE 1 MEANS "START", ELSE "IN". JMP LSTRT GO DO LINKS START..... LDA M2 LOOK LDB BCTBL FOR JSB SCAN BASE OR CURRENT. JMP CMER NEITHER, ERROR. CLE,ERA 1 MEANT BASE, 2 MEANT CURRENT. STA CPLMG 0 => BASE, 1 => CURRENT MODE. STA CPLML SET LOCAL: 0 => OFF, 1 => ON. JMP NXTCM GO GET NEXT COMMAND. LSTRT CCA LDB ATTBL JSB SCAN LOOK FOR "AT" JMP CMER JSB NSCAN GET LINK ADDRESS JMP CMER JMP CMER STA LINKA AND SAVE IT JSB NXTC GET NEXT NON-BLANK CHAR JMP CMER CPA B54 IS IT A COMMA? RSS YES, GOOD JMP CMER NO, ERROR JSB NSCAN GET LINK VALUE JMP CMER JMP CMER STA LINKV AND SAVE IT JSB LSTI INITIALIZE SYMBOL TABLE POINTERS LNK01 JSB LSTP ADVANCE TO NEXT ENTRY JMP NXTCM NO MORE, GET NEXT COMMAND LDB LINKA LDA LST4A,I CPA LINKV STB LST5A,I JMP LNK01 * LINKA NOP LINKV NOP * ***** * ** EXTERNALS INDIRECT/DIRECT OPTION * ***** EXTST LDA M2 DIRECT/INDIRECT...ONLY TWO LEGAL LDB DTABL ADDRESS OF START OF DIRECT/INDIRECT JSB SCAN LOOK FOR "DIRECT" OR "INDIRECT" JMP CMER ERROR CLE,ERA 1=INDIRECT, 2=DIRECT...CONVERT TO 0,1 STA DIRFL SAVE FOR ENTRIES JMP NXTCM AND GET NEXT COMMAND * DTABL DEF DIEXT * SKP ***** * ** ECOST ** ECHO ON/OFF STATEMENT PROCESSOR * ***** * ECOST LDA M2 TWO LEGAL OPTIONS: ON, OFF LDB SWTBL ON/OFF MNEMONIC-TABLE ADDRESS. JSB SCAN GO TO SEARCH FOR "ON" OR "OFF". JMP CMER * NEITHER ONE--ERROR! * CLE,ERA 1=ON, 2=OFF--CONVERT TO 0 OR 1. STA #ECHO SET THE COMMAND-ECHO SWITCH. JMP NXTCM GO TO GET THE NEXT COMMAND. * ***** * ** NXT>NLHC ** GET NEXT NON-BLANK CHAR FROM INPUT BUFFER (QIBUF) *CALLING SEQUENCE: * * JSB NXTC * RETURN1 NO MORE NON-BLANK CHARS * RETURN2 GOT ONE, AND IT IS RETURNED IN .A. * ***** NXTC NOP GET NEXT NONN-BLANK CHARACTER. JSB QGETC JMP NXTC,I ERROR RETURN CPA B40 BLANK? JMP NXTC+1 GET ANOTHER CHARACTER CPA B55 IS IT A "-"? JMP NXTC+1 YES...IGNORE IT ISZ NXTC TAKE NORMAL EXIT JMP NXTC,I MD4 DEC -4 B55 OCT 55 ***** * ** LTG ** LEADER-TRAILER GENERATOR ***** * ** DIAG ** OUTPUT MESSAGES THAT ARE STORED WITH THE CHAR COUNT * IMMEDIATELY PRECEEDING THE BUFFER. * CALLING SEQUENCE: * * LDB ADDRESS OF BUFFER MINUS 1, WHICH CONTAIN BUFFER LENGTH * JSB DIAG * RETURN * ***** DIAG NOP ENTRY: LDB,JSB LDA B,I INB JSB PRINT OUTPUT DIAGNOSTIC JMP DIAG,I RETURN. * * cN* DIAGNOSTIC OUTPUT SECTION * LER3 LDB ERR03 MEMORY OVERFLOW JMP ERROR * LER4 LDB ERR04 LINKAGE AREA OVERFLOW JMP ERROR * LER5 LDB ERR08 ERROR CALCULATING MODULE SIZE JMP ERROR * ERROR JSB DIAG PRINT DIAGNOSTIC ABORT LDB RAMSG PRINT MESSAGE JSB DIAG FOR RELOCATION ABORTED CLA STA UEXFL CLEAR UNDEF EXTERNS FLAG STA NAMR. ALLOW A NAM RECORD STA DIRFL DEFAULT IS FOR FORCED INDIRECT JSB LSTI INITIALIZE SYM TAB POINTERS LOOP1 JSB LSTP GO TO NEXT SYM TAB ENTRY JMP ABRT1 FCLOS FILE, IF OPEN LDA LST3A,I CLEAR AND UPCM EXTERNAL STA LST3A,I ID NUMBER JMP LOOP1 DO FOR ALL SYM TAB ENTRIES * ABRT1 JSB FCLOS FCLOS INPUT FILE DEF *+2 DEF RLDCB JMP PRCMD,I AND DO ERROR RETURN * RAMSG DEF *+1 OCT 6 ASC 3,REL AB * ERR03 DEF *+1 OCT 6 ASC 3,MEM OV * ERR04 DEF *+1 OCT 6 ASC 3,BPG OV * * ERR06 DEF *+1 OCT 6 ASC 3,COM OV * ERR07 DEF *+1 OCT 6 ASC 3,DU ENT * ERR08 DEF *+1 OCT 6 ASC 3,SIZ ER * ILBP LDB ILBP. JMP ERROR ILBP. DEF *+1 OCT 6 ASC 3,IL BPL SPC 2 SKP * *ROUTINES FOR PROCESSING RECORDS * ***** * ** NAM RECORD PROCESSOR *** RIC = 1 * * THIS ROUTINE IS CALLED TO ASSIGN SPACE FOR A PROGRAM * TO BE LOADED. THE NAM RECORD IS MOVED FROM LBUF TO * NBUF BEFORE THIS ROUTINE IS CALLED. * SPECIAL CONVENTIONS APPLY TO FORTRAN AND ALGOL * PROGRAMS. IN A FORTRAN PROGRAM (IDENTIFIED BY 1 IN * SIGN POSITION OF WORD 7 OF NAM RECORD) THE PROGRAM * LENGTH IN WORD 7 MAY BE GREATER THAN THE ACTUAL LENGTH. * THEREFORE THE UPPER BOUND IS NOT SET UNTIL LOADING * OF DATA BLOCKS. ***** NAMR NOP LDA CPLMG GET GLOBAL MODE FLAG. SZA,RSS IS GLOBAL MODE ON ? JMP NAMR2 NO, GO TO BASEw PAGE PROCESSING. JSB SIZE YES, GO GET SIZE OF MODULE. SZA,RSS WAS CPLML TURNED OFF IN SIZE ? JMP NAMR2 YES, DO NOT C.P. LINK THIS MODULE. SSA ERROR DURING SIZE PROCESSING? JMP LER5 YES. STA MODSZ NO, SAVE SIZE. LDA CPLPR RESET CURRENT PAGE LINK STA CPLP BUFFER POINTER. LDB LOCC GET CLA THE RRL 6 FIRST INA WORD LSL 10 ADDRESS STA FWANP NEXT PAGE. LDB LOCC GET NEGATIVE OF CMB,INB CURRENT LOCATION. ADB A SUBTRACT FROM FWANP. STB SIZEA SAVE # WORDS LEFT ON CURRENT PG. CMB,INB GET NEG # WORDS LEFT. ADB MODSZ SUBTRACT FROM MODULE SIZE. SSB,RSS PAGE CROSSING ? JMP PAGEX YES. CLA NO. STA CPLML TURN OFF LOCAL MODE. JMP NAMR2 FINISH PROCESSING NORMALLY. PAGEX STB SIZEB SAVE # WORDS OFF CURRENT PAGE. LDA SIZEA GET # WORDS CURR PG AGAIN. ADA MAGIC # SUBTRACT THE MAGIC NUMBER. SSA,RSS CLOSE ENOUGH TO PAGE BOUNDARY ? JMP DOFRM NO, GO DO THE MIN FORMULA. LDA FWANP YES, STA LOCC MOVE LOCC UP TO NEXT PAGE. STA CPLS SET CURR PG LINK START ADDR. STA CPPTR SET CURR PG LINK POINTER. LDA MODSZ GET TOTAL SIZE OF MODULE. ADA MD1K SUBTRACT 1024. STA MSM1K SAVE FOR POSSIBLE USE LATER. SSA IS TOTAL SIZE LESS THAN 1024 ? JMP NOLNK YES, NO LINKS NEEDED ON CP. ADA MD256 NO, SUBTRACT ANOTHER 256. SSA IS TOTAL SIZE LESS THAN 1280. JMP SMLNK YES, ALLOCATE (MSM1K) LINK AREA. LDA ONE28 NO, STA #LNKS ALLOCATE 128 LINKS. SETUP ADA LOCC BUMP LOCC OVER STA LOCC CP LINK AREA. LDA CPLPR GET LINKS BUFFER ADDRESS. ADA #LNKS BUMP BY NUMBER OF LINKS ALLOCATED. STA CPLE SET CP AREA END. JMP NAMR2 CONTINUE NAM PROCESSING. NOLNK CLA STA CPLML TURN OFF LOCAL MODE. STA #LNKS ZERO LINK ALLOCATION. JMP NAMR2 CONTINUE NAM PROCESSING. SMLNK LDA MSM1K GET MODULE SIZE MINUS 1024. ARS,ARS DIVIDE BY 4. STA #LNKS ALLOCATE (MSM1K-1024)/4 LINKS. JMP SETUP GO SET UP ADDRESSES BEFORE CONTINUING. DOFRM LDA SIZEA GET A FOR FORMULA. ARS DIVIDE BY TWO. CMA,INA MAKE NEGATIVE. ADB A SUBTRACT A/2 FROM B. SSB WHICH IS SMALLER. JMP BLTA B LESS THAN A/2, OR EQUAL. LDA SIZEA A/2 LESS THAN B. ARS DIVIDE BY TWO. JMP BLTA+1 BLTA LDA SIZEB GET B AGAIN. ARS,ARS DIVIDE BY 4. STA #LNKS ALLOCATE LINKS. LDA LOCC SET UP STA CPLS START AND STA CPPTR POINTER. ADA #LNKS BUMP LOCC OVER CP ALLOCATION. JMP SETUP+1 GO TO SAVE LOCC & SET CP LIMIT. NAMR2 LDA NBUF+10 CHECK BASE PAGE LENGTH SSA JMP ILBP ILLEGAL BASE PAGE LENGTH(<0) LDB NBUF+11 GET COMMON LENGTH. SZB,RSS JMP NM1 NO COMMON LDA .MEM5 SZA,RSS JMP NM6 ALLOCATE 1ST COMMON CMA,INA ADA .MEM6 INA STA COML CMB,INB ADB A CHECK FOR COMMON LENGTH OVERFLOW SSB,RSS JMP NM1 LENGTH GOOD LDB ERR06 COMMON BLOCK ERROR JMP ERROR SPC 2 NM6 STB COML ALLOCATE 1ST COMMON LDA LOCC MOVE PROGRAM RELOCATION BASE UP. STA .MEM5 ADA COML STA .MEM6 INA STA LOCC RESET LOCATION COUNTER NM1 LDA BPLOC SET LOWER BOUND OF BASE PAGE AREA STA BPPTR INITIALIZE BASE PAGE POINTER LDA LOCC SET LOWER BOUND OF PROGRAM AREA STA PAPTR INITIALIZE PROGRAM AREA POINTER LDA .MEEM5 STA COMOR LDA NBUF+9 GET PROGRAM LENGTH STA FTNFL SET FORTRAN LOADING FLAG - BIT 15 CPA M1 ALGOL PROGRAM? JMP NAMR,I YES. LIMITS SET DURING LOADING. * * ALLOCATE BASE PAGE STORAGE * LDA NBUF+10 GET BASE PAGE AGAIN SZA,RSS IF NO BP ALLOCATION, JMP NM2 CHECK FOR PROGRAM ALLOCATION. ADA BPLOC COMPUTE LAST LOCATION & STA B CHECK FOR OVERFLOW ADA M1 CMA,INA ADA .MEM2 SSA NEGATIVE MEANS OVERFLOW JMP LER4 OF BASE PAGE AREA STB BPPTR SET UPPER LIMIT B. P. * * ALLOCATE PROGRAM AREA STORAGE * NM2 LDA NBUF+9 GET PROGRAM LENGTH SZA,RSS IF PROGRAM LENGTH = 0, JMP NAMR,I LDB FTNFL COMPILER-GENERATED? SSB JMP NAMR,I YES,LIMITS SET DURING DBL PROCESSING ADA LOCC COMPUTE HIGH ADDRESS & STA B CHECK FOR OVERFLOW CMA,INA ADA .MEM4 SSA NEGATIVE RESULT MEANS OVERFLOW JMP LER3 MEMORY OVERFLOW ERROR STB PAPTR SET UPPER BOUND JMP NAMR,I SPC 1 SPC 2 ***** * ** ENT ** EXT RECORD PROCESSORS * * ENT RECORD PROCESSOR (RIC = 2) * EXT RECORD PROCESSOR (RIC = 4) * * PURPOSE OF THIS SECTION IS TO PROCESS ENTRY POINTS * AND EXTERNAL SYMBOLS, ADD SYMBOLS TO THE * LOADER SYMBOL TABLE, AND * SET A FLAG IF AN ENTRY POINT FROM A LIBRARY * LOAD MATCHES AN UNDEFINED EXTERNAL SYMBOL. * CONTROL RETURNED FROM THIS SECTION TO -LDRIN-. * * WORDS USED FOR TEMPORARY STORAGE: * * LBUF - RECORD TYPE FLAG: 1 = ENT, 0 = EXT * LBUF+1 - NEGATIVE COUNT OF ENT/EXT ENTRIES IN RECORD. * LBUF+2 - FIRST WORD ADDRESS OF CURRENT ENTRY. ***** EXTR CLA,RSS EXT: FLAG=0 ENTR CLA,INA ENT: FLAG=1 STA LBUF SAVE RECORD TYPE LDA LBUF+1 GET AND ISOLATE AND B77 RECORD ITEM COUNT. CMA,INA SET NEGATIVE FOR = STA LBUF+1 COUNTER IN PROCESSING LDA LBUFA SET LBUF+2 = ADDRESS OF ADA B3 FIRST ENTRY STA LBUF+2 IN RECORD * * CHECK LST AND RECORD ENTRIES FOR MATCHING SYMBOLS * ENTX1 LDB LBUF+2 GET ADDRESS OF SYMBOL JSB SSTBL SEE IF IT IS THERE JMP ENTX6 NOT THERE...PUT IT IN LDB LBUF+2 GET ADDRESS OF WORD #3 OF ADB B2 ENTRY NAME. LDA LBUF IF RECORD TYPE SZA,RSS JMP EXT0 IS EXT, GO POST ORDINAL. * * SYMBOL MATCH IN ENT RECORD * LDA LST4A,I IS ENT DEFINED? SZA OR IS IT A SPECIAL ENTRY CPA UDFE IS SPECIAL..TREAT AS UNDEF ENTRY JMP ENT21 NO. SET VALUE FROM RECORD. LDB SERFG YES, LOADING FROM LIBRARY SZB JMP ENTX5 IGNORE DUPLICATE FROM LIBRARY. LDB ERR07 JSB DIAG COMPLAIN ABOUT DUPLICATE LDB LBUF+2 LDA B5 PRINT "OFFENDING" ENT SYMBOL JSB PRINT JMP ENTX5 * * ADD ENTRY POINT ADDRESS TO LST ENTRY. * ENT21 CLA CLEAR "LIBRARY LOAD" FLAG. STA SERFG ENT22 LDA B,I GET WORD 3 OF RECORD ENTRY STA LST3A,I AND STORE IN LST WORD 3. INB GET WORD 4 OF RECORD ENTRY LDB B,I (ENTRY VALUE). CMB COMPLEMENT TO INDICATE UNRELOCATED STB LST4A,I SAVE IN LST FOR LATER ACTION. * * ENTRY FROM INPUT LOADING * * * ADVANCE TO NEXT RECORD ITEM * ENTX5 LDB LBUF+2 GET OLD RECORD ENTRY ADDRESS ADB B3 ADD 3 FOR NEXT EXT ENTRY. ADB LBUF ADD ONE MORE FOR ENT RECORD. STB LBUF+2 SET ADDRESS OF NEXT ENTRY. ISZ LBUF+1 INDEX ENTRY COUNT - JMP ENTX1 MORE TO PROCESS. JMP LDRIN FINISHED- GET NEXT RECORD. * * NO MATCH IN LST FOR RECORD ENTRY SYMBOL - ADD * NEW ENTRY - CHECK FIRST FOR MEMORY CONFLICT. * * ENTX6 LDB LBUF+2 (B) = RECORD ENTRY ADDR. LDA B,I MOVE WORDS 1 AND 2 OF RECORD Z$STA LST1A,I ENTRY TO WORDS INB 1 AND 2 NEW LST ENTRY LDA B,I (WORD 3 WILL BE SET LATER) STA LST2A,I INB (B) = ADDR. OF WORD 3, REC. ENTRY LDA UDFE STA LST4A,I DENOTE UNDEFINED. CLA STA LST5A,I DENOTE NO LINK ASSIGNED ISZ LST ADD 1 TO LST ENTRY COUNT. LDA LBUF GET RECORD TYPE FLAG SZA JMP ENT22 ENT; GO POST VALUE. EXT0 LDA B,I GET WORD 3 OF RECORD ENTRY, STA LST3A,I STORE TO POST EXT ORDINAL. LDA DIRFL FORCED INDIRECT FLAG 0-FORCED INDIRECT SZA 1-MAKE DIRECT LINK IF YOU CAN JMP ENTX5 NON-ZERO, POSTPONE LINK ASSIGNMENT LDA LST5A,I HAS A LINK ALREADY BEEN ASSIGNED? SZA JMP ENTX5 YES, CONTINUE PROCESSING LDA LST4A,I NO, ALLOCATE ONE CPA UDFE LINK ROUTINE RECOGNIZES UNDEFINED AS CLA 0 IN .A.(VALUE OF SYMBOL PARAM) JSB LINK ALLOCATE THE LINK STB LST5A,I AND UPDATE SYMBOL TABLE JMP ENTX5 GO PROCESS NEXT ITEM. * * ER10 LDB LST1A,I MOVE SYMBOL INTO STB ER10B ERROR MESSAGE. LDB LST2A,I STB ER10B+1 LDB LST3A,I STB ER10B+2 LDB ERR10 JSB DIAG LDA NBUF+2 STORE OPCODE ONLY. JMP DBL3 * ERR10 DEF *+1 OCT 21 ASC 6, UNDEF EXT: ER10B BSS 3 DIRFL NOP DIRECT FLAG, 1=DIRECT OPTION, 0=ALWAYS INDIRECT ***** * ** RELEN ** RELOCATE ENTRY POINT ADDRESS * CALLING SEQUENCE: (B) = UNRELOCATED ENT VALUE * (A)=CONTENTS OF LST3(RELOCATION BASE) * JSB RELEN * RETURN: (A) = LINK ADDRESS, IF ANY * (B) = RELOCATED ENT ADDRESS * * PURPOSE: RELOCATES ENT ADDRESS AS DESIGNATED * BY THE RELOCATION FIELD (R) IN BITS * 00-01 OF (LST3). 0 = PROGRAM, 1 = BASE * PAGE, 2 = COMMON, 3 = ABSOLUTE. * ALSO POSTS VALUE IN LINK TABLE. * BITS 07-00 OF (LST3) ARE CLEARED. ***** RELEN NOP ENTRY/EXIT POINT AND B7 GET R-FIELD ADA RBTO ADB A,I RELOCATE SYMBOL VALUE STB LST4A,I POST ENTRY VALUE IN LST. LDA LST5A,I GET LINK ADDRESS, IF ANY SZA,RSS IS LINK ASSIGNED? JMP RELEN,I NO. EXIT. ADA BPAGA C174 STB A,I YES. POST VALUE IN LINK TABLE. LDA LST5A,I RECOVER LINK ADDRESS JMP RELEN,I EXIT SKP * * DBL RECORD PROCESSING * * DATA BLOCK RECORD PROCESSOR (RIC = 3) SPC 1 * THIS SECTION RELOCATES THE LOAD ADDRESS OF A DATA * BLOCK AND RELOCATES AND STORES THE WORDS IN IT. * * A RELOCATION BYTE IS ASSOCIATED WITH EACH * INSTRUCTION OR DATA WORD IN A DBL RECORD. * THIS 3-BIT BYTE CONTAINS ONE OF THE * FOLLOWING RELOCATION INDICATORS: SPC 1 * 000 - ABSOLUTE * 001 - PROGRAM RELOCATABLE * 010 - BASE PAGE RELOCATABLE * 011 - COMMON RELOCATABLE * 100 - EXTERNAL SYMBOL REFERENCE (NO OFFSET) * 101 - TWO-WORD GROUP. WORD 1 CONTAINS OPCODE, * RELOCATION BYTE FOR OFFSET, AND AN OPTIONAL * EXTERNAL SYMBOL ORDINAL. WORD 2 CONTAINS THE * OFFSET (ADDRESS). THE RELOCATION BYTE CAN BE: * 00 - PROGRAM * 01 - BASE PAGE * 10 - COMMON * 11 - ABSOLUTE * 110 - TWO-WORD BYTE ADDRESS RECORD * * THIS SECTION USES THE RELOCATION BASE * TABLE (RBT) TO RELOCATE THE LOAD * ADDRESS AND DATA WORDS. THE RELOCATION * BASES IN THE RBT ARE SET BY THE NAM * RECORD PROCESSOR. THE TABLE IS STRUCTURED * AS: * RBTA DEF *+1 * RBT OCT 0 (ABSOLUTE) * PREL (PROGRAM ORIGIN - FWA) * BPREL (BASE PAGE ORIGIN (FROM ORB) * COMOR (COMMON AREA ORIGIN) * OCT 0 (ABSOLUTE AGAIN) * * IF A FORTRAN GENERATED PROGRAM IS BEING LOADED, * A CHECK FOR MEMORY OVERFLOW IS MADE BEFORE * EACH DBL RECORD IS PROCESSED. IF OVERFLOW OCCURS, * AN IMMEDIATE TERMINATION OF LOADING IS MADE * BY TRANSFERRING TO THE ERROR ROUTINE. OTHERWISE, * THE NEW FWA OF THE MEMORY AREA IS SET AND * LOADING CONTINUES. THE DBL RECORDS FOR A FTN * OBJECT PROGRAM ARE GENERATED IN ASCENDING * ORDER - I.E. THE LOAD ADDRESS OF EACH DBL RECORD * IS LARGER THAN THE PREVIOUS - AND THE LAST DBL * RECORD LOADED IS THE LAST PROGRAM SEGMENT (I.E., * A BSS DOES NOT FOLLOW) SO THE NEW FWA OF AVAIL. * MEMORY IS KNOWN AFTER THE LAST DBL RECORD IS * PROCESSED. ******************************************************************** SPC 3 ***** * ** DBL RECORD PROCESSOR * ***** SPC 2 DBLR LDA LBUF+1 RELOCATE THE ASR 6 DBL AND B3 LOAD XOR B1 ADDRESS STA QGETC SAVE RELOCATION BASE CODE ADA RBTO LDA A,I NOW GET RELOCATED ADDRESS ADA LBUF+3 AND ADD RECORD RELOCATION STA LBUF STORE RELOCATED RECORD ADDRESS LDB CPLMG GET GLOBAL MODE FLAG SZB,RSS IS GLOBAL MODE ON? JMP DBL00 NO - NEEDN'T CHECK PAGE CROSSING LDB CPLML GET LOCAL MODE FLAG SZB,RSS IS LOCAL MODE ON? JMP DBL00 NO * YES - CHECK FOR PAGE CROSSING AND C076 GET PAGE OF LOCAL ADDRESS STA ABRC1 ** TEMPORARY STORAGE ** LDA CPLS GET PAGE OF BEGINNING AND C076 CURRENT PAGE LINKS CPA ABRC1 SAME PAGES JMP *+3 YES - PROCEED AS NORMAL CLA NO - TURN OFF CURRENT PAGE STA CPLML LINKS LOCAL MODE LDA LBUF GET LOAD ADDRESS AGAIN DBL00 STA ABRC1 STORE ABSOLUTE RECORD ADDRESS. LDA LBUF+1 GET # OF AND B77 INSTRUCTIONS CMA,INA AND MAKE NEGATIVE STA LBUF+1 STORE INSTRUCTION COUNT * * CHECK FOR MEMORY OVERFLOW OF FTN OR ALGOL PGM * CMA,INA RESET WORD COUN0T TO POSITIVE. ADA LBUF ADD LOAD ADDR. TO WORD COUNT. LDB FTNFL FORTRAN OR ALGOL PROGRAM? SSB,RSS JMP DBL0 NO. LIMIT CAME FROM NAM REC. LDB QGETC GET RELOCATION CODE SZB PROGRAM RELOCATION BASE? JMP DBL0 NO, CONTINUE PROCESSING STA PAPTR YES, SAVE HIGH MAIN ADDRESS CMA,INA ADA .MEM4 SSA A NEGATIVE RESULT MEANS OVERFLOW JMP LER3 AND TERMINATION OF LOADING. DBL0 LDA LBUF5 GET ADDRESS OF WORD 5 OF DBL * RECORD (FIRST RELOC. BYTE WORD) STA LBUF+2 IN LBUF+2. DBL1 LDB LBUF+2,I SET RELOCATION BYTE WORD STB LBUF+3 IN LBUF+3. LDA M5 SET BYTE COUNTER STA NBUF = -5 ISZ LBUF+2 SET ADDRESS FOR FIRST DATA WORD. DBL2 LDA LBUF+3 GET RELOC. BYTE WORD - ROTATE ALF,RAR 3-BIT BYTE FOR NEXT INSTR. TO STA LBUF+3 LOW A AND RESTORE WORD. AND B7 ISOLATE BYTE. CPA B4 IF BYTE = 4, THEN GO TO EXTERNAL JMP DBL4 REFERENCE SECTION. CPA B5 IF BYTE = 5, THEN GO TO 2-WORD JMP DBL5 MEMORY REFERENCE GROUP SECTION. CPA B6 IF BYTE = 6, THEN GO TO PROCESS JMP DBL6 BYTE ADDRESS INSTRUCTION. ADA RBTA BYTE = 0-3. ADD ADDR. OF RBT LDA A,I TO BYTE AND GET BASE VALUE. ADA LBUF+2,I ADD DATA WORD TO RELOCATION BASE DBL3 JSB PACK$ LDA LBUF GET LOAD ADDRESS ISZ LBUF INCREMENT IT XOR LBUF CHECK TO SEE IF A PAGE AND C076 BOUNDARY WAS CROSSED SZA,RSS JMP DBL31 CLA YES, SO CAN NO LONGER STA CPLML USE CURRENT PAGE LINKS DBL31 ISZ LBUF+1 INDEX DATA WORD COUNT JMP DBL9 MORE IN RECORD. JSB PUNCH OUTPUT THE ABSOLUTE RECORD. JMP LDRIN PROCESS NEXT INPUT RECORD. * DBL9 ISZ LBUF+2 ADD 1 TO RECORD ADDRESS ISZ NBUF INDEX REL-BYTE |(COUNTER JMP DBL2 MORE BYTES IN WORD JMP DBL1 GET NEXT BYTE WORD. * * CODE 4: ADDRESSABLE INSTRUCTION OR DEF REFERENCING * AN EXTERNAL SYMBOL (WITHOUT OFFSET). ADDRESSABLES * USE PRIOR LINK AS FIRST CHOICE SO AS TO RE-USE * LINKS OUT OF CURRENT AREA. DEFS USE DIRECT ADDRESS * AS FIRST CHOICE. * DBL4 LDA LBUF+2,I GET INSTR. WORD STA NBUF+2 SAVE IT JSB ORDSR SEARCH FOR EXT ORDINAL LDA NBUF+2 AND C074 GET OPCODE SZA,RSS DEF? JMP DBL45 YES. USE VALUE IF DEFINED. LDB LST5A,I GET LINK ADDRESS SZB IS LINK ASSIGNED? JMP DBL46 YES. USE IT. DBL45 LDB LST4A,I GET VALUE CPB UDFE DEFINED? CLA,RSS NO. JMP DBL10 YES, LINK MAY NOT BE NEEDED LDB LST5A,I GET LINK ADDRESS SZB,RSS IS LINK ASSIGNED? JSB LINK NO. GET ONE. STB LST5A,I SAVE LINK ADDRESS. DBL46 LDA NBUF+2 GET INSTRUCTION SSA FORWARD REFERENCES INDIRECTLY TO JMP DBL47 EXTERNAL, TREAT AS THOU NOT DEFINED AND C174 REMOVE EXT ORDINAL IOR C1000 SET FOR INDIRECT IOR B COMBINE ADDRESS JMP DBL3 GO STORE INSTRUCTION * DBL47 LDB LST4A,I GET ACTUAL ADDRESS...FOR RELOCATION * DBL10 CLA STA RTMP1 SET UP RTMP FOR NO LINK CASE LDA LST5A,I IF ENTRY IS SPECIAL IOR BIT15 DON'T USE DIRECT LINK SZB,RSS LDB A USE BASE PAGE INDIRECT JSB SPLIC BUILD INSTR,ALLOC LINK IF NEEDED. LDB NBUF+2 GET MODIFIED INSTRUCTION. SSB IF IT IS AN INDIRECT EXTERNAL REFERENCE, JMP DBL3 DO NOT CHANGE THE SYMBOL TABLE ENTRY. LDB RTMP1 ELSE, GET THE NEW LINK ADDRESS. SZB IF A NEW LINK WAS CREATED, STB LST5A,I SAVE IT IN SY.MBOL TABLE ENTRY. JMP DBL3 * RTMP1 NOP * ORDSR NOP AND B377 ISOLATE EXT ORDINAL STj$A NBUF+1 SAVE ORDINAL SZA,RSS EXT PRESENT? JMP ORDSR,I NO. EXIT. JSB LSTI INITIALIZE LST PROCESSOR ORDLP JSB LSTP SET LST ENTRY ADDRESSES. JMP ILEXT ORDINAL MUST EXIST LDA LST3A,I GET WORD 3 OF LST ENTRY, ISOLATE AND B377 BITS 07-00, AND COMPARE VALUE TO CPA NBUF+1 SAVED EXT ORDINAL RSS JMP ORDLP NOT FOUND, KEEP SEARCHING LST LDA LST4A,I FOUND SSA,RSS IS IT REALLY AN EXT ID #? JMP ORDSR,I YES, RETURN JMP ORDLP NO, KEEP LOOKING * SKP * CODE 5: 2-WORD GROUP FOR MEMORY REFERENCE OR * EXTERNAL REFERENCE WITH OFFSET. * DBL5 LDA LBUF+2,I GET WORD 1 (OP-CODE,REL. BYTE) STA NBUF+2 SAVE IT RAR,RAR JSB ORDSR ANY EXTERNAL? ISZ LBUF+2 POINT AT OFFSET LDB LBUF+2,I GET OFFSET LDA NBUF+2 GET WORD 1 AND B3 SAVE REL BYTE ADA RBTO ADB A,I RELOCATE OPERAND LDA NBUF+1 SZA,RSS ANY EXTERNAL? JMP DBL5A NO. LDA LST4A,I CPA UDFE IS EXTERNAL DEFINED? JMP ER10 NO. COMPLAIN. SZA,RSS IF ADDRESS IS SPECIAL...NOT DEFINED SZB,RSS NO OFFSET IS ALLOWED RSS OK JMP ER10 ERROR OFFEST ON SPECIAL NOT LEGAL ADB LST4A,I YES, ADD VALUE. DBL5A JSB SPLIC JMP DBL3 STORE IT. * * CODE 6: 2-WORD GROUP FOR BYTE ADDRESS DEFINITION (DBL/DBR) * DBL6 LDA LBUF+2,I GET THE INSTRUCTION WORD. ALF POSITION INSTRUCTION TO LOWER BYTE. AND D15 ISOLATE INSTRUCTION FIELD. SZA MUST BE =0; ELSE, JMP LER2 THIS IS AN ILLEGAL RECORD! LDA LBUF+2,I GET THE INSTRUCTION WORD AGAIN. AND B3 ISOLATE THE RELOCATION INDICATOR. LDB RBTO GET THE PROPER ADB A RELOCATION BASE LDB B,I FROM THE TABLE. RBL CONVERT IT TO BYmTE ADDRESS FORMAT [*2]. ISZ LBUF+2 POINT TO THE SECOND INSTRUCTION WORD. LDA LBUF+2,I GET THE BYTE ADDRESS. CLE,SSA IF THE SIGN IS SET, THEN JMP LER2 THIS IS AN ILLEGAL RECORD! ADA B FORM THE RELOCATED BYTE ADDRESS. SEZ,RSS IF THE RESULT IS A VALID BYTE ADDRESS, JMP DBL3 GO TO RECORD THE RESULT; ELSE, JMP LER2 REPORT THE ILLEGAL RECORD ERROR! * SKP ***** * ** SPLIC ** * * THIS ROUTINE COMBINES OPCODES WITH ADDRESSES IN * ADDRESSABLE INSTRUCTIONS. BASE PAGE LINKS ARE USED * AS REQUIRED TO HANDLE PAGE CROSSINGS. ***** SPLIC NOP LDA NBUF+2 RECOVER OPCODE AND C174 STA NBUF+2 SAVE INSTRUCTION RAL,CLE,SLA,ERA IF INSTR IS INDIRECT, SET SSB JMP SPL1 ADB C1000 INDIRECT BIT IN ADDRESS. SPL1 SZA,RSS ADDRESSABLE INSTRUCTION? JMP SPL2 NO. GO STORE VALUE. C074 STB A GET OPERAND ADDRESS AND C076 GET PAGE ADDRESS SZA,RSS IN BASE PAGE? JMP DBL8 YES. XOR LBUF COMPARE WITH LOAD ADDRESS AND C076 SAVE MODULE/PAGE ADDRESS. SZA,RSS JMP DBL7 OPERAND IS IN SAME PAGE. LDA B DIFFERENT: (A)_OPERAND ADDRESS JSB LINK GET BASEPAGE LINK SWP AND AMASK SAVE ONLY THE OFFSET FROM PAGE BOUND. SWP STB RTMP1 STORE OFFSET. LDA NBUF+2 (B) = OFFSET OF LINK, (A) = INSTRUCTION. IOR C1000 SET INDIRECT BIT IOR ZCBIT MERGE APPROPRIATE Z OR C BIT. SPL2 IOR B COMBINE ADDRESS JMP SPLIC,I * * OPERAND IN SAME PAGE AS INSTRUCTION. * DBL7 LDA B GET OPERAND ADDRESS AND AMASK ISOLATE PAGE AREA ADDRESS. IOR B2000 SET Z BIT = 1 (CURRENT PAGE) DBL7A IOR NBUF+2 COMBINE OPCODE, IND JMP SPLIC,I * * REFERENCE TO BASE PAGE OPERAND * DBL8 LDA B GET OPND JMP DBL7A * ILNLHEXT LDB ILEX1 OUTPUT "IL EXT" ERROR JMP ERROR * SKP * CONSTANT AND STORAGE SECTION FOR -DBLR-. * ILEX1 DEF *+1 OCT 6 ASC 3,IL EXT M5 OCT -5 B377 OCT 377 AMASK OCT 101777 SAVE INDIRECT C076 OCT 76000 B2000 OCT 2000 LBUF5 DEF LBUF+4 ZCBIT NOP EITHER ZERO OR 2000B. * vN SKP ***** * ** LINK ** ALLOCATE LINK WORD * * PURPOSE: TO SEARCH BASE PAGE LINK TABLE * FOR AN EXISTING OPERAND ADDRESS MATCHING * THE PARAMETER OPERAND AND TO ALLOCATE * A WORD TO CONTAIN THE OPERAND ADDRESS * IF A MATCH IS NOT FOUND. SPC 1 * THE OPERAND ADDRESS PARAMETER IS STORED * IN THE LINKAGE WORD IF A MATCH IS NOT * FOUND IN THE LINKAGE AREA. SPC 1 * THE OPERAND ADDRESS PARAMETER IS IN * THE A-REGISTER ON ENTRY TO LINK. THE * LOCATION OF THE WORD IN THE LINKAGE * AREA CONTAINING THE OPERAND IS RETURNED * TO THE CALLER IN THE B-REGISTER. * * ENTRY: (A) = OPERAND ADDRESS FOR SEARCH THRU LINKS * TABLE(BPAGE), OR 0 IF VALUE IS UNDEFINED * AND THE ALLOCATION OF A LINK IS TO BE * FORCED. * SPC 2 LINK NOP ENTRY/EXIT POINT STA LINK3 SAVE OPERAND CLB RESET TO BASE PAGE STB ZCBIT AS DEFAULT. LDB BPPTR GET HIGHEST BASE PAGE LOCATION SZA,RSS IS THE LINK AREA TO BE SEARCHED? JMP LINK2 NO, FORCED LINK. LDB .MEM1 YES,START AT BOTTOM LINK1 CPB BPPTR HAS ENTIRE LINK AREA BEEN SEARCHED? JMP LINK4 MATCH, GOTO ALLOCATE WORD. LDA B ADA BPAGA LDA A,I GET LINK WORD CPA LINK3 MATCH? JMP LINK,I YES INB JMP LINK1 SPC 2 LINK2 STB A CMB,INB ADB .MEM2 OVERFLOW? SSB JMP LER4 YES NO LINK ROOM. ADA BPAGA GET ADDRESS IN BASE PAGE LINK TABLE LDB LINK3 STORE VALUE STB A,I IN THERE LDB BPPTR RETURN WITH LINK ADDRESS IN (B) ISZ BPPTR INCREMENT BASE PAGE BOUND JMP LINK,I EXIT WITH LINK ADDRESS IN (B) LINK3 NOP TEMP FOR OPND ADDRESS LINK4 LDA CPLMG IS GLOBAL SZA,RSS MODE ON ? JMP LINK2 NO, GO TO BASE PAGE CODE. LDA RIC GET RELOCATION INDICATOR BACK. CPA B4 ARE WE PROCESSING AN EXT RECORD ? JMP LINK2 YES, GO DO BASE PAGE LINK FOR IT. LDA CPLML GET THE LOCAL MODE FLAG. CPA M1 IF IT'S =-1, BUFFER IS FULL, BUT PAGE JMP LINK5-1 STILL SAME, SO GO SEARCH OLD C.P.LINKS. SZA,RSS IF LOCAL MODE HAS BEEN TURNED OFF, JMP LINK2 GO TO CREATE A BASE PAGE LINK. LDA CPLPR NO, SEARCH FOR EXISTING LINK. LINK5 CPA CPLP DONE LOOKING ? JMP LINK6 YES, MAKE NEW LINK. LDB A,I NO, GET NEXT CP LINK VALUE. CPB LINK3 DO THE VALUES MATCH ? JMP LINK7 YES, WE HAVE AN EXISTING LINK. INA NO, BUMP TO ADDRESS NEXT VALUE. JMP LINK5 GO CHECK NEXT VALUE (MAYBE). LINK6 LDA CPLE IS THERE ROOM CPA CPLP FOR ANOTHER LINK. JMP LINK8 NO, CHANGE MODES. LDA LINK3 GET VALUE FOR NEW LINK. STA CPLP,I SET VALUE IN NEW LINK. LDB CPPTR GET ADDRESS OF NEW LINK. ISZ CPLP BUMP ADDRESS FOR NEXT LINK. ISZ CPPTR BUMP LINK ADDRESS POINTER. LDA B2000 SET BIT 10 FOR STA ZCBIT CURRENT PAGE LINK. JMP LINK,I RETURN TO CALLER. LINK7 LDB CPLPR GET ADDRESS OF EXISTING LINK. CMB,INB MAKE IT NEGATIVE. ADB A (A) = LINK ADDRESS IN HOST BUFFER. ADB CPLS (B) = LINK ADDRESS IN TARGET CORE. LDA B2000 SET BIT 10 FOR STA ZCBIT CURRENT PAGE LINK. JMP LINK,I RETURN TO CALLER. LINK8 CCA SET LOCAL C.P. MODE STA CPLML TO INDICATE C.P. BUFFER IS FULL. LDB BPPTR GET NEXT BP LINK ADDRESS. JMP LINK2 AND GO TO BASE BASE CODE. * * THIS IS THE IMAGE OF THE TARGET'S CURRENT PAGE * LINKING AREA. IT ALSO SERVES AS THE BUFFER TO * BE FILLED AND OUTPUT TO THE ABS OUTPUT FILE. * CPLEN NOP LENGTH WORD h3OF ABS RECORD. CPLS NOP ABS LOAD ADDRESS FOR LINKS. CPLKS BSS 128 SPACE FOR LINK VALUES. CPSUM NOP LEAVE ROOM FOR CHECKSUM. * CPLPR DEF CPLKS LINK AREA ADDRESS (NOT MODIFIED). CPLP DEF CPLKS POINTER FOR STORING VALUES IN BUFFER. CPLE NOP LAST WORD ALLOCATED TO LINKS IN BUFFER. #LNKS NOP NUMBER OF LINKS ALLOCATED. CPPTR NOP TARGET'S ADDRESS OF LINK. N#LNK NOP NEG # LINKS (FOR CKSUM LOOP CONTROL). M128 DEC -128 BECAUSE THIS MACHINE CANNOT SUBTRACT. SKP * RECORD PROCESSING CONTROL * ******************************************************************** * THIS SECTION CONTROLS THE INPUT OF OBJECT * PROGRAMS FROM THE STANDARD INPUT AND PROGRAM * LIBRARY DEVICES. THE TRANSFER OF CONTROL TO * THE APPROPRIATE RECORD PROCESSORS IS MADE * FROM THIS SECTION. EACH PROCESSOR (EXCEPT * NAM PROCESSOR) RETURNS TO THE LABEL -LDRIN-. * * INPUT RECORD, LEGALITY CHECK AND CHECKSUM SECTION ******************************************************************** LDRIN LDA RIC WAS LAST RECORD AN END RECORD? CPA B5 JMP NXTCM GET NEXT COMMAND INCHK LDA LBUFA GET BUFFER WHERE TO PUT REL. JSB RBIN GET NEXT RELOCATABLE RECORD JMP CMER FILE ERROR ON INPUT CPA M1 END OF FILE? JMP NXTCM YES. GO TO GET NEXT COMMAND. SZA,RSS NO. ZERO LENGTH RECORD? JMP INCHK YES. READ NEXT RECORD. * * CHECK FOR LEGAL RECORD TYPE * LDA LBUF+1 GET TYPE WORD ALF,RAR ROTATE RIC FIELD TO AND B7 LOW A AND ISOLATE CODE STA RIC SAVE FOR PROCESSING SZA IF RIC=0 ADA M6 OR GREATER THAN 5 SSA,RSS ERROR? JMP LER2 YES LDA LBUF GET NEGATIVE COUNT CMA,INA NEGATE COUTN STA LBUF STA CONV SET UP WORD COUNT JMP LDRC AND PROCESS RECORD * LER2 LDB ERR02 YES...TELL THEM ILLEGAL RECORD JSB DIAG JMP ABORT AND ABORT RELOCATION SPC 1 * PROCESS VALID RECORD * LDRC ISZ NREC BUMP COUNT # GOOD RECORDS. LDA RIC (A) = RECORD TYPE LDB SERFG (B) = LIBRARY LOAD FLAG CPA B1 IF RIC = 1, THEN GO TO PROCESS JMP LDRC3 NAM RECORD. SSB,RSS JMP SERJP IF LOADING, CONTINUE PROCESSING CPA B5 IF NOT LOADING, RSS AND IF THIS IS AN END RECORD, JMP INCHK JMP INCHK ELSE READ THE NEXT RECORD SERJP ISZ NAMR. CPA B2 IF RIC = 2, JMP ENTR GO PROCESS ENT RECORD. * * FIRST NON-ENT ON LIBRARY LOAD; * SEE IF THIS PROGRAM IS NEEDED. * SZB DIRECT LOAD? JMP LDRC5 NO, SET TO SKIP ISZ FNENT FIRST NON-ENT/NON-NAM? RSS JSB NAMR PROCESS SAVED NAM RECORD * * TRANSFER TO RECORD PROCESSOR SECTION. * LDA RIC CPA B3 IF RIC = 3, GO TO JMP DBLR DBL RECORD PROCESSOR. CPA B4 EXT? JMP EXTR EXT RECORD PROCESSOR. CPA B5 END RECORD? JMP ENDR YES. GO TO PROCESS. JMP LER2 NO. STRANGE RECORD! SKP * * PROCESSING FOR END RECORD * ***** * ** END RECORD PROCESSOR * ***** CLOOP NOP ENDR LDA #LNKS CHECK LINK ALLOCATION. SZA,RSS SKIP IF LINKS HAVE BEEN ALLOCATED. JMP ENDR6 SKIP OUTPUT OF CP LINK RECORD. LDA CPLS GET THE RECORD'S LOAD ADDRESS. STA B SAVE FOR LAST ADDRESS COMPUTATION. CMA,INA CALCULATE OFFSET TO C.P. BUFFER ADA CPLPR LOCATION IN . STA PLKS SAVE FOR USE BY ABSOLUTE PUNCH ROUTINE. ADB #LNKS COMPUTE THE LAST ADDRESS ADB M1 FOR THIS ABSOLUTE RECORD. LDA CPLS = FIRST LOAD-ADDRESS OF THE RECORD. JSB PLK GO TO PUNCH THE ABSOLUTE RECORD(S). LDA M128 SET UP STwA CLOOP CLEAR LOOP COUNTER. LDA CPLPR GET ADDRESS OF LINK AREA. CLB STB A,I INA ISZ CLOOP JMP *-3 * AREA SHOULD NOW BE RESET TO ZERO. ENDR6 LDA CPLMG TURN LOCAL MODE BACK ON STA CPLML IFF GLOBAL MODE IS ON. CLA SET FLAG FOR STA NAMR. NAM RECORD EXPECTED STA #LNKS CLEAR FOR NEW RELOCATION INDICATION. LDA ?XFER IS THERE ALREADY A TRANSFER ADDRESS? SZA TAKE ONLY THE FIRST ONE JMP ENDR0 LDA LBUF+1 GET ADDRESS RAR SSA,RSS IS TRANSFER ADDRESS GIVEN? JMP ENDR1 AND B3 ADA RBTO RELOCATE THE LDA A,I TRANSFER ADDRESS ADA LBUF+3 STA ?XFER STORE RELOCATED TRANSFER ADDRESS CLA,RSS AND MOVE PROGRAM NAME&PARAMETERS. ENDR1 LDA PNAME IS DEFAULT NAME ALREADY THERE? SZA JMP ENDR0 YES--DON'T MOVE NAME. LDA MD14 ZERO PNAME BUFFER LDB PNAMA STB CONV CLB STB CONV,I ISZ CONV INA,SZA JMP *-3 DLD B3 SET DEFAULT PROGRAM TYPE AND DST PRAMS PRIORITY LDA PNAMA GET 15-BIT ADDRESS OF PNAME STA PNDEF AND STORE INLINE LDA NSCAN GET NEG. # WORDS IN NAM BUFFER CPA MD9 IS THIS A 9-WORD NAM RECORD? RSS YES. CONTINUE. LDA MD17 NO. TREAT IT AS A 17-WORD NAM RECORD. ADA B3 MOVE ONLY NAME AND PARAMETERS LDB NBUF6 MOVE PROGRAM NAME AND PARAMS TO PNAME. JSB MOVEX PNDEF NOP DESTINATION BUFFER ADDRESS. * * PRINT MODULE NAME, BOUNDS(MAIN AND BASE PAGE) * ENDR0 LDA LISTO PRINT MODULE NAME? ARS SLA,RSS JMP ENDR2 NO, CONTINUE PROCESSING JSB BLINE BLANK INPUT LINE LDA M3 MOVE MODULE NAME TO LDB NBUF6 LBUF JSB MOVEX DEF LBUF+1 * LDA NSCAN GET THE NAM-RECORD SIZE. ADA D60 IF IT IS LARGER SSA THAN SIXTY WORDS, JMP NAMPR BYPASS NAM EXTENSION PROCESSING. LDA NSCAN GET THE NAM-RECORD SIZE AGAIN. CPA MD9 IF IT IS A 9-WORD NAM, JMP NAMPR THEN BYPASS NAM-EXTENSION PROCESSING. CPA MD17 IF IT IS A 17-WORD NAM-RECORD, JMP NAMPR THEN NO EXTENSION EXISTS--BYPASS. ADA D17 COMPUTE THE NAM-EXTENSION SIZE, STA CONV AND SAVE THE RESULT, TEMPORARILY. * LDB NBF20 GET ADDRESS OF FIRST EXTENSION WORD. JSB MOVEX MOVE THE NAM-EXTENSION INFORMATION DEF LBUF+4 TO THE PRINT BUFFER. * LDA CONV GET THE EXTENSION SIZE AGAIN. ADA MD4 ADD 4 WORDS FOR NAME & LEADING BLANKS. LDB LBUFA GET THE ADDRESS OF THE PRINT BUFFER. JSB LOUT GO TO PRINT PROGRAM NAME & EXTENSION. JMP LSTAD BYPASS PROCESSING FOR SIMPLE NAMS. * NAMPR LDA MD4 GET PARAMETERS LDB LBUFA TO PRINT ONLY JSB LOUT THE PROGRAM'S NAME. * LSTAD JSB BLINE GO TO CLEAR THE PRINT BUFFER. * LDA LBF10 NOW CONVERT LOW MAIN ADDRESS LDB LOCC JSB CONV INA NOW CONVERT CCB ADB PAPTR CONVERT HIGH MEMORY ADDRESS JSB CONV INA LDB BPLOC JSB CONV INA CCB ADB BPPTR CONVERT HIGH BASE PAGE JSB CONV LDA B60 LDB LBUFA THE JSB LOUT THE LINE * * LIST ENTRY POINTS, RELOCATE THEM, AND CLEAR * FLAGS IN SYMBOL TABLE * ENDR2 CLA SET # EXTERNALS YET UNDEFINED STA UEXFL CLEAR # UNDEFINEDS COUNTER. JSB LSTI SET LST POINTERS. ENDR3 JSB LSTP SET LST ENTRY ADDRESSES. JMP ENDR5 END OF LIST--GO SET LOCC,BPLOC JSB BLINE BLANK PRINT LINE LDA LST3A,I GET FLAG WORD OF ENTRY. STA TEMP SAVE FOR LATER RELOCATION AND UPCM CLEAR FLAG BITS 7-0 STA LST3A,I  IOR B40 SET BLANK IN LOW CHAR. STA LBUF+7 PUT IN PRINT BUFFER LDB LST4A,I GET VALUE. CPB UDFE DEFINED? JMP ENDR4 NO-BUMP UNDEFINEDS COUNTER CMB,SSB HAS SYMBOL BEEN RELOCATED? JMP ENDR3 YES--NOT PART OF THIS MODULE. LDA TEMP GET RELOCATION BASE JSB RELEN RELOCATE THE VALUE LDA LISTO PRINT ENTRY POINT NAMES? SLA,RSS JMP ENDR3 NO LDA LST1A,I GET CHARS 1,2 STA LBUF+5 LDA LST2A,I GET CHARS 3,4 STA LBUF+6 STORE; CHAR 5 ALREADY THERE. LDB LST4A,I GET RELOCATED VALUE LDA LBF10 GET ADDRESS TO STORE CONVERTED ASCII JSB CONV CONVERT TO OCTAL LDA D26 LDB LBUFA JSB LOUT JMP ENDR3 ENDR4 ISZ UEXFL JMP ENDR3 ENDR5 LDA PAPTR MOVE LOCC UP STA LOCC LDA BPPTR MOVE UP BPLOC STA BPLOC LDA XNAM IF XNAM IS ZERO, SZA CONTINUE PROCESSING RECORDS JMP NXTCM IF NOT GET NEXT COMMAND JMP INCHK * D17 DEC 17 D60 DEC 60 NBF20 DEF NBUF+20 * SKP * * PRELIMINARY NAM RECORD PROCESSING * ***** * * THIS PROCESSING OF NAM RECORDS OCCURS BEFORE DECIDING * WHETHER OR NOT TO RELOCATE A MODULE * ***** LDRC3 LDB NAMR. IS NAM 1ST RECORD? SZB IS NAM 1ST RECORD? JMP LDRC8 NO--SEQUENCE ERROR. LDB XNAMA LDA B,I SZA,RSS WAS A MODULE NAME SPECIFIED? JMP L.DC4 NO. CPA LBUF+3 YES--DOES THIS MODULE MATCH THE NAME? INB,RSS JMP LDRC6 NO--SKIP IT LDA B,I CPA LBUF+4 INB,RSS JMP LDRC6 LDA B,I XOR LBUF+5 AND UPCM SZA JMP LDRC6 L.DC4 LDA LST STA LSTS SAVE SYMBOL-TABLE SIZE FOR BACKUP. LDA CONV GET NEGATIVE WORD COUNT FOR NAM-RECORD. STA NSCAN SAVE FOR LOGGING PROCESSOR. ADA B3 MADD AN OFFSET FOR FIRST NAME-WORD. LDB LBUF4 MOVE RECORD TO NBUF, STARTING FROM NAME. JSB MOVEX NBUF6 DEF NBUF+6 CCA SET FLAG FOR 1ST NON-ENT STA FNENT LDA LIBFL STA SERFG JMP LDRIN GO PROCESS NEXT RECORD. * * RESET PROCESSING - PROGRAM FROM LIBRARY IS * TO BE DISCARDED. LDRC5 LDA LSTS STA LST PROGRAM) LST LENGTH. LDRC6 CCA SUPPRESS LOADING PROGRAM. STA SERFG CLA STA NAMR. JMP INCHK * LDRC8 LDB ERR09 MISSING END RECORD JSB DIAG ERROR *L09 JMP ABORT NO, ABORT RELOCATION BSS 2 STORAGE FOR MOVEX MOVEX NOP MOVE A BLOCK OF DATA STA MOVEX-1 STORE NEG. # WORDS. LDA MOVEX,I GET DESTINATION BUFFER ADDRESS. JSB INDIR ENSURE DIRECT ADDRESSES. ISZ MOVEX SET RETURN ADDRESS. STA MOVEX-2 STORE DESTINATION POINTER LDA B,I GET WORD STA MOVEX-2,I STORE IN DESTINATION BUFFER. INB POINT TO NEXT SOURCE ADDRESS. ISZ MOVEX-2 POINT TO NEXT DESTINATION ADDRESS. ISZ MOVEX-1 DONE? JMP *-5 NO. GO BACK FOR MORE. JMP MOVEX,I YES. RETURN TO CALLER. * * CONSTANTS AND STORAGE FOR MAIN CONTROL SECTION * MD14 DEC -14 LIBFL NOP NREC NOP #GOOD RECORDS COUNTER. RIC OCT 0 HOLDS RECORD IDENTIFICATION CODE UPCM OCT 77400 UPPER CHARACTER MASK. LSTS OCT 0 USED DURING LIBRARY LOADING TO FNENT NOP * FTNFL OCT 0 2^15=1 IF FORTRAN/ALGOL * M6 DEC -6 D72 DEC 72 * ERR02 DEF *+1 OCT 6 ASC 3,IL REC * ERR09 DEF *+1 OCT 6 ASC 3,REC SE * SERFG NOP "SEARCH" FLAG=1 IF SEARCHING, 0 IF DIRECT LOAD. XNAM BSS 3 SPC 2 OLSTE CLA,INA,RSS ENTRY POINT LIST OPTION OLSTU CLA LIST UNDEFINED SYMBOLS OPTION JSB EPL JMP NXTCM * INDIR NOP INDIRECT ADDRESS TRACK-DOWN ROUTINE. n RSS TRACK DOWN LDA A,I A DIRECT RAL,CLE,SLA,ERA ADDRESS IN THE JMP *-2 REGISTER. RSS TRACK DOWN LDB B,I A DIRECT RBL,CLE,SLB,ERB ADDRESS IN THE JMP *-2 REGISTER. JMP INDIR,I RETURN. SKP * * PROCESSOR FOR END COMMAND * ***** * ** END COMMAND PROCESSOR * ***** EOL ISZ PRCMD SET UP SUCCESS RETURN (P+2) LDA LOCC IF NO MODULES RELOCATED, SZA,RSS JMP PRCMD,I RETURN IMMEDIATELY LDA ?XFER ELSE CHECK FOR TRANSFER ADDRESS SZA JMP ENDC4 YES. EOL1 LDA MXFR PRINT "?XFER?" LDB MXFR+1 JSB PRINT JSB CMDIN GET TRANSFER ADDR FROM INPUT JSB NSCAN JMP EOL1 JMP EOL1 STA ?XFER JMP ENDC6 GO OUTPUT LINKS. * ENDC4 LDA .XBUF PRINT EXECUTION POINT LDB ?XFER JSB CONV LDA D22 LDB SAQA JSB PRINT ENDC6 JSB PLINK PUNCH LINKS * * PRINT LIST OF UNDEFINEDS, IF ANY, OR "NO UNDEFS" * CLA JSB EPL * * CHECK IF LINKS TABLE IS TO BE PRINTED, * AND IF SO, PRINT "LINKS TABLE" * LDA LISTO ARS,ARS SLA,RSS JMP NOHED DONT PRINT HEADER LDA ENC10 PRINT "LINKS TABLE" AS HEADER LDB ENC10+1 JSB LOUT NOHED JSB LSTI INITIALIZE SYMBOL TABLE SCAN ENDC7 JSB LSTP GET POINTERS TO NEXT ENTRY. JMP PRCMD,I FINISHED SCAN. RETURN TO MAIN CONTROL. JSB MLBUF MOVE SYMBOL TO LBUF LDB LST5A,I SZB,RSS IS LINK ASSIGNED? JMP ENDC7 NO LDA LBUF4 CONVERT LINK JSB CONV LDA LST4A,I CPA UDFE IS SYMBOL DEFINED? JMP ENDC8 NO ENDC9 LDA LISTO IS LINK TABLE TO BE PRINTED? ARS,ARS SLA,RSS JMP ENDC7 NO LDA D12 LDB LBUFA PRINT THE LINE JSB LOUT JMP ENDC7 ENDC8 LDA LS=T5A,I OUTPUT A ZERO IN ALL UNDEFINED SYMBOL'S STA ABRC1 LINK LOCATIONS. CLA JSB PACK$ JSB PUNCH JMP ENDC9 * * ***** CONSTANTS ***** * ENC10 DEC 12 DEF *+1 ASC 6, LINKS TABLE MXFR DEC 6 DEF *+1 ASC 3,?XFER? MD60 DEC -60 MD17 DEC -17 MD11 DEC -11 MD9 DEC -9 MD8 DEC -8 MD6 DEC -6 MD5 DEC -5 M1 OCT -1 B1 OCT 1 B2 OCT 2 B4 OCT 4 B5 OCT 5 D8 DEC 8 D22 DEC 22 B3 OCT 3 DEFAULT PROGRAM TYPE AND DEC 99 PRIORITY D11 DEC 11 B30 OCT 30 B40 OCT 40 B51 OCT 51 B54 OCT 54 UDFE OCT 77777 WHAT ENT IS IF IT ISN'T DEFINED. C1000 OCT 100000 * LBF10 DEF LBUF+9 SKP ***** * ** EPL * ENTRY POINT LIST ROUTINE * * CALLING SEQUENCE: * (A): =0, LIST UNDEFINED EXTERNAL SYMBOLS. * =1, LIST ENTRY POINT SYMBOLS AND * ABSOLUTE ADDRESSES FROM LST. * * (P) JSB EPL * (P+1) (RETURN) A AND B DESTROYED * ***** EPL NOP ENTRY/EXIT POINT STA NBUF SAVE ENTRY PARAMETER. SZA,RSS UNDEFS? JMP EPL5 YES--CHECK COUNTER EPL0 JSB LSTI INITIALIZE SYMBOL TABLE POINTERS. EPL1 JSB LSTP SET LST ENTRY ADDRESSES JMP EPL,I END OF SYMBOL TABLE JSB MLBUF MOVE SYMBOL TO LBUF LDB LST4A,I (B) = ENT. ADDRESS LDA NBUF (A) = ENTRY PARAMETER SZA IF ENT LIST REQUESTED JMP EPL2 GO TO CONVERT ADDRESS IN B. CPB UDFE DEFINED? RSS NO. JMP EPL1 YES, GO CHECK NEXT ENTRY. LDB LBUFA LDA B5 JSB PRINT OUTPUT SYMBOL AND LINK LOCN. JMP EPL1 CONTINUE SCAN * * LIST SYMBOL TABLE * EPL2 CPB UDFE ENTRY DEFINED? JMP EPL1 NO LDA LBUF4 DEFINED,PRINT VALUE JSB CONV LDA D12 LDB LBUFA JSB LOUT JMP EPL1 PROCESS9 NEXT ENTRY IN LST. * EPL5 LDA UEXFL GET # UNDEFINEDS COUNTER SZA ANY UNDEFINEDS? JMP EPL7 YES--LIST THEM. LDA EPL6 NO--PRINT "NO UNDEFS" LDB EPL6+1 JSB PRINT JMP EPL,I SPC 1 EPL6 DEC 9 DEF *+1 ASC 5,NO UNDEFS SPC 1 EPL7 LDA UNDFS PRINT "UNDEFS" LDB UNDFS+1 JSB PRINT JMP EPL0 * UNDFS DEC 7 DEF *+1 ASC 4, UNDEFS * * CONSTANT AND STORAGE SECTION FOR -EPL- . * .XBUF DEF SAQB SAQA DEF *+1 ASC 8,STARTING ADDRESS SAQB BSS 3 M2 OCT -2 M3 OCT -3 B6 OCT 6 B7 OCT 7 B60 OCT 60 * * * MOVE CURRENT SYMBOL VROM SYMBOL TABLE TO LBUF * MLBUF NOP LDA M3 LDB LST1 JSB MOVEX DEF LBUF LDA LBUF+2 MAKE 6TH CHAR. A BLANK IOR B40 STA LBUF+2 JMP MLBUF,I SKP ***** * * SUBROUTINE: CONV (CONVERT 15-BIT BINARY NUMBER * TO 6-CHARACTER (LEADING BLANK) * ASCII FORM OF THE OCTAL * REPRESENTATION.) * * CALLING SEQUENCE: * * (A)-ADDRESS OF 3-WORD AREA FOR * STORING ASCII/OCTAL CHARACTERS * (B)-BINARY VALUE FOR CONVERSION * * (P) JSB CONV * (P+1) (RETURN)-(A)=NEXT ADDRESS OF STORAGE * AREA,(B)-DESTROYED. ***** CONV NOP STA NBUF+3 SAVE STORAGE AREA ADDRESS RBL POSITION FIRST DIGIT TO B(15-13). LDA M3 LET CONVERT COUNTER STA NBUF+4 = -3. LDA B40 MAKE FIRST CHARACTER A SPACE. CONV1 ALF,ALF ROTATE CHAR. TO UPPER POSITION STA NBUF+5 AND SAVE. BLF,RBR POSITION NEXT DIGIT TO B(02-00), LDA B AND B7 ISOLATE DIGIT. IOR B60 MAKE AN ASCII CHAR. (60 - 67). IOR NBUF+5 PACK IN UPPER CHARACTER STA NBUF+3,I AND STORE IN STORAGE AREA. ISZ NBUF+3 ADD 1 TO STORAGE AREA ADDRESS. BLF,RBR ROTATE NEXT DIGIT TO LOW B, LDA B ISOLATE CHAR AND B7 IN LOW A, IOR B60 MAKE AN ASCII CHAR. ISZ NBUF+4 INDEX CONVERT COUNTER JMP CONV1 NOT FINISHED. LDA NBUF+3 FINISHED, SET (A)= NEXT STORAGE JMP CONV,I AREA WORD ADDRESS AND EXIT. * BLANK ASC 1, (ORG LBUF-1 FOR EPL SUBROUTINE) LBUF OCT 0 OCT 0 BSS 58 NBUF BSS 63 HOLDS PROGRAM NAME,PARAMETERS,COMMENTS. NBUF9 EQU NBUF+9 * SKP ***** * ** QGETC ** GET NEXT CHAR FROM INPUT BUFFER (QIBUF) * CALLING SEQUENCE: * * JSB * RETURN1 NO MORE CHARS IN BUFFER * RETURN2 GOT ONE, RETURN IT IN .A. * ***** QGETC NOP GET A CHARACTER LDB QQCNT CPB QQCHC END OF INPUT? JMP QGETC,I YES. ISZ QQCNT COUNT CHARS READ LDA QQPTR,I SLB,RSS LEFT CHAR? ALF,ALF YES, MOVE RIGHT AND B177 SLB IF THIS CHAR IS RIGHT, ... ISZ QQPTR NEXT ONE IS LEFT OF NEXT WORD. ISZ QGETC SKIP EXIT JMP QGETC,I * QBUFA DEF QIBUF QIBUF BSS 40 QQCHC NOP QQCNT NOP QQPTR NOP T1 NOP T3 NOP PCHAR NOP * SKP ***** * ** NSCAN ** GET NUMBER FROM INPUT BUFFER (QIBUF) * CALLING SEQUENCE: * * JSB NSCAN * RETURN1 NO MORE CHARACTERS * RETURN2 ILLEGAL NUMBER * RETURN3 GOT ONE, VALUE IN .A. * ***** NSCAN NOP CLA INITIALIZE VALUE STA T3 JSB NXTC JMP NSCAN,I NO MORE NON BLANK CHARS ISZ NSCAN JMP NSC2 * NSC1 STA T3 JSB QGETC GET A CHARACTER JMP NSCX+1 DONE RETURN NUMBER NSC2 STA PCHAR SAVE CHAR CPA B54 COMMA? JMP NSCX YES. END OF FIELD. CPA B40 BLANK? JMP NSCX YES-END OF FIELD ADA M60 CONVERT TO DIGIT SSA IS IT A DIGIT? JMP NSCAN,I NO, ERRSOR STA T1 SAVE DIGIT ADA MD8 LEGAL DIGIT? SSA,RSS JMP NSCAN,I LDA T3 MPY D8 MULTIPLY RADIX ADA T1 JMP NSC1 * NSCX JSB BAKUP BACK UP OVER LAST CHAR LDA T3 PICK UP VALUEE ISZ NSCAN RETURN (P+2) JMP NSCAN,I SKP ***** * ** PLINK ** PUNCH LINKS * CALLING SEQUENCE * * JSB PLINK * RETURN * ***** PLINK NOP PUNCH LINKS LDA BPAGA STORE OFFSET FOR PUNCHING STA PLKS LDA .MEM1 START SEARCH OF BASE PAGE LINKS AREA PLIN1 CPA .MEM2 FINISHED SEARCH? JMP PLINK,I YES--EXIT LDB A ADB BPAGA GET ADDRESS OF 1ST WORD IN LINK TABLE LDB B,I GET VALUE SZB SEARCH FOR 1ST NONZERO ENTRY JMP *+3 GOT ONE INA JMP *-8 STA PLK1 STORE LOW ADDRESS CPA B2000 END OF PAGE? JMP PLIN2 YES--PUNCH REST OF RECORD LDB A ADB BPAGA LDB B,I SZB,RSS JMP PLIN2 FOUND END OF BLOCK INA JMP *-8 SPC 2 PLIN2 ADA M1 CONVERT TO ACTUAL HIGH ADDRESS STA B OF PUNCH AREA, AND LDA PLK1 GET LOW ADDRESS OF PUNCH AREA JSB PLK PUNCH LDA PLK1 GET ADDRESS TO START NEXT SEARCH JMP PLIN1 * SKP SKP * * CONSTANTS,AND MESSAGES * * * * ***** CONSTANTS ***** * ONE DEC 1 B50 OCT 50 D9 DEC 9 D10 DEC 10 D12 DEC 12 D15 DEC 15 D26 DEC 26 B75 OCT 75 B77 OCT 77 B177 OCT 177 M60 OCT -60 MAGIC DEC -24 MD1K DEC -1024 MD256 DEC -256 ONE28 DEC 128 * * BPPTR BSS 1 BASE PAGE POINTER PAPTR NOP PROGRAM AREA POINTER MODSZ NOP FWANP NOP SIZEA NOP SIZEB NOP MSM1K NOP SPC 3 * * THE BASE PAGE LINKS TABLE (STORED IN BPAGE) * HAS ROOM FOR 1020 WORDS, CORRESPONDING * TO CORE ADDRESSES (OCTITRNAL) 4-1777. * LOCATIONS 0-1 ARE INACESSIBLE AYWAY. AND LOCATIONS * 2,3 ARE RESERVED FOR RTS PROGRAM DESCRIPTION RECORDS. * BPAGA DEF *+1 BPAGE NOP BASE PAGE LINKS TABLE (1024 NOP'S) UNL REP 1023 NOP LST SPC 1 END EQU * * END LSWAP T .$ 91700-18141 1602 S 0122 DS1/B CCE MODULE: SCGN3              H0101 CASMB,L,C HED SCGN3 91700-16141 REV.A 760108 * (C) HEWLETT-PACKARD CO. 1976 * NAM SCGN3,5 91700-16141 REV.A 760108 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ****************************************************** * *SCGN3 ON-LINE LOADER SEGMENT...LOADER CONTROL * *SOURCE PART # 91700-18141 REV A * *REL PART # 91700-16141 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 9-18-74 * *MODIFIED BY: K.HAHN * *DATE MODIFIED: 6-27-75 * ***************************************************** SPC 1 * * DEFINE EXTERNALS * EXT LST,PLK,PLKS,?XFER,LSTI,LSTP EXT .MEM.,PRCMD EXT FTRKA,NSEC,NTRK,SECA,TRKA,ENDM EXT DSKLU,SMTLN,SECTK EXT UEXFL,SSTBL,.MEM3 EXT LST1,LST2,LST3,LST4,LST5 EXT .MEM1,.MEM4 EXT .MEM2,.MEM5,.MEM6,NAMR.,LISTO EXT FWAM,LWAM,PARSA EXT PNAME,PNAMA,PRAMS EXT EXEC,LOCC,BPLOC,PRINT EXT INDCB,PRMT,GTOUT,ABDCB EXT FCRET,WRITF,FCLOS,CLSFI EXT FILCK,FERR,SWAPR,LSDCB,CMDLU EXT LOUT,ENDLU,COML,PUNCH,ABRC1,PACK$ SUP SPC 1 * * DEFINE ENTRY POINTS * SPC 1 * * DEFINE A AND B REG * A EQU 0 B EQU 1 SKP SKP SKP * * THIS IS WHERE WE START. * SPC 2 GSWAP NOP START HERE LDA RSTA GET STARTING ADDRESS JMP SWAPR AND RETURN TO MAIN SPC 1 RSTA DEF RSTRT SPC 1 RSTRT CLA CLEAR OUT POINTERS STA PNAME STA LOCC STA BPLOC STA COML STA ?XFER STA LST JSB PRCMD JMP RSTRT ERROR...RETRY LDA ?XFER LDB LOCC SZA IF NO STARTING ADDRESS OR SZB,RSS NOTHING RELOCATED JMP LDRDN TERMINATE JSB GENID SET IN ID SEGMENT LDRDN JSB CLSFI AND TERMINATE...CLOSE FILES LDA P16 LDB DNMSG "LOADER COMPLETED" JSB LOUT JSB EXEC SEND TERMINATION MESSAGE DEF *+5 DEF P2 DEF ENDLU DEF DNMSG+1 DEF P8 JSB FCLOS TERMINATE LIST FILE DEF *+3 DEF LSDCB DEF ZERO JSB FCLOS TERMINATE INPUT FILE DEF *+3 DEF INDCB DEF ZERO JSB EXEC RELEASE TRACKS DEF *+3 DEF P5 DEF N1 JSB EXEC AND TERMINATE DEF *+2 DEF P6 SPC 2 P23 DEC 23 P6 DEC 6 P8 DEC 8 P12 DEC 12 P128 DEC 128 P5 DEC 5 P4 DEC 4 P30 DEC 30 P10 DEC 10 P64 DEC 64 P3 DEC 3 ZERO NOP P14 DEC 14 P2 DEC 2 P7 DEC 7 N1 DEC -1 P200 DEC 200 P16 DEC 16 M20 DEC -20 P99 DEC 99 M7400 OCT 177400 N24 DEC -24 N60 DEC -60 N100 DEC -100 JMP3I JMP 3,I DNMSG DEF *+1 ASC 8,SCEGN COMPLETED SKP * JSB GENID * * * RETURN: A AND B ARE DESTROYED * GENID NOP LDA M20 STA TEMP1 CLA LDB ALBUF BUFFER ADDRESS STA B,I ISZ TEMP1 JMP *-2 LDB PNAMA GET DISPLACEMENT INTO ID SEGMENT ADB P7 GET TO WORD 7 LDA B,I 7 GET PRIORITY SZA,RSS LDA P99 DEFAULT TO 99 STA LBUF+3 LDA ?XFER ENTRY POINT STA LBUF+17 LDB PNAMA LDA B,I NAME 1,2 STA LBUF INB LDA B,I NAME 3,4 STA LBUF+1 INB LDA B,I NAME 5, BLNK AND M7400 MASK OUT BLANK INA MAKE TYPE 1 STA LBUF+2 LDB PNAMA  ADB P8 GET TO WORD 8 OF NAM RECORD LDA B,I RESOLUTION ALF,ALF ALF,RAL SHIFT INTO PLACE INB IOR B,I MURGE EXEC MULT STA LBUF+4 PUT IN BUFFER INB LDA B,I HOURS SZA,RSS LDA N24 DEFAULT TO 24 STA LBUF+6 INB LDA B,I MINUTES SZA,RSS LDA N60 DEFAULT TO 60 STA LBUF+7 INB LDA B,I SECONDS SZA,RSS LDA N60 DEFAULT TO 60 STA LBUF+8 INB LDA B,I TENS OF SEC SZA,RSS LDA N100 DEFAULT TO 100 STA LBUF+9 LDA .MEM3 LOW MAIN STA LBUF+10 LDA LOCC HIGH MAIN STA LBUF+11 LDA .MEM1 LOW BASE STA LBUF+12 LDA BPLOC HIGH BASE STA LBUF+13 LDA .MEM5 STA LBUF+14 LDA COML STA LBUF+15 LDA JMP3I STA LBUF+16 LDA M9 STA TEMP1 MOVE TO 2 WORD RECORDS LDA ALBUF STA TEMP2 LDA P2 STARTING ADDRESS STA ABRC1 GNID1 LDA TEMP2,I JSB PACK$ ISZ TEMP2 LDA TEMP2,I JSB PACK$ ISZ TEMP2 JSB PUNCH ISZ TEMP1 JMP GNID1 NOT DONE JMP GENID,I RETURN * ALBUF DEF LBUF M9 DEC -9 TEMP1 NOP TEMP2 NOP SPC 1 LBUF BSS 32 LNKSV BSS 1 SKP * * SUBROUTINE TO READ INPUT * READ NOP STA READ2 STB READ1 JSB PRMT DEF *+6 READ1 NOP DEF READ2 DEF LBUF DEF P64 DEF PARSA JMP READ,I SPC 1 READ2 NOP SPC 2 END GSWAP * {  91700-18142 1612 S 0122 DS1/B CCE MODULE: SCGN4              H0101 CASMB,L,C HED SCGN4 91700-16142 REV.A 760314 * (C) HEWLETT-PACKARD CO. 1976 * NAM SCGN4,5 91700-16142 REV.A 760314 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ************************************************* * *SCGN4 START UP SEGMENT FOR SCE GENERATOR * *SOURCE PART # 91700-18142 REV A * *REL PART # 91700-16142 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 11-29-74 * *MODIFIED BY: K. HAHN [ C.C.H. ] * *DATE MODIFIED: 6-27-75 [03-14-76] * ***************************************************** SPC 1 * * DEFINE EXTERNALS * EXT LST,PLK,PLKS,?XFER,LSTI,LSTP EXT .MEM.,PRCMD EXT FTRKA,NSEC,NTRK,SECA,TRKA,ENDM EXT DSKLU,SMTLN,SECTK EXT UEXFL,SSTBL,.MEM3 EXT LST1,LST2,LST3,LST4,LST5 EXT .MEM1,.MEM4 EXT .MEM2,.MEM5,.MEM6,NAMR.,LISTO EXT FWAM,LWAM,PARSA EXT PNAME,PNAMA,PRAMS EXT EXEC,LOCC,BPLOC,PRINT EXT PRMT,GTOUT,ABDCB EXT FCRET,WRITF,FCLOS EXT FILCK,FERR,SWAPR,LSDCB,CMDLU EXT LOUT,ENDLU,COML,PUNCH,ABRC1,PACK$ EXT FOPEN,INDCB,PARS5,STKAD,P:TR,PUSH EXT NOPRT,PARS3,PRS31,PARS2,PRS21,PRS41 EXT SC3CD,RMPAR,LDRCD,S45CD,SWPLC EXT INDB3 EXT COR.A SUP SPC 1 * * DEFINE ENTRY POINTS * SPC 1 * * DEFINE A AND B REG * A EQU 0 B EQU 1 SKP SKP SKP * * THIS IS WHERE WE START. * FIRST WE FIGURE HOW MUCH CORE WE HAVE * THEN WE GET THE NAME OF THE LIST FILE * AND THEN AWAY WE GO DOING OUR GENERATION * SRTSG NOP CONTROL TRANSFERED HERE BY MAIN LDA STRTA RETURN TO MAIN WITH START ADDRESS JMP SWAPR BACK WE GO SPC 1 STRTA DEF START SPC 2 START NOP CONTROL RETURNED HERE BY MAIN LDA 1657B ADDRESS OF KEYWORD TABLE STA TEMP1 SAVE FOR LOOP TRY LDB TEMP1,I GET FIRST ID SEG ADDRESS SZB,RSS END OF KEYWORD TABLE? JMP SEG2? YES. REPORT LACK OF ! ADB P12 GET TO NAME LDA B,I GET FIRST TWO CHAR. CPA ASCSC "SCGN2"...LARGEST SEGMENT RSS YES JMP NEXT NO INB LDA B,I GET SECOND TWO CHARS CPA ASCGN RSS MATCH JMP NEXT INB LDA B,I AND M7400 CPA B310K "2" JMP MATCH NEXT ISZ TEMP1 JMP TRY TRY AGAIN MATCH LDA TEMP1,I GET ADDRESS JSB COR.A GET TO LWAM OF SEGMENT INA GET FWAM STA FWAM SAVE AS FIRST WORD AVAIL MEM CMA,INA GET SIZE OF UNDECLARED ADA LWAM CORE CLB DIV P128 SEE HOW MANY SECTOR FIT IN SZA IF ZERO...GET OUT...NO ROOM JMP OK1 OK CONTINUE LDA P8 MESSAGE LENGHT LDB NOROM PRNER JSB LOUT PRINT THE MESSAGE JSB GTOUT SEG2? LDA P12 MESSAGE LENGTH LDB SEGMS "NO !" JMP PRNER GO TO REPORT A CATASTROPHIC ERROR. OK1 STA NSEC SAVE AS # OF SECTOR FOR ONE BLOCK MPY P128 GET LENGTH OF DISK WRITES AND READS STA SMTLN SAVE AS LENGTH OF SYMBOL TABLE CLB NOW GET # OF 5 WORD ENTRIES ALLOWED DIV P5 MPY P5 GET AMOUNT OF CORE CCB ADA B ADDRESS OF LAST WORD OF SYM TAB ROOM ADA FWAM WE NOW HAVE THAT ADDRESS CMA,INA NEGATE IF FOR OVERFLOW CHECKING STA ENDM AND PASS BACK TO MAIN S2 JSB EXEC GET SOME DISK SPACE DEF *+6 DEF P4 DEF P5 ASK FOR 5 TRACKS...ROUGHLY 6000 SYMBOLS DEF FTRKA RTE WILL PUT IN FIRST TRACK DEF DSKLU AND DISK IT IS ON DEF SECTK SECTORS/TRACK CLB LDA NSEC GET # OF 128 WORD SECTORS PER WRITE/READ INA SET FOR NEXT CLE,ELA MPY BY 2...64 WORD SECTORS DIV SECTK CALCULATE MULT FACTOR FOR EACH WRITE STB NSEC REMAINDER=NEXT SECTOR ADDRESS STA NTRK NEXT TRACK ADDRESS CMB,INB DO A LITTLE OPTIMIZING ADB P30 IF OVER 30 SECTORS...START AT TRACK BOUNDRY SSB,RSS WELL? JMP MTCH1 NO CLB YES...CLEAR OUT SECTOR ADDRESS STB NSEC AND SAVE AS NEXT ISZ NTRK AND INCREMENT TRACK COUNT MTCH1 LDA FTRKA SET UP SO WE DON'T DO FIRST WRITE STA TRKA CLA STA SECA * * NOW WE SET UP OUR COMMAND LU OR FILE * STRT0 LDB CMDLU GET ADDRESS FOR RMPAR JSB RMPAR DEF *+2 DEF CMDLU STRT1 LDA CMDLU GET FIRST WORD SZA,RSS IF ZERO ISZ CMDLU SET TO 1 (DEFAULT TO SYS CONSOLE) DLD PARS3 GET POSSIBLE SEC. CODE & LU STA PRS31 AND SAVE STB PRS41 LDA PRS21 GET FILE NAME TYPE LDB P1 DEFAULT IS FOR LU 1 AND M7400 IS INPUT A ASCII SZA INB YES STB PARS2 SET AS FILE TYPE LDA B400 GET POTENTIAL R/W SUBFUNCTION STA PARS5 SAVE FOR OPEN CALL JSB FOPEN GO OPEN FILE DEF *+3 INDBA DEF INDCB DEF PARS5 LDA FERR FIND IF THE FILE EXISTS CPA MD6 RSS JMP OK3 AT LEAST THE FILE IS THERE! JSB EXEC DEF *+5 DEF P2 DEF P1 DEF NOFIL DEF NOFLL JSB GTOUT OK3 JSB FILCK ANY FILE ERRORS? RSS YES--TRY THE SYSTEM CONSOLE. JMP STRT2 NO--ALL'S WELL. CLA FORCE A DEFAULT STA CMDLU TO LU#1 FOR COMMAND INPUT. JMP STRT1 START OVER--BYPASS CALL TO . STRT2 LDA STKAD ADA M1 RESET STACK POINT STA P:TR CLA JSB PUSH GO PLACE ON STACK RSS ERROR RETURN - ABORT JMP OK2 OK CONTINUE LDA P14 LDB STCOV JSB LOUT JSB GTOUT ERROR RETURN - ABORT OK2 LDB P1 SET AS DEFAULT TO 1 LDA NOPRT GET INTERACTIVE FLAG SZA,RSS SET? LDB INDB3 STB ENDLU SET FOR EDLU * * NOW GET NAME OF LIST FILE * FNAME LDA P10 LDB LSTFI JSB READ GET LIST FILE JSB FCRET GO CREATE THE FILE DEF *+5 DEF LSDCB DEF P64 DEF P3 DEF ZERO JSB FILCK CHECK FILE STATUS JMP FNAME ERROR * FILNM LDA P16 LENGTH IN POS BYTES LDB OUTFI "OUTPUT FILE NAME" JSB READ GO READ FROM USER JSB FCRET GO CREATE THE OUTPUT FILE DEF *+5 DEF ABDCB DEF P200 DEF P7 DEF ZERO JSB FILCK CEHCK FILE ERROR JMP FILNM RETRY...ERROR SPC 1 * * FIND OUT WHAT THEY WANT TO DO * GENERATE OR LOAD * TRYG1 LDA P18 LDB GNLDM GENERATOR OR LOADER? JSB READ LDA PRS21 GET FIRST TWO CHAR ANSWER CPA GE GENERATOR? JMP GEN YES CPA LO LOAD? RSS YES JMP TRYG1 NO...ERROR LDA LDRCD LOADER SWAP CODE JMP DONE * * FIND OUT WHAT TYPE OF SATELLITE * GEN LDA P18 LDB TYPMG "TYPE OF SATELLITE" JSB READ DLD PRS21 B REG=EX CCA SET -1 FOR ERROR CHECK CPB E3 SCE3? LDA SC3CD YES...SET FOR SCE3 CODE CPB E4 SCE4? LDA S45CD YES...SET FOR SCE 4-5 GENERATION CPB E5 SCE5? LDA S45CD N YES CPB E6 SEE IF SCE 6 LDA SC3CD YES...TREAT LIKE SCE 3 SSA IF SIGN SET, ERROR JMP GEN ...TRY AGAIN * * SAVE SEGMENT NUMBER * DONE STA SWPLC SAVE IN SWAP WORD JMP START,I AND RETURN TO MAIN SKP P2 OCT 2 P18 DEC 18 P23 DEC 23 P12 DEC 12 P128 DEC 128 P1 DEC 1 P14 DEC 14 B400 OCT 400 M1 DEC -1 MD6 DEC -6 P5 DEC 5 P4 DEC 4 P8 DEC 8 P30 DEC 30 P10 DEC 10 P64 DEC 64 P3 DEC 3 ZERO NOP P7 DEC 7 P200 DEC 200 P16 DEC 16 M7400 OCT 177400 B310K OCT 31000 TEMP1 NOP TEMP2 NOP SPC 1 LBUF BSS 32 SPC 1 LSTFI DEF *+1 ASC 5,LIST FILE? OUTFI DEF *+1 ASC 8,OUTPUT FILE NAME? TYPMG DEF *+1 ASC 9,TYPE OF SATELLITE? GNLDM DEF *+1 ASC 9,GENERATE OR LOAD? NOROM DEF *+1 ASC 4,NO ROOM SEGMS DEF *+1 ASC 6,NO ! STCOV DEF *+1 ASC 7,STACK OVERFLOW NOFIL ASC 16,SCEGN ABORTED: NO TRANSFER FILE NOFLL DEC 16 E3 ASC 1,E3 E4 ASC 1,E4 E5 ASC 1,E5 E6 ASC 1,E6 LO ASC 1,LO GE ASC 1,GE ASCSC ASC 1,SC ASCGN ASC 1,GN SKP * * SUBROUTINE TO READ INPUT * READ NOP STA READ2 STB READ1 JSB PRMT DEF *+6 READ1 NOP DEF READ2 DEF LBUF DEF P64 DEF PARSA JMP READ,I SPC 1 READ2 NOP SPC 2 END SRTSG * s1   91700-18143 1602 S 0222 DS1/B CCE MODULE: SCGN5              H0102 DASMB,R,L,C HED SCGN5 91700-16143 REV.A 760108 * (C) HEWLETT-PACKARD CO. 1976 * NAM SCGN5,5 91700-16143 REV.A 760108 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ************************************************** * *SCGN5 BCS GENERATOR SEGMENT * *SOURCE PART # 91700-18143 REV A * *REL PART # 91700-16143 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 9-18-74 * *MODIFIED BY: K. HAHN * *DATE MODIFIED: 6-27-75 * *************************************************** ************************************************** A EQU 0 B EQU 1 SUP * * * * * LST FORMAT * * WORD 1: LST1 - NAME 1,2 * WORD 2: LST2 - NAME 3,4 * WORD 3: LST3 - NAME 5, ORDINAL * WORD 4: LST4 - IDENT ADDRESS * WORD 5: LST5 - BP LINK ADDRESS * * * * ENTERNS AND EXTERNS * * * EXT LST,PLK,PLKS,?XFER,LSTI,LSTP EXT .MEM.,PRCMD EXT UEXFL,SSTBL,.MEM3 EXT LST1,LST2,LST3,LST4,LST5 EXT .MEM1,.MEM4 EXT .MEM2,.MEM5,.MEM6,NAMR.,LISTO EXT PARSA EXT PNAME,PNAMA EXT EXEC,LOCC,BPLOC,PRINT EXT INDCB,PRMT,GTOUT,ABDCB EXT FCRET,WRITF,FCLOS,CLSFI EXT FILCK,FERR,SWAPR,LSDCB,CMDLU EXT ENDLU,LOUT,.DFER,CNUMO,CNUMD * * * .XFER EQU ?XFER * * * .MEM. TABLE DEFINITIONS * * .MEM1 = FWABP * .MEM2 = LWABP * .MEM3 = FWAM * .MEM4 = LWAM * .MEM5 = FWAC * .MEM6 = LWAC * * * * ERROR CODES * * TB: SYMBOL TABLE/ID SEG OVERFLOW * NA: PARAMETER NAME ERROR * PA: PARAMETER E^RROR * PR: PARAMETER PRIORITY ERROR * IN: PARAMETER EXECUTION INTERVAL ERROR * CH: INVALID CHANNEL NUMBER * DR: INVALID DRIVER NAME * LU: INVALID DEVICE REFERENCE NUMBER * EQ: INVALID EQT. NO. IN INT RECORD * AD: INVALID ENTRY POINT * DU: DUPLICATE PROGRAM NAME SKP * * LINTL BSS 1 STARTING BASE PAGE LINK ADDRESS WDCNT BSS 1 TEMPORARY WORD COUNTER * MAXC BSS 1 MAX CHAR COUNT TCHAR BSS 1 TEMPORARY CHAR SAVE AREA OCTNO BSS 1 OCTAL DIGIT * CURAL BSS 1 SETAD BSS 1 ABSOLUTE OUTPUT BUFFER ADDRESS * SPC 1 TEMP1 BSS 1 TEMP2 BSS 1 TEMP3 BSS 1 CURAT BSS 1 CURRENT TBUF ADDRESS TBUF BSS 4 TEMPORARY BUFFER PPREL BSS 1 TBREL BSS 1 * * AEQT BSS 1 ADDRESS OF EQUIPMENT TABLE CEQT BSS 1 NO. ENTRIES IN EQUIPMENT TABLE * * PROCT BSS 1 NO. OF INT. ENTRIES * * PARNO BSS 1 PARAMETER RECORD LENGTH * IODMA BSS 1 I/O DMA FLAG IN EQT IOBUF BSS 1 I/O BUFFERING FLAG IN EQT DFLAG BSS 1 DMA-IN FLAG FOR EQT BFLAG BSS 1 BUFFERING-IN FLAG FOR EQT INTCH BSS 1 INT RECORD CHANNEL NO. * DRANG BSS 1 DIGIT RANGE DIFLG BSS 1 DATA-IN FLAG = -1/0 = NOT IN/IN CMFLG BSS 1 COMMA FLAG = -1/0 = NOT IN/IN BUFUL BSS 1 BUFFER U/L FLAG LBLAD BSS 1 MEMAD BSS 1 SPC 2 * * HERE IS THE END OF AREA THAT NEEDS TO BE SAVED * MAKE SURE BSS FOR OTHER SEGMENTS AT LEAST THIS * BIG...BSSIZ=THAT SIZE * BSSIZ EQU * SKP * * UTILITY ROUTINES * * PRINT: ERR XX * * THE ERROR SUBROUTINE IS USED TO PRINT THE DIAGNOSTICS * FOR ALL ERROR MESSAGES. * * CALLING SEQUENCE: * A = 2-CHAR ASCII ERROR CODE * B = IGNORED * JSB ERROR * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * ERROR NOP PRINT ERROR MESSAGES STA AMERR+3 SET ERROR CODE INTO MESSAGE LDA P6 LDB AMERR  AMERR = MESSAGE ADDRESS JSB PRINT PRINT ERROR MESSAGE JMP ERROR,I RETURN * AMERR DEF *+1 ASC 3,ERR ERROR MESSAGE = ERR + CODE SKP * * SET DATA TO ABS TAPE * * ROUTINE TO RESERVE AND SET CORE ON THE * LOADER PRODUCED ABSOLUTE OUTPUT. * * CALLING SEQUENCE: * A = FINAL STARTING ADDRES * B = FINAL ENDING ADDRESS * * SETAD = ADDRESS OF THE OUTPUT DATA BUFFER * * JSB SETCR * * RETURN: A AND B ARE DESTROYED * SETCR NOP STA TEMP1 CMA,INA ADA SETAD BUFFER ADDRESS STA PLKS OFFSET ADDRESS LDA TEMP1 STARTING ADDRESS JSB PLK OUTPUT ROUTINE IN THE LOADER JMP SETCR,I * SKP * ALBUF DEF LBUF ATBUF DEF TBUF * * * ERR10 ASC 1,PA PARAMETER ERROR ERR24 ASC 1,CH INVALID CHANNEL NO. IN EQT REC ERR25 ASC 1,DR INVALID DRIVER NAME ERR27 ASC 1,LU INVALID DEVICE REF. NO. ERR33 ASC 1,AD INVALID ENTRY POINT IN INT RECORD ERR34 ASC 1,UE UNDEFINED EXTERNAL PTERM ASC 1,EN COMMA OCT 54 COMMA IJSB JSB 0,I I-JSB CODE FOR INTERRUPT LOCS UASCZ OCT 30000 UPPER ASCII ZERO CHAR CHARD OCT 104 ASCII CHAR D REQT ASC 1,RE RDRT ASC 1,RS RINT ASC 1,RI * MES25 DEF *+1 ASC 4,EQT TBL * OCT 6412 ASC 2,LU#: * MES2 DEF *+1 ASC 6,REL SYS MODS * SKP * * INITIALIZATION SECTION * * * THIS IS WHERE WE START. * SWPIN NOP THIS IS WHERE CONTROL IS PASSED LDA RSTA WHEN SEGMENT ROLLED IN JMP SWAPR CONTROL IS RETURN TO MAIN WITH A REG=START SPC 1 RSTA DEF RSTRT SPC 1 * * * THE FOLLOWING MESSAGES ARE PRINTED DURING THE INITIALIZATION * PHASE, WITH THE SPECIFICATIONS FOR EACH VALID RESONSE. * * * MESSAGE RESPONSE * * FWA BP? ENTER 4 OCTAL DIGITS * * LWA MEM? ENTER 5 OCTAL DIGITS * * FWA MEM ENTER 5 OCTAL DIGITS  * * # WORDS COMMON 4 DEC DIGITS * * RSTRT NOP CLA STA NAMR. LDA LISTO AND N9 CLEAR BIT 3, FOR NEW HEADING STA LISTO * * * * SET FWA BP LINKAGE FWENT LDA P7 LDB MES27 MES27 = ADDR: FWA BP LINKAGE? JSB READ PRINT AND GET REPLY LDA P4 JSB DOCON GET 4 OCTAL DIGITS, CONVERT RSS INVALID DIGIT ENTERED JMP SETFB YES - SET FWA BP LINKAGE LNKER JSB INERR JMP FWENT REPEAT MESSAGE SETFB LDB OCTNO GET FWA BP SZB,RSS SKIP - VALID (NON-ZERO) FWA BP JMP LNKER REPEAT FWA BP LINKAGE INPUT STB .MEM1 STB LINTL SAVE STARTING LINK ADDRESS FOR INT LINK TABLE CMB,INB CHECK IF GREATER THAN 1777 ADB B1777 SSB JMP LNKER YES IT IS...ERROR SMLWA LDA P8 LDB MESS3 MESS3 = ADDR: LWA MEM? JSB READ PRINT MESSAGE, GET REPLY LDA P5 SET FOR 5 OCTAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP SMLWA REPEAT INPUT LDA OCTNO GET LWAM SZA,RSS ZERO IS ERROR JMP SMLWE STA .MEM6 SAVE LWAM IN LWAC CMA,INA CHECK IF LESS THAN FWABP ADA .MEM1 SSA ERROR? JMP GETAV NO SMLWE JSB INERR YES...ERROR JMP SMLWA TRY AGAIN * GETAV LDA P8 PRINT: LDB MES34 "FWA MEM" JSB READ GET THE ANSWER LDA P5 SET FOR 5 OCTAL DIGITS. JSB DOCON CONVERT TO OCTAL. JMP SYMER -ERROR. JMP SETAV OK , SET BOUNDARY. * SYMER JSB INERR JMP GETAV -REPEAT REQUEST * SETAV LDA OCTNO IF NUMBER SZA,RSS ZERO IS ERROR JMP SYMER STA .MEM3 SAVE FIRST WORD MEM ADA N1 SET UP LWABP STA .MEM2 CMA,INA CHECK IF LOWER THAN FWABP ADA .MEM1 SSA,RSS ERROR? JMP SYXOMER YES LDA .MEM2 CMA,INA CHECK IF GREATER THAN 1777 LDB B1777 ADA B1777 SSA,RSS IF NEGATIVE...DEFAULT TO 1777 LDB .MEM2 GET ACTUAL STB .MEM2 SAVE AS LWABP * * GET # WORDS OF COMMON * GETCM LDA P14 LDB MES7 "# WORDS OF COMMON" JSB READ LDA N5 CONVERT DEC NUMBER JSB DOCON JMP COMER ERROR IN CONVERSIO LDA .MEM6 GET LWAM CMA ADA OCTNO SEE IF WE HAVE ROOM ADA .MEM3 SSA ERROR? JMP GTCM1 NO COMER JSB INERR ERROR JMP GETCM TRY AGAIN SPC 1 GTCM1 LDA OCTNO GET # OF WORDS SZA IF ZERO...NO COMMON .MEM4=.MEM5=.MEM6 CMA IF NOT ZERO...ALLOW FOR COMMON ADA .MEM6 STA .MEM4 SET IN LWAM... CPA .MEM6 IF=TO .MEM6...NO COMMON RSS INA OTHERWISE SET FWAC TO LWAM+1 STA .MEM5 * * DEFINE SYMBOLS NEEDED BY BCS * WHICH PCS NORMALLY DEFINES * THESE SYMBOLS ARE: * .EQT.,.SQT.,HALT,.MEM. * .EQT. IS BETWEEN THE 6 WORD SQT ENTRY AND THE * START OF THE 4 WORD EQT ENTRIES. IT CONTAINS * THE # OF EQT ENTRIES DEFINED * .SQT. WHERE THE START OF THE SQT TABLE IS LOCATED * .HALT IF DEFINED IS THE RESTART LOCATION * IF NOT DEFINED IT BECOMES A LOCKED HALT * .MEM. IS A 6 WORD TABLE WITH THE FIRST WORD * CONTAINING THE ADDRESS OF THE MEM TABLE * THE TABLE CONSISTS OF FWABP,LWABP,FWAM,LWAM * AND LWAM (THERE ARE TWO LWAM ENTRIES) * CLA CLEAR OUT LST ENTRIES STA LST STA .XFER LDA DEFLC GET ADDRESS OF ASC TABLE STA TEMP1 SAVE TO USE LDA N4 NUMBER OF ENTRIES TO DEFINE STA TEMP2 SAVE IN DOWN COUNTER ASGNM LDB TEMP1,I GET ENTRY ADDRESS STB DFER1 JSB SSTBL IT ISN'T DEFINED, WILL SET UP LST FOR US yNOP LDA LST1 GET ADD WHERE TO PUT SYMBOL STA DFER2 SAVE FOR MOVE JSB .DFER MOVE IN NAME DFER2 NOP DFER1 NOP LDB LST3 LDA B,I AND M7400 STA B,I MASK OFF LOWER BYTE INB GET TO LST4 CLA SET AS SPECIAL DEFINED STA B,I INB GET TO LST5 LDA .MEM1 DEFINE A BASE PAGE LINK STA B,I ISZ .MEM1 INCREMENT FWABP ISZ TEMP1 GET TO NEXT ENTRY ISZ LST INCREMENT # OF LST ENTRIES ISZ TEMP2 DONE? JMP ASGNM NO * * * HERE GO RELOCATE THE SYSTEM * LDA P12 PRINT: LDB MES2 "REL SYS MODS" JSB PRINT PRINT * RELOCATE FROM RTS/2100 LOADER CLA GET A ZERO STA PNAME CLEAR NAME FLAG STA LOCC CLEAR LOCC IN LOADER STA BPLOC SAME FOR BPLOC JSB PRCMD GO RELOCATE SYS MODULES JSB GTOUT ERROR FROM LOADER...GET OUT LDA LOCC UPDATE FWAM STA .MEM3 FWAM LDA BPLOC UPDATE FWABP STA .MEM1 LDB .IOCA SEE IF THEY DEFINED IOC JSB SSTBL JMP RELSE NO...ERROR LDB .HLTA SEE IF HALT DEFINED JSB SSTBL JSB GTOUT NOT DEFINED??? WE DEFINED IT...GET OUT LDA LST4,I NEEDED, SEE IF DEFINED SZA DEFINED? JMP CHCK3 YES * CHCK2 LDA .MEM3 GET ADDRESS STA LST4,I AND SAVE IT ISZ LST INCREMENT # OF ENTRIES LDA HTINA GET ADDRESS WHERE HALT INSTRUCTION LOCATED STA SETAD SAVE FOR PUNCHING IT OUT LDA JMPIN GET JUMP BASE PAGE INSTURCTION IOR .MEM1 SET IN BASE PAGE LINK STA HTIN+1 SAVE AS NEXT INST AFTER HALT LDA .MEM3 GET ADDRESS WHERE HALT TO GO LDB A INB SET FOR 2 WORD TRANSFER JSB SETCR WRITE OUT 2 WORDS LDA .MEM. SET FOR WADDRESS WHERE LINK CONTENTS ARE ADA P2 GET TO .MEM3 STA SETAD SAVE ADDRESS LDA .MEM1 GET OUTPUT ADDRESS LDB .MEM1 JSB SETCR SET IN LINK WORD ISZ .MEM1 ISZ .MEM3 ISZ .MEM3 SET FOR FWAM CHCK3 LDA ATBUF SET UP FOR OUTPUTING HALT LINK WORD STA SETAD LDA LST4,I GET ADDRESS WHERE HALT INSTRUCTION STA SETAD,I SAVE FOR OUTPUTING LDA LST5,I GET BASE PAGE LINK LDB LST5,I ADDRESS FOR OUTPUTING JSB SETCR AND GO OUTPUT LINK WORD LDA UEXFL SEE IF WE HAVE ANY UNDEFINED EXT. SZA,RSS UNDEFINED? JMP GENIO NO...CONTINUE RELSE LDA ERR34 UNDEFINED EXT JSB ERROR RESTART JMP RSTRT SPC 1 B1777 OCT 1777 .IOCA DEF *+1 ASC 3,.IOC. SKP * * * * NUMERICAL INPUT CONTROL * * THE DOCON SUBROUTINE ANALYZES THE INPUT FOR THE * CHANNEL NO., TBG CHANNEL NO., AND LAST * WORD OF AVAILABLE MEMORY. * * CALLING SEQUENCE: * A = MAX NO. OF CHARACTERS PERMITTED IN RESPONSE. * THE SIGN OF A DETERMINES THE CONVERSION FROM * ASCII TO OCTAL (POS.) OR DECIMAL (NEG.). * B = IGNORED * JSB DOCON * * RETURN: * (N+1): CONTENTS OF A AND B ARE DESTROYED. AN INVALID * CHARACTER HAS BEEN DETECTED IN THE RESPONSE, OR * THE RESPONSE CONTAINS AN INVALID NO. CHARACTERS. * THE MESSAGE IS TO BE REPEATED ON RETURN. * (N+2): A = CONVERTED RESULT * DOCON NOP JSB GETOC GET OCTAL/DECIMAL, RETURN OCTAL JMP *+4 INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP *+3 YES - CONTINUE JSB INERR INVALID DIGIT ENTRY JMP DOCON,I RETURN ISZ DOCON INCR RETURN ADDRESS LDA OCTNO GET CONVERTED NUMBER JMP DOCON,I RETURN SKP * *  INVALID TTY RESPONSE * * THE INERR SUBROUTINE PRINTS THE DIAGNOSTIC FOR INVALID * RESPONSES DURING THE INITIALIZATION SECTION. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INERR * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * INERR NOP LDA ERR10 SET INVALID DEVICE ERROR CODE JSB ERROR PRINT ERROR MESSAGE JMP INERR,I RETURN * SKP MES27 DEF MS27 MES34 DEF SYMES SYMES ASC 4,FWA MEM? MS27 ASC 4,FWA BP? MESS3 DEF *+1 ASC 5,LWA MEM? HTINA DEF *+1 HTIN HLT 77B DEFINED HALT INST NOP JMPIN OCT 124000 JMP BASE PAGE INDIRECT * * SKP * * BUILD I-O TABLES * * * GENERATE I/O TABLES * * THIS SECTION OF CODE GENERATES THE I/O TABLES * FOR THE SYSTEM. THESE INCLUDE THE EQUIPMENT TABLE (EQT), * STANDARD DEVICE REFERENCE TABLE (DRT), AND INTERRUPT TABLE. * SQT TABLE,DMA ASSIGNMENT, AND INTERUPT LINK TABLE * * THE EQT RECORDS HAVE THE FOLLOWING FORMAT: * * N1,D.N2<,D><,UX> * * N1 = CHANNEL NO. (2 OCTAL DIGITS) * N2 = DRIVER CLASS. CODE (2 OCTAL DIGITS) * D = DMA FLAG (OPTIONAL) * UX= SUB CHANNEL * * * EACH SQT RECORD CONSISTS OF A 2-DIGIT NO. SPECIFYING THE * CORRESPONDING ENTRY IN THE EQUIPMENT TABLE * * * THE INT RECORDS HAVE ONE OF THE FOLLOWING FORMATS: * * N1,N2,ENTRY POINT * N1,N3 * * N1 = CHANNEL NO. (2 OCTAL DIGITS - MUST BE IN INCREASING ORDER) * EXCEPTION: IF N1 = 04 (POWER - FAIL), * THIS ENTRY DOES NOT HAVE TO BE IN ORDER. ALSO, * ONLY AN ENT OR AN ABS TYPE ENTRY IS ACCEPTED * FOR N1 = 04. * N2 = EQT NO. * NAME = PROGRAM NAME TO BE SCHEDULED * ENTRY = ENTRY POINT TO WHICH TRANSFER IS TO BE MADE * N3 = ABSOLUTE VALUE (6 OCTAL DIGITS) * * GENIO CLA SET # OF EQT'S TO ZERO STA CEQT CLEAR EQT COUNTER LDA .MEM3 FWAM STA SQTAD ADDRESS WHERE SQT GOES ADA P6 GET TO EQT8 ENTRIES STA AEQT SAVE AS CURRENT EQT ADDRESS INA SAVE ROOM FOR # OF EQT ENTRIES STA PPREL LDA P7 PRINT: LDB MES25 "EQT TBL" JSB PRINT * SEQT LDA CEQT EQT COUNT INA ADA P6 SET EQT#=EQT+6...START PRINTING AT 7 LDB MES6A STUFF INTO PRINT BUFFER JSB STFNM LDA P9 PRINT: LDB MES6 "EQT XX =?" JSB READ AND INPUT DRIVER REQUEST LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA PTERM CHARS= END ? JMP SSQTI YES, TRY TO END CPA REQT REPEAT? JMP GENIO YES * JSB GINIT INITIALIZE BUFFER SCAN LDA P2 JSB GETOC GET 2 OCTAL DIGITS, CONVERT JMP IOERR INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP CLDBU YES - SET CHNL NO., CLEAR D,B,U IOERR LDA ERR24 SET CODE = INVALID CHNL IN EQT JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * CLDBU LDB OCTNO GET I/O CHANNEL NO. STB EQTW1 SET I/O ADDRESS ADB N8 IS CHAN EQ. LESS THAN 10? SSB JMP IOERR YES, CHANNEL ERROR CLA STA IODMA CLEAR DMA FLAG STA IOBUF CLEAR AUTOMATIC BUFFERING FLAG LDA N2 TWO CHAR COMPARE JSB GETNA SEE IF IT IS D. CPA ASCD. CHARS=D.? JMP STYPE YES DVERR LDA ERR25 SET CODE = INVALID DRIVER NAME JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD STYPE LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF STA ASTYP SAVE 2 ASCII CHARS FOR I.XX,C.XX CCA ADA CURAL ADJUST CURRENT LBUF ADDR STA CURAL RESET CURAL TO CONVERT TYPE LDA P2 JSB GETOC GET 2 OCTAL CHARS, CONVERT JMP DVERR INVALID DRIVER NAME LDB OCTNO GET DRIVER TYPE BLF,BLF ROTATE TO UPPER B STB EQTW2 SET DRIVER TYPE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP LISCN SCAN FOR I.XX, C.XX CPA BLANK CHAR = COMMA? RSS YES - CONTINUE JMP DVERR NO - INVALID DRIVER NAME * CCA STA DFLAG SET DMA-IN FLAG STA BFLAG SET BUFFERING-IN FLAG * INDBU CCA STA CMFLG SET COMMA FLAG = NO COMMA IN JSB GETAL GET NEXT CHAR FROM LBUF CPA CHARD CHAR = D? JMP SEDMA YES - SET DMA CODE CPA CHARU CHAR = U? JMP SETBU YES - SET BUFFERING CODE UNERR LDA ERR10 SET CODE = INVALID D,B,T JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD EQTST JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP LISCN SCAN FOR I.XX, C.XX CPA BLANK CHAR = COMMA? JMP INDBU YES - GET NEXT D,B,U, ENTRY JMP UNERR NO - INVALID D,B,U CHARACTER * SEDMA ISZ DFLAG SKIP - FIRST D ENTERED JMP UNERR DUPLICATE D'S ENTERED LDA MSIGN SET BIT 15 = 1 FOR DMA FLAG IOR EQTW1 SET IN DMA BIT STA EQTW1 AND SAVE IT JMP EQTST TEST FOR NEXT OPERAND * SETBU ISZ BFLAG HERE FOR SUBCHANNEL PROCESSING JMP UNERR DUPLICATE U'S ENTERED LDA N2 2 CHAR CONVERSION JSB GETOC JMP UNERR ERROR IN CONVERSION LSL 6 GET IN CORRECT POSITION FOR SUBCHANNEL IOR EQTW1 MERGE IT IN STA EQTW1 JMP EQTST AND CHECK FOR MORE * LISCN LDB ASDDR ADDRESS OF D.XX BUFFER JSB SSTBL IS IT IN THE SYMBOL TABLE? JMP DVERR NO LDA LST4,I YES, GET THE ADDRESS STA EQTW4 SAVE DRIVER START ADDRESS LDA EQTWA GET ADDRESS OF EQT TABLE STA SETAD SAVE FOR PUNCHING LDA PPREL GET CURRENT OUTPUT ADDRESS LDB A ADB P3 4 WORD EQT ENTRY STB PPREL  SAVE FOR LATTER JSB SETCR OUTPUT IN ABS ISZ PPREL BUMP TO NEXT EQT ENTRY ISZ CEQT INCR EQT ENTRY COUNT JMP SEQT PROCESS NEXT EQT RECORD * SPC 1 * SSQTI LDA CEQT ANY EQT'S BEEN LOADED? SZA JMP SSQT YES, CAN END LDA ERR10 NO,AT LEAST ONE REQUIRED JSB ERROR PRINT: "ERR PA" JMP SEQT START OVER * SQTAD NOP EQTWA DEF *+1 EQTW1 NOP EQTW2 NOP NOP EQTW4 NOP SPC 1 ASCD. ASC 1,D. CHARU OCT 125 SKP * * SET DEVICE REFERENCE TABLE (SQT) * SSQT LDA P11 SEND OUT BEGINING MESSAGE LDB MESQ0 "SQT ENTRIES" JSB PRINT LDA MESQA GET ADDRESS OF MESSAGE BUFFERS STA CMSQA SAVE AS CURRENT LDA SQTEA GET ADDRESS OF START OF SQT ADDRESS STA CSQTE LDA N6 GET # OF SQT ENTRIES STA SQTCT SAVE IN DOWN COUNTER SPC 1 SQTIN LDB CMSQA GET ADDRESS OF MESSAGES LDA B,I INB LDB B,I JSB READ GET INPUT LDA N2 GET FIRST 2 CHARS JSB GETNA CPA RDRT RETRY SQT TABLE? JMP SSQT YES CPA REQT RETRY EQT TABLE? JMP GENIO YES JSB GINIT RESET FOR SCAN LDA P2 CONVERT SQT ENTRY JSB GETOC TO OCTAL JMP SQTER ERROR IN CONVERSION SZA,RSS 0 IS ILLEGAL JMP SQTER STA CSQTE,I SAVE VALUE ADA N7 CHECK IF IN RANGE SSA LESS THAN 6? JMP SQTER ERROR CMA CHECK IF OUT OF RANGE ADA CEQT SSA JMP SQTER OUT OF RANGE ISZ CMSQA GET NEXT MESSAGE ADDRESS ISZ CMSQA GET TO NEXT COUNT ISZ CSQTE GET NEXT STORAGE ADDRESS ISZ SQTCT DONE? JMP SQTIN NO...GET NEXT ENTRY * LDA SQTEA GET ADDRESS OF WHERE BUFFER TO BE OUTPUTED IS STA SETAD SA.+HFBVE ADDRESS LDA SQTAD GET ABS OUTPUT ADDRESS LDB SQTAD GET ENDING ADDRESS ADB P5 JSB SETCR OUTPUT IT JMP GTDMA GO GET DMA FLAGS SPC 1 SQTER LDA ERR27 SQT ERROR JSB ERROR JMP SQTIN AND TRY AGAIN SPC 1 CMSQA NOP CSQTE NOP SQTCT NOP N7 OCT -7 SPC 1 SQTEA DEF *+1 REP 6 NOP SPC 1 MESQA DEF QMESA QMESA OCT 5 DEF KYBD? OCT 4 DEF TTY? OCT 4 DEF LIB? OCT 6 DEF PNCH? OCT 6 DEF INPT? OCT 5 DEF LIST? MESQ0 DEF *+1 ASC 6,SQT ENTRIES AwH SKP * *HERE WE GET THE DMA CHANNEL * GTDMA LDA P4 LDB DMAMG "DMA?" JSB READ CLA STA TBUF ASSUME NO DMA STA TBUF+1 LDA P2 CONVERT ANSWER TO ASC JSB GETOC JMP DMAER ERROR IN CONVERSION SZA,RSS DMA SUPPLIED? JMP DMA0 NO CPA P6 IS IT A 6? RSS YES JMP DMAER NO...HE BLEW IT STA TBUF SAVE CHANNEL 6 JSB GETAL SEE IF END CPA BLANK COMMA? JMP DMA1 YES...CHECK FOR CHANNEL 7 CPA ZERO END? JMP DMA0 YES...OUTPUT IT DMAER JSB INERR ERROR JMP GTDMA SPC 1 DMA1 LDA P2 CONVERT SECOND PRAM JSB GETOC JMP DMAER ERROR IN CONVERSION CPA P7 IF SUPPLIED, MUST BE 7 RSS JMP DMAER NOT...ERROR STA TBUF+1 SAVE FOR LATTER DMA0 LDA ATBUF GET ADDRESS WHERE DMA INFO CONTAINED STA SETAD SET FOR OUTPUTING LDB DMC1A GET ADDRESS OF "DMAC1" ENTRY JSB SSTBL FIND IT JSB GTOUT .IOC. WITH OUT IT??? LDA LST4,I GET ADDRESS WHERE IT IS LOCATED LDB A SET IN 1 WORD WRITE JSB SETCR SET IN WORD ISZ SETAD GET TO NEXT ENTRY LDB DMC2A FIND "DMAC2" JSB SSTBL JSB GTOUT ERROR...NOT THERE LDA LST4,I GET ADDRESS WHERE LOCATED LDB A JSB SETCR SET IN DMA CHANNEL INFO SPC 2 * * DEFINE XSQT,XEQT,.EQT.,.SQT.,.MEM. * LDA ALBUF SET UP OUTPUT BUFFER ADDRESS STA SETAD LDB XSQTA GET "XSQT" JSB SSTBL FIND IT JSB GTOUT NOT THERE LDA SQTAD GET ADDRESS WHERE SQT TABLE STARTS STA LBUF SAVE FOR OUTPUT LDA LST4,I GET ADDRESS IN IOC WHERE XSQT IS LOCATED LDB A JSB SETCR AND GIVE IT TO THEM LDB XEQTA FIND XEQT ADDRESS JSB SSTBL JSB GTOUT GET mOUT...NOT DEFINED LDA AEQT GET ADDRESS WHERE EQT TABLE LOCATED STA LBUF SAVE FOR OUTPUTING LDA LST4,I GET ADDRESS WHERE TO PUT IT LDB A JSB SETCR AND OUTPUT IT LDB .EQTA FIND ".EQT." ENTRY POINT JSB SSTBL FIND IT JSB GTOUT NOT THERE...ERROIR LDA AEQT DEFINE FOR SNAP STA LST4,I LDB CEQT GET COUNT STB LBUF SAVE IT LDB A SET FOR ONE WORD WROITE JSB SETCR AND SAVE # OF EQT ENTRIES LDA LST5,I SET UP BASE PAGE LINK LDB AEQT STB LBUF SAVE FOR LINK OUTPUT LDB A JSB SETCR LDB .SQTA FIND ".SQT." ENTRY JSB SSTBL JSB GTOUT NOT THERE...ERROR LDA SQTAD STA LST4,I STA LBUF LDA LST5 DEFINE LINK ONLY LDA A,I LDB A JSB SETCR SAVE LINK ADDRESS LDB .MEMA FIND ".MEM." ENTRY...DEFINE .MEM. TABLE JSB SSTBL JSB GTOUT LDA PPREL DEFINE IT AS NEXT INSTRUCTION STA LST4,I SAVE IT FOR SNAP INFO STA LBUF SET IT IN FOR LATTER USE LDA LST5 LDA A,I GET BASE PAGE LINK ADD LDB A JSB SETCR SET IN BASE PAGE LINK FOR .MEM. LDA PPREL INA SET UP FOR DEF STA LBUF LDA .MEM1 GET FWABP STA LBUF+1 LDA .MEM2 GET LWABP STA LBUF+2 LDB PPREL ADB P6 GET FWAM STB LBUF+3 ISZ LBUF+3 LDA .MEM4 STA LBUF+4 STA LBUF+5 LWAM LDA PPREL STB PPREL SET TO BE AFTER .MEM. TABLE JSB SETCR SET IN .MEM. TALBE ISZ PPREL JMP SINTT GO PROCESS INTERUPTS SPC 1 DEFLC DEF *+1 .EQTA DEF EQTA. .SQTA DEF SQTA. .MEMA DEF MEMA. .HLTA DEF HLTA. DMC1A DEF DMC1 DMC2A DEF DMC2 DMAMG DEF MGDMA XSQTA DEF SQTAX XEQTA DEF EQTAX SKP * ROUTINE TO INPUT TO BUFFER FROM TTY * A REG=LENGTH...POSITVE BYTES, NEGATIVE WORDS * B REG=ADDRESS OF MESSAGE * WILL PUT RESPONSE IN LBUF * * MAKE A CALL TO PRMT * CALLING SEQUENCE IS AS FOLLOWS * JSB PRMT * DEF *+6 * DEF MESSAGE BUFFER ADDRESS * DEF LENGTH OF MESSAGE BUFFER (POSITIVE CHAR) * DEF INPUT BUFFER ADDRESS * DEF MAX LENGTH * DEF ERROR PARSE ADDRESS * READ NOP STA RTMP1 STB RTMP2 SAVE LENGTH AND ADD OF MESSAGE JSB PRMT GO TO MAIN FOR INPUT DEF *+6 RTMP2 NOP DEF RTMP1 DEF LBUF DEF P64 DEF PARSA STA PARNO SAVE LENGTH OF INPUT BUFFER INA CONVERT TO WORD ADDRESS CLE,ERA ADA ALBUF GET TO END OF BUFFER CLB PUT ZERO AT END OF BUFFER STB A,I JSB GINIT INITIALIZE LBUF SCAN JMP READ,I AND RETURN RTMP1 NOP * SKP * * I-O TABLE SUBROUTINES * * * GET CHAR FROM LBUF, RETURN IN A * * THE FOLLOWING SUBROUTINE SUPPLIES THE CHARACTERS FOR * GETNA AND GETOC. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB GETAL * * RETURN: * A = CURRENT CHARACTER * B = DESTROYED * GETAL NOP LDA CMFLG CMFLG = COMMA-IN FLAG SZA,RSS SKIP IF NO COMMA IN JMP BLRET RETURN BLANK LDB BUFUL GET U/L FLAG IGNOR LDA CURAL,I GET CHAR FROM LBUF SZB SKIP IF LOWER CHAR ALF,ALF ROTATE TO LOWER AND M377 ISOLATE LOWER CHAR CPA ZERO END OF BUFFER? JMP GETAL,I YES - RETURN WITH ZERO CMB,SZB RESET U/L, SKIP IF UPPER CHAR ISZ CURAL INCR LBUF ADDRESS CPA BLANK CHAR = BLANK? JMP IGNOR IGNORE BLANKS STB BUFUL SAVE U/L FLAG CPA COMMA CHAR = COMMA? ISZ CMFLG RESET FLAG TO SHOW COMMA IN JMP GETAL,I RETURN WITH NON-BLANK CHAR BLRET LDA BLANK REPLACE WITH BLANKaW CHAR JMP GETAL,I RETURN WITH BLANK SKP * * MOVE ALPHA FROM LBUF TO TBUF * * THE FOLLOWING SUBROUTINE MOVES THE CHARACTERS FROM LBUF * TO TBUF. * * CALLING SEQUENCE: * A = MAX. NO. OF CHARACTERS TO BE MOVED. THE SIGN OF A * DESIGNATES THE POSITION OF THE FIRST CHARACTER. * IF THE SIGN OF A IS POSITIVE, THE FIRST CHAR IS TO * BE MOVED TO THE LOW CHAR IN TBUF. IF A IS NEGATIVE, THE * FIRST CHARACTER IS TO BE MOVED TO THE UPPER CHAR IN TBUF. * B = IGNORED * JSB GETNA * * RETURN: * A = FIRST CHAR (IF ONLY 1 CHAR) OR FIRST 2 CHARS MOVED. * B = DESTROYED * GETNA NOP CCE,SSA,RSS SET E = 1 (EVEN) POSITION CMA,CLE,INA SET E = 0 (ODD) POSITION - COMP STA MAXC MAXC = MAXIMUM NO. CHARS LDA ATBUF ATBUF = ADDR OF TBUF STA CURAT SET CURRENT TBUF ADDRESS CLB STB TBUF CLEAR WORD 1 OF TBUF CCA STA CMFLG SET COMMA-IN FLAG SEZ,RSS SKIP - ODD POSITION JMP OCHAR BEGIN WITH ODD CHARACTER NEXTC JSB GETAL GET CHAR FROM LBUF CPA ZERO END OF BUFFER? LDA BLANK YES - REPLACE CHAR WITH BLANK ALF,ALF ROTATE TO UPPER A STA CURAT,I SET CHARACTER IN TBUF ISZ MAXC CHECK FOR ALL CHARS IN JMP OCHAR GET ODD CHAR FROM LBUF LDA TBUF GET FIRST 2 TRANSFERRED CHARS JMP GETNA,I YES - RETURN OCHAR JSB GETAL GET CHAR FROM LBUF CPA ZERO END OF BUFFER? LDA BLANK REPLACE ZERO CHAR WITH BLANK IOR CURAT,I ADD TO UPPER CHAR IN TBUF STA CURAT,I SET CHARS IN TBUF ISZ CURAT INCR TBUF ADDRESS ISZ MAXC CHECK FOR ALL CHARS IN JMP NEXTC NO - TRY NEXT UPPER CHAR LDA TBUF GET FIRST 2 TRANSFERRED CHARS JMP GETNA,I RETURN SKP * * CONVERT OCT/DEC ASCII TO BINARY * * THE GETOCI SUBROUTINE CONVERTS THE NEXT CHARACTERS IN LBUF FROM * ASCII (DECIMAL OR OCTAL) TO THEIR BINARY VALUE. * * CALLING SEQUENCE: * A = MAX. NO. OF CHARS IN CONVERSION REQUEST. IF A IS * POSITIVE, THE REQUEST IS FOR OCTAL; IF A IS NEGATIVE, * THE REQUEST IS FOR DECIMAL. * B = IGNORED * JSB GETOC * * RETURN: * (N+1): INVALID DIGIT OR OVERFLOW IN CONVERSION * (N+2): A = CONVERTED NO. * B = DESTROYED * GETOC NOP LDB L10 GET OCTAL RANGE SSA SKIP IF OCTAL REQUEST LDB L12 GET DECIMAL RANGE STB DRANG SET DIGIT RANGE SSA,RSS SKIP IF DECIMAL REQUEST CMA,INA SET REQUEST COUNT TO NEGATIVE STA MAXC SET MAX NO. OF DIGITS CCA STA DIFLG SET DATA-IN FLAG = NO DATA IN STA CMFLG SET COMMA-IN FLAG CLA STA OCTNO OCTNO = OCTAL NUMBER GETNX JSB GETAL GET CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP ENDOC YES - RETURN CPA BLANK CHAR = BLANK? (COMMA IN) JMP ENDOC YES - RETURN ADA L60 SUBTRACT 60B FROM CHAR STA TCHAR SAVE CHAR SSA SKIP IF VALID LOWER LIMIT JMP DGERR INVALID DIGIT ADA DRANG ADD DIGIT RANGE CLE,SSA,RSS CLEAR E - SKIP IF VALID DIGIT JMP DGERR INVALID DIGIT ISZ DIFLG INCR DATA-IN FLAG, SKIP NOP LDA OCTNO GET PREVIOUS OCTAL NO. ADA A SET A = OCTNO X 2 ADA A SET A = OCTNO X 4 LDB DRANG GET DIGIT RANGE CPB L12 RANGE = DECIMAL? ADA OCTNO SET A = OCTNO X 5 ADA A SET A = OCTNO X 10/8 ADA TCHAR SET A = NEW OCTAL NO. STA OCTNO SAVE NEW OCTAL NO. SEZ TEST FOR OVERFLOW JMP DGERR INVALID NO. ISZ MAXC SKIP IF ALL DIGITS PROCESSED JMP GETNX GET NEXT DECIMAL DIGIT ISZ GETOC INCR RETURN ADDRESS LDA OCTNO GET OCTAL EQUIVALENT DGERR JMP GETOC,I RETURN ENDOC ISZ DIFLG SKIP - NO DATA IN JMP *-4 DATA IN - NORMAL RETURN JMP GETOC,I RETURN - ERROR SKP * * * ROUTINE TO CONVERT THE OCTAL NUMBER IN A TO * ASCII AND STUFF THE 2 LOW ORDER DIGITS INTO A BUFFER * ADDRESSED BY B. LEADING ZEROS ARE SUPPRESED * * CALLING SEQUENCE: * * A = OCTAL NUMBER * B = BUFFER ADDRESS * * RETURN: A AND B ARE DESTROYED * STFNM NOP STB STFAD SAVE FINAL ADDRESS LDB ATBUF TEMP BUFFER ADDRESS JSB CONVD LDA TBUF+2 LEAST 2 DIGITS STA STFAD,I STORE IN BUFFER JMP STFNM,I * STFAD BSS 1 * * SKP * * INITIALIZE CHAR TRANSFER * * THE GINIT SUBROUTINE SETS THE CURRENT ADDRESS AND UPPER/LOWER * FLAG FOR SCANNING LBUF. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB GINIT * * RETURN : CONTENTS OF A AND B ARE DESTROYED * GINIT NOP LDA ALBUF ALBUF = ADDR OF LBUF STA CURAL SET CURRENT LBUF ADDRESS CCB STB BUFUL BUFUL = BUFFER U/L FLAG JMP GINIT,I RETURN * * CONVERT A TO ASCII AT B * * THE CONVD SUBROUTINE CONVERTS THE CONTENTS OF A * INTO ASCII (DECIMAL OR OCTAL) AT THE LOCATION SPECIFIED * BY B. THE CONVERTED RESULT REQUIRES 3 WORDS, AND IS * IN THE FORMAT: XXXXX, WITH A SPACE IN THE FIRST POSITION. * * CALLING SEQUENCE: * A = NO. TO BE CONVERTED. IF THE SIGN OF A IS POS., * THE CONVERSION IS TO BE IN OCTAL; IF NEGATIVE, * IN DECIMAL. * B = ADDRESS OF CORE LOCATION FOR CONVERTED RESULT * JSB CONVD * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * CONVD NOP STB CONSV LDB A SSA COMPLEMENT? CMA,INA YES STA CONLN SAVE FOR CONVERSION SSB DEC OR OCT JMP CNVD1 DEC. JSB ȆCNUMO OCTAL CONVERT DEF *+3 DEF CONLN CONSV NOP JMP CONVD,I AND RETURN CNVD1 JSB CNUMD DEC CONVERT DEF *+3 DEF CONLN DEF CONSV,I JMP CONVD,I AND RETURN SPC 1 CONLN NOP SKP * * CONSTANTS * MES6A DEF MES6I MES6 DEF *+1 ASC 2,EQT MES6I BSS 1 ASC 2, =? MES29 DEF *+1 ASC 4,INT TBL AYES OCT 131 ANO OCT 116 MES7 DEF *+1 ASC 7,# WDS IN COMM? MES9 DEF *+1 ASC 5,SNAPSHOT? MES11 DEF *+1 ASC 2, MS112 ASC 1, ASC 4,FINISHED BNDS DEF *+1 ASC 4,-BOUNDS MEMOT DEF *+1 ASC 3,FWABP= ASC 3,LWABP= ASC 3,FWAM= ASC 3,LWAM= ASC 3,FWAC= ASC 3,LWAC= ASET DEF *+1 ASC 6,- SET BPLOCC ASTO ASC 2, TO ASTOA DEF ASTO ASLOC DEF *+1 ASC 2,LOCC ASSTL DEF *+1 ASC 8,-LINKS START AT ASPCE OCT 40 ACOMA OCT 26000 MES55 DEF *+1 ASC 10,INPUT SNAPFILE NAME? * * * PROGRAM CONSTANT FACTORS ZERO OCT 0 N1 DEC -1 N2 DEC -2 N3 DEC -3 N4 DEC -4 N5 DEC -5 N6 DEC -6 N8 DEC -8 N9 DEC -9 N10 DEC -10 N60 DEC -60 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P8 DEC 8 P9 DEC 9 P11 DEC 11 P12 DEC 12 P14 DEC 14 P20 DEC 20 P30 DEC 30 P64 DEC 64 L10 EQU N8 L12 EQU N10 L60 OCT -60 M177 OCT 177 M377 OCT 377 M7400 OCT 177400 IDAA DEF *+1 BSS 5 ASDDR DEF *+1 ASC 1,D. ASTYP BSS 1 UBLNK OCT 20000 JMP3I JMP 3,I P10 DEC 10 P1 DEC 1 * BLANK OCT 040 BLANK MSIGN OCT 100000 NEGATIVE SIGN * ?ADD DEF *+1 ASC 1,? CLCIN CLC 10B LNKAD NOP P61 DEC 61 SKP * * INTERRUPTT TABLE PROCESSOR * * INTERRPUT TABLE PROCESSOR * * SINTT LDA P7 LDB MES29 MES29 = ADDR. * INT TABLE JSB PRINT PRINT: INT TBL * * INITAL LY SET ALL INTERUPT LOCATIONS TO CLC X * LDB ALBUF GET ADDRESS OF A BUFFER LDA HLTB4 LOCATION 4 HALT STA B,I SAVE HALT INB INA SET FOR HALT 5 STA B,I INB CLA CLEAR OUT LOC 6 AND 7 STA B,I INB STA B,I CLEAR LOC 7 INB LDA N60 SET UP FOR 60 CLC INSTR STA TEMP1 LDA CLCIN CLC 10...FIRST LOC TO BE CLEARED JSCLC STA B,I START PUTTING IN CLC INST. INA INCREMENT CLC INB GET NEXT ADDRESS ISZ TEMP1 DONE? JMP JSCLC NO...CONTINUE LDA ALBUF GET BUFFER ADDRESS AGAIN STA SETAD SET IN FOR DUMPING LDB P61 GET LENGTH LDA LINTL SEE IF LINKS LESS THAN 100 CMA,INA ADA B SSA,RSS IF SO USE LINTL AS LAST ADDRESS LDB LINTL LDA P4 START WITH LOCATION 4 JSB SETCR SET IT IN LDB P8 GET ADDR OF FIRST INT LOCATION STB TBREL SET CURRENT BP ADDRESS * SETIN LDA P1 NEW LINE LDB ?ADD JSB READ GET INT RECORD FROM TTY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA PTERM CHARS = -E? JMP SNAPO YES - I/O TABLES COMPLETE CPA RINT REPEAT INTERRUPT? JMP SINTT YES CPA REQT GO BACK TO EQT? JMP GENIO YES CPA RDRT REPEAT DRT? JMP SSQT YES JSB GINIT RE-INITIALIZE LBUF SCAN LDA P2 JSB GETOC GET 2 OCTAL DIGITS, CONVERT JMP CHERR INVALID INT CHANNEL NO. DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP SETCH SAVE INT CHANNEL NO. CHERR LDA ERR10 SET CODE = INVALID INT CHNL NO. JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * SETCH LDA OCTNO GET INT CHANNEL NO. STA INTCH SAVE CHANNEL NO. ADA N4  CHAN L.T. 4? SSA JMP CHERR YES, CHANNEL ERROR * LDA P7 DO 7 OCTAL CHAR CONVERSION JSB GETOC CONVERT TO BINARY JMP CHERR ERROR IN COONVERSION LDB CMFLG SEE IF THERE IS A COMMA SZB ? JMP COMIN NO...ABS VALUE * * HERE IF ENTRY POINT SPECIFIED * INTEN LDA OCTNO GET LINK ADDRESS STA LNKAD SAVE FOR LATTER CMA,INA CHECK IF IN BOUNDS ADA P64 SSA TO BIG? JMP CHERR YES LDA LNKAD CMA,INA ADA LINTL CHECK INCASE LINTL LESS THAN 100 SSA JMP CHERR ERROR TO BIG LDA N5 JSB GETNA MOVE 5 CHARS TO TBUF LDB ATBUF ADDR OF NAME JSB SSTBL SEARCH SYMBOL TABLE RSS NOT FOUND, ERROR JMP SETEN SET ENTRY POINT ADDRESS ENERR LDA ERR33 SET CODE = INVALID ENTRY POINT JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT RECORD INPUT * SETEN LDA LST4,I GET BP LINK ADDRESS STA SETAD,I LDA LNKAD GET LINK ADDRESS LDB A JSB SETCR LDA LNKAD GET LINK ADDRESS AGAIN FOR JSB INST IOR IJSB ADD JSB 0,I CODE * COMIN STA TBUF SAVE INT TABLE CODE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? RSS YES, CONTINUE JMP ENERR NO, BUT SHOULD BE LDA INTCH GET INT CHANNEL NO. CPA P4 SPECIAL PROCESSING JMP PFINT IF TRAP CELL FOUR CMA,INA ADA TBREL ADD CURRENT ADDRESS SZA IF EQUAL...OK SSA IF LESS THAN, ERROR JMP STINT SET INTERRUPT TABLES, LOCATION EQERR LDA ERR24 SET CODE = INVALID INT CHNL ORDR JSB ERROR PRINT DIAGNOSTIC JMP SETIN GET NEXT INTERRUPT RECORD * PFINT LDA TBUF IF TRAP CELL FOUR, STA SETAD,I SAVE VALUE FOR LOC 4 LDA P4 SAVE TO SET IN LOC 4 6 LDB P4 ONLY ONE WORD JSB SETCR JMP SETIN GET NEXT INTERRUPT RECORD * HLTB4 OCT 103004 TRAP CELL DEFAULT VALUE * * STINT LDB TBUF GET INT LOCATION CODE STB SETAD,I PUT INT LOCATION CODE IN INT LOC LDB TBREL GET INT LOCATION ADDR CMB,INB ADB P64 ADD ADDR OF FIRST SYS LINK SSB SKIP - INT LOCATION OVERFLOW JMP EQERR * LDA INTCH GET INTERUPT LOCATION STA TBREL UPDATE CURRENT COUNT LDB A SET FOR 1 WORD OUTPUT JSB SETCR SET CORE JMP SETIN AND TRY AGAIN SKP * * SNAPSHOT OUTPUT FOR LOADER RELOCATION SECTION * * * SNAPSHOT OUTPUT * SNAPO CLA STA WDCNT * SNAP8 LDA JMP3I SET STARTING JMP STA LBUF LDA ?XFER SET STARTING ADDRESS STA LBUF+1 LDA P2 LDB P3 JSB SETCR JSB CLSFI CLOSE OUTPUT FILE SNAP2 LDA P9 PRINT: LDB MES9 "SNAPSHOT" JSB READ CCA STA CMFLG JSB GETAL GET RESPONSE CPA ANO NO????? JMP ENDGN YEP, END OF RTS GEN CPA AYES YES??????? JMP SNP11 YES LDA ERR10 JSB ERROR JMP SNAP2 TRY AGAIN * * GET SNAP FILE NAME * SNP11 LDA P20 LDB MES55 JSB READ READ IN NAME JSB FCRET GO CREATE SNAP FILE DEF *+5 DEF ABDCB DEF P30 DEF P3 DEF ZERO JSB FILCK JMP SNP11 TRY AGAIN LDA PPREL SET UP FWAM PAST EQT AND .MEM. TABLE STA .MEM3 SAVE AS FWAM LDA .MEM. FRIST ADDRESS STA MEMAD .MEM. ADDRESS LDA MEMOT ADDRESS OF LABELS STA LBLAD LDA N6 NUMBER OF LABELS STA WDCNT JSB GINIT INITIALIZE BUFFER CLA STA MAXC CLEAR WORD COUNT STA PROCT CLEAR TOTAL COUNT SNAP1 LDA N4 ^ NO OF CHARS LDB BNDS ADDRESS OF "-BOUNDS" JSB BUFUP PUNCH ON TAPE JSB LBOUT PUNCH LABELS LDA MEMAD,I NEXT VALUE LDB ATBUF BUFFER TEMP STORAGE JSB CONVD CONVERT TO OCTAL LDA N3 LDB ATBUF JSB BUFUP PUNCH VALUE LDB MES25 FINISH LINE WITH "CRLF" JSB BUFUP ISZ MEMAD BUMP TO NEXT VALUE ISZ WDCNT MORE? JMP SNAP1 YES * LDA LST NUMBER OF SYMBOLS CMA,INA STA WDCNT JSB LSTI SET UP START OF SYMBOL TABLE SNAP4 JSB LSTP READ IN A SYMBOL JMP SNAP3 NO MORE...DONE LDA N3 LDB ASET JSB BUFUP PUNCH "-SET" LDA N2 LDB LST1 JSB BUFUP PUNCH SYMBOL NAME LDB LST3 MOVE TO END OF NAME LDA B,I GET LAST CHAR AND M7400 MASK OUT LOWER IOR ASPCE INSERT SPACE AS LAST CHAR STA B,I RESTORE LDA N1 LDB LST3 JSB BUFUP PUNCH LAST CHAR LDA N2 LDB ASTOA PUNCH " TO " JSB BUFUP LDB LST4 BUMP TO LST4 LDA B,I LDB ATBUF JSB CONVD CONVERT LST4 TO OCTAL LDA N3 LDB ATBUF JSB BUFUP PUNCH LST4 LDB MES25 JSB BUFUP FINISH WITH CRLF LDB LST5 LDA B,I GET LST5 SZA,RSS IS LST5 EQ. 0? JMP SNAP4 YES, SKIP LINKS LDA N8 LDB ASSTL JSB BUFUP PUNCH "-LINKS START AT" LDB LST5 LDA B,I GET LINK LDB IDAA BUFFER ADDRESS JSB CONVD CONVERT LST5 LDA TBUF AND M377 MASK OUT SPACE AS FIRST CHAR IOR ACOMA INSERT A COMMA STA TBUF RESTORE, COMMA AS FIRST LDA N3 LDB IDAA JSB BUFUP PUNCH LST5 LDA N3 LDB ATBUF JSB BUFUP PUNCH LST4 LDB MES25 JSB BUFUP FINISH WITH "CRLF" JMP SNAP4 NO, DO NEXT * SNAP3 LDA N8 LDB ASET JSB BUFUP PUNCH "-SET BPLOCC TO" LDA .MEM1 LDB ATBUF JSB CONVD LDA N3 LDB ATBUF JSB BUFUP PUNCH BPLOC LDB MES25 DUMP BUFFER JSB BUFUP LDA N3 END LINE WITH CRLF LDB ASET ADDRESS OF "SET" JSB BUFUP PUNCH"-SET" LDA N2 LDB ASLOC ADDRESS OF "LOCC" JSB BUFUP PUNCH "LOCC" LDA N2 LDB ASTOA JSB BUFUP PUNCH " TO " LDA .MEM3 FETCH FWAM LDB ATBUF JSB CONVD CONVERT TO ASCII LDA N3 LDB ATBUF JSB BUFUP PUNCH VALUE OF FWAM LDB MES25 JSB BUFUP END LINE WITH CRLF JSB CLSFI GO FCLOS SNAP FILE JMP ENDGN GO TO END RTSGN ROUTINE SKP * * SNAPSHOT GENERATION SUBROUTINES * * * * OUTPUT LABEL ROUTINE * * * CALLING SEQUENCE: * A AND B ARE IGNORED * JSB LBOUT * * RETURN: A AND B ARE DESTROYED * LBOUT NOP LDA N3 LDB LBLAD ADDRESS OF LABEL JSB BUFUP PUNCH LABEL LDA LBLAD UPDATE LABEL POINTER ADA P3 STA LBLAD JMP LBOUT,I RETURN * * * LOAD AND DUMP THE PUNCH BUFFER * * * CALLING SEQUENCE: * A = NEG OF NO. OF WORDS TO LOAD * B = ADDRESS TO LOAD FROM * JSB BUFUP * * RETURN: A AND B ARE DESTROYED * BUFUP NOP CPB MES25 DUMP BUFFER REQUEST? JMP BUFDN YES STA MAXC NO, SAVE NO OF WORDS TO GO ADA PROCT ACCUMULATE THE TOTAL STA PROCT LDA B,I GET THE WORD STA CURAL,I PUT IN BUFFER INB BUMP SOURCE POINTER ISZ CURAL UP BUFFER POINTER ISZ MAXC ALL DONE? JMP *-5 JMP BUFUP,I ALL DONE, RETURN * BUFDN LDA PROCT GET NEG OF WORD COUNT CMA,INA MAKE POSITIVE STA MAXC SAVE LENGTH JSB WRITF lNLHWRITE TO SNAP FILE DEF *+5 DEF ABDCB DEF FERR DEF LBUF DEF MAXC SIZE JSB GINIT INITIALIZE BUFFER POINTERS CLA STA MAXC STA PROCT JMP BUFUP,I RETURN * * * * ENDGN LDA 1717B GET NAME ADA P12 STA EDGN1 JSB .DFER MOVE IN NAME DEF MES11+1 EDGN1 NOP LDA MS112 MASK OFF 6TH CHAR AND M7400 IOR ASPCE STA MS112 LDA P14 PRINT: LDB MES11 "RTSGN FINISHED" JSB LOUT JSB FCLOS FCLOS PRINT FILE DEF *+3 DEF LSDCB DEF FERR JSB FCLOS CLOSE TRANSFER FILE DEF *+3 DEF INDCB DEF FERR JSB EXEC PRINT OUT ENDING MESSAGE DEF *+5 DEF P2 DEF ENDLU DEF MES11+1 DEF P7 JSB EXEC RELEASE SYMBOL TABLE TRACKS DEF *+3 DEF P5 DEF N1 JSB EXEC AND TERMINATE DEF *+2 DEF P6 SKP * KYBD? ASC 3,KYBD? TTY? ASC 2,TTY? LIB? ASC 2,LIB? PNCH? ASC 3,PUNCH? INPT? ASC 3,INPUT? LIST? ASC 3,LIST? DMC1 ASC 3,DMAC1 DMC2 ASC 3,DMAC2 SQTAX ASC 3,XSQT EQTAX ASC 3,XEQT EQTA. ASC 3,.EQT. SQTA. ASC 3,.SQT. MEMA. ASC 3,.MEM. HLTA. ASC 3,HALT MGDMA ASC 2,DMA? LBUF BSS 64 SIZZ EQU * END SWPIN * N  91700-18146 1603 S 0122 DS1/B CCE MODULE: D65AB              H0101 *ASMB,R,L,C HED * ABORT MESSAGE ROUTINE * (C) HEWLETT-PACKARD CO. 1976 * NAM D65AB,7 91700-16146 REV.A 760111 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ******************************************************* * *D65AB SUBROUTINE TO HANDLE ABORT MESSAGES. * *SOURCE PART # 91700-18146 REV.A * *REL PART # 91700-16146 REV.A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 8-22-74 * *MODIFIED BY: C.C.H. * *DATE MODIFIED: 01-11-76 * ********************************************************* * * DEFINE A AND B REG * A EQU 0 B EQU 1 SPC 1 * * DEFINE EXTERNALS * EXT EXEC,CNUMO SPC 1 * * DEFINE ENTRY POINT * ENT D65AB SPC 1 SUP SUPPRESS EXTENDED LISTING. SPC 1 * * SUBROUTINE TO HANDLE ABORT MESSAGES. * * B REG= ADDRESS OF 4 CHARACTER (ASCII) ERROR MESSAGE * A REG= ADDRESS TO BE INCORPORATED INTO ERROR MESSAGE * * CALLING SEQUENCE * JSB D65AB ABORT MESSAGE...DVR ERROR * D65AB WILL NOT RETURN CONTROL TO USER * * D65AB NOP STA ERCD SAVE ABORT ADDRESS DLD B,I GET ERROR MESSAGE DST MSG SAVE ERROR MESSAGE * JSB CNUMO CONVERT ERROR ADDRESS TO OCTAL DEF *+3 DEF ERCD DEF ERCD * LDB XEQT GET ADDRESS OF ID SEGMENT ADB D12 POINT TO NAME ADDRESS (WORD #13). LDA B,I GET THE FIRST TWO NAME CHARACTERS. STA PNAM SAVE IN ERROR MESSAGE, STA AMSG AND IN Aa  BORT MESSAGE. INB POINT TO I.D. SEGMENT WORD #14. LDA B,I GET CHARACTERS THREE AND FOUR. STA PNAM+1 SAVE IN ERROR MESSAGE, STA AMSG+1 AND IN ABORT MESSAGE. INB POINT TO I.D. SEGMENT WORD #15. LDA B,I GET CHARACTER FIVE & PROGRAM TYPE. AND UBYTE RETAIN ONLY THE NAME-CHARACTER, IOR B40 AND INSERT A FOLLOWING BLANK. STA PNAM+2 SAVE IN ERROR MESSAGE, STA AMSG+2 AND IN ABORT MESSAGE. * JSB EXEC SEND 2-LINE ERROR/ABORT MESSAGE DEF *+5 DEF B2 DEF B1 TO SYSTEM CONSOLE (LU #1) DEF MSG DEF D19 * JSB EXEC TERMINATION REQUEST DEF *+2 NO RETURN DEF B6 FROM TERMINATION CALL. SPC 1 MSG ASC 3,XXXX: PNAM ASC 3, ERCD ASC 3, OCT 6412 CR/LF ASC 1,* AMSG ASC 8,XXXXX ABORTED! * B1 OCT 1 B2 OCT 2 B6 OCT 6 B40 OCT 40 D12 DEC 12 D19 DEC 19 UBYTE OCT 177400 XEQT EQU 1717B CURRENT I.D. SEGMENT ADDRESS. SPC 1 END fR   91700-18147 1601 S 0122 DS1/B CCE MODULE: D65SV              H0101 :ASMB,R,L,C HED * SLAVE REPLY INTERFACE * (C) HEWLETT-PACKARD CO. 1976 * NAM D65SV,7 91700-16147 REV.A 760101 SPC 1 ENT D65SV,#MBRK EXT .ENTR,EXEC,#RSAX,#PLOG,DRTEQ,D65CL * * * NAME: D65SV * SOURCE: 91780-18147 * RELOC: 91780-16147 * PGMR: C.C.H. [ 01/01/76 ] * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * D65SV HANDLES SLAVE MONITOR REPLIES, WHICH ARE DESTINED FOR * REMOTE SATELLITES. THE REPLIES ARE COMMUNICATED TO THE NETWORK * VIA 'D65CL', IN ORDER TO AVOID CONFLICT WITH OTHER USERS OF * THE SAME COMMUNICATION LINE. ADDITIONALLY, 'D65SV' CLEARS THE * SLAVE MONITOR LIST-ENTRY, TO PREVENT POST FACTO TIMEOUT ERRORS. * * D65SV OPERATION: * * 1. GET USER PARAMETERS. * A. CHECK FOR VALID LOGICAL UNIT NO. (VIA 'DRTEQ'). * B. EXTRACT THE COMM. LINE DEVICE SELECT CODE. * C. VERIFY THAT THE LOGICAL UNIT IS LINKED TO DVR65. * 2. GET AND SAVE THE SLAVE MONITOR'S CLASS NUMBER. * 3. CALL <#MBRK> TO CHECK THE CURRENT TRANSACTION FOR A BREAK CONDITION. * A. IF BREAK FLAG SET, DON'T REPLY (GO TO 6.). * 4. CALL TO SEND REPLY TO THE SATELLITE. * A. IF #PLOG #0, WRITE PARMB TO PARMB LOGGER'S CLASS NO. * 5. CLEAR ENTRY IN SLAVE MONITOR CONTROL LIST. * 6. IF ERROR, RETURN TO THE CALLER AT , WITH * ASCII ERROR CODES IN &; ELSE, RETURN TO * WITH DVR65 RETURN INFO IN &. * * D65SV CALLING SEQUENCE: * * JSB D65SV * DEF *+7 * DEF RCODE REQUEST CODE. * DEF CONWD CONTROL WORD. * DEF RQBUF REPLY BUFFER. * DEF RQLEN 1 REPLY BUFFER LENGTH (MINIMUM =35 WORDS). * DEF DABUF DATA BUFFER (OR DUMMY PARAMETER). * DEF DALEN DATA BUFFER LENGTH (OR DUMMY PARAMETER). * RETURN HERE UPON ERROR DETECTION. * NORMAL RETURN HERE, UPON COMPLETION. * ( =0: BREAK-FLAG DETECTED. ) * SKP * * D65SV ERROR MESSAGES: * * ( RETURNED TO CALLER IN & AT LOCATION ) * * "DS01" - DRIVER HAS DETECTED AN ERROR CONDITION (PARITY, ETC.) * * "DS02" - HAS PREEMPTED ACCESS TO THE COMMUNICATION LINE. * * "DS04" - LOGICAL UNIT INVALID, OR NOT ENTERED IN CLCT TABLE. * * "DS07" - 'RES' TABLE ENTRY CANNOT BE LOCATED. * * "DS08" - BUSY-REJECT FROM REMOTE [ RETRIES EXHAUSTED ]. * * "IOXX" \ * - SYSTEM LEVEL ERRORS DETECTED BY RTE. * "RNXX" / * * SPC 3 **************************************************************************** * * * #MBRK EXAMINES THE CURRENT SLAVE-STREAM LIST FOR THE MONITOR * * OPERATING ON THE STREAM-TYPE SPECIFIED BY THE CALLER. * * * * IF AN ENTRY'S BREAK-FLAG (WORD #2, BIT#15) IS SET, #MBRK RETURNS TO * * THE CALLER AT THE POINT. IF THE FLAG IS CLEAR, #MBRK * * RETURNS TO THE POINT. THE IS TAKEN, * * WHEN #MBRK DISCOVERS AN IMPROPER LOGICAL UNIT SPECIFICATION, OR * * WHEN #RSAX DETERMINES AN IMPROPER STREAM SPECIFICATION. * * * * #MBRK CALLING SEQUENCE: * * * * JSB #MBRK * * DEF *+4 = ASCII ERROR CODES ("DS04"/"DS07") * * =0, = ENTRY ADDRESS. * * = LINE SELECT CODE, = EQT EXTENSION ADDRESS. * * * **************************************************************************** SKP RCODA NOP REQUEST CODE ADDRESS. CONWD NOP CONTROL WORD ADDRESS. RQBUF NOP REPLY BUFFER ADDRESS. RQLEN NOP REPLY BUFFER LENGTH ADDRESS. DABUF NOP DATA BUFFER ADDR. (OR DUMMY PARAMETER). DALEN NOP DATA BUFFER LENG. (OR DUMMY PARAMETER). SUP [ SUPPRESS EXTENDED LISTING ] D65SV NOP ENTRY/EXIT. JSB .ENTR OBTAIN DIRECT ADDRESSES DEF RCODA FOR PARAMETERS & RETURN POINT. CLA INITIALIZE THE STA ERFLG ERROR FLAG STA REG AND REGISTER STA REG+1 STORAGE LOCATIONS. LDA RQBUF,I GET THE FIRST WORD OF THE PARMB. AND B377 ISOLATE THE STREAM TYPE, STA STYPE AND SAVE LOCALLY. LDB RQBUF GET THE REQUEST BUFFER ADDRESS. ADB P33 FORM ADDRESS OF TIME-TAG WORDS. STB TTADR SAVE FOR LIST ACCESS. SPC 1 * CHECK FOR BREAK FLAG, AND OBTAIN SELECT CODE & EXTENSION ADDRESS. SPC 1 JSB #MBRK GO TO CHECK DEF *+4 THE SLAVE-LIST ENTRY DEF STYPE FOR A BREAK CONDITION DEF CONWD,I IN THIS MONITOR'S DEF TTADR,I STREAM-LIST. JMP D65SV,I ERROR RETURN--CODES IN . JMP EXIT BREAK DETECTED: NORMAL RETURN [=0]. SPC 1 * CALL 'D65CLD' TO SEND THE REPLY TO THE SATELLITE. SPC 1 JSB D65CL GO TO COMM. LINE ACCESS ROUTINE. DEF *+8 DEF RCODA,I REQUEST CODE. DEF CONWD,I CONTROL WORD. DEF RQBUF,I REPLY BUFFER ADDRESS. DEF RQLEN,I REPLY BUFFER LENGTH. DEF DABUF,I DATA BUFFER ADDR. (OR DUMMY PARAMETER). DEF DALEN,I DATA BUFFER LENG. (OR DUMMY PARAMETER). DEF EXTAD EQT EXTENSION ADDRESS. ISZ ERFLG * ERROR--SET ERROR-RETURN FLAG. DST REG SAVE REGISTERS FOR RETURN TO CALLER. JSB PLOG GO TO CHECK FOR PARMB LOGGING REQUEST. SPC 1 * CLEAR CURRENT TRANSACTION IN SLAVE-STREAM LIST IN . SPC 1 JSB #RSAX GO TO ACCESS ROUTINE. DEF *+5 DEF P3 CLEAR AN ENTRY. DEF ST/LS SPECIFY THIS MONITOR'S LIST. DEF SCODE SEARCH, USING LINE SELECT CODE, DEF TTADR,I AND TRANSACTION TIME-TAGS. SSA ANY ERRORS? JMP ER07 YES. GO TO INFORM THE CALLER. SPC 1 * RETURN TO THE CALLER WITH & FROM DVR65, OR ASCII ERROR CODE. SPC 1 EXIT LDA ERFLG GET THE ERROR RETURN FLAG. SZA,RSS ANY ERRORS? ISZ D65SV NO. SET FOR NORMAL EXIT. DLD REG GET THE RETURN INFORMATION. JMP D65SV,I RETURN TO THE CALLER. SPC 1 * ERROR PROCESSING SECTION. SPC 1 ER07 LDB "07" #RSAX TABLE-ACCESS ERROR. LDA "DS" GET FIRST HALF OF ERROR MESSAGE "DS". JMP D65SV,I RETURN WITH ASCII ERROR MSG. IN &. SPC 4 * IF REQUESTED, WRITE PARMB'S TO THE LOGGER'S CLASS NO. SPC 1 PLOG NOP ENTRY/EXIT: PARMB LOGGING ROUTINE. LDA #PLOG GET REQUEST FLAG FROM . SZA,RSS IS THERE A REQUEST TO LOG PARMB'S? JMP PLOG,I NO. COMPLETE THE SLAVE PROCESSING. * STA PCLAS YES. SAVE THE LOGGER'S CLASS LOCALLY. * JSB EXEC WRITE DEF *+8  THE DEF CLS20 PARMB (PARAMETER BUFFER) DEF ZERO TO THE DEF RQBUF,I PARMB LOGGER'S DEF RQLEN,I CLASS NUMBER. DEF XEQT SUPPLY THE I.D. SEGMENT ADDRESS DEF "SV" AND ASCII "SV" SOURCE IDENTIFIER DEF PCLAS AS OPTIONAL PARAMETERS. NOP ** IGNORE ERRORS FOR THIS OPERATION ** JMP PLOG,I RETURN TO COMPLETE SLAVE PROCESSING. * SKP * CONSTANTS AND STORAGE. SPC 1 A EQU 0 B EQU 1 B77 OCT 77 B377 OCT 377 CLS20 OCT 100024 CLASS WRITE/READ--NO ABORT. EQMSK OCT 37400 EQT5 EQUIPMENT TYPE-CODE MASK. EXTAD NOP EQT EXTENSION ADDRESS. ERFLG NOP ERROR FLAG: #0 - TAKE . P2 DEC 2 P3 DEC 3 P4 DEC 4 P8 DEC 8 P33 DEC 33 PCLAS NOP LOCAL STORAGE: PARMB LOGGER'S CLASS NO. REG OCT 0,0 REGISTER STORAGE. SCODE NOP UPPER-BYTE SELECT CODE FOR LIST SEARCH. STYPE NOP STREAM-TYPE FROM PARMB. ST/LS NOP STREAM & LIST CODE-WORD FOR '#RSAX'. TTADR NOP TIME-TAG ADDRESS FROM PARMB. TTAG OCT 0,0 TIME-TAG STORAGE. TYP65 OCT 32400 EQUIPMENT TYPE-CODE 65, FOR DVR65. XEQT EQU 1717B USER'S I.D. SEGMENT ADDRESS. ZERO OCT 0 "04" ASC 1,04 "07" ASC 1,07 "DS" ASC 1,DS "SV" ASC 1,SV * SKP * < #MBRK > ROUTINE TO EXAMINE BREAK-FLAG IN MONITOR STREAM-LIST ENTRY. SPC 1 * CALLING SEQUENCE: * * JSB #MBRK * DEF *+4 * DEF STRM MONITOR'S STREAM TYPE-CODE. * DEF LU LU TO BE USED BY MONITOR--IF NO BREAK. * DEF TTAGA ADDRESS OF TIME-TAGS (2). * = ASCII ERROR CODES. * =0, = ENTRY ADDRESS. * =SELECT CODE, =EQT EXTENSION ADDRESS. * STRM NOP STREAM TYPE-CODE ADDRESS LU NOP LOGICAL UNIT NO. ADDRESS. TTAGA NOP ADDRESS OF 2-WORD TIME-TAG BUFFExR. #MBRK NOP ENTRY/EXIT: BREAK-FLAG ROUTINE. JSB .ENTR OBTAIN DIRECT ADDRESSES DEF STRM FOR PARAMETERS & RETURN POINT. SPC 1 * VERIFY LOGICAL UNIT & EXTRACT SELECT CODE & EQT EXTENSION ADDRESS. SPC 1 JSB DRTEQ GO TO FIND EQT INFORMATION. DEF *+2 DEF LU,I RETURN INFO FOR THIS LOGICAL UNIT. SSB ANY ERRORS? JMP MBER4 * ERROR: INVALID LU "DS04". * ADB P3 FORM EQT4 ADDRESS FROM EQT FWA IN . LDA B,I GET THE CONTENTS OF EQT4. AND B77 ISOLATE THE DEVICE SELECT CODE. ALF,ALF POSITION TO THE UPPER BYTE. STA SCODE SAVE FOR CLEARING THE TABLE ENTRY. * INB POINT TO EQT5 ADDRESS. LDA B,I GET THE CONTENTS OF EQT5. AND EQMSK ISOLATE THE EQUIPMENT TYPE-CODE. CPA TYP65 IS THIS LU LINKED TO DVR65? RSS YES. SKIP TO FIND THE EQT EXTENSION. JMP MBER4 NO. * ERROR: "DS04" INVALID LU! * ADB P8 COMPUTE ADDRESS OF EQT13. LDB B,I GET A DIRECT RBL,CLE,SLB,ERB ADDRESS FOR THE JMP *-2 EQT EXTENSION. STB EXTAD SAVE FOR USE BY 'D65CL'. SPC 1 * LOCATE THE SLAVE-STREAM LIST-ENTRY FOR THE CURRENT TRANSACTION. SPC 1 LDA STRM,I GET FIRST WORD OF REPLY BUFFER. AND B377 ISOLATE THE STREAM TYPE. ALF,ALF POSITION TO UPPER BYTE. ADA P2 ADD OFFSET FOR STREAM HEADERS. STA ST/LS SAVE CODE-WORD FOR CLEARING LIST ENTRY. DLD TTAGA,I GET THE TIME-TAGS, DST TTAG AND SAVE FOR LATER USE. SKP * SEARCH FOR A "BREAK" CONDITION, AMONG THE STREAM-LIST ENTRIES. SPC 1 JSB #RSAX GO TO CHECK DEF *+5 THE SLAVE-LIST ENTRY DEF P4 FOR A BREAK CONDITION; DEF ST/LS USING SPECIFIED LIST CODE, DEF SCODE DEVICE SELECT CODE, AND DEF TTJ*($AG TIME-TAGS, FOR ENTRY-SEARCH. SSA ANY ERRORS? JMP MBER7 * LIST ERROR--REPORT: "DS07". SZB BREAK-FLAG DETECTED? JMP BREAK YES. EXIT VIA . * LDA SCODE RETURN WITH: = SELECT CODE, LDB EXTAD = EXTENSION ADDRESS. ISZ #MBRK SET NO-BREAK RETURN: P+3 BREAK ISZ #MBRK IF BREAK DETECTED: P+2 JMP #MBRK,I RETURN TO THE CALLER. * MBER4 LDB "04" INVALID LOGICAL UNIT ERROR. RSS MBER7 LDB "07" #RSAX TABLE-ACCESS ERROR. LDA "DS" GET FIRST HALF OF ERROR MESSAGE. JMP #MBRK,I TAKE ERROR-RETURN EXIT: P+1 * SPC 3 END *   91700-18149 1613 S 0122 DS1/B CCE MODULE: PLOSB              H0101 RASMB,R,L,C HED PLOSB 91700-16149 REV.A * (C) HEWLETT-PACKARD CO. 1976 NAM PLOSB,2,30 91700-16149 REV.A 760325 SUP SPC 2 *********************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL * RIGHTS RESERVED. NO PART OF THIS PROGRAM MAY BE * PHOTOCOPIED, REPRODUCED, OR TRANSLATED TO ANOTHER * PROGRAM LANGUAGE WITHOUT THE PRIOR CONSENT OF * HEWLETT-PACKARD COMPANY. *********************************************************** SPC 3 * *********************************************************** * * PROGRAM LOAD AND SAVE FOR BASIC * * BUFFERED DATA TRANSFER FOR 8500 SATELLITES * * SOURCE PART # 91700-18149 REV A * * REL PART # 91700-16149 REV A * * LISTING PART # A-91700-16149-1 * * WRITTEN BY: BARBARA PACKARD, LARRY POMATTO * * DATE WRITTEN: 12-05-74 * * MODIFIED BY: JEAN-PIERRE BAUDOUIN * * DATE MODIFIED: DEC 1975 *********************************************************** SPC 2 * * PROGRAM TO DO READ/WRITE ON UP TO MAXN * OPEN FILES FOR 8500 SATELLITES. MAXN IS THE NO. * OF FILES WHICH MAY BE OPEN AN ANY ONE TIME. * REMEMBER EACH FILE TAKES 145 WORDS!!! * CENTRAL PROGRAM WHEN SCHEDULED MUST BE * PASSED THE CLASS NUMBER. * * DATA IS PACKED INTO 512 WORD BUFFERS BEFORE * TRANSFER. * SKP * DEFINE ENTRY POINTS SPC 2 * DEFINE EXTERNALS SPC 1 EXT EXEC,READF,POSNT,CLOSE,WRITF EXT OPEN,CREAT,D65SV,D65CL IFN EXT DBUG XIF SPC 2 * DEFINE A AND B REG SPC 1 A EQU 0 B EQU 1 SKP * * PROGRAM STARTS HERE * PLOSB LDA B,I GET CLASS NUMBER STA CLSNM SAVE CLASS NUMBER IFN SZA DO THEY WANT DBUG? JMP PLOSS YES WAIT FOR FIRST USER JSB DBUG NO...GIVE THEM DBUG DEF *+1 JSB EXEC TURN4+ OFF, SAVE RESOURCES FOR LATTER DEF *+4 DEF D6 DEF D0 DEF D1 JMP PLOSB GO TO BEGINING WHEN RE-STARTED XIF SPC 1 D6 DEC 6 * * WE SHOULD ONLY GO THROUGH THE ABOVE ONCE * SPC 1 PLOS0 BSS 0 HERE ON ALL OTHER CALLS PLOSS JSB EXEC DO A GET CALL...WAIT FOR SOMETHING DEF *+5 DEF D21 CODE FOR A GET CALL DEF CLSNM CLASS # DEF RBUF REQUEST BUFFER DEF D35 REQUEST BUFFER LENGTH * * WHEN WE GET HERE SOMEONE WANTS SOMETHING * LDA DCBN GET DCB NUMBER..IF ZERO SZA IT IS A NEW REQUEST JMP PLOS1 NOT A NEW REQUEST LDA STAT GET STATUS WORD CPA M1 JMP CLSIT CLOSE REQUEST LDA CALOC NEW REQUEST...SEE IF WE CAN HANDLE IT ADA MMAXS LDB M3 SET ERROR TO -3 ...CAN'T HANDLE IT SSA,RSS HANDLE REQUEST? JMP TERM NO...TELL THEM TRY LATER LDB M4 GET ERROR CODE IF LENGTH ERROR LDA BLEN GET LENGTH WORD ADA MBUFS SEE IF LARGER THAN BUFFER SSA,RSS JMP TERM YES...ERROR LDA LSFG GET LOAD-SAVE FLAG SSA LOAD OR SAVE LOAD=0,SAVE=1 JMP PSAV1 SAVE JSB OPN GO OPEN FILE JMP PLOS1 OK ON OPEN...TREAT AS STANDARD PSAV2 LDB M2 SET FOR NOT THERE JMP TERM AND TERMINATE * HERE FOR SAVE * PSAV1 JSB CRET GO CREATE THE FILE JMP PLOS1 CREATED OK...PROCESS LDA FERR GET ERROR CODE STA TEMP0 SAVE INCASE NOT TYPE 0 FILE JSB OPN CHECK IF TYPE 0 FILE RSS POSSIBLY JMP PSAV2 NO...OH WELL LDA LSFG GET LOAD-SAVE FLAG SLA OVERRIDE BIT SET? JMP PLOS1 YES,OK LDA DCBN GET ADDRESS WHERE DCB LOCATED ADA D2 GET TO TYPE WORD LDA A,I GET WORD SZA,RSS TYPE 0? JMP PLOS1 YES...GOOD JSB DALOC NO...DEALOCATE DCB LDA TEMP0 GET FILE ERROR STA FERR RESET ERROR TYPE JMP PSAV2 TERMINATE * * AT THIS POINT THE DCB IS DEFINED * THE FILE IS OPENED AND WE ARE READY TO DO * OUR THING. * PLOS1 LDA STAT GET STATUS WORD CPA M1 JMP PLOS3 REQUEST WAS TO CLOSE THE FILE LDA LSFG LOAD OR SAVE? SSA JMP PLOS2 SAVE JSB LBUF LOAD THE BUFFER FROM THE DISC STB STAT SAVE THE FILE STATUS CPB M2 FMGR ERROR? JMP TERM YES, TERMINATE JSB WREC SEND THE DATA ACROSS THE LINE JSB WRPLY SEND STATUS REPLY JMP PLOS0 AND TERMINATE AND WAIT SPC 1 PLOS2 JSB RREC READ THE DATA FOR SAVE CLB TELL THEM ALL WENT WELL STB STAT SAVE IT IN THE STATUS WORD JSB SBUF SAVE BUFFER IN FILE CPB M2 FMGR ERROR? JMP TERM YES, TERMINATE JSB WRPLY SEND REPLY JMP PLOS0 GO WAIT FOR MORE * * CLOSE FILE AND DEALLOCATE DCB * PLOS3 JSB DALOC DEALLOCATE DCB AND CLOSE FILE CLB STB STAT STATUS OK JSB WRPLY SEND REPLY JMP PLOS0 GO TO SLEEP * * SUBROUTINE TO READ RECORDS FROM A FILE UNTIL * BUFFER IS FULL. * CALLING SEQUENCE * JSB LBUF * UPON RETURN...B REG= STATUS * STATUS= -1=EOF,O=BUFFER FULL * LBUF NOP LDA DBUFA GET DATA BUFFER ADDRESS STA TEMP1 SAVE AS CURRENT DATA ADDRESS INA GET TO FIRST DATA WORD STA LBUF1 SAVE FOR FILE WRITE COMMAND LDA BLEN GET MAX BUFFER SIZE ADA M1 EOB WORD, JUST IN CASE STA TEMP2 SAVE CURRENT BUFFER SIZE LBUFA JSB READF GO READ A RECORD DEF *+6 DEF DCBN,I DCB ADDRESS DEF FERR FILE STATUS AFTER READ LBUF1 NOP BUFFER ADDRESS GOES HERE DEF TEMP2 CURRχENT MAX BUFFER LENGTH DEF TEMP3 ACTUAL SIZE OF RECORD LDA FERR GET FILE STATUS LDB TEMP3 GET LENGTH SSA,RSS ERROR? JMP LBUFF NO CCB YES...SET TO -1 JMP LBUFG AND TERMINATE LBUFF CPB TEMP2 ARE THE TWO EQUAL? CLB,RSS YES...LOST SOMETHING SZB NO, 0 LENGTH? RSS NO JMP LBUFA YES,GET NEXT ONE LBUFG STB TEMP1,I SET STATUS IN BUFFER SZB EOF OR BUFFER FULL? CPB M1 ? JMP LBUFB YES...EITHER BACKSPACE OR TERMINATE LDB TEMP3 GET RECORD LENGTH AGAIN ADB LBUF1 GET ADDRESS OF NEXT RECORD TO READ STB TEMP1 SAVE ADDRESS INB GET TO FIRST DATA WORD STB LBUF1 SAVE AS CURRENT BUFFER ADDESS LDB TEMP3 GET LENGTH OF LAST READ CMB NEGATE AND SUBTRACT 1 (INCLUDE COUNT WORD) ADB TEMP2 SAVE AS NEW LENGTH STB TEMP2 SAVE NEW LENGTH SSB,RSS SHOULD NEVER GO NEGATIVE JMP LBUFA BUT MAKE SURE ANYWAY * * AT THIS POINT THE BUFFER IS FULL OR AN * EOF HAS BEEN HIT...IN ANY CASE DON'T READ * ANY MORE NOW * LBUFB SZB EOF? JMP LBUFC YES...CLOSE FILE JSB POSNT NO...BACKSPACE ONE RECORD DEF *+4 DEF DCBN,I DCB ADDRESS DEF FERR DEF M1 CLB SET THE B REG...BUFFER FULL LDA FERR GET ERROR CODE SSA LDB M2 SET TO -2 IF ERROR JMP LBUF,I RETURN * * EOF HIT...CLOSE FILE * LBUFC JSB DALOC DEALOCATE DCB AND CLOSE FILE CCB SET B=-1...EOF LDA FERR GET ERROR CODE SSA LDB M2 SET TO -2 FOR STATUS IF ERROR JMP LBUF,I RETURN SKP * * SUBROUTINE TO MOVE BUFFER TO FILE * CALLING SEQUENCE * JSB SBUF * SBUF NOP LDA DBUFA GET DATA BUFFER ADDRESS STA TEMP1 SAVE BUFFER ADDRESS SBUFA LDA TEMP1,I GET LENGTH OF RECORD SZA,RSS DONE? JMP SBUF,I YES...RETURN ISZ TEMP1 GET ADDRESS OF 1ST DATA WORD STA TEMP2 SAVE LENGTH FOR WRITE INA,SZA,RSS EOF? JMP SBUFB YES...CLOSE FILE JSB WRITF WRITE THE RECORD DEF *+5 DEF DCBN,I DCB ADDRESS DEF FERR ERROR STATUS DEF TEMP1,I BUFFER ADDRESS DEF TEMP2 LENGTH OF WRITE GOES HERE LDA FERR GET ERROR CODE SSA ERROR? JMP SBUFB YES, TRY TO CLOSE FILE LDA TEMP2 GET LENGTH OF LAST WRITE ADA TEMP1 GET ADDRESS OF NEXT WRITE STA TEMP1 SAVE FOR NEXT WRITE JMP SBUFA CONTINUE WRITING ON FILE * * HERE WHEN EOF REACHED * SBUFB JSB DALOC DEALOCATE THE DCB CLB LDA FERR GET CLOSE ERROR CODE SSA SKIP IF OK LDB M2 SET FOR STATUS WORD STA FERR RESTORE ERROR CODE JMP SBUF,I RETURN SKP SPC 2 * * THIS SECTION CLOSES ALL FILES CURRENTLY * OPEN TO THE REMOTE LU # * CLSIT LDA SATA GET ADDRESS OF ACTIVE SATELLITES STA TEMP1 SAVE IN UP COUNTER LDA MMAXS GET MAX # OF ENTRIES INA STA TEMP2 SAVE IN DOWN COUNTER CLA SET UP FOR TABLE DISPLACEMENT STA TEMP3 CLOS1 LDA RLU GET REMOTE LU # CPA TEMP1,I IS THERE A MATCH RSS JMP CLOS2 NO, TRY NEXT ONE * LDA TEMP3 GET DISPLACEMENT ADA DCBBA GET TO DCB ADDRESS LDB A,I GET DCB ADDRESS STB CLSAL SAVE FOR CLOSE CLB DEALLOCATE DCB STB A,I CLEAR TABLE LOCATION STB TEMP1,I CLEAR SATELLITE ENTRY JSB CLOSE CLOSE DCB DEF *+3 CLSAL NOP DEF FERR LDA CALOC GET CURRENT # OF ACTIVE TERMINAL ADA M1 DECREASE IT BY 1 CPA M1 NONE ACTIVE? JMP CLOS3 f YES. GO TO COMPLETION. STA CALOC SAVE NEW CURRENT # * CLOS2 ISZ TEMP1 NO...GET NEXT ENTRY ISZ TEMP3 ISZ TEMP2 DONE? JMP CLOS1 NO...CONTINUE * CLOS3 LDB M2 LDA FERR GET FMGR ERROR CODE SSA NO ERROR CPA M11 OR FILE ALREADY CLOSED CLB CPB M2 JMP TERM EXIT IF ERROR STB STAT OK IN STATUS WORD JSB WRPLY SEND REPLY JMP PLOS0 GO TO SLEEP SKP * SUBROUTINE TO ALOCATE DCB AND OPEN A FILE * CALLING SEQUENCE * JSB OPN * NORMAL RETURN * ERROR RETURN * OPN NOP JSB ALOC GO GET A DCB ADDRESS LDA DCBN GET DCB ADDRESS STA OPEN1 SAVE DCB ADDRESS JSB OPEN GO TRY TO OPEN FILE DEF *+7 OPEN1 NOP DCB ADDRESS HERE DEF FERR DEF PNAM NAME OF FILE DEF D0 DEF SC DEF LU LDA FERR ANY ERRORS? SSA,RSS JMP OPN,I NO...RETURN JSB DALOC YES...DEALOCATE THE DCB ISZ OPN SET FOR ERROR RETURN JMP OPN,I ERROR RETURN SKP * * SUBROUTINE TO CREATE A FILE * CALLING SEQUENCE * JSB CRET * NORMAL RETURN * ERROR RETURN * CRET NOP JSB ALOC GO GET A DCB LDA DCBN GET THE DCB ADDRESS STA CRET1 SAVE DCB ADDRESS LDA TYPE GET TYPE WORD SZA,RSS IS IT ZERO? LDA D11 YES...DEFAULT TO TYPE 11 STA TYPE SAVE TYPE WORD LDA SIZE GET SIZE WORD SZA,RSS IS IT ZERO? LDA D40 YES...DEFAULT TO 40 RECORDS STA SIZE SAVE SIZE WORD JSB CREAT CREATE THE FILE DEF *+8 CRET1 NOP DEF FERR DEF PNAM NAME TO BE USED DEF SIZE DEF TYPE TYPE IS DEFINED AS TYPE 9 DEF SC SECURITY CODE DEF LU LDA FERR GET FILE STATUS SSA,RSS ANY ERRORS? JMP CRET,I NO...RETURN JSB DALOC DEALOCTE DCB ISZ CRET SET FOR ERROR RETURN JMP CRET,I RETURN...ERROR SKP * * SUBROUTINE TO ALOCATE A DCB * CALLING SEQUENCE * JSB ALOC * ALOC NOP LDA DCBBA GET ADDRESS OF DCB AVAILABLE TABLE STA TEMP1 SAVE IN TEMP LOCATION LDA MMAXS GET MAX # OF ENTRIES STA TEMP2 SAVE IN DOWN COUNTER CLA GET A ZERO STA TEMP3 SAVE AS MULT. FACTOR ALOC1 ISZ TEMP2 DONE? JMP ALOC3 NO...CONTINUE LDB M3 YES...NO ROOM JMP TERM TELL OTHER SIDE TO TRY LATER ALOC3 LDA TEMP1,I GET CONTENTS OF TABLE SZA,RSS IS THERE SOMETHING THERE? JMP ALOC2 NO...GOOD FOUND A HOME!!! ISZ TEMP1 GET NEXT ADDRESS ISZ TEMP3 INCREMENT MULT COUNT JMP ALOC1 CONTINUE * * HERE IF WE HAVE ROOM * ALOC2 LDA TEMP3 GET MULT FACTOR MPY D144 GET DISPLACEMENT FROM FIRST ADA DCBA ADDRESS OF AVAILABLE DCB STA TEMP1,I SAVE IN TABLE TO HOLD A PLACE STA DCBN SAVE IN PARMB ISZ CALOC INCREMENT # OF ACTIVE TERMINALS NOP LDA TEMP3 GET DISPLACEMENT ADA SATA ADD FOR SATELLITE TABLE ENTRY LDB RLU GET REMOTE LU STB A,I SAVE PLACE IN TABLE JMP ALOC,I RETURN SPC 3 SKP * * SUBROUTINE TO DALOCATE A DCB * CALLING SEQUENCE * JSB DALOC * DALOC NOP LDA DCBBA GET ADDRES OF DCB ACTIVE TABLE STA TEMP1 SAVE IN TEMP LOCATION LDA MMAXS GET MAX # OF ENTRIES STA TEMP2 SAVE IN TEMP LOCATION LDA SATA GET ADDRESS OF SATELLITE OPEN TABLE STA TEMP3 DALC1 ISZ TEMP2 GONE THRU TABLE? JMP DALC2 NO....GOOD LDB M4 WE IN BIG TROUBLE...SHOULD NEVER GET HERE JMP TERM UNKNOWN DCB DALC2 LDA TEMP1,I GET ADDRESS IN TABLE CPA DCBN THE SAME? JMP DALC3 YES...DEALOCATE IT ISZ TEMP3 GET TO NEXT SATELLITE ENTRY ISZ TEMP1 GET NEXT BUFFER ADDRESS JMP DALC1 GO TRY AGAIN * * HERE FOR MATCH CONDITION * DALC3 JSB CLOSE CLOSE THE FILE DEF *+3 RETURN DEF DCBN,I DCB ADDRESS DEF DCBN IGNORE ANY ERRORS CLA GET A ZERO STA TEMP1,I CLEAR OUT TABLE LOCATION STA TEMP3,I CLEAR OUT SATELLITE ENTRY STA DCBN CLEAR OUT DCB POINTER LDA CALOC GET CURRENT # OF ACTIVE TERMINALS SZA [ PROTECT AGAINST A NEGATIVE COUNT ] ADA M1 DECREASE IT BY 1 STA CALOC SAVE AS CURRENT # OF ACTIVE JMP DALOC,I RETURN SKP * * SUBROUTINE TO SEND DATA TO TERMINAL * CALLING SEQUENCE * JSB WREC * WREC NOP LDA RLU GET LU AND B77 CLEAN IT IOR B300 SET FOR DATA ONLY STA CNWD JSB D65CL SEND EXEC CALL DEF *+7 DEF IWRIT WRITE REQUEST DEF CNWD DEF DBUF ADDRESS OF DATA BUFFER DEF BLEN DATA LENGTH DEF RBUF+33 PASS TIME-TAGS TO DRIVER DEF RBUF+34 NOP ERROR RETURN JMP WREC,I RETURN SPC 4 * * ROUTINE TO READ DATA FROM A TERMINAL * CALLING SEQUENCE * JSB RREC * RREC NOP LDA RLU AND B77 IOR B300 SET FOR DATA ONLY STA CNWD JSB D65CL DEF *+7 DEF IREAD READ DATA DEF CNWD DEF DBUF DEF BLEN DEF RBUF+33 PASS TIME-TAGS TO DRIVER DEF RBUF+34 NOP ERROR RETURN JMP RREC,I RETURN SKP * * SUBROUTINE TO SEND A REPLY TO THE TERMINAL * CALLING SEQUENCE * JSB WRPLY * B REG= STATUS * WRPLY NOP LDA RBUF SET IN REPLY BIT IOR BIT14 STA RBUF LDA RLU GET REMOTE LU STA RRLU SAVE IN kREPLY BUFFER AND B77 STA CNWD SET CONTROL WORD (MODE 0) JSB D65SV SEND REPLY DEF *+7 DEF IWRIT WRITE DEF CNWD REQUEST ONLY DEF RBUF REQUST BUFFER DEF RBUFL REQUST BUFFER LENGTH DEF DUMMY DEF DUMMY NOP ERROR RETURN JMP WRPLY,I RETURN SPC 4 * * HERE TO TERMINATE ON AN ERROR CONDITION * B REG=STATUS * TERM STB STAT SAVE STATUS LDA RLU GET LU AND B77 CLEAN IT STA CNWD SAVE THE CONTROL WORD. JSB D65CL TELL OTHER SIDE, NO DATA DEF *+7 DEF ICONT CONTROL REQUEST DEF CNWD SEND STOP DEF DUMMY DEF DUMMY DEF DUMMY DEF DUMMY NOP ERROR RETURN JSB WRPLY SEND REPLY...REASON FOR STOP JMP PLOS0 WAIT FOR SOMEONE ELSE SPC 3 SKP * * TEMP VALUES,CONSTANTS,BUFFERS, WHAT EVER * MAXN EQU 2 MAX # OF OPEN TERMINALS BUFS EQU 512 SIZE OF DATA BUFFER SPC 1 CLSNM NOP CLASS NUMBER BIT14 OCT 40000 D21 DEC 21 D1 DEC 1 D2 DEC 2 D11 DEC 11 D40 DEC 40 D144 DEC 144 M1 DEC -1 M2 DEC -2 M3 DEC -3 M4 DEC -4 M11 DEC -11 MMAXS ABS 0-MAXN-1 MAX # OF TERMINALS + 1 MBUFS ABS 0-BUFS-1 DATA BUFFER SIZE CALOC OCT 0 CURRENT # OF ACTIVE DCB'S TEMP0 NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP D0 OCT 0 DBUFA DEF DBUF D35 DEC 35 IREAD OCT 100001 READ / RETURN IF ERROR IWRIT OCT 100002 WRITE / RETURN IF ERROR ICONT OCT 100003 CONTROL / RETURN IF ERROR RBUFL ABS RBFL REQUEST BUFFER LENGTH DCBBA DEF DCCB DCBA DEF DCBF SATA DEF SAT CNWD NOP B77 OCT 77 B300 OCT 300 DUMMY NOP SKP * * HERE WE DEFINE THE PARMB * . EQU * RBUF NOP STREAM ID DCBN NOP DCB ADDRESS LSFG NOP LOAD-SAVE FLAG,OVERIDE FLAG FERR NOP FILE MANAGER%<:6 STATUS STAT NOP STATUS PNAM NOP PROGRAM NAME BSS 2 SC NOP SECURITY CODE LU NOP LOGICAL UNIT TYPE NOP FILE TYPE SIZE NOP FILE SIZE BLEN NOP BUFFER LENGTH BSS 3 NOT USED RRLU NOP REMOTE LU RBFL EQU *-. LENGTH OF REQUEST BUFFER BSS 7 NOT USED RLU NOP REMOTE LU (PARMB + 24) BSS 10 REMAINDER OF PARMB (TIME TAGS) SPC 2 * * DEFINE SATELLITE OPEN TABLE * SAT REP MAXN NOP SPC 2 * DEFINE DCB TABLE DCCB BSS 0 REP MAXN NOP SPC 2 * DEFINE DCB AREA DCBF BSS 0 REP MAXN BSS 144 SPC 2 * DEFINE DATA BUFFER DBUF BSS 512 END EQU * END PLOSB Bs<  91700-18150 1603 S 0122 DS1/B CCE MODULE: D65CL              H0101 -ASMB,R,L,C HED COMM. LINE INTERFACE * (C) HEWLETT-PACKARD CO. 1976 * NAM D65CL,7 91700-16150 REV.A 760111 ENT D65CL EXT .ENTR,EXEC,DRTEQ,RNRQ,#RTRY * NAME: D65CL * SOURCE: 91700-18150 * RELOC: 91700-16150 * PGMR: C.C.H. [01/11/76 ] * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * D65CL CONTROLS ACCESS TO THE COMMUNICATIONS LINE VIA THE RESOURCE * NUMBERING (RN) SCHEME OF RTE-II & RTE-III. TWO RN'S ARE CHECKED FOR * AVAILABILITY, PRIOR TO ALLOWING ACCESS TO THE COMM. LINE. THE RN'S * ARE IDENTIFIED AS: PRN ( RN) AND LRN (LINE RN). * * D65CL OPERATION: * * 1. GET PARAMETERS AND CHECK FOR VALID LOGICAL UNIT NUMBER. * 2. ATTEMPT TO LOCK/CLEAR PRN WITH WAIT. * A. IF PRN IS LOCKED, SLAVE ACCESS IS REJECTED: "DS02" ERROR. * B. IF PRN IS LOCKED, MASTER ACCESS AWAITS COMPLETION. * C. IF AVAILABLE, PROCEED WITH PRN CLEARED. * 3. IF CONTROL REQ. OR MODE =DATA REQUEST, GO TO 4; ELSE, GO TO 6.C. * 4. ATTEMPT TO LOCK LRN; DON'T WAIT 'TIL AVAILABLE. * 5. CALL DVR65 FOR I/O TRANSFER VIA SUPPLIED LU. * A. IF GOOD TRANSFER, RETURN TO USER; ELSE, * 6. CHECK REJECT REASON: * A. IF REMOTE BUSY, WAIT 1-SECOND AND RETRY--GO TO 5. * B. IF RETRIES EXHAUSTED: "DS08" ERROR. * C. IF DRIVER BUSY, DO LRN LOCK W/WAIT. WHEN LRN IS AVAILABLE, * RE-CALL DRIVER (GO TO 4.). * D. IF ERROR REJECT, RETURN WITH ASCII ERROR CODE IN &. * * D65CL CALLING SEQUENCE: * * JSB D65CL * DEF *+7 [ OR *+8 ] * DEF RCODE READ/WRITE/CONTROL (1/2/3) REQUEST CODE * DEF CONWD CONTROL WORD: Z/MODE/LU OF COMM. LINE. * DEF RQBUF REQUEST OR DATA BUFFER ADDRESS. * DEF RQLEN REQUEST OR DATA BUFFER LENGTH. * DEF DABUF DATA BUFFER ADDRESS OR DUMMY PARAMETER. * DEF DALEN DATA BUFFER LENGTH OR DUMMY PARAMETER. * [ DEF EXTAD ] [ OPTIONAL ADDRESS OF EQT EXTENSION ] * RETURN HERE UPON DETECTION OF ERROR. * NORMAL COMPLETION RETURN HERE. * * NOTE: LRN & PRN ARE OBTAINED FROM THE FIRST TWO WORDS OF THE EXTENSION * TO THE EQT ENTRY LINKED TO THE USER-SPECIFIED LOGICAL UNIT NO. * SKP * * D65CL ERROR MESSAGES: * ( RETURNED TO CALLER IN & AT LOCATION ) * * "DS01" - DVR65 DETECTED AN ERROR CONDITION (PARITY ERROR, ETC.) * * "DS02" - HAS PREEMPTED COMPLETION OF THE CALLER'S REQUEST. * * "DS04" - LOGICAL UNIT INVALID, OR NOT ENTERED IN CLCT TABLE. * * "DS08" - BUSY-REJECT FROM REMOTE--RETRIES EXHAUSTED. * * "IOXX" \ * - SYSTEM LEVEL ERRORS, DETECTED BY RTE. * "RNXX" / * SKP RCODE NOP REQUEST CODE ADDRESS. CONWD NOP CONTROL WORD ADDRESS. RQBUF NOP ADDRESS OF REQUEST OR DATA BUFFER. RQLEN NOP ADDRESS OF REQUEST OR DATA BUFFER SIZE. DABUF NOP ADDRESS OF REQUEST OR DATA BUFFER. DALEN NOP ADDRESS OF REQUEST OR DATA BUFFER SIZE. EXTAD NOP OPTIONAL ADDRESS OF EQT EXTENSION. SUP [SUPPRESS EXTENDED LISTING] D65CL NOP ENTRY/EXIT JSB .ENTR OBTAIN DIRECT ADDRESSES DEF RCODE FOR PARAMETERS & RETURN POINT. SPC 1 LDA RCODE,I GET REQUEST CODE AND ABORT FLAG (BIT#15). CCE,SSA,RSS TEST SIGN & PREPARE TO SET IT. RAL,ERA SET SIGN FOR ERROR RETURN. STA RCODE SAVE REQUEST CODE, LOCALLY. * CLA LDB EXTAD GET EQT EXTENSION PARAMETER--IF ANY. STA EXTAD CLEAR PARAMETER FOR NEXT ACCESS. SZB  WAS THE EXTENSION PARAMETER SUPPLIED? JMP GETX YES. GO TO GET THE EXTENSION ADDRESS. SPC 1 * CHECK FOR VALID LU AND CALCULATE EQT EXTENSION ADDRESS. SPC 1 JSB DRTEQ GO TO FIND EQT ADDRESS. DEF *+2 DEF CONWD,I RETURN INFO FOR THIS LOGICAL UNIT. CPA M1 IF INVALID LU DETECTED, JMP ABOR4 * ERROR: "DS04" - INFORM THE CALLER. * ADB D4 FORM EQT5 ADDRESS FROM EQT FWA IN . LDA B,I GET THE CONTENTS OF EQT5. AND EQMSK ISOLATE THE EQUIPMENT TYPE CODE. CPA TYP65 IS THIS LU LINKED TO DVR65? RSS YES, CONTINUE PROCESSING. JMP ABOR4 NO. * ERROR: "DS04" - INVALID LU! * ADB D8 COMPUTE ADDRESS OF EQT13. GETX LDB B,I GET A DIRECT RBL,CLE,SLB,ERB ADDRESS FOR THE JMP *-2 EQT EXTENSION. SPC 1 * LOCATE RESOURCE NUMBERS FOR THE SPECIFIED LOGICAL UNIT. SPC 1 LDA B,I GET THE LINE-CONTROL RESOURCE NUMBER, STA LRN AND SAVE IT. INB INDEX TO THE PRN ENTRY. LDA B,I GET THE RESOURCE NUMBER, STA PRN AND SAVE IT. LDA LCGW INITIALIZE 'PRNCW' TO ACCOMMODATE STA PRNCW CORE-RESIDENT COPIES OF . * LDA #RTRY GET NEGATIVE NUMBER OF RETRIES. STA RTCNT SAVE FOR BUSY-RETRY PROCESSING. * SKP * DETERMINE WHETHER IS USING THE LINE BY DOING A LOCK CLEAR ON THE * RESOURCE NUMBER. IF HAS THE LINE, SLAVE ACCESS IS * REJECTED: "DS02"; MASTER ACCESS MUST WAIT FOR TO COMPLETE. SPC 1 PWAIT LDA PRNCW GET THE 'PRN' CONTROL WORD. XOR SIGN ADD OR DELETE THE NO-WAIT BIT(#15). STA PRNCW RESTORE THE CONTROL WORD. * JSB RNRQ GO TO CHECK PRN AVAILABILITY. DEF *+4 DEF PRNCW SPECIFY GLOBAL LOCK/CLEAR/NO-ABORT. DEF PRN ADDRESS OF RN.  DEF TEMP RETURN STATUS. JMP ABORX GO PROCESS RN ERROR, IF ANY. * LDA TEMP GET THE STATUS OF 'PRN'. CPA D1 IF IT IS CLEAR, JMP REQCK THEN CONTINUE THE PROCESSING. CPA D2 IF IT WAS LOCALLY LOCKED TO THE CALLER, JMP ABOR2 THIS IS --ACCESS DENIED! * LDA CONWD,I GET THE CONTROL WORD. AND B1000 ISOLATE THE MASTER-REQUEST BIT(#9). SZA IF THIS IS A MASTER-REQUEST, JMP PWAIT GO TO AWAIT COMPLETION; JMP ABOR2 ELSE, ABORT SLAVE REQUESTS: "DS02"! SPC 1 * EXAMINE SPECIFIED DRIVER MODE. ONLY DATA & CONTROL REQUESTS WILL BE * ALLOWED TO PROCEED TO THE DRIVER WITHOUT WAITING FOR LRN AVAILABILITY. SPC 1 REQCK LDA RCODE GET THE REQUEST CODE WORD AND B77 ISOLATE THE REQUEST CODE. CPA D3 IF IT IS A CONTROL REQUEST, JMP LRNLK DO NOT WAIT FOR LRN AVAILABILITY. LDA CONWD,I GET THE CONTROL WORD. AND B700 ISOLATE THE DRIVER MODE OF OPERATION. CPA B300 IF THIS IS A DATA-ONLY REQUEST, RSS PROCEED TO MAKE THE DRIVER CALL; ELSE, JMP LOCKW GO TO CHECK AVAILABILITY OF LRN. SPC 1 * ATTEMPT TO LOCK THE LINE RN, BUT DO NOT WAIT, IF ALREADY LOCKED. * THE DRIVER WILL DETERMINE VALIDITY OF ACCESS FOR THIS REQUEST. * WE'LL BE FORCED TO WAIT AT A LATER TIME, IF DVR65 IS BUSY. SPC 1 LRNLK JSB RNRQ ATEMPT TO LOCK LRN--DON'T WAIT. DEF *+4 DEF LGNW SPECIFY GLOBAL LOCK/NO WAIT/NO ABORT. DEF LRN ADDRESS OF LINE RN. DEF TEMP RETURN STATUS (NOT USED). JMP ABORX PROCESS RN ERROR, IF ANY. * SKP SPC 1 * CALL THE DRIVER TO PERFORM THE REQUEST. SPC 1 CALLD JSB EXEC CALL RTE TO DO THE I/O. DEF *+7 RETURN ADDRESS:ERROR; ELSE, *+8:NORMAL. DEF RCODE REQUEST CODE ADDRESS. DEF CONWD,I CONTROL WOVRD. DEF RQBUF,I REQUEST OR DATA BUFFER ADDRESS. DEF RQLEN,I REQUEST OR DATA BUFFER LENGTH. DEF DABUF,I DATA BUFFER ADDRESS OR DUMMY PARAMETER. DEF DALEN,I DATA BUFFER LENGTH OR DUMMY PARAMETER. JMP ABORX GO TO PROCESS OP-SYSTEM ERROR. STA TEMP SAVE : EQT5 STATUS FOR CALLER. STB TEMP+1 SAVE : EQT12 STATUS FOR CALLER. SPC 1 * EXAMINE THE RETURN-STATUS FROM THE DRIVER. SPC 1 SLA,RAR WAS THE TRANSFER SUCCESSFUL? JMP NEXIT YES, GO PREPARE FOR NORMAL EXIT. SWP EXCHANGE & FOR BOOLEAN OPERATIONS. AND B40 ISOLATE EQT12 BIT#5 (REMOTE BUSY). CLE,ERB MOVE BUSY-REJECT BIT(EQT5 #1) TO . SEZ,SZA,RSS BUSY-REJECT/REMOTE-BUSY OR BOTH? JMP ABOR1 NEITHER--DRIVER ERROR! SEZ,RSS WAS THE REMOTE SYSTEM BUSY? JMP DELAY YES. GO TO WAIT AWHILE & RETRY. SZA NO. SIMULTANEOUS REQUESTS DETECTED? JMP CALLD YES. LET DVR65 SOLVE THE PROBLEM. SPC 1 * BUSY-REJECT: THE DRIVER DETERMINED THAT A NEW REQUEST COULD NOT BE * PROCESSED AT THIS TIME. THE USER MUST WAIT FOR AVAILABILITY OF THE LRN. SPC 1 LOCKW JSB RNRQ LOCK THE LRN--WAIT FOR AVAILABILITY. DEF *+4 DEF LGW SPECIFY GLOBAL LOCK/WITH WAIT/NO ABORT. DEF LRN ADDRESS OF LRN. DEF TEMP RETURN STATUS (NOT USED). JMP ABORX PROCESS RN ERROR CONDITION. JMP CALLD RN LOCKED. GO CALL THE DRIVER. SPC 1 * PREPARE FOR NORMAL RETURN TO THE USER SPC 1 NEXIT ISZ D65CL SET EXIT-POINTER FOR . DLD TEMP RETURN WITH & FROM DVR65. JMP D65CL,I RETURN TO THE USER. SPC 1 * ERROR PROCESSING SECTION. SPC 1 ABOR8 LDB "08" REMOTE-BUSY/RETRIES EXHAUSTED: "DS08". JMP GETDS GO TO GET "DS" PORTION OF ERROR CODE. ABOR4 LDB "04" INVALID LOGICAL UNIT ERROR: "DS0E$"4". JMP GETDS GO TO GET FIRST HALF OF MESSAGE. ABOR2 LDB "02" SLAVE-TRANSACTION INTERRUPTED: "DS02". RSS GO TO GET FIRST HALF OF MESSAGE. ABOR1 LDB "01" ABORTIVE DRIVER ERROR: "DS01". GETDS LDA "DS" GET FIRST HALF OF ERROR MESSAGE. ABORX JMP D65CL,I RETURN TO THE USER. SKP * WAIT--IN ORDER TO ALLOW TIME FOR THE REMOTE TO CLEAR TABLE SPACE. SPC 1 DELAY JSB EXEC GO TO THE RTE 'EXEC' DEF *+6 IN ORDER TO DEF D12 PLACE THIS PROGRAM DEF ZERO IN THE TIME LIST DEF D1 FOR A 1-SECOND DELAY, DEF ZERO WHILE WAITING FOR DEF DM100 TABLE SPACE AT REMOTE SYSTEM. * ISZ RTCNT MAXIMUM NO. OF RETRIES BEEN EXECUTED? JMP CALLD NO. GO TO TRY AGAIN. JMP ABOR8 YES. INFORM CALLER OF THE PROBLEM. SPC 2 * POINTER AND CONSTANT STORAGE AREA. SPC 1 B EQU 1 B40 OCT 40 B77 OCT 77 B300 OCT 300 B700 OCT 700 B1000 OCT 1000 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D8 DEC 8 D12 DEC 12 DM100 DEC -100 EQMSK OCT 37400 EQT5 EQUIPMENT TYPE CODE MASK. LCGW OCT 40006 GLOBAL RN LOCK/CLEAR/WAIT/NO ABORT. LGNW OCT 140002 GLOBAL RN LOCK/NO WAIT/NO ABORT. LGW OCT 40002 GLOBAL RN LOCK/WAIT/NO ABORT. LRN NOP LINE CONTROL RESOURCE NUMBER. M1 OCT -1 PRN NOP RESOURCE NUMBER. PRNCW NOP RN-CHECK CONTROL WORD. RTCNT NOP BUSY-REJECT RETRY COUNTER. SIGN OCT 100000 TEMP OCT 0,0 TEMPORARY STORAGE. TYP65 OCT 32400 EQUIPMENT TYPE CODE 65 FOR DVR65. ZERO OCT 0 "01" ASC 1,01 "02" ASC 1,02 "04" ASC 1,04 "08" ASC 1,08 "DS" ASC 1,DS SPC 1 END bv$   91700-18151 1603 S 0122 DS1/B CCE MODULE: DRTEQ              H0101 KASMB,R,L,Z,C HED DRT/EQT ADDRESS ROUTINE * (C) HEWLETT-PACKARD CO. 1976 * IFN NAM DRTEQ,7 91700-16151 REV.A 760117 XIF IFZ NAM DRTEQ,14 91700-16151 REV.A 760117 XIF ENT DRTEQ IFN EXT .ENTR XIF IFZ EXT .ENTP,$LIBR,$LIBX XIF * NAME: DRTEQ * SOURCE: 91700-18151 * RELOC: 91700-16151 * PGMR: C.C.H. [ 01/17/76 ] * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * DRTEQ ACCEPTS A USER-SUPPLIED LOGICAL UNIT NUMBER, AND RETURNS * TO THE CALLER, BOTH THE CONTENTS OF THE DEVICE REFERENCE TABLE * ENTRY FOR THAT LOGICAL UNIT, AND THE ADDRESS OF THE FIRST WORD * OF THE EQT ENTRY WHICH IS LINKED TO THE SPECIFIED LOGICAL UNIT. * * DRTEQ CALLING SEQUENCE: * * JSB DRTEQ * DEF *+2 [ OR *+2+N WHERE N= NUMBER OF OPTIONAL PARAMETERS <=2 ] * DEF LU ADDRESS OF LOGICAL UNIT NO. IN QUESTION. * [DEF DRTEN] [OPTIONAL ADDRESS FOR RETURN OF DRT ENTRY CONTENTS.] * [DEF EQTAD] [OPTIONAL ADDRESS FOR RETURN OF EQT ENTRY LOCATION.] * =DRT ENTRY CONTENTS; =EQT ADDRESS. * * FORTRAN CALLING SEQUENCE: CALL DRTEQ(LU,IDRT,IEQAD) OR REG=DRTEQ(LU) * * NOTE: IN THE SPECIAL CASE OF LOGICAL UNIT NUMBERS WHICH ARE * LINKED TO EQT #0 ("BIT BUCKET"), THE DRT ENTRY RETURNED * TO 'DRTEN' & WILL REFLECT THE ACTUAL CONTENTS; I.E., * ANY SUBCHANNEL OR LU-LOCK BITS WILL BE PASSED TO THE CALLER. * SINCE THERE IS NO EQT ENTRY ASSOCIATED WITH THE LU, * 'EQTAD' & WILL BOTH BE SET =0. * * DRTEQ ERROR PROCESSIN6G: * * INVALID LOGICAL UNIT NUMBERS WILL BE INDICATED BY SETTING -1 * INTO THE RETURNED PARAMETERS-IF ANY, AND INTO BOTH &, UPON * RETURN TO THE CALLER. * * SUP [SUPPRESS EXTENDED LISTING] * LU NOP LOGICAL UNIT ADDRESS. P1 DEF A OPTIONAL DRT ENTRY RETURN ADDRESS. P2 DEF B OPTIONAL EQT ADDRESS RETURN LOCATION. SPC 1 DRTEQ NOP ENTRY/EXIT. IFN JSB .ENTR OBTAIN DIRECT ADDRESSES XIF IFZ JSB $LIBR DEFINE THIS SUBROUTINE NOP TO BE PRIVILEGED. JSB .ENTP PRIVILEGED: GET DIRECT ADDRESSES. XIF DEF LU DEFINE PARAMETER STORAGE AREA. SPC 1 * RE-INITIALIZE CALLING-PARAMETER ADDRESSES TO POINT TO & , * IN ORDER TO ALLOW USER TO CALL WITHOUT RETURN-DATA PARAMETERS. SPC 1 DLD P1 GET PARAMETER ADDRESSES-IF ANY. DST DRT SAVE FOR DATA RETURN. DLD REGDF GET INITIAL PARAMETER DEFINITION. DST P1 RE-INITIALIZE FOR NO PARAMETERS. SPC 1 * VERIFY THAT CALLER HAS REQUESTED DATA FOR A VALID LOGICAL UNIT NO. SPC 1 LDA LU,I GET THE USER SUPPLIED LU NUMBER. AND B77 ISOLATE THE PERTINENT BITS. ADA M1 SUBTRACT ONE, FOR VALIDITY CHECKING. STA B SAVE FOR DRT INDEXING. CMA,CLE IF THE SPECIFIED LU NUMBER ADA LUMAX IS NOT IN THE RANGE: SEZ,RSS 1<=LU<=LUMAX, THEN JMP ERROR THE LU IS INVALID! SPC 1 * RETRIEVE THE CONTENTS OF THE DEVICE REFERENCE TABLE ENTRY. SPC 1 ADB DRTA FIND THE DEVICE REFERENCE TABLE ENTRY LDA B,I FOR A VALID LOGICAL UNIT NUMBER. STA AREG SAVE THE DRT ENTRY FOR THE CALLER. STA LU SAVE IT FOR RETURN IN . AND B77 ISOLATE THE EQT ORDINAL. CLB PREPARE TO RETURN EQT ADDRESS =0. SZA,RSS IF THEГ ORDINAL IS ZERO, JMP ZERO RETURN WITH EQT ADDRESS =0. SPC 1 * CALCULATE THE ADDRESS OF THE EQUIPMENT TABLE ENTRY LINKED TO THE LU. SPC 1 ADA M1 ORDINAL-1 =RELATIVE EQT ENTRY ORDINAL. MPY D15 RELATIVE ENTRY*WORDS/ENTRY =OFFSET. LDB A GET EQT-ENTRY OFFSET IN . ADB EQTA FORM ABSOLUTE EQT-ENTRY ADDRESS IN . ZERO STB BREG SAVE THE EQT ADDRESS FOR THE CALLER. JMP EXIT GO TO RETURN THE REQUESTED INFORMATION. * SKP * PROCESS INVALID LOGICAL UNIT NUMBER ERRORS. SPC 1 ERROR CCA INVALID LOGICAL UNIT NUMBER. STA AREG RETURN TO USER WITH BOTH PARAMETERS STA BREG AND & SET TO -1. SPC 1 * PASS DATA BACK TO THE CALLER AND THEN RETURN. SPC 1 EXIT LDA AREG = DRT ENTRY OR -1, IF ERROR. STA DRT,I PASS DRT ENTRY TO CALLER, IF REQUESTED. LDB BREG = EQT ADDRESS OR -1, IF ERROR. STB EQTAD,I PASS EQT ADDRESS TO CALLER, IF REQUESTED. IFN JMP DRTEQ,I RETURN:=DRT OR -1;=EQT ADD. OR -1. XIF IFZ JSB $LIBX RETURN TO CALLER DEF DRTEQ VIA PRIVILEGED PROCESSOR. XIF SPC 1 * CONSTANTS, POINTERS, AND STORAGE. SPC 1 A EQU 0 B EQU 1 B77 OCT 77 EQTA EQU 1650B ADDRESS OF 1RST WORD OF EQUIPMENT TABLE. DRTA EQU 1652B ADDRESS OF DEVICE REFERENCE TABLE. LUMAX EQU 1653B NUMBER OF VALID DRT ENTRIES. M1 DEC -1 D15 DEC 15 AREG NOP TEMPORARY STORAGE: DRT ENTRY OR ERROR. BREG NOP TEMPORARY STORAGE: EQT ADDR. OR ERROR. DRT NOP DRT RETURN-PARAMETER ADDRESS. EQTAD NOP EQT ADDR. RETURN-PARAMETER ADDRESS. REGDF OCT 0,1 REGISTER ADDRESSES FOR INITIALIZATION. SPC 1 END k  91700-18152 1603 S 0122 DS1/B CCE MODULE: PGMAD              H0101 <ASMB,R,L,C,N HED I.D. SEG. ADDRESS ROUTINE *(C) HEWLETT-PACKARD CO. 1976* IFN NAM PGMAD,7 91700-16152 REV.A 760117 EXT .ENTR XIF IFZ NAM PGMAD,14 91700-16152 REV.A 760117 EXT .ENTP,$LIBR,$LIBX XIF ENT PGMAD SPC 1 * NAME: PGMAD * SOURCE: 91700-18152 * RELOC: 91700-16152 * PGMR: C.C.H. [ 01/17/76 ] [LIBERALLY EXTRACTED FROM 'SCHED'] SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * PGMAD ACCEPTS A USER-SUPPLIED ADDRESS OF A 3-WORD ARRAY WHICH * CONTAINS THE ASCII CODE FOR THE NAME OF A PARTICULAR PROGRAM. * PGMAD RETURNS THE I.D. SEGMENT ADDRESS OF THE PROGRAM, IT'S STATUS, * AND AN INDICATION OF THE TYPE OF I.D. SEGMENT; I.E.,LONG/SHORT. * * PGMAD CALLING SEQUENCE: * * JSB PGMAD * DEF *+2 [ OR *+2+N WHERE N= NUMBER OF OPTIONAL PARAMETERS ] * DEF NAME ADDRESS OF 3-WORD ASCII PROGRAM NAME ARRAY. * [DEF IDAD] [OPTIONAL ADDRESS FOR RETURN OF I.D. SEG. ADDRESS] * [DEF ISTAT] [OPTIONAL ADDRESS FOR RETURN OF PROGRAM STATUS] * [DEF IDTYP] [OPTIONAL ADDRESS FOR RETURN OF I.D.SEGMENT TYPE] * = I.D. SEGMENT ADDRESS. * = PROGRAM STATUS. * = 0: STANDARD 28-WORD I.D. SEGMENT. * = 1: SHORT(PROGRAM SEGMENT) 9-WORD I.D. SEGMENT. * * FORTRAN CALLING SEQUENCE: CALL PGMAD(NAME [,IDAD [,ISTAT [,IDTYP]]]) * OR * REG=PGMAD(NAME [,IDAD [,ISTAT [,IDTYP]]]) * * PGMAD ERROR DETECTION: * * A. ADDRESaS OF NAME-ARRAY NOT SUPPLIED. * B. CHARACTER #5 OF USER-SUPPLIED PROGRAM NAME IS NULL. * C. I.D. SEGMENT WITH EQUIVALENT PROGRAM NAME CANNOT BE FOUND. * * -- RETURN TO WITH: * * 1. & AND 'IDAD' & 'ISTAT' ALL SET = 0. * 2. AND 'IDTYP' ARE SET =1. * NAME NOP ADDRESS OF ASCII NAME ARRAY. P1 DEF A ADDRESS FOR RETURN OF PARAMETER #1. P2 DEF B ADDRESS FOR RETURN OF PARAMETER #2. P3 DEF PTEM ADDRESS FOR RETURN OF PARAMETER #3. SUP [SUPPRESS EXTENDED LISTING] PGMAD NOP ENTRY/EXIT: I.D.SEG. ADDRESS ROUTINE. IFN JSB .ENTR OBTAIN DIRECT ADDRESSES. XIF IFZ JSB $LIBR DEFINE THIS SUBROUTINE NOP TO BE PRIVILEGED. JSB .ENTP GET DIRECT ADDRESSES--PRIVILEGED MODE. XIF DEF NAME DEFINE PARAMETER STORAGE AREA. SPC 1 LDA NAME GET THE ADDRESS OF THE ASCII ARRAY. SZA,RSS DID THE CALLER SUPPLY AN ADDRESS? JMP ERREX NO--ERROR! SPC 1 * RESET POINTERS TO ALLOW USER TO CALL WITHOUT RETURN-DATA PARAMETERS. SPC 1 DLD P1 GET PARAMETER ADDRESSES-IF ANY. DST IDAD SAVE FOR DATA RETURN. DLD REGDF GET INITIAL PARAMETER DEFINITION DST P1 AND RE-INITIALIZE FOR NO PARAMETERS. LDA P3 GET 'IDTYP' PARAMETER ADDRESS--IF ANY. LDB DPTEM GET DEF TO DUMMY PARAMETER STORAGE. STA IDTYP SAVE PARAMETER ADDRESS. STB P3 RE-INITIALIZE FOR NO 'IDTYP' PARAMETER. * LDB NAME GET ADDRESS OF NAME ARRAY. STB PTEM SAVE ADDRESS OF 1RST & 2ND CHARACTERS. INB POINT TO 2ND TWO CHARS. OF NAME ARRAY. STB PTEM+1 SAVE ADDRESS OF 3RD & 4TH CHARS. INB POINT TO LAST CHARACTER'S ADDRESS. LDA B,I GET THE WORD FROM THE NAME ARRAY. AND UBYTE ISOLATE CHAR.#5 FROM UPPER BYTE. STA PTEM+2 SAVE CHAR.#5 LOCALLY. SZA FORCE ERROR-RETURN FOR A NULL CHARACTER. LDA KEYWD GET ADDRESS OF KEYWORD TABLE. STA KEYPT SET POINTER TO TOP OF TABLE. PLOOP LDA KEYPT,I GET THE KEYWORD-TABLE ENTRY. CCE,SZA,RSS IF THIS IS THE END-OF-LIST (0), JMP ERREX THEN GO TO RETURN AN ERROR INDICATION. * ADA P12 POINT TO NAME-CHARS.1 & 2 IN I.D. SEG. LDB A,I GET CHARS. 1 & 2 FROM I.D. SEGMENT. CPB PTEM,I IF THEY ARE THE SAME AS USER'S CHARS., INA,RSS THEN PROCEED WITH COMPARISON; ELSE, JMP PNEXT GO TO GET NEXT KEYWORD ENTRY. * LDB A,I GET CHARS. 3 & 4 FROM THE I.D. SEGMENT. CPB PTEM+1,I IF THESE TWO COMPARE TO USER'S CHARS, INA,RSS THEN CONTINUE CHECKING; ELSE, JMP PNEXT GO TO GET NEXT KEYWORD ENTRY. * STA PSTAT SAVE ADDRESS TO GET STATUS--LATER. LDA A,I GET THE LAST CHAR. FROM I.D. SEGMENT. STA B SAVE THE WORD FOR SHORT I.D. TESTING. AND UBYTE ISOLATE CHARACTER #5 FROM I.D. SEG. CPA PTEM+2 IF THIS IS A FINAL MATCH, THEN JMP PFOUN GO TO GATHER DATA FOR THE RETURN. * PNEXT ISZ KEYPT POINT TO NEXT KEYWORD ENTRY. JMP PLOOP GO TO CHECK NEXT KEYWORD ENTRY. * ERREX CLA,CCE,INA SET 'IDTYP' & STA IDTYP,I TO 1--FOR ERROR-RETURN. CLA RETURN WITH & AND 'IDAD' & CLB 'ISTAT' ALL SET TO ZERO! JMP EROUT GO TO RETURN THE BAD NEWS. * PFOUN LSR 4 MOVE THE SHORT I.D. BIT TO . CLE,ERB SET TO: 0-LONG/1-SHORT ID.SEG. TYPE. CLA,SEZ IF STANDARD I.D. SEG.: =0; ELSE, INA SET =1 FOR SHORT I.D. SEGMENT. STA IDTYP,I RETURN THE I.D. SEGMENT TYPE. LDA KEYPT,I = I.D. SEGMENT ADDRESS. ISZ PSTAT POINT TO I.D. SEGMENT STATUS WORD. LDB PSTAT,I = PROGRAM'S CURRENT STATUS. EROUT STA IDAD,I RETURN DATA TO STB ISTAT,I USER'S PARAMETERS--IF ANY. IFN JMP PGMAD,I RETURN TO CALLER. XIF IFZ JSB $LIBX RETURN TO CALLER DEF PGMAD VIA PRIVILEGED PROCESSOR. XIF * A EQU 0 B EQU 1 DPTEM DEF PTEM DUMMY POINTER: PARAMETER #3. IDAD NOP ADDRESS FOR RETURN OF I.D. SEG. ADDRESS. ISTAT NOP ADDRESS FOR RETURN OF PROGRAM STATUS. IDTYP NOP ADDRESS FOR RETURN OF I.D. SEGMENT TYPE. KEYPT NOP POINTER TO CURRENT I.D. SEGMENT ADDRESS. KEYWD EQU 1657B BASE PAGE ADDRESS OF KEYWORD TABLE. P12 DEC 12 OFFSET TO I.D. SEGMENT NAME-ENTRY. PSTAT NOP TEMPORARY STORAGE. PTEM OCT 0,0,0 TEMPORARY STORAGE. REGDF DEF A DUMMY POINTER: PARAMETER #1. DEF B DUMMY POINTER: PARAMETER #2. UBYTE OCT 177400 UPPER-BYTE ISOLATION MASK. SPC 1 END ;  91700-18153 1606 S 0122 DS1/B CCE MODULE: GRPM              H0101 VASMB,R,L,C HED GRPM 91700-16153 REV.A 760206 * (C) HEWLETT-PACKARD CO. 1976 NAM GRPM,1,4 91700-16153 REV.A 760206 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT GRPM EXT EXEC,#GRPM,#MNUM,#LDEF,#QRN,#SRPM,RNRQ EXT #QCLM,#CLWT,#PLOG,$TIME,#RSAX * * * GRPM * SOURCE: 91700-18153 * BINARY: 91700-16153 * PRGMR: BOB SHATZER * DATE: 06 FEB 76 * * * * GRPM IS THE GENERAL REQUEST PRE-PROCESS MODULE FOR DS-1. * IT RECEIVES INCOMING REQUESTS FROM QUEUE AND PERFORMS * VALIDITY CHECKS ON THE STREAM TYPE. IF THE INCOMING * PARMB IS A REPLY, IT IS FORWARDED TO THE STREAM TYPE * WHICH IS SPECIFIED IN PARMB WORD 2. ALL INCOMING SLAVE * REQUESTS ARE FORWARDED TO SRPM FOR DISPATCHING TO THE * PROPER MONITOR. IF THE REQUEST IS FROM SCE/1, THE * INCOMING REQUEST WORD IS PUT IN WORD 2 OF AN INTERN- * ALLY GENERATED STREAM 9 PARMB, AND THE REQUESTING LU * IS INDICATED IN WORD 25. IN THIS WAY, REQUESTS COMING INTO * THE SYSTEM FROM SCE/1 ARE REFORMATTED TO BE TREATED LIKE * ANY OTHER REQUEST. * * * ERRORS: THE FOLLOWING ERROR CONDITIONS CAN OCCUR: * * 1. BAD CLASS NUMBER FOR GRPM - REPORT CATASTROPIC ERROR * 2. ILLEGAL STREAM TYPE - SEND "ILRQ" * 3. SRPM'S CLASS IS BAD - REPORT CATASTROPHIC ERROR * * ALL ERROR PROCESSING IS DONE BY THE DISC-RESIDENT MODULE * 'QCLM'. THE NECESSARY ERROR PROCESSING INFORMATION AND THE * PARMB ARE WRITTEN INTO QCLM'S I/O CLASS. THUS, GRPM IS FREE TO * SERVICE THE NEXT INCOMING REQUEST. * SKP GRPM CLA STA QCB CLEAR QCB WHERE NEEDED STA SHEDR STA ERRAD * JSB EXEC CLASS GET TO WAIT FOR PARMB DEF *+7 DEF D21I DEF #GRPM DEF PARMB DEF D35 DEF LU DEF SCODE JSB ERR1 SLA,RSS CHECK FOR GOOD DRIVER COMPLETION JSB ERR0 NO GOOD - GIVE UP DST REGS SAVE REGISTERS ON RETURN FROM DRIVER LDA SCODE GET SELECT CODE ALF,ALF ROTATE TO UPPER BYTE FOR CHANNEL WORD IOR LU STUFF IN THE LU STA CHANL AND SAVE IT IN THE CHANNEL WORD LDA PARMB GET FIRST WORD OF REQUEST SSA,RSS IS IT AN SCE1 REQUEST? (BIT15 = 1) JMP GRP.1 NO - GO PROCESS AS NORMAL REQUEST * STA PARMB+1 STORE SCE1 REQUEST IN WORD 2 OF PARMB LDA D9 GET PROGL STREAM TYPE STA PARMB AND PUT IT INTO WORD 1 OF THE PARMB * GRP.1 ALF ROTATE 'FRIENDLY' (BIT11) TO BIT 15 SSA IS IT SET? JMP GRP.2 YES - REQUEST IS FROM FRIENDLY SATELLITE DLD $TIME REQUEST IS FROM 'OLD' BCS SATELLITE DST PARMB+33 SET UP BOGUS TIME TAG GRP.2 LDA PARMB GET FIRST WORD OF THE PARMB AND B377 ISOLATE STREAM TYPE STA STREM AND SAVE IT CMA,INA ADA #MNUM SUBTRACT FROM MAX STREAM NUMBER SSA DID IT OVERFLOW? JSB ERR2 YES - ILLEGAL STREAM TYPE LDA PARMB GET STREAM WORD OF PARMB RAL ROTATE BIT 14 TO HI BIT SSA IS IT SET? JMP REPLY YES - THIS IS A REPLY LDA STREM GET STREAM TYPE MPY D3 MULTIPLY BY 3 TO SETUP OFFSET LDB #LDEF,I GET POINTER TO STREAM HEADERS ADB A INDEX BY STREAM TYPE ADB B2 STB SHEDR AND SAVE POINTER ADB B2 BUMP POINTER TO MONITOR'S ID SEG ADDR LDA B,I GET ID SEG ADDRESS SZA,RSS IS IDSEG ADDR ZERO? JSB ERR2 YES - NO SUCH MONITOR * JSB RNRQ CHECK FOR #QRN BEING SET DEF *+4 DEF GLCN GLOBAL LOCK-CLEAR NO WAIT DEF #QRN DEF STREM JSB ERR0 GET NEXT REQUEST IF ERROR LDA STREM GET RETURNED STATUS CPA D1 IS RN CLEAR? RSS YES - GO ON JSB ERR3 NO - REJECT REQUEST JSB #CLWT WRITE PARMB TO SRPM'S CLASS DEF *+6 DEF #SRPM DEF QCB DEF D42 DEF LU DEF SCODE JSB ERR1 ERROR ON CLASS WRITE/READ JMP GRPM GO BACK TO GET * REPLY JSB #RSAX SEARCH FOR AN EXISTING CLASS IN RES DEF *+4 TO MAKE SURE REPLY ISN'T WRITTEN DEF D5 A GENERAL RTE USER WHO IS HUNG ON A DEF D1 NON-NETWORK ASSIGNED CLASS. DEF PARMB+1 SZA DOES CLASS EXIST? JSB ERR4 NO - GO BACK TO GET NEXT REQUEST JSB #CLWT WRITE TO MASTER REQUESTOR'S CLASS DEF *+6 DEF PARMB+1 DEF PARMB DEF D35 DEF ZERO DEF ZERO JSB ERR4 IGNORE THE ERROR - GO BACK TO GET * LDA #PLOG GET PARMB LOGGING FLAG SZA,RSS IS IT SET? JMP GRPM NO - GO AND GET NEXT REQUEST JSB #CLWT FLAG IS SET - WRITE QCB AND PARMB DEF *+6 TO THE PLOG MONITOR DEF #PLOG DEF QCB DEF D42 DEF XEQT DEF ZERO NOP IGNORE THE ERROR JMP GRPM GO BACK TO GET ANOTHER REQUEST * SKP * * ERROR PROCESSING SECTION * ERR0 NOP HERE TO GIVE UP AND TERMINATE DST REGS SAVE REGISTERS IN QCB CLA SET QCB CONTROL WORD TO ZERO LDB ERR0 PICK UP ORIGINATION ADDRESS JMP ERRN AND GO TO GENERAL ERROR PROCESSOR * ERR1 NOP HERE TO REPORT CATASTROPHIC ERROR DST REGS LDA BIT15 LDB ERR1 JMP ERRN * ERR2 NOP HERE TO SEND 'ILRQ' TO REMOTE DST REGS LDA B5 LDB ERR2 JMP ERRN * ERR3 NOP HERE TO SEND BUSY REPLY DST REGS LDA B2 LDB ERR3 JMP ERRN * ERR4 NOP SEND 'STOP' IF DATA PENDING. STA REGS SAVE FIRST HALF OF ERROR CODE. LDA REGS+1 GET DRIVER STATUS (EQT12). STB REGS+1 SAVE REMAINDER OF ERROR CODE FOR . ALF,ALF POSITION DATA PENDING BIT(#8) TO LSB. AND D1 ISOLATE. IF DP SET, SENDS 'STOP'. LDB ERR4 GET ORIGINATION ADDRESS. * ERRN STA QCB SAVE CONTROL WORD ADB M1 SUBTRACT 1 FROM ERROR ADDRESS STB ERRAD AND SAVE IT IN THE QCB JSB #CLWT WRITE QCB+PARMB TO QCLM DEF *+6 DEF #QCLM DEF QCB DEF D42 DEF XEQT DEF ZERO NOP ERROR RETURN JMP GRPM GO BACK TO GET * SKP * * CONSTANTS AND STORAGE * A EQU 0 B EQU 1 XEQT EQU 1717B D21I ABS 100000B+21 ZERO OCT 0 D9 DEC 9 D35 DEC 35 B377 OCT 377 STREM NOP LU NOP SCODE NOP B5 OCT 5 B2 OCT 2 BIT15 OCT 100000 M1 DEC -1 D1 DEC 1 D5 DEC 5 D3 DEC 3 GLCN OCT 140006 QCB NOP QCB - DO NOT REORDER THESE 8 LINES SHEDR NOP STREAM LIST HEADER ADDRESS NOP DUMMY PARAMETER CHANL NOP REQUESTING LU AND SELECT CODE ERRAD NOP ERROR ORIGINATION ADDRESS REGS NOP REGISTER SAVE AREA NOP PARMB BSS 35 PARMB AREA D42 DEC 42 * END GRPM _O  91700-18154 1606 S 0122 DS1/B CCE MODULE: SRPM              H0101 VASMB,R,L,C HED SRPM 91700-16154 REV.A 760206 * (C) HEWLETT-PACKARD CO. 1976 NAM SRPM,17,4 91700-16154 REV.A 760206 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT SRPM EXT EXEC,#SRPM,RNRQ,#TBRN,#RSAX EXT #QCLM,#CLWT,#PLOG,#SVTO,#CDCB SUP * * * SRPM * SOURCE: 91700-18154 * BINARY: 91700-16154 * PRGMR: BOB SHATZER * DATE: 06 FEB 76 * * * * SRPM IS THE SLAVE REQUEST PRE-PROCESS MODULE FOR DS-1. * IT RECEIVES BOTH PARMB'S AND QCB HEADERS FROM GRPM AND * BUILDS A SLAVE STREAM LIST ENTRY IN RES FOR THE REQUEST. * IT THEN PRE-PROCESSES THE REQUEST AS REQUIRED BY THE * PARTICULAR DESTINATION MONITOR AND THEN SENDS THE REQUEST * TO THAT MONITOR VIA ITS I/O CLASS WITH A CLASS WRITE/ * READ. * * * ERRORS: THE FOLLOWING ERROR CONDITIONS CAN OCCUR: * * 1. SRPM'S CLASS IS BAD - REPORT CATASTROPHIC ERROR * 2. THE RES TABLE MGT RN (#TBRN) IS BAD - DITTO * 3. CANNOT BUILD A TABLE ENTRY IN RES - IGNORE REQUEST * 4. MONITOR'S CLASS IS BAD - THROW THE REQUEST AWAY * * ALL ERROR PROCESSING IS DONE BY THE DISC-RESIDENT MODULE * 'QCLM'. THE NECESSARY ERROR PROCESSING INFORMATION AND * THE PARMB IS WRITTEN INTO QCLM'S I/O CLASS. THUS, SRPM IS * FREE TO SERVICE THE NEXT INCOMING REQUEST. * SKP SRPM JSB EXEC CLASS GET TO WAIT FOR PARMB DEF *+7 DEF D21I DEF #SRPM DEF QCB DEF D42 DEF LU DEF SCODE JSB ERR1 * LDA PARMB GET FIRST WORD OF REQUEST AND B377 ISOLATE STREAM TYPE STA STRE]M AND SAVE IT ALF,ALF ROTATE TO UPPER BYTE USE WITH #RSAX ADA D2 SET IN LOWER BYTE TO INDICATE SLAVE LISTS STA ST.LS SAVE FOR #RSAX CONTROL WORD * LDA SCODE GET SELECT CODE ALF,ALF MOVE TO UPPER BYTE IOR #SVTO STUFF IN SLAVE REQUEST TIMEOUT LDB REGS+1 GET EQT12 FROM DRIVER RETURN BLF,BLF ROTATE DATA PENDING BIT TO BIT 0 SLB IS THERE A DATA PENDING CONDITION? IOR BIT14 YES - SET BIT 14 IN RSAX ENTRY WORD STA ENTRY AND STORE IN BUFFER FOR #RSAX DLD PARMB+33 GET TIME TAG FROM PARMB DST ENTRY+1 AND PUT INTO RSAX ENTRY * JSB RNRQ GLOBAL LOCK #RSAX TABLE RN DEF *+4 DEF GLW DEF #TBRN DEF MCLSN JSB ERR1 * JSB #RSAX CALL #RSAX TO BUILD LIST ENTRY DEF *+5 FOR THIS REQUEST DEF D2 DEF ST.LS DEF ZERO DEF ENTRY SSA ERROR? JSB ERR0 YES - DROP THE REQUEST AND GET THE NEXT * LDA LU GET THE SPECIFIED LU STA PARMB+24 STUFF IT INTO THE PARMB * LDA STREM GET STREAM TYPE CPA D6 IS THIS A STREAM 6 REQUEST? (RFA) RSS YES. SKIP TO GET CDCB ADDRESS. JMP GETCL NO. GO TO GET MONITOR'S CLASS. LDB CDCBA GET THE CDCB ADDRESS. RSS OBTAIN LDB B,I A RBL,CLE,SLB,ERB DIRECT JMP *-2 ADDRESS STB PARMB+22 STUFF CDCB ADDRESS INTO PARMB * GETCL LDB SHEDR GET STREAM HEADER ADDRESS INB BUMP POINTER TO MONITOR'S CLASS NUMBER LDA B,I GET CLASS NUMBER STA MCLSN SAVE MONITOR'S CLASS NUMBER * JSB #CLWT WRITE PARMB TO MONITOR'S CLASS DEF *+6 DEF MCLSN DEF PARMB DEF D35 DEF ZERO DEF ZERO JSB ERR2 ERROR RETURN * LDA #PLOG GET PARMB LOGGING FLAG SZA,RSS vZ IS IT SET? JMP SRPM NO - GO BACK TO GET ANOTHER REQUEST JSB #CLWT WRITE QCB AND PARMB TO LOGGER DEF *+6 DEF #PLOG DEF QCB DEF D42 DEF XEQT DEF ZERO JSB ERR0 IGNORE ERROR RETURN JMP SRPM ALL DONE - GET THE NEXT REQUEST * SKP * * ERROR PROCESSING SECTION * ERR0 NOP HERE TO GIVE UP AND TERMINATE DST REGS SAVE REGISTERS IN QCB CLA SET QCB CONTROL WORD TO ZERO LDB ERR0 PICK UP ORIGINATION ADDRESS JMP ERRN AND GO TO GENERAL ERROR PROCESSOR * ERR1 NOP HERE TO REPORT CATASTROPHIC ERROR DST REGS LDA BIT15 LDB ERR1 JMP ERRN * ERR2 NOP HERE TO DEALLOCATE LIST ENTRY DST REGS LDA B40 LDB ERR2 JMP ERRN * ERRN STA QCB SAVE CONTROL WORD ADB M1 SUBTRACT 1 FROM ERROR ADDRESS STB ERRAD AND SAVE IT IN THE QCB JSB #CLWT WRITE QCB+PARMB TO QCLM DEF *+6 DEF #QCLM DEF QCB DEF D42 DEF XEQT DEF ZERO NOP ERROR RETURN JMP SRPM GO GET ANOTHER REQUEST * SKP * * CONSTANTS AND STORAGE * B EQU 1 XEQT EQU 1717B BIT15 OCT 100000 D21I ABS 100000B+21 D35 DEC 35 D42 DEC 42 B377 OCT 377 STREM NOP ZERO OCT 0 D2 DEC 2 GLW OCT 40002 LU NOP SCODE NOP M1 DEC -1 CDCBA DEF #CDCB BIT14 OCT 40000 ENTRY OCT 0,0,0 MCLSN NOP D6 DEC 6 QCB NOP QCB - DO NOT REORDER THESE 8 LINES SHEDR NOP STREAM LIST HEADER ADDRESS ST.LS NOP #RSAX STREAM/LIST CONTROL WORD CHANL NOP REQUESTING LU AND SELECT CODE ERRAD NOP ERROR ORIGINATION ADDRESS REGS NOP REGISTER STORAGE AREA NOP PARMB BSS 35 PARMB AREA B40 OCT 40 * END SRPM   91700-18155 1550 S 0122 DS1/B CCE MODULE: #CDCB              H0101 6ASMB,L,R HED #CDCB 91700-16155 REV A 751209 * (C) HEWLETT-PACKARD CO. 1976 NAM #CDCB,30 91700-16155 REV A 751209 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT #CDCB * * * #CDCB * SOURCE: 91700-18155 * BINARY: 91700-16155 * PRGMR: BOB SHATZER * DATE: 09 DEC 75 * * * * #CDCB IS THE CURRENT DCB BUFFER WHICH IS USED TO PASS THE CURRENT * DCB BETWEEN RFAM AND RFAEX. * * #CDCB REP 153 NOP * END ;  91700-18156 1552 S 0122 DS1/B CCE MODULE: #CLWT              H0101 LASMB,R,L,C HED #CLWT 91700-16156 REV A 751226 * (C) HEWLETT-PACKARD CO. 1976 NAM #CLWT,6 91700-16156 REV.A 751226 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT #CLWT EXT $LIBR,$LIBX,.ENTP,EXEC * * * #CLWT * SOURCE: 91700-18156 * BINARY: 91700-16156 * PRGMR: BOB SHATZER * DATE: 26 SEP 75 * * * #CLWT IS A RE-ENTRANT SUBROUTINE WHICH IS USED BY QUEUE, * GRPM, AND SRPM TO HANDLE CLASS I/O WRITE-READS FROM ONE TO * ANOTHER AND TO WRITE CONTROL AND CLEAN-UP INFORMATION TO * QCUM, THE QUEUEING CLEAN-UP MODULE. * * * CALLING SEQUENCE: * * JSB #CLWT * DEF *+6 * DEF CLSNO USER-SUPPLIED CLASS NUMBER * DEF BUFAD USER-SUPPLIED BUFFER ADDR * DEF BUFLN USER-SUPPLIED BUFFER LEN * DEF PARM1 CLASS-CALL OR DUMMY PARAMETER * DEF PARM2 CLASS-CALL OR DUMMY PARAMETER * * * * TDB NOP TEMPORY DATA BLOCK HEADER DEC 8 TDB LENGTH NOP CLSNO NOP USER-SUPPLIED CLASS NUMBER BUFAD NOP USER-SUPPLIED BUFFER ADDRESS BUFLN NOP USER-SUPPLIED BUFFER LENGTH PARM1 NOP OPTIONAL CLASS-CALL PARAMETER PARM2 NOP OPTIONAL CLASS-CALL PARAMETER * #CLWT NOP PRIMARY ENTRY POINT JSB $LIBR DEF TDB JSB .ENTP CALL .ENTP TO RETREIVE PARAMETERS DEF CLSNO STA TDB+2 SAVE RETURN ADDRESS * JSB EXEC PERFORM p  CLASS WRITE/READ DEF *+8 DEF D20I DEF ZERO DEF BUFAD,I DEF BUFLN,I DEF PARM1,I DEF PARM2,I DEF CLSNO,I CLA,RSS SET =0 IF ERROR RETURN CLA,INA SET =1 FOR NO ERROR STA RTRN AND USE TO SET RETURN POINT * JSB $LIBX RETURN TO CALLER DEF TDB RTRN NOP * ZERO OCT 0 D20I ABS 100000B+20 * END J   91700-18157 1601 S 0122 DS1/B CCE MODULE: QCLM              H0101 BASMB,L,R,C HED QCLM 91700-16157 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM QCLM,2,28 91700-16157 REV A 760101 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 2 **************************************************************** * * QCLM COMMUNICATION MANAGMENT CLEANING MODULE * * SOURCE PART # 91700-18157 REV A * * REL PART # 91700-16157 REV A * * WRITTEN BY JEAN-PIERRE BAUDOUIN * * DATE WRITTEN DEC 1975 * * MODIFIED BY BOB SHATZER * * DATE MODIFIED 01 JAN 76 * *************************************************************** SPC 2 EXT EXEC,#QCLM EXT D65CL,D65SV,#RSAX EXT $LIBR,$LIBX,$CVT3,#PLOG,#QLOG IFZ EXT DBUG XIF SUP SPC 3 QCLM LDA B,I GET 1ST PARAMETER IFZ CPA D99 DO WE WANT DBUG ? RSS YES JMP START NO JSB DBUG YES, CALL IT DEF *+1 * JSB EXEC TERMINATE AND SAVE RESOURCES DEF *+4 DEF D6 DEF D0 DEF D1 XIF SPC 3 * * FIRST WE CLEAN THE BUFFER * START LDA BUFI SET THE POINTER TO 1ST WORD LDB DM42 SET THE COUNTER STB CNTR1 CLB STB A,I CLEAR A WORD INA STEP TO NEXT WORD ISZ CNTR1 DONE ? JMP *-3 NO, CONTINUE * JSB EXEC YES, HANG ON OUR CLASS DEF *+6 DEF D21I CLASS GET-NO ABORT DEF #QCLM OUR CLASS IS IN RES BUFI DEF IBUF BUFFER ADDRESS DEF D42 MAX BUFFER LENGTH (QCB+PARMB) / DEF XEQT ADDRESS OF ID SEG OF CALLER JMP QUIT ERROR RETURN * LDA #PLOG GET GENERAL PARMB LOGGING FLAG STA LOGCL SAVE IT AS PLOG CLASS JUST IN CASE SZA IS LOGGING TO BE DONE? JMP LOGIT YES - WRITE QCB AND PARMB TO PLOG LDA #QLOG GET QUEUEING LOG FLAG STA LOGCL SAVE THAT JUST IN CASE SZA,RSS IS SPECIAL LOGGING DESIRED? JMP NOLOG NO - DON'T LOG ANYTHING * LOGIT JSB EXEC FOR EITHER CASE, WRITE TO PLOG DEF *+8 DEF D20I DEF D0 DEF IBUF DEF D42 DEF XEQT DEF "QC" DEF LOGCL NOP IGNORE THE ERROR RETURN * NOLOG LDA IBUF GET QCB CONTROL WORD SZA,RSS ARE ANY BITS SET? JMP START NO - GET NEXT COMPLAINT SSA,RSS IS BIT 15 SET? (CATASTROPHIC ERROR) JMP TEST NO - GO TEST OTHER BITS * LDB XEQT WE WILL TRANSFER THE NAME OF ADB D12 THE PROGRAM WHICH CALLED US LDA B,I INTO AN INTERNAL BUFFER STA ORIGN FOR OUR MESSAGE. INB STEP TO SECOND WORD LDA B,I GET IT STA ORIGN+1 SAVE INB STEP TO LAST LDA B,I GET IT AND B174K SAVE THE UPPER BYTE IOR B72 MERGE A ":" FOR THE MESSAGE STA ORIGN+2 SAVE * * WE NOW CODE THE QCB IN ASCII (ALL OF IT IS OCTAL) * AND WE FORMAT IT IN A SECOND LINE OF MESSAGE * THIS IS TO HELP THE RECOVERY * LDA W1A GET THE ADDRESS OF THE 1ST WORD STA PNTR1 USE AS DESTINATION POINTER LDA BUFI GET ADDRESS OF QCB STA PNTR2 USE AS ORIGIN POINTER LDA DM7 SET A COUNTER STA CNTR1 * OUTLP CLE SET FOR OCTAL CONVERSION LDA PNTR2,I GET A WORD JSB $LIBR FENCE OFF NOP JSB $CVT3 CODE LDB A,I MOVE THE ASCII INTO ITS STB PNTR1,I <BUFFER. INA STEP TO SECOND WORD ISZ PNTR1 STEP THE DESTINATION POINTER DLD A,I GET LAST 2 WORDS DST PNTR1,I SAVE JSB $LIBX FENCE BACK ON DEF *+1 DEF *+1 LDA PNTR1 GET THE DESTINATION POINTER ADA D4 PUSH IT STA PNTR1 AND RESTORE IT ISZ PNTR2 STEP TO NEXT QCB WORD ISZ CNTR1 ALL DONE ? JMP OUTLP NO, CONTINUE * JSB EXEC OUTPUT THE CATASTROPHIC ERROR MESSAGE DEF *+5 DEF D2 WRITE DEF D1 CRT DEF MSG MESSAGE ADDRESS DEF MSGL MESSAGE LENGTH * JMP START GO, GET NEXT COMPLAINT SPC 3 * * IN THIS AREA WE TREAT THE NON CATASTROPHIC ERRORS * TEST LDA TBTOP GET ADDRESS OF TABLE TOP STA TPNTR SET TABLE POINTER LDA DM16 SET UP COUNTER TO CHECK LOW 14 BITS STA BTCNT OF CONTROL WORD * LOOP2 LDA IBUF GET THE CODE WORD LOOP1 ISZ TPNTR STEP TO NEXT ROUTINE ISZ BTCNT ALL BITS CHECKED? RSS NO JMP START YES - GO BACK TO GET SLA,RAR DO WE WANT IT ? RSS YES JMP LOOP1 NO * LDB TPNTR GET THE ADDRESS OF THE ROUTINE SZB,RSS IS THERE A ROUTINE ? JMP LOOP1 NO, FORGET IT INB,SZB,RSS END OF TABLE ? JMP START YES, GET NEXT COMPLAINT * STA IBUF SAVE THE CODE WORD LDB TPNTR,I GET THE ROUTINE POINTER JMP B,I GO EXECUTE THE ROUTINE SPC 3 HED QCLM: ROUTINES * (C) HEWLETT-PACKARD CO. 1976 * * HERE FOR "SEND STOP" * BIT0 CLB JSB CNTRL SEND CONTROL REQUEST JMP LOOP2 RETURN * * HERE FOR "SEND REMOTE BUSY" * BIT1 LDA PARMB GET 1ST WORD IOR BZYBT INSERT THE BUSY BIT STA PARMB REPLACE THE WORD JSB SEND SHIP THE PARMB JMP LOOP2 RETURN * * HERE FORWY "SEND ILRQ" * BIT2 LDA ILRQ SET STA PARMB+2 "ILRQ" LDA ILRQ+1 INTO THE STA PARMB+3 PARMB JSB SEND SHIP IT JMP LOOP2 RETURN * * HERE FOR "CLEAR DRIVER" * BIT3 LDB B200 SET FOR CLEAR JSB CNTRL SEND CONTROL REQUEST JMP LOOP2 RETURN * * HERE FOR "DOWN THE EQT" * BIT4 LDB B400 SET FOR DOWN EQT JSB CNTRL SEND CONTROL REQUEST JMP LOOP2 RETURN * * HERE FOR "DEALLOCATE ENTRY" * BIT5 JSB #RSAX CALL THE ENTRY MANIPULATOR DEF *+5 DEF D3 DEALLOCATE ONE ENTRY DEF IBUF+2 ST-LS POINTER DEF IBUF+4 SELECT CODE DEF PARMB+33 TIME TAGS NOP ERROR RETURN JMP LOOP2 RETURN SPC 3 * * * THIS ROUTINE WILL DO A CONTROL REQUEST ON THE LINE. * THE MODE FIELD OF THE CONTROL WORD IS PASSED IN B * REGISTER * CNTRL NOP LDA IBUF+3 GET LU WORD AND B77 MAKE SURE THE REST IS CLEAN IOR B INCLUDE THE MODE STA CNWD SAVE AS CONTROL WORD * JSB D65CL DEF *+7 DEF D3 CONTROL REQUEST DEF CNWD DEF DUMMY DEF DUMMY DEF DUMMY DEF DUMMY NOP ERROR RETURN (IGNORED) JMP CNTRL,I RETURN SPC 3 * * THIS ROUTINE WILL SEND A REPLY PARMB * SEND NOP LDA IBUF+3 GET LU AND B77 CLEAN IT STA IBUF+3 SAVE * JSB D65SV DEF *+7 DEF D2 WRITE DEF IBUF+3 REQUEST ONLY DEF PARMB BUFFER ADDRESS DEF D35 LENGTH DEF DUMMY DEF DUMMY * NOP ERROR RETURN ( IGNORED ) JMP SEND,I SPC 3 QUIT JSB EXEC GIVE UP AND TERMINATE DEF *+2 DEF D6 SPC 3 HED QCLM: DECLARATIONS * (C) HEWLETT-PACKARD CO. 1976 A EQU 0 B EQU 1 IBUF BSS 7 THESE 2 BUFFERS M UE S T STAY TOGETHER PARMB BSS 35 ** QCB + PARMB ** BZYBT OCT 20000 BUSY BIT DM42 DEC -42 DM16 DEC -16 BTCNT NOP DM7 DEC -7 D0 DEC 0 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D6 DEC 6 D12 DEC 12 D20I ABS 100000B+20 D35 DEC 35 D42 DEC 42 D99 DEC 99 D21I OCT 100025 B77 OCT 77 B200 OCT 200 B400 OCT 400 B174K OCT 177400 B72 OCT 72 CNWD NOP DUMMY NOP ILRQ ASC 2,ILRQ "QC" ASC 1,QC LOGCL NOP XEQT NOP TPNTR NOP PNTR1 NOP PNTR2 NOP CNTR1 NOP MSG OCT 6412 ASC 1, / ORIGN BSS 3 ASC 15, CATASTROPHIC NETWORK FAILURE OCT 6412 ASC 3, QCB: W1 BSS 3 ASC 2, / BSS 3 ASC 2, / BSS 3 ASC 2, / BSS 3 ASC 2, / BSS 3 ASC 2, / BSS 3 ASC 2, / BSS 3 OCT 6412 MSGL DEC 58 W1A DEF W1 SPC 3 * * TABLE FOR THE ROUTINES * TBTOP DEF * DEF BIT0 DEF BIT1 DEF BIT2 DEF BIT3 DEF BIT4 DEF BIT5 DEC -1 END OF TABLE MARK SPC 3 END QCLM +   91700-18159 1603 S 0122 DS1/B CCE MODULE: SMON              H0101 OASMB,R,L,C HED SMON 91700-16159 REV.A 760111 * (C) HEWLETT PACKARD CO. 1976* NAM SMON,2,29 91700-16159 REV.A 760111 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * IS THE DISTRIBUTED SYSTEMS MONITOR WHICH PROCESSES ALL * INCOMING STREAM-0 REQUESTS. AT PRESENT, ONLY 'GETLU' SATELLITE * REQUESTS ARE CLASSIFIED UNDER THE STREAM-0 CATEGORY. WILL * TRANSFER THE RESPONDING CCE LOGICAL UNIT NO. (AS SUPPLIED BY THE * QUEUEING PROCESSOR) FROM TO , PRIOR TO * TRANSMITTING THE REPLY TO THE SATELLITE. THE REPLY LENGTH WILL * BE 35 WORDS FOR FRIENDLY SATELLITES, AND 3 WORDS FOR ALIENS. * ENT SMON EXT EXEC,D65SV * SMON LDA B,I GET THE -SUPPLIED CLASS NUMBER, STA CLASN AND SAVE IT FOR REQUEST PROCESSING. * GET JSB EXEC GO TO DEF *+5 THE RTE SYSTEM DEF CLS21 TO GET DEF CLASN THE USER'S DEF PBUF PARAMETER DEF PBLN BUFFER. JMP ERROR * REPORT THE SYSTEM-LEVEL ERROR! * * LDA PBUF GET THE STREAM WORD. IOR BIT14 INCLUDE THE REPLY BIT(#14). STA PBUF RESTORE THE STREAM WORD. LDB PBLN GET FRIENDLY REPLY LENGTH (35 WORDS). ALF POSITION FRIENDLY BIT(#11) TO SIGN. SSA,RSS IF THE REQUEST WAS FROM AN ALIEN, LDB THREE PREPARE FOR A SHORT REPLY (3 WORDS). STB RPLEN SAVE THE CONFIGURED REPLY LENGTH. * LDA PBUF+24 GET THE CCE LU NUMBER, STA PBUF+2 AND TRANSFER IT TO 2ND WORD OF REPLY. STA CONWD USE IT ALSO,   FOR CONTROL WORD. * JSB D65SV CALL THE DEF *+7 SLAVE-REPLY DEF IRWW PROCESSOR DEF CONWD TO DEF PBUF TRANSMIT DEF RPLEN THE USER'S DEF ZERO REQUESTED DEF ZERO INFORMATION. JMP ERROR * REPORT THE SYSTEM-LEVEL ERROR! * * JMP GET GO TO AWAIT THE NEXT REQUEST. * ERROR DST SMESG+4 CONFIGURE MESSAGE W/SYSTEM ERROR CODES. JSB EXEC INFORM DEF *+5 THE USER DEF WRITE OF A DEF ONE SYSTEM- DEF SMESG LEVEL DEF SMSIZ PROBLEM. * JSB EXEC TERMINATE, IN ORDER TO ALLOW DEF *+2 TO RESTORE THE DEF SIX NORMAL CONDITIONS FOR . SUP SMESG ASC 14, /SMON: XXXX ERROR-ABORTED! SMSIZ DEC 14 * B EQU 1 IRWW OCT 100002 BIT14 OCT 040000 CONWD NOP CLASN NOP RPLEN NOP CLS21 OCT 100025 ONE OCT 1 THREE OCT 3 SIX OCT 6 WRITE OCT 2 ZERO OCT 0 PBLN DEC 35 PBUF BSS 35 END SMON   91700-18160 1621 S 0122 DS1/B SAT. BOOT SCE/1             H0101 ASMB,A,B,L,C HED SCE/1 91700-16160 * (C) HEWLETT PACKARD CO. 1976 ORG 0 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ***************************************** * NAME: SCE/1 (PROTECTED BBL) * SOURCE TAPE: 91700-18160 REV 1621 * ABS TAPE: 91700-16160 REV 1621 ***************************************** * J.D. RHODES 31 MAY 1974 * MODIFIED BY CHUCK WHELAN 17 MAY 1976 * * THIS PROGRAM CONFIGURES AND INSTALLS THE SCE/1 IN THE * PROTECTED AREA OF CORE FOR 4,8,12,16,24, AND 32K CPU'S. * * OPERATING INSTRUCTIONS: * * 1. LOAD (OR DOWN-LOAD) THIS PROGRAM USING THE BBL, * SCE/1, OR SCE/2. * * 2. SET THE SWITCH REGISTER AS FOLLOWS: * * SWITCHES SET TO * """""""" """""" * * 5-0 SELECT CODE OF SERIAL INTERFACE CARD * * 14-12 0 FOR 4K CPU * 1 FOR 8K CPU * 2 FOR 12K CPU * 3 FOR 16K CPU * 5 FOR 24K CPU * 7 FOR 32K CPU * * 15 SET IF CORELOAD TO COME UP RUNNING * * ALL OTHER SWITCHES MUST BE SET TO 0. * * 3. SET P REGISTER TO 2B (STARTING ADDRESS). * * 4. PRESS 'INTERNAL PRESET', 'EXTERNAL PRESET', 'LOADER * ENABLE', AND 'RUN'. * * 5. HLT 77B (OR CORELOAD GO) INDICATES SUCCESSFUL INSTALLATION. * * HLT 22B INDICATES AN INVALID SWITCH REGISTER SETTING: * - SELECT CODE < 10B * - INVALID CPU SIZE * - EXTRANEOUS SWITCHES * * DURING DOWNLOAD THE FOLLOWING HALT0S MAY OCCUR: * 102011 - ERROR STATUS RETURNED FROM CENTRAL * 102012 - LINE PROTOCOL FAILED * 102013 - BAD LENGTH RECEIVED * A EQU 0 B EQU 1 SUP * SKP ORG 2B * JMP 3,I DEF START HLT 4B POWER FAIL HALT * ORG 100B * START CLC 0,C TURN OFF EVERYTHING LIA 1 AND B77 GET SELECT CODE STA CHN SAVE SELECT CODE AND B7 VALIDATE CPA CHN JMP HLT22 INVALID SELECT CODE LIA 1 AND C77 CHECK FOR EXTRANEOUS SWITCHES SZA JMP HLT22 BAD SWITCH SETTINGS LDB HLT77 LIA 1 SSA SKIP IF HLT 77 AT END LDB JMP2 SETUP TO RUN IMMEDIATELY STB .STRT,I CONFIGURE SCE-1 FINAL INST. AND G70 GET CPU SIZE CPA G40 JMP HLT22 20K NO GOOD CPA G60 JMP HLT22 28K NO GOOD IOR C77 FORM FWBBL STA FWBBL * LDB IOTAB DEF TO I/O TABLES STB T2 CNFG1 LDB T2,I CONFIGURE THE I/O INSTRUCTIONS SZB,RSS JMP MOVE FINISHED. LDA B,I SSA,RSS SIMPLE I/O INSTRUCTION TEST HLT 63B NOT I/O INSTRUCTION XOR CHN AND B77 XOR B,I STA B,I STORE CONFIGURED INSTRUCTION ISZ T2 JMP CNFG1 * MOVE LDB .GO MOVE1 LDA B,I STA FWBBL,I ISZ FWBBL INB CPB .ENDR FINISHED ? JMP HLT77 YES. JMP MOVE1 NO. LOOP. * HLT22 HLT 22B INVALID SWITCH SETTINGS RSS HLT77 HLT 77B INSTALLATION COMPLETED. JMP 3,I RESTART * .STRT DEF GOHLT .GO DEF GO .ENDR DEF ENDR CHN NOP T2 NOP B7 OCT 7 B77 OCT 77 G70 OCT 70000 G40 OCT 40000 G60 OCT 60000 C77 OCT 7700 FWBBL NOP JMP2 JMP 2 * IOTAB DEF *+1 DEF TO I/O TABLE DEF GO DEF GO+1 DEF GO+2 DEF X & DEF OUT+1 DEF GETWD+1 DEF GETWD+3 DEF IN+3 NOP TERMINATES TABLE * HED SCE/1 BBL CODE * (C) HEWLETT PACKARD CO. 1976 ORG 3700B SITUATE FOR TRANSPORTABILITY * SDI EQU 14B SATELLITE COMPUTER CHANNEL. * GO CLC SDI,C LIA SDI,C INITIALIZE CARD LIA SDI * LDA RC OUTPUT 1-WORD PARMB M2 JSB OUT PRECEEDED BY 3 OVERHEAD LDA MIN2 WORDS: RC, LENGTH, MODE. JSB OUT CMA,INA JSB OUT RAR,CLE,RAR SET BIT 15. MIA 1 MERGE CONTENTS OF SW REGISTER. JSB OUT * X OTA SDI RESPOND TO LAST TNW JSB IN READ FIRST WORD CPB RC REQUEST? JMP END YES (EOT). STB RL SAVE LENGTH SSB,RSS CHECK THAT LENGTH NEG. HLT 13B BAD LENGTH RECEIVED JSB IN READ START ADDRESS. STB ADDR SAVE. STB OUT INITIALIZE CHECKSUM OTB 1 FLASH ADDR IN SW REG Y JSB IN READ DATA WORD. MIN2 STB ADDR,I MOVE TO CORE ADDRESS. ISZ ADDR INCR. CORE POINTER. ADB OUT COMPUTE CHECKSUM STB OUT ISZ RL LAST DATA WORD? JMP Y NO. JSB GETWD READ CHECKSUM LDA RLW CPB OUT DOES CHECKSUM COMPARE LDA TNW YES, SEND TNW JMP X CONTINUE * OUT NOP OTA SDI OUTPUT WORD. JSB GETWD GET NEXT WORD CPB TNW TNW? JMP OUT,I YES. CPB RLW RLW? JMP *-5 YES. HLT 12B NEITHER * GETWD NOP SFS SDI NEW WORD RECEIVED? JMP *-1 NO. LIB SDI READ DATA WORD JMP GETWD,I * IN NOP JSB GETWD READ NEXT WORD LDA TNW OTA SDI ASK FOR NEXT WORD (SEND TNW) JMP IN,I RETURN. * END JSB IN THROW AWAY REQ LEN JSB IN THROW <AWAY MODE JSB IN READ PROGL STATUS WORD. SZB ERROR IF NON-ZERO HLT 11B ERROR STATUS FROM CENTRAL, HALT GOHLT NOP CONFIGURED TO "HLT 77" OR "JMP 2" * TNW OCT 170360 TRANSMIT NEXT WORD. RLW OCT 007417 RE-TRANSMIT LAST WORD. RC OCT 170017 REQUEST COMING. ADDR NOP RL NOP * ENDR BSS 0 END   91700-18161 1553 S 0122 DS1/B BOOT XCHANGE: XBBDL              H0101 ASMB,A,B,L,C HED XBBDL 91700-16161 * (C) HEWLETT PACKARD CO. 1976 ORG 0 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ************************************************************** * NAME: XBBDL * SOURCE TAPE: 91700-16161 REV A * ABS TAPE: 91700-16161 REV. A * PROGRAMMER: BOB SHATZER * DATE WRITTEN: 03/12/75 * DATE MODIFIED: 29 DEC 1975 ************************************************************** * * THIS PROGRAM CONFIGURES AND INSTALLS THE BBDL IN THE * PROTECTED AREA OF CORE FOR 4,8,12,16,24, AND 32K CPU'S. * * OPERATING INSTRUCTIONS: * * 1. LOAD (OR DOWN-LOAD) THIS PROGRAM USING THE BBL, BBDL, * SCE/1, OR SCE/2. * * 2. SET THE SWITCH REGISTER AS FOLLOWS: * NOTE - A ZERO IN ANY FIELD WILL RESULT IN THE FOLLOWING * CONFIGURATION: * READER 16 * DISC 21 * SUBCHANNEL 0 * * SWITCHES SET TO * """""""" """""" * * 5-0 SELECT CODE OF PHOTOREADER * * 6-11 SELECT CODE OF DISC (LOWER) * * 14-12 1 FOR 8K CPU * 2 FOR 12K CPU * 3 FOR 16K CPU * 5 FOR 24K CPU * 7 FOR 32K CPU * * 15 SUBCHANNEL OF SYSTEM DISC * (0 FOR LOWER AND 1 FOR UPPER) * * ALL OTHER SWITCHES MUST BE SET TO 0. * * 3. SET P REGISTER TO 2B (STARTING ADDRESS). * * 4. PRESS 'INTERNAL PRESET', 'EXTERNAL PRESET', 'LOADER * ENABLE', AND 'RUN'. * * , 5. HLT 77B INDICATES SUCCESSFUL INSTALLATION. * * HLT 22B INDICATES AN INVALID SWITCH REGISTER SETTING: * - INVALID CPU SIZE * - EXTRANEOUS SWITCHES * SKP B EQU 1 * ORG 2B * JMP 3,I DEF START HLT 4B POWER FAIL HALT * ORG 100B * START CLC 0,C TURN OFF EVERYTHING LIA 1 GET SWITCH REGISTER AND B77 GET SELECT CODE OF READER SZA,RSS IS SELECT CODE ZERO? LDA B16 YES - SET IT TO 16 STA PCHAN AND SAVE IT LIA 1 GET SWITCH REGISTER AGAIN ELA,RAL ROTATE BIT 15 TO E ALF,ALF AND BITS 6-11 TO LOW WORD AND B77 ISOLATE SELECT CODE SZA IS DISC SELECT CODE ZERO? JMP *+3 NO LDA B21 YES - SET IT TO 21 CLE AND SET DISC SUBCHANNEL TO 0 STA DCHAN AND SAVE IT AS DISC SELECT CODE CLA,CME CHANGE DISC SUBCHANNEL BIT FOR HDWE ELA,RAL AND ROTATE IT INTO POSITION ALF,ALF IOR G30 INCL OR WITH SEEK WORD VALUE STA SEEKA,I AND SAVE IT LIA 1 AND G70 GET CPU SIZE CPA G40 JMP HLT22 20K NO GOOD CPA G60 JMP HLT22 28K NO GOOD SZA,RSS IS MEM SIZE 0? LDA G70 YES - SET IT TO 32K IOR C77 FORM FWBBL STA FWBBL CMA,INA NEGATE FOR MEM-PROTECT CONSTANT STA .MS,I * LDB IOTBP GET DEF TO READER I/O TABLE LDA PCHAN AND READER SELECT CODE JSB CONFG CONFIGURE READER I/O LDB IOTBD GET DISC DATA CHANNEL I/O TABLE LDA DCHAN AND ITS SELECT CODE JSB CONFG GO CONFIGURE THAT LDB IOTBC GET COMMAND CHANNEL I/O TABLE LDA DCHAN GET DATA CHANNEL S/C INA BUMP IT TO GET COMMAND CHANNEL JSB CONFG GO CONFIGURE THAT TOO * LDB .GO MOVE1 LDA B,I  STA FWBBL,I ISZ FWBBL INB CPB .ENDR FINISHED ? JMP HLT77 YES. JMP MOVE1 NO. LOOP. * HLT22 HLT 22B INVALID SWITCH SETTINGS RSS HLT77 HLT 77B INSTALLATION COMPLETED. JMP 3,I RESTART * CONFG NOP I/O CONFIGURATION ROUTINE STB T2 STA CHAN CNFG1 LDB T2,I CONFIGURE THE I/O INSTRUCTIONS SZB,RSS JMP CONFG,I FINISHED. LDA B,I SSA,RSS SIMPLE I/O INSTRUCTION TEST HLT 63B NOT I/O INSTRUCTION XOR CHAN AND B77 XOR B,I STA B,I STORE CONFIGURED INSTRUCTION ISZ T2 JMP CNFG1 * .GO DEF LOAD .ENDR DEF ENDR .MS DEF MAXAD PCHAN NOP DCHAN NOP CHAN NOP T2 NOP B16 OCT 16 B21 OCT 21 B77 OCT 77 G70 OCT 70000 G30 OCT 30000 G40 OCT 40000 G60 OCT 60000 C77 OCT 7700 FWBBL NOP SEEKA DEF SEEKC * IOTBP DEF *+1 PHOTOREADER I/O TABLE DEF RDCH+2 DEF RDCH+3 DEF RDCH+5 NOP TERMINATES TABLE * IOTBD DEF *+1 DISC DATA CHANNEL I/O TABLE DEF D.1 DEF D.2 DEF D.3 DEF D.4 DEF DMACW NOP * IOTBC DEF *+1 DISC COMMAND CHANNEL I/O TABLE DEF C.1 DEF C.2 DEF C.3 DEF C.4 DEF C.5 DEF C.6 DEF C.7 NOP * HED BBDL CODE * (C) HEWLETT PACKARD CO. 1976 ORG 3700B SITUATE FOR TRANSPORTABILITY * RDR EQU 16B * LOAD CLA,RSS EOBLK LDA EOTC TRAILER LENGTH LEADR CLC 0,C LEAVE CLEAN ON EXIT CCE,INA,SZA,RSS HLT 77B END OF TAPE JSB RDCH READ A CHAR CMB,CCE,INB,SZB,RSS IS IT WORD COUNT? JMP LEADR NO STB COUNT SAVE WDCOUNT JSB RDCH THROW AWAY ONE FRAME JSB RDCH READ START ADDRESS STB 0 INITIALIZE CKSUM LOOP STB ADDR SET POINTER ADB MAXAD VALIDATE LOAD ADDRESS SEZ,CLE "J LOADER CLOBBERED? ADDR2 HLT 55B YES TELL USER JSB RDCH FETCH DATA WORD EOTC STB ADDR,I PLANT WORD IN CORE ADA 1 TALLY CKSUM LDB ADDR CLE,INB ISZ COUNT END OF BLOCK JMP LOOP NOT YEST JSB RDCH READ CKSUM CPB 0 VALID? JMP EOBLK YES ADDR1 HLT 11B NO-CKSUM ERROR COUNT NOP MAXAD NOP RDCH NOP READ FRAME(2 IF E IS CLEAR) CLB STC RDR,C START READER SFS RDR MSK1 JMP *-1 USED BY DISC BOOT MIB RDR,C SEZ,CME READ ANOTHER CHAR? JMP RDCH,I NO,EXIT WITH E CLEAR BLF,BLF SET FOR SECOND CHAR JMP RDCH+2 * ADDR NOP DC EQU 21B CC EQU DC+1 * SEEKC OCT 30000 SUBCHAN=1 (OCT 31000=SUBCHAN 0) LDB MSK1 C.1 OTB CC ISSUE READ COMMAND C.2 STC CC,C START READ TO CLEAR 1ST STATUS LDA SEEKC D.1 OTA DC ISSUE CYLINDER ADDRESS (0) D.2 STC DC,C TELL CTRL CYL ADDRESS LOADED C.3 OTA CC ABORT READ,SEND SEEK COMMAND C.4 STC CC,C START SEEK LDA DMACW OTA SIX ISSUE DMA CONTROL WD LDA ADDR1 OTA TWO ISSUE START CORE ADDRESS(2011B) D.3 STC DC,C TELL CNTL HEAD/SECT LOADED STC TWO SET FOR WORD COUNT OTA TWO ISSUE WD COUNT (HUGE) C.5 OTB CC ISSUE READ COMMAND D.4 STC DC,C PREVENT SPURIOUS DMA XFER STC SIX,C START DMA C.6 STC CC,C START DISK READ C.7 SFS CC WAIT FOR DISC XFER (6144 WDS) JMP *-1 JSB ADDR2,I DONE-JMP INTO CODE (2055B,I) * DMACW ABS 120000B+DC ENDR BSS 0 * TWO EQU 2 SIX EQU 6 * END Zf  91700-18162 1621 S 0122 DS1/B SAT. BOOT SCE/2             H0101 ASMB,A,B,L,C HED SCE2 91700-16162 REV A 760315 * (C) HEWLETT-PACKARD CO. 1976 ORG 0 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ************************************************* * *SCE2 SCE2 * *SOURCE PART # 91700-18162 REV 1621 * *ABS PART # 91700-16162 REV 1621 * *WRITTEN BY: JIM HARTSEL * *DATE WRITTEN: * *MODIFIED BY: CHUCK WHELAN * *DATE MODIFIED: 05-17-76 * **************************************************** SUP * ************************************ * * * SCE/2 TERMINAL EXECUTIVE * * INDIRECT ENTRY POINT * * * ************************************ * * * ORG 2 JMP 3,I * B EQU 1 SDI EQU 14B REMOTE COMPUTER CHANNEL. TTY EQU 15B LOCAL TTY CHANNEL. * ************************************ * * * TEMPORARY BASE PAGE LINKAGES * * * ************************************ * ORG 100B THIS BASE PAGE AREA NOT USED JMP *+1,I BY TCE/2. DEF CNFIG RE-CONFIGURATION ENTRY POINT. * ******************************************** * * * OVERLAYABLE RECONFIGURATION SECTION * * S-REGISTER SETTING: * * BITS 0- 5 = REMOTE COMPUTER CHANNEL * * BITS 6-11 = TTY CHANNEL * * BITS 12-14= CORE SIZE (VALUE+1 * 4K) * * * ******************************************** * ORG 6440B * ERR HLT 13B INCASE OF ERROR CNFIG LIA 1 READ SWITCH REGISTER. AND O77 SZA,RSS JMP ERR STA RCH STORE REMOTE COMPUTER CHANNEL. LIA 1 ALF,ALF RAL,RAL AND O77 SZA,RSS JMP ERR STA TCH STORE TTY CHANNEL. * SET CONFIGURED INSTRUCTIONS FOR CORE SIZE LIA 1 AND P7000 ISOLATE BITS 12-14 STA TEMP LDA NCAD STA PNTR SAVE POINTER TO CONFIGURABLE "DEF"S LDB NCON NUMBER TO CONFIGURE LDA PNTR,I IOR TEMP INCLUDE HIGH ADDRESS BITS STA PNTR,I ISZ PNTR INB,SZB JMP *-5 ITERATE * LDA RCH LDB RTBL CONFIGURE REMOTE I/O INSTRUCTIONS. JSB CONFG LDA TCH LDB TTBL CONFIGURE TTY INSTRUCTIONS. JSB CONFG * LDB PSIZ - PGM SIZE LDA QUERA STA PNTR IOR TEMP STA LOC POINTER TO HIGH CORE FOR MOVE STA 3 STARTING ADDR INTO LOC.3 LDA PNTR,I STA LOC,I MOVE INTO HIGHER CORE ISZ PNTR ISZ LOC INB,SZB JMP *-5 MOVE NEXT JMP 3,I NOW GO TO SCE-2 * * CONFG NOP STA CHANL STB PNTR CNFL LDB PNTR,I FETCH NEXT I/O INSTR. ADDRESS. SZB,RSS DONE IF ZERO. JMP CONFG,I LDA B,I FETCH I/O INSTRUCTION. AND MASK CLEAR CHANNEL. IOR CHANL INSERT NEW CHANNEL. STA B,I REPLACE I/O INSTRUCTION. ISZ PNTR JMP CNFL LOOP TILL DONE. * RCH NOP TCH NOP CHANL NOP PNTR NOP MASK OCT 177700 O77 OCT 77 P7000 OCT 70000 NCAD DEF INIT NCON ABS INIT-SIZE # OF RECONFIGURED DEFS QUERA DEF QUERY PSIZ ABS QUERY-SIZE SIZE OF SCE-2 MAIN AREA * RTBL DEF *+1 TABLE OF ADDRESSES OF I/O DEF INIT1 INSTR. FOR REMOTE COMPUTER. DEF RCH1 DEF RCH2 DEF RCH3  DEF RCH4 DEF RCH5 DEF RCH6 DEF RCH7 DEF RCH8 DEF RCH9 DEF RCH10 NOP END OF TABLE. * TTBL DEF *+1 TABLE OF I/O INSTRUCTIONS DEF TCH1 FOR TTY. DEF TCH2 DEF TCH3 DEF TCH4 DEF TCH5 DEF TCH6 DEF TCH7 DEF TCH8 NOP END OF TABLE. * ORG 6600B ************************************ * * * MAIN ENTRY POINT * * * ************************************ * * QUERY CLA,INA DISPLAY ":" PROMPT. JSB TTYO OCT 35137 * LDA BFSIZ INPUT THE COMMAND. LDB BUFAD JSB TTYIN * JMP TMESS GO PROCESS THE COMMAND. * * M0950 LDA B6 DISPLAY "SYNTAX ERROR". JSB TTYO ASC 6,SYNTAX ERROR JMP QUERY SKP ******************************** * DECIPHER OPERATOR MESSAGES. ********************** ******************************** * * B CONTAINS # CHARACTERS. * DATA IN BUFFR. * TMESS CLA STA TEMP+2 CLEAR CHARACTER FLAG. CMB,INB,SZB,RSS CHECK IF COUNT ZERO. JMP QUERY YES STB TEMP+3 NEGATIVE CHAR. COUNT. * LDB MD33 CLEAR PARAMETER AREA. STB TEMP LDB PARPT STA B,I INB ISZ TEMP JMP *-3 * LDB BUFAD INPUT BUFFER CLE,ELB BYTE ADDRESS. STB TEMPP LDA INIT STA TEMP+5 INITIAL PARAM POINTER. LDA TEMP+5,I STA TEMP+4 INITIAL STORE POINTER. ADA MD1 STA TEMP+6 PARAM CHAR COUNT ADDR. * DEC10 LDB TEMPP FETCH NEXT BYTE. CLE,ERB LDA B,I SEZ,RSS CHECK IF TO EXAMINE UPPER/LOWER. ALF,ALF UPPER, SO ROTATE. AND M377 ISOLATE CHARACTER. * CPA COM CHECK FOR JMP DEC60 COMMA OR CPA BLNK BLANK JMP DEC65 ,DELIMITER. * LDB TEMP+6,I ADD -1 TO CHAR COUNT. ADB MD1 STB TEMP+6,I * LDB TEMP+2 CHECK IF TO BE UPPER/LOWER. SZB UPPER. JMP DEC40 LOWER. * ALF,ALF STA TEMP+4,I STORE CHARACTER. ISZ TEMP+2 SET FLAG TO LOWER CHARACTER. JMP DEC50 GO INCREMENT DATA CHAR. * DEC40 IOR TEMP+4,I COMBINE UPPER & LOWER. STA TEMP+4,I STORE. CLA STA TEMP+2 RESET FLAG TO UPPER CHAR. ISZ TEMP+4 BUMP STORE LOCATION. * DEC50 ISZ TEMPP BUMP BUFFER ADDR. ISZ TEMP+3 BUMP CHAR. COUNT. JMP DEC10 GO PROCESS NEXT CHAR. ISZ PARAM DONE- BUMP PARAM COUNT. JMP M0000 GO TO EXIT. * DEC65 LDA PARAM FIRST PARAM? SZA JMP DEC50 NO, IGNORE BLANKS DEC60 CLA STA TEMP+2 CLEAR CHAR. FLAG. * ISZ TEMP+5 BUMP PARAM POINTER. ISZ PARAM BUMP PARAM COUNT. LDA PARAM CPA B10 EIGHT PARAMS? JMP M0000 YES, GO PROCESS. * LDA TEMP+5,I STA TEMP+4 ADA MD1 STA TEMP+6 PARAM CHAR COUNT ADDR. JMP DEC50 GO INCREMENT DATA BUFFER. SKP * * IDENTIFY THE COMMAND (LOAD OR RUN). * M0000 LDA OP ADD UP THE THREE WORDS. ADA OP+1 ADA OP+2 * CPA SM.LO = SUM OF "LOAD"? JMP M0100 YES. CPA SM.RU = SUM OF "RUN"? JMP M0200 YES. CPA SM.RA = SUM OF "RUNAT"? JMP GETAD YES. JMP M0950 NO, SYNTAX ERROR. * A.LO EQU 046117B "LO" A.AD EQU 040504B "AD" A.RU EQU 051125B "RU" A.N EQU 047000B "N0" A.NA EQU 047101B "NA" A.T EQU 052000B "T0" * SM.LO ABS A.LO+A.AD SM.RU ABS A.RU+A.N SM.RA ABS A.RU+A.NA+A.T * * * LOAD XXXXX * LOAD INTO THE TERMINAL THE PROGRAM XXXXX WHICH * RESIDES ON THE CENTRAL STATION DISC. * M0100 LDA CP1 IS THERE A NAME? SZA,RSS JMP M0950 NO. * FILL TRAILLING BLANKS, SCHEDULE PROGL, & DOWNLOAD JSB LODIT JMP QUERY RETURN TO OPERATOR. SKP * * RUN(*,P1,P2,P3,P4,P5) * * RUNAT NNN (,P1,P2,P3,P4,P5) * * RUN XXXXX (,P1,P2,P3,P4,P5) * * P1...P5 = OPTIONAL PARAMETERS. * NNN = START ADDRESS. * XXXXX = PROGRAM NAME. * M0200 LDA CP1 IS 1ST PARAM NULL OR "*"? LDB P1 SZA CPB ASTER JMP MOVIT YES. * * FILL TRAILING BLANKS, SCHEDULE PROGL, & DOWNLOAD JSB LODIT JMP MOVIT RUN. * GETAD LDA CP1 IS THERE A START ADDR? SZA,RSS JMP M0950 NO, ERROR. LDB P1AD JSB CVT1 CONVERT START ADDRESS. STA IADR * * CONVERT OPTIONAL PARAMETERS TO BINARY AND STORE. * MOVIT LDA P2AD STA DCVTA ADDR OF DATA BUFFER. ADA MD1 STA DCVTB ADDR OF CHAR COUNT. * LDA DO.P1 STA TEMP+4 DESTINATION ADDR. LDA MD5 STA TEMP+5 COUNTER * TRANS LDA DCVTB,I CHAR. COUNT. SZA,RSS ZERO? JMP STORE YES, STORE ZERO. * LDB DCVTA JSB CVT1 CONVERT TO BINARY. * STORE STA TEMP+4,I STORE VALUE. ISZ TEMP+4 LDA DCVTA ADA B4 STA DCVTA LDA DCVTB ADA B4 STA DCVTB * ISZ TEMP+5 DONE? JMP TRANS NO. * LDB DO.P1 (B) = ADDR OF 1ST PARAM. CLC 0,C "PRESET" LDA IADR IS THERE A START ADDR? SZA JMP IADR,I YES, USE IT. LDA B6 JSB TTYO TYPE MESSAGE ASC 6,NO START ADR JMP QUERY * * DCVTA NOP DCVTB NOP O.P1 OCT 0 O.P2 OCT 0 O.P3 OCT 0 O.P4 OCT 0 O.P5 OCT 0 SKP * SCHEDULE PROGL AT REMOTE AND PASS LU, PROGRAM NAME. * THEN LOAD THE PROGRAM INTO TERMINAL CORE. * CALLING * SEQUENCE: (B) = ADDR OF ASCII PROGRAM NAME. * JSB LODIT * LODIT NOP LDA P1AD STA TEMP LDA MD3 STA TEMP+1 TLOOP LDB BLQNKW FILL TRAILING BLANKS LDA TEMP,I SZA LDB BLNK AND M377 SZA JMP *+3 ADB TEMP,I STB TEMP,I ISZ TEMP ISZ TEMP+1 JMP TLOOP * * NOW SEND THE DOWNLOAD REQUEST TO PROGL * JSB LSTN SET CARD IN LISTEN MODE LDB RC JSB OUT SEND "REQUEST COMING" JMP *-2 RETRY LDB MD6 -LENGTH-1 JSB OUT SEND IT JMP *-2 RETRY LDB B2 GET MODE WORD (2) JSB OUT SEND IT JMP *-2 RETRY RCH10 CLC SDI TURN CARD TO TRANMITTER LDB MD3 INB,SZB DELAY A WHILE JMP *-1 LDB K9 JSB OUT1 SEND STREAM CLB JSB OUT1 2ND WORD = 0 LDB P1 JSB OUT1 SEND 1ST 2 CHARS OF NAME LDB P1+1 JSB OUT1 SEND 3RD & 4TH CHARS OF NAME JSB LSTN SET CARD BACK TO LISTEN MODE LDB P1+2 JSB OUT SEND LAST WORD (FINAL NAME CHARS) JMP RCH10 ERROR IN TRANSMISSION, TRY AGAIN LDB TNW JSB OUT1 SEND REPLY TO COMPLETE REQUEST * CLA,CLE CLEAR LOCATION 3. STA ERFLG INITIALIZE ERROR INDICATOR STA 3 * READ-IN PROGL DOWNLOAD DATA RECORD LOAD1 JSB IN READ 1ST WORD OF DATA CPB RC IS IT EOT (RC) JMP END YES (EOT). STB RL SAVE NEGATIVE RECORD LENGTH ADB K100 SEZ,RSS DOES -99 < LEN < 0? ISZ ERFLG NO, FLAG ERROR JSB IN READ STARTING ADDRESS STB ADDR AND SAVE. STB CKSUM INITIALIZE CHECKSUM * DATA JSB IN READ DATA WORD. LDA ERFLG SZA,RSS SKIP IF ANY ERRORS OCCURRED STB ADDR,I STORE DATA WORD. ADB CKSUM STB CKSUM UPDATED RUNNING CHECKSUM LDB ADDR GET ADDRESS FOR SWR OTB 1 OUTPUT SOMETHING ISZ ADDR ISZ RL LAST DATA WORD? JMP DATA  NO. * JSB IN YES, READ CHECKSUM. LDA ERFLG ERROR FLAG CPB CKSUM CKSUM OK? CLE,SZA YES, ANY OTHER ERRORS? JMP ERRX FAILED, ERROR RETURN JMP LOAD1 ALL OK, DO NEXT RECORD * END JSB IN JSB IN JSB IN GET STATUS WORD. LDA ERFLG SZA SKIP IF NO ERRORS LDB B2 SET ERROR CODE. JMP CLNUP * IN NOP CLA RCH3 SFS SDI WORD RECEIVED? JMP *-1 NO. RCH4 LIB SDI READ DATA WORD. RCH5 LIA SDI,C READ STATUS WORD. SSA PARITY ERROR? ISZ ERFLG YES, SET ERROR FLAG. LDA TNW RCH6 OTA SDI OUTPUT "XMIT NEXT WORD". JMP IN,I * OUT NOP TRANSMIT A WORD. JSB OUT1 GO TRANSMIT FOR CARD...WAIT FOR READY RCH9 LIA SDI CPA RLW JMP OUT,I ERROR RETURN..TRY AGAIN ISZ OUT SET FOR NORMAL RETURN CPA TNW JMP OUT,I DO NORMAL RETURN ERRX LDB B2 UNKNOWN RETURN..ERROR * CLNUP SZB ANY ERRORS? JMP ERRFD YES, GO PROCESS. LDA 3 SET DEFAULT STA IADR START ADDRESS. JMP LODIT,I RETURN. * ERRFD LDA B6 CPB B2 JMP ERR2 COM LINE ERROR. CPB MD1 JMP ERR4 CAN'T LOCATE. JSB TTYO TYPE MESSAGE ASC 6,PROGL ERROR JMP QUERY * ERR2 JSB TTYO ASC 6,COM LINE ERR JMP QUERY * ERR4 JSB TTYO ASC 6,CAN'T LOCATE JMP QUERY * * SUBROUTINE TO SET THE CARD IN LISTEN MODE * LSTN NOP INIT1 CLC SDI,C LISTEN..INHIBIT INTERUPTS RCH1 LIA SDI,C READ STATUS RCH2 LIA SDI READ WORD...CLEARS CARD JMP LSTN,I RETURN * * *SUBROUTINE TO OUTPUT A WORD THE CARD AND WAIT *UNTIL CARD IS READY TO CONTINUE * OUT1 NOP RCH7 OTB SDI SEND WORD RCH8 SFS SDI WAIT JMP *-1 JMP OUT1,I RETURN...WHEN CARD READY SK&P * * KEYBOARD INPUT DRIVER. * (A) = RECORD SIZE, WORDS. * (B) = BUFFER ADDRESS. * JSB TTYIN * ON RETURN, (B) = # CHAR. INPUT. SPC 3 TTYIN NOP ENTRY. RAL,CLE STORE # CHAR. STA RSIZE CLA STA RL CLEAR CHAR. COUNTER. STB ADDR STORE BUFFER POINTER. * CLC 0,C TURN OFF INTERRUPTS. TYIN JSB TYI READ A CHARACTER. AND M177 CPA LF LINE FEED? JMP TYIN YES, IGNORE. CPA CR CARRIAGE RETURN? JMP EOI YES, ALL DONE. CPA RBOUT RUBOUT? JMP CANCL YES. CPA CONTH BACKSPACE CHAR? JMP BAKUP YES. CPA BKSPC BACKSPACE KEY? JMP BAK * LDB RL BUFFER FULL? CPB RSIZE JMP TTYIN,I YES, IGNORE CHAR. ISZ RL SEZ,CME INSERT CHAR IN BUFFER JMP RIGHT ALF,ALF STA ADDR,I JMP TYIN RIGHT IOR ADDR,I STA ADDR,I ISZ ADDR JMP TYIN * EOI LDA LF OUTPUT LINE FEED. JSB TYO LDB RL SET (B) = CHAR. COUNT. JMP TTYIN,I RETURN. * CANCL LDA BSLSH OUTPUT BACKSLASH. JSB TYO LDA CR OUTPUT CARRIAGE RETURN. JSB TYO LDA LF OUTPUT LF. JSB TYO JMP QUERY RE-PROMPT THE OPERATOR. * BAKUP LDA BKARW OUTPUT BACK ARROW. JSB TYO BAK LDA RL DECREMENT CHAR. COUNT. ADA MD1 STA RL LDB ADDR ADJUST BUFFER POINTER. CME,SLA FLIP E. ADB MD1 STB ADDR LDA B,I SEZ AND MASKU CLEAR RIGHT CHAR. STA B,I JMP TYIN GO INPUT NEXT CHAR. * TYI NOP LDA DA ECHO INPUT. TCH1 OTA TTY TCH2 STC TTY,C INPUT A CHARACTER. TCH3 SFS TTY JMP *-1 TCH4 LIA TTY JMP TYI,I RETURN SPC 3 * * DISPLAY DEVICE OUTPUT DRIVER. * (A) = # WORDS.Qe * JSB TTYO * (BUFFER) SPC 3 TTYO NOP ENTRY. RAL FORM NO. OF CHARS CMA,CLE,INA NEGATE COUNT STA RL * TO LDA TTYO,I PICK UP NEXT BUFFER WORD. SEZ,CME LEFT CHAR? ISZ TTYO NO, BUMP BUFFER POINTER. SEZ LEFT CHAR? ALF,ALF YES, RIGHT JUSTIFY. AND M377 MASK CHAR. CPA BKARW IS IT A BACKARROW? JMP TTYEX YES, RETURN. JSB TYO OUTPUT THE CHARACTER ISZ RL BUMP COUNT JMP TO ITERATE * LDA CR JSB TYO DO CARRAIGE RETURN LDA LF OUTPUT LINE FEED. JSB TYO TTYEX SEZ ON LHW? ISZ TTYO YES, BUMP POINTER TO RETURN ADDR JMP TTYO,I RETURN. * TYO NOP OUTPUT A CHARACTER. LDB LOUT PRINT OUTPUT. TCH5 OTB TTY TCH6 OTA TTY TCH7 STC TTY,C TCH8 SFS TTY JMP *-1 JMP TYO,I * * CR OCT 15 CARRIAGE RETURN. LF OCT 12 LINE FEED. BKSPC OCT 31 BACKSPACE KEY. BSLSH OCT 134 BACKSLASH. BKARW OCT 137 BACKARROW. DA OCT 160000 ECHO INPUT. LOUT OCT 120000 PRINT OUTPUT. RSIZE NOP SKP * * ASCII TO BINARY CONVERSION ROUTINE. * * CALLING SEQUENCE: * * A= CHARACTER COUNT * B= DATA BUFFER ADDRESS * JSB CVT1 * * IF THE DATA BUFFER BEGINS WITH AN "@" SIGN, * THE DATA IS TAKEN TO BE OCTAL, ELSE DECIMAL. * * ON RETURN, (A) = CONVERTED VALUE * CVT1 NOP ENTRY. STA TMP+1 SAVE CHAR COUNT CLA STA TMP CLEAR ACCUMULATING VALUE. CLE,ELB STB TEMP+2 STORE CHAR. ADDR. RBR IS FIRST CHAR = @? LDA B,I AND MSK14 STA TEMP+3 (ZERO IF OCTAL NUMBER). SZA JMP CV015 NO. LDA B,I YES, CHANGE TO ASCII ZERO. AND M377 IOR UPR60 STA B,I * CV015 LDA TMP ALBF,RAR LDB TEMP+3 OCTAL NUMBER; SZB,RSS JMP CV018 YES ADA TMP ADA TMP TMP=10*TMP CV018 STA TMP STORE MULTIPLIED VALUE. LDB TEMP+2 GET CHAR ADDR. CLE,ERB LDA B,I GET DATA VALUE. SEZ,RSS IF E SET, THEN LOWER CHAR. ALF,ALF UPPER, SO ROTATE. AND M377 * ADA MD48 CHECK IF LEGAL DATA CHAR. STA TMP+2 SSA JMP M0950 ERROR IN SYNTAX. ADA MD8 LDB TEMP+3 OCTAL NUMBER? SZB ADA MD2 NO. SSA,RSS JMP M0950 ERROR. * LDA TMP+2 LDB TEMP+3 SZB,RSS AND B7 ADA TMP ADD TO ACCUMULATED STA TMP VALUE AND STORE. ISZ TEMP+2 INCR CHAR ADDR. ISZ TMP+1 INCR CHAR COUNT. JMP CV015 GO PROCESS NEXT CHAR. * LDA TMP LOAD CONVERTED VALUE. JMP CVT1,I RETURN. SKP B2 OCT 2 B4 OCT 4 B6 OCT 6 B7 OCT 7 B10 OCT 10 CONTH EQU B10 K9 DEC 9 K100 DEC 100 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD5 DEC -5 MD6 DEC -6 MD8 DEC -8 MD33 DEC -33 MD48 DEC -48 M177 OCT 177 RBOUT EQU M177 M377 OCT 377 COM OCT 54 BLNK OCT 40 BLNKW ASC 1, ASTER OCT 25000 UPR60 OCT 30000 MSK14 OCT 137400 MASKU OCT 177400 IADR NOP RL OCT 0 ADDR OCT 0 TNW OCT 170360 RLW OCT 007417 RC OCT 170017 "REQUEST COMING" LOC NOP ERFLG NOP CKSUM NOP TMP BSS 3 * TEMPP OCT 0 TEMP BSS 7 TEMPORARY STORAGE. BFSIZ DEC 18 BUFFR BSS 18 OPER I/O MESSAGE BUFFER. * * PARAM NOP PARAMETER COUNTER. OP1 NOP CHAR. COUNT - COMMAND MNEMONIC. OP BSS 3 MNEMONIC. CP1 NOP CHAR. COUNT-PARAM 1. P1 BSS 3 PARAM 1 (UP TO 3 WORDS). CP2 NOP ETC. P2 BSS 3 CP3 NOP P3 BSS 3 CP4 NOP P4 BSS 3 CP5 NOP P5 BSS 3 CP6 NOP P6 BSS 3 CP7 NOP pB@ PRESET LIMIT (=8)? CPA YDSA? JMP LNRC3 YES,HAVE NO CHOICE BUT TO SET PARITY! LDB DBBIT JSB STAT SET DRIVER BUSY LDA RSS MODIFY DRIVER INITIATOR SECTION FOR RE-TRY. STA EXIT0 STA EXIT2 JSB SSTOP LDB SSTPI BUT 1ST,STOP ALL KNOWN TRANSMISSIONS! JMP CEXT1 EXIT0 NOP ENTERED HERE FROM D.65 INITIATOR. JMP D.65,I NORMALLY THIS CODE EXECUTED!!!! CLA STA EXIT0 HERE ONLY IF PARITY OCCURED. STA CMD JMP OTA1+1 YDSA? DEC 8 CKFLG NOP RSS RSS * SKP * * HERE FOR LENGTH WORD COMING INTERRUPT * ILNC JSB CCHCK CHECK FOR PARITY ERROR OR STOP INA SET FOR CORRECT NEGITIVE COUNT ADA RBUFL GREATER THAN MAX? SSA JMP LNRC4 YES...ERROR LDA TEMP2 GET LENGTH AGAIN CMA MAKE COUNT POSITIVE STA RBUFL STA EQTW3,I SAVE LENGTH JSB STNW TELL OTHER SIDE TO CONTINUE JSB CEXT2 DO CONTINUATION EXIT * SKP * * HERE ON A MODE WORD COMING INTERRUPT * JSB CCHCK CHECK FOR STOP AND PARITY RAL,CLE,ERA STA OMODE SAVE OTHER SIDES MODE CLA,SEZ REQUEST AND DATA? CCA YES STA WAITF SET OR CLEAR DATA FLAG IMOD9 JSB ITRAN SET UP INCASE OF INTERRUPT TRANSFER kv LDA OMODE GET OTHER SIDES MODE SZA,RSS DMA SPECIAL? JSB GTDMA NO...DMA OPEN...SEE IF WE GOT DMA LDA RBUFL GET REQUEST BUFFER LENGTH SZA,RSS ZERO LENGTH REQUEST JMP ERQ1 YES...GO DO COMPLETION LDA PARCT GET PARITY COUNT CPA YDSA? MAX NUMBER OF TIMES? JMP LNRC3 YES...PARITY ERROR JSB DMA YES...TURN IT ON LDA PARCT GET PARITY COUNT ISZ PARCT INCREMENT PARITY COUNT SZA FIRST TIME? JMP ILNC3 NO LDA OMODE GET OTHER MODE SZA IS OTHER MODE DMA? JMP ILNC2 NO LDA DMAF DO WE HAVE DMA? SZA JMP ILNC4 YES ISZ OMODE SET OTHER MODE NON ZERO JMP ILNC2 SET FOR NON DMA TRANSFER ILNC4 LDA GDMAW GET WE HAVE DMA WORD JSB OUTPA SEND IT RSS ILNC2 JSB STNW YES...TELL THEM TO CONTINUE RSS ILNC3 JSB SRLW NO LDB IRTNS INTERRUPT DATA TRANSFER? LDA OMODE GET OTHER SIDE MODE SZA DMA OPEN? JMP CEXIT NO JSB CEXT2 YES * * SKP * * HERE FOR REQUEST COMPLETE...DMA * JSB CLDMA CLEAR DMA ACTIVE...IF SET JSB CHECK CHECK FOR PARITY ERRORS AND STOP JMP IMOD9 PARITY ERROR...RETRY JMP LNRC5 STOP WAS RECEIVED ERQ1 LDA WAITF REQUEST AND DATA SZA,RSS REQUEST & DATA? JSB OFDMA TURN OFF DMA...REQUEST ONLY JSB STNW TELL OTHER SIDE ALL IS WELL JSB CEXT2 SET RECEIVE MODE TO GET REPLY * * HERE WHEN HANDSHAKING IS OVER * ICREQ JSB RDD.C CLEAR CARD JMP REQDN TERMINATE * A1 NOP A2 NOP RB1 NOP TEMPB NOP TEMPC NOP OMODE NOP GDMAW OCT 67 IRTNS DEF TRNSI C10 OCT 10 C40 OCT 40 C200 OCT 200 TEMPD NOP CREQI DEF ICREQ * SKP * * HERE ON RETURN FROM SENDING STOP * SSTPI DEF *+1 JSB RDD.C ] READ CARD TO CLEAR IT JSB OFDMA TURN OFF DMA CLA STA WAITF AND WAITING FOR DATA FLAGS * EXIT2 NOP "RSS" ONLY IF IN PARITY MODE. JMP REQDN STA EXIT2 LDB DBBIT JSB STAT JSB CLEAR JMP D.652 RE-INITIATE DRIVER CALL IF PARITY OCCURED. * * SKP * * HERE FOR REQUEST DATA COMING VIA INTERRUPTS * TRNSI JSB CHECK READ CARD JMP TRNS1 PARITY ERROR JMP LNRC5 STOP RECEIVED STA TEMPB,I SAVE VALUE ISZ TEMPB GET NEXT ADDRESS JMP *+3 TRNS1 STA TEMPB,I SAVE VALUE ISZ TEMPD INCREMENT PARITY COUNT ISZ TEMPC DONE? JMP ILNC2 NO LDB TEMPD GET PARITY ERRORS SZB ANY ERRORS? JMP IMOD9 YES...TRY AGAIN JMP ERQ1 NO...TERMINATE * SKP * * HERE FOR START OF DATA WRITE * INTWD JSB CCHCK CHECK FOR STOP OR PARITY ERROR CPA CB TRANSMIT NEXT WORD? RSS YES JMP LNRC3 NO...ERROR * * OTHER SIDE READ TO RECEIVE DATA * IWD1 JSB DMA GET DMA JSB ITRAN SET UP INCASE OF INTERRUPT TRANSFER LDB DDATI DMA DATA COMPLETE INTERRUPT LDA DMAF SZA DMA? JMP CEXT1 YES * * FALL THRU TO OUTDI IF NOT DMA TRANSFER * SKP * * HERE TO OUTPUT DATA ON INTERRUPT * OUTDI LDA TEMPB,I GET WORD JSB OUTPA OUTPUT WORD ISZ TEMPB GET NEXT ADDRESS LDB IOUTD GET CONTINUATION INTERRUPT ISZ TEMPC DONE? JMP CEXT1 NO...CONTINUE..LEAVE IN TRANSMIT MOD IWTRD JSB CEXT2 YES...SET FOR WAITING FOR STATUS * SKP * * HERE FOR STATUS ON DATA WRITE * JSB CHECK GO READ STATUS OF LAST TRANSFER JMP IWD1 PARITY ERROR...RETRY JMP LNRC5 STOP...ERROR CPA CB TNW? RSS ALL OK...TERMINATE JMP LNRC3 NO...TREATE AS A PvNLHARITY ERROR JSB OFDMA RESET DMA CLA GET A ZERO STA WAITF CLEAR WAITING FOR DATA INTERRUPT REQDN CLB,INB SET FOR ALL OK JMP CEND TERMINATE * DDATI DEF IDDAT IOUTD DEF OUTDI * SKP * * HERE FOR DMA COMPLETION...WRITE DATA * IDDAT JSB CLDMA TURN OFF DMA JSB CCHCK GO CHECK DATA QUALITY JMP IWTRD SET STATUS INTERRUPT * SKP * * HERE FOR LENGTH WORD TRANSMIT INTERRUPT * ISLW JSB CCHCK CHECK OF STOP OR PARITY ERROR CPA CB IS IT TNW? JMP ITWR2 YES CPA CD IS IT RLW? RSS YES JMP LNRC3 NO...ERROR CLA GET A ZERO INA,SZA HERE WE SIT AWHILE BEFORE TRYING AGAIN JMP *-1 JSB SRC TRY AGAIN LDB SLWI SET FOR SAME INTERRUPT JMP CEXIT DO CONTINUATION EXIT ITWR2 LDA RBUFL GET LENGTH CMA NEGATE COUNT JSB OUTPA OUTPUT LENGTH WORD JSB CEXT2 DO CONTINUATION EXIT * SPC 4 * * HERE TO SEND MODE WORD * JSB CCHCK STOP OR PARITY ERROR JSB GTDMA SEE IF WE CAN GET DMA CLA,SEZ,RSS YES INA NO LDB DATFG GET FLAG CLE,SZB REQUEST AND DATA? CCE YES ELA,RAR SET IN DATA FLAG JSB OUTPA OUTPUT WORD JSB CEXT2 DO CONTINUATION EXIT * VN SKP * * HERE TO SEND REQUEST CONTENTS * JSB CCHCK CHECK FOR STOP OR PARITY CPA CB TNW? RSS CPA GDMAW POSSIBLE OTHER SIDE DMA RSS JMP LNRC3 NO...TREATE AS PARITY ERROR ISRQ1 LDB RBUFL GET LENGTH WORD SZB,RSS ZERO? JMP ISTR1 YES LDA DMAF DO WE HAVE DMA? SZA,RSS JMP ISRQ2 NO JSB DMA START DMA LDB EREQI GET END DMA INTERRUPT JMP CEXT1 DO TRANSMIT CONTINUATION ISRQ2 JSB ITRAN SET UP FOR INTERRUPT TRANSFER * * FALL THRU TO ISRQ IF IT IS TO BE PROCESSED VIA INTERRUPTS * SKP * * HERE FOR SENDING REQUEST VIA INTERRUPTS * ISRQ LDA TEMPB,I GET WORD JSB OUTPA OUTPUT DATA WORD ISZ TEMPB GET NEXT ADDRESS LDB SRQI GET CONTINUATION ADDRESS ISZ TEMPC DONE? JMP CEXT1 NO...SET IN TRANSMIT MODE ISTR0 JSB CEXT2 YES...WAIT FOR STATUS * SKP * * HERE FOR END REQUEST STATUS INTERRUPT * JSB CCHCK CHECK FOR PARITY OR STOP CPA CB TNW? JMP ISTR1 YES CPA CD RLW? JMP ISRQ1 YES...RETRY JMP LNRC3 NO...ERROR ISTR1 JSB STNW SEND TNW AS RESPONSE LDB *+2 JMP CEXT1 DEF *+1 LDA DATFG SEND DATA TOO? SZA JMP *+3 JUMP UNLESS REQUEST ONLY JSB OFDMA TURN OFF DMA...REQUEST ONLY JMP REQDN JSB CEXT2 WAIT FOR TNW JSB CHECK PARITY OR STOP? JMP RETRY PARITY JMP IWDT1 STOP CPA CB WAS IT A TNW? RSS YES JMP LNRC3 NO, TREAT AS PARITY ISZ REQW4 GET TO DATA ADDRESS LDA DRWFG GET DATA READ WRITE FLAG STA RWFLG SAVE AS READ WRITE FLAG LDA REQW4,I GET ADDRESS JSB INDCK CHASE DOWN INDIRECTS STA RBUFA SAVE DATA ADDRESS ISZ REQW4 GET TO DATA LENGTH _ LDA REQW4,I GET LENGTH STA RBUFL SAVE LENGTH * * SET FOR STANDARD READ OR WRITE DATA * LDA RWFLG SZA READ OR WRITE? JMP IWD1 WRITE STA PARCT CLEAR PARITY ERROR COUNT JMP IDR1 READ * * THEY DID NOT WANT THE DATA * SEND THEM A -1 LENGTH * NORMAL TERMINATION * IWDT1 LDA DATFG REQUEST AND DATA? SZA ? CCA YES...SET FOR OK STOP STA EQTW3,I SAVE AS LENGTH JSB OFDMA TURN OFF DMA CLA STA WAITF CLEAR WAITING FOR DATA FLAG LDB C10 GET STOP RECEIVED BIT JMP CEND TERMINATE * SRQI DEF ISRQ SKP * * HERE FOR END DMA WRITE TRANSFER * IEREQ JSB CLDMA CLEAR DMA JMP ISTR0 SET STATUS INTERRUPT * EREQI DEF IEREQ * SKP * * HERE FOR DMA COMPLETION READ * INTRD JSB CLDMA TURN OFF DMA JSB PARCK CHECK FOR PARITY ERROR RSS NO ERRORS JMP IDR1 YES....RETRY JSB OFDMA TURN OFF DMA IDR2 JSB STNW TELL OTHER SIDE ALL IS WELL CLA GET A ZERO STA WAITF CLEAR DATA FLAG LDB CREQI JMP CEXT1 EXIT IN TRANSMIT MODE * * IDR1 CLA GET A ZERO STA TEMPD CLEAR PARITY FLAG..INTERRUPT PROCESS LDA PARCT GET PARITY COUNT CPA YDSA? DONE MAX NUMBER OF TIMES? JMP LNRC3 YES...PARITY ERROR JSB ITRAN SET UP FOR INTERRUPT TRANSFER JSB DMA START DMA (IF WE HAVE ONE) LDA PARCT GET PARITY COUNT ISZ PARCT INCREMENT PARITY COUNT SZA,RSS FIRST TIME? JMP *+3 YES JSB SRLW NO RSS IDR3 JSB STNW YES LDB NTRDI GET DMA TERMINATION LDA DMAF DOING DMA TRANSFER SZA JMP CEXIT YES JSB CEXT2 NO...INTERRUPT PROCESS * SKP * * HERE FOR RECEIVE DATA NON DMA * INDMA JSB RDD.S READ CARD STA TEMPB,I SAVE DATA WORD ISZ TEMPB GET NEXT WORD SSB PARITY ERROR? ISZ TEMPD YES ISZ TEMPC DONE? JMP IDR3 NO...TELL THEM TO CONTINUE LDB TEMPD GET PARITY ERROR FLAG SZB ANY ERRORS? JMP IDR1 YES JMP IDR2 NO * SKP * * HERE FOR PARITY ERRORS * LNRC3 LDB C40 GET PARITY ERROR CODE STB LN6ER AND SAVE IT JMP LNRCX GO SEND STOP SPC 3 * * HERE TO SET ERROR,SEND STOP,AND TERMINATE * LNRC4 LDB C2 GET LENGTH ERROR CODE STB LN6ER AND SAVE IT LNRCX JSB SSTOP SEND STOP LDB LNR6I GET POINTER TO LNRC6 JMP CEXT1 AND CONTINUE LNR6I DEF LNRC6 SPC 3 * * HERE ON STOP RECEIVED * LNRC5 LDB C10 JMP CEND TERMINATE SPC 3 * * HERE ON RETURN FROM SENDING STOP FROM LNRC3 OR LNRC4 * LNRC6 LDB LN6ER GET ERROR CODE SPC 3 * * HERE FOR COMPLETION EXIT * CEND JSB CLEAR CLEAR THE DRIVER AND CARD JSB STAT UPDATE STATUS CLA,INA CPA INT? LISTEN MODE? JMP I65 YES CLB NO CLA JMP CEXT3 COMPLETE * I65 CLA STA IJMP STA CMD LDA A2 STA I1 LDA A1 STA I2 LDA RB1 STA I3 LDA I.65 STA P65 JSB INT65 EXECUTE INT65 LDA I1 CLO SLA,ELA STF 1 LDA I2 LDB I3 JMP P65,I * INT? NOP I1 NOP I2 NOP I3 NOP P65 NOP * SPC 3 * * HERE FOR CONTINUATION EXIT * CEXT2 NOP LDB CEXT2 GET NEXT ADDRESS CEXIT LDA LSCMD GET LISTEN INSTRUCTION RSS CEXT1 LDA TRCMD SET CARD IN TRANSMIT MODE CEXT3 STB IJMP SAVE NEXT JUMP INSTRUCTION STA CMD SAVE CARD COMMAND LDA OTWRD GET WORD TO OUTPUT LDB OUTFG SEE IF WNE SHOULD OUTPUT SZB OTA1 OTA 0 YES LDA A2 CLO RESTORE REGS SLA,ELA STF 1 LDA A1 LDB RB1 CMD NOP COMMAND GOES HERE JMP I.65,I AND RETURN * LSCMD STC 0,C TRCMD STC 0 OUTFG NOP OTWRD NOP LN6ER NOP * * * STAT NOP EQT STATUS UPDATE ROUTINE CLF 0 TURN OFF INTERRUPT SYSTEM LDA EQTW2,I GET EQT WORD AND C374K MASK OFF EXTRA BITS IOR B STUFF IN B REGISTER STA EQTW2,I AND PUT IT AWAY JSB INTON TURN INTSYS ON JMP STAT,I * SKP * * SUBROUTINE TO CHECK FOR STOP AND PARITY * CCHCK NOP JSB CHECK JMP RETRY PARITY ERROR-RETRY. JMP LNRC5 STOP JMP CCHCK,I ALL OK * SPC 3 * * SUBROUTINE TO CHECK FOR PARITY AND STOP * CHECK NOP JSB PARCK CHECK FOR PARITY ERROR JMP CHCK1 NO PARITY ERROR LDB C200 GET BROKEN LINE CHECK SZA BROKEN LINE? JMP CHECK,I NO...JUST PARITY ERROR JMP CEND GO TO END CHCK1 ISZ CHECK CPA CC STOP? JMP CHECK,I YES ISZ CHECK NO JMP CHECK,I NORRMAL RETURN * SPC 3 * * PARITY CHECKING ROUTINE * PARCK NOP JSB RDD.S READ CARD SSB PARITY ERROR ISZ PARCK YES JMP PARCK,I RETURN * SPC 3 * * ROUTINE TO SET UP COUNTERS FOR INTERRUPT TRANSFER * ITRAN NOP LDA RBUFA GET ADDRESS STA TEMPB SAVE ADDRESS LDA RBUFL GET LENGTH CMA,INA CONVERT TO NEGITIVE COUNT STA TEMPC CLA GET A ZERO STA TEMPD SAVE PARITY ERROR COUNT JMP ITRAN,I RETURN * BSS 0 END s0  " 91703-18102 1606 S 0222 DS1/B SCE/3 MODULE: TEXEC              H0102 LASMB,R,L,C,N HED TEXEC 91703-16102 * (C) HEWLETT PACKARD CO. 1976 NAM TEXEC,3 91703-16102 REV A 760203 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 **************************************** * *TEXEC TERMINAL EXEC FOR BCS TO RUN UNDER DS1/B * *SOURCE PART # 91703-18102 * *REL PART # 91703-16102 * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 11-29-74 * *MODIFIED BY: BOB SHATZER (04-07-75) * DAN GIBBONS (01-07-76) * J-P BAUDOUIN (01-21-76) * DAN GIBBONS (01-27-76) * BOB SHATZER (02-03-76) * ***************************************** SPC 1 * * * THIS VERSION OF TEXEC SUPPORTS THE USE OF $DDT * THROUGH THE USE OF THE 'Z' ASSEMBLY OPTION. * * * * ENT RLOAD ENT ATTEN ENT CHAIN ENT RNPGM ENT RMESG ENT IDLE ENT PTPON,PTPOF,ESCON ENT HALT ENT .ENTR,GETLU ENT RMPAR,CLRIO * EXT STBSY,RESET EXT .IOC.,REXEC,RCRET EXT .MEM. EXT RPURG EXT RCLOS EXT RNAME EXT #TAM EXT $BUSY,$ESC EXT ATTN EXT PARMB IFZ EXT $DDT XIF SUP * A EQU 0 B EQU 1 * * * NOTE THAT TEXEC MAKES AN INITIALIZATION CALL TO #TAM PRIOR * TO MAKING ANY CALLS TO THE COMM LINK. THIS CALL SETS UP * THE PROPER LU FOR D.65 AND INITIALIZES THE CORRECT TIMEOUT * VALUE. HED OPERATOR PROMPT (BCS) * (C) HEWLETT PACKARD CO. 1976 *********************** * QUERY THE OPERATOR. ****************************** *********************** * JMP MSTRT MANUAL START ADDR = 2000B. IDLE NOP ENTRY. HALT EQU IDLE LDA WHERE ESTABLISH BAIL-OUT ADDR. JSB ATTN QUERY JSB WAIT * JSB INITL INITILIZE .MEM. TABLE * CLA CLEAR STANDBY FLAG. STA STBYF STA $BUSY CLEAR COMMUNICATIONS BUSY FLAG. STA $ESC CLEAR ESCAPE FLAG. * JSB WAIT WAIT FOR TTY TO COMPLETE JSB .IOC. DISPLAY ":" PROMPT. OCT 020002 JMP *-2 DEF COLON DEC 1 * JSB WAIT * LDA DM40 STA TEMP SET UP -40 LOOP COUNTER LDB .BUFR GET BUFFER ADDRESS LDA BLNKW AND DOUBLE BLANK STA B,I STORE BLANKS INTO BUFFER INB ISZ TEMP BUMP POINTERS AND COUNTERS JMP *-3 CONTINUE UNTIL BUFFER IS BLANKED * JSB .IOC. INPUT THE COMMAND. OCT 010401 JMP *-2 .BUFR DEF BUFFR DEC -80 * JSB .IOC. WAIT FOR INPUT COMPLETION OCT 40001 STATUS OF INPUT DEVICE SSA DEVICE STILL BUSY? JMP *-3 YES...WAIT UNTIL DONE * STB WAIT SAVE CHARACTER COUNT CLE,ERB CONVERT TO WORD COUNT SEZ IF ODD # OF WORDS INB INCREMNET WORD COUNT FOR ODD CHAR STB MSLEN SAVE WORD LENGTH LDB WAIT GET CHARACTER COUNT JSB TMESS GO PROCESS THE COMMAND. JMP QUERY * WAIT NOP JSB .IOC. I/O STATUS WAIT. OCT 40002 SSA JMP *-3 JMP WAIT,I * COLON ASC 1,:_ PROMPT CHARACTER. * * OPERATOR ATTENTION KEY WAS PRESSED. * WHERE DEF ATTEN ATTEN LDA DCRLF OUTPUT CR/LF. LDB B1 JSB OPDIS JSB WAIT JSB ABORT DO SOME HOUSEKEEPING. * * OPERATOR ERROR MESSAGES * M0950 LDA ETAM3 "SYNTAX ERROR". LDB B6 JSB OPDIS * = JMP QUERY SPC 1 ETAM3 DEF MTAM3 MTAM3 ASC 6,SYNTAX ERROR DM40 DEC -40 HED OPDIS (OPERATOR DISPLAY ROUTINE) * (C) HEWLETT PACKARD CO. 1976 * * DISPLAY OPERATOR MESSAGE ON TERMINAL DISPLAY DEVICE. * * CALLING SEQUENCE: * * (A) = ASCII MESSAGE ADDRESS. * (B) = + WORD COUNT OR - CHARACTER COUNT. * JSB OPDIS * OPDIS NOP * STA OPD1 STB OPD2 * JSB WAIT * JSB .IOC. OCT 020002 JMP *-2 OPD1 NOP BUFFER. OPD2 NOP COUNT. * JMP OPDIS,I SPC 5 STNBY NOP DISPLAY "STANDBY" MESSAGE. LDA STBYF SZA JMP STN INA STA STBYF LDA STNDF LDB B4 JSB OPDIS STN LDA $ESC ALLOW ESCAPE. SZA JSB ABORT LDB DELAY DELAY LOOP. INA,SZA JMP *-1 INB,SZB JMP *-3 JMP STNBY,I * STNDF DEF *+1 ASC 4,STANDBY HED OPERATOR INPUT DECIPHER ROUTINE * (C) HEWLETT PACKARD CO. 1976 ******************************** * DECIPHER OPERATOR MESSAGES. ********************** ******************************** * * CALLING * SEQUENCE: JSB TMESS * B CONTAINS # CHARACTERS. * DATA IN BUFFR. * TMESS NOP ENTRY. CLA STA TEMP+2 CLEAR CHARACTER FLAG. SZB,RSS CHECK IF COUNT ZERO. JMP TMESS,I YES, SO EXIT. STB MLEN SAVE CHARACTER LENGTH CMB,INB STB TEMP+3 NEGATIVE CHAR. COUNT. * LDB MD33 CLEAR PARAMETER AREA. STB TEMP LDB PARPT STA B,I INB ISZ TEMP JMP *-3 * LDB BUFAD INPUT BUFFER CLE,ELB BYTE ADDRESS. STB TEMPP LDA INIT STA TEMP+5 INITIAL PARAM POINTER. LDA TEMP+5,I STA TEMP+4 INITIAL STORE POINTER. ADA MD1 STA TEMP+6 PARAM CHAR COUNT ADDR. * DEC10 LDB TEMPP FETCH NEXT BYTE. CLE,ERB )LDA B,I SEZ,RSS CHECK IF TO EXAMINE UPPER/LOWER. ALF,ALF UPPER, SO ROTATE. AND M377 ISOLATE CHARACTER. * CPA COM CHECK FOR JMP DEC60 COMMA OR CPA BLNK BLANK JMP DEC65 DELIMITER. CPA COLN OR IS IT A ":" JMP DEC60 * LDB TEMP+6,I ADD -1 TO ADB MD1 CHARACTER STB TEMP+6,I COUNT. * LDB TEMP+2 CHECK IF TO BE UPPER/LOWER. SZB UPPER. JMP DEC40 LOWER. * ALF,ALF POSITION. STA TEMP+4,I STORE. ISZ TEMP+2 SET FLAG TO LOWER CHARACTER. JMP DEC50 GO INCREMENT DATA CHAR. * DEC40 IOR TEMP+4,I COMBINE UPPER/LOWER. STA TEMP+4,I STORE. CLA STA TEMP+2 RESET FLAG TO UPPER CHAR. ISZ TEMP+4 BUMP STORE LOCATION. LDA TEMP+4 DELIMIT "TELLOP". CPA PMEND JMP M0000 * DEC50 ISZ TEMPP BUMP BUFFER ADDR. ISZ TEMP+3 BUMP CHAR. COUNT. JMP DEC10 GO PROCESS NEXT CHAR. DEC55 ISZ PARAM DONE- BUMP PARAM COUNT. JMP M0000 GO TO EXIT. * DEC65 LDA PARAM FIRST PARAM? SZA,RSS JMP DEC60 YES, BLANK = DELIMITER. ISZ TEMPP NO, IGNORE BLANKS. ISZ TEMP+3 JMP DEC10 GO PROCESS NEXT CHARACTER. JMP DEC55 DEC60 CLA STA TEMP+2 RESET UPPER CHAR FLAG. * ISZ TEMP+5 BUMP PARAM POINTER. ISZ PARAM BUMP PARAM COUNT. LDA PARAM CPA B10 EIGHT PARAMS? JMP M0000 YES, GO PROCESS. * LDA TEMP+5,I STA TEMP+4 ADA MD1 STA TEMP+6 PARAM CHAR COUNT ADDR. JMP DEC50 GO INCREMENT DATA BUFFER. SPC 2 COLN OCT 72 HED MESSAGE PROCESSOR * (C) HEWLETT PACKARD CO. 1976 ********************************** * SEARCH COMMAND MNEMONIC TABLE. ******************* ********************************** * M0000 CLA CLEAR EQUIVALENCE STA EQCNT COUNTE*kR. LDA OPCNT INITIALIZE # MNEMONICS STA TEMP COUNTER. * LDA LDOPC SET UP MNEMONIC STA TEMP+1 TABLE STA T.PTR POINTER. * RSET LDA TAB FORM BYTE ADDR RAL OF INPUT COMMAND STA I.PTR MNEMONIC. * LDA OP1 # CHAR IN INPUT. SZA,RSS JMP M0950 ERROR IF NULL. ADA MD1 STA CHCNT NEG. CHAR COUNT -1. * GET LDA I.PTR GET NEXT INPUT BYTE. ISZ I.PTR ISZ CHCNT ANY MORE CHARACTERS? JMP *+2 YES. JMP MTCH? NO. CLE,ERA E=0 IF LEFT BYTE, ELSE =1. LDA A,I SEZ,RSS ALF,ALF POSITION. AND M377 ISOLATE. STA B SAVE. * LDA T.PTR,I GET TABLE MNEMONIC BYTE. SEZ,RSS ALF,ALF POSITION. AND M377 ISOLATE. SEZ ISZ T.PTR * CPA B COMPARE - EQUAL? JMP EQ YES * LOOP LDA TEMP+1 ADVANCE TO NEXT ENTRY ADA B5 IN MNEMONIC STA TEMP+1 TABLE. STA T.PTR CLA STA EQCNT ISZ TEMP BUMP MNEMONIC COUNTER. JMP RSET GO COMPARE. JMP M0500 END OF MNEMONICS, ERROR. * EQ ISZ EQCNT COUNT THIS MATCH. JMP GET GO TO NEXT CHAR. * MTCH? LDA TEMP+1 DID WE GET A MATCH ADA B3 LDA A,I CPA EQCNT ON THIS MNEMONIC? JMP *+2 YES. JMP LOOP NO. * * MATCH FOUND. GO TO PROCESSOR. * LDA TEMP+1 FETCH PROCESSOR ADDR. ADA B4 LDA A,I JMP A,I GO TO PROCESSOR. HED LOAD XXXXX COMMAND * (C) HEWLETT PACKARD CO. 1976 * * LOAD XXXXX * GENERATE AN RLOAD SUBROUTINE CALL TO * LOAD INTO THE TERMINAL THE PROGRAM XXXXX WHICH * RESIDES ON THE CENTRAL STATION DISC. * M0100 JSB NAMCK * M0110 JSB RLOAD DEF *+5 DEF STATS DEF IERR DEF P1 DEF IADR * JSB LDERR CHECK FOR NPRGL ERRORS. SSB,RSS SZB,RSS WAS PROGL DORMANT? * JMP QUERY YES. JSB STNBY NO, STANDBY. JMP M0110 TRY AGAIN. * NAMCK NOP LDA CP1 IS THERE A NAME? SZA,RSS JMP M0950 NO. LDA TAB+1 JSB TRAIL FILL TRAILING BLANKS. JMP NAMCK,I * LDERR NOP LDA STATS LDB IERR ANY PROGL ERRORS? SSB,RSS INA,SZA ANY LINE ERRORS RSS YES...PROGL OR LINE ERRORS JMP LDERR,I NO. B=IERR= 0 OR 1. LDA EPRGL CPB MD1 LDA EFIND YES, CAN'T FIND PROGRAM. CPB MD6 JMP LDERR,I LDB B6 JSB OPDIS JMP QUERY * EFIND DEF MTAM7 MTAM7 ASC 6,CAN'T LOCATE EPRGL DEF MPRGL MPRGL ASC 6,NPRGL ERROR HED RUN COMMAND * (C) HEWLETT PACKARD CO. 1976 * * RUN[*,P1,P2,P3,P4,P5] * * RUNAT NNN [,P1,P2,P3,P4,P5] * * RUN XXXXX [,P1,P2,P3,P4,P5] * * P1...P5 = OPTIONAL PARAMETERS. * NNN = START ADDRESS. * XXXXX = PROGRAM NAME. * M0200 LDA CP1 IS 1ST PARAM NULL OR "*"? LDB P1 SZA CPB ASTER JMP MOVIT YES. * LDA TAB+1 JSB TRAIL M0215 JSB RLOAD MUST BE A PROGRAM NAME. DEF *+5 LOAD THE PROGRAM. DEF STATS DEF IERR DEF P1 DEF IADR * JSB LDERR CHECK FOR PROGL ERRORS. SSB,RSS SZB,RSS WAS PROGL DORMANT? JMP MOVIT YES. JSB STNBY NO. JMP M0215 * * HERE WE COME FOR "RUNAT" COMMAND * GETAD LDA CP1 IS ADDRESS SUPPLIED? SZA,RSS JMP M0950 NO...ERROR JSB CVT1 CONVERT ADDRESS DEF P1 DEF CP1 STA IADR SAVE AS STARTING ADDRESS * MOVIT JSB MOVE JMP RUNIT YES. * * CONVERT OPTIONAL PARAMETERS TO BINARY AND STORE. * MOVE NOP LDA TAB+2 STA DCVTA ADDR OF DATA BUFFER. ADA MD1 STUA DCVTB ADDR OF CHAR COUNT. * LDA DO.P1 STA TEMP+4 DESTINATION ADDR. LDA MD5 STA TEMP+5 COUNTER * TRANS LDA DCVTB,I CHAR. COUNT. SZA,RSS ZERO? JMP STORE YES, STORE ZERO. * JSB CVT1 CONVERT TO BINARY. DCVTA DEF * DCVTB DEF * * STORE STA TEMP+4,I STORE VALUE. ISZ TEMP+4 LDA DCVTA ADA B4 STA DCVTA LDA DCVTB ADA B4 STA DCVTB * ISZ TEMP+5 DONE? JMP TRANS NO. JMP MOVE,I * RUNIT JSB RNPGM GO RUN THE PROGRAM. DEF *+7 DEF IADR DO.P1 DEF O.P1 DEF O.P2 DEF O.P3 DEF O.P4 DEF O.P5 * * WON'T COME BACK UNLESS NO START ADDRESS. * START LDA ENSA "NO START ADDRESS" LDB B6 JSB OPDIS JMP QUERY * O.P1 OCT 0 O.P2 OCT 0 O.P3 OCT 0 O.P4 OCT 0 O.P5 OCT 0 * ASTER OCT 025000 ENSA DEF NSA NSA ASC 6,NO START ADR HED ABORT COMMAND * (C) HEWLETT PACKARD CO. 1976 * * ABORT * * ABORT THE PROGRAM CURRENTLY RUNNING AT TERMINAL. * MSTRT JSB #TAM STARTUP PROCESSOR DEF *+2 MAKE INITIALIZATION CALL TO #TAM OCT 0 RSS ABORT NOP M0300 BSS 0 CLA STA $BUSY STA $ESC JSB .IOC. CLEAR I/O OCT 0 * JSB IDLE HED TELLOP COMMAND * (C) HEWLETT PACKARD CO. 1976 * * TELLOP * * DISPLAY A MESSAGE ON THE REMOTE OPERATOR DISPLAY * M0400 LDA MSLEN ADJUST WORD COUNT. ADA MD3 SZA,RSS ZERO? JMP M0950 YES, ERROR. STA MSLEN * JSB RMESG SEND THE MESSAGE. DEF *+4 DEF STATS DEF BUFFR+3 DEF MSLEN * JMP QUERY HED ALL RTE COMMANDS * (C) HEWLETT PACKARD CO. 1976 * M0500 LDA B7 SET UP STREAM TYPE STA STYP CLA SET FOR REQUEST STA RRSW CLA,INA SET TO SEND REQ JSB PTPON SET LINE B.USY DEF *+1 CLA,INA SET FOR REQUEST JSB #TAM DEF *+4 DEC 6 DEF STYP DEC -50 25 WORD BUFFER INA,SZA ANY ERRORS? JMP LINER YES...LINE ERROR M0501 CLA,INA SET FOR REQUEST JSB #TAM DEF *+4 DEC 5 DEF STYP PUT REPLY BACK IN REQUEST BUFFER DEC -50 MAX OF 25 WORDS INA,SZA LINE ERROR JMP LINER YES LDA STYP GET FIRST WORD JSB RPYCK SEE IF REPLY JMP M0501 NOT REPLY...IGNORE JSB PTPOF TURN OF LINE BUSY FLAG DEF *+1 LDA BUFAD GET OUTPUT BUFFER ADDRESS LDB MLEN GET LENGTH OF REPLY INB AND MAKE LENGTH INTO WORDS CLE,ERB CONVERT TO WORDS SZB ANYTHING TO PRINT JSB OPDIS SEND REPLY JMP QUERY AND RETURN SPC 2 LINER LDA ETAM2 SEND COM LINE MESSAGE LDB B6 JSB OPDIS "COM LINE ERR" JSB PTPOF TURN OFF LINE BUSY DEF *+1 JMP QUERY AND RETURN TO USER SPC 1 ETAM2 DEF MTAM2 MTAM2 ASC 6,COM LINE ERR HED CREATE XXXXXX COMMAND * (C) HEWLETT PACKARD CO. 1976 * * CREATE XXXXXX,KKK,NNNN,TT,S,CR * * XXXXXX = FILE NAME. * KKK = # BLOCKS. * NNNN = RECORD SIZE, OPTIONAL, .LE. 128 WORDS. * TT = FILE TYPE, OPTIONAL. * S = SECURITY CODE, OPTIONAL. * CR =CART. REF, OPTIONAL. * M0800 JSB NAMCK * LDA CP2 BLOCKS PARAM? SZA,RSS JMP M0950 NO, ERROR. JSB CVT1 CONVERT # BLOCKS. DEF P2 DEF CP2 STA TEMP * LDB CP3 RECORD SIZE? SZB,RSS JMP M0802 NO, IGNORE. JSB CVT1 YES, CONVERT. DEF P3 DEF CP3 STA TEMP+1 SZA SSA LEGAL SIZE? JMP M0950 NO, ERROR. ADA MD129 SSA,RSS JMP M0950 * M0802 LDA B3 LDB CP4 FILE TYPE? SZB,RSS JMP M0810 NO, SET DEFAULT = 3. JSB CVT1 YES, CONVERT. DEF P4 DEF CP4 M0810 STA TEMP+4 * CLA LDB CP5 SECURITY CODE? SZB,RSS JMP M0820 NO, SET DEFAULT = 0. JSB CVT1 YES, CONVERT. DEF P5 DEF CP5 M0820 STA SECUR * CLA LDB CP6 SEE CR SUPPLIED SZB,RSS SUPPLIED? JMP M0840 NO JSB CVT1 YES...CONVERT TO DEC DEF P6 DEF CP6 M0840 STA P6 SAVE CR * JSB RCRET CREATE A REMOTE FILE. DEF *+8 DEF STATS DEF IERR DEF P1 FILE NAME. DEF TEMP # BLOCKS, REC. SIZE. DEF TEMP+4 FILE TYPE. DEF SECUR SECURITY CODE. DEF P6 * JSB FMGER CHECK IF WE HAD A FMGR ERROR JMP M1000 GO CLOSE THE FILE * M0830 JSB FMGER FILE MANAGER ERROR? * JMP QUERY HED RENAME COMMAND * (C) HEWLETT PACKARD CO. 1976 * * RENAME XXXXXX,YYYYYY,S,CR * * XXXXXX = OLD FILE NAME. * YYYYYY = NEW FILE NAME. * S = SECURITY CODE, OPTIONAL. * CR =CART REF, OPTIONAL * M0900 JSB NAMCK IS OLD NAME SPECIFIED? * LDA CP2 IS NEW NAME SPECIFIED? SZA,RSS JMP M0950 NO, ERROR. LDA TAB+2 YES. JSB TRAIL * CLA LDB CP3 SECURITY CODE? SZB,RSS JMP M0910 NO, SET DEFAULT = 0. JSB CVT1 YES, CONVERT. DEF P3 DEF CP3 M0910 STA SECUR * CLA LDB CP4 SEE IF CR SUPPLIED SZB,RSS JMP M0920 NOT SUPPLIED JSB CVT1 CONVERT TO BINARY DEF P4 DEF CP4 M0920 STA P4 SAVE FOR RENAME * JSB RNAME RENAME A REMOTE FILE. DEF *+7 DEF STATS DEF IERR DEF P1 OLD NAME. DEF P2 NEW NAME. DEF SECUR DEF P4 *  JMP M0830 HED CLOSE COMMAND * (C) HEWLETT PACKARD CO. 1976 * * CLOSE XXXXXX * * XXXXXX = FILE NAME. * M1000 JSB NAMCK IS THERE A FILE NAME? * JSB RCLOS CLOSE A REMOTE FILE. DEF *+4 DEF STATS DEF IERR DEF P1 FILE NAME. * JMP M0830 HED PURGE COMMAND * (C) HEWLETT PACKARD CO. 1976 * * PURGE XXXXXX,S * * XXXXXX = FILE NAME * S = SECURITY CODE, OPTIONAL. * CR =CART REF, OPTIONAL * M1100 JSB NAMCK NAME GIVEN? * CLA LDB CP2 SECURITY CODE? SZB,RSS JMP M1110 NO, SET DEFAULT = 0. JSB CVT1 YES, CONVERT. DEF P2 DEF CP2 M1110 STA SECUR * CLA LDB CP3 SEE IF CR SUPPLIED SZB,RSS JMP M1120 NOT SUPPLIED JSB CVT1 CONVERT TO BINARY DEF P3 DEF CP3 M1120 STA P3 SAVE FOR PURGE * JSB RPURG PURGE A REMOTE FILE. DEF *+6 DEF STATS DEF IERR DEF P1 DEF SECUR DEF P3 * JMP M0830 HED DLIST PROCESSOR * (C) HEWLETT PACKARD CO. 1976 * *DLIST [FILTER][,MSEC CODE][,CR][,TYPE] * * WHERE: *MSEC CODE=MASTER SECURITY CODE *CR =DISK LU *TYPE =FILE TYPE FILTER * M1200 LDA CP1 MOVE NAME TO PARMB SZA NAME SUPPLIED? JSB NAMCK YES...SPACE FILL LDA P1 MOVE NAME TO PARMB STA DLSN1 LDA P1+1 STA DLSN1+1 LDA P1+2 STA DLSN3 LDA CP2 MASTER SECURITY CODE SZA,RSS SUPPLIED? JMP M1201 NO JSB CVT1 YES...CONVERT IF DEF P2 DEF CP2 M1201 STA DMCOD SAVE MASTER SECURITY CODE LDA CP3 SEE IF CART LU SUPPLIED SZA,RSS NOT SUPPLIED JMP M1202 JSB CVT1 CONVERT TO BINARY DEF P3 DEF CP3 M1202 STA MDCR SAVE CART. LU LDA CP4 IS IF TYPE FILTER SUPPAXLIED CLE,SZA,RSS SUPPLIED? JMP M1203 NO JSB CVT1 YES...CONVERT IF DEF P4 DEF CP4 CCE SET FOR SUPPLIED M1203 RAL,ERA SET IN SIGN BIT IF SUPPLIED STA DTYP CLA SET FOR NEW REQ STA NEWRQ M1204 CLA,INA SET IN STREAM TYPE STA DSTRM LDA DEC27 54 CHAR LINE STA DLEN SAVE LENGTH JSB PTPON SET LINE BUSY DEF *+1 CLA SET FOR RECIEVE DATA JSB #TAM DEF *+6 DEC 8 DEF DSTRM DEC -50 PRMBA DEF PARMB DEC -54 INA,SZA ANY ERRORS? JMP LINER YES M1205 CLA,INA SET TO RECIEVE REQ JSB #TAM DEF *+4 DEC 5 DEF DSTRM DEC -50 INA,SZA ANY ERRORS? JMP LINER YES LDA DSTRM GET FIRST WORD OF REPLY JSB RPYCK SEE IF REPLY JMP M1205 NOT...IGNORE JSB PTPOF TURN OFF LINE BUSY DEF *+1 LDA DLST SEE IF WE ARE DONE SZA DONE? JMP QUERY YES LDA PRMBA LDB DLEN SEND OUT LINE JSB OPDIS JSB WAIT WAIT FOR TTY TO COMPLETE JMP M1204 GET ANOTHER LINE SPC 1 DEC27 DEC 27 HED RLOAD PROCESSING * (C) HEWLETT PACKARD CO. 1976 * *RLOAD...LOAD A REMOTE PROGRAM * CALLING SEQUENCE * JSB RLOAD * DEF *+5 * DEF LINE STATUS * DEF FILE MANAGER ERROR STATUS * DEF NAME * DEF STARTING ADDRESS * * STATUS ERROR CODES * =#TAM ERROR CODES * * ERROR CODE * 1=PROGL BUSY...TRY LATTER * 0=NO ERROR * -1=OPEN ERROR ON FILE * -2=FILE READ ERROR * -3=TRANSMISSION ERROR * -4=TRANSMISSION ERROR * -5=FILE CLOSE ERROR (MEMORY PROTECT) * -6=NO STARTING ADDRESS * SPC 2 PRGST NOP PRGER NOP PRGNM NOP PRGSA NOP RLOAD NOP JSB .ENTR GET PRAMS DEF PRGST LDA PRGSA GEsT STARTING ADDRESS LOC (OPTIONAL) STA PGSTA SAVE FOR LATTER JSB .IOC. OCT 40000 SSA DRIVERS ALL DONE JMP *-3 NO JSB PTPON SET LINE BUSY DEF *+1 CLA CLEAR OUT TEMPS STA PRGER,I CLEAR OUT ERROR WORD STA LSTAT STATUS WORD STA LODAD ADDRESS (OF DATA STA LDERR ERROR WORD STA LSC SECURITY CODE STA LDNFG DONE FLAG STA LNWRQ NEW REQUEST FLAG STA 3 CLEAR OUT TRANSFER ADDRESS STA PRGSA AND OPTIONAL STARTING ADDRESS STA FATAL CLEAR OUT FATAL FLAG * LDB MD3 MOVE IN NAME LDA LPNMA GET ADDRESS OF NAME AREA IN PARMB STA RLODA SAVE IN TEMP RLOD1 LDA PRGNM,I MOVE IN NAME STA RLODA,I SAVE NAME ISZ PRGNM ISZ RLODA INB,SZB DONE? JMP RLOD1 NO * * NOW GET THE PROGRAM * RLOD2 LDA $ESC DO THEY WANT OUT? SZA,RSS ? JMP RLD22 NO STA LDNFG YES...TELL PROGL STA FATAL SET FATAL NON ZERO RLD22 LDA B3 SET IN STREAM TYPE STA LSTRM CLA,INA JSB #TAM SEND REQ DEF *+4 DEC 6 DEF LSTRM DEC -50 JSB CKLST CHECK LOADER STATUS RLD23 CLA,INA READ REPLY JSB #TAM DEF *+4 DEC 5 DEF LSTRM DEC -50 JSB CKLST LDA LSTRM GET FIRST WORD OF REPLY JSB RPYCK SEE IF REPLY JMP RLD23 NOT REPLY...IGNORE LDA LSTAT READ THE STATUS CPA B1 IS THERE DATA? RSS YES JMP RLOD3 NO JSB MEMCK CHECK MEMORY BOUNDS LDA PLNGH GET LENGTH CLE,ELA CONVERT TO NEGATIVE BYTES CMA,INA STA DLNGH SAVE LENGTH CLA SET TO READ DATA JSB #TAM DEF *+4 DEC 5 DEF LODAD,I LOAD ADDRESS DLNGH NOP JSNLHB CKLST CHECK STATUS JMP RLOD2 GET NEXT RECORD SPC 2 * * HERE IF NO DATA THERE * RLOD3 SSA ERROR? JMP LODER YES LDB FATAL ANY PREVIOUS ERRORS? SZB JMP RDON YES...GET OUT CPA B3 ID SEG COMING? JMP RLOD4 YES JSB #TAM DON'T WANT IT SEND STOP DEF *+2 DEC 2 * RLOD4 LDA LPNAM+1 GET STARTING ADDRESS LDB LODAD SEE IF STARTING ADDRESS SUPPLIED SZB,RSS ZERO...NOT SUPPPLIED CLA STA 3 SET IN STARTING ADDRESS LDB PGSTA DO THEY WANT STARTING ADDRESS SZB STA B,I LDB MD6 SZA,RSS STB PRGER NO..TELL THEM RDON JSB RESET SEE IF BUSY SET JSB PTPOF CLEAR EXC KEY DEF *+1 JMP RLOAD,I AND RETURN SPC 1 SPC 2 * * ROUTINE TO GET LOAD ERROR * LODER CLB SET IN CORRECT ERROR CODE CPA MD2 FILE MANAGER ERROR? CCB YES...-1 ERROR CPA MD3 BUSY? CLB,INB YES...SET TO +1 SZB,RSS HAVE AN ERROR CODE? LDB MD2 NO...NOW WE DO STA PRGER,I SAVE ERROR CODE JMP RDON AND GET OUT SPC 1 * * SUBROUTINE TO CHECK ON LINE STATUS * CKLST NOP STA PRGST,I SAVE STATUS INA,SZA ANY ERRORS? JMP RDON YES JMP CKLST,I NO fN SPC 2 * * SUBROUTINE TO DO MEMORY BOUNDS CHECKING * MEMCK NOP LDA LODAD GET STARTING ADDRESS ADA PLNGH GET ENDING ADDRESS ADA MD1 STA LADDR LWA FOR THIS RECORD * ADA LWAM CHECK UPPER LIMIT USER CORE SSA,RSS JMP MMERR ERROR * LDA LODAD CHECK LOWER LIMIT ADA FWAM SSA,RSS JMP MEXIT OF FWAM LE ADD LE LWAM LDA LADDR CHECK LOW BAS PAGE ADA FWABP SSA JMP MMERR ERROR LDA LADDR ADA LWABP CHECK UPPER LIMIT BASE PAGE SSA,RSS JMP MMERR ERROR * MEXIT JMP MEMCK,I AND RETURN * MMERR LDA DMPV LDB B6 SEND OUT MESSAGE JSB OPDIS "MP VIOLATION" LDA MD5 STA FATAL STA PRGER,I SET IN ERROR CODE JSB #TAM SEND STOP...THIS WILL STOP PROGL DEF *+2 DEC 2 JMP RLOD2 LET PROGL TERMINATE NORMALLY JMP RDON AND GET OUT SPC 1 DMPV DEF MPV MPV ASC 6,MP VIOLATION SPC 1 PGSTA NOP RLODA NOP LPNMA DEF LPNAM HED PROCESS FILE MANAGER ERRORS * (C) HEWLETT PACKARD CO. 1976 * * IF FILE MANAGER ERROR, DISPLAY ERROR MESSAGE. * FMGER NOP LDA IERR SSA,RSS JMP FMGER,I NO ERRORS. * CMA,INA MAKE POSITIVE. LDB FMEDF JSB BTOA CONVERT TO ASCII. * LDA FME LDB B6 JSB OPDIS PRINT MESSAGE. * JMP QUERY * FME DEF FMERR FMEDF DEF FMERR+5 FMERR ASC 6,FMP ERR - HED TRAIL ROUTINE * (C) HEWLETT PACKARD CO. 1976 * * CONVERT TRAILING BINARY ZEROES TO ASCII BLANKS. * * CALLING SEQUENCE: * * (A) = ADDR OF 3-WORD ASCII PARAM. * JSB TRAIL * TRAIL NOP STA TEMP LDA MD3 STA TEMP+1 TLOOP LDB BLNKW LDA TEMP,I SZA,RSS JMP STUFF * CLB AND M377 SZA,RSS LDB BLNK * STUFF LDA TEMP,I IOR B {STA TEMP,I ISZ TEMP ISZ TEMP+1 JMP TLOOP JMP TRAIL,I HED TCE/3 UTILITY SUBROUTINES * (C) HEWLETT PACKARD CO. 1976 ********************* * GET LOGICAL UNIT. ******************************** ********************* * * PURPOSE - * GET LOGICAL UNIT AT THE CENTRAL COMPUTER FOR * THIS TERMINAL. * * CALLING * SEQUENCE: JSB GETLU * DEF *+2 * DEF LU SPC 3 GETLU NOP JSB STBSY SET BUSY ISZ GETLU LDA GETLU,I STA TMP ADDR FOR LU. ISZ GETLU * GETL CLA,INA SEND REQUEST. JSB #TAM DEF *+4 DEC 6 DEF COMND DEC -2 INA,SZA ANY ERRORS? JMP GETL YES...TRY AGAIN * GETL1 CLA,INA RECEIVE REQUEST. JSB #TAM DEF *+4 DEC 5 DEF TEMP DEC -6 * INA,SZA ANY ERRORS? JMP GETL YES, TRY AGAIN. LDA TEMP GET FIRST WORD OF REPLY JSB RPYCK SEE IF REPLY JMP GETL1 NOT REPLY...IGNORE JSB RESET RESET BUSY FLAG * LDA TEMP+2 STORE LOGICAL UNIT. STA TMP,I (A) = LU. * JMP GETLU,I RETURN. * COMND OCT 0 2-WORD "PARMB". NOP SKP * * SUBROUTINE TO CHECK IF REPLY IS RECIEVED * CALLING SEQUENCE * JSB RPYCK * ERROR RETURN * NORMAL RETURN * A REG=FIRST WORD OF REPLY * SPC 1 RPYCK NOP RAL SSA REQUEST OR REPLY ISZ RPYCK REQUEST JMP RPYCK,I AND RETURN SKP .ENTR NOP LDB .ENTR,I STB DEST CMB ADB .ENTR STB MPLS1 ADB DEST ADB MD1 LDA 1,I STA SORCE IOR IBIT STA 1,I RAL,CLE,ERA CMA,INA ADA SORCE,I STA 1 CMA,INA ADA MPLS1 SSA LDB MPLS1 ISZ .ENTR CMB,INB LOOP1 INB,SZB,RSS JMP .ENTR,I ISZ SORCE LDA PSORCE,I IND1 RAL,CLE,SLA,ERA JMP INDIR STA DEST,I ISZ DEST JMP LOOP1 INDIR LDA 0,I JMP IND1 IBIT DEF 0,I * DEST NOP MPLS1 NOP SORCE NOP SKP *************************** * EXECUTE LOADED PROGRAM. ************************** *************************** * * PURPOSE - TRANSFER CONTROL TO A PROGRAM IN THE * TERMINAL. * * CALLING * SEQUENCE: JSB RNPGM * DEF RETURN ADDRESS * DEF START ADDRESS (OPT.) * DEF P1 OPTIONAL PARAMETERS. * DEF P2 ADDR OF FIRST PARAM IS * DEF P3 PASSED IN THE B-REG * DEF P4 TO THE PROGRAM. * DEF P5 SPC 5 RNPGM NOP ENTRY. * JSB SETUP INITIALIZE FOR "RUN PROGRAM". * LDB PARV+1 (B) = ADDR OF OPTIONAL PARAM DEF'S. * LDA PARV,I WAS A START SZA ADDRESS SPECIFIED? STA IADR SAVE THE ADDRESS. LDA IADR SZA JMP IADR,I NO, USE DEFAULT. JMP URTN,I ERROR. SKP ************************ * SEND REMOTE MESSAGE. **************************** ************************ * * PURPOSE - SENDS AN ASCII MESSAGE TO THE CENTRAL * OPERATOR. * * CALLING * SEQUENCE: JSB RMESG * DEF *+4 * DEF STATUS * DEF MESSAGE ADDRESS * DEF MESSAGE LENGTH SPC 5 RMESG NOP ENTRY. * JSB SETUP INITIALIZE FOR "REMOTE MESSAGE". * LDA PARV STA RMSTA DEF STATUS. LDA PARV+1 GET USER MESSAGE ADDR. STA TEMP USE FOR SOURCE BUFFER ADDR. LDB PARV+2,I SSB,RSS USE DEFAULT IF NEGATIVE LENGTH RM1 CMB,INB,SZB,RSS NEGATE WD-CNT, CHECK FOR ZERO JMP RDFLT BAD LENGTH. USE DEFAULT VALUE LDA B MUST BE .LE. 37 WORDS. ADA D37 SSA,RSS JMP RM2 RDFLT LDB D36 JMP RM1 RM2 STB MSLEN SAVE MESSAGE LENGTH LDA BUFAeD DESTINATION BUFFER ADDR. ADA B3 STA TEMP+1 RMOVE LDA TEMP,I MOVE MESSAGE TO OUTPUT BUFFER. STA TEMP+1,I ISZ TEMP ISZ TEMP+1 INB,SZB JMP RMOVE * LDA TMID STORE ID HEADER IN BUFFER. STA BUFFR LDA TMID+2 STA BUFFR+2 LDA LU LU ALREADY KNOWN? SZA JMP RID YES. JSB GETLU NO, GET IT. DEF *+2 DEF LU RID LDB TMIDF JSB BTOA CONVERT LU TO ASCII. * LDA MSLEN RETRIEVE MSG LENGTH CMA,INA FORM POSITVE WORD COUNT ADA B3 ADD HEADER WORD COUNT STA TEMP SAVE LENGTH FOR 'REXEC' CALL * JSB REXEC SEND THE MESSAGE. DEF *+6 RMSTA NOP STATUS. DEF B2 RCODE. DEF B1 CONTROL WORD. DEF BUFFR ADDRESS DEF TEMP LENGTH. * JMP URTN,I RETURN TO CALLER. * D36 DEC 36 TMIDF DEF BUFFR+1 TMID ASC 3,=S : SKP ****************************************** * LOAD PROGRAM FROM CENTRAL AND EXECUTE. *********** ****************************************** * * PURPOSE - CALLS RLOAD TO LOAD THE PROGRAM, THEN * CALLS RNPGM TO EXECUTE IT. * * CALLING * SEQUENCE: JSB CHAIN * DEF RETURN ADDRESS * DEF STATUS * DEF ERROR CODE * DEF PROGRAM NAME. * DEF START ADDRESS (OPT.) * DEF P1 OPTIONAL PARAMS. * DEF P2 * DEF P3 * DEF P4 * DEF P5 SPC 5 CHAIN NOP ENTRY. * JSB SETUP INITIALIZE FOR "CHAIN". LDA URTN STA CHAIN * LDA PARV TRANSFER PARAM ADDR'S. STA CTEMP+2 ADDR OF ISTAT PARAM. LDA PARV+1 STA CTEMP+3 ADDR OF IERR PARAM. LDA PARV+2 STA PNAM ADDR OF PROG NAME. LDA PARV+3 SZA FETCH START ADDR LDA A,I (IF SPECIFIED).  REXEC TIME CALL? CPA D11 RSS JMP CMPL4 NO. LDA P.PTR,I YES. RETURN TIME ARRAY. JSB INDCK CHASE DOWNTHOSE LITTLE BITS STA P.PTR LDB MD5 TLOOP LDA I.PTR,I STA P.PTR,I ISZ P.PTR ISZ I.PTR INB,SZB JMP TLOOP JMP EXIT * CMPL4 CPA D13 REXEC I/O STATUS CALL? RSS JMP EXIT NO. ISZ P.PTR SKIP OVER CONTROL WORD. LDB MD2 YES. PASS PARAMS. JSB PINTG * * RETURN TO USER PROGRAM. * EXIT LDA CALL,I GET RETURN ADDRESS. STA TEMP1 LDA REPLY+2 SET A, B REGISTERS. LDB REPLY+3 JMP TEMP1,I RETURN. SKP ********************** * SUBROUTINE SECTION ******************************* ********************** * * STORE INTEGER PARAM FROM USER CALL INTO PARMB. * INTGR NOP JSB PCHEK IS THE PARAM SPECIFIED? JMP MSSNG NO. LDA B202 YES, STORE CONTROL BYTE. JSB STBYT JSB GET.P FETCH PARAM VALUE. JSB STWRD STORE IN PARMB. JMP INTGR,I (A) HAS THE VALUE. * * STORE OPTIONAL INTEGER PARAM (IF SPECIFIED) FROM * USER CALL INTO PARMB. * OPTN NOP JSB PCHEK IS PARAM SPECIFIED? JMP OPTN,I NO (LEAVE P.PTR ALONE). JSB INTGR YES, STORE IT. JMP OPTN,I (A) HAS THE VALUE. * * STORE 6 CHAR ASCII STRING FROM USER CALL * INTO PARMB. * STRNG NOP JSB PCHEK IS PARAM SPECIFIED? JMP MSSNG NO. * LDA B6 STORE CONTROL BYTE. JSB STBYT LDA MD3 STA TEMP2 WORD COUNTER. JSB GET.A STA TEMP3 STRING START ADDR. * STR LDA TEMP3,I FETCH ASCII CHARACTERS. ALF,ALF JSB STBYT STORE LEFT BYTE. LDA TEMP3,I JSB STBYT STORE RIGHT BYTE. * ISZ TEMP3 BUMP TO NEXT INPUT WORD. ISZ TEMP2 DONE? JMP STR NO. JMP STRNG,I YES, EXIT. * * STORE A-REGISTER CONTENTS INTO NEXT WORD * OF SAVED VALUES. * RPARM NOP LDB U.PTR,I STA B,I ISZ U.PTR JMP RPARM,I * * STORE USER BUFFER LENGTH IN PARMB, DATA-FLAG, * AND SAVE IT. * STLEN NOP JSB INTGR STORE IN PARMB. * SZA,RSS JMP WRONG SPECIFIED, BUT ZERO. SSA,RSS NEGATIVE? JMP STL NO. * CMA,INA YES, MAKE POSITIVE. INA ROUND UP. ERA,CLE,ELA RAR CONVERT TO WORD COUNT. * STL STA PARMB,I STORE IN DATA-FLAG. JSB RPARM PASS BACK TO CALLER. JMP STLEN,I EXIT. * WRONG LDA MD4 JMP SSTAT * * TEST WHETHER THE USER HAS SPECIFIED * A PARAMETER. * JSB PCHEK * ERROR RETURN (PARAM NOT GIVEN) * NORMAL RETURN * PCHEK NOP LDA P.PTR PARAM ADDR CMA,INA ADA CALL,I RETURN ADDRESS. ADA MD1 SSA,RSS ISZ PCHEK JMP PCHEK,I * * GET VALUE OF NEXT PARAM IN USER CALL * GET.P NOP JSB GET.A FETCH PARAM ADDR. LDA A,I GET PARAM VALUE. JMP GET.P,I * * GET ADDRESS OF NEXT PARAM IN USER CALL * AND BUMP PARAM POINTER. * GET.A NOP LDA P.PTR,I GET PARAMETER ADDRESS. JSB INDCK CHASE DOWN THOSE BITS ISZ P.PTR BUMP PARAM POINTER. JMP GET.A,I * * STORE WORD (IN A-REG) IN PARMB. * STWRD NOP STA TEMP2 SAVE WORD. ALF,ALF JSB STBYT STORE LEFT BYTE. LDA TEMP2 JSB STBYT STORE RIGHT BYTE. LDA TEMP2 RESTORE WORD. JMP STWRD,I RETURN. * * STORE BYTE IN NEXT BYTE OF PARMB. * STBYT NOP (A) = BYTE RIGHT JUSTIFIED. AND M377 ISOLATE NEW BYTE. STA TEMP1 SAVE. LDB B.PTR FORM WORD ADDR OF PARMB. CLE,ERB (E) = LEFT/RIGHT FLAG. ADB PARMB * LDA B,I INSERT NEW BYTE INTO PARMB. SEZ,RSS ALF,ALF AND yM377L IOR TEMP1 SEZ,RSS ALF,ALF STA B,I * ISZ B.PTR BUMP RELATIVE BYTE POINTER. JMP STBYT,I RETURN. * * * PASS A-REG CONTENTS TO USER PARAM. * RWORD NOP STA TEMP1 JSB PCHEK IS PARAM SPECIFIED? JMP RWORD,I NO. LDA P.PTR,I GET ADDRESS JSB INDCK CHECK INDIRECTS LDB TEMP1 GET VALUE STB A,I AND SAVE IT ISZ P.PTR JMP RWORD,I * * PASS N PARAMS TO USER PROGRAM. (B)= -N. * PINTG NOP STB TEMP2 PLOOP LDA I.PTR,I JSB RWORD ISZ I.PTR ISZ TEMP2 JMP PLOOP JMP PINTG,I SPC 2 * * SUBROUTINE TO SET THE DRIVER BUSY FLAG * CALLING SEQUENCE * JSB STBSY * B REG LOST * STBSY NOP LDB $BUSY STB SVBSY SAVE PREVIOUS STATUS CLB,INB SET IT BUSY STB $BUSY SET BUSY FLAG JMP STBSY,I AND RETURN SPC 2 * * SUBROUTINE TO CHASE DOWN INDIRECTS * CALLING SEQUENCE * JSB INDCK * A REG=ADDRESS B REG NOT TOUCHED * INDCK NOP RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I RETURN WITH DIRECT ADDRES SKP ********************************* * CONSTANTS AND WORKING STORAGE ******************** ********************************* * B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 D8 DEC 8 D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D13 DEC 13 D124 DEC 124 D154 DEC 154 D160 DEC 160 D162 DEC 162 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD4 DEC -4 MD5 DEC -5 MD7 DEC -7 MD150 DEC -150 MD163 DEC -163 B50 OCT 50 B100 OCT 100 B200 OCT 200 B300 OCT 300 B20K OCT 20000 B30K OCT 30000 B202 OCT 202 B202L OCT 101000 B204 OCT 204 M377 OCT 377 M377L OCT 177400 MSK OCT 177700 * RDATA NOP READ DATA FLAG. FCN NOP FUNCTION CODE. CALL NOP AD9KHFBDR OF USER CALL +1. .FCN NOP 0= REXEC, -= RFA. .RCD NOP REXEC REQUEST CODE. P.PTR NOP USER CALL PARAM POINTER. B.PTR NOP PARMB BYTE POINTER. U.PTR NOP I.PTR NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP ISTAT NOP COMMUNICATION STATUS. $BUSY NOP SVBSY NOP DELAY NOP DEL NOP * PARMB NOP PRMB BSS 26 PARAM BUFFER (PARMB). * RPLY DEF REPLY REPLY BSS 12 REPLY BUFFER. * UPARM DEF UPRM UPRM DEF DADR DEF DLEN DEF PLEN * DABFA DEF PRMBA * PRMBA DEF PRMB PLEN NOP DADR NOP DLEN NOP * BSS 0 * END H   91703-18104 1614 S 0122 DS1/B SCE/3 MODULE: #TAM              H0101 ~`ASMB,R,L,C HED #TAM 91703-16104 * (C) HEWLETT PACKARD CO. 1976 NAM #TAM 91703-16104 REV A 760329 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 * ************************************************** * *#TAM TERMINAL ACCESS MONITOR FOR BCS TO RUN IN RTEII * *SOURCE PART # 91703-18104 * *REL PART # 91703-16104 * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 09-30-74 * *MODIFIED BY: BOB SHATZER (04-07-75) * DAN GIBBONS (01-08-76) * ************************************************** SPC 1 * * THIS SUBROUTINE INTERFACES A BCS USER TO THE * D.65 COMMUNICATIONS DRIVER. * ENT #TAM,$C.LU,TMOUT,INT65 * EXT .IOC.,XEQT * * DURING GENERATION, THE USER MUST SPECIFY THE DATA RATE OF HIS * PARTICULAR COMMUNICATIONS LINE IN ORDER FOR THE I/O TIMEOUT * VALUES TO BE SET UP PROPERLY. THIS IS DONE BY DESIGNATING A * DIFFERENT UNIT NUMBER FOR EACH DATA RATE, AS FOLLOWS: * * UNIT # DATA RATE I/O CARD * * 0 1 MEG 12665 * 1 150 12773 * 2 300 12773 * 3 600 12773 * 4 1200 12773 * 5 2400 12773 * 6 4800 12773 * 7 9600 12773 * * IF THE USER'S MODEM RATE IS NOT AS SPECIFIED, THE NEXT SLOWEST * RATE SHOULD BE USED. * * THE SETUP IS DONE BY AN INITIALIZATION CALL TO #TAM, AS SHOWN * BELOW. THIS CALL MUST BE MADE PRIOR TO THE FIRST USAGE OF THE * COMM LINK BY THE SATELLITE OR CENTRAL. IF D.65 IS NOT CONFIGURED * INTO THE SYSTEM, #TAM WILL HALT AT THE END OF THE INITIALIZATION * ATTEMPT (HLT 13B). #TAM IS INITIALIZED UPON ITS FIRST ENTRY,SO * THE INITIALIZATION CALL NEED NOT BE MADE PRIOR TO A CALL TO #TAM. * * ON RETURN TO THE CALLER IF COMPLETED IMMEDIATELY, THE A * REGISTER CONTAINS THE STATUS CODE AND THE B * REGISTER WILL POINT TO THE BUFFER. * * STATUS CODES: * * -3 COMMUNICATIONS I/O ERROR. * -1 REQUEST COMPLETED, NO ERRORS. * 0 REQUEST BEING PROCESSED. * 1 ILLEGAL TAM REQUEST CODE. * 2 COMMUNICATIONS LINE DOWN OR XMSN ERROR. * 3 NOT ENOUGH PARAMS IN TAM CALL. * 4 ILLEGAL REQUEST LENGTH RECEIVED * 5 RFA BUSY (REQUEST OVERFLOW AT REMOTE). * * FOR ERROR STATUS BITS SET IN EQT: * * 61 - BIT 2 LENGTH ERROR . * 62 - BIT 3 ILLEGAL STOP SENT..HAVE RETRIED * 63 - BIT 4 SIMULTANEOUS REQUEST. * * (60-63 DECIMAL = 74-77 OCTAL) * * CALLING * SEQUENCES: * A-REG. = 1 FOR SEND/RECV "REQUEST". * = 0 FOR SEND/RECV "DATA". * * PUT DATA STREAM: * * JSB #TAM * DEF *+4 * DEC 6 * DEF DATA BUFFER * DEC BUFFER LENGTH (NEGATIVE BYTES) * * * GET DATA STREAM: * * JSB #TAM * DEF *+4 * DEC 5 * DEF DATA BUFFER * DEC BUFFER LENGTH (NEGATIVE BYTES) * * * EXTENDED PUT, CONVERSATIONAL - * * TRANSMIT REQUEST AND RECEIVE OR TRANSMIT DATA * (SPECIAL INTERFACE TO D.65 FOR REMOTE CALLS * THAT INVOLVE A DATA BUFFER): * * (A) = 0 FOR RECEIVE DATA * (A) = 1 FOR TRANSMIT DATA * * JSB #TAM * DEF *+6 * DEC 8 * DEF REQUEST BUFFER ADDRESS * DEC REQ. BUFFER LENGTH (NEG. BYTES) * DEF DATA BUFFER ADDRESS * DECi DATA BUFFER LENGTH (NEGATIVE BYTES) * * * TRANSMIT STOP REPLY: * * JSB #TAM * DEF *+2 * DEC 2 * * * INITIALIZE: * * JSB #TAM * DEF *+2 * OCT 0 * * REGISTERS ARE MEANINGLESS UPON ENTRY AND EXIT FROM THIS CALL. * * NOTE THAT THIS CALL MUST BE MADE PRIOR TO USAGE OF THE COM- * MUNICATIONS LINK BY EITHER THE SATELLITE OR CENTRAL. * * #TAM NOP INA STA IMODE SAVE REQUEST/DATA CODE. * THERE JSB $INIT GO AND INITIALIZE I/O LDA D0 GET A NOP STA THERE AND OVERLAY INITIALIZATION CALL * LDA #TAM LDB A,I SAVE RETURN ADDRESS. STB RETRN INA LDB A,I (B) = REQUEST CODE STB RCODE INA STA PARAD ADDR OF PARAMETER LIST * CMA,INA ADA RETRN (A) = NUMBER OF PARAMETERS STA N.PRM * CPB D0 INITIALIZE? JMP RETRN,I YES - RETURN, SINCE IT'S BEEN DONE CPB D2 STOP REPLY? JMP STOP YES, TAKE SHORTCUT. LDA PARAD FETCH BUFFER ADDRESS. JSB INDCK STA TRA1 PLACE INTO IOC CALL. STA RTNB PSEUDO STMID ADDR. ISZ PARAD LDA PARAD,I FETCH BUFFER LENGTH. CMA,INA CONVERT TO WORDS SLA INA RAR STA TRA2 * LDA N.PRM LDB RCODE IS THIS A GET OR A PUT? CPB D5 JMP RECV GET DATA STREAM. CPB D6 JMP SEND PUT DATA STREAM. CPB D8 JMP CNVER PUT, CONVERSATIONAL * CLA,INA ILLEGAL REQUEST CODE. JMP ERRXT ERR3 LDA D3 NOT ENOUGH PARAMETERS SUPPLIED. JMP ERRXT SPC 3 $INIT NOP LDA B7 CONFIGURE IOC CALL. STA $C.LU INITIALIZE LU COUNTER. LDB XEQT GET ADDRESS OF EQT TABLE LDA B,I FETCH # EQT ENTRIES. CMA,INA STA CNTR ADB D2 FETCH @FWA FIRST EQT,WORD 2. CNF1 LDA B,I AND EQTM MASK ALL BUT EQT TYPE CPA D65C IS IT D.65? JMP CNF2 YES. ADB D4 NO, LOOK AT NEXT EQT. ISZ $C.LU BUMP LU COUNTER. ISZ CNTR JMP CNF1 HLT 13B NO D.65 EQT. JMP *-1 * CNF2 ADB MD1 GET TO EQT WORD1 LDA B,I ALF,ALF RAL,RAL AND B7 ISOLATE UNIT NUMBER ADA TMTBL ADD TO TIMEOUT TABLE ADDRESS LDA A,I GET T/O VALUE FROM TABLE STA TMOUT AND SET UP TIMEOUT VALUE * LDA SCNWD SET LU IN STATUS CALL. AND MSK IOR $C.LU STA SCNWD LDA STOPC SET LU IN STOP CALL. AND MSK IOR $C.LU STA STOPC LDA $C.LU SET LU IN CLEAR I/O CALL. STA CLCNW JMP $INIT,I RETURN * * THE FOLLOWING IS A TABLE OF TIMEOUT VALUES FOR EACH COMM LINK * DATA RATE. THE VALUES ARE -2(N+1) WHERE N IS THE NUMBER OF * THREE SECOND INTERVALS REQUIRED TO HANDLE A 512 WORD REQUEST * AND DATA CALL OVER 2000 MILES OF COMMUNICATIONS LINE. THIS * TABLE IS INDEXED BY THE UNIT NUMBER SPECIFIED IN THE D.65 * EQT AT GENERATION TIME. * TMTBL DEF *+1 DEC -3 12665 CARD (1 MEGABIT) DEC -106 12773 CARD (150 BPS) DEC -61 300 BPS DEC -38 600 BPS DEC -27 1200 BPS DEC -21 2400 BPS DEC -19 4800 BPS DEC -17 9600 BPS * SPC 5 CNVER CPA D4 CHECK PARAM COUNT. RSS JMP ERR3 NOT ENOUGH PARAMS. * LDA TRA1 STA TRAA LDA TRA2 STA TRAB * ISZ PARAD GET DATA BUFFER ADDR. LDA PARAD JSB INDCK STA TRA3 * ISZ PARAD LDA PARAD,I FETCH DATA BUFFER LENGTH CMA,INA CONVERT TO WORDS. SLA INA RAR STA TRA4 LDA TRA STA TRA1 LDA D4 STA TRA2 * LD.A IMODE LDB SRAD SEND REQUEST AND DATA COMMAND JMP DIO GO PROCESS REQUEST AND DATA SPC 5 SEND CPA D2 CHECK PARAM COUNT. RSS JMP ERR3 NOT ENOUGH PARAMETERS. * LDA D2 GET MODE WORD LDB DATA GET FOR DATA TRANSFER CPA IMODE IS IT A DATA REQUEST LDB REQ NO...READ REQUEST JMP DIO GO DO IT SPC 5 RECV CPA D2 CHECK PARAM COUNT. RSS JMP ERR3 NOT ENOUGH PARAMS. * LDB REQ GET REQUEST CONTROL WORD LDA B1 GET RECEIVE FLAG...DATA FLAG CPA IMODE DATA OR REQUEST? LDB DATA DATA JMP DIO SPC 3 STOP CLA STA CONWD SET CONWD=0...FAKE READ FOR WAIT INTERVAL JSB .IOC. SEND STOP REPLY. STOPC OCT 30400 JMP *-2 JMP DIO1 SPC 3 * * DIO...A REG CONTAINS READ WRITE FLAG * 1=READ 2=WRITE * B REG CONTAINS SUBMODE * 100=REQ AND DATA 200=DATA 300=REQ * DIO ALF,ALF GET READ WRITE FLAG TO BIT 12 ALF IOR $C.LU MASK IN LU IOR B MASK IN SUBMODE STA CONWD SAVE CONTROL WORD LDA MD10 MAX OF 10 RETRYS ON PARITY OR SIMULTANEOUS REQ. STA PARCT SAVE IN DOWN COUNTER * DIO0 JSB GOIOC PERFORM D.65 IOC CALL. DIO1 LDB TMOUT GET TIMEOUT VALUE STB DELAY SAVE IN DOWN COUNTER CLA STA DEL JSB STATS WAIT FOR COMPLETION. JSB SETER SET TAM ERROR CODE. JMP DIO0 RE-TRY SPC 3 ERRXT BSS 0 LDB RTNB (B) = ADDR OF STMID. JMP RETRN,I SPC 3 GOIOC NOP JSB .IOC. RECEIVE OR TRANSMIT CONWD OCT 0 DATA OR REQUEST. JMP *-2 TRA1 NOP TRA2 NOP JMP GOIOC,I * STATS NOP JSB .IOC. STATUS CALL. SCNWD OCT 40000 SSA,RSS JMP SCN * ISZ DEL COUNT TIME. JMP STATS+1 ISZ DELAY JMP STATS+1 * JSB .IOC. TIME OUT...CLEAR I-O CLCNW OCT 0 LDA B200 FORCE "LINE DOWN " ERROR" * SCN ALF,ALF BIT 6 (NO REQ RECV) SET? RAL SSA JMP GOIOC+1 YES, REPEAT READ CALL. ALF,ALF NO. RAR * JMP STATS,I * SETER NOP (A) = EQT STATUS. AND B377 MASK OFF ALL BUT STATUS CPA D8 SEE IF STOP SENT INB,SZB IF SO,WAS LENGTH=-1 RSS NO..NO STOP, OR LENGTH NOT -1 CLA,INA YES,LEGAL STOP. TREAT SAME AS NO ERRORS SLA BIT 0 LDB MD1 NO ERRORS REQUEST COMPLETED RAR,SLA BIT 1 LDB D4 REQ NOT ACCEPTED...LENGTH ERROR RAR,SLA BIT 2 LDB B75 NO DATA...DATA CALL WITHOUT REQ RAR,SLA BIT 3 LDB B76 ILLEGAL STOP SENT. REPORT AFTER RETRY RAR,SLA BIT 4 LDB B77 SIMULTANEOUS REQUEST. RAR,SLA BIT 5 LDB MD3 PARITY ERROR. RAR,SLA BIT 6 LDB B74 NO REQUEST RECEIVED. RAR,SLA BIT 7 LDB D2 BROKEN LINE CPB B76 ILLEGAL STOP? RSS YES...RETRY CPB B77 SIMULTANEOUS REQUEST? RSS YES..ONE OF THE THREE JMP *+3 NO...IRRECOVERABLE ERROR ISZ PARCT INCREMENT PARITY COUNT RSS RE-TRY ISZ SETER GIVE CONTROL BACK TO USER LDA B JMP SETER,I SPC 1 B377 OCT 377 SPC 1 * INDCK NOP LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I SPC 1 INT65 NOP DUMMY TO SATISFY D.65 EXT JMP INT65,I SKP * CONSTANTS AND WORKING STORAGE. * TMOUT NOP IMODE OCT 0 DATA XMSN MODE, DRIVER SUBMODE. TRA DEF *+1 TRAA OCT 0 ADDR OF DATA BUFFER. TRAB OCT 0 BUFFER LENGTH. TRA3 OCT 0 TRA4 OCT 0 $C.LU OCT 0 LOGICAL /*($UNIT OF REMOTE COMPUTER. DATA OCT 200 DATA SUBMODE REQ OCT 300 REQUEST SUBMODE SRAD OCT 100 REQUEST AND DATA SUBMODE MSK OCT 177700 DEL NOP DELAY NOP PARCT NOP A EQU 0 B EQU 1 RETRN OCT 0 CALLER'S RETURN ADDRESS. RCODE OCT 0 REQUEST CODE. PARAD OCT 0 ADDR OF PARAMETER LIST. N.PRM OCT 0 NUMBER OF PARAMETERS. RTNB OCT 0 (B) RETURNED BY TAM. CNTR OCT 0 MD1 DEC -1 MD3 DEC -3 MD10 DEC -10 D0 OCT 0 B1 OCT 1 D2 OCT 2 D3 OCT 3 D4 OCT 4 D5 OCT 5 D6 OCT 6 B7 OCT 7 B200 EQU DATA NEED OCTAL 200 D8 DEC 8 D65C OCT 32400 EQTM OCT 77400 B74 OCT 74 B75 OCT 75 B76 OCT 76 B77 OCT 77 * BSS 0 * END Ы*   91703-18105 1419 S 0122 DS1/B SCE/3 MODULE: D.00D              H0101 ASMB,R,L,C HED D.00D 91703-16105 * (C) HEWLETT PACKARD CO. 1976 NAM D.00D 91703-16105 REV A 740509 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ****************************************** * *D.00D TELETYPE DRIVER FOR DS1-B * *SOURCE PART # 91703-18105 * *REL PART # 91703-16105 * *WRITTEN BY: JIM HARTSELL * *DATE WRITTEN* * *DATE MODIFIED: 5-9-74 * ********************************************* * * ***************************************** * D.00 CRT/TELEPRINTER DRIVER FOR * 9701 BCS TERMINALS. ***************************************** * ENT D.00,I.00 * EXT ATTEN EXT $BUSY EXT $ESC * TTY EQU 15B NOMINAL TTY CHANNEL * * THIS MODULE OF THE HP-2116 BASIC CONTROL SYSTEM * SOFTWARE IS DESIGNED TO OPERATE THE ASR-33/35 * TELE-TYPEWRITER. THE FUNCTION OF THIS DRIVER IS * TO INITIATE, CONTINUE AND COMPLETE A READ/WRITE * OPERATION REQUESTED THROUGH INPUT/OUTPUT CONTROL. * * THE DRIVER WILL REJECT A -FUNCTION SELECT- * REQUEST AS NONE OF THE DEFINED FUNCTIONS IS * APPLICABLE FOR THE ASR DEVICE. * * *** D.00 INITIATOR SECTION *** * SKP D.00 NOP D.00 NOP * ENTRY / EXIT * STA SAVA SAVE EQT ENTRY ADDRESS. STB RQA SAVE REQUEST ADDRESS LDA B,I GET WORD 2 OF REQUEST, ROTATE ALF REQUEST CODE TO LOW A AND O17 ISOLATE FUNCTION CODE LDB DFLG CHECK DRIVER FLAG - SZB DRIVER IDLE? SZA,RSS CLEAR? RSSI RSS YES. ACCEPPT COMMAND. JMP REJB REJECT THIS REQUEST. ADA M3 SUBTRACT 3 FROM CODE SSA,RSS IF RESULT +, THEN ILLEGAL CODE, JMP RCER REJECT REQUEST. 1,2 LEGAL. * LDA SAVA,I GET WORD 1 OF EQT ENTRY. AND O77 GET I/O SLOT IOR LIAI STA I.6 LIA TTY (102500) ADA O100 STA I.10 OTA TTY (102600) ADA O1100 STA ISYN1 STC,C TTY (103700) XOR OTBM STA I.9 OTB TTY (106600) * ACC2 ISZ SAVA SET ADDRESS OF EQT ENTRY TO LDA SAVA GET EQT ADDRESS STA EQT2 POINTER TO STATUS INA STA EQT3 POINTER TO LOG LDA D.00 MOVE RETURN ADDRESS... STA I.00 TO "DISMISS INTERRUPT." STA DFLG SET DRIVER FLAG BUSY (NOT = 0). CLA STA CHC AND CHARACTER COUNTER STA SAVAX AND SET TO TELL IOC ALL OK. LDA RQA,I GET FUNCTION CODE ALF AND O17 SZA,RSS CHECK FUNCTION CODE: CLEAR? JMP CLEAR YES. SET STATUS AND EXIT. * LDA RQA,I GET FUNCTION CODE STA FUNC SAVE IT CLB,CLE CLEAR "B", CLEAR "E". ALF,ALF RAL,ELA PUT BINARY MODE BIT INTO ERB SIGN BIT OF B. LDA EQT2,I GET STATUS WORD IOR IBIT SET O-FIELD = 2 (BUSY) AND STA EQT2,I STORE. ISZ RQA ISZ RQA LDA RQA LDA A,I GET BUFFER ADDRESS. RAL,CLE,SLA,ERA IF INDIRECT, JMP *-2 GET DIRECT ADDRESS. STA BUF SAVE BUFFER ADDRESS. STA BUFS ISZ RQA LDA RQA,I GET BUFFER LENGTH. SSA INB,RSS NEGATIVE: FLAG CHARS IN LOG. ALS,SLA POSITIVE: DOUBLE FOR CHARS CMA,INA NEGATIVE: MAKE POSITIVE CHARS. STA IOSYZ SAVE POSITIVE CHAR COUNT STB EQT3,I STORE FLAG IN XMIT LOG LDB FUNC BLF,SLB INPUT OR OUTPUT? JMP INGO INPU-|T. JMP TTYO OUTPUT * RCER CLB,RSS ---REJECT SECTION R. C. ERROR (B=0). REJB LDB IBIT DEVICE/DRIVER NOT AVAILABLE CLA,INA SET (A) NON-ZERO AND JMP D.00,I EXIT TO IOC AND REJECT. * * *** CONTINUATOR SECTION *** * ENTERED AT I.00 BY TTY INTERRUPT. * ISYNC NOP I.10 OTA TTY OUTPUT CHAR OR INSTR LDA SAVEX CLO SLA,ELA STF 1 OVERFLOW ON LDB SAVBX STF 0 ISYN1 STC TTY,C START TTY CLOCK LDA OPINT SZA JMP ISYN2 LDA SAVAX JMP I.00,I DISMISS INTERRUPT ISYN2 CLA STA OPINT JMP ATTEN PROCESS OPERATOR ATTENTION. * I.00 NOP TTY INTERRUPT HERE STA SAVAX SAVE A, STB SAVBX B, ERB,BLS E, SFC 1 AND INB OVERFLOW STB SAVEX I.6 LIA TTY AND O177 REMOVE 8-LEVEL BIT JMP ISYNC,I RETURN TO CALLING ROUTINE. * SKP * * INPUT SECTION * RDCH NOP INPUT A CHARACTER LDB FUNC LDA DA READ AND ECHO INSTRUCTION BLF,BLF SLB,RSS TEST "P" (PRINT) LDA DB READ ONLY INSTRUCTION JSB ISYNC GET A CHARACTER. JSB TSTCH CHECK FOR CONTROL JMP RDCH,I * INGO LDA BUFS RESET STARTING BUFFER ADDRESS. STA BUF CLB JMP INA4 GO GET FIRST CHAR. * IASC2 JSB RDCH READ ASCII CHARACTER STA CH SAVE IT SZA,RSS NULL? JMP IASC2 YES. IGNORE CPA O12 LINE FEED? JMP IASC2 YES, IGNORE. CPA O15 CAR RETURN? JMP IRETN YES, END OF RECORD CPA RUBO RUBOUT? JMP RDEL DELETE RECORD CPA BAKSP BACKSPACE CHAR? JMP DELE DELETE PREVIOUS CHAR. CPA BKSPC BACKSPACE KEY? JMP DELE2 DELETE PREVIOUS CHARACTER. LDB CHC CPB IOSYZ BUFFER FULL (ASCII)?4 JMP IASC2 YES. LOOK FOR CAR RETURN. * * INSERT CHARACTER IN BUFFER * IBIN3 LDB CHC SLB,INB,RSS SKIP IF LOWER CHAR ALF,SLA,ALF UPPER. ALWAYS SKIP X.6 XOR BUF,I COMBINE LOWER WITH PRIOR XOR O40 INSERT/REMOVE BLANK STA BUF,I STORE IN BUFFER SLB,RSS IF LOWER CHAR, ISZ BUF ADD 1 TO BUFFER ADDRESS INA4 STB CHC CHARS IN BUFFER LDA EQT3,I GET MODE SSA,RSS JMP IASC2 ASCII. GO READ CHAR. CPB IOSYZ BUFFER FULL (BINARY)? JMP STAT YES, EXIT. JSB RDCH READ BINARY CHARACTER JMP IBIN3 GO STORE IT. * SKP DELE LDA O137 OUTPUT BACK-ARROW. JSB TYO DELE2 LDB CHC DELETE A CHARACTER. SZB,RSS JMP IASC2 BUFFER EMPTY: IGNORE CCA ADB A SLB,RSS IF LEFT CHAR DELETED, JMP INA4 DONE. ADA BUF STA BUF BACK UP POINTER LDA BUF,I AND O377 GET RIGHT HALF JMP X.6 GO PURGE IT. * RDEL JSB KILL CANCEL INPUT. JMP INGO * KILL NOP LDA O134 OUTPUT BACKSLASH. JSB TYO LDA O15 OUTPUT CARRIAGE RETURN. JSB TYO LDA O12 OUTPUT LINE FEED. JSB TYO JMP KILL,I * TSTCH NOP CHECK FOR CONTROL CHARACTER CPA O33 ESCAPE (OPERATOR BREAK)? JMP CC YES. GO PROCESS IT. CPA O176 JMP CC JMP TSTCH,I * CC LDA $BUSY REMOTE I/O BUSY? SZA,RSS JMP *+3 NO, ACCEPT THE INTERRUPT. STA $ESC YES, SET $ESC JMP TSTCH,I AND IGNORE INTERRUPT. CLA OPERATOR BREAK. STA CHC INA FLAG OPERATOR INPUT. STA OPINT JMP CLEAR CLEAR THE DRIVER. * * PROCESS CARRIAGE RETURN: END OF MESSAGE * IRETN LDA O12 ECHO LINEFEED JSB TYO LDB CHC THESE SIX INSTRUCTIONS ... SZB  DEFAULT A NULL INPUT ... JMP STAT LDA LBLNK INTO A SINGLE BLANK. STA BUF,I ISZ CHC JMP STAT * * STATUS SECTION * CLEAR BSS 0 STAT LDA EQT2,I GET STATUS WORD AND MST (37400) PRUNE PRIOR STATUS STA EQT2,I STORE STATUS WORD LDB CHC LDA EQT3,I DOES USER WANT CHARS OR WORDS? SLA,ELA SKIP IF WORDS. BINARY FLAG TO E RBL,SLB CHARS. DOUBLE AND SKIP. INB WORDS. ROUND COUNT UP. ERB HALVE COUNT, COMBINE BINARY BIT STB EQT3,I STORE IN XMIT LOG. CLB CLEAR DRIVER-BUSY FLAG. STB DFLG * IDLE LDA DA ECHO INPUT JSB ISYNC IDLE LOOP JSB TSTCH CHECK FOR CONTROL CHARACTER JMP IDLE IGNORE INPUT * SKP * * OUTPUT SECTION * TTYO JSB OUTGO DUMP THE BUFFER JMP STAT ALL DONE. * OUTGO NOP SUBROUTINE TO DUMP BUFFER CMA STA CHX -CHAR COUNT-1 CLB STB CHC INITIALIZE OUTPUT COUNT OUTLP JSB GETCH GET CHAR FROM BUFFER SSB,RSS IF BINARY, OR SEZ IF HONESTY MODE, JMP OUTC GO OUTPUT CHAR. LDB CHX CPA O137 IS IT A LEFT ARROW? INB,SZB IS IT ALSO LAST CHARACTER? JMP OUTC NO. GO OUTPUT. JMP OUTGO,I SUPPRESS CR/LF. * OUTC JSB TYO JMP OUTLP * GETCH NOP GET CHAR FROM BUFFER LDA BUF,I GET WORD CONTAINING LDB CHC NEXT CHAR. SLB,RSS ALF,ALF MOVE TO RIGHT HALF AND O177 ISOLATE LOWER CHARACTER. SLB,INB IF CURRENT CHAR IS LOWER, ISZ BUF ADD 1 TO BUFFER ADDRESS STB CHC LDB FUNC BLF,ELB HONESTY TO E BLF BINARY TO SIGN ISZ CHX CHARS ALL GONE? JMP GETCH,I NO, RETURN. SSB,RSS BINARY, OR SEZ HONESTY MODE? JMP OU TGO,I YES. DONE. LDA O15 CAR RTN JSB TYO OUTPUT THE CHARACTER LDA O12 JSB TYO OUTPUT LINEFEED. JMP OUTGO,I ALL DONE. * SKP TYO NOP CHAR OUTPUT SUBROUTINE LDB LOUT PRINT COMMAND I.9 OTB TTY OUTPUT INSTRUCTION JSB ISYNC OUTPUT THE CHARACTER CPA O177 CHECK ECHO. BREAK? JMP TYO,I NO. EXIT. LDA LOUT INA,SZA WAIT FOR BREAK CHAR ... JMP *-1 TO FINISH COMING IN. LDA DB JSB ISYNC GET AN INPUT CHAR JSB TSTCH CHECK FOR CONTROL CPA O177 RUBOUT? RSS JMP TYO,I NO, RETURN. JSB KILL YES, OUTPUT /, CR, LF. JMP STAT FAKE COMPLETION. SKP * CONSTANT, FLAG, AND STORAGE SECTION * A EQU 0 B EQU 1 SUP * SAVAX NOP STORAGE AREA SAVBX NOP FOR SAVING REGISTERS SAVEX NOP WHILE PROCESSING INTERRUPT. * SAVA NOP EQT ADDRESS FUNC NOP REQUESTED FUNCTION RQA NOP REQUEST ADDRESS DFLG NOP DRIVER BUSY FLAG. =0, NOT BUSY * M3 OCT -3 O10 OCT 10 BACKSPACE CHAR(CONT. H) O12 OCT 12 O15 OCT 15 O17 OCT 17 O40 OCT 40 O77 OCT 77 O100 OCT 100 O134 OCT 134 O137 OCT 137 BAKSP EQU O10 BKSPC OCT 31 O33 OCT 33 ESCAPE KEY. O176 OCT 176 O177 OCT 177 RUBO EQU O177 O377 OCT 377 LBLNK OCT 20000 IBIT OCT 100000 MST OCT 37400 LIAI LIA 0 OTBM OCT 5100 O1100 OCT 1100 CH NOP * EQT2 NOP EQT3 NOP BUF NOP BUFS NOP IOSYZ NOP CHC NOP CHX NOP * * LOUT OCT 120000 PRINT OUTPUT DA OCT 160000 ECHO INPUT DB OCT 140000 NON-ECHO INPUT OPINT NOP * BSS 0 CHECK SIZE * END *($$*   91703-18106 1604 S 0122 DS1/B SCE/3 MODULE: .IOC.              H0101 KASMB,R,L,C HED IOC 91703-16106 * (C) HEWLETT-PACKARD CO. 1976 NAM IOC 91703-16106 REV A 760123 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * * PGMR: J.R.W. * ********** I N P U T / O U T P U T C O N T R O L ********** * * * IOC IS A MODULE OF THE HP-2116 BASIC CONTROL SYSTEM * * WHICH PROVIDES FOR GENERAL I/O DEVICE CONTROL AND * * BUFFERED DATA TRANSMISSION AS REQUESTED BY CALLS * * WITHIN USER PROGRAMS. * * * * THIS VERSION DOES NOT CONTAIN THE ADDITIONAL * * FEATURES (AND PROGRAM LENGTH) TO PROVIDE FOR * * AUTOMATIC BUFFERING OF WRITE AND FUNCTION * * REQUESTS. COMPATIBILITY WITH THE BUFFERED * * VERSION IS MAINTAINED AND THE SPECIAL SECTION * * AT THE ENTRY POINT .BUFR IS PROVIDED TO * * ALLOW A COMMON EXIT POINT FOR COMPLETION * * RETURN OF ALL OUTPUT DRIVERS. * * * * IOC IS RESPONSIBLE FOR: * * * * - PROCESSING USER REQUESTS FOR DATA TRANSMISSION, * * PERIPHERAL DEVICE FUNCTIONS AND DEVICE STATUS. * * * * - PROVIDING PROPER LINKAGE AND CONTROL TO I/O * * EQUIPMENT SOFTWARE DRIVERS FOR PROCESSING THE * <* REQUESTED OPERATIONS. * * * * - MAINTAINING AN EQUIPMENT TABLE WHICH CONTAINS * * THE INFORMATION NECESSARY TO DEFINE AND DESCRIBE * * A PERIPHERAL DEVICE, TO PROCESS REQUESTS AND * * TO SUPPLY OPERATION STATUS. * * * * * * REQUEST DESCRIPTIONS: * * * * - DATA TRANSMISSION ( READ/WRITE ) * * REQUEST CODE: 1 / 2 * * * * (P) JSB .IOC. * * (P+1) (REQUEST CODE,K,P,ORDINAL) * * (P+2) (REJECT POINT) * * (P+3) (BUFFER ADDRESS) * * (P+4) (BUFFER LENGTH) * * (P+6) -NORMAL RETURN- * * * * - FUNCTION SELECT, REQUEST CODE = 3 * * * * (P) JSB .IOC. * * (P+1) (REQUEST CODE,FUNCTION,ORDINAL) * * (P+2) (REJECT POINT) * * (P+3) -NORMAL RETURN- * * * * * * - STATUS/CLEAR, REQUEST CODE = 4/0 * * * * (P) JSB .IOC. * * (P+1) (REQUEST CODE,ORDINAL) >U * * (P+2) -NORMAL RETURN- * * * * * * ENTRY POINTS: .IOC. ENTRY POINT FOR REQUESTS. * * DMAC1: ENTRY POINTS FOR DRIVERS * * DMAC2: UTILIZING A DMA CHANNEL * * FOR DATA TRANSMISSION. * * IOERR: LOCATION OF IOC ERROR HALT * XSQT : HOLDS ADDRESS OF * SYSTEM EQUIPMENT TABLE * XEQT : HOLDS ADDRESS OF I/O * EQUIPMENT TABLE SPC 3 ENT .IOC.,DMAC1,DMAC2,IOERR,XSQT,XEQT ENT .BUFR EXT HALT SPC 2 * THE PCS PROGRAM PERFORMS THE CONSTRUCTION OF * THE BCS MODULES INTO AN ABSOLUTE OPERATING UNIT. * ONE OF THE FUNCTIONS OF -PCS- IS TO CONSTRUCT * THE -SQT- AND -EQT- TABLES AS DESIGNATED FOR A * PARTICULAR CONFIGURATION. AFTER THE 2 TABLES * ARE COMPLETED (LOCATED IN MEMORY JUST BEFORE IOC), * PCS STORES THE FIRST WORD ADDRESS OF EACH TABLE * IN THE WORDS IN IOC LABELLED XSQT AND XEQT. SPC 2 A EQU 00000B "A" REGISTER ADDRESS DEFINITION. B EQU 00001B "B" REGISTER ADDRESS DEFINITION. SPC 2 .IOC. NOP ** ENTRY / EXIT ** INT EQU 00B SYSTEM INTERRUPT FLAG ADDRESS. STF INT ** SET INTERRUPT SYSTEM ACTIVE ** LDA .IOC.,I GET WORD 2 AND POSITION ALF REQUEST CODE TO AND M.17 LOW A, ISOLATE STA R.C. AND SAVE CODE. ADA NMAX SUBTRACT THE MAXIMUM+1 REQUEST SSA,RSS CODE - A POSITIVE RESULT JMP RCER MEANS UNDEFINED CODE - ERROR. LDA .IOC.,I GET WORD 2 AGAIN- AND M.77 ISOLATE ORDINAL FIELD AND STA B SAVE IN B. SZA IF ORDINAL = 0, CHECK REQUEST CODE. JMP IOC0 -NON ZERO, CHECK ORDINAL. CPA R.C. IF REQUES7T IS * CLEAR *, GO TO JMP CLRSY CLEAR ALL UNITS AND DRIVERS. LDA C.04 IF REQUEST IS CPA R.C. FOR * STATUS *, GO TO JMP SSTAT GET TOTAL SYSTEM STATUS. ORER CLA,INA,RSS ENTER: A=1; SKIP. RCER1 LDA C.04 LOAD: A=4. JMP IRER - ORDINAL ERROR FOR REQUEST. SPC 1 IOC0 ADA MIN7 SUBTRACT 7 FROM ORDINAL. IF SSA,RSS RESULT IS POSITIVE, THEN ORDI- JMP IOC1 NAL IS TO EQT. OTHERWISE ADD ADB XSQT ADDRESS OF SQT TO VALUE 1-6, ADB MIN1 SUBTRACT 1 FOR PROPER ENTRY - LDB B,I GET SQT ENTRY IN B. EQT ORDINAL SZB,RSS IF ORDINAL = 0, THE SQT ENTRY JMP SERR NOT DEFINED - ERROR. SPC 1 * CONTROL HERE TO EXAMINE EQT ENTRY SPC 1 IOC1 ADB MIN6 SUBTRACT 6 FROM ORDINAL TO GET * POSITION IN EQT. LDA B GET EQT ORDINAL TO A. CMA,INA SUBTRACT REQUEST (OR SQT) ADA XEQT,I ORDINAL FROM NUMBER OF EQT SSA ENTRIES- A NEGATIVE RESULT MEANS JMP ORER ORDINAL TOO LARGE - ERROR. BLS,BLS MULTIPLY ORDINAL BY 4, SUBTRACT ADB MIN3 3 AND ADD STARTING ADDRESS OF ADB XEQT EQT TO GET ADDRESS OF ENTRY. STB EQTT SAVE FWA OF EQT ENTRY FOR DRIVER. INB SET B= ADDRESS OF WORD 2. SPC 1 * CHECK FOR TYPE OF REQUEST SPC 1 LDA R.C. GET REQUEST CODE TO A CPA C.04 IF CODE = 4, THEN GO TO JMP IOC3 PROCESS STATUS REQUEST. SPC 1 * REQUEST IS FOR DATA TRANSMISSION, FUNCTION SELECT * OR CLEAR OPERATION. SPC 1 LDA B,I GET WORD 2 OF EQT ENTRY. ELA SHIFT THE DEVICE BUSY BIT TO "E". ADB C.02 SET B = ADDRESS OF WORD 4 LDB B,I AND GET DRIVER ADDRESS. STB DRIV SET DRIVER ADDRESS. LDA .IOC.,I LOAD THE I/O CONTROL WORD. AND =B176700 IS|OLATE THE COMMAND. SZA CLEAR REQUEST? CPA =B030000 NO; DYNAMIC STATUS REQUEST? JMP IOC2 DIRECTLY TO DRIVER. SEZ IF DEVICE BUSY, O FIELD = 2, JMP IOC5 GO TO REJECT REQUEST. SPC 1 * SET UP DRIVER LINKAGE AND GO TO DRIVER SPC 1 IOC2 LDB .IOC. SET B = ADDRESS OF REQUEST WORD 2 LDA EQTT SET A = FWA EQT ENTRY JSB DRIV,I GO TO DRIVER - INITIATOR - SECTION SPC 1 * RETURN FROM DRIVER - CHECK FOR REJECT CONDITION SPC 1 M.77 CLE,SLA,ALF DRIVER REJECT? JMP IOC7 (B) = REJECT CONDITION. SPC 1 * NORMAL EXIT SECTION (EXCEPT FOR STATUS REQUEST) SPC 1 LDA R.C. GET REQUEST CODE TO A LDB .IOC. SET B = ADDRESS OF WORD 2. SZA,RSS IF REQUEST CODE = 0, GO TO EXIT JMP IOC3 AS A STATUS REQUEST. ADB C.02 SET B TO P+3 FOR FUNCTION RETURN. ADA MIN3 SUBTRACT 3 FROM REQUEST CODE. SZA IF NOT FUNCTION, THEN SET ADB C.02 B TO P+5 RETURN. JMP B,I ---EXIT TO NORMAL RETURN--- SPC 1 * CONTROL HERE FOR STATUS REQUEST SPC 1 IOC3 LDA B,I SET (A) = WORD 2 OF EQT ENTRY INB AND SET (B) = LDB B,I WORD 3 OF EQT ENTRY IOC4 ISZ .IOC. ADJUST RETURN TO P+2. JMP .IOC.,I EXIT TO CALLER --- SPC 1 * CONTROL HERE FOR SYSTEM STATUS REQUEST (ORDINAL = 0) SPC 1 SSTAT LDA XEQT,I GET # OF EQT ENTRIES, CMA,INA SET NEGATIVE AND STA SIOC SAVE AS AN INDEX. LDB XEQT SET (B) = ADDRESS OF WORD ADB C.02 2 OF FIRST ENTRY. SST1 LDA B,I GET WORD 2 - SSA IF AVAILABILITY FIELD SAYS UNIT JMP SST2 BUSY, THEN COMPLETE REQUEST. ADB C.04 SET (B) FOR NEXT ENTRY ISZ SIOC INDEX EQT COUNTER. JMP SST1 -NOT FINISHED SPC 1 * (A), BIT 15: 1 IF ONE UNIT BUSY; 0 IF NO UNITS BUSY. QSPC 1 SST2 CLB SET B=0 TO INDICATE IOC W/O OUTPUT JMP IOC4 BUFFERING, RETURN TO NORMAL EXIT. SPC 1 * CONTROL HERE FOR SYSTEM CLEAR REQUEST SPC 1 CLRSY LDA XEQT,I GET # OF EQT ENTRIES, CMA,INA SET NEGATIVE AND STA SIOC SAVE FOR INDEX. LDA XEQT SET (A) = ADDRESS OF WORD 1 INA OF FIRST ENTRY. CLR1 STA EQTT SAVE CURRENT WORD 1 ADDRESS. ADA C.03 SET ADDR TO LDA A,I WORD 4, GET AND STA DRIV SET DRIVER ADDRESS. LDA EQTT (A) = EQT ENTRY ADDR. LDB .IOC. (B) = REQUEST WORD 2 ADDRESS. JSB DRIV,I OPERATE DRIVER -- LDA EQTT SET (A) = ADA C.04 ADDR OF NEXT ENTRY ISZ SIOC INDEX EQT COUNTER JMP CLR1 -NOT FINISHED. JMP IOC4 OPERATION COMPLETE, EXIT. SPC 2 * FOLLOWING SECTION ONLY AFFECTS A RETURN TO * AN INTERRUPTED SEQUENCE IN THIS VERSION. * THE CALL IS FROM THE CONTINUATOR SECTION * OF AN OUTPUT DRIVER: SPC 1 * (P) - JSB .BUFR * (P+1)- -RETURN ADDRESS- SPC 2 .BUFR NOP CLF INT TEMPORARY DISABLE INTERRUPT. STA BSAVA TEMPORARY SAVE (A). LDA .BUFR,I GET AND STA .BUFR SET RETURN ADDRESS. LDA BSAVA RESTORE (A) STF INT ENABLE INTERRUPT SYSTEM JMP .BUFR,I RETURN TO INTERRUPTED SEQUENCE SPC 1 BSAVA NOP SPC 2 * REJECT SECTION SPC 1 IOC5 CLB,INB DEVICE BUSY REJECT - SET B(15) = 1 RBR IOC7 ISZ EQTT SET A = WORD 2 OF EQT LDA R.C. LOAD THE REQUEST CODE TYPE. SZB,RSS ILLEGAL REQUEST TYPE REJECT? CPA C.03 YES; CONTROL FUNCTION TYPE? RSS SKIP. JMP RCER1 NO, ILLEGAL READ OR WRITE REQUEST. LDA EQTT,I ENTRY FOR REJECT. JMP IOC4 GO TO EXIT TO P+2. SPC 2 * -ERROR CONDITION SECTION (IRRECOVERABLE ERRORS) SPC 1 RCER CLA,RSS Rp*($EQUEST CODE ERROR - SET A = 0. SERR LDA C.02 SQT ENTRY ERROR - SET A = 2. IRER CCB ENTER: B=-1. ADB .IOC. LET B = USER REQUEST ADDRESS. IOERR HLT 76B SYSTEM ERROR HALT. JMP HALT IRRECOVERABLE HALT OR .IPL. RETURN. SKP * -CONSTANT AND STORAGE SECTION- SPC 1 SIOC NOP HOLDS ADDRESS P+1 OF REQUEST. R.C. NOP HOLDS REQUEST CODE. EQTT NOP HOLDS ADDRESS OF EQT ENTRY FOR DEVICE. DRIV NOP HOLDS ADDRESS OF DEVICE DRIVER. M.17 OCT 000017 R.C. MASK. C.02 DEC 2 CONSTANTS C.03 DEC 3 C.04 DEC 4 USED IN MIN1 OCT -1 IN MIN3 OCT -3 PROCESSING MIN6 OCT -6 MIN7 OCT -7 NMAX OCT -5 NEGATIVE VALUE OF MAX. REQUEST-CODE+1. SPC 1 XSQT NOP HOLDS STARTING ADDRESS OF SQT: SET BY XEQT NOP HOLDS STARTING ADDRESS OF EQT: -PCS- DMAC1 NOP DEFINES FIRST DMA CHANNEL DMAC2 NOP DEFINES SECOND DMA CHANNEL SPC 1 ** END I O C SPC 1 END 4*   91703-18107 1611 S 0122 DS1/B SCE/3 MODULE: L65              H0101 ASMB,R,L,C HED L65 91703-16107 * (C) HEWLETT-PACKARD CO. 1976 * NAM L65 91703-16107 REV A 760311 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ENT L65 EXT .ENTR,.IOC.,TMOUT * * SUBROUTINE TO MAKE IOC CALLS TO D.65 FORTRAN * CALLABLE * * MAY ALSO BE CALLED AS A FUNCTION, IN WHICH * CASE (EXCEPT FOR STATUS OR CLEAR CALLS) AN * ERROR CODE IS RETURNED WHEN THE OPERATION * HAS BEEN COMPLETED. (L65 OPERATIONS ARE NOW * DONE "WITH WAIT", SO OPERATIONS ARE COMPLETED * BEFORE RETURNING TO THE USER.) * * ERROR CODE MEANING * ---------- --------------------- * * -3 COMMUNICATIONS I/O ERROR * -1 REQUEST COMPLETED, NO ERRORS * +1 ILLEGAL PARAMETER IN L65 CALL * +2 LINE DOWN OR TIMEOUT * +4 BUFFER LENGTH ERROR * +61 (75B) MODE NOT COMPATIBLE * +62 (76B) TRANSMISSION NOT INITIATED * +63 (77B) SIMULTANEOUS REQUEST * * * MODIFIED BY DAN GIBBONS * HEWLETT PACKARD * FEBRUARY 11,1976 * SPC 2 * * CALLING SEQUENCES * * (NOTE THAT "SEND-REQUEST" AND "SEND-REQUEST-AND- * SEND/RECEIVE-DATA" CALLS ARE NO LONGER LEGAL.) * * SEND OR RECEIVE DATA SPC 1 * CALL L65(IRW,IDVN,IMODE,IDBUF,IDBFL) * WHERE: * IRW =1 FOR READ 2 FOR WRITE * IDVN =DEVICE REFERENCE * IDBUF=BUFFER FOR DATA STORAGE * IDBFL=DATA BUFFER LENGTH..POSITIVE WORDS ONLY * IRBUF=BUFFER FOR REQUEST STORAGE * IRB@FL=BUFFER LENGTH * IMODE=1 FOR DATA, 2 FOR REQUEST * SKP * RECEIVE REQUEST SPC 1 * CALL L65(IRW,IDVN,IMODE,IRBUF,IRBFL) SPC 2 * SEND STOP SPC 1 * CALL L65(IRW,IDVN) * WHERE: IRW=6 SPC 2 * CLEAR REQUEST SPC 1 * CALL L65(IRW,IDVN) * WHERE: IRW=0 SPC 2 * STATUS REQUEST SPC 1 * CALL L65(IRW,IDVN,ISTAT,ITRLG) * WHERE: * IRW=3 * ISTAT=EQT WORD 2 * ITRLG=EQT WORD 3 SPC 2 * * THE POLLING CALL (IRW=4) AND LISTEN MODE CALL (IRW=5) * ARE NO LONGER SUPPORTED BY THIS VERSION OF THE DRIVER * REVISION C OR LATER. THESE CALLS HAVE BEEN BOTH CONVERTED * INTO CLEAR REQUEST CALLS... * * FOR STATUS CALLS, A AND B REG WILL CONTAIN * CONTENTS OF EQT WORDS 2 & 3 RESPECTIVELY (STATUS * AND TRANSMISSION LOG). * * FOR CLEAR CALLS, CONTENTS OF A AND B REG ARE MEANINGLESS. * SKP * * IRW NOP ADDRESS OF REQUEST CODE IDVN NOP ADDRESS OF UNIT REFERENCE # IMODE NOP ADDRESS OF READ/WRITE SUBMODE IDBUF NOP ADDRESS OF DATA BUFFER IDBFL NOP ADDRESS OF DATA BUFFER LENGTH IRBUF NOP ADDRESS OF REQUEST BUFFER IRBFL NOP ADDRESS OF REQUEST BUFFER LENGTH * L65 NOP JSB .ENTR FETCH PARAMETER ADDRESSES DEF IRW * LDA IRW,I GET REQ CODE AND B7 CHECK FOR LEGAL RANGE (0-6) LDB A CPB IRW,I CPB B7 JMP ERR ILLEGAL PARAMETER ADB REQC INDEX INTO FUNCTION CODE TABLE LDB B,I GET IOC FUNCTION CODE LDA IDVN,I GET DEVICE UNIT REFERENCE # AND B77 CHECK FOR LEGAL RANGE CPA IDVN,I RSS JMP ERR ILLEGAL PARAMETER IOR B MERGE UNIT REFERENCE # RBL STATUS SSB,RSS OR SZB,RSS CLEAR? JMP CS R< YES. RBL,RBL CONTROL SSB,SLB,RSS REQUEST? RSS NO. JMP CON YES. * STA REQ SAVE REQUEST CODE LDA IMODE,I GET MODE WORD CPA D1 CHECK FOR LEGAL VALUES (1,2) JMP OK CPA D2 RSS JMP ERR ILLEGAL PARAMETER LDB IRW,I CHECK FOR SEND-REQ OR SEND-REQ- CPB D2 SEND/RCV-DATA (ILLEGAL) JMP ERR ILLEGAL PARAMETER OK ALF,ALF RAR,RAR SET TO ADD TO SUBMODE ADA REQ SET FOR 1,2,3 FOR SUBMODE STA REQ SAVE LU,SUBMODE AND PRIVLEGE STATUS LDA IDBUF GET DATA BUFFER ADDRESS LDB IDBFL,I GET DATA BUFFER LENGTH STA BUFA SAVE AS BUFFER ADDRESS OF CALL STB LEN SAVE AS LENGTH * JSB .IOC. CALL DRIVER REQ NOP JMP *-2 BUFA NOP LEN NOP * WAIT LDA IDVN,I WAIT HERE UNTIL DONE IOR STATR SET UP STATUS STA REQ3 REQUEST LDA TMOUT SET UP TIME- STA DELAY OUT COUNTER CLA STA DEL * IOC0 JSB .IOC. STATUS CALL REQ3 NOP SSA,RSS COMPLETE? JMP STCHK YES, GO CHECK RETURNED STATUS ISZ DEL COUNT TIME JMP IOC0 ISZ DELAY TIMED OUT? JMP IOC0 NO, CHECK STATUS AGAIN LDA IDVN,I YES, SET UP STA REQ4 CLEAR REQUEST JSB .IOC. CLEAR DRIVER REQ4 NOP LDA B200 YES, SIMULATE TIMEOUT STATUS * STCHK AND B377 MASK OFF ALL BUT STATUS CPA D8 SEE IF STOP SENT INB,SZB IF SO,WAS LENGTH=-1 RSS NO..NO STOP, OR LENGTH NOT -1 CLA,INA YES,LEGAL STOP. TREAT SAME AS NO ERRORS SLA BIT 0 CCB NO ERRORS. REQUEST COMPLETED RAR,SLA BIT 1 LDB D4 REQ NOT ACCEPTED...LENGTH ERROR RAR,SLA BIT 2 LDB B75 NO DATA...DATA CALL WITHOUT REQ  RAR,SLA BIT 3 LDB B76 ILLEGAL STOP SENT RAR,SLA BIT 4 LDB B77 SIMULTANEOUS REQUEST. RAR,SLA BIT 5 LDB MD3 PARITY ERROR. RAR,SLA BIT 6 LDB B74 NO REQUEST RECEIVED. RAR,SLA BIT 7 LDB D2 BROKEN LINE. LDA B A = ERROR CODE * JMP L65,I RETURN WITH ERROR CODE IN * CS STA REQ1 STORE IOC FUNCTION WORD LDA IDBFA GET AN ADDRESS OF A TEMP LOCATION SZB STATUS REQ? JMP IOC1 YES STA IMODE SET IMODE TO POINT TO IDBUF STA IDBUF DITTO IOC1 JSB .IOC. CALL DRIVER REQ1 NOP STA IMODE,I RETURN STATUS WORD STB IDBUF,I RETURN TRANSMISSION LOG JMP L65,I RETURN TO CALLER * * CON STA REQ2 STORE IOC FUNCTION WORD JSB .IOC. CALL DRIVER REQ2 NOP JMP *-2 JMP WAIT GO WAIT FOR COMPLETION * * ERR CLA,INA RETURN WITH =1 TO JMP L65,I INDICATE ILLEGAL PARAMETER * * * REQC DEF RQ RQ OCT 0 CLEAR REQUEST OCT 10100 READ REQUEST OCT 21100 WRITE REQUEST STATR OCT 40000 STATUS REQUEST OCT 0 WAS POLLING...NOW CLEAR REQ. OCT 0 WAS LISTEN MODE...NOW CLEAR REQ. OCT 31400 STOP REQUEST DEL OCT 0 TIMEOUT DELAY OCT 0 COUNTERS MD3 DEC -3 IDBFA DEF IDBUF D1 DEC 1 D2 DEC 2 D4 DEC 4 B7 OCT 7 D8 DEC 8 B74 OCT 74 B75 OCT 75 B76 OCT 76 B77 OCT 77 B200 OCT 200 B377 OCT 377 A EQU 0 B EQU 1 END @  91704-18101 1602 S 0222 DS1/B SCE/4 MODULE: %RFAN              H0102 QASMB,R,L,C,F HED %RFAN 91704-16101 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM %RFAN,7 91704-16101 REV A 760105 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 3 **************************************************** * *%RFAN SUBROUTINE TO DO REMOTE RFA * *SOURCE PART # 91704-18101 REV A * *REL PART # 91704-16001 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 11-15-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: DEC 1975 * ***************************************************** SPC 1 SUP * * * THIS SET OF USER-CALLABLE SUBROUTINES INTERFACES * A DS1B TERMINAL USER TO THE RTE FILE MANAGER AND RTE * EXECUTIVE OF A DS/1B RTE CENTRAL COMPUTER. %RFAN * REQUIRES THE DVR65 DRIVER TO BE COFIGURED INTO THE * RTE-B TERMINAL. * * * CALLING SEQUENCE: * * JSB RXXXX * DEF RETURN ADDRESS * DEF PARAMETER 1 * . * . * . * DEF PARAMETER N * RETURN * * * ENT CCRET,CPURG,COPEN,CREAD,CWRIT ENT CPOSN,CWIND,CCLOS,CNAME,CCONT ENT MBUFS,MBUF2,CLOCF,CAPOS,CSTAT ENT RLU,CLU,CONFG,LSTEN,CLINE,DIMCK ENT CAXTM,CEXTM,CSCHD,CTIM,CMESG ENT DIMFG,M72,REPLY,PRMB,RPLY,FIXNM * * EXT EXEC,.STOP,ERROR EXT .1,.2,.3,.4,.6,.10 EXT .8,.32,.48,FCORE,PROGL EXT M1,M2,M4,M5,M7 EXT B377,B100,B200 EXT STCK EXT DBSY,%TAM,INDCK,SBYTE * * A EQU 0 B EQU 1 * ********************************* * ENTRY POINTS FOR REMOTE CALLS ******************** ********************************* * * CREATE A CENTRAL FILE. * CCRET NOP JSB CQUE NO RETURN. CALL IS POINTER TO DEC 150 ENTRY POINT AND FUNCTION CODE. * * PURGE A CENTRAL FILE. * CPURG NOP JSB CQUE DEC 151 * * OPEN A CENTRAL FILE. * COPEN NOP JSB CQUE DEC 152 * * WRITE ON CENTRAL FILE. * CWRIT NOP JSB CQUE DEC 153 * * READ FROM CENTRAL FILE. * CREAD NOP JSB CQUE SIGN BIT OF FCN CODE SET FOR OCT 100232 READ (FCN = 154). * * POSITION CENTRAL FILE. * CPOSN NOP JSB CQUE DEC 155 * * REWIND CENTRAL FILE. * CWIND NOP JSB CQUE DEC 156 * * CLOSE CENTRAL FILE. * CCLOS NOP JSB CQUE DEC 157 * * RENAME CENTRAL FILE. * CNAME NOP JSB CQUE D158 DEC 158 * * CONTROL CENTRAL FILE. * CCONT NOP JSB CQUE DEC 159 * * LOCATE CENTRAL FILE RECORD. * CLOCF NOP JSB CQUE DEC 160 * * ABS POSITION CENTRAL FILE. * CAPOS NOP JSB CQUE DEC 161 * * READ CENTRAL FILE DIRECTORY. * CSTAT NOP JSB CQUE OCT 100242 READ CALL. FCN = 162. * * REMOTE EXEC CALLS * CAXTM BSS 0 TIME ABSOLUTE..SAME AS INITAL OFFSET CEXTM NOP JSB CQUE GO PROCESS REQUEST OCT 243 REQUEST FUNCTION CODE OF 163. DEC 12 EXEC CODE...12 TIME SCHEDULE SPC 2 * STANDARD SCHEDULE CSCHD NOP JSB CQUE SET PRAMS FOR SCHEDULE CALL OCT 243 DEC 10 EXEC CODE FOR SCHEDULE SPC 2 * TIME REQUEST CTIM NOP JSB CQUE GO SET UP PRAMS FOR TIME REQUEST OCT 243 DEC 11 TIME REQUEST SPC 2 * SEND MESSAGE CMESG NOP JSB CQUE SET UP PRAMS OCT 243 DEC 2 SET UP AS A WRITE REQUEST TO LU 1 SKP ********************************** * BUILD THE PARAM BUFFER (PARMB) ******************* ********************************** * * * WHEN CQUE IS CALLED, TjHE ADDRESS OF THE USER * CALL AND THE FUNCTION CODE CAN BE DETERMINED * VIA THE ENTRY POINT CONTENTS. * CQUE NOP LDA CQUE,I FETCH FUNCTION CODE. CLB,INB CHECK SIGN BIT. SSA,RSS INB STB RDATA SET "READ DATA" FLAG. ELA,CLE,ERA CLEAR SIGN BIT. STA FCN ADA MD163 STA .FCN SET FUNCTION CODE FLAG..ZERO=EXEC CLA STA ISTAT CLEAR ERROR FLAG LDA CQUE FETCH USER CALL ADDRESS. ADA M2 LDA A,I STA CALL * CLA CLEAR DATA BUFR ADDR. STA DADR * * INITIALIZE PARMB: STREAM, SUB-STREAM, FUNCTION CODE. * LDA PRMBA POINT TO PARMB AREA. STA PARMB * LDA .FCN GET FUNCTION CODE FLAG LDB B5 SET FOR EXEC SZA REMOTE EXEC CALL INB NOT EXEC...RFA STB PARMB,I STORE STREAM TYPE. ISZ PARMB * CLA STA PARMB,I SUB-STREAM (NULL). ISZ PARMB * LDA FCN STA PARMB,I FUNCTION CODE. ISZ PARMB * * STORE SPARE WORD, DATA FLAG = 0. * LDA B202L STA PARMB,I 202*000 ISZ PARMB ALF,ALF STA PARMB,I 000*202 ISZ PARMB CLA STA PARMB,I 000*000 * * INITIALIZE DYNAMIC POINTERS. * LDA CALL ADDR OF USER CALL RETURN ADDR. INA MOVE OVER RETURN ADDRESS STA P.PTR POINTER TO USER CALL PARAMETERS. * LDA .2 STA B.PTR PARMB BYTE POINTER. * LDA UPARM ADDR OF SAVED PARAMS. STA U.PTR * * PERFORM COMMON PARMB ENTRY STORAGE ACCORDING TO * CLASS OF CALL (CEXEC OR RFA) * LDA .FCN GET FUNCTION CODE INDICATOR SZA JMP .RFA * .EXEC JSB STERM SET A B202 TERMINATOR LDA CQUE FIND OUT EXEC CODE INA LDA A,I WE HAVE FUNCTION CODE JSB STWRD SAVE FUNCTION EXEC CODE STA .RCD SAVE IT. * CPA .2 JMaP RC1 WRITE. CPA .10 JMP RC10 SCHEDULE. CPA D11 JMP RC11 TIME. CPA D12 JMP RC12 EXECUTION TIME. * LDA M70 ILLEGAL REQUEST CODE. JMP SSTAT * .RFA LDA FCN GET FUNCTION CODE ADA MD153 CHECK IF IT IS A CREATE OPEN PURGE SSA,RSS OR RENAME CPA B5 IF IT IS MOVE NAME TO DCB JSB MNAM JSB STRNG MOVE NAME TO PARMB ISZ P.PTR SKP OVER ERROR STATUS * LDA FCN ADA MD150 ADA RTBL LDA A,I JMP A,I * RTBL DEF *+1 GO TO UNIQUE PROCESSING FOR DEF .CRET THE PARTICULAR RFA CALLS. DEF .PURG DEF .OPEN DEF .WRIT DEF .READ DEF .POSN DEF .WIND DEF .CLOS DEF .NAME DEF .CONT DEF .LOCF DEF .APOS DEF .STAT * * UNIQUE PROCESSING FOR INDIVIDUAL REMOTE EXEC CALLS. * * HERE FOR MESSAGE PROCESSING * WHEN INITILIZATION ROUTINE CALLED REMOTE * LU WAS OBTAINED AND SET AS AN ASC VALUE * RC1 JSB STERM SET IN CONTROL BYTE JSB GET.P GET DISPLAY LU (THEY DON'T KNOW THAT THEY CAN") SZA,RSS IS IT ZERO (NORMALLY SHOULD BE!) INA ZERO...SET LU 1 JSB STWRD SAVE LU JSB STERM SET CONTROL BYTE FOR LENGTH JSB GET.A GET ADDRESS OF MESSAGE STA TEMP1 SAVE ADDRESS MOVE LDA A,I GET LENGTH AND B377 MASK OFF BIT 8 STA B SAVE IN B REG ADA MBUFS CHECK IF IT IS IN RANGE SZB ZERO LENGTH...ERROR SSA,RSS NEGATIVE...IN RANGE JMP WRONG OUT OF RANGE...TREATE AS MISSING PRAM INB INCASE ODD # OF CHARACTERS STB TEMP3 SAVE # OF CHARACTERS CLE,ERB CONVERT TO # OF WORDS CMB,INB NEGATE COUNT LDA MBFA2 GET ADDRESS OF MESSAGE BUFFER STA TEMP2 SAVE CURRENT ADDRESS RC6101 ISZ TEMP1 GET TO CURRENT DATA WORD LDA TEMP1,I GET MESSAGE STA TEMP2,I AND MOVE IT TO BUFFER ISZ TEMP2 GET NEXT OUTPUT WORD ADDRESS INB,SZB DONE? JMP RC101 NO...CONTINUE LDA MBUFA GET MESSAGE BUFFER ADDRESS JSB RPARM SAVE ADDRESS LDA TEMP3 GET LENGTH CLE,ERA CONVERT TO WORD LENGTH SEZ ODD # OF CHARACTERS? JMP RC100 NO STA TEMP3 SAVE # OF WORDS CCB GET A -1 ADB TEMP2 GET ADDRESS OF LAST VALUE STORED LDA B,I GET VALUE AND M377L MASK OFF ALL BUT UPPER 8 BITS IOR .32 MASK IN SPACE STA B,I SAVE LAST WORD LDA TEMP3 GET COUNT AGAIN RC100 ADA .3 ADD IN PREAMBLE JSB RPARM SAVE LENGTH STA PARMB,I SET IN PARMB DATA FLAG JSB STWRD SAVE VALUE IN DATA STREAM JMP READY SEND MESSAGE * RC10 JSB STRNG STORE PROGRAM NAME. ISZ P.PTR GET PAST RETURN STATUS JSB OPTN STORE OPTIONAL PARAMS. JSB OPTN JMP OPT3 * RC11 JMP READY * RC12 JSB STRNG STORE PROG NAME. JSB INTGR IRESL JSB INTGR MTPLE JSB INTGR IOFST: CHECK SIGN. SSA JMP READY INITIAL OFFSET VERSION. JSB INTGR MINS JSB INTGR ISECS JSB STERM SET IN TERMINATOR CLA SET MSECS TO 0 JSB STWRD JMP READY ABSOLUTE START TIME VERSION. * * UNIQUE PROCESSING FOR INDIVIDUAL RFA CALLS. * .CRET ISZ P.PTR SKIP OVER NAME LDA B204 STORE 2-WORD SIZE ARRAY. JSB STBYT JSB GET.A STA TEMP3 DLD TEMP3,I GET FLOATING POINT LENGTH FIX CONVERT IT INTO AN INTEGER JSB STWRD ISZ TEMP3 ISZ TEMP3 GET TO RECORD LENGTH DLD TEMP3,I GET LENGTH FIX CONVERT IT TO FIXED. JSB STWRD JSB INTGR STORE FILE TYPE. JMP OPT2 * .PURG ISZ P.PTR SKP OVER NAME PRAM JMP OPT2 * .OPEN ISZ P.PTR SKP OVER NAME OPT3 JSB OPTN OPT2 JSB OPTN STORE OPTIONAL PARAMS. OPT1 JSB OPTN JMP READY PARMB COMPLETE. * .CLOS EQU OPT1 * .READ JSB GET.A JSB RPARM SAVE DATA BUFR ADDRESS. JSB STLEN STORE LENGTH. JMP OPT2 * .WRIT EQU .READ * .POSN JSB INTGR STORE RECORD NUMBER. JMP OPT1 * .WIND JMP READY * .NAME ISZ P.PTR SKP OVER OLD NAME JSB STRNG STORE NEW NAME. JMP OPT2 * .CONT JSB INTGR STORE CONTROL WORD. JMP OPT1 * .LOCF JMP READY * .APOS JSB INTGR STORE RECORD NUMBER. JMP OPT2 * .STAT LDA .2 RESET BYTE POINTER. STA B.PTR LDA P.PTR BACK UP PARAM POINTER. ADA M1 (NO IERR PARAM) STA P.PTR JSB GET.A JSB RPARM SAVE DATA BUFR ADDRESS. LDA D124 STORE LENGTH STA PARMB,I IN DATA-FLAG AND JSB RPARM GIVE IT TO CALLER. JMP READY * MSSNG LDA M10 MISSING PARAMETER. JMP SSTAT * READY CLA STORE TERMINATION BYTE. JSB STBYT * LDA UPARM POINT TO PLEN STORAGE. ADA .2 STA U.PTR * JSB RPARM PUSH PARAMETER POINTER SKP ****************************************** * TRANSMIT PARMB TO CENTRAL & READ REPLY *********** ****************************************** * LDA DADR GET DATA FLAG SZA IS THERE DATA ON THIS REQUEST? JMP REQAD YES...REQUEST AND DATA CCE SET FOR WRITE REQ JSB %TAM MAKE CALL DEF REPLY ADDRESS OF REPLY BUFFER DEF PRMBA ADDRESS OF PRMB AND LENGTH JMP COMPL WHEN WE GET HERE...RECIEVED RESPONSE SPC 2 * * ONE DATA READ OR WRITE CHECK FOR LEGAL BOUNDS * REQAD LDB DLEN GET LENGTH LDA M72 SET INCASE ZERO LENGTH RECORD SZB CHECK FOR ZERO LENGTH OR SSB NEGATIVE JMP SSTAT YES...TERMINATE CALL LDA RDATA GET DATA FLAG CPA .2 IS IT A WRITE? JMP REQDA YES...DONT CHECK BOUNDS LDA DADR GET STARTING ADDRESS JSB INDCK CHASE DOWN INDIRECTS ADB A GET LAST WORD+2 ADB M2 BACK IT UP TO WITHIN BOUNDS JSB DIMCK CHECK DIMENSIONS REQDA LDA DADR SET FOR SEND DATA AND REQ LDB RDATA READ OR WRITE COMAND RBR,ERB SET E REG IF WRITE DATA JSB %TAM GO MAKE REQ AND DATA CALL DEF REPLY REPLY ADDRESS DEF DADR PRAM ADDRSS..DATA ADD,DATA LEN,REQ ADD,REQ LEN SKP ******************************* * PASS RETURN PARAMS TO USER. ********************** ******************************* * COMPL CPA .1 ALL OK? JMP CMPL1 YES LDB M51 GET GENERAL DRIVER ERROR CPA B100 PARITY ERROR? LDB M52 YES...PARITY ERROR LDA B GET ERROR CODE FOR STATUS JMP SSTAT AND SET IN ERROR CODE CMPL1 LDA REPLY+2 RFAM ERROR CODE? CPA M1 RSS JMP CMPL2 NO. * LDA M11 YES. MAP THE CODE. LDB REPLY+3 CPB .4 JMP SSTAT FILE NOT OPEN. LDA M62 CPB B5 JMP SSTAT REQ. OVERFLOW AT CENTRAL. LDA M71 CPB .8 JMP SSTAT UNDEF. PROG SCHEDULE. CPB D12 JMP SSTAT ILLEGAL LU. LDA M4 CPB D11 ILLEGAL RECORD SIZE? JMP SSTAT LDA M103 SET FOR SOFTWARE BUG * SSTAT STA ISTAT COMMUNICATION STATUS. * CMPL2 LDA ISTAT GET STATUS FLAG SZA,RSS IS IT ZERO? JMP CMPL5 YES...NO ERROR NORMAL TERMINATION STA REPLY+3 SET ERROR CODE IN B REG STA REPLY+4 SET FOR IERR IN FMP CALL CCA GET A -1 STA REPLY+2 SET A REQ=-1...ERROR CMPL5 LDA REPLY+2 SEE IF ERROR OCCURED LDB M6L0 SET FOR ILLEGAL CALL CPA ASCIL IS IT "IL" ILLEGAL CALL STB ISTAT YES...SAVE ERROR CODE CMPL7 LDA CALL INA STA P.PTR PTR TO USER CALL PARAMS. * LDA RPLY ADA .4 STA I.PTR PTR TO REPLY BUFR PARAMS. * LDA .FCN TEST FOR RFA OR CEXEC. SZA,RSS JMP RREXC CEXEC. * LDB FCN RFA. CSTAT? CPB D162 JMP EXIT YES. ALL DONE. * LDA I.PTR,I NO. RETURN IERR. ISZ P.PTR PASS OVER DCB JSB RWORD ISZ I.PTR GET TO FIRST RETURN PRAM LDA ISTAT GET STATUS SZA ANY ERRORS? JMP EXIT YES...DON'T STORE ANYTHING * LDB FCN CPB D154 CREAD? RSS JMP CMPL3 NO. LDA P.PTR MOVE PARAM POINTER. ADA .2 STA P.PTR LDA I.PTR,I YES. RETURN XMSN LOG. JSB RWORD JMP EXIT * CMPL3 CPB D160 CLOCF? RSS JMP EXIT NO. LDB M7 YES. RETURN N PARAMS. JSB PINTG JMP EXIT * RREXC LDA ISTAT GET STATUS WORD SZA ANY STATUS ERRORS? JMP CMPL4 YES...REPORT THEM LDA .RCD GET REQUEST CODE CPA .10 IS IT A SCHEDULE? JMP CMPL6 YES...PASS BACK STATUS CPA D12 SEE IF TIME SCHEDULE JMP CMPL8 YES...CHECK FOR ILLEGAL TIME INTERVAL REQ CPA D11 IS IT A TIME CALL? RSS YES JMP EXIT NO...DONE LDB M5 RETURN TIME ARRAY STB TEMP2 SAVE COUNT TLOOP LDA I.PTR,I JSB RWORD SAVE VALUE ISZ I.PTR ISZ TEMP2 DONE? JMP TLOOP NO...CONINUE JMP EXIT * CMPL4 LDA ISTAT SSA IF POSITIVE, DON'T CONVERT CMA,INA STA ISTAT JSB ERROR ERROR...STATUS ERROR DEF *+3 DEF ISTAT STATUS CODE DEF ERMSG "DS" JMP EXIT TERMINATE CALL * CMPL6 ISZ P.exPTR SKIP OVER NAME...STATUS RETURN LDA REPLY+2 A REG TO SCHEDULE CALL JSB RWORD PASS BACK STATUS JMP EXIT AND TERMINATE * * HERE ON TIME INTERVAL REQ * CMPL8 LDB M72 SET FOR ILLEGAL SCHEDULE CALL LDA REPLY+2 SEE IF REPLY IS ASC..."SC". CPA SCCOD IF SO, TELL WORLD RSS JMP EXIT NO ERROR STB ISTAT SAVE STATUS JMP CMPL4 AND GO COMPLAIN SPC 1 SCCOD ASC 1,SC SPC 1 * * RETURN TO USER PROGRAM. * EXIT CLA CLEAR OUT DIMENSION CHECK FLAG STA DIMFG LDA CALL,I GET RETURN ADDRESS. STA TEMP1 LDA REPLY+2 SET A, B REGISTERS. LDB REPLY+3 JMP TEMP1,I RETURN. SKP ********************** * SUBROUTINE SECTION ******************************* ********************** * * STORE INTEGER PARAM FROM USER CALL INTO PARMB. * INTGR NOP JSB PCHEK IS THE PARAM SPECIFIED? JMP MSSNG NO. JSB STERM SAVE CONTROL BYTE JSB GET.P FETCH PARAM VALUE. JSB STWRD STORE IN PARMB. JMP INTGR,I (A) HAS THE VALUE. * * STORE OPTIONAL INTEGER PARAM (IF SPECIFIED) FROM * USER CALL INTO PARMB. * OPTN NOP JSB PCHEK IS PARAM SPECIFIED? JMP OPTN,I NO (LEAVE P.PTR ALONE). JSB INTGR YES, STORE IT. JMP OPTN,I (A) HAS THE VALUE. * * STORE AN ASCII STRING FROM USER FISRT WORD * CONTAINS THE COUNT OF STRING TO BE STORED * INTO PARMB. * STRNG NOP JSB PCHEK IS PARAM SPECIFIED? JMP MSSNG NO. * LDA .6 STORE CONTROL BYTE. JSB STBYT JSB GET.A GET ADDRESS JSB FIXNM CHECK IF NUMBER INSTEAD OF NAME JMP MSSNG TREAT AS MISSING PRAM IF ERROR STB TEMP3 SAVE ADDRESS OF NAME LDA TEMP3,I GET LENGTH WORD AND B377 MASK OFF ALL BUT COUNT CMA,INA NEGATE COUNT STA TEMP2 SAVE COUNT ADA .6  GET NUMBER OF SPACES NEEDED CMA NEGATE IT -1 STA TEMP4 SAVE # OF SPACES SSA,RSS MAKE SURE NOT OVER 6 CHAR LONG JMP MSSNG TREAT AS AN ERROR STR ISZ TEMP3 GET ADDRESS OF NEXT WORD LDA TEMP3,I GET CHARACTER ALF,ALF GET UPPER CHAR FIRST JSB STBYT SAVE CHARACTER ISZ TEMP2 DONE? RSS NO...CONTINUE JMP STR1 YES LDA TEMP3,I GET RIGHT CHARACTER JSB STBYT ISZ TEMP2 DONE? JMP STR NO STR1 LDA .32 YES...NEED SPACES? ISZ TEMP4 COUNT WILL BE -1 OR LESS RSS NEED SPACE JMP STRNG,I MOVED ALL THE SPACES WE NEEDED JSB STBYT SAVE SPACE JMP STR1 AND CONTINUE * * SUBROUTINE TO MOVE NAME FROM NAME TO DCB * MNAM NOP LDA P.PTR GET CURRENT PRAM ADDRESS STA TEMP4 JSB GET.A GET DCB NAME ADDRESS STA MNAM1 SAVE ADDRESS FOR MOVE ISZ P.PTR WE ARE OK...GET INPUT ADDRESS JSB GET.A GET ADDRESS STA TEMP3 SAVE AS TEMP LDA MNAM1 GET LOWER BOUND LDB MNAM1 GET UPPER BOUND ADB .2 JSB DIMCK SEE IF DIM ARRAY MNAM2 LDB M4 GET DOWN COUNTER LDA TEMP3,I GET SOURCE STA MNAM1,I SAVE VALUE ISZ TEMP3 ISZ MNAM1 INB,SZB DONE? JMP *-5 NO LDA TEMP4 GET CURRENT PRAM ADDRESS STA P.PTR RESET POINTER JMP MNAM,I RETURN SPC 1 MNAM1 NOP SPC 2 * * SUBROUTINE TO DO DIMENSION CHECKING * CALLING SEQUENCE * JSB DIMCK * A REG= START OF ARRAY * B REG= END OF ARRAY * WILL ABORT IF ERROR * DIMCK NOP CMA CMB NEGATE BOUNDS ADA PROGL START OF STACK AREA ADB FCORE END OF STACK AREA SSA MUST BE NEGATIVE SSB MUST BE POSITIVE RSS ERROR...HE BLEW IT...KICeK HIM OFF JMP DIMCK,I RETURN...ALL OK LDA DIMFG SEE IF SPECIAL SZA ZERO, NOT SPECIAL JMP DIMCK,I YES SPECIAL JSB ERROR ERROR...DST ERROR DEF *+3 DEF .1 DEF DST DST ERROR MESSAGE JMP .STOP DOOM...GET OUT DST DEC 3 ASC 2,DST DIMFG NOP SPC 1 * * STORE A-REGISTER CONTENTS INTO NEXT WORD * OF SAVED VALUES. * RPARM NOP LDB U.PTR,I STA B,I ISZ U.PTR JMP RPARM,I * * STORE USER BUFFER LENGTH IN PARMB, DATA-FLAG, * AND SAVE IT. * STLEN NOP JSB INTGR STORE IN PARMB. * SZA,RSS JMP WRONG SPECIFIED, BUT ZERO. SSA,RSS NEGATIVE? JMP STL NO. * CMA,INA YES, MAKE POSITIVE. INA ROUND UP. CLE,ERA CONVERT TO WORD COUNT. * STL STA PARMB,I STORE IN DATA-FLAG. JSB RPARM PASS BACK TO CALLER. JMP STLEN,I EXIT. * WRONG LDA M71 JMP SSTAT * * TEST WHETHER THE USER HAS SPECIFIED * A PARAMETER. * JSB PCHEK * ERROR RETURN (PARAM NOT GIVEN) * NORMAL RETURN * PCHEK NOP LDA P.PTR PARAM ADDR CMA,INA ADA CALL,I RETURN ADDRESS. ADA M1 SSA,RSS ISZ PCHEK JMP PCHEK,I * * GET VALUE OF NEXT PARAM IN USER CALL * GET.P NOP JSB GET.A FETCH PARAM ADDR. LDA A,I GET PARAM VALUE. JMP GET.P,I * * GET ADDRESS OF NEXT PARAM IN USER CALL * AND BUMP PARAM POINTER. * GET.A NOP LDA P.PTR,I GET PARAMETER ADDRESS. RSS RESOLVE LDA A,I INDIRECT RAL,CLE,SLA,ERA ADDRESSES. JMP *-2 ISZ P.PTR BUMP PARAM POINTER. JMP GET.A,I * * STORE WORD (IN A-REG) IN PARMB. * STWRD NOP STA TEMP2 SAVE WORD. ALF,ALF JSB STBYT STORE LEFT BYTE. LDA TEMP2 JSB STBYT STORE RIGHT BYTE. LDA TEZMP2 RESTORE WORD. JMP STWRD,I RETURN. * * STORE BYTE IN NEXT BYTE OF PARMB. * STBYT NOP (A) = BYTE RIGHT JUSTIFIED. AND B377 ISOLATE NEW BYTE. STA TEMP1 SAVE. LDB B.PTR FORM WORD ADDR OF PARMB. CLE,ERB (E) = LEFT/RIGHT FLAG. ADB PARMB * LDA B,I INSERT NEW BYTE INTO PARMB. SEZ,RSS ALF,ALF AND M377L IOR TEMP1 SEZ,RSS ALF,ALF STA B,I * ISZ B.PTR BUMP RELATIVE BYTE POINTER. JMP STBYT,I RETURN. * * * PASS A-REG CONTENTS TO USER PARAM. * RWORD NOP STA TEMP1 JSB PCHEK IS PARAM SPECIFIED? JMP RWORD,I NO. LDA TEMP1 YES. LDB P.PTR,I STA B,I ISZ P.PTR JMP RWORD,I * * PASS N PARAMS TO USER PROGRAM. (B)= -N. * PINTG NOP STB TEMP2 PLOOP LDA I.PTR,I JSB RWORD ISZ I.PTR ISZ TEMP2 JMP PLOOP JMP PINTG,I * * SET CONTROL BYTE * STERM NOP LDA B202 JSB STBYT JMP STERM,I RETURN SKP * * SUBROUTINE TO ACCEPT EITHER A FLOATING POINT # * OR AN ASC II STRING * CALLING SEQUENCE * JSB FIXNM * ERROR RETURN * NORMAL RETURN * A REG=ADDRESS OF FIELD * B REG=NOT CHANGED IF ERROR, OR BUFFER ADDRESS ON RETURN * FIXNM NOP JSB INDCK TRACE DOWN THOSE LITTLE BITS STA FXNMA SAVE ADDRESS OF BUFFER LDA A,I GET COUNT WORD SZA,RSS ERROR...ZERO JMP FIXNM,I ERROR RETURN RAL,SLA NEGATIVE NUMBERS...ILLEGAL JMP FIXNM,I ERROR LDB FXNMA GET ADDRESS OF BUFFER AGAIN ISZ FIXNM GET NORMAL RETURN SSA,RSS BIT 14 SET...NUMERIC JMP FIXNM,I NO...ASC STRING * * IF NUMERIC CONVERT TO ASC AND ADD THE PREFEX "N" * LDB FNBFA GET ADDRESS OF INTERNAL BUFFER INB GET TO FIRST DATA WORD RBL sNLH CONVERT TO BYTE ADDRESS LDA ASCN GET THE PREFEX "N" JSB SBYTE SAVE PREFEX INB GET TO NEXT DATA BYTE ADDRESS STB FXNMB SAVE IN TEMP LOCATION DLD FXNMA,I GET FLOATING POINT WORD FIX CONVERT IT TO INTEGER JSB BNDEC CONVERT TO ASC FXNMB NOP BYTE ADDRESS GOES HERE INA INCREMENT CHARACTER COUNT TO INCLUDE "N" STA FNBF SAVE LENGTH OF NAME LDB FNBFA GET ADDRESS OF NAME BUFFER JMP FIXNM,I AND RETURN SPC 2 ASCN OCT 116 ASC "N" FXNMA NOP FNBFA DEF FNBF FNBF BSS 4 N SKP * * SUBROUTINE TO CONVERT BINARY TO ASC DECIMAL * UNSIGNED * CALLING SEQUENCE * JSB BNDEC * STARTING BYTE ADDRESS WHERE TO PUT OUTPUT * A REG BINARY NUMBER TO BE CONVERTED * UPON RETURN A REG=# OF CHARACTERS * THIS ROUTINE SUPRESSES LEADING ZEROS * BNDEC NOP STA DTEMP SAVE BINARY NUMBER LDB BNDEC,I GET STARTING BYTE ADDRESS STB DTMP1 SAVE FOR STORING ISZ BNDEC GET RETURN ADDRESS LDA .48 GET A ZERO JSB SBYTE SET INCASE WORD ALL ZEROS LDB M5 GET LOOP COUNT STB DCNT SAVE IN DOWN COUNTER LDA DNMA GET ADDRESS WHERE DIVISORS LOCATED STA DTMP2 SAVE IN INCREMENT COUNTER CLA GET A ZERO STA DTMP3 SAVE FOR # OF CHARACTERS CONVERTED BNDC1 CLB NEEDED FOR DIVISON LDA DTEMP GET BINARY NUMBER DIV DTMP2,I GET # OF TIMES IT WILL GO THROUGH STB DTEMP SAVE REMAINDER LDB DTMP3 GET OUTPUT BYTE ADDRESS SZA,RSS IS NUMBER ZERO? SZB AND IS IT A LEADING ZERO? RSS NO...SAVE IN JMP BNDC2 YES...IGNORE IT ADA .48 CONVERT TO ASC LDB DTMP1 GET BYTE ADDRESS WHERE TO PUT IT JSB SBYTE SAVE CHARACTER ISZ DTMP1 GET TO NEXT CHAR ADDRESS ISZ DTMP3 INCREMENT # OF CHAR COUNTERS BNDC2 ISZ DTMP2 GET TO NEXT DIVISOR ISZ DCNT DONE? JMP BNDC1 NO LDA DTMP3 GET COUNT SZA,RSS IS IT ZERO? INA YES...SET FOR ONE CHAR JMP BNDEC,I RETURN SPC 2 DTEMP NOP DTMP1 NOP DCNT NOP DTMP2 NOP DTMP3 NOP DNMA DEF DNM DNM DEC 10000,1000,100,10,1 SKP * * SUBROUTINE TO CLEAR LINE AND ENABLE LISTEN MODE * CLINE NOP LDA CLU GET LU AND B77 IOR B200 SET FOR CLEAR LINE STA CNWD SAVE AS CONTROL * JSB EXEC GO CLEAR THE LINE Y DEF *+3 DEF D3 CONTROL DEF CNWD CLA CLEAR DRIVER BUSY STA DBSY JSB LSTEN ENABLE LISTEN MODE JMP CLINE,I RETURN SPC 3 D3 DEC 3 B77 OCT 77 CNWD NOP SKP * * SUBROUTINE TO ENABLE LISTEN MODE * LSTEN NOP LDA CLU GET LU AND B77 IOR B100 SET FOR LSTEN ENABLE STA CNWD * JSB EXEC GO ENABLE DEF *+3 DEF D3 CONTROL DEF CNWD CLB WAIT AWHILE INCASE LINE DOWN INB,SZB JMP *-1 JSB EXEC GO DO A STATUS CHECK DEF *+4 DEF D13 DEF CLU DEF TEMP1 LDA TEMP1 GET STATUS JMP LSTEN,I RETURN SKP ********************************* * CONSTANTS AND WORKING STORAGE ******************** ********************************* * B5 OCT 5 D11 DEC 11 D12 DEC 12 D13 DEC 13 D124 DEC 124 D154 DEC 154 D160 DEC 160 D162 DEC 162 M10 DEC -10 MD150 DEC -150 MD153 DEC -153 MD163 DEC -163 M11 DEC -11 M51 DEC -51 M52 DEC -52 M60 DEC -60 M62 DEC -62 M70 DEC -70 M71 DEC -71 M72 DEC -72 M103 DEC -103 B202 OCT 202 B202L OCT 101000 B204 OCT 204 M377L OCT 177400 MBUFS ABS 0-MGSIZ-MGSIZ MAX # OF CHAR ALLOWED IN MESSAGEGE MBUFA DEF MBUF ADDRESS OF MESSAGE BUFFER MBFA2 DEF MBUF2 ADDRESS OF WHERE TO STORE MESSAGE RLU NOP REMOTE LU # * CLU NOP REMOTE COMPUTER LU RDATA NOP READ DATA FLAG. FCN NOP FUNCTION CODE. CALL NOP ADDR OF USER CALL +1. .FCN NOP 0= CEXEC, -= RFA. .RCD NOP CEXEC REQUEST CODE. P.PTR NOP USER CALL PARAM POINTER. B.PTR NOP PARMB BYTE POINTER. U.PTR NOP I.PTR NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP ISTAT NOP COMMUNICATION STATUS. * PARMB NOP * RPLY DEF REPLY * UPARM DEF UPRM UPRM DEF DADR DEF DLEN [ DEF PLEN * DADR NOP DLEN NOP PRMBA DEF PRMB PLEN NOP * * COMMUNICATION LINE ERROR MESSAGES * ASCIL ASC 1,IL ERMSG DEC 3 ASC 2,DS SKP * * THIS IS ONE TIME CODE USED TO CONFIGURE * THE SYSTEM AS TO WHICH LU DVR65 CARD IS ASSIGNED * THIS AREA OF CORE BECOMES BUFFERS!!!! * BY SETTING THE SIGN BIT ON THE STATUS REQUEST * RETURN WILL BE PASSED BACK TO ME EVEN * IF AN ERROR OCCURES. * IF AN ERROR OCCURES, THE A REG CONTAINS THE ASC * ERROR CODE. * IF A REG= "LU" NOT DONE...LU NOT ASSIGNED * IF A REG= "EQ" ALL FINISHED AND WE COULDN'T FIND * THE LU. IF THIS HAPPENS BSTOP IS CALLED AFTER AN ERROR * MESSAGE IS PRINTED. * AGAIN....WARNING.....THIS IS A ONE TIME SUBROUTINE... * SPC 2 SPC 1 CONFG NOP CLA GET A ZERO LDB M1 GET TO CALLING ADDRESS ADB CONFG STA B,I CLEAR CALLING ROUTINE LDA CLU GET COMM LU SZA DID SOMEBODY ELSE DEFINE IT? JMP CONFG,I RETURN...DON'T DO ANYTHING JMP CNF00 JUMP OVER MESSAGE BUFFER SPC 1 * * SET UP FOR BACKWARD ORG * FOR ONE TIME RUN THRU * * * NOTICE THE GAME WE ARE PLAYING * THE CONSTANT PART OF THE TELLOP MESSAGE IS * STORED HERE, AND THE BUFFER IS OVERLAYED BY ONE * TIME CODE, WHICH IS OVERLAYED BY ANOTHER BUFFER * AGAIN....WATCH OUT!!!!!!!!!!!! * * MBUF ASC 1,=S MBUF1 ASC 1, THIS IS WHERE THE LU IS STORED ASC 1,: * * NOTICE THAT THE VALUE "." IS USED FOR OTHER BUFFERS * . EQU * * * HERE WE CONFIGURE THE SDI CARD * SPC 1 CNF00 CLA,INA SET FOR LU 1 STA CLU SAVE LU CNF1 JSB EXEC MAKE A STATUS CALL DEF *+4 DEF SPSTW SPECIAL STATUS CALL WORD OCT 100013 DEF CLU LU DEF LUST STATUS REUTRNED JMP LUERR HERE ON AN ERROR LDA LUST GET STATUS CPA D65W nIS IT DVR65 DRIVER? JMP CNF0 YES...FOUND IT GET OUR LU CNF2 ISZ CLU JMP CNF1 TRY NEXT LU * * HERE IF WE CONFIGURED THE SDI CARD * NOW GO ENABLE IT AND FIND OUT WHO WE ARE * CNF0 LDA CLU GET COMM LU AND B77 KEEP ONLY THE LU IOR B300 SET UP FOR LSTEN CALL STA CNWD SAVE FOR CALL * JSB EXEC LSTEN CALL FOR THE LINE DEF *+4 DEF D3 CONTROL CALL DEF CNWD LSTEN DEF BITB PARAMETER BUFFER * CLA,CCE SET FOR WRITE REQ...NO DATA JSB %TAM DEF LUBR GET LU RETURN REPLY BUFFER DEF GTLUA ADDRESS OF GTLU PRMB SLA,RSS CHECK FOR DRIVER ERRORS JMP STDVR ERROR..TELL WORLD LDA LUBR+2 GET LU STA RLU SAVE FOR WORLD TO SEE CLB DIV .10 GET LU IN A AND B REG ADA .48 CONVERT TO ASC ADB .48 ALF,ALF MERGE INTO ONE WORD IOR B STA MBUF1 SAVE IN ASC THE LU JMP CONFG,I RETURN * * HERE ON DRIVER ERROR ON GET LU CALL * STDVR JSB EXEC TELL WORLD DEF *+5 DEF .2 DEF .1 DEF DVRA DEF DVRL JSB .STOP AND GET OUT SPC 1 DVRL DEC 16 DVRA ASC 16,COM LIN ERR START UP PHASE RTE-B * * HERE IF WE HAD A STATUS ERROR * LUERR CPA EQWD IS ERROR= TO "EQ"? JMP CNF2 YES...NOT A SERIOUS ERROR * * HERE WE IN BIG TROUBLE...NO SDI CARD * JSB EXEC WE IN BIG TROUBLE...NO DVR65 DEF *+5 DEF .2 WRITE REQUEST DEF .1 TO SYSTEM OUTPUT DEVICE DEF NLUER "NO DVR65 LU ASSIGNED" DEF NLUEL LENGTH JSB .STOP TERMINATE * NLUER ASC 10,NO DVR65 LU ASSIGNED NLUEL DEC 10 D65W OCT 32400 NOTE...THIS CONSTANT WILL DISAPEAR!!! LUST NOP SO WILL THIS TEMP WORD SPSTW OCT 100015 AND THIS EQWD ASC 1,EQ GTLUA DEF LUBR 1 WORD PARMB DEC 2 NEEDED FOR GTLU PARMB LUBR REP 35 MUST BE NOP'S FOR GET LU COMMAND NOP B300 OCT 300 BITB DEF *+1 NOP NOP DEC -1000 TIME OUT NOP NOP DEC -1 SIZ1 EQU * * * * RESET ORG FOR BUFFERS * ORG . * * SET UP MESSAGE BUFFER * MGSIZ EQU SIZ1-.-25 MBUF2 BSS MGSIZ * * NOTICE THAT WE HAVE OVERLAYED CODE!!!!!! * REPLY BSS 35 NOTICE THAT REPLY BUFFER IS USED * BY THE MESSAGE COMMAND!!! * PRMB BSS 35 * SIZE EQU * * END * + 91704-18102 1549 S 0122 DS1/B SCE/4 MODULE: %ASGN              H0101 KASMB,L,R,C,F HED %ASGN 91704-16102 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM %ASGN,7 91704-16102 REV A 751205 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 *********************************************** * *%ASGN HIGH LEVEL RFA INTERFACE ROUTINE * *SOURCE PART # 91704-18102 REV A * *REL PART # 91704-16102 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 11-13-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: NOV. 1975 * ************************************************ SPC 1 SUP * * * DEFINE ENTRY POINTS * SPC 1 ENT FLPCK,FLRCK,ASGN,UASGN,STATS ENT CLASN SPC 2 * * DEFINE EXTERNALS * EXT SWLST,TSTIT,EPRIN,TYPE EXT CRLF,CWRIT,EINPT,CREAD,READR EXT M2,M3,M4,M5,M7 EXT .32,.10,B377 EXT .ENTR,ERROR,CCLOS,CCRET,COPEN EXT ABYTE,SBYTE EXT DIMFG,EXEC,MOVE,FIXNM SPC 2 * * DEFINE A AND B REG * A EQU 0 B EQU 1 SKP * * HERE ON PRINT# STATEMENT * A REG CONTAINS THE LU * NOTE....A REG MUST NOT BE LOST IF CONTROL * IS TO BE RETURN TO RTEB... * IF THE LU IS FOUND IN THE LU TABLE * CONTROL IS TRANSFERED TO CORRECT ROUTINE * OTHERWISE CONTROL IS PASSED TO RTEB TO HANDLE I/O * SPC 2 FLPCK NOP JSB FILCK CHECK IF LU MATCHES FILE RSS MATCH...CONTINUE JMP FLPCK,I NO MATCH RETURN SPC 2 * * HERE IF LU MATCHES ONE IN THE FILE TABLE * LDA TABN GET TABLE DISPLACEMENT # MPY FPTS GET DISPLACEMENT TO FILE POINTER TABLE ADA FPT GET ADDRESS OF CORRECT TABLE START STA FILC3 SAVE IN TEMP FOR SWLST JSB SWLST SWITCH LIST DEVICE FILC3 NOP JMP EPRIN GO PROCESS AS A NORMAL PRINT SPC 2 FILT1 NOP FILT2 NOP FILT3 NOP SKP * * HERE ON READ# STATEMENT * A REG CONTAINS LU * IF THE LU IS FOUND IN THE LU TABLE * CONTROL IS TRANSFERED TO CORRECT ROUTINE * OTHERWISE CONTROL IS PASSED TO RTEB TO HANDLE I/O * SPC 2 FLRCK NOP JSB FILCK CHECK IF LU MATCHES FILE RSS WE HAVE A MATCH JMP FLRCK,I NO MATCH...JUST RETURN SPC 2 * * HERE IF LU MATCHES ON A READ REQUEST * LDA TABN GET TABLE NUMBER MPY FNPS LENGTH OF FILE NAME ENTRIES ADA FNPT ADD TO START OF FILE NAME AREA STA RNAMA SAVE FOR DCB ADDRESS ON READ LDB TABN GET TABLE ENTRY AGAIN ADB FSTT GET STATUS TABLE ADDRESS STB RSTA SAVE STATUS TABLE ADDRESS LDB FREDA GET ADDRESS OF FILE READ ROUTINE STB READR SAVE FOR BASIC JMP EINPT GO PROCESS INPUT SPC 2 FREDA DEF FREAD .5 OCT 5 SKP * * ROUTINE TO DO REMOTE READS * WHEN WE COME IN * A REG = POSITIVE CHAR COUNT * B REG = BUFFER ADDRESS * FILE NAME SET UP BY FLRCK * A REG= # OF CHARACTERS RECIEVED * FREAD NOP STB RBUFA SAVE BUFFER ADDRESS CLE,ERA CONVERT TO WORD ADDRESS STA FILT1 SAVE WORD LENGTH * * HERE WE DO THE READ REQUEST * ISZ DIMFG SET FOR SPECIAL REQ JSB CREAD DEF *+6 RNAMA NOP ADDRESS OF NAME BUFFER RSTA NOP ADDRESS OF STATUS WORD RBUFA NOP ADDRESS OF BUFFER DEF FILT1 MAX LENGTH DEF FILT2 ACTUAL LENGTH * * IF END OF FILE...MOVE ZERO TO BUFFER * LDA RSTA,I GET STATUS CPA M12  -12...EOF REACHED JSB ZERO LDA FILT2 GET ACTUAL LENGTH CLE,ELA CONVERT TO BYTE LENGTH JMP FREAD,I NO...ALL OK * * HERE TO MOVE ZERO IN BUFFER * ZERO NOP LDA ZEROF GET ZERO FILL WORD LDB FILT1 GET LENGTH STB FILT2 SET LENGTH TO MAX CMB,INB NEGATE COUNT ZERO1 STA RBUFA,I SAVE WORD ISZ RBUFA GET NEXT ADDRESS INB,SZB DONE? JMP ZERO1 NO JMP ZERO,I YES...RETURN SPC 2 ZEROF OCT 30040 SPACW OCT 20040 M12 DEC -12 SKP * * HERE WE COME IF WE ARE TO WRITE ON FILE #1 * * EACH ENTRY IS 7 WORDS LONG AND IS DESCRIBED BELOW * TO EXPAND THE NUMBER OF WORDS IN EACH ENTRY, * YOU MUST CHANGE THE LABEL "TABS",WHICH IS USED * ALL OVER THE PLACE FOR INDEXING TO CORRECT STARTING * ADDRESS OF ROUTINE TABS EQU 7 LENGTH OF EACH ENTRY * NOP CURRENT BUFFER COUNT ABS 0-BUFS-BUFS+2 MAX BUFFER LENGTH OCT -2 TO TELL SWITCH LIST TO ADD 2 TO ADDRESS FOR EOL PAR. FILE1 NOP SAVE RETURN ADDRESS JSB FILWT WRITE FILE INTO A TEMP BUFFER OCT 0 DEFINE FILE BUFFER #1 (NOTE 1 LESS) FLND1 JSB FILND GO TO END OF LINE ROUTINE SPC 2 * * HERE FOR FILE #2 * NOP ABS 0-BUFS-BUFS+2 OCT -2 FILE2 NOP JSB FILWT OCT 1 FLND2 JSB FILND SPC 2 * * HERE FOR FILE #3 * NOP ABS 0-BUFS-BUFS+2 OCT -2 FILE3 NOP JSB FILWT OCT 2 FLND3 JSB FILND SPC 2 * * HERE FOR FILE #4 * NOP ABS 0-BUFS-BUFS+2 OCT -2 FILE4 NOP JSB FILWT OCT 3 FLND4 JSB FILND SKP * * HERE WHERE ALL BUFFER ROUTINES COME TO HAVE * THERE BUFFERS DUMPED TO CENTRAL * THE CALLING SEQUENCE MUST BE HELD TO OR WE IN BIG TROUBLE * * NOP CURRENT COUNT UPDATED BY SWLST * DEC -72 MAX LINE LENGTH = * OCT -2 FLAG TO TELL SWITCH LIST I WILL HANDLE CRLF *FILEX NOP HERE WE COME FROM BASIC * JSB FILWT THERE WE GO TO FILL THE BUFFER * OCT X FILE BUFFER NUMBER * JSB FILND JSB FILND CRLF ROUTINE (MUST BE IN THAT LOC FOR SWLST) * * SPC 2 FILWT NOP STA FLWTB SAVE - LENGTH CLE,ELB CONVERT WORD ADDRESS TO BYTE ADDRESS STB SBYA SAVE IN SOURCE BYTE ADD. LDA FILWT GET PRAMS OF CALL ADA M2 GET TO CALLING ADDRESS STA *+2 SET FOR SWITCH LIST JSB SWLST SWITCH TO CURRENT DEVICE (SET TYPE WORD!) FLWTA NOP SET A LABEL FOR RETURN AT END OF ROUTINE UPDAT LDA FLWTB GET LENGTH CMA,INA MAKE IT POSITIVE ADA TYPE SET TYPE TO LENGTH AFTER MOVE STA TYPE CLA NEEDED FOR TSTIT JSB TSTIT SEE IF WE EXCEEDED LENGTH SZA,RSS A ZERO...EXCEEDED LENGTH JMP UPDAT YES...RESET TYPE LDA FILWT,I GET BUFFER # MPY FBPS GET STARTING ADDRESS OF CORRECT BUFFER ADA FBPT GET ACTUAL STARTING WORD ADDRESS CLE,ELA CONVERT TO BYTE ADDRESS LDB FILWT GET TO CURRENT DISPLACEMENT WITHIN ADB M5 DATA BUFFER...IT IS 5 WORDS BACK ADA B,I FROM FILWT RETURN...GET BYTE ADD IN BUFER STA DBYA SET FOR DESTINATION START BYTE ADDRESS LDA TYPE GET LENGTH IN BUFFER AFTER WRITE STA B,I RESET CURRENT COUNTER LDA SBYA GET SOURCE BYTE ADDRESS LDB DBYA GET DESTINATION BYTE ADDRESS JSB MOVE MOVE LINE FLWTB NOP LDA .32 GET A SPACE JSB SBYTE ALWAYS END WITH SPACE...TAKE CARE EVEN ODD LDB FLWTA,I GET RETURN ADDRESS JMP B,I RETURN SPC 2 SBYA NOP DBYA NOP SKP * * HERE AT END OF LINE * CALLED BY CRLF ROUTINE INDIRECTLY THROUGH FLNDX * FILND NOP LDA M2 ADA FILND F LDA A,I GET FILE# JSB WRITF WRITE OUT BUFFER...A REG=0 MUST LDB CRLF GET RETURN ADDRESS JMP B,I RETURN SKP * * SUBROUTINE CALLED BY BASIC TO ASSIGN AN LU * TO A REMOTE FILE. * * CALLING SEQUENCE * CALL ASSIGN("FILENAME",LU,ERROR) * B/N TABLE ENTRY SHOULD LOOK LIKE * ASSIGN(R,I,V),SUB=ASGN * SPC 2 AFNMA NOP ALUA NOP AERRA NOP ASGN NOP JSB .ENTR GO GET PRAMS DEF AFNMA LDA AFNMA GET ADDRESS OF NAME LOCATION JSB FIXNM CHECK NAME JMP AER15 STB AFNMA SAVE ADDRESS LDA AFNMA,I GET LENGTH WORD AND B377 ADA M7 CHECK IF IN RANGE SSA,RSS JMP AER15 NOT IN RANGE LDA CM70 GET ERROR CODE LDB ALUA,I GET LU SZB,RSS LU ZERO ILLEGAL JMP AERR LDA B JSB FILCK SEE IF IT IS ASSIGNED JSB CLOSE ASSIGNED...CLOSE FILE JSB ROMCK SEE IF WE HAVE ROOM JMP AERR NO ROOM JSB ASNF HAVE ROOM ASSIGN THE FILE AERR STA AERRA,I SAVE STATUS JMP ASGN,I NO...RETURN SPC 2 CM15 DEC -15 AER15 LDA CM15 JMP AERR SKP * * SUBROUTINE TO SET ALL TABLE ENTRIES AND * EITHER OPEN OR CREATE A FILE * CALLING SEQUENCE * JSB ASNF * NORMAL RETURN * A REG = TABLE INDEX NUMBER * B REG = TABLE # 1 ADDRESS *ALUA= ADDRESS OF LU *AFNMA= FILE NAME ADDRESS * ALSO TABN MUST CONTAIN TABLE # * UPON RETURN A REG= STATUS * ASNF NOP STB FILT2 SAVE ENTRY INTO TABLE ADA FSTT GET STATUS ADDRESS STA OSTA SAVE AS OPEN STATUS ADDRESS STA CRSTA SAVE FOR CREATE STATUS ADDRESS LDA TABN GET TABLE ENTRY # MPY FNPS GET DISPLACEMENT IN NAME BUFFER ADA FNPT GET ADDRESS OF NAME STA ONAMA SAVE DCB-"NAME" ADDRESS STA CRNMA SAVE FOR CREATS,E AS WELL LDA AFNMA ADDRESS OF FILE NAME STA OFNAM SAVE FOR OPEN STA CRFNM SAVE FOR CREATE ISZ DIMFG SET FOR SPECIAL JSB COPEN TRY OPENING THE FILE DEF *+6 ONAMA NOP OSTA NOP OFNAM NOP DEF .0 NO SECURITY CODE DEF .0 NO LU LDA OSTA,I GET STATUS SSA,RSS ALL OK? JMP ASNF1 YES ISZ DIMFG SET FOR SPECIAL JSB CCRET NO...TRY TO CREATE IT DEF *+8 CRNMA NOP CRSTA NOP CRFNM NOP DEF FSIZE DEFINE FILE SIZE AS A FLOATING PT. NUMBER DEF .10 FILE TYPE=10 DEF .0 DEF .0 LDA CRSTA,I GET STATUS ASNF1 LDB ALUA,I GET LU SSA,RSS ALL OK? STB FILT2,I YES...SET FILE AS ASSIGNED JMP ASNF,I RETURN SPC 2 FSIZE DEC 20. MAKE IT 20 RECORDS LONG F.P. .0 OCT 0,0 RECORD SIZE 0 SKP * * FUNCTION CALL MADE BY BASIC * ROUTINE NAME STATS * B/N ENTRY SHOULD LOOK LIKE * STATUS,SUB=STATS * ROUTINE TO GET THE STATUS OF A LOGICAL UNIT * STATS NOP FIX CONVERT LU TO INTEGER STA FILT1 SAVE LU JSB FILCK SEE IF IT IS A FILE RSS YES IT IS A FILE JMP EQTST NOT A FILE DO AN EQT STATUS CALL LDA TABN GET TABLE DISPLACEMENT # ADA FSTT GET STATUS LDA A,I WE HAVE STATUS STAT1 CLB GET A ZERO IN B FLT CONVERT TO FLOATING NUMBER JMP STATS,I RETURN TO BASIC * * HERE IF EQT STATUS CHECK * EQTST JSB EXEC DEF *+4 DEF .13 DEF FILT1 LU IN THAT ADDRESS DEF FILT2 LDA FILT2 GET STATUS AND B377 MASK ALL BUT STATUS JMP STAT1 RETURN TO BASIC SPC 2 .13 DEC 13 SKP * * ROUTINE CALLED BY BASIC TO UNASSIGN AN LU * CALLING SEQUENCE * CALL UNASSGN(LU,ERROR) * B/N ENTRY SHOULD LOOK LIKE * UN ASGN(I),SUB=UASGN * * ERROR WILL BE DS/1-11 * ULUA NOP USTAT NOP UASGN NOP JSB .ENTR DEF ULUA LDA ULUA,I GET LU SZA,RSS ZERO? JMP UAERR YES...ILLEGAL...ERROR JSB FILCK FIND FILE * * HERE WE CLOSE THE FILE * JSB CLOSE CLOSE FILE RSS UAERR LDA CM70 STA USTAT,I JMP UASGN,I RETURN SPC 2 SKP * * ROUTINE CALLED BY BSUPV TO UNASIGN ALL ASSIGNED * FILES. THIS ROUTINE IS CALLED TO PROTECT THE BASIC * USER FROM HIMSELF * CLASN NOP LDA ASGLA GET LU TABLE ADDRESS STA CLGN1 SAVE TABLE ADDRESS LDA MMAXF GET MAX NUMBER OF ENTRIES STA CLGN2 SAVE FOR DOWN COUNTER CLGNA LDA CLGN1,I GET LU SZA,RSS IS THERE ONE? JMP CLGNB NO...ENTRY NOT ASSIGNED...CHECK THE REST JSB UASGN IT IS ASSIGNED...UNASIGN IT DEF *+3 FAKE UNASIGN ROUTINE OUT!!! CLGN1 NOP DEF USTAT PUT STATUS BACK ON ITSELF CLGNB ISZ CLGN1 GET NEXT ENTRY ISZ CLGN2 WE DONE? JMP CLGNA NO...GET NEXT ENTRY JMP CLASN,I DONE...RETURN SPC 1 CLGN2 NOP SKP * * ROUTINE TO CHECK IF FILE MATCHES LU * A REG CONTAINS LU * B REG SAVED IF NO MATCHED * B REG=TABLE #1 ADDRESS IF ENTRY FOUND * UPON RETURN FILT2 CONTAINS - DISPLACEMENT+1 * TABN CONTAINS TABLE NUMBER -1 * FILCK NOP STB FILT1 SAVE B REG CLB GET A ZERO TO CLEAR TABLE COUNT STB TABN RESET TABLE NUMBER TO ZERO LDB MMAXF GET NUMBER OF BUFFERS STB FILT2 SAVE IN DISPLACEMENT COUNTER LDB ASGLA GET ADDRESS OF LU ASSIGNEMENT TABLE FILC1 CPA B,I IS THE LU SPECIFIED MATCHED? JMP FILCK,I YES...DO MATCH RETURN ISZ TABN INCREMENT TABLE NUMBER INB NO...GET TO NEXT ENTRY ISZ FILT2 DONE? JMP FILC1 NO LDB FILT1  YES...RESTORE B REG ISZ FILCK GET NO MATCH RETURN JMP FILCK,I RETURN SPC 1 TABN NOP SKP * * SUBROUTINE TO WRITE A RECORD ONTO A FILE * CALLING SEQUENCE * JSB WRITF * A REG= FILE # * * UPON RETURN FILT3=ADDRESS OF CURRENT LENGTH * A REG=0 TYPE AND CURRENT LENGTH SET TO ZERO * WRITF NOP STA FILT1 SAVE IN TEMP LOCATION MPY FBPS GET DISPLACEMENT IN DATA BUFFER BUFFER ADA FBPT GET STARTING ADDRESS FOR THIS DATA BUFFER STA BUFA SAVE BUFFER ADDRESS LDA FILT1 GET TABLE NUMBER MPY FNPS GET DISPLACEMENT IN NAME BUFFER ADA FNPT GET ADDRESS OF NAME BUFFER STA NAMA SAVE FOR WRITE CALL LDA FSTT GET FILE STATUS TABLE ADDRESS ADA FILT1 GET DISPLACEMENT STA STATA SAVE STATUS ADDRESS LDA FILT1 GET TABLE NUMBER MPY FPTS GET DISPLACEMENT IN ROUTINE BUFFER ADA FPT GET ADDRESS OF ROUTINE BUFFER ADA M3 GET TO LENGTH WORD STA FILT3 SAVE CURRENT LENGTH ADD LDA A,I GET LENGTH SZA,RSS IF LENGTH ZERO DON'T DO ANYTHING JMP WRT1 INA ADD ONE TO CONVERT ODD TO EVEN CLE,ERA CONVERT TO WORD ADDRESS STA FILT2 SAVE LENGTH * * HERE WE DO THE REMOTE FILE WRITE * ISZ DIMFG SET FOR SPECIAL JSB CWRIT DEF *+5 NAMA NOP STATA NOP BUFA NOP DEF FILT2 CLA GET A ZERO STA FILT3,I CLEAR COUNTS STA TYPE CLEAR COUNTS WRT1 JMP WRITF,I RETURN SKP * * SUBROUTINE CLOSE A FILE * CALLING SEQUENCE * JSB CLOSE * RETURN * A REG= FILE # * B REG=ADDRESS OF LOCATION IN TABLE #1 * FILT2 MUST BE SET TO -TABLE NUMBER+1 * WILL CLOSE FILE AND CLEAR ALL ENTRIES * AFTER FLUSHING THE BUFFER * CLOSE NOP CLA GET A ZERO FOR TABLE ENTRY STA B,I CLEAR OUT TABLE LDA TABN GET TABLE NUMBER JSB WRITF FLUSH THE BUFFER LDA NAMA GET ADDRESS OF NAME STA CNAMA SAVE FOR CLOSE REQEST LDA STATA GET STATUS ADDRESS STA CSTA SAVE STATUS JSB CCLOS CLOSE THE FILE DEF *+3 CNAMA NOP CSTA NOP LDA CSTA,I GET STATUS OF CLOSE JMP CLOSE,I RETURN SKP * * ROUTINE TO CHECK IF THERE IS ANY TABLE ROOM * CALLING SEQUENCE * JSB ROMCK * ERROR RETURN B REG=-73...NO ROOM * NORMAL RETURN * UPON RETURN A REG= TABLE NUMBER * B REG= TABLE #1 ADDRESS * ROMCK NOP LDA MMAXF GET MAX TABLE SIZE STA ROMT1 SAVE IN COUNTER CLA GET A ZERO STA TABN RESET TABLE INDEX NUMBER LDB ASGLA GET ADDRESS OF FILE TABLE ROM1 CPA B,I ZERO WORD= AVAILABLE JMP ROM2 ISZ TABN GET TO NEXT TABLE ENTRY INB GET NEXT BUFFER ADDRESS ISZ ROMT1 DONE? JMP ROM1 LDA CM73 JMP ROMCK,I NO ENTRY AVAILABLE RETURN ROM2 ISZ ROMCK GET NORMAL RETURN LDA TABN GET TABLE NUMBER JMP ROMCK,I RETURN * ROMT1 NOP CM70 DEC -70 CM73 DEC -73 SKP * * DEFINE MAX # OF FILES * THE MAX NUMBER OF FILES THAT A USER CAN OPEN * AT ANY ONE TIME IS DEFINED BY THE LABEL "MAXF". * CHANGING THE VALUE OF THIS LABEL WILL CHANGE * THE NUMBER OF FILES THAN CAN BE OPENED. ALL TABLES * WILL MODIFY THEMSELVES TO REFLECT THE CHANGE EXCEPT * THE FILE POINTER TABLE. I AM UNABLE TO AUTOMATE THE * GROWTH OF THIS TABLE AT ASSEMBLY TIME BECAUSE OF * JSB INSTRUCTIONS INTERSPECRED WITH THE CONSTANTS... * 10 POINTS FOR THE ONE WHO CAN HELP ME...L.P. * MAXF EQU 4 * * * DEFINE TABLES NEEDED * SPC 2 * * TABLE #1...LU ASSIGNMENT TABLE * THIS TABLE IS SET BY AN ASSGN CALL * AND CLEARED BY A REASSGN OR <:6CLOSE CALL * IF THE TABLE CONTAINS A ZERO...NO LU * ASGLA DEF *+1 REP MAXF #DEFINE NUMBER OF ENTRIES NOP SPC 2 * * TABLE #2... ROUTINE TABLE * HERE WE DEFINE THE STARTING ADDRESS OF THE ROUTINE * TABLE-"FPT", AND THE LENGTH OF EACH ENTRY IN THE TABLE * -"FPTS", WHICH IS SET TO THE LENGTH OF EACH ENTRY * FPT DEF FILE1 FPTS ABS TABS SPC 2 * * TABLE #3...BUFFER TABLE * HERE WE DEFINE THE STARTING ADDRESS OF THE DATA * BUFFER AREA-"FBPT", AND THE LENGTH OF EACH DATA * BUFFER WITHIN THE AREA-"FBPS". * FBPT DEF FBF FBPS ABS BUFS SPC 2 * * TABLE #4...FILE NAME TABLE * HERE WE DEFINE THE STARTING ADDRESS OF THE * DCB-FILE NAME TABLE-"FNPT",AND THE LENGTH OF * EACH NAME ENTRY-"FNPS". THE NAME GETS PUT IN * THIS BUFFER WHEN WE DO AN OPEN OR A CREATE. * FNPT DEF NAME FNPS ABS NAMES SPC 2 * * TABLE #5...STATUS TABLE * THE NUMBER OF ENTRIES IN THIS TABLE IS DETERMINED * BY MAXF. * FSTT DEF *+1 REP MAXF NOP SPC 2 * * NEGATIVE MAX # OF ENTRIES * * MMAXF ABS 0-MAXF SKP * * FILE BUFFERS--TABLE #3 * BUFFER SIZE IS DEFINED BY "BUFS". * BUFS EQU 37 * * # OF BUFFERS IS DEFINED BY MAXF * FBF REP MAXF LABEL ON REP WILL HAVE ADD OF FIRST WORD BSS BUFS INDIVIDUAL BUFFER SIZE SPC 2 * * NAME BUFFERS--TABLE #4 * LENGTH OF EACH NAME BUFFER IS DEFINED BY "NAMES" * NAMES EQU 4 * * NUMBER OF NAME BUFFERS DEFINED BY "MAXF" * NAME REP MAXF ASC NAMES, MOVE SPACE IN NAME AREA SPC 3 END EQU * END < # 91704-18103 1607 S 0122 DS1/B SCE/4 MODULE: %INTR              H0101 _ASMB,L,R,C HED %INTR 91704-16103 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM %INTR,1,3 91704-16103 REV A 760212 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ********************************************* * *%INTR PROGRAM TO HANDLE DISTRIBUTED SYSTEM INTERUPTS * *SOURCE PART # 91704-18103 REV A * *REL PART # 91704-16103 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 11-21-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: DEC 1975 * ********************************************** SPC 1 * * PROGRAM SCHEDULED BY DVR65 ON AN INTERUPT * WILL BRANCH TO CORRECT ROUTINE DEPENDING ON * STREAM TYPE * * DEFINE EXTERNALS * EXT REPLA,EXEC,FRPLY EXT FINDT,TRFLG,MSTFL,MSTB EXT %MOVE,DBSY SPC 2 * * DEFINE ENTRIES * ENT %BUF * * DEFINE LISTING OPTIONS * SUP * * DEFINE A AND B REGS * A EQU 0 B EQU 1 * SPC 3 START ISZ DBSY SET INTERUPT PROG BUSY JSB EQLU GET LU SZA,RSS LU DEFINED? JMP RPERR NO...IGNORE INTERUPT STA LU JSB RREQ READ REQUEST LDA %BUF GET STREAM TYPE AND BIT14 GET REQ/REPLY FLAG STA TEMP SAVE FOR LATTER LDA %BUF GET STREAM AGAIN AND B377 AND KEEP ONLY THE STREAM TYPE STA %BUF SAVE WITH BIT 14 OFF STA B CHECK LIMITS ADB M10 CAN'T BE LARGER THAN 9 SSB SSA LDA D10 SET FOR STREAM ERROR LDB A  GET STREAM AGAIN ADA BRNTA ADB BRNTB STB TEMP1 LDB TEMP SZB,RSS REPLY? LDA TEMP1 NO...REQUEST LDA A,I JMP A,I AND GO TO THE ROUTINE SPC 2 * * REPLY * BRNTA DEF *+1 DEF RFAR GET LU DEF RFAR DLIST DEF RFAR PROGRAM LOAD SAVE DEF RPERR PROGL...ERROR DEF PTPR PROGRAM TO PROGRAM REPLY DEF RFAR REMOTE EXEC REPLY DEF RFAR REMOTE RFA REPLY DEF RPERR OPERATOR COMMANDS...ERROR DEF RPERR FORCED DOWN LOAD...ERROR DEF RPERR UNDEFINED...ERROR DEF RPERR UNDEFINED...ERROR SPC 2 * * REQUEST * BRNTB DEF *+1 DEF GETLU GET LU DEF RERR DLIST DEF RERR PROGRAM LOAD SAVE DEF RERR PROGL DEF PTPR PROGRAM TO PROGRAM..REQUEST DEF REXEC REMOTE EXEC REQUEST DEF RERR FMGR REQUEST DEF RERR OPERATOR COMMANDS DEF RERR FORCED DOWN LOAD DEF RERR UNDEFINED DEF RERR UNDEFINED SPC 2 * * HERE ON RFA REPLY * RFAR LDA REPLA GET REPLY BUFFER ADDRESS STA REPLY SAVE ADDRESS LDA RREQ1 GET SOURCE ADDRESS LDB D35 GET LENGTH JSB %MOVE MOVE TO REPLY BUFFER AREA REPLY NOP REPLY BUFFER ADDRESS LDA LINST GET STATUS OF REQUEST STA FRPLY SET FOR COMPLETION...AND LENGTH JMP TERM TERMINATE ,INTR SPC 3 * * HERE ON GET LU REQUEST * GETLU LDA LU GET LU OF SERIAL INTERFACE STA REFCD SAVE FOR REPLY JSB SRPLY SEND REPLY JMP TERM AND TERMINATE SPC 3 * * HERE FOR PROGRAM TO PROGRAM COMUNICATION * PTPR LDA RREQ1 GET REPLY BUFFER ADDRESS ADA C2 GET TO FUNCTION CODE WORD LDA A,I GET FUNCTION CODE ALF,ALF WANT TO CHECK BIT 7 SSA IS IT A REPLY? JMP RFAR YES...TREAT LIKE RFA SPC 2 * * HERE FOR SLAVE PROGRAM TO PROGRAM ROUTINES * THIS ROUTINE USES FINDT TO GET THE TRAP # * AS SPECIFIED BY CENTRAL. THE TRAP IS THEN SET * AND THE PARMB IS MOVED INTO CORE RESIDENT LIBRARY * FOR LATTER AXCESS BY BASIC ROUTINES THAT HANDLE * SLAVE CALLS. * LDB RREQ1 GET BUFFER ADDRESS ADB C7 GET TO TRAP# LDA B,I GET TRAP# ALF,ALF GET 10'S DIGIT AND B17 MASK OFF THE ASC 60 STB TEMP SAVE ADDRESS OF LU MPY D10 MULTIPY BY 10 STA TEMP1 LDA TEMP,I GET TRAP # AGAIN AND B17 MASK OFF TO BINARY # ADA TEMP1 ALF,ALF GET IN CORRECT POSITON FOR FINDT JSB FINDT SEE IF TRAP ASSIGNED JMP TRPNT TRAP NOT THERE LDA B,I B REG POINTS TO TRAP ACTIVE WORD IOR BIT15 SET TRAP ACTIVE STA B,I SAVE TRAP ACTIVE STA TRFLG SET TRAP PENDING FLAG LDA MSTBA GET MASTER PARMB BUFFER ADDRESS JSB INDCK STA MSTBA CLEAR OFF INDIRECTS LDA RREQ1 GET SOURCE BUFFER ADDRESS LDB D35 GET PARMB LENGTH STB MSTFL SET LENGTH OF TRANSFER JSB %MOVE MOVE PARMB TO CORE RESIDENT LIB MSTBA DEF MSTB BUFFER ADDRESS OF MASTER PARMB AREA JMP TERM ALL DONE, TERMINATE SPC 1 * * HERE IF TRAP NOT SET...SEND A -41 ERROR * TO CENTRAL * TRPNT LDB RREQ1 GET TO STATUS WORD ADB C2 LDA B,I GET STATUS WORD IOR NTERR NOT THERE ERROR... BITS 15,7,2 STA B,I SAVE ERROR STATUS INB GET TO ERROR WORD LDA M41 GET -41 ERROR STA B,I SAVE ERROR JSB ENLIN CLEAR LINE IF REQUIRED JSB SRPLY AND SEND REPLY JMP TERM DONE...TERMINATE SPC 1 M41 DEC -41 SPC 4 * * HERE ON REMOTE EXEC CALLS * REXEC LDA RCODڜ GET REQUEST CODE XOR C3 REVERSE DIRECTION IF READ OR WRITE STA DDIR SAVE DIRECTION FLAG XOR C3 GET IT BACK TO NORMAL IOR BIT15 SET FOR SPECIAL EXEC REQ CODE STA RCOD SAVE REQUEST CODE XOR BIT15 STIP OFF BIT 15 FOR CHECK CPA C1 IS IT A READ? JMP REQ1 YES CPA C2 IS IT A WRITE? JMP REQ2 YES CPA C3 IS IT A CONTROL REQUEST? JMP REQ3 YES CPA D13 IS IT A STATUS REQUEST? JMP REQ13 YES CPA D10 IS IT A TRAP CALL? JMP REQ10 YES * * ILLEGAL EXEC CALL FOR THIS TERMINAL * JSB ENLIN CLEAR THE LINE IF REQUIRED DLD RQER "RQ " REQUEST ERROR SPC 1 * * HERE TO TERMINATE REMOTE EXEC CALLS * A AND B REG CONTAIN CORRECT STATUS * AS TO WHAT THE CENTRAL USER RECEIVES * REDN DST SABRG SAVE A AND B REG JSB SRPLY SEND REPLY JMP TERM AND TERMINATE SPC 2 * * HERE ON READ REQUEST * REQ1 LDA DLEN GET LENGTH OF DATA BUFFER SPC 2 * * HERE ON WRITE REQUEST * REQ2 EQU REQ1 SAME AS READ LDB DLEN GET IT AGAIN ADA MMDBS IS IT GREATER THAN MAX DATA BUF SIZE? SZA OR IS THERE A DATA BUFFER LENGTH SSA,RSS RSS ERROR JMP REQ22 NO ERROR JSB ENLIN CLEAR THE LINE DLD BFER "BF " BUFFER ERROR JMP REDN AND TERMINATE REQUEST * REQ22 LDA DDIR GET DIRECTION AGAIN CPA C2 IS IT A READ (REMEMBER WE INVERTED...) JSB RWEX YES...READ FROM DEVICE FIRST DST ABREG SAVE A AND B REG LDA DDIR GET DATA DIRECTION STA IRW LDA LU GET LU AND B77 KEEP ONLY LOW 6 BITS IOR B300 SET DATA ONLY CODE STA CNWD SAVE JSB EXEC READ OR WRITE TO OR FROM CENTRAL DEF *+7 DEF IRW REQUEST CODE DEF CNWD COONTROL DEF %DBUF DEF DLEN DEF %BUF+33 PASS TIME-TAGS DEF %BUF+34 LDA DDIR GET DIRECTION CLE,ERA SET DIRECTION INTO E REG DLD ABREG GET STATUS AGAIN SEZ IS IT A READ? JSB RWEX NO...WRITE...WRITE TO DEVICE JMP REDN ALL DONE SPC 2 * * HERE ON CONTROL REQUEST * REQ3 JSB EXEC ISSUE LOCAL CONTROL REQUEST DEF *+4 DEF RCOD DEF PRM1 DEF PRM2 NOP ALLOW FOR ERROR CONDITION JMP REDN AND TERMINATE SPC 2 * * HERE ON A TRAP CALL * REQ10 LDA PRM3 GET TRAP # ALF,ALF GET TENS DIGIT AND B17 MPY D10 GET TO TENS POSITION STA TEMP LDA PRM3 GET ONES DIGIT AND B17 IOR TEMP MERGE TENS AND ONES ALF,ALF GET IN CORRECT ORDER FOR CHECK JSB FINDT SEE IF TRAP AVAILABLE JMP TRPER NO...ERROR..NO TRAP...OR NOT IN RUN STATS LDA B,I B REG POINTS TO TRAP ACTIVE FLAG IOR BIT15 SET TRAP ACTIVE STA B,I SAVE TRAP ACTIVE STA TRFLG SET FOR TRAP PENDING CLA SET FOR ALL OK CLB JMP REDN DONE SPC 1 * * HERE IF TRAP ERROR OCCURED * TRPER DLD SC05 SEND ERROR BACK...SCHEDULE ERROR JMP REDN DONE SPC 2 * * HERE ON STATUS REQUEST * REQ13 JSB EXEC ISSUE LOCAL STATUS CALL DEF *+5 DEF RCOD DEF PRM1 DEF PRM1 RETURN STATUS GOES HERE DEF PRM2 OPTION RETURN GOES HERE NOP ALLOW FOR ERROR RETURN JMP REDN AND TERMINATE CALL SPC 3 * * SUBROUTINE TO READ OR WRITE DATA TO I-O DEVICE * CALLING SEQUENCE * JSB RWEX * RWEX NOP JSB EXEC DO THE EXEC CALL DEF *+7 DEF RCOD DEF PRM1 DEF %DBUF DEF PRM2 DEF PRM3 DEF PRM4 NOP INCASE OF ERROR JMP RWEX,I AND RETURN SPC 3 * * SUBROUTINE TO SEND STOP IF NEEDED AND REENABLE LISTEN * MODE * ENLIN NOP LDA LU GET LU OF SDI CARD AND B77 IOR B100 SET IN ENABLE LISTEN MODE BIT STA CNWD SAVE FOR CALL JSB EXEC MAKE THE CALL DEF *+3 DEF D3 CONTROL DEF CNWD LSTEN JMP ENLIN,I AND RETURN SPC 1 ENLN1 NOP SPC 3 * * SUBROUTINE TO SEND REPLY * SRPLY NOP LDA M10 GET ERROR COUNTER STA ERCNT LDA %BUF GET STREAM TYPE IOR B1411 SET IN REPLY FLAG & FRIENDLY BIT STA %BUF AND REPLACE IT * LDA LU AND B77 STA CNWD RETRY JSB EXEC DEF *+5 DEF D2I WRITE DEF CNWD REQUEST ONLY DEF %BUF DEF D35 JMP RTR1 ALLOW FOR ERROR RETURN JSB STAT CHECK STATUS RSS ERROR...TRY AGAIN JMP SRPLY,I AND RETURN RTR1 ISZ ERCNT MAX# OF TIMES? JMP RETRY NO JMP SRPLY,I YES SPC 1 ERCNT NOP * * HERE ON UNKNOWN STREAM ERROR * FOR REQUEST * RERR JSB ENLIN CLEAR LINE IF DATA DLD ILERR "ILRQ"...ERROR MESSAGE RETURNED DST %BUF+2 JSB SRPLY SEND ERROR REPLY JMP TERM AND TERMINATE SPC 2 * * HERE FOR UNKNOW STREAM ERROR * FOR REPLY * RPERR JSB ENLIN CLEAR LINE IF DATA JMP TERM IGNORE INTERUPT SPC 3 * * ROUTINE TO READ A REQUEST * RREQ NOP LDA LU AND B77 STA CNWD JSB EXEC DEF *+5 DEF D1I READ DEF CNWD REQ. ONLY RREQ1 DEF %BUF READ INTO REQUEST BUFFER DEF D35 35 WORDS JMP RPERR ERROR RETURN AND B377 STA LINST SAVE STATUS JSB STAT GO CHECK STATUS JMP RPERR READ ERROR...IGNORmE INTERUPT JMP RREQ,I A REG= BUF ADD B= BUF LEN * * DO A STATUS CHECK * STAT NOP SLA ALL OK? ISZ STAT YES JMP STAT,I YES SPC 3 * * INDIRECT CHASE DOWN * INDCK NOP RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I SPC 3 * * HERE TO TERMINATE PROGRAM * TERM CLA TELL BASIC NOT BUSY STA DBSY JSB EXEC TERMINATE PROGRAM DEF *+2 DEF C6 SKP * * ROUTINE TO FIND THE LOGICAL UNIT NUMBER OF A DEVICE * GIVEN THE ADDRESS OF WORD 4 OF ITS EQUIPMENT TABLE * CALLED AS FOLLOWS: * * LDB EQT4 (PASSED FROM DVR00) * JSB EQLU * A = 0 IF NOT FOUND -OR- * A = THE LOGICAL UNIT NUMBER IF FOUND SUP EQLU NOP ENTRY STB EQT4 SAVE B-REG FOR LATER TEST CLA STA LUNUM SET LU POINTER NEXT LDA LUNUM GET CURRENT LU NUM-1 CPA LUMAX DONE THRU ALL LU'S JMP NTFND YES, NOT FOUND!! ISZ LUNUM BUMP TO CURRENT LU ADA DRT POINT TO TABLE ADDRESS LDA 0,I GET CONTENTS AND O77 MASK OF SUBCHANNEL BITS MPY D15 CALCULATE ADDRESS OF WORD 4 ADA EQTA BASE ADDRESS ADA DM12 SUBTRACK ONE EQT & ADD DEC 3 CPA EQT4 COMPARE?? JMP FOUND YES !! JMP NEXT NO, TRY NEXT ONE SPC 1 NTFND STB LUNUM NOT FOUND RETURN A=0 FOUND LDA LUNUM FOUND RETURN A= LU NUMBER DIV D10 CONVERT TO ASCII ALF,ALF POSITION MOST SIG. DIGIT ADB 0 MIRGE IN LEAST ADB ASC00 CONVERT TO ASCII LDA LUNUM RESTORE BINARY VALUE JMP EQLU,I RETURN SPC 1 EQT4 NOP LUNUM NOP O77 OCT 77 ASC00 ASC 1,00 D15 DEC 15 DM12 DEC -12 EQTA EQU 1650B DRT EQU 1652B LUMAX EQU 1653B SKP * * DEFINE CONSTANTS * LINST NOP LU NOP B10.*00 OCT 100 C6 OCT 6 C2 OCT 2 C1 OCT 1 C3 OCT 3 C7 OCT 7 D10 DEC 10 D35 DEC 35 D13 DEC 13 B17 OCT 17 B77 OCT 77 B300 OCT 300 D3 DEC 3 D1I OCT 100001 D2I OCT 100002 M10 DEC -10 BIT14 OCT 40000 B1411 OCT 44000 NBT14 OCT 137777 BIT15 OCT 100000 NTERR OCT 100204 B377 OCT 377 CNWD NOP IRW NOP DUMMY NOP ABREG BSS 2 TEMP NOP TEMP1 NOP ILERR ASC 1,ILRQ RQER ASC 2,RQ BFER ASC 2,BF SC05 ASC 2,SC05 MDBS EQU 512 MAX DATA BUFFER SIZE MMDBS ABS -MDBS-1 SPC 1 . EQU * SID NOP BSS 1 REFCD NOP BSS 2 SABRG NOP RCOD NOP PRM1 NOP PRM2 NOP PRM3 NOP PRM4 NOP DLEN NOP DDIR NOP SPC 1 ORG . RESET TO MAKE SURE 35 WORD PRAMB %BUF BSS 35 SPC 1 %DBUF BSS MDBS LENGTH OF DATA BUFFER * END EQU * END START 0  " 91704-18104 1546 S 0222 DS1/B SCE/4 MODULE: %BSPV              H0102 SASMB,R,L,C,F HED %BSPV 91704-16104 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM %BSPV,7 91704-16104 REV A 751114 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ****************************************************** * *%BSPV BASIC SUPERVISOR...MODIFIED FOR DS1-B * *SOURCE PART # 91704-18104 REV A * *REL PART # 91704-16104 REV A * *WRITTEN BY: UNKOWN * *DATE WRITTEN: SAME AS ABOVE * *MODIFIED BY: LARRY POMATTO * *DATE MODIFIED: 8-29-74 * ******************************************************* * * ENT INIT,GTLYN ENT SWLST,LYNCK,LYNC1,LSTIT ENT CHAR,CHARN,DELM,CRLF,ATEMP ENT PGOLM,LIMCK,LOLIM,HILIM,CKLLN,INTIN ENT SWDEV,XQCMD ENT ONS,FROMS,ABREV,XSYNF ENT SCR,FRMTO ENT LSTR,PLSTA,LOKCK,CRLF1 * EXT PROGF,PROGL EXT INBAD,INCNT,BLANK,TYPE,GTCHR EXT LISTA,LISTR,LINE,MFASE,SBUFA EXT .BUFA EXT TFLAG,LIST EXT INDCK EXT PRNIN,TSTIT EXT TBSRH,TBLPT,LNGTH EXT DIGCK,INTCK EXT FNDPS EXT DRQST EXT SYE25,CALER,INVSC EXT MAXSN EXT .1,.2,.3,.7,.10,.32,.48 EXT M1,M2,M3,M8 EXT DEVCT,SETLP EXT FLRCK CHECK FOR "ASSIGNED" READ FILE...DS 1B EXT FLPCK CHECK FOR "ASSIGNED" PRINT FILE DS-1B EXT CONFG GO SET UP DVR65 IN LISTEN MODE EXT CLASN ROUTINE TO "UNASIGN" ALL ASIGNED FILES * ******************************************************* * ** LOKCK ** DUMMY VERSION, TYPE M, ONE EACH * LOKCK NOP JMP LOKCK,I * **h***************************************************** SKP * ************************************************** * * START APPROPRIATE PHASE OF BASIC * ************************************************** * ** INIT JSB CONFG CONFIGURE DVR65...ONE TIME ROUTINE JSB CLASN CLEAN UP ASSIGNED FILES CLA,INA SET A NON ZERO FOR JSB TRAP CALL TO CLEAR OUT TRAP JSB RTINT SET UP FWAM,LWAM FOR RTE TYPE SYSTEMS LDA KEYIA INITIALIZE INPUT DEVICE STA READR TO KEYIN DEVICE LDA BUFA STA .BUFA INIT TTY BUFFER POINTER LDA LWAM JSB INDCK STA LWAM ADA M110 STA SBUFA INIT SYNTAX BUFFER POINTER JSB PRNIN INITIALIZE OUTPUT BUFFER POINTER PATCH JMP SETUP BECOMES "STF 0" JSB EFASE EXECUTION PHASE? RSS NO JMP MFASE YES LDA M8 STA TFLAG LOKCK THROW OUT OPERATOR INPUT LDB RDYA JSB DSPLY DISPLAY "READY" JSB CRLF GTLYN LDA .32 INITIALIZE STA BLANK DELETE CHARACTER FOR GETCR JSB LINE ACCEPT A BASIC LINE JMP GTLYN * SKP * * ONCE ONLY CODE FOLLOWS - AREA THEN USED FOR I/O BUFFER * SETUP LDA FWAM JSB INDCK STA FWAM LDB PROGF CPB PROGL START ADDR=END ADDR? JMP SCRCH YES, SET BOTH TO FWAM, INFORM USER CMA,INA ADA PROGF SSA PROGF < FWAM? JMP SCRCH YES LDA PROGL CMA,INA ADA LWAM SSA PROGL >= LWAM? JMP SCRCH YES ITSOK SSB ADDRESS NEGATIVE? JMP SCRCH YES, GO TXPE "SCR" CPB PROGL HAS LAST LINE BEEN DONE? JMP GOMAN YES, GO TYPE "READY" LDA 1 INCREMENT LINE'S ADDRESS INA BY LENGTH OF LINE ADB 0,I TO GET NEXT LINE ADDRESS LDA 0,I CHECK LINE LENGTH ADA M3 SSA WAS INCREMENT POSITIVE? JMP SCRCH NO ADA M110 SSA WAS INCREMENT REASONABLE? JMP ITSOK YES SCRCH JSB SCR GOMAN LDA PAT STA PATCH FROM SETUP ON IS ONCE-ONLY CODE LDA SETLP STA LPCNT SET UP NBR OF LINE PRTR COLUMNS JMP PATCH * PAT NOP BSS SETUP+37-* 37TH WD OF I/O BUFFER HERE * * END OF ONCE ONLY CODE * SKP * *************************************************** * * SETUP FOR I/O, SWITCH TO REQUESTED ROUTINE * * CALL SEQ: JSB SWLST * DEF (ROUTINE ADDR) * RETURN: P+2: NORMAL EXIT * **************************************************** * SWLST NOP LDA LISTA SOURCE POINTER LDB LISTR DEST POINTER JSB MOVE SAVE PREVIOUS LIST DEVICE STATUS LDA SWLST,I SOURCE POINTER JSB INDCK LDB LISTA DEST POINTER JSB MOVE POST NEW LIST DEVICE STATUS LDA SPTR,I GET OUTPUT FUNCTION CODE STA CRLF1 INITIALIZE FUNCTION WORD PARAMS STA LYNC1 CPA M2 IF CONTROL WORD =-2 JSB CRLFF ROUTINE HANDLE OWN CRLF ISZ SPTR POINT AT SUBROUTINE ENTRY LDA SPTR STA LISTR PUT LIST SUBRTN PTR IN LISTR ISZ SWLST SKIP OVER PARAM JMP SWLST,I * MOVE NOP ADA M3 ADB M3 STA SPTR STB DPTR LDB M2 LDA SPTR,I STA DPTR,I ISZ SPTR ISZ DPTR INB,SZB JMP *-5 JMP MOVE,I * CRLFF NOP LDA SPTR GET ADDRESS OF ADA .4 OF CRLF ROUTINE STA LYNC1 SAVE IN LYNC1 SAVE FOR BRANCH IN CRLF JMP CRLFF,I RETURN * SKP * **************************************************** * * CHECK LINE POSITION & DO ASCII OUTPUT * * CALL SEQ: JSB LYNCK * RETURN: P+1: COMPLETION * *************************************************** * LYNCK NOP STA TEMPA STB TEMPB i  LDA LYNCK ASSUMES JSB LYNCK FOLLOWS ENTRY ADA M2 TO OUTPUT ROUTINE STA *+2 PASS DEVICE STATUS TO SWLST JSB SWLST BSS 1 UPDAT LDA TEMPA CMA,INA ADA TYPE STA TYPE UPDATE CARRIAGE POSITION CLA JSB TSTIT SZA,RSS DID TSTIT DO CR-LF? JMP UPDAT YES LDA TEMPA LDB TEMPB JSB DOIO LYNC1 BSS 1 SET UP BY SWLST JMP LYNCK,I * *************************************************** * * LSTIT IS AN ASC OUTPUT ROUTINE SWITCH * PLIST WILL START IC TO ASC CONV IN BASIC * ************************************************** * LSTIT NOP JSB LSTR,I DO LISTING TASK JMP LSTIT,I & RETURN * PLIST NOP LDA PLIST SET UP RETURN STA LIST LDA LSTAD JSB INDCK ADA .2 STA PLIST LDA HILIM PASS LIMITS LDB LOLIM JMP PLIST,I GOTO LIST+2 * * SKP ***************************************************** * * CHAR WILL FETCH THE NEXT INPUT CHAR * CHARN WILL FETCH THE NEXT NON-BLANK CHAR * ***************************************************** * CHAR NOP LDA .10 SET UP FOR STA BLANK FIXED FORMAT SCAN JSB CHRIN GET INPUT JMP CHAR,I * CHARN NOP LDA .32 SET UP FOR STA BLANK FREE FORMAT SCAN JSB CHRIN GET INPUT JMP CHARN,I * CHRIN NOP CHRN1 JSB GTCHR FETCH NEXT CHAR STA ATEMP CPA .10 EOF? JMP CHRN2 JSB DELM NO, DELIMITER? JMP CHRIN,I YES, IGNORE CLB NO, CLEAR STB CONT. CONT. FLAG JMP CHRIN,I & RETURN CHRN2 LDB CONT. YES, IS CONT. SZB,RSS ENABLED ?? JMP CHRIN,I NO, RETURN LDA M2 YES, GIVE 2 LDB BLNKA BLANKS JSB DSPLY & #: JSB DRQST GET MORE INPUT JMP CHRN1 * SKP * **************************************************** * * DELM WILL TEST FOR A DELIMITER * **************************************************** * DELM NOP CPA .32 BLANK ? JMP DELM,I YES, P+1 RETURN CPA O54 COMMA ? JMP DELM1 YES ISZ DELM NEITHER, TAKE JMP DELM,I P+2 RETURN DELM1 ISZ CONT. INSURE CONT. FLAG IS ON JMP DELM,I (FOR INPUT OUTSIDE OF CHRIN) * ************************************************ * * DO CARRIAGE RETURN, LINE FEED OUTPUT * ************************************************ * CRLF NOP USED AS FLAG BY "LIST" IN BASIC LDA M2 LDB RDYA CPA CRLF1 KLUDGE TO ALLOW BLOCKING UP JMP LYNC1,I OUTPUT, THIS DOES FLUSH JSB DOIO DO CARRIAGE RETURN, LINE FEED CRLF1 BSS 1 SET UP BY SWLST CLA STA TYPE DENOTE NEW LINE JMP CRLF,I * SKP * ****************************************************** * * FIND REQUESTED PROGRAM CORE LIMITS * * CALL SEQ: (A)=NEXT CHAR * JSB PGOLM * RETURN: P+1: EOF DETECTED * P+2: MORE INPUT TO COME * (A)=NEXT CHAR * LOLIM=LOW CORE LIMIT * HILIM=HI CORE LIMIT * ***************************************************** * PGOLM NOP JSB LIMCK FETCH PROGRAM LIMITS STA ATEMP SAVE NEXT CHAR LDA LOLIM JSB FNDPS FIND POSITION NOP OF 1ST STATEMENT NOP STB LOLIM SAVE IT LDA HILIM INA JSB FNDPS FIND POSITION NOP OF LAST STATEMENT NOP STB HILIM SAVE IT LDA ATEMP RETRIEVE NEXT CHAR CPA .10 EOF ?? JMP PGOLM,I YES, TAKE P+1 RETURN ISZ PGOLM JMP PGOLM,I NO, TAK<E P+2 EXIT * * SKP * ******************************************************** * * FETCH PROGRAM LIMITS FROM INPUT BUFFER * ACCORDING TO THE FOLLOWING SYNTAX: * ...... * ...... * ...... * * CALL SEQ: (A)=NEXT CHAR * JSB LIMCK * RETURN: (A)=NEXT CHAR * LOLIM=LO LIMIT * HILIM=HI LIMIT * ******************************************************** * LIMCK NOP CLB,INB SET UP STB LOLIM DEFAULT LIMITS LDB .9999 1-9999 STB HILIM LDB M2 STB CNT1 LDB .10 SET UP FOR STB BLANK FIXED FORMAT SCAN RSS JSB CHAR FETCH NEXT CHAR LIM1 JSB DELM DELIMITER ? JMP *-2 YES, IGNORE JSB DIGCK DIGIT ? JMP LIMCK,I NO,EXIT ADA .48 YES, JSB INTIN FETCH # DEF MAXSN & STB HILIM SAVE IT ISZ CNT1 DONE ? RSS JMP LIM2 STB LOLIM NO, CONTINUE JMP LIM1 LIM2 INB INSURE CMB,INB LOLIM<=HILIM ADB LOLIM SSB,RSS JMP SYE25 IT'S NOT, ERROR LDB .32 OK, SET UP FOR STB BLANK FREE FORMAT INPUT RSS FETCH NEXT JSB CHARN NON-DELIMITER JSB DELM CHARACTER JMP *-2 (A)=NEXT CHAR JMP LIMCK,I & RETURN * SKP * **************************************************** * * CHECK LEGAL LINE # LIMITS OF INPUT * * CALL SEQ: (A)=CHAR COUNT * (B)=BUFFER ADDRESS * JSB CKLLN * RETURN: P+1: OUTSIDE OF LIMITS * P+2: WITHIN LIMITS * *************************************************** * CKLLN NOP CMA SET UP FOR STA INCNT GETCR RBL ROUTINE STB INBA+D LDB LOLIM INPUT LIMITS CPB .1 OTHER THAN RSS 1-9999 ??? JMP CKLL1 LDB HILIM CPB .9999 JMP CKLL2 NO, TAKE P+2 EXIT CKLL1 JSB GETCR YES, FETCH NEXT CHAR JMP CKLLN,I NULL RECORD, TAKE FAIL EXIT CPA .32 IGNORE PRECEEDING JMP CKLL1 BLANKS JSB INTIN GET CURRENT LINE # DEF MAXSN LDA LOLIM CMA,INA ADA 1 SSA #>=LOLIM ? JMP CKLLN,I NO, P+1 CMB,INB ADB HILIM SSB #<=HILIM ? JMP CKLLN,I NO, P+1 CKLL2 ISZ CKLLN JMP CKLLN,I YES, P+2 * * SKP * ***************************************************** * * INTIN WILL BUILD AN INTEGER FROM INPUT * * CALL SEQ: (A)=CURRENT CHAR * JSB INTIN * DEF (MAX #) * RETURN: (B)=INTEGER * ***************************************************** * INTIN NOP STA ATEMP SAVE CUR. CHAR. LDA INTIN,I FETCH JSB INDCK MAXIMUM STA INTI1 ALLOWABLE ISZ INTIN LIMIT LDA SBPTR SAVE STA TEMP1 SBPTR LDA TEMAD STATUS STA SBPTR LDA ATEMP RECOVER CUR.CHAR. JSB INTCK FETCH INTEGER INTI1 BSS 1 STA ATEMP LDA TEMP1 RESTORE STA SBPTR SBPTR STATUS LDA ATEMP JMP INTIN,I * SKP *************************************************** * * SEARCH COMMAND DEVICE TABLE FOR VALID SYNTAX * * CALL SEQ: (A)=CURRENT CHAR * (B)=-TAB LENGTH * JSB SWDEV * DEF (TABLE START ADDRESS) * RETURN: P+2: FAIL RETURN * (A)=CURRENT CHAR * P+3: SUCCES RETURN * (A)=CURRENT CHAR * (B)=TABLE POSITION * TBLPT=ENTRY ADDRESS * ****M********************************************** * SWDEV NOP STA ATEMP SAVE CURRENT CHAR LDA SWDEV,I FIND TABLE START JSB INDCK STA SWDV1 ISZ SWDEV SWDV0 LDA ATEMP RETRIEVE CURRENT CHAR SZB,RSS ANY ENTRIES ? JMP SWDEV,I NO, TAKE FAIL EXIT JSB TBSRH YES, SEARCH DEVICE SWDV1 NOP TABLE JMP SWDV3 NOT FOUND * JSB CHARN FOUND,FETCH NEXT CAHR JSB DELM IGNORE DELIMITERS JMP *-2 STA ATEMP SAVE A LDA COUNT FIND JSB INDCK CURRENT ADA M2 COUNT LDB 0,I SWDV2 CMB & ADB LNGTH COMPUTE CMB,INB TABLE POSITION LDA ATEMP ISZ SWDEV MOVE TO SUCCES RETURN JMP SWDEV,I & EXIT * SWDV3 LDB LNGTH SWDV4 LDA SWDV1,I ALLOW 0 LENGTH SYMBOL AND .7 AS VALID TABLE ENTRY SZA,RSS 0 LENGTH ? JMP SWDV5 ADA .3 NO, MOVE TO NEXT ENTRY ARS ADA SWDV1 STA SWDV1 INB,SZB END OF TABLE ? JMP SWDV4 NO, CONTINUE JMP SWDV0 YES, NO MATCH * SWDV5 LDA SWDV1 0 LNGTH SYMBOL FOUND STA TBLPT SAVE ENTRY ADDRESS JMP SWDV2 * SKP ******************************************************* * * EXECUTE SPECIFIED COMMAND * * CALL SEQ: (A)=NEXT CHARACTER * (B)=EXECUTION TABLE POSITION * JSB XQCMD * DEF (EXECUTION TABLE START) * NOP (USED FOR STORAGE BY XQCMD) * RETURN: P+3: COMPLETION RETURN * P+4: CONTINUATION RETURN (WHEN REQUIRED) * ********************************************************* * XQCMD NOP STA ATEMP SAVE CURRENT CHAR ADB M1 FIND EXECUTION RBL,SLB TABLE ADDRESS JSB CALER LDA XQCMD,I JSB INDCK ADB 0 (B)=EXECUTION TABLE ENTRY ISZ XQCMD STB XQCMD,I SAVE IT IN USER SUPPLIED STORAGE INB LDA 1,I GET ADDRESS OF I/O ROUTINE JSB INDCK FROM BRTBL ISZ XQCMD LDB XQCMD SAVE IT IN CALLER STB 0,I SUPPLIED STORAGE INA STA TEMPX LDB TBLPT GET ADDRESS OF MNEM ENTRY AND LDB 1,I EXTRACT THE LOGICAL UNIT NO. LSR 9 AND RIGHT JUSTIFY LDA ATEMP RECOVER CURRENT CHAR JMP TEMPX,I TRANSFER TO REQUESTED ROUTINE * SKP **************************************************** * * CHECK OCCURANCE OF "ON" OR "FROM" SYNTAX * IF XSYNF=1 ON/FROM/TO MUST OCCUR IN COMMAND SYNTAX * IF XSYNF=1 ON/FROM MUST OCCUR IN COMMAND SYNTAX * IF XSYNF=0 ON/FROM MAY BE OMITTED FROM COMMAND * * CALL SEQ: JSB ONS * RETURN: P+1: FOUND, (A)=NEXT CHAR * * CALL SEQ: JSB FROMS * RETURN: P+1: FOUND, (A)=NEXT CHAR * * ***************************************************** * ONS NOP CHECK "ON" SYNTAX LDB ONA JSB SYNCH CLB SET ON/FROM FLAG TO ZERO STB FRMTO FRMTO FLAG=0 FOR "ON" LDB DEVCT GET -# OF DEVICE MNEM. JMP ONS,I OK, RETURN * FROMS NOP CHECK "FROM" SYNTAX LDB FROMA JSB SYNCH CLB,INB FRMTO FLAG=1 FOR "FROM" STB FRMTO LDB DEVCT GET -# OF DEVICE MNEM. JMP FROMS,I OK, RETURN * SYNCH NOP STB SYNC1 CCB JSB TBSRH SEARCH INPUT BUFFER SYNC1 NOP JMP SYNC2 NOT FOUND JSB CHARN FETCH NEXT NON-BLANK CHAR JSB DELM DELIMITER ? JMP *-2 YES, IGNORE CPA .10 EOF ?? JMP INVSC YES, INPUT ERROR JMP SYNCH,I NO, OK EXIT SYNC2 LDB XSYNF IS SYNTAX REQUIRED SZB ??? JMP INVSC YES, ERROR JMP SYNCH,I g NO, OK EXIT SKP * *************************************************** * * ALLOW SYNTAX ABREVIATION * * CALL SEQ: JSB ABREV * DEF (ABREVIATED SYNTAX) * RETURN: P+1: FOUND * P+2: NOT FOUND, (A)= NEXT CHAR * ************************************************** * ABREV NOP LDA ABREV,I STA ABRE1 ISZ ABREV JSB CHARN CCB JSB TBSRH ABRE1 BSS 1 ISZ ABREV JMP ABREV,I * SKP **************************************************** * * SCRATCH SUBROUTINE * * CALL SEQ: JSB SCR * RETURN: P+1: NORMAL * *************************************************** * SCR NOP LDA FWAM STA PROGF STA PROGL JMP SCR,I * SKP * * STORAGE & CONSTANTS & OTHER THINGS OF INTEREST * SUP BUFA DEF SETUP I/O BUFFER ADDRESS LSTAD DEF LIST INDEX TO LIST ROUTINE IN BASIC COUNT DEF LNGTH INDEX TO TABLE POSITION IN TBSRH LSTR DEF PLIST INIT TO PLIST PLSTA DEF PLIST ADDRESS OF PLIST ROUTINE * CONT. NOP KBD INPUT CONTINUATION FLAG ATEMP NOP CURRENT CHARACTER XSYNF OCT 1 ON.FROM SYNTAX SWITCH, INIT. TO YES LOLIM NOP LOW LIMIT HILIM NOP HIGH LIMIT * O54 OCT 54 .9999 DEC 9999 M110 DEC -110 * RDYA DEF *+1 BASIC'S "READY" MESSAGE OCT 6412 ASC 3,READY * BLNKA DEF *+1 INPUT CONTINUATION PROMPT ASC 1, * ONA DEF *+1 "ON" SYNTAX OCT 2 ASC 1,ON * FROMA DEF *+1 "FROM" SYNTAX OCT 4 ASC 2,FROM * * TEMAD DEF TMP TMP BSS 1 TEMP1 BSS 1 TEMPA BSS 1 TEMPB BSS 1 TEMPX BSS 1 CNT1 BSS 1 SPTR BSS 1 DPTR BSS 1 FRMTO BSS 1 HED ****** DOIO ****** (C) HEWLETT-PACKARD CO. 1976 * ********************************************* * DOIO * * ******************************************** * * T ENT DOIO * EXT EXEC EXT B2000,B777,.63,M1,.1,.2 * DOIO NOP STA LENTH STB BUFAD STORE ADDRESS OF BUFFER LDB DOIO,I GET CONTROL WORD ISZ DOIO LDA 1 AND FMASK EXTRACT FUNCTION CODE ALF STA ICODE AND STORE IT AWAY LDA 1 AND CMASK EXTRACT CONTROL INFO STA ICNWD AND STORE IT AWAY AND DMASK EXTRACT LOGICAL UNIT NBR CPA .2 RSS JMP SETX LDA M1 ADA ICNWD STA ICNWD LU 2 CHANGE TO LU 1 SETX LDA ICODE SET X BIT FOR HONESTY MODE ON CPA .1 INPUT JMP DOIT LDA ICNWD IOR BIT10 STA ICNWD DOIT JSB EXEC MAKE EXEC CALL DEF *+5 DEF ICODE DEF ICNWD BUFAD DEF BUFAD DEF LENTH AND .32 BIT 5 SET MEANS EOF SZA MAKE SURE EOF SHOWS CLB ZERO LENGTH RECORD STB 0 SET CHAR COUNT IN AREG JMP DOIO,I LENTH NOP ICODE NOP ICNWD NOP BIT10 EQU B2000 FMASK OCT 170000 CMASK EQU B777 DMASK EQU .63 HED * BASIC I-O ROUTINES FOR RTE-B * (C) HEWLETT-PACKARD CO. 1976 * ************************************************ * * READR * * ************************************************ * * FCINP EQU 10400B FUNCTION CODE FOR INPUT FCOUT EQU 24000B FUNCTION CODE FOR OUTPUT * **************************************************** * * ENTRY POINTS: * * ENT LOAD,LOADA,L.RDR ENT EREED,RDNBR,REDNO ENT L.PUN,LEADR,ERCRD,RCRD ENT LIST.,L.LST,ELIST ENT DSPLY,DSPLA,EDSPL ENT KEYIA,KEYIN,EINP,ETTYS ENT LPPOS * * * EXTERNAL REFERENCES: * EXT .10,INVSC,MO100,READR EXT EINPT EXT TFLAG,ZERO,EFASE,EFIO,READS EXT EREAD EXT GETCR,BCKSP,SBPTR,M1 EXT FSC,M2,SYMCK,COMM1,ERROR,.STOP EXT TEMPS EXT MO133 J EXT PRINS,EPRIN EXT .1 EXT SEQNO EXT M6,.7,.23 * * ******************************************************* * SKP SKP ***** * GET INPUT PROGRAM (FROM COMMAND) ***** L.RDR NOP CPA .10 EOF ? RSS JMP INVSC NO, ERROR LDA FRMTO SZA,RSS L.RDR AND "ON" INCOMPATIBLE JMP INVSC LDA STFCI SET UP I/O IOR 1 CODE STA FNCTW LDA PLODA SWITCH BASIC TO GET STA READR NEXT RECORD FROM PLOAD ROUTINE LDA L.RDR INA SET RETURN FOR CONTINUATION JMP 0,I LET BASIC PROCESS INPUT * PLOAD NOP JSB LOAD GET A RECORD LDB TMPB2 FETCH BUF ADDR JSB CKLLN LINE LIMITS SATISFIED ? JMP LOAD1 NO, IGNORE IT LDA TFLAG YES,GIVE IT TO BASIC JMP PLOAD,I FOR PROCESSING * * OTHER NAMES FOR L.RDR * PHOT1 EQU L.RDR PHOT2 EQU L.RDR * CARD1 EQU L.RDR CARD2 EQU L.RDR * ** MAKE THEM ENTRY POINTS ALSO * ENT PHOT1,PHOT2,CARD1,CARD2 * SKP ***** * PROVIDE PUNCHED PROGRAM OUTPUT ***** L.PUN NOP JSB SETOT SET UP FOR OUTPUT DEVICE LDA MO133 GIVE LEADER JSB LEADR JSB LSTIT GIVE PROGRAM LDA MO133 JSB LEADR GIVE TRAILER JMP L.PUN,I RETURN ***** * PROVIDE PROGRAM LISTING ***** L.LST NOP JSB SETOT SET UP FOR OUTPUT DEVICE JSB LSTIT LIST PROGRAM JSB LSKIP GIVE FORM FEED JMP L.LST,I & RETURN ***** * SET UP FOR OUTPUT DEVICE ***** * SETOT NOP CPA .10 EOF? RSS JMP INVSC NO,ERROR LDA FRMTO SZA OUTPUT AND "FROM" ARE INCOMPATIBLE JMP INVSC LDA STFCO IOR 1 STA WORD JSB SWLST DEF CTTYS JMP SETOT,I * ** OTHER NAMES FOR OUTPUT * PNCH1 EQU L.PUN PNCH2 EQU L.,bNLHPUN * LP1 EQU L.LST LP2 EQU L.LST * CRT1 EQU L.LST CRT2 EQU L.LST CRT3 EQU L.LST CRT4 EQU L.LST * TTY1 EQU L.LST TTY2 EQU L.LST TTY3 EQU L.LST TTY4 EQU L.LST * ** MAKE THEM ENTRIES TOO * ENT PNCH1,PNCH2,LP1,LP2 ENT CRT1,CRT2,CRT3,CRT4 ENT TTY1,TTY2,TTY3,TTY4 N SKP ***** * ** COME HERE UPON RECOGNIZING THE STRING "READ" AT * SYNTAX TIME, OR WHEN EXECUTING A READ STATEMENT * ***** EREED NOP JSB EFIO EXECUTION PHASE? JMP CKRED NO, GO CHECK SYNTAX JMP EREAD YES, CODE IS IN BASIC INTERPRETER ***** ** HERE AT SYNTAX TIME ***** CKRED JSB GETCR GET NEXT CHAR JMP CKTT1 (END OF INPUT LINE) CPA NUMSN IS THAT CHAR A "#"? JMP CKTT2 YES, SET UP FOR READ# CKTT1 JSB BCKSP NO, BACKUP OVER THAT CHAR JMP READS AND PROCESS NORMAL READ STATEMENT CKTT2 LDB SBPTR GET ADDRESS OF CALL ADB M1 IN SYNTAX BUFFER LDA 1,I AND INCREMENT BRANCH TABLE INA OFFSET BY ONE STA 1,I THEN PUT IT BACK JSB FSC GET FORMULA FOR LU# CPA .10 END OF STATEMENT? JMP READS YES, PROCESS NORMALLY FROM HERE LDB M2 NO, IS THE DELIMITER JSB SYMCK A COMMA DEF COMM1 OR SEMICOLON? RSS JMP READS YES, PROCESS NORMALLY FROM HERE JSB ERROR NO, ERROR 21 DEF *+3 DEF .21 DEF ZERO JSB .STOP ***** * ** HERE TO EXECUTE READ# STATEMENT * ***** RDNBR NOP JSB SEQNO GET NEW LU NUMBER STA TMPA2 SAVE LU NUMBER ISZ TEMPS MOVE INTERP CODE PTR BY END FORMULA JSB FLRCK CHECK IF LU IS "ASSIGNED" ADA STFCI MAKE NEW FUNCT CONTROL WORD STA FNCTW AND PUT IT IN THE CALL TO DOIO LDA TMPA2 RECALL LU NUMBER JSB GETOF GET TABLE OFFSET FOR DEVICE ADA INTBL ADD TABLE ADDRESS LDA 0,I THEN GET ADDRESS OF ROUTINE STA READR AND SET UP FOR INPUT JMP EINPT FROM HERE TREAT AS INPUT STMT ***** * HERE FOR PRINT STATEMENT ***** ELIST NOP JSB EFIO EXECUTION PHASE ? JMP CKTTY SYNTX PHASE CK FOR PRINT# JSB SWLST YES, SWITCH TO LST DEVICE DSPLA DEF DSPLY JMP ~+EPRIN GO EXECUTE STATEMENT * CKTTY JSB GETCR GET NEXT CHAR JMP NOLUK (END OF INPUT LINE) CPA NUMSN IS THAT CHAR "#" JMP UBET YES, SETUP FOR PRINT# NOLUK JSB BCKSP NO,BACKUP OVER THAT CHAR JMP PRINS AND PROCESS NORMALLY UBET LDA SBPTR GET ADDRESS OF ADA M1 CALL IN SYNTX BUFFER LDB 0,I AND INCREMENT BRANCH TBL ADB .1 OFFSET BY ONE STB 0,I THEN PUT IT BACK JMP PRINS FROM THERE PROCESS NORMALLY ***** * HERE FOR INPUT STATEMENT ***** EINP NOP JSB EFIO EXECUTION PHASE ? JMP READS NO, GO CHECK SYNTAX LDA KEYIA YES, SET UP FOR STA READR KBD INPUT JMP EINPT GO EXECUTE INPUT STATEMENT ***** * HERE TO EXECUTE PRINT# ***** ETTYS NOP JSB SEQNO GET NEW LU # JSB FLPCK CHECK IF LU IS AN "ASSIGNED" FILE STA TMPA2 ADA STFCO MAKE NEW FUNCT CONTROL WORD STA WORD AND STORE IT AWAY LDA TMPA2 GET LU NUMBER JSB GETOF ADA OUTBL GET ADDRESS OF TABLE ENTRY LDA 0,I THEN GET ADDRESS OF OUTPUT RTN STA ETT1 AND SET UP OUTPUT JSB SWLST SET UP FOR APPROPIATE DEVICE ETT1 DEF CTTYS JMP EPRIN THEN PROCESS NORMALLY HED ****** INPUT ROUTINES ****** (C) HEWLETT-PACKARD CO. 1976 ***** * READ A RECORD FROM READR ***** LOAD NOP STA TMPA2 SAVE MAX COUNT (-CHARS, BCS CONV.) STB TMPB2 SAVE BUFFER ADDRESS LOAD1 LDA TMPA2 LDB TMPB2 JSB REDNO GET A RECORD CPA ZERO ANY DATA ? JMP EOT NO, JUST LEADER/TRAILER STA TFLAG YES, NEXT TIME WILL BE TRAILER JMP LOAD,I * EOT LDB TFLAG SSB JMP LOAD1 LEADER; GO READ MORE STA TFLAG ASSUME LEADER FOR NEW TAPE NEXT JMP L.RDR,I EXIT TO COMPLETION RETURN ***** ** HERE TO GET INPUTQ LINE ***** REDNO NOP CMA,INA MAKE CHAR COUNT NEGATIVE JSB DOIO DO THE INPUT FNCTW NOP THIS WORD SET UP BY RDNBR JMP REDNO,I ***** * HERE FOR INPUT FROM LU# 1 ***** KEYIN NOP CMA,INA SET CHAR COUNT NEG. STA TMPA2 SAVE A STB TMPB2 SAVE B JSB EFASE EXECUTION PHASE ?? JMP SKPIT NO CCA LDB QMRKA OUTPUT QUESTION MARK JSB DSPLY SKPIT LDA TMPA2 RECOVER CHAR COUNT LDB TMPB2 JSB DOIO GET INPUT ABS FCINP+1 INPUT WITH ECHO FROM LU# 1 JMP KEYIN,I * HED * SMALL ROUTINES FOR EACH OUTPUT * (C) HEWLETT-PACKARD CO. 1976 * ***** * FOR LU# 4 ***** NOP STORAGE FOR CARRIAGE POSITION DEC -73 72 CHARS/LINE ABS FCOUT+4 RCRD NOP JSB LYNCK DO ASCII OUTPUT JMP RCRD,I ***** * FOR LU# 6 ***** LPPOS NOP STORAGE FOR CARRIAGE POSITION LPCNT DEC -81 ABS FCOUT+6 LIST. NOP JSB LYNCK ASCII OUTPUT JMP LIST.,I ***** * FOR LU# 1 * NOP DEC -73 ABS FCOUT+1 DSPLY NOP JSB LYNCK JMP DSPLY,I ***** * FOR MULTI-DEVICE OUTPUT * ***** NOP DEC -73 THIS CODE WORD NOP SETS UP CTTYS NOP A NEW JSB LYNCK "DEVICE" JMP CTTYS,I FOR OUTPUT HED ****** UTILITY ROUTINES ****** (C) HEWLETT-PACKARD CO. 1976 * ***** * OUTPUT LEADER/TRAILER ***** LEADR NOP STA ERCRD SAVE COUNT LDA LYNC1 GET OUTPUT FUNCTION CODE STA LEAD1 LEAD CCA ONE FRAME LDB ZEROA JSB DOIO ASSUME DEVICE ALREADY SWITCHED LEAD1 BSS 1 ISZ ERCRD DONE?? JMP LEAD NO JMP LEADR,I ***** * DO A PAGE EJECT ***** LSKIP NOP CCA 1 CHAR LDB SKPCD JSB CTTYS OUTPUT SKIP CODE JSB CRLF KEEP IN SYNC WITH LP JMP LSKIP,I ***** * ** GETOF ** CONVERT LU # TO OFFSET IN TABLE * * LDA LOGICAL UNIT NUMBER * JSB GETOF * RETURN .A.=OFFSET * * NOTE: AN ERROR RESULTS IF LU IS 0 OR NEGATIVE * ANY LU > 6 RETURNS AN OFFSET OF 7 * ***** * GETOF NOP ADA M1 IF LU IS SSA 0 OR NEGATIVE, JMP LUERR ISSUE ERROR ADA M6 IF LU IS SSA,RSS 7 OF GREATER JMP USE7 THEN RETURN OFFSET OF 7 ADA .7 RSS USE7 LDA .7 JMP GETOF,I * LUERR JSB ERROR DEF *+3 DEF .23 DEF ZERO JSB .STOP HED **** CONSTANTS AND STORAGE **** (C) HEWLETT-PACKARD CO. 1976 ********************************************************* * ** CONSTANTS AND STORAGE * *************************************************** * .21 DEC 21 NUMSN OCT 43 ERCRD NOP ZEROA DEF ZERO EDSPL EQU ELIST SKPCD DEF *+1 OCT 6000 FORM FEED KEYIA DEF KEYIN QMRKA DEF *+1 ASC 1,? TMPA2 BSS 1 TMPB2 BSS 1 LOADA DEF LOAD PLODA DEF PLOAD STFCI ABS FCINP STFCO ABS FCOUT ************************************************* * * TABLES TO SET UP PRINT# AND READ# LU'S * ********************************************************** OUTBL DEF * DEF DSPLY DEF CTTYS DEF CTTYS DEF RCRD DEF CTTYS DEF LIST. DEF CTTYS * INTBL DEF * DEF KEYIN DEF REDNO DEF REDNO DEF REDNO DEF REDNO DEF REDNO DEF REDNO * *********************************************************** HED RTE-B BASIC CONTROL * (C) HEWLETT-PACKARD CO. 1976 **************************************** * RTE-B BASIC CONTROL **************************************** * SPC 5 ENT START * EXT .STOP * START JMP INIT JSB .STOP SPC 5 * ENT RUNIT,.RUN * EXT XH,XL,EENDA,PEXMA * RUNIT NOP RUN THE PROGRAM .RUN CLA STA XH INA STA XL LDA EENDA STA PEXMA JMP INIT SKP ENT ELINK * EXT PXMKA,PEXMA * ELINK LDB PXMKA STB PEXMA JMP INIT SPC 5 ENT EPAUS * EXT M10 * FCNRD EQU 10401B READ CONTROL WORD * EPAUS NOP EXECUTE "PAUSE" LDA M10 LOAD -# OF CHARACTERS LDB PAZA JSB DSPLY OUTPUT "PAUSE" EP1 CLA,INA READ ONE WORD LDB CTRLA JSB DOIO READ ABS FCNRD LDB CTRL GET OPERATOR MESSAGE CPB GO IS IT CONTINUE JMP EPAUS,I YES! CPB AB IS IT ABORT? JSB .STOP YES JMP EP1 * PAZA DEF PAZ PAZ OCT 6412 ASC 3,PAUSE OCT 6412 CRLF * CTRLA DEF *+1 CTRL BSS 1 GO ASC 1,GO AB ASC 1,AB * ENT TRACE * EXT TRAP * TRACE NOP JSB TRAP JMP TRACE,I SKP * * BRANCH AND MNEMONIC TABLE ADDRESS POINTERS * * ENT SRULA,ADRED,CMDAD,ASBTB,SBTBE,FCNTB,XNFOA,STDCA ENT FWAM,LWAM * EXT SRULE,MNEM,CMDS,SBTBL,LSBTB,FCNEX,XNFO,STDCL * SRULA DEF SRULE START OF SPECIAL CALL MNEMONICS ADRED DEF MNEM START OF CALL MNEMONICS CMDAD DEF CMDS START OF COMMAND MNEMONICS SBTBE DEF LSBTB END OF FUNCTION TABLE ASBTB DEF SBTBL START OF BRANCH TABLE FCNTB DEF FCNEX START OF FUNCTION TABLE XNFOA DEF XNFO START OF PARAMETER TYPE TABLE STDCA DEF STDCL END OF SUBROUTINE CALL FWAM NOP FIRST WORD AVAILABLE MEMORY LWAM NOP LAST WORD AVAILABLE MEMEORY HED RTE-B CATCH-ALL MODULE * (C) HEWLETT-PACKARD CO. 1976 SUP PRESS ASCII LISTING **************************************** * RTE-B CATCH-ALL MODULE **************************************** * * ENT RTINT,NORML,OVDVR,.IENT ENT EINT,.FLUN * EXT ERROR,.STOP EXT B377,M8,M1'6,.PACK EXT .15,.23,M1 EXT INDCK,.PEXP,MANT1,MANT2 EXT STRT5,PROGF,PROGL,FCORE,SYMTF,SYMTA EXT M4,ERROR,INDCK,ZERO EXT .1,.2,.4 ** AVMEM EQU 1751B FWA SYSTEM BUFFER BKGRG EQU 1752B FWA BACKGROUND BKLWA EQU 1777B LWA BACKGROUND XEQT EQU 1717B ADDRESS OF BASICS ID SEGMENT ** ** INITIALIZE FWAM,LWAM FOR RTE TYPE SYSTEMS ** * RTINT NOP CLA STA START SETUP SO RE-ENTRY POINT IS BSTOP LDA XEQT GET THE ADDRESS OF BASICS ID SEG ADA .23 GET ADDRESS OF MEMORY BOUNDS LDA 0,I GET LAST WORD OF BASIC INA STA FWAM LDA BKLWA CHECK FOR AVAILABLE BACKGROUND CMA,INA IF NONE THERE THEN ADA BKGRG ASSUME RTE-C OR RTE-B AND SZA THEN RUN IN FOREGROUND JMP RT1 THERE IS BACKGROUND! LDA AVMEM THERE ISNT! ADA M1 RT2 STA LWAM SET UP LWAM FOR BASIC USER AREA JMP RTINT,I RETURN * RT1 LDA BKLWA JMP RT2 * * SKP * * * RTE-B DUMMY OVERLAY DRIVER * * * OVDVR NOP *** ENTER *** STA TMPA3 SAVE AREG STB TMPB3 SAVE BREG LDA OVDVR,I GET CALL TABLE ENTRY ADDRESS JSB INDCK MAKE INTO DIRECT ADDRESS LDB 0,I GET FUNC. CTRL. WRD. INA POINT AT ENTRY POINT OF DRIVER LDA 0,I GET ENTRY ADDRESS JSB INDCK MAKE INTO DIRECT ADDRESS STA TEMP ISZ OVDVR SSB HAS FUNC. GOT JSB ERR0 ON IT JMP OV1 YES! LDA OVDVR STA TEMP,I FAKE JSB TO ENTRY FROM POSITION ISZ TEMP OF DEF FOLLOWING "JSB OVDVR" LDA TMPA3 RESTORE AREG LDB TMPB3 JMP TEMP,I CALL THE DRIVER * OV1 LDA TMPA3 RESTORE REGS LDB TMPB3 JSB TEMP,I EXECUTE FUNCTION RSS IS THERE AN ERROR RETURN JMP OVDVR,I NO! AND .15 MAKE INTO DECIMAL ADA .60 AND ADSxD IN ERROR # OFFSET STA TT2 SAVE FUNCTION NUMBER JSB ERROR PRINT ERROR MESSAGE DEF *+3 DEF TT2 OF THE FORM DEF ZERO "ERROR NN IN LINE XX" JSB .STOP RETURN TO READY IN BASIC * * * * * NORMALIZE (A), (B), AND EXPONENT * * * * NORML NOP SET STA TT2 LEFT SHIFT-COUNTER CLA TO ZERO STA TT1 LDA TT2 SZA,RSS ON SZB ZERO JMP NORM3 CLEAR STA .PEXP EVERYTHING STA MANT1 STORE NORM1 STB MANT2 MANTISSA JMP NORML,I AND RETURN * NORM2 ISZ TT1 COUNT LEFT SHIFTS NORM3 CLE,ELB ROTATE (A) AND ELA (B) LETF INTO (E) SEZ,SSA,RSS TWO HIGHEST BITS 0? JMP NORM2 YES, + UNNORMALIZED SEZ,SSA NO, TWO HIGHEST BITS 1? JMP NORM2 ERA SHIFT TO ERB,CLE NORMALIZED MANTISSA STA MANT1 NO, LDA TT1 COMPUTE CMA,INA CORRECTED ADA .PEXP EXPONENT STA .PEXP VALU LDA MANT1 JMP NORM1 * * THE FOLLOWING THREE ITEMS MUST REMAIN IN THE EXACT ORDER .60 DEC 60 TT1 BSS 1 TT2 BSS 1 TMPA3 EQU TT1 TMPB3 EQU TT2 TEMP BSS 1 * * * * SKP *** UNPACK LOW WORD OF NUMBER ** * .FLUN NOP LDA 1 (A) = (B) AND B377 GET EXPONENT CMB SUBTRACT OFF ADB 0 EXPONENT FROM CMB MANTISSA IN (B) SLA,RAR NEGATIVE EXPONENT? IOR MSK4 (77600) YES, PROPAGATE SIGN JMP .FLUN,I EXIT * *** INTEGERIZE FLOATING POINT NUMBER ** * IFIX NOP STF 1 SET OVERFLOW FLAG STA NORML SAVE (A) JSB .FLUN SSA EXPONENT NON-NEGATIVE? JMP IFIX3 NO. RETURN 0 OR -1. ADA M16 SSA EXPONENT LESS THAN 16? CLF 1 YES. CLEAR OVERFLOW. ADA M8 SSA,RSS EXPONENT LESS THAN 24? JMP IFIX,I NO. ERROR EXIT, NO FRACTION. ADA M8 BINARY POINT TO RT END OF B STA .FLUN SAVE SHIFT COUNT LDA NORML RETRIEVE HIGH MANTISSA JMP IFIX2 * IFIX1 CLE,SLA,ARS LONG RIGHT SHIFT CME SLB,ERB STF 1 SET OVERFLOW IF 1 LOST IFIX2 ISZ .FLUN DONE? JMP IFIX1 NO, SHIFT MORE ISZ IFIX DONE, SKIP RETURN JMP IFIX,I * IFIX3 LDA NORML NEGATIVE EXPONENT; RETRIEVE (A) CLE,SSA CCA,RSS TRUNCATE TO -1 OR 0 CLA,RSS CCB,RSS CLB JMP IFIX2+2 SKIP RETURN * SKP * * SUBROUTINE TO COMPUTE THE ENTIER OF A * NUMBER WHOSE EXPONENT IS LESS THAN 15 * THIS ROUTINE HAS SPECIAL PROPERTIES FOR BASIC: * OVERFLOW IS SET (ON NORMAL RETURN) IF ANY BIT LOST * E IS SET IF HIGH FRACTION BIT LOST * .IENT NOP JSB IFIX JMP .IENT,I OVERFLOW XOR 1 (A) SHOULD BE FULL OF SIGN BITS SSA (B) SHOULD HAVE A SIGN TOO JMP .IENT,I IT DOESN'T, ERROR EXIT. CPA 1 IF (A) WAS ZERO, JMP *+3 ALL WAS OK. CMA IF (A) WAS -1, CPA 1 ISZ .IENT ALSO OK; SKIP RETURN. JMP .IENT,I LEAVE WITH RESULT IN A, B. * SKP * EINT NOP STB TEMP SAVE (B) JSB IFIX JMP EINT1 NOT FIXABLE JSB .PACK BUILD FLTG RESULT DEC 31 JMP EINT,I * EINT1 LDB TEMP RETURN ORIGINAL NUMBER LDA NORML JMP EINT,I * SKP ******************************************************** * * BASIC DOUBLE STORE AND TEST ROUTINE * ******************************************************* * ENT .DST * * .DST NOP STA XTEMP  SAVE INFO STB XTMP1 TO BE STORED LDA TBLAD POINT AT STA PTR RESTRICTED AREA TABLE LDA M4 4 RESTRICTED AREAS STA CTR LDA .DST,I JSB INDCK REMOVE INDIRECT CHAIN STA ADR PROPOSED STORE ADDRESS ISZ .DST SET UP FOR EXIT JSB CHECK CHECK FOR ADR IN RESTRICTED AREA ISZ CTR MORE AREAS? JMP *-2 YES CHKOK LDA XTEMP ALL CLEAR, DO THE STORE STA ADR,I ISZ ADR LDB XTMP1 STB ADR,I JMP .DST,I * CHECK NOP LDA PTR,I GET LOWER LIMIT ISZ PTR LDB PTR,I GET UPPER LIMIT ISZ PTR SET UP FOR NEXT TIME CMA,INA ADA ADR INA SSA (ADR)+1 < LOWER LIMIT? JMP CHKXT YES, OUTSIDE LIMITS THEN CMB,INB ADB ADR SSB,RSS (ADR) >= UPPER LIMIT? CHKXT JMP CHECK,I YES, OUTSIDE LIMITS ISZ CTR INSIDE LIMITS, SIMPLE VARIABLE? JMP ERR NO, ERROR LDB SYMTF START AT BEGINNING OF SYMBOL TABLE NEXT CPB SYMTA ANY MORE ENTRIES? JMP ERR NO, ADR DIDN'T MATCH ANY SMPLE VAR LDA 1,I FETCH VARIABLE NAME AND .15 ISOLATE TYPE FIELD CPA .15 FUNCTION? JMP FN YES, TWO WORD ENTRY CPA .1 1 DIMENSIONAL ARRAY? JMP ARAY YES, SKIP THE ENTRY CPA .2 2 DIMENSIONAL ARRAY? JMP ARAY YES, SKIP THE ENTRY INB POINT AT SIMPLE VAR ADDRESS CPB ADR DO WE WANT TO STORE HERE? JMP CHKOK YES, THEN ALL IS WELL FN ADB .2 SMPL VARS HAVE 3 WORDS PER ENTRY JMP NEXT CHECK NEXT ENTRY * ARAY ADB .4 ARRAYS HAVE 4 WORDS PER ENTRY JMP NEXT CHECK NEXT ENTRY * ERR JSB ERROR DEF *+3 DEF .1 DEF DST JSB .STOP DOOM. * TBLAD DEF TABLE,I * TABLE DEF ZERO BASIC INTERPRETER DEF STR5PA * DEF PROGF INTERP. CODE DEF PROGL * DEF FCORE STACK AREA DEF SYMTF * DEF SYMTF SIMPLE VARIABLE AREA DEF SYMTA * STR5A DEF STRT5 DST DEC 3 ASC 2,DST XTEMP EQU TT1 XTMP1 EQU TT2 PTR BSS 1 CTR BSS 1 ADR BSS 1 MSK4 OCT 77600 * HED RTE-B CALL STATEMENT EXECUTION * (C) HEWLETT-PACKARD CO. 1976 **************************************** * RTE-B BASIC CALL STATEMENT EXECUTION * **************************************** * ENT ECALL,CLXIT ENT XITPT,PTBLA,DSTA,FLOTA,CLXTA * EXT TEMPS,B777,HSTPT,SETSX,PRADD EXT OPMSK,B4000,FORMX,FNDSB,FCORE,TSTPT EXT ERRCD,XEC4,FLOAT,FRTFX,FRTF2 EXT B1000,BHSTP,B177,SCALL EXT .STOP SUP * *** *** ** EXECUTE CALL ** *** *** * ECALL CLA CLEAR PARAMETER AREA STA PTBL STA PTBL+1 STA PTBL+2 STA PTBL+3 STA PTBL+4 STA PTBL+5 STA PTBL+6 STA ARGCT STA ERRCD LDA TEMPS LDA 0,I AND B777 ISOLATE INTERNAL CALL NUMBER STA SCALL SAVE TEMPORARILY LDA HSTPT SAVE HIGH CORE STA MWDNO STACK POINTER LDA PTBLA STA EFMT INITIALIZE PARAMETER POINTER ECAL1 ISZ TEMPS LDA TEMPS LDA 0,I AND OPMSK ISOLATE OPERATOR CPA B4000 RT PAREN (END OF PARAMS)? JMP ECAL2 YES. LDB TEMPS INB LDA 1,I AND OPMSK CPA B1000 QUOTE STRING BEING PASSED? JMP ECAL6 YES JSB FORMX EVALUATE PARAMETER. ECAL3 LDA HSTPT LDA 0,I STA EFMT,I SET UP DEF TABLE FOR .ENTR STA RTRN SAVE ADDRESS OF LAST PARAM ISZ ARGCT ISZ EFMT JMP ECAL1 * ECAL2 LDB ARGPA ADB ARGCT INITIALIZE DEF *+N STB ARGP LDB CLXTA STB XITPT LDB SCALL GET CALL TBL ENTRY NUMBER JSB FNDSB FIND STB ARGCT SAVE B IN ARGCT TEMPORARILY INB LDB 1,I GET CALL TABLE POINTER STB TMPX2 SAVE CALL TBL ENTRY ADDRESS LDB ARGCT RESTORE B FROM ARGCT CMB ADB STDCA LDA SCALL SSB,RSS STANDARD CALL? JSB FRTFX NO, GO DO FORTRAN FIX CCA LOAD ADDRESS OF ADA MWDNO PARAMETER ADDRESSES JSB TMPX2,I CALL EXTERNAL SUBROUTINE OR FUNCTION ARGP DEF *+0 PTBL OCT 0,0,0,0,0,0,0 JMP *+1,I XITPT DEF CLXIT FRTFX MAY CHANGE THIS FLTIT JSB FLOAT FOR FORT. FCNS. RETURNING INTEGER DSTL JSB .DST FOR FORTRAN FUNCTIONS, RETURN RESULT RTRN BSS 1 ADDRESS OF LAST PARAM CLXIT LDA FCORE STA TSTPT RESTORE LDA MWDNO STA HSTPT POINTERS LDB ARGCT CMB ADB STDCA SSB,RSS STANDARD CALL? JSB FRTF2 NO, FIX RETURNED PARAMS LDB ERRCD SZB,RSS ANY ERROR? JMP XEC4 NO. EXECUTE NEXT STATEMENT. ISZ TEMPS LDB PRADD CPB TEMPS ANY FAIL STATEMENT? JSB .STOP NO. ABORT EXECUTION. ISZ TEMPS JMP SETSX GO PROCESS STATEMENT * ECAL6 LDA 1 SAVE POINTER JSB BHSTP ALLOCATE PLACE FOR POINTER STA 1,I PUT " STRING POINTER ON STACK LDA 0,I AND B177 ISOLATE STRING CHARACTER COUNT INA ARS ADA 1,I COMPUTE ADDRESS OF END OF STRING STA TEMPS TO FIND NEXT CALL PARAMETER JMP ECAL3 * * PTBLA DEF PTBL DSTA DEF DSTL FLOTA DEF FLTIT CLXTA DEF CLXIT ARGPA DEF ARGP+1 ADDRESS OF LAST ARG +1 ARGCT BSS 1 NUMBER OF PARAMETERS MWDNO BSS 1 TMPX2 BSS 1 CONTAINS THE ADDRESS OF EXTERNAL SUBROUTINE * EFMT EQU TMPX2 * END START HFBBH 6 91704-18105 1613 S 0222 DS1/B SCE/4 MODULE: %OPMD              H0102 [ASMB,R,L,C HED DREAD 91700-16119 REV A 751222 * (C) HEWLETT PACKARD CO. 1976 NAM DREAD,7 91700-16119 REV A 751222 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DREAD EXT READF EXT .ENTR SPC 5 * * DREAD * SOURCE:91700-18119 * BINARY:91700-16119 * SHANE DICKEY * JULY 31,1974 * PRAMS REP 6 NOP DREAD NOP JSB .ENTR DEF PRAMS * * LDA D3 SET UP DEFAULT # OF PARAMETERS STA #PRMS * DLD PRAMS MOVE DEFS FOR 1ST TWO DST PRAM1 * DLD PRAMS+2 MOVE 2ND TWO DST PRAM1+2 * * SZB,RSS WAS THE 6TH ONE THERE? JMP DONE NO DONE * ISZ #PRMS YES INCREMENT COUNT DLD PRAMS+4 MOVE POSSIBLE 3RD & 4TH DST PRAM1+4 * SZA,RSS 3RD PRESENT? JMP DONE NO * ISZ #PRMS YES-INCREMENT COUNT * SZB,RSS 4TH PRESENT? JMP DONE NO * ISZ #PRMS DONE LDA #PRMS CALCULATE RETURN ADA ADDS STA DRTN & PUT IN REBUILT CALL * JSB RFASR JSB CLEAR CLEAR OPTIONAL PARAMETERS LDA PRAMS+1,I GET IERR JMP DREAD,I FINISHED RETURN TO USER SPC 5 RFASR NOP JSB READF DRTN NOP PRAM1 REP 6 NOP JMP RFASR,I SPC 5 CLEAR NOP CLA CLEAR DEFS TO OPTIONAL PARAMETERS CLB DST PRAMS+3 DST PRAM1+3 STA PRAMS+5 STA PRAM1+5 * JMP CLEAR,I SPC 5 * CONSTANTS D3 DEC 3 ADDS DEF DRTN+1 #PRMS NOP END * AN ERROR EXISTS a  ASMB,L,C,F HED %OPMD 91704-16105 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM %OPMD,7 91704-16105 REV A 760323 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ************************************************* * *%OPMD OPERATOR INTERFACE MODULE * *SOURCE PART # 91704-18105 REV A * *REL PART # 91704-16105 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 10-9-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: MAR 1976 * ****************************************************** SPC 1 SPC 2 * * THIS IS A ROUTINE TO HANDLE ALL OPERATOR * COMMANDS USED BY DS1 IN RTE/B * THIS MODULE IS APPENDED IF THE BRANCH NEUMONIC * TABLE REQUIRES ANY OF THE ENTRIES SUP SPC 3 * * DEFINE ENTRY POINTS * ENT %CRET,%CLOS,%PURG,%ON,%RNAM ENT %TLOP,%DLST ENT ABYTE,SBYTE,LENBL ENT %PLOS,MOVE,CHAIN SPC 2 * * DEFINE EXTERNALS * EXT B377,CHAR,ERROR,CHARN,MBUFS EXT .43,.32,.45,M7,M9,.10,M5 EXT DIGCK,INVSC,CCRET,CCLOS,INIT EXT CMESG,MBUF2,CPURG,CSCHD,CNAME,M6 EXT FRMTO,READR,M1,TFLAG,CKLLN,%TAM EXT PROGL,B200,LWAM,.3,.8,.2,RLU EXT EXEC,M4,M2,.1,HILIM,LOLIM EXT INDCK,CRLF,LSTIT,SWLST,TSTIT,TYPE EXT FIXNM,PXMKA,PEXMA,.RUN,BLANK,LINE,SCR EXT CLINE,DIMFG,M8,.ENTR,.6 SPC 3 * * DEFINE A AND B REG * A EQU 0 B EQU 1 SKP * * ROUTINE TO CREATE A FILE AT CENTRAL * FOR AN OPERATOR COMMAND * CALLING SEQUENCE * CREATE F@ILENAME:SECURITY CODE:LABEL:TYPE:FSIZE:RSIZE * %CRET NOP JSB NAMDC DECODE THE NAME LDA FSIZ GET FILE SIZE FLT CONVERT IT TO FLOATING POINT DST SIZE1 SAVE FILE SIZE LDA RSIZ GET RECORD SIZE ADA DM513 512 = MAX REC. LENGTH SSA,RSS RECORDS TOO LONG ? JMP IERR YES, OPERATOR ERROR LDA RSIZ GET RECORD SIZE FLT CONVERT IT TO FLOATING POINT DST SIZE2 SAVE RECORD SIZE ISZ DIMFG JSB CCRET CREATE THE FILE DEF *+8 DEF TEMPB TEMP BUFFER FOR DCB DEF TEMP1 ERROR WORD DEF NAME FILE NAME DEF SIZE1 FLOATING PT FILESIZE DEF FTYPE TYPE DEF SC SECURITY CODE DEF LU LDA TEMP1 GET STATUS SSA IS THERE AN ERROR? JMP FERR YES...ERROR JSB CCLOS NO ERROR...CLOSE FILE DEF *+3 DEF TEMPB TEMP DCB DEF TEMP1 STATUS LDA TEMP1 GET STATUS SSA ANY ERRORS? JMP FERR YES JMP INIT NO...RETURN SPC 2 SIZE1 BSS 2 SIZE1 AND 2 MUST BE INORDER SIZE2 BSS 2 TEMPB BSS 6 B72 OCT 72 B54 OCT 54 DM513 DEC -513 SKP * * SUBROUTINE TO CLOSE AN OPEN FILE * CALLING SEQUENCE * CLOSE FILENAME * %CLOS NOP JSB NAMDC GET THE NAME JSB CCLOS GO CLOSE FILE DEF *+3 DEF NAME FAKE DCB FOR NAME DEF TEMP1 ERROR STATUS LDA TEMP1 GET STATUS SSA ANY ERRORS JMP FERR YES JMP INIT RETURN SKP * * SUBROUTINE TO IMPLEMNT THE PURGE COMMAND * CALLING SEQUENCE * PURGE FILENAME:SECURITY CODE:LU * %PURG NOP JSB NAMDC DECODE THE NAME ISZ DIMFG JSB CPURG DEF *+6 DEF NAME DEF TEMP1 DEF NAME DEF SC PONTR DEF LU LDA TEMP1 GET STATUS SSA ERROR? JMP FERR YES JMP INIT NO SKP * * ROUTINE TO SCHEDULE A PROGRAM TO RUN AT CENTRAL * CALLING SEQUENCE * ON,PNAME,P1,P2,P3,P4,P5 * %ON NOP JSB CHARN GET CHARACTER CPA B54 IS IT A ","? RSS YES JMP IERR NO...ERROR JSB CHAR GET FIRST CHAR OF NAME CLB SET FLAG...SKIP SPACES JSB LNAME GET PROGRAM NAME DEF NAME BUFFER WHERE TO STORE NAME DEC -6 NEG MAX LENGTH+1 LDB PADD GET ADDRESS OF PRAM BUFFER STB TEMP1 SAVE PRAM BUFFER ADDRESS LDB M6 GET MAX NUMBER OF PRAMS+1 STB TEMP2 ONB CPA .10 EOL? JMP ONC YES...ISSUE EXEC CALL ISZ TEMP2 OUT OF ROOM? RSS NO...CONTINUE JMP IERR YES...ERROR JSB GETNM GET NUMBER CLB SET PRAM TO ZERO IF NOT THERE STB TEMP1,I SAVE VALUE ISZ TEMP1 GET TO NEXT VALUE JMP ONB GET NEXT PRAM ONC JSB CSCHD GO SCHEDULE PROGRAM DEF *+8 NAMA DEF NAME DEF TEMP1 DEF P1 DEF P2 DEF P3 DEF P4 DEF P5 * CLA CLEAR CLB THE DST P1 SCHEDULE DST P3 PARAMETERS STA P5 FOR NEXT TIME LDB TEMP1 GET STATUS SZB,RSS ANY ERRORS? JMP INIT NO LDA CM75 ASSUME PROGRAM BUSY RBL SSB CHECK IF ASC MESSAGE LDA CM72 ASC MESSAGE...PROGRAM NOT THERE JMP FERR TELL WORLD SPC 2 P1 NOP P2 NOP P3 NOP P4 NOP P5 NOP PADD DEF P1 CM75 DEC -75 CM72 DEC -72 SKP * * ROUTINE TO IMPLEMENT RENAME COMMAND * CALLING SEQUENCE * RENAME NAME,NEWNAME * %RNAM NOP JSB NAMDC CPA B54 NEXT CHAR MUST BE A "," RSS WELL WHAT DO YOU KֳNOW, IT IS JMP IERR DINGBAT...NAME,NEWNAME...OH WELL DLD NAME GET OLD NAME DST TEMPB AND STORE IT IN A TEMP BUFFER DLD NAME+2 GET LAST FOR CHARS DST TEMPB+2 DLD SC GET SECURITY CODE AND LU DST TEMPB+4 AND SAVE JSB NAMDC GET NEW NAME LDA SC GET NEW SECURITY CODE IOR TEMPB+4 OR IT WITH OLD IF SPECIFIED STA SC LDA LU GET LU IOR TEMPB+5 OR LU'S TOGETHER STA LU ISZ DIMFG JSB CNAME GO CHANGE THE NAME DEF *+7 DEF TEMPB OLD NAME...DCB DEF TEMP1 ERROR RETURN HERE DEF TEMPB OLD NAME DEF NAME NEW NAME DEF SC SECURITY CODE DEF LU LDA TEMP1 ANY ERRORS? SSA ANY ERRORS? JMP FERR YES JMP INIT NO...RETURN SKP * * ROUTINE TO IMPLEMENT THE TELLOP COMMAND * CALLING SEQUENCE * TELLOP0,MESSAGE * %TLOP NOP SPC 1 * * HEY GANG!!!! I AM CHEATING * I AM USING TO MESSAGE BUFFER IN THE REMOTE * RFA MODULE TO STORE THE MESSAGE * YOU NOTICE THAT WHEN WE CALL CMESG THAT ROUTINE * PROCEEDS TO SHIFT EVERYTHING OVER BY ONE WORD * ANYWAY, THE ENTRY POINT MBUF2 IS THE STARTING ADDRESS * WHERE WE CAN START STORING THE TELLOP MESSAGE * SPC 1 LDA MBF2A GET INDIRECTS OFF OF BUFFER ADDRESS JSB INDCK STA MBF2A INCASE THERE ARE ANY LDA MBUFS GET MAX NEGATIVE SIZE OF BUFFER STA %TLP1 SAVE FOR MOVE NAME ROUTINE JSB CHAR GET FIRST CHAR OF MESSAGE CCB SET TO INCLUDE SPACES JSB LNAME MOVE MESSAGE INTO REPLY BUFFER MBF2A DEF MBUF2 %TLP1 NOP MAX NUMBER OF CHARACTERS JSB CMESG NOW WE GO SEND TO MESSAGE DEF *+3 DEF D1 DEF MBUF2 JMP INIT WE HAVE SET IT RETURN * D1 DEC 1 SKP * * ROUTINE TO DO DLIST COMMAND * CALLING SEQUENCE * DLIST FILTER:SC:LU:FILE TYPE:LIST LU * %DLST NOP JSB NAMDC DECODE THE NAME INFO LDB FTYPE GET FILE TYPE CCE SEE IF THEY GAVE IT SZB IF NOT ZERO PROVIDED RBL,ERB SET SIGN BIT STB FTYPE SAVE FILE TYPE LDA DNREQ SEE IF THEY SPECIFIED A LIST DEVICE LDB .1 INCASE THEY DIDN'T...LIST ON SYSTEM STB STRM1 SET IN STREAM TYPE SZA LDB A THEY DID, USE IT STB DLSTD SAVE LIST DEVICE SELECT CODE CLA GET A ZERO TO SAY NEW REQ STA DNREQ %DST1 LDA MBUFS GET LENGTH OF BUFFER CMA,INA MAKE IT POSITIVE RAR MAKE IT INTO WORDS STA DLNGH SAVE FOR CENTRAL TO USE STA DLDLN SAVE FOR %TAM TO USE CLA,CLE,INA SET FOR READ, REQ AND DATA JSB %TAM GO SEND IT DEF STRM1 DEF DLPRM JSB LINST CHECK LINE STATUS LDA DSTAT OUR WE DONE? SZA JMP INIT YES JSB EXEC NO...SEND LINE TO LIST DEVICE DEF *+5 DEF .2 DEF DLSTD DEF MBUF2 DEF DLNGH JMP %DST1 GO FOR MORE SPC 1 DLPRM DEF MBUF2 DLDLN NOP DEF STRM1 ABS DLSIZ IGNORED BY DS1-B' SPC 1 DLSTD NOP DIRECTORY LIST LU SKP * * ROUTINE TO RE-ENABLE THE LINE IF DOWN * CALLING SEQUENCE * ENABLE * LENBL NOP JSB CLINE CLEAR THE LINE JMP INIT AND RETURN TO BASIC SKP * * SUBROUTINE TO PROCESS THE CHAIN COMMAND * CALLING SEQUENCE * CALL CHAIN("FILENAME",SC,LU,LOWER LIM,UPPER LIM) * SPC 1 CNAMA NOP CSCA NOP CLUA NOP CLIMA NOP CULMA NOP CHAIN NOP JSB .ENTR GET PRAMS DEF CNAMA WHERE TO PUT ADDRESS LDA CNAMA GET ADDRESS OF NAME JSB FIXNM GO PROCESS NAME JMP IERR SEND ERROR MESSAGE STB CNAMA SAVE ADDRESS OF NAME LDA M4 GET LOOP COUNTER FOR NAME AREA STA TEMP1 SAVE IN DOWN COUNTER LDA C4040 GET SPACE LDB NAMEA GET ADDRESS OF NAME AREA CHAN0 STA B,I SAVE SPACE INB GET NEXT LOCATION ISZ TEMP1 DONE? JMP CHAN0 NO...CONTINUE LDA CNAMA,I GET LENGTH AND B377 MASK OFF BIT 8 ADA .2 INCLUDE LENGTH CMA,INA NEGATE LENGTH STA CHAN1 SAVE FOR MOVE LDA CNAMA GET ADDRESS (SOURCE) RAL CONVERT TO BYTE ADDRESS LDB NAMEA GET ADDRESS WHERE NAME TO GO RBL CONVERT TO BYTE ADDRESS JSB MOVE MOVE BUFFER CHAN1 NOP LDA CSCA I GET SECURITY CODE STA SC LDA CLUA,I GET LU STA LU CLA,INA SET "FROM" FLAG STA FRMTO LDA CLIMA,I GET LOWER LIMIT STA LOLIM LDA CULMA,I GET UPPER LIMIT STA HILIM JSB PRMIN GO MOVE PARMB LDA PXMKA CONVERT TO PHASE 1 STA PEXMA JSB SCR DELETE OLD PROGRAM LDA LODFA GET ADDRESS OF LOAD FROM DISK ROUTINE STA READR LDA .RUNA GET ADDRESS WHERE RUN ROUTINE LOCATED JSB INDCK STA %PLOS SET FOR COMPLETION RETURN CHAN2 LDA .32 SET UP TO INPUT A LINE STA BLANK JSB LINE GO GET A LINE JMP CHAN2 AND CONTINUE SPC 2 .RUNA DEF .RUN SKP * * SUBROUTINE TO DECODE NAME PRAMS * CALLING SEQUENCE * JSB NAMDC * WILL CALL NAMD0 AFTER CALLING CHAR * NAMDC NOP JSB CHAR GET CURRENT CHAR JSB NAMD0 DECODE THE LINE JMP NAMDC,I RETURN SPC 3 * * SUBROUTINE TO DECODE NAME PRAMS * CALLING SEQUENCE * JSB NAMD0 * A REG= CURRENT CHAR * UPON RETURN * SC=SECURITY CODE * LU=LOGICAL UNIT * FSIZ SIZE OF FILE * RSIZ=SIZE OF EACH RECORD * TYPE=TYPE * NAM=NAME * NAMD0 NOP STA TEMP2 SAVE CURRENT CHAR CLA CLEAR OUT # OF OPTIONAL PRAMS STA NPRMS LDA SPACE GET A WORD OF SPACES LDB SPACE AND ANOTHER DST NAME+1 CLEAR OUT NAME AREA STA NAME+3 LDA M5 GET # OF OPTIONAL PRAMS STA TEMP1 SAVE IN DOWN COUNTER LDB SCA GET ADDRESS OF FIRST OPTIONAL NAME PRAM CLA GET A ZERO NMDCA STA B,I CLEAR OUT WORD INB GET NEXT WORD ISZ TEMP1 DONE? JMP NMDCA NO...CONTINUE CLB SET TO SKIP SPACES LDA TEMP2 RECALL CURRENT CHAR JSB LNAME GET NAME...A REG 0,IGNORE SPACES NAMEA DEF NAME BUFFER WHERE TO PUT NAME DEC -7 MAX LENGTH + 1 SPC 2 * AT THIS POINT WE HAVE MOVED THE NAME IN SPC 1 NMDCC JSB CHRCK CHECK FOR END OF LINE JMP NAMD0,I YES...TERMINATE ROUTINE JSB GETNM GET NUMBER RSS NOT NUMERIC JMP NMDCD NUMERIC SAVE SC CODE JSB CHRCK CHECK FOR DELEM. JMP NAMD0,I END OF LINE JMP NMDCE NO SECURITY CODE ALF,ALF SHIFT TO HIGH ORDER STA SC SAVE TOP HALF SCURITY CODE JSB CHARN GET NEXT CHAR STA B SAVE CHAR JSB CHRCK TERMINATOR NOP EOF...SET FOR SPACE LDA .32 GET A SPACE IOR SC OR IN BOTTOM HALF OF SCURITY WORD STA SC SAVE COMPLETE SECURITY CODE LDA B GET CHARACTER AGAIN JSB CHRCK ARE WE DONE? JMP NAMD0,I YES...RETURN JMP NMDCF YES...GO PROCESS LU JSB CHARN GET ANOTHER CHARACTER RSS NO...CHECK NEXT CHAR...MUST BE A ":" NMDCD STB SC SAVE NUMERIC SECUITY CODE NMDCE JSB CHRCK CHECK FOR TERMINATOR JMP NAMD0,I DONE RSS CONTINUE...GOT A : JMP IERR THEY BLEW IT!!! SPC 2  * WE NOW HAVE PROCESSED THE NAME AND SECURITY CODE * NOW WE ARE GOING TO PROCESS LU,TYPE,SIZE1,SIZE2 SPC 1 NMDCF LDB PONTR GET ADDRESS TO POINTER TO LU TYPE,AND SO ON STB TEMP1 SAVE POINTER LDB M4 REMAINDER NUMBER OF POINTERS STB TEMP2 SAVE IN A DOWN COUNTER NMDCH JSB GETNM GET NUMBER CLB NOT NUMERIC STB TEMP1,I SAVE PRAM VALUE ISZ NPRMS INCREMENT COUNT JSB CHRCK CHECK IF TERMINATOR WAS INCOUNTERED JMP NAMD0,I YES...DONE RSS RECIEVED A ":" JMP IERR HE BLEW IT NMDCG ISZ TEMP1 GET NEXT PRAM ADDRESS ISZ TEMP2 OUT OF ROOM? JMP NMDCH NO...CONTINUE JMP IERR YES...OH WELL SPC 3 SPACE ASC 1, SCA DEF SC TEMP1 NOP TEMP2 NOP NPRMS NOP SPC 1 * * HERE WE ARE USING THIS BUFFER FOR DECODING PRAMS * AS WELL AS A PRAMB FOR LOAD SAVE REQUESTS * WATCH YOURSELF IF YOU NEED TO CHANGE PART OF * THIS TABLE * SPC 1 . EQU * BSS 4 ALLOW 4 WORDS...GET NAME IN CORRECT POSITION SPC 1 NAME OCT 0 LOCATION FOR LENGTH COUNT ASC 3, ACTUAL FILE NAME SC NOP SECURITY CODE LU NOP LU FTYPE NOP FILE TYPE FSIZ NOP FILE SIZE RSIZ NOP RECORD SIZE SPC 1 * * REORG FOR DEFINING LOAD-SAVE PRMB * SPC 1 ORG . STRM NOP STREAM TYPE DCB# NOP DCB#...DEFINED BY CENTRAL...MUST NOT BE MODIFIED LSFG NOP LOAD-SAVE FLAG...0-1..SIGN BIT FERC NOP FILE STATUS LSST NOP LOAD SAVE STATUS...CURRENTLY NOT USED BSS 3 THE NAME GOES HERE...SET UP BY NAMD0 BSS 1 SC...SET BY NAMD0 BSS 1 LU..SET BY NAMD0 BSS 1 FILE TYPE...SET BY NAMD0 BSS 1 FILE SIZE...SET BY NAMD0 LSBLN BSS 1 BUFFER LENGTH LLIM NOP LOWER LIMIT ULyIM NOP UPPER LIMIT BSS 1 NOT USED...SPARE RRLU BSS 1 REMOTE LU...TERMINAL # SPC 1 LSPSZ EQU *-. DEFINE LENGTH OF PARMB SPC 4 * * REORG FOR DEFINING LOAD-SAVE PRMB * SPC 1 ORG . STRM1 NOP STREAM TYPE=1 BSS 1 NOT USED DSTAT NOP STATUS..0 CONTINUE...NOT 0 END DERR NOP DLIST ERROR...CURRENTY NOT USED DLNGH NOP DLIST LENGTH OF PRINT LINE BSS 3 FILTER TO GO HERE BSS 1 LU BSS 1 SC BSS 1 FILE TYPE DNREQ NOP NEW REQ FLAG BSS 7 RESERVED FOR CENTRAL USE DLSIZ EQU *-. LENGTH OF PARMB SPC 3 * * MAKE SURE NO ONE UNDER FLOWS!!! * ORG . BSS 35 SKP * * SUBROUTINE TO GET A FLOATING POINT NUMBER * CONVERT IT, AND RETURN IT IN THE B REG * THE A REG=NEXT CHAR * CALLING SEQUENCE * JSB GETNM * UNABLE TO CONVERT RETURN * CONVERTED RETURN * B REG=NUMBER * GETNM NOP JSB CHARN GET NEXT CHAR CLB,CLE CLEAR E AND B REG STB GTNM1 CLEAR OUT SUM WORD STB GTNM2 CLEAR OUT DIGIT RECIEVED WORD CPA .43 IS IT A "+" CCE SET E=READ ANOTHER CHAR CPA .45 IS IT A "-" CCB,CCE SET B=-1, SET E =READ ANOTHER CHAR STB SIGN SAVE SIGN SEZ READ ANOTHER CHAR? GTNMA JSB CHARN YES JSB DIGCK GO SEE IF DIGIT IS NUMERIC JMP GTNMB NOT NUMERIC...DONE CONVERSION LDA GTNM1 GET PARTICAL SUM IN A REG STB GTNM1 DIGCK RETURN NUMBER IN BOTH A AND B REG MPY .10 MULTIPLY PARTICAL SUM BY 10 ADA GTNM1 AND IN NEXT DIGIT STA GTNM1 SAVE NEW SUM ISZ GTNM2 SET FOR RECIEVED A DIGIT JMP GTNMA GET NEXT DIGIT SPC 1 GTNMB LDB GTNM2 DID WE GET ANY DIGITS? SZB,RSS JMP GETNM,I NO LDB SIGN GET SIGN CLE,ERB IF NEGATIVE, SET E REG LDB GTNM1 GET BINARY VALUE SEZ NEGATIVE VALUE? CMB,INB YES...NEGATE RESULT ISZ GETNM GET DIGIT RETURN JMP GETNM,I RETURN SPC 2 GTNM1 NOP GTNM2 NOP SIGN NOP SKP * * SUBROUTINE TO CHECK IF A CHARACTER IN THE A REG * ISEITHER AN END OF LINE ".10" OR A : "B72" * CALLING SEQUENCE * JSB CHRCK * END OF LINE RETURN * COLEN RETURN * NEITHER RETURN * A REG CONTAINS THE CHARACTER * B AND E REG NOT CHANGED * CHRCK NOP CPA .10 IS IT END OF LINE? JMP CHRCK,I YES...EOL RETURN CPA B54 IS IT A ","? JMP CHRCK,I YES...TREAT AS A EOL ISZ CHRCK CPA B72 IS IT A ":" JMP CHRCK,I ":" RETURN ISZ CHRCK JMP CHRCK,I NO DELM RETURN SKP * * ROUTINE TO MOVE NAME INTO NAME BUFFER * CALLING SEQUENCE * JSB LNAME * DEF BUFFER ADDRESS WHERE TO STORE NAME * DEC -MAX # OF CHARACTERS +1 * A REG=0 IGNORE BLANKS * A REG=-1 INCLUDE BLANKS * RETURN...A REG = DEL CHAR * LNAME NOP STB LNAM2 SAVE BLANK CHAR FLAG STA LNAM3 SAVE CURRENT CHAR CLB GET A ZERO TO CLEAR COUNT LDA LNAME,I GET ADDRESS OF NAME BUFFER STA LNAM1 SAVE COUNT ADDRESS ISZ LNAME GET TO NEXT PARM STB A,I CLEAR OUT COUNT WORD INA GET TO BUFFER...SKP OVER COUNT CLE,ELA CONVERT TO BYTE ADDRESS STA TEMP1 SAVE BYTE ADDRESS LDA LNAME,I GET MAX LENGTH +1 ISZ LNAME GET TO RETURN ADDRESS STA TEMP2 SAVE FOR DOWN COUNTER LDA LNAM3 GET CURRENT CHAR NMDCB LDB LNAM2 GET BLANK FLAG SZB IGNORE BLANKS? JMP LMDCD NO LMDCC CPA .32 IS IT A BLANK? RSS YES...IGNORE IT JMP LMDCD NO...VALID CHAR JSB CHAR GET AA CHARACTER JMP LMDCC CHECK IF IT IS A BLANK LMDCD JSB CHRCK CHECK FOR DELEMETER NOP JMP LNAME,I HIT ONE LDB TEMP1 GT BYTE ADDRESS JSB SBYTE SAVE CHARACTER JSB CHAR GET NEXT CHARACTER ISZ TEMP1 GET NEXT CHAR ADDRESS ISZ LNAM1,I INCREMENT CHAR COUNT ISZ TEMP2 OUT OF ROOM? JMP NMDCB NO..CONTINUE JMP IERR YES...ERROR SPC 2 LNAM1 NOP LNAM2 NOP LNAM3 NOP SKP * * HERE IS WHERE WE COME IF WANT TO A LOAD,SAVE, * RUN,MERGE,OR LIST. THE "FROM","TO" FLAG DIRECTS THE * CONTROL OF THE FILE TRANSFER * WATCH THE SETING OF "FRMTO"... * %PLOS NOP JSB NAMD0 GET NAME,SECURITY CODE... JSB PRMIN SET UP THE LOAD SAVE PRAMB LDA FRMTO GET FROM TO FLAG AGAIN SZA,RSS FROM? JMP PLOS1 NO...TO LDA LODFA GET ADDRESS OF LOAD FILE ROUTINE STA READR SET UP FOR READER...IN BASIC LDA %PLOS GET TO CONTINUATION RETURN INA JMP A,I RETURN SPC 1 LODFA DEF LOADF DEFINE LOAD ROUTINE ADDRESS SPC 2 PLOS1 JSB FNDBF GET SOME BUFFER AREA STA PBUFA SAVE BUFFER ADDRESS STA RRECA SAVE FOR CENTRAL WRITE CMB,INB NEGATE LENGTH STB PBUFL SAVE NEGATIVE LENGTH STB RRECB SAVE LENGTH FOR LATTER JSB SWLST SET UP FOR OUTPUTING ON FILE DEF FSAV JSB LSTIT GO PROCESS OUTPUT (IN BASIC MODULES) CCA SET FOR ALL DONE JSB FLUSH FLUSH THE BUFFER JMP %PLOS,I RETURN SPC 2 PBUFA NOP PBUFL NOP SKP * * SUBROUTINE TO READ DATA ON LOAD COMMAND * BASIC CALLS IT EACH TIME IT WANTS INPUT * B REG= BUFFER ADDRESS * A REG= BUFER LENGTH * UPON RETURN * A REG= BUFFER LENGTH...IN CHARACTERS * LOADF NOP STB RRECA SAVE BUFFER ADDRESS INA GET +1 TOTAL LENGTH CMA,INA NEGATE COUNT STA RRECB SAVE - CHAR CHAR COUNT LODF1 LDA CLOC GET CURRENT ADDRESS LDB CLOC,I GET CONTENTS SZA FIRST TIME THRU SZB,RSS OR END OF BUFFER? JSB FILBF YES..FILL BUFFER FROM CENTRAL LDA CLOC,I GET LENGTH CPA M1 EOF JMP %PLOS,I YES...TAKE COMPLETION RETURN LODF2 ISZ CLOC GET TO FIRST DATA WORD LDB CLOC,I GET DATA WORD CPB C4040 IS IT A SPACE? RSS YES JMP LODF3 NO...CHECK LENGTH ADA M1 DECREMENT COUNT JMP LODF2 TRY AGAIN LODF3 LDB CLOC GET DATA WORD ADDRESS STB TEMP2 SAVE FOR MOVE ADB A GET TO NEXT ENTRY STB CLOC SZA,RSS ANYTHING JMP LODF1 NO...TRY AGAIN RAL CONVERT TO # OF CHARACTERS STA TFLAG SAVE # OF CHARACTERS FOR BASIC CMA,INA NEGATE COUNT STA MOVLN SAVE FOR MOVE CMA,INA GET POSITIVE LENGTH AGAIN ADA RRECB GREATER THAN MAX? SSA,RSS JMP LODF1 YES...IGNORE LINE LDA TEMP2 GET SOURCE ADDRESS OF MOVE RAL CONVERT TO BYTE ADDRESS LDB RRECA GET DESTINATION ADDRESS RBL CONVERT TO BYTE ADDRESS JSB MOVE MOVE THE BUFFER MOVLN NOP LDA TFLAG GET LENGTH JMP LOADF,I RETURN TO BASIC SPC 2 RRECA NOP RRECB NOP C4040 ASC 1, SBUFL EQU 40 LENGTH OF SAVE BUFFER (IN WORDS) SKP * * SUBRTOUTINE TO SAVE A LINE * CALLING SEQUENCE * JSB FSAV * A REG=-LENGTH * B REG=STARTING BYTE ADDRESS * CBUFL NOP CURRENT LENGTH ABS -SBUFL-SBUFL MAX # OF CHAR IN LINE OCT -2 I WILL HANDLE END OF LINE FSAV NOP ENTRY TO ROUTINE JMP *+3 SKP OVER INFO FOR END OF LINE NOP JSB ENDLN END OF LINE ROUTINE STA FSAVL SAVE LENGTH STA SMOVL PNNLHFOR MOVE RBL CONVERT TO BYTE ADDRESS STB FSAVA SAVE BYTE ADDRESS JSB SWLST DEF FSAV UPDAT LDA FSAVL SEE IF LINE IS TOO LONG CMA,INA MAKE LENGTH POSITIVE ADA TYPE ADD TO CURRENT COUNT STA TYPE CLA GET A ZERO FOR TSTIT JSB TSTIT SZA,RSS WILL LINE FIT? JMP UPDAT NO...TRY AGAIN LDB SBUFA GET ADDRESS OF LINE BUFFERGAIN RBL CONVERT TO BYTE ADDRESS ADB CBUFL GET TO END OF CURRENT LINE LDA FSAVA GET BYTE ADDRESS OF ADDITIONAL STUFF JSB MOVE MOVE THE LINE SMOVL NOP LDA .32 GET A SPACE JSB SBYTE MAKE SURE LAST CHAR ALWAYS A SPACE LDA TYPE SET LOCAL COUNT TO CORRECT LENGTH STA CBUFL JMP FSAV,I RETURN TO BASIC SMOVA NOP FSAVL NOP FSAVA NOP SBUFA DEF SBUF N . 91704-18106 1620 S 0122 DS1/B SCE/4 MOD BRTBL SOURCE             H0101 &{ SKP * * HERE IS WHERE WE COME ON END OF LINE CONDITION * ROUTINE CALLED BY CRLF (DEFINED IN BSUPV) * ENDLN NOP ENLN1 LDA CBUFL GET CURRENT LENGTH OF LINE SZA,RSS ANYTHING TO OUTPUT? JMP ENLN3 NO INA SET FOR ONE PAST LENGTH CLE,ERA CONVERT TO WORD LENGTH STA PBUFA,I SAVE LENGTH OF LINE ADA PBUFL CHECK IF BUFFER IS FULL? SSA,INA JMP ENLN2 NO...ROOM IN BUFFER CLA SET FOR BUFFER FULL, NOT DONE JSB FLUSH YES...BUFFER FULL...FLUSH IT JMP ENLN1 TRY AGAIN ENLN2 STA PBUFL SAVE LENGTH AFTER MOVE LDA CBUFL GET CURRENT LENGTH AGAIN CMA NEGATE LENGTH,INCLUDE SPACE CHAR STA ENLNA SAVE FOR MOVE ISZ PBUFA GET TO FIRST DATA WORD LDB PBUFA GET ADDRESS OF PACKING BUFFER RBL CONVERT TO BYTE ADDRESS LDA SBUFA GET ADDRESS OF LINE TO BE MOVED RAL CONVERT TO BYTE ADDRESS JSB MOVE MOVE LINE ENLNA NOP LDA CBUFL GET CURRENT LENGTH AGAIN INA GET ONE MORE CLE,ERA CONVERT TO WORD LENGTH ADA PBUFA RESET CURRENT OUTPUT POINTER STA PBUFA SAVE FOR NEXT TIME CLA CLEAR OUT CURRENT COUNTS STA TYPE DEFINED IN BASIC STA CBUFL DEFINED LOCALY ENLN3 LDB CRLF GET RETURN ADDRESS JMP B,I RETURN SKP * * SUBROUTINE TO MOVE A BUFFER FROM ONE AREA * TO ANOTHER * CALLING SEQUENCE * JSB MOVE * DEC - # OF WORDS...THIS WORD IS LOST!!!! * A REQ=SOURCE ADDRESS (BYTE) * B REG=DESTINATION ADDRESS (BYTE) * UPON RETURN B REG= NEXT BYTE ADDRESS * MOVE NOP STA MOVA SAVE SOURCE BYTE ADDRESS STB MOVB SAVE DESTINATION BYTE ADDRESS MOV1 LDB MOVA GET SOURCE BYTE ADDRESS JSB ABYTE GET A BYTE LDB MOVB GET DESTINATION BTYE ADDRESS JSB SBYTE WSTORE THE BYTE ISZ MOVA GET NEXT SOURCE BYTE ADDRESS ISZ MOVB GET NEXT DESTINATION BYTE ADDRESS ISZ MOVE,I DONE? JMP MOV1 NO...CONTINUE ISZ MOVE GET TO RETURN ADDRESS LDB MOVB GET NEXT DESTINATION BYTE ADDRESS JMP MOVE,I RETURN SPC 1 MOVA NOP MOVB NOP SKP * * SUBROUTINE TO FILL A BUFFER * CALLING SEQUENCE * JSB FILBF * FILBF NOP FLBF1 JSB FNDBF GET SOME BUFFER SPACE STA CLOC SAVE STARTING BUFFER ADDRESS CLE SET FOR READ A RECORD JSB RWREC GO READ FROM CENTRAL JMP FILBF,I NO ERRORS...RETURN JMP FLBF1 NO ROOM AT CENTRAL...TRY AGAIN CLOC NOP SKP * * ROUTINE TO FLUSH A BUFFER BY SHIPPING IT TO CENTRAL * CALLING SEQUENCE * JSB FLUSH * A REG= END OF LINE CONDITION (NORMALLY 0 EOL OR -1 * EOL AND EOF) * FLUSH NOP STA PBUFA,I SAVE END OF BUFFER CONDTION FLSH1 LDB RRECA GET ADDRESS OF BEGINING OF BUFFER CMB,INB NEGATE BUFFER ADDRESS ADB PBUFA GET DIFFERENCE INB INCLUDE END OF BUFFER CONDITION IN LENGTH LDA RRECA GET BUFFER ADDRESS CCE SET FOR WRITE REQUEST JSB RWREC GO WRITE THE RECORD RSS NO ERRORS JMP FLSH1 TRY AGAIN LDA RRECA RESET PACKING BUFFER LDB RRECB GET LENGTH AGAIN STA PBUFA STB PBUFL SAVE ADDRESS AND LENGTH JMP FLUSH,I RETURN SKP * * ROUTINE TO READ OR WRITE A RECORD TO CENTRAL * CALLING SEQUENCE * JSB RWREC * B REG= BUFFER LENGTH * A REG= BUFFER ADDRESS * E REG= 0,READ 1,WRITE * RWREC NOP STB BUFL SAVE BUFFER LENGTH STB LSBLN SAVE BUFFER LENGTH IN PARMB STA DADR SAVE DATA BUFFER ADDRESS CLA,INA SET FOR DATA AND REQ..E REG ALREADY SET JSB %TAM GO DO THE CALL DEF STRM REUPLY BUFFER...SAME AS SEND BUFFER DEF DADR JSB LINST CHECK LINE STATUS JSB EXEC RING BELL...TELL THEM WE ARE DOING ARE THING DEF *+5 DEF .2 DEF .1 DEF DINGA DEF DINGL LDB LSST GET STATUS OF TRANSACTION SZB NO ERRORS CPB M1 OR EOF JMP RWREC,I RETURN LDA FERC GET FMGR STATUS WORD CPB M2 IS IT A FILE MANAGER ERROR? JMP FERR YES LDA M103 DED WE LOOSE THE DCB?? CPB M4 JMP FERR YES...TELL THEM WE HAD SYSTEM PROBLEM JSB EXEC CENTRAL BUFFERS FULL...TELL THEM TO STAND BY DEF *+5 DEF .2 DEF .1 DEF STBYA DEF STBYL CLA SET UP WAIT LOOP LDB M6 WLOP1 INA,SZA INTER LOOP JMP WLOP1 INB,SZB OUTER LOOP JMP WLOP1 ISZ RWREC SET UP FOR RETRY RETURN JMP RWREC,I RETURN SPC 2 DADR NOP BUFL NOP DEF STRM STARTING ADDRESS OF PARMB ABS LSPSZ IGNORED BY DS1-B' SPC 1 M103 DEC -103 STBYA ASC 4,STANDBY STBYL DEC 4 SPC 1 DINGA OCT 3537 RING THERE BELL!!! DINGL OCT 1 SKP * * SUBROUTINE TO FIND AND SIZE UP SOME BUFFER * CALLING SEQUENCE * JSB FNDBF * UPON RETURN * B REG=WORD COUNT * A REG=STARTING ADDRESS * FNDBF NOP LDA PROGL CALCULATE STARTING ADDRESS OF BUFFER ADA B200 SA=PROGL+(3/8)*(LWAM-200B-PROGL) CMA,INA AS PER RAY FARITO ADA LWAM (LWAM-200B-PROGL) CLB MPY .3 3*(LWAM-200B-PROGL) DIV .8 3*(LWAM-200B-PROGL)/8 ADA PROGL WE HAVE THE STARTING ADDRESS ADA B200 GET PAST TEMP TABLES LDB MBUFS FIND OUT IF MESSAGE BUFFER LARGER CMB,INB MBUFS=-BUFFER BYTE COUNT CLE,ERB CONVERT TO + WORD COUNT STB FNDBL SAVE BUFFER LENGTH ADB A ADD TO S.A. OF POSSIBLE BUFFER CMB,INB AVAIL BUFFER * * WHERE P = NUMBER OF PARAMETERS * = ENTRY POINT OF SUBROUTINE * * ********************************************************************** * SBTBL EQU * * * CALL STATEMENTS START HERE * * OCT 100 DEF TIME TIME(T) * OCT 200 DEF SSETP SETP(S,P) * OCT 200 DEF SSTRT START(S,DELAY) * OCT 100 DEF DSABL DSABL(S) * OCT 100 DEF ENABL ENABL(S) * OCT 200 DEF TRNON TRNON(S,TIME) * OCT 200 DEF RGAIN RGAIN(CHANL,GAIN) * OCT 200 DEF SGAIN SGAIN(CHANL,GAIN) * OCT 0 DEF NORM NO PRAMS * OCT 300 DEF PACER PACER(RATE) * OCT 400 DEF AIRDV AIRDV(NUM,CHANL,DATA,ERR) * OCT 400 DEF AISQV AISQZ(NUM,SCHAN,DATA,ERR) * OCT 200 DEF ISETC * * * DS1 CALLS * * OCT 500 DEF CAPOS * OCT 300 DEF CCLOS * OCT 400 DEF CCONT * OCT 700 DEF CCRET * OCT 700 DEF CLOCF * OCT 600 DEF CNAME * OCT 600 DEF COPEN * OCT 400 DEF CPOSN * OCT 500 DEF CPURG * OCT 600 DEF CREAD * OCT 200 DEF CWIND * OCT 500 DEF CWRIT * OCT 300 DEF ASGN * OCT 200 DEF UASGN * OCT 200 DEF CMESG * OCT 700 DEF CAXTM * OCT 400 DEF CEXTM * OCT 700 DEF CSCHD * OCT 500 DEF CTIM * OCT 500 DEF POPEN * OCT 500 DEF PREAD * OCT 500 DEF PWRIT * OCT 300 DEF PCONT * OCT 500 DEF GET * OCT 300 DEF ACEPT * OCT 200 DEF REJCT * OCT 500 DEF CHAIN * OCT 0 DEF FINIS SKP * ********************************************************************** * * * THE FOLLOWING TABLE CONSISTS OF SUBROUTINE ENTRY * POINTS FOR THE SPECIAL STATEMENT ENTRIES IN THE * MNEMONIC TABLE. ENTRIES ARE AS FOLLOWS * * OCT 0 000 000 000 000 000 * DEF * * WHERE = SUBROUTINE ENTRY POINT * * ****************************************U****************************** * STDCL EQU * * * * STATEMENTS WITH NON-STANDARD SYNTAX START HERE * OCT 0 DEF EINP EXECUTE INPUT STATEMENT * OCT 0 DEF ELIST EXECUTE PRINT STATEMENT * OCT 0 DEF ETTYS EXECUTE PRINT# STATEMENT * OCT 0 DEF EREED READ STATEMENT * OCT 0 DEF RDNBR READ# LU; STATEMENT * OCT 0 DEF ETRAP TRAP STATEMENT * SKP * ********************************************************************** * * * THE FOLLOWING TABE DEFINES ENTRY POINTS FOR EXECUTION * OF COMMANDS. TABLE ENTRIES ARE AS FOLLOWS: * * OCT 0 000 000 000 000 000 * DEF * * WHERE: = ENTRY POINT FOR EXECUTION * ********************************************************************** * * SYSTEM COMMANDS START HERE * * OCT 0 DEF %CRET CREATE A FILE * OCT 0 DEF %CLOS CLOSE A FILE * OCT 0 DEF %PURG PURGE A FILE * OCT 0 DEF %ON TURN ON A CENTRAL PROGRAM * OCT 0 DEF %RNAM RENAME A FILE * OCT 0 DEF %TLOP SEND MESSAGE TO CENTRAL * OCT 0 DEF %DLST DO A CENTRAL DIRECTRY LIST * OCT 0 DEF LENBL ENABLE SATELLITE * OCT 0 DEF $DEL DELETE COMMAND * .RUNA OCT 0 DEF $RUN RUN COMMAND * OCT 0 DEF $SAVE SAVE COMMAND * OCT 0 DEF $MERG MERGE COMMAND * OCT 0 DEF $LOAD LOAD COMMAND * OCT 0 DEF $LST LIST COMMAND * OCT 0 DEF $TIM SET TIME COMMAND * OCT 0 DEF $REW REWIND COMMAND * OCT 0 DEF $SKPF SKIP FILE COMMAND * OCT 0 DEF $WEOF WRITE END OF FILE COMMAND * SKP Y* ********************************************************************** * * * THE FOLLOWING TABE DEFINES ENTRY POINTS FOR EXECUTION * OF FUNCTIONS. TABLE ENTRIES ARE AS FOLLOWS: * * OCT F 000 000 PPP 000 000 * DEF * * WHERE: F = 1 IF FUNCTION HAS "JSB ERR0" RETURN * P = NUMBER OF PARAMTERS * = ENTRY POINT FOR EXECUTION * * ********************************************************************** * FCNEX EQU * * * START FUNCTION ENTRY POINTS HERE * OCT 100 DEF ETAB EXECUTE TAB FUCTION * OCT 100100 DEF SIN EXECUTE SINE FUNCTION * OCT 100100 DEF COS EXECUTE COSIN FUNCTION * OCT 100100 DEF TAN EXECUTE TANGENT FUNCTION * OCT 100 DEF ATAN EXECUTE ARC TANGENT FUNCTION * .LOGA OCT 100100 DEF ALOG EXECUTE NATURAL LOG FUNCTION * .EXPA OCT 100100 DEF EXP EXECUTE EXPONENTIAL FUNCTION * OCT 100 DEF ABS EXECUTE ABSOLUTE FUNCTION * OCT 100100 DEF SQRT EXECUTE SQUARE ROOT FUNCTION * OCT 100 DEF EINT EXECUTE INTIER FUNCTION * OCT 100 DEF ERND EXECUTE RANDOM NUMBER FUNCTION * OCT 100 DEF ESGN EXECUTE SIGN FUNCTION * OCT 100 DEF ESWR EECUTE SWITCH REG FUNCTION * OCT 100 DEF IERR EXECUTE ERROR FUNCTION * OCT 100 DEF STATS GET STATUS LSBTB EQU * END OF BRANCH TABLE * SKP ********************************************************************** * * THE FOLLOWING TABLE DEFINES EXECUTION ENTRY POINTS * FOR THE COMMAND DEVICE TABLE. ENTRIES AR AS FOLLOWS: * * OCT 0 * DEF * * WHERE: = EXECUTION ENTRY FOR COMMANDS * ***($******************************************************************** * * COMMAND DEVICE EXECUTION * DEVEX EQU * * OCT 0 TAPE READER DEF PHOT1 * OCT 0 DEF %PLOS FILE LOAD AND SAVE ROUTINE * * ********************************************************************** * * * END s*  ' 91704-18108 1611 S 0122 DS1/B SCE/4 MODULE: %TAM              H0101 ]ASMB,R,L,C,F HED %TAM 91704-16108 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM %TAM,7 91704-16108 REV A 760309 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ***************************************** * *%TAM TERMINAL ACCESS MONITOR FOR RTE-B * *SOURCE PART # 91704-18108 REV A * *REL PART # 91704-16108 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 8-22-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: MAR 1976 * ***************************************** SUP SPC 2 * SUBROUTINE TO DO ALL REMOTE COMMUNICATION * ALL CALLS STARTING AT THE REMOTE TERMINAL WILL * GO THRU HERE. * CALLING SEQUENCE * JSB %TAM * DEF REPLY BUFFER ADDRESS * DEF PRM ADDRESS * A REG=0REQ ONLY, NOT 0 REQ AND DATA * E REG=READ/WRITE FLAG * SPC 3 * DEFINE ENTRY POINTS SPC 2 ENT %TAM,STCK,RWAIT SPC 2 * DEFINE EXTERNALS EXT REPLA,INDCK,FRPLY EXT CLU,M7,M1,EXEC,B377 EXT B200,WAIT EXT CLINE,DBSY EXT $TIME,#TIME SPC 2 * DEFINE A AND B REG SPC 1 A EQU 0 B EQU 1 SKP * * HERE IS WHERE WE START * %TAM NOP STA SAVEA A CONTAINS A PARAMETER!!!! SAVE IT LDA CLU AND B77 STA CNWD LDA SAVEA RESTORE THE PARAMETER CLB,INB SET FOR READ SEZ WRITE? INB YES STB DIRCT SAVE DIRECTION FLAG STA B GET REQ/DATA FLAF IN B REG LDA %TAM,I GET REYPLY ADDRESS JSB INDCK INDIRECT IT STA REPLA SAVE REPLY ADDRESS FOR REPLY LDA M7 GET RETRY COUNT STA RTRYC SAVE IN DOWN COUNTER CLA STA FRPLY CLEAR OUT WAIT FLAG ISZ %TAM GET TO PRAM ADDRESS LDA %TAM,I GET ADDRESS OF PRAMS ISZ %TAM SET FOR RETURN JSB INDCK INDIRECT IT SZB SEND REQ AND DATA? JMP %TAM2 YES LDB A,I GET REQ ADDRESS STB REQA SAVE BUFFER ADDRESS LDA DIRCT GET DIRECTION IOR BIT15 SET THE NO ABORT BIT STA IRW LDA REQA,I GET WORD 1 OF BUFFER IOR BIT11 SET FRIENDLY BIT STA REQA,I LDA REQA GET PARMB ADDRESS ADA D33 STEP TO TIME TAGS LDB $TIME GET 1ST WORD STB A,I SET IN PARMB STB #TIME SAVE FOR RETURN TEST INA LDB $TIME+1 SAME FOR 2ND WORD STB A,I STB #TIME+1 RQRTY ISZ RTRYC MAX NUMBER OF RETRYS? JMP *+3 NO LDA STWRD GET STATUS WORD JMP %TAM,I RETURN * * MAKE EXEC CALL SEND REQUEST * LDA DBSY WAIT TILL EVERYBODY DONE SZA JMP *-2 JSB EXEC DEF *+5 DEF IRW DEF CNWD REQA NOP REQL DEF D35 JMP RQRTY LINE ERROR JSB STCK DO STATUS CHECKING JMP STCK1 NO ERRORS..WAIT FOR RESPONSE JMP RQRTY ERROR RETRY JMP %TAM,I TERMINATE...TIME OUT OR STOP SPC 3 * * HERE FOR SEND REQ AND DATA * %TAM2 LDB A,I STB DTAD SAVE DATA ADDRESS INA STA DTL SAVE DATA LENGTH INA LDB A,I STB REQDA REQUEST ADDRESS ADB D33 STEP TO TIME TAGS LDA $TIME GET 1ST TIME WORD STA B,I SET IN PARMB STA #TIME SAVE FOR REPLY TEST INB SAME FOR 2ND WORD LDA $TIME+1 STA B,I STA #TIME+1 LD{A REQDA,I GET 1ST WORD OF REQUEST IOR BIT11 SET FRIENDLY BIT STA REQDA,I * LDA DIRCT GET DIRECTION OF DATA LDB B200 CPA D1 DATA READ LDB B100 LDA CLU GET THE LU AND B77 CLEAN IT IOR B SET THE PROPER CONTROL STA CNWD SET CONTROL RDRTY ISZ RTRYC MAX NUMBER OF RETRYS? JMP *+3 NO....CONTINUE LDA STWRD GET STATUS WORD JMP %TAM,I RETURN...WITH ERROR * * MAKE EXEC CALL...REQ AND DATA * LDA DBSY WAIT FOR LINE CLEAR SZA JMP *-2 JSB EXEC DEF *+7 DEF D2I REQ & DATA DEF CNWD REQDA NOP DEF D35 DEF DTAD DTL NOP JMP RDRTY ERROR RETURN JSB STCK CHECK STATUS JMP STCK1 ALL OK JMP RDRTY ERROR...RETRY CPA B10 TIME OUT OR STOP? JMP %TAM,I TIME OUT...GET OUT JMP STCK1 STOP RECIEVED SPC 2 * * HERE WE WAIT FOR REPLY * STCK1 JSB RWAIT GO WAIT FOR RESPONSE DST SABRG SAVE THE REGISTERS LDA REPLA,I GET W0 OF THE PARMB AND BIT13 GET BUZY BIT SZA,RSS SET ? JMP NBZY NO, OK CLB WE WAIT ISZ B SOME TIME JMP *-1 BEFORE RETRYING ISZ B WAIT SOME MORE JMP *-1 LDA REPLA,I GET W0 AGAIN AND NBT13 MASK OFF THE BUSY BIT STA REPLA,I REPLACE JMP RQRTY GO RETRY * NBZY DLD SABRG RESTORE THE REGISTERS JMP %TAM,I RETURN SKP * * SUBROUTINE TO CHECK STATUS OF CALL * CALLING SEQUENCE * JSB STCK * JMP ALL OK * JMP RETRY * JMP STOP RETURN * A REG CONTAINS STATUS WORD * B REG CONTAINS THE LENGTH * RTRYC MUST BE SET BEFORE CALLED * IF MAX NUMBER OF RETRYS FAILS WILL ABORT BASIC * STCK NOP AND B377 MASK ALL BUT STATUS SLA BO ALL OK? JMP STCK,I YES...RETURN ISZ STCK NO...SET FOR RETRY STA STWRD SAVE STATUS WORD SPC 2 * CHECK INDIVIDUAL STATUS BITS FOR ERROR SPC 1 RAR,SLA,RAR CHECK FOR DRIVER BUSY JMP STCK3 BUSY...GO WAIT TRY AGAIN RAR,SLA TIMEOUT? JMP STCK6 YES...TREAT AS STOP...CLEAR LINE RAR,SLA CHECK FOR STOP OR OUT OF SYNC JMP STCK5 GO CHECK RAR,SLA ILLEGAL LENGTH JMP OUT SHOULD NEVER GET HERE.CLEAR LINE-ERR=-51 RAR,SLA PARITY ERROR? JMP STCK3 YES...WAIT AND RETYR RAR,SLA LINE DOWN? RSS YES...TRY "UPING" THE LINE JMP OUT SHOULD NEVER GET HERE.CLEAR LINE-ERR=-51 LDB MD2 STB CNTR2 STCK2 JSB CLINE GO CLEAR THE LINE SLA ALL OK? JMP STCK,I YES...RETRY ISZ CNTR2 RSS JMP OUT+1 * * IF WE ARE UNABLE TO CLEAR LINE * TELL WORLD, WAIT 144 MS * AND TRY CLEARING THE LINE AGAIN. * STAY HERE UNTIL THE LINE CAN BE CLEARED... * LDB B200 WAIT 144 MS AND TRY AGAIN JSB WAIT JMP STCK2 TRY AGAIN SPC 2 STCK3 CLB SET TO WAIT AWHILE INB,SZB JMP *-1 LDA STWRD GET STATUS JMP STCK,I RETURN...RETRY SPC 2 STCK5 CPB M1 LEGAL STOP? JMP STCK7 YES...TERMINATE AND TELL THEM JMP STCK3 NO...WAIT AWHILE AND RETRY SPC 2 STCK6 JSB CLINE TIMEOUT, CLEAR LINE STCK7 LDA STWRD GET STATUS WORD ISZ STCK AND RETURN LIKE A STOP JMP STCK,I AND RETURN SKP * * SUBROUTINE TO WAIT FOR COMPLETION * * CALLING SEQUENCE * JSB RWAIT * JMP RECEIVED VALUE * * THIS ROUTINE IS GOING TO TEST A REPLY FLAG. * IT HAS A TIME OUT SET UP SO THAT IT WILL WAIT * FOR THE REPLY A MAXIMUM OF 10 TIMES THE LINE * TIME OUT. * * RWAIT NOP JSB SEARC ' SEARCH THE EQT TABLE FOR DVR65 CLA GET A NOP STA *-2 THE SEARCH IS NEEDED ONLY ONCE LDB EQENT GET ADDRESS OF EQT ENTRY ADB D13 STEP TO THE TIME OUT WORD LDA B,I GET IT ADA MD1 STA TIMUT SAVE LOOK LDA FRPLY DID THE REPLY ARRIVE ? SZA,RSS JMP WASTE NO, GO WASTE SOME TIME (100MS) DST SABRG SAVE THE REGISTERS CLB YES, CLEAN THE REPLY FLAG STB FRPLY LDA REPLA GET REPLY ADDRESS ADA D33 STEP TO TIME TAGS DLD A,I GET THEM CPA #TIME IS THIS THE RIGHT REPLY ? RSS JMP NOGD NO, IGNORE IT CPB #TIME+1 RSS YES JMP NOGD MISMATCH, IGNORE THIS REPLY DLD SABRG FIRST RESTORE THE REGISTERS JMP RWAIT,I NOW RETURN * WASTE ISZ TIMUT DID WE TIME OUT ? RSS NO JMP OUT YES LDA LENGT STA CNTR ISZ CNTR JMP *-1 JMP LOOK WE SPENT 100 MS HERE, THAT'S ENOUGH * OUT JSB CLINE CLEAR THE LINE LDA MD51 GET A STATUS BACK TO THE CALLER JMP RWAIT,I RETURN SPC 3 * * WE COME HERE IF A REPLY ARRIVES WITH THE WRONG * TIME TAGS. IF DATA IS PENDING (PTOP) WE SEND A * STOP TO CANCEL IT. * NOGD LDB EQENT GET ADDRESS OF EQT ENTRY ADB D11 STEP TO WORD 12 LDA B,I GET WORD 12 AND B1773 MASK OUT THE DP BIT (BIT 8) SZA,RSS DATA PENDING ? JMP LOOK NO, WAIT FOR NEXT REPLY LDA CLU YES, GET PREPARED FOR A SEND STOP AND B77 STA CNWD JSB EXEC SEND A STOP DEF *+3 DEF D3 CONTROL REQUEST DEF CNWD STOP ON COM. LINE. * JMP LOOK GO WAIT FOR NEXT REPLY SPC 3 * * THIS ROUTINE WILL SEARCH THE EQT TABLE FOR THE * ENTRY OF THE COMM LINE. * THE ADDRESS OF THE 1ST WORD OF THE E$"NTRY IS STORED * IN EQENT. * SEARC NOP LDA B1651,I GET # OF EQT ENTRIES CMA,INA NEGATE STA EQT# AND SAVE AS A COUNTER LDB B1650,I GET @ OF 1ST EQT ENTRY ADB D4 STEP TO WORD 5 OF 1ST ENTRY * LOOP1 LDA B,I GET A WORD 5 ALF,ALF RIGHT JUSTIFY THE TYPE AND B77 ISOLATE THE EQT TYPE CPA B65 IS IT THE COMM.LINE JMP FOUND YES (DVR65) ADB D15 STEP TO NEXT ENTRY ISZ EQT# INCREMENT COUNT JMP LOOP1 HLT 2 IF WE COME HERE, IT MEANS THAT THERE IS NO * NO COMM LINE. WE ARE IN TROUBLE. * FOUND ADB DM4 STEP BACK TO WORD 1 STB EQENT JMP SEARC,I RETURN SPC 3 SKP * * DEFINE STORAGE LOCATIONS * DIRCT NOP RTRYC NOP B10 OCT 10 STWRD NOP CNTR NOP CNTR2 NOP LENGT DEC -10000 MD1 DEC -1 MD2 DEC -2 TIMUT NOP D13 DEC 13 EQT# NOP B65 OCT 65 D15 DEC 15 D4 DEC 4 B1650 OCT 1650 B1651 OCT 1651 MD51 DEC -51 D2I OCT 100002 DTAD NOP B77 OCT 77 B100 OCT 100 CNWD NOP IRW NOP BIT11 OCT 4000 D1 DEC 1 D35 DEC 35 D33 DEC 33 SABRG BSS 2 BIT13 OCT 20000 BIT15 OCT 100000 NBT13 OCT 15777 SAVEA NOP EQENT NOP B1773 OCT 177377 D11 DEC 11 D3 DEC 3 DM4 DEC -4 * END $  ' 91704-18110 1552 S 0122 DS1/B SCE/4 MODULE: %BUFR              H0101 EASMB,L HED %BUFR 91704-16110 REV A * (C) HEWLETT-PAKARD CO. 1976 NAM %BUFR,6 91704-16110 REV A 751224 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ****************************************************** * *%BUFR BUFFERING MODULE...AND FLAGS * *SOURCE PART # 91704-18110 REV A * *REL PART # 91704-16110 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 8-30-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: DEC 1975 * ******************************************************* SPC 1 * * DEFINE EXTERNALS * SPC 1 EXT $LIBR,$LIBX SPC 2 * * SPC 2 * * DEFINE BUFFER ENTRY POINTS * ENT FRPLY,REPLA ENT #TIME ENT MSTFL,MSTB ENT %MOVE,DBSY SPC 2 * * DRIVER BUSY REQUEST...SLAVE * DBSY NOP SPC 2 * * REPLY PARMB ADDRESS...PLACED THERE BY %TAM * REPLA NOP * * DRIVER STATUS FOR REPLY. TELLS RWAIT (IN %TAM) IF THE * REPLY HAS ARRIVED. * FRPLY NOP SPC 2 * * MASTER PARMB LENGTH...PLACED BY %INTR TO TELL %PTP IF * IF ANYTHING WAS RECEIVED TO SATISFY A GET. * MSTFL NOP * * MASTER PARMB * MSTB BSS 35 * * TIME TAGS OF THE LAST OUTGOING REQUEST * #TIME BSS 2 SPC 2 * * SUBROUTINE TO MOVE WORDS FROM ONE AREA OF CORE TO ANOTHER * CALLING SEQUENCE * JSB MOVE * DEF DESTINATION BUFFER ADDRESS * A REG CONTAINS SOURCE ADDRESS * B REG CONTAINS SOURCE LENGTH * MOVE NOP JSB $LIBR ROUTINE IS PRIVLEDGE    NOP SZB,RSS MAKE SURE NOT ZERO JMP MOVE2 ZERO...DONE STA SADD LDA MOVE,I GET DESTINATION ADDRESS STA DADD CMB,INB NEGATE LENGTH MOVE1 LDA SADD,I GET WORD STA DADD,I SAVE WORD ISZ SADD ISZ DADD INB,SZB DONE? JMP MOVE1 NO MOVE2 ISZ MOVE JSB $LIBX RETURN DEF MOVE SPC 1 SADD NOP DADD NOP %MOVE EQU MOVE SPC 3 END EQU * END   $ 91704-18112 1611 S 0122 DS1/B SCE/4 MODULE:%PTP              H0101 6ASMB,R,L,C HED %PTP 91704-16112 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM %PTP,7 91704-16112 REV A 760316 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * ********************************************* * *%PTP PROGRAM TO PROGRAM INTERFACE FOR SCE-4 * *SOURCE PART # 91704-18114 * *REL PART # 91704-16114 * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 11-13-74 * *MODIFIED BY: CHUCK WHELAN * *DATE MODIFIED: DEC 1975 * ********************************************** SPC 1 SUP * * SUBROUTINE TO HANDLE PROGRAM TO PROGRAM MASTER * CALLS IN THE RTE/B TERMINAL * THIS PROGRAM USES THE RFAIN PARMB AND REPLY BUFFERS * SPC 2 * * DEFINE EXTERNALS EXT DIMCK,.4,%TAM,.ENTR,.1,M2,EXEC,PRMB,M6 EXT SBYTE,ABYTE,.8,M1,.2 EXT DIMFG,.3,B377,M3,INDCK EXT .10,%MOVE,MSTFL,MSTB,CLU SPC 2 * * DEFINE ENTRY POINTS ENT POPEN,PREAD,PWRIT,PCONT ENT GET,FINIS,ACEPT,REJCT SPC 2 * * DEFINE A AND B REG A EQU 0 B EQU 1 SKP * * HERE ON POPEN CALL * CALLING SEQUENCE * CALL POPEN(PCB,ERROR,NAME,LU,TAG) * LU IS CURRENTLY IGNORED... * POPEN NOP JSB PMOV GO MOVE PRAMS OCT 1 DEFINE FOR POPEN SPC 1 * * HERE ON PREAD * CALLING SEQUENCE * CALL PREAD(PCB,ERROR,BUFFER,BUF LEN,TAG) * PREAD NOP JSB PMOV GO MOVE THE PRAMS INTO THE PARMB OCT 2 DEFINE FOR READ SPC 2 * * HERE FOR PWRIT * CALLING SEQUENCE * SAME AS PREAD * NJPWRIT NOP JSB PMOV OCT 3 DEFINE AS PWRIT SPC 2 * * HERE FOR PCLOSE * CALLING SEQUENCE * CALL PCLOS(PCB,ERROR,TAG) * PCONT NOP JSB PMOV OCT 4 DEFINE FOR PCLOS SKP * * HERE IS WHERE ALL THE ROUTINES COME TO HAVE THEIR * PRAMS MOVED INTO THE PARMB * CALLING SEQUENCE * NOP RETURN ADDRESS (CALLING ROUTINE) * JSB PMOV * OCT XX FUNCTION CODE * PMOV NOP LDA PRMBA GET ADDRESS OF PRMB IN FRAIN JSB INDCK CHASE DOWN INDIRECTS STA PRMBA SO WE DON'T HAVE TO AGAIN STA CPRMA SAVE IN COUNTER ADA D33 STA TITAG SAVE ADDR OF 1ST TIME-TAG INA STA TITAG+1 SAVE ADDR OF 2ND TIME-TAG LDA .4 GET STREAM TYPE JSB STWRD SAVE STREAM TYPE CLA JSB STWRD SET SUB STREAM TO ZERO LDA PMOV GET ADDRESS ADA M2 OF ROUTINE THAT CALLED US LDA A,I GET RETURN ADDRESS STA RTRN JMP ENTR GO GET CALLING PRAMS * * DEFINE LOCATIONS FOR PRAMS PASSED BY CALL * PRM1 NOP PRM2 NOP PRM3 NOP PRM4 NOP PRM5 NOP RTRN NOP ENTR JSB .ENTR GET PRAMS DEF PRM1 LDA PMOV,I GET FUNCTION CODE JSB STWRD SAVE FUNCTION CODE CPA .1 IS IT A POPEN? JSB POPN YES, MOVE NAME TO PCB CLA JSB STWRD MOVE ZERO INTO RESERVED WORDS JSB STWRD * * MOVE PCB TO PARMB LDA PRM1 STA TEMP1 ADDR OF PCB LDA M3 STA TEMP2 COUNTER MPCB1 LDA TEMP1,I GET WORD FROM PCB JSB STWRD SAVE IN PARMB ISZ TEMP1 BUMP ADDR ISZ TEMP2 & COUNTER JMP MPCB1 ITERATE * LDA PMOV,I GET FUNCTION CODE ADA BRTBL GO TO CORRECT ROUTINE JMP A,I AWAY WE GO SPC 1 BRTBL DEF *,I DEF POPN1 DEF PRED DEF PWRT DEF PCLS SPC 2 * * HERE ON CLOSE COMMAND * PCLS LDA PRM3 GET ADDRESS OF TAG FIELD STA PRM5 SAVE TAG FIELD ADDRESS FOR REPLY POPN1 LDA PRM5 GET ADDR OF TAG FIELD LDB CPRMA GET DESTINATION ADDRESS OF TAG MOVE JSB MTAGO MOVE TAG FIELD JMP WREQ NOW WRITE REQUEST SKP * * HERE FOR PREAD * PRED CLB,INB,RSS PREAD * * HERE FOR PWRIT * PWRT LDB .2 PWRIT STB REQDA SAVE DATA DIRECTION LDA PRM5 GET ADDRESS OF TAG FIELD LDB CPRMA GET ADD OF DESTINATION OF TAG JSB MTAGO GO MOVE TAG TO PARMB LDB M71 SET FOR LENGTH ERROR LDA PRM4,I GET LENGTH OF DATA BUFFER SZA CHECK FOR ZERO OR SSA NEGATIVE JMP ERR HE BLEW IT LDB PRMBA GET TO DATA LENGTH WORD ADB .18 STA B,I SAVE LENGTH LDA REQDA GET DATA DIRECTION FLAG CPA .2 IS IT A WRITE COMMAND? JMP WREQ YES...DON'T CHECK BOUNDS LDA PRM3 GET LOWER LIMIT LDB PRM3 ADB PRM4,I GET UPPER LIMIT+1 ADB M2 GET UPPER LIMIT JSB DIMCK CHECK LIMIT * * HERE WE SEND REQUEST * WREQ CLA,CCE SET FOR SEND REQ. ONLY JSB %TAM GO DO IT DEF PRMB DEF PRMBA SKP * * AT THIS POINT WE HAVE SENT THE REQUEST * AND HAVE RECEIVED THE REPLY * CPA B1 ALL OK? JMP CMPL1 YES DVERR LDB M51 SET FOR DRIVER ERROR AND B377 CPA B100 PARITY ERROR? LDB M52 YES * ERROR RETURN ERR STB PRM2,I SET IN ERROR CODE JMP RTRN,I AND RETURN * CMPL1 LDB PRMBA GET ADDRESS OF REPLY BUFFER ADB .3 GET TO STATUS WORD LDB B,I GET ERROR WORD STB PRM2,I SAVE ERROR STATUS SSB ANY ERRORS? JMP RTRN,I YES...DON'T PROCESS FURTHER LDB PRMBA GET ADDRESS OF REPLY ADB .2 GET TO TYPE CODE LDA B,I GET TYPE CODE RAR,RAR MOVE IN ERROR CODE AND .1 MASK ALL BUT REJECT CODE STA PRM2,I SAVE STATUS LDA B,I GET TYPE CODE AGAIN AND B17 MASK OFF ALL BUT TYPE CODE ADA CMPLB GET TO COMPLETION ROUTINE JMP A,I GO TO ROUTINE SPC 2 CMPLB DEF *,I DEF COPN CODE=1 OPEN ACCEPT DEF RDAT CODE=2 READ ACCEPT DEF WDAT CODE=3 CWRIT ACCEPT DEF CCLOS CODE=4 CONTROL ACCEPT DEF COPN CODE=5 OPEN REJECT DEF TAGIT CODE=6 READ REJECT DEF TAGIT CODE=7 WRITE REJECT DEF CCLOS CODE=8 CONTROL REJECT SPC 3 * * HERE FOR POST PROCESSING OF OPEN * COPN LDB PRMBA GET ADDRESS OF REPLY BUFFER ADB .5 GET TO 3 WORD PCB STB TEMP1 SAVE SOURCE ADDRESS LDB M3 GET COUNT STB TEMP2 SAVE IN DOWN COUNTER LDB PRM1 GET DESTINATION ADDRESS COPN1 LDA TEMP1,I GET SOURCE WORD STA B,I SAVE WORD INB GET NEXT DESTINATION ADDRESS ISZ TEMP1 GET NEXT SOURCE ADDRESS ISZ TEMP2 DONE? JMP COPN1 NO...CONTINUE JMP TAGIT MOVE TAG FIELD * * ACCEPTED PREAD POST-PROCESSING * RDAT CLA,INA,RSS A=1 FOR READ DATA * * ACCEPTED PWRIT POST-PROCESSING * WDAT LDA .2 A=2 FOR WRITE DATA STA TEMP2 LDA B300 SEND/RCV DATA ONLY IOR CLU + LU STA CNWD SET DRIVER CONTROL WORD * JSB EXEC CALL DRIVER TO XFER DATA DEF *+7 DEF TEMP2 DEF CNWD DEF PRM3,I DATA BUFFER DEF PRM4,I DATA LENGTH TITAG NOP NOP * SLA,RSS ANY DRIVER ERRORS? JMP DVERR YES * * * MOVE TAG FIELD TO USER AREA AND EXIT * TAGIT LDB PRM5 GET ADDRESS WHERE TO PUT TAG FIELD CCLS1 LDA PRMBA GET ADDRESS OF REPLY BUFFER ADA .8 GET TO TAG FIELD JSB MTAG MOVE TAG BACK TO USER AREA JMP RTRN,I GO BACK TO USER SPC 2 * * HERE FOR POST PROCESSING OF CLOSE * CCLOS LDB PRM3 GET ADDRESS OF TAG FIELD JMP CCLS1 GO TO COMPLETION SPC 4 PRMBA DEF PRMB D33 DEC 33 D35 DEC 35 CPRMA NOP REQDA NOP TEMP1 NOP TEMP2 NOP B1 OCT 1 B17 OCT 17 .5 DEC 5 .18 DEC 18 M46 DEC -46 M47 DEC -47 M71 DEC -71 M51 DEC -51 M52 DEC -52 B100 OCT 100 B300 OCT 300 SPACE ASC 1, DUMMY NOP SKP * * SUBROUTINE TO MOVE NAME TO PCB AREA * POPN NOP LDA PRM3,I GET PROGRAM NAME LENGTH AND B377 MASK OFF ASC FLAG LDB A MOVE INOT B REG CMB,INB NEGATE CHAR COUNT STB PPNS3 SAVE FOR MOVE LDB A GET POSITIVE LENGTH AGAIN ADA M6 CAN NOT BE OVER 5 CHARS LONG ADB M1 MUST BE AT LEAST 1 CHAR LONG SSB,RSS SSA,RSS JMP NMERR NAME NOT IN RANGE...ERROR LDA PRM1 GET PCB ADDRESS LDB A GET UPPER LIMIT ADB .2 JSB DIMCK CHECK FOR RANGE LDA PRM1 GET PCB ADDRESS AGAIN STA PPNS1 SAVE FOR LOOP LDA SPACE GET TWO SPACE CHARACTERS LDB M3 GET LENGTH OF PCB PPNSA STA PPNS1,I SAVE SPACE WORD ISZ PPNS1 GET TO NEXT LOCATION INB,SZB DONE? JMP PPNSA NO LDA PRM1 GET PCB ADDRESS AGAIN CLE,ELA CONVERT TO BYTE ADDRESS STA PPNS1 SAVE FOR MOVE ISZ PRM3 GET PAST LENGTH WORD LDA PRM3 GET ADDRESS OF NAME CLE,ELA CONVERT TO BYTE ADDRESS STA PRM3 SAVE FOR MOVE PPNSB LDB PRM3 GET BYTE ADDRESS SOURCE JSB ABYTE GET CHARACTER LDB PPNS1 GET BYTE ADDRESS DESTINATION JSB SBYTE SAVE BYTE ISZ PPNS1 INC SOURCE BYTE ADDRESS ISZ PRM3 INC DESTINATION BYTE ADDRESS ISZ PPNS3 ' DONE? JMP PPNSB NO JMP POPN,I YES...RETURN TO MAIN LINE CODE SPC 1 PPNS3 NOP PPNS1 NOP SPC 2 * * HERE IF NAME ERROR OCCURED * NMERR LDB M71 NAME ERROR CODE JMP ERR GO PROCESS ERROR SKP * * SLAVE PROGRAM TO PROGRAM READY CALL * CALLING SEQUENCE * CALL GET(ICLASS,IERR,IFUN,ITAG,IL) * RCLSA NOP RERA NOP RFUNA NOP RTAGA NOP RILA NOP GET NOP JSB .ENTR DEF RCLSA LDA MSTFL GET LENGTH OF MASTER REQUEST SZA,RSS IS THERE ONE? JMP RDYER NO...ERROR LDA MSTBA GET BUFFER ADDRESS OF PARMB JSB INDCK DIRECT IT STA MSTBA ADA .5 SEE IF FIRST TIME CLB CPB 0,I IF ZERO...ALREADY ISSUED A READY JMP RDYER ERROR STB A,I CLEAR WORD ADA .3 GET TO TAG FIELD ADDRESS LDB RTAGA SET TO STORE IT JSB MTAG MOVE TAG FIELD LDB MSTBA GET PARMB ADDRESS AGAIN ADB .2 GET TO FUNCTION CODE LDA B,I GET FUNCTION CODE AND .3 MASK OFF ALL BUT FUNCTION CODE STA RFUNA,I SAVE FUNCTION CODE ADB .16 GET TO LENGTH WORD LDA B,I GET LENGTH WORD STA RILA,I SAVE LENGTH WORD CLB,RSS SET FOR ALL OK ERROR RETURN RDYER LDB M46 SET FOR IMPROPER SEQUENCE STB RERA,I SAVE ERROR STATUS JMP GET,I RETURN SPC 1 .16 DEC 16 SKP * * PROGRAM TO PROGRAM ACCEPT CALL * CALLING SEQUENCE * CALL ACEPT(ITAG,IERR,IBUF) * ATAGA NOP AERRA NOP ABUFA NOP ACEPT NOP JSB .ENTR DEF ATAGA LDA AERRA STA PRM2 ADDR OF ERROR PARAMETER LDA ACEPT STA RTRN RETURN ADDR LDA MSTBA CHECK IF READY ISSUED ADA .5 GET TO FLAG WORD LDA A,I GET FLAG WORD SZA READY ISSUED? JMP JERR NO...SEQUENCE ERROR ʌ LDA ATAGA GET ADDRESS OF TAG SOURCE LDB MSTBA GET ADDRESS OF DESTINATION ADB .8 GET TO TAG AREA JSB MTAGO LDB MSTBA GET BUFFER ADDRESS AGAIN ADB .2 GET TO FUNCTION CODE LDB 1,I GET FUNCTION CODE CLA RBR,SLB TEST FOR PREAD OR PWRIT RSS IT IS, SKIP JMP ARPLY POPEN OR PCONT, DO REQ. ONLY LDA MSTBA GET PRMB BUFFER ADDRESS ADA .18 ADDR OF LENGTH WORD STA BFLEN SAVE LENGTH ADDR LDA B100 CODE FOR SEND REQ/ READ DATA SSB,RSS SKIP IF PWRIT ALS ELSE CODE FOR SEND REQ/ SEND DATA ARPLY LDB BIT14 SET FOR NO ERRORS * * A REG HAS MODE FOR DRIVER OPERATION * B REG ORED INTO REPLY FUNCTION CODE WORD * SRPLY IOR CLU A HAS MODE + LU STA CNWD DRIVER CONTROL WORD LDA RPLBT BITS 7 AND 2 IOR B OR IN ACCEPT REJECT BITS LDB MSTBA GET PARMB ADDRESS ADB .2 GET TO FUNCTION CODE WORD IOR B,I OR IN REPLY RESPONSE STA B,I SAVE REPLY INB GET TO ERROR STATUS CLA AND CLEAR IT OUT STA B,I ADB .2 GET TO FIRST WORD OF NAME STB B,I SET FIRST WORD NON ZERO LDA MSTB GET STREAM TYPE IOR B1411 SET IN REPLY BIT-FRIENDLY BIT STA MSTB SAVE STREAM WORD LDA M10 STA RTRY SET RETRY COUNTER * CALL DRIVER TO SEND REPLY SNDR JSB EXEC SEND REPLY DEF *+7 DEF .2 DEF CNWD MSTBA DEF MSTB DEF D35 LENGTH OF REQUEST DEF ABUFA ADDR OF DATA BUFFER BFLEN DEF DUMMY LENGTH OF DATA * STA LSTAT SAVE LINE STATUS SLA,RAR JMP GOOD NO ERRORS SWP AND B40 CLE,ERB SEZ,SZA,RSS JMP FAIL DRIVER ERROR SEZ,RSS JMP BZWT REMOTE IS BUSY SZA SIMULTANEOUS0 REQUEST? JMP SNDR YES, TRY AGAIN * BZWT ISZ RTRY BUMP RETRY COUNTER JMP *+3 OK TO RETRY * FAIL LDA LSTAT OPERATION FAILED JMP DVERR * LDA DLAY INA,SZA DELAY ABOUT 50 MSECS JMP *-1 JMP SNDR RETRY * GOOD RAR,RAR RIGHT JUSTIFY "STOP RCVD" BIT RAR,SLA JMP RCSTP STOP RECEIVED, RETURN -47 CLB CLEAR OUT LENGTH WORD STB MSTFL INCASE ANOTHER READY ISSUED STB PRM2,I SAVE GOOD ERROR STATUS JMP RTRN,I RETURN * RCSTP LDB M47 RETURN ERROR CODE JMP ERR SPC 1 M10 DEC -10 RTRY NOP LSTAT NOP DLAY DEC -12500 B40 OCT 40 BIT14 OCT 40000 B1411 OCT 44000 RPLBT OCT 204 CNWD NOP SKP * * PROGRAM TO PROGRAM REJECT CALL * CALLING SEQUENCE * CALL REJCT(ITAG,IERR) * JTAGA NOP JERRA NOP REJCT NOP JSB .ENTR DEF JTAGA LDA JERRA STA PRM2 ADDR OF ERROR PARAMETER LDA REJCT STA RTRN RETURN ADDR LDB MSTBA GET PARMB ADDRESS ADB .5 GET TO FLAG WORD LDA B,I IS FLAG WORD SET? SZA JMP JERR NO...ERROR...NO READY CALL LDB MSTBA GET DESTINATION BUFFER ADDRESS ADB .8 LDA JTAGA GET SOURCE ADDRESS JSB MTAGO MOVE TAG FOR REPLY CLA SET FOR REQUEST ONLY LDB BIT15 GET REJECT BIT JMP SRPLY GO SEND REPLY & EXIT * * SEQUENCE ERROR OCCURRED JERR LDB M46 -46= SEQUENCE ERROR JMP ERR RETURN WITH ERROR STATUS SPC 1 BIT15 OCT 100000 SKP * * SUBROUTINE TO KEEP THE SYSTEM COMPATABLE * FINIS IS USED ONLY AT CENTRAL CURRENTLY * CALLING SEQUENCE * CALL FINIS(ANY THING) * FINIS NOP ISZ FINIS GET TO RETURN ADDRESS JMP FINIS,I AND RETURN SPC 5 * * SUBROUTINE TO STORE A WORD IN TO THE PARMB * CALLING SEQUENCE P640* JSB STWRD * A REG CONTAINS THE WORD * CPRMA CONTAINS ADDRESS WHERE TO STORE THE WORD * CPRMA IS INCREMENTED AFTER WORD IS STORED * STWRD NOP STA CPRMA,I SAVE WORD ISZ CPRMA GET TO NEXT WORD JMP STWRD,I RETURN SKP * * SUBROUTINE TO MOVE TAG FIELD * CALLING SEQUENCE * JSB MTAG * A REG CONTAINS ADD OF SOURCE TAG FIELD * B REG CONTAINS ADD OF DESTINATION TAG FIELD * MTAG NOP STA MTAGA SAVE SOURCE ADDRESS STB MTAGB SAVE DESTINATION ADDRESS LDA B GET ENDING ADDRESS ADB .8 JSB DIMCK GO CHECK LDA MTAGA GET SOURCE ADDRESS LDB .10 GET LENGTH JSB %MOVE MOVE THE BUFFER MTAGB NOP JMP MTAG,I AND RETURN SPC 2 MTAGA NOP SPC 2 * * SUBROUTINE TO MOVE TAG TO PCB * MTAGO NOP ISZ DIMFG SET FOR SPECIAL JSB MTAG JMP MTAGO,I AND RETURN END EQU * END 6  , 91705-18101 1553 S 0122 DS1/B SCE/5 MODULE: @QUE              H0101 SASMB,R,L,C HED @QUE - PARMB SETUP & QUEING SUBR.*(C) HEWLETT-PACKARD CO. 1976* NAM @QUE,6 91705-16101 REV.A 751230 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * * @QUE * SOURCE: 91705-18101 REV.A * BINARY: 91705-16101 REV.A * JIM HARTSELL * AUG. 14, 1974 * MODIFIED BY: C.C.H. (12-30-75]) [DERIVED FROM: 91705-18001 REV.B] * * RE-ENTRANT SUBROUTINE FOR RTE-C SATELLITE * RESIDENT LIBRARY. * * CALLING SEQUENCE: (CALLED BY @REFA) * * JSB @QUE * OCT FCN CODE * OCT USER CALL ADDRESS * DEF PARMB BUFFER * DEF REPLY BUFFER * DEF DATA ADDR (RETURNED) * DEF DATA LENGTH (RETURNED) * DEF PARMB LENGTH (RETURNED) * ERROR RETURN (REQUEST REJECTED) * NORMAL RETURN (REQUEST ACCEPTED) * * FOR ERROR RETURN: FLAG WORD = "REPLY RECEIVED" * (A) = -1 QUEUE IS FULL (RFA BUSY), (B)=0. * (A) = 0 ERROR CODE IN REPLY BUFFER AND * (B) = ASSIGNED QUEUE ENTRY ADDR. * * FOR NORMAL RETURN: FLAG WORD = "PARMB READY" * (B) = ADDR OF ASSIGNED QUEUE ENTRY. * ENT @QUE,%DORM,%ACT,%LU,%CPFL,%TIME * EXT $LIBR,$LIBX,@DEQ * A EQU 0 B EQU 1 * **************************************** * * BEGIN TEMPORARY DATA BLOCK. * TDB NOP DEC 19 LENGTH OF BLOCK. RETRN NOP RETURN ADDR OF CALLER. TEMP1 NOP TEMPORARY DATA. TEMP2 NOP TEMP3 NOP QENT NOP ADDR OF CURRENT QUEUE ENTRY. P.PTR NOP USER CALL PARAM POINTER. B.PTR NOP PARMB RELATIVE BYTE POINTER. U.PTR NOP PTR TO CALLER RETURN PARAMS. STREM NOP STREAM TYPE. TTAGA NOP TIME-TAG ADDRESS. * PASSED PARAMETERS: FCN NOP FUNCTION CODE. CALL NOP ADDR OF USER CALL. PARMB NOP ADDR OF PARMB AREA. REPLY NOP ADDR OF REPLY BUFFER AREA. DADR NOP DATA ADDRESS. DLEN NOP DATA LENGTH. PLEN NOP PARMB LENGTH. * * END OF TEMPORARY DATA BLOCK. * **************************************** * * @QUE NOP ENTRY POINT. * JSB $LIBR SAVE TEMPORARY DATA. DEF TDB * JSB $LIBR DISABLE INTERRUPT SYSTEM. NOP * LDB PAV FETCH PARAMETERS. STB TEMP1 LDB MD7 LOOP LDA @QUE,I STA TEMP1,I ISZ @QUE ISZ TEMP1 INB,SZB JMP LOOP LDA PARMB GET PARAMETER BUFFER ADDRESS. ADA D33 FORM TIME-TAG-ENTRY ADDRESS. STA TTAGA SAVE THE ADDRESS IN THE TDB. * LDA @QUE STA RETRN SET RETURN ADDRESS. * * CLEAN OUT DEAD QUEUE ENTRIES. * LDA %ACT HEAD OF ACTIVE LIST. SCAN LDA A,I ADDR OF NEXT QUEUE ENTRY. SZA,RSS JMP LOCAT QUIT IF DONE. * STA TEMPX SAVE ADDR OF QUEUE ENTRY. ADA B2 GET IT'S ID SEG ADDR. LDB A,I CPB XEQT,I SAME AS CURRENT PROG? JMP DEAD YES. GO KILL THE ENTRY. * ADB D15 NO. GET PROGRAM STATUS. STB TEMP2 LDA B,I AND B17 SZA JMP ALIVE PROGRAM IS SCHEDULED. * LDA TEMP2 PROG DORMANT. CHECK ADA B2 IF IN TIME LIST. LDA A,I ALF,SLA JMP ALIVE IN TIME LIST. * DEAD JSB $LIBX INTERRUPTS BACK ON. DEF *+1 DEF *+1 * JSB @DEQ PROG DEAD. KILL IT'S ENTRY. TEMPX NOP QUEUE ENTRY ADDRESS. B1 OCT 1 * NOP JSB $LIBR INTERRUPTS BACK OFF. NOP * ALIVE LDA TEMPX GO TO NEXT ENTRY. JMP SCAN * * ***** QUEUE THE NEW REQUEST ***** * REMOVE THE LAST ENTRY FROM THE DORMANT LIST AND * LINK IT TO THE END OF THE ACTIVE LIST IN THE * PARMB QUEUE. EXIT FROM THE PRIVILEDGED CODE WITH * (A) = 0 IF NEW ENTRY WAS ADDED, OR * (A) = -1 IF ACTIVE LIST FULL (RFA BUSY). * LOCAT CLB (INTERRUPTS STILL OFF) STB QENT SET FOR "NONE ASSIGNED". CCA QUEUE IS FULL IF DORMANT LIST LDB .DORM IS EMPTY. SZB,RSS JMP Q1 REJECT WITH A = -1. * LDA %ACT FIND LAST ENTRY IN CLB ACTIVE LIST. JSB FIND * STB TEMP1 SAVE ADDR OF LAST ACTIVE ENTRY. * LDA %DORM FIND LAST ENTRY IN JSB FIND DORMANT LIST. * STB TEMP1,I LINK INTO ACTIVE LIST. STB QENT SAVE ADDRESS IN TDB. CLB STB A,I DELETE ENTRY FROM DORMANT LIST. LDA QENT CLEAR FLAG WORD IN NEW ENTRY. INA STB A,I * CLA EXIT WITH (A) = 0 Q1 JSB $LIBX ENABLE INTERRUPT SYSTEM. DEF *+1 DEF *+1 * SSA JMP REJCT REJECT IF QUEUE IS FULL: (A)=-1. * * ENTER PARAMETERS INTO QUEUE ENTRY. * LDA QENT ENTRY ADDRESS (WORD 1) ADA B2 STA TEMP1 ADDR OF WORD 3. * LDB XEQT,I MOVE ID SEGMENT ADDR. STB TEMP1,I ISZ TEMP1 * ADB B6 MOVE PRIORITY. LDA B,I STA TEMP1,I ISZ TEMP1 * ADB B6 MOVE PROGRAM NAME. STB TEMP2 LDB MD3 JSB MOVE * LDA PAV MOVE FUNCTION CODE. LDB A,I STB TEMP1,I ISZ TEMP1 * INA MOVE ADDR OF USER CALL. LDB A,I STB TEMP1,I ISZ TEMP1 * ADA B2 MOVE REPLY BUFR ADDR. LDB A,I STB TEMP1,I ISZ TEMP1 * DLD %TIME GET CURRENT TIME (RTE-II STYLE) DST TEMP1,I INSERT INTO QUEUBE ENTRY, DST TTAGA,I AND INTO PARAMETER BUFFER. * * INITIALIZE PARMB: STREAM, SUB-STREAM, FUNCTION CODE. * LDA FCN DETERMINE STREAM TYPE. CLB CPA D9 JMP SST GETLU STREAM = 0. INB CPA D10 JMP SST DLIST STREAM = 1. ADB B2 SZA,RSS JMP SST PROGL STREAM = 3. INB ADA MD5 SSA JMP SST PTOPC STREAM = 4. INB CPA D158 JMP SST DEXEC STREAM = 5. INB ADA MD158 SSA JMP SST RFA STREAM = 6. INB OPCMD STREAM = 7. SST STB STREM LDA BIT11 IOR 1 STA PARMB,I STORE STREAM TYPE. ISZ PARMB * LDA QENT STA PARMB,I SUB-STREAM (QUEUE ENTRY ADDR). ISZ PARMB * LDA FCN STA PARMB,I FUNCTION CODE. ISZ PARMB * * INITIALIZE DYNAMIC POINTERS. * LDA CALL ADDR OF USER CALL RETURN ADDR. INA STA P.PTR POINTER TO USER CALL PARAMETERS. * LDA B2 STA B.PTR PARMB BYTE POINTER. * LDA UPARM ADDR OF CALLER RETURN PARAMS. STA U.PTR * LDA STREM SZA,RSS CHECK FOR GETLU. JMP PTP2 * CPA B4 CHECK FOR PTOPC. JMP .PTOP * CPA B1 CHECK FOR DLIST. JMP .DLST * CPA B3 CHECK FOR DOWN-LOAD. JMP .DNLD * CPA B7 CHECK FOR REMOTE CONTROL. JMP .RMCN * * STORE SPARE WORD, DATA FLAG = 0. * LDA B202L STA PARMB,I 202*000 ISZ PARMB ALF,ALF STA PARMB,I 000*202 ISZ PARMB CLA STA PARMB,I 000*000 * * PERFORM COMMON PARMB ENTRY STORAGE ACCORDING TO * CLASS OF CALL (RFA, REXEC). * LDA STREM CPA B6 JMP .RFA * .EXEC JSB GET.P FETCH DESTINATION CODE. AND M377 ALF,ALF POSITION. LDB PARMB ADB MD1 IOR B,I t STA B,I STORE IN PARMB. * LDA B202 STORE REQ CODE IN PARMB, JSB STBYT WITH SIGN BIT CLEARED. JSB GET.P ELA,CLE,ERA JSB STWRD * CPA B1 JMP RC1 READ. CPA B2 JMP RC1 WRITE. CPA B3 JMP RC3 I/O CONTROL. CPA D10 JMP RC10 SCHEDULE. CPA D11 JMP RC11 TIME. CPA D12 JMP RC12 EXECUTION TIME. CPA D13 JMP RC13 I/O STATUS. * LDB REPLY ILLEGAL RCODE. ADB B2 LDA AS.RQ STA B,I INB LDA AS.RQ+1 STA B,I JMP REJCT * .RFA LDB P.PTR SET UP POINTER TO CR PARAMETER ADB B4 FOR DCRET,DPURG,DOPEN,DNAME. LDA FCN CPA D151 MOVE DESTINATION PARAM AND JMP .RFA0 FILE NAME TO DCB AREA. INB CPA D158 JMP .RFA0 CPA D152 JMP .RFA0 INB CPA D150 JMP .RFA0 JMP .RFA1 * .RFA0 STB TEMP3 POINTER TO ICR PARAM. JSB MVNAM LDA TEMP3 CHECK IF ICR SPECIFIED. CMA,INA ADA CALL,I ADA MD1 SSA JMP .RFA1 NO. CONTINUE. * LDB TEMP3,I YES. SAVE DESTINATION IN DCB RSS LDB B,I CHASE INDIRECTS. RBL,CLE,SLB,ERB JMP *-2 INB AND CHECK IT. LDB B,I DEST. PARAM. STB TEMP1,I STORE IN DCB (TEMP1 SET BY MVNAM) LDA MD18 SZB JMP MSSNG+1 ILLEGAL. ERROR -18. * .RFA1 LDA FCN DSTAT BYPASS. CPA D162 JMP .RFA2 * JSB STRNG STORE FILE NAME IN PARMB. ISZ P.PTR SKIP OVER IERR PARAM. * .RFA2 LDA FCN ADA MD150 ADA RTBL LDA A,I JMP A,I * RTBL DEF *+1 GO TO UNIQUE PROCESSING FOR DEF .CRET THE PARTICULAR RFA CALLS. DEF .PURG DEF .OPEN DEF .WRIT DEF .READ DEF .POSN DEF .WIND  DEF .CLOS DEF .NAME DEF .CONT DEF .LOCF DEF .APOS DEF .STAT * * UNIQUE PROCESSING FOR INDIVIDUAL REMOTE EXEC CALLS. * RC1 JSB INTGR STORE CONTROL WORD. JSB GET.A JSB RPARM STORE BUFFER ADDR. JSB STLEN STORE BUFFER LENGTH. JMP OPT2 * RC3 JSB INTGR STORE CONTROL WORD. JMP OPT1 * RC10 JSB STRNG STORE PROGRAM NAME. JSB OPTN STORE OPTIONAL PARAMS. JSB OPTN JMP OPT3 * RC11 JMP READY * RC12 JSB STRNG STORE PROG NAME. JSB INTGR IRESL JSB INTGR MTPLE JSB INTGR IOFST: CHECK SIGN. SSA JMP READY INITIAL OFFSET VERSION. JSB INTGR MINS JSB INTGR ISECS JSB INTGR MSECS JMP READY ABSOLUTE START TIME VERSION. * RC13 JSB INTGR STORE CONTROL WORD. JMP READY * * UNIQUE PROCESSING FOR INDIVIDUAL RFA CALLS. * .CRET ISZ P.PTR SKIP OVER FILE NAME. LDA B204 STORE 2-WORD SIZE ARRAY. JSB STBYT JSB GET.A STA TEMP3 ISZ TEMP3 LDA A,I JSB STWRD LDA TEMP3,I JSB STWRD JSB INTGR STORE FILE TYPE. JMP OPT2 * .PURG ISZ P.PTR SKIP OVER FILE NAME. JMP OPT2 * .OPEN ISZ P.PTR SKIP OVER FILE NAME. OPT3 JSB OPTN OPT2 JSB OPTN STORE OPTIONAL PARAMS. OPT1 JSB OPTN JMP READY PARMB COMPLETE. * .CLOS EQU OPT1 * .READ JSB GET.A JSB RPARM RETURN DATA BUFR ADDRESS. JSB STLEN STORE LENGTH. JMP OPT2 * .WRIT EQU .READ * .POSN JSB INTGR STORE RECORD NUMBER. JMP OPT1 * .WIND JMP READY * .NAME ISZ P.PTR JSB STRNG STORE NEW NAME. JMP OPT2 * .CONT JSB INTGR STORE CONTROL WORD. JMP OPT1 * .LOCF JMP READY * .APOS JSB INTGR STORE RECORD NUMBER. JMP OPT2 * .STAT JSB GET.A JSB RPARM RETURN DATA BUFR ADDRESS. LDA D124 STORE LENGTH STA PARMB,I IN DATA-FLAG AND JSB RPARM GIVE IT TO CALLER. JMP READY * * PERFORM PARMB ENTRY STORAGE FOR PROGRAM TO PROGRAM * COMMUNICATION. * .PTOP CLA CLEAR SPARE WORDS. STA PARMB,I ISZ PARMB STA PARMB,I ISZ PARMB LDA FCN FOR POPEN, MOVE PROG NAME CPA B1 TO PCB AREA. JSB MVNAM * LDA MD3 JSB NWRDS MOVE PCB TO PARMB. * ISZ P.PTR SKIP OVER IERR PARAM. LDB P.PTR MOVE P.PTR TO ITAG PARAM. LDA FCN CPA B4 JMP PTP1 ADB B2 STB P.PTR * PTP1 LDA MD10 MOVE ITAG TO PARMB. JSB NWRDS * LDA FCN IF READ/WRITE, PROCESS CPA B1 BUFFER ADDRESS, LENGTH. JMP PTP2 CPA B4 JMP PTP2 * LDA P.PTR BACK UP TO IBUF PARAM. ADA MD3 STA P.PTR JSB GET.A RETURN DATA BUFFER ADDRESS. JSB RPARM JSB GET.P GET BUFFER LENGTH. JSB RPARM RETURN IT TO CALLER. STA PARMB,I STORE IN PARMB. * PTP2 LDA UPARM POINT TO PLEN PARAM. ADA B2 STA U.PTR * PTP3 LDA D35 RETURN PARMB SIZE. JMP RDY GO DISPATCH. * * PERFORM PARMB ENTRY STORAGE FOR SPECIAL DLIST CALL * (USED ONLY BY REMAC). * .DLST ISZ PARMB SKIP OVER SPARE WORD. JSB GET.A RETURN DATA BUFFER ADDRESS. JSB RPARM JSB GET.P GET BUFFER LENGTH. JSB RPARM RETURN IT TO CALLER. STA PARMB,I STORE IN PARMB. * LDA P.PTR IF NOT NEW REQUEST, ADA B4 LEAVE REST OF PARMB ALONE. LDA A,I LDA A,I SZA JMP PTP3 * ISZ PARMB * LDA MD3 STORE FILTER. JSB NWRDS JSB MVWRD SECURITY. JSB MVWRD LABEL. JSB MVWRD TYPE. JSB MVWRD NEW REQ CODE. * JMP PTP3 * * PERFORM PARMB ENTRY STORAGE FOR SPECIAL DOWN-LINK * LOAD CALL (USED ONLY BY APLDR). * .DNLD LDA PARMB BACK UP PARMB POINTER. ADA MD1 STA PARMB JSB MVWRD STORE STATUS WORD. SZA QUIT OF NOT NEW REQUEST. JMP PTP2 ISZ PARMB SKIP SPARE WORDS. ISZ PARMB ISZ P.PTR ISZ P.PTR LDA MD3 JSB NWRDS MOVE FILE NAME. * CLA CLEAR LABEL, SECURITY. LDB MD4 .DNL STA PARMB,I ISZ PARMB INB,SZB JMP .DNL * JMP PTP2 * * PERFORM PARMB ENTRY STORAGE FOR SPECIAL REMOTE * CONTROL OF CENTRAL (USED ONLY BY REMAC). * .RMCN ISZ PARMB SKIP OVER SPARE WORD. CLA CLEAR REQ/REPLY SWITCH. STA PARMB,I ISZ PARMB JSB MVWRD STORE LEN PARAM. LDA MD19 JSB NWRDS MOVE ASCII COMMAND. JMP PTP2 * * PARMB AND QUEUE ENTRY COMPLETE AND * READY FOR DISPATCHING (WELL...ALMOST). * READY CLA STORE TERMINATION BYTE. JSB STBYT * LDA UPARM POINT TO PLEN PARAM. ADA B2 STA U.PTR * LDA B.PTR COMPUTE PARMB SIZE. ADA MD1 CLE,ERA ADA B6 RDY JSB RPARM RETURN PARMB LENGTH. * LDB QENT INB ADDR OF FLAG WORD. LDA B1 STA B,I "PARMB READY" FLAG. * * EXIT TO CALLER VIA NORMAL RETURN. * LDB QENT ADDR OF ASSIGNED QUEUE ENTRY. JSB $LIBX RESTORE TEMPORARY DATA BLOCK DEF TDB AND RETURN TO CALLER. DEC 1 NORMAL RETURN. * * REQUEST REJECTED DUE TO PARAMETER ERRORS. * MSSNG LDA MD10 NOT ENOUGH OR ERROR IN PARAMS. CLE STORE CODE IN A-REG SLOT LDB STREM FOR RFA/DEXEC; IERR SLOT CPB B4 FOR PTOPC. CCE LDB REPLY ADB B2 SEZ INB STA B,I * * EXIT TO CALLER VIA ERROR RETURN. * REJCT LDB QENT (ZERO IF QUEUE FULL) SZB,RSS WAS A QUEUE ENTRY ASSIGNED? JMP REJ 66 NO. (A) = -1. INB YES, SET FLAG = "REPLY RECEIVED" LDA B3 STA B,I LDB QENT * REJ JSB $LIBX RESTORE TEMP DATA BLOCK. DEF TDB DEC 0 ERROR RETURN. HED @QUE - UTILITY SUBROUTINES. * * MOVE FILE/PROGRAM NAME TO DCB/PCB. * MVNAM NOP JSB GET.A GET DCB/PCB ADDR. STA TEMP1 ISZ P.PTR JSB PCHEK JMP MSSNG JSB GET.A GET FILE/PROG NAME ADDR. STA TEMP2 LDB MD3 MOVE THE NAME. JSB MOVE LDA P.PTR RESET PARAM POINTER. ADA MD3 STA P.PTR JMP MVNAM,I * * MOVE N WORDS. (B) = NEGATIVE WORD COUNT. * (TEMP1) = DESTINATION ADDR * (TEMP2) = SOURCE ADDR * MOVE NOP LDA TEMP2,I STA TEMP1,I ISZ TEMP1 ISZ TEMP2 INB,SZB JMP MOVE+1 JMP MOVE,I * * STORE N-WORD PARAMETER INTO PTOPC WORD-ORIENTED * PARMB (NO CONTROL BYTES). * NWRDS NOP (A)= NEG WORD COUNT. STA TEMP1 JSB PCHEK IS PARAM SPECIFIED? JMP MSSNG NO. JSB GET.A PARAMETER ADDRESS. NWD LDB A,I STB PARMB,I INA ISZ PARMB ISZ TEMP1 JMP NWD JMP NWRDS,I * * SUBROUTINE TO MOVE NEXT PARAMETER VALUE * INTO WORD-ORIENTED PARMB. * MVWRD NOP JSB PCHEK JMP MSSNG JSB GET.P STA PARMB,I ISZ PARMB JMP MVWRD,I * * STORE INTEGER PARAM FROM USER CALL INTO PARMB. * INTGR NOP JSB PCHEK IS THE PARAM SPECIFIED? JMP MSSNG NO. LDA B202 YES, STORE CONTROL BYTE. JSB STBYT JSB GET.P FETCH PARAM VALUE. JSB STWRD STORE IN PARMB. JMP INTGR,I (A) HAS THE VALUE. * * STORE OPTIONAL INTEGER PARAM (IF SPECIFIED) FROM * USER CALL INTO PARMB. * OPTN NOP JSB PCHEK IS PARAM SPECIFIED? JMP OPTN,I NO (LEAVE P.PTR ALONE). JSB INTGR YES, STORE IT. JMP OPTN,I (A) HAS THE VALUE. * * STORE 6 CHAR ASCII STRING FROM USER CALL * INTO PARMB. * STRNG NOP JSB PCHEK IS PARAM SPECIFIED? JMP MSSNG NO. * LDA B6 STORE CONTROL BYTE. JSB STBYT LDA MD3 STA TEMP2 WORD COUNTER. JSB GET.A STA TEMP3 STRING START ADDR. * STR LDA TEMP3,I FETCH ASCII CHARACTERS. ALF,ALF JSB STBYT STORE LEFT BYTE. LDA TEMP3,I JSB STBYT STORE RIGHT BYTE. * ISZ TEMP3 BUMP TO NEXT INPUT WORD. ISZ TEMP2 DONE? JMP STR NO. JMP STRNG,I YES, EXIT. * * STORE A-REGISTER CONTENTS INTO NEXT CALLER * RETURN PARAMETER. * RPARM NOP LDB U.PTR,I STA B,I ISZ U.PTR JMP RPARM,I * * STORE USER BUFFER LENGTH IN PARMB, DATA-FLAG, * AND QUEUE ENTRY. * STLEN NOP JSB INTGR STORE IN PARMB. * SZA,RSS JMP MSSNG SPECIFIED, BUT ZERO. SSA,RSS NEGATIVE? JMP STL NO. * CMA,INA YES, MAKE POSITIVE. INA ROUND UP. ERA,CLE,ELA RAR CONVERT TO WORD COUNT. * STL STA PARMB,I STORE IN DATA-FLAG. JSB RPARM PASS BACK TO CALLER. JMP STLEN,I EXIT. * * TEST WHETHER THE USER HAS SPECIFIED * A PARAMETER. * JSB PCHEK * ERROR RETURN (PARAM NOT GIVEN) * NORMAL RETURN * PCHEK NOP LDA P.PTR PARAM ADDR CMA,INA LDB CALL RETURN ADDR ADA B,I ADA MD1 SSA,RSS ISZ PCHEK JMP PCHEK,I * * GET VALUE OF NEXT PARAM IN USER CALL * GET.P NOP JSB GET.A FETCH PARAM ADDR. LDA A,I GET PARAM VALUE. JMP GET.P,I * * GET ADDRESS OF NEXT PARAM IN USER CALL * AND BUMP PARAM POINTER. * GET.A NOP LDA P.PTR,I GET PARAMETER ADDRESS. RSS RESOLVE LDA A,I INDIRECT RAL,CLE,SLA,ERA ADDRESSES. * JMP *-2 ISZ P.PTR BUMP PARAM POINTER. JMP GET.A,I * * STORE WORD (IN A-REG) IN PARMB. * STWRD NOP STA TEMP2 SAVE WORD. ALF,ALF JSB STBYT STORE LEFT BYTE. LDA TEMP2 JSB STBYT STORE RIGHT BYTE. LDA TEMP2 RESTORE WORD. JMP STWRD,I RETURN. * * STORE BYTE IN NEXT BYTE OF PARMB. * STBYT NOP (A) = BYTE RIGHT JUSTIFIED. AND M377 ISOLATE NEW BYTE. STA TEMP1 SAVE. LDB B.PTR FORM WORD ADDR OF PARMB. CLE,ERB (E) = LEFT/RIGHT FLAG. ADB PARMB * LDA B,I INSERT NEW BYTE INTO PARMB. SEZ,RSS ALF,ALF AND M377L IOR TEMP1 SEZ,RSS ALF,ALF STA B,I * ISZ B.PTR BUMP RELATIVE BYTE POINTER. JMP STBYT,I RETURN. * * SUBROUTINE TO FIND END OF LIST * IN THE PARMB REQUEST QUEUE. THIS ROUTINE * IS CALLED WITH THE INTERRUPT SYSTEM DISABLED. * ENTRY: (A) = ADDR OF PTR TO TOP OF LIST. * JSB FIND * RETURN: (A) = ADDR OF LAST-1 ENTRY * (B) = ADDR OF ENTRY * FIND NOP * F1 LDB A,I FETCH NEXT ENTRY. SZB,RSS DESIRED ENTRY? JMP F2 YES. STA TEMP2 NO, KEEP TRACK. STB A JMP F1 LOOP. * F2 LDB A ADDR OF LAST ENTRY. LDA TEMP2 ADDR OF LAST-1 ENTRY. JMP FIND,I EXIT. HED @QUE - STORAGE FOR CONSTANTS. XEQT OCT 1717 ID SEG ADDR OF CURRENT PROGRAM. PAV DEF FCN FWA OF PASSED PARAMS. UPARM DEF DADR B2 OCT 2 B3 OCT 3 B4 OCT 4 B6 OCT 6 B7 OCT 7 B17 OCT 17 D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D13 DEC 13 D15 DEC 15 D33 DEC 33 D35 DEC 35 D124 DEC 124 D150 DEC 150 D151 DEC 151 D152 DEC 152 D158 DEC 158 D162 DEC 162 MD1 DEC -1 MD3 DEC -3 MD4 DEC -4 MD5 DEC -5 MD7 DEC -7 MD10 DEC -10 MD18 DEC -18 MD19 DEC -19 MD15=HFB0 DEC -150 MD158 DEC -158 B202 OCT 202 B202L OCT 101000 B204 OCT 204 M377 OCT 377 M377L OCT 177400 BIT11 OCT 4000 AS.RQ ASC 2,RQ %LU NOP LU OF REMOTE COMPUTER. %CPFL NOP "CENTRAL-DOWN" FLAG. %TIME OCT 0,0 CURRENT TIME--RTE-II FORMAT. * * ************************* * * REQUEST QUEUE (INTERRUPTS OFF WHEN LIST PTRS CHANGED). * QSIZE EQU 12 %DORM DEF .DORM ADDR OF HEAD OF DORMANT LIST. %ACT DEF .ACT ADDR OF HEAD OF ACTIVE LIST. .DORM DEF RQ1 HEAD OF DORMANT LIST. .ACT NOP HEAD OF ACTIVE LIST. * * QUEUE ENTRY: * * WORD 1 = LINK WORD * WORD 2 = FLAG WORD: 1 = PARMB READY * 2 = PARMB SENT * 3 = REPLY RECEIVED * WORD 3 = ID SEG ADDR OF USER * WORD 4 = PRIORITY OF USER PROGRAM * WORD 5-7= USER PROGRAM NAME * WORD 8 = FUNCTION CODE * WORD 9 = ADDR OF USER CALL +1 * WORD 10 = ADDR OF REPLY BUFFER * WORD11-12=REQUEST TIME-TAGS. * RQ1 DEF RQ2 QUEUE INITIALIZED WITH ALL BSS QSIZE-1 ENTRIES IN DORMANT LIST. RQ2 DEF RQ3 BSS QSIZE-1 RQ3 DEF RQ4 BSS QSIZE-1 RQ4 DEF RQ5 BSS QSIZE-1 RQ5 DEF RQ6 BSS QSIZE-1 RQ6 DEF RQ7 BSS QSIZE-1 RQ7 OCT 0 BSS QSIZE-1 * ************************* * SIZE EQU * END 4H 0 91705-18102 1453 S 0122 DS1/B SCE/5 MODULE: @DISP              H0101 SASMB,R,L,C HED @DISP - 91705-16102 * (C) HEWLETT PACKARD CO. 1976 NAM @DISP,6 91705-16102 REV A 741230 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * * @DISP * SOURCE: 91705-18102 * BINARY: 91705-16102 * JIM HARTSELL * JULY 30, 1974 * * PRIVILEDGED SUBROUTINE FOR RTE-C SATELLITE * RESIDENT LIBRARY. @DISP RETURNS THE ADDRESS OF * THE HIGHEST PRIORITY QUEUE ENTRY (OR FIFO) THAT IS * FLAGGED "READY TO SHIP". IF NONE, OR AN ENTRY IS * PENDING A REPLY, @DISP WILL RETURN A ZERO. * * CALLING SEQUENCE: (CALLED BY @REFA, @INTR) * * JSB @DISP * * ON RETURN, (A) = QUEUE ENTRY ADDR, OR ZERO. * ENT @DISP * EXT %ACT,$LIBR,$LIBX * A EQU 0 B EQU 1 * * INITIALIZE TO SEARCH PARMB REQUEST QUEUE. * @DISP NOP JSB $LIBR DISABLE THE INTERRUPT SYSTEM. NOP * LDA MD100 INITIALIZE TO LOWER THAN STA TEMP1 LOWEST POSSIBLE PRIORITY. CLA STA QENT SET FOR "NONE FOUND". LDA %ACT STA TEMP2 TOP OF ACTIVE LIST. * * SEARCH THE QUEUE FOR AN ENTRY THAT'S READY TO SHIP. * LOOP LDA TEMP2,I GET LINK TO NEXT ENTRY. STA TEMP2 SZA,RSS JMP EOL QUIT IF END OF LIST. INA LDB A,I FETCH FLAG WORD. CPB B2 JMP EOLA QUIT IF ENTRY PENDING A REPLY. CPB B1 THIS ONE READY TO SHIP? RSS JMP LOOP NO, GO TO NEXT ENTRY. * * AN ENTRY READY TO SHIP HAS BEEN FOUND. CHECK PRIORITY. * ADA B2 LDB B,I GET PRIORITY. ADB TEMP1 SSB,RSS GREATER THAN CUR   RENT PRIORITY? JMP LOOP NO GO TO NEXT ENTRY. * * THE ENTRY IS HIGHER PRIORITY. UPDATE POINTERS. * LDB A,I UPDATE HIGHEST CURRENT CMB,INB PRIORITY. STB TEMP1 LDA TEMP2 UPDATE ADDRESS OF STA QENT QUEUE ENTRY TO SERVICE. JMP LOOP GO SEARCH REST OF QUEUE. * * END OF LIST OR END OF SEARCH. * EOLA CLA (A) = 0 WHEN ENTRY FOUND THAT JMP EXIT IS PENDING A REPLY. EXIT. * EOL LDA QENT ENTRY FOUND? SZA,RSS JMP EXIT NO, EXIT WITH (A) = 0. INA LDB B2 YES, SET FLAG = "PARMB SENT". STB A,I * LDA QENT ADDR OF QUEUE ENTRY. * EXIT JSB $LIBX ENABLE INTERRUPT SYSTEM. DEF @DISP SPC 5 * * CONSTANTS AND WORKING STORAGE. * B1 OCT 1 B2 OCT 2 MD100 DEC -100 TEMP1 NOP TEMP2 NOP QENT NOP * SIZE EQU * * END a   ' 91705-18103 1613 S 0122 DS1/B SCE/5 MODULE: @DEQ              H0101 SASMB,R,L,C HED @DEQ - 91705-16103 * (C) HEWLETT-PACKARD CO. 1976 NAM @DEQ,6 91705-16103 REV A 760323 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * * @DEQ * SOURCE: 91705-18103 * BINARY: 91705-16103 * JIM HARTSELL * AUG. 30, 1974 * * RE-ENTRANT SUBROUTINE FOR RTE-C SATELLITE * RESIDENT LIBRARY TO PROCESS COMPLETION * OF A REMOTE CALL TO THE CENTRAL STATION. * * CALLING SEQUENCE: (CALLED BY @REFA, @INTR) * * JSB @DEQ * OCT QUEUE ENTRY ADDR * OCT ICODE * ERROR RETURN * NORMAL RETURN * * WHERE: * ICODE = 0 USED BY @REFA FOR NORMAL * COMPLETION. IF ERROR RETURN, * THE REPLY BUFFER WILL CONTAIN * AN ASCII ERROR MESSAGE. * * = 1 USED BY @INTR TO * RETURN A QUEUE ENTRY TO THE * DORMANT LIST WHEN A USER HAS * BEEN ABORTED BEFORE HIS * REQUEST HAS COMPLETED SERVICE. * NORMAL RETURN ALWAYS TAKEN. * ENT @DEQ * EXT $LIBR,$LIBX EXT %DORM,%ACT * A EQU 0 B EQU 1 * **************************************** * * BEGIN TEMPORARY DATA BLOCK. * TDB NOP DEC 14 LENGTH OF BLOCK. RETRN NOP RETURN ADDR OF CALLER. TEMP1 NOP TEMPORARY DATA. TEMP2 NOP TEMP3 NOP RTNFG NOP FLAG RETURNED IN E-REG. FCN NOP FUNCTION CODE. REPLY NOP ADDR OF REPLY BUFFER. P.PTR NOP PTR TO USER CALL PARAMS. I.PTR NOP PTR TO REPLY BUFR PARAMS. CALL NOP ADDR OF USER CALL +1. * PASSED PARAMETERS: QENT NOP ADDR OF QUEUE ENTRY. ICODE NOP REQUEST CODE. * * END OF TEMPORARY DATA BLOCK. * **************************************** * * @DEQ NOP ENTRY POINT. * JSB $LIBR SAVE TEMPORARY DATA. DEF TDB * JSB $LIBR NOP * LDA @DEQ,I FETCH CALL PARAMETERS. STA QENT ISZ @DEQ LDA @DEQ,I STA ICODE ISZ @DEQ LDA @DEQ STA RETRN SET RETURN ADDRESS. * JSB $LIBX DEF *+1 DEF *+1 * * CHECK REQUEST CODE. * CLA STA RTNFG LDA ICODE SZA IF NON-ZERO, JMP DEQUE ABORT THE REQUEST. * * NORMAL COMPLETION OF REMOTE REQUEST. * LDB QENT GET FUNCTION CODE. ADB B7 (FROM QUEUE ENTRY) LDA B,I AND B377 MASK. STA FCN SAVE. * INB SAVE ADDR OF USER CALL. LDA B,I STA CALL ADA B2 SET POINTER TO USER CALL STA P.PTR PARAMETERS (IERR OR ICODE). * INB SAVE ADDR OF REPLY BUFFER. LDA B,I STA REPLY * ADA B4 SET POINTER TO REPLY BUFFER STA I.PTR RETURN PARAMETERS. * LDA FCN TEST FUNCTION CODE. CPA D9 JMP .GTLU GETLU. CPA D10 JMP .DLST DLIST. SZA,RSS JMP .DNLD DOWN-LOAD. CPA D200 JMP .RMCN REMOTE CONTROL. ADA MD150 SSA JMP .PTOP ADA MD13 SZA,RSS JMP .EXEC * * REMOTE FILE ACCESS COMPLETION. * LDA REPLY IF A-REG SLOT IS NON-ZERO, ADA B2 STORE THE ERROR CODE IN LDB A,I THE IERR SLOT OF REPLY BUFFER. ADA B2 SZB STB A,I * LDA I.PTR,I PASS IERR TO USER CALL, LDB FCN EXCEPT FOR DSTAT. CPB D162 RSS JSB RWORD ISZ I.PTR * V SSA IF IERR WAS NEGATIVE, DON'T JMP DEQUE PASS OTHER RETURN PARAMS. * LDB FCN CPB D154 REMOTE FILE READ? RSS JMP CMPL1 NO. ISZ P.PTR MOVE PARAM POINTER. ISZ P.PTR LDA I.PTR,I RETURN XMSN LOG. JSB RWORD JMP DEQUE * CMPL1 CPB D160 LOCATE REMOTE RECORD? RSS JMP DEQUE NO. LDB MD7 YES. RETURN N PARAMS. JSB PINTG JMP DEQUE * * REMOTE EXEC CALL COMPLETION. * .EXEC LDA REPLY CHECK A-REG SLOT OF REPLY ADA B2 BUFFER FOR ERROR CODES. LDA A,I * LDB AS.01 CPA MD51 JMP SETER LINE DOWN. CPA MD10 JMP MSSNG MISSING PARAM. * CPA MD1 ERROR FROM CENTRAL? JMP CMPL6 YES * LDB AS.02 CPA MD52 JMP SETER PARITY ERROR. * LDB AS.00 CPA MD103 JMP SETER SOFTWARE BUG! * CPA AS.IO CENTRAL I/O ERROR. JMP BOUNC * CPA AS.SC CENTRAL SCHEDULE ERROR. JMP BOUNC * CPA AS.DS DS ERROR. JMP BOUNC * CPA AS.RQ ILLEGAL REQUEST CODE. JMP BOUNC * LDA P.PTR,I GET REQUEST CODE. JSB INDCK LDA A,I STA TEMP3 ELA,CLE,ERA TAKE OFF SIGN BIT. ISZ P.PTR SKIP PAST IT. * CPA D11 REMOTE TIME CALL? RSS JMP CMPL2 NO. LDA MD5 YES. RETURN TIME ARRAY. JSB PNWDS JMP CMPL3 GO DE-QUE THE ENTRY. * CMPL2 CPA D13 REMOTE I/O STATUS? RSS JMP CMPL3 NO. ISZ P.PTR YES. SKIP OVER CONTROL WORD. LDB MD2 JSB PINTG PASS PARAMETERS. * CMPL3 LDA TEMP3 TAKE NORMAL RETURN IF SIGN BIT SSA SET. ISZ RTNFG JMP DEQUE * CMPL6 LDA REPLY ADA B3 LDA 0,I GET REPLY+3 CPA D11 LENGTH ERROR? RSS YES  JMP MSSNG TREAT AS IO01 LDB AS.03 GIVE DS03 JMP SETER * * PROGRAM TO PROGRAM COMMUNICATION COMPLETION. * .PTOP LDA I.PTR BACK UP REPLY BUFFER POINTER. ADA MD2 STA I.PTR CLA PREPARE FOR NO ERROR. LDB I.PTR,I GET FLAG WORD. SSB INA SET IERR=1 IF REJECTED. ISZ I.PTR LDB I.PTR,I GET ERROR WORD. SZB RETURN 0 OR 1 IF NO ERROR. LDA B HAD ERROR. RETURN NEG CODE. CPA MD11 MAP ERROR CODES. LDA MD44 CPA MD10 LDA MD40 CPA MD51 LDA MD47 CPA MD52 LDA MD48 STA I.PTR,I JSB RWORD ISZ I.PTR ISZ I.PTR * LDA P.PTR RESET POINTER TO PCB AREA. ADA MD2 STA P.PTR * LDA MD3 IF POPEN, MOVE ID INFO TO PCB. LDB FCN CPB B1 JSB PNWDS * ISZ P.PTR SET POINTER TO ITAG PARAM. ISZ P.PTR LDB P.PTR LDA FCN CPA B1 ADJUST REPLY POINTER. JMP *+4 ISZ I.PTR ISZ I.PTR ISZ I.PTR * CPA B4 JMP PTP1 ADB B2 STB P.PTR * PTP1 LDA MD10 PASS TAG FIELD TO USER. JSB PNWDS * JSB DEQ DE-QUE THE REQUEST. LDB REPLY RETURN A = IERR. ADB B3 LDA B,I CLE JMP EXIT * * SPECIAL DLIST CALL COMPLETION. * .DLST LDA P.PTR MOVE PARAM POINTER. ADA B6 STA P.PTR * LSTLD LDA I.PTR BACK UP REPLY BUFFER POINTER. ADA MD2 STA I.PTR * LDB MD3 PASS 3 PARAMS TO USER. JSB PINTG * JMP DEQUE * * SPECIAL DOWN-LOAD CALL COMPLETION. * .GTLU BSS 0 .DNLD LDA P.PTR ADA MD1 STA P.PTR * LDA REPLY CHECK FOR XMSN ERRORS. ADA B3 LDA A,I LDB AS.01 CPA MD51 JMP SETER LINE DOWN. LDB AS.00 CPA MD103 JMP SETER SYSTEM ERROR". * JMP LSTLD * * SPECIAL REMOTE CONTROL COMPLETION. * .RMCN LDA P.PTR BACK UP PARAM POINTER. ADA MD1 STA P.PTR ISZ I.PTR BUMP REPLY BUFFER POINTER. LDA I.PTR,I RETURN MESSAGE LENGTH. JSB RWORD ISZ I.PTR LDA MD19 RETURN ASCII MESSAGE. JSB PNWDS JMP DEQUE * * STORE ASCII ERROR CODES IN REPLY BUFFER. * (FOR REMOTE EXEC AND DOWN-LOAD CALLS) * MSSNG CCE,RSS SETER CLE LDA REPLY REPLY BUFFER ADDRIN B-REG ADA B2 3RD WORD STA ERDST+1 SAVE ADDR FOR ERROR CODE STORE LDA AS.DS "DS". SEZ LDA AS.IO "IO" ERDST DST * SET ASCII ERROR CODE * LDA FCN CHECK FOR DOWN-LOAD. SZA,RSS JMP EMESG * BOUNC LDA P.PTR,I CHECK SIGN BIT OF RCODE. JSB INDCK LDA A,I SSA,RSS IS IT SET? JMP EMESG NO. ABORT THE USER. * DEQUE JSB DEQ DE-QUE THE REQUEST. * * * SET THE A AND B REGISTERS TO THEIR VALUE AFTER * THE REMOTE CALL WAS EXECUTED AT CENTRAL. * LDA RTNFG SET E IF NORMAL DEXEC RETURN ERA WHEN RCODE SIGN BIT SET. LDB REPLY ADB B2 DLD 1,I GET REGS FROM REPLY BUFFER * * EXIT TO CALLER VIA NORMAL RETURN. * EXIT JSB $LIBX RESTORE TEMPORARY DATA BLOCK. DEF TDB DEC 1 * * GENERATE AN ERROR MESSAGE OF THE FORM * * IOXXR PRGNM ADDR * PRGNM ABORTED -OR- PRGNM SUSPEND * * IN THE REPLY BUFFER AND RETURN VIA ERROR EXIT. * EMESG LDA REPLY SET STORE POINTER. STA I.PTR * ADA B2 LDB MD2 JSB PACK STORE "IOXX". * LDA AS.R STORE "R" SUFFIX IF NOT DSP ERROR. LDB REPLY,I CPB AS.DS LDA BLANK STA I.PTR,I ISZ I.PTR * LDA XEQT,I GET ADDR OF PROGRAM NAME ADA D12 LDB MD3 IN ID SEGMENT. JSB PACK STORE "PRGNM". * LDB CALL GE T ADDR OF VIOLATING ADB MD1 USER CALL. LDA I.PTR ADDRESS OF ASCII STORAGE. JSB CONV CONVERT TO ASCII OCTAL & STORE. STA I.PTR SET STORE POINTER. * LDA CRLF STORE CR/LF. STA I.PTR,I ISZ I.PTR * LDA XEQT,I STORE PROGRAM NAME AGAIN ADA D12 LDB MD3 IN SECOND LINE. JSB PACK * LDB REPLY ADDR OF REPLY BUFFER. LDA B,I WORD 1. CPA AS.DS = "DS" ? JMP WORD2 YES. GO CHECK WORD 2. ABRT LDA ABMSG NO. STORE "ABORTED". LDB MD4 JSB PACK JSB DEQ DE-QUE THE REQUEST. CLA JMP EREX * WORD2 INB LDA B,I WORD 2. CPA AS.01 = "01" ? RSS JMP ABRT NO. STORE "ABORTED". LDA SUMSG YES. STORE "SUSPEND". LDB MD4 JSB PACK CLA,INA * EREX JSB $LIBX RESTORE TDB AND TAKE DEF TDB ERROR EXIT. DEC 0 HED @DEQ - UTILITY SUBROUTINES * (C) HEWLETT PACKARD CO. 1976 * SUBROUTINE TO RETURN COMPLETED ACTIVE QUEUE ENTRY TO * THE DORMANT LIST. * DEQ NOP JSB $LIBR DISABLE THE INTERRUPT SYSTEM. NOP * LDA %DORM FIND END OF DORMANT LIST. CLB JSB FINDR * LDA QENT LINK TO RELEASED ENTRY. STA B,I * LDA %ACT FIND PREVIOUS ACTIVE ENTRY. LDB QENT LDB B,I JSB FINDR * LDB QENT LINK IT AROUND RELEASED ENTRY. LDB B,I (IF IT WAS NOT THE LAST ENTRY SZA IN THE ACTIVE LIST) STB A,I CLA CLEAR LINK IN RELEASED ENTRY. LDB QENT STA B,I INB CLEAR FLAG WORD. STA B,I * JSB $LIBX ENABLE INTERRUPT SYSTEM. DEF DEQ RETURN. * * SUBROUTINE TO FIND END OF LIST OR PARTICULAR * ENTRY IN THE PARMB REQUEST QUEUE. THIS ROUTINE * IS CALLED WITH THE INTERRUPT SYSTEM DISABLED. * ENTRY: (A) = ADDR OF PTR TO TO{P OF LIST. * (B) = 0 FOR END OF LIST, OR * = LINK WORD FOR PARTICULAR ENTRY. * JSB FINDR * RETURN: (A) = ADDR OF PREVIOUS ENTRY. * (B) = ADDR OF ENTRY. * FINDR NOP STB TEMP3 CLB STB TEMP2 INITIAL PREVIOUS ENTRY. * F1 LDB A,I FETCH NEXT ENTRY. CPB TEMP3 DESIRED ENTRY? JMP F2 YES. STA TEMP2 NO. KEEP TRACK. STB A JMP F1 * F2 LDB A ADDR OF ENTRY. LDA TEMP2 ADDR OF PREVIOUS ENTRY. JMP FINDR,I RETURN. * * PASS N-WORD PARAM TO USER PROGRAM. * (DOES NOT BUMP P.PTR) * PNWDS NOP STA TEMP1 NEGATIVE WORD COUNT. JSB PCHEK IS PARAM SPECIFIED? JMP PNWDS,I NO. IGNORE THE CALL. LDA P.PTR,I GET PARAM ADDRESS. JSB INDCK TLOOP LDB I.PTR,I MOVE N WORDS. STB A,I ISZ I.PTR INA ISZ TEMP1 JMP TLOOP JMP PNWDS,I * * PASS N PARAMS TO USER PROGRAM. (B) = -N. * PINTG NOP STB TEMP2 PLOOP LDA I.PTR,I JSB RWORD ISZ I.PTR ISZ TEMP2 JMP PLOOP JMP PINTG,I * * PASS A-REG CONTENTS TO USER PARAMETER, IF SPECIFIED. * RWORD NOP STA TEMP1 JSB PCHEK IS PARAM SPECIFIED? JMP RWORD,I NO. IGNORE THE CALL. LDB TEMP1 YES. LDA P.PTR,I JSB INDCK STB A,I LDA TEMP1 ISZ P.PTR JMP RWORD,I * * TEST WHETHER THE USER HAS SPECIFIED A PARAMETER. * JSB PCHEK * ERROR RETURN (PARAM NOT GIVEN) * NORMAL RETURN * PCHEK NOP LDA P.PTR PARAM ADDRESS. CMA,INA ADA CALL,I RETURN ADDRESS. ADA MD1 SSA,RSS ISZ PCHEK JMP PCHEK,I * * RESOLVE INDIRECT PARAMETER ADDRESSES. * INDCK NOP RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I * * MOVE WORDS TO USER REPLY BUFFER. * (A) = SOURCE ADDR, (B) = NEGATIVE WORD* COUNT. * PACK NOP STB TEMP1 CLOOP LDB A,I STB I.PTR,I INA ISZ I.PTR ISZ TEMP1 JMP CLOOP JMP PACK,I * * CONVERT 15-BIT BINARY NUMBER TO 6 CHARACTER * (LEADING BLANK) ASCII FORM OF OCTAL. * CONV NOP STA TEMP1 SAVE STORAGE ADDRESS. RBL POSITION FIRST DIGIT TO BITS 15-13. LDA MD3 STA TEMP2 CONVERT COUNTER = -3. LDA B40 MAKE FIRST CHAR A SPACE. CONV1 ALF,ALF ROTATE CAHR TO UPPER POSITION STA TEMP3 AND SAVE. BLF,RBR POSITION NEXT DIGIT TO BITS 2-0. LDA B AND B7 ISOLATE DIGIT. IOR B60 MAKE AN ASCII CHAR (60-67). IOR TEMP3 PACK IN UPPER CHAR STA TEMP1,I AND STORE IN STORAGE AREA. ISZ TEMP1 BUMP STORAGE ADDRESS. BLF,RBR ROTATE NEXT DIGIT TO LOW BYTE. LDA B ISOLATE CHAR IN LOW A. AND B7 IOR B60 MAKE AN ASCII CHAR. ISZ TEMP2 BUMP CONVERT COUNTER. JMP CONV1 NOT FINISHED. LDA TEMP1 FINISHED. SET (A) = NEXT STORAGE JMP CONV,I AREA WORD ADDRESS, AND EXIT. HED @DEQ - STORAGE FOR CONSTANTS * (C) HEWLETT PACKARD CO. 1976 XEQT OCT 1717 ID SEG ADDR OF CURRENT PROGRAM. B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B6 OCT 6 B7 OCT 7 B40 OCT 40 B60 OCT 60 B377 OCT 377 D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D13 DEC 13 D154 DEC 154 D160 DEC 160 D162 DEC 162 D200 DEC 200 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD4 DEC -4 MD5 DEC -5 MD7 DEC -7 MD10 DEC -10 MD11 DEC -11 MD13 DEC -13 MD19 DEC -19 MD40 DEC -40 MD44 DEC -44 MD47 DEC -47 MD48 DEC -48 MD51 DEC -51 MD52 DEC -52 MD53 DEC -53 MD103 DEC -103 MD150 DEC -150 AS.00 ASC 1,00 AS.01 ASC 1,01 AS.02 ASC 1,02 AS.03 ASC 1,03 AS.IO ASC 1,IO AS.SC ASC 1,SC AS.DS ASC 1,DS AS.R ASC 1,R AS.RQ ASC 1,RQ BLANK ASC 1, CRLF OCT 6412 ABL640MSG DEF ABORT ABORT ASC 4, ABORTED SUMSG DEF SUSP SUSP ASC 4, SUSPEND * SIZE EQU * * END 96 ! / 91705-18104 1602 S 0122 DS1/B SCE/5 MODULE: @PTPQ              H0101 ]ASMB,R,L,C HED @PTPQ-SLAVE PTOPC MAILBOX SUBR. *(C) HEWLETT-PACKARD CO. 1976* NAM @PTPQ,6 91705-16104 REV A 760106 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * * @PTPQ * SOURCE: 91705-18104 REV.A * BINARY: 91705-16104 REV.A * JIM HARTSELL * JULY 30, 1974 * MODIFIED BY: CHW (01-06-76) [DERIVED FROM 91705-18004 REV.C] * * PRIVILEDGED SUBROUTINE FOR RTE-C SATELLITE RESIDENT * LIBRARY. @PTPQ SUPPLIES A MAILBOX FOR A PTOPC PARMB * ARRIVING FROM THE CENTRAL STATION. * @PTPQ ALSO PROVIDES A HOLDING BUFFER FOR PARMB'S * TO BE PASSED FROM @INTR TO @RQPR, PLUS VARIOUS * "SYSTEM COMMON" STORAGE. * * CALLING SEQUENCE: (CALLED BY @INTR) * * (A) = ADDR OF PTOPC PARMB (35 WORDS MOVED) * JSB @PTPQ * ERROR RETURN: MAILBOX FLAG ALREADY UP. * NORMAL RETURN * ENT @PTPQ,%MBOX,%MFLG,%RQUE,%CSID,%CSNM ENT %DLER,DLERR ENT %LIST,%TMOT * EXT $LIBR,$LIBX * B EQU 1 * * CHECK MAILBOX FLAG. * @PTPQ NOP JSB $LIBR DISABLE INTERRUPT SYSTEM. NOP (IN CASE @INTR PRIORITY REDUCED) * STA TEMP SAVE PTOPC PARMB ADDR. * LDA %MFLG SZA JMP EXIT FLAG SET: ERROR EXIT. * * PLACE PTOPC PARMB IN MAILBOX. * LDA DFBOX STA TEMP1 LDB MD35 * LOOP LDA TEMP,I STA TEMP1,I ISZ TEMP ISZ TEMP1 INB,SZB JMP LOOP * LDA %MBOX+2 POPEN CALL? AND B7 CPA B1 RSS JMP STFLG NO. * LDA %MBOX+5 STORE PROG NAME. STA %CSNM+1 LDA %MBOX+6 STA %CSNM+2 LDA %MBOX+7 STA %CSNM+3 * * SEARCH ALL ID SEGMENTS FOR THE SLAVE PROG * NAME AND SET %CSID TO ID SEG ADDR. * LDA KEYWD,I FWA KEYWORD BLOCK. STA TEMP * LOOP1 LDB TEMP,I NEXT ID SEG ADDR. STB %CSID SAVE IT SZB,RSS JMP EXIT QUIT IF DONE, ADB D12 * LDA B,I 1ST 2 CHAR FROM IDSEG. CPA %CSNM+1 INB,RSS MATCH. JMP NEXT MISMATCH. LDA B,I 2ND 2 CHAR FROM IDSEG. CPA %CSNM+2 INB,RSS MATCH. JMP NEXT MISMATCH. LDA B,I 3RD 2 CHAR FROM IDSEG. AND LHALF STA TEMP1 SAVE LEFT HALF. LDA %CSNM+3 AND LHALF CPA TEMP1 JMP STFLG MATCH. * NEXT ISZ TEMP BUMP KEYWORD ADDR. JMP LOOP1 CHECK NEXT ID SEG. * * SET MAILBOX FLAG AND RETURN (NORMAL EXIT). * STFLG CLA,INA STA %MFLG ISZ @PTPQ EXIT JSB $LIBX ENABLE INTERRUPT SYSTEM. DEF @PTPQ SPC 3 * * SUBROUTINE TO RETURN APLDR ERROR NUMBERS. * DLERR NOP JSB $LIBR NOP ISZ DLERR LDA %DLER,I LDB DLERR,I STA B,I ISZ DLERR JSB $LIBX DEF DLERR SPC 3 * * CONSTANTS AND WORKING STORAGE. * B1 OCT 1 B7 OCT 7 KEYWD OCT 1657 LHALF OCT 177400 TEMP NOP TEMP1 NOP D12 DEC 12 MD35 DEC -35 %TMOT DEC -1500 15 SEC. DEFAULT TIME-OUT. %CSID NOP CURRENT SLAVE ID SEG ADDR. %CSNM DEF *+1 BSS 3 CURRENT SLAVE PROG NAME. %MFLG OCT 0 DFBOX DEF %MBOX %MBOX BSS 35 SLAVE PTOPC MAILBOX. %RQUE DEF *+1 BSS 35 HOLDING BUFFER FOR @RQPR. %DLER DEF *+1 BSS 1 APLDR ERROR NUMBER SLOT. BSS 3 PROG/FILE NAME SLOT. * * * WAIT-LIST FOR PROGRAMS PLACED IN THE OPERATOR SUSPEND * LIST BY @REFA. FIVE-WORD ENTRY PER PROGRAM: * WORD 1 = NEG VALUE INCR BY @CLCK * WORD 2-4 = PROGRAM NAME * WORD 5 = ID S EGMENT ADDRESS. * %LIST DEF *+1 DEC -20 NEG. # ENTRIES. * BSS 100 ALL ZEROES UNL REP 100 OCT 0 LST * SIZE EQU * * END X "* 91705-18105 1553 S 0122 DS1/B SCE/5 MODULE: ENABL              H0101 MASMB,R,L,C HED ENABL - ENABLE LISTEN MODE.* (C) HEWLETT-PACKARD CO. 1976 * NAM ENABL,1,5 91705-16105 REV.A 751230 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * * ENABL * SOURCE: 91705-18105 REV.A * BINARY: 91705-16105 REV.A * JIM HARTSELL * AUG. 18, 1974 * MODIFIED BY: C.C.H. (12-30-75) [DERIVED FROM: 91705-18005 REV.B] * * * CORE RESIDENT RTE-C SATELLITE START-UP PROGRAM TO FIND * THE LOGICAL UNIT OF THE REMOTE COMPUTER I/O SLOT AND * ENABLE LISTEN MODE ON THE COMMUNICATION LINK. * THIS PROGRAM IS ALSO SCHEDULED BY THE OPERATOR * AND BY @REFA TO RECOVER FROM "LINE DOWN" ERRORS. * ENT ENABL EXT EXEC,%LU,$LIBR,$LIBX,%ACT SUP A EQU 0 B EQU 1 * * FIND LOGICAL UNIT OF CENTRAL STATION. * ENABL LDA B,I SAVE SPECIAL SCHEDULE PARAM. STA SCFLG * ADB B4 LDA B,I SZA JMP QDUMP * CLA,INA INITIALIZE LU COUNTER. STA LU * LDA LUMAX,I GET NEGATIVE NUMBER CMA,INA OF DRT ENTRIES. STA CNTR * LDA DRT,I SET DRT POINTER. STA DRTA * ENBL1 LDA DRTA,I MAKE SURE LU IS ASSIGNED. AND B77 SZA,RSS JMP BUMP * JSB EXEC GET STATUS. DEF *+4 DEF D13 DEF LU DEF CLIO * LDA CLIO ALF,ALF AND B77 ISOLATE EQUIPMENT TYPE. CPA B65 OCTAL 65? JMP ENBL2 YES. "LU" CONTAINS LU. * BUMP ISZ LU BUMP LU COUNTER. ISZ DRTA BUMP DRT POINTER. ISZ CNTR BUMP DRT COUNTER. JMP ENBL1 LOOP IF MORE. * Zj JSB EXEC NO DVR65 IN THE SYSTEM. DEF *+5 DISPLAY ERROR MESSAGE. DEF B2 DEF B1 DEF MSG DEF MSGL JMP EXIT TERMINATE. * * CLEAR LINE AND ENABLE LISTEN MODE. * ENBL2 JSB $LIBR DISABLE INTERRUPTS. NOP LDA LU STA %LU STORE LOGICAL UNIT. JSB $LIBX ENABLE INTERRUPTS. DEF *+1 DEF *+1 * LDA %LU ADA B200 STA CLIO ADA B100 STA ENIO * JSB EXEC CLEAR LINE. DEF *+4 DEF B3 DEF CLIO DEF DFLRN * JSB EXEC ENABLE LISTEN MODE. DEF *+4 DEF B3 DEF ENIO DEF DFLRN * LDA SCFLG CHECK IF SCHEDULED CPA AS.01 BY OPERATOR. JMP EXIT NO. * JSB EXEC DISPLAY COMFORTING MESSAGE. DEF *+5 DEF B2 DEF B1 DEF CMSG DEF D9 * JSB EXEC SCHEDULE @CLCK. DEF *+3 DEF D10 DEF DCLCK * EXIT JSB EXEC TERMINATE. DEF *+2 DEF B6 * * CONSTANTS AND WORKING STORAGE. * B1 OCT 1 B2 OCT 2 B3 OCT 3 B6 OCT 6 B65 OCT 65 B77 OCT 77 B100 OCT 100 B200 OCT 200 DRT OCT 1652 LUMAX OCT 1653 NO. OF LU'S IN DRT. D9 DEC 9 D12 DEC 12 D13 DEC 13 DRTA NOP CNTR NOP CLIO NOP ENIO NOP LU NOP * * *** DO NOT CHANGE ORDER OF NEXT SIX STATEMENTS *** SPC 1 DFLRN DEF LRN LRN OCT 0,0 DUMMY RN STORAGE--DVR65 COMPATABILITY. DEC -1000 REQUEST & DATA TIMEOUT (SATELLITE ONLY). NOP [#SBIT ADDRESS NOT USED IN SCE/5]. NOP [$CGRN ADDRESS NOT USED IN SCE/5]. OCT -1 PRIMARY: NO YIELD-SIMULTANEOUS REQUESTS. SPC 1 SCFLG NOP DCLCK ASC 3,@CLCK AS.01 ASC 1,01 MSGL DEC 4 MSG ASC 4,NO DVR65 CMSG ASC 9,SATELLITE ENABLED * SKP * BUILT-IN SCE/5 DIAGNOSTIC AID: PERFORM A CORE DUMP OF ALL * ACTIVE ENTRIES IN THE PARMB REQUEST QUEUE AND THEIR * ASSOCIATED PARMB BUFFERS. * * TO DUMP: *ON,ENABL,,,,,LU * * LU = LU OF DISPLAY DEVICE * * IF NO ACTIVE ENTRIES, NOTHING IS DISPLAYED. * QDUMP STA LU STORE OUTPUT LU. LDA %ACT HEAD OF ACTIVE LIST. LINK LDA A,I GET ADDR OF NEXT ENTRY. SZA,RSS JMP EXIT EXIT IF DONE. * STA TEMP2 SAVE ADDRESS OF ENTRY. LDB D12 DISPLAY 12-WORD QUEUE ENTRY. JSB DSPLY LDA TEMP2 DISPLAY IT'S PARMB/REPLY BUFFER. ADA D9 LDA A,I LDB D35 JSB DSPLY * LDA TEMP2 LOOP FOR NEXT QUEUE ENTRY. JMP LINK * * DUMP SPECIFIED CORE. * DSPLY NOP STA ADDR INIT. CORE ADDR POINTER. CMB,INB STB CNTR NEGATIVE WORD COUNTER. LDA MD10 STA LNCNT LINE WORD COUNT. LOOP CLA STA B.PTR RESET BUFFER BYTE POINTER. LDA BLANK START WITH BLANK BYTE. JSB STBYT * LDA MD6 SET FOR 6 CHARACTERS. STA BCNTR * LDB ADDR,I GET NEXT CORE WORD. CLA RRL 1 JMP XXX * LOOP1 BLF,RBR POSITION NEXT 3 BITS. LDA B AND B7 XXX IOR B60 JSB STBYT STORE ASCII BYTE. ISZ BCNTR JMP LOOP1 LOOP TILL DONE. * ISZ ADDR BUMP TO NEXT CORE WORD. LDA BA PRIME FOR BACK ARROW. ISZ CNTR END OF CORE WORDS? JMP EOLCK NO. GO CHECK LINE. * EOD LDA CR STUFF CARRIAGE RETURN. JMP CNTRL * EOLCK ISZ LNCNT END OF LINE (10 CORE WORDS)? JMP CNTRL NO. LDA MD10 YES. RESET WORD COUNTER. STA LNCNT JMP EOD STUFF CARRIAGE RETURN. * CNTRL JSB STBYT STORE CONTROL CHARACTER. * JSB EXEC DISPLAY 4 WORDS. DEF *+5 DEF B2 DEF LU BUFAD DEF ASCBF DEF B4 * LDA CNTR SZA JMP LOOP GO GET NEXT CORE WORD. JMP DSPLY,I EXIT; WHEN DONE. * * STORE A BYTE INTO THE PRINT LINE BUFFER. * STBYT NOP STA TEMP SAVE BYTE. LDA B.PTR BYTE POINTER. CLE,ERA FORM WORD ADDRESS. ADA BUFAD FORM BUFFER ADDRESS. STA TEMP1 SAVE FOR LATER. LDA A,I GET CURRENT WORD FROM BUFFER. SEZ,RSS ALF,ALF POSITION IF NEEDED. AND M377L MASK. IOR TEMP STUFF NEW BYTE. SEZ,RSS ALF,ALF RE-POSITION IF NEEDED. STA TEMP1,I STORE INTO BUFFER. ISZ B.PTR BUMP BYTE POINTER. JMP STBYT,I * SKP * * WORKING STORAGE FOR CORE DUMP SECTION. * B4 OCT 4 B7 OCT 7 B60 OCT 60 D10 DEC 10 D35 DEC 35 MD6 DEC -6 MD10 DEC -10 CR OCT 15 CARRIAGE RETURN. BA OCT 137 BACK ARROW. BLANK OCT 40 M377L OCT 177400 TEMP BSS 1 TEMP1 BSS 1 TEMP2 BSS 1 ADDR EQU CLIO LNCNT EQU ENIO B.PTR EQU SCFLG BCNTR BSS 1 ASCBF BSS 4 SIZE EQU * * END ENABL  #, 91705-18106 1606 S 0122 DS1/B SCE/5 MODULE: @INTR              H0101 ^ASMB,R,L,C HED @INTR-COMM. LINE INTERRUPT MODULE.*(C) HEWLETT-PACKARD CO. 1976* NAM @INTR,1,1 91705-16106 REV A 760206 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * * @INTR * SOURCE: 91705-18106 REV.A * BINARY: 91705-16106 REV.A * JIM HARTSELL * JULY 30, 1974 * MODIFIED BY: CHW (01-06-76) [DERIVED FROM: 91705-18006 REV.B] * * CORE RESIDENT RTE-C SATELLITE PROGRAM SCHEDULED BY * DVR65 UPON RECEIPT OF AN INTERRUPT CAUSED BY A "TRANSMIT * REQUEST" CALL AT THE CENTRAL STATION. * @INTR READS THE REQUEST AND SCHEDULES THE APPROPRIATE * PROCESSOR. IF THE REQUEST IS A REPLY TO A PARMB, @INTR * DISPATCHES THE NEXT PARMB REQUEST. * ENT @INTR * EXT EXEC,@DEQ,@DISP,%LU,$LIBR,$LIBX EXT @PTPQ,%RQUE,%CSID,%CSNM,%MFLG EXT %LIST,$WORK,$LINK * A EQU 0 B EQU 1 * * READ THE REQUEST BUFFER. * @INTR JSB EXEC RECEIVE REQUEST ONLY. DEF *+7 DEF B1 DEF %LU DEF IRBUF DEF IRBFL DEF DUMMY DEF DUMMY * * CHECK FOR TRANSMISSION ERRORS. * SLA,RSS * SKP * THE REQUEST ARRIVING FROM CENTRAL COULD NOT BE READ. * CASE 1: REPLY TO A REMOTE REQUEST: * USER WILL COME OUT OF OP SUSP LIST, WILL * GET A "DS51 SUSPEND", AND CAN TRY AGAIN. * CASE 2: REQUEST FROM CENTRAL: * CENTRAL WILL DETECT ERROR AND RE-TRY. * JMP EXIT IGNORE REQUEST. STB EQT12 SAVE EQT12 STATUS * * CHECK FOR REPLY OR PARMB. * LDA IRBUF CHECK FOR REPLY BUFFR. RAL (BIT 14 SET IF REPLY) SSA JMP REPLY REPLY. DON'T CARE WHAT TYPE. * RAR PARMB. DETERMINE TYPE. AND B377 ISOLATE THE STREAM TYPE, STA IRBUF AND RESTORE IT. CPA B4 JMP PTOPC PTOPC. * * MOVE PARMB TO HOLDING BUFFER FOR @RQPR. * JSB $LIBR DISABLE INTERRUPTS. NOP LDA RBUFD ADDR OF PARMB. STA TEMP1 LDA %RQUE ADDR OF HOLDING BUFFER. STA TEMP2 LDB MD35 LOOP LDA TEMP1,I MOVE PARMB. STA TEMP2,I ISZ TEMP1 ISZ TEMP2 INB,SZB JMP LOOP JSB $LIBX ENABLE INTERRUPTS. DEF *+1 DEF *+1 * JSB EXEC SCHEDULE @RQPR PROCESSOR FOR DEF *+3 DEXEC/REMOTE CONTROL/FORCE LOAD. DEF SD10 WITHOUT WAIT. DEF D@RQP * * IF PROCESSOR DOES NOT EXIST, OR ALREADY SCHEDULED, * THE REQUEST WILL BE REJECTED. * NOP IGNORE ERROR RETURN. CLB PRIME IERR TO 0. CPA AS.SC JMP REJR SZA,RSS JMP EXIT * REJR LDA AS.RQ SEND BACK "RQ" ERROR. STA IRBUF+5 LDA AS.SP STA IRBUF+6 JMP SNREJ * * REQUEST IS A REPLY TO A PARMB. * SET QUEUE ENTRY FLAG WORD = "REPLY RECEIVED". * REPLY LDB IRBUF+1 CHECK IF A REPLY IS EXPECTED. STB QENT INB LDA B,I CPA B2 RSS JMP DISP NO. IGNORE AND DISPATCH NEXT. * ADB D9 POINT TO THE TIME-TAG WORDS. DLD B,I GET THE TIME-TAGS. CPA IRBUF+33 IF THE FIRST TAG COMPARES, RSS SKIP TO CHECK SECOND ELSE, JMP DISP NOT THE EXPECTED REPLY--IGNORE! CPB IRBUF+34 IF THE SECOND TAG COMPARES, RSS THEN THIS IS OUR REPLY ELSE, JMP DISP NOT THE EXPECTED REPLY--IGNORE! * * JSB $LIBR DISABLE INTERRUPT SYSTEM. NOP * LDA QENT QUEUE ENTRY ADDRESS. INA LDB B3 STB A,I SET FLAG WORD. * JSB $LIBX ENABLE INTERRUPT SYYSTEM. DEF *+1 DEF *+1 * * FIND STATUS OF CORRESPONDING PROGRAM. * * NOTE: SUBROUTINE "ALIVE" DISABLES THE INTERRUPT * SYSTEM WHILE CHECKING STATUS. * JSB ALIVE JMP ABORT USER DEAD. JMP MOVE USER OP SUSPENDED. * SKP * USER PROGAM HAS BEEN ABORTED. CANCEL THE * REQUEST FROM THE PARMB REQUEST QUEUE, AND * DISPATCH THE NEXT PARMB. * ABORT JSB @DEQ QENT NOP B1 OCT 1 * NOP ERROR = NORMAL RETURN. JMP DISP * * USER PROGRAM IS SCHEDULED AND IN CORE. * MOVE REPLY TO USER'S REPLY BUFFER AREA. * MOVE JSB $LIBR NOP LDA RBUFD SET SOURCE POINTER. STA TEMP2 * LDA IRBUF+1 SET DESTINATION POINTER. ADA D9 LDA A,I STA TEMP1 * LDB MD35 SET WORD COUNTER. * MLOOP LDA TEMP2,I MOVE. STA TEMP1,I ISZ TEMP2 ISZ TEMP1 INB,SZB JMP MLOOP * JSB $LIBX DEF *+1 DEF *+1 * JSB CLOCK SET UP FOR RESTART. JMP ENQUE * * * SEND A STOP IF LINE IS IN "DATA PENDING" CONDITION * DISP LDA EQT12 ALF,ALF BIT 8 = DATA PENDING FLAG SLA,RSS JMP ENQUE JUMP IF NOT PENDING DATA XFER * SEND A STOP JSB EXEC DEF *+3 DEF B3 DEF %LU * * NOW THAT A REPLY HAS BEEN RECEIVED, THE NEXT PARMB * CAN NOW BE TRANSMITTED. CHECK IF ONE IS WAITING. * ENQUE JSB @DISP SZA,RSS (A)= QUE ENTRY ADDR, OR ZERO. JMP EXIT NONE WAITING. TERMINATE. * STA QENT A PARMB WAITING. CHECK STATUS. JSB ALIVE JMP ABORT USER DEAD. JSB CLOCK SET UP FOR RESTART. * EXIT JSB EXEC TERMINATE. DEF *+2 DEF B6 * SKP * * SUBROUTINE TO TEST WHETHER USER PROGRAM IS IN OPERATOR SUSPEND LIST. * * CALLING SEQUENCE: * (QENT) = ADDR OF QUEUE ENTRY. * JSB ALIVE * RETURN 1: USER NOT OP SUSPENDED (DEAD). * RETURN 2: USER IN OPERATOR SUSPEND LIST. * ALIVE NOP JSB $LIBR DISABLE INTERRUPT SYSTEM. NOP * LDA QENT GET ADDR OF PROGRAM NAME ADA B2 IN USER'S ID SEGMENT. LDB A,I ADB D12 ADA B2 GET ADDR OF PROGRAM NAME STA NAME * JSB CMPAR COMPARE THE NAMES. JMP DEAD MISMATCH. * LDA TEMP2,I MATCH. GET USER STATUS. AND B17 CPA B6 * ISZ ALIVE PROGRAM IS OP SUSPENDED. DEAD JSB $LIBX PROGRAM IS DEAD. DEF ALIVE * * FIND ENTRY IN WAIT-LIST, SET CLOCK TIME FOR * IMMEDIATE EXECUTION, AND SCHEDULE @CLCK. * CLOCK NOP JSB $LIBR NOP * LDA %LIST ADDR OF WAIT-LIST. LDB A,I STB TEMP NEGATIVE # ENTRIES. ADA B2 STA TEMP2 ADDR OF 1ST PROGRAM NAME. * SKP CLCK1 LDA MD3 STA TEMP3 COUNTER FOR COMPARE. LDA QENT ADA B4 STA TEMP1 ADDR OF PROG NAME IN QUE ENT. LDB TEMP2 ADDR OF PROG NAME IN WAIT-LIST. * CLCK2 LDA TEMP1,I COMPARE NAMES. CPA B,I INB,RSS JMP MISS MISMATCH. ISZ TEMP1 ISZ TEMP3 JMP CLCK2 * LDB TEMP2 MATCH. ADB MD1 CCA SET CLOCK TIME TO -1. STA B,I CLCK3 JSB $LIBX DEF CLOCK * MISS LDA TEMP2 GO TO NEXT ENTRY IN WAIT-LIST. ADA B5 STA TEMP2 ISZ TEMP JMP CLCK1 JMP CLCK3 IGNORE IF NOT FOUND. * * MASTER PTOPC PARMB RECEIVED. * PTOPC LDA RBUFD GET ADDR OF PROG NAME. ADA B5 STA NAME * LDA IRBUF+2 GET FUNCTION CODE. AND B7 CPA B1 RSS JMP PSTAT PREAD/PWRIT/PCONT. * * POPEN PARMB. SCHEDULE THE SLAVE PROGRAM. * LDB %CSID ANY SLAVE PROG ACTIVE? SZB,RSS JMP PSCHD NO. * ADB D15 YES. ALIVE? LDA B,I STATUS WORD OF ID SEG. AND B17  SZA JMP SAME CURRENTLY ALIVE. * SKP JSB $LIBR PREVIOUS SLAVE PROG WAS ABORTED: NOP CLEAR MAILBOX FLAG. CLA STA %MFLG JSB $LIBX DEF *+1 DEF PSCHD GO SCHEDULE NEW SLAVE. * SAME LDA RBUFD CHECK IF POPEN IS FOR CURRENTLY ADA B5 RUNNING SLAVE PROGRAM. LDB %CSNM JSB CMPAR COMPARE NAMES JMP FLGUP MISMATCH. ERROR. JMP PTPQ MATCH. * PSCHD JSB EXEC ATTEMPT TO SCHEDULE. DEF *+3 DEF SD10 WITHOUT WAIT. NAME NOP NAME OF SLAVE PROGRAM * NOP IGNORE ERROR RETURN. LDB MD41 CPA AS.SC CHECK SCHEDULE STATUS. JMP REJRQ NO SUCH PROGRAM. JMP PTPQ NOW (OR WAS) SCHEDULED. * * PREAD/PWRIT/PCONT:PCLOS: * FIND CURRENT STATUS OF SLAVE PROGRAM. * PSTAT LDB IRBUF+5 GET ADDR OF ID SEGMENT ADB D12 STB NAME ADDR OF PROG NAME. ADB B3 LDA B,I STATUS WORD. AND B17 LDB MD45 SZA,RSS JMP REJRQ PROGRAM IS DEAD. * * PLACE PTOPC PARMB IN MAILBOX. * PTPQ LDA RBUFD ADDR OF PARMB. JSB @PTPQ JMP FLGUP * SKP * RESTART USER IF IN OPERATOR SUSPEND LIST. * LDA %CSID GET ID SEGMENT ADDRESS. ADA D15 LDA A,I AND B17 CPA B6 JMP *+2 JMP EXIT NOT OP SUSPENDED. * JSB $LIBR RESTART THE PROGRAM. NOP LDB $DWRK ADDR OF "WORK" IN SCHEDULER. SSB,RSS JMP *+3 ELB,CLE,ERB LDB B,I * LDA %CSID SET-UP FOR $LINK CALL: STA B,I "WORK" INB STA B,I "WLINK" INB ADA B6 STA B,I "WPRIO". * ADA D9 SET STATUS WORD IN CLB,INB ID SEG = SCHEDULED. STB A,I * JSB $LINK REMOVE USER FROM B6 OCT 6 OP SUSP LIST AND OCT 1 ADD TO "$"SCHEDULE LIST. * JSB $LIBX TERMINATE. DEF *+1 DEF EXIT * FLGUP LDB MD42 * SKP * SEND REJECT REPLY BACK TO CENTRAL. USE IRBUF. * REJRQ STB IRBUF+3 STORE ERROR CODE. LDA IRBUF+2 AND B377 IOR RJBTS STA IRBUF+2 STORE FLAG WORD. * SNREJ LDA IRBUF SET REPLY BIT, IOR RPLFL AND FRIENDLY-SATELLITE BIT(#11). STA IRBUF * JSB EXEC SEND REPLY. DEF *+7 DEF B2 DEF %LU DEF IRBUF DEF IRBFL DEF DUMMY DEF DUMMY * JMP EXIT SPC 3 * * COMPARE 3 WORDS CMPAR NOP DST TEMP1 LDB MD3 LOOP1 LDA TEMP1,I CPA TEMP2,I MATCH? RSS YES JMP CMPAR,I NO, RETURN+1 ISZ TEMP1 ISZ TEMP2 INB,SZB JMP LOOP1 ITERATE ISZ CMPAR JMP CMPAR,I RETURN+2 SKP * * CONSTANTS AND WORKING STORAGE. * B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B7 OCT 7 B17 OCT 17 B377 OCT 377 D9 DEC 9 EQT12 NOP DUMMY NOP SD10 OCT 100012 D12 DEC 12 D15 DEC 15 MD1 DEC -1 MD3 DEC -3 MD35 DEC -35 MD41 DEC -41 MD42 DEC -42 MD45 DEC -45 TEMP NOP TEMP1 DEC 0,0 TEMP2 EQU TEMP1+1 TEMP3 NOP $DWRK DEF $WORK RPLFL OCT 44000 RJBTS OCT 100000 AS.RQ ASC 1,RQ AS.SP ASC 1, D@RQP ASC 3,@RQPR AS.SC ASC 1,SC RBUFD DEF IRBUF IRBUF BSS 35 IRBFL DEC 35 * SIZE EQU * * END @INTR $ $ / 91705-18107 1614 S 0122 DS1/B SCE/5 MODULE: @RQPR              H0101 aASMB,R,L,C HED @RQPR-PROCESS CENTRAL'S REQUESTS. *(C) HEWLETT-PACKARD CO. 1976* NAM @RQPR,1,2 91705-16107 REV.A 760401 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * * @RQPR * SOURCE: 91705-18107 REV.A * BINARY: 91705-16107 REV.A * JIM HARTSELL * JULY 30, 1974 * MODIFIED BY: CHW (01-06-76) [DERIVED FROM: 91705-18007 REV.B] * * CORE RESIDENT RTE-C SATELLITE PROGRAM SCHEDULED BY * @INTR UPON RECEIPT OF A REQUEST FROM THE CENTRAL STATION. * WHEN SCHEDULED, (B) = ADDR OF REQUEST BUFFER ADDRESS. * ENT @RQPR * EXT EXEC,$LIBR,$LIBX,$MESS,$TYPE EXT %LU,%RQUE,%DLER EXT %ACT SUP A EQU 0 B EQU 1 * * MOVE PARAM VALUES TO INTERNAL BUFFER. * @RQPR LDA %RQUE GET ADDR OF PARMB. STA RQADR SAVE IT. ADA B5 LDB DV0 * JSB MOVE MOVE PARAM VALUES. MD11 DEC -11 * LDA RQADR,I CHECK FOR REMOTE CONTROL CPA B7 OF SATELLITE BY JMP RMCON CENTRAL OPERATOR. * CPA D8 JMP FRCLD FORCED-LOAD. * CPA B5 JMP DEXEC DISTRIBUTED EXEC. * LDA AS.IL RETURN "ILRQ". LDB AS.RQ JMP SAVE * FIND TYPE OF EXEC CALL AND GO EXECUTE IT. * DEXEC LDA V1 REQUEST CODE. IOR SIGN SET SIGN BIT. STA V1 USE FOR LOCAL EXEC CALLS. ELA,CLE,ERA LDB B2 CPA B1 JMP RD/WR READ FROM I/O DEVICE. LDB B1 CPA B2 JMP RD/WR WRITE ON I/O DEVICE. CPA B3 JMP CNTRL I/O CONTROL. CPA D10 JMP SCHED SCHEDULE PROGRAM. CPA D1#1 JMP TIME TIME OF DAY. CPA D12 JMP XTIME EXECUTION TIME. CPA D13 JMP STAT I/O STATUS. * * ILLEGAL REQUEST CODE. * LDA AS.RQ LDB AS.SP JMP SAVE * * READ OR WRITE SATELLITE I/O DEVICE. * RD/WR ADB SIGN ADD NO-ABORT FLAG TO REQUEST CODE. STB IRW SET FOR SEND/RECV DATA. LDB V3 CHECK LENGTH <512 WORDS. SZB,RSS IF DATA LENGTH =0, JMP RDWRT IGNORE THE COMM. LINE DATA CALL. ADB MD513 SSB,RSS JMP ERLEN ADB D1537 SSB JMP ERLEN CPA B2 JSB DATA WRITE. GET DATA FROM CENTRAL. * RDWRT JSB EXEC READ/WRITE CALL. DEF *+7 DEF V1 RCODE. DEF V2 CONTROL WORD. DEF BUF BUFFER. DEF V3 BUFFR LENGTH. DEF V4 OPT. PARM 1. DEF V5 OPT. PARM 2. NOP STA REPLY+5 SAVE A,B IN REPLY. STB REPLY+6 * LDA V1 ELA,CLE,ERA CPA B1 JSB DATA READ. SEND DATA TO CENTRAL. * JMP REP GO SEND REPLY. * * PERFORM I/O CONTROL ON SATELLITE DEVICE. * CNTRL JSB EXEC DEF *+4 DEF V1 RCODE. DEF V2 CONTROL WORD. DEF V3 OPT. PARM. * NOP JMP SAVE * * SCHEDULE A SATELLITE PROGRAM. * SCHED LDA D10 FORCE "WITHOUT WAIT". IOR SIGN STA V1 * JSB EXEC DEF *+8 DEF V1 RCODE. DEF V2 PROGRAM NAME. DEF V5 OPT. PARAMS. DEF V6 DEF V7 DEF V8 DEF V9 * NOP JMP SAVE * * GET SATELLITE REAL-TIME. * TIME JSB EXEC DEF *+3 DEF V1 RCODE. DEF REPLY+7 TIME ARRAY. * NOP JMP SAVE * * SCHEDULE SATELLITE PROGRAM AT SPECIFIED TIME. * XTIME LDA V2 IF PROG NAME = 0, SZA JMP XTIM1 LDA AS.SC "SC02" ERROR. LDB AS.0޴2 JMP SAVE * XTIM1 LDA V7 FIND WHICH VERSION. SSA,RSS JMP ABS * JSB EXEC INITIAL OFFSET VERSION. DEF *+6 DEF V1 RCODE. DEF V2 PROGRAM NAME. DEF V5 RESOLUTION CODE. DEF V6 EXECUTION MULTIPLE. DEF V7 INITIAL OFFSET. * NOP JMP SAVE * ABS JSB EXEC ABSOLUTE START TIME VERSION. DEF *+9 DEF V1 RCODE. DEF V2 PROGRAM NAME. DEF V5 RESOLUTION CODE. DEF V6 EXECUTION MULTIPLE. DEF V7 HOURS. DEF V8 MINUTES. DEF V9 SECONDS. DEF V10 TENS OF MILLISECONDS. * NOP JMP SAVE * * GET I/O STATUS OF SATELLITE I/O DEVICE. * STAT JSB EXEC DEF *+5 DEF V1 RCODE. DEF V2 CONTROL WORD. DEF REPLY+7 STATUS WORD 1. DEF REPLY+8 STATUS WORD 2. * NOP JMP SAVE * ERLEN LDA AS.DS ILLEGAL LENGTH. LDB AS.03 * * SAVE A,B REGISTERS IN REPLY BUFFER. * SAVE STA REPLY+5 STB REPLY+6 * * COPY HEADER WORDS FROM PARMB TO REPLY. * REP LDA RQADR PARMB IS IN @PTPQ MODULE. LDB DFREP JSB MOVE DEC -5 * * SEND REPLY TO CENTRAL STATION. * SNREP LDA REPLY SET REPLY AND IOR RPLFL FRIENDLY BITS(#14,#11). STA REPLY LDA MD11 INITIALIZE THE STA RTRY RETRY COUNTER. LDB RQADR GET ADDRESS OF THE REQUEST BUFFER. ADB D33 POINT TO THE TIME-TAG WORD. DLD B,I GET THE ORIGINAL TIME-TAGS, DST REPLY+33 AND ADD THEM TO THE REPLY. * SEND JSB EXEC TRANSMIT REQUEST ONLY. DEF *+7 DEF IWRT WRITE--NO ABORT. DEF %LU DEF REPLY DEF D35 DEF DUMMY DEF DUMMY JMP DOWN REPORT THE ERROR--IF ANY. * DST XSTAT (DEBUG AID ONLY) SLA,RAR JMP REXIT NOҔ ERRORS. * SWP AND B40 ISOLATE EQT12 BIT#5 (REMOTE BUSY). CLE,ERB MOVE BUSY-REJECT BIT(EQT5 #1) TO . SEZ,SZA,RSS BUSY-REJECT/REMOTE BUSY OR BOTH? JMP DOWN NEITHER--DRIVER ERROR! SEZ,RSS WAS THE REMOTE SYSTEM BUSY? JMP BZWT YES. GO TO WAIT ONE SECOND. LDB MD8 80 MSEC DELAY IF DRIVER BUSY SZA,RSS WAS IT SIMULTANEOUS REQUEST? JSB WAIT NO, DRIVER BUSY, WAIT AWHILE JMP SEND RETRY * BZWT ISZ RTRY O.K. TO RE-TRY? RSS YES. DO SO VIA TIME LIST. JMP DOWN NO. REPORT THE ERROR! LDB MD100 1 SEC DELAY JSB WAIT JMP SEND TIME'S UP--TRY AGAIN. * SKP * DOWN JSB EXEC DEF *+5 DEF B2 DEF B1 DEF DSMES DEF DSLEN * * EXIT. * REXIT JSB EXEC TERMINATE. DEF *+2 DEF B6 * DSMES ASC 11,DS01 RQPR: REPLY ERROR * * THE CENTRAL OPERATOR HAS SENT AN ASCII RTE-C COMMAND. * PROCESS THE COMMAND THRU RTE-C AS IF IT WAS ENTERED * FROM THE LOCAL OPERATOR CONSOLE, AND SEND ANY REPLY * MESSAGES BACK TO CENTRAL. * RMCON BSS 0 IF SATELLITE OPERATOR IS LDB OPFLG,I CURRENTLY ENTERING A COMMAND, SZB,RSS REJECT CENTRAL OPERATOR. JMP CLJOB * LDA BZYMS LDB DFREP ADB B6 JSB MOVE DEC -6 LDA D12 JMP STLEN * CLJOB JSB JOB PROCESS COMMAND. STLEN STA REPLY+5 STORE +CHAR COUNT IN REPLY. CLA,INA STA REPLY+4 SET REPLY SWITCH. LDA RQADR RETURN SUB-STREAM. INA LDA A,I STA REPLY+1 LDA B7 STORE STREAM. STA REPLY * JMP SNREP GO SEND REPLY. * SKP * CENTRAL HAS SENT A FORCED-LOAD OR PLIST REQUEST. * SCHEDULE APLDR WITH WAIT, THEN SEND REPLY. * FRCLD LDA D9 IOR SIGN STA V5 * JSB EXEC SCHEDULE APLDR WITH WAIT. DEF *+8 DEgF V5 DEF APLDR DEF V0 SCHED PARAMS. DEF V1 DEF V2 DEF V3 DEF V4 * NOP STA REPLY+5 SAVE A,B IN REPLY. STB REPLY+6 * SZA,RSS IF APLDR NOT DORMANT, JMP STATS LDA MD70 SEND BUSY ERROR CODE. STA REPLY+7 JMP SCAN * STATS LDA %DLER STORE APLDR ERROR NUMBER LDB DFREP IN REPLY BUFFER. ADB B7 JSB MOVE DEC -4 * * DON'T SEND REPLY IF A PARMB IS PENDING. * SCAN LDA %ACT HEAD OF ACTIVE LIST. LOOP2 LDA A,I ADDR OF NEXT ENTRY. SZA,RSS JMP REP NO PARMB PENDING. * STA V10 SAVE ENTRY ADDRESS. INA LDA A,I FLAG WORD. CPA B2 JMP DELY ENTRY IS PENDING. LDA V10 NOT PENDING. JMP LOOP2 GO TO NEXT ENTRY. * DELY LDB MD1 SUSPEND FOR SHORT TIME. JSB WAIT JMP SCAN GO LOOK AGAIN. * WAIT NOP STB OFSET JSB EXEC DEF *+6 DEF D12 DEF B0 DEF B1 DEF B0 DEF OFSET * CPB OFSET JMP WAIT,I JMP @RQPR * OFSET NOP * SKP * * SUBR TO PASS COMMAND TO RTE-C AS IF ENTERED LOCALLY. * JOB NOP JSB $LIBR DISABLE INTERRUPTS. NOP LDA JOB LDB HERE SZB,RSS JMP THERE CLA JSB $LIBX DEF *+1 DEF EXIT THERE STA RTN LDB 1735B SZB JMP EXIT1 STA HERE STA JOB LDA RQADR ADA B6 STA PNTR1 LDA TYPE SSA,RSS JMP *+3 ELA,CLE,ERA LDA A,I ADA MD22 STA PNTR2 LDA V0 CMA,INA ARS STA CNTR JSB XFER LDB V0 JSB $MESS SZA,RSS JMP EXIT LDB A,I STB SAVE1 ADB MD1 BRS STB CNTR INA STA PNTR1 LDA DFREP ADA B6 STA PNTR2 JSB XFER LDA SAVE1 CMA,INA EXIT CLB STB HERE EXIT1 JSB $LIBX DEF RTN XFER NOP LOOP1 LDA PNTR1,I STA PNTR2,I ISZ PNTR1 ISZ PNTR2 ISZ CNTR JMP LOOP1 JMP XFER,I RTN NOP HERE NOP TYPE DEF $TYPE * * SUBROUTINE TO SEND OR RECEIVE DATA. * DATA NOP LDA RQADR PARMB ADDRESS ADA D33 POINT TO TIME-TAGS STA TITAG SAVE THEIR ADDRESS INA ADDRESS FOR THE STA TITAG+1 DATA ONLY DRIVER CALL LDA B300 GET DRIVER MODE-BITS FOR DATA-ONLY. IOR %LU INCLUDE THE LOGICAL UNIT NUMBER. STA CONWD SAVE THE CONFIGURED CONTROL WORD. LDA V3 GET BUFFER LENGTH. STA XBUFL SSA,RSS JMP DATA1 CMA,INA NEGATIVE. MAKE POSITIVE INA WORD COUNT. ARS STA XBUFL * DATA1 JSB EXEC DEF *+7 DEF IRW READ WRITE--NO ABORT. DEF CONWD DEF BUF DEF XBUFL TITAG NOP NOP JMP DATER DRIVER ERROR--INFORM CENTRAL. * SLA JMP DATA,I RETURN IF NO ERRORS. * DATER LDA AS.DS ERROR. RETURN "DS02". LDB AS.02 JMP SAVE * * SUBROUTINE TO MOVE N WORDS. * MOVE NOP DST BUF LDB MOVE,I GET COUNT LOOP LDA BUF,I STA BUF+1,I ISZ BUF ISZ BUF+1 INB,SZB JMP LOOP ISZ MOVE JMP MOVE,I SKP * * CONSTANTS AND WORKING STORAGE. * DV0 DEF V0 V0 NOP # PARAMS IN USER CALL. V1 NOP REQUEST CODE. V2 NOP V3 NOP V4 NOP V5 NOP V6 NOP V7 NOP V8 NOP V9 NOP V10 NOP * B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B5 OCT 5 B6 OCT 6 B7 OCT 7 B40 OCT 40 B300 OCT 300 IWRT OCT 100002 CONWD NOP D8 DEC 8 D9 DEC 9 D10 DEC 10 D11 DEC 11 DSLEN EQU D11 D12 DEC 12 D13 DEC 13 D33 DEC 33 D35 DEC 4*($35 D1537 DEC 1537 DUMMY NOP MD1 DEC -1 MD8 DEC -8 MD22 DEC -22 MD70 DEC -70 MD100 DEC -100 MD513 DEC -513 OPFLG OCT 1735 AS.SC ASC 1,SC AS.DS ASC 1,DS AS.02 ASC 1,02 AS.03 ASC 1,03 AS.IL ASC 1,IL AS.RQ ASC 1,RQ AS.SP ASC 1, APLDR ASC 3,APLDR BZYMS DEF *+1 ASC 6,REMOTE BUSY RQADR NOP IRW NOP XBUFL NOP RPLFL OCT 44000 SIGN OCT 100000 RTRY NOP XSTAT OCT 0,0 DFREP DEF REPLY REPLY BSS 35 BUF BSS 512 PNTR1 EQU BUF PNTR2 EQU BUF+1 CNTR EQU BUF+2 SAVE1 EQU BUF+3 * SIZE EQU * * END @RQPR #* % 1 91705-18108 1609 S 0222 DS1/B SCE/5 MODULE: APLDR              H0102 YASMB,R,L,C HED APLDR 91705-16108 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM APLDR,1,60 91705-16108 REV A 760224 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * * APLDR * SOURCE: 91705-18108 REV.A * BINARY: 91705-16108 REV A * E. WONG, J. HARTSELL * JULY 30, 1974 * * MODIFIED BY: JEAN-PIERRE BAUDOUIN * DATE MODIFIED: DEC 1975 * * * RTE-C APLDR FOR SATELLITE OPERATION * ENT APLDR EXT EXEC,$LIBR,$LIBX,$PVCN EXT DEXEC,%LU,$XSIO,$LIST,$XEQ EXT %DNLD,%DLER,%PRMB SUP * A EQU 0 B EQU 1 KEYWD EQU 1657B BPA1 EQU 1742B BPA2 EQU 1743B RTORG EQU 1746B RTCOM EQU 1747B AVMEM EQU 1751B BKLWA EQU 1777B SUP * * THIS VERSION OF APLDR WILL DOWN-LINK LOAD A PROGRAM * FILE FROM CENTRAL IF THE LO COMMAND CONTAINS A FILE/PROG * NAME AND LU = 0. IF SCHEDULED FROM CENTRAL, THE SIGN * BIT OF PARAMETER 1 MUST BE SET. * * APLDR IS SCHEDULED BY THE SYSTEM WHEN OPERATOR INPUTS * ONE OF THE FOLLOWING: * PL,LU * LO,PNAME,LU,FL,KB * RP,PNAME,LU,FL,KB * * THE SCHEDULE CALL PASSES THE PARAMETERS IN THE FOLLOWING * ORDER: * P1 - KEYBOARD LU # / FUNCTION CODE * P2 - FILE NUMBER / INPUT-OUTPUT LU # * P3 - CHARACTER #1 / CHARACTER #2 * P4 - CHARACTER #3 / CHARACTER #4 * P5 - CHARACTER #5 / CHARACTER #6 * * WHERE FUNCTION CODE IS: * 0 - PROGRAM LIST * 1 - LOAD PROGRAM * 2 - REPLACE PROGRAM * * * * APLDR LDA DKBFN GET ADDR OF BUFFER STA TEMP1 SAVE TEMPORARILY LDA MD5 5 STA TEMP2 RMPLP LDA B,I GET PARAM FROM ID SEG STA TEMP1,I SAVE IN BUFFER INB ISZ TEMP1 ISZ TEMP2 JMP RMPLP * CLA LDB FILLU GET FILE NO.&I/O LU LSR 8 SAVE LEFT HALF STB FILE AS FILE NUMBER. * ALF,ALF SAVE RIGHT HALF STA LU AS I/0 LU. * CLA LDB KBFUN GET KYBD UNIT AND FUNC RRL 1 SIGN BIT SET IF SCHEDULED XOR B1 FROM CENTRAL. SET IDEST. STA IDEST CLE,ERB LSR 8 SAVE LEFT HALF SZB,RSS IF ZERO, LDB CONSL USE DEFAULT STB KYBDU AS KEYBOARD UNIT. * ALF,ALF GET FUNC FROM RIGHT HALF SZA,RSS IS IT LIST? 0 JMP LIST CPA B1 IS IT LOAD? 1 JMP LOAD CPA B2 IS IT REPLACE? 2 JMP REPL JMP ABORT NO, IT IS ERROR. * DKBFN DEF KBFUN MD5 DEC -5 * HED APLDR: LO PGM * (C) HEWLETT-PACKARD CO. 1976 LOAD CLA STA CBUSY LDB %DLER CLEAR ERROR NUMBER. JSB SYSET JSB RMCHK CHECK REMOTE/LOCAL LOAD. JMP LOAD1 LOCAL DEVICE. * LDA NAM12 CENTRAL FILE. STA FLNAM SAVE ALL 6 CHAR AS FILE NAME. LDA NAM34 STA FLNAM+1 LDA NAM50 STA FLNAM+2 * LDA MD5 BLANK TRAILING ASTERISKS IN STA TEMP1 PROGRAM NAME PORTION (FIRST LDA DFNAM 5 CHARACTERS). STA TEMP CCE * LOOP LDA TEMP,I PROGRAM NAME. SEZ ALF,ALF AND B377 CPA B52 CHECK NEXT CHAR FOR "*". RSS JMP BUMP * LDA D10 FOUND. CONVERT TO BLANK., SEZ ALF,ALF XOR TEMP,I STA TEMP,I * BUMP SEZ,RSS GO TO NEXT CHARACTER. ISZ TEMP CME ISZ TEMP1 JMP LOOP * LOAD1 LDA NAM12 IF NO NAME GIVEN SZA,RSS SKIP DUPLIC NAME JMP NODUP  CHECKING JSB RMCHK SKIP CHECK UNTIL LATER JMP *+2 JMP NODUP IF REMOTE LOAD. JSB DUPID CHECK IF DUPLICATE DEF NAM12 ID NAME. * NODUP JSB STRID NOT DUPLI, FIND LOAD2 JSB SRCID A BLANK DFNUL DEF ZERO ID SEG. JMP LOADD NO BLANK ID SEG. JMP LOAD2 KEEP LOOKING. STA CURID GOT IT, SAVE ADDR. * LOAD3 JSB IHILO INIT HI,LO ADDRS LDA DWRD1 INIT SPEC REC STA WORD1 DUMMY ID ADDR. LDA DWRD2 STA WORD2 LDA RSS INITIALIZE SWITCH STA ABS12 FOR SPEC. REC. STA LDRCT INIT LEADER COUNT STA IDOFS INDICATE NO ABS YET. * JSB RMCHK LEAVE LU ALONE IF JMP *+2 DOWN-LINK LOAD. JMP ABS0 * LDA LU GET LU PARAM, SZA,RSS IF ZERO LDA DINPT USE DEFAULT IOR B2300 FOR THE ABS STA LU INPUT UNIT. * * * * READ ABSOLUTE RECORD * * ABS0 JSB RMCHK CHECK FOR REMOTE/LOCAL INPUT. JMP ABS03 LOCAL. * CLA SIGNAL NEW LOAD. STA TEMP LDA %LU LU OF CENTRAL. STA RMLU LDA XEQT,I ID SEG ADDR OF APLDR. STA IDSEG * ABS01 JSB %DNLD REQUEST CORE IMAGE RECORD. DEF *+5 DEF TEMP STATUS. DEF ABSAD ADDR OR ERROR CODE. DEF ABSSZ RETURNED SIZE. DEF FLNAM CENTRAL FILE NAME. * LDA ABSAD SET UP CORE ADDR FOR DATA READ. STA CADR LDA TEMP CHECK FOR ERRORS. SSA,RSS JMP ABS02 NONE. * CPA M2 JMP FMPER ERROR FROM CENTRAL FMP. CPA M3 JMP STNBY CENTRAL BUSY. JMP ABS02 * FMPER LDA ERR05 FMP ERROR. LDB ABSAD CPB M6 LDA ERR03 LDB DFILE JSB ERROR JMP ABORT * STNBY LDA CBUSY ALREADY DISPLAYED MESSAGE? SZA JMP ABS01 YES. LDA ERR06 NOO. LDB DFILE JSB ERROR CLA,INA STA CBUSY JMP ABS01 GO TRY AGAIN. * ABS02 CPA B1 CORE IMAGE RECORD COMING? JMP ABS1 YES. CHECK BASE-PAGE/RT AREA BOUNDS. * LDB SBUF POINT TO SPECIAL RECORD AREA. STB CADR CPA B2 ID SEGMENT COMING? JMP ABS10 YES. WON'T COME BACK FOR MORE. * JMP IDERR DONE, BUT NO ID SEG RECEIVED. * ABS03 JSB DEXEC MAKE REQUEST DEF *+6 TO DEF IDEST DEF B1 READ DEF LU ABS RECORD DEF ABSBF INTO BUF DEF D64 OF MAX SIZE. * AND B240 CHECK FOR EOF/EOT SZA,RSS IS IT EOF? JMP ABS0A NO LDA LDRCT YES, IS IT SZA,RSS JUST LEADER? JMP LOAD5 IS EOF. JMP ABS0 IGNORE LEADER * ABS0A SZB,RSS ANYTHING TRANSMITTED? JMP ABS0 NO * STA LDRCT SET LDRCT FOR EOT LDB ABSCT GET WORD COUNT. BLF,BLF SHIFT TO LOW BITS STB ABSSZ SAVE REC SIZE CMB,INB STB TEMP1 SAVE NEG COUNT LDB ABSAD GET ADDR, START CKSM. LDA DABSD STA TEMP2 SET DATA ADDR. ABS0B LDA TEMP2,I GET A WORD ADB A ADD TO CKSM ISZ TEMP2 BUMP TO NEXT ISZ TEMP1 BUMP COUNT JMP ABS0B REPEAT TIL DONE. * LDA TEMP2,I CPA B COMPARE CKSMS JMP ABS1 MATCHES LDB ERR10 CHECKSUM ERROR- JMP ERPR4 ERR MSG THEN ABORT * * * * FIND WHERE ABSOLUTE RECORD FITS IN CORE * * ABS1 LDA ABSAD OK, SO FETCH ADDR CPA B2 IS IT SPECIAL RECORD? JMP ABS12 YES AND BPMSK IS IT BASE PAGE? CPA ABSAD JMP ABS2 YES, BASE PAGE. * LDA RTORG GET DEFAULT LOWEST ADDR STA TEMP LDA AVMEM GET DEFAULT HIGHEST ADDR STA TEMP1 LDA DMAIN GET PTRS TO MAIN HI/LO LDB D22 SET OFFSET FOR MAIN JMP ABS3 ADDRS IN ID SEG. * ABS2 LDA BPA1 GET DEFAULT LOWEST ADDR STA TEMP LDA BPA2 GET DEFAULT HIGHEST ADDR STA TEMP1 LDA DBASE GET PTRS TO BASE HI/LO LDB D24 SET OFFSET FOR BASE PAGE * * * * FIND THE HI AND LO MEMORY BOUNDS OF FREE CORE * * ABS3 STB IDOFS SAVE OFFSET TO GET ADDRS STA TEMP4 SAVE ADDR OF LFREE ADA B2 STA TEMP5 SAVE ADDR OF HFREE LDA TEMP CMA,INA CHECK IF ABS REC < FWABP USER LINKS ADA ABSAD SSA JMP ABS14 ABS < FWABP, ERROR LDA ABSAD ADA ABSSZ CMA,INA CHECK IF ABS REC > LWAM USER SPACE ADA TEMP1 SSA JMP ABS14 ABS > LWAM, ERROR LDA TEMP4,I CPA TEMP RSS ADDRS ALREADY SET? JMP ABS6 YES, SKIP SEARCH FOR HI/LO * JSB STRID INIT ID SEARCH. ABS4 JSB SRCID SEARCH EACH ID DEF ZERO EXCEPT BLANK ONES, JMP ABS6 FOR THE HI/LO RSS RSS ADDRS WHICH JMP ABS4 DEFINE FREE CORE. CPA CURID IS THIS ID FOR PRG? JMP ABS4 YES, IGNORE THIS ID BOUNDS ADA IDOFS STA TEMP SET ADDR OF ID ADDR. * CMA CHECK IF ID SEG > 22 WORDS ADA ADRID,I SSA JMP ABS4 NEG, IGNORE IF RTE ID SEG. CLA STA TEMP1 CLEAR OVERLAP FLAG * LDA TEMP,I GET ID LOW CMA,INA ADA ABSAD IS ID LOW > ABS REC? SSA JMP ABS4B LOW>ABS, CHECK MORE ISZ TEMP1 LOW<=ABS, CHECK IF OVERLAP JMP ABS5 BY CHECKING IF HI>=ABS * ABS4B LDA TEMP,I GET ID LOW AGAIN CMA SUBTRACT IT ADA TEMP5,I FROM LAST HFREE SSA AND JMP ABS5 IF IT IS LDA TEMP,I LOWER THEN KEEP IT DST TEMP5,I AS NEW HFREE * |ABS5 ISZ TEMP LDA TEMP,I GET ID HIGH ADDR CMA,INA ADA ABSAD SSA,RSS ID HIGH < ADDR OF REC? JMP ABS5B HI<=ABS, CHECK MORE CLA,INA HI>ABS, MIGHT OVERLAP CPA TEMP1 DOES ABS OVERLAP? JMP ABS13 YES, GIVE OF ERR JMP ABS4 NO, IGNORE * ABS5B LDA TEMP,I GET ID HI CMA,INA SUBTRACT IT ADA TEMP4,I FROM LAST LFREE SSA,RSS AND IF IT IS JMP ABS4 LDA TEMP,I HIGHER, WE KEEP IT DST TEMP4,I AS NEW LFREE JMP ABS4 REPEAT FOR EACH ID * * * * ALREADY GOT MEMORY BOUNDS; SEE IF ABS CAN FIT * * ABS6 LDA ABSAD GET ADDR OF ABS REC LDB ABSSZ ADB A GET ADDR OF END OF ABS REC JSB CKBND CHECK BOUNDS WITH LFREE,HFREE JMP ABS13 ERROR. * * * * COPY ABS RECORD TO CORE IF WITHIN BOUNDS * * ABS10 JSB RMCHK CHECK FOR REMOTE/LOCAL INPUT. JMP AB10A LOCAL. * LDA %PRMB PARMB ADDRESS ADA D33 ADDR OF TIME-TAGS STA TAGAD PASS AS 2ND OPT. PARAM * JSB $LIBR SWITCH TO PRIVILEDGED MODE. NOP * LDA ABSSZ SET UP DATA LENGTH. STA ABLEN * CLA PRIVILEDGED MODE. STA $PVCN LDA DEFX SET UP SUSPENSION ADDR. STA XSUSP,I * JSB $XSIO READ CORE IMAGE RECORD. RMLU NOP LU OF CENTRAL. DEF COMPL NOP LIST POINTER. OCT 301 READ. CADR NOP "BUFFER" - BASE PG OR RT AREA. ABLEN NOP WORD LENGTH. RSS RETURN POINT TAGAD NOP 2ND OPT. PARAMETER= TAGS ADDRESS * LDA B102 SET UP FOR I/O SUSPEND. STA FCNCD XLIST JSB $LIST CALL LIST PROCESSOR. FCNCD OCT 0 FUNCTION CODE. IDSEG NOP ID SEG ADDR OF APLDR. * JMP $XEQ GIVE UP CPU. * COMPL LDA B101 SET UP FOR SCHEDULE LIST. STA FCNCD JMP XLIST * RETN CLA,INA SIGNAL CONTINUING LOAD. STA TEMP * LDA CADR IF THIS WAS DUMMY ID SEG, CPA SBUF JMP ABS12 CALL IT QUITS, ELSE JMP ABS01 GO GET MORE DATA. * AB10A LDA ABSSZ SET UP ABSSZ CMA,INA FOR TRANSFER STA TEMP OF RECORD. LDA DABSD SET UP BUFFER STA BADDR ADDR OF DATA WORDS. LDB ABSAD SET UP CORE ADDR. ABS11 LDA BADDR,I GET A DATA WORD. JSB SYSET PUT INTO CORE. INB ISZ BADDR ISZ TEMP JMP ABS11 REPEAT UNTIL DONE. JMP ABS0 GO GET ANOTHER RECORD * * * * PROCESS SPECIAL TRAILER RECORDS. * * ABS12 RSS NOP-ED AFTER 1ST ENTRY.! JMP AB12D SO ONLY DO THIS ONCE. LDA MD28 STA TEMP1 SET COUNTER LDB DDMID TO CLEAR OUT CLA AB12A STA B,I SPECIAL RECORDS INB ISZ TEMP1 JMP AB12A STA ABS12 NOP SWITCH * JSB RMCHK CHECK FOR REMOTE/LOCAL LOAD. JMP AB12D LOCAL. * LDA SBUF REMOTE: THE 18-WORD SPECIAL RECORD STA ABSD1 HAS BEEN READ. LDA M9 STA TEMP1 AB12B DLD ABSD1,I MOVE TO DUMMY ID SEG AREA. STA WORD1,I STB WORD2,I ISZ ABSD1 ISZ ABSD1 ISZ WORD1 ISZ WORD2 ISZ TEMP1 JMP AB12B JMP LOAD6 GO WIND IT UP. * AB12D DLD ABSD1 PICK UP 2 DATA WORDS STA WORD1,I PUT 1ST INTO DUMMY ID. STB WORD2,I PUT 2ND INTO DUMMY ID. ISZ WORD1 BUMP DUMMY ID ISZ WORD2 LOCATIONS. JMP ABS0 * * * * REACHED END-OF-FILE ON PROGRAM INPUT * * LOAD5 LDB IDOFS CHECK IF ANY ABS CPB RSS WAS READ YET. JMP IDERR ERROR IF NONE. LDA WORD1 SPEC REC MUST BE AT END CPA DWRD2 WAS IT THERE? JMP LOAD6 YES. IDERR LDA B5 NO. LDB ERR13 NO SPECIAL RECORDS, JMP ERPR4 PRINT ERR MSG/ABORT * LOAD6 DLD NAM12 NAME GIVEN IN COMMAND? SZA,RSS JMP LOAD7 NO, USE NAME FROM SPEC REC DST PNM12 YES, USE NAME FROM COMMAND LDA NAM50 GET 5TH CHAR STA PNM50 JSB RMCHK IF REMOTE LOAD, CHECK NAME NOW. JMP LOAD8 LOCAL. DID DUP CHECK ALREADY. JSB DUPID REMOTE. NAME GIVEN IN COMMAND. DEF NAM12 JMP LOAD8 LOAD7 JSB DUPID NAME GIVEN IN SPECIAL RECORD, DEF PNM12 CHECK FOR DUPLICATE. * LOAD8 LDB SZCOM GET SIZE OF COMMON SZB,RSS JMP LOD8A SKIP CHECK IF NO COMMON LDA FWAC GET FWA COMMON CMA SUBTR FROM ADA RTORG FWA REAL-TIME COMMON SSA,RSS FWACAVMEM? JMP LOADE YES, ERROR. * LOD8A LDA DMAIN GET FREE AREA POINTERS STA TEMP4 FOR THE MAIN AREA DLD PRGMN GET FINAL BOUNDS OF PROG JSB CKBND SEE IF FIT. (IN CASE BSS USED) JMP LOADC ERROR. * LDA DBASE GET FREE AREA POINTERS STA TEMP4 FOR THE BASE PAGE AREA DLD PRGBP GET FINAL BOUNDS OF PROG JSB CKBND SEE IF FIT. (IN CASE BSS USED) JMP LOADC ERROR. * * * * MOVE ID SEGMENT TO SYSTEM AREA * * LOD8B LDA PNM50 GET 5TH CHAR AND LHALF MASK OUT TYPE INA FORCE TO TYPE 1 STA PNM50 LDA MD28 DONE LOAD, COPY ID SEG. STA TEMP SET UP COUNT. LDA DDMID SET UP ADDR STA BADDR FOR DATA WORDS. LDB CURID SET ADDR FOR CORE LOC. JMP *+3 DON'T MOVE LINKAGE WORD * LOAD9 LDA BADDR,I JSB SYSET MOVE A WORD TO ID SEG INB ISZ BADDR ISZ TEMP JMP LOAD9 REPEAT TILL DONE. * LDA MSG1+1 SET UP DONE STA BUF MESSAGE WITH LDA MSG1+2 PROG NAME STA BUF+1 LDA DASH INSERT DASH. STA BUF+2 LDB DWRD1+1 GET ADDR OF PROG NAME LDA LINE2 GET ADDR IN MSG FOR NAME INA CLE JSB MVNAM MOVE NAME TO MSG LDA D10 STA TEMP3 JSB DSPLA DISPLAY MESSAGE JMP STOP END APLDR. * * * ERROR RETURNS FROM LOADING SECTION * ABS13 JSB REMER MEMORY ERROR JSB IHILO CLEAR HI,LO ADDR JSB RMCHK JMP ABS1 GO RE-ESTABLISH HI/LO. JMP ABS0 * ABS14 LDB ERR12 ABSLWAM JMP ERPR4 SO ABORT * LOADC LDA B,I GET NAM12 FROM ID SZA,RSS PROG REMOVED YET? JMP LOD8B YES. JSB REMER FINAL MEMORY ERROR JMP LOD8A CHECK AGAIN * LOADD LDA DBLNK NO BLANK STA MT.ID+1 ID SEG LDA A00 SET ZEROES IN MSG STA MT.ID+2 LDA D11 LDB MT.ID SET UP MESSAGE ERMPR JSB STUFP PRINT MESSAGE JMP ABORT THEN ABORT. * LOADE LDB ERR11 ABS USED TOO MUCH COMMON ERPR4 LDA B2 GET COUNT TO JMP ERMPR PRINT ERR MSG, ABORT SKP * **************************** * SUBROUTINES USED IN LOAD AND ABSOLUTE RECORD PROCESSORS * **************************** * * DUPID CHECKS FOR DUPLICATE PROGRAM NAME, ISSUES ERROR * MESSAGE AND ATTEMPTS TO CHANGE PROGRAM NAME. ABORTS IF * STILL NOT UNIQUE. * JSB DUPID * DEF PNAME * * DUPID NOP SEARCH FOR DUPLICATE LDA DUPID,I ID NAME. STA DUPNM SAVE ID NAME. ISZ DUPID DUP1 JSB STRID INIT ID SCANNER. DUP2 JSB SRCID FIND ID SEG DUPNM NOP WITH SAME NAME JMP DUPID,I NO DUPLICATE. JMP DUP2 REPEAT TIL DONE. LDA ERR02 DUPLIC. PROG ERR LDB DUPNM  JSB ERROR * LDA C$$ CHANGE NAME ONLY ONCE CPA DUPNM,I IF NAME ALREADY CHANGED, JMP ABORT THEN ABORT, STA DUPNM,I ELSE SEARCH AGAIN. JMP DUP1 * * **************************** * * SYSET SETS A WORD INTO A CORE LOCATION. * LDA WORD * LDB ADDR * JSB SYSET * * SYSET NOP SYSTEM WORD SETTER. JSB $LIBR TURN OFF THE NOP INTER. SYS. STA B,I STORE WORD INTO SYS. JSB $LIBX RESTORE INTER SYS DEF SYSET AND RETURN. * * *********************************** * * IHILO INITIALIZES DEFAULT HIGH AND LOW BOUNDS * OF FREE MEMORY. * JSB IHILO * * IHILO NOP INITIALIZE HI/LO ADDRS LDA BKLWA TO FIND HIGHEST STA HMAIN AND LOWEST LDA B1647 STA HBASE ADDRS OF UNUSED LDA RTORG CORE WHICH MAY BE STA LMAIN USED FOR LOADING LDA BPA1 STA LBASE ABS PROGRAMS CLA STA LMID STA HMID STA LBID STA HBID JMP IHILO,I RETURN * * ******************************* * * CKBND CHECKS PROGRAM BOUNDS AGAINST THAT OF FREE * CORE (TEMP4 POINTS TO FREE CORE POINTERS). * LDA PRGLO LOW ADDR OF CORE USED * LDB PRGHI HI ADDR * JSB CKBND * * * CKBND NOP CHECK BOUNDS OF PROG DST TEMP AGAINST BOUNDS OF FREE CORE DLD TEMP4,I GET LFREE CMA,INA SUBTR FROM ADA TEMP LOW ADDR SSA ADDR>=LFREE? JMP CKBND,I NO, ERROR * LDA TEMP4 ADA B2 DLD A,I GET HFREE CMA SUBTR FROM ADA TEMP1 HI ADDR SSA ADDR<=HFREE? ISZ CKBND RETURN TO P+2 IF NO ERROR JMP CKBND,I RETURNV TO P+1 IF ERROR * * ************************** * * REMER ISSUES "REM XXX" ERROR MESSAGE IF NEED TO REMOVE * A PROGRAM TO GET SPACE IN CORE, THEN SUSPENDS APLDR. * IF SPACE BELONGS TO THE SYSTEM, APLDR IS ABORTED. * LDB PNAME PROG WHICH MUST BE REMOVED * JSB REMER * * REMER NOP -REM XXXXX- ERROR SZB,RSS MEMORY ERROR. JMP ABS14 OUTSIDE AVAILABLE MEM LDA ERR01 GIVE -REM XXXXX- MESSAGE JSB ERROR * LDA IDEST ABORT IF SCHED BY CENTRAL. SZA,RSS JMP ABORT * JSB RMCHK IF DOWN-LOAD, SEND STOP. JMP SUSP LDA %LU GET LU AND B77 CLEAN FOR STOP STA CNWD JSB EXEC DEF *+3 DEF B3 DEF CNWD SEND STOP * SUSP JSB EXEC CALL EXEC DEF *+2 TO SUSPEND DEF B7 THE APLDR. JMP REMER,I RETURN * * ****************************** * * CHECK FOR DOWN-LINK LOAD FROM CENTRAL STATION DISC. * IF NAME GIVEN ON LO COMMAND, AND LU = 0, TAKE P+2 RETURN * (REMOTE FILE), ELSE P+1 RETURN (LOCAL DEVICE). * RMCHK NOP STA TEMP7 LDA KBFUN P+1 IF NOT LO COMMAND. AND B377 CPA B1 RSS JMP RMCK LDA NAM12 SZA,RSS JMP RMCK P+1 IF NO NAME. LDA LU SZA,RSS ISZ RMCHK P+2 IF LU = 0. RMCK LDA TEMP7 JMP RMCHK,I * * ****************************** * * MD28 DEC -28 * B52 OCT 52 ASTERISK. B101 OCT 101 B102 OCT 102 B377 OCT 377 B240 OCT 240 B1647 OCT 1647 B2300 OCT 2300 * * D24 DEC 24 D33 DEC 33 D64 DEC 64 * XEQT OCT 1717 ADDR OF ID SEGMENT ADDRESS. XSUSP OCT 101730 SUSPENSION ADDRESS. BPMSK OCT 1777 C$$ ASC 1,$$ NAME CHANGE CHAR. DASH ASC 1,- * ABSSZ NOP FILE NOP CURID NOP IDOFS NOP BADDR NOP LDRCT NOP WORD1 NOP WORD2 NOP DEFX DEF RETN POINT OF)q SUSPENSION FOR APLDR. DFILE DEF FLNAM FLNAM BSS 3 * * DO NOT CHANGE ORDER OF FOLLOWING * LMAIN NOP LMID NOP HMAIN NOP HMID NOP LBASE NOP LBID NOP HBASE NOP HBID NOP DMAIN DEF LMAIN ADDR OF HI/LO ADDR FOR MAIN DBASE DEF LBASE ADDR OF HI/LO ADDR FOR BASE PAGE * * DWRD2 DEF DWR2,I DWRD1 DEF *+1,I DUMMY ID ADDRESSES DEF PNM12 NAM12 DEF PNM50 NAM50/TYPE DEF RESML RESOL/MULT DEF HRS HR DEF SEC SEC DEF PRGMN LOW MAIN DEF PRGBP LOW BASE DEF FWAC FWA COMMON DDMYD DEF JMPXF JMP XFER * DWR2 DEF PNM34 NAM34 DEF PRIOR PR DEF SPAR1 SPARE WORD DEF MIN MIN DEF MSEC MSEC DEF PRGM2 HMAIN DEF PRGB2 HBASE DEF SZCOM SIZE COMMON DEF XFER XFER ADDR * HED APLDR: RP PGM * (C) HEWLETT-PACKARD CO. 1976 REPL LDA NAM12 IS IT A SZA,RSS BLANK NAME? JMP REPNO YES, ERROR * REP00 JSB STRID INIT ID SEARCH REP01 JSB SRCID TO FIND ID SEG DFNAM DEF NAM12 WITH SAME NAME JMP REPNO NO SUCH PROG JMP REP01 STA CURID GOT IT, SAVE ID ADDR STB TEMP SAVE ADDR OF ID NAME * JSB $LIBR TURN OFF INT. SYS. NOP ADA D8 LDA A,I POINT OF SUSPENSION SZA IS ZERO? JMP REP03 NO, SUSPEND APLDR ADB B3 LDA B,I SZA IS STATUS DORMANT? JMP REP03 NO, SUSPEND APLDR ADB B2 LDA B,I ALF,CLE,ERA SEZ IN TIME LIST? JMP REP03 YES, SUSPEND APLDR * DLD ZERO CLEAR OUT NAME DST NAM12 -IN CALL SO WE CAN STA NAM50 USE NAME FROM ABS PROG DST TEMP,I CLEAR ID SEGMENT LDB TEMP ADB B2 FOR REPLACEMENT STA B,I BY THE RP COMMAND JSB $LIBX RESTORE INT SYS DEF *+1#2NLH DEF *+1 * LDB B5 DEFAULT LU TO 5. LDA LU SZA,RSS STB LU JMP LOAD3 GO LOAD PROGRAM. * * ERROR RETURNS FROM REPLACE * REP03 JSB $LIBX RESTORE INT SYS DEF *+1 DEF *+1 LDA ERR04 PUT NAME INTO LDB DFNAM -OF XXXXX- BECAUSE JSB ERROR NON-ZERO SUSP OR T-LIST * LDA IDEST ABORT IF SCHED BY CENTRAL. SZA JMP ABORT * JSB EXEC SUSPEND APLDR DEF *+2 DEF B7 JMP REP00 TRY TO REPLACE AGAIN * REPNO LDA ERR03 NO SUCH PROG LDB DFNAM PUT NAME IN ERR MSG JSB ERROR PRINT ERR MSG JMP ABORT THEN ABORT )N HED APLDR: PL PGM * (C) HEWLETT-PACKARD CO. 1976 * LIST PROGRAMS. * LIST LDA LU GET LU PARAM. SZA,RSS IF ZERO, LDA DLIST USE DEFAULT. STA LU SET LIST UNIT. * JSB SPACE PRINT LDA D19 HEADING. LDB HEAD1 JSB PRINT JSB SPACE * LDA DBLNK SET UP OUTPUT BUFFER. STA BUF STA BUF+4 STA BUF+6 STA BUF+13 * CLA CLEAR OUT BLANK ID SEG. STA TEMP5 COUNTER. * JSB STRID INIT ID SCANNER. LIST2 JSB SRCID SEARCH ID SEGS DEF ZERO JMP LIST7 EOF JMP LIST3 NON BLANK ID SEG ISZ TEMP5 BLANK ID SEG JMP LIST2 GO SEE NEXT ONE. * LIST3 STB TEMP1 SAVE NAME ADDR STA TEMP SAVE ID ADDR LDA LINE PUT PROG NAME INA INTO LINE CLE JSB MVNAM * LDB TEMP ADB B6 GET PRIORITY LDA B,I WORD JSB DIV10 DIVIDE BY 10 STA BUF+5 * LDB TEMP ADB D22 GET PROG ADDRS. STB TEMP LDA M2 SET -2 TO GET STA TEMP4 MAIN AND BASE PAGE. LDB LINE INITIALIZE ADDR ADB B7 FOR NUMBER STUFFING. LIST4 LDA TEMP,I GET LOW ADDR. JSB CONV CONVERT TO ASCII. ISZ TEMP LDA TEMP,I GET HIGH ADDR. ADA M1 -1 TO GET REAL HIGH ADDR JSB CONV CONVERT TO ASCII. * INB LEAVE A SPACE. ISZ TEMP ISZ TEMP4 JMP LIST4 GO GET NEXT PAIR OF ADDRS. * LDA D20 LDB LINE JSB PRINT PRINT PROG INFO. * JMP LIST2 GO GET NEXT ID SEG. * LIST7 LDA TEMP5 GET # OF BLANK ID SEGS JSB DIV10 DIVIDE BY 10 STA MT.ID+2 LDA D11 LDB MT.ID JSB PRINT PRINT "# BLANK ID SEGMENTS" * DONE LDA B3 PRINT "DONE" LDB MSG1 AFTER THE "APLDR:" JMP STOP1 * ABORT LDA B4 PRINT "ABORTED" LDB ERR99 AFTER THE "APLDR:" STOP1 JSB STUFP * JSB RMCHK REMOTE OPERATION? JMP STOP NO. * LDA %DLER YES. REM,COM OR MEM ERROR? LDA A,I CPA MD60 JMP SNSTP ADA D67 SZA (-60,-67 OR -68 ERROR CODE) INA SZA JMP STOP NO. * SNSTP LDA %LU GET LU AND B77 SET FOR STOP STA CNWD JSB EXEC YES. SEND "STOP" TO REFUSE DEF *+3 DATA AND TO TELL NPRGL TO DEF B3 TERMINATE DOWN-LOAD. DEF CNWD SEND STOP * STOP JSB EXEC CALL EXEC DEF *+2 TO END DEF B6 APLDR. * SKP * SUBROUTINES FOR APLDR. * * ***************************** * * SPACE PRINTS A BLANK LINE ON LIST DEVICE. * JSB SPACE * * SPACE NOP PRINT BLANK CLA,INA LINE. LDB MSGX (B)=DUMMY BUFFER JSB PRINT JMP SPACE,I * * ***************************** * * PRINT PRINTS A LINE ON LOCAL/REMOTE LIST DEVICE. * LDA WORDS NO. OF WORDS * LDB ADDR ADDR OF TEXT * JSB PRINT * * PRINT NOP STA TEMP1 STB MADDR JSB DEXEC CALL DEXEC DEF *+6 TO PRINT DEF IDEST DEF B2 ON LIST DEVICE DEF LU MADDR NOP DEF TEMP1 JMP PRINT,I * * ******************************** * * STUFP STUFFS A MESSAGE WITH THE IDENTIFIER "APLDR:" AND * PRINTS IT ON CONSOLE. * LDA WORDS * LDB ADDR * JSB STUFP * * STUFP NOP STUFF MESSAGE INTO STB TEMP SPECIAL IDENTIFIER LDB B4 ADD 4 TO ADB A MESSAGE LENGTH STB TEMP3 FOR TOTAL LENGTH CMA,INA STA TEMP2 NEGATIVE COUNT>_. LDB MSG0 STFLP LDA TEMP,I STA B,I INB ISZ TEMP ISZ TEMP2 JMP STFLP JSB DSPLA DISPLAY MESSAGE LDA TEMP,I GET ERROR NUMBER. LDB %DLER CPA M1 JMP *+2 JSB SYSET STORE ERROR NUMBER. JMP STUFP,I RETURN * * ****************************** * * DSPLA PRINTS A MESSAGE ON THE LOCAL CONSOLE. THE MESSAGE * ADDRESS IS IN MSG AND THE WORD LENGTH IS IN TEMP3. * JSB DSPLA * * DSPLA NOP LDA IDEST DON'T DISPLAY IF SZA,RSS SCHEDULED BY CENTRAL. JMP DSPLA,I * JSB EXEC DEF *+5 DEF B2 CALL EXEC DEF KYBDU TO WRITE DEF MSG MESSAGE ON DEF TEMP3 OPERATOR CONSOLE. JMP DSPLA,I RETURN * * ****************************** * * MVNAM MOVES A PROGRAM NAME (3 WORDS) AND FILLS AN * ASCII BLANK IN THE DESTINATION NAME. * E=0 IF PROG NAME, E=1 IF FILE NAME. * LDA DEST ADDR OF DESTINATION FOR NAME * LDB SORC ADDR OF SOURCE NAME * JSB MVNAM * * MVNAM NOP MOVE PROG NAME STA TEMP4 TO GIVEN DESTINATION LDA B,I STA TEMP4,I MOVE CHAR1,2 ISZ TEMP4 INB LDA B,I STA TEMP4,I MOVE CHAR3,4 ISZ TEMP4 INB LDA B,I JSB RMCHK DON'T BLANK LAST CHAR IF JMP MVN1 REMOTE LOAD AND E = 1. SEZ JMP MVN2 MVN1 AND LHALF PUT ASCII BLANK IOR B40 IN CHAR6 MVN2 STA TEMP4,I THEN MOVE JMP MVNAM,I RETURN * * ******************************* * * ERROR PUTS A PROGRAM NAME INTO AN ERROR MESSAGE * THEN PRINTS IT ON THE CONSOLE. * LDA ERRAD ADDR OF ERROR MESSAGE * LDB PNAME ADDR OF PROGRAM NAME * JSB ERROR * * ERROR NOP PUT :NAME INTO STA TEMP6 STB TEMP5 ERR MSG THEN DLD A,I PRINT IT DST BUF MOVE ERR MSG TO OUTPUT AREA LDA TEMP6 FIND IF PROG OR FILE NAME. ADA B2 LDA A,I CLE CPA MD62 CCE CPA MD64 CCE LDB TEMP5 GET ADDR OF NAME LDA LINE2 TO PUT INTO MSG JSB MVNAM LDA D9 STA TEMP3 SET LENGTH FOR JSB DSPLA DISPLAY JSB $LIBR NOP LDA TEMP6 GET MESSAGE ADDR. ADA B2 MOVE TO WORD 3. LDA A,I GET ERROR NUMBER. CLE CHECK FOR PROG/FILE NAME. CPA MD62 CCE CPA MD64 CCE LDB %DLER ADDR OF ERROR BLOCK IN @PTPQ. STA B,I LDB TEMP5 GET ADDR OF PROG/FILE NAME. LDA %DLER DESTINATION ADDR. INA JSB MVNAM MOVE THE NAME. JSB $LIBX DEF ERROR RETURN. * * ***************************** * * STRID INITIALIZES ID SEGMENT SEARCH ROUTINE. * * STRID NOP INITIALIZE ID SCANNER. LDA KEYWD GET KEYWORD ADDRESS STA ADRID STORE AS ID ADDRESS. JMP STRID,I RETURN * * ***************************** * * SRCID FETCHS AN ID SEGMENT AND SEES IF MATCH/NO MATCH/BLANK. * JSB SRCID * DEF PNAME ADDR OF NAME TO SEARCH FOR * * * * A CONTAINS ADDR OF ID SEGMENT * B CONTAINS ADDR OF NAME IN ID SEGMENT * SRCID NOP SEARCH ID SEGMENTS LDA SRCID,I FOR A CERTAIN NAME. STA TEMP1 SAVE ADDR OF NAME ISZ SRCID SET RETURN AT P+2 LDB ADRID,I PICK UP AN ID ADDR SZB,RSS IS IT END OF ID SEGS? JMP EOFID YES ADB D12 BUMP TO NAME IN ID STB TEMP2 SAVE ADDR OF NAME LDA B,I CP'qA TEMP1,I CHECK NAME 1,2 INB,RSS MATCHES. JMP NOMAT NO MATCH. ISZ TEMP1 LDA B,I CPA TEMP1,I CHECK NAME 3,4 INB,RSS MATCHES. JMP NOMAT NO MATCH. ISZ TEMP1 LDA B,I AND LHALF STA STRID SAVE TEMPORARILY LDA TEMP1,I AND LHALF CPA STRID COMPARE NAME 5 ISZ SRCID MATCHES, SET RETURN P+4 * NOMAT ISZ SRCID NO MATCH, RETURN P+3 LDA ADRID,I READY FOR RETURN. ISZ ADRID LDB TEMP2 EOFID JMP SRCID,I RETURN. * * ***************************** * SUBROUTINE: CONV (CONVERT 15-BIT BINARY NUMBER * TO 6-CHAR (LEADING BLANK) ASCII FORM OF OCTAL NUMBER * CALLING SEQUENCE: * (A)-BINARY VALUE FOR CONVERSION * (B)-ADDRESS OF 3-WORD AREA FOR * STORING ASCII/OCTAL CHARACTERS * (P) JSB CONV * (P+1) (RETURN): * (A) DESTROYED. * (B) ADDRESS OF NEXT STORAGE * CONV NOP STB TEMP1 SAVE STORAGE AREA ADDRESS LDB A RBL POSITION FIRST DIGIT TO B(15-13). LDA M3 LET CONVERT COUNTER STA TEMP2 = -3. LDA B40 MAKE FIRST CHARACTER A SPACE. CONV1 ALF,ALF ROTATE CHAR. TO UPPER POSITION STA TEMP3 AND SAVE. BLF,RBR POSITION NEXT DIGIT TO B(02-00), LDA B AND B7 ISOLATE DIGIT. IOR B60 MAKE AN ASCII CHAR. (60 - 67). IOR TEMP3 PACK IN UPPER CHARACTER STA TEMP1,I AND STORE IN STORAGE AREA. ISZ TEMP1 ADD 1 TO STORAGE AREA ADDRESS. BLF,RBR ROTATE NEXT DIGIT TO LOW B, LDA B ISOLATE CHAR AND B7 IN LOW A, IOR B60 MAKE AN ASCII CHAR. ISZ TEMP2 INDEX CONVERT COUNTER JMP CONV1 NOT FINISHED. LDB TEMP1 FINISHED, SET (B)= NEXT STORAGE JMP CONV,I AREA WORD ADDRESS AND EXIT. * * ******************************K***** * * DIV10 CONVERTS A VALUE TO ASCII CHARACTERS * (DECIMAL CONVERSION, 99 MAX). * LDA VALUE * JSB DIV10 * * DIV10 NOP DIVIDE BY 10 (99 MAX) CLB RETURN ASCII IN (A) DIV D10 ALF,ALF MOVE TO LEFT HALF ADA B ADD REMAINDER ADA A00 MAKE ASCII JMP DIV10,I RETURN SKP * CONSTANTS AND STORAGE. * UNS M9 DEC -9 M6 DEC -6 M3 OCT -3 M2 OCT -2 * B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B40 OCT 40 B60 OCT 60 * D8 DEC 8 D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D19 DEC 19 D20 DEC 20 D22 DEC 22 D67 DEC 67 * SAVEB NOP A00 ASC 1,00 LHALF OCT 177400 ZERO OCT 0,0,0 IDEST OCT 0 ADRID NOP KYBDU NOP LU NOP * TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP TEMP5 NOP TEMP6 NOP TEMP7 NOP CBUSY NOP * KBFUN NOP 5-WORD TABLE. FILLU NOP NAM12 NOP NAM34 NOP NAM50 NOP CNWD NOP B77 OCT 77 * SKP * MESSAGES FROM APLDR WITH LOVE. * * ERR01 DEF *+1 ASC 2,REM MD60 DEC -60 ERROR NUMBER. * ERR02 DEF *+1 ASC 2,DUP DEC -61 * ERR03 DEF *+1 ASC 2,NO MD62 DEC -62 * ERR04 DEF *+1 ASC 2,OF DEC -63 * ERR05 DEF *+1 ASC 2,FMP MD64 DEC -64 * ERR06 DEF *+1 ASC 2,BZY OCT 0 * ERR10 DEF *+1 ASC 2,CKSM DEC -66 * ERR11 DEF *+1 ASC 2,COM DEC -67 * ERR12 DEF *+1 ASC 2,MEM DEC -68 * ERR13 DEF *+1 ASC 2,ID? DEC -69 * ERR99 DEF *+1 ASC 4,ABORTED M1 OCT -1 * MSGX DEF *+1 ASC 1, BLANK WORD. * MSG1 DEF *+1 ASC 3,DONE OCT 0 * * MT.ID DEF *+1 ASC 11, BLANK ID SEGMENTS DEC -65 * CONSL EQU B1*($ OPERATOR CONSOLE. DINPT EQU B5 DEFAULT INPUT UNIT. DLIST EQU B6 DEFAULT LIST UNIT. * HEAD1 DEF *+1 ASC 19, PROGRAM LIST: NAME,PRIORITY,MAIN,BASE * * DBLNK EQU ERR04-2 DOUBLE BLANK WORD DABSD DEF ABSBF+2 SBUF DEF ABSBF+5 AREA FOR SPECIAL REC FROM CENTRAL. DDMID DEF DMYID LINE DEF MSG+4 LINE2 DEF MSG+6 MSG0 EQU LINE * MSG ASC 9, APLDR: BUF EQU MSG+4 * ABSBF BSS 64 * ABSCT EQU ABSBF ABSAD EQU ABSBF+1 ABSD1 EQU ABSBF+2 ABSD2 EQU ABSBF+3 * DMYID EQU ABSBF+35 JMPXF EQU DMYID-4 SPAR1 EQU DMYID-3 FWAC EQU DMYID-2 SZCOM EQU DMYID-1 PRIOR EQU DMYID+6 XFER EQU DMYID+7 PNM12 EQU DMYID+12 PNM34 EQU DMYID+13 PNM50 EQU DMYID+14 RESML EQU DMYID+17 MSEC EQU DMYID+18 SEC EQU DMYID+19 MIN EQU DMYID+20 HRS EQU DMYID+21 PRGMN EQU DMYID+22 PRGM2 EQU DMYID+23 PRGBP EQU DMYID+24 PRGB2 EQU DMYID+25 * BSS 0 SIZE OF APLDR * * END APLDR 6* 'A 91705-18109 1713 S 0222 DS1/B SCE/5 MODULE: REMAC              H0102 FASMB,R,L,C HED REMAC - 91705-16109 * (C) HEWLETT PACKARD CO. 1977 NAM REMAC,1,80 91705-16109 REV 1713 770324 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * * REMAC * SOURCE: 91705-18109 * BINARY: 91705-16109 * JIM HARTSELL * JULY 30, 1974 * * RTE-C SATELLITE PROGRAM TO PROVIDE OPERATOR ACCESS * TO THE CENTRAL STATION FOR VARIOUS CONTROL FUNCTIONS. * ENT REMAC * EXT EXEC EXT DOPEN,DREAD,DCLOS,DPOSN EXT DCRET,DWRIT,DPURG,DNAME EXT DEXEC,%DLST,DMESG,%RMCN EXT $MESS,$TYPE,$LIBR,$LIBX EXT %PRMB,%TMOT * A EQU 0 B EQU 1 OPEN EQU DOPEN READF EQU DREAD CLOSE EQU DCLOS POSNT EQU DPOSN CREAT EQU DCRET WRITF EQU DWRIT PURGE EQU DPURG NAMF EQU DNAME * * INITIALIZE TRANSFER STACK. * REMAC STB TEMP SAVE ADDR OF SCHEDULE PARAMS. LDA STKHD RESET STACK POINTER. STA P.STK CLA,INA SET FIRST STACK ENTRY STA P.STK,I FOR LOGICAL UNIT 1 (DEFAULT). STA MODE RESET MODE TO LOCAL. * LDA TEMP,I CHECK IF P1 = ASCII PARAM. AND HB377 SZA,RSS JMP STR NO. MUST BE INPUT LU. * * FETCH SCHEDULE PARAMETERS (FL,NA,ME,SEVERITY,LIST). * LDA A.$TR GENERATE "$TR,FLNAME" IN BUFFER. STA INBUF LDA A.TR1 STA INBUF+1 LDA TEMP,I STA INBUF+2 ISZ TEMP LDA TEMP,I STA INBUF+3 ISZ TEMP LDA TEMP,I STA INBUF+4 ISZ TEMP * LDA B5 SET COUNT. STA INCNT * LDA TEMP,I SET UP DUMMY SCHEDULE PARAMS. STA ALTBK+3 ܌SEVERITY CODE. ISZ TEMP LDA TEMP,I STA ALTBK+2 LIST LU. * LDA DFALT POINT TO DUMMY PARAMS. STA TEMP * STR STA TRFLG SET/CLEAR FLAG FOR QUERY SECTION. * * FETCH SCHEDULE PARAMETERS (LU,LOG,LIST,SEVERITY CODE). * LDA TEMP,I GET LU OF INPUT DEVICE. SZA,RSS JMP STAT IF NONE, USE DEFAULT. CPA B1 IGNORE IF = 1. JMP STAT * LDB P.STK PUT SPECIFIED LU INTO ADB B4 TRANSFER STACK. STB P.STK STA P.STK,I * STAT LDA P.STK,I CLB,INB FORCE LOCAL MODE. JSB EQTYP CHECK EQ. TYPE OF INPUT LU. STA LUTYP * ISZ TEMP LDA TEMP,I GET LU OF LOG DEVICE. SZA JMP SVLOG * DEFLT LDB LUTYP CLA,INA EITHER LU 1 OR SZB,RSS LDA P.STK,I INPUT LU IF TTY DEVICE. SVLOG STA LOGLU * ISZ TEMP LDA TEMP,I GET LU OF LIST DEVICE, SZA,RSS LDA B6 OR USE DEFAULT = 6. STA LSTLU * ISZ TEMP LDA TEMP,I SAVE SEVERITY CODE. STA SEVER * LDA TRFLG IF SCHEDULED WITH FILE NAME, SZA ALREADY HAVE TR SIMULATED. JMP CHK$ * * DISPLAY PROMPT CHARACTER (IF TTY DEVICE). * CONTROL RETURNS HERE WHEN REQUEST PROCESSING COMPLETES. * QUERY LDA P.STK,I CHECK WHETHER CURRENT INPUT STA TEMP STA LUTYP IS FROM A TTY TYPE DEVICE. AND HB377 NON ZERO IF FILE NAME, ELSE LU. SZA JMP REMRD REMOTE FILE. * LDA P.STK,I CLB,INB FORCE LOCAL MODE. JSB EQTYP LOCAL LU: CHECK TYPE. STA LUTYP SZA JMP LOCRD LOCAL LU NOT TTY DEVICE. * JSB EXEC DISPLAY PROMPT ON TTY DEVICE. DEF *+5 DEF B2 DEF P.STK,I DEF PROMP DEF B1 * LDA P.STK,I SET ECHO BIT. IOR B400 STA TEMP * * INPUT OPERATOR REQUEST FROM CURRENT DEVICE OR FILE. * LO CRD JSB EXEC LOCAL SATELLITE LU. DEF *+5 DEF B1 DEF TEMP DEF INBUF DEF D40 * STA TEMP SAVE STATUS WORD. STB INCNT SAVE WORD COUNT. CLA,INA FORCE LOCAL MODE. JSB EOFCK CHECK FOR END OF FILE. JMP TRANS GOT IT. JMP ECHO GO ECHO IF NECCESSARY. * REMRD JSB READF CENTRAL STATION FILE. DEF *+6 (OPENED WHEN FIRST TRANSFER DEF IDCB WAS PERFORMED) DEF IERR DEF INBUF DEF D40 DEF INCNT ACTUAL WORD COUNT. * JSB ERCHK CHECK FOR ERRORS. * LDA INCNT IF EOF, GENERATE TR REQUEST. INA,SZA JMP BUMP TRANS LDA A.$TR STA INBUF LDA A.$TR+1 STA INBUF+1 LDA B2 STA INCNT JMP ECHO * BUMP LDA P.STK ADA B3 ISZ A,I BUMP RECORD COUNT. * * ECHO THE REQUEST IF NOT INPUT FROM TTY DEVICE. * ECHO LDA LUTYP SZA,RSS JMP CKCNT IT IS A TTY DEVICE. * LDA SEVER INHIBIT ECHO IF CPA B1 SEVERITY CODE = 1. JMP CHK$ * JSB EXEC NOT TTY: ECHO. DEF *+5 DEF B2 DEF LOGLU DEF INBUF DEF INCNT * CHK$ LDA INBUF FIRST CHARACTER MUST AND HB377 BE A "$". CPA AS.$ RSS JMP OPER * LDA INBUF BLANK OUT THE "$" SIGN. AND B377 IOR BLANK STA INBUF * CKCNT LDB INCNT IGNORE REQUEST IF NULL. RBL MAKE CHARACTER COUNT. SZB,RSS JMP QUERY * * PARSE THE OPERATOR REQUEST. * LDA BUFAD (A) = BUFAD, (B) = INCNT. JSB $PARS DEF PRAMS PARAMETER BUFFER ADDRESS. JMP M0000 TRY FOR REMAC COMMAND FIRST. * * LOCAL OR CENTRAL RTE COMMAND. * OTHER LDA INCNT SET UP +CHAR COUNT. RAL STA TEMP * LDA MODE IF LOCAL MODE, SEND COMMAND SZA TO RTE-C. JMP LCRTE * * SEND CENTRAL RTE COMMANDS. * JSB %RMCN SEND COMMAND TO CENTRAL. DEF *+3 DEF TEMP # CHARACTERS. DEF INBUF ASCII COMMAND. * STA IERR SAVE ERROR STATUS SSA SKIP IF NO ERROR JMP ERFND GIVE ERROR MSG * LDA TEMP RETURN MESSAGE? SZA,RSS JMP QUERY NO * SSA MAKE SURE LEN IS POSITIVE. JMP OPER * DSPLA CMA,INA NEGATE CHAR COUNT. STA TEMP * JSB EXEC DISPLAY REPLY MESSAGE. DEF *+5 DEF B2 DEF LOGLU DEF INBUF DEF TEMP * JMP QUERY * * PASS COMMAND TO LOCAL RTE-C. * LCRTE JSB JOB PROCESS COMMAND. * SZA IF CHAR CNT NON-ZERO, JMP DSPLA GO DISPLAY REPLY MESSAGE, JMP QUERY ELSE GO PROMPT. * * CHECK THE OPERATOR REQUEST CODE AGAINST THE LEGAL * REQUEST CODES AND JUMP TO THE PROPER PROCESSOR. * * TO ADD NEW REQUEST ONE MERELY: * A. ADDS ASCII OPERATION CODE TO TABLE "LDOPC". * B. ADDS PROCESSOR START ADDRESS TO TABLE "LDJMP". * C. ADDS PROCESSOR CODING TO PROCESS THE REQUEST. * M0000 LDB OP FETCH OPERATION CODE. STB OPP SET STOP FLAG. LDA LDOPC SET OPERATION TABLE POINTER. STA TEMP1 LDA LDJMP SET PROCESSOR JUMP ADDRESS. STA TEMP2 * M0030 CPB TEMP1,I COMPARE WITH TABLE VALUE. JMP TEMP2,I COMPARES. GO DO IT. * ISZ TEMP1 KEEP LOOKING. ISZ TEMP2 JMP M0030 * LDOPC DEF *+1 OPERATION CODE TABLE ADDRESS. * ASC 6,CLCRDLDUEXPU ASC 7,RESTSWTETCTR$$ OPP NOP OP CODE FOR CURRENT REQ. * LDJMP DEF *+1,I JMP ADDRESS FOR EACH OP CODE. DEF M0100 CL REQUEST. DEF M0200 CR REQUEST. DEF M0300 DL REQUEST. DEF M0400 DU REQUEST. DEF M0500 EX REQUEST. DEF M0700 PU REQUEST. DEF M0800 RE REQUEST. X DEF M0900 ST REQUEST. DEF M0990 SW REQUEST. DEF M1000 TE REQUEST. DEF M1100 TC REQUEST. DEF M1200 TR REQUEST. DEF M1300 $$ REQUEST. DEF OTHER ASSUME RTE OPER COMMAND. * OPER LDA D10 INPUT ERROR: 010 OPERS STA IERR JSB ERCHK WON'T RETURN. SKP * * SUBR TO PASS COMMAND TO RTE-C AS IF ENTERED LOCALLY. * JOB NOP JSB $LIBR NOP LDA JOB LDB HERE SZB,RSS JMP THERE CLA JSB $LIBX DEF *+1 DEF EXIT THERE STA RTN LDB 1735B SZB JMP EXIT1 STA HERE STA JOB LDA BUFAD STA PNTR1 LDA TYPE SSA,RSS JMP *+3 ELA,CLE,ERA LDA A,I ADA MD22 REFERENCES $TYPE-22 IN SCHEDULER STA PNTR2 FOR INPUT MESSAGE BUFFER. LDA INCNT LDB 0 CMA,INA ADB MD22 SSB JMP *+4 OK IF NOT > 22 WORDS LDA K44 ELSE SET BACK TO 22 STA TEMP LDA MD22 STA CNTR JSB XFER LDB TEMP JSB $MESS SZA,RSS JMP EXIT LDB A,I STB SAVE ADB MD1 BRS STB CNTR INA STA PNTR1 LDA BUFAD STA PNTR2 JSB XFER LDA SAVE CMA,INA EXIT CLB STB HERE EXIT1 JSB $LIBX DEF RTN XFER NOP LOOP1 LDA PNTR1,I STA PNTR2,I ISZ PNTR1 ISZ PNTR2 ISZ CNTR JMP LOOP1 JMP XFER,I RTN NOP HERE NOP TYPE DEF $TYPE K44 DEC 44 PNTR1 BSS 1 PNTR2 BSS 1 CNTR BSS 1 SAVE BSS 1 HED REMAC: CL REQUEST * (C) HEWLETT PACKARD CO. 1976 * * CL,FLNAME * * CLOSE A FILE AT THE CENTRAL STATION. * M0100 LDB CP1 ERROR IF NO FILE NAME. JSB ASCHK * JSB CLOSE CLOSE THE FILE. DEF *+3 NOTE: IN THE RTE-C SATELLITE, DEF P1 THE DCB MUST CONTAIN THE FILE DEF IERR NAME. * JSB ERCHK CHECK FOR ERRORS. * JMP QUERY HED REMAC: CR REQUEST * (C) HEWLETT PACKARD CO. 1976 * * CR,FLNAME,SECURITY,LABEL,TYPE,#BLOCKS,RECSIZE * * CREATE A DISC FILE AT THE CENTRAL STATION. * M0200 LDB CP1 ERROR IF NO NAME. JSB ASCHK * LDA B3 DEFAULT FILE TYPE TO 3. LDB P4 SZB,RSS STA P4 * LDA D10 DEFAULT # BLOCKS TO 10. LDB P5 SZB,RSS STA P5 LDA P6 SET UP SIZE ARRAY. STA P5+1 * JSB CREAT CREATE THE FILE. DEF *+8 DEF UDCB DEF IERR DEF P1 FILE NAME. DEF P5 # BLOCKS, RECSIZE. DEF P4 FILE TYPE. DEF P2 SECURITY CODE. DEF P3 LABEL. * LDA IERR CHECK FOR ERRORS IF IERR NEG. SSA JSB ERCHK * JMP QUERY HED REMAC: DL REQUEST * (C) HEWLETT PACKARD CO. 1976 * * DL,FILTER,SECURITY,LABEL,TYPE,LISTLU * * LIST CENTRAL STATION FILE DIRECTORY. * M0300 LDB CP1 FILTER SPECIFIED? SZB JMP M0305 * LDA BLANK NO. SET FIRST WORD TO BLANKS. IOR B40 STA P1 JMP M0310 * M0305 LDA D56 SPECIFIED. ASCII? ADB MD2 SZB JMP OPERS NO. ERROR 56. M0310 STB TEMP CLEAR NREQ FLAG. * LDA P4 SET SIGN BIT IF SZA FILE TYPE SPECIFIED. IOR HIBIT STA P4 * CLA,INA CHECK FOR LIST LU. LDB CP5 SZB,RSS SET DEFAULT = 1 IF NOT GIVEN. STA P5 * * REQUEST PRINT LINE FROM CENTRAL STATION. * M0320 JSB %DLST DEF *+11 DEF INBUF BUFFER. DEF D40 MAX. LEN. DEF P1 FILTER. DEF P2 SECURITY. DEF P3 LABEL. DEF P4 TYPE. DEF TEMP NREQ FLAG. DEF TEMP1 STATUS. DEF IERR ERROR CODE. DEF INCNT # VALID DATA WORDS. * 3 LDA TEMP1 DO WE HAVE A PRINT LINE? SZA JMP QUERY NO, ALL DONE. * LDA %PRMB SAVE DLIST REPLY BUFFER. STA TEMP1 LDA SRPLY STA TEMP2 JSB MOV25 * JSB DEXEC DISPLAY PRINT LINE. DEF *+6 DEF MODE DEF B2 RCODE. DEF P5 LU. DEF INBUF DEF INCNT * CLA,INA STA TEMP * LDA SRPLY RESTORE DLIST REPLY BUFFER. STA TEMP1 LDA %PRMB STA TEMP2 JSB MOV25 * JMP M0320 * * MOVE 25 WORDS * MOV25 NOP LDB MD25 LOOP LDA TEMP1,I STA TEMP2,I ISZ TEMP1 ISZ TEMP2 INB,SZB JMP LOOP JMP MOV25,I HED REMAC: DU REQUEST * (C) HEWLETT PACKARD CO. 1976 * * DU,FLNAME,LU,SECURITY,LABEL * * DUMP CENTRAL FILE ON SATELLITE LOGICAL INIT. * M0400 LDB CP1 ERROR IF NO FILE NAME. JSB ASCHK LDB CP2 ERROR IF NO LU. JSB INTCK * LDA P2 TEST FOR PT PUNCH. LDB MODE JSB EQTYP CPA B2 JMP M0402 IT IS A PUNCH. * LDB A LDA P2 IF LINE PRINTER, SET V-BIT IN IOR VBIT CONTROL WORD TO INHIBIT COL. 1 CPB D10 CARRIAGE CONTROL. STA P2 JMP M0405 * M0402 LDA B1000 GENERATE LEADER IOR P2 STA TEMP * JSB DEXEC DEF *+4 DEF MODE DEF B3 DEF TEMP * * OPEN THE CENTRAL FILE. * M0405 JSB OPEN OPEN THE FILE. DEF *+7 DEF UDCB DEF IERR DEF P1 FILE NAME. DEF B0 OPEN OPTIONS. DEF P3 SECURITY CODE. DEF P4 LABEL. * LDB P2 IF FILE TYPE 5(RELOC) ADB B100 OR 7 (ABS), SET FOR CPA B5 BINARY OUTPUT. JMP *+2 CPA B7 STB P2 * LDA IERR CHECK FOR ERRORS IF IERR NEG. SSA JSB ERCHK LDA OPNFL SET UDCB OPEN FLAG. ELA,CLE,ERA IOR HIBIT STA OPNFL * * READ A RECORD FROM CENTRAL FILE. * M0410 JSB READF READ. DEF *+6 DEF UDCB DEF IERR DEF INBUF DEF D128 DEF INCNT XMSN LOG. * JSB ERCHK CHECK FOR ERRORS. * LDA INCNT CHECK FOR EOF. INA SZA,RSS JMP M0420 GOT IT. GO PROCESS. * * OUTPUT THE RECORD ON SATELLITE LOGICAL INIT. * JSB DEXEC DEF *+6 DEF MODE DEF B2 DEF P2 LU. DEF INBUF DEF INCNT * JMP M0410 GO GET NEXT RECORD. * * PROCESS END OF FILE CONDITION. * M0420 LDA P2 GET LOGICAL UNIT. AND B77 STA P2 LDB MODE JSB EQTYP STA B EQUIPMENT TYPE. * LDA B100 SET DEFAULT TO M.T. DEVICE. CPB B2 XOR B1100 PUNCHED TAPE - TRAILER. CPB D10 IOR B1100 LINE PRINTER - PAGE EJECT. IOR P2 INSERT LOGICAL UNIT. STA TEMP * JSB DEXEC PERFORM I/O CONTROL. DEF *+5 DEF MODE DEF B3 DEF TEMP FORMATTED CONTROL WORD. DEF MD1 USED ONLY FOR LP. * JMP M0950 GO CLOSE FILE. HED REMAC: EX REQUEST * (C) HEWLETT PACKARD CO. 1976 * * EX PROCESSOR * * TERMINATE THE OPERATOR INTERFACE PROGRAM. * M0500 JSB EXEC DISPLAY TERMINATION MESSAGE DEF *+5 ON LOG DEVICE. DEF B2 DEF LOGLU DEF TRMSG DEF B6 * JSB CLSFL CLOSE OPEN FILES. * JSB EXEC EXIT. DEF *+2 DEF B6 * TRMSG ASC 6, $END REMAC HED REMAC: PU REQUEST * (C) HEWLETT PACKARD CO. 1976 * * PU,FLNAME,SECURITY,LABEL * * PURGE A CENTRAL STATION FILE. * M0700 LDB CP1 ERROR IF NO FILE NAME. JSB ASCHK * JSB PURGE PURGE THE FILE. DEF *+6 DEF UDCB DEF IERR DEF P1 FILE NAME. DEF P2 SECURITY CODE. DEF P3 LABEL. * LDA IERR SSA JSB ERCHK CHECK FOR ERRORS. JMP QUERY HED REMAC: RE REQUEST * (C) HEWLETT PACKARD CO. 1976 * * RE,OLDNAM,NEWNAM,SECURITY,LABEL * * RENAME A FILE AT THE CENTRAL STATION. * M0800 LDB CP1 ERROR IF NO FILE NAMES. JSB ASCHK LDB CP2 JSB ASCHK * JSB NAMF RENAME THE FILE. DEF *+7 DEF UDCB DEF IERR DEF P1 OLD FILE NAME. DEF P2 NEW FILE NAME. DEF P3 SECURITY. DEF P4 LABEL. * JSB ERCHK CHECK FOR ERRORS. * JMP QUERY HED REMAC: ST REQUEST * (C) HEWLETT PACKARD CO. 1976 * * ST,LU,FLNAME,SECURITY,LABEL,TYPE,#BLOCKS,RECSIZE * * STORE FROM SATELLITE LU ONTO CENTRAL DISC FILE. * M0900 LDB CP2 CHECK SECOND PARAM. SZB,RSS IF NOT GIVEN, ASSUME JMP OTHER RTE STATUS COMMAND. * LDB CP2 ERROR IF FILE NAME JSB ASCHK PARAM NOT ASCII. * LDA B3 DEFAULT FILE TYPE TO 3. LDB P5 SZB,RSS STA P5 * LDA D56 ERROR IF NEGATIVE # BLOCKS. LDB P6 SSB JMP OPERS LDA D10 DEFAULT # BLOCKS TO 10. SZB,RSS STA P6 * LDB CP1 ERROR IF NO LU. JSB INTCK * * CREATE THE CENTRAL DISC FILE. * JSB CREAT CREATE FILE. DEF *+8 DEF UDCB DEF IERR DEF P2 FILE NAME. DEF P6 # BLOCKS. DEF P5 FILE TYPE. DEF P3 SECURITY CODE. DEF P4 LABEL. * LDA IERR CHECK FOR ERRORS IF IERR NEG. SSA JSB ERCHK LDA OPNFL SET UDCB OPEN FLAG. ELA,CLE,ERA IOR HIBIT STA OPNFL * * READ INPUT FROM SATELLITE LOGICAL UNIT. * LDA P1 DETERMINE DEVICE TYPE. LDB MODE JSB EQTYP STA LUTYP SAVE DEVICE TYPE. SZA IF TTY, |JMP M0905 LDA P1 SET ECHO BIT. IOR B400 STA P1 JMP M0910 * M0905 LDA P1 IF FILE TYPE 5 OR 7, IOR B300 SET V AND M BITS. LDB P5 CPB B5 JMP *+3 IOR B2000 IF 7, SET HONESTY BIT. CPB B7 STA P1 * M0910 LDA LUTYP IF DEVICE IS A TTY, SZA DISPLAY INPUT PROMPT CHAR. JMP M0920 * JSB DEXEC IT IS. DISPLAY PROMPT, BECAUSE DEF *+6 OF PERCEPTIBLE DELAY BETWEEN DEF MODE DEF B2 RECORDS. DEF B1 DEF IPRMP ASCII SLASH, SPACE. DEF MD3 * M0920 JSB DEXEC READ THE INPUT RECORD. DEF *+6 DEF MODE DEF B1 DEF P1 LOGICAL UNIT. DEF INBUF DEF D128 * STA TEMP SAVE STATUS WORD. STB INCNT SAVE WORD COUNT. * * CHECK FOR INPUT END OF FILE. * LDA MODE SET UP MODE. JSB EOFCK JMP M0950 GOT IT. LDA INCNT IGNORE NULL NON-CARD INPUT. SZA,RSS JMP M0910 * * WRITE THE RECORD ON CENTRAL DISC FILE. * JSB WRITF DEF *+5 DEF UDCB DEF IERR DEF INBUF DEF INCNT * LDA IERR CHECK FOR ERRORS. SSA,RSS JMP M0910 NONE. GO READ NEXT RECORD. * JSB PURGE ERROR. PURGE FILE. DEF *+6 DEF UDCB DEF TEMP DEF P2 FILE NAME. DEF P3 SECURITY. DEF P4 LABEL. * LDA OPNFL OUTPUT ERROR MESSAGE. ELA,CLE,ERA STA OPNFL JSB ERCHK * * END OF FILE ON INPUT. * M0950 JSB CLOSE CLOSE THE CENTRAL FILE. DEF *+3 DEF UDCB DEF IERR * LDA OPNFL CLEAR UDCB OPEN FLAG. ELA,CLE,ERA STA OPNFL * JMP QUERY B@< 15. * LDA P1 SZA,RSS JMP SETTC INFINITE TIME-OUT. MPY D500 FINITE TIME-OUT. CONVERT CMA,INA TO TENS OF MILLISECONDS. * SETTC JSB $LIBR NOP STA %TMOT STORE NEW TIME-OUT. JSB $LIBX DEF *+1 DEF QUERY RETURN TO OPERATOR. * ZERO ASC 1, 0 TOVAL ASC 3,TC= HED REMAC: TR,XXXXXX REQUEST * (C) HEWLETT PACKARD CO. 1976 * * TR,XXXXXX PROCESSOR. * * TRANSFER CONTROL TO LOCAL LU OR REMOTE FILE. * M1200 LDA P.STK,I IF CURRENT INPUT IS FROM A AND HB377 CENTRAL FILE, CLOSE IT. SZA,RSS JMP M1210 * JSB CLOSE DEF *+3 DEF IDCB DEF IERR * LDA OPNFL ERA,CLE,ELA CLEAR IDCB OPEN FLAG. STA OPNFL * M1210 LDA P1 GET PARAM 1. SZA,RSS IF NOT SPECIFIED, CCA SIMULATE "TR,-1". * SSA,RSS NEGATIVE INTEGER? JMP M1220 NO. * * BACK UP THROUGH TRANSFER STACK. * LDB P.STK TOP OF STACK? BKUP CPB STKHD JMP M0500 YES. SIMULATE "EX" REQUEST. ADB MD4 NO. BACK UP 1 ENTRY. INA,SZA JMP BKUP LOOP TILL DONE. STB P.STK SET NEW STACK ADDRESS. JMP M1250 GO CHECK FOR CENTRAL FILE. * * ADD NEW CONTROL TO THE TRANSFER STACK. * M1220 LDA P.STK BUMP TO NEXT ENTRY. ADA B4 STA P.STK CPA STKEN RSS JMP M1230 * LDA D13 STACK OVERFLOW. ERROR 013. JMP OPERS * M1230 LDB P1 STORE LU OR FILE NAME. STB A,I INA LDB P1+1 STB A,I INA LDB P1+2 STB A,I INA CLB,INB SET RECORD NUMBER TO 1. STB A,I * * IF CENTRAL FILE, OPEN AND OPTIONALLY P^OSITION. * M1250 LDA P.STK,I AND HB377 SZA,RSS JMP QUERY LOCAL LU. GO GET NEXT REQUEST. * JSB OPEN OPEN THE FILE. DEF *+4 DEF IDCB DEF IERR DEF P.STK,I * LDA IERR PROCESS ERRORS ONLY IF SSA IERR IS NEGATIVE. JSB ERCHK ISZ OPNFL SET OPEN FLAG. * LDA P.STK POSITIONING REQUIRED? ADA B3 LDB A,I CPB B1 (REC. CNT MORE THAN 1?) JMP QUERY NO. STB TEMP YES. * JSB POSNT POSITION TO NEXT RECORD. DEF *+5 DEF IDCB DEF IERR DEF TEMP NUR GREATER THAN ZERO. DEF TEMP ABSOLUTE RECORD NUMBER. * JSB ERCHK CHECK FOR ERRORS. JMP QUERY * * TRANSFER STACK. * * FOR EACH ENTRY, WORD 1 = INTEGER LU OR * FIRST 2 FNAME CHAR. * WORD 2,3 = REST OF FNAME. * WORD 4 = NEXT RECORD NUMBER. * P.STK NOP STACK POINTER. STKHD DEF *+1 * BSS 32 8 ENTRIES. * STKEN DEF * STACK LWA+1. HED REMAC: SPECIAL REQUEST * (C) HEWLETT PACKARD CO. 1976 * * $$ * * UNDOCUMENTED COMMAND TO DISPLAY (ON LU 1) A CENTRAL FILE * CONTAINING A USER-PREPARED LIST OF REMAC REQUESTS, ETC. * ASSUMES THE FILE IS NAMED "$REMAC". * M1300 LDA RMCMD SIMULATE A $DU,1,$REMAC. STA P1 LDA RMCMD+1 FILE NAME = "$REMAC". STA P1+1 LDA RMCMD+2 STA P1+2 LDA B1 STA P2 LU = 1. * JMP M0405 GO INTO DU PROCESSOR. * * RMCMD ASC 3,$REMAC HED EMAC: SUBROUTINE SECTION * (C) HEWLETT PACKARD CO. 1976 * * SUBROUTINE TO TEST FOR END OF FILE ON LOCAL DEVICES. * * TEMP = EQT STATUS WORD. * INCNT = EQT WORD COUNT. * LUTYP = EQUIPMENT TYPE. * (A) = 0 FOR CENTRAL, N FOR LOCAL. * JSB EOFCK * EOF RETURN * NORMAL RETURN * EOFCK NOP STA MODEX CLE LDA LUTYP 8 EOF DEPENDS ON DEVICE. SZA,RSS JMP EOF1 TTY. CPA B1 JMP EOF1 PHOTOREADER. CPA D9 JMP EOF4 CARD READER. CPA D13 JMP EOF4 MARK SENSE. CCE DEFAULT TO MAG TAPE. * EOF1 LDA TEMP GET STATUS WORD. ALF,ALF SEZ,RSS IF E=1, CHECK BIT 7. JMP EOF2 SSA JMP EOF3 EOF2 RAL,RAL CHECK BIT 5. SSA,RSS JMP EOF5 NO EOF. * EOF3 LDA LUTYP END OF FILE. SZA IF TTY, OUTPUT CAR. RET. JMP EOF6 * JSB DEXEC DEF *+6 DEF MODEX DEF B2 DEF B1 DEF CR DEF B1 * JMP EOF6 * EOF4 LDA INCNT CHECK FOR BLANK CARD. SZA EOF5 ISZ EOFCK EOF6 JMP EOFCK,I * * SUBROUTINE TO CHECK FOR ASCII PARAMETER. * ASCHK NOP (B) = CODE WORD. LDA D55 SZB,RSS JMP OPERS ERROR 55 IF MISSING. LDA D56 ADB MD2 SZB JMP OPERS ERROR 56 IF NOT ASCII. JMP ASCHK,I * * SUBROUTINE TO CHECK INTEGER PARAMETERS. * INTCK NOP (B) = CODE WORD. LDA D55 SZB,RSS JMP OPERS ERROR 55 IF MISSING. LDA D56 ADB MD1 SZB JMP OPERS ERROR 56 IF NOT NUMERIC. JMP INTCK,I * * SUBROUTINE TO FIND EQUIPMENT TYPE OF AN LU. * EQTYP NOP (A) = LU. (B) = MODE. STA TEMP1 STB MODEX SET UP MODE. * JSB DEXEC DEF *+5 DEF MODEX DEF D13 DEF TEMP1 DEF TEMP2 * LDA TEMP2 ALF,ALF AND B77 CPA B5 DVR05? RSS YES JMP EQTYP,I NO, RETURN. A=EQUIP-TYPE LDA DRT GET PTR TO DEV REF TABLE ADA TEMP1 ADD LU # ADA MD1 MINUS ONE. LDA A,I GET DRT ENTRY FOR THIS LU AND HB174 ISOLATE UNIT # SZA IF UNIT # = 0, RETURN LDA B5 WITH A = 0,  JMP EQTYP,I ELSE A = 5. * * SUBROUTINE TO PROCESS ERRORS IN RFA CALLS. * ERCHK NOP LDA IERR CAN BE POS. OR NEG. SZA,RSS JMP ERCHK,I NO ERROR. * ERFND LDB BLANK MAKE POSITIVE, SET SIGN WORD. SSA,RSS JMP ERCK1 LDB MINUS CMA,INA ERCK1 STB EMSG+3 * CCE DECIMAL CONVERSION. JSB $CVT3 CONVERT TO ASCII. STA B * ADB B2 STORE LAST 2 DIGITS LDA B,I IN MESSAGE BUFFER. IOR LB20 LEADING BLANK TO ASCII 0. STA EMSG+4 ADB MD1 LDA B,I SET UP SIGN AND AND B377 FIRST DIGIT. IOR EMSG+3 IOR B20 LEADING BLANK TO ASCII 0. STA EMSG+3 STORE IN MESSAGE BUFFER. * LDA STKHD RESET STACK POINTER. STA P.STK * JSB EXEC DISPLAY ERROR MESSAGE. DEF *+5 DEF B2 DEF LOGLU DEF EMSG DEF B5 * JSB CLSFL CLOSE FILES CURRENTLY OPEN. * LDA LUTYP SZA,RSS JMP QUERY * LDA A.$TR GENERATE $TR,1 STA INBUF LDA A.TR1 STA INBUF+1 LDA A.TR1+1 STA INBUF+2 LDA B3 STA INCNT JMP ECHO * EMSG ASC 5,REMAC * * SUBROUTINE TO CLOSE THE COMMAND FILE OPEN TO IDCB, * OR USER FILE OPEN TO UDCB IF EITHER OR BOTH ARE OPEN. * CLSFL NOP LDA OPNFL SZA,RSS JMP CLSFL,I BOTH DCB'S ARE CLOSED. * SLA,RSS JMP CLOS2 IDCB NOT OPEN. * JSB CLOSE CLOSE THE COMMAND FILE. DEF *+3 DEF IDCB DEF IERR * LDA OPNFL CLOS2 SSA,RSS JMP CLOS3 UDCB NOT OPEN. * JSB CLOSE CLOSE THE USER FILE. DEF *+3 DEF UDCB DEF IERR * CLOS3 CLA STA OPNFL CLEAR OPEN FLAGS. JMP CLSFL,I RETURN. HED REMAC: PARSE ROUTINE * (C) HEWLETT PACKARD CO. 1976 * * THIS IN-LINE CODE MAY BE OMITTED WHEN RESIDENT * VERSIO=N IS AVAILABLE TO USER PROGRAMS. * $PARS NOP CLE,ELA MAKE CHARACTER ADDR. STA TEMPP SET BUFFER CHAR ADDR. ADA B COMPUTE END ADDRESS. STA TEMP3 SET IT. LDB DM32 CLEAR PARAMETER AREA. STB TEMP LDB $PARS,I CLA MES1 STA B,I INB ISZ TEMP JMP MES1 * STA B,I CLEAR THE PARAM COUNT. STB WSTAT SET ADDRESS OF PARAM COUNT. DEC09 LDA TBUF INITIALIZE TEMP BUFFER ADDRESS. STA TEMP1 STA TEMP2 * DEC10 LDB TEMPP GET THE BUFFER CHAR ADDRESS. CPB TEMP3 IF NO MORE CHARACTERS JMP DEC60 GO PROCESS PARAM. ISZ TEMPP STEP INPUT POINTER. CLE,ERB CONVERT TO WORD. SET UP LOW. LDA B,I GET WORD FROM THE BUFFER. SEZ,RSS CHECK IF TO EXAMINE UPPER/LOWER ALF,ALF UPPER, SO ROTATE. AND B377 MASK OFF ALL BUT LOW ORDER. CPA COM SEE IF A COMMA JMP DEC60 YES. CPA LASCI CHECK IF BLANK CHARACTER. JMP DEC10 YES, SO SKIP CHARACTER. LDB TEMP2 CHECK IF 6 CHARACTERS IN PRAM. CPB TBUFS IF SO JMP DEC10 SKIP STORE. STA TEMP2,I STORE THE CHARACTER. STA SABRT SAVE THE LAST CHARACTER. ISZ TEMP2 STEP FOR NEXT CHAR. * JMP DEC10 GO TO PROCESS NEXT CHARACTER. * * ATTEMPT NUMERIC CONVERSION OF PARAM. * DEC60 LDA WSTAT,I FIRST SET UP POINTERS. RAL,RAL TAKE 4 TIMES THE PARAM NUMBER ADA $PARS,I PLUS THE OP CODE ADDR-1. STA TEMP SET FLAG ADRR. CLE,INA ONE MORE AND WE HAVE STA VALOC THE PARAMETER VALUE LOCATION. LDA TBUF IF NO CHARACTERS CPA TEMP2 INPUT JMP DEC70 GO TRY NEXT ONE. * * NOW TRY FOR A NUMBER * CCB,CLE CHECK FOR LEADING -. LDA TEMP1,I CPA MIN NEGATIVE? CLB,CCE YES, SET P1OR2 TO 0. STB P1OR2 PO?S. SET P1OR2 TO -1. SEZ,CLE WAS IT MINUS? ISZ TEMP1 YES, INCR TO NEXT CHAR. * LDB D10 SET UP THE CONVERSION LDA SABRT BASE. CPA "B" IF B SUFFIX LDB D8 SET FOR BASE 8. STB TEMP4 SET BASE. ISZ TEMP,I SET FLAG TO 1 FOR NUMBER. DEC65 MPY VALOC,I BUMP THE CURRENT VALUE. VALOC EQU *-1 LDB TEMP1,I GET THE NEXT CHAR. ADB DM58 IF GREATER THAN "9" SEZ,CLE,RSS THEN NOT A NUMBER. ADB D10 IF LESS THAN "0" SEZ,CLE,RSS THEN JMP DEC80 NOT A NUMBER ADA B ACCUMULATE THE STA VALOC,I NUMBER. ISZ TEMP1 STEP THE BUFFER ADDRESS. LDA TEMP4 GET THE BASE TO A LDB TEMP1 AND THE NEXT CHAR. LOC. TO B CPB TEMP2 IF END THEN JMP DEC70 GO TO NEXT PARAM. * INB IF BASE 8 CONVERSION CPB TEMP2 AND LAST CPA D10 CHAR. THEN DONE SO SKIP JMP DEC65 ELSE GO GET THE NEXT ONE. * DEC70 LDB VALOC,I CHECK FOR NEGATIVE PARAM. ISZ P1OR2 CMB,INB STB VALOC,I ISZ WSTAT,I COUNT THE PARAMETER. LDA WSTAT,I IF LDB TEMP3 EOL OR CPB TEMPP 8 PARAMS LINE RSS THEN CPA D8 JMP DEC90 GO PROCESS. JMP DEC09 ELSE GO GET NEXT CHARACTER. * DEC80 ISZ TEMP,I SET NOT NUMBER FLAG. LDA AASCI FILL THE PARAM WITH BLANKS. LDB VALOC PARAM ADDRESS TO B. INB DON'T WORRY ABOUT FIRST WORD. STA B,I SET SECOND WORD. CLE,INB STEP TO THIRD WORD. STA B,I SET THIRD WORD TO DOUBLE BLANK. LDB TBUF GET THE TEMP BUFFER POINTER. DEC85 CPB TEMP2 END OF INPUT? JMP DEC70 YES, GO PROCESS NEXT PARAM. CPB STOP 6TH CHAR?. JMP DEC70 YES, END OF PARAM. LDA B,I GET THE CHARACTER. SEZ,RSS IF UPPER CHARACTER ALF,SLA,ALF ROTATE AND SKIP. XOR VALOC,I LOWER ADD THE UPPER CHAR. XOR LASCI ADD/DELETE THE LOWER BLANK. STA VALOC,I STORE THE PACKED WORD. SEZ,CME,INB STEP B, SKIP IF UPPER ISZ VALOC ELSE STEP STORE ADDRESS. JMP DEC85 GO GET OTHER CHAR. * DEC90 ISZ $PARS STEP RETURN ADDRESS. JMP $PARS,I RETURN. * * CONSTANTS & WORKING STORAGE USED ONLY BY $PARS, $CVT3. * PTT DEF ASCI TBUFS BSS 0 PTTE DEF ASCI2 TBUF DEF *+1 BSS 4 ASCI NOP ASCI1 NOP ASCI2 NOP WSTAT NOP TEMPP NOP SABRT NOP DF10 DEF D10 AASCI OCT 020040 "B" OCT 102 ASCII "B". LASCI OCT 000040 DM32 DEC -32 MIN OCT 55 P1OR2 NOP STOP DEF ASCI2 HED REMAC: BINARY TO ASCII CONVERSION * (C) HEWLETT PACKARD CO. 1976 * * THIS IN-LINE CODE MAY BE OMITTED WHEN RESIDENT * VERSION IS AVAILABLE TO USER PROGRAMS. * $CVT3 NOP STB TEMP SAVE B REGISTER. LDB PTTE INIT LOCATION OF BUFFER. STB TEMP1 LDB AASCI SET BUFFER=ASCII BLANKS. STB ASCI STB ASCI1 STB ASCI2 LDB DF10 ASSUME BASE TEN SEZ,CLE,RSS IF BASE EIGHT INB SET UP FOR BASE EIGHT. STB BASE SET CONVERSION BASE ADDRESS. DPCRL CLB START CONVERSION. DIV BASE DIVIDE BY BASE. BASE EQU *-1 DEFINE BY BASE ADDRESS. ADB B20 CONVERT TO ASCII-BLANK. SEZ IF HIGH DIGIT BLF,BLF ROTATE ADB TEMP1,I ADD CURRENT VALUE STB TEMP1,I STORE THE CONVERTED VALUE. CCB,SEZ PREPARE FOR SUBTRACT. ADB TEMP1 IF HIGH CHAR. BACKUP SEZ,CME BUFFER POINTER STB TEMP1 AND RESET. SZA IF MORE DIGITS JMP DPCRL GO SET THE NEXT ONE. * CCE SET E FOR NEXT CALL LDA PTT GET ASCII BUFFER ADDRESS. LDB TEMP RESTORE B. JMP $CVT3,I RETURN. HED REMAC: CONSTANTS AND WORKINGL640 STORAGE * (C) HEWLETT PACKARD CO. 1976 * PARAMETER STORAGE AREA. * DRT EQU 1652B DEV. REF. TABLE POINTER PRAMS NOP FLAG WORD. OP BSS 3 OPERATION CODE. CP1 NOP FLAG WORD. P1 BSS 3 PARAM 1 (UP TO 6 CHARACTERS). CP2 NOP P2 BSS 3 CP3 NOP P3 BSS 3 CP4 NOP P4 BSS 3 CP5 NOP P5 BSS 3 CP6 NOP P6 BSS 3 CP7 NOP P7 BSS 3 PARAM NOP PARAMETER COUNTER. * B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B20 OCT 20 B40 OCT 40 B77 OCT 77 B100 OCT 100 B377 OCT 377 B300 OCT 300 B400 OCT 400 B1000 OCT 1000 B1100 OCT 1100 B2000 OCT 2000 LB20 OCT 10000 HB377 OCT 177400 HB174 OCT 174000 HIBIT OCT 100000 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD4 DEC -4 MD16 DEC -16 MD22 DEC -22 MD25 DEC -25 DM58 DEC -58 D9 DEC 9 D10 DEC 10 D8 DEC 8 (MUST FOLLOW D10 FOR $CVT3) D13 DEC 13 D40 DEC 40 D55 DEC 55 D56 DEC 56 D128 DEC 128 D500 DEC 500 VBIT EQU D128 OPNFL NOP BIT 1 = IDCB; BIT 15 = UDCB. TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP INCNT NOP # WORDS IN INPUT REQUEST. LUTYP NOP EQ. TYPE OF INPUT DEVICE. LOGLU NOP LU OF LOG DEVICE. LSTLU NOP LU OF LIST DEVICE. SEVER NOP SEVERITY CODE. A.$TR ASC 2,$TR A.TR1 ASC 2,R,1 COM OCT 54 CR OCT 6400 AS.$ OCT 022000 IERR NOP PROMP ASC 1,$_ PROMPT CHARACTER. IPRMP ASC 2,/ _ BLANK OCT 020000 MINUS OCT 026400 DFALT DEF ALTBK ALTBK OCT 0,0,0,0 TRFLG NOP BUFAD DEF INBUF SRPLY DEF INBUF+100 INBUF BSS 128 BUFFER. IDCB BSS 4 UDCB BSS 4 * SIZE EQU * * END REMAC 26 )C 91705-18110 1614 S 0122 DS1/B SCE/5 MODULE: @REFA              H0101 XASMB,R,L,C HED @REFA-REMOTE EXEC & FILE ACCESS *(C) HEWLETT-PACKARD CO. 1976* NAM @REFA,7 91705-16110 REV.A 760401 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * * @REFA * SOURCE: 91705-18110 REV.A * BINARY: 91705-16110 REV.A * JIM HARTSELL * AUG. 30, 1974 * MODIFIED BY: C.C.H. (12-30-75) [DERIVED FROM: 91705-18010 REV.C] * * LIBRARY SUBROUTINE APPENDED TO RTE-C SATELLITE USER * PROGRAM FOR REMOTE EXEC, REMOTE FILE ACCESS, AND * MASTER PROGRAM TO PROGRAM CALLS TO THE CENTRAL STATION. * ENT DCRET,DPURG,DOPEN,DCLOS ENT DREAD,DWRIT,DPOSN,DWIND ENT DNAME,DCONT,DLOCF,DAPOS,DSTAT * ENT DEXEC * ENT POPEN,PREAD,PWRIT,PCONT,GETLU * ENT %DLST,%DNLD,%RMCN,%PRMB * EXT @QUE,@DEQ,EXEC,%LU,@DISP EXT $LIBR,$LIBX,%CPFL EXT $LIST,%LIST,$XEQ,$PVCN,%TMOT * A EQU 0 B EQU 1 * * * CREATE A CENTRAL FILE. * DCRET NOP JSB CQUE NO RETURN. CALL IS POINTER TO DEC 150 ENTRY POINT AND FUNCTION CODE. * * PURGE A CENTRAL FILE. * DPURG NOP JSB CQUE DEC 151 * * OPEN A CENTRAL FILE. * DOPEN NOP JSB CQUE DEC 152 * * WRITE ON CENTRAL FILE. * DWRIT NOP JSB CQUE DEC 153 * * READ FROM CENTRAL FILE. * DREAD NOP JSB CQUE SIGN BIT OF FCN CODE SET FOR OCT 100232 READ (FCN = 154). * * POSITION CENTRAL FILE. * DPOSN NOP JSB CQUE DEC 155 * * REWIND CENTRAL FILE. * DWIND NOP JSB CQUE DEC 156 * * CLOSE CENTRAL FILE. * DCLOS NOP JSB CQUE DEC 157 * * RENAME CENTRAL FILE. * DNAME NOP JSB CQUE DEC 158 * * CONTROL CENTRAL FILE. * DCONT NOP JSB CQUE DEC 159 * * LOCATE CENTRAL FILE RECORD. * DLOCF NOP JSB CQUE DEC 160 * * ABS POSITION CENTRAL FILE. * DAPOS NOP JSB CQUE DEC 161 * * READ CENTRAL FILE DIRECTORY. * DSTAT NOP JSB CQUE OCT 100242 READ CALL. FCN = 162. * * REMOTE EXEC CALLS * DEXEC NOP LDA DEXEC SAVE RETURN ADDRESS. STA NCALL INA LDB A,I GET IDEST ADDR. LDB B,I IDEST VALUE. SZB JMP LEXEC GENERATE LOCAL CALL. * INA GENERATE REMOTE CALL. LDA A,I GET REQUEST CODE ADDR. LDA A,I GET REQUEST CODE. ELA,CLE,ERA CLEAR SIGN BIT. LDB EFCN ELB,CLE CPA B1 IF READ DATA, SET SIGN BIT CCE IN FUNCTION CODE. ERB STB EFCN JMP *+2 NCALL NOP JSB CQUE EFCN OCT 243 FCN = 163. * * OPEN A CENTRAL PROGRAM. * POPEN NOP JSB CQUE DEC 1 * * READ FROM CENTRAL PROGRAM. * PREAD NOP JSB CQUE IWRT OCT 100002 READ CALL. FCN = 2. * * WRITE TO CENTRAL PROGRAM. * PWRIT NOP JSB CQUE DEC 3 * * CONTROL A CENTRAL PROGRAM. * PCONT NOP JSB CQUE DEC 4 * * GET CENTRAL LU OF THIS SATELLITE. * GETLU NOP JSB CQUE DEC 9 * * SPECIAL ENTRY POINT FOR REMAC. REQUEST A FORMATTED * DIRECTORY LIST PRINT LINE FROM THE CENTRAL STATION. * %DLST NOP JSB CQUE OCT 100012 FCN = 10. * * SPECIAL ENTRY POINT FOR APLDR. REQUEST AN ABSOLUTE * PROGRAM DATA RECORD FROM THE CENTRAL STATION DISC. * %DNLD NOP JSB CQUE DEC 0 * * SPECIAL ENTRY POINT FOR REMAC. SEND ASCII CENTRAL * OPERATOR COMMAND. * %RMCN NOP JSB CQUE DEC 200 SPC 3 * * DESTINATION CODE IN DEXEC CALL WAS NON-ZERO. GENERATE * LOCAL EXEC CALL FROM USER DEXEC CALL, EXECUTE IT, * AND RETURN TO USER WITH A,B INTACT. * LEXEC LDA DLC2 INITIALIZE RETURN ADDRESS. STA LCAL1 * LDA DEXEC GET # PARAMS TO MOVE. CMA ADA DEXEC,I ADA MD1 CMA,INA STA DLEN * LDA DEXEC SET UP MOVE POINTERS. ADA B2 STA PLEN LDA DLC2 STA DADR * LMOVE LDA PLEN,I MOVE CALL PARAMETERS. STA DADR,I ISZ LCAL1 BUMP NEW RETURN ADDR. ISZ PLEN ISZ DADR ISZ DLEN JMP LMOVE * LDA DEXEC,I SET UP RETURN ADDRESS. STA DEXEC * DLD RINST DST DADR,I SET UP RETURNS TO USER. ISZ DADR ISZ DADR STA DADR,I * JSB EXEC EXECUTE LOCAL CALL. LCAL1 NOP LCAL2 NOP RCODE GOES HERE. BSS 6 ROOM FOR 6 MORE PARAMS. NOP SLOP ROOM FOR JMP DEXEC,I NOP (ERROR & NORMAL EXITS) * * DLC2 DEF LCAL2 * * DO NOT CHANGE ORDER OF NEXT TWO STATEMENTS * * RINST JMP DEXEC,I ISZ DEXEC * SKP * WHEN CQUE IS CALLED, THE ADDRESS OF THE USER * CALL AND THE FUNCTION CODE CAN BE DETERMINED * VIA THE ENTRY POINT CONTENTS. * CQUE NOP LDA CQUE,I FETCH FUNCTION CODE. CLB CHECK SIGN BIT. SSA INB STB RDATA SET "READ DATA" FLAG. ELA,CLE,ERA CLEAR SIGN BIT. STA FCN LDA CQUE FETCH USER CALL ADDRESS. ADA MD2 LDA A,I STA CALL RQUE CLA CLEAR DATA BUFR ADDR. STA DADR * * BUILD AND QUEUE THE PARMB. * QUE JSB @QUE FCN NOP FUNCTION CODE. CALL NOP ADDR OF USER CALL. DEF PARMB PARAMETER BUFFER. DEF REPLY REPLY BUFFER. DEF DADR RETURNED DATA BUFR ADDR OR 0. DEF DLEN RETURNED DATA BUFR LENGTH. DEF PLEN RETURNED PARMB LENGTH. * JMP REJ REQUEST REJECTED. GO COMPLETE. *  STB QENT ACCEPTED. SAVE ENTRY ADDRESS. * * THE PARMB IS NOW QUEUED AND READY. FORMAT EXEC CALL * FOR TRANSMISSION, BUT DON'T EXECUTE YET. * LDA IWRT WRITE--NO ABORT. (100002B) STA IRW SET FOR "TRANSMIT ONLY". CLB CPB DADR IS THERE ANY DATA? (SKIP IF TRUE) JMP CONST NO. GO TO FORM CONWORD WITH MODE =0. LDA FCN ARS CPA B1 IS FUNCTION PREAD OR PWRIT? JMP CONST YES, DO REQ. ONLY NOW * * SET UP MODE BITS(#6,7) FOR THE REQUEST & DATA CALL TO DVR65. * LDB IRW GET THE REQUEST CODE. LDA RDATA GET THE "READ DATA" FLAG. SZA IS DATA TO BE READ? ADB MD1 YES. SET REQUEST CODE =1--READ. STB IRW SAVE THE REQUEST CODE. BLR,CLE,RBL POSITION THE DRIVER-MODE INFORMATION BLF TO BITS# 6,7. CONST LDA %LU GET THE LOGICAL UNIT NUMBER. IOR 1 FORM THE CONFIGURED CONWORD, STA CONWD AND SAVE FOR THE CALL TO THE DRIVER. LDA MD4 INITIALIZE THE STA BUZY REMOTE-BUSY RETRY COUNTER. LDA MD10 INITIALIZE THE STA RTRY DRIVER-BUSY RETRY COUNTER. * * REQUEST PERMISSION TO TRANSMIT THE PARMB TO CENTRAL. * DISP CLA SIGNAL PARMB NOT SENT YET. STA SNFLG LDA %TMOT SET UP FOR TIME-OUT. SZA,RSS CLA,INA STA TIME * JSB @DISP SZA (A) = 0 OR ADDR OF QUEUE ENTRY. JMP DISP1 * LDB QENT REPLY INTERRUPT MAY HAVE INB OCCURRED WHILE @DISP HAD LDB B,I INTERRUPTS OFF. SEE IF @INTR CPB B2 CAME THRU AND GAVE US JMP INIT PERMISSION. JMP ZONK * DISP1 CPA QENT OUR QUEUE ENTRY? JMP INIT YES. * STA DQENT NO. DEAD ENTRY, SO DE-QUE! JSB @DEQ DQENT NOP OCT 1 * NOP JMP DISP SEARCH QUEUE AGAIN. * * PERMISSION GRANTED. NO OTHER  REQUESTS ARE OUTSTANDING. * QUEUE ENTRY FLAG WORD = "PARMB SENT". * INIT LDA %CPFL CHECK IF LAST REQUEST FOUND SZA,RSS "LINE DOWN" CONDITION. JMP XMIT NO. * JSB EXEC YES. SCHED ENABL WITH WAIT. DEF *+4 DEF D9 DEF ENABL DEF AS.01 * CLA CLEAR FLAG. JSB STPFL * * XMIT JSB EXEC PERFORM TRANSMISSION. DEF *+7 DEF IRW DEF CONWD DEF PARMB DEF PARSZ DEF DADR POINT TO ADDR OF DATA BUFR(NO Z-BIT) DEF DLEN POINT TO LENGTH OF DATA BUFR(NO Z-BIT) JMP DOWN INFORM USER OF ABORTIVE ERROR. * * USER IN I/O SUSPEND DURING TRANSMISSION. * WHEN COMPLETE, CHECK FOR ERRORS. * DST XSTAT (DEBUG AID ONLY) SLA,RAR JMP GOOD NO ERRORS. * SWP AND B40 ISOLATE EQT12 BIT#5 (REMOTE BUSY). CLE,ERB MOVE BUSY-REJECT BIT(EQT5 #1) TO . SEZ,SZA,RSS BUSY-REJECT/REMOTE BUSY OR BOTH? JMP DOWN NEITHER--DRIVER ERROR! SEZ,RSS WAS THE REMOTE SYSTEM BUSY? JMP BZWT YES. GO TO WAIT A WHILE. SZA NO. SIMULTANEOUS REQUESTS? JMP XMIT YES. LET DVR65 RESOLVE PROBLEM. JMP DELAY DRIVER BUSY--DELAY & RE-CALL. * BZWT ISZ BUZY O.K. TO RE-TRY? JMP ZONK YES. DO SO VIA WAIT LIST. JMP FAIL NO. REPORT THE ERROR! * QKNAP LDA T100M PROBABLY APLDR TRYING TO STA TIME READ DATA FROM CENTRAL. JMP ZONK * DELAY ISZ RTRY DELAY FOR A WHILE, IF RETRIES VALID. JMP QKNAP VALID: TRY AGAIN, IN 100 MSEC; ELSE, FAIL LDA MD103 GIVE UP! JMP DOWN1 * GOOD ISZ SNFLG SIGNAL PARMB SENT. * * THE PARMB HAS BEEN SENT, OR SOMEONE ELSE IS PENDING A REPLY. * SUSPEND THIS USER VIA THE OPERATOR SUSPEND LIST UNTIL A * REPLY ARRIVES OR TIME-OUT OCCURS. THE SCE/5 @CLCK MODULE * WILL RESTART THE USER. * * BEFORE SUSPENDIN.G, ESTABLISH AN ENTRY IN THE WAIT-LIST. * ZONK LDB %LIST LDA 1,I NEG. # ENTRIES. STA TEMP INB * WLOOP LDA 1,I CHECK TIME WORD. SZA,RSS ZERO? JMP SWAIT YES. FOUND EMPTY ENTRY. * ADB B5 ISZ TEMP JMP WLOOP JMP FAIL NONE. SYSTEM FAILURE. * SWAIT STB TEMP1 JSB $LIBR NOP LDA TIME STORE TIME VALUE IN WORD 1. STA TEMP1,I ISZ TEMP1 LDA XEQT,I STORE PROGRAM NAME. ADA D12 STA TEMP ADDR OF NAME IN ID SEG. * LDB MD3 MLOOP LDA TEMP,I STA TEMP1,I ISZ TEMP ISZ TEMP1 INB,SZB JMP MLOOP * LDA XEQT,I STORE ID SEG ADDR. STA TEMP1,I * STA IDSG SUSPEND THE USER. LDA DEFX STA XSUSP,I * CLA PRIVILEDGED MODE. STA $PVCN * JSB $LIST OCT 106 IDSG NOP * JMP $XEQ GIVE UP CPU. DEFX DEF AWAKE RESTART ADDRESS. * * USER HAS BEEN RE-SCHEDULED FROM POINT OF SUSPENSION. * AWAKE LDA QENT REPLY RECEIVED? INA LDA A,I CPA B3 JMP COMPX YES, GO COMPLETE USER CALL. CPA B1 NO. DID WE SEND PARMB? JMP DISP NO. TRY PERMISSION AGAIN. CPA B2 RETRY IF QUEUE WAS FULL. JMP *+2 JMP QUE LDA SNFLG WAS IT A TIME-OUT? SZA JMP DOWN YES. LDA %TMOT NO. PERMISSION HAS BEEN SZA,RSS CLA,INA STA TIME GRANTED TO SEND PARMB. JMP INIT * * CENTRAL MUST HAVE GONE DOWN. SET ERROR CODE * IN REPLY BUFFER FOR @DEQ. * DOWN LDA MD51 JSB STPFL DOWN1 LDB FCN STORE IN A-REG SLOT ADB MD11 FOR RFA/DEXEC; SSB,RSS IERR SLOT FOR PTOPC, DLIST, DNLD. JMP DOWN2 STA REPLY+3 JMP COMPL DOWN2 STA REPLY+2 JMP COMPL * * COMPLETE A REJECTED OR INCOMPLETE REQUEST. * REJ STB QENT  CPA MD1 QUEUE FULL? JMP QKNAP YES, LET SOMEONE COMPLETE A REQUEST JMP COMPL NO. * * REPLY HAS BEEN RECEIVED. * PERFORM COMPLETION PROCESSING. * COMPX LDA IWRT WRITE--NO ABORT. (100002B) LDB FCN FUNCTION CODE CPB B3 IS IT A PWRIT? JMP PDATA YES CPB B2 IS IT A PREAD? RSS YES JMP COMPL PERFORM COMPLETION PROCESSING ADA MD1 FORM READ-REQUEST--NO ABORT. * * P TO P DATA TRANSFERS * PDATA STA IRW SET READ/WRITE TYPE LDA %LU IOR B300 DATA ONLY STA CONWD CONTROL WORD * LDA QENT ADDR OF QUEUE ENTRY ADA D10 POINT TO ITS TIME-TAGS STA TITAG SAVE ADDR FOR DATA ONLY CALL INA STA TITAG+1 & ADDR OF 2ND TIME-TAG * JSB EXEC CALL DRIVER TO DO DATA NOW DEF *+7 DEF IRW DEF CONWD DEF DADR,I DEF DLEN TITAG NOP NOP JMP DOWN DRIVER ERROR DETECTED. * SLA,RSS JMP DOWN ERROR OCCURRED * COMPL LDA CALL,I SET RETURN ADDRESS. STA TEMP * JSB @DEQ QENT NOP ADDR OF QUEUE ENTRY. OCT 0 NORMAL PROCESSING. * JMP DSPLY ERROR RETURN. SEZ NORMAL RETURN. ISZ TEMP IF E=1, BUMP RETURN ADDR. JMP TEMP,I * SKP * * AN ERROR RETURN FROM @DEQ INDICATES SPECIAL * COMPLETION PROCESSING. * (A)= 0: DISPLAY REPLY BUFFER AND TERMINATE. * (A)= 1: DISPLAY REPLY BUFFER, SUSPEND, DE-QUE QUEUE * ENTRY AND REPEAT THE REQUEST. * DSPLY STA FLAG * JSB EXEC DISPLAY ERROR MESSAGE STORED DEF *+5 IN REPLY BUFFER BY @DEQ. DEF B2 DEF B1 LU 1. DEF REPLY DEF D17 * LDA FLAG CHECK FLAG. SZA JMP SUSP GO SUSPEND. * JSB EXEC ABORTIVE ERROR. DEF *+2 TERMINATE (ABORT) THE USER. DEF -m0.*B6 * SUSP JSB EXEC CENTRAL DOWN. SUSPEND UNTIL DEF *+2 RE-STARTED BY "GO" BY OPERATOR. DEF B7 * JMP RQUE RE-TRY THE REQUEST. * * STORE A-REG CONTENTS IN "LINE DOWN" FLAG. * STPFL NOP JSB $LIBR NOP STA %CPFL JSB $LIBX DEF STPFL SKP * CONSTANTS AND WORKING STORAGE. * XSUSP OCT 101730 XEQT OCT 1717 B1 OCT 1 B2 OCT 2 B3 OCT 3 B5 OCT 5 B6 OCT 6 B7 OCT 7 B40 OCT 40 B300 OCT 300 D9 DEC 9 D10 DEC 10 D12 DEC 12 D17 DEC 17 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD4 DEC -4 MD10 DEC -10 MD11 DEC -11 MD51 DEC -51 "LINE DOWN" ERROR CODE. MD103 DEC -103 XSTAT OCT 0,0 TIME NOP T100M EQU MD10 100 MS. WAIT. TEMP NOP TEMP1 NOP BUZY NOP BUSY-RE-TRY COUNTER. RTRY NOP FLAG NOP SNFLG OCT 0 RDATA NOP "READ DATA" FLAG. AS.01 ASC 1,01 ENABL ASC 3,ENABL * DADR NOP DATA BUFFER ADDRESS. DLEN NOP DATA LENGTH. PLEN NOP REQUEST LENGTH. * CONWD NOP CONFIGURED CONTROL WORD. DUMMY NOP DUMMY PARAMETER IRW NOP PARSZ DEC 35 PARAMETER BUFFER LENGTH %PRMB DEF PARMB PARMB BSS 35 PARAMETER BUFFER AREA. REPLY EQU PARMB REPLY BUFFER AREA. * SIZE EQU * * END *J0 * 7 91705-18111 1614 S 0122 DS1/B SCE/5 MOD @PTP SOURCE             H0101 ASMB,R,L,C HED @PTP 91705-16111 REV A *(C) HEWLETT-PACKARD CO 1976 NAM @PTP,7 91705-16111 REV A 760401 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * * @PTP * SOURCE: 91705-18111 REV.A * BINARY: 91705-16111 REV.A * JIM HARTSELL * JULY 30, 1974 * MODIFIED BY: C.WHELAN 11-18-75 * * LIBRARY SUBROUTINE APPENDED TO RTE-C SATELLITE USER * PROGRAM FOR SLAVE PROGRAM TO PROGRAM COMMUNICATION * WITH A CENTRAL STATION MASTER PROGRAM. * ENT GET,ACEPT,REJCT,FINIS * EXT EXEC,%LU,%MFLG,%MBOX,%CSID EXT $LIBR,$LIBX,$LIST,$XEQ EXT $PVCN * * * PROCESS "GET" CALL. * GET NOP LDA GET ADA B2 STA P.PTR POINTER TO USER PARAMS LDA GET,I STA GET SET RETURN ADDRESS * LDB IERR CLA STA IERR CLEAR SLAVE ERROR CODE. CPB MD47 COMM ERROR ON PREVIOUS TRY? JMP CLOLD YES, CLEAR OLD XACTION LDB MD46 CHECK CALL SEQUENCE. LDA NEXT SZA JMP SETER IMPROPER SEQUENCE. * SETPT LDB DFBOX POINTER TO PARMB MAILBOX. JSB INDCK ADB B2 MOVE TO WORD 3. STB M.PTR * * CHECK MAILBOX FOR PTOPC PARMB. * CHECK LDA %MFLG IS SOMETHING THERE? SZA JMP FLGUP YES. DON'T GO OP SUSP LIST. * * SUSPEND VIA THE OP SUSP LIST WHILE WAITING FOR THE * NEXT MASTER REQUEST. WHEN A REQUEST ARRIVES, @INTR * WILL RE-SCHEDULE THE USER. * JSB $LIBR NOP * LDA XEQT,I STA IDSG STA %CSID LDA DEFX STA XSUSP,I * CLA PRIVILEDGED MODE. STA $PVCN * JSB $LIST OCT 106 IDSG NOP * JMP $XEQ RELEASE CPU. DEFX DEF CHECK RESTART ADDRESS. * * PASS RETURN PARAMS TO USER. * SETER STB IERR FLGUP LDA IERR RETURN ERROR CODE. JSB RWORD SZA IF ERROR, DON'T PASS PARAMS. JMP GET,I * LDA M.PTR,I RETURN FUNCTION CODE. AND B7 STA FCN JSB RWORD * LDA M.PTR RETURN TAG TO USER. ADA B6 STA M.PTR LDA MD10 STA TEMP LDB P.PTR,I JSB INDCK * MLOOP LDA M.PTR,I MOVE 10 WORDS. STA 1,I ISZ M.PTR INB ISZ TEMP JMP MLOOP ISZ P.PTR * CLA IF READ/WRITE, RETURN LEN. LDB FCN CPB B2 LDA M.PTR,I CPB B3 LDA M.PTR,I JSB RWORD * CLA,INA SET SEQUENCE FLAG. STA NEXT * JMP GET,I RETURN TO USER. * CLOLD STA NEXT RESET SEQ INDICATOR JSB $LIBR NOP STA %MFLG CLEAR MAILBOX JSB $LIBX DEF *+1 DEF SETPT SKP * * PROCESS "ACEPT" AND "REJCT" CALLS. * REJCT NOP LDA REJCT STORE RETURN ADDR. STA ACEPT LDA BT15 BIT 15 = REJECT JMP ACPT * ACEPT NOP LDA BT14 BIT 14 = ACCEPT ACPT STA AC/RJ * LDA ACEPT POINTER TO USER PARAMS. INA STA P.PTR LDA ACEPT,I SET RETURN ADDRESS. STA ACEPT * CLB STB IERR CLEAR SLAVE ERROR CODE. STB JERR CLEAR MASTER ERROR CODE. * LDA MD46 CHECK CALL SEQUENCE. CPB NEXT JMP ERR IMPROPER SEQUENCE. * * CHECK FOR PREAD/PWRIT REQUEST. * LDB DFBOX GET FCN CODE FROM PARMB. JSB INDCK ADB B2 LDA 1,I AND B7 STA FCN LDB B100 CPA B3 JMP WRIT PWRIT REQ: RECEIVE DATA. CPA B2 BLS,SLB SET FOR SEND REQ & DATA, SKIP JMP NODAT POPEN/PCONT. * * PREAD/PWRIT: CHECK FOR REJECT. * WRIT LDA AC/RJ SSA JMP STOP REJECTED. GO SEND STOP. * ADB %LU STB CONWD SET CONTROL WORD FOR REQ. & DATA * * PREPARE TO SEND OR RECEIVE THE DATA BUFFER. * LDA P.PTR ACCEPTED. GET USER BUFR ADDR. ADA B2 LDB 0,I JSB INDCK STB BUFAD * LDB DFBOX GET BUFFER LENGTH. JSB INDCK ADB D18 LDA 1,I STA IDBFL JMP REP * * SEND STOP FOR REJECTED PREAD/PWRIT REQUEST. * STOP JSB EXEC DEF *+5 DEF ICNTL CONTROL--NO ABORT. DEF %LU DEF DUMMY DEF DUMMY JMP DOWN DRIVER ERROR DETECTED. * NODAT LDA %LU STA CONWD SEND REQUEST ONLY * * BUILD REPLY BUFFER (FOR ALL REQUESTS). * REP LDB DFBOX JSB INDCK LDA 1,I STORE STREAM, SUB-STREAM. IOR BTRPY SET REPLY & FRIENDLY BITS STA REPLY INB LDA 1,I STA REPLY+1 * LDA AC/RJ IOR FCN INSERT FUNCTION CODE. STA REPLY+2 * LDA JERR STORE ERROR CODE. STA REPLY+3 * LDA XEQT,I IF POPEN, STORE ID SEG LDB FCN ADDR IN WORD 6. CPB B1 (USED BY @INTR) STA REPLY+5 * LDB P.PTR,I MOVE TAG FROM USER CALL JSB INDCK STB TEMP TO REPLY BUFFER. * LDA DFTAG STA TEMP1 * LDB MD10 * TLOOP LDA TEMP,I STA TEMP1,I ISZ TEMP ISZ TEMP1 INB,SZB JMP TLOOP * STB REPLY+4 CLEAR UNUSED WORDS STB REPLY+6 STB REPLY+7 * LDB DFBOX GET THE ADDRESS OF THE ORIGINAL PARMB. JSB INDCK TRACK DOWN A DIRECT ADDRESS. ADB D33 POINT TO THE TIME-TAG WORD. DLD 1,I GET THE ORIGINAL TIME-TAGS, DST REPLY+33 AND ADD THEM TO THE REPLY. LDA CONWD AND B300 LDB B2 WRITE CODE CPA ^B100 IS IT A SEND REQ & READ DATA? CLB,INB YES, SET READ CODE ADB BT15 ADD THE NO-ABORT FLAG, ALSO. STB IRW LDA MD10 STA RETRY SET RETRY COUNT * DVTRY JSB EXEC TRANSMIT REPLY (AND DATA) DEF *+7 DEF IRW DEF CONWD DEF REPLY DEF D35 DEF BUFAD DEF IDBFL JMP DOWN DRIVER ERROR DETECTED. * SLA,RAR JMP CLSEQ NO ERRORS. * SWP AND B40 ISOLATE EQT12 BIT#5 (REMOTE BUSY) CLE,ERB SEZ,SZA,RSS BUSY-REJECT/REMOTE BUSY OR BOTH? JMP DOWN NEITHER, DRIVER ERROR SEZ,RSS WAS THE REMOTE SYSTEM BUSY? JMP BZWT YES, WAIT A WHILE SZA NO, SIMULTANEOUS REQUEST? JMP DVTRY YES, LET DVR65 RESOLVE PROBLEM JMP WAIT DRIVER BUSY * BZWT ISZ RETRY OK TO RETRY? RSS YES JMP DOWN NO LDB MD90 900 MSEC DELAY RSS WAIT LDB MD9 90 MSEC DELAY STB OFSET * JSB EXEC INTO TIME LIST & SUSPEND DEF *+6 DEF D12 DEF B0 DEF B1 DEF B0 DEF OFSET JMP DVTRY * CLSEQ AND B10 CHECK FOR RECEIVED STOP SZA,RSS SKIP IF STOP RCVD JMP *+3 OTHERWISE RETURN GOOD STATUS * DOWN LDA MD47 RETURN COMMUNICATIONS ERROR ERR STA IERR * ISZ P.PTR JSB RWORD SSA SKIP IF NO ERROR JMP ACEPT,I * CLA CLEAR SEQUENCE FLAG. STA NEXT * JSB $LIBR B0 NOP CLA CLEAR MAILBOX FLAG. STA %MFLG JSB $LIBX DEF ACEPT RETURN TO USER. * * FINIS CALL. * FINIS NOP CLA STA IERR JSB $LIBR NOP STA %CSID CLEAR MAILBOX FLAG AND STA %MFLG CURRENT SLAVE ID SEG ADDR. JSB $LIBX DEF FINIS,I * PASS A-REG CONTENTS TO USER PARAM, BUMP P.PTR. * RWORD NOP  LDB P.PTR,I JSB INDCK STA 1,I ISZ P.PTR JMP RWORD,I * * RESOLVE INDIRECT PARAMETER ADDRESSES. * INDCK NOP RSS LDB 1,I RBL,CLE,SLB,ERB JMP *-2 JMP INDCK,I SKP * * CONSTANTS AND WORKING STORAGE. * B1 OCT 1 B2 OCT 2 B3 OCT 3 B6 OCT 6 B7 OCT 7 B10 OCT 10 B40 OCT 40 B100 OCT 100 B300 OCT 300 D12 DEC 12 D18 DEC 18 D33 DEC 33 D35 DEC 35 MD9 DEC -9 MD10 DEC -10 MD46 DEC -46 MD47 DEC -47 MD90 DEC -90 BT14 OCT 40000 BT15 OCT 100000 ICNTL OCT 100003 OFSET NOP RETRY NOP DUMMY NOP DUMMY PARAMETER FOR DVR65 COMPATABILITY. CONWD NOP BTRPY OCT 44000 BIT 14= REPLY, BIT 11= FRIENDLY XSUSP OCT 101730 XEQT OCT 1717 TEMP NOP TEMP1 NOP BUFAD NOP NEXT NOP FCN NOP IERR NOP ERR CODE RETURNED TO SLAVE. JERR NOP ERR CODE RETURNED TO CENTRAL. P.PTR NOP M.PTR NOP AC/RJ NOP IRW NOP DFBOX DEF %MBOX IDBFL NOP DFTAG DEF REPLY+8 REPLY BSS 35 * SIZE EQU * * END a + 5 91705-18112 1612 S 0122 DS1/B SCE/5 MOD DMESG SOURCE             H0101 ASMB,R,L,C HED DMESG 91705-16112 * (C HEWLETT PACKARD CO. 1976 NAM DMESG,7 91705-16112 REV A 760319 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * * DMESG * SOURCE: 91705-18112 * BINARY: 91705-16112 * JIM HARTSELL JULY 30, 1974 * * LIBRARY SUBROUTINE APPENDED TO RTE-C SATELLITE USER * PROGRAM FOR SENDING MESSAGES TO CENTRAL STATION * OPERATOR CONSOLE (LU 1). * ENT DMESG * EXT DEXEC,GETLU * A EQU 0 * * GET MESSAGE ADDRESS AND LENGTH. * DMESG NOP ISZ DMESG ISZ DMESG LDA DMESG,I JSB INDCK STA BUFAD MESSAGE ADDRESS. ISZ DMESG LDA DMESG,I JSB INDCK LDB A,I ADB MD38 TRUNCATE TO 36 WORDS. LDA A,I SSB,RSS LDA D37 STA BUFL MESSAGE LENGTH (WORDS). CMA,INA STA CNT ISZ DMESG ADJUST RETURN ADDRESS. * * MOVE MESSAGE TO INTERNAL BUFFER. * LDA DFOUT STA TEMP * LOOP LDA BUFAD,I STA TEMP,I ISZ BUFAD ISZ TEMP ISZ CNT JMP LOOP * LDA BUFL ADJUST BUFFER LENGTH. ADA B3 STA BUFL * JSB GETLU GET LU OF THIS SATELLITE. DEF *+2 DEF TEMP * LDA TEMP CONVERT TO ASCII AND LDB DFLU PUT INTO MESSAGE. JSB BTOA * SEND THE MESSAGE WITH ID PREFIX. * JSB DEXEC DEF *+6 DEF B0 DEF B2 DEF B1 DEF OUTBF DEF BUFL * JMP DMESG,I RETURN TO CALLER. * * SUBROUTINE TO CHASE INDIRECTS. * INDCK NOP RSS LDA A,I    RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I * * BINARY TO ASCII CONVERSION ROUTINE. * * CALLING SQUENCE: * * (A) = BINARY NUMBER. * (B) = ASCII DESTINATION BUFFER ADDRESS. * JSB BTOA * BTOA NOP ENTRY. STA TEMP STB TEMP+1 LDA DECX INIT. DEC. INDEX. STA TEMP+2 CLB (B)=LEFT/RIGHT POINTER. STB TEMP+3 INIT. LEADING ZERO FLAG. * CONV1 CLA STA TEMP+4 INIT. CURRENT DIGIT. LDA TEMP GET VALUE. CONV2 ADA TEMP+2,I ADD TABLE ENTRY. SSA DID IT GO NEGATIVE? JMP CONV3 YES. STA TEMP NO. ISZ TEMP+4 JMP CONV2 LOOP BACK. * CONV3 LDA EMP+3 LEADING ZERO? ADA TEMP+4 SZA,RSS JMP CONV4 YES, IGNORE. LDA TEMP+4 NO. IOR B60 CONVERT TO B60. * SLB,RSS INSERT, L OR R? ALF,SLA,ALF WILL ALWAYS SKIP. IOR TEMP+1,I MERGE RIGHT CAR. STA TEMP+1,I SLB ISZ TEMP+1 MOVER POINTER. INB ISZ TEMP+3 LEADING ZERO FLAG. * CONV4 CCA CPA TEMP+2,I ARE WE DONE? JMP BTOA,I YES, RETURN. ISZ TEMP+2 NO, MOVE DECADE POINTER. CPA TEMP+2,I LAST DIGIT? ISZ TEMP+3 YES. JMP CONV1 NO. * DECX DEF .DIGT .DIGT DEC -10000,-1000,-100,-10,-1 * * * CONSTANTS AND WORKING STORAGE. * B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B60 OCT 60 D37 DEC 37 MD38 DEC -38 CNT NOP BUFL NOP BUFAD NOP TEMP BSS 5 DFLU DEF OUTBF+1 DFOUT DEF OUTBF+3 OUTBF ASC 3,=S : BSS 37 * SIZE EQU * * END -[  ,3 91705-18113 1553 S 0122 DS1/B SCE/5 MOD @CLCK SOURCE             H0101 pASMB,R,L,C HED @CLCK - 91705-16113 * (C) HEWLETT PACKARD CO. 1976 NAM @CLCK,1,3 91705-16113 REV.A 751230 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * @CLCK * SOURCE: 91705-18113 * BINARY: 91705-16113 * JIM HARTSELL * DEC. 10, 1974 * MODIFIED BY: C.C.H. (12-30-75) [DERIVED FROM: 91705-18013 REV.B] * * CORE RESIDENT RTE-C SATELLITE PROGRAM SCHEDULED EVERY * 10 MILLISECONDS TO INCREMENT THE TIME VALUES FOR USER * PROGRAMS IN THE WAIT LIST. WHEN THE TIME VALUE GOES TO * ZERO, THE PROGRAM IS RE-STARTED. * ENT @CLCK EXT %LIST,%TIME,EXEC,$LIBR,$LIBX,$LINK,$WORK * A EQU 0 B EQU 1 * * GET CURRENT SYSTEM TIME FOR PARMB TIME-TAGS. * @CLCK JSB EXEC ASK THE SYSTEM DEF *+3 TO PROVIDE DEF D11 THE CURRENT DEF TIMBF TIME-OF-DAY. * LDA TIMBF GET THE 10'S OF MILLISECONDS VALUE. ADA TIMBF+1 ADD SECONDS FOR LEAST TIME-COMPOSITE. LDB TIMBF+2 GET THE MINUTES VALUE. ADB TIMBF+3 ADD HOURS FOR MOST TIME-COMPOSITE VALUE. * JSB $LIBR GAIN ACCESS TO NOP SYSTEM RESOURCES. DST %TIME SAVE RTE-II STYLE TIME VALUE IN <@QUE>. JSB $LIBX RESTORE THE DEF *+1 SYSTEM'S DEF *+1 DEFENSES. * * BEGIN SCAN OF WAIT-LIST. * LDA %LIST LDB A,I STB TEMP NEGATIVE # OF ENTRIES. INA STA TEMP1 ADDR OF FIRST ENTRY. * LOOP LDA TEMP1,I CHECK IF TIME VALUE SZA,RSS IS ZERO. JMP NEXT YES-GO TO NEXT ENTRY. * * INCREMENT THE TIME VALUE AS EACH I#N-USE ENTRY IS FOUND. * JSB $LIBR NOP LDA TEMP1,I CAN'T USE ISZ. INA SSA STORE NEW TIME IF JMP CLCK1 NEGATIVE OR ZERO. SZA,RSS CLCK1 STA TEMP1,I JSB $LIBX DEF *+1 DEF *+1 * SZA JMP NEXT * * TIME IS UP. CHECK IF PROGRAM STILL IN OP SUSPEND LIST. * LDA TEMP1 ADA B4 LDA A,I ID SEGMENT ADDRESS. STA WORK ADA D15 LDA A,I PROGRAM STATUS WORD. AND B17 CPA B6 IN OPERATOR SUSPEND LIST? JMP SCHED YES. * * MOVE TO NEXT ENTRY IN WAIT-LIST. * NEXT LDA TEMP1 ADA B5 STA TEMP1 ISZ TEMP JMP LOOP * * EXIT WITH RECALL IF END OF LIST. * JSB EXEC RECALL IN 10 MS. DEF *+6 DEF D12 DEF B0 DEF B1 DEF B0 DEF MD1 * JMP @CLCK * SKP * RE-START A USER PROGRAM VIA RTE-C LINKAGE PROCESSOR. * SCHED JSB $LIBR NOP LDB TEMP1 KILL PROG NAME IN INB WAIT-LIST ENTRY. CLA STA B,I LDB $DWRK SSB,RSS JMP *+3 ELB,CLE,ERB LDB B,I * LDA WORK SET UP SCHEDULER VARIABLES: STA B,I "WORK" INB STA B,I "WLINK" INB ADA B6 STA B,I "WPRIO" * ADA D9 SET STATUS WORD IN CLB,INB ID SED = SCHEDULED. STB A,I * JSB $LINK CALL LINKAGE PROCESSOR: B6 OCT 6 REMOVE FROM OP SUSP LIST. B1 OCT 1 LINK INTO SCHEDULE LIST. * JSB $LIBX DEF *+1 DEF NEXT * * CONSTANTS AND WORKING STORAGE. * B0 OCT 0 B4 OCT 4 B5 OCT 5 B17 OCT 17 D9 DEC 9 D11 DEC 11 D12 DEC 12 D15 EQU B17 MD1 DEC -1 TEMP NOP TEMP1 NOP WORK NOP $DWRK DEF $WORK TIMBF BSS 5 * SIZE EQU * END @CLCK   -5 91730-12001 1805 R C0122 %MPLIB MULTIPOINT LIBRARY             H0101  UMPLIB 91730-12001 REV 1805 780301  CNVSC %c91730-16004 REV 1805 771219 @TCNVSCIGETX @$OPSY.ENTR:`cB "L#| "L# L@|l\$,PԀ`B`#0 FIXMP 3c91730-16008 REV 1805 771206 @.FIXMP !$LIBR$LIBX;``Dct(k|)L,Zt* -T.,L/,L0,d*14+t<(`L7x ,$<l)L2|), `G,??v .4 91730-18001 1840 S C0322 &DVR07 - MULTIPOINT DVR.              H0103 ASMB,L,C,N * NAME : DVR07--2645 MULTIPOINT DVRIVER * SOURCE: 91730-18001 1840 * RELOC: 91730-16001 1840 * PROGMR: G.W.J. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * HED 2645 MULTIPOINT DRIVER (DVR07) 06-06-78 0950 &DV7E0 NAM DVR07 91730-16001 REV 1840 780801 &DV7E0 ENT I.07,C.07 EXT $LIST * * * * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 * * [ ] EQT1 * [ ] EQT2 * [ ] EQT3 * [D ][B ][P ][S ][T ][<------UNIT------>][<---SELECT CODE------>] EQT4 * [ AV ][<---EQUIPMENT TYPE--->][DO][OR][ET][BR][<-ERROR CODE->] EQT5 * [ [<-----FUNCTION--->][<---REQUEST CODE----->] EQT6 * [<-----------------INPUT OUTPUT BUFFER POINTER---------------->] EQT7 * [<-------------------INPUT OUTPUT BUFFER LENGTH--------------->] EQT8 * [<------------------------IP1--------------------------------->] EQT9 * [<------------------------IP2--------------------------------->] EQT10 * [<-------------------LINK LIST POINTER------------------------>] EQT11 * [RP][RS][LF][CR][HO][CL][NL][SC]<--------EQT EXT. LTH.-------->] EQT12 * [<-------------------EQT EXT. POINTER------------------------->] EQT13--] * [ ] EQT14 ] * [ ] EQT15 ] * [L ][<-------GROUP ID.------->][<------DEVICE ID.------------->] EQT16<-] * [DF][BF][SK][OB][AA][LINE NUMBER][<---------STATE------------->] EQT17 * [<---------------WORD COUNT FOR THIS OPERATION---------------->] EQT18 * [<-------------MEMORY ADDRESS POINTER------------------------->] EQT19 * [<-------------LAST WORD AV. MEMORY USER BUFFER--------------->] EQT20 * * NOTE: IF EQT IS A LINE EQT (EQT16 B15=1) EQT16 B0-14 CONTAINS ID SEG ADD * OF A PROGRAM TO BE SCEDULED IF A POS. RESP. RECEVED TO A POLL * AND THERE IS NO PENDING READ RQ. * * INITIATION CALLS: * * LINE: * * CALL EXEC(3,ILU+2000B,ICW) * * WHERE: ILU IS AN LU POINTING TO AN EQT WHICH IS LINKED TO * A 12790A INTERFACE CARD AND DVR07. BIT 15 OF ICW IS * SET TO 1 TO INDICATE THIS IS A LINE SET UP REQUEST. * * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 * ICW = 1 [ TO VAL ] [ LN ] * TO VAL = THE NUMBER OF 100MS (0-30) ALLOWED FOR LINE TURNAROUND. * A ZERO IN THIS POSITION IMPLIES THE DEFAULT. (3 SEC.) * LN = LOGICAL LINE NUMBER (0-7) * THIS ARGUMENT MUST ALWAYS BE SUPPLIED. * * TOV*256+LN NOTE: IN THE EVENT OF A POWER FAIL AND * THE RESTARTING OF THE MP SYSTEM BY (FIXMP) * THE TIME-OUT VALUE WILL REVERT TO THE * DEFAULT OF 3 SEC. * TERMINAL: * * CALL EXEC(3,2000B+LUN,ICW) * * WHERE: LUN IS A LU POINTING TO AN EQT WHICH IS LINKED TO DVR07. * BIT 15 OF ICW MUST BE ZERO. * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 * ICW = 0 [ LN ][ 6 BITS GID ][ 6 BITS DID ] * LN = LINE NUMBER (0-7) * * NOTE: WHEN A TERMINAL IS INITIATED THE "CH" (SELECT CODE) CONTAINED * IN ITS LINE EQT IS MOVED TO THE "CH" IN THE TERMINAL EQT. * USING THE LU AND EQ COMMANDS IN RTE ONE CAN EASILY TELL *  WHICH LINE A TERMINAL LU IS LINKED TO. * * GID (GROUP ID) AND DID (DEVICE ID) ARE PRODUCED BY ANDING * ALPHABETIC CHARACTER WITH 77B. * * LINE OPERATIONS: * * LINE OPERATIONS ARE THOSE SPECIAL FUNCTIONS WHICH CAN ONLY BE DONE ON A * LINE CONTROL LOGICAL UNIT. SEE 02645-90005 PP.5.38-5.41. * * "WHO ARE YOU" CALL EXEC (1,LUN,IBUF,IBUFL,ID) * * LUN = A LINE CONTROL LOGICAL UNIT NUMBER. * IBUFL MUST BE LONG ENOUGH TO CONTAIN 3 WORDS PER TERMINAL * * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 * ID = [ GROUP ID CHARACTOR ][ PARENTHESIS CHARACTOR ] * * RESULTING BUFFER FORMAT: * NOTE: THE RIGHT BYTE OF ID IS FORCED * ----------- TO A PARENTHESIS BY THE DRIVER. IT IS * \ GID \ DID \ IMPORTANT HOWEVER THAT THE GROUP ID * ----------- CHARACTOR BE SUPPLYED AS THE LEFT BYTE * \ ST0 \ ST1 \ OF THE ARGUMENT "ID" IN THE CALL. * ----------- * \ ST2 \ 40B \ * ----------- * * "GROUP/LINE SELECT AND WRITE" * * CALL EXEC (2,LUN,IBUF,IBUFL,ID) * * LUN = A LINE CONTROL LOGICAL UNIT NUMBER * * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 * GROUP ID = [ GROUP ID CHARACTOR ][ (176B) ] * * LINE ID = [ (176B) ][ (176B) ] * * NOTE: THE RIGHT BYTE OF THE ID IS FORCED TO A 176B * BY THE DRIVER. IT IS IMPORTANT THAT THE GROUP ID * CHARACTOR BE SUPPLYED AS THE LEFT BYTE OF THE ARGUMENT * "ID". SUPPLYING A 176B AS THE LEFT BYTE RESULTS IN * DOING A LINE SELECT WRITE OR A WRITE TOO ALL THE * TERMINALS ON THE LINE. IF A NULL IS IN THE LEFT BYTE * A "^" WILL BE USED RESULTING IN A "LINE" SELECT. * SKP * * SPECIAL CONTROL FUNCTIONS: * * FUNCTION 21B - REMOVE * * TO REMOVE A LINE FROM A SYSTEM. * CALL EXEC(3,ILU+2100B,LN) * * ILU = LINE CONTROL LOGICAL UNIT NUMBER * LN = LOGICAL LINE NUMBER WITH BIT 15 SET TO A 1 * * TO REMOVE A TERMINAL FROM A LINE. * CALL EXEC(3,ILU+2100B) * * ILU = TERMINAL CONTROL LOGICAL UNIT NUMBER * * FUNCTION 22B - SET "NAK" AND "WACK" COUNT. * CALL EXEC(3,ILU+2200B,IM) * * ILU = LINE CONTROL LOGICAL UNIT NUMBER * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 * IM = [ TBF ][ WACK CNT. ][ RECV NAK ][ XMIT NAK ] * 1,2,4 0-32 0-16 0-16 * FUNCTION 23B - DISABLE ROUTINE POLLING AND/OR SET EDIT MODE FLAGS. * CALL EXEC(3,ILU+2300B,IM) * * ILU = TERMINAL CONTROL LOGICAL UNIT NUMBER * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 * IM = D R L C H X N S A * WHERE:S=1-->SCHEDUAL THE ASYNCHRONUS INTERRUPT PROGRAM ON BREAK. * A=1-->ENABLE "AUTO-ACKNOWLEDGEMENT" * D=1-->DISABLE ROUTINE POLLING. * R=1-->STRIP "RECORD SEPERATOR" FROM INCOMING TEXT. * L=1-->STRIP "LINE FEED" FROM INCOMING TEXT. * C=1-->STRIP "CARRAIGE RETURN" FROM INCOMING TEXT. * H=1-->SEND "HOME" BEFOR SENDING TEXT. * X=1-->SEND "CLEAR DISPLAY" BEFOR SENDING TEXT. * N=1-->APPEND A " CR-LF-ESC-137B " TO TEXT. * NOTE: IF THE TEXT IS TERMINATED WITH A "_" (137B) * THE "CR-LF" WILL NOT BE APPENDED. * * TBF- TERMINAL BLOCKING FACTOR * * 0--> USE THE DEFAULT 256 BYTE RECEIVE BLOCK. DATA COMM. BUFFER=512 * 1--> SPECIFY THE 256 BYTE RECEIVE BLOCK SIZE. DATA COMM. BUFFER=512 * 2--> SPECIFY THE 512 BYTE RECEIVE BLOCK SIZE. DATA COMM. BUFFER=1024 * 3--> MUST NOT BE USED. * 4--> SPECIFY THE 1024 BYTE RECEIVE BLOCK SIZE. lDATA COM. BUFFER=2048 * 5-7--> MUST NOT BE USED. * * NOTE: "AUTO-ACKNOWLEDGEMENT" CAUSES (BELL-BELL-CR-LF-ESC-137B) * TO BE SENT TO THE TERMINAL AFTER A FULL MESSAGE IS RECEVED. THIS * IS USEFULL WHEN OPERATIND INTERACTIVLY. SKP * * EQT FLAG DEFINITION: * * EQT12 - ROUTINE POLL FLAG, EDIT MODE FLAGS AND EQT EXT LTH. * * BITS 0-7 CONTAIN THE EQT EXT LENGTH (CURRENTLY = 5) * * (S) BIT 8....1-->SCHEDUAL THE ASYNCHRONUS INTERRUPT PROGRAM ON BREAK. * (N) BIT 9....1-->APPEND A "CR-LF-ESC-137B" TO OUT GOING TEXT. * (X) BIT 10....1-->SEND A "CLEAR DISPLAY" BEFOR SENDING TEXT. * (H) BIT 11....1-->SEND A "HOME UP" BEFOR SENDING TEST. * (C) BIT 12....1-->STRIP "CR" FROM INCOMING TEXT. * (L) BIT 13....1-->STRIP "LF" FROM INCOMING TEXT. * (R) BIT 14....1-->STRIP "RS" FROM INCOMING TEXT. * BIT 15....1-->ROUTINE POLLING DISABLED. * * EQT16 - ID/ID SEG. ADD. * * IF BIT 15 OF EQT16 = 0 THAN THIS EQT IS A TERMNIAL EQT AND THE * REMANING (0-14) BITS CONTAIN THE ID OF THE TERMINAL ASSOCIATED * WITH THIS EQT. * * IF BIT 15 OF EQT16 = 1 THAN THIS EQT IS A LINE CONTROL EQT AND * THE REMAING (0-14) BITS CONTAIN THE ID SEGMENT ADDRESS OF A * PROGRAM TO BE SCEDULED ON ASYNCHRONUS INTERRUPTS. * * EQT17 - CONTROL FLAGS, LINE NUMBER AND DRIVER STATE * * BITS 0-7..STATE OF THE DRIVER RELATIVE TO THIS EQT. (0-256) * STATE 0-->INACTIVE. * * BITS 8-10.LOGICAL LINE NUMBER TO WHICH THIS EQT IS LINKED. * * BIT 11....1-->AUTO-ACKNOWLEDGE EACH FULL MESSAGE AS IT IS RECEVED. * BIT 12....1-->ODD NUMBER OF BYTES IN WRITE BUFFER. * BIT 13....1-->THIS EQT WAS SKIPED ON THE LAST TIME AROUND. * BIT 14....1-->LAST TRANSACTION WAS TERMINATED WITH AN ETB * BIT 15....1-->WAITING FOR A DMA CHANEL. * * EQT5 - STATUS BITS 0-7 * * BITS 0-3..ERROR CODE SEE CONTINUATION ERRORS * BIT 4....1-->BREAK DETECTED. *  BIT 5....1-->CONTROL-Y DETECTED (EM) OR ZERO LTH. READ * BIT 6....1-->ODD NUMBER OF BYTES IN THE LAST READ. * BIT 7....1-->(D-O-R-E) DATA OVERRUN ERROR. INPUT MESSAGE * EXCEEDED THE BUFFER. * SKP * * DETECT AND SET MODEM CONTROL LINES. F=06B * * TO DETECT AND SET SELECTED MODEM CONTROL LINES. * R=CALL EXEC(3,ILU+600B,IP) THE "B" REGESTER CONTAINES MODEM STATUS. * * ILU = LINE CONTROL LOGICAL UNIT NUMBER ONLY. * IP = 0-->RETURN MODEM STATUS ONLY. * IP # 0-->SET OR CLEAR THE SELECTED LINES AND RETURN STATUS. * * "B" REGESTER FORMAT * * BIT 15...INTERNAL USE ONLY. * 14...INTERNAL USE ONLY. * 13...(IC) RING DETECTED. * 12...(RR) CARRIER DETECTED. * 11...(CS) CLEAR TO SEND DETECTED. * 10...(DM) DATA SET READY DETECTED. * 09...(SRR) SECONDARY CARRIER DETECTED. * 08...(RT) RECEIVE CLOCK * 07... * 06... BITS 4-7 CONTROL THE BAUD RATE GENERATOR * 05... ON THE 12790A CARD. SEE THE 12790A MANUAL. * 04... * 03...(RS) REQUEST TO SEND ASSERTED. * 02...(SRS) SEC. R-T-S * 01...(TR) DATA TERMINAL READY * 00...(J2 PIN 19) RATE SEL. * NOTE: ONLY (TR) AND (J2 PIN 19-RATE SEL.) CAN BE MODIFIED. * * IP FORMAT FOR DOING MODEM CONTROL: * * BIT 00 =1--> ASSERT J2 PIN 19 (RATE SEL.) * BIT 01 =1--> DEASSERT J2 PIN 19 (RATE SEL.) * BIT 02 =1--> ASSERT DATA TERMINAL READY (TR) * BIT 03 =1--> DEASSERT DATA TERMINAL READY (TR) * BIT 04-15 UNUSED * * NOTE: SETING BOTH ASSERT AND DEASSERT RESULTS IN DEASSERT. * * BIT ASSIGNMENTS IN IP MAY CHANGE DEPENDING ON THE MODEM USED. * CHECK THE 12790A MANUAL FOR SPECIFIC ASSIGNMENTS. * FUNCTION 6 IS NOT EXECUTED UNTIL THE NEXT TIME THE DRIVER IS * POINTING TO THE LINE CONTROL EQT, SO THERE CAN BE SOME TIME DELAY * BEFORE THE RESULT OF THE CALL IS REALIZED. MAKE THIS CALL TO LINE * CONTROL LU'S ONLY. * SKP * LINKED LIST STRUCTURE * * * THE LINE CONTROL EQT AND ALL OF THE TREMINAL CONTROL EQT'S * ASSOCIATED WITH IT ARE LINKED BY WAY OF A LINK WORD IN EQT11 OF EACH * EQT. EQT11 CONTAINS THE EQT1 ADDRESS OF THE NEXT EQT IN THE LIST, WITH * THE LAST MEMBER OF THE LIST POINTING BACK TO THE LINE CONTROL EQT. * AS TERMNIAL EQT'S ARE ADDED TO THE LINE THEY ARE INSERTED BETWEEN * THE LINE EQT AND THE FIRST TERMINAL EQT. THIS RESULTS IN THE LAST * EQT INITATED BEEING THE FIRST EQT IN THE LIST FOLOWING THE LINE EQT. * IF AN ACTION RELATIVE TO AN EQT WILL RESULT IN AN SUBSEQUENT * INTERRUPT FORM THE INTERFACE CONTROLING THE LINE, THE INTERRUPT TABLE * ENTERY ASSOCIATED WITH THAT INTERFACE WILL BE MODIFIED TO POINT TO * EQT1 OF THE ACTIVE EQT. * * LINE * ______ * EQT1 \ \<----- * / / \ * EQT11\ \--- \ * / / \ \ * EQT16\1---\ \ \ NOTE: EQT16 BIT 15=1-->LINE CONTROL EQT * / / \ \ * EQT20\____\ \ \ * \ \ * TERM \ \ NOTE: THIS WAS THE LAST EQT INITATED. * ______ \ \ * EQT1 \ \<--- \ * / / \ * EQT11\ \--- \ * / / \ \ * EQT16\0---\ \ \ NOTE: TERMINAL EQT'S HAVE A 0 IN BIT 15 OF EQT16. * / / \ \ * EQT20\____\ \ \ * \ \ NOTE: INTERNAL TO THE DRIVER THERE IS A 8 WORD * TERM \ \ TABLE CALLED THE "LINE TABLE". THIS TABLE IS * ______ \ \ ORDERD ON LOGICLA LINE NUMBER (0-7) AND EACH * EQT1 \ \<--- \ ENTERY POINTS TO THE EQT1 WOED ADDRESS OF THE * / / \ LINE CONTROL EQT FOR THAT LINE. * EQT11\ \------ * / / * EQT16\0---\ * / / * EQT20\____\ * SKP * * ERROR-CODES * * INITATOR ERRORS: * * SEE PP.15 FOR INITATOR ERROR CODES * * * CONTINUATION ERRORS * A REGESTER=1 ER˭ROR CODE IN EQT5 BITS 0-3=: * * 0-REQUEST REJECTED 10-RECEVE BYTE OVERRUN * 1-MODEM OFF 11-TEXT BLOCK OVERRUN * 2-NO TRANSMIT CLOCK 12-NAK OVERRUN * 3-NO CLEAR TO SEND 13-WACK OVERRUN * 4-NO RECEVE CLOCK 14-ACK SEQUENCE ERROR * 5-NO CARRIER DETECT 15-UNRECOGNIZED RESPONSE * 6-NO RESPONSE 16-TERMINAL BUFFER OVERFLOW * 7-BREAK, NO STOP BIT 17-INTERNAL LOGIC ERROR * SKP * * SAMPLE SYSTEM GENERATION: * *EQT ENT. * . * . * M1...SC,DVR07,X=5 <--\-THESE EQT'S ARE GOING TO BE USE FOR LINE * M2...SC,DVR07,X=5 \ CONTROL AND MUST HAVE A 12790A CARD ASSOCIATED * M3...SC,DVR07,X=5 \ WITH THERE SC. * M4...SC,DVR07,X=5 \ * M5...SC,DVR07,X=5 <--\ * M6...SC,DVR07,X=5 * M7...SC,DVR07,X=5 * M8...SC,DVR07,X=5 * . * . *LU ENT. * . * . * N1,M1 LINE CONTROL * N2,M2 * N3,M3 * N4,M4 * N5,M5 LINE CONTROL * N6,M6 * N7,M7 * N8,M8 * . * . *INT ENT. * . * . * SC FOR THE FIRST CARD,PRG,ASIP<--PROGRAM NAME * SC FOR THE SECOND CARD,PRG,ASIP<--PROGRAM NAME * . * * SKP I.07 NOP JSB SETIO GO SETUP IO INST (SC IN A) CLA "A"=0 FOR EQT EXT ONLY STA EQT14,I CLEAR ANY TO VALUE IN EQT14 JSB SETEQ SETUP EQT EXT LDA EQT6,I GET "RC" AND D3 LOW 2 BITS OF EQT6 STA TEMP SAVE RC FOR SETING STATE CPA D3 "RC"=3(CONTROL)? JMP CONT YES, GOTO CONTROL LDB EQT17,I TEST FOR DMA FLAG SSB EQ17 BIT 15=1? JMP STDMA FLAG SET,GO TO DMA SETUP LDB EQT11,I "LLP"=0? SZB,RSS JMP ERR31 ERROR CPA D1 READ? JMP I.01 YES, GO ON LDA EQT16,I NO, OK AND RBYTE CHECK DEV. ID. CPA QM DEV. ID.= A QUOTE MARK? JMP ERR32 ?]YES, ERROR-WRITE TO A GROUP ID. I.01 LDB EQT8,I TEST BUFFER LENGTH CPA D1 READ REQUEST? SZB YES, BUFF LTH=0? JMP I.01A NO, OK JMP ERR01 YES, ERROR * * NORMAL READ/WRITE OPERATIONS GET STARTED HERE. * I.01A CLE,SZB,RSS IF BF LT=0 DO NOT DO CH WD CHK JMP I.02 NO, GO ON SSB,RSS -(CH)? JMP I.02 NO, GO ON CMB,INB MAKE POSITIVE CLE,SLB ODD? CCE,INB YES, ADD 1 AND SET "E" RBR B=B/2 I.02 LDA EQT17,I SETUP TO CLEAR FLAGS AND B7.4K AND STATE SEZ ODD BYTE? IOR OBWF YES, SET FLAG STA EQT17,I CLA STA EQT18,I CLEAR EQT18 (WC) SZB,RSS BF LTH=0? JMP I.04 YES, GO ON ADB EQT7,I CALC LAST WD AV MEM ADB MIN1 SUBTRACT 1 I.03 STB EQT20,I PUT IT INTO EQT20 (LWAM) LDA EQT7,I GET FIRST WD AV MEM STA EQT19,I PUT IT INTO EQ19(FWAM) LDA EQT5,I CLEAR STATUS IN EQT5 AND LBYTE STA EQT5,I LDB TEMP SET STATE LDA EQT16,I LINE EQT ? SSA EQ16-B15=1-->LINE LDB PLNRS SET STATE TO PROC. LINE RC CCE JSB STE17 SET STATE JMP RTNI0 RETURN, GOOD * * IF A ZERO LENGTH WRITE IS DETECTED WE CHECK FOR AN APPEND. * I.E. HOME-UP,CLEAR,CR/LF-ESC 137B * I.04 LDA EQT6,I CHECK FOR EDIT FLAGS IN RQ AND B3.4K SZA JMP I.03 YES, GO ON LDA EQT12,I CHECK FOR EDIT FLAGS IN EQ12 AND B7.0K SZA JMP I.03 YES, GO ON JMP ERR01 NO, ERROR SKP * *2 * CONT LDA EQT6,I GET FUNCTION CODE AND B3.7K EQT6,B6-10 SZA,RSS F=0 (CLEAR)? JMP CLEAR YES, GO TO CLEAR RGTN CPA FINIT F=20(INIT)? JMP INIT YES, GO TO INIT RTN. CPA FDINT F=21(DINIT)? JMP DINIT YES, GO TO DINIT RTN. CPA FSNWK F=22(SET NAK WACK CNT.)? JMP STNKW YES,GO DO IT CPA FSEMS F=23(SET EDIT MODE FLAGS)? JMP STEMF YES, GO DO IT CPA FMDCT F=6(MODEM CONTROL)? JMP STNKW YES, GO DO IT JMP RTNI4 DO AN AMED. COMP. RTN. INIT LDA EQT7,I GET IPRAM SSA,RSS LINE SETUP REQUEST? JMP TINIT NO, GO TO TERM. INIT RT * * LINE INITIATION STARTS HERE * AND D7 EQT7,B0-2 STA LN SAVE IT ADA LTP ADD TO LINE TAB POINTER STA TEMP SAVE LDA A,I GET TABLE ENTERY SZA =0? JMP ERR33 NO, ERROR-LINE ASSIGNED LDA EQT11,I ALLREADY LINKED? SZA =0? JMP ERR34 YES, ERROR-ALLREADY LINKED * * CHECK FOR THE RESULTS OF THE DIAGNOSTIC IF ANY. * IF ERROR POST ERROR CODE IN EQT5. * JSB GETA GET CONT. OF OUT REG SSA,RSS DIAG.? JMP LIN1 NO, GO ON ELA,CLE,ERA YES, CLEAR BIT 15 SZA,RSS "A"#0-->ERROR JMP LIN1 NO, GO ON AND B17 YES, POST ERROR CODE STA B IN EQT5 LDA EQT5,I AND ECM IOR B STA EQT5,I JMP ERR30 RETURN ERROR * * MAKE ENTERY * LIN1 LDA EQT1 PUT POINTER IN LINE TABLE STA TEMP,I STA EQT11,I DUMMY UP EQT11 LDA EQT12,I SET "RP" FLAG IOR SIGNB STA EQT12,I LDA LN SAVE LN IN EQT17 ALF,ALF LEFT BYTE STA EQT17,I CLA STA EQT18,I CLEAR (WC) STA EQT19,I CLEAR (FWAM) STA EQT20,I CLEAR (LWAM) LDA EQT4v,I SET "S" BIT IN EQT4 IOR B10K STA EQT4,I * * MAKE PROG ENTERY IF POSILBLE * LDA EQT16,I CHECK TO SEE IF SET SSA EQ16-B15=0? JMP LIN1A NO,GO DO TO RQ. JSB INTEN GET INT. TABEL ENT. STB TEMP SAVE ENT. ADD. LDB EQT1 SETUP TO REPLACE INT ENT CMA,CLE,SSA,INA ID. SEG. ENT.? CLA EQT ENT. IOR SIGNB SET L STA EQT16,I ID, PUT IT IN PROG ENT STB TEMP,I LIN1A LDA EQT7,I CHECK FOR A NEW TIME-OUT VALUE AND B17.4 LEFT BYTE OF IPRAM SZA,RSS NEW VALUE? JMP LIN2 NO, SKIP IT RAL,RAL MOVE IT RAL IOR STTOV MERG THE COMMND. JSB OUTAF SEND IT JSB WATE WAIT FOR THE FLAG LIN2 LDA TORQC REQUEST A TIMEOUT JSB OUTAF JMP RTNI4 * * ROUTINE TO GET DMA FROM THE C.07+3 EXIT. * GTDMA LDB SIGNB SET THE WATEING FOR DMA FLAG CLE IN EQT17. JSB STE17 LDA C.07 BUMP THE RETURN POINT ADA D2 JMP A,I GO BACK TO THE SYSTEM * * FINIT OCT 2000 FDINT OCT 2100 FSNWK OCT 2200 FSEMS OCT 2300 FMDCT OCT 600 SKP * * ERR01 LDA D1 REQUEST REJECTED JMP ERX+1 ERR30 CLA DIAGNOSTIC FAILED JMP ERX ERR31 LDA D1 INACTIVE LU-EQT (NOT IN LINKED LIST) JMP ERX ERR32 LDA D2 WRITE TO A GROUP POLL ID JMP ERX ERR33 LDA D3 LOGICAL LINE NUMBER ALLREADY ACTIVE JMP ERX ERR34 LDA D4 LU-EQT ALLREADY ACTIVE (IN LINKED LIST) JMP ERX ERR35 LDA D5 LU-EQT CAN NOT BE USED AS A TERMINAL LU-EQT JMP ERX ERR36 LDA D6 WRONG LINE NUMBER JMP ERX ERR37 LDA D7 NOT A LINE LU JMP ERX ERR38 LDA D8 TERMINALS STILL ON LINE JMP ERX ERR39 LDA D9 NOT A TERMINAL LU ' ERX ADA D30 ADD OFFSET RTNI CLB CLEAR XLOG FOR RETURN JMP I.07,I RETURN * * RTNI0 CLA NORMAL RETURN JMP RTNI * * RTNI4 LDA D4 IMMEDIATE COMPLETION JMP RTNI * * D8 DEC 8 D9 DEC 9 D30 DEC 30 SKP * * *4 * * TINIT LDA EQT11,I TEST TO SEE IF IN LIST. SZA JMP ERR34 YES, ERROR LDA EQT16,I TEST TO SEE IF MARKED LINE SSA JMP ERR35 YES, ERROR LDA EQT7,I GET LINE NUMBER (LN) AND B70K EQT7,B12-14 ALF MOVE TO BITS 0-2 STA LN SAVE IN LN * * * TEST TO SEE IF LINE ACTIVE * * ADA LTP ADD LN TO TABEL POINTER LDA A,I GET ENTERY SZA,RSS ACTIVE? JMP ERR36 NO, ERROR STA TEMP SAVE ENTERY ADA D10 GET THE LINK LIST PNT LDB A,I STB EQT11,I MOVE LLP TO EQT11 LDB EQT1 POINT LLP TO OUR EQT1 STB A,I * * * MOVE "CH" SELECT CODE FROM LINE EQT TO * TERMINAL EQT. * * LDA TEMP GET LINE EQT PNT ADA D3 GET EQT4 LDA A,I AND B77 MASK SELECT CODE STA B LDA EQT4,I GET OUR EQT4 AND SCMK MASK OUT SC IOR B PUT NEW SC IN EQT4 IOR B10K SET "S" BIT IN EQT4 STA EQT4,I * * * SET UP ID WORD * * LDA EQT7,I GET PERAM STA B SAVE IT AND GPCMK BUILD GROUP CH. RAL,RAL MOVE TO LEFT BYTE IOR HIOB SET HIGH ORDER BIT STA TEMP SAVE IT LDA B AND B77 BUILD DEV CH CPA QM QUOTE MARK IN LOW BYTE? JMP TI.01 YES, DO NOT SET BIT 6 IOR B100 NO, SET BIT 6 TI.01 STA B SAVE DEV. ID IN "B" IOR TEMP IOR NLHGROUP CH. STA EQT16,I PUT IT INTO EQT LDA LN PUT LN EQT17 ALF,ALF LEFT BYTE STA EQT17,I CLA STA EQT18,I CLEAR (WC) STA EQT19,I CLEWR (FWAM) STA EQT20,I CLEAR (LWAM) LDA EQT12,I SETUP TO DIAB. RTN. POLL IOR SIGNB SET BIT 15 OF EQT12 CPB QM DEV. ID.= QUOTE MARK? STA EQT12,I YES, RESTORE EQT12 JMP RTNI4 RETURN B100 OCT 100 * SCMK OCT 177700 HIOB OCT 40000 GPCMK OCT 7700 D10 DEC 10 * * THIS IS WHERE WE CHECK TO MAKE SURE THA LINE ONLY CALLS * ARE BEEING MADE TO LINE CONTROL LU-EQT'S. * STNKW LDA EQT16,I CHECK IF LINE EQ? SSA,RSS EQ16 B15=1-->LINE EQ JMP ERR37 NO ERROR C.C LDB D3 SET PRE CONT. STATE CCE JSB STE17 JMP RTNI0 LET C.07 DO IT. (KN* * * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 * DR RS LF CR HO CL NL SC [ EQT EXT LTH ] * * STEMF LDA EQT12,I PRESERV EQT EXT LTH AND RBYTE EQ12 B0-7 STA B LDA EQT7,I GET OPT PERAM AND LBYTE STRIP OUT IOR B STA EQT12,I RESTORE LDA EQT17,I SET OR CLEAR "AUTO-ACK" FLAG AND B3.4K LDB EQT7,I SET FLAG? SLB IOR B4.0K YES, SET IT STA EQT17,I RESTORE JMP RTNI4 RETURN * * * NOTE: SETTING THE "K" BIT (BIT 8) ON A READ REQUEST IS EQUIVALENT * TO HAVING SET THE "RS","LF",AND "CR" FLAGS WITH FUNCTION 23B AND * RESULTS IN EDITING OUT ALL "RECORD SEP", LINE FEED, AND CARRAGE * RETURN CHARACTORS FROM INCOMEING TEXT. * SETTING THE "X"(10),"A"(9),OR "K"(8) BITS CORRESPONED TO THE * "HO","CL",AND "NL" IN FUNCTION 23B AND HAVE THE SAME RESULT. * X--HOME * A--CLEAR * K--APEND CR/LF SKP * * * DINIT ROUTINE RMOVES LINES FROM SYSTEM * IF THERE ARE NO TERMINALS ON THAT LINE. * * DINIT LDA EQT7,I LINE REQUEST? SSA,RSS JMP TDINT NO, GO TO TDINT LDINT LDA EQT16,I LINE EQT? SSA,RSS BIT 15 EQT 16 =1 JMP ERR37 NO, ERROR LDA EQT11,I EQT11 SHOULD BE PINTING CPA EQT1 TO MY EQT1 JMP LD.01 YES, GO ON JMP ERR38 NO,ERROR LD.01 LDA EQT7,I GET LN FROM IPRAM AND D7 EQT7,B0-2 ADA LTP SETUP POINTER IN LINE TAB STA TEMP SAVE POINTER LDA A,I GET THE ENTERY CPA EQT1 POINT TO ME? JMP LD.02 YES, GO ON JMP ERR36 NO, ERROR BAD LN LD.02 CLA STA TEMP,I CLEAR TAB ENT STA EQT11,I CLEAR LLP STA EQT17,I CLEAR EQT17 STA EQT18,I CLEAR (WC) STA EQT19,I CLEAR (FWAM) STA CEQT20,I CLEAR (LWAM) LDA SC FORCE CARD TO RUN DIAG. IOR STFC AND DISABLE INTERRUPT. STA OFF IOR CLCC CLC STA OFF+1 OFF NOP NOP JMP RTNI4 RETURN * SKP * STFC OCT 102100 CLCC OCT 4600 * * TDINT CHECKS TO SEE IF LINKED, IF SO * THE DEINT IS LEFT TO BE DONE THE NEXT TIME * C.07 POINTS TO THIS TER. EQT. * * TDINT LDA EQT16,I MAKE SURE NOT LINE EQT SSA EQ16-B15=1-->LINE EQT JMP ERR39 LINE EQT, ERROR LDA EQT11,I THIS TER. EQT LINKED? SZA,RSS JMP ERR31 NO, ERROR (NOT ACTIVE) JMP C.C YES, LET C.07 DO IT * SKP * * SETUP DMA XFER HERE * * STDMA JSB STDIO SETUP DMA IO INST. LDA SC BUILD CW1 IOR SIGNB IOR SET CONT MASK ID.00 OTA 6B OUTPUT CW1 ID.01 CLC 2B ARM CW2 SETUP LDA EQT17,I FIND OUT CURRENT STATE AND SSGNB CLEAR DF STA EQT17,I AND RBYTE STA B SAVE STATE IN B REG LDA EQT19,I BUILD CW2 CPB UNLOS STATE=UNLOAD? IOR SIGNB YES, SET CW2 FOR INPUT ID.02 OTA 2B OUTPUT CW2 ELA,CLE,ERA UPDATE EQT19 ADA EQT18,I ADA MIN1 SUBTRACT 1 STA EQT19,I ID.03 STC 2B ARM CW3 SETUP LDA EQT18,I GET WC-->CW3 CMA,INA MAKE NEG. ID.04 OTA 2B OUTPUT CW3 CPB LOADS LOADING BOARD BUFF? JMP ID04A JMP STD.1 SKIP TO UNLOAD ID04A LDA EQT6,I CHECK FOR "M"BIT BIN AND B100 RAL,RAL ALF STA B LDA LOADC OUTPUT LOAD COMMAND IOR B JSB OUTAF JMP ID.05 TO START DMA STD.1 LDA UNL SEND UNLOAD COMMND TO IFC JSB OUTAF LDA EQT16,I LINE EQT ? SSA  EQT16-B15=1-->LINE JMP ID.05 YES, SKIP GETTING ID AND B77 CHECK FOR QM CPA QM QM? JMP ID.05 YES, DO NOT STRIP ID JSB WATE WAIT FOR FLAG * * NOTE: THE FIRST WORD IS THE ID AND WE DO NOT WANT IT * STD.0 STC 10B,C SET CONT ON IFC ID.05 STC 6B,C START DMA ID.06 CLC 6B,C DISABLE DMA FLAG JMP RTNI0 RETURN SKP * * *100 * * C.07 NOP JSB SETIO SETUP IO CLA "A"=0 FOR EXT ONLY STA EQT14,I CLEAR ANY TO VALUE IN EQT14 JSB SETEQ SETUP EQT EXT * * * TEST FOR A SYSTEM LEVEL TIMEOUT * IF SO GO TO TIMEOUT ROUTINE * * LDA EQT4,I TEST FOR T BIT ALF EQT4 B11 SSA =1 JMP TIMER YES, GO TO TIMEOUT RTN * * * * * * * NORMAL C.07 PROCESING * * JSB STEV CHECK STATE RETURN IF INACTIVE LDA EQT11,I EQ11=(EQ1) CPA EQT1 JMP IDLE+1 YES, DO TIME OUT JMP NEXT NO GO TO NEXT TER. EQT. IDLE JSB STITE SET INT. TAB ENT LDA TORQC NO, SEND TIMEOUT RQ JSB OUTAF TO IFACE. JMP RTNCT CONTINUATION RETURN * * * NEXT--IS WHERE WE MOVE TO THE NEXT EQT IN * THE LINKED LIST. (EQT11-->EQT1 ADD OF NEXT EQT) * * NEXT LDA EQT11,I GET LLP JSB SETEQ SETUP NEW EQT LDA EQSV CHECK TO SEE IF COMPL.EQT. CPA EQT1 JMP IDLE+1 YES, DO A TIMEOUT JSB STEV CHECK STATE RETURN IF INACTIVE LDA EQT16,I INACT. IS THIS A LINE EQT? SSA EQT16 B15=1 -->LINE JMP NEXT YES, GOT TO NEXT EQT LDA EQT12,I RTN. POLL DISABLED? SSA EQ12 B15 =1-->DIS. JMP IDLE YES, DO TIME OUT PSPOL LDA EQT17,I NO, SKIPED THIS EQT YET? STA B & RBL,RBL SSB,RSS EQT17 B13=1-->SKIPED JMP C.01 NO FLAG--SKIP IT AND CLSKP FLAG--CLEAR FLAG STA EQT17,I JMP POLLC DO A POLL C.01 IOR B20K SET SKIP FLAG STA EQT17,I JMP NEXT TRY NEXT EQT * * SELECTS START HERE * SELCC LDA EQT16,I SETUP SELECT ID IOR LC IOR LOWER CASE BITS BDCS STA ID LDB SELCS SET SELECT STATE CCE JSB STE17 CLB SET UP TO DO EDIT MODE STB TEMP LDA EQT6,I GET SPECIAL FUNCTION BITS AND B3.4K ALF,RAL STA B SAVE IN "B" LDA EQT12,I GET EDIT MODE FLAGS AND B7.0K EQ12 B9-11 ALF MOVE TO HIGH BITS IOR B ADD THE SP F BITS STA B SAVE IN "B" LDA EQT4,I CHECK FOR UNIT=3 AND B3.7K MASK UNIT BITS CPA GPHMD UNIT=3? ADB B10K YES, SET GPAPH. MODE SW. LDA B GET "B" INTO "A" LDB EQT7,I CHECK FOR FIRST SELECT CPB EQT19,I ON THIS REQUEST.(EQ7=EQ19) JMP FST YES, OK AND B20K NO, ALLOW ONLY (NL) TO GO FST STA TEMP PUT EDIT FLAGS IN TEMP STA EQT18,I SAVE EDIT FLAGS IN EQT18 JMP C.03 YES, CONTINUE THE SELECT * * POLLS START HERE * POLLC LDA EQT5,I ERROR STATUS AND B17 EQ5-B0-3=ERROR CODE SZA EC OF ZERO-->OK-UP JMP IDLE DOWN DO NOT POLL LDA EQT16,I SETUP POLL ID PWAYP STA ID LDB POLLS SET POLL STATE CCE JSB STE17 CLB SETUP EDIT MODE SWTCHES LDA EQT12,I GET EDIT MODE FLAGS AND B70K EQ12 B 12-14 RAL MOVE TO HIGH BITS STA B LDA EQT6,I CHEK "K" BIT IN RQ AND B400 EQ6 B8 } SZA SET? LDB B160K YES, SET ALL SWTC STB TEMP * * C.03 JSB STITE POINT INT. TAB TO EQT LDA PSCMD SEND POLLSEL COMND TO IFC IOR TEMP SET EDIT MODE STCHES JSB OUTAF JSB WATE LDA ID SEND ID JSB OUTA JMP RTNCT CONTINUATION RETURN * * GPHMD OCT 300 CLSKP OCT 7777 B20K OCT 20000 SKP * * * POLL RESP PROC. * * POLL LDB UNLOS SET TO UNLOAD STATE CCE JSB STE17 JSB GETA GET RESP. FROM IFC SSA JMP P.07 A<0--> ERROR CPA ZEOT NEG. RESP. TO POLL? JMP P.05 YES, GO TONEXT EQT. CPA ETXET A=ETXET?-->+RESP FULL MES JMP P.01 YES, GO DO IT CPA ETBET A=ETBET?-->+RESP PART MES JMP P.00 YES, GO DO IT CPA CNYET A=CNYET-->+RESP (EOT) JMP P.06 YES, GO DO IT JMP P.05 UNREC. RESP. DO IT OVER P.00 LDB RETBF SET B/X FLAG TO 1 (ETB) CLE JSB STE17 P.01 LDA EQT5,I TEST FOR ACTIVE RQ SSA,RSS EQT5 B15=1-->ACTIVE JMP SCHDX INACTIVE TRY A SE JSB DIDL SEND "STC" TO IFC JSB WATE JSB GETA BUILD WC AND ADBMK MASK ADD BITS ADA DM17 SUB CONT BYTES STA B PUT BC IN "B" REG CPA D2 ZERO LTH REC.? (ID ONLY) JMP P.06 YES DO A "EOT" COMP. SLB,RSS ODD? JMP P.02 NO, GO ON INB ODD, MAKE EVEN B<--B+1 LDA EQT5,I SET ODD BYTE STATUS IOR OBF STA EQT5,I P.02 RBR DEVIDE B BY 2 LDA EQT16,I LINE EQT? AND LQMMK LOOK FOR BOTH LINE AND QM CPA QM QM? JMP P.02A YES, SKIP NEXT TEST SSA,RSS EQT16-B15=1-->LINE ADB MIN1 B<--B-1 (ID) P.02A STB EQT18,I PUT WC INTO EQT18 ADB EQT19,I CHECK-TOO BIG? ADB MIN1 CMB,INB ADB EQT20,I EQ19+WC>EQ20? SZB,RSS CHECK FOR ZERO JMP P.03 YES, OK GO ON SSB,RSS JMP P.03 NO, GO ON LDA EQT5,I YES, SET DORE BIT IOR DORE STA EQT5,I LDA EQT19,I COMPUTE NEW WC CMA,INA ADA EQT20,I INA WC=EQ20-EQ19+1 STA EQT18,I P.03 JMP GTDMA GO AFTER DMA * * LQMMK OCT 100077 ADBMK OCT 1777 DM17 DEC -17 * * REQUE POLLS HERE * P.05 LDA EQT5,I ACTIVE? SSA,RSS EQ5-B15=1-->ACTIVE JMP NEXTX NO, GO TO NEXT EQT LDB PLNRS SETUP FOR PRE-LINE STATE LDA EQT16,I LINE EQT? SSA,RSS EQ16-B15=1-->LINE EQT LDB D1 NO, SET PRE POLL STATE CCE JSB STE17 JMP NEXT GO TO NEXT EQT * * * EOT PROC * * P.06 LDA EQT5,I SET EOT STATUS IOR EOTF STA EQT5,I CLB SET WC TO 0 STB EQT18,I JMP UL.02 COMP. RTN. * * CHECK FOR A LINE EQT IF SO ERROR 05 AND 06 ARE OK. * DO A COMP. RET. WITH XLOG=0. * P.07 ELA,CLE,ERA CLEAR SIGN BIT LDB EQT16,I LINE EQT ? SSB,RSS EQ16-B15=1-->LINE EQT JMP P.08 NO, GO CHECK ERROR CLB SET XLOG TO ZERO CPA D5 ERROR=NO CARRIER DET.? JMP RTNC0 YES...OK ON A "WHO ARE YOU" CPA D6 ERROR=NO RESP.? JMP RTNC0 YES...OK ON A "WHO ARE YOU" JMP RTNCX NO...GO REPORT ERROR * * ON A NORMAL POLL IF ERROR CODE IS 05 OR 06 REQUE THE POLL. * P.08 CPA D5 ERROR =5 ? JMP P.05 YES, REQUE CPA D6 ERROR =6 ? JMP P.05 YES, REQUE CPA D7 ERROR =7s ? JMP P.05 YES, REQUE JMP RTNCX NONE OF THE ABOVE, REPORT IT. * * SCHDX JSB SCHED GO DO SCHEDUAL JMP NEXTX GO TO NEXT EQT SKP * * * DONE UNLOADING--ARE WE DONE WITH RQ? * * UNLOD LDA EQT5,I SETUP TO TEST FOR DORE AND DORE STA B PUT DORE FLAG IN B LDA EQT17,I SETUP TO TEST FOR (B/X) AND RETBF SZB,RSS DORE? (DATA OVERRUN) SZA,RSS B/X=0-->ETX (FULL MES) JMP UL.01 YES TO DORE OR ETX ISZ EQT19,I BUMP FWAM JSB RLDMA RELEASE DMA CHAN JMP P.05 GO TO NEXT EQT UL.01 LDB EQT7,I COMPUTE XLOG CMB,INB ADB EQT19,I XLOG=EQT19-EQT7+1 INB LDA EQT8,I WORDS OR CH. SSA,RSS JMP UL.02 WORDS GO ON RBL CH. B<--B*2 LDA EQT5,I CHECK FOR ODD BYTE AND OBF SZA ADB MIN1 SUB 1 UL.02 JSB EQ17C AND B4.0K "AUTO-ACK"? SZA JMP UL.04 YES, GO DO IT UL.03 JMP RTNC0+1 RETURN COMP. REL. DMA * * DO AN AUTO-ACK IF REQUIRED. * UL.04 LDA EQT16,I LINE CONT. EQT? SSA JMP RTNC0+1 YES, DO NOT DO AUTO ACK AND RBYTE MAKE SURE NOT GROUP POLL ID CPA QM EQ16-B0-7=42B-->GROUP POLL ID JMP RTNC0+1 YES, DO NOT DO AUTO ACK STB BSV SAVE "B" REG. LDA LOADC SEND LOAD COMND. JSB OUTAF JSB WATE WAIT FOR FLAG LDA BELL LOAD CARD WITH "BELL" CH. JSB OUTA JSB WATE WAIT FOR FLAG LDA SAXMC SEND SELECT AUTO-XMIT COMND. JSB OUTAF JSB WATE WAIT FOR FLAG LDA EQT16,I SEND ID IOR LC FORCE SELECT JSB OUTA JMP RTC0X DO SP. RTN. SKP * * * HANDEL SELECT RESP. HERE * * )SELCT LDB LOADS SET LOAD STATE CCE JSB STE17 JSB GETA GET RESP. SSA JMP SE6 A<0--> ERROR CPA DLE0 A=DLE0 --> POS RES EVEN BLK JMP SE1 YES, OK GO ON JMP SE4 DO IT AGAIN LATER. SE1 LDA EQT8,I ZERO LENGTH REC.? SZA,RSS JMP SE5 YES, DO IT LDB MAXWC CALCULATE MAX WD CNT LDA EQT18,I ANY EDIT FLAGS? SZA,RSS JMP SE1A NO SKIP NEXT CODE SSA "HOME" FLAG SET? ADB MIN1 SUBTRACT 1 FOR MAX RAL BUMP TO "CLEAR" SSA "CLEAR" FLAG SET? ADB MIN1 SUBTRACT 1 FROM MAX SE1A STB TEMP PUT MAX IN TEMP LDA EQT19,I ACK, COMPUTE WC CMA,INA ADA EQT20,I WC=EQT20-EQT19+1 INA STA B SAVE WC IN B CMA,INA WC>MAXWC TOO BIG? ADA TEMP CLE SSA,RSS JMP SE2 NO, GO ON CCE YES, SET "E" LDB TEMP TOO BIG SET WC TO TEMP SE2 STB EQT18,I PUT WC INTO EQT18 SEZ,RSS CHECK ETB-ETX? JMP SE3 ETX, GO ON LDB TETBF ETB,SET BIT IN EQT17 CLE JSB STE17 SE3 JMP GTDMA GO GET DMA * * REQUE A SELECT HERE * SE4 LDB D2 SET STATE TO PRE SELECT CCE JSB STE17 JMP NEXT * * ON A ZERO LENGTH WRITE FORCE THE BOARD TO RESET IT'S POINTERS * BY SENDINF IT A LOAD COMMAND. THEN TELL IT TO XMIT. * SE5 LDA LOADC SEND LOAD COMMAND JSB OUTAF JMP LOAD+3 THEN TO XMIT SE6 ELA,CLE,ERA CLEAR SIGN BIT CPA D5 ERROR = 5? JMP SE4 YES, REQUE JMP RTNCX NO, REPORT ERROR SKP * * * RETURN HERE AFTER GETING DMA AND LOADING THE IFC BUF * * LOAD JSB GETA CHECK FOR AN ERROR DURING LOAD SSA JMP RTNCX ERROR LDB RESPS SET STATE TO RESP. CCE JSB STE17 STA B AND TETBF "ETB" FLAG SET? SZA,RSS JMP LO.01 NO, GO ON LDA TETB YES, SETUP TO XMIT ETB JMP LO.02 LO.01 SWP AND OBWF ODD BYTE FLAG SET? SZA LDA TOB SET TO XMIT ODD BYTE LO.02 IOR XMIT SEND XMIT COMND TO IFC JSB OUTAF JSB RLDMA RELEASE DMA JMP RTNCT RETURN CNT SKP * * * RETURN HERE AFTER XMITING * * RESP JSB GETA GET XMIT RESP SSA JMP RTNCX A<0--> ERROR CPA WACK A=WACK? JMP RE.02 YES, ERROR CPA DLE0 A=DLE0 -->OK? JMP RE.02 YES, OK GO ON CPA DLE1 A=DLE1 -->OK? JMP RE.02 YES, OK GO ON CPA RVI A=RVI -->BREAK JMP RE.04 YES, GO DO IT LDB TIOOF SET FOR POS. TERMINAL OVERFLOW ERROR CPA DLEET TERM. OVERFLOW? JMP RTNCX+2 YES REPORT IT LDA URRER UNREC. RESP. ERROR JMP RTNCX REPORT IT. RE.02 LDB EQT8,I RQ COMPLETE SZB,RSS BUF LTH=0? JMP RTNC0 YES, COMP LDB EQT19,I NO, EQ19=EQ20? CPB EQT20,I CLE,RSS CLEAR "E" JMP RE.03 NO, GO TO NEXT RE02A LDB EQT7,I YES, COMPUTE XLOG CMB,INB ADB EQT19,I XLOG=EQT19-EQT7+1 INB LDA EQT8,I WORDS OR CH.? SSA RBL CH. B<-- B*2 LDA EQT17,I ODD BYTE? AND OBWF SZA ADB MIN1 YES, SUB 1 JMP RTNC0 RETURN COMP RE.03 LDA EQT16,I MAKE SURE THIS IS NOT A LINE EQT SSA EQ16-B16=1-->LINE JMP RE02A YES DO COMP. LDA EQT17,I CLEAR ALL BUT LN AND OBF AND B1A7.4 STA EQT17,I ISZ EQT19,I BUMP FWAM JMP SE4 GO ON RE.04 LDA EQT5,I SET BREAK FLAG IN EQT5 IOR BRKFL STA EQT5,I LDA EQT12,I CHECK FOR RVI SCHEDUAL AND B400 SZA JSB SCHED YES, DO A SCHEDUAL JMP RE.02 CONTINUE * * BRKFL OCT 20 SKP * * SCHED NOP LDA EQT17,I GET LN AND B3.4K EQT17 B8-10 ALF,ALF ADA LTP GET LINE TAB ENT LDA A,I ADA D12 GET LINE EQT EXT PNT LDA A,I LDA A,I GET EQ16 OF LINE CNT EQ AND SSGNB MASK OFF ID SEG AD B0-14 SZA,RSS =0? JMP SCHED,I YES, GIVER UP STA SCH PUT ID SEG ADD IN LIST CALL LDA EQT4 PUT EQT4 ADD. IN $LIST CALL STA $L4 JSB $LIST CALL $LIST OCT 601 SCH NOP $L4 NOP JMP SCHED,I * * D12 DEC 12 * * CLEAR--IS WHERE THE CLEAR FUNCTION IS DONE. F=0 * CLEAR JSB EQ17C CLEAR STATE AND FLAGS CLB LDA EQT5,I CLEAR ERROR CODE IF ANY AND LBYTE STA EQT5,I STB EQT18,I CLEAR WC STB EQT19,I CLEAR MAP STB EQT20,I CLEAR LWAM JMP RTNI4 SKP * * THIS IS WHERE ALL LINE READ/WRITE GET STARTED. * LNRQ LDA EQT9,I GET OPT PERAM CLB CLEAR "B" IN CASE OF ERROR AND LBYTE GET LEFT BYTE STA ID STORE IN ID LDA EQT6,I CHECK RQ TYPE AND B77 EQT6 B0-5 CPA D1 RC=1-->READ-->WHO ARE YOU JMP PWAY YES, GO DO IT BDC LDA ID BUILD ID SZA,RSS ID=0? LDA BDCLC YES, FORCE LINE BDC IOR BDCC FORCE MINIMUM GROUP SELECT JMP BDCS GO TO SELECT PWAY LDA ID BUILD ID SZA,RSS ID=0? LDA ATSIG FORCE TO FIRST GROUP u? IOR WAY FORCE WHO ARE YOU JMP PWAYP GO TO POLL SKP * * ALL CONTROL OPERATIONS THAT ARE DONE IN THE C.07 START HERE * CNTX LDA EQSV COMP. IN PROC.? SZA JMP NEXT YES, DO NOT START CNT. NOW LDA EQT6,I GET FUNCTION CODE CLB CLEAR "B" IN CASE OF ERROR AND B3.7K CPA FDINT F=DINIT? JMP CX.01 YES, GO DO IT CPA FSNWK F=SET NAK & WACK? JMP CX.02 YES, GO DO IT CPA FMDCT F=MODEM CONT.? JMP CX.06 YES, GO DO IT JMP RTNC1 NO, ERROR RTN * * * REMOVE A TERMINAL FROM THE LINE * * CX.01 JSB INTEN FIND INT TAB ENT LDA EQT11,I POINT ENT ENT TO NEXT EQT STA B,I STA TEMP3 CLB STB EQT11,I CLEAR STB EQT16,I STB EQT17,I STB EQT18,I STB EQT19,I STB EQT20,I CX01A ADA D10 SCAN THE LINKED LIST FOR LDB A,I THE EQT LINK POINTING TO ME. CPB EQT1 MY EQT1? JMP CX01B YES, GO PATCH THE LINK. LDA B NO, MOVE TO THE NEXT LINK. JMP CX01A CX01B LDB TEMP3 PATCH THE LINK WORD STB A,I LDA TORQC SEND TIMEOUT JSB OUTAF JMP RTCTO RETURN-TIMEOUT RUNNING SKP * * * DO NAK WACK OVERRIDES * * CX.02 LDA RPSBC SET UP TO READ PROT ST BYTES JSB OUTAF LDB BUFP SETUP BUUUFER POINTER LDA DM8 SET COUNTER FOR EIGHT WORDS STA CNT JMP CX03A SKIP THE "STC" CX.03 JSB DIDL "STC" CX03A JSB WATE WAIT FOR FLAG JSB GETA GET TWO BYTES STA B,I STORE BY POINTER INB BUMP TH POINTER ISZ CNT DONE EIGHT? JMP CX.03 NO, GO AGAIN LDA EQT7,I YES, START BUILDING WORDS AND B360 MASK OFF REC. NAVK COUNT ALF MOVE TO LEFT BYTE STA B SAVE IT LDA EQT7,I AND B17 MASK OFF XMIT. NAK COUNT IOR B MERG RECV. NAK CNT STA BUFF+3 PUT IT IN BUFFER LDA EQT7,I LETS DO WACK NOW AND B17.4 STA BUFF+4 PUT IT IN BUFFER LDA EQT7,I CHECK FOR BLOCK SIZE CHANGE AND B160K BIT 13-15 SZA,RSS SKIP IF ZERO JMP CX.04 ZERO, GO ON RAR,ALF MOVE TO LOW NIBB. CLB MPY D250 A*250 STA BUFF+2 PUT IN BUFFER CPA D1000 = 1000? ARS YES, DEV. BY 2 CMA,INA MAKE NEG. ADA D1025 STA BUFF+1 PUT IN BUFFER CX.04 LDA SPSBC SETUP TO RESTORE PROT. ST. BYTES. JSB OUTAF LDB BUFP SETUP POINTER LDA DM8 SETUP COUNTER STA CNT CX.05 JSB WATE WAIT FOR FLAG LDA B,I GET WORD JSB OUTA OUTPUT IT INB BUMP POINTER ISZ CNT DONE EIGHT? JMP CX.05 NO, GO AGAIN CLB SET XLOG = ZERO JMP RTNC0 YES, RETURN * * D1000 DEC 1000 D1025 DEC 1025 D250 DEC 250 DM8 DEC -8 SKP * * * DO MODEM CONTOL * * CX.06 LDA GSMC SEND MODEM CONT COMND JSB OUTAF JSB WATE WAIT FOR FLAG JSB GETA GET MODEM STATUS LDB EQT7,I GET OPT. PERAM. SZB,RSS NON ZERO? JMP CX.07 NO, SKIP NEXT CODE ERB TEST RATE SEL. BIT CONT. SEZ ASSERT RATE SELECT? "E"=1 AND CLBT0 YES, CLEAR BIT 0--ASERT RATE SEL. SLB DEASSERT RATE SEL.? "LSB"=1 IOR D1 YES, SET BIT 0--DEASSERT RATE SEL. RAR MOVE TO "DATA TER. READY" BIT. ERB,ERB MOVE TO NEXT BNLHYTE PARE. SEZ ASSERT "DTR"? "E"=1 AND CLBT0 YES, CLEAR BIT 0--ASERT "DTR" SLB DEASSERT "DTR" "LSB"=1 IOR D1 YES, SET BIT 0 "DTR" RAL RETURN BITS TO PROPER POS. JSB OUTA SEND TO CARD CX.07 STA B SETUP TO RETURN STATUS AND B360 MASK OUT RATE BITS SWP SWAP CMA COMPLEMENT STATUS BITS AND CLRTB CLEAR RATE BITS IOR B RESTORE RATE BITS STA B PUT STATUS IN "B" REG. JSB WATE WAIT FOR FLAG JMP RTNC0 RETURN COMP * * CLRTB OCT 177417 CLBT0 OCT 177776 B360 OCT 360 SKP * * * NEXTX JSB EQ17C CLEAR STATE AND FLAGS JMP NEXT GO TO NEXT EQT * * NORMAL RETURNS START HERE. WE TRY TO GET ANOTHER POLL OR SELECT * STARTED IF WE CAN, BEFOR WE GO BACK TO THE SYSTEM. * RTNC0 JSB EQ17C CLEAR STATE AND ALL FLAGS BUT "AA" LDA EQT1 SAVE A PNT TO EQ1 FOR THE COMPLTED STA EQSV REQUEST STB BSV SAVE XLOG IN B k]N LDA EQT5,I CHECK FOR "BREAK" AND BRKFL SZA,RSS EQ5-B4=1-->BREAK JMP NEXT NO, GO GET SOMETHING NEW STARTED LDA EQT12,I YES, CHECK FOR A "SCHEDUAL" AND B400 SZA,RSS EQ12-B8=1-->"BREAK-SCHEDUAL" JMP NEXT NO, GO GET SOMETHING NEW STARTED LDA BKTDC YES, SEND A 100 MS TIME OUT JSB OUTAF JMP RTC0X DO A COMPLETION RETURN RTC0C JSB SETEQ RESET EQT RTC0X CLA STA EQSV CLEAR PNT LDB BSV RESTORE B REG XLOG STA BSV CLEAR BSV RTCTO LDA SIGNB JMP C.07,I * * ERROR RETURNS ARE DONE HERE. * RTNCX AND B17 MASK LOW 4 BITS FOR ERROR CODE STA B IN "B" JSB EQ17C CLEAR STATE RTNC1 LDA EQT5,I EQT ACTIVE? SSA,RSS EQ5-B15=1? JMP NEXTX NO, FORGET IT AND ECM MASK OUT ERROR CODE IOR B SET NEW CODE STA EQT5,I LDA TORQC YES, SEND TIME OUT TO IFC JSB OUTAF CLA,INA IOR SIGNB CLB JMP C.07,I * * * BKTDC OCT 51776 100 MS TIME OUT SKP * * * STEV--STATE EV. RETURN TO CALLER IF STATE EQ.0 * OR GO TO STATE CNT CODE. * * STEV NOP LDA EQT2,I TEST FOR A REQUE RUNNING SSA EQ2-B15=1-->REQUE RUNNING JMP RQON YES, GO TAKE CARE OF IT. LDA EQT17,I GET STATE SSA DMA FLAG SET? JMP STDMA YES, GO DO IT AND RBYTE EQT17 B0-7 ADA STTBP ADD STATE NUMBER TO STATE TABLE PNT LDA A,I GET POINTER JMP A,I GO WHERE POINTED STTBP DEF *+1 POINTER TO STATE TABLE ZE DEF STEV,I STATE .EQ. 0 RETURN TO CALLER PP DEF PSPOL STATE=1 PRE POLL (READ) PS DEF SELCC STATE=2 PRE SELECT (WRITE) PC DEF CNTX A STATE=3 PRE CONT. (CONTROL) PO DEF POLL SE DEF SELCT UN DEF UNLOD LO DEF LOAD RE DEF RESP PL DEF LNRQ LINE REQUEST * * * REQUE FIXUP ROUTINE * * RQON JSB EQ17C CLEAR ANY POS STATE. LDA MIN1 SET SYSTEM TIMER FOR STA EQT15,I ONE TICK ON THIS EQT. JMP IDLE DO A IFC. TIME OUT. * * SYSTEM TIMEOUTS ARE DONE HERE. * TIMER LDA EQT4,I CLEAR BIT 11 OF EQT4 XOR B4.0K STA EQT4,I JSB EQ17C CLEAR STATE AND FLAGS JSB INTEN GET INT TABEL ENT CPA EQT1 INT=EQT1 JMP T0 JMP T1 NO SKIP SENDING TO RQ T0 LDA TORQC SEND TIME OUT RQ JSB OUTAF T1 LDA D4 CLB JMP C.07,I RETURN SKP * * CONTINUATION RETURNES ARE DONE HERE. * RTNCT LDA EQSV CHECK FOR COMPL. QUED UP SZA JMP RTC0C YES GO DO IT ISZ C.07 JMP C.07,I SKP * * ROUTINE TO OUTPUT THE A REG. TO THE CARD. * OUTA NOP IO.00 OTA 10B,C IO.01 STC 10B JMP OUTA,I * * ROUTINE TO OUTPUT COMMANDS TO THE CARD FROM THE A REG.. * OUTAF NOP IO.02 OTA 10B,C IO.03 STF 10B IO.04 STC 10B JMP OUTAF,I * * ROUTINE TO GET THE OUTPUT REG. OF THE CARD INTO THE A REG.. * GETA NOP IO.05 LIA 10B,C JMP GETA,I * * ROUTINE TO WATE FOR FLAGS FROM THE CARD. (MAX 100 US) * WATE NOP LDA WATET WATE FOR 100 US. IO.06 SFC 10B JMP WATE,I INA,SZA JMP IO.06 JMP TIMER+3 * * ROUTINE TO DO A "STC" ON THE CARD. * DIDL NOP IO.07 STC 10B,C JMP DIDL,I * * WATET DEC -50 SKP * * * SETEQ ROUTINE--IF "A"#0 SET FULL EQT * =0 SET EQT EXT ONLY * SETEQ NOP SZA,RSS FULL EQT? JMP SETEX NO, GO SET EXT CPA EQT1 ALREADY SET? JMP SETEQ,I YES, EXIT ST XA EQT1 YES, SET EQT1 INA BUMP STA EQT2 INA STA EQT3 INA STA EQT4 INA STA EQT5 INA STA EQT6 INA STA EQT7 INA STA EQT8 INA STA EQT9 INA STA EQT10 INA STA EQT11 INA STA EQT12 INA STA EQT13 INA STA EQT14 INA STA EQT15 SETEX LDA EQT13,I STA EQT16 SET EXT INA STA EQT17 INA STA EQT18 INA STA EQT19 INA STA EQT20 JMP SETEQ,I RETURN EQT16 NOP [L][ID .OR.ID.SEG.] EQT17 NOP [D][B][S][O][A][LN][STATE] EQT18 NOP DMA WORD COUNT EQT19 NOP MEM ADD PNT EQT20 NOP LAST WD AVE MEM USER BUFF SKP * * * SETIO--SETUP IFC IO INST. * (IF NEEDED) * * SETIO NOP STA B SAVE SC IN B REG CMA,INA A<--(-A) ADA SC COMPUTE DIF FROM CURRENT SC SZA,RSS DIF=0? JMP SETIO,I YES, RETURN STB SC NO, SAVE NEW SC CMA,INA NEAGATE STA FIX SAVE DIFF LDB IOTBL SETUP TO MOD. INST. LDA NUMIO GET NUMBER OF INST TO MOD STA FIXC COUNT IN FIXC JSB SETI GO TO SET RTN JMP SETIO,I RETURN IOTBL DEF *+1,I DEF IO.00 DEF IO.01 DEF IO.02 DEF IO.03 DEF IO.04 DEF IO.05 DEF IO.06 DEF IO.07 DEF STD.0 NUMIO ABS IOTBL-*+1 * * * STDIO--DMA IO SETUP RTN * * STDIO NOP CHAN IN BP HAS NEW CHAN LDA CHAN GET NEW CHAN STA B CMA,INA A<--(-A) ADA CHANS COMPUTE DIFF FROM CURR CHAN SZA,RSS DIFF=0? JMP STDIO,I YES, RETURN STB CHANS NO-7, SAVE NEW CHAN CMA,INA NEAGATE STA FIX SAVE DIFF LDB DIOTB SET UP TO MOD LDA NMDIO GET NUMBER INTS TO MOD STA FIXC COUNT IN FIXC JSB SETI GO TO SET RTN JMP STDIO,I RETURN CHAN EQU 1673B DIOTB DEF *+1,I DEF ID.00 DEF ID.01 DEF ID.02 DEF ID.03 DEF ID.04 DEF ID.05 DEF ID.06 NMDIO ABS DIOTB-*+1 * * INST. MODE SUBROUTINE * SETI NOP SETL LDA B,I GET INTS. ADA FIX ADD DIFF STA B,I PUT IT BACK INB BUMP POINTER ISZ FIXC DONE? JMP SETL NO, GO AGAIN JMP SETI,I YES, RETURN FIX NOP FIXC NOP * * * STITE-- CHANGE INT TAB ENT * * STITE NOP JSB INTEN COMPUTE ENT LDA EQT1 STA B,I EQT1-->PNT(B) JMP STITE,I RETURN INTBA EQU 1654B * * INTEN NOP GET INT ENT. LDB SC ADB BM6 ADB INTBA SC-6+INTBA LDA B,I GET ENT. JMP INTEN,I RET. * * BM6 OCT -6 SKP * * * RLDMA--RELEASE DMA * * RLDMA NOP LDA INTBA GET PNT TWO DMA INT STA TEMP DLD INTBA,I GET BOTH ENTS CPA EQT1 CH. B POINT TO ME? JMP RL1 YES, GO FIX IT ISZ TEMP BUMP PNT. CPB EQT1 CH. A POINT TO ME? JMP RL1 JMP RLDMA,I NONE, RETURN RL1 CLA STA TEMP,I CLEAR CH. A JMP RLDMA,I RETURN * * * STE17--SET STAT AND OR FLAG IN EQT17 * "E=1"-->CLEAR STATE FIRST * * STE17 NOP LDA EQT17,I GET EQT17 SEZ CLEAR STATE? AND LBYTE YES IOR B STA EQT17,I RESTORE JMP STE17,I RETURN * * * * EQ17C--CLEAR ALL BUT LN AND "AA" OF EQT17 * * EQ17C NOP O LDA EQT17,I GET EQT17 AND B7.4K SAVE LN STA EQT17,I JMP EQ17C,I RETURN SKP * * * A EQU 0 B EQU 1 LTP DEF *+1 REP 8 NOP LTE DEF *-1 SC OCT 10 EQSV NOP BSV NOP CHANS OCT 6 SIGNB OCT 100000 LC OCT 20000 MIN1 DEC -1 MAXWC DEC 500 OBF OCT 100 DORE OCT 200 EOTF OCT 40 OBWF OCT 10000 TETBF OCT 40000 TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP LN EQU TEMP1 ID EQU TEMP4 RETBF EQU TETBF CNT EQU TEMP SKP * * STATE * POLLS DEF PO-ZE SELCS DEF SE-ZE UNLOS DEF UN-ZE LOADS DEF LO-ZE RESPS DEF RE-ZE PLNRS DEF PL-ZE * * COMND * TORQC OCT 5776 PSCMD OCT 2000 UNL OCT 2002 LOADC OCT 2004 XMIT OCT 2006 RPSBC OCT 102002 SPSBC OCT 102004 SAXMC OCT 26000 TOB OCT 40000 TETB OCT 20000 STTOV OCT 1772 GSMC OCT 1774 * * * SP. CH. * * ZEOT OCT 4 ETXET OCT 1404 ETBET OCT 13404 CNYET OCT 14404 BDCC OCT 20176 BDCLC OCT 77000 WAY OCT 175 DLEET OCT 10004 DLE0 OCT 10060 DLE1 OCT 10061 WACK OCT 10073 BELL OCT 3407 RVI OCT 10074 QM OCT 42 ATSIG EQU TETBF URRER OCT 15 TIOOF OCT 16 * * D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D5 DEC 5 D6 DEC 6 D7 DEC 7 B10K OCT 10000 B160K OCT 160000 B17 OCT 17 B17.4 OCT 17400 LBYTE OCT 177400 ECM OCT 177760 B3.4K OCT 3400 B3.7K OCT 3700 RBYTE OCT 377 B400 OCT 400 B4.0K OCT 4000 B7.0K OCT 7000 B70K OCT 70000 B7.4K OCT 7400 B77 OCT 77 SSGNB OCT 77777 * * EQT1 EQU 1660B EQT2 EQU EQT1+1 EQT3 EQU EQT1+2 EQT4 EQU EQT1+3 EQT5 EQU EQT1+4 EQT6 EQU EQT1+5 EQT7 EQU EQT1+6 EQT8 EQU EQT1+7 EQT9 EQU EQT1+8 EQT10 EQU EQT1+9 EQT11 EQU EQT1+10 EQT12 EQU 1771B EQT13 EQU EQT12+1 EQT14 EQU EQT12+2 EQT15 EQU EQT12+3 * * BUFP DEF *+1 BUFF BSS 8 LENTH EQU * SKP END $"$ 1&X 91730-18002 1805 S C0122 EXMP MULTIPOINT EXERSISER             H0101 HFTN4,L C NAME : EXMP--MULTIPOINT EXERSISER PROGRAM C SOURCE: 91730-18002 1805 C RELOC: 91730-16002 1805 C PROGMR: G.W.J. C C **************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * C * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * C * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C **************************************************************** C C PROGRAM EXMP(,),91730-16002 REV 1805 780117 DIMENSION IB(800),IBX(40),IIB(800),IHMXM(2) DATA IHMXM/15510B,15544B/ 1 CALL RMPAR(IB) C DETERMINE LIST LOGICAL UNIT NUMBER. IF ZERO SET TO LU 1. IWLU=IB(1) IF(IWLU.EQ.0)IWLU=1 ILU=IB(2) C DETERMINE LU TO BE TESTED. IF ZERO STOP. IF(ILU.EQ.0)STOP 0 C DETERMINE THE MAXIMUM NUMBER OF ERRORS TO BE REPORTED. NN=IB(3) C DETERMINE THE TEST BUFFER SIZE. IF ZERO SET TO 20 LINES. INL=IB(4) IF(INL.LE.0.OR.INL.GT.20)INL=20 IRP=IB(5) ICRLF=6412B CALL CODE C BUILD TEST LINE BUFFER OF 76 ALPHA NUMERIC CHARACTORS C TERMINATED WITH A CR/LF. TOTAL OF 78 CH. IN TEST LINE. WRITE(IBX,101)ICRLF 2 II=1 C BUILD TEST BUFFER BY WRITEING THE LINE NUMBER FOLLOWED BY THE C TEST LINE FOR A TOTAL OF UP TO 20 LINES. C 01,---TEST CH.---CR/LF02---TEST CH.---CR/LF03......... DO 1000 J=1,INL CALL CODE WRITE(IBZ,100)J IB(II)=IBZ 100 FORMAT(I2) II=II+1 101 FORMAT("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" 1"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCD",A2) DO 500 I=1,39 IB(II)=IBX(I) II=II+1 500 CONTINUE 1000 CONTINUE C CALCULATE THE SIZE OF THE TRANSFER. ICNT=INL*80/2 C CLEAR ERROR DETECTED SW. 1500 IS=0 C TURN OFF ROUTINE POLLING AND SET TO STRIP "GS". T  CALL EXEC(3,ILU+2300B,140000B) C FORCE THE TERMINAL TO BLOCK MODE. WRITE(ILU,200) 200 FORMAT("&s1D") C TRANSMIT THE TEST BUFFER. CALL EXEC(2,ILU+3000B,IB,ICNT) C SEND A "HOME-UP" AND SYMULATED ENTER TO THE TERMINAL. CALL EXEC(2,ILU,IHMXM,2) C RECEVE THE TEXT FROM THE TERMINAL CALL EXEC(1,ILU,IIB,800) C COMPARE TEXT TRANSMITED WITH TEXT RECEVED A WORD AT A TIME. DO 5000 I=1,ICNT IF(IB(I).EQ.IIB(I))GO TO 5000 C IF A WORD DOES NOT COMPARE REPORT UP TO NN ERRORS ANS SET "IS". IS=IS+1 IF(NN.EQ.0)GO TO 5000 WRITE(IWLU,102)I,IB(I),IB(I),IIB(I),IIB(I) 102 FORMAT(1X,"WORD ",I3," SHOULD BE ",A2,1H[,@6,1H]," AND IS ",A2 1,1H[,@6,1H]) NN=NN-1 5000 CONTINUE C CLEAR EDIT MODE SWITCH AND REENABLE ROUTINE POLLING. 6000 CALL EXEC(3,ILU+2300B,0) C IN CASE "NN" WAS ZERO REPORT "NO ERRORS" IF "IS"=0 OR "ERRORS" IF C "IS"#0. C DONE IF(IS.NE.0)GO TO 90 WRITE(IWLU,103) 103 FORMAT(2X,"NO ERRORS") GO TO 98 90 WRITE(IWLU,104)IS 104 FORMAT(1X,I3,1X,"ERRORS") 98 CONTINUE IF(IRP.EQ.0)GO TO 99 CALL EXEC(12,0,2,0,-IRP) GO TO 1500 99 CONTINUE END END$ F  29 91730-18003 1805 S C0122 DSPMP MULTIPOINT DISPLAY PROGRAM            H0101 vFTN4,L C NAME : DSPMP--MULTIPOINT SYSTEM STATUS DISPLAY PROGRAM C SOURCE: 91730-18003 1805 C RELOC: 91730-16003 1805 C PROGMR: G.W.J. C C **************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * C * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * C * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C **************************************************************** C C PROGRAM DSPMP(,),91730-16003 REV 1805 780117 DIMENSION ILP(8) C C C DSPMP SCANS THE EQT'S TO FIND THE LINE CONTROL EQT FOR EACH LINE. C A MAXIMUM OF EIGHT LINES CAN BE REPORTED ON. AFTER LOCATING THE C LINE CONTROL EQT'S A REPORT IS MADE FOR THE LINE CONTROL EQT AND C THAN A REPORT IS MADE FOR EACH TERMINAL EQT ON THAT LINE. THE C LINKED LIST IS FOLLOWED TO LOCATE EACH OF THE TERMINAL EQT'S. C C GET THE LU ON TO WHICH THE REPORT IS TO BE MADE. CALL RMPAR(ILP) ILU=ILP(1) C IF NO LU WAS SUPPLIED USE LU 1. IF(ILU.EQ.0)ILU=1 C SETUP POINTERS TO THE EQT IFEQ=IGETX(1650B) INEQ=IGETX(1651B) C SETUP AN INDEX INTO A TABLE WHICH WILL HOLD THE EQT ADDRESS OF C EACH LINE CONTROL EQT. 1 I=1 IEQP=IFEQ C START SCANING THE EQT. DO 5 J=1,INEQ C CHECK FOR DRIVER TYPE 07. IP=IEQP+4 IV=IGETX(IP) IV=IAND(IV,37400B)/256 IF(IV.NE.07B)GO TO 5 C IF TYPE 07 THAN CHECK EQT11 TO SEE IF THIS EQT IS IN A LINKED LIST. IP=IP+6 IV=IGETX(IP) IF(IV.EQ.0)GO TO 5 C IF LINED THAN CHECK FOR BIT 15=1 IN EQT16. (LINE EQT?) IP=IP+2 IP=IGETX(IP) IV=IGETX(IP) IF(IV.GE.0)GO TO 5 C IF LINE EQT THAN MAKE AN ENTERY IN LINE TABLE. ILP(I)=IEQP C BUMP TABLE INDEX I=I+1 C BUMP TO THE NEXT EQT 5 IEQP=IEQP+15 C C C IF I=1 WE DID NOT FIND ANY LINES--STOP IF(I.EQ.1)GO TO 90 C PUT OUT A HEADING ON THE LIST DEVICE. WRITE(ILU,100) 100 FORMAT(1X,"LU EQ A DO OR ET BR EC ICW--- L ID PROG.",/ 1,1X,"EDIT MODE FL. WC- G DF BX SK OB AA RP STATE",/) C MAKE REPORTS ON EACH LINE FOUND DO 1000 II=1,I-1 ILEQ=ILP(II) IF(ILEQ.EQ.0)GO TO 1000 C MAKE A REPORT ON THE LINE CONTROL EQT CALL REPT(ILEQ,IFEQ,ILU) C GET THE LINKED LIST POINTER IP=ILEQ+10 10 IP=IGETX(IP) C IF WE ARE BACK TO THE LINE THAN TERMINATE REPORTING THIS LINE IF(IP.EQ.ILEQ)GO TO 1000 IF(IP.EQ.0)GO TO 1000 C MAKE A REPORT ON EACH TERMINAL EQT. CALL REPT(IP,IFEQ,ILU) IP=IP+10 GO TO 10 C GO TO THE NEXT LINE. 1000 CONTINUE GO TO 99 90 WRITE(ILU,101) 101 FORMAT(1X,"MULTIPOINT SYSTEM INACTIVE") 99 CONTINUE END SUBROUTINE REPT(IPP,IFEQ,ILU) DIMENSION IBF(40),INM(3),ISTB(4),ITB1(3),ITB2(3),ITB3(3) DATA ITB1/2HBU,2HFR,2HD / DATA ITB2/2HSY,2HST,2HM / DATA ITB3/2HCL,2HSI,2HO / C CALCULATE EQT NUMBER 1 IEQN=((IPP-IFEQ)/15)+1 C GET EQT5 IXX=IPP+4 IXX=IGETX(IXX) C DETERMINE AVAILABILITY STATUS IAV=0 IF(IAND(IXX,40000B).NE.0)IAV=IAV+1 IF(IAND(IXX,100000B).NE.0)IAV=IAV+2 C IF AV. ST.=0 SET PROGRAM NAME TO "-----". IF#0 GO CHECK "T" FIELD. IF(IAV.NE.0)GO TO 1000 400 DO 500 N=1,3 500 INM(N)=2H-- GO TO 4000 C GET EQT6 AND MASK OUT "T" FIELD. 1000 IXX=IPP+5 IXX=IGETX(IXX) IXX=IAND(IXX,140000B) C IF "T"=0 GO GET PROGRAM NAME AND MOVE IT TO NAME BUFFER. C IF "T"#0 GO CHECK "T" FIELD TYPE. (BUFFERD-CLASS IO-SYSTEM) IF(IXX.NE.0)GO TO 2000 C GET EQT1 IP=IGETX(IPP) C MASK OF BIT 15 IP=IAND(IP,77777B) C IF EQT1 B0-14=0 SET PGOGRAM NAME TO "-----" IF(IP.EQ.0)GO TO 400 C ADJUST TO NAME PORTION OF ID SEG. IPy =IP+12 C MOVE THE NAME. DO 1500 N=1,3 INM(N)=IGETX(IP) 1500 IP=IP+1 GO TO 4000 C DETERMINE "T" FIELD TYPE. 2000 ITF=0 IF(IAND(IXX,40000B).NE.0)ITF=ITF+1 IF(IAND(IXX,100000B).NE.0)ITF=ITF+2 C MOVE "T" FIELD TYPE NAME TO PROG. BUFFER GO TO (2100,2200,2300)ITF 2100 DO 2150 N=1,3 2150 INM(N)=ITB1(N) GO TO 4000 2200 DO 2250 N=1,3 2250 INM(N)=ITB2(N) GOTO 4000 2300 DO 2350 N=1,3 2350 INM(N)=ITB3(N) 4000 CONTINUE C GET EQT4 IP=IPP+3 IXX=IGETX(IP) C GET SELECT CODE (CH) AND UNIT NUMBER FROM EQ4 ICH=IAND(IXX,77B) IUN=IAND(IXX,3700B)/64 IP=IP+1 C SCAN LU TABLE FOR THIS EQT NUMBER AND UNIT NUMBER. JJ=IGETX(1652B) JM=IGETX(1653B) DO 5 J=1,JM JX=IGETX(JJ) JEQ=IAND(JX,77B) C EQT NUMBER = THIS EQT? IF(JEQ.NE.IEQN)GO TO 4 C IF = AND THIS EQT IS ACTIVE CHECK THE UNIT NUMBER FOR A MATCH. IF(IAV.EQ.0)GO TO 10 JUN=IAND(JX,77000B)/4096 IF(IAND(JX,100000B).NE.0)JUN=JUN+8 IF(JUN.EQ.IUN)GO TO 10 4 JJ=JJ+1 5 CONTINUE C IF NO LU FOUND SET LU TO 0 ILUN=0 GO TO 15 C IF INACTIVE SET LU TO THE FIRST LU FOUND POINTING TO THIS EQT 10 ILUN=J 15 CONTINUE C GET EQ5 IXX=IGETX(IP) C BUILD STATUS FROM EQ5 IST=IAND(IXX,377B) C PRESET SATATUS FLAGS TO "--" DO 16 I=1,4 16 ISTB(I)=2H-- C CHECK FOUR FLAGS AND SET APROP. IF(IAND(IST,200B).NE.0)ISTB(1)=2HDO IF(IAND(IST,100B).NE.0)ISTB(2)=2HOB IF(IAND(IST,40B).NE.0)ISTB(3)=2HET IF(IAND(IST,20B).NE.0)ISTB(4)=2HBR C SET ERROR CODE IN LOW 4 BITS/ IST=IAND(IST,17B) C GET EQ6 (REQUEST CONTROL WORD) IP=IP+1 ICW=IGETX(IP) C GET EQ9 (IPRAM1) IP=IP+3 IP1=IGETX(IP) C IF EQ9=0 SET TO "--" IF(IP1.EQ.0)IP1=2H-- C PRESET "RP" FLAG TO "RP" IRP=2HRP C GET EQ12 IP=IP+3 @ IXX=IGETX(IP) C IF EQ12 BIT 15=1 SET "RP" FLAG TO "--" IF(IXX.LT.0)IRP=2H-- C PRESET SEVEN EDIT MODE FLAGS TO "--" IGF=2H-- ILF=2H-- ICF=2H-- IHF=2H-- IXF=2H-- INF=2H-- ISF=2H-- C CHECK EACH FLAG AND SET APROP. IF(IAND(IXX,40000B).NE.0)IGF=2HR- IF(IAND(IXX,20000B).NE.0)ILF=2HL- IF(IAND(IXX,10000B).NE.0)ICF=2HC- IF(IAND(IXX,4000B).NE.0)IHF=2HH- IF(IAND(IXX,2000B).NE.0)IXF=2HX- IF(IAND(IXX,1000B).NE.0)INF=2HN- IF(IAND(IXX,400B).NE.0)ISF=2HS- C GET EQ16 (ID OR ID SEG.) IP=IP+1 IP=IGETX(IP) C SET ID = TO EQ16 ID=IGETX(IP) C IF ID<0-->LINE EQ. SET ID= TO SELECT CODE CONV. TO ASCII. C IF ID = ID FORCE IP1 TO "--" IF(ID.GT.0)IP1=2H-- IF(ID.LT.0)CALL CNVSC(ICH,ID) C GET EQ17 IP=IP+1 IXX=IGETX(IP) C PRESET DMA FLAG TO "--" IDMA=2H-- C IF DMA FLAG SET SET TO "DF" IF(IXX.LT.0)IDMA=2HDF C PRESET "BX" FLAG TO "EX"--ETX IBX=2HEX C IF "BX" FLAG SET SET TO "EB"--ETB IF((IAND(IXX,40000B)).NE.0)IBX=2HEB C PRESET "SK" FLAG TO "--" ISK=2H-- C IF "SK" FLAG SET SET TO "SK" IF((IAND(IXX,20000B)).NE.0)ISK=2HSK C PRESET "OB" FLAG TO "--" IOB=2H-- C IF FLAG SET SET TO "OB" IF((IAND(IXX,10000B)).NE.0)IOB=2HOB C PRESET "AA" FLAG TO "--" IAA=2H-- C IF FLAG SET SET TO "AA" IF((IAND(IXX,4000B)).NE.0)IAA=2HAA C GET LINE NUMBER ILN=IAND(IXX,3400B)/256 C GET STATE ISTE=IAND(IXX,377B) C GET EQ18 (DMA WORD COUNT) IP=IP+1 C MASK OFF HIGH BITS IWC=IAND((IGETX(IP)),7777B) C CHECK INTERRUPT TABLE TO SEE IS IT IS POINTING TO THIS EQT. IP=ICH-6+IGETX(1654B) IP=IGETX(IP) C IF NOT POINTING HERE SET POINTER TO " " IAP=2H C IF POINTING HERE SET POINTER TO "< " IF(IP.EQ.IPP)IAP=2H< C WRITE THE REPORT ON THE LIST DEVICKE. WRITE(ILU,100)ILUN,IEQN,IAV,ISTB(1),ISTB(2),ISTB(3),ISTB(4),IST 1,ICW,ILN,ID,INM(1),INM(2),INM(3),IAP WRITE(ILU,101)IGF,ILF,ICF,IHF,IXF,INF,ISF,IWC,IP1,IDMA,IBX,ISK 1,IOB,IAA,IRP,ISTE 100 FORMAT(1X,I2,1X,I2,1X,I1,1X,A2,1X,A2,1X,A2,1X,A2,1X,@2,1X 1,@6,1X,I1,1X,1A2,1X,2A2,1A1,1X,A1) 101 FORMAT(1X,6A2,1A1,1X,I3,1X,A1,1X,A2,1X,A2,1X,A2,1X,A2,1X 1,A2,1X,A2,1X,@3,/) RETURN END END$ % 3 = 91730-18004 1805 S C0122 CNVSC SUBROUTINE CALLED BY DSPMP            H0101 uASMB,L * NAME : CNVSC-- SUBROUTINE CALLED BY DSPMP * SOURCE: 91730-18004 1805 * RELOC: 91730-16004 1805 * PROGMR: G.W.J. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * NAM CNVSC,7 91730-16004 REV 1805 771219 ENT CNVSC,IGETX EXT $OPSY EXT .ENTR A EQU 0 B EQU 1 SC NOP ID NOP * * CNVSC NOP JSB .ENTR DEF SC LDA SC,I CLB DIV D8 ADB B60 STB SC CLB SZA DIV D8 ADB B60 BLF,BLF ADB SC STB ID,I JMP CNVSC,I * * * IGETX--SPECIAL IGET ROUTINE FOR BOTH RTE-II/III AND IV. * * IGETX NOP DLD IGETX,I SWP LDA A,I STB IGETX LDB $OPSY CPB DM9 JMP RTE4 LDA A,I JMP IGETX,I RTE4 XLA A,I JMP IGETX,I D8 DEC 8 B60 OCT 60 DM9 DEC -9 END h 4: 91730-18005 1840 S C0122 &XLIB - DEVICE CONT. SUBRT.             H0101 ڿASMB,L,C * NAME : XLIB --MULTIPOINT PERIPHERAL SUBROUTINES * SOURCE: 91730-18005 1840 * RELOC: 91730-16005 1840 * PROGMR: G.W.J. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * NAM XLIB,7 91730-16005 REV 1840 780801 ENT XREAD,XWRIT,XCONT EXT .ENTR,EXEC * A EQU 0 B EQU 1 ILU NOP UN NOP IBF NOP IBL NOP ICN EQU IBF IRP EQU IBL * EXITP NOP PERAMATER MOVER AND EXIT MOVE JSB .ENTR MOVE THEM DEF ILU JMP START CONTINUE * XREAD NOP LDA XREAD MOVE EXIT POINTER STA EXITP LDB =B1 SET REQUEST TYPE STB RQ JMP MOVE START SETUP * XWRIT NOP LDA XWRIT MOVE EXIT POINTER STA EXITP LDB =B2 SET REQUEST TYPE STB RQ JMP MOVE START SETUP * XCONT NOP LDA XCONT MOVE EXIT POINTER STA EXITP LDB =B3 SET REQUEST TYPE STB RQ JMP MOVE START SETUP SKP * * R=XREAD(ILU,IUN,IBF,IBL) * WHERE: ILU=THE LOGICAL UNIT NUMBER OF THE TERMINAL * IUN=THE UNIT NUMBER OF THE PERIPHERAL ON THE 2645 * IBF=THE ADDRESS OF THE BUFFER * IBL=THE LENGTH OF IBF(MAX OF -256 CH. OR 128 WD.) * ON RETURN: * "A"=0...REQUEST COMPLETE * "A" NOT 0...ERROR STATUS * "B"=TRANSMITTION LOG OR ZERO IF ERROR * * NOTE: IF IBF IS NEGATIVE STATUS ONLY WILL BE TAKEN AND RETURNED * IN THE "A" REG.. * * STATUS: CTU PRINTER * * BIT 15...REQUEST ERROR REQUEST ERROR *  14...MP ERROR MP ERROR * 13...BUF. LTH.>128 OR 256 BUF. LTH.>128 OR 256 * 12...BUFF LENGTH = 0 BUFF LENGTH = 0 * 11...END OF FILE UNASSIGNED * 10...LOAD POINT UNASSIGNED * 9...END OF TAPE (EOT) PAPER OUT * 8...WRITE ERROR PRINT ERROR * 7...COMMAND PERFORMED COMMAND PERFORMED * 6...WRITE PROTECTED UNASSIGNED * 5...READ ERROR UNASSIGNED * 4...TAPE BUSY PRINTER BUSY * 3...SOFT ERROR * 2...HARD ERROR BITS 1-3= PRINTER BAUD RATE * 1...END OF VALID DATA * 0...TAPE INSERTED PRINTER CONNECTED * * SKP * * R=XWRIT(ILU,IUN,IBF,IBL) * WHERE: ILU=THE LOGICAL UNIT NUMBER OF THE TERMINAL * IUN=THE UNIT NUMBER OF THE PERIPHERAL ON THE 2645 * IBF=THE ADDRESS OF THE BUFFER * IBL=THE LENGTH OF IBF(MAX OF -256 CH. OR 128 WD.) * ON RETURN: * "A"=0...REQUEST COMPLETE * "A" NOT 0...ERROR STATUS * "B"=TRANSMITTION LOG OR ZERO IF ERROR * * NOTE: IF IBF IS NEGATIVE STATUS ONLY WILL BE TAKEN AND RETURNED * IN THE "A" REG.. * * STATUS: CTU PRINTER * * BIT 15...REQUEST ERROR REQUEST ERROR * 14...MP ERROR MP ERROR * 13...BUF. LTH.>128 OR 256 BUF. LTH.>128 OR 256 * 12...BUFF LTNGTH = 0 BUFF LENGTH = 0 * 11...END OF FILE UNASSIGNED * 10...LOAD POINT UNASSIGNED * 9...END OF TAPE (EOT) PAPER OUT * 8...WRITE ERROR PRINT ERROR * 7...COMMAND PERFORMED COMMAND PERFORMED * 6...WRITE PROTECTED UNASSIGNED * 5...READ ERROR UNASSIGNED * 4...TAPE BUSY PRINTER BUSY * 3...SOFT ERROR * 2...HARD ERROR BITS 1-3 = PRINTER BAUD RATE * 1...END OF VALID DATA * 0...TAPE INSERTED PRINTER CONNECTED SKP * * R=XCONT(ILU,IUN,ICN,IRP) * WHERE: ILU=THE LOGICAL UNIT NUMBER OF THE TERMINAL * IUN=THE UNIT NUMBER OF THE PERIPHERAL ON THE 2645 * ICN=THE CONTROL CODE TO BE EXECUTED * IRP=THE NUMBER OF TIMES THE REQUEST IS TO BE REPETED * ON RETURN: * "A"=0...REQUEST COMPLETE * "A" NOT 0...ERROR STATUS * "B"=TRANSMITTION LOG OR ZERO IF ERROR * * NOTE: IF ICN IS NEGATIVE STATUS ONLY WILL BE TAKEN AND RETURNED * IN THE "A" REG.. * * STATUS: CTU PRINTER * * BIT 15...REQUEST ERROR REQUEST ERROR * 14...MP ERROR MP ERROR * 13...REP. CNT.>999OO LARGE A REP. CNT.>999 * 12...FUNCTION CODE TOO BIG. FUNCTION CODE TOO BIG * 11...END OF FILE UNASSIGNED * 10...LOAD POINT UNASSIGNED * 9...END OF TAPE (EOT) PAPER OUT * 8...WRITE ERROR PRINT ERROR * 7...COMMAND PERFORMED COMMAND PERFORMED * 6...WRITE PROTECTED UNASSIGNED * 5...READ ERROR UNASSIGNED * 4...TAPE BUSY PRINTER BUSY * 3...SOFT ERROR * 2...HARD ERROR BITS 1-3 = PRINTER BAUD RATE * 1...END OF VALID DATA * 0...TAPE INSERTED PRINTER CONNECTED SKP START LDA ILU,I SETUP READ LU LDB RQ AND =B77 IOR =B400 FORCE "CR-LF-RS" STRIP STA RLU AND =B77 SETUP WRITE LU IOR =B100 STA WLU LDA PUN SETUP UNIT NUMBER IOR UN,I STA SWTCH+1 * * * LDA ICN,I GET FUNCTION CODE SSA STATUS ONLY? JMP STAT YES, GO DO IT CPB =B3 DOING A CONT. RQ? JMP XC.00 YES, GO ON JMP CKBFS NO, GO CHECK BUFF DIM SKP * XC.00 LDA IRP,I REP. CNT.? SZA,RSS JMP XC.03 NO, GO ON LDB UPmOS DEF. TO POSITIVE SSA,RSS NEG. REP. CNT.? JMP XC.01 NO, GO ON CMA,INA MAKE POS. LDB UNEG GET NEG. SIGN XC.01 STB SWTCH+2 PUT "U"-SIGN IN SWITCH BUF STA B LEAGLE REP. COUNT CMB,INB ADB MXCC SSB,RSS TOO BIG JMP XC01A NO, GO ON JMP ER2 YES, ERROR XC01A LDB ZZ PRESET SWTCH STB SWTCH+3 CLB CLEAR "B" FOR DIV DIV D10 DEVIDE A BY 10 BLF,BLF MOVE TO LEFT BYTE ADB ZP ADD RES. IN "B"TO "60"-"P" STB SWTCH+4 SZA,RSS "A"=0? JMP XC.02 YES, DONE CLB NO, CLEAR "B" FOR NEXT CONV DIV D10 ADB SWTCH+3 ADD RES. STB SWTCH+3 SZA,RSS "A"=0? JMP XC.02 YES, DONE ALF,ALF ADA SWTCH+3 NO, ADD RES. IN "A"TO SWTCH+3 STA SWTCH+3 XC.02 LDA ICN,I SET UP CONT. FUNCTION ALF,ALF IOR SIXC STA SWTCH+5 LDA DM12 SET CH. CNT. STA CNT JMP SEND GO ON * * XC.03 LDA DM7 SET CH. CNT. STA CNT LDA ICN,I SET UP CONT. FUNCTION IOR U60 STA SWTCH+2 LDA CAPC PUT CAP. "C" IN SWTCH STA SWTCH+3 JMP SEND SKP * * CKBFS LDA IBL,I CHECK FOA BUFF. LTH. OF 0 SZA,RSS JMP ER1 YES, ERROR SSA WORDS OR CH. JMP CC CH. GO TO CH. CHECK CMA,INA CHECK TOO BIG ADA MXW SSA,RSS JMP XR.01 OK, GO ON JMP ER2 TOO BIG ERROR CC ADA MXC CHECK TOO BIG SSA,RSS JMP XR.01 OK, GO ON JMP ER2 TOO BIG ERROR * * XR.01 CPB =B2 DOING A WRITE? JMP XW.01 YES, GO TO WRITE SETUP LDA ILU,I MUST BE DOING A READ AND =B100 SETUP READ CODE IN SWTCH ESTA B LDA S60 "S"-"0" SZB IF "M"BIT SET IN CALL IOR =B2 FOCE TO A "2" STA SWTCH+2 LDA R SET "R" IN SWTCH STA SWTCH+3 LDA DM7 SET FOR A COUNT OF 7 STA CNT JMP SEND GO SEND SWTCH SKP * * XW.01 LDB UN,I PUT UNIT NUMBER IN B LDA IBL,I SET UP TO CONV TO ASCII SSA,RSS CH.? RAL NO, A<--A*2 SSA CH.? CMA,INA MAKE POS. STA CCNT SAVE POS CH. CNT. CPB D4 UNIT=4? (PRINTER) ADA =D2 YES, ADD TWO FOR CR/LF LDB DC0 PRESET SWTCH STB SWTCH+2 LDB ZZ STB SWTCH+3 CLB CLEAR "B" FOR DIV DIV D10 DEVIDE A BY 10 ADB SWTCH+3 ADD RES. IN "B"TO SWTCH+3 STB SWTCH+3 SZA,RSS "A"=0? JMP XW.02 YES, DONE CLB NO, CLEAR "B" FOR NEXT CONV DIV D10 BLF,BLF MOVE TO LEFT BYTE ADB SWTCH+3 ADD RES. STB SWTCH+3 SZA,RSS "A"=0? JMP XW.02 YES, DONE ADA SWTCH+2 NO, ADD RES. IN "A"TO SWTCH+2 STA SWTCH+2 XW.02 LDB UN,I CHECK FOR PRINTER LDA CCNT ADA D9 ADD 9 TO COUNT FOR SWITCH CPB D4 UNIT= PRINTER? ADA =D2 YES, ADD 2 FOR CR/LF CMA,INA NEG. STA CNT LDA W SET A "W" IN SWTCH STA SWTCH+4 LDA IBF SET UP FOR BYTE MOVE RAL CH. ADD LDB SWP CCE SET "E" FORCE RIGHT BYTE ELB CH. ADD START IN RIGHT BYTE MBT CCNT MOVE BYTES LDA UN,I SETUP WLU CPA D4 UNIT .EQ. LINE PRINTER JMP XW.03 YES, GO ADD CRLF JMP SEND NO GO SEND IT XW.03 LDA LFCR MOVE CRLF INTO BUFF SBT ALF,ALF SBT SKP * * SEND JSB EXECj SEND SWTCH DEF *+4+1 DEF D2 DEF WLU DEF SWTCH DEF CNT JMP MPER MP ERROR SZB,RSS XLOG=0? JMP STAT YES, GO PULL STATUS LDA RQ DOING A READ? CPA =B1 YES, GO GET DATA JMP XR.02 JSB EXEC GET WRITE RESP. CH. DEF *+4+1 DEF D1 READ DEF RLU DEF XSTBF DEF DM1 1 CH. JMP MPER MP ERROR SZB,RSS GET A CH.? JMP STAT NO GO GET STATUS LDA XSTBF CHECK CH. AND =B177400 CPA ASCS =S JMP XW02A YES, DO COMPLETION JMP STAT NO, GET STATUS XW02A CLB LDA RQ DOING A CONT. CPA =B3 JMP CL.01 YES, RETURN XLOG=0 LDA IBL,I LDB CC SSA JMP CL.01 SLB INB RBR CL.01 CLA NO,CLEAR STAT IN "A" JMP EXITP,I RETURN SKP * * XR.02 LDA ILU,I BINARY READ? AND =B100 SZA JMP XR.03 YES, GO DO IT JSB EXEC NO, DO READ INTO USER BUF DEF *+4+1 DEF D1 DEF RLU DEF IBF,I DEF IBL,I JMP MPER SZB,RSS XLOG=0? JMP STAT YES, PULL STATUS CLA NO, RETURN JMP EXITP,I * * XR.03 JSB EXEC READ INTO TEMP BUF DEF *+4+1 DEF D1 DEF RLU DEF RBUF DEF MXW JMP MPER SZB,RSS XLOG=0? JMP STAT YES, PULL STATUS ADB DM2 SUB. 2 FOR BC ON REC. STB BSV LDA RBUFP SETUP TO MOVE LDB IBF MVW BSV NOP LDB BSV CLA JMP EXITP,I RETURN SKP * * STAT LDA STATC SETUP SWTCH STA SWTCH+2 JSB EXEC SEND STAT RQ. DEF *+4+1 DEF D2 DEF WLU DEF SWTCH DEF DM5 JMP MPER MP ERROR JSB EXEC 0*($ GET STAT BYT DEF *+4+1 DEF D1 DEF RLU DEF XSTBF DEF DM7 JMP MPER MP ERROR LDA XSTBF+2 BUILD STATUS WORD AND =B17 ALF STA B LDA XSTBF+2 AND =B7400 IOR B STA B LDA XSTBF+3 AND =B7400 ALF,ALF IOR B CLB JMP EXITP,I SKP * * ER1 LDA ER1C SET STATUS TO ER1 CLB SET XLOG=0 JMP XWRIT,I RETURN ER2 LDA ER2C SET STATUS TO ER2 JMP ER1+1 CONT. MPER LDA MPEC SET BIT 15,14 JMP ER1+1 RQ NOP ER1C OCT 110000 ER2C OCT 120000 MPEC OCT 140000 MXW DEC 128 MXC DEC 256 MXCC DEC 999 D1 OCT 100001 READ NO ABORT D2 OCT 100002 WRITE NO ABORT D4 DEC 4 RLU NOP WLU NOP D9 DEC 9 D10 DEC 10 CNT NOP CCNT NOP PUN OCT 70060 UPOS OCT 072453 UNEG OCT 072455 ZP OCT 030160 SIXC ASC 1,0C U60 OCT 072460 CAPC ASC 1,CC R ASC 1,RR W ASC 1,WW S60 OCT 071460 STATC OCT 057000 DM1 DEC -1 ASCS OCT 051400 DC0 OCT 062060 ZZ ASC 1,00 LFCR OCT 005015 SWP DEF SWTCH+4 DM2 DEC -2 DM5 DEC -5 DM7 DEC -7 DM12 DEC -12 BSV NOP RBUFP DEF RBUF+2 SWTCH OCT 15446 NOP NOP NOP OCT 053400 RBUF BSS 128 XSTBF BSS 4 END n* 5 A 91730-18008 1805 S C0122 FIXMP SUBROUTINE CALLED BY AUTO7            H0101 aASMB,L,C * NAME : FIXMP--MULTIPOINT POWER-FAIL FIXUP SUBROUTINE * SOURCE: 91730-18008 1805 * RELOC: 91730-16008 1805 * PROGMR: G.W.J. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * NAM FIXMP,7 91730-16008 REV 1805 771206 ENT FIXMP EXT $LIBR,$LIBX A EQU 0 B EQU 1 * * FIXMP NOP JSB $LIBR TURN OFF MEMORY PRT. NOP LDA 1651B GET THE NUMBER OF EQT'S CMA,INA MAKE NEG. STA CNT PUT IN COUNTER LDB 1650B GET POINTER TO EQT'S STB PNT PUT IN POINTER LP ADB =D3 GET EQ4 LDA B,I STA SC SAVE IT INB BUMP TO EQ5 LDA B,I GET EQ5 AND =B37400 MASK DRIVER TYPE CPA =B3400 COMP. DV TYPE 7 RSS YES, GO ON JMP NEXT NO, GO TO NEXT EQT ADB =D6 BUMP TO EQ11 LDA B,I GET EQ11 SZA,RSS NON ZERO (ACTIVE)? JMP NEXT NO, GO TO NEXT EQT ADB =D2 BUMP TO EQ13 LDA B,I GET EQ13 LDA A,I GET FIRST WOR OF EXT SSA,RSS BIT 15 SET? LINE EQ? JMP NEXT NO, GO TO NEXT EQT LDA SC BUILD STC INST AND =B77 IOR STC MERG SC AND STC CMND. STA I.00 SET UP TO DO IT I.00 NOP --HERE IS WHERE WE DO IT NEXT ISZ CNT DONE ALL EQT'S? JMP NEX1 NO GO ON ISZ FIXMP BUMP RETURN POINT. JSB $LIBX YES, ON MEMORY PRT. DEF FIXMP AND RETURN NEX1 LDB PNT PUMP PNT TO NEXT EQ  T ADB =D15 STB PNT JMP LP DO IT ALL AGAIN * * CNT NOP PNT NOP SC NOP STC OCT 102700 END M  6= 91730-18009 1826 S C0122 AUTO7 SOURCE POWERFAIL FOR MULTIPOINT             H0101 ;ASMB,R,L,C * NAME : AUTO7 * SOURCE: 91730-18009 * RELOC: 91730-16009 * PROGMR: G.W.J. BASED ON RTEM E.J.W. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * NAM AUTOR,1,1 91730-16009 REV.1826 780713 EXT EXEC,FIXMP * A EQU 0 B EQU 1 * AUTOR NOP ENTRY/TEMPORARY STORAGE JSB FIXMP RESTART MP SYSTEM DEF *+1 * CLA,INA RESET LU# TO STA CNWD 1 FOR THIS ENTRY * SRCH JSB EXEC *SEARCH EQT FOR DVR43* DEF *+5 ERROR RETURN DEF ICODE REQUEST CODE DEF CNWD LU# FOR STATUS CALL DEF EQT5 BUF LOCATION DEF EQT4 BUF LOCATION JMP BDLU ERROR ROUTINE * LDA EQT5 AND EMASK MASK OUT STATUS AND AV. CPA .43 TEST FOR POWER FAIL DRIVER JMP BDLU1 FOUND DVR43-GO CHECK FOR SC=4 BDLU LDA CNWD NOT DVR43--GO TRY AGAIN CPA B77 TEST FOR END OF LU#S JMP NO.LU YES-POWER FAIL DRIVER NOT FOUND INA NO-CONTINUE SEARCH--BUMP LU STA CNWD SAVE LU# FOR EXEC CALL JMP SRCH * BDLU1 LDA EQT4 GET EQT4 AND B77 MASK TO GET SC CPA B4 SC=4-->POWER FAIL JMP GTIME FOUNF POWER FAIL LU GO GET TIME OF P/F JMP BDLU NO, GO SERCH SOME MORE. * * * * POWER FAIL DRIVER NOT FOUND * NO.LU JSB EXEC DEF *+5 DEF .2 DEF .1 DEF NOBUF DEF NBL CLA STA CNWD SET P/F LU. TO 0 FOR SECOND CALL JMP SCAN * * * POWER FAIL DRIVER FOUND *  REQUEST READ TO * OBTAIN TIME * GTIME JSB EXEC DEF GT2 RETURN DEF .1 READ DEF CNWD LU OF P/F DRIVER DEF TIME TIME BUFFER DEF .3 BUFFER LENGTH * * * GT2 LDA TIME *CONVERT TIME FOR PRINTING* LDB TIME+1 CLE CLEAR E FOR ADDITION ADA PRS1 ADD POSITIVE 24 HRS. SEZ TO GET A POSITIVE INB TIME ADB PRS2 DIV .6000 DIVIDE BY 6000 STA BUF1 TEMPORARY STORAGE FOR MIN/HRS ASR 16 POSITION B(SEC/10MS) FOR DIVIDE DIV .100 DIVIDE BY 100 TO GET SEC/10MS STB BUF4 SET 10MS VALUE STA BUF3 SET SECONDS VALUE CLB CLB FOR DIVIDE LDA BUF1 GET MIN/HRS DIV .60 SEPARATE STB BUF2 SET MIN LDB R.BUF SET BUFFER AREA POINTER STB TEMP1 FOR THIS CONVERSION LDB N4 SET CONVERSION COUNTER STB TEMP2 * * BACK JSB CNVRT GO CONVERT TO ASCII STA TEMP1,I SAVE IN OUTPUT BUFFER ISZ TEMP2 TEST FOR END OF CONVERSION RSS JMP DA.YR GO CONVERT DAY AND YEAR ISZ TEMP1 BUMP OUTPUT POINTER ISZ TEMP1 LDA TEMP1,I GET NEXT VALUE JMP BACK GO CONVERT NEXT VALUE * DA.YR LDA TIME+2 FETCH DAY AND YEAR CLB DIV D365 GET YEAR CCE,INB INCRE (B) FOR DAY 0 CORRECTION ADA YEAR1 SET YEAR INTO BUFFER STA YEAR SAVE FOR PRINTING ASR 16 PREPARE TO GET DAY DIV .100 GET HUNDREDS IOR BLK0 STA DAY SAVE IN PRINT BUFFER ASR 16 JSB CNVRT GO GET TENS AND ONES STA DAY+1 SAVE IN PRINT BUFFER LDA YEAR CONVERT YEAR TO ASCII JSB CNVRT STA YEAR * * * * SCAN EQT FOR ALL TTY DEVICES (DVR00) * AND ISSUE WRITE REQUEST (POWER FAIL * TIME MESSAGE ) TO <EACH * * * SCAN CLA,INA SET LU#. TO STA LU 1 FOR SEARCH OF EQT IOR B400 SET "K" BIT STA WLU SCAN2 JSB EXEC DEF *+6 ERROR RETURN POINT DEF ICODE REQUEST CODE DEF LU LU# FOR STATUS TEST DEF EQT5 BUF LOCATION DEF TIME DUMMY LOCATION FOR EQT4 DEF SUBCH SUBCHANNEL INFO RETURNED HERE JMP BAD LU NOT ASSIGNED-GO TEST NEXT LU * LDA EQT5 FETCH EQT5 AND EMASK GET RID OF STATUS AND AV. SZA,RSS TEST FOR DVR00 JMP PRINT FOUND DVR00 GO PRINT P/F MESSAGE CPA DVR05 IS IT DVR05? JMP SBCHK CHECK SUBCHANNEL TO BE SURE IT IS CRT CPA DVR07 CHECK FOR DRIVER TYPE 07 JMP LINCK CHECK FOR LINE EQT BAD LDA LU NOT DVR00-CONTINUE CPA B77 TEST FOR END OF SCAN JMP DONE YES-GO RESET POINTERS AND CONSTANTS-EXIT INA NO-BUMP LU# STA LU SET LU# FOR NEXT TEST ISZ WLU BUMP WRITE LU JMP SCAN2 GO TEST NEXT LU * SBCHK LDA SUBCH IT'S DVR05, IS IT CRT? AND B37 SZA JMP BAD NO JMP PRINT YES, PRINT THE MESS. * * ROUTINE TO LOCATE MULTIPOINT LINE LU'S. * LINCK LDA LU GET EQT NUMBER FROM DRT ADA DM1 ADA 1652B LDA A,I AND B77 MASK LOW SIX BITS ADA DM1 CALC. EQT ADD. MPY .15 ADA 1650B STA B SAVE EQT ADD IN "B" ADA .10 GET EQT11 LDA A,I SZA,RSS ACTIVE EQT (EQ11#0)? JMP BAD NO, QUIT LDA B YES, GET EQT ADD BACK ADA .12 GET EQT EXT ADD LDA A,I LDA A,I GET THE CONT. SSA,RSS LINE EQT?(EQT16-B15=1-->LINE) JMP BAD NO,QUIT JMP PRINT YES, PRINT MESS. * * * * * PRINT POWER FAIL MESSAGE * ON CONSOLE DEVICE FOUND IN SCAN ROUTINDE * * * * * PRINT JSB EXEC DEF *+5 RETURN DEF .2 WRITE COMMAND DEF WLU LU# OF DEVICE DEF MESS P/F MESSAGE DEF MESL. MESSAGE LENGTH JMP BAD GO TEST FOR END OF SEARCH-CONTINUE SPC 5 * * * * CONVERT A TWO DIGIT BINARY NUMBER INTO ASCII * * * * CNVRT NOP CLB DIV .10 GET TENS AND ONES ALF,ALF SHIFT TENS DIGIT INTO UPPER CHAR POSITION IOR ASCII CREATE AN ASCII FIELD IOR B 'OR' IN ONES DIGIT JMP CNVRT,I * * * * SECOND CALL ON P.FAIL ROUTINE RESETS * TO SAVE TIME ON NEXT FAILURE. * * DONE JSB EXEC DEF *+5 DEF N1 SECOND READ REQUEST DEF CNWD LU OF P/F DRIVER. DEF TIME TIME BUFFER DEF .3 BUFFER LEGNTH NOP POINT OF RETURN IF P/F LU. UNKNOWN SPC 5 * * * * * * * * *************EXIT TO SYSTEM************* JSB EXEC DEF *+2 DEF IC2 * * * * * CONSTANT AND STORAGE AREAS * * ICODE OCT 100015 YEAR1 DEC 70 BLK0 OCT 020060 ASCII OCT 030060 EMASK OCT 37400 DVR05 OCT 02400 DVR07 OCT 03400 SUBCH NOP B37 OCT 37 .43 OCT 21400 B4 OCT 4 D365 DEC 365 B77 OCT 77 B400 OCT 400 .2 DEC 2 .3 DEC 3 .1 DEC 1 N1 OCT 100001 PRS1 OCT 153000 PRS2 OCT 203 CNWD OCT 1 EQT5 BSS 1 EQT4 BSS 1 TEMP2 EQU EQT5 TEMPORARY STORAGE NOBUF OCT 6412 CR/LF ASC 12, NO POWER FAIL LU FOUND. NBL DEC 13 TIME BSS 3 .6000 DEC 6000 .100 DEC 100 .60 DEC 60 .10 DEC 10 .12 DEC 12 .15 DEC 15 DM1 DEC -1 MESS OCT 6412 ASC 9, POWER FAILED AT BUF1 NOP ASC 1,: BUF2 NOP ASC 1,: BUF3 NOP ASC 1,. BUF4 NOP ASC 4,0 ON DAY DAY BSS 2 ASC 2, OF ASC 1,19 YEAR BSS 1 MESL. DEC 27 TEMP1 BSS 1 TEMPORARY STORAGE LU EQU TEMP1 TEMPROARY STORAGE WLU NOP R.BUF DEF BUF1 IC2 DEC 6 N4 OCT -4 END AUTOR  7 A 91740-18001 1805 S C0422 DS/1000 MODULE: LSTEN              H0104 AASMB,R,L,C HED DS/1000 INITIALIZATION * (C) HEWLETT-PACKARD CO. 1977 * NAM LSTEN,19,25 91740-16001 REV 1805 771208 SPC 1 ENT LSTEN SPC 1 EXT READF,CLOSE,OPEN,RNRQ,PRTN,REIO,PGMAD,CNUMD EXT EXEC,MESSS,$LIBR,$LIBX,$OPSY,RMPAR,PARSE,#RSAX EXT #FWAM,#TBRN,#MSTO,#NULL,#QRN,#LDEF EXT #BREJ,#SVTO,#WAIT,#SWRD,#NODE,#NRV,#NCNT EXT #GRPM,#QCLM,#NCLR,#SCLR,#RFSZ,#RTRY EXT #CNOD,#LNOD EXT #LU3K,#QZRN,#RQCV,#RPCV,#QXCL EXT D$EQT,D$XS5,D$LID,D$RID,#SAVM EXT DRTEQ SUP * * NAME: LSTEN * SOURCE: 91740-18001 * RELOC.: 91740-16001 * PGMR: C. HAMILTON [ 02/12/77 ] * D. TRIBBY [ 03/17/77 ] DS/3000 CHANGES * ** MODIFIED TO HANDLE DVR07 [11/18/77] DMT * * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** SPC 5 * LSTEN SERVES A DUAL PURPOSE. IT IS USED, PRIMARILY, TO INITIALIZE * THE DISTRIBUTED SYSTEMS NETWORK THROUGH ESTABLISHMENT OF THE * REQUIRED RESOURCES (CLASS NUMBERS, RESOURCE NUMBERS, TRANSACTION * LISTS, POINTERS, TIMERS, AND CONSTANTS), THROUGH THE ACTIVATION * OF 'LISTEN' MODE FOR EACH SPECIFIED COMMUNICATION LINE INTERFACE, * AND BY SCHEDULING THOSE MONITOR-PROGRAMS WHICH SERVICE INCOMING * REQUESTS FROM REMOTE NETWORK NODES. SPC 3 * LSTEN'S SECONDARY PURPOSE IS TO ALLOW THE USER TO RE-ENABLE A * COMMUNICATION LINE INTERFACE, WHICH HAS BEEN INACTIVATED BY * UNFORESEEN MALFUNCTIONS. IT MAY ALSO BE USED TO BRING THE * NETWORK TO A QUIESCENT STATE, IN ORDER TO ADJUST SYSTEM TIMING, * OR FOR ANY OTHER PURPOSE WHICH REQUIRES SUSPENSION OF NETWORI K * OPERATIONS, AT THIS PARTICULAR NODE. * SKP * SCHEDULING FOR INITIALIZATION: * ----------------------------- * *ON,LSTEN,(INPUT LU),(ERROR LU) * * SCHEDULE TO ACCEPT RESPONSES FROM A PERIPHERAL DEVICE. * * NOTE: IF SCHEDULING PARAMETERS ARE NOT SUPPLIED, LU #1 IS THE DEFAULT. * IF THE (INPUT LU) IS LINKED TO AN INTERACTIVE DEVICE, * INTERROGATORY REMARKS WILL BE DISPLAYED ON THE DEVICE. * THE (ERROR LU), IF SPECIFIED, MUST BE LINKED TO AN * INTERACTIVE DEVICE. * * *ON,LSTEN,FI,LE,NM [,SECURITY CODE [,CARTRIDGE NUMBER] ] * * SCHEDULE TO ACCEPT RESPONSES FROM A FILE . * * NOTE: ANY ERRORS WILL BE REPORTED ON LU #1; WILL THEN ABORT. * * CALL EXEC(10,NAME,-1,ICLAS,IRELN) * * USE A START-UP PROGRAM TO SCHEDULE WITH RESPONSES PASSED * IN I/O CLASS AND LENGTH . (THIS MODE IS INDICATED * BY A NEGATIVE FIRST PARAMETER.) * * INITIALIZATION QUERIES AND VALID RESPONSES (IN NORMAL ORDER): * ------------------------------------------------------------ * NOTE: CONTROL FILE RESPONSES CONSIST OF ONE RECORD PER RESPONSE. * /A : ABORT IS A VALID RESPONSE TO ALL QUERIES. * * /LSTEN: SYSTEMS CONNECTED TO THIS NODE * /LSTEN: HP 1000? * /LSTEN: HP 3000? * * /LSTEN: NO OF ACTIVE TRANSACTIONS? <1-100 (/D =DEFAULT OF 20)> * NOTE: EACH TRANSACTION USES 5 WORDS OF SYSTEM-AVAILABLE-MEMORY. * * NOTE: FOLLOWING QUESTIONS ARE ASKED ONLY WHEN HP3000 IS CONNECTED * /LSTEN: MAX NO. OF CONCURRENT HP3000 USERS? <1-10 (/D=DEFAULT OF 4)> * NOTE: EACH CONCURRENT USER REQUIRES 14 WORDS OF SAM * * /LSTEN: LU OF HP3000? * * /LSTEN: ENTER 0 FOR HALF, 1 FOR FULL DUPLEX: * NOTE: ASKED ONLY FOR MODEM LINK. * * /LSTEN: LOCAL ID SEQUENCE? <15 CHAR MAX: /E IF NONE> * NOTE: ASKED ONLY FOR MODEM LINK. * * /LSTEN: REMOTE( ID SEQUENCE? <15 CHAR MAX: /E IF NONE> * NOTE: ASKED ONLY FOR MODEM LINK. * * END HP3000 OPTION. * * NOTE: FOLLOWING QUESTIONS ASKED ONLY WHEN HP1000'S ARE CONNECTED: * /LSTEN: ENABLE LU# ? * /LSTEN: ENABLE LU# ? * * /LSTEN: NDT FILE NAME [,SC[,CR]]? AAAAAA,NN,NN (FILE NAME) THIS FILE * DEFINES THE NETWORK DESCRIPTION TABLE & IS CREATED BY PROGRAM "NDTGN" * * /LSTEN: LOCAL CPU #? <1-32767 (DEFINES LOCAL NODE NUMBER) > * * NOTE: NDT TABLE MAY BE INTERACTIVELY CREATED, AS SHOWN BELOW: * * * /LSTEN: NDT FILE NAME [,SC[,CR]]? <0> (SPECIFY INTERACTIVE 'NDTGN') * * /LSTEN: LOCAL CPU #? <1-32767 (DEFINE LOCAL NODE NUMBER) > * * /LSTEN: NUMBER OF NODES? * * /LSTEN: CPU#,LU,TIMEOUT? * * (CPU# = 0 TO 32767 [NODAL ADDRESS]) * * (LU [DV-65]: 0=LOCAL NODE, 0 * /LSTEN: MONITOR NAME? * * /LSTEN: INPUT # OF FILES: <1 TO 255 (TOTAL FILES OPEN TO ALL NODES)> * NOTE: ASKED ONLY FOR /D OPTION, OR WHEN SPECIFIED. * * /LSTEN: SECURITY CODE? * * /LSTEN: OPERATION? < (SEE SECONDARY MODE FOR VALID RESPONSES) > * * ONCE THE SYSTEM HAS BEEEN INITIALIZED, SUBSEQUENT SCHEDULING OF * WILL CAUSE ENTRY INTO THE SECONDARY MODE OF OPERATION. * IN THIS MODE, THE USER MAY RE-ENABLE COMMUNICATION LINE INTERFACES, * SCHEDULE ADDITIONAL MONITORS, DISPLAY THE NODAL ROUTING VECTOR, * OR PLACE THE SYSTEM INTO QUIESCENT MODE. ONCE THE SYSTEM HAS BEEN * MADE QUIESCENT, THE USER MAY, ONLY, RESTART THE QUIESCENT SYSTEM. SKP * SCHEDULING FOR SECONDARY MODE OF OPERATION: * ------------------------------------------ * *ON,LSTEN,(LINE LU#),(ERROR LU#) * * THIS PROCEDURE IS USED TO RE-ENABLE THE LINE INTERFACE FOR A * SINGLE LOGICAL UNIT NUMBER. THERE IS NO INTERACTION WITH THE * USER, UNLESS AN ERROR IS DETECTED. IN THE EVENT OF ERROR * DETECTION, THE USER WILL BE QUERIED ON THE (ERROR LU#) DEVICE. * * (INPUT LU#),(ERROR LU#) < DEFAULT = LU#1 FOR BOTH > * / * *ON,LSTEN, : -1,CLASS #,RECORD LENGTH * FI,LE,NM [,SECURITY CODE [,CARTRIDGE NUMBER] ] * * IN SECONDARY MODE, SCHEDULING WITH AN INTERACTIVE TERMINAL * AS THE (INPUT LU#) DEVICE, OR UNDER THE CONTROL OF A COMMAND FILE, * WILL ALLOW THE USER TO SELECT SEVERAL POSSIBLE OPERATIONS. * * SECONDARY MODE QUERIES AND VALID RESPONSES: * ------------------------------------------ * NOTE: /A (ABORT ) IS A VALID RESPONSE TO ALL QUERIES. * * **** ACCEPTABLE RESPONSES--NON-QUIESCENT SYSTEM **** * * /LSTEN: OPERATION? * /LSTEN: ENABLE LU# ? < LU# (LINKED TO DVR65)> * /LSTEN: ENABLE LU# ? * * /LSTEN: OPERATION? * NRV SPECIFICATIONS: * LOCAL NODE#: NNNNN, NO. OF NODES= NNNNN * NNNNN: NODE= NNNNN, LU= NN, TO= NNN * LAST LOAD-NODE= NNNNN (OR "NONE") [DISPLAYED FOR RTE-M, ONLY] * * /LSTEN: OPERATION? * TIMING MODIFICATION--CURRENT VALUES: * * MASTER T/O = NNNNNN * SLAVE T/O = NNNNNN * REMOTE-BUSY = NNNNNN * REMOTE-QUIET = NNNNNN * * * /LSTEN: MASTER T/O [5 TO 1275 SECONDS] ? <5 TO 1275 (NUMERIC RESPONSE)> * [ RESOLUTION = 5 SECONDS ] (DEFAULT `VALUE = 45) * * /LSTEN: SLAVE T/O [5 TO 1275 SECONDS] ? <5 TO 1275 (NUMERIC RESPONSE)> * [ RESOLUTION = 5 SECONDS ] (DEFAULT VALUE = 30) * * /LSTEN: REMOTE-BUSY WAIT [1 TO 10 SEC.]? <1 TO 10(NUMERIC)> * (DEFAULT VALUE =3) * * /LSTEN: REMOTE-QUIET WAIT [0 TO 7200 SEC.]? <0 TO 7200 (NUMERIC)> * (DEFAULT VALUE =0) * * /LSTEN: OPERATION? * /LSTEN: SYSTEM QUIESCENCE * /LSTEN: SECURITY CODE? < AA (MUST MATCH ORIGINAL SECURITY CODE)> * END LSTEN (TERMINATION MESSAGE) * * NOTE: WHEN QUIESCENT, PRINTS "SYSTEM IS QUIESCENT" ON LU#1. * * /LSTEN: OPERATION? * /LSTEN: MONITOR NAME? * /LSTEN: MONITOR NAME? * /LSTEN: OPERATION? * END LSTEN (TERMINATION MESSAGE) * * /LSTEN: OPERATION? * * ??: LIST COMMANDS * /A: ABORT! * /E: TERMINATE * /L: RE-ENABLE LINE * /N: DISPLAY NRV * /Q: QUIESCE NODE * /S: SCHEDULE MONITOR(S) * /T: ADJUST TIMING * * QUIESCENT SYSTEM ONLY: * * /R: RE-START NODE * * **** ACCEPTABLE RESPONSES--QUIESCENT SYSTEM, ONLY **** * * * /LSTEN: OPERATION? * /LSTEN: QUIESCENT RE-START * /LSTEN: SECURITY CODE? < AA (MUST MATCH ORIGINAL SECURITY CODE)> SKP * * ERROR MESSAGES--INTERPRETATION AND APPROPRIATE ACTION: * ----------------------------------------------------- * * [ ALL MESSAGES ARE PRECEDED BY "/LSTEN:" ] SPC 1 * CLASS I/O ERROR - A REQUIRED CLASS NUMBER CANNOT BE ALLOCATED. * IS ABORTED. THIS ERROR MAY REQUIRE * RE-GENERATION WITH A LARGER ALLOTMENT OF CLASS NO'S. * * END LSTEN - NORMAL COMPLETION MESSAGE. THE TEN CHARACTERS COMPRISING * THE MESSqAGE ARE ALSO RETURNED IN THE 5-WORD TEMPORARY * STORAGE AREA OF A SCHEDULER'S I.D. SEGMENT. THEY MAY BE * RECOVERED THROUGH THE USE OF . * IF HAS BEEN ABORTED, THE FIVE WORDS OF RETURNED- * DATA CONSIST OF: 100000B,ER, L,ST,EN * * ERROR: MON?: AAAAA - THE SPECIFIED MONITOR IS NOT IN THE SYSTEM. * ABORT , USING /A COMMAND, AND THEN LOAD * THE MONITOR INTO THE SYSTEM. RE-START . * * ERROR: STAT: AAAAA - THE MONITOR'S STATUS IS NOT 'DORMANT', AND * THEREFORE IT CANNOT BE SCHEDULED. * ABORT , USING /A COMMAND, AND THEN USE * RTE OPERATOR COMMANDS TO CHANGE THE STATUS. * * FILE ERROR - IMPROPER RESPONSE TO "INPUT # OF FILES". RETRY. * * INVALID NAME! - MONITOR NAME IS NOT RECOGNIZED BY . RETRY. * * INVALID RESPONSE! - OPERATOR ENTRY ERROR. RETRY. * (NO RETRY ALLOWED FOR QUIESCENT OR RE-START MODE) * * LSTEN ABORTED - IF INITIALIZATION WAS IN PROGRESS, THEN ALL ALLOCATED * RESOURCES HAVE BEEN RETURNED TO RTE. * * LU ERROR - IMPROPER LU# SPECIFIED, OR LU# NOT LINKED TO DVR65. RETRY. * * NODE SPEC. ERROR - IMPROPER NODAL REFERENCE VALUE. ABORTED! * CORRECT INITIALIZATION ANSWERS AND RESTART . * * NO SYSTEM MEMORY! - INSUFFICIENT SYSTEM AVAILABLE MEMORY FOR USE BY * THE NETWORK. SYSTEM CANNOT BE INITIALIZED. * IS ABORTED. RE-GENERATION OF RTE MAY * BE REQUIRED. * * READ ERROR - END-OF-FILE OR FMGR ERROR HAS BEEN DETECTED ON THE * INPUT DEVICE/FILE. THE QUESTION IS REPEATED ON THE * (ERROR LU) DEVICE. THE USER MAY SUPPLY THE REQUIRED * RESPONSE FROM THIS DEVICE. * * RN ERROR - A REQUIRED RESOURCE NUMBER CANNOT BE ALLOCATErD; * IS ABORTED. RE-GENERATION, WITH A LARGER * ALLOTMENT OF RESOURCE NUMBERS, MAY BE REQUIRED. * SKP * TR FILE ERROR - THE FILE MANAGER CANNOT PROCESS THE FILE * WHICH WAS SPECIFIED IN THE SCHEDULING * PARAMETERS. CORRECT THE FILE PROBLEM, * AND RE-SCHEDULE . * * ** UPLIN NOT SCHEDULED - THE SYSTEM TRANSACTION-MONITOR AND CLEANUP * PROGRAM COULD NOT BE SCHEDULED. * IS ABORTED! DETERMINE NATURE OF * PROBLEM AND CORRECT. RE-SCHEDULE . * * ANSWER YES OR NO - THE QUESTION REQUIRES A "YES" OR "NO" ANSWER * SKP PRAM NOP INPUT LU OR FIRST 2 CHARS. OF FILE NAME. NOP ERROR LU OR SECOND 2 CHARS. OF FILE NAME. NOP THIRD TWO CHARS. OF FILE NAME. NOP FILE SECURITY CODE--OPTIONAL. NOP FILE CARTRIDGE NUMBER--OPTIONAL. * LSTEN JSB RMPAR GET THE DEF *+2 PARAMETERS DEF PRAM FOR LOCAL USE. * LDA $OPSY GET THE SYSTEM SPECIFICATIONS. RAR,RAR BIT#15: 1=DMS BIT#0: 1=RTE, 0=RTE-M. STA OPTYP SAVE THE USEFUL SYSTEM SPECIFICATIONS. SSA,RSS JMP NODMS THIS IS A NON-DMS SYSTEM * DLD XSBAI GET THE CROSS-STORE INSTRUCTION, DST STLNK AND CONFIGURE THE TWO NULL-LINK DST STERM INSTRUCTIONS FOR DMS OPERATION. DST LOOP3 DLD XCBAI DST NCHEK DLD XSANP DST STNOP DLD XLANP DST DSNR1 DST DSNR2 DST DSNR3 DLD MWII DST NRMOV * * PICK UP READ LU NODMS LDA PRAM GET THE INPUT LU--IF ANY. UNL IFZ LST EXT DBUG CPA M1 DO THEY WANT DEBUG? RSS YES JMP LSTN1 NO...LET HER RIP JSB DBUG INVOKE DEBUG DEF *+1 CLB,INB TERMINATE, JMP TERM4 AND SAVE RESOURCES. UNL XIF LST LSTN1 LDB #FWAM GET "ALREADY-INITIALIZED" INDICATOR. STB ONTWO SAVE IN OPTION 1/2 FLAG WORD CLB INITIALIZE EQUIPMENT TYPE CODE STB TYPEQ TO INDICATE AN INTERACTIVE DEVICE. STB CLFLG CLEAR CLASS I/O FLAG. * LDB B1 IF LU NOT SUPPLIED, DEFAULT TO LU 1 SZA SUPPLIED? LDB A YES AND BT137 LU OR FILE? SZA CLB FILE...CLEAR FILE FLAG STB RLU SAVE READ LU OR 0 (FILE). SZB,RSS LU OR FILE? JMP LSTN2 FILE * JSB TTY? CHECK DEF RLU READ LU. SZB,RSS TTY? IOR B400 YES...SET IN ECHO BIT STA RLU SAVE AS INPUT LU STB TYPEQ SAVE INPUT DEVICE EQUIPMENT CODE. * * PICK UP ERROR LU LDA PRAM+1 SZA IS ERROR LU SUPPLIED? JMP LSTN2+1 YES...SAVE IT. LDA RLU NO. GET THE INPUT LU. SZB IS INPUT LU INTERACTIVE? LSTN2 LDA B1 NO...DEFAULT TO SYSTEM CONSOLE. STA ERLU SAVE ERROR LU * JSB TTY? CHECK DEF ERLU ERROR LU. SZB TTY? LDA B1 NO...SET TO SYSTEM TTY IOR B400 STA ERLU * JSB CHCKN SEE IF FILE JMP LSTN3 NOT FILE * LDA PRAM WAS 1ST PARAMETER SSA NEGATIVE? JMP CLASS YES--DO CLASS READ. * JSB OPENX OPEN THE FILE JMP *+2 OPEN ERROR! JMP LSTN3 OPEN WAS SUCCESSFUL. * JSB SYSER SYSTEM ERROR DEF TRFM "TR FILE ERROR" * LSTN3 LDB ONTWO OPTION 1/2 FLAG SZB OPTION 1? JMP OPTN2 NO...OPTION 2 * CPA B65 ATTEMPT TO INITIALIZE WITH SDI LU#? JMP LUER1 YES. SKIP TO REPORT THE ERROR. CPA B61 ALSO CHECK HP3000 DRIVERS ,k JMP LUER1 CPA B66 JMP LUER1 CPA B67 RSS JMP INITL NO. GO TO START THE INITIALIZATION. * LUER1 JSB SYSER INFORM THE USER OF THE DEF LUERM " LU ERROR"--NO RETURN. * SKP * SUBROUTINE TO CHECK DRIVER TYPE * CALLING SEQUENCE: JSB TTY? * DEF * UPON RETURN, A-REG=LU NUMBER, B-REG=0 IF INTERACTIVE * TTY? NOP LDA TTY?,I STORE ADDRESS OF STA CHKLU LU IN EXEC CALL. ISZ TTY? SET RETURN ADDRESS. * JSB EXEC MAKE STATUS CALL. DEF *+6 DEF D13 CHKLU DEF *-* DEF TEMP1 DEF TEMP DEF SBCNL * LDA TEMP1 GET EQT WORD 5. ALF,ALF ISOLATE AND B77 DRIVER TYPE. LDB A CPA B5 IF DVR05 JMP SBCH? OR CPA B7 DVR07. JMP SBCH? CHECK SUBCHANNEL. JMP LSN1A SBCH? LDA SBCNL ISOLATE AND SUBMK SUBCHANNEL. SZA,RSS IF ZERO, CLB IT'S INTERACTIVE. LSN1A LDA CHKLU,I A-REG := LU NUMBER. JMP TTY?,I RETURN. SPC 3 * SET UP DCB FOR DUMMY READFS DMDCB OCT 0,0 DIRECTORY ADDR DEC 2 FILE TYPE DEC 1,1 TRACK,SECTOR OF FILE DEC 2 # OF SECTORS (128 WORDS TOTAL) RECL BSS 1 RECORD LEN (3RD PARAMETER) OCT 200 1 BLOCK IN DCB DEC 96 # SECTORS/TRACK IDADR BSS 1 ID SEGMENT ADDRESS DEC 1,1 CURRENT TRACK,SECTOR DEF INDCB+16 ADDRESS OF DCB DATA OCT 100000 DATA IS IN DCB DEC 1 RECORD # DEC 0 EXTENT # @DMDC DEF DMDCB @DCB DEF INDCB * CLASS STA CLFLG SET CLASS I/O FLAG < 0. LDA 1717B GET ADDRESS OF STA IDADR LSTEN'S ID SEGMENT. LDA PRAM+2 GET RECORD STA RECL LENGTH. JSB EXEC MOVE DEF *+5 DCB DEF CLS21 DATA DEF PRAM+1  VIA DEF INDCB+16 CLASS DEF D128 I/O. JMP ABORT [ERROR RETURN] LDA @DMDC MOVE LDB @DCB DCB HEADER MVW D15 INFORMATION. JMP LSTN3 CONTINUE WITH NORMAL PROCESSING. SKP * INITIALIZATION CONTROL SECTION. * INITL EQU * ENTER HERE FOR FIRST RUN JSB PRINT TELL USER: DEF MSG1 "SYSTEMS CONNECTED TO THIS NODE:" * LDA ASC10 ASK USER TO SPECIFY JSB CPUCK "HP 1000?" RMSA NOP * LDA ASC30 ASK USER TO SPECIFY JSB CPUCK "HP 3000?" RM3K NOP 3000 FLAG * IOR RMSA \ MAKE SURE SZA > AT LEAST ONE TYPE NODE JMP DT001 / WAS SPECIFIED JSB ERROR OTHERWISE-- DEF IVRES "INVALID RESPONSE" LDA TYPEQ INPUT FROM SZA TTY? JMP ABORT NO--ABORT. JMP INITL YES--TRY AGAIN * DT001 JSB SAM CALCULATE TCB NEEDS LDA RM3K IF NO HP3000 SZA,RSS INCLUDED JMP DT002 SKIP FOLLOWING BLOCK * JSB D3000 HP3000 INITILIZATION LDA RMSA IF NO HP1000 SZA INCLUDED, JMP DT002 LDB SAMSZ SET-UP SAM BLOCK JSB SGCO JMP DT003 AND SKIP FOLLOWING BLOCK. * DT002 CLA PREPARE FOR STA LTEMP LU ENTRY TESTING. JSB LUIN READ IN & INITIALIZE THE SPECIFIED LU'S LDA LTEMP SEE IF THEY ENTERED ANY LU'S SZA,RSS ? JMP ABORT NO...DIDN'T ENTER ANY LU'S JSB FRMT FORMAT ROUTE VECTORS * DT003 CLE JSB MSET SCHEDULE MONITORS & SET UP STREAM LISTS. * JSB SECOD SET NETWORK SECURITY CODE FOR THIS NODE. JSB SCHDQ SCHEDULE QUEUEING PROCESSORS, JMP OPT20 AND SEE WHAT ELSE USER WANTS * * SUBROUTINE TO ASK CPU QUESTIONS & INTERPRET RESPONSES CPUCK NOP STA MSG2+4 JSB PRINT PRINT THE QUESTION DEF MSG2 JSB READ READ THE RESPONSE CLA,INA CPB "YE" YES? JMP CPUC2 YES, SET THE FLAG CLA CPB "NO" NO? JMP CPUC2 CLEAR FLAG JSB ERXFR INFORM USER OF ERROR DEF ERR1 "ANSWER YES OR NO" JMP CPUCK+4 RETRY QUESTION * CPUC2 STA CPUCK,I SET CPU FLAG ISZ CPUCK SET CORRECT RETURN ADDRESS JMP CPUCK,I RETURN * SUBMK OCT 37 ASC10 ASC 1,10 ASC30 ASC 1,30 SBCNL NOP * MSG1 DEF *+2 DEF D16 ASC 16, SYSTEMS CONNECTED TO THIS NODE: MSG2 DEF *+2 DEF D6 ASC 6, HP 1000? _ ERR1 DEF *+2 DEF D9 ASC 9, ANSWER YES OR NO! SKP * SUBROUTINE TO OBTAIN CLASS & RESOURCE #S AND CALCULATE TCB BLOCK SIZE SPC 1 SAM NOP ENTRY/EXIT: SYS. AV. MEM. SET-UP. LDA D20 INITIALIZE DEFAULT NO. STA PRAM OF TRANSACTIONS =20. JSB PRINT ASK THE USER TO SPECIFY THE: DEF MSG0 " NO. OF ACTIVE TRANSACTIONS?" SOVER JSB READ READ THE RESPONSE. CPA B1 IF THE RESPONSE WAS NUMERIC, JMP SVALU GO TO PROCESS IT; ELSE, DETERMINE CPB /D IF DEFAULT VALUE IS TO BE USED. JMP SDFLT USE THE DEFAULT VALUE (32). * SERR JSB ERXFR IMPROPER REPLY: DEF IVRES GO TO INFORM THE USER OF THE ERROR; JMP SOVER THEN ALLOW ANOTHER CHANCE. * SVALU STB PRAM SAVE NO. OF TRANSACTIONS, TEMPORARILY. SSB,RSS IF VALUE NEGATIVE--INFORM USER OF ERROR. CMB,INB,SZB,RSS NEGATE THE NUMBER & CHECK FOR ZERO. JMP SERR * ERROR: NUMBER IS INVALID--TRY AGAIN * ADB D100 ADD THE MAXIMUM ALLOWABLE NO. (100). SSB IS THE SPECIFIED NO. ALLOWABLE? JMP SERR NO. GO INFORM HIM OF THE ERROR! * SDFLT LDB PRAM GET THE NUMBER OF TRANSACTIONS. CMB,INB FORM A LOOP COUNT STB LOOPC SAVE THEkHFB LOOP COUNT. LDA PRAM GET THE NUMBER OF TRANSACTIONS. MPY B5 CALCULATE: MEMORY SIZE(WORDS) = STA SAMSZ (TRANSACTIONS)*(5 WDS./TRANSACTION) * LDA RM3K SZA,RSS JMP SAM,I NO HP3000--SKIP BELOW CODE * LDA B4 INITIALIZE DEFAULT NUMBER OF STA TST#+1 CONCURRENT USERS = 4 JSB PRINT ASK USER TO SPECIFY DEF MSG4 "MAX NO. CONCURRENT HP3000 USERS?" SOV1 JSB READ READ RESPONSE CPA B1 RESULT NUMERIC? JMP SVAL1 YES--PROCESS IT CPB /D DEFAULT WANTED? JMP SDFL1 USE DEFAULT OF 4 SERR1 JSB ERXFR IMPROPER REPLY: DEF IVRES INFORM USER OF ERROR JMP SOV1 AND TRY AGAIN SVAL1 STB TST#+1 SAVE # OF USERS SSB,RSS IF NEGATIVE--ERROR CMB,INB,SZB,RSS NEGATE NUMBER & CHECK FOR ZERO JMP SERR1 REPORT ERROR ADB D10 ADD MAXIMUM NUMBER ALLOWED (10) SSB BEYOND RANGE? JMP SERR1 YES--REPORT ERROR SDFL1 LDA TST#+1 MPY D14 MULTIPLY NO. USERS BY 14 STA TSTSZ SAVE # WORDS IN TST. ADA SAMSZ ADD NO. WORDS FOR TRANSACTIONS STA SAMSZ STORE TOTAL SAM NEEDED JMP SAM,I RETURN * SKP H* SUBROUTINE TO OBTAIN SYSTEM AVAILABLE MEMORY & INITIALIZE NULL LIST. SPC 1 SGCO NOP ENTRY/EXIT STB TEMP SAVE TOTAL WORDS REQUIRED LDA DM3 STA RETRY SET # OF RETRIES FOR "DELAY" ROUTINE SREPT JSB #RSAX GO TO THE DEF *+3 SYSTEM RESOURCE-CONTROL ROUTINE, DEF ZERO TO REQUEST SYSTEM AVAILABLE MEMORY, DEF TEMP IN THE AMOUNT SPECIFIED BY THE USER. * CPA M1 IF THE AMOUNT WILL NEVER BE AVAILABLE, JMP NOMER INFORM THE USER OF THE PROBLEM. SZA HAS THE MEMORY BEEN ALLOCATED? JMP GETRN YES. GO TO GET RNS & CLASSES JSB DELAY NO. IT'S NOT AVAILABLE NOW--WAIT. JMP NOMER * RETRIES EXHAUSTED: INFORM USER! JMP SREPT TRY AGAIN FOR MEMORY ALLOCATION. * GETRN CLE GET A JSB RNSUB RESOURCE NUMBER DEF TBRN# FOR THE TABLE-ACCESS RN. CLE GET A JSB RNSUB RESOURCE NUMBER DEF QRN# FOR THE SYSTEM-QUIESCENT RN. * LDA RM3K SZA,RSS JMP SGPP NO HP3000--SKIP THIS CODE * CLE GET A JSB CLSUB CLASS NUMBER DEF QXCL# FOR "QUEX" LDA QXCL# ALR,CLE,RAR CLEAR THE BUFFER SAVE BIT STA QXCL# JSB RNSUB GET A RESOURCE NUMBER DEF QZRN# FOR "QUEZ" LISTEN MODE JSB RNRQ GLOBAL LOCK RN DEF *+4 DEF GLOCK DEF QZRN# DEF TEMP1 CLE GET A JSB CLSUB CLASS NUMBER DEF RQCV# FOR REQUEST CONVERTER LDA RQCV# ALR,CLE,RAR CLEAR THE BUFFER SAVE BIT STA RQCV# JSB CLSUB GET A CLASS NUMBER DEF RPCV# FOR REPLY CONVERTER LDA RPCV# ALR,RAR CLEAR THE BUFFER SAVE BIT STA RPCV# * LDA RMSA SZA,RSS JMP NULNK JUMP IF NO DS/1000 * SGPP CLE GET A JSB CLpSUB CLASS NUMBER DEF GRPM# FOR THE GENERAL PRE-PROCESSOR MODULE. CLE GET A JSB CLSUB CLASS NUMBER DEF RTRY# FOR THE WRITE RETRY MODULE CLE GET A JSB CLSUB CLASS NUMBER DEF QCLM# FOR THE ERROR LOG MONITOR. * NULNK JSB CLEAR GO TO CLEAR SYSTEM DATA AREA IN . LDA LOOPC COUNT FOR NUMBER OF TCBS STA TEMP JSB $LIBR GAIN ACCESS TO NOP SYSTEM RESOURCES. LDA #FWAM GET THE ADDRESS OF THE S.A.M. BLOCK, STA #NULL AND INITIALIZE HEAD OF NULL LIST. STA B LINK JMP SLOPX * SLOOP ADB B5 THE STLNK STB A,I NULL [CONTAINS XSB A,I: DMS] NOP LIST [NOP: RTE-II, DEF A,I: DMS] STB A WITH SLOPX ISZ TEMP FIVE- JMP SLOOP WORD CLB NULL STERM STB A,I ENTRIES. [CONTAINS XSB A,I: DMS] NOP [NOP: RTE-II, DEF A,I: DMS] * * CPB RM3K DS/3000 ENABLED? JMP INIT NO, BYPASS THIS CODE * LDA TSTSZ CAX X-REG := # WORDS IN TST ADA NRVSZ ADA NRVSZ CMA,INA A-REG := -(#WORDS IN TST AND NRV) ADA #SAVM + SAM BLOCK SIZE ADA #FWAM + BLOCK'S STARTING ADDRESS STA TST# STORE TST ADDRESS * LOOP3 STB A,I [XSB A,I FOR DMS] NOP STORE INA ZEROES DSX IN JMP LOOP3 TST SKP * * INITIALIZE ALL GLOBAL RN'S, CLASS NUMBERS, AND COUNTERS IN 'RES'. * INIT LDA QCLM# GET THE CLEANUP MONITOR'S CLASS NO. CCE ALR,ERA REMOVE THE BUFFER SAVE BIT & SET NO WAIT BIT STA QCLM# SAVE THE CLASS WORD. * LDA LSBFA SOURCE = LOCAL BUFFER. LDB #SCLR DESTN = DATA AREA. MVW D18 MOVE THE DATA TO . * uJSB $LIBX RESTORE THE DEF SGCO SYSTEM'S DEFENSES. * NOMER JSB SYSER GO TO INFORM THE USER THAT DEF NOMEM MEMORY IS UN-AVAILABLE--NO RETURN. * * DO NOT CHANGE ORDER OF ENTRIES (MATCHES ORDER IN )!! * LSBFA DEF TBRN# LOCAL 'RES' DATA BUFFER ADDRESS. TBRN# NOP TABLE-ACCESS RESOURCE NUMBER. QRN# NOP SYSTEM-QUIESCENT RESOURCE NUMBER. GRPM# NOP GENERAL PRE-PROCESSOR CLASS NUMBER. QCLM# NOP QUEUE CLEAN-UP MONITOR'S CLASS NUMBER. NOP ACTIVE TRANSACTION COUNTER. ABS 256-9 MASTER-REQUEST TIMEOUT(LOWER BYTE -9). ABS 256-6 SLAVE-REQUEST TIMEOUT(LOWER BYTE -6). RTRY# NOP WRITE-RETRY MODULE'S CLASS NUMBER. NOP D65MS QUIESCENT WAIT INTERVAL. NOP NODE SECURITY CODE. OCT 6000 REMOTE-BUSY REJECT RETRY COUNT (-3). RPCV# NOP HP3000 REPLY CONVERTER CLASS NO. RQCV# NOP HP3000 REQUEST CONVERTER CLASS NO. LU3K# NOP LU NUMBER OF HP3000 QZRN# NOP QUEZ RN QXCL# NOP QUEX CLASS NO. TST# NOP HP3000 TRANS. STATUS TBL. ADDR NOP SIZE OF TST * XSBAI XSB A,I DMS: CROSS-STORE VIA ALTERNATE MAP. XCBAI XCB A,I CROSS-COMPARE XSANP XSA NPNT,I CROSS-STORE XLANP XLA NPNT,I CROSS-LOAD MWII MWI MOVE TO ALTERNATE MAP NOP * MSG0 DEF *+2 DEF D15 ASC 15, NO. OF ACTIVE TRANSACTIONS? _ IVRES DEF *+2 DEF D9 ASC 9, INVALID RESPONSE! NOMEM DEF *+2 DEF D9 ASC 9, NO SYSTEM MEMORY! MSG4 DEF *+2 DEF D18 ASC 18, MAX NO. CONCURRENT HP3000 USERS ? _ * LOOPC NOP LOOP COUNTER * SPC 4 * * DELAY SUBROUTINE: DELAY EXECUTION FOR 1-SECOND. * SET (BEFORE ENTRY) TO NEGATIVE NUMBER OF PASSES * ALLOWED THROUGH , BEFORE RETURN TO P+1 ERROR-RETURN. * NORMAL RETURN IS TO P+2, FOLLOWING DELAY OF 1-SECOND. * DELAY NOP ENTRY/EXIT: DELAY SUBROUTINE. JSB EXEC WAIT DEF *+6 1 SECOND DEF D12 TO ALLOW DEF ZERO SYSTEM DEF B1 CONDITIONS TO DEF ZERO CHANGE DEF DM100 AS REQUIRED. ISZ RETRY IF RETRY COUNT IS NOT EXHAUSTED, ISZ DELAY THEN SET RETURN TO P+2; ELSE, IF JMP DELAY,I EXHAUSTED, RETURN TO P+1--ERROR! * RETRY NOP RE-TRY COUNTER * SKP * SUBROUTINE TO INITIALLY ENABLE AN HP3000 LU * D3000 NOP * JSB PRINT ASK THE USER DEF D3MS1 "LU OF HP3000?". D3010 JSB READ GET THE RESPONSE. CPA B1 IF THE RESPONSE WAS NUMERIC, JMP D3020 GO TO PROCESS IT; ELSE DETERMINE D3ER1 JSB ERXFR DEF LUERM "LU ERROR". JMP D3010 TRY AGAIN. * D3020 STB LU3K# SAVE HP3000 LU INTERNALLY FOR NOW. * JSB EXEC GO TO RTE DEF *+4 TO GET THE DEF SD13 EQUIPMENT TYPE-CODE DEF LU3K# LINKED TO THE LU # DEF NCNT SUPPLIED BY THE USER. JMP D3ER1 INVALID LU. * CLA STA SWTCH SWTCH := 0 (HARD WIRED) LDA NCNT ISOLATE THE ALF,ALF EQUIPMENT AND B77 TYPE-CODE. CPA B61 IF NOT DVG61, JMP D3025 CPA B66 DVG66, OR JMP D3025 CPA B67 DVG67, JMP D3000,I JMP D3ER1 IT IS AN INVALID LU. * D3025 LDA B2 SWTCH := 2 (MODEM) STA SWTCH * * SET UP EQT EXTENSION FOR SLC. * JSB PRINT ASK THE USER WHETHER DEF D3MS2 HALF OR FULL DUPLEX. D3060 JSB READ GET THE RESPONSE. CPA B1 IF THE RESPONSE WAS NUMERIC, JMP D3070 GO PROCESS IT. D3065 JSB ERXFR REPORT RESPONSE ERROR. DEF IVRES JMP D3060 ALLOW ANOTHER CHANCE. * D3070 LDA B WAS RESPONSE 0 OR 1? AND DM2 SZA JMP D3065 NO. ALLOW ANOTHER CHANCE. RBR POSITION TO BIT 15, STB SAVA AND SAVE TEMPORARILY. * LDA D$EQT+1 AND NOT15 CLEAR PRESENT DUPLEX BIT. IOR SAVA STORE DUPLEX BIT IN STA D$EQT+1 EQT EXTENSION, WORD 2. * LDA D$XS5 GET WORD S+5 OF EQT EXTENSION. AND DM3 CLEAR PRESENT "SWITCHED" BIT. IOR SWTCH STORE SWITCHED OR NON-SWITCHED BIT STA D$XS5 IN EQT EXTENSION, WORD S+5. * * GET LOCAL AND REMOTE ID SEQUENCES. * LDA NCNT IF NOT MODEM LINK, SKIP. SZA,RSS JMP D3030 * JSB PRINT ASK THE USER DEF D3MS4 "LOCAL ID SEQUENCE?" JSB READ GET THE RESPONSE. LDA PRNTL GET # BYTES THAT WERE INPUT. CPB /E IF ID SEQ NOT WANTED, JMP D3027 SKIP IT. LDB D$LID JSB STRID STORE LOCAL ID SEQ IN "RES". * D3027 JSB PRINT ASK THE USER DEF D3MS5 "REMOTE ID SEQUENCE?" JSB READ GET THE RESPONSE. LDA PRNTL GET # BYTES THAT WERE INPUT. CPB /E IF ID SEQ NOT WANTED, JMP D3030 SKIP IT. LDB D$RID INB SKIP WORD FOR RETURN PARAM. JSB STRID STORE REMOTE ID SEQ IN "RES". * D3030 JMP D3000,I RETURN * * NOT15 OCT 77777 SWTCH DEC 0 CHANGED TO 1 FOR MODEM GLOCK OCT 100002 SAVA OCT 0 TEMP NOP D3MS1 DEF *+2 DEF D8 ASC 8, LU OF HP3000? _ D3MS2 DEF *+2 DEF D20 ASC 20, ENTER 0 FOR HALF, 1 FOR FULL DUPLEX: _ D3MS4 DEF *+2 DEF D11 ASC 11, LOCAL ID SEQUENCE? _ D3MS5 DEF *+2 DEF D11 ASC 11, REMOTE ID SEQUENCE? _ * * SUBROUTINE TO STORE ID SEQUENCE IN "RES". * (A) = # BYTES * (B) = ADDRESS IN "RES". * INBUF = ASCII INPUT BUFFER (ADDR = DINBF). * STRID NOP STB TEMP1 DESTINATION ADDR. * LDB A O IS # BYTES .LE. 16? ADB DM17 SSB,RSS LDA D16 NO. TRUNCATE TO 16 BYTES. STA TEMP1,I STORE # BYTES. STA B BRS GET LAST CHARACTER IN BUFFER. ADB M1 ADB DINBF LDA B,I AND D255 CPA D32 IS IT A BLANK? JMP STR1 YES. LDA TEMP1,I NO. ARE THERE 16 BYTES? CPA D16 RSS JMP STR2 NO. STR1 LDA B,I YES. CLEAR THE BLANK (OR 16TH BYTE), AND DM256 STA B,I LDA TEMP1,I AND DECREMENT BYTE COUNT. ADA M1 STA TEMP1,I INA STR2 ISZ TEMP1 CLE,ERA NO. OF WORDS TO STORE. LDB TEMP1 DESTINATION ADDRESS STA TEMP1 # OF WORDS LDA DINBF SOURCE ADDRESS MVW TEMP1 PERFORM MOVE * JMP STRID,I RETURN TO CALLER SKP * OPTION 2 IS ENTERED WHEN SYSTEM IS ALREADY INITIALIZED. * OPTN2 JSB CHCKN SEE IF THEY WANT TO READ FROM A FILE JMP *+2 NO...IT'S AN LU. JMP OPT20 YES CPA B65 IS IT DVR65? JMP OPT22 YES CPB #LU3K IS IT THE HP3000 LU? JMP OPT23 YES OPT20 JSB PRINT DEF OPMES " OPERATION?_" JSB READ GET THE RESPONSE. CPA B2 ASCII RESPONSE? RSS YES. CONTINUE PROCESSING. JMP EXPLN NO...EXPLAIN THE POSSIBILITIES! CPB /E REQUEST TO TERMINATE? JMP TERM YES. GO TO OBLIGE. CPB /S REQUEST TO SCHEDULE MONITOR(S)? JMP SKEDM YES. GO TO SET UP TO SCHEDULE. CPB /T REQUEST TO MODIFY TIMING? JMP TIME YES. CPB /N REQUEST TO DISPLAY NRV? JMP DSNRV YES. SATISY THE REQUEST. CPB ?? IS THE USER PUZZLED? JMP EXPLN YES...GIVE HIM SOME ASSISTANCE. JSB RNRQ GO TO RTE DEF *+4 TO OBTAIN THE DEF GLCNW STATUS OF THE DEF #QRN SYSTEM QUIESCENT 2 DEF TEMP1 RESOURCE NUMBER. LDB PARSB+1 GET THE USER COMMAND, AGAIN. LDA TEMP1 GET THE STATUS OF #QRN. CPA B7 IF THE SYSTEM IS ALREADY QUIESCENT, JMP QCHNG THEN ONLY /R IS ALLOWED; ELSE, CPB /L REQUEST TO RE-ENABLE A LINE? JMP OPT21 YES. GO TO DETERMINE THE LU NUMBER. CPB /Q REQUEST TO MAKE THIS NODE QUIESCENT? JMP QUIES YES.GO TO PROCESS THE REQUEST. JMP EXPLN USER IS CONFUSED...HELP HIM! * QCHNG CPB /R REQUEST TO RE-START FROM QUIESCENCE? JMP REQUE YES. GO TO START IT UP AGAIN. * EXPLN JSB PRNTX EXPLAIN THE COMMANDS DEF EXPMS TO THE CONFUSED USER. JMP OPT20 REPEAT THE QUESTION. * SKP SKEDM CCE =1 TO DISALLOW DEFAULT SCHEDULING. JSB MSET GO TO SCHEDULE MONITOR(S). JMP OPT20 RETURN TO CHECK FOR OTHER OPTIONS. * OPT21 JSB LUIN GO TO ENABLE THE LINE. JMP OPT20 CHECK FOR OTHER OPTIONS. * OPT22 STB LTEMP SAVE THE SPECIFIED LOGICAL UNIT NO. JSB LUSET GO TO SET UP THE LOGICAL UNIT NO. JMP OPT2E * RTE-DETECTED ERROR--TRY AGAIN! * JMP TERM THEN DON'T ASK FOR MORE INPUT; ELSE, * OPT23 JSB EN3K RE-ENABLE HP3000 LINK JMP TERM AND TERMINATE * OPT2E JSB ERROR REPORT THE DEF LUERM " LU ERROR", JMP TERM AND TERMINATE. * GLCNW OCT 100006 GLOBAL LOCK/CLEAR--NO WAIT. SKP * ROUTINE TO SET ROUTE VECTORS * FRMT NOP JSB PRINT ASK FOR THE FILE NAME DEF NAME? JSB READ GET IT STB NONDT SAVE NON-NDT INDICATOR. PARS2 EQU *+1 DLD PARSB+1 DST PRAM SAVE THE 1ST 2 WORDS OF THE FILE NAME LDA PARSB+3 STA PRAM+2 LDA PARSB+5 GET FILE SECURITY CODE, LDB PARSB+9 AND CARTRIDGE NO.--IF ANY. DST PRAM+3 SAVE FOR FILE-OPEN CALL. * JSB PRINT ASK FOR 8THE CPU # DEF LOC? JSB READ READ IT CPA B1 NUMERIC? CLE,SSB YES. IS IT NEGATIVE? JMP FRMER * IMPROPER RESPONSE! * STB XNODE SAVE IT LOCALLY LDA NONDT SZA,RSS NON-NDT PROCESSING? JMP INTER YES--DO INTERACTIVE SET-UP. LDB PRAM IF CLASS I/O READ, SSB,RSS ERROR! JSB OPENX OPEN THE NDT FILE JMP FRMER DISPLAY ERROR MESS. * LDA XEQT GET LSTEN'S ID SEG ADDR ADA D23 ID SEG ADDR + 23 = HI MAIN + 1 LDA 0,I GET ADDR OF AVAILABLE CORE LDB 0 CMA,INA COMPUTE # OF WORDS ADA BGLWA THAT'S AVAILABLE OUT THERE STA TEMP ADA DM33 BIGGER THAN SSA,RSS PARSE BUFFER? JMP *+4 YES LDB PARS2 NO, USE PARSE BUFFER LDA D33 MAX REC SIZE = 33 STA TEMP STB BFADR SET RECORD BUFFER ADDRESS * JSB READX READ IN THE FIRST NDT RECORD CMB,SSB,INB IF # NODES <= 0 JMP FRMER REPORT ERROR. * CBX X = # OF NODES RNOD? LAX BFADR,I GET THE NODE NUMBER. CPA XNODE DOES NEXT RECORD DEFINE OUR VECTORS? JMP POSN YES, GO TO OBTAIN THE RECORD. DSX HAVE ALL NODES BEEN COMPARED? JMP RNOD? NO. TRY THE NEXT ONE. JMP FRMER YES--ERROR: THIS NODE NOT SPECIFIED! * SKIPR JSB READF POSITION FORWARD DEF *+5 IN ORDER TO DEF INDCB READ THE RECORD DEF TEMP1 WHICH WILL DEFINE DEF PRAM OUR ROUTE VECTORS. DEF ZERO (ZERO LENGTH = SKIP) SSA ANY ERRORS? JMP FRMER YES--REPORT IT. POSN DSX SKIPPED ENOUGH? JMP SKIPR NO--DO IT AGAIN. * JSB READX READ THE NRV (NODES/LUS/TIMEOUTS) FOR THIS CPU BRS COMPUTE # OF NODAL ADDRESS WORD PAIRS CMB,INB,SZB,RSS JMP FRMER ZERRO IS ILLEGAL STB PARSB+1 JSB IVECT SET-UP NRV PROCESSING LDA NRVSZ GET SIZE OF NRV MOVE ALS STA NO2MV SAVE FOR MVW CAY * NXTLU LAY BFADR,I GET LU OUT OF BUFFER SSA NEGATIVE LU SPECIFIED? JMP FRMER YES AND B77 SZA,RSS LU=0? JMP *+4 YES, NO CHECK STA LTEMP JSB LUTST VERIFY THIS IS TIED TO DVA65 JMP LUERX NO, NDT FILE SCREWED UP DSY DSY JMP NXTLU TRY NEXT * JSB CLOSX CLOSE THE NDT FILE * LDB #NRV ADDRESS OF NRV IN SAM LDA BFADR ADDR OF RECORD BUFFER INA POINT TO 1ST NODAL PAIR JSB $LIBR LOWER FENCE NOP LDX NO2MV LOAD X FOR MWI. NRMOV MVW TEMP1 MOVE NRV TO SAM (MWI IF DMS) JSB $LIBX DEF FRMT DONE WITH NRV SET-UP * NO2MV NOP NUMBER OF WORDS TO MOVE. SKP SPC 2 * THIS ROUTINE READS AN NDT RECORD AND CHECKS THAT IT DIDN'T * EXCEED OUR BUFFER SIZE READX NOP JSB READF READ NDT RECORD DEF *+5 DEF INDCB DEF TEMP1 BFADR NOP POINTS TO EITHER PARSE BUFFER OR DEF TEMP AVAILABLE CORE SSA JMP FRMER FILE ERROR LDA BFADR,I 1ST WORD HAS -(REC SIZE-1) LDB 0 ADA TEMP ADD BUFFER SIZE CMA,INA SSA WAS RECORD LARGER THAN BUFFER? JMP READX,I NO, RECORD OK, RETURN SKP * FRMER LDA NONDT SZA,RSS RUNNING OUT OF AN NDT FILE? JMP FRMEI NO JSB CLOSX YES. CLOSE THE NDT FILE, JSB SYSER AND INFORM THE USER OF THE ERROR: DEF FERMG FILE ERROR * FRMEI JSB ERROR DEF NOSZR NODE SPEC. ERROR * JSB #RSAX RETURN ANY SAM ALLOCATED DEF *+3 DEF B1 DEF #FWAM JMP FRMT+1 RETRY NRV SET-UP * LUERX JSB SYSER DEF LUERM * NAME? DEF *+2 I DEF D14 ASC 14, NDT FILE NAME [,SC[,CR]]? _ * LOC? DEF *+2 DEF D8 ASC 8, LOCAL CPU # ? _ * NUMB? DEF *+2 DEF D10 ASC 10, NUMBER OF NODES ? _ * NODEF DEF *+2 DEF D10 ASC 10, CPU#,LU,TIMEOUT ? _ * * * * * * DO NOT CHANGE ORDER OF NEXT TWO STATEMENTS * * * * * CNODE OCT -1 CURRENT-USER NODE; -1=INACTIVE. OCT -1 DOWN-LOAD NODE: INITIAL VALUE. * NCNT NOP NODE LOOP COUNTER (-NO. OF NODES). NPNT NOP LOCAL NRV TABLE POINTER. NONDT NOP INTERACTIVE FLAG / WORD-MOVE COUNT. XNODE NOP LOCAL SAVE OF LOCAL NODE # * SKP * INTERACTIVE ROUTE VECTOR PROCESSING. * INTER JSB PRINT ASK FOR DEF NUMB? NUMBER OF NODES? JSB READ GET THE ANSWER. CPA B1 NUMERIC? SZB,RSS ZERO JMP FRMER YES--ERROR! JSB IVECT SET-UP FOR NRV PROCESSING * GETN JSB PRINT ASK FOR NRV DATA: DEF NODEF "CPU#,LU,TIMEOUT?" JSB READ GET RESPONSE. CPA B1 NUMERIC CPU#? SSB YES. NEGATIVE? JMP FRMER * INVALID RESPONSE! LDA NRVSZ GET THE NUMBER OF NODES. ADA NCNT SUBTRACT NUMBER NOT YET PROCESSED, SZA,RSS IF NONE PROCESSED YET, JMP STNOD BYPASS DUPLICATE CPU# CHECK. CAX INITIALIZE COUNTER =CPU#'S PROCESSED. LDA #NRV GET POINTER TO FIRST CPU#. NCHEK NOP [DMS XCB GOES HERE FOR RTE-III/IV] CPB A,I IF THIS NODE IS A DUPLICATE, JMP FRMER THEN YELL ABOUT IT! ADA B2 ADVANCE POINTER TO NEXT CPU#. DSX ALL CPU#'S BEEN CHECKED? JMP NCHEK NO. CONTINUE CHECKING. * STNOD LDA 1 JSB SVNRV SAVE NODE # IN NRV TABLE LDA PARSB+5 GET THE LU--IF ANY. SZA IF IT'S #0, JMP STRLU GO TO SAVE IT; LDB PARSB+1 GET NODE AGAIN CPB XNODE = ELSE, IF =0, IS IT LOCAL CPU#? JMP NEXTN YES, SAVE 0, AND GET NEXT ONE. JMP FRMER * ERROR: 0 INVALID, IF NOT LOCAL! * STRLU STA NVCTR SAVE THE LU--TEMPORARILY. SSA IF IT'S NEGATIVE, JMP FRMER GIVE ERROR STA LTEMP INITIALIZE FOR VERIFICATION. JSB LUTST GO TO VERIFY THE LU. JMP FRMER * ERROR: INVALID LU! * LDA NVCTR GET THE SPECIFIED LU AGAIN. * LDB PARSB+8 GET TIMEOUT SPECIFICATION. CPB B2 IF THE PARAMETER IS INVALID, JMP FRMER THEN SCREAM ABOUT IT! LDB PARSB+9 CMB,INB,SZB,RSS IF IT IS NULL, OR ZERO, JMP NEXTN THEN IGNORE IT. SSB,RSS T/O<0? JMP FRMER YES, ERROR LDA 1 ADB D1275 SSB JMP FRMER JSB CFSEC ALF,RAL POSITION TO RAL BITS #13-7. IOR NVCTR INCLUDE THE LU#, * NEXTN JSB SVNRV STUFF IN THE LU/TIMEOUT WORD ISZ NCNT HAVE ALL NODES BEEN PROCESSED? JMP GETN JMP FRMT,I YES, RETURN * SAMSZ NOP # WORDS IN SAM BLOCK TSTSZ NOP # WORDS IN TST NRVSZ NOP # WORDS IN NRV NVCTR NOP * SPC 1 * SUBROUTINE TO SAVE NRV ENTRY IN SAM SVNRV NOP JSB $LIBR NOP STNOP STA NPNT,I NOP ISZ NPNT JSB $LIBX DEF SVNRV * SPC 1 * SUBROUTINE TO SET-UP FOR NRV INITIALIZATION IVECT NOP SSB NEGATIVE? JMP FRMER YES--ERROR! STB NRVSZ SAVE # OF NRV ENTRIES BLS B REG := # OF WORDS NEEDED ADB SAMSZ ADD SIZE OF SAM BLOCK UP TO NOW JSB SGCO GO INITIALIZE SAM BLOCK AND RES AREA LDA SAMSZ GET SAM SIZE WITHOUT NRV ADA #FWAM COMPUTE ADDR OF NRV IN SAM STA #NRV AND SAVE IT IN "RES". STA NPNT LDA PARSB+1 GET THE NUMBER OF NODES CMA,INA NEGATE & SAVE STA NCNT FOR( USE AS LOOP COUNTER STA #NCNT LDA XNODE STA #NODE SAVE LOCAL NODE # IN RES DLD CNODE INITIALIZE RES NODAL ADDRESSES DST #CNOD JMP IVECT,I RETURN SKP * ROUTINE TO ALLOW DCB SHARING. * OPENX NOP LDA DCBAD GET THE DCB ADDRESS. LDB SVDCA GET DCB STORAGE ADDRESS. SEZ SAVING OR RESTORING? SWP RESTORING--EXCHANGE SRC/DEST. MVW D16 SAVE IMPORTANT PART OF OLD DCB. SEZ RESTORING VIA 'CLOSX' ? JMP OPENX,I YES. ALL DONE. * LDA SVDCB+13 REMOVE THE ELA,CLE,ERA IN-CORE BIT#15, STA SVDCB+13 AND RESTORE THE WORD. * LDB BLNKS DOUBLE BLANK CLA CPA PRAM+2 LAST 2 CHARS SPECIFIED? STB PRAM+2 NO, USE BLANKS CPA PRAM+1 3RD & 4TH SPECIFIED? STB PRAM+1 NO ,USE BLANKS * JSB OPEN OPEN THE FILE DEF *+7 DCBAD DEF INDCB USE/RE-USE THE SINGLE DCB. DEF TEMP1 ERROR-RETURN LOC'N. DEF PRAM FILE NAME LOC'N. DEF ZERO EXCLUSIVE OPEN. DEF PRAM+3 SECURITY CODE (OR 0). DEF PRAM+4 CARTRIDGE NO. (OR 0). SSA,RSS ERRORS? ISZ OPENX NO--RETURN VIA P+2. JMP OPENX,I RETURN. * CLOSX NOP CLOSE FILE/RESTORE OLD DCB. LDA CLFLG IF DUMMY SSA DCB, JMP CLOSX,I RETURN! JSB CLOSE DEF *+3 DEF INDCB DEF TEMP1 LDA CLOSX GET RETURN ADDRESS. STA OPENX SET RETURN VIA 'OPENX'. CCE INDICATE RESTORATION ENTRY. JMP OPENX+1 GO TO RESTORE THE OLD DCB. * SVDCA DEF SVDCB DCB STORAGE ADDRESS. SVDCB BSS 16 NRV BUFFER IS USED WHEN NDT FROM FILE. SKP * NRV DISPLAY ROUTINE. * DSNRV LDA #NCNT GET ADDRESS OF NO. OF NODES. STA NCNT SAVE THE NUMBER OF NODES. CMA,INA,SZA,RSS ANYTHING SPECIFIED? JMP OPT20 NO--IeGNORE THE REQUEST! STA NONDT SAVE THE NEGATIVE LOOP COUNT. * LDA #NODE GET LOCAL NODE NUMBER. JSB CNVTD CONVERT IT TO ASCII, DEF LOCLN AND CONFIGURE THE MESSAGE. LDA NONDT GET THE NUMBER OF NODES. JSB CNVTD CONVERT TO ASCII, DEF NNODS AND CONFIGURE MESSAGE. JSB PRNTX PRINT THE FIRST MESSAGE DEF NODM1 WITHOUT A HEADER. * LDA #NRV GET THE NRV ADDRESS, STA NPNT AND SAVE THE POINTER. * DLOOP LDA NONDT GET NUMBER OF NODAL PAIRS. ADA NCNT SUBTRACT NUMBER ALREADY REPORTED. INA FORM A SEQUENCE NUMBER. JSB CNVTD CONVERT TO ASCII, DEF SEQN AND CONFIGURE THE MESSAGE. * DSNR1 LDA NPNT,I GET A NODE NUMBER. NOP [RESERVED FOR XLA] ISZ NPNT ADVANCE THE POINTER. JSB CNVTD CONVERT DEF NODEN & CONFIGURE. * DSNR2 LDA NPNT,I GET TIMEOUT/LU NOP [RESERVED FOR XLA] AND B77 ISOLATE THE LU. JSB CNVTD CONVERT DEF VECTR & CONFIGURE. * DSNR3 LDA NPNT,I GET TIMEOUT/LU, AGAIN. NOP [RESERVED FOR XLA] ISZ NPNT ADVANCE POINTER. AND BT137 RETAIN THE TIMEOUT VALUE (BITS#13-7). ALF,ALF POSITION VALUE RAL,RAL TO THE LOWER BYTE. SZA IF =0, THEN NO FILLING NEEDED. IOR DM256 FILL-IN THE UPPER BYTE. CMA,INA MAKE THE VALUE POSITIVE (OR 0). MPY B5 MULTIPLY BY FIVE JSB CNVTD CONVERT DEF NRVTO & CONFIGURE. * JSB PRNTX PRINT NODAL ADDRESS DATA DEF NRVMS WITHOUT THE HEADER. * ISZ NCNT ANY MORE TO PROCESS? JMP DLOOP YES, CONTINUE. SKP LDA OPTYP GET THE SYSTEM SPECIFICATION. SLA FOR NON-RTE-M SYSTEMS, JMP OPT20 THE PROCESS IS COMPLETE. * LDA #LNOD GET THE DOWN-LOAD NODE NTRNUMBER. CPA M1 IF IT HAS NOT BEEN USED, JMP PRAPM THEN IGNORE THE CONVERSION. JSB CNVTD CONVERT TO ASCII, DEF APNOD AND CONFIGURE THE MESSAGE. * PRAPM JSB PRNTX PRINT NODE NUMBER (OR "NONE"), DEF APMSG WITHOUT A HEADER. JMP OPT20 PROCESS COMPLETE--CHECK FOR NEW REQUEST. * SPC 3 .LTNODM1 DEF *+2 DEF D33 ASC 10, NRV SPECIFICATIONS: OCT 6412 ASC 7, LOCAL NODE#: LOCLN ASC 3, ASC 8,, NO. OF NODES= NNODS ASC 3, OCT 6412 * NRVMS DEF *+2 DEF D26 SEQN ASC 3, ASC 4,: NODE= NODEN ASC 3, ASC 3,, LU= VECTR ASC 3, ASC 3,, TO= NRVTO ASC 3, ASC 3,(SEC.) OCT 6412 * APMSG DEF *+2 DEF D17 ASC 13, LAST LOAD-NODE= APNOD ASC 3,NONE OCT 6412 * BT137 OCT 37700 * SKP * NETWORK TIMING-VALUE MODIFICATION SECTION * TIME JSB GETV GO TO GET CURRENT VALUES. JSB PRNTX PRINT SECTION HEADER. DEF TMES " TIMING MODIFICATION" * JSB GTIME GET MASTER TIMEOUT VALUE DEF MSTMG DEF D1275 JMP TI.SV JSB CFSEC STA #MSTO * TI.SV JSB GTIME GET SLAVE TIMEOUT VALUE DEF SLVMG DEF D1275 JMP TI.BR JSB CFSEC STA #SVTO * TI.BR JSB GTIME GET BUSY REJECT RETRY WAIT DEF BZMG DEF D10 JMP TI.WA ADA M1 ALF,ALF BITS 11-8 HAVE BUSY RETRY COUNT AND B7400 ISOLATE THEM STA #BREJ * TI.WA JSB GTIME GET REMOTE-QUIET WAIT DEF WAITM DEF D7200 JMP OPT20 STA #WAIT JMP OPT20 DONE WITH THIS SECTION SKP * SUBROUTINE TO ASK FOR, GET, AND VERIFY A TIMING PARAMETER * GTIME NOP LDA GTIME,I GET MSG ADDR STA GTI1 ISZ GTIME LDA GTIME,I GET MAX ALLOWED VALUE ADDR STA VCKAD SAVE IT ISZ GTIME * JSB PRINT PRINT THE QUESTION GTI1 NOP STORE MSG ADDR HERE GTI2 JSB READ GET RESPONSE SZA,RSS ANY CHANGE DESIRED? JMP GTIME,I NO CPA B1 NUMERIC RESPONSE? JMP VCHEK YES, CHECK THE LIMITS CPB /E DONE WITH TIMING PARAMETERS? JMP OPT20 YES * GTER JSB ERXFR INVALID RESPONSE DEF IVRES  JMP GTI2 * VCHEK SSB VALUE NEGATIVE? JMP GTER YES, ERROR LDA GTI1 CMB,INB,SZB,RSS WAS VALUE NON-ZERO? CPA TI.WA+1 NO, IS THIS QUIESCENT WAIT? RSS YES, LOWER LIMIT OK JMP GTER NO, INPUT ERROR LDA 1 ADB VCKAD,I MAX-INPUT VALUE SSB TOO LARGE? JMP GTER YES ISZ GTIME NO, RETURN IT IN A JMP GTIME,I * SKP * * ROUTINE TO GET CURRENT SYSTEM TIMING VALUES FOR REPORT TO USER. * GETV NOP ENTRY/EXIT LDA #MSTO GET MASTER TIMEOUT VALUE. ADA DM256 FORM FULL DATA WORD. CMA,INA MAKE IT POSITIVE. MPY B5 CONVERT TO SECONDS JSB CNVTD GO TO CONVERT IT TO ASCII. DEF MSVAL SPECIFY DESTINATION OF RESULT. * LDA #SVTO GET SLAVE TIMEOUT VALUE. ADA DM256 FORM FULL DATA WORD. CMA,INA MAKE IT POSITIVE. MPY B5 CONVERT TO SECONDS JSB CNVTD GO TO CONVERT IT TO ASCII. DEF SLVAL SPECIFY DESTINATION OF RESULT. * LDA #BREJ GET REMOTE-BUSY RETRY COUNT. ALF,ALF RIGHT JUSTIFY IOR DM16 SET BITS 15-4 CMA MAKE IT POSITIVE JSB CNVTD GO TO CCONVERT IT TO ASCII. DEF RTVAL SPECIFY DESTINATION OF RESULT. * LDA #WAIT GET QUIESCENT-WAIT INTERVAL VALUE. CMA,INA MAKE IT POSITIVE. JSB CNVTD GO TO CONVERT IT TO ASCII. DEF WTVAL SPECIFY DESTINATION OF RESULT. JMP GETV,I RETURN. * CNVTD NOP ENTRY/EXIT: ASCII CONVERSION ROUTINE. STA TEMP1 SAVE THE RAW DATA, TEMPORARILY. LDA CNVTD,I GET THE DESTINATION ADDRESS. STA STUFM CONFIGURE THE CALL TO 'CNUMD'. JSB CNUMD GO TO DEF *+3 CONVERT DEF TEMP1 THE VALUE STUFM NOP TO ASCII. ISZ CNVTD ADJUST THE RETURN POINTER, JMP CNVTD,I AND RETURN TO THE& CALLER. * SPC 1 * UTILITY SUBROUTINE CFSEC NOP ENTRY/EXIT CCB CONVERT SECONDS TO DIV B5 FIVE SECOND INTERVALS. ADB B2 IF THE REMAINDER IS SSB THREE OR MORE, ADA M1 ROUND TO NEXT INTERVAL. SZA,RSS INSIST UPON A CCA MINIMUM COUNT = -1. AND D255 MASK OFF HIGH BITS JMP CFSEC,I RETURN SKP * TMES DEF *+2 DEF D70 ASC 19, TIMING MODIFICATION--CURRENT VALUES: OCT 6412 OCT 6412 MAMSG ASC 8, MASTER T/O = BLNKS EQU MAMSG+6 MSVAL ASC 3, OCT 6412 ASC 8, SLAVE T/O = SLVAL ASC 3, OCT 6412 ASC 8, REMOTE-BUSY = RTVAL ASC 3, OCT 6412 ASC 8, REMOTE-QUIET = WTVAL ASC 3, OCT 6412 OCT 6412 * MSTMG DEF *+2 DEF D17 ASC 17, MASTER T/O [5 TO 1275 SECONDS] ?_ SLVMG DEF *+2 DEF D17 ASC 17, SLAVE T/O [5 TO 1275 SECONDS] ?_ BZMG DEF *+2 DEF D16 ASC 16, REMOTE-BUSY RETRIES [1 TO 10]?_ WAITM DEF *+2 DEF D18 ASC 18, REMOTE-QUIET WAIT [0 TO 7200 SEC]?_ * VCKAD EQU GETV * SKP * SUBROUTINE TO VERIFY THAT LU IS LINKED TO 'DVR65'. * LUTST NOP JSB DRTEQ GO TO OBTAIN DEF *+2 THE EQT ADDRESS DEF LTEMP FOR SPECIFIED LOGICAL UNIT. SSB IF THE LU IS INVALID, JMP LUTST,I TAKE THE ERROR EXIT! * ADB B4 POINT TO EQT WORD 5 LDA B,I GET STATUS WORD. ALF,ALF AND B77 ISOLATE THE EQUIPMENT TYPE-CODE. CPA B65 IS THE LU LINKED TO 'DVR65'? JMP *+2 YES. CONTINUE THE VERIFICATION. JMP LUTST,I NO. ERROR: RETURN TO P+1. * ADB B7 ADVANCE THE EQT POINTER. LDA B,I GET CONTENTS OF EQT WORD 12 ADA DM7 IF LESS THAN SEVEN, SSA EQT EXTENSION WORDS WERE SPECIFIED, JMP LUTST,I THE LU CANNOT BE INITIALIZED! * INB GET THE EQT EXTENSION ADDRESS DLD B,I AND THE DEVICE TIMEOUT VALUE SZA IF THE EXTENSION ADDRESS=0, SZB,RSS OR NO TIMEOUT HAS BEEN SPECIFIED JMP LUTST,I THE LU CANNOT BE INITIALIZED! ISZ LUTST ADVANCE RETURN POINTER, JMP LUTST,I AND TAKE THE GOOD EXIT. SPC 2 * SUBROUTINE TO SET-UP & ENABLE A LOGICAL UNIT NO. (VIA DVR65). * LUSET NOP * LDA LTEMP GET THE LOGICAL UNIT NUMBER. IOR B100 SET FOR ENABLE LISTEN REQUEST STA LTEMP SAVE THE CONFIGURED CONTROL WORD. * JSB EXEC GO TO RTE DEF *+3 TO REQUEST THAT DEF SD3 'DVR65' SET UP & ENABLE DEF LTEMP LISTEN MODE FOR THE LU JMP LUSET,I * RTE-DETECTED ERROR--TRY AGAIN! * ISZ LUSET SET FOR NORMAL RETURN (P+2). JMP LUSET,I RETURN TO THE CALLER. SKP * SUBROUTINE TO RE-ENABLE HP3000 LU * * TURN OFF QUEX. UPLIN WILL BRING IT BACK UP, AND QUEX WILL * GO THROUGH ITS ABORT CYCLE. EN3K NOP JSB MESSS CALL RTE MESSAGE PROCESSOR. DEF *+3 DEF OFFQX DEF D10 NOP JMP EN3K,I RETURN * OFFQX ASC 10,OF,QUEX,1 SPC 3 * PROGRAM TERMINATION PROCESSOR. * TERM CLA CPA #FWAM SAM ALLOCATED? JMP *+3 NO CPA ONTWO IS THIS INITIAL ENTRY? JSB SUPLN YES! SCHEDULE "UPLIN" JSB CHCKN WAS THERE A FILE JMP TERM1 NO...DON'T CLOSE IT LDA CLFLG IS IT A DUMMY DCB? SSA JMP TERM1 YES...DON'T CLOSE IT * JSB CLOSE CLOSE DEF *+3 THE DEF INDCB CONTROL DEF TEMP1 FILE. * TERM1 LDA ENMSG IF PROGRAM IS BEING ABORTED CPA ABPRM THEN IGNORE JMP TERM3 THE END MESSAGE. * JSB PRNTX GO TO PRINT THE DEF ENDMG TERMINATION MESSAGE--SANS HEADER. * TERM3 JSB PRTN RETURN ERROR INFORMATION DEF *+2 TO THE DEF ENMSG BATCH PROCESSOR. * CLB PREPARE FOR NORMAL TERMINATION. TERM4 STB TCOD CONFIGURE THE TERMINATION CODE. JSB EXEC GO TO THE DEF *+4 RTE EXECUTIVE DEF D6 TO TERMINATE DEF ZERO THIS PROGRAM, DEF TCOD AND-PERHAPS-TO SAVE RESOURCES. * JMP LSTEN GO BACK TO THE BEGINNING. * TCOD NOP (TERM. CODE: 0-NORMAL/1-SAVE RESOURCES) SKP * COMMUNICATION LINE ENABLING ROUTINE. * LUIN NOP JSB PRINT DEF UPLUM " LINE LU?_" JSB READ READ A RECORD CPA B1 WAS INPUT BINARY? JMP SAVLU YES. GO TO PROCESS THE LU. CPB /E END OF LIST? JMP LUIN,I YES. RETURN LUERR JSB ERXFR DEF LUERM "LU ERROR" JMP LUIN+3 TRY AGAIN * SAVLU STB LTEMP SAVE TEMPORARILY. CPB #LU3K HP3000 LU? JMP DT004 YES JSB LUTST GO VERIFY THAT LU IS LINKED TO 'DVR65'. JMP LUERR NOT A DVR 65...ERROR * JSB LUSET GO TO SET UP & ENABLE THE LU. JMP LUERR * RTE-DETECTED ERROR--TRY AGAIN! * JMP LUIN+1 GO TO REQUEST ANOTHER LU NUMBER. * DT004 JSB EN3K ENABLE HP3000 LU JMP LUIN+1 GO TO REQUEST ANOTHER LU NUMBER * LTEMP NOP TEMPORARY LOGICAL UNIT NO. STORAGE. SKP D8 DEC 8 D10 DEC 10 D11 DEC 11 D12 DEC 12 D13 DEC 13 D14 DEC 14 D15 DEC 15 D16 DEC 16 D17 DEC 17 D18 DEC 18 D20 DEC 20 D23 DEC 23 D26 DEC 26 D32 DEC 32 D33 DEC 33 D70 DEC 70 D100 DEC 100 D102 DEC 102 D128 DEC 128 D255 DEC 255 D1275 DEC 1275 D7200 DEC 7200 DM2 DEC -2 DM3 DEC -3 DM4 DEC -4 DM7 DEC -7 DM16 DEC -16 DM17 DEC -17 DM33 DEC -33 DM100 DEC -100 DM256 DEC -256 B17 EQU D15 B61 OCT 61 B65 OCT 65 B66 OCT 66 B67 -gOCT 67 B77 OCT 77 B100 OCT 100 B400 OCT 400 B7400 OCT 7400 SD3 OCT 100003 SD13 OCT 100015 M1 EQU CNODE RLU NOP TEMP1 NOP /A ASC 1,/A /D ASC 1,/D /E ASC 1,/E /L ASC 1,/L /N ASC 1,/N /Q ASC 1,/Q /R ASC 1,/R /S ASC 1,/S /T ASC 1,/T ?? ASC 1,?? "YE" ASC 1,YE "NO" ASC 1,NO TYPEQ NOP CLFLG NOP ONTWO NOP OPTYP NOP SPC 5 * * ROUTINE TO GET SIZE OF OVERFLOW FILE FOR USE BY 'RFAM'. * FILIN NOP JSB PRINT DEF FILMG " INPUT # OF FILES: _" JSB READ CPA B1 INPUT NUMERIC? JMP GFIL2 YES * JSB ERXFR DEF FERMG "FILE ERROR" JMP FILIN+3 RETRY * GFIL2 STB #RFSZ JMP FILIN,I AND RETURN TO THE CALLER. SKP * CLASS NUMBER ALLOCATION/DE-ALLOCATION SUBROUTINE. * * ENTER: & - DON'T CARE (DESTROYED ON RETURN). * = 0 - REQUEST A CLASS ALLOCATION FROM RTE. * = 1 - RETURN A CLASS NUMBER TO THE SYSTEM. * - CLASS NUMBER ADDRESS. * NOTE: DE-ALLOCATION ERRORS ARE IGNORED! * CLSUB NOP ENTRY/EXIT: CLASS SUBROUTINE. LDA DM3 INITIALIZE RE-TRY COUNTER FOR 3 PASSES, STA RETRY IN CASE SYS. MEM. UN-AVAILABLE. CLA,SEZ,RSS IF RETURN OPTION: SET TO IGNORE ERRORS; LDA RSSIN ELSE, SET TO RECOGNIZE ERRORS. STA ERRIN CONFIGURE ERROR-HANDLING INSTRUCTION. * LDB CLSUB,I GET THE CLASS NUMBER ADDRESS. ISZ CLSUB SET RETURN TO . LDA B,I GET THE CLASS NUMBER--IF ANY. ALR,RAR REMOVE BUFFER-SAVE BIT(#14)--IF ANY. SEZ,RSS IF REQUEST TO GET A CLASS, CLA USE ZERO CLASS NUMBER. IOR CLREQ SET NO-WAIT/CLASS-SAVE BITS(15,13). STA B,I SAVE MODIFIED CLASS NO. SPECIFICATION. STB CLSAD CONFIGURE THE CALL WITH CLASS NO. ADDR. SEZ DE-ALLOCATION REQUEST? JMP DEALC YES. GO TO RETURN THE CLASS NUiMBER. * CLALC JSB EXEC GO TO RTE DEF *+5 TO REQUEST DEF CLCTL THE ALLOCATION DEF ZERO OF A CLASS NUMBER, DEF ZERO WHICH WILL BE RETURNED TO CLSAD NOP THE SPECIFIED STORAGE ADDRESS. JMP CLERR REPORT THE SYSTEM-LEVEL ERROR. * SSA,RSS ALLOCATION ERROR? JMP CLRTN NO. GO CLEAR PENDING REQUEST. CPA DM2 YES. NO MEMORY AT PRESENT TIME? JSB DELAY YES--WAIT A WHILE & RE-TRY. JMP CLERR *ERROR: NO CLASS# OR RE-TRIES EXHAUSTED. JMP CLALC GO TO RE-TRY THE ALLOCATION REQUEST. * DEALC JSB EXEC GO TO RTE DEF *+8 TO WRITE A DEF CLS18 ZERO LENGTH DEF ZERO RECORD INTO DEF ZERO THE CLASS, WHICH DEF ZERO IS TO BE DEF ZERO DE-ALLOCATED. DEF ZERO THIS WILL ALLOW DEF CLSAD,I SUSPENDED PROGRAMS NOP TO BE ABORTED. * SETSW CCA SET THE RELEASE RE-TRY SWITCH STA CEXIT TO =-1. * CLRTN JSB EXEC GO TO RTE DEF *+5 TO CLEAR DEF CLS21 THE PENDING DEF CLSAD,I REQUEST DEF ZERO ON THE DEF ZERO CLASS. ERRIN NOP IGNORE ERRORS(YES-NOP; NO-RSS)? RSSIN RSS YES. SKIP TO CHECK FOR DE-ALLOCATION. JMP CLERR NO--REPORT THE CLASS ERROR. ISZ CEXIT RELEASE PROCESSING COMPLETE? JMP REM15 YES. GO CLEAR THE NO-WAIT BIT(#15). * CPA M1 NO. ARE ALL PENDING REQUESTS CLEARED? RSS YES. SKIP TO CHECK FOR DE-ALLOCATION. JMP SETSW NO. CONTINUE TO CLEAR REQUESTS. * LDA ERRIN GET ALLOCATION/DE-ALLOCATION INDICATOR. SZA IF ALLOCATION IN PROCESS, JMP REM15 GO TO REMOVE BIT#15 & RETURN. * LDA CLSAD,I FOR DE-ALLOCATION:y GET CLASS WORD, AND CLMSK REMOVE NON-RELEASE BIT(#13), STA CLSAD,I AND RESTORE CLASS WORD. JMP CLRTN GO TO RETURN THE CLASS NUMBER TO RTE. * REM15 LDA CLSAD,I GET THE CLASS WORD ALR,RAR CLEAR "NO WAIT" BIT IOR CBITS SET SAVE BUFFER & NO DEALLOCATE BITS STA CLSAD,I RESTORE THE CLASS WORD. * JMP CLSUB,I RETURN TO THE CALLER. * CLCTL OCT 100023 CLREQ OCT 120000 CLS18 OCT 100022 CLS21 OCT 100025 CBITS OCT 60000 CLMSK OCT 117777 CEXIT EQU FILIN * CLERR JSB SYSER GO TO INFORM THE USER OF A DEF CLSER CATASTROPHIC CLASS-PROCESSING ERROR. * SKP * NETWORK SECURITY CODE PROCESSOR. * * [ CAUTION: DO NOT MAKE CHANGES TO ,,OR RTNS. ] * SECOD NOP ENTRY/EXIT: SECURITY CODE ROUTINE. JSB PRINT DEF SECMS " SECURITY CODE?_" JSB READ GET THE RESPONSE. CPA B2 ASCII RESPONSE? RSS YES.CONTINUE PROCESSING. JMP SECOD+1 NO. ASK AGAIN. SPC 1 UNL JSB *+14 LST STB #SWRD SAVE MODIFIED SECURITY CODE IN 'RES'. JMP SECOD,I RETURN. SPC 1 SECMS DEF *+2 DEF D9 ASC 9, SECURITY CODE? _ * UNL OCT 0,60001,2011,23,2011 JMP *-2 AND *+7 IOR *+7 STA *+1 OCT 0,7000,60001 JMP *-12,I OCT 17,100020,2003,5477 LST SKP * SYSTEM QUIESCEING ROUTINE (SUSPEND NETWORK COMMUNICATIONS). * * [ CAUTION: DO NOT MAKE CHANGES TO ,, OR RTNS.] * QUIES JSB PRINT DEF QHED " SYSTEM QUIESCENCE" QASK JSB PRINT DEF SECMS " SECURITY CODE?_" JSB READ GET THE RESPONSE. CPA B2 ASCII RESPONSE? RSS YES. CONTINUE PROCESSING. JMP QASK NO. ASK AGAIN. SPC 1 UNL JSB *-25 LST CPB #SWRD DOES THE CALLER KNOW THE SECRET? & JMP QUIET <> LET HIM PASS! JSB ERROR <> INFORM HIM OF DEF IVRES THE ERROR OF JMP ABORT HIS WAYS!!! SPC 1 QUIET JSB RNRQ GO TO RTE DEF *+4 TO REQUEST DEF B2 A GLOBAL LOCK DEF #QRN UPON THE QUIESCENT DEF TEMP1 RESOURCE NUMBER. * JMP TERM GO TO TERMINATION. * SKP * RE-START A FORMERLY QUIESCED SYSTEM. * * [ CAUTION: DO NOT MAKE CHANGES TO ,, OR RTNS.] * REQUE JSB PRINT DEF RQHED " QUIESCENT RE-START" RQASK JSB PRINT DEF SECMS " SECURITY CODE?_" JSB READ GET THE RESPONSE. CPA B2 ASCII RESPONSE? RSS YES. CONTINUE PROCESSING. JMP RQASK NO. ASK AGAIN. UNL JSB *-45 LST SPC 1 CPB #SWRD DOES THE USER KNOW THE SECRET? JMP QOVER <> ALLOW RE-START. JSB ERROR INFORM HIM OF DEF IVRES THE ERROR OF JMP ABORT HIS WAYS!!!! SPC 1 QOVER JSB RNRQ GO TO RTE DEF *+4 TO REQUEST DEF B4 AN UNLOCKING OF DEF #QRN THE QUIESCENT DEF TEMP1 RESOURCE NUMBER. JMP OPT20 CHECK FOR OTHER OPTIONS. * SPC 1 QHED DEF *+2 DEF D9 ASC 9, SYSTEM QUIESCENCE RQHED DEF *+2 DEF D10 ASC 10, QUIESCENT RE-START * SKP * RESOURCE NUMBER ALLOCATION/DE-ALLOCATION ROUTINE. SPC 1 * ENTER: & - DON'T CARE (DESTROYED ON RETURN) * = 0 - ALLOCATE GLOBALLY & LOCK LOCALLY * - 1 - DE-ALLOCATE * - ADDRESS FOR RETURN OF RESOURCE NUMBER * NOTE: DE-ALLOCATION ERRORS ARE IGNORED! * NOTE: RN'S ARE LOCKED LOCALLY, TO PREVENT USE UNTIL COMPLETES. * RNSUB NOP ENTRY/EXIT: RN ALLOCATION/RELEASE RTN. CCB,SEZ ^IF THIS IS A DE-ALLOCATION REQUEST, CLB THEN RESET THE FLAG TO IGNORE ERRORS. STB ERRN SAVE THE ERROR-PROCESSING FLAG. LDA GALCA INITIALIZE FOR GLOBAL ALLOCATION. SEZ IF THE REQUEST IS FOR DE-ALLOCATION, LDA DALCA THEN GET DE-ALLOCATE REQUEST CODE. STA RNCOD CONFIGURE CALL WITH PROPER REQUEST CODE. LDA RNSUB,I GET THE STORAGE ADDRESS FOR THE RN. STA RNAD CONFIGURE THE CALL WITH RN ADDRESS. ISZ RNSUB SET RETURN ADDRESS TO BYPASS RN ADDRESS. * JSB RNRQ GO TO RTE TO REQUEST OR RETURN A DEF *+4 GLOBALLY ALLOCATED/LOCALLY LOCKED RNCOD NOP RESOURCE NUMBER. RNAD NOP DEF RNST DUMMY STATUS INFO STORAGE. ISZ ERRN IF DE-ALLOCATION REQUEST ERROR-- JMP RNSUB,I OR NORMAL COMPLETION: RETURN. * JSB SYSER ALLOCATION ERROR: INFORM THE CALLER. DEF RNERM CATASTROPHIC ERROR--NO RETURN! * GALCA DEF GALC ADDRESS OF ALLOCATION CODE. DALCA DEF DALC ADDRESS OF DE-ALLOCATION CODE. GALC OCT 140021 GLOBAL ALLOCATE/LOCAL LOCK/NO ABORT DALC OCT 140040 RELEASE GLOBAL/NO ABORT ERRN EQU CLSUB ERROR-HANDLING SWITCH(0-IGNORE/1-REPORT) RNST EQU SECOD RN STATUS STORAGE (NOT USED). * SKP * DEFINE TOTAL # OF MONITORS * * [ ADD 1 TO THE VALUE FOR EACH NEW MONITOR TO BE ADDED ] * #MON EQU 8 MNMON ABS -#MON DEFINE NEGATIVE NUMBER OF MONITORS. SPC 1 NAMA DEF NAMES SPC 1 NAMES ASC 3,DLIST DIRECTORY LISTING MONITOR. B1 DEC 1 STREAM 1 ZERO OCT 0 NO ABORT! * CNSLM ASC 3,CNSLM HP3000 CONSOLE MONITOR B2 DEC 2 STREAM 2 OCT 0 NO ABORT! * ASC 3,EXECW SCHEDULE-WITH-WAIT MONITOR. B3 DEC 3 STREAM 3 OCT 100000 ABORT O.K. * ASC 3,PTOPM PROGRAM-TO-PROGRAM MONITOR. B4 DEC 4 STREAM 4 OCT 0 NO ABORT! * " ASC 3,EXECM REMOTE EXEC-REQUEST MONITOR. B5 DEC 5 STREAM 5 OCT 0 NO ABORT! * RFAM ASC 3,RFAM REMOTE FILE ACCESS MONITOR. D6 DEC 6 STREAM 6 OCT 0 NO ABORT! * ASC 3,OPERM REMOTE OPERATOR-REQUEST MONITOR. B7 DEC 7 STREAM 7 OCT 100000 ABORT O.K. * ASC 3,PROGL ABSOLUTE PROGRAM-LOADING MONITOR. D9 DEC 9 STREAM 9 OCT 0 NO ABORT! * * NEW ENTRY: .........ASC 3,NAME? << ADD NEW MONITOR NAME HERE >> * .........DEC 10 << DEFINE STREAM NUMBER HERE >> * .........OCT X00000 << UPLIN ABORT O.K.: X=1; NO ABORT: X=0>> SKP * ROUTINE TO SCHEDULE USER-SPECIFIED SLAVE MONITORS. * MSET NOP ENTRY/EXIT: MONITOR SCHEDULING RTN. CLA,SEZ,RSS IF =1, DISALLOW DEFAULT SCHEDULING. CCA INITIALIZE A FLAG TO ALLOW STA MFLAG DEFAULT SCHEDULING ON FIRST PASS. MLOOP LDA MNMON INITIALIZE A COUNTER STA MCNT FOR THE NO. OF MONITORS TO SCHEDULE. LDB NAMA INITIALIZE THE STB NAMPT PROGRAM NAME-ARRAY POINTER. * JSB PRINT ASK FOR THE DEF MONMS " MONITOR NAME? _" * JSB READ GET THE USER'S RESPONSE. CPB /E ALL DONE? JMP MSET,I YES. RETURN FOR NEXT OPERATION. CPB /D CHECK FOR DEFAULT SCHEDULING. RSS IF IT IS A "/D", THEN SKIP FOR DEFAULT; JMP MNAM ELSE, CONTINUE CHECKING. ISZ MFLAG IF THIS IS NOT A 1RST-PASS DEFAULT JMP NAMER REQUEST--ERROR!--ELSE, JMP MDFLT DEFAULT: GO TO SCHEDULE ALL MONITORS. * MNAM CPA B2 IF RESPONSE WAS ASCII-ALPHA. CHARACTERS, JMP *+2 THEN SKIP TO CHECK FOR A VALID NAME; JMP NAMER ELSE, INFORM THE USER OF HIS ERROR! * LDB NAMPT POINT TO FIRST NAME. MCOMP STB NAMPT SAVE THE POINTER. LDA PARS2 ADDRESS OF USER'S MONITOR NAME. bHFB CMW B3 COMPARE THE THREE WORDS. JMP MFOUN ALL COMPARE--GO TO SCHEDULE. NOP NO COMPARISON. ADB B2 ADD OFFSET FOR NEXT NAME ENTRY. ISZ MCNT HAVE ALL OF THE NAMES BEEN CHECKED? JMP MCOMP NO. GO TO CHECK THE NEXT ONE. * NAMER JSB ERROR INFORM THE USER OF HAVING SUPPLIED AN DEF INVNM " INVALID NAME!" JMP MLOOP GO BACK TO TRY AGAIN. * SKP MFOUN CLA,CLE CLEAR 'MFLAG' IN ORDER TO STA MFLAG DIS-ALLOW DEFAULT SCHEDULING. * JSB MSKED GO TO SCHEDULE THE MONITOR. JMP MLOOP GO TO ASK FOR THE NEXT NAME. * MDFLT CLE SPECIFY MONITOR SCHEDULING. JSB MSKED GO TO SCHEDULE A MONITOR. LDA NAMPT ADVANCE THE ADA B5 NAME-ARRAY POINTER TO POINT STA NAMPT TO THE NEXT MONITOR'S NAME. ISZ MCNT HAVE ALL MONITORS BEEN SCHEDULED? JMP MDFLT NO. GO TO SCHEDULE THE NEXT ONE. JMP MSET,I YES. RETURN FOR THE NEXT OPERATION. * CNSDF DEF CNSLM RFMDF DEF RFAM SCHNW OCT 100012 STMPT NOP NAMPT NOP MCNT NOP MFLAG NOP SPC 1 * DO NOT CHANGE ORDER OF 'MCLAS' & 'IDAD' * SPC 1 MCLAS NOP IDAD NOP * QUES ASC 2,MON? ASTAT ASC 2,STAT SMES DEF *+2 DEF D10 ASC 4, ERROR: ERCOD ASC 3, : SNAM ASC 3,XXXXX MONMS DEF *+2 DEF D8 ASC 8, MONITOR NAME? _ INVNM DEF *+2 DEF B7 ASC 7, INVALID NAME! * SKP H* SUBROUTINE TO SCHEDULE A MONITOR & INITIALIZE IT'S LIST-HEADER ENTRY. * MSKED NOP ENTRY/EXIT: MONITOR SCHEDULER. SEZ MONITOR OR OTHER? JMP SCHED GO TO SCHEDULE ANOTHER PROCESSOR. * LDA NAMPT GET THE NAME-ARRAY POINTER. CPA CNSDF ABOUT TO SCHEDULE ? RSS YES. CHECK FURTHER. JMP GETID NO. GO AHEAD AND SCHEDULE LDB #LU3K IS HP3000 CONNECTED? SZB,RSS YES. GO AHEAD AND SCHEDULE. JMP MSKED,I NO. IGNORE SCHEDULING OF * GETID JSB PGMAD GO TO GET MONITOR'S ID SEGMENT ADDRESS. DEF *+2 DEF NAMPT,I ADDRESS OF MONITOR'S NAME. SZA,RSS IS THE MONITOR PRESENT? JMP MON? NO. INFORM THE USER. STA IDAD YES. SAVE I.D. SEGMENT ADDRESS. LDA B GET MONITOR'S STATUS INTO . AND B17 ISOLATE THE MONITOR'S STATUS. SZA IS IT DORMANT? JMP STERR NO. INFORM USER OF ERROR. * CLE GET A JSB CLSUB CLASS NUMBER DEF MCLAS FOR THE MONITOR. LDB NAMPT GET THE NAME-ARRAY POINTER. ADB B3 ADVANCE TO THE STREAM-LIST ENTRY. LDA B,I GET STREAM NUMBER ADA B2 COMPUTE ADA #LDEF LIST HEADER LDA 0,I ADDRESS. INA POINT TO CLASS NO IN HEADER STA STMPT SAVE FOR 'RES' INITIALIZATION. INB ADVANCE TO THE ABORT-FLAG ENTRY. LDA IDAD GET THE I.D. SEGMENT ADDRESS. IOR B,I INCLUDE THE ABORT-FLAG BIT(#15)--IF ANY. STA IDAD RESTORE THE FLAGGED I.D. SEGMENT ADDRESS * LDA NAMPT GET THE NAME-ARRAY POINTER. CPA RFMDF IF 'RFAM' IS BEING SCHEDULED, THEN JSB FILIN GET THE FILE COUNT FOR IT. * DLD MCLAS GET CLASS NO. & ID SEG. ADDRESS. DST STMPT,I STORE INTO STREAM LIST-HEADER IN 'RES'. SKP * SCHED JSB EXEC GO TO RTE DEF *+4 TO SCHEDULE DEF SCHNW THE MONITOR DEF NAMPT,I WITHOUT WAIT. DEF MCLAS SCHEDULING PARAMETER #1. JMP STCOD * ERROR--REPORT TO USER * SZA WAS IT CORRECTLY SCHEDULED? JMP STERR NO--INCORRECT STATUS ERROR. * JMP MSKED,I RETURN TO THE CALLER (=STATUS). * MON? DLD QUES GET THE MONITOR-MISSING INDICATOR. JMP STCOD SAVE FOR THE ERROR MESSAGE. STERR DLD ASTAT GET THE STATUS-PROBLEM INDICATOR. STCOD DST ERCOD SAVE THE ERROR CODE. * DLD NAMPT,I GET THE NAME DST SNAM OF THE MONITOR, LDB NAMPT AND SAVE IT ADB B2 FOR USE IN LDA B,I THE ERROR-REPORT STA SNAM+2 MESSAGE. * JSB ERROR GO TO PRINT THE DEF SMES ERROR MESSAGE. JMP MSKED,I RETURN TO THE CALLER. SPC 3 * SCHEDULE , THE TRANSACTION MONITOR & CLEANUP PROGRAM, * TO RUN EVERY FIVE SECONDS. * SUPLN NOP JSB EXEC GO TO THE DEF *+6 RTE EXECUTIVE DEF SCHTM TO TIME-SCHEDULE DEF UPLIN DEF B2 TO BE RUN DEF B5 EVERY FIVE SECONDS; DEF DM2 TO BEGIN IN TWO SECONDS. RSS IF A SYSTEM ERROR IS DETECTED, SKIP; JMP SUPLN,I ELSE, RETURN TO THE CALLER. * JSB SYSER INFORM THE USER OF A CATASTROPHIC ERROR: DEF UPMES 'UPLIN' WAS NOT SCHEDULED. [NO RETURN] * SCHTM OCT 100014 UPMES DEF *+2 DEF D12 ASC 2, ** UPLIN ASC 3,UPLIN ASC 7,NOT SCHEDULED! SKP * * SCHEDULE QUEUEING PROCESSORS: ,,& . * : ,,& . * SCHDQ NOP ENTRY/EXIT LDB NAMAD ADDR OF DS/1000 MODULES LDA RMSA 1000 ENABLED FLAG SZA,RSS DS/1000 ENABLED? ? ADB D9 NO, POINT TO MODULES FOR 3000 STB NAMPT SAVE RUNNING POINTER MPY DM3 A = -3 IF 1000 CONNECTED, ELSE 0 LDB RM3K IF 3000 CONNECTED, SZB ADD ADA DM2 -2. STA NCNTR NCNTR = - NO. OF MONITORS TO SCHEDULE. CLA SET THE CLASS PARAMETER =0 (DUMMY), STA MCLAS SINCE IT'S ALREADY STORED IN . * SCHDL CCE SPECIFY OTHER-PROCESSOR SCHEDULING. JSB MSKED GO TO SCHEDULE THE PROCESSOR. SZA CATASTROPHIC ERROR? JMP ABORT YES ** ABORT ** LDA NAMPT GET THE NAME-ARRAY POINTER. ADA B3 ADD AN OFFSET FOR NEXT NAME ENTRY. STA NAMPT UPDATE THE ARRAY POINTER. ISZ NCNTR ALL QUEUEING PROCESSORS BEEN SCHEDULED? JMP SCHDL NO. GO TO SCHEDULE THE NEXT ONE. JMP SCHDQ,I YES. RETURN TO THE CALLER. * NCNTR EQU SUPLN NAMAD DEF *+1 POINTER TO FIRST PROGRAM'S NAME. ASC 3,GRPM GENERAL PRE-PROCESSING MONITOR. ASC 3,RTRY WRITE RETRY PROCESSOR. ASC 3,QCLM ERROR LOG PROCESSOR. ASC 3,RQCNV HP3000 REQUEST CONVERTER ASC 3,RPCNV HP3000 REPLY CONVERTER * SKP * SUBROUTINE TO PRINT MESSAGES ON INTERACTIVE TERMINALS--ONLY. * * CALLING SEQUENCES: * * JSB PRINT....PRINT:" /LSTEN:" JSB PRNTX....PRINT:"" * DEF MESSAGE DEF MESSAGE * PRNTX NOP ENTRY/EXIT: PRINT W/O HEADER LDA PRNTX GET THE RETURN ADDRESS. STA PRINT SAVE FOR THE RETURN. LDA A,I GET THE MESSAGE ADDRESS, STA OLDAD AND SAVE FOR ERROR-TRANSFER ROUTINE. DLD A,I GET THE MESSAGE SPECIFICATIONS, DST PRNT1 AND CONFIGURE THE CALLING SEQUENCE. JMP PRNT0 GO TO PRINT THE MESSAGE W/O HEADER. * PRINT NOP NORMAL ENTRY/EXIT DLD NORMA RE-ESTABLISH THE DST PRNT1 NORMAL MESSAGE SPE[TCIFICATIONS. LDA MSGAD INITIALIZE THE STA BUFPT MESSAGE BUFFER POINTER. LDB PRINT GET ADDRESS OF MESSAGE INFORMATION. LDB B,I TRACK DOWN RBL,CLE,SLB,ERB A DIRECT JMP *-2 ADDRESS. LDA RDER IF THE ERROR-TRANSFER ROUTINE IS SZA,RSS IN CONTROL, BYPASS 'OLDAD' UPDATING. STB OLDAD SAVE IT FOR THE ERROR-TRANSFER ROUTINE. DLD B,I GET BUFFER ADDRESS AND LENGTH. STA MSPNT SAVE FOR SOURCE POINTER. LDB B,I GET THE MESSAGE LENGTH. STB PRNTL INCLUSION OF THE HEADER. CMB,INB IF THE MESSAGE LENGTH ADB D20 EXCEEDS THE MAXIMUM SSB BUFFER SIZE, THEN JMP PRNTA IGNORE THE REQUEST; ELSE, DLD MSPNT TRANSFER THE MESSAGE MVW PRNTL TO THE PRINT BUFFER. LDA PRNTL GET THE MESSAGE LENGTH. ADA B5 ADD IN THE HEADER SIZE. STA PRNTL SAVE TOTAL MESSAGE LENGTH. * PRNT0 LDA TYPEQ GET TTY FLAG LDB ERFLG GET ERROR FLAG SZB,RSS ERROR OR SZA,RSS OR INTERACTIVE RSS YES...PRINT MESSAGE JMP PRNTA NO ERROR AND NOT INTERACTIVE LDA RLU GET INTERACTIVE LU SZB ERROR? LDA ERLU YES...ERROR LU STA PRTLU SAVE AS PRINT LU * SKP JSB REIO PRINT MESSAGE DEF *+5 DEF B2 DEF PRTLU PRINT LU PRNT1 DEF HEDMS MESSAGE ADDRESS. DEF PRNTL MESSAGE LENGTH. PRNTA ISZ PRINT POINT TO RETURN ADDRESS JMP PRINT,I RETURN SPC 1 ERLU NOP ERROR LOGICAL UNIT NO. PRTLU NOP PRNTL NOP OLDAD NOP PREVIOUS MESSAGE ADDRESS. BUFPT NOP NORMA DEF HEDMS DEF PRNTL MSPNT NOP MSGAD DEF MSGBF HEDMS OCT 6412 CARRIAGE-RETURN/LINEFEED. ASC 4, /LSTEN: MSGBF BSS 20 * SPC 2 * ROUTINE TO DECIDE WHICH TYPE OF INPUT DEVICE * EITHERi FILE OR LU * IF LU, A REG WILL CONTAIN LU TYPE, B REG = READ LU, E=0 * CALLING SEQUENCE * JSB CHCKN * * * CHCKN NOP LDB RLU GET READ-DEVICE LU. LDA TYPEQ GET EQUIPMENT TYPE CODE. CLE,SZB,RSS LU OR FILE ISZ CHCKN FILE JMP CHCKN,I AND RETURN * SPC 2 * SUBROUTINE TO PRINT SYSTEM ERROR MESSAGES AND * ABORT * CALLING SEQUENCE * JSB SYSER * DEF ERR MESSAGE * SYSER NOP LDA SYSER,I GET MESSAGE SPECIFICATION ADDRESS. STA SYSAD CONFIGURE CALL TO PRINT ROUTINE. ISZ ERFLG SET ERROR FLAG. JSB PRINT SYSAD NOP JMP ABORT AFTER MESSAGE...ABORT * SKP * SUBROUTINE TO READ FROM A SELECTED INPUT DEVICE * WILL PARSE THE INPUT AND PLACE RESULT IN A BUFFER * CALLED PARSB. IF FIRST PARAMETER = '/A' WILL GO TO 'ABORT'. * CALLING SEQUENCE * JSB READ * UPON RETURN A REG=PARSB, B REG=PARSB+1 * READ NOP LDA DM4 ALLOW THREE STA RETRY ERROR-RETRIES. READA LDA RLU GET READ LU LDB RDER IS THIS AN ERROR READ? SZB LDA ERLU YES...READ FROM ERROR DEVICE. SZA,RSS IF THE SOURCE IS FROM A FILE, JMP READB THEN GO TO FILE READ ROUTINE. STA PRTLU SAVE READ LU JSB REIO ISSUE THE READ DEF *+5 DEF B1 DEF PRTLU DINBF DEF INBUF DEF INBFS SZB EOF HIT? JMP READC NO REDER JSB ERXFR INDICATE ERROR, AND ALLOW RE-TRY. DEF READM JMP READA TRY AGAIN SPC 1 READB JSB READF READ FROM A FILE DEF *+6 DEF INDCB DEF TEMP1 DEF INBUF DEF INBFS DEF PRNTL LDB PRNTL GET LENGTH SSA,RSS FILE ERROR? SZB,RSS OR ZERO-LENGTH RECORD? JMP REDER YES--PROCESS THE ERROR. * READC CLE,ELB CONVERT TO BYTE LENGTH1 STB PRNTL SAVE LENGTH JSB PARSE GO PARSE INPUT DEF *+4 DEF INBUF DEF PRNTL DEF PARSB CLA,CLE CLEAR OUT READ-ERROR FLAG STA RDER DLD PARSB LOAD A AND B REG CPB /A IF RECORD'S FIRST 2 CHARS. =/A JMP *+2 SKIP TO CHECK NEXT TWO. JMP READ,I ELSE, RETURN. LDB PARSB+2 GET NEXT TWO CHARACTERS. CPB BLNKS IF THEY ARE BLANKS, JMP ABORT THEN PROCESS THE ABORT REQUEST! LDB PARSB+1 ELSE, RESTORE , JMP READ,I AND RETURN. * RDER NOP SPC 2 * ROUTINE TO PRINT ERROR MESSAGE. * * CALLING SEQUENCE: * * JSB ERROR * DEF * * WILL SET ERROR FLAG FOR RETRY * ERROR NOP LDA ERROR,I GET MESSAGE SPECIFICATION ADDRESS. STA ERRAD CONFIGURE CALL TO PRINT ROUTINE. ISZ ERFLG FORCE MESSAGE TO ERROR DEVICE. JSB PRINT PRINT THE ERROR MESSAGE. ERRAD NOP CLA CLEAR THE STA ERFLG ERROR-DEVICE FLAG. ISZ ERROR BYPASS THE MESSAGE-SPECIFICATION. JMP ERROR,I AND RETURN SPC 1 ERFLG NOP SPC 2 * PRINT THE ERROR MESSAGE AND REPEAT THE QUESTION ON THE (ERROR LU) DEVICE. * * CALLING SEQUENCE: * * JSB ERXFR * DEF * ERXFR NOP ENTRY/EXIT: ERROR TRANSFER ROUTINE ISZ RDER SET READ ERROR FLAG. ISZ RETRY ALL RETRIES BEEN EXHAUSTED? JMP *+2 NO. TRY AGAIN. JMP ABORT YES--ABORT THE PROCESS! * LDA ERXFR,I GET MESSAGE ADDRESS. STA ERAD1 ISZ ERFLG FORCE THE USE OF THE (ERROR LU). JSB PRINT GO TO PRINT ERAD1 NOP * JSB PRINT GO TO REPEAT THE QUESTION DEF OLDAD,I ON THE (ERROR LU) DEVICE. CLA CLEAR OUT STA ERFLG THE ERROR FLAG, ISZ ERXFR SET RETURN ADDRESS JMP ERXFR,I AND RETURN. * SKP * HERE ON ANY ABORT CONDITIONS * WILL CLEAR ALL LU'S, FLAGS, * DE-ALLOCATE CLASS NUMBERS, * AND TERMINATE ALL MONITORS. * CALLING SEQUENCE * JMP ABORT * ABORT LDA ONTWO OPTION 1 OR 2 SZA JMP ABRT4 OPTION 2 * * RESET FLAGS TO ZERO SO LSTEN IS REUSABLE: STA LU3K# HP 3000 LU STA RLU READ LU CPA #FWAM IF SAM HAS NOT BEEN ALLOCATED, JMP ABRT4 THEN GO TO COMPLETION. * LDA MNMON GET NEGATIVE NUMBER OF MONITORS. STA MCNT SAVE AS A LOOP COUNTER. LDB NAMA GET THE ADDRESS OF THE NAME-ARRAY. ABMON STB NAMPT SAVE AS A POINTER. ADB B3 POINT TO THE STREAM NUMBER LDA 1,I GET STREAM NUMBER ADA B2 ADA #LDEF COMPUTE ADDR OF LIST HEADER ADDR LDA 0,I GET LIST HEADER ADDR INA POINT TO MONITOR CLASS NUMBER LDA A,I GET THE MONITOR CLASS NO.--IF ANY. SZA,RSS IS THIS MONITOR ACTIVE? JMP ABNEX NO. GO TO TRY THE NEXT MONITOR. JSB KILLM GO TO TERMINATE THE MONITOR. * ABNEX LDB NAMPT GET THE NAME-ARRAY POINTER. ADB B5 ADVANCE THE POINTER TO THE NEXT ENTRY. * ISZ MCNT HAVE ALL MONITORS BEEN ABORTED? JMP ABMON NO. GO BACK TO KILL THE NEXT ONE. * * LDA NAMAD GET POINTER TO 'GRPM' NAME ARRAY. STA NAMPT SET POINTER FOR TERMINATION. LDA GRPM# GET 'GRPM' CLASS NUMBER. SZA JSB KILLM GO TO TERMINATE 'GRPM'. * LDA NAMPT ADA B3 POINT TO "RTRY" NAME ARRAY STA NAMPT LDA RTRY# GET "RTRY" CLASS NUMBER SZA JSB KILLM GO TO TERMINATE "RTRY" * LDA NAMPT GET NAME ARRAY POINTER. ADA B3 POINT TO 'QCLM' NAME ARRAY. STA NAMPT SET POINTER. LDA QCLM# GET 'QCLM' CLASS NUMBER. SZA JSB KILLM GO TO TERMINATE 'QCLM'. * LDA NAMPT GET NAME ARRAY POINTER ADA B3 POINT TO "RQCNV" NAME ARRAY STA NAMPT SET POINTER LDA RQCV# GET "RQCNV" CLASS NUMBER SZA IF OK, JSB KILLM GO TO TERMINATE "RQCNV" * LDA NAMPT GET NAME ARRAY POINTER ADA B3 POINT TO "RPCNV" NAME ARRAY STA NAMPT SET POINTER LDA RPCV# GET "RPCNV" CLASS NUMBER SZA IF OK, JSB KILLM GO TO TERMINATE "RPCNV" * CCE GO TO RELEASE THE JSB RNSUB RESOURCE NUMBER DEF TBRN# FOR TABLE-ACCESS CONTROL. CCE GO TO RELEASE THE JSB RNSUB RESOURCE NUMBER DEF QRN# FOR SYSTEM-QUIESCENCE CONTROL. * LDA #LU3K IF NO HP3000 SZA,RSS IN SYSTEM, JMP ABRT3 SKIP NEXT BLOCK * CCE GO RELEASE THE JSB RNSUB RESOURCE NUMBER DEF QZRN# FOR QUEZ "LISTEN MODE" * CCE GO RELEASE THE JSB CLSUB CLASS NUMBER DEF QXCL# FOR QUEX. * ABRT3 JSB #RSAX GO TO THE SYSTEM-RESOURCE DEF *+3 CONTROL-ROUTINE, IN ORDER TO DEF B1 RETURN SYSTEM AVAILABLE MEMORY, DEF #FWAM WHICH WAS PREVIOUSLY ALLOCATED. * JSB CLEAR GO TO CLEAR SYSTEM DATA AREA IN . * ABRT4 JSB PRINT PRINT ABORT MESSAGE DEF ABRTM "LSTEN ABORTED" DLD ABPRM DST ENMSG JMP TERM * SKP KILLM NOP ENTRY/EXIT: TERMINATION ROUTINE STA MCLAS SAVE THE CLASS NUMBER JSB EXEC GO TO RTE DEF *+4 TO REQUEST DEF KILCD TERMINATION DEF NAMPT,I OF THE SPECIFIED DEF B3 PROGRAM. NOP * IGNORE ERRORS * * CCE RELEASE JSB CLSUB THE PROGRAM'S DEF MCLAS CLASS NUMBER. * JMP KILLM,I RETURN TO THE CALLER. SPC 1 KILCD OCT 100006 ABPRM OCT 1000=00 ASC 1,ER SPC 3 * ROUTINE TO CLEAR 'LSTEN'-INITIALIZED ENTRIES IN . SPC 1 CLEAR NOP ENTRY/EXIT LDA #NCLR INITIALIZE A COUNTER FOR THE STA TEMP SIZE OF THE AREA TO BE CLEARED. LDB #SCLR GET A POINTER TO THE START OF THE AREA. CLA CLEAR CLOOP STA 1,I THE INB 'LSTEN'-INITIALIZED ISZ TEMP STORAGE LOCATIONS JMP CLOOP IN 'RES'. * JMP CLEAR,I RETURN * SKP * FERMG DEF *+2 DEF D6 ASC 6, FILE ERROR * RNERM DEF *+2 DEF B5 ASC 5, RN ERROR * LUERM DEF *+2 DEF B5 ASC 5, LU ERROR * TRFM DEF *+2 DEF D8 ASC 8, TR FILE ERROR * FILMG DEF *+2 DEF D10 ASC 10, INPUT # OF FILES: _ * READM DEF *+2 DEF D6 ASC 6, READ ERROR * ABRTM DEF *+2 DEF D8 ASC 8, LSTEN ABORTED! * CLSER DEF *+2 DEF D9 ASC 9, CLASS I/O ERROR * ENDMG DEF *+2 DEF B5 ENMSG ASC 5, END LSTEN * UPLUM DEF *+2 DEF B7 ASC 7, ENABLE LU# ?_ * OPMES DEF *+2 DEF B7 ASC 7, OPERATION? _ * NOSZR DEF *+2 DEF D9 ASC 9, NODE SPEC. ERROR! * SKP * EXPMS DEF *+2 DEF D102 OCT 6412 CARRIAGE-RETURN/LINE-FEED ASC 9, ??: LIST COMMANDS OCT 6412 ASC 5, /A: ABORT! OCT 6412 ASC 7, /E: TERMINATE OCT 6412 ASC 10, /L: RE-ENABLE LINE OCT 6412 ASC 8, /N: DISPLAY NRV OCT 6412 ASC 9, /Q: QUIESCE NODE OCT 6412 ASC 12, /S: SCHEDULE MONITOR(S) OCT 6412 ASC 9, /T: ADJUST TIMING OCT 6412 OCT 6412 ASC 12, QUIESCENT SYSTEM ONLY: OCT 6412 ASC 9, /R: RE-START NODE OCT 6412 * SPC 3 A EQU 0 B EQU 1 XEQT EQU 1717B BGLWA EQU 1777B INBFS EQU D20 INBUF BSS 20 PARSB BSS 34 INDCB BSS 144 <:6 SPC 1 BSS 0 << SIZE OF 'LSTEN' >> SPC 1 END LSTEN k< ;7s 91740-18002 1840 S C0122 &UPLIN              H0101 ASMB,L,R,C HED UPLIN: 91740-16002 REV 1840 (C) HEWLETT-PACKARD CO. 1978 NAM UPLIN,17,3 91740-16002 REV 1840 780726 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 4 **************************************************************** * * UPLIN * * SOURCE PART # 91740-18002 * * REL PART # 91740-16002 * * WRITTEN BY: CHUCK WHELAN * * DATE WRITTEN DEC 1976 * * MODIFIED FOR HP3000 BY DAVE TRIBBY, MARCH 1977 * *************************************************************** SPC 3 * * * EXTERNAL REFERENCES EXT EXEC,$LIBR,$LIBX EXT MESSS,$OPSY EXT #RSAX,#RPCV EXT RNRQ,#BUSY,#QRN,#LDEF EXT #GRPM,#LU3K,#QXCL,#TST SPC 3 * UPLIN FOR DS/1000 UPLIN IS SCHEDULED EVERY 5 SECONDS TO PERFORM * THE FOLLOWING FUNCTIONS: * 1. CHECKS/WAITS FOR SYSTEM QUIESCENCE. PRINTS OPERATOR MESSAGE * WHEN QUIESCENCE IS ACHIEVED. * 2. UPDATES SLAVE "TCB" TIMEOUT VALUES, AND IF A TRANSACTION HAS * TIMED OUT, THE TCB IS PURGED, AND IF THE MONITOR ABORT * FLAG IS SET, THE MONITOR IS ABORTED. * 3. AFTER PROCESSING EACH SLAVE TCB LIST, UPLIN CHECKS TO SEE IF * THE CORRESPONDING MONITOR IS DORMANT, AND IF SO, RESCHEDULES IT. * 4. UPDATES MASTER TCB TIMEOUT VALUES, AND IF A MASTER TCB TIMES-OUT, * IT CHECKS THE PROGRAM STATUS. IF DORMANT OR THE "BAD * CONTENTS" FLAG IN THE TCB IS SET, THE MASTER CLASS NUMBER * AND THE TCB ARE CLEARED. IF IN A "WAIT" STATE, IT WRITES * A NULL REQUEST TO THE MASTER REQUESTERS CLASS. * 5. SCANS THE HP3000 PROCESS NUMBER LIST AND SENDS A "KILL" * REQUEST FOR ABANDONED PROCESS NUMBERS. * 6. RESCHEDULES "GRPM","RTRY", OR "QCLM" IF THEY ARE DORMANT. * 7. CHECKS FOR ANY DOWNED COMMUNICATIONS EQTS, AND DOES "ENABLE * LISTEN" REQUESTS TO ANY FOUND. * * * EQTA EQU 1650B FWA OF EQUIPMENT TABLE DRT EQU 1652B FWA OF DEVICE REFERENCE TABLE LUMAX EQU 1653B NO OF LOGICAL UNITS (IN DRT) SKP UPLIN EQU * * * CHECK FOR SYSTEM QUIESCENCE * LDA GLCW GET GLOBAL RN LOCK/CLEAR COMMAND RAL,ARS SET THE NO-WAIT BIT QRNWT STA RNCW SAVE CONFIGURED CONTROL WORD * JSB RNRQ GO TO RTE TO REQUEST DEF *+4 RESOURCE NUMBER STATUS, DEF RNCW OR TO AWAIT CLEARING OF THE RN. DEF #QRN ADDR OF QUIESCENT RN DEF TEMP RETURN STATUS JMP SLVTS IGNORE ERRORS * LDA RNCW IF PROGRAM HAS BEEN AWAITING CPA GLCW THE CLEARING OF #QRN, THEN JMP SLVTS BYPASS THE MESSAGE CODE. * LDA TEMP QRN STATUS LDB #BUSY ACTIVE TCB COUNT CPA K7 IF QRN WAS LOCKED GLOBALLY, SZB AND NO ACTIVE TCB'S EXIST, SKIP JMP SLVTS ELSE BYPASS QUIESCENT CODE. * JSB EXEC INFORM DEF *+5 THE DEF K2 OPERATOR DEF K1 THAT THE DEF QMES SYSTEM DEF K10 IS QUIESCENT. * LDA GLCW RETURN TO IMMOBILIZE UPLIN JMP QRNWT SKP * * THIS SECTION PROCESSES SLAVE TRANSACTIONS & MONITORS * SLVTS LDA $OPSY RAR,SLA IS THIS AN RTE-III OR RTE-IV? RSSI RSS YES JMP SLVT2 NO LDB RSSI GET "RSS" STB MODI1 MODIFY TO DO CROSS-MAP STORE STB MODI2 MODIFY TO DO CROSS-MAP LOAD * SLVT2 LDA K2 ADA #LDEF STA LPNT PNTR TO SLAVE LIST HEADER ADDRS IN RES CLA STA STREM SET STREAM # CKLST LDB LPNT,I  GET ADDRESS OF HEADER INB STB MCLSA SAVE ADDR OF MONITOR CLASS # INB STB MSEGA ADDR OF MONITOR'S ID SEGMENT ADDR LDB 1,I GET ID SEG ADDR SZB,RSS DOES MONITOR EXIST? JMP NXLST NO LDB LPNT,I NXTCB STB LSTAD SAVE ADDR OF ADDR OF NEXT TCB * * ENTER HERE TO CHECK EACH SLAVE TCB * CKTCB LDB LSTAD PICK UP ADDR OF ADDR OF TCB JSB LODWD (CROSS)LOAD ADDR OF TCB SZA,RSS IS IT THERE? JMP CKMON NO, END OF THIS LIST JSB TSTCB BUMP TIMER IN TCB JMP NXTCB DIDN'T TIMEOUT, CHECK NEXT TCB SKP * * SLAVE TRANSACTION HAS TIMED OUT * ADB K2 COMPUTE ADDR OF SEQ # JSB LODWD (CROSS)LOAD 1ST TIME TAG WORD STA SEQ# * JSB #RSAX DELETE SLAVE TCB DEF *+4 DEF K7 DEF SEQ# SLAVE SEQ # DEF STREM STREAM * SSB SKIP IF ENTRY DELETED JMP NXLST WHOOPS! IGNORE THIS LIST * * CHECK FOR HP3000 TST CLEANUP LDA #LU3K IF NO REMOTE SZA,RSS HP3000, JMP CONT SKIP THIS SECTION LDX #TST+1 X-REG = NUMBER OF TST ENTRIES LDB #TST B-REG = POINTER INTO TST LOOP JSB LODWD (CROSS)LOAD 1ST TST WORD STB WRD1 INB SZA,RSS IF ZERO, JMP BUMP LOOK AT NEXT ENTRY. JSB LODWD (CROSS)LOAD 2ND TST WORD CPA SEQ# SEQUENCE NUMBER? JMP FOUND YES--DONE LOOKING. BUMP ADB K13 POINT TO NEXT TST ENTRY DSX DECREMENT COUNTER JMP LOOP IF NOT DONE, CHECK NEXT ENTRY JMP CONT LOOP FELL THROUGH--DONE * * ACTIVITY WAS INITIATED FROM HP3000 FOUND INB GET TST WORD 3 JSB LODWD (HOLDING CLASS) CCE,SZA,RSS ZERO? JMP RPC YES--PROCESS "RPCNV" RAL,ERA NO--SET BIT 15 TO STA PRAM1 DEALLOCATE CLASS JSB DEFLU , AND FLUSH BUFFER. CLA (CROSS) STORE ZERO LDB WRD1 IN TST WORD 1 JSB STRWD FOR RELEASE JMP CONT CONTINUE * RPC JSB EXEC TRY TO SCHEDULE RPCNV DEF *+4 WITH "REJECT" PASSWORD DEF K10N IN CASE IT IS WAITING DEF RPCNM TO BE RESCHEDULED FOR DEF SEQ# NEXT CONTINUATION REPLY. NOP * SZA,RSS WAS RPCNV DORMANT? JMP CONT YES, CONTINUE (RPCNV WILL RELEASE TST) * CLA NO, RPCNV NEEDS TO SEND A STA TEMP REJECT REPLY TO THE WAITING 3000. * JSB EXEC CLASS WRITE A 2-WORD DUMMY DEF *+8 REPLY TO RPCNV DEF K20N DEF ZBIT WORD 1 = 0 DEF DUMMY WORD2 = SEQ# DEF K0 (RPCNV WILL RELEASE TST ENTRY) DEF TEMP DEF K2 DEF #RPCV NOP * CONT EQU * CONTINUE * * CHECK MONITOR ABORT FLAG LDA MSEGA,I SSA,RSS SKIP IF SET JMP CKTCB NOT SET, DON'T ABORT IT, CHECK NEXT TCB * * ABORT THE MONITOR BY GENERATING AN "OF,(NAME),1" MESSAGE * RAL,CLE,ERA ISOLATE ID SEG ADDRESS ADA K12 ADDR OF NAME LDB FLDAD ADDRESS OF NAME FIELD MVW K2 MOVE 1ST 4 CHARS LDA 0,I GET 5TH AND B1774 CLEAR RHW IOR COMMA INCLUDE A COMMA STA MSNAM+2 * JSB MESSS CALL RTE MESSAGE PROCESSOR DEF *+3 DEF OFMES "OFF,XXXXX,1" DEF K12 SZA,RSS IF MSG. RETURNED, SKIP TO RESTORE CMD. JMP UPMON NOW GO & RESCHEDULE IT * DLD "OFF" DST OFMES RESTORE "OFF," LDA "1@" STA MSNAM+3 RESTORE ABORT OPTION PARAMETER (1). JMP UPMON GO TO RE-SCHEDULE THE MONITOR. * "OFF" ASC 2,OFF, "1@" ASC 1,1 * * THIS CODE CHECKS MONITOR STATUS TO SEE IF IT HAS ABORTED CKMON LDA MSEGA,I MONITORS ID SEGMENT ADDRESS RAL,CLE,ERA CLEABR OFF SIGN BIT SZA,RSS ADDR SPECIFIED? JMP NXLST NO ADA K12 POINT TO NAME LDB FLDAD MVW K3 MOVE NAME LDA 0,I GET STATUS BITS AND K15 ISOLATE STATUS BITS SZA SKIP IF DORMANT JMP NXLST ELSE MONITOR IS STILL GOING * * RESCHEDULE MONITOR UPMON LDA MCLSA,I GET CLASS NUMBER OF MONITOR RAL,CLE,ERA CLEAR SIGN BIT STA PRAM1 * JSB EXEC SCHEDULE MONITOR, PASS CLASS NUMBER DEF *+4 DEF K10N FLDAD DEF MSNAM ADDR OF MONITOR NAME DEF PRAM1 NOP * * DONE WITH THIS SLAVE LIST, START ON NEXT NXLST ISZ LPNT POINT TO NEXT LIST HEADER ADDRESS ISZ STREM BUMP STREAM NUMBER LDA STREM CPA K11 DONE? RSS YES JMP CKLST PROCESS NEXT LIST * * DONE WITH SLAVE MONITOR/TRANSACTION PROCESSING SKP * * PROCESS MASTER TCBS * LDB #LDEF ADDR OF LIST HEADER ADDRS INB LDB 1,I GET ADDR OF MASTER HEADER CKMST STB LSTAD SAVE ADDR OF NEXT TCB'S ADDR CKMS2 LDB LSTAD PICK-UP ADDR OF ADDR OF NEXT TCB JSB LODWD (CROSS)LOAD ADDR OF NEXT TCB SZA,RSS JMP PNLST NO MORE MASTER TCBS TO PROCESS * JSB TSTCB UPDATE THIS TCB'S TIME JMP CKMST DIDN'T TIME-OUT, DO NEXT TCB * * MASTER TCB HAS TIMED OUT * ADB K3 POINT TO 4TH WORD OF MASTER TCB JSB LODWD (CROSS)LOAD CLASS NUMBER IOR BIT15 CLASS # WITH "NO WAIT" BIT SET STA PRAM1 * INB POINT TO 5TH WORD OF MASTER TCB JSB LODWD (CROSS)LOAD ID SEGMENT ADDRESS RAL,CLE,SLA,ERA CLEAR OFF SIGN BIT JMP CREPT "BAD CONTENTS", CLR CLASS & TCB ADA K15 POINT TO STATUS LDA 0,I AND K15 ISOLATE STATUS SZA,RSS DORMANT? JMP CREPT YES, CLEAR IT ALL CPA K3 IS IT "WAIT" STATE&? RSS YES JMP NXMST NO * * WRITE A NULL REQUEST INTO THE MASTER REQUESTERS CLASS JSB EXEC DEF *+8 DEF K20N CLASS WRITE/READ, NO ABORT DEF ZBIT DEF DUMMY DEF K0 ZERO DATA LENGTH DEF DUMMY DEF K0 ZERO REQUEST LENGTH DEF PRAM1 CLASS NUMBER * K0 NOP * NXMST LDB XACTA GET ADDR OF NEXT TCB ADDR JMP CKMST GO CHECK FOR NEXT TCB * * MASTER REQUESTER IS DORMANT, CLEAR CLASS AND TCB * CREPT JSB DEFLU CLEAR CLASS LDB XACTA CLEAR MASTER REQUESTER'S TCB ADB K2 POINT TO SEQ # IN TCB JSB LODWD GET IT STA SEQ# JSB #RSAX CALL #RSAX TO PURGE MASTER TCB DEF *+3 DEF K6 DEF SEQ# SEQUENCE NUMBER OF MASTER TCB * SSB,RSS SKIP IF TCB NOT DELETED, IGNORE REST JMP CKMS2 CONTINUE WITH NEXT TCB ON CHAIN * SKP * * PROCESS THE HP3000 PROCESS NUMBER LIST. * PNLST CCB GET ADDR OF PNL HEADER. ADB #LDEF LDB 1,I * CKPNL JSB LODWD (CROSS)LOAD ADDR OF NEXT PNL ENTRY. SZA,RSS JMP RSCHD DONE WITH PNL ENTRIES. * LDB 0 STB XACTA SAVE ADDRESS OF NEXT TABLE ENTRY. ADB K2 POINT TO 3RD WORD OF PNL ENTRY. JSB LODWD (CROSS)LOAD PROCESS # STA KLBUF+4 SAVE FOR POSSIBLE "KILL". * ADB K2 POINT TO 5TH WORD OF PNL ENTRY. JSB LODWD (CROSS)LOAD ID SEG ADDR. SSA JMP KILL SEND "KILL" IF IDSEG IS BAD. ADA K15 POINT TO STATUS. LDA 0,I AND K15 ISOLATE STATUS. SZA,RSS DORMANT? JMP KILL YES. SEND "KILL". LDB XACTA NO. GO ON TO NEXT ENTRY. JMP CKPNL * * SEND A "KILL" REQUEST TO THE 3000 DIRECTLY THROUGH QUEX. * SINCE THE "FROM PROCESS #" IN THE REQUEST IS ZERO (NORMALLY THE * MASTER CLASS NUMBER), QUEX WILL SEND $STDLIST TO "CNSLM" AJND * IGNORE THE FINAL REPLY. * KILL LDA #QXCL I/O CLASS # FOR QUEX SZA,RSS IS HP3000 UP? JMP RSCHD NO. LEAVE PNL AS IS. SSA IS HP3000 DISCONNECTED? JMP RSCHD YES. LEAVE PNL AS IS. * JSB EXEC CLASS WRITE "KILL" REQUEST TO QUEX. DEF *+8 DEF K20N DEF K0 DEF KLBUF DEF K8 DEF K8 DEF K0 DEF #QXCL NOP IGNORE ERRORS. * JSB #RSAX DELETE PNL ENTRY. DEF *+3 DEF K10 CODE FOR "REMOVE". DEF KLBUF+4 SEQUENCE NUMBER. * * LDB XACTA RESTORE ADDR OF NEXT ENTRY. JMP CKPNL GO CHECK NEXT ENTRY. * KLBUF BYT 10,6 LENGTH,CLASS OCT 0 OCT 27 STREAM OCT 0,0,0,0,0 * SKP * * RESCHEDULE HP1000 AND/OR HP3000 MONITORS IF THEY ARE DORMANT * RSCHD LDA #LU3K IF NO HP3000 SZA,RSS CONNECTED, JMP RE1K GO RESCHEDULE HP1000 MONITORS. * * RESCHEDULE "QUEX", "RQCNV", OR "RPCNV" IF THEY ARE DORMANT * JSB SCHDL TRY TO SCHEDULE QUEX (IF DORMANT) ASC 3,QUEX JSB SCHDL TRY TO SCHEDULE RQCNV (IF DORMANT) ASC 3,RQCNV JSB SCHDL TRY TO SCHEDULE RPCNV (IF DORMANT) RPCNM ASC 3,RPCNV * LDA #GRPM IF NO HP1000 SZA,RSS CONNECTED, JMP EXIT ALL DONE! SPC 1 * * RESCHEDULE "GRPM", "RTRY", OR "QCLM" IF THEY ARE DORMANT * RE1K JSB SCHDL TRY TO SCHEDULE GRPM (IF DORMANT) ASC 3,GRPM JSB SCHDL TRY TO SCHEDULE RTRY (IF DORMANT) ASC 3,RTRY JSB SCHDL TRY TO SCHEDULE QCLM (IF DORMANT) ASC 3,QCLM * SKP * * CHECK FOR DOWNED COMMUNICATION LINES * LDA LUMAX NUMBER OF LOGICAL UNITS CMA,INA STA LCNT SET COUNTER LDA B101 STA LU MODE= 1 FOR "ENABLE LISTEN" LDA DRT ADDR OF DEVICE REFERENCE TABLE UPEQ2 STA LPNT LDWjA 0,I PICK-UP DRT ENTRY AND B77 ISOLATE EQT NUMBER ADA N1 MPY K15 REL.POS. IN EQT ADA EQTA POINT TO 1ST WORD OF EQT ADA K4 ADDR OF EQT5 LDB 0 LDA 0,I CONTENTS OF EQT 5 ALF,ALF AND B77 ISOLATE EQUIPMENT TYPE CODE CPA B65 DVR65? JMP UPEQ4 YES, SEE IF IT'S UP * UPEQ3 ISZ LU BUMP LU IN CONTROL WORD LDA LPNT INA INCREMENT DRT POINTER ISZ LCNT JMP UPEQ2 PROCESS NEXT DRT ENTRY * * ALL LU'S HAVE BEEN CHECKED, EXIT UPLIN * EXIT JSB EXEC DEF *+2 DEF K6 * * PROCESS COMMUNICATIONS EQT * UPEQ4 ADB K7 POINT TO EQT12 LDA 1,I GET EQT12 AND BMSKS ISOLATE "BROKEN LINE" & "LISTEN" FLAGS ALF,ALF RAL,CLE,ELA E= BROKEN LINE FLAG SEZ BROKEN LINE? JMP UPEQ5 YES SZA LISTEN ENABLED? JMP UPEQ3 YES, OK ADB N1 POINT TO EQT11 LDA 1,I GET EQT11 SZA,RSS HAS THIS EQT BEEN INITIALIZED? JMP UPEQ3 NO * * ISSUE AN "ENABLE LISTEN" REQUEST UPEQ6 JSB EXEC DEF *+3 DEF K3N DEF LU CONTROL MODE = 1 NOP JMP UPEQ3 * * CHECK TO SEE IF BROKEN LINE JUST OCCURRED * UPEQ5 STB TEMP SAVE EQT12'S ADDRESS * JSB $LIBR GO PRIVILEGED NOP LDA TEMP,I GET EQT12 AND B6MSK CLEAR "BROKEN LINE" FLAG STA TEMP,I JSB $LIBX GO UNPRIVILEGED DEF *+1 DEF *+1 JMP UPEQ6 SKP * SUBROUTINES SPC 2 * THIS ROUTINE BUMPS THE TIMEOUT IN A TCB * TSTCB NOP LDB 0 STB XACTA SAVE ADDRESS OF THIS TRANSACTION INB POINT TO 2ND WORD OF TCB JSB LODWD (CROSS)LOAD TIMER SSA JMP TSTC1+1 TIMEOUT ALREADY RESET AND FLMSK SAVE FLAG BITS (14-8) STA FLBYT * LDA STREM GET STREAM CPA K3 SLAVE EXECW REQUEST? JMP LONGT YES, SET LONG TIMEOUT CPA K8 SLAVE LOADM REQUEST? JMP LONGT YES, SET LONG TIMEOUT CPA K11 MASTER TCB? RSS YES JMP TSTC1 NO, JUST DO A TICK ADB K2 JSB LODWD GET CLASS WD/ TIMEOUT FLAG ADB N2 SSA,RSS LONG TIMEOUT FOR THIS TCB? JMP TSTC1 NO, JUST DO A TICK * LONGT LDA LTIME 20 MINUTE TIMEOUT IOR FLBYT RESTORE FLAG BITS (14-8) JMP TSTC2 * TSTC1 JSB LODWD RELOAD TIMER AND B377 ISOLATE IT CPA B377 IS IT ABOUT TO ROLL OVER? JMP TSTC5 YES, DON'T BUMP IT, RETURN + 2 * JSB LODWD (CROSS)LOAD TIMER AGAIN INA BUMP TIMER TSTC2 JSB STRWD (CROSS)STORE RSS RETURN +1 FOR NOT TIMED-OUT TSTC5 ISZ TSTCB RETURN +2 FOR TCB TIMED-OUT LDB XACTA TCB ADDR INTO B REG JMP TSTCB,I RETURN SPC 3 * SUBROUTINE TO LOAD WORD FROM ALTERNATE MAP (IF RTE-III OR IV) * LODWD NOP MODI2 LDA 1,I GET WORD FROM TCB (RSS IF DMS SYSTEM) JMP LODWD,I RETURN IF RTE-II XLA 1,I LOAD WORD FROM ALTERNATE MAP JMP LODWD,I SPC 3 * SUBROUTINE TO STORE A WORD IN ALTERNATE MAP (IF RTE-III OR IV) * STRWD NOP JSB $LIBR LOWER FENCE NOP MODI1 NOP RSS HERE IF DMS SYSTEM JMP TSTC3 XSA 1,I STORE INTO SYSTEM MAPPED LOCATION RSS * BELOW INSTRUCTION IS EXECUTED FOR NON-DMS SYSTEMS ONLY TSTC3 STA 1,I STORE UPDATED TIMER IN TCB JSB $LIBX RAISE FENCE DEF STRWD RETURN SPC 3 * SUBROUTINE TO DEALLOCATE AND FLUSH AN I/O CLASS * DEFLU NOP CCA SET THE RELEASE RE-TRY SWITCH STA TEMP TO -1 * CLRTN JSB EXEC GO TO RTE TO RELEASE CLASS NUMBER DEF *+5 DEF K21N CLASS GET/NO ABORT DEF PR<:6AM1 MASTER CLASS/RELEASE/NO WAIT DEF K0 DEF K0 RSS IGNORE ERRORS ISZ TEMP RELEASE PROCESSING COMPLETED? JMP DEFLU,I YES. RETURN. INA,SZA NO. ARE ALL PENDING REQUESTS CLEARED? JMP DEFLU+1 NO. CONTINUE TO CLEAR REQUESTS * LDA PRAM1 GET THE CLASS NUMBER AGAIN AND CLMSK EXCLUDE THE NO-DE-ALLOCATION BIT(#13) STA PRAM1 RESTORE THE MODIFIED CLASS WORD JMP CLRTN RETURN FOR FINAL DE-ALLOCATION SPC 3 * SUBROUTINE TO SCHEDULE A PROGRAM (IF DORMANT) * SCHDL NOP JSB EXEC SCHEDULE DEF *+4 DEF K10N DEF SCHDL,I DEF K0 PRAM TO KEEP RPCNV HAPPY NOP LDA SCHDL SET RETURN ADA K3 ADDRESS JMP 0,I RETURN SKP * DATA AREA * PRAM1 NOP LU NOP RNCW NOP LPNT NOP LCNT NOP STREM NOP XACTA NOP LSTAD NOP MCLSA NOP MSEGA NOP TEMP DEC 0,0 WRD1 NOP SEQ# EQU TEMP+1 DUMMY NOP * K1 DEC 1 K2 DEC 2 K3 DEC 3 K4 DEC 4 K6 DEC 6 K7 DEC 7 K8 DEC 8 K10 DEC 10 K11 DEC 11 K12 DEC 12 K13 DEC 13 K15 DEC 15 B65 OCT 65 B77 OCT 77 COMMA OCT 54 B101 OCT 101 B377 OCT 377 BMSKS OCT 2100 FLMSK OCT 077400 ZBIT OCT 10000 BIT15 OCT 100000 LTIME OCT 100020 K3N OCT 100003 K10N OCT 100012 K20N OCT 100024 K21N OCT 100025 GLCW OCT 40006 GLOBAL RN LOCK/CLEAR - NO ABORT B1774 OCT 177400 CLMSK OCT 157777 B6MSK OCT 177677 N1 DEC -1 N2 DEC -2 * FLBYT NOP * OFMES ASC 2,OFF, MSNAM BSS 3 ASC 1,1 * QMES ASC 10, SYSTEM IS QUIESCENT * END UPLIN &< <K 91740-18003 1740 S C0122 DS/1000 MODULE: RFAM              H0101 _3ASMB,L,R,C HED RFAM2 * SINGLE DCB - RFA MONITOR * (C) HEWLETT-PACKARD CO. 1977 NAM RFAM,19,30 91740-16003 REV 1740 771019 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 2 **************************************************************** * * SINGLE DCB VERSION OF RFA MONITOR * * SOURCE PART # 91740-18003 REV 1740 * * REL PART # 91740-16003 REV 1740 * * WRITTEN BY: CHUCK WHELAN * * DATE WRITTEN: DEC 1976 * * MODIFIED BY: * * DATE MODIFIED: * *************************************************************** SPC 2 EXT EXEC,D65GT,D65SV EXT APOSN,CLOSE,FCONT,CREAT,LOCF,NAMF EXT OPEN,POSNT,PURGE,READF,FSTAT,RWNDF EXT WRITF,#NODE SUP * BUFSZ EQU 128 MAXIMUM DATA BUFFER * SPC 3 ICLAS NOP RFAM2 LDA B,I GET THE CLASS STA ICLAS HED RFAM: ACTIVATOR * (C) HEWLETT-PACKARD CO. 1977 * * WE COME HERE INITIALLY AND EACH TIME A REQUEST HAS BEEN PROCESSED. * GO JSB D65GT WAIT FOR A REQUEST TO COME DEF *+6 DEF ICLAS CLASS # DEF REQST BUFFER DEF D14 MAXIMUM LENGTH OF THE INCOMING BUFFER DTBFA DEF DTBFR DATA BUFFER ADDRESS DEF BUFLN MAXIMUM DATA LENGTH JMP ERR53 MUST BE A LENGTH ERROR * STA RQLN SAVE THE REQUEST LENGTH LDA REQST+4 GET THE FUNCTION CODE SSA CHECK FOR VALIDITY JMP ERR25 <0, NO GOOD ADA DM14 CHECK UPPER BOUND SSA,RSS JMP ERR25 >13, NO GOOD EITHER * * SINCE FUNCTION CODE LOOKS OK}, WE USE IT AS INDEX IN A TABLE * TO GO TO THE PROPER PREPROCESSING. * CLA STA IERR LDA REQST+4 GET FCODE AGAIN ADA JSBTB LDA 0,I STA CALLI SET UP "JSB" ADR LDA REQST+4 ADA BRNCH ADD TO THE BEGINNING OF THE BRANCH TABLE JMP A,I GO EXECUTE THE PREPROCESSING HED RFAM: ORIENTATION * (C) HEWLETT-PACKARD CO. 1977 * * * WE WILL TRY TO DESCRIBE HERE THE FLOW OF OPERATIONS * IN THIS PROGRAM. * * * * 1. EACH REQUEST IS PROCESSED IN 4 PHASES: * - PREPROCESS * - FMP CALL BUILDING * - EXECUTION OF THE FMP CALL * - POSTPROCESS * * THE CHOICE OF THE PROCESSOR IS MADE EACH TIME BY USING * THE REQUEST CODE AS AN INDEX IN A BRANCH TABLE. * * * 2. PREPROCESSING * THE READER SHOULD FIND IN THE PREPROCESSING BRANCH TABLE * (BRNCH) THE LABEL AT WHICH THE CURRENT PREPROCESS WILL START. * * * * 3. FMP CALL FORMATING. * THE TABLE WE WILL USE TO SELECT A PROCESSOR IS BLDTB. * IN THIS PART WE ONLY SET THE ADDRESSES OF THE PARAMETERS * IN THE CALL BUFFER. * * * 4. POSTPROCESSING * ON COMPLETION OF THE FMP CALL WE GO TO "DONE" WHERE THE * SELECTION OF THE PREPROCESSOR IS DONE THROUGH THE TABLE * PSTBL. * * PST05 USED FOR DNAME AND DPURG * IF THE FILE WAS OPEN BEFORE THE FMP CALL AND THE CALL * WAS EXECUTED WITHOUT ERROR, THE CURRENT RFAMD ENTRY * IS DELETED. * * PST04 USED FOR DCRET * IF THE ICR WAS NOT SPECIFIED IN THIS REQUEST, SET THE * PROPER CRN VALUE IN THE RFAMD ENTRY. * IN ANY CASE, FIND THE RFAMD ENTRY # AND PASS IT TO * THE USER. * * PST00 USED FOR DSTAT * SET THE DATA LENGTH TO 125 WORDS. * * PST02 USED FOR DREAD * SET THE DATA LENGTH * * PST03 USED FOR DOPEN * IF THE ICR WAS SPECIFIED IN THE REQUEST, THE RFAMD * ENTRY # IS SET IN THE REQST, AND THE REPLY IS SENT. * IF THE ICR WAS NOT SPECIFIED IN THE REQUEST, THE * LEGALITY OF THIS OPEN IS CHECKED, AND EITHER: * - REJECTED (ERR -08) THE TYPE OF THE OPEN MAY HAVE * BE RESTORED * - ACCEPTED, THE CRN IS SET IN THE RFAMD ENTRY AND THE ENTRY * NUMBER IS SET IN THE REQST. * THE REPLY IS SENT. * * * 5. IF THE OPERATION WAS A SUCCESSFUL CLOSE, THE CURRENT RFAMD * ENTRY IS DELETED. * * * * HED RFAM: PREPROCESSING * (C) HEWLETT-PACKARD CO. 1977 SPC 3 * * HERE ON A "DCRET" BRN3 LDA %NAME CURRENT DCB ID SZA IS ENTRY AVAILABLE? JMP ERR28 NO, GIVE ERROR -28 * BRN31 LDB FNAMA LDA NAMA MVW D5 SET UP CURRENT ENTRY: NAME, CRN, ID SEG LDA REQST+2 GET ORIGINATOR'S NODE STA %NODE & SAVE IN LOCAL ENTRY JMP BUILD CURRENT ENTRY IS ALL SET! SPC 3 * * HERE ON A DOPEN * BRN4 JSB CKENT SET CRN, CHECK NAME, NODE, AND ID JMP BRN31 OK OR CURRENT ENTRY IS EMPTY SPC 3 * * PROCESSOR FOR FLUSH * BRN6 LDB FNAMA LDA NAMA CMW D3 COMPARE NAME WITH CURRENT ENTRY JMP *+3 MATCHES NOP JMP ERR11 DOESN'T MATCH, GIVE DCB NOT OPEN * LDB REQST+9 CPB DM1 CLOSE ALL? JMP BUILD YES, DO IT CPB %NODE IS IT THE ASSIGNED NODE? JMP BUILD YES, FLUSH IT JMP ERR11 NO, GIVE DCB NOT OPEN SPC 3 * * HERE FOR DPURG AND DNAME * BRN8 JSB CKENT CHECK NAME, NODE, AND ID STA TMPAD VALUE=0 IF NO CURRENT ENTRY JMP BUILD OK TO PROCEED SPC 3 * * * HERE FOR DSTAT. THIS IS A SPECIAL CALL, IT DOES NOT * NEED ANY DCB. SPECIAL TREATMENT. * BRN10 JSB FSTAT DEF *+2 DEF DTBFR STATUS BUFFER * LDB D125 SET THE LENGTH OF THE JMP REPLY+1 DATA BUFFER & RETURN SPC 3 * * ENTER HERE FOR FUNCTIONS WHICH MUST ALREADY HAVE OPEN DCB * BRN1 LDB %NAME LDA REQST+6 CPA %SEQ IS IT CORRECT ENTRY NUMBER? SZB,RSS YES, IS ENTRY STILL OPEN? JMP ERR26 ANSWER TO EITHER IS NO, GIVE -26 SKP SPC 3 * HERE WE BRANCH TO THE PROPER CALL SETUP ROUTINE. * BUILD LDA DCBA STA LDCB INITIALIZE DCB ADDR IN CALL LDA NAMA STA LDCB+2 INITIALIZE ADDR OF FILE NAME ADA D6 STA LDCB+3 INITIALIZE ADDR OF SIZE/OPTNL PARAM LDB PARAM GET ADDR OF PARAMETER DESTINATION LDA REQST+4 GET FCODE AGAIN ADA BLDTB MAP IN "BUILD" TABLE JMP A,I GO PREPARE THE CALL TO FMP * SPC 3 * * CALL BUILDER FOR DWRIT * BLD12 LDA DTBFA STA LDCB+2 SET BUFFER ADDRESS IN CALL INB SPC 3 * * CALL BUILDER FOR DAPOS,DCLOS,DCONT,DPOSN,DWIND,FLUSH * BLD0 LDA RQLN REQUEST LENGTH ADA DM7 COMPUTE # OF PARAMETERS + 1 CAX LDA LENA =REQST+7 * BLDCM DSX DECREMENT COUNT INA,RSS JMP BLD01 DONE MOVING PARAMETER "DEF"S * BLDC2 STA 1,I STORE "DEF" IN CALL SEQUENCE INB JMP BLDCM ITERATE SPC 3 * * CALL BUILDER FOR DCRET * BLD3 LDA TYPEA ADDR OF TYPE STA LDCB+4 * LDB D3 * * THE FOLLOWING PART IS COMMON TO DCRET, DNAME,DOPEN * AND DPURG, IT SETS THE SECURITY CODE AND THE CRN IN THE CALL * BLD31 ADB PARAM COMPUTE ADDR WITHIN CALL LDA SECUA GET ADDRESS OF ISECU STA B,I SET IT IN THE CALL LDA CRA GET ADDRESS OF ICR INB STEP TO NEXT PARAM IN CALL STA B,I SET IT IN THE CALL LDA A,I GET CRN SZA PRESENT ? INB YES, PUSH B TO NEXT JMP BLD01 DONE HERE, GO COMPLETE AND CALL SPC 3 * * CALL BUILDER FOR DLOCF * BLD4 LDX D7 SET COUNTER LDA LENA PARAMETERS START AT REQST+7 JMP BLDC2 GO SET-UP "DEF"S TO PARAMETERS SPC 3 * * CALL BUILDER FOR DNAME * BLD5 LDB D2 LDA TMPAD WAS THE FILE ALREADY OPEN ? SZA JMP BLD31 YES, DCB ADDRESS ALREADY SET JMP BLD81 NO, USE DATA BUFFER AS DCB SPACE. SPC 3 * * CALL BUILDER FOR DOPEN * * BLD6 CLB SET "FILE NOT OPEN" STB %DCB+9 STATUS * LDB D2 JMP BLD31 GO COMPLETE THE CALL SPC 3 * * CALL BUILDER FOR DPURG * BLD8 LDA NAMA GET FILE NAME ADDRESS STA LDCB+2 SET IT IN CALL CLB,INB BLD81 LDA DTBFA GET THE ADDRESS OF THE DATA BUFFER STA LDCB USE IT AS THE DCB ADDRESS FOR THIS CALL JMP BLD31 GO COMPLETE SPC 3 * * CALL BUILDER FOR DREAD * BLD9 LDA REQST+8 REQUESTED DREAD LENGTH CMA,INA ADA BUFLN BUFFER SIZE - REQUESTED LENGTH SSA BUFFER EXCEEDED? JMP ERR53 YES, GIVE LENGTH ERROR LDA DTBFA GET ADDRESS OF DATA BUFFER STA LDCB+2 SET IT IN CALL CLB STB REQST+7 PRE-INITIALIZE RETURNED LENGTH LDA CRA GET ADDRESS OF REQUEST LENGTH LDB LENA ALWAYS PASS LEN BACK. GET ITS ADDR DST LDCB+3 INA LDB A,I GET NUM SZB,RSS PRESENT ? JMP BLD91 NO STA LDCB+5 YES, SET IN CALL CLB,INB GET A 1 BLD91 ADB PARAM FIND RETURN ADDRESS ADB D3 * * WRAP-UP PREPROCESSING * BLD01 STB CALL+1 SET THE RETURN ADDRESS CLA STA 1,I CLEAN OUT REST OF CALL INB CPB RTN MORE? JMP CALL NO, GO EXECUTE FMGR CALL JMP *-4 YES HED RFAM: POSTPROCESSING * (C) HEWLETT-PACKARD CO. 1977 * * POSTPROCESS FOR DNAME AND DPURG * PST05 CLB CPB TMPAD WAS IT AN ALREADY OPEN FILE ? JMP REPLY NO LDA IERR GET COMPLETION CODE dSSA,RSS ERROR ? STB %NAME NO, DELETE THE OLD ENTRY JMP REPLY SEND THE REPLY SPC 2 * * POSTPROCESS FOR DCRET AND DOPEN * PST04 LDA IERR SSA ANY ERROR ? JMP CLENT YES, JUST CLEAR OUT CURRENT ENTRY * LDA REQST+8 GET ICR SZA SPECIFIED ? JMP PST41 YES * LDA %DCB NO, GET 1ST WORD OF DCB AND B77 GET DISC LU CMA,INA STA REQST+8 REPLACE IN THE REQST PST41 JSB LUCR TRANSFORM INTO CRN STB %CRN SET IT * ISZ %SEQ BUMP CURRENT SEQUENCE NUMBER NOP LDA %SEQ STA REQST+7 SAVE IT IN REQUEST JMP REPLY SPC 2 * * WE COME HERE AFTER A DREAD * PST02 LDB REQST+7 GET LENGTH OF DATA SSB SKIP IF NOT EOF CLB ELSE DO ZERO LENGTH XFER JMP REPLY+1 SPC 2 * * POST PROCESS FOR FLUSH * PST08 CLA,INA ONE FLUSHED ENTRY STA IERR SET AS COMPLETION CODE * CLENT CLB STB %NAME CLEAN OUT CURRENT ENTRY HED RFAM: SEND REPLY * (C) HEWLETT-PACKARD CO. 1977 * * POST-PROCESSING COMPLETED, SET-UP TO SEND REPLY * REPLY CLB SET FOR NO DATA RETURNED STB LENGT LDA #NODE GET LOCAL NODE # STA REQST+6 SET AS COMPLETION LOCATION LDA IERR SET THE COMPLETION CODE STA REQST+5 IN THE REQST LDA REQST GET THE STREAM TYPE IOR BIT14 SET THE REPLY BIT STA REQST REPLACE * LDA REQST+4 GET THE ICODE ADA LNTBL INDEX IN THE REPLY LENGTH TABLE LDA A,I GET THE LENGTH STA RQLN SET THE LENGTH * * THE REPLY REQST IS READY, SEND IT BACK * JSB D65SV DEF *+5 DEF REQST DEF RQLN REQST LENGTH DEF DTBFR DATA BUFFER DEF LENGT LENGTH * NOP IGNORE THE ERROR RETURN FROM D65SV * * IF THE OPERATION WASe A DCLOS, AND IT WORKED PROPERLY, WE * HAVE TO DELETE THE RFAMD ENTRY. * LDA REQST+4 GET OPCODE FOR THE LAST TIME CPA D1 DCLOS ? CLB,RSS JMP PST06 * * LDA IERR GET COMPLETION CODE SSA,RSS ERROR ? STB %NAME NO, CLEAR OUT CURRENT ENTRY * PST06 LDX DM9 GET A COUNTER CLB GET A 0 PST07 SBX REQST+14 CLEAN THE OPTIONAL AREA ISX JMP PST07 CONTINUE JMP GO GET NEXT REQUEST. HED RFAM: UTILITY ROUTINES * (C) HEWLETT-PACKARD CO. 1977 * * THIS ROUTINE CHECKS FILE NAME, CARTRIDGE REFERENCE, NODE, AND * ID SEGMENT ADDRESS IN THE NEW REQUEST AND RETURNS IF THEY * MATCH THE CURRENT ENTRY * CKENT NOP JSB LUCR CONVERT POSSIBLE LU TO CRN LDA %NAME SZA,RSS CURRENT ENTRY AVAILABLE JMP CKENT,I YES LDA REQST+2 CPA %NODE NODES MATCH? RSS YES JMP ERR28 NO, GIVE NO TABLE SPACE ERROR? SZB,RSS WAS CRN SPECIFIED LDB %CRN NO, USE CURRENT ENTRY'S CRN STB REQST+8 LDB FNAMA LDA NAMA CMW D5 COMPARE NAME,CRN, & ID SEGMENT ADDRS JMP CKENT,I MATCHED OK NOP JMP ERR28 DOESN'T MATCH, GIVE NO TABLE SPACE ERROR * * THIS ROUTINE WILL TRANSFORM A NEGATIVE DISC LU * INTO A CARTRIDGE NUMBER. BOTH INPUT AND RESULTS * ARE PASSED VIA REQST+8. THE RESULT WILL ALSO BE * FOUND IN B REGISTER. IF AN ERROR IS DISCOVERED * WE WILL DIRECTLY JUMP TO THE ERROR ROUTINE. * LUCR NOP LDB REQST+8 SSB,RSS IS IT AN LU? JMP LUCR,I NO * CMB,INB YES, MAKE IT POSITIVE AND STB DTBFR SET UP STATUS CALL. * JSB EXEC GET EQUIPMENT-TYPE CODE DEF *+4 DEF D13I DEF DTBFR USE DTBFR FOR CONWD DEF DTBFR+1 AND EQT5. JMP ERR06 ILLEGAL LU * LDA DTBFR+1 GET EQT5 ALF,ALJF AND B77 ISOLATE EQUIP-TYPE CODE LDB REQST+8 IF DVR05 (CTU SYSTEM), CPA D5 RETURN WITH JMP LUCR,I B = -LU. * JSB FSTAT GET INFO ON THE CURRENTLY DEF *+2 MOUNTED CARTRIGES. DBFAD DEF DTBFR SEND THE INFO IN THE DATA BUFFER * LDA DBFAD DCB BUFFER ADDR LP84 LDB 0,I GET W1 OF ENTRY CMB,INB CPB REQST+8 IS IT OUR LU? JMP FND84 YES SZB,RSS END OF TABLE ? JMP ERR06 YES, ILLEGAL DISC LU ADA D4 PUSH THE ADDR TO THE NEXT ENTRY JMP LP84 CONTINUE * FND84 ADA D2 STEP TO THE CRN LDB 0,I GET IT STB REQST+8 SET IT IN THE REQST JMP LUCR,I SPC 3 * * THIS IS THE SKELETON OF THE FMP CALL * PARAM DEF LDCB+2 DEF LDCB CALL JSB CALLI,I CALL FMP ROUTINE NOP DEF RTRN LDCB DEF %DCB ADDRESS OF DCB IF ANY DEF IERR ERROR REP 8 NOP * DONE LDA REQST+4 GET FCODE ADA PSTBL POST-PROCESSING TABLE JMP 0,I JUMP TO POST-PROCESSOR RTN DEF DONE * CALLI NOP ADR OF FMP CALL SPC 3 ERR06 JSB ERRXX DEC -6 ERR11 JSB ERRXX DEC -11 ERR25 JSB ERRXX DEC -25 ERR26 JSB ERRXX DEC -26 ERR28 JSB ERRXX DEC -28 ERR53 JSB ERRXX DEC -53 * ERRXX NOP LDA ERRXX,I STA IERR SET THE ERROR CODE IN THE REPLY JMP REPLY AND SHIP IT. SPC 3 HED RFAM: DATA AREA * (C) HEWLETT-PACKARD CO. 1977 A EQU 0 B EQU 1 SPC 2 **** DEFINE CURRENT OPEN RFAM ENTRY **** %NAME DEC 0,0,0 %CRN NOP %IDSG NOP %NODE NOP %SEQ NOP **** END OF CURRENT ENTRY **** SPC 2 DM14 DEC -14 DM9 DEC -9 DM7 DEC -7 DM1 DEC -1 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D5 DEC 5 D6 DEC 6 D13I OCT 100015 D125 DEC 125 BUFLN ABS BUFSZ BIT14 OCT 40000 B77 OCT 77 v FNAMA DEF %NAME NAMA DEF REQST+5 ADDR OF THE FILE NAME LENA DEF REQST+7 ADDR OF LENGTH CRA DEF REQST+8 ADDR OF THE ICR SECUA DEF REQST+10 ADDR OF ISECU TYPEA DEF REQST+13 ADDR OF TYPE DCBA DEF %DCB * * VARIABLES LENGT NOP IERR NOP TMPAD NOP RQLN NOP REQUEST LENGTH HED RFAM: TABLES * (C) HEWLETT-PACKARD CO. 1977 BRNCH DEF *+1,I DEF BRN1 DAPOS DEF BRN1 DCLOS DEF BRN1 DCONT DEF BRN3 DCRET DEF BRN1 DLOCF DEF BRN8 DNAME DEF BRN4 DOPEN DEF BRN1 DPOSN DEF BRN8 DPURG DEF BRN1 DREAD DEF BRN10 DSTAT DEF BRN1 DWIND DEF BRN1 DWRIT DEF BRN6 FLUSH * JSBTB DEF *+1 DEF APOSN DEF CLOSE DEF FCONT DEF CREAT DEF LOCF DEF NAMF DEF OPEN DEF POSNT DEF PURGE DEF READF NOP DEF RWNDF DEF WRITF DEF CLOSE FLUSH * BLDTB DEF *+1,I CALL BUILDING TABLE DEF BLD0 DAPOS DEF BLD0 DCLOS DEF BLD0 DCONT DEF BLD3 DCRET DEF BLD4 DLOCF DEF BLD5 DNAME DEF BLD6 DOPEN DEF BLD0 DPOSN DEF BLD8 DPURG DEF BLD9 DREAD NOP DEF BLD0 DWIND DEF BLD12 DWRIT DEF BLD0 FLUSH * SPC 3 LNTBL DEF *+1 REPLY LENGTH TABLE D7 DEC 7 DAPOS DEC 7 DCLOS DEC 7 DCONT DEC 8 DCRET D14 DEC 14 DLOCF DEC 7 DNAME DEC 8 DOPEN DEC 7 DPOSN DEC 7 DPURG DEC 8 DREAD DEC 7 DSTAT DEC 7 DWIND DEC 7 DWRIT DEC 7 FLUSH SPC 3 PSTBL DEF *+1,I POST PROCESSING TABLE DEF REPLY DAPOS DEF REPLY DCLOS DE <:6F REPLY DCONT DEF PST04 DCRET DEF REPLY DLOCF DEF PST05 DNAME DEF PST04 DOPEN DEF REPLY DPOSN DEF PST05 DPURG DEF PST02 DREAD NOP DEF REPLY DWIND DEF REPLY DWRIT DEF PST08 FLUSH HED RFAM: BUFFERS * (C) HEWLET-PACKARD CO. 1977 REQST REP 14 NOP * DTBFR BSS BUFSZ %DCB BSS 144 * SIZE EQU * * END RFAM2 M< =L 91740-18004 1740 S C0322 DS/1000 MODULE: RFAM              H0103 b5ASMB,L,R,C HED RFAM 91740-16004 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM RFAM,19,30 91740-16004 REV 1740 771019 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 2 **************************************************************** * * RFAM RFA MONITOR * * SOURCE PART # 91740-18004 REV 1740 * * REL PART # 91740-16004 REV 1740 * * WRITTEN BY: JEAN-PIERRE BAUDOUIN * * DATE WRITTEN: JUNE 1976 * * MODIFIED BY: CHUCK WHELAN * * DATE MODIFIED: OCTOBER 1976 * *************************************************************** SPC 2 EXT EXEC,D65GT,D65SV EXT APOSN,CLOSE,FCONT,CREAT,LOCF,NAMF EXT OPEN,POSNT,PURGE,READF,FSTAT,RWNDF EXT WRITF,#NODE,#RFSZ EXT $LIBR,$LIBX,$CVT3,$OPSY IFZ EXT DBUG XIF SUP SPC 3 ICLAS NOP RFAM2 LDA B,I GET THE CLASS STA ICLAS * IFZ CPA D99 DO THEY WANT DBUG ? RSS YES JMP INIT NO, NORMAL FLOW * JSB DBUG DEF *+1 * JSB EXEC NOW THAT DBUG HAS BEEN CALLED DEF *+4 TERMINATE AND SAVE RESOURCES DEF D6 DEF D0 DEF D1 * JMP RFAM2 GO BACK TO START XIF * JMP INIT GO EXECUTE THE INITIALIZATION PHASE SPC 3 HED RFAM: ACTIVATOR * (C) HEWLETT-PACKARD CO. 1977 * * WE COME HERE THE FIRST TIME WHEN THE INITIALIZATION IS COMPLETED * WE COME BACK HERE EACH TIME A REQUEST HAS BEEN PROCESSED. * AS USUAL, WE HANG ON A CLASS WAITING FOR A REQUEST TO COME. * [k THE CLASS HAS BEEN PASSED TO US BY LSTEN AT SYSON TIME. * GO JSB D65GT WAIT FOR A REQUEST TO COME DEF *+6 DEF ICLAS CLASS # BPARM DEF PARMB BUFFER DEF D14 MAXIMUM LENGTH OF THE INCOMING BUFFER DTBFA DEF DTBFR DATA BUFFER ADDRESS DEF D512 MAXIMUM DATA LENGTH JMP GO IGNORE ERROR RETURN * STA RQLN SAVE THE REQUEST LENGTH LDA PARMB+4 GET THE FUNCTION CODE SSA CHECK FOR VALIDITY JMP ERR25 <0, NO GOOD ADA DM14 CHECK UPPER BOUND SSA,RSS JMP ERR25 >13, NO GOOD EITHER * * SINCE FUNCTION CODE LOOKS OK, WE USE IT AS INDEX IN A TABLE * TO GO TO THE PROPER PREPROCESSING. * LDA PARMB+4 GET FCODE AGAIN ADA BRNCH ADD TO THE BEGINNING OF THE BRANCH TABLE JMP A,I GO EXECUTE THE PREPROCESSING HED RFAM: ORIENTATION * (C) HEWLETT-PACKARD CO. 1977 * * * WE WILL TRY TO DESCRIBE HERE THE FLOW OF OPERATIONS * IN THIS PROGRAM. * * * * 1. EACH REQUEST IS PROCESSED IN 4 PHASES: * - PREPROCESS * - FMP CALL BUILDING * - EXECUTION OF THE FMP CALL * - POSTPROCESS * * THE CHOICE OF THE PROCESSOR IS MADE EACH TIME BY USING * THE REQUEST CODE AS AN INDEX IN A BRANCH TABLE. * * * 2. PREPROCESSING * THE READER SHOULD FIND IN THE PREPROCESSING BRANCH TABLE * (BRNCH) THE LABEL AT WHICH THE CURRENT PREPROCESS WILL START. * HERE IS A DESCRIPTION OF THESE PREPROCESSES. * * BRN2 USED BY DCLOS * SCAN THE RFAMD TABLE FOR OTHER USERS OF THIS FILE. * ONLY USER ? * - YES => BRN9, GET READY FOR A REAL FILE CLOSE. * - NO => BRN7, FAKE A CLOSE, SEND THE REPLY. * * BRN8 USED FOR DPURG AND DNAME * SCAN THE RFAMD LIST FOR USERS OF THIS FILE. * - FILE NOT CURRENTLY USED => BRN5, PREPARE THE FMP CALL * - FILE CURRENTLY USED, BUT ONLY BY US => BRN9, GET * l CURRENT DCB, THEN BUILD THE CALL. * - FILE CURRENTLY USED BY SOMEONE ELSE, RESTORE THE * TYPE OF THE OPEN IF NECESSARY (WE MIGHT HAVE HAD TO * OPEN THE FILE TO LOCATE IT IF ICR WAS NOT SPECIFIED) * THEN REJECT THE REQUEST (ERR -08) * * BRN4 USED ONLY BY DOPEN * IS ICR SPECIFIED ? * - YES, CHECK THE LEGALITY OF THIS OPEN (BRN41) * REJECT (ERR -08) IF ILLEGAL. * - NO, SKIP THE CHECKING, IT WILL BE DONE LATER. * => BRN3 * * BRN3 USED BY DCRET * GET A DCB SPACE IN CORE. SWAP AN OLD DCB IF NECESSARY. * GET AN RFAMD ENTRY, LINK IT TO THE LIST AND FORMAT IT. * * BRN1 USED BY DAPOS, DCONT, DLOCF, DPOSN, DREAD, DWIND * AND DWRIT. * THE RFAMD ENTRY # PASSED IN THE PARMB IS CHECKED FOR * FOR VALIDITY. * THE ENTRY IS LOCATED. * THE DCB IS BROUGHT TO CORE IF CURRENTLY ON DISC. * THE RFAMD IS RELINKED: * - IF THE DCB WAS ALREADY IN CORE, THE ENTRY IS ADVANCED * ONE POSITION (I.E. INSERTED BEFORE THE ENTRY IN FRONT * ITSELF). * - IF THE DCB HAD TO BE BROUGHT TO CORE, THE ENTRY IS * INSERTED AS THE "LAST" ENTRY IN THE "DCB IN CORE" PART * OF THE RFAMD. * WE THEN GO TO PREPARE THE CALL. * * BRN10 FOR DSTAT ONLY * CALL FSTAT AND GO DIRECTLY TO THE REPLY SECTION * * BRN6 FOR FLUSH ONLY * - DELETE THE PROPER RFAMD TABLE ENTRIES AND RETURN * TO THE DCB FREE LIST THE DCB SPACES WHICH ARE NOT * ANY MORE NEEDED. * - MAKE A DECISION ON WETHER OR NOT WE HAVE TO CLOSE * THIS FILE. IF YES, JMP BRN9 FOR STANDARD CLOSE, ELSE * JMP BRN7 FOR TERMINATION. * * * 3. FMP CALL FORMATING. * THE TABLE WE WILL USE TO SELECT A PROCESSOR IS BLDTB. * IN THIS PART WE ONLY SET THE ADDRESSES OF THE PARAMETERS * IN THE CALL BUFFER. * * * 4. POSTPROCESSING * ON COMPLETION OF THE FMP CALL WE GO TO "DONE" WHERE THE * SELECTION OF THE PREPROCESSOR IS DONE THROUGH THE TABLE * PSTBL. * * PST05 USED FOR DNAME AND DPURG * IF THE FILE WAS OPEN BEFORE THE FMP CALL AND THE CALL * WAS EXECUTED WITHOUT ERROR, THE CURRENT RFAMD ENTRY * IS DELETED. * * PST04 USED FOR DCRET * IF THE ICR WAS NOT SPECIFIED IN THIS REQUEST, SET THE * PROPER CRN VALUE IN THE RFAMD ENTRY. * IN ANY CASE, FIND THE RFAMD ENTRY # AND PASS IT TO * THE USER. * * PST00 USED FOR DSTAT * SET THE DATA LENGTH TO 125 WORDS. * * PST02 USED FOR DREAD * SET THE DATA LENGTH * * PST03 USED FOR DOPEN * IF THE ICR WAS SPECIFIED IN THE REQUEST, THE RFAMD * ENTRY # IS SET IN THE PARMB, AND THE REPLY IS SENT. * IF THE ICR WAS NOT SPECIFIED IN THE REQUEST, THE * LEGALITY OF THIS OPEN IS CHECKED, AND EITHER: * - REJECTED (ERR -08) THE TYPE OF THE OPEN MAY HAVE * BE RESTORED * - ACCEPTED, THE CRN IS SET IN THE RFAMD ENTRY AND THE ENTRY * NUMBER IS SET IN THE PARMB. * THE REPLY IS SENT. * * * 5. IF THE OPERATION WAS A SUCCESSFUL CLOSE, THE CURRENT RFAMD * ENTRY IS DELETED. * * * * HED RFAM: PREPROCESSING * (C) HEWLETT-PACKARD CO. 1977 SPC 3 * * HERE FOR DCLOS * BRN2 JSB ENTCK CHECK THE VALIDITY OF THE ENTRY # STA CRFAD ENTRY # OK. A = ADDRESS OF ENTRY. ADA D2 STEP TO THE FILE NAME LDB FNAMA GET THE DESTINATION ADDRESS MVW D4 MOVE THE FILE NAME AND THE CRN * LDA FIRST SET THE START POINTER TO STA PNTR1 SEARCH FROM THE FIRST ENTRY. * BRN21 JSB SERCH SEARCH THE LIST JMP BRN9 UNSUCCESFUL SEARCH => OK * * SUCCESSFUL SEARCH. IS IT US ? * LDA PNTR1 GET SEARCH POINTER CPA CRFAD COMPARE TO CURRENT ENTRY RSS YES, US, NO PROBLEM JMP BRN22 NO, FAKE THE CLOSE. LDA PNTR1,I GET NEXT TO SEARCHED ENTRY STA PNTR1 RESET THE SEARCH POINTER JMP BRN21 CONTINUE TO SCAN. * BRN22 CLA SET FOR NO ERROR STA IERR JMP BRN7 RETURN SPC 3 * * HERE FOR DPURG AND DNAME * BRN8 JSB BRN84 SET UP FOR LIST SCAN. CLB STB TMPAD JSB SERCH SCAN THE LIST JMP BRN5 UNSUCCESFUL SEARCH => OK. * * IF THE FILE IS OPENED TO US AND ONLY TO US, * WE ARE ALLOWED TO EXECUTE THE REQUEST. * PNTR1 POINTS TO THE MATCHING ENTRY * JSB US? IS IT OUR ENTRY ? JMP BRN81 NO, NOT US STA TMPAD SAVE ENTRY ADDRESS SSB EXCLUSIVE OPEN ? JMP BRN82 YES, WE ARE THE ONLY USER * LDA A,I GET ADDRESS OF NEXT ENTRY STA PNTR1 SET THE POINTER TO CONTINUE THE SEARCH JSB SERCH DO IT RSS NO BODY ELSE IN THE GAME, EXECUTE JMP BRN81 SOME ONE ELSE, FORGET IT * LDA TMPAD GET ENTRY ADDRESS BRN82 STA CRFAD SET FOR DCB RETREIVAL JSB FNDX FIND THE ENTRY # JMP BRN91 GET THE DCB AND EXEC THE REQ. * * SUCCESSFUL SEARCH, WE CANNOT PURGE NOR RENAME A FILE OPEN TO * SOMEONE ELSE. * * THE FILE WAS FOUND TO BE CURRENTLY OPENED TO SOMEONE. * TO FIND THIS WE MIGHT HAVE HAD TO OPEN THE FILE. * IF THE CURRENT OWNER(S) HAD IT NON EXCLUSIVELY OPENED, * WE HAVE TO RESTORE THIS STATUS. * BRN81 LDA DFLFL SZA,RSS DID WE HAVE TO DO AN OPEN ? JMP ERR08 NO LDA PNTR1 GET ADDRESS OF RFAMD ENTRY ADA D7 STEP TO THE NODE NUMBER LDA A,I GET IT SSA "EXCLUSIVE" BIT SET ? JMP ERR08 YES, WE DID NOT CHANGE ANYTHING * CLB SET THE DCB IN STB DTBFR+9 "FILE NOT OPEN" STATUS * JSB OPEN NO, REOPEN, NON EXCLUSIVELY DEF *+7 DEF DTBFR USE DATA A,REA AS DCB DEF IERR1 DEF PARMB+5 FILE NAME DEF D1 OPTION DEF PARMB+10 ISECU DEF PARMB+8 ICR * JMP ERR08 NOW, SEND ERROR SPC 3 * * WE COME HERE FOR DOPEN * BRN4 LDA PARMB+8 GET ICR SZA,RSS PRESENT ? JMP BRN3 NO, WE WILL DO THE CHECKING LATER JSB BRN41 YES JMP BRN3 OK TO OPEN JMP ERR08 CANNOT OPEN SPC 3 * * HERE WE WILL CREATE AN RFAMD ENTRY. * THIS ENTRY WILL BE POSITIONED AT THE END OF THE * LIST OF RFAMD ENTRIES POINTING TO IN-CORE-DCB'S. * WE WILL ALSO TAKE CARE OF FINDING A DCB SPACE AND * LINKING IT TO ITS RFAMD ENTRY. * BRN3 LDA BFREE GET FREE RFAMD-LIST HEAD POINTER SZA,RSS ANY FREE ENTRY ? JMP ERR28 NO, REJECT. * LDA FCORE GET FREE DCB-LIST HEAD POINTER. SZA ANY ROOM IN CORE ? JMP CRT1 YES, WE DONT HAVE TO SWAP ANYONE OUT. * * SINCE THERE IS NO ROOM FOR ANOTHER DCB IN CORE AT * THIS TIME, WE HAVE TO MAKE SOME ROOM. WE WILL SWAP * OUT THE "LAST" DCB. * JSB WLAST WRITE "LAST" DCB TO DISC * LDA LAST GET THE ENTRY ADDRESS INA STEP TO "PREVIOUS" POINTER LDB A,I GET ADDRESS OF PREVIOUS STB LAST RESET LAST ADA D7 STEP TO THE DCB POINTER CLB STB A,I SET IT FOR "DCB ON DISC" * JMP CRT2 * CRT1 LDB FCORE,I TAKE 1 DCB OUT OF THE STB FCORE FREE LIST AND RELINK THE LIST STA LDCB SAVE THE ADDRESS OF "OUR" DCB * * NOW THAT WE HAVE A DCB, LET'S TAKE CARE OF THE RFAMD ENTRY. * CRT2 LDA BFREE TAKE 1 OUT OF THE FREE LIST LDB BFREE,I AND RELINK THE FREE LIST STB BFREE * STA CRFAD SAVE ADDRESS OF OUR RFAM ENTRY LDB LDCB GET DCB ADDRESS ADA D8 STEP TO DCB POINTER STB A,I SET IT ADB D9 STEP TO THE OPEN FLAG AND DESTROY IT STB B,I BY MAKING IT DIFFERENT FROM RFAM'S ID SEG ADDRESS * * NOW INSERT CRFAD IN THE LIST * LDA LAST SZA IS THERE ANYTHING IN THIS LIST ? JMP CRT3 YES * * CRFAD WILL BE THE 1ST ENTRY OF THE LIST. * LDB CRFAD STB LAST SET IN-CORE LIMIT LDA FIRST SZA,RSS IS THE LIST EMPTY ? JMP CRT21 YES JSB INSRT INSERT STA FIRST RESET THE LIST HEAD JMP BRN31 * CRT21 STB FIRST STA 1,I NO "NEXT" INB STA 1,I NO "PREVIOUS" EITHER JMP BRN31 ALL DONE FOR THIS CASE. * * WE HAVE TO INSERT THE NEW ENTRY AFTER THE "LAST" ONE * CRT3 CPA CRFAD ALREADY IN PLACE? JMP CRT33 YES LDB CRFAD ADDR OF CURRENT ENTRY LDA LAST,I GET NEXT(LAST) STA 1,I STORE IN CURR. ENTRY STB LAST,I LINK OLD LAST TO THIS ONE SZA,RSS BOTTOM? JMP *+3 YES **** INA STB 0,I INB LDA LAST STA 1,I PREV(CRFAD)=OLD LAST CRT33 LDA LAST,I GET "NEXT" OF LAST STA LAST UPDATE LAST * * AN RFAMD ENTRY IS CREATED AND LINKED INTO THE LIST. * WE NOW HAVE TO FILL THE BLANKS IN THE RFAMD ENTRY. * BRN31 LDB CRFAD GET POINTER TO NEW RFAMD ENTRY. ADB D2 STEP TO FILE NAME LDA NAMA MVW D3 MOVE THE FILE NAME LDA PARMB+8 GET ICR STA B,I SET IT IN CRFAD LDA PARMB+9 GET THE ID SEGMENT @ OF THE OWNER INB STA B,I LDA PARMB+2 GET ORIGIN NODE INB STA B,I * * ALL SET ! * JMP BRN5 SPC 2 * * SUBROUTINE TO SWAP OUT THE "LAST" IN-CORE DCB. * FIRST FIND ITS DISC ADDRESS. * WLAST NOP LDA LAST GET CORE ADDRESS OF RFAMD ENTRY. JSB FNDX FIND ENTRY # JSB CALDS CALCULATE DISC ADDRESS * LDA LAST NOW FI[ND ITS CORE ADDRESS ADA D8 STEP TO DCB ADDRESS LDB A,I GET IT STB LDCB SAVE * ADB D12 STEP TO FILE POSITION POINTER CBX SAVE THE ADDRESS LDB B,I GET THE POINTER LDA LDCB GET THE DCB ADDRESS CMA,INA SUBTRACT FROM FILE POSITION ADB A POINTER TO FORM RELATIVE POINTER. STX A RETRIEVE POINTER ADR STB A,I SET RELATIVE POINTER INTO DCB * JSB EXEC NOW WRITE THE DCB DEF *+7 ON THE DISC. DEF D2I WRITE DEF IDISC DISC LU DEF LDCB,I CORE ADDRESS DEF D144 LENGTH DEF CTRK TRACK # DEF CSCT SECTOR ADDRESS * JMP DSCER DISC ERROR * JMP WLAST,I RETURN SPC 3 * * PREPROCESSOR FOR FLUSH * BRN6 CLA STA IERR SET FOR NO ERROR IN CASE OF NO ENTRY STA TMPNX SET A FLUSHED ENTRY COUNTER STA FLFLG SET A FLUSH FLAG TO INDICATE THE * ABSENCE/PRESENCE OF ENTRIES CORRESPONDING TO THIS FILE * WHICH MUST NOT BE FLUSHED. LDA NAMA LDB FNAMA SET THE FILE ID FOR THE SEARCH MVW D4 LDA FIRST STA PNTR1 SEARCH FROM THE START JSB BRN62 JMP ERR11 NO ENTRY MATCHES, GIVE "DCB" NOT OPEN * ISZ TMPNX INC THE ENTRY COUNTER LDA PNTR1 SAVE THE ENTRY @, WE WILL STA TMPAD USE IT FOR THE CLOSE BRN61 LDA PNTR1,I CONTINUE THE SEARCH STA PNTR1 JSB BRN62 JMP BRN64 ALL DONE ISZ TMPNX ONE MORE LDA PNTR1 JSB DELET DELETE THIS ENTRY JMP BRN61 CONTINUE * BRN64 LDA TMPAD LDB FLFLG GET THE FLUSH FLAG SZB DO WE CLOSE THIS FILE ? JMP BRN65 NO STA CRFAD SET THE ENTRY ADDRESS FOR THE CLOSE LDA D8 STA RQLN JMP BRN9 GO FOR A CLOSE * BRN65 JSB DELET DELETE THIS ENTRY JMP BRN7 AND RETURN. SPC 3 * * HERE WE DO THE COMMON PART OF NEARLY EVERY REQUEST * BRN1 JSB ENTCK FIRST, CHECK THE VALIDITY OF THE ENTRY. STA CRFAD SAVE THE ADDRESS OF THE CURRENT ENTRY. * * IN THIS PART, KNOWING THE ADDRESS OF THE CURRENT RFAMD * ENTRY (CRFAD) WE WILL DETERMINE IF THE MATCHING DCB * IS IN CORE OR ON DISC. IF THE DCB IS ON DISC, IT WILL * BE BROUGHT UP TO CORE. THIS MAY REQUIRE THE SWAPPING OUT * OF ANOTHER DCB. * BRN9 LDA PARMB+6 GET THE ENTRY # BRN91 STA SWNX AND SAVE IT FOR THE DISC ACCESS LDA CRFAD GET POINTER TO THE ENTRY. ADA D8 STEP TO THE DCB POINTER LDA A,I GET IT SZA IS DCB ON DISC ? JMP CASE1 NO * * SINCE WE HAVE TO BRING THE DCB INTO CORE, WE HAVE * TO FIND ROOM FOR IT. * LDA FCORE GET FREE DCB LIST HEAD POINTER SZA ANY FREE DCB SPACE ? JMP SWIN1 YES, SWAP IN ONLY. * * WE WILL SWAP OUT THE "LAST" IN-CORE DCB. * JSB WLAST WRITE "LAST" DCB TO DISC * LDB LAST ADB D8 STEP TO THE DCB POINTER CLA STA B,I SET IT FOR DCB ON DISC STA TMP1 THIS FLAG MEANS THAT WE HAD TO SWAP OUT JMP SWIN2 * SWIN1 STA LDCB SAVE ADDRESS OF LOCAL DCB LDA LDCB,I GET "NEXT" TO LDCB STA FCORE RELINK THE DCB FREE LIST CCA STA TMP1 SET THE FLAG TO "NO SWAP OUT" * SWIN2 LDA SWNX GET NUMBER OF RFAMD ENTRY JSB CALDS FIND WHERE OUR DCB IS ON DISC * JSB EXEC GET THE DCB INTO CORE DEF *+7 DEF D1I DEF IDISC DEF LDCB,I DEF D144 DCB LENGTH DEF CTRK TRACK # DEF CSCT SECTOR NUMBER * JMP DSCER DISC ERROR * * NOW THAT THE DCB IS IN, RESET THE DCB POINTER IN CRFAD * AND THE FILE POSITION POINTER IN THE DCB. * LDA CRFAD ADA D8 STEP TO DCB POINTER LDB LDCB GET ADDRESS OF DCB STB A,I SET THE POINTER ADB D12 STEP TO RELATIVE FILE POSITION PTR LDA B,I GET IT ADA LDCB ADD DCB ADR TO FORM ABSOLUTE FILE STA B,I POSITION POINTER & SET INTO DCB. * * NOW IS TIME TO RELINK THE RFAMD LIST. * WE HAVE 3 SEPARATE CASES: * 1) THE DCB WAS ALREADY IN CORE. WE SWITCH * CRFAD WITH ITS PREVIOUS ENTRY EXCEPT IF CRFAD * THE FIRST ENTRY. IF CRFAD WAS THE 2ND AND-OR * LAST ENTRY, THE FIRST AND-OR LAST POINTERS * HAVE TO BE RESET. * 2) THE DCB WAS ON DISC AND THERE WAS ROOM * IN CORE. CRFAD IS INSERTED AFTER THE "LAST" ENTRY, * AND LAST IS RESET TO POINT TO CRFAD. IF BEFORE THE * INSERTION LAST=0 (I.E. THERE IS NO DCB IN CORE ) * THEN INSERT CRFAD BEFORE FIRST AND RESET FIRST AND * LAST TO CRFAD. * 3) THE DCB WAS ON DISC AND THERE WAS NO ROOM * IN CORE. INSERT CRFAD BEFORE LAST AND RESET LAST * TO CRFAD. IF FIRST=LAST, RESET ALSO FIRST (CASE * OF ONLY ONE DCB IN CORE). * LDA TMP1 GET FLAG SZA,RSS WHAT CASE IS THIS ? JMP CASE3 GUESS * * HERE WE TREAT CASE 2 * LDA LAST GET ADDRESS OF LAST SZA LIMIT CASE ? JMP CASE2 NO, NORMAL CASE2 LDA CRFAD TAKE CRFAD OUT JSB COUT OF LIST. LDA FIRST INSERT IT ON TOP OF THE LIST JSB INSRT * STA LAST RESET LAST STA FIRST RESET FIRST JMP BRN5 ALL DONE. * * NOW FOR REAL CASE 2 * CASE2 LDA LAST,I GET NEXT TO LAST CPA CRFAD CRFAD ALREADY IN PLACE? JMP CAS21 YES, NO INSERTION NECESSARY. LDA CRFAD JSB COUT TAKE CRFAD OUT OlF ITS LIST. LDA LAST,I SET POINTER JSB INSRT OF CRFAD AFTER LAST. * CAS21 STA LAST RESET LAST. JMP BRN5 ALL DONE FOR CASE2 * * HERE ON CASE 3 * CASE3 LDA CRFAD JSB COUT TAKE CRFAD OUT OF THE LIST LDA LAST SET POINTER JSB INSRT CRFAD BEFORE LAST STA LAST RESET LAST LDB 0 INA STEP TO PREVIOUS OF CRFAD LDA A,I GET IT SZA,RSS IS CRFAD FIRST NOW ? STB FIRST RESET FIRST TO CRFAD. JMP BRN5 GO AWAY * * HERE FOR CASE 1 * CASE1 STA LDCB SAVE ADDRESS OF DCB LDA CRFAD CPA FIRST ALREADY TOP OF LIST? JMP BRN5 YES, DONE * JSB COUT REMOVE CRFAD FROM ITS SLOT LDA CRFAD INA LDA A,I GET PREV(CRFAD) JSB INSRT BEFORE PREVIOUS. * INA LDA A,I GET PREV(CRFAD) SZA IS CRFAD NOW FIRST ENTRY ? JMP CAS11 NO LDA CRFAD YES, GET ITS ADDRESS AGAIN STA FIRST RESET FIRST. * CAS11 LDB CRFAD,I GET ADDR OF NEXT LDA LAST WAS LAST POINTING TO CRFAD CPA CRFAD BEFORE THE SWITCH ? STB LAST YES, RESET LAST TO CRFAD(NEXT) JMP BRN5 ALL DONE SPC 3 * * HERE FOR DSTAT. THIS IS A SPECIAL CALL, IT DOES NOT * NEED ANY DCB. SPECIAL TREATMENT. * BRN10 JSB FSTAT DEF *+2 DEF DTBFR STATUS BUFFER * CLA STA IERR SET FOR NO ERROR LDB D125 SET THE LENGTH OF THE JMP PST01 DATA BUFFER & RETURN SPC 3 * * HERE WE BRANCH TO THE PROPER CALL SETUP ROUTINE. * BRN5 LDA PARMB+4 GET THE FUNCTION CODE ADA JSBTB ADD POINTER TO FMP CALL DEF-TABLE LDA A,I GET ADR OF FMP CALL STA CALLI SET IT LDA PARMB+4 GET FCODE AGAIN ADA BLDTB MAP IN "BUILD" TABLE JMP A,I GO PREPARE THE CALL TO FMP g* SPC 3 * * CALL BUILDER FOR DAPOS,DCLOS,DCONT,DPOSN,DWIND * BLD0 LDB PARAM GET @ OF NEXT PARAM DEST. * BLD02 LDA RQLN GET THE REQUEST LENGTH CMA,INA ADA D8 SET A PARAMETER COUNTER SZA,RSS NO PARAMETER ? JMP BLD01 STA CNTR1 LDA BPARM GET ADDRESS OF PARMB ADA D8 STEP TO NEXT PARAMETER ORIGIN * BLDCM STA B,I SAVE IN CALL INB INA STEP TO NEXT PARAM ISZ CNTR1 DONE ? JMP BLDCM NO * BLD01 STB CALL+1 SET THE RETURN ADDRESS JSB NOPS CLEAN THE END OF THE BUFFER JMP CALL EXECUTE THE CALL SPC 3 * * CALL BUILDER FOR DCRET * BLD3 LDA BPARM GET @ OF PARMB ADA D5 STEP TO NAME STA LDCB+2 ADA D6 STEP TO SIZE STA LDCB+3 ADA D2 STEP TO TYPE STA LDCB+4 * LDA CRFAD GET THE ADDRESS OF THE RFAMD ENTRY ADA D7 STEP TO THE NODE # LDB A,I GET IT CCE RBL,ERB SET THE EXCLUSIVE-OPEN BIT STB A,I RESTORE THE WORD * LDB PARAM ADB D3 SET B TO CURRENT RETURN * * THE FOLLOWING PART IS COMMON TO DCRET, DNAME,DOPEN * AND DPURG, IT SETS THE SECURITY CODE AND THE CRN IN THE CALL * BLD31 LDA SECUA GET ADDRESS OF ISECU STA B,I SET IT IN THE CALL LDA CRA GET ADDRESS OF ICR INB STEP TO NEXT PARAM IN CALL STA B,I SET IT IN THE CALL LDA A,I GET CRN SZA PRESENT ? INB YES, PUSH B TO NEXT JMP BLD01 DONE HERE, GO COMPLETE AND CALL SPC 3 * * CALL BUILDER FOR DLOCF * BLD4 LDB PARAM LDA DM7 STA CNTR1 USE AS PARAMETER COUNTER LDA BPARM GET ADDRESS OF PARMB ADA D7 STEP TO 1ST RETURN PARAMETER BLD41 STA B,I SET @ OF RETURN PARAM. IN CALL INA INC PARAMETER @ NLH INB INC CALL POINTER ISZ CNTR1 ALL DONE ? JMP BLD41 NO, CONTINUE JMP BLD01 YES, COMPLETE AND EXECUTE SPC 3 * * CALL BUILDER FOR DNAME * BLD5 LDA BPARM GET @ OF PARMB ADA D5 STEP TO NAME STA LDCB+2 SET @ OF NAME IN CALL ADA D6 GET @ OF NNAME STA LDCB+3 SET IN CALL LDB PARAM ADB D2 SET FOR THE REST LDA TMPAD WAS THE FILE ALREADY OPEN ? SZA JMP BLD31 YES, DCB ADDRESS ALREADY SET JMP BLD81 NO, USE DATA BUFFER AS DCB SPACE. SPC 3 N* * CALL BUILDER FOR DOPEN * BLD6 LDA PARMB+11 GET OPEN OPTION CCE,SLA EXCLUSIVE ? JMP BLD61 NO LDA CRFAD YES, GET ADDRESS OF RFAMD ENTRY ADA D7 TO SET "EXCLUSIVE" FLAG IN NODE WORD. LDB A,I GET THE NODE NUMBER RBL,ERB SET THE SIGN BIT STB A,I REPLACE IN THE ENTRY * BLD61 LDA BPARM GET THE ADDRESS OF THE PARMB ADA D5 STEP TO THE FILE NAME STA LDCB+2 SET IT IN THE CALL TO FMP ADA D6 STEP TO THE OPEN OPTION STA LDCB+3 SET IT IN THE CALL * LDA LDCB SET THE ADA D9 DCB IN CLB "FILE NOT OPEN" STB A,I STATUS * LDB PARAM ADB D2 GET CURRENT RETURN ADDRESS JMP BLD31 GO COMPLETE THE CALL SPC 3 * * CALL BUILDER FOR DPURG * BLD8 LDA NAMA GET FILE NAME ADDRESS STA LDCB+2 SET IT IN CALL LDB PARAM INB BLD81 LDA DTBFA GET THE ADDRESS OF THE DATA BUFFER STA LDCB USE IT AS THE DCB ADDRESS FOR THIS CALL JMP BLD31 GO COMPLETE SPC 3 * * CALL BUILDER FOR DREAD * BLD9 LDA DTBFA GET ADDRESS OF DATA BUFFER STA LDCB+2 SET IT IN CALL LDA BPARM ADA D8 GET ADDRESS OF REQUEST LENGTH STA LDCB+3 SET IN CALL CLB CLEAR RETURNED LENGTH WORD STB LEN TO AVOID CONFUSION ON ERROR LDB LENA ALWAYS PASS LEN BACK. GET ITS @ STB LDCB+4 INA LDB A,I GET NUM SZB,RSS PRESENT ? JMP BLD91 NO STA LDCB+5 YES, SET IN CALL CLB,INB GET A 1 BLD91 ADB PARAM FIND RETURN ADDRESS ADB D3 JMP BLD01 GO COMPLETE AND EXECUTE SPC 3 * * CALL BUILDER FOR DWRIT * BLD12 LDA DTBFA STA LDCB+2 SET BUFFER ADDRESS IN CALL LDB PARAM INB GET RETURN ADDRESS JMP BLD02  GO COMPLETE AND EXECUTE SPC 3 HED RFAM: POSTPROCESSING * (C) HEWLETT-PACKARD CO. 1977 * * WE COME HERE AFTER RETURNING FROM THE FMP CALL * DONE LDA PARMB+4 GET FCODE ADA PSTBL MAP IN THE POST PROCESSING TABLE JMP A,I SPC 3 * * POSTPROCESS FOR DNAME AND DPURG * PST05 LDA TMPAD WAS IT AN ALREADY OPEN FILE ? SZA,RSS JMP BRN7 NO LDB IERR GET COMPLETION CODE SSB,RSS ERROR ? JSB DELET NO, DELETE THE OLD ENTRY JMP BRN7 SEND THE REPLY SPC 3 * * POSTPROCESS FOR DCRET * PST04 LDA IERR SSA ANY ERROR ? JMP INDX YES, DONT WORRY ABOUT ALL THIS * LDA PARMB+8 GET ICR SSA LU ? JMP PST41 YES SZA SPECIFIED ? JMP INDX YES, IT'S A CRN * LDA LDCB,I GET 1ST WORD OF DCB AND B77 GET DISC LU CMA,INA STA PARMB+8 REPLACE IN THE PARMB PST41 JSB LUCR TRANSFORM INTO CRN LDA CRFAD GET THE @ OF THE RFAMD ENTRY ADA D5 STEP TO THE CRN STB A,I SET IT JMP INDX DO THE INDEX THING SPC 3 * * WE COME HERE AFTER A DREAD * PST02 LDB LEN GET LEN STB PARMB+7 SAVE IN REPLY SSB SKIP IF NOT EOF CLB ELSE DO ZERO LENGTH XFER JMP PST01 SPC 3 * * WE COME HERE AFTER A CALL TO DOPEN * PST03 LDA PARMB+8 GET ICR SZA WAS IT SPECIFIED ? JMP INDX YES, PASS THE RFAMD ENTRY #, THAT'S ALL LDA IERR GET THE COMPLETION CODE SSA ERROR ? JMP INDX YES LDA LDCB,I NO, GET 1ST WORD OF DCB CPA MAGLU RTE-M "MAGIC LU" TYPE 0 FILE? JMP MGLU1 YES, SET SPECIAL CODE IN PARMB+8 AND B77 ISOLATE THE DISC LU CMA,INA MAKE IT <0 (FOR LU) MGLU1 STA PARMB+8 REPLACE IT IN THE PARMB * JSB BRN41 FIND THE LEGALITY OF THIS OPEN JMP PST31 LEGAL, WE ARE IN LUCK ! * * THIS OPEN HAS BEEN FOUND TO BE ILLEGAL, THIS MEANS * THAT AT LEAST ONE OTHER USER HAS THIS FILE OPENED, * AND AT LEAST ONE OF US HAS IT OPENED EXCLUSIVELY. * THE PROBLEM NOW IS TO FIND IF OUR OPEN CHANGED THE * TYPE OF OPEN (X/NON-X) AND TO RESTORE THE OLD TYPE * IF IT HAS BEEN CHANGED. * LDA PARMB+11 GET OUR OPEN OPTION SLA DID WE DO AN EXCLUSIVE OPEN ? JMP NOX3 NO LDA PNTR1 YES WE DID, GET THE ADDRESS OF THE ADA D7 OTHER USER'S RFAMD ENTRY. LDA A,I GET THE NODE # SSA DID HE ALSO DO AN EXCLUSIVE OPEN ? JMP BAD03 YES, NO TYPE PROBLEM (THIS ALSO PROVES * THAT HE IS THE ONLY OTHER USER OF THIS FILE) CLA RESTORE THE STATUS STA OPT03 OF THE FILE TO NON EXCLUSIVE OPEN JMP OP03 * NOX3 CLA,INA SET FOR EXCLUSIVE OPEN STA OPT03 CLA STA DTBFR+9 SET DCB IN NON OPEN STATUS * OP03 JSB OPEN DEF *+7 DEF DTBFR WE WILL NOT NEED THE DCB DEF IERR1 DEF PARMB+5 FILE NAME DEF OPT03 OPTION DEF PARMB+10 ISECU DEF PARMB+8 ICR * BAD03 LDA DM8 GET THE ERROR CODE STA IERR SET IT IN THE REPLY * LDA CRFAD GET ADDRESS OF CURRENT RFAMD ENTRY JSB DELET DELETE IT JMP BRN7 SEND THE REPLY SPC 3 PST31 LDA PARMB+8 GET THE CRN LDB CRFAD GET THE @ OF THE RFAMD ENTRY ADB D5 STEP TO THE ICR STA B,I SET IT JMP INDX DO THE INDEX THING SPC 3 * * POST PROCESS FOR FLUSH * PST08 LDA TMPNX GET THE # OF FLUSHED ENTRIES STA IERR SET AS COMPLETION CODE LDA CRFAD DELETE THE LAST ENTRY JSB DELET JMP BRN7 SEND THE REPLY SPC 3 * * THIS WILL SET THE RFAMD ENTRY NUұMBER IN THE PARMB * INDX LDA IERR GET THE ERROR RETURN FROM FMP SSA,RSS ANY ERROR ? JMP INDX1 NO LDA CRFAD ERROR, DELETE THE ENTRY. JSB DELET JMP BRN7 INDX1 LDA CRFAD GET ADDRESS OF THE CURRENT RFAMD ENTRY JSB FNDX CALCULATE IT'S NUMBER STA PARMB+7 SAVE SPC 3 BRN7 CLB SET FOR NO DATA RETURNED * PST01 STB LENGT LDA #NODE GET LOCAL NODE # STA PARMB+6 SET AS COMPLETETION LOCATION LDA IERR SET THE COMPLETION CODE STA PARMB+5 IN THE PARMB LDA PARMB GET THE STREAM TYPE IOR BIT14 SET THE REPLY BIT STA PARMB REPLACE * LDA PARMB+4 GET THE ICODE ADA LNTBL INDEX IN THE REPLY LENGTH TABLE LDA A,I GET THE LENGTH STA PRMBL SET THE LENGTH * * THE REPLY PARMB IS READY, SEND IT BACK * JSB D65SV DEF *+5 DEF PARMB DEF PRMBL PARMB LENGTH DEF DTBFR DATA BUFFER DEF LENGT LENGTH * NOP IGNORE THE ERROR RETURN FROM D65SV * * IF THE OPERATION WAS A DCLOS, AND IT WORKED PROPERLY, WE * HAVE TO DELETE THE RFAMD ENTRY. * LDA PARMB+4 GET OPCODE FOR THE LAST TIME CPA D1 DCLOS ? RSS YES JMP PST06 * * LDA IERR GET COMPLETION CODE SSA ERROR ? JMP PST06 YES, DO NOT DELETE THE ENTRY LDA CRFAD GET ADDRESS OF ENTRY JSB DELET GO DELETE IT AND ITS DCB * PST06 LDA DM9 GET A COUNTER STA CNTR1 LDA BPARM GET ADDRESS OF PARMB ADA D5 STEP TO OPTIONAL AREA CLB GET A 0 PST07 STB A,I CLEAN THE OPTIONAL AREA INA ISZ CNTR1 JMP PST07 CONTINUE JMP GO GET NEXT REQUEST. SPC 3 HED RFAM: UTILITY ROUTINES * (C) HEWLETT-PACKARD CO. 1977 * * THIS ROUTINE WILL PICK UP THE FILE NAME ANlD THE CARTRIDGE * NUMBER FROM THE PARMB AND SET THEM FOR THE CALL TO SEARCH. * * IF AN LU IS PASSED INSTEAD OF THE CARTRIDGE #, THIS IS * CONVERTED TO THE CR #, WHICH IS ALSO SAVED IN PARMB+8. * SINCE THIS ROUTINE IS CALLED JUST BEFORE A SEARCH, WE * ALSO SET THE SEARCH POINTER TO THE FIRST WORD OF THE * RFAMD TABLE. * BRN84 NOP LDA PARMB+8 GET THE ICR PARAMETER SZA,RSS PRESENT ? JMP DEFLT NO, DEFAULT CLB STB DFLFL SET THE DEFAULT FLAG SSA LU ? JSB LUCR YES JMP OK84 NO, CRN * * WE WANT TO FIND ON WHICH LU OUR FILE IS. WE WILL * DO AN EXCLUSIVE OPEN ON THIS FILE AND LOOK IN THE * DCB. * WE COME HERE ONLY ON A DNAME OR A DPURG * DEFLT CCB STB DFLFL SET THE DEFAULT FLAG CLB STB DTBFR+9 * JSB OPEN DEF *+6 DEF DTBFR SEND THE DCB INTO THE DATA AREA DEF IERR1 DEF PARMB+5 FILE NAME DEF D0 EXCLUSIVE OPEN DEF PARMB+10 ISECU * SSA SUCCESFUL OPEN ? JMP ERRXX DONT GO ANY FURTHER LDA DTBFR GET 1ST WORD OF DCB AND B77 GET THE LU CMA,INA STA PARMB+8 SET IT IN THE PARMB JSB LUCR CONVERT TO CRN * OK84 LDA NAMA GET ADDRESS OF FILE NAME LDB FNAMA MVW D4 SET THE FILE NAME FOR THE SEARCH LDA FIRST WE ALSO SET THE SEARCH POINTER STA PNTR1 TO THE BEGINNING OF THE TABLE * JMP BRN84,I SPC 3 * * THIS ROUTINE WILL TRANSFORM A NEGATIVE DISC LU * INTO A CARTRIDGE NUMBER. BOTH INPUT AND RESULTS * ARE PASSED VIA PARMB+8. THE RESULT WILL ALSO BE * FOUND IN B REGISTER. IF AN ERROR IS DISCOVERED * WE WILL DIRECTLY JUMP TO THE ERROR ROUTINE. * LUCR NOP LDA PARMB+8 GET LU/CR CPA MAGLU RTE-M "MAGIC-LU" CODE? JMP LUCR,I YES, JUST RETURN SSA,RSS LU?  JMP LUCR1 NO CMA,INA YES, MAKE IT POSITIVE AND STA DTBFR SET UP STATUS CALL. * JSB EXEC GET EQUIPMENT-TYPE CODE DEF *+4 DEF D13I DEF DTBFR USE DTBFR FOR CONWD DEF DTBFR+1 AND EQT5. JMP ERR06 ILLEGAL LU * LDA DTBFR+1 GET EQT5 ALF,ALF AND B77 ISOLATE EQUIP-TYPE CODE LDB PARMB+8 IF DVR05 (CTU SYSTEM), CPA D5 RETURN WITH JMP LUCR,I B = -LU. * LUCR1 JSB FSTAT GET INFO ON THE CURRENTLY DEF *+2 MOUNTED CARTRIGES. DBFAD DEF DTBFR SEND THE INFO IN THE DATA BUFFER * LDA DBFAD DCB BUFFER ADDR LP84 LDB 0,I GET W1 OF ENTRY CMB,INB CPB PARMB+8 IS IT OUR LU? JMP FND84 YES SZB,RSS END OF TABLE ? JMP ERR06 YES, ILLEGAL DISC LU ADA D4 PUSH THE ADDR TO THE NEXT ENTRY JMP LP84 CONTINUE * FND84 ADA D2 STEP TO THE CRN LDB 0,I GET IT STB PARMB+8 SET IT IN THE PARMB JMP LUCR,I SPC 3 * * ROUTINE TO DELETE AN ENTRY FORM THE RFAMD TABLE AND * TO LINK ITS DCB BACK INTO THE FREE LIST. * WHEN A CALL IS MADE TO THIS ROUTINE, A REGISTER * SHOULD CONTAIN THE POINTER TO THE ENTRY TO BE DELETED. * THE ID SEGMENT ADDRESS ( WORD 6 ) IS SET TO ZERO AS * A PROTECTION AGAINST PROGRAMS WHICH TRY TO ACCESS A * FILE AFTER HAVING CLOSED IT. AFTER THIS PRECAUTION * IS TAKEN, ANY ATEMPT TO ACCESS THIS ENTRY WILL BE * REJECTED AS AN ERROR -26. * DELET NOP STA DELAD SAVE ENTRY ADDRESS ADA D6 STEP TO THE ID SEG @ CLB ZERO THIS WORD STB A,I ADA D2 STEP TO THE DCB POINTER. LDA A,I GET THE ADDRESS SZA,RSS DCB IN CORE NOW ? JMP DELT1 NO, DONT WORRY ABOUT THE DCB * LDB FCORE GET THE POINTER TO THE 1ST FREE DCB STB A,I SET IT AS NEXT TO CUJ\RRENT DCB STA FCORE SET CURRENT DCB AS 1ST FREE DCB. * LDA LAST WAS IT THE CPA DELAD LAST DCB IN CORE ? INA,RSS YES JMP DELT1 NO LDA A,I STA LAST RESTORE "LAST" * DELT1 LDA DELAD JSB COUT REMOVE RFAMD ENTRY FROM IS LIST * * NOW INSERT IT IN THE FREE RFAMD LIST. * LDB BFREE GET ADDRESS OF 1ST FREE ENTRY STB DELAD,I SET AS NEXT TO CURRENT LDA DELAD GET ADDRESS OF CURRENT STA BFREE SET AS FIRST IN FREE LIST * JMP DELET,I ALL DONE, RETURN. SPC 3 * * THIS ROUTINE REMOVES AN ENTRY FROM THE RFAMD LIST AND * RESTORES THE LINKS AROUND IT. THE ADDRESS OF THE ENTRY * TO BE REMOVED IS PASSED IN A REG. THIS ROUTINE INCLUDES * PROTECTION FOR REMOVAL OF FIRST OR LAST ENTRY AND * CHANGE OF "FIRST" IF 1ST ENTRY IS REMOVED. * COUT NOP STA DELAD INA STEP TO PREVIOUS LDA A,I GET PREV(DELAD) LDB DELAD,I GET NEXT(DELAD) INB STEP TO PREV(NEXT(DELAD)) STA B,I PREV(NEXT(DELAD)) <= PREV(DELAD) LDB DELAD,I GET NEXT(DELAD) SZA,RSS ANY PREV ? STB FIRST NO, FIRST <= NEXT(DELAD) STB A,I NEXT(PREV(DELAD)) <= NEXT(DELAD) JMP COUT,I RETURN SPC 3 * * THIS ROUTINE WILL INSERT AN RFAMD ENTRY BEFORE THE ENTRY POINTED * AT BY PNTR1, THE ADDRESS OF THE ENTRY TO BE INSERTED IS IN CRFAD. * PNTR1 SHOULD NOT BE = 0. THIS ROUTINE WILL TAKE CARE OF THE * CASE WHERE PNTR1 POINTS TO THE FIRST ENTRY. * INSRT NOP STA PNTR1 SAVE ADDRESS OF ENTRY CPA CRFAD ALREADY IN PLACE ? JMP INSRT,I YES INA STEP TO PREVIOUS LDA A,I GET ADDRESS OF PREVIOUS. LDB CRFAD INB STA B,I PREV(CRFAD)<=PREV(PNTR1) LDB CRFAD SZA DOES PNTR1 POINT TO THE 1ST ENTRY ? STB A,I NO, NENXT(PREV(PNTR1))<=CRFAD LDA PNTR1 STA B,I NEXT(CRFAD)<=PNTR1 INA STB A,I PREV(PNTR1)<=CRFAD LDA 1 RETURN CRFAD IN A * JMP INSRT,I RETURN SPC 3 * * THIS ROUTINE WILL CALCULATE AN RFAMD ENTRY #. * THE ADDRESS OF THE ENTRY IS PASSED IN THE A REGISTER. * THE RESULT IS RETURNED IN A REGISTER. * IS A TABLE DISCREPENCY IS DETECTED, WE JUMP TO * THE PROPER ERROR ROUTINE (-29) * FNDX NOP STA TMPNX SAVE THE ADDRESS CLB CMA,INA ADA END SSA IS THE ENTRY IN PART 1 ? JMP INDX2 NO LDA START YES (A>0) JMP INDX3 * INDX2 LDA XSTRT GET ADDRESS OF FWA 2ND PART LDB ENT#1 GET # ENTRIES IN 1ST PART INDX3 STB ENTN INITIALIZE THE NUMBER OF ENTRIES CMA,INA ADA TMPNX FIND THE DISTANCE FROM FIRST WORD DIV D9 DIVIDE BY LENGTH OF ENTRY SZB THIS IS TO TEST THE VALIDITY OF CRFAD JMP ERR29 NO GOOD !!! ADA ENTN ADD TO DISPLACEMENT JMP FNDX,I RETURN SPC 3 * * THIS ROUTINE CALCULATES THE DISC ADDRESS OF A DCB * AND STORES IT IN CTRK AND CSCT (RESPECTIVELY TRACK * AND SECTOR). UPON ENTRY TO THIS ROUTINE, A CONTAINS * THE NUMBER OF THE MATCHING RFAMD ENTRY. * CALDS NOP CLB DIV DCBTR DIVIDE BY THE NUMBER OF DCB'S PER TRACK ADA ISTRK ADD THE # OF THE 1ST TRK STA CTRK SAVE THE TRACK NUMBER LDA B MPY D3 STA CSCT SAVE THE SECTOR # * JMP CALDS,I RETURN SPC 3 * * CALLING SEQUNCE : JSB BRN41 * * * BRN41 NOP JSB BRN84 SET UP THE PARAMETERS FOR THE SCAN. BRN4L JSB SERCH SCAN THE LIST. JMP BRN41,I UNSUCCESFUL SEARCH => OK. * JSB US? JMP NOTUS THIS IS NOT OUR ENTRY * * SINCE THtSIS FILE IS ALREADY OPENED TO US AND WE TRY * TO OPEN IT AGAIN, WE WILL ACT AS THE FMP: DELETE * CURRENT ENTRY AND REOPEN THE FILE (IF POSSIBLE). * LDB PNTR1,I GET NEXT TO CURRENT STB PNTR1 UPDATE THE POINTER FOR THE REST OFTHE SCAN JSB DELET GO DELETE THIS ENTRY JMP BRN4L CONTINUE THE SCAN. * NOTUS SSB SIGN BIT SET ? (I.E. EXCLUSIVE OPEN) JMP ERR41 YES, FORGET ABOUT OPENING THIS ONE. * * THE FILE HAS BEEN FOUND TO BE OPEN, BUT NOT EXCLUSIVELY * ARE WE TRYING TO OPEN IT EXCLUSIVELY ? * LDA PARMB+11 GET OUR OPEN OPTION SLA,RSS BIT 1 SET ? JMP ERR41 NO, REJECT. LDA PNTR1,I GET NEXT TO CURRENT. STA PNTR1 RESET SEARCH POINTER. JMP BRN4L CONTINUE THE SCAN. * ERR41 ISZ BRN41 SET FOR BAD RETURN JMP BRN41,I SPC 3 * * THIS ROUTINE WILL DO THE SPECIAL SEARCH FOR * THE FLUSH PREPROCESSOR * BRN62 NOP JSB SERCH JMP BRN62,I UNSUCCESSFUL RETURN LDB PARMB+9 GET THE OWNER'S NODE CPB DM1 FLUSH ALL ? JMP BRN63 YES LDA PNTR1 GET ENTRY ADDRESS ADA D7 STEP TO THE NODE # LDA A,I GET IT ELA,CLE,ERA STRIP THE SIGN BIT CPA PARMB+9 DESIRED NODE ? JMP BRN63 YES LDA PNTR1 STA FLFLG SET THE FLUSH FLAG FOR "NO CLOSE" LDA PNTR1,I NO, CONTINUE THE SEARCH STA PNTR1 JMP BRN62+1 * BRN63 ISZ BRN62 SET FOR OK RETURN JMP BRN62,I RETURN SPC 3 * * THIS ROUTINE WILL SEARCH THE RFAMD TABLE FOR AN ENTRY * WITH A CERTAIN FILE NAME AND CARTRIDGE NUMBER. * CALL: PNTR1 SHOULD CONTAIN THE ADDRESS OF THE FIRST * ENTRY TO BE LOOKED AT. * FNAME SHOULD CONTAIN THE FILE NAME AND THE * CARTRIDGE NUMBER (TOTAL 4 WORDS) * RETURN: PNTR1=0 => UNSUCCESSFUL SEARCH RETURN AT * 7 JSB + 1 * PNTR1#0 => SUCCESSFUL SEARCH, RETURN AT JSB+2, PNTR1 * CONTAINS THE ADDRESS OF THE MATCHING ENTRY. * SERCH NOP LDB PNTR1 GET ADDRESS OF 1ST ENTRY. JMP SRC1 GO CHECK FOR END OF LIST * SRCLP ADB D2 STEP TO THE 1ST NAME WORD LDA FNAMA CMW D4 COMPARE JMP SRC3 SUCCESSFUL SEARCH NOP LDB PNTR1,I GET ADDRESS OF NEXT ENTRY STB PNTR1 RESET RUNNING POINTER SRC1 SZB END OF LIST ? JMP SRCLP NO, CONTINUE THE SEARCH JMP SERCH,I YES, UNSUCCESSFUL SEARCH SRC3 ISZ SERCH SET SUCCESSFUL RETURN JMP SERCH,I RETURN SPC 3 * * THIS ROUTINE WILL PICK UP THE RFAMD ENTRY # IN PARMB+6. * IT WILL CHECK FOR BOUNDS AND FOR THE OWNER ID. * IF ALL IS OK, RETURN AT JSB+1 WITH A REGISTER POINTING * TO THE ENTRY. ELSE RETURN AT ERR26. * ENTCK NOP LDA PARMB+6 GET ENTRY # SSA POSITIVE ? JMP ERR26 NO, ILLEGAL. CMA ADA ENT#T COMPARE WITH TOTAL # OF ENTRIES SSA JMP ERR26 ENT#>TOTAL # ENTRIES LDB START GET ADDRESS OF 1ST ENTRY IN LINEAR ORDER LDA ENT#1 GET # ENTRIES IN 1ST PART CMA,INA ADA PARMB+6 ADD ENTRY CURRENT ENTRY NUMBER SSA,RSS IS ENTRY IN 1ST PART ? LDB XSTRT NO, RESET START ADDRESS STB TSTRT SAVE LDA PARMB+6 MPY D9 * ENTRY # IN ITS PART BY THE ENTRY LENGTH ADA TSTRT ADD TO START. * * NOW, A CONTAINS A POINTER TO THE CURRENT ENTRY * LDB A ADB D6 STEP TO OWNER'S ID LDB B,I GET IT CPB PARMB+5 DOES IT MATCH ? SZB,RSS YES, MAKE SURE IT'S NOT ZERO JMP ERR26 NO, THIS IS NOT US LDB A ADB D7 STEP TO THE NODE# LDB B,I GET IT ELB,CLE,ERB STRIP SIGN BIT OFF CPB PARMB+2 DOES IT MATCH CURRENT REQUESTER'S NODE #? JMP ENTCK,I YES JMP ERR26 NO, INTRUDER SPC 3 * * THIS ROUTINE WILL COMPARE THE OWNER ID PART OF AN * RFAMD ENTRY WITH THE OWNER ID OF THE CURRENT REQUEST. * CALLING SEQUENCE: * JSB US? * "PNTR1" IS IN A * RFAMD "NODE" IS IN B * US? NOP LDA PNTR1 LDB A ADB D6 STEP TO OWNER'S ID LDB B,I GET IT CPB PARMB+9 DOES IT MATCH ? RSS JMP US?NO NO, THIS IS NOT US LDB A ADB D7 STEP TO THE NODE# LDB B,I GET IT ELB,CLE,ERB STRIP SIGN BIT OFF CPB PARMB+2 DOES IT MATCH CURRENT REQUESTER'S NODE #? ISZ US? YES, SET FOR OK RETURN US?NO LDB 0 ADB D7 ADDR OF RFAMD: 8TH WORD LDB 1,I GET IT (NODE) JMP US?,I RETURN SPC 3 * * THIS ROUTINE FILLS THE END OF THE CALL BUFFER WITH 0'S * THIS ROUTINE IS CALLED WITH B CONTAINING THE * ADDRESS OF THE 1ST WORD TO BE NOPED. * NOPS NOP CLA NOPS1 STA B,I INB CPB RTN END ? JMP NOPS,I YES JMP NOPS1 NO SPC 3 * * THIS IS THE SKELETON OF THE FMP CALL * PARAM DEF LDCB+2 RETRN DEF LDCB CALL JSB CALLI,I CALL FMP ROUTINE NOP DEF RTRN LDCB NOP ADDRESS OF DCB IF ANY DEF IERR ERROR REP 8 NOP JMP DONE RETURN RTN DEF *-1 * CALLI NOP ADR OF FMP CALL HED RFAM: ERROR HANDLING * (C) HEWLETT-PACKARD CO. 1977 ERR06 LDA DM6 JMP ERRXX ERR11 LDA DM11 JMP ERRXX ERR08 LDA DM8 JMP ERRXX ERR25 LDA DM25 JMP ERRXX ERR26 LDA DM26 JMP ERRXX ERR28 LDA DM28 JMP ERRXX DSCER CCA,RSS ERR29 LDA DM29 * ERRXX STA IERR SET THE ERROR CODE IN THE REPLY JMP BRN7 AND SHIP IT. SPC 3 HED RFAM: CONSTANTS * (C) HEWLETT-PACKARD CO. 1977 A EQU 0 B EQU 1 DM29 DEC -29 DM28 DEC -28 DM26 DEC -26 DM25 DEC -25 DM14 DEC -14 DM11 DEC -11 DM9 DEC -9 DM8 DEC -8 DM7 DEC -7 DM6 DEC -6 DM1 DEC -1 D0 DEC 0 D1 DEC 1 D1I OCT 100001 D2 DEC 2 D2I OCT 100002 D3 DEC 3 D4 DEC 4 D5 DEC 5 D6 DEC 6 D9 DEC 9 D12 DEC 12 D13I OCT 100015 D99 DEC 99 D125 DEC 125 D144 DEC 144 D512 DEC 512 XEQT EQU 1717B BGLWA EQU 1777B SECT2 EQU 1757B BIT14 OCT 40000 B77 OCT 77 MAGLU OCT 177400 1ST DCB ENTRY FOR "M" MAGIC LU'S START NOP ADDRESS OF LINEAR 1ST RFAMD ENTRY FIRST NOP HEAD POINTER OF THE RFAMD LIST LAST NOP POINTER TO THE LAST DCB-IN-CORE RFAMD * ENTRY BFREE NOP HEAD POINTER OF THE RFAMD FREE LIST FCORE NOP HEAD POINTER OF THE DCB FREE LIST XSTRT NOP ENT#1 NOP NUMBER OF RFAMD ENTRIES IN PART 1 ENT#T NOP NUMBER OF RFAMD ENTRIES (TOTAL) ISTRK NOP ADDRESS OF DISC TRACKS CONTAINING IDISC NOP THE DCB'S DCBTR NOP NUMBER OF DCB'S PER TRACK LENA DEF LEN FNAMA DEF FNAME NAMA DEF PARMB+5 @ OF THE FILE NAME CRA DEF PARMB+8 @ OF THE ICR SECUA DEF PARMB+10 @ OF ISECU RFMDA DEF RFAMD HED RFAM: VARIABLES * (C) HEWLETT-PACKARD CO. 1977 PNTR1 NOP CNTR1 NOP TMP1 NOP CTRK NOP CSCT NOP TSTRT NOP FNAME BSS 4 IERR1 NOP LENGT NOP CRFAD NOP ADDRESS OF CURRENT RFAMD ENTRY LEN NOP ENTN NOP OPT03 NOP PRMBL NOP DFLFL NOP IERR NOP TMPAD NOP DELAD NOP RQLN NOP REQUEST LENGTH TMPNX NOP FLFLG NOP SWNX NOP HED RFAM: TABLES * (C) HEWLETT-PACKARD CO. 1977 BRNCH DEF *+1,I DEF BRN1 DAPOS DEF BRN2 DCLOS DEF BRN1 DCONT DEF BRN3 DCRET DEF BRN1 DLOCF DEF BRN8 DNAME DEF BRN4 DOPEN DEF BRN1 DPOSN NLH DEF BRN8 DPURG DEF BRN1 DREAD DEF BRN10 DSTAT DEF BRN1 DWIND DEF BRN1 DWRIT DEF BRN6 FLUSH * JSBTB DEF *+1 DEF APOSN DEF CLOSE DEF FCONT DEF CREAT DEF LOCF DEF NAMF DEF OPEN DEF POSNT DEF PURGE DEF READF NOP DEF RWNDF DEF WRITF DEF CLOSE FLUSH * BLDTB DEF *+1,I CALL BUILDING TABLE DEF BLD0 DAPOS DEF BLD0 DCLOS DEF BLD0 DCONT DEF BLD3 DCRET DEF BLD4 DLOCF DEF BLD5 DNAME DEF BLD6 DOPEN DEF BLD0 DPOSN DEF BLD8 DPURG DEF BLD9 DREAD NOP DEF BLD0 DWIND DEF BLD12 DWRIT DEF BLD0 FLUSH * SPC 3 FaNLNTBL DEF *+1 REPLY LENGTH TABLE D7 DEC 7 DAPOS DEC 7 DCLOS DEC 7 DCONT D8 DEC 8 DCRET D14 DEC 14 DLOCF DEC 7 DNAME DEC 8 DOPEN DEC 7 DPOSN DEC 7 DPURG DEC 8 DREAD DEC 7 DSTAT DEC 7 DWIND DEC 7 DWRIT DEC 7 FLUSH SPC 3 PSTBL DEF *+1,I POST PROCESSING TABLE DEF BRN7 DAPOS DEF BRN7 DCLOS DEF BRN7 DCONT DEF PST04 DCRET DEF BRN7 DLOCF DEF PST05 DNAME DEF PST03 DOPEN DEF BRN7 DPOSN DEF PST05 DPURG DEF PST02 DREAD NOP DEF BRN7 DWIND DEF BRN7 DWRIT DEF PST08 FLUSH HED RFAM: BUFFERS * (C) HEWLET-PACKARD CO. 1977 PARMB REP 14 NOP * DTBFR BSS 512 . EQU * ORG DTBFR MS1 ASC 17,RFAM: LIMITED BUFFER SPACE, THE NU ASC 19,MBER OF FILES HAS BEEN LIMITED TO MS1A DEF *-2 MS2 ASC 17,RFAM: LIMITED DISC SPACE, THE NUMB ASC 19,ER OF FILES HAS BEEN LIMITED TO MS2A DEF *-2 BSS 8 FILLER HED RFAM: INITIALIZATION * (C) HEWLETT-PACKARD CO. 1977 * * THIS PART IS THE INITIALIZATION. ALL CODE IN THIS * SECTION MUST LIE WITHIN THE DATA BUFFER AREA 'DTBFR', * AND WILL BE OVERLAYED WITH DATA LATER. IT MUST NOT * EXCEED THE 'DTBFR' AREA SINCE THE RFAMD AND IN-CORE * DCB'S FOLLOW IMMEDIATELY AFTER. IF EXCEEDED, THE * 'EQU' AT 'CHECK' SHOULD GIVE AN ASSEMBLY ERROR. * * THE INITIALIZATION WORKS AS FOLLOW: * 1) FIND HOW MUCH ROOM WE HAVE IN THE PROGRAM * ITSELF AND AFTER THE PROGRAM, IN ITS PARTITION * 2) LINK THE RFAMD TABLE, RESERVING AS MANY * ENTRIES AS REQUIRED IN THE CALL FROM LSTEN * 3) DEPENDING ON THE ROOM LEFT,: REQUIRE DISC TRACKS * FOR THE DISC RESIDENT DCB'S. * 4) LINK THE IN-CORE DCB LIST. * * * * DESCRIPTION OF AN RFAMD ENTRY * * 1) RFAMD ENTRY IN THE ACTIVE LIST (I.E. CURRENTLY USED) * W0 POINTER TO NEXT ENTRY * W1 POINTER TO PREVIOUS ENTRY * W2-W4 FILE NAME. * W5 CARTRIDGE NUMBER * W6 ID SEGMENT ADDRESS ! FILE "OWNER" * W7 NODE NUMBER. BIT 15! IDENTIFICATION * SET INDICATES AN * EXCLUSIVE OPEN * W8 DCB POINTER. THIS WORD IS EQUAL TO 0 IF THE * DCB IS CURRENTLY DISC RESIDENT. IT IS EQUAL * TO THE ADDRESS OF THE DCB IF THE DCB IS IN * CORE. * * 2) RFAMD ENTRY IN THE FREE LIST (I.E. NOT CURRENTLY USED) * W0 POINTER TO THE NEXT ENTRY * W1-W9 DONT CARE * * * DESCRIPTION OF A DCB ENTRY * * * 1) DCB IN THE ACTIVE LIST * W0-W143 144 WORD DCB * * 2) DCB IN THE FREE LIST * W0 POINTER TO THE NEXT FREE DCB SPACE * W1-W143 DONT CARE * * * IN ALL FOUR THREADED LISTS OF THIS PROGRAM, THE END * OF LIST MARKER IS A NULL (0) POINTER TO THE NEXT ENTRY. * * FOR THE DESCRIPTION OF THE HEAD OF LIST POINTERS, REFER * TO THE "CONSTANTS" SECTION IN THE PERMANENT PART OF THIS * PROGRAM. * SPC 3 INIT JSB EXEC SWAP CONTROL DEF *+3 DEF D22 SWAP ALL PARTITION DEF D3 * * LDA XEQT GET OUR ID SEG ADR ADA D14 POINT TO WORD 15 ('TYPE') LDA A,I GET IT AND B7 ISOLATE 'TYPE' MODULO 8 CLB CPA D1 ARE WE MEMORY RESIDENT? INB YES, SO NO DCB'S IN EXTENSION STB FLG1 SET EXTENSION |FLAG * LDA XEQT GET OUR CURRENT ID SEGMENT ADDRESS ADA D23 POINT TO HI MAIN ADDR + 1 LDA 0,I GET IT STA XSTRT SAVE (XTENTION START) * LDA FLG1 GET EXTENSION FLAG SZA CAN WE HAVE DCB'S IN EXTENSION? JMP INIT4 NO LDA XSTRT YES, SO MAY BE ROOM FOR CMA,INA SOME DCB'S. ADA BGLWA CALCULATE ROOM AVAILABLE IN EXTENSION ADA DM143 FIND IF THERE IS ENOUGH CLB ROOM IN THE EXTENSION FOR AT SSA LEAST ONE DCB. INB NO, CAN'T HAVE DCB'S IN EXTENSION STB FLG1 SET A FLAG TO INDICATE THIS * * LDB #RFSZ GET THE # OF FILES REQUESTED STB RFSZ ADB DM1 TEST FOR <=0 SSB "NO SWAP" REQUEST ? JMP NOSWP YES * INIT4 CLA INITIALIZE # RFAMD ENTRIES STA ENT#1 STA ENT#T * * LINK THE FREE RFAMD LIST * THE HEAD POINTERS ARE: * BFREE (FREE LIST) * FIRST (CURRENT LIST) * LAST (LAST ENTRY REFERING TO AN IN-CORE DCB) * START (ADDRESS OF THE FIRST RFAMD ENTRY IN * LINEAR ORDER) * INIT5 LDA RFSZ GET THE # OF ENTRIES REQUESTED CMA,INA STA CNTR1 USE AS COUNTER * * THE RUNNING POINTER PNTR1 IS ALREADY INITIALIZED * LDA RFMDA GET ADDRESS OF TABLE START STA START STA BFREE STA PNTR1 SET ALL POINTERS * LOOP1 LDB FLG1 GET THE "SMALL EXTENSION" FLAG SZB,RSS SET ? JMP LOP12 NO, NO PROBLEM ADA D153 SEE IF ENOUGH ROOM LEFT IN THE INTERNAL CMA,INA BUFFER FOR ONE MORE DCB & RFAMD ENTRY ADA END SSA,RSS JMP LOP13 YES, ENOUGH ROOM CLA NO, NOT ENOUGH ROOM LDB PNTR1 ADB DM9 STEP BACK TO LAST ENTRY STA B,I SET IT AS LAST ENTRY OF THE LIST. LDA ENT#1 STA ENT#T SET THE TOTAL # OF ENTRIES JMP TREQ GO TAKE CARE OF SWAPPING * LOP12 ADA D17 CMA ADA END COMPARE WITH THE END OF THE 1ST PART SSA WILL THERE BE ENOUGH ROOM FOR THE NEXT * ENTRY? JMP INT01 NO LOP13 LDA PNTR1 YES GET CURRENT POINTER AGAIN ADA D9 GET ADDRESS OF NEXT ENTRY STA PNTR1,I SAVE AS "NEXT" TO CURRENT ENTRY STA PNTR1 PUSH CURRENT POINTER TO NEXT ENTRY ISZ ENT#1 INCREMENT # OF ENTRIES IN 1ST PART * ISZ CNTR1 INCREMENT REQUIRED-ENTRIES COUNTER JMP LOOP1 CONTINUE CLA SET THE END OF LIST MARK LDB PNTR1 ADB DM9 STEP BACK TO THE LAST ENTRY STA B,I LDA ENT#1 GET NUMBER OF ENTRIES IN PART #1 STA ENT#T SAVE AS TOTAL NUMBER OF ENTRIES JMP TREQ NOW GO DO THE TRACK REQUEST IF NECESSARY * SPC 3 * * WE COME HERE IF THERE IS NOT ENOUGH ROOM IN THE FIRST * PART (I.E. INSIDE THE PROGRAM) FOR THE ENTIRE RFAMD TABLE. * INT01 ISZ ENT#1 INC # ENTRIES IN 1ST PART LDB ENT#1 STB ENT#T SET CURRENT TOTAL # ENTRIES ISZ CNTR1 ALL DONE BUT ONE ? RSS NO JMP INT04 YES, SPECIAL CASE LDA XSTRT GET ADDRESS OF THE 1ST WORD OF 2ND PART STA PNTR1,I SAVE AS "NEXT" TO CURRENT ENTRY STA PNTR1 UPDATE RUNNING POINTER TO NEXT ENTRY JMP LOP11 CONTINUE * INT04 CLA SET THE END OF LIST MARK STA PNTR1,I LDA XSTRT STA PNTR1 RESET PNTR1 TO THE SECOND PART JMP TREQ GO REQUEST TRACKS IF NECESSARY SPC 3 LOP11 ADA D153 SEE IF WE HAVE ENOUGH SPACE FOR 1 DCB CMA AND ONE RFAMD ENTRY. ADA BGLWA COMPARE WITH FWA SYSTEM MEMORY. SSA,RSS ENOUGH ROOM ? JMP LOP21 YES CLA NO, TERMINATE THE LIST = LDB PNTR1 STEP BACK ADB DM9 TO PREVIOUS ENTRY STA B,I MARK IT AS LAST ENTRY ISZ ENT#T JMP TREQ GO TAKE CARE OF THE SWAPPING. * LOP21 LDA PNTR1 GET ADDRESS OF CURRENT ENTRY AGAIN LDB PNTR1 ADA D9 STEP TO NEXT ENTRY STA PNTR1,I SAVE AS "NEXT" TO CURRENT ENTRY STA PNTR1 UPDATE RUNNING POINTER ISZ ENT#T INC THE TOTAL NUMBER OF ENTRIES ISZ CNTR1 ALL DONE ? JMP LOP11 NO, CONTINUE CLA YES, SET THE END OF LIST MARK STA B,I SPC 3 * * BY THE TIME WE COME HERE, THE COMPLETE RFAMD LIST WILL BE * LINKED AS A FREE LIST. PNTR1 NOW POINTS TO THE NEXT * AVAILABLE WORD, I.E. THE 1ST WORD OF THE IN-CORE DCB SPACE. * WE WILL NOW CALCULATE THE NUMBER OF DCB'S WE CAN KEEP IN CORE * AT A TIME AND REQUEST DISC TRACK(S) IF THIS NUMBER IS LESS * THAN THE NUMBER OF RFAMD ENTRIES WE HAVE. * TREQ LDA PNTR1 GET ADDRESS OF NEXT WORD CMA,INA ADA END FIND # OF WORDS IN 1ST PART SSA,RSS JMP INT02 CLA A<0 => NO ROOM IN PART 1 STA PRT1# => NO DCB IN PART 1 LDA PNTR1 JMP INT03 INT02 CLB SET B FOR DIVISION DIV D144 DIVIDE SPACE BY LENGTH OF 1 ENTRY STA PRT1# SAVE THE INTEGER PART AS # DCB IN 1ST PART LDA XSTRT GET ADDRESS OF 1ST WORD OF SECOND PART * * HERE WE LOOK AT PART 2 IN THE SAME FASHION * INT03 CMA,INA ADA BGLWA GET ROOM IN XTENTION(SIGN ALREADY TESTED) CLB SET B FOR DIVISION DIV D144 LDB FLG1 GET EXTENSION FLAG SZB CAN WE HAVE DCB'S IN EXTENSION? CLA NO, SO SET PRT2# TO ZERO STA PRT2# SAVE # DCB'S IN PART 2 ADA PRT1# FIND TOTAL NUMBER OF IN-CORE DCB'S STA TOT# SAVE SPC 3 * * NOW WE DECIDE IF WE NEED ANY DISC SPACE. * LDA ENT#T GET # O*F RFAMD ENTRIES CMA,INA ADA TOT# COMPARE TO # OF IN-CORE DCB'S CLB SET FOR NEXT DIVISION SSA,RSS JMP GREAT A=0 OR A>0 * * A>=0 : * I HAVE GOOD NEWS FOR YOU: WE DONT NEED ANY DISC SPACE * THIS ALSO MEANS THAT THERE WILL BE NO DCB SWAPPING * => FASTER FILE ACCESS. GO LINK THE DCB'S * * HERE WE FIND HOW MANY TRACKS WE NEED, AND WE REQUEST * THEM. WE NEED 3 SECTORS (64 WORDS EACH) PER TRACK. * LDA $OPSY FIRST WE BETTER SEE IF RAR,RAR WE EVEN HAVE A SYSTEM DISC. SLA,RSS DO WE? JMP NOSWP NO, WE ARE IN RTE-M * LDA TRK# SEE IF THE TRACKS ARE ALREADY SZA ASSIGNED (SECOND TIME AROUND) JMP GREAT YES THEY ARE * LDA SECT2 GET THE NUMBER OF SECTORS PER TRACK DIV D3 STA DCBTR SAVE THE NUMBER OF DCB'S/TRACK LDA ENT#T GET # OF RFAMD ENTRIES CLB DIV DCBTR DIVIDE BY THE NUMBER OF DCB'S/TRACK SZB INA ROUND TO NEXT TRACK IOR BIT15 SET THE NO WAIT BIT STA TRK# SAVE * * WE SET THE NO-WAIT BIT SINCE IF WE CANT GET THE TRACKS * WE WANT WE WILL TRY TO COMPROMISE. * JSB EXEC DEF *+6 DEF D4 TRACK REQUEST DEF TRK# DEF ISTRK NUMBER OF 1ST TRACK DEF IDISC LU OF DISK DEF ISEC # SECTORS/TRACK (FORGET IT) * CCA GOOD ALLOCATION ? CPA ISTRK RSS JMP GREAT YES, GO LINK THE DCB'S SPC 3 LOWER ADA TRK# TRY TO SETTLE FOR ONE LESS TRACK STA TRK# SZA,RSS IS THIS NO TRACK AT ALL ? JMP NOSWP YES! GO TO THE OPTIMISATION ROUTINE * JSB EXEC DEF *+6 DEF D4 DEF TRK# DEF ISTRK DEF IDISC DEF ISEC * CCA CPA ISTRK HOW WAS THIS ONE ? JMP LOWER BAD, CONTINUE TO REDUCE OUR REQUEST LDA TRK# {3OK, NOW FIND HOW MANY DCB'S MPY DCBTR WE ARE ALLOWED TO HAVE STA RFSZ JMP INIT4 TRY AGAIN SPC 3 * * WE WILL FIND HERE THE LARGEST POSSIBLE # OF ENTRIES * NOT REQUIRING DCB SWAPPING. * NOSWP LDA FLG1 GET EXTENSION FLAG SZA ARE DCB'S ALLOWED IN EXTENSION? JMP NSWP2 NO, DEFAULT TO MINIMUM LDA XSTRT YES CMA,INA ADA BGLWA FIND SIZE OF INTERNAL BUFFER STA Y LDB RFMDA CMB,INB ADB END FIND THE SIZE OF THE INTERNAL BUFFER STB X ADA B TOTAL SIZE CLB DIV D153 FIND IDEAL NUMBER STA IDEAL SAVE THE RESULT MPY D9 FIND SIZE OF RFAMD IN THIS CONFIGURATION CMA,INA ADA X FIND ROOM LEFT IN 1ST BUFFER AFTER SSA THE IDEAL RFAMD HAS BEEN BUILD.ANY ROOM ? JMP NSWP1 NO * CLB DIV D144 FIND # OF DCB'S THAT WOUD BE ALLOWED TO STA IERR BE IN INTERNAL BUFFER STB IERR1 CLB LDA Y DIV D144 FIND # OF DCB'S IN EXTENSION ADA IERR TOTAL # NSWP4 SZA,RSS NONE ? JMP NSWP2 GO DEFAULT TO MINIMUM * CPA IDEAL JMP NSWP3 IDEAL, DONE LDB A INB CPB IDEAL JMP NSWP3 LDB IERR1 FIND REMAINDER OF PREVIOUS DIVISION ADB DM10 SSB EASY TO IMPROVE ? INA YES JMP NSWP3 DONE * NSWP1 CLB LDA X DIV D9 GET # RFAMD ENTRIES IN 1ST PART CMA,INA ADA IDEAL # ENTRIES IN EXTENSION STA RQLN SAVE TEMPORARILY MPY D9 RFAMD SPACE IN EXTENSION CMA,INA ADA Y DCB SPACE IN EXTENSION CLB DIV D144 # DCB'S IN EXTENSION STA IERR LDA RQLN SZA,RSS 1ST DCB STARTS AT THE BEGINNING OF XTENTION ? LDB D99 YES STB IERR1 LDA IERR  RETRIEVE # DCB'S IN EXTENSION JMP NSWP4 D23 DEC 23 * NSWP2 LDA D2 GET MINIMUM # DCB'S NSWP3 STA RFSZ JMP INIT4 SPC 3 * * HERE WE LINK THE DCB'S AS A FREE LIST * GREAT LDA PNTR1 ADDRESS OF THE FWA STA FCORE SET THE HEAD-OF-THE-FREE-DCB-LIST-POINTER * CLB CPB PRT1# DID WE FIND ROOM IN 1ST PART ? JMP INIT1 NO, => THERE IS ROOM IN PART 2 (ALREADY * TESTED FOR) * INB CPB PRT1# JMP INIT2 CURRENT IS LAST IN PART 1 LDB PRT1# CMB,INB STB CNTR1 SET COUNTER JMP LOOP4 * * IF PNTR1 IS STILL IN THE 1ST PART, WE HAVE TO UPDATE * FCORE AND PNTR1 TO XSTRT. * INIT1 CMA,INA -PNTR1 INA ADA END FIND IF PNTR1 IS IN THE 1ST PART SSA JMP INIT3 A<0 => PNTR1 IN 2ND PART, OK LDA XSTRT GET ADDRESS OF 2ND PART STA FCORE RESET FREE DCB LIST HEAD POINTER STA PNTR1 RESET RUNNING POINTER JMP INIT3 START LINKING * LOOP2 ADA D144 GET ADDRESS OF NEXT DCB STA PNTR1,I SET "NEXT" TO CURRENT STA PNTR1 UPDATE RUNNING POINTER LOOP4 ISZ CNTR1 JMP LOOP2 * INIT2 LDB PRT2# SZB,RSS IS THERE ROOM IN PART 2 ? JMP INIT6 NO, QUIT LDA XSTRT GET ADDRESS OF FWA IN 2ND PART STA PNTR1,I SAVE AS "NEXT" TO CURRENT STA PNTR1 UPDATE RUNNING POINTER * * HERE WE LINK THE 2ND PART OF THE DCB FREE LIST * INIT3 LDA PNTR1 CLB,INB GET A 1 CPB PRT2# ONLY ONE LEFT ? JMP INIT6 YES, TERMINATE * LOOP3 ADA D144 GET THE ADDRESS OF THE NEXT DCB STA PNTR1,I SAVE AS "NEXT" TO CURRENT STA PNTR1 UPDATE RUNNING POINTER INB INC COUNT CPB PRT2# DONE ? RSS YES JMP LOOP3 NO, CONTINUE * INIT6 CLA SET THE END OF LIST MARK STA PNTRo36401,I * * WE WILL NOW REPORT TO THE OPERATOR THE ACTUAL NUMBER * OF FILES IF THIS NUMBER IS NOT WHAT WAS REQUESTED. * WE WILL ALSO GIVE A REASON FOR THE CHANGE. * LDA ENT#T CCE CPA RFSZ JMP INIT7 JSB $LIBR NOP STA #RFSZ RESET #RFSZ FOR LATER RESCHEDULES JSB $CVT3 JSB $LIBX DEF *+1 DEF *+1 INA DLD A,I SET THE # OF FILES IN THE MESSAGE DST MS1A,I JSB EXEC DEF *+5 DEF D2 DISPLAY THE MESSAGE DEF D1 DEF MS1 DEF MSL1 * JMP GO * INIT7 LDA RFSZ CPA #RFSZ CHANGE DUE TO TRACK ALLOCATION PROBLEM ? JMP GO NO CCE JSB $LIBR NOP STA #RFSZ JSB $CVT3 JSB $LIBX DEF *+1 DEF *+1 INA DLD A,I FORMAT THE MESSAGE DST MS2A,I JSB EXEC DEF *+5 DEF D2 DEF D1 DEF MS2 DEF MSL2 * JMP GO PRT1# NOP PRT2# NOP TOT# NOP TRK# NOP ISEC NOP RFSZ NOP * MSL1 DEC 36 MSL2 EQU MSL1 B7 OCT 7 D17 DEC 17 D22 DEC 22 BIT15 OCT 100000 DM143 DEC -143 DM10 DEC -10 D153 DEC 153 X NOP Y NOP IDEAL NOP FLG1 NOP CHECK EQU .-* WILL GIVE ERROR IF INIT TOO LARGE RFAMD EQU . RFAMD'S START HERE * ORG .+306 LEAVE ROOM FOR 2 RFAMD'S & DCB'S * END DEF * END RFAM2 V6 @)j 91740-18005 1840 S C0222 &EXECM              H0102 |ASMB,R,L,C HED EXECM: 'EXEC' REQUEST PROCESSOR * (C) HEWLETT-PACKARD CO. 1978 * NAM EXECM,19,30 91740-16005 REV 1840 780721 SPC 1 * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * * *************************************************************** SPC 1 * * NAME: EXECM DS/1000 'EXEC' REQUEST MONITOR * SOURCE: 91740-18005 * RELOC: 91740-16005 * PGMR: C. HAMILTON [07/21/78] * SPC 2 EXT DRTEQ,PGMAD EXT $CLAS,$LIBR,$LIBX,$OPSY,EXEC EXT #BREJ,#GRPM,#NODE,#NCNT,#PLOG,#REQU,#RPCV,#RSAX A EQU 0 B EQU 1 KEYWD EQU 1657B XEQT EQU 1717B XTEMP EQU 1721B XPRIO EQU 1726B SUP SPC 2 EXECM JMP CONFG CONFIGURE: 1RST TIME; 'NOP' THEREAFTER. LDA B,I GET THE PASSED PARAMETER. IFZ EXT DBUG SZA JMP SETCL JSB DBUG DEF *+1 JSB EXEC DEF *+4 DEF D6 DEF D0 DEF D1 JMP EXECM+1 XIF * SETCL STA SAVCL SAVE CLASS NUMBER. IOR BIT15 PREPARE A NO-WAIT CLASS WORD # STA RDCLS FOR CLASS-READ REQUESTS. # ALR,RAR REMOVE BUFFER-SAVE BIT(#14) FROM CLASS. STA PURCL SAVE FOR CLASS-PURGE ROUTINE. AND B377 ISOLATE THE ORDINAL, # ADA DFCLS AND COMPUTE THE # STA CLTBA CLASS-TABLE ENTRY ADDRESS. # * SKP * WAITS IN GENERAL WAIT QUEUE, UNTIL A NEW REQUEST ARRIVES, * OR UNTIL A CLASS READ/WRITE/CONTROL REQUEST COMPLETES. * GET JSB EXEC PERFORM A CLASS 'GET', DEF *+8 IN ORDER TO UN-OBTRUSIVELY AWAIT DEF D21 ARRIVAL OF REQUESTS & I/O COMPLETION. DEF SAVCL SPECIFY: MONITOR'S CLASS DABFA DEF DABUF SPECIFY: DATA BUFFER ADDRESS. DEF D0 IGNORE DATA--INITIALLY. DEF SAMAD RETURNED: REQUEST BUFFER ADDRESS. DEF SAMLN RETURNED: REQUEST LENGTH. DEF SAMRC RETURNED: REQUEST CODE. * DST SAVA SAVE THE REGISTERS. * LDA D7 PREPARE FOR A STA RPLYL MINIMUM-LENGTH REPLY. CMA,INA ADA SAMLN IF THE REQUEST-LENGTH SSA IS LESS THAN THE MINIMUM: 7, JMP CLNUP IT CANNOT BE PROCESSED--IGNORE IT! * CLA SET =0, TO PREPARE STA BL/CP FOR REPLY W/O DATA. * LDA SAMLN GET THE REQUEST LENGTH. CAX PREPARE FOR POSSIBLE DMS WORD-MOVE. ADA DM16 IF THE REQUEST LENGTH SSA,RSS IS GREATER THAN 15 WORDS, JMP CLNUP THEN THE REQUEST IS UNACCEPTABLE! * LDA SAMAD SOURCE = REQUEST BUFFER IN S.A.M. LDB RQBFA DESTINATION = LOCAL REQUEST BUFFER. DMS1 MVW SAMLN OBTAIN REQUEST PARAMETERS ('MWF',IF DMS). * LDA RQBUF+4 GET THE REQUEST CODE FROM THE CALLER. STA RCODE SAVE THE REQUEST CODE FOR LATER USE. * LDB RQBUF GET THE STREAM WORD. # RBL,SLB,RBL IF THIS IS A NEW DS/3000 REQUEST, # JSB GD3K GO TO FLAG IT AS SUCH. # * # LDB SAMRC GET THE RETURNED REQUEST CODE. CLE,SZB IS THIS A NEW REQUEST? JMP RWCMP NO-PROCESS READ/WRITE/CNTRL COMPLETION. * JSB PLOG EXAMINE NEED FOR REQUEST LOGGING. * CPA D99 SPECIAL REQUEST FOR PROGRAM STATUS? JMP PGMST YES--GO TO ACCOMODATE THE CALLER. STA B NO.SAVE REQUEST CODE FOR VALIDITY CHECK. SZB IF REQUEST CODE=0--REJECT: ERROR "DS06"! ADB yUPLIM FORM A NEGATIVE TABLE INDEX. SSB,RSS 0 < REQUEST CODE < 27 ? JMP ERDS6 NO! OUT OF RANGE--ERROR: "DS06". * IOR BIT15 INCLUDE NO-ABORT BIT(#15), STA RQBUF+4 AND RESTORE THE REQUEST CODE. * ADB TABAD COMPUTE PRE-PROCESSOR ADDRESS. CLE PREPARE FOR A 'NO ERROR' REPLY. JMP B,I GO TO EXECUTE THE PRE-PROCESSING. * SPC 3 * ERROR PROCESSING SECTION. * ERDS6 LDB "06" "DS06": ILLEGAL REQUEST CODE. JMP GETDS ERDS8 LDB "08" "DS08": INSUFFICIENT RESOURCES. GETDS LDA "DS" JMP ERRTN ERIO1 LDB "01" "IO01": IMPROPER OR MISSING PARAMETER. JMP GETIO ERIO2 LDB "02" "IO02": ILLEGAL LOGICAL UNIT. JMP GETIO ERIO7 LDB "07" "IO07": DRIVER REJECTED ILLEGAL REQUEST. GETIO LDA "IO" JMP ERRTN ERSC1 LDB "01" "SC01": MISSING SCHEDULING PARAMETER. JMP GETSC ERSC2 LDB "02" "SC02": ILLEGAL SCHEDULING PARAMETER. JMP GETSC ERSC5 LDB "05" "SC05": PROGRAM NOT DEFINED. GETSC LDA "SC" * ERRTN CCE ERROR RETURN. JMP DONE * SPC 2 * "01" ASC 1,01 "02" ASC 1,02 "05" ASC 1,05 "06" ASC 1,06 "07" ASC 1,07 "08" ASC 1,08 "DS" ASC 1,DS "IO" ASC 1,IO "SC" ASC 1,SC * SKP * REPLY PROCESSING SECTION. * DONE DST RQBUF+4 STORE REGISTERS IN WORDS 5&6 OF REPLY. CLA,SEZ,RSS IF THIS IS A NORMAL RETURN, JMP CLERR GO TO CLEAR THE REPLY-ERROR INDICATOR. STA BL/CP ELSE, PREPARE FOR REPLY SANS DATA. LDB D7 ESTABLISH THE STB RPLYL MINIMUM-LENGTH REPLY. * CLERR LDA #NODE GET THE LOCAL NODE NUMBER. ELA,CLE,RAR INCLUDE ASCII-ERROR FLAG (BIT#15). STA RQBUF+6 STORE THE ERROR INDICATOR--IF ANY. * LDB CLTBA,I GET THE CLASS-HEADER ADDRESS. ADB D8 POINT TO THE DATA BUFFER. ADB BL/CP ESTABLISH THE REPLY AFTER THE DATA. STB RPLAD SAVE THE NEW REPLY ADDRESSׄ. * LDA RQBUF GET THE STREAM WORD. AND RPMSK REMOVE THE OLD RE-TRY COUNT, IOR #BREJ AND INCLUDE THE NEW. IOR BIT14 ADD THE REPLY FLAG (BIT#14). STA RQBUF RESTORE THE MODIFIED WORD. * LDA RPLYL GET THE REPLY LENGTH. CAX PREPARE FOR A DMS "MWI". CMA,INA ADA SAMLN IF THE REPLY-LENGTH EXCEEDS SSA THE AVAILABLE CLASS BUFFER, THEN INFORM JMP ERDS8 THE USER OF THE ERROR OF HIS WAYS! * JSB CLTCB GO TO CLEAR THE TRANSACTION RECORD. STA RQBUF+1 RESTORE THE ORIGINAL SEQUENCE NUMBER. * LDA RQBFA GET THE REPLY-DATA ADDRESS. LDB RPLAD GET THE REPLY ADDRESS IN S.A.M. JSB $LIBR NOP DMS2 MVW RPLYL MOVE REPLY TO CLASS BUFFER. [DMS: 'MWI'] JSB $LIBX DEF *+1 DEF REPLY * SKP * REPLY LDA RQBUF GET THE STREAM WORD. # RAL,CLE,SLA,ERA SET = DS/3000 BIT(#15)--IF ANY. # JMP LOCAL DS/3000 REPLY: REQUEUE VIA #RPCV. # LDA RQBUF+2 GET THE SOURCE NODE NO. CPA #NODE IF THE REPLY IS FOR THIS NODE, JMP LOCAL THEN RE-QUEUE IT TO <#GRPM>. * DLD #NCNT GET NRV SIZE AND ADDRESS CAX X HAS COUNTER FOR NODAL ADDRESS PAIRS * NLOOP LDA B,I GET A NODAL ADDRESS FROM THE NRV TABLE. NOP (XLA B,I IN THESE 2 INSTRUCTIONS IF DMS) INB POINT TO THE ASSOCIATED ROUTING VECTOR CPA RQBUF+2 IF THIS IS THE SOURCE-NODE ENTRY, JMP GETLU GO TO GET THE ROUTING VECTOR (LU); INB ELSE, ADVANCE THE ENTRY-POINTER, AND ISX IF ALL ENTRIES HAVE NOT BEEN CHECKED, JMP NLOOP GO TO EXAMINE THE NEXT NRV ENTRY. * JMP CLNP0 ENTRY NOT FOUND--FORGET THE REPLY! * GETLU LDA B,I ENTRY FOUND: GET THE LOGICAL UNIT NO. NOP (XLA B,I IN THESE 2 INSTRUCTIONS IF DMS) AND B77 REMOVE POSSIBLE TIMEOUT DATA. IOR B100 INCLUDE THE 'WRITE-BIT(#6)'. STA RQBUF+5 SAVE THE CONWD FOR USE BY 'CONWP'. LDA D1 SIMULATE A CLASS 'WRITE-READ' REQUEST. STA RCODE INITIALIZE PARAMETER FOR 'CONWP'. JSB CONWP GO PREPARE CONWD FOR USE BY <#REQU>. IOR ZBIT ADD DOUBLE-BUFFER BIT(#12) FOR , STA CONWD AND RESTORE THE MODIFIED CONWD. * JSB #REQU CALL <#REQU> DEF *+9 TO TRANSFER THE REPLY DEF SAVCL FROM CLASS DEF #GRPM [COMPLETION VIA <#GRPM>] DEF RQBUF+5 TO THE LU WHICH LINKS THE CALLER. DEF CONWD SPECIFY: COMM. LINE CONWORD DEF XPRIO,I PRIORITY LEVEL DEF BL/CP REPLY DATA LENGTH--IF ANY DEF RPLAD REVISED REPLY-BUFFER ADDRESS DEF RPLYL REPLY-BUFFER LENGTH SSA,RSS IF THE RE-QUEUEING WAS SUCCESSFUL, THEN JMP GET GO TO AWAIT NEXT REQUEST/COMPLETION; JMP CLNP0 ELSE, GO CLEAN UP & FORGET REPLY! * SKP * PRE-PROCESS FOR READ/WRITE AND CONTROL REQUESTS RC=1,2,3 * RWC JSB CONWP PREPARE CONTROL WORD & CHECK DEVICE. * LDB RQBUF+6 GET BUFFER LENGTH/CONTROL PARAMETER. STB BL/CP INITIALIZE <#REQU> PARAMETER. * LDA RCODE GET THE REQUEST CODE. CPA D1 IF THIS IS A READ REQUEST, JMP *+2 THEN SKIP TO CHECK FOR WRITE-READ; JMP REQUE ELSE, SIMPLY RE-QUEUE THE REQUEST. * LDA RQBUF+5 GET THE CALLER'S CONTROL WORD. ALF POSITION INTER-ACTIVE BIT(#11) TO SIGN. SSA,RSS IS THIS AN INTER-ACTIVE WRITE-READ? JMP CLSRD NO. GO TO CLASS-READ PROCESSING. # * ISZ CONWD YES. CONVERT REQUEST CODE TO 'WRITE(2)'. LDA RQBUF+8 GET WRITE LENGTH FROM OPT. PRAM. #2 STA BL/CP INITIALIZE WRITE LENGTH FOR <#REQU>.  SSA IF CHARACTERS WERE SPECIFIED, ARS CONVERT TO A NEGATIVE WORD COUNT. SSA,RSS IF CHARACTERS--SKIP: ALREADY CONVERTED. CMA,INA VERIFY THAT THE ADA SAVB SPECIFIED LENGTH IS SSA CONTAINED WITHIN RECEIVED BUFFER; JMP ERIO1 ELSE, IT'S A PARAMETER ERROR! * JSB #RSAX GO TO THE DEF *+4 TCB MANAGEMENT ROUTINE DEF D5 TO SEARCH FOR DEF RQBUF+1 THE CURRENT REQUEST DEF RQBUF ON STREAM. SSB,INB IF THE TCB EXISTS, POINT TO 2ND WORD; JMP CLNP0 ELSE, CLEAN UP: NOTHING MORE POSSIBLE! * LDA D16 ALLOW A 20 MINUTE TIMEOUT JSB STORE FOR THE WRITE-READ REQUEST. JMP REQUE GO TO RE-QUEUE THE REQUEST. * SKP * * * NOTE: THIS PROCESSOR MAY BE REPLACED BY A SIMPLE, EXPEDIENT, # * * * RE-QUEUEING OF THE CLASS-READ REQUEST, IF THE APPROPRIATE # * * * DATA BUFFER IS ALLOCATED BY , UPON ENTRY OF THE # * * * REQUEST INTO THE LOCAL NODE. # * # CLSRD LDA RQBUF+5 GET THE CALLER'S CONTROL WORD. # IOR ZBIT INCLUDE DOUBLE-BUFFER SPECIFICATION. # STA RQBUF+5 RESTORE MODIFIED CONTROL WORD. # * # JSB EXEC CALL 'EXEC' # DEF *+8 TO PERFORM # DEF D17N A CLASS-READ. # DEF RQBUF+5 SPECIFY: CALLER'S CONWORD # DEF * DUMMY READ BUFFER # DEF RQBUF+6 READ-BUFFER LENGTH # DEF RQBUF REQUEST-BUFFER ADDRESS # DEF SAMLN REQUEST-BUFFER LENGTH # DEF RDCLS CLASS--NO WAIT. # JMP ERRTN SYSTEM-DETECTED ERROR--TELL CALLER! # * # SZA IF THE REQUEST WAS NOT PROPERLY QUEUED,# JMP ERDS8 THEN, TELL CALLER: RESOURCE PROBLEM; # JMP CLNP0 ELSE, CLEAN UP & AWAIT COMPLETION # * # * READ/WRITE/CONTROL CLASS-COMPLETION PROCESSING * RWCMP CPB D3 IF IT IS A CONTROL REQUEST, JMP FINIS THEN GO TO PREPARE THE REPLY. [=0] LDA RQBUF+5 GET THE CALLER'S CONTROL WORD. ALF,ELA POSITION WRITE-READ BIT(#11) TO . LDA RQBUF+6 GET THE CALLER'S DATA-LENGTH VALUE. CPB D1 IF A 'READ' HAS COMPLETED, THEN JMP LENCK GO TO PROCESS THE REPLY DATA-LENGTH. CLB,SEZ,CLE,INB,RSS IF NORMAL WRITE-COMPLETION, JMP FINIS GO TO PREPARE THE REPLY. * STA BL/CP WRITE-READ: SAVE READ LENGTH FOR <#REQU>, STB RCODE AND INITIALIZE 'RCODE' FOR 'CONWP'. JSB CONWP GO TO PREPARE CONTROL WORD FOR <#REQU>. JMP REQUE RE-QUEUE AS 'READ' FOR SPECIFIED DEVICE. * LENCK LDB SAVB GET THE TRANSMISSION LOG: +CHARS/+WORDS CLE,SSA,RSS IF CHARACTERS WERE SPECIFIED, SKIP; JMP SETLN ELSE, GO TO SAVE THE WORD COUNT. SLB,BRS CONVERT CHARACTER COUNT TO WORDS, AND INB IF ODD ADD ONE TO THE WORD COUNT. SETLN STB BL/CP SAVE THE REPLY DATA-LENGTH FOR <#REQU>. * FINIS LDA SAVA GET EQT5 STATUS WORD. AND BIT14 ISOLATE THE "DRIVER-REJECT" BIT(#14). CLE,SZA IF THE DRIVER REJECTED THE REQUEST, JMP ERIO7 THEN INFORM CALLER OF ERROR: "IO07"; DLD SAVA ELSE, GET THE REGISTERS FOR CALLER. JMP DONE GO COMPLETE THE REPLY.[=0: NO ERRORS] * SKP * RE-QUEUEING PROCESSOR: CONSERVE ALREADY-ALLOCATED SYSTEM RESOURCES * BY RE-Q,UEUEING THE REQUEST AS A CLASS-I/O REQUEST FOR A DEVICE. * REQUE JSB #REQU CALL <#REQU>, TO MOVE DEF *+7 THE CURRENTLY-QUEUED REQUEST DEF SAVCL FROM CLASS, TO THE DEVICE; DEF SAVCL WITH COMPLETION REPORTED TO . DEF RQBUF+5 SPECIFY: DEVICE LOGICAL UNIT NUMBER DEF CONWD CONFIGURED CONTROL WORD DEF XPRIO,I PRIORITY LEVEL DEF BL/CP BUFFER LENGTH/CONTROL PARAMETER * SSA,RSS IF THE RE-QUEUEING WAS SUCCESSFUL, JMP GET THEN, GO TO AWAIT COMPLETION; JMP ERDS8 ELSE, REPORT: RESOURCE ERROR! * * THE 'CONWP' SUBROUTINE PREPARES THE ACTUAL CONWORD WHICH IS TO BE * PASSED TO THE DEVICE DRIVER. THE CONWORD WILL INCLUDE ALL ITEMS * WHICH NORMALLY CONFIGURES: 'T'-FIELD[BITS#15,14-ADDED BY #REQU], * SUB-CHANNEL(BITS#13,5-2),SUBFUNCTION(BITS#10-6),RCODE(BITS#1-0). * [THIS PROCESSOR IS REQUIRED, DUE TO THE LACK OF ACCESS TO * 'WORD2' PROCESSOR]. * CONWP NOP ENTRY/EXIT: CONTROL WORD PREPARATION LDA RQBUF+5 GET THE CALLER-SUPPLIED CONWORD. AND B3700 ISOLATE SUBFUNCTION(BITS#10-6) STA CONWD SAVE THEM, TEMPORARILY. JSB DRTEQ GO TO GET THE DEF *+3 LU-LOCK & SUB-CHANNEL BITS DEF RQBUF+5 FOR THE SPECIFIED DEF DRTEN LOGICAL UNIT NUMBER. SSB,RSS IS IT AN INVALID LOGICAL UNIT, SZB,RSS OR IS IT LINKED TO THE 'BIT BUCKET'? JMP ERIO2 YES, TELL CALLER: LOGICAL UNIT ERROR! AND B3700 IF THE LOGICAL UNIT SZA IS CURRENTLY LOCKED, JMP ERDS8 THEN REJECT THE REQUEST: 'DS08'. * ADB D4 POINT TO FIFTH WORD OF THE EQT ENTRY. LDB B,I GET THE EQT'S STATUS WORD. RBL,CLE,SLB IF BIT #15 IS SET, THEN IT'S BUSY, JMP *+3 OR AWAITING A DMA CHANNEL--CONTINUE; SSB ELSE, IF THE DEVICE IS DOWN, T>HEN JMP ERDS8 REJECT THE REQUEST: RESOURCE PROBLEM! * LDA DRTEN GET THE DRT ENTRY, AGAIN. AND B174K ISOLATE SUB-CHANNEL BITS FROM DRT ENTRY. ELA,ALF POSITION MSB TO , AND RAL,RAL POSITION LSB'S TO BITS #5-2. IOR CONWD INCLUDE THE CALLER'S SUBFUNCTION, AND SEZ IF THE SUB-CHANNEL MSB WAS SET, THEN IOR B20K SET BIT #13 OF THE CONWORD, ALSO. IOR RCODE INCLUDE CALLER'S REQUEST CODE, AND STA CONWD SAVE THE CONWD FOR USE BY <#REQU>. JMP CONWP,I RETURN. * * PROGRAM SCHEDULE, TIMED EXECUTION, AND PROGRAM COMPLETION * PKILL EQU * PROGRAM TERMINATION. RC=6 * SCHED JSB PSTAT GO TO GET PROGRAM STATUS. RC=10,12 SZA ANY ATTEMPT TO CPA XEQT REMOTELY CONTROL JMP ERSC5 IS UN-ACCEPTABLE! ERROR: "SC05". * LDB RCODE GET THE REQUEST CODE. CPB D6 PROGRAM TERMINATION REQUEST? JMP *+2 YES. SKIP TO DETERMINE LINEAGE. JMP SCHD0 NO. IT'S A NORMAL SCHEDULE REQUEST. * ADA D20 POINT TO WORD #21 IN I.D. SEGMENT. LDA A,I GET THE CONTENTS. AND B377 ISOLATE THE FATHER'S I.D. SEG. NO. ADA KEYWD COMPUTE THE ADDRESS OF ADA DM1 THE KEYWORD TABLE ENTRY. LDA A,I GET THE FATHER'S I.D. SEGMENT ADDRESS. CPA XEQT OUR OFFSPRING? JMP SCHD0 YES, WE CAN HONOR THE REQUEST. JMP PASON NO. MUST HAVE BEEN THE SIRE. * SCHD0 LDA SAMLN GET THE REQUEST BUFFER SIZE. LDB RTNDF GET THE DEFAULT RETURN POINTER. ADA DM8 SUBTRACT THE MINIMUM REQUEST SIZE. ADB A COMPUTE THE ACTUAL RETURN ADDRESS, STB RTNAD AND CONFIGURE THE RETURN POINTER. SZA,RSS ANY ADDITIONAL PARAMETERS? JMP SCHD2 NO. GO CLEAR REMAINDER OF CALL BUFFER. SSA WERE WE SUPPLIED WITH ENWOUGH PARAMETERS? JMP ERSC1 NO. * ERROR: SC01 ! * CAX YES. SAVE ADDITIONAL PARAMETER COUNT. LDA PR3DF = ADDRESS OF NEXT USER-PARAMETER LDB RTNDF =ADDRESS OF NEXT CALL-BUFFER LOCATION. SCHD1 STA B,I STORE PARAM ADDR INTO CALL BUFFER. INA ADVANCE PARAMETER POINTER. INB ADVANCE CALL BUFFER POINTER. DSX ALL PARAMETERS PROCESSED? JMP SCHD1 NO. PROCESS THE NEXT ONE. * CLA PREPARE TO CLEAR REST OF CALL BUFFER. SCHD2 CPB LASTA LAST CALL BUFFER LOCATION CLEARED? JMP SCHD3 YES. GO TO COMPLETE THE CALL. STA B,I NO. CLEAR THE LOCATION. INB ADVANCE THE CALL BUFFER POINTER, AND JMP SCHD2 GO TO CLEAR THE NEXT LOCATION. * SKP SCHD3 LDA STRAD+1 GET THE STRING-SIZE POINTER--IF ANY. SZA,RSS PASSING A STRING TO THE PROGRAM? JMP SCHD4 NO. BYPASS DATA BUFFER RECOVERY. LDA SAVB YES. GET THE DATA BUFFER SIZE. CAX SAVE COUNT FOR POSSIBLE DMS MOVE. CMA,INA,SZA,RSS FORM A NEGATIVE VALUE. ANY DATA? JMP ERSC2 NO--IMPROPER PARAMETERS! * LDB D512 GET MAXIMUM DATA BUFFER SIZE. ADB A IF THE TRANSMITTED DATA BUFFER SSB EXCEEDS THE ALLOWABLE SIZE, JMP ERSC2 THEN THE REQUEST CANNOT BE PROCESSED! * ADA SAMAD COMPUTE DATA BUFFER ADDRESS IN S.A.M. LDB DABFA GET THE LOCAL DATA BUFFER ADDRESS. STB STRAD ESTABLISH STRING-BUFFER ADDRESS IN CALL. DMS4 MVW SAVB MOVE DATA TO LOCAL BUFFER [DMS: MWF]. * SCHD4 DLD ERRIN LOAD THE ERROR-DETECTION INSTRUCTIONS. DST RTNAD,I STORE THEM AT END OF CALLING SEQUENCE. * * THE CONFIGURED 'EXEC' CALLING SEQUENCE IS EXECUTED BELOW. * JSB EXEC BUFFER FOR ASSEMBLING EXEC REQS. RTNAD DEF PR3AD RETURN POINTER (CONFIGURED). DEF RQBUF+4 REQUEST CODE (SUPPLIED BY CALLER)  DEF RQBUF+5 POINTER TO FIRST REQUEST PARAMETER. PR3AD NOP CONFIGURED POINTERS (7-MAX.) TO NOP USER-SUPPLIED CALLING-PARAMETERS, NOP WHICH RESIDE IN THE REQUEST BUFFER. NOP UN-USED CALLING-SEQUENCE LOCATIONS ARE NOP DYNAMICALLY CHANGED TO 'NOP'. STRAD NOP STRING-BUFFER ADDRESS--IF ANY. NOP STRING-LENGTH POINTER--IF ANY. NOP [ ERROR-DETECTION INSTRUCTIONS: WILL BE NOP POSITIONED TO FOLLOW LAST POINTER ] ENDBF JMP DONE REQUEST COMPLETED. =0:NORMAL;=1:ERROR * SPC 2 * * TIME REQUEST PROCESSING RC=11 * STIME LDA D13 GET THE REPLY SIZE. STA RPLYL SET THE REPLY LENGTH * JSB EXEC REQUEST CURRENT SYSTEM TIME. DEF *+4 DEF RQBUF+4 RCODE = 11 (SIGN IS SET). DEF RQBUF+7 TIME IS RETURNED TO REPLY BUFFER. DEF RQBUF+12 SO IS THE YEAR. CCE RETURN ERROR-INFO TO THE CALLER! JMP DONE ALL IS WELL--RETURN THE TIME DATA. * SKP * I/O OR PARTITION STATUS-REQUEST PROCESSING * PARST EQU * RC=25 ISTAT LDA D10 GET THE REPLY SIZE. RC=13 STA RPLYL SET THE LENGTH OF THE REPLY * JSB EXEC REQUEST STATUS FOR THE I/O DEVICE. DEF *+6 DEF RQBUF+4 RCODE = 13/25 (SIGN IS SET). DEF RQBUF+5 CONWORD(LU) / PARTITION NUMBER DEF RQBUF+7 RETURN- RC=13: EQT#5 / RC=25: FIRST PAGE PR3DF DEF RQBUF+8 RETURN- RC=13: EQT#4 / RC=25: NO. PAGES DEF RQBUF+9 RETURN- RC=13: LU STAT/RC=25: PART. STAT CCE 'EXEC' ERROR-INFO RETURNED TO CALLER. JMP DONE RETURN TO CALLER WITH STATUS INFO. SPC 1 PASON LDA RQBUF GET THE STREAM WORD RC=6,9,23,24 XOR D6 CONVERT TO STREAM-3 . LDB SAMAD GET REQUEST BUFFER ADDRESS IN S.A.MB. JSB STORE GO TO REPLACE STREAM TYPE IN CLASS BUFFER. JSB CLTCB GO TO CLEAR RECORD FROM STREAM. LDB SAMAD POINT TO THE SECOND WORD OF THE REQUEST CLE,INB BUFFER IN S.A.M. [=0:PASS TO <#GRPM>] JSB STORE REPLACE THE ORIGINAL SEQUENCE NUMBER. * LOCAL LDA #GRPM DESTINATION CLASS IS <#GRPM'S>, # SEZ UNLESS THIS IS A DS/3000 REPLY, # LDA #RPCV IN WHICH CASE, IT'S <#RPCV'S> CLASS. # STA CLTCB ESTABLISH THE DESTINATION CLASS NUMBER.# LDA RQBUF GET THE STREAM WORD. # AND BIT14 ISOLATE THE REPLY FLAG(BIT#14) # SZA,RSS IS THIS A REPLY, OR A FORWARD PASS? # JMP LOCRQ FORWARD PASS: SET PLAY IN MOTION. # * LDB CLTBA,I REPLY: GET CLASS HEADER ADDRESS. # ADB D2 POINT TO THE THIRD WORD. # LDA FAKST GET FAKE DVA65 STATUS (32401B) FOR GRPM# JSB STORE REPLACE STATUS WORD IN CLASS HEADER. # ADB D3 ADVANCE POINTER TO WORD #6. # LDA BL/CP GET THE REPLY DATA LENGTH. # JSB STORE REPLACE THE TRANSMISSION LOG IN HEADER.# INB ADVANCE POINTER TO FIRST OPT. PARAMETER# LDA RPLAD GET THE NEW REPLY-BUFFER ADDRESS. # JSB STORE REPLACE THE FIRST OPTIONAL PARAMETER. # INB ADVANCE POINTER TO SECOND OPT. PARAM. # LDA RPLYL GET THE REPLY LENGTH. # JSB STORE REPLACE THE SECOND OPTIONAL PARAMETER. # * LOCRQ JSB #REQU RE-QUEUE DEF *+3 THE REQUEST DEF SAVCL FROM CLASS DEF CLTCB ONTO THE DESTINATION CLASS. SSA,RSS IF THE OPERATION WAS SUCCESSFUL, JMP GET GO TO AWAIT NEXT REQUEST/COMPLETION; JMP CLNP0 ELSE, SIMPLY CLEAN UP--WHAT ELSE? * * THE FOLLOWING PROGRAM-STATUS REQUEST PROCESSING IS SUPPORTED * >>>>>>>>>>>>>>>> +:NLHIN DS/1000 NETWORKS--ONLY! <<<<<<<<<<<<<<<< * PGMST JSB PSTAT GO TO GET THE PROGRAM'S STATUS. RC=99 SZA DOES THE PROGRAM EXIST? JMP GETST YES. GO TO PROCESS THE STATUS. CCA NO. SET =-1 FOR ERROR INDICATION! JMP RTNER GO TO RETURN THE ERROR INFORMATION. * GETST LDA B GET THE STATUS WORD. AND D15 ISOLATE THE STATUS. RAL,ERA INCLUDE THE 'SEGMENT' FLAG. RTNER STA RQBUF+7 SAVE FOR RETURN TO THE CALLER. LDB D8 ESTABLISH A STB RPLYL REPLY LENGTH OF 8 WORDS. CLB,CLE =0 FOR RETURN TO CALLER. JMP DONE RETURN THE INFO TO THE CALLER. VN* HED EXECM: PROCESSING SUBROUTINES.* (C) HEWLETT-PACKARD CO. 1978 * * CLNUP JSB CLTCB ELIMINATE RECORD OF OFFENDING REQUEST. JMP CLNP0 COMPLETE THE CLEAN UP PROCESS. * SPC 3 CLTCB NOP ENTRY/EXIT: TCB-CLEARING PROCESSOR. JSB #RSAX GO TO THE TCB-MANAGEMENT PROCESSOR DEF *+4 TO CLEAR THE RECORD OF THE CURRENT DEF D7 SLAVE-STREAM ENTRY - WHICH IS DEF RQBUF+1 IDENTIFIED BY IT'S SEQUENCE NUMBER- RQBFA DEF RQBUF AND STREAM NO. SSB,RSS IF THE OPERATION WAS SUCCESSFUL, JMP CLTCB,I RETURN TO CALLER. [= ORIG. SEQ. NO.] * CLNP0 JSB #REQU RESET THE POSSIBLE DEF *+3 NEGATIVE BLOCK-SIZE WORD, DEF PURCL BEFORE ATTEMPTING TO DEF DM1 RELEASE THE CLASS BUFFER. * SSA IF SOMETHING FAILED, JMP GET THEN NOTHING MORE CAN BE DONE! * JSB EXEC RETURN THE CURRENT CLASS BUFFER. DEF *+5 DEF D21 CLASS GET. DEF PURCL CLASS/BUFFER RELEASE/SAVE CLASS. DEF DABUF DUMMY DATA-BUFFER ADDRESS. DEF D0 DATA NOT DESIRED. JMP GET RETURN TO AWAIT A NEW REQUEST/COMPLETION. * SPC 3 PSTAT NOP PROGRAM STATUS SUBROUTINE. JSB PGMAD DEF *+2 DEF RQBUF+5 PROGRAM 'NAME' IS IN REQUEST BUFFER. JMP PSTAT,I RETURN. * SPC 3 STORE NOP STORE , VIA , INTO PROTECTED AREA. JSB $LIBR D0 NOP DMS3 STA B,I [ DMS: XSA B,I ] NOP JSB $LIBX DEF STORE * SKP * PLOG NOP REQUEST BUFFER LOGGING ROUTINE. LDB #PLOG GET THE REQUEST-LOGGER'S CLASS NO. SZB,RSS IS LOGGING DESIRED? JMP PLOG,I NO. RETURN TO NORMAL PROCESSING. STB STORE YES. SAVE THE CLASS NO. LOCALLY. * JSB EXEC WRITE DEF *+8 THE DEF D20N REQUEST DEF ZBIT BUFFER, DEF DABUF IN THE DEF D0 EXPECTED DEF RQBUF FORMAT, DEF SAMLN TO THE DEF STORE LOGGER'S NOP CLASS. * LDA RCODE RECOVER THE REQUEST CODE, JMP PLOG,I AND CONTINUE NORMAL PROCESSING. * SPC 2 * * THIS CODE IS REQUIRED BECAUSE <#RQCV> DOES NOT REQUEUE INCOMING REQUESTS. * GD3K NOP DS/3000 NEW-REQUEST ANALYSIS. # SSB IS THIS AN I/O COMPLETION? # JMP GD3K,I YES. RETURN FOR NORMAL PROCESSING. # LDA B20K NO. GET THE OLD REQUEST BIT(#13), # IOR RQBUF AND ADD IT TO THE STREAM WORD. # STA RQBUF SAVE MODIFIED WORD FOR CLASS READ. # LDB SAMAD GET REQUEST BUFFER ADDRESS IN S.A.M. # JSB STORE SET THE FLAG FOR NEXT ENTRY. # CLB SIMULATE NEW REQUEST FROM <#REQU> # LDA RCODE RESTORE . # ISZ GD3K BYPASS LOAD OF RETURNED CLASS RC # JMP GD3K,I RETURN TO NORMAL PROCESSING. # * HED EXECM: CONSTANTS/VARIABLES/TABLES * (C) HEWLETT-PACKARD CO. 1978 DM16 DEC -16 DM8 DEC -8 DM1 DEC -1 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D5 DEC 5 D6 DEC 6 D7 DEC 7 D8 DEC 8 D10 DEC 10 D13 DEC 13 D15 DEC 15 D16 DEC 16 D20 DEC 20 D17N OCT 100021 CLASS-READ/NO-ABORT # D20N OCT 100024 CLASS WRITE-READ--NO ABORT. D21 DEC 21 D99 DEC 99 PROGRAM STATUS REQUEST CODE. D512 DEC 512 MAXIMUM DATA BUFFER SIZE. CONWD NOP CONFIGURED CONTROL WORD STORAGE. B77 OCT 77 B100 OCT 100 'WRITE' INDICATOR. B377 OCT 377 BIT14 OCT 40000 STREAM-WORD REPLY FLAG. BIT15 OCT 100000 RCODE NOP CURRENT REQUEST CODE. RPMSK OCT 170077 STREAM-WORD RETRY-COUNT MASK. B3700 OCT 3700 LU-LOCK/CONW"ORD SUBFUNCTION MASK. B20K OCT 20000 SUB-CHANNEL 'MSB' FOR CONWORD. B174K OCT 174000 DRT SUB-CHANNEL ISOLATION MASK. FAKST OCT 32401 SIMULATED DVA65 GOOD-COMPLETION STATUS. ZBIT OCT 10000 DOUBLE-BUFFER BIT(#12). SAMAD NOP REQUEST BUFFER ADDRESS IN S.A.M. SAMLN NOP REQUEST BUFFER LENGTH. SAMRC NOP RETURNED I/O REQUEST CODE. * RPLAD NOP REVISED REPLY-BUFFER ADDRESS IN S.A.M. RPLYL NOP REPLY LENGTH (CONFIGURED). BL/CP NOP BUFFER LENGTH/CONTROL PARAMETER RTNDF DEF PR3AD LASTA DEF ENDBF * * * * DO NOT CHANGE ORDER OF NEXT 4 STATEMENTS * * * * ERRIN CCE,RSS CONFIGURED-'EXEC'-REQUEST CLE ERROR-DETECTION INSTRUCTIONS. SAVA NOP REGISTER STORAGE FOR SAVB NOP AND FOR . * * * * * * * * * * * * * * * * * * * * * * * * * * * SKP * * PRE-PROCESSOR 'JUMP' TABLE. * LOW1 DEF RWC RCODE 1 = READ REQ DEF RWC RCODE 2 = WRITE REQ DEF RWC RCODE 3 = CONTROL DEF ERDS6 RCODE 4 = UNDEFINED(DISC ALLOC) DEF ERDS6 RCODE 5 = UNDEFINED (PKG.TRK.REL) DEF PKILL RCODE 6 = PROGRAM TERMINATION DEF ERDS6 RCODE 7 = UNDEFINED(PRG.SUSPEND) DEF ERDS6 RCODE 8 = UNDEFINED(SEG.LOAD) DEF PASON RCODE 9 = SCHEDULE W/WAIT DEF SCHED RCODE 10= PROGRAM SCHED(WON'T WAIT) DEF STIME RCODE 11= TIME REQUEST DEF SCHED RCODE 12= EXECUTION TIME DEF ISTAT RCODE 13= I/O STATUS DEF ERDS6 RCODE 14= UNDEFINED (STRING GET) DEF ERDS6 RCODE 15= UNDEFINED (GLOBAL TRK. ALLOC.) DEF ERDS6 RCODE 16= UNDEFINED (GLOBAL TRK. RLS.) DEF ERDS6 RCODE 17= UNDEFINED (CLASS READ) DEF ERDS6 RCODE 18= UNDEFINED (CLASS WRITE) DEF ERDS6 RCODE 19= UNDEFINED (CLASS CONTROL) DEF ERDS6 RCODE 20= UNDEFINED (CLASS WRITE-READ) DEF ERDS6 RCODE 21= UNDEFINED (CLASS GET) DEF ERDS6  RCODE 22= UNDEFINED (SWAP CONTROL) DEF PASON RCODE 23= QUEUE-SCHEDULE W/WAIT DEF PASON RCODE 24= QUEUE-SCHEDULE W/O WAIT DEF PARST RCODE 25= PARTITION STATUS DEF ERDS6 RCODE 26= UNDEFINED (MEMORY SIZE RTE-IV) TABAD DEF *,I * UPLIM ABS LOW1-* REQUEST CODE LIMIT-VALUE: -(MAX. RCODE+1) * SPC 2 DABUF BSS 512 DATA BUFFER DRTEN EQU DABUF TEMPORARY STORAGE: DRT ENTRY. RQBUF BSS 15 REQUEST BUFFER SAVCL NOP CLASS NO. W/BUFFER-SAVE & CLASS-SAVE PURCL NOP CLASS NO. W/CLASS-SAVE ONLY. RDCLS NOP SAME AS 'SAVCL' W/NO-WAIT # CLTBA NOP CURRENT CLASS BUFFER POINTER. # DFCLS DEF $CLAS CLASS TABLE ADDRESS. # * HED EXECM: INITIAL CONFIGURATION * (C) HEWLETT-PACKARD CO. 1978 ORG DABUF CONFIGURATION: EXECUTED ON FIRST ENTRY. * CONFG LDA $OPSY GET THE SYSTEM SPECIFICATION. AND D2 ISOLATE THE DMS BIT(#1). SZA,RSS IF THIS IS NOT A DMS SYSTEM, JMP NODMS THEN NO NEED TO MODIFY CODE; DLD MWFI ELSE, CHANGE DST DMS1 THE 'MVW' MACRO'S DST DMS4 TO 'MWF' DMS-EQUIVALENTS, DLD MWII AND CHANGE OTHER 'MVW' DST DMS2 TO A 'MWI' DMS-EQUIVALENT. DLD XLAI CHANGE THE 'LDA B,I' DST NLOOP INSTRUCTIONS TO DMS'S DST GETLU 'XLA B,I' EQUIVALENT. LDA XSAI CHANGE THE 'STA B,I' INSTRUCTION DST DMS3 TO DMS'S 'XSA B,I' EQUIVALENT. * NODMS CLA NO NEED TO STA EXECM GO THRU THIS AGAIN! * LDB DFCLS GET A # RSS DIRECT ADDRESS # LDB B,I FOR THE # RBL,CLE,SLB,ERB BEGINNING # JMP *-2 OF THE # STB DFCLS CLASS TABLE.  # * LDB XTEMP GET POINTER TO SCHEDULING PARAMETER, JMP EXECM+1 AND GO TO START OPERATIONS. * MWFI MWF NOP MWII MWI NOP XLAI XLA B,I XSAI OCT 101725 'XSA' INSTRUCTION * * ORR SIZE * END EXECM ~ BZ 91740-18006 1740 S C0122 DS/1000 MODULE: OPERM              H0101 BASMB,R,L,C HED OPERM 91740-16006 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM OPERM,19,30 91740-16006 REV 1740 770314 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ENT OPERM EXT MESSS,EXEC,D65SV,D65GT EXT #NODE IFZ EXT DBUG XIF SUP * * OPERM * SOURCE: 91740-18006 * BINARY: 91740-16006 * PRGMR: BOB SHATZER * DATE: 29 DEC 75 * MODIFIED BY JEAN-PIERRE BAUDOUIN * DATE: JULY 1976 * * OPERM IS THE CCE MONITOR WHICH RECEIVES OPERATOR REQUESTS INIT- * IATED BY A REMOTE CPU. THIS MONITOR OPERATES ON STREAM 7. * OPERM LDA B,I GET INPUT PARAMETER IFZ SZA,RSS IS IT A ZERO? JMP *+3 YES - CALL DEBUG XIF STA CLSN NO - NORMAL SCHEDULE - SAVE CLASS NUMBER JMP OPER1 GO TO GET THE FIRST REQUEST * IFZ JSB DBUG CALL DEBUG IF P1 WAS 0 DEF *+1 JSB EXEC TERMINATE...SAVE RESOURCES DEF *+4 DEF B6 DEF B0 DEF B1 JMP OPERM TRY AGAIN XIF * OPER1 JSB D65GT WAIT FOR REQUEST DEF *+6 DEF CLSN CLASS # DEF PARMB REQUEST BUFFER DEF D24 MAX LENGTH =24 DEF B0 NO DATA ASSOCIATED DEF B0 JMP OPER1 IGNORE THE COMMUNICATION ERROR * LDA PARMB+4 GET LENGTH SZA,RSS IF ZERO...SEND BACK ZERO TO THEM JMP DONE * JSB MESSS CALL SYSTEM MSG PROCESSOR WITH MESSAGE DEF *+3 DEF PARMB+5 THE REPLY WILL COME IN THE SAME AREA DEF PARMB+4 * CMA,INA MAKE SYSTEM   REPLY LENGTH POSITIVE BYTES CLE,ERA MAKE THIS POSITIVE WORDS SEZ INA DONE STA RPLY+7 SAVE LENGTH IN WORDS INTO REPLY ADA D8 ADD STANDARD LENGTH OF PARMB STA LEN SAVE AS REPLY LENGTH * DLD PARMB GET STREAM TYPE & SEQUENCE NO. IOR BIT14 SET IN FOR REPLY DST RPLY SAVE AS REPLY STREAM & SEQ. NO. * DLD PARMB+2 DST RPLY+2 MOVE THE REQUEST HEADER CLA CLEAR CLB ERROR DST RPLY+4 LOCATIONS. LDA #NODE GET LOCAL NODE # STA RPLY+6 * JSB D65SV SEND REPLY DEF *+5 DEF RPLY DEF LEN DEF B0 DEF B0 NOP IGNORE THE ERROR RETURN * JMP OPER1 WAIT FOR ANOTHER REQUEST * B EQU 1 B0 OCT 0 B1 OCT 1 B6 OCT 6 D8 DEC 8 D24 DEC 24 BIT14 OCT 40000 CLSN NOP RPLY BSS 3 DO NOT REARANGE THIS AREA PARMB BSS 27 LEN NOP * END OPERM e  CJ 91740-18007 1740 S C0122 DS/1000 MODULE: PTOPM              H0101 DASMB,R,L,C HED PTOPM 91740-16007 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM PTOPM,19,30 91740-16007 REV 1740 770921 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT PTOPM EXT EXEC,$OPSY EXT D65SV,#REQU,#PLOG,PGMAD,#NODE SPC 3 * * PTOPM * SOURCE:91740-18007 * BINARY:91740-16007 * PGMR: CHUCK WHELAN * DATE: DEC 1976 * SPC 3 * THIS IS THE DS/1000 VERSION OF PTOPM * * IT RECEIVES NEW REQUESTS FOR THE FOLLOWING P TO P FUNCTION CODES: * 1 = POPEN * 2 = PREAD * 3 = PWRIT * 4 = PCONT * 5 = PCLOS (BIT 7= 1 IF GENERATED BY LOCAL "FINIS") * 6 = SLAVE OFF * 7 = SLAVE LIST * * PTOPM MAINTAINS PARALLEL TABLES OF OPEN SLAVE PROGRAM ID SEGMENT * ADDRESSES AND THEIR CORRESPONDING CLASS NUMBERS. PTOPM USES * THESE TABLES TO DETERMINE THE CLASS NUMBER FOR RETHREADING THE * CLASS BUFFER ON "POPEN","PREAD","PWRIT", AND "PCONT" REQUESTS. * "PCLOS", "SLAVE OFF" AND "SLAVE LIST" REQUESTS ARE HANDLED WITHIN * PTOPM WHICH DOES THE NECESSARY PROCESSING AND SENDS THE REPLY VIA * "D65SV" (EXCEPT FOR LOCAL "FINIS" REQUESTS WHICH HAVE NO REPLY). * SKP PTOPM LDA 1,I IS P1=I/O CLASS STA CLASS PTOPM CLASS ALR,RAR CLEAR SAVE BUFFER BIT STA CLAS2 FOR "CLSAM" ROUTINE CLB LDA $OPSY RAR,SLA SKIP IF NON-DMS STB MOD1 SET FOR DMS * * ISSUE GET ON I/O CLASS GET JSB EXEC GET REQUEST DEF *+7 DEF K21N DEF CLASS DEF IRBUF DEF K0 DEF BFADR ADDR OF REQUEST IN SAM DEF RQLE5N RCVD REQUEST LENGTH NOP * LDA RQLEN ADA N7 SSA REQ LENGTH >= 7? JMP EROUT NO, ERROR ADA N25 SSA,RSS REQ LENGTH < 32? JMP EROUT NO ,ERROR * LDA BFADR LDB RQADR SET TO MOVE REQUEST TO INTERNAL BUFFER MOD1 JMP RQLOC NOP HERE IF DMS LDX RQLEN MWF MOVE REQUEST FROM SYSTEM MAP JMP *+4 * RQLOC MVW RQLEN MOVE REQUEST * CLA STA $ERR+1 INITIALIZE ERROR STA $ENOD FIELDS LDA $PCB STA IDSEG SAVE POSSIBLE ID SEG ADDR LDA $FUNC AND K7 ISOLATE FUNCTION CODE ADA CODEA ADD ADDRESS OF PROCESS TABLES JMP 0,I AND GO DO IT SPC 3 EROUT JSB CLSAM IRRECOVERABLE ERROR, CLEAR SAM JMP GET & GO BACK TO "GET" * SKP * * PROCESS "POPEN" OPENP JSB PGMAD CONVERT PGM NAME TO ID SEG ADDR DEF *+2 DEF $NAME SZA,RSS WAS ID SEGMENT FOUND? JMP ER41 NO STA IDSEG SAVE ID SEGMENT ADDRESS * JSB SERCH THIS PGM ALREADY OPEN? JMP REQU# YES, RETHREAD ON SLAVE CLASS * SEZ,RSS IS TABLE FULL? JMP ER42 YES, ERROR * LDB FSTAD 1ST AVAILABLE ENTRY ADDR STB SEGAD LDA IDSEG STA 1,I SET THIS ID SEG ADDR INTO SLAVE LIST ADB NTOTL STB CLSAD ADDR FOR CLASS # * LDA B13 GET "NEW CLASS" CLASS WORD STA CLSAD,I TO SET UP CALL * JSB EXEC GET THE I O CLASS NUMBER DEF *+8 BY GETTING AN I-O CLASS DEF K20 DEF K0 DEF IRBUF DEF K1 DEF K1 DEF K1 DEF CLSAD,I SZA HOW WAS THE ALLOCATION ? JMP ERMS BAD, ERROR EXIT * CLEAR REQUEST LDA CLSAD,I STA *+2 JSB DOGET THE PREVIOUS WRITE READ LEFT NOP A DUMMY REQUEST IN THE CLASS, CLR IT. K0 NOP IGNORE ABORT CONDITION * * SCHEDULE THE PROGRAM JSB EXEC DEF *+4 SCHEDULE REQUESTED PROGRAM DEF K10N WITHOUT WAIT & PASS IT DEF $NAME IT'S I/O CLASS AS PARAMETER DEF CLSAD,I P1 JMP BADPG ERROR RETURN-RTE TRIED TO ABORT US * SZA OK IT PROGRAM WAS DORMANT JMP BADOP ELSE POPEN MUST FAIL * * POPEN IS OK, RETHREAD CLASS BUFFER TO SLAVE PROGRAM * REQU# JSB #REQU RETHREADING SUBROUTINE DEF *+3 DEF CLASS PTOPM CLASS CLSAD NOP SLAVE PGM'S CLASS * SSA,RSS ANY RETHREADING ERRORS JMP GET NO, BACK TO GET JMP ER48 GIVE -48 ERROR * BADPG JSB FINIS DEALLOCATE CLASS & CLEAR ENTRY JMP ER41 GIVE ERROR -41 * BADOP JSB FINIS DEALLOCATE CLASS & CLEAR ENTRY JMP ER44 GIVE ERROR -44 SKP * * ENTER HERE ON PREAD, PWRIT, OR PCONT * READP JSB SERCH SEARCH FOR ENTRY RSS JMP ER44 NOT FOUND, ERROR * LDA CLSAD,I CLASS # FROM TABLE CPA $PCB+1 DOES IT MATCH CLASS IN PCB? JMP REQU# YES, GO RETHREAD CLASS BUFFER JMP ER103 NO, ERROR * SKP * * PROCESS "SL" REQUESTS FROM REMAT SLIST JSB CLSAM CLEAR THE CLASS BUFFER CLA STA NAMBF INITIALIZE COUNT OF OPEN PGMS LDX NTOTL COUNTER LDB NAMAD POINTER FOR STORING PGM NAMES * SL10 LAX P#END GET NEXT SLAVE ID SEG ADDR SZA,RSS IS THIS ENTRY FULL? JMP SL20 NO ISZ NAMBF BUMP COUNT OF SLAVE PGMS ADA K12 POINT TO NAME IN ID SEG MVW K3 MOVE NAME INTO OUTPUT BUFFER SL20 ISX ALL ENTRIES EXAMINED? JMP SL10 NO * LDA NAMLN JMP REPLY+1 WRITE SLAVE LIST WITH REPLY SKP * * HANDLE SLAVE OFF REQUESTS HERE SOFF LDA $PCB ID SEG ADDR TO CLEAR SZA CLEAR ALL REQUEST? JMP FINIT NOJf * JSB CLSAM CLEAR CLASS BUFFER LDA NTOTL STA CNTR INITIALIZE SLAVE LIST COUNT LDB A#IDS POINT TO ID SEG ADDR LIST CL10 LDA 1,I GET NEXT ENTRY SZA,RSS THIS SLOT FULL? JMP CL20 NO STB SEGAD SAVE ADDR OF ID SEG ADDR ADB NTOTL STB CLSAD SAVE ADDR OF CLASS # * JSB FINIS GO CLEAN OUT THIS ONE LDB SEGAD * CL20 INB BUMP LIST POINTER ISZ CNTR MORE? JMP CL10 YES JMP FINEX NO, DONE SPC 2 * FINIT JSB PGMAD CONVERT NAME TO ID SEG ADDR DEF *+2 DEF $NAME STA IDSEG SAVE ID SEGMENT ADDRESS * * ENTER HERE ON "PCLOS" OF "FINIS" REQUESTS * CLOSP JSB CLSAM CLEAR CLASS BUFFER JSB SERCH IS PROGRAM IN CURRENT LIST? JSB FINIS YES, CLEAN OUT ENTRY IN CURRENT LIST LDA $FUNC ALF,ALF TEST BIT 7 OF FUNCTION CODE SSA IS THIS A "FINIS" REQUEST? JMP GET YES, NO REPLY REQUIRED * FINEX CLB STB $ERR+1 NO ERROR CODE JMP REPLY SEND REPLY * SKP * CLEAR ENTRY OUT OF CURRENT LIST, AND ABORT PROGRAM IF IT'S HANGING * ON THE CLASS SO THE CLASS NUMBER CAN BE DEALLOCATED. * FINIS NOP * NOW CLEAR ALL REQUESTS FROM THE I/O CLASS * (ONE AT A TIME) AND CAUSE IT TO BE RELEASED LDA CLSAD,I GET CLASS NUMBER IOR B1315 SET BIT 13 & 15 IN CLASS WORD STA TEMP THEN SAVE FOR CALL STA CLFLG SET CLASS CLEAR FLAG NON-ZERO * NXGET JSB DOGET GET REQUEST TEMP NOP JMP ABTIT FIRST, PGM MUST BE TERMINATED * CLB CPB CLFLG RELEASE PROCESSING COMPLETE? JMP FIEND YES INA,SZA ALL PENDING REQUESTS CLEARED? JMP NXGET NO, CLEAR MORE STA CLFLG SET FOR ONE MORE LDA TEMP AND CLR13 CLEAR NO DE-ALLOCATE FLAG STA TEMP JMP NXGET * * ABORT USER PROGRAM ABTIT LDB NAMA LDA SEGAD,I ADA K12 ADDR OF NAME IN ID SEG MVW K3 MOVE INTO NAME FIELD LDA NAME+2 AND B1774 CLEAR RHW STA NAME+2 * JSB EXEC TERMINATE PROGRAM DEF *+3 DEF K6N NAMA DEF NAME CLB,RSS GET OUT IF WOULD HAVE ABORTED JMP NXGET NOW RELEASE CLASS # * FIEND STB SEGAD,I CLEAR ENTRY IN PTOPM'S LIST JMP FINIS,I & EXIT * SKP * PROCESS ERRORS AND ABNORMAL CONDITIONS HERE * THE B REGISTER CONTAINS THE DETECTED ERROR CODE * RECOGNIZED ERROR CONDITIONS * -41 NON-EXISTENT SLAVE PROGRAM * -42 CURRENT LIST FULL-NO ROOM-RETRY * -44 PROGRAM NOT OPEN IN PTOPM'S TABLE * -48 ABORTIVE COMMUNICATIONS ERROR * -103 BAD DCB OR BAD FUNCTION CODE * ER41 LDB M41 JMP ERR * ERMS CLA STA SEGAD,I CLEAR ENTRY IN CURRENT LIST * ER42 LDB M42 JMP ERR * ER44 LDB M44 JMP ERR * ER48 LDB M48 JMP ERR * ER103 LDB M103 ILLEGAL PCB ERR STB $ERR+1 STORE ERROR WORD LDB #NODE STB $ENOD PASS LOCAL NODE * JSB CLSAM CLEAR THE CLASS BUFFER * REPLY CLA STA CNTR SET LENGTH OF DATA * JSB D65SV SEND THE REPLY DEF *+5 RQADR DEF IRBUF REQUEST BUFFER DEF RQLEN REQUEST LENGTH DEF NAMBF DEF CNTR ZERO UNLESS "SL" NOP JMP GET SKP * * THIS SUBROUTINE SEARCHES FOR AN ENTRY IN THE SLAVE PGM LIST * SERCH NOP LDB A#IDS POINTER TO ID SEG ADDRS LDA NTOTL STA CNTR COUNTER CLE E SET TO 1 WHEN FREE SLOT FOUND SNXT LDA 1,I GET NEXT ID SEG ADDR CPA IDSEG EQUAL TO ONE WE'RE LOOKING FOR? JMP GOTIT YES! SZA,RSS THIS SLOT FREE? SEZ,CCE YES, SKIP IF 1ST FREE SLOT RSS STB FSTAD SAVE ADDR OF 1ST FREE SLOT INB ISZ CNTR MORE? JMP SNXT YES vX ISZ SERCH REQUESTED ID SEG NOT FOUND JMP SERCH,I RETURN * GOTIT STB SEGAD SAVE ADDR OF ID SEG ENTRY ADB NTOTL STB CLSAD SAVE ADDR OF ITS CLASS # JMP SERCH,I RETURN SPC 2 * * DO A CLASS I/O DUMMY GET * DOGET NOP JSB EXEC DEF *+5 DEF K21N DEF DOGET,I CLASS # DEF DUMMY DEF K0 RSS SKIP IF WE COULD HAVE ABORTED ISZ DOGET ELSE RETURN TO P+2 ISZ DOGET JMP DOGET,I RETURN SKP * * CLEAR PTOPM'S CLASS BUFFER OR RETHREAD TO PLOG * CLSAM NOP LDA #PLOG SZA LOGGING? JMP LOGIT YES * JSB EXEC CLASS GET (ZERO LENGTH) DEF *+5 DEF K21 DEF CLAS2 DEF DUMMY DEF K0 * CLSEX LDA $STRM IOR BIT14 SET REPLY FLAG IN REQUEST STA $STRM JMP CLSAM,I RETURN SPC 2 LOGIT JSB #REQU RETHREADING ROUTINE DEF *+3 DEF CLASS PTOPM'S CLASS DEF #PLOG JMP CLSEX SKP * * DATA AREA * BFADR NOP CNTR NOP RQLEN NOP IDSEG NOP SEGAD NOP FSTAD NOP CLASS NOP CLAS2 NOP K1 DEC 1 K3 DEC 3 K7 DEC 7 K12 DEC 12 K20 DEC 20 K21 DEC 21 K6N OCT 100006 K10N OCT 100012 K21N OCT 100025 CODEA DEF CODES,I CODES DEF ER103 DEF OPENP DEF READP DEF READP DEF READP DEF CLOSP DEF SOFF DEF SLIST B13 OCT 020000 BIT14 OCT 040000 B1315 OCT 120000 B1774 OCT 177400 CLR13 OCT 157777 N7 DEC -7 N25 DEC -25 M41 DEC -41 M42 DEC -42 M44 DEC -44 M48 DEC -48 M103 DEC -103 CLFLG NOP DUMMY NOP NAMAD DEF NAMBF+1 NAMLN ABS NENT+NENT+NENT+1 SIZE OF "SL" BUFR * * DEFINE P TO P REQUEST BUFFER * IRBUF BSS 31 $STRM EQU IRBUF $ERR EQU IRBUF+4 $ENOD EQU IRBUF+6 $FUNC EQU IRBUF+7 $PCB EQU IRBUF+8 $NAME EQU IRBUF+8 * NAME BSS 3 * * DEFINE SLAVE PGM LIST & VARIABLES * *($NENT EQU 20 SET # OF ENTRIES A#IDS DEF P#IDS POINT TO ID SEG ADDRS A#CLS DEF A#CLS POINT TO SLAVE CLASS #S NTOTL ABS -NENT -# OF ENTRIES * P#CLS BSS NENT+NENT DEFINE THE SLAVE LIST TABLE P#IDS EQU P#CLS+NENT P#END EQU P#IDS+NENT UNL ORG P#CLS REP NENT+NENT INITIALIZE TABLE TO ZEROES NOP LST * NAMBF BSS NENT+NENT+NENT+1 BUFFER FOR "SL" * SIZE EQU * * END PTOPM * D P 91740-18008 1740 S C0122 DS/1000 MODULE: EXECW              H0101 ;ASMB,R,L,C HED EXECW 91740-16008 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM EXECW,19,30 91740-16008 REV 1740 770728 SPC 1 * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAME: EXECW * SOURCE: 91740-18008 * RELOC: 91740-16008 * PGMR: C. HAMILTON [07/28/77] * * IS THE DS/1000 MONITOR, WHOSE FUNCTION IS TO PROCESS ALL * REQUESTS, WHICH ARE FORWARDED TO THIS NODE VIA SLAVE STREAM #3. ALL OF * THESE REQUESTS WILL HAVE BEEN ORIGINATED THROUGH A USER'S REQUEST TO THE * USER-INTERFACE MODULE. REQUESTS PROCESSED BY ARE * HANDLED ON A 'FIRST COME, FIRST SERVED' BASIS! THUS, IF IS * 'WAITING' FOR COMPLETION OF A PREVIOUSLY-SCHEDULED PROGRAM, A NEW * REQUEST CANNOT BE HONORED, UNTIL THE PREVIOUS REQUEST HAS COMPLETED. * * THE CURRENT USER'S NODE NUMBER WILL BE STORED IN #CNOD, IN . * ( WHEN IS INACTIVE, #CNOD WILL CONTAIN -1 ) * * NOTE: SPECIAL PROCESSING IS PROVIDED FOR THE RTE-M ABSOLUTE LOADER * (SEE INFORMATION FOR SUBROUTINE 'APLCK'). * * THOSE REQUESTS WHICH ARE ACCEPTABLE FOR PROCESSING VIA * MAY BE CLASSIFIED UNDER THE FOLLOWING 'EXEC' REQUEST CODES: * * 6 - TERMINATE A PROGRAM (PREVIOUSLY SCHEDULED VIA ) * * 9 - SCHEDULE A PROGRAM WITH 'WAIT' (REPLY RETURNED UPON COMPLETION) * * 23 - QUEUE-SCHEDULE A PROGRAM WITH 'WAIT' (SCHEDULE WHEN AVAILABLE) * (REPLY RETURNED UPON COMPLETION OF SCHEDULED PROGRAM) * * NOTE: FOR RC=9,23 PARAMETERS RETURNED FROM THE SCHEDULEE-VIA 'PRTN' OR * 'PRTM'-WILL BE PASSED TO THE CALLER. [ SETS =-1, *  TO INFORM THAT PARAMETERS HAVE BEEN RETURNED.] * * 24 - QUEUE-SCHEDULE A PROGRAM IMMEDIATELY (SCHEDULE WHEN AVAILABLE) * (REPLY RETURNED AS SOON AS PROGRAM IS SCHEDULED) * * ERRORS, ORIGINATING IN : * * "DS06" - ILLEGAL REQUEST CODE (NOT 6,9,23,24) * * "DS08" - INSUFFICIENT MEMORY FOR 'STRING BUFFER', OR NOT DORMANT. * * "SC01" - MISSING SCHEDULING PARAMETER. * "SC02" - ILLEGAL SCHEDULING PARAMETER. * "SC05" - ATTEMPT TO CONTROL , OR UNDEFINED PROGRAM. * "XXNN" - [ RTE SYSTEM-ORIGINATED ERRORS ] SKP * EXT D65GT,D65SV,PGMAD,#CNOD,#LNOD,#NODE EXT $LIBR,$LIBX,$OPSY,EXEC A EQU 0 B EQU 1 KEYWD EQU 1657B XEQT EQU 1717B SUP SPC 2 EXECW LDA B,I GET THE PASSED PARAMETER. IFZ EXT DBUG SZA JMP SETCL JSB DBUG DEF *+1 JSB EXEC DEF *+4 DEF D6 DEF D0 DEF D1 JMP EXECM+1 XIF * SETCL STA SAVCL SAVE CLASS NUMBER. * CLB LDA $OPSY GET THE SYSTEM SPECIFICATION. AND D4 ISOLATE THE RTE-M BIT(#2). SZA IF NOT RTE-M, SKIP; STB SCHD0 ELSE, PREVENT PROCESSING. * * CALL TO 'GET' A NEW REQUEST. * GET JSB D65GT WE WAIT FOR A REQUEST TO ARRIVE DEF *+6 DEF SAVCL MONITOR'S CLASS DEF RQBUF REQUEST BUFFER ADDRESS. DEF D16 MAXIMUM REQUEST LENGTH. DABFA DEF DABUF DATA BUFFER ADDRESS. DEF D512 MAXIMUM DATA BUFFER SIZE. JMP GET IGNORE INITIAL ERRORS! * DST SAVA = REQUEST LENGTH; = DATA LENGTH. LDA D7 INITIALIZE FOR A STA RPLYL MINIMUM-LENGTH REPLY. * SKP * * EXAMINE AND VERIFY THE REQUEST CODE (VALID CODES: 6,9,23,24) * LDA RQBUF+4 GET THE REQUEST CODE. CPA D6 TERMINATION REQUEST? JMP PKILL YES, GO TO KILL THE PROGRAM. (CPA D9 SCHEDULE WITH WAIT? JMP SCHED YES. GO TO SCHEDULE & WAIT. CPA D23 QUEUE-SCHEDULE WITH WAIT? JMP SCHED YES--THAT'S ACCEPTABLE. CPA D24 QUEUE-SCHEDULE WITHOUT WAIT? JMP SCHED YES--ACCEPT THAT REQUEST, ALSO. * DLD DS06 ERROR "DS06": BAD REQUEST CODE. JMP ERRTN RETURN ERROR-CODE TO CALLER. ERSC1 DLD SC01 ERROR "SC01": MISSING PARAMETER. JMP ERRTN ERSC2 DLD SC02 ERROR "SC02": INVALID PARAMETER. JMP ERRTN RETURN ERROR-CODES TO CALLER. ERSC5 DLD SC05 ERROR "SC05": IMPROPER PROGRAM REFERENCE. JMP ERRTN ERDS8 DLD DS08 ERROR "DS08": INSUFFICIENT RESOURCES. * ERRTN CCE,RSS ERROR RETURN. SCDON CLB,CLE SCHEDULE-RETURN (NO PARAMETERS). * DONE DST RQBUF+4 STORE REGISTERS IN WORDS 5&6 OF REPLY. LDA #NODE GET THE LOCAL NODE NUMBER, AND ELA,CLE,RAR INCLUDE ASCII-ERROR FLAG (BIT#15). STA RQBUF+6 STORE THE ERROR INDICATOR--IF ANY. LDA RQBUF GET THE STREAM WORD. IOR BIT14 ADD THE REPLY FLAG (BIT#14). STA RQBUF RESTORE THE MODIFIED WORD. LDA DM1 RESET #CNOD =-1, TO INDICATE JSB STCND THAT IS INACTIVE. * * CALL TO INDICATE, TO THE USER, THAT THE REQUEST IS COMPLETE. * JSB D65SV TRANSMIT DEF *+5 THE REPLY DEF RQBUF BACK TO DEF RPLYL THE ORIGINAL DEF DABUF REQUESTOR'S DEF D0 NODE. NOP IGNORE ERRORS--WE CAN DO NOTHING! JMP GET RETURN FOR THE NEXT REQUEST/COMPLETION. * SKP * PROGRAM COMPLETION, SCHEDULE W/WAIT, & QUEUE-SCHEDULEING RC=6,9,23,24 * PKILL EQU * PROGRAM TERMINATION SHARES 'SCHED' CODE. * SCHED IOR BIT15 ADD NO-ABORT BIT(#15) TO REQUEST CODE, STA RQBUF+4 AND SAVE FOR THE CALL TO 'EXEC'. JSB PGMAD GO TO GET THE SCHEDULEE'S STATUS. DEF *+2 THE PROGRA%M OF INTEREST DEF RQBUF+5 IS NAMED IN THE REQUEST BUFFER. * SZA ANY ATTEMPT TO CPA XEQT REMOTELY-CONTROL JMP ERSC5 IS UN-ACCEPTABLE! ERROR: "SC05". * STB STRAD SAVE PROGRAM STATUS FOR 'APLCK'. LDB RQBUF+4 GET THE REQUEST CODE. ELB,CLE,ERB REMOVE THE NO-ABORT BIT(#15). CPB D6 PROGRAM TERMINATION REQUEST? JMP *+2 YES. SKIP TO DETERMINE LINEAGE. JMP SCHD0 NO. IT'S A NORMAL SCHEDULE REQUEST. * ADA D20 POINT TO WORD #21 IN I.D. SEGMENT. LDA A,I GET THE CONTENTS. AND B377 ISOLATE THE FATHER'S I.D. SEG. NO. ADA KEYWD COMPUTE THE ADDRESS FOR THE ADA DM1 FATHER'S KEYWORD-TABLE ENTRY. LDA A,I GET THE FATHER'S I.D. SEGMENT ADDRESS. CPA XEQT OUR OFFSPRING? JMP SCHD0+1 YES, WE CAN HONOR THE REQUEST. JMP ERSC5 NO. WE CANNOT PROCESS THE REQUEST! * SCHD0 JSB APLCK CHECK FOR [NOP: RTE-II/III/IV] * LDA SAVA GET THE REQUEST LENGTH. ADA DM16 IF THE LENGTH [AFTER APLCK COMPENSATION] SSA,RSS EXCEEDS FIFTEEN WORDS, THEN JMP ERSC2 IT IS AN INVALID REQUEST! * LDA SAVA GET THE REQUEST BUFFER SIZE, AGAIN. LDB RTNDF GET THE DEFAULT RETURN POINTER. ADA DM8 SUBTRACT THE MINIMUM REQUEST SIZE. ADB A COMPUTE THE ACTUAL RETURN ADDRESS, STB RTNAD AND CONFIGURE THE RETURN POINTER. SZA,RSS ANY ADDITIONAL PARAMETERS? JMP SCHD2 NO. GO CLEAR REMAINDER OF CALL BUFFER. * SSA WERE WE SUPPLIED WITH ENOUGH PARAMETERS? JMP ERSC1 NO. * ERROR: SC01 ! CAX YES. SAVE ADDITIONAL PARAMETER COUNT. LDA PR3DF = ADDRESS OF NEXT USER-PARAMETER LDB RTNDF =ADDRESS OF NEXT CALL-BUFFER LOCATION. SCHD1 STA B,I STORE PARAM ADDR INTO CALL BUFFER. INA ADVANCE PARAMETER POINTER. INB ADVANCE CALL BUFFER POINTER. DSX ALL PARAMETERS PROCESSED? JMP SCHD1 NO. PROCESS THE NEXT ONE. * CLA PREPARE TO CLEAR REST OF CALL BUFFER. SCHD2 ADB D2 ADVANCE POINTER PAST ERROR INSTRUCTIONS. CPB LASTA LAST CALL BUFFER LOCATION CLEARED? JMP SCHD3 YES. GO TO COMPLETE THE CALL. STA B,I NO. CLEAR THE LOCATION. INB ADVANCE THE CALL BUFFER POINTER, AND JMP SCHD2+1 GO TO CLEAR THE NEXT LOCATION. * SCHD3 LDA STRAD+1 GET THE STRING-SIZE POINTER--IF ANY. SZA,RSS PASSING A STRING TO THE PROGRAM? JMP SCHD4 NO. BYPASS DATA-BUFFER SET-UP. LDA DABFA GET LOCAL DATA BUFFER ADDRESS, STA STRAD AND ESTABLISH STRING-POINTER IN CALL. * SCHD4 DLD ERRIN LOAD THE ERROR-DETECTION INSTRUCTIONS. DST RTNAD,I STORE THEM AT END OF CALLING SEQUENCE. * LDA RQBUF+2 GET THE SOURCE-NODE. JSB STCND ESTABLISH CURRENT USER'S NODE IN . LDB DM1 PREPARE FOR RETURN-PARAMETER CHECKING. * * THE CONFIGURED 'EXEC' CALLING SEQUENCE IS EXECUTED BELOW: * JSB EXEC BUFFER FOR ASSEMBLING 'EXEC' REQUESTS. RTNAD DEF PR3AD RETURN POINTER (CONFIGURED). DEF RQBUF+4 REQUEST CODE (SUPPLIED BY CALLER) DEF RQBUF+5 POINTER TO FIRST REQUEST PARAMETER. PR3AD NOP CONFIGURED POINTERS (7-MAX.) TO NOP USER-SUPPLIED CALLING-PARAMETERS, NOP WHICH RESIDE IN THE REQUEST BUFFER. NOP UN-USED CALLING-SEQUENCE LOCATIONS ARE NOP DYNAMICALLY CHANGED TO 'NOP'. STRAD NOP STRING-BUFFER ADDRESS--IF ANY. NOP STRING-LENGTH POINTER--IF ANY. NOP [ ERROR-DETECTION INSTRUCTIONS: WILL BE NOP POSITIONED TO FOLLOW LAST POINTER ] ENDBF CPA DM1 REJECTING A STRING-PASSING REQUEST? JMP ERDS8 YES, SKIP TO RETURN "DS08".r SEZ NO. WAS A SYSTEM-LEVEL ERROR DETECTED? JMP DONE YES. RETURN THE ERROR CODES TO CALLER! * CPB DM1 IF NO PARAMETERS WERE RETURNED, JMP SCDON THEN RETURN TO CALLER WITH =0; STA STCND ELSE, SAVE THE STATUS TEMPORARILY. * LDA B SOURCE=RETURN-PARAMETERS IN I.D.SEGMENT. LDB RTPRM DESTN.=EIGHTH WORD OF REPLY BUFFER. MVW D5 MOVE THE PARAMETERS TO THE REPLY BUFFER. * LDA D12 SET THE STA RPLYL REPLY LENGTH =12 WORDS. LDA STCND RECOVER THE PROGRAM STATUS. CCB,CLE INDICATE: PARAMETERS RETURNED--NO ERROR. JMP DONE COMPLETE THE REQUEST PROCESSING. * SKP * SET #CNOD IN : + NODE # = CURRENT CALLER; -1 = INACTIVE. * STCND NOP JSB $LIBR D0 NOP STA #CNOD SET INTO #CNOD, IN . JSB $LIBX DEF STCND RETURN. * * SPECIAL PROCESSING FOR IN RTE-M ENVIRONMENT: * * IF NOT SCHEDULING , RETURN; ELSE, CHECK STATUS. * IF NOT DORMANT, REJECT "DS08"; ELSE, STORE SECURITY CODE AND * CARTRIDGE REFERENCE NO. INTO I.D. SEGMENT WORDS #27,28. * STORE REQUEST'S SOURCE-NODE INTO #CNOD IN , AND ALSO STORE * FILE-LOCATION NODE INTO #LNOD IN . * APLCK NOP ADA D12 POINT TO I.D. SEGMENT WORD #13 (NAME). RAL FORM A BYTE ADDRESS STA B FOR THE PROGRAM'S I.D. SEGMENT "NAME". * LDA APLBA GET THE REFERENCE BYTE ADDRESS. CBT D5 IF THIS IS AN SCHEDULE REQUEST, JMP APSET THEN GO TO PROCESS IT'S PARAMETERS; JMP APLCK,I ELSE, NO FURTHER SPECIAL JMP APLCK,I PROCESSING IS REQUIRED. * APSET LDA STRAD GET THE I.D. SEGMENT STATUS WORD. AND B17 ISOLATE CURRENT STATUS. SZA IF IT IS NOT AVAILABLE, JMP ERDS8 THEN, NOTHING MORE CAN BE DONE! * LDA SAVA R*($ COMPENSATE FOR THE CPA D16 THREE ADDITIONAL ADA DM3 REQUEST-PARAMETERS, USED TO STA SAVA SPECIFY DOWN-LOADING. * CLE,ERB CONVERT FROM BYTE, TO WORD ADDRESS. ADB D12 POINT TO I.D. SEGMENT WORD #27. LDA RQBUF+13 GET THE SECURITY CODE. JSB $LIBR NOP STA B,I SET SECURITY CODE INTO I.D. WORD #27. CLE,INB LDA RQBUF+14 GET THE CARTRIDGE REFERENCE NUMBER. STA B,I SET CRN INTO I.D. SEGMENT WORD #28. * LDA RQBUF+15 GET LOCATION-NODE FOR THE RELOC. FILE. STA #LNOD SET #LNOD IN , FOR . JSB $LIBX DEF APLCK RETURN. * APLBA DBL *+1 REFERENCE-NAME BYTE ADDRESS. ASC 3,APLDR * SKP DM16 DEC -16 DM8 DEC -8 DM3 DEC -3 DM1 DEC -1 D1 DEC 1 D2 DEC 2 D4 DEC 4 D5 DEC 5 D6 DEC 6 D7 DEC 7 D9 DEC 9 D12 DEC 12 D16 DEC 16 B17 OCT 17 D20 DEC 20 D23 DEC 23 D24 DEC 24 D512 DEC 512 B377 OCT 377 BIT14 OCT 40000 BIT15 OCT 100000 DS06 ASC 2,DS06 DS08 ASC 2,DS08 SC01 ASC 2,SC01 SC02 ASC 2,SC02 SC05 ASC 2,SC05 RPLYL NOP RTPRM DEF RQBUF+7 PR3DF DEF RQBUF+8 RTNDF DEF PR3AD LASTA DEF ENDBF * * * * DO NOT CHANGE ORDER OF NEXT FOUR STATEMENTS * * * * ERRIN CCE,RSS CLE SAVA NOP NOP * * * * * * * * * * * * * * * * * * * * * * * * * * * * SAVCL NOP DABUF BSS 512 RQBUF BSS 16 * * BSS 0 [ SIZE OF ] * END EXECW +* E Q 91740-18009 1740 S C0122 DS/1000 MODULE: DLIST              H0101 ?ASMB,R,L,C,N IFN * START RTE-II/III CODE HED DLIST 91740-16009 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 XIF * END RTE-II/III CODE * IFZ * START RTE-M FLOPPY CODE HED DLIST 91740-16010 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 XIF * END RTE-M FLOPPY CODE * IFN * START RTE-II/III CODE NAM DLIST,19,30 91740-16009 REV 1740 770920 XIF * END RTE-II/III CODE * IFZ * START RTE-M FLOPPY CODE NAM DLIST,19,30 91740-16010 REV 1740 770812 XIF * END RTE-M FLOPPY CODE SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ******************************************************* * *DLIST DIRECTORY LIST MONITOR FOR DS-1000 * IFN = RTE-II/III SYSTEMS * IFZ = RTE-M FLOPPY-BASED SYSTEMS * *SOURCE PART # IFN = 91740-18009 REV 1740 * IFZ = 91740-16010 REV 1740 * *REL PART # IFN = 91740-16009 REV 1740 * IFZ = 91740-16010 REV 1740 * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 9-18-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN (MAY 1976) * DAN GIBBONS (JANUARY 1977) * ******************************************************** SPC 2 * * PROGRAM TO DO DIRECTORY LISTING ON AS * MANY REMOTE TERMINALS AS REQUIRED * * ENT DLIST * EXT EXEC,D65SV,D65GT,#NODE IFZ * START RTE-M FLOPPY CODE EXT .DRCT,$CDIR,$XECM XIF * END RTE-M FLOPPY CODE * * A b EQU 0 B EQU 1 SUP HED DLIST: MAIN * (C) HEWLETT-PACKARD CO. 1977 * * MAIN ROUTINE STARTS HERE * DLIST NOP LDA B,I SEE IF THEY WANT DEBUG STA CLSSN SAVE CLASS NUMBER SPC 1 DLST0 JSB D65GT DO A GET CALL DEF *+6 DEF CLSSN DEF IRBUF DEF D23 DEF D0 NO DATA DEF D0 JMP DLST0 IGNORE ERROR CALL * LDA BROUT GET ADDRESS OF CURRENT COROUTINE SZA,RSS JMP SUB1 JMP A,I GO TO SPECIFIED SUBROUTINE SPC 2 SUB2A DEF SUB2 SUB3A DEF SUB3 SUB4A DEF SUB4 SUB5A DEF SUB5 SUB7A DEF SUB7 DON1A DEF DONE1 SPC 5 * * HERE ON NEW REQUEST * SUB1 EQU * IFN * START RTE-II/III CODE LDA DBFA GET DIRECTORY DATA BUFR ADR STA LUDSP SAVE FOR LU LOOPING SUB2 LDA D2 GET LU OF SYSTEM DISC STA WCLU SAVE AS WANTED LU LDA TATSD GET # OF TRACKS IN SYSTEM DISC ADA M1 GET TO LAST TRACK STA WTRCK SAVE IN WANTED TRACK CLB SET FOR SECTOR ZERO STB WSEC SAVE IN WANTED SECTOR LDA D128 READ 128 WORDS JSB GETSC GET THE SECTOR IF NECESSARY LDA LUDSP,I GET LU OF CARTRIDGE SZA,RSS DONE? XIF * END RTE-II/III CODE * IFZ * START RTE-M FLOPPY CODE * LDA M1 INITIALIZE VARIABLES TO ENSURE STA CTRCK FRESH FILE DIRECTORY COPY STA CSEC IS READ AT LEAST ONCE. STA CCLU * JSB .DRCT GET ADR OF FLOPPY DIRECTORY DEF $CDIR STA LUDSP SAVE FOR LU LOOPING SUB2 JSB .DRCT GET ADR OF DIRECTORY DEF $CDIR ADA M1 GET TO END-OF-DIRECTORY ADR LDA A,I GET THE ADDRESS CPA LUDSP DONE? JMP DONE YES LDA LUDSP,I GET LU OF CARTRIDGE SZA DONE OR $CDIR CPA M2 NOT INITIALIZED? 5s XIF * END RTE-M FLOPPY CODE * JMP DONE YES LDA BROUT SEE IF FIRST TIME SZA JMP SUB22 NOT FIRST TIME IFZ * START RTE-M FLOPPY CODE LDA $XECM GET RTE-M SECURITY CODE STA MSCA,I SAVE IT CLA XIF * END RTE-M FLOPPY CODE LDB MCODF SEE IF THEY SUPPLIED A MASTER CLE,SZB,RSS JMP SUB21 CMB,INB CODE, AND IF THEY DID, DOES ADB MSCA,I IT MATCH? CLE,SZB,RSS IF MATCH,SET E REG CCE MATCH ON SECURITY CODE...SET E REG LDA MCODF SEE IF SECURITY CODE PRESENT LDB MSCA,I GET ACTUAL VALUE SZB,RSS IF MASTER SECURITY CODE...DON'T CHECK SZA,RSS WAS ONE SUPPLIED WHEN THERE WASN'T ONE? RSS NO...ONE NOT SUPPLIED CCE ONE SUPPLIED...SET TO ALLOW CLA SET FLAG SUB21 ELA STA MCODF SAVE MASTER SECURITY CODE MATCH SUB22 LDA CRLU DO THEY WANT A SPECIFIED LU? SZA,RSS LU SUPPLIED? JMP MCR NO LDB LUDSP GET DISPLACEMENT CMA,INA ASSUME LU SSA,RSS IS IT LABEL? JMP SUB23 NO...LU CMA,INA YES...LABEL...MAKE POS AGAIN ADB D2 AND GET TO LABEL WORD SUB23 CPA B,I IS LABEL OR LU MATCH? JMP MCR MATCH...PROCESS LU LDA LUDSP NO MATCH GO TO NEXT ONE ADA D4 STA LUDSP JMP SUB2 SPC 5 * * ROUTINE TO PROCESS A MOUNTED CARTRIDGE * SPC 1 MCR LDA SUB5A SET UP FOR RETURN AFTER SENDING THE LINE STA BROUT LDA SECT2 GET # OF SECTORS IN TRACK STA SCTRK SAVE IN SECTORS/TRACK LDA LUDSP,I GET LU OF DISK STA WCLU SAVE AS WANTED CURRENT LU ISZ LUDSP GET TO FIRST DIRECTORY TRACK LDB LUDSP,I GET DIRECTORY TRACK ADDRESS STB WTRCK SAVE TRACK ADDRESS ISZ LUDSP GET TO LOCK WORD# ISZ LUDSP LDB LUDSP,I GET LOCK WORD ISZ LUDSP GET TO NEXT ENTRY SZB IS LU LOCKED JMP SUB2 YES * IFN * START RTE-II/III CODE CPA D2 IS IT SYSTEM DISC? LDB D14 YES XIF * END RTE-II/III CODE STB WSEC SAVE STARTING SECTOR ADDRESS LDA DBFA SET FOR ZERO DISPLACEMENT WITHIN BUFFER JSB SCFX GO GET SECTOR JMP SUB2 NO DIRECTORY? LDA DISP GET NAME OF CART. LDB CRNAA GET DESTINATION ADDRESS MVW D3 MOVE 3 WORDS LDA CRNA GET FIRST WORD OF CR NAME AND B7777 GET RID OF SIGN BIT STA CRNA RESTORE LDA DISP GET TO LABEL WORD ADA D3 LDA A,I CONVERT LABEL WORD TO ASC JSB BNDEC DEF LWA LABEL WORD ADDRESS LDB DISP GET TO # SEC/TRACK ADB D6 LDA B,I GET # OF SECTORS/TRACK STA SCTRK SAVE AS # OF SECTORS/TRACK ADB D2 GET TO # OF DIRECTORY TRACKS LDA B,I ADA WTRCK GET ENDING DIRECTORY TRACK STA NTRKS LDA B,I GET # OF DIRECTORY TRACKS CMA,INA MAKE # POS. JSB BNDEC CONVERT TO ASC DEF DTRKA LDA DTRKA+2 MOVE UP THE LEAST SIGNIFICANT DIGITS STA DTRKA THEY ARE THE ONLY ONES TO BE PRINTED JSB WTLIN SEND LINE TO TERMINAL DEF HEAD1 FIRST HEADING LINE SPC 5 * * HERE AFTER FIRST HEADING LINE WRITTEN * SUB3 LDA SUB4A GET ADDRESS WHERE TO GO NEXT TIME STA BROUT LDB D13 LDA MCODF SZA SECURITY CODES BEING LISTED? LDB D16 YES, ADD "SCODE" TO HEADER STB HEAD2 JSB WTLIN SEND OUT SEND HEADING LINE DEF HEAD2 SPC 5 * * HERE AFTER HEADING LINE WRITTEN * JUST OUTPUT A BLANK LINE * SUB5 LDA SUB3A GET ADDRESS FOR NEXT TIME STA BROUT JS^B WTLIN SEND OUT BLANK LINE DEF BLNKL SPC 5 * * HERE TO START OUTPUTING DIRECTORY * SUB4 LDA DISP GET FILE ENTRY ADA D16 JSB SCFX SEE IF WE NEED NEW SECTOR JMP SUB2 DONE...NO MORE DIRECTORY LDA DISP,I IS THIS FILE PURGED SSA JMP SUB4 YES...GO TO NEXT ONE SZA,RSS DONE? JMP SUB6 YES...2 SPACES & GET NEXT LU JSB MDLIN MOVE THE LINE JMP SUB4 ERROR CONDITION JSB WTLIN GO WRITE THE LINE DEF DLINA ADDRESS OF DETAIL LINE SPC 5 * * HERE TO OUTPUT A BLANK LINE * SUB6 LDA SUB7A GET ADDRESS FOR NEXT TIME STA BROUT JSB WTLIN OUTPUT A BLANK LINE DEF BLNKL SPC 5 * * HERE TO OUTPUT A BLANK LINE * SUB7 LDA SUB2A GET ADDRESS FOR NEXT TIME STA BROUT JSB WTLIN OUTPUT A BLANK LINE DEF BLNKL HED DLIST: ROUTINES * (C) HEWLETT-PACKARD CO. 1977 * * SUBROUTINE TO MOVE DETAIL LINE TO PRINT LINE * CALLING SEQUENCE * JSB MDLIN * NO MATCH RETURN...IE..FILTER MIS-MATCH,TYPE NO MATCH * NORMAL RETURN * SPC 1 MDLIN NOP LDA FLTR IS FILTER SPECIFIED SZA NO CPA SPACA OR IS IT ALL SPACE? JMP NDLN2 NOT SUPPLIED OR SPACE LDA FLTRA GET ADDRESS WHERE FILTER LOCATED CLE,ELA CONVERT TO BYTE ADDRESS STA TEMP SAVE FILTER BYTE ADDRESS LDA DISP GET ADDRESS OF NAME CLE,ELA CONVERT TO BYTE ADDRESS STA TEMP1 SAVE IN BYTE ADD COUNTER LDA M6 # OF CHAR IN FILTER STA TEMP2 SAVE IN DOWN COUNTER MDN11 LDB TEMP GET BYTE ADD OF FILTER LBT GET BYTE SZA,RSS IF ZERO, CHANGE TO SPACE LDA C40 C40=SPACE CPA FLTRC IS IT A "-"? JMP MDN12 YES...DON'T CHECK STA TEMP3 SAVE IN TEMP LOCATION LDB TEMP1 GET BYɸTE ADDRESS OF NAME LBT GET BYTE CPA TEMP3 IS THERE A MATCH? RSS YES JMP MDLIN,I NO...IGNORE ENTRY MDN12 ISZ TEMP GET TO NEXT ENTRY ISZ TEMP1 ISZ TEMP2 DONE? JMP MDN11 NO SPC 2 * * AFTER CHECKING NAME, CHECK TYPE * NDLN2 LDB DISP GET TO FILE TYPE ADB D3 LDB B,I LDA FTYP CHECK WITH FILE TYPE PASSED RAL,CLE,ERA IS THERE A FILE TYPE? SEZ FILE TYPE SPECIFIED CPA B YES...DOES IT MATCH RSS MATCH...OR NO FILE TYPE SPECIFIED JMP MDLIN,I FILE TYPE NOT MATCHED STB FTYPT SAVE TYPE IN TEMP FOR LATER LDA B JSB BNDEC CONVERT FILE TYPE TO ASC DEF DTYPA LDA DISP MOVE NAME TO OUTPUT LINE LDB ADNAM GET DESTINATION ADDRESS MVW D3 MOVE NAME LDA DISP GET # OF SECTORS OR LU ADA D4 ASSUME LU LDB FTYPT SEE IF TYPE=0 SZB YES? ADA D2 NO...GET # OF SECTORS LDA A,I GET VALUE SZB IF LU...DON'T DIVIDE BY 2 CLE,ERA CONVERT TO # OF BLOCKS JSB BNDEC CONVERT TO ASC DEF DBSLU LDB DISP GET TO SECURITY CODE ADB D8 LDA B,I GET SECURITY CODE JSB BNDEC CONVERT TO ASC DEF DSECA LDB FTYPT CHECK IF THIS REC AN EXTENT LDA DISP ADA D5 LDA A,I IF EXTENT...CAN'T BE TYPE=0 AND UB377 NO EXTENT A=0 SZB IF TYPE 0...DON'T CHECK FOR EXTENT SZA,RSS NOT TYPE 0...EXTENT? ISZ MDLIN NOT EXTENT..OR TYPE 0 NORM RETURN LDA DLLWS LENGTH OF DETAIL LINE WITH S.C. LDB MCODF SUPPLY SECURITY CODE? SZB,RSS LDA DLLS NO...LENGTH WITHOUT SECURITY CODE STA DLINA SAVE FOR TRANSFER JMP MDLIN,I RETURN SPC 1 FTYPT NOP DLLWS DEC 16 DLLS 4DEC 12 D5 DEC 5 SPC 5 * * HERE WHEN WE ARE ALL DONE * DONE LDA BROUT SEE IF WE SENT THEM ANYTHING SZA JMP DONE1 YES...JUST TERMINATE LDA DON1A GET ADDRESS OF TERMINATION POINT STA BROUT JSB WTLIN SEND "DISK NOT MOUNTED" DEF NOCRM * DONE1 CLA STA LNGH SET FOR NO DATA LDA BIT14 TELL OTHER SIDE, ALL DONE JMP TERM SPC 5 * * SUBROUTINE TO SEND DATA TO REMOTE * CALLING SEQUENCE * JSB WTLIN * DEF BUFFER * BUFFER FORMAT * LENGTH WORD, DATA BUFFER * WTLIN NOP LDA WTLIN,I GET ADDRESS OF OUPUT LINE INA GET TO FIRST DATA WORD STA WTLNB LDB WTLIN,I GET LENGTH OF MESSAGE LDB B,I LDA LNGH GET AVAILABLE LENGTH CMA,INA ADA B SEE IF THERE WAS TO MUCH ROOM SSA CHANGE LENGTH? STB LNGH YES...SET IN CORRECT LENGTH * CLA SET FOR MORE TO COME TERM STA STAT SAVE STATUS LDA STYP GET STREAM TYPE IOR BIT14 SET FOR REPLY STA STYP LDA #NODE STA IRBUF+6 SET STATUS LOCATION * JSB D65SV SEND REPLY DEF *+5 DEF IRBUF DEF D23 REPLY LENGTH WTLNB NOP DATA ADDRESS DEF LNGH DATA LENGTH * NOP IGNORE ERROR RETURN JMP DLST0 GO DO A GET CALL * SPC 5 * * SUBROUTINE TO KEEP DISPLACEMENT ON DISK OK * CALLING SEQUENCE * JSB SCFX * NO MORE DIRECTORY TRACK RETURN * NORMAL RETURN * A REG=DISPLACEMENT * UPON RETURN * WILL UPDATE WTRCK,WSEC,AND DISP AS REQUIRED * ASSUMES DISP STARTS WITH ADDRESS OF BUFFER * SCTRK MUST BE SET TO # OF SECTORS/TRACK * IF TRACK CHANGES, NTRCK=LAST DIRECTORY TRACK-1 * ALL SECTORS ARE ASSUMED TO BE 128 WORDS LONG * SPC 1 SCFX NOP CMA,INA NEGATE ADDRESS ADA DBFA GET ,DISPLACEMENT CMA,INA MAKE IT POSITIVE CLB CHECK IF OVERFLOW DIV D128 CROSS A SECTOR BOUNDRY ADB DBFA GET DISPLACEMENT AS AN ADDRESS STB DISP SAVE DISPLACEMENT ADDRESS SZA,RSS SECTOR CHANGE JMP SCFXA NO LDA D14 YES...GET TO NEXT SECTOR ADA WSEC GET TO NEXT SECTOR ADDRESS CLB DIV SCTRK SEE IF WE HAVE A HAVE LOOPED AROUND STB WSEC SAVE NEW SECTOR ADDRESS SZA IF NO ROLLOVER OR SZB NO NEW TRACK NEEDED JMP SCFXA DON'T UPDATE TRACK ADDRESS CCB UPDATE TRACK ADDRESS ADB WTRCK GET TO NEXT TRACK CPB NTRKS DONE? JMP SCFX,I YES STB WTRCK NO...SET IN NEW TRACK ADDRESS SCFXA LDA D128 DO A 128 WORD READ JSB GETSC ISZ SCFX GET TO RETURN JMP SCFX,I RETURN SPC 5 * * SUBROUTINE TO READ A SECTOR * CALLING SEQUENCE * JSB GETSC * THE FOLLOWING MUST BE SET UP * WTRCK,WSEC,WCLU * GETSC NOP STA BUFL SAVE BUFFER READ LENGTH LDA WTRCK GET CURRENT TRACK ADDRESS CPA CTRCK SAME AS ONE WE GOT NOW? RSS YES JMP GTSC1 NO...GO READ IT LDA WSEC IS IT THE SAME SECTOR CPA CSEC ? RSS YES JMP GTSC1 NO...GO READ IT LDA WCLU SAME LU? CPA CCLU JMP GETSC,I YES...DON'T READ SECTOR GTSC1 LDA WCLU SET UP AS CURRENT STA CCLU LDA WTRCK STA CTRCK LDA WSEC STA CSEC JSB EXEC GO READ A SECTOR DEF *+7 DEF D1 DEF WCLU DEF DBUF DEF BUFL DEF WTRCK DEF WSEC JMP GETSC,I GOT SECTOR, RETURN SPC 2 CTRCK OCT -1 CSEC OCT -1 CCLU OCT -1 BUFL NOP SPC 5 * * SUBROUTINE CONVERT BINARY TO ASCII DECIMAL * CALLING SEQUENCE * JSB BNDEC * W DEF BUFFER WHERE TO ASC * A REG=BINARY # * BNDEC NOP STA DTEMP SAVE BINARY # LDB BNDEC,I GET ADDRESS WHERE TO ASC CLE,ELB CONVERT TO BYTE ADDRESS STB DTMP1 SAVE BYTE ADDRESS ISZ BNDEC GET TO RETURN ADDRESS LDA DNMA GET ADDRESS OF DIVISORS STA DTMP2 SAVE FOR DIVIDING LDA M5 GET LOOP COUNT STA DTMP3 SAVE IN DOWN COUNTER LDA C40 GET A SPACE CHARACTERR LDB DTEMP GET BINARY VALUE SSB,RSS IF NEGATIVE...CONVERT JMP BNDCB NOT NEGATIVE CMB,INB NEGATIVE, MAKE POSITIVE STB DTEMP LDA C55 SET IN NEG SIGN BNDCB LDB DTMP1 GET BYTE ADDRESS SBT SAVE SIGN ISZ DTMP1 GET NEXT BYTE ADDRESS BNDCA LDA DTEMP GET BINARY # CLB GET A ZERO DIV DTMP2,I STB DTEMP SAVE REMAINDER ADA C60 CONVERT TO ASC LDB DTMP1 GET CURRENT BYTE ADDRESS SBT SAVE ASC BYTE ISZ DTMP2 GET NEXT DIVISOR ISZ DTMP1 GET NEXT BYTE ADDRESS ISZ DTMP3 DONE? JMP BNDCA NO JMP BNDEC,I RETURN SPC 1 C55 OCT 55 DTEMP NOP DTMP1 NOP DTMP2 NOP DTMP3 NOP DNMA DEF DNM DNM DEC 10000,1000,100,10,1 SPC 5 * * PARMB LAYOUT * IRBUF BSS 23 STYP EQU IRBUF STREAM TYPE STAT EQU IRBUF+7 STATUS LNGH EQU IRBUF+8 LENGTH WORD FLTR EQU IRBUF+10 NAME FILTER...0..NO FILTER MCODF EQU IRBUF+13 MASTER SECURITY CODE CRLU EQU IRBUF+14 LU OF CART. TO DO FTYP EQU IRBUF+15 FILE TYPE FILTER BROUT EQU IRBUF+9 ADR OF NEXT PROCESS ROUTINE. 0=START WCLU EQU IRBUF+16 CURRENT LU FOR DISK READ WTRCK EQU IRBUF+17 CURRETN TRACK TO READ WSEC EQU IRBUF+18 CURRENT SECTOR TO READ DISP EQU IRBUF+19 DISPLACEMENT IN BUFFER SCTRK EQU IRBUF+20 # OF SECTORS/TRACK LUDSP EQU IRBUF+21 DISPLACEMENT IN DIRECTORY LU NTRKS EQU IRBUF+22 # OF DIRECTORY TRACKS C40 OC<:6T 40 C60 OCT 60 D3 DEC 3 D8 DEC 8 UB377 OCT 177400 D13 DEC 13 D14 DEC 14 D23 DEC 23 D16 DEC 16 D128 DEC 128 D4 DEC 4 D1 EQU DNM+4 DEC 1 D6 DEC 6 D0 DEC 0 D2 DEC 2 M1 DEC -1 M2 DEC -2 M5 DEC -5 M6 DEC -6 B7777 OCT 77777 BIT14 OCT 40000 FLTRA DEF FLTR FLTRC EQU C55 "DON'T-CARE" FILTER CHAR (MINUS SIGN) TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP * TATSD EQU 1756B SECT2 EQU 1757B DBFA DEF DBUF MSCA DEF DBUF+126 CLSSN NOP CRNAA DEF CRNA ADNAM DEF DNAMA SPC 1 * * DEFINE OUTPUT LINE INFO * HEAD1 DEC 27 SPACA ASC 1, ASC 3,ILAB= CRNA ASC 3, ASC 1, ASC 7,REMOTE DLIST ASC 2,CR#= LWA ASC 3, ASC 1, ASC 5,DIR TRKS= DTRKA ASC 3, SPC 1 HEAD2 NOP ASC 16, NAME TYPE #BLKS/LU SCODE SPC 1 NOCRM DEC 9 ASC 9, DISK NOT MOUNTED DLINA DEC 16 ASC 1, DNAMA ASC 3, ASC 1, DTYPA ASC 3, ASC 1 DBSLU ASC 3, ASC 1, DSECA ASC 3, SPC 2 BLNKL DEC 1 OCT 20040 DBUF BSS 128 SPC 3 END EQU * END DLIST &[< FU 91740-18010 1740 S C0122 DS/1000 MODULE: DLIST              H0101 @ASMB,R,L,C,Z IFN * START RTE-II/III CODE HED DLIST 91740-16009 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 XIF * END RTE-II/III CODE * IFZ * START RTE-M FLOPPY CODE HED DLIST 91740-16010 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 XIF * END RTE-M FLOPPY CODE * IFN * START RTE-II/III CODE NAM DLIST,19,30 91740-16009 REV 1740 770920 XIF * END RTE-II/III CODE * IFZ * START RTE-M FLOPPY CODE NAM DLIST,19,30 91740-16010 REV 1740 770812 XIF * END RTE-M FLOPPY CODE SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ******************************************************* * *DLIST DIRECTORY LIST MONITOR FOR DS-1000 * IFN = RTE-II/III SYSTEMS * IFZ = RTE-M FLOPPY-BASED SYSTEMS * *SOURCE PART # IFN = 91740-18009 REV 1740 * IFZ = 91740-16010 REV 1740 * *REL PART # IFN = 91740-16009 REV 1740 * IFZ = 91740-16010 REV 1740 * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 9-18-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN (MAY 1976) * DAN GIBBONS (JANUARY 1977) * ******************************************************** SPC 2 * * PROGRAM TO DO DIRECTORY LISTING ON AS * MANY REMOTE TERMINALS AS REQUIRED * * ENT DLIST * EXT EXEC,D65SV,D65GT,#NODE IFZ * START RTE-M FLOPPY CODE EXT .DRCT,$CDIR,$XECM XIF * END RTE-M FLOPPY CODE * * A n EQU 0 B EQU 1 SUP HED DLIST: MAIN * (C) HEWLETT-PACKARD CO. 1977 * * MAIN ROUTINE STARTS HERE * DLIST NOP LDA B,I SEE IF THEY WANT DEBUG STA CLSSN SAVE CLASS NUMBER SPC 1 DLST0 JSB D65GT DO A GET CALL DEF *+6 DEF CLSSN DEF IRBUF DEF D23 DEF D0 NO DATA DEF D0 JMP DLST0 IGNORE ERROR CALL * LDA BROUT GET ADDRESS OF CURRENT COROUTINE SZA,RSS JMP SUB1 JMP A,I GO TO SPECIFIED SUBROUTINE SPC 2 SUB2A DEF SUB2 SUB3A DEF SUB3 SUB4A DEF SUB4 SUB5A DEF SUB5 SUB7A DEF SUB7 DON1A DEF DONE1 SPC 5 * * HERE ON NEW REQUEST * SUB1 EQU * IFN * START RTE-II/III CODE LDA DBFA GET DIRECTORY DATA BUFR ADR STA LUDSP SAVE FOR LU LOOPING SUB2 LDA D2 GET LU OF SYSTEM DISC STA WCLU SAVE AS WANTED LU LDA TATSD GET # OF TRACKS IN SYSTEM DISC ADA M1 GET TO LAST TRACK STA WTRCK SAVE IN WANTED TRACK CLB SET FOR SECTOR ZERO STB WSEC SAVE IN WANTED SECTOR LDA D128 READ 128 WORDS JSB GETSC GET THE SECTOR IF NECESSARY LDA LUDSP,I GET LU OF CARTRIDGE SZA,RSS DONE? XIF * END RTE-II/III CODE * IFZ * START RTE-M FLOPPY CODE * LDA M1 INITIALIZE VARIABLES TO ENSURE STA CTRCK FRESH FILE DIRECTORY COPY STA CSEC IS READ AT LEAST ONCE. STA CCLU * JSB .DRCT GET ADR OF FLOPPY DIRECTORY DEF $CDIR STA LUDSP SAVE FOR LU LOOPING SUB2 JSB .DRCT GET ADR OF DIRECTORY DEF $CDIR ADA M1 GET TO END-OF-DIRECTORY ADR LDA A,I GET THE ADDRESS CPA LUDSP DONE? JMP DONE YES LDA LUDSP,I GET LU OF CARTRIDGE SZA DONE OR $CDIR CPA M2 NOT INITIALIZED? 5s XIF * END RTE-M FLOPPY CODE * JMP DONE YES LDA BROUT SEE IF FIRST TIME SZA JMP SUB22 NOT FIRST TIME IFZ * START RTE-M FLOPPY CODE LDA $XECM GET RTE-M SECURITY CODE STA MSCA,I SAVE IT CLA XIF * END RTE-M FLOPPY CODE LDB MCODF SEE IF THEY SUPPLIED A MASTER CLE,SZB,RSS JMP SUB21 CMB,INB CODE, AND IF THEY DID, DOES ADB MSCA,I IT MATCH? CLE,SZB,RSS IF MATCH,SET E REG CCE MATCH ON SECURITY CODE...SET E REG LDA MCODF SEE IF SECURITY CODE PRESENT LDB MSCA,I GET ACTUAL VALUE SZB,RSS IF MASTER SECURITY CODE...DON'T CHECK SZA,RSS WAS ONE SUPPLIED WHEN THERE WASN'T ONE? RSS NO...ONE NOT SUPPLIED CCE ONE SUPPLIED...SET TO ALLOW CLA SET FLAG SUB21 ELA STA MCODF SAVE MASTER SECURITY CODE MATCH SUB22 LDA CRLU DO THEY WANT A SPECIFIED LU? SZA,RSS LU SUPPLIED? JMP MCR NO LDB LUDSP GET DISPLACEMENT CMA,INA ASSUME LU SSA,RSS IS IT LABEL? JMP SUB23 NO...LU CMA,INA YES...LABEL...MAKE POS AGAIN ADB D2 AND GET TO LABEL WORD SUB23 CPA B,I IS LABEL OR LU MATCH? JMP MCR MATCH...PROCESS LU LDA LUDSP NO MATCH GO TO NEXT ONE ADA D4 STA LUDSP JMP SUB2 SPC 5 * * ROUTINE TO PROCESS A MOUNTED CARTRIDGE * SPC 1 MCR LDA SUB5A SET UP FOR RETURN AFTER SENDING THE LINE STA BROUT LDA SECT2 GET # OF SECTORS IN TRACK STA SCTRK SAVE IN SECTORS/TRACK LDA LUDSP,I GET LU OF DISK STA WCLU SAVE AS WANTED CURRENT LU ISZ LUDSP GET TO FIRST DIRECTORY TRACK LDB LUDSP,I GET DIRECTORY TRACK ADDRESS STB WTRCK SAVE TRACK ADDRESS ISZ LUDSP GET TO LOCK WORD# ISZ LUDSP LDB LUDSP,I GET LOCK WORD ISZ LUDSP GET TO NEXT ENTRY SZB IS LU LOCKED JMP SUB2 YES * IFN * START RTE-II/III CODE CPA D2 IS IT SYSTEM DISC? LDB D14 YES XIF * END RTE-II/III CODE STB WSEC SAVE STARTING SECTOR ADDRESS LDA DBFA SET FOR ZERO DISPLACEMENT WITHIN BUFFER JSB SCFX GO GET SECTOR JMP SUB2 NO DIRECTORY? LDA DISP GET NAME OF CART. LDB CRNAA GET DESTINATION ADDRESS MVW D3 MOVE 3 WORDS LDA CRNA GET FIRST WORD OF CR NAME AND B7777 GET RID OF SIGN BIT STA CRNA RESTORE LDA DISP GET TO LABEL WORD ADA D3 LDA A,I CONVERT LABEL WORD TO ASC JSB BNDEC DEF LWA LABEL WORD ADDRESS LDB DISP GET TO # SEC/TRACK ADB D6 LDA B,I GET # OF SECTORS/TRACK STA SCTRK SAVE AS # OF SECTORS/TRACK ADB D2 GET TO # OF DIRECTORY TRACKS LDA B,I ADA WTRCK GET ENDING DIRECTORY TRACK STA NTRKS LDA B,I GET # OF DIRECTORY TRACKS CMA,INA MAKE # POS. JSB BNDEC CONVERT TO ASC DEF DTRKA LDA DTRKA+2 MOVE UP THE LEAST SIGNIFICANT DIGITS STA DTRKA THEY ARE THE ONLY ONES TO BE PRINTED JSB WTLIN SEND LINE TO TERMINAL DEF HEAD1 FIRST HEADING LINE SPC 5 * * HERE AFTER FIRST HEADING LINE WRITTEN * SUB3 LDA SUB4A GET ADDRESS WHERE TO GO NEXT TIME STA BROUT LDB D13 LDA MCODF SZA SECURITY CODES BEING LISTED? LDB D16 YES, ADD "SCODE" TO HEADER STB HEAD2 JSB WTLIN SEND OUT SEND HEADING LINE DEF HEAD2 SPC 5 * * HERE AFTER HEADING LINE WRITTEN * JUST OUTPUT A BLANK LINE * SUB5 LDA SUB3A GET ADDRESS FOR NEXT TIME STA BROUT JS^B WTLIN SEND OUT BLANK LINE DEF BLNKL SPC 5 * * HERE TO START OUTPUTING DIRECTORY * SUB4 LDA DISP GET FILE ENTRY ADA D16 JSB SCFX SEE IF WE NEED NEW SECTOR JMP SUB2 DONE...NO MORE DIRECTORY LDA DISP,I IS THIS FILE PURGED SSA JMP SUB4 YES...GO TO NEXT ONE SZA,RSS DONE? JMP SUB6 YES...2 SPACES & GET NEXT LU JSB MDLIN MOVE THE LINE JMP SUB4 ERROR CONDITION JSB WTLIN GO WRITE THE LINE DEF DLINA ADDRESS OF DETAIL LINE SPC 5 * * HERE TO OUTPUT A BLANK LINE * SUB6 LDA SUB7A GET ADDRESS FOR NEXT TIME STA BROUT JSB WTLIN OUTPUT A BLANK LINE DEF BLNKL SPC 5 * * HERE TO OUTPUT A BLANK LINE * SUB7 LDA SUB2A GET ADDRESS FOR NEXT TIME STA BROUT JSB WTLIN OUTPUT A BLANK LINE DEF BLNKL HED DLIST: ROUTINES * (C) HEWLETT-PACKARD CO. 1977 * * SUBROUTINE TO MOVE DETAIL LINE TO PRINT LINE * CALLING SEQUENCE * JSB MDLIN * NO MATCH RETURN...IE..FILTER MIS-MATCH,TYPE NO MATCH * NORMAL RETURN * SPC 1 MDLIN NOP LDA FLTR IS FILTER SPECIFIED SZA NO CPA SPACA OR IS IT ALL SPACE? JMP NDLN2 NOT SUPPLIED OR SPACE LDA FLTRA GET ADDRESS WHERE FILTER LOCATED CLE,ELA CONVERT TO BYTE ADDRESS STA TEMP SAVE FILTER BYTE ADDRESS LDA DISP GET ADDRESS OF NAME CLE,ELA CONVERT TO BYTE ADDRESS STA TEMP1 SAVE IN BYTE ADD COUNTER LDA M6 # OF CHAR IN FILTER STA TEMP2 SAVE IN DOWN COUNTER MDN11 LDB TEMP GET BYTE ADD OF FILTER LBT GET BYTE SZA,RSS IF ZERO, CHANGE TO SPACE LDA C40 C40=SPACE CPA FLTRC IS IT A "-"? JMP MDN12 YES...DON'T CHECK STA TEMP3 SAVE IN TEMP LOCATION LDB TEMP1 GET BYɸTE ADDRESS OF NAME LBT GET BYTE CPA TEMP3 IS THERE A MATCH? RSS YES JMP MDLIN,I NO...IGNORE ENTRY MDN12 ISZ TEMP GET TO NEXT ENTRY ISZ TEMP1 ISZ TEMP2 DONE? JMP MDN11 NO SPC 2 * * AFTER CHECKING NAME, CHECK TYPE * NDLN2 LDB DISP GET TO FILE TYPE ADB D3 LDB B,I LDA FTYP CHECK WITH FILE TYPE PASSED RAL,CLE,ERA IS THERE A FILE TYPE? SEZ FILE TYPE SPECIFIED CPA B YES...DOES IT MATCH RSS MATCH...OR NO FILE TYPE SPECIFIED JMP MDLIN,I FILE TYPE NOT MATCHED STB FTYPT SAVE TYPE IN TEMP FOR LATER LDA B JSB BNDEC CONVERT FILE TYPE TO ASC DEF DTYPA LDA DISP MOVE NAME TO OUTPUT LINE LDB ADNAM GET DESTINATION ADDRESS MVW D3 MOVE NAME LDA DISP GET # OF SECTORS OR LU ADA D4 ASSUME LU LDB FTYPT SEE IF TYPE=0 SZB YES? ADA D2 NO...GET # OF SECTORS LDA A,I GET VALUE SZB IF LU...DON'T DIVIDE BY 2 CLE,ERA CONVERT TO # OF BLOCKS JSB BNDEC CONVERT TO ASC DEF DBSLU LDB DISP GET TO SECURITY CODE ADB D8 LDA B,I GET SECURITY CODE JSB BNDEC CONVERT TO ASC DEF DSECA LDB FTYPT CHECK IF THIS REC AN EXTENT LDA DISP ADA D5 LDA A,I IF EXTENT...CAN'T BE TYPE=0 AND UB377 NO EXTENT A=0 SZB IF TYPE 0...DON'T CHECK FOR EXTENT SZA,RSS NOT TYPE 0...EXTENT? ISZ MDLIN NOT EXTENT..OR TYPE 0 NORM RETURN LDA DLLWS LENGTH OF DETAIL LINE WITH S.C. LDB MCODF SUPPLY SECURITY CODE? SZB,RSS LDA DLLS NO...LENGTH WITHOUT SECURITY CODE STA DLINA SAVE FOR TRANSFER JMP MDLIN,I RETURN SPC 1 FTYPT NOP DLLWS DEC 16 DLLS 4DEC 12 D5 DEC 5 SPC 5 * * HERE WHEN WE ARE ALL DONE * DONE LDA BROUT SEE IF WE SENT THEM ANYTHING SZA JMP DONE1 YES...JUST TERMINATE LDA DON1A GET ADDRESS OF TERMINATION POINT STA BROUT JSB WTLIN SEND "DISK NOT MOUNTED" DEF NOCRM * DONE1 CLA STA LNGH SET FOR NO DATA LDA BIT14 TELL OTHER SIDE, ALL DONE JMP TERM SPC 5 * * SUBROUTINE TO SEND DATA TO REMOTE * CALLING SEQUENCE * JSB WTLIN * DEF BUFFER * BUFFER FORMAT * LENGTH WORD, DATA BUFFER * WTLIN NOP LDA WTLIN,I GET ADDRESS OF OUPUT LINE INA GET TO FIRST DATA WORD STA WTLNB LDB WTLIN,I GET LENGTH OF MESSAGE LDB B,I LDA LNGH GET AVAILABLE LENGTH CMA,INA ADA B SEE IF THERE WAS TO MUCH ROOM SSA CHANGE LENGTH? STB LNGH YES...SET IN CORRECT LENGTH * CLA SET FOR MORE TO COME TERM STA STAT SAVE STATUS LDA STYP GET STREAM TYPE IOR BIT14 SET FOR REPLY STA STYP LDA #NODE STA IRBUF+6 SET STATUS LOCATION * JSB D65SV SEND REPLY DEF *+5 DEF IRBUF DEF D23 REPLY LENGTH WTLNB NOP DATA ADDRESS DEF LNGH DATA LENGTH * NOP IGNORE ERROR RETURN JMP DLST0 GO DO A GET CALL * SPC 5 * * SUBROUTINE TO KEEP DISPLACEMENT ON DISK OK * CALLING SEQUENCE * JSB SCFX * NO MORE DIRECTORY TRACK RETURN * NORMAL RETURN * A REG=DISPLACEMENT * UPON RETURN * WILL UPDATE WTRCK,WSEC,AND DISP AS REQUIRED * ASSUMES DISP STARTS WITH ADDRESS OF BUFFER * SCTRK MUST BE SET TO # OF SECTORS/TRACK * IF TRACK CHANGES, NTRCK=LAST DIRECTORY TRACK-1 * ALL SECTORS ARE ASSUMED TO BE 128 WORDS LONG * SPC 1 SCFX NOP CMA,INA NEGATE ADDRESS ADA DBFA GET ,DISPLACEMENT CMA,INA MAKE IT POSITIVE CLB CHECK IF OVERFLOW DIV D128 CROSS A SECTOR BOUNDRY ADB DBFA GET DISPLACEMENT AS AN ADDRESS STB DISP SAVE DISPLACEMENT ADDRESS SZA,RSS SECTOR CHANGE JMP SCFXA NO LDA D14 YES...GET TO NEXT SECTOR ADA WSEC GET TO NEXT SECTOR ADDRESS CLB DIV SCTRK SEE IF WE HAVE A HAVE LOOPED AROUND STB WSEC SAVE NEW SECTOR ADDRESS SZA IF NO ROLLOVER OR SZB NO NEW TRACK NEEDED JMP SCFXA DON'T UPDATE TRACK ADDRESS CCB UPDATE TRACK ADDRESS ADB WTRCK GET TO NEXT TRACK CPB NTRKS DONE? JMP SCFX,I YES STB WTRCK NO...SET IN NEW TRACK ADDRESS SCFXA LDA D128 DO A 128 WORD READ JSB GETSC ISZ SCFX GET TO RETURN JMP SCFX,I RETURN SPC 5 * * SUBROUTINE TO READ A SECTOR * CALLING SEQUENCE * JSB GETSC * THE FOLLOWING MUST BE SET UP * WTRCK,WSEC,WCLU * GETSC NOP STA BUFL SAVE BUFFER READ LENGTH LDA WTRCK GET CURRENT TRACK ADDRESS CPA CTRCK SAME AS ONE WE GOT NOW? RSS YES JMP GTSC1 NO...GO READ IT LDA WSEC IS IT THE SAME SECTOR CPA CSEC ? RSS YES JMP GTSC1 NO...GO READ IT LDA WCLU SAME LU? CPA CCLU JMP GETSC,I YES...DON'T READ SECTOR GTSC1 LDA WCLU SET UP AS CURRENT STA CCLU LDA WTRCK STA CTRCK LDA WSEC STA CSEC JSB EXEC GO READ A SECTOR DEF *+7 DEF D1 DEF WCLU DEF DBUF DEF BUFL DEF WTRCK DEF WSEC JMP GETSC,I GOT SECTOR, RETURN SPC 2 CTRCK OCT -1 CSEC OCT -1 CCLU OCT -1 BUFL NOP SPC 5 * * SUBROUTINE CONVERT BINARY TO ASCII DECIMAL * CALLING SEQUENCE * JSB BNDEC * W DEF BUFFER WHERE TO ASC * A REG=BINARY # * BNDEC NOP STA DTEMP SAVE BINARY # LDB BNDEC,I GET ADDRESS WHERE TO ASC CLE,ELB CONVERT TO BYTE ADDRESS STB DTMP1 SAVE BYTE ADDRESS ISZ BNDEC GET TO RETURN ADDRESS LDA DNMA GET ADDRESS OF DIVISORS STA DTMP2 SAVE FOR DIVIDING LDA M5 GET LOOP COUNT STA DTMP3 SAVE IN DOWN COUNTER LDA C40 GET A SPACE CHARACTERR LDB DTEMP GET BINARY VALUE SSB,RSS IF NEGATIVE...CONVERT JMP BNDCB NOT NEGATIVE CMB,INB NEGATIVE, MAKE POSITIVE STB DTEMP LDA C55 SET IN NEG SIGN BNDCB LDB DTMP1 GET BYTE ADDRESS SBT SAVE SIGN ISZ DTMP1 GET NEXT BYTE ADDRESS BNDCA LDA DTEMP GET BINARY # CLB GET A ZERO DIV DTMP2,I STB DTEMP SAVE REMAINDER ADA C60 CONVERT TO ASC LDB DTMP1 GET CURRENT BYTE ADDRESS SBT SAVE ASC BYTE ISZ DTMP2 GET NEXT DIVISOR ISZ DTMP1 GET NEXT BYTE ADDRESS ISZ DTMP3 DONE? JMP BNDCA NO JMP BNDEC,I RETURN SPC 1 C55 OCT 55 DTEMP NOP DTMP1 NOP DTMP2 NOP DTMP3 NOP DNMA DEF DNM DNM DEC 10000,1000,100,10,1 SPC 5 * * PARMB LAYOUT * IRBUF BSS 23 STYP EQU IRBUF STREAM TYPE STAT EQU IRBUF+7 STATUS LNGH EQU IRBUF+8 LENGTH WORD FLTR EQU IRBUF+10 NAME FILTER...0..NO FILTER MCODF EQU IRBUF+13 MASTER SECURITY CODE CRLU EQU IRBUF+14 LU OF CART. TO DO FTYP EQU IRBUF+15 FILE TYPE FILTER BROUT EQU IRBUF+9 ADR OF NEXT PROCESS ROUTINE. 0=START WCLU EQU IRBUF+16 CURRENT LU FOR DISK READ WTRCK EQU IRBUF+17 CURRETN TRACK TO READ WSEC EQU IRBUF+18 CURRENT SECTOR TO READ DISP EQU IRBUF+19 DISPLACEMENT IN BUFFER SCTRK EQU IRBUF+20 # OF SECTORS/TRACK LUDSP EQU IRBUF+21 DISPLACEMENT IN DIRECTORY LU NTRKS EQU IRBUF+22 # OF DIRECTORY TRACKS C40 OC<:6T 40 C60 OCT 60 D3 DEC 3 D8 DEC 8 UB377 OCT 177400 D13 DEC 13 D14 DEC 14 D23 DEC 23 D16 DEC 16 D128 DEC 128 D4 DEC 4 D1 EQU DNM+4 DEC 1 D6 DEC 6 D0 DEC 0 D2 DEC 2 M1 DEC -1 M2 DEC -2 M5 DEC -5 M6 DEC -6 B7777 OCT 77777 BIT14 OCT 40000 FLTRA DEF FLTR FLTRC EQU C55 "DON'T-CARE" FILTER CHAR (MINUS SIGN) TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP * TATSD EQU 1756B SECT2 EQU 1757B DBFA DEF DBUF MSCA DEF DBUF+126 CLSSN NOP CRNAA DEF CRNA ADNAM DEF DNAMA SPC 1 * * DEFINE OUTPUT LINE INFO * HEAD1 DEC 27 SPACA ASC 1, ASC 3,ILAB= CRNA ASC 3, ASC 1, ASC 7,REMOTE DLIST ASC 2,CR#= LWA ASC 3, ASC 1, ASC 5,DIR TRKS= DTRKA ASC 3, SPC 1 HEAD2 NOP ASC 16, NAME TYPE #BLKS/LU SCODE SPC 1 NOCRM DEC 9 ASC 9, DISK NOT MOUNTED DLINA DEC 16 ASC 1, DNAMA ASC 3, ASC 1, DTYPA ASC 3, ASC 1 DBSLU ASC 3, ASC 1, DSECA ASC 3, SPC 2 BLNKL DEC 1 OCT 20040 DBUF BSS 128 SPC 3 END EQU * END DLIST &[< GV 91740-18011 1740 S C0122 DS/1000 MODULE: DLIST              H0101 @ASMB,R,L,C HED DLIST 91740-16011 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM DLIST,19,30 91740-16011 REV 1740 770404 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ******************************************************* * *DLIST DIRECTORY LIST MONITOR FOR DS-1000 * CTU-BASED SYSTEMS. * *SOURCE PART # 91740-16011 REV 1740 * *REL PART # 91740-16011 REV 1740 * *WRITTEN BY: DAN GIBBONS * *DATE WRITTEN: JANUARY 1977 * *MODIFIED BY: * ******************************************************** SPC 2 * * PROGRAM TO DO DIRECTORY LISTING ON AS * MANY REMOTE TERMINALS AS REQUIRED * * ENT DLIST * EXT EXEC,D65SV,D65GT,#NODE EXT .DRCT,$CDIR IFZ EXT DBUG XIF * * A EQU 0 B EQU 1 HED DLIST: MAIN * (C) HEWLETT-PACKARD CO. 1977 * * MAIN ROUTINE STARTS HERE * DLIST NOP LDA B,I SEE IF THEY WANT DEBUG STA CLSSN SAVE CLASS NUMBER IFZ SZA DO THEY WANT DEBUG JMP DLST0 NO JSB DBUG DEF *+1 JSB EXEC DEF *+4 DEF D6 DEF D0 DEF D1 JMP DLIST XIF SPC 1 DLST0 JSB D65GT DO A GET CALL DEF *+6 DEF CLSSN DEF IRBUF DEF D23 DEF D0 NO DATA DEF D0 JMP DLST0 IGNORE ERROR CALL * LDA BROUT GET ADDRESS OF CURRENT COROUTINE SZA,RSS JMP SUB1 JMP A,I GO TO SPECIFIED SUBROUTINE SPC 2 SUB2A DEF SUB2 SUB4A DEF SUB4 SUB5A DEF SUB5 SUB7A DEF SUB7 DON1A DEF DONE1 SPC 5 * * HERE ON NEW REQUEST * SUB1 JSB .DRCT GET ADR OF CTU DIRECTORY DEF $CDIR STA LUDSP SAVE FOR LU LOOPING ADA M1 GET TO LAST TRACK LDA A,I GET LAST-ENTRY ADR STA ENDCD SAVE IT SUB2 LDA LUDSP GET DIRECTORY POINTER CPA ENDCD DONE? JMP DONE YES LDA A,I GET CARTRIDGE LU SZA,RSS DONE? JMP DONE YES SUB22 LDA CTULU DO THEY WANT A SPECIFIED LU? CPA DBLNK LU SUPPLIED? JMP MCR NO, DO ALL LU'S LDB LUDSP GET DISPLACEMENT SSA IF NEG, MAKE POS CMA,INA CPA B,I DOES LU MATCH? JMP MCR MATCH...PROCESS LU ADB D4 NO MATCH. GO TO NEXT ENTRY STB LUDSP JMP SUB2 SPC 5 * * ROUTINE TO PROCESS A MOUNTED CARTRIDGE * SPC 1 MCR LDA SUB5A SET UP FOR RETURN AFTER SENDING THE LINE STA BROUT * LDA LUDSP,I CONVERT LU TO TWO JSB BNDEC ASCII DIGITS & SET DEF LUXX INTO HEAD1 MSG. * ISZ LUDSP GET TO VALIDITY WORD ADR LDA LUDSP,I GET THE ADR LDA A,I GET THE VALIDITY WORD STA VAL SAVE IT LDB LHED1 GET HEAD1 MESSAGE LENGTH SZA IS DIRECTORY VALID? LDB LHED2 NO, ADJUST LENGTH OF MESSAGE STB HEAD1 SET MESSAGE LENGTH ISZ LUDSP GET TO FILE DIRECTORY ADR LDA LUDSP,I GET THE ADR STA DISP SAVE THE ADR ADA M1 GET TO LAST-ENTRY ADR LDA A,I GET THE ADR STA ENDFD SAVE IT ISZ LUDSP GET TO NEXT CTU ISZ LUDSP DIRECTORY ENTRY. JSB WTLIN SEND LINE BACK TO REMOTE DEF HEAD1 HEADING LINE ADR SPC 5 * * HERE AFTER HEADING LINE WRITTEN * JUST OUTPUT A BLANK LINE IF DIRECTORY VALID. * SUB5 LDA VAL SZA DIRECTORY VALID? JMP SUB6 NO, GET NEXT ONE LDA SUB4A SET ADDRESS FOR NEXT TIME STA BROUT JSB WTLIN SEND OUT BLANK LINE DEF BLNKL SPC 5 * * HERE TO START OUTPUTTING DIRECTORY * SUB4 LDA DISP GET FILE ENTRY ADR CPA ENDFD END OF DIRECTORY? JMP SUB6 YES LDA A,I GET ENTRY SSA IS THE FILE PURGED? JMP NXT YES...GO TO NEXT ONE SZA,RSS DONE? JMP SUB6 YES...2 SPACES & GET NEXT LU LDA DISP MOVE THE LDB ADNAM DETAIL LINE MVW D4 TO PRINT LINE. LDA DISP GET TO NEXT ENTRY ADA D4 STA DISP JSB WTLIN GO WRITE THE LINE DEF DLINA ADDRESS OF DETAIL LINE NXT LDA DISP GET TO NEXT ENTRY ADA D4 STA DISP JMP SUB4+1 SPC 5 * * HERE TO OUTPUT A BLANK LINE * SUB6 LDA SUB7A GET ADDRESS FOR NEXT TIME STA BROUT JSB WTLIN OUTPUT A BLANK LINE DEF BLNKL SPC 5 * * HERE TO OUTPUT A BLANK LINE * SUB7 LDA SUB2A GET ADDRESS FOR NEXT TIME STA BROUT JSB WTLIN OUTPUT A BLANK LINE DEF BLNKL HED DLIST: ROUTINES * (C) HEWLETT-PACKARD CO. 1977 * * HERE WHEN WE ARE ALL DONE * DONE LDA BROUT SEE IF WE SENT THEM ANYTHING SZA JMP DONE1 YES...JUST TERMINATE LDA DON1A GET ADDRESS OF TERMINATION POINT STA BROUT JSB WTLIN SEND "CTU NOT MOUNTED" DEF NOCRM * DONE1 CLA STA LNGH SET FOR NO DATA LDA BIT14 TELL OTHER SIDE, ALL DONE JMP TERM SPC 5 * * SUBROUTINE TO SEND DATA TO REMOTE * CALLING SEQUENCE * JSB WTLIN * DEF BUFFER * BUFFER FORMAT * LENGTH WORD, DATA BUFFER * WTLIN NOP LDA WTLIN,I GET ADDRESS OF OUPUT LINE INA GET TO FIRST DATA WORD STA WTLNB LDB WTLIN,I GET LENGTH OF MEeSSAGE LDB B,I LDA LNGH GET AVAILABLE LENGTH CMA,INA ADA B SEE IF THERE WAS TO MUCH ROOM SSA CHANGE LENGTH? STB LNGH YES...SET IN CORRECT LENGTH * CLA SET FOR MORE TO COME TERM STA STAT SAVE STATUS LDA STYP GET STREAM TYPE IOR BIT14 SET FOR REPLY STA STYP LDA #NODE STA IRBUF+6 SET STATUS LOCATION * JSB D65SV SEND REPLY DEF *+5 DEF IRBUF DEF D23 REPLY LENGTH WTLNB NOP DATA ADDRESS DEF LNGH DATA LENGTH * NOP IGNORE ERROR RETURN JMP DLST0 GO DO A GET CALL * SPC 5 * * SUBROUTINE TO CONVERT BINARY # TO 2 ASCII DECIMAL DIGITS * * CALLING SEQUENCE: * * JSB BNDEC * DEF BUFFER WHERE TO STORE ASCII DIGITS * A REG=BINARY # * BNDEC NOP STA DTEMP SAVE BINARY # LDB BNDEC,I GET ADDRESS WHERE TO ASC CLE,ELB CONVERT TO BYTE ADDRESS STB DTMP1 SAVE BYTE ADDRESS ISZ BNDEC GET TO RETURN ADDRESS LDA DNMA GET ADDRESS OF DIVISORS STA DTMP2 SAVE FOR DIVIDING LDA M2 GET LOOP COUNT STA DTMP3 SAVE IN DOWN COUNTER BNDCA LDA DTEMP GET BINARY # CLB GET A ZERO DIV DTMP2,I STB DTEMP SAVE REMAINDER ADA C60 CONVERT TO ASC LDB DTMP1 GET CURRENT BYTE ADDRESS JSB SBYTE SAVE ASC BYTE ISZ DTMP2 GET NEXT DIVISOR ISZ DTMP1 GET NEXT BYTE ADDRESS ISZ DTMP3 DONE? JMP BNDCA NO JMP BNDEC,I RETURN SPC 1 DTEMP NOP DTMP1 NOP DTMP2 NOP DTMP3 NOP DNMA DEF DNM M2 DEC -2 C60 OCT 60 DNM DEC 10,1 SPC 3 * * SUBROUTINE TO STORE A BYTE * CALLING SEQUENCE * JSB SYBTE * A REG CONTAINS THE BYTE * B REG CONTAINS THE BYTE ADDRESS * SBYTE NOP AND B377 MASK ALL BUT/ LOWER 8 BITS STA STEMP SAVE IN TEMP LOCATION CLE,ERB CONVERT TO WORD ADDRESS LDA B,I GET WORD SEZ,RSS RIGHT OR LEFT HALF? ALF,ALF LEFT AND UB377 ISOLATE UPPER 8 BITS IOR STEMP OR IN NEW HALF SEZ,RSS LEFT OR RIGHT? ALF,ALF LEFT STA B,I SAVE WORD ELB,CLE GET BYTE ADDRESS AGAIN JMP SBYTE,I RETURN SPC 1 STEMP NOP B377 OCT 377 UB377 OCT 177400 SPC 5 * * REQST/REPLY BUFR LAYOUT * IRBUF BSS 23 STYP EQU IRBUF STREAM TYPE STAT EQU IRBUF+7 STATUS LNGH EQU IRBUF+8 LENGTH WORD BROUT EQU IRBUF+9 ADR OF NEXT PROCESS ROUTINE. 0=START CTULU EQU IRBUF+10 CARTRIDGE TAPE UNIT LU # ENDCD EQU IRBUF+16 END-OF-CARTRIDGE-DIRECTORY ADR ENDFD EQU IRBUF+17 END-OF-FILE-DIRECTORY ADR VAL EQU IRBUF+18 DIRECTORY-VALID FLAG. 0=VALID DISP EQU IRBUF+19 DISPLACEMENT IN BUFFER LUDSP EQU IRBUF+21 DISPLACEMENT IN DIRECTORY LU D23 DEC 23 D4 DEC 4 D1 DEC 1 D6 DEC 6 D0 DEC 0 D2 DEC 2 M1 DEC -1 BIT14 OCT 40000 * CLSSN NOP ADNAM DEF DNAMA LHED1 ABS ENDM1-SPACA LHED2 ABS ENDM2-SPACA SPC 1 * * DEFINE OUTPUT LINE INFO * HEAD1 BSS 1 HOLDS MESSAGE LENGTH SPACA ASC 2, ASC 9,REMOTE DLIST LU LUXX BSS 1 ASC 5, DIRECTORY ENDM1 EQU * ASC 4, INVALID ENDM2 EQU * NOCRM DEC 8 ASC 8, CTU NOT MOUNTED DLINA DEC 7 ASC 3, DNAMA ASC 4, SPC 2 BLNKL DEC 1 DBLNK OCT 20040 SPC 3 END EQU * END DLIST  H R 91740-18012 1805 S C0122 DS/1000 MODULE: PROGL              H0101 @ASMB,R,L,C HED PROGL 91740-16012 REV 1805 * (C) HEWLETT-PACKARD CO 1978 NAM PROGL,19,30 91740-16012 REV 1805 780117 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 4 **************************************************************** * * PROGL * * SOURCE PART # 91740-18012 * * REL PART # 91740-16012 * * WRITTEN BY CHUCK WHELAN * * DATE WRITTEN MAY 1976 * * MODIFIED BY DMT * * DATE MODIFIED 780117 * *************************************************************** SPC 3 * * * DS/1000 PROGL MODULE FOR CONCURRENT MULTI-TERMINAL DOWNLOADS * ENT PROGL * EXT EXEC,OPEN,READF,CLOSE,#REQU,$OPSY * * * #ACTV EQU 4 NUMBER OF ACTIVE DOWNLOADS AT ONE TIME * #TERM EQU 32 NUMBER OF POSSIBLE COMM. LINES * SKP * * * "PROGL" IS A DISTRIBUTED SYSTEM COMMUNICATIONS MONITOR. IT * SERVICES ALL SYSTEM DOWNLOAD REQUESTS FROM "CBL" SOFTWARE AT * REMOTE SATELLITES. WHEN A NEW REQUEST IS RECEIVED, THE REQUESTED * ABSOLUTE FILE CONTAINING THE CORELOAD IS TRANSMITTED RECORD-BY- * RECORD USING CLASS I/O WRITE/READ OPERATIONS TO THE COMMUNICATIONS * DRIVER ("DVA65"). * * WHEN "PROGL" IS NOT EXECUTING IT IS IN A CLASS I/O GET * SUSPENSION WAITING FOR AN ENTRY TO BE PLACED ON THE CLASS QUEUE * FOR ITS CLASS NUMBER. ENTRIES ARE PLACED ON THIS QUEUE WHEN A * NEW DOWNLOAD REQUEST IS RECEIVED OR A PREVIOUS CLASS I/O WRITE * COMPLETES. * * THE REQUEST PASSED TO "PROGL" BY "QUEUE" HAS THE EQT ADDR IN THE * 1ST WORD, AND THE DOWNLOAD FILE NUMBER (BINARY) IN THE 2ND WO~RD. * THE DOWNLOAD FILE NUMBER IS CONVERTED TO AN ASCII FILE NAME CONSISTING * OF "P" FOLLOWED BY THE FIVE ASCII DIGIT OCTAL EQUIVALENT OF THE * NUMBER. * * THE NUMBER OF DOWNLOADS THAT CAN BE ACTIVE AT ANY ONE TIME * IS LIMITED ONLY BY SYSTEM AVAILABLE MEMORY AND THE SIZE OF THE * ACTIVE DOWNLOAD TABLE. IN-PROCESS DOWNLOADS HAVE AN ENTRY IN * THIS TABLE CONSISTING OF LU, SEQ #, THE 144 WORD DCB FOR THE DOWNLOAD * FILE, AND THE FILE NUMBER. IF A NEW REQUEST IS RECEIVED WHILE * THIS TABLE IS FULL, IT IS PLACED IN A TWO WORD (LU, & FILE #) * ENTRY IN A WAIT QUEUE. WHEN AN ENTRY BECOMES AVAILABLE * IN THE ACTIVE TABLE, AN ENTRY IN THE WAIT QUEUE CAN BE ACTIVATED. * THE NUMBER OF ENTRIES IN THE ACTIVE TABLE IS SET AT ASSEMBLY TIME * BY THE ITEM "#ACTV". * * THE LU AND SEQ # OF A DOWNLOAD REQUEST ARE PASSED IN THE * REQUEST BUFFER OF EACH CLASS I/O WRITE/READ. THE PROGRAM ENSURES * THAT ONLY ONE DOWNLOAD TO A LU IS IN PROCESS BY RE-USING THE SAME * TABLE ENTRY WITH A NEW SEQ # IF A DOWNLOAD IS RESTARTED, AND * IGNORING I/O COMPLETIONS (ERRORS OR NOT) WITH WRONG SEQ. NUMBERS. * * EACH TIME THAT "PROGL" IS ENTERED ON A CLASS WRITE * COMPLETION, IT CHECKS THE RETURNED ERROR STATUS FOR DRIVER * ERRORS AND IF NONE, READS THE NEXT RECORD FROM THE DOWNLOAD * FILE, WRITES IT TO THE DRIVER AND AGAIN SUSPENDS ON ITS CLASS. * * WHEN ALL RECORDS IN THE DOWNLOAD FILE HAVE BEEN SUCCESSFULLY * TRANSMITTED, "PROGL" SENDS A ONE-WORD REQUEST TO THE SATELLITE * TO INDICATE THE DOWNLOAD IS COMPLETE. AT THIS TIME, THE FILE IS * CLOSED (UNLESS IT IS OPEN MORE THAN ONCE), THE TABLE ENTRY IS CLEARED, * AND UNLESS A WAIT QUEUE ENTRY CAN BE ACTIVATED, "PROGL" AGAIN SUSPENDS * ON ITS CLASS. * * SKP * * PROGL IS ENTERED HERE INITIALLY PROGL BSS 0 ENTRY. LDA 1,I SZA,RSS JMP PGET NOT FIRST TIME STA ICLAS SAVE PROGL'S CLASS AND MSK14 RELEASE CLASS BUFFER STA CLAS2 SAVE CLASS # FOR PROGL CLA LDB $OPSY SYSTEM TYPE FLAG RBR,SLB SKIP IF NON-DMS SYSTEM STA MOD1 SET TO DO "XLA" * INITIALIZE FILE NUMBERS LDB NACTV SET UP LOOP STB CNTR COUNTER = - # ENTRIES LDB D12N LOAD CLOSED MARKER CCA POINT TO FIRST ADA TABAD FILE NUMBER ENTRY BUMP ADA TLENT STB 0,I STORE MARKER ISZ CNTR DONE? JMP BUMP NO. MARK NEXT ONE * * * SUSPEND UNTIL A NEW REQUEST IS WRITTEN TO MONITOR OR COMPLETION * ON A PREVIOUS DRIVER WRITE OCCURS * PGET JSB EXEC WAIT FOR NEXT REQST OR I/O COMPLETION DEF *+7 DEF D21 DEF ICLAS DEF BUFR DEF D2 DEF BFADR ADDRESS OF REQ.BUFR IN SAM DEF RQLEN LENGTH OF REQUEST * STA IERR SAVE STATUS LDA RQLEN CPA D3 IF REQ LEN IS 3, THIS IS I/O COMPLETION JMP IOCOM PROCESS I/O COMPLETION JSB RLEAS RELEASE CLASS BUFFER * * PROCESS NEW DOWNLOAD REQUEST * CLB LDA EQTA FWA OF EQT AREA CMA,INA ADA BUFR ADD THE EQT ADDR PASSED IN BUFFER DIV D15 COMPUTE EQT # INA STA EQT# SAVE EQT # LDB LUMAX CBX X HAS NO OF LU'S ADB DRT POINT TO END OF DRT TABLE * NXTLU ADB M1 DECREMENT DRT POINTER LDA 1,I GET DRT ENTRY AND B77 ISOLATE EQT # CPA EQT# MATCH? JMP FOUND YES DSX COUNT JMP NXTLU DO NEXT JMP PGET LU NOT FOUND! IGNORE REQUEST * FOUND CXA IOR ZBIT SET Z BIT FOR CONTROL WORD STA LU SET LU OF NEW REQUEST JSB SRCH SEARCH FOR ENTRY IN DOWNLOAD TABLE CLB,RSS THIS LU WASN'T IN TABLE JMP RSTRT FOUND, CLEAR & RESTART * * NO PREVIOUS ACTIVE ENTRY FOR LU CPB CURAD WAS DOWNLOAD TABLE FULL? JMP FULL 3 YES, QUEUE THIS ENTRY LDA LU LU STA CURAD,I STORE IN 1ST WORD OF DOWNLOAD ENTRY RSS * * SAME LU, USE SAME TABLE ENTRY WITH NEW SEQ # & TIME-TAGS RSTRT JSB CLSE CLOSE PREVIOUS DOWNLOAD FILE LDB BUFR+1 FILE # FROM PARMB * * CONVERT FILE # TO BE DOWNLOADED NEWLD LDA DCBAD GET ADDRESS OF ADA D144 FILE # ENTRY STB 0,I STORE FILE # RRL 4 DUAL ROTATE LEFT 4 AND D7 IOR ASCP0 FORM ASCII OF 1ST 2 CHARS STA NAME CLA RRL 3 POSITION 3RD OCTAL DIGIT ALF,RAL MOVE TO LHW RRL 3 GET 4TH DIGIT IOR ASC00 ASCII FOR 3RD & 4TH DIGITS STA NAME+1 CLA RRL 3 5TH DIGIT ALF,RAL TO LHW RRL 3 GET 6TH & FINAL DIGIT IOR ASC00 CONVERT TO ASCII STA NAME+2 * ISZ POOLS UPDATE POOL SEQUENCE NUMBER ZERO NOP LDA POOLS GET SEQ # OF THIS DOWNLOAD FROM POOL STA SEQAD,I 2ND WORD OF DOWNLOAD ENTRY STA SEQ# PASS IN REQUEST * * OPEN FILE TO BE DOWNLOADED JSB OPEN DO FMGR OPEN DEF *+5 DEF DCBAD,I DCB ADDRESS DEF IERR DEF NAME DEF ZERO * LDA IERR SSA SKIP IF NO ERROR FROM FMP JMP ERR1 SEND REJECT IF ERROR JMP NEXT NOW XFER NEXT RECORD HED SEND NEXT DOWNLOAD RECORD * (C) HEWLETT-PACKARD CO 1978 * * * ENTER HERE WHEN COMPLETION OF PREVIOUS WRITE HAS OCCURRED * IOCOM LDB BFADR POINT TO REQUEST BUFFER INB POINT TO 2ND WORD (IN S.A.M.) JSB LODWD GET THE ASSOCIATED LU STA LU INB POINT TO 3RD WORD JSB LODWD GET THE ASSOCIATED PROGL SEQ # STA SEQ# JSB SRCH FIND DOWNLOAD TABLE ENTRY FOR LU JMP IGNOR LU NOT IN TABLE, IGNORE LDA SEQAD,I GET SEQ # OF TABLE ENTRY CPA SEQ# DOES IT MATCH? RSS  YES JMP IGNOR NO, IGNORE THIS COMPLETION * CHECK DRIVER ERROR STATUS LDA IERR GET ERROR STATUS FROM DRIVER SLA LSB OF EQT5 JMP ACCPT NO ERRORS, DO NEXT * * DRIVER ERROR OCCURRED * AND B170 TEST FOR PRTY, T.O., REMOTE BUSY, STOP CLE,SZA,RSS ANY OF THESE? JMP FAIL NO, TREAT AS HARD FAILURE * LDA CURAD,I GET RETRY COUNT (BITS 15-13) ADA .200 BUMP RETRY COUNT STA CURAD,I SEZ RETRIES EXHAUSTED? JMP FAIL YES * ISZ ERCNT KEEP RETRY COUNT NOP FOR THOSE INTERESTED JSB EXEC SUSPEND FOR 200 MILLISECS DEF *+6 DEF D12N DEF D0 DEF D1 DEF D0 DEF M20 D0 NOP LDA LU AND B77 STA LU JSB #REQU RETHREAD FOR ANOTHER OUTPUT DEF *+5 DEF ICLAS DEF ICLAS DEF LU DEF ICNWD SZA,RSS OK? JMP PGET YES * FAIL JSB RLEAS RELEASE CLASS BUFFER JMP ERR3 * IGNOR JSB RLEAS RELEASE CLASS BUFFER JMP PGET BACK TO GET * ACCPT JSB RLEAS RELEASE CLASS BUFFER SKP * * THIS SECTION IS ENTERED TO GET NEXT RECORD FROM DOWNLOAD FILE. * NEXT JSB READF READ NEXT RECORD DEF *+6 DCBAD NOP DEF IERR DEF DBUF DEF MAXL MAX ALLOWED LENGTH DEF LENX ACTUAL LENGTH * LDA IERR CHECK FOR ERRORS SSA JMP ERR2 ERROR IN FILE READ * LDA LENX SSA CHECK FOR END-OF-FILE JMP EOFND FOUND, WRAP IT UP * * VERIFY CHECKSUM OF NEXT RECORD TO BE DOWNLOADED * LDA DBUF ALF,ALF AND B377 STA 1 SAVE BUFFER LENGTH IN B SZA,RSS IS THIS A ZERO LENGTH RECORD? JMP NEXT YES, IGNORE IT STA LENX SET DATA LENGTH FOR DVR CALL LDB DBUF+1 GET DATA ADDRESS STB ISTAT CBL GETS IT AS 1 WORD REQUEST INA CMA,INA STA CNTR WORD COUNTER. LDB DBFAD BUFFER ADDRESS. CLA CKSML ADA 1,I ADD UP THE WORDS. INB ISZ CNTR JMP CKSML CPA 1,I COMPARE CHECKSUMS. RSS JMP ERR2 NOT EQUAL. * * CHECKSUM OK, SETUP TO WRITE THIS RECORD LDA LU GET LU IOR B300 SET PROGL FLAG SO DVR SENDS 1 WRD STA CONWD LDA CURAD,I AND B.177 INITIALIZE RETRY COUNT STA CURAD,I * * NOW DO CLASS I/O WRITE/READ TO DRIVER * JSB EXEC DEF *+8 DEF D20N NO ABORT BIT IS SET DEF CONWD WRITE DATA DEF DBUF+2 DATA BUFFER ADDR DEF LENX BUFFER LENGTH DEF RQBUF PROGL REQUEST BUFFER: ADDR/LU/SEQ# DEF D3 DEF ICLAS WRITE IT ON PROGL'S CLASS * JMP ERR3 ERROR * NOW GO INTO SUSPEND ON PROGL'S CLASS UNTIL A DRIVER WRITE COMPLETES * OR A NEW REQUEST IS RECEIVED. JMP PGET * * * ENTER HERE WHEN END OF DOWNLOAD FILE IS DETECTED * RETURN GOOD STATUS FOR A SUCCESSFUL DOWNLOAD * EOFND JSB CLSE CLOSE DOWNLOAD FILE CLA 0= GOOD DOWNLOAD * TERM STA ISTAT SET STATUS FOR TRANSMISSION LDA LU IOR B300 STA CONWD SET DVA65 CONTROL WORD * JSB EXEC WRITE FINAL REQUEST DEF *+8 DEF D20N CLASS WRITE/READ TO COMM DRIVER DEF CONWD DEF DBUF DEF ZERO NO DATA DEF RQBUF DEF D3 DEF ICLAS PROGL CLASS NUMBER NOP * * THIS DOWNLOAD IS OVER * CLEAN OUT DOWNLOAD TABLE ENTRY AND GIVE SPACE TO * ANY ENTRY FOUND IN WAITING QUEUE * CLA STA CURAD,I SET DOWNLOAD ENTRY AS AVAILABLE LDB WAITA LDA NQUE STA CNTR COUNTER= -# OF WAITQ ENTRIES CKQUE LDA 1,I SZA SKIP IF SLOT EMPTY JMP ACTIV OTHERWISE, ACTIVATE IT ADB D2 ISZ CNTR  JMP CKQUE JMP PGET NOTHING QUEUED, GO TO GET SUSPEND * * NOW ACTIVATE A WAITING DOWNLOAD REQUEST FROM THE WAIT QUEUE USING * THE ACTIVE DOWNLOAD TABLE SPACE WHICH WAS JUST MADE AVAILABLE * ACTIV STA CURAD,I MOVE LU TO TABLE ENTRY JUST CLEARED STA LU AND PUT IT IN "LU" TOO !!! CLA STA 1,I CLEAR WAIT QUEUE ENTRY INB LDB 1,I PICKUP FILE # AND START DOWNLOADING IT JMP NEWLD HED PROGL SUBROUTINES & DATA AREA * (C) HEWLETT-PACKARD CO 1978 * * THIS SUBROUTINE SEARCHES FOR A DOWNLOAD TABLE ENTRY FOR * THE PASSED LU. RETURNS TO P+1 IF NOT FOUND, OTHERWISE P+2 * SRCH NOP LDA NACTV STA CNTR - # OF ACTIVE ENTRIES ALLOWED CLA INITIALIZE ADDR OF EMPTY SLOT STA TPNT LDB TABAD ADDR OF DOWNLOAD TABLE SNXT LDA 1,I PICKUP LU OF THIS ENTRY AND B.177 MASK POSSIBLE RETRY COUNT CPA LU DOES THIS ONE MATCH LU? JMP SRCHX YES, FOUND DOWNLOAD ENTRY IOR TPNT NO, IS THIS THE 1ST EMPTY SLOT? SZA,RSS SKIP IF EMPTY SLOT ALREADY FOUND STB TPNT STORE ADDR OF 1ST EMPTY SLOT ADB TLENT BUMP TABLE POINTER ISZ CNTR JMP SNXT TRY NEXT * LU NOT IN ACTIVE TABLE LDB TPNT RETURN 1ST EMPTY SLOT INSTEAD RSS RETURN +1 * * FOUND AN ENTRY IN THE ACTIVE DOWNLOAD TABLE FOR THIS LU SRCHX ISZ SRCH RETURN+2 STB CURAD SET ADDRESS OF ENTRY INB STB SEQAD & ADDRESS FOR SEQ # INB STB DCBAD & ADDRESS FOR DCB JMP SRCH,I RETURN * * SUBROUTINE TO GET A WORD FROM SYSTEM AVAILABLE MEMORY LODWD NOP MOD1 JMP LDA NOP HERE IF DMS XLA 1,I JMP LODWD,I LDA LDA 1,I JMP LODWD,I * * RELEASE CLASS BUFFER * RLEAS NOP JSB EXEC DO DUMMY CLASS GET DEF *+5 DEF D21 DEF CLAS2 DEF BUFR DEF ZERO JMP RLEAS,I * * CLOSE DOWNLOAD FILE, UNLESS IT IS OPEN FOR ANOTHER DOWNLOAD * CLSE NOP * SET FILE # ENTRY TO INDICATE CLOSED FILE CCA ADA CURAD ADA TLENT LDB 0,I SAVE FILE STB FLNUM NUMBER LDB D12N CLEAR STB 0,I ENTRY * CHECK TO SEE IF THE FILE IS STILL OPEN LDA NACTV SET UP LOOP STA CNTR COUNTER = - # ENTRIES CCA POINT TO FIRST ADA TABAD FILE NUMBER ENTRY BUMP2 ADA TLENT LDB 0,I GET FILE NUMBER CPB FLNUM IF = CURRENT ONE, JMP CLR9 GO DUMMY UP DCB ISZ CNTR MORE TO SEARCH? JMP BUMP2 YES--STAY IN LOOP * CURRENT NUMBER NOT FOUND. CLOSE FILE FOR REAL JSB CLOSE DEF *+3 DEF DCBAD,I DEF IERR JMP CLSE,I * CLEAR WORD 9 OF DCB SO FMP THINKS IT'S CLOSED CLR9 CLA LDB DCBAD ADB D9 STA 1,I JMP CLSE,I * * DOWNLOAD TABLE IS FULL, PUT THIS REQUEST IN WAITING QUEUE * FULL LDA NQUE STA CNTR -QUEUE TABLE SIZE CLA STA TPNT LDB WAITA ADDR OF WAIT QUEUE CKQ LDA 1,I GET LU OF THIS ENTRY CPA LU DOES IT MATCH THIS REQUEST JMP BLDQ YES, THEN SET NEW FILE # IOR TPNT CHECK IF THIS IS 1ST EMPTY SLOT IN QUEUE SZA,RSS SKIP IF NOT STB TPNT SAVE ITS ADDRESS ADB D2 BUMP QUEUE POINTER ISZ CNTR JMP CKQ EXAMINE NEXT ENTRY * * WE NOW KNOW THAT THIS LU WASN'T ALREADY IN WAIT QUEUE LDB TPNT GET ADDRESS OF 1ST EMPTY SLOT SZB,RSS WERE THERE ANY EMPTIES? JMP PGET NO, WE'RE IN TROUBLE LDA LU LU STA 1,I INTO 1ST WORD OF WAIT QUEUE ENTRY * BLDQ INB LDA BUFR+1 FILE # STA 1,I GOES INTO 2ND WORD JMP PGET GO BACK TO SUSPEND ON GET * ERR1 CCA ERROR IN FILE OPEN JMP TERM ERR2 JSB CLSE ERROU640R IN FILE READ, DO CLOSE LDA M2 JMP TERM ERR3 JSB CLSE DRIVER ERROR, DO CLOSE LDA M3 JMP TERM * * DATA AREA * NAME BSS 3 BFADR NOP FLNUM NOP RQLEN NOP IERR NOP ICLAS NOP CLAS2 NOP EQT# NOP ERCNT NOP TPNT NOP CNTR NOP LENX NOP CONWD NOP POOLS NOP CURAD NOP SEQAD NOP * 3 WORD REQUEST AREA RQBUF EQU * ISTAT NOP LU NOP SEQ# NOP * D1 DEC 1 D2 DEC 2 D3 DEC 3 D7 DEC 7 D9 DEC 9 D15 DEC 15 D21 DEC 21 D144 DEC 144 M1 DEC -1 M2 DEC -2 M3 DEC -3 M20 DEC -20 B77 OCT 77 B170 OCT 170 B300 OCT 300 B377 OCT 377 D12N OCT 100014 D20N OCT 100024 ZBIT OCT 10000 .200 OCT 20000 B.177 OCT 17777 MSK14 OCT 137777 ICNWD OCT 150301 * TLENT DEC 147 SIZE OF DOWNLOAD TABLE ENTRY NACTV ABS -#ACTV NQUE ABS #ACTV-#TERM MAXL DEC 255 ASC00 ASC 1,00 ASCP0 ASC 1,P0 * DBFAD DEF DBUF+1 TABAD DEF DT ADDR OF DOWNLOAD TABLE WAITA DEF WAITQ ADDR OF WAITING QUEUE * BUFR BSS 3 DBUF BSS 255 FILE INPUT BUFFER * * THE FOLLOWING RESERVES SPACE FOR THE ACTIVE DOWNLOAD TABLE DT REP #ACTV DOWNLOAD TABLE: LU+RTRY CNT,SEQ#,& DCB BSS 147 * * THE FOLLOWING RESERVES SPACE FOR THE WAIT QUEUE WAITQ REP #TERM-#ACTV WAITING QUEUE: LU & FILE # BSS 2 * EQTA EQU 1650B DRT EQU 1652B LUMAX EQU 1653B END PROGL g6 I W 91740-18013 1813 S C0122 DS/1000 MODULE: QUEUE              H0101 s`ASMB,R,L,C HED QUEUE 91740-16013 REV 1813 * (C) HEWLETT-PACKARD CO. 1977 NAM QUEUE,17,2 91740-16013 REV 1813 780217 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT QUEUE EXT EXEC,RNRQ,#QRN,#BUSY EXT #GRPM,#QCLM,#ST09 * * * QUEUE * SOURCE: 91740-18013 * BINARY: 91740-16013 * PRGMR: CHUCK WHELAN * DATE: DEC 1976 * * * * QUEUE IS THE DS/1000 PROGRAM SCHEDULED BY COMMUNICATIONS * DRIVER DVA65 WHEN A NEW REQUEST IS TO BE READ FROM A COMMUNICATIONS * LINE. THE REQUEST AND DATA BUFFER LENGTHS ARE PASSED TO QUEUE * IN THE EQT EXTENSION FOR THE CORRESPONDING LINE. QUEUE FIRST * CHECKS THE VALIDITY OF THE INTERRUPT. IF IT IS NOT FROM AN INITIALIZED * DVA65 CHANNEL OR IF IT IS A SPURIOUS INTERRUPT FROM ANOTHER * I/O SLOT, THE INTERRUPT WILL BE IGNORED. IF THE PASSED LENGTHS * ARE NOT WITHIN THE ALLOWABLE RANGE (6 31? JMP SSTOP YES, CAN'T ACCEPT IT INB EXT(3) HAS DATA LENGTH LDA 1,I GET IT SSA JMP SSTOP LENGTH ERROR STA DLEN SAVE IT ADA N4097 SSA,RSS DATA LENGTH > 4096? JMP SSTOP YES, CAN'T ACCEPT IT * LDA DLEN LDB RLEN CPA K2 IF DATA LENGTH=2, AND SZB REQUEST LENGTH=0, JMP GRPCL THIS IS A NON-CBL RQST, ELSE JSB RNRQ CHECK FOR QUIESCENT SYSTEM DEF *+4 DEF NWGLC LOCK WORD:NO-WAIT,NO-ABORT,GLOBAL LOCK & CLEAR DEF #QRN QUIESCENT SYSTEM RN DEF EQT4 RETURN STATUS HERE JSB ERR ERROR RETURN LDA EQT4 IS THIS SYSTEM CPA K7 QUIESCED? JMP SSTOP YES, SEND STOP LDA #ST09+1 THIS IS AN CBL DOWNLOAD REQUEST, RSS USE PROGL'S CLASS GRPCL LDA #GRPM NON-CBL RQST. READ IT ON GRPM'S CLASS CCE,SZA,RSS JMP SSTOP SEND STOP IF NO CLASS ALLOCATED RAL,ERA SET NO-WAIT BIT IN CLASS WORD. STA CLASS SAVE LOCALLY * JSB EXEC READ THE REQUEST TO GRPM'S CLASS DEF *+8 DEF K17N NO ABORT DEF CONWD DEF ZERO DEF DLEN RECEIVED DATA LENGTH DEF ZERO DEF RLEN RECEIVED REQUEST LENGTH DEF CLASS JSB ERR HERE IF CLASS READ FAILS * SZA SUCCESS? JMP SSTOP NO, PROBABLY NO SAM, SEND STOP VIA DRIVER CPA #BUSY ANY ACTIVE TCB'S? JMP HANG NO * EXIT JSB EXEC TERMINATE QUEUE DEF *+2 DEF K6 * HANG JSB RNRQ IF NONE, HANG ON #QRN - THIS IS DEF *+4 A QUIESCENT CONDITION DEF GLCW DEF #QRN DEF EQT4 JSB ERR ERROR RETURN .: JMP EXIT SKP * * ERROR PROCESSING SECTION * ERR NOP PASS ERROR INFO TO QCLM & GIVE UP DST QBUF+2 PASS REGS TO QCLM LDA ERR PICK UP ORIGINATION ADDRESS STA QBUF PASS TO QCLM LDA #QCLM QCLM CLASS STA CLASS SAVE LOCALLY * JSB EXEC MAILBOX CLASS WRITE/READ TO QCLM DEF *+8 DEF K20N DEF ZERO DEF QBUF DEF K4 DEF XEQT PASS ID SEG ADDR DEF ZERO DEF CLASS ZERO NOP ERROR RETURN LDA LU SZA,RSS WAS LU DETERMINED? JMP EXIT NO, CAN'T SEND STOP * * CALL DRIVER TO SEND A STOP * SSTOP JSB EXEC DEF *+3 DEF K3 DEF LU JMP EXIT * SKP * * CONSTANTS AND STORAGE * LUMAX EQU 1653B DRT EQU 1652B EQTA EQU 1650B XEQT EQU 1717B * EQT4 NOP RLEN NOP DLEN NOP CLASS NOP EQT# NOP CONWD NOP B77 OCT 77 B65 OCT 65 GLCW OCT 040006 NWGLC OCT 140006 GLOBAL LOCK & CLEAR, WITHOUT WAITING, NO ABORT K2 DEC 2 K3 DEC 3 K4 DEC 4 K6 DEC 6 K7 DEC 7 K9 DEC 9 K15 DEC 15 N1 DEC -1 N32 DEC -32 N4097 DEC -4097 K17N OCT 100021 K20N OCT 100024 LU NOP SCODE NOP ZBIT OCT 10000 * QBUF DEC 0,0,0,0 ERROR BUFFER TO QCLM * SIZE BSS 0 * END QUEUE ² JS 91740-18014 1740 S C0122 DS/1000 MODULE: GRPM              H0101 l8ASMB,R,L,C HED GRPM 91740-16014 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM GRPM,17,4 91740-16014 REV 1740 771018 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT GRPM EXT EXEC,#RSAX,#NCNT,#REQU,#RTRY,$OPSY EXT #NODE,#GRPM,$TIME,#PLOG EXT #NULL,#LDEF,#QCLM,#BREJ EXT #TBRN,#QRN,$RNTB EXT $LIBR,$LIBX,RNRQ * SUP * * GRPM * SOURCE: 91740-18014 * BINARY: 91740-16014 * PRGMR: CHUCK WHELAN * DATE: 17 DEC 76 * * * * GRPM IS THE GENERAL REQUEST PRE-PROCESS MODULE FOR DS/1000. * IT PROCESSES INCOMING REQUESTS AND OUTGOING COMPLETIONS. * * I INCOMING REQUESTS * * 1. HANGS ON A GET ON ITS CLASS NUMBER, AND WHEN * SATISFIED, MOVES THE REQUEST INTO ITS LOCAL BUFFER. * 2. IF THE REQUEST IS NOT DESTINED FOR THE LOCAL NODE, * THE REQ/DATA IS RETHREADED FOR OUTPUT TO THE * APPROPRIATE LU ON "GRPM"S CLASS NUMBER. * 3. IF LOCAL AND A NEW REQUEST, DOES THE FOLLOWING: * A) IF NO TCBS ARE AVAILABLE, SETS THE REPLY FLAG * AND REMOTE BUSY FLAG AND RETURNS THE REQUEST TO * THE ORIGINATOR BY RETHREADING THE REPLY FOR OUTPUT ON * "GRPM"S CLASS. * B) IF SYSTEM IS GOING QUIESCENT, OR THE MONITOR IS * IN AVAILABLE MEMORY SUSPEND (STATE 4), THE "BUSY" * FLAG IS SET IN THE REQUEST AND THE ENTIRE TRANSACTION * IS RETURNED TO THE ORIGINATOR. * C) OTHERWISE, CALLS "#RSAX" TO CREATE THE SLAVE TCB. * D) DETERMINES THE MONITORS CLASS NUMBER FROM "RES" * TABLE AND RETHREADS TH({E REQ/DATA TO THAT CLASS. * 4. IF LOCAL AND A REPLY, DOES THE FOLLOWING: * A) IF "BUSY" FLAG IS SET, CLEARS IT AND RETHREADS * THE REQUEST TO RTRY SO AFTER A DELAY IT CAN * BE REATTEMPTED. HOWEVER, IF IT IS A LOCAL * REQUEST, DS08 IS RETURNED IMMEDIATELY. * B) CALLS #RSAX TO SEARCH FOR THE MASTER TCB. * C) IF FOUND, RETHREADS THE REQ/DATA ON THE MASTER'S * CLASS #. * 5. IF #PLOG IS NON-ZERO, COMPLETED WRITE CLASS BUFFERS * ARE RETHREADED TO PLOG, OTHERWISE THEY ARE DEALLOCATED. * 6. WHEN DONE, "GRPM" RETURNS TO ITS GET. * * II OUTGOING LINE COMPLETIONS * * GRPM PROCESSES COMPLETION STATUS OF ALL COMMUNICATION REQUEST/DATA * WRITE OPERATIONS (EXCEPT PROGL). IF AN OPERATION IS SUCCESSFUL * AND PLOG IS ENABLED, THE REQUEST IS RETHREADED TO PLOG'S CLASS, * IF NOT, THE CLASS BUFFER IS DEALLOCATED. * ON REMOTE OR LOCAL BUSY ERRORS, GRPM CHECKS THE RETRY COUNT IN * THE STREAM WORD OF THE REQUEST. IF ALL RETRIES HAVE BEEN * EXHAUSTED, IT IS TREATED AS A LINE ERROR AND A DS08 IS RETURNED. * IF ANOTHER RETRY IS POSSIBLE, THE ABSOLUTE SYSTEM TIME AT WHICH * THE RETRY SHOULD BE ATTEMPTED IS COMPUTED AND STORED IN THE * EQT5 STATUS SAVE AREA IN THE CLASS HEADER. THE CLASS BUFFER IS * THEN RETHREADED ON "RTRY"S CLASS. * PARITY OR LINE TIMEOUT ERRORS ARE RETRIED 3 TIMES BY RETHREADING * TO "RTRY". IF ALL 4 TRIES FAIL OR A "STOP RECEIVED" CONDITION * IS DETECTED, A DS02 ERROR IS RETURNED. ALL LINE ERRORS HAVE THE * ERROR CODE AND LOCAL NODE NUMBER STORED IN THE ERROR FIELD IN THE * REQUEST. IF THE REQUEST WAS A REPLY, THE CLASS BUFFER IS SIMPLY * CLEARED OR THE REQUEST IS RETHREADED TO PLOG (IF ENABLED). * IF A NON-REPLY, AND THE ORIGINATOR IS NOT THE LOCAL NODE, THE * REPLY FLAG IS SET, AND THE REQUEST IS SENT BACK TO THE ORIGINATOR. * IF THE ORIGINATOR IS LOCAL, TPHE REPLY IS RETHREADED ON THE * MASTER REQUESTORS CLASS. SKP GRPM LDB $OPSY RBR,SLB SKIP IF NON-DMS CLA,RSS JMP GRGET STA MOD1 MODIFY FOR DMS STA LOOP STA LUFND STA MOD4 STA MOD5 * GRGET JSB EXEC HANG ON CLASS DEF *+6 DEF K21 DEF #GRPM RQADR DEF RQBUF REQUEST BUFFER DEF K0 ZERO LENGTH GET DEF BFADR ADDR OF SAM REQST BUFFER * STA TEMP SAVE ERROR STATUS ADB K8 CMB,INB ADB BFADR COMPUTE CLASS HEADER ADDRESS STB HEADR * LDA BFADR LDB RQADR SET TO MOVE 4 WORDS OF REQUEST MOD1 JMP RQLOC NOP HERE IF DMS LDX K4 MWF MOVE 4 WORDS FROM SYSTEM MAP JMP *+4 RQLOC MVW K4 MOVE 4 WORDS LDA TEMP SLA,RSS ANY DRIVER ERRORS JMP ERCHK YES ALF,ALF SSA WAS THIS A WRITE COMPLETION? JMP WASOK YES, PROCESS IT SPC 3 * * SUCCESSFUL READ COMPLETION LOGIC FOLLOWS * LDA RQBUF GET STREAM WORD CKNOD LDB RQBF3 ADDR OF SOURCE NODE RAL SSA,RSS REPLY? INB NO, POINT TO DESTINATION NODE LDB 1,I GET NODE # STB TEMP2 SAVE NODAL ADDRESS SSB,RSS SKIP IF ALWAYS LOCAL CPB #NODE IS IT US? JMP LOCAL YES SKP * * STORE & FORWARD OR BUSY/ERROR REPLY TO ANOTHER NODE * * INITIALIZE THE WRITE RETRY COUNTS * LDA RQBUF AND LEMSK CLEAR COMM LINE RETRY COUNT LDB BFADR JSB STUFF STORE MODIFIED STREAM WORD * * CONVERT DESTINATION NODE TO LU * DLD #NCNT GET ADDR & COUNT OF NRV TABLE STA TEMP SAVE COUNTER * LOOP JMP LOOP0 NOP'D IF DMS SYSTEM XLA 1,I CROSS-LOAD CPU # IF DMS SYSTEM RSS LOOP0 LDA 1,I LOAD CPU # IF NON-DMS INB POINT TO CORRESPONDING LU CPA TEmMP2 IS IT THE GOOD ONE ? JMP LUFND YES INB BUMP ADDR TO NEXT NODE # ISZ TEMP END OF TABLE ? JMP LOOP NO, CONTINUE * * NODAL ADDRESS CAN'T BE CONVERTED TO OUTPUT LU LDA ASC04 GIVE A "DS04" JMP ERETN ERROR, NODE IS NON-ADDRESSABLE * LUFND JMP LUFN0 NOP'D IF DMS SYSTEM XLA 1,I CROSS-LOAD LU IF DMS SYSTEM RSS LUFN0 LDA 1,I LOAD LU IF NON-DMS AND B77 ISOLATE IT * * RETHREAD CLASS BUFFER FOR OUTPUT TO NODE * STA TEMP SAVE OUTPUT LU JSB #REQU OUTPUT BUFFER DEF *+5 DEF #GRPM DEF #GRPM DEF TEMP OUTPUT LU DEF ICNWD NEW CONTROL WORD SZA JSB ERR1 CATASTROPHIC ERROR IF IT FAILED JMP GRGET BACK TO GET SKP * * WRITE WAS SUCCESSFUL * WASOK LDA #PLOG PLOG CLASS NUMBER SZA LOGGING? JMP THRED+1 YES, RETHREAD TO PLOG * JUST DEALLOCATE THIS CLASS BUFFER CLSAM LDA #GRPM ALR,RAR CLEAR "SAVE BUFFER" FLAG STA CLASS * JSB EXEC DO DUMMY GET TO CLEAR CLASS BUFFER DEF *+5 DEF K21 DEF CLASS DEF RQBUF DEF K0 * JMP GRGET BACK TO GET SKP * * THIS REQ/DATA IS DESTINED LOCALLY LOCAL RAL,SLA TEST REPLY FLAG JMP REPLY IT'S A REPLY * LDB #NULL SZB,RSS ANY TCBS AVAILABLE? JMP QRJCT NO, SEND IT BACK FOR AWHILE * LDA RQBUF AND B77 ISOLATE STREAM ADA #LDEF ADA K2 POINT TO LIST HEADER PNTR LDB 0,I POINT TO LIST HEADER INB STB TEMP SAVE ADDRESS OF CLASS # INB LDB 1,I GET ID SEGMENT ADDR OF MONITOR RBL,CLE,ERB CLEAR "NO ABORT" FLAG SZB,RSS IS THIS MONITOR ENABLED? JMP ILLRQ NO, RETURN A "DS06" ADB K15 POINT TO STATUS LDA 1,I GET MONITOR'S STATUS AND K15 CPA K4 AVAILABLE MEMORY SUSPEND? JMP QRJCT YES, REJECT REQUEST * LDB $RNTA RSS LDB 1,I RBL,CLE,SLB,ERB RESOLVE INDIRECT JMP *-2 LDA #QRN GET QUIESCENT RN AND B377 ISOLATE TABLE INDEX ADB 0 COMPUTE POSITION IN RN TABLE LDA 1,I GET IT AND B377 SZA QUIESCING? JMP QRJCT YES, SEND IT BACK SKP * * THIS REQUEST CAN NOW BE PASSED TO THE REQUIRED MONITOR * JSB #RSAX BUILD TCB FOR THIS STREAM DEF *+5 DEF K3 DEF RQBUF+1 PASS ORIGINATORS SEQ # DEF RQBUF & STREAM DEF RQBUF+2 & ORIGIN NODE NO. * SSB OK? JMP ILLRQ NO, GIVE DS06 * LDB BFADR INB POINT TO SECOND REQUEST WORD JSB STUFF STORE LOCAL SEQUENCE # * LDB #NULL NUMBER OF TCB'S LEFT SZB DID WE USE THE LAST ONE? JMP MONIT NO * JSB RNRQ YES! LOCK THE TABLE ACCESS RN DEF *+4 DEF LGNW GLOBAL LOCK, NO WAIT, NO ABORT DEF #TBRN DEF TEMP2 NOP * MONIT LDA TEMP,I GET MONITOR'S CLASS SKP * * ENTER HERE TO RETHREAD THE CLASS BUFFER FROM #GRPM TO THE CLASS * NUMBER PASSED IN THE A REGISTER. * THRED RAL,CLE,ERA CLEAR SIGN STA CLASS * JSB #REQU RETHREAD TO DEF *+3 MONITOR/MASTER/RTRY/PLOG DEF #GRPM DEF CLASS * SZA JSB ERR1 RETHREAD ERROR JMP GRGET BACK TO GET SPC 4 * * HERE WHEN LOCAL REPLY RECEIVED * REPLY SSA,RSS IS THIS A QUIESCENT/BUSY REJECT JMP REPOK NO LDA RQBUF YES AND B1174 CLEAR REPLY & BUSY FLAGS & LINE ERR CNTR STA RQBUF WORD GETS STORED IN SAM LATER LDB RQBUF+3 GET DESTINATION NODE CPB #NODE WAS THIS A LOCAL REQUEST? JMP BZYER YES! GIVE A DS08 NOW JMP RTRY2+1 RETHREAD TO RTRY * REPOK JSB #RSAX SEARCH FOR MASTER TCB DEF *+3 DEF K4 DEF RQBUF+1 SSB FOUND? JSB ERR1 NO, PURGE THE REQUEST JMP THRED RETHREAD IT (A REG = MASTER CLASS #) * QRJCT LDA RQBUF AND LEMSK CLEAR LINE ERROR COUNT IOR RPBZY SET "BUSY" & "REPLY" FLAGS JMP RPLYR SEND REPLY SKP * * ERROR OCCURRED * ERCHK LDB 0 GET EQT STATUS BLF,BLF SSB,RSS IS THIS AN OUTPUT COMPLETION? JMP EREAD NO, NOTE BUT IGNORE THE ERROR * LDB LBZY# DELAY FACTOR FOR LOCAL BUSY REJECTS RAR,SLA,RAR LOCAL BUSY REJECT? JMP DELAY YES, RETRY WITH DELAY SLA,RAR SIMULTANEOUS REQUEST? JMP SIMRQ LDB 0 RAR,SLA,RAR STOP RECEIVED? JMP LFAIL YES SLA REMOTE BUSY? JMP RTRY2 YES * * PARITY ERROR OR LINE TIMEOUT, CHECK RETRY COUNT LDA RQBUF STREAM WORD AND B300 ISOLATE RETRY COUNT CPA B300 ALL RETRIES EXHAUSTED? JMP LFAIL YES, GIVE LINE ERROR * LDB LERR# LINE ERROR DELAY FACTOR JSB SETDL SET DELAY LDA B100 BUMP BITS 7-6 JMP RBUMP * * REMOTE BUSY REJECT RTRY2 LDA RQBUF STREAM WORD AND .074 BITS 11-8 HAVE RETRY COUNT CPA .074 ALL RETRIES EXHAUSTED? JMP BZYER YES, GIVE ERROR LDA B400 BUMP BITS 11-8 LDB RBZY# DELAY FOR REMOTE BUSY (1 SEC) STB TEMP2 SAVE OFFSET (10'S OF MSECS) * RBUMP ADA RQBUF BUMP RETRY COUNT LDB BFADR ADDRESS OF REQUEST IN SAM JSB STUFF STORE MODIFIED STREAM WORD JMP DELA2 SKP * * SIMULTANEOUS REQUEST, DELAY REQUIRED SIMRQ LDB SIRQ# DELAY FACTOR FOR SIMULTANEOUS REQUEST * DELAY JSB SETDL COMPUTE REQUIRED DELAY * DELA2 CLE DLD $TIME CURRENT SYSTEM TIME ADA TEMP2 ADD DELAY TIME SEZ,RSS CARRY? JMP *+3 NO INB,SZB,RSS WILL DAY ROLL OVER? ADA B2500 YES, COMPENSATE FOR IT LDB HEADR POINT TO CLASS BUFFER HEADER ADB K2 BUMP TO 3RD WORD OF HEADER JSB STUFF PUT OFFSET THERE (A REG TO RTRY) * LDA #RTRY RTRY'S CLASS JMP THRED+1 NOW RETHREAD THIS CLASS BUFFER SKP * * IRRECOVERABLE LINE ERRORS * LFAIL LDA ASC01 GET A DS01 SLB WAS IT DRIVER TIMEOUT? INA YES, MAKE IT A DS02 RSS * * BUSY RETRY COUNT EXHAUSTED, GIVE A DS08 ERROR * BZYER LDA ASC08 RSS * * NO MONITOR FOR REQUESTED STREAM IS PRESENT, ILLEGAL REQUEST * ILLRQ LDA ASC06 * ERETN LDB RQBUF GET STREAM WORD RBL CCE,SSB REPLY? JMP ERRFL YES, NO RECOVERY POSSIBLE * LDB BFADR ADB K5 POINT TO REQUEST+5 JSB STUFF STORE ASCII CODE INB POINT TO REQUEST+6 LDA #NODE GET LOCAL NODAL ADDRESS RAL,ERA INDICATE THERE'S AN ASCII ERROR JSB STUFF STORE ERROR LOCATION WORD ADB N2 POINT TO REQUEST+4 LDA ASCDS GET "DS" JSB STUFF STORE IT LDB HEADR ADDRESS OF CLASS HEADER ADB K5 POINT TO XMISSION LOG (DATA LENGTH) CLA SET IT TO ZERO JSB STUFF SO NO DATA GETS SENT LDA RQBUF AND RTYCT IOR BIT14 SET REPLY FLAG IOR #BREJ INITIALIZE RETRY COUNTERS * RPLYR STA RQBUF LDB BFADR POINT TO 1ST REQUEST WORD IN SAM JSB STUFF STORE NEW VALUE JMP CKNOD NOW GO BACK TO SEND REPLY SKP * ERRFL CLB ERROR SENDING REPLY, ENCODE STB ERR1 SO QCLM PRINTS "REPLY FLUSHED..." LDB ASCDS JMP ERR1+1 * EREAD LDA N5 ENCODE SO QCLM PRINTS LDB 0 "COMMUNICATIONS READ ERROR" RSS * * THIS REQUEST IS NON-RECOVERABLE, }CLEAR, LOG, THEN IGNORE IT ERR1 NOP HERE TO REPORT IRRECOVERABLE ERROR DST RQBUF+2 SAVE REGS FOR QCLM LDA ERR1 STA RQBUF PASS ERROR ADDR TO QCLM LDA #QCLM STA CLASS SAVE QCLM CLASS LOCALLY * JSB EXEC MAILBOX WRITE/READ TO QCLM DEF *+8 DEF K20N DEF K0 DEF RQBUF DEF K4 DEF XEQT DEF K0 DEF CLASS NOP * JMP CLSAM GO DEALLOCATE CLASS BUFFER SKP * * MULTIPLY PASSED TIMING FACTOR BY THE LINE TIMEOUT VALUE SETDL NOP STB TEMP2 LDB HEADR INB POINT TO 2ND WORD OF CLASS HEADER MOD4 JMP SETD0 NOP'D IF DMS SYSTEM XLA 1,I X-LOAD LINE'S TIMEOUT VALUE (DMS) RSS SETD0 LDA 1,I LOAD LINE'S TIMEOUT VALUE (NON-DMS) RAR FORM EQT14'S VALUE MPY TEMP2 TIMING FACTOR * LINE TIMEOUT STA TEMP2 SAVE ABSOLUTE DELAY (10'S OF MSECS) JMP SETDL,I * * STORE A WORD IN SAM * STUFF NOP JSB $LIBR GO PRIVILEGED K0 NOP MOD5 JMP STUF2 NOP HERE IF DMS XSA 1,I STORE IN ALTERNATE MAP RSS STUF2 STA 1,I JSB $LIBX DEF STUFF SKP * * CONSTANTS AND STORAGE * B77 OCT 77 BFADR NOP HEADR NOP TEMP NOP CLASS NOP TEMP2 NOP RPBZY OCT 60000 BIT14 OCT 40000 RTYCT OCT 170077 STREAM WORD RETRY COUNT MASK LEMSK OCT 177477 MASK TO CLEAR LINE ERROR COUNT ICNWD OCT 150101 LGNW OCT 140002 K2 DEC 2 K3 DEC 3 K4 DEC 4 K5 DEC 5 K8 DEC 8 K15 DEC 15 K21 DEC 21 N2 DEC -2 N5 DEC -5 K20N OCT 100024 B100 OCT 100 B300 OCT 300 B377 OCT 377 B400 OCT 400 B2500 OCT 25000 B1174 OCT 117477 .074 OCT 007400 $RNTA DEF $RNTB * * TIME DELAY CONSTANTS LBZY# DEC -5 LOCAL BUSY DELAY = 5 * LINE TIMEOUT RBZY# DEC 100 REMOTE BUSY DELAY = 1 SECOND LERR# DEC -10 LINE ERROR RETRY DELAY = 10 * LINE TO SIRQ# DEC -4 640SIMULTANEOUS REQ DELAY = 4 * LINE TO * ASC01 ASC 1,01 ASC04 ASC 1,04 ASC06 ASC 1,06 ASC08 ASC 1,08 ASCDS ASC 1,DS * RQBF3 DEF RQBUF+2 RQBUF BSS 4 * XEQT EQU 1717B * SIZE BSS 0 * END GRPM L6 K Y 91740-18015 1740 S C0122 DS/1000 MODULE: RTRY              H0101 rNASMB,R,L,C HED RTRY 91740-16015 REV 1740 * (C) HEWLETT-PACKARD CO. 1977* NAM RTRY,17,20 91740-16015 REV 1740 771018 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 4 **************************************************************** * * RTRY * * SOURCE PART # 91740-18015 * * REL PART # 91740-16015 * * WRITTEN BY: CHUCK WHELAN * * DATE WRITTEN DEC 1976 * *************************************************************** SPC 3 EXT EXEC,$TIME,$OPSY EXT #REQU,#QCLM,#RTRY,#GRPM,#NCNT * * SPC 3 * RTRY PERFORMS WRITE RETRIES IN THE DS/1000 SYSTEM * * WHEN A WRITE OPERATION FAILS, "GRPM" RETHREADS THE CLASS BUFFER * ON "RTRY"S CLASS AND STORES THE ABSOLUTE TIME AT WHICH THE RETRY * IS TO OCCUR IN THE EQT5 STATUS SAVE WORD IN THE CLASS HEADER. * WHEN "RTRY"S GET IS SATISFIED, IF THE ABSOLUTE TIME HASN'T BEEN * REACHED, "RTRY" COMPUTES THE NECESSARY TIME OFFSET AND PUTS * ITSELF IN THE TIME-LIST. WHEN IT IS RESCHEDULED, IT OUTPUTS * THE CLASS BUFFER, RETHREADING IT ON "GRPM"S CLASS. IF AN * ERROR OCCURS, RTRY WRITES AN ERROR NOTIFICATION TO QCLM * AND DEALLOCATES THE CLASS BUFFER. * SKP * RTRY JSB EXEC DO GET, AWAITING WRITE RETRIES FROM GRPM DEF *+6 DEF K21 DEF #RTRY RTRY CLASS NUMBER DEF K0 DUMMY BUFFER DEF K0 ZERO LENGTH DEF RQADR REQ ADDRESS IN SAM * STA ABTIM SAVE ABSOLUTE RETRY TIME * * A REG HAS ABSOLUTE START TIME CMA,INA ADA $TIME SUBTRACT START TIME FROM CURR. TIME SSA,RSS TIME REACHED? JMP THRED YES, RETHREAD NOW STA OFSET SET OFFSET UNTIL IT CAN GO DLD $TIME GET CURRENT SYSTEM TIME SSA INB,SZB DAY ABOUT TO ROLL OVER? JMP SUSPD NO LDA ABTIM YES SSA DID PASSED TIME ROLL OVER? JMP SUSPD NO LDA OFSET COMPENSATE FOR INITIAL TIME IN ADA B2500 $TIME FOR NEW DAY (25000B) STA OFSET * SUSPD JSB EXEC PUT SELF IN TIME LIST DEF *+6 DEF D12N DEF K0 DEF K1 DEF K0 DEF OFSET JSB ERR1 ERROR * THRED LDB RQADR ADDR OF REQ BUFFER JSB LODWD GET STREAM WORD ADB K2 POINT TO ORIGIN NODE RAL SSA,RSS REPLY? INB NO, POINT TO DESTINATION NODE JSB LODWD GET NODAL ADDRESS STA VECTR SAVE NODE FOR LU CONVERSION * * CONVERT DESTINATION NODE TO LU * SSA ABSOLUTE DESTINATION CODE ? (NEIGHBOR) JMP ABS YES, GET LU AND RETURN DLD #NCNT NO, GET ADDR & SIZE OF TABLE CAX USE X AS COUNTER * LOOP JSB LODWD GET A CPU # INB POINT TO CORRESPONDING LU CPA VECTR IS IT THE GOOD ONE ? JMP LUFND YES INB POINT TO NEXT NODE # IN TABLE ISX END OF TABLE ? JMP LOOP NO, CONTINUE * JSB ERR1 NODAL ADDRESS NOT FOUND, ERROR * ABS CMA,INA MAKE IT >0 JMP LUOK * LUFND JSB LODWD FETCH LU AND B77 ISOLATE IT * LUOK STA VECTR * JSB #REQU RETHREAD TO EQT ON GRPM CLASS DEF *+5 DEF #RTRY DEF #GRPM DEF VECTR DEF ICNWD NEW CONTROL WORD * SZA OK? JSB ERR1 NO JMP RTRY GO WAIT FOR MORE * * IRRECOVERABLE REQUEST ERROR OCCURRED, CLEAR CLASS BUFFER & LEAVE ERR1 NOP DST QBUF+2 SAVE REGS FOR QC LM LDA ERR1 STA QBUF SAVE ERROR ADDR LDB RQADR INB B= ADDR OF SEQ # IN REQUEST JSB LODWD GET SEQ # STA QBUF+1 SAVE IT LDA #QCLM STA CLASS SAVE QCLM CLASS LOCALLY * JSB EXEC WRITE ERROR NOTICE TO QCLM DEF *+8 DEF K20N DEF K0 DEF QBUF DEF K4 DEF XEQT DEF K0 DEF CLASS K0 NOP * LDA #RTRY ALR,RAR CLEAR BUFFER SAVE FLAG STA CLASS * JSB EXEC DO DUMMY GET TO RETURN CLASS BUFFER DEF *+5 DEF K21 DEF CLASS DEF K0 DUMMY BUFFER DEF K0 ZERO LENGTH * JMP RTRY BACK TO GET SPC 3 * LOAD WORD FROM S.A.M., CROSS-LOAD IF DMS SYSTEM LODWD NOP LDA $OPSY OPERATING SYSTEM TYPE RAR,SLA,ERA SKIP IF NON-DMS JMP *+3 DMS. GO EXECUTE XLA LDA 1,I NON-DMS. PICK UP SAM WORD JMP LODWD,I RETURN XLA 1,I CROSS-LOAD SAM WORD JMP LODWD,I RETURN * * DATA AREA * RQADR NOP VECTR NOP OFSET NOP CLASS NOP ABTIM NOP * * B77 OCT 77 K1 DEC 1 K2 DEC 2 K4 DEC 4 K21 DEC 21 K20N OCT 100024 B2500 OCT 2500 D12N OCT 100014 ICNWD OCT 150101 * QBUF BSS 4 * XEQT EQU 1717B * SIZE BSS 0 * END RTRY  LT 91740-18016 1740 S C0122 DS/1000 MODULE: QCLM              H0101 _>ASMB,L,R,C HED QCLM 91740-16016 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM QCLM,19,28 91740-16016 REV 1740 770310 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 **************************************************************** * * QCLM COMMUNICATION ERROR LOG * * SOURCE PART # 91740-18016 REV 1740 * * REL PART # 91740-16016 REV 1740 * * WRITTEN BY CHUCK WHELAN * * DATE WRITTEN DEC 1976 * *************************************************************** SPC 2 EXT EXEC,#QCLM EXT $LIBR,$LIBX,$CVT3 SUP SPC 3 * QCLM LDA #QCLM GET QCLM CLASS NUMBER ALR,RAR AND REMOVE NO WAIT BIT STA QCLS QCLM2 JSB EXEC AWAIT WRITES TO QCLM CLASS DEF *+6 DEF K21 DEF QCLS CLASS WORD IN STORAGE BUFI DEF IBUF BUFFER ADDRESS DEF K4 DEF XEQT ADDRESS OF ID SEG OF CALLER * LDB XEQT WE WILL TRANSFER THE NAME OF ADB K12 THE PROGRAM WHICH CALLED US LDA 1,I INTO AN INTERNAL BUFFER STA ORIGN FOR OUR MESSAGE. STA ORIGX INB STEP TO SECOND WORD LDA 1,I GET IT STA ORIGN+1 SAVE STA ORIGX+1 INB STEP TO LAST LDA 1,I GET IT AND B174K SAVE THE UPPER BYTE IOR B40 PUT BLANK IN RHW STA ORIGN+2 SAVE STA ORIGX+2 * * WE NOW CODE THE QCB IN ASCII (ALL OF IT IS OCTAL) * AND WE FORMAT IT IN A SECOND LINE OF MESSAGE * THIS IS TO HELP THE RECOVERY * LDA IBUF+2 CPA IBUF+3 A=B? RSS YES JMP REGLS NO, JUST GIVE REG CONTENTS CPA N4 A=B=-4? JMP MSGB YES, TCB NOT FOUND CPA N5 A=B=-5? JMP MSGC YES, COMM. READ ERROR * REGLS LDB IBUF P CONTENTS SZB,RSS ZERO? JMP MSGA YES, GIVE "REPLY FLUSHED" * LDA IBUF+1 GET SEQ # DST IBUF EXCHANGE SEQ #/ P LDA FLDAD GET THE ADDRESS OF THE 1ST WORD STA PNTR1 USE AS DESTINATION POINTER LDA BUFI GET ADDRESS OF QCB STA PNTR2 USE AS ORIGIN POINTER LDA N4 SET TO CONVERT 4 WORDS STA CNTR1 * OUTLP CLE SET FOR OCTAL CONVERSION LDA PNTR2,I GET A WORD JSB $LIBR FENCE OFF NOP JSB $CVT3 CODE LDB 0,I MOVE THE ASCII INTO ITS STB PNTR1,I BUFFER. INA STEP TO SECOND WORD ISZ PNTR1 STEP THE DESTINATION POINTER DLD 0,I GET LAST 2 WORDS DST PNTR1,I SAVE * JSB $LIBX FENCE BACK ON DEF *+1 DEF *+1 LDA PNTR1 GET THE DESTINATION POINTER ADA K4 PUSH IT STA PNTR1 AND RESTORE IT ISZ PNTR2 STEP TO NEXT QCB WORD ISZ CNTR1 ALL DONE ? JMP OUTLP NO, CONTINUE * JSB EXEC OUTPUT THE CATASTROPHIC ERROR MESSAGE DEF *+5 DEF K2 WRITE DEF K1 CRT DEF MSG MESSAGE ADDRESS DEF MSGL MESSAGE LENGTH * JMP QCLM2 GO, GET NEXT COMPLAINT SPC 3 * * GIVE EXPLANATION OF ERROR TYPE * MSGA DLD IBUF+2 B&A HAVE ASCII ERROR CODE STB REGA STA REGA+1 JSB MSGX MOVE AND WRITE MESSAGE DEF MSA * MSGB JSB MSGX MOVE AND WRITE MESSAGE DEF MSB * MSGC JSB MSGX MOVE AND WRITE MESSAGE DEF MSC * MSGX NOP LDA MSGX,I FROM ADDR LDB MS2A TO ADDR MVW K16 MOVE MSG TO OUTPUT BUFFER * JSB EXEC OUTPUT ERROR MESSAGE DEF *+5 DEF K2 DEF K1 DEF MSG2 DEF M2LEN * JMP QCLM2 BACK TO CLASS GET SPC 2 * * DATA AREA * K1 DEC 1 K2 DEC 2 K4 DEC 4 K12 DEC 12 K16 DEC 16 K21 DEC 21 N4 DEC -4 N5 DEC -5 B174K OCT 177400 B40 OCT 40 XEQT NOP FLDAD DEF CVFLD PNTR1 NOP PNTR2 NOP CNTR1 NOP QCLS NOP MSGL DEC 34 MS2A DEF MSFL2 M2LEN DEC 28 * IBUF BSS 4 * MSG OCT 6412 ASC 08, DS ERROR: PROG= ORIGN BSS 3 ASC 4, SEQ #= CVFLD BSS 3 ASC 2, P= BSS 3 ASC 2, A= BSS 3 ASC 2, B= BSS 3 * MSA ASC 08, REPLY FLUSHED: REGA BSS 2 ASC 06, ERROR MSB ASC 16, TCB NOT FOUND, POSSIBLE TIMEOUT MSC ASC 16, COMMUNICATIONS READ ERROR * MSG2 OCT 6412 ASC 08, DS ERROR: PROG= ORIGX BSS 3 MSFL2 BSS 16 * SIZE BSS 0 * END QCLM , MU 91740-18017 1840 S C0222 &2APLD              H0102 ylASMB,R,L,N,C *USE 'ASMB,R,N' (RTE-M I/RTE-M II) OR 'ASMB,R,Z' (RTE-M III) IFN * BEGIN NON-DMS CODE *************** NAM APLDR,1,40 91740-16017 REV 1840 780721 *** END NON-DMS CODE *************** XIF IFZ ***** BEGIN DMS CODE *************** NAM APLDR,1,40 91740-16018 REV 1840 780721 ******* END DMS CODE *************** XIF UNL IFN HED APLDR (M2) 91740-16017 REV 1840 780721 (C) HEWLETT-PACKARD CO. XIF IFZ HED APLDR (M3) 91740-16018 REV 1840 780721 (C) HEWLETT-PACKARD CO. XIF LST * * IFN OPTION * NAME: APLDR * SOURCE: 91740-18017 * RELOC: 91740-16017 * PROGMR: EJW,CHW * * IFZ OPTION * NAME : APLDR * SOURCE: 91740-18018 * RELOC: 91740-16018 * PROGMR: EJW,CHW * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * SPC 1 EXT $LIBR,$LIBX,EXEC EXT $CVT3,$CON,PRTN,IMESS EXT DOPEN,DREAD,DLOCF,DCLOS,DEXEC EXT #LNOD,#CNOD,#NCNT SPC 1 IFN * BEGIN NON-DMS CODE *************** EXT .MVW *** END NON-DMS CODE *************** XIF IFZ ***** BEGIN DMS CODE *************** EXT $MATA,$ENDS ******* END DMS CODE *************** XIF SPC 1 * A EQU 0 B EQU 1 KEYWD EQU 1657B BPA1 EQU 1742B BPA2 EQU 1743B RTORG EQU 1746B RTCOM EQU 1747B AVMEM EQU 1751B BKLWA EQU 1777B SUP * * * APLDR IS SCHEDULED BY THE SYSTEM WHEN OPERATOR INPUTS * ONE OF THE FOLLOWING: * PL,LU#,OPT * (1)(0) * LO,PNAME,SC,DRN-LU,PTTN#,SIZE *  LU# * (4) (0) (0) (0) (0) * * APLDR IS SCHEDULED WITH THE FOLLOWING PARAMETERS: * P1 - REMOTE SCHEDULE[15]/ LU[4:9]/ FUNC[0:3] * P2 - #PAGES[10:14] / PTTN#[0:5] OR LIST OPTION * P3 - CHAR1[8:15] / CHAR2[0:7] (OR LU) * P4 - CHAR3[8:15] / CHAR4[0:7] * P5 - CHAR5[8:15] / CHAR6[0:7] * * WHERE FUNCTION CODE IS: * 0 - PROGRAM LIST * 1 - LOAD PROGRAM INTO MEMORY RESIDENT AREA * 2 - LOAD PROGRAM INTO A PARTITION * 3 - SAME AS #1 FROM REMOTE CPU * 4 - SAME AS #2 FROM REMOTE CPU SKP APLDR NOP LDA DPARM GET ADDR OF BUFFER STA TEMP1 SAVE TEMPORARILY LDA MD5 STA TEMP2 RMPLP LDA B,I GET PARAM FROM ID SEG STA TEMP1,I SAVE IN BUFFER INB ISZ TEMP1 ISZ TEMP2 JMP RMPLP * ADB D20 INDEX TO WORD 27 STB DFSC SAVE ADDR OF SECURITY CODE INB LDB 1,I GET CART.REF./ NEG.LU STB ICR SAVE IN 2 WORD ICR PARAMETER CLA STA ERTYP INITIALIZE ERROR INDICATOR LDA $CON,I GET CONSOLE LU AND B77 STA 1 LDA ERLUF RAL,CLE,ERA E=1 IF REMOTE SCHEDULE ALF,ALF ALF AND B77 SZA,RSS LIST LU SPECIFIED? LDA 1 NO, USE CONSOLE STA LU SAVE LU FOR LISTING IOR B400 STA RDLU CCB,SEZ SKIP IF LOCALLY SCHEDULED LDB #CNOD GET ORIGIN NODE FOR LIST STB LNODE SAVE LIST NODE * * LDA ERLUF GET FUNCTION FROM BITS 0-3 AND B17 STA FUNC SZA,RSS IS IT LIST? 0 JMP LIST * LDB #LNOD SEZ JMP LODCK JUMP IF REMOTELY SCHEDULED * LDB #NCNT SZB ANY DS-1000 NODES INITIALIZED? JMP CVNOD YES, ASK FOR LOAD NODE CCB NO, INDICATE LOCAL NODE JMP LODCK * CVNOD JSB IMESS ASK "LOAD FILE'S NODE?" DEF *+4 DEF D2 DEF QUEST DEF D10 * JSB IMESS GET RESPONSE DEF *+4 DEF D1 DEF ABSBF DEF MD5 * CMB,INB,SZB,RSS JMP CVNOD UNKNOWN RESPONSE STB TEMP1 SAVE BYTE COUNT CLA STA NODE LDB DABS RBL BYTE POINTER LBT GET FIRST CHAR. STA TEMP2 SAVE IT CPA ASCNG ="-"? LDA D48 YES CVNO1 ADA N58 SSA,RSS VALID NUMERIC? JMP CVNOD NO, RE-ASK QUESTION ADA D10 A HAS NUMERIC VALUE OF CHARACTER SSA VALID NUMERIC? JMP CVNOD NO, RE-ASK QUESTION ADA NODE ACCUMULATE NODAL ADDRESS ISZ TEMP1 MORE CHARACTERS? RSS YES JMP CVNO2 NO STB TEMP3 SAVE BYTE ADDRESS MPY D10 ACCUMULATED VALUE * 10 STA NODE LDB TEMP3 GET BYTE ADDRESS LBT GET NEXT CHARACTER JMP CVNO1 CVNO2 LDB TEMP2 CPB ASCNG 1ST = "-"? CMA,INA YES, NEGATE VALUE LDB 0 LDA FUNC * ENTER FOLLOWING CODE WITH FILE'S NODE IN B REGISTER LODCK CPA D1 IS IT A MEMORY RESIDENT LOAD? JMP LOAD IFZ ***** BEGIN DMS CODE ************** CPA D2 IS IT PARTITION LOAD? JMP LOAD ***** END DMS CODE ************** XIF * UNL * EXT DBUG *** DEBUGGING *** * JSB DBUG *** DEBUGGING *** * DEF *+1 *** DEBUGGING *** * NOP *** DEBUGGING *** NOP *** DEBUGGING *** LST * LDB MD64 FUNCTION CODE ERROR JMP ERSET ERROR * DPARM DEF ERLUF MD5 DEC -5 B77 OCT 77 B2300 OCT 2300 OPT OCT 2310 B400 OCT 400 D3 OCT 3 D20 DEC 20 D48 DEC 48 AN ASCII "0" N58 DEC -58 ASCNG OCT 55 NEG SIGN RDLU NOP FUNC NOP FUNCTION CODE LNODE NOP NODE FOR LIST OUR\TPUT ICR BSS 2 CR/NODE ARRAY NODE EQU ICR+1 FLFLG NOP FILE FLAG HED LO: LOAD PROGRAM * LOAD EQU * STB NODE SAVE NODE OF LOAD FILE SPC 1 IFZ ***** BEGIN DMS CODE *************** CLA STA PT#PG STA PTTN# ******* END DMS CODE *************** XIF SPC 1 JSB IHILO INIT HI,LO ADDRS LDA DWRD1 INIT SPEC REC STA WORD1 DUMMY ID ADDR. LDA DWRD2 STA WORD2 LDA RSS INITIALIZE SWITCH STA AB12D FOR SPEC. REC. CLA STA ABS12 STA ABSCT INDICATE NO ABS YET. * JSB STRID LOAD2 JSB SRCID FIND A BLANK DEF ZERO ID SEG. JMP LOADD NO BLANK ID SEG. JMP LOAD2 KEEP LOOKING. STA CURID GOT IT, SAVE ADDR. * LDA NAM12 GET FILE NAME. SZA,RSS GIVEN? LDA D4 NO, USE DEFAULT STA NAM12 SAVE FOR COMPARE STA FLFLG SET FILE FLAG AND B77 CPA NAM12 LEGAL LU? JMP STCNW YES. SET UP CONTROL WORD. LDB #NCNT IS THIS NODE INITIALIZED SZB FOR DS/1000 COMMUNICATIONS? JMP OPENF YES--GO OPEN FILE. JMP ABORT NO--ABORT. * STCNW IOR B2300 SET UP CONTROL WORD FOR STA CONWD BINARY ABSOLUTE DEXEC READS. CLB STB NAM12 CLEAR TO FORCE USE OF NAM RECORD NAME STB FLFLG CLEAR FILE FLAG. JMP NOTIN GO READ FROM LOCAL LU * OPENF JSB DOPEN OPEN THE ABS INPUT FILE DEF *+7 DEF DCB DEF ERR DEF NAM12 FILE NAME ADDR DEF OPT OPT = 2300B FOR ABS DFSC DEF * SECURITY CODE DEF ICR CR/NODE ARRAY SSA ANY ERRORS? JMP NOFIL NO SUCH FILE * JSB DLOCF GET FILE INFO DEF *+9 DEF DCB DEF ERR DEF TEMP1 DEF TEMP1 DEF TEMP1 DEF TEMP1 DEF TEMP1 DEF TEMP LDA TEMP SZA,RSS TYPE 0 FILE? STA NAM12 FORCE USE OF TRAILER RECORD SZA,RSS JMP ABS0 YES, SKIP DUP NAME CHECK NOW * JSB DUPID CHECK FOR DUPLICATE NAME DNM12 DEF NAM12 CHANGE TO ..NAME IF POSSIBLE * * READ AN ABSOLUTE RECORD * * ABS0 LDA FLFLG SZA IS INPUT FROM FILE? JMP READF YES, DO RFA READ * NOTIN JSB DEXEC NO--MAKE DEXEC CALLS. DEF *+6 DEF NODE DEF D1 DEF CONWD DEF ABSBF DEF D64 * AND B240 ISOLATE EOF/EOT BITS SZA EOF OR EOT? JMP LOAD5 YES JMP ABS0A NO, CONTINUE * READF JSB DREAD READ ABS RECORD DEF *+6 DEF DCB DEF ERR DABS DEF ABSBF DEF D64 DEF LEN LDB LEN CPB M1 EOF? JMP LOAD5 YES. SSA JMP ABSCK ANY ERROR, CHECKSUM ERROR * ABS0A LDA ABSCT GET WORD COUNT AND LHALF ALF,ALF SHIFT TO LOW BITS STA ABSSZ SAVE REC SIZE CMA,INA STA TEMP1 SAVE NEG COUNT LDA ABSAD GET ADDR, START CKSM. LDB DABSD ABS0B ADA 1,I ADD WORD TO RUNNING CKSUM INB ISZ TEMP1 BUMP COUNT JMP ABS0B REPEAT TIL DONE. * CPA 1,I COMPARE CKSMS JMP ABS1 MATCHES * ABSCK LDB ERR10 CHECKSUM ERROR- JMP ERPR4 ERR MSG THEN ABORT * NOFIL STA ERTYP RETURN ERROR CODE CMA,INA FMP ERROR CODE IN (A) LDB DABS GET DEF TO TEMP BUFFER JSB CVDEC CONVERT ERR CODE TO ASCII LDA LDASH IOR ABSAD FILL IN "- " STA ABSAD FOR " APLDR: -###" LDB DABS INB SET ADDR OF 4 CHARS LDA D2 JSB STUFP STUFF NAME & PRINT MESSAGE JMP ABORT ABORT APLDR * * FIND WHERE ABSOLUTE RECORD FITS IN CORE * * ABS1 \LDA ABSAD LDB ABSCT CPB HI2 ONLY 2 WORDS IN REC? RSS JMP ABS1A NO, CHECK NORMAL RECORD CPA D2 IS IT SPECIAL RECORD? JMP ABS12 YES ABS1A AND BPMSK IS IT BASE PAGE? CPA ABSAD JMP ABS2 YES, BASE PAGE. * SPC 1 IFZ ***** BEGIN DMS CODE *************** LDA FUNC CPA D2 LOAD PTTN? JMP PTMN YES, SET BOUNDS FOR ADDR CHECKS * ******* END DMS CODE *************** XIF SPC 1 LDA RTORG GET DEFAULT LOWEST ADDR STA TEMP LDA AVMEM GET DEFAULT HIGHEST ADDR STA TEMP1 LDA DMAIN GET PTRS TO MAIN HI/LO LDB D22 SET OFFSET FOR MAIN JMP ABS3 ADDRS IN ID SEG. * ABS2 EQU * SPC 1 IFZ ***** BEGIN DMS CODE *************** LDA FUNC CPA D2 LOAD PTTN? JMP PTBP YES, SET BOUNDS FOR ADDR CHECKS * ******* END DMS CODE *************** XIF SPC 1 LDA BPA1 GET DEFAULT LOWEST ADDR STA TEMP LDA BPA2 GET DEFAULT HIGHEST ADDR INA STA TEMP1 LDA DBASE GET PTRS TO BASE HI/LO LDB D24 SET OFFSET FOR BASE PAGE * * * * FIND THE HI AND LO MEMORY BOUNDS OF FREE CORE * * ABS3 STB IDOFS SAVE OFFSET TO GET ADDRS STA TEMP4 SAVE ADDR OF LFREE ADA D2 STA TEMP5 SAVE ADDR OF HFREE LDA TEMP CMA,INA CHECK IF ABS REC < FWABP USER LINKS ADA ABSAD SSA JMP ABS14 ABS < FWABP, ERROR LDA ABSAD ADA ABSSZ CMA,INA CHECK IF ABS REC > LWAM USER SPACE ADA TEMP1 SSA JMP ABS14 ABS > LWAM, ERROR LDA TEMP4,I CPA TEMP RSS ADDRS ALREADY SET? JMP ABS6 YES, SKIP SEARCH FOR HI/LO * JSB STRID INIT ID SEARCH. ABS4 JSB SRCID SEARCH EACH ID DEF ZERO EXCEPT BLANK ONES, JMP AB4S6 FOR THE HI/LO RSS RSS ADDRS WHICH JMP ABS4 DEFINE FREE CORE. CPA CURID IS THIS ID FOR PRG? JMP ABS4 YES, IGNORE THIS ID BOUNDS ADA IDOFS STA TEMP SET ADDR OF ID ADDR. * LDA B (B) STILL HAS ADDR OF NAME ADA D2 BUMP TO TYPE LDA A,I AND B17 GET TYPE FROM ID SEG CPA D1 MEMORY RESIDENT TYPE? RSS YES, CHECK ADDRS JMP ABS4 NO, IGNORE ID * CLA STA TEMP1 CLEAR OVERLAP FLAG * LDA TEMP,I GET ID LOW CMA,INA ADA ABSAD IS ID LOW > ABS REC? SSA JMP ABS4B LOW>ABS, CHECK MORE ISZ TEMP1 LOW<=ABS, CHECK IF OVERLAP JMP ABS5 BY CHECKING IF HI>=ABS * ABS4B LDA TEMP,I GET ID LOW AGAIN CMA SUBTRACT IT ADA TEMP5,I FROM LAST HFREE SSA AND JMP ABS5 IF IT IS LDA TEMP,I LOWER THEN KEEP IT DST TEMP5,I AS NEW HFREE * ABS5 ISZ TEMP LDA TEMP,I GET ID HIGH ADDR CMA,INA ADA ABSAD SSA,RSS ID HIGH < ADDR OF REC? JMP ABS5B HI<=ABS, CHECK MORE CLA,INA HI>ABS, MIGHT OVERLAP CPA TEMP1 DOES ABS OVERLAP? JMP ABS13 YES, GIVE OF ERR JMP ABS4 NO, IGNORE * ABS5B LDA TEMP,I GET ID HI CMA,INA SUBTRACT IT ADA TEMP4,I FROM LAST LFREE SSA,RSS AND IF IT IS JMP ABS4 LDA TEMP,I HIGHER, WE KEEP IT DST TEMP4,I AS NEW LFREE JMP ABS4 REPEAT FOR EACH ID * * * * ALREADY GOT MEMORY BOUNDS; SEE IF ABS CAN FIT * * ABS6 LDA ABSAD GET ADDR OF ABS REC LDB ABSSZ ADB A GET ADDR OF END OF ABS REC JSB CKBND CHECK BOUNDS WITH LFREE,HFREE JMP ABS13 ERROR. * * * * COPY ABS RECORD TO CORE IF WITHIN BOUNDS SPC 1 IFZ ***** BEGIN DMS CODE *************** LDA FUNC CPA D1 LOAD MEMORY RESIDENT? JMP LDMRP YES * LDA ABSAD NO, LOAD PARTITION RESIDENT JSB PGNO GET PAGE OF RECORD STA PAGE1 SZA,RSS RECORD FOR BASE PAGE? JMP BPMAP YES * LDA ABSAD ADA ABSSZ GET ADDR OF LAST WORD IN RECORD ADA M1 STA ABSEN SAVE ADDR OF LAST WORD IN REC JSB PGNO FIND PAGE OF THAT WORD STA B STB PAGE2 SAVE ENDING PAGE NUMBER CPB PAGE1 RECORD FITS WITHIN ONE PAGE? JMP SAMEP YES * BLF,BLF NO, CROSSES ONE PAGE RBL,RBL ASSUMING RECORD SIZE < 128 WORDS STB PADDR SAVE PAGE BOUNDARY ADDR LDA ABSAD CMA,INA ADA PADDR CALCULATE #WORDS ON THIS PAGE CAX STA WDS1 LDA PTFWA JSB PGNO STA B CMB,INB SUBTRACT PTTN PAGE# ADB PAGE1 TO GET #PAGES OFFSET ADB PTSPG AND OFFSET FROM FIRST PAGE OF PTTN INB (B) = PHYSICAL PAGE # AFTER COUNTING BP * LDA ABSAD CAY (Y) = LOGICAL ADDR FOR RECORD LDA DABSD (A) = ADDR OF RECORD IN INPUT BUFFER JSB MAPMV PERFORM MAPPING WORD MOVE * LDA PAGE2 SET UP TO MOVE SECOND PART ALF,ALF RAL,RAL CONVERT PAGE# TO ADDR CMA,INA SUBTRACT FROM END ADDR ADA ABSEN TO GET # WORDS INA CAX (X) = # WORDS TO MOVE LDA PTFWA JSB PGNO STA B CMB,INB SUBTRACT FIRST PAGE OF PTTN ADB PAGE2 TO GET #PAGES OFFSET ADB PTSPG ADD TO PTTN FIRST PAGE INB (B) = PAGE # LDA PADDR CAY (Y) = LOGICAL ADDR FOR RECORD LDA DABSD ADA WDS1 (A) = ADDR OF ABS REC IN INPUT BUFFER JSB MAPMV DO MAPPED MOVE JMP ABS0 GO READ MORE * SAMEP LDA PTFWA JSB PGwNO STA B CMB,INB ADB PAGE1 INB ADB PTSPG SAMEM LDA ABSSZ CAX (X) = #WORDS LDA ABSAD CAY (Y) = LOGICAL ADDR IN PTTN LDA DABSD (A) = ADDR OF REC IN INPUT BUFFER JSB MAPMV DO MAPPED MOVE JMP ABS0 GO READ MORE * BPMAP LDB PTSPG JMP SAMEM * * PGNO NOP CONVERT ADDR TO PAGE # AND B76K ALF,RAL RAL JMP PGNO,I RETURN (A)=PAGE # (B)=UNCHANGED * * (A) = ADDR OF ABS REC IN INPUT BUFFER * (B) = PAGE # OF PARTITION * (X) = # WORDS TO MOVE * (Y) = LOGICAL ADDR FOR ABS IN PTTN * MAPMV NOP MAPPED MOVE ROUTINE STA MAPFR TO MOVE ABS RECS TO PTTN CYA STA LOGSA SAVE LOGICAL ADDR CXA STA NWDS SAVE # WORDS * CLA,INA CAX (X) = 1 REGISTER TO SET UP LDA MAPPG (A) = MAP REGISTER # JSB $LIBR TURN OFF MEM PROT NOP SO WE CAN CHANGE MAP, ALSO MOVE TO BP XMS (B) = PTTN'S PAGE # LDA LOGSA CONVERT LOG ADDR TO PAGE# AND B76K CMA,INA ADA LOGSA OFFSET INTO PAGE ADA PAGBF MAKE LOGICAL ADDR FOR MAPPED MOVE STA B (B) = ADDR OF DUMMY BUFFER FOR MOVE LDA NWDS CAX (X) = #WORDS TO MOVE LDA MAPFR (A) = ADDR OF ABS REC IN BUFFER MWI MOVE WORDS VIA DUMMY BUFFER IN SYS MAP JSB $LIBX DEF MAPMV RETURN * MAPFR NOP ADDR OF ABS REC IN BUFFER LOGSA NOP LOGICAL ADDR OF ABS REC IN PTTN MAPPG DEC 31 LAST PAGE IN SYSTEM MAP PAGBF OCT 76000 ADDR OF DUMMY BUFFER FOR CROSS MAP STORE NWDS NOP #WORDS TO MOVE PADDR NOP PAGE BOUNDARY ADDR B1777 OCT 1777 B76K OCT 76000 C100K OCT 77777 CURPT NOP ADDR OF CURRENT PTTN OWNER PTR PAGE1 NOP PAGE # OF FIRST PART OF REC PAGE2 NOP PAGE # OF SECOND PAR1T OF REC ABSEN NOP ADDR OF LAST WORD IN REC PT#PG NOP #PAGES IN PTTN PTFWA NOP LOGICAL ADDR OF FIRST WORD IN MAIN OF PTTN PTLWA NOP LOGICAL ADDR OF LAST WORD IN MAIN OF PTTN PTSPG NOP PAGE # OF FIRST PAGE IN PTTN PTTN# NOP PTTN # WDS1 NOP # WORDS IN FIRST PAGE OF REC DCRID DEF CURID * * PTMN LDA DMAIN GET PTRS TO MAIN HI/LO RSS GO CHECK BOUNDS OF REC * PTBP LDA DBASE GET PTRS TO BP HI/LO STA TEMP4 JMP ABS6 GO CHECK BOUNDS OF REC * ******* END DMS CODE *************** XIF SPC 1 * * B240 OCT 240 CONWD NOP CONTROL WORD FOR EXEC CALL * * LDMRP LDA DABSD SET UP BUFFER LDB ABSAD SET UP CORE ADDR. JSB SYSET PUT INTO CORE. DEF ABSSZ JMP ABS0 GO GET ANOTHER RECORD * * * * PROCESS SPECIAL TRAILER RECORDS. * * ABS12 NOP RSS-ED AFTER SSGA SET UP. JMP AB12C AB12D RSS NOP-ED AFTER 1ST ENTRY.! JMP AB12B SO ONLY DO THIS ONCE. LDA MD28 STA TEMP1 SET COUNTER LDB DDMID TO CLEAR OUT CLA AB12A STA B,I SPECIAL RECORDS INB ISZ TEMP1 JMP AB12A STA AB12D NOP SWITCH * AB12B LDA WORD1 CPA DWRD2 ALL DONE ALREADY? JMP IDERR ERROR ON TRAILER RECORDS DLD ABSD1 PICK UP 2 DATA WORDS STA WORD1,I PUT 1ST INTO DUMMY ID. STB WORD2,I PUT 2ND INTO DUMMY ID. ISZ WORD1 BUMP DUMMY ID ISZ WORD2 LOCATIONS. JMP ABS0 * * MPFT# 0-PRP NO COM, 1-MRP NO COM, 2-RT COM, 3-XXX, 4-SSGA * AB12C LDA RSS STA ABS12 SET RSS IN THE SSGA SWITCH CLB,INB PREPARE FOR FUNC=1 FOR MRP LDA ABSD1 FIRST SPECIAL RECORD RAL,CLE,SLA,ERA SIGN BIT 0-MRP, 1-PRP INB NOT MEM RES, SET FUNC=2 FOR PTTN LOAD STA MPFT# HAS MPFT INDEX STB FUVNC OVERRIDE FUNC WITH ABS TYPE SEZ,RSS IS IT MEMORY RESIDENT? JMP ABS0 YES, READ NEXT RECORD SPC 1 IFN * BEGIN NON-DMS CODE *************** JMP IDERR M1 OR M2 DOESN'T ALLOW PRP *** END NON-DMS CODE *************** XIF IFZ ***** BEGIN DMS CODE *************** LDA PGPT JSB PGNO CMA,INA INA STA PT#PG SAVE NEG #PAGES-1 CCB ADB $MATA (B) = ADDR OF #PTTNS LDA PGPT AND B77 GET PTTN # SZA,RSS SPECIFIC PTTN# WANTED? JMP PTFND NO, FIND A FREE ONE * ADA M1 SAVE PTTN# - 1 STA PTTN# CMA ADA B,I SUBTRACT FROM #PTTNS CMA SSA,RSS ANY ERROR? JMP ER.PT YES, NO SUCH PTTN * LDA PTTN# 6*(PTTN#-1)+$MATA MPY D6 IS ADDR OF ENTRY IN MAP TABLE ADA $MATA ADA D2 INDEX TO ID OF PTTN OWNER LDB A,I SZB IS PTTN FREE? JMP PTTNO NO, PTTN IS OCCUPIED * LDB A ADB D2 INDEX TO RESERVED FLAG LDB B,I AND PTTN SIZE WORD RBL,CLE,ERB KEEP RESERVE FLAG IN (E) ADB PT#PG CCE,SSB PTTN LARGE ENOUGH? JMP PT.SZ * PTFR LDB PTTN# RBL,ERB SET SIGN BIT FROM (E) STB PTTN# FOR PARTITION REQUESTED STA CURPT SAVE CURR PTTN OWNER PTR LDB A ADB M2 BACK UP TO LINK WORD LDB B,I SSB IS PTTN DEFINED? JMP ER.PT NO. GIVE 'PTN' ERROR * INA LDB A,I STB PTSPG SAVE PTTN START PAGE # INA LDB A,I STB PT#PG SAVE #PAGES IN PTTN JMP PTADR NOW FIND HI ADDR OF PTTN * PTTNO ADB D12 INDEX B TO ADDR OF NAME LDA ERR14 PTTN OCCUPIED JSB ERROR -PTN XXXXX- ERROR MESSAGE LDB MD62 ERROR CODE JMP ERSET * PTFND CLA STA PTTN# INIT PTTN# TO 0 LDA B,I GET #PTTNS CMA,INA STA TEMP NEGATE FOR PTTN SCAN LDA $MATA ADA D2 LOOK AT EACH PTTN OWNER ID * PTNX LDB A,I SZB IS PTTN FREE? JMP PTNFD NO, PTTN NOT FOUND * LDB A ADB D2 INDEX TO SIZE WORD IN MAT ENTRY LDB B,I RBL,CLE,SLB,ERB JMP PTNFD RESERVED, KEEP LOOKING ADB PT#PG CLE,SSB,RSS ENOUGH PAGES IN THIS PTTN? JMP PTFR YES, USE THIS (E=0 TOO) * PTNFD ADA D6 NO, TRY NEXT ONE ISZ PTTN# BUMP PTTN# ISZ TEMP LOOKED AT ALL OF THEM YET? JMP PTNX NO, KEEP LOOKING * ER.PT LDB ERR14 NO SUCH PTTN OR NONE FREE JMP ERPR4 -PTN- ERROR AND ABORT * PT.SZ LDB ERR15 NOT ENOUGH PAGES IN PTTN JMP ERPR4 -PTSZ- ERROR AND ABORT * * PTADR LDA MPFT# SZA IS COMMON OR SSGA NEEDED? JMP USECM YES * LDA $ENDS GET LAST PAGE OF SYSTEM ALF,ALF RAL,RAL JMP STFWA SET UP FWA FOR USER * USECM LDA RTORG ADA RTCOM ADA B1777 AND B76K * STFWA STA PAGE1 SAVE TEMPORARILY CMA,INA LOWEST POSSIBLE LOGICAL ADDR STA B LDA ABSD2 AND B76K GET START PAGE OF USER ABS ADB A SSB USER ADDR < LOWEST LOGICAL ADDR? JMP ABS14 YES "ERR MEM" * STA PTFWA SAVE FWA OF PARTITION USER STA LMAIN SAVE FOR BOUNDS CHECK LDB PT#PG #PAGES - 1 IN PARTITION BLF,BLF RBL,RBL ADB PAGE1 COMPUTE LWA PTTN OR 77777 CMA,INA ADA B JSB PGNO STA PT#PG SAVE ACTUAL #PAGES USED ADB M1 SSB ADDR > 77777? LDB C100K YES, SET LWA = 77777 STB PTLWA LWA OF PARTITION AREA STB HMAIN SAVE FOR BOUNDS CHECK LDA D2 STA LBASE SET LOW BASE ADDR FOR BOUNDS CHECK LDA ԖNLHBPA2 INA STA HBASE SET HI BASE ADDR FOR BOUNDS CHECK JMP ABS0 DONE WITH 1ST SPECIAL, GO READ ABS * ******* END DMS CODE *************** XIF SPC 1 * * * * * REACHED END-OF-FILE ON PROGRAM INPUT * * LOAD5 LDB ABSCT CHECK IF ANY ABS SZB,RSS WAS READ YET. JMP IDERR ERROR IF NONE. LDA WORD1 SPEC REC MUST BE AT END CPA DWRD2 WAS IT ALL THERE? JMP LOAD6 YES. IDERR LDB ERR13 NO SPECIAL RECORDS, JMP ERPR4 PRINT ERR MSG/ABORT * LOAD6 DLD NAM12 NAME GIVEN IN COMMAND? SZA,RSS JMP LOAD7 NO, USE NAME FROM SPEC REC DST PNM12 YES, USE NAME FROM COMMAND LDA NAM50 GET 5TH CHAR AND LHALF STA PNM50 JMP LOAD8 WE DID DUP.CHECK ALREADY. LOAD7 JSB DUPID NAME GIVEN IN SPECIAL RECORD, DEF PNM12 CHECK FOR DUPLICATE. * LOAD8 LDB SZCOM GET SIZE OF COMMON SZB,RSS JMP LOD8A SKIP CHECK IF NO COMMON LDA FWAC GET FWA COMMON CMA SUBTR FROM ADA RTORG FWA REAL-TIME COMMON SSA,RSS FWACAVMEM? JMP LOADE YES, ERROR. * * LOD8A LDA DMAIN GET FREE AREA POINTERS STA TEMP4 FOR THE MAIN AREA DLD PRGMN GET FINAL BOUNDS OF PROG JSB CKBND SEE IF FIT. (IN CASE BSS USED) JMP LOADC ERROR. * LDA DBASE GET FREE AREA POINTERS STA TEMP4 FOR THE BASE PAGE AREA DLD PRGBP GET FINAL BOUNDS OF PROG JSB CKBND SEE IF FIT. (IN CASE BSS USED) JMP LOADC ERROR. * * * * MOVE ID SEGMENT TO SYSTEM AREA * * LOD8B LDA PNM50 GET 5TH CHAR AND LHALF MASK OUT TYPE INA SET TO TYPE 1 IF MEM.RES. STA PNM50 SPC 1 IFN * BEGIN NON-DMS CODE *************** LDA MPFT# ALF,ALF PUT MPFT INDEX IN BITS 7-9 RAR FOR ID SEG WORD 22 STA MPFT *** END NON-DMS CODE *************** XIF SPC 1 IFZ ***** BEGIN DMS CODE *************** LDB FUNC CPB D1 JMP LOD8C ISZ PNM50 SET TYPE 2 IF PTTN.RES. * LDA DCRID LDB CURPT SET NEW PTTN OWNER ID JSB SYSET DEF D1 LOD8C LDA PT#PG GET #PAGES IN PTTN ALF,RAR IOR MPFT# SET MPFT INDEX IN BITS 7-9 ALF,ALF RAR IOR PTTN# SET PTTN# (BITS 0-5) AND RP (BIT 15) STA MPFT PUT WORD IN ID SEG WORD 22 ******* END DMS CODE *************** XIF SPC 1 LDB CURID INB SET UP ID SEG B-REG TO STB XB POINT TO PARAMS AREA * LDA DDMID SET UP ADDR INA FOR DATA WORDS. LDB CURID SET ADDR FOR CORE LOC. INB DON'T MOVE LINKAGE WORD JSB SYSET MOVE ID SEG DEF D27 * LDB BUFAD SET UP DONE MESSAGE LDA MSG1 WITH PROGRAM NAME MVW D3 LDA DWRD1+1 GET ADDR OF PROG NAME JSB MVNAM MOVE NAME TO MSG LDA D10 STA TEMP"3 JSB DSPLA DISPLAY MESSAGE JMP STOP END APLDR. * * * ERROR RETURNS FROM LOADING SECTION * ABS13 JSB REMER MEMORY ERROR JSB IHILO CLEAR HI,LO ADDR JMP ABS1 GO RE-ESTABLISH HI/LO. * ABS14 LDB ERR12 ABSLWAM JMP ERPR4 SO ABORT * LOADC LDA B,I GET NAM12 FROM ID SZA,RSS PROG REMOVED YET? JMP LOD8B YES. JSB REMER FINAL MEMORY ERROR JMP LOD8A CHECK AGAIN * LOADD LDA DBLNK NO BLANK STA MT.ID+1 ID SEG LDA A00 SET ZEROES IN MSG STA MT.ID+2 LDA D11 LDB MT.ID SET UP MESSAGE ERMPR JSB STUFP PRINT MESSAGE LDB TEMP,I GET ERROR CODE FOR ANY CALLER * ERSET STB ERTYP SAVE ERROR CODE FOR "PRTN" CALL JMP ABORT THEN ABORT. * LOADE LDB ERR11 ABS USED TOO MUCH COMMON ERPR4 LDA D2 GET COUNT TO JMP ERMPR PRINT ERR MSG, ABORT SKP * **************************** * SUBROUTINES USED IN LOAD AND ABSOLUTE RECORD PROCESSORS * **************************** * * DUPID CHECKS FOR DUPLICATE PROGRAM NAME, ISSUES ERROR * MESSAGE AND ATTEMPTS TO CHANGE PROGRAM NAME. ABORTS IF * STILL NOT UNIQUE. * JSB DUPID * DEF PNAME * * DUPID NOP SEARCH FOR DUPLICATE LDA DUPID,I ID NAME. STA DUPNM SAVE ID NAME. ISZ DUPID DUP1 JSB STRID INIT ID SCANNER. DUP2 JSB SRCID FIND ID SEG DUPNM NOP WITH SAME NAME JMP DUPID,I NO DUPLICATE. JMP DUP2 REPEAT TIL DONE. LDA ERR02 DUPLIC. PROG ERR LDB DUPNM JSB ERROR LDB MD61 * LDA C.. CHANGE NAME ONLY ONCE CPA DUPNM,I IF NAME ALREADY CHANGED, JMP ERSET THEN ABORT, ERROR -61 STA DUPNM,I ELSE SEARCH AGAIN. CLB,INB STB ERTYP RETURN A +1 FOR RENAME JMP DUP1 * * **\ ************************** * * SYSET SETS WORDS INTO CORE LOCATIONS * LDA ADDFR * LDB ADDTO * JSB SYSET * DEF COUNT * * SYSET NOP SYSTEM WORD SETTER. JSB $LIBR TURN OFF THE NOP INTER. SYS. STA IHILO SAVE (A) TEMPORARILY LDA SYSET,I GET ADDR OF COUNT STA SYSCT SET COUNT ADDR LDA IHILO RESTORE (A) SPC 1 IFN * BEGIN NON-DMS CODE *************** JSB .MVW STORE WORD INTO SYS. DEF SYSCT NOP *** END NON-DMS CODE *************** XIF SPC 1 IFZ ***** BEGIN DMS CODE *************** MVW SYSCT ******* END DMS CODE *************** XIF SPC 1 SYSCT EQU *-2 ISZ SYSET JSB $LIBX RESTORE INTER SYS DEF SYSET AND RETURN. * * *********************************** * * IHILO INITIALIZES DEFAULT HIGH AND LOW BOUNDS * OF FREE MEMORY. * JSB IHILO * * IHILO NOP INITIALIZE HI/LO ADDRS LDA BKLWA TO FIND HIGHEST STA HMAIN AND LOWEST LDA B1647 STA HBASE ADDRS OF UNUSED LDA RTORG CORE WHICH MAY BE STA LMAIN USED FOR LOADING LDA BPA1 STA LBASE ABS PROGRAMS CLA STA LMID STA HMID STA LBID STA HBID JMP IHILO,I RETURN * * ******************************* * * CKBND CHECKS PROGRAM BOUNDS AGAINST THAT OF FREE * CORE (TEMP4 POINTS TO FREE CORE POINTERS). * LDA PRGLO LOW ADDR OF CORE USED * LDB PRGHI HI ADDR * JSB CKBND * * * CKBND NOP CHECK BOUNDS OF PROG DST TEMP AGAINST BOUNDS OF FREE CORE DLD TEMP4,I GET LFREE CMA,INA SUBTR FROM ADA TEMP LOW ADDR SSA ADDR>=LFREE? JMP CKBND,I NO, ERROR * LDA TEMP4 ADA D2 DLD A,I GET HFREE CMA SUBTR FROM ADA TEMP1 HI ADDR. SZA ADDR <= SSA HFREE? ISZ CKBND RETURN TO P+2 IF NO ERROR JMP CKBND,I RETURN TO P+1 IF ERROR * * ************************** * * REMER ISSUES "REM XXX" ERROR MESSAGE IF NEED TO REMOVE * A PROGRAM TO GET SPACE IN CORE, THEN SUSPENDS APLDR. * IF SPACE BELONGS TO THE SYSTEM, APLDR IS ABORTED. * LDB PNAME PROG WHICH MUST BE REMOVED * JSB REMER * * REMER NOP -REM XXXXX- ERROR SZB,RSS MEMORY ERROR. JMP ABS14 OUTSIDE AVAILABLE MEM LDA ERR01 GIVE -REM XXXXX- MESSAGE JSB ERROR LDA ERLUF LDB MD60 SSA REMOTE SCHEDULE? JMP ERSET YES, RETURN ERROR = -60 * JSB EXEC CALL EXEC DEF *+2 TO SUSPEND DEF D7 THE APLDR. JMP REMER,I RETURN * * ****************************** * * MD28 DEC -28 * B17 OCT 17 B1647 OCT 1647 * * D24 DEC 24 D27 DEC 27 D64 DEC 64 * BPMSK OCT 1777 C.. ASC 1,.. NAME CHANGE CHAR. * HI2 OCT 1000 ABSSZ NOP CURID NOP IDOFS NOP WORD1 NOP WORD2 NOP * * DO NOT CHANGE ORDER OF FOLLOWING * LMAIN NOP LMID NOP HMAIN NOP HMID NOP LBASE NOP LBID NOP HBASE NOP HBID NOP DMAIN DEF LMAIN ADDR OF HI/LO ADDR FOR MAIN DBASE DEF LBASE ADDR OF HI/LO ADDR FOR BASE PAGE * * DWRD2 DEF DWR2,I DWRD1 DEF *+1,I DUMMY ID ADDRESSES DEF PNM12 NAM12 DEF PNM50 NAM50/TYPE DEF RESML RESOL/MULT DEF HTIME HIGH BITS OF TIME DEF SPAR2 - SPARE - DEF PRGMN LOW MAIN DEF PRGBP LOW BASE DEF FWAC FWA COMMON DEF JMPXF JMP XFER * DWR2 DEF PNM34 NAM34 DEF PRIOR PR DEF SPAR1 - SPARE - DEF LTIME LOW BITS OF TIME DEF SEGMX SEGMX DEF PRGM2 HMAIN DEF PRGD2 HBASE DEF SZCOM SIZE COMMON DEF XFER XFER ADDR * HED PL: PROGRAM LIST * LIST PROGRAMS. * LIST EQU * IFZ ***** BEGIN DMS CODE *************** LDA PGPT SZA LIST PARTITIONS OPTION CHOSEN? JMP PTLST YES ******* END DMS CODE *************** XIF SPC 1 JSB SPACE PRINT LDA D19 HEADING. LDB HEAD1 JSB PRINT JSB SPACE * LDA DBLNK SET UP OUTPUT BUFFER. STA BUF STA BUF+7 * CLA CLEAR OUT BLANK ID SEG. STA TEMP5 COUNTER. * JSB STRID INIT ID SCANNER. LIST2 JSB SRCID SEARCH ID SEGS DEF ZERO JMP LIST7 EOF JMP LIST3 NON BLANK ID SEG ISZ TEMP5 BLANK ID SEG JMP LIST2 GO SEE NEXT ONE. * LIST3 STB TEMP1 SAVE NAME ADDR STA TEMP SAVE ID ADDR LDA 1 LDB LINE PUT PROG NAME INB INTO LINE JSB MVNAM * LDB TEMP ADB D6 GET PRIORITY LDA B,I WORD LDB .PR JSB CVDEC CONVERT AND STUFF * LDB TEMP ADB D22 GET PROG ADDRS. STB TEMP LDA M2 SET -2 TO GET STA TEMP4 MAIN AND BASE PAGE. LDB LINE INITIALIZE ADDR ADB D7 FOR NUMBER STUFFING. LIST4 LDA TEMP,I GET LOW ADDR. JSB CVOCT CONVERT TO ASCII. ISZ TEMP LDA TEMP,I GET HIGH ADDR. ADA M1 -1 TO GET REAL HIGH ADDR JSB CVOCT CONVERT TO ASCII. * ISZ TEMP ISZ TEMP4 JMP LIST4 GO GET NEXT PAIR OF ADDRS. * LDA D19 LDB LINE JSB PRINT PRINT PROG INFO. * JMP LIST2 GO GET NEXT ID SEG. * LIST7 LDA TEMP5 GET # OF, BLANK ID SEGS LDB DNM12 JSB CVDEC CONVERT AND STUFF INTO DUMMY PLACE LDA NAM50 PICK UP JUST 2 DIGITS STA MT.ID+2 AND MOVE TO MESSAGE LDA D11 LDB MT.ID JSB PRINT PRINT "# BLANK ID SEGMENTS" * DONE LDA D2 PRINT "DONE" LDB MSG1 AFTER THE "APLDR:" JMP STOP1 * ABORT LDA D4 PRINT "ABORTED" LDB ERR99 AFTER THE "APLDR:" STOP1 JSB STUFP STOP JSB DCLOS CLOSE INPUT FILE IF ANY DEF *+3 DEF DCB DEF ERR * LDA ERTYP STA MSG+6 MOVE ERROR VALUE FOR PARAMETER RETURN * RTRNP JSB PRTN RETURN ERROR CODE(,PGM NAME) DEF *+2 TO "FATHER" PGM ("EXECW") DEF MSG+6 * JSB EXEC CALL EXEC DEF *+2 TO END DEF D6 APLDR. * SPC 1 IFZ ***** BEGIN DMS CODE *************** HED PL: PARTITION LIST PTLST JSB SPACE PRINT HEADING FOR PTTN LIST LDA D16 LDB PTHED JSB PRINT JSB SPACE LDA DBLNK STA BUF+12 * CLA,INA STA PTTN# INITIALIZE FOR PTTN SCAN LDA $MATA STA CURPT SAVE ADDR OF CURR MAT ENTRY ADA M1 GET # PTTNS LDA A,I SZA,RSS CHECK - JUST IN CASE ...! JMP DONE MPY D6 ADA $MATA STA PTLWA SAVE ADDR OF LAST ENTRY * PNXPT LDA PTTN# LDB BUFAD CONVERT PTTN# AND PUT IN BUFFER JSB CVDEC LDA CURPT,I GET LINK OF MAT ENTRY SSA,RSS IS PTTN DEFINED? JMP CKRES YES, CHECK RESERVE STATUS * LDA PUNDF LDB .PTNS MVW D6 MOVE 'NOT DEFINED' MESSAGE LDA D9 JMP PRPTL AND THEN GO ON TO NEXT * CKRES LDB CURPT ADB D4 CALC ADDR OF RESERVE/SIZE WORD LDA B,I CLE,ELA (E) = RESERVE STATUS RAR AND B1777 KEEP 10 BITS #PAGES STA PT#PG LDB DBLNK USE '  ' SEZ OR LDB ASCR ' R' IF RESERVED STB PADDR INA ADD 1 TO #PAGES FOR B.P. LDB .PTNS JSB CVDEC CONVERT PTTN SIZE * LDA PADDR STA BUF+3 SET RESERVE STATUS * LDB CURPT ADB D3 ADDR OF START PAGE LDA B,I AND B1777 PAGE # IN LOW 10 BITS STA PAGE1 LDB .PTNF CONVERT FIRST PAGE# JSB CVDEC AND PUT IN MESSAGE * LDA PAGE1 ADA PT#PG LDB .PTNL CONVERT LAST PAGE# JSB CVDEC LDA DASH STA BUF+9 * LDB CURPT ADB D2 INDEX TO OWNER ID SEG LDA 1,I SZA,RSS EMPTY? JMP PTEMT YES * ADA D12 NO, INDEX TO NAME LDB .PTNP JSB MVNAM MOVE PROGRAM NAME PRPTN LDA D16 PRPTL LDB LINE JSB PRINT PRINT THE INFO ABOUT THIS PTTN * ISZ PTTN# LDA CURPT ADA D6 INDEX TO NEXT MAT ENTRY STA CURPT CPA PTLWA LAST ONE? JMP DONE YES, DONE JMP PNXPT NO, DUMP INFO ON NEXT PTTN * PTEMT LDA PTNON LDB .PTNP NO PROGRAM IN PTTN MVW D3 JMP PRPTN * D16 DEC 16 DASH ASC 1, - ******* END DMS CODE *************** XIF SPC 1 * HED SUBROUTINES FOR APLDR. * * ***************************** * * SPACE PRINTS A BLANK LINE ON LIST DEVICE. * JSB SPACE * * SPACE NOP PRINT BLANK CLA,INA LINE. LDB DFBLK (B)=ADDR OF BLANK JSB PRINT JMP SPACE,I * * ***************************** * * PRINT PRINTS A LINE ON LIST DEVICE. * LDA WORDS NO. OF WORDS * LDB ADDR ADDR OF TEXT * JSB PRINT * * PRINT NOP STA TEMP1 STB MADDR JSB DEXEC CALL REMOTE EXEC DEF *+6 TO PRINT DEF LNODE ON LIST DEVICE DEF D2I WRITE, NO-ABORT DEF LU MADDR NOP DEF TEMP1 JMP IOERR ERROR RETURN JMP PRINT,I * IOERR DST MSG+7 SAVE ASCII ERROR CODE LDA ERLUF SSA REMOTE CALL? JMP REMOT YES LDA DBLNK NO, LOCAL STA MSG+4 CLEAR MSG BUFR STA MSG+5 LDA D9 PRINT ERROR STA TEMP3 MESSAGE LOCALLY JSB DSPLA AND JMP ABORT ABORT. * REMOT LDA BIT15 INDICATE I/O ERROR STA MSG+6 JMP RTRNP RETURN PARAMETERS TO CALLER * * ******************************** * * STUFP STUFFS A MESSAGE WITH THE IDENTIFIER "APLDR:" AND * PRINTS IT ON CONSOLE. * LDA WORDS * LDB ADDR * JSB STUFP * * STUFP NOP STUFF MESSAGE INTO STB TEMP SPECIAL IDENTIFIER LDB D4 ADD 4 TO ADB A MESSAGE LENGTH STB TEMP3 FOR TOTAL LENGTH CMA,INA STA TEMP2 NEGATIVE COUNT. LDB MSG0 STFLP LDA TEMP,I STA B,I INB ISZ TEMP ISZ TEMP2 JMP STFLP JSB DSPLA DISPLAY MESSAGE JMP STUFP,I RETURN * * ****************************** * * DSPLA PRINTS A MESSAGE ON THE CONSOLE. THE MESSAGE * ADDRESS IS IN MSG AND THE WORD LENGTH IS IN TEMP3. * JSB DSPLA * * DSPLA NOP LDA ERLUF AND MSKW1 ISOLATE REMOTE FLAG & LU CPA BIT15 REMOTE, AND LU=0? JMP DSPLA,I YES, DON'T LOG THE MESSAGE RAL,CLE,SLA,ERA REMOTE? JMP RMESG YES * JSB IMESS NO DEF *+4 DEF D2 WRITE DEF MSG MESSAGE ON DEF TEMP3 OPERATOR CONSOLE. JMP DSPLA,I RETURN * RMESG ALF,ALF ALF STA MVNAM * JSB DEXEC WRITE MESSAGE TO REMOTE INITIATOR DEF *+6 }DEF LNODE DEF D2I WRITE, NO-ABORT DEF MVNAM REMOTE CONSOLE'S LU DEF MSG DEF TEMP3 JMP IOERR ERROR RETURN JMP DSPLA,I * * ****************************** * * MVNAM MOVES A PROGRAM NAME (3 WORDS) AND FILLS AN * ASCII BLANK IN THE DESTINATION NAME. * LDB DEST ADDR OF DESTINATION FOR NAME * LDA SORC ADDR OF SOURCE NAME * JSB MVNAM * * MVNAM NOP MOVE PROG NAME MVW D2 MOVE FIRST 4 CHARACTERS LDA 0,I GET 5TH CHARACTER AND LHALF PUT ASCII BLANK IOR B40 IN CHAR6 STA 1,I THEN MOVE JMP MVNAM,I RETURN * * ******************************* * * ERROR PUTS A PROGRAM NAME INTO AN ERROR MESSAGE * THEN PRINTS IT ON THE CONSOLE. * LDA ERRAD ADDR OF ERROR MESSAGE * LDB PNAME ADDR OF PROGRAM NAME * JSB ERROR * * ERROR NOP PUT NAME INTO STB TEMP5 ERR MSG THEN DLD A,I PRINT IT BUFAD EQU *+1 DST BUF MOVE ERR MSG TO OUTPUT AREA LDA TEMP5 GET ADDR OF NAME LDB LINE2 TO PUT INTO MSG JSB MVNAM LDA D9 STA TEMP3 SET LENGTH FOR JSB DSPLA DISPLAY JMP ERROR,I RETURN * * ***************************** * * STRID INITIALIZES ID SEGMENT SEARCH ROUTINE. * * STRID NOP INITIALIZE ID SCANNER. LDA KEYWD GET KEYWORD ADDRESS STA ADRID STORE AS ID ADDRESS. JMP STRID,I RETURN * * ***************************** * * SRCID FETCHS AN ID SEGMENT AND SEES IF MATCH/NO MATCH/BLANK. * JSB SRCID * DEF PNAME ADDR OF NAME TO SEARCH FOR * * * * A CONTAINS ADDR OF ID SEGMENT I * B CONTAINS ADDR OF NAME IN ID SEGMENT * SRCID NOP SEARCH ID SEGMENTS LDA SRCID,I FOR A CERTAIN NAME. STA TEMP1 SAVE ADDR OF NAME ISZ SRCID SET RETURN AT P+2 LDB ADRID,I PICK UP AN ID ADDR SZB,RSS IS IT END OF ID SEGS? JMP EOFID YES ADB D12 BUMP TO NAME IN ID STB TEMP2 SAVE ADDR OF NAME LDA B,I CPA TEMP1,I CHECK NAME 1,2 INB,RSS MATCHES. JMP NOMAT NO MATCH. ISZ TEMP1 LDA B,I CPA TEMP1,I CHECK NAME 3,4 INB,RSS MATCHES. JMP NOMAT NO MATCH. ISZ TEMP1 LDA B,I AND LHALF STA STRID SAVE TEMPORARILY LDA TEMP1,I AND LHALF CPA STRID COMPARE NAME 5 ISZ SRCID MATCHES, SET RETURN P+4 * NOMAT ISZ SRCID NO MATCH, RETURN P+3 LDA ADRID,I READY FOR RETURN. ISZ ADRID LDB TEMP2 EOFID JMP SRCID,I RETURN. * * ***************************** * SUBROUTINE: CVOCT (CONVERT 15-BIT BINARY NUMBER * TO 6-CHAR (LEADING BLANK) ASCII FORM OF OCTAL NUMBER * CALLING SEQUENCE: * (A)-BINARY VALUE FOR CONVERSION * (B)-ADDRESS OF 3-WORD AREA FOR * STORING ASCII/OCTAL CHARACTERS * (P) JSB CVOCT * (P+1) (RETURN): * (A) DESTROYED. * (B) ADDRESS OF NEXT STORAGE * CVOCT NOP CLE (E) = 0 FOR OCTAL JSB CVT CALL CONVERSION AND STUFF ASCII JMP CVOCT,I RETURN * * SUBROUTINE: CVDEC CONVERTS BINARY TO DECIMAL ASCII * CALLING SEQUENCE: SAME AS CVOCT * * CVDEC NOP CCE (E) = 1 FOR DECIMAL CONVERSION JSB CVT CONVERT AND STUFF ASCII JMP CVDEC,I RETURN * * CVT NOP JSB $LIBR GO PRIVILEGED NOP STB ADDR SAVE ADDR JSB $CVT3 CALL SYSTEM'S ROUTINE LDB ADDR MVW D3 MOVE 3 ASCII WORDS JSB $LIBX RETURN DEF CVT * ADDR NOP SKP * CONSTANTS AND STORAGE. * UNS M1 DEC -1 M2 DEC -2 * D1 OCT 1 D2 OCT 2 D2I OCT 100002 D4 OCT 4 D6 OCT 6 D7 OCT 7 B40 OCT 40 * D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D19 DEC 19 D22 DEC 22 * A00 ASC 1,00 MSKW1 OCT 101760 BIT15 OCT 100000 LHALF OCT 177400 ZERO OCT 0,0,0 ADRID NOP LU NOP ERR NOP MPFT# NOP MEMORY PROTECT FENCE INDEX VALUE * TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP TEMP5 NOP LEN NOP ERTYP NOP * ERLUF NOP 5-WORD TABLE. PGPT NOP DO NOT RE-ARRANGE! NAM12 NOP NOP NAM50 NOP * DCB BSS 4 SKP * MESSAGES FROM APLDR WITH LOVE. * * ERR01 DEF *+1 REMOVE PROGRAM TO BE OVERLAYED ASC 2,REM MD60 DEC -60 * ERR02 DEF *+1 DUPLICATE PROGRAM NAME ASC 2,DUP MD61 DEC -61 * ERR10 DEF *+1 CHECKSUM ERROR ASC 2,CKSM DEC -66 * ERR11 DEF *+1 COMMON AREA OVERFLOW ASC 2,COM DEC -67 * ERR12 DEF *+1 MEMORY OVERFLOW ASC 2,MEM DEC -68 * ERR13 DEF *+1 IDENTIFICATION RECORDS MISSING OR WRONG ASC 2,ID? DEC -65 * ERR99 DEF *+1 APLDR IS ABORTED ASC 4,ABORTED * * QUEST ASC 10, LOAD FILE'S NODE? __ * MSG1 DEF *+1 ASC 3,DONE- LDASH EQU *-1 "- " * * MT.ID DEF *+1 ASC 11, 00 BLANK ID SEGMENTS MD64 DEC -64 DBLNK EQU MT.ID+1 DOUBLE BLANK WORD DFBLK DEF DBLNK * HEAD1 DEF *+1 ASC 19, PROGRAM LIST: NAME,PRIORITY,MAIN,BASE * SPC 1 IFZ ***** BEGIN DMS CODE *************** ERR14 DEF *+1 NO FREE PARTITION ASC 2,PTN MD62 DEC -62 * ERR15 DEF *+1 PARTITION NOT LARGE ENOUGH ASC 2,PTSZ DEC -63 * PUNDF DEF *+1 ASC 6, NOT DEFINED * PTNON DEF *+1 ASC 3, PTHED DEF *+1 ASHFBC 16, PTN# R SIZE PAGES PROGRAM ASCR EQU PTHED+4 .PTNS DEF BUF+3 .PTNF DEF BUF+6 .PTNL DEF BUF+9 .PTNP DEF BUF+13 ******* END DMS CODE *************** XIF SPC 1 .PR DEF BUF+4 * DABSD DEF ABSBF+2 DDMID DEF DMYID LINE DEF MSG+4 LINE2 DEF MSG+6 MSG0 EQU LINE * MSG ASC 9, APLDR: BUF EQU MSG+4 * ABSBF BSS 64 * ABSCT EQU ABSBF ABSAD EQU ABSBF+1 ABSD1 EQU ABSBF+2 ABSD2 EQU ABSBF+3 * DMYID EQU ABSBF+35 SPAR2 EQU DMYID-5 JMPXF EQU DMYID-4 SPAR1 EQU DMYID-3 FWAC EQU DMYID-2 SZCOM EQU DMYID-1 PRIOR EQU DMYID+6 XFER EQU DMYID+7 XB EQU DMYID+10 PNM12 EQU DMYID+12 PNM34 EQU DMYID+13 PNM50 EQU DMYID+14 RESML EQU DMYID+17 HTIME EQU DMYID+18 LTIME EQU DMYID+19 MPFT EQU DMYID+21 PRGMN EQU DMYID+22 PRGM2 EQU DMYID+23 PRGBP EQU DMYID+24 PRGD2 EQU DMYID+25 SEGMX EQU DMYID+26 * * BSS 0 SIZE OF APLDR * * END APLDR 'H On 91740-18018 1840 S C0222 &3APLD              H0102 zmASMB,R,L,Z,C *USE 'ASMB,R,N' (RTE-M I/RTE-M II) OR 'ASMB,R,Z' (RTE-M III) IFN * BEGIN NON-DMS CODE *************** NAM APLDR,1,40 91740-16017 REV 1840 780721 *** END NON-DMS CODE *************** XIF IFZ ***** BEGIN DMS CODE *************** NAM APLDR,1,40 91740-16018 REV 1840 780721 ******* END DMS CODE *************** XIF UNL IFN HED APLDR (M2) 91740-16017 REV 1840 780721 (C) HEWLETT-PACKARD CO. XIF IFZ HED APLDR (M3) 91740-16018 REV 1840 780721 (C) HEWLETT-PACKARD CO. XIF LST * * IFN OPTION * NAME: APLDR * SOURCE: 91740-18017 * RELOC: 91740-16017 * PROGMR: EJW,CHW * * IFZ OPTION * NAME : APLDR * SOURCE: 91740-18018 * RELOC: 91740-16018 * PROGMR: EJW,CHW * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * SPC 1 EXT $LIBR,$LIBX,EXEC EXT $CVT3,$CON,PRTN,IMESS EXT DOPEN,DREAD,DLOCF,DCLOS,DEXEC EXT #LNOD,#CNOD,#NCNT SPC 1 IFN * BEGIN NON-DMS CODE *************** EXT .MVW *** END NON-DMS CODE *************** XIF IFZ ***** BEGIN DMS CODE *************** EXT $MATA,$ENDS ******* END DMS CODE *************** XIF SPC 1 * A EQU 0 B EQU 1 KEYWD EQU 1657B BPA1 EQU 1742B BPA2 EQU 1743B RTORG EQU 1746B RTCOM EQU 1747B AVMEM EQU 1751B BKLWA EQU 1777B SUP * * * APLDR IS SCHEDULED BY THE SYSTEM WHEN OPERATOR INPUTS * ONE OF THE FOLLOWING: * PL,LU#,OPT * (1)(0) * LO,PNAME,SC,DRN-LU,PTTN#,SIZE *  LU# * (4) (0) (0) (0) (0) * * APLDR IS SCHEDULED WITH THE FOLLOWING PARAMETERS: * P1 - REMOTE SCHEDULE[15]/ LU[4:9]/ FUNC[0:3] * P2 - #PAGES[10:14] / PTTN#[0:5] OR LIST OPTION * P3 - CHAR1[8:15] / CHAR2[0:7] (OR LU) * P4 - CHAR3[8:15] / CHAR4[0:7] * P5 - CHAR5[8:15] / CHAR6[0:7] * * WHERE FUNCTION CODE IS: * 0 - PROGRAM LIST * 1 - LOAD PROGRAM INTO MEMORY RESIDENT AREA * 2 - LOAD PROGRAM INTO A PARTITION * 3 - SAME AS #1 FROM REMOTE CPU * 4 - SAME AS #2 FROM REMOTE CPU SKP APLDR NOP LDA DPARM GET ADDR OF BUFFER STA TEMP1 SAVE TEMPORARILY LDA MD5 STA TEMP2 RMPLP LDA B,I GET PARAM FROM ID SEG STA TEMP1,I SAVE IN BUFFER INB ISZ TEMP1 ISZ TEMP2 JMP RMPLP * ADB D20 INDEX TO WORD 27 STB DFSC SAVE ADDR OF SECURITY CODE INB LDB 1,I GET CART.REF./ NEG.LU STB ICR SAVE IN 2 WORD ICR PARAMETER CLA STA ERTYP INITIALIZE ERROR INDICATOR LDA $CON,I GET CONSOLE LU AND B77 STA 1 LDA ERLUF RAL,CLE,ERA E=1 IF REMOTE SCHEDULE ALF,ALF ALF AND B77 SZA,RSS LIST LU SPECIFIED? LDA 1 NO, USE CONSOLE STA LU SAVE LU FOR LISTING IOR B400 STA RDLU CCB,SEZ SKIP IF LOCALLY SCHEDULED LDB #CNOD GET ORIGIN NODE FOR LIST STB LNODE SAVE LIST NODE * * LDA ERLUF GET FUNCTION FROM BITS 0-3 AND B17 STA FUNC SZA,RSS IS IT LIST? 0 JMP LIST * LDB #LNOD SEZ JMP LODCK JUMP IF REMOTELY SCHEDULED * LDB #NCNT SZB ANY DS-1000 NODES INITIALIZED? JMP CVNOD YES, ASK FOR LOAD NODE CCB NO, INDICATE LOCAL NODE JMP LODCK * CVNOD JSB IMESS ASK "LOAD FILE'S NODE?" DEF *+4 DEF D2 DEF QUEST DEF D10 * JSB IMESS GET RESPONSE DEF *+4 DEF D1 DEF ABSBF DEF MD5 * CMB,INB,SZB,RSS JMP CVNOD UNKNOWN RESPONSE STB TEMP1 SAVE BYTE COUNT CLA STA NODE LDB DABS RBL BYTE POINTER LBT GET FIRST CHAR. STA TEMP2 SAVE IT CPA ASCNG ="-"? LDA D48 YES CVNO1 ADA N58 SSA,RSS VALID NUMERIC? JMP CVNOD NO, RE-ASK QUESTION ADA D10 A HAS NUMERIC VALUE OF CHARACTER SSA VALID NUMERIC? JMP CVNOD NO, RE-ASK QUESTION ADA NODE ACCUMULATE NODAL ADDRESS ISZ TEMP1 MORE CHARACTERS? RSS YES JMP CVNO2 NO STB TEMP3 SAVE BYTE ADDRESS MPY D10 ACCUMULATED VALUE * 10 STA NODE LDB TEMP3 GET BYTE ADDRESS LBT GET NEXT CHARACTER JMP CVNO1 CVNO2 LDB TEMP2 CPB ASCNG 1ST = "-"? CMA,INA YES, NEGATE VALUE LDB 0 LDA FUNC * ENTER FOLLOWING CODE WITH FILE'S NODE IN B REGISTER LODCK CPA D1 IS IT A MEMORY RESIDENT LOAD? JMP LOAD IFZ ***** BEGIN DMS CODE ************** CPA D2 IS IT PARTITION LOAD? JMP LOAD ***** END DMS CODE ************** XIF * UNL * EXT DBUG *** DEBUGGING *** * JSB DBUG *** DEBUGGING *** * DEF *+1 *** DEBUGGING *** * NOP *** DEBUGGING *** NOP *** DEBUGGING *** LST * LDB MD64 FUNCTION CODE ERROR JMP ERSET ERROR * DPARM DEF ERLUF MD5 DEC -5 B77 OCT 77 B2300 OCT 2300 OPT OCT 2310 B400 OCT 400 D3 OCT 3 D20 DEC 20 D48 DEC 48 AN ASCII "0" N58 DEC -58 ASCNG OCT 55 NEG SIGN RDLU NOP FUNC NOP FUNCTION CODE LNODE NOP NODE FOR LIST OUR\TPUT ICR BSS 2 CR/NODE ARRAY NODE EQU ICR+1 FLFLG NOP FILE FLAG HED LO: LOAD PROGRAM * LOAD EQU * STB NODE SAVE NODE OF LOAD FILE SPC 1 IFZ ***** BEGIN DMS CODE *************** CLA STA PT#PG STA PTTN# ******* END DMS CODE *************** XIF SPC 1 JSB IHILO INIT HI,LO ADDRS LDA DWRD1 INIT SPEC REC STA WORD1 DUMMY ID ADDR. LDA DWRD2 STA WORD2 LDA RSS INITIALIZE SWITCH STA AB12D FOR SPEC. REC. CLA STA ABS12 STA ABSCT INDICATE NO ABS YET. * JSB STRID LOAD2 JSB SRCID FIND A BLANK DEF ZERO ID SEG. JMP LOADD NO BLANK ID SEG. JMP LOAD2 KEEP LOOKING. STA CURID GOT IT, SAVE ADDR. * LDA NAM12 GET FILE NAME. SZA,RSS GIVEN? LDA D4 NO, USE DEFAULT STA NAM12 SAVE FOR COMPARE STA FLFLG SET FILE FLAG AND B77 CPA NAM12 LEGAL LU? JMP STCNW YES. SET UP CONTROL WORD. LDB #NCNT IS THIS NODE INITIALIZED SZB FOR DS/1000 COMMUNICATIONS? JMP OPENF YES--GO OPEN FILE. JMP ABORT NO--ABORT. * STCNW IOR B2300 SET UP CONTROL WORD FOR STA CONWD BINARY ABSOLUTE DEXEC READS. CLB STB NAM12 CLEAR TO FORCE USE OF NAM RECORD NAME STB FLFLG CLEAR FILE FLAG. JMP NOTIN GO READ FROM LOCAL LU * OPENF JSB DOPEN OPEN THE ABS INPUT FILE DEF *+7 DEF DCB DEF ERR DEF NAM12 FILE NAME ADDR DEF OPT OPT = 2300B FOR ABS DFSC DEF * SECURITY CODE DEF ICR CR/NODE ARRAY SSA ANY ERRORS? JMP NOFIL NO SUCH FILE * JSB DLOCF GET FILE INFO DEF *+9 DEF DCB DEF ERR DEF TEMP1 DEF TEMP1 DEF TEMP1 DEF TEMP1 DEF TEMP1 DEF TEMP LDA TEMP SZA,RSS TYPE 0 FILE? STA NAM12 FORCE USE OF TRAILER RECORD SZA,RSS JMP ABS0 YES, SKIP DUP NAME CHECK NOW * JSB DUPID CHECK FOR DUPLICATE NAME DNM12 DEF NAM12 CHANGE TO ..NAME IF POSSIBLE * * READ AN ABSOLUTE RECORD * * ABS0 LDA FLFLG SZA IS INPUT FROM FILE? JMP READF YES, DO RFA READ * NOTIN JSB DEXEC NO--MAKE DEXEC CALLS. DEF *+6 DEF NODE DEF D1 DEF CONWD DEF ABSBF DEF D64 * AND B240 ISOLATE EOF/EOT BITS SZA EOF OR EOT? JMP LOAD5 YES JMP ABS0A NO, CONTINUE * READF JSB DREAD READ ABS RECORD DEF *+6 DEF DCB DEF ERR DABS DEF ABSBF DEF D64 DEF LEN LDB LEN CPB M1 EOF? JMP LOAD5 YES. SSA JMP ABSCK ANY ERROR, CHECKSUM ERROR * ABS0A LDA ABSCT GET WORD COUNT AND LHALF ALF,ALF SHIFT TO LOW BITS STA ABSSZ SAVE REC SIZE CMA,INA STA TEMP1 SAVE NEG COUNT LDA ABSAD GET ADDR, START CKSM. LDB DABSD ABS0B ADA 1,I ADD WORD TO RUNNING CKSUM INB ISZ TEMP1 BUMP COUNT JMP ABS0B REPEAT TIL DONE. * CPA 1,I COMPARE CKSMS JMP ABS1 MATCHES * ABSCK LDB ERR10 CHECKSUM ERROR- JMP ERPR4 ERR MSG THEN ABORT * NOFIL STA ERTYP RETURN ERROR CODE CMA,INA FMP ERROR CODE IN (A) LDB DABS GET DEF TO TEMP BUFFER JSB CVDEC CONVERT ERR CODE TO ASCII LDA LDASH IOR ABSAD FILL IN "- " STA ABSAD FOR " APLDR: -###" LDB DABS INB SET ADDR OF 4 CHARS LDA D2 JSB STUFP STUFF NAME & PRINT MESSAGE JMP ABORT ABORT APLDR * * FIND WHERE ABSOLUTE RECORD FITS IN CORE * * ABS1 \LDA ABSAD LDB ABSCT CPB HI2 ONLY 2 WORDS IN REC? RSS JMP ABS1A NO, CHECK NORMAL RECORD CPA D2 IS IT SPECIAL RECORD? JMP ABS12 YES ABS1A AND BPMSK IS IT BASE PAGE? CPA ABSAD JMP ABS2 YES, BASE PAGE. * SPC 1 IFZ ***** BEGIN DMS CODE *************** LDA FUNC CPA D2 LOAD PTTN? JMP PTMN YES, SET BOUNDS FOR ADDR CHECKS * ******* END DMS CODE *************** XIF SPC 1 LDA RTORG GET DEFAULT LOWEST ADDR STA TEMP LDA AVMEM GET DEFAULT HIGHEST ADDR STA TEMP1 LDA DMAIN GET PTRS TO MAIN HI/LO LDB D22 SET OFFSET FOR MAIN JMP ABS3 ADDRS IN ID SEG. * ABS2 EQU * SPC 1 IFZ ***** BEGIN DMS CODE *************** LDA FUNC CPA D2 LOAD PTTN? JMP PTBP YES, SET BOUNDS FOR ADDR CHECKS * ******* END DMS CODE *************** XIF SPC 1 LDA BPA1 GET DEFAULT LOWEST ADDR STA TEMP LDA BPA2 GET DEFAULT HIGHEST ADDR INA STA TEMP1 LDA DBASE GET PTRS TO BASE HI/LO LDB D24 SET OFFSET FOR BASE PAGE * * * * FIND THE HI AND LO MEMORY BOUNDS OF FREE CORE * * ABS3 STB IDOFS SAVE OFFSET TO GET ADDRS STA TEMP4 SAVE ADDR OF LFREE ADA D2 STA TEMP5 SAVE ADDR OF HFREE LDA TEMP CMA,INA CHECK IF ABS REC < FWABP USER LINKS ADA ABSAD SSA JMP ABS14 ABS < FWABP, ERROR LDA ABSAD ADA ABSSZ CMA,INA CHECK IF ABS REC > LWAM USER SPACE ADA TEMP1 SSA JMP ABS14 ABS > LWAM, ERROR LDA TEMP4,I CPA TEMP RSS ADDRS ALREADY SET? JMP ABS6 YES, SKIP SEARCH FOR HI/LO * JSB STRID INIT ID SEARCH. ABS4 JSB SRCID SEARCH EACH ID DEF ZERO EXCEPT BLANK ONES, JMP AB4S6 FOR THE HI/LO RSS RSS ADDRS WHICH JMP ABS4 DEFINE FREE CORE. CPA CURID IS THIS ID FOR PRG? JMP ABS4 YES, IGNORE THIS ID BOUNDS ADA IDOFS STA TEMP SET ADDR OF ID ADDR. * LDA B (B) STILL HAS ADDR OF NAME ADA D2 BUMP TO TYPE LDA A,I AND B17 GET TYPE FROM ID SEG CPA D1 MEMORY RESIDENT TYPE? RSS YES, CHECK ADDRS JMP ABS4 NO, IGNORE ID * CLA STA TEMP1 CLEAR OVERLAP FLAG * LDA TEMP,I GET ID LOW CMA,INA ADA ABSAD IS ID LOW > ABS REC? SSA JMP ABS4B LOW>ABS, CHECK MORE ISZ TEMP1 LOW<=ABS, CHECK IF OVERLAP JMP ABS5 BY CHECKING IF HI>=ABS * ABS4B LDA TEMP,I GET ID LOW AGAIN CMA SUBTRACT IT ADA TEMP5,I FROM LAST HFREE SSA AND JMP ABS5 IF IT IS LDA TEMP,I LOWER THEN KEEP IT DST TEMP5,I AS NEW HFREE * ABS5 ISZ TEMP LDA TEMP,I GET ID HIGH ADDR CMA,INA ADA ABSAD SSA,RSS ID HIGH < ADDR OF REC? JMP ABS5B HI<=ABS, CHECK MORE CLA,INA HI>ABS, MIGHT OVERLAP CPA TEMP1 DOES ABS OVERLAP? JMP ABS13 YES, GIVE OF ERR JMP ABS4 NO, IGNORE * ABS5B LDA TEMP,I GET ID HI CMA,INA SUBTRACT IT ADA TEMP4,I FROM LAST LFREE SSA,RSS AND IF IT IS JMP ABS4 LDA TEMP,I HIGHER, WE KEEP IT DST TEMP4,I AS NEW LFREE JMP ABS4 REPEAT FOR EACH ID * * * * ALREADY GOT MEMORY BOUNDS; SEE IF ABS CAN FIT * * ABS6 LDA ABSAD GET ADDR OF ABS REC LDB ABSSZ ADB A GET ADDR OF END OF ABS REC JSB CKBND CHECK BOUNDS WITH LFREE,HFREE JMP ABS13 ERROR. * * * * COPY ABS RECORD TO CORE IF WITHIN BOUNDS SPC 1 IFZ ***** BEGIN DMS CODE *************** LDA FUNC CPA D1 LOAD MEMORY RESIDENT? JMP LDMRP YES * LDA ABSAD NO, LOAD PARTITION RESIDENT JSB PGNO GET PAGE OF RECORD STA PAGE1 SZA,RSS RECORD FOR BASE PAGE? JMP BPMAP YES * LDA ABSAD ADA ABSSZ GET ADDR OF LAST WORD IN RECORD ADA M1 STA ABSEN SAVE ADDR OF LAST WORD IN REC JSB PGNO FIND PAGE OF THAT WORD STA B STB PAGE2 SAVE ENDING PAGE NUMBER CPB PAGE1 RECORD FITS WITHIN ONE PAGE? JMP SAMEP YES * BLF,BLF NO, CROSSES ONE PAGE RBL,RBL ASSUMING RECORD SIZE < 128 WORDS STB PADDR SAVE PAGE BOUNDARY ADDR LDA ABSAD CMA,INA ADA PADDR CALCULATE #WORDS ON THIS PAGE CAX STA WDS1 LDA PTFWA JSB PGNO STA B CMB,INB SUBTRACT PTTN PAGE# ADB PAGE1 TO GET #PAGES OFFSET ADB PTSPG AND OFFSET FROM FIRST PAGE OF PTTN INB (B) = PHYSICAL PAGE # AFTER COUNTING BP * LDA ABSAD CAY (Y) = LOGICAL ADDR FOR RECORD LDA DABSD (A) = ADDR OF RECORD IN INPUT BUFFER JSB MAPMV PERFORM MAPPING WORD MOVE * LDA PAGE2 SET UP TO MOVE SECOND PART ALF,ALF RAL,RAL CONVERT PAGE# TO ADDR CMA,INA SUBTRACT FROM END ADDR ADA ABSEN TO GET # WORDS INA CAX (X) = # WORDS TO MOVE LDA PTFWA JSB PGNO STA B CMB,INB SUBTRACT FIRST PAGE OF PTTN ADB PAGE2 TO GET #PAGES OFFSET ADB PTSPG ADD TO PTTN FIRST PAGE INB (B) = PAGE # LDA PADDR CAY (Y) = LOGICAL ADDR FOR RECORD LDA DABSD ADA WDS1 (A) = ADDR OF ABS REC IN INPUT BUFFER JSB MAPMV DO MAPPED MOVE JMP ABS0 GO READ MORE * SAMEP LDA PTFWA JSB PGwNO STA B CMB,INB ADB PAGE1 INB ADB PTSPG SAMEM LDA ABSSZ CAX (X) = #WORDS LDA ABSAD CAY (Y) = LOGICAL ADDR IN PTTN LDA DABSD (A) = ADDR OF REC IN INPUT BUFFER JSB MAPMV DO MAPPED MOVE JMP ABS0 GO READ MORE * BPMAP LDB PTSPG JMP SAMEM * * PGNO NOP CONVERT ADDR TO PAGE # AND B76K ALF,RAL RAL JMP PGNO,I RETURN (A)=PAGE # (B)=UNCHANGED * * (A) = ADDR OF ABS REC IN INPUT BUFFER * (B) = PAGE # OF PARTITION * (X) = # WORDS TO MOVE * (Y) = LOGICAL ADDR FOR ABS IN PTTN * MAPMV NOP MAPPED MOVE ROUTINE STA MAPFR TO MOVE ABS RECS TO PTTN CYA STA LOGSA SAVE LOGICAL ADDR CXA STA NWDS SAVE # WORDS * CLA,INA CAX (X) = 1 REGISTER TO SET UP LDA MAPPG (A) = MAP REGISTER # JSB $LIBR TURN OFF MEM PROT NOP SO WE CAN CHANGE MAP, ALSO MOVE TO BP XMS (B) = PTTN'S PAGE # LDA LOGSA CONVERT LOG ADDR TO PAGE# AND B76K CMA,INA ADA LOGSA OFFSET INTO PAGE ADA PAGBF MAKE LOGICAL ADDR FOR MAPPED MOVE STA B (B) = ADDR OF DUMMY BUFFER FOR MOVE LDA NWDS CAX (X) = #WORDS TO MOVE LDA MAPFR (A) = ADDR OF ABS REC IN BUFFER MWI MOVE WORDS VIA DUMMY BUFFER IN SYS MAP JSB $LIBX DEF MAPMV RETURN * MAPFR NOP ADDR OF ABS REC IN BUFFER LOGSA NOP LOGICAL ADDR OF ABS REC IN PTTN MAPPG DEC 31 LAST PAGE IN SYSTEM MAP PAGBF OCT 76000 ADDR OF DUMMY BUFFER FOR CROSS MAP STORE NWDS NOP #WORDS TO MOVE PADDR NOP PAGE BOUNDARY ADDR B1777 OCT 1777 B76K OCT 76000 C100K OCT 77777 CURPT NOP ADDR OF CURRENT PTTN OWNER PTR PAGE1 NOP PAGE # OF FIRST PART OF REC PAGE2 NOP PAGE # OF SECOND PAR1T OF REC ABSEN NOP ADDR OF LAST WORD IN REC PT#PG NOP #PAGES IN PTTN PTFWA NOP LOGICAL ADDR OF FIRST WORD IN MAIN OF PTTN PTLWA NOP LOGICAL ADDR OF LAST WORD IN MAIN OF PTTN PTSPG NOP PAGE # OF FIRST PAGE IN PTTN PTTN# NOP PTTN # WDS1 NOP # WORDS IN FIRST PAGE OF REC DCRID DEF CURID * * PTMN LDA DMAIN GET PTRS TO MAIN HI/LO RSS GO CHECK BOUNDS OF REC * PTBP LDA DBASE GET PTRS TO BP HI/LO STA TEMP4 JMP ABS6 GO CHECK BOUNDS OF REC * ******* END DMS CODE *************** XIF SPC 1 * * B240 OCT 240 CONWD NOP CONTROL WORD FOR EXEC CALL * * LDMRP LDA DABSD SET UP BUFFER LDB ABSAD SET UP CORE ADDR. JSB SYSET PUT INTO CORE. DEF ABSSZ JMP ABS0 GO GET ANOTHER RECORD * * * * PROCESS SPECIAL TRAILER RECORDS. * * ABS12 NOP RSS-ED AFTER SSGA SET UP. JMP AB12C AB12D RSS NOP-ED AFTER 1ST ENTRY.! JMP AB12B SO ONLY DO THIS ONCE. LDA MD28 STA TEMP1 SET COUNTER LDB DDMID TO CLEAR OUT CLA AB12A STA B,I SPECIAL RECORDS INB ISZ TEMP1 JMP AB12A STA AB12D NOP SWITCH * AB12B LDA WORD1 CPA DWRD2 ALL DONE ALREADY? JMP IDERR ERROR ON TRAILER RECORDS DLD ABSD1 PICK UP 2 DATA WORDS STA WORD1,I PUT 1ST INTO DUMMY ID. STB WORD2,I PUT 2ND INTO DUMMY ID. ISZ WORD1 BUMP DUMMY ID ISZ WORD2 LOCATIONS. JMP ABS0 * * MPFT# 0-PRP NO COM, 1-MRP NO COM, 2-RT COM, 3-XXX, 4-SSGA * AB12C LDA RSS STA ABS12 SET RSS IN THE SSGA SWITCH CLB,INB PREPARE FOR FUNC=1 FOR MRP LDA ABSD1 FIRST SPECIAL RECORD RAL,CLE,SLA,ERA SIGN BIT 0-MRP, 1-PRP INB NOT MEM RES, SET FUNC=2 FOR PTTN LOAD STA MPFT# HAS MPFT INDEX STB FUVNC OVERRIDE FUNC WITH ABS TYPE SEZ,RSS IS IT MEMORY RESIDENT? JMP ABS0 YES, READ NEXT RECORD SPC 1 IFN * BEGIN NON-DMS CODE *************** JMP IDERR M1 OR M2 DOESN'T ALLOW PRP *** END NON-DMS CODE *************** XIF IFZ ***** BEGIN DMS CODE *************** LDA PGPT JSB PGNO CMA,INA INA STA PT#PG SAVE NEG #PAGES-1 CCB ADB $MATA (B) = ADDR OF #PTTNS LDA PGPT AND B77 GET PTTN # SZA,RSS SPECIFIC PTTN# WANTED? JMP PTFND NO, FIND A FREE ONE * ADA M1 SAVE PTTN# - 1 STA PTTN# CMA ADA B,I SUBTRACT FROM #PTTNS CMA SSA,RSS ANY ERROR? JMP ER.PT YES, NO SUCH PTTN * LDA PTTN# 6*(PTTN#-1)+$MATA MPY D6 IS ADDR OF ENTRY IN MAP TABLE ADA $MATA ADA D2 INDEX TO ID OF PTTN OWNER LDB A,I SZB IS PTTN FREE? JMP PTTNO NO, PTTN IS OCCUPIED * LDB A ADB D2 INDEX TO RESERVED FLAG LDB B,I AND PTTN SIZE WORD RBL,CLE,ERB KEEP RESERVE FLAG IN (E) ADB PT#PG CCE,SSB PTTN LARGE ENOUGH? JMP PT.SZ * PTFR LDB PTTN# RBL,ERB SET SIGN BIT FROM (E) STB PTTN# FOR PARTITION REQUESTED STA CURPT SAVE CURR PTTN OWNER PTR LDB A ADB M2 BACK UP TO LINK WORD LDB B,I SSB IS PTTN DEFINED? JMP ER.PT NO. GIVE 'PTN' ERROR * INA LDB A,I STB PTSPG SAVE PTTN START PAGE # INA LDB A,I STB PT#PG SAVE #PAGES IN PTTN JMP PTADR NOW FIND HI ADDR OF PTTN * PTTNO ADB D12 INDEX B TO ADDR OF NAME LDA ERR14 PTTN OCCUPIED JSB ERROR -PTN XXXXX- ERROR MESSAGE LDB MD62 ERROR CODE JMP ERSET * PTFND CLA STA PTTN# INIT PTTN# TO 0 LDA B,I GET #PTTNS CMA,INA STA TEMP NEGATE FOR PTTN SCAN LDA $MATA ADA D2 LOOK AT EACH PTTN OWNER ID * PTNX LDB A,I SZB IS PTTN FREE? JMP PTNFD NO, PTTN NOT FOUND * LDB A ADB D2 INDEX TO SIZE WORD IN MAT ENTRY LDB B,I RBL,CLE,SLB,ERB JMP PTNFD RESERVED, KEEP LOOKING ADB PT#PG CLE,SSB,RSS ENOUGH PAGES IN THIS PTTN? JMP PTFR YES, USE THIS (E=0 TOO) * PTNFD ADA D6 NO, TRY NEXT ONE ISZ PTTN# BUMP PTTN# ISZ TEMP LOOKED AT ALL OF THEM YET? JMP PTNX NO, KEEP LOOKING * ER.PT LDB ERR14 NO SUCH PTTN OR NONE FREE JMP ERPR4 -PTN- ERROR AND ABORT * PT.SZ LDB ERR15 NOT ENOUGH PAGES IN PTTN JMP ERPR4 -PTSZ- ERROR AND ABORT * * PTADR LDA MPFT# SZA IS COMMON OR SSGA NEEDED? JMP USECM YES * LDA $ENDS GET LAST PAGE OF SYSTEM ALF,ALF RAL,RAL JMP STFWA SET UP FWA FOR USER * USECM LDA RTORG ADA RTCOM ADA B1777 AND B76K * STFWA STA PAGE1 SAVE TEMPORARILY CMA,INA LOWEST POSSIBLE LOGICAL ADDR STA B LDA ABSD2 AND B76K GET START PAGE OF USER ABS ADB A SSB USER ADDR < LOWEST LOGICAL ADDR? JMP ABS14 YES "ERR MEM" * STA PTFWA SAVE FWA OF PARTITION USER STA LMAIN SAVE FOR BOUNDS CHECK LDB PT#PG #PAGES - 1 IN PARTITION BLF,BLF RBL,RBL ADB PAGE1 COMPUTE LWA PTTN OR 77777 CMA,INA ADA B JSB PGNO STA PT#PG SAVE ACTUAL #PAGES USED ADB M1 SSB ADDR > 77777? LDB C100K YES, SET LWA = 77777 STB PTLWA LWA OF PARTITION AREA STB HMAIN SAVE FOR BOUNDS CHECK LDA D2 STA LBASE SET LOW BASE ADDR FOR BOUNDS CHECK LDA ԖNLHBPA2 INA STA HBASE SET HI BASE ADDR FOR BOUNDS CHECK JMP ABS0 DONE WITH 1ST SPECIAL, GO READ ABS * ******* END DMS CODE *************** XIF SPC 1 * * * * * REACHED END-OF-FILE ON PROGRAM INPUT * * LOAD5 LDB ABSCT CHECK IF ANY ABS SZB,RSS WAS READ YET. JMP IDERR ERROR IF NONE. LDA WORD1 SPEC REC MUST BE AT END CPA DWRD2 WAS IT ALL THERE? JMP LOAD6 YES. IDERR LDB ERR13 NO SPECIAL RECORDS, JMP ERPR4 PRINT ERR MSG/ABORT * LOAD6 DLD NAM12 NAME GIVEN IN COMMAND? SZA,RSS JMP LOAD7 NO, USE NAME FROM SPEC REC DST PNM12 YES, USE NAME FROM COMMAND LDA NAM50 GET 5TH CHAR AND LHALF STA PNM50 JMP LOAD8 WE DID DUP.CHECK ALREADY. LOAD7 JSB DUPID NAME GIVEN IN SPECIAL RECORD, DEF PNM12 CHECK FOR DUPLICATE. * LOAD8 LDB SZCOM GET SIZE OF COMMON SZB,RSS JMP LOD8A SKIP CHECK IF NO COMMON LDA FWAC GET FWA COMMON CMA SUBTR FROM ADA RTORG FWA REAL-TIME COMMON SSA,RSS FWACAVMEM? JMP LOADE YES, ERROR. * * LOD8A LDA DMAIN GET FREE AREA POINTERS STA TEMP4 FOR THE MAIN AREA DLD PRGMN GET FINAL BOUNDS OF PROG JSB CKBND SEE IF FIT. (IN CASE BSS USED) JMP LOADC ERROR. * LDA DBASE GET FREE AREA POINTERS STA TEMP4 FOR THE BASE PAGE AREA DLD PRGBP GET FINAL BOUNDS OF PROG JSB CKBND SEE IF FIT. (IN CASE BSS USED) JMP LOADC ERROR. * * * * MOVE ID SEGMENT TO SYSTEM AREA * * LOD8B LDA PNM50 GET 5TH CHAR AND LHALF MASK OUT TYPE INA SET TO TYPE 1 IF MEM.RES. STA PNM50 SPC 1 IFN * BEGIN NON-DMS CODE *************** LDA MPFT# ALF,ALF PUT MPFT INDEX IN BITS 7-9 RAR FOR ID SEG WORD 22 STA MPFT *** END NON-DMS CODE *************** XIF SPC 1 IFZ ***** BEGIN DMS CODE *************** LDB FUNC CPB D1 JMP LOD8C ISZ PNM50 SET TYPE 2 IF PTTN.RES. * LDA DCRID LDB CURPT SET NEW PTTN OWNER ID JSB SYSET DEF D1 LOD8C LDA PT#PG GET #PAGES IN PTTN ALF,RAR IOR MPFT# SET MPFT INDEX IN BITS 7-9 ALF,ALF RAR IOR PTTN# SET PTTN# (BITS 0-5) AND RP (BIT 15) STA MPFT PUT WORD IN ID SEG WORD 22 ******* END DMS CODE *************** XIF SPC 1 LDB CURID INB SET UP ID SEG B-REG TO STB XB POINT TO PARAMS AREA * LDA DDMID SET UP ADDR INA FOR DATA WORDS. LDB CURID SET ADDR FOR CORE LOC. INB DON'T MOVE LINKAGE WORD JSB SYSET MOVE ID SEG DEF D27 * LDB BUFAD SET UP DONE MESSAGE LDA MSG1 WITH PROGRAM NAME MVW D3 LDA DWRD1+1 GET ADDR OF PROG NAME JSB MVNAM MOVE NAME TO MSG LDA D10 STA TEMP"3 JSB DSPLA DISPLAY MESSAGE JMP STOP END APLDR. * * * ERROR RETURNS FROM LOADING SECTION * ABS13 JSB REMER MEMORY ERROR JSB IHILO CLEAR HI,LO ADDR JMP ABS1 GO RE-ESTABLISH HI/LO. * ABS14 LDB ERR12 ABSLWAM JMP ERPR4 SO ABORT * LOADC LDA B,I GET NAM12 FROM ID SZA,RSS PROG REMOVED YET? JMP LOD8B YES. JSB REMER FINAL MEMORY ERROR JMP LOD8A CHECK AGAIN * LOADD LDA DBLNK NO BLANK STA MT.ID+1 ID SEG LDA A00 SET ZEROES IN MSG STA MT.ID+2 LDA D11 LDB MT.ID SET UP MESSAGE ERMPR JSB STUFP PRINT MESSAGE LDB TEMP,I GET ERROR CODE FOR ANY CALLER * ERSET STB ERTYP SAVE ERROR CODE FOR "PRTN" CALL JMP ABORT THEN ABORT. * LOADE LDB ERR11 ABS USED TOO MUCH COMMON ERPR4 LDA D2 GET COUNT TO JMP ERMPR PRINT ERR MSG, ABORT SKP * **************************** * SUBROUTINES USED IN LOAD AND ABSOLUTE RECORD PROCESSORS * **************************** * * DUPID CHECKS FOR DUPLICATE PROGRAM NAME, ISSUES ERROR * MESSAGE AND ATTEMPTS TO CHANGE PROGRAM NAME. ABORTS IF * STILL NOT UNIQUE. * JSB DUPID * DEF PNAME * * DUPID NOP SEARCH FOR DUPLICATE LDA DUPID,I ID NAME. STA DUPNM SAVE ID NAME. ISZ DUPID DUP1 JSB STRID INIT ID SCANNER. DUP2 JSB SRCID FIND ID SEG DUPNM NOP WITH SAME NAME JMP DUPID,I NO DUPLICATE. JMP DUP2 REPEAT TIL DONE. LDA ERR02 DUPLIC. PROG ERR LDB DUPNM JSB ERROR LDB MD61 * LDA C.. CHANGE NAME ONLY ONCE CPA DUPNM,I IF NAME ALREADY CHANGED, JMP ERSET THEN ABORT, ERROR -61 STA DUPNM,I ELSE SEARCH AGAIN. CLB,INB STB ERTYP RETURN A +1 FOR RENAME JMP DUP1 * * **\ ************************** * * SYSET SETS WORDS INTO CORE LOCATIONS * LDA ADDFR * LDB ADDTO * JSB SYSET * DEF COUNT * * SYSET NOP SYSTEM WORD SETTER. JSB $LIBR TURN OFF THE NOP INTER. SYS. STA IHILO SAVE (A) TEMPORARILY LDA SYSET,I GET ADDR OF COUNT STA SYSCT SET COUNT ADDR LDA IHILO RESTORE (A) SPC 1 IFN * BEGIN NON-DMS CODE *************** JSB .MVW STORE WORD INTO SYS. DEF SYSCT NOP *** END NON-DMS CODE *************** XIF SPC 1 IFZ ***** BEGIN DMS CODE *************** MVW SYSCT ******* END DMS CODE *************** XIF SPC 1 SYSCT EQU *-2 ISZ SYSET JSB $LIBX RESTORE INTER SYS DEF SYSET AND RETURN. * * *********************************** * * IHILO INITIALIZES DEFAULT HIGH AND LOW BOUNDS * OF FREE MEMORY. * JSB IHILO * * IHILO NOP INITIALIZE HI/LO ADDRS LDA BKLWA TO FIND HIGHEST STA HMAIN AND LOWEST LDA B1647 STA HBASE ADDRS OF UNUSED LDA RTORG CORE WHICH MAY BE STA LMAIN USED FOR LOADING LDA BPA1 STA LBASE ABS PROGRAMS CLA STA LMID STA HMID STA LBID STA HBID JMP IHILO,I RETURN * * ******************************* * * CKBND CHECKS PROGRAM BOUNDS AGAINST THAT OF FREE * CORE (TEMP4 POINTS TO FREE CORE POINTERS). * LDA PRGLO LOW ADDR OF CORE USED * LDB PRGHI HI ADDR * JSB CKBND * * * CKBND NOP CHECK BOUNDS OF PROG DST TEMP AGAINST BOUNDS OF FREE CORE DLD TEMP4,I GET LFREE CMA,INA SUBTR FROM ADA TEMP LOW ADDR SSA ADDR>=LFREE? JMP CKBND,I NO, ERROR * LDA TEMP4 ADA D2 DLD A,I GET HFREE CMA SUBTR FROM ADA TEMP1 HI ADDR. SZA ADDR <= SSA HFREE? ISZ CKBND RETURN TO P+2 IF NO ERROR JMP CKBND,I RETURN TO P+1 IF ERROR * * ************************** * * REMER ISSUES "REM XXX" ERROR MESSAGE IF NEED TO REMOVE * A PROGRAM TO GET SPACE IN CORE, THEN SUSPENDS APLDR. * IF SPACE BELONGS TO THE SYSTEM, APLDR IS ABORTED. * LDB PNAME PROG WHICH MUST BE REMOVED * JSB REMER * * REMER NOP -REM XXXXX- ERROR SZB,RSS MEMORY ERROR. JMP ABS14 OUTSIDE AVAILABLE MEM LDA ERR01 GIVE -REM XXXXX- MESSAGE JSB ERROR LDA ERLUF LDB MD60 SSA REMOTE SCHEDULE? JMP ERSET YES, RETURN ERROR = -60 * JSB EXEC CALL EXEC DEF *+2 TO SUSPEND DEF D7 THE APLDR. JMP REMER,I RETURN * * ****************************** * * MD28 DEC -28 * B17 OCT 17 B1647 OCT 1647 * * D24 DEC 24 D27 DEC 27 D64 DEC 64 * BPMSK OCT 1777 C.. ASC 1,.. NAME CHANGE CHAR. * HI2 OCT 1000 ABSSZ NOP CURID NOP IDOFS NOP WORD1 NOP WORD2 NOP * * DO NOT CHANGE ORDER OF FOLLOWING * LMAIN NOP LMID NOP HMAIN NOP HMID NOP LBASE NOP LBID NOP HBASE NOP HBID NOP DMAIN DEF LMAIN ADDR OF HI/LO ADDR FOR MAIN DBASE DEF LBASE ADDR OF HI/LO ADDR FOR BASE PAGE * * DWRD2 DEF DWR2,I DWRD1 DEF *+1,I DUMMY ID ADDRESSES DEF PNM12 NAM12 DEF PNM50 NAM50/TYPE DEF RESML RESOL/MULT DEF HTIME HIGH BITS OF TIME DEF SPAR2 - SPARE - DEF PRGMN LOW MAIN DEF PRGBP LOW BASE DEF FWAC FWA COMMON DEF JMPXF JMP XFER * DWR2 DEF PNM34 NAM34 DEF PRIOR PR DEF SPAR1 - SPARE - DEF LTIME LOW BITS OF TIME DEF SEGMX SEGMX DEF PRGM2 HMAIN DEF PRGD2 HBASE DEF SZCOM SIZE COMMON DEF XFER XFER ADDR * HED PL: PROGRAM LIST * LIST PROGRAMS. * LIST EQU * IFZ ***** BEGIN DMS CODE *************** LDA PGPT SZA LIST PARTITIONS OPTION CHOSEN? JMP PTLST YES ******* END DMS CODE *************** XIF SPC 1 JSB SPACE PRINT LDA D19 HEADING. LDB HEAD1 JSB PRINT JSB SPACE * LDA DBLNK SET UP OUTPUT BUFFER. STA BUF STA BUF+7 * CLA CLEAR OUT BLANK ID SEG. STA TEMP5 COUNTER. * JSB STRID INIT ID SCANNER. LIST2 JSB SRCID SEARCH ID SEGS DEF ZERO JMP LIST7 EOF JMP LIST3 NON BLANK ID SEG ISZ TEMP5 BLANK ID SEG JMP LIST2 GO SEE NEXT ONE. * LIST3 STB TEMP1 SAVE NAME ADDR STA TEMP SAVE ID ADDR LDA 1 LDB LINE PUT PROG NAME INB INTO LINE JSB MVNAM * LDB TEMP ADB D6 GET PRIORITY LDA B,I WORD LDB .PR JSB CVDEC CONVERT AND STUFF * LDB TEMP ADB D22 GET PROG ADDRS. STB TEMP LDA M2 SET -2 TO GET STA TEMP4 MAIN AND BASE PAGE. LDB LINE INITIALIZE ADDR ADB D7 FOR NUMBER STUFFING. LIST4 LDA TEMP,I GET LOW ADDR. JSB CVOCT CONVERT TO ASCII. ISZ TEMP LDA TEMP,I GET HIGH ADDR. ADA M1 -1 TO GET REAL HIGH ADDR JSB CVOCT CONVERT TO ASCII. * ISZ TEMP ISZ TEMP4 JMP LIST4 GO GET NEXT PAIR OF ADDRS. * LDA D19 LDB LINE JSB PRINT PRINT PROG INFO. * JMP LIST2 GO GET NEXT ID SEG. * LIST7 LDA TEMP5 GET # OF, BLANK ID SEGS LDB DNM12 JSB CVDEC CONVERT AND STUFF INTO DUMMY PLACE LDA NAM50 PICK UP JUST 2 DIGITS STA MT.ID+2 AND MOVE TO MESSAGE LDA D11 LDB MT.ID JSB PRINT PRINT "# BLANK ID SEGMENTS" * DONE LDA D2 PRINT "DONE" LDB MSG1 AFTER THE "APLDR:" JMP STOP1 * ABORT LDA D4 PRINT "ABORTED" LDB ERR99 AFTER THE "APLDR:" STOP1 JSB STUFP STOP JSB DCLOS CLOSE INPUT FILE IF ANY DEF *+3 DEF DCB DEF ERR * LDA ERTYP STA MSG+6 MOVE ERROR VALUE FOR PARAMETER RETURN * RTRNP JSB PRTN RETURN ERROR CODE(,PGM NAME) DEF *+2 TO "FATHER" PGM ("EXECW") DEF MSG+6 * JSB EXEC CALL EXEC DEF *+2 TO END DEF D6 APLDR. * SPC 1 IFZ ***** BEGIN DMS CODE *************** HED PL: PARTITION LIST PTLST JSB SPACE PRINT HEADING FOR PTTN LIST LDA D16 LDB PTHED JSB PRINT JSB SPACE LDA DBLNK STA BUF+12 * CLA,INA STA PTTN# INITIALIZE FOR PTTN SCAN LDA $MATA STA CURPT SAVE ADDR OF CURR MAT ENTRY ADA M1 GET # PTTNS LDA A,I SZA,RSS CHECK - JUST IN CASE ...! JMP DONE MPY D6 ADA $MATA STA PTLWA SAVE ADDR OF LAST ENTRY * PNXPT LDA PTTN# LDB BUFAD CONVERT PTTN# AND PUT IN BUFFER JSB CVDEC LDA CURPT,I GET LINK OF MAT ENTRY SSA,RSS IS PTTN DEFINED? JMP CKRES YES, CHECK RESERVE STATUS * LDA PUNDF LDB .PTNS MVW D6 MOVE 'NOT DEFINED' MESSAGE LDA D9 JMP PRPTL AND THEN GO ON TO NEXT * CKRES LDB CURPT ADB D4 CALC ADDR OF RESERVE/SIZE WORD LDA B,I CLE,ELA (E) = RESERVE STATUS RAR AND B1777 KEEP 10 BITS #PAGES STA PT#PG LDB DBLNK USE '  ' SEZ OR LDB ASCR ' R' IF RESERVED STB PADDR INA ADD 1 TO #PAGES FOR B.P. LDB .PTNS JSB CVDEC CONVERT PTTN SIZE * LDA PADDR STA BUF+3 SET RESERVE STATUS * LDB CURPT ADB D3 ADDR OF START PAGE LDA B,I AND B1777 PAGE # IN LOW 10 BITS STA PAGE1 LDB .PTNF CONVERT FIRST PAGE# JSB CVDEC AND PUT IN MESSAGE * LDA PAGE1 ADA PT#PG LDB .PTNL CONVERT LAST PAGE# JSB CVDEC LDA DASH STA BUF+9 * LDB CURPT ADB D2 INDEX TO OWNER ID SEG LDA 1,I SZA,RSS EMPTY? JMP PTEMT YES * ADA D12 NO, INDEX TO NAME LDB .PTNP JSB MVNAM MOVE PROGRAM NAME PRPTN LDA D16 PRPTL LDB LINE JSB PRINT PRINT THE INFO ABOUT THIS PTTN * ISZ PTTN# LDA CURPT ADA D6 INDEX TO NEXT MAT ENTRY STA CURPT CPA PTLWA LAST ONE? JMP DONE YES, DONE JMP PNXPT NO, DUMP INFO ON NEXT PTTN * PTEMT LDA PTNON LDB .PTNP NO PROGRAM IN PTTN MVW D3 JMP PRPTN * D16 DEC 16 DASH ASC 1, - ******* END DMS CODE *************** XIF SPC 1 * HED SUBROUTINES FOR APLDR. * * ***************************** * * SPACE PRINTS A BLANK LINE ON LIST DEVICE. * JSB SPACE * * SPACE NOP PRINT BLANK CLA,INA LINE. LDB DFBLK (B)=ADDR OF BLANK JSB PRINT JMP SPACE,I * * ***************************** * * PRINT PRINTS A LINE ON LIST DEVICE. * LDA WORDS NO. OF WORDS * LDB ADDR ADDR OF TEXT * JSB PRINT * * PRINT NOP STA TEMP1 STB MADDR JSB DEXEC CALL REMOTE EXEC DEF *+6 TO PRINT DEF LNODE ON LIST DEVICE DEF D2I WRITE, NO-ABORT DEF LU MADDR NOP DEF TEMP1 JMP IOERR ERROR RETURN JMP PRINT,I * IOERR DST MSG+7 SAVE ASCII ERROR CODE LDA ERLUF SSA REMOTE CALL? JMP REMOT YES LDA DBLNK NO, LOCAL STA MSG+4 CLEAR MSG BUFR STA MSG+5 LDA D9 PRINT ERROR STA TEMP3 MESSAGE LOCALLY JSB DSPLA AND JMP ABORT ABORT. * REMOT LDA BIT15 INDICATE I/O ERROR STA MSG+6 JMP RTRNP RETURN PARAMETERS TO CALLER * * ******************************** * * STUFP STUFFS A MESSAGE WITH THE IDENTIFIER "APLDR:" AND * PRINTS IT ON CONSOLE. * LDA WORDS * LDB ADDR * JSB STUFP * * STUFP NOP STUFF MESSAGE INTO STB TEMP SPECIAL IDENTIFIER LDB D4 ADD 4 TO ADB A MESSAGE LENGTH STB TEMP3 FOR TOTAL LENGTH CMA,INA STA TEMP2 NEGATIVE COUNT. LDB MSG0 STFLP LDA TEMP,I STA B,I INB ISZ TEMP ISZ TEMP2 JMP STFLP JSB DSPLA DISPLAY MESSAGE JMP STUFP,I RETURN * * ****************************** * * DSPLA PRINTS A MESSAGE ON THE CONSOLE. THE MESSAGE * ADDRESS IS IN MSG AND THE WORD LENGTH IS IN TEMP3. * JSB DSPLA * * DSPLA NOP LDA ERLUF AND MSKW1 ISOLATE REMOTE FLAG & LU CPA BIT15 REMOTE, AND LU=0? JMP DSPLA,I YES, DON'T LOG THE MESSAGE RAL,CLE,SLA,ERA REMOTE? JMP RMESG YES * JSB IMESS NO DEF *+4 DEF D2 WRITE DEF MSG MESSAGE ON DEF TEMP3 OPERATOR CONSOLE. JMP DSPLA,I RETURN * RMESG ALF,ALF ALF STA MVNAM * JSB DEXEC WRITE MESSAGE TO REMOTE INITIATOR DEF *+6 }DEF LNODE DEF D2I WRITE, NO-ABORT DEF MVNAM REMOTE CONSOLE'S LU DEF MSG DEF TEMP3 JMP IOERR ERROR RETURN JMP DSPLA,I * * ****************************** * * MVNAM MOVES A PROGRAM NAME (3 WORDS) AND FILLS AN * ASCII BLANK IN THE DESTINATION NAME. * LDB DEST ADDR OF DESTINATION FOR NAME * LDA SORC ADDR OF SOURCE NAME * JSB MVNAM * * MVNAM NOP MOVE PROG NAME MVW D2 MOVE FIRST 4 CHARACTERS LDA 0,I GET 5TH CHARACTER AND LHALF PUT ASCII BLANK IOR B40 IN CHAR6 STA 1,I THEN MOVE JMP MVNAM,I RETURN * * ******************************* * * ERROR PUTS A PROGRAM NAME INTO AN ERROR MESSAGE * THEN PRINTS IT ON THE CONSOLE. * LDA ERRAD ADDR OF ERROR MESSAGE * LDB PNAME ADDR OF PROGRAM NAME * JSB ERROR * * ERROR NOP PUT NAME INTO STB TEMP5 ERR MSG THEN DLD A,I PRINT IT BUFAD EQU *+1 DST BUF MOVE ERR MSG TO OUTPUT AREA LDA TEMP5 GET ADDR OF NAME LDB LINE2 TO PUT INTO MSG JSB MVNAM LDA D9 STA TEMP3 SET LENGTH FOR JSB DSPLA DISPLAY JMP ERROR,I RETURN * * ***************************** * * STRID INITIALIZES ID SEGMENT SEARCH ROUTINE. * * STRID NOP INITIALIZE ID SCANNER. LDA KEYWD GET KEYWORD ADDRESS STA ADRID STORE AS ID ADDRESS. JMP STRID,I RETURN * * ***************************** * * SRCID FETCHS AN ID SEGMENT AND SEES IF MATCH/NO MATCH/BLANK. * JSB SRCID * DEF PNAME ADDR OF NAME TO SEARCH FOR * * * * A CONTAINS ADDR OF ID SEGMENT I * B CONTAINS ADDR OF NAME IN ID SEGMENT * SRCID NOP SEARCH ID SEGMENTS LDA SRCID,I FOR A CERTAIN NAME. STA TEMP1 SAVE ADDR OF NAME ISZ SRCID SET RETURN AT P+2 LDB ADRID,I PICK UP AN ID ADDR SZB,RSS IS IT END OF ID SEGS? JMP EOFID YES ADB D12 BUMP TO NAME IN ID STB TEMP2 SAVE ADDR OF NAME LDA B,I CPA TEMP1,I CHECK NAME 1,2 INB,RSS MATCHES. JMP NOMAT NO MATCH. ISZ TEMP1 LDA B,I CPA TEMP1,I CHECK NAME 3,4 INB,RSS MATCHES. JMP NOMAT NO MATCH. ISZ TEMP1 LDA B,I AND LHALF STA STRID SAVE TEMPORARILY LDA TEMP1,I AND LHALF CPA STRID COMPARE NAME 5 ISZ SRCID MATCHES, SET RETURN P+4 * NOMAT ISZ SRCID NO MATCH, RETURN P+3 LDA ADRID,I READY FOR RETURN. ISZ ADRID LDB TEMP2 EOFID JMP SRCID,I RETURN. * * ***************************** * SUBROUTINE: CVOCT (CONVERT 15-BIT BINARY NUMBER * TO 6-CHAR (LEADING BLANK) ASCII FORM OF OCTAL NUMBER * CALLING SEQUENCE: * (A)-BINARY VALUE FOR CONVERSION * (B)-ADDRESS OF 3-WORD AREA FOR * STORING ASCII/OCTAL CHARACTERS * (P) JSB CVOCT * (P+1) (RETURN): * (A) DESTROYED. * (B) ADDRESS OF NEXT STORAGE * CVOCT NOP CLE (E) = 0 FOR OCTAL JSB CVT CALL CONVERSION AND STUFF ASCII JMP CVOCT,I RETURN * * SUBROUTINE: CVDEC CONVERTS BINARY TO DECIMAL ASCII * CALLING SEQUENCE: SAME AS CVOCT * * CVDEC NOP CCE (E) = 1 FOR DECIMAL CONVERSION JSB CVT CONVERT AND STUFF ASCII JMP CVDEC,I RETURN * * CVT NOP JSB $LIBR GO PRIVILEGED NOP STB ADDR SAVE ADDR JSB $CVT3 CALL SYSTEM'S ROUTINE LDB ADDR MVW D3 MOVE 3 ASCII WORDS JSB $LIBX RETURN DEF CVT * ADDR NOP SKP * CONSTANTS AND STORAGE. * UNS M1 DEC -1 M2 DEC -2 * D1 OCT 1 D2 OCT 2 D2I OCT 100002 D4 OCT 4 D6 OCT 6 D7 OCT 7 B40 OCT 40 * D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D19 DEC 19 D22 DEC 22 * A00 ASC 1,00 MSKW1 OCT 101760 BIT15 OCT 100000 LHALF OCT 177400 ZERO OCT 0,0,0 ADRID NOP LU NOP ERR NOP MPFT# NOP MEMORY PROTECT FENCE INDEX VALUE * TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP TEMP5 NOP LEN NOP ERTYP NOP * ERLUF NOP 5-WORD TABLE. PGPT NOP DO NOT RE-ARRANGE! NAM12 NOP NOP NAM50 NOP * DCB BSS 4 SKP * MESSAGES FROM APLDR WITH LOVE. * * ERR01 DEF *+1 REMOVE PROGRAM TO BE OVERLAYED ASC 2,REM MD60 DEC -60 * ERR02 DEF *+1 DUPLICATE PROGRAM NAME ASC 2,DUP MD61 DEC -61 * ERR10 DEF *+1 CHECKSUM ERROR ASC 2,CKSM DEC -66 * ERR11 DEF *+1 COMMON AREA OVERFLOW ASC 2,COM DEC -67 * ERR12 DEF *+1 MEMORY OVERFLOW ASC 2,MEM DEC -68 * ERR13 DEF *+1 IDENTIFICATION RECORDS MISSING OR WRONG ASC 2,ID? DEC -65 * ERR99 DEF *+1 APLDR IS ABORTED ASC 4,ABORTED * * QUEST ASC 10, LOAD FILE'S NODE? __ * MSG1 DEF *+1 ASC 3,DONE- LDASH EQU *-1 "- " * * MT.ID DEF *+1 ASC 11, 00 BLANK ID SEGMENTS MD64 DEC -64 DBLNK EQU MT.ID+1 DOUBLE BLANK WORD DFBLK DEF DBLNK * HEAD1 DEF *+1 ASC 19, PROGRAM LIST: NAME,PRIORITY,MAIN,BASE * SPC 1 IFZ ***** BEGIN DMS CODE *************** ERR14 DEF *+1 NO FREE PARTITION ASC 2,PTN MD62 DEC -62 * ERR15 DEF *+1 PARTITION NOT LARGE ENOUGH ASC 2,PTSZ DEC -63 * PUNDF DEF *+1 ASC 6, NOT DEFINED * PTNON DEF *+1 ASC 3, PTHED DEF *+1 ASHFBC 16, PTN# R SIZE PAGES PROGRAM ASCR EQU PTHED+4 .PTNS DEF BUF+3 .PTNF DEF BUF+6 .PTNL DEF BUF+9 .PTNP DEF BUF+13 ******* END DMS CODE *************** XIF SPC 1 .PR DEF BUF+4 * DABSD DEF ABSBF+2 DDMID DEF DMYID LINE DEF MSG+4 LINE2 DEF MSG+6 MSG0 EQU LINE * MSG ASC 9, APLDR: BUF EQU MSG+4 * ABSBF BSS 64 * ABSCT EQU ABSBF ABSAD EQU ABSBF+1 ABSD1 EQU ABSBF+2 ABSD2 EQU ABSBF+3 * DMYID EQU ABSBF+35 SPAR2 EQU DMYID-5 JMPXF EQU DMYID-4 SPAR1 EQU DMYID-3 FWAC EQU DMYID-2 SZCOM EQU DMYID-1 PRIOR EQU DMYID+6 XFER EQU DMYID+7 XB EQU DMYID+10 PNM12 EQU DMYID+12 PNM34 EQU DMYID+13 PNM50 EQU DMYID+14 RESML EQU DMYID+17 HTIME EQU DMYID+18 LTIME EQU DMYID+19 MPFT EQU DMYID+21 PRGMN EQU DMYID+22 PRGM2 EQU DMYID+23 PRGBP EQU DMYID+24 PRGD2 EQU DMYID+25 SEGMX EQU DMYID+26 * * BSS 0 SIZE OF APLDR * * END APLDR 'H Qp 91740-18019 1805 S C1022 DS/1000 MODULE: LOADR              H0110 afASMB,L,C,Z *LOADR USE 'ASMB,R,N' (RTE-II) OR 'ASMB,R,Z' (RTE-III) * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * HED RELOCATING LOADR FOR RTE-III <1805> NAM LOADR,3,90 91740-16019 REV 1805 780120 ENT LOADR EXT $ENDS,$MATA,NAMR,$SGAF EXT REIO,OPEN,CLOSE,READF,$CVT3 EXT LOCF,APOSN,WRITF,CREAT EXT IFBRK ******* END MEU CODE ********** XIF * UNL IFN ******* BEGIN NON-MEU CODE **** LST * NAME: RTE LOADER * SOURCE: 92001-18002 * RELOC: 92001-16002 * PGMR: P. KAPOOR, E. WONG, M. MANLEY(CMM) * UNL ******* END NON-MEU CODE ****** XIF IFZ ******* BEGIN MEU CODE ******** LST * NAME: RTE LOADER * SOURCE: 92001-18002 * RELOC: 92060-16004 * PGMR: M. MANLEY (CMM) * UNL ******* END MEU CODE ********** XIF LST SUP EXT EXEC,$LIBR,$LIBX,PRTN * SKP * LIST OF LOADR ERROR DIAGNOSTICS * * * = MODULE NAME PRINTED BEFORE DIAGNOSTIC * **= ENTRY POINT NAME PRINTED AFTER MODULE NAME * * 01 * - CHECKSUM ERROR * 02 * - ILLEGAL RECORD * 03 * - MEMORY OVERFLOW (YOUR PROGRAM IS TOO LARGE) * 04 * - BP LINKAGE OVERFLOW (TRY REARRANGING THE SUBROUTINES) * 05 * - SYMBOL TABLE OVERFLOW (GIVE THIS LOADR MORE ROOM) * 06 * - COMMON BLOCK ERROR (WAS THE 1ST COM DECL THE LARGEST ?) * 07 * ** - DUPLICATE ENTRY POINTS (YOU PUT THE SUBROUTINE IN TWICE) * 08 - NO TRANSFER ADDR (ONLY SUBROUTINES WERE LOADED WHERE'S THE MAIN?) * 09 * - RECORD OUT OF SEQUENCE (DID YOU POSITION THE TAPE CORRECTLY ?) * 10 - ILLEGAL APARAMETER IN RU STATEMENT. * 11 - ATTEMPT TO REPLACE A CORE RESIDENT PROG (A MEM RES PROG W/SAME NAME) * 14 * - ASMB PRODUCED ILLEGAL RELOCATABLE . A DBL REC * WAS PRODUCED REFERING TO AN EXTERNAL WHICH WAS NOT DEFINED. * IE, I SHOULD HAVE FOUND IT IN MY SYMBOL TABLE BUT I DIDN'T * 16 - ILLEGAL PARTITION NUMBER OR CORRUPT MAP TABLE. * 17 - NUMBER OF PAGES REQUIRED EXCEEDS AMOUNT IN PTTN. * 18 - TOTAL NUMBER OF PAGES REQUIRED EXCEEDS 32. * 23 - ATTEMPT TO PLACE A SEGMENTED PROGRAM IN A REAL TIME PARTITION. * 24 - ATTEMPT TO ACCESS AN SSGA ENTRY POINT BUT SSGA ACCESS * WAS NOT DECLARED AT THE BEGINING OF THE LOAD. * 25 - ATTEMPT TO PURGE A PROGRAM UNDER BATCH OR ATTEMPT TO * USE THE LI OR PU COMMANDS WITHIN A TRANSFER FILE. * LI & PU MAY BE USED IN THE INTERACTIVE MODE BUT * WILL NOT BE HONORED WHEN ENCOUNTERED WITHIN A FILE. * SKP * SPC 1 SKP * * LOADING OF PROGRAMS WITH THE RELOCATABLE LOADER CONSISTS OF * (1) LOADING PROGRAMS FROM THE INPUT UNIT * (2) LOADING PROGRAMS FROM THE PROG LIB * THE FIRST PROGRAM WITH A PRIMARY ENTRY POINT IS CONSIDERED * TO BE THE MAIN PROGRAM. AT LEAST ONE MAIN PROG MUST BE LOADED * BEFORE THE LIBRARY IS LOADED. LINKAGES FROM THE MAIN PROG * TO ALL USER AND LIB SUBROUTINES IS DETERMINED BY ENTRIES * IN THE LOADER SYMBOL TABLE (LST). * * EACH LST ENTRY CONSISTS OF 5 WORDS: * * ************************************************************* * * NAME - * NAME - * NAME - *ENT/EXT FLG* * * * CHARS 1,2 * CHARS 3,4 * CHAR 5/ * 'V' BIT * * * * * * ORDINAL * ENT TYPE * SYMB VALU * * ************************************************************* * * EACH WORD IN THE LST ENTRY CONSISTS OF THE FOLLOWING: * * WORD 1: SYMBOL NAME - ASCII CHARACTERS 1,2 * BIT 15 = 1 MEANS THE ENTRY HAS BEEN LISTED * BIT 15 = 0 MEANS THE ENTRY HAS NOT BEEN LISTED * WORD 2: SYMBOL NAME - ASCII CHARACTERS 3,4 * WORD 3: (8-15) SYMBOL NAME - ASCII CHARACTER 5 * (0-7) EXT ORDINAL * WORD 4: ORGANIZED INTO FOLLOWING THREE FIELDS - * STATUS FIELD (BITS 0 TO 6) - INDICATES STATUS * OF THE SYMBOL AS FOLLOWS: * 0 - ENT SYMBOL READ DURING LIB SCAN (COULD BE * FROM RES LIB, RELOC LIB ON DISC OR USER * GIVEN LIB). * 1 - ENT SYMBOL READ DURING FORCE LOADING OF USER * PROGRAM. * 2 - EXT ENTRY (UNDEFINED SYMBOL). * NOTE THAT STATUS OF A SYMBOL CHANGES FROM 2 TO * 0 OR 1 AS IT BECOMES DEFINED. * 'V' BIT (BIT 7) - WHEN SET THEN WORD 5 HAS THE * THE ADDRESS OF THE BASE PAGE LINK, ELSE WORD 5 * HAS SYMBOL VALUE (VALUE OF ENT AFTER RELOCATIONA). * ENT TYPE (BITS 8 TO 15) - IS 0 FOR EXT ENTRY AND * 0 TO 4 (RELOCATION INDICATOR) FOR ENT SYMBOL. * WORD 5: BASE PAGE LINKAGE ADDR IF 'V' BIT IS SET * ELSE SYMBOL VALUE . * * INITIALLY, THE LOADER SYMBOL TABLE CONSISTS OF THE ENTRY POINTS * FOR THE LIBRARY ROUTINES IN THE RESIDENT LIB AND THE * SYSTEM ENTRY POINTS (TYPE 1 ENT NOT PICKED UP). AS EACH * USER PROGRAM IS LOADED AND ENT/EXT RECS PROCESSED, SYMBOLS * ARE ADDED TO THE LIST. WHEN ALL USER PROGS HAVE * BEEN LOADED, AND LIB LOADING IS INITIATED, THE LOADER * SCANS LST FOR UNDEFINED SYMBOLS AND MATCHES THESE WITH THE * ENT SYMBOLS IN LIBRARY DIRECTORY. ON FINDING A MATCH, THE * LOADER LOADS THE CORRESPONDING LIB PROG AND ADDS ITS * ENT'S AND EXT'S TO THE LST. THIS PROCEDURE CONTINUES UNTIL ALL * UNDEFINED SYMBOLS HAVE BEEN DEFINED OR A COMPLETE PASS THROUGH * THE DIRECTORY FAILED TO RESOLVE ANY EXTERNAL . * FOR MAIN/SEGMENT LOAD, IF UNRESOLVED SYMBOLS STILL REMAIN * THEN THE ENTIRE LG AREA IS SCANNED FOLLOWING WHICH THE DISC * LIBRARY DIRECTORY IS AGAIN SCANNED - IF NEED BE. IF ANY * SYMBOL STILL REMAINS UNDEFINEڪD AFTER THIS THEN IT LISTED * - EXCEPT FOR UNDEFINED SYMBOLS IN MAIN - AND THE LOADER * SUSPENDS. * IF THE LOADER IS OPERATING UNDER BATCH, ALL OUTPUT * THAT NORMALLY COMES ON THE SYSTEM CONSOLE GETS LISTED * ON LU 6. * * THE LST IS ORIGINED AT THE UPPER END OF THE LOADER AND EXTENDS * TOWARD HIGH CORE. AN IRRECOVERABLE ERROR IS DETECTED IF LST * EXTENDS PAST THE LAST WORD OF AVAILABLE MEMORY. * IN CASE OF ERROR THE LOADER PRINTS THE NAME OF THE MODULE * IN WHICH THE ERROR OCCURED, FOLLOWED BY THE ERROR CODE. * IN CASE OF ERRORS 7 & 15 , NAME OF THE ENTRY POINT CAUSING * THE VIOLATION IS ALSO PRINTED FOLLOWING THE MODULE NAME. * SKP * IIILU DEC 19 DEBUG LU IPBUF BSS 10 OUTPUT PARSED BUFFER STRNG BSS 40 INPUT STRING BUFFER SLONG NOP STRING LENGTH IN CHARS DONE? NOP =1 WHEN INPUT PRAMS CHECKED OUT * F3 DEF FILE3 FILE3 OCT 206 NOP NOP TYPE3 NOP F3SC NOP F3DSC NOP * PLIST DEC 2 BATCH NOP BATCH FLAG 0=NO /-1 = YES SKP.1 NOP SKIP FLAG (SKIP IF WE REREAD LAST COMMAND) N80 DEC -80 P16 DEC 16 P23 DEC 23 * * MOVE OR REARRANGE THESE BUFFERS AT YOUR EVERLASTING PERIL !!!!! * IDCB3 BSS 144 NOP TEMP. LEAVE IN FRONT OF MBUF MBUF BSS 66 NAM REC BUFFER MBUF1 EQU MBUF+1 IDCB1 BSS 16 DCB HEADER FOR RELO FILE XBUF BSS 128 DCB & READ BUFFER FOR LU & SYS LIB READS SBUF BSS 128 DCB & DIRECTORY BLOCK READ BUFFER LBUF BSS 64 RELO RECORD PROCESS BUFFER DBUF BSS 128 ABSOLUTE OUTPUT BUFFER IDCB2 BSS 144 SGNAM BSS 60 SEGMENT NAM RECORD BUFFER MVBUF BSS 13 ID INFO TO BE MOVED INTO SYS ID AREA .BUF EQU * END OF BUFFERS IN OVERLAYED CODE SKP * * ORG IDCB3 * *IIILU DEC 28 * *THIS SECTION OF THE LOADR RETRIEVES THE RUN STRING AND PARSES THE *INPUT. ONLY MIMIMAL ERROR CHECKING IS DONE. THIS MEANS THAT *FINAL ERROR CHECKING OF ALL ERROR CONDITION3S IS DONE ONLY AFTER *THE INPUT FROM THE COMMAND FILE IS READ. THIS ALLOWS GROSS ERRORS *TO BE MADE ON THE RUN STATEMENT BUT CORRECTED IN THE COMMAND FILE. *IN ADDITION IT MEANS COMMAND FILES WILL HAVE THE LAST WORD ON *HOW A PROGRAM IS LOADED. THUS A COMMAND FILE COULD BE SET UP TO *KEEP INEXPERIENCED USERS FROM HURTING THEMSELVES, THE SYSTEM, OR *OTHER USERS. I HATE TO USE THE WORD BUT IT IS VERY (UGH) FRIENDLY. * * * CALCULATE THE BLOCK NUMBER WHERE THE LIB DIRECTORY STARTS * AND THE POSSIBLE OFFSET IN NUMBER OF ENTRYS TO ACCOUNT FOR * AN ODD STARTING SECTOR. * WE DO THIS HERE BECAUSE IT IS OVERLAYABLE SPC 1 LOADR LDA B,I GET THE DEFAULT LU SZA STA DFTLU AND SAVE * LDA DSCLB GET DISC ADDR OF LIB DIRECT. AND M177 GET SECTOR NUMBER STA BLOK# AND SAVE TEMP XOR DSCLB GET TRACK NUMBER ALF,ALF AND POSITION RAL RIGHT JUSTIFIED MPY SECT2 MULYPLY BY SECTORS/TRACK ADA BLOK# AND ADD INTO SECTOR NUMBER CLE,ERA PRODUCE BLOCK NUMBER STA BLOK# AND SAVE FOR "GTENT" CLA,SEZ NOW SET ENTRY OFFSET NUMBER ADA P16 EQUAL TO 0 OR 16 STA OEFL1 AND SET FOR "GTENT" * * * JSB EXEC GET THE RUN STRING DEF *+5 DEF P14 DEF P1 THIS IS A GET NOT A PUT DEF STRNG ADDRESS OF 40 WORD STRING BUFFER DEF N80 LENGTH OF STRING (NEG CHAR LENGTH) * STB SLONG SLONG = STRING LENGTH IN + CHARACTERS * JSB NAMRR PARSE TWICE TO GET RID OF THE RU AND JSB NAMRR THE LOADR. WE NOW HAVE PARAMETERS. * * JSB NAMRR NOW GET THE COMMAND FILE NAME SSA,RSS END OF STRING ? JMP GTCMD NO * LDA DFTLU YES, NO STRING. GET THE DEFAULT LU STA IPBUF PUT INTO PARSE BUFFER CLA,INA SET TYPE WORD TO LU (NOT A FILE) STA IPBUF+3 * GTCMD LDA N6 GET THE NEG COUNT AGAIN JSB MOVE AND MOVE THE NAME TO THE CMND NAME BUFFER DEF IPBUF SOURCE OF MOVE DEF FILE2 COMMAND FILE NAME ADDRESS LDA TYPE2 GET THE PARSE TYPE WORD AND P3 KEEP ONLY THE LEAST TWO BITS STA TYPE2 AND SAVE FOR LATER * ERA,SLA IS IT A FILE OR AN LU ? JMP GTREL FILE, SO GO GET THE REL FILE LDA FILE2 AN LU. JSB INTER SEE IF IT IS INTERACTIVE JMP GTREL NO IT NOT. * STA FILE3 IT IS, SO MAKE IT THE LIST LU IOR M200 USE COLUMN 1 STA LISTU * * GTREL JSB NAMRR NOW GET THE INPUT FILE NAME SSA END OF STRING ? JMP SEFIL YES LDA N6 NEG COUNT TO A REG FOR MOVE WORDS JSB MOVE DEF IPBUF ADDRESS OF SOURCE DEF FILE1 ADDRESS OF DESTINATION LDA TYPE1 GET TYPE OF INPUT THAT WAS PARSED AND P3 SAVE THE LEAST TWO BITS STA TYPE1 FOR A LU VERSES FILE TEST * * * LDA IPBUF+6 * SZA,RSS * JMP *+5 * STA IIILU * JSB DBUG * DEF *+2 * DEF IIILU * EXT DBUG * * * * GTLST JSB NAMRR NOW GO GET THE LIST LU SSA JMP SEFIL JMP GETOP * TRKYX EQU MBUF-* ORG MBUF LEAVE ROOM FOR IDCB3 * GETOP JSB DOLST SEE IF IT'S A FILE OR LU * JSB NAMRR NOW GO GET THE OPCODE INFO SSA JMP SEFIL LDB IPBUF GET THE 1ST OPCODE JSB TEST CHECK IT OUT LDB IPBUF+1 NOW THE NEXT ONE JSB TEST LDB IPBUF+2 AND THE LAST ONE JSB TEST * JSB NAMRR NO, GO GET FMT PARAMETERS SSA JMP SEFIL LDB IPBUF GET THE FIRST OP JSB TEST CHECK IT OUT LDB IPBUF+1 NOW DO THE JSB TEST 2ND ONE LDB IPBUF+2 AND NOW THE LAST JSB TEST ONE. * JSB NAMRR NO, GET THE PART'N NUMBER IF SUPPLIED. SSA JMP SEFIL p LDA IPBUF GET THE # STA #PTTN SAVE * JSB NAMRR NO, GET THE SIZE OF THE PROGRAM SSA JMP SEFIL LDA IPBUF STA #PGS AND SAVE * * * ******************CHECK OUT COMMAND FILE********************* * * SEFIL LDA TYPE2 GET THE TYPE WORD FOR THE COMMAND FILE SZA,RSS WAS A COMMAND FILE ENTERED ? JMP CNFLT NO, SO GO CHECK OUT THE INPUT STRING ERA,SLA YES, BUT IS IT A FILE OR A LU ? JMP FOPEN A FILE ! * LDA FILE2 AN LU. CHECK IT OUT & SEE IF INTERACTIVE JSB INTER RSS NOT INTERACTIVE ISZ DFLAG SET INTERACTIVE CMND LU FLAG IOR M400 AND SET THE ECHO BIT STA FILE2 AND SAVE FOR THE INPUT CALL THROUGH REIO * JMP *+1,I GO DO THE READ DEF LREAD (SAVE A BP LINK TOO ) * * M200 OCT 200 DFTLU DEC 1 DEFAULT LU B1777 OCT 1777 M400 OCT 400 SPC 1 * CHECK FOR ANY CONFLICT IN PARAMETERS AND THEN CHECK THE * PARAMETERS THEMSELVES. SPC 1 CNFLT ISZ DONE? MAKE SURE WE NEVER COME HERE AGAIN  LDB PTYPE GET THE PROGRAM TYPE LDA DBFLG AND THE DEBUG APPENDED FLAG SZA,RSS HAS DEBUG BEEN APPENDED JMP CHEKR TEST THE REST OF THE PARAMETERS LDA EDFLG YES, SO SEE WHAT TYPE LOAD IT IS CPA P1 IS IT A PERMANENT LOAD JMP LDI5 YES, SO DO ERROR THING CPA P2 NO, WELL IS IT A REPLACEMENT ? JMP LDI5 YES, THIS IS AN ERROR TOO. CPB P2 IS IT A REAL TIME PROGRAM ? JMP LDI5 YES, THIS IS AN ERROR(DEBUG NOT = RT PROG) * * CHEKR LDB XEQT (B)=ADDR OF LOADR'S ID SEG ADB P20 (B)=ID SEG'S WORD 21 ADDR LDA B,I GET WORD 21 TO CHECK BIT 15 CCB GET A FLAG READY SSA IF LOADR RUNNING UNDER BATCH STB BATCH LDA PLIST GET THE LISTING PARAMETER SSA JMP LDI5 .m THEN INPUT ERROR ADA N4 SSA,RSS IF GREATER THAN 3 JMP LDI5 THEN INPUT ERROR. LDA FILE1 CHECK PRAM 1. CPA P1 IF INPUT IS SYS TTY, JMP LDI5 TREAT AS ERROR CPA P2 IS THIS TO THE DISK JMP LDI5 JUST WHO DO YOU THINK YOUR KIDDING?????? * LDB XEQT (B)=ADDR OF LOADR'S ID SEG ADB P23 (B)=ADDR OF LOADR'S HIGH MAIN LDA B,I SET UP LOADR SYMBOL TABLE TO STA BLST START FROM LOADR'S HIGH STA PLST MAIN ADDR AND GROW UP STA TLST TOWARD HIGH CORE. STA SLST STA FLST ADB N9 (B)=ADDR OF LOADR ID'S WORD 15 LDA B,I GET LOADR'S PROG TYPE LDB RTLWA GET ADDR OF LOADR'S LAST WORD SPC 1 SLA SKIP IF LOADR IS FG LDB BKLWA ELSE GET LWA OF BG. STB BKLWR SET AS LWA AVAILABLE TO LOADR CLB .MBUF EQU *-MBUF OVERLAY PROBLEM ?? STB MBUF CLEAR "VALID MODULE NAME PRESENT" FLAG * LDA #PTTN GET THE PART'N SPECIFIED IF ANY CCB GET ADDR MAP TABLE - 1 ADB $MATA WHERE # OF PART. IS KEPT SZA,RSS WAS PTTN# SPECIFIED? JMP NOPTN NO, DO SIZE CHECK LATER SPC 2 * PARTITION WAS SPECIFIED FOR THIS PROG * LDA B,I YES, DO SIZE CHECK NOW * * CMA ADA #PTTN SSA,RSS ERR16 IF PTTN# > #PTTNS JMP ER.16 * CCA ADA #PTTN 6 * (PTTN# - 1) + $MATA MPY P6 IS ADDR OF ENTRY ADA $MATA IN MAP TABLE LDB A,I (A) IS ADDR MAP ENTRY SSB IF ENTRY NOT DEFINED, JMP ER.16 GIVE ERR16 * ADA P4 BUMP TO WORD 5 LDB A,I RBL,CLE,ERB REMOVE RESERVED FLAG STB #PGPT SAVE #PAGES IN PTTN CMB ADB #PGS ENOUGH PAGES IN SSB SPECIFIED PTTN? JMP PGSOK z YES SZB OK IF EQUAL LDB #PGS NO, BUT WAS SPECIFIC SZB SIZE REQUESTED? JMP ER.17 YES, CAN'T FIT! * PGSOK INA GET TO TYPE PARTITION LDA A,I PULL IT IN LDB P2 GET RT PROG TYPR SSA RT PROG STB PTYPE MAKE THE PROG RT . * CCA ADA #PGS SUBT 1 FROM #PGS REQUESTED SSA ANY REQUESTED? LDA #PGPT NO, USE SIZE OF PTTN STA #MXBG SET AS MAX SIZE STA #MXRT OF QUALIFIED AREAS JMP CMMST NOW SET UP COMMON STUFF * * * NO PARTITION WAS SPECIFIED FOR THIS PROG * NOPTN LDA B,I NO PTTN SPECIFIED CMA,INA,SZA,RSS FIND MAX OF EACH TYPE JMP ER.16 ERROR IF NO PTTNS DEFINED STA WDCNT SAVE NEG # PTTNS INB NXPTN STB TBUF SAVE CURR PTTN DEF ADDR LDA TBUF,I SSA IS PTTN DEFINED? JMP A6PTN NO, SKIP THIS ENTRY ADB P4 LDA B,I GET WORD 5 SSA IF RESERVED, SKIP IT JMP A6PTN CAUSE WE GOT NO RESERVATION * INB LDB B,I GET WORD 6 SSB,RSS FIND TYPE OF PTTN: JMP BGPTN LDB A RT PTTN CMB,INB ADB #MXRT RT PTTN SIZE SSB BIGGER THAN PREVIOUS MAX? STA #MXRT YES, SAVE NEW MAX JMP A6PTN CHECK NEXT PTTN DEFINITION * BGPTN LDB A BG PTTN CMB,INB ADB #MXBG BG PTTN SIZE SSB BIGGER THAN PREVIOUS MAX? STA #MXBG YES, SAVE NEW MAX * A6PTN LDB TBUF ADB P6 INCRE TO NEXT PTTN DEFINITION ISZ WDCNT SEARCH THROUGH UNTIL DONE JMP NXPTN * * CMMST LDA COMTP GET COMMON TYPE ADA #MPFT SZA ANY TYPE OF COMMON USED? JMP CMUSE YES LDA $ENDS NO COMMON USED ALF,ALF SHIFT #PAGES IN SYS RAL,RAL TO GET ADDR OF .5NEXT PAGE JMP CMNCM SET FWA USER CMUSE LDA BKORG SSGA OR COMMON ADA BKCOM WAS USED ADA B1777 USE ADDR OF NEXT PAGE AND M0760 AFTER COMMON FOR CMNCM STA URFWA SET FWA USER * RAL,RAL PUT PAGE # IN LOWER BITS ALF ADA #PGS ADD IN REQUESTED PAGE SIZE ADA N34 SUBTRACT MAX PROG SIZE SSA,RSS REQUESTED SIZE TOO LARGE ? JMP ER.18 YES, SO FLUSH THE TURKEY * LDA URFWA GET THE LOAD POINT AGAIN CCB SET PROPER LWA USER ADB #PGS #PAGES REQ'D LESS BASEPAGE SSB WAS ANY REQUESTED? JMP LEDT4 NO, DEFAULTS 77777 BLF,BLF SHIFT TO FORM PAGE ADDR RBL,RBL ADA N1 SUBT 1 AND ADD TO U.FWA ADA B FOR ADDR OF U.LWA SSA,RSS IF PAST 32K USE 77777 STA URLWA NO, SET URLWA,UBLWA ******* END MEU CODE ********** XIF SPC 1 LEDT4 LDB EDFLG GET EDIT FLAG LDA COMTP GET COMMON TYPE SZA,RSS COMMON SPECIFIED ? JMP DFLCM NO, SET DEFAULT TYPE. CPA P2 LOCAL COMMON ? JMP LCLCM YES, SET LOCAL COMMON. LDB P2 SET (B)=2 FOR SYSTEM COM CPA P3 REVERSE COMMON ? LDB P3 YES, SET REVERSE COMMON. LDA BKCOM (A) = LEN OF BG SYS COMM CPB PTYPE BG PROG ? LDA RTCOM YES, SET (A)=LEN OF FG COMM STA MXCOM SET MAXIMUM LEN OF COMMOM LDA BKORG ALSO SET ORIGIN CPB PTYPE OF THE RESPECTIVE LDA RTORG COMMON AREA. STA COMAD JMP CMEXI FINISH UP COMMON STUFF DFLCM EQU * SPC 1 SPC 1 LCLCM CCA SET LOCAL COMMON FLAG STA COMIN TO ALLOC AT NAM REC SPC 1 CLA (A)=0 IF LOCAL COMMON JMP CMLOC * SPC 1 IFZ ******* BEGIN MEU CODE ******** CMEXI LDA P3 (A)=3 IF BG COeMMON CPB PTYPE LDA P2 (A)=2 IF RT COMMON CMLOC LDB #MPFT (A)=0 IF LOCAL COMMON SZB LDA P4 (A)=4 IF SUBSYSTEM GLOBAL AREA STA #MPFT SET MPFT INDEX ******* END MEU CODE ********** XIF SPC 1 * * LDA UBFWA SET FWA USER BG DISC RES STA AFWA ORIGIN AS ABS FWA + LDA UBLWA SET UPPER STA LWA BOUND. LDA BPA3 GET FWA OF BKG BASE PAGE AREA STA BPREL SET BASE PAGE RELOCATION BASE STA BPFWA SAVE IT CMA,INA AND SUBTRACT FROM LWA OF ADA BKGBL LINK AREA. * CMA,INA CACULATE AREA SIZE IN UPPER MEMORY STA B SAVE COUNT FOR ZEROING ADA BKLWR SUBTRACT FROM END OF MEM STA FWABP SET BOUNDRY STA CWABP INITIALIZE ALLOCATION WORD STA SEGB AND SEGMENT BASE PAGE STA IDA ADDRESS OF BASE ID SEG (NONE EXIST YET) STA MBUF1 POINTER TO ZAP THE AREA WITH STA TFIX LOW END OF FIXUP TABLE (AGAIN NONE EXIST) LDA BKLWR SET LWA STA LWABP OF AREA CLA CLEAR LDI7 STA MBUF1,I DUMMY ISZ MBUF1 BASE INB,SZB PAGE JMP LDI7 AREA * LDA AFWA SET UP THE BASE LOAD ADDRESSES STA FWA FIRST WORD FOR LOAD ADA P2 ALLOCATE ROOM FOR X,Y REGS STA SEGM SEGMENT BASE STA TPREL HIGHEST USED MEMORY ADDRESS STA PPREL * LDB OPCOD GET THE LAST OPCODE CPB P4 WAS IT A 4 JMP PURGE YES SO GO PURGE THE PROGRAM * LDB EDFLG IF REPLACEMENT, CPB P2 DON'T REQUIRE A CLA,INA,RSS BLANK ID SEGMENT. CLA BLANK ID REQUIRED CLB INDICATE LONG ID JSB SETID BLANK ID SEGMENT * JSB ITRAK MAKE ALLOCATION. * CCB STB NUPLS SET NO. PROGS LOADED = -1 STB PLFLG SET `UHFBLOADING FLAG = LOADING LDA DBFLG GET DEBUG FLAG SZA,RSS SKIP - DEBUG OPTION SELECTED JMP NODBG OMIT ENTERING DEBUG INTO LST SKP * * ENTER 'DEBUG' INTO LST * JSB LSTX SET CURRENT LST ADDRES NOP LDA CHRDE GET CHARS D,E STA LST1,I SET NAME 1,2 INTO LST LDA CHRBU GET CHARS B,U STA LST2,I SET NAME 3,4 INTO LST LDA UCHRG GET UPPER CHAR G STA LST3,I SET NAME 5 INTO LST LDA P2 SET LST4 = UNDEF SYMBOL & STA LST4,I LDA TLST SET NEW STA PLST END-OF-LIST ADDR. NODBG CLA STA DSECT SET CURRENT SECTOR = 0. LDA TRAKB SET CURRENT TRACK = STA DTRAK TRACK BASE. * * * LDA TYPE1 GET THE TYPE OF INPUT SZA,RSS ANY MAIN SPECIFIED ? JMP CDTST NO, GO SEE IF ANY CMND FILE LDB TYPE2 YES SZB,RSS IS THERE A CMND FILE ALSO ? JMP DMANE NO, SO JUST GO LOAD MAIN * CCB YES, SO SET A FLAG SO THAT WE KNOW STB SKP.1 TO REREAD THE LAST COMMAND JMP DMANE * N34 DEC -34 * ER.17 LDA ERR17 RSS ER.18 LDA ERR18 JMP ABOR * ERR17 ASC 1,17 ERR18 ASC 1,18 CDTST LDB TYPE2 GET CMND FILE TYPE SZB,RSS IS THERE A CMND FILE ? JMP LDI5 NO CMND FILE AND NO MAIN ???????? JMP *+1,I GO GET THE LAST COMMAND DEF SECK1 (SAVE A BP LINK TOO !) * SKP H SKP 2 *********************************************************************** * OVERLAYABLE SUBROUTINES *********************************************************************** SPC 2 * * THE TEST SUBROUTINE IS USED TO CHECK OUT AND PROCESS * ALL OPCODE AND FMT PARAMETERS. * FMT AND OPCODE MNEMONICS MAY BE INTERMIXED AND INTER- * MINGLED. ANY UNDEFINED MNEUMONIC WILL GENERATE AN * L-10 ERROR. TEST NOP SZB IF NOTHING ENTERED CPB ABLNK JMP TEST,I STB OPP SET THE ERROR RETURN CODE = INPUT CODE LDA LDOPC GET START OF OPCODE TABLE STA XTEMP AND SAVE FOR SEARCH LDA LDJMP GET JUMP ADDRESS TABLE STA YTEMP AND SAVE FOR JUMP TO APPROPRIATE PROCESSOR LOOPR CPB XTEMP,I IS THIS THE CODE JMP YTEMP,I YES, SO JUMP TO THE APPROPRIATE PROCESSOR ISZ XTEMP NO, SO BUMP THE ISZ YTEMP TWO POINTERS AND JMP LOOPR TRY AGAIN. * LDOPC DEF *+1 ADDRESS OF START OF TABLE ASC 15,LIPUBGRTSCRCNCSSDBPETERPRSLENL OPP NOP ERROR CODE LDJMP DEF *+1,I HEAD OF JUMP TABLE DEF DO3 LIST OPERATION DEF DO4 PURGE OPERATION DEF BG BG PROGRAM DEF RT RT PROGRAM DEF SC USES SYSTEM COMMON DEF RC USES REVERSE COMMON DEF NC NO COMMON (OR LOCAL COMMON- DEFAULT) DEF SS USES SSGA DEF DB APPEND THE DEBUG ROUTINE DEF PE PERMANENT PROGRAM (ADDITION) DEF TE TEMPORARY PROGRAM (DEFAULT) DEF RP REPLACEMENT OPERATION DEF RS RESCAN FILE FOR APPENDED SUBROUTINES DEF LE DEF NL DEF PRERR INPUT ERROR PROCESSING * * ABLNK ASC 1, * * ********************************************************************** *THIS SECTION SETS A FEW FLAGS FOR LATER USE IN LOADING THE PROGRAM *AS THE INFORMATION COMES IN THE FLAGS ARE SET. THE FLAGS ARE NOT Ͱ*CHECKED UNTIL ALL INFORMATION ABOUT THE PROGRAM FROM THE RUN STRING *OR THE COMMAND FILE HAS BEEN PROCESSED. * * BACKROUND PROGRAMS SET PTYPE = 3 * REAL TIME PROGRAMS SET PTYPE = 2 * TEMPORARY PROGRAMS SET EDFLG = 0 * PERMANENT PROGRAMS SET EDFLG = 1 IE PERMANENT ADDITION * REPLACED PROGRAMS SET EDFLG = 2 IE PERMANENT REPLACEMENT * #PAGES = # OF PAGES IN PROGRAM (INCLUDES BP) * #PTTN = PARTITION # (COUNTING FROM 1 ) * #MPFT = 0/1 DON'T USE / USE SSGA * COMTP = 0 ... NO COMMON ( OR LOCAL COMMON) * COMTP = 1 ... SYSTEM COMMON * COMTP = 3 ... REVERSE COMMON * OPCOD = 1 IF DBUG APPENDED * OPCOD = 3 IF PROGRAM LISTING DESIRED * OPCOD = 4 IF PROGRAM PURGE DESIRED * MSEG = 0/1 NOT SEGMENTED / SEGMENTED * DO3 LDA TYPE2 GET THE COMMAND TYPE ERA,SLA IS IT A FILE ? JMP LDI25 THEN ITS AN ERROR JMP LLIST DO THE LISTING DO4 LDB P4 GET THE PURGE CODE STB OPCOD AND SAVE FOR LATER LDB TYPE2 GET THE CMND TYPE ERB,SLB IF ITS A FILE FLUSH HIM JMP LDI25 AND TELL HIM THE COMMAND TOO JMP CHEKR INTERACTIVE CMND OK. BG LDA P3 BACKROUND PROGRAM BG2 STA PTYPE JMP TEST,I RT LDA P2 JMP BG2 NC CLA,RSS SC CLA,INA SC2 STA COMTP JMP TEST,I RC LDA P3 JMP SC2 SS CLA,INA STA #MPFT STA SSGA SSGA FLAG JMP TEST,I DB CLA,INA STA DBFLG STA OPCOD JMP TEST,I TE CLA,RSS PE CLA,INA PM2 STA EDFLG JMP TEST,I RP LDA P2 JMP PM2 RS CLA,INA STA RSCAN SET THE RESCAN FLAG STA MSEG SET SEGMENTED PROGRAM FLAG JMP TEST,I LE CLA,RSS NL LDA P3 STA PLIST JMP TEST,I * SKP * * THIS ROUTINE SETS UP THE LIST DEVĺICE AS AN LU OR FILE * DOLST NOP LDB IPBUF+3 GET THE TYPE WORD SZB,RSS IF NOTHING THERE JMP DOLST,I JUST RETURN JSB CLOS3 CLOSE ANY OLD FILE * LDA N6 GET THE NEG COUNT FOR THE MOVE JSB MOVE MOVE THE BUFFER TO FILE NAME AREA DEF IPBUF THE LIST DEVICE MAY BE A FILE DEF FILE3 LDA TYPE3 GET THE INPUT TYPE AND P3 AND KEEP ONLY STA TYPE3 THE LOWER BITS ERA,SLA IS IT A FILE OR AN LU ?? JMP OPNFL A FILE, SO OPEN IT. * LDA IPBUF GET THE LIST LU IOR M200 SET V BIT FOR COLUMN 1 STA LISTU AND SAVE JMP DOLST,I GET THE NEXT PARAMETER * OPNFL LDA FILE3 GET THE 1ST 2 CHARS OF FILE NAME AND M7400 KEEP ONLY UPPER BYTE CPA ACENT IS IT A ' JMP OPEN3 YES SO GO OPEN THE FILE * CRAT3 JSB CREAT NO, SO CREAT THE FILE DEF *+8 DEF IDCB3 DEF IERR3 DEF FILE3 DEF P12 SIZE = 12 BLOCKS DEF P4 DEF F3SC DEF F3DSC * F3ERR SSA,RSS ANY ERRORS ? JMP DOLST,I NO, FILE NOW OPEN. SO RETURN * JSB CLOS3 YES, SO CLOSE THE LIST FILE LDB F3 GET THE FILE NAME ADDRESS TO B LDA IERR3 ERROR CODE TO A JMP FLERR DO FILE ERROR THING * * OPEN3 JSB OPEN OPEN THE LIST FILE DEF *+7 DEF IDCB3 DEF IERR3 DEF FILE3 DEF IPTN3 DEF F3SC DEF F3DSC * CPA N6 DID WE FIND THE FILE ? JMP CRAT3 NO SO GO CREAT IT JMP F3ERR SEE IF ANY ERRORS * * ACENT OCT 23400 THIS IS A ' * * * * OVLY1 CPB AS ASSIGN PARTITION ? JMP DOAS CPB SZ SPECIFY PROGRAM SIZE JMP DOSZ CPB LL NEW LIST DEVICE ? JMP DOLL CPB OP NEW OPCODE PARAMETERS ? JMP DOOP CPB FM NEW FORMAT PARAMETERS JMP DOOP .JMP PRERR MUST BE AN ERROR * AS ASC 1,AS SZ ASC 1,SZ LL ASC 1,LL OP ASC 1,OP FM ASC 1,FM * * * DOAS JSB NAMRR GO PARSE THE INPUT LDA IPBUF GET THE PARTITION # STA #PTTN AND SAVE FOR LATER CHECK JMP NXTOP DOSZ JSB NAMRR GO PARSE LDA IPBUF GET THE # OF PAGES STA #PGS SAVE FOR LATER ERROR CHECKING JMP NXTOP DOLL JSB NAMRR PARSE TO GET THE LIST DEVICE JSB DOLST NOW CHECK IT OUT JMP NXTOP DOOP JSB NAMRR PARSE THE INPUT PARAMETER STRING LDB IPBUF GET THE 1ST PARAMETER JSB TEST AND CHECK IT OUT LDB IPBUF+1 JSB TEST NOW TEST THE SECOND PARAMETER LDB IPBUF+2 JSB TEST AND THE LAST PARAMETER JMP NXTOP GET THE NEXT OP CODE * * * FOPEN JSB OPEN OPEN THE COMMAND FILE DEF *+7 DEF IDCB2 DATA CONTROL BLOCK DEF IERR2 ERROR FLAG DEF FILE2 FILE NAMR DEF IPTN2 OPEN OPTION DEF F2SC SECURITY CODE DEF F2DSC CARTRIDGE REF # * SSA,RSS ANY ERRORS ? JMP FREAD NO LDB F2 GET THE FILE NAME ADDRESS JMP FLERR YES * * *LOCKR NOP * CLB,INB SPECIFY LOCK * ADB NOERR SET THE NO ABORT BIT * STB PTEMP * STA ANLU# SAVE THE LU # * JSB LURQ LOCK THE LU * DEF *+4 * DEF PTEMP LOCK OR UNLOCK WORD * DEF ANLU# THE LU TO BE LOCKED * DEF P1 THE LU TO BE LOCKED * NOP IGNOR ANY ERRORS * JMP LOCKR,I ********************************************************************** * TRKYY EQU IDCB2-* OVERLAY CHECK !! * * SKP * * SYSTEM PROGRAM LISTING OPTION * * THE SELECTION OF THIS OPTION GIVES A LISTING * (ON THE LIST UNIT) OF THE PRIMARY CONTENTS OF * EACH ID SEGMENT IN THE SYSTEM. * THE LISTING IS PRECEDED BY THE HEADING: * NAME TYPE PRIORITY HIGH MAIN LOW zWMAIN REQ'D SIZE EMA SIZE PTTN * * EACH LINE OF OUTPUT FOR A DEFINED ID SEGMENT IS: * AS SHOWN ABOVE. * * A BLANK ID SEGMENT (AVAILABLE FOR USE) IS * NOTED BY THE LINE OUTPUT: * "" OR "" * * * LLIST JSB SPACE LDB LLM1 PRINT LDA P72 SPC 1 JSB DRKEY JSB SPACE JSB SPACE * LDA KEYWD SAVE STARTING STA ABT1 KEYWORD ADDR. * ZAP36 LDB ABLNK GET AN ASCII BLANK READY LDA N36 # OF WORDS TO BLANK STA YTEMP SAVE TEMPORARIALLY LDA LLM1 GET THE BUFFER ADDRESS ZAPIT STB A,I BLANK IT OUT FOR REUSE INA BUMP POINTER ISZ YTEMP ARE WE DONE ? JMP ZAPIT NO * * JSB BREAK SEE IF BREAK BIT SET LDB ABT1,I GET ID SEGMENT ADDR. SZB,RSS IF END-OF-LIST, GO TO SINGLE JMP EXIT TERMINATION * ADB P12 SET TO NAME AREA. LDA B,I GET NAME 1,2, STA LLM1+2 SET IN MESSAGE. SZA,RSS IF NAME WORD = 0, THEN JMP LL3 BLANK ID SEGMENT. INB LDA B,I SET NAME 3,4 STA LLM1+3 IN MESSAGE. INB LDA B,I GET NAME 5, AND M7400 ISOLATE, IOR BLNK ADD BLANK STA LLM1+4 AND STORE. * JSB LIST? GO SEE IF WE SHOULD PRINT IT * * LDA B,I GET TYPE AND M7 CODE. STA ZTEMP SAVE PROG TYPE IOR M60 MAKE ASCII, IOR UBLNK ADD UPPER BLANK, STA LLM1+6 AND STORE. * LDA B,I GET THE WORD AGAIN AND M20 GET THE SS BIT STA YTEMP SAVE IT * CLB STB OPCOD INSURE AN OCTAL CONVERSION LDB ZTEMP GET THE PROGRAM TYPE CPB P1 IS IT MEMORY RESIDENT ? JMP PROR YES, THUS NO HIGH & LOW MAIN WORDS * JSB ADJST GET THE ID ADDRESS AGAIN ADA P23 INDEX TO HIGH MAIN LDA A,I GET IT LDB LLM18 GET THE DESTINATION ADDRESS JSB CONVD DO THE CONVERSION. * JSB ADJST GET THE ID ADDRESS AGAIN ADA D22 INDEX TO THE LOW MAIN WORD LDA A,I LDB LLM13 GET THE DESTINATION JSB CONVD DO THE CONVERSION * JSB ADJST GET THE ID ADDRESS AGAIN ADA P24 GET LOW BP LDA A,I GET THE WORD LDB LLM23 GET THE DESTINATION JSB CONVD DO THE CONVERSION * JSB ADJST GET THE ID ADDRESS AGAIN ADA P25 GET THE HI BP LDA A,I LDB LLM28 JSB CONVD * * LDB ZTEMP GET THE PROGRAM TYPE BACK AGAIN CPB P5 IS IT A SEGMENT ? JMP LL4 YES * PROR LDB ABT1,I GET THE ID ADDRESS AGAIN ADB P6 INDEX TO THE PRIORITY LDA B,I GET THE PRIORITY LDB P3 MAKE SURE THE CONVERSION IS DECIMAL STB OPCOD LDB LLM8 GE THE DESTINATION ADDRESS JSB CONVD DO THE CONVERSION * LDB ABT1,I GET THE ID ADDRESS AGAIN (TEDIOUS ISN'T IT ?) ADB D21 INDEX TO SIZE WORD LDA B,I GET THE SIZE STA XTEMP SAVE IT AND M0760 NOW GET THE SIZE INFO ALF,ALF PLAY A FEW GAMES WITH IT RAR,RAR INA ACCOUNT FOR BASE PAGE JSB CNV99 CONVERT TO ASCII STA LLM1+30 SOCK IT AWAY * LDA XTEMP GET THE SIZE WORD AGAIN SSA,RSS IS THIS PROG ASSIGNED TO A PARTITION ? JMP LL4 NO, SO GO DO OUTPUT * AND M77 SO GET THE PARTITION # INA MAKE IT COUBT FROM 1 (NOT 0 ) JSB CNV99 DO THE CONVERSION STA LLM1+35 SAVE IT * LL4 LDA P72 PRINT NAME LDB LLM1 LINE JSB DRKEY * LL2 ISZ ABT1 GET NEXT KEYWORD ADDR. JMP ZAP36 -REPEAT SCAN. * * OUTPUTB BLANK ID MESSAGE * LL3 LDA TYPE1 GET THE PROG NAME TYPE WORD SZA ANY PROG SPECIFIED JMP LL2 YES SO DONT PRINT THE BLANK ID MSG. ADB P2 (B)=ADDR OF NAM5 WORD LDA B,I GET NAM5 WORD AND M20 MASK IN 'SS' BIT LDB LLM3 (B)=ADDR OF LONG ID MESSAGE SZA 'SS' BIT SET ? LDB LLM4 YES-(B)=ADDR OF SHORT ID MESSAGE LDA P18 (A)=MESSAGE LENGTH JSB DRKEY JMP LL2 * PURGE CLA,INA GO SET CLB JSB SETID ID ADDRS FOR LONG ID LDB BATCH GET THE BATCH FLAG SSB UNDER BATCH ? JMP LDI25 YES , ITS AN ERROR * LDA PAM1 GET INPUT PARAMETER P1 * SZA INPUT SPECIFIED ? * JMP USEIM YES - GO USE IT. * LDB BATCH GET BATCH FLAG * INA SET FOR LU1 * SZB RUNNING UNDER BATCH ? * LDA P5 YES-THEN DEFAULT INPUT TO LU 5 * SZB,RSS RUNNING UNDER BATCH? *SEIM STA LIST1 NO, SET PROMPT LU LDA FILE2 GET THE CMND LU AND M77 KEEP ONLY LU BITS JSB INTER IS IT INTERACTIVE JMP TRLST NO, ITS NOT. TRY LIST LU * GOTIT IOR M400 SET UP ECHO BITS STA LISTU SET UP INPUT LU. JMP TRYAG NOW GO OUTPUT MESSAGE * TRLST LDA LISTU GET THE LIST LU AND M77 KEEP LU BITS JSB INTER SEE IF IT'S INTERACTIVE JMP LDI5 NO, FLUSH HIM JMP GOTIT YES, SO GO DO IT. * * TRYAG LDA P10 SEND THE MESSAGE LDB LLM2 LOADR: PNAME ? JSB SYOUT TO THE OUTPUT DEVICE JSB EXEC READ THE REPLY DEF *+5 TO THE DEF P1 DEF LISTU DEF NAM12,I NAME AREA IN THE ID SEGMENT DEF P3 THREE WORDS ADB NAM12 ADD THE BUFFER ADDR TO THE TLOG LDA LLM2+1 GET A DOUBLE BLANK STA B,I BLANK UN SENT NAME CHARACTERS INB  STA B,I LDA NAM12,I CHECK FOR /A (ABORT OPERATION) CPA /A JMP ABORT YES GO ABORT JSB MIDN GO SEE IF THE NAME IS DEFINED JMP LDI5 NO GO SEND MESSAGE JMP *+1,I GO PURGE THE PROG DEF ED0 (SAVE A BP LINK TOO !) SPC 1 * BLNK OCT 40 D21 DEC 21 D22 DEC 22 * * SPC 2 LLM1 DEF *+1 ASC 21, NAME TYPE PRIORITY LO MAIN HI MAIN ASC 15, LO BP HI BP SIZE PART'N SPC 1 /A ASC 1,/A * LLM4 DEF *+1 ASC 9, LLM3 DEF *+1 ASC 9, * LLM13 DEF LLM1+13 LLM18 DEF LLM1+18 LLM23 DEF LLM1+21 LLM28 DEF LLM1+26 LLM8 DEF LLM1+8 P24 DEC 24 P25 DEC 25 P72 DEC 72 N36 DEC -36 LLM2 DEF *+1 ASC 5, PNAME ? _ * * * ADJST NOP LDA ABT1,I GET THE ID ADDRESS AGAIN LDB YTEMP GET THE SHORT SEG FLAG CPB M20 IS THIS A SHORT SEG ? ADA N7 THEN ADJUST A REG JMP ADJST,I AND RETURN * * LIST? NOP LDA TYPE1 SZA,RSS ANY THING INPUT FOR PROG NAME ? JMP LIST?,I NO, SO CONTINUE LDA FILE1 GET 1ST CHAR CPA LLM1+2 IS IT THIS ONE ? RSS YES JMP LL2 NO LDA FILE1+1 GET 2ND CHAR CPA LLM1+3 RSS JMP LL2 LDA FILE1+2 GET THE LAST CHAR CPA LLM1+4 JMP LIST?,I SUCCESS !!! JMP LL2 * WE PUT A FEW OVERLAYABLE WORDS HERE * * UBLNK OCT 20000 COMTP NOP TYPE OF COMMON 0/1/3/ LOCAL/SYSTEM/REVERSE M60 OCT 60 ERR25 ASC 1,25 LDI25 LDA ERR25 JMP ABOR DBFLG NOP 0/1 NORMAL LOAD/APPEND DEBUG XTEMP NOP TEMP WORD YTEMP NOP TEMP WORD ZTEMP NOP TEMP WORD BKLWR NOP LAST WORD OF AVAILABLE MEMORY INDLU NOP TEMPORARY LU WORD #PGPT NOP #PAGES IN PARTITION * ****************************** SPC 1 NOVLY EQU * BEGIN cNON-OVERLAYABE CODE .LBUF EQU *-LBUF-128 OVERLAY CHECK .DBUF EQU *-DBUF-128 OVERLAY CHECK .XBUF EQU *-XBUF-128 OVERLAY CHECK * BSS .BUF-* TURKY EQU *-.BUF OVERLAY CHECK NOP * * SKP *********************************************************************** * NON OVERLAY AREA *********************************************************************** * * * LSCAN SEARCHES FOR AN ENTRY IN LST IDENTICAL TO THE NAME IN TBUF. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB LSCAN * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): END OF LST. CURRENT LST ADDRES POINT TO THE NEXT * AVAILABLE ENTRY IN LST. * (N+2): NAME FOUND IN LST. CURRENT LST ADDRES POINT * TO THIS ENTRY. * LSCAN NOP JSB INLST INITIALIZE LSTX LDB TLST ENTX1 CPB PLST END OF LST ? JMP SLSTS YES - GO MAKE NEW ENTRY LDA B,I RAL,CLE,ERA CPA TBUF NAME 1,2 EQUAL ? JMP *+3 YES ADB P5 JMP ENTX1 NO - CHECK NEXT ENTRY INB LDA B,I CPA TBUF+1 NAME 3,4 EQUAL ? JMP *+3 ADB P4 JMP ENTX1 NO - CHECK NEXT ENTRY INB LDA B,I AND M7400 MASK OFF ORDINAL STA TBUF+3 LDA TBUF+2 AND M7400 MASK IN NAME 5 CPA TBUF+3 NAME 5 EQUAL ? JMP *+3 YES - SET LST1-5 ADDRES ADB P3 JMP ENTX1 ADB N2 BACK UP TO LST1 STB TLST AND SET UP TO CALL LSTX JSB LSTX FAKE IT HLT 0 I ALREADY CHECKED!! ISZ LSCAN SET FOR (P+2) RETURN JMP LSCAN,I SLSTS STB TLST (FOR LSTX TO USE) JSB LSTX ** RETURN MUST ALWAYS BE (P+1) ** JMP LSCAN,I RETURN (P+1) HLT 0 SKP * * SET NAME INTO LST * * SELST SETS THE CURRENT NAME INTO LST. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB SELST * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * SELST NOP LDA TBUF GET NAME 1,2 STA LST1,I SET NAME 1,2 INTO LST. LDA TBUF+1 GET NAME 3,4 STA LST2,I SET NAME 3,4 INTO LST LDA TBUF+2 GET NAME 5 AND M7400 ISOLATE UPPER CHAR STA LST3,I SET NAME 5 INTO LST LDA TLST GET NEXT LST ADDR STA PLST SET NEW END OF LST JMP SELST,I RETURN * * * COMMAND FILE PROCESSOR * * LREAD LDA DFLAG (ALL LU READS RETURN HERE) GET THE FLAG SZA ARE WE INTERACTIVE ?? JSB PRMTR YES, SO OUTPUT LOADR PROMPT JSB REIO NOW READ THE INPUT DEF *+5 DO IT IN A REENTRANT FASHION SO THAT DEF P1 WE ARE SWAPABLE DEF FILE2 DEF STRNG DEF N80 SZB,RSS WAS THE READ OF ZERO LENGTH ? JMP END?? YES, END OF INPUT, GO DO ERROR CHECKING CMND STB SLONG SAVE READ LENGTH FOR PARSING ROUTINE CLA,INA SET UP PARSING OFFSET TO START PARSING STA ISTRC AT THE FIRST CHARACTER JSB NAMRR PARSE THE OPCODE LDB IPBUF+1 GET 3RD & 4TH CHAR STB OP1? LDB IPBUF AND SAVE THE OPCODE STB OP? TEMPORARIALLY * * THESE COMMANDS MAY BE ENTERED ANY TIME * * CPB EN END OF COMMAND FILE ? JMP SECHK CPB SE A SEARCH COMMAND ? JMP SECHK CPB FO A FORCE COMMAND ? JMP FORCE CPB RE A RELOCATE COMMAND ? JMP SECHK CPB DS DISPLAY UNDEFS ? JMP DSPLY CPB EC ECHO COMMANDS ? JMP SUPRS CPB .A ABORT ? JMP ABORT LDA B AND M7400 CPA AS2RK JMP NXTOP * LDA DONE? GET THE MAIN LOADED FLAG SZA,RSS HAS THE MAIN BEEN LOADED ? JMP OVLY1 NO, GO TO OVERLAY AREA FOR REST OF COMNDS * PRERR LDA DFLAG  GET THE INTERACTIVE FLAG ? SZA,RSS ARE WE IN THE INTERACTIVE MODE ? JMP DOERR GO DO THE INPUT ERROR THING JSB PRMTR JSB EXEC DEF *+5 DEF P2 DEF FILE2 DEF PROMT+6 DEF P1 * JMP NXTOP GO GET THE NEXT INPUT * DOERR LDA CLEN GET THE READ LENGTH SZA IF NON ZERO ECHO IT JSB IECHO JMP LDI5 ELSE JUST ABORT THYSELF OP? NOP LAST OPCODE ISTRC DEC 1 POINTER TO CURRENT CHAR TO BE PARSED * * PROCESS THE COMMAND. * DSPLY LDA DFLAG GET THE CMND INTERACTIVE FLAG SZA,RSS IS IT INTERACTIVE ?? JMP DSPL1 NO LDB LISTU YES SO GET THE LIST LU STB QTEMP AND SAVE LDB FILE2 GET THE CMND LU STB LISTU AND USE IT AS THE LIST DEVICE LDB TYPE3 GET TYPE STB PTEMP AND SAVE CLB,INB STB TYPE3 JSB PUDF REPORT UNDEFS LDB QTEMP GET THE LIST LU BACK AGAIN STB LISTU AND RESTORE IT LDB PTEMP GET TYPE STB TYPE3 AND SAVE IT TOO JMP NXTOP GET NEXT COMMAND DSPL1 JSB PUDF REPORT UNDEFS JMP NXTOP GET THE NEXT COMMAND SUPRS CCA STA ECHO? NXTOP LDA TYPE2 GET THE TYPE OF INPUT ERA,SLA WHERE ARE WE READING FROM ? JMP FREAD A FILE JMP LREAD AN LU FORCE CCA SET THE FORCE STA FORCD FLAG. JMP NXTOP RELOC CLA NOW SET A FEW FLAGS STA LIBFL NOT A LIBRARY SCAN JMP DOPRS NOW GO DO THE PARSE SERCH CCA NOW SET A FEW FLAGS STA LIBFL IS A LIBRARY SEARCH * DOPRS CLA SET A FEW FLAGS STA SCSEG CLEAR THE SCAN TILL SEG FOUND FLAG STA SLIBF NOT A SYS LIB SCAN STA LGOU NOT AN LG READ CMA STA NUPLS NO ROUTINES LOADED STA PLFLG NAM MUST BE FIRST JSB NAMRR PARSE TH INPUT SSA WAS THERE ANYTHING TO PARSE ? JMP SE?? NO SEE IF LAST ONE WAS A SE,< > LDA IPBUF GET THE 1ST PARSED WORD. SZA IF = 0 CPA PROMT+4 OR A BLANK JMP SE?? BETTER BE AN SE,0, OR SE,, COMMAND LDA N6 GET THE WORD COUNT JSB MOVE MOVE THE NAMR TO THE DCB AREA DEF IPBUF SOURCE DEF FILE1 DESTINATION LDA TYPE1 GET THE TYPE WORD AND P3 KEEP ONLY THE LEAST 2 BITS STA TYPE1 JMP DMANE NOW GO DO THE READ * * SE?? LDA OP? GET THE LAST OPCODE ENTERED CPA SE WAS IT AN ' SE ' ? RSS YES JMP PRERR NO, WAS AN RE, < > = AN ERROR * JMP *+1,I NOW GO SCAN DEF LOADN (SAVE A BP LINK TOO !) * END?? LDA EN STA OP? SECHK LDB DONE? GET THE ERROR CHECKS DONE FLAG SZB,RSS HAVE WE DONE THE PARAMETER CONFLICT CHECK ? JMP CNFLT NO, SO DO IT (JMPS BACK TO OVERLAY AREA ) SECK1 LDA OP? GET THE OPCODE AGAIN * CPA FO WAS IT A FORCE ? JMP FORCE YES, SO DO THE FORCE LOAD CPA SE WAS IT A SEARCH ? JMP SERCH YES, SO SEARCH THE FILE CPA RE WAS IT A RELOCATE ? JMP RELOC YES, SO RELOCATE THE FILE JSB CLOS2 MUST HAVE BEEN AN END. SO CLOSE JSB CLOS1 COMMAND AND INPUT FILES. AND JMP CLFL1 FINISH THE LOAD. * * * * THE FOLLOWING ARE THE LEGAL COMMAND FILE COMMANDS * DS ASC 1,DI EC ASC 1,EC RE ASC 1,RE SE ASC 1,SE FO ASC 1,FO EN ASC 1,EN .A ASC 1,/A AS2RK OCT 25000 AN * ECHO? NOP SPC 1 * * * IERR2 NOP ERROR FLAG FOR COMMAND FILE IPTN2 NOP OPEN OPTION * IERR3 NOP ERROR FLAG FOR LIST DEVICE IPTN3 DEC 1 OPEN OPTION (NON EXCLUSIVE !!!!!) * * IERR1 NOP READ ERROR FLAG IPTN1 NOP OPEN OPTION IDCBS DEC 256 NLH* * SPC 1 * OPEN, READ, AND ECHO THE COMMAND. SPC 1 * FREAD JSB READF READ THE COMMAND FILE DEF *+6 DEF IDCB2 DEF IERR2 DEF STRNG DEF P40 DEF CLEN * LDA ECHO? ARE WE ECHOING COMMANDS ? SZA JSB IECHO YES, SO DO IT. * * * LDA IERR2 SSA,RSS ANY ERRORS ? JMP FLCHK NO LDB F2 JMP FLERR YES FLCHK LDB CLEN GET LENGTH OF COMMAND JUST READ SZB,RSS WAS IT ZERO ? JMP FREAD YES, SO DO IT AGAIN SSB WAS IT NEGATIVE (IE END OF FILE) JMP END?? YES, SO FINISH PROCESSING CLE,ELB CONVERT TO CHAR COUNT (MULT BY 2) JMP CMND GO DO COMMAND FILE PROCESSING * CLEN NOP RECORD READ LENGTH * * * P40 DEC 40 * N************************************************************************* * NON-OVERLAYABLE SUBROUTINES ************************************************************************* * THE NAMRR SUBROUTINE USES THE RELOCATABLE LIBRARY * PARSING ROUTINE NAMR. THE INPUT TO NAMR IS A STRING * OF ASCII CHARACTERS. * THE OUTPUT IS A 10 WORD BUFFER PARSED AS : * PRAM1,PRAM2,PRAM3,TYPE,S1,S2,S3,S4,S5,S6 * PARAMETERS BETWEEN COMMAS ARE PARSED. SUBPARAMETERS ARE * DELINEATED BY COLONS. THE TYPE WORD DESCRIBES ALL * PARAMETERS AS ASCII, NUMERIC, OR NULL. * THE TYPE WORD IS BROKEN UP INTO 2 BIT FIELDS TO DESCRIBE * THE INPUT. *15,14 13,12 11,10 9,8 7,6 5,4 3,2 1,0 *----------------------------------------------- * S6 ! S5 ! S4 ! S3 ! S2 ! S1 ! PRAM ! *----------------------------------------------- * * PRAM = 0 ...NULL PRAM1 = PRAM2 = PRAM3 = 0 * PRAM = 1....NUMERIC (ONLY PRAM1 USED) PRAM1 = # * PRAM = 2 ...NOT USED * PRAM = 3 ... ASCII (USES PRAM1,PRAM2,PRAM3 ) * * S1 - S6 ARE DEFINED THE SAME EXCEPT THEY ARE ONE WORD ONLY * NAMRR NOP JSB NAMR THIS IS THE RELO LIBR PARSING ROUTINE DEF *+5 RETURN ADDR DEF IPBUF ADDRESS OF 10 WORD PARSED BUFFER DEF STRNG ADDRESS OF BUFFER TO BE PARSED DEF SLONG CHARACTER LENGTH DEF ISTRC CHAR OFFSET IN STRNG FOR NEXT PRAM JMP NAMRR,I RETURN TO CALLER * * * THIS SUBROUTINE IS USED IF THE COMMAND FILE FOR * INPUT IS AN INTERACTIVE LU. IT OUTPUTS A LOADR * PROMPT WHICH IS /LOADR: * PRMTR NOP JSB EXEC DEF *+5 DEF P2 DEF FILE2 DEF PROMT DEF P6 JMP PRMTR,I PROMT ASC 6, /LOADR: _ ASC 1,?? * * * THE IECHO ROUTINE ECHOS COMMAND FILE COMMANDS AND ECHOS * ANY BAD COMMANDS ENCOUNTERED IN THE COMMAND FILE * IT ASSUMES THE WORD COUNT IN ' CLEN ' AND THE BUFFER * TO BE OUTPUT IN ' DSTRG '. * IECHO NOP LDA CLEN RAL WORD COUNT IS NOW CHAR COUNT LDB DSTRG GET THE BUFFER ADDRESS JSB DRKEY OUTPUT IT JMP IECHO,I RETURN TO CALLER * * * *THE FLERR ROUTINE HANDLES ALL FILE ERRORS. CALLING SEQUENCE: * * LDA WITH ERROR CODE (NEGATIVE) * LDB WITH ADDRESS OF FILE * JMP FLERR * * *THIS ROUTINE WILL CLOSE ALL FILES FLERR STB EFILE SAVE NAME OF FILE CMA,INA MAKE ERROR POSITIVE JSB CNV99 CONVERT TO ASCII STA EFBUF+4 PUT INTO ERROR MESSAGE LDA EFILE,I GET THE FILE NAME STA EFBUF+10 AND ISZ EFILE PUT LDA EFILE,I IT STA EFBUF+11 INTO ISZ EFILE THE LDA EFILE,I ERROR STA EFBUF+12 MESSAGE . * * LDA P26 GET THE CHAR COUNT LDB DEBUF AND THE ADDRESS JSB DRKEY NOW PRINT THE ERROR MESSAGE * LDA DFLAG GET THE INTERACTIVE CMND FILE WORD SZA,RSS ARE WE INTERACTIVE ? JMP LDI5 NO, DO THE REST OF THE ERROR THING * JMP NXTOP GO GET NEXT COMMAND * * * EFILE NOP DSTRG DEF STRNG POINTER TO STRING BUFFER P26 DEC 26 *THE FCLOSE ROUTINE CLOSES ALL FILES OPEN TO THE *LOADR. * FCLOS NOP JSB CLOS1 JSB CLOS3 JSB CLOS2 JMP FCLOS,I * CLOS1 NOP LDA TYPE1 GET THE TYPE WORD FOR THE FILE CLB STB TYPE1 CLOSE OUT THE FILE TYPE WORD ERA,SLA IS IT A FILE ? RSS YES JMP CLOS1,I NO, LOOK AT THE NEXT ONE JSB CLOSE CLOSE THE FILE DEF *+2 DEF IDCB1 JMP CLOS1,I * CLOS2 NOP LDA TYPE2 CLB STB TYPE2 CLOSE OUT FILE TYPE WORD STB DFLAG AND INTERACTIVE LU WORD ERA,SLA IS IT A FILE RSS YES JMP CLOS2,I NO JSB CLOSE YES DEF *+2 DEF IDCB2 JMP CLOS2,I * CLOS3 NOP LDA TYPE3 ERA,SLA RSS JMP CLOS3,I JSB CLOSE DEF *+2 DEF IDCB3 * CLA,INA SET UP THE STA TYPE3 NUMERIC FIELD IN THE TYPE WORD LDB TYPE2 GET THE CMND TYPE SZB,RSS IF NO COMMAND MODE JMP USEL1 USE LU 1 ERB,SLB IS IT A FILE OR AN LU ? JMP USEL1 A FILE * LDA FILE2 AN LU AND M77 KEEP ONLY LU BITS JSB INTER SEE IF IT IS INTERACTIVE USEL1 CLA,INA ITS NOT, SO USE LU1 STA LISTU AS THE LIST LU JMP CLOS3,I RETURN * * JMP CLOS3,I RETURN * DEBUF DEF EFBUF EFBUF ASC 13, FMGR -XX ON FILE * *THE INTER SUBROUTINE DETERMINES IF THE INPUT LU# IS AN *INTERACTIVE LU OR NOT. IN ADDITION, THE LU IS CHECKED TO SEE IF *IT IS IN RANGE. IF NOT IT IS ASSUMED TO BE AN INPUT ERROR AND THE *LOAD IS ABORTED. *LASTLY, IF THE DEVICE IS NOT INTERACTIVE IT IS LOCKED. * * * CALLING SEQUENCE : LDA LU# * JSB INTER * * RETURN P+1 IF NOT INTERACTIVE * P+2 IF INTERACTIVE * INTER NOP SZA,RSS IF BIT BUCKET JMP INTER,I ITS NOT INTERACTIVE STA ANLU# SAVE THE LU # FOR RETURN SSA IF NEG, FLUSH HIM JMP LDI5 CMA MAKE NEG ADA P64 ADD IN CORRECT RANGE SSA JMP LDI5 JSB EXEC GET THE EQT INFO ON THE LU# DEF *+6 DEF P13 DEF ANLU# DEF QTEMP EQT WORD 5 PLACED HERE DEF PTEMP EQT WORD 4 PLACED HERE DEF RTEMP SUBCHANNEL IN LOWER 5 BITS HERE * LDA QTEMP GET EQT WORD 5 AND MEQT GET THE EQT TYPE SZA,RSS IF DVR00 THEN JMP BUMPR BUMP RETURN ADDRESS * CPA M2400 IF DVR05 THEN CHECK THE SUBCHANNEL RSS CPA M3400 DO IT FOR DVR 07 ALSO RSS JMP NBUMP NOT INTER ACTIVE, SO RETURN LDA RTEMP GET THE SUBCHANNEL AND M37 KEEP ONLY SUBCHANNEL BITS SZA,RSS IF = 0, THEN ITS INTERACTIVE BUMPR ISZ INTER NBUMP LDA ANLU# JMP INTER,I * MEQT OCT 37400 ANLU# NOP M2400 OCT 2400 M3400 OCT 3400 * * * * THE BREAK ROUTINE CATCHES ANY PROGRAM BREAKS AND DOES * A CLEAN TERMINATION. * BREAK NOP JSB IFBRK DEF *+1 SSA ANY BREAK INPUT ? JMP ABORT YES , SO ABORT THYSELF JMP BREAK,I NO SO JUST RETURN * PTEMP NOP QTEMP NOP RTEMP NOP SKP * * HERE WE DECIDE WHERE THE INPUT IS TO BE READ FROM. THE NEW * INPUT COULD BE FROM LU, OR A FILE. SPC 2 * DMANE LDA FILE1 GET THE READ LU OR FILE # LDB TYPE1 NO SO GET THE TYPE ERB,SLB IS IT A FILE OR AN LU ? JMP F1OPN A FILE. SO LETS OPEN IT. * JSB INTER AN LU SO CHECK IT OUT. IF P1=0, RSS JMP LDI5 IOR M300 SET THE BINARY AND V BITS STA PGMIN SET NEW INPUT LU IOR B400 SET EOT CONTROL WORD STA SEOT * JSB EXEC SET EOT ON INPUT UNIT DEF *+3 DEF P3 DEF SEOT * CLA SET FLAG FOR 'LG NOT BEING USED' STA LGOU * LDRIN LDA LGOU GET 'LG USE' FLAG SZA LG BEING USED FOR INPUT ? JMP LDRN2 YES, READ FROM LG AREA. LDA TYPE1 NO, SO GET THE READ TYPE WORD ERA,SLA IS THE READ FROM AN LU OR FILE JMP RREAD A FILE SO GO READ THE NEXT RECORD. * SKP * * LOAD FROM INPUT LU * JSB EXEC DEF *+5 DEF P1 1 = READ REQUEST DEF PGMIN PROG INPUT UNIT NO. DEF LBUF LBUF = INPUT BUFFER DEF P64 BUFFER LENGTH = 64 WORDS * AND M240 EOF OR EOT? SZA NO JMP RECLS YES, CLOSE OUT THE LU SZB WHAT ABOUT THE XMISSION LENGTH ? JMP TESTR NON ZERO SO GO PROCESS JMP RECLS b ZERO, SO CLOSE OUT THE LU * * PGMIN OCT 305 SEOT OCT 705 B400 OCT 400 * * M240 OCT 240 * SPC 1 * F1OPN JSB OPEN OPEN THE FILE ! DEF *+8 DEF IDCB1 DCB DEF IERR1 ERROR FLAG DEF FILE1 ASCII FILE NAME DEF IPTN1 READ OPTION DEF F1SC SECURITY CODE DEF F1DSC CART REF # DEF IDCBS # OF BUFFER WORDS * SSA,RSS ANY ERROR IN THE READ ? JMP FNXT1 NO LDB F1 YES , GET THE FILE NAME JMP FLERR AND REPORT FNXT1 CLA STA #SEGS CLEAR # OF SEGMENTS IN THIS FILE FLAG STA #NAMS CLEAR # OF NAMS FOUND WHILE SCAN FOR NEXT SEG * SPC 1 RREAD JSB READF READ THE NEXR RECORD DEF *+6 DEF IDCB1 DEF IERR1 DEF LBUF RELOCATABLE RECORD BUFFER ! DEF P64 DEF LEN ACTUAL RECORD LENGTH READ * SPC 1 SSA,RSS ANY ERRORS ? JMP FNXT2 NO LDB F1 YES, GET THE FILE NAME JMP FLERR AND REPORT SPC 1 FNXT2 LDA LEN GET THE RECORD LENGTH READ SZA,RSS ZERO RECORD LENGTH ? JMP RREAD YES, SO TRY AGAIN SSA,RSS NO, WAS IT A NEG LENGTH ( -1 ) JMP TESTR NO, SO GO PROCESS RECORD ! SPC 1 LDA RSCNX YES ! SZA WERE WE RESCANNING THE FILE ?? JMP NSCAN YES NOW GO RESET THE FILE BACK * LDA LIBFL IS THIS A LIBRARY SCAN ? ADA SCSEG AND ALSO NOT A SCAN TILL SEG FOUND ? SZA,RSS WELL? JMP CK#SG NO, CHECK IF ANY SEGMENTS IN THIS FILE LDA OP1? YES, BUT DID HE SAY SE, OR SEXXXX, ? CPA ASNUL WELL ? JMP RECLS SE, SO DON'T LOOK FOR BACKWARD REFS ISZ NUPLS SEXXX -- . SO WAS ANYTHING LOADED LAST PASS ? JMP DUMMY YES, SO DO IT AGAIN (BACKWARD REF FIX) JMP RECLS NO, SO JUST GO CLOSE THE FILE * CK#SG LDA #SEGS GET THE # OF SEGMENTS LOADED SZA,RSS ANY ? JMP RECLS NO, SO GO CLOSE FILE * LDA #NAMS GET THE # OF NAMS FOUND WHILE SCAN FOR SEG CMA,INA,SZA ANY NAMS AFTER THE SEG ? JMP SCANW YES. * RECLS JSB CLOS1 NO , EOF REACHED. CLOSE FILE * ISZ SKP.1 SKIP IF 1ST CMND NOT YET DONE RSS JMP SECK1 GO DO LAST COMMAND * LDA TYPE2 GET THE CMND FILE TYPE WORD. SZA IS THERE A CMND FILE ? JMP NXTOP YES, SO GO GET NEXT COMMAND * CLFL1 LDA P3 NO CNMD FILE & NO RELOC FILE. MUST BE LDB MSEG FINISHED WITH USER INPUT. SO IF SZB THE PROG IS SEGMENTED. SET LAST SEG STA MSEGF FLAG. JMP LOADX NOW GO FINISH THE LOAD. * * F1 DEF FILE1 POINTER TO RELOC FILE BUFFER LEN NOP LENGTH OF READ OF RELO FILE ASNUL ASC 1, A BLANK OP1? NOP 2ND WORD OF SEARCH COMMAND (SEXXCH) * * * ALL FORCE LOADS COME HERE TO CLEAN UP FIX UP TABLE * * FIXCL LDA MSEG GET THE SEGMENTED PROG FLAG SZA,RSS IS PROG SEGMENTED ? JMP NODEX NO, DON'T NEED TO CLEAN UP FIXUP TABLE. * JSB SILST SET TO SCAN THE SEGMENTS LDB TLST LST FIXC0 CPB PLST END? JMP NODEX YES GO FINISH * STB LST1 SET LST1 FOR FIXAL ADB P3 TO GET THE LDA B,I DEFINED FLAG AND P7 ISOLATE IT CPA P2 UNDEFINED? JMP FIXC1 YES GO DEFINE IT * FIXC2 ADB P2 NO INDEX TO THE NEXT ONE JMP FIXC0 AND GO LOOK AT IT * FIXC1 LDA M2000 SET TYPE TO 4 (IN HIGH BYTE) STA B,I DEFINE THE SYMBOL INB SET ITS VALUE CLA STA B,I TO ZERO JSB FIXAL GO DO ALL FIXUPS LDB LST4 RESTOR B JMP FIXC2 AND CONTINUE THE LOOP * ERR05 ASC 1,05 ERR10 ASC 1,10 P13 DEC 13 PLFLG NOP LDI5 LDA ERR10 JMP ABOR * * * ^ * * SYMBOL TABLE OVERFLOW * LOVER EQU * JSB CPRNM PRINT MODULE NAME(IF PRSENT) LDA ERR05 SET CODE EQUAL LST OVERFLOW ABOR JSB ERROR ABORT CLA CLEAR PROG NAME STA PRAM IN NAME PASSED BACK STA PRAM+1 THRU PRTN ROUTINE STA PRAM+2 LDA MERR GET THE ERROR CODE STA PRAM+3 PUT INTO TO ERROR CODE LDA MERR+1 AND THE # OF THE ERROR CODE STA PRAM+4 STUFF IT IN RETURN MESSAGE FOR FATHER LDA P13 LDB MES10 MES10 = ADDR "LOADR ABORTED" JMP *+1,I TERMINATE LOADER(AND THIS PROGMER) DEF LTERM (SAVE A BP LINK TOO ) * MES10 DEF *+1 ASC 7,LOADR ABORTED SKP * * INPUT FROM SYSTEM LIBRARY SCAN. SPC 3 * LDRN2 LDB XCUR IF CURRENT ADDR. OF XBUF = CPB XBUFA FWA OF XBUF, RSS READ NEXT SECTOR JMP LDRN4 DON'T BOTHER ITS IN CORE * LDRN3 LDB LGSEC CHECK CURRENT SECTOR #. CPB SECT2 IF CURRENT = LAST SECTOR, CLB,RSS SKIP JMP LDRN6 GO TO INPUT SECTOR. STB LGSEC RESET SECTOR # TO ZERO ISZ LGTRK ADD 1 TO TRACK # * READ NEXT SECTOR FROM LG AREA OR SYS LIB * LDRN6 JSB EXEC DEF *+7 DEF P1 DEF P2 DEF XBUF DEF P128 READ 2 LOGICAL SECTORS (1 PHYSICAL 7900) DEF LGTRK DEF LGSEC * ISZ LGSEC -ADD 2 FOR NEXT SECTOR. ISZ LGSEC LDA XBUFA SET STARTING BUFFER STA XCUR ADDR LDA N128 AND STA LGT1 COUNTER = -128. LDB LBOEF IS THE LIB ODD/EVEN SSB,RSS FLAG SET??? JMP LDRN4 -NO- CLA CLEAR THE STA LBOEF FLAG LDA N64 RESET COUNT FOR HALF SECTOR ONLY STA LGT1 CLA STA XCNT SET REC COUNT TO ZERO LDA XBHLF SET THE BUF ADDR STA XCUR TO THE ODD SECTOR * LDRN4 CLA IF C;mURRENT CPA XCNT REC COUNT = 0, RSS THEN SET FOR NEW REC. JMP LDRN5 CONTINUE WITH CURRENT REC. LDA XCUR,I GET NEXT ALF,ALF REC LENGTH (UPPER CHAR.), AND M77 SET NEGATIVE CMA,INA,SZA,RSS JMP LDRNE YES, READ NEXT SECTOR STA XCNT NO, SAVE COUNT FOR MOVE LDA ALBUF RESET ADDR OF STA LGT2 LBUF FOR MOVE. * LDRN5 LDA XCUR,I MOVE WORD FORM XBUF STA LGT2,I TO LBUF ISZ XCUR UPDATE BUFFER ISZ LGT2 ADDRES. ISZ XCNT INDEX NOP ISZ LGT1 COUNTERS. NOP CLA LDB XBUFA RESET ADDR OF CPA LGT1 'XBUF' IF STB XCUR END OF XBUF. CPA XCNT IF END OF REC, JMP TESTR GO TO PROCESS IT. CPA LGT1 IF END OF XBUF, JMP LDRN3 GO TO READ NEXT SECTOR. JMP LDRN5 CONTINUE WITH CURRENT REC. * N64 DEC -64 N128 DEC -128 P128 DEC 128 LDRNE LDA XBUFA WAS ZERO LENGTH REC AT CPA XCUR START OF A SECTOR? RSS JMP LDRN3 NO, READ NEW SECTOR. CCB YES, SUBTRACT 1 FROM CURR SECTOR ADB LGSEC IN CASE END OF LG ON ODD SECTOR JMP LDRN6 CHECK FOR END OF LG * SKP * * SUBROUTINES TO SAVE AND RESTORE DISC READ PARAMETERS. * * * * LGTRK NOP TRACK LGSEC NOP SECTOR LGS# NOP # SECS / TRK LGT1 NOP DOWN COUNTER IN XBUF LGT2 NOP CURRENT LBUF ADDR XCNT NOP REC LENGTH RIC NOP REC INDICATOR L6 OCT -6 XBHLF DEF XBUF+64 ADDR OF END OF XBUF XBUFA DEF XBUF DEFINE ADDR OF XBUF XCUR DEF XBUF * SKP * * THE SCANX ROUTINE SAVES OUR LOCATION IN THE FILE AND * THEN REWINDS THE FILE TO THE BEGINING SO THAT THE FILE * MAY BE SCANNED FOR UNDEFS. THIS ALLOWS A SUBROUTINE TO * PLACED IN THE FILE ONLY ONCE, BUT TO HAVE IT APPENDED TO * ANY SEGMENT OR MAIN THAT CALLS IT. SCANX IS CALLED WHENEVER * A SEGMENT NAM IS ENCOUNTERED IN THE FILE. WHEN THE END OF * FILE IS ENCOUNTERED THE FILE MUST ALSO BE SCANNED (IE MAY BE * THE LAST SEGMENT IN THE PROGRAM) IN THIS CASE EOF IS REACHED * INSTEAD OF THE NEXT SEGMENT. THIS IS DETECTED BY THE FILE * READ ROUTINE. IF ONE OR MORE NAMS ARE ENCOUNTERED AFTER THE * SEGMENT BUT BEFORE THE NEXT SEGMENT OR EOF THEN * CONTROL IS TRANSFERED TO SCANW (A REG IS NEG). THEN #SEGS IS * MADE NEG AS A FLAG SO THAT THE NSCAN ROUTINE WILL CLOSE THE * FILE INSTEAD OF GOING OF TO DO A SYSTEM LIBRARY SEARCH. * * SCANW STA #SEGS SET FLAG. EOF REACHED & RESCANNING FILE CLA STA SCSEG CLEAR SCAN TILL SEG FOUND FLAG SCANX CCA SET THE RESCAN FLAG HERE.(NOT BELOW) STA RSCNX JSB LOCF SAVE OUR CURRENT POSITION DEF *+6 DEF IDCB1 DEF IERR1 DEF IREC DEF IRB DEF IOFF * SSA ANY ERRORS ? JMP DORWN YES ! LDA IREC GET THE RECORD # CPA P2 IF REC # IS 2, THEN DON'T SCAN FILE JMP NOSCN * DUMMY JSB APOSN NO SO REWIND FILE DEF *+6 DEF IDCB1 DEF IERR1 DEF P1 DEF ANOP DEF ANOP * SSA,RSS ANY ERRORS ? JMP SCFLG NO, SO GO SET THE FLAGS DORWN LDA F1 YES JMP FLERR SO REPORT THE ERROR * SCFLG CLA NOW SET A FEW FLAGS STA SLIBF NOT SYS LIB STA LGOU NOT LG AREA STA IDCB1+13 CMA STA LIBFL IS A SCAN OF LIBRARY STA NUPLS NO ROUTINES LOADED STA PLFLG NAM MUST BE FIRST JMP RREAD NOW GO SCAN THE FILE * ANOP NOP * * * THE NSCAN ROUTINE SETS THE FILE BACK TO THE ORGINAL * LOCATION BEFORE THE SCANX ROUTINE REWOUND IT. * * NSCAN ISZ NUPLS ANYTHING LOADED LAST SCAN ?? JMP DUMMY SO DO IT AGAIN * JSB APOSN  SET THE FILE BACK UP DEF *+6 DEF IDCB1 DEF IERR1 DEF IREC DEF IRB DEF IOFF * SSA ANY ERRORS ? JMP DORWN YES NOSCN CLA WE NEED TO RESET A FEW FLAGS STA LIBFL NOT A LIBRARY SCAN STA RSCNX NO LONGER RESCANNING THE FILE * LDB #SEGS GET THE # OF SEGS LOADED FLAG SSB,RSS WAS THE RESCAN DUE TO EOF OR NEW SEGMENT JMP LOADX NEW SEGMENT. SCAN SYS LIB FOR OLD SEG JMP RECLS EOF. SO GO CLOSE THE FILE . * * IREC NOP IRB NOP RSCNX NOP 0/-1 NO RESCAN/ RESCAN OF FILE IN PROGRESS IOFF NOP LGOU NOP LG (SYS LIBRARY) IN USE FLAG #SEGS NOP #OF SEGMENTS IN THIS FILE FLAG * SKP * TEST FOR VALID REC * TESTR LDA LBUF+1 GET REC IDENTIFIER ALF,RAR AND M7 ISOLATE RIC STA RIC SAVE REC ID CODE SZA SKIP - ABSOLUTE REC ADA L6 SUBTRACT 6B SSA,RSS SKIP - VALID REC TYPE JMP RCERR INVALID REC TYPE * TEST FOR VALID CHECKSUM LDA LBUF GET REC LENGTH AND M7400 AND ZERO LOWER CHARACTER, STA B BLF,BLF ROTATE TO LOW B CMB,INB COMPLEMENT ADB P3 ADJUST FOR ADDR OF WORD 4 SSB,RSS SKIP - VALID REC LENGTH JMP RCERR INVALID (SHORT) REC STB WDCNT SET WORD COUNT FOR CHECKSUM LDA LBUF+1 GET WORD 2 - INITIALIZE CHECKSUM LDB ALBUF GET ADDR OF LBUF ADB P3 ADJUST ADDR FOR WORD 3 TEST1 ADA B,I ADD WORD TO CHECKSUM INB INCR CURRENT LBUF ADDR ISZ WDCNT SKIP - END OF REC JMP TEST1 CONTINUE CHECKSUM TEST CPA LBUF+2 EQUAL TO GIVEN CHECKSUM? JMP LDRC YES - PROCESS REC * * CHECKSUM ERROR. PRINT MODULE NAME * (MODULE NAME WILL BE IN MBUF IF A NAM REC * .HAS ALREADY BEEN READ. OTHERWISE, IT WILL NOT * BE PRINTED SINCE IT MAY BE GARBAGED IN THE * THE NAM RECORD ITSELF. * JSB CPRNM PRINT NAME IF ANY LDA ERR01 CODE 01 = CHECKSUM ERROR LSUSP JSB ERROR PRINT DIAGNOSTIC ON SYSTEM TTY JMP ABORT GO ABORT THYSELF * ERR01 ASC 1,01 ERR02 ASC 1,02 * * * ILLEGAL RECORD TYPE * RCERR EQU * JSB CPRNM PRINT MODULE NAME,IF GOOD LDA ERR02 CODE 02 = ILLEGAL REC JMP LSUSP * * PRINT NAME OF MODULE(OR ENTRY POINT) * * CALLING SEQUENCE: * JSB PRNAM * DEF TO NAME TO BE PRINTED * * PRNAM NOP PRINT 5 CHARACTERS LDA P5 LDB PRNAM,I GET NAME ADDR ISZ PRNAM BUMP FOR RETURN JSB SYOUT PRINT MESSAGE JMP PRNAM,I RETURN * * CHECK IF GOOD REC HAS BEEN READ BEFORE * PRINT NAME. * CPRNM NOP LDA MBUF GET "VALID NAME" FLAG SZA,RSS NAME READ? JMP CPRNM,I NO, EXIT JSB PRNAM PRINT NAME DEF MBUF JMP CPRNM,I EXIT * * CLASSIFY RECS BY TYPE LDRC LDA RIC GET REC IDENTIFICATION CODE LDB PLFLG GET LOADING FLAG CPA P1 TYPE = NAM ? JMP NAMRX YES - PROCESS NAM REC SZB SKIP - NOT LOADING JMP NMERR REC OUT OF SEQUENCE CPA P2 TYPE = ENT? JMP ENTR YES - PROCESS ENT REC CPA P3 TYPE = DBL? JMP DBLR YES - PROCESS REC CPA P4 TYPE = EXT? JMP EXTR YES - PROCESS EXT REC * SKP * * *** PROCESS END RECORD *** * * * JSB BREAK SEE IF WE SHOULD BREAK LDA IGNOR SZA,RSS LATEST SUBROUTINE LOADED ? JMP RESET YES, PROCESS AS NORMAL. * LDA BID3 NO, THEN RESTORE CURRENT STA CWABP FW AVAILABLE ON BASE PAGE. LDA BID4 AND END OF LST. STA PLST JMP NOCLR SKIP CLEARING OF BIT15 IN LST1 * * TEST FOR OVERFLOW OF COMMON * RESET LDA MCOMX GET COMMON LENGTH OF LAST MODULE CMA,INA SUBTRACT FROM INITIAL SET LENGTH ADA MXCOM SSA,RSS IF SAME OR LESS JMP NOCLR THEN OK * * COMMON ALLOCATION ERROR * CMERR JSB CPRNM PRINT MODULE NAME LDA ERR06 ELSE ERROR 06 - COMMON BLOCK JMP ABOR ERROR. ERR06 ASC 1,06 MCOMX NOP LEN OF LAST MODULE SCANNED/LOADED * NOCLR LDA XBUFA RESET ADDR OF CPA XCUR IF ALREADY SET JMP NOUSE THEN NO USE CHECKING FURTHER LDB XBHLF GET THE ODD SEC BOUNDARY CMB,INB ADB XCUR IS CURRENT IN EVEN OR ODD SZB IF ZERO THEN IN LOWER HALF SSB LDA XBHLF SET FOR ODD SECTOR STA XCUR LGO BUFFER ON END REC. LDB N128 SET DOWN COUNTER TO PROPER VALUE CPA XBHLF LDB N64 STB LGT1 NOUSE CLA SET REC INDEX STA XCNT = 0 TO GET SECTOR. LDA ALBUF GET ADDR OF LBUF ADA P3 ADJUST FOR WORD 3 OF END REC STA CURAL SET CURRENT LBUF ADDR LDA LBUF+1 GET PRIMARY ENTRY POINT FLAG SLA,RSS SKIP - HAS PRIMARY ENTRY POINT JMP NOPRE OMIT PROCESSING NO ENTRY POINT SKP * * * PRINT MEMORY MAP ENDKY LDA PRENT,I GET PRIMARY ENTRY POINT. SZA SKIP - PRENT NOT SET JMP ENDK1 TEST FOR DEBUG LOADED LDA LBUF+3 GET WORD 3 OF END REC ADA PPREL ADD PROG RELOC BASE STA PRENT,I SET IN ID SEGMENT LDA MBUF GET PROG NAME 1,2 STA NAM12,I SET IN ID SEGMENT LDA MBUF+1 GET PROG NAME 3,4 STA NAM34,I SET IN ID SEGMENT LDA MBUF+2 GET PROG NAME 5 AND M7400 ISOLATE UPPER CHAR IOR PTYPE SET PROG TYPE STA NAM5,I AND SET IN ID SEGMENLHNT. AND P7 ISOLATE PROG TYPE CPA P5 IF PROCESSING SEGMENT JMP IDSN0 THEN FORGET REMAINING PARMS LDA NPAR STORE PRIORITY SZA FROM NAME REC STA PRIOR,I IF NON-ZERO. LDA NPAR+1 IF RESOLUTION SZA,RSS CODE = 0, SKIP SETTING OTHER JMP IDSN0 TIME PARAMETERS. AND P7 PUT ALF,ALF RESOLUTION ALF,RAL CODE (3 BITS) STA B IN 15-13 LDA NPAR+2 AND AND M7770 EXECUTION MULTIPLE IOR B IN 11-00 STA RESL,I LDA NPAR+5 GET SECONDS MPY P100 SCALE TO TMS ADA NPAR+6 TMS+SCALED SECONDS STA NPAR+5 SAVE LDA NPAR+3 GET HOURS MPY P60 SCALE TO MINUTES ADA NPAR+4 ADD MINUTES MPY P6K SCALE TO TMS CLE SET FOR DOUBLE ADD ADA NPAR+5 TMS+SCALED SECONDS SEZ WAS THERE A CARRY ? INB YES, BUMP (B) tkNSET01 CLE,SSB JMP SET02 ADA NDAY+1 SEZ,CLE INB ADB NDAY JMP SET01 SET02 DST TMDY1,I SAVE FOR ID SEG * SKP * TEST FOR DUPLICATE PROG NAMES IDSN0 CCA STA NMFLG SET PROG NAME FLAG IDSN JSB MIDN FIND THE ID IF ONE JMP NOPRE NONE SO OK LDA P2 IF OPERATION IS REPLACEMENT CPA EDFLG EDITING, IGNORE DUPLICATE, JMP NOPRE AND CONTINUE. * LDA MBUF GET THE NAME STA MESS7+12 AND PUT IN DUPLICATE PROG LDA MBUF+1 NAME MESSAGE BUFFER STA MESS7+13 LDA MBUF+2 STA MESS7+14 LDA P27 LDB MESS7 MESS7 = ADDR: DUPLICATE PROG NAM JSB SYOUT PRINT: DUPL. PROG NAME ISZ NMFLG SKIP - TRY RESETTING PROG NAM JMP ABORT INVALID RESET PROG NAME LDA RENAM GET ASCII '##' STA MBUF SET PROG NAME 1,2 = '..' STA NAM12,I IN BOTH COPIES. JMP IDSN REPEAT DUPLICATE PROG NAME SCAN SPC 1 P27 DEC 27 M7770 OCT 7777 NPAR BSS 7 NAME RECORD PARAMETERS RENAM ASC 1,.. MESS7 DEF *+1 ASC 14,DUPLICATE PROG NAME - * SPC 1 ENDK1 JSB DEBUG TEST FOR DEBUG LOADED NOPRE CCA STA PLFLG SET 'LOOK FOR NAM' FLAG LDA IGNOR SZA,RSS IF LAST SCAN USEFUL JSB MAPPR THEN PRINT MEM MAP & UPDAT BASE * JSB INLST INITIALIZE LSTX LDB TLST CPORD CPB PLST END OF LST ? JMP SLTST YES - SET UP NEXT OPERATION ADB P2 CLEAR POSSIBLE ORDINAL LDA B,I FROM LST 3. AND M7400 STA B,I ADB P3 JMP CPORD CONTINUE CLEARING PROG ORDINALS SPC 1 * SLTST CLA CLEAR "VALID NAME" FLAG STA MBUF LDA SLIBF GET DISC LIB LOAD FLAG SZA LOADING SYSTEM LIB ? JMP RSET? YES, CHECK ON NEXT OPERATION. * LDA MSEG THIS A SEGMENTED5 PROG ? CPA P2 WELL ? RSS YES JMP LDRIN * LDA PROGT GET THE PROG TYPE CPA P5 A SEGMENT ? RSS YES JMP LDRIN * LDA LIBFL THIS A SCAN OR A LOAD SZA WELL ? JMP LDRIN A SCAN * CCA A LOAD, SO CHANGE IT TO A SCAN STA LIBFL CLA,INA AND SET THE SCAN TILL SEGMENT FLAG STA SCSEG JMP LDRIN * NMFLG NOP PROG NAME FLAG COMIN NOP COMMON DECLARATION FLAG MESS9 DEF COM ACOM3 DEF COM+3 ACOM6 DEF COM+6 COM ASC 9,COM SEGM NOP SKP * MAPPR NOP LDB PLGTH GET LEN WORD SZB IF ZERO OR SSB COMPILER PRODUCED JMP MAPP1 FORGET THE BSS FILL * ADB N1 ELSE SET TO RELATIVE ADDR OF ADB PPREL GET REAL CORE ADDR STB A INA CPA TPREL WAS IT LOADED? JMP MAPP1 YES SKIP THE FILL * CLA NO FILL THE BSS WITH ZERO'S JSB OUTAB OUTPUT FILL WORDS MAPP1 JSB PRMAP PRINT MEM MAP & UPDATE BASES JMP MAPPR,I RETURN * * * * WHEN LOADING AND A TYPE 5 NAM IS ENCOUNTERED * THEN CONTROL TRANSFERS HERE. ALL RELOCATABLE READ * POINTERS ARE SAVED AND THE SYSTEM LIBRARY IS SCANNED * FOR THE LAST MAIN OR SEGMENT. * * SEOF LDA MSEG GET THE SEGMENT LOADING FLAG SZA,RSS IS IT SET ? ISZ MSEG NO, SO SET IT. CLA CLRAR THE SCAN TILL SEGMENT FLAG STA SCSEG LDB SEGM GET THE SEGMENT BASE ADDRESS CPB PPREL IF SAME AS CURRENT SEGMENT THEN JMP NAMR1 LAST SEGMENT LOADED. THIS IS NEW ONE * LDA PTYPE GET THE PROG TYPE CPA P2 IS IT RT JMP LL23 YES, SO ITS AN ERROR * ISZ #SEGS INCREMENT THE # OF SEGS IN THIS FILE FLAG LDA N60 GET NEG COUNT JSB MOVE DEF LBUF $ SOURCE OF MOVE DEF SGNAM DESTINATION (SEGMENT NAM BUFFER) * LDA TYPE1 GET THE INPUT TYPE WORD ERA,SLA WHERE IS THE INPUT FROM ? RSS A FILE JMP LOADX SO FOR GET ABOUT ANY RESCAN * LDA RSCAN GET THE RESCAN FLAG SZA,RSS RESCAN THIS FILE BEFORE SYS LIB SEARCH ? JMP SCANX YES ! * CCA NO, SET A FLAG TO ALLOW THE RESCAN STA RRSCN ON UNDEFS ! (20% FASTER ON THIS PATH) JMP LOADX * * RRSCN NOP 0/-1 NO FILE RESCAN/ALLOW RESCAN ON UNDEFS RSCAN NOP 0/1 NO/YES VARY SYS LIB SCAN SEQUENCE SCSEG NOP 0/1 NO / YES SCAN TILL SEGMENT FOUND #NAMS NOP # OF NAMS FOUND AFTER SEG & BEFORE NEXT SEG * * LL23 LDA ERR23 GET THE ERROR FLAG JMP ABOR AND ABORT THYSELF ERR23 ASC 1,23 * SKP * PROCESS NAM REC NAMRX SZB,RSS SKIP - VALID REC SEQUENCE JMP NMERR REC OUT OF SEQUENCE LDA FWABP GET DUMMY BP BASE CMA,INA AND SUBTRACT FROM ADA CWABP CURRENT DUMMY BP LOCATION. ADA BPFWA ADD OFFSET TO REAL BP BASE STA BPREL AND SET AS NEW BP REL BASE CLA SET UP FLAG TO 'NOT IGNORE' STA IGNOR LDA LBUF+9 GET PGM TYPE STA PROGT AND SAVE IT. LDA LIBFL ADA SCSEG SZA IF SCANNING LIB JMP NAMR1 THEN AVOID SEGMENT LOOKUP. LDB LBUF+9 GET THE NAM TYPE CPB P5 IF SEGMENT JMP SEOF SEE IF THIS FIRST ONE & SAVE NAM BUFFER SPC 1 * NAMR1 LDA SCSEG IS THIS A SCAN TILL NEXT SEG FOUND ? SZA WELL ? ISZ #NAMS YES. * LDA LBUF+8 GET COMMON LENGTH STA MCOMX SET COMMON LENGTH SZA,RSS SKIP - HAS COMMON JMP COMOK NO COMMON, TEST B.P. LENGTH ISZ COMIN YES, HAS COMMON. SKIP IF FIRST & LOCAL. JMP COMOK ASSUME COMMON OK TILL 'END' IS READ * LDB URFWA GET THE BASE LOAD ADDRESS ADB P2 ACCOUNT FOR THE X&Y REGISTERS CPB TPREL COMPARE TO HIGH MAIN RSS = , SO COMMON DECLRATION OK JMP CMERR COMMON ERROR STA MXCOM FIRST COMMON, SET MAX LENGTH LDA FWA ADJUST RELOCATION BASES SPC 1 ADA P2 2 WORDS FOR X-Y REG SAVE SPC 1 STA COMAD SET FWA OF COMMON (LOCAL) LDB ACOM3 GET ADDR OF COMMON MSG (LOW) JSB CONVD CONVERT LOWER COMMON BOUND LDA COMAD ADA MXCOM COMPUTE COMMON UPPER BOUND + 1 SPC 1 IFN * BEGIN NON-DMS CODE *************** STA FWA DON'T ZERO LOCAL COMMON IN RTE-II STA TPREL *** END NON-DMS CODE *************** XIF SPC 1 STA PPREL SET AS LOW PROG BOUND ADA N1 ACTUAL LWA COMMON LDB ACOM6 GET ADDR OF COMMON MSG (HI) JSB CONVD CONVERT UPPER COMMON BOUND LDA PLIST GET LIST/NO LIST FLAG SLA SKIP TO LIST MEMORY BOUNDS JMP NAMR2 OMIT LISTING, TEST COM BOUNDS. LDA P18 LDB MESS9 ADDR OF COMM BUF JSB DRKEY LIST COMMON BOUNDS NAMR2 LDA LWA CMA,INA COMPUTE LENGTH LEFT OVER AFTER ADA PPREL COMMON ALLOCATION. SSA SKIP IF INVALID COMMON LENGTH JMP COMOK COMMON DECLARATION IS OK * * MEMORY OVERFLOW ERROR * LGERR JSB CPRNM PRINT MODULE NAME LDA ERR03 03 = MEMORY OVERFLOW JMP ABOR ERR03 ASC 1,03 ERR09 ASC 1,09 * * RECORD OUT OF SEQUENCE * NMERR JSB CPRNM PRINT MODULE NAME(IF ANY) LDA ERR09 09 = REC OUT OF SEQUENCE JMP LSUSP SYMAD BSS 1 ADDR OF SYMBOL RELOCATION MXCOM NOP MAX COMMON LENGTH * * COMOK CLA SET UP FLAG TO STA PLFLG "NAM HAS BEEN READ" JSB SEMAP SET PROG NAME IN MEM MAP LDA LIBFL GET LIB SCAN FLAG SZA,RSS SCANNING LIB ? JMP PGOCK NO, CHECK FOR PROG LENGTH LDA PLST SAVE STA BID4 END OF LST ADDR LDA CWABP NEXT AVAILABLE WORD ADDR ON BP STA BID3 CCA STA IGNOR SET FLAG "TO IGNORE" PGOCK LDA LBUF+7 GET BP LENGTH SZA,RSS ANY BP RELOCATION ? JMP LDRIN NO, THEN GET NEXT REC. CMA,INA SET NEGATIVE LENGTH OF STA ABT1 BASE PAGE AREA NEEDED. BPCLR JSB ALLOC MOVE CWABP BY SAME ISZ ABT1 ZEROED AND MOVED ALL ? JMP BPCLR NO, THEN DO MORE. JMP LDRIN GET NEXT REC * PROGT NOP PROG TYPE BEING SCANNED P100 DEC 100 P60 DEC 60 P6K DEC 6000 M37 OCT 37 SKP * * THE INLST AND LSTX SUBROUTINES SET THE ADDRES FOR THE CURRENT * ENTRY IN THE LOADER SYMBOL TABLE (LST). * * INITIALIZE LSTX * * INLST SETS THE ADDRESS OF THE FIRST ENTRY IN LST IN TLST. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INLST * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * INLST NOP LDA BLST GET STARTING ADDR OF LST STA TLST SET CURRENT LST ADDR JMP INLST,I RETURN * * SPECIAL ROUTINE "SILST" * * THIS ROUTINE INITIALIZES THE LST FOR THE * BACKGROUND SEGMENT AREA ONLY, IF MAIN/SEGMENT * LOADING IS BEING DONE. IT USES THE CONTENTS * OF "SLST" - SLST IS INITIALIZED TO BE = TO * "BLST" BUT IS CHANGED AFTER THE "MAIN" PROG * IS LOADED TO BE THE ADDR OF THE ENTRY * FOLLOWING THE LAST ENTRY FOR THE MAIN. * * SAME CALLING SEQUENCE AS FOR "INLST". * SILST NOP LDA SLST SET SEGMENT LST ADDR STA TLST AS CURRENT ADDR. JMP SILST,I * * THIS ROUTINE INITIALIZES START OF LST TO BEGIN JUST * AFTER THE END OF RESIDENT LIB LST (START OF THE LST * BUILT FROM USER'S PROG) * FNLST NOP LDA FLST STA TLST JMP FNLST,I * * * SET CURRENT LST ADDRES * * THE LSTX SUBROUTINE SETS THE CURRENT LST ADDRES FROM TLST. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB LSTX * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * LSTX NOP LDA TLST GET CURRENT LST ADDR CPA PLST END OF LST? RSS YES - CONTINUE ISZ LSTX NO - INCR RETURN ADDR STA LST1 SET WORD 1 ADDR INA STA LST2 SET WORD 2 ADDR INA STA LST3 SET WORD 3 ADDR INA STA LST4 SET WORD 4 ADDR INA STA LST5 SET WORD 5 ADDR INA STA TLST SET NEXT LST ADDR CMA,INA ADA TFIX ADD FWA OF DUMMY ID SEGMENT AREA SSA,RSS IF RESULT = 0 OR <0, SZA,RSS THEN ERROR JMP LOVER OVERFLOW. JMP LSTX,I -OK, RETURN. * * * * SCAN TO SEE IF ANY UNDEFINED * (REGS MEANINGLESS ON ENTRY AND RETURN) * JSB LSTX1 * (P+1) RETURN - NO UNDEFINED * (P+2) RETURN - UNDEFINED EXIST * LSTX1 NOP JSB FNLST START LST FROM USER MAIN LDA MSEG BUT IF CPA P2 LOADING A SEGMENT JSB SILST THEN START FRM SEGMENT'S LST. LDB TLST GET CURRENT LST ADDR LSTX2 CPB PLST END OF LST ? JMP LSTX1,I YES - RETURN (P+1) ADB P3 LDA B,I GET LST4 AND P7 MASK IN STATUS CPA P2 UNDEF EXT ? JMP YEXT YES ADB P2 POINT TO NEXT SYMBOL JMP LSTX2 SEE NEXT SYMBOL YEXT ISZ LSTX1 UNDEF FOUND - BUMP RETURN ADDR JMP LSTX1,I RETURN (P+2) SKP * * READ DISK REC TO DBUF * * THE DREAD SUBROUTINE READS A DISK REC (1 SECTOR) TO DBUF. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB DREAD * RETURN: CONTENTS OF A AND B ARE DESTROYED. * DRrEAD NOP JSB EXEC REQUEST DISK READ DEF *+7 DEF P1 READ REQUEST CODE DEF DSKUN DISK LOGICAL UNIT NO. ADBUF DEF DBUF ADDR OF DISK I/O BUFFER DEF P128 NO. WORDS DEF DTRAK DISK TRACK DEF DSECT DISK SECTOR JMP DREAD,I RETURN SPC 2 * * WRITE DBUF TO DISK * * THE DWRIT SUBROUTINE WRITES THE CURRENT REC ON THE DISK. * THE ADDRESS OF THE REC IS CONTAINED IN DISKO * AND THE LENGTH OF THE REC IN DLGTH. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB DWRIT * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * DWRIT NOP JSB EXEC REQUEST DISK WRITE DEF *+7 DEF P2 WRITE REQUEST CODE DEF DSKUN DISK LOGICAL UNIT NO. DEF DBUF ADDR OF OUTPUT BUFFER DEF P128 BUFFER LENGTH DEF DTRAK DISK TRACK DEF DSECT DISK SECTOR JMP DWRIT,I RETURN * * * * * TEST AND SET FOR DEBUG CONTROL * * DEBUG TESTS IF THE CURRENT PROG LOADED WAS DEBUG. IF IT WAS, * THE PRIMARY ENTRY POINT OF THE PROG IS SET INTO * 'DEBUG', THE PRIMARY ENTRY POINT OF DEBUG IS SET INTO THE * ID SEGMENT, AND THE ADDR OF DEBUG IS SET TO BE INDIRECT. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB DEBUG * * RETURN: CONTENTS OF A AND B ARE DESTROYED,. * DEBUG NOP LDA IGNOR YES SO SEE IF THIS MODULE IS DEBUG SZA IF LAST SCAN WAS USELESS JMP DEBUG,I THEN DON'T LOOK FOR MATCH LDA MBUF GET PROG NAME 1,2 CPA CHRDE CHARS = D,E? RSS YES - CONTINUE JMP DEBUG,I RETURN - PROG IS NOT 'DEBUG' LDA MBUF+1 GET PROG NAME 3,4 CPA CHRBU CHARS = B,U? RSS YES - CONTINUE JMP DEBUG,I RETURN - PROG IS NOT 'DEBUG' LDA MBUF+2 GET PROG NAME 5 AND M7400 ISOLATE UPPER CHAR gCPA UCHRG CHAR = G? RSS YES - CONTINUE JMP DEBUG,I RETURN - PROG IS NOT 'DEBUG' * JSB SILST INITIALIZE FOR SEGMENT DSCAN JSB LSTX SET LST ADDRES HLT 0 'DEBUG' NOT FOUND IN LST LDA LST1,I GET NAME 1,2 CPA CHRDE CHARS = D,E? RSS YES - CONTINUE JMP DSCAN NO - TRY NEXT LST ENTRY LDA LST2,I GET NAME 3,4 CPA CHRBU CHARS = B,U? RSS YES - CONTINUE JMP DSCAN NO - TRY NEXT LST ENTRY LDA LST3,I GET NAME 5 AND M7400 ISOLATE UPPER CHAR CPA UCHRG CHAR = G? RSS YES - CONTINUE JMP DSCAN NO - TRY NEXT LST ENTRY * LDA LST4,I GET ENT/EXT FLAG AND P7 MASK IN STATUS CPA P2 UNDEFINED ? HLT 0 'DEBUG' IS UNDEFINED LDA PRENT,I THE PROG OR SEG PRIMARY ENT POINT LDB LST5,I AND PUT IT INTO ENTRY POINT JSB OUTAB 'DEBUG'(ON THE DISC) * LDA CURAL,I GET DEBUG TRANSFER ADDR ADA PPREL ADD CURRENT PROG RELOCATION ADDR STA PRENT,I SET 'DEBUG' TRANSFER IN ID SEG. * JMP DEBUG,I RETURN * * PROCESS ENT,EXT RECS * ENTR CCA,RSS ENT REC PROCESSOR EXTR CLA EXT REC PROCESSOR STA NXFLG SET ENT/EXT FLAG = -1/0 * LDA LIBFL GET THE LIBRARY SCAN FLAG SZA,RSS SCANNING LIBRARY JMP ADDON NO LDA PROGT YES, SO GET THE PROGRAM TYPE CPA P5 IS IT A SEGMENT ? JMP LDRIN YES, SO FORGET IT ADDON LDA LBUF+1 GET NO. SYMBOLS AND M37 ISOLATE SYMBOLS CMA,INA STA EXCNT SET ENT/EXT SYMBOL COUNT LDB ALBUF GET ADDR OF LBUF ADB P3 NEXSY LDA B,I GET SYMBOL 1,2 STA TBUF SAVE NAME 1,2 INB LDA B,I GET SYMBOL 3,4 STA TBUF+1 SAVE NAME 3,4 INB LDA B,I  GET SYMBOL 5 STA TBUF+2 SAVE NAME 5 INB STB SYMAD SAVE SYMBOL ADDR (FOR ENT) * LDB NXFLG GET ENT/EXT FLAG SZB,RSS SKIP - SET ENT ABSOLUTE ADDR JMP NOTEN OMIT SETTING ABS. ADDR FOR EXT AND P7 MASK IN RELOCATION BASE TYPE STA ENTYP SAVE ENT TYPE CLB CPA P4 IF TYPE 4 ENT JMP TYP4 THEN GO SET IT UP. ADA ENTRL ADD RELOCATION BASE ADDR LDB A,I GET PROPER RELOCATION BASE TYP4 ADB SYMAD,I ADD TO GET ABSOLUTE ADDR STB OPRND AND SAVE IT NOTEN JSB LSCAN SCAN LST FOR NAME JMP ENTX3 END OF LST * LDA LST4,I SET UP STATUS OF AND P3 SYMBOL MATCHED WITH. STA ENTST LDA LIBFL SZA,RSS SCANNING LIB ? JMP NRML NO LDA NXFLG SZA,RSS PROCESSING ENT ? JMP NRML NO LDA ENTST GET SYMBOL STATUS CPA P2 ENT MATCHED WITH EXT ? RSS YES - THEN IT IS OK. JMP ENTX5 NO - THEN FORGET IT. NRML LDA NXFLG GET ENT/EXT FLAG SZA,RSS SKIP - PROCESS ENT JMP ENTX4 COMPLETE EXT PROCESSING * LDA ENTST GET STATUS OF SYMBOL CPA P2 IF STATUS = 2 (UNDEF SYMBOL) JMP ENT2X THEN SET ENT ABS VALUE FOR EXT * * DUPLICATE ENTRY POINT * JSB CPRNM PRINT MODULE NAME JSB PRNAM PRINT ENTRY POINT NAME DEF TBUF LDA ERR07 07 = DUPLICATE ENT JMP ABOR * ERR07 ASC 1,07 * ENT2X LDA ENTYP GET ENT TYPE ALF,ALF POSITION ENT TYPE LDB LIBFL GET LIB SCAN FLAG SZB,RSS IF SCANNING LIB INA THEN SKIP THIS INSTRUCTION STA LST4,I SET LST4 CLA STA IGNOR SET TO 'NOT IGNORE' FOR LIB INA STA NUPLS SET FLAG FOR 'SOME LIB LOADED' LDA OPRND OPERAND IN IT STA LST5,I SET VALUE INTO LST. JSS|B FIXAL FIX ALL REFERENCES JMP ENTX5 COMPLETE ENT PROCESSING * SKP * ENTX3 JSB SELST SET NAME INTO LST LDB NXFLG GET ENT/EXT FLAG SZB,RSS PROCESSING EXT ? JMP EXTNM YES LDA ENTYP ALF,ALF POSITION ENT TYPE LDB LIBFL SZB,RSS LIB SCAN ? INA NO, THEN SET STATUS = 1. STA LST4,I SET LST4 LDA OPRND SET SYMBOL VALUE STA LST5,I AND SET JMP ENTX5 IN LST5. COMPLETE ENT PROCESSING. * EXTNM LDA P2 STATUS = 2 FOR EXT STA LST4,I SET UP LST4 FOR EXT ENTX4 LDA TBUF+2 GET CHAR 5, ORDINAL STA LST3,I SET ORDINAL INTO LST ENTX5 LDB SYMAD GET SYMBOL ADDR LDA NXFLG GET ENT-EXT FLAG SZA SKIP - EXT INB INCR SYMBOL ADDR FOR ENT ISZ EXCNT SKIP - ALL SYMBOLS PROCESSED JMP NEXSY PROCESS NEXT SYMBOL JMP LDRIN READ NEXT REC * EXCNT BSS 1 EXT/ENT SYMBOL COUNT NXFLG BSS 1 EXT/ENT FLAG ENTYP BSS 1 ENT TYPE BEING PROCESSED ENTST BSS 1 STATUS OF LST SYMBOL MATCHED M100 OCT 100 N5 DEC -5 * * SKP * PROCESS DBL REC DBLR LDA IGNOR SZA REC TO BE IGNORED ? JMP LDRIN YES, GET NEXT REC. * LDA LBUF+1 GET INSTRUCTION COUNT AND M77 ISOLATE COUNT CMA,INA STA EXCNT SET INSTRUCTION COUNT LDA ALBUF GET ADDR OF LBUF ADA P4 ADJUST FOR FIRST RELOCATION BYTE STA CURAL SET CURRENT LBUF ADDR LDA LBUF+1 GET WORD 2 OF DBL REC AND M300 ISOLATE REL TYPE FOR LOAD ADDR STA DBLBS SAVE FOR LATER LDB LBUF+3 GET THE RELOCATION ADDRESS CPA M100 IF = 1 JMP MBASE THEN PROG RELOCATABLE. ADB BPREL RELOCATE THE LOAD ADDRESS FOR BP. SZA IF = 0 THEN BASE PAGE RELOCATABLE JMP RCERR ELSE ERROR 2 - ILLEGAL REC. JMP DBL0 FOR BP REL, AVOID FWA RESET. * MBASE ADB PPREL RELOCATE THE LOAD ADDRESS FOR MAIN MEM. ISZ DBLFL (SKIPS ONLY IF 1ST DBL OF NEW SEGMENT) JMP DBL0 * * ADJUST PROGRAM RELOCATION BASE TO LOAD ADDR IN * FIRST DBL RECORD IN EACH LOADING OPERATION TO * NOT ALLOCATE DISC SPACE FOR BSS AREAS AT THE * BEGINNING OF A PROGRAM. ALSO,THIS ALLOWS FOR * A PSEUDO COMMON REGION BETWEEN A "MAIN" PROG * AND ALL SEGMENTS IF THE SAME SIZE BSS AREA IS * DECLARED AT THE BEGINNING OF EACH SEGMENT. * LDA LBUF+3 ADJUST FWA TO BSS DISPLACEMENT ADA FWA ON DISC LOWER BOUND. STA FWA SET NEW FWA FOR LOAD OPERATION STA TPREL DBL0 STB DBLAD SET THE LOAD ADDRESS DBL1 LDB CURAL,I GET RELOCATION BYTE STB REKEY SAVE RELOCATION RYTE LDA N5 STA INSCN SET RELOCATION BYTE COUNT ISZ CURAL INCR CURRENT LBUF ADDR DBL2 LDA REKEY GET RELOCATION BYTE ALF,RAR ROTATE TO LOW A STA REKEY SET NEXT RELOCATION BYTE AND M7 ISOLATE CURRENT BYTE CPA P4 EXTERNAL REFERENCE? JMP DBL4 YES - GET LINK ADDR CPA P5 MEMORY REFERENCE? JMP DBL5 YES - CHECK FOR EXT WITH OFFSET CPA P6 BYTE ADDR ? JMP DBL6 YES ADA RBTAD ADD RELOCATION BASE TABLE ADDR LDA A,I SET RELOCATION BASE ADA CURAL,I ADD CURRENT INSTRUCTION WORD DBL3 LDB DBLAD GET LOAD ADDRESS TO B DABOT JSB OUTAB OUTPUT ABSOLUTE PROG WORD ON DISC DBL9 ISZ CURAL INCR CURRENT LBUF ADDR ISZ EXCNT SKIP - ALL INSTRUCTIONS OUT RSS NO - CONTINUE JMP LDRIN GET NEXT REC ISZ DBLAD INCR CURRENT DBL RELOCATION ADDR ISZ INSCN SKIP - GET NEW RELOCATION BYTE JMP DBL2 PROCESS NEXT INSTRUCTION JMP DBL1 GET NEXT RELOCATION BYTE DBL4 LDA CURAL,I GET CURRENT DBL WORD AND M377 ISOLATE ORDINAL STA EXORD AND SAVE IT. CLA STA OFSET SET OFFSET = 0 JSB DBLEX SET BP LINK ADDR FOR EXT JMP DBL9 INSTRUCTION IS OUTPUT BY DBLEX * DBL5 LDA CURAL,I GET CURRENT WORD FROM LBUF RAR,RAR POSITION AND AND M377 MASK IN ORDINAL IF ANY SZA,RSS ANY ORDINAL ? JMP DBL5M NO - GO PROCESS MEM REF. * STA EXORD SET UP ORDINAL LDB CURAL GET LBUF ADDR INB BUMP TO WHERE OFFSET IS LDA B,I GET OFFSET STA OFSET AND SET OFFSET VALUE. JSB DBLEX SET BP LINK FOR EXT REF ISZ CURAL INCREMENT LBUF ADDR JMP DBL9 GO INDEX TO NEXT WORD DBL5M LDA CURAL,I GET NEXT WORD FROM LBUF ISZ CURAL INCR CURRENT LBUF ADDR JSB MREF SET ADDR FOR MEM REF INSTR JMP DBL3 OUTPUT ABSOLUTE PROG WORD DBL6 LDA CURAL,I GET WORD 1 OF THE GROUP ALF POSITION AND AND M17 MASK IN TYPE. SZA IF NON-ZERO JMP RCERR THEN ILLEGAL REC ERROR LDA CURAL,I ELSE GET WORD 1 AGAIN AND P3 MASK IN RELOCATION TYPE LDB ENTRL GET RELOCATION BASE ADB A LDB B,I FROM TABLE RBL AND COVERT TO BYTE ADDR ISZ CURAL LDA CURAL,I GET WORD 2 (BYTE ADDR) SSA IF SIGN BIT SET JMP RCERR THEN ILLEGAL REC. ADA B ADD BASE BYTE ADDR TO GET INSTRUCTION JMP DBL3 GO TO OUTPUT ON DISC OR BP * DBLBS NOP LOAD ADDR INDICATOR OFSET NOP OFFSET FOR AN EXT M17 OCT 17 * * * LOAD FROM PROG LIB * LOADX LDA PRENT,I GET PRIMARY ENTRY POINT SZA SKIP - NO PRIMARY ENTRY POINT JMP LOADN LOAD FROM PROG LIB LDA ERR08 CODE 08 = NO TRANSFER ADDR JSB ERROR PRINT DIAGNOSTIC ON SYSTEM TTY JMP ABORT ӔNLH AND ABORT THYSELF LOADN CCA SET FLAG STA SLIBF FOR 'LOADING FROM SYS LIB' STA LIBFL 'SCANNING LIB' STA LGOU DUMMY UP 'LG BEING USED' FLAG STA LSTBK SET UP POINTERS TO DISC LIB SUCH CLA THAT A NEW PHYSICAL READ STA DCNT WILL OCCUR. LDA PLIST GET LIST/NO LIST FLAG SLA,RSS SKIP LISTING ? JSB SPACE NO, THEN SPACE OVER. JMP RSET? GO FIGURE OUT THE NEXT MOVE * `N* * COMMAND IS TRANSFERED HERE IF AFTER A SYS LIBRARY * SCAN NO MORE UNDEFINED EXTERNALS EXIST. SPC 1 * RNDEX LDA MSEG GET THE SEGMENTED PROG FLAG SZA ARE WE SEGMENTED ? JMP SEGT YES LDA TYPE2 NO, GET THE CMND FILE TYPE SZA IS THERE A COMMAND FILE ? JMP NXTOP YES SO GET THE NEXT COMMAND JMP NODEX NO, SO GO FINISH LOAD. * SEGT LDA TYPE2 GET THE CMND FILE FLAG WORD SZA,RSS IS THERE A COMMAND FILE JMP NODEX NO, MIGHT BE END OF LOAD LDA SKP.1 GET THE SE RE EXECUTED FLAG SSA HAVE WE DONE ANY OF THESE YET JMP NODEX NO, SO FINISH LOAD LDA OP? YES, GET THE LAST OPCODE CPA SE WAS IT AN SE ? JMP NXTOP YES, MUST HAVE BEEN AN SE,< > COMMAND JMP NODEX NO, WE NEED TO FINISH THE SEGMENT LOAD * * * SKP * * SCAN THE DIRECTORY OF ENTRY POINTS * SYLOK NOP LDA DCNT CPA DSCLN IF NO MORE SYMBOLS JMP EMPTY THEN RETURN WITH NO MATCH ISZ DCNT BUMP TO NEXT ENT JSB GTENT GET NEXT ENT JSB FNLST INITIALIZE TO START OF USER LST LDA MSEG IF SEG LOAD CPA P2 THEN JSB SILST INITIALIZE LST FOR SEG ONLY JSB MATCH SCAN LST FOR MATCHING NAME JMP SYLOK+1 NO MATCH - CHECK NEXT SYMBOL * GTSUB LDA TBUF+3 MATCH !(GET THIS SUB) GET SYMBOL TYPE. CPA P1 IF NOT FIXED JMP GTSU GO SET UP TO LOAD * ALF,ALF SET TYPE TO HIGH END STA B,I SET IN SYMBOL TABLE LST4 STA GTENT SAVE FOR ENT TYPE CHECK BELOW INB SET TO LST5 LDA TBUF+4 GET SYMBOL VALUE STA B,I SET IN LST5 ADB N4 SET TO LST1 STB LST1 SET FOR FIXUP * LDB GTENT GET THE SYMBOL TYPE SZB IS IT MEM RES ? +R JMP GTMEM NO, AN RP OR ABS LDB SSGA NOW SEE IF SSGA CPB P1 ACCESS IS ALLOWED. JMP GTMEM IT IS. CMA NO. SO IF THE ADDRESS ADA $SGAF IS ABOVE START OF SSGA SSA THEN ITS AN ERROR JMP LL24 * GTMEM JSB FIXAL FIX ALL REFERENCES JMP SYLOK+1 CONTINUE SCAN * GTSU LDA TBUF+4 GET DISC ADDR OF LIB SUB ALF,ALF RAL SET UP DISC ADDRES IN LG READ ROUTINE AND M377 STA LGTRK SET TRACK ADDR LDA TBUF+4 AND M177 SECTOR ADDR CLB,CLE ERA,RAL ERB STB LBOEF SET LIB ODD/EVEN FLAG STA LGSEC LDA XBUFA STA XCUR CLA STA LGT1 STA LGT2 STA XCNT RSS (P+1) RETURN FOR MATCH FOUND EMPTY ISZ SYLOK CCA STA IGNOR STA PLFLG STA NUPLS JMP SYLOK,I (P+2) RETURN FOR NO MATCH * * DCNT NOP CURRENT DBUF COUNT SSGA NOP 0/1 USE / DON'T USE SSGA * LL24 JSB PRNAM DEF TBUF LDA ERR24 JMP ABOR ERR24 ASC 1,24 * SKP * * * GTENT - ROUTINE TO GET AN "ENT" OFF THE DIRECTORY IN THE * SYSTEM LIBRARY. BEFORE IT IS CALLED, SECT# MUST BE SET TO * THE 15 BIT DISC ADDR IN BLOCKS. "OFLE1" MUST BE SET TO * 0 OR 16, DEPENDING IF THE DIRECTORY STARTS IN AN EVEN OR * ODD SECTOR. CALLED: * LDA ENT# THE ENTRY NUMBER ON LIB. * JSB GTENT 4 WORD ENT IN TBUF 1-4. * GTENT NOP ENTRY A-REG = ENT NUMBER ADA OEFL1 ADJUST FOR POSS. ODD SECTOR CLB DIV P32 DETERMINE THE RELETIVE BLOCK ADA BLOK# NOW THE ABS BLOCK # BLS,BLS BUMP TO REL WORD IN BLOCK ADB ETBFA BUFFER STB IOFFS SET PNTR CPA LSTBK HAS BLOCK NUMBER CHANGED? JMP GTNT1 NO, CONTINUE STA LSTBK uYES, UPDATE BLOCK BUFFER JSB READD READ LU=2 OFF DISC LDB IOFFS GET INDEX INTO BUFFER GTNT1 LDA B,I GET 1ST WORD STA TBUF AND PUT IN TBUF 1- 5 INB LDA B,I GET 2DN WORD STA TBUF+1 INB LDA B,I GET 3RD WORD AND M7400 GET 5TH CHAR STA TBUF+2 XOR B,I GET LO BYTE STA TBUF+3 AND PUT IN 4TH WORD INB LDA B,I GET 4TH WORD STA TBUF+4 AND PUT IN 5TH WORD JMP GTENT,I RETURN DONE SPC 1 P32 DEC 32 * * * SUBROUTINE TO READ A DIRECTORY BLOCK (128 WORDS) * SPC 1 READD NOP ENTRY B=BUFFER ADDR CLB A=ABS BLOCK NUMBER ALS MPY BY 2 FOR 64 WORD SECTS DIV SECT2 BY THE NUMB SECTS / TRACK STA GTNT2 SAVE TRACK # STB GTNT3 AND SECTOR NUMBER JSB EXEC READ DISC LU=2 DEF *+7 DEF P1 DEF P2 LU = 2 FOR SYSTEM DISC ETBFA DEF SBUF DEF P128 WORDS DEF GTNT2 DEF GTNT3 JMP READD,I SPC 1 LSTBK DEC -1 IOFFS NOP GTNT2 NOP GTNT3 NOP SPC 1 * * LIBFL NOP SLIBF NOP REKEY NOP INSCN NOP ERR08 ASC 1,08 * * * * SKP * * SET UP DISC ADDRESSES , SECTOR OFFSET AND SYMBOL * COUNT TO SCAN DIRECTORY FROM START. * CSUBR NOP JSB LSTX1 ANY UNDEFINED ? JMP RNDEX NO CLA SET UP FOR LIB SCAN STA DCNT JMP CSUBR,I YES - THEN RETURN * * SCAN OF THE SYSTEM LIBRARY STARTS HERE. ALL SYSTEM * ROUTINES LOADED RETURN HERE AFTER THE END RECORD IS * PROCESSED. * RSET? JSB LSTX1 INITIALIZE LST & ANY UNDEF ? JMP RNDEX NO EXIT LOOP * JSB SYLOK SCAN DIRECTORY JMP LDRN2 MATCH FOUND - GET THIS SUB * JSB CSUBR INITIALIZE LST & ANY UNDEF ? JSB SYLOK SCAN DIRECTORY JMP LDRN2 MATCH FOUND - GET THIS SUB JSB CSUBR 8% TAKE ONE LAST LOOK AT THE SYM TABLE * * SPC 1 * CONTROL IS TRANSFERED HERE WHEN THE ENTIRE SYS LIB HAS BEEN * SCANNED AND UNDEFINED EXTERNALS REMAIN. WE NOW DECIDE WHAT * TO DO WITH THE UNDEFS. * CAN GET HERE UNDER THE FOLLOWING CONDITIONS : * 1. LOADING MAIN & SEG ENCOUNTERED. * 2. LOADING SEG & NEXT SEG ENCOUNTERED. * 3. SE,<> COMMAND * 4. END OF RELOC INPUT FROM LU OR FILE & NO COMMAND FILE. * * DNON1 LDA TYPE2 NO, IS THERE A COMMAND FILE OPEN? SZA IS THERE ? JMP SE..? YES SEE WHAT LAST COMMAND WAS DNON2 LDA MSEG IS THE PROG SEGMENTED ? SZA,RSS WELL? JMP FLUSH NO, FLUSH THE TURKEY !!! ISZ RRSCN DO WE RESCAN THE ENTIRE FILE ? RSS NO JMP SCANX YES * CPA P1 IS THIS THE MAIN OF THE SEG JMP NODEX YES SO LOAD IT ANYWAY * FLUSH JSB PUDF MAIN OR SEG W/UNDEFS, SO LIST THEM LDA FORCD IS THE FORCE SSA FLAG SET? JMP FIXCL YES,GO FIX THE FIX UP TABLE JMP ABORT NO, SO ABORT THYSELF * * * LIST UNDEFINED EXTS * * PUDF NOP ENTRY POINT CLA SET UP FLAG FOR NO UNDEFS STA UN# LDA DONE? GET THE PARAMETER CHECK DONE FLAG SZA,RSS ANY PARAMETER CHECKS DONE ? JMP NPUDF NO, THUS NO UNDEFS LDA P14 LDB MESS3 MESS3 = ADDR: UNDEFINED EXTS JSB SYOUT PRINT: UNDEFINED EXTS JSB FNLST INITIALIZE LSTX * LDA MSEG IF LOADING CPA P2 A SEGMENT, INITIALIZE JSB SILST FOR IT IN LST. * XSCAN JSB LSTX SET LST ADDRES JMP PSUSP END OF EXTS LDA LST4,I GET ENT/EXT FLAG AND P7 MASK IN SYMBOL STATUS CPA P2 UNDEFINED SYMBOL ? RSS YES - THEN SKIP JMP XSCAN TRY NEXT LST ENTRY ISZ UN# INCREMENT 3=THE UNDEFS # LDA P5 LDB LST1 GET ADDR OF SYMBOL JSB SYOUT PRINT UNDEFINED EXT JMP XSCAN TRY NEXT LST ENTRY * PSUSP LDA UN# GET THE # OF UNDEFS SZA ARE THERE ANY UNDEFS ? JMP PUDF,I YES, LIST IS PRINTED * NPUDF LDA P12 LDB NMESS JSB SYOUT TELL THE FOLKS NO UNDEFS JMP PUDF,I RETURN TO CALLER * CONSTANTS * MESS3 DEF *+1 ASC 7,UNDEFINED EXTS NMESS DEF *+1 ASC 6, NO UNDEFS IGNOR NOP UN# NOP SKP * SE..? LDA SKP.1 HAS ANY RE OR SE COMMAND BEEN EXECUTED ? SSA WELL JMP DNON2 NO, SO FORGET ABOUT THE SE COMMAND * LDA OP? GET THE LAST OPCODE CPA SE WAS IT A SEARCH (IE NO NAMR) JMP NXTOP YES SO GET THE NEXT OPCODE JMP DNON2 NO, GO SEE IF IT WAS A FORCED LOAD * * * JMP DEBUG,I RETURN * * * PRINT MESSAGE ON LIST DEVICE * * THE DRKEY SUBROUTINE PRINTS A MESSAGE ON THE LIST OUTPUT DEVICE. * * CALLING SEQUENCE: * A = NO. CHARACTERS (POS.) TO BE PRINTED. * B = ADDRESS OF MESSAGE * JSB DRKEY * * RETURN: CONTENTS OF A AND B ARE DESTROYED * DRKEY NOP STA CHAR# SAVE THE # OF CHARACTERS * ADB N1 BACK THE ADDRESS UP BY ONE STB MADDR AND SAVE FOR LU WRITE STB MADDF OR FILE WRITE LDA B,I GET THE WORD PRIOR TO THE BUFFER STA LTEMP AND SAVE IT LDA BLNK2 GET A BLANK STA B,I AND PUT IT IN THE BUFFER * LDB CHAR# GET THE # OF CHARACTERS ADB P3 ALLIGN TO A WORD & ACCOUNT FOR THE BLANK CLE,ERB DIV BY 2 . NOW HAVE WORD COUNT STB COUNT SAVE FOR LU OR FILE WRITE * LDB CHAR# GET THE # OF CHARS SLB,RSS ODD # ? JMP GOWRT NO, SO WRITE THE BUFFER OUT CCB INDEX ADB MADDR THE THE LAST WORD LDA B,I pGET IT & PUT A BLANK AND M7400 IN THE LOW END ADA D32 STA B,I * GOWRT LDA TYPE3 OK, SO NOW FIND OUT WHERE THE ERA,SLA WRITE GOES JMP WFILE A FILE * JSB EXEC REQUEST WRITE DEF *+5 DEF P2 WRITE REQUEST CODE DEF LISTU ADDR OF LIST OUTPUT UNIT NO. MADDR DEF 0 BUFFER LOCATION DEF COUNT CURRENT WORD COUNT LDA LTEMP GET AND RESTORE STA MADDR,I THE ALTERED WORD JMP DRKEY,I * WFILE JSB WRITF DO THE FILE WRITE DEF *+5 DEF IDCB3 DEF IERR3 MADDF NOP BUFFER ADDRESS DEF COUNT BUFFER LENGTH * LDB LTEMP GET THE ALTERED WORD STB MADDR,I AND RESTORE IT SSA,RSS ANY FILE ERRORS JMP DRKEY,I NO, SO RETURN * JSB FCLOS YES, SO ATTEMPT TO CLOSE ALL FILES LDB F3 GET THE FILE NAME LDA IERR3 AND THE ERROR TYPE JMP FLERR AND REPORT THE ERROR SPC 1 COUNT BSS 1 CURRENT MESSAGE LENGTH LTEMP NOP D32 DEC 32 BLNK2 ASC 1, DOUBLE BLANK CHAR# NOP INPUT # OF CHARACTERS * * PRINT DIAGNOSTIC ON SYS. TTY. * * ERROR IS USED TO PRINT ALL DIAGNOSTIC MESSAGES. * * CALLING SEQUENCE: * A = 2-DIGIT ERROR CODE (ASCII) * B = IGNORED * JSB ERROR * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * ERROR NOP STA MERR+1 SET CODE INTO ERROR MESSAGE LDA P4 LDB MESS5 MESS5 = ADDR: L XX JSB SYOUT PRINT: L XX JMP ERROR,I RETURN SPC 1 MESS5 DEF *+1 MERR ASC 2,L 77 * * NEW LINE ON LIST OUTPUT DEVICE * * THE SPACE SUBROUTINE IS CALLED TO PAGE UP THE PRINTER. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB SPACE * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * SPACE NOP CLA SET COUNT = 0. LDB ALBUF _ B = DUMMY ADDR. JSB DRKEY NEW LINE JMP SPACE,I RETURN * * OUTPUT MESSAGE TO SYS. TTY. * * THE SYOUT SUBROUTINE PRINTS ALL DIAGNOSTICS ON THE SYSTEM * TELETYPE. THESE INCLUDE ALL OPERATOR MESSAGES AND ALL * ERROR DIAGNOSTICS. EACH MESSAGE IS PRECEDED WITH THE * CHARACTERS: * * /LOADR: * * * CALLING SEQUENCE: * A = NO. OF CHARACTERS IN MESSAGE (POSITIVE) * B = MESSAGE ADDRESS * JSB SYOUT * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * SYOUT NOP STB TTYAD SET MESSAGE ADDR CMA,INA STA B ARS CHANGE NO. CHARS. TO NO. WORDS STA WDCNT SET MESSAGE LENGTH ADB N8 ADJUST FOR LENGTH OF /LOADR: STB TTYNO SET NO. OF CHARACTERS IN MESSAGE * LDB SYM4 GET ADDR OF MESSAGE BUFFER SYOU LDA TTYAD,I GET WORD FROM MESSAGE STA B,I SET WORD INTO MESSAGE BUFFER INB INCR BUFFER ADDR ISZ TTYAD INCR MESSAGE ADDR ISZ WDCNT SKIP - MESSAGE MOVED TO BUFFER JMP SYOU CONTINUE MOVING MESSAGE * LDA TTYNO GET THE # OF CHARS CMA,INA LDB DSYMS AND THE ADDRESS JSB DRKEY OUTPUT MESSAGE * JMP SYOUT,I RETURN * N8 DEC -8 TTYAD BSS 1 TTYNO BSS 1 SYM4 DEF SYMES+4 SYMES ASC 20, /LOADR: DSYMS DEF SYMES POINTER TO MESSAGE BUFFER * N2 DEC -2 P64 OCT 100 P1 OCT 1 P10 DEC 10 N13 DEC -13 MEM1 BSS 1 LOW MAIN ADDR OF DUMMY ID MEM2 BSS 1 HIGH MAIN MEM3 BSS 1 LOW BASE PAGE MEM4 BSS 1 HIGH BASE PAGE DMAIN BSS 1 DISC ADDR OF PROG SKP * * SUBROUTINE: "SETID" * * PURPOSE: THIS ROUTINE INSURES THAT A BLANK * ID SEGMENT IS AVAILABLE FOR A PROG * ADDITION OR NORMAL BG LOAD, * ALLOCATES SPACE FOR A DUMMY SEGMENT * IN UPPER MEMORY (BELOW THE DUMMY BASE * PAGE AREA), PRESETS SOME VAL4UES IN * THE DUMMY ID SEGMENT, AND SETS THE * ADDRESS OF EACH WORD IN A LINK WORD * IN THE DATA SECTION OF THE LOADER. * * IF A BLANK ID SEGMENT IS NOT AVAILABLE * OR THERE ARE INSUFFICIENT NUMBER OF * SEGMENTS FOR MAIN/SEGMENT LOADING, THE * MESSAGE: * "NO BLANK ID SEGMENTS" * IS PRINTED AND THE LOADER IS SUSPENDED. * THE OPEATOR MAY DELETE A PROG FROM * THE SYSTEM (OF COMMAND) OR TERMINATE * THE LOADER. * * * CALL: (A):= 0 FOR ADDITION (BLANK ID SEG. REQ) * = 1 FOR REPLACEMENT (BLANK IDS NOT REQ) * (B)= 0 FOR LONG ID SEG (13 WORDS) * = 1 FOR SHORT ID SEG (9 WORDS) * (P) JSB SETID * (P+1) -RETURN- REGISTERS MEANINGLESS * * THE ALLOCATION OF CORE IS AS FOLLOWS : * LONG DUMMY ID SHORT DUMMY ID * ------------- -------------- * * PRIOR PRENT(ENTRY POINT) * PRENT(ENTRY POINT) NAM12 * NAM12 NAM34 * NAM34 NAM5 * NAM5 MEM1 * RESL MEM2 * TMDY1 MEM3 * TMDY2 MEM4 * MEM1 DMAIN * MEM2 * MEM3 * MEM4 * DMAIN * * SKP * SETID NOP STB TYPID SAVE LONG/SHORT FLAG ISZ ID# SZA,RSS IF NOT ADDITION, SKIP JSB COIDS ELSE COUNT THE IDS * * ALLOCATE DUMMY ID SEGMENT IN UPPER CORE. * LDB TYPID GET LONG/SHORT FLAG LDA N13 SZB SHORT ID ? LDA N9 YES, SET (A)=-9. STA SET6 SET NEGATIVE LENGTH OF ID ADA TFIX THE FIXUP TABLE STA SET2 SET NEW END LDB TFIX CURRENT ADDRESS TO B STA TFIX SET NEW END OF FIXUP TBL. SETI0 CPB IDA END OF TABLE? JMP SETI1 YES * LDA B,I NO MOVE A WORD 8@ STA SET2,I MOVE IT INB STEP THE ADDRESSES ISZ SET2 JMP SETI0 AROUND WE GO * SETI1 LDA TFIX CMA,INA TEST FOR SYMBOL ADA PLST OVERFLOW SSA,RSS WELL JMP LOVER ALL OVER NOW * LDA IDA SUBTRACT PROPER LENTH FROM ADA SET6 CURRENT ID SEG ADDR. STA IDA FOR NEW ADDR. LDB IDA SET CLA DUMMY SETI STA B,I ID INB SEGMENT ISZ SET6 = TO JMP SETI ZERO. * LDA IDA LDB TYPID GET LONG/SHORT FLAG SZB SKIP ON LONG ID JMP SHID SET UP SHORT ID SEG. STA PRIOR SET ADDR OF PRIORITY INA STA PRENT SET ADDR OF PRIMARY ENT. PT. INA STA NAM12 SET ADDR OF NAME 1,2 INA STA NAM34 SET ADDR OF NAME 3,4 INA STA NAM5 SET ADDR OF NAME 5, TYPE INA STA RESL SET ADDR OF RESOLUTION CODE INA STA TMDY1 SET ADDR OF TIME OF DAY, LS INA STA TMDY2 SET ADDR OF TIME OF DAY , MS INA STA MEM1 SET ADDR OF LOW MEMORY BOUND INA STA MEM2 SET ADDR OF HIGH MEMORY BOUND INA STA MEM3 SET ADDR OF LOW BP BOUND INA STA MEM4 SET ADDR OF HIGH BP BOUND INA STA DMAIN SET DISK ADDR OF MAIN PROG * LDA P9999 INITIALIZE STA PRIOR,I PRIORITY = 9999 CLA STA RESL,I AND DLD NDAY INITIALIZE STB TMDY1,I TIME OF DAY, LS HALF STA TMDY2,I TIME OF DAY, MS HALF JMP SETID,I RETURN * P9999 DEC 9999 * SHID STA PRENT SET ADDR OF PRIMARY ENT. PT. INA STA NAM12 SET ADDR OF NAME 1,2 INA STA NAM34 SET ADDR OF NAME 3,4 INA STA NAM5 SET ADDR OF NAME 5 & TYPE INA STA MEM1 SET ADDR OF LOW MAIN BOUND INA  STA MEM2 SET ADDR OF HIGH MAIN BOUND INA STA MEM3 SET ADDR OF LOW BP BOUND INA STA MEM4 SET ADDR OF HIGH BP BOUND INA STA DMAIN SET DISC ADDR OF SEGMENT JMP SETID,I RETURN * * SET6 NOP TMDY1 NOP ADDR OF TIME OF DAY TMDY2 NOP SETM DEF *+1 ASC 10,NO BLANK ID SEGMENTS * ID# NOP # OF DUMMY ID SEGMENTS ALLOCATED TYPID NOP LONG(0) / SHORT(1) ID FLAG IDA NOP FWA OF CURRENT DUMMY ID SEGMENT SKP COIDS NOP THIS ROUTINE COUNTS THE IDS JSB BLKID GO COUNT LDB ID# GET THE REQUIRED NUMPER CMB,INB SET NEGATIVE ADA B SUBTRACT FROM AVAILABLE SSA IF ENOUGH JMP NOIDS SKIP ELSE GO TELL HIM JMP COIDS,I RETURN SPC 1 * SEND NO ID MESSAGE NOIDS LDA P20 LDB SETM JSB SYOUT JMP ABORT SPC 1 SKP * * * SET BP LINK ADDR FOR EXT * * DBLEX HANDLES ALL DBL EXTERNAL REFERENECS. * BEFORE ENTRY INTO DBLEX, 'EXORD' MUST BE SET UP WITH * THE PROPER ORDINAL AND 'OFSET' SHOULD HAVE A FINITE VALUE. * (TYPE 4 DBL RECORD SETS OFSET=0 AND TYPE 5 GETS OFSET FROM * THE RECORD). * EXORD = EXT ORDINAL # * OFSET = OFFSET OF INSTRUCTION * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB DBLEX * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (A) HAS INSTRUCTION TO BE OUTPUT * DBLEX NOP JSB INLST INITIALIZE LSTX LDB PLST ADB P2 SET END PNTR STB PRMAP LDB TLST ADB P2 DBLF CPB PRMAP END OF LST ? JMP ORD? ORDINAL NOT FOUND * LDA B,I GET LST3 AND M377 MASK IN ORDINAL ADB P5 POINT TO NEXT LST1 CPA EXORD ORDINALS EQUAL ? RSS YES - SKIP JMP DBLF NO - CHECK NEXT LST ENTRY * x ADB N7 BACK UP TO CURRENT SYMBOL STB TLST AND SET UP FOR LSTX JSB LSTX HLT 0 I HAVE ALLREADY CHECKED!! LDA REKEY SET THE DBL AND M7 TYPE STA T1FIX FOR FIXIT OR... LDA CURAL,I GET THE INSTRUCTION AND M1740 ISOLATE IT STA T2FIX AND SAVE IT ALSO LDA LST4,I GET WORD 4 OF LST ENTRY AND P3 ISOLATE THE TYPE CPA P2 IS SYMBOL DEFINED? JMP DBLE0 NO GO BUILD A FIX UP * JSB FIXIT YES FIX IT UP AND OUTPUT IT JMP DBLEX,I RETURN * DBLE0 LDB TFIX GET CURRENT END ADB N4 PUSH DOWN STB TFIX THE BOTTOM OF THE TABLE CMB,INB WAS THERE ROOM? ADB PLST SSB,RSS WELL?? JMP LOVER NOPE DID HIM IN * LDB TFIX YES JSB FIXX SET UP THIS ENTRY * LDA LST1 SET STA FIX2,I THE LST ENTRY LDA T2FIX COMBINE IOR T1FIX THE INSTRUCTION AND DBL TYPE STA FIX3,I AND SET IT LDA OFSET GET THE OFSET STA FIX4,I AND SET IT LDA DBLAD NOW FOR THE ADDRESS STA FIX1,I JMP DBLEX,I EXIT * ORD? JSB CPRNM PRINT MODULE NAME LDA ERR14 ASMB GAVE EXT REF IN DBL REC JMP ABOR BUT NO EXT REC. ASMB ERROR * ERR14 ASC 1,14 * * OUTAB NOP ROUTINE TO OUTPUT * * TEST FOR MAIN OR BASE PAGE FIXUP. * STA ABWRD ALL ABS CODE STB ABADD SAVE WORD (A) AND ADDRESS (B) CMB SET ADDRESS NEGATIVE STB A SAVE IT ADB FWA BELOW CURRENT MODULE? SSB,RSS WELL? JMP OUTA3 YES COULD BE BP OR MAIN FIXUP * ADA TPREL BEYOND LAST WORD PUT OUT? INA SSA,RSS WELL?? JMP OUTA2 NO JUST PUT THE WORD TO ABOUT * * ZERO ANY BSS 'S FOUND IN PROGRAM * OUTA1 CLA ZERO'S LDB TPREL NEXT ADD^THFBRESS CPB ABADD THIS THE ADDRESS TO WRITE? JMP OUTA2 YES GO DO IT * JSB ABOUT ELSE SEND A ZERO JMP OUTA1 CHECK IF ANOTHER NEEDED * * DO NORMAL OUTPUT OF A NORMAL INSTRUCTION * OUTA2 LDA ABWRD GET THE WORD LDB ABADD AND THE ADDRESS JSB ABOUT AND SEND IT JMP OUTAB,I RETURN * OUTA3 STA B ADDRESS NOT IN CURRENT MAIN ADA M2000 IN BP? SSA,RSS WELL?? JMP OUTA6 YES GO DO BASE PAGE FIX * * FIXUP OF A MAIN OF A SEGMENTED PROGRAM * STB A GET ANOTHER COPY ADB SEGM SEG-CURRENT ADDRESS ADA AFWA ABSOLUTE BASE-CURRENT ADDRESS SSB,RSS IF ABOVE SEGMENT BASE SSA,RSS OR BELOW MAIN JMP RCERR ERROR SHOULD NEVER GET HERE * LDA DMTBL SET ADDRESSES FOR ABOUT STA DTBL INA STA DTBL+1 INA STA DTBL+2 SO IT CAN GET BACK TO THE MAIN LDA ABWRD GET THE WORD LDB ABADD AND THE ADDRESS JSB ABOUT PUT IT OUT LDA DSTBL RESTOR ADDRESSES STA DTBL INA STA DTBL+1 INA STA DTBL+2 JMP OUTAB,I RETURN eH* * BP FIXUP (NOTE WE DON'T GO TO THE DISC YET ) * OUTA6 ADB BPFWA GET OFFSET INTO PGM. CMB BASE PAGE (MAIN AND SEG ARE CONTIG.) ADB FWABP TRANSLATE TO MEM. RES. DUMMY LDA ABWRD GET THE WORD STA B,I STORE IT IN THE BP JMP OUTAB,I RETURN * ABADD NOP TEMP TO HOLD LOAD ADDRESS * DMTBL DEF *+1 ADDRESS OF MAIN TRIPLET AFWA OCT 0,0,0 ABSOLUTE BASE DSTBL DEF *+1 NORMAL LOADING BASE ADDRESSES FWA NOP BASE OF CURRENT PROGRAM OR SEGMENT STRAK NOP BASE TRACK(=0 IF PROG NOT SEGMENTED) SSECT NOP BASE SECTOR (BOTH ARE RELATIVE TO ZERO FOR MAIN) * DTBL DEF FWA NORMAL SET UP OF DEF STRAK ABOUT LOAD ADDRESSES DEF SSECT CHANGED ONLY TO FIX UP MAIN * * * FIXAL FIXES UP REFERENCES * TO ENTRY POINTS NOT DEFINED WHEN REFERENCED * BY TAKING THE INFORMATION FROM THE CURRENT FIXUP TABLE ENTRY * AND BUILDING AN APPROPIATE INSTRUCTION FROM IT. * * THE FIX UP TABLE HAS 4- WORDS PER ENTRY AS FOLLOWS: * * FIX1 MEMORY ADDRESS TO BE FIXED (-1 INDICATEDS AN EMPTY ENTRY) * FIX2 SYMBOL TABLE ADDRESS OF EXT FOR THIS INSTRUCTION * FIX3 INSTRUCTION FROM DBL RECORD BITS 01 =DBL TYP (3 OR 4) * FIX4 OFSET FROM DBL RECORD. * * FIXAL EXTRACTS THE INFORMATION FROM THE CURRENT FIXUP TABLE ENTRY * AND LEAVES IT WHERE 'FIXIT' CAN FIND IT. THIS IS DONE TO ALLOW * 'FIXIT' CODE TO BE USED WITHOUT THE FIXUP TABLE OVER HEAD WHEN * DOING CODE THAT DOES NOT REQUIRE FIXUPS. * FIXAL NOP LDB IDA GET ORGION FIXA2 CPB TFIX END OF TABLE? JMP FIXA3 GO PACK THE TABLE * ADB N3 DOWN TO THE LDA B,I SYM. TBL. ENTRY ADB N1 SET B TO ORGION OF ENTRY CPA LST1 THIS ONE? JMP FIXA1 YES GO DO IT * JMP FIXA2 AROUND WE GO * FIXA1 JSB FIXX SET THE BASE ADDS IN FIX1-FIX4 LDA FIX2,I FIRSdT GET STA TLST THE RIGHT LST ENTRY JSB LSTX SET UP HLT 0 BETTER BE GOOD * LDA FIX3,I GET THE DBL CODE AND P7 AND STA T1FIX SET IT XOR FIX3,I GET THE MASKED INSTRUCTION STA T2FIX AND SET IT LDA FIX4,I GET THE OFFSET STA OFSET AND SET IT LDA FIX1,I GET THE MEMORY ADDRESS STA DBLAD SET IT JSB FIXIT DO THE FIXUP CCA STA FIX1,I RELEASE THE FIXUP TABLE ENTRY STA FIX2,I * LDB FIX1 CONTINUE JMP FIXA2 SEARCH * FIXA3 LDB IDA TABLE GET THE BASE ADDRESS PKF00 CPB TFIX IF EMPTY JMP FIXAL,I JUST EXIT * ADB N4 INDEX TO FRONT OF ENTRY STB SET1 SET ADDRESS OF FIRST AVAILABLE ENTRY LDA B,I IS IT? SSA,RSS IT IS IF IT IS <0. JMP PKF00 NO AROUND WE GO * PKF01 LDA N4 SET UP A MOVE COUNTER STA SET2 TO MOVE THE NEXT ENTRY PKF02 CPB TFIX IS THERE ANOTHER ENTRY? JMP PKF05 NO GO PATCH UP TFIX * ADB N4 YES CHECK IT LDA B,I STILL IN USE? SSA WELL JMP PKF02 NO TRY NEXT ONE * PKF03 STA SET1,I YES MOVE IT DOWN INB ISZ SET1 STEP THE ADDRESSES LDA B,I GET THE NEXT WORD ISZ SET2 FOUR WORDS MOVED YET? JMP PKF03 NO * LDA SET1 YES SET UP FOR THE NEXT ADA N8 EMPTY SLOT STA SET1 ADB N4 ALSO B JMP PKF01 TRY THE NEXT ENTRY * PKF05 LDA SET1 END OF THE FIX UP LIST ADA P4 SET THE ADDRESS STA TFIX OF THE LAST VALID ENTRY IN TFIX JMP FIXAL,I RETURN * * FIXIT NOP THIS ROUTINE BUILD A INSTRUCTION AND PUTS IT OUT LDA LST4,I GET THE SYMBOL TYPE ALF,ALF AND P7 TO A CPA P4 IF REPLACE OP JMP FIX05 GO DO IT * LDA LST5,I tGET THE SYMBOL VALUE ADA OFSET ADD THE OFFSET STA OPRND SET FOR SCANNERS AND M0760 ISOLATE PAGE BITS CMA,CLE,INA SET E IF PAGE ZERO LDA T2FIX GET THE OPCODE SEZ IF BASE PAGE REF JMP FIX04 USE DIRECT LINK * LDB T1FIX GET THE DBL TYPE CPB P4 IF TYPE 4 THEN JMP FIX01 ALWAYS USE LINK * SZA ELSE USE LINK CPA MSIGN ONLY IF NOT A DEF JMP FIX04 A DEF DO DIRECT LINK * LDA OPRND CHECK IF A LINK NEEDED XOR DBLAD AND M0760 ISOLATE PAGE INFO SZA IN NOT SAME PAGE JMP FIX01 MUST USE LINK * LDA OPRND EXT REF WITH OFFSET TO SAME PAGE AND MPAG ISOLATE THE PAGE OFFSET IOR M2000 AND INDIRECT BIT ADD CURRENT PAGE ADA T2FIX BIT AND THE INSTRUCTION CODE JMP FIX03 GO SEND IT TO THE DISC * FIX01 LDB OPRND IF OPCODE LDA T2FIX SSA IS INDIRECT ADB MSIGN ADD A SIGN BIT STB OPRND JSB SCAN SCAN FOR A LINK JMP FIX02 SUCCESS * JSB ALLOC NO LINK FOUND ALLOCATE ONE STB T3FIX SAVE ACTUAL MEMORY ADDRESS OF IMAGE LDB OPRND AND STB T3FIX,I SET THE OPERAND INTO IT LDB A GET ACTUAL ADDRESS FIX02 LDA T2FIX INSTRUCTION TO A IOR MSIGN ADD THE INDIRECT IOR B AND THE BASE PAGE ADDRESS FIX03 LDB DBLAD GET THE ADDRESS TO B JSB OUTAB SEND THE WORD JMP FIXIT,I RETURN * FIX04 ADA OPRND DIRECT DEF ADD IN OPERAND JMP FIX03 GO PRODUCE IT * FIX05 LDA LST5,I REPLACE OP JMP FIX03 SEND IT * * * FIXX SETS UP FIX1-FIX4 * * ON ENTRY B=FIX1 ADDRESS * FIXX NOP STB FIX1 INB STB FIX2 INB STB FIX3 INB STB FIX4 JMP FIXX,I SO YOU EXPECTED COMMENTS YET! * * * FIX1 NO<=P FIX2 NOP FIX3 NOP FIX4 NOP T1FIX NOP T2FIX NOP T3FIX NOP TFIX NOP EXORD BSS 1 SET2 NOP SET1 NOP M1740 OCT 174000 MPAG OCT 101777 PAGE OFFSET AND INDIRECT BIT SKP * * READ UTILITY REC TO LBUF * * THE UREAD SUBROUTINE READS A UTILITY REC FROM THE DISK * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB UREAD * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * UREAD NOP JSB EXEC REQUEST DISK READ DEF *+7 DEF P1 READ REQUEST CODE DEF P2 DISK LOGICAL UNIT NO. ALBUF DEF LBUF 64 - WORD INPUT BUFFER DEF P64 NO. WORDS DEF UTRAK TRACK NO. DEF USECT SECTOR NO. JMP UREAD,I RETURN USECT NOP UTRAK NOP * * * * CONVD CONVERTS THE CONTENTS OF A INTO ASCII (OCTAL) * AT THE LOCATION SPECIFIED BY THE ADDR IN B. * CALLING SEQUENCE: * A = NO. TO BE CONVERTED * B = ADDRESS OF CONVERTED NO. * JSB CONVD * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * * CONVD NOP STB ATEMP SAVE THE ADDRESS OF THE BUFFER CLE FORCE OCTAL CONVERSION LDB OPCOD GET THE OPCODE CPB P3 IF OPCODE = 3 CME THEN SET E FOR DECIMAL CONVERSION JSB CNVRT DO THE CONVERSION LDB A,I GET 1ST ASCII RETURN STB ATEMP,I AND PUT IT WHERE THE CALLER WANTS INA ISZ ATEMP LDB A,I GET THE NEXT ONE STB ATEMP,I INA ISZ ATEMP LDB A,I STB ATEMP,I NOW WERE DONE JMP CONVD,I * ATEMP NOP * * * CNVRT NOP JSB $LIBR NOP JSB $CVT3 JSB $LIBX DEF CNVRT * THE SEMAP SUBROUTINE SETS THE NAME OF THE CURRENT PROG * INTO THE MEMORY MAP AND SETS THE PROG LENGTH. * IT ALSO EXTRACTS THE PRIORITY AND TIME PARAMETERS * FROM THE NAME RECORD AND STORES THEM INTO 'NPAR'. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB SEMAP * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * SEMAP NOP LDA LBUF+3 GET PROG NAME 1,2 STA MBUF SET NAME INTO MEMORY MAP LDA LBUF+4 GET PROG NAME 3,4 STA MBUF+1 SET NAME IN MEMORY MAP LDA LBUF+5 GET PROG NAME 5 AND M7400 ISOLATE UPPER CHAR IOR B40 ADD BLANK CHAR STA MBUF+2 SET NAME IN MEMORY MAP LDA LBUF+6 GET PROG LENGTH STA PLGTH SAVE PROG LENGTH * LDA N7 MOVE PRIORITY,RESOLUTION CODE, JSB MOVE EX MUL,HRS,MINS,SECS, DEF LBUF+10 AND TENS OF MS TO DEF NPAR NPAR * LDA LBUF GET THE REC LENGTH ALF,ALF AND ADA N17 SUBTRACT 17 LDB P10 GET #WORDS IN MAP MESS. SSA,RSS IF NAM REC > 17 WORDS ADB A ADD DIFFERENCE TO MAP LENGTH BLS CONVERT TO WORDS STB NODE SAVE FOR MAP OUTPUT CPB P20 IF NO EXTRA WORDS JMP SEMAP,I EXIT * CMA,INA SET TO MOVE THE REST OF THE NAM JSB MOVE REC TO DEF LBUF+17 MBUF DEF MBUF+10 JMP SEMAP,I RETURN SPC 1 PLGTH BSS 1 PROG LENGTH B40 OCT 40 N17 DEC -17 N7 DEC -7 SKP MOVE NOP WORD MOVE SUBROUTINE STA PRMAP SAVE WORD COUNT LDA MOVE,I GET SOURCE STA LSCAN SET IN LSCAN ENTRY ISZ MOVE STEP TO DEST. ADDR LDA MOVE,I GET DEST. ISZ MOVE STEP TO RETURN ADDR MOV1 LDB LSCAN,I GET A WORD STB A,I PUT IT AWAY ISZ LSCAN STEP SOURCE INA AND DEST. ADDRES ISZ PRMAP DONE? JMP MOV1 NO - CONTINUE JMP MOVE,I YES - EXIT SPC 1 * PRINT MEMORY MAP * * PRMAP SETS THE CURRENT MEMORY BOUNDS INTO THE MEMORY MAP * AND PRINTS THE MAP IF THIS OPTION WAS SELECTED. FOLLOWING * THIS, THE MEM!ORY BOUNDS ARE UPDATED FOR THE NEXT PROG. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB PRMAP * * RETURN: CONTENTS OF A AND B ARE DESTROYED * PRMAP NOP LDA PPREL GET CURRENT PROG RELOC ADDR LDB AMEM3 GET ADDR IN MEMORY MAP JSB CONVD CONVERT TO OCTAL IN MAP CCA ADA TPREL GET LWA PROG LDB AMEM6 GET ADDR IN MEMORY MAP JSB CONVD CONVERT TO OCTAL IN MAP LDA PLIST GET LIST/NO LIST FLAG SLA SKIP - LIST MEMORY BOUNDS JMP PRMA1 OMIT LISTING LDA BLNK2 BLANK THE UNSET WORD STA MBUF+9 LDA NODE LDB MESS2 MESS2 = ADDR MEMORY MAP JSB DRKEY PRINT: XXXXX NNNNN NNNNN PRMA1 LDA TPREL GET NEXT AVAIL ADDR STA PPREL SET NEXT RELOCATION BASE JMP PRMAP,I RETURN * * NODE NOP MESS2 DEF MBUF SKP * SCAN LST FOR SAME ENT/EXT * SPC 2 * * MATCH DIRECTORY ENTRY WITH LST * * THIS ROUTINE DETERMINES IF ENT ENTRY FROM DIRECTORY * (IN TBUF) MATCHES ANY EXT IN THE LST . THE START OF * LST MUST BE SET BEFORE CALLING THIS SUBROUTINE. * * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB MATCH * (P+1) - MATCH NOT FOUND * (P+2) - MATCH FOUND * MATCH NOP LDB TLST MACH? CPB PLST END OF LST ? JMP MATCH,I YES - RETURN (P+1) LDA B,I GET LST1 RAL,CLE,ERA CLEAR BIT15 CPA TBUF NAME 1 , 2 EQUAL ? JMP *+3 YES ADB P5 NO - BUMP (B) BY 5 JMP MACH? GET NEXT LST1 INB LDA B,I GET LST2 RAL,CLE,ERA CLEAR BIT 15 CPA TBUF+1 NAME 3, 4 EQUAL ? JMP *+3 YES ADB P4 NO - BUMP (B) BY 4 JMP MACH? GET NEXT LST1 INB LDA B,I GET LST3 AND M7400 MASK" IN NAME 5 CPA TBUF+2 NAME 5 EQUAL ? JMP *+3 YES ADB P3 POINT TO NEXT LST1 JMP MACH? GET NEXT LST1 INB LDA B,I GET LST4 AND P7 MASK IN SYMBOL STATUS CPA P2 UNDEFINED ? JMP *+3 YES ADB P2 NO - FORGET ENT MATCHED TO ENT JMP MACH? GET NEXT LST1 ISZ MATCH BUMP TO (P+2) RETURN FOR MATCH JMP MATCH,I RETURN (P+2) * * SKP * * SCAN LINKAGE AREAS FOR OPERAND * * * SCAN SETS UP AREA ADDRES FOR 'ARSCN' ROUTINE WHICH * ACTUALLY DOES THE SCAN. THE AREAS SCANNED ARE THE * SYSTEM/FG RES/RES LIB , BG RES AND THE DUMMY LINK AREAS. * CALLING PROGRAM MUST SET THE APPROPRIATE OPERAND VALUE * IN 'OPRND'. * ON RETURN: * (P+1) - MATCH FOUND AND REG-A = 0 * REG-E = 0 LINK FOUND IN BASE PAGE * REG-E = 1 LINK FOUND IN DUMMY BASE PAGE * AND REG-B = ABSOLUTE LINK ADDR * * (P+2) - NO MATCH - REGS ARE MEANINGLESS. * SCAN NOP SPC 1 IFN * BEGIN NON-MEU CODE **** LDA INTLG (A)=NUM OF INT TBL ENTRIESH ADA P8 (A)=FWA OF SYS/FG RES/RES LIB LINK AREA STA LOWER SET LOWER BOUND FOR AREA LDA BPA1 (A)=UPPER BOUND OF AREA STA UPPER SET UPPER BOUND JSB ARSCN SCAN SYSTEM LINKAGE AREA JMP SYSFD OPERAND FOUND LDA BPA2 SET BOUNDS FOR BG RES LINK AREA SURCH INA STA LOWER LDA BPA3 (A)= LWA OF BG RES LINK AREA STA UPPER JSB ARSCN SCAN BG RES LNK AREA FOR OPERAND JMP SYSFD OPERAND FOUND * END NON-MEU CODE ****** XIF SPC 1 SPC 1 IFZ * BEGIN MEU CODE ******** LDA BPA2 SET BOUNDS FOR RESIDENT INA LINKAGE AREA STA LOWER SEARCH LDA M1646 Y STA UPPER JSB ARSCN SCAN RES LINKS FOR OPERAND JMP SYSFD OPERAND FOUND * END MEU CODE ********** XIF SPC 1 LDA FWABP SET DUMMY LINKAGE AREA BOUNDS STA LOWER LDA CWABP STA UPPER JSB ARSCN SCAN DUMMY AREA FOR OPERAND JMP DMYFD OPERAND FOUND ISZ SCAN (P+2) RETURN FOR NO MATCH FOUND JMP SCAN,I (P+2) RETURN * DMYFD LDB FWABP GET REAL BASE PAGE LOCATION CMB,INB CORRESPONDING TO THE LOCATION ADB LOWER IN DUMMY LINK AREA. ADB BPFWA (B)=REAL BP LINK AREA CLA,CCE,RSS (A)=0, (E)=1 LINK FOUND IN DUMMY SYSFD CLA,CLE (A)=0, (E)=0 LINK FOUND IN BASE PAGE JMP SCAN,I (P+1) RETURN FOR MATCH FOUND. * M1646 OCT 1646 LWABP RES LINKS * * * SCAN SPECIFIED AREAS FOR THE OPERAND * * ARSCN SCANS THE SPECIFIED AREA FOR AN OPERAND IDENTICAL TO * THAT IN 'OPRND'. CALLING MODULE MUST SET: * OPRND = OPERAND TO BE SURCHED * LOWER = LOW ADDR OF AREA * UPPER = HIGH ADDR OF AREA (NOT INCLUDING LAST ADDR) * * RETURN IS: * (P+1) - MATCH FOUND AND REG-B = ABSOLUTE ADDR OF MATCHED * LOCATION IN THE AREA. * AND REG-A = OPERAND * * (P+2) - NO MATCH FOUND - REGS ARE MEANINGLESS. * * ARSCN NOP LDB UPPER SET NEGATIVE CMB,CLE,INB UPPER BOUND. ADB LOWER CHECK IF HIGHER SEZ EQUAL OF LOWER? JMP NOMAC YES,RETURN P+1 LDB LOWER GET LOWER BOUND LDA OPRND SET (A)=OPERAND SRC CPA B,I OPERAND IN AREA? JMP FOUND YES, RETURN INB NO, BUMP TO NEXT ONE CPB UPPER DONE? RSS YES, RETURN P+2 JMP SRC NO, TRY NEXT ONE NOMAC ISZ ARSCN BUMP TO (P+2) RETURN FOUND STB LOWER SET LOWER FOR PAST ROUTINES JMP ARSCN,I RETURN RETURN SPC 1 LOWER BSS 1 UPPER BSS 1 * * ALLOCATE NEXT BP LINK ADDR * * ALLOC ALLOCATES A WORD IN BASE PAGE TO BE USED FOR INDIRECT * LINKAGES. IF THE BASE PAGE AREA HAS BEEN EXHAUSTED, A * DIAGNOSTIC IS PRINTED AND LOADING IS ABORTED. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB ALLOC * * RETURN: * A = ABSOLUTE BASE PAGE ADDR * B = DUMMY AREA BASE PAGE ADDR * ALLOC NOP LDA CWABP GET NEXT AVAILABLE BP ADDR ISZ CWABP INCR CURRENT BP ADDR LDB A CMB,INB SET B = - CURRENT BP ADDR ADB LWABP GET LWA BP LINKAGE. SSB,RSS SKIP - BP OVERFLOW JMP ALLO1 JSB CPRNM PRINT MODULE NAME(IF ANY) LDA ERR04 04 = BP LINKAGE OVERFLOW JMP ABOR ALLO1 CLB STB A,I ZERO THE LINK WORD LDB FWABP SUBTRACT FWA BP AREA CMB,INB FROM CURRENT ADDR, ADA B TO GET RELATIVE ADDR. ADA BPFWA ADD FWA OF ACTUAL AREA FOR LDB CWABP ABS ADDR, B=DUMMY AREA ADB N1 JMP ALLOC,I ADDR. -RETURN. * ERR04 ASC 1,04 BASE PAGE OVERFLOW * * * SET MEMORY REFERENCE ADDRES * * MREF RELOCATES THE MEMORY REFERENCE INSTRUCTIONS. IF THE CURRENT * REFERENCE IS OUTSIDE THE CURRENT PAGE, IT ESTABLISHES AN INDIRECT * LINK THROUGH BASE PAGE. * * CALLING SEQUENCE: * A = FIRST WORD OF MEMORY REFERENCE GROUP * B = IGNORED * JSB MREF * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * MREF NOP STA ABT4 SAVE (A) TEMPORARILY AND P3 ISOLATE RELOCATION BASE TYPE LDB ENTRL GET RELOCATION ADDR PNTR ADB A ADD OFFSET TO GET PROPER PNTR LDB B,I GET RELOCATION BASE ADDR LDA ABT4 RESTORE (A) ADB CURAL,I ADD CURRENT INSTRUCTION ADDR AND M1740 ISOLATE INSTRUCTION CODE SSA SKIP - DIRECT REFERENCE ADB MSIGN SET SIGN© OF ADDR = 1 STA INSTR SAVE INSTRUCTION CODE LDA DBLAD GET CURRENT RELOCATION ADDR AND M0760 ISOLATE CURRENT PAGE NO. STA PAGNO SAVE CURRENT PAGE NO. LDA B GET CURRENT ADDR AND M0760 ISOLATE PAGE NO. OF ADDR SZA,RSS BASE PAGE REFERENCE? JMP DBL8 YES CPA PAGNO CURRENT PAGE REFERENCE? JMP DBL7 YES, NO LINK NEEDED STB OPRND SAVE ABSOLUTE OPERAND LDA FWABP SET BOUNDS FOR DUMMY LINK AREA STA LOWER LDA CWABP STA UPPER JSB ARSCN SCAN DUMMY LINK AREA JMP LNFND LINK FOUND JSB ALLOC ALLOCATE LINK STA TBUF SAVE BP LINK ADDR LDA OPRND GET CURRENT OPERAND STA B,I SET OPERAND IN DUMMY BASE PAGE. LDA TBUF GET BP LINK ADDR SMLNK IOR MSIGN ADD INDIRECT BIT MREF0 IOR INSTR ADD INSTRUCTION CODE TO ADDR JMP MREF,I RETURN LNFND LDA FWABP CMA,INA GET ACTUAL BP LINK ADDR ADA LOWER ADA BPFWA (A)=ACTUAL BP LINK ADDR JMP SMLNK GO TO USE SAME LINK * DBL7 LDA B IT'S CURR PAGE AND M1777 SO REMOVE PAGE BITS FROM ADDR IOR M2000 AND SET CURR PAGE BIT JMP MREF0 ADD INSTR TO ADDR, RETURN * DBL8 LDA B IT'S BASE PAGE JMP MREF0 JUST ADD INSTR TO ADDR, RETURN * M1777 OCT 1777 INSTR BSS 1 PAGNO BSS 1 * * * SET VALUE INTO SYSTEM * * THE SYSET SUBROUTINE SET THE CURRENT WORD (IN THE A REG) * INTO THE SPECIFIED LOCATION OF THE SYSTEM. THIS IS REQUIRED * FOR BOTH THE BASE PAGE LINKAGES AND THE ID SEGMENT. * * CALLING SEQUENCE: * A = CURRENT VALUE * B = CURRENT LOCATION * JSB SYSET * * RETURN: CONTENTS OF A AND B ARE THE SAME AS AT CALL * SYSET NOP JSB $LIBR TURN OFF NOP INTERRUPT SYSTEM STA B,I STORE WORD INTO SYSTEM JSB $LIBX RESTORE INTERRUPT DEF SYSET SYSTEM AND RETURN * EMES DEF *+1 ASC 1, * ENTRY POINT BSS 6 LIST BUFFER BLANK OCT 40 SKP * * NORMAL LOAD TERMINATION * NODEX LDA PLIST GET ENTRY POINT LIST FLAG ARS SZA SKIP - LIST ENTRY POINTS JMP NOLST OMIT ENT LISTING * * LIST LIB ENTRY POINTS * JSB SPACE NEW LINE LDA P12 LDB MESS8 MESS8 = ADDR: ENTRY POINTS JSB DRKEY PRINT : ENTRY POINTS JSB SPACE NEW LINE ON LIST OUTPUT DEVICE JSB INLST INITIALIZE LSTX ELIST JSB LSTX SET CURRENT LST ADDRES JMP NOLST END OF LST LDA LST4,I GET ENT/EXT FLAG AND P7 MASK IN SYMBOL STATUS CPA P2 IF STILL UNDEFINED JMP ELIST THEN DON'T LIST IT * LDA LST1,I GET NAME 1,2 CCE,SSA IF UN USED LIB ENTRY JMP ELIST DON'T LIST IT. * STA EMES+2 SET NAME 1,2 INTO BUFFER RAL,ERA SET THE SIGN BIT SO IT IS LISTED ONCE STA LST1,I RESET IN LST LDA LST2,I GET NAME 3,4 STA EMES+3 SET INTO BUFFER LDA LST3,I GET NAME 5 AND M7400 ISOLATE UPPER CHAR IOR BLANK ADD BLANK CHAR STA EMES+4 SET NAME 5 INTO BUFFER LDA LST5,I A= SYMBOL VALUE LDB EMES GET ADDR OF 'NNNNN ' IN ADB P4 BUFFER. JSB CONVD CONVERT TO OCTAL IN MEMORY MAP LDA P14 LDB EMES ADDR OF ' *' BEFORE ENT BUFFER JSB DRKEY PRINT ENTRY POINT LISTING JMP ELIST CONTINUE ENTRY POINT SEARCH * NOLST JSB DWRIT WRITE LAST DISK SECTOR LDA FWA SET LOW MAIN STA MEM1,I ADDR LDA TPREL SET STA MEM2,I ADDR LDA FWABP CALCULATE RELATIVE CMA,INA CURRENT BP ADDR ADA CWABP AND ADD FWA OF REAL AD`A BPFWA AREA FOR LAST ADDR AND STA MEM4,I SET IN ID SEGMENT LDA FWABP IF SEGMENT BEING LOADED, CMA,INA SUBTRACT FWABP FROM SEGB ADA SEGB (SEGMENT BASE) AND ADD ADA BPFWA TO REAL FWA OF BASE PAGE, STA MEM3,I SET AS LOW BOUND OF BP. LDA SEGB GET CURRENT LOWER BOUND OF BP, CMA,INA ADA CWABP ADD CURRENT BP LINK ADDR LDB MSEG (B) = M/SEG FLAG. CPB P1 IF LOADING MAIN, STA MTMP SAVE BP LENGTH SZA,RSS SKIP - SOME BP LINKAGES JMP NOBPL NO BP OUTPUT * * OUTPUT BASE PAGE LINKAGES * LDA FWA SET CMA,INA DBLAD ADA PPREL = TO DISPLACEMENT ADA M177 TO START OF AND M7600 NEXT SECTOR ADA FWA FOR STA DBLAD BP AREA. CLA,INA SET ABT12 = 1, STA ABT12 FOR WRITING BASE PAGE. LDA SEGB SET FWA OF CURRENT BASE PAGE STA ABT13 AREA IN ABT13. CPB P1 IF NOT LOADING RSS MAIN, JMP NOLS1 JUMP TO OUTPUT BASE PAGE. LDA FWA SAVE MAIN: STA MTMP+1 FWA LDA PPREL STA MTMP+2 PPREL LDA DBLAD STA MTMP+3 DBLAD LDA SEGB STA MTMP+4 FWABP LDA CWABP STA MTMP+5 CWABP. * NOLS1 LDA ABT13 IF CURRENT ABT13 = LAST USED CPA CWABP BASE PAGE ADDR, JMP NOBPL THEN FINISHED. * LDA ABT13,I OUTPUT CURRENT LINK WORD LDB DBLAD JSB ABOUT ISZ DBLAD UPDATE ISZ ABT13 ADDRES JMP NOLS1 AND CONTINUE. * NOBPL CLA RESET BASE PAGE OUTPUT STA ABT12 FLAG FOR "ABOUT". LDA MSEG SKIP NAME CPA P2 PROCESSING IF JMP MSGP1 SEGMENT LOAD LDB MESS4 GET ADDR OF TERM. MESSAGE LDA NAM12,I GET PROG NAME 1,2 STA B,I qNLH SET NAME INTO MESSAGE INB INCR CURRENT ID SEG ADDR LDA NAM34,I GET PROG NAME 3,4 STA B,I SET NAME INTO MESSAGE INB INCR CURRENT ID SEG ADDR LDA NAM5,I GET PROG NAME 5 AND M7400 ISOLATE UPPER CHAR IOR BLANK ADD BLANK CHAR STA B,I SET NAME INTO MESSAGE IN* JSB BREAK LAST CHANCE TO BREAK THE PROGRAM * LDA MSEG CHECK FOR SPECIAL SZA,RSS MAIN/SEGMENT PROCESSING JMP NTRM0 -NO, NORMAL TERMINATION * MSGP1 LDB PLST IF MAIN LOADED, SAVE END OF CPA P1 LST AS BEGINNING OF STB SLST SEGMENT AREA OF LST. * LDB SLST ERASE PREVIOUS STB PLST SEGMENT LST ENTRIES. STB TLST * LDB OPCOD CHECK OPERATION CODE. CPB P1 -IF DEBUG LOAD, RSS SKIP. JMP MSGP4 CONTINUE. CPA P2 CONTINUE IF JMP MSGP3 SEGMENT * * FIND AND CLEAR 'DEBUG' ENTRY POINTS * LDA MSGDC SET FWA OF STA ED20 ENT NAMES LDA N4 SET NEG STA ED21 INDEX OF -4. * MSGP2 LDA ED20,I SET STA TBUF ENTRY ISZ ED20 LDA ED20,I POINT STA TBUF+1 ISZ ED20 NAME LDA ED20,I STA TBUF+2 IN ISZ ED20 TBUF. * JSB LSCAN FIND MATCH JMP MSGP0 -NO MATCH- CHECK NEXT LDA BBLNK SET STA LST3,I NAME IOR BLANK FIELD STA LST1,I OF STA LST2,I ENTRY = BLANKS. MSGP0 ISZ ED21 END-OF-LIST? JMP MSGP2 NO JMP MSGP3 YES. * * BBLNK OCT 20000 MESS8 DEF *+1 ASC 6,ENTRY POINTS M7600 OCT 177600 MSGDC DEF *+1 ASC 3,DEBUG ASC 3,$DBP1 ASC 3,$DBP2 ASC 3,$MEMR * * MSGP3 LDA MSEGF SKIP DEBUG CHECK , ETC., CPA P3 IF FINAL JMP MSGP6 LOAD (=3). * JSB SILST INITIALIZE FOR SEGMENT AREA, JSB LSTX SET ADDRES FOR NEXT LST ENTRY NOP LDA CHRDE PUT STA LST1,I "DEBUG" LDA CHRBU IN STA LST2,I NEXT LDA UCHRG LST ENTRY STA LST3,I FOR SEGMENT. LDA P2 SET LST4 = UNDEF SYMBOL STA LST4,I LDA TLST SEρT NEW STA PLST END-OF-LIST ADDR. * * SAVE "MAIN" BOUNDS IF MAIN JUST LOADED * MSGP4 LDA MSEG CONTINUE IF CPA P2 PROCESSING A SEGMENT. JMP MSGP5 ISZ MSEG SET 'MSEG' = 2. LDA PPREL SAVE SEGMENT STA SEGM BASE ADDR LDA CWABP SAVE BASE PAGE LOWER BOUND STA SEGB FOR LINK AREA FOR SEGMENTS. LDA P5 SET PTYPE = 5 IOR M20 MASK IN 'SS' BIT FOR SEG ID STA PTYPE FOR BKG SEGMENT. * * SET CONDITIONS FOR NEXT SEGMENT. * MSGP5 LDA MSEGF SKIP IF CPA P3 FINAL LOAD. JMP MSGP6 LDA SEGM RESET LOWER STA PPREL BOUNDS VALUES FOR STA FWA PPREL , FWA STA TPREL LDA SEGB STA CWABP CCA SET LAST ACCESS PNTR STA LELAD USED BY OUTAB ROUTINE STA DBLFL SET 1ST DBL FLAG = -1 STA PLFLG NAM MUST BE 1ST. CLA STA LGOU STA SLIBF STA LIBFL * * LDA IDA (A) = ID SEGMENT ADDR(DUMMY) ADA P4 (A)= ADDR OF MEM1 OF SHORT ID LDB TYPID GET LONG/SHORT ID FLAG SZB,RSS LONG ID ? ADA P4 YES, (A)=ADDR OF LONG ID'S MEM1 JSB C#S CALCULATE # SECTORS. * ADA SSECT ADD IN STARTING SECTOR. CLB DIVIDE BY DIV TRKS# # SECTORS PER TRACK. STB SSECT SET REMAINDER AS NEW SSECT. ADA STRAK ADD IN STARTING TRACK TO STA STRAK QUOTIENT AND SET NEW STRAK. ALF,RAL ROTATE TRACK # TO RAL,RAL 14-07, ADD IN IOR SSECT SECTOR # AND STA ALLOC SAVE TEMPORARILY IN SUB HEAD * * ALLOCATE NEW ID SEGMENT. * LDB EDFLG SET CLA (A) = 1 IF CPB P2 A REPLACEMENT, INA OTHERWISE (A)=0, CLB,INB INDICATE SHORT ID JSB SETID ALLOCATE SHORT ID SEG * LDgA ALLOC STORE NEW STARTING TRACK STA DMAIN,I AND SECTOR IN "DMAIN" * LDA PLIST CHECK LIST FLAG SLA SKIP IF NOT SUPPRESSED. JMP MSG10 GO TO LOAD NEXT * JSB SPACE TRIPLE JSB SPACE SPACE FOR JSB SPACE CLARITY ON LISTING. * MSG10 LDA N60 GET THE COUNT JSB MOVE MOVE SEGMENT NAM BUFFER BACK DEF SGNAM SOURCE DEF LBUF DESTINATION * CLA FUDGE DCB TO SAY DATA NOT IN CORE AND STA IDCB1+13 EOF HAS NOT BEEN READ * JMP *+1,I REPROCESS THE SEGMENT NAM RECORD DEF TESTR (SAVE A BP LINK TOO !) * IDC13 DEF IDCB1+13 * MESS4 DEF *+1 PRAM ASC 6, READY SKP * * RE-OUTPUT "MAIN" BASE PAGE LINKAGES * MSGP6 LDA SLST SAVE SLST VALUE TEMPORARILY STA LSTX AND SET IT EQUAL TO FLST LDB FLST TO FOOL LSTX1 TO INITIALIZE STB SLST LST FROM START. JSB LSTX1 ANY UNDEFINED ? JMP MSGP9 NO - THEN DON'T OUTPUT MESSAGE LDA LSTX SET ACTUAL VALUE OF SLST BACK STA SLST ISZ MSEG SET MSEG FOR INLST LIUND LDA P6 LDB MESSM PRINT "MAIN'S" JSB SYOUT JSB PUDF GO REPORT THE UNDEFINEDS LDA FORCD WERE UNDEFINED EXT'S ALLOWED ? SSA,RSS WELL ? JMP ABORT NO ! SO ABORT THYSELF. MSGP9 LDA LSTX RESET ORIGNAL VALUE OF SLST STA SLST LDA MTMP SZA,RSS TRANSFER IF NO JMP NTRM0 BASE PAGE. * LDA MTMP+1 RESET "MAIN" WORDS. STA FWA FWA LDA MTMP+2 STA PPREL PPREL LDA MTMP+3 STA DBLAD DBLAD LDA MTMP+4 STA ABT13 FWABP LDA MTMP+5 STA CWABP CWABP CLA SET STARTING TRACK STA STRAK AND SECTOR FOR STA SSECT PROG = 0. CLA,INA SET BP OUTPUT STA ;aABT12 FLAG. MSGP7 LDA ABT13 IF CURRENT ABT13 = LAST USED CPA CWABP BASE PAGE ADDR, JMP NTRM0 THEN FINISHED. * LDA ABT13,I OUTPUT CURRENT LINK WORD LDB DBLAD JSB ABOUT ISZ DBLAD UPDATE ISZ ABT13 ADDRES JMP MSGP7 AND CONTINUE MTMP OCT 0,0,0,0,0,0 TEMP STORAGE FOR "MAIN" P17 DEC 17 P9 DEC 9 MESSM DEF *+1 ASC 3,MAIN'S SKP * * CHECK FOR AND DO NORMAL ON-LINE LOAD TERMINATION * FOR A MAIN OR SEGMENT , OR FOR MAIN AND SEGMENTS * IF NO EDITING. * NTRM0 JSB DWRIT DUMP LAST OF BASE PAGE LDA FWABP SET UP ADDR ADA N13 OF DUMMY STA IDA ID SEGMENT. LDA ID# SET NEGATIVE CMA,INA INDEX FOR NUMBER OF STA ID## DUMMY ID SEGMENTS. LDA EDFLG CHECK FOR SZA LOADING OPERATION JMP ED00 -EDITING * NTRM7 LDA IDA ADA P4 GET ADDR OF MEM1 LDB ID## CMB,INB CPB ID# ADA P4 STA ED61 AND SAVE IT. JSB C#S COMPUTE # OF SECTORS NEEDED STA ABT13 AND SAVE FOR LATER. LDB ED61 GET ADDR OF MEM1 ADB P4 AND SET (B)=DMAIN'S ADDR LDA B,I GET DMAN AND M177 ISOLATE SECTOR STA ED62 ADDR AND SAVE. LDA B,I GET DMAN AGAIN ALF,ALF ISOLATE RELATIVE STARTING RAL TRACK NUMBER AND AND M377 ADD BASE TRACK NUMBER. ADA TRAKB STA TRAKP SAVE ABSOLUTE TRACK ADDR ALF,RAL RAL,RAL STA ABT11 SAVE POSITIONED TRACK # LDA TRKLU GET LU OF USER TRACKS CLE,ERA PUT 0 OR 1 FOR LU2 OR CLA LU3 RESPECTIVLY ERA PUT BIT IN (A) IOR ABT11 MERGE IN TRACK IOR ED62 AND SECTOR ADDRES. STA B,I STORE REAL ADDR IN DMAN LDA EDFLG GET EDIT FLAG SZA EDIT OPERATION ? JMP NOSET YES LDB IDA NO, THEN SET BIT7 OF ADB P3 NAM5 WORD OF ID SEG LDA ID## CMA,INA TO INDICATE THAT CPA ID# 'PROG IN CORE ONLY'. INB LDA B,I GET NAM5 WORD IOR B200 MERGE IN BIT7 STA B,I STORE BACK IN NAM5 * NOSET LDA ABT13 GET # OF SECTORS REQD CLB DIVIDE BY # OF SEC/TRK DIV TRKS# TO FIND # OF TRKS REQD. SZB IF REMAINDER INA THEN BUMP TO WHOLE TRK. STA #TRAK SET AS NUMBER OF TRACKS LDA EDFLG GET EDIT FLAG SZA,RSS IF NOT DOING EDIT OPERATION JMP NTRM5 THEN DO NOT COMPRESS TRACKS. * * DETERMINED FOR MAIN/SEGMENT LOAD IF SEMENTS * HAVE TO BE COMPRESSED (MOVED UP ON USER * TRACKS IF PREVIOUS SEGMENTS OR MAIN HAVE * BEEN STUFFED IN SYSTEM AVAILABLE AREA). * LDA ID## CMA,INA CPA ID# IF PROCESSING MAIN JMP NTRM5 THEN DO NOT MOVE. LDB IDA GET CURRENT DUMMY ID SEG ADDR ADB P17 (B)=DMAN ADDR OF PREVIOUS ID LDA ID## ADA ID# CPA P1 PROCESSING FIRST SEG ? ADB P4 YES, ADJUST DMAN'S ADDR. LDA B,I GET DMAN SSA IF PREVIOUS SEG/MAIN ON LU3 JMP NTRM5 THEN TOO DO NOT MOVE CMA,INA MAKE DMAN NEGATIVE AND ADA DSCLB ADD TO DISC LIB ADDR SSA DMAN POINT TO SYSTEM AREA ? JMP NTRM5 NO, THEN TOO DO NOT MOVE. LDA ID## ADA ID# CPA P1 IF PROCESSING FIRST SEGMENT JMP MOVEB THEN MOVE TO START OF USER TRKS CMA,INA SET NEG INDEX FOR NUMBER OF STA ED61 DUMMY IDS TO BE UPDATED. UPID ISZ ED61 REACHED MAIN'S ID ? RSS NO, THEN SKIP. ADB P4 YES, ADJUST DMAN'S ADDR. LDA B,I GET DMAN SSA IS THIS SEG ON LU 3 ? JMP MOVER YES, MOVE TO WHERE HE LEFT OFF. CMA,INA NO, THEN SUBTRACT FROM ADA DSCLB LIB ADDR SSA THIS SEG ON USER TRAKS ? JMP MOVER YES, MOVE TO WHERE HE LEFT OFF. LDA ED61 SZA,RSS EXAMINED MAIN'S ID ? JMP MOVEB YES, MOVE TO START OF USER TRKS. ADB P9 (B)=DMAIN ADDR OF PREVIOUS ID JMP UPID EXAMINE NEXT ID SKP * DETERMINE WHERE LAST SEGMENT OR MAIN LEFT OFF * ON USER TRACKS. * B200 OCT 200 * MOVER LDA B,I SAVE DMAN OF LAST ID STA BID2 POINTING TO USER TRACKS. LDA B ADA N4 (A)=ADDR OF MEM1 JSB C#S DETERMINE NUMBER OF SECTORS STA BID1 AND SAVE THE NUMBER LDA BID2 GET DMAN AND M177 GET SECTOR ADDR ADA BID1 ADD TO TOTAL REQUIRED CLB DTERMINE TRACK OFFSET BY DIV TRKS# DIVIDING BY SECS/TRK STA BID1 SAVE NUMBER OF TRACKS LDA BID2 GET DMAN AGAIN ALF,ALF MASK IN RAL TRACK AND M377 ADDR (RELATIVE) ADA BID1 ADD TRK OFFSET FOR MOVE STA ED66 SET AS DESTINATION TRACK STB ED67 AND SET DESTINATION SECTOR JMP SHIFT GO DO MOVE * DESLU NOP IDCNT NOP * * MOVE TO BEGINNING OF USER TRACKS * MOVEB LDA TRAKB GET BASE TRACK ADDR STA ED66 SET DESTINATION TRACK CLB AND SECTOR TO VERY STB ED67 BEGINNING. * * * MOVE CURRENT AND REMAINING SEGMENTS * UPWARD ON USER TRACKS. * SHIFT LDB ID## SET # OF SEGS TO BE MOVED STB IDCNT INCLUDING CURRENT LDA DSKUN SET DESTINATION LU STA DESLU OF USER TRACKS LDB IDA SET ADDR OF ID SEG STB BID2 BEING PROCESSED. LDA ED66 GET TARGET TRACK NUMBER CPA TRAKP SAME AS SOURCE TRACK # ? CLA,RSS YES, THEN SKIP. JMP DIFTR NO (ATLEXAST 1 TRK DIFFERENCE) LDB ED67 GET TARGET SECTOR ADDR CMB,INB MAKE NEGATIVE TO GET REMAINDER JMP SAMTR GO FIND REMAINING SECS ON TRK DIFTR INA GET NUMBER OF TRACKS CMA,INA TO BE ADA TRAKP SHIFTED THROUGH MPY TRKS# CONVER TO NUMBER OF SECTORS LDB ED67 GET DESTINATION SEC ADDR CMB,INB SUBTRACT FROM SECS/TRK ADB TRKS# TO NUM LEFT ON TRACK. SAMTR ADB ED62 ADD TO OFFSET FROM SOURCE ADB A ADD FOR TRACK OFFSET CMB,INB MAKE NEGATIVE STB BID1 SAVE NEGATIVE SEC OFFSET CLA CLEAR NUMBER STA ED21 OF SECS TO BE MOVED. * * UPDATE DMAN OF CURRENT AND REMAINING * ID SEGMENTS AND DETERMINE TOTAL NUMBER * OF SECTORS TO BE MOVED. * LDA BID2 GET ID SEG ADDR OF CURRENT ID MORID ADA P4 (A)=ADDR OF MEM1 JSB C#S FIND # OF SECS FOR THIS ID ADA ED21 ADD TO TOTAL NUMBER OF STA ED21 SECTORS TO BE MOVED. LDB BID2 ADB P8 (B)=DMAN'S ADDR LDA B,I GET DMAN AND M177 ISOLATE SECTOR ADDR STA BID4 SAVE SECTOR ADDR TEMPORARILY LDA B,I GET DMAIN AGAIN ALF,ALF POSITION RAL AND AND M377 MASK IN RELATIVE TRK ADDR MPY TRKS# GET EQUIVALENT SEC COUNT ADA BID4 ADD SECTOR OFFSET (ADDR IN SECS) ADA BID1 DECREMENT BY SEC OFFSET CLB,CCE (A)=NEW ADDR IN SECS (SET E FOR LU 3) DIV TRKS# GET RELATIVE TRK & SEC ADDR ALF,RAL POSITION REL TRK ADDR RAL,RAL IOR B MERGE IN SECTOR ADDR LDB DSKUN GET THE DISC LU OF MOVE CPB P3 IS IT LU 3 ? RAL,ERA YES, SET SIGN BIT ON TRK-SECT WORD LDB BID2 ADB P8 (B)=ADDR OF DMAIN STA B,I UPDATE DMAIN ISZ IDCNT ALL IDS UPDATED ? RSS NO JMP FSHFT YES, GO MOVE USER TRACKS. LDA BID2 SET ADDR OF NEXT ADA N9 ID SEGMENT (EXTENDING STA BID2 DOWNWARD IN CORE) JMP MORID UPDATE NEXT ID * * MOVE USER TRACKS FSHFT LDA ED21 SET NEGATIVE NUMBER CMA,INA NUMBER OF TRACKS TO STA ED21 BE MOVED. JSB ED15 MOVE USER TRACKS * * NTRM5 LDB IDA GET CURRENT ID SEG ADDR ADB P8 (B)=ADDR OF DMAN LDA ID## CMA,INA CPA ID# IF PROCESSING MAIN'S ADB P4 THEN ADJUST ADDR OF DMAN LDA B,I GET DMAN ALF,ALF POSITION AND RAL ISOLATE ACTUAL AND M377 STARTING TRACK NUMBER STA BID2 SAVE IT LDA B,I GET DMAIN AGAIN AND M177 GET SECTOR OFFSET CMA,INA,SZA,RSS IF NO OFFSET JMP TRBDY THEN NO SPECIAL FIX ADA TRKS# GET SEC LEN - OFFSET CMA,INA TO GET # OF SECS USED IN 1ST TRK ADA ABT13 SUBRTRACT FROM TOTAL SECS NEEDED SSA CROSSED TRACK BOUNDARY ? JMP NTRM9 NO - THEN TAT OK. CLB YES - THEN FIND TRACKS REQD. DIV TRKS# (EXCLUDING OFFSET) SZB IF REMAINDER INA THEN BUMP TO WHOLE TRACK STA #TRAK SET NEW TRACK LENGTH ISZ BID2 ALSO FORGET ABOUT FIRST TRACK TRBDY LDA #TRAK SET NUMBER OF CMA,INA,SZA,RSS TRKS AS NEGATIVE COUNT. JMP NTRM9 TAT OK IF ON TRK BOUNDARY STA ABT1 COUNT. LDA TRKLU SET (B) = FWA OF LDB TATSD SYSTEM CPA P2 OR AUXILIARY CLB DISC'S TRACK BASE ADB TAT ADB BID2 (B)=ADDR IN TAT STB ABT2 SAVE TAT'S ADDR * NTRM2 LDA MSIGN (A)=100000 FOR SYSTEM ASSIGNED. LDB ABT2 (B)= TAT ADDR JSB SYSET SET VALUE IN TAT CLA CHECK CPA EDFLG OPERATIONƢ JMP NTRM8 -NORMAL LDA MSIGN -EDITING- CHANGE LDB ABT2 WORD IN JSB SYRUW TAT ON DISC NTRM8 ISZ ABT2 ADD 1 TO TAT ADDR. ISZ ABT1 INDEX TRACK # COUNTER. JMP NTRM2 -DO NEXT TRACK. * * * DO FINAL ID SEGMENT PROCESSING * NTRM9 CLB CLA,INA (A)=1 FOR ADDITION CPB EDFLG IF NOT EDITING CLA THEN (A)=0 FOR NORMAL LOAD LDB ED25 (B)=ADDR OF TARGET ID IF ANY JSB MVIDS MOVE DUMMY TO REAL ID JSB FIX FIX FOR TRYING LONG TO SHORT MOVE CLA CPA MSEG DOING MAIN/SEGMENT LOAD JMP NTRM4 NO, THEN TERMINATE. JMP *+1,I YES, SET UP FOR NEXT SEG. DEF ED183 (SAVE A BP LINK TOO !) * NTRM4 EQU * SPC 1 IFZ ******* BEGIN MEU CODE ******** LDA #MNPG CALCULATE CMA,INA NUMBER OF PAGES ADA #MXPG USED BY CODE ADA P2 +1 CURR PAGE, +1 BASE PAGE LDB #PGS # PAGES REQUESTED SZB,RSS BY USER? STA #PGS NO, USE PROG SIZE * LDA PLIST SLA LOADR LISTING SUPPRESSED? JMP PTNCK YES, SKIP #PAGES MESS. JSB SPACE LDA #PGS GET PROG SIZE + BASE PAGE JSB CNV99 CONVERT TO ASCII STA MS11# FILL INTO MESSAGE LDA P18 LDB MES11 PRINT MESSAGE JSB DRKEY '00 PAGES REQUIRED' * PTNCK CCA CHECK #PAGES REQ'D DOESN'T LDB PTYPE EXCEED MAX OF QUALIFIED PTTN CPB P2 RT? LDA #MXRT YES SSA (IF NO RT PTTNS, LDA #MXBG USE BG PTTN MAX) SSA (IF NO BG PTTNS, LDA #MXRT USE RT PTTN MAX) SSA SUPER-DUPER ERROR CHECK JMP ER.16 IF NONE, OH-OOH! INA ADD 1 FOR BASE PAGE LDB #PGS CMB,INB ADB A #PAGES REQ'D SSB > MAX ? JSB WN.17 YeES, GIVE WARNING * CCB BUILD ID SEG WORD 22 ADB #PTTN PUT PTTN NUMBER CCE,SSB IN BITS 0-5 CLB,RSS SET BIT 15 IF PTTN RBL,ERB REQUESTED, ELSE 0 * CCA ADA #PGS PUT NUMBER OF PAGES ALF,RAR FOR PROG'S PTTN IOR #MPFT IN BITS 10-14 ALF,ALF & MEM PROT FENCE TABLE RAR INDEX INTO IOR B BITS 7-9 LDB #IDAD KEEP IT IN (A) ADB P21 GET ADDR WORD 22 OF STB SYR1 ID SEG FOR PROG JSB SYSET SET ID SEG IN MEMORY LDB EDFLG SZB,RSS PERMANENT PROG? JMP *+3 NO LDB SYR1 YES, FIX DISC ID SEG JSB SYRUW * JMP DONE FINISHED * * * ISSUE WARNING FOR CODE EXCEEDING PTTN SIZE * CALL SEQUENCE: JSB WN.17 * WN.17 NOP LDA P4 (A)=CHAR COUNT LDB WNG17 (B)=MESSAGE ADDR JSB SYOUT PRINT: 'W 17' JMP WN.17,I RETURN * WNG17 DEF *+1 ASC 2,W 17 CODE > PTTN SIZE * MES11 DEF *+1 ASC 9,00 PAGES REQUIRED MS11# EQU MES11+1 * ******* END MEU CODE ********** XIF SPC 1 DONE LDA #IDAD INA GET ADDR OF ID TEMP AREA LDB #IDAD ADB P10 GET ADDR OF B-REG SAVE WORD STB SYR1 WITHIN THE ID SEG JSB SYSET SET TEMP ADDR IN B LDB EDFLG SZB,RSS JMP *+3 LDB SYR1 IF PERMANENT, UPDATE JSB SYRUW ID SEG ON DISC TOO * LDA P12 LDB MESS4 MESS4 = ADDR: XXXXX READY ETC. JSB SYOUT PRINT: XXXXX READY - LOADING ETC * * * EXIT JSB SPACE DO A LINE FEED LDA P4 SET UP TO LDB ENDMS SEND END MESSAGE. * LTERM JSB SYOUT SEND TERMINATE MESSAGE * * LDB BATCH GET BATCH FLAG * LDA OPCOD GET OP CODE * CPA P4 IS IT DELETE ? * SZB YES - NON-BATCH OPERATION ? *  JMP DLEN NO - THEN GO THROUGH PAGE-EJECT * JMP EXIT1 AVOID PAGE EJECT FOR NON-BATCH DELETE DLEN LDA PLIST GET LIST/NO LIST FLAG CPA P3 SKIP PAGE EJECT IF JMP EXIT1 NOT LISTING ANYTHING AT ALL * LDA TYPE3 GET THE LIST TYPE ERA,SLA FILE OR LU ? JMP EXIT1 FILE. PAGE EJECT NOT NECESSARY * LDA LISTU GET THE LIST LU AND M77 TO A IOR M1100 SET THE PAGING BITS STA RELAD SET FOR EXEC CALL JSB EXEC DEF *+4 CALL TO EJECT A PAGE ON A DEF P3 PRINTER OR DEF RELAD SPACE 2 LINES ON DEF N2 A TTY * * EXIT1 JSB EXEC RELEASE DEF *+3 ANY TRACKS DEF P5 NOT DEF N1 ACCOUNTED FOR. * * JSB FCLOS CLOSE ALL OPEN FILES * * * PASS BACK PROG NAME TO BATCH MONITOR * JSB PRTN CALL ROUTINE DEF *+2 DEF PRAM ADDR OF NAME BUF * SPC 1 JSB EXEC REQUEST PROG COMPLETION DEF *+2 DEF P6 6 = PROG COMPLETION CODE SPC 1 $END ASC 2,$END M1100 OCT 1100 SPC 1 RELAD BSS 1 RELATIVE BG ADDR M40 OCT 40 TEMPP BSS 1 ABSOLUTE PROG WORD LELAD DEC -1 OFFSET INTO CURRENT LOAD MODULE ABWRD NOP SAVED ABSOLUTE PROG WORD ENDMS DEF $END SKP * P21 DEC 21 * SUBROUTINE: "MEM?" IDENTIFY LONG/SHORT ID SEGMENT * * THIS SUBROUTINE IDENTIFIES WHETHER THE ID SEGMENT * UNDER CONSIDERATION IS LONG OR SHORT. * * (NOTE: THIS ROUTINE NOT USED FOR DUMMY ID SEGMENTS * SET UP BY THE LOADER) * * CALL: (B)=ADDRESS OF NAM5 WORD IN ID SEGMENT * (P) JSB MEM? * * RETURN (P+1) FOR SHORT ID SEGMENT * (P+2) FOR LONG ID SEGMENT * REG-B = ADDRESS OF MEM1 IN ID SEGMENT. * REG-A = OCT 20 IF (P+1) RETURN * = 0 IF (P+2) RETURN * * MEM? NOP LDA B,I GET NAM5 WORD FROM ID SEG AND M20 MASK IN 'SS' BIT INB (B)=MEM1 ADDR OF SHORT ID SZA LONG ID ? ('SS' BIT = 0) JMP MEM?,I NO, SHORT ID RETURN. ADB P7 (B)=MEM1 ADDR OF LONG ID ISZ MEM? BUMP TO (P+2) RETURN JMP MEM?,I LONG ID RETURN * SKP * SUBROUTINE: "MIDN" MATCH ID SEGMENT NAME * * THIS ROUTINE SEARCHES THE SYSTEM ID SEGMENTS * TO FIND A MATCH WITH THE NAME IN THE CURRENT * DUMMY ID SEGMENT. * * CALL: (P) JSB MIDN * (P+1) -NO MATCH RETURN- * (P+2) -MATCH RETURN, ID SEG ADDR IN ABT1 AND (B) * MIDN NOP LDA KEYWD INITIALIZE STA ABT1 KEYWORD LIST ADDR. * MIDN1 LDB ABT1,I IF END-OF-LIST, SZB,RSS RETURN TO JMP MIDN,I NO MATCH RETURN, P+1. * ADB P12 COMPARE LDA B,I NAME CPA NAM12,I AREAS INB,RSS OF JMP MIDN2 DUMMY ID SEG. LDA B,I AND CPA NAM34,I CURRENT INB,RSS SYSTEM ID SEG. JMP MIDN2 LDA B,I STA BLKID SAVE THE TYPE WORD AND M7400 STA B LDA NAM5,I AND M7400 CPA B JMP MIDN3 MATCH - MIDN2 ISZ ABT1 INDEX FOR NEXT ID SEGMENT- JMP MIDN1 CONTINUE SCAN. * MIDN3 ISZ MIDN MATCH - ADJUST RETURN TO (P+2) LDB ABT1,I (B) = ADDR OF MATCH ID SEG. LDA BLKID GET THE ID WORD AND P7 STRIP TO TYPE CPA P4 IF CORE RSS CPA P1 RESIDENT JMP ERL11 ERROR GO SEND MESSAGE AND ABORT JMP MIDN,I RETURN. SPC 1 ERL11 LDA ASL11 SEND L11 MESSAGE JMP ABOR AND ABORT SPC 2 ASL11 ASC 1,11 * * CONVERT TO DECIMAL ASCII (MAX VALUE = 99) * CALL SEQUENCE: LDA VALUE * JSB CNV99 * STA ASCII * CNV99 NOP QUICK CONVERSION CLB BKNLHINARY TO DECIMAL ASCII DIV P10 MAX VALUE = 99 SZA ADA M20 FORCE LEADING BLANK IF ZERO ADA M40 ALF,ALF PUT IN LEFT HALF IOR B FILL UNITS IN RIGHT IOR B60 JMP CNV99,I RETURN ASCII IN (A) B60 OCT 60 SKP )oN* * SUBROUTINE: 'SYRUW' SYSTEM DISC READ/UPDATE/WRITE * * THIS ROUTINE PROVIDES FOR UPDATING A WORD IN * THE ID SEGMENT OR 'TAT' AREA OF THE SYSTEM DISC. * * CALL: (A) = VALUE TO BE STORED IN WORD * (B) = ADDR OF WORD IN ID SEG AREA OR TAT * * (P) JSB SYRUW * (P+1) -RETURN- * * SYRUW NOP STA SYR1 SAVE VALUE LDA KEYWD,I SUB. FWA OF 1ST ID SEGMENT CMA,INA AND ADD IN ADA B POSITION OF 1ST ADA IDSDP ID SEG TO GET RELATIVE ADDR. CLB DIVIDE DIV P64 BY 64 ADB ALBUF SET ADDR STB SYR2 WITHIN LBUF STA B SAVE REL SECTOR # LDA IDSDA GET DISC ADDR OF 1ST ID SEG, AND M177 ISOLATE SECTOR # AND ADB A ADD TO REL SECTOR # LDA IDSDA GET AND ALF,ALF SAVE STARTING RAL TRACK #. AND M377 STA UTRAK LDA B DIVIDE REL SECTOR CLB # BY # SECTORS/ DIV SECT2 TRACK STB USECT AND SET SECTOR # ADA UTRAK SET ABS. STA UTRAK TRACK #. * JSB UREAD READ IN SECTOR * LDA SYR1 UPDATE STA SYR2,I WORD ISZ P1 CHANGE 1 TO 2 (FOR UPDATE) JSB UREAD RE-WRITE SECTOR CLA,INA RESET 1 STA P1 IN 'P1'. * JMP SYRUW,I RETURN. * SYR1 NOP SYR2 NOP SKP * OUTPUT ABSOLUTE PROG WORD * * ABOUT PUTS OUT THE CURRENT ABSOLUTE PROG WORD. * * IF THE CURRENT PROGRAM WORD IS TO BE LOCATED IN A DIFFERENT * SECTOR FROM THE CURRENT SECTOR, THE CURRENT SECTOR IS WRITTEN ON * THE DISK AND THE APPROPRIATE SECTOR READ. * * * CALLING SEQUENCE: * A = CURRENT PROGRAM WORD * B = ADDRESS * DTBL SET UP AS FOLLOWS: *DTBL DEF BASE MEMORY ADDRESS * DEF BASE TRACK OFSET -STRAK * DEF BASE SECTOR OFSET -SSECT * * JSB ABOvXUT * * RETURN: CONTENTS OF A AND B ARE DESTROYED * ABOUT NOP STB TEMPQ SAVE THE ADDRESS STA TEMPP SAVE ABSOLUTE PROG WORD LDA DTBL,I SUBTRACT FWA OF CMA,INA AREA FROM CURRENT ADA B ADD CURRENT RELOCATION ADDR. STA RELAD SAVE RELATIVE ADDR. LDA MSIGN SET ABT14 TO INA BE 100001 FOR NO SUSPENSION, STA ABT14 1 TRACK ALLOCATION. * CLA,INA IF FLAG SAYS DUMMY BASE PAGE CPA ABT12 AREA IS BEING OUTPUT, JMP AB0 SKIP OVERFLOW CHECK. * CMB,INB FROM LWA OF AREA. ADB LWA -ERROR SSB IF AREA IS JMP LGERR EXCEEDED. * AB0 CLB DIVIDE RELATIVE ADDR LDA RELAD BY 64 (SECTOR SIZE). DIV P64 STB SPOS SAVE REMAINDER (POSITION) ADA DTBL+2,I ADD STARTING SECTOR OF PROG.=0 IF MAIN CLB DIVIDE BY # OF DIV TRKS# SECTORS PER TRACK. CLE SET FOR ERB,RBL EVEN SECTOR BOUNDARIES STB TSECT SAVE SECTOR # IN TRACK. LDB P64 SEZ,RSS IF SECTOR WAS ODD JMP *+3 * ADB SPOS OFFSET POSITION TBY 64 STB SPOS ADA DTBL+1,I ADD THE PGRM BASE TRACK AND(=0 IF MAIN) STA B SAVE FOR TEST OF OVERFLOW ADA TRAKB ADD IN TRACK BASE ADDR. STA TTRAK SAVE AS ABSOLUTE TRACK # LDA #TRAK SUBTRACT # OF TRACKS ALLOCATED CMA,INA FROM RELATIVE TRACK #, ADA B A POSITIVE RESULT MEANS TRACK SSA,RSS OVERFLOW, GO TO JMP AB3 OVERFLOW SECTION. * * TRACK/SECTOR OF CURRENT WORD IS DETERMINED. * LDA TTRAK CHECK FOR CURRENT TRACK/SECTOR CPA DTRAK = TRACK/SECTOR IN CORE. RSS TRACKS =. JMP AB1 LDA TSECT CHECK FOR SECTOR CPA DSECT # NEEDED. JMP AB2 -CURRENTLY IN CORE. * * WWRITE OUT SECTOR IN CORE, READ IN NEW SECTOR * AB1 JSB DWRIT WRITE CURRENT SECTOR. LDA TTRAK SET STA DTRAK NEW LDA TSECT TRACK/SECTOR #'S. STA DSECT JSB DREAD READ IN DESIRED SECTOR. * AB2 LDB ADBUF ADD POSITION IN SECTOR OF NEW ADB SPOS WORD TO ADDR OF DBUF. LDA TEMPP STORE ABSOLUTE WORD INTO STA B,I DBUF CLA,INA RETURN IMMEDIATELY IF DUMMY CPA ABT12 BASE PAGE AREA IS JMP ABOUT,I BEING OUTPUT * * CHECK FOR NEW UPPER BOUND * LDA TEMPQ ABSOLUTE LOAD ADDR, INA ADD 1, STA B SAVE. CMA,INA -SUBTRACT THIS ADDR ADA TPREL FROM CURRENT UPPER BOUND, SSA IF CURRENT IS LARGER, * * SET UP TPREL HIGH LOAD +1 !!!!!!!!!!!!! * STB TPREL SET NEW ADDR. JMP ABOUT,I RETURN * TEMPQ NOP * * * OVERFLOW OF TRACK ALLOCATION * AB3 JSB EXEC ASK FOR 1 TRACK DEF *+6 DEF P4 DEF ABT14 1 TRACK. DEF ABT1 -STARTING TRACK # - DEF ABT2 -LOGICAL UNIT # - DEF ABT3 -# SECTORS PER TRACK- * CCA CPA ABT1 IF NO TRACK AVAILABLE, JMP AB4 GO TO PRINT WAITING MESSAGE. * LDA ABT2 CHECK IF NEW TRACK ON SAME CPA TRKLU DISC (LOGICAL UNITS =) RSS -YES JMP AB10 -NO, LDA TRAKB CHECK FOR NEW TRACK TO ADA #TRAK BE NEXT CONTIGOUS TO CMA,INA SUBTRACT FROM ADA ABT1 NEW ALLOCATION SZA IF CONTIGOUS SKIP JMP AB5 ELSE GO TEST FURTHER JSB RELLO RELEASE ANY TRACKS BELOW THE NEEDED ISZ #TRAK ADD 1 TO # OF TRACKS JMP AB0 CONTINUE. * * PRINT WAITING MESSAGE AND REPEAT 1 TRACK CALL * AB4 LDA P22 PRINT: LDB ITRKM "WAITING FOR DISC SPACE" JSB SYOUT CLA,INA RESET FOR SUSPENSION, STA ABT14 1 TRACK, JMP AB3 REPEAT CALL. SPC 1 AB5 SSA,RSS IF NEW TRACK BELOW CURRENT AREA JMP AB10 SKIP, ELSE GO SET TO MOVE JMP AB3 GO TRY ANOTHER ALLOCATION SPC 1 * * NOT CONTIGUOUS, RELEASE LATEST AND ALLOCATE * COMPLETE NEW SET OF TRACKS. * AB10 JSB EXEC RELEASE ONE DEF *+5 TRACK DEF P5 JUST DEF P1 ALLOCATED DEF ABT1 DEF ABT2 * JSB RELLO RELEASE ALL TRACK BLOW CURRENT LDA #TRAK SAVE STA ABT1 CURRENT LDA TRAKB VARIBLES STA ABT2 ASSOCIATED STA ABT9 LDA TRKLU WITH STA ABT3 TRACK LDA TRKS# ALLOCATION STA ABT4 LDA SSECT STA ABT5 LDA STRAK STA ABT6 * JSB DWRIT WRITE OUT CURRENT SECTOR. ISZ #TRAK JSB ITRAK LARGER THAN PREVIOUS. * LDA ABT2 OLD TRAKB + OLD #TRAK ADA ABT1 TO ABT7 FOR LIMIT STA ABT7 ON MOVE. LDA TRAKB STA ABT8 CLA SET STARTING STA ABT10 SECTOR # = 0 FOR BOTH STA ABT11 SOURCE AND DESTINATION TRACKS. * * MOVE PREVIOUS INFORMATION TO NEW SET OF TRACKS * AB11 JSB EXEC READ SECTOR DEF *+7 DEF P1 DEF ABT3 SOURCE LOGICAL UNIT DEF DBUF DBUF INPUT DEF P128 DEF ABT9 CURRENT TRACK DEF ABT10 CURRENT SECTOR * JSB EXEC WRITE SECTOR DEF *+7 DEF P2 DEF TRKLU DESTINATION LOGICAL UNIT DEF DBUF DEF P128 DEF ABT8 CURRENT TRACK DEF ABT11 CURRENT SECTOR * LDA ABT10 UPDATE SOURCE ADA P2 SECTOR #. CPA ABT4 IF = TO # SECTORS PER TRACK, CLA RESET TO ZERO STA ABT10 AND RESTORE. SZA,RSS IF RESET ISZ ABT9 # ADD 1 TO CURRENT TRACK #. LDA ABT9 CHECK FOR TERMINATION CPA ABT7 TRACK #. JMP AB12 -YES. * LDA ABT11 UPDATE DESTINATION ADA P2 SECTOR #. CPA TRKS# IF = TO # SECTORS PER TRACK CLA RESET TO ZERO STA ABT11 AND RESTORE. SZA,RSS IF RESET, ISZ ABT8 ADD 1 TO CURRENT TRACK #. LDA TRAKB CHECK FOR POSSIBLE ADA #TRAK OVERFLOW OF NEW CPA ABT8 ALLOCATION. HLT 0 ?????????????????????????????????????? JMP AB11 -NO, CONTINUE COPY * AB12 LDA TRAKB SET UP "DREAD" STA DTRAK AND CLA READ IN SECTOR 0 STA DSECT OF FIRST TRACK JSB DREAD TO INITIALIZE. * * RELEASE OLD SET OF TRACKS * JSB EXEC DEF *+5 DEF P5 DEF ABT1 DEF ABT2 DEF ABT3 * LDA ABT5 RESET RELATIVE STA SSECT STARTING TRACK AND SECTOR LDA ABT6 FOR CURRENT STA STRAK LOAD. * * ADJUST RELATIVE DMAN IN SEGMENTS' IDS IF * PROCESSING SEGMENTS (MAIN'S RELATIVE * DMAN IS ALREADY SET UP - ZERO). * CLA,INA CPA ID# IF PROCESSING SEGMENTS RSS JMP AJST THEN ADJUST THEIR DMAN * * CHECK FOR DIFFERENT SIZE DISCS * LDA ABT4 IF # OF SECTORS IS THE SAME CPA TRKS# ON BOTH ALLOCATIONS, JMP AB0 THEN CONTINUE TO LOAD. * CLA IF NOT DOING MAIN/SEGMENT CPA MSEG LOADING, THEN ALSO JMP AB0 CONTINUE TO LOAD. * * NEED TO ADJUST BASE TRACK/SECTOR BASES FOR * MAIN AND SEGMENTS. * * AJST LDA ID# SET INDEX AS # OF DEFINED CMA,INA DUMMY ID SEGMENTS STA ABT1 FOR MAIN/SEGMENT. CCB SET 'STRAK' & 'SSECT' TO STB ABT7 BE SET ONLY ONCE. LDA IDA (A)= STARTING ADDR. * AB14 ADA P8 SET (ABT2) = ADDR OF ID {STA ABT2 SEGMENT WORD (DISC ADDR) ISZ ABT1 IF ABOUT TO UPDATE MAIN'S ID RSS JMP AB0 THEN AVOID - DMAN ALREADY ZERO. LDA ABT2,I GET DISC ADDR AND M177 ISOLATE AND SAVE STA ABT5 SECTOR #. LDA ABT2,I GET AGAIN ALF,ALF FOR RAL ISOLATING AND M377 TRACK #. MPY ABT4 MULTIPLY BY PREVIOUS # SECT/TRAK ADA ABT5 ADD SECTOR BASE, CLB DIVIDE BY NEW TRKS# TO GET NEW DIV TRKS# TRACK/SECTOR BASE. ISZ ABT7 IF 'STRAK' & 'SSECT' SET ONCE JMP *+3 THEN DO NOT MODIFY AGAIN. STA STRAK SET RELATIVE TRACK & SECTOR STB SSECT ADDR FOR NEXT ID SEGMENT. ALF,ALF ROTATE TRACK TO 14-07, RAR AND -OR- SECTOR # IOR B INTO 06-00, STA ABT2,I RESTORE WORD IN ID SEGMENT. LDA ABT2 (A)= ID SEGMENT (DUMMY) ADDR. INA JMP AB14 -CONTINUE TO PROCESS. * P22 DEC 22 ABT1 NOP TEMPORARY ABT2 NOP ABT3 NOP STORAGE ABT4 NOP ABT5 NOP FOR ABT6 NOP ABT7 NOP "ABOUT" ABT8 NOP ABT9 NOP ROUTINE. ABT10 NOP ABT11 NOP ABT12 NOP ABT13 NOP ABT14 NOP SPC 1 RELLO NOP RELEASE ALL OWNED TRACKS BELOW CLA THE CURRENT TRAKB STA ABT2 CLEAR THE TRACK COUNT LDA TAT SET THE ATAT ADDR STA ABT3 FOR INDEXING LDB TATSD SET UP THE TRAKB STOP LDA TRKLU IF ON LU 3 SLA,RSS THEN CLB ADD TATSD ADB TRAKB ADD THE CURRENT BASE STB ABT5 SET AS THE LIMIT SPC 1 GA0 LDA ABT2 GET CURRENT TRACK CPA ABT5 END? JMP RELLO,I YES RETURN LDA ABT3,I NO IS THE TRACK CPA XEQT ASSIGNED TO ME? RSS IF SO SKIP JMP GA1 ELSE GO STEP THE PNTRS LDA P2 SET UP TO REALSE THE TRACK LDB TATSD IF ON CMB,INB LU 3 ADB ABT2 THE SSB,RSS TRACK AND LU INA MUST BE ADDJUSTED SSB FOR THE AUX DISC LDB ABT2 DST ABT6 SET FOR THE CALL JSB EXEC GIV THE TRACK BACK DEF *+5 DEF P5 DEF P1 DEF ABT7 DEF ABT6 SPC 1 GA1 ISZ ABT2 ISZ ABT3 STEP THE PNTRS JMP GA0 AND CONTINUE SKP * * SUBROUTINE: "MVIDS" MOVE ID SEGMENT * * PURPOSE: THIS IS A GENERAL ROUTINE TO PROCESS * THE DUMMY ID SEGMENTS GENERATED DURING * BOTH A NORMAL LOAD AND AN EDITING * OPERATION. IT PERFORMS THE FOLLOWING * FUNCTIONS ACCORDING TO THE TYPE OF * LOAD OPERATION: * * 1) NORMAL BG LOAD: * * -FIND BLANK ID SEGMENT * -MOVE DUMMY ID SPECIFIED BY * THE CONTENTS OF "IDA" TO * THE POSITION OF THE BLANK * ID SEGMENT IN THE SYSTEM AREA. * * 2) EDITING OPERATION: * * ADDITION: SAME AS FOR A NORMAL * LOAD EXCEPT THAT THE NEW * ID SEGMENT IS WRITTEN IN THE * APPROPRIATE AREA ON THE SYSTEM * DISC TO MAKE THIS A PERMANENT * ADDITION. * * * * CALLING SEQUENCE: (IDA) = ADDR. OF DUMMY * ID SEGMENT * * (A):= 0 FOR NORMAL LOAD * * = 1 FOR EDITING ADDITION * * (B) = ID SEGMENT ADDR IF A * PARTICULAR ONE IS TO * BE USED FOR ADDITION. * * (P) JSB MVIDS * (P+1) -ERROR - NO BLANK ID'S- * (P+2) - NORMAL RETURN- * SKP * MVIDS NOP JSB $LIBR GO PRIVILEDGED !!!!!!!!!!!!!!! NOP STA ABT10 SAVE EDIT NO-EDIT FLAG STB ABT11 SAVE DESTINATION ID ADDR * LDA DESA INITIALIZE DESTINATION STA DESAM ADDR ARRAY PNTR. LDA RTORG SUBTRACT FWA OF R/T AREA CMA,INA FROM SOURCE ID ADDR TO ADA IDA CHECK IF SOURCE IS IN DUMMY. SSA,RSS SOURCE ID IN SYSTEM AREA ? JMP DMYMV NO, THEN IT IS IN DUMMY. * * SOURCE ID IS IN SYSTEM AREA AND SO DESTINATION * MUST BE SPECIFIED. ONLY MEM1 TO DMAN NEED TO * BE MOVED FROM SOURCE TO DESTINATION. * LDB IDA ADB P14 (B) = NAM5 ADDR OF SOURCE ID JSB MEM? GET ADDR OF MEM1 NOP STB SRADR SET FWA OF SOURCE LDB ABT11 GET DESTINATION ID ADDR ADB P14 (B)=NAM5 ADDR OF DESTINATION ID JSB MEM? GET ADDR OF MEM1 NOP LDA N5 SET MOVE COUNT = 5 WORDS STA NUMWD FOR MEM1 TO DMAN. JSB STRFR TRANSFER ADDRES INTO ARRAY JMP MOVID MOVE TO SYSTEM AREA * * SET ADDRESS ARRAY FOR CONSEQUETIVE MOVE. * (A) = NUMBER OF WORDS TO BE MOVED * (B) = FIRST WORD DESTINATION ADDR * STRFR NOP SADRS STB DESAM,I SET DESTINATION ID WORD ADDR ISZ DESAM MOVE UP TO NEXT ARRAY STORAGE INB BUMP ID WORD ADDR INA,SZA ALL ADDRES STORED ? JMP SADRS NO, THEN CONTINUE. JMP STRFR,I RETURN * * SOURCE ID IS IN DUMMY AREA. SET SOURCE * ADDRESS AND COUNT AND ALSO CHECK IF * DESTINATION ID HAS BEEN SPECIFIED. * DMYMV LDB IDA SET ADDR STB SRADR OF SOURCE ID. LDA ID# CHECK IF SOURCE CMA,INA ID IS FOR CPA ID## MAIN (LONG ID) ? CLA,RSS SET FLAG FOR LONG ID = 0 CCA SET FLAG FOR SHORT ID = -1 STA SSFLG SOURCE ID TYPE FLAG LDB N9 SET MOVE COUNT=-9 (SHRT ID) SZA,RSS IF LONG ID LDB N13 THEN SET MOVE COUNT=-13. STB NUMWD LDB ABT11 GEgT DESTINATION ID ADDR SZB,RSS DESTINATION SPECIFIED ? JMP FBLNK NO, THEN FIND BLANK ID. * * DESTINATION ID HAS BEEN SPECIFIED * ADB P14 (B)=NAM5 ADDR OF DESTINATION ID JSB MEM? FIND IF ID LONG OR SHORT. CCB,RSS SHORT ID, SET (B)=-1. CLB LONG ID, SET (B)=0. SZB DESTINATION ID LONG ? JMP SCHK NO, GO CHECK SOURCE ID. CPB SSFLG YES. IS SOURCE ID ALSO LONG. JMP DB13B YES, THEN SET 13 WORD TRANSFER. JMP SDS9B NO, SET 9 TO 13 WORD TRANSFER. SCHK CPB SSFLG IS SOURCE ID SHORT TOO ? JMP DS9S YES, SET 9 TO 9 WORD TRANSFER. MBACK JSB $LIBX ERROR RETURN (LONG TO SHORT ILLEGAL). DEF MVIDS * * FIND BLANK ID OF APPROPRIATE LENGTH * FBLNK JSB BLKID FIND BLANK ID ASSIGNMENTS LDB SSFLG GET SOURCE ID FLAG SZB,RSS SOURCE ID SMALL ? JMP SLNG NO, ANALYZE FOR LONG ID. LDA BID4 SET ADDR OF SMALL ID STA ABT11 W/O DISC ALLOCATION. LDB BID8 GET # OF SMALL IDS W/O DISC ALLOC SZB ANY SMALL IDS W/O DISC ALLOCATION ? JMP DS9S YES, SET 9 WORD SMALL-TO-SMALL TRFR LDA BID3 SET ADDR OF SMALL ID STA ABT11 WITH LEAST DISC ALLOCATION. LDB BID6 (B)=3 SMALL IDS WITH & W/O DSC ALLOC SZB ANY AVAILABLE ? JMP DS9S YES, SET 9 WORD SMALL-TO-SMALL TRFR * SLNG LDB BID7 GET # OF LONG IDS W/O DISC ALLOC LDA BID2 (A)=LONG ID ADDR W/O DISC ALLOC SZB ANY LONG ID W/O DISC ALLOCATION ? JMP SSCHK YES LDA BID1 (A)=LONG ID ADDR WITH LEAST DSC ALLOC LDB BID5 (B)=# OF LONG IDS WITH & W/O DSC ALLC SZB,RSS ANY LONG ID WITH DISC ALLOCATION ? JMP OSHIT NO, DO ERROR RETURN. * SSCHK STA ABT11 SET DESTINATION ID ADDR LDA SSFLG GET SOURCE ID FLAG SZA,RSS SOURCE ID LONG ? Q& JMP DB13B YES, SET 13 WORD BIG-TO-BIG TRANSFER SKP SDS9B LDB IDA ADB P3 (B)=NAM5 ADDR IN SHORT ID LDA B,I GET NAM5 WORD CONTAINING 'SS' BIT XOR M20 MASK OFF 'SS' BIT STA B,I AND STORE BACK NAM5 * * * TRANSFER FROM SMALL ID IN DUMMY AREA TO * BIG ID IN SYSTEM AREA. * LDB ABT11 GET DESTINATION ID ADDR ADB P7 (B)=ADDR OF PRIM ENTRY POINT STB DESAM,I SET ADDR IN ARRAY ISZ DESAM ADB P5 (B)=ADDR OF NAM12 LDA N3 (A)=-3 FOR TRFR OF NAM12 TO NAM5 JSB STRFR TRANSFER ADDR PNTRS ADB P7 (B)=ADDR OF MEM1 LDA N5 (A)=-5 TO TRFR MEM1 TO DMAN PNTRS JSB STRFR TRANSFER MEM1 TO DMAN ADDRES JMP MOVID DO MOVE TO SYSTEM AREA * * * TRANSFER FROM SMALL ID IN DUMMY AREA TO * SMALL ID IN SYSTEM AREA. * DS9S LDB ABT11 (B)=DESTINATION ID ADDR ADB P11 POSITION TO PRENT OF ID SEG LDA N9 (A)=-9 TO TRANSFER 9 WORDS JSB STRFR TRANSFER ADDR PNTRS JMP MOVID DO MOVE TO SYSTEM AREA * N3 DEC -3 P11 DEC 11 * * TRANSFER FROM BIG ID IN DUMMY AREA * TO BIG ID IN SYSTEM AREA. * DB13B LDB ABT11 GET DESTINATION ID ADDR ADB P6 (B)=ADDR OF PRIORITY WORD LDA N2 (A)=-2 TO TRFR PRIOTY & PRM EN PNT JSB STRFR TRANSFER ADDR PNTRS ADB P4 (B)=ADDR OF NAM12 LDA N3 (A)=-3 TO TRFR NAM12 TO NAM5 PNTRS JSB STRFR TRANSFER ADDR PNTRS ADB P2 (B)=ADDR OF RESL WORD LDA N3 (A)=-3 FOR RESL TO TMDY2 ADDR TRFR JSB STRFR TRANSFER ADDR PNTRS ADB P2 (B)=ADDR OF MEM1 LDA N5 (A)=-5 FOR MEM1 TO DMAN ADDR TRFR JSB STRFR TRANSFER ADDR PNTRS * AND DO MOVE TO SYSTEM AREA. SKP * * * MOVE INTO SYSTEM ID AREA TAKES PLACE FROM * SOURCE (FIRST WORD ADDR IN 'SRADR' AND * AND BUMPED CONSEQUEJcTIVELY) TO DESTINATION * (ADDRESS POINTERS SET UP IN 'DESAM' ARRAY). * NUMBER OF WORDS TO BE MOVED IS IN 'NUMWD'. * MOVID LDB DESA INITIALIZE DESTINATION STB DESAM ADDR ARRAY PNTR. LDB SRADR SAVE SOURCE AS WELL. STB SRAD2 LDB NUMWD STB NUMW2 KEPON LDA SRADR,I GET WORD FROM SOURCE ID LDB DESAM,I (B)=ADDR OF DESTINATION ID WORD STA B,I STORE IN SYSTEM ID ISZ DESAM BUMP DESTINATION ARRAY ADDR ISZ SRADR BUMP SOURCE ADDR OF ID WORD ISZ NUMWD ALL WORDS MOVED ? JMP KEPON NO, DO MORE. * JSB $LIBX RESTORE INTERUPT PROCESSING DEF *+1 DEF *+1 * LDB ABT10 GET EDITING FLAG SZB,RSS ARE WE EDITING ? JMP NODSK NO. DON'T UPDATE THE DISC * LDB DESA GET THE SOURCE AGAIN STB DESAM DODSK LDA SRAD2,I LDB DESAM,I JSB SYRUW UPDATE THE DISC ISZ DESAM ISZ SRAD2 ISZ NUMW2 FINISHED ? JMP DODSK NO . * NODSK LDB ABT11 GET DEST ADDR ADB P14 BUMP TO NAM5 ADDR LDA B,I GET TYYPE AND P7 CPA P5 IS IT A SEGMENT? CLA,RSS YES, SET SSFLG=0 CCA NO, SET SSFLG=-1 STA SSFLG SPC 1 IFZ ******* BEGIN MEU CODE ******** JSB MEM? USE MEM? TO GET ADDR OF MEM1 NOP IGNORE SHORT RETURN ******* END MEU CODE ********** XIF SPC 1 ISZ SSFLG SKIP IF NOT SEGMENT JMP MOVI2 BUT IF SEGMENT TRY FIND HIGH LDA ABT11 FIND LOW SINCE THIS IS MAIN STA #IDAD SAVE ADDR OF THIS ID SPC 1 IFZ ******* BEGIN MEU CODE ******** LDA B,I (B) STILL IS ADDR OF MEM1 ALF,RAL SHIFT PAGE NUMBER RAL TO BITS 0-4 AND M37 STA #MNPG SAVE LOWEST PAGE # ******* END MEU CODE **********  XIF SPC 1 * MOVI2 EQU * SPC 1 IFZ ******* BEGIN MEU CODE ******** INB INCRE TO MEM2 CCA SUBT 1 FROM MEM2 FOR ACTUAL LAST WORD ADA B,I ALF,RAL SHIFT PAGE NUMBER RAL TO BITS 0-4 AND M37 LDB A CMB,INB IS THIS PAGE # ADB #MXPG HIGHER THAN PREVIOUS SSB HIGHEST PAGE #? STA #MXPG YES, SET NEW HIGH ******* END MEU CODE ********** XIF SPC 1 ISZ MVIDS BUMP TO SUCCESSFUL RETURN JMP MVIDS,I **RETURN** * * 'MVIDS' CONSTANTS * NUMWD NOP NUMBER OF WORDS TO BE MOVED SRADR NOP FWA OF SOURCE ID MOVE DESA DEF MVBUF ARRAY CONTAINING ADDRES * IN DESTINATION ID AREA DESAM NOP CURRENT PNTR TO ARRAY SSFLG NOP 0 FOR LONG, -1 FOR SHORT SOURCE ID NUMW2 NOP SRAD2 NOP * OSHIT JSB $LIBX RETURN TO INTERUPT PROCESSING DEF *+1 DEF *+1 LDA SSFLG LONG OR SHORT ID PROCESSING ? JMP NOIDS LONG. LDA ERR26 JMP ABOR SHORT, ABORT THE LOAD ERR26 ASC 1,26 * SKP * * SUBROUTINE: "C#S" CALCULATE # SECTORS * * THIS ROUTINE CALCULATES THE TOTAL # OF WORDS * IN THE MAIN BODY AND BASE PAGE AREA FOR A PROG * AND DETERMINES THE # OF SECTORS REQUIRED. * * CALL: (A) = ADDRESS OF MEM1 IN ID SEGMENT * * (P) JSB C#S * (P+1) -RETURN- (A) = # SECTORS REQUIRED * * C#S NOP STA ABT4 INA SET STA ABT5 ADDRES INA OF STA ABT6 BOUNDS INA WORDS. STA ABT7 * LDA ABT4,I DETERMINE CMA,INA # OF ADA ABT5,I MAIN WORDS STA ABT1 LDA ABT6,I DETERMINE CMA,INA # OF ADA ABT7,I BASE PAGE WORDS CLB DIV P64 DIVIDE BP BY SZB 64 AN^NLHD INA ROUND AND SLA SKIP IF EVEN SECTOR COUNT INA ELSE BUMP TO EVEN SECTOR COUNT STA ABT2 SAVE. CLB DIVIDE MAIN # WORDS LDA ABT1 BY 64, DIV P64 ROUND TO WHOLE SECTOR SZB INA SLA IF ODD SECTOR COUNT INA THEN MAKE EVEN. ADA ABT2 ADD TO BASE PAGE COUNT FOR TOTAL JMP C#S,I RETURN. SKP HN* * * * * * * * SUBROUTINE: "BLKID" * * THIS ROUTINE SCANS THE SYSTEM ID SEGMENTS AND * AND RECORDS THE FOLLOWING : * * BID1 = ADDRESS OF BIG ID WITH LEAST DISC ALLOC. * BID2 = ADDRESS OF BIG ID WITHOUT DISC ALLOCATION * BID3 = ADDRS OF SMALL ID WITH LEAST DISC ALLOC. * BID4 = ADDRS OF SMALL ID WITHOUT DISC ALLOCATION * BID5 = # OF BIG IDS WITH & WITHOUT DISC ALLOC. * BID6 = # OF SMALL IDS WITH & WITHOUT DISC ALLOC. * BID7 = # OF BIG IDS WITHOUT DISC ALLOCATION * BID8 = # OF SMALL IDS WITHOUT DISC ALLOCATION * * (NOTE: ABOVE PARAMETERS ARE ZERO IF NOT SET) * * * CALL: (P) JSB BLKID * (P+1) -RETURN- * (A) = # AVAIL (SMALL+BIG) OR 0 * IF NO BIG AVAILABLE (TOTAL * INCLUDES WITH AND W/O DISC * ALLOCATION). * (B) = MEANINGLESS * BLKID NOP CLA CLEAR STA BID1 ADDR OF BIG WITH LEAST DISC ALLOC STA BID2 ADDR OF BIG WITHOUT DISC ALLOCATION STA BID3 ADDR OF SMALL WITH LEAST DISC ALLOC STA BID4 ADDR OF SMALL WITHOUT DISC ALLOC STA BID5 # OF BIG IDS WITH & WITHOUT DISC ALOC STA BID6 # OF SMALL IDS WITH & W/O DISC ALLOC STA BID7 # OF BIG IDS WITHOUT DISC ALLOCATION STA BID8 # OF SMALL IDS W/O DISC ALLOCATION STA DISPS CLEAR DISC ALLOC FOR SHORT ID STA DISPL AND FOR LONG ID LDA KEYWD INITIALIZE ADDR OF STA KEYPT KEYWORD LIST. RSS SKIP ADDR BUMP FOR FIRST TIME BLK1 ISZ KEYPT BUMP KEYWORD ADDR LDB KEYPT,I GET KEYWORD SZB,RSS IF END OF LIST JMP BLK3 THEN GO TO SET COUNTS. ADB P12 (B)=ADDR OF NAM12 CLA STA FLGSS CLEAR ID TYPE FLAG CPA B,I IF NAM12=0 JMP BLK2 THEN BLANK ID. JMP BLK1 ELSE CONTINUE SCAN * * ANALYZE BLANK ID * BLK2 ADB P2 (B)=ADD[R OF NAM5 JSB MEM? FIND IF ID LONG OR SHORT CCA,RSS SHORT ID, SET (A)=-1. CLA LONG ID, SET (A)=0. STA FLGSS SET ID TYPE FLAG ADB P4 (B)=ADDR OF DMAIN LDA B,I GET DMAN SZA ANY DISC ALLOCATION ? JMP DSCAL YES * LDA FLGSS GET SHORT/LONG ID FLAG SZA,RSS LONG ID ? JMP LGND YES ISZ BID8 BUMP COUNT FOR SHORT ID W/O DSC CLA LDB KEYPT,I GET ID SEG ADDR CPA BID4 ADDR OF 1ST SMALL W/O DSC SET ? STB BID4 NO, SET ADDR OF SMALL ID. JMP BLK1 YES, CONTINUE SCAN. LGND ISZ BID7 COUNT LONG ID W/O DSC ALOC. LDB KEYPT,I GET ID SEG ADDR CPA BID2 ADDR OF 1ST BIG W/O DSC SET ? STB BID2 NO, SET ADDR OF LONG ID. JMP BLK1 YES, CONTINUE SCAN. * * P15 DEC 15 * DSCAL LDA KEYPT,I GET ID SEG ADDR ADA P15 (A)=ADDR OF MEM1 OF SHORT ID LDB FLGSS GET ID TYPE FLAG SZB,RSS LONG ID ? JMP DLGND YES,ADJUST (A) FOR MEM1 OF BIG ID. JSB C#S DETERMINE # OF SECTORS LDB DISPS GET DISC ALLOC COMPARATOR SZB,RSS ANY DISC ALLOC SET UP YET ? JMP SHNEW NO, THEN SET THIS ONE. STA B SAVE SEC COUNT TEMPORARILY CMA,INA SUBTRACT THIS SPACE FROM PREVIOUS ADA DISPS SSA IS THIS DISC SPACE < PREVIOUS ? JMP SHCNT NO, LET PREVIOUS BE THERE. LDA B RESTORE SECTOR COUNT SHNEW STA DISPS SET DISC SPACE ALLOCATION LDB KEYPT,I SET ADDR OF SMALL ID WITH STB BID3 LEAST DISC ALLOCATION. SHCNT ISZ BID6 COUNT SHORT IDS WITH DISC ALLOC JMP BLK1 CONTINUE SCAN * DLGND ADA P7 (A)=MEM1 ADDR OF LONG ID JSB C#S DETERMINE NUMBER OF SECTORS LDB DISPL GET DISC ALLOC COMPARATOR SZB,RSS ANY ALLOC SET UP YET ? JMP LGNEW NO, THEN SET THIS ONE IN. STA B SAVE SECTOR COUNT TEMPORARILY CMA,INA SUBTRACT THIS ALLOC ADA DISPL FROM PREVIOUS. SSA IS THIS ALLOC LESS ? JMP LGCNT NO LDA B RESTORE SECTOR COUNT LGNEW STA DISPL SET ALLOCATION LDB KEYPT,I SET ADDR OF LONG ID STB BID1 WITH LEAST ALLOCATION. LGCNT ISZ BID5 COUNT LONG IDS WITH JMP BLK1 DISC ALLOCATION & CONTINUE SCAN. * BLK3 LDA BID8 SET BID8= # OF SMALL IDS ADA BID6 WITH AND WITHOUT STA BID6 DISC ALLOCATION. LDA BID7 SET BID5= # OF LONG IDS ADA BID5 WITH AND WITHOUT STA BID5 DISC ALLOCATION. SZA,RSS ANY BIG IDS AVAILABLE ? JMP BLKID,I NO, RETURN WITH (A)=0. ADA BID6 YES, RETURN WITH (A) = TOTAL JMP BLKID,I NUMBER OF IDS. * * * CONSTANTS * BID1 NOP BID2 NOP BID3 NOP BID4 NOP BID5 NOP BID6 NOP BID7 NOP BID8 NOP FLGSS NOP =0 FOR LONG ID, NON-ZERO FOR SHORT DISPL NOP LONG ID SECTOR COUNT DISPS NOP SHORT ID SECTOR COUNT KEYPT NOP KEYWORD * SKP * * SKP * * SUBROUTINE: "ITRAK" -INTIIALIZE TRACK ALLOCATION * * CALL: "#TRAK" CONTAINS # OF TRACKS * TO BE ALLOCATED * * A AND B MEANINGLESS * (P) JSB ITRAK * (P+1) -RETURN- A AND B MEANINGLESS * * THE FOLLOWING WORDS OF STORAGE ARE SET * AND ALL TRACKS HAVE BEEN SET TO ZERO: * * #TRAK - # OF TRACKS ALLOCATED * TRAKB - STARTING TRACK # (BASE TRACK) * TRKLU - LOGICAL UNIT OF DISC * TRKS# - # OF SECTORS PER TRACK * * IF THE TRACK ALLOCATION CANNOT BE MADE, THE * LOADER PRINTS THE MESSAGE * "/LOADR: WAITING FOR DISC SPACE" * AND REPEATS THE REQUEST WITH THE SUSPENSION * OPTION. THE LOADR CONTINUES WHEN TRACKS BECOME * AVApYILABLE. THE LOADR MAY BE ABNORMALLY * TERMINATED BY THE OPERATOR IN THIS STATE. * * ITRAK NOP ITRK9 LDA #TRAK SET SIGN BIT OF #TRAK WORD IOR MSIGN FOR NO SUSPENSION IF TRACKS STA #TRAK NOT AVAILABLE. * ITRK1 JSB EXEC REQUEST DEF *+6 DISC DEF P4 SPACE DEF #TRAK DEF TRAKB DEF TRKLU DEF TRKS# * LDA #TRAK REMOVE RAL,CLE,ERA SIGN BIT FROM STA #TRAK # TRACKS WORD. CCA IF STARTING TRACK # = -1, CPA TRAKB THEN NO TRACKS AVAILABLE, JMP ITRK3 PRINT MESSAGE(WILL RETRY FOR 1ST ALLOC) * * LDA TRKLU DSKUN = DISC'S STA DSKUN LU # LDA TRAKB ITRKB = STARTING TRACK # ADA #TRAK ITRK6 = ENDING TRACK STA ITRK6 # +1. * ISZ TKTRY NO MORE RETRYS ALLOWED JMP ITRAK,I RETURN * * PRINT WAITING MESSAGE * ITRK3 LDA TKTRY GET THE RETRY FLAG SZA,RSS CAN WE RETRY ? JMP ITRK4 YES * * ITRK8 LDA P22 GET THE BUFFER LENGTH LDB ITRKM JSB SYOUT JMP ITRK1 * * ITRK4 LDA #TRAK GET THE # WE ASKED FOR LAST TIME ADA N2 SUBTRACT 2 SZA,RSS DID WE ASK FOR 2 LAST TIME ? JMP ITRK5 YES ,SO FORGET IT CCA NO SO SUBTRACT ONE AND TRY AGAIN ADA #TRAK STA #TRAK JMP ITRK9 DO IT AGAIN * ITRK5 ISZ #TRAK BUMP REQUEST BACK TO 4 ISZ #TRAK JMP ITRK8 AND SUSPEND THYSELF * ITRKM DEF *+1 ASC 11,WAITING FOR DISC SPACE * ITRK6 NOP * * #TRAK DEC 4 # OF TRACKS ALLOCATED TRAKB NOP STARTING TRACK # (BASE TRACK) TRKLU NOP LOGICAL UNIT OF DISC TRKS# NOP # OF SECTORS PER TRACK SPOS NOP RELATIVE SECTOR POSITION TSECT NOP TEMPORARY SECTOR AND TTRAK NOP TRACK #. TKTRY NOP RETRY FLAG FOR TRACKS SKP * * 'EDIT' COMPLETION * ED00 LDA MSEG GET MAIN/SEG FLAG SZA PROCESSING MAIN/SEG ? JMP ED18 YES * * SINGLE PROGRAM OPERATION * CLA,INA CHECK CPA EDFLG TYPE JMP ED10 ADDITION * * PROGRAM REPLACEMENT * E0D JSB MIDN FIND MATCHING ID SEGMENT JMP ED10 -NO, TREAT AS ADDITION. * ED0 STB ED25 SAVE MATCH ID ADDR. ADB P14 (B)=NAM5 ADDR JSB MEM? GET ADDR OF MEM1 NOP STB A CALCULATE JSB C#S # SECTORS STA ED60 AND SAVE * ED001 LDB TAT SET SIGN BIT LDA B,I ON SYS DISC TO TEST JSB SYRUW WRITE PROTECT BEFORE DAMAGE IS DONE * LDB ED25 ADB P12 SET ADDR OF NAM12 STB LH1 OF ID SEG. JSB $LIBR TURN OFF NOP INTERRUPT SYSTEM ADB P2 (B)=NAM5 ADDR OF MATCHED ID LDA B,I GET NAM5 AND AND P7 MASK IN PROG TYPE. CPA P5 IS THIS A SEGMENT ? JMP ED004 YES, FORGET DORMANY CHECK. ADB N6 (B)=ADDR OF SUSPEND WORD LDA B,I POINT OF SUSPENSION? SZA ZERO - CONTINUE JMP ED003 SUSPEND ADB P7 GET LDA B,I STATUS: SZA DORMANT? JMP ED003 NO - SUSPEND ADB P2 GET LDA B,I TIME LIST: AND BIT12 IN LIST? SZA WELL ? JMP ED003 NO. YOU LOSE. ADB P4 NOW SEE IF THE PROGRAM LDA B,I TERMINATED SERIALLY AND M77 MPY P6 BECAUSE IF HE DID HE STILL ADA $MATA ADA P2 OWNS THE PARTITION LDA A,I AND THE OP SYSTEM WILL GET REALLY CPA ED25 PISSED OFF IF WE REPLACE HIM. RSS JMP ED004 ALLS WELL... LETS DO IT ! * SKP ED003 JSB $LIBX RESTORE  DEF *+1 INTERRUPT DEF *+1 SYSTEM LDA P18 PRINT MESSAGE LDB MES70 JSB SYOUT PROG IS NON-DORMANT JMP ABORT AND ABORT THYSELFZERO * MES70 DEF *+1 ASC 9,SET PRGM INACTIVE BIT12 OCT 10000 LH1 NOP * ED004 CLB STB LH1,I ZERO ISZ LH1 NAME STB LH1,I IN ISZ LH1 CORE LDA LH1,I ID AND M20 SEGMENT (LEAVE 'SS' BIT) STA LH1,I JSB $LIBX RESTORE DEF *+1 INTERRUPT DEF *+1 SYSTEM * * RELEASE "OLD" TRACKS * LDB ED25 GET MATCHED ID SEG ADDR ADB P14 (B)=NAM5 ADDR JSB MEM? GET ADDR OF MEM1 NOP ADB P4 (B)=ADDR OF DMAIN LDA B,I GET DISC WORD AND SAVE STA ED63 TEMPORARILY. SSA TRACKS ON LU3 ? JMP CLEAR YES, THEN RELEASE TRKS. CMA,INA SUBTRACK FROM DISC LIB ADDR ADA DSCLB AND IF SSA,RSS IN SYSTEM AREA JMP ED01 THEN DON'T RELEASE TRKS CLEAR CLA CLEAR JSB SYSET DISC WORD. JSB SYRUW DISC TOO LDB ED63 RESTORE DISC WORD TO B. LDA ED60 JSB DREL GO RELEASE TRACKS UNLESS GLOBAL * SKP ED01 LDB ED25 GET ID SEGMENT ADDR TO B JSB TATCL GO CLEAR ANY TRACKS ASSIGNED TO PGM LDB ED25 CLEAR ADB P12 NAME STB ED63 WORDS (3) LDB N3 STB ED60 ED02 CLA CCB CPB ED60 IF CLEARING NAM5 LDA LH1,I THEN GET SAME VALUE AS IN CORE LDB ED63 JSB SYRUW ISZ ED63 ISZ ED60 JMP ED02 LDA OPCOD CPA P4 IF PURGE OPERATION JMP EXIT THEN DONE SO GO TERMINATE JMP PADD GO TO TREAT AS ADDITION * * * PROGRAM ADDITION * ED10 CLA CLEAR MATCHED STA ED25 ID SEG ADDR ST-ORAGE. RSS SKIP MESSAGE OUTPUT FOR NOW ED03 JMP NOIDS GO TELL THER ARE NO ID SEGMENTS PADD JSB BLKID DETERMINE # BLANK ID'S. LDB ID## CMB,INB CPB ID# IF LOOKING FOR MAIN'S ID JMP BIGID THEN SKIP SETTING UP FOR SMALL LDA BID6 (A)=TOTAL # OF SMALL IDS LDB BID8 (B)=# OF SMALL IDS WITHOUT DISC ALOC SZA SETTLE FOR LONG IF SMALL UNAVAILABLE JMP *+3 SKIP SETTING FOR LONG IDS BIGID LDA BID5 (A)=TOTAL # OF LONG IDS LDB BID7 (B)=# OF LONG IDS WITHOUT DISC ALLOC SZA,RSS IF NONE, JMP ED03 PRINT MESSAGE CPA B IF NONE WITH DISC ALLOC, JMP NTRM7 GO TO USE FIRST BLANK. * LDA IDA GET ID SEGMENT ADDR ADA P4 (A)=MEM1 ADDR OF SHORT ID LDB ID## CMB,INB CPB ID# IF PROCESSING MAIN ADA P4 THEN (A)=MEM1 ADDR OF LONG ID JSB C#S CALCULATE # OF SECS REQUIRED STA ED20 SAVE # OF SECTORS CMA,INA SAVE STA ED21 NEGATIVE # OF SECTORS LDA KEYWD SAVE STARTING KEYWORD STA ED22 LIST ADDR. CLA CLEAR STA ED23 ACCUMULATOR * ED11 LDB ED22,I GET NEXT ID SEGMENT ADDR. SZB,RSS JMP ED14 -END OF LIST * ADB P12 CHECK NAME(1) CLA IF CPA B,I = JMP ED17 0, CHECK FURTHER. ED12 ISZ ED22 CHECK JMP ED11 NEXT SEGMENT. * ED17 ADB P2 (B)=NAM5 ADDR JSB MEM? GET ADDR OF MEM1 CLA (REG-A NOT 0 FOR SHORT ID RETURN) ADB P4 (B)=ADDR OF DMAIN CPA B,I IF NO DISC ALLOC TO THIS SEG JMP ED12 THEN CONTINUE SCAN. * LDA B ADA N4 (A)=MEM1 ADDR JSB C#S GET SECTOR COUNT STA B SAVE ADA ED21 SUBTRACT DUMMY FROM THIS SSA # OF SECTORS. JMP ED12 IF DUMMY >, CONTINUE SCAN. * LDA ED23 GET PREVIOUS MIN # SECTORS SZA,RSS IF 0, JMP ED13 GO TO USE THIS ALLOCATION. CMA,INA SUBTRACT ADA B PREVIOUS FROM NEW, SSA,RSS USE NEW # IF < OLD. JMP ED12 NO, KEEP CHECKING ED13 STB ED23 SET ALLOCATION #. LDA ED22,I ALSO, SET STA ED24 ID SEGMENT ADDR. JMP ED12 GO TO CHECK NEXT. * * * MODIFY WORD IN ID IN SYSTEM AREA * MODID NOP JSB SYSET STORE IN CORE JSB SYRUW STORE ON DISC JMP MODID,I RETURN * * ED14 LDA ED23 IF SPACE NOT FOUND IN SYSTEM SZA,RSS AREA, GO TO USE A BLANK ID SEG JMP NTRM7 AND KEEP PROG ON USER TRACKS * SKP * * * MOVE PROGRAM INTO SYSTEM AREA * LDB IDA GET DUMMY ID ADDR ADB P8 (B)=DMAN ADDR OF SHORT ID LDA ID## CMA,INA CPA ID# IF PROCESSING MAIN ADB P4 THEN (B)=DMAN ADDR OF LONG ID LDA B,I GET RELATIVE STARTING ALF,ALF TRACK # RAL AND AND M377 ADD ADA TRAKB BASE TRACK. STA TRAKP SET ABSOLUTE TRACK ADDR LDA B,I GET DMAN AGAIN AND M177 MASK IN SEC ADDR STA ED62 SET SECTOR ADDR * LDB ED24 GET DESTINATION ID ADDR ADB P14 (B)=ADDR OF NAM5 JSB MEM? GET ADDR OF MEM1 NOP ADB P4 (B)=ADDR OF DMAIN LDA B,I GET DESTINATION AREA ON SYS DSC ALF,ALF SET STARTING RAL TRACK AND M377 NUMBER. STA ED66 LDA B,I AND M177 SET STARTING STA ED67 SECTOR NUMBER. LDA P2 SET STA DESLU DESTINATION LU. LDA ED23 GET NUMBER OF ADA ED21 SECTORS LEFT OVER. SZA,RSS I IF NO SECTORS LEFT JMP MPRG THEN ONLY MOVE THE PROG. SKP * * ALLOCATE LEFTOVER SPACE TO A BLANK * ID SEGMENT WITHOUT DISC ALLOCATION. * MPY P64 FIND # OF WORDS LEFT OVER STA ED23 AND SAVE FOR LATER. JSB BLKID FIND BLANK ID ALLOCATION LDB BID7 (B)=# OF IDS W/O DISC ALLOC SZB ANY BIG ID W/O DISC AVAIL ? JMP LFND YES, SET IT UP FOR ALLOC. LDB BID8 (B)=# OF SMALL IDS W/O DSC ALOC SZB,RSS ANY SMALL ONES AVAILABLE ? JMP MPRG NO, THEN GO TO MOVE PROG. LDB BID4 (B)=ADDR OF SHORT ID W/O DSC ALOC ADB P15 (B)=MEM1 ADDR OF SHORT ID JMP SBND SKIP OVER LONG ID'S SET UP LFND LDB BID2 (B)=ADDR OF LONG ID W/O DISC ALOC ADB P22 (B)=MEM1 ADDR OF LONG ID SBND STB BID2 SET ADDR OF MEM1 CLA JSB MODID SET LOW MAIN = 0 ISZ BID2 SET ADDR OF MEM2 LDA ED23 GET NUMBER OF WORDS LEFT OVER LDB BID2 GET ADDR OF MEM3 JSB MODID SET HIGH MAIN=WORDS LEFT OVER ISZ BID2 SET ADDR OF MEM3 LDB BID2 SET LOW BASE =0 CLA JSB MODID ISZ BID2 SET ADDR OF MEM4 LDB BID2 GET MEM4 ADDR CLA JSB MODID SET HIGH BASE =0 ISZ BID2 SET ADDR OF DMAN LDA ED67 GET STARTING SECTOR ADDR ADA ED20 MOVE UP TO END OF USED AREA CLB GET DISC ADDR OF AREA LEFT DIV SECT2 FIND # OF TRKS ADA ED66 GET ACTUAL DISC ADDR ALF,RAL POSITION TRACK RAL,RAL ADDR. IOR B MERGE IN SECTOR ADDR LDB BID2 GET DMAN ADDR JSB MODID SET DISC ADDR IN DMAN * "<:66< SKP * MPRG JSB ED15 MOVE PROG TO SYSTEM AREA JMP ED16 SET UP IDS * ED15 NOP BGN JSB EXEC READ 1 SECTOR FROM DEF *+7 SOURCE AREA DEF P1 DEF DSKUN DEF LBUF DEF P64 DEF TRAKP DEF ED62 * JSB EXEC WRITE SAME SECTOR DEF *+7 INTO DESTINATION DEF P2 DEF DESLU DEF LBUF DEF P64 DEF ED66 DEF ED67 * ISZ ED21 INDEX SECTOR MOVE COUNT RSS -NOT FINISHED. JMP ED15,I -FINISHED. * LDA ED62 INDEX INA SOURCE SECTOR #. CPA TRKS# IF = # SECTORS/TRACK, CLA SET = 0, STA ED62 RESTORE. SZA,RSS IF = 0 ISZ TRAKP ADD 1 TO TRACK #. * LDA ED67 INDEX INA DESTINATION SECTOR #. CPA SECT2 IF = # SECTORS/TRACK, CLA SET = 0, STA ED67 RESTORE. SZA,RSS IF = 0, ISZ ED66 ADD 1 TO TRACK #. JMP BGN SKP * * COMPLETE ID SEGMENT PROCESSING * ED16 LDB ED24 GET OLD ID SEG ADDR ADB P14 (B)=NAM5 ADDR JSB MEM? GET ADDR OF MEM1 NOP ADB P4 (B)=ADDR OF DMAIN LDA B,I GET DISC ADDR STA ED63 SAVE TEMPORARILY LDB IDA STORE IT ADB P8 IN LDA ID## DMAN CMA,INA OF CPA ID# NEW ADB P4 ID LDA ED63 SEGMENT STA B,I * LDB ED24 IF SAME ID-SEGMENT CPB ED25 THEN RSS SKIP JSB SWPID ELSE SWAP THE ID-SEGMENTS ON THE DISC JSB FIX24 IDS NOT SWAPPED - CLEAN ED24'S. CLA,INA (A) = 1 FOR ADDITION JSB MVIDS JSB FIX FIX FOR TRYING LONG TO SHORT MOVE LDA MSEG PROCESSING MAIN/SEG ? SZA,RSS THEN SKIP. JMP NTRM4 ELSE TERMINATEu * * MAIN/SEGMENT REPLACEMENT OR ADDITION * ED183 LDA IDA SET ADDR OF ADA N9 NEXT SHORT DUMMY STA IDA ID SEGMENT. ISZ ID## END OF SEGMENTS ? CLB,RSS NO, THEN SKIP JMP NTRM4 TERMINATE, ALL MAIN/SEGS DONE. CPB EDFLG EDIT OPERATION ? JMP NTRM7 NO, GO BACK TO TEMP LOAD. JMP ED181 YES, SET UP FOR NEXT SEG. * ED18 LDA IDA INA * ED181 CLB,INB CPB EDFLG ADDITION ? JMP ED10 YES, ATTEMPT TO USE SYSTEM AREA. INA IT IS REPLACEMENT SO STA NAM12 SET UP INA ADDRES STA NAM34 OF NAM12, NAM34 INA AND NAM5. STA NAM5 JMP E0D GO LOOK FOR MATCHING ID SEG. SKP * SAVE MEM BOUNDS AND DISC ADDR OF MATCHED ID INTO * ID SEG WHOSE DISC SPACE WE USED. * SWPID NOP ROUTINE TO SWAP SYS ID-SEG TACKS LDA IDA SAVE THE DUMMY ID ADDR STA DREL IN DREL ENTRY LDA ED25 GET THE ID-SEGMENT TO MOVE SZA,RSS IF NO OLD ID-SEGMENT JUST JMP SWPID,I RETURN, ELSE STA IDA SET IT IN IDA FOR MVIDS AND STA MIDN SAVE FOR LATER CLA,INA SET EDIT FLAG JSB MVIDS AND CALL MVIDS TO SET UP NOP IGNOR ERROR RETURN LDB DREL RESTORE STB IDA THE DUMMY ID-ADDR LDB MIDN AND THE MOVED (AND NOW FREE) STB ED25 ID-SEGMENT ADDR ISZ SWPID BUMP RETURN ADDR FOR SWAP DONE JMP SWPID,I RETURN * * * THIS ROUTINE IS EXECUTED WHEN "MVIDS" DOES AN ERROR * RETURN FOR ATTEMPTING TO MOVE A LONG ID INTO A SHORT * ONE. "FIX" ROUTINE BLANKS OUT MEM BOUNDS AND DMAIN * OF THE SHORT ID AND THEN GOES TO "MVIDS" WITHOUT * SPECIFYING A TARGET ID. "MVIDS" SHOULD NEVER RUN * INTO THE PROBLEM OF RUNNING OUT OF LONG ID SEGS. * FIX NOP LDA N5 SET UP TO BLANK OUT STA SWPID MEM1 TO DMAINC OF SHORT ID. LDA ABT11 SET UP ADDR OF MEM1 OF ADA P11 SHORT ID SEGMENT. STA DREL WIPE CLA WRITE 0 IN MEM1 TO DMAIN LDB DREL JSB MODID ISZ DREL ISZ SWPID DONE ? JMP WIPE NO CLB CLA,INA CPB EDFLG SKIP IF EDITING CLA JSB MVIDS SET UP ID IN SYSTEM JMP NOIDS ** SHOULD NEVER HAPPEN ** JMP FIX,I RETURN * SKP * * DISC TRACK RELEASE ROUTINE * DREL NOP STA ED63 LDA TAT STARTING SSB BASE ADA TATSD ADDR STA ED64 FOR DISC UNIT. LDA SECT2 SET APPROPRIATE SSB # SECTORS/TRACK LDA SECT3 FOR STA ED62 DISC LDA B GET AND M177 MASK THE TRACK SWP SWAP ALF,ALF STARTING RAL TRACK AND M377 #. ADA ED64 ADD TO STA ED64 BASE ADDR. LDA B SET STARTING SECTOR CMA,INA,SZA,RSS IF ZERO JMP DREL1 JUMP ISZ ED64 ELSE DO NOT RELEASE FIRST TRACK ADA ED62 COMPUTE NUMBER LEFT ON TRACK CMA,INA AND DREL1 ADA ED63 SUBTRAC FROM NUMBER TO RELEASE SSA IF NEGATIVE JMP DREL,I RETURN NO TRACKS START WITH THIS ID SEGMENT CLB TOTAL # OF DIV ED62 SECTORS BY # SECTORS/TRACK. SZB ROUND INA TO # OF TRACKS INVOLVED, CMA,INA,SZA,RSS SET NEG. IF ZERO JMP DREL,I EXIT DONE STA ED62 FOR INDEX. * DR LDB ED64 CLEAR LDA B,I DO NOT SSA,RSS RELEASE JMP DR2 GLOBAL TRACKS LDA XEQT ASSIGN TRACK TO SELF JSB SYSET IN TRACK CLA JSB SYRUW DR2 ISZ ED64 TABLE. ISZ ED62 JMP DR JMP DREL,I SKP * * CLEARZ ENTRY IN TAT * TATCL NOP SUBROUTINE TO RELEASE ALL TRACKS STB DREL CURRENTLY ASSIGNED TO PROG ID ADDR IN B LDB TATLG SET TAT LENGTH STB FIX24 FOR COUNT LDB TAT SET INITIAL ADDR NXTRK LDA DREL GET ID SEGMENT ADDR TO A CPA B,I THIS TRACK BELONG?? RSS YES SKIP JMP NXTR1 NO STEP TO NEXT ONE LDA XEQT ASSIGN JSB SYSET TRACK TO SELF NXTR1 INB STEP TRACK ADDR ISZ FIX24 DONE?? JMP NXTRK NO TRY NEXT TRACK JMP TATCL,I YES REETURN * * ROUTINE TO CLEAN OUT THE ID SEG (MEM1 TO DMAIN) * WHOSE DISC SPACE WE UTILIZED BUT 'SWAPID' * DID NOT SAVE ANYTHING IN IT. USEFUL IF THIS * ID HAPPENS TO BE A LONG ONE BUT THE DUMMY IS SHORT. * ALSO EXECUTED WHEN ED24 AND ED25 HAVE SAME ID ADDR. * FIX24 NOP LDB ED24 ADB P14 (B)= NAM5 ADDR JSB MEM? GET ADDR OF MEM1 NOP STB DREL SET UP MEM1 ADDR LDB N5 SET COUNT TO BLANK STB SWPID TO BLANK OUT MEM1-DMAIN. WIPE1 CLA (A)=0 LDB DREL (B)=ADDR OF WORD IN ID SEG JSB MODID MODIFY THE ID SEG ISZ DREL BUMP ADDR ISZ SWPID DONE ? JMP WIPE1 NO LDB ED25 (B)=0 FOR NO PARTICULAR ID JMP FIX24,I RETURN * SKP * * TRAKP NOP ID## NOP ED20 NOP ED21 NOP ED22 NOP ED23 NOP ED24 NOP ED25 NOP ED60 NOP ED61 NOP ED62 NOP ED63 NOP ED64 NOP ED66 NOP ED67 NOP * PTYPE DEC 3 PROGRAM DEFAULT = 3 = PRIVLEGED EDFLG NOP EDIT FLAG: 1 = ADDITION, 2 = REPLACEMENT, 0 = TEMP #PTTN NOP SPECIFIED PARTITION # #PGS NOP SPECIFIED # OF PAGES IN PROGRAM (INCLUDES BP) #MPFT NOP INDEX TO MEMORY PROTECT FENCE TABLE MSEG NOP 0/1 NOT SEGMENTED SEGMENTED FLAG OPCOD NOP 1ST WORD OF OPCODE FIELD LISTU OCT 206 LIST OUTPUT EUNIT # DFLAG NOP 0/1 NON INTERACTIVE / INTERACTIVE LU # FILE1 BSS 3 NAME OF INPUT FILE TYPE1 NOP PARSED TYPE WORD FOR FILE OR LU # F1SC NOP AND SECURITY CODE F1DSC NOP AND DISC LU OR CARTRIDGE # F2 DEF FILE2 FILE2 BSS 3 NAME OF COMMAND FILE TYPE2 NOP TYPE WORD FOR COMMAND FILE OR LU F2SC NOP AND ITS SECURITY CODE F2DSC NOP AND ITS LU OR CART REF CWABP NOP CURRENT BASE PAGE ADDR LST1 NOP LST WORD 1 ADDR LST2 NOP LST WORD 2 ADDR LST3 NOP LST WORD 3 ADDR LST4 NOP LST WORD 4 ADDR LST5 NOP LST WORD 5 ADDR PRIOR NOP ADDR OF PRIORITY IN ID SEG PRENT NOP ADDR OF PRIMARY ENTRY POINT NAM12 NOP ADDR OF NAME 1,2 NAM34 NOP ADDR OF NAME 3,4 NAM5 NOP ADDR OF NAME 5, TYPE RESL NOP ADDR OF 10'S MILLS. IN ID SEG NUPLS NOP NO. UTILITY PROGS LOADED TPREL NOP CURRENT MAX PROG RELOC ADDR DBLAD NOP DATA BLOCK RELOCATION ADDR OPRND NOP ABSOLUTE MEMORY ADDR WDCNT NOP TEMPORARY COUNTER DSKUN NOP CURRENT DISK LOGICAL UNIT NO. DTRAK NOP CURRENT DBUF TRACK DSECT NOP CURRENT DBUF SECTOR CURAL NOP CURRENT LBUF ADDR TBUF BSS 5 TEMPORARY BUFFER MSEGF NOP MAIN/SEGMENT FINAL LOAD FLAG LWA NOP LOADING AREA, BPFWA NOP FWA OF ACTUAL BP LINK AREA FWABP NOP FWA AND LWA OF DUMMY LWABP NOP BASE PAGE AREA. SEGB NOP SEGMENT BASE PAGE LOWER BOUND DBLFL NOP FIRST DBL REC: -1,YES; 0,NO. FORCD NOP FORCE FLAG 0/-1 NO FORCE /FORCE LOAD N1 DEC -1 N6 DEC -6 N9 DEC -9 N60 DEC -60 N4 DEC -4 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P8 DEC 8 P12 DEC 12 P14 DEC 14 P18 DEC 18 P20 DEC 20 M7 EQU P7 M20 OCT 20 M77 OCT 77 M177h0 OCT 177 M300 OCT 300 M377 OCT 377 M2000 OCT 2000 M0760 OCT 76000 M7400 OCT 177400 NDAY OCT 177574,025000 ENTRL DEF *+3 RELOCATION BASE TABLE RBTAD DEF *+1 RELOCATION BASE TABLE NOP PPREL NOP CURRENT PROG BASE BPREL NOP BASE PAGE BASE COMAD NOP COMMON BASE NOP ABSOLUTE BASE BLOK# NOP UCHRG OCT 43400 MSIGN OCT 100000 CHRDE ASC 1,DE CHRBU ASC 1,BU AMEM3 DEF MBUF+3 AMEM6 DEF MBUF+6 BLST NOP BEGINNING OF LOADER SYMBOL TABLE PLST NOP END OF LST TLST NOP CURRENT LST ADDR. SLST NOP INITIALIZE FOR SEGMENT AREA. FLST NOP FWA OF LST SET FOR USER'S PROG OEFL1 NOP ODD/EVEN SECTOR FLAG LBOEF NOP LIB ODD/EVEN SECOR FLAG #IDAD NOP ADDR OF LONG ID SEGMENT * SPC 1 #MNPG NOP LOWEST PAGE NO. USED BY PROG #MXPG NOP HIGHEST PAGE NO. USED BY PROG #MXRT DEC -1 #PAGES IN LARGEST RT PTTN #MXBG DEC -1 #PAGES IN LARGEST BG PTTN ER.16 LDA ERR16 ILLEGAL PTTN # JMP ABOR ERR16 ASC 1,16 ******* END MEU CODE ********** SPC 1 SKP * BASE PAGE COMMUNICATION VALUES * A EQU 0 B EQU 1 * . EQU 1650B ESTABLISH ORIGIN OF AREA * INTLG EQU .+5 NUMBER OF INTERRUPT TBL ENTRIES TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE KEYWD EQU .+7 FWA OF KEYWORD BLOCK XEQT EQU .+39 ID SEGMENT ADDR OF LOADR IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR BPA2 EQU .+59 LWA RT DISC RES. BP LINK AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTLWA EQU .+65 LWA OF RT DISC RESIDENT AREA BKORG EQU .+66 FWA OF BG AREA BKCOM EQU .+67 LENGTH OF BG COMMON AREA TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTE#*($M) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDR BKLWA EQU .+87 LWA OF MEMORY IN BG SPC 1 IFN ******* BEGIN NON-MEU CODE **** BPA1 EQU .+58 FWABP RT DISC RES BPA3 EQU .+60 FWABP BG DISC RES BKGBL OCT 1646 LWABP BG DISC RES URFWA EQU .+64 FWA OF USER RT DISC RES AREA URLWA NOP LWA OF USER RT DISC RES AREA UBFWA EQU .+68 FWA OF USER BG DISC RES AREA UBLWA EQU BKLWA LWA OF USER BG DISC RES AREA ******* END NON-MEU CODE ****** XIF SPC 1 SPC 1 IFZ ******* BEGIN MEU CODE ******** BPA1 EQU P2 FWABP USER RT DISC RES BPA3 EQU BPA1 FWABP USER BG DISC RES BKGBL EQU BPA2 LWABP USER BG DISC RES URFWA NOP FWA USE RT DISC RES AREA URLWA OCT 77777 LWA USER RT DISC RES AREA UBFWA EQU URFWA FWA USER BG DISC RES AREA UBLWA EQU URLWA LWA USER BG DISC RES AREA ******* END MEU CODE ********** * BSS 0 SIZE OF LOADR SPC 3 END LOADR (* [ 91740-18020 1740 S 0222 &DVA65              H0102 N`ASMB,R,L,C HED DVA65 91740-16020 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM DVA65 91740-16020 REV 1740 771018 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 *********************************************** * *DVA65 COMMUNICATIONS DRIVER FOR DS/1000 * ALL LINE INTERRUPTS HANDLED BY MICROCODE * EXCEPT PROTOCOL FOR LINES ABOVE PRIVILEGED SLOT * *SOURCE PART # 91740-18020 * *REL PART # 91740-16020 * *WRITTEN BY: CHUCK WHELAN * *DATE WRITTEN: DEC 1976 * *********************************************** SPC 3 * * DEFINE ENTRY POINTS * ENT IA65,CA65 ENT MIC$X SPC 3 * * DEFINE EXTERNALS * EXT $LIST,$OPSY SKP * * CALLING SEQUENCES * SPC 2 * TRANSMIT OR RECEIVE REQUEST AND DATA SPC 1 * JSB EXEC * DEF *+7 * DEF RCODE OCT 1 * DEF CONWD LU (BIT 6= 1 IF WRITE, BIT 7= 1 IF PROGL) * DEF DBUF DATA BUFFER ADDRESS * DEF DBUFL DATA BUFFER LENGTH * DEF RBUF REQUEST BUFFER ADDRESS * DEF RBUFL REQUEST BUFFER LENGTH * SPC 2 * ENABLE LISTEN MODE SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE OCT 3 * DEF CONWD 100B+LU * SPC 2 * SEND STOP SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE OCT 3 * DEF CONWD 0 + LU * SPC 2 * CLEAR REQUEST SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE OCT 3 * DEF CONWD 200B + LU * SPC 2 * QUEUE REQUEST SPC 1 * JSB EXEC * DEF *+4 * DEF RCODE OCT 3 * DEF CONWD 300B+LU * DEF (CLASS QUEUE ENTRY) * SKP * * ERROR CODES (IN EQT 5 STATUS) * * BIT MEANING * 0 REQUEST COMPLETED...NO ERRORS * 1 REQUEST PENDING ON A WRITE, OR NOT PENDING ON A READ * 2 SIMULTANEOUS REQUEST REJECT * 3 TIME OUT * 4 STOP RECEIVED * 5 REMOTE BUSY * 6 PARITY ERROR OR PROTOCOL FAILURE * 7 WRITE FLAG (FOR "GRPM" AT CCE) * * * * EQT WORD USAGE BREAKDOWN * * EQT # USE * 1 DEFINED * 2 DEFINED * 3 DEFINED * 4 DEFINED * 5 DEFINED * 6 DEFINED * 7 ADDRESS OF DATA BUFFER * 8 LENGTH OF DATA BUFFER * 9 ADDRESS OF REQUEST BUFFER * 10 LENGTH OF REQUEST BUFFER * 11 COROUTINE ADDRESS * 12 CURRENT STATUS TABLE (SEE BREAKDOWN) * 13 ADDRESS OF EQT EXTENSION * 14 DEFINED...USED FOR SINGLE WORD TURN-AROUND TIMEOUT * 15 DEFINED...MICROCODE ALSO SETS TIME-OUTS * EXT(0) COUNTER FOR DATA TRANSFER * EXT(1) LAST WORD RECEIVED OVER COMM LINE * EXT(2) VERTICAL PARITY WORD / RP REQ LENGTH * EXT(3) DIAGONAL PARITY WORD / RP DATA LENGTH * EXT(4) COUNT OF TOTAL BLOCK TRANSFERS * EXT(5) COUNT OF TOTAL NUMBER OF RETRIES * EXT(6) ID SEQ ADDRESS FOR SCHEDULE ON NEW REQUEST * * * BREAKDOWN OF EQT WORD 12 * * BIT USAGE * 0-2 RETRY COUNTER OR * 0-5 BROKEN LINE COUNTER * 6 BROKEN LINE FLAG * 7-8 NOT USED * 9 REQUEST PENDING * 10 LISTEN MODE ENABLED * 11 NOT USED * 12 LAST SUCCESSFUL OPERATION (1=WRITE) * 13 FLAG FOR WRITE RAETRY IN PROGRESS * 14 MICROCODE READ/WRITE FLAG * 15 NOT USED SKP * * DRIVER INITIALIZATION SECTION * IA65 NOP LDA EQT14 INA STA EQT15 REESTABLISH EQT15 ADDR JSB SETIO CONFIGURE I/O INSTRUCTIONS SERET LDB EQT13,I EXTENSION ADDRESS ADB B6 LDA 1,I GET 7TH EXT. WORD SZA IS THIS THE FIRST ENTRY FOR EQT? JMP NFIR NO * * THIS CODE IS EXECUTED ONLY ON FIRST TIME THROUGH FOR EQT * STA EQT12,I YES, INITIALIZE EQT12 STATUS STB TEMP 7TH WORD OF EXT. AREA * MODIFY INTERRUPT TABLE LDA CELL GET SELECT CODE ADA N6 SUBTRACT 6 TO FIND ADA INTBA ENTRY IN INTERRUPT TABLE LDB 0,I FETCH USER INTERRUPT LINK CMB,INB GET INTERRUPT LINK STB TEMP,I AND SAVE LDB EQT1 SET DRIVER STB 0,I INTERRUPT LINK JSB RDD.C CLEAR CARD * MODIFY CODE IF A DMS SYSTEM LDB $OPSY SYSTEM TYPE CLA,CCE RBR,SLB DMS SYSTEM? STA MOD1 YES, MODIFY INSTRUCTIONS ERA CCB SET REGISTERS FOR CPU TYPE CHECK OCT 100060 THIS SETS B TO 0 IFF XE NOP LDA XEMIC MICROCODE CALL FOR XE SZB SKIP IF XE LDA MXMIC ELSE USE 21MX MICROCODE CALL STA MIC$X SAVE LOCALLY * LDA EQT4,I TELL RTE THAT I WANT CONTROL ON TIME OUTT IOR .100 STA EQT4,I SKP * NFIR LDB EQT5,I RBL ROTATE TO ISOLATE BUSY BIT LDA EQT6,I GET REQUEST CODE AND B3703 ISOLATE IT CCE,SSB,RSS IS IT BUSY? CPA B3 OR A STOP REQUEST? JMP STPRQ YES, SEND STOP * DETERMINE OPERATION TYPE LDB 0 AND B3 MASK OFF CODE CPA B1 IS IT A READ? JMP REQ YES...READ OR WRITE/READ CPB B203 IS IT A CLEAR REQ? JMP CLREQ dYES...CLEAR REQ. CPB B103 IS IT AN ENABLE LISTEN MODE JMP LCREQ YES * ERROR IN REQUEST HAS OCCURRED CLB,INB CODE FOR REQUEST ERROR SZA WAS IF A CONTROL CODE? INB YES, RETURN A 2 (CONTROL REQ. ERROR) JMP IDON * * B3 OCT 3 B6 OCT 6 B103 OCT 103 B203 OCT 203 B3703 OCT 3703 MXMIC OCT 105520 XEMIC OCT 105340 SKP * * SET UP ENABLE LISTEN MODE LCREQ LDA MIC$X INITIALIZE TO USE OPEN LOOP MICROCODE MOD1 JMP LCR2 NOP IF DMS SYSTEM CELL EQU *+1 XSA * DO CROSS-MAP STORE RSS LCR2 STA CELL,I NON-DMS, MODIFY TRAP CELL JSB RDD.C READ CARD TO CLEAR IT LISTI STC 0,C SET RECEIVE INTERRUPT MODE LDA .020 SET LISTEN ENABLED STATUS RSS CLREQ JSB RDD.C READ DATA AND STATUS FROM CARD TO CLEAR STA EQT12,I UPDATE EQT STATUS CLB,INB GOOD STATUS BIT JSB STAT PUT NEW STATUS IN EQT 5 LDB B4 SET FOR IMMEDIATE COMPLETION * * HERE FOR COMPLETION RETURN * EQT 12 WILL BE SET DEPENDING UPON LISTEN MODE * STATUS IDON STB TEMP SAVE COMPLETION STATUS LDA EQT12,I GET CURRENT DRIVER STATUS AND .020 MASK OFF ALL BUT LISTEN ENABLE LDB LSTNI GET ADDRESS OF LISTEN ENABLED ROUTINE SZA LISTEN MODE ENABLED? CLA,INA,RSS YES, ENABLE MICROCODE READ CLB NO STA EQTX,I SET TRANSFER COUNT LDA TEMP GET STATUS AGAIN STB EQT11,I SAVE COROUTINE ADDRESS JMP IA65,I RETURN TO RTE SYSTEM SKP * * COME HERE ON A READ OR WRITE * REQ LDB EQT7,I GET ADDRESS OF DATA ADB N7 POINT TO 2ND WORD OF CLASS HDR LDA EQT14,I GET THIS EQT'S TIMEOUT IOR TBITS ENSURE BITS 15, 14, AND RAL 0 ARE SET FOR SYSTEM USE STA 1,I PASS TIMEOUT TO GRPM LDA EQT8,I DATA LENGTH CMA,INA ADA {EQT9,I COMPUTE (REQ ADDR - DATA LEN) STA EQT7,I USE IT AS ACTUAL BUFFER ADDR * LDA EQT12,I AND NMSK CLEAR UNNECESSARY FLAGS STA EQT12,I * LDB EQT6,I GET REQUEST CODE BLF,BLF RBL ALF,RAR ALF,ERA E = REQUEST PENDING FLAG LDA EQT8,I STA EQT6,I SET XMISSION LOG INTO EQT6 ADA EQT10,I COMBINE BOTH LENGTHS SLB,RSS IS THIS A WRITE TO SCE-1? STA EQT8,I NO, SAVE COMBINED LENGTHS LDA EQT5,I EQT STATUS WORD AND B1774 CLEAR BITS 7-0 SSB,RSS IS THIS A WRITE? CME,RSS NO, REVERSE RP FLAG IOR B200 YES, SET BIT 7 STA EQT5,I CLA,SEZ,INA SKIP IF (WRITE&NOT RP) OR (READ&RP) JMP BUSY OTHERWISE BUSY OR INVALID REQUEST SSB SKIP IF A READ JMP WREQ DO A WRITE SKP * * READ REQUEST * LDA EQT12,I AND CLR9 CLEAR REQUEST PENDING FLAG STA EQT12,I * REQ1 LDB EQT10,I GET RECEIVED RQST LENGTH LDA EQT4,I ALF,ALF GET LSB OF SUBCHANNEL RAL,ELA AND STORE IT IN E REG RBL,ERB ECHO WD WITH BIT15=1 IFF CLOSED LOOP REQ2 JSB TALK READ RESPONSE JSB CHECK CHECK RCVD WORD JMP REQ3 MUST RETRY ON TIMEOUT JMP ERR.4 STOP RECEIVED JMP ERR.6 RC RCVD, PROTOCOL FAILURE CPB TNW JMP RDREQ "TNW" RCVD, OK TO READ-IN REQUEST CPB RLW RLW RECEIVED? JMP REQ1 YES, RE-ECHO REQUEST LENGTH * REQ3 JSB RETRY UNRECOGNIZED WORD RECEIVED LDB RLW SEND RLW AND JMP REQ2 TRY AGAIN SPC 2 * * SET-UP TO READ DATA BLOCK * RDREQ LDA EQT8,I DATA LENGTH CPA B2 IS THIS AN SCE-1 REQUEST? CLA,INA,RSS YES JMP RDBLK NO, INITIATE READ STA EQT8,I SET READ LENGTH TO 1 LDB EQT7,I BUFFER ADDRESS LDA EQT1 ADDR OF THIS E(QT STA 1,I PASS IT TO PROGL IN 1ST WORD ISZ EQT7,I BUMP ADDR FOR BUFFER * * THIS SECTION INITIATES ALL MICROCODE BLOCK READS * RDBLK LDB EQT4,I LSL 9 SIGN = SUBCHANNEL LSB LDA MIC$X GET MICROCODE MACRO INSTRUCTION SSB SKIP IF SUBCHANNEL EVEN (XMIT MODE) INA ODD SUBCHANNEL, RUN CARD IN RCV MODE STA CELL,I STORE COMM.LINES TRAP CELL LDB TNW SEND TNW JSB OUTPB LDB EQT14,I & SET COMM LINE TIMEOUT STB EQT15,I LDA EQT8,I GET SUM OF DATA & REQ LENGTHS CMA -# OF WORDS -1 STA EQTX,I SET MICROCODE'S COUNTER JSB CEXIT NOW DO IT! * * BLOCK HAS BEEN READ, CHECK TRANSMISSION LDA COUNT MICROCODE COUNT ADA EQT8,I SSA SKIP IF XFER GOT STARTED JMP RDB6 ELSE RETRY, TNW MAY HAVE BEEN LOST * JSB CHECK CHECK XMISSION JMP ERR.3 TIMEOUT JMP ERR.4 STOP RECEIVED JMP RDB7 REQUEST COMING RDB2 CPB RLM JMP RDBLK RETRANSMIT LAST RCVD CPB TNW WAS LAST A "TNW" JMP ENDIT YES, SUCCESSFUL READ * * LAST CONTROL UNRECOGNIZED LDB RLW SEND "RETRANSMIT LAST WORD JSB TALK & READ RESPONSE JSB CHECK SEE WHAT WE GOT JMP ENDIT NO RESPONSE, ASSUME IT WAS OK JMP ERR.4 STOP RECEIVED JMP RDB7 REQUEST COMING JSB RETRY RETRY OUR RETRY JMP RDB2 * RDB6 JSB RETRY GIVE IT 8 TRIES JMP RDBLK * RDB7 LDB RLW SEND RLW SO THAT LAST RC GETS RETRIED JSB OUTPB JMP ENDIT EXIT SKP * * WRITE REQUEST * WREQ LDA EQT9,I LDA 0,I GET 1ST WORD OF REQUEST SLB IS THIS A PROGL DOWNLOAD? STA EQT10,I YES, USE IT INSTEAD OF BUFFER LEN * WRTRY LDB RC JSB TALK SEND RC & READ RESPONSE JSB CHECK CHECK WHAT WE GOT JMP WRTR1 - TRY AGAIN IF TIMEOUT JMP WRTRY STOP, RETRY IMMEDIATELY JMP SIMRQ RC, SIMULTANEOUS REQUEST CPB RLW RLW RECEIVED? JMP WRTRY YES, OTHER SIDE SAYS RETRY CPB TNW RSS SKIP IF "TNW" RECEIVED JMP WRTR1 UNRECOGNIZED, RETRY * SEND DATA LENGTH LDB EQT6,I JSB TALK SEND DATA LENGTH, GET ECHO JSB CHECK CHECK IT JMP ERR.3 TIMEOUT JMP ERR.4 STOP RECEIVED JMP SIMRQ SIMULTANEOUS REQUEST CPB EQT6,I ECHO OK? RSS YES JMP WRTR1 NO, RETRY * SEND REQUEST LENGTH LDB EQT10,I REQUEST LENGTH JSB OUTPB SEND IT LDA B1776 STA EQT15,I APPROXIMATELY 1 SEC TIMEOUT JSB TRAPR SETUP TRAP CELL FOR 1 WORD READ JSB CEXIT READ NEXT WORD WREQ2 JSB CHECK CHECK RESPONSE JMP WRTR1 TIMEOUT, RETRY JMP ERR.5 REMOTE IS BUSY JMP SIMRQ RC * CONFIGURE FOR EITHER CLOSED OR OPEN LOOP MICROCODE PROCESSING LDA EQT10,I ELA SAVE EQT10 SIGN LDA MIC$X MICROCODE CALL RBL,SLB,ERB IF BIT 15=1, RCVR WANTS CLOSED LOOP INA SET TO CALL CLOSED LOOP PROCESSOR STA CELL,I SET TRAP CELL CPB EQT10,I CHECK ECHOED RQST LENGTH JMP WRBLK LENGTH ECHO IS OK SKP * JSB RETRY NOT VALID ECHO, BUMP RETRY COUNT CPB RLW WAS IT AN RLW? (SCE-1 RETRY) JMP WRTRY YES, DO IMMEDIATE RC RETRY LDB RLW JSB TALK SEND RLW JMP WREQ2 * * REQUEST PREAMBLE WRITE FAILURE - WAIT 10 MSEC AND RETRY THE RC * WRTR1 JSB RETRY CHECK RETRY COUNT LDB EQT14,I SET COMMUNICATIONS STB EQT15,I LINE TIMEOUT JSB TRAPR SETUP TRAP CELL FOR 1 WORD READ JSB CEXIT DO READ JSB CHECK SEE WHAT WE GOT JMP WRTRY TIMED-OUT, RESEND RC JMP ERR.4 STOP RCVD, EXIT RSS  RC, SIMULTANEOUS REQUEST JMP WRTRY UNRECOGNIZED, DO RC ANYWAY * * SIMULTANEOUS REQUEST OCCURRED, RESOLVE BASED ON LAST OPERATION * SIMRQ JSB RETRY DON'T TRY FOREVER LDA EQT12,I ALF,SLA TEST LAST SUCCESSFUL OPERATION RSS LAST WAS WRITE, WE MUST WAIT JMP WRTR1+1 LAST WAS READ, WE GET PRIORITY * LDB RLW JSB XMITX SEND RLW IN XMIT MODE LDB B4 JMP CEND GIVE SIMULTANEOUS REQUEST STATUS SKP * * ENTER HERE TO DO ALL BLOCK WRITES * WRBLK LDB TNW THIS TNW WILL INITIATE MICROCODE WXFER JSB OUTPB SEND IT LDB EQT14,I STB EQT15,I SET LINE TIMEOUT LDA EQT12,I IOR .400 SET MICROCODE WRITE BIT STA EQT12,I UPDATE EQT STATUS LDA EQT8,I LENGTH FOR XFER SZA,RSS JMP ENDIT ZERO LENGTH DATA, GET OUT NOW CMA -LENGTH-1 STA EQTX,I SET MICROCODE COUNTER JSB CEXIT LET MICROCODE DO ITS THING * * BLOCK HAS BEEN WRITTEN, CHECK TRANSMISSION * LDB EQTX DONE WITH XFER ADB B4 ISZ 1,I BUMP TOTAL DATA BLOCK XFER COUNT NOP LDA COUNT MICROCODE XFER COUNTER SZA,RSS DID IT GO OK? JMP ENDIT YES CPA B77 DID PARITY FAIL? INB,RSS YES JMP ERR.3 ELSE GIVE TIMEOUT ERROR * * PERFORM A WRITE RETRY JSB RETRY CHECK RETRY COUNT ISZ 1,I BUMP WRITE RETRY COUNTER NOP LDA EQT12,I IOR .200 SET "WRITE RETRY" FLAG STA EQT12,I LDB RLM "RETRANSMIT LAST MESSAGE" JMP WXFER PERFORM RE-WRITE SKP * * LOCAL BUSY OR READ REJECT FOR NO R.P. BUSY CCB LDA EQT15,I IS THERE A TIMEOUT PENDING IOR EQTX,I OR IS MICROCODE ENABLED? SZA,RSS SKIP IF YES TO EITHER STB EQT15,I ELSE SYSTEM WIPED OUR TIMEOUT LDB B2 JSB STAT SET LOCAL BUSY FLAG LDA B4 IMMEDIATE COMPLETION LDB EQT6,I RETURN DATA LENGTH IN B JMP IA65,I RETURN * * HERE FOR REMOTE BUSY ERR.5 LDB B40 JMP CEND * * HERE FOR PARITY ERROR ERR.6 LDB B100 PARITY BIT IN EQT5 * * HERE TO SET ERROR, SEND STOP, & TERMINATE ERSET JSB STAT PUT STATUS INTO EQT 5 LDB STOP JSB XMITX SEND STOP & AWAIT INTERRUPT JSB RDD.C CLEAR CARD BY READING IT JMP CEND+1 GO TERMINATE * * LSTNI DEF ILSTN B1 OCT 1 .020 OCT 2000 .010 OCT 1000 * B40 OCT 40 B77 OCT 77 B100 OCT 100 .100 OCT 10000 .200 OCT 20000 .400 OCT 40000 NMSK OCT 13100 TBITS OCT 160000 CLR9 OCT 176777 CLR11 OCT 173777 SKP * * THIS SUBROUTINE INITIALIZES THE EQT TIMEOUT FLAG, SETS THE * COMM LINE TRAP CELL TO A "JSB CIC" IF IT IS ABOVE THE * PRIVILEGED CARD AND SETS THE MICROCODE COUNTER TO 1. * TRAPR NOP LDA EQT4,I AND CLR11 CLEAR THE EQT4 TIMEOUT FLAG STA EQT4,I LDB CELL THIS LINE'S SELECT CODE CMB,INB ADB DUMMY TEST AGAINST PRIVILEGED CARD'S SC LDA MIC$X MICROCODE CALL MACRO SSB ARE WE ABOVE THE PRIVILEGED CARD? LDA TBG,I YES, GET A "JSB CIC" STA CELL,I SETUP TRAP CELL CLA,INA STA EQTX,I SET MICROCODE COUNT = 1 JMP TRAPR,I RETURN SPC 1 * * SEND WORD, SET TIMEOUT, & AWAIT RESPONSE * TALK NOP JSB OUTPB SEND WORD IN B REG LDB EQT14,I SET COMMUNICATIONS STB EQT15,I LINE TIMEOUT JSB TRAPR SETUP TRAPCELL FOR 1 WORD READ LDA TALK COROUTINE RETURN ADDRESS JMP CEXT1 SPC 1 * * IF ALREADY 7 RETRIES, GIVE PARITY ERROR ELSE BUMP COUNT & RETURN * RETRY NOP LDA EQT12,I AND B7 ISOLATE RETRY COUNTER CPA B7 IS THIS THE 8TH RETRY? JMP FAIL YES, RETURN ERROR ISZ EQT12,I BUMP COUNT JMP RETRY,I Q & TRY AGAIN * FAIL LDB COUNT SZB WAS WORD COUNT ZERO? CPB B77 NO, WAS IT BLOCK PARITY? JMP ERR.6 RETURN A PARITY ERROR * * HERE FOR TIMEOUT ERR.3 LDB B10 TIMEOUT BIT FOR EQT5 JMP ERSET EXIT WITH LINE T.O. ERROR SKP * * CONTINUATION SECTION * CA65 NOP JSB SETIO CONFIGURE I/O INSTRUCTIONS LDB EQT11,I GET COROUTINE ADDR SZB,RSS IT IT SET-UP? JMP IUNKN GO TO UNKNOWN INTERRUPT PROCESSOR LDA EQTX,I STA COUNT SAVE MICROCODE COUNT CLA STA EQTX,I DISABLE MICROCODE LDA EQT12,I AND .020 ISOLATE "LISTEN ENABLED" BIT IOR EQT1,I ALSO TEST FOR DRIVER BUSY SZA ARE EITHER CONDITION TRUE? JMP 1,I YES, GO TO COROUTINE ADDR ISZ CA65 * CLCRD JSB RDD.C CLEAR THE CARD JMP CEXT3 & GET OUT * * * * UNKNOWN INTERRUPTS COME HERE * WE'RE IN TROUBLE IF WE EVER GET HERE!!!!! * IUNKN STB EQT12,I CLEAR ALL CARD STATI LDB B77 SET ALL STATUS ERROR BITS JMP CEND GET OUT...NOW!!! * SKP * * HERE FOR FIRST INTERRUPT WHEN CARD IN LISTEN MODE * ILSTN LDA EQT12,I AND B1776 INITIALIZE BROKEN LINE COUNT STA EQT12,I * ILSN0 JSB CHECK FIND OUT WHAT THEY SENT US JMP ILSN4 TIME OUT...IGNORE JMP ILSN4 STOP...IGNORE JMP ILSN1 REQUEST COMING * * ENTER HERE WHEN UNRECOGNIZED WORD RECEIVED WHILE "LISTENING" SZB ZERO RECEIVED? JMP ILSN4 NO, JUST IGNORE IT JSB RDD.C CLEAR COMMUNICATIONS CARD LDA EQT12,I ISZ EQT12,I BUMP BROKEN LINE COUNT AND B77 CPA B77 64 ZEROES IN A ROW = BROKEN LINE! JMP DEXIT IT IS, LEAVE CARD DISABLED & EXIT JSB TRAPR SETUP FOR 1 WORD READ JSB CEXIT EXIT IN RCV MODE JMP ILSN0 GOT ANOTHER WORD, GO CHECK IT * ILSN1 LDA EQT12,I EQT STATUS IOR .010 SET REQUEST PENDING FLAG STA EQT12,I SAVE IT * ILSN2 LDB TNW SEND A TNW JSB TALK & WAIT FOR DATA LENGTH JSB PRECK DO PREAMBLE CHECKING ADA B3 POINT TO EXT(3) STB 0,I SAVE DATA LENGTH FOR PROGRAM JSB TALK ECHO IT & GET DATA LENGTH JSB PRECK DO PREAMBLE CHECKING ADA B2 POINT TO EXT(2) STB 0,I SAVE RQST LENGTH FOR PROGRAM ADA B4 POINT TO EXT(6) LDB 0,I GET I/O ADDRESS OF PROGRAM STB PROG SAVE ADDRESS ADB B17 GET TO STATUS LDA 1,I GET STATUS AND B17 MASK OFF ALL BUT STATUS SZA BUSY? JMP ILSN3 YES...TELL OTHER SIDE TO RETRY ADB N5 ID SEG B REG SAVE AREA LDA EQT4 GET ADDRESS OF LU STA 1,I PASS IT IN B REG JSB $LIST SCHEDULE PROGRAM OCT 101 PROG NOP ILSN4 JSB RDD.C CLEAR CARD BY READING IT JSB TRAPR SETUP TRAP CELL & ENABLE 1 WORD READ LDA LSTNI SET FOR LISTEN MODE INTERRUPT JMP CEXT1 AND EXIT * * HERE IF WE GOT A "BUSY" CONDITION * ILSN3 LDB STOP SEND STOP TO INDICATE "REMOTE BUSY" JSB OUTPB SEND IT * * HERE ON STOP...CLEAR REQUEST PENDING STATUS * ILSN5 LDA EQT12,I AND CLR9 CLEAR REQUEST PENDING FLAG STA EQT12,I JMP ILSN4 TERMINATE * * SUBROUTINE TO CHECK RCVD PREAMBLE WORD & RETRY IF RC * PRECK NOP JSB CHECK CHECK RCVD WORD JMP ILSN5 TIME-OUT, CLEAR RP CONDITION RSS 7760B IS POSSIBLE DATA LEN JMP ILSN2 RC, RESTART PREAMBLE LDA EQTX PASS EXT AREA ADDR BACK JMP PRECK,I SPC 2 * * HERE FOR SEND STOP REQUEST * STPRQ LDB STOP SEND STOP JSB XMITX IN XMIT MODE JSB RDD.C READ CARD TO CLEAR IT LDA EQT12,I AND BSTMK SAVE LISTEN, BROKEN LINE, & LAST OP.BITS JMP ENDOK * * NOW SET FLAG TO SHOW WHETHER THE LAST SUCCESSFUL OPERATION WAS A * READ OR WRITE. THIS IS USED TO RESOLVE SIMULTANEOUS LINE CONTENTION. ENDIT LDA EQT12,I AND .020 SAVE "LISTEN ENABLED" FLAG LDB EQT5,I BLF,BLF SSB SKIP IF READ IOR .100 SET LAST OPERATION AS WRITE * ENDOK STA EQT12,I SET STATUS CLB,INB,RSS SET GOOD STATUS * * STOP RCVD EXIT ERR.4 LDB B20 SKP * * HERE TO TERMINATE * CEND JSB STAT UPDATE EQT 5 STATUS LDA EQT12,I GET CARD STATUS WORD AND .020 IS IT LISTEN MODE? SZA,RSS JMP CLCRD NO, CLEAR CARD & EXIT JSB TRAPR SET UP TRAP CELL & ENABLE 1 WORD READ LDA LSTNI GET LISTEN INTERRUPT JMP CEXT2 AND LEAVE * * HERE TO DO CONTINUATION RETURN * CEXIT NOP LDA CEXIT GET NEXT INTERRUPT ADDRESS CEXT1 ISZ CA65 BUMP CONTINUATOR RETURN CEXT2 STC 0,C SET FOR LISTEN MODE CEXT3 STA EQT11,I SAVE NEW INTERRUPT LOCATION CEXT4 CLA LDB SETIO CPB I65AD WAS THIS ENTRY VIA INITIATOR? JMP IA65,I YES, THEN RETURN THE SAME WAY LDB EQT6,I GET EQT6 IN CASE IT'S COMPLETION JMP CA65,I RETURN * I65AD DEF SERET SPC 3 * * SUBROUTINE TO PUT NEW STATUS INTO EQT WORD 5 * STAT NOP LDA EQT10 STA EQT15 FOOL RTE SO IT LEAVES TIMEOUT ALONE LDA EQT5,I GET WORD 5 AND B1776 MASK OFF OLD STATUS IOR 1 STUFF IN NEW STATUS STA EQT5,I AND PUT IT AWAY JMP STAT,I RETURN * SKP * * ROUTINE TO DO CHECKING OF INPUT DATA * WILL RETURN *+1 TIME OUT * *+2 STOP RECEIVED * *+3 REQUEST COMING RECEIVED * *+4 NORMAL RETURN...B REG= LAST DATA WORD * CHECK NOP LDB EQTX EQT EXTENSION ADDRESS INB LDB 1,I LAST WD RCVD LDA U!NLHCOUNT MICROCODE COUNT SZA SKIP IF ALL TRANSFERRED JMP CHEC2 NO, POSSIBLE INTERRUPT * CHEC1 ISZ CHECK SET FOR STOP RETURN CPB STOP STOP? JMP CHECK,I YES...DO STOP RETURN ISZ CHECK CPB RC REQUEST COMING? JMP CHECK,I YES ISZ CHECK JMP CHECK,I DO NONE OF THE ABOVE RETURN * CHEC2 LDA EQT4,I AND .040 ISOLATE TIMEOUT FLAG SZA IS THIS A REAL TIMEOUT JMP CHECK,I YES, RETURN STA COUNT CLCC1 CLC 0,C NO, DISABLE CARD LIB1 LIB 0 INPUT THE WORD JMP CHEC1 * * B10 OCT 10 B20 OCT 20 B17 OCT 17 .040 OCT 4000 BSTMK OCT 12100 B1774 OCT 177400 B1776 OCT 177600 TEMP NOP MIC$X NOP OPEN LOOP MICROPROGRAM CALL COUNT NOP EQTX NOP SKP RTN* * ROUTINE TO CLEAR CARD * RDD.C NOP CLCC2 CLC 0,C LIAC2 LIA 0,C CLEAR STATUS LIA2 LIA 0 READ DATA WORD CLA JMP RDD.C,I * * HERE TO SEND WORD AND EXIT IN TRANSMIT MODE * XMITX NOP JSB OUTPB SEND WORD JSB TRAPR SETUP TRAP CELL STC0 STC 0 SET TRANSMIT MODE LDA XMITX COROUTINE UPON RETURN STA EQT11,I DEXIT ISZ CA65 BUMP CONTINUATION RETURN JMP CEXT4 * * OUTPB NOP OTB1 OTB 0 OUTPUT B JMP OUTPB,I RETURN * RC OCT 170017 REQUEST COMING WORD TNW OCT 170360 TRANSMIT NEXT WORD STOP OCT 7760 SEND STOP RLW OCT 7417 RETRANSMIT LAST WORD RLM OCT 170377 RETRANSMIT LAST MESSAGE * B2 OCT 2 B4 OCT 4 B7 OCT 7 N5 DEC -5 N6 DEC -6 N7 DEC -7 SKP * SETIO NOP LDA EQT12,I EQT STATUS AND MICFG CLEAR MICROCODE R/W & RETRY FLAGS STA EQT12,I UPDATED EQT LDB EQT2,I CLA SSB SYSTEM TRYING TO INITIATE NEW REQUEST? CCA YES, SET A TICK STA EQT15,I SET TIMEOUT LDB EQT13,I STB EQTX SAVE ADDRESS OF EQT EXTENSION LDA EQT4,I AND B77 ISOLATE SELECT CODE STA CELL SAVE FOR TRAP CELL ADDR IOR CLCC CLC0,C COMMAND STA CLCC1 STA CLCC2 XOR .040 CONVERT TO STC 0,C COMMAND STA LISTI STA CEXT2 XOR .010 CONVERT TO STC 0 COMMAND STA STC0 XOR B200 CONVERT TO LIA COMMAND STA LIA2 XOR .010 CONVERT TO LIA 0,C COMMAND STA LIAC2 XOR .050 CONVERT TO LIB COMMAND STA LIB1 XOR B300 CONVERT TO OTB 0 COMMAND STA OTB1 JMP SETIO,I RETURN * * MICFG OCT 117777 CLCC CLC 0,C B200 OCT 200 B300 OCT 300 .050 OCT 5000 * BSS 0 SEE HOW BIG IT IS SKP * * DEFINE BASE PAGE LOCATIONS NEEDED * * * . ,  EQU 1650B EQT1 EQU .+8 EQT2 EQU .+9 EQT4 EQU .+11 EQT5 EQU .+12 EQT6 EQU .+13 EQT7 EQU .+14 EQT8 EQU .+15 EQT9 EQU .+16 EQT10 EQU .+17 EQT11 EQU .+18 EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 DUMMY EQU 1737B INTBA EQU 1654B TBG EQU 1674B END ަ  ]r 91740-18021 1805 S C0122 DS/1000 MODULE: NDTGN              H0101 QxASMB,L,R,C HED NDTGN 91740-16021 REV 1805 (C) HEWLETT-PACKARD CO. 1978 NAM NDTGN,3 91740-16021 REV 1805 771123 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 2 **************************************************************** * * NDTGN, ROUTINE TO ALLOW THE OPERATOR TO ENTER AND FORMAT * THE NDT IN A FILE * * SOURCE PART # 91805-18021 REV 1805 * * REL PART # 91805-16021 REV 1805 * * WRITTEN BY JEAN-PIERRE BAUDOUIN * * DATE WRITTEN MARCH 1976 * * MODIFIED BY CHW & CCH * * DATE MODIFIED JULY 1976, MARCH 1977 * *************************************************************** * * MODIFIED TO HANDLE DVR07 ** NOV 1977 ** DMT * *************************************************************** SPC 1 NODES EQU 512 MAXIMUM NODES IN NDT TABLE SPC 2 * THIS ROUTINE IS AN INTERACTIVE TABLE GENERATOR. * THE TABLE GENERATED IS THE NETWORK DESCRIPTION * TABLE (NDT). THIS TABLE IS STORED IN A FILE BY * THE GENERATOR AND IT WILL BE USED AT SYSON TIME * BY LSTEN. THE NAME OF THE TABLE IS SPECIFIED BY * THE OPERATOR (AS THE ANSWER TO THE FIRST QUESTION) * THIS NAME MUST BE REMEMBERED SINCE IT WILL BE * ASKED FOR BY LSTEN. * THE FORMAT OF THE NDT IS: * * RECORD #1: * W0 : NEGATIVE NUMBER OF NODES IN THE NETWORK * W1 : NODE NUMBER OF THE FIRST NODE * : * : * WN : NODE NUMBER OF NODE N * * RECORD #N (WHERE 1 1275? JMP INERX YES, ERROR LDA PARSB+5 NO, GET TIMEOUT AGAIN CLB DIV B5 CONVERT TO 5 SEC INTERVALS ADB N3 SSB,RSS REMAINDER > 2? INA YES, ROUND UP CMA,INA MAKE NEGATIVE SSA,RSS USE 5 SECONDS CCA IF TOO LOW. ADA D256 RAL,ALF RAL TIMEOUT IN BITS 13-6 IOR PARSB+1 INCLUDE LU LDB 0 STOLU LDA PNTR2,I GET THIS NODE # DST PNTR3,I SAVE NODE/TIMEOUT/LU WORD PAIR ISZ CNTR3 BUMP ADDRESSABLE NODES COUNT ISZ PNTR3 ISZ PNTR3 * NXTLU ISZ PNTR2 ISZ CNTR2 END OF THIS VECTOR ? JMP LOOP3 NO, CONTINUE * LDA CNTR3 YES, GET ADDRESSABLE NODES COUNT CMA,INA NEGATE ALS DOUBLE IT STA BUF2 STORE IN 1ST WORD OF NRV RECORD * JSB WRITF WRITE THIS RECORD DEF *+5 DEF IDCB DEF IERR DEF BUF2 DEF NRLEN ISZ PNTR1 ISZ CNTR1 END OF TABLE ? JMP LOOP2 NO, GET ANOTHER VECTOR JSB CLOSE YES, CLOSE THE FILE DEF *+3 DEF IDCB DEF IERR * JSB CHCKN WAS THERE A FILE RSS YES JMP MSOK NO JSB CLOSE CLOSE FILE DEF *+3 DEF INDCB DEF TEMP1 CLA STA FILFG ISZ ERFLG TERM MESSAGE TO ERROR LU MSOK JSB PRINT PRINT " END NDTGN" DEF OKMSG DEC 5 JMP EXIT SPC 3 * ABORT JSB PURGE PURGE NDT FILE DEF *+4 DEF IDCB DEF IERR DEF NAME HED NDTGN: SUBROUTINES SECTION (C) HEWLE9TT-PACKARD CO, 1977 * HERE TO TERMINATE * TERM JSB CHCKN WAS THERE A FILE RSS YES...FILE JMP TERM1 NO...DON'T CLOSE IT JSB CLOSE DEF *+3 DEF INDCB DEF TEMP1 CLA STA FILFG ISZ ERFLG ENSURE ABORT MSG GOES TO ERRLU TERM1 JSB PRINT DISPLAY ABORT MESSAGE DEF TERMM DEC 7 EXIT JSB EXEC DEF *+2 DEF D6 SKP * SUBROUTINE TO PRINT MESSAGES * IF WE ARE IN AN INTRACTIVE TERMINAL * CALLING SEQUENCE * JSB PRINT * DEF MESSAGE * DEC MESSAGE LENGTH * PRINT NOP LDB PRINT,I GET ADDRESS OF BUFFER TO BE PRINTED STB PRNT1 ISZ PRINT GET TO LENGTH WORD JSB CHCKN FILE OR LU ? JMP PRNTA FILE, FORGET IT LDA TTYF GET TTY FLAG LDB ERFLG GET ERROR FLAG SZB,RSS ERROR OR SZA,RSS OR INTERACTIVE RSS YES...PRINT MESSAGE JMP PRNTA NO ERROR AND NOT INTERACTIVE LDA RLU GET INTERACTIVE LU SZB ERROR? LDA ERLU YES...ERROR LU STA PRTLU SAVE AS PRINT LU JSB REIO PRINT MESSAGE DEF *+5 DEF B2 DEF PRTLU PRINT LU PRNT1 NOP DEF PRINT,I LENGTH PRNTA ISZ PRINT GET TO RETURN ADDRESS JMP PRINT,I RETURN SPC 1 B2 OCT 2 PRTLU NOP SPC 2 * * ROUTINE TO DECIDE WHICH TYPE OF INPUT DEVICE * EITHER FILE OR LU * IF LU, A REG WILL CONTAIN LU TYPE * CALLING SEQUENCE * JSB CHCKN * FILE RETURN * LU RETURN * CHCKN NOP LDB FILFG GET FILE FLAG LDA TTYF GET TTY FLAG SZB,RSS LU OR FILE ISZ CHCKN LU JMP CHCKN,I AND RETURN SKP * SUBROUTINE TO CHECK DRIVER TYPE * CALLING SEQUENCE: JSB TTY? * DEF * UPON RETURN, A-REG=LU NUMBER, B-REG=0 IF INTERACTIVE * TTY? NOP LDA TTY?,I 6 STORE ADDRESS OF STA CHKLU LU IN EXEC CALL. ISZ TTY? SET RETURN ADDRESS. * JSB EXEC MAKE STATUS CALL. DEF *+6 DEF D13 CHKLU DEF *-* DEF TEMP1 DEF TEMP DEF SBCNL * LDA TEMP1 GET EQT WORD 5. ALF,ALF ISOLATE AND B77 DRIVER TYPE. LDB A CPA B5 IF DVR05 JMP SBCH? OR CPA B7 DVR07. JMP SBCH? CHECK SUBCHANNEL. JMP LSN1A SBCH? LDA SBCNL ISOLATE AND SUBMK SUBCHANNEL. SZA,RSS IF ZERO, CLB IT'S INTERACTIVE. LSN1A LDA CHKLU,I A-REG := LU NUMBER. JMP TTY?,I RETURN. SKP * * SUBROUTINE TO READ FROM A SELECTED INPUT DEVICE * WILL PARSE THE INPUT AND PLACE RESULT IN A BUFFER * CALLED PARSB. * CALLING SEQUENCE * JSB READ * UPON RETURN A REG=PARB, B REG=PASB+1 * READ NOP JSB CHCKN FILE OR LU JMP READB FILE READA LDA RLU GET READ LU LDB ERFLG IS THIS AN ERROR READ? SZB LDA ERLU YES...READ FOR ERRORDEVICE STA REDLU SAVE READ LU JSB REIO ISSUE THE READ DEF *+5 DEF B1 DEF REDLU DEF INBUF DEF INBFS SZB EOF HIT? JMP READC NO JSB ERROR DEF EOFM "EOF...INPUT NEEDED" DEC 9 JMP READA TRY AGAIN SPC 1 READB JSB READF READ FROM A FILE DEF *+6 DEF INDCB DEF RSTAT DEF INBUF DEF INBFS DEF ILEN LDB ILEN GET LENGTH SSB,RSS SZB,RSS ZERO OR - ERROR JMP TERM ABORT READC CLE,ELB CONVERT TO BYTE LENGTH STB ILEN SAVE LENGTH JSB PARSE GO PARSE INPUT DEF *+4 DEF INBUF DEF ILEN DEF PARSB CLA CLEAR OUT ERROR FLAG STA ERFLG DLD PARSB LOAD A AND B REG JM P READ,I AND RETURN SPC 2 REDLU NOP ILEN NOP RSTAT NOP SKP * * ROUTINE TO PRINT ERROR MESSAGE IF WORKING FROM * AN LU, OTHERWISE ABORT PROGRAM * CALLING SEQUENCE * JSB ERROR * DEF ERMESAGE * DEC LENGTH OF MESSAGE * WILL SET ERROR FLAG FOR RETRY * ERROR NOP JSB CHCKN CHECK IF FILE JMP TERM FILE...ABORT LDA ERROR,I GET MESSAGE ADDRESS STA ERR1 SAVE ADDRESS ISZ ERROR GET TO LENGTH JSB EXEC DEF *+5 DEF B2 DEF ERLU ERR1 NOP DEF ERROR,I ISZ ERROR ISZ ERFLG SET ERROR FLAG JMP ERROR,I AND RETURN SPC 2 ERFLG NOP SKP * SUBROUTINE TO PRINT SYSTEM ERROR MESSAGES AND * ABORT * CALLING SEQUENCE * JSB SYSER * DEF ERR MESSAGE * DEC LENGTH * SYSER NOP LDA SYSER,I GET MESSAGE ADDRESS STA SYSR1 ISZ SYSER JSB EXEC DEF *+5 DEF B2 DEF B1 SYSR1 NOP DEF SYSER,I JMP TERM AFTER MESSAGE...ABORT SKP HED NDTGN: CONSTANTS * (C) HEWLETT-PACKARD CO. 1977 DRT EQU 1652B NAME? OCT 6412 ASC 12, FILE NAME FOR NDT ? _ INV#M ASC 7, INVALID CPU # CPU#? ASC 6, CPU # ? _ CPUTL OCT 6412 ASC 11,CPU-NUMBER INPUT PHASE FERM ASC 5,FILE ERROR RTM OCT 6412 ASC 13,ROUTE VECTORS INPUT PHASE CPUM ASC 3, CPU # CPU# BSS 3 ASC 3, ? _ BLNKS EQU CPU#+4 DUP# ASC 8, DUPLICATE CPU # VECTM OCT 6412 ASC 23,ENTER COMMUNICATIONS LU'S AND TIMEOUTS FOR CPU VECT# BSS 3 TRFM ASC 7, TR FILE ERROR INERR ASC 6, INPUT ERROR EOFM ASC 9,EOF..INPUT MORE TITLE OCT 6412 ASC 22,GENERAL-NETWORK-DESCRIPTION-TABLE GENERATOR TERMM ASC 7, NDTGN ABORTED MAX# ASC 13, MAX # OF NODES ALLOWABLE OKMSG ASC 5, END NDTGN /E ASC 1,/E /A ASC 1,/A KMAX ABS NODES CNTR1 NOP CNTR2 NOP CNTR3 NOP PNTR1 NOP PNTR2 NOP PNTR3 NOP BUF1A DEF BUF1+1 BUF2A DEF BUF2mj<:6+1 ISIZE NOP NOP ITYPE DEC 9 IERR NOP ISEC NOP ICR NOP NAME REP 3 NOP IL NOP NRLEN NOP FILFG NOP BUFS EQU 20 INBFS ABS BUFS INBUF BSS BUFS RLU NOP SBCNL NOP TEMP NOP TEMP1 NOP TTYF NOP ERLU NOP D0 DEC 0 D2 DEC 2 D6 DEC 6 D13 DEC 13 D256 DEC 256 N1 DEC -1 N3 DEC -3 N6 DEC -6 N1276 DEC -1276 BM100 OCT -100 B1 OCT 1 B5 OCT 5 B7 OCT 7 B77 OCT 77 B400 OCT 400 SUBMK OCT 37 * PARSB BSS 34 IDCB BSS 144 INDCB BSS 144 BUF1 BSS NODES+1 BUF2 BSS NODES+NODES+1 SPC 3 END NDTGN < ^m 91740-18022 1805 S C0422 DS/1000 MODULE: EDITR              H0104 CASMB,R,L,C,Z ** ASSEMBLE DS/1000 VERSION ** HED RTE INTERACTIVE EDITOR * (C) HEWLETT-PACKARD CO. 1978 * * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAME : EDITR * SOURCE: 92002-18010 * RELOC : 92002-16010 'N' ASSEMBLY OPTION: STANDARD RTE * RELOC : 91740-16022 'Z' ASSEMBLY OPTION: DS/1000 LOCAL & REMOTE USE. * PGMR : TAS,GAA,RMC,EJW,CHW,CCH,GWJ * IFN NAM EDITR,3,50 92002-16010 REV 1805 780117 XIF IFZ NAM EDITR,19,50 91740-16022 REV 1805 780117 EXT DEXEC,#NODE XIF EXT EXEC,$LIBR,$LIBX,OPEN,CLOSE,READF,WRITF EXT CREAT,PRTN,.DFER,REIO,LURQ IFN DEXEC EQU EXEC XIF SUP PRESS EXTRANEOUS LISTING SPC 1 MAXIN DEC -150 MAXOP DEC 150 MAX DEC 150 "B" OCT 102 "W" OCT 127 "Y" OCT 131 "J" OCT 112 "Z" OCT 132 "P" OCT 120 "R" OCT 122 "S" OCT 123 "T" OCT 124 "^" OCT 136 "#" OCT 43 M16 DEC -16 DCBSZ NOP M48 DEC -48 M75 DEC -75 M10 DEC -10 .2.I DEF 2,I WRITE CODE WITH ERROR-RETURN. .10 DEC 10 .12 DEC 12 .23 DEC 23 COMND NOP ALSO TEMP TO STORE NAME TRFLG NOP EXFLG DEC -1 TTYLU NOP LOGICAL UNIT NUMBER OF TELETYPE OCCNT NOP LSTFG NOP "A" OCT 101 "I" OCT 111 "L" OCT 114 PLUSS OCT 53 MINUS OCT 55 SLASH OCT 57 ALTERNATIVE FOR + COMMAND. "E" OCT 105 "D" OCT 104 "H" OCT 110 "M" OCT 115 "N" OCT 116 "O" OCT 117 LINES OCT 1 LINE COUNTER LINEM NOP LINE CTR MOST SIG BITS LSLUT NOP CURRENT SOURCE LU/TRACK PBFLG NOP PARTIAL BUFFER FLAG SCT NOP # OF SECTORS PER SORC, DEST BUFR DBUF$ NOP PERMANENT POINTER TO DEST BUFFER SBUF$ NOP PERMANENT POINTER TO SORC BUFFER LWA NOP PERMANENT POINTER TO LWA EDITR ECCNT NOP ALSO MXSEC B600 OCT 600 "F" OCT 106 SPC 1 EDITR LDA B,I FETCH TTY LU IOR B600 SET ECHO BIT OF TELETYPE LU CPA B600 IF NO LU INA SPECIFIED USE STA TTYLU LU = 1 IFZ IOR BIT11 SET INTERACTIVE READ BIT STA INLU XIF INB LDA 1,I FETCH MAX RECRD SSA,RSS NEW MAX OUTPUT RECORD SZA,RSS WHICH IS >0 ? JMP RCHK NO, USE DEFAULT MAXOP ADA MAXIN USE THE SMALLER SSA,RSS OF THE NEW CLA LIMIT OR ADA MAXOP THE DEFAULT STA MAXOP LIMIT RCHK EQU * IFZ INB STB DCBSZ SAVE PARAMETER POINTER, TEMPORARILY. ISZ DCBSZ PREPARE FOR POSSIBLE ISZ DCBSZ NEED TO EXAMINE P5. DLD B,I GET SCHEDULING & SOURCE NODE NO'S. CPA #NODE OUR NODE NUMBER? JMP SVNOD YES, GO TO SAVE SOURCE NODE NO. CPA M1 MINUS ONE ALSO JMP LOCAL ADDRESSES THIS NODE. CPA B LOCAL DEFAULT-SCHEDULE (P3,P4=0)? JMP LOCAL YES. GO TO SET LOCAL NODE PARAMETER. * STA NODE NO. SAVE NODE AT WHICH TO SCHEDULE SSA,RSS IF NODE IS POSITIVE, JMP SCHED GO TO SCHEDULE REMOTE ; ELSE, SZB IF NEG.(NEIGHBOR), ARE WE SCHEDULING? JMP SVNOD NO, WE'VE BEEN SCHEDULED. LDA DCBSZ,I CHECK SPECIAL CASE: SCHED. FROM NODE #0. CPA .1 WERE WE SCHEDULED FROM NODE #0? JMP SVNOD YES, ACCOMMODATE THE REMOTE REQUEST. * SCHED LDA DCBSZ,I GET THE FIFTH SCHEDULING PARAMETER. SZA,RSS OPTIONAL NAME CHARACTERS SUPPLIED? JMP DOSCH NO. GO w TO DO THE SCHEDULING. STA TBUFF,I YES. SAVE THE NAME CHARACTERS. ADA M.100 SUBTRACT 100 FOR ASCII CHECK. SSA,RSS ARE THEY ASCII CHARACTERS? JMP CONFG YES, GO CONFIGURE THE NAME. LDA TBUFF,I NO. GET THE NUMERIC VALUE. CLB JSB DEC CONVERT TO ASCII. CONFG LDA TBUFF GET THE ADDRESS OF THE CHARACTERS. RAL FORM A BYTE ADDRESS. LDB NAMBA GET PROGRAM-NAME BYTE ADDRESS. MBT .2 CHANGE NAME TO SUIT USER. * DOSCH JSB DEXEC DO REMOTE SCHEDULE OF EDITR DEF *+9 DEF NODE DEF .10.I DEF ENAME+4 DEF TTYLU DEF MAXOP DEF NODE DEF #NODE PASS OUR NODE # DEF .1 NON-ZERO: DETECTION OF DESTINATION =0. JMP NOTAV SCHEDULING ERROR--INFORM USER. SZA,RSS IS THE REMOTE EDITR AVAILABLE? JMP EXIT YES NOTAV CCA NO. INFORM THE USER. STA NODE GIVE LOCAL MESSAGE JSB PRINT DEF EXIT DEC 13 ENAME ASC 13,REMOTE EDITR UNAVAILABLE! NAMBA DBR ENAME+5 M.100 DEC -100 .10.I DEF 10,I * LOCAL LDB M1 GET LOCAL NODE DESIGNATION: -1. SVNOD STB NODE ESTABLISH OPERATOR'S NODAL ADDRESS. SZB IF DESTINATION NODE IS NON-ZERO, JMP INT1 THEN NO FURTHER CHECKING IS NEEDED; LDB DCBSZ,I ELSE, GET THE FIFTH SCHEDULING PARAM. SZB,RSS IF P5 =0, THEN JMP LOCAL THIS IS A LOCAL-OPERATION REQUEST. XIF INT1 LDB SECT2 ASSUME LU2 IS SMALLER LDA SECT3 IF #SECTORS ON CMA,INA,SZA,RSS LU 3 = 0 THEN JMP .MXSC USE LU 2 ADA SECT2 IF LU 2 IS SSA,RSS LARGER THAN LU 3 LDB SECT3 USE LU 3 AS THE LIMIT .MXSC BRS CONVERT TO 128 WORD STB MXSEC SECTORS AND SAVE SPC 1 JSB EXEC SET ALL CORE BIT DEF *+3 IN CASE WE ARE IN DEF .22 FOREGROUND DEF .3 z SPC 1 LDA XIDT GET ID-SEG ADDRESS ADA .12 GET NAME OF THIS EDITR STA COMND JSB .DFER AND TRANSFER TO ABORT MESSAGE DEF NAME USING COMND AS TEMP. DEF COMND,I JSB .DFER DEF NAME1 AND WAIT LIST DEVICE MESSAGE DEF COMND,I JSB .DFER DEF NAME2 AND WAIT TRACKS MESSAGE DEF COMND,I LDA NAME+2 AND HBYTE REMOVE FLAG BITS IOR TBFIL STA NAME+2 STA NAME1+2 STA NAME2+2 LDA XIDT GET ID-SEG ADDRESS AGAIN ADA .23 STEP TO HIGH MAIN LDA A,I GET 1ST WORD OF AVAIL. MEMORY SPC 1 * SET UP BUFFER AREA TO FILL CORE SPC 1 * **************************************** * * LAST WORD AVAILABLE MEMORY* ^ * * * ^ * * * ^ * * SOURCE BUFFER * ^ SBUFP RANGE * * * ^ * * * ^ * * COMPUTED FIRST WORD* SBUF$ ^ * **************************************** ^ * * * ^ * * >= 75 WORDS FOR PARTIAL RECORD * ^ * * * ^ * **************************************** * * COMPUTED LAST WORD* ^ * * * ^ * * * ^ * * DESTINATION BUFFER * ^ DBUFP RANGE * * * ^ * * * ^ * * FIRST WORD AFTER EDITR CODE* DBUF$ ^ * **************************************** * * * * * EDITR CODE * * * y * * * * STA DBUF$ STA DBUFP CMA,INA LDB BKLWA ADA AVMEM IF PROGRAM IS IN FOREGROUND, SSA JMP STAD LDB AVMEM SET END OF FOREGROUND ADB EXFLG AS LAST WORD AVAILABLE STAD LDA DBUFP CMA,INA FOR BUFFERS STB LWA ADA LWA ADA M75 ALLOW 75 WORDS BETWEEN BUFFERS CLB ASR 8 DIVIDE BY 256 LDB M48 LIMIT BUFFERS ADB A TO MIN(SECT2,SECT3) SSB,RSS 128 WORD LDA MXSEC SECTORS ALS CONVERT TO 64 WORD SECTORS STA SCT NUMBER OF INPUT/OUTPUT SECTORS ASL 6 CONVERT SECTORS TO WORDS LDB M16 COMPUTE FMGR ADB A BUFFER AREA STB DCBSZ LDB A ADA DBUF$ STA DBEND END OF OUTPUT BUFFER POINTER CMB,INB ADB LWA STB SBUF$ START OF INPUT BUFFER. LDA TTYLU GET INPUT DEVICE LU. JSB TYPEQ OBTAIN DEVICE'S EQUIPMENT TYPE. STA NOPRN IF #0(NOT INTERACTIVE) SET NO-PRINT FLAG. SZA INTERACTIVE DEVICE ? JMP SRCIN NO. BYPASS MESSAGES. IFZ JSB REMCK IF THIS IS A REMOTE OPERATION, JMP TELND THEN IDENTIFY THE LOCAL NODE NO.; JMP PSF ELSE, SIMPLY ASK FOR THE FILE ID. * TELND LDA #NODE GET THE LOCAL NODE NUMBER. CLB JSB DEC CONVERT THE NODE NO. TO ASCII. LDA TBUFF GET THE ASCII BUFFER ADDRESS. RAL = SOURCE BYTE ADDRESS. LDB NUMBA = MESSAGE BYTE ADDRESS. MBT OCCNT MOVE NODE NUMBER(ASCII) TO MESSAGE. LDA MINCT GET MINIMUM MESSAGE LENGTH (CHARS.) ADA OCCNT ADD THE NODE NUMBER CHAR. LENGTH, CMA,INA AND CONVERT TO NEG. CHAR. COUNT. STA TELCN SET THE MESSAGE LENGTH FOR 'PRINT'. JSB PRINT PRINT: "EDITING AT NODE XXXXX" DEF PSF TELCN NOP CONFIGURED NEG. MESSAGE LENGTH. TEMSG ASC 11,EDITING AT NODE 0 MINCT DEC 18 NUMBA DBL TEMSG+8 XIF PSF LDA DVTY CHECK FOR DRIVER 07B CPA DVR07 RSS JMP PSFC NO, SKIP NEXT CODE JSB PRINT SET TABS AT COLUMN'S 8 AND 23. DEF PSFC DEC -17 ASC 9,3&a8C1&a22C1 PSFC JSB PRINT PRINT "SOURCE FILE" DEF SRCIN DEC 6 ASC 6,SOURCE FILE? SRCIN JSB TTYIP INPUT RESPONSE CPB .1 ONE WORD RESPONSE? JMP FTST YES, CHECK FOR "0", OR ":". FPARS JSB SC.CR PARSE FILE NAME JMP LSFIL USE LS AREA DLD FSECR SAVE SC AND CR FOR A DST FSECW POSSIBLE ER. JSB INSRC FETCH FILE JMP PSF NOT FOUND TRY AGAIN * LDA FCARW GET USER'S CART. SPECIFICATION. SZA WAS IT SUPPLIED? JMP STEOF YES--NO NEED TO FAKE IT. LDA SBUF$,I NO. GET FIRST WORD OF DCB. AND B77 ISOLATE THE FILE'S LOCATION LU. CMA,INA NEGATE, AND SAVE FOR STA FCARW POSSIBLE USE IN FILE REPLACEMENT. * STEOF CCA SET EOF FLAG STA SLNG IN SOURCE LENGTH JSB ./B1 TRANSFER PARTIAL BUFFER JMP STBUF SET TBUFF. SPC 1 FTST LDA EBUFF,I GET SINGLE INPUT CHARACTER ALF,ALF ISOLATE THE AND LBYTE FIRST-AND 0NLY-INPUT CHARACTER. CPA ":" =":"? JMP ./A1 YES, QUIT NOW CPA B60 ="0"? CLA,RSS YES, SIMULATE NULL LS JMP FPARS GO PARSE FILE NAME JMP LSNUL SPC 1 LSFIL EQU * IFZ JSB REMCK TALKING REMOTE? CLA,RSS YES,TREAT LS AS UNDEFINED XIF LDA SFCUN SAVE SYSTEM LS POINTER, LSNUL CCB UNLESS LS UNDEFINED. SZA,RSS STB NOLSF STA LSLUT IN SOURCE FILE POINTER AND STA LSTRK SET UP RELEASE TRACK PNTR z JSB ALCAT GET LS FILE AND DEST. TRACK CCA IF THE LOGICAL SOURCE AREA CPA NOLSF IS UNDEFINED, THEN JMP STEOF+1 BYPASS SOURCE INPUTS, AT PRESENT. JSB SQ FILL INPUT BUFFER STBUF LDA TBUFP POINT TBUFF TO TBUF0 STA TBUFF FOR ALL OTHER EDIT USES. JMP DISPL PRINT FIRST LINE SPC 1 .22 DEC 22 TBUFP DEF TBUF0 MBUF0 EQU EDITR OVERLAY ONE-TIME CODE. LERR EQU *-EDITR-75 CHECK ENOUGH ONE-TIME CODE FOR * 75 WORDS OF MBUF0. SPC 1 * MBUF0 OVERLAYS CODE AT THE START ('EDITR') WHICH IS * NOT NEEDED ONCE SOURCE FILE INFORMATION IS COMPLETE. * IT IS ONE OF THE DYNAMICALLY ASSIGNED BUFFERS. SEE * COMMENTS FOR EBUF0,ETC. NEAR END OF LISTING. SPC 1 NOLSF OCT 0 SET TO -1 IF LS UNDEFINED. N140 OCT -140 N32 OCT -32 * ********* * READ IN EDIT COMMAND AND ACT ON IT. ********* * NODE1 CLA RESET CHARACTER STA EXFLG EXCHANGE FLAG LDA LUCMD GET THE LAST LU-LOCK COMMAND. SLA IF THE LIST LU WAS LOCKED, JSB LULOK THEN GO TO UNLOCK IT. LDA TTYLU RESET THE STA LSTLU LIST LU IFZ CLB LDA INTFL GET THE INTERACTIVE FLAG. STB INTFL CLEAR THE INTERACTIVE FLAG. SZA,RSS IF FLAG WAS SET, SKIP--COMMAND WAS READ. XIF NODE2 JSB TTYIP INPUT COMMAND JSB ECH JMP ERR JSB LCASE CONVERT LOWER CASE CHAR.--IF REQUIRED. STA COMND SAVE TEMPORARILY * CPA "A" JMP ./A LDB ./EFL IF END ENTERED ANY OTHER COMMAND SZB,RSS IS DISALLOWED JMP NOTEN OK ALLOW ANY COMMAND CPA "E" END AGAIN? JMP ./E2 YES GO TRY THE NEW FILE NAME JMP ERR NO ERROR NOTEN LDB B40 RESET TAB FILL STB TBFIL TO SPACE CPA B40 COMMAND? JMP O/PEB NO, OU6TPUT LINE CPA "=" JMP ./= CPA %G JMP ./CG MUTE BELL WITH PROMPT. CPA "P" JMP ./P DISPLAY CURRENT LINE CCB STB TRFLG STB LSTFG CPA "C" IF CHARACTER JMP ./C GO DO IT CPA "L" JMP NUMBR CLB STB LSTFG RESET LIST FLAG CPA "K" JMP ./K CPA "#" SEQUENCE NUMBER? JMP ./# CPA "O" JMP ./O CPA "M" MERGE NEW SOURCE? JMP ./M YES GO DO IT CPA SLASH SLASH AND "+" MEAN THE SAME RSS CPA PLUSS JMP NUMBR CPA "E" JMP ./E CPA "N" JMP ./N CPA "H" JMP ./H CPA "S" JMP ./S CPA "T" JMP ./T CPA "U" JMP ./U UNCOND. REPLACE W/O LIST. CPA "V" JMP ./V THIS WITH LIST. CPA "W" SPECIFY A NEW WINDOW? JMP ./W CPA "G" JMP ./Z CPA "X" JMP ./X CPA "Y" JMP ./X CPA "Z" DEFINE XCHANGE PATRN W/O LIST JMP ./Z CPA "^" JMP ./^ STB TRFLG RESET TRANSFER FLAG CPA MINUS JMP NUMBR JSB ASCII COMMAND CHARACTER RSS NUMERIC? JMP FNUM YES, GO TO FIND LINE NUMBER JSB TAB TAB THE COMMAND LINE LDA COMND RESTORE COMMAND CHARACTER CPA "Q" TERMINAL INTRINSIC EDIT? JMP ./Q YES, GO TO PROCESS. CPA "R" JMP ./R CPA "I" JMP ./I JSB SWPET LDA COMND CPA "D" JMP COMPR CPA "J" JUMP TO NEW LINE W/O TRANSFER JMP ./J CCB STB TRFLG SET TRANSFER FLAG CPA "F" JMP COMPR CPA "B" COMPLETE TRANSFER AND START SEARCH JMP ./B FROM THE BEGINNING ERR JSB PRINT ERROR DEF ERCK IN INPUT DEC 1 COMMAND V ASC 1,?? PRINT "??" ERCK SZB,RSS JMP NODE1 JMP EXIT ABORT IF PRINT ERROR. *** %G OCT 7 BELL (CONTROL G) "=" OCT 75 "G" OCT 107 "K" OCT 113 "Q" OCT 121 "U" OCT 125 "V" OCT 126 "X" OCT 000130 B37 OCT 37 B77 OCT 77 DVR12 OCT 5000 LINE PRINTER TYPE CODE. DVR23 OCT 11400 MAG. TAPE TYPE CODE. DVRTY OCT 37400 DRIVER TYPE MASK N.13I OCT 100015 STATUS REQUEST CODE LSTLU OCT 606 LIST LU * NUMBR JSB NUMIN CMA,INA COMPLEMENT NUMBER SZA,RSS AND STORE IN COUNT CCA IF NUMBER IS ZERO SET STA COUNT TO -1 JSB NLSLU SET UP NEW LU IF GIVEN ./CC JSB TR SSB EOF FOUND? JMP EOFPR YES, PRINT "EOF" FNUM2 ISZ COUNT FOUND LINE NUMBER? JMP ./CC NO, FETCH NEXT LINE JMP DISPL YES, DISPLAY IT SPC 1 NLSLU NOP JSB NUMIN GET OPTIONAL NEW LIST LU AND B77 SAVE JUST THE LU LDB 0 SZA,RSS IF NOT SUPPLIED LDA TTYLU USE TTY LU IOR B600 SET ECHO AND V-BITS STA LSTLU SAVE THE LU SZB,RSS SKIP UNLESS NOT SPECIFIED JMP NLSLU,I * JSB TYPEQ GET LIST DEVICE TYPE CODE. SZA,RSS IF IT'S INTERACTIVE, JMP NLSLU,I THEN SIMPLY RETURN; ELSE, CHECK: CPA DVR12 IS IT DVR12--A LINEPRINTER? JMP *+2 YES, SKIP FOR ADDITIONAL PROCESSING. JMP ERR NO! OTHER DEVICES ARE UNACCEPTABLE. JSB LULOK GO TO LOCK THE LIST LINEPRINTER. JMP NLSLU,I RETURN. SPC 1 LULOK NOP LIST LU LOCKING/UNLOCKING ROUTINE. LDA LUCMD GET THE CURRENT COMMAND. XOR .1 CONVERT TO OPPOSITE ACTION. STA LUCMD SAVE FOR NEXT PASS. STA IOPT CONFIGURE THE CALL. IFZ JSB REMCK IF THE LIST DEVICE IS REMOTE, JMP LULOK,I THEN LOCKING IS NOT REQUIRED. XIF LOKI T JSB LURQ REQUEST DEF *+4 LOCK OR DEF IOPT UNLOCK DEF LSTLU FOR THE SPECIFIED DEF .1 LIST LOGICAL UNIT. JMP LUERR REPORT THE ERROR. * CPA M1 IF NO RN'S AVAILABLE, NOW, CLA,INA,RSS THEN GO BACK AND WAIT. CPA .1 IF LOCKED BY ANOTHER, THEN JMP WAITL GO BACK TO WAIT FOR IT. JMP LULOK,I LOCK/UNLOCK SUCCESSFUL--RETURN. * WAITL IOR BIT14 INCLUDE NO-ABORT BIT, STA IOPT AND SET COMMAND: WAIT FOR LU/RN. JSB PRINT INFORM DEF LOKIT THE USER DEC 15 THAT WE MUST WAIT. NAME1 ASC 15,EDITR WAITING FOR LIST DEVICE. * LUERR DST LUMSG+7 CONFIGURE ERROR MESSAGE. LDA TTYLU REPORT TO THE CONSOLE, INSTEAD, STA LSTLU DUE TO LIST-DEVICE PROBLEM. JSB PRINT PRINT THE ERROR MESSAGE, DEF LULOK,I AND DO THE REQUESTED LISTING. DEC 9 LUMSG ASC 9,LU LOCK ERROR XXXX LUCMD OCT 140001 NO WAIT/NO ABORT/LOCK IOPT OCT 140000 FIRST TIME: UNLOCKS ANY LU'S. BIT14 OCT 40000 DVTY NOP * TYPEQ NOP EQUIPMENT TYPE CODE DETERMINATION. STA LULOK SAVE LOGICAL UNIT, TEMPORARILY. JSB DEXEC GO TO GET I/O STATUS FOR THE DEVICE. DEF TYRTN IFZ DEF NODE XIF DEF N.13I NO-ABORT STATUS REQUEST DEF LULOK FOR THE SPECIFIED LOGICAL UNIT NO. DEF TAB EQT5 RETURNED TO 'TAB'. DEF SWPET EQT4 RETURNED, BUT NOT USED. DEF CHKN SUBCHANNEL RETURNED TO 'CHKN'. TYRTN JMP ERR ** ERROR: ISSUE "??" ** LDA TAB ISOLATE THE DEVICE TYPE CODE AND DVRTY FROM EQUIPMENT-TABLE WORD #5. STA DVTY SAVE IT SZA,RSS IF IT'S TYPE <00> (INTERACTIVE), JMP TYPEQ,I THEN RETURN IMMEDIATELY: =0. * CPA DVR05 IF IT'S A 264X TERMINAL, THEN JMP TYPE5 GO TO EXAMINE THE LU SUBCHANNEL; CPA DVR07 2645 MP TERMINAL? CLA YES, CLEAR "A" JMP TYPEQ,I ELSE RETURN: #0 (NON-INTERACTIVE). * TYPE5 LDA CHKN GET SUBCHANNEL FOR DEVICE. AND B37 ISOLATE SUBCHANNEL BITS(#4-0). STA B SAVE IT TEMPORARILY. SZA,RSS IF THE SUBCHANNEL IS ZERO, THEN RETURN JMP TYPEQ,I WITH SIMULATED TYPE <00> CODE IN . LDA DVR23 PREPARE TO SIMULATE MAG. TAPE TYPE<23>. CPB .4 IF THE SUBCHANNEL IS FOUR, THEN LDA DVR12 SIMULATE TYPE <12> LINEPRINTER. JMP TYPEQ,I RETURN--DEVICE TYPE: <12>,LP OR <23>,MT. SPC 1 COMPR JSB TR TRANSFER PENDING LINE COMP1 JSB ECH MATCH FIELD SUPPLIED? JMP EOFTS NO USE OLD ONE COMP2 LDA EBUFF YES SWAP EBUFF LDB MBUFF AND MBUFF STA MBUFF SET UP THE STB EBUFF NEW MATCH FIELD LDA ELNG SET THE NEW MATCH LENGTH STA MLNG FOR MBUFF EOFTS LDA SLNG IF AT SSA END OF FILE JMP EOFPR PRINT "EOF" JMP COMP4 START SEARCH COMP3 JSB TR SSB EOF FOUND? JMP EOFPR YES, PRINT "EOF" COMP4 CLA CLEAR STA WINDF WINDOW FLAG STA MCCNT STA JDEF$ ZERO THE INDEFINITE STA IDEF$ FLAGS. CMPR1 JSB MCH JMP DISPL CPA INDEF INDEFINITE CHARACTER? JMP CMPR2 YES - GO SET UP. CPA DLMTR WINDOW SPECIFIED JMP CMPR5 ON SEARCH CMPR7 STA NUM1 NO - SAVE THE CHARACTER CMPR6 LDA WIND2 PAST ADA SCCNT WINDOW AND LDB WINDF WINDOW SLB FLAG SSA SET? RSS NO -- CONTINUE SCAN JMP COMP3 YES -- PATTERN NOT FOUND SPC 1 JSB SCH GET SOURCE CHARACTER. DVR05 CLA IF NONE - USE ZERO. CPA NUM1 COMPARE WITH PATTERN JMP CMPR3 COMPARES SO JUMP TO INDEF TEST SZA,RSS IF EOL THEN TAKE JMP COMP3 NOT FOUND EXIT LDB IDEF$ INB,SZB,RSS IF FIRST CHARACTER SEARCH JMP CMPR6 TRY THE NEXT CHARACTER. ISZ JDEF$ END OF INDEF MATCH? JMP COMP3 NO - SO NO MATCH. SPC 1 LDA SCCN$ RESET SOURCE POINTER STA SCCNT AND LDA MCCN$ PATTERN STA MCCNT LOCATION THEN LDB WINDF RESET THE WINDOW FLAG BRS IF TWO SET TO 1 ELSE 0. RSS SKIP THE CLEAR. SPC 1 CMPR2 CLB CLEAR CMPR8 STB WINDF WINDOW FLAG LDA MCCNT SET UP FOR INDEFINITE STA MCCN$ CHARACTER DVR07 CCA SAVE THE PATTERN LOCATION AND STA IDEF$ SET THE FIRST CHAR. FLAG STA JDEF$ AND THE INDEF FLAG JMP CMPR1 GO GET THE FIRST PATTERN CHARACTER. SPC 1 CMPR3 ISZ IDEF$ FIRST CHAR FOUND AFTER INDEF CHAR? JMP CMPR1 NO CONTINUE LDB WINDF GET WINDOW FLAG AND CPB .1 IF ONE SET TO ISZ WINDF SET TO TWO LDA SCCNT YES - SET STA SCCN$ CURRENT SOURCE POSITION. JMP CMPR1 CONTINUE MATCH SPC 1 CMPR5 CLB,INB IS WINDOW CHARACTER CPB MCCNT THE FIRST CHAR. OF COMMAND? RSS YES -- CONTINUE JMP CMPR7 NO, IGNORE LDA WIND1 START SEARCH AT STA SCCNT BEGINNING OF WINDOW CMA,INA IF WINDOW ADA SLNG STARTS BEYOND SSA END OF LINE JMP COMP3 DO NOT SEARCH JMP CMPR8 CONTINUE SEARCH WITH INDEF. 1ST SPC 1 FNUM CLA RESET COMMAND STA ECCNT CHARACTER POINTER JSB NUMIN COMPUTE LINE NUMBER CMA,INA,SZA,RSS COMPLEMENT AND IF ZERO CCA SET TO -1 STA COUNT AND SAVE STA TRFLG SET TRANSFER FLAG JSB NLSLU SET UP NEW LU IF GIVEN LDA COUNT LOAD -(LINE NUMBER DESIRED) ADA LINES ADD CURRENNLHT POSITION SSA,RSS IF POSITIVE JMP FNUM3 GO TO BEGINNING OF FILE STA COUNT ELSE USE DIFFERENCE AS LOOP CNTR JMP ./CC GO FIND LINE SPC 1 FNUM3 JSB ./B1 COMPLETE TRANSFER JMP FNUM2 SPACE FORWARD TO DESIRED LINE jN SPC 1 ./# LDA M3 SKIP OVER STA COUNT ALPHA COMMENT. ./#0 JSB ECH NOP ISZ COUNT JMP ./#0 JSB NUMIN FETCH START NUMBER STA BASE AND SAVE AS BASE JSB NUMIN FETCH 2ND NUMBER SZA,RSS IF ZERO SET LDA .10 TO 10 AND STA INCR SAVE AS INCREMENT JSB ./B1 GO TO BEGINNING OF FILE SPC 1 ./#1 CLA RESET CHARACTER OUTPUT STA OCCNT COUNTER LDA M72 MOVE STA COUNT FIRST 72 ./#2 JSB SCH CHARACTERS JMP SPC OF SOURCE JSB OUTCR TO OUTPUT ISZ COUNT BUFFER JMP ./#2 JMP ./#3 SPC 1 SPC LDA B40 BLANK JSB OUTCR FILL TO ISZ COUNT COLUMN 72 JMP SPC ./#3 CLA,INA SET UP COMMAND STA ECCNT BUFFER COUNTER LDA M3 SET UP LOOP STA COUNT COUNTER FOR 3 CHARACTERS ./#4 JSB ECH FETCH NEXT ALPHA COMMENT LDA B40 LOAD BLANKS IF NO COMMENT JSB OUTCR OUTPUT CHARACTER ISZ COUNT THIRD CHARACTER? JMP ./#4 NO, FETCH NEXT CHARACTER SPC 1 LDA BASE OUTPUT LINE NUMBER CLB JSB DEC IN ASCII LDA BASE UPDATE ADA INCR LINE STA BASE NUMBER LDA OCCNT OUTPUT CHARACTER LDB TBUFF TO DISC BUFFER JSB DOUTP JSB I/PSB INPUT NEXT RECORD SSB AT EOF? JMP EOFPR YES, PRINT "EOF" JMP ./#1 NO, CONTINUE SPC 1 ./= JSB NUMIN GET REQUESTED LENGTH SZA,RSS JMP ERR ADA MAXIN IF LONGER THAN ALLOWABLE SSA,RSS MAX, USE ALLOWABLE MAX CLA AND CONTINUE. ADA MAX STA MAXOP JMP NODE1 SPC 2 TBFIL OCT 40 WINDF NOP M72 DEC -72 MLNG NOP MCCNT NOP MBUFF DEF MBUF0 CHANGES POINTS TO CURRENT MATCH BUFFER JDEF$ NOP INDEFINITE PROCESSING FLAG * ALSO USED FOR IDEF$ NOP FIRST CHAR AFTER INDEF FLAG * ALSO USED FOR INDEF OCT 33 INDEFINITE CHAR. IS ESCAPE. INDE2 OCT 176 ALTERNATE ESCAPE CHAR. MCCN$ NOP INPUT PATTERN LOCATION FOR INDEF SEARCH * * TAB PERFORMS THE TAB OPERATION TAB NOP CLA RESET OUTPUT STA OCCNT CHARACTER COUNTER AND STA CNTRL NON-CONTROL CHARACTER COUNTER LDA TABUF RESET STA TBPNT TAB POINTER TAB1 JSB ECH GET NEXT COMMAND CHARACTER JMP TAB,I END OF COMMAND CPA TABCR TAB CHARACTER ? JMP TBFND YES, GO TO TAB FOUND CPA INDE2 ALTERNATE ESCAPE? LDA INDEF YES REPLACE WITH STD. ASCII. LDB A IS CHARACTER CMB CONTROL ADB B40 CHARACTER SSB IF YES DO NOT INCREMENT ISZ CNTRL NON-CONTROL CHARACTER COUNTER JSB OUTCR NO, OUTPUT CHARACTER JMP TAB1 TBFND CCB SET SPACE COUNTER STB CNT1 TO -1 LDB TBPNT,I TAB POINTER SZB,RSS ZERO? JMP SPACE YES, OUTPUT SPACE ISZ TBPNT BUMP TAB POINTER ADDRESS ADB CNTRL PAST SSB,RSS TAB? JMP TBFND+2 YES, GET NEXT TAB STB CNT1 STORE SPACE COUNTER SPACE LDA TBFIL LOAD SPACE JSB OUTCR OUTPUT SPACE ISZ CNTRL BUMP NON-CONTROL CHAR. CNTR. ISZ CNT1 LAST SPACE? JMP SPACE NO, CONTINUE SPACING JMP TAB1 GET NEXT CHARACTER * * SWPET SWAPS EBUFF AND TBUFF SWPET NOP USED AS TEMP LDA TBUFF SWAP LDB EBUFF EBUFF STA EBUFF AND STB TBUFF TBUFF LDA OCCNT STORE OUTPUT CHARACTER STA ELNG LENGTH IN COMMAND LENGTH CLB RESET COMMAND STB ECCNT AND OUTPUT  STB OCCNT CHARACTER POINTERS JMP SWPET,I SPC 1 ./W JSB CHKN CHECK PARAMETERS JSB NUMIN FETCH SZA START OF ADA M1 WINDOW STA WIND1 POINTER JSB NUMIN FETCH CMA,INA,SZA,RSS END OF LDA MAXIN WINDOW STA WIND2 POINTER JMP NODE1 GET NEXT COMMAND SPC 1 WIND1 NOP WIND2 DEC -150 SPC 1 CHKN NOP NPARA JSB NUMIN FETCH NEXT PARAM LDA ELNG IF END OF COMMAND CPA ECCNT THEN, ALL PARAMETERS CLA,INA,RSS WERE NUMERIC JMP NPARA ELSE, FETCH NEXT PARAM STA ECCNT RESET COUNT AND RETURN JMP CHKN,I * ./T JSB ECH STEP PAST TAB CHAR. JMP ./T1 NONE, SO DISABLE TAB JSB CHKN OTHERWISE CHECK PARAMETERS JSB ECH GET TAB CHARACTER ./T1 CCA SET TAB CHARATER TO -1 TO DISABLE STA TABCR STORE TAB CHARACTER LDA TABUF RESET TAB ADDRESS STA TBPNT POINTER LDA M10 SET COUNTER STA CNT1 TO -10 LDA ECCNT IF ONLY TAB CHARACTER CPA ELNG GIVEN, THEN RETURN JMP NODE1 WITH TABS UNCHANGED NXTNM JSB NUMIN GET NEXT NUMBER CMA,INA,SZA FIRST NUMBER ZERO? INA NO, INCREMENT IT STA TBPNT,I STORE TAB NUMBER ISZ TBPNT BUMP POINTER ISZ CNT1 LAST TAB? JMP NXTNM NO, CONTINUE JMP NODE1 YES, GET NEXT COMMAND TABUF DEF TAB0 TABCR OCT 73 DEFAULT TAB CHARACTER = ";" TBPNT NOP B54 OCT 54 "," * * TR TRANSFERS CURRENT SOURCE LINE TO DEST. AND GETS NEXT LINE TR NOP LDB SLNG IF AT SSB EOF, JMP TR,I RETURN LDB XIDT CHECK FOR A BREAK ADB .20 REQUEST BY EXAMINING BIT 12 LDA B,I OF ID SEGMENT WORD 21. AND BIT12 IF BREAK REQUEST IS PRESENT, SZA  STOP WHAT IS GOING ON. JMP BREAK LDB TRFLG TRANSFER RECORD TO SZB DESTINATION FILE? JSB O/PSB YES, OUTPUT RECORD LDB LSTFG LIST CURRENT SZB RECORD? JSB LSTSB YES, PERFORM LIST JSB I/PSB GET NEXT RECORD JMP TR,I SPC 1 .20 DEC 20 BIT12 OCT 10000 SPC 1 BREAK JSB $LIBR NOP LDA B,I GET ID SEGMENT WORD 21 AGAIN XOR BIT12 ZERO ONLY BIT 12 STA B,I JSB $LIBX RESTORE INTERRUPT NOW THAT ID DEF *+1 WORD IS SAFE. DEF DISPL DISPLAY PENDING LINE. SPC 1 ./^ JSB NUMIN GET LINES TO SUBTRACT. LDB T#REM CHECK # DEST REC >65K SZB AND IGNORE COMMAND JMP ERR IF SO. LDB T#REC CURRENT DESTINATION LINE CMB,SSB,RSS IF > 32K,IGNORE JMP ERR COMMAND. SZA,RSS NULL _ 1 INA ADA B SSA,RSS IF OFF THE TOP END, JMP ERR IGNORE COMMAND. STA COUNT JMP FNUM3 GO TO NEW LINE. SPC 1 NUMIN NOP JSB PARAM FETCH NEXT INPUT PARAMETER JMP ERR IF NEG. OR ASCII, ERROR!!! JMP NUMIN,I ELSE RETURN SKP * PARAM FETCHES ONE WORD PARAMETERS SEPARATED BY COLONS OR COMMAS SPC 1 PARAM NOP CLB RESET STB NUM1 NUMBER STB NUM10 ACCUMULATORS STB NEGFL AND NEGATIVE FLAG JSB NXCHR FETCH FIRST CHAR JMP ENDPR NULL PARAM, END JSB ASCII IF CHARACTER IS NON-NUMERIC JMP CHAR GO TO ASCII PARAM. ROUTINE NUMN1 ADA NUM10 ADD NUMBER TO PREVIOUS TOTAL SSA OVERFLOW ENCOUNTERED JMP ERR YES, ERROR IN PARAM. STA NUM1 SAVE NEW TOTAL MPY .10 COMPUTE NEXT PARTIAL SUM SZB,RSS IF OVERFLOW FROM SSA MULTIPY, SET PARTIAL TO VALUE WHICH LDA M10 EWILL CAUSE OVERFLOW WITH NEXT CHAR. STA NUM10 SAVE PARTIAL SUM PARM1 JSB NXCHR FETCH NEXT CHARACTER JMP ENDPR LAST CHAR.? GO TO END JSB ASCII ASCII TO NUMERIC JMP ERR NON-NUMERIC, GO TO ERROR!!! JMP NUMN1 GO TO TOTALIZE SPC 1 ENDPR LDA NUM1 LOAD TOTAL LDB NEGFL IF NEGATIVE SZB FLAG IS SET CMA,INA,RSS COMPLEMENT TOTAL, SKIP ISZ ISZ PARAM BUMP ADDRESS FOR POS. NUMBER JMP PARAM,I RETURN SPC 1 CHAR ISZ NEGFL BUMP NEGATIVE FLAG LDA COMND FETCH FIRST CHARACTER CPA MINUS IF MINUS SIGN JMP PARM1 COMPUTE NUMBER ALF,ALF LEFT JUSTIFY IOR B40 BLANK FILL STA NUM1 AND SAVE JSB NXCHR FETCH NEXT CHARACTER JMP ENDCR LAST CHARACTER RETURN XOR NUM1 INSERT LAST CHARACTER XOR B40 IN LOWER BYTE OF PARAM STA NUM1 AND SAVE JSB NXCHR SEARCH FOR RSS NEXT DELIMITER JMP *-2 OR END ENDCR LDA NUM1 LOAD PARAMETER JMP PARAM,I AND RETURN SPC 1 ASCII NOP STA COMND SAVE CHARACTER ADA M58 GREATER THAN SSA,RSS "9" ? JMP ASCII,I YES, RETURN ADA .10 LESS THAN SSA,RSS "0" ? ISZ ASCII NO, BUMP RETURN ADDRESS JMP ASCII,I SPC 1 NXCHR NOP FCR1 JSB ECH FETCH NEXT COMMAND CHAR. JMP NXCHR,I NO MORE CHARS.? RETURN CPA B40 IGNORE ALL JMP FCR1 SPACES CPA B54 IF EITHER A JMP NXCHR,I COMMA OR CPA ":" A COLON IS JMP NXCHR,I FOUND, RETURN ISZ NXCHR BUMP RETURN ADDRESS JMP NXCHR,I SPC 1 ":" OCT 72 COUNT NOP MATCH NOP ALSO NUM1 NOP ALSO NUM10 NOP ALSO UNCON NOP * * * CXT NOP THIS ROUTINE DOES ALL THE CLA MATCHING IN THE SOURCE BUFFER STA OCCNT AND REPLACEMENT IN THE STA XCCNT DESTINATION BUFFER FOR STA YCCNT EXCHANGE OPERATIONS. STA SCCNT LDB UNCON SZB JMP CXTUC STA BWIND RESET WINDOW BIAS STA MATCH AND MATCH FLAG. LDA WIND1 START SEARCH AT CXT1 STA SCCNT BEGINNING OF WINDOW CMA,INA IF BEYOND ADA SLNG END OF SSA RECORD JMP CXT,I RETURN CP1 JSB SCH FETCH NEXT SOURCE CHAR. JMP CXT,I END OF SOURCE, RETURN CPA FCHAR EQUAL TO 1ST CHAR. OF PATTERN? RSS JMP CP1 NO, GO LOOK AT NEXT CHAR. LDA SCCNT YES, SAVE PRESENT STA SCCN$ SOURCE POSITION ADA BWIND BEYOND ADA WIND2 UPPER BOUND CMA,SSA,INA,SZA OF WINDOW? JMP CXT,I YES, PATTERN NOT FOUND CLA,INA STA XCCNT START XCH WITH 2ND CHAR. SPC 1 CPNXT JSB XCH FETCH NEXT PATTERN CHAR. JMP XFND END OF PATTERN - MATCH!!! STA T1 SAVE PATTERN CHAR. JSB SCH FETCH NEXT SOURCE CHAR. JMP CXT,I END OF SOURCE, NO MATCH CPA T1 CHARACTER MATCH? JMP CPNXT YES, CONTINUE COMPARE LDA SCCN$ NO, BACK UP AND JMP CXT1 CONTINUE SEARCH SPC 1 XFND LDA XLIST SET LIST STA MATCH FLAG LDA SCCNT SAVE CURRENT STA T1 POSITION IN SOURCE CLA RESET STA SCCNT SOURCE CHARACTER COUNTER STA OCCNT OUTPUT CHARACTER COUNTER STA YCCNT REPLACE CHARACTER COUNTER SPC 1 LDA SCCN$ MOVE CMA,INA CHARACTERS INA,SZA,RSS PRECEEDING JMP RPC2 STA T2 MATCH RPC1 JSB SCH CHARACTERS HLT 77B IN JSB OUTCR SOURCE ISZ T2 LINcE JMP RPC1 TO OUTPUT SPC 1 RPC2 JSB YCH MOVE JMP RPC3 REPLACEMENT CHARACTERS JSB OUTCR TO OUTPUT JMP RPC2 SPC 1 RPC3 LDA OCCNT SAVE POSITION STA T2 FOR CONTINUATION OF SEARCH SPC 1 LDA T1 RESET SOURCE CHAR. POINTER STA SCCNT TO REMAINDER OF SOURCE RECORD CPA SLNG IF AT END OF JMP ENDCX RECORD, SEARCH FINISHED RPC4 JSB SCH MOVE REMAINDER JMP ENDRP OF SOURCE LINE JSB OUTCR TO OUTPUT JMP RPC4 SPC 1 ENDRP JSB ./R$ REPLACE OLD SOURCE LINE LDA YLNG COMPUTE CMA,INA BIAS FOR ADA XLNG UPPER BOUND ADA BWIND OF WINDOW STA BWIND LDA T2 RESTORE POSITION AND JMP CXT1 CONTINUE SEARCH SPC 1 ENDCX JSB ./R$ REPLACE LINE JMP CXT,I AND RETURN SPC 1 * CODE FOR UNCONDITIONAL REPLACE. SPC 1 CXTUC LDA XLIST TO LIST OR NOT STA MATCH TO LIST? LDA WIND1 CMA,INA,SZA,RSS JMP CXTU2 STA ASCII CXTU1 JSB SCH MOVE SOURCE CHARACTERS LDA B40 PRECEEDING WINDOW JSB OUTCR TO OUTPUT. ISZ ASCII JMP CXTU1 CXTU2 JSB XCH PASS OVER DUMMY SEARCH JMP CXTU3 PATTERN. JSB SCH NOP JMP CXTU2 SPC 1 CXTU3 JSB YCH MOVE REPLACEMENT CHARACTERS JMP CXTU4 TO OUTPUT. JSB OUTCR JMP CXTU3 SPC 1 CXTU4 JSB SCH MOVE REMAINDER OF RECORD JMP ENDCX TO OUTPUT JSB OUTCR JMP CXTU4 SPC 1 SCCN$ NOP BWIND NOP FCHAR NOP XCCNT NOP YCCNT NOP XLNG NOP YLNG NOP YOFFS NOP * * "XCH" FETCHES NEXT CHARACTER FROM SEARCH PATTERN XCH NOP LDA XCCNT CPA XLNG JMP XCH,I ISZ XCCNT ISZ XCH INA WATCH OUT FOR THIS ONE CLE,ERA xe ADA XYBUF LDA A,I SEZ,RSS ALF,ALF AND LBYTE JMP XCH,I * * "YCH" FETCHES NEXT CHARACTER FROM REPLACEMENT PATTERN YCH NOP LDA YCCNT CPA YLNG JMP YCH,I ISZ YCCNT ISZ YCH ADA YOFFS CLE,ERA ADA XYBUF LDA A,I SEZ,RSS ALF,ALF AND LBYTE JMP YCH,I * * "OUTCR" OUTPUTS ONE CHARACTER TO TBUFF OUTCR NOP LDB OCCNT CPB MAXOP JMP OUTCR,I CLE,ERB ADB TBUFF SEZ,RSS ALF,SLA,ALF XOR B,I XOR B40 STA B,I ISZ OCCNT JMP OUTCR,I * DLMTR OCT 57 DEFAULT DELIMITER IS "/" .6400 OCT 6400 * DLMST STA DLMTR IOR .6400 SET UP PROMPT STA / CHARACTER JMP NODE1 * * ./U CLA ./V CCB,RSS ./Z CLA IF "Z" RESET LIST FLAG ./X STA XLIST IF "X" OR "Y" SET FLAG STB UNCON JSB ECH FETCH 1ST PATTERN CHARACTER JMP XSET1 NO MORE CHARACTERS SO SET EXFLG LDB ECCNT LAST CHARACTER CPB ELNG IN COMMAND? JMP DLMST YES, GO CHANGE DELIMITER CLB STB XLNG INITIALIZE PATTERN LENGTH CNTR CPA DLMTR IF NULL PATTERN CHARACTER JMP ERX CHECK FOR ERROR STA FCHAR SAVE 1ST CHAR. IN PATTERN XSET2 JSB ECH FETCH NEXT CHARACTER JMP ERR NO DELIMITERS FOUND, SO ERROR ISZ XLNG INCREMENT PATTERN LENGTH CPA DLMTR DELIMITER? CLA,RSS JMP XSET2 NO, CONTINUE TO SEARCH XSET4 LDA XLNG STORE POSITION ADA .2 OF REPLACEMENT STA YOFFS PATTERN CMA,INA COMPUTE AND ADA ELNG STORE REPLACEMENT STA YLNG PATTERN LENGTH LDA EBUFF SWAP LDB XYBUF EBUFF STB EBUFF AND STA XYBUF XYBUF XSET1 CLA,INA SET EXCHANGE FLAG STA EXFLG LDB COMND LOAD COMMAND CHARACTER CPB "G" PENDING LINE EXCHANGE? JMP ./G YES - GO DO IT CPB "Y" IF "Y" COMMAND RSS PERFORM SEARCH JMP NODE2 ELSE, FETCH NEXT COMMAND JSB TR MOVE PENDING LINE SPC 1 * PRECEDE "X" PATTERN BY INDEFINITE CHARACTER AND USE AS "F" * PATTERN CLA RESET STA XCCNT XCH AND STA OCCNT OUTCR CHARACTER COUNTERS STA EXFLG AND EXCHANGE FLAG LDA DLMTR MAKE INDEFINITE CHAR. 1ST IN PATTERN XSET3 JSB OUTCR OUTPUT CHARACTER JSB XCH FETCH NEXT PATTERN CHARACTER RSS NO MORE CHARACTERS JMP XSET3 GO TO ADD CHAR. TO PATTERN JSB SWPET SWAP OUTPUT BUFF WITH COMND BUFF JMP COMP2 GO TO SEARCH ROUTINE SPC 1 ERX LDB UNCON NULL PATTERN IS OK FOR A U SZB,RSS OR V OPERATION. JMP ERR BUT AN INPUT ERROR FOR X,Y,Z. JMP XSET4 * ./G JSB CXT PERFORM EXCHANGE JMP DISPL THEN DISPLAY LINE XYBUF DEF XYBF0 CHANGES. POINTS TO CURRENT EXCHANGE * BUFFER. TBUFF DEF NBUF0 CHANGES POINTS TO CURRENT CONSOLE * OUTPUT BUFFER. XLIST NOP * SKP O/PSB NOP LDA EXFLG PATTERN REPLACEMENT SZA,RSS FLAG SET? JMP OPSB2 NO, MOVE CURRENT SOURCE LINE JSB CXT YES, PERFORM REPLACEMENT LDA MATCH LIST PATTERN SZA,RSS MATCH? JMP OPSB1 NO LDA LSTFG THIS PREVENTS DOUBLE LIST SZA,RSS WHEN PATTERN MATCH OCCURS JSB LSTSB LIST NEW LINE OPSB1 LDA SLNG IF RECORD HAS BEEN REDUCED SZA,RSS TO ZERO LENGTH, DON'T JMP O/PSB,I OUTPUT TO DEST. OPSB2 LDA SLNG GET CURRENT # OF CHARS. LDB SBUFP AND LOCATION OF SOURCE LINE JSB DOUTP CALL OUTPUT ROUTINE JMP O/PSB,I * )  * O/PEB LDA SLNG IF NOT AT SSA,RSS EOF THEN JSB O/PSB OUTPUT CURRENT LINE JSB TAB TAB COMMAND LINE ./R JSB ./R$ PERFORM REPLACEMENT ISZ COMND IF P COMMAND SKIP JMP NODE1 GET NEXT COMMAND ISZ CFLG IF C COMMAND SKIP JMP DISPL GO DISPLAY THE NEW LINE CCA SET LIST COUNT TO STA COUNT ONE LINE. JMP ./CC GO FINISH THE C COMMAND * * ./R$ REPLACES CURRENT LINE ON INPUT BUFFER WITH LINE IN COMMAND BUFFER ./R$ NOP LDA SLNG IF AT EOF SSA INSERT NEW LINE BEFORE LDA M2 EOF AND MAKE IT PENDING SLA,ARS COMPUTE ADDRESS INA OF NEXT ADA SBUFP SOURCE RECORD LDB OCCNT REPLACE CURRENT RECORD LENGTH STB SLNG WITH COMMAND RECORD LENGTH CMB,INB CONVERT # CHARS TO BRS MINUS # OF WORDS STB CNT1 STORE COMPLEMENT IN COUNTER ADA B ADD -(# OF WORDS) TO NEXT RECORD ADRS STA SBUFP TO GET NEW SOURCE FILE POINTER SZB,RSS ZERO LENGTH RECORD? JMP ./R$,I RETURN STA P1 LDB TBUFF STARTING ADDRESS OF COMMAND RECORD CTOS LDA B,I MOVE STA P1,I COMMAND INB RECORD ISZ P1 TO ISZ CNT1 SOURCE JMP CTOS FILE JMP ./R$,I SPC 1 ./I LDA OCCNT LOAD RECORD LENGTH LDB TBUFF LOAD RECORD LOCATION JSB DOUTP OUTPUT RECORD JMP NODE1 * * * ./Q ALLOWS USE OF 264X TERMINAL EDIT INTRINSICS TO REPLACE PENDING * LINE. * ./Q LDA DVTY TEST FOR DRIVER TYPE 07B CPA DVR07 RSS YES, GO ON JMP ERR NO, ERROR JSB LSTSB LIST THE PENDING LINE LDA SLNG CHECK FOR LINE>77 CH. CMA,INA ADA .77 SSA JMP ./Q1 YES, MOVE CURSOR UP TWO LINES JSB PRINT POSITION CURSOR DEF ./Q2 AND SET LEFT DEC -9 DELIMITER FOR INTRINSIC EDITING. OCT 015520 < P > OCT 015501 < A > OCT 020033 < > OCT 057435 <137> OCT 057400 <137> * ./Q1 JSB PRINT SAME AS ABOVE BUT UP TWO DEF ./Q2 DEC -11 OCT 015520 < P > OCT 015501 < A > OCT 015501 < A > OCT 020033 < > OCT 057435 <137> OCT 057400 <137> * ./Q2 LDA NOPRN SAVE NON-PRINTING FLAG STA SCH TEMORARALY CCA SET CONDITIONS FOR INPUT ONLY, STA NOPRN OF THE MODIFIED LINE. STA COMND SET FOR DISPLAY OF THE MODIFIED LINE. JSB TTYIP REQUEST INPUT SZB,RSS JMP ZER ZERO LTH. READ JSB TAB LDA SCH RESTORE NON-PRINTING FLAG. STA NOPRN JSB PRINT MAKE SURE INSERT IS OFF. DEF ./Q3 DEC -3 ASC 2,R_ ./Q3 JMP ./R COMPLETE THE REPLACEMENT OPERATION. ZER CLA RESET COMMAND STA COMND LDA SCH RESTORE NON-PRINTING FLAG STA NOPRN JMP NODE1 * .77 DEC 77 * * * * SCH FETCHES NEXT SOURCE CHARACTER * SCH NOP ENTER WITH CHARACTER COUNT LDA SCCNT SCCNT AND SOURCE BUFFER START CPA SLNG ADDRESS IN SBUFP. JMP SCH,I ISZ SCCNT IF AT END OF SOURCE RECORD, ISZ SCH EXIT TO P+1. CLE,ERA ADA SBUFP IF NOT AT END OF SOURCE RECORD, LDA A,I EXIT TO P+2 WITH ASCII OF NEXT SEZ,RSS CHARACTER IN LOW BYTE OF A. ALF,ALF AND LBYTE JMP SCH,I * * "MCH" FETCHES NEXT FIND FIELD CHARACTER MCH NOP LDA MCCNT CPA MLNG JMP MCH,I ISZ MCCNT ISZ MCH CLE,ERA ADA MBUFF LDA A,I SEZ,RSS HFB ALF,ALF AND LBYTE JMP MCH,I * SKP * "ECH" FETCHES NEXT COMMAND CHARACTER * ECH NOP LDA ECCNT CPA ELNG JMP ECH,I ISZ ECCNT ISZ ECH CLE,ERA ADA EBUFF LDA A,I SEZ,RSS ALF,ALF AND LBYTE JMP ECH,I * * "LCASE" CONVERTS LOWER-CASE COMMAND CHAR. TO UPPER CASE ASCII. * LCASE NOP ENTER WITH CHARACTER IN . STA MCH SAVE, TEMPORARILY. ADA N140 CHECK FOR LOWER-CASE ASCII. SSA >140B? JMP LCXIT NO. NOT LOWER-CASE. ADA N32 YES. CHECK FOR ALPHA LOWER-CASE. SSA,RSS <173B? JMP LCXIT NO. RETURN. LDA B40 YES. CONVERT TO XOR MCH UPPER-CASE ALPHA ASCII, JMP LCASE,I AND RETURN WITH =CHARACTER. LCXIT LDA MCH RETRIEVE THE ORIGINAL CHARACTER, JMP LCASE,I AND RETURN. * * / OCT 6457,3537 "CR / BELL _" SPC 1 ./CG EQU * IFZ JSB REMCK IF COMMUNICATING REMOTELY, THEN JMP NODE1 PROMPT CHANGE IS INAPPROPRIATE. XIF LDA /+1 ALF,ALF STA /+1 REVERSE ORDER OF _ AND BELL. CLA,INA XOR LN SHORTEN OR LENGTHEN STA LN MESSAGE LENGTH. JMP NODE1 SKP TTYIP NOP IFZ JSB REMCK TALKING REMOTELY? JMP DOCOM YES! XIF LDA NOPRN IF INPUT IS SZA NON-INTERACTIVE, THEN JMP TTYIN IGNORE THE PROMPT. JSB EXEC PRINT DEF *+5 PROMPT DEF .2.I CHARACTER DEF TTYLU DEF / DEF LN ALTERNATE -4 & -3. NOP 3H SPC 1 TTYIN JSB REIO INPUT DEF *+5 COMMAND DEF .1 FROM DEF TTYLU TELETYPE EBUFF DEF EBUF0 CHANGES, POINTS TO CURRENT COMMAND DEF MAXIN * EBRET STB ELNG CLA RESET STA ECCNT ALL STA SCCNT CHARACTER STA OCCNT COUNTERS JMP TTYIP,I IFZ DOCOM CLA PREPARE FOR NON-INTERACTIVE INPUT. CPA NOPRN IF DEVICE IS INTERACTIVE, THEN LDA LN GET THE PROMPT LENGTH. STA PRMTL INITIALIZE PROMPT LENGTH. SZA CHECK FOR A ZERO LTH. JMP INWR NO, GO ON LDA INLU YES, REMOVE INTERACTIVE BIT XOR BIT11 STA INLU INWR JSB DEXEC DO INTERACTIVE REMOTE READ DEF *+8 DEF NODE DEF RCODE DEF INLU DEF EBUFF,I DEF MAXIN DEF / OPT.PARAMS=PROMPT CHARS DEF PRMTL AND PROMPT LENGTH. JMP ./A0 ABORTIVE COMM. ERROR LDA INLU MAKE SURE INTERATIVE BIT IS SET IOR BIT11 STA INLU JMP EBRET * * RETURN+1 IF CRT IS REMOTE, RETURN+2 IF NOT REMCK NOP LDB NODE CPB M1 ISZ REMCK JMP REMCK,I XIF CFLG NOP ALSO SBUFP NOP POINT TO CURRENT LOC IN SORC BUFFER SLNG NOP LENGTH OF SOURCE RECORD (EVEN) ELNG NOP LBYTE OCT 377 LOWER BYTE MASK LN OCT -4 ALTERN. WITH -3 AFTER CONTROL G. NOPRN NOP SUPPRESS PRINTING IF #0. SCCNT NOP .10K DEC 10000 .1000 DEC 1000 .100 DEC 100 IFZ PRMTL NOP INTERACTIVE PROMPT LENGTH. RPRMT OCT 6412,27537 REMOTE PROMPT: "CR LF / _" BIT11 OCT 4000 INLU NOP NODE NOP INTFL NOP INTERACTIVE WRITE-READ FLAG. WRLEN NOP WRITE LENGTH (-CHARS) FOR WRITE-READ. TEMPZ EQU REMCK TEMPORARY. SVTMP NOP TEMPORARY STORAGE FOR NOP OVERLAYED WORDS. * * INTERACTIVE REMOTE W,eRITE-READ ROUTINE: DISPLAY LINE & READ COMMAND. * INTER NOP STA BUFAD CONFIGURE WRITE-BUFFER ADDRESS IN CALL. STB WRLEN SAVE NEG. CHAR. COUNT, TEMPORARILY. BRS COMPUTE BUFFER LENGTH CMB,INB IN WORDS. ADA B FORM ADDRESS OF NEXT WORD, STA TEMPZ IMMEDIATELY FOLLOWING WRITE BUFFER. DLD TEMPZ,I GET NEXT TWO WORDS-AFTER BUFFER- DST SVTMP AND SAVE, TEMPORARILY. DLD RPRMT OVERLAY TWO WORDS FOLLOWING WRITE BUFFER DST TEMPZ,I WITH THE COMMAND-INPUT PROMPT CHARS. LDB WRLEN GET THE ORIGINAL NEG. CHARACTER COUNT. SLB IF THE COUNT WAS ODD, ADB M1 ADD ONE FOR THE WORD BOUNDRY. ADB LN ADD THE LENGTH OF PROMPT (-CHARS), STB WRLEN AND CONFIGURE CALL WITH TOTAL LENGTH. * JSB DEXEC CALL REMOTE 'EXEC' ROUTINE. DEF ERABT ERROR-RETURN ADDRESS. DEF NODE DESTINATION NODE. DEF RCODE READ REQUEST--NO ABORT. DEF INLU REMOTE TTY LU W/INTERACTIVE BIT(#11). DEF EBUFF,I INPUT BUFFER ADDRESS. DEF MAXIN MAXIMUM NO. OF INPUT CHARACTERS. BUFAD DEF * CONFIGURED WRITE BUFFER ADDRESS. DEF WRLEN CONFIGURED WRITE BUFFER LENGTH. ERABT JMP ./A0 ** COMMUNICATION ERROR: ABORT!! * STB ELNG SAVE READ LENGTH (+CHARS). DLD SVTMP RESTORE THE DST TEMPZ,I OVERLAYED BUFFER CHARACTERS. CLA RESET STA ECCNT ALL STA SCCNT CHARACTER STA OCCNT COUNTERS. LDB ELNG RESTORE = TRANSMISSION LOG. JMP INTER,I RETURN. XIF SKP ./N JSB ECH ANY OTHER CHARACTER? JMP NP NO. PRINT SOURCE LINE. JSB LCASE CONVERT LOWER CASE CHAR.--IF NECESSARY. CPA "D" IF N IS FOLLOWED BY D, RSS PRINT DESTINATION LINE. JMP ERR ELSE ASK AGAIN. DLD T#REC U JMP CVX NP DLD LINES FETCH CURRENT LINE NUMBER CVX JSB DEC CONVERT NUMBER TO ASCII IFZ JSB REMCK IF COMMUNICATING REMOTELY, ISZ INTFL SET THE INTERACTIVE FLAG. XIF LDB OCCNT CALL LDA TBUFF PRINT JSB LST ROUTINE JMP NODE1 PROCESS THE NEXT COMMAND SPC 1 ./H JSB ECH JMP HP JSB LCASE CPA "L" RSS JMP ERR JSB PRINT DEF NODE1 DEC 41 ASC 21, ''''/''''1''''/''''2''''/''''3''''/''''4 ASC 20,''''/''''5''''/''''6''''/''''7''''/''''8 HP LDA SLNG CLB JMP CVX SPC 1 ./S CLB LDA T#SEC COMPUTE NUMBER OF WORDS ASL 6 ALREADY STORED ON DISC, STA DEC SAVE, THEN COMPUTE LDA DBUF$ # OF WORDS IN DEST CMA,INA BUFFER. ADA DBUFP CLE ADA DEC ADD BACK LSB'S OF MPY SEZ AND BUMP B IF E SET. INB JMP CVX SPC 1 DEC NOP CLE,SZB,RSS >65K? JMP SNGLP DIV .10K WORK ON EXCESS FIRST STB I/PSB SAVE REMAINDER FOR NEXT PASS. CLB JSB DEC4 LDA I/PSB CCE SKIP DIV .10K THIS TIME SNGLP JSB DEC4 JMP DEC,I SPC 1 DEC4 NOP SEZ IF NUMBER >65K, SKIP JMP THOU FIRST DIVIDE, PASS 2. DIV .10K OUTPUT TEN THOUSANDS JSB CONVT DIGIT THOU DIV .1000 OUTPUT THOUSANDS JSB CONVT DIGIT DIV .100 OUTPUT HUNDREDS JSB CONVT DIGIT DIV .10 OUTPUT TENS JSB CONVT DIGIT AND JSB CONVT ONES DIGIT JMP DEC4,I SPC 1 CONVT NOP STB NT SAVE REMAINDER SZA IF JMP CONV1 LEADING CPA OCCNT ZERO JMP CONV2 DO NOT OUTPUT IT CONV1 IOR B60 CONVERT NUMBER TO ASCII JSB OUTCR MOVE CHARA)CTER TO BUFFER CONV2 CLB SET REGISTERS UP LDA NT FOR NEXT DIVIDE JMP CONVT,I * * I/PSB FETCHES NEXT RECORD FROM SOURCE BUFFER * RETURNS WITH AN EOF FLAG, I.E. B=-1 EOF FOUND, B=0 NO EOF I/PSB NOP JSB DINP CLB STB NOLSF RESET LS FLAG. LDB SLNG LOAD RECORD LENGTH SSB IF LENGTH < 0, RETURN WITH JMP I/PSB,I EOF FLAG SET IN REGISTER CLB CLEAR EOF FLAG STB SCCNT RESET SOURCE CHARACTER CNTR JMP I/PSB,I * DISPL CLB RESET STB EXFLG EXCHANGE FLAG LDA TTYLU AND THE STA LSTLU LIST LU IFZ JSB REMCK IF COMMUNICATING REMOTELY, ISZ INTFL SET THE INTERACTIVE FLAG. XIF JSB LSTSB LIST CURRENT LINE JMP NODE1 PROCESS THE NEXT COMMAND. SPC 1 ./O JSB O/PSB OUTPUT PENDING LINE, THEN LDA DVTY IF DRIVER TYPE IS 07B GO TO "Q" CPA DVR07 COMMAND. JMP ./Q RSS OTHERWISE USE THE P COMMAND. SPC 2 ./C STB CFLG SET THE "C"FLAG TO -1. * ./P LDA DLMTR USE DLMTR FOR TAB STA TBFIL JSB TAB TAB THE LINE LDA SLNG IF AT EOF SSA PRINT EOF AND GET JMP ERR NEXT COMMAND. JSB SWPET SET UP INPUT BUFFER CCA SET LIST FLAG STA COMND FOR ./R MODE STB PMODE INITIAL MODE IS REPLACE PNXT JSB ECH GET A CHARACTER JMP PFIN IF EOL THEN EXIT CLB SET B FOR MODE CHECK CPA %R CONTROL R? JMP MODE YES GO RESET MODE INB INSERT MODE? CPA %I JMP MODE YES GO RESET CPA %S ALTERNATE COMMAND JMP MODE INB SET FOR DELETE MODE CPA %C DELETE MODE? JMP MODE YES GO RESET CPA %T TRUNCATE LINE MODE? JMP ./R YES GO WRAP UP T LDB PMODE GET THE CURRENT MODE CPB ZERO IF REPLACE JMP PRPL GO REPLACE CPB .1 IF INSERT JMP PINS GO INSERT CPB .2 IF DELETE JMP PDLS GO DELETE SPC 2 PRPL CPA DLMTR IS IT REALLY COPY JMP PCOPY YES GO COPY JSB OUTCR OUTPUT THE NEW CHARACTER SPC 1 PDLS JSB SCH GET THE OLD CHARACTER NOP IGNOR EOL JMP PNXT BURN THE OLD AND GO GET THE NEXT SPC 1 PCOPY JSB SCH GET THE CURRENT CHARACTER LDA B40 USE BLANK IF UNDEFINED JMP PINS2 SPC 1 PINS CPA DLMTR INSERT SPACES FOR LDA B40 DELIMITER PINS2 JSB OUTCR SEND IT OUT JMP PNXT GO PROCESS THE NEXT CHAR. SPC 1 PFIN JSB SCH MOVE THE REST JMP ./R OF THE LINE JSB OUTCR TO THE OUTPUT JMP PFIN BUFFER SPC 1 %R OCT 22 CONTROL R %I OCT 11 CONTROL I %C OCT 3 CONTROL C %S OCT 23 CONTROL S %T OCT 24 CONTROL T PMODE NOP * * SPSP ASC 1, MSPSP DEF SPSP * LST NOP STA CONVT SAVE TEMPORARILY. CLA PREPARE FOR NON-INTERACTIVE DEVICE. CPA NOPRN IF DEVICE IS INTERACTIVE, JMP LST0 THEN PROCEED TO LIST THE LINE. IFZ STA INTFL CLEAR COMMAND-READ INDICATOR. XIF JMP LST,I NON-INTERACTIVE: RETURN IMMEDIATELY. * LST0 LDA CONVT RETRIEVE . CMB,INB,SZB COMPLEMENT CHARACTER COUNT JMP LST1 CONTINUE IF NOT ZERO LDA MSPSP OTHERWISE OUTPUT SPACES LDB M2 LST1 ADB M2 ADD TWO TO THE CHAR. COUNT STB LSTB2 AND SET IT CCB SUBTRACT ONE ADB A FROM THE BUFFER ADDRESS STB LSTB1 AND SET IT LDA B,I GET THE CURRENT CHAR. STA LSTB3 SAVE IT LDA SPSP NOW SET STA B,I THE FIRST CHARS. TO BLANKS IFZ LDA INTFL IF THE INTERACTIVE SZA FLAG IS SET, JMP LSINT GO SET UP FOR WRITE-READ. XIF SPC 1 JSB DEXEC ***************** DEF LSRTN IFZ DEF NODE XIF DEF .2.I LIST DEF LSTLU RECORD LSTB1 NOP DEF LSTB2 LSRTN JMP ERR LIST ABORT RETURN, GIVE "??" IFZ JMP LSTEX BYPASS WRITE-READ SET UP. SPC 1 LSINT LDA LSTB1 GET BUFFER ADDRESS. LDB LSTB2 GET BUFFER CHARACTER COUNT. JSB INTER WRITE BUFFER & READ COMMAND. XIF LSTEX LDA LSTB3 RESTORE THE STA LSTB1,I OLD WORD. JMP LST,I SPC 1 LSTB2 NOP LSTB3 NOP SPC 1 LSTSB NOP USED AS TEMP LDA SBUFP FETCH RECORD LENGTH LDB SLNG AND LOCATION SSB IF AT EOF JMP EOFPR GO PRINT "EOF" JSB LST PERFORM LIST JMP LSTSB,I * STRK# NOP SOURCE TRACK # SRCLU NOP SOURCE DISK LU NWTRK NOP RETURN OF TRACK FROM DISC ALLOC REQ. DTRK# NOP DESTINATION TRACK # NEWLU NOP RETURN OF LU FROM DISK ALLOC REQ. DSTLU NOP DESTINATION LU DSEC# NOP DESTINATION SECTOR # SSEC# NOP SOURCE SECTOR # .4 OCT 4 RCODE OCT 100001 * * RQST REQUESTS A TRACK FROM SYSTEM RQST NOP LDA RCODE ONE TRACK REQUEST STA RQSTC CODE WITH UNAVAIL. RETURN SPC 1 RQ.TR JSB EXEC ********************************* DEF *+6 DEF .4 REQUEST DEF RQSTC TRACK DEF NWTRK FROM DEF NEWLU SYSTEM DEF DSCTR ************************************ SPC 1 LDA NWTRK WAS THE REQUEST SSA,RSS HONORED? ISZ #TCNT YES, ADD 1 TO OUTSTANDING TRACK COUNT. SSA,RSS WAS A TRACK ALLOCATED? JMP RQST,I YES - RETURN l CLA,INA NO - PRINT MESSAGE STA RQSTC AND REQUEST JSB PRINT TRACK WITH DEF RQ.TR SUSPENSION IF DEC 12 UNAVAILABLE. NAME2 ASC 12,EDITR WAITING FOR TRACKS * #TCNT NOP CURRENT # TRACKS OBTAINED FROM SYSTEM. * SETSO NOP SET UP THE SOURCE ROUTINE LDA LSLUT LOAD LS LU AND TRACK LDB .2 ASSUME LU 2 CLE,ELA SHIFT LU FLAG INTO E ALF,ALF MOVE TRACK TO LOWER BYTE STA STRK# STORE SOURCE TRACK # CLA,SEZ LU = 3 ? INB YES, INCREMENT LU STB SRCLU STORE SOURCE LU # STA #TRAK ZERO THE TRACK-RELEASE COUNT. STA SSEC# RESET SOURCE SECTOR NUMBER CCA INITIALIZE THE STA SNTRF NEW-TRACK FLAG =-1 JMP SETSO,I RETURN SPC 1 * ALCAT SETS SOURCE TRACK AND LU AND REQUESTS A DESTINATION * TRACK FROM SYSTEM. * ALCAT NOP JSB SETSO SET UP THE SOURCE JSB RQST REQUEST TRACK FROM SYSTEM LDA NWTRK STORE NEW STA DTRK# TRACK NUMBER LDB NEWLU STORE STB DSTLU NEW LU ALF,CLE,ALF MOVE TRACK # TO UPPER BYTE SLB LU = 3 ? CCE YES, SET E BIT ERA SHIFT E INTO DESTINATION FILE STA DSTRT LU AND TRACK WORD CLA RESET STA DSEC# DEST. SECTOR POINTER AND STA T#SEC TOTAL # OF DEST. SECTORS AND STA T#REC TOTAL # OF DEST. RECORDS JMP ALCAT,I * P1 NOP P2 NOP DSTRT NOP * EOFND STB SLNG JMP DINP,I * DINP NOP LDA SLNG FETCH RECORD LENGTH SSA,INA AT EOF? JMP DINP,I YES, RETURN ISZ LINES BUMP SOURCE LINE COUNTER JMP *+2 ALLOWING HUGE NUMBER ISZ LINEM (DOUBLE WORD). ARS COMPUTE ADDRESS ADA SBUFP OF NEXT RECORD CPA SB%END IF AT END OF BUFFER JMP DINP3 GO TO INPUT FROM DISC LDB A,I LOAD RECORD LENGTH OF NEXT RECORD INA STORE ADDRESS OF NEXT STA SBUFP RECORD IN INPUT BUFFER SSB IF RECORD LENGTH < 0, JMP EOFND THEN GO TO EOF FOUND BLF,BLF CONVERT BLR TO # OF STB SLNG CHARACTERS AND SAVE ADB MAXIN IF RECORD GREATER CMB,SSB,INB,SZB THAN MAX. LENGTH JMP $$$ER GIVE CORRUPT FILE ERROR LDB SLNG FETCH RECORD BRS LENGTH IN WORDS ADB A IF RECORD IS CMB,INB CONTAINED IN ADB SBEND INPUT BUFFER SSB,RSS THEN JMP DINP,I RETURN LDB SLNG FETCH RECORD LENGTH BRS IN WORDS CMB,INB COMPLEMENT FOR LOOP COUNTER STA P1 SET UP ADA MWDC1 POINTERS STA P2 FOR STA SBUFP RECORD MOVE LDA P1 GET SOURCE BEGIN ADDR CMA,INA NEGATE WITH REC SIZE ADA B TO COMPUTE NUMBER INA OF WORDS WHICH ARE ADA LWA PAST LWA SSA,RSS JMP DINP0 NONE, SO (B) IS SIZE CMA,INA ADB A NEG WDS PAST, SUBTR FROM (B) DINP0 SZB,RSS JMP DINP2 GO READ DISC IF 0 TO MOVE SPC 1 DINP1 LDA P1,I MOVE STA P2,I RECORD ISZ P1 RESIDUE ISZ P2 IN FRONT OF INB,SZB INPUT BUFFER JMP DINP1 DINP2 JSB MIN READ BUFFER FROM DISC JMP DINP,I DINP3 JSB SQ JMP DINP,I * SQ NOP JSB MIN FILL INPUT BUFFER FROM DISC LDA SBUF$,I FETCH RECORD LENGTH LDB SBUF$ COMPUTE START OF INB RECORD ADDRESS STB SBUFP AND SAVE ALF,ALF CONVERT RECORD LENGTH ALS WORD TO NUMBER STA SLNG OF CHARACTERS 9#AND SAVE SSA,RSS IF EOF SKIP ADA MAXIN IF RECORD LENGTH GREATER CMA,SSA,INA,SZA THAN MAX ALLOWED JMP $$$ER GIVE CORRUPT FILE ERROR JMP SQ,I * DSCTR NOP DESTINATION SECTORS PER TRACK DNTRF NOP DEST. FILE NEW TRACK FLAG SNTRF NOP SOURCE FILE NEW TRACK FLAG .5 OCT 5 SEC# NOP WDCNT NOP * * * MIN MOVES SOURCE FILE INTO CORE MIN NOP LDA SNTRF READ FROM NEW SSA SOURCE TRACK? ISZ #TRAK YES, BUMP RELEASE TRACK COUNT CLA RESET STA SNTRF NEW TRACK FLAG LDA SSEC# GET NEXT SECTOR POINTER STA SVSSC SAVE THE SOURCE SECTOR. ADA SCT ADD BUFFER SECTOR SIZE CMA LDB SRCLU GET READ LU STB SVSLU SAVE SOURCE LU FOR MERGES. SLB,RSS IF LU = 2 ADA SECT2 USE #SEC FOR LU2 SLB ELSE LU 3 ADA SECT3 WOULD READ CROSS SSA,RSS TRACK BOUNDARY? JMP RDISC NO, GO TO READ CCB SET STB SNTRF NEW TRACK FLAG ADA SCT READ TO END OF CURRENT INA,RSS TRACK, SKIP NEXT INSTRUCTION SPC 1 RDISC LDA SCT LOAD NUMBER OF SECTORS ASL 6 CONVERT SECTORS TO WORDS STA WDCNT STA SVSWC SAVE THE WORD COUNT CMA,INA STORE STA MWDC1 -(WORD COUNT) LDA STRK# STA SVSTR SAVE SOURCE TRACK FOR MERGES. SPC 1 JSB EXEC ************************** DEF *+7 DEF .1 READ DEF SRCLU THE DEF SBUF$,I DISC DEF WDCNT DEF STRK# DEF SSEC# *************************** SPC 1 LDA WDCNT STORE END ADA SBUF$ OF DATA ADDRESS STA SBEND IN SBEND LDA SNTRF SSA NEW TRACK? JMP NTRAK YES, GO TO NEW TRACK PROCESSING LDA SSEC# MOVE ADA SCT SOURCE SECTOR STA SSEC# POINTER JMP MIN,I NTRAK CLA RESET SOURCE STA SSEC# SECTOR POINTER CPA RELS IF RELEASE FLAG IS ZERO JSB RELSR RELEASE SOURCE TRACK CCA MOVE BUFFER END POINTER ADA SBEND SO CODE WORD IS NOT STA SBEND INCLUDED IN SOURCE ISZ MWDC1 INCREMENT -(WORD COUNT) LDA SBEND,I GET CODE WORD AND LBYTE (LAST WORD ON TRACK) STA STRK# AND SET TRACK XOR SBEND,I AND LU POINTERS ALF,ALF TO NEXT TRACK STA SRCLU IN SOURCE JMP MIN,I * * RELSR RELEASES SOURCE TRACK RELSR NOP LDB SRCLU LDA TAT GET TRACK ASSIGNMENT TABLE ADRS CPB .3 LU = 3? ADA TATSD YES, ADD SYSTEM TRACKS TO ADRS ADA STRK# ADD TRACK TO BE RELEASED LDA A,I DOES THIS CPA XIDT "EDITR" RSS OWN TRACK JMP RELSR,I NO, RETURN JSB EXEC YES, RELEASE TRACK DEF *+5 DEF .5 DEF .1 DEF STRK# DEF SRCLU * LDA #TCNT GET OUTSTANDING TRACK COUNT. SZA IF NON-ZERO, ADA M1 SUBTRACT THE ONE JUST RELEASED, STA #TCNT AND UPDATE THE COUNT. JMP RELSR,I RETURN. * .3 OCT 3 SVSSC NOP SVSLU NOP SVSWC NOP SVSTR NOP SKP DOUTP NOP CMA TRUNCATE STA ODDF (ALWAYS -VE) ADA MAXOP OUTPUT CMA,SSA,RSS LENGTH CLA TO MAXOP. ADA MAXOP CPA MAXOP IF RECORD LENGTH=MAXOP JMP ODD? TEST FOR ODD # CHARACTERS. DOUP1 STB P1 SAVE BUFFER ADDRESS SLA,ARS CONVERT # CHARS. TO # WORDS INA ADD ONE WHEN ODD ISZ T#REC BUMP NUMBER OF RECORDS CNTR. JMP *+2 ALLOWING HUGE NUMBER ISZ T#REM (DOUBLE INTEGER) ALF,ALF +MOVE WORD COUNT TO STA DBUFP,I UPPER BYTE AND STORE ALF,ALF COMPUTE LOOP CMA,INA,SZA,RSS COUNTER FOR MOVE. IF = 0 JMP DOUP5 GO TO END BUFR. TEST STA CNT1 ELSE SAVE IT. DOUP2 ISZ DBUFP BUMP DEST. BUFFER POINTER LDB DBUFP CPB DBEND END OF BUFFER? JSB DOUT YES, OUTPUT IT LDA P1,I MOVE NEXT WORD STA DBUFP,I TO OUTPUT BUFFER ISZ P1 BUMP SOURCE ADDRESS ISZ CNT1 LAST WORD IN RECORD? JMP DOUP2 NO, CONTINUE MOVE LDA ODDF IF RECORD LENGTH NOT ODD, SZA JMP DOUP5 GO AWAY NORMALLY. LDA DBUFP,I BUT WITH RECORD LENGTH ODD, AND HBYTE REPLACE THE EVEN CHARACTER IOR TBFIL BEYOND DESIRED LENGTH WITH STA DBUFP,I A BLANK. DOUP5 ISZ DBUFP BUMP DEST. BUFR PNTR. LDB DBUFP CPB DBEND IF AT END OF DEST. BUFFER JSB DOUT OUTPUT BUFFER TO DISC, JMP DOUTP,I ELSE RETURN SPC 1 ODD? SLA,RSS JMP DOUP1 EVEN. NO FIXUP NEEDED. CLA STA ODDF SET TO SHOW ODD. LDA MAXOP RESTORE FOR MORE PROCESSING. JMP DOUP1 SPC 1 HBYTE OCT 177400 MASK FOR HIGH BYTE. ODDF OCT -1 0 MEANS ODD, -VE MEANS EVEN. SKP * DOUT WRITES THE DESTINATION BUFFER ON A SYSTEM-ASSIGNED TRACK. * WHEN THE TRACK WILL BE FILLED BY A WRITE, DOUT REQUESTS A * NEW TRACK, MERGES THE RETURNED LU AND TRACK, AND STORES THE * RESULTING CODE WORD INTO THE LAST WORD OF THE CURRENT TRACK. * THE REST OF THE DESTINATION BUFFER (IF ANY) IS THEN WRITTEN * ON THE NEW DESTINATION TRACK. SPC 2 DOUT NOP CLA RESET NEW STA DNTRF DEST. TRACK FLAG LDA SCT LOAD OF SECTRS TO BE WRITTEN LDB PBFLG PARTIAL BUFFER TO SZB BE WRITTEN? LDA B YES, A_# OF SECTORS PBTRB STA SEC# STORE zNUMBER OF SECTORS OF WRITE ADA DSEC# TRACK CMA BOUNDARY ADA DSCTR CROSSED? SSA,RSS JMP WDISK NO, PERFORM WRITE STA DNTRF SET NEW TRACK FLAG ADA SEC# INA,RSS WDISK LDA SEC# LDB T#SEC ADD NUMBER ADB A OF SECTORS TO STB T#SEC TOTAL NUMBER OF SECTORS ASL 6 CONVERT SECTORS TO WORDS STA WDCNT LDA DNTRF SSA,RSS NEW TRACK? JMP ECALL NO, GO TO EXEC CALL JSB RQST REQUEST NEW TRACK FROM SYSTEM CCB GET ADDRESS ADB DBUF$ OF LAST WORD ADB WDCNT ON TRACK LDA B,I SAVE DISPLACED WORD STA TEMP IN TEMP LDA NEWLU SET UP ALF,ALF AND IOR NWTRK STORE STA B,I CODE WORD INB STORE ADDRESS OF STB RESDU BUFFER RESIDUE SPC 1 ECALL JSB EXEC **************************** DEF *+7 DEF .2 WRITE DESTINATION DEF DSTLU FILE BUFFER DEF DBUF$,I ON DISC DEF WDCNT DEF DTRK# DEF DSEC# ************************ SPC 1 LDB DBUF$ RESET DESTINATION STB DBUFP BUFFER POINTER LDA DNTRF SSA NEW TRACK? JMP NTRK LDA DSEC# COMPUTE ADA SEC# NEXT SECTOR STA DSEC# POINTER JMP DOUT,I SPC 1 NTRK LDB NEWLU STORE STB DSTLU NEW LU LDB NWTRK STORE NEW STB DTRK# TRACK NUMBER CLA RESET NEXT STA DSEC# SECTOR POINTER LDB TEMP MOVE WORD DISPLACED BY CODE STB DBUFP,I WORD TO START OF BUFFER ISZ DBUFP LDA DNTRF CMA,SZA,RSS JMP PBCHK BUFR ENDED ON TRK BOUDARY, CHECK PBFLG ASL 6 CMA,INA MVR LDB RESDU,I MOVE RESIDUE TO START OF BUFFER STB DBUFP,I ISZ RESDU vQNLH ISZ DBUFP INA,SZA JMP MVR PBCHK LDA PBFLG SZA,RSS PARTIAL BUFFER? JMP DOUT,I NO,RETURN LDA DNTRF YES, OUTPUT BUFFER RESIDUE CMA,SZA,RSS COMPL. TO GET SECTR RESID., IF 0 INA INCREMENT FOR WRITE OF CODE WORD CLB STB DNTRF RESET NEW TRACK FLAG JMP PBTRB * RESDU NOP MWDC1 NOP DBUFP NOP POINT TO CURRENT LOC IN DEST BUFFER CNT1 NOP ALSO , T#REC NOP CURRENT # OF REC IN DEST FILE T#REM NOP MOST SIG BITS FOR >65K T#SEC NOP CURRENT # OF SCTRS IN DEST FILE B60 OCT 60 TEMP NOP #TRAK NOP TRACK-RELEASE COUNT. RELS DEC -1 ./EFL NOP PASS1 DEC -1 FIRST PASS FLAG LSTRK NOP LS#TR NOP SKP 2N./K JSB ./B1 RESET TO START OF FILE. ./K0 LDA SLNG RECORD LENGTH, CHARS. LDB MAXOP REQUESTED FIELD WIDTH. CMB,INB ADB A IF > OR = SPECIFIED MAX., SSB,RSS LDA MAXOP SET TO REQUEST MAX. SSA IF EOF, PRINT EOF JMP EOFPR AND GET NEXT COMMAND. SLA DON'T THROW AWAY ODD CHARACTER, INA BUMP COUNT TO EVEN. ARS ./K1 ADA M1 SZA,RSS JMP ./K2 PROCESS THIS RECORD. LDB SBUFP ADB A POINT TO NEXT CHAR. PAIR LDB B,I CPB SPSP IF THEY ARE BOTH BLANKS, JMP ./K1 CONTINUE TO SHORTEN RECORD. ./K2 INA CORRECT TO NEW # OF WORDS. ALS CONVERT TO CHARACTER COUNT. LDB SBUFP JSB DOUTP SEND RECORD TO DEST. FILE JSB DINP GET NEXT RECORD. JMP ./K0 * ./M JSB SC.CR GET THE FILE NAME JMP ERR ERROR IF NO FILE NAME JSB TR SEND THE PENDING LINE JSB INSRC FETCH THE FILE NOP IGNOR NOT FOUND ERROR SPC 1 JSB EXEC NOW GET DEF *+7 THE OLD SOURCE DEF .1 BACK IN DEF SVSLU CORE DEF SBUF$,I DEF SVSWC DEF SVSTR DEF SVSSC SPC 1 JMP DISPL * SPC 1 ./J LDA SLNG IF NOT SSA,RSS AT EOF JSB O/PSB OUTPUT PENDING LINE CLA RESET THE EXCHANGE STA EXFLG FLAG AND CLA,INA THE CURRENT STA LINES LINE NUMBER JSB SETSO SET UP THE INPUT JSB SQ READ THE FIRST BLOCK JMP COMP1 START SEARCH SPC 1 * ./B RESETS SOURCE POINTER TO BEGINNING OF FILE BY * COMPLETION OF TRANSFER OF SOURCE FILE TO DESTINATION * FILE THEN DEFINING THE DEST. FILE AS THE SOURCE FILE * ./B JSB ./B1 PERFORM TRANSFER JMP COMP1 START SEARCH SPC 1 ./B1 NOP I JSB ./B$ COMPLETE TRANSFER. CLA STA EXFLG RESET EXCHANGE FLAG STA PBFLG RESET PARTIAL BUFFER FLAG CLA,INA STA LINES RESET LINE COUNTER JSB ALCAT GET NEW SOUCE AND DEST. FILE JSB SQ READ IN FIRST BLOCK JMP ./B1,I FILL INPUT BUFFER * *./B$ COMPLETES TRANSFER OF SOURCE TO DESTINATION. ./B$ NOP JSB TR TRANSFER SOURCE SSB,RSS TO DESTINATION JMP *-2 FILE CCA PUT END OF STA DBUFP,I FILE RECORD IN ISZ DBUFP OUTPUT BUFFER LDA DBUF$ DETERMINE CMA,INA SIZE ADA DBUFP OF BUFFER CLB CONVERT SIZE ASR 6 TO SECTORS INA ROUNDING UP FOR ANY FRACTION STA PBFLG STORE IN PARTIAL BUFR FLAG JSB DOUT OUTPUT BUFFER TO DISC LDA #TRAK GET THE # OF TRACKS LDB LSLUT AND FIRST SOURCE TRACK ISZ PASS1 FIRST PASS AT SOURCE? JMP ./B2 NO - GO RELEASE TRACKS STA LS#TR YES - SAVE TRACK COUNT RSS BUT SKIP RELEASE ./B2 JSB RELTR RELEASE OLD SOURCE TRACKS LDA DSTRT SET SOURCE FILE POINTER TO STA LSLUT START OF DEST. FILE JMP ./B$,I SPC 1 RELTR NOP CMA,INA FORM A NEGATIVE TRACK COUNT STA TEMP AND SAVE STB LSLUT STORE START TRACK CLA CLEAR THE RELEASE INHIBIT STA RELS FLAG JSB SETSO SET UP TO READ THE SOURCE TRK2 LDA SRCLU GET THE LU LDB SECT2 GET SECTOR COUNT FOR LU 2 SLA IF LU 3 LDB SECT3 USE LU 3 COUNT ADB M2 SUBTRACT FOR 128 READ STB SSEC# SET DISC ADDRESS FOR MIN READT JSB MIN GO READ TRACK AND RELEASE IT LDA SNTRF GET THE NEW TRACK FLAG. SSA,RSS WAS A TRACK RELEASED? JMP READT NO. CONTINUE READING. ISZ TEMP DONE? JMP TRK2 NO - DO NEXT ONE CCA YES - CLEAR THE FLAG STA RELS SO NO MORE ARE RELEASED. JMP RELTR,I *EOFPR PRINTS "EOF THEN RETURNS FOR NEXT COMMAND * EOFPR CLA PREPARE FOR NON-INTERACTIVE DEVICE. CPA NOPRN IF IT'S INTERACTIVE, JMP EOFPN PROCEED TO PRINT THE MESSAGE. IFZ STA INTFL CLEAR REMOTE COMMAND READ INDICATOR. XIF JMP NODE1 GO TO READ THE NEXT COMMAND. EOFPN EQU * IFZ JSB REMCK IF COMMUNICATING REMOTELY, JMP REMEO PERFORM WRITE-READ. XIF JSB PRINT DEF NODE1 EOFLN DEC -4 EOFMS ASC 4,EOF IFZ EOFAD DEF EOFMS * REMEO LDA EOFAD GET BUFFER ADDRESS. LDB EOFLN GET MESSAGE LENGTH. ISZ INTFL SET THE INTERACTIVE FLAG. JSB INTER WRITE EOF MESSAGE/READ NEXT COMMAND. JMP NODE1 GO TO PROCESS THE COMMAND. XIF SPC 1 * ./A TERMINATES EXECUTION LEAVING ORIGINAL LS AREA UNTOUCHED * ./A JSB ECH IF ANY CHARACTERS RSS FOLLOWING THE "A" JMP ERR GIVE AN ERROR INSTEAD OF ABORT ./A0 CLA STA LSTFG PREVENT LISTING. LDA NOPRN GET INTERACTIVE FLAG. STA TYPEQ SAVE, TEMPORARILY. CCA STA NOPRN PREVENT REPETITIOUS ERROR MESSAGES. JSB ./B$ COMPLETE TRANSFER TO DESTINATION. LDA #TCNT GET NO. OF DEST. TRACKS, LDB LSLUT AND FIRST TRACK SPEC. SZA ANY DESTINATION TRACKS? JSB RELTR YES, GO TO RELEASE DEST. TRACKS. LDA TYPEQ RESET THE INTERACTIVE FLAG STA NOPRN FOR THE FINAL MESSAGE. ./A1 JSB PRINT DEF EXIT DEC 7 NAME ASC 7,EDITR ABORTED * * ./E COMPLETES TRANSFER OF SOURCE TO DESTINATION THEN * TERMINATES IF THERE IS NO INPUT ERROR. SPC 1 ./E STA ./EFL SHOW WE'VE BEEN HERE. JSB ./B$ COMPLETE XFER OF SOURCE TO DEST. ./E2 JSB ECnH JMP ERR JSB LCASE CONVERT LOWER CASE CHAR.--IF NECESSARY. STA SAVL FOR RETURN TO SCHEDULER. CPA "L" SET SYSTEM LS POINTER? RSS JMP ./E3 IFZ JSB REMCK REMOTE CRT? JMP ERR YES, CAN'T ACCESS LS XIF SPC 1 JSB $LIBR ******************************* NOP TURN OFF MEMORY PROTECT AND LDA LSLUT SET SYSTEM LS AREA POINTER STA SFCUN TO FINAL FILE ADDRESS JSB $LIBX THEN TURN MEMORY PROTECT DEF *+1 BACK ON DEF LSTLS ****************************** SPC 1 DLU. DEF LU. DTRK. DEF TRK. DLSB DEF LSBUF DTBF0 DEF TBUF0 PERMANENT SAVE. LSLU NOP RETURN TO SCHEDULER LTRAK NOP RETURN TO SCHEDULER LSBUF ASC 4,LS FILE X, LU. ASC 1,2, TRK. ASC 2,XXX SPC 1 LSTLS LDA TBUFF STA DTBF0 LDA DLU. STA TBUFF LDB SFCUN LDA .2 SSB INA STA LSLU CLB JSB DEC CONVERT LU TO ASCII CLA STA OCCNT RESET CHAR COUNTER LDA DTRK. POINT TO TRACK ASCII STA TBUFF LDA SFCUN GET LS TRACK CLE,ELA SHUNT OUT LU ALF,ALF STA LTRAK B ALREADY CLEAR FROM ABOVE JSB DEC LDB OCCNT ACTUAL # OF DIGITS. ADB .10 INCREASE BY PREL CHARS LDA DLSB POINT TO MESSAGE, JSB LST AND SEND IT OUT. LDA DTBF0 RESTORE PRIMARY OUTPUT STA TBUFF POINTER AND RESET CLA CHARACTER COUNTER. STA OCCNT SPC 1 JSB ECH FETCH C OR R JMP ENDMS NONE, GO TO END MESSAGE JSB LCASE CONVERT LOWER CASE CHAR. IF NECESSARY. ./E3 STA ./EFL SAVE COMMAND MODE JSB SC.CR PARSE FILE NAME JMP CHEKR /R IS VALID TO REPLACE SOURCE. LDA ./EFL FETCH COMMAND MODE CPA "C" IF C JMP CRFIL rQ GO TO CREATE FILE CPA "R" IF R JMP RPFIL GO TO REPLACE FILE JMP ERR OTHERWISE GO TO ERROR SPC 1 CHEKR LDA ./EFL GET COMND CPA "R" IF IT'S R, PICK UP TURN-ON RSS FILE NAME:SC:CR. JMP ERR NOT R - ERROR. LDA NBUFF CHANGE POINTER FOR SENDING STA TBUFF FILE NAME. DLD FSECW PICK UP TURN-ON SC DST FSECR AND CR. JMP RPFIL TRY TO REPLACE. SPC 1 NBUFF DEF NBUF0 SPC 1 CRFIL DLD T#REC COMPUTE FILE SIZE NEEDED ASR 6 IN 128 WORD BLOCKS ADA T#SEC FSIZE = ARS ( T#REC/64 + T#SEC )/2 + 1 INA STA FSIZE SPC 1 JSB CREAT CREATE OUTPUT FILE DEF *+9 DEF DBUF$,I DCB DEF RUBSH ERROR BUCKET DEF TBUFF,I FILE NAME DEF FSIZE # OF BLOCKS DEF .4 TYPE 4 DEF FSECR SECURITY CODE DEF FCART CARTRIDGE ID DEF DCBSZ DCB SIZE SPC 1 SSA ERROR FROM CREATE? JMP FMPC YES, PRINT MESSAGE JMP WRITR GO TO OUTPUT FILE SPC 1 RPFIL JSB OPEN OPEN OUTPUT FILE DEF *+8 DEF DBUF$,I DEF RUBSH DEF TBUFF,I DEF ZERO DEF FSECR DEF FCART DEF DCBSZ SPC 1 SSA ERROR FROM OPEN? JMP FMPC YES, PRINT ERROR MESSAGE SPC 1 WRITR JSB SETSO SET UP TO READ SOURCE. JSB SQ READ IN FIRST BLOCK NXREC LDB SLNG CONVERT # CHARS. TO BRS # OF WORDS STB RCLNG SPC 1 JSB WRITF WRITE DEF *+5 RECORD DEF DBUF$,I ON DEF RUBSH OUTPUT DEF SBUFP,I FILE DEF RCLNG SSA IF ERROR, PRINT MESSAGE AND JMP FMPC TRY TO RECOVER LDA RCLNG IF EOF WRITTEN SSA GO TO JMP CLSFL CLOSE FILE JSB I/PSB READ NEXT RECORD JMP NXREC CONTINUE SPC 1 CLSFL JSB CLOSE CLOSE DEF *+2 OUTPUT DEF DBUF$,I FILE SPC 1 SSA IF ERROR PRINT MESSAGE JSB FMPER AND END SPC 1 ENDMS LDA LS#TR FETCH OLD SOURCE TRACK LDB LSTRK COUNT AND POINTER SZB IF POINTER IS NON-ZERO JSB RELTR RELEASE TRACKS SPC 1 JSB PRINT END OF EDIT MESSAGE DEF PRETN DEC 6 ASC 6,END OF EDIT * PRETN LDA SAVL IF E COMMAND INCLUDED L, CPA "L" REPORT THE LS LU AND RSS TRACK BACK TO THE JMP EXIT SCHEDULER. JSB PRTN DEF EXIT DEF LSLU SPC 1 ****** TERMINATION HERE ******** EXIT JSB EXEC DEF *+2 DEF .6 *** * SPC 1 SAVL OCT 0 SAVE PARAMETER FOLLOWING /E .6 DEC 6 B40 OCT 40 M58 DEC -58 M5 DEC -5 M2 DEC -2 "C" OCT 103 M1 DEC -1 .1 OCT 1 .2 OCT 2 M3 DEC -3 DBEND NOP SBEND NOP SPC 1 $$$ER JSB PRINT DEF ./A0 DEC 6 ASC 6,CORRUPT FILE SPC 1 PRINT NOP LDA NOPRN GET THE INTERACTIVE DEVICE FLAG. SZA IF IT'S NON-INTERACTIVE JMP PRNTX THEN, FORGET THE MESSAGE. LDA PRINT INA STA ERMEC INA STA ERMEP JSB DEXEC DEF PRNER IFZ DEF NODE XIF DEF .2.I DEF TTYLU ERMEP NOP ERMEC NOP PRNER CCB,RSS CLB PRNTX LDA PRINT,I JMP A,I * FSECR NOP FILE SECURITY CODE FCART NOP FILE CARTRIDGE REFERENCE NUMBER FSECW NOP SAVE SC DURING TURN-ON. FCARW NOP DITTO CR .75 DEC 75 ZERO NOP DBFP1 NOP * SC.CR NOP JSB NXCHR FETCH FIRST CHARACTER OF NAME JMP SC.CR,I NONE, SO RETURN ISZ SC.CR NAME GIVEN SO BUMP RETURN ADRS ONAME JSB OUTCR OUTPUT NAME CHARACTER JSB NXCHR FETCH NEXT CHAR. RSS JMP ONAME GO TO OUTPUT IT LDA M5 SPACE STA CNT1 FILL ONAM1 LDA B40 NAME JSB OUTCR ISZ CNT1 JMP ONAM1 JSB PARAM FETCH NOP SECURITY CODE STA FSECR AND SAVE. JSB PARAM FETCH NOP CARTRIDGE NUMBER STA FCART AND SAVE. JMP SC.CR,I SPC 1 RLSAL JSB EXEC RELEASE ALL TRACKS DEF *+3 OWNED BY EDITR. DEF .5 DEF M1 JMP IN2 SKP * INSRC FINDS AND LOADS NEW SOURCE FILE. * * - CONDITIONALLY RELEASES ALL THIS EDITR'S TRACKS. * - READS SOURCE (FMGR) FILE INTO DESTINATION BUFFER, ONE RECORD * AT A TIME, DELETING TRAILING DOUBLE BLANKS. * - WHEN DESTINATION BUFFER IS FULL, CALLS TO WRITE THE * BUFFER IN SYSTEM-ASSIGNED TRACK IN LS FORMAT. * INSRC NOP JSB OPEN OPEN INPUT FILE DEF *+8 DEF SBUF$,I DEF RUBSH DEF TBUFF,I DEF ZERO DEF FSECR DEF FCART DEF DCBSZ SSA,RSS ERROR ON OPEN? JMP IN1 NO, READ IN FILE JSB FMPER YES, PRINT ERROR JMP INSRC,I ERROR RETURN IN1 ISZ INSRC STEP TO OK RETURN LDA EXFLG ORIGINAL INPUT SSA,RSS FILE OR MERGE FILE? JMP NXTRC MERGE FILE! LDA SFCUN LDB TAT IF THIS EDITR DOES NOT SSA ADB TATSD OWN THE TRACKS CLE,ELA ALF,ALF POINTED TO BY LS POINTER. ADB A LDA B,I THEN IT IS SAFE TO CPA XIDT RSS JMP RLSAL RELEASE ALL TRACKS. IN2 JSB ALCAT GET FIRST DEST. TRACK SPC 1 NXTRC LDA DBUFP SET DBFP1 INA TO STA DBFP1 DBUFP+1 SPC 1 JSB READF READ DEF *+6 SOURCE DEF SBUF$,I FILE DEF RUBSH DEF DBFP1,I DEF .75 DEF DBUFP,I SPC 1 SSA ERROR FROM READF? JMP FMPA YES, GO TO FILE MANAGER ABORT LDA DBUFP,I FETCH RECORD LENGTH SSA END OF FILE? JMP ENDFL YES, GO TO END PROCESS LDB EXFLG MERGE OR ORIGINAL? SSB JMP DEL? ORIGINAL ISZ T#REC INCREMENT DEST RECORD COUNT JMP *+2 DURING READ FOR A MERGE, ISZ T#REM IN DOUBLE-WORD INTEGER. * * THIS CODE DELETES TRAILING BLANKS FROM RECORDS * READ FROM THE FILE MANAGER DEL? ADA M1 BACK UP ONE WORD SZA,RSS IF LAST WORD IN RECORD JMP .NXT DO NOT DELETE LDB DBFP1 LOAD LAST ADB A WORD OF LDB B,I RECORD CPB SPSP IF LAST TWO CHARS. WERE JMP DEL? BLANK CONTINUE LOOKING * .NXT INA OTHERWISE BUMP WORD COUNT ALF,ALF MOVE RECORD LENGTH TO STA DBUFP,I UPPER BYTE ALF,ALF ADA DBFP1 ADD PREVIOUS POINTER STA DBUFP TO GET NEW POINTER CMA CHECK FOR AVAILABLE ROOM ADA DBEND TO END OF BUFFER. SSA,INA,RSS END OF OUTPUT BUFFER? JMP NXTRC NO, READ NEXT RECORD STA DBFP1 STORE NUMBER OF WORDS OF OVERFLOW JSB DOUT OUTPUT BUFFER LDA DBFP1 NO OVERFLOW SZA,RSS SO CONTINUE JMP NXTRC WITH READ LDB DBEND OTHERWISE FETCH OVERFLOW ADDRESS OVMVR LDA B,I MOVE STA DBUFP,I BUFFER INB OVERFLOW ISZ DBUFP INTO ISZ DBFP1 BEGINNING OF BUFFER JMP OVMVR JMP NXTRC READ NEXT RECORD ENDFL JSB CLOSE CLOSE DEF *+2 SOURCE DEF SBUF$,I FILE SSA ERROR FROM CLOSE? JSB FMPER YES, GO TO FILE MANAGER ERROR JMP INSRC,I RETURN * RUBSH NOP ANYTHING I DON'T WANT GOES HERE SPC 1 * FMPER PRINTS FILE MANAGER ERROR * FMPER NOP CMA,INA COMPLEMENT ERROR NUMBER CLB DIV .10 GENERATE ADA B60 ASCII FROM ADB B60 OCTAL ERROR NUMBER ALF,ALF IOR B STA MSGP+10 STORE IN MESSAGE JSB PRINT DEF FMP? DEC 11 MSGP ASC 11,FILE MANAGER ERROR -XX SPC 1 FMP? SZB JMP EXIT JMP FMPER,I SPC 1 FMPA JSB FMPER PRINT FILE MANAGER ERROR JMP ENDFL THEN ABORT THE READ SPC 1 FMPC JSB FMPER PRINT FILE MANAGER ERROR JMP NODE1 THEN GET NEXT COMMAND SPC 1 NBUF0 ASC 10, FOR NAME:SC:CR SPC 1 * RECORD BUFFERS - THESE BUFFERS ARE DYNAMICALLY ASSIGNED * FOR INSTANCE, DURING EDITING BUFFERS ARE * SWITCHED BY CHANGING POINTERS SO THAT * THE COMMAND BUFFER (INPUT FROM CONSOLE) * IS USED AS AN EXCHANGE FIELD OR MATCH FIELD * BUFFER. * TBUF0 BSS 75 XYBF0 BSS 75 EBUF0 BSS 75 * MBUF0 IS A SIMILAR BUFFER WHICH OVERLAYS ONE-TIME CODE * STARTING AT 'EDITR'. SPC 2 * DEFAULT TABS ARE COLUMNS 7 AND 21 SPC 1 TAB0 DEC -6,-20,0,0,0,0,0,0,0,0,0 * * SKP A EQU 0 B EQU 1 AVMEM EQU 1751B END OF FOREGROUND+1 BKLWA EQU 1777B LAST WORD OF AVAILABLE MEMORY TAT EQU 1656B TRACK ASSGNMNT TABLE ADDRESS XIDT EQU 1717B EDITR ID TABLE ENTRY ADDRESS TATSD EQU 1756B # OF TRACKS ON SYSTEM DISC SFCUN EQU 1767B SYSTEM LS AREA (LU/TRACK) * BIT 15=LU SECT2 EQU 1757B # SECTORS PER TRACK LU 2 SECT3 EQU 1760B # SECTORS PER TRACK LU 3 MXSEC EQU ECCNT CNTRL EQU SWPET USE ENTRY POINT AS TEMP NEGFL EQU MATCH T1 EQU NUM1 T2 EQU NUM10 NT EQU CFLG RQSTC EQU LSTSB ENTRY POINT USED AS TEMP FSIZE EQU CNT1 RCLNG EQU CNT1 BASE EQU JDEF$ INCR EQU IDEF$ EN<:6D EDITR * SKP IFN REIO EQU EXEC .2.I EQU .2 XIF A EQU 0 B EQU 1 AVMEM EQU 1751B END OF FOREGROUND+1 BKLWA EQU 1777B LAST WORD OF AVAILABLE MEMORY TAT EQU 1656B TRACK ASSGNMNT TABLE ADDRESS DRT EQU 1652B DEVICE REF. TABLE ADDRESS LUMAX EQU 1653B MAX LU ON SYSTEM XIDT EQU 1717B EDITR ID TABLE ENTRY ADDRESS TATSD EQU 1756B # OF TRACKS ON SYSTEM DISC SFCUN EQU 1767B SYSTEM LS AREA (LU/TRACK) * BIT 15=LU BITS 14-7=TRACK SECT2 EQU 1757B # SECTORS PER TRACK LU 2 SECT3 EQU 1760B # SECTORS PER TRACK LU 3 MXSEC EQU ECCNT CNTRL EQU SWPET USE ENTRY POINT AS TEMP NEGFL EQU MATCH T1 EQU NUM1 T2 EQU NUM10 NT EQU CFLG RQSTC EQU LSTSB ENTRY POINT USED AS TEMP FSIZE EQU CNT1 RCLNG EQU CNT1 BASE EQU JDEF$ INCR EQU IDEF$ END EDITR "< b7 91740-18023 1740 S C0122 DS/1000 MODULE: REDIT              H0101 0ASMB,R,L,C HED REDIT 91740-16023 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 * NAM REDIT,19,50 91740-16023 REV 1740 770518 SPC 3 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SUP SPC 2 * NAME: REDIT * SOURCE: 91740-18023 * RELOC.: 91740-16023 * PGMR.: C.C.H. SPC 2 * ENT REDIT * EXT DEXEC,EXEC,#NODE,$LIBR,$LIBX,$CVT1 SPC 2 * * THIS IS A DS/1000 PROGRAM USED TO SCHEDULE "EDITR" AT A * REMOTE DISC-BASED NODE OF THE DS/1000 NETWORK. * * CALLING SEQUENCE: * * *ON,REDIT,TTYLU,RECSZ,NODE,,CHARS SCHEDULE EDITR AT ANY NODE IN NETWORK * * WHERE: * * TTYLU = INTERACTIVE TERMINAL LU NO. (LOCAL NODE) [DEFAULT =1] * * RECSZ = + MAXIMUM CHARACTERS PER LINE [DEFAULT =150] * * NODE = NODE AT WHICH IS TO BE SCHEDULED. * * CHARS = OPTIONAL NAME CHARACTERS, FOR ALTERNATE PROGRAM NAME: "EDIXX". * [THE SUPPLIED CHARACTERS MODIFY THE SCHEDULED-PROGRAM NAME IF * NOT SUPPLIED, "EDITR" WILL BE SCHEDULED.] * SKP * REDIT STB P1 SAVE TTYLU ADDRESS IN CALLING SEQUENCE INB STB P2 & RECORD SIZE ADDRESS INB STB P3 & OPERATING NODE ADDRESS STB DNODE DEFINE RECIPIENT OF REQUEST. * ADB K2 POINT TO P5. LDA B,I GET OPTIONAL-NAME CHARS.--IF ANY. STA TEMP SAVE TEMPORARILY. SZA ALTERNATE NAME SPECIFIED? JMP CKASC YES. CHECK TYPE OF PARAMETER. * DLD ASCTR NO. RESTORE DEFAULT CHARACTERS "TR". DST EMSG+5 JMP SCHED GO TO SCHEDULE "EDITR". * CKASC AD  A M.100 SUBTRACT 100 FOR ASCII CHECK. CCE,SSA,RSS ASCII PARAMETER SUPPLIED? JMP CONFG YES--NO NEED FOR CONVERSION. * LDA TEMP GET THE PARAMETER. JSB $LIBR NOP JSB $CVT1 CONVERT DECIMAL TO ASCII. STA TEMP SAVE THE RESULT. JSB $LIBX DEF *+1 DEF CONFG * CONFG LDA TMPBA GET BYTE ADDRESS OF CHARACTERS. LDB NAMBA GET BYTE ADDRESS OF PROG. NAME. MBT K2 MOVE THE CHARACTERS TO THE NAME. * SCHED JSB DEXEC DEF *+9 DNODE NOP LOCATION NODAL ADDRESS. DEF K10 SCHEDULE W/O WAIT. DEF EMSG+4 PROGRAM NAME: "EDI??". P1 NOP LOCAL INTERACTIVE LOGICAL UNIT NO. P2 NOP NUMBER OF CHARACTERS PER LINE. P3 NOP REMOTE NODAL ADDRESS OF . DEF #NODE DEFINE (LOCAL) OPERATOR'S NODAL ADDRESS. DEF K1 NON-ZER0: DETECTION OF DESTINATION =0. * SZA,RSS JMP TERM SCHEDULED OK * JSB EXEC GIVE FAILURE MESSAGE DEF *+5 DEF K2 DEF K1 DEF EMSG DEF ELENG * TERM JSB EXEC TERMINATE DEF *+2 DEF K6 * * A EQU 0 B EQU 1 K1 DEC 1 K2 DEC 2 K6 DEC 6 K10 DEC 10 M.100 DEC -100 ASCTR ASC 2,ITR TEMP NOP TMPBA DBL TEMP NAMBA DBR EMSG+5 * ELENG DEC 13 EMSG ASC 13,REMOTE EDITR UNAVAILABLE! * END REDIT |  cj 91740-18024 1840 S C0422 &REMAT              H0104 qASMB,R,L,C HED REMAT 91740-16024 REV 1840 * (C) HEWLETT-PACKARD CO. 1978 NAM REMAT,19,80 91740-16024 REV 1840 780628 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ************************************************ * *REMAT OPERATOR INTERFACE PROGRAM FOR DS/1000 * *SOURCE PART # 91740-18024 REV 1805 * *REL PART # 91740-16024 REV 1805 * *WRITTEN BY: DAN GIBBONS * *DATE WRITTEN: JANUARY 1977 * *MODIFIED BY: DMT [FOR DVR07] * *DATE MODIFIED: NOVEMBER 1977 * ************************************************** * * RTE PROGRAM TO PROVIDE VARIOUS OPERATOR ACCESS AND CONTROL * FUNCTIONS BOTH LOCALLY AND AT REMOTE NODES. * * CPU'S ARE ADDRESSED BY USING THE SW(ITCH) COMMAND TO SPECIFY * VALUES FOR NODE1 AND NODE2 TO BE USED IN SUBSEQUENT * OPERATOR COMMANDS. * **************************************************************** * * REMAT IS TURNED ON WITH THE FOLLOWING OPERATOR COMMAND: * * *ON,REMAT [,INPUTLU [,LOGLU [,LISTLU [,SEVERITY CODE]]]] * OR * *ON,REMAT,FI,LE,NM [,LISTLU [,SEVERITY CODE]] * * WHERE: * * INPUTLU = LU OF SYSTEM INPUT DEVICE. (DEFAULT = 1) * * LOGLU = LU OF INTERACTIVE ERROR LOGGING DEVICE. (DEFAULT = * INPUTLU IF INPUTLU IS A CRT OR TTY, ELSE = 1) * * LISTLU = LU OF LIST DEVICE. (DEFAULT = 6) * * SEVERITY CODE = ERROR REPORTING CODE. (DEFAULT = 0) * 0 = ECHO ALL COMMANDS * 1 = INHIBIT COMMAND ECHO * * FILENM = FILE WHICH MAY OPTIONALLY BE SPECIFIED TO PROVIDE * ALL INPUT COMMANpDS * ***************************************************************** SPC 2 * SUP ENT REMAT * EXT EXEC,#NODE EXT DPOSN EXT DWRIT,DOPEN,DREAD,DLOCF EXT DCLOS,DCRET,DNAME,DPURG EXT DMESS,DMESG,IFBRK EXT D65MS,FCOPY EXT DEXEC,CNUMD,#SWRD EXT REIO,RMPAR,.DFER * IFZ EXT DBUG XIF * * A EQU 0 B EQU 1 * * INITIALIZE TRANSFER STACK. * REMAT JSB RMPAR GET PRAMS DEF *+2 DEF P1 SAVE IN TEMP AREA * SPC 1 IFZ LDA P1 SEE IF THEY WANT DBUG INA CPA D100 RSS JMP REMC1 JSB DBUG DEF *+1 JSB EXEC DEF *+4 DEF B6 DEF B0 DEF B1 JMP REMAT XIF SPC 1 REMC1 JSB EXEC SET SWAP ONLY WHAT IS NEEDED DEF *+3 DEF D22 DEF B2 LDA STKHD RESET STACK POINTER. STA P.STK CLA,INA SET FIRST STACK ENTRY STA P.STK,I FOR LOGICAL UNIT 1 (DEFAULT). * LDA #NODE GET LOCAL NODE # STA NODE2 DEFAULT NODE2 IS LOCAL STA NODE1 DEFAULT NODE1 IS LOCAL STA DESTX STA TRNOD INIT XFR FILE NODE CLA DEFAULT LU STA TRSEC INIT XFR FILE SECURITY CODE STA TRCRN AND CARTRIDGE REF #. * LDA P1 CHECK IF P1 = ASCII PARAM. AND HB377 SZA,RSS JMP STR NO. MUST BE INPUT LU. * * FETCH SCHEDULE PARAMETERS (FL,NA,ME,LIST,SEVERITY). * DLD P1+1 PROTECTION FOR THE FILE SZA,RSS NAME IN THE SCHEDULE PARAMETERS LDA DBBLK SZB,RSS LDB DBBLK DST P1+1 * LDA A.$TR GENERATE "$TR,FLNAME" IN BUFFER. STA INBUF LDA A.TR1 STA INBUF+1 JSB .DFER DEF INBUF+2 DEF P1 * LDA B5 SET COUNT. STA INCNT * CLA SET UP DUMMY SCHEDULE PARAMS} STA P1 FOR INPUTLU STA P1+1 AND LOGLU. LDA P1+3 ADJUST POSITION OF LISTLU STA P1+2 AND SEVERITY CODE IN LDA P1+4 SCHEDULE PARAM BUFR. STA P1+3 CCA PREPARE TO SET TRFLG * STR STA TRFLG SET/CLEAR FLAG FOR QUERY SECTION. * * FETCH SCHEDULE PARAMETERS (LU,LOG,LIST,SEVERITY CODE). * LDA P1 GET LU OF INPUT DEVICE. SZA IF NONE OR 1, LEAVE DEFAULT (=1) CPA B1 IN STACK. JMP STAT * STA P.STK,I OVERRIDE DEFAULT INPUT LU * STAT LDA P.STK,I JSB EQTYP CHECK EQ. TYPE OF INPUT LU. STA LUTYP * LDA P1+1 GET LU OF LOG DEVICE. SZA GIVEN? JMP SVLOG YES, USE IT * LDB LUTYP NO, USE INPUTLU CLA,INA IF INTERACTIVE, SZB,RSS ELSE USE 1. LDA P.STK,I GET INPUTLU SVLOG IOR VBIT IN CASE IT'S A PRINTER STA LOGLU SAVE LOGLU * LDA P1+2 GET LU OF LIST DEVICE, SZA,RSS LDA B6 OR USE DEFAULT = 6. STA LSTLU * LDA P1+3 SAVE SEVERITY CODE. STA SEVER * LDA TRFLG IF SCHEDULED WITH FILE NAME, SZA ALREADY HAVE TR SIMULATED. JMP CHK$ * * DISPLAY PROMPT CHARACTER (IF TTY DEVICE). * CONTROL RETURNS HERE WHEN REQUEST PROCESSING COMPLETES. * QUERY LDA P.STK,I CHECK WHETHER CURRENT INPUT STA LUTYP IS FROM A TTY TYPE DEVICE. AND HB377 NON ZERO IF FILE NAME, ELSE LU. SZA JMP REMRD REMOTE FILE. STA BRFLG CLEAR BREAK-FLAG * JSB LCALS SET FOR LOCAL ONLY LDA P.STK,I JSB EQTYP LOCAL LU: CHECK TYPE. JSB LCALC RESET NODE2 PARAMETER STA LUTYP SZA JMP LOCRD LOCAL INPUT LU NOT TTY DEVICE. * LDB "$" SET LOCAL PROMPT ($) LDA #NODE IF BOTH NODE1 AND NODE2 CPA NODE1 ARE LOCAL, ELSE SEbT RSS REMOTE PROMPT (#). LDB "#" CPA NODE2 RSS LDB "#" STB PRMPT * JSB REIO DISPLAY PROMPT ON TTY DEVICE. DEF *+5 DEF ICOD2 DEF P.STK,I DEF PRMPT PROMPT CHAR DEF B1 JMP ABORT ERROR RETURN * LDA P.STK,I SET ECHO BIT. IOR B400 RSS * * INPUT OPERATOR REQUEST FROM CURRENT DEVICE OR FILE. * LOCRD LDA P.STK,I SET INPUT LU INTO STA TEMP REIO CALLING SEQ. * JSB REIO LOCAL LU. DEF *+5 DEF ICOD1 DEF TEMP DEF INBUF DEF D40 JMP ABORT ERROR RETURN * STA TEMPM SAVE STATUS WORD. STB INCNT SAVE WORD COUNT. JSB LCALS SET FOR LOCAL JSB EOFCK CHECK FOR END OF FILE. JMP TRANS GOT IT. JMP ECHO GO ECHO IF NECESSARY. * REMRD JSB IFBRK IF BRFLG IS SET AT DEF *+1 THIS OR ANY PREVIOUS SZA CALL TO IFBRK, THEN STA BRFLG CLEAR IT AND RESET STACK. LDA BRFLG CLB STB BRFLG SZA JMP RESET * JSB DREAD READ RECORD FROM FILE DEF *+6 (OPENED WHEN FIRST TRANSFER DEF TRDCB WAS PERFORMED) DEF IERRR DEF INBUF DEF D40 DEF INCNT ACTUAL WORD COUNT. * JSB ERCHK CHECK FOR ERRORS. * LDA INCNT IF EOF, GENERATE TR REQUEST. INA,SZA JMP BUMP TRANS LDA A.$TR STA INBUF LDA A.$TR+1 STA INBUF+1 LDA B2 STA INCNT JMP ECHO * BUMP LDA P.STK ADA B3 ISZ A,I BUMP RECORD COUNT. * * ECHO THE REQUEST IF NOT INPUT FROM TTY DEVICE. * ECHO LDA LUTYP SZA,RSS JMP CKCNT IT IS A TTY DEVICE. * LDA SEVER INHIBIT ECHO IF CPA B1 SEVERITY CODE = 1. JMP CHK$ * JSB REIO NOT TTY: ECHO. DEF *+5 DEF ICOD2  DEF LOGLU DEF INBUF DEF INCNT JMP ABORT ERROR RETURN * CHK$ LDA INBUF FIRST CHARACTER MUST AND HB377 BE A "$". CPA AS.$ RSS JMP OPER * LDA INBUF BLANK OUT THE "$" SIGN. AND B377 IOR BLANK STA INBUF * CKCNT LDB INCNT IGNORE REQUEST IF NULL. RBL MAKE CHARACTER COUNT. SZB,RSS JMP QUERY * * PARSE THE OPERATOR REQUEST. * JSB $PARS * JMP M0000 CHECK IF PROCESSING NEEDED * * * SEND RTE COMMANDS. * OTHER LDA INCNT CONVERT LENGTH TO BYTES RAL STA INCNT * * HERE FOR SENDING SYSTEM COMMANDS TO THE * CPU AT NODE1. * JSB DMESS SEND COMMAND. DEF *+4 DEF NODE1 DEF INBUF ASCII COMMAND. DEF INCNT COUNT (+POSITIVE BYTES) * SZA ANY RESPONSE MESSAGE? JMP DSPLY YES, DISPLAY IT CPB MD1 NO. ERROR? JMP OPER YES JMP QUERY NO * DSPLY STA TEMP SAVE COUNT * JSB REIO DISPLAY REPLY MESSAGE. DEF *+5 DEF ICOD2 DEF LOGLU DEF INBUF DEF TEMP JMP ABORT ERROR RETURN * JMP QUERY * * CHECK THE OPERATOR REQUEST CODE AGAINST THE LEGAL * REQUEST CODES AND JUMP TO THE PROPER PROCESSOR. * * TO ADD NEW REQUEST ONE MERELY: * A. ADDS ASCII OPERATION CODE TO TABLE "LDOPC". * B. ADDS PROCESSOR START ADDRESS TO TABLE "LDJMP". * C. ADDS PROCESSOR CODING TO PROCESS THE REQUEST. * M0000 LDB OP FETCH OPERATION CODE. M0001 STB OPP SET STOP FLAG. LDA LDOPC SET OPERATION TABLE POINTER. STA TEMP1 LDA LDJMP SET PROCESSOR JUMP ADDRESS. * M0030 CPB TEMP1,I COMPARE WITH TABLE VALUE. JMP A,I COMPARES. GO DO IT. * ISZ TEMP1 KEEP LOOKING. INA JMP M0030 * LDOPC DEF *+1 OPERATION CODE TABLE ADDRESS. * tuASC 1,DL ASC 1,DU EX ASC 1,EX ASC 1,ST ASC 1,SW ASC 1,TE ASC 1,TR ASC 1,LO ASC 1,PL ASC 1,LL ASC 1,SL ASC 1,SO ASC 1,RW ASC 1,LC ASC 1,FL ASC 1,PU ASC 1,RN ASC 1,CR ASC 1,LI OPP NOP OP CODE FOR CURRENT REQ. * LDJMP DEF *+1,I JMP ADDRESS FOR EACH OP CODE. * DEF M0300 ADR FOR DL REQUEST DEF M0400 DU REQUEST. DEF M0500 EX REQUEST. DEF M0900 ST REQUEST. DEF M0990 SW REQUEST. DEF M1000 TE REQUEST. DEF M1200 TR REQUEST DEF M1400 LO REQUEST DEF M1500 PL REQUEST DEF M1600 LL REQUEST DEF M1700 SL...SLAVE LIST ROUTINE DEF M1800 SO...SLAVE OFF ROUTINE DEF M2001 RW REQUEST DEF M2100 LC REQUEST DEF M2401 FL REQUEST DEF M2501 PU REQUEST DEF M2550 RN REQUEST DEF M2701 CR REQUEST DEF M2801 LI REQUEST DEF OTHER MUST BE A SYSTEM COMMAND SPC 1 * ERR55 LDA D55 MISSING PARAMETER JMP OPERS * ERR56 LDA D56 ILLEGAL PARAMETER TYPE JMP OPERS * OPER LDA D10 INPUT ERROR: 010 OPERS STA IERRR JSB ERCHK WON'T RETURN. * HED REMAT: TR REQUEST. * (C) HEWLETT-PACKARD CO. 1978 * * TR,NAMR [,NODE #] * * TRANSFER CONTROL TO LOCAL LU OR FILE AT NODE #. DEFAULT NODE# * IS LOCAL. NODE # AND NAMR SUBPARAMS CRN & SECURITY CODE MAY BE * SET ONLY ON THE FIRST $TR OF A NESTED GROUP OF $TR COMMANDS. * M1200 LDA P.STK,I IF CURRENT INPUT IS FROM A AND HB377 FILE, CLOSE IT. SZA,RSS JMP M1210 * JSB DCLOS DEF *+3 DEF TRDCB DEF IERRR * CLA STA TOPNF CLEAR TRDCB OPEN FLAG. * M1210 LDA P.STK IF THIS IS THE FIRST $TR CPA STKHD OF A NESTED GROUP, SET FILE RSS NODE, SECURITY C6ODE AND CRN. JMP IGNOR IF NOT, LEAVE THEM AS THEY ARE. LDA SECU1 STA TRSEC LDA CRN1 STA TRCRN LDB CP2 GET 2ND PARAM FLAG SZB MISSING? JSB INTCK NO. MUST BE NUMERIC LDA #NODE GET DEFAULT NODE (LOCAL) SZB P2 MISSING? LDA P2 NO, USE IT. STA TRNOD SET NODE # * IGNOR EQU * LDA P1 GET PARAM 1. SZA,RSS IF NOT SPECIFIED, CCA SIMULATE "TR,-1". * SSA,RSS NEGATIVE INTEGER? JMP M1220 NO. * * BACK UP THROUGH TRANSFER STACK. * LDB STKHD STB TEMP TEMP = TOP-OF-STACK ADR LDB TRFLG RUNNING FROM SCHEDULE SZB,RSS PARAM FILE? JMP M1215 NO LDB STKHD YES, ADJUST TOS ADR ADB B4 STB TEMP M1215 LDB P.STK TOP OF STACK? BKUP CPB TEMP JMP M1217 YES. SIMULATE "EX" REQUEST. ADB MD4 NO. BACK UP 1 ENTRY. INA,SZA JMP BKUP LOOP TILL DONE. STB P.STK SET NEW STACK ADDRESS. JMP M1250 GO CHECK FOR FILE. * M1217 LDB EX GO SIMULATE "EX" REQUEST JMP M0001 * * ADD NEW CONTROL TO THE TRANSFER STACK. * M1220 LDA P.STK BUMP TO NEXT ENTRY. ADA B4 STA P.STK CPA STKEN RSS JMP M1230 * LDA D13 STACK OVERFLOW. ERROR 013. JMP OPERS * M1230 EQU * LDB P1 STORE LU OR FILE NAME. STB A,I INA LDB P1+1 STB A,I INA LDB P1+2 STB A,I INA CLB,INB SET RECORD NUMBER TO 1. STB A,I * * IF FILE, OPEN AND OPTIONALLY POSITION. * M1250 LDA P.STK,I AND HB377 SZA,RSS JMP QUERY LOCAL LU. GO GET NEXT REQUEST. * JSB DOPEN OPEN THE FILE. DEF *+7 DEF TRDCB DEF IERRR DEF P.STK,I DEF B0 IOPTN DEF TRSEC SECURITY C {ODE DEF TRCRN ICR ARRAY * LDA IERRR PROCESS ERRORS ONLY IF SSA IERRR IS NEGATIVE. JSB ERCHK ISZ TOPNF SET TRDCB OPEN FLAG. * LDA P.STK POSITIONING REQUIRED? ADA B3 LDB A,I CPB B1 (REC. CNT MORE THAN 1?) JMP QUERY NO. STB TEMP YES. * JSB DPOSN POSITION TO NEXT RECORD. DEF *+5 DEF TRDCB DEF IERRR DEF TEMP NUR GREATER THAN ZERO. DEF TEMP ABSOLUTE RECORD NUMBER. * JSB ERCHK CHECK FOR ERRORS. JMP QUERY * * TRANSFER STACK. * * FOR EACH ENTRY, WORD 1 = INTEGER LU OR * FIRST 2 FNAME CHAR. * WORD 2,3 = REST OF FNAME. * WORD 4 = NEXT RECORD NUMBER. * P.STK NOP STACK POINTER. STKHD DEF *+1 * BSS 32 8 ENTRIES. * STKEN DEF * STACK LWA+1 * TRSEC NOP XFR FILE SECURITY CODE TRCRN BSS 2 XFR FILE ICR ARRAY TRNOD EQU TRCRN+1 HED REMAT: DU REQUEST. * (C) HEWLETT-PACKARD CO. 1978 * * DU,NAMR1,LU [,FORMAT] * * DUMP FROM NAMR1 FILE OR LU AT NODE1 TO LU AT NODE2 * M0400 JSB CKFMT SET UP SUBF, ETC LDB CP1 CPB B1 1ST PARAM NUMERIC? JMP M0450 YES, MUST BE LU * JSB ASCHK NO,MUST BE FILE NAME. LDB CP2 JSB INTCK ERROR IF NO LU2 JSB PTCHK SEE IF LEADER GENERATION NECESSARY LDA NODE1 STA CRN1+1 BUILD ICR ARRAY FOR DOPEN * * OPEN THE FILE AT NODE1 * JSB DOPEN OPEN THE FILE. DEF *+7 DEF UDCB DEF IERRR DEF P1 FILE NAME. DEF B0 OPEN OPTIONS. DEF SECU1 SECURITY CODE. DEF CRN1 ICR ARRAY * LDA IERRR CHECK FOR ERRORS IF IERRR NEG. SSA JSB ERCHK ISZ UOPNF SET UDCB OPEN FLAG. * LDA CP3 GET FORMAT PARAM FLAG SZA ~VGIVEN? JMP M0410 YES, OVERRIDES FILE TYPE * JSB DLOCF NO, GET FILE TYPE INFO DEF *+9 DEF UDCB DEF IERRR DEF TEMP DEF TEMP DEF TEMP DEF TEMP DEF TEMP DEF TYPE1 * LDA IERRR CHECK FOR ERRORS IF IERRR NEG. SSA JSB ERCHK * LDA B100 LDB TYPE1 CPB B5 TYPE 5? STA SUBF YES, SET BINARY BIT CPB B7 TYPE 7? STA SUBF YES, SET BINARY BIT * CLB IF FORMAT IS LDA P3 ASCII, RESET CPA "AS" ASCII/BINARY STB SUBF BIT IN SUBF. * * READ A RECORD FROM NODE1 FILE. * M0410 JSB DREAD READ. DEF *+6 DEF UDCB DEF IERRR DEF INBUF DEF D128 DEF INCNT XMSN LOG. * JSB ERCHK CHECK FOR ERRORS. * LDA INCNT SZA,RSS SKIP CHECKSUM FOR JMP M0412 ZERO-LENGTH RECORDS. INA,SZA,RSS CHECK FOR EOF (INCNT=-1) JMP M0415 GOT IT. GO PROCESS. JSB CKSUM DO CHECKSUM IF NECESSARY JMP ERR07 CHECKSUM ERROR RETURN M0412 JSB LUOUT GO OUTPUT THE RECORD RSS BREAK REC'D. TREAT AS EOF JMP M0410 GO READ NEXT RECORD M0415 JSB EOFPR PROCESS EOF JMP M0950 GO CLOSE NODE1 FILE * * DUMP LU1 TO LU2 * M0450 LDB CP2 JSB INTCK ERROR IF NO LU2 JSB PTCHK SEE IF LEADER GENERATION NECESSARY JSB CKTTY SET ECHO BIT IF LU = TTY OR CRT M0460 JSB LUIN INPUT RECORD FROM LU1 JMP M0470 EOF FOUND JSB LUOUT OUTPUT RECORD TO LU2 RSS BREAK FLAG SET. TREAT AS EOF JMP M0460 GO READ NEXT RECORD M0470 JSB EOFPR PROCESS END-OF-FILE JMP QUERY * * SUBROUTINE TO GENERATE LEADER IF LU2 = PAPER TAPE PUNCH * PTCHK NOP LDA P2 GET LU2 JSB EQTYP CPA B2 PAPER TAPE PUNCH? RSS JMP PT,CHK,I NO, RETURN LDA B1000 YES, GENERATE LEADER IOR P2 STA TEMP * JSB DEXEC CONTROL DEF *+4 DEF NODE2 DEF ICOD3 CONTROL, NO-ABORT DEF TEMP JMP ASCER ERROR RETURN * JMP PTCHK,I RETURN * * SUBROUTINE TO OUTPUT THE RECORD ON NODE2 LU * * LUOUT NOP LDA SUBF GET SUBFUNCTION AND B100 ISOLATE BINARY/ASCII BIT IOR P2 INCLUDE OUTPUT LU STA TEMP SET UP DEXEC CONWD * JSB DEXEC WRITE. DEF *+6 DEF NODE2 DEF ICOD2 WRITE, NO-ABORT DEF TEMP CONWD DEF INBUF DEF INCNT JMP ASCER ERROR RETURN * JSB IFBRK FIND IF DEF *+1 THE BREAK FLAG SZA,RSS IS SET ISZ LUOUT NO, BUMP RETURN ADR STA BRFLG SAVE BREAK INDICATION JMP LUOUT,I YES. RETURN * * PROCESS END OF FILE CONDITION. * EOFPR NOP LDA P2 GET NODE2 LOGICAL UNIT. JSB EQTYP STA B EQUIPMENT TYPE. * LDA B100 SET DEFAULT TO M.T. DEVICE. CPB B2 XOR B1100 PUNCHED TAPE - TRAILER. CPB D10 IOR B1100 LINE PRINTER - PAGE EJECT. IOR P2 INSERT LOGICAL UNIT. STA TEMP * JSB DEXEC PERFORM I/O CONTROL. DEF *+5 DEF NODE2 DEF ICOD3 CONTROL, NO-ABORT DEF TEMP FORMATTED CONTROL WORD. DEF MD1 USED ONLY FOR LP. JMP ASCER ERROR RETURN * JMP EOFPR,I RETURN HED REMAT: ST REQUEST. * (C) HEWLETT-PACKARD CO. 1978 * * ST,NAMR1,NAMR2 [,FORMAT [,MODE]] * * STORE FROM NAMR1 LU OR FILE AT NODE1 INTO * NAMR2 FILE AT NODE2. MODE = TRANSFER MODE PARAMETER * IN FCOPY CALL (IF NON-ZERO, FILES ARE OPENED AS  * TYPE 1). * M0900 LDA NPRMS # OF PARAMS (INCLUDING CPA B2 COMMAND) = 2? JMP OTHER YES, MUST BE STATUS COMMAND LDA CP1 IOR B1 CPA B3 1ST PARAM ASCII (FILE NAME)? JMP M0960 YES, STORE FILE TO FILE * LDB CP2 NO, STORE LU TO FILE JSB ASCHK ERROR IF NOT A FILE NAME * JSB CKFMT * LDA D10 DEFAULT # BLOCKS TO 10. LDB SIZE2 SZB,RSS STA SIZE2 * LDB CP1 ERROR IF NO LU. JSB INTCK * LDA CRN2 LDB NODE2 DST TEMP BUILD ICR ARRAY FOR DCRET * * * * CREATE THE DISC FILE AT NODE2. * JSB DCRET CREATE FILE. DEF *+8 DEF UDCB DEF IERRR DEF P2 FILE NAME. DEF SIZE2 FILE-SIZE/REC-SIZE (2 WORDS) DEF TYPE2 FILE TYPE DEF SECU2 SECURITY CODE DEF TEMP ICR ARRAY (2 WORDS) * LDA IERRR CHECK FOR ERRORS IF IERRR NEG. SSA JSB ERCHK ISZ UOPNF SET UDCB OPEN FLAG. * JSB CKTTY SET ECHO BIT IF LU = TTY OR CRT M0905 JSB LUIN INPUT RECORD FROM LU JMP M0950 EOF FOUND IN INPUT * * WRITE THE RECORD ON NODE2 DISC FILE. * JSB DWRIT DEF *+5 DEF UDCB DEF IERRR DEF INBUF DEF INCNT * LDA IERRR CHECK FOR ERRORS. SSA JMP ST1 JSB IFBRK NO ERROR, IS BREAK FLAG DEF *+1 SET ? SZA,RSS JMP M0905 NO, GO READ NEXT RECORD. STA BRFLG YES, SAVE BREAK INDICATION * ST1 JSB DPURG ERROR. PURGE FILE. DEF *+6 DEF UDCB DEF TEMP DEF P2 FILE NAME. DEF P3 SECURITY. DEF P4 LABEL. * CLA CLEAR UDCB OPEN FLAG STA UOPNF JSB ERCHK DOES NOT RETURN * * END OF FILE ON INPUT. * M0950 JSB DCLOS CLOSE THE FILE DEF *+3 DEF UDCB DEF IERRR * CLA CLEAR UDCB OPEN FLAG. STA UOPNF * JMP QUERY * * STORE FROM FNAM1 AT NODE1 TO FNAM2 AT NODE2 * M0960 LDA CRN1 BUILD ICR LDB NODE1 ARRAYS FOR DST TEMP1 FCOPY CALL. LDA CRN2 LDB NODE2 DST TEMP2 * SPC 2 CALL JSB FCOPY DEF *+11 DEF P1 NODE1 FILE NAME DEF TEMP1 NODE1 CRN ARRAY DEF P2 NODE2 FILE NAME DEF TEMP2 NODE2 CRN ARRAY DEF IERRR DEF SECU1 DEF TYPE2 DEF SIZE2 DEF RSIZ2 DEF P4 XFER MODE SPC 3 * * ERROR PROCESSING * LDA IERRR GET ERROR CODE SZA,RSS ANY THING ? JMP QUERY NO, GO BACK * SSA ERROR OR WARNING ? JMP SER2 SOLID ERROR * JSB REIO TELL THE OPERATOR DEF *+5 THAT IT IS ONLY DEF ICOD2 A WARNING DEF LOGLU DEF WRNG DEF B6 JMP ABORT ERROR RETURN * JSB ERCHK THIS WILL DO THE REST * SER2 LDB A ADA D100 IS ERROR CODE IN ]-100,0[ ? SSA JMP ORER2 NO, IT MUST BE A NODE1 ERROR STB IERRR FOR ERCHK * JSB REIO TELL THE OPERATOR DEF *+5 THAT THE ERROR DEF ICOD2 WAS @ NODE2 DEF LOGLU DEF DSTER DEF B6 JMP ABORT ERROR RETURN * JSB ERCHK THIS WILL DO THE REST * ORER2 STA IERRR PREPARE IERRR FOR ERCHK * JSB REIO TELL THE OPERATOR THIS DEF *+5 IS A NODE1 ERROR DEF ICOD2 DEF LOGLU DEF ORGER DEF B6 JMP ABORT ERROR RETURN * JSB ERCHK GO AWAY * * SUBROUTINE TO SET LUTYP OF INPUT DEVICE * CKTTY NOP LDA NODE2 CHANGE NODE2 TO NODE1 STA TEMP TEMPORARILY FOR CALL LDA NODE1 TO EQTYP. STA NODE2 LDA P1 DETERMINE DEVICE TYPE JSB EQTYP OF NODE1 LU. LDB TEMP RESET NODE2 STB NODE2 STA LUTYP SAVE DEVICE TYPE OF NODE1 LU JMP CKTTY,I * * SUBRNLHOUTINE TO READ INPUT RECORD FROM NODE1 LU * LUIN NOP M0910 LDA LUTYP IF NODE1 DEVICE IS A TTY, SZA DISPLAY INPUT PROMPT CHAR. JMP M0920 * JSB DEXEC IT IS. DISPLAY PROMPT, BECAUSE DEF *+6 OF PERCEPTIBLE DELAY BETWEEN DEF NODE1 RECORDS DEF ICOD2 WRITE, NO-ABORT DEF P1 NODE1 INPUT DEVICE DEF IPRMP ASCII SLASH, SPACE. DEF MD3 JMP ASCER ERROR RETURN * M0920 LDA SUBF GET SUBFUNCTION IOR P1 INCLUDE INPUT LU STA TEMP SET UP CONWD FOR DEXEC * JSB DEXEC READ THE INPUT RECORD. DEF *+6 DEF NODE1 DEF ICOD1 READ, NO-ABORT DEF TEMP CONWD DEF INBUF DEF D128 JMP ASCER ERROR RETURN * STA TEMPM SAVE STATUS WORD. STB INCNT SAVE WORD COUNT. * * CHECK FOR INPUT END OF FILE AT NODE1 LU * JSB EOFCK EOF? JMP LUIN,I YES, RETURN *+1 LDA INCNT CHECK FOR NULL NON-CARD INPUT. SZA,RSS JMP M0910 NO INPUT (TLOG=0), SO IGNORE JSB CKSUM DO CHECKSUM IF REQ'D JMP ERR07 CHECKSUM ERROR ISZ LUIN JMP LUIN,I RETURN *+2 SPC 2 ERR07 LDA B7 REPORT CHECKSUM ERROR JMP OPERS SPC 2 WRNG ASC 6,WARNING : DSTER ASC 6,NODE2 ERROR ORGER ASC 6,NODE1 ERROR HED REMAT: LL REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * LL [,LISTLU [,LOGLU]] N* * CHANGE THE CURRENT LIST DEVICE AND/OR LOG DEVICE TO THE * PARAMETER VALUES GIVEN. IF NEITHER PARAMETER IS GIVEN, * THE CURRENT LIST AND LOG LU'S ARE DISPLAYED ON THE LOGLU. * M1600 LDA CP1 SZA,RSS PARAM 1 PRESENT? JMP M1650 NO LDA P1 YES, CHANGE LISTLU STA LSTLU LDA CP2 SZA,RSS PARAM 2 PRESENT? JMP QUERY NO M1625 LDA P2 YES, CHANGE CURRENT LOGLU SZA,RSS CHECK FOR JMP OPER LOGLU IN AND LUMSK 1-77B RANGE. SZA JMP OPER LDA P2 GET 2ND PARAM AGAIN IOR VBIT IN CASE IT'S A PRINTER STA LOGLU SAVE LOGLU JMP QUERY * M1650 LDA CP2 SZA PARAM 2 PRESENT? JMP M1625 YES * JSB CNUMD NO, CONVERT CURRENT DEF *+3 LISTLU TO ASCII. DEF LSTLU DEF LLMSG+4 * LDA LOGLU GET LOGLU AND B77 STRIP V-BIT STA TEMP SET UP CNUMD CALL JSB CNUMD CONVERT CURRENT DEF *+3 LOGLU TO ASCII. DEF TEMP DEF LLMSG+16 * JSB REIO DISPLAY CURRENT VALUES DEF *+5 OF LISTLU AND LOGLU. DEF ICOD2 DEF LOGLU DEF LLMSG DEF D19 JMP ABORT ERROR RETURN * JMP QUERY SPC 2 LLMSG ASC 19,LISTLU =XXXXXX LOGLU = XXXXXX LUMSK OCT 177700 HED REMAT: RW REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * RW PROCESSOR * * RW,PNAME [,P1 [,P2 [,P3 [,P4 [,P5]]]]] * OR * RW,PNAME [, ] * * SCHEDULE PROGRAM (PNAME) TO RUN AT NODE1 WITH WAIT. * PASSES UP TO 5 OPTIONAL SCHEDULE PARAMETERS * OR A STRING OF UP TO 70 ASCII CHARACTERS * TO THE SCHEDULED PROGRAM. * * M2001 LDB CP1 FIRST PARAM MUST JSB ASCHK BE ASCII. * LDA "R" GET TERM/TEST WORD LDB BUFAD GET INBUF ADR CLE,ELB MAKE IT A BYTE ADR 9v SFB LOOK FOR "R" IN "RW" INB,RSS FOUND IT. MOVE TO NEXT BYTE JMP OPER NOT FOUND LDA "U" REPLACE "RW" WITH "RU" SBT * CCB PRE-SET B TO KNOWN VALUE JSB DEXEC REMOTE SCHED-WITH-WAIT DEF *+11 DEF NODE1 DEF ICOD9 DEF P1 PROG NAME DEF P2 UP TO 5 OPTIONAL SCHED-PARAMS DEF P3 DEF P4 DEF P5 DEF P6 DEF INBUF STRING BUFFER ADR DEF INCNT BUFR COUNT * JMP ASCER ERROR RETURN SZA STATUS = 0? JMP ILSTA NO, ILLEGAL STATUS CPB MD1 ANY RETURN PARAMS? JMP QUERY NO, B HAS NOT CHANGED * STB TEMP YES, SAVE 1ST RETURN PARAM ADR LDA BUFAD ADA D23 STA TEMP1 ADR FOR ASCII PARAMS LDA MD5 SET LOOP COUNT STA TEMP2 * RW01 LDA B,I GET RETURN PARAM STA TEMP1,I SET INTO PRINT BUFR INB BUMP PARAM POINTER ISZ TEMP1 & PRINTBUF POINTER. ISZ TEMP2 BUMP COUNT JMP RW01 LOOP UNTIL DONE * LDB BUFAD GET PRINTBUF POINTER LDA MD5 SET COUNTER TO STORE STA TEMP2 PARAMS IN OCTAL FORMAT JSB OCT6 CONVERT & STORE 1 PARAM ISZ TEMP2 BUMP COUNTER JMP *-2 LOOP UNTIL DONE * JSB STBLK STORE JSB STBLK THREE JSB STBLK DOUBLE BLANKS. * JSB REIO DISPLAY LINE ON LOGLU DEF *+5 DEF ICOD2 DEF LOGLU DEF INBUF DEF D28 JMP ABORT ERROR RETURN * JMP QUERY * ILSTA JSB REIO PRINT "ILLEGAL STATUS" MSG DEF *+5 DEF ICOD2 DEF LOGLU DEF ILMSG DEF B7 JMP ABORT ERROR RETURN * JMP RESET SPC 2 * * SUBROUTINE TO CONVERT TO ASCII & STORE ONE WORD * OCT6 NOP JSB STBLK STORE DOUBLE BLANK LDA TEMP,I GET PARAM ALF AND B17 ISOLATE HIGH 2 DIGITS JSB CVOCT CONVERT 1ST & 2ND DIGITS ALF,ALF RAL,RAL JSB CVOCT CONVERT 2ND & 3RD DIGITS JSB CVOCT CONVERT 4TH & 5TH DIGITS ISZ TEMP BUMP PARAM POINTER JMP OCT6,I SPC 2 CVOCT NOP STA TEMP1 AND B70 ISOLATE LEFT DIGIT ALF,RAL IOR HZERO FORM ASCII DIGIT STA TEMPM SAVE IT LDA TEMP1 GET 2 DIGITS BACK AND B7 ISOLATE RIGHT DIGIT IOR LZERO IOR TEMPM STA B,I INB LDA TEMP,I JMP CVOCT,I SPC 2 STBLK NOP LDA DBBLK STA B,I INB JMP STBLK,I SPC 2 ILMSG ASC 7,ILLEGAL STATUS HED REMAT: LI REQUEST * (C) HEWLETT-PACKARD CO. 1978 SPC 3 * * LI PROCESSOR * * LI,NAMR,LU * * LIST CONTENTS OF NODE1 FILE 'NAMR' * TO A NODE2 LU (DEFAULT = LSTLU). * M2801 LDB CP1 GET 1ST PARAM FLAG JSB ASCHK MUST BE ASCII * LDB CP2 GET 2ND PARAM FLAG SZB LU GIVEN? JSB INTCK YES, MUST BE NUMERIC LDA LSTLU GET DEFAULT LIST LU SZB,RSS LU GIVEN? STA P2 NO, USE DEFAULT * LDA NODE1 STA CRN1+1 FORMAT THE ICR ARRAY * JSB DOPEN OPEN THE FILE AT NODE1 DEF *+7 DEF UDCB DEF IERRR DEF P1 NAME DEF B0 OPTION DEF SECU1 SECURITY DEF CRN1 ICR ARRAY * SSA JSB ERCHK OPEN ERROR * ISZ UOPNF SET UDCB OPEN FLAG LDA B1 STA REC# RESET THE RECORD NUMBER * JSB .DFER STORE THE FILE NAME IN THE TITLE DEF TITL+1 DEF P1 * JSB DLOCF GET THE FILE TYPE AND SIZE TO DEF *+9 INCLUDE IN THE TITLE DEF UDCB DEF IERRR DEF TEMP DEF TEMP DEF TEMP DEF SIZ DEF TEMP DEF TY IP * LDA SIZ CONVERT THE NUMBER OF SECTORS INTO CLE,ERA THE NUMBER OF BLOCKS. SEZ INA STA SIZ * LDA AS.M1 GET ASCII "-1" LDB TYP GET FILE TYPE INB,SZB,RSS TYPE = -1 (CTU FILE)? JMP M2805 YES, GO SET "-1" INTO TYP JSB CNUMD NO, CONVERT TYPE DEF *+3 AND NODE TO ASCII DEF TYP AND STUFF INTO TITLE. DEF P3 USE P3 AS TEMP BUFR LDA P3+2 M2805 STA TYP * JSB CNUMD CONVERT SIZE DEF *+3 DEF SIZ DEF P3 DLD P3+1 DST SIZ * JSB CNUMD DEF *+3 DEF NODE1 DEF NOD * JSB DEXEC NOW THE TITLE IS READY, PRINT IT DEF *+6 DEF NODE2 DEF ICOD2 WRITE, NO-ABORT DEF P2 LU DEF TITL DEF D36 LENGTH JMP ASCER ERROR RETURN * LDA P2 PREPARE CONTROL WORD FOR LINE SKIP ADA B1100 STA TEMP * JSB DEXEC DEF *+5 DEF NODE2 DEF ICOD3 CONTROL, NO-ABORT DEF TEMP CONWD DEF B1 SKIP ONE LINE JMP ASCER ERROR RETURN * LOOP JSB DREAD READ A RECORD DEF *+6 DEF UDCB DEF IERRR DEF RECRD BUFFER DEF D128 REQUESTED LENGTH DEF LEN ACTUAL READ LENGTH * LDB LEN CPB MD1 LENGTH = -1 (I.E. EOF) ? JMP DONE YES, OUT CPA MD12 EOF ? (IERR=-12) JMP DONE YES SSA JSB ERCHK READ ERROR * JSB CNUMD CONVERT RECORD NUMBER DEF *+3 TO ASCII AND STUFF DEF REC# INTO PRINT LINE. DEF P3 USE P3 AS TEMP BUFR DLD P3+1 DST HEDR2 * SPC 2 * * THIS ROUTINE WILL SHIFT TO THE RIGHT THE LINE NUMBER * AND REPLACE THE LEADING BLANKS BY ZEROS. * LDA HEDR2+1 GET LAST 2 DIGITS AND B377 ISOLATE LOW DIGIT 2 STA TEMP SAVE FOR LATER LDA HEDR2+1 GET LAST 2 DIGITS AGAIN AND HB377 KEEP UPPER BYTE CPA BLANK IS IT A BLANK? LDA HZERO YES REPLACE BY A HIGH 0 IOR TEMP MERGE WITH LAST DIGIT STA HEDR2+1 SAVE IN HEADER LDA HEDR2 GET FIRST 2 DIGITS AND B377 KEEP LOWER BYTE CPA LOBLK IS IT A BLANK? LDA LZERO YES, REPLACE BY A LOW ZERO STA TEMP SAVE LDA HEDR2 GET FIRST DIGITS AGAIN AND HB377 KEEP UPPER BYTE CPA BLANK IS IT A BLANK? LDA HZERO YES, REPLACE BY A HIGH ZERO IOR TEMP MERGE WITH SECOND DIGIT STA HEDR2 SAVE * LDA LEN ADD 4 TO THE BUFFER ADA B4 LENGTH FOR THE HEADER WORDS STA LEN * JSB DEXEC DEF *+6 DEF NODE2 DEF ICOD2 WRITE, NO-ABORT DEF P2 LU DEF HEDR1 BUFFER DEF LEN LENGTH JMP ASCER ERROR RETURN * ISZ REC# UPDATE THE RECORD NUMBER * JSB IFBRK DO THEY WANT TO STOP ? DEF *+1 SZA,RSS JMP LOOP NO,CONTINUE STA BRFLG YES, SAVE BREAK INDICATOR * DONE JSB DCLOS CLOSE THE FILE DEF *+3 DEF UDCB DEF IERRR * SSA ERROR? JSB ERCHK YES, REPORT IT (WON'T RETURN) * CLA CLEAR UDCB OPEN FLAG STA UOPNF JSB EOFPR PAGE-EJECT IF LP JMP QUERY * * LOCAL STORAGE AND CONSTANTS * AS.M1 ASC 1,-1 LEN NOP HEDR1 OCT 20040 HEDR2 NOP NOP OCT 20040 DOUBLE BLANK * * RECRD BSS 128 * * REC# NOP TITL OCT 20040 REP 3 NOP ASC 5, TYPE: TYP NOP ASC 11, NUMBER OF BLOCKS: SIZ NOP NOP ASC 10, LOCATED AT NODE: NOD NOP NOP NOP * * HED REMAT: DL REQUEST. * (C) HEWLETT-PACKARD CO. 1978 * * DL [,NAMR [,MSECU m[,LISTLU]]] * * LIST NODE1 FILE DIRECTORY AT LOCAL LISTLU. * NAMR = NAME, CRN & TYPE FILTER FOR REMOTE DISC * OR FLOPPY BASED SYSTEM, OR LU OF CTU FOR CTU BASED SYSTEM. * M0300 LDB CP1 FILTER SPECIFIED? SZB JMP M0305 LDA DBBLK NO. SET FIRST WORD TO BLANKS STA P1 M0305 JSB .DFER MOVE NAME TO REQST DEF DLSN1 DEF P1 * LDA P2 MOVE MASTER SECURITY CODE TO REQST STA DMCOD * LDA CRN1 MOVE LABEL TO REQST STA MDCR * LDA TYPE1 TYPE FILTER SPECIFIED? SZA IOR HIBIT YES,SET SIGN BIT STA DTYP MOVE TYPE FILTER TO REQST * LDA LSTLU GET DEFAULT LISTLU LDB CP3 LISTLU PARAM PRESENT? SZB,RSS NO, USE DEFAULT * STA P3 * CLA INDICATE NEW REQUEST IN REQST STA NEWRQ * M0315 CLA,INA SET IN STREAM TYPE STA DSTRM * LDA D27 INDICATE 54 CHAR LINE IN REQST STA DLEN LDA NODE1 SET NODE IN REQST (REQST IS BEING STA DDEST SENT TO NODE1) * * SEND REQST & PRINT DIRECTORY ON LIST LU * JSB D65MS SEND REQUEST TO NODE1 DEF *+8 DEF CNWD1 NO ABORT. DATA ASSOC WITH REPLY DEF DSTRM REQST DEF D23 REQST LENGTH DEF DLDAT DATA BUFR DEF B0 NO DATA ASSOCIATED WITH REQST DEF D27 INCOMING DATA BUFR LENGTH DEF D23 MAX REPLY LENGTH JMP ASCER ERROR RETURN * LDA DLST NORMAL RETURN. CHECK STATUS SZA,RSS DONE? JMP M0320 NO JSB LCALS FORCE LOCAL NODE FOR EQTYP CALL LDA P3 GET LOCAL LISTLU JSB EQTYP CHECK ITS EQUIPMENT TYPE JSB LCALC RESET NODE CPA D10 IS IT A LINE PRINTER? RSS JMP QUERY NO LDA P3 YES, SET UP EXEC CALL TO IOR B1100 DO A PAGE EJECT. STA TEMP * JSB EXEC LP PAGE EJ5ECT DEF *+4 DEF B3 DEF TEMP DEF MD1 * JMP QUERY * M0320 JSB REIO PRINT A LINE ON LISTLU DEF *+5 DEF ICOD2 WRITE DEF P3 LISTLU DEF DLDAT DEF DLEN JMP ABORT ERROR RETURN * JSB IFBRK CHECK BREAK FLAG DEF *+1 SZA,RSS IS IT SET? JMP M0315 NO, GET ANOTHER LINE STA BRFLG YES, SAVE BREAK INDICATOR JMP QUERY AND GET NEXT COMMAND. * DLDAT BSS 27 DLIST DATA BUFR HED REMAT: EX REQUEST. * (C) HEWLETT-PACKARD CO. 1978 * * EX PROCESSOR * * TERMINATE THE OPERATOR INTERFACE PROGRAM. * M0500 JSB REIO DISPLAY TERMINATION MESSAGE DEF *+5 ON LOG DEVICE. DEF ICOD2 DEF LOGLU DEF TRMSG DEF B6 JMP ABORT ERROR RETURN * JSB CLSFL CLOSE OPEN FILES. * JSB EXEC EXIT. DEF *+2 DEF B6 * TRMSG ASC 6, $END REMAT HED REMAT: SW REQUEST. * (C) HEWLETT-PACKARD CO. 1978 * * SW [,NODE1 [,NODE2 [,SECURITY CODE]]] * OR * SW,LOCAL * * SELECT NODE1 AND/OR NODE2 FOR SUBSEQUENT OPERATOR * REQUESTS. IF NO PARAMETERS ARE GIVEN, DISPLAYS THE * CURRENT VALUES OF NODE1 AND NODE2. 'SW,LOCAL' SETS BOTH * NODES TO THE LOCAL NODE #. THE SECURITY CODE * SET IN 'LSTEN' MUST BE ENTERED IN ORDER TO SWITCH * FROM A LOCAL NODE TO A REMOTE NODE. * M0990 LDA CP1 SEE IF VALUE SUPPLIED SZA IF NOT SUPPLIED, PRINT CURRENT VALUE JMP M0991 SUPPLIED LDA CP2 IS PARAM 2 HERE ? SZA JMP M0991 YES SW MOD * LDA NODE1 NO, CHECK FOR NEG. LU SSA CMA,INA MAKE POSITIVE FOR CNUMD CALL STA TEMP JSB CNUMD SW DISPLAY FUNCTION DEF *+3 DEF TEMP DEF ORNM LDB MSIGN IF NODE1 IS LDA NODE1 NEGATIVE, THEN SSA INSERT MINUS SIGN STB ORNM+1  INTO DISPLAY BUFR. * LDA NODE2 REPEAT FOR NODE2 SSA CMA,INA STA TEMP JSB CNUMD DEF *+3 DEF TEMP DEF DSTNM LDB MSIGN LDA NODE2 SSA STB DSTNM+1 * JSB REIO DISPLAY MESSAGE DEF *+5 DEF ICOD2 DEF LOGLU DEF SWBUF DEF D15 MESSAGE LENGTH JMP ABORT ERROR RETURN * JMP QUERY GET ANOTHER REQUEST * M0991 LDB CP1 CPB B2 1ST PARAM ASCII? JMP SWALF YES, CHECK FOR "LOCAL" SZB,RSS NO, IS IT MISSING? JMP SW1 YES, GO CHECK 2ND PARAM LDA P1 NO, GET IT CPA #NODE DOES HE WANT NODE1 LOCAL? RSS YES, GO CHECK 2ND PARAM JMP SW2 NO, WANTS REMOTE. CHECK HIM OUT * SW1 LDB CP2 SZB,RSS 2ND PARAM MISSING? JMP M0992 YES, LET HIM DO IT LDA P2 NO, GET IT CPA #NODE DOES HE WANT NODE2 LOCAL? JMP M0992 YES, ALLOW SWITCH SW2 LDA PRMPT NO, CHECK HIM OUT CPA "#" IS HE ALREADY REMOTE? JMP M0992 YES, LET HIM DO WHAT HE WANTS LDB CP3 GET 3RD PARAM FLAG JSB ASCHK IF NOT ASCII, WON'T RETURN LDB P3 GET 3RD PARAM UNL OCT 60001,2011,23,2011 JMP *-2 AND *+7 IOR *+7 STA *+1 OCT 0,7000,60001 JMP *+5 OCT 17,100020,2003,5477 LST CPB #SWRD SAME AS SECURITY CODE? RSS YES, ALLOW SWITCH JMP OPER NO, SWITCH NOT ALLOWED M0992 LDA NODE1 DEFAULT LDB CP1 CPB B1 PARAM NUMERIC ? LDA P1 YES, GET IT STA NODE1 SAVE IT LDB NODE2 DEFAULT LDA CP2 GET 2ND PARAM FLG CPA B2 2ND PARAMETER ALPHAMERIC? JMP OPER YES, ERROR CPA B1 NUMERIC? LDB P2 OK GET 2ND PARAM STB NODE2 SAVE IT a JMP QUERY GO BACK FOR NEXT COMMAND * SWALF DLD P1 GET THE FIRST 2 WORDS OF THE ALFAMERIC PARAMETER CPA ALO FIND IF THIS IS A "LOCAL" SWITCH. RSS THAT'S CLOSE ENOUGH JMP OPER FORGET IT LDA #NODE GET THE LOCAL NODE NUMBER AGAIN STA NODE1 SAVE IT IN NODE1 STA NODE2 AND IN NODE2 JMP QUERY GO BACK FOR NEXT COMMAND. * SWBUF ASC 4,NODE1 = ORNM BSS 3 ASC 5, NODE2 = DSTNM BSS 3 ALO ASC 1,LO MSIGN ASC 1, - HED REMAT: TE REQUEST. * (C) HEWLETT-PACKARD CO. 1978 * * TE,-ASCII MESSAGE- PROCESSOR. * * SEND A MESSAGE TO THE NODE1 STATION OPERATOR. * M1000 LDB CP1 SZB,RSS JMP OPER ERROR 10 IF NO MESSAGE. * CLB FIND THE COMMA IN INBUF. LDA BUFAD STA TEMP * M1010 LDA TEMP,I GET NEXT WORD. AND HB377 ALF,ALF CPA COM JMP M1020 COMMA IN LEFT BYTE. * LDA TEMP,I AND B377 CPA COM JMP M1030 COMMA IN RIGHT BYTE. * ISZ TEMP BUMP TO NEXT WORD. INB COUNT WORDS SKIPPED. JMP M1010 LOOP. * M1020 LDA TEMP,I LEFT. CLEAR COMMA AND B377 STA TEMP,I CMB,INB ADJUST WORD COUNT ADB INCNT STB INCNT CPB D37 IF EXACTLY 72 CHAR MESG, RSS ALLIGN MESSAGE TO WORD JMP M1040 BOUNDARY AND DECREMENT INCNT. LDA TEMP ADA D36 LDA A,I AND B377 CPA LOBLK RSS JMP M1040 LDB TEMP FORM DEST BYTE ADR CLE,ELB LDA B FORM SOURCE BYTE ADR INA MBT D72 ALLIGN TO WORD BOUNDARY LDA INCNT DECREMENT INCNT ADA MD1 STA INCNT JMP M1040 * M1030 ISZ TEMP RIGHT. BUMP TO NEXT WORD. INB * CMB,INB ADJUST WORD COUNT. ADB INCNT STB INCNT * M1040 JSB DMESG SEND MESSAGE TO 'NODE1 DEF *+4 DEF NODE1 DEF TEMP,I BUFFER DEF INCNT LENGTH. SZA CHECK A-REG FOR ERROR. JMP ASCER REPORT ERROR * JMP QUERY HED REMAT: LO REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * LO PROCESSOR * * LO [,NAMR [,PARTITION # [,# PAGES]]] * * LOAD AN ABSOLUTE PROGRAM FROM A NODE1 FILE OR * LOCAL 'LU' (NAMR) TO AN RTE-M SYSTEM AT NODE2. * DEFAULT FOR NAMR IS LU 4. * M1400 LDB CP1 GET 1ST PARAM FLAG LDA B4 GET DEFAULT LOCAL LU (=4) SZB,RSS MISSING? STA P1 YES, USE DEFAULT LDA P1 NO, GET THE PARAM SZA,RSS IF ZERO, JMP OPER GIVE ERROR. * JSB .DFER SAVE FILE NAME DEF PB+10 OR LU IN DEF P1 REQUEST BUFFER. * * FORMAT 1ST APLDR SCHED-PARAM & SET INTO REQST BUFR * LDA LOGLU AND B77 SET FUNCTION CODE TO 1 IF BOTH ALF P2 & P3 ARE MISSING OR 0, ELSE TO IOR ICOD1 2. INCLUDE REMOTE BIT & LOGLU. SET LDB P2 INTO REQST BUFR. SZB,RSS LDB P3 SZB INA STA PB+8 * * FORMAT 2ND APLDR SCHED-PARAM & SET INTO REQST BUFR * LDB CP2 GET 2ND PARAM FLAG SZB MISSING? JSB INTCK NO, MUST BE NUMERIC LDA P2 GET PARTITION # PARAM AND B77 ISOLATE LOWER 6 BITS STA TEMP SAVE LDB CP3 GET 3RD PARAM FLAG? SZB MISSING? JSB INTCK NO, MUST BE NUMERIC LDA P3 GET # PAGES PARAM AND B37 ISOLATE LOWER 5 BITS ALF,ALF POSITION TO BITS 10:14 ALS,ALS IOR TEMP INCLUDE PARTITION # STA PB+9 SET INTO REQST BUFR * DLD SECU1 SET SECU CODE & CRN DST PB+13 INTO REQST BUFR. LDA NODE1 SET FILE NODE INTO STA PB+15 REQST BUFR. * LDA NODE2 SET REMOTE RTE-M  STA PB+3 NODE # INTO REQST BUFR. * JMP M1505 GO FINISH UP & SEND REQST HED REMAT: FL REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * FL(USH) PROCESSOR * * FL,NAMR,NODE # * * CLOSE FILE1 AT NODE1 (PREVIOUSLY SELECTED BY SW * COMMAND) TO ANY USER AT THE GIVEN NODE #. IF * NODE # = -1, CLOSE FILE1 TO USERS AT ALL NODES. * NOTE THAT ALL MAIN PARAMETERS ARE REQUIRED, * PLUS THE NAMR SUBPARAMETER 'CRN'. * THIS COMMAND IS ONLY ALLOWED FROM A TTY-TYPE * INPUT DEVICE. * * M2401 LDA LUTYP INPUT LU MUST BE TTY SZA JMP ERR45 IT IS NOT * LDB CP1 GET 1ST PARAMETER FLAG JSB ASCHK MUST BE ASCII JSB .DFER SET FILE NAME DEF PB+5 INTO REQST BUFR DEF P1 AND INTO MESG JSB .DFER DEF FMSG1+3 DEF P1 * LDA CRN1 GET CRN SUBPARAMETER SZA,RSS GIVEN AND NON-ZERO? JMP OPER NO, GIVE INPUT ERROR STA PB+8 YES, SET INTO REQST BUFR * LDB CP2 GET 2ND PARAM FLAG JSB INTCK MUST BE NUMERIC LDA P2 GET 2ND PARAMETER SSA IS IT POSITIVE? CPA MD1 NO, THEN IT BETTER BE -1 RSS IT IS. OK JMP OPER IT ISN'T. ERROR * STA PB+9 SET P2 INTO REQST BUFR SSA NODE # POSITIVE? JMP M2410 NO JSB CNUMD YES, CONVERT NODE # DEF *+3 DEF P2 NODE # DEF FMSGA+3 LDA .FMGA MOVE NODE # LDB .FMG2 MVW D8 LDA D27 SET MSG LENGTH STA TEMP FOR REIO CALL JMP M2415 * M2410 LDA .FMGB MOVE "ALL NODES" TO LDB .FMG2 OUTPUT MSG MVW B7 LDA D26 SET MSG LENGTH STA TEMP FOR REIO CALL * M2415 JSB CNUMD CONVERT NODE1 DEF *+3 DEF NODE1 DEF FMSG1+10 * JSB REIO OUTPUT MESSAGE TO LOGLU DEF *+5  DEF ICOD2 DEF LOGLU DEF FMSG1 DEF TEMP MSG LENGTH JMP ABORT ERROR RETURN * LDA P.STK,I GET INPUT LU IOR B400 INCLUDE ECHO BIT STA TEMP SET CONWD FOR REIO * JSB REIO DEF *+5 DEF ICOD1 DEF TEMP CONWD DEF TEMP+1 INPUT BUFR DEF B1 MAX INPUT LENGTH JMP ABORT ERROR RETURN * LDA TEMP+1 GET INPUT CPA "NO" WAS ANSWER "NO"? JMP QUERY YES, SO GET NEXT COMMAND CPA "YE" WAS ANSWER "YES"? RSS YES, CONTINUE JMP OPER MUST BE "YES" OR "NO". ERROR * LDA B6 SET STREAM, STA PB DEST, AND LDA NODE1 FCODE INTO STA PB+3 REQST BUFR LDA D13 STA PB+4 * JSB D65MS SEND REQST BUFR TO NODE1 DEF *+8 DEF CNWD1 NO ABORT DEF PB REQST BUFR DEF D10 REQST BUFR LENGTH DEF * DUMMY DATA BUFR DEF B0 NO DATA ASSOCIATED WITH REQST DEF B0 NO DATA ASSOCIATED WITH REPLY DEF D10 MAX REQST/REPLY LENGTH * JMP ASCER PROCESS ASCII ERROR CODE LDA PB+5 CHECK NUMERIC CODE STA IERRR IN THE REPLY SSA IF NEGATIVE. JSB ERCHK JSB CNUMD CONVERT # ENTRIES DEF *+3 DEF PB+5 FLUSHED TO ASCII AND DEF FMSG3+12 SET INTO MESSAGE. * JSB REIO OUTPUT MESSAGE TO LOGLU DEF *+5 DEF ICOD2 DEF LOGLU DEF FMSG3 DEF D15 JMP ABORT ERROR RETURN * JMP QUERY GET NEXT COMMAND * ERR45 LDA D45 REPORT ERROR JMP OPERS SPC 1 FMSG1 ASC 19,CLOSE AT NODE TO USERS AT FMSG2 BSS 8 .FMG2 DEF FMSG2 .FMGA DEF *+1 FMSGA ASC 8, NODE ? _ * .FMGB DEF *+1 FMSGB ASC 7, ALL NODES? _ * FMSG3 ASC 15,# RFAM ENTRIES FLUSHED = XXXXX "YE" ASC NLH1,YE "NO" EQU SWBUF ASCII "NO" HED REMAT: PU REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * PU PROCESSOR * * PU,NAMR * * PURGE A FILE 'NAMR' AT NODE1. * * M2501 LDA CP1 GET 1ST PARAM FLAG JSB ASCHK MUST BE ASCII * LDA NODE1 STA CRN1+1 FORMAT THE CRN ARRAY * JSB DPURG PURGE THE FILE DEF *+6 DEF UDCB DEF IERRR DEF P1 FILE NAME DEF SECU1 SECURITY CODE DEF CRN1 CRN ARRAY * SSA JSB ERCHK ANY ERROR ?o JMP QUERY GET NEXT REQUEST HED REMAT: RN REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * RN PROCESSOR * * RN,NAMR,NEW NAME * * RENAME A FILE AT NODE1. * * M2550 LDB CP1 GET 1ST PARAM FLAG JSB ASCHK MUST BE ASCII * LDB CP2 GET 2ND PARAM FLAG JSB ASCHK NEW NAME MUST BE ASCII * LDA NODE1 STA CRN1+1 FORMAT CRN ARRAY * JSB DNAME RENAME THE FILE DEF *+7 DEF UDCB DEF IERRR DEF P1 OLD NAME DEF P2 NEW NAME DEF SECU1 SECURITY CODE DEF CRN1 CRN ARRAY * SSA JSB ERCHK ANY ERROR ? JMP QUERY GET NEXT HED REMAT: CR REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * CR PROCESSOR * * CR,NAMR * * CREATE A FILE AT NODE1. !FN* * M2701 LDB CP1 GET 1ST PARAM FLAG JSB ASCHK MUST BE ASCII * LDA SIZE1 GET # BLOCKS PARAM ADA MD1 ERROR IF <= 0 SSA JMP OPER * LDA CRN1 FORMAT THE LDB NODE1 CRN ARRAY DST TEMP * JSB DCRET CREATE THE FILE DEF *+8 DEF UDCB DEF IERRR DEF P1 NAME DEF SIZE1 # BLOCKS/REC-SIZE (2-WORD ARRAY) DEF TYPE1 TYPE DEF SECU1 ISECU DEF TEMP CRN ARRAY (2 WORDS) * SSA JSB ERCHK * JSB DCLOS CLOSE THIS NEW FILE DEF *+3 DEF UDCB DEF IERRR * SSA JSB ERCHK ERROR JMP QUERY GET NEXT HED REMAT: PL REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * PL REQUEST * * PL [,LIST LU [,OPT]] * * LIST PROGRAM INFO FROM NODE1 TO THE LISTLU * AT THE LOCAL NODE. IF OPT=0, LIST ALL PROGRAMS, * PRIORITIES, & BOUNDS. IF OPT=1, LIST PARTITIONS & * THEIR PROGRAMS, PARTITION SIZE, AND PAGE #. * * M1500 LDB CP1 GET TYPE FLAG PRAM #1 SZB MISSING? JSB INTCK NO, MUST BE NUMERIC LDA P1 GET 1ST PARAM SZA,RSS ZERO OR MISSING? LDA LSTLU YES, USE DEFAULT LIST LU AND B77 ALF POSITION LIST LU IOR HIBIT INCLUDE REMOTE-BIT STA PB+8 SET INTO REQST BUFR * LDB CP2 GET 2ND PARAM FLAG SZB MISSING? JSB INTCK NO, MUST BE NUMERIC LDA P2 GET 2ND PARAM STA PB+9 SET INTO REQST BUFR * LDA NODE1 SET REMOTE NODE # STA PB+3 INTO REQST BUFR. * M1505 LDA B3 SET STREAM TYPE STA PB INTO REQST BUFR. * LDA D9 SET ICODE TO SCHED- STA PB+4 WITH-WAIT. * JSB .DFER SET "APLDR"  DEF PB+5 INTO REQST BUFR. DEF APNAM SPC 2 * * HERE WE SEND REQST TO SCHEDULE APLDR WITH WAIT * TO DO A DOWN LOAD OR PROGRAM LIST. * CONTROL WILL BE RETURN WHEN APLDR IS COMPLETE * LOPL1 JSB D65MS SEND REQUEST TO SPECIFIED NODE DEF *+8 DEF CNWD2 NO ABORT, LONG TIMEOUT DEF PB REQST BUFR DEF D16 REQST LENGTH DEF * DUMMY DATA BUFR DEF B0 NO DATA ASSOCIATED WITH REQST DEF B0 NO DATA ASSOCIATED WITH REPLY DEF D16 MAX REQST/REPLY LENGTH JMP ASCER ERROR RETURN * LDB ECOD2 GET B-REG VALUE FROM REPLY SZB,RSS ANY RETURN PARAMETERS? JMP QUERY NO * LDA PB+7 YES, GET 1ST PARAM CPA HIBIT SPECIAL I/O ERROR INDICATOR? RSS YES, APLDR UNABLE TO PRINT MESSAGE JMP QUERY NO, APLDR PRINTED ALL MESSAGES DLD PB+8 GET 2ND TWO RETURN PARAMS (ASCII JMP ASCER ERROR CODE) AND DISPLAY. SPC 2 PB BSS 31 COMMON BUFFER FOR REQST'S SPC 1 * * DLIST REQST/REPLY BUFFER * DSTRM EQU PB STREAM TYPE DDEST EQU PB+3 REQST DESTINATION NODE # DLST EQU PB+7 STATUS DLEN EQU PB+8 PRINT LINE LENGTH NEWRQ EQU PB+9 NEW REQ FLAG (0=NEW REQ) DLSN1 EQU PB+10 FILE NAME FILTER (3 WORDS) DLSN3 EQU PB+12 DMCOD EQU PB+13 SECURITY CODE MDCR EQU PB+14 LABEL DTYP EQU PB+15 FILE TYPE * ECOD1 EQU PB+4 ERROR CODES ECOD2 EQU PB+5 IN REPLY ECOD3 EQU PB+6 BUFR. SPC 2 APNAM ASC 3,APLDR HED REMAT: SL REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * SLAVE PROGRAM LIST REQUEST * SLIST (,LIST LU) * * LIST ALL PTOP SLAVE PROGRAMS AT NODE1 * ON THE LOCAL LIST LU * * * M1700 LDA CP1 SEE IF LIST LU SUPPLIED LDB LSTLU GET DEFAULT CPA B1 IF TYPE=1 USE SUPPLIED RSS YES...DON'T USE DEFAULT STB P1 SAVE FOR PRINTING LDA DBBLK GET SPACE WORD STA CP3 SAVE FOR NAME MOVE * LDA B7 "SL" FUNCTION CODE JSB PTPSB GO FORMAT REQUEST AND CALL D65MS DEC 128 DATA BUFFER SIZE * JSB REIO PRINT HEADER MESSAGE DEF *+5 DEF ICOD2 DEF P1 DEF HDMSG DEF D10 JMP ABORT ERROR RETURN * LDA BUFAD GET READ BUFFER ADDRESS LDB 0,I 1ST WORD HAS # OF ENTRIES CMB,INB,SZB,RSS JMP LPFOR NO ENTRIES STB COUNT SET LOOP COUNTER INA POINT TO 1ST NAME * RDLOP STA RTEMP SET NAME BUFFER POINTER * JSB .DFER MOVE NAME TO PRINT AREA DEF P3 RTEMP NOP * JSB REIO WRITE OUT LINE DEF *+5 DEF ICOD2 DEF P1 WRITE LU DEF CP3 DEF MD7 7 CHARACTERS JMP ABORT ERROR RETURN * LDA RTEMP ADA B3 GET TO NEXT ENTRY ISZ COUNT BUMP COUNTER JMP RDLOP GET NEXT ENTRY * LPFOR JSB LCALS SEE IF IT IS THE LINE-PRINTER LDA P1 GET LU JSB EQTYP GET EQT TYPE JSB LCALC CPA D10 LP? RSS YES JMP QUERY NO LDA P1 IOR B1100 OR IN CONTROL WORD STA P1 * JSB EXEC DO A PAGE EJECT DEF *+4 DEF B3 DEF P1 DEF MD1 * JMP QUERY AND RETURN FOR NEXT ENTRY SPC 1 COUNT NOP HDMSG ASC 10, ACTIVE SLAVE PROGS HED REMAT: SO REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * SO REQUEST * SO [,PNAME] * * TERMINATES A PTOP SLAVE PROGRAM AT NODE1. IF NO * PROGRAM IS SPECIFIED, TERMINATES ALL CURRENT * PTOP SLAVES AT THE NODE1 CPU. * M1800 JSB .DFER MOVE NAME INTO REQUEST DEF PB+8 DEF P1 * LDA B6 "SO" IS PTOP FUNCTION 6 JSB PTPSB FORMAT REQUEST AND CALL D65MS DEC 0 NO DATA BUFFER * JMP QUERY RETURN SPC 4 * * THIS SUBROUTINE IS USED IN COMMON FOR2 "SO" AND "SL". IT * FORMATS THE PTOP REQUEST AND CALLS D65MS TO SEND THE * REQUEST AND GET THE REPLY (AND DATA). * PTPSB NOP STA $FUNC SAVE PTOP FUNCTION CODE LDA B4 STA PB SET STREAM TYPE (4) LDA NODE1 STA PB+3 SET REQST DESTINATION NODE CLA STA ECOD1 INITIALIZE ERROR FIELDS STA ECOD3 * JSB D65MS SEND REQ (& RCV DATA IF SL) DEF *+8 DEF CNWD1 NO ABORT DEF PB DEF D11 11 WORD REQUEST DEF INBUF DEF B0 NO DATA ASSOCIATED WITH REQST DEF PTPSB,I INCOMING DATA BUFR LENGTH DEF D11 JMP ASCER D65MS DETECTED ERROR * ISZ PTPSB JMP PTPSB,I RETURN * $FUNC EQU PB+7 * * HED REMAT: LC REQUEST * (C) HEWLETT-PACKARD CO. 1978 * * $LC * * DISPLAY LOCAL NODE # ON LOGLU. * * M2100 LDA #NODE GET LOCAL NODE # STA P3 SAVE IT TEMPORARILY JSB CNUMD CONVERT TO ASCII DEF *+3 DEF P3 DEF PRMG1 * JSB REIO SEND MESSAGE DEF *+5 DEF ICOD2 DEF LOGLU DEF PRBUF DEF D10 JMP ABORT ERROR RETURN * JMP QUERY GO BACK FOR MORE INPUT SPC 2 * * PRBUF ASC 7,LOCAL NODE = PRMG1 ASC 3, XXXXX HED REMAT: SUBROUTINES * (C) HEWLETT-PACKARD CO. 1978 * * SUBROUTINE TO CALCULATE ACTUAL CHECKSUM AND COMPARE * IT TO THE CHECKSUM IN THE INPUT RECORD. RETURNS *+1 * IF ERROR DETECTED, ELSE *+2. EXPECTS RECORD TO BE IN * 'INBUF', AND 'CSFLG' TO BE SET AS FOLLOWS: 0=NO CHECKSUM, * "BR"=BINARY RELOCATABLE RECORD, "AB"=ABSOLUTE RECORD. * CKSUM NOP LDA CSFLG SZA,RSS CHECKSUM REQUIRED? JMP CK4 NO * LDA INBUF CHECK RECORD LENGTH ALF,ALF IN WORD 1. STA RLEN CMA,INA ADA B377 SSA OK? JMP CKSUM,I NO, TAKE ERROR RETURN (*+1) * LDA INBUF+1  START CALCULATED CKSUM STA CSCAL WITH WORD 2. * LDA MD1 CALCULATE OFFSET OF -1 LDB CSFLG FOR BR, +1 FOR BA CPB "BR" BR? JMP CK1 NO LDA B1 YES, SET OFFSET TO +1 LDB CSCAL AND ADD WORD 3 TO CKSUM ADB INBUF+2 STB CSCAL * CK1 ADA RLEN COMPUTE LAST WORD ADR = ADA BUFAD RECORD LENGTH + BUFR ADR STA BPLST + OFFSET. * INA SAVE CHECKSUM FROM INPUT LDA A,I RECORD (LAST WORD IF BA, LDB CSFLG WORD 3 IF BR) IN CPB "BR" 'CSINP'. LDA INBUF+2 STA CSINP * * CALCULATED CHECKSUM 'CSCAL' SO FAR CONTAINS THE SUM * OF WORD 2 AND, IF BR FORMAT, WORD 3. NOW ADD WORDS * 4 THRU THE LAST DATA WORD (ADR=BPLST) AND COMPARE * WITH CHECKSUM FROM INPUT RECORD, 'CSINP'. * LDB BUFAD INITIALIZE B = WORD 4 ADR ADB B3 * CK2 LDA B DOES BUFR POINTER EXCEED CMA,INA ADR OF LAST WORD? ADA BPLST SSA JMP CK3 YES, CHECKSUM COMPLETE LDA CSCAL NO, ADD THE ADA B,I CURRENT WORD, STA CSCAL BUMP POINTER INB AND LOOP. JMP CK2 * CK3 LDA CSCAL IF CALCULATED CHECKSUM CPA CSINP = INPUT RECORD CHECKSUM, CK4 ISZ CKSUM RETURN *+2, JMP CKSUM,I ELSE *+1. * * RLEN NOP RECORD LENGTH CSCAL NOP CALCULATED CHECKSUM CSINP NOP INPUT CHECKSUM BPLST NOP PNTR TO LAST DATA WORD SPC 2 * * SUBROUTINE TO CHECK FORMAT PARAMETER OF $DU AND * $ST COMMANDS TO SEE IF CHECKSUM IS REQUIRED, AND * TO SET THE PROPER FILE TYPE PARAMS FOR THE FILE * TO BE CREATED IN $ST. * CKFMT NOP LDA B400 SET ECHO BIT STA SUBF CLA CLEAR THE STA CSFLG CHECKSUM FLAG. LDA CP3 GET FORMAT PARAM FLAG SZA,RSS PRESENCtT? JMP CKF01 NO * TRYAS LDB P3 YES, GET FORMAT PARAM CPB "AS" ASCII? JMP CKF01 YES LDA B300 NO, SET CONTROL BITS STA SUBF V AND M. * TRYBR CPB "BR" BR FORMAT? RSS YES JMP TRYBN NO STB CSFLG SET CHECKSUM FLAG LDA TYPE2 GET PARAM 2 FILE TYPE SZA,RSS GIVEN? LDA B5 NO, DEFAULT TO TYPE 5 STA TYPE2 JMP CKF01 * TRYBN CPB "BN" BN FORMAT? JMP CKF01 YES, V & M BITS ALREADY SET * TRYBA CPB "BA" BA FORMAT? RSS YES JMP OPER NO, ILLEGAL FORMAT PARAM STA CSFLG SET CHECKSUM FLAG LDA TYPE2 SZA,RSS TYPE GIVEN? LDA B7 NO, DEFAULT TO TYPE 7 STA TYPE2 LDA B2300 STA SUBF * CKF01 LDA TYPE2 IF TYPE NOT GIVEN, SZA,RSS DEFAULT TO TYPE 3. LDA B3 STA TYPE2 JMP CKFMT,I SPC 2 * * SUBROUTINE TO TEST FOR END OF FILE ON LOCAL DEVICES. * * TEMPM = EQT STATUS WORD. * INCNT = EQT WORD COUNT. * LUTYP = EQUIPMENT TYPE. * JSB EOFCK * EOF RETURN * NORMAL RETURN * EOFCK NOP CLE LDA LUTYP EOF DEPENDS ON DEVICE. SZA,RSS JMP EOF1 TTY. CPA B1 JMP EOF1 PHOTOREADER. CPA D9 JMP EOF4 CARD READER. CPA D13 JMP EOF4 MARK SENSE. CCE DEFAULT TO MAG TAPE. * EOF1 LDA TEMPM GET STATUS WORD. ALF,ALF SEZ,RSS IF E=1, CHECK BIT 7. JMP EOF2 SSA JMP EOF3 EOF2 RAL,RAL CHECK BIT 5. SSA,RSS JMP EOF5 NO EOF. * EOF3 LDA LUTYP END OF FILE. SZA IF TTY, OUTPUT CAR. RET. JMP EOFND * JSB DEXEC DEF *+6 DEF #NODE LOCAL NODE DEF ICOD2 WRITE, NO-ABORT DEF P.STK,I LU DEF CR DEF B1 JMP ASCER ERROR RETURN ** JMP EOFND * EOF4 LDA INCNT CHECK FOR BLANK CARD. SZA EOF5 ISZ EOFCK EOFND JSB LCALC CLEAR IF LOCAL JMP EOFCK,I * * SUBROUTINE TO CHECK FOR ASCII OR NAMR PARAMETER. ENTER * WITH (B) = PARAM FLAG. IF PARAM OK, RETURNS WITH * REGISTERS UNCHANGED. WILL NOT RETURN IF ERROR FOUND. * ASCHK NOP (B) = PRAMS FLAG WORD SZB,RSS JMP ERR55 IF NOT THERE OR CPB B1 IF NUMERIC, JMP ERR56 GIVE ERROR. JMP ASCHK,I * * SUBROUTINE TO CHECK INTEGER PARAMS. ENTER WITH (B) = PARAM * FLAG. IF PARAM NUMERIC, RETURNS WITH REGISTERS UNCHANGED. * WILL NOT RETURN IF ERROR FOUND. * INTCK NOP SZB,RSS JMP ERR55 ERROR 55 IF MISSING. CPB B1 PARAM NUMERIC? JMP INTCK,I YES, RETURN JMP ERR56 ERROR 56 IF NOT NUMERIC. * * SUBROUTINE TO FIND EQUIPMENT TYPE OF AN LU AT NODE2 * EQTYP NOP (A) = LU. STA TEMP1 ADA MD1 IF LU=1 (SYSTEM CONSOLE), SZA,RSS THEN EQUIP-TYPE CODE MUST JMP EQTYP,I BE 0, SO RETURN WITH A=0. * JSB DEXEC REMOTE STATUS CALL DEF *+7 DEF NODE2 DEF ICD13 STATUS, NO-ABORT DEF TEMP1 ICNWD DEF TEMP2 EQT5 RETURNED HERE DEF TEMP2+1 EQT4 RETURNED HERE DEF SUBCH SUBCHANNEL INFO RETURNED HERE JMP ASCER ERROR RETURN * LDA TEMP2 ALF,ALF AND B77 STA TEMP2 CPA B5 DVR05? JMP SUBC? YES CPA B7 DVR07? JMP SUBC? YES JMP EQTYP,I NO, RETURN. A = EQUIP-TYPE * SUBC? LDA SUBCH GET 3RD STATUS WORD AND B17 ISOLATE SUBCHAN # SZA IF SUBCHAN=0, RETURN LDA TEMP2 WITH A=0, ELSE A=DVR TYPE. JMP EQTYP,I * SUBCH NOP SUBCHANNEL # SPC 1 * * SUBROUTINE TO FORCE NODE2 LU TO LOCAL * CALLING SEQUENCE * JSB LCALS * NORMAL RETURN * GXLCALS NOP LDA #NODE GET LOCAL NODE # LDB NODE2 STA NODE2 STORE LOCAL # STB DESTX SAVE THE REAL ONE JMP LCALS,I AND RETURN SPC 1 DESTX NOP SPC 1 * * SUBROUTINE TO RESET NODE2 LU * CALLING SEQUENCE * JSB LCALC * NORMAL RETURN * LCALC NOP LDB DESTX FETCH THE OLD ONE STB NODE2 RESTORE NODE2 JMP LCALC,I AND RETURN SPC 1 * * SUBROUTINE TO PROCESS ERRORS IN RFA CALLS. * ERCHK NOP LDA IERRR CAN BE POS. OR NEG. SZA,RSS JMP ERCHK,I NO ERROR. * LDB BLANK MAKE POSITIVE, SET SIGN WORD. SSA,RSS JMP ERCK1 LDB MINUS CMA,INA ERCK1 STB EMSG+3 * STA TEMP CONVERT TO ASCII JSB CNUMD DEF *+3 DEF TEMP DEF INBUF USE AS RESULT BUFR * LDA INBUF+2 STUFF LAST 2 DIGITS INTO MSG IOR HB20 LEADING BLANK TO ASCII 0. STA EMSG+4 LDA INBUF+1 SET UP SIGN AND AND B377 FIRST DIGIT. IOR EMSG+3 IOR B20 LEADING BLANK TO ASCII 0. STA EMSG+3 STORE IN MESSAGE BUFFER. * JSB REIO DISPLAY ERROR MESSAGE. DEF *+5 DEF ICOD2 DEF LOGLU DEF EMSG DEF B5 JMP ABORT ERROR RETURN * RESET LDA STKHD RESET STACK POINTER STA P.STK CLA RESET XFR FILE STA TRCRN VARIABLES TO STA TRSEC DEFAULTS. LDA #NODE STA TRNOD * JSB CLSFL CLOSE FILES CURRENTLY OPEN. * LDA TRFLG IF RUNNING FROM SCHEDULE- SZA PARAM COMMAND FILE, JMP ABORT PRINT MESSAGE AND EXIT. * JSB LCALS SET FOR LOCAL EQT CHECK LDA P.STK,I GET INPUT LU JSB EQTYP GET IT'S EQUIP-TYPE CODE JSB LCALC RESET NODE2 SZA,RSS TTY DEVICE? JMP QUERY YES * ABORT JSB CLSFL CLOSE FILES CURRENTLY OPEN * E JSB EXEC TERMINATE SELF DEF *+4 DEF B6 DEF B0 DEF B3 * * EMSG ASC 5,REMAT * * SUBROUTINE TO CLOSE THE COMMAND FILE OPEN TO TRDCB, * OR USER FILE OPEN TO UDCB IF EITHER OR BOTH ARE OPEN. * CLSFL NOP LDA TOPNF SZA,RSS TRANSFER FILE OPEN? JMP CLOS2 NO * JSB DCLOS YES, CLOSE IT DEF *+3 DEF TRDCB DEF IERRR * CLOS2 LDA UOPNF SZA,RSS USER FILE OPEN? JMP CLOS3 NO * JSB DCLOS YES, CLOSE IT DEF *+3 DEF UDCB DEF IERRR * CLOS3 CLA STA TOPNF CLEAR OPEN FLAGS. STA UOPNF JMP CLSFL,I RETURN. SPC 2 ASCER DST ASERM+4 SAVE RETURNED ASCII ERR MSG * JSB REIO REPORT IT DEF *+5 DEF ICOD2 WRITE DEF LOGLU DEF ASERM DEF B6 JMP ABORT ERROR RETURN * JMP RESET * ASERM ASC 6,REMAT: XXXX SKP * * BELOW SUBROUTINE IS SPECIAL VERSION OF "$PARS". IS IS UNPRIVILEGED * AND WILL ALSO HANDLE UP TO 2 "NAMR" FILE FORMATS. * $PARS NOP LDB INCNT BLS CMB,SSB,RSS JMP $PARS,I GET OUT IF NEGATIVE COUNT STB ICNT SAVE NEG. CHARACTER COUNT LDA BUFAD RAL STA IBPNT SAVE BUFFER BYTE ADDRESS LDA SUBLA STA NAMRP INITIALIZE SUBPARAMETER ADDR LDB PBUFA GET PARSING BUFFER ADDRESS STB PARSA LDA MD39 STA TEMP CLA STA 1,I INITIALIZE PARSING BUFFER TO ZEROES INB ISZ TEMP JMP *-3 * * PROCESS A NEW FIELD NXFLD LDB NPOSA SAVE INITIAL BYTE ADDR OF FIELD CLA NXFL2 STA NMSET MODIFY INSTRUCTION STB TEMP CLA STA OVAL INITIALIZE OCTAL ACCUMULATION STA FCNT INITIALIZE COUNT OF BYTES/FIELD STA VAL SET CURRENT RUNNING NUMERIC VALUE * JSB GETC GET 1ST CHARACTER IN FIELD JMP NULL  NULL FIELD DETECTED STA FIRST SAVE IT CCB ADB IBPNT STB TEMP,I CPA NEG "-"? JMP NXTPN * NXTN ADA N60 SUBTRACT "0" SSA JMP ASCII TOO LOW TO BE NUMERIC STA TEMP ADA MD10 SSA,RSS JMP ASCII TOO HIGH TO BE NUMERIC LDA OVAL ALF,RAR OCTAL VALUE * 8 IOR TEMP + NEW CHARACTER STA OVAL LDA VAL MPY D10 DECIMAL VALUE * 10 ADA TEMP + NEW DIGIT STA VAL * NXTPN JSB GETC GET ANOTHER DIGIT JMP NMDON END OF FIELD CPA ASCB ="B"? RSSI RSS YES JMP NXTN PROCESS CHARACTER * JSB GETC GOT A "B", SEE IF END OF FIELD RSS IT IS, SKIP JMP ASCII TREAT AS ASCII LDB FIRST CPB NEG NEGATIVE SIGN? JMP *+3 YES, TREAT AS ASCII LDB OVAL USE OCTAL VALUE JMP NMSET * LDB NMSET SZB DOING A NAMR SUBPARAMETER? JMP SUBA2 YES JMP ENDA NO, WRAP-UP ASCII FIELD * NULL SEZ NAMR DELIMITER? JMP ENDS1 YES, NULL NAMR FILED JMP ENDCK NO, NULL PARAMETER FIELD * NMDON LDA FIRST LDB VAL CPA NEG NEGATIVE SIGN? CMB,INB NEGATE VALUE * NMSET NOP THIS HAS RSS IF A NAMR PARAMETER JMP NONSB STORE PARAMETER * DONE PROCESSING THIS NAMR SUBPARAMETER STB SUBAD,I SAVE SUBPARAMETER IN NAMR BUFFER * ENDS1 ISZ SUBAD UPDATE NAMR PARAMETER POINTER LDA B3 STA PARSA,I SET TYPE TO 3 ENDS2 LDB XCNT GET SIZE OF FILE NAME SEZ,RSS NAMR DELIMITER FOUND? JMP ENDAS NO, WRAP UP PARAMETER LDA SUBAD CPA NAMRP ROOM FOR MORE? RSS NO JMP DOSUB YES, SET-UP FOR NAMR PROCESSING JSB GETC GET ANOTHER CHARACTER JMP ENDS2 CHECK DELIMITER JMP *-2  KEEP LOOKING FOR A DELIMITER * NONSB CLA,INA SET TYPE TO NUMERIC PARSA EQU *+1 DST * SET TYPE AND VALUE * ENDCK ISZ CNTAD,I BUMP PARAMETER COUNT LDB CNTAD,I CPB B7 COMMAND + 6 PARAMETERS PARSED? JMP $PARS,I YES, EXIT LDA SUBPA CPB B1 HAS COMMAND BEEN PARSED? STA NAMRP YES, SET ADR OF 1ST NAMR BUFR ADA B5 CPB B2 HAS 1ST PARAM BEEN PARSED? STA NAMRP YES, SET ADR OF 2ND NAMR BUFR LDA PARSA ADA B4 POINT TO NEXT PARSING FIELD STA PARSA JMP NXFLD PARSE NEXT FIELD * ASCII LDA NMSET SZA DOING NAMR PARAMETERS? JMP SUBAS YES * NXTAS JSB GETC KEEP LOOKING FOR END OF FIELD JMP ENDA JUMP WHEN FOUND LDB NAMRP CPA COLON COLON FOUND? CPB SUBLA YES, MORE NAMR'S ALLOWED? JMP NXTAS NO, DON'T PROCESS NAMR'S * STB SUBAD SET RUNNING POINTER ADB B5 CCB ADB FCNT COMPUTE SIZE OF FILE NAME STB XCNT AND SAVE FOR LATER * DOSUB EQU * GET CURRENT BYTE POSITION LDB MPOSA AND SAVE IT LDA RSSI MODIFY INSTUCTION TO "RSS" JMP NXFL2 PROCESS SUBPARAMETER FIELD * ENDA LDA B2 STA PARSA,I SET TYPE TO ASCII LDB FCNT FIELD CHAR COUNT * ENDAS ADB MD6 STB FCNT SAVE COUNT FOR POSSIBLE FILLER BLANKS CCE,SSB,RSS SKIP IF ASCII FIELD < 6 CHARS CLB,CLE SET FOR MOVE 6 CHARACTERS ADB B6 STB TEMP LDA NPOS "FROM" BYTE POINTER LDB PARSA INB RBL "TO" BYTE POINTER MBT TEMP MOVE UP TO 6 CHARACTERS TO PARSE BUFFER SEZ,RSS AT LEAST 6? JMP ENDCK YES LDA LOBLK NO, FILL WITH BLANKS SBT ISZ FCNT JMP *-2 DO ANOTHER JMP ENDCK ALL PADDED * * PROCESS AN ASCII NAMR PARAMETER SUBAS JSB GETCs RSS SKIP IF DELIMITER FOUND JMP *-2 IGNORE THE REST SUBA2 LDB MPOS ADDR OF 1ST CHAR LBT GET IT ALF,ALF PUT IN LHW STA SUBAD,I LBT GET 2ND CHARACTER CPB IBPNT IS IT THE DELIMITER? LDA LOBLK YES, RHW = BLANK IOR SUBAD,I STA SUBAD,I SAVE ASCII NAMR PARAMETER JMP ENDS1 NOW SEE IF MORE NAMR PARAMETERS * * SUBROUTINE TO GET NEXT CHARACTER FROM BUFFER TO BE PARSED * GETC NOP LDA ICNT CLE,SSA,RSS ENTIRE INPUT BUFFER PARSED? JMP $PARS,I YES, RETURN TO CALLER LDB IBPNT GET BYTE ADDR OF INPUT BUFFER RSS GETC2 ISZ FCNT BUMP BYTE/FIELD COUNT ISZ ICNT BUMP TOTAL COUNT RSS JMP GETC,I RETURN IF END OF BUFFER LBT GET NEXT BYTE CPA LOBLK BLANK? JMP GETC2 YES, IGNORE STB IBPNT LDB NMSET CPA COLON NAMR DELIMITER? SZB,RSS YES, SKIP IF DOING NAMR PARAMETERS CLE,RSS NO CCE,RSS E REG = 1 WHEN ":" FOUND CPA COM COMMA FOUND? JMP GETC,I YES, END OF FIELD ISZ FCNT BUMP BYTE/FIELD COUNT ISZ GETC JMP GETC,I RETURN WITH CHARACTER IN A REG * HED REMAT: DATA AREA * (C) HEWLETT-PACKARD CO. 1978 * * PARAMETER STORAGE AREA. DO NOT CHANGE ORDER OF * LABELS FROM 'PRAMS' THRU 'NAMR2'. * PRAMS NOP FLAG WORD. OP BSS 3 OPERATION CODE. CP1 NOP PARAM FLAG (0=NO, 1=#, 2=ASC, 3=NAMR) P1 REP 3 PARAM 1 (UP TO 6 CHARACTERS). NOP CP2 NOP P2 REP 3 NOP CP3 NOP P3 REP 3 NOP CP4 NOP P4 REP 3 NOP CP5 NOP P5 REP 3 NOP CP6 NOP P6 REP 3 NOP NPRMS BSS 1 # OF PRAMS NAMR1 BSS 5 PARAM1 SUBPARAMS NAMR2 BSS 5 PARAM2 SUBPARAMS * SECU1 EQU NAMR1+0 CRN1 EQU NAMR1+1 TYPE1 EQU NAMRNLH1+2 SIZE1 EQU NAMR1+3 RSIZ1 EQU NAMR1+4 SECU2 EQU NAMR2+0 CRN2 EQU NAMR2+1 TYPE2 EQU NAMR2+2 SIZE2 EQU NAMR2+3 RSIZ2 EQU NAMR2+4 * N60 OCT -60 B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B17 OCT 17 B20 OCT 20 B37 OCT 37 B70 OCT 70 B77 OCT 77 B100 OCT 100 B300 OCT 300 B377 OCT 377 B400 OCT 400 B1000 OCT 1000 B1100 OCT 1100 B2300 OCT 2300 LZERO OCT 60 LOW ZERO HZERO OCT 30000 HIGH ZERO HB20 OCT 10000 HB377 OCT 177400 HIBIT OCT 100000 MD1 DEC -1 MD3 DEC -3 MD4 DEC -4 MD5 DEC -5 MD6 DEC -6 MD7 DEC -7 MD10 DEC -10 MD12 DEC -12 MD39 DEC -39 D8 DEC 8 D9 DEC 9 D10 DEC 10 D11 DEC 11 D13 DEC 13 D15 DEC 15 D16 DEC 16 D19 DEC 19 D22 DEC 22 D23 DEC 23 D26 DEC 26 D27 DEC 27 D28 DEC 28 D36 DEC 36 D37 DEC 37 D40 DEC 40 D45 DEC 45 D55 DEC 55 D56 DEC 56 D72 DEC 72 D100 DEC 100 D128 DEC 128 VBIT EQU D128 V-BIT (BIT 7) FOR CONWD NPOSA DEF NPOS MPOSA DEF MPOS SUBF NOP IBPNT NOP FCNT NOP ICNT NOP XCNT NOP MPOS NOP NPOS NOP SUBAD NOP NAMRP NOP FIRST NOP VAL NOP OVAL NOP LOBLK OCT 40 CNTAD DEF NPRMS SUBPA DEF NAMR1 SUBLA DEF NAMR2+5 NEG OCT 55 COLON OCT 72 ASCB OCT 102 TOPNF NOP TRDCB OPEN FLAG UOPNF NOP UDCB OPEN FLAG TEMPM NOP TEMP BSS 2 TEMP1 BSS 2 TEMP2 BSS 2 INCNT NOP # WORDS IN INPUT REQUEST. 5NLUTYP NOP EQ. TYPE OF INPUT DEVICE. LOGLU NOP LU OF LOG DEVICE. LSTLU NOP LU OF LIST DEVICE. SEVER NOP SEVERITY CODE. NODE2 NOP NODE1 NOP PRMPT NOP LOCAL/REMOTE PROMPT CHAR CSFLG NOP CHECKSUM FLAG BRFLG NOP BREAK FLAG A.$TR ASC 2,$TR A.TR1 ASC 2,R,1 AS.$ OCT 022000 IERRR BSS 2 "$" ASC 1,$_ LOCAL PROMPT CHARACTER "#" ASC 1,#_ REMOTE PROMPT CHARACTER "AS" ASC 1,AS "R" OCT 122 "U" OCT 125 "BR" ASC 1,BR "BN" ASC 1,BN "BA" ASC 1,BA IPRMP ASC 2,/ _ PROMPT FOR $ST AND $DU BLANK OCT 020000 DBBLK OCT 20040 CR OCT 6400 COM OCT 54 ASCII COMMA ICOD1 OCT 100001 ICOD2 OCT 100002 ICOD3 OCT 100003 ICOD9 OCT 100011 ICD13 OCT 100015 CNWD1 EQU HIBIT D65MS CONWD. NO ABORT CNWD2 OCT 140000 D65MS CONWD (NO ABORT, LONG TIMEOUT) MINUS OCT 026400 TRFLG NOP PBUFA DEF PRAMS BUFAD DEF INBUF INBUF EQU RECRD INPUT BUFFER (128 WORDS) UDCB BSS 4 USER DATA CONTROL BLOCK TRDCB BSS 4 TR FILE DATA CONTROL BLOCK * BSS 0 * END REMAT  g/ 91740-18025 1740 S C0122 DS/1000 MODULE: D65GT              H0101 KOASMB,R,L,C HED DS GET SUBROUTINE * (C) HEWLETT-PACKARD CO. 1977* NAM D65GT,7 91740-16025 REV 1740 770531 SPC 1 ENT D65GT SPC 1 EXT .ENTR,EXEC,#PLOG EXT $OPSY,#REQU * * NAME: D65GT * SOURCE: 91740-18025 * RELOC: 91740-16025 * PGMR: CHUCK WHELAN DEC 1976 * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * * D65GT CALLING SEQUENCE: * * JSB D65GT * DEF *+6 * DEF CLASS CLASS FOR GET SUSPEND * DEF RQBUF REQUEST BUFFER ADDRESS. * DEF RQLEN MAX REQUEST LENGTH * DEF DABUF DATA BUFFER ADDRESS * DEF DALEN MAX DATA BUFFER LENGTH (0 IF NO DATA). * A & B HAVE ASCII ERROR CODE * A= RCVD REQUEST LEN, B= RCVD DATA LEN * * * * * D65GT OPERATION: * D65GT IS CALLED BY ROUTINES WAITING TO RECEIVE REQUESTS ( & POSSIBLY * DATA) ON THEIR CLASS NUMBERS. D65GT DOES THE FOLLOWING: * 1. PERFORMS A ZERO-LENGTH "GET" ON THE PASSED CLASS NUMBER * 2. MOVES DATA TO USER BUFFER USING LENGTH= MIN(USER LEN,RCVD LEN) * 3. IF SPECIFIED REQUEST LENGTH EXCEEDED, RETURNS A "DS03" * 4. MOVES THE REQUEST INTO THE USERS BUFFER (UP TO THE * # OF WORDS SPECIFIED IN CALL. * 5. IF SPECIFIED DATA LENGTH EXCEEDED, RETURNS A "DS03" * 6. IF PLOG IS ENABLED, RETHREADS THE REQUEST TO PLOG'S CLASS * OTHERWISE, DEALLOCATES THE BUFFER IN SAM * 7. RETURNS THE RECEIVED REQUEST AND DATA SIZES IN THE B AND A REGS * * * D65GT ERROR RETURNS: * * "DS03" - ILLEGAL RECORD SIZE - REQ OR DATA EXCEEDS BUFFER * SKP CL,ASS NOP RQBUF NOP RQLEN NOP DABUF NOP DALEN NOP * D65GT NOP JSB .ENTR GET PARAMETER ADDRESSES DEF CLASS * CLB LDA $OPSY GET OP SYSTEM TYPE RAR,SLA STB MOD1 IT'S A MAPPED SYSTEM, MODIFY PGM * LDA CLASS,I IOR B6000 BUFR SAVE, NO DEALLOCATE STA CLASS * JSB EXEC DO "GET" ON PASSED CLASS # DEF *+7 DEF D21 DEF CLASS DEF DABUF,I DATA BUFR ADDR DEF K0 DATA LENGTH DEF PARAM REQUEST BUFR ADDR IN SAM RETURNED DEF LENGT RCVD REQUEST BUFFER LENGTH * STB BRTN SAVE RECEIVED DATA LENGTH LDA 1 CMB,INB ADB DALEN,I USER LENGTH - RETURNED LENGTH SSB LDA DALEN,I USER'S LENGTH LESS, USE IT STA ARTN SZA,RSS SHOULD WE MOVE ANY? JMP DOREQ NO! LDB DABUF ADDR OF USER'S DATA BUFFER LDA BRTN CMA,INA REQ ADDR (SAM) - DATA LENGTH = ADA PARAM DATA ADDR (SAM) JSB MOVER DO THE DATA MOVE FROM S.A.M. * DOREQ LDB LENGT RCVD REQUEST BUFFER LENGTH STB ARTN CMB,INB,SZB,RSS JMP ZRET ZERO LENGTH REQUEST, RETURN NOW ADB RQLEN,I CHECK VS REQUESTED LENGTH SSB WAS IT LARGER? JMP ERR03 YES, GIVE "DS03" ERROR * * MOVE REQUEST BUFFER FROM SAM TO USER AREA LDB RQBUF USER REQUEST BUFFER ADDRESS LDA PARAM SAM BUFFER ADDRESS JSB MOVER NOW MOVE THE REQUEST * LDB BRTN DATA LENGTH CMB,INB ADB DALEN,I SSB DATA TOO LARGE? JMP ERR03 YES, GIVE "DS03" * ISZ D65GT BUMP TO SUCCESSFUL RETURN * * RETHREAD TO PLOG'S CLASS IF IT'S ENABLED * LOGIT LDA #PLOG SZA,RSS PLOG ENABLED? JMP CLSAM NO STA PARAM * JSB #REQU RETHREAD TO PLOG DEF *+3 DEF CLASS DEF PARAM * JMP RETRN * ւ ZRET ISZ D65GT DO NORMAL RETURN FOR ZERO LENGTH REQ * * DEALLOCATE THE BUFFER IN SAM * CLSAM LDA CLASS ALR,RAR CLEAR "SAVE BUFFER" FLAG STA CLASS * JSB EXEC DO DUMMY GET TO RELEASE BUFFER DEF *+5 DEF D21 DEF CLASS DEF DABUF,I DEF K0 * * RETURN TO USER RETRN LDB BRTN LDA ARTN JMP D65GT,I * * * ERROR ROUTINES * ERR03 DLD DS03 ILLEGAL RECORD SIZE DST ARTN ERROR CODE RETURNED IN A & B JMP LOGIT FIRST DEALLOCATE BUFFER * * SUBROUTINE TO MOVE BLOCK OF WORDS FROM S.A.M. TO USER BUFFER * MOVER NOP MOD1 JMP NODMS "NOP" HERE IF DMS SYSTEM LDX ARTN PUT LENGTH IN X REG MWF MOVE WORDS FROM ALTERNATE (SYSTEM) MAP JMP MOVER,I RETURN * NODMS MVW ARTN DO "MVW" FROM S.A.M. JMP MOVER,I RETURN * * DATA AREA * ARTN NOP BRTN NOP PARAM NOP LENGT NOP K0 OCT 0 D21 DEC 21 B6000 OCT 060000 DS03 ASC 2,DS03 * SIZE BSS 0 * END ' hp 91740-18026 1740 S C0122 DS/1000 MODULE: GET              H0101 jASMB,R,L,C HED GET 91700-16126 * (C) HEWLETT-PACKARD CO 1977 NAM GET,7 91740-16026 REV 1740 770613 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT GET,ACEPT,REJCT,FINIS EXT EXEC,$OPSY EXT .ENTR,CNUMO EXT D65SV,#LDEF,#REQU,#PLOG SPC 5 * * GETS * SOURCE:91740-18026 * BINARY:91740-16026 * PGMR :CHUCK WHELAN * DATE :DEC 22,1976 * SPC 5 * THESE LIBRARY SUBROUTINES ARE USED IN CONJUNCTION * WITH THE PROGRAM TO PROGRAM COMMUNICATION MONITOR * PTOPM TO AFFECT COMMUNICATION WITH SATELLITE PROGRAMS * THEY CONTAIN THE FOUR SLAVE ENTRY POINTS (GET * ACCEPT,AND REJECT AND FINIS) THAT MAY BE ENTERED * BY A PROGRAM IN SLAVE MODE WHICH IS COMMUNICATING * WITH A PROGRAM IN MASTER MODE. HED "GET" PROCESSING * (C) HEWLETT-PACKARD CO 1977 ICLAS NOP IERR NOP IFUN NOP ITAG NOP IL NOP SPC 3 * ENTRY HERE SIGNIFIES THAT THE USER SUBROUTINE HAS COMPLETED THE * PROCESSING OF THE LAST CALL AND WISHES TO INTERROGATE HIS I/O * CLASS TO DETERMINE IF THERE ARE ANY MORE REQUESTS * TO BE PROCESSED. IF MORE REQUESTS HAVE BEEN QUEUED ON THE * CLASS THE ONE ON THE TOP OF THE STACK WILL BE PASSED TO THE * USER.IF THERE ARE NO OUTSTANDING REQUESTS THE USER * WILL BE I/O SUSPENDED UNTIL A REQUEST IS RECEIVED * BY THE MONITOR AND PLACED IN THE USER'S I/O CLASS. * GET NOP * SAVE INPUT PARAMETERS JSB .ENTR PICK UP THE PARAMETERS PASSED DEF ICLAS LDA $OPSY CLB RAR,SLA SKIP IF NON-DMS STB MODX INITIALIZE FOR DMS SYSTEM LDB GET RETURN ADDR  STB EXIT LDB IERR SET UP ERROR PRAM ADDR STB ERRM1 LDA IL ADDRESS SZA,RSS LAST ONE REQ. THERE? JMP ERPAR NO-ERROR CLA,INA LDB ERCOM CPB M47 COMM ERROR OCCURRED LAST XACTION? STA NEXT YES, RESET SEQ INDICATOR CPA NEXT CHECK FOR LEGAL SEQUENCE RSS JMP ERSEQ TAKE ERROR EXIT IF SEQUENCE ERR STA ERCOM * LDA ICLAS,I SET UP THIS USER'S I/O CLASS STA CLASX IOR B6000 SAVE BUFFER STA CLASS * JSB EXEC ISSUE GET ON I/O CLASS DEF *+7 DEF K21 DEF CLASS IRBFA DEF IRBUF DEF ZERO ZERO LENGTH GET DEF BFADR ADDR OF REQUEST IN SAM DEF RQLEN REQUEST LENGTH * STB DLEN SAVE DATA LENGTH CMB,INB ADB BFADR COMPUTE DATA ADDR IN SAM STB DSAMA LDA BFADR LDB IRBFA JSB MOVER MOVE REQUEST INTO LOCAL BUFFER RQLEN NOP * LDA RTAGA ADDR OF TAGS IN REQUEST LDB ITAG ADDR OF USER TAG AREA MVW K20 MOVE TAG FIELD TO USER AREA * * PASS FUNCTION CODE BACK TO "GET" CALLER LDA $FUNC GET FUNCTION CODE STA IFUN,I RETURN RECEIVED FUNCTION CODE * LDB $DLEN DATA BUFFER LENGTH RAR,SLA,RAL SKIP UNLESS READ OR WRITE STB IL,I RETURN LENGTH TO CALLER * CPA K3 IS THIS A "PWRIT"? RSS YES JSB CLSAM NO, CLEAR CLASS BUFFER * ISZ NEXT SET SEQ INDICATOR CLB RETURN "NO ERROR" FLAG STB IERR,I TO THE USER JMP DONE RETURN TO USER HED "ACCEPT" PROCESSING * (C) HEWLETT-PACKARD CO 1977 AITAG NOP AIERR NOP AIBUF NOP * * ENTRY HERE SIGNIFIES THAT THE LAST REQUEST EXAMINED * WAS AN ACCEPTABLE ONE AND THE REQUEST WAS TO BE HONORED * * THE ACTION TO BE ACCOMPLISHED FOR AN ACCEPT REQUEST * VARIES AS TO THE TYPE OF REQUEvST WHICH WAS LAST RECEIVED * ACCEPT REQUESTS ARE PERFORMED FOR ALL FOUR MASTER REQUESTS * EXIT EQU * ACEPT NOP JSB .ENTR PICK UP CALLING PARAMETERS FROM DEF AITAG THE USER * * * CHECK FOR ERRORS & MOVE TAG FIELD TO PARMB * LDA AITAG LDB AIERR JSB PUTAG * LDA $FUNC FUNCTION CODE FROM REQUEST RAR,SLA,RAL SKIP IF OPEN OR CONTROL(DO REQ ONLY) RSS JMP ACPFG LDB AIBUF SZB,RSS WAS DATA BUFFER SPECIFIED JMP ERPAR NO, INSUFFICIENT PARAMS STB DATAD SET DATA ADDRESS IN SV CALL CPA K2 IS THIS A "PREAD" JMP AREAD YES, JUMP * * REQUEST IS A "PWRIT", DATA IS ALREADY IN SYSTEM AVAILABLE MEMORY, * SIMPLY MOVE DATA TO USERS BUFFER & CLEAR CLASS BUFFER LDA $DLEN STA *+3 SET DATA LENGTH FOR MOVE LDA DSAMA ADDR OF DATA IN SAM JSB MOVER MOVE IT NOP JMP ACPFG * AREAD LDA $DLEN DOING "PREAD", SEND STA DLEN DATA WITH THE REPLY. * ACPFG LDA BIT14 SET ACCEPT FLAG IN PARMB DVR IOR $FUNC STA $FUNC SAVE FUNC CODE WITH ACEPT OR REJCT SET AND K7 ISOLATE FUNCTION CODE CPA K3 WAS IT A "PWRIT" JSB CLSAM YES, CLASS BUFFER STILL MUST BE CLEARED * LDA $STRM REQUEST STREAM WORD IOR BIT14 SET REPLY BIT STA $STRM * CLA STA $ERR+1 STA $ERR+2 * JSB D65SV DO CALL TO DRIVER THRU D65SV DEF *+5 DEF IRBUF DEF K31 DATAD DEF DUMMY DEF DLEN JMP ERRAC COMMUNICATION ERROR * LDA ERRM1,I RETRN STA ERCOM SAVE RETURN STATUS CLB,INB STB NEXT SET SEQUENCE IND. FOR "GET" NEXT * DONE CLB STB IL INITIALIZE FOR PARAM CK NEXT TIME STB AIERR STB JIERR JMP EXIT,I RETURN FROM ACEPT/REJCT TO CALLER * ERRAC LDA M47 ERROR STATUS= -47 STA ERRM1,8I JMP RETRN HED "REJECT" PROCESSING * (C) HEWLETT-PACKARD CO 1977P JITAG NOP JIERR NOP * * ENTRY HERE IS SIMILAR TO THAT FOR THE ACCEPT OPTION * EXCEPT THE REQUEST HAS BEEN DETERMINED NOT TO BE FROM A VALID * SATELLITE AND MUST BE REJECTED. AGAIN THE LOGIC * IS BROKEN UP INTO FOUR SUBCLASSES ACCORDING TO THE TYPE * OF REQUEST BEING REJECTED * REJCT NOP JSB .ENTR PICK UP USER PARAMETERS DEF JITAG LDB REJCT PICK UP RETURN ADDR STB EXIT * * CHECK FOR ERRORS & MOVE TAG FIELD TO PARMB * LDA JITAG LDB JIERR JSB PUTAG * LDA BIT15 GET "REJCT" BIT JMP DVR NOW SEND REPLY & EXIT HED "FINISH" PROCESSING * (C) HEWLETT-PACKARD CO 1977 FINIS NOP LDA XEQT GET THIS PGMS ID SEGMENT ADDR STA $PCB & STORE IN REQUEST * CLA,INA STA NEXT RESET SEQUENCE INDICATOR * * SET FUNCTION CODE REPLY FLAG & ACCEPT/REJECT FLAG LDA HCODE STA $FUNC SET "PCLOS" FUNCTION CODE * * SEND IT TO THE MONITOR * SO THIS PROGRAM CAN BE REMOVED FROM THE ACTIVE LIST * LDB #LDEF ADB K6 POINT TO P TO P HEADER ADDR LDB 1,I GET HEADER ADDR INB POINT TO CLASS WORD LDA 1,I GET "PTOPM" CLASS RAL,CLE,ERA CLEAR OFF SIGN BIT STA PTOP * JSB EXEC SEND THE REQUEST TO PTOPM DEF *+8 DEF K20 DEF CONWD Z BIT, LU=0 DEF DUMMY DEF ZERO NO DATA DEF IRBUF DEF K11 11 WORD "FINIS" REQUEST DEF PTOP * ISZ FINIS JMP FINIS,I RETURN HED UTILITY SUBROUTINES/DATA AREA * (C) HEWLETT-PACKARD CO 1977 * * THIS SUBROUTINE CHECKS FOR CALL ERRORS & RETURNS A MODIFIED * REQUEST TO THE SATELLITE MASTER PROGRAM * PUTAG NOP STB ERRM1 SAVE ERROR FLAG ADDR SZB,RSS SKIP IF ERROR DEF WAS PASSED JMP ERPAR OTHERWISE ERROR IN CALL LDB NEXT CHECK SEQUENCE CPB K2 CLB,RSS OK JMP ERSEQ ERROR, NOT TIME FOR ACEPT/REJCT STB ERRM1,I CLEAR ERROR FLAG LDB RTAGA ADDR OF TAG FIELD IN REQUEST MVW K20 MOVE TAG FIELD INTO REQUEST LDA XEQT SET ID SEGMENT ADDR OF SLAVE PGM STA $PCB INTO 1ST WORD OF PCB LDA CLASX SET SLAVE PGMS CLASS # STA $PCB+1 INTO 2ND WORD OF PCB CLB STB DLEN SET D65SV CALL FOR "NO DATA" JMP PUTAG,I RETURN SPC 3 * * SUBROUTINE TO MOVE BLOCK FROM SAM MOVER NOP MODX JMP NODMS "NOP" HERE IF DMS SYSTEM LDX MOVER,I GET # TO MOVE MWF MOVE WORDS FROM ALTERNATE MAP JMP MEXIT * NODMS MVW MOVER,I MOVE WORDS MEXIT ISZ MOVER JMP MOVER,I RETURN SPC 3 * * SUBROUTINE TO DO A DUMMY GET TO CLEAR THE CLASS BUFFER CLSAM NOP LDA #PLOG SZA DOING REQUEST LOGGING? JMP LOGIT YES, PASS BUFFER ALONG TO "PLOG" * LDA CLASS GET SLAVE PGMS CLASS NO ALR,RAR CLEAR "SAVE BUFFER" FLAG STA CLASS * JSB EXEC DO DUMMY GET TO CLEAR THE BUFFER DEF *+5 DEF K21 DEF CLASS DEF DUMMY DEF ZERO JMP CLSAM,I RETURN * LOGIT STA CLAS2 SAVE "PLOG"S CLASS JSB #REQU DO RETHREAD TO PLOG DEF *+3 DEF CLASS FROM SLAVE PGM'S CLASS DEF CLAS2 TO PLOG'S CLASS JMP CLSAM,I * SPC 3 ERSEQ LDA M46 -46 = SEQUENCE ERROR RSS ERPAR LDA M40 -40 = INSUFFICIENT PARAMETERS STA ERRM1,I RETURN ERROR TO USER JMP DONE SPC 4 ERR1 NOP STA SSA SAVE DRIVER STATUS LDA XEQT GET THE NAME OF THE PROGRAM ADA K12 THIS S/R IS APPENDED TO LDB 0,I FROM THE ID SEGMENT STB COMER+6 & SAVE IN THE OUTPUT * INA BUFFER LDB 0,I STB CO $"MER+7 * INA LDB 0,I LDA 1 AND MSK1 STRIP OFF STATUS BITS STA COMER+8 * JSB CNUMO CONVERT STATUS WORD TO ASCII DEF *+3 DEF SSA DEF CNBUF RESULTING ASCII * JSB EXEC OUTPUT DRIVER ERROR DEF *+5 MESSAGE DEF K2 DEF K1 DEF COMER DEF COMEL JMP ERR1,I & RETURN * * DATA AREA * CLASS NOP CLASX NOP CLAS2 NOP DSAMA NOP BFADR NOP DLEN NOP NEXT DEC 1 ERCOM NOP ERRM1 NOP CONWD OCT 10000 BIT14 OCT 40000 BIT15 OCT 100000 B6000 OCT 60000 ZERO OCT 0 K1 DEC 1 K2 DEC 2 K3 DEC 3 K6 DEC 6 K7 DEC 7 K11 DEC 11 K12 DEC 12 K20 DEC 20 K21 DEC 21 K31 DEC 31 MAX REQUEST LENGTH MSK1 OCT 177400 HCODE OCT 205 "FINIS" GENERATES A "PCLOS" PTOP OCT 100004 M46 DEC -46 M47 DEC -47 M40 DEC -40 RTAGA DEF $TAG CNBUF BSS 3 COMER ASC 7,COMM ERROR - SSA NOP COMEL DEC -16 * DUMMY NOP * * DEFINE REQUEST BUFFER IRBUF BSS 31 $STRM EQU IRBUF $ERR EQU IRBUF+4 $FUNC EQU IRBUF+7 $PCB EQU IRBUF+8 $DLEN EQU IRBUF+10 $TAG EQU IRBUF+11 * XEQT EQU 1717B * END $ i t 91740-18027 1740 S C0122 DS/1000 MODULE: PGMAD              H0101 *ASMB,R,L,C,Z HED I.D. SEG. ADDRESS ROUTINE *(C) HEWLETT-PACKARD CO. 1977* IFN NAM PGMAD,7 91740-16027 REV 1740 770208 EXT .ENTR XIF IFZ NAM PGMAD,30 91740-16027 REV 1740 770329 EXT .ENTP,$LIBR,$LIBX XIF ENT PGMAD SPC 1 * NAME: PGMAD * SOURCE: 91740-18027 * RELOC: 91740-16027 * PGMR: C.C.H. [ 02/08/77 ] [LIBERALLY EXTRACTED FROM 'SCHED'] SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * PGMAD ACCEPTS A USER-SUPPLIED ADDRESS OF A 3-WORD ARRAY WHICH * CONTAINS THE ASCII CODE FOR THE NAME OF A PARTICULAR PROGRAM. * PGMAD RETURNS THE I.D. SEGMENT ADDRESS OF THE PROGRAM, IT'S STATUS, * AND AN INDICATION OF THE TYPE OF I.D. SEGMENT; I.E.,LONG/SHORT. * * PGMAD CALLING SEQUENCE: * * JSB PGMAD * DEF *+2 [ OR *+2+N WHERE N= NUMBER OF OPTIONAL PARAMETERS ] * DEF NAME ADDRESS OF 3-WORD ASCII PROGRAM NAME ARRAY. * [DEF IDAD] [OPTIONAL ADDRESS FOR RETURN OF I.D. SEG. ADDRESS] * [DEF ISTAT] [OPTIONAL ADDRESS FOR RETURN OF PROGRAM STATUS] * [DEF IDTYP] [OPTIONAL ADDRESS FOR RETURN OF I.D.SEGMENT TYPE] * = I.D. SEGMENT ADDRESS. * = PROGRAM STATUS. * = 0: STANDARD 28-WORD I.D. SEGMENT. * = 1: SHORT(PROGRAM SEGMENT) 9-WORD I.D. SEGMENT. * * FORTRAN CALLING SEQUENCE: CALL PGMAD(NAME [,IDAD [,ISTAT [,IDTYP]]]) * OR * REG=PGMAD(NAME [,IDAD [,ISTAT [,IDTYP]]]) * * PGMAD ERROR DETECTION: * * A. ADDRESS OF NAME-ARRAY NOT SUPPLIED. * B. CHARACTER #5 OF USER-SUPPLIED PROGRAM NAME IS NULL. * C. I.D. SEGMENT WITH EQUIVALENT PROGRAM NAME CANNOT BE FOUND. * * -- RETURN TO WITH: * * 1. & AND 'IDAD' & 'ISTAT' ALL SET = 0. * 2. AND 'IDTYP' ARE SET =1. * NAME NOP ADDRESS OF ASCII NAME ARRAY. P1 DEF A ADDRESS FOR RETURN OF PARAMETER #1. P2 DEF B ADDRESS FOR RETURN OF PARAMETER #2. P3 DEF PTEM ADDRESS FOR RETURN OF PARAMETER #3. SUP [SUPPRESS EXTENDED LISTING] PGMAD NOP ENTRY/EXIT: I.D.SEG. ADDRESS ROUTINE. IFN JSB .ENTR OBTAIN DIRECT ADDRESSES. XIF IFZ JSB $LIBR DEFINE THIS SUBROUTINE NOP TO BE PRIVILEGED. JSB .ENTP GET DIRECT ADDRESSES--PRIVILEGED MODE. XIF DEF NAME DEFINE PARAMETER STORAGE AREA. SPC 1 LDA NAME GET THE ADDRESS OF THE ASCII ARRAY. SZA,RSS DID THE CALLER SUPPLY AN ADDRESS? JMP ERREX NO--ERROR! SPC 1 * RESET POINTERS TO ALLOW USER TO CALL WITHOUT RETURN-DATA PARAMETERS. SPC 1 DLD P1 GET PARAMETER ADDRESSES-IF ANY. DST IDAD SAVE FOR DATA RETURN. DLD REGDF GET INITIAL PARAMETER DEFINITION DST P1 AND RE-INITIALIZE FOR NO PARAMETERS. LDA P3 GET 'IDTYP' PARAMETER ADDRESS--IF ANY. LDB DPTEM GET DEF TO DUMMY PARAMETER STORAGE. STA IDTYP SAVE PARAMETER ADDRESS. STB P3 RE-INITIALIZE FOR NO 'IDTYP' PARAMETER. * LDB NAME GET ADDRESS OF NAME ARRAY. STB PTEM SAVE ADDRESS OF 1RST & 2ND CHARACTERS. INB POINT TO 2ND TWO CHARS. OF NAME ARRAY. STB PTEM+1 SAVE ADDRESS OF 3RD & 4TH CHARS. INB POINT TO LAST CHARACTER'S ADDRESS. LDA B,I GET THE WORD FROM THE NAME ARRAY. AND UBYTE ISOLATE CHAR.#5 FROM UPPER BYTE. % STA PTEM+2 SAVE CHAR.#5 LOCALLY. SZA FORCE ERROR-RETURN FOR A NULL CHARACTER. LDA KEYWD GET ADDRESS OF KEYWORD TABLE. STA KEYPT SET POINTER TO TOP OF TABLE. PLOOP LDA KEYPT,I GET THE KEYWORD-TABLE ENTRY. CCE,SZA,RSS IF THIS IS THE END-OF-LIST (0), JMP ERREX THEN GO TO RETURN AN ERROR INDICATION. * ADA P12 POINT TO NAME-CHARS.1 & 2 IN I.D. SEG. LDB A,I GET CHARS. 1 & 2 FROM I.D. SEGMENT. CPB PTEM,I IF THEY ARE THE SAME AS USER'S CHARS., INA,RSS THEN PROCEED WITH COMPARISON; ELSE, JMP PNEXT GO TO GET NEXT KEYWORD ENTRY. * LDB A,I GET CHARS. 3 & 4 FROM THE I.D. SEGMENT. CPB PTEM+1,I IF THESE TWO COMPARE TO USER'S CHARS, INA,RSS THEN CONTINUE CHECKING; ELSE, JMP PNEXT GO TO GET NEXT KEYWORD ENTRY. * STA PSTAT SAVE ADDRESS TO GET STATUS--LATER. LDA A,I GET THE LAST CHAR. FROM I.D. SEGMENT. STA B SAVE THE WORD FOR SHORT I.D. TESTING. AND UBYTE ISOLATE CHARACTER #5 FROM I.D. SEG. CPA PTEM+2 IF THIS IS A FINAL MATCH, THEN JMP PFOUN GO TO GATHER DATA FOR THE RETURN. * PNEXT ISZ KEYPT POINT TO NEXT KEYWORD ENTRY. JMP PLOOP GO TO CHECK NEXT KEYWORD ENTRY. * ERREX CLA,CCE,INA SET 'IDTYP' & STA IDTYP,I TO 1--FOR ERROR-RETURN. CLA RETURN WITH & AND 'IDAD' & CLB 'ISTAT' ALL SET TO ZERO! JMP EROUT GO TO RETURN THE BAD NEWS. * PFOUN LSR 4 MOVE THE SHORT I.D. BIT TO . CLE,ERB SET TO: 0-LONG/1-SHORT ID.SEG. TYPE. CLA,SEZ IF STANDARD I.D. SEG.: =0; ELSE, INA SET =1 FOR SHORT I.D. SEGMENT. STA IDTYP,I RETURN THE I.D. SEGMENT TYPE. LDA KEYPT,I = I.D. SEGMENT ADDRESS. ISZ PSTAT POINT TO I.D. SEGMENT STATUS WORD. LDB PSTAT,I = PROGRAM'S CURRENT STATUS. EROUT STA IDAD,I RETURN DATA TO STB ISTAT,I USER'S PARAMETERS--IF ANY. IFN JMP PGMAD,I RETURN TO CALLER. XIF IFZ JSB $LIBX RETURN TO CALLER DEF PGMAD VIA PRIVILEGED PROCESSOR. XIF * A EQU 0 B EQU 1 DPTEM DEF PTEM DUMMY POINTER: PARAMETER #3. IDAD NOP ADDRESS FOR RETURN OF I.D. SEG. ADDRESS. ISTAT NOP ADDRESS FOR RETURN OF PROGRAM STATUS. IDTYP NOP ADDRESS FOR RETURN OF I.D. SEGMENT TYPE. KEYPT NOP POINTER TO CURRENT I.D. SEGMENT ADDRESS. KEYWD EQU 1657B BASE PAGE ADDRESS OF KEYWORD TABLE. P12 DEC 12 OFFSET TO I.D. SEGMENT NAME-ENTRY. PSTAT NOP TEMPORARY STORAGE. PTEM OCT 0,0,0 TEMPORARY STORAGE. REGDF DEF A DUMMY POINTER: PARAMETER #1. DEF B DUMMY POINTER: PARAMETER #2. UBYTE OCT 177400 UPPER-BYTE ISOLATION MASK. SPC 1 END ( js 91740-18028 1840 S C0222 &#REQU              H0102 dASMB,R,L,C HED * <#REQU> - CLASS REQUEUEING * (C) HEWLETT-PACKARD CO. 1978 * NAM #REQU,30 91740-16028 REV 1840 780808 SPC 1 ENT #REQU EXT $CLAS,$DLAY,$LIBR,$LIBX,$OPSY,$SCD3,.ENTP,DRTEQ * NAME: #REQU * SOURCE: 91740-18028 * RELOC: 91740-16028 * PGMR: C. HAMILTON [ 08/08/78 ] * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * #REQU IS A CORE-RESIDENT SYSTEM LIBRARY MODULE, USED BY THE * DISTRIBUTED SYSTEMS SOFTWARE PACKAGE IN THE RTE-M, AND RTE-III * OPERATING SYSTEMS ENVIRONMENTS. IT'S PURPOSE IS TO PROVIDE A FAST, * CORE-SAVING METHOD FOR TRANSFERRING PREVIOUSLY-QUEUED CLASS I/O * BUFFERS FROM ONE CLASS TO ANOTHER CLASS. ALTERNATELY, IT CAN BE * USED TO RE-QUEUE THE COMPLETED CLASS-TRANSACTION ONTO AN EQUIPMENT * TABLE ENTRY. * * THE ADVANTAGES GAINED THROUGH THE USE OF <#REQU> INCLUDE: * 1. ONCE GRANTED ADEQUATE SYSTEM AVAILABLE MEMORY(SAM) FOR THE INITIAL * CLASS READ OPERATION, INCOMING TRANSACTIONS WILL NOT BE IMPEDED * IN THEIR PROGRESSION THROUGH THE VARIOUS NETWORK-PROCESSING * MODULES, DUE TO INABILITY TO ALLOCATE SUFFICIENT S.A.M. FOR USE * IN THE EXCHANGE OF DATA BETWEEN THE NETWORK PROGRAMS. THE INITIALLY * ALLOCATED S.A.M. BUFFER IS RETAINED FOR THE LIFE OF THE * TRANSACTION, AND IS SIMPLY EXCHANGED AMONGST THE VARIOUS MODULES. * 2. INTERMEDIATE PROCESSORS REQUIRE ONLY MINIMUM SIZE LOCAL BUFFERS. * THE QUEUEING ROUTINES NEED NOT ALLOCATE BUFFER SPACE FOR THE * ENTIRE TRANSACTION, PRIOR TO PASSING IT ON TO THE NEXT * PROCESSOR'S CLASS. * 3. SYSTEM OVERHEAD IS MINIMIZED͚, DUE TO THE AVOIDANCE OF INTER- * MEDIATE ALLOCATION/DE-ALLOCATION OF S.A.M., AND ALSO, BY * AVOIDING WORD-MOVE TRANSFERS BETWEEN USER'S BUFFERS AND S.A.M. * * #REQU OPERATION: * * 1. ON FIRST ENTRY, CONFIGURE THE MODULE. * A. OBTAIN A DIRECT ADDRESS FOR THE CLASS TABLE. * B. IF BIT #1 OF $OPSY =1, THEN OP-SYSTEM USES DMS HARDWARE, * REQUIRING THE USE OF DMS FIRMWARE MACRO INSTRUCTIONS. * C. IF DMS, THEN CLEAR THE DMS-BYPASSING 'JMP' INSTRUCTIONS. * D. IF NON-DMS, ALLOW 'JMP' INSTRUCTIONS TO REMAIN. * E. CLEAR THE PATH TO THE INITIALIZATION ROUTINE. * * 2. GET PARAMETERS & SAVE LOCALLY, IN PREPARATION FOR DMS MAP SWITCH. * A. IF PRIORITY PARAMETER NEGATIVE, REJECT; IF MISSING, USE 32767. * B. IF DMS SYSTEM, SAVE MAP STATUS & SWITCH TO SYSTEM MAP. * * * 3. GET THE SOURCE-CLASS PARAMETER & CHECK IT'S VALIDITY. * A. IF 0, OR GREATER THAN MAX. CLASS NO., THEN--ERROR -1! * B. COMPUTE & SAVE CLASS-TABLE ENTRY ADDRESS. * C. IF ENTRY =0, THEN NOT ASSIGNED--ERROR -2! * D. IF SOURCE-CLASS, VERIFY THAT SOMETHING IS QUEUED; ELSE--ERROR -2! * E. SAVE ADDRESS OF QUEUED ENTRY (ADDRESS POINTS TO S.A.M.) * F. TRACK DOWN & SAVE CLASS-HEADER ADDRESS; IF LINK WORD=0: ERROR -9! * G. COMPARE SECURITY CODES; IF MIS-MATCH--ERROR -3! * H. ENSURE THAT NO ONE IS WAITING ON SOURCE-CLASS; ELSE--ERROR -4! * I. RETURN TO MAINLINE PROCESSING. * * 4. SAVE SOURCE-CLASS ADDRESS POINTERS. * * 5. CHECK VALIDITY OF DESTINATION-CLASS PARAMETER (VIA 3.A.). * A. IF -1, RESET NEG. BLOCK SIZE VALUE TO POS.; IGNORE OTHER PARAMS. * * 6. CHECK FOR 'LU' SPECIFICATION. * A. IF NOT SUPPLIED, GO TO 10. TO DE-QUEUE THE COMPLETED REQUEST. * B. IF SPECIFIED, CHECK FOR VALID LU (NON-ZERO EQT,DEVICE NOT DOWN, * & NOT LINKED TO A DISC FILE); ELSE--ERROR -5! * C. SAVE THE EQT ADDRESS. * * 7. CHECK FOR 'CONWD' SPECIFICATION. * A. IF NOT SUPV`PLIED, GO TO 10. TO DE-QUEUE THE COMPLETED REQUEST. * B. IF SPECIFIED,VERIFY THAT REQUEST CODE(BITS#1-0) #0--ELSE ERROR -6. * C. IF CONTROL REQUEST, SKIP LENGTH CHECKS. GO TO 10. * * 8. CHECK FOR-AND VERIFY-USER BUFFER LENGTH/CONTROL PARAMETER SPEC. * A. IF NOT SUPPLIED(OR =100000B),GO TO 10.TO DE-QUEUE CURRENT REQUEST. * B. VERIFY THAT USER'S LENGTH < = AVAILABLE BUFFER IN S.A.M. BLOCK. * C. IF SIZE EXCEEDED: ERROR -8! * * 9. CHECK FOR REQUEST TO OVERLAY THE OPTIONAL PARAMETERS. * A. IF NOT SPECIFIED(OR =100000B), GO TO 10. TO DE-QUEUE THE REQUEST; * * 10. DE-QUEUE COMPLETED CLASS REQUEST FROM SOURCE-CLASS QUEUE. * A. RE-LINK REMAINING ENTRIES BACK INTO SOURCE-CLASS QUEUE. * * 11. CHECK (AGAIN) FOR 'LU' SPECIFICATION. * A. IF NOT SUPPLIED, GO TO 13. TO RE-QUEUE THE REQUEST. * B. IF LU & CONWORD WERE SUPPLIED, REPLACE CONWORD IN COMPLETED * REQUEST WITH USER-SUPPLIED PARAMETER. * C. ENSURE 'T'-FIELD OF CONWORD =3. * D. OVERLAY WORD #3 OF COMPLETED REQUEST WITH THE USER'S PRIORITY. * --IF NONE, USE LOWEST PRIORITY VALUE: 32767. NEGATIVE: ERROR -7! * E. IF WRITE-REQUE, NEGATE BLOCK SIZE(WORD #4) TO PREVENT RTIOC'S * ARBITRARY RELEASE OF THE DATA BUFFER. IF ALREADY NEG. MAKE POS. * F. REPLACE WORD #5 OF COMPLETED REQUEST WITH THE DESTINATION- * CLASS PARAMETER. * G. IF BL/CP SUPPLIED, REPLACE WORD#6 WITH USER'S PARAMETER. * H. IF OPTIONAL PARAMETERS SUPPLIED, REPLACE WORDS#7,8 WITH USER'S. * I. ADD 1 TO THE DESTINATION-CLASS PENDING REQUEST COUNT, IF < 255. * SKP * 12. LINK THE NEW REQUEST (ACCORDING TO PRIORITY) INTO THE EQT QUEUE. * A. IF THE EQT IS CURRENTLY ACTIVE, THE DEED IS DONE--RETURN. * B. IF INACTIVE, INITIATE I/O OPERATION VIA $DLAY IN RTIOC & RETURN. * * 13. RE-QUEUE THE COMPLETED REQUEST ONTO THE DESTINATION-CLASS. * A. LINK NEW REQUEST TO END OF DESTINATION-CLASS QUEUE. * B. SET CONW=[D REQ. CODE(BITS#1,0)=0 TO INDICATE CLASS-TO-CLASS REQUE. * C. IF NEG. BLOCK LENGTH IN WORD#4 OF CLASS HEADER, MAKE IT POSITIVE. * D. OVERLAY WORD #5 OF COMPLETED REQUEST WITH DESTINATION-CLASS NO. * E. IF NEWLY-ADDED REQUEST IS ONLY ENTRY IN QUEUE, THEN GO TO 13.G * TO CHECK FOR A WAITING PROGRAM. * F. IF OTHER ENTRIES ARE PRESENT, THEN RETURN TO THE CALLER. * G. CHECK CLASS-HEADER FOR PROGRAM-WAITING BIT(#14); IF NONE, RETURN. * H. IF A PROGRAM IS WAITING, SCHEDULE IT AND RETURN TO THE CALLER. SKP * JSB #REQU * * * #REQU CALLING SEQUENCE * * * * DEF *+3 [OR *+3+N (N=1,TO 6 OPTIONAL PARAMETERS)] * DEF SORCE SOURCE-CLASS NUMBER * DEF DESTN DESTINATION-CLASS NUMBER * [DEF LU ] OPTIONAL LOGICAL UNIT NUMBER * [DEF CONWD] OPTIONAL DRIVER CONTROL WORD * [DEF PRIOR] OPTIONAL PRIORITY VALUE * [DEF BL/CP] OPTIONAL BUFFER LENGTH OR CONTROL PARAMETER * [DEF IRTN1] OPTIONAL FIRST GET-RETURN-PARAMETER * [DEF IRTN2] OPTIONAL SECOND GET-RETURN-PARAMETER * < RETURN > RETURN--NORMAL: =0 ERROR: =-N, =0 * * WHERE: * SORCE = CLASS NUMBER, FROM WHICH THE FIRST-QUEUED COMPLETED REQUEST * IS TO BE REMOVED. * * DESTN = CLASS NUMBER, ONTO WHICH THE COMPLETED REQUEST IS TO BE * RE-QUEUED OR, THE CLASS WHICH IS TO RECEIVE I/O COMPLETION * INFORMATION, WHEN THE REQUEST HAS BEEN RE-QUEUED ONTO * AN EQUIPMENT TABLE ENTRY. IF -1, OTHER PARAMETERS ARE IGNORED * AND THE CURRENTLY-QUEUED SOURCE-CLASS BLOCK SIZE IS MADE POS. * * LU = OPTIONAL LOGICAL UNIT NUMBER, ONTO WHOSE ASSOCIATED EQT * ENTRY, THE COMPLETED SOURCE-CLASS REQUEST IS TO BE RE- * QUEUED FOR INITIATION OF A NEW CLASS I/O OPERATION, * UTILIZING THE EXISTING DATA OR BUFFER SPACE. * * * NOTE: IF LU NOT SUPPLIED, CLASS TO CLASS RE-QUEUEING WILL * BE PERFORMEiD. * * CONWD = OPTIONAL DRIVER CONTROL WORD, WHICH MAY BE SUPPLIED AS * THE NEW OPERATIONAL SPECIFICATION, FOR RE-QUEUEING THE * REQUEST ONTO AN EQT. [ LU MUST BE SPECIFIED ]. * * BITS #15,14 = DON'T CARE (#REQU SETS EACH =1). * BIT #13 = MSB OF SUBCHANNEL NUMBER. * BIT #12 = 'Z'-BIT (OPTIONAL BUFFER SPECIFICATION). * BIT #11 = NOT USED. * BITS #10-6 = DRIVER SUB-FUNCTION SPECIFICATION. * BITS #5-2 = REMAINDER OF SUBCHANNEL NUMBER. * BITS #1-0 = REQUEST CODE: 1,2,3. * * PRIOR = OPTIONAL PRIORITY (0-32767), USED TO ESTABLISH RELATIVE * POSITION OF NEWLY-LINKED REQUEST IN THE EQT QUEUE. * IF NOT SUPPLIED, LOWEST PRIORITY (32767) IS USED. * [ IGNORED, IF LU & CONWD PARAMETERS NOT SPECIFIED ] * * * NOTE: FOR THE FOLLOWING OPTIONAL PARAMETERS, A VALUE =100000B * MAY BE SUPPLIED-AS A PLACE HOLDER-TO SPECIFY THAT THE * CORRESPONDING CLASS-HEADER ELEMENT IS NOT TO BE CHANGED. * * BL/CP = OPTIONAL BUFFER LENGTH/CONTROL PARAMETER FOR A DRIVER. * * IRTN1 = OPTIONAL PARAMETER WHICH MAY BE RETURNED ON NEXT CLASS-GET. * IRTN2 = OPTIONAL PARAMETER WHICH MAY BE RETURNED ON NEXT CLASS-GET. SKP * * #REQU ERROR INDICATIONS: * * ERROR DETECTION WILL RESULT IN A RETURN TO THE CALLER, WITH THE * REQUESTED ACTION NOT PERFORMED. * * THE -REGISTER WILL ALWAYS =0. IS NEGATIVE, AS FOLLOWS: * * = -1: CLASS NUMBER =0, OR IS GREATER THAN THE MAXIMUM NUMBER * OF CLASSES AVAILABLE. * * = -2: CLASS NOT ASSIGNED, OR NOTHING IS QUEUED ON THE SOURCE-CLASS. * * = -3: INVALID CLASS SECURITY CODE; OR PENDING REQUESTS = 255 (MAX). * * = -4: PROGRAM IS WAITING FOR SOURCE CLASS ENTRY (CANNOT DE-QUEUE * THE ENTRY). * * = -5: LOGICAL UNIT NUMBER INVALID, ORYk THE DEVICE IS DOWN. * * = -6: CONWD REQUEST CODE (BITS#1-0) =0. * * = -7: NEGATIVE PRIORITY CODE. * * = -8: BUFFER LENGTH(BL/CP) EXCEEDS CLASS BUFFER SIZE. * * = -9: CLASS QUEUE IMPROPERLY LINKED (LINK WORD =0). * SKP SORCE NOP SOURCE CLASS NUMBER. DESTN NOP DESTINATION CLASS NUMBER. LU NOP OPTIONAL LOGICAL UNIT NUMBER. CONWD NOP OPTIONAL DRIVER CONTROL WORD. PRIOR NOP OPTIONAL PRIORITY CODE. BL/CP NOP OPTIONAL BUFFER LENGTH/CONTROL PARAMETER. IRTN1 NOP OPTIONAL GET-RETURN-PARAMETER #1. IRTN2 NOP OPTIONAL GET-RETURN-PARAMETER #2. SUP SUPPRESS EXTRANEOUS LISTING. #REQU NOP ENTRY/EXIT. JSB $LIBR DECLARE THIS TO BE NOP A PRIVILEGED ROUTINE. JSB .ENTP OBTAIN DIRECT ADDRESSES PRPTR DEF SORCE FOR ALL PARAMETERS. CLA =0 FOR 'CONFG' & 'ERR' INITIALIZATION INIT JMP CONFG CONFIGURE: RTE-II/III; NOP,THEREAFTER. STA ERR INITIALIZE THE ERROR COUNT =0. LDB DM8 INITIALIZE A STB TEMP COUNTER FOR PARAMETER PROCESSING. LDB PRPTR GET POINTER TO PARAMETER ADDRESSES. * PLOOP LDA B,I GET THE PARAMETER ADDRESS (OR ZERO). CCE,SZA,RSS PREPARE TO IGNORE PARAMETER. SUPPLIED? SLA,ERA NO. SET IGNORE-FLAG(100000B) & SKIP. LDA A,I YES. GET THE USER-SUPPLIED PARAMETER. STA B,I SAVE PARAMETER (OR 100000B), LOCALLY. INB ADVVANCE PARAMETER ADDRESS POINTER. ISZ TEMP ALL PARAMETERS PROCESSED? JMP PLOOP NO. CONTINUE PROCESSING. * LDA PRIOR GET THE CALLER-SPECIFIED PRIORITY. CPA BIT15 NOT SUPPLIED/IGNORE ? LDA LOWPR YES. USE DEFAULT VALUE: 32767 (LOWEST). SSA IF PRIORITY PARAMETER IS NEGATIVE, JMP ERR7 THEN THE REQUEST CANNOT BE HONORED. STA PRIOR ESTABLISH USER'S OR EDEFAULT PRIORITY. * MAPSW JMP BYDMS BYPASS MAP CODE:NON-DMS / NOP:DMS RSA GET CURRENT MAP STATUS. RAL,RAL POSITION CURRENT STATUS FOR RESTORATION. STA DMSTS SAVE FOR RESTORATION, UPON EXIT. SJP BYDMS ENABLE SYSTEM MAP, AND CONTINUE. * BYDMS LDA SORCE GET THE SOURCE CLASS-WORD. JSB CLCHK GO TO DETERMINE IT'S VALIDITY. DLD BLKAD SAVE THE SOURCE-CLASS DST SBLK ADDRESS POINTERS. * LDA DESTN GET THE DESTINATION CLASS-WORD. CPA DM1 IF THE PARAMETER IS =-1, THEN JMP RESET GO TO RESET POSSIBLE NEG. BLOCK SIZE; JSB CLCHK ELSE, GO TO VERIFY IT'S VALIDITY. * LDA LU GET THE USER-SPECIFIED LU, IF ANY. CPA BIT15 IF NONE WAS SUPPLIED, THEN JMP DEQUE BYPASS LU VERIFICATION. JSB DRTEQ GO TO CHECK THE LU'S VALIDITY, DEF *+4 AND TO OBTAIN THE EQT ADDRESS DEF LU FOR IT'S ASSOCIATED EQT ENTRY. DEF TEMP IGNORE THE DRT CONTENTS, DEF EQTAD AND RETAIN THE EQT ADDRESS. SSB,RSS IF INVALID, SKIP TO REPORT THE ERROR. SZB,RSS RE-QUEUEING ON EQT#0 IS ALSO INVALID! JMP ERR5 * INFORM THE CALLER OF THE ERROR! * ADB D4 POINT TO WORD #5 OF THE EQT ENTRY. LDA B,I GET THE CONTENTS. RAL,SLA IF THE DEVICE IS BUSY, OR IT IS JMP *+3 WAITING FOR DMA--CONTINUE; SSA ELSE, IF IT IS DOWN, JMP ERR5 THEN REJECT THE REQUEST! AND B74K ISOLATE THE EQUIPMENT TYPE CODE. CPA B30K IF THE EQT IS LINKED TO A DISC FILE, JMP ERR5 * ERROR: INVALID LU! * LDA HEDAD,I GET THE DESTINATION-CLASS HEADER. AND B377 ISOLATE THE PENDING REQUEST COUNT. CPA B377 IF IT HAS ALREADY REACHED MAXIMUM (255), JMP ERR3 THEN REJECT THE NEW REQUEST! * LDA CONWD GET THE CONTROL WORD--IF ANY. ]dCPA BIT15 WAS IT SPECIFIED? JMP DEQUE NO. IGNORE BUFFER CHECKS. * AND D3 ISOLATE THE REQUEST CODE(BITS#1-0). SZA,RSS IF NOT SPECIFIED, JMP ERR6 THEN REJECT THE REQUEST! CPA D3 IF THIS IS A CONTROL REQUEST, JMP DEQUE THEN LENGTH CHECKING IS NOT NEEDED. * LDA BL/CP GET THE USER'S SPECIFIED LENGTH. CPA BIT15 IGNORE THE PARAMETER? JMP DEQUE YES. GO TO DE-QUEUE THE REQUEST. * SSA,RSS IF CHARACTERS WERE SPECIFIED, SKIP; CMA,INA,RSS ELSE, FORM NEGATIVE WORD COUNT & SKIP; ARS CONVERT CHARACTERS TO NEGATIVE WORDS, SZA,RSS AND IF THE LENGTH =0, JMP DEQUE NO LENGTH CHECKING IS REQUIRED. * LDB SBLK GET THE CONTROL-BLOCK ADDRESS. ADB D3 POINT TO THE BLOCK-SIZE WORD(#4). LDB B,I GET THE TOTAL BLOCK SIZE. SSB IF THE BLOCK SIZE IS ALREADY NEGATIVE, CMB,INB MAKE IT POSITIVE, FOR THE LENGTH CHECK. ADB DM8 SUBTRACT HEADER: REMAINDER= BUFFER SIZE. ADA B ADD USER'S SIZE TO ACTUAL BUFFER SIZE. SSA USER'S REQUEST > ACTUAL BUFFER SIZE? JMP ERR8 YES! REJECT THE REQUEST: ERROR -8. * SKP DEQUE LDA SCLAS IF THE REQUEST IS TO LDB SBLK RE-QUEUE ONTO THE SAME CLASS, CPB HEDAD AND ONLY ONE ENTRY IS PRESENT, STA HEDAD THEN POINT TO CORRECT HEADER ADDRESS. LDA B,I DE-QUEUE THE COMPLETED CLASS REQUEST STA SCLAS,I FROM THE SOURCE-CLASS QUEUE. * LDA LU GET THE USER-SPECIFIED LU, IF ANY. CPA BIT15 IF NONE WAS SUPPLIED, THEN JMP REQUE RE-QUEUE REQUEST ON DESTINATION CLASS. * CLE,INB POINT TO CONWORD IN COMPLETED REQUEST. LDA CONWD GET THE OPTIONAL CONTROL WORD. CPA BIT15 IF NONE WAS SUPPLIED, JMP GETPR THEN IGNORE IT; IOR CLAST ELSE, ENSU,RE THAT T-FIELD =3, STA B,I AND USE THE SUPPLIED PARAMETER. CCE,SLA SET =1 FOR WRITE REQUEST. CLA,CLE SET =0 FOR READ/CONTROL. * GETPR LDA PRIOR GET THE EQT QUEUEING PRIORITY NUMBER. INB POINT TO WORD #3 OF COMPLETED REQUEST. STA B,I STORE THE PRIORITY INTO THE ENTRY. INB POINT TO THE BLOCK SIZE (WORD#4). LDA B,I GET THE BLOCK LENGTH, AND MAKE IT CMA,SSA,INA NEGATIVE -OR POSITIVE, IF ALREADY NEG. SEZ IF IT'S A WRITE REQUEST, SAVE NEG. SIZE STA B,I TO PREVENT 'RTIOC' FROM RELEASING S.A.M. * LDA DESTN STORE THE CLASS-WORD FOR THE PROGRAM CLE,INB TO BE SCHEDULED ON COMPLETION, INTO STA B,I THE 5TH WORD OF THE CLASS REQUEST. INB POINT TO WORD#6 OF COMPLETED REQUEST. LDA BL/CP GET THE BUFFER LENGTH/CONTROL PARAMETER. CPA BIT15 IGNORE THE PARAMETER? JMP *+2 YES. GO TO CHECK NEXT PARAMETER. STA B,I NO. OVERLAY WORD#6 WITH CALLER'S VALUE. INB POINT TO WORD #7 OF COMPLETED REQUEST. LDA IRTN1 GET OPTIONAL GET-RETURN-PARAMETER #1. CPA BIT15 IGNORE IT? JMP *+2 YES. GO TO CHECK FOR FINAL PARAMETER. STA B,I NO. OVERLAY WORD#7 OF COMPLETED REQUEST. INB POINT TO LAST WORD OF COMPLETED REQUEST. LDA IRTN2 GET THE OPTIONAL GET-RETURN-PARAMETER. CPA BIT15 IGNORE IT? JMP *+2 YES. GO ADVANCE PENDING-REQUEST COUNT. STA B,I NO. OVERLAY WORD#8 OF COMPLETED REQUEST. * ISZ HEDAD,I ADD 1 TO THE PENDING-REQUEST COUNT. JSB LINK LINK INTO EQT QUEUE BY PRIORITY. SEZ IF THE EQT WAS ACTIVE, JMP EXIT RETURN TO THE CALLER; ELSE, LDA EQTAD GET THE EQT ADDRESS, AND JSB $DLAY GO TO INITIATE THE I/O OPERATION. JMP EXIT RETURN--OPERATION COMPLETE. / * REQUE LDA HEDAD,I GET DESTINATION CLASS-HEADER. STA B,I END-OF-QUEUE = 1RST WORD OF NEW ENTRY. STB HEDAD,I LINK THE NEW ENTRY AT END-OF-QUEUE. * INB POINT TO THE CONWORD. LDA B,I GET THE CONWORD. AND D3 SET THE XOR B,I REQUEST CODE =0, STA B,I TO INDICATE CLASS-TO-CLASS REQUE. * ADB D2 POINT TO THE BLOCK SIZE(WORD#4). LDA B,I GET THE BLOCK LENGTH. IF IT IS CMA,SSA,INA,RSS NEGATIVE, MAKE IT POSITIVE, AND STA B,I RESTORE THE BLOCK SIZE VALUE. INB POINT TO THE CLASS-WORD IN THE NEW ENTRY. LDA DESTN GET THE DESTINATION CLASS-WORD, STA B,I AND REPLACE THE OLD WITH THE NEW. * LDA CLTBA IF THE CLASS-HEADER IS THE ONLY THING CPA HEDAD IN THE CLASS-TABLE ENTRY, THEN RSS ANY WAITING PROGRAM MUST BE SCHEDULED; JMP EXIT ELSE: OPERATION COMPLETE--RETURN. * LDB SBLK,I GET THE CLASS-HEADER FROM IT'S NEW LOC'N. RBL,CLE,ELB POSITION WAIT-BIT(#14) TO . SEZ,RSS IF SOMEONE IS WAITING, SKIP TO SCHEDULE; JMP EXIT ELSE: OPERATION COMPLETE--RETURN. * RBR,RBR REPOSITION CLASS-HEADER (LESS BIT#14), STB SBLK,I AND RESTORE IT TO IT'S RIGHTFUL PLACE. * JSB $SCD3 SCHEDULE WAITER(=CLASS-TABLE ADDRESS) * EXIT CLA NORMAL EXIT: =0, =0 ERREX CLB ERROR EXIT: =-N, =0 STB SORCE CLEAR ALL OF STB DESTN THE PARAMETERS, STB LU IN PREPARATION STB CONWD FOR NEXT ENTRY STB PRIOR TO THE ROUTINE. STB BL/CP STB IRTN1 STB IRTN2 * EXIT2 JMP LBEX BYPASS MAP CODE: NON-DMS / NOP: DMS JRS DMSTS LBEX *** RESTORE THE APPROPRIATE MAPS. *** * LBEX JSB $LIBX RETURN TO THE CALLER, VIA THE DEF #REQU RTE PRIVILEGED ROUTINE PROCESSOR. *  SKP * ERROR PROCESSING SECTION. SPC 1 ERR9 ISZ ERR -9: CLASS QUEUE IMPROPERLY LINKED. ERR8 ISZ ERR -8: BUFFER LENGTH > CLASS BUFFER SIZE. ERR7 ISZ ERR -7: NEGATIVE PRIORITY CODE. ERR6 ISZ ERR -6: CONWD REQUEST CODE =0 (BITS#1-0). ERR5 ISZ ERR -5: INVALID LU OR DOWN DEVICE. ERR4 ISZ ERR -4: PGM. WAITING ON SOURCE--CAN'T DEQUE! ERR3 ISZ ERR -3: INVALID CLASS SECURITY CODE. ERR2 ISZ ERR -2: CLASS NOT ASSIGNED, OR NO Q (SOURCE) ERR1 ISZ ERR -1: CLASS =0, OR > MAX. NO. ALLOCATED. LDA ERR GET THE ERROR NUMBER, CMA,INA AND MAKE IT NEGATIVE. JMP ERREX GO TO RETURN THE ERROR-REPORT. * SPC 3 * RESET CURRENTLY-QUEUED SOURCE-CLASS BLOCK SIZE WORD TO A POSITIVE VALUE. * *[RE-QUEUED CLASS WRITES HAVE NEGATIVE BLOCK SIZE TO PREVENT BUFFER RELEASE] * RESET LDB SBLK GET THE BLOCK ADDRESS. ADB D3 POINT TO THE BLOCK SIZE (WORD#4). LDA B,I GET THE BLOCK SIZE VALUE. CMA,SSA,INA,RSS IF IT'S NEGATIVE, MAKE IT POSITIVE, STA B,I AND RESTORE THE CORRECT VALUE. JMP EXIT RETURN. * SKP * CLCHK NOP ENTRY/EXIT: CLASS VALIDITY CHECKING STA TEMP SAVE THE CLASS-WORD FOR LATER USE. AND B377 ISOLATE THE CLASS NUMBER STA B SAVE IT FOR A TABLE INDEX. CMA,CLE,INA,SZA,RSS IF THE NUMBER IS ZERO, CLE,RSS PREPARE FOR AN ERROR-EXIT. ADA $CLAS IF IT IS GREATER THAN MAXIMUM, CLA,SEZ,RSS THEN TAKE THE JMP ERR1 ERROR EXIT. * ADB DFCLS COMPUTE, AND SAVE, STB CLTBA THE CLASS-TABLE ENTRY ADDRESS. * LDA TEMP GET THE CLASS WORD. LDB B,I GET THE CLASS-TABLE ENTRY. CPA SORCE IF THE SOURCE-CLASS IS BEING CHECKED, SSB,RSS THEN CONFIRM THAT SOMETHING IS QUEUED. SZB,RSS ALSO VERIFY THAT THE CLASS IS ASSIGNED. JMP ERR2 * ERROR: NOT ASSIGNED OR NO QUEUE. SSB IF THIS IS THE CLASS-HEADER, THEN LDB CLTBA GET THE CORRECT ADDRESS. STB BLKAD SAVE THE CLASS-QUEUE POINTER, IF ANY. * LOOP LDA B,I TRACK DOWN SSA DOWN THE JMP SAVAD CLASS HEADER. SZA,RSS IF THE LINK WORD IS ZERO, JMP ERR9 THEN THE CLASS QUEUE IS CORRUPT! LDB B,I LAST QUEUE NOT YET LOCATED, JMP LOOP SO CONTINUE THE SEARCH. * SAVAD STB HEDAD SAVE THE CLASS-HEADER ADDRESS. * LDA TEMP ISOLATE THE AND SCMSK USER-SPECIFIED SECURITY CODE, STA B AND SAVE IT FOR COMPARISON. LDA HEDAD,I GET THE CLASS-HEADER. AND SCMSK ISOLATE IT'S SECURITY CODE. CPA B IF THEY COMPARE, THEN RSS ALL'S WELL--PROCEDE; JMP ERR3 ELSE, REPORT THE ERROR! * LDA TEMP GET THE CLASS-WORD, AGAIN. CPA SORCE IF IT'S THE SOURCE-CLASS, THEN RSS SKIP TO CHECK FOR WAITERS; JMP CLCHK,I ELSE, RETURN TO THE CALLER. * LDB HEDAD,I GET THE CLASS-HEADER. RBL POSITION THE WAIT-BIT(#14) FOR TEST. SSB IF SOMEONE IS WAITING, JMP ERR4 THEN RE-QUEUEING IS IMPROPER! * JMP CLCHK,I VALID CLASS: RETURN--POINTERS SET. * SKP * LINK CLASS REQUEST INTO EQT QUEUE, ACCORDING TO PRIORITY. * * [ CODE SIMULATES RTIOC, SINCE ENTRY INTO RTIOC'S 'LINK' NOT PROVIDED. ] * LINK NOP LDB EQTAD GET EQT QUEUE-HEAD ADDRESS. CLE,RSS SET FIRST-FLAG AND SKIP TO START SCAN. * LINK1 SEZ,CCE,RSS IF FIRST, RESET FLAG & SKIP FIRST ENTRY. JMP LINK4 GO TO START THE SCAN. STB TEMP SAVE ADDRESS OF ENTRY UNDER EXAMINATION. INB POINT TO SECOND WORD OF THE ENTRY. LDA B,I GET THE CONTROL WORD. INB ADVANCE POINTER TO ENTRY'S THIRD WORD. AND CLAST ISOLATE CNLHTHE REQUEST TYPE ('T'BITS#15,14). RAL,RAL POSITION TO BITS#1,0 TO TEST & CLEAR. SLA,ARS TEST FOR BUFFERED REQUEST & CLEAR BIT. JMP LINK2 BUFFERED: POINTS TO PRIORITY. SLA,ARS TEST FOR SYSTEM REQUEST & CLEAR BIT. JMP LINK3 SYSTEM: USE PRIORITY =0; =0. ADB D4 NORMAL USER REQ.: PRIOR. IN ID WORD#7. LINK2 LDA B,I GET PRIORITY OF ENTRY UNDER EXAMINATION. LINK3 LDB TEMP GET THE ENTRY'S ADDRESS. CMA,INA SUBTRACT THE ENTRY'S PRIORITY FROM ADA PRIOR THE PRIORITY OF THE NEW REQUEST. 8N SSA IF CURRENT ENTRY'S PRIORITY IS LOWER JMP LINK5 THAN NEW ONE, GO LINK-IN NEW REQUEST. * LINK4 STB TEMP+1 SAVE ADDRESS OF PREVIOUS ENTRY. LDB B,I GET ADDRESS OF NEXT ENTRY IN QUEUE. ELB,CLE,ERB CLEAR POSSIBLE SIGN AND SAVE . SZB IF END-OF-LIST: SKIP TO ADD NEW ENTRY; JMP LINK1 ELSE, CONTINUE THE SCAN. * LINK5 LDA SBLK GET THE ADDRESS OF THE NEW ENTRY. STB SBLK,I LINK LOWER PRIORITY ENTRIES OR 0 (EOL). XOR TEMP+1,I KEEP THE SIGN AND C100K OF THE OLD WORD XOR TEMP+1,I IF IT WAS SET. STA TEMP+1,I LINK NEW REQ. AFTER HIGHER PRIOR. ENTS. JMP LINK,I RETURN:=0 START I/O;=1 I/O ACTIVE. * SKP * A EQU 0 B EQU 1 B377 OCT 377 CLASS NUMBER MASK. B30K OCT 30000 B74K OCT 74000 BIT15 OCT 100000 CLAST OCT 140000 T-FIELD FOR CLASS REQUESTS D2 DEC 2 D3 DEC 3 D4 DEC 4 DM1 DEC -1 DM8 DEC -8 DFCLS DEF $CLAS CLASS TABLE ADDRESS. LOWPR DEC 32767 LOWEST PRIORITY FOR END-OF-QUEUE. C100K EQU LOWPR SCMSK OCT 17400 CLASS SECURITY-CODE MASK. * BLKAD NOP DESTINATION: SAM-BLOCK ADDRESS CLTBA NOP DESTINATION: CLASS-TABLE ADDRESS DMSTS NOP DMS MAP STATUS EQTAD NOP EQT ADDRESS ERR NOP ERROR NUMBER HEDAD NOP DESTINATION: CLASS-HEADER ADDRESS SBLK NOP SOURCE: SAM-BLOCK ADDRESS SCLAS NOP SOURCE: CLASS-TABLE ADDRESS TEMP BSS 2 TEMPORARY STORAGE * ORG BLKAD ONE-TIME CONFIGURATION IN STORAGE AREA. * CONFG LDB DFCLS GET A RSS DIRECT ADDRESS LDB B,I FOR THE RBL,CLE,SLB,ERB BEGINNING JMP *-2 OF THE STB DFCLS CLASS TABLE. LDB $OPSY GET THE OP-SYSTEM IDENTIFIER. RBR,CLE,ERB POSITION DMS BIT(#1) TO . CLB,SEZ,CLE,RSS IF DMS SYSTEM, SKIP TO ENABLE DMS JMP NODMS    CODE; ELSE JUST CLEAR CONFG. CALL. STA MAPSW ALLOW SWITCHING TO THE SYSTEM MAP. STA EXIT2 PROVIDE FOR MAP RESTORATION, UPON EXIT. NODMS STA INIT NO FURTHER NEED FOR CONFIGURATION. JMP INIT+1 RETURN TO NORMAL PROCESSING. * ORR < SIZE OF #REQU > * END f  l 91740-18029 1740 S C0122 DS/1000 MODULE: D65SV              H0101 [QASMB,L,R,C HED D65SV 91740-16029 REV 1740 HEWLETT-PACKARD CO. 1977 NAM D65SV,7 91740-16029 REV 1740 771018 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 **************************************************************** * * D65SV * * SOURCE PART # 91740-18029 * * REL PART # 91740-16029 * * WRITTEN BY CHUCK WHELAN * * DATE WRITTEN NOV 1976 * * MODIFIED BY C.C.H. # * * DATE MODIFIED 10/18/77 # * *************************************************************** SPC 2 * THIS ROUTINE SENDS SLAVE REQUESTS * CALLING SEQUENCE: * JSB D65SV * DEF *+5 * DEF RQBUF REQUEST BUFFER * DEF RQLEN REQUEST LENGTH * DEF DABUF DATA BUFFER * DEF DATAL DATA LENGTH * * * * * D65SV IS CALLED BY DS/1000 MONITORS TO SEND A REPLY AND * POSSIBLY DATA BACK TO THE ORIGINATING NODE. IT PERFORMS THE * FOLLOWING STEPS: * 1. DEALLOCATES THE SLAVE TCB, IF THIS FAILS TAKES THE * ERROR RETURN. * 2. VERIFIES THAT 7<=REPLY LENGTH<=31 AND IF NOT RETURNS * A DS03 ERROR. * 3. CONVERTS THE NODAL ADDRESS OF THE ORIGINATING CPU * TO AN OUTPUT LU. IF LU CONVERSION FAILS, A DS04 ERROR * IS RETURNED. * 4. DOES A CLASS I/O WRITE/READ OF THE REPLY(/DATA) TO * GRP3HM'S CLASS NUMBER (OR RPCNV'S CLASS IF A 3000 WAS * WAS THE REQUEST ORIGINATOR. * 5. RETURNS * SPC 2 ENT D65SV EXT EXEC,.ENTR,$OPSY EXT #RSAX,#NCNT,#GRPM,#BREJ,#RPCV SPC 2 RQBUF NOP RQLEN NOP DABUF NOP DATAL NOP * D65SV NOP JSB .ENTR GET CALLER'S PARAMETERS DEF RQBUF * LDA RQBUF INA STA TEMP1 ADDR OF SEQ.# INA STA TEMP2 ADDR OF ORIGINATORS NODE * JSB #RSAX DELETE SLAVE TCB DEF *+4 DEF K7 TEMP1 NOP DEF RQBUF,I STREAM SSB JMP D65SV,I TCB SEARCH FAILED, ERROR RETURN STA TEMP1,I RESTORE OLD SEQ # IN REQUEST * * VERIFY THAT 6 < REQUEST LENGTH < 32 * LDB "03" LDA RQLEN,I GET REQUEST LENGTH ADA N7 MUST BE AT LEAST 7 SSA JMP GETDS GIVE DS03 IF <7 ADA N25 SSA,RSS JMP GETDS GIVE DS03 IF > 31 * * CHECK FOR REPLY TO DS/3000 REPLY CONVERTER. * LDB #RPCV PRESET = "RPCNV'S" CLASS NO. # LDA RQBUF,I GET THE STREAM WORD OF THE REPLY. # AND RTYCT CLEAR THE OLD RETRY COUNTER. # IOR #BREJ INITIALIZE NEW RETRY COUNT. # STA RQBUF,I RESTORE MODIFIED STREAM WORD. # * # CLE,ELA POSITION DS/3000 BIT#15 TO . # CLA,SEZ,CLE IF THIS IS A DS/3000 REPLY, SET LU=0, # JMP RPL3K THEN BYPASS DS/1000 PROCESSING. # * SKP * * CONVERT DESTINATION NODE TO LU * LDA TEMP2,I GET THE ORIGINATOR'S NODAL ADDRESS SSA ABSOLUTE DESTINATION CODE ? (NEIGHBOR) JMP ABS YES, GET LU AND RETURN DLD #NCNT NO, GET ADDR & SIZE OF THE TABLE STA TEMP1 SAVE COUNTER * LOOP JSB LODWD GET A CPU # INB POINT TO CORRESPONDING LU CPA TEMP2,I IS IT THE GOOD  ONE ? JMP LUFND YES INB BUMP POINTER TO NEXT NODE # ISZ TEMP1 NO, END OF TABLE ? JMP LOOP NO, CONTINUE * LDB "04" YES, CPU # ERROR * GETDS LDA "DS" JMP D65SV,I RETURN WITH ERROR CODE * ABS CMA,INA MAKE IT >0 JMP LUOK * LUFND JSB LODWD FETCH LU AND B77 ISOLATE IT * * NOW SEND THE REQUEST(/DATA) * LUOK LDB #GRPM GET "GRPM'S" CLASS NUMBER. # RPL3K IOR CONWX SET "Z" BIT AND "WRITE" INDICATOR # STA TEMP1 SAVE CONFIGURED CONWD. # STB TEMP2 SAVE CLASS NUMBER (#GRPM OR #RPCV). # * JSB EXEC DO CLASS WRITE/READ DEF *+8 DEF CLS20 NO ABORT DEF TEMP1 CONTROL WORD DEF DABUF,I DATA BUFFER ADDRESS DEF DATAL,I DATA LENGTH DEF RQBUF,I REQUEST BUFFER ADDRESS DEF RQLEN,I REQUEST LENGTH DEF TEMP2 * JMP D65SV,I ISZ D65SV JMP D65SV,I SKP * * LOAD WORD FROM S.A.M., CROSS-LOAD IF DMS SYSTEM * LODWD NOP LDA $OPSY OPERATING SYSTEM TYPE RAR,SLA BIT#1=0 IF NON-DMS # JMP XLOAD DMS: USE CROSS LOAD. # * # LDA B,I NON-DMS: GET THE WORD FROM S.A.M. # JMP LODWD,I RETURN WITH = WORD, UNCHANGED. # * # XLOAD XLA B,I GET THE WORD FROM THE SYSTEM MAP. # JMP LODWD,I RETURN: =WORD, UNCHANGED. # * * DATA AREA * B EQU 1 # TEMP2 NOP B77 OCT 77 CONWX OCT 10100 RTYCT OCT 170077 CLS20 OCT 100024 CLASS WRITE/READ--NO ABORT K7 DEC 7 N7 DEC -7 N25 DEC -25 "03" ASC 1,03 "04" ASC 1,04 "DS" ASC 1,DS END  mv 91740-18030 1740 S C0122 DS/1000 MODULE: DRTEQ              H0101 :ASMB,R,L,Z,C HED DRT/EQT ADDRESS ROUTINE * (C) HEWLETT-PACKARD CO. 1977 * IFN NAM DRTEQ,7 91740-16030 REV 1740 770314 XIF IFZ NAM DRTEQ,30 91740-16030 REV 1740 770330 XIF ENT DRTEQ IFN EXT .ENTR XIF IFZ EXT .ENTP,$LIBR,$LIBX XIF * NAME: DRTEQ * SOURCE: 91740-18030 * RELOC: 91740-16030 * PGMR: C.C.H. [ 01/17/76 ] * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * DRTEQ ACCEPTS A USER-SUPPLIED LOGICAL UNIT NUMBER, AND RETURNS * TO THE CALLER, BOTH THE CONTENTS OF THE DEVICE REFERENCE TABLE * ENTRY FOR THAT LOGICAL UNIT, AND THE ADDRESS OF THE FIRST WORD * OF THE EQT ENTRY WHICH IS LINKED TO THE SPECIFIED LOGICAL UNIT. * * DRTEQ CALLING SEQUENCE: * * JSB DRTEQ * DEF *+2 [ OR *+2+N WHERE N= NUMBER OF OPTIONAL PARAMETERS <=2 ] * DEF LU ADDRESS OF LOGICAL UNIT NO. IN QUESTION. * [DEF DRTEN] [OPTIONAL ADDRESS FOR RETURN OF DRT ENTRY CONTENTS.] * [DEF EQTAD] [OPTIONAL ADDRESS FOR RETURN OF EQT ENTRY LOCATION.] * =DRT ENTRY CONTENTS; =EQT ADDRESS. * * FORTRAN CALLING SEQUENCE: CALL DRTEQ(LU,IDRT,IEQAD) OR REG=DRTEQ(LU) * * NOTE: IN THE SPECIAL CASE OF LOGICAL UNIT NUMBERS WHICH ARE * LINKED TO EQT #0 ("BIT BUCKET"), THE DRT ENTRY RETURNED * TO 'DRTEN' & WILL REFLECT THE ACTUAL CONTENTS; I.E., * ANY SUBCHANNEL OR LU-LOCK BITS WILL BE PASSED TO THE CALLER. * SINCE THERE IS NO EQT ENTRY ASSOCIATED WITH THE LU, * 'EQTAD' & WILL BOTH BE SET =0. * * DRTEQ ERROR PROCEOSSING: * * INVALID LOGICAL UNIT NUMBERS WILL BE INDICATED BY SETTING -1 * INTO THE RETURNED PARAMETERS-IF ANY, AND INTO BOTH &, UPON * RETURN TO THE CALLER. * * SUP [SUPPRESS EXTENDED LISTING] * LU NOP LOGICAL UNIT ADDRESS. P1 DEF A OPTIONAL DRT ENTRY RETURN ADDRESS. P2 DEF B OPTIONAL EQT ADDRESS RETURN LOCATION. SPC 1 DRTEQ NOP ENTRY/EXIT. IFN JSB .ENTR OBTAIN DIRECT ADDRESSES XIF IFZ JSB $LIBR DEFINE THIS SUBROUTINE NOP TO BE PRIVILEGED. JSB .ENTP PRIVILEGED: GET DIRECT ADDRESSES. XIF DEF LU DEFINE PARAMETER STORAGE AREA. SPC 1 * RE-INITIALIZE CALLING-PARAMETER ADDRESSES TO POINT TO & , * IN ORDER TO ALLOW USER TO CALL WITHOUT RETURN-DATA PARAMETERS. SPC 1 DLD P1 GET PARAMETER ADDRESSES-IF ANY. DST DRT SAVE FOR DATA RETURN. DLD REGDF GET INITIAL PARAMETER DEFINITION. DST P1 RE-INITIALIZE FOR NO PARAMETERS. SPC 1 * VERIFY THAT CALLER HAS REQUESTED DATA FOR A VALID LOGICAL UNIT NO. SPC 1 LDA LU,I GET THE USER SUPPLIED LU NUMBER. AND B77 ISOLATE THE PERTINENT BITS. ADA M1 SUBTRACT ONE, FOR VALIDITY CHECKING. STA B SAVE FOR DRT INDEXING. CMA,CLE IF THE SPECIFIED LU NUMBER ADA LUMAX IS NOT IN THE RANGE: SEZ,RSS 1<=LU<=LUMAX, THEN JMP ERROR THE LU IS INVALID! SPC 1 * RETRIEVE THE CONTENTS OF THE DEVICE REFERENCE TABLE ENTRY. SPC 1 ADB DRTA FIND THE DEVICE REFERENCE TABLE ENTRY LDA B,I FOR A VALID LOGICAL UNIT NUMBER. STA AREG SAVE THE DRT ENTRY FOR THE CALLER. STA LU SAVE IT FOR RETURN IN . AND B77 ISOLATE THE EQT ORDINAL. CLB PREPARE TO RETURN EQT ADDRESS =0. SZA,RSS IF THE ORDINAL IS ZERO, JMP ZERO RETURN WITH EQT ADDRESS =0. SPC 1 * CALCULATE THE ADDRESS OF THE EQUIPMENT TABLE ENTRY LINKED TO THE LU. SPC 1 ADA M1 ORDINAL-1 =RELATIVE EQT ENTRY ORDINAL. MPY D15 RELATIVE ENTRY*WORDS/ENTRY =OFFSET. LDB A GET EQT-ENTRY OFFSET IN . ADB EQTA FORM ABSOLUTE EQT-ENTRY ADDRESS IN . ZERO STB BREG SAVE THE EQT ADDRESS FOR THE CALLER. JMP EXIT GO TO RETURN THE REQUESTED INFORMATION. * SKP * PROCESS INVALID LOGICAL UNIT NUMBER ERRORS. SPC 1 ERROR CCA INVALID LOGICAL UNIT NUMBER. STA AREG RETURN TO USER WITH BOTH PARAMETERS STA BREG AND & SET TO -1. SPC 1 * PASS DATA BACK TO THE CALLER AND THEN RETURN. SPC 1 EXIT LDA AREG = DRT ENTRY OR -1, IF ERROR. STA DRT,I PASS DRT ENTRY TO CALLER, IF REQUESTED. LDB BREG = EQT ADDRESS OR -1, IF ERROR. STB EQTAD,I PASS EQT ADDRESS TO CALLER, IF REQUESTED. IFN JMP DRTEQ,I RETURN:=DRT OR -1;=EQT ADD. OR -1. XIF IFZ JSB $LIBX RETURN TO CALLER DEF DRTEQ VIA PRIVILEGED PROCESSOR. XIF SPC 1 * CONSTANTS, POINTERS, AND STORAGE. SPC 1 A EQU 0 B EQU 1 B77 OCT 77 EQTA EQU 1650B ADDRESS OF 1RST WORD OF EQUIPMENT TABLE. DRTA EQU 1652B ADDRESS OF DEVICE REFERENCE TABLE. LUMAX EQU 1653B NUMBER OF VALID DRT ENTRIES. M1 DEC -1 D15 DEC 15 AREG NOP TEMPORARY STORAGE: DRT ENTRY OR ERROR. BREG NOP TEMPORARY STORAGE: EQT ADDR. OR ERROR. DRT NOP DRT RETURN-PARAMETER ADDRESS. EQTAD NOP EQT ADDR. RETURN-PARAMETER ADDRESS. REGDF OCT 0,1 REGISTER ADDRESSES FOR INITIALIZATION. SPC 1 END U nw 91740-18031 1740 S C0222 DS/1000 MODULE : RES              H0102 V#ASMB,R,L,C HED DS/1000 RESIDENT STORAGE * (C) HEWLETT-PACKARD CO. 1977 * NAM RES,30 91740-16031 REV 1740 770524 SPC 1 ENT #BUSY,#FWAM,#GRPM,#BREJ,#LDEF,#MNUM,#MRTH ENT #MSTO,#NODE,#NCNT, #NRV,#NULL, #QRN,#RSAX,#RTRY ENT #ST00,#ST01,#ST02,#ST03,#ST04,#ST05,#ST06,#ST07 ENT #ST08,#ST09,#ST10,#SVTO,#TBRN,#WAIT,#CNOD,#LNOD ENT #QCLM,#NCLR,#SCLR,#SWRD,#PLOG,#RFSZ,#SAVM ENT #RPCV,#RQCV,#LU3K,#QZRN,#QXCL,#TST ENT D$LID,D$RID SPC 1 EXT $ALC,$CGRN,$LIBR,$LIBX,$OPSY,$RTN,.ENTP * * NAME: RES * SOURCE: 91740-18031 * RELOC: 91740-16031 * PGMR: C. HAMILTON [ 03/02/77 ] * D. TRIBBY [ 03/17/77 ] * HP3000 MODIFICATIONS * * * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * SPC 5 * RES IS A MEMORY-RESIDENT SYSTEM LIBRARY MODULE USED BY THE * DS/1000 (DISTRIBUTED SYSTEMS) SOFTWARE PACKAGE TO PROVIDE * CONTROLLED-ACCESS COMMON STORAGE. ITEMS STORED IN ARE NETWORK * GLOBAL CONSTANTS & VARIOUS LISTS WHICH CONTAIN THE TRANSACTION-BLOCK * RECORDS OF CURRENT TRANSACTIONS-IN-PROCESS ON THE NETWORK. * SPC 5 * #RSAX IS A PRIVILEGED LIBRARY ROUTINE EMBEDDED IN RES * WHICH CONTROLS ACCESS TO, AND ALLOWS MAINTENANCE OF, THE * NETWORK'S TRANSACTION-CONTROL-BLOCKS (TCB'S) FOR CURRENT REQUESTS. * SKP * #RSAX OPERATION: SPC 1 * 1. ON FIRST ENTRY, VERIFY THAT CALLER IS ELSE, ERROR #1! * A. SAVE I.D. SEGMENT ADDRESS FOR S.A.M. VALIDITY CHECKS. * B. IF BIT #1 OF $OPSY =1, THEN OP-SYSTEM USES DMS HARDWARE, * REQUIRING THE USE OF OF DMS FIRMW{ZARE MACRO INSTRUCTIONS. * C. IF DMS, THEN CLEAR THE DMS-BYPASSING JUMP INSTRUCTIONS. * D. IF NON-DMS, ALLOW BYPASS INSTRUCTIONS TO REMAIN. * E. CLEAR THE 'JSB' TO THE INITIALIZATION ROUTINE. SPC 1 * 2. GET PARAMETERS & SAVE LOCALLY, IN PREPARATION FOR DMS MAP SWITCHING. * A. IF DMS SYSTEM, THEN SAVE MAP STATUS AND SWITCH TO SYSTEM MAP. SPC 1 * 3. CHECK MODE OF OPERATION: * A. IF =0, GO TO 7. TO ALLOCATE SYSTEM MEMORY. * B. IF =1, GO TO 7. TO DE-ALLOCATE SYSTEM MEMORY. * C. IF =2, GO TO 4. TO ADD NEW ENTRY TO MASTER-REQUEST LIST. * D. IF =3, GO TO 5. TO ADD NEW ENTRY TO A SLAVE-STREAM LIST. * E. IF =4, GO TO 6. TO SEARCH FOR A MASTER TCB ENTRY. * F. IF =5, GO TO 6. TO SEARCH FOR A SLAVE TCB ENTRY. * G. IF =6, GO TO 6. TO REMOVE A MASTER ENTRY & RETURN IT TO THE POOL. * H. IF =7, GO TO 6. TO REMOVE A SLAVE ENTRY & RETURN IT TO THE POOL. * I. IF =8, GO TO 4. TO ADD AN HP3000 PROCESS. * J. IF=10, GO TO 6. TO REMOVE AN HP3000 PROCESS. * K. IF NONE OF THE ABOVE - ERROR #2 --- REJECT! SPC 1 * 4. CHECK FOR AVAILABLE ENTRY, BEFORE ADDING TO THE MASTER LIST. * A. IF NONE AVAILABLE, CALLER HAS NOT CHECKED AVAILABILITY OF * TABLE-ACCESS RN (#TBRN) BEFORE ENTRY - ERROR #3 --- REJECT! * B. IF ENTRY AVAILABLE, SEARCH BY ID SEG. ADDR. FOR OBSOLETE * ENTRIES IN THE MASTER REQUEST LIST. * C. FLAG ALL OBSOLETE MASTER-REQUEST ENTRIES AS BAD, IF THEY * ORIGINATED WITH SAME REQUESTOR (BIT#15 =1 OF WORD#5). * D. LINK THE NEW ENTRY INTO THE MASTER REQUEST LIST. * E. USE TIMEOUT FROM NRV--IF SPECIFIED; ELSE USE DEFAULT: #MSTO. * F. TRANSFER THE CALLER'S DATA INTO THE NEW ENTRY. * G. IF ENTRY POOL NOT DEPLETED, CLEAR TABLE-ACCESS RN & RETURN. SPC 1 * 5. CHECK FOR AVAILABLE ENTRY, BEFORE ADDING TO THE SLAVE-STREAM LIST. * A. IF NONE, #TBRN NOT CHECKED BEFORE ENTRY - ERROR #3 --- REJECT! * B. CHECK STREAM PARAMETER FOR ACCEPTABLE TYPE--ERROR #1, IF INVALID. * C. LINK THE NEW ENTRY INTO THE SPECIFIED SLAVE-STREAM LIST. * D. TRANSFER CALLER'S DATA INTO THE NEW ENTRY. * E. RETURN VIA 4.G.(ABOVE), TO UPDATE STATUS OF TABLE-ACCESS RN. SPC 1 * 6. INITIALIZE LIST POINTERS, BEFORE SEARCHING FOR/CLEARING AN ENTRY. * A. IF IMPROPER LIST SPECIFIED - ERROR #1 --- REJECT! * B. SEARCH FOR ENTRY. IF ENTRY NOT LOCATED, REJECT---ERROR #4! * C. IF MODE=4/5, GET CONTENTS OF ENTRY WORD#4 & RETURN TO CALLER. * D. IF MODE=6/7, GET CONTENTS OF WD#4 & RE-LINK ENTRY IN NULL LIST. * E. RETURN VIA 4.G.(ABOVE), TO UPDATE STATUS OF TABLE-ACCESS RN. SPC 1 * 7. VERIFY CALLER TO BE BEFORE ALLOCATION/DE-ALLOCATION OF S.A.M. * A. IF MODE & #FWAM =0, GO TO ALLOCATE SYSTEM AVAILABLE MEMORY. * B. IF REQUEST GRANTED, STORE BLOCK ADDRESS IN #FWAM, SIZE IN #SAVM. * D. IF REQUEST DENIED, RETURN REASON IN , FOR FURTHER ANALYSIS. * E. IF MODE=1 & PRAM1=#FWAM, RETURN MEMORY TO THE SYSTEM. * F. CLEAR #FWAM & #SAVM, BEFORE RETURNING TO . SKP * #RSAX CALLING SEQUENCE: * * JSB #RSAX * DEF *+3 [ OR *+4 OR *+5 ] * DEF MODE MODE OF OPERATION (0 THRU 7) * DEF PRAM1 REQUIRED PARAMETER (SEE TABLE, BELOW) * DEF PRAM2 REQUIRED FOR MODES: 2,3,5,7 [OPTIONAL MODES: 0,1,4,6] * DEF PRAM3 REQUIRED FOR MODES 2 & 3 ONLY (NODAL ADDRESS) * : NORMAL-(SEE TABLE); ERROR-(SEE LATER DESCRIPTION) * * WHERE: * * +----+------------+--------------+------------+---------+-------+-------+ * !MODE! ACTION ! PRAM1 ! PRAM2 ! PRAM3 ! RTN! RTN! * !====+============+==============+============+=========+=======+=======+ * ! 0 ! GET MEMORY !#WORDS TO GET ! NOT USED ! NOT USED!FWA SAM! #WORDS! * +----+------------+--------------+------------+---------+-------+-------+ * ! 1 ! RTN MEMORY !FWA SAM BLOCK ! NOT USED ! NOT USED! 0 ! 0 ! * +----+------------+--------------+--------m----+---------+-------+-------+ * ! 2 ! ADD MASTER !MASTER CLASS# !ID SEG.ADDR.!DEST.NODE!LOC SEQ!TCB ADR! * +----+------------+--------------+------------+---------+-------+-------+ * ! 3 ! ADD SLAVE !ORIG. SEQ. NO.!SLAVE STREAM!ORIG.NODE!LOC SEQ!TCB ADR! * +----+------------+--------------+------------+---------+-------+-------+ * ! 4 ! FIND MASTER!LOCAL SEQ. NO.! NOT USED ! NOT USED!CLASS# !TCB ADR! * +----+------------+--------------+------------+---------+-------+-------+ * ! 5 ! FIND SLAVE !LOCAL SEQ. NO.!SLAVE STREAM! NOT USED!ORG SEQ!TCB ADR! * +----+------------+--------------+------------+---------+-------+-------+ * ! 6 !CLEAR MASTER!LOCAL SEQ. NO.! NOT USED ! NOT USED!CLASS# ! 0 ! * +----+------------+--------------+------------+---------+-------+-------+ * ! 7 !CLEAR SLAVE !LOCAL SEQ. NO.!SLAVE STREAM! NOT USED!ORG SEQ! 0 ! * +----+------------+--------------+------------+---------+-------+-------+ * ! 8 ! ADD PNL ! LOGGING LU # !ID SEG.ADDR.!PROCESS #!LOC.SEQ!TCB ADR! * +----+------------+--------------+------------+---------+-------+-------+ * ! 10 ! CLEAR PNL !PROCESS NUMBER! NOT USED ! NOT USED! LOG LU! 0 ! * +----+------------+--------------+------------+---------+-------+-------+ * * #RSAX ERROR INDICATIONS: * * ERROR DETECTION WILL RESULT IN A RETURN TO THE CALLER WITH THE * REQUESTED ACTION NOT PERFORMED. * * = -1: AN INVALID LIST HAS BEEN SPECIFIED; FIRST CALLER * IS NOT ; MEMORY ALLOCATION/DE-ALLOCATION IMPROPER. * * = -2: THE SPECIFIED MODE OF OPERATION IS UN-DEFINED. * * = -3: NO SPACE FOR A NEW ENTRY. THE CALLER DID NOT WAIT FOR * THE TABLE-ACCESS RESOURCE NUMBER (#TBRN) TO BE CLEARED, * PRIOR TO CALLING #RSAX. (THIS SHOULD NOT OCCUR IF ALL * CALLERS ADHERE TO THE RN CONVENTION, PRIOR TO CALLING.) * * = -4: ENTRY CANNOT BE LOCATED; ACCESSING AN EMPTY LIST. * *  MODE 0 ( ALLOCATION ): =-1,=MAXIMUM POSSIBLE NO. OF WORDS. * = 0,=MAXIMUM WORDS AVAILABLE NOW. * 1 (DE-ALLOCATION): NO ERRORS INDICATED. SKP * LIST FORMATS: * * 'RES' SYSTEM AVAILABLE MEMORY * ------------------------------- ------------------------- * * #PNLH < ADDR 1ST PROCESS# LIST ENTRY>... * < ---------------------- > * < PROCESS NUMBER > * < LOGGING LU NUMBER > * * * #MRTH < ADDR.=1RST MASTER-LIST ENTRY>... * < UD------*TIMEOUT CNTR. > * < LOCAL SEQUENCE NUMBER > * * * * #ST00 ... * . < * MONITOR'S CLASS NUMBER > < UD------*TIMEOUT CNTR. > * . < LOCAL SEQUENCE NUMBER > * . < ORIGIN SEQUENCE NUMBER > * . < ORIGIN NODAL ADDRESS > * . * . * #STXX < ******* FORMAT SAME ******* >...< **** FORMAT SAME ***** > * < ********* FOR ALL ********* > < ******** FOR ********* > * < ****** SLAVE STREAMS ****** > < ******** ALL ********* > * < ******* SLAVE ******** > * < ****** STREAMS ******* > * * WHERE: - = NOT USED; A(#15) = ABORT O.K.; B(#15) = BAD ENTRY. * C(#15) = LONyG MASTER TIMEOUT (APPROXIMATELY 20 MIN.) * U(#15) = UPLIN TEMPORARY BIT. D(#14) = HP3000 REQUEST. * * *NOTE: 0 IN LIST HEAD OR FIRST WORD OF ENTRY SIGNALS END OF LIST. * * * NETWORK ROUTE VECTOR TABLE: * * #NCNT < NEGATIVE NUMBER OF NRV PAIRS> * #NRV < ADDRESS OF NRV TABLE >...< NODAL ADDRESS (0-32767)> * * < *** NODAL ADDRESS *** > * < *** LOGICAL UNIT *** > * . * : * SKP MODE NOP MODE OF OPERATION. PRAM1 NOP USER PRAM2 NOP SPECIFIED PRAM3 NOP PARAMETERS. SUP [SUPPRESS EXTENDED LISTING] #RSAX NOP ENTRY/EXIT: TCB MANAGEMENT. JSB $LIBR DECLARE THIS TO BE NOP A PRIVILEGED ROUTINE. JSB .ENTP OBTAIN DIRECT ADDRESSES DEF MODE FOR PARAMETERS & RETURN POINT. * INIT JSB CONFG 1RST ENTRY: CONFIGURE; 'NOP' THEREAFTER. * CLA [PROTECT AGAINST MISSING PARAMETER] LDA PRAM1,I OBTAIN STA PRAM1 PARAMETERS CLA FOR LDA PRAM2,I LOCAL USE, STA PRAM2 IN PREPARATION CLA FOR A LDA PRAM3,I POSSIBLE STA PRAM3 DMS MAP-SWITCH. CLA LDB MODE,I GET THE MODE OF OPERATION, STB MODE AND SAVE IT LOCALLY, ALSO. LDA PRAMA INITIALIZE THE KEYWORD ADDRESS POINTER STA KEYAD TO REFERENCE FIRST CALLER PARAMETER. * DMS1 JMP MODCK BYPASS MAP CODE: RTE-II / 'NOP': RTE-III * RSA GET CURRENT MAP STATUS. RAL,RAL POSITION CURRENT STATUS FOR RESTORATION. STA DMSTS SAVE FOR RESTORATION BEFORE EXIT. SJP MODCK  ENABLE SYSTEM MAP AND CONTINUE. * DMSTS NOP DMS MAP-STATUS STORAGE. * MODCK SZB,RSS MODE =0? JMP SAM YES, GO TO ALLOCATE MEMORY. CPB P1 MODE =1? JMP SAM RETURN MEMORY TO RTE. CPB P2 MODE =2? JMP ADENT GO TO CREATE A MASTER TCB ENTRY. CPB P3 MODE =3? JMP ADENT GO TO CREATE A SLAVE TCB ENTRY. CPB P4 MODE =4? JMP FIND SEARCH FOR A MASTER TCB ENTRY. CPB P5 MODE =5? JMP FIND SEARCH FOR A SLAVE TCB ENTRY. CPB P6 MODE =6? JMP FIND SEARCH FOR/CLEAR A MASTER TCB ENTRY. CPB P7 MODE =7? JMP FIND SEARCH FOR/CLEAR A SLAVE TCB ENTRY. CPB P8 MODE =8? JMP ADENT GO TO CREATE A PROCESS # ENTRY. CPB P10 MODE =10? (LAST CHANCE!) JMP FIND SEARCH FOR/CLEAR A PROCESS # ENTRY. * JMP ERR02 * ERROR #2: INVALID MODE! * * SPC 10 * ADD A NEW ENTRY TO THE MASTER OR SLAVE-STREAM LIST. SPC 1 ADENT LDA #NULL GET THE NULL LIST LINK-WORD. SZA,RSS IS AN ENTRY AVAILABLE FROM THE POOL? JMP ERR03 * NO. ERROR #3: NO ENTRY AVAILABLE! STA ENTAD YES. SAVE ADDRESS OF NEW ENTRY. * INA POINT TO THE SECOND WORD OF THE ENTRY. STA ENPNT SAVE THE POINTER FOR ENTRY BUILDING. CLE,SLB IF THIS IS TO BE A SLAVE ENTRY, JMP SLVAD THEN SKIP THE SEARCH FOR MASTER ENTRIES. * LDA MDEF INITIALIZE THE LIST CPB P8 POINTER TO REFERENCE LDA PDEF THE PNL OR THE STA LSTAD MASTER LIST. * ISZ KEYAD SEARCH KEYWORD IS PRAM2 (ID SEG ADDR). LDA P4 EXAMINE FIFTH WORD OF EACH MASTER TCB. MLOOK JSB SERCH FIND ENTRIES WITH SAME CLASS OR PROCESS #. JMP MSTAD END-OF-LIST: GO TO ADD NEW ENTRY. ADB P4 GET THE 5TH WORD (ID SEGMENT ADDRESS) LDA B,I dFROM ENTRY WITH SAME NUMBER. IOR SIGN ADD BAD-ENTRY FLAG (BIT#15). STA B,I RETURN MODIFIED WORD.(UPLIN CLEARS TCB). JMP MLOOK SEARCH FOR MORE OBSOLETE ENTRIES.[E=1]. * MSTAD CCB CHECK FOR LDA MODE NEW PROCESS CPA P8 NUMBER MODE. JMP SETIM+1 YES--GO SET TIMEOUT * DLD #NCNT # OF NRV ENTRY PAIRS & NRV ADDRESS CAX COUNT WITH X REG MST1 LDA B,I GET NODE # FROM TABLE INB CPA PRAM3 MATCH? JMP MST2 YES! INB ISX INCREMENT NRV COUNT JMP MST1 TRY MORE MST2 LDA B,I GET TIMEOUT / LU LDB B100 ASR 6 A=TIMEOUT, B=1 (MASTER LIST CODE) SZA,RSS DEFAULT REQUESTED? LDA #MSTO YES, GET IT JMP SETIM * SLVAD JSB LSTCK PREPARE REFERENCES FOR THE SLAVE LIST. ADA P2 POINT TO WORD #3 OF SLAVE-STREAM HEAD. LDA A,I GET THE MONITOR I.D. SEGMENT ADDRESS. SZA,RSS IF THE MONITOR HAS NOT BEEN INITIALIZED, JMP ERR01 THEN NOTHING MAY BE ADDED TO THIS LIST! LDA #SVTO VALID LIST: GET SLAVE TIMEOUT VALUE. * SETIM STA ENPNT,I SET TIMEOUT INTO ENTRY WORD #2 ISZ ENPNT POINT TO NEXT WORD OF ENTRY CLA OBTAIN AN ENTRY FROM THE NULL LIST. JSB LNK GO PROCESS LIST CHANGES.[B=LIST CODE] SZA LIST-PROCESSING ERROR? JMP ERR04 YES--INFORM THE CALLER! * LDA PRAM3 USE THIRD PARAMETER LDB MODE INSTREAD OF SEQUENCE CPB P8 NUMBER FOR MODE 8. JMP STOR3 STORE IN THIRD TCB WORD. * SKP SPC 3 LDA SEQN GET THE LAST SEQUENCE NUMBER. INA,SZA,RSS ADVANCE THE COUNT & TEST FOR ZERO. CLE,INA ROLL-OVER: RESET TO ONE. STA SEQN SAVE THE CURRENT SEQUENCE NUMBER. STOR3 STA ENPNT,I INSERT IT INTO THE THIRD ENTRY WORD. ISZ ENPNT ADVANCE THE ,'ENTRY POINTER. LDA MODE IF A SLAVE-ENTRY IS TO BE CLE,ERA ADDED, SET =1. PRAMA EQU *+1 [INITIAL KEYWORD POINTER TO 'PRAM1'] DLD PRAM1 GET THE CALLER'S PARAMETERS. SEZ SLAVE-LIST ADDITION? LDB PRAM3 YES, GET THE ORIGIN NODAL ADDRESS. DST ENPNT,I ADD PARAMETERS TO ENTRY WORDS #4,#5. * LDA SEQN RETURN WITH: =CURRENT SEQUENCE NO. LDB ENTAD =ENTRY ADDRESS. JMP EXIT GO TO PREPARE FOR RETURN TO CALLER. * SEQN NOP TRANSACTION SEQUENCE NUMBER. * SPC 3 * ERROR PROCESSING AND EXIT SECTION. SPC 1 ERR04 LDA P4 =4: ENTRY CANNOT BE LOCATED. JMP ERR01+1 ERR03 LDA P3 =3: NEW ENTRY NOT AVAILABLE. JMP ERR01+1 ERR02 LDA P2 =2: INVALID MODE PARAMETER. JMP ERR01+1 ERR01 CLA,INA =1: INVALID LIST PARAMETER. CMA,INA NEGATE THE ERROR CODE. STA B ARE THE SAME FOR ERROR RETURN. * EXIT DST TEMP SAVE TEMPORARILY. CLA CLEAR PARAMETER ADDRESSES STA MODE TO FACILITATE CHECKING STA PRAM1 FOR MISSING PARAMETERS STA PRAM2 UPON NEXT ENTRY OF <#RSAX>. STA PRAM3 LDA #NULL IF NO TCB ENTRIES REMAIN AVAILABLE SZA,RSS IN THE ENTRY POOL, THEN DO NOT JMP RETRN CLEAR THE TABLE-ACCESS RN; ELSE, LDA #TBRN GET THE TABLE-ACCESS RN AND GO TO RTE JSB $CGRN TO MAKE IT AVAILABLE FOR NEXT ACCESS. RETRN DLD TEMP RESTORE THE RETURN-DATA TO & . * DMS2 JMP LBEX BYPASS MAP CODE: RTE-II / 'NOP': RTE-III JRS DMSTS LBEX *** RESTORE THE APPROPRIATE MAPS *** * LBEX JSB $LIBX RETURN TO THE CALLER, VIA THE RTE DEF #RSAX PRIVILEGED ROUTINE PROCESSOR. * SKP * SEARCH FOR ENTRIES. CLEAR AND RETURN TO POOL, IF REQUESTED. SPC 1 FIND LDA MDEF INITIALIZE CPB P10  POINTERS LDA PDEF TO REFER STA LSTAD TO THE CLA,INA MASTER LIST CPB P10 OR THE CCA PROCESS NUMBER STA LSTCD LIST. * CLE,SLB IF THIS IS A SLAVE REQUEST, THEN JSB LSTCK ESTABLISH REFERENCES TO THE SLAVE LIST. * LDA P2 THIRD WORD OF TCB IS THE SEARCH KEY. JSB SERCH GO TO LOCATE THE TCB ENTRY [E=0]. JMP ERR04 * ERROR #4: ENTRY CANNOT BE LOCATED! * * STB ENTAD SAVE THE ENTRY ADDRESS FOR LATER USE. ADB P3 POINT TO THIRD WORD, FOR LATER USE, STB ENPNT IN RETURNING THE CONTENTS TO CALLER. * LDA MODE GET THE MODE OF OPERATION. ADA M6 IF THE MODE CLE,SSA IS LESS THAN 6, JMP FOUND DO NOT CLEAR THE ENTRY. * LDA LSTCD REMOVE ENTRY FROM THE SPECIFIED LIST. CLB RETURN IT TO THE NULL LIST. JSB LNK GO TO PROCESS THE LIST CHANGES. CCE,SZA LIST PROCESSING ERROR? JMP ERR04 YES! GO TO INFORM THE CALLER. * FOUND LDA ENPNT,I GET WORD #4 FOR RETURN TO CALLER. CLB,SEZ,RSS IF THIS IS A SEARCH, ONLY, LDB ENTAD THEN GET THE TCB ADDRESS; JMP EXIT ELSE, RETURN WITH =0. * ENPNT NOP POINTER INTO TCB ENTRY. ENTAD NOP TCB ADDRESS STORAGE. * SKP * SYSTEM AVAILABLE MEMORY ALLOCATION/DE-ALLOCATION PROCESSOR. SPC 1 SAM LDA XEQT GET CALLER'S I.D. SEGMENT ADDRESS. CPA VALID IF THIS IS CALLING, RSS THEN ALLOW ACCESS; ELSE, JMP ERR01 REPORT IMPROPER ACCESS! * LDA PRAM1 GET THE CALLER'S PARAMETER. SLB IF THE REQUEST IS FOR DE-ALLOCATION, JMP RTSAM GO TO RETURN THE MEMORY TO THE SYSTEM. * STA SZMEM ALLOCATE: SAVE NO. OF WORDS REQUESTED. LDA #FWAM IF SYSTEM-AVAILABLE-MEMORY SZA  HAS ALREADY BEEN ALLOCATED, JMP ERR01 THEN REJECT THE REQUEST! * JSB $ALC REQUEST SYSTEM AVAILABLE MEMORY (S.A.M.) SZMEM DEC 128 IN THE AMOUNT SPECIFIED BY THE CALLER. JMP DMS2 * NEVER AVAILABLE: =-1,=MAX EVER JMP DMS2 * NOT AVAILABLE NOW: =0,=MAX NOW STA #FWAM O.K. SAVE THE ADDRESS OF MEMORY BLOCK. STB #SAVM SAVE THE SIZE OF THE MEMORY BLOCK. JMP DMS2 RETURN WITH S.A.M. SPECIFICATIONS. * RTSAM CPA #FWAM IS CALLER SPECIFYING CORRECT BLOCK? RSS YES. PROCESS THE DE-ALLOCATION. JMP ERR01 NO. ** IGNORE THE REQUEST! ** * LDB #SAVM GET THE BLOCK-SIZE SPECIFICATION. DST RTN CONFIGURE THE DE-ALLOCATION REQUEST. * JSB $RTN RETURN A SYSTEM-AVAILABLE-MEMORY BLOCK; RTN NOP BEGINNING AT SPECIFIED ADDRESS, AND NOP CONTAINING SPECIFIED NO. OF WORDS. CLA CLEAR THE STORAGE LOCATIONS FOR: STA #FWAM MEMORY BLOCK ADDRESS. STA #SAVM MEMORY BLOCK SIZE. JMP DMS2 RETURN TO THE CALLER. * VALID NOP I.D. SEGMENT ADDRESS: LEGAL CALLER. * SKP * SUBROUTINE TO CHECK LIST PARAMETER & SET LIST CODE & LIST ADDRESS. SPC 1 * ENTER: = DON'T CARE. * RETURN: =LIST ADDRESS; =LIST CODE. * ERROR - RETURN VIA ERROR EXIT WITH ERROR #1. * LSTCK NOP ENTRY/EXIT: LIST ID ROUTINE. LDA PRAM2 GET THE STREAM PARAMETER. AND B77 ISOLATE THE STREAM NUMBER. ADA P2 ADD OFFSET FOR NULL & MASTER LISTS. STA LSTCD SAVE FOR USE ELSEWHERE. STA B SAVE FOR RETURN TO CALLER. ADA NMAX CHECK FOR SPECIFICATION CLE,SSA,RSS OF AN UN-DEFINED LIST. JMP ERR01 * ERROR #1: INVALID LIST! LDA #LDEF GET THE LIST-TABLE ADDRESS. ADA B INDEX TO THE PROPER ENTRY. LDA A,I GET THE LI6}HFBST ADDRESS. STA LSTAD SAVE THE ADDRESS FOR LATER USE. JMP LSTCK,I RETURN TO THE CALLER. * B77 OCT 77 LSTAD NOP ADDRESS OF LIST HEADER. LSTCD NOP LIST IDENTIFICATION CODE. * SKP * SUBROUTINE TO SEARCH FOR A SPECIFIC LIST ENTRY. SPC 1 * ENTER: = OFFSET INTO TCB ENTRY; = DON'T CARE. * =0: SEARCH FROM TOP; =1: CONTINUE SEARCH. * 'LSTAD' SET TO ADDRESS OF LIST TO BE SEARCHED. * * RETURN: P+1 -- ENTRY NOT LOCATED; MEANINGLESS, =0. * P+2 -- ENTRY WAS LOCATED; MEANINGLESS, = ENTRY ADDRESS. * SERCH NOP ENTRY/EXIT:LIST SEARCH ROUTINE. LDB TEMP+1 GET NEXT-ENTRY ADDRESS TO CONTINUE. SEZ IS THIS A REQUEST TO CONTINUE? JMP SLOOP YES. GO TO CONTINUE THE SEARCH. STA OFSET SAVE OFFSET INTO TCB ENTRY. LDB LSTAD GET TOP-OF-LIST ADDRESS. * SLOOP LDB B,I GET THE LINK TO THE NEXT ENTRY. SZB,RSS IS THIS THE END OF THE LIST? JMP SERCH,I YES. TAKE "NOT FOUND" EXIT (P+1). * STB TEMP+1 SAVE POINTER TO NEXT ENTRY. ADB OFSET POINT TO KEYWORD LOCATION. LDA B,I GET THE KEYWORD. LDB TEMP+1 PREPARE TO RETURN WITH ENTRY ADDRESS. CPA KEYAD,I DOES IT MATCH THE CALLER'S KEYWORD? CCE,RSS YES. SET FOR CONTINUATION--SKIP. JMP SLOOP NO. CONTINUE SEARCHING. * ISZ SERCH ENTRY FOUND: SET RETURN TO P+2. JMP SERCH,I RETURN TO THE CALLER. * OFSET NOP KEYWORD OFFSET INTO TCB ENTRY. KEYAD NOP KEYWORD POINTER * SKP eH* SUBROUTINE TO PROCESS LIST LINKAGE. SPC 1 * ENTER: = CODE OF REMOVAL LIST; = CODE OF ADDITION LIST. * 'ENTAD' SET TO ADDRESS OF ENTRY TO BE REMOVED. * * RETURN: & =0: NORMAL; =-1, =UNCHANGED: ERROR. * LNK NOP ENTRY/EXIT: LIST LINK ROUTINE. STA TEMP SAVE REMOVAL-LIST CODE, TEMPORARILY. ADA #LDEF FIND THE TABLE ADDRESS. LDA A,I GET ADDRESS: TOP-OF-REMOVAL-LIST. LNK1 STA PNTR SAVE LIST POINTER. LDA A,I GET THE LINK TO THE NEXT ENTRY. SZA,RSS IF THIS IS THE END OF THE LIST, JMP LNKER THEN INFORM THE CALLER OF THE ERROR. CPA ENTAD IS THIS THE ENTRY TO BE REMOVED? RSS YES. SKIP TO REMOVE IT. JMP LNK1 NO. TRY THE NEXT ONE. LDA ENTAD,I GET THE LINK TO THE FOLLOWING ENTRY, STA PNTR,I AND MOVE IT TO THE PREVIOUS ENTRY. * ADB #LDEF FIND THE TABLE ADDRESS. LDB B,I GET ADDRESS: TOP-OF-ADDITION-LIST. LNK2 STB PNTR SAVE LIST POINTER. LDB B,I GET THE LINK TO THE NEXT ENTRY. SZB IS THIS THE END OF THE LIST? JMP LNK2 NO. CONTINUE SEARCHING FOR THE END. STB ENTAD,I YES. MAKE NEW ENTRY = END-OF-LIST. LDA ENTAD GET THE ADDRESS OF THE NEW ENTRY. STA PNTR,I SAVE IN LINK-WORD OF PREVIOUS ENTRY. * LDA MODE IF MODE IS ADA M8 >= 8 THEN SSA,RSS PROCESSING JMP LNKER-1 IS ALL DONE. * CPB TEMP REMOVING ENTRY FROM NULL LIST? [=0] CLA,INA,RSS YES. PREPARE TO ADD TO ACTIVE COUNT. CCA NO. PREPARE TO DECREMENT ACTIVE COUNT. ADA #BUSY COMPUTE THE NEW 'ACTIVE-ENTRY' COUNT, STA #BUSY AND UPDATE THE INDICATOR. CLA,RSS INDICATE NORMAL RETURN, AND SKIP. LNKER CCA =-1: NO ENTRIES IN REMOVAL LIST. JMP LNK,I RETURN IS MADE TO THE CALLER. * PNTR NOP  LIST POINTER STORAGE. * SKP * TABLE OF LIST-HEADER ADDRESSES. LIST CODES: SPC 1 #LDEF DEF SOT START-OF-TABLE DEFINITION. PDEF DEF #PNLH HP3000 PROCESS NUMBER HEADER -01 SOT DEF #NULL ENTRY-POOL HEADER 00 MDEF DEF #MRTH MASTER-REQUEST HEADER 01 SDEF DEF #ST00 SLAVE-STREAM 00 HEADER 02 DEF #ST01 SLAVE-STREAM 01 HEADER 03 DEF #ST02 SLAVE-STREAM 02 HEADER 04 DEF #ST03 SLAVE-STREAM 03 HEADER 05 DEF #ST04 SLAVE-STREAM 04 HEADER 06 DEF #ST05 SLAVE-STREAM 05 HEADER 07 DEF #ST06 SLAVE-STREAM 06 HEADER 10 DEF #ST07 SLAVE-STREAM 07 HEADER 11 DEF #ST08 SLAVE-STREAM 08 HEADER 12 DEF #ST09 SLAVE-STREAM 09 HEADER 13 DEF #ST10 SLAVE-STREAM 10 HEADER 14 * NEW ENTRY: .........DEF #STXX.....SLAVE-STREAM XX HEADER........15 * NMAX ABS #LDEF+1-* LIST CODE VALIDITY-CHECKING CONSTANT. * #MNUM ABS NMAX-SDEF NUMBER OF SLAVE-STREAM TYPES. SPC 1 * CONSTANTS AND STORAGE. SPC 1 M6 DEC -6 M8 DEC -8 P1 DEC 1 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P8 DEC 8 P10 DEC 10 B100 OCT 100 SIGN OCT 100000 TEMP OCT 0,0 TEMPORARY STORAGE LOCATIONS. SPC 1 * HP3000 ID SEQUENCE SPECIFICATIONS * D$LID DEF LOC LOCAL ID SEQUENCE ADDRESS D$RID DEF REM REMOTE ID SEQUENCE ADDRESS SPC 1 * GENERAL SYSTEM DATA [ INITIALIZED BY 'LSTEN' ]. SPC 1 #SCLR DEF #TBRN START OF AREA CLEARED BY 'LSTEN'. #FWAM NOP ADDRESS OF SYSTEM AVAIL. MEMORY BLOCK. #SAVM NOP SIZE OF SYSTEM AVAIL. MEMORY BLOCK. #TBRN NOP TABLE-ACCESS RESOURCE NUMBER. #QRN NOP QUIESCENT(RN) OR SHUT-DOWN(0). #GRPM NOP GENERAL PRE-PROCESS MODULE CLASS NO. #QCLM NOP QUEUE CLEAN-UP MONITOR CLASS NUM UBER. #BUSY NOP NUMBER OF ACTIVE TCB ENTRIES. #MSTO NOP MASTER REQUEST TIMEOUT VALUE. #SVTO NOP SLAVE REQUEST TIMEOUT VALUE. #RTRY NOP RETRY-PROCESSOR'S CLASS NUMBER. #WAIT NOP D65MS QUIESCENT WAIT INTERVAL. #SWRD NOP NETWORK-NODE SECURITY CODE. #BREJ NOP D65MS RETRY COUNT FOR BUSY REJECT. #RPCV NOP HP3000 REPLY CONVERTER CLASS NO. #RQCV NOP HP3000 REQUEST CONVERTER CLASS NO. #LU3K NOP LU NUMBER OF HP3000 #QZRN NOP QUEZ RN FOR "LISTEN MODE" #QXCL NOP QUEX CLASS NO. #TST NOP HP3000 TRANS. STATUS TABLE ADDRESS NOP HP3000 TRANS. STATUS TABLE SIZE * SKP SKP * LIST HEADERS (REMAINDER OF LISTS LOCATED IN SYSTEM AVAILABLE MEMORY). SPC 3 #PNLH NOP HP3000 PROCESS # LIST SPC 1 #NULL NOP LIST HEADER: ENTRY POOL. SPC 1 #MRTH NOP MASTER REQUEST LIST. SPC 1 #ST00 OCT 0,0,0 SLAVE-STREAM 00 LIST. SPC 1 #ST01 OCT 0,0,0 SLAVE-STREAM 01 LIST. SPC 1 #ST02 OCT 0,0,0 SLAVE-STREAM 02 LIST. SPC 1 #ST03 OCT 0,0,0 SLAVE-STREAM 03 LIST. SPC 1 #ST04 OCT 0,0,0 SLAVE-STREAM 04 LIST. SPC 1 #ST05 OCT 0,0,0 SLAVE-STREAM 05 LIST. SPC 1 #ST06 OCT 0,0,0 SLAVE-STREAM 06 LIST. SPC 1 #ST07 OCT 0,0,0 SLAVE-STREAM 07 LIST. SPC 1 #ST08 OCT 0,0,0 SLAVE-STREAM 08 LIST. SPC 1 #ST09 OCT 0,0,0 SLAVE-STREAM 09 LIST. SPC 1 #ST10 OCT 0,0,0 SLAVE-STREAM 10 LIST. SPC 1 * NEW ENTRY: ...#STXX OCT 0,0,0..................SLAVE-STREAM XX LIST. SKP #RFSZ NOP MAXIMUM NUMBER OF 'OPEN' RFA FILES. SPC 3 #PLOG BSS 7 PARMB LOGGING PROGRAM'S CLASS NO. SPC 3 * NODAL ADD@RESSING SPECIFICATIONS. * #CNOD NOP CURRENT-USER-NODE; -1: INACTIVE. * #LNOD NOP DOWN-LOAD NODE (RTE-M, ONLY). * #NODE NOP LOCAL NODE NUMBER. * #NCNT NOP NEG. NUMBER OF NRV TABLE ENTRIES (PAIRS) #NRV NOP S.A.M. ADDRESS OF NRV TABLE. SPC 2 #NCLR ABS #TBRN-* NEGATIVE NO: LOCATIONS LSTEN CLEARS SPC 3 * HP3000 ID SEQUENCE SPECIFICATIONS * LOC NOP LOCAL ID SEQUENCE: BYTE COUNT BSS 8 CHARACTERS * REM NOP REMOTE ID SEQUENCE: RESERVED WORD NOP BYTE COUNT BSS 8 CHARACTERS SKP * INITIALIZATION SECTION: DMS SETUP & VALIDITY CHECKING. * * NOTE: THIS CODE IS USED ONLY UPON INITIAL ENTRY. * IT IS OVERLAYED BY THE SYSTEM SPECIFICATIONS. * ORG #GRPM CODE RESIDES IN SYSTEM DATA AREA. * CONFG NOP ENTRY/EXIT: INITIALIZATION ROUTINE. LDB XEQT GET THE CALLER'S I.D. SEGMENT ADDRESS. ADB P12 POINT TO THE FIRST NAME SPECIFICATION. LDA B,I GET CHARACTERS 1 & 2. CPA "LS" IF THE CHARACTERS ARE "LS", INB,RSS ADVANCE THE POINTER & CONTINUE; JMP ERR01 ELSE, DENY THE ACCESS! LDA B,I GET CHARACTERS 3 & 4. CPA "TE" IF THE CHARACTERS ARE "TE", INB,RSS ADVANCE THE POINTER & CONTINUE; JMP ERR01 ELSE, DENY THE ACCESS! LDA B,I GET CHARACTER #5. AND DSMSK ISOLATE THE CHARACTER IN UPPER BYTE. CPA "N0" IF THE CHARACTER IS "N0", THEN THIS RSS IS : ACCESS IS LEGAL! JMP ERR01 DENY ILLEGAL ACCESS! LDA XEQT GET I.D. SEGMENT ADDRESS OF . STA VALID SAVE FOR S.A.M. VALIDITY CHECKING. * LDA $OPSY GET THE OP-SYSTEM IDENTIFIER. AND P2 ISOLATE THE DMS BIT(#1). RAR,CLE,ERA =0 AND = DMS BIT. SEZ,CLE,RSS IF DMS SYSTEM, SKIP & ENABLE DMS CODE; JMP NODMS ELSE, MERELY DISABLE CONFIGURATION CALL. * STA DMS1 CLEAR THE BYPASS-SWITCHES STA DMS2 TO ENABLE DMS PROCESSING. * NODMS STA INIT CLEAR ACCESS TO THE CONFIGURATOR. JMP CONFG,I RETURN TO NORMAL PROCESSING. * DSMSK OCT 77400 P12 DEC 12 "LS" ASC 1,LS "TE" ASC 1,TE "N0" OCT 47000 * A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 ORR [ INDICATES SIZE OF ] SPC 1 END  p 91740-18032 1840 S C0122 &DMESG              H0101 wASMB,R,L,C HED DMESG 91740-16032 REV 1840 * (C) HEWLETT PACKARD CO. 1978 NAM DMESG,7 91740-16032 REV 1840 780628 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ****************************************************** * *DMESG TELLOP MESSAGE SUBROUTINE * *SOURCE PART # 91740-18032 * *REL PART # 91740-16032 * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 7-30-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: MAY 1976 * ********************************************************* * * MODIFIED BY DMT ON 6/28/78 TO CHANGE ERROR RETURN * ********************************************************* SPC 1 * * LIBRARY SUBROUTINE APPENDED TO RTE USER PROGRAM THAT SENDS * MESSAGES TO THE SYSTEM CONSOLE AT THE GIVEN DESTINATION NODE. * * CALLING SEQUENCE: * JSB DMESG * DEF *+4 * DEF DESTINATION * DEF BUFFER * DEF BUFFER LENGTH * RETURN--A&B CONTAIN ASCII ERROR CODE IF ANY; * OTHERWISE A & B ARE BOTH ZERO. * SPC 3 ENT DMESG * EXT DEXEC,.ENTR,#NODE,$LIBR,$LIBX,$CVT3 * SUP * * GET MESSAGE ADDRESS AND LENGTH. * DEST NOP BUFAD NOP BUFL NOP DMESG NOP JSB .ENTR GET PRAM ADDRESS DEF DEST CLA LDB BUFL,I GET LENGTH SSB POSITIVE WORD COUNT? JMP *+4 NO, TREAT AS BYTE COUNT BLS CONVERT LNGT IN WORDS TO CMB,INB,SZB,RSS LNGT IN (-) BYTES    JMP LENER ERROR IF ZERO OR NOT PASSED STA BUFL INITIALIZE FOR NEXT TIME STB 0 ADA N10 ADJUST ACTUAL BUFFER LENGTH STA LNGT SAVE FOR THE "DEXEC" CALL ADA K82 NOW MAKE SURE ORIGINAL LNGT SSA WASN'T > 72 CHARACTERS JMP LENER IT WAS! ERROR CMB,INB INB CONVERT TO WORD COUNT BRS FOR THE "MVW" STB MVLEN * * MOVE MESSAGE TO INTERNAL BUFFER. * LDA BUFAD GET ORIGIN ADDRESS LDB DFOUT GET DESTINATION ADDRESS MVW MVLEN MOVE THE BUFFER * CCE SET FOR DECIMAL CONVERSION LDA #NODE GET LOCAL NODE # JSB $LIBR FENCE OFF NOP JSB $CVT3 CONVERT TO ASCII LDB NUMA GT BUFFER ADDRESS MVW B3 MOVE 6 CHARACTERS JSB $LIBX DEF *+1 DEF *+1 FENCE BACK ON * SEND THE MESSAGE WITH ID PREFIX. * JSB DEXEC DEF *+6 DEF DEST,I DEF D2I WRITE-NO ABORT DEF B1 DEF OUTBF DEF LNGT * JMP DMESG,I RETURN TO CALLER WITH ERROR IN A & B. CLA NO ERROR--CLEAR CLB REGISTERS. JMP DMESG,I RETURN SPC 2 LENER DLD DS03 RETURN WITH ASCII ERROR JMP DMESG,I CODE IN A & B REG. * * * CONSTANTS AND WORKING STORAGE. * MVLEN NOP LNGT NOP B1 OCT 1 D2I OCT 100002 B3 OCT 3 K82 DEC 82 N10 DEC -10 DS03 ASC 2,DS03 DFOUT DEF OUTBF+5 NUMA DEF OUTBF+1 OUTBF ASC 5,=N000000: BSS 37 * SIZE EQU * * END  qx 91740-18033 1740 S C0122 DS/1000 MODULE: DMESS              H0101 CASMB,L,R,C HED DMESS 91740-16033 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM DMESS,7 91740-16033 REV 1740 771003 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT DMESS EXT MESSS,#NODE EXT D65MS,.ENTR * * * DMESS * SOURCE: 91740-18033 * BINARY: 91740-16033 * PRGMR: BOB SHATZER * DATE: 09 DEC 75 * * MODIFIED BY: C.C.H. 02-16-76 * MODIFIED BY: J.P.B. JUNE 1976 * MODIFIED BY: C.H.W. FEB. 1977 * * DMESS IS A UTILITY SUBROUTINE WHICH IS USED TO SEND OPERATOR * COMMANDS TO A REMOTE CPU. * * CALLING SEQUENCE: * * JSB DMESS * DEF *+4 * DEF * DEF * DEF (IN + BYTES) * * * ON RETURN, THE REGISTERS HAVE THE FOLLOWING MEANING: * * = 0 NO RESPONSE FROM REMOTE * < 0 NEGATIVE OF NUMBER OF BYTES IN RESPONSE * = -1 INDICATES AN ERROR * * NODE NOP DESTINATION BUFAA NOP MESSAGE BUFFER BUFLA NOP MESSAGE LENGTH DMESS NOP START OF ROUTINE JSB .ENTR DEF NODE GET PRAMS * LDA D7 REMOTE - GET STREAM TYPE STA PARMB AND PUT IT INTO PARMB LDA BUFLA,I GET REQUEST LENGTH STA LNGH SAVE IN PARMB ADA DM41 SSA,RSS CHECK FOR ILLEGAL MESSAGE LENGTH JMP SZERR TOO LONG LDA LNGH SSA NEGATIVE ? JMP SZERR YES, ILLEGAL CLB NO ERROR INDICATION FOR IMMEDIATE RETURN SZA,RSS NOTHING ? JMP DMESS,I IMMEZDIATE RETURN CLE,ERA TRANSFORM INTO NUMBER SEZ OF WORDS INA TO COMPUTE REQUEST LENGTH STA LNG1 SAVE FOR REQUEST MOVE ADA D5 ADD STANDARD PARMB LENGTH CPA D6 LESS THAN MIN ? INA YES STA LEN LDA BUFAA GET BUFFER ADDRESS LDB MESSA GET DESTINATION ADDRESS MVW LNG1 MOVE REQUEST INTO PARMB * LDA NODE,I GET DESTINATION STA PARMB+3 SET IN PARMB * CPA DM1 LOCAL ? JMP LOCAL YUP CPA #NODE FOR US ? JMP LOCAL YES * JSB D65MS WRITE REQUEST TO REMOTE DEF *+8 DEF CONWD CONTROL WORD DEF PARMB DEF LEN DEF D0 DEF D0 NO DATA ASSOCIATED DEF D0 NO DATA ASSOCIATED DEF D27 MAX REPLY LENGTH * JMP MSERR ERROR RETURN POINT CLB NO ERROR INDICATION LDA PARMB+7 ANY RETURN MESSAGE? SZA,RSS JMP DMESS,I NO RETURN MESSAGE LDA MESSB GET ADDRESS OF MESSAGE TO BE RETURNED LDB BUFAA GET ADDRESS OF USER'S BUFFER. MVW PARMB+7 MOVE THE REPLY TO THE USER'S BUFFER LDA PARMB+7 GET LENGTH OF MESSAGE CLE,ELA MAKE THAT # OF BYTES CMA,INA NEGATE JMP DMESS,I AND RETURN SPC 3 LOCAL JSB MESSS DEF *+3 DEF BUFAA,I MESSAGE DEF BUFLA,I LENGTH * JMP DMESS,I RETURN SPC 2 * MSERR DST BUFAA,I SAVE ERROR CODES FOR USER'S ANALYSIS. LDA D4 RETURN WITH = -4, AND = -1, CMA,INA,RSS TO INDICATE 4-BYTE ERROR-CODE MESSAGE. * SZERR CLA BUFFER SIZE ERROR - CLEAR A CCB AND SET B TO -1 JMP DMESS,I AND RETURN SPC 2 * B EQU 1 MESSA DEF PARMB+5 MESSB DEF PARMB+8 DM41 DEC -41 D0 DEC 0 D7 DEC 7 D4 DEC 4 D5 DEC 5 D6 DEC 6 D27 DEC 27 PARMB L BSS 27 LNGH EQU PARMB+4 LNG1 NOP LEN NOP CONWD OCT 100000 DM1 DEC -1 * END  rz 91740-18034 1740 S C0122 DS/1000 MODULE: FCOPY              H0101 6ASMB,L,R,C HED FCOPY: 91740-16034 REV 1740 (C) HEWLETT-PACKARD CO. 1977 NAM FCOPY,7 91740-16034 REV 1740 770907 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 2 **************************************************************** * * FCOPY * * SOURCE PART # 91740-18034 * * REL PART # 91740-16034 * * WRITTEN BY JEAN-PIERRE D. BAUDOUIN * * DATE WRITTEN MAY 1976 * * MODIFIED BY DAN GIBBONS * * DATE MODIFIED DECEMBER 1976 * *************************************************************** SPC 3 * FCOPY IS THE GENERAL FILE TRANSFER UTILITY. * IT WILL TRANSFER ANY FILE WITH RECORD LENGTHS <= 128 WORDS * FROM ANY DISK IN THE NETWORK TO ANY OTHER DISK IN THE NETWORK. * * THE CALLING SEQUENCE IS : * JSB FCOPY * DEF *+6 TO *+11 * DEF ORIGIN FILE NAME * DEF ORIGIN CRN VECTOR * DEF DESTINATION FILE NAME * DEF DESTINATION CRN VECTOR * DEF IERR * DEF ORIGIN FILE SECU (OPTIONAL) * DEF DEST FILE TYPE (OPTIONAL) * DEF DEST FILE SIZE (OPTIONAL) * DEF DEST FILE REC-SIZE (OPTIONAL) * DEF TRANSFER MODE (OPTIONAL) * * IN CASE OF DUPLICATE DESTINATION FILE NAME, * THE FIRST 2 CHARACTERS OF THE NAME WILL BE CHANGED * TO "..". IF THIS NAME IS ALSO EXISTING THERE WILL BE * AN ERROR RETURN. * * NEGATIVE VALUES FOR DESTINATION FILE SIZE PARAMETER * ARE NOT ALLOWED SINCE A LINE FAILURE BEFORE * TRUNCATION AT 'DCLOS' TIME WOULD RESULT IN GOBBLING * ALL THE REMAINING SPACE ON THE REMOTE DISC. A -6 * ERROR CODE (NO ROOM) IS RETURNED IF THIS IS ATTEMPTED. * * IF TRANSFER MODE PARAMETER IS GIVEN AND IS NON- * ZERO, THE DESTINATION FILE WILL BE CREATED AS USUAL * BUT BOTH FILES WILL BE OPENED AS TYPE 1'S. THIS WILL * NORMALLY RESULT IN INCREASED LINE EFFICIENCY SINCE * VARIABLE RECORD LENGTH FILES WILL THEN BE TRANSFERRED * IN 128 WORD DATA BLOCKS RATHER THAN RECORD BY RECORD. * !!!CAUTION!!! * THIS METHOD SHOULD BE USED ONLY IF THE SOURCE FILE * HAS NO EXTENTS. EXTENTS ARE NOT COPIED TO * THE DESTINATION FILE WHEN FILES ARE OPENED AS TYPE 1 * FILES. FAILURE TO OBSERVE THIS WARNING WILL NOT CAUSE * A RETURNED ERROR CODE, BUT WILL NEVERTHELESS RESULT * IN A CORRUPT DESTINATION FILE. * * * ERROR CODES : * IERR > 0 :WARNING * IERR = 0 :NO ERROR * -100 < IERR >0 : DESTINATION ERROR * IERR < -100 : ORIGIN ERROR * * WARNINGS : * IERR = 1 DUPLICATE FILE NAME, CORRECTED * SPC 3 ENT FCOPY EXT .ENTR EXT DCRET,DOPEN,DREAD,DWRIT,DCLOS EXT DPURG EXT DLOCF EXT IFBRK IFZ EXT DBUG XIF SPC 3 SUP * SRCFL NOP SOURCE FILE NAME SRCCR NOP SOURCE CRN VECTOR DSTFL NOP DESTINATION FILE NAME DSTCR NOP DESTINATION CRN VECTOR IERR NOP ERROR PARAMETER ISEC1 NOP ORIGIN FILE SECU ITYP2 NOP DEST FILE TYPE ISIZ2 NOP DEST FILE SIZE IREC2 NOP DEST FILE REC-SIZE IMODE NOP TRANSFER MODE SPC 2 FCOPY NOP ENTRY POINT JSB .ENTR DEF SRCFL * IFZ JSB DBUG CALL DBUG IF ASKED FOR DEF *+1 XIF SPC 2 CLA STA IERR,I CLEAR THE ERROR CODE LDA DSTFL,I TRANSFER THE DESTINATION STA DSTFN FILE NAME ISZ DSTFL (WE DONT WANT TO CHANGE  DLD DSTFL,I THE USER'S CODE EVEN IF WE DST DSTFN+1 HAVE TO CHANGE THE DEST FILE NAME) LDA ISEC1 SET ISEC1 TO SZA VALUE IF GIVEN, LDA A,I ELSE TO STA ISEC1 ZERO. * LDB D1 GET OPEN OPTION JSB OPENO OPEN ORIGIN FILE * LOOK JSB DLOCF USE THIS TO FIND THE TYPE, DEF *+10 SIZE & RECORD SIZE OF THE FILE DEF ODCB TO BE TRANSFERED DEF YERR DEF NOP DEF NOP DEF NOP DEF ISIZE # OF SECTORS OF THE FILE RETURNED HERE DEF NOP DEF FLTYP FILE TYPE DEF ISIZE+1 RECORD SIZE * LDA ISIZ2 SZA,RSS DEST SIZE GIVEN? JMP FC01 NO LDA A,I YES, GET IT SSA NEGATIVE VALUES JMP M6ERR NOT ALLOWED. ALS CONVERT TO SECTORS SZA IF NOT ZERO, OVERRIDE STA ISIZE ORIG FILE SIZE. * FC01 LDA IREC2 SZA,RSS DEST REC-SIZE GIVEN? JMP FC02 NO LDA A,I YES, GET IT SZA IF NOT ZERO, OVERRIDE STA ISIZE+1 ORIG REC-SIZE. * FC02 LDB FLTYP IF ITYP2 IS NOT CLA GIVEN OR IS ZERO, LDA ITYP2,I DEFAULT TO ORIGIN TYPE. SZA LDB A STB ITYP2 * LDA ISIZE DCRET NEEDS # OF BLOCS, SO WE HAVE CLE,ERA TO DIVIDE ISIZE BY 2 SEZ INCREMENT A IF ISIZE WAS ODD INA STA ISIZE SAVE THE # OF BLOCS * JSB DCRET CREATE THE DESTINATION FILE DEF *+8 DEF DDCB DESTINATION DCB DEF YERR DEF DSTFN DEST. FLAME DEF ISIZE DEF ITYP2 FILE TYPE DEF ISEC1 USE ORIG SECURITY CODE DEF DSTCR,I DEST. CRN * SSA,RSS HOW WAS IT ? JMP CLOSE OK, GO CLOSE BOTH FILES CPA MD2 DUPLICATE FILE NAME ? JMP RETRY YES, TRY WITH ANOTHER NAME } LDB D1 FILE CLOSE OPTION JMP ERROR GET OUT * CLOSE JSB CLOSO CLOSE BOTH ORIG JSB CLOSD AND DEST FILES. * * NOW OPEN BOTH FILES * LDB D1 GET DEFAULT OPEN OPTION CLA PROTECT AGAINST IMODE = 0 LDA IMODE,I SZA IMODE GIVEN AND NON-ZERO? LDB D5 YES, USE TYPE 1 OPEN OPTION STB IMODE SAVE OPEN OPTION JSB OPENO OPEN ORIGIN FILE * LDB IMODE GET OPEN OPTION BACK JSB OPEND OPEN DEST FILE * * IF ORIG IS TYPE 1, OR IF WE HAVE OPENED IT AS A TYPE 1, WE * WANT A 128 WORD BUFFER. OTHERWISE, WE WANT A 129 WORD BUFFER * SO WE CAN CHECK FOR BUFFER OVERFLOW. * LDA D129 LDB FLTYP GET ORIG TYPE CPB D1 TYPE 1? JMP DECR YES LDB IMODE GET OPEN OPTION CPB D5 TYPE 1 OPEN OPTION? DECR ADA MD1 YES, USE 128 WORD BUFR LENGTH STA BUFL SET BUFL FOR DREAD CALL SPC 3 * FILES SET UP, TRANSFER DATA * MOVE JSB DREAD READ FROM ORIGIN DEF *+6 DEF ODCB DEF YERR DEF BUF DATA BUFFER DEF BUFL DATA BUFFER LENGTH DEF LEN * SSA,RSS HOW WAS IT ? JMP WRT OK CPA MD12 NOT TOO GOOD. EOF ? JMP EOF YES LDB D2 THIS MUST BE AN ERROR, CLOSE OPTION ADA MD100 ORIGIN ERROR JMP ERROR GET OFF * EOF LDA MD1 FAKE LEN=-1 WITH NO ERROR STA LEN * WRT LDA LEN CPA D129 BUFFER OVERFLOW? RSS YES, ERROR JMP WRT1 NO, CONTINUE LDA MD104 SET ILLEGAL RECORD SIZE ERROR CODE LDB D2 JMP ERROR REPORT ERROR * WRT1 JSB DWRIT WRITE THE BUFFER INTO THE FILE DEF *+5 DEF DDCB DEF YERR DEF BUF DEF LEN BUFFER LENGTH * SZA,RSS HOW WAS IT ? JMP TST OK ERR LDB D2 CLOSE OPKTION JMP ERROR * TST JSB IFBRK DOES THE DEF *+1 OPERATOR SSA WANT OUT? JMP BREAK YES LDA LEN DID WE REACH INA THE END SZA OF FILE JMP MOVE NO SPC 3 * * TRANSFER ALL DONE, CLOSE THE FILES AND GO BACK TO CLASS * JSB CLOSD FIRST CLOSE THE DEST FILE JSB CLOSO NOW CLOSE THE ORIG FILE JMP EXIT RETURN TO USER SPC 2 M6ERR CLB INDICATE THAT NO FILES ARE OPEN LDA MD6 GIVE -6 ERROR JMP ERROR SPC 3 * BREAK SET. CLOSE ORIGIN FILE, PURGE DESTINATION. * BREAK LDA MD100 SET "BREAK" ERROR CODE LDB D2 SPC 3 * ERROR PROCESSING * ERROR STB STATS SAVE STATUS STA IERR,I SAVE ERROR VALUE SZB,RSS JMP EXIT NOTHING IS OPEN JSB DCLOS CLOSE ORIGIN DEF *+3 DEF ODCB DEF YERR * * ISZ STATS RSS JMP EXIT ONLY THE ORIGIN WAS OPEN * JSB DPURG DEST. ALSO CREATED, GET RID OF IT DEF *+6 DEF DDCB DEF YERR DEF DSTFN DEST FILE NAME DEF ISEC1 DEST FILE ISECU DEF DSTCR,I DEST CRN * EXIT CLB CLEAR OPTIONAL STB ISEC1 PARAM ADR LOCS STB ITYP2 FOR NEXT CALL STB ISIZ2 AND EXIT. STB IREC2 STB IMODE JMP FCOPY,I SPC 3 * WE COME HERE IF THE DESTINATION FILE NAME IS A * DUPLICATE NAME. WE WILL TRY THE CREATION AGAIN * AFTER REPLACING THE FIRST TWO CHARACTERS OF THE * REQUESTED FILE NAME BY "..". IF THIS NAME IS ALSO * DUPLICATE, WE WILL QUIT. * RETRY LDA .. STA DSTFN BUILD THE NEW FILE NAME * JSB DCRET DEF *+8 DEF DDCB DEF YERR DEF DSTFN NEW FILE NAME DEF ISIZE DEF ITYP2 FILE TYPE DEF ISEC1 DEST ISECU (SAME AS ORIG) DEF DSTCR,I DEST ICR * SSA,RSS HOW WAS IT ? JMP TELIT THIS TIME IT'S OK LDA MD2 STILL BAD, GIVE A DUPLICATE DESTINATION LDB MD1 CLOSE OPTION JMP ERROR FILE NAME ERROR RETURN * TELIT LDA D1 WRNG CODE FOR DUPLICATE FILE NAME STA IERR,I SPC 3 * ALL OK GO BACK TO WORK * JMP CLOSE SPC 2 * * OPEN ORIGIN FILE. ENTER WITH B = OPEN OPTION. * NO RETURN IF ERROR. * OPENO NOP STB TEMP SET OPEN OPTION * JSB DOPEN OPEN ORIGIN FILE DEF *+7 DEF ODCB ORIGIN DCB DEF YERR DEF SRCFL,I SOURCE FILE NAME DEF TEMP OPEN OPTION DEF ISEC1 ISECU FOR ORIGIN DEF SRCCR,I SOURCE CRN * SSA,RSS HOW WAS IT ? JMP OPENO,I ALL OK ADA MD100 ORIGIN ERROR CLB FILE CLOSE OPTION JMP ERROR GET OUT SPC 2 * * OPEN DESTINATION FILE. ENTER WITH B = OPEN OPTION. * NO RETURN IF ERROR. * OPEND NOP STB TEMP SET OPEN OPTION * JSB DOPEN OPEN DEST FILE DEF *+7 DEF DDCB DEF YERR DEF DSTFN DEST FILE NAME DEF TEMP OPEN OPTION DEF ISEC1 SECURITY CODE DEF DSTCR,I DEST CRN ARRAY * SSA OK? JMP ERR NO, ERROR JMP OPEND,I YES, RETURN SPC 2 * * CLOSE DESTINATION FILE. NO RETURN IF ERROR. * CLOSD NOP * JSB DCLOS CLOSE THE DESTINATION FILE DEF *+3 DEF DDCB DEF YERR * SSA,RSS HOW WAS IT ? JMP CLOSD,I OK, CONTINUE LDB D2 CLOSE OPTION JMP ERROR SPC 2 * * CLOSE ORIGIN FILE. NO RETURN IF ERROR. * CLOSO NOP * JSB DCLOS NOW CLOSE THE ORIGIN FILE DEF *+3 DEF ODCB DEF YERR * SSA,RSS HOW WAS IT ? JMP CLOSO,I OK, RETURN LDB D1 CLOSE OPTION ADA MD100 ORIGIN ERROR K_*($ JMP ERROR SPC 2 SPC 3 * CONSTANTS AND BUFFERS * A EQU 0 B EQU 1 D1 DEC 1 D2 DEC 2 D5 DEC 5 D129 DEC 129 MD1 DEC -1 MD2 DEC -2 MD6 DEC -6 MD12 DEC -12 MD100 DEC -100 MD104 DEC -104 ISIZE BSS 2 FILE-SIZE/RECORD-SIZE FLTYP NOP NOP NOP LEN NOP STATS NOP ODCB BSS 4 DDCB BSS 4 BUF BSS 129 BUFL NOP .. ASC 1,.. YERR NOP DSTFN REP 3 NOP TEMP NOP SPC 3 END * s  91740-18035 1740 S C0122 DS/1000 MODULE: FLOAD              H0101 0ASMB,L,R,C HED FLOAD 91740-16135 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM FLOAD,7 91740-16035 REV 1740 770602 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ********************************************** * *FLOAD SUBROUTINE TO DO FORCED DOWN LOAD OF * ABSOLUTE PROGRAM TO RTE-M SYSTEM. * *SOURCE PART #: 91740-18035 REV 1740 * *REL PART # 91740-16035 REV 1740 * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 8-23-74 * *MODIFIED BY: JEAN-PIERRE D. BAUDOUIN * DAN GIBBONS * *DATE MODIFIED: JULY 1976 * FEBRUARY 1977 * *********************************************** SPC 1 SUP * EXT D65MS,.ENTR,D65AB SPC 1 ENT FLOAD SPC 1 A EQU 0 B EQU 1 SPC 1 * * CALLING SEQUENCE * JSB FLOAD * DEF *+6 TO *+10 * DEF PROGRAM FILE NAME * DEF CRN * DEF FILE NODE # (=>0) * DEF DESTINATION NODE * DEF ERROR CODE * DEF FILE SECURITY CODE (OPTIONAL) * DEF PARTITION # (OPTIONAL) * DEF PARTITION SIZE IN PAGES (OPTIONAL) * DEF 3 WORD ERROR MESSAGE BUFR (OPTIONAL) SKP FNAM NOP CRN NOP FNOD NOP FLU NOP FERCD NOP ISECU NOP PNUM NOP PSIZE NOP FERMG NOP SPC 2 ENTRY POINT FLOAD NOP JSB .ENTR PRMSA DEF FNAM * LDA FERCD ERROR RETURN SPECIFIED? SZA,RSS JMP EXIT NO, GET OUT QUICK * LDA FLU,I GET DESTINATION STA RQBUF+3 * * LDA D3 SET STRE#AM TYPE STA RQBUF LDA D9 SET ICODE FOR STA RQBUF+4 SCHED-WITH-WAIT. * LDA APNAM MOVE "APLDR" NAME LDB PNAMA MVW D3 * LDA FNAM MOVE THE FILE NAME LDB NAMA MVW D3 * LDA CRN,I STA RQBUF+14 * LDA FNOD,I STA RQBUF+15 * CLA (IN CASE ISECU MISSING) LDB ISECU,I SET ISECU OR 0 STB RQBUF+13 INTO REQST BUFR. * * FORMAT 1ST APLDR SCHED PARAM * LDB PNUM,I SET FUNCTION CODE TO 1 IF BOTH CLE,SZB,RSS PNUM & PSIZE ARE MISSING OR 0, LDB PSIZE,I ELSE 2. INCLUDE REMOTE BIT & LDA REM1 SET INTO REQST BUFR. SZB CCE,INA STA RQBUF+8 * * FORMAT 2ND APLDR SCHED PARAM * CLA,SEZ,RSS WERE PNUM & PSIZE MISSING? JMP SETP2 YES, SET SCHED PARAM TO ZERO LDA PSIZE,I NO, SET PNUM INTO BITS 0-5, ALF,ALF PSIZE INTO BITS 10-14. ALS,ALS IOR PNUM,I SETP2 STA RQBUF+9 * JSB D65MS CALL MSTER TO SEND REQ DEF *+8 DEF CNWD DEF RQBUF DEF D16 LENGTH OF RQBUF DEF * DUMMY DATA BUFR ADR DEF D0 NO DATA ASSOCIATED WITH REQST DEF D0 OR REPLY. DEF D16 MAX REQST-REPLY LENGTH JMP LNERR LINE ERROR SPC 2 LDA RQBUF+7 GET APLDR ERROR CODE STA FERCD,I PASS IT TO USER LDA FERMG SEE IF WE MOVE OPTIONAL NAME SZA,RSS JMP EXIT NO LDA ERRA LDB FERMG PASS THE ERROR MESSAGE BACK TO THE USER MVW D3 JMP EXIT RETURN SPC 3 LNERR DST ERMS SAVE ERROR MESSAGE FROM A & B REG. CPA ASDS IS IT A "DSXX"ERROR ? JMP DSER YES JSB CLR NO, SYSTEM ERROR. CLEAR PARAM AREA LDB MSER FOR NEXT TIME & ABORT USER. LDA ERADD GET MESSAGE @ AND ERROR @ JSB D65AB WE DO NOT RETURN FROM THIS JSB * * WE WILL DECODE THE XX PART OF THE ERROR MESSAGE * AND MAP IT AS A NEGATIVE ERROR CODE FOR THE USER * & PASS THE ASCII ERROR MESSAGE TO USER IF WANTED. * DSER LDA ERMS+1 GET THE XX PART AND B17 GET VALUE OF THE LS DIGIT STA LCHAR SAVE LDA ERMS+1 GET VALUE AGAIN ALF,ALF SWAP CHARACTERS AND B17 GET UPPER CHARACTER'S VALUE MPY D10 WEIGHT IT ADA LCHAR WE NOW HAVE THE ERROR # CMA,INA MAKE IT <0 ADA DM50 MAP IT STA FERCD,I PASS IT TO THE USER * LDA FERMG IF THE USER WANTS IT WE WILL PASS HIM SZA,RSS THE ERROR MESSAGE JMP EXIT HE DOES NOT WANT IT, RETURN DLD ERMS GET THE MESSAGE DST FERMG,I PASS IT ISZ FERMG ISZ FERMG STEP TO LAST WORD LDA BLNK GET AN ASCII DOUBLE BLANK STA FERMG,I PASS IT * EXIT JSB CLR CLEAR PARAM AREA FOR NEXT TIME JMP FLOAD,I RETURN TO USER CLR NOP SUBR TO CLEAR PARAM AREA LDA DM9 CLEAR THE PARAMETER STA CNTR AREA BEFORE RETURNING. CLA LDB PRMSA CLR1 STA B,I INB ISZ CNTR JMP CLR1 JMP CLR,I RETURN SPC 3 D9 DEC 9 D11 DEC 11 D10 DEC 10 D16 DEC 16 D0 DEC 0 D3 DEC 3 DM9 DEC -9 DM50 DEC -50 B17 OCT 17 REM1 OCT 100001 REMOTE BIT / FUNC = 1 LCHAR NOP MSER DEF ERMS ERMS BSS 2 PNAMA DEF RQBUF+5 NAMA DEF RQBUF+10 ERRA DEF RQBUF+8 APNAM DEF *+1 ASC 3,APLDR BLNK ASC 1, ASDS ASC 1,DS ERADD NOP CNWD OCT 140000 D65MS CONWD (NO ABORT, LONG TIMEOUT) CNTR EQU ERMS USE AS COUNTER BEFORE EXIT SPC 1 RQBUF BSS 16 REQUEST-REPLY BUFR END # t} 91740-18036 1740 S C0122 DS/1000 MODULE: GNODE              H0101 5ASMB,R,L,C NAM GNODE,7 91740-16036 REV 1740 770425 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * GNODE * SOURCE: 91740-18036 REV 1740 * BINARY: 91740-16036 REV 1740 * CHUCK WHELAN * APRIL 25,1977 * * RETURN LOCAL NODAL ADDRESS TO CALLER * ENT GNODE * EXT #NODE * GNODE NOP LDB GNODE INB LDB 1,I GET PARAMETER ADDRESS LDA #NODE STA 1,I RETURN NODE # TO CALLER LDB GNODE,I JMP 1,I * END ' u{ 91740-18037 1740 S C0222 DS/1000 MODULE: RMTIO              H0102 :ASMB,R,L,C,Z ** ASSEMBLE FOR DS/1000 ** IFN HED I/O AND CONTROL FOR FRMTR NAM FMTIO,7 24998-16002 REV.1715 770422 0800 XIF IFZ HED DS/1000 I/O AND CONTROL FOR FRMTR *(C) HEWLETT-PACKARD CO. 1977* NAM RMTIO,7 91740-16037 REV 1740 770907 XIF UNL IFZ LST * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAME: FMTIO ('N' ASSEMBLY OPTION) RMTIO ('Z' ASSEMBLY OPTION) * SOURCE: 24998-18002 24998-18002 * RELOC: 24998-16002 91740-16037 * PGMR: D.L.B./E.A.S. C.C.H. (09-07-77) * * ** SEE ENTRY POINT 'DNODE' FOR DS/1000 MODIFICATIONS 9-7-77 (CCH) ** UNL XIF LST * * THE FOLLOWING MODIFICATIONS HAVE BEEN MADE AS OF 042277: * THE CARD READER BUG (REPORT 3668) HAS BEEN CORRECTED. * ADDITIONS WERE INCLUDED TO ALLOW THE USER TO DECLARE HIS OWN * LARGE BUFFERS FOR USE BY THE FORMATTER. * THIS IS DONE BY CALLING LGBUF(ARRAY,LENGTH). (EAS) * IFZ ENT DNODE EXT D65MS XIF ENT .RIO.,.IIO.,.XIO.,.XAY.,.RAY.,.IAY. ENT .DIO.,.BIO.,.IOI.,.IOR.,.IAR.,.RAR.,.DTA. ENT NEWIO,OLDIO,CODE,ACODE,ITLOG,ISTAT,LGBUF EXT EXEC,.FLUN,FLOAT,IFIX,.DFER,DBLE,SNGL EXT .FRMN,.LS2F,.INPN,.DTAN,FMT.E,.OPSY,REIO SPC 1 * EDITED 042077 TO FIX .DIO. SECTION (ELS) * SOME NEW ENTRY POINTS HAVE BEEN ADDED TO THIS ROUTINE 7-75 (DLB) * * CALLED: * ASSEMBLY FORTRAN (IV) * * JSB CODE CALL CODE(ICHRS) * DEF *+2 READ (IBUF,*) A,B,C * DEF ICHRS * LDA IBUFR(,I) * CLB(,INB) * JSB .DIO. * DEF FORMT * DEF ENDLS * * WHERE: * IBUFR = THE IN MEMORY BUFFER TO CONVERT TO BINARY * ICHRS = THE NUMBER OF ASCII CHARACTERS IN " IBUFR " * NOTES: * THE ENTRY POINT " CODE " IS NOW IN THE FORMATTER WHICH * ALLOWS THE OPTIONAL PARAMETTER " ICHRS " TO BE PASSED * TO LIMIT THE SIZE OF THE BUFFER THAT THE FORMATTER WILL * READ. IF " IBUFR " IS NOT PASSED, THEN THE FORMATTER WILL * SEARCH ALL OF MEMORY, IF NECESSARY, TO SATISFY THE VARABLE * LIST. (A,B,C) * * JSB ITLOG ICHRS = ITLOG(IXXXX) * DEF *+1 * STA ICHRS * WHERE: * ICHRS = THE NUMBER OF CHARACTORS READ OR WRITTEN BY THE FORMATTER * BY ITS LAST INPUT/OUTPUT REQUEST TO THE SYSTEM. " ICHRS " VALUE * WILL BE 0 TO 134 (120 OF BINARY) REGARDLESS OF THE SPECIFIED * BUFFER SIZE IN THE READ OR WRITE STATEMENT. * IXXXX = THE SAME AS " ICHRS " * JSB ISTAT ISTUS = ISTAT(IXXXX) * DEF *+1 * STA ISTUS * * WHERE: * ISTUS = THE STATUS WORD RETURNED FROM THE EXEC IN THE LAST * INPUT/OUTPUT CALL THE FORMATTER DID. * IXXXX = SAME AS " ISTUS " * * EXAMPLE: FORTRAN * CALL EXEC (1,401B,IBUFR,-80) * CALL ABREG(IA,ICHRS) * CALL CODE(ICHRS) * READ(IBUFR,*) A,B,C,D * * EXAMPLE: FORTRAN * 5 READ (1,10) (IBUF(I),I=1,36) * 10 FORMAT (36A2) * IF (ITLOG(ICHRS)) 20,5,20 * 20 ISTRC = 1 * CALL NAMR(IPBUF,IBUF,ICHRS,ISTRC) * * NOTE: ICHRS CAN BE AS LARGE AS 134 IF 134 CHARACTERS ARE INPUT. * * EXAMPLE: FORTRAN * READ (8,10) (IBUF(I),I=1,80) * 10 FORMAT (40A2) * IF (IAND(ISTAT(ISTUS),240B)) 99,20,99 * 20 CONTINUE * --- * 99 CONTINUE (END OF FILE OR END TAPE DETECTED) SPC 1 * ENTRY POINT ADDED 770118 PROVIDING THE USER WITH THE CAPABILITY * OF USING A LARGE BUFFER FOR HIS INPUT. THE US;ER MUST PROVIDE * THE BUFFER IN HIS OWN PROGRAM SPACE SPC 1 * CALLING SEQUENCE: * DIMENSION IBUFF(LENGTH) * CALL LGBUF(IBUFF,LENGTH) * MANT BSS 3 EXP BSS 1 SKIP BSS 1 FLAG FOR INPUT SKIPPING FCR BSS 1 POINTS TO CHARACTER IN FORMAT CCNT BSS 1 COUNTS WORDS/CHARS IN BUFFER BCR BSS 1 IO BSS 1 FLAG...=0 FOR OUTPUT, 1 FOR IN SKIPL BSS 1 FLAG SET TO AVOID A SPURIOUS RE- * TURN TO THE LIST TSCAL BSS 1 SCALE BSS 1 SCALE FACTOR NEST BSS 1 COUNTS PAREN. LEVEL IN FORMATS. * INITIALLY = -6, =-5 WITHIN FMT. * =-4 DOWN TO -1 FOR UP TO * FOUR NESTS. CFLAG BSS 1 BCRS BSS 1 USED FOR REMEMBERING BCR F2LSI BSS 1 SWITH BSS 1 RNEST BSS 1 NEST VALUE OF UNLIMITED GROUPS. ADRFD DEF RFSV USED FOR INDEXING IN RFLD. ADLPN DEF MIN6 RF BSS 1 FORMAT REPEAT FIELD COUNTER DTAI BSS 1 WSAVE BSS 1 HOLDS INITIAL W FOR REPEATS DSAVE BSS 1 HOLDS INITIAL D FOR REPEATS W BSS 1 COUNTER OF W-FIELD D BSS 1 COUNTER OF D-FIELD SIGN BSS 1 USUALLY INDICATES SIGN OF NUMBER GD BSS 1 GFLAG BSS 1 = -1 IF G FIELD, +1 OTHERWISE. CLEN ABS -BUFLN-BUFLN .OBUF DEF BUFO EORD BSS 1 AOSEI BSS 1 ATMP BSS 1 AOFLG BSS 1 =-1 IF A,L, OR O TYPE, ELSE = 0 OFLAG DEC 0 =0,-1 FOR ASA DEFINITIONS OR * OLD FORMATTER DEFINITIONS A EQU 0 B EQU 1 CNTRL BSS 1 ....1 DEC 1 ....2 DEC 2 D13 DEC 13 PAPER OCT 34000 TEST FOR PAPER TAPE. PBIT OCT 200 SET BIT FOR IOC. MIN1 DEC -1 BASIC OCT 400 .4000 OCT 4000 CHECK FOR TYPE CODE = 1X ASC2B OCT 500 MIN3 OCT -3 ADX BSS 1 ADDRESS OF VARIABLE TEMP1 BSS 1 TEMPORARY TEMP2 BSS 1 STORAGE RFLD BSS 5 REPEAT FIELD FORO GROUPS. RFSV BSS 5 INITIAL VALUE OF R-FIELD. LPRN BSS 5 ADDRESS OF LEFT PAREN'S IN GROUP MIN6 DEC -6 SEVEN DEC 7 UNIT OCT 1 INPUT/OUTPUT UNIT ENDLS BSS 1 POINTS TO ENDOF CALLING SEQUENCE ALNTH BSS 1 AND .IAR. BFLAG BSS 1 =1 FOR BINARY I/O, 0 FOR DECIMAL ISAVE BSS 1 SAVES A FOR UNLIMITED GROUPS IFLAG BSS 1 =0,-1 IF IOI ENTERED OR NOT STATT BSS 1 TEMPA BSS 1 STXXX NOP BUFBN EQU 60 BUFLN EQU 67 BUFI BSS BUFLN BUFO EQU BUFI BINRY ABS -BUFBN-BUFBN BINARY RECORD LENGTH ASCRY ABS -BUFLN-BUFLN FORMATTED RECORD LENGTH SKP ******************************************************************** * THIS FINAL SET OF ROUTINES ARE THE ROUTINES ACTUALLY CALLED BY * * THE FORTRAN PROGRAM. FOR EACH REAL VARIABLE, INTEGER VARIABLE, * * REAL ARRAY, OR INTEGER ARRAY, THERE IS A SINGLE CALL TO EITHER * * .IOR.,.IOI.,.RAR.,OR .IAR.. THERE IS INITIALLY A SINGLE CALL TO * * EITHER .DIO. OR .BIO.. * ******************************************************************** SPC 3 IOCHK NOP A SWITCH ON THE VALUE OF IO. RE- STB TEMP2 SAVE B LDB IO TURN TO P+1 FOR OUTPUT, P+2 FOR SZB INPUT. ISZ IOCHK LDB TEMP2 RESTORE B JMP IOCHK,I SPC 3 .IIO. NOP * INTEGER I/O * CALLING SEQUENCE: * JSB .IIO. * DEF X LDB .IIO.,I STB ADX LDA B,I A CONTAINS X JSB .IOI. I/O CALL JSB IOCHK RSS OUTPUT OR SKIP AROUND STORE STA ADX,I STORE INPUT ISZ .IIO. JMP .IIO.,I RETURN SPC 3 .RIO. NOP * REAL I/O * CALLING SEQUENCE: * JSB .RIO. * DEF X LDB .RIO.,I STB ADX DLD B,I LOAD X JSB .IOR. I/O CALL NOP JSB IOCHK JMP *+3 G  OUTPUT OR SKIP AROUND STORE DST ADX,I STORE INPUT ISZ .RIO. JMP .RIO.,I RETURN SPC 3 .XIO. NOP * DOUBLE PRECISION I/O * CALLING SEQUENCE: * JSB .XIO. * DEF X LDA .XIO. ADDRESS OF X IN A LDA A,I PICK UP NEXT LEVEL RAL,CLE,SLA,ERA INDIRECT? JMP *-2 YEP, TRY AGAIN STA XIO1 SAVE FOR TRANSFER JSB BCHEK CHECK FOR BINARY JMP BINEP JSB IOCHK RSS OUTPUT JMP XIOIN INPUT JSB .DFER MOVE 3WORDS INTO MANT DEF MANT DESTINATION ADDRESS XIO1 DEF * SOURCE ADDRESS LDB MANT+2 INTO MANT JSB .FLUN AND UNPACK. STA EXP STB MANT+2 XIOIN JSB LST2J RETURN TO FORMAT OUTX ISZ .XIO. SET RETURN ADDRESS ISZ SKIP CHECK FOR SKIP IN FREE FIELD IN JSB IOCHK NO SKIP. IN OR OUT ? JMP .XIO.,I OUT OR SKIP. DO NOT STORE JSB .DFER INPUT WITH NO SKIP. STORE RESULT DEF XIO1,I PUT BACK IN CALLER'S BUFF DEF MANT SOURCE BUFFER JMP .XIO.,I RETURN BINEP JSB IOCHK RSS OUTPUT. ADDRESS OF NUM IN A NOW LDA AMANT INPUT. STA B LDA MIN3 NEED 3 WORDS FOR EX PRECISION STA TEMPA LOOP1 LDA B,I OUTPUT WORD JSB BNARY STA B,I INPUT WORD INB ISZ TEMPA JMP LOOP1 JMP OUTX RETURN SKP .IOR. NOP USED TO INPUT/OUTPUT A REAL VAR- * IABLE. .IOR. IS CALLED FOR * OUTPUT WITH THE NUMBER TO * BE OUTPUT IN A & B. FOR IN- * PUT IT RETURNS WITH THE IN- * PUT VALUE IN A & B JSB BCHEK JMP BINRL JSB IOCHK IF INPUT, RSS JMP *+7 JMP OVER UNNECESSARY STUFF STA MANT STB MANT+1 JSB DBLE CONVERT INPUT TO DOUBLE PRECISN. DEF *+3 DEF MANT AMANT DEF MANT JSB .XIO. EXTENDED PRECISION I/O CALL DEF MANT JSB IOCHK IF OUTPUT, JMP .IOR.,I RETURN LDA SKIP SKIP AROUND STORE? SZA,RSS JMP *+5 YES JSB SNGL NO. CONVERT INPUT TO REAL DEF *+2 DEF MANT JMP .IOR.,I RETURN ISZ .IOR. JUMP AROUND DOUBLE STORE ISZ .IOR. JMP .IOR.,I BINRL JSB BNARY STA FCR STB A JSB BNARY STA B LDA FCR JMP .IOR.,I SKP .IOI. NOP USED TO INPUT/OUTPUT AN INTEGER * VARIABLE. .IOI. IS CALLED FOR * OUTPUT WITH THE INTEGER IN A. * FOR INPUT IT RETURNS WITH THE * INTEGER IN A. JSB BCHEK CHECK FOR BINARY JMP BININ STA ISAVE SAVE INPUT FOR UNLIMITED GROUPS CLB STB IFLAG INDICATES IOI ENTERED ISZ AOFLG A,L, OR O SPEC ? JMP GO.ON IOIIN STA MANT YES. STORE OUTPUT JSB LST2J LDA MANT LOAD INPUT JMP .IOI.,I GO.ON JSB IOCHK JSB FLOAT FLOAT OUTPUT NUMBER JSB .IOR. REAL I/O JSB IFIX CCB STB IFLAG INDICATES IOI EXITED LDB SKIP SZB,RSS IF FREE FIELD INPUT WITH ISZ .IOI. EMPTY FIELD, SKIP AROUND STA JMP .IOI.,I RETURN BININ JSB BNARY JMP .IOI.,I SKP .XAY. NOP * EXTENDED PRECISION ARRAY * CALLING SEQUENCE: * JSB .XAY. * DEF ADDRESS OF ARRAY * OCT NUMBER OF ELEMENTS LDB .XAY.,I B = ARRAY ADDRESS ISZ .XAY. LDA .XAY. A = # ELEMENTS LDA A,I GET DIRECT ADDRESS RAL,CLE,SLA,wERA IF BIT 15 SET, A CONTAINS JMP *-2 ISZ .XAY. JSB ASTUF EXTENDED PRECISION ARRAY. EARLP JSB .XIO. DEF ARRAY,I LDA SKIP SKIP RETURN ? SZA JMP EAR1 NO. NORMAL RETURN EARL1 REP 3 SKIP RETURN ISZ ARRAY ISZ ALNTH JMP EARLP JMP .XAY.,I RETURN EAR1 JSB IOCHK JMP EARL1 OUTPUT JSB .DFER INPUT. MOVE NUMBER ARRAY DEF * DEF MANT INTO ARRAY JMP EARL1 SKP .RAY. NOP * REAL ARRAY * CALLING SEQUENCE: * JSB .RAY. * DEF ARRAY ADDRESS * OCT # ELEMENTS LDB .RAY.,I B= ARRAY ADDRESS ISZ .RAY. LDA .RAY.,I A = # ELEMENTS RAL,CLE,SLA,ERA IF BIT 15 SET, A CONTAINS LDA A,I ADDRESS, SO LOAD INDIRECT ISZ .RAY. JSB .RAR. JMP .RAY.,I RETURN SPC 3 .IAY. NOP * INTEGER ARRAY * CALLING SEQUENCE * JSB .IAY. * DEF ARRAY ADDRESS * OCT # ELEMENTS LDB .IAY.,I B = ARRAY ADDRESS ISZ .IAY. LDA .IAY.,I A = # ELEMENTS RAL,CLE,SLA,ERA IF BIT 15 SET, A CONTAINS LDA A,I ADDRESS, SO LOAD INDIRECT ISZ .IAY. JSB .IAR. JMP .IAY.,I RETURN SKP .RAR. NOP CALLED FOR INPUT/OUTPUT OF A JSB ASTUF RARLP DLD ARRAY,I JSB .IOR. STB .IAR. JMP RAR1 RARL1 ISZ ARRAY SKIP RETUR ISZ ARRAY ISZ ALNTH JMP RARLP JMP .RAR.,I RETURN RAR1 JSB IOCHK JMP RARL1 OUTPUT LDB .IAR. DST ARRAY,I JMP RARL1 SPC 3 .IAR. NOP CALLED FOR INPUT/OUTPUT OF AN JSB ASTUF IARLP LDA ARRAY,I JSB .IOI. JMP IAR1 IAR2 ISZ ARRAY ISZ ALNTH JMP IARLP JMP .IAR.,I IAR1 JSB IOCHK JMP IAR2 STA >ARRAY,I JMP IAR2 SPC 3 ASTUF NOP SAVES ONE LOC CMA,INA A=ARRAY LENGTH (>0) STA ALNTH B=ARRAY ADDRESS STB ARRAY RBL,CLE,SLB,ERB CHECK FOR INDIRECT RSS JMP ASTUF,I NO. THEN RETURN LDB B,I GET NEXT ADDRESS LEVEL JMP *-5 REPEAT SPC 3 BCHEK NOP RETURNS TO P+1 IF BINARY, ELSE 2 STB TEMP2 LDB BFLAG SZB,RSS ISZ BCHEK LDB TEMP2 JMP BCHEK,I SPC 3 BNARY NOP HANDLES TRANSFER OF 1 WORD TO OR FROM THE STA TEMP1 BINARY BUFFER. STB .DIO. USED AS TEMPORARY ISZ CCNT TEST FOR END OF BUFFER. JMP *+3 NO. JSB DTA CALL FOR BUFFER IN/OUT. JMP *-3 AND TRY AGAIN. ISZ BCR BUMP BUFFER POINTER. LDA TEMP1 RESTORE WORD TO BE OUTPUT. JSB IOCHK STA BCR,I OUTPUT LDA BCR,I INPUT LDB .DIO. JMP BNARY,I SKP * THE FOLLOWING CODE WAS ADDED FOR THE "CALL CODE" PROBLEM * CALLING: * JSB CODE JSB CODE * DEF *+1 DEF *+2 * LDA IBUFR(,I) DEF TLOG +CHARS * CLB(,INB) - OR - LDA IBUFR(,I) * JSB .DIO. CLB(,INB) * DEF FORMT JSB .DIO. * DEF ENDLS DEF FORMT * ETC. DEF ENDLS * ETC. ****************************************** CODE NOP SPECIAL ENTRY FOR INTERNAL CONVERSION ACODE EQU CODE DO THE ALGOL THING ******************************************* LDB CODE,I GET RETURN ADDRESS + LDA BUFFR(,I) ISZ CODE BUMP TO FIND OUT IF TLOG LDA CODE,I GET POSSIBLE PRAM ADDRESS CPB CODE CHECK IF PASSED PARM LDA DMIN2 NO, GET DEF -2 LDA A,I GET TLOG IN CHARS OR -2 CMA  MAKE +1 OR -TLOG-1 STA CCNT SAVE AS BUFFER LEN STB BFLAG SAVE RETURN ADDRESS LDA B,I LOAD: "LDA IBUFR(,I)". AND O2000 MASK TO FIND IF CLE,SZA CURRENT OF BASE PAGE? LDA B CURRENT, GET PAGE BITS XOR B,I LOAD IF BASE, MIRGE IF CURRENT AND O76K MASK OFF PAGE IF BASE, XOR B,I MIRGE IN IF CURRENT RSS NOW TRACK DOWN ANY LDA A,I INDIRECT ADDRESSES RAL,CLE,SLA,ERA INDIRECT? JMP *-2 YES, DO IT AGAIN RAL DOUBLE IT AND ADA MIN1 SUBTRACT ONE STA BCR SAVE THE BUFFER ADDRESS ADB D3 POINT TO THE P+1 OF JSB .DIO. STB CODE SAVE IN CONVENENT PLACE JMP BFLAG,I RETURN TO EXECUTE LDA IBUFF,CLB,JSB .DIO. SPC 1 O2000 OCT 2000 O76K OCT 76000 D3 DEC 3 DMIN2 DEF MIN2 MIN2 DEC -2 FMTAD NOP SKP *************************** .DIO. NOP * THE INITIAL CALL TO THE I/O ROU- * * TINES FOR FORMATTED INPUT/ *************************** OUTPUT. STA UNIT STB IO LDA .DIO. CHECK IF CALL CODE BEFORE CPA CODE MUST BE SAME JMP INTCN YES, CALL CODE CONVERSION LDA UNIT SET FUNCTION BITS JSB SETLU STA CNTRL LDA UNIT NO, PROCESS AS BEFORE SZA CHECK FOR UNIT=0. JMP DIO1 NO-IO TRANSFER. INA INTERNAL CONVERSION. STA CCNT SET CCNT=1. CCA GET BUFFER ADDRESS INTO BCR. ADA .DIO.,I ADA .DIO.,I STA BCR ISZ .DIO. INTCN CLA,RSS CALL CODE INTERNAL CONVERSION DIO1 CLA,RSS STA UNIT STA BFLAG STA SKIPL STA TSCAL INITIAL SCALE FACTOR = 0 STA SCALE CLEAR SCALE FACTOR FOR FREE INPT STA AOFLG STA SWITH LDA ASCRY STA CLEN RECORD SIZE LDA .DIO. GET <:6FORMAT ADDRESS LDA A,I GET DOWN TO NEXT LEVEL RAL,CLE,SLA,ERA TEST FOR INDIRECT (1 LEVEL) JMP *-2 SEARCH FOR EVER IF NEED BE STA FMTAD SAVE FORMAT ADDRESS RAL CONVERT TO A CHARACTER CMA,INA,SZA ADDRESS CMA STA FCR ISZ .DIO. GET THE END-OF LIST LDA .DIO.,I ADDRESS STA ENDLS SZB,RSS JSB WAITO LDA MIN6 STA NEST CCA STA CFLAG STA IFLAG ISZ .DIO. SET UP LDA .DIO. THE RETURN STA LST2J ADDRESS JSB IOCHK JMP FORMT JSB DTA READ ALINE IF INPUT. LDA FCR SZA TEST FOR FREE-FIELD JMP FORMT FORMATTED I/O. NXTON JSB F2LST LIST DEFINITION IOTST LDB UNIT CHECK IF INTERNAL CONVERSION LDA CCNT IF CCNT = 0, SZA CHECK IF SLASH WAS ENCOUNTERED JMP NSLSH NO SZB,RSS SLASH, BUT INTERNAL CONVERSION? JMP ENDLS,I YES RETURN, UNSATISFYING LIST JSB DTA SO READ NEXT RECORD NSLSH JSB .INPN ENTER FRMTR TO CONVERT DATA DEF MANT LDA SWITH CPA SEVEN IF SWITH = 7, GO TO END OF LIST JMP ENDLS,I SZA JMP NXTON STORE ELEMENT JMP IOTST MUST BE SLASH SKP S<*************************** .BIO. NOP * THE INITIAL CALL TO THE I/O ROU- * * TINES FOR NON-FORMATTED *************************** INPUT/OUTPUT STA UNIT STB IO JSB SETLU CONFIGURE THE LU CONTROL WORD XOR ASC2B MAKE IT BINARY STA CNTRL AND PUT IT AWAY CLA,INA STA BFLAG STA SKIP LDA BINRY STA CLEN RECORD SIZE LDB IO TEST FOR I/O DIRECTION SZB JMP BIO1 ITS COMING IN HUNEY JSB WAITO JMP .BIO.,I SPC 2 BIO1 JSB DTA JMP .BIO.,I SPC 3 NEWIO NOP * SET OFLAG = 0 FOR NEW FORMAT DEFINITIONS * CALLING SEQUENCE: * JSB NEWIO * DEF *+1 CLA STA OFLAG ISZ NEWIO JMP NEWIO,I SPC 3 OLDIO NOP * SET OFLAG = -1 FOR OLD FORMAT DEFINITIONS * CALLING SEQUENCE: * JSB OLDIO * DEF *+1 CCA STA OFLAG ISZ OLDIO JMP OLDIO,I SPC 3 FORMT JSB .FRMN ENTER FRMTR TO PROCESS LIST DEF MANT TSTSW LDA MIN6 ADA SWITH SSA JMP ERROR SWITCH < 6 = ERROR. SZA,RSS JMP NRML SWITCH=6=F2LST JSB DTA SWITCH=8 JSB .DTAN ENTER FRMTR AFTER DATA I/O DEF MANT JMP TSTSW NRML JSB F2LST JSB .LS2F CONTINUE LIST PROCESS DEF MANT JMP TSTSW SPC 3 LST2J NOP CLA STA SKIP JMP F2LST,I SPC 3 F2LST NOP LDA BCR STA BCRS ISZ SKIPL JMP LST2J,I ISZ IFLAG IOI LAST ENTERED? ISZ AOFLG YES. A,O,OR L TYPE? JMP F2LST,I NO. RETURN TO FORMAT PROCESSOR LDA ISAVE OTHERWISE RESTORE A TO INITIAL JMP IOIIN CONTENTS AND RETURN TO IOI * .DTA. NOP LDA UNIT SET UP STATUS CONTROL SZA,RSS IF UNIT=0, JMP .DTA.,I IGNORE CALL. JSB IOCHK NOW TEST FOR INPUT OR OUTPUT. JMP DTAO * INPUT SECTION * JSB IOCIN PERFORM IOC CALL. JMP .DTA.,I RETURN * OUTPUT SECTION * DTAO LDB CCNT GET NUMBER OF CHARACTERS/WORDS. SZB BINARY RECORD CONTINUATION? CMB JSB BCHEK IF BINARY, DOUBLE BLS COUNT. ADB CLEN PRODUCES CORRECT COUNT IF ASCII. STB OUTBL STORE AS # OF CHARS. OUTPUT. CMB,INB JSB BCHEK JMP DTAO2 BINARY CLE,ERB GO PAD WITH TRAILING SPACE ADB BUFOA CALCULATE LAST CHAR IN BUFFER LDA B,I GET THE CHAR AND OM400 MASK OFF ODD ONE IOR O40 MERGE IN SPACE SEZ CHECK IF ODD CHAR? STA B,I YES, STORE BACK DTAO1 JSB IOCOU PERFORM IOC CALL JMP .DTA.,I RETURN DTAO2 BLF,BLF POSITION AS HIGH CHARACTER RBR LDA CNTRL ALF,ALF ROTATE P-BIT TO SIGN SSA IF NOT ZERO, STORE AS STB .IBUF,I FIRST CHARACTER IN BUFFER. JMP DTAO1 * O40 OCT 40 SPC 1 DTA NOP PERFORMS A COMPLETE I/O OPERA- JSB .DTA. TION. JSB IOCHK JMP *+3 JSB WAITI INPUT WAIT JMP DTA,I JSB WAITO OUTPUT WAIT JMP DTA,I * WAITI NOP WAITS FOR INPUT LDB UNIT IGNORE SZB,RSS CALL IF JMP WAITI,I UNIT=0. JSB BCHEK BINARY OR ASCII? ARS BINARY--CONVERT TO WORD COUNT. CMA STORE AS NEGATIVE IN STA CCNT COUNTER. LDB .IBUF GET BUFFER ADDRESS JSB BCHEK BINARY ? JMP WTI3 YES RBL FOR ASCII SET BCR TO POINT TO WTI2 ADB MIN1 THE FIRST CHARACTER PRECEDING WTI4 STB BCR THE BUFFER. JMP WAITI,I WTI3 LDA CNTRL ALF,ALF SSA,RSS PAPER TAPE ? JMP WTI2 NO ISZ CCNT YES JMP WTI4 * INPUT ERROR * WITH = OLD DESTINATION NODE, = NEW DESTINATIO\N NODE. * * NEED ONLY BE CALLED, ONCE, BEFORE EXECUTION OF THE * FIRST READ/WRITE OPERATION. IT WILL REMAIN SET FOR THE * SPECIFIED NODE, DURING THE REMAINDER OF THE PROGRAM'S EXECUTION. * THE USER MAY RESET THE NODAL ADDRESS, AT ANY TIME. * DNODE NOP LDA DNODE,I GET THE RETURN ADDRESS. ISZ DNODE ADVANCE TO PARAMETER ADDRESS. LDB DNODE GET ADDRESS OF PARAMETER POINTER. STA DNODE SAVE THE RETURN ADDRESS. * LDB B,I GET THE PARAMETER ADDRESS. RBL,CLE,SLB,ERB TRACK DOWN JMP *-2 INDIRECTS. LDB B,I GET THE DESTINATION NODAL ADDRESS. LDA DESTN = OLD DESTINATION NODE. STB DESTN ESTABLISH NODAL ADDRESS OF REMOTE CPU. JMP DNODE,I RETURN. * DESTN DEC -1 DESTINATION NODAL ADDRESS. SPC 2 * * REMOTE REQUEST PROCESSING. * REMOT NOP LDA REMOT,I GET THE RETURN ADDRESS. STA REMOT ESTABLISH RETURN POINTER. STB RCODE ESTABLISH REQUEST CODE IN RQBUF+4. * LDA CNTRL GET THE READ CONTROL WORD. CPB D13 IF THIS IS A REMOTE 'STATUS' REQUEST, LDA UNIT USE THE DEVICE LOGICAL UNIT NO. CPB ....2 IF THIS IS A REMOTE 'WRITE' REQUEST, LDA CNTRO USE THE 'WRITE' CONTROL WORD. STA CONWD PLACE CONWD INTO REQUEST BUFFER+5. * CLA CPB ....1 IF THIS IS A 'READ' REQUEST, LDA CLEN THEN GET THE READ-BUFFER LENGTH. SSA,RSS IF WORDS WERE SPECIFIED, JMP STRLN GO TO INITIALIZE 'RDLEN' FOR . ARS CONVERT CHARACTERS TO WORDS, CMA,INA AND MAKE IT A POSITIVE VALUE. STRLN STA RDLEN CONFIGURE THE READ LENGTH. * SKP CLA CPB ....2 IF THIS IS A 'WRITE' REQUEST, LDA OUTBL THEN GET THE WRITE-BUFFER LENGTH. SSA,RSS IF WORDS WERE SPECIFIED, JMP STWLN GO TO INITIALIZE 'WRLEN' FOR . ARS CONVERT CHARACTERS TO WORDS, CMA,INA AND MAKE IT A POSITIVE VALUE. STWLN STA WRLEN CONFIGURE THE WRITE LENGTH. * CLA PREPARE FOR A 'STATUS' REQUEST. CPB ....1 IF THIS IS A 'READ' REQUEST, LDA CLEN GET THE ORIGINAL READ LENGTH. CPB ....2 IF IT'S A 'WRITE' REQUEST, LDA OUTBL GET THE ORIGINAL WRITE LENGTH. STA IBUFL SAVE BUFFER LENGTH IN RQBUF+6. * LDA D5 CONFIGURE THE STREAM-WORD STA RQBUF FOR A REMOTE 'EXEC' REQUEST. LDA DESTN GET THE DESTINATION NODAL ADDRESS, STA RQBUF+3 AND DEFINE DESTINATION OF THIS REQUEST. * JSB D65MS CALL DEF *+8 TO TRANSMIT DEF NABRT THE REMOTE-EXEC DEF RQBUF REQUEST TO DEF D10 THE USER-SPECIFIED DEF BUFI REMOTE NODE, DEF WRLEN FOR EXECUTION OF DEF RDLEN THE READ/WRITE/STATUS DEF D10 REQUEST. JMP DSERR REPORT THE ERROR! * LDB RQBUF+6 GET THE ERROR-FLAG--IF ANY, CLE,ELB AND POSITION IT TO . LDB RQ7AD GET ADDRESS FOR RETURNED 'STATUS'. CPA SEVEN IF THE REPLY LENGTH IS =7, LDB RQ4AD THEN RETURN-DATA IS IN WORDS #5,6. DLD B,I GET THE RETURN-DATA. SEZ,RSS IF NO ERRORS WERE DETECTED, JMP REMOT,I THEN RETURN WITH THE REQUIRED DATA; * DSERR DST MESSS+9 ELSE, CONFIGURE THE ERROR MESSAGE. LDA ....1 PRINT COMM. LINE ERRORS STA ERLU ON THE SYSTEM CONSOLE. JMP RMTER GO TO REPORT THE ERROR! * SKP * * CONFIGURED REMOTE-REQUEST BUFFER. * RQBUF NOP STREAM WORD. NOP SEQUENCE NUMBER (ADDED BY ). NOP SOURCE NODE (THIS) (ADDED BY ). DEC -1 DESTINATION NODE (DEFINED BY 'DNODE'). RCODE NOP REQUEST CODE (13:STATUS/1:640READ/2:WRITE). CONWD NOP I/O CONTROL WORD (LU, ETC.). IBUFL NOP REQUEST LENGTH: READ/WRITE, =0: STATUS. EQTST NOP RETURNED EQT WORD #5. NOP EQT WORD #4. (NOT USED). NOP LU STATUS (NOT USED). * * D5 DEC 5 D10 DEC 10 NABRT OCT 100000 NO-ABORT FLAG FOR . RQ4AD DEF RCODE REGISTER-RETURN POINTER. RQ7AD DEF EQTST STATUS-RETURN POINTER. RDLEN NOP READ RETURNED-DATA LENGTH FOR . WRLEN NOP WRITE RETURNED-DATA LENGTH FOR . XIF END 46 w 91740-18038 1740 S C0122 DS/1000 MODULE: DEXEC              H0101 -ASMB,L,R,C HED DEXEC: DS/1000 REMOTE EXEC ROUTINE *(C) HEWLETT-PACKARD CO.1977* NAM DEXEC,7 91740-16038 REV 1740 770728 SPC 1 * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * * *************************************************************** SPC 1 * NAME: DEXEC * SOURCE: 91740-18038 * RELOC: 91740-16038 * PGMR: C. HAMILTON [ 07/28/77 ] SPC 1 * (DISTRIBUTED EXECUTIVE) IS THE DS/1000 USER INTERFACE FOR * 'TRANSPORTABLE' CALLS TO EITHER THE LOCAL, OR REMOTE-NODE RTE SYSTEM. * * WILL ACCEPT ALL VALID REQUEST CODES FOR 'LOCAL' EXECUTION. * * FOR EXECUTION AT A REMOTE NODE, WILL ACCEPT REQUEST CODES: * 1, 2, 3, 6, 9, 10, 11, 12, 13, 23, 24, 25, <99> * ONLY * * * ** UNACCEPTABLE REQUESTS WILL BE REJECTED WITH A "DS06" ERROR! * * ** "IO01" IS RETURNED UPON DETECTION OF INCORRECT, MISSING, OR * TOO MANY (>9) PARAMETERS. * * ** "IO04" WILL BE RETURNED FOR BUFFER-ERROR SPECIFICATIONS: * 'Z-BIT(#12)' SET IN CONWD, REMOTE READ/WRITE BUFFER LENGTH * GREATER THAN 512 WORDS, INTERACTIVE WRITE LENGTH > READ LENGTH. * * ** "SC01" INDICATES A MISSING SCHEDULING PARAMETER. * * ** "SC05" INDICATES AN IMPROPER PROGRAM NAME SPECIFICATION. * * REQUEST CODES: 1,2,3,6,10,11,12,13,25,99 WILL BE TRANSMITTED TO THE REMOTE * NODE, VIA STREAM #5, TO BE PROCESSED BY . MASTER (THIS NODE), * AND SLAVE (REMOTE NODE) TIMEOUTS, ESTABLISHED WITH , WILL BE * USED TO PROCESS THESE REQUESTS. REQUEST CODES: 9,23,24 WILL BE * TRANSMITTED TO THE REMOTE NODE, VIA STREAM #3, TO BE PROCESSED BY * . A LONG MASTER TIMEOUT (APPROX. 20 MIN.) WILL BE ALLOWED, * IN ORDER TO PROVIDE SUsFFICIENT TIME FOR SCHEDULE-WITH-WAIT REQUESTS. * * CALLING SEQUENCE: CALL DEXEC(NODE,P1,P2,P3,P4,P5,P6,P7,P8,P9) * * RETURN (X&Y INTACT) : - NORMAL COMPLETION, IF REQUEST CODE SIGN =0 * CONTAIN 'EXEC' RETURN INFORMATION * * : ERROR DETECTED: ABORT & PRINT MESSAGE, IF RC#15 =0 * * : - FOR DETECTED ERRORS, IF RC#15 =1 * CONTAIN ASCII ERROR CODES * * : - FOR NORMAL COMPLETION, IF RC#15 =1 * CONTAIN 'EXEC' RETURN INFORMATION * * NODE - SPECIFIES CALL-EXECUTION LOCATION: LOCAL=-1, REMOTE= 0 TO 32767 * [ CALL WILL ALSO EXECUTE, LOCALLY, IF THE 'LOCAL' NODE IS USED ] * * P1 TO P9 - NORMAL 'EXEC' CALLING PARAMETERS (P1 = REQUEST CODE, ETC.) * * WILL ALLOW THE USER TO PERFORM A COMBINED, INTERACTIVE, * WRITE-READ OPERATION IN A SINGLE CALLING SEQUENCE. SUCH A REQUEST * WILL BE MOST USEFUL FOR EFFICIENTLY COMMUNICATING WITH A REMOTE * OPERATOR. TO SPECIFY AN INTERACTIVE WRITE-READ: REQUEST CODE =1, * CONWORD BIT#11 =1, P8 = WRITE BUFFER ADDRESS, AND P9 = WRITE * BUFFER LENGTH (<=READ BUFFER LENGTH). * * * * RCODE=99: PROGRAM STATUS; P2:PGM.NAME ADDR; P3: OPTIONAL STATUS ADDR. * RTN: #15=1: SHORT I.D.,#3-0: STATUS; =-1:ERROR; ALWAYS=0. SKP EXT D65AB EXT D65MS EXT .ENTR EXT EXEC,REIO,PGMAD,#NODE * ENT DEXEC SUP SPC 1 DEXEC NOP DST SAVEA SAVE FOR RETURN-PARAMETER CHECKS. STX SAVEX SAVE REGISTER. LDA DEXEC GET THE RETURN POINTER. STA EXIT SAVE FOR '.ENTR' PROCESSING. LDX D12 CLA SAX PRAMS-1 INITIALIZE PARAMETER AREA DSX JMP *-3 * JMP GETPR GO TO OBTAIN PARAMETER ADDRESSES. SPC 1 CALEX JSB RQLEN,I LOCAL-EXECUTION CALL TO 'EXEC'/'REIOt' PRAMS REP 10 PARAMETER ADDRESSES/LOCAL EXECUTION AREA NOP NOP NOP SEZ,RSS LOCAL EXECUTION: ANY ERRORS DETECTED? ISZ EXIT NO. ESTABLISH RETURN TO . JMP EXIT,I RETURN TO CALLER. SPC 1 EXIT NOP GETPR JSB .ENTR GET DIRECT ADDRESSES DEF PRAMS FOR THE USER-SPECIFIED PARAMETERS. * LDA PRAMS+1 GET THE ADDRESS OF THE REQUEST CODE. SZA,RSS WAS THE PARAMETER PROVIDED? JMP ERR NOT PROVIDED, ERROR! LDB PRAMS+1,I GET THE REQUEST CODE. RBL,CLE,ERB REMOVE THE NO-ABORT BIT, AND SAVE IN STB ICODE & ICODE FOR MAPPING & POST PROCESSING. * LDA PRAMS,I GET THE DESTINATION CPA #NODE FOR US ? JMP LOCAL YES. GO TO LOCAL PROCESSING. INA,SZA,RSS IS IT AN ABSOLUTE LOCAL REFERENCE? JMP LOCAL YES. GO TO LOCAL PROCESSING. * SKP SPLOC STY SAVEY NOT LOCAL--SAVE REGISTER, ALSO. * LDX D15 CLA,CCE =0: BUFFER INIT; =1: CONWORD PREP. SAX IRBUF-1 INITIALIZE REQUEST BUFFER DSX JMP *-3 * STA WRLEN SET THE 'NO DATA' STA RDLEN DEFAULT CONDITIONS. * ERA SET THE 'ERROR-RETURN' FLAG FOR STA CONWD THE CALLING SEQUENCE. * LDA PRAMS,I GET THE DESTINATION STA IRBUF+3 SAVE IT IN THE REQUEST * LDA D5 GET THE STREAM TYPE STA IRBUF SET IT IN THE REQUEST * LDA ICODE GET THE REQUEST CODE STA IRBUF+4 INITIALIZE WORD #5 OF REQUEST BUFFER. CPA D99 IF THE REQUEST IS FOR PROGRAM STATUS, JMP PGMST THEN PROCESS IT INDEPENDENTLY. SZA REQUEST CODE =0? ADA UPLIM NO. SEE IF IT'S WITHIN SSA,RSS THE RANGE: 0 < RC < 27 ? JMP ERR ERROR, OUT OF RANGE: RC=0, OR RC>26! LDA PRAMS+2 SZA,RSS WAS A THIRD PARAMETER SPECIFIED? eX JMP ERIO1 NO, ERROR! * * SELECT THE PRE-PROCESSOR ROUTINE, VIA MAPPED REQUEST CODE. * ADB SUBAD MAP ICODE IN PRE-PROCESS MENU JMP B,I GO DO IT [= THIRD PARAMETER ADDRESS] * SKP * PRE-PROCESSOR JUMP TABLE * SUBAD DEF SUBS-1,I SUBS DEF IC1/2 READ RC=01 DEF IC1/2 WRITE RC=02 DEF ICOD3 CONTROL RC=03 DEF ERR * TRACK ALLOCATION RC=04 DEF ERR * TRACK RELEASE RC=05 DEF ICOD6 PROGRAM TERMINATION RC=06 DEF ERR * PROGRAM SUSPEND RC=07 DEF ERR * SEGMENT LOAD RC=08 DEF SCHW SCHEDULE W/WAIT RC=09 DEF ICD10 SCHEDULE W/O WAIT RC=10 DEF ICD11 TIME RC=11 DEF ICD12 TIME SCHEDULE RC=12 DEF ICD13 I/O STATUS RC=13 DEF ERR * GET STRING RC=14 DEF ERR * GLOBAL TRACK ALLOCATE RC=15 DEF ERR * GLOBAL TRACK RELEASE RC=16 DEF ERR * CLASS READ RC=17 DEF ERR * CLASS WRITE RC=18 DEF ERR * CLASS CONTROL RC=19 DEF ERR * CLASS WRITE/READ RC=20 DEF ERR * CLASS GET RC=21 DEF ERR * SWAP CONTROL RC=22 DEF SCHW QUEUE-SCHEDULE W/WAIT RC=23 DEF SCHW QUEUE-SCHEDULE W/O WAIT RC=24 DEF PARST PARTITION STATUS RC=25 DEF ERR * MEMORY STATUS (RTE-IV) RC=26 * UPLIM ABS SUBAD-* REQUEST CODE LIMIT-VALUE:-(MAX.RCODE +1) HED DEXEC: PRE-PROCESSORS * (C) HEWLETT-PACKARD CO. 1977 * IC1/2 LD A PRAMS+2,I GET CONTROL WORD RC=1,2 STA IRBUF+5 SET IN REQUEST ALF,SLA DOUBLE-BUFFER REQUEST (BIT#12 =1)? JMP ERIO4 YES--ERROR FOR REMOTE REQUESTS! * LDA PRAMS+3 GET BUFFER ADDRESS SZA,RSS WAS IT SUPPLIED? JMP ERIO1 NO BUFFER, ERROR! STA BUFA SET IT IN CALL TO D65MS * LDB PRAMS+4 GET THE BUFFER-LENGTH ADDRESS. SZB,RSS WAS IT SUPPLIED? JMP ERIO1 NO BUFFER LENGTH PROVIDED, ERROR! JSB LENCK GO VERIFY & GET BUFFER WORD COUNT. LDB ICODE GET THE REQUEST CODE. SLB IF THIS IS A READ(1) REQUEST, STA RDLEN THEN CONFIGURE READ LENGTH FOR ; SLB,RSS ELSE, IF THIS IS A WRITE(2) REQUEST, STA WRLEN THEN CONFIGURE 'WRLEN' FOR . * LDA PRAMS+4,I GET LENGTH AGAIN STA IRBUF+6 SAVE IN REQUEST * LDB PRAMS+5 GET ADDR OF 1ST OPT. PARAM SZB,RSS SPECIFIED ? JMP SRQLN NO, SHORT REQUEST * LDA PRAMS+5,I GET FIRST OPTIONAL PARAMETER STA IRBUF+7 CLA PREPARE FOR MISSING PARAMETER. LDA PRAMS+6,I GET SECOND OPTIONAL PARAMETER STA IRBUF+8 * LDB IRBUF+5 GET THE USER'S CONTROL WORD. BLF POSITION WRITE-READ BIT(#11) TO SIGN. SSB,RSS IF THIS IS A WRITE-READ REQUEST: SKIP; JMP NOMOV ELSE, NO ADDITIONAL PROCESSING NEEDED. * LDA RDLEN FORCE ADEQUATE S.A.M TO BE # STA WRLEN ALLOCATED AT RECEIVING NODE. # * LDB PRAMS+6 GET ADDRESS FOR WRITE-BUFFER LENGTH. JSB LENCK GO VERIFY & GET 'WRITE' WORD COUNT. STA LENCK SAVE THE WORD-MOVE LENGTH, TEMPORARILY. CMA,INA,SZA,RSS NEGATE THE COUNT, & IF =0, JMP NOMOV NO NEED TO MOVE THE 'WRITE' BUFFER. * ADA RDLEN IF THE WRITE LENGTH SSA IS GREATER THAN THE 'READ' LENGTH, JMP ERIO4 (THEN THE REQUEST IS INVALID! * LDA PRAMS+5 GET THE 'WRITE' BUFFER ADDRESS LDB PRAMS+3 AND THE 'READ' BUFFER ADDRESS. CPA B IF THEY ARE THE SAME, THEN THE JMP NOMOV 'WRITE' DATA NEED NOT BE MOVED; ELSE, MVW LENCK MOVE 'WRITE' DATA TO 'READ' BUFFER. * LDA CONWD GET THE CONTROL WORD. ARS SET THE LONG TIMEOUT BIT(#14). STA CONWD RESTORE CONWD [140000B]. * NOMOV LDA D9 SET REQUEST LENGTH JMP SETLN WE ARE ALL SET SPC 3 ICOD3 LDA A,I GET THE CONTROL WORD RC=03 STA IRBUF+5 SET IT IN THE REQUEST CLA LDA PRAMS+3,I GET OPTIONAL PARAMETER STA IRBUF+6 SET IT IN THE REQUEST SRQLN LDA D7 GO TO ESTABLISH A JMP SETLN REQUEST LENGTH = 7 WORDS. SPC 3 ICOD6 LDB PRAMS+9 IF MORE THAN EIGHT PARAMETERS RC=06 SZB,RSS WERE PASSED, OR IF THE CPB PRAMS+3 'INUM' PARAMETER WAS NOT PASSED, JMP ERIO1 THEN THE CALL IS INCORRECT! * SPC 3 PGMST LDA PRAMS+2 PROGRAM STATUS SHARES SCHED CODE. RC=99 * ICD10 JSB NAMP GO TO PROCESS THE PROGRAM NAME. RC=10 * LDX DM7 BUILD LOOP COUNTER LOOP3 LAX PRAMS+10 GET PARAMETER ADDRESS SZA,RSS IS IT THERE? JMP DON10 NO-EXIT LDA A,I YES, GET ITS VALUE SAX IRBUF+15 STORE INTO REQUEST ISY ADVANCE THE PARAMETER COUNT. ISX PROCESSING STRING-LENGTH PARAMETER? JMP LOOP3 NO, CONTINUE LDB PRAMS+9 YES. GET THE STRING-LENGTH ADDRESS. JSB LENCK GO TO CHECK THE STRING-BUFFER LENGTH. STA WRLEN CONFIGURE WRITE LENGTH FOR . LDB PRAMS+8 GET THE STRING BUFFER ADDRESS. STB BUFA CONFIGURE 'D65MS' TO PASS DATA. * DON10 CYA GET THE PARAMETER COUNT JMP SETLN GO TO ESTABLISH REQUEST LENGTH. * SPC 2 ICD11 LDA D13 GO TO ESTA:BLISH A RC=11 JMP SETLN REQUEST/REPLY LENGTH =13 WORDS. * SKP SPC 2 ICD12 JSB NAMP GO TO PROCESS THE PROGRAM NAME. RC=12 * LDX D3 SET A LOOP COUNTER CLA LDA PRAMS+5,I GET 6TH PARAMETER SSA JMP LOOP1 ADX D3 ABSOLUTE TIME, MORE PARAMETERS * LOOP1 LAX PRAMS+2 GET A PARAMETER ADDRESS SZA,RSS JMP ERSC1 ABSENT, ERROR LDA A,I GET THE PARAMETER SAX IRBUF+7 SET IT IN THE REQUEST IRBF7 EQU *-1 [ DEF IRBUF+7 ] ISY ADVANCE THE PARAMETER COUNT DSX ALL DONE ? JMP LOOP1 NO, CONTINUE * CYA GET THE PARAMETER COUNT. JMP SETLN READY TO SEND * SPC 2 PARST EQU * PARTITION STATUS RC=25 * ICD13 LDA A,I GET CONTROL WORD/PARTITION NUMBER. RC=13 STA IRBUF+5 SET IT IN THE REQUEST * LDA PRAMS+3 DO THEY HAVE ANY ROOM ? SZA,RSS JMP ERIO1 NO, GET OUT! * LDB ICODE GET THE REQUEST CODE. CPB D25 IF THIS IS A PARTITION-STATUS REQUEST, CLB,RSS THEN SKIP TO CHECK FOR ENOUGH PRAMS; JMP IC13X ELSE, OTHER PARAMETERS ARE OPTIONAL. * CPB PRAMS+5 USER PREPARED TO ACCEPT 3 PARAMETERS? JMP ERIO1 NO. THE CALL IS INCORRECT! * IC13X LDA D10 SET THE LENGTH OF THE REQUEST/REPLY. JMP SETLN * SPC 2 SCHW LDB D3 SET THE STREAM-TYPE RC=9/23/24 STB IRBUF FOR THE SCHEDULE-WITH-WAIT MONITOR. RBR,RBR MODIFY THE CONTROL WORD FOR STB CONWD WRITE & LONG TIMEOUT (140000B). JMP ICD10 PROCESS ALL PARAMETERS. SKP * COMMON PRE-PROCESSING SUBROUTINES * LENCK NOP BUFFER LENGTH PROCESSING. LDB B,I GET THE BUFFER LENGTH. SSB,RSS WORDS OR -BYTES? JMP WORDS POSITIVE WORDS. BRS NEGATIVE .ABYTES--CONVERT TO -WORDS. CMB,INB MAKE THAT +WORDS WORDS LDA B SAVE +WORDS IN FOR RETURN. ADB DM513 CHECK FOR VALIDITY OF LENGTH SSB,RSS JMP ERIO4 >512, TOO MUCH * JMP LENCK,I RETURN. * SPC 1 NAMP NOP CHECK AND MOVE PROGRAM NAME. LDB A,I IF THE FIRST TWO CHARACTERS SZB,RSS ARE NULLS, THEN JMP ERSC5 THE CALL IS INCORRECT! * LDB NAMA GET POINTER TO NAME, IN REQUEST MVW D3 MOVE THE NAME TO THE REQUEST LDY D8 INITIALIZE THE PARAMETER COUNTER. JMP NAMP,I RETURN * SKP * SEND THE REMOTE EXEC REQUEST VIA "D65MS" AND AWAIT REPLY * SETLN STA RQLEN ESTABLISH REQUEST LENGTH FOR . * JSB D65MS CALL MASTER REQUEST INTERFACE ROUTINE DEF *+8 DEF CONWD CONTROL WORD DEF IRBUF REQUEST BUFFER DEF RQLEN REQUEST LENGTH BUFA DEF * CONFIGURED DATA BUFFER ADDRESS--IF ANY. DEF WRLEN WRITE DATA LENGTH -- IF ANY DEF RDLEN READ DATA LENGTH -- IF ANY DEF D15 MAXIMUM REPLY LENGTH EXPECTED =15 WORDS. JMP ERROR * ERROR DETECTED BY "D65MS"--REPORT IT * LDB ICODE IF THE REQUEST CODE WAS FOR A: CPB D11 - TIME REQUEST, THEN THE JMP IPD11 TIME VALUES MUST BE POST-PROCESSED; CPB D13 - DEVICE-STATUS REQUEST, THEN THE DEVICE JMP IPD13 PARAMETERS NEED POST-PROCESSING; CPB D25 - PARTITION-STATUS REQUEST, THEN THE JMP IPD13 PARTITION PARAMETERS NEED PROCESSING; CPB D99 - PROGRAM-STATUS REQUEST, THEN CHECK THE JMP IPD13 STATUS PARAMETER FOR POST-PROCESSING. * * DEXEC POST-PROCESSING: MOVE DATA TO REPLY BUFFER & CHECK FOR ERRORS. * IPOST LDA IRBUF+6 SSA ANY ERROR ? JMP ERROR YES LDA PRAMS+1,I GET ICODE SSA WAS THE NO ABORT BIT SET ? ISZ EXITWW YES PUSH RETURN ADDRESS * LDB ICODE GET THE REQUEST CODE. CPB D9 SCHEDULE WITH WAIT? CCA,RSS YES. SET VALUE FOR PARAMETER CHECK. CPB D23 QUEUE SCHEDULE WITH WAIT? CCA,RSS YES. SET VALUE FOR PARAMETER CHECK. JMP ATEND NO. PARAMETER PROCESSING NOT REQUIRED. * LDB SAVEB GET CALLER'S ORIGINAL CONTENTS. CPA IRBUF+5 IF RETURNED PARAMETERS, THEN LDB IRBF7 POINT CALLER'S TO FIRST PARAMETER. JMP ATEND+1 IGNORE FROM REPLY BUFFER. * ATEND LDB IRBUF+5 GET FROM THE REPLY BUFFER. LDA IRBUF+4 GET FROM THE REPLY BUFFER. LDX SAVEX RESTORE THE ORIGINAL CONTENTS LDY SAVEY OF BOTH THE & REGISTERS. JMP EXIT,I RETURN TO CALLER SKP IPD11 LDA IRBF7 GET ADDRESS OF THE TIME VALUES. LDB PRAMS+2 GET USER'S BUFFER ADDRESS MVW D5 PASS 5 WORDS TO THE USER LDB IRBUF+12 GET THE CURRENT 'YEAR'. STB PRAMS+3,I PASS THE YEAR (OPTIONALLY) JMP IPOST FINISH THE JOB SPC 1 IPD13 LDA IRBUF+7 GET THE FIRST RETURN-PARAMETER. STA PRAMS+3,I PASS: EQT5/STARTING PAGE/PROG. STATUS CPB D99 IF THE REQUEST WAS FOR PROGRAM STATUS, JMP IPOST THE POST-PROCESSING IS COMPLETE; * LDB IRBUF+8 ELSE, GET THE NEXT RETURN-PARAMETER. STB PRAMS+4,I RC=13: OPTIONAL EQT4; RC=25: NO. PAGES. LDB IRBUF+9 RC=13: OPTIONAL LU STATUS & SUB. CHAN; STB PRAMS+5,I ELSE, IF RC=25: PARTITION STATUS. JMP IPOST GO FINISH SPC 2 * DEXEC ERROR ROUTINES. * ERIO1 LDB "01" INCORRECT,MISSING,OR TOO MANY PARAMETERS JMP GETIO ERIO4 LDB "04" IMPROPER BUFFER SPECIFICATION. GETIO LDA "IO" JMP ERRS ERROR: "IO0X". ERSC1 LDB "01" MISSING SCHEDULEING PARAMETER. JMP GETSC ERSC5 LDB "05" INCORRECT PROGRAM NAME. GETSC LDA "SC" JMP ERRS ERROR: "XBSC0X" SPC 2 ERR DLD DS06 IMPROPER REQUEST: "DS06". ERRS DST IRBUF+4 ERROR CODE INTO REQ.BUFR ERRA EQU *-1 ERROR MESAGE ADDRESS [DEF IRBUF+4]. SPC 2 ERROR LDA PRAMS+1,I GET ICODE SSA NO ABORT BIT SET ? JMP ATEND YES, IT IS * CCA ADA DEXEC WE HAVE THE ADDRESS OF THE JSB LDB ERRA GET ADDRESS OF THE ERROR MESSAGE JSB D65AB WE DO NOT COME BACK FROM THIS CALL * * "01" ASC 1,01 "04" ASC 1,04 "05" ASC 1,05 "IO" ASC 1,IO "SC" ASC 1,SC DS06 ASC 1,DS06 * HED DEXEC: LOCAL PROCESSING * (C) HEWLETT-PACKARD CO. 1977 LOCAL CPB D99 IF THIS IS A PROGRAM STATUS REQUEST, JMP LOCST THEN PROCESS IT INDEPENDENTLY. CPB D1 IF THIS IS A READ REQUEST, JMP *+2 THEN SKIP FOR FURTHER CHECKING; JMP LCHEK ELSE, CONTINUE LOCAL PROCESSING. LDA PRAMS+2,I GET THE CONWORD. ALF IF THE INTERACTIVE BIT(#11) SSA IS SET, THEN THE REQUEST MUST BE JMP SPLOC PASSED TO FOR PROCESSING. * LCHEK LDB GETPR+1 GET ADDRESS OF DEF'S FOR CALL. LDX DM10 UP TO 9 PARAMETERS; MORE = ERROR; LOCL INB ADVANCE THE RETURN POINTER. LAX PRAMS+11 GET A PARAMETER ADDRESS SZA,RSS PRESENT ? JMP LOC1 NO ISX MORE THAN 10 PARAMETERS PASSED? JMP LOCL NO. CONTINUE CHECKING. JMP ERIO1 YES. TOO MANY--BUFFER MAY BE DESTROYED! * LOC1 STB PRAMS SET THE "DEF RETURN" DLD CCERS GET ERROR-DETECTION INSTRUCTIONS. DST PRAMS,I INSERT AT RETURN LOCATIONS. * LDB ICODE GET REQUEST CODE. LDA EXECX GET "EXEC" ADDRESS ADB DM3 SSB,RSS IS IT READ OR WRITE? JMP LOCLN NO, DO "EXEC" CALL LDB PRAMS+5 SZB,RSS OPT.PARAMETERS SPECIFIED? LDA REIOX NO, OK TO USE REIO! LOCLN STA RQLEN SAVE ADDR FOR MP CHECK LDX B@ REGISTER, DLD SAVEA AND THE REGISTERS, JMP CALEX AND GO EXECUTE THE CALL. * LOCST JSB PGMAD GET THE CURRENT STATUS DEF *+2 FOR THE USER-SPECIFIED DEF PRAMS+2,I PROGRAM NAME. SZA DOES THE PROGRAM EXIST? JMP GETST YES. GO TO PROCESS THE STATUS. CCA NO. SET =-1 FOR ERROR INDICATION. STA PRAMS+3,I RETURN ERROR TO USER'S PARAM.--IF ANY. JMP ERXIT TAKE THE ERROR EXIT. * GETST LDA B GET THE PROGRAM'S STATUS WORD. AND D15 ISOLATE THE STATUS BITS(#3-0), AND RAL,ERA SET SHORT I.D. BIT(#15)--IF TRUE. STA PRAMS+3,I RETURN IT TO CALLER'S PARAMETER--IF ANY. LDB PRAMS+1,I GET THE CALLER'S REQUEST CODE. CLE,SSB IF THE NO-ABORT BIT(#15) IS SET, ISZ EXIT THEN SET RETURN POINTER TO , ERXIT CLB CLEAR --IT CONTAINS NO DATA, LDX SAVEX RESTORE THE REGISTER, & RETURN JMP EXIT,I STATUS IN (OR -1:ERROR); =0. HED DEXEC: CONSTANTS AND STORAGE * (C) HEWLETT-PACKARD CO. 1977 * A EQU 0 B EQU 1 * SAVEA NOP SAVEB NOP SAVEX NOP SAVEY NOP * * * * MAINTAIN ORDER OF NEXT TWO INSTRUCTIONS * * * * CCERS CCE,RSS CLE * IRBUF BSS 15 DM513 DEC -513 DM10 DEC -10 DM7 DEC -7 DM3 DEC -3 D1 DEC 1 D3 DEC 3 D5 DEC 5 D7 DEC 7 D8 DEC 8 D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D13 DEC 13 D15 DEC 15 D23 DEC 23 D25 DEC 25 D99 DEC 99 RQLEN NOP ICODE NOP WRLEN NOP RDLEN NOP NAMA DEF IRBUF+5 EXECX DEF EXEC REIOX DEF REIO CONWD NOP * END QB x 91740-18039 1740 S C0122 DS/1000 MODULE: RFAM              H0101 e6ASMB,L,R,C HED RFMST: 91740-16039 REV 1740 (C) HEWLETT-PACKARD CO. 1977 NAM RFMST,7 91740-16039 REV 1740 770524 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 4 **************************************************************** * * RFMST * * SOURCE PART # 91740-18039 * * REL PART # 91740-16039 * * WRITTEN BY CHUCK WHELAN * * DATE WRITTEN DEC 1976 * * MODIFIED BY * * DATE MODIFIED * *************************************************************** SPC 3 ENT DAPOS,DCLOS,DCONT,DCRET,DLOCF ENT DNAME,DOPEN,DPOSN,DPURG,DREAD ENT DSTAT,DWIND,DWRIT EXT .ENTR,D65MS * SUP SKP * * THIS PROGRAM SUPPORTS ALL REMOTE FILE ACCESS (RFA) MASTER CALLS * IN THE DS/1000 SYSTEM. BELOW ARE THE VALID CALLING SEQUENCES, WITH * OPTIONAL PARAMETERS INDICATED BY PARENTHESES: []. OPTIONAL PARAMETER * "ERLOC" WHEN SPECIFIED WILL CONTAIN THE NODAL ADDRESS AT WHICH AN * ERROR OCCURRED (IF ANY). THE PARAMETER "ICR" IN THE "DCRET","DNAME", * "DOPEN", AND "DPURG" CALLS IS A 2 WORD ARRAY WITH THE FIRST WORD EQUAL * TO THE REQUIRED CARTRIDGE LABEL AND THE SECOND WORD HAVING THE FILE'S * NODAL ADDRESS (DEFAULT IS 0,-1). ALL OTHER PARAMETERS HAVE THE * CONVENTIONAL FMP MEANINGS. * * * 1. CALL DAPOS(IDCB,IERR,IREC[,IRB,IOFF,ERLOC]) * SETS ABSOLUTE RECORD POSITION OF FILE TO VALUE OF "IREC" * * 2. CALL DCLOS(IDCB,IERR[,ITRUN,ERLOC]) * CLOSES DCB AND OPTIONALLY TRUNCATES BASED ON "ITRUN". * * 3. CALL DCONT(IDCB,IERR,ICON1[,ICON2,ERLOC]) * PERFORMS RBTE I/O CONTROL REQUEST FOR TYPE 0 (NON-DISC) FILES. * * 4. CALL DCRET(IDCB,IERR,NAME,ISIZE,ITYPE[,ISECU,ICR,ERLOC]) * CREATES THE NAMED FILE WITH THE SPEDIFIED NUMBER OF BLOCKS. * THE FILE IS LEFT OPEN EXCLUSIVELY TO THE CALLER. * * 5. CALL DLOCF(IDCB,IERR,IREC[,IRB,IOFF,JSEC,JLU,JTY,JREC,ERLOC]) * FORMATS AND RETURNS LOCATION AND STATUS INFORMATION FOR * THE DCB. * * 6. CALL DNAME(IDCB,IERR,NAME,NNAME[,ISECU,ICR,ERLOC]) * RENAMES THE SPECIFIED FILE * * 7. CALL DOPEN(IDCB,IERR,NAME[,IOPTN,ISECU,ICR,ERLOC]) * OPENS THE NAMED FILE * * 8. CALL DPOSN(IDCB,IERR,NUR[,IR,ERLOC]) * REPOSITIONS FILE * * 9. CALL DPURG(IDCB,IERR,NAME[,ISECU,ICR,ERLOC]) * CLOSES THE DCB AND PURGES THE FILE AND ALL ITS EXTENTS * * 10. CALL DREAD(IDCB,IERR,IBUF,IL[,LEN,NUM,ERLOC]) * READS THE NEXT RECORD INTO THE USER'S BUFFER * * 11. CALL DSTAT(ISTAT,IERR,IDEST[,ERLOC]) * RETURNS INFORMATION ON ALL MOUNTED CARTRIDGE LABELS * AT THE NODE SPECIFIED BY "IDEST" * * 12. CALL DWIND(IDCB,IERR[,ERLOC]) * REWINDS TYPE 0 FILES, OR SETS DISC FILE POSITION TO THE * FIRST RECORD * * 13. CALL DWRIT(IDCB,IERR,IBUF,IL[,NUM,ERLOC]) * WRITES THE SPECIFIED BUFFER TO THE FILE * SKP SPC 3 * * DAPOS PERFORMS A REMOTE FMGR "APOSN" CALL * DAPOS NOP JSB $PREP DO REQUEST SET-UP CONWD OCT 100000 FUNCTION CODE = 0 * JSB $VER3 GET & VERIFY 3RD PARAMETER * STB REQST+8 SAVE IREC IN THE REQST * LDB PRAMS+4,I GET OPTIONAL IOFF LDA PRAMS+3,I GET THE OPTIONAL IRB * DAPUR DST REQST+9 STORE INTO REQUEST BUFFER * JSB $MS65 DO D65MS CALL DEC 11 REQUEST LENGTH * LDA PRAMS+5 JMP $POST DO REQUEST WRAP-UP SKP * * DCLOS PERFORMS A REMOTE FMGR "CLOSE" CALL * DCLOS NOP JSB $PREP PERF+NORM PRE-PROCESSING OCT 100001 FUNCTION CODE = 1 * LDA PRAMS+2,I GET THE OPTIONAL ITRUN STA REQST+8 * JSB $MS65 DO D65MS CALL DEC 9 REQUEST LENGTH * JMP DSX WRAP-UP AND EXIT SKP * * DCONT PERFORMS A REMOTE FMGR "FCONT" CALL * DCONT NOP JSB $PREP DO REQUEST PRE-PROCESSING OCT 100002 FUNCTION CODE= 2 * * BELOW CODE IS COMMON TO DCONT AND DPOSN DCOPS JSB $VER3 GET & VERIFY 3RD PARAMETER ADDR STB REQST+8 SAVE ICON1 (OR NUR) IN REQUEST * LDB PRAMS+3,I GET OPTIONAL ICON2/ IR STB REQST+9 * JSB $MS65 DO D65MS CALL DEC 10 REQUEST LENGTH * LDA PRAMS+4 JMP $POST WRAP-UP AND EXIT SKP * * DCRET PERFORMS A REMOTE FMGR "CREAT" CALL * DCRET NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING K3 DEC 3 FUNCTION CODE = 3 * STB REQST+9 SET THE ID SEGMENT ADDRESS STB PRAMS,I IN THE REQST AND IN THE DCB * CPA PRAMS+4 TYPE ADDRESS PROVIDED? JMP PRERR NO, PARAMETER ERROR LDB PRAMS+4,I GET TYPE STB REQST+13 SAVE IN REQST * LDA PRAMS+5,I GET OPTIONAL ISECU STA REQST+10 * DLD PRAMS+3,I GET ISIZE (2 WORD PARAMETER) NNAMA EQU *+1 DST REQST+11 SAVE IN REQUEST * LDA PRAMS+6 GET ADDRESS OF ICR JSB $ICR SET-UP CR/NODE & MOVE FILE NAME * LDA PRAMS FINISH ADA K3 BUILDING STB 0,I THE DCB (STORE NODE) * JSB $MS65 DO D65MS CALL K14 DEC 14 REQUEST LENGTH = 14 * LDA PRAMS+7 JMP DOPNX WRAP-UP AND EXIT SKP * * DLOCF PERFORMS A REMOTE FMGR "LOCF" CALL * DLOCF NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100004 FUNCTION CODE = 4 * JSB $VER3 GET & VERIFY 3RD PARAMETER ADDRESS * JSB $MS65 DO D65MS CALL DEC 8 REQUEST LENGTH * LDX N7 SET A COUNTER LOOP1 LBX REQST+14 GET A RETURNED VALUE LAX PRAMS+9 GET RETURN ADDRESS STB 0,I PASS VALUE BACK ISX ALL DONE ? JMP LOOP1 NO, CONTINUE. * LDA PRAMS+9 JMP $POST WRAP-UP AND EXIT SKP * * DNAME PERFORMS A REMOTE FMGR "NAMF" CALL * DNAME NOP JSB $PREP PERFORM PRE-PROCESSING K5 DEC 5 FUNCTION CODE = 5 * JMP DNOPN DO LOGIC COMMON TO DOPEN * DNNAM LDA PRAMS+3 GET ADDRESS OF NNAME SZA,RSS JMP PRERR NOT PROVIDED LDB NNAMA MVW K3 MOVE NEW NAME TO REQST * JSB $MS65 DO D65MS CALL DEC 14 REQUEST LENGTH * JMP DRX WRAP-UP AND EXIT SKP * * DOPEN PERFORMS A REMOTE FMGR "OPEN" CALL * DOPEN NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING K6 DEC 6 FUNCTION CODE = 6 * STB PRAMS,I SET ID SEG ADDR IN DCB * DNOPN STB REQST+9 SET ID SEG ADDR IN REQUEST * LDB PRAMS+4,I GET OPTIONAL ISECU STB REQST+10 SAVE IN REQST * LDB PRAMS+3,I GET OPTIONAL ITRUN STB REQST+11 * LDA PRAMS+5 GET ADDRESS OF ICR JSB $ICR SET-UP CR/NODE & MOVE FILE NAME * LDA REQST+4 CPA K5 DOING "DNAME"? JMP DNNAM YES * LDA PRAMS FINISH ADA K3 BUILDING STB 0,I THE DCB. * JSB $MS65 DO D65MS CALL DEC 12 REQUEST LENGTH * LDA PRAMS+6 * DOPNX LDX PRAMS X= ADDR OF USERS 4 WORD DCB LDB REQST+7 GET RFAMD ENTRY # SBX 1 STORE IN 2ND WORD OF DCB JMP $POST WRAP-UP AND EXIT SKP * * DPOSN PERFORMS A REMOTE FMGR "POSNT" CALL * DPOSN NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100007 FUNCTION CODE = 7 * JMP DCOPS REST IS IN COMMON WITH DCONT SKP * * DPURG PERFORMS A REMOTE FMGR "PURGE" CALL * DPURG NOP ݵ JSB $PREP PERFORM REQUEST PRE-PROCESSING DEC 8 FUNCTION CODE = 8 * LDA PRAMS+4 GET ADDRESS OF ICR JSB $ICR SET-UP CR/NODE & MOVE FILE NAME * CLA LDB PRAMS+3,I GET OPTIONAL ISECU LDA XEQT GET ID SEGMENT ADDRESS * JMP DAPUR REST IS IN COMMON WITH DAPOS SKP * * DREAD PERFORMS A REMOTE FMGR "READF" CALL * DREAD NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100011 FUNCTION CODE = 9 * LDB PRAMS+5,I GET THE OPTIONAL NUM * LDA PRAMS+3,I GET IL STA REQST+8 SAVE IT IN THE REQST STA RDLEN AND FOR THE "MS" CALL * JSB XDATA DO COMMON DREAD/DWRIT LOGIC * LDA PRAMS+4 LDB REQST+7 PASS OPTIONAL LEN STB 0,I IF REQUIRED BY THE USER * DRX LDA PRAMS+6 JMP $POST WRAP-UP AND EXIT SKP * * DSTAT PERFORMS A REMOTE FMGR "FSTAT" CALL * DSTAT NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING K10 DEC 10 FUNCTION CODE = 10 * JSB $VER3 GET & VERIFY THE 3RD PARAMETER ADDRESS STB REQST+3 STORE "IDEST" IN REQUEST LDA K125 STA RDLEN SET DATA READ LENGTH = 125 * JSB $MS65 DO D65MS CALL DEC 7 * DSX LDA PRAMS+3 JMP $POST WRAP-UP AND EXIT SKP * * DWIND PERFORMS A REMOTE FMGR "RWNDF" CALL * DWIND NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100013 FUNCTION CODE = 11 * JSB $MS65 DO D65MS CALL DEC 8 * LDA PRAMS+2 JMP $POST WRAP-UP AND EXIT SKP * * DWRIT PERFORMS A REMOTE FMGR "WRITF" CALL * DWRIT NOP JSB $PREP PERFORM REQUEST PRE-PROCESSING OCT 100014 FUNCTION CODE = 12 * LDB PRAMS+4,I GET THE OPTIONAL NUM LDA PRAMS+3,I GET IL STA REQST+8 STORE IN REQUEST INA,SZA SKIP IF WRITE EOF LDA REQST+8 STA WRLEN SAVE WRITE LENGTH FOR MS CAL2AL * JSB XDATA PERFORM COMMON DREAD/DWRIT LOGIC * LDA PRAMS+5 SKP * * COMMON REQUEST POST-PROCESSING LOGIC * $POST LDB REQST+6 GET THE ERROR LOCATION STB 0,I RETURN IT (OPTIONALLY) LDA REQST+5 ERROR CODE * $PST2 STA PRAMS+1,I RETURN ERROR CODE JMP CALL,I RETURN FROM MASTER RFA CALL SPC 4 * * THIS SUBROUTINE IS COMMON TO DREAD AND DWRIT * XDATA NOP STB REQST+9 SAVE THE OPTIONAL NUM SSA LENGTH NEGATIVE ? JMP PRERR YES, ILLEGAL ADA N513 IL > 512 ? SSA,RSS JMP PRERR YES, TOO MUCH * CLA CPA PRAMS+3 WAS "IL" SPECIFIED? JMP PRERR NO, PARAMETER ERROR * LDA PRAMS+2 GET BUFFER ADDRESS STA PRAMS SAVE FOR MS CALL SUBROUTINE * JSB $MS65 CALL D65MS DEC 10 * JMP XDATA,I RETURN SKP * * COMMON REQUEST PRE-PROCESSING ROUTINE FOR ALL MASTER RFA CALLS * $PREP NOP * CLB CLEAN OUT PARAMETER AREA LDX K10 LOOP SBX PRAMS-1 DSX JMP LOOP * LDB $PREP ADB N2 LDB 1,I GET RETURN POINT STB CALL SAVE JMP CALL+1 * PRAMS REP 10 NOP CALL NOP JSB .ENTR GET ADDRESSES OF PARAMETERS DEF PRAMS LDA K6 STA REQST SET RFA STREAM LDA PRAMS+1 SZA,RSS AT LEAST 2 PARAMETERS SPECIFIED? JMP CALL,I NO, RETURN NOW! LDA $PREP,I GET FUNCTION CODE/ MOVE DCB FLAG ISZ $PREP RAL,CLE,ERA CLEAR SIGN BIT STA REQST+4 SET FUNCTION CODE IN REQUEST SEZ,RSS DCB MOVE REQUIRED? JMP $PREX NO * * MOVE DCB TO THE REQUEST BUFFER * LDA PRAMS GET ADDR OF DCB LDB NAMA ADDR OF NAME FIELD IN REQUEST MVW K3 MOVE IT LDA 0,I GET DESTINATION FROM 4TH DCB WORD STA REQST+3 SET INTO REQUEST * RETURN WITH B= XEQT, A= 0 $PREqX LDB XEQT CLA STA WRLEN INITIALIZE DATA STA RDLEN BUFFER LENGTHS FOR MS CALL JMP $PREP,I RETURN SKP 4 * * SUBROUTINE TO PERFORM D65MS CALL * $MS65 NOP JSB D65MS DEF *+8 DEF CONWD DEF REQST REQUEST BUFFER DEF $MS65,I DEF PRAMS,I DATA ADDRESS (IF ANY) DEF WRLEN DEF RDLEN DEF K14 MAX ALLOWED REPLY LENGTH * JMP COMER ERROR RETURN * $MSEX ISZ $MS65 JMP $MS65,I RETURN * * SUBROUTINE TO SET-UP CARTRIDGE REFERENCE AND NODAL ADDRESS * TO EITHER THE PASSED VALUES OR DEFAULTS * $ICR NOP STA $MS65 JSB $VER3 GET & VERIFY THE 3RD PARAMETER ADDRESS LDA PRAMS+2 GET ADDRESS OF NAME FIELD LDB NAMA GET ADDRESS OF NAME FIELD IN REQUEST MVW K3 MOVE IT LDA $MS65 RELOAD ICR ADDRESS CCB LOCAL NODE DESIGNATOR (DEFAULT) SZA,RSS **** TEMPORARY INSTRUCTIONS UNTIL **** JMP *+3 **** THE 21MX-XE IS FIXED! **** DLD 0,I GET ICR & NODE STA REQST+8 SAVE THE CARTRIDGE # STB REQST+3 SAVE THE DESTINATION NODE JMP $ICR,I RETURN SKP COMER LDA REQST+5 GET THE NUMERICAL PART OF THE ERROR AND B17 CODE AND DECODE IT CMA,INA NEGATE IT ADA N50 LDB REQST+6 GET ERROR LOCATION ELB,CLE,ERB STRIP THE SIGN BIT NAMA EQU *+1 DST REQST+5 RESTORE THE ERROR LOCATION JMP $MSEX RETURN SPC 3 * * SUBROUTINE TO GET & VERIFY THE 3RD PARAMETER ADDRESS * $VER3 NOP CLA ALWAYS RETURN A=0 CPA PRAMS+2 3RD PARAMETER ADDRESS JMP PRERR NOT SPECIFIED, GIVE ERROR LDB PRAMS+2,I GET 3RD PARAMETER JMP $VER3,I & RETURN SPC 2 * PRERR LDA N10 INSUFFICIENT PAAMETERS, GIVE -10 ERROR JMP $PST2 SKP * * CONSTANTS & VARIABLES * XEQT EQU 1717B * WR0.*LEN NOP RDLEN NOP B17 OCT 17 K125 DEC 125 N2 DEC -2 N7 DEC -7 N10 DEC -10 N50 DEC -50 N513 DEC -513 * REQST REP 14 NOP SPC 3 END 0 y  91740-18040 1740 S C0122 DS/1000 MODULE: D65MS              H0101 LPASMB,R,L,C HED MASTER REQUEST INTERFACE * (C) HEWLETT-PACKARD CO. 1977* NAM D65MS,7 91740-16040 REV 1740 771018 * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** * * ENT D65MS * * EXT .ENTR,#RSAX,#QRN,#WAIT,#NODE EXT EXEC,D65AB,D65GT,RNRQ,#TBRN EXT #GRPM,#BREJ,#NCNT,$OPSY * * NAME: D65MS * SOURCE: 91740-18040 * RELOC: 91740-16040 * PGMR: CHUCK WHELAN NOV 1976 * * * D65MS CALLING SEQUENCE: * * JSB D65MS * DEF *+8 * DEF CONWD CONTROL WORD/ERROR-RETURN FLAG (BIT#15). * DEF RQBUF REQUEST BUFFER ADDRESS. * DEF RQLEN REQUEST LENGTH. * DEF DABUF DATA BUFFER ADDRESS * DEF DLWRT OUTGOING BUFFER LENGTH (OR ZERO) * DEF DLRED INCOMING BUFFER LENGTH (OR ZERO) * DEF RPLEN MAX REPLY LENGTH * A & B HAVE ASCII ERROR CODE (ALSO IN REPLY 5 & 6) * A= RCVD REQ LEN, B= RCVD DATA LEN (OR 0) * * CONWD DESCRIPTION: * * BIT#15 - ERROR-RETURN FLAG * BIT#14 - NO TIMEOUT * SKP * * * D65MS PERFORMS THE FOLLOWING FUNCTIONS: * 1. RETURNS DS00 TO CALLER IF SYSTEM IS QUIESCENT. * 2. ALLOCATES A CLASS NUMBER FOR THE REQUEST. * 3. DOES A LOCK/WAIT ON THE "RES" TABLE ACCESS RN. * 4. CREATES A MASTER TCB * 5. CONVERTS DESTINATION NODE TO LU * 6. SENDS THE REQUEST(/DATA) * 6. CALLS "D65GT" TO AWAIT THE REPLY(/DATA) * 8. IF REPLY WAS A "QUIESCENT-REJECT", PUTS SELF IN TIME-LIST. * 9. IF ERROR FLAG IN 7TH REPLY WORD = 1, DOES ERROR RETURN. * 10. CLEARS THE MASTER CLASS # AND TCB. *  11. IF REPLY OK, GIVES RETURN WITH RCVD LENGTHS IN A & B. * * D65MS ERROR PROCESSING: * * 1. IF SIGN BIT(#15) OF CONWD PARAMETER IS SET, ASCII ERROR CODES * ARE SUPPLIED TO THE CALLER IN THE & REGISTERS, UPON * RETURN TO THE POINT IN THE CALLING SEQUENCE. * 2. IF THE SIGN BIT IS NOT SET, THEN THE ROUTINE 'D65AB' IS * CALLED TO ABORT THE CALLER'S PROGRAM, AFTER PRINTING AN * ERROR MESSAGE ON THE SYSTEM CONSOLE. THE MESSAGE PRINTED * WILL CONTAIN EITHER THE USER-SUPPLIED ERROR ADDRESS (ERRAD), * OR THE ADDRESS OF THE USER'S CALL TO 'D65MS'. * * D65MS ERROR MESSAGES: * * "DS00" - DS1 IS SHUT-DOWN! * "DS02" - DVA65 DETECTED ERROR (PARITY, ETC.) * "DS03" - ILLEGAL REPLY - SHORT PARMB. * "DS04" - LOGICAL UNIT INVALID OR NO CLCT ENTRY. * "DS05" - MASTER REQUEST TIMEOUT (COURTESY OF 'UPLIN'). * "DS06" - ILLEGAL REQUEST. * "DS07" - 'RES' TABLE-ACCESS ERROR. * "DS08" - REMOTE BUSY FAILURE - NO SAM, ETC * "IOXX" - \ * - RTE SYSTEM DETECTED ERRORS. * "RNXX" - / * SKP CONWD NOP CONTROL WORD ADDRESS. RQBUF NOP REQUEST BUFFER ADDRESS. RQLEN NOP REQUEST BUFFER LENGTH. DABUF NOP DATA BUFFER ADDRESS OR DUMMY PARAMETER. DLWRT NOP WRITE DATA LENGTH (OR ZERO) DLRED NOP READ DATA LENGTH (OR ZERO) RPLEN NOP MAX EXPECTED REPLY LENGTH SPC 2 D65MS NOP ENTRY/EXIT JSB .ENTR OBTAIN DIRECT ADDRESSES DEF CONWD FOR PARAMETERS & RETURN POINT. LDA RPLEN SZA,RSS ALL PARAMETERS PASSED? JMP ILRQ NO, GIVE ILLEGAL REQUEST LDB RQBUF ADB K4 ADDR OF REPLIES ERROR FIELD STB ERRAD SAVE FOR LATER RETRY CLA STA CLASN CLEAR CLASS # FOR ERROR CK * * CHECK FOR LOCAL SYSTEM SHUT-DOWN OR QUIESCENT STATUS. * CPA #GRPM IS THE DS/1000 SYSTEM SHUT-DOWN? JMP DOWN YES. GO TELL CALLER >THE SAD NEWS. * * REQUESTS WILL BE FORCED TO WAIT HERE, IF LOCAL SYSTEM HAS BEEN QUIESCED. * JSB RNRQ GO TO RTE TO CHECK FOR SYSTEM QUIESCENCE. DEF *+4 DEF LCGW LOCK/CLEAR/WAIT/NO-ABORT DEF #QRN CHECK SYSTEM-QUIESCENCE RESOURCE NUMBER. DEF TEMP DUMMY PARAMETER. JMP PASER * RTE ERROR - PASS CODE TO CALLER * * LDA #QRN IF QUIESCENT STATE HAS BEEN CHANGED SZA,RSS TO SYSTEM SHUT-DOWN STATE, JMP DOWN THEN TELL THE CALLER THE SAD NEWS. * * REQUEST A CLASS NUMBER ALLOCATION FROM RTE. * LDA BIT13 INITIALIZE CLASS NUMBER STA CLASN FOR NON-RELEASE USAGE. JSB EXEC GO TO RTE FOR A CLASS NO.--WAIT FOR IT. DEF *+5 DEF CLS19 CLASS CONTROL(QUICK ALLOCATE)-NO ABORT. DEF ZERO LU ='BIT BUCKET' FOR ALLOCATION. DEF ZERO DUMMY PARAMETER FOR ALLOCATION. DEF CLASN CLASS NUMBER STORAGE ADDRESS. JMP PASER * RTE ERROR: MESSAGE IN & * * JSB EXEC GO TO RTE TO COMPLETE DEF *+5 PREVIOUS ALLOCATION REQUEST. DEF CLS21 CLASS GET--NO ABORT. DEF CLASN CLASS NUMBER STORAGE ADDRESS. DEF ZERO DUMMY PARAMETER. DEF ZERO DUMMY PARAMETER. JMP PASER * RTE ERROR: MESSAGE IN & * * * WAIT FOR AVAILABILITY OF LIST-ENTRY SPACE IN 'RES'; ADD NEW ENTRY. * JSB RNRQ GO TO RTE TO CHECK THE TABLE-ACCESS RN. DEF *+4 DEF LGW LOCK GLOBAL RN/WAIT FOR IT/NO ABORT. DEF #TBRN TABLE-ACCESS SPACE-AVAILABLE RN. DEF TEMP DUMMY PARAMETER. JMP PASER * RTE ERROR - PASS ERROR CODE TO USER * * LDA CONWD,I RAL,ELA BIT 14 HAD TIMEOUT SUPPRESS FLAG LDA CLASN RAL,ERA MOVE FLAG TO BIT15 OF CLASS WORD STA TEMP * LDB RQBUF REQUEST BUFFER ADDR ADB K2 POINT TO 3RD REQUEST WORD LDA #NODE LOCAt{L NODE NUMBER STA 1,I SET ORIGINATOR NODE (US) INB LDA 1,I GET DESTINATION NODE CPA N1 ALWAYS LOCAL? LDA #NODE YES! GET LOCAL NODE # STA 1,I SET DESTINATION FIELD STB NODAD SAVE ADDR OF DESTINATION NODE * JSB #RSAX GO TO "RES" ACCESS ROUTINE DEF *+5 DEF K2 ADD MASTER TCB DEF TEMP PASS CLASS # & TIMEOUT FLAG DEF XEQT PASS ID SEG ADDR NODAD NOP PASS DESTINATION NODE SSB ANY ERRORS? JMP RESER * ERROR: "DS07" (NOT LIKELY) LDB RQBUF INB POINT TO 2ND WORD OF REQUEST BUFFER STA 1,I STORE SEQ # IN 2ND WORD STA SEQ# SAVE LOCALLY * * VERIFY THAT 6 < REQUEST LENGTH < 32 * LDB "03" LDA RQLEN,I GET REQUEST LENGTH ADA N7 MUST BE AT LEAST 7 SSA JMP GETDS GIVE DS03 IF <7 ADA N25 SSA,RSS JMP GETDS GIVE DS03 IF > 31 * * CONVERT DESTINATION NODE TO LU * LDA NODAD,I SSA ABSOLUTE DESTINATION CODE ? (NEIGHBOR) JMP ABS YES, GET LU AND RETURN DLD #NCNT NO, GET ADDR & SIZE OF NRV TABLE STA TEMP SAVE COUNTER * LOOP JSB LODWD GET A CPU # INB POINT TO CORRESPONDING LU CPA NODAD,I IS IT THE GOOD ONE ? JMP LUFND YES INB POINT TO NEXT NODE IN TABLE ISZ TEMP END OF TABLE ? JMP LOOP NO, CONTINUE * LDB "04" YES, CPU # ERROR JMP GETDS * ABS CMA,INA MAKE IT >0 JMP LUOK * LUFND JSB LODWD FETCH LU AND B77 ISOLATE IT * * NOW SEND THE REQUEST(/DATA) * LUOK LDB #GRPM GRPM'S CLASS NUMBER STB CLASS IOR CONWX SET "Z" BIT AND "WRITE" INDICATOR STA TEMP * LDA RQBUF,I GET STREAM WORD AND B77 CLEAR THE RETRY COUNTERS IOR #BREJ INITIALIZE TO REQU?IRED VALUE STA RQBUF,I * JSB EXEC DO CLASS WRITE/READ DEF *+8 DEF CLS20 NO ABORT DEF TEMP CONTROL WORD DEF DABUF,I DEF DLWRT,I DATA BUFFER LENGTH OR ZERO DEF RQBUF,I REQUEST ADDRESS DEF RQLEN,I REQUEST LENGTH DEF CLASS JMP PASER DO ERROR RETURN SKP * * DO A CLASS GET TO WAIT FOR A REPLY FOR THIS TRANSACTION. * JSB D65GT GET REPLY DEF *+6 DEF CLASN SPECIFY MASTER CLASS NO.--NO RELEASE. DEF RQBUF,I SPECIFY REPLY ADDRESS. DEF RPLEN,I SPECIFY MAXIMUM REPLY LENGTH. DEF DABUF,I DATA BUFFER ADDR DEF DLRED,I DATA LENGTH OR ZERO JMP PASER * GET ERROR: GO TO PROCESS * DST REG SAVE REGS FOR RETURN * * CHECK FOR PROPER REPLY. * SZA,RSS CHECK FOR ZERO REPLY LENGTH. JMP MTOER * ZERO LENGTH: GO PROCESS TIMEOUT ERROR * LDB RQBUF GET REPLY BUFFER ADDRESS. ADB K5 POINT TO 6TH/7TH WORDS OF REPLY DLD 1,I GET THEM * * CHECK THAT REPLY DOESN'T CONTAIN ERROR SSB,RSS IS SIGN BIT SET? JMP GOODX NO, NO ERROR CPA "08" YES, WAS IT REMOTE BUSY? JMP SUSPD YES, GO SUSPEND AWHILE JMP ERPLY ELSE DO ERROR EXIT * GOODX JSB CLNUP GO TO CLEAN UP BEFORE EXITING. STA RPLEN CLEAR PARAM FOR NEXT ENTRY * * RETURN TO USER AT NORMAL RETURN POINT. * DLD REG = RCVD REQUEST & DATA LENGTHS ISZ D65MS SET EXIT POINTER FOR NORMAL RETURN. JMP D65MS,I RETURN TO THE CALLER. SKP * SUSPD CLB CPB #WAIT DO WE DELAY OR RETURN ERROR DS08? JMP ERPLY NO WAIT SPEC'D, GIVE DS08 TO CALLER * DELAY AWHILE THAN TRY AGAIN JSB CLNUP RETURN MASTER CLASS # & TCB * JSB EXEC GO TO THE RTE 'EXEC' DEF *+6 IN ORDER TO PLACE DEF K12 INTO THE TIME-LIST, DEF ZERO THIS PROGRAM, FOR A PERIOD DEF K2 OF DELAY IN SECONDS, DEF ZERO (ONCE-ONLY) AS DETERMINED BY A DEF #WAIT NEGATIVE VALUE <#WAIT> IN 'RES'. * JMP RETRY NOW, RE-SUBMIT THE REQUEST. SKP * * SUBROUTINE TO RELEASE THE MASTER CLASS & CLEAR THE MASTER TCB * CLNUP NOP ENTRY/EXIT LDA CLASN GET THE CLASS NUMBER. CCE,SZA,RSS IF CLASS NEVER ASSIGNED, JMP CLNUP,I RETURN NOW. * RAL,ERA INCLUDE THE NO-WAIT BIT(#15), STA CLASN AND SAVE FOR RELEASE. CREPT CCA SET THE RELEASE RE-TRY SWITCH STA TEMP TO =-1. * CLRTN JSB EXEC GO TO RTE TO RELEASE CLASS NUMBER. DEF *+5 DEF CLS21 SPECIFY CLASS GET/NO ABORT DEF CLASN SPECIFY MASTER CLASS/RELEASE/NO WAIT. DEF ZERO DUMMY BUFFER ADDRESS. DEF ZERO DUMMY BUFFER LENGTH. RSS IGNORE ERRORS. * ISZ TEMP RELEASE PROCESSING COMPLETED? JMP CLRES YES. GO TO CLEAR THE 'RES' ENTRY. INA,SZA NO, ALL PENDING REQS CLEARED? JMP CREPT NO. CONTINUE TO CLEAR REQUESTS. * LDA CLASN GET THE CLASS NUMBER AGAIN. AND CLMSK EXCLUDE THE NO-DE-ALLOCATION BIT(#13). STA CLASN RESTORE THE MODIFIED CLASS WORD. JMP CLRTN RETURN FOR FINAL DE-ALLOCATION. * CLRES JSB #RSAX GO TO 'RES' ACCESS ROUTINE. DEF *+3 DEF K6 CLEAR MASTER TCB DEF SEQ# PASS SEQ # CLA JMP CLNUP,I RETURN. SPC 2 * LOAD WORD FROM S.A.M., CROSS-LOAD IF DMS SYSTEM LODWD NOP LDA $OPSY OPERATING SYSTEM TYPE RAR,SLA,ERA SKIP IF NON-DMS JMP *+3 DMS. GO EXECUTE XLA LDA 1,I NON-DMS. PICK UP SAM WORD JMP LODWD,I RETURN XLA 1,I CROSS-LOAD SAM WORD JMP LODWD,I RETURN SKP * * ERROR PROCESSING SECTION. * DOWN LDB "00" SYSTEM IS @*($SHUT-DOWN: "DS00". JMP GETDS MTOER LDB "05" MASTER REQUEST TIMEOUT: "DS05". JMP GETDS ILRQ LDB "06" ILLEGAL REQUEST: "DS06". JMP GETDS RESER LDB "07" 'RES' LIST-ACCESS ERROR: "DS07". * GETDS LDA "DS" GET FIRST HALF OF ERROR MESSAGE "DS". * PASER DST ERRAD,I SAVE ERROR MESSAGE IN REPLY * ERPLY JSB CLNUP GO TO CLEAN UP BEFORE EXITING. STA RPLEN CLEAR FOR NEXT PARAM CHECK * LDA D65MS ADA N8 COMPUTE THE ERROR ADDRESS LDB CONWD,I GET ERROR-RETURN FLAG. ELB POSITION TO FOR TESTING. LDB ERRAD POINTS TO ERROR MESSAGE SEZ,RSS ABORT OR RETURN TO CALLER? JSB D65AB ABORT! -- NO RETURN. ERRAD EQU *+1 DLD * GET ERROR CODES AND RETURN TO JMP D65MS,I THE CALLER AT ERROR-RETURN POINT. * SKP * * CONSTANTS AND STORAGE. * BIT13 OCT 20000 CLASN NOP CLASS NUMBER STORAGE. CLASS NOP SEQ# NOP B77 OCT 77 CLMSK OCT 117777 CLASS NUMBER MASK. CONWX OCT 10100 CLS19 OCT 100023 CLASS CONTROL--NO ABORT. CLS20 OCT 100024 CLASS WRITE/READ--NO ABORT CLS21 OCT 100025 CLASS GET--NO ABORT. LCGW OCT 40006 GLOBAL RN LOCK/CLEAR/WAIT/NO-ABORT. LGW OCT 40002 GLOBAL RN LOCK/WAIT/NO ABORT. K2 DEC 2 K4 DEC 4 K5 DEC 5 K6 DEC 6 K12 DEC 12 N1 DEC -1 N7 DEC -7 N8 DEC -8 N25 DEC -25 REG OCT 0,0 RETURN REGISTER INFORMATION. TEMP NOP TEMPORARY STORAGE. XEQT EQU 1717B USER'S I.D. SEGMENT ADDRESS. ZERO OCT 0 "00" ASC 1,00 "03" ASC 1,03 "04" ASC 1,04 "05" ASC 1,05 "06" ASC 1,06 "07" ASC 1,07 "08" ASC 1,08 "DS" ASC 1,DS * SIZE BSS 0 * END X* z  91740-18041 1740 S C0122 DS/1000 MODULE: D65AB              H0101 eASMB,R,L,C HED * ABORT MESSAGE ROUTINE * (C) HEWLETT-PACKARD CO. 1977 * NAM D65AB,7 91740-16041 REV 1740 761220 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ******************************************************* * *D65AB SUBROUTINE TO HANDLE ABORT MESSAGES. * *SOURCE PART # 91740-18041 REV.A * *REL PART # 91740-16041 REV.A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 8-22-74 * *MODIFIED BY: CHUCK WHELAN * *DATE MODIFIED: DEC 1976 * ********************************************************* * * DEFINE A AND B REG * A EQU 0 B EQU 1 SPC 1 * * DEFINE EXTERNALS * EXT EXEC,CNUMO SPC 1 * * DEFINE ENTRY POINT * ENT D65AB SPC 1 SUP SUPPRESS EXTENDED LISTING. SPC 1 * * SUBROUTINE TO HANDLE ABORT MESSAGES. * * B REG= ADDRESS OF 4 CHARACTER (ASCII) ERROR MESSAGE * A REG= ADDRESS TO BE INCORPORATED INTO ERROR MESSAGE * * CALLING SEQUENCE * JSB D65AB ABORT MESSAGE...DVR ERROR * D65AB WILL NOT RETURN CONTROL TO USER * * D65AB NOP STA ERCD SAVE ABORT ADDRESS DLD B,I GET ERROR MESSAGE DST MSG SAVE ERROR MESSAGE * JSB CNUMO CONVERT ERROR ADDRESS TO OCTAL DEF *+3 DEF ERCD DEF ERCD * LDB XEQT GET ADDRESS OF ID SEGMENT ADB D12 POINT TO NAME ADDRESS (WORD #13). LDA B,I GET THE FIRST TWO NAME CHARACTERS. STA PNAM SAVE IN ERROR MESSAGE, STA AMSG "   AND IN ABORT MESSAGE. INB POINT TO I.D. SEGMENT WORD #14. LDA B,I GET CHARACTERS THREE AND FOUR. STA PNAM+1 SAVE IN ERROR MESSAGE, STA AMSG+1 AND IN ABORT MESSAGE. INB POINT TO I.D. SEGMENT WORD #15. LDA B,I GET CHARACTER FIVE & PROGRAM TYPE. AND UBYTE RETAIN ONLY THE NAME-CHARACTER, IOR B40 AND INSERT A FOLLOWING BLANK. STA PNAM+2 SAVE IN ERROR MESSAGE, STA AMSG+2 AND IN ABORT MESSAGE. * JSB EXEC SEND 2-LINE ERROR/ABORT MESSAGE DEF *+5 DEF B2 DEF B1 TO SYSTEM CONSOLE (LU #1) DEF MSG DEF D19 * JSB EXEC TERMINATION REQUEST DEF *+2 NO RETURN DEF B6 FROM TERMINATION CALL. SPC 1 MSG ASC 3,XXXX: PNAM ASC 3, ERCD ASC 3, OCT 6412 CR/LF ASC 1,* AMSG ASC 8,XXXXX ABORTED! * B1 OCT 1 B2 OCT 2 B6 OCT 6 B40 OCT 40 D12 DEC 12 D19 DEC 19 UBYTE OCT 177400 XEQT EQU 1717B CURRENT I.D. SEGMENT ADDRESS. SPC 1 END uo  { 91740-18042 1740 S C0222 DS/1000 MODULE: POPEN              H0102 9ASMB,R,L,C,N *USE 'ASMB,R,N' FOR DS/1000 ONLY, AND 'ASMB,R,Z' FOR DS/1000 & DS/3000 IFN NAM POPEN,7 91740-16042 REV 1740 770714 XIF IFZ NAM POPEN,7 91741-16016 REV 1740 770714 XIF UNL IFN HED POPEN (DS/1000) 91740-16042 * (C) HEWLETT-PACKARD CO 1977 XIF IFZ HED POPEN (DS/1000 & DS/3000) 91741-16016 * (C) HEWLETT-PACKARD CO 1977 XIF LST * * IFN OPTION * NAME: POPEN * SOURCE: 91740-18042 * RELOC: 91740-16042 * PRGMR: CHUCK WHELAN * * IFZ OPTION * NAME: POPEN * SOURCE: 91741-18016 * RELOC: 91741-16016 * PRGMR: CHUCK WHELAN & JIM HARTSELL * SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT POPEN,PREAD,PWRIT,PCONT,PCLOS EXT D65MS EXT .ENTR IFZ EXT #LU3K EXT D3KMS,D$INI,D$STW,D$ASC EXT D$RQB,D$NWD,D$ZRO,D$WDC,D$SMP * D EQU 256 MAX # DATA WORDS/BLOCK (DS/3000). XIF SUP * SPC 3 * THIS PROGRAM PERFORMS ALL MASTER PROGRAM TO PROGRAM FUNCTOIONS * IN THE DISTRIBUTED SYSTEM. ON EACH REQUEST IT DOES THE FOLLOWING: * * 1. MOVES PCB FROM USER AREA TO REQUEST (EXCEPT POPEN) * 2. VERIFIES SUFFICIENT PARAMETERS PASSED IN CALL * 3. MOVES 20 WORD TAG FIELD INTO REQUEST (EXCEPT PCLOS) * 4. SETS STREAM, FUNCTION, AND ORIGINATOR NODE INTO REQUEST * 5. CALLS "D65MS" TO SEND REQUEST (& DATA) AND GET REPLY * 6. IF NO SYSTEM ERROR, MOVES TAG FIELD INTO USER AREA (EXCEPT PCLOS) * 7. EXAMINES STATUS & GIVES "ACEPT", "REJCT", OR ERROR CODE BACK TO CALLER SKP IPCB NOP IERR NOP INAM NOP INODE NOP ITAG NOP IFZ ENAM NOP DS/3000: ENTRY NAME NOP CONTROL INFORMATION. NOP LOADING OPTIONS. BUFSZ NOP MAX DATA RECORD LENGTH XIF SPC 3 POPEN NOP * * MASTER REQUESTS FOR POPEN COME HERE * JSB .ENTR PICK UP THE USER PARAMETERS DEF IPCB * LDB IPCB USER'S PCB ADDRESS LDA INODE,I DESTINATION NODE ADB K3 4TH WORD OF PCB HAS NODE STA 1,I PUT IT THERE STA $DEST SAVE IT * LDB POPEN SET UP ERROR RETURN LDA IERR JSB BLDRQ SET UP BASIC REQST DEF ITAG DEC 1 FCN = 1 IFZ JMP QOPEN DO POPEN TO 3000 XIF * LDA INAM ADDR OF NAME FIELD LDB RPCBA ADDR OF PCB IN REQ BUFFER MVW K3 MOVE NAME INTO PCB FIELD * LDA IPCB * NODAT LDB DUMAD USE DUMMY AS DATA POINTER STB DBUF CLB STB WRLEN SET WRITE DATA LENGTH = 0 * * * THIS CODE IS USED IN COMMON BY ALL P TO P CALLS * MAIN STB RDLEN SET READ DATA LENGTH STA PCBAD SAVE PCB ADDRESS * LDA K4 STA $STRM SET P TO P STREAM IN REQ * * THE CALL TO D65MS WILL: * 1) GET AN I/O CLASS * 2) INSERT SEQ # & ORIGIN NODE * 3) BUILD MASTER TCB * 4) SEND REQUEST (& DATA) * 5) CALL "D65GT" TO AWAIT AND GET REPLY * 6) RETURN REPLY (& DATA) * 7) RETURN CONTROL JSB D65MS ISSUE REQUEST CALL DEF *+8 DEF CONWD DEF IRBUF REQUEST BUFFER DEF IRBFL REQUEST LENGTH DBUF NOP DATA BUFFER ADDRESS DEF WRLEN DATA WRITE LENGTH DEF RDLEN DATA READ LENGTH DEF IRBFL MAX EXPECTED REPLY LENGTH * JMP ERR ERROR DETECTED LDA $FUNC FUNCTION CODE CPA K5 IS THIS A PCLOS? JMP NOMOV YES, WE'RE DONE * RPCBA EQU *+1 DLD $PCB GET PCB PCBAD EQU *+1 DST * SAVE 1ST 2 PCB WORDS IN USER AREA * LDA RTAGA ADDR OF TAG FIELD IN REQUEST LDB TAGAD ADDR OF TAG FIELD IN USER AREA MVW K20 MOVE 20 WORDS TO USER TAG FIELD * NOMOV LDA $ERR SZA WAS ERROR DETECTED? JMP EXIT YES, IERR SET LDB $FUNC SSB WAS REQUEST REJECTED? CLA,INA YES, SET REJECT IERR EXIT STA ERRAD,I RETURN IT TO CALLER CLB STB CLEAR,I CLEAR PARAM CHECK LOC JMP RTRN,I RETURN SKP * * MOVE PCB INTO REQUEST BUFFER MVPCB NOP LDB N2 ADB MVPCB POINT TO ADDR OF PCB ADDR LDB 1,I GET ADDR OF PCB ADDR LDA 1,I GET PCB ADDR LDB RPCBA GET ADDR OF PCB IN BUFFER MVW K2 MOVE 1ST TWO WORDS TO REQUEST INA POINT TO 4TH DCB WORD LDB 0,I GET DESTINATION NODE STB $DEST SAVE IT JMP MVPCB,I RETURN SPC 2 * * COMMON PARAMETER SET-UP AND TAG FIELD MOVE FOR ALL BUT "PCLOS" BLDRQ NOP STB RTRN RETURN ADDRESS FOR ALL STA ERRAD ADDR OF ERROR PARAMETER * DLD BLDRQ,I GET TAG ADDR ADDR, AND FUNC CODE STA CLEAR SAVE LAST PARAM ADDR LDA 0,I GET ADDR OF USER'S TAG FIELD SZA,RSS WAS LAST PARAM SPECIFIED JMP ERR2 TOO FEW PARAMETERS IN CALL STB $FUNC SET FUNCTION CODE IFZ LDB #LU3K GET DS/3000 LU CMB,INB,SZB,RSS NEGATE JMP *+3 NO 3000 CPB $DEST IS IT NEGATIVE LU OF 3000? JMP RQEX YES, PERFORM DS/3000 P-TO-P XIF LDB K31 REQUEST LENGTH STB IRBFL * STA TAGAD LDB RTAGA ADDR OF TAG FIELD IN REQUEST MVW K20 MOVE TAG FIELD INTO REQ IFZ ISZ BLDRQ XIF RQEX ISZ BLDRQ ISZ BLDRQ JMP BLDRQ,I ORETURN SPC 3 * ERROR PROCESSING SECTION ERR ADB NEG00 SUBTRACT ASCII "00" CPA "DS" IS IT A "DSXX" ERROR? SSB AND >= "00"? JMP ERR47 NO, GIVE -47 LDA 1 ADA N9 NUMERIC PART - 9 CMA,SSA SKIP IF DS00 - DS08 ERR47 LDA K11 MAKE A -47 ERROR ADA N58 A = -47 OR -50 THRU -58 JMP EXIT ERR2 LDA N40 JMP EXIT RETURN WITH IERR SKP * * READ REQUESTS * RIPCB NOP RIERR NOP RIBUF NOP RIL NOP RITAG NOP * PREAD NOP JSB .ENTR GET USER PARAMETERS DEF RIPCB JSB MVPCB MOVE 2 WORD PCB INTO REQUEST * LDB PREAD RETURN ADDRESS LDA RIERR JSB BLDRQ BASIC REQUEST PROCESSING DEF RITAG K2 DEC 2 IFZ JMP QREAD PERFORM PREAD TO 3000 XIF * LDA RIBUF SAVE BUFFER ADDRESS STA DBUF LDB RIL,I SAVE DATA LENGTH STB $DLEN * CLA STA WRLEN CLEAR WRITE DATA LENGTH LDA RIPCB PCB ADDRESS JMP MAIN NOW DO LINE COMM & RETURN SKP * * WRITE REQUESTS * PIPCB NOP PIERR NOP PIBUF NOP PIL NOP PITAG NOP * * PWRIT NOP PWRITE REQUESTS HERE JSB .ENTR PICK UP PARAMETERS DEF PIPCB JSB MVPCB MOVE 2 WORD PCB INTO REQUEST BUFR * LDB PWRIT SET UP ERROR RETURN LDA PIERR JSB BLDRQ BUILD BASIC REQST DEF PITAG K3 DEC 3 IFZ JMP QWRIT PERFORM PWRIT TO 3000 XIF * LDA PIBUF GET DATA ADDRESS STA DBUF LDA PIL,I GET DATA LENGTH STA $DLEN STA WRLEN * LDA PIPCB CLB JMP MAIN NOW DO LINE COMM & RETURN SKP * * CONTROL REQUESTS * CIPCB NOP CIERR NOP CITAG NOP * * PCONT NOP JSB .ENTR GET PARAMETERS DEF CIPCB JSB MVPCB MOVE 2 WORD PCB INTO REQUEST BUFR * i LDB PCONT SET UP RETURN ADDR LDA CIERR JSB BLDRQ BUILD BASIC REQST DEF CITAG K4 DEC 4 IFZ JMP QCONT PERFORM PCONT TO 3000 XIF * LDA CIPCB PCB ADDRESS JMP NODAT DO LINE COMM & RETURN SKP * * CLOSE REQUESTS * FIPCB NOP FIERR NOP * * RTRN EQU * PCLOS NOP JSB .ENTR GET PARAMETERS DEF FIPCB JSB MVPCB MOVE 2 WORD PCB INTO REQUEST BUFR * LDA DFIEA STA CLEAR SAVE LAST PARAM ADDR LDA FIERR SZA,RSS ERROR ADDR SPECIFIED? JMP ERR2 NO, GIVE ERROR STA ERRAD SET ERROR ADDRESS IFZ LDA #LU3K GET 3000 LU CMA,INA,SZA,RSS NEGATE IT JMP *+3 JUMP IF NO 3000 LINK CPA $DEST WAS NEGATIVE LU OF 3000 SPECIFIED? JMP QCLOS YES, DO PCLOS TO 3000 XIF * LDA K11 STA IRBFL 11 WORD REQUEST LDA K5 STA $FUNC FUNCTION CODE = 5 * LDA FIPCB PCB ADDRESS JMP NODAT DO COMMUNICATION & RETURN SKP * * DATA AREA * IRBFL NOP WRLEN NOP RDLEN NOP K5 DEC 5 K11 DEC 11 K20 DEC 20 K31 DEC 31 N2 DEC -2 N9 DEC -9 N40 DEC -40 N58 DEC -58 NEG00 OCT 147720 "DS" ASC 1,DS CONWD OCT 100000 ERRAD NOP TAGAD NOP CLEAR NOP DFIEA DEF FIERR RTAGA DEF $TAG ADDR OF REQ TAG FIELD DUMAD DEF * * * DEFINE REQUEST IRBUF BSS 31 IFZ BSS 4 XIF $STRM EQU IRBUF $DEST EQU IRBUF+3 $ERR EQU IRBUF+5 $FUNC EQU IRBUF+7 $PCB EQU IRBUF+8 $DLEN EQU IRBUF+10 $TAG EQU IRBUF+11 IFN UNL XIF IFZ SKP * * GENERATE POPEN REQUEST FOR REMOTE DS/3000 COMPUTER. * QOPEN LDA ITAG STA TAGAD * LDA ITAG SZA,RSS JMP ERR2 ILLEGAL NUMBER OF PARAMETERS. * * BEGIN THE REQUEST BUFFER WITH SETUP OF 8-WORD FIXED * FORMAT FOR PTOPC, THEN "RFA " IN NEXT 2 WORDS. * 2 LDA IPRAM POINT TO ADDR OF FIRST PARAM. JSB D$INI INITIALIZE BUFFER STUFFERS. * LDB B21 POPEN STREAM = 21 OCTAL. JSB D$PTP SET UP 8 WORD FIXED FORMAT AREA. LDB D$RQB LDA B7 CHANGE POPEN MSG CLASS TO 7. STA B,I * LDA "RF" JSB D$STW STORE "RFA ". LDA "A" JSB D$STW * LDA B25 JSB D$STW FUNCTION CODE = 25 OCTAL. * LDA INAM MOVE PROGRAM NAME (UP TO 28 BYTES). LDB N14 (DELIMITER = BLANK) JSB D$ASC * INA (A) = TOTAL BYTES IN REQUEST. ARS NEED TO INSERT TRAILING BLANKS ADA N17 IN PROGRAM NAME FIELD? STA TEMP SSA,RSS JMP MVENT NO. * LOOP2 LDA BLNKS YES. ADD TRAILING BLANKS JSB D$STW TO FILL OUT 14-WORD FIELD. ISZ TEMP JMP LOOP2 * MVENT LDA ENAM MOVE ENTRY NAME (UP TO 8 BYTES). LDB N4 DELIMITER = BLANK. JSB D$ASC * INA (A) = TOTAL BYTES IN REQUEST. ARS ADA N21 NEED TO INSERT TRAILING BLANKS STA TEMP IN ENTRY NAME FIELD? SSA,RSS JMP MVTAG NO. * LOOP3 LDA BLNKS YES. ADD TRAILING BLANKS TO FILL JSB D$STW OUT 4-WORD FIELD. ISZ TEMP JMP LOOP3 * MVTAG LDA N20 MOVE TAG FIELD. JSB D$NWD * CLA MOVE 2 PARAMETERS. LDA ENAM+1,I JSB D$STW CLA LDA ENAM+2,I JSB D$STW CLA ZERO 3 WORDS. JSB D$STW CLA JSB D$STW CLA JSB D$STW LDA MAXSZ STORE MAX BLOCK SIZE (+WORDS). LDB BUFSZ GET USER'S VALUE IF SZB IT WAS SPECIFIED. LDA BUFSZ,I SZA SSA LDA MAXSZ JSB D$STW * * SET UP PARAMETER MASK AS FOLLOWS: * BIT 9 = PROGRAM NAME * BIT 8 = ENTRY NAME * BIT 7 = 0 * BIT 6 = CONTROL INFO * BIT 5 = LOADING OPTIONS * BIT 4 = 0 * BIT 3 = 0 * BIT 2 = 0 * BIT 1 = 0 * BIT 0 = 0 * LDA DPARM FWA PARAM ADDR LIST. STA TEMP LDA N5 COUNTER. STA CONTR CLA INITIALIZE PARAMETER MASK. * LOOP4 LDB TEMP,I GET ADDR OF NEXT PARAM. LDB B,I SZB IOR B1 SET BIT IF PARAM SPECIFIED. RAL MOVE IT OVER. ISZ TEMP ISZ CONTR JMP LOOP4 LOOP TILL DONE. ALF BITS 0-4 = 0. JSB D$STW * * REQUEST BUFFER READY. D3KMS WILL WRITE IT TO QUEX'S I/O * CLASS. USER WILL BE SUSPENDED UNTIL D3KMS'S CLASS GET * IS COMPLETED WHEN THE REPLY ARRIVES. * JSB D$WDC STORE WORD COUNT. CLA POPEN HAS A SINGLE REPLY. LDB BIT15 SET NO-ABORT BIT IN FLAG WORD. * JSB REMIO SEND REQUEST AND WAIT FOR REPLY. * JSB PASSP RETURN ERROR CODE AND TAG FIELD. * LDA D$RQB RETURN PCB FROM REPLY. ADA K10 (CURRENTLY NOT USED - ALL ZEROES) STA TAGPR LDA N3 LDB IPCB JSB MOVE * LDA ERRAD,I JMP RTRN,I RETURN TO CALLER. * * DPARM DEF *+1 TABLE OF POPEN PARAMETER DEF INAM ADDRESSES FOR BIT MASK. DEF ENAM DEF B0 DEF ENAM+1 DEF ENAM+2 * SKP * * SUBROUTINE TO SEND AND/OR RECEIVE BUFFERS TO/FROM THE HP3000. * REMIO NOP IOR 1 STA CNWRD * JSB D3KMS DEF *+2 DEF CNWRD JMP ERR ERROR RETURN. * LDA D$RQB SAVE "FROM PROCESS #" AS ADA K4 "TO PROCESS #" FOR NEXT REQUEST. LDA A,I ALF,ALF AND B377 STA D$SMP * ISZ BLKCT BUMP PREAD/PWRIT BLOCK COUNTER. JMP REMIO,I EXIT. * * SUBROUTINE TO BUILD 8-WORD FIXED FORMAT AREA OF REQUEST. * * (A) = 1ST BYTE RIGHT JUSTIFED * (B) = STREAM TYPE. * D$PTP NOP STB TE.MP SAVE STREAM TYPE. LDA K4 STORE MESSAGE CLASS = 4. JSB D$STW STORE 1ST WORD IN REQUEST BUFFER. CLA CLEAR COMPUTER ID. JSB D$STW LDA TEMP STORE STREAM TYPE. JSB D$STW LDA N4 CLEAR NEXT 4 WORDS. JSB D$ZRO LDA N2 FORCE BYTE COUNTER TO CLEAR. JSB D$STW JMP D$PTP,I * * SUBROUTINE TO PASS RETURNED ERROR CODE AND TAG * FIELD TO THE USER PROGRAM. * PASSP NOP LDB D$RQB RETURN ERROR CODE. ADB K8 LDB B,I CLA MAP DS/3000 TO DS/1 ERROR CODES. CPB CG211 INA CCG & 211 = 1 (REJECT). CPB CL209 LDA N41 CCL & 209 = -41. CPB CL205 LDA N42 CCL & 205 = -42. CPB CG210 LDA N44 CCG & 210 = -44. CPB CL213 LDA N44 CCL & 213 = -44. STA ERRAD,I * LDB D$RQB ADB K13 RETURN TAG FIELD. STB TAGPR LDA N20 20 WORDS. LDB TAGAD JSB MOVE JMP PASSP,I SKP * * GENERATE PREAD REQUEST FOR REMOTE DS/3000 COMPUTER. * QREAD CLA CLEAR BLOCK COUNTER. STA BLKCT LDA RITAG STA TAGAD SZA,RSS JMP ERR2 ILLEGAL # PARAMETERS. * LDA RPRAM POINT TO ADDR OF 1ST PARAM (TAG). JSB D$INI INITIALIZE BUFFER STUFFERS. * LDB B22 SET UP 8-WORD FIXED FORMAT AREA. JSB D$PTP * CLA JSB D$STW * LDA RIL,I GET USER BUFFER LENGTH. SSA,RSS JMP *+4 CMA,INA INA CLE,ERA JSB D$STW STORE IN REQUEST BUFFER. * LDA RIPCB MOVE PCB TO REQUEST. JSB MVPC (EMPTY AT PRESENT) LDA N20 MOVE TAG FIELD. JSB D$NWD * JSB D$WDC SET WORD COUNT. * * SEND REQUEST TO THE 3000 AND WAIT FOR REPLIES. * LDA RIBUF SET ADDR OF USER DATA BUFFER. STA TBUF CLA z STA TCNT CLEAR RECEIVED BYTE COUNTER. INA SIGNAL FOR MULTIPLE REPLIES. * SN/RC LDB BIT15 SET NO-ABORT BIT IN FLAG WORD. * JSB REMIO SEND REQUEST AND GET REPLIES. * LDA CNWRD WAS LAST CALL TO RELEASE CLASS ONLY? AND B377 CPA K4 JMP DONE YES. * LDA BLKCT IF FIRST REPLY, PASS ERROR CPA B1 CODE AND TAG TO USER. JSB PASSP * LDA D$RQB CHECK IF ANY DATA WAS RECEIVED. ADA B7 LDA A,I (A) = + BYTES. ADA N10 ADJUST FOR IERR & PCB. LDB BLKCT CPB B1 IF FIRST REPLY, ADJUST FOR TAG. ADA N40 SZA,RSS JMP DEALC NO DATA (COULD BE REJECT). * JSB RDMOV MOVE DATA TO USER BUFFER. * LDA D$RQB IS CONTINUATION BIT SET? ADA K2 LDA A,I RAL,RAL SSA JMP DMREP YES. DEALC LDA K4 NO. DE-ALLOCATE CLASS. JMP SN/RC * DMREP LDB D$RQB NO. SET UP "REPLY". LDA B,I STORE COUNT AND MSG CLASS. AND B377 IOR LB10 STA B,I ADB K2 LDA B,I CLEAR REPLY BIT. ELA,CLE,ERA STA B,I ADB K2 LDA B,I REVERSE PROCESS NUMBERS. ALF,ALF STA B,I ADB K3 CLA CLEAR BYTE COUNT. STA B,I * LDA K2 TELL D3KMS TO LOOK FOR MORE. JMP SN/RC GO GET NEXT DATA BLOCK. * DONE LDA ERRAD,I JMP RTRN,I RETURN TO USER. SPC 2 * * MOVE SUBROUTINE * MOVE NOP STA CONTR MOVE1 LDA TAGPR,I PICK UP NEXT WORD STA 1,I AND PUT IT AWAY INB ISZ TAGPR INCREMENT POINTERS ISZ CONTR JMP MOVE1 UNTIL DONE JMP MOVE,I SKP * * SUBROUTINE TO MOVE A BLOCK OF DATA FROM REPLY * BUFFER TO USER BUFFER (REMAINING BYTES UP TO MAX LEN). * EXIT WITH TCNT = TOTAL BYTES REMAINING. * RDMOV NOP (A) = + BYTES. SZA,RSS EXIT FOR JMP RDMOV,I 0-LEN DATA. LDB A ACCUMULATE LOG. ADB TCNT STB TCNT INA CLE,ERA (A) = + WORDS. CMA,INA STA TEMP NEG. # WORDS TO MOVE. LDB D$RQB ADB K13 GET PAST 3-WORD "PCB" AREA. LDA BLKCT IF THIS IS FIRST REPLY, CPA B1 ADB K20 ADJUST FOR TAG FIELD. STB RQPTR ADDR OF REPLY DATA. * LOOP LDA RQPTR,I MOVE WORD FROM REPLY STA TBUF,I TO USER BUFFER. ISZ RQPTR BUMP POINTERS. ISZ TBUF * ISZ TEMP JMP LOOP ELSE LOOP TILL DONE. JMP RDMOV,I REACHED LIMIT OF MAX WORDS. SKP * * GENERATE PWRIT REQUEST FOR REMOTE DS/3000 COMPUTER. * QWRIT CLA CLEAR BLOCK COUNTER. STA BLKCT LDA PITAG STA TAGAD * SZA,RSS JMP ERR2 ILLEGAL # PARAMETERS. * LDA PPRAM POINT TO ADDR OF 1ST PARAM (TAG). JSB D$INI INITIALIZE BUFFER STUFFERS. * LDB B23 SET UP 8-WORD FIXED FORMAT AREA. JSB D$PTP * CLA JSB D$STW * LDA PIBUF SET POINTER TO USER DATA. STA TBUF * LDA PIL,I GET USER BUFFER LENGTH. SSA,RSS JMP *+5 CMA,INA SLA INA RSS CLE,ELA BYTES (POSITIVE). STA TCNT TOTAL DATA BYTES TO SEND. CLE,ERA JSB D$STW STORE IN REQUEST BUFFER (TCOUNT). * LDA PIPCB MOVE PCB TO REQUEST. JSB MVPC (EMPTY AT PRESENT) LDA N20 MOVE TAG FIELD. JSB D$NWD * JSB D$WDC SET WORD COUNT. * JSB WRMOV MOVE 1ST BLOCK TO REQUEST BUFFER. LDA TCNT SZA,RSS IF ALL DATA MOVED, JMP SEND TELL D3KMS THERE IS A SINGLE REPLY. * LDB D$RQB CONTINUATION BLOCKS REQUIRED. ADB K2 LDA B,I IOR BIT13 SET CONTINUATION BIT IN STREAM WORD. STA B,I  CLA,INA TELL D3KMS THERE ARE MULT. BLOCKS. * * SEND REQUESTS TO THE 3000 AND GET THE REPLY. * SEND LDB BIT15 SET NO-ABORT BIT IN FLAG WORD. * JSB REMIO SEND REQUESTS AND/OR GET REPLY. * LDB TCNT IF ALL DATA OUT, WE HAVE RECEIVED SZB THE REPLY. JMP MORE JSB PASSP RETURN ERROR CODE & TAG TO USER. LDA ERRAD,I JMP RTRN,I RETURN TO CALLER. * * MORE DATA... SHIP OUT THE NEXT BLOCK. * MORE LDB D$RQB CLEAR REPLY BIT. ADB K2 LDA B,I ELA,CLE,ERA STA B,I * JSB WRMOV MOVE NEXT CHUNK OF DATA. LDA K2 LDB TCNT SZB IF MORE DATA, KEEP CONT. BIT. JMP SEND CALL D3KMS WITH RCODE = 2. * LDB D$RQB THIS IS LAST BLOCK. ADB K2 LDA B,I AND NOT13 CLEAR CONTINUATION BIT. STA B,I LDA K3 TELL K3KMS THIS IS LAST BLOCK. JMP SEND SKP * SUBROUTINE TO STORE # BYTES LEFT TO SEND IN REQ * BUFFER AND MOVE NEXT BLOCK OF USER DATA (REMAINING * BYTES UP TO MAX). STORE ADJUSTED BYTE COUNTER (N) * IN REQUEST. ON EXIT, TCNT IS REMAINING # DATA * BYTES OR ZERO. * WRMOV NOP LDB D$RQB ADB B7 LDA B,I INITIALIZE BYTE COUNTER (N). STA BYTCT LDA TCNT # REMAINING DATA BYTES. SZA,RSS EXIT FOR JMP WRMOV,I 0-LEN DATA. LDB D$RQB * ADB K13 SET ADDR OF DATA IN RQBUF. LDA BLKCT SZA,RSS ADJUST FOR TAG FIELD ADB K20 IN FIRST REQUEST. STB RQPTR LDA RLSIZ STA TEMP SET MAX # DATA WORDS (NEG). * LOOP1 LDA TBUF,I MOVE DATA FROM USER TO REQUEST. STA RQPTR,I ISZ TBUF ISZ RQPTR ISZ BYTCT ADD 2 TO BYTE COUNTER (N). ISZ BYTCT LDA TCNT DECREMENT TOTAL DATA BYTES LEFT. ADA N2 STA TCNT CMA,INA NEGATE. SSA,RSS IF 0 OR 1, JMP AD2 J1 ALL USER DATA MOVED, ISZ TEMP JMP LOOP1 ELSE LOOP TILL DONE. JMP STBYT REACHED LIMIT OF MAX WORDS. * ADJ1 CMA,INA ADJUST BYTE COUNTER (N) ADA BYTCT STA BYTCT * STBYT LDA D$RQB STORE BYTE COUNT (N). ADA B7 LDB BYTCT STB A,I LDA TCNT IF TCNT = -1, MAKE IT 0. CPA N1 CLA STA TCNT JMP WRMOV,I RETURN. SKP * * GENERATE PCONT REQUEST FOR REMOTE DS/3000 COMPUTER. * QCONT LDA CITAG STA TAGAD * SZA,RSS JMP ERR2 ILLEGAL # PARAMETERS. * LDA CPRAM ADDR OF 1ST PARAM (TAG). JSB D$INI INITIALIZE BUFFER STUFFERS. * LDB B24 SET UP 8-WORD FIXED FORMAT AREA. JSB D$PTP LDA N2 CLEAR NEXT 2 WORDS. JSB D$ZRO * LDA CIPCB MOVE PCB TO REQUEST. JSB MVPC (EMPTY AT PRESENT) LDA N20 MOVE TAG FIELD. JSB D$NWD * JSB D$WDC SET WORD COUNT. * * SEND REQUEST TO THE 3000 AND WAIT FOR THE REPLY. * CLA SINGLE BLOCK. LDB BIT15 SET NO-ABORT BIT IN FLAG WORD. * JSB REMIO SEND REQUEST AND GET REPLY. * JSB PASSP RETURN ERROR CODE & TAG FIELD. * LDA ERRAD,I JMP RTRN,I RETURN. SKP * * GENERATE PCLOS REQUEST FOR REMOTE DS/3000 COMPUTER. * QCLOS LDB D$RQB MOVE REQUEST TO D3KMS BUFFER. LDA BRKBF MVW K8 MOVE 8 WORDS * JSB D3KMS SEND BREAK REQ TO 3000, DEF *+2 AND GET THE REPLY. DEF BIT15 NOP * LDA FIERR ADDR OF 1ST PARAM (DUMMY). JSB D$INI INITIALIZE BUFFER STUFFERS. * LDB B21 SET UP 8-WORD FIXED FORMAT AREA. JSB D$PTP * LDB D$RQB CHANGE PCLOS MSG CLASS TO 7. LDA B7 STA B,I * LDA "RF" STORE "RFA ". JSB D$STW LDA "A" JSB D$STW LDA B26 STORE FCN CODE)NLH = 26 OCTAL. JSB D$STW * LDA FIPCB MOVE PCB TO REQUEST. JSB MVPC (EMPTY AT PRESENT) * JSB D$WDC SET WORD COUNT. * * SEND REQUEST TO THE 3000 AND WAIT FOR THE REPLY. * CLA SINGLE BLOCK. LDB BIT15 SET NO-ABORT BIT IN FLAG WORD. * JSB REMIO SEND REQUEST AND GET REPLY. * JSB PASSP RETURN ERROR CODE & TAG FIELD. * LDA ERRAD,I JMP RTRN,I RETURN. SKP * * MOVE PCB FROM USER ARRAY TO REQUEST BUFFER. * MVPC NOP STA TAGPR POINTER TO PCB. LDA N3 STA CONTR MVP1 LDA TAGPR,I JSB D$STW ISZ TAGPR ISZ CONTR JMP MVP1 JMP MVPC,I * * TEST WHETHER REQUEST FOR 3000 OR REMOTE RTE. * DS3K NOP (A) = ADDR OF USER PCB. ADA K3 BUMP TO LU WORD. STA TEMP LDA #LU3K GET LU OF 3000. INA LDB A,I CPB TEMP,I SAME AS LU IN USER PCB? RSS YES. EXIT VIA P+1. ISZ DS3K NO. EXIT VIA P+2. JMP DS3K,I SKP N* * CONSTANTS AND WORKING STORAGE. * B0 OCT 0 B1 OCT 1 B7 OCT 7 B21 OCT 21 B22 OCT 22 B23 OCT 23 B24 OCT 24 B25 OCT 25 B26 OCT 26 B377 OCT 377 LB10 OCT 4000 K8 DEC 8 K10 DEC 10 K13 DEC 13 N1 DEC -1 N3 DEC -3 N4 DEC -4 N5 DEC -5 N10 DEC -10 N14 DEC -14 N17 DEC -17 N20 DEC -20 N21 DEC -21 N41 DEC -41 N42 DEC -42 N44 DEC -44 CL205 OCT 040315 CL209 OCT 040321 CG210 OCT 000322 CG211 OCT 000323 CL213 OCT 040325 MAXSZ DEC 4096 MAXIMUM USER BUFFER SIZE. RLSIZ ABS -D MAXIMUM # DATA WORDS PER REQUEST. "RF" ASC 1,RF "A" ASC 1,A BIT13 OCT 20000 NOT13 OCT 157777 BLNKS ASC 1, RQPTR NOP BYTCT NOP IPRAM DEF ITAG RPRAM DEF RITAG PPRAM DEF PITAG CPRAM DEF CITAG CNWRD NOP BLKCT NOP TEMP BSS 2 TCNT NOP TBUF NOP * BRKBF DEF *+1 OCT 4006 OCT 0 OCT 22 OCT 0,0,0,0,0 A EQU 0 B EQU 1 TAGPR NOP CONTR NOP BIT15 EQU CONWD XIF * LST * SIZE EQU * * END S6 } 91740-18043 1740 S C0122 DS/1000 MODULE: MSTAT              H0101 8ASMB,L,R,C HED MSTAT: 91740-16043 REV 1740 (C) HEWLETT-PACKARD CO. 1977 NAM MSTAT,7 91740-16043 REV 1740 770425 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 4 **************************************************************** * * MSTAT * * SOURCE PART # 91740-18043 * * REL PART # 91740-16043 * * WRITTEN BY CHUCK WHELAN * * DATE WRITTEN FEB 1977 * * MODIFIED BY * * DATE MODIFIED * *************************************************************** SPC 3 ENT FSTAT * EXT .ENTR,$CDIR * PRAM NOP FSTAT NOP JSB .ENTR DEF PRAM LDA $ADR GET ADDRESS OF RTE-M FILE DIRECTORY RSS LDA 0,I RAL,CLE,SLA,ERA RESOLVE INDIRECT JMP *-2 ADA N1 STA ENTAD SAVE ADDR OF ADDR OF DIR. END INA LDB PRAM GET ADDRESS OF CALLERS BUFFER MVNXT MVW K4 MOVE 4 WORD DIRECTORY ENTRY TO USERS BUFR CPA ENTAD,I END OF CARTRIDGE DIRECTORY? CLA,RSS YES JMP MVNXT NO, MOVE ANOTHER ENTRY STA 1,I SET NEXT BUF WORD = 0 FOR END JMP FSTAT,I RETURN * ENTAD NOP K4 DEC 4 N1 DEC -1 $ADR DEF $CDIR * * SIZE EQU * * END G ~ 91740-18044 1740 S C0122 DS/1000 MODULE: DUMFM              H0101 ?ASMB,L,R,C HED DUMFM: 91740-16044 (C) HEWLETT-PACKARD CO. 1977 NAM DUMFM,7 91740-16044 REV 1740 770425 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 4 **************************************************************** * * DUMFM * * SOURCE PART # 91740-18044 * * REL PART # 91740-16044 * * WRITTEN BY CHUCK WHELAN * * DATE WRITTEN FEB 1977 * * MODIFIED BY * * DATE MODIFIED * *************************************************************** SPC 3 ENT APOSN,CLOSE,CREAT,FCONT,LOCF,NAMF ENT OPEN,POSNT,POST,PURGE,READF,RWNDF,WRITF * EXT .ENTR * PRAMS REP 8 PARAMETER ADDRESSES NOP * DUMFM NOP JSB .ENTR PICK-UP PARAMETERS DEF PRAMS CCA INDICATE A DISC ERROR STA PRAMS+1,I SINCE NO FMP PRESENT JMP DUMFM,I RETURN * APOSN EQU DUMFM CLOSE EQU DUMFM CREAT EQU DUMFM FCONT EQU DUMFM LOCF EQU DUMFM NAMF EQU DUMFM OPEN EQU DUMFM POSNT EQU DUMFM POST EQU DUMFM PURGE EQU DUMFM READF EQU DUMFM RWNDF EQU DUMFM WRITF EQU DUMFM * SIZE EQU * * END j  91740-18045 1740 S C0122 DS/1000 MODULE: RTMLG              H0101 njASMB,R,L,C * NAME: RTMLG * SOURCE: 91740-18045 * RELOC: 91740-16045 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM RTMLG,3,90 91740-16045 REV 1740 770912 * * * THIS IS THE MAIN OF THE SEGMENTED GENERATOR-LOADER. * ITS PURPOSE IS TO CLEAR SOME FLAGS, TO DETERMINE LAST * WORD OF AVAILABLE MEMORY (NEEDED FOR BUILDING LOADER * SYMBOL TABLE), AND TO LOAD IN SEGMENT 1 (INITIALIZATION * SEGMENT). * * EXTERNALS * * EXT FUT4,GENRT,GLWAM,GNFLG,GNSG1 EXT LDSEG,LDSG3,LWAMG,OPT.3,SEGFL * * DUMMY EXTERNALS TO FORCE LOAD LIBRARY MODULES * EXT RTMLC,$CON,DO#ON,RT.G1 * ENT DU#MY * * * RTMLG CLA STA GNSG1 WHERE RETURN FLAG STA LDSG3 WHICH ENTRY IN SEGMENT 3 STA GENRT INITIATOR FLAG STA GNFLG CONTINUATOR FLAG STA SEGFL LAST SEGMENT FLAG CLA,INA JSB GLWAM GET LAST WORD OF AVAILABLE MEMORY STA OPT.3 SAVE FOR FIXUP TABLE STA LWAMG ADA N3 STA FUT4 CLA STA OPT.3,I SET NUMBER OF FIXUPS TO ZERO LDA P12 JMP LDSEG LOAD IN SEGMENT 1 * N3 DEC -3 P12 DEC 12 * DU#MY NOP DUMMY ENTRY FOR SYS GEN END RTMLG i  91740-18046 1740 S C0122 DS/1000 MODULE: RTML1              H0101 DASMB,R,L,C RTML1 * NAME: RTML1 RTE-M SEGMENTED GEN.-LOADER (SEGMENT 1) * SOURCE: 91740-18046 * RELOC: 91740-16046 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * * * HED RTE-M SYSTEM GENERATOR-LOADER NAM RTML1,5 91740-16046 REV 1740 770912 * * * * EXTERNAL REFERENCE NAMES * EXT ABL1,ABL2,.ABR,ABREC,ABRT1,AFILE,AL EXT ATBUF,BPAG4,BPLOC,BU#ER EXT CFILE,CKS,CLBPL,CMDLU,COML,CONSL,CONSO EXT DCB1,DCB2,DCB3,DCB4,DCB5,DCB6,DCB7 EXT ECFIL,ECHO1,ECHOS,EFILE,EMSAM,ERACT EXT ERDVC,ER#OR,FL1OP,FRTRU,FT#ME,FUTA,FWABP EXT FWAC,FWAM,GE#NA,GREAD,ICR,IDCB,IERR# EXT INACT,IN#CK,IN#RR,INTER,IOPTN,ISECU,JLU,KONSO EXT LBF10,LBUF5,LBUFA,LDGEN,LFILE,LGER2,LINTP EXT LISTO,LNKDR,LOCFS EXT LST,LSTA,LWABP,LWAC EXT MAPON,MEMRY,MLOCC,NAMR.,NBUF6,NBUFA EXT NBUFT,NXTC2,OFILE,OPEN1,OPFLA EXT OPFLB,OPFLC,OPFLD,OPFLE,OPFLF,OPFLG,OPFLH EXT OPNLU,OTFIL,OUTON,PNAMA,QBUFA EXT QQCNT,QQPTR,RBTA,RBTO,RT.G1,RTLG1,SCP EXT SERFG,SNAPS,SP#CE,STFER,TRUNC,TYPRO EXT UEXFL,UNDEF,WERR1,WRTBT,?XFER,XNAMA * EXT $CON,DTTY,$OPSY EXT DU#MY * EXT CREAT,OPEN * EXT PNAME * * BUFER EQU BU#ER ERROR EQU ER#OR FTIME EQU FT#ME GETNA EQU GE#NA IERR EQU IERR# INDCK EQU IN#CK INERR EQU IN#RR SPACE EQU SP#CE LOCC EQU MLOCC * SUP ************************************************************************ * * THIS SEGMENT OF THE RTE-M SEGMENTED LOADER AND * GENERATOR INITIALIZES ALL NECESSARY LOCATIONS, * REMOVES INDIRECT ADDRESS FOR DEFS AND PROCESSES * THE LOADER AND GENERATOR ON PARAMETERS. CONTROL * IS RETURNED TO EITHER THE LOADER OR GENERATOR MAIN. * * ******************************************************************** HED RTM LOADER UTILITY SUBROUTINES SKP RTML1 NOP NOP JSB LGUNT INITIALIZE LOADER OR GEN JSB SPACE GEN? JSB INTER LDA P14 LDB MES09 JSB GREAD LDA N2 JSB GETNA CCB CPA GE CLB CPA LO CLB,INB SSB,RSS JMP GEN1 JSB INERR JMP GEN? GEN1 STB LDGEN SZB,RSS JMP RTLG1 STB LNKDR JMP RT.G1 * GE ASC 1,GE LO ASC 1,LO * MES09 DEF *+1 ASC 7,* GEN OR LOAD? * N2 DEC -2 P14 DEC 14 * * * SUBROUTINE TO INITIALIZE LOADER SUBCONTROL * * INIT NOP LDA ABL2 REMOVE JSB INDCK STA ABL2 LDA .ABR JSB INDCK STA .ABR LDA ATBUF JSB INDCK STA ATBUF LDA BPAG4 JSB INDCK INDIRECT STA BPAG4 LDA BUFER JSB INDCK STA BUFER LDA DCB1 JSB INDCK STA DCB1 LDA DCB2 JSB INDCK STA DCB2 ADDRESSES LDA DCB3 JSB INDCK STA DCB3 LDA DCB4 JSB INDCK STA DCB4 LDA DCB5 JSB INDCK STA DCB5 LDA DCB6 FOR JSB INDCK STA DCB6 LDA DCB7 JSB INDCK STA DCB7 LDA FUTA JSB INDCK STA FUTA LDA LBF10 JSB INDCK DEFS STA LBF10 LDA LBUF5 JSB INDCK STA LBUF5 LDA LBUFA JSB INDCK STA LBUFA LDA LSTA JSB INDCK STA LSTA LDA MEMRY JSB INDCK STA MEMRY LDA NBUF6 JSB INDCK STA NBUF6 LDA NBUFA JSB INDCK STA NBUFA LDA NBUFT  JSB INDCK STA NBUFT LDA PNAMA JSB INDCK STA PNAMA LDA QBUFA JSB INDCK STA QBUFA LDA RBTA JSB INDCK STA RBTA LDA RBTO JSB INDCK STA RBTO LDA XNAMA JSB INDCK STA XNAMA LDB BUFER STB PRMAD LDA B4 INITIALIZE TO INPUT/DEVICE FILE MODE STA CMDLU LDA B100 STA FWABP FIRST WORD OF AVAILABLE BASE PAGE LDA B1646 STA LWABP LAST WORD OF AVAILABLE BASE PAGE LDA B2000 STA FWAM FIRST WORD OF AVAILABLE MEMORY JSB CLBPL CLEAR BASE PAGE LINKS LDA OPFLA SET FOR NO PAUSE AND UDFE JSB PAUSE LDA ABL2 STA ABL1 CLA STA LISTO INITIALIZE MAP OUTPUT STA UNDEF START SEARCH AT BEGINING OF LST STA LINTP LINKS IN FLAG (SET TO BASE) STA FWAC FIRST WORD OF COMMON STA LWAC LAST WORD OF COMMON STA FRTRU FIRST TIME THRU FLAG STA ?XFER "HAVE MAIN FLAG" STA LOCC PROGRAM RELOCATION BASE STA BPLOC BASE PAGE RELOCATION BASE STA COML "COMMON USED" FLAG STA LST,I LOADER SYMBOL TABLE LENGTH STA ECHO1 ECHO OFF STA NAMR. ALLOW A NAM RECORD STA MAPON MAP OFF STA AL CLEAR MAP FILE NAME STA ECFIL CLEAR ECHO FILE NAME STA EMSAM MAP/ECHO FILE OFF STA OUTON ABSOLUTE OUTPUT FILE CLOSED STA INACT SET INPUT TO NON-INTERACTIVE STA FL1OP CLEAR COMMAND FILE OPEN BIT STA ERDVC CLEAR ERROR LOG DEVICE STA OPEN1 CLEAR COMMAND FILE OPEN BIT STA FTIME OUTPUT TYOFF REC ONLY AT START STA ISECU SECURITY CODE STA ICR LABEL STA WRTBT NO RELOCATION YET STA TRUNC DON'T TRUNCATE ON ABORT STA ABREC CLEAR RECORD LENGTH STA CKS CLEAR CHECK SUM STA TY}&PRO SET TO ANY TYPE MODULE ALLOWED STA CONSO GET INPUT FROM SESSION CONSOLE STA SERFG LIBRARY LOAD FLAG STA UEXFL UNDEFINED EXTERNALS STA PNAME PROGRAM NAME STA KONSO END OF INPUT FILE FLAG JMP INIT,I * B4 OCT 4 B100 OCT 100 B1646 OCT 1646 B2000 OCT 2000 UDFE OCT 77777 * PRMAD NOP SKP * * * STORE NOP LDB LU ASCII LU STB OTFIL,I ISZ OTFIL LDB .. ASCII .. STB OTFIL,I ISZ OTFIL STA OTFIL,I LU JMP STORE,I * LU ASC 1,LU .. ASC 1,.. SKP * * * SUBROUTINES TO OPEN FILES * * OPFL1 NOP CLA,INA STA OPEN1 COMMAND INPUT CALLING LDA OPFLA STA OPFLM LDA CFILE OPEN COMMAND FILE LDB DCB1 JSB OPNFL OPFLM OCT 410 KEYBOARD ECHO CLA,INA SET COMMAND FILE TO OPEN STA FL1OP CLA STA OPEN1 CLEAR COMMAND INPUT CALLING JMP OPFL1,I * * * * OPFL8 NOP LDA OPFLH STA OPFLT LDA EFILE OPEN ERROR/PROMPT FILE LDB DCB7 JSB OPNFL OPFLT OCT 610 PRINT 1ST COLUMN KEYBOARD ECHO JMP OPFL8,I SKP SKP * * * OPEN FILES * * A REG = ADDRESS OF FILE NAME ARRAY * B REG = ADDRESS OF DATA CONTROL BLOCK * * OPNFL NOP STA AFILE SAVE ADDRESS OF FILE STB IDCB SAVE ADDRESS OF DCB LDA OPNFL,I STA IOPTN OPEN OPTION ISZ OPNFL JSB OPEN OPEN FILE DEF *+7 RETURN ADDRESS DEF IDCB,I DCB DEF IERR ERROR CODE DEF AFILE,I ADDRESS OF FILE DEF IOPTN OPEN OPTION DEF ISECU SECURITY CODE DEF ICR LABEL SSA JMP OPN1 OPEN ERROR LDA OPFLA AND UDFE CLEAR PAUSE BIT JSB PAUSE JMP OPNFL,I * OPN1 CPA M100 JMP OPN7 JSB OPNLU CHECK IF LU W JMP OPN8 NOT LUUU JMP OPNFL,I LU, EXIT OPN8 LDB OPEN1 COMMAND INPUT CALLING? CPB B1 JMP ABRT0 YES, ABORT LDB OPFLA SSB BEEN HERE ALREADY? JMP OPN2 YES, FILE NOT FOUND CPA MD6 OPEN ERROR (6)? RSS JMP ERROE NO, OPEN ERROR LDA OPFLA SET PAUSE BIT IOR C1000 JSB PAUSE OPN4 CLA STA QQCNT RESET INPUT BUFFER LDA QBUFA STA QQPTR LDA QBUFA,I GET FIRST CHARACTER ALF,ALF AND B177 CPA B55 IS COMMAND ID SUPPLIED? ISZ QQCNT YES--BUMP CHAR. POINTER JMP NXTC2 * OPN2 LDA OPFLA CLEAR PAUSE BIT AND UDFE JSB PAUSE LDA AFILE CPA OFILE OPENING OUTPUT FILE? JMP OPN3 YES LDB B4 CPA SNAPS OPENING SNAP FILE? JMP OPN6 YES CPA LFILE OPENING MAP FILE? JMP OPN6 CPA ECHOS OPENING ECHO FILE? JMP OPN6 YES OPN5 LDA FN FILE NOT FOUND LDB IERR ERROR CODE JSB ERROR JMP CONSL TRY AGAIN * OPN3 LDA D300 LDB LDGEN LOADER CALLING? SZB LDA D30 YES LDB B7 RSS OPN6 LDA D15 JSB CRETE GO TRY TO CREATE FILE JMP OPN4 * OPN7 LDA DI LDB IERR ERROR CODE JSB ERROR JMP CONSL DISK INITIALIZATION ERROR * ERROE LDA OE LDB IERR ERROR CODE JMP WERR1 * ABRT0 LDA OE OPEN FILE ERROR LDB IERR ERROR CODE JSB ERROR JMP ABRT1 * MD6 DEC -6 B1 OCT 1 B7 OCT 7 B55 OCT 55 B177 OCT 177 * D15 DEC 15 D30 DEC 30 C1000 OCT 100000 * * CREATE OUTPUT FILE IF IN FLOPPY ENVIRONMENT * CRETE NOP STA DSIZE FILE SIZE STB ITYPE TYPE OF FILE 4=ASCII 7=ABS JSB CREAT CREATE FILE DEF *+8 DEF IDCB,I DCB DEF IERR DEF AFIL|E,I ADDRESS OF FILE DEF DSIZE FILE SIZE DEF ITYPE TPE OF FILE DEF ISECU SECURITY CODE DEF ICR LABEL CPA MD200 JMP OPN5 CAN'T CREATE FILE ON NON-FLOPPY SSA,RSS JMP CRETE,I * LDA CR CREATE ERROR LDB IERR ERROR CODE JSB ERROR JMP CONSL * CR ASC 1,CR DI ASC 1,DI * MD200 DEC -200 M100 DEC -100 D300 DEC 300 * DSIZE NOP ITYPE NOP SKP * OE ASC 1,OE OPEN FILE ERROR FN ASC 1,FN FILE NOT FOUND ERROR * * * SUBROUTINE TO ADD/DELETE PAUSE BIT FROM CONTROL WORDS * PAUSE NOP STA OPFLA STA OPFLF XOR B500 STA OPFLB IOR B200 STA OPFLC XOR B100 STA OPFLD STA OPFLE STA OPFLG IOR B400 STA OPFLH JMP PAUSE,I * B200 OCT 200 B400 OCT 400 B500 OCT 500 HED *** FILE PROCESSORS *** * * SUBROUTINE TO GET INPUT COMMAND DEVICE AND ERROR-PROMPT * DEVICE.LAST PARAMETER DETERMINES IF PROGRAM IS IN A * PARTITION AND IF SSGA AND SYSTEM COMMON NEEDED. * * LGUNT NOP JSB INIT INITIALIZE LOADER SUBCONTROL LDA PRMAD,I SZA,RSS IF NO INPUT DEVICE/FILE USE JMP LGUNA SESSION CONSOLE FOR INPUT LGUNB STA INDVC SZA SSA JMP LGER1 NOT VALID LU OR FILE NAME CMA,INA ADA BLANK SSA LU OR FILE NAME? JMP LGUN1 MUST BE FILE NAME LDA INDVC JSB INTR1 DETERMINE IF INTERACTIVE INPUT LDA INDVC INPUT COMMAND LU LDB $OPSY GET TYPE OF OPERATING SYSTEM CPB M7 RTE-MI? JMP LGUN9 YES CPB M15 RTE-MII? JMP LGUN9 YES CPB M5 RTE-MIII? JMP LGUN9 YES LDB INACT INTERACTIVE INPUT? SZB STA $CON,I YES, SAVE LU FOR MESSAGES LGUN9 LDB CFILE ADDRESS OF INPUT COMMAND FILE NAME JSB FILNM  GET DEFAULT FILE NAME ISZ PRMAD ISZ PRMAD ISZ PRMAD INCREMENT PARAMETER ADDRESS TO 4TH PARAM. LGUN2 JSB OPFL1 OPEN COMMAND INPUT FILE JSB GETVL GET ERROR LOG DEVICE LU STA ERDVC SZA,RSS ANY ERROR/PROMPT LOG DEVICE? JMP LGUN4 NO, USE INPUT COM. DEV. IF POSSIBLE LDA ERDVC ERROR-PROMPT LOG DEVICE LU LDB EFILE ADDRESS OF ERROR LOG FILE NAME JSB FILNM GET DEFAULT FILE NAME JSB OPFL8 OPEN ERROR/PROMPT FILE LDA ERDVC GET ERROR LOG LU JSB DTTY CHECK IF INTERACTIVE CLB,INB INTERACTIVE SZA,RSS CLB NON-INTERACTIVE STB ERACT LGUN7 JSB GETVL LDB 0 CLA 0 = MEMORY RESIDENT SLB INA 1 = PROGRAM IN PARTITION RBR,SLB IOR B2 2 = USES SYSTEM COMMON RBR,SLB IOR B4 4 = USES SSGA RBR,SLB IOR B10 8 = LOAD WITH DEBUG STA SCP AND B10 JMP LGUNT,I LGUNA LDA $CON,I SESSION CONSOLE AND B77 JMP LGUNB * LGUN1 LDA CFILE STA FILEI LDA M3 STA COUNT LGUN3 LDB PRMAD GET PARAMETER ADDRESS LDA 1,I GET NEXT TWO CHARACTERS OF INPUT SZA,RSS COMMAND FILE LDA BLANK NO MORE CHARACTERS IN FILE NAME STA FILEI,I SAVE FILE NAME FOR OPEN CALL ISZ FILEI ISZ PRMAD ISZ COUNT JMP LGUN3 PROCESS NEXT TWO CHARACTERS CLA STA INDVC SET TO FILE FOR INPUT JMP LGUN2 * * LGUN4 STA ERACT NON-INTERACTIVE ERROR LOG LDA INDVC GET INPUT LU SZA,RSS JMP LGUN5 NO LU, INPUT MUST BE FILE LGUN8 JSB INTR1 IS DEVICE INTERACTIVE? JMP LGUN7 LGUN5 LDA DCB1 INA LDA 0,I GET FILE TYPE SZA JMP LGUN7 NOT TYPE 0, NOT INTERACTIVE LDA DCB1 JSB LOCFS SSA JMP LGER2 A0.*LDA JLU GET LU OF FILE NAME JMP LGUN8 * * M5 DEC -5 M7 DEC -7 M15 DEC -15 SPC 5 SKP * * LGER1 LDA ON CLB NO FMP ERROR JSB STFER OUTPUT ERROR TO SYSTEM CONSOLE JMP ABRT1 TERMINATE LOADER EXECUTION * ON ASC 1,ON * BLANK ASC 1, * B2 OCT 2 B10 OCT 10 B77 OCT 77 M3 DEC -3 * COUNT NOP INDVC NOP FILEI NOP * * SUBROUTINE TO GET VALUES FROM ON COMMMAND * * B REGISTER CONTAINS ADDRESS OF NEXT PARAMETER * GETVL NOP LDB PRMAD ADDRESS OF NEXT PARAMETER LDA 1,I PARAMETER VALUE ISZ PRMAD JMP GETVL,I * * * SUBROUTINE TO DETERMINE IF INPUT DEVICE IS INTERACTIVE * * INTR1 NOP JSB DTTY CLB,INB INTERACTIVE SZA,RSS CLB NON-INTERACTIVE STB INACT JMP INTR1,I SKP * * * SUBROUTINE TO GET FILE NAMES * * FILNM NOP STB OTFIL SET DESTINATION ADDRESS CLB STB HDGIT FIL01 ADA M10 CONVERT LU TO ASCII TWO DIGITS SSA JMP FIL02 ISZ HDGIT JMP FIL01 FIL02 ADA D10 IOR B60 MAKE ASCII STA LDGIT LDA HDGIT IOR B60 ALF,ALF IOR LDGIT JSB STORE SAVE LU IN ARRAY JMP FILNM,I * HDGIT NOP HIGH ASCII CHARACTER LDGIT NOP LOW ASCII CHARACTER * M10 DEC -10 B60 OCT 60 D10 DEC 10 * END RTML1 ]0   91740-18047 1740 S C0222 DS/1000 MODULE: RTML2              H0102 EASMB,R,L,C RTML2 * NAME: RTML2 RTE-M SEGMENTED GEN.-LOADER (SEGMENT 2) * SOURCE: 91740-18047 * RELOC: 91740-16047 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * * * * HED RTE-M SYSTEM GENERATOR-LOADER NAM RTML2,5 91740-16047 REV 1740 770912 * ENT RTML2 * * EXTERNAL REFERENCE NAMES EXT ABRT1,ADTRP,AFILE,AL EXT ATTBL,BAKUP,BLINE,BPAGA,BPLOC EXT CLFL4,CLFL5,CLFL6 EXT CMDLU,CMER,CONSL EXT DCB2,DCB3,DCB4,DCB5,DCB6,DIAG2 EXT ECFIL,ECHO1,ECHOS,EMSAM,ERREX,ER#OR,FRTRU,FUT4 EXT FWABP,FWAC,FWAM,ICR,IDCB,IERR#,IFILE EXT IOPTN,ISECU,JLU,JMPNO,KTABL EXT LBUFA,LDGEN,LDSEG,LDSG3,LER3,LER5 EXT LFILE,LIBFL,LINTP,LISTO,LITBL,LNKDR EXT LOCFS,LST,LST1,LST2,LST3 EXT LST4,LST5 EXT LSTUL,LTABL EXT LWABP,LWAC,LWAM,MAPON,MAPS EXT MEMRY,MLOCC,MTABL EXT NBUF,NBUFA,NCHAR EXT NSCAN,NXTC,NXTC2,NXTCM EXT OFILE,ONTBL,OPEN1 EXT OPFLA,OPFLB,OPFLC,OPFLD,OPFLE EXT OPFLF,OPNLU EXT OTFIL,OUTON EXT QBUFA,QGETC,QQCNT EXT QQPTR,RBTA,RIC EXT SCAN,SCP,SEGFL,SERNM EXT SNAPS,SSTBL,STABL,TOTBL EXT TRANS,WERR1 EXT XNAM,XNAMA * EXT CREAT,OPEN,PARSE EXT DU#MY * * B EQU 1 ERROR EQU ER#OR IERR EQU IERR# LOCC EQU MLOCC SUP ************************************************************************ * * THIS SEGMENT OF THE RTE-M SEGEMNTED LOADER AND GENERATOR * PROCESSES ALL LOADER COMMANDS (SET, REL, TR, ETC.). * HOWEVER THIS SEGMENT DOES NOT PERFORM RELOCATION. * CONTROL IS RETURNED TO EITHER THE LOADER OR GENERATOR * MAIN IF NO RELOCATION OCCURS. IF RELOCATION (REL OR * SEARCH COMMAND) IS NEEDED, THIS SEGMENT WILL CALL * FOR LOADER SEGMENT 3 (RTML3) TO BE LOADED IN TO * PERFORM THE RELOCATION. * ******************************************************************** HED RTM LOADER UTILITY SUBROUTINES SPC 5 SKP RTML2 NOP NOP CLA,INA STA SEGFL SET LAST SEGMENT FLAG LDA JMPNO ADA PTABL LDA 0,I JMP 0,I * LDRIN CLA STA LDSG3 SET FOR RELOCATION ENTRY STA SEGFL LAST SEGMENT FLAG LDA B3 LOAD IN LOADER SEGMENT 3 JMP LDSEG * B3 OCT 3 SKP ***** * * BRANCH TABLE FOR COMMAND PROCESSORS. * ORDER OF THIS TABLE MUST CONFORM TO ORDER OF FIRST ENTRIES IN * COMMAND MNEMONIC TABLE. * ***** PTABL DEF * DEF BNDST BOUNDS STATEMENT DEF MAPST MAP STATEMENT DEF RELST RELOCATE STATEMENT DEF RELST RELOCATE STATEMENT DEF SERST SEARCH STATEMENT DEF OUTST OUTPUT STATEMENT DEF TR TRANSFER STATEMENT DEF TR TRANSFER STATEMENT DEF SETST SET STATEMENT DEF LINST LINKS IN STATEMENT DEF LNKST LINKS STATEMENT DEF EXIT EXIT STATEMENT DEF ECHO ECHO STATEMENT SKP ***** * ** MOVE. ** MOVE BLOCK OF CHARS FROM INPUT BUFFER (QIBUF) TO A * SPECIFIED LOCATION. STOP AT FIRST DELIMITER. * CALLING SEQUENCE: * * LDA ADDRESS OF DESTINATION * JSB MOVE. * RETURN * ***** MOVE. NOP STA MOVE3 SAVE DESTINATION ADDRESS JSB NXTC GET NEXT NON BLANK CHAR JMP CMER NONE FOUND MOV01 ALF,ALF POSITION CHAR TO LEFT, STA MOVE3,I AND STORE IN OUTPUT BUFFER JSB QGETC GET NEXT CHAR JMP MOV03 END OF LINE CPA B40 BLANK? JMP MOV02 CPA B54 COMMA? JMP MOϑV02 CPA B51 RIGHT PAREN? JMP MOV02 CPA B50 LEFT PAREN? JMP MOV02 YES CPA B72 COLON? JMP MOV02 YES IOR MOVE3,I PUT LOWER HALF STA MOVE3,I IN BUFFER JSB QGETC GET NEXT CHAR JMP MOV03 END OF LINE CPA B40 BLANK? JMP MOV02 CPA B54 COMMA? JMP MOV02 CPA B51 RIGHT PAREN? JMP MOV02 CPA B50 LEFT PAREN? JMP MOV02 YES CPA B72 COLON? JMP MOV02 YES ISZ MOVE3 BUMP OUTPUT POINTER JMP MOV01 KEEP GOING MOV02 JSB BAKUP BACK UP OVER LAST CHAR MOV03 LDA MOVE3,I WAS LAST CHAR AND UPCM CPA MOVE3,I AN EVEN NUMBERED CHAR? RSS JMP MOVE.,I YES, BUFFER IS OK IOR B40 NO, APPEND A BLANK STA MOVE3,I AND STORE IT AWAY JMP MOVE.,I * MOVE3 NOP DESTINATION ADDRESS * B40 OCT 40 B50 OCT 50 B51 OCT 51 B54 OCT 54 B72 OCT 72 SPC 1 SKP * * * SUBROUTINE TO DETERMINE IF INPUT IS OCTAL OR ASCII * * OCTAS NOP STA 1 AND B377 ADA M60 SSA JMP OCTAS,I ASCII ADA M10 SSA,RSS JMP OCTAS,I MUST BE ASCII, EXIT ISZ OCTAS OCTAL JMP OCTAS,I * B377 OCT 377 M10 DEC -10 M60 OCT -60 * * * STORE NOP LDB LU ASCII LU STB OTFIL,I ISZ OTFIL LDB .. ASCII .. STB OTFIL,I ISZ OTFIL STA OTFIL,I LU JMP STORE,I * LU ASC 1,LU .. ASC 1,.. SKP * * * SUBROUTINES TO OPEN FILES * * * * * OPFL2 NOP LDA OPFLB STA OPFLN LDA OFILE OPEN ABSOLUTE OUTPUT FILE LDB DCB2 JSB OPNFL OPFLN OCT 110 BINARY OUTPUT JMP OPFL2,I * * * OPFL3 NOP LDA OPFLC STA OPFLO LDA IFILE OPEN INPUT (REL/SEARCH) FILE LDB DCB3 JSIB OPNFL OPFLO OCT 310 BINARY INPUT JMP OPFL3,I * * * OPFL4 NOP LDA OPFLD STA OPFLP LDA LFILE OPEN LIST (MAP) - PROMPT FILE LDB DCB4 JSB OPNFL OPFLP OCT 210 PRINT 1ST COLUMN CLA,INA SET FOR MAP JMP OPFL4,I * * * OPFL5 NOP LDA OPFLE STA OPFLQ LDA ECHOS OPEN ECHO FILE LDB DCB5 JSB OPNFL OPFLQ OCT 210 PRINT 1ST COLUMN CLA,INA SET FOR ECHO JMP OPFL5,I * * * OPFL6 NOP LDA OPFLF STA OPFLR LDA TRANS OPEN TRANSFER FILE LDB DCB6 JSB OPNFL OPFLR OCT 410 KEYBOARD ECHO JMP OPFL6,I * * * * SKP SKP * * * OPEN FILES * * A REG = ADDRESS OF FILE NAME ARRAY * B REG = ADDRESS OF DATA CONTROL BLOCK * * OPNFL NOP STA AFILE SAVE ADDRESS OF FILE STB IDCB SAVE ADDRESS OF DCB LDA OPNFL,I STA IOPTN OPEN OPTION ISZ OPNFL JSB OPEN OPEN FILE DEF *+7 RETURN ADDRESS DEF IDCB,I DCB DEF IERR ERROR CODE DEF AFILE,I ADDRESS OF FILE DEF IOPTN OPEN OPTION DEF ISECU SECURITY CODE DEF ICR LABEL SSA JMP OPN1 OPEN ERROR LDA OPFLA AND UDFE CLEAR PAUSE BIT JSB PAUSE JMP OPNFL,I * OPN1 CPA M100 JMP OPN7 LDB OPEN1 COMMAND INPUT CALLING? CPB B1 JMP ABRT0 YES, ABORT LDB OPFLA SSB BEEN HERE ALREADY? JMP OPN2 YES, FILE NOT FOUND CPA MD6 OPEN ERROR (6)? RSS JMP ERROE NO, OPEN ERROR LDA OPFLA SET PAUSE BIT IOR C1000 JSB PAUSE OPN4 CLA STA QQCNT RESET INPUT BUFFER LDA QBUFA STA QQPTR LDA QBUFA,I GET FIRST CHARACTER ALF,ALF AND B177 CPA B55 IS COMMAND ID SUPPLIED?  ISZ QQCNT YES--BUMP CHAR. POINTER JMP NXTC2 * OPN2 LDA OPFLA CLEAR PAUSE BIT AND UDFE JSB PAUSE JSB OPNLU CHECK IF LU JMP OPN8 NOT LU JMP OPNFL,I LU,EXIT OPN8 LDA AFILE CPA OFILE OPENING OUTPUT FILE? JMP OPN3 YES LDB B4 CPA SNAPS OPENING SNAP FILE? JMP OPN6 YES CPA LFILE OPENING MAP FILE? JMP OPN6 CPA ECHOS OPENING ECHO FILE? JMP OPN6 YES OPN5 LDA FN FILE NOT FOUND LDB IERR ERROR CODE JSB ERROR JMP CONSL TRY AGAIN * OPN3 LDA D300 LDB LDGEN LOADER CALLING? SZB LDA D30 YES LDB B7 RSS OPN6 LDA D15 JSB CRETE GO TRY TO CREATE FILE JMP OPN4 * OPN7 LDA DI LDB IERR ERROR CODE JSB ERROR JMP CONSL DISK INITIALIZATION ERROR * ERROE LDA OE LDB IERR ERROR CODE JMP WERR1 * ABRT0 LDA OE OPEN FILE ERROR LDB IERR ERROR CODE JSB ERROR JMP ABRT1 * MD6 DEC -6 B1 OCT 1 B7 OCT 7 B55 OCT 55 B177 OCT 177 * D15 DEC 15 D30 DEC 30 C1000 OCT 100000 UDFE OCT 77777 * * CREATE OUTPUT FILE IF IN FLOPPY ENVIRONMENT * CRETE NOP STA DSIZE FILE SIZE STB ITYPE TYPE OF FILE 4=ASCII 7=ABS JSB CREAT CREATE FILE DEF *+8 DEF IDCB,I DCB DEF IERR DEF AFILE,I ADDRESS OF FILE DEF DSIZE FILE SIZE DEF ITYPE TPE OF FILE DEF ISECU SECURITY CODE DEF ICR LABEL CPA MD200 JMP OPN5 CAN'T CREATE FILE ON NON-FLOPPY SSA,RSS JMP CRETE,I * LDA CR CREATE ERROR LDB IERR ERROR CODE JSB ERROR JMP CONSL * CR ASC 1,CR DI ASC 1,DI * MD200 DEC -200 M100 DEC -100 D300 DEC 300 * DSIZE NOP ITYPE NOP SKP * OE ASC 1,OE OPEN FILE ERROR FN ASC 1,FN FILE NOT FOUND ERROR * * * SUBROUTINE TO ADD/DELETE PAUSE BIT FROM CONTROL WORDS * PAUSE NOP STA OPFLA STA OPFLF XOR B500 STA OPFLB IOR B200 STA OPFLC XOR B100 STA OPFLD STA OPFLE JMP PAUSE,I * B100 OCT 100 B200 OCT 200 B500 OCT 500 SKP * ***** * ** DELIM ** ADVANCE POINTERS TO ASCII INPUT BUFFER PAST NEXT * DELIMITER. ACCEPTABLE DELIMITERS ARE A COMMA, ONE OR * MORE BLANKS, OR A COMMA EMBEDDED IN BLANKS. * CALLING SEQUENCE: * * JSB DELIM * RETURN1 NOTHING BUT BLANKS TO END OF LINE * RETURN2 DELIMITER FOUND * * NOTE: IF NO VALID DELIMITER IS FOUND (OR COMMA WITH NOTHING BUT * BLANKS TO THE END OF LINE) A DIRECT JUMP TO THE COMMAND * ERROR ROUTINE WILL RESULT. THUS CONTROL MAY NOT BE RETURNED ***** DELIM NOP JSB QGETC GET THE NEXT CHAR JMP DELIM,I END OF LINE , RETURN (P+1) LDB M2 INITIALIZE STB STMP1 COMMA COUNTER CPA B40 IS THIS A BLANK? JMP DEL01 YES CPA B54 NO, IS IT A COMMA? RSS JMP CMER NO, ERROR ISZ STMP1 DEL01 JSB NXTC GET NEXT NON BLANK CHAR JMP DEL02 END OF LINE CPA B54 GOT ONE, IS IT A COMMA? RSS JMP DEL03 NO ISZ STMP1 YES, IS IT THE SECOND ONE? JMP DEL01 NO, GET NEXT NON BLANK CHARACTER DEL03 JSB BAKUP YES, BACK UP BUFFER POINTERS ISZ DELIM AND EXIT (P+2) JMP DELIM,I DEL02 ISZ STMP1 WAS THERE A COMMA? JMP DELIM,I NO, EXIT (P+1) JMP CMER YES, ERROR * STMP1 NOP COMMA COUNTER * M2 DEC -2 SKP * * * SUBROUTINE TO PARSE COMMAND * * CALLING SEQUENCE * * A REG = DEFAULT LU OR 0 IF DEFAULT NOT ALLOWED * B REG = ADDRESS OF FILE NAME ARRAY * * JSB FILE * (P+1) = GTFIL IOPTN PARAMETER (WHICH FILE) * RETURN 1 = COMMAND (LU) - GET FILE NAME * RETURN 2 = OPEN FILE * * FILE NOP STA OUTFL SAVE DEFAULT LU STB OTFIL SAVE ADDRESS OF FILE NAME ARRAY JSB NXTC GET NEXT NON-BLANK CHARACTER JMP FILE4 NO MORE LDB OTFIL CPB TRANS TRANSFER COMMAND? JMP FILE2 YES JSB BAKUP BACKUP INPUT BUF TO PREV. CHAR. LDB OTFIL CPB IFILE RELOCATE/SEARCH COMMAND? JMP FILE1 YES CPB LFILE MAP? JMP FILE1 YES CCA OUTPUT, SNAP, OR DISPLAY COMMAND CPB ECHOS ECHO COMMAND? LDA M2 YES LDB ONTBL SEARCH FOR ON OR OFF JSB SCAN JMP CMER ERROR EXIT CPA B2 OFF? JMP FILE3 YES FILE1 JSB ASOCT ASCII OR OCTAL? JMP ASKEY ASCII LDA TCHAR LU JSB STORE JMP FILE,I ASKEY JSB ASCII MOVE FILE NAME TO JMP FILE,I FILE NAME ARRAY AND EXIT FILE2 CPA B54 COMMA? JMP FILE1 YES FILE3 LDB FILE ADB B4 SET RETURN ADDRESS CLA ECHO OFF JMP B,I EXIT FILE4 LDA OUTFL USE DEFAULT LU JSB STORE JMP FILE,I * OUTFL NOP LOGICAL UNIT NUMBER TCHAR NOP * B2 OCT 2 B4 OCT 4 SKP * * * SUBROUTINE TO GET NEXT OCTAL OR ASCII CHARACTER * * ASOCT NOP JSB NXTC GET NEXT CHARACTER JMP CMER NO MORE, ERROR EXIT JSB OCTAS JMP ASOCT,I ASCII INPUT STB TCHAR SAVE FIRST DIGIT JSB NXTC GET NEXT CHARACTER JMP ASOC1 NO MORE, ONE DIGIT LU JSB OCTAS JMP CMER ASCII, ERROR EXIT LDA TCHAR COMBINE WITH PREVIOUS DIGIT ALF,ALF IOR 1 ODGIT STA TCHAR ISZ ASOCT JMP ASOCT,I * ASOC1 LDA TCHAR IOR B30K JMP ODGIT * B30K OCT 30000 * * * * * SUBROUTINE TO MOVE FILE NAME FROM INPUT BUFFER 9 * TO FILE NAME ARRAY * * ASCII NOP JSB BAKUP BACKUP INPUT BUFFER TO PREVIOUS CHARACTER LDA OTFIL LDB BLANK SET FILE NAME TO BLANKS INA STB 0,I INA STB 0,I LDA OTFIL MOVE FILE NAME FROM INPUT BUFFER JSB MOVE. TO FILE NAME ARRAY JMP ASCII,I NO MORE CHARACTERS * BLANK ASC 1, SKP * * * SUBROUTINE TO ADJUST CORE BOUNDS TO NEXT PAGE FOR * USER PROGRAM IF IT DOESN'T START ON PAGE BOUNDARY. * * PAGE NOP STA 1 AND C076 GET PAGE BITS CPA 1 STARTS AT PAGE BOUNDARY? JMP PAGE,I YES, EXIT CPA C076 STARTS SOMEWHERE ON LAST PAGE? JMP LER3 MEMORY OVERFLOW ADA B2000 BEGIN ON NEXT PAGE JMP PAGE,I * B2000 OCT 2000 C076 OCT 76000 SKP * * SUBROUTINES TO PARSE FILE NAMES FOR SECURITY CODE * AND LABEL. * PNMRC NOP CLA STA ISECU INITIALIZE SECURITY CODE AND STA ICR LABEL JSB PNMRA GET 1ST OPTIONAL NAME PARAMETER JMP PNMRC,I NONE, EXIT STA ISECU SAVE SECUITY CODE JSB PNMRA GET 2ND OPTIONAL NAME PARAMETER JMP PNMRC,I NONE, EXIT STA ICR SAVE LABEL JMP PNMRC,I * * * PNMRA NOP JSB NXTC GET NEXT CHARACTER JMP PNMRA,I NO MORE CPA B72 COLON? JMP PNMR1 YES JSB BAKUP NO, BACKUP JMP PNMRA,I PNMR1 JSB NXTC GET NEXT CHARACTER JMP PNMRA,I NO MORE CPA B72 COLON? JMP PNMR2 YES, NO FIRST PARAMETER JSB BAKUP BACKUP LDA BLANK STA BUFA1+1 STA BUFA1+2 LDA BUFAD JSB MOVE. PUT ASCII CHARS IN BUFFER JSB PARSE PARSE INPUT DEF *+4 DEF BUFA1 DEF B6 DEF RBUF LDA RBUF+1 ISZ PNMRA JMP PNMRA,I * PNMR2 JSB BAKUP BACKUP CLA SET FOR NO PARAMETER ISZ PNMRA @ SET FOR NEXT PARAMETER JMP PNMRA,I * B6 OCT 6 * BUFAD DEF *+1 BUFA1 BSS 3 RBUF BSS 33 * SKP ***** * ** TRANSFER COMMAND PROCESSOR * ***** TR LDA CMDLU TRANSFER FILE OPEN? CPA B1 JSB CLFL6 YES, CLOSE IT LDA ASC01 - DEFAULT LU FOR TRANSFER FILE LDB TRANS TRANSFER FILE NAME ARRAY JSB FILE PARSE REQUEST JSB PNMRC GET OPTIONAL PARAMETERS JSB OPFL6 OPEN TRANSFER FILE CLA,INA STA CMDLU SET INPUT TO TRANSFER FILE JMP NXTCM GET NEXT COMMAND * ASC01 ASC 1,01 * * * * ***** * ** EXIT COMMAND PROCESSOR * ***** EXIT JMP ABRT1 * * * * ***** * ** OUTPUT COMMAND PROCESSOR * ***** OUTST LDA ASC04 - DEFAULT LU FOR OUTPUT FILE LDB OFILE OUTPUT FILE NAME ARRAY JSB FILE PARSE REQUEST JSB PNMRC GET OPTIONAL PARAMETERS JSB OPFL2 OPEN OUTPUT FILE CLA,INA STA OUTON JMP NXTCM GET NEXT COMMAND * ASC04 ASC 1,04 SKP ***** * ** RELOCATE ** SEARCH COMMAND PROCESSORS * ***** RELST CLA,RSS SET SEARCH FLAG OFF. SPC 1 SERST CLA,INA SET SEARCH FLAG ON. SPC 1 STA LIBFL STORE FLAG LDA OUTON OUTPUT OPEN? SZA,RSS JMP REL8 NO CLA STA RIC STA XNAM STA SERNM STA ADTRP TRAP ADDRESS LDA LDGEN GENERATOR OR LOADER? SZA,RSS JMP GENER GENERATOR LDA FRTRU FIRST TIME THRU? SZA JMP LOCST NO, DON'T SET CORE BOUNDS ISZ FRTRU SET FIRST TIME THRU FLAG LDA SCP GET SSGA, COMMON, PARTITION FLAG AND B7 SZA JMP REL1 REL2 STA FWAC MEM RES. (NO COMMON OR SSGA) STA LWAC REL1 SLA JMP REL3 LDA LOCC SZA,RSS LDA FWAM MEM RES. (COMMON AND OR SSGA) REL4 STA LOCC LDA BPLOC SZA,RSS LDA FWABP JMP REL5 REL3 LDB B2 START LINKS AT 2 STB BPLOC STB FWABP LDB UDFE SET LWAM = 77777 STB LWAM CPA B1 PARTITION (NO COMMON OR SSGA) JMP REL6 YES LDA LWAC PARTITION (COMMON AND OR SSGA) INA JSB PAGE ADJUST PAGE STA FWAM JMP REL4 REL6 LDB $SSGA IS $SSGA IN LST? JSB SSTBL GO SEARCH JMP REL7 NO, ERROR EXIT LDA LST4,I GET VALUE OF $SSGA JSB PAGE ADJUST PAGE STA FWAM LDB LOCC SZB,RSS STA LOCC CLA JMP REL2 REL7 LDB SSGA ERROR, $SSGA UNDEF JMP ERREX GENER LDA LOCC HAS LOCC BEEN SET YET? SZA JMP LOCST YES LDA FWAM NO--SET TO FWAM STA LOCC LDA FWABP ALSO SET BASE PAGE LDB LNKDR GET LINK DIRECTION FLAG CPB M1 SYSTEM OR USER LINKS? LDA LWABP SYSTEM LINKS REL5 STA BPLOC LOCST LDA ASC05 - DEFAULT LU FOR REL-SEARCH FILE LDB IFILE REL/SEARCH FILE NAME ARRAY JSB FILE PARSE REQUEST JSB PNMRC GET OPTIONAL PARAMETERS JSB OPFL3 OPEN REL/SEARCH FILE JSB NXTC GET NEXT NON-BLANK CHAR JMP LDRIN NO MORE CPA B50 LEFT PAREND? RSS YES JMP CMER NO--COMMAND ERROR LDA BLANK BLANK OUT XNAM STA XNAM+1 STA XNAM+2 LDA XNAMA JSB MOVE. * JSB NXTC GET NEXT NON BLANK CHAR JMP CMER NO MORE CPA B51 RIGHT PAREN? JMP LDRIN YES JMP CMER NO, ERROR * REL8 LDA OO CLB NO FMP ERROR JMP WERR1 OUTPUT NOT OPEN ERROR * OO ASC 1,OO * SSGA DEF *+2 $SSGA DEF *+2 OCT 13 ASC 6,$SSGA UNDEF * * * ASC05 ASC 1,05 * M1 DEC -1 SKP ***** * ** ECHO COMMAND PROCESSOR * ***** ECHO JSB ECHOO JMP NXTCM GET NEXT COMMA ND * * ECHOO NOP LDA ASC06 - DEFAULT LU FOR ECHO FILE LDB ECHOS ECHO FILE NAME ARRAY JSB FILE PARSE REQUEST JSB PNMRC GET OPTIONAL PARAMETERS CLB,INB JSB CKEMP CHECK IF MAP OPENED SAME FILE JSB OPFL5 OPEN ECHO FILE STA ECHO1 CLEAR IF ECHO OFF LDB EMSAM FILE SHARED BETWEEN MAP AND ECHO? SZB JMP ECHOO,I YES, DON'T CLOSE ECHO FILE SZA ECHO ON? JMP ECHOO,I YES, EXIT STA ECFIL CLEAR ECHO FILE NAME JSB CLFL5 CLOSE ECHO FILE JMP ECHOO,I * ASC06 ASC 1,06 * * SUBROUTINE TO CHECK IF ECHO AND MAP ARE THE SAME FILE. * IF YES, USE FIRST DCB OPENED FOR WRITING. * * CKEMP NOP JSB ECMA1 CHECK IF ECHO AND MAP ARE SAME FILE LDA EMSAM =1 IF MAP FILE AND ECHO FILE SZA,RSS ARE TO SAME FILE AND MAP FILE'S STB EMSAM DCB IS USED. =-1 IF ECHO'S DCB IS SZB,RSS USED. =0 IF FILE NAMES NOT SAME. JMP CKEMP,I CLA,INA ISZ CKEMP SET TO NOT OPEN FILE JMP CKEMP,I * SKP * * * SUBROUTINE TO DETERMINE IF MAP AND ECHO ARE THE SAME FILE * * ECMA1 NOP LDA AL DETERMINE IF ECHO AND MAP CPA ECFIL RSS JMP ECMA2 ARE THE SAME FILE LDA AL+1 CPA ECFIL+1 RSS JMP ECMA2 LDA AL+2 CPA ECFIL+2 JMP ECMA3 SAME ECMA2 CLB JMP ECMA1,I ECMA3 STB MPECS =1 IF MAP, =-1 IF ECHO CONTROL LDA DCB4 CPB M1 LDA DCB5 JSB LOCFS CHECK IF CARTRIDGE OR DISK FILE CLB LDA JLU SZA DEVICE FILE? LDB MPECS NO JMP ECMA1,I * MPECS NOP SKP ***** * ** MAP COMMAND PROCESSOR * * LISTO--CORE MAP LISTING FLAG * BIT 0 GLOBAL VARIABLES * 1 MODULES * 2 LINKS ***** MAPST CLA STA LISTO MAP1 LDA MD5 LDB MTABL JSB SCAN f JMP CMER NO MORE KEY WORDS STA B LDA LISTO CPB B1 MODULES? IOR B2 CPB B2 GLOBALS? IOR B1 CPB B3 LINKS? IOR B4 CPB B4 OFF? CLA RESET POINTER STA LISTO CPB B5 ON? JMP MAP2 YES JSB DELIM ADVANCE PAST DELIMITERS RSS JMP MAP1 MAP2 LDA LISTO ANY OPTION ON? SZA,RSS JMP NXTC1 NO, GET NEXT COMMAND LDA ASC06 - DEFAULT LU LDB LFILE MAP FILE NAME ARRAY JSB FILE PARSE REQUEST JSB PNMRC GET OPTIONAL PARAMETERS CCB JSB CKEMP JSB OPFL4 OPEN MAP FILE STA MAPON SET MAP ON LDA D15 LDB HEAD1+1 JSB MAPS LDA HEAD1 LDB HEAD2 JSB MAPS LDA HEAD1 LDB HEAD3 JSB MAPS LDA HEAD1 LDB HEAD4 JSB MAPS JMP NXTCM GET NEXT COMMAND NXTC1 LDA EMSAM MAP AND ECHO SAME FILE? SZA JMP NXTCM YES, GET NEXT COMMAND LDA MAPON MAP PREVIOUSLY ON? CPA B1 JSB CLFL4 YES, CLOSE MAP FILE CLA STA MAPON MAP OFF STA AL CLEAR MAP FILE NAME JMP NXTCM GET NEXT COMMAND SPC 1 HEAD1 DEC 63 # CHARS. IN EACH PRINT LINE. DEF *+1 ASC 8, PROGRAM MODULE HEAD2 DEF *+1 ASC 24, ENTRY LOW HIGH LOW HIGH ASC 8, CP LINKS HEAD3 DEF *+1 ASC 24, POINT MAIN MAIN BASE BASE ASC 8, LOW HIGH HEAD4 DEF *+1 ASC 24, ---------------------------------------------- ASC 8,--------------- * B5 OCT 5 MD5 DEC -5 SKP * * ***** * ** BOUNDS COMMAND PROCESSOR * ***** BNDST LDA MD6 LDB KTABL JSB SCAN JMP CMER NO MORE KEYWORDS ADA M1 ADA MEMRY COMPUTE ADDRESS STA NCHAR SAVE ADDRESS TEMPORARILY JSB NXNLHTC GET NEXT NON BLANK CHAR JMP CMER CPA B75 EQUAL SIGN? RSS JMP CMER NO,ERROR JSB NSCAN GET OCTAL NUMBER JMP CMER NO MORE CHARS. OR NOT NUMERIC SSA IS IT POSITIVE OR ZERO? JMP BER1 NO. ISSUE ERROR AND IGNORE. STA NCHAR,I LEGAL ADDRESS, POST VALUE AND JSB DELIM JMP NXTCM JMP BNDST LOOK FOR NEW PARAMETERS SPC 1 BER1 LDB ILBND ISSUE "IL BND" ERROR JSB DIAG2 JMP NXTCM AND GET NEXT COMMAND * ILBND DEF *+1 DEC 6 ASC 3,IL BND * B75 OCT 75 SKP !N***** * ** SET COMMAND PROCESSOR * ***** SETST CLA STA STMP LDA M2 LDB LTABL LOCC OR BPLOCC? JSB SCAN JMP SET01 NO, MUST BE SYM TAB ENTRY ADA RBTA YES, SAVE ADDRESS TO STA STMP PUT VALUE INTO JMP SET02 SET01 JSB BLINE BLANK OUT THE BUFFER LDA LBUFA THEN MOVE NAME TO BUF JSB MOVE. FOR LATER CHECKING SET02 CCA LDB TOTBL LOOK FOR "TO" JSB SCAN JMP CMER NOT FOUND, ERROR EXIT JSB NXTC GET NEXT CHARACTER JMP CMER NO MORE, ERROR EXIT JSB OCTAS DETERMINE IF ASCII OR OCTAL JMP SET05 ASCII JSB BAKUP BACKUP JSB NSCAN GET LINK VALUE JMP CMER SET06 STA SVAL SAVE VALUE LDB STMP IF SYM TAB ENTRY, SZB,RSS JMP SET03 THEN JUMP TO SET03 STA STMP,I ELSE SET VALUE INTO LOCC JMP NXTCM OR BPLOCC AND GET NEXT COMMAND SET05 JSB BAKUP BACKUP LDA NBUFA JSB MOVE. MOVE NAME TO BUFFER LDB NDEF GET CHARS "UN" CPB NBUF =? RSS JMP CMER NO, ERROR EXIT LDB NDEF+1 GET CHARS "DE" CPB NBUF+1 =? RSS JMP CMER NO, ERROR EXIT LDB NDEF+2 GET CHAR "F" XOR NBUF+2 AND UPCM SZA JMP CMER LDA UDFE JMP SET06 SET LINK VALUE TO UNDEF SET03 CLA SET FOR SET PROCESSOR JSB LNSET JMP NXTCM GET NEXT COMMAND * UPCM OCT 77400 * NDEF ASC 3,UNDEF SKP LNSET NOP STA LKOST 1=LINK, 0=SET PROCESSOR LDB LBUFA LOOK FOR SYMBOL IN JSB SSTBL SYMBOL TABLE JMP SET04 NOT FOUND LDA LST4 LDB LKOST LINK OR SET? SZB LDA LST5 LINK LDB SVAL GET LINK ADDRESS OR VALUE STB 0,I SAVE IN LST JMP NXTCM AND GET NEXT COMMAND SET04 LDA LSTUL CHECK CMA FOR ADA FUT4 SYMBOL  SSA TABLE JMP LER5 OVERFLOW LDA SVAL GET LINK ADDRESS OR VALUE LDB LKOST LINK OR SET? SZB JMP SET07 LINK STA LST4,I SET LINK VALUE STB LST5,I CLEAR LINK ADDRESS SET08 ISZ LST,I BUMP ENTRIES COUNTER LDB LBUFA LDA B,I STA LST1,I STORE FIRST 2 CHARS INB LDA B,I STA LST2,I STORE SECOND TWO CHARS INB LDA B,I AND UPCM ZERO OUT EXT ID NUMBER STA LST3,I AND STORE FIFTH CHAR JMP LNSET,I SET07 STA LST5,I SET LINK ADDRESS LDA UDFE SET LINK VALUE TO UNDEF STA LST4,I JMP SET08 * LKOST NOP 1 = LINK, 0 = SET STMP NOP SVAL NOP * SKP ***** * ** LINKS IN ** COMMAND PROCESSOR * ***** LINST LDA M2 LDB LITBL JSB SCAN LOOK FOR BASE OR CURRENT JMP CMER ADA M1 STA LINTP 0 = BASE, 1 = CURRENT JMP NXTCM GET NEXT COMMAND ***** * ** LINKS START AT ** COMMAND PROCESSOR * ***** LNKST CCA LDB STABL JSB SCAN LOOK FOR "START" JMP CMER CCA LDB ATTBL JSB SCAN LOOK FOR "AT" JMP CMER JSB NSCAN GET LINK ADDRESS JMP CMER STA SVAL AND SAVE IT JSB NXTC GET NEXT NON-BLANK CHAR JMP CMER CPA B54 IS IT A COMMA? RSS YES, GOOD JMP CMER NO, ERROR JSB NXTC GET NEXT CHARACTER JMP CMER NO MORE, ERROR EXIT JSB OCTAS DETERMINE IF OCTAL OR ASCII JMP ASSCI ASCII JSB BAKUP BACKUP JSB NSCAN GET LINK VALUE JMP CMER LDB SVAL GET LINK ADDRESS ADB BPAGA STA 1,I STORE VALUE IN LINK TABLE JMP NXTCM GET NEXT COMMAND ASSCI JSB BAKUP BACKUP JSB BLINE BLANK BUFFER LDA LBUFA JSB MOVE. MOVE NAME TO BUFFER CLA,INA SET FOR LINKS START AT JSc B LNSET COMMAND PROCESSOR JMP NXTCM GET NEXT COMMAND SKP END RTML2   91740-18048 1740 S C0322 DS/1000 MODULE: RTML3              H0103 FASMB,R,L,C RTML3 * NAME: RTML3 RTE-M SEGMENTED GENERATOR-LOADER (SEGMENT 3) * SOURCE: 91740-18048 * RELOC: 91740-16048 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * * * HED RTE-M SYSTEM GENERATOR-LOADER NAM RTML3,5 91740-16048 REV 1740 770912 * * ENTRY POINT NAMES ENT ENTPT,FIXUP * * EXTERNAL REFERENCE NAMES EXT AB#RT,ABRC1,ABREC,ADDRS,ADTRP EXT ATABL,BLINE,BPAGA,BPLOC EXT CLFL3,COML,COMOR,CONSL EXT CONV,CPAGE,DBTAD,DCB3 EXT DIAG2,ERREX,ER#OR EXT EXEC0,FFLAG,FT#ME EXT FUT1,FUT2,FUT3,FUT4 EXT FUTI,FUTP,FWABP,FWAC EXT FWAM,IDCB,IERR#,IN#CK EXT JLU,LBF10,LBUF5,LBUF#,LBUFA EXT LDGEN,LDSG3,LENGT,LER3 EXT LER5,LIBFL,LINTP,LISTO,LNKDR EXT LOCFS,LST,LST1,LST2 EXT LST3,LST4,LST5,LSTA EXT LSTI,LSTP,LSTPX,LSTUL,LWABP EXT LWAC,LWAM,MAPS,.MEM6 EXT MLOCC,MOVEX,NAMR.,NBUF,NBUFT,NSCAN EXT NXTCM,OPT.3,OTMES,PACK#,PLK,PLKS,PLK4 EXT PRINT,PUNCH,QGETC,RBTA EXT RBTO,READ#,RIC,RT.LC,RTMLC,SCAN EXT SCP,SERFG,SERNM,SSTBL,SYMOV EXT TYOFF,TYPRO,UEXFL,WRTBT,?XFER EXT XNAM,XNAMA,ZPRIV,ZRENT * EXT PNAMA,PNAME,PRAMS * EXT EXEC,POSNT EXT DU#MY * * * A EQU 0 B EQU 1 ERROR EQU ER#OR FTIME EQU FT#ME INDCK EQU IN#CK ABORT EQU AB#RT IERR EQU IERR# LBUF EQU LBUF# LOCC EQU MLOCC PACK EQU PACK# READ EQU READ# SUP ************************************************************************ * * THIS SEGMENT OF THE RTE-M SEGMENTED LOADER AND GENERATOR * PERFORMS ALL MODULE RELOCATION. CONTROL IS RETURNED TO * LOADER SEGMENT 2 FOR PROCESSING NEXT COMMAND. * ******************************************************************** SKP RTML3 NOP NOP LDA LBUF2 REMOVE JSB INDCK INDIRECT STA LBUF2 ADDRESSES LDA LBUF7 FOR JSB INDCK DEFS STA LBUF7 LDA NBUF6 JSB INDCK STA NBUF6 LDA LDSG3 WHERE GO FLAG SZA,RSS JMP LDRIN GO RELOCATE MODULE LDA LDGEN SZA,RSS JMP RTMLC GO PUT ENTRY IN LST JMP RT.LC * HED *** ROUTINES FOR PROCESSING RECORDS ****** SKP ***** * ** NAM RECORD PROCESSOR *** RIC = 1 * * THIS ROUTINE IS CALLED TO ASSIGN SPACE FOR A PROGRAM * TO BE LOADED. THE NAM RECORD IS MOVED FROM LBUF TO * NBUF BEFORE THIS ROUTINE IS CALLED. * SPECIAL CONVENTIONS APPLY TO FORTRAN AND ALGOL * PROGRAMS. IN A FORTRAN PROGRAM (IDENTIFIED BY 1 IN * SIGN POSITION OF WORD 7 OF NAM RECORD) THE PROGRAM * LENGTH IN WORD 7 MAY BE GREATER THAN THE ACTUAL LENGTH. * THEREFORE THE UPPER BOUND IS NOT SET UNTIL LOADING * OF DATA BLOCKS. ***** NAMR NOP LDA NBUF+10 CHECK BASE PAGE LENGTH SSA JMP ILBP ILLEGAL BASE PAGE LENGTH(<0) CLA STA CPLIN CURRENT PAGE LINK POINTER (NEXT LINK) STA CPSTR CURRENT PAGE LINK POINTER (FIRST LINK) LDA LDGEN LOADER OR GENERATOR CALLING SZA,RSS JMP NM5 GENERATOR CALLING LDA FTIME FIRST TIME THRU? SZA JMP NM5 NO, DON'T OUTPUT TYOFF RECORD LDA B2 SET ADDRESS OF TIE-OFF RECORD STA ABRC1 * OUTPUT 2 WORD TIE-OFF RECORD FOR USER PROGRAMS ONLY. * THE FIRST WORD OF THE TIE-OFF RECORD IS DEPENDENT * ON WHERE THE PROGRAM RESIDES (MEMORY RESIDENT OR IN * A PARTITION AND IF EITHER SYSTEM COMMON OR SSGA IS * MAPPED INTO THE S,YSTEM. LDA SCP SSGA/SYSTEM COMMON/PARTITION AND B7 LDB 0 LDA B4 SZB,RSS CLA,INA MEM RES/NO SSGA/NO SYS COMMON CPB B1 CLA PARTITION/NO SSGA/NO COMMON CPB B2 LDA B2 MEM RES/SYS COMMON/NO SSGA CPB B3 LDA B2 PARTITION/SYS COMMON/NO SSGA STA 1 LDA SCP AND B1 RAR SET BIT 15 IF PARTITION LOAD IOR 1 LDB FWAM JSB TYOFF OUTPUT 2 WORD RECORD FOR PROGRAM ISZ FTIME SET FOR NO MORE TYOFFS FOR NOW NM5 LDB NBUF+11 GET COMMON LENGTH. SZB,RSS JMP NM1 NO COMMON LDA FWAC SZA,RSS JMP NM6 ALLOCATE 1ST COMMON CMA,INA ADA LWAC INA STA COML CMB,INB ADB A CHECK FOR COMMON LENGTH OVERFLOW SSB,RSS JMP NM1 LENGTH GOOD LDB COMOV COMMON BLOCK ERROR JMP ERREX SPC 2 NM6 STB COML ALLOCATE 1ST COMMON LDA LOCC MOVE PROGRAM RELOCATION BASE UP. STA FWAC ADA COML STA LWAC INA STA LOCC RESET LOCATION COUNTER NM1 LDA BPLOC SET LOWER BOUND OF BASE PAGE AREA STA HLINK SAVE UPPER BOUND OF BPA FOR SYS MODS STA BPPTR INITIALIZE BASE PAGE POINTER LDA LOCC SET LOWER BOUND OF PROGRAM AREA STA PAPTR INITIALIZE PROGRAM AREA POINTER LDA FWAC STA COMOR LDA NBUF+9 GET PROGRAM LENGTH STA FTNFL SET FORTRAN LOADING FLAG - BIT 15 CPA M1 ALGOL PROGRAM? JMP NAMR,I YES. LIMITS SET DURING LOADING. * * ALLOCATE BASE PAGE STORAGE * LDA NBUF+10 GET BASE PAGE AGAIN SZA,RSS IF NO BP ALLOCATION, JMP NM2 CHECK FOR PROGRAM ALLOCATION LDB LNKDR GET LINK DIRECTION FLAG CPB M1 SYSTEM OR USER LINKS JMP NM3 SYSTEM LINKS ADA BPLOC COMPUTE LAST LOCATION & STA r B CHECK FOR OVERFLOW ADA M1 CMA,INA ADA LWABP SSA NEGATIVE MEANS OVERFLOW JMP LER4 OF BASE PAGE AREA STB BPPTR SET UPPER LIMIT B. P. JSB MLINK SET LINKS TO 100000 * * ALLOCATE PROGRAM AREA STORAGE * NM2 LDA NBUF+9 GET PROGRAM LENGTH SZA,RSS IF PROGRAM LENGTH = 0, JMP NAMR,I LDA LOCC GET LOCATION COUNTER AND M2000 ON BASE PAGE? SZA JMP NM4 NO LDA LOCC GET LOCATION COUNTER ADA NBUF+9 ADD PROGRAM LENGTH AND B1777 ONLY INTERESTED IN THAT ON BASE PAGE CMA,INA ADA LOCC STA BLINK COUNTER FOR PUTTING 100000 IN LINK TABLE LDA C1000 LDB LOCC ADB BPAGA GET ADDRESS OF 1ST WORD IN LINK TABLE STA 1,I INB GET ADDRESS OF NEXT WORD IN LINK TABLE ISZ BLINK DONE? JMP *-3 NO NM4 LDA LINTP GET LINKS IN CURRENT PAGE FLAG SZA,RSS JMP NCPLN NO CURRENT PAGE LINKS LDA NBUF+9 GET PROGRAM LENGTH AND UDFE CLEAR FORTRAN BIT STA MIN1 LDA LOCC GET PROGRAM RELOCATION BASE AND B1777 CLEAR PAGE BITS ADA MIN1 ADA M2000 SSA DOES PROGRAM CROSS PAGE BOUNDARY? JMP NCPLN NO, CURRENT PAGE LINKS ARE NOT NEEDED STA 1 CMA,INA DETERMINE NUMBER OF CURRENT ADA MIN1 PAGE LINKS NEEDED INA MIN(A:2,B):4, WHERE A = LENGTH ARS OF PROGRAM ON CURRENT PAGE AND STA MIN1 B = REST OF PROGRAM CMA,INA ADA 1 SSA,RSS LDB MIN1 ADB B3 BRS,BRS LDA LOCC GET PROGRAM RELOCATION BASE STA CPLIN STA CPSTR ADA B ADD CURENT PAGE LINK LENGTH STA LOCC SET NEW PROGRAM RELOCATION BASE STA LLINK LAST LINK NCPLN LDB FTNFL COMPILER-GENERATED? SSB JMP NAMR߈,I YES,LIMITS SET DURING DBL PROCESSING LDA NBUF+9 GET PROGRAM LENGTH ADA LOCC COMPUTE HIGH ADDRESS & STA B CHECK FOR OVERFLOW CMA,INA INA ADA LWAM SSA NEGATIVE RESULT MEANS OVERFLOW JMP LER3 MEMORY OVERFLOW ERROR STB PAPTR SET UPPER BOUND JMP NAMR,I SPC 1 NM3 ADA FWABP COMPUTE LAST CMA,INA LOCATION AND INA CHECK FOR ADA BPLOC OVERFLOW SSA NEGATIVE MEANS OVERFLOW JMP LER4 OF BASE PAGE AREA ADA M1 SET UPPER LIMIT ADA FWABP STA BPPTR JSB MLINK SET LINKS TO 100000 LDA BPPTR INA SAVE BASE PAGE RELOCATION BASE FOR STA BPLOC SYSTEM MODULES JMP NM2 * * ILBP LDB ILBPL ILLEGAL BASE PAGE LENGTH (<0) JMP ERREX * * LER4 LDB BPGOV LINKAGE AREA OVERFLOW JMP ERREX * * SPC 1 CPLIN NOP CPSTR NOP BLINK NOP FTNFL NOP 2^15 = 1 IF FORTRAN/ALGOL LLINK NOP MIN1 NOP * B1 OCT 1 B2 OCT 2 B3 OCT 3 B1777 OCT 1777 C1000 OCT 100000 M2000 OCT -2000 UDFE OCT 77777 * BPGOV DEF *+1 OCT 6 ASC 3,BPG OV * COMOV DEF *+1 OCT 6 ASC 3,COM OV * DEBUG DEF *+1 ASC 3,DEBUG * ILBPL DEF *+1 OCT 6 ASC 3,IL BPL SKP * * SUBROUTINE TO PUT ENTRY POINT IN LST * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF ENTRY POINT + 3 * JSB ENTPT * * RETURN: CONTENTS OF A AND B DESTROYED. * ENTPT NOP ADB M3 ADJUST ADDRESS OF ENTRY POINT CLA STA PTYPE STA ENTS SET FOR SUBROUTINE CALL JSB ENTI JMP ENT01 LDB SYMOV SYSTEM OVERFLOW JMP ERREX EXIT * ENT01 LDA LST3,I AND UPCM ZERO OUT EXT ID NO. IF ANY STA LST3,I JMP ENTPT,I * M3 DEC -3 * * SUBROUTINE TO PUT 100000 IN LINK TABLE. THIS PREVENTS * THIS AREA FROM BEING USED AS LINKS. * MLINK NOP LDA NBUF+10 GET BASE PAGE LENGTH CMA,INA STA BLINK COUNTER FOR PUTTING 100000 IN LINK TABLE LDA C1000 LDB BPAGA GET ADDRESS OF 1ST WORD IN LINK TABLE ADB BPLOC STA 1,I ADB LNKDR GET ADDRESS OF NEXT WORD IN LINK TABLE ISZ BLINK DONE ? JMP *-3 NO JMP MLINK,I YES, EXIT * SKP SPC 2 ***** * ** ENT ** EXT RECORD PROCESSORS * * ENT RECORD PROCESSOR (RIC = 2) * EXT RECORD PROCESSOR (RIC = 4) * * PURPOSE OF THIS SECTION IS TO PROCESS ENTRY POINTS * AND EXTERNAL SYMBOLS, ADD SYMBOLS TO THE * LOADER SYMBOL TABLE, AND * SET A FLAG IF AN ENTRY POINT FROM A LIBRARY * LOAD MATCHES AN UNDEFINED EXTERNAL SYMBOL. * CONTROL RETURNED FROM THIS SECTION TO -LDRIN-. * * WORDS USED FOR TEMPORARY STORAGE: * * LBUF - RECORD TYPE FLAG: 1 = ENT, 0 = EXT * LBUF+1 - NEGATIVE COUNT OF ENT/EXT ENTRIES IN RECORD. * LBUF+2 - FIRST WORD ADDRESS OF CURRENT ENTRY. ***** ENTI NOP ENTR CLA,INA,RSS ENT: FLAG=1 EXTR CLA EXT: FLAG=0 STA LBUF SAVE RECORD TYPE LDA LBUF+1 GET AND ISOLATE AND B77 RECORD ITEM COUNT. CMA,INA SET NEGATIVE FOR STA LBUF+1 COUNTER IN PROCESSING LDA ENTS =0 IF CALLED AS A SUBROUTINE SZA LDB LBUFA SET LBUF+2 = ADDRESS OF ADB B3 FIRST ENTRY STB LBUF+2 IN RECORD ENTX1 JSB SSTBL SEARCH SYMBOL TABLE JMP ENTX6 END OF LST - MAKE NEW ENTRY LDA LBUF IF RECORD TYPE SZA,RSS JMP EXT0 IS EXT, GO POST ORDINAL. * * SYMBOL MATCH IN ENT RECORD * LDA UDFE IS ENT DEFINED? CPA LST4,I JMP ENT21 NO. SET VALUE FROM RECORD. LDB SERFG YES, LOADING FROM LIBRARY SZB JMP ENTX5 IGNORE DUPLICATE FROM LIBRARY. LDB DUENT JSB DIAG2 COMPLAIN ABOUT DUPLICATE LDB LBUF+2 ADB B2 LDA 1,I AND UPCM IOR B40 STA 1,I LDB LBUF+2 LDA B5 PRINT "OFFENDING" ENT SYMBOL JSB PRINT LDA LENGT LDB ADDRS JSB MAPS JMP ENTX5 * DUENT DEF *+1 OCT 6 ASC 3,DU ENT * * ADD ENTRY POINT ADDRESS TO LST ENTRY. * ENT21 JSB CKTYM CHECK IF MODULE TYPE ALLOWED CLA CLEAR "LIBRARY LOAD" FLAG. STA SERFG ENT22 LDA B,I GET WORD 3 OF RECORD ENTRY STA LST3,I AND STORE IN LST WORD 3. INB GET WORD 4 OF RECORD ENTRY LDB B,I (ENTRY VALUE). AND B7 ISOLATE RELOCATION INDICATOR CPA B3 ABSOLUTE? JMP ENT24 YES CPA B4 MICROCODE REPLACEMENT? JMP ENT24 YES CMB NEGATE TO INDICATE NEW ENTRY ENT23 STB LST4,I SAVE IN LST FOR LATER ACTION. LDB PTYPE SZB,RSS TYPE 7 OR 8 MODULE? JMP ENTX5 NO LDA D8 ADA LST3,I FLAG TYPE 7 OR 8 MODULES IN LST STA LST3,I * * ENTRY FROM INPUT LOADING * * * ADVANCE TO NEXT RECORD ITEM * ENTX5 LDA ENTS =0 IF CALLED AS A SUBROUTINE SZA,RSS JMP ENTI,I LDB LBUF+2 GET OLD RECORD ENTRY ADDRESS ADB B3 ADD 3 FOR NEXT EXT ENTRY. ADB LBUF ADD ONE MORE FOR ENT RECORD. STB LBUF+2 SET ADDRESS OF NEXT ENTRY. ISZ LBUF+1 INDEX ENTRY COUNT - JMP ENTX1 MORE TO PROCESS. JMP LDRIN FINISHED- GET NEXT RECORD. * ENT24 CMA,INA STA LST5,I SAVE -TYPE IN LST5 LDA LST3,I ZERO OUT RP AND AB INDICATORS AND UPCM STA LST3,I JMP ENT23 * * NO MATCH IN LST FOR RECORD ENTRY SYMBOL - ADD * NEW ENTRY - CHECK FIRST FOR MEMORY CONFLICT. * * ENTX6 LDA LST5 SAVE UPPER LIMIT OF LST STA LSTUL LDB FFLAG SZB,RSS ANY 0 ENTRIES IN LST? JMP ENTX7 NO LDA TYPRO  USER PROGRAM? SZA,RSS JMP ENTX7 YES LDA LIBFL SEARCHING? CPA B1 JMP ENTX7 YES STB LST5 CCA STA LSTPX JSB LSTP SET LST ENTRY ADDRESSES NOP JMP ENTX9 ENTX7 ISZ LSTA,I ADD 1 TO LST ENTRY COUNT ENTX9 LDB ENTS =0 IF CALLED AS SUBROUTINE LDA LST5 CMA ADA FUT4 SSA JMP ENTX2 OVERFLOW LDB LBUF+2 (B) = RECORD ENTRY ADDR. LDA B,I MOVE WORDS 1 AND 2 OF RECORD STA LST1,I ENTRY TO WORDS INB 1 AND 2 NEW LST ENTRY LDA B,I (WORD 3 WILL BE SET LATER) STA LST2,I INB (B) = ADDR. OF WORD 3, REC. ENTRY LDA UDFE STA LST4,I DENOTE UNDEFINED. CLA STA LST5,I DENOTE NO LINK ASSIGNED LDA LBUF GET RECORD TYPE FLAG SZA JMP ENT22 ENT; GO POST VALUE. EXT0 JSB CKTYM CHECK IF MODULE TYPE ALLOWED LDA B,I GET WORD 3 OF RECORD ENTRY, STA LST3,I STORE TO POST EXT ORDINAL. LDA LST5,I SSA ABSOLUTE OR MICROCODE REPLACEMENT JMP ENTX5 YES LDA LST5,I HAS A LINK ALREADY BEEN ASSIGNED? SZA JMP ENTX5 YES, CONTINUE PROCESSING LDA LST4,I NO, ALLOCATE ONE CPA UDFE LINK ROUTINE RECOGNIZES UNDEFINED AS CLA 0 IN .A.(VALUE OF SYMBOL PARAM) JSB LINK ALLOCATE THE LINK STB LST5,I AND UPDATE SYMBOL TABLE JSB ENTCK CHECK TO MARK LINK FOR DELETION JMP ENTX5 DON'T DELETE LDB LST5,I GET LINK CCE ELB,RBR SET BIT 15 STB LST5,I JMP ENTX5 THEN CONTINUE ENTX2 SZB JMP LER5 OVERFLOW, LOADER SUBCONTROL ISZ ENTI JMP ENTI,I ERROR EXIT * * B40 OCT 40 B77 OCT 77 D8 DEC 8 * ENTS NOP =0 IF SUBROUTINE SKP ***** * ** RELEN ** RELOCATE ENTRY POINT ADDRESS * CALLING SEQUENCE: (B) = UNRELOCATED ENT VALUE * (A)=CONTENTS OF LST3(RELOCATION BASE) * JSB RELEN * RETURN: (A) = LINK ADDRESS, IF ANY * (B) = RELOCATED ENT ADDRESS * * PURPOSE: RELOCATES ENT ADDRESS AS DESIGNATED * BY THE RELOCATION FIELD (R) IN BITS * 00-01 OF (LST3). 0 = PROGRAM, 1 = BASE * PAGE, 2 = COMMON, 3 = ABSOLUTE. * ALSO POSTS VALUE IN LINK TABLE. * BITS 07-00 OF (LST3) ARE CLEARED. ***** RELEN NOP ENTRY/EXIT POINT STB SAVE1 LDB LST5,I MICROCODE REPLACEMENT OR ABSOLUTE? SSB JMP RE3 LDB SAVE1 AND B7 GET R-FIELD ADA RBTO ADB A,I RELOCATE SYMBOL VALUE STB LST4,I POST ENTRY VALUE IN LST. LDA LST5,I SZA,RSS JMP RE3 ADA BPAGA C174 STB A,I POST VALUE IN LINK TABLE LDA FWABP IF LINK IS LESS THAN FWABP CMA,INA GO OUTPUT IT NOW ADA LST5,I SSA JMP RE7 YES, GO OUTPUT RE3 JSB FIXUP DO FIXUP JMP RELEN,I FIXUP NOP LDB LINTP STB SAVE1 SAVE LINKING TYPE CLB STB LINTP SET LINKING TO BASE PAGE JSB FUTI INITIALIZE FIXUP PROCESSOR RE2 JSB FUTP SET FIXUP ENTRY ADDRESS JMP RE1 EXIT, NO MORE FIXUPS SATISFIED LDA FUT4,I DOES FIXUP ADDRESS = CPA LST1 ANY LST ADDRESS? RSS JMP RE2 NO, GET NEXT ONE LDB FUT1,I GET LOAD ADDRESS STB ABRC1 STORE FOR OUTPUTTING STB LBUF CPA M1 .ZRNT FIXUP? JMP RE6 YES LDA LST4,I GET ENTRY VALUE LDB LST5,I CPB MD4 MICROCODE REPLACEMENT? JMP RE5 YES CPB M3 ABSOLUTE? JMP RE8 YES LDB FUT2,I SZB,RSS JMP RE8 DEF SSB JMP RE8 INDIRECT LDB FUT3,I ANY OFFSET? SZB JMP RE8 YES JMP RE9 NO, DON'T OUTPUT FIXUP RE8 CCA SET TO EXTERNAL STA NBUF+1 LDB FUT2,I GET INSTRUCTION STB NBUF+2 LDB LST4,I GET VALUE OF ENTRY POINT ADB FUT3,I ADD OFFSET JSB SPLIC BUILD INSTRUCTION, ALLOC. LINK IF NEC. RE5 JSB PACK STORE INSTRUCTION FOR OUTPUTTING JSB PUNCH OUTPUT THE ABSOLUTE RECORD RE9 CLA CLEAR THE FIXUP TABLE ENTRY SO THAT STA FUT1,I IT CAN BE REUSED STA FUT2,I STA FUT3,I STA FUT4,I JMP RE2 RE1 LDA BLANK PUT BLANK BACK IN BUFFER STA LBUF LDA SAVE1 RESTORE LINK TYPE STA LINTP JMP FIXUP,I EXIT * RE6 LDA FUT2,I GET INSTRUCTION JMP RE5 GO STORE * RE7 LDA BPAGA STORE OFFSET FOR OUTPUTTING STA PLKS LDA LST5,I SAVE LOAD ADDRESS STA PLK4 LDB 0 UPPER ADDRESS JSB PLK GO OUTPUT LINK JMP RE3 GO DO FIXUP * SAVE1 NOP * M1 DEC -1 MD4 DEC -4 * BLANK ASC 1, SKP HED DBL RECORD PROCESSING * DATA BLOCK RECORD PROCESSOR (RIC = 3) SPC 2 * THIS SECTION RELOCATES THE LOAD ADDRESS OF A DATA * BLOCK AND RELOCATES AND STORES THE WORDS IN IT. * * A RELOCATION BYTE IS ASSOCIATED WITH EACH * INSTRUCTION OR DATA WORD IN A DBL RECORD. * THIS 3-BIT BYTE CONTAINS ONE OF THE * FOLLOWING RELOCATION INDICATORS: SPC 1 * 000 - ABSOLUTE * 001 - PROGRAM RELOCATABLE * 010 - BASE PAGE RELOCATABLE * 011 - COMMON RELOCATABLE * 100 - EXTERNAL SYMBOL REFERENCE (NO OFFSET) * 101 - TWO-WORD GROUP. WORD 1 CONTAINS OPCODE, * RELOCATION BYTE FOR OFFSET, AND AN OPTIONAL * EXTERNAL SYMBOL ORDINAL. WORD 2 CONTAINS THE * OFFSET (ADDRESS). THE RELOCATION BYTE CAN BE: * 00 - PROGRAM * 01 - BASE PAGE * 10 - COMMON * 11 - ABSO\[B@<,B><,T=><,X=> * * N1 = CHANNEL NO. (2 OCTAL DIGITS) * N2 = DRIVER CLASS. CODE (2 OCTAL DIGITS) * D = DMA FLAG (OPTIONAL) * B = BUFFERING FLAG (OPTIONAL) F* T = TIME-OUT VALUE TO BE ENTERED * X = # WORDS OF EQT EXTENSION * * IF T= IS ENTERED, A VALUE FOR THE DEVICE'S TIME-OUT * CLOCK MUST NEXT BE ENTERED. * THE OPERATOR MUST ENTER A POSITIVE DECIMAL NUMBER * OF UP TO FIVE DIGITS. THIS IS THEN THE NUMBER OF * TIME BASE GENERATOR INTERRUPTS (10 MSEC INTERVALS) * BETWEEN THE TIME IO IS INITIATED ON THE DEVICE AND * THE TIME AFTER WHICH THE DEVICE SHOULD HAVE INTERRUPTED. * IF THE DEVICE HAS NOT INTERRUPTED BY THIS TIME, IT * IS CONSIDERED TO HAVE TIMED-OUT. * * * EACH DRT RECORD CONSISTS OF A 2-DIGIT NO. SPECIFYING THE * CORRESPONDING ENTRY IN THE EQUIPMENT TABLE * AND AN OPTIONAL 1-DIGIT NO. SPECIFYING A * SUBCHANNEL WITHIN THAT ENTRY. FOR EXAMPLE, IN * RESPONSE TO THE MESSAGE: 5 = ?, THE RESPONSE 6 INDICATES THAT * THE LOGICAL UNIT NO. 5 IS TO USE DEVICE 6 IN EQT. * WHEREAS THE RESPONSE 6,2 INDICATES THAT THE * LOGICAL UNIT NO. 5 IS TO USE SUBCHANNEL 2 OF * DEVICE 6 IN EQT. * * * THE INT RECORDS HAVE ONE OF THE FOLLOWING FORMATS: * * N1,EQT,N2 * N1,PRG,NAME * N1,ENT,ENTRY * N1,ABS,N3 * * N1 = CHANNEL NO. (2 OCTAL DIGITS - MUST BE IN INCREASING ORDER) * EXCEPTION: IF N1 = 04 (POWER - FAIL), * THIS ENTRY DOES NOT HAVE TO BE IN ORDER. ALSO, * ONLY AN ENT OR AN ABS TYPE ENTRY IS ACCEPTED * FOR N1 = 04. * N2 = EQT NO. * NAME = PROGRAM NAME TO BE SCHEDULED * ENTRY = ENTRY POINT TO WHICH TRANSFER IS TO BE MADE * N3 = ABSOLUTE VALUE (6 OCTAL DIGITS) * * # OF I/O CLASSES * TBGEN LDA .MEM3 SET PROGRAM COUNTER TO FWAM STA PPREL LDA SYSTM GET SYSTEM TYPE CPA P1 TYPE 1? JMP BLMT YES, GET BUFFER LIMITS LDA .MEM3 SET PROGRAM COUNTER TO FWAM STA PPREL LDA .MEM2 RESET LWABP LDB BPFIX STA BPFIX STB .MEM2 JSB BUFC JSB SPACE NEW LINE IOCLS JSB INTER INTERACTIVE INPUT LDA P19  LDB MES20 # OF I/O CLASSES? JSB TABLE PRINT MESSAGE, ANALYZE REPLY JMP IOCLS ERROR, REPEAT INPUT LDB D$CLS ADDRESS OF ENT NAME JSB ENPNT FIND ENTRY IN LST * * # OF RESOURCE NUMBERS * JSB SPACE NEW LINE RNUMB JSB INTER INTERACTIVE INPUT LDA P24 LDB MES21 # OF RESOURCE NUMBERS? JSB TABLE PRINT MESSAGE, ANALYZE REPLY JMP RNUMB ERROR, REPEAT INPUT LDB D$RNT ADDRESS OF ENTRY NAME JSB ENPNT FIND ENTRY IN LST LDA BPFIX RESET LWABP STA .MEM2 BLMT LDA P3 STA GNFLG LDA P3 STA GENRT * * BUFFER LIMITS (LOW,HIGH) * JSB SPACE NEW LINE BLMTS JSB INTER INTERACTIVE INPUT LDA P27 LDB MES22 BUFFER LIMITS (LOW,HIGH)? JSB READ PRINT MESSAGE, GET REPLY JSB BLSET SET UP DEF $BLLO LOWER LIMIT JMP BLMT0 ERROR JSB BLSET NOW SET UP THE UPPER LIMIT DEF $BLHI JMP BLMT0 ERROR JMP GEN00 * BLMT0 JSB INERR ERROR JMP BLMTS REPEAT INPUT SKP * * GENERATE I/O TABLES * GEN00 LDA PPREL STA .MEM3 SET FWAM JSB SPACE NEW LINE GENIO JSB INTER INTERACTIVE INPUT CLA STA UNDEF SET TO PRINT ALL UNDEFS STA OPT.3,I ZERO FIXUP COUNTER STA IDNOS ID'S MADE STA STRPN START UP PROGRAM FLAG STA CEQT NOS OF EQT'S STA PROCT NOS OF INT PROG ENTRIES STA START START UP PROGRAM USED * * EQT TABLE * JSB SPACE NEW LINE JSB FUTI INITIALIZE FIXUP TABLE LDA .MEM3 FWAM STA AEQT EQT STARTING ADDRESS STA PPREL LDA P9 PRINT: LDB MES25 "EQT TBL" JSB PRIN1 JSB SPACE NEW LINE * SEQT JSB INTER INTERACTIVE INPUT JSB SPACE NEW LINE SEQT1 JSB INTER INTERACTIVE INPUT LDA CEQT EQT CNLHCOUNT INA LDB MES6A STUFF INTO PRINT BUFFER JSB STFNM LDA P11 LDB MES06 EQT XX =? JSB READ PRINT MESSAGE, GET REPLY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA EN CHARS= END ? JMP SSQTI YES, TRY TO END CPA RE REPEAT? JMP GENIO YES * JSB GINIT INITIALIZE BUFFER SCAN LDA P2 JSB GETOC GET 2 OCTAL DIGITS, CONVERT JMP IOERR INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP CLDBU YES - SET CHNL NO., CLEAR D,B,T,X IOERR LDA CH SET CODE = INVALID CHNL IN EQT JSB ERRER ERROR JMP SEQT1 REPEAT INPUT SKP 6N* CLDBU LDB OCTNO GET I/O CHANNEL NO. STB IOADD SET I/O ADDRESS ADB N8 IS CHAN EQ. LESS THAN 10? SSB,RSS JMP GOOD ADB P4 SZB JMP IOERR YES, CHANNEL ERROR GOOD CLA STA TIMWD CLEAR TIME WORD STA IODMA CLEAR DMA FLAG STA IOBUF CLEAR AUTOMATIC BUFFERING FLAG STA EXTWD CLEAR EQT EXTENSION WORD CCA STA TFLAG CLEAR TIME-OUT FLAG STA XFLAG SET EQT EXTENSION FLAG STA DFLAG SET DMA-IN FLAG STA BFLAG SET BUFFERING-IN FLAG LDA CDEC RESTORE C. STA ASCDR+1 ADA B3000 AND I. STA ASIDR+1 LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA DV CHAR = DV? RSS JMP DVERR NO CLA,INA GET NEXT CHARACTER JSB GETNA CPA CHARR CHARACTER = R? JMP STYPE YES IOR C0 NO STA ASCDR+1 PUT IN PLACE OF "." ADA B3000 IN C. AND I. STA ASIDR+1 JMP STYPE DVERR LDA DR SET CODE = INVALID DRIVER NAME JSB ERRER PRINT DIAGNOSTIC JMP SEQT1 GET NEXT EQT RECORD STYPE LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF STA ASTYP SAVE 2 ASCII CHARS FOR I.XX,C.XX STA ASCYP SAVE FOR C.XX COMPARE CCA ADA CURAL ADJUST CURRENT LBUF ADDR STA CURAL RESET CURAL TO CONVERT TYPE LDA P2 JSB GETOC GET 2 OCTAL CHARS, CONVERT JMP DVERR INVALID DRIVER NAME ALF,ALF ROTATE TO UPPER 8 STA IOTYP SET DRIVER TYPE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP LISCN SCAN FOR I.XX, C.XX CPA BLANK CHAR = COMMA? RSS YES - CONTINUE JMP DVERR NO - INVALID DRIVER NAME * * INDBU CCA STA CMFLG SET COMMA FLAG = NO COMMA IN JSB GETAL GET NEXT CHAR FROM LBUF CPA CHARD CHAR = D? rP JMP SEDMA YES - SET DMA CODE CPA CHARB CHAR = B? JMP SETBU YES - SET BUFFERING CODE CPA CHART CHAR = T? JMP SETIM YES - SET TIME-OUT FLAG CPA CHARX CHAR = X? JMP SEEXT YES - SET EXTENSION LENGTH UNERR JSB INERR SET CODE = INVALID D,B,T JMP SEQT1 GET NEXT EQT RECORD SETIM ISZ TFLAG SKIP - FIRST T ENTERED JMP UNERR DUPLICATE T'S ENTERED JSB GETAL GET NEXT CHAR CPA AEQUL IS IT "=" ? RSS YES ACCEPT TIME VALUE JMP UNERR NO, ITS AN ERROR LDA N5 5 CHAR VALUE JSB GETOC FETCH TIME OUT TIME JMP UNERR NUMBER IS NO GOOD SZA WAS ZERO INPUT? CMA ONE'S COMPLEMENT FOR THAT RTM STA TIMWD SAVE FOR OUTPUT EQTST JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP LISCN SCAN FOR I.XX, C.XX CPA BLANK CHAR = COMMA? JMP INDBU YES - GET NEXT D,B,U, ENTRY JMP UNERR NO - INVALID D,B,U CHARACTER * SEDMA ISZ DFLAG SKIP - FIRST D ENTERED JMP UNERR DUPLICATE D'S ENTERED LDA MSIGN SET BIT 15 = 1 FOR DMA FLAG STA IODMA SET DMA CODE JMP EQTST TEST FOR NEXT OPERAND * SETBU ISZ BFLAG SKIP - FIRST B ENTERED JMP UNERR DUPLICATE B'S ENTERED LDA B40K SET BIT14 = 1 STA IOBUF SET AUTOMATIC BUFFERING CODE JMP EQTST TEST FOR NEXT OPERAND * SEEXT ISZ XFLAG SKIP - FIRST X ENTERED JMP UNERR DUPLICATE X'S ENTERED JSB GETAL CPA AEQUL IS IT "=" ? RSS YES ACCEPT EXTENSION VALUE JMP UNERR NO, ITS AN ERROR LDA N3 JSB GETOC GET EXTENSION JMP UNERR NUMBER IS NO GOOD STA EXTWD SAVE LENGTH OF EXTENSION SSA,RSS JMP EQTST JMP UNERR * LISCN LDB ASIDR ADDRESS OF I.XX BUFFER JSB SSTBL IS IcT IN THE SYMBOL TABLE? JMP DVERR NO LDA LST4,I YES, GET THE ADDRESS STA I.XX SAVE FOR OUTPUT LDB ASCDR ADDRESS OF C.XX BUFFER JSB SSTBL IS IT IN SYMBOL TABLE? JMP NOCXX NO, USE ADDRESS OF I.XX LDA LST4,I YES, GET ADDRESS STCXX STA C.XX SAVE DRIVER EXIT POINT * JSB BUFC LDA IODMA GET DMA CODE IOR IOBUF ADD BUFFERING CODE IOR IOADD ADD CHANNEL NO. STA LBUF+3 OUTPUT BUFFER LDA I.XX STA LBUF+1 INT. ADDRESS LDA C.XX STA LBUF+2 COMPLETE ADDRESS * LDA IOTYP GET EQUIPMENT TYPE CODE AND M1000 ISOLATE UPPER 7 BITS SZA SKIP - TYPE = 0,I CLA,RSS SET STATUS = 0, SKIP LDA BLANK SET STATUS = 40(8) IOR IOTYP ADD EQUIPMENT TYPE CODE STA LBUF+4 LDA TIMWD WAS A TIME INPUT ? SZA STA LBUF+13 YES, SAVE IT IN EQT LDA EXTWD GET EXTENSION LENGTH SZA,RSS JMP NOEXT NO EXTENSION JSB FUTS GET FIXUP FOR EQT EXTENSION NOP LDA EXTWD STA LBUF+11 SAVE EXTENSION LENGTH STA FUT1,I SAVE FOR FIXUP LDA PPREL SAVE CURRENT EQT ADDRESS ADA P12 STA FUT4,I SAVE FOR FIXUP ISZ OPT.3,I INCREMENT NO. OF FIXUP ENTRIES LDA LSTUL CMA ADA FUT4 SSA CHECK FOR MEMORY OVERFLOW JMP LER5 NOEXT LDA PPREL GET CURRENT EQT ADDRESS LDB A ADB P14 ADDRESS OF END OF EQT STB PPREL JSB SETCR OUTPUT IN ABS ISZ PPREL BUMP TO NEXT EQT ENTRY ISZ CEQT INCR EQT ENTRY COUNT CLA STA FTIME JMP SEQT PROCESS NEXT EQT RECORD * SPC 1 NOCXX LDA I.XX C.XX NOT FOUND SO USE JMP STCXX I.XX ADDRESS * SSQTI LDA CEQT ANY EQT'S BEEN LOADED? SZA JMP SSQT YES, CAN END JSB INERR NO, AT LEAST} ONE REQUIRED JMP SEQT1 START OVER LER5 LDA SO SYSTEM OVERFLOW JSB ERRER JMP GENIO START OVER * * DO FIXUPS FOR EQT EXTENSIONS * SSQT JSB FUTI INITIALIZE FIXUP FOR EQT EXTENSION FUTNT JSB FUTS GET NEXT FIXUP JMP FUTED JSB BUFC CLEAR BUFFER LDA PPREL GET NEXT ADDRESS FOR EQT EXTENSION STA LBUF LDB FUT1,I GET EQT EXTENSION LENGTH STB COUNT LDB FUT4,I START ADDRESS LDA FUT4,I END ADDRESS JSB OUTCR OUTPUT ADDRESS AND LENGTH JMP FUTNT SKP * ZERO DEC 0 N5 DEC -5 N8 DEC -8 P14 DEC 14 P19 DEC 19 M1000 OCT -1000 B3000 OCT 3000 B40K OCT 40000 C0 OCT 41400 MSIGN OCT 100000 * AEQUL OCT 75 CHARB OCT 102 CHARD OCT 104 CHARR OCT 122 CHART OCT 124 CHARX OCT 130 * CDEC ASC 1,C. DV ASC 1,DV CH ASC 1,CH INVALID CHANNEL NO. IN EQT REC DR ASC 1,DR INVALID DRIVER NAME RE ASC 1,RE SO ASC 1,SO SYSTEM OVERFLOW * ASCDR DEF *+1 ASC 1,C. ASCYP NOP OCT 20000 ASIDR DEF *+1 ASC 1,I. ASTYP NOP OCT 20000 * MES6A DEF MES6I MES06 DEF *+1 ASC 3,* EQT MES6I NOP ASC 2, =? MES25 DEF *+1 ASC 5,* EQT TBL * AEQT NOP ADDRESS OF EQUIPMENT TABLE BFLAG NOP BUFFERING-IN FLAG FOR EQT CEQT NOP NO. ENTRIES IN EQUIPMENT TABLE C.XX NOP DRIVER EXIT POINT DFLAG NOP DMA-IN FLAG FOR EQT EXTWD NOP EQT EXTENSION LENGTH IOADD NOP I/O ADDR (CHANNEL NO.) IN EQT IOBUF NOP I/O BUFFERINF FLAG IN EQT IODMA NOP I/O DMA FLAG IN EQT I.XX NOP DRIVER ENTRY OINT IOTYP NOP I/O DRIVER TYPE IN EQT (OCTAL) TFLAG NOP TIME-OUT ENTRY FLAG FOR EQT TIMWD NOP TIME WORD XFLAG NOP EQT EXTENSION FLAG SKP * * SET DEVICE REFERENCE TABLE (SQT) * FUTED JSB SPACE NEW LINE FUTE JSB INTER R INTERACTIVE INPUT LDA PPREL UPDATE REL ADDRESS STA ASQT SAVE SQT ADDRESS CLA,INA STA CSQT SET SQT COUNT = 1 LDA P9 LDB MES26 DRT TBL JSB PRIN1 PRINT MESSAGE JSB SPACE NEW LINE LDA P6 LDB MS26A LU #: JSB PRIN1 PRINT MESSAGE * DEVRE JSB INTER INTERACTIVE INPUT LDA CSQT GET CURRENT DEV REF NO. LDB MS28I JSB STFNM STUFF NUM IN BUFFER JSB SPACE NEW LINE DEVER JSB INTER INTERACTIVE INPUT LDA P13 LDB MES28 XX = EQT #? JSB READ PRINT MESSAGE, GET REPLY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA EN CHARS = EN? JMP SINTI YES - SET INTERRUPT TABLE CPA RD REPEAT DRT? JMP DRT01 YES, START OVER CPA RE REPEAT EQT? JMP GENIO YES, GO BACK JSB GINIT RE-INITIALIZE LBUF SCAN LDA N3 JSB GETOC GET 2 DECIMAL DIGITS, CONVERT JMP DRERR INVALID DIGIT ENTERED STA TEMPL SAVE DEV. REF. NO. SZA,RSS IF NO CHANNEL JMP NOSUB IGNOR SUBCHANNEL LDA CMFLG COMMA ENCOUNTERED? SZA YES - GO GET SUBCHANNEL JMP NOSUB NO - DEFAULT IT TO ZERO LDA N2 JSB GETOC GET TWO DECIMAL DIGITS JMP DRERR JSB GETAL GET NEXT CHAR CPA ZERO END OF BUFFER? RSS YES JMP DRERR NO, SHOULD BE BUT ISN'T LDA OCTNO GET SUB CHANNEL RSS SKIP OVER DEFAULT NOSUB CLA DEFAULT TO ZERO ALF,ALF SET SUBCHANNEL NO. ALF,RAR INTO BITS 13 - 11 STA TEMPH SAVE SUBCHANNEL NO. LDA TEMPL GET DEV. REF. NO. CMA,INA COMPLEMENT ADA CEQT ADD NO. EQT ENTRIES SSA SKIP IF VALID DEV. REF NO. JMP DRERR INVALID DEV. REF. NO. (NO EQT) LDA TEMPL GET DEV.. REF NO. LDB CSQT GET CURRENT SQT NO. CPB P1 FIRST ENTRY? RSS YES - CONTINUE JMP SETQT PUT OUT DEV REF NO. TO SQT SZA,RSS SKIP IF DEV REF IS NOT ZERO JMP DRERR INVALID DEV. REF. NO. ADA N1 LDB 0 CMA,INA BLF MULTIPLY BY ADB 0 15 ADB AEQT ADD ADDRESS OF EQT STB LBUF+1 SET EQT ADDR IN TTY CHANNEL LDA TBCHN TBG CHANNEL STA LBUF PUT IN OUT PUT BUFFER LDA TBG ADDRESS WHERE TO GO LDB SYSTY JSB SETCR OUTPUT IN ABSOLUTE * SETQT LDA TEMPL GET DEV. REF. NO. IOR TEMPH SET IN SUBCHANNEL NO. LDB PPREL ABS ADDRESS JSB STCR1 GO BUILD ABS DATA ISZ PPREL INCR CURRENT RELOC ADDRESS ISZ CSQT INCR CURRENT SQT COUNT CLA STA FTIME JMP DEVRE GET NEXT SQT ENTRY * DRERR LDA LU SET CODE = INVALID DEV. REF. NO. JSB ERRER ERROR JMP DEVER REPEAT INPUT SKP * SINTI LDA CSQT HAVE ANY DRT'S BEEN ENTERED? ADA N1 STA CSQT SZA SSA JMP DRERR NO, ERROR, START OVER JSB BUFC LDA PPREL CCB ADB 0 ADB CSQT STB PPREL JSB SETCR ISZ PPREL JMP SINTT YES, GO TO INT PROCESSING * DRT01 JSB SPACE NEW LINE JSB INTER INTERACTIVE INPUT JMP FUTE SPC 3 * ASQT NOP ADDRESS OF DRT COUNT NOP CSQT NOP NO. OF ENTRIES IN DRT TEMPH NOP SUBCHANNEL NO. (BITS 11-13) TEMPL NOP DEV. REF. NO. EN ASC 1,EN LU ASC 1,LU INVALID DEV. REF. NO. RD ASC 1,RD * P11 DEC 11 P13 DEC 13 * MES26 DEF *+1 ASC 5,* DRT TBL MS26A DEF *+1 ASC 3,* LU#: MS28I DEF MS28A MES28 DEF *+1 ASC 1,* MS28A ASC 6, = EQT #? SKP * * SUBROUTINE TO ANALYZE INPUT * TABLE NOP JS-B READ PRINT MESSAGE, GET REPLY LDA N3 SET FOR 3 DECIMAL DIGITS JSB DOCON JMP TABLE,I ERROR EXIT, REPEAT INPUT STA LBUF STA COUNT AND M400 CHECK FOR VALUE >=0 AND <=255 SZA,RSS ISZ TABLE OK SZA JSB INERR ERROR JMP TABLE,I SPC 5 * * SUBROUTINE TO FIND ENTRY POINT IN LST * ENPNT NOP JSB SSTBL FIND ENTRY POINT JMP RELSE NOT THERE, START OVER LDB PPREL GET CURRENT ADDRESS STB LST4,I SAVE IN LST LDA LST5,I POST VALUE IN LINKS TABLE SZA,RSS JMP ENP1 ONLY IF LINK EXISTS ADA BPAGA STB 0,I ENP1 LDA 1 ISZ PPREL JSB OUTCR OUTPUT LDA ENPNT STA SAVE1 JMP RTMLI RTMG6 LDA SAVE1 STA ENPNT JSB BUFC LDA LST4,I LINK VALUE LDB LST5,I LINK ADDRESS SZB,RSS JMP ENPNT,I NO LINK JSB STCR1 OUTPUT LINK JMP ENPNT,I SKP * * SUBROUTINE TO OUTPUT ABSOLUTE CODE * OUTCR NOP JSB SETCR OUTPUT IN ABS JSB BUFC CLEAR OUTPUT BUFFER NEXT LDB COUNT BUFFER LENGTH SZB,RSS 0 LENGTH JMP OUTCR,I LDA PPREL NEXT OUPUT ADDRESS ADB N64 SZB SSB JMP LAST LAST OUTPUT STB COUNT LDB 0 ADB P63 STB PPREL JSB SETCR OUTPUT IN ABS ISZ PPREL JMP NEXT LAST CCB ADB 0 ADB COUNT STB PPREL NEW OUTPUT ADDRESS JSB SETCR OUTPUT IN ABS ISZ PPREL JMP OUTCR,I * P63 DEC 63 * * THE BLSET SUBROUTINE SETS UP THE BUFFER LIMITS. * * CALLING SEQUENCE: * * JSB BLSET * DEF ENT NAME ENTRY POINT NAME ADDRESS * JMP RETRY ERROR RETURN * * --- NORMAL RETURN * BLSET NOP LDB BLSET,I GET THE ENTRY POINT ISZ BLSET STEP RETURN ADDRESS JSB SSTBL SEARCH FBOR THE ENTRY JMP FGET IF NOT FOUND JUST EXIT LDA N5 CONVERT A FIVE DIGIT DECIMAL JSB GETOC JMP BLSET,I LDB LST4,I GET THE LIST ADDRESS CMA,INA SET THE LIMIT NEGATIVE JSB STCR1 GO OUTPUT THE LIMIT FGET ISZ BLSET STEP TO OK RETURN JMP BLSET,I SKP SKP * * ROUTINE TO CONVERT THE OCTAL NUMBER IN A TO * ASCII AND STUFF THE 2 LOW ORDER DIGITS INTO A BUFFER * ADDRESSED BY B. LEADING ZEROS ARE SUPPRESED * * CALLING SEQUENCE: * * A = OCTAL NUMBER * B = BUFFER ADDRESS * * RETURN: A AND B ARE DESTROYED * STFNM NOP STB STFAD SAVE FINAL ADDRESS LDB ATBUF TEMP BUFFER ADDRESS CMA,INA NEG FOR DECIMAL CONVERT JSB CONVD LDA TBUF+2 LEAST 2 DIGITS AND M400 ISOLATE UPPER CHAR CPA B30K CHAR = ASCII ZERO? LDA B20K YES, REPLACE WITH BLANK STA B SAVE UPPER CHAR LDA TBUF+2 GET ORIG DIGITS AND B177 ISOLATE LOWER CHAR IOR B MERGE STA STFAD,I STORE IN BUFFER JMP STFNM,I * STFAD NOP B177 OCT 177 B30K OCT 30000 M400 OCT -400 * SKP HED RTMGN INTERRUPT TABLE PROCESSOR SKP * * INTERRUPT TABLE PROCESSOR * SINTT JSB SPACE NEW LINE SINT JSB INTER INTERACTIVE INPUT LDA PPREL GET CURRENT RELOCATION ADDR STA AINT SAVE INTERRUPT TABLE ADDRESS LDA P9 LDB MES29 MES29 = ADDR. * INT TABLE JSB PRIN1 PRINT: INT TBL LDA A$CIA $CIC ADDRESS IOR IJSB ADD JSB 0,I CODE STA JSCIC SET JSB CIC,I CODE JSB BUFCL JSCIC OCT 0 STUFF DATA CLA STA PROCT LDB LWGBP LDA 1 CMA,INA ADA P58 SSA LDB P58 LDA P5 JSB SETCR OUTPUT JSB $CIC,I * LDA HLTB4 SET HLT 4 INTO LOC 4 LDB P4 ADDRESS JSB STCR1 OUTPUT HLT 4 LDB P6 GET ADDR OF FIRST INT LOCATION STB TBREL SET CURRENT BP ADDRESS JSB SPACE NEW LINE * SETIN JSB INTER INTERACTIVE INPUT LDA P3 LDB QUEST ? JSB READ PRINT MESSAGE, GET REPLY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA EN CHARS = EN? JMP ENDIO YES - I/O TABLES COMPLETE CPA RI REPEAT INTERRUPT? JMP SINT YES CPA RE GO BACK TO EQT? JMP GENIO YES CPA RD REPEAT DRT? JMP DRT01 YES JSB GINIT RE-INITIALIZE LBUF SCAN LDA P2 JSB GETOC GET 2 OCTAL DIGITS, CONVERT JMP CHERR INVALID INT CHANNEL NO. DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP SETCH SAVE INT CHANNEL NO. CHERR JSB INERR ERROR JMP SETIN REPEAT INPUT * SETCH LDA OCTNO GET INT CHANNEL NO. STA INTCH SAVE CHANNEL NO. ADA N4 CHAN L.T. 4? SSA JMP CHERR YES, CHANNEL ERROR * LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA EQ CHARS = EQ? JMP INTEQ YES - PROCESS INT EQT RECORD CPA PR CHARS = PR? JMP INTPR YES - PROCESS INT PRG RECORD CPA EN CHARS = EN? JMP INTEN YES - PROCESS INT ENT RECORD CPA AB CHARS = AB? JMP INTAB YES - PROCESS INT ABS RECORD IMNEM LDA NA SET CODE = INVALID INT MNEMONIC JSB ERRER ERROR JMP SETIN REPEAT INPUT * INTEQ LDA N2 JSB GETNA MOVE NEXT 2 CHARS TO TBUF CPA T CHARS = T,BLANK? RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA N2 JSB GETOC GET 2 DECIMAL DIGITS, CONVERT JMP EQUER INVALID EQT NO. IN INT REC LDA OCTNO GET EQT TABLE ENTRY NO. CMA,INA,SZA,RSS SKIP - VALID LOWER LIMIT JMP EQUER IN$BVALID EQT REFERENCE STA 1 SAVE EQT NO. ADA CEQT ADD UPPER EQT REF. NO. SSA,RSS SKIP - INVALID UPPER LIMIT JMP TSTIQ TEST FOR FIRST EQT REFERENCE EQUER LDA EQ SET CODE = INVALID EQT NO. JSB ERRER ERROR JMP SETIN REPEAT INPUT * TSTIQ LDA OCTNO GET EQT ENTRY NO. ADA N1 ALF MULTIPLY BY ADA 1 15 INA ADA AEQT ADD ADDRESS OF EQT TABLE LDB JSCIC GET JSB CIC CODE JMP COMIN SET INTERRUPT TABLE, LOCATION * INTPR LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA G CHARS = G,BLANK? RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA TBREL FETCH CHANNEL CMA,INA ADA INTCH ASSENDING ORDER? SSA,SZA JMP IMNEM NO, ERROR LDA N5 JSB GETNA MOVE 5 CHARS TO TBUF LDA TBUF+2 NAME: 5 AND M400 MASK OUT LOWER HALF IOR INTCH PUT IN CHN(SELECT CODE) STA TBUF+2 SAVE IN TABLE LDA ATBUF ADDRESS OF NAME JSB LDIPX PUT IN TABLE CLA LDB JSCIC JMP COMIN * INTEN LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA T CHARS = T, BLANK RSS YES - CONTINUE JMP IMNEM INVALID INT MNEMONIC LDA N5 JSB GETNA MOVE 5 CHARS TO TBUF LDB ATBUF ADDR OF NAME JSB SSTBL SEARCH SYMBOL TABLE RSS NOT FOUND, ERROR JMP SETE1 SET ENTRY POINT ADDRESS ENERR LDA AD SET CODE = INVALID ENTRY POINT JSB ERRER ERROR JMP SETIN REPEAT INPUT * SETE1 LDA LST5,I HAS LINK BEEN MADE? SZA,RSS JMP SETEN NO, GO MAKE ONE IOR IJSB YES, FORM THE JSB FOR BP STA B CLA JMP COMIN SETEN LDA LST4,I GET BP LINK ADDRESS LDB .MEM2 MAKE A BP LINK JSB STCR1 LDA .MEM2 STA LST5,I IOR IJSB ADD JSB 0,I CODE STA 1 CCA ADJUST LWABP ADA .MEM2 STA .MEM2 CLA SET INT ENTRY = ZERO JMP COMIN SET INTERRUPT TABLE, LOCATION * INTAB LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA S CHARS = S,BLANK RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA P6 JSB GETOC GET 6 OCTAL DIGITS, CONVERT JMP IMNEM INVALID ABS DIGIT CLA LDB OCTNO GET ABSOLUTE VALUE * COMIN STA TBUF SAVE INT TABLE CODE STB TBUF+1 SAVE INT LOCATION CODE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? RSS YES, CONTINUE JMP ENERR NO, BUT SHOULD BE LDA INTCH GET INT CHANNEL NO. CPA P4 SPECIAL PROCESSING JMP PFINT IF TRAP CELL FOUR CMA,INA ADA TBREL ADD CURRENT ADDRESS SZA,RSS SKIP - NOT NEXT LOCATION JMP STINT SET INTERRUPT TABLES, LOCATION SSA SKIP - INVALID CHANNEL NO. ORDER JMP FILLI FILL IN SKIPPED VALUES EQERR LDA CH SET CODE = INVALID INT CHNL ORDR JSB ERRER ERROR JMP SETIN REPEAT INPUT * PFINT LDA TBUF IF TRAP CELL FOUR, SZA ENTRY MUST BE AN JMP CHERR 'ABS' OR AN 'ENT' LDB P4 LDA TBUF+1 STORE INTO JSB STCR1 CLA STA FTIME JMP SETIN GET NEXT INTERRUPT RECORD * * FILLI STA TCNT SET NO. OF FILL-INS REQUIRED CLA SET INTERRUPT TABLE ENTRY = ZERO LDB PPREL ADDRESS JSB STCR1 ISZ PPREL INCR CURRENT INT TABLE ADDRESS ISZ TBREL INCR CURRENT INT LOCATION ADDR ISZ TCNT SKIP - ALL FILL-INS COMPLETE JMP FILLI+1 CONTINUE INT FILL-IN * STINT ISZ TBREL INCR CURRENT BP LOCATION ADDR LDB TBREL GET INT LOCATION ADDR CMB,INB  ADB P64 ADD ADDR OF FIRST SYS LINK SSB SKIP - INT LOCATION OVERFLOW JMP EQERR * LDA TBUF+1 GET INT LOCATION CODE LDB TBREL INT. ADDRESS PLUS ONE ADB N1 ADJUST JSB STCR1 SET CORE LDA TBUF GET INT TABLE CODE LDB PPREL ADDRESS JSB STCR1 OUTPUT IT ISZ PPREL INCR CURRENT RELOCATION ADDR CLA STA FTIME JMP SETIN GET NEXT INT TABLE RECORD ENDIO LDA AINT GET ADDRESS OF INT CMA,INA ADA PPREL ADD CURRENT RELOCATION ADDR STA CINT SAVE NO. INT ENTRIES JSB SPACE NEW LINE JSB SPACE NEW LINE * * OUTPUT EQTA THRU INTLG * LDA AEQT EQT START ADDRESS STA LBUF LDA CEQT NUMBER OF EQTS STA LBUF+1 LDA ASQT DRT START ADDRESS STA LBUF+2 LDA CSQT NUMBER OF DRT'S STA LBUF+3 LDA AINT INTERRUPT TABLE ADDRESS STA LBUF+4 LDA CINT NUMBER OF INTERRUPT ENTRIES STA LBUF+5 LDA EQTA START ADDRESS-ABS LDB INTLG END ADDRESS JSB SETCR GO BUILD ABS JMP JMPFT * N4 DEC -4 P58 DEC 58 P64 DEC 64 * EQ ASC 1,EQ INVALID EQT NO. IN INT RECORD G ASC 1,G NA ASC 1,NA PARAMETER NAME ERROR PR ASC 1,PR PARAMETER PRIORITY ERROR QUEST DEF *+1 ASC 2,* ? RI ASC 1,RI S ASC 1,S T ASC 1,T * HLTB4 OCT 103004 TRAP CELL DEFAULT VALUE IJSB JSB 0,I I-JSB CODE FOR INTERRUPT LOCS * CINT NOP NO. ENTRIES IN INTERRUPT TABLE INTCH NOP INT RECORD CHANNEL NO. TBREL NOP * MES29 DEF *+1 ASC 5,* INT TBL SKP * * ALLOCATE SPACE FOR MEMORY PROTECT FENCE TABLE * JMPFT LDB $MPFT NAME OF TABLE LDA PPREL CURRENT ADDRESS JSB STUFF PUT IN $MPFT LDA PPREL STA MPFT ADA P5 STA PPREL UPDATE CURRENT ADDRESS * * AALLOCATE SPACE FOR MEMORY RESIDENT MAP * LDA SYSTM GET SYSTEM TYPE CPA P3 TYPE = 3? RSS JMP ID NO, GET NO. OF ID SEGMENTS LDB $MRMP NAME OF TABLE LDA PPREL CURRENT ADDRESS JSB STUFF PUT IN $MRMP LDA PPREL SAVE ADDRESS OF TABLE STA MRMP ADA P32 STA PPREL UPDATE CURRENT CORE ADDRESS HED PARTITION DEFINITION SKP * * SET MAXIMUM NUMBER OF PARTITIONS AND CREATE MAT TABLES * LDB $MATA NAME OF TABLE LDA PPREL CURRENT ADDRESS STA MATA ADDRESS OF MEMORY ALLOCATION TABLE -1 INA JSB STUFF PUT IN $MATA JSB SPACE NEW LINE PARTN JSB INTER INTERACTIVE INPUT LDA P27 LDB MES18 MAX NUMBER OF PARTITIONS? JSB READ PRINT MESSAGE, GET REPLY LDA N2 JSB DOCON JMP PARTN REPEAT INPUT STA LBUF SAVE MAXIMUM NUMBER OF PARTITIONS STA MAXPT SZA,RSS JMP PTERR NO. OF PARTITIONS MUST BE > 0 CMA,INA STA NMAX ADA P64 SSA,RSS JMP PAROK NUMBER OF PARTITIONS >=1 AND <=64 PTERR JSB INERR JMP PARTN REPEAT INPUT PAROK LDA PPREL OUTPUT FOR HEADER OF LDB 0 MEMORY ALLOCATION TABLE JSB SETCR ISZ PPREL JSB BUFC CCA STA LBUF SET FIRST WORD TO -1 NXMAT LDA PPREL LEAVE ROOM FOR PARTITION DEFINITIONS LDB 0 IN MAT. 6 WORD ENTRIES FOR EACH ADB P5 STB PPREL JSB SETCR ISZ PPREL ISZ NMAX JMP NXMAT JSB SPACE JMP ID * MES18 DEF *+1 ASC 14,* MAX NUMBER OF PARTITIONS? * * $MATA DEF *+1 ASC 3,$MATA $MPFT DEF *+1 ASC 3,$MPFT $MRMP DEF *+1 ASC 3,$MRMP END RTMG1 @{TRNNT   91740-18051 1826 S 0322 SOURCE RTMG2              H0103 ASMB,R,L,C RTMG2 * NAME: RTMG2 RTE-M SEGMENTED GEN.-LOADER (SEGMENT 6) * SOURCE: 91740-18051 * RELOC: 91740-16051 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * HED RTE-M SYSTEM GENERATOR-LOADER NAM RTMG2,5 91740-16051 REV 1826 780421 * * A EQU 0 ***************** - HIGH CORE - ****************** * * * - IDENTS - * * * ************************************************** * - FIXUP TABLES - * * ---------- * * * * * * ------- * * - LST - * ************************************************** * * * * * PROGRAM LOADING CONTROL * * * * * ************************************************** * * * * I/O TABLE GENERATION * * * * ************************************************** * * * * * PARAMETER INPUT * * ln * * * ************************************************** * * * SKP * * * * * * RTMGN PROGRAM TABLE FORMAT (IDENTS) * * WORD 1: IP1 - NAME 1,2 * WORD 2: IP2 - NAME 3,4 * WORD 3: IP3 - NAME 5,SC * * SC = 0 PROGRAM HAS BEEN LOADED * = XX (OCTAL) INT PRG * * * LST FORMAT * * WORD 1: LST1 - NAME 1,2 * WORD 2: LST2 - NAME 3,4 * WORD 3: LST3 - NAME 5, ORDINAL * WORD 4: LST4 - IDENT ADDRESS * WORD 5: LST5 - BP LINK ADDRESS * * * * ENTERNS AND EXTERNS * * * EXT ADDRS,ABRT1,BPLOC,CLFL2,CONSO EXT DCB2,ER#OR,EXEC6,IN#CK,KONSO EXT LENGT,LNKDR,LST4,LSTUL EXT MAPS,.MEM1,.MEM2 EXT .MEM3,.MEM4,.MEM5,.MEM6,MLOCC,OPT.3 EXT PLK4,PLK,PLKS,PRINT EXT SSTBL,TIMES EXT ?XFER * EXT AINT#,ALBUF,BIDNT,CURAT EXT DO#ON,ELIB,GBUF,GE#AL,GE#NA EXT GE#OC,GI#IT,GNSG2,GREAD,GTIME EXT IDNOS,IDS,IDSAD,IN#RR EXT INTER,IP1,IP2,IP3 EXT KEYCN,LWACG,LWAMG,LWSA1 EXT MATA,MAXPT,MPFT EXT MRMP,MSIZE,OC#NO EXT PARNO,PCOM,PGLIB,PLIB,PNAMA,PNAME,PP#EL EXT PRIN1,PRIN2,PROCT,RANAD,REL06,RELOC EXT RTMLI,SAVE2,SG1AD,SP#CE,SSGAP,START EXT STRAD,STRPN,SYSAD,SYSTM,TBUF#,TCNT,WDCNT * EXT $OPSY EXT DU#MY * * * ERROR EQU ER#OR INDCK EQU IN#CK AINT EQU AINT# DOCON EQU DO#ON GETAL EQU GE#AL GETNA EQU GE#NA GETOC EQU GE#OC GINIT EQU GI#IT INERR EQU IN#RR LOCC EQU MLOCC OCTNO EQU OC#NO PPREL EQU PP#EL SPACE EQU SP#CE TBUF EQU TBUF# FTIME EQU GTIME LBUF EQU GBUF READ EQU GREAD * * * * * .MEM. TABLE DEFINITIONS * * .MEM1 = FWABP * .MEM2 = LWABP * .MEM3 = FWAM * .MEM4 = LWAM * .MEM5 = FWAC * .MEM6 = LWAC * * * * ERROR CODES * * AD: INVALID ENTRY POINT * CH: INVALID CHANNEL NUMBER * DR: INVALID DRIVER NAME * DU:/N DUPLICATE PROGRAM NAME * EQ: INVALID EQT. NO. IN INT. RECORD * IN: PARAMETER INTERVAL EXECUTION ERROR * LU: INVALID DEVICE REFERENCE NUMBER * ON: INVALID ON PARAMETER * NA: PARAMETER NAME ERROR * PA: PARAMETER ERROR * PD: PARTITION ALREADY DEFINED * PR: PARAMETER PRIORITY ERROR * PS: NOT ENOUGH MEMORY LEFT FOR PARTITION * PT: PARTITION DEFINITION ERROR * SO: SYSTEM OVERFLOW * TB: SYMBOL TABLE/ID SEGMENT OVERFLOW * * SUP SKP RTMG2 NOP NOP LDA IDAA REMOVE JSB INDCK STA IDAA INDIRECT LDA STRPA JSB INDCK ADDRESSES STA STRPA LDA PATBL FOR JSB INDCK STA PATBL DEFS LDA APNAM JSB INDCK STA APNAM LDA GNSG2 WHERE GO FLAG SZA,RSS JMP REL06 RET TO SEG. THAT CALLED LDR. SUBCONTROL CPA P1 JMP RTMG4 FIRST ENTRY IN GEN SEG 2 CPA P2 JMP RTMG7 RELOCATE RESIDENT LIBRARY JMP RTMGS RETURN FROM SNAP OUTPUT * HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** *** SYSTEM BASE PAGE COMMUNICATION AREA *** * * * SYSTEM TABLE DEFINITION * * . EQU 1650B KEYWD DEF .+7 FWA OF KEYWORD BLOCK * * DEFINITION OF SYSTEM LISTS (QUEUES) * * SKEDD DEF .+33 'SCHEDULE' LIST, * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 DEF .+58 FWA USER BP LINK AREA LBORG DEF .+61 FWA OF RESIDENT LIBRARY AREA RTORG DEF .+62 FWA OF REAL-TIME COMMON RTCOM DEF .+63 LENGTH OF REAL TIME COMMON AREA AVMEM DEF .+65 LWA+1 MEMORY REAL TIME PARTITION BGORG DEF .+66 FWA OF BACKGROUND COMMON * * UTILITY PARAMETERS * BGLWA DEF .+87 LWA MEMORY BACKGROUND PARTITION SKP * * ROUTINE TO RESERVE AND SET CORE ON THE * LOADER PRODUCED ABSOLUTE OUTPUT. * * CALLING SEQUENCE: * A = FINAL STARTING ADDRES * B = FINAL ENDING ADDRESS * * SETAD = ADDRESS OF JTHE OUTPUT DATA BUFFER * * JSB SETCR * * RETURN: A AND B ARE DESTROYED * SETCR NOP STA TEMP1 CMA,INA ADA ALBUF BUFFER ADDRESS STA PLKS OFFSET ADDRESS LDA TEMP1 STARTING ADDRESS STA PLK4 JSB PLK OUTPUT ROUTINE IN THE LOADER JMP SETCR,I * * * * SUBROUTINE TO DETERMINE IF ANSWER IS YES OR NO * MAYBE NOP JSB READ PRINT MESSAGE, GET REPLY LDA N2 GET FIRST TWO ASCII CHARACTERS JSB GETNA CCB CPA NO NO? CLB YES CPA YE YES? CLB,INB YES SSB,RSS ISZ MAYBE SSB JSB INERR PARMETER ERROR JMP MAYBE,I * NO ASC 1,NO YE ASC 1,YE * N2 DEC -2 SKP * * * * THE BUFCL SUBROUTINE STUFFS A 64 WORD BUFFER WITH CALL+1 * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF BUFFER * JSB BUFCL * CALL+1 = DATA TO BE STUFFED * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * BUFCL NOP LDB ALBUF LDA N64 STA WDCNT SET BUFFER LENGTH = 64 LDA BUFCL,I GET STUFF DATA STA 1,I CLEAR BUFFER WORD INB ISZ WDCNT ALL WORDS CLEAR? JMP *-3 NO - CONTINUE CLEARING ISZ BUFCL JMP BUFCL,I RETURN * N64 DEC -64 SPC 5 * * SUBROUTINE TO CLEAR THE OUTPUT BUFFER * BUFC NOP JSB BUFCL OCT 0 JMP BUFC,I SKP * * ROUTINE TO COMPARE TWO NAME BUFFERS * * * CALLING SEQUENCE: * A = ADDRESS OF SOURCE NAME- 3 ENTRIES * B = ADDRESS OF TABLE 3 ENTRIES * JSB NACMP * * RETURN: A AND B ARE DESTROYED * (N+1) NAMES DO NOT COMPARE * (N+2) NAMES COMPARE * NACMP NOP STA TEMP1 SAVE SOURCE ADDRESS STB TEMP2 SAVE TABLE ADDRESS LDA N2 LOOP COUNT STA TEMP3 NACM1 LDA TEMP1,I SOURCE ENTRY CPA TEMP2,I TABLE COMPARE RSS YES,COMPARE, LOOK NEXT JMP NACMP,I NO IT DOESN'T RETURN ISZ TEMP1 BUMP SOURCE ISZ TEMP2 BUMP TABLE ISZ TEMP3 JMP NACM1 TRY AGAIN LDA TEMP2,I FIRST TWO COMPARE, LOOK LAST AND M400 LOOK UPPER ONLY STA 1 LDA TEMP1,I AND M400 CPA 1 ISZ NACMP BUMP RETURN FOR COMPARE! JMP NACMP,I * M400 OCT -400 TEMP1 NOP TEMP2 NOP TEMP3 NOP SKP * * * * SUBROUTINE TO RESERVE AND SET CORE * * CALLING SEQUENCE: * A = DATA TO BE OUTPUT * B = ADDRESS OF DATA * JSB STCR1 * * RETURN: * A = DATA WORD OUTPUTTED * STCR1 NOP STA LBUF SAVE DATA TO BE OUTPUT LDA 1 SET A REG TO ADDRESS JSB SETCR GO OUTPUT IT LDA LBUF GET DATA JMP STCR1,I SPC 5 SKP * * SUBROUTINE TO GET THE ADDRESS OF THE FOLLOWING ENTRIES * IN THE LST, TO SET THEM TO THEIR PROPER VALUE, AND TO * OUTPUT THEM. * STUFF NOP STA LBUF SAVE VALUE OF ENTRY JSB SSTBL FIND IN LST JMP ABRT1 ISN'T THERE, START OVER LDA LST4,I GET ADDRESS LDB 0 JSB SETCR GO OUTPUT VALUE JMP STUFF,I * * THE 3 WORD PROGRAM NAME IS PUT INTO THE RTMGN PROG * TABLE. THE NAMES ARE LOADED FROM THE TOP DOWN. * * CALLING SEQUENCE: * A = ADDRESS OF PROGRAM NAME * B = IGNORED * JSB LDIPX * * RETURN: A AND B ARE DESTROYED * LDIPX NOP STA IPXSV SAVE PROG NAME ADDRESS JSB INIPX INITIALIZE TO START OF TABLE LDA PROCT NUMBER OF ENTRIES ALS MULT X2 ADA PROCT PLUS ONE TO MAKE IT X3 CMA,INA ADA BIDNT BUILD NEXT NAME ADDRESS STA BIDNT FOR SAVE JSB IPX INITIALIZE IP POINTERS LDA IPXSV,I GET N1-N2 STA IP1,I PUT IN TABLE ISZ IPXSV BUMP POINTER LDA IPXSV,I GET N3-N4 STA IP2,I SAVE ISZ IPXSV ]LDA IPXSV,I GET N5-XX STA IP3,I SAVE ISZ PROCT BUMP NUMBER OF NAMES JMP LDIPX,I RETURN * IPXSV NOP PROGRAM NAME ADDRESS * SKP * * INIPX SETS THE ADDRESS OF THE FIRST ENTRY IN THE * PROGRAM IDENT TABLE AS THE CURRENT ADDRESS. * * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * * RETURN: A AND B DESTROYED * INIPX NOP LDA LWAMG ADA N2 STA BIDNT JMP INIPX,I * * * * THE IPX ROUTINE ADDRESSES THE CURRENT 3 WORD ENTRY * IN THE INTERRUPT PROGRAM TABLE FROM THE ADDRESS OF * THE CURRENT ENTRY (BIDNT). THE TABLE START ADDRESS * IS LWAM. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB IPX * * RETURN, CONTENTS OF A AND B ARE DESTROYED * IPX NOP LDA BIDNT BUILD POINTERS STA IP1 INA STA IP2 INA STA IP3 ADA N5 STA BIDNT JMP IPX,I * * N5 DEC -5 SKP * SKP * CONVERT A TO ASCII AT B * * THE CONVD SUBROUTINE CONVERTS THE CONTENTS OF A * INTO ASCII (DECIMAL OR OCTAL) AT THE LOCATION SPECIFIED * BY B. THE CONVERTED RESULT REQUIRES 3 WORDS, AND IS * IN THE FORMAT: XXXXX, WITH A SPACE IN THE FIRST POSITION. * * CALLING SEQUENCE: * A = NO. TO BE CONVERTED. IF THE SIGN OF A IS POS., * THE CONVERSION IS TO BE IN OCTAL; IF NEGATIVE, * IN DECIMAL. * B = ADDRESS OF CORE LOCATION FOR CONVERTED RESULT * JSB CONVD * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * CONVD NOP STB CURAT SET MESSAGE ADDRESS LDB OPWRS GET ADDR OF OCTAL POWERS SSA SKIP IF OCTAL CONV REQUIRED LDB DPWRS GET ADDRESS OF DECIMAL POWERS STB RANAD SET POWER RANGE ADDRESS SSA,RSS SKIP IF NEGATIVE (DECIMAL) CMA,INA CONVERT NUMBER TO NEGATIVE STA 1 PUT NUMBER IN B (REMAINDER) LDA N2 STA TCNT SET CONVERSION COUNTER JSB GETD GET FIRST DIGIT IOR B20K ADD BLANK TO FIRST CHAR STA CURAT,I SAVE FIRST BLANK, CHARACTER ISZ CURAT INCR MESSAGE ADDRESS NEXTD JSB GETD GET NEXT DIGIT ALF,ALF ROTATE TO UPPER STA CURAT,I SAVE UPPER CHARACTER JSB GETD GET NEXT DIGIT IOR CURAT,I ADD UPPER CHAR STA CURAT,I SAVE NEXT 2 CHARACTERS ISZ CURAT INCR MESSAGE ADDRESS ISZ TCNT SKIP - 5 DIGITS IN JMP NEXTD NO - CONTINUE WITH NEXT DIGIT JMP CONVD,I YES - RETURN * B20K OCT 20000 SKP * * DPWRS DEF *+1 DEC 10000 DEC 1000 DEC 100 DEC 10 P1 DEC 1 OPWRS DEF *+1 OCT 10000 OCT 1000 OCT 100 OCT 10 OCT 1 * SKP SKP * * GETD PROVIDES THE ASCII CHARACTERS FOR CONVD. * * CALLING SEQUENCE: * A = IGNORED * B = REMAINDER * JSB GETD * * RETURN: * A = ASCII DIGIT * B = IGNORED * GETD NOP CLA INCRA ADB RANAD,I ADD POWER CMB,SSB,INB,SZB SKIP - TRY NEXT HIGHER DIGIT JMP *+4 DIGIT FOUND INA INCR DIGIT CMB,INB RESTORE REMAINDER TO NEGATIVE JMP INCRA TRY HIGHER DIGIT ADB RANAD,I ADD POWER CMB,INB RESTORE REMAINDER ISZ RANAD INCR POWER LIST ADDRESS IOR B60 CONVERT TO ASCII JMP GETD,I RETURN WITH DIGIT IN A * B60 OCT 60 * SKP * * GET PAGE NUMBER * PAGE NOP AND B76K GET PAGE BITS ALF SHIFT TO BITS 0 - 5 RAL,RAL JMP PAGE,I * B76K OCT 76000 SPC 5 * * THIS ROUTINE WILL OUTPUT A 31 WORD BLOCK FROM THE * I/O BUFFER AREA. * * CALLING SEQUENCE: * A = ABS STARTING ADDR * B = IGNORED * JSB GENID * * RETURN: A AND B ARE DESTROYED * OUTID NOP LDB A ADB P30 SET LAST ADDRESS JSB SETCR GO SET CORE  JMP OUTID,I RETURN * SKP * THIS ROUTINE WILL BUILD AN ID SEGMENT IN THE OUTPUT * BUFFER (LBUF) AREA. THE BUFFER IS CLEARED AND STUFFED * WITH DATA (FROM THE PNAME TABLE) BEFORE BEING OUTPUT * BY THE OUTID ROUTINE. * * CALLING SEQUENCE: * A = ABSOLUTE ADDRESS OF SEGMENT * B = LIST LINK ADDREESS TO NEXT SEGMENT * JSB GENID * * * RETURN: A AND B ARE DESTROYED * GENID NOP STA IDSAV STB LNKSV JSB BUFC CLEAR BUFFER LDA LNKSV GET LINK ADDRESS STA LBUF PUT IN BUFFER LDA PNAME+7 GET PRIORITY SZA,RSS LDA P9999 DEFAULT TO 9999 STA LBUF+6 LDA ?XFER ENTRY POINT STA LBUF+7 LDA IDSAV ADDRESS OF WORD 2 OF INA ID SEGMENT STA LBUF+10 LDA PNAME NAME 1,2 STA LBUF+12 LDA PNAME+1 NAME 3,4 STA LBUF+13 LDA PNAME+2 NAME 5, BLNK AND M400 MASK OUT BLANK INA MAKE TYPE 1 STA LBUF+14 LDA PNAME+8 RESOLUTION ALF,ALF ALF,RAL SHIFT INTO PLACE IOR PNAME+9 MERGE EXEC MULT STA LBUF+17 PUT IN BUFFER JSB TIMES PROCESS TIME PARAMETERS STA LBUF+18 STB LBUF+19 LDA .MEM3 LOW MAIN STA LBUF+22 LDA LOCC HIGH MAIN STA LBUF+23 LDA .MEM1 LOW BASE STA LBUF+24 LDA BPLOC HIGH BASE STA LBUF+25 LDA LOCC UPDATE FWAM STA .MEM3 FWAM LDA BPLOC UPDATE FWABP STA .MEM1 FWABP LDA IDSAV ABS ADDRESS JSB OUTID GO OUTPUT ID SEGMEMT JMP GENID,I RETURN * IDSAV NOP ABSOLUTE ADDRESS OF SEGMENT LNKSV NOP LINK ADDRESS TO NEXT SEGMENT * P9999 DEC 9999 * SKP * * SEARCH RTMGN PROG TABLE * * THIS IS A MULTIPLE ENTRY ROUTINE WHICH WILL EITHER * SEARCH FOR A NAME OR CONTINUE FROM THE LAST FIND. * * CALLING SEQUENCE: *  A = ADDRESS OF NAME (3WORD) * B = IGNORED * JSB SRIPX * * RETURN: * (N+1) PROGRAM NAME WAS FOUND IN TABLE, IN IP1-3 * (N+2) REACHED THE END OF THE PROGRAM TABLE * SRIPX NOP LDB WDCNT SEARCH OR CONTINUE? SZB JMP SRIP1 CONTINUE STA SRISV INIT SEARCH JSB INIPX SET UP IP POINTERS LDA PROCT NUMBER OF ENTRIES CMA STA WDCNT SAVE FOR LOOPING SRIP1 ISZ WDCNT ALL DONE? JMP *+3 NO, GO COMPARE NAMES ISZ SRIPX YES, BUMP RETURN JMP SRIPX,I JSB IPX SET POINTERS LDB IP1 NAME IN TABLE LDA SRISV,I LOOK FOR NAME JSB NACMP GO COMPARE JMP SRIP1 DOSN'T COMPARE, LOOK NEXT JMP SRIPX,I DOES COMPARE, RETURN * SRISV NOP IDAA DEF *+1 ID5 NOP PRIORTY ID6 NOP RESOLUTION CODE ID7 NOP EXEC. MULTIPLE ID8 NOP HOURS ID9 NOP MINUTES ID10 NOP SECONDS ID11 NOP TENS OF MILLISECONDS * M20K OCT -20000 * SET PARAMETERS SKP * * THE PARAMETER INPUT SECTION PERMITS ALTERATION (OR INTRODUCTION) * OF THE NAME, PRIORITY, AND EXECUTION INTERVAL FOR EACH PROGRAM. * EACH PARAMETER RECORD HAS ONE OF THE FOLLOWING FORMATS: * * NAME * NAME,PRIORITY * NAME,PRIORITY,EXECUTION INTERVAL * * PRIORITY = 5 DECIMAL DIGITS (1-32767) * EXECUTION INTERVAL = 6 OPERANDS * 1 - RESOLUTION CODE (2 DECIMAL DIGITS) * 2 - EXECUTION MULTIPLE (5 DECIMAL DIGITS) * 3 - HOURS (2 DECIMAL DIGITS) * 4 - MINUTES (2 DECIMAL DIGITS) * 5 - SECONDS (2 DECIMAL DIGITS) * 6 - 10'S MULLISECONDS (2 DECIMAL DIGITS) * * * RETURN: A AND B ARE DESTROYED * (N+1): SOME PARAMETERS WERE ENTERED * (N+2): NO PARAMETERS WERE ENTERED * * TBUF CONTAINS THE ENTERED NAME * * PARAM NOP PAR00 JSB READ GET ASCII PARAMETER RECORD SZA,RSS SKIP IF CHAR7S INPUT JMP PAR01 REPEAT PARAMETER INPUT STA PARNO SAVE PARAMETER RECORD LENGTH CLA STA ID5 STA ID6 STA ID7 STA ID8 STA ID9 STA ID10 STA ID11 JSB GETAL CPA B60 JMP PARAM,I STA 1 CMA,INA CHECK TO SEE IF ASCII ADA B132 IS < = TO OCT 132 SSA JMP PAR05 NO CMA,INA ADA B71 AND > = TO OCT 41 SSA JMP PAR05 NO ADB M56 OCT 47 TO OCT 55 SSB,RSS NOT ALLOWED JMP PAR02 > = OCT 56 CMB,INB ADB N8 SSB JMP PAR05 > = OCT 47 AND < = OCT 55 PAR02 ISZ PARAM JSB GINIT INITIALIZE BUFFER SCAN LDA N5 JSB GETNA MOVE CHARS FROM LBUF TO TBUF JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = BLANK?(DELIMITER = COMMA) JMP SETYP YES - CONTINUE CPA ZERO JMP PARAM,I * PAR05 LDA PA PARAMETER NAME ERROR JMP PARER PAR01 JSB INTER JSB SPACE LDA LENGT LDB ADDRS JMP PAR00 * * SET NEW PROGRAM PRIORITY SETYP LDA N5 SET COUNT FOR DECIMAL CONVERSION JSB GETOC CONVERT TO OCTAL JMP PAPER PRIORITY ERROR JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO ? (END OF BUFFER) RSS YES - CONTINUE CPA BLANK CHAR = BLANK?(DELIMITER = COMMA) JMP SETNR SET PRIORITY PAPER LDA PR PARAMETER PRIORITY ERROR JMP PARER * SETNR LDB OCTNO GET PRIORITY STB ID5 SET NEW PRIORITY JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO ? (END OF BUFFER) JMP PARAM,I YES,RETURN * * GET RESOLUTION CODE LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF STA ID6 SET IN IDENT 6 * * k GET EXECUTION MULTIPLE LDA N5 SET COUNT FOR DECIMAL CONVERSION JSB EXINT GET DIGITS FROM LBUF AND M20K ISOLATE UPPER 3 BITS IN A SZA SKIP IF VALID MULTIPLE JMP PAIER INVALID EXECUTION INTERV FORMAT LDA OCTNO GET CONVERTED NUMBER STA ID7 * * GET HOURS LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF ADA N24 STA ID8 * * GET MINUTES LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF ADA N60 STA ID9 * * GET SECONDS LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF ADA N60 STA ID10 * * GET TENS OF MILLISECONDS LDA N2 SET FOR DECIMAL CONVERSION JSB GETOC CONVERT TO OCTAL JMP PAIER INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = 0? (END OF BUFFER) RSS YES - CONTINUE JMP PAIER NO - INVALID DELIMITER LDA OCTNO ADA N100 STA ID11 JMP PARAM,I * * EXECUTION INTERVAL INPUT CONTROL EXINT NOP JSB GETOC CONVERT TO OCTAL JMP PAIER INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = BLANK? (DELIMITER=COMMA) RSS YES - CONTINUE JMP PAIER NO - INVALID DELIMITER LDA OCTNO GET CONVERTED NUMBER JMP EXINT,I RETURN WITH NUMBER IN A PAIER LDA IN PARAMETER INTERVAL ERROR * PARER CLB NO FMP ERROR JSB ERROR ERROR JMP PAR01 REPEAT INPUT * IN ASC 1,IN PARAMETER INTERVAL ERROR PA ASC 1,PA PARAMETER ERROR PR ASC 1,PR PARAMETER PRIORITY ERROR * M56 OCT -56 N8 DEC -8HFB N24 DEC -24 N60 DEC -60 N100 DEC -100 B71 OCT 71 B132 OCT 132 ZERO DEC 0 BLANK OCT 40 * SKP SKP * THIS ROUTINE WILL UPDATE THE PARAMETERS IN THE * PNAME TABEL. THE SOURCE WILL BE FROM THE * "ENTR PRAMS" TABLE * * CALLING SEQUENCE: * A = SOURCE ADDRESS * B = IGNORED * JSB UPNAM * * RETURN: A AND B ARE DESTROYED * UPNAM NOP STA TEMP1 SAVE SOURCE ADDRESS LDA TEMP1,I GET PRIORITY STA PNAME+7 YES ISZ TEMP1 LDA TEMP1,I GET RESOLUTION SZA STA PNAME+8 UPDATE ISZ TEMP1 LDA TEMP1,I EXEC MULT. SZA STA PNAME+9 ISZ TEMP1 LDA TEMP1,I HOURS SZA STA PNAME+10 ISZ TEMP1 LDA TEMP1,I MINUTES SZA STA PNAME+11 ISZ TEMP1 LDA TEMP1,I SECONDS SZA STA PNAME+12 ISZ TEMP1 LDA TEMP1,I TENS OF MILLISECONDS SZA STA PNAME+13 JMP UPNAM,I RETURN * :H HED BUILD ID'S AND KEY WORD TABLE * * GET ID'S AND BUILD KEY WORD TABLE * RTMG4 JSB BUFC LDA PPREL KEY WORD TABLE ADDRESS LDB KEYWD ABS ADDRESS JSB STCR1 LDA PPREL STA KEYAD KEY WORD ADDRESS KEYID JSB INTER LDA P10 LDB MES42 # ID SEGS? JSB READ PRINT MESSAGE, GET REPLY LDA N2 GET TWO DECIMAL JSB GETOC JMP IDWER BAD NUMBER STA KEYCN # OF ID SEGS TO KEY COUNT SZA,RSS JMP IDWER DO NOT ACCEPT ID COUNT OF ZERO! CMA,INA ADA P99 OR > 99 SSA JMP IDWER LDA KEYCN RESTORE A ADA PPREL ADD TO PRESENT LOCATION ADA P3 FOR ZERO END STA PPREL UPDATE PPREL STA SYSAD INITIAL ID SEG ADDRESS STA IDSAD FIRST ID SEG ADDRESS JMP *+3 IDWER JSB INERR ERROR JMP KEYID REPEAT INPUT JSB GETAL SZA JMP IDWER NO, ERROR LDA KEYCN NO. OF KEY WORDS CMA,INA STA WDCNT LDA SYSAD STA TEMP2 LDA KEYAD STA TEMP3 KYBLD LDA TEMP2 ADDRESS OF NEXT ID LDB TEMP3 KEY WORD ADDRESS ISZ TEMP3 BUMP TO NEXT KEY WORD ADDR JSB STCR1 OUTPUT TO ABS LDA TEMP2 UPDATE ID ADDRESS ADA P31 SEG SIZE STA TEMP2 ISZ WDCNT ALL DONE? JMP KYBLD NOT DONE YET STA PPREL NEW RELOCATE ADDRESS JSB BUFC CLA ZERO LDB TEMP3 LAST KEYWORD ADDRESS JSB STCR1 LDA KEYCN GET ID SEG COUNT CMA,INA STA WDCNT SAVE NEG LDA SYSAD ADDRESS OF FIRST ID SEG STA TEMP3 ADA N2 LDB 0 INB CLEAR 1ST TWO WORDS OF ID SEGMENT JSB SETCR CLOOP LDA TEMP3 STARTING ADDRESS LDB A ADB P30 BUMP TO LAST ADDR STB TEMP3 UPDATE STB LBUF ISZ LBUF POINT TO NEXT ID SEG ISZ TEMP3 TO NEXT ADDR JSB SETCR CLEAR ID SEGMENT ISZ WDCNT ALL DONE? JMP CLOOP NO, DO MORE LDB TEMP3 CLEAR LAST LINK POINTER ADB N31 CLA JSB STCR1 * * RESERVE SPACE FOR IDENTS * LDA KEYCN # OF ID SEGMENTS ALS ADA KEYCN MULTIPLY BY 3 CMA,INA ADA OPT.3 STA OPT.3 SET FOR START OF FIXUP TABLE LDB LSTUL HIGHEST LST ENTRY CMB ADA 1 SSA,RSS JMP STUPG GET START UP PROGRAM LSERR LDA TB IDENTOLST OVERFLOW CLB NO FMP ERROR JSB ERROR IRRECOVERABLE ERROR JMP ABRT1 EXIT TO SYSTEM SKP * N31 DEC -31 P3 DEC 3 P10 DEC 10 P30 DEC 30 P99 DEC 99 * KEYAD NOP ADDRESS OF KEYWORD TABLE * MES42 DEF *+1 ASC 5,* #ID SEG? * TB ASC 1,TB IDENT/LST OVERFLOW HED GET START-UP PROGRAM * * GET START-UP PROGRAM * STUPG JSB SPACE NEW LINE JSB INTER LDA P16 LDB MES05 START-UP PROG JSB PARAM GO GET PARAMETERS JMP RTMLI NO PARAMS WERE INPUT LDA TBUF MOVE NAME 1,2 STA STRPN STA START START-UP PROGRAM USED LDA TBUF+1 NAME 3,4 STA STRPN+1 LDA TBUF+2 NAME 5 AND UPCR IOR BLANK STA STRPN+2 LDA SYSAD SEG ONE ADDRESS LDB SKEDD ADDRESS IN BASE PAGE JSB STCR1 TO ABSOLUTE LDA SYSAD SEG ONE ADDRESS STA SG1AD ADA P31 UPDATE TO NEXT STA SYSAD ISZ IDNOS BUMP NOS OF ID'S * JMP RTMLI SKP HED RELOCATE RESIDENT LIBRARY * * RELOCATE RESIDENT LIBRARY * RTMG7 JSB SPACE NEW LINE RESL1 JSB INTER INTERACTIVE INPUT LDA PPREL UP LOCC FOR RELOCATE STA .MEM3 LDB LBORG JSB STCR1 LDA P13 PRINT: LDB MES04 REL RES LIB oh JSB RELOC RELOCATE MODULE DEC 2 JMP RESL1 LOADER ERROR, TRY AGAIN LDA .MEM3 STA PLIB SAVE ADD JUST PAST RES LIB STA SSGAP ADA N1 STA ELIB ADDRESS AT END OF RES LIB JSB PAGE GET PAGE NO. STA PGLIB PAGE NO. AT END OF RES LIB SPC 5 * * RELOCATE SSGA MODULES * JSB SPACE NEW LINE RSSGA JSB INTER INTERACTIVE INPUT LDA P10 LDB MES19 REL SSGA JSB RELOC RELOCATE MODULE DEC 3 JMP RSSGA LOADER ERROR, TRY AGAIN LDA .MEM3 STA SAVE2,I LDB RTORG BASE PAGE LOCATION JSB STCR1 OUTPUT TO ABS JSB BUFC LDA .MEM1 SET BASE PAGE LOWER LIMIT STA LBUF LDA .MEM2 SET BASE PAGE UPPER LIMIT STA LBUF+1 LDA BPA1 FIRST BP ADDRESS LDB A INB LAST BP ADDRESS JSB SETCR SET TO BP COMMON AREA SKP * * SET UP COMMON AREA * JSB SPACE NEW LINE WDSCM JSB INTER INTERACTIVE INPUT LDA P16 LDB MES07 # WDS IN COMM? JSB READ PRINT MESSAGE, GET REPLY LDA N5 JSB DOCON GET 5 DIGITS JMP WDSCM ERROR, REPEAT INPUT LDA .MEM3 UPDATE FWAC STA .MEM5 ADA OCTNO UPDATE LWAC * * ADJUST COMMON AREA TO PAGE BOUNDARY * JSB SIZE PRINT LAST WORD OF COMMON JSB SPACE NEW LINE ALIGN JSB INTER INTERACTIVE INPUT LDA P21 LDB MES23 ALIGN AT NEXT PAGE? JSB MAYBE PRINT MESSAGE, GET REPLY JMP ALIGN ERROR, REPEAT INPUT SZB,RSS JMP MPFTI NO LDA .MEM6 YES, ADJUST LWAC TO END OF PAGE AND M2000 ADA B2000 JSB SIZE PRINT LAST WORD OF COMMON MPFTI LDA .MEM6 SAVE LWAC STA LWACG LDA .MEM5 GET FWAC CMA,INA ADA .MEM6 DETERMINE COMMON LENGTH INA LDB RTCOM COMMONS, SIZE TO BASE PAGE JSB STCR1 * * STUFF MEMORY PROTECT FENCE TABLE AND OUTPUT IT * JSB BUFC CLEAR OUTPUT BUFFER LDA PLIB 1ST ENTRY IN MPFT STA LBUF ADD JUST PAST RES LIB STA LBUF+3 STA LBUF+4 LDA .MEM3 ADDRESS JUST PAST COMMON STA LBUF+1 LDA .MEM5 ADDRESS AT START OF COMMON STA LBUF+2 LDA MPFT LDB 0 ADB P4 JSB SETCR OUTPUT TABLE JMP REL00 SKP * APNAM DEF PNAMA * M2000 OCT -2000 N4 DEC -4 B1001 OCT 100001 B2000 OCT 2000 P4 DEC 4 P13 DEC 13 P15 DEC 15 P16 DEC 16 P19 DEC 19 P21 DEC 21 P28 DEC 28 * DU ASC 1,DU DUPLICATE ENTRY * MES3I DEF MES3A MES03 DEF *+1 ASC 9,* LWA OF COMMON = MES3A BSS 3 MES04 DEF *+1 ASC 7,* REL RES LIB MES05 DEF *+1 ASC 8,* START-UP PROG? MES07 DEF *+1 ASC 8,* # WDS IN COMM? MES19 DEF *+1 ASC 5,* REL SSGA MES23 DEF *+1 ASC 11,* ALIGN AT NEXT PAGE? * * * * DISPLAY LWA OF COMMON * * SIZE NOP STA .MEM3 SET FWAM ADA N1 STA .MEM6 LDB MES3I JSB CONVD STUFF LWAC TO OUTPUT BUFFER LDA P24 LDB MES03 LWA OF COMMON = JSB PRIN1 JMP SIZE,I * N1 DEC -1 P24 DEC 24 HED RELOCATE CORE RESIDENT PROGRAMS * * RELOCATE CORE RESIDENT PROGRAMS * REL00 CLA,INA SET LINK DIRECTION FLAG STA LNKDR TO USER LINKS REL01 JSB SPACE NEW LINE RELRS JSB INTER INTERACTIVE INPUT LDA IDNOS GET # OF ID SEGMENTS LEFT CMA,INA ADA KEYCN LDB STRPN START-UP PROGRAM REQUESTED? SZB INA YES STA IDS SZA,RSS ANY ID SEGMENTS LEFT? JMP IDZER NO LDA P16 LDB MES08 REL USER PROGS JSB RELOC DEC 0 JMP RELRS LOADER ERROR, TRY AGAIN LDA ?XFER WAS ZERO INPUT? SZA,RSS JMP SN=APO YES, GO DO SNAPSHOT * * CHANGE PARAMETERS * JSB SPACE NEW LINE SRFIN JSB INTER INTERACTIVE INPUT LDA P13 LDB MES10 ENTER PRAMS JSB PARAM GO GET PARAMS JMP SRFI5 NO PARAMS INPUT, NO CHANGE LDA TBUF NAME 1,2 STA PNAME LDA TBUF+1 NAME 3,4 STA PNAME+1 LDA TBUF+2 NAME 5 STA PNAME+2 LDA IDAA ADDRESS OF PARAMETERS JSB UPNAM UPDATE PARAMETERS SRFI5 CLA STA WDCNT CLEAR FOR FIRST TIME LDA APNAM JSB SRIPX SEARCH FOR DUPS JMP *+7 FOUND ONE LDA PNAME+2 MASK OUT LOWER BLANK AND M400 STA PNAME+2 AND RESTORE LDA PNAMA THIS NAME NOT IN TABLE JSB LDIPX SO, PUT IT THERE JMP SRFI6 CONTINUE PROCESSING LDA IP3,I IS THIS AN INT PRG? AND B77 SZA JMP SRFI6 YES, ITS OK LDA DU NO, LOOKS LIKE A DUP ENTRY CLB NO FMP ERROR JSB ERROR JMP SRFIN ERROR, REPEAT INPUT * SRFI6 LDA STRPA ADDRESS OF START UP NAME LDB PNAMA JUST LOADED NAME JSB NACMP COMPARE NAMES JMP SRFI2 NO COMPARE CLA DOES COMPARE STA STRPN CLR STRT FLAG LDA IDSAD SEGMENT ADDRESS CLB POINTS TO ADDRESS JSB GENID GO BUILD ID SEGMENT LDA IDSAD GET ID SEG ADDRESS INA POINT TO TEMPORARY STORAGE LDB 0 ADB P9 WORD 11 IN SEG JSB STCR1 ADD WORD TO SEG CLA,INA STA LBUF LDA IDSAD ADA P15 PUT A 1 INTO WORD 16 OF THE SEG LDB A JSB SETCR LDA IDSAD GET CORRECT ID SEG ADDRESS JSB SRFI3 "PROGS" WERE ENTERED, GO LOOK FOR IT JMP REL01 GO RELOCATE NEXT * SRFI2 ISZ IDNOS ENTERED PROGS EXCEEDED ID SEGS? LDA IDNOS CMA,INA ADA KEYCN SSA JMP LSERR #IRRECOVERABLE ERROR YES!! LDA SYSAD GET CORRECT ID SEG ADDRESS JSB SRFI3 GO CHECK FOR INT-PRGS LDA SYSAD BUILD SEG IN THIS ADDRESS LDB A ADB P31 LOOK TO NEXT SEGMENT STB SYSAD DYNAMIC SEG POINTER JSB GENID BUILD ID SEG LDA IDNOS NO. OF ID SEGMENTS USED CPA KEYCN ON LAST ONE? RSS JMP REL01 NO, GO GET NEXT LDB SYSAD DON'T LINK TO NEXT ID SEGMENT ADB N31 CLA JSB STCR1 JMP REL01 GO GET NEXT * SRFI3 NOP STA PPREL SAVE ID SEG ADDRESS CLA STA WDCNT CLEAR FOR INITIAL ENTRY LDA APNAM ADDRESS OF INPUTTED PROG NAME SRFI4 JSB SRIPX GO SEARCH RSS FOUND NAME JMP SRFI3,I END OF TABLE LDA IP3,I COMPARES,GET SC AND B77 SZA,RSS JMP SRFI4 ADA AINT ADDRESS OF INTERRUPT TABLE ADA N6 LDB A LDA PPREL SET NEG OF ID ADDRESS CMA,INA INTO THE INTERRUPT TABLE JSB STCR1 LDA IP3,I AND M400 STA IP3,I SHOW ENTRY AS USED JMP SRFI4 LOOK AGAIN SKP * N3 DEC -3 N6 DEC -6 N30 DEC -30 P5 DEC 5 P9 DEC 9 P22 DEC 22 P36 DEC 36 P38 DEC 38 B77 OCT 77 * ESAM NOP END OF SAM FPSAM NOP FIRST PAGE OF SAM LPMRP NOP LAST PAGE OF MEMORY RESIDENT PROGRAMS LWAMR NOP LWA OF MEM RES PROG AREA NOSAM NOP SAM NOP * STRPA DEF STRPN * MES08 DEF *+1 ASC 8,* REL USER PROGS MES10 DEF *+1 ASC 7,* ENTER PRAMS ME35I DEF ME35A MES35 DEF *+1 ASC 10,* LWA MEM RES PROG = ME35A BSS 3 OCT 20040 ASC 4,CHANGE? ME36I DEF ME36A MES36 DEF *+1 ASC 4,* SAM = ME36A BSS 3 OCT 20040 ASC 3,WORDS ME37I DEF ME37A MES37 DEF *+1 ASC 16,* NO. ADD. PAGES FOR SAM? MAX = ME37A BSS 3 SKP HED CHANGE CORE BOUNDARIES| * * START-UP PROGRAM REQUESTED? * IDZER LDA P21 LDB MES48 NO ID SEGMENTS LEFT JSB PRIN1 PRINT MESSAGE SNAPO LDA STRPN WAS START-UP PRG REQUESTED? SZA,RSS BUT NOT LOADED JMP MRPA NO LDA IDS SZA,RSS ANY ID SEGMENTS LEFT? JMP LSERR NO, IRRECOVERABLE ERROR JSB SPACE NEW LINE LDA P16 LDB MES05 START-UP PROG? JSB PRIN2 PRINT MESSAGE JSB INTER INTERACTIVE INPUT JSB SPACE NEW LINE LDA P5 LDB STRPA START-UP PROG NAME JSB PRINT PRINT MESSAGE LDA P5 LDB STRPA JSB MAPS JSB SPACE NEW LINE JSB INTER INTERACTIVE INPUT CLA STA FTIME CLA,INA STA CONSO INPUT TO SESSION CONSOLE JMP RELRS RELOCATE START-UP PROGRAM * MRPA LDA KONSO STA CONSO CLA STA PPREL HEADER FLAG STA WDCNT LDA P1 NAME ADDRESS SNAP6 JSB SRIPX GO SEARCH RSS FOUND SOMETHING JMP SNAP7 END OF TABLE LDA IP3,I IS IT AN INT PRG NAME? AND B77 SZA,RSS JMP SNAP6 NO, LOOK NEXT LDA PPREL HEADER BEEN PRINTED? SZA JMP *+7 YES JSB SPACE NO, PRINT IT LDA P10 LDB MES12 INT PRGS STA PPREL SET HEADER FLAG JSB PRIN2 JSB SPACE NEW LINE LDA IP3,I PUT BLANK IN LAST CHARACTER AND UPCR IOR P32 STA IP3,I LDA P5 LDB IP1 PRG NAME JSB PRINT LDA LENGT LDB ADDRS JSB MAPS JMP SNAP6 LOOK NEXT * SNAP7 JSB SPACE NEW LINE SNAP9 JSB INTER INTERACTIVE INPUT LDA PPREL ANY INT PRGS PRINTED? SZA,RSS JMP MRPA4 NO, CONTINUE CLA,INA STA CONSO LDA P9 LDB MES13 IGNORE? JSB MAYBE PRINT MESSAGE, GET REPLY JMP SNAP9 U ERROR, REPEAT INPUT SZB,RSS JMP RELRS MRPA4 LDA KONSO STA CONSO LDA START SZA,RSS ANY START-UP PROGRAM? JMP MRPA0 NO JSB BUFC LDB SG1AD ADB P28 LDA B1001 JSB STCR1 MRPA0 JSB SPACE NEW LINE MRPA1 JSB INTER INTERACTIVE INPUT CCA ADA .MEM3 GET LWA MEM RES PROG STA LWAMR LDB ME35I JSB CONVD PUT IN OUTPUT BUFFER LDA P36 LDB MES35 LWA MEM RES PROG = XXXXX CHANGE? JSB READ PRINT MESSAGE, GET REPLY LDA P5 JSB DOCON GET NEW LWA MEM RES PROG JMP MRPA1 REPEAT INPUT SZA,RSS LDA LWAMR NO CHANGE STA LWMRP CMA,INA CHECK IF LWAMR IS SMALLER THAN BEFORE ADA LWAMR CMA,INA SSA,RSS JMP MRPA3 NEW LWAMR IS > OR = OLD LWAMR JSB INERR ERROR, TRY AGAIN JMP MRPA1 MRPA3 LDA LWMRP STA LWAMR JSB SPACE NEW LINE ALSAM JSB INTER INTERACTIVE INPUT LDA P21 LDB MES23 ALIGN AT NEXT PAGE? JSB MAYBE PRINT MESSAGE, GET REPLY JMP ALSAM ERROR, REPEAT INPUT SZB,RSS JMP MRPA2 NO LDA LWAMR YES, ADJUST LWAMR TO END OF PAGE AND M2000 ADA B1777 STA LWAMR MRPA2 LDA LWAMR STA .MEM4 NO, RESET LWAM AND M2000 ADJUST SYS AV. MEM. TO END ADA B1777 OF PAGE CLB CPA LWAMR CLB,INB MEM RES PROGS EXTEND TO END OF PAGE STA ESAM END OF SAM JSB PAGE GET PAGE NO. STA LPMRP LAST PAGE OF MEM RES PROGS ADA 1 STA FPSAM FIRST PAGE OF SAM CMB,INB STB NOSAM LDA LWSA1 LDB SYSTM CPB P3 LDA ESAM LDB LWAMR CMB,INB ADA 1 SSA JMP MRERR SAM NEGATIVE, ERROR EXIT STA SAMSZ CMA,INA LDB ME36I JSB CONVD PUT SAM SIZE640 IN OUTPUT BUFFER LDA P22 LDB MES36 SAM = JSB PRIN1 PRINT MESSAGE LDB SYSTM GET SYSTEM TYPE CPB P3 TYPE 3 SYSTEM? RSS JMP SNAP5 NO LDA ELIB ADDRESS AT END OF LIB LDB PCOM PRIV. DRIVERS ACCESS COMMON? SZB LDA .MEM6 YES, USE LAST WORD OF COMMON JSB PAGE GET PAGE NUMBER STA ECLIB SAVE PAGE AT END OF COMMON/LIB ADA N30 # PAGES FOR SAM = 31 - # OF STA SAM PAGES THRU COMMON OR LIBRARY LDB ME37I JSB CONVD PUT IN OUTPUT BUFFER JSB SPACE NEW LINE PSYM JSB INTER INTERACTIVE INPUT LDA P38 LDB MES37 NO. ADD. PAGES FOR SAM? JSB READ PRINT MESSAGE, GET REPLY LDA N3 JSB DOCON JMP PSYM ERROR, REPEAT INPUT STA 1 MAX. ADD. PAGES ADA SAM CMA,INA SSA JMP MRERR MORE PAGES THAN ALLOWED STB SAM SAVE ADD. PAGES LDB FPSAM 1ST PAGE OF SAM ADB NOSAM ADB SAM ADDITIONAL PAGES STB LPSAM LAST PAGE OF SAM CMB ADB MSIZE MEMORY SIZE STB PAGES NO. OF PAGES REMAINING ,6 HED DEFINE PARTITIONS * * * PARTITION DEFINITION * * CLA STA FTIME PAR0A JSB INTER INTERACTIVE INPUT? LDA N4 CLEAR PARTITION DEFINITION TABLE STA KOUNT CLA PARCL LDB PATBL 4 WORDS = MAXIMUM 64 PARTITIONS STA 1,I WORD 1 BIT 0 = PARTITION 1, ETC. INB IF BIT = 1 PARTITION DEFINED ISZ KOUNT JMP PARCL LDA PAGES NO. OF PAGES REMAINING STA PAGE0 SAVE FOR RESTORE JSB SPACE NEW LINE LDA P31 LDB MES45 LARGEST ADDRESSABLE PARTITION JSB PRIN1 PRINT MESSAGE JSB SPACE NEW LINE CCA ADA SSGAP GET NUMBER OF PAGES USED W/O JSB PAGE COMMON CMA,INA FIND NUMBER OF PAGES LEFT ADA P32 STA MXPTL MAXIMUM PARTITION LENGTH LDB ME46I CMA,INA SET FOR DECIMAL JSB CONVD PUT IN MESSAGE LDA P22 LDB MES46 W/O COMMON XX PAGES JSB PRIN1 PRINT MESSAGE LDA LWACG LAST WORD OF AVAILABLE COMMON JSB PAGE GET NO. OF PAGES USED WITH COMMON CMA,INA FIND NO. OF PAGES LEFT ADA P32 CMA,INA SET FOR DECIMAL LDB ME47I JSB CONVD PUT IN MESSAGE LDA P22 LDB MES47 W/ COMMON XX PAGES JSB PRIN1 PRINT MESSAGE JSB SPACE NEW LINE JSB PTPAG OUTPUT NO. OF PAGES REMAINING JSB INTER INTERACTIVE INPUT LDA P19 LDB MES43 DEFINE PARTITIONS JSB PRIN1 PRINT MESSAGE JSB SPACE NEW LINE PAR04 JSB INTER INTERACTIVE INPUT LDA P3 LDB QUEST ? JSB READ PRINT MESSAGE, GET REPLY LDA N2 JSB GETNA GET FIRST 2 CHARACTERS CPA EN END? JMP PAREN YES, PARTITIONS ALL DEFINED CPA RE REPEAT ALL DEFINITIONS? JMP PAR0A YES JSB GINIT REINITIALIZE INPUT LDA N2 GET PARTITION NO. JSB GETOC JMP PARE4 ERROR STA PANUM SAVE PARTITION NO. CMA,INA ADA MAXPT EXCEEDS MAXIMUM PARTITION NO.? SSA,RSS NO JMP PAR03 PARE1 LDA PT PARTITION DEFINITION ERROR RSS PARE2 LDA PD PARTITION ALREADY DEFINED RSS PARE3 LDA PS NOT ENOUGH MEMORY LEFT CLB NO FMP ERROR JSB ERROR ERROR RSS PARE4 JSB INERR ERROR JMP PAR04 REPEAT INPUT PAR03 JSB GETAL CHECK FOR COMMA CPA BLANK RSS YES, COMMA JMP PARE4 NO, ERROR LDA N2 GET PARTITION SIZE JSB GETOC JMP PARE4 INPUT ERROR, TRY AGAIN STA PARSZ SAVE PARTITION SIZE CMA,INA STA 1 CHECK IF GREATER THAN MAXIMUM ADA MXPTL ALLOWED SSA JMP PARE1 YES LDA 1 CHECK IF GREATER THAN NUMBER OF ADA PAGE0 PAGES REMAINING SSA JMP PARE3 YES, ERROR STA PAGE1 SAVE NO. OF PAGES REMAINING LDA PARSZ ADA N2 SSA JMP PARE4 MUST BE AT LEAST 2 PAGES JSB BUFC CLEAR OUTPUT BUFFER LDA PANUM GET PARTITION NO. RAR,RAR CHECK TABLE TO SEE IF RAR,RAR ALREADY DEFINED AND P15 ADA PATBL STA KOUNT LDA 0,I STA TEMP1 LDA PANUM AND P15 CMA,INA LDB MNEG RBL ISZ 0 JMP *-2 LDA 1 IOR TEMP1 CPA TEMP1 JMP PARE2 PARTITION ALREADY DEFINED STA KOUNT,I UPDATE TABLE LDA PAGE0 FIND BEGINNING PAGE ADDRESS CMA,INA ADA MSIZE STA LBUF+3 LDA PAGE1 STA PAGE0 UPDATE NO. OF PAGE REMAINING CCA ADA PARSZ PARTITION SIZE STA LBUF+4 CCA ADA PANUM OUTPUT SIZE AND RAL BEGINNING PAGE STA 1 ADDRESS OF RAL PARTITION ADA 1 TO CORRECT INA ADA MATA ENTRY IN LDB 0 MEMORY ADB P5 ALLOCATION JSB SETCR TABLE JSB PTPAG OUTPUT NO. OF PAGES LEFT CLA STA FTIME JMP PAR04 GET NEXT PARTITION DEFINITION HED OUTPUT MRMP AND STUFF ENTRIES * * STUFF MEMORY RESIDENT PROG. MAP AND OUTPUT IT * PAREN JSB BUFC LDA LPMRP GET LAST PAGE OF MEM RES PROGS CMA STA MRMPG ADA P32 CMA STA WRPOT LDA ALBUF SET 0,1,2.....N IN OUTPUT CLB BUFFER, WHERE N = PAGE # STB 0,I OF ADJUSTED END OF MEM RES PROGS INB INA ISZ MRMPG JMP *-4 CCB ISZ WRPOT RSS JMP *+4 STB 0,I SET REMAINING PAGES TO -1 INA FOR WRITE PROTECT JMP *-5 LDA MRMP GET ADDRESS OF TABLE LDB 0 ADB P31 JSB SETCR GO OUTPUT VALUES * *STUFF $ENDS, $LPSA, $MPSA * LDA PGLIB PAGE # AT END OF RES LIB INA # OF PAGES SYS + LIB LDB $ENDS JSB STUFF PUT IN $ENDS LDB $LPSA LDA LPSAM LAST PAGE OF SAM JSB STUFF PUT IN $LPSA LDA SAM GET # OF ADD PAGES OF SAM INA ADD 1 FOR 1ST PAGE ADA NOSAM ADJUST IF SAM DOESN'T SHARE PAGE ALF,ALF WITH MEM RES PROGS RAL,RAL SHIFT TO BITS 10 - 15 IOR FPSAM MERGE WITH 1ST PAGE OF SAM LDB $MPSA JSB STUFF PUT IN $MPSA SNAP5 LDB $EMRP LDA LWAMR LAST WORD OF MEM RES PROGS JSB STUFF PUT IN $EMRP JMP *+3 MRERR JSB INERR ERROR JMP MRPA1 REPEAT INPUT * LDA JMP3I SET STARTING JMP STA LBUF LDA STRAD SET STARTING ADDRESS STA LBUF+1 LDA P2 LDB P3 JSB SETCR HED SNAPSHOT OUTPUT FOR LOADER RELOCATION LDB SYSTM / CPB P3 RTE-M-3? JMP SNAP1 YES LDA LWAMR SET AVMEM TO NEXT WORD PAST INA MEM RES PROGS. (SAM) SNAP0 LDB AVMEM BP ADDRESS JSB STCR1 SET FWA SYS MEM INTO RTM BP LDA SAM ALF,ALF RAL,RAL ADA SAMSZ ADA SAMST LDB SYSTM CPB P1 LDA LWSA1 CPB P2 LDA LWSA1 LDB BGORG FWA OF BACKGROUND COMMON JSB STCR1 LDB BGLWA LWA MEMORY BACKGROUND PARTITION JSB STCR1 CLB,INB JSB CLFL2 JSB SPACE NEW LINE JMP RTMLI RTMGS JSB SPACE NEW LINE LDA $OPSY TYPE OF OPERATING SYSTEM CPA N7 RTE-M-I? JMP SNAPA YES CPA N15 RTE-M-II? JMP SNAPA YES CPA N5 RTE-M-III? JMP SNAPA YES JMP SNAP3 NONE OF THE ABOVE SNAPA LDA DCB2 IS OUTPUT A TYPE 0 FILE? SSA,RSS JMP SNAPX AND UDFE LDA 0,I JMP *-4 SNAPX ADA P2 LDB 0,I SZB,RSS JMP SNAP3 YES INA LDB 0,I GET TRACK NUMBER CMB,INB STB TRACK INA LDB 0,I GET SECTOR NUMBER CMB,INB STB SECTR LDA TRACK PUT TRACK # IN MESSAGE LDB ME49I JSB CONVD LDA SECTR PUT SECTOR # IN MESSAGE LDB ME50I JSB CONVD LDA P46 MESSAGE LENGTH LDB MES49 MESSAGE ADDRESS JSB PRIN1 JSB SPACE SNAP3 LDA P16 LDB MES11 RTMLG FINISHED JSB PRIN2 JMP EXEC6 SNAP1 LDB ECLIB LIBRARY ON SAME PAGE AS SAM? CPB FPSAM JMP SNAP0 YES BLF,BLF SET AVMEM TO NEXT PAGE WITH SAME RBL,RBL OFFSET THAT SAM HAS WHERE IT STARTS LDA LWAMR AND B1777 CPA B1777 RSS ADB B2000 ADA 1 STA SAMST INA JMP SNAP0 * * * SUBROUTINE TO OUTPUT NO. OF PAGES REMAINING * * 7 PTPAG NOP LDA PAGE0 NO. OF PAGES REMAINING LDB ME44I CMA,INA SET FOR DECIMAL JSB CONVD PUT IN MESSAGE LDA P26 LDB MES44 PAGES REMAINING = JSB PRIN1 PRINT MESSAGE JMP PTPAG,I * * EN ASC 1,EN RE ASC 1,RE * QUEST DEF *+1 ASC 2,* ? * B1777 OCT 1777 UPCR OCT 77400 UDFE OCT 77777 MNEG OCT 100000 N7 DEC -7 N15 DEC -15 P2 DEC 2 P32 DEC 32 P26 DEC 26 P31 DEC 31 P46 DEC 46 * ECLIB NOP KOUNT NOP TEMP STORE LPSAM NOP LAST PAGE OF SAM LWMRP NOP LAST WORD OF MEM RES PROGS. MRMPG NOP MXPTL NOP MAXIMUM PARTITION LENGTH PAGE0 NOP TEMP STORE FOR NO. OF PAGES LEFT PAGE1 NOP " " " " PAGES NOP # PAGES AFT REL CORE RES PROG PANUM NOP PARTITION NO. PARSZ NOP PARTITION SIZE SAMST NOP SAMSZ NOP SECTR NOP SECTOR NUMBER TRACK NOP TRACK NUMBER WRPOT NOP * PATBL DEF *+1 REP 4 OCT 0 $EMRP DEF *+1 ASC 3,$EMRP $ENDS DEF *+1 ASC 3,$ENDS $LPSA DEF *+1 ASC 3,$LPSA $MPSA DEF *+1 ASC 3,$MPSA * PT ASC 1,PT PARTITION DEFINITION ERROR PD ASC 1,PD PARTITION ALRADY DEFINED ERROR PS ASC 1,PS PARTITION SIZE ERROR * JMP3I JMP 3,I * MES11 DEF *+1 ASC 8,* RTMLG FINISHED MES12 DEF *+1 ASC 5,* INT PRGS MES13 DEF *+1 ASC 5,* IGNORE? MES43 DEF *+1 ASC 10,* DEFINE PARTITIONS ME44I DEF ME44A MES44 DEF *+1 ASC 10,* PAGES REMAINING = ME44A BSS 3 MES45 DEF *+1 ASC 16,* LARGEST ADDRESSABLE PARTITION ME46I DEF ME46A MES46 DEF *+1 ASC 5,* W/O COM ME46A BSS 3 ASC 3, PAGES ME47I DEF ME47A MES47 DEF *+1 ASC 5,* W/ COM ME47A BSS 3 ASC 3, PAGES MES48 DEF *+1 ASC 11,* NO ID SEGMENTS LEFT ME49I DEF ME49A ME50I DEF ME50A MES49 DEF *+1 ASC 13,* SYSTEM STARTS AT ,$"TRACK ME49A BSS 3 ASC 4, SECTOR ME50A BSS 3 END RTMG2 * R$ ! 91740-18052 1740 S C0122 DS/1000 MODULE: DCMCC              H0101 QYASMB,R,L,C * NAME: DCMCC * SOURCE: 91740-18052 * RELOC: 91740-16052 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM DCMCC,8 91740-16052 REV 1740 770310 * * ENT DCMC * * DUMMY MOUNT/DISMOUNT SUBROUTINE * * CALLING SEQUENCE: JSB DCMC * DEF RTN * DEF WHICH * DEF LUDRN * DEF LSTRK (OPTIONAL) * RTN SZA * * ON RETURN A=-200 (ATTEMPT TO USE FLOPPY SUBROUTINE) * DCMC NOP LDA =D-200 LDB DCMC,I JMP 1,I END Sv  91740-18053 1740 S C0122 DS/1000 MODULE: RTMLM              H0101 EASMB,R,L,C RTMLM * NAME: RTMLM * SOURCE: 91740-18053 * RELOC: 91740-16053 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * HED RTE-M SYSTEM GENERATOR-LOADER * * * NAM RTMLM,8 91740-16053 REV 1740 770912 * * ENTRY POINT NAMES * ENT RT.G1,RT.LC * * EXTERNAL REFERENCE NAMES * EXT ABL1,ABL2,ABRC1,ABREC,ABRT1,BPLOC,CKS EXT CLBPL,CLFL2,COML,CONSO,DBTAD,DIAG,DIAG2 EXT ENTPT,EXEC6,FRTRU,FT#ME,FWABP,FWAC,FWAM EXT ICR,ISECU,LDSEG,LDSG3 EXT LST,LST4,MAPS,.MEM4,MLOCC EXT NAMR.,OUTON,PRCMD EXT PRINT,SCP,SEGFL,SERFG,TIMES EXT TRUNC,TYOFF,UNDEF,WRTBT,?XFER * EXT KCVT * EXT PNAME,PRAMS * * LOCC EQU MLOCC FTIME EQU FT#ME SUP ********************************************************** * THE FUNCTION OF THIS LOADER IS TO RELOCATE AND LINK * RELOCATABLE BINARY MODULES TOGETHER, AND PREPARE * THEM FOR EXECUTION ON AN RTM SYSTEM. AFTER * STARTING THIS LOADER WITH A ON LOADR COMMAND * A SNAPSHOT CAN BE READ IN. * THIS SNAPSHOT CONTAINS THE DEFAULT * MEMORY BOUNDS, SYSTEM COMMON, AND DEFINES THE * CORE-RESIDENT LIBRARY ROUTINES FOR THE TARGET RTM * SYSTEM. * SYMBOL TABLE ENTRY FORMAT: * * WORD 5 - OCT 0 (LINK OR FIXUP TABLE ADDRESS) * 4 - DEF SYMBOL (HOLDS SYMBOL VALUE) * 3 - OCT XX000 CHAR 5 AND FLAGS * 2 - ASC 1, CHARS 3,4 OF NAME * 1 - ASC 1, CHARS 1,2 OF NAME * SHOULD ONLY BE REFERENCED VIA POINTERS LST1 THRU LST5, * USING SUBROUTINES LSTI AND LSTsP. * ************************************************************************ * RT.G1 LDA SCP AND B10 SZA PUT DEBUG IN LST? JMP RTMLP YES, FORCE LOAD DEBUG RTMLA CLA,INA STA LDSG3 USE LDRIN ENTRY IN SEG 3 LDB ONMSG PRINT MESSAGE JSB DIAG2 LOADER STARTED JSB PRCMD PROCESS LOADER COMMANDS JMP ABRT1 PROGRAM TERMINATION RTML2 LDA LOCC SZA,RSS IF NO MODULES RELOCATED, JMP RTMLT PROGRAM TERMINATION LDA B2 STA ABRC1 STORE ADDRESS OF TIE-OFF RECORDS DLD PNAME GET PROGRAM NAME JSB TYOFF OUTPUT CHARS 1,2,3,4 OF NAME LDA PNAME+2 AND UPCM IOR PRAMS CHAR 5,TYPE LDB PRAMS+1 GET PRIORITY JSB TYOFF LDA PRAMS+2 RAR,RAR RES. CODE RAR IOR PRAMS+3 CLB SPARE JSB TYOFF JSB TIMES PROCESS TIME PARAMETERS JSB TYOFF OUTPUT TIME PARAMETERS CLA SPARE LDB .MEM4 LWAM JSB TYOFF OUTPUT SPARES LDA FWAM GET LOW MAIN LDB LOCC GET HIGH MAIN JSB TYOFF OUTPUT LDA FWABP GET LOW BASE PAGE LDB BPLOC GET HIGH BASE PAGE JSB TYOFF OUTPUT LOW & HIGH BASE PAGE LDA FWAC LDB COML JSB TYOFF LDB DBTAD GET DEBUG TRANSFER ADDRESS LDA SCP LOAD WITH DEBUG? AND B10 SZA,RSS LDB ?XFER NO, USE PROGRAM XFER ADDRESS LDA JMP3 JSB TYOFF CLB,INB JSB CLFL2 CLOSE ABSOLUTE OUTPUT FILE LDB EDREL PRINT MESSAGE JSB DIAG "RELOCATION FINISHED" LDA FWAM GET # OF PAGES USED FOR RELOCATION CMA ADA LOCC AND B76K ALF RAL,RAL ADA B2 STA NUMB JSB KCVT DEF *+2 DEF NUMB STA PAGES,I LDA CONSO INTERACTIVE INPUT? SZA,RSS JMP RTMLB NO NK LDA P19 LDB PAGE JSB PRINT RTMLB LDA P19 LDB PAGE JSB MAPS LDB SNAP PRINT MESSAGE JSB DIAG "INPUT SNAP REQUEST" JSB PRCMD PROCESS SNAP REQUEST JMP ABRT1 PROGRAM TERMINATION LDA B2 SET TO SEGMENT LOAD STA SCP LDB SEGRL * REL SEGMENT JSB DIAG JSB INIT2 REINITIALIZE POINTERS JSB PRCMD PROCESS LOADER COMMANDS JMP ABRT1 PROGRAM TERMINATION LDA LOCC IF NO MODULES RELOCATED SZA PROGRAM TERMINATION JMP RTML2 RTMLT LDB OFMSG PRINT MESSAGE JSB DIAG2 RTMLG FINISHED JMP EXEC6 PROGRAM TERMINATION * RTMLP CLA STA SEGFL LAST SEGMENT FLAG LDA B3 STA LDSG3 SET FOR RETURN TO MAIN JMP LDSEG LOAD IN LOADER SEGMENT 3 * * RT.LC LDB DEBUG PUT DEBUG IN LST JSB ENTPT LDA UDFE SET TO UNDEF STA LST4,I JMP RTMLA SPC 1 JMP3 JMP 3,I * INIT2 NOP JSB CLBPL CLEAR BASE PAGE LINKS LDA ABL2 STA ABL1 CLA STA UNDEF START SEARCH AT BEGINNING OF LST STA FRTRU FIRST TIME THRU FLAG STA ?XFER "HAVE MAIN FLAG" STA LOCC PROGRAM RELOCATION BASE STA BPLOC BASE PAGE RELOCATION BASE STA COML "COMMON USED" FLAG STA LST,I LOADER SYMBOL TABLE LENGTH STA NAMR. ALLOW A NAM RECORD STA OUTON ABSOLUTE OUTPUT FILE CLOSED STA FTIME OUTPUT TYOFF RECORD ONLY AT START STA ISECU SECURITY CODE STA ICR LABEL STA WRTBT NO RELOCATION YET STA TRUNC DON'T TRUNCATE ON ABORT STA ABREC CLEAR RECORD LENGTH STA CKS CLEAR CHECKSUM STA SERFG LIBRARY LOAD FLAG JMP INIT2,I * SPC 2 * NUMB NOP SEGRL DEF *+1 DEC 13 ASC 7,* REL SEGMENT ONMSG DEF *+1 DEC 16 ASC 8,* LOADER S?TARTED EDREL DEF *+1 DEC 21 ASC 11,* RELOCATION FINISHED OFMSG DEF *+1 DEC 16 ASC 9,* RTMLG FINISHED PAGE DEF *+2 PAGES DEF *+2 ASC 1,* BSS 1 ASC 8, PAGES REQUIRED SNAP DEF *+1 DEC 11 ASC 6,* SNAPSHOT? B2 OCT 2 B3 OCT 3 B10 OCT 10 B76K OCT 76000 P19 DEC 19 UPCM OCT 77400 UDFE OCT 77777 * DEBUG DEF *+1 ASC 3,DEBUG * SPC 2 END c  91740-18054 1826 S 0322 SOURCE RTRLC              H0103 ASMB,R,L,C RTRLC * NAME: RTRLC * SOURCE: 91740-18054 * RELOC: 91740-16054 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * * * * HED RTE-M SYSTEM GENERATOR-LOADER NAM RTRLC,8 91740-16054 REV 1826 780421 * * ENTRY POINT NAMES * ENT ABL1,ABL2,.ABR,AB#RT,ABRC1,ABREC ENT ABRT1,ADDRS,ADTRP,AFILE,AL,ATABL,ATBUF,ATTBL ENT BAKUP,BLINE,BPAG4,BPAGA,BPLOC,BU#ER ENT CFILE,CKS ENT CLBPL,CLFL2,CLFL3,CLFL4 ENT CLFL5,CLFL6 ENT CMDLU,CMER,CNT,COML,COMOR ENT CONSL,CONSO,CONV,CPAGE ENT CRTIN,DBTAD,DCB1 ENT DCB2,DCB3,DCB4,DCB5,DCB6,DCB7 ENT DIAG,DIAG2,ECFIL,ECHO1,ECHOS,EFILE,EKHOS ENT EMSAM,ERACT,ERDVC,ERREX,ER#OR,EXEC0,EXEC6 ENT FFLAG,FL1OP,FRTRU,FT#ME ENT FUT1,FUT2,FUT3,FUT4,FUTA,FUTI ENT FUTP,FUTS,FWABP,FWAC,FWAM,GLWAM ENT ICR,IDCB,IERR#,IFILE,IL,INACT,IN#CK,IOPTN ENT ISECU,JLU,JMPNO ENT KONSO,KTABL,LBF10,LBUF5,LBUF#,LBUFA ENT LDGEN,LDSEG,LDSG3,LENGT,LER3,LER5 ENT LFILE,LGER2,LIBFL,LINTP ENT LIST,LISTO,LITBL,LNKDR,LOCFS ENT LST1,LST2,LST3,LST4,LST5 ENT LST,LSTA,LSTI,LSTM,LSTP ENT LSTPX,LSTUL,LTABL,LWABP,LWAC,LWAM ENT MAPON,MAPS,.MEM.,.MEM1 ENT .MEM2,.MEM3,.MEM4,.MEM5,.MEM6 ENT MEMRY,MESSI,MLOCC,MOVEX,MTABL ENT NAMR.,NBUF,NBUF6,NBUFA,NBUFT ENT NCHAR,NSCAN,NXTC,NXTC2,NXTCM ENT OFILE,ONTBL,OPEN1 ENT OPFLA,OPFLB,OPFLC,OPFLD ENT OPFLE,OPFLF,OPFLG,OPFLH ENT OPNLU,OPT.3,OTFIL,OTMES ENT OUTON,PACK#,PLK ENT PLK1,PLK4,PLBKS,PRCMD ENT PRINT,PUNCH,QBUFA,QGETC,QQCNT ENT QQPTR,RBTA,RBTO,RDFL1,READ#,RIC ENT SCAN,SCP,SEGFL,SERFG,SERNM ENT SNAPS,SSTBL,STABL ENT STFER,SYMOV,TBUF#,TIMES,TOTBL,TRANS,TRUNC ENT TYOFF,TYPRO,UEXFL,UNDEF,WERR1 ENT WRTBT,WRTFL,?XFER,XNAM,XNAMA ENT ZPRIV,ZRENT * * EXTERNAL REFERENCE NAMES EXT PNAMA * EXT RTML2,RTML4 * EXT CLOSE,DTTY,EXEC,FCONT,IMESS EXT LIMEM,LOCF,READF,SG#LD,WRITF EXT IDCB1,IDCB2,IDCB3,IDCB4,IDCB5,IDCB6,IDCB7 * EXT $OPSY,PARSE EXT CNUMD,LURQ * A EQU 0 B EQU 1 SUP ************************************************************************ * * THIS MODULE CONTAINS ALL THE COMMON ROUTINES AND * STORAGE NEEDED BY THE LOADER MAIN AND/OR ANY 2 * OF THE LOADER SEGMENTS. IT CONTAINS THE MAIN ENTRY * POINT FOR PROCESSING ALL LOADER COMMANDS (PRCMD). * THIS MODULE IS CALLED AS IF IT WERE A SUBROUTINE * WITH NO PARAMETERS AND TWO RETURNS. THE (P+1) * RETURN IS USED FOR ABNORMAL TERMINATION CONDITIONS, * WHILE THE (P+2) RETURN IS USED FOR NORMAL RETURNS * VIA THE END COMMAND. THE CALLING SEQUENCE IS AS FOLLOWS: * * JSB PRCMD * RETURN1 RELOCATION ABORTED RETURN * RETURN2 NORMAL RETURN * ******************************************************************** HED RTM LOADER UTILITY SUBROUTINES ***** ***** * ** PRCMD ** MAIN ENTRY POINT FOR THE SUBORDINATE CONTROL MODULE. * CONTROL IS PASSED TO TYMOD OR NXTCM TO GET THE NEXT * COMMAND. THAT COMMAND IS PARSED, AND CONTROL IS PASSED * TO ITS ASSOCIATED PROCESSING ROUTINE. IF A FATAL ERROR * IS DETECTED, CONTROL IS RETURNED TO THE ROUTINE CALLING * PRCMD AT (P+1). THE ONLY OTHER EXIT IS VIA THE END * COMMAND (P+2). AFTER PROCESSING ANY OTHER COMMAND, * CONTROL RETURNS TO NXTCM TO PROCESS THE NEXT COMMAND. * ***** PRCMD NOP PROCESS RTM LOADER6 COMMANDS NXTCM JSB CMDIN GET NEXT COMMAND LINE NXTC2 LDA CTACN LDB CTABL JSB SCAN SCAN 1ST ELEMENT FOR MATCH JMP CMER COMMAND ERROR. STA JMPNO SAVE WHERE TO JMP TO ADA M14 SSA,RSS JMP LOAD4 CLA,INA JSB SGLD1 DETERMINE IF SEG IS RELOADED CLA JMP LDSEG LOAD IN LOADER SEGMENT 2 * LOAD4 LDA B2 JSB SGLD1 DETERMINE IF SEGMENT IS RELOADED LDA D15 JMP LDSEG ***** * CONTROL COMES HERE ON DETECTING A COMMAND ERROR. THE MESSAGE * 'CMND?' IS OUTPUT. ***** CMER LDB CMND? OUTPUT CMND? MESSAGE JSB DIAG2 JMP EXEC0 * CMND? DEF *+1 OCT 5 ASC 3,CMND? * JMPNO NOP WHERE GO FLAG * D15 DEC 15 M14 DEC -14 * SGLD1 NOP LDB SEGFL SZB,RSS JMP SGLD1,I GO LOAD SEGMENT CPB 0 RSS JMP SGLD1,I NEED OTHER SEGMENT CPB B1 JMP RTML2 NEED SEGMENT 2 JMP RTML4 NEED SEGMENT 4 * SEGFL NOP LAST SEGMENT FLAG HED RTM LOADER TABLES ***** * * COMMAND MNEMONIC TABLE * * BITS 15-8 # CHARS IN ASCII KEYWORD TABLE * BITS 7-0 OFFSET IN THAT TABLE (TO LOCATE ASCII WORDS) * * THE ORDER OF ENTRIES IN THIS TABLE IS USED IN DETERMINING THE * OFFSET ASSOCIATED WITH KEYWORDS. THUS ORDER IN THIS TABLE IS * OF PARAMOUNT IMPORTANCE. IF ANY KEYWORD IS EXACTLY THE SAME * AS THE BEGINNING OF A LONGER KEYWORD, THE LONGER KEYWORD MUST * APPEAR FIRST. (FOR EXAMPLE TRANSFER APPEARS BEFORE TR) * ***** CTACN ABS CTABS-CTABN NEG NBR ENTRIES IN TABLE CTABL DEF CTABS CTABS ABS 3000B+ABOUD-CMTBL BOUNDS ABS 1400B+AMAP-CMTBL MAP ABS 4000B+ARELC-CMTBL RELOCATE ABS 1400B+AREL-CMTBL ABBR. OF RELOCATE ABS 3000B+ASEAR-CMTBL SEARCH ABS 3000B+AOTPU-CMTBL OUTPUT ABS 4000B+ATRAN-CMTBL TRANSFER ABS 1000B+ATR..-CMTBL ABBR. OF TRANSFER  ABS 1400B+ASET.-CMTBL SET ABS 4000B+ALKIN-CMTBL LINKS IN ABS 2400B+ALINK-CMTBL LINKS ABS 1000B+AEXIT-CMTBL EXIT ABS 2000B+AECHO-CMTBL ECHO ABS 3400B+ADISP-CMTBL DISPLAY ABS 2000B+ASNAP-CMTBL SNAP ABS 1400B+AEND.-CMTBL END ABS 1000B+AMONT-CMTBL MOUNT ABS 1000B+ADMNT-CMTBL DISMOUNT CTABN EQU * KTABS ABS 2400B+AFWAB-CMTBL FWABP ABS 2400B+ALWAB-CMTBL LWABP ABS 2000B+AFWAM-CMTBL FWAM ABS 2000B+ALWAM-CMTBL LWAM ABS 2000B+AFWAC-CMTBL FWAC ABS 2000B+ALWAC-CMTBL LWAC LTABS ABS 2000B+ALOCC-CMTBL LOCC ABS 3000B+ABPLC-CMTBL BPLOCC ABS 2400B+AXFER-CMTBL .XFER ABS 2400B+ATBLE-CMTBL TABLE ABS 3000B+AUNDE-CMTBL UNDEFS MTABS ABS 3400B+AMODS-CMTBL MODULES ABS 3400B+AGLOS-CMTBL GLOBALS ABS 2400B+ALINK-CMTBL LINKS ABS 1400B+AOFF.-CMTBL OFF ABS 1000B+AON..-CMTBL ON ATABS ABS 1400B+AYES.-CMTBL YES ABS 1000B+ANO..-CMTBL NO TSTRT ABS 2400B+ASTRT-CMTBL START TAT ABS 1000B+AAT..-CMTBL AT TTO ABS 1000B+ATO..-CMTBL TO LIABS ABS 2000B+ABASE-CMTBL BASE ABS 3400B+ACURT-CMTBL CURRENT ONABS ABS 1000B+AON..-CMTBL ON ABS 1400B+AOFF.-CMTBL OFF STABL DEF TSTRT ATTBL DEF TAT TOTBL DEF TTO LTABL DEF LTABS KTABL DEF KTABS MTABL DEF MTABS ATABL DEF ATABS LITBL DEF LIABS ONTBL DEF ONABS AMONT ASC 1,MC ADMNT ASC 1,DC SKP ***** * ASCII KEYWORD TABLE * ORDER OF ENTRIES IN THIS TABLE IS ON NO IMPORTANCE ***** CMTBL DEF * ABOUD ASC 3,BOUNDS AMAP ASC 2,MAP ARELC ASC 4,RELOCATE AREL ASC 2,REL ASEAR ASC 3,SEARCH AOTPU ASC 3,OUTPUT ADISP ASC 4,DISPLAY ATBLE ASC 3,TABLE AUNDE ASC 3,UNDEFS AMODS ASC 4,MODULES AGLOS ASC 4,GLOBALS ALKIN ASC 4,LINKS IN ALINK ASC 3,LINKS ASNAP ASC 2,SNAP AEXIT ASC 1,EX AECHO ASC 2,ECHO AON.. ASC 1,ON AOFF. ASC 2,OFF ATRAN ASC 4,TRANSFER ATR.. ASC 1,TR AEND. ASC 2,END AFWAM ASC 2,FWAM ALWAM ASC 2,LWAM AFWAB ASC 3,FWABP ALWAB ASC 3,LWABP AFWAC ASC 2,FWAC ALWAC ASC 2,LWAC ALOCC ASC 2,LOCC ABPLC ASC 3,BPLOCC AXFER ASC 3,?XFER AYES. ASC 2,YES ANO.. ASC 1,NO ASTRT ASC 3,START AAT.. ASC 1,AT ASET. ASC 2,SET ATO.. ASC 1,TO ABASE ASC 2,BASE ACURT ASC 4,CURRENT * SKP HED INPUT COMMAND LINE ***** * ** CMDIN ** INPUT NEXT COMMAND LINE * CALLING SEQUENCE: * * JSB CMDIN * RETURN * * NOTE: CMDIN SKIPS COMMENTS AND ADVANCES INPUT BUFFER * POINTERS PAST THE '-' IF IT APPEARS IN THE INPUT BUFFER. * * THE IDENTIFIER CMDLU IS USED TO DETERMINE IF THE INPUT IS * COMING FROM THE SESSION CONSOLE (=4) OR TRANSFER FILE (=1). * THE IDENTIFIER ECHO1 IS USED TO DETERMINE IF THE INPUT * SHOULD BE ECHO'ED TO THE LIST DEVICE (0=NO ECHO, 1=ECHO). * * * RETURN: QQCHC= POSITIVE # CHARS TRANSMITTED * ***** CMDIN NOP CLA RESET INCOMING CHARACTER STA QQCNT POINTERS LDA QBUFA STA QQPTR LDA CMDLU INPUT COMMAND DEVICE-FILE? CPA B4 RSS JMP CMD5 NO, MUST BE TRANSFER FILE LDA CONSO GET INPUT FROM SESSION CONSOLE? SZA JMP CMD3 YES CMD1 LDB PRPTA JSB DIAG SEND PROMPT TO ERROR-PROMPT LOG CMD6 LDB QBUFA INPUT BUFFER LDA CMDLU CPA B1 TRANSFER FILE? JMP RDRIN YES, READ IT LDA DCB1 DATA CONTROL BLOCK JSB RDFL1 READ FROM INPUT DEVICE-FILE CPA M1 END OF FILE? JMP CMD4 YES, GET INPUT FROM SESSION CONSOLE CMD2 STA QQCHC SAVE # OF CHARACTERS READ LDB QBUFA AND BUFFER ADDRESS JSB EKHOS TRY WRITING ON MAP OR ECHO FILE LDA QBUFA,I GET 1ST CHARACTER. ALF,ALF AND B177 CPA B52 COMMENT? JMP CMDIN+1 YES, GET NEXT COMMAND CPA B55 IS COMMAND ID SUPPLIED? ISZ QQCNT YES--BUMP CHAR. POINTER JMP CMDIN,I RDRIN LDA DCB6 DATA CONTROL BLOCK ADDRESS JSB RDFL6 GO READ FILE CPA M1 FINISHED? RSS JMP CMD2 NO LDA B4 YES, TRANSFER INPUT TO COMMAND STA CMDLU DEVICE-FILE JSB CLFL6 CLOSE TRANSFER FILE JMP CMDIN+1 * CMD4 CLA,INA STA CONSO STA KONSO CMD3 LDB PRPTA PROMPT JSB OTMES GET RESPONSE JMP CMDIN,I * CMD5 LDA DCB6 GET TRANSFER FILE DCB JSB INDCK ADA B2 LDA 0,I TYPE 0 FILE? SZA JMP CMD6 NO, DON'T ISSUE PROMPT LDA DCB6 JSB INDCK JSB LOCFS GET LOGICAL UNIT OF FILE SSA JMP LGER2 LU ERROR LDA JLU GET LOGICAL UNIT JSB DTTY SEE IF INTERACTIVE SZA JMP CMD7 YES LDA CONSO SWITCH TO SESSION CONSOLE? SZA JMP CMD7 YES LDA INACT INTERACTIVE INPUT? SZA,RSS JMP CMD6 NO CMD7 LDB PRPTA YES JSB DIAG2 JMP CMD6 * LGER2 LDA LU CLB NO FMP ERROR JSB STFER OUTPUT ERROR TO SYSTEM CONSOLE JMP ABRT1 TERMINATE LOADER EXECUTION * LU ASC 1,LU * CONSO NOP * B1 OCT 1 B4 OCT 4 B52 OCT 52 COMMENT CHARACTER B55 OCT 55 CMDLU OCT 4 M1 DEC -1 SKP ADTRP NOP TRAP ADDRESS AFILE NOP ADDRESS OF FILE NAME ARRAY COML NOP HOLDS INITIAL COMMON LENGTH DBTAD NOP DEBUG TRANSFER ADDRESS ERACT NOP ERROR LOG INTERACTIVE FLAG FTIME NOP OUTPUT TYOFF RECORD ONLY AT START IDCB NOP DATA CONTROL BLOCK KONSO NOP END OF INPUT FILE FLAG LDSG3 NOP WHICH ENTRY IN SEGMENT 3 LIBFL NOP SEARCH FLAG LINTP NOP LINKS IN FLAG (SET TO BASE) LISTO NOP INITIALIZE MAP OUTPUT LSTUL NOP UPPER LIMIT OF LST OPEN1 NOP COMMAND FILE OPEN BIT OPFLA OCT 410 OPTION WORD FOR COMMAND INPUT OPFLB OCT 110 OPTION WORD FOR ABSOLUTE OUTPUT OPFLC OCT 310 OPTION WORD FOR REL/SEARCH OPFLD OCT 210 OPTION WORD FOR MAP OPFLE OCT 210 OPTION WORD FOR ECHO OPFLF OCT 410 OPTION WORD FOR TRANSFER OPFLG OCT 210 OPTION WORD FOR SNAP/DISPLAY OPFLH OCT 210 OPTION WORD FOR ERROR/PROMPT OTFIL NOP ADDRESS OF FILE NAME ARRAY RIC NOP HOLDS RECORD IDENTIFICATION CODE SCP NOP SSGA/SYSTEM COMMON/PARTITION SERFG NOP LIBRARY LOAD FLAG SERNM NOP THIS IS THE MOD IN SEARCH (NAME) (FLAG) TYPRO NOP PROGRAM TYPE FLAG WRTBT NOP NO RELOCATION YET ?XFER NOP "HAVE MAIN FLAG" XNAM BSS 3 MODULE NAME ZPRIV NOP LST ADDRESS OF .ZPRV ZRENT NOP LST ADDRESS OF .ZRNT * ATBUF DEF TBUF TBUF BSS 5 NBUF6 DEF NBUF+6 NBUFT DEF NBUF+20 XNAMA DEF XNAM * TBUF# EQU TBUF FT#ME EQU FTIME SKP * * SUBROUTINE TO PROCESS TIME PARAMETERS FOR ID SEGMENT * TIMES NOP LDA D12 GET THE SECONDS JSB ADRES MPY P100 CONVERT TO 10'S OF MS STA TEMP1 LDA D13 JSB ADRES ADA TEMP1 ADD 10'S OF MS STA OCTNO SAVE TEMP LDA D10 GET THE HOURS JSB ADRES MPY P60 CONVERT TO MINUTES STA TEMP1 LDA D11 JSB ADRES ADA TEMP1 ADD MINUTES MPY P6000 CONVERT TO 10'S OF MS CLE PREPARE FOR ADD ADA OCTNO ADD 10'S OF MS SEZ,CLE IF OVERFLOW INB STEP HIGH ORDER PART ADA NDAY+1 SUBTRACT ONE DAY OF 10'S OF MS SEZ,CLE IF OVERFLOW INB STEP HIGH ORDER DIGIT ADB NDAY JMP TIMES,I * D10 DEC 10 D11 DEC 11 D12 DEC 12 D13 DEC 13 P60 DEC 60 P100 DEC 100 P6000 DEC 6000 NDAY OCT 177574,025000 * OCTNO NOP TEMP1 NOP SKP * * SUBROUTINE TO GET VALUES FROM PNAMA TABLE * ADRES 0NOP ADA PNAMA LDA 0,I JMP ADRES,I SPC 5 * * SUBROUTINE TO OUTPUT 2-WORD TIE-OFF RECORDS * TYOFF NOP JSB PACK WORD 1 FROM (A) LDA B WORD 2 FROM (B) JSB PACK JSB PUNCH JMP TYOFF,I * * * * * * LDSEG ADA LIST1 GET ADDRESS OF SEGMENT NAME STA NAME JSB SG#LD LOAD IN SEGMENT DEF *+3 RETURN ADDRESS (ONLY FOR ERROR) DEF NAME,I SEGMENT NAME DEF IERR ERROR CODE LDA SG LDB IERR ERROR CODE JSB ERROR SEGMENTATION ERROR JMP ABRT1 ABORT * NAME NOP * SG ASC 1,SG * LIST1 DEF *+2 LIST DEC 6 ASC 3,RTML2 ASC 3,RTML3 ASC 3,RTMG1 ASC 3,RTMG2 ASC 3,RTML1 ASC 3,RTML4 SKP * * SUBROUTINE TO DETERMINE IF INPUT IS LU AND SETUP DCB IF IT IS. * OPNLU NOP LDB $OPSY GET TYPE OF OPERATING SYSTEM CPB M7 RTE-MI? JMP OPNLU,I YES CPB M15 RTE-MII JMP OPNLU,I CPB M5 RTE-MIII JMP OPNLU,I YES LDA AFILE DETERMINE IF OUTPUT IS TO LU LDB 0,I CPB LU RSS JMP OPNLU,I INA LDB 0,I CPB .. RSS JMP OPNLU,I ISZ OPNLU INA MUST BE LU, GO GET IT LDB 0,I STB BUFA1 LDB BLANK STB BUFA1+1 STB BUFA1+2 JSB PARSE DEF *+4 DEF BUFA1 DEF B6 DEF RBUF LDA RBUF+1 GET LU STA LU# JSB DTTY LU INTERACTIVE ? SZA NO , LOCK IT JMP OPNL5 YES , DON'T LOCK IT JSB LURQ LOCK LU DEF *+4 DEF B1401 DEF LU# DEF B1 JMP LUERR OPNL5 LDA IOPTN OPEN OPTION AND B3700 STA 1 LDA IDCB GET ADDRESS OF DCB JSB INDCK JSB TYP0 OPEN DCB JMP OPNLU,I * LUERR LDB 0 LDA LU 1 JSB ERROR JMP CONSL TRY AGAIN * LU# NOP .. ASC 1,.. B1401 OCT 140001 B3700 OCT 3700 M5 DEC -5 M7 DEC -7 M15 DEC -15 * BUFA1 BSS 3 RBUF BSS 33 * * * SUBROUTINE TO CREATE A DUMMY TYPE 0 FILE * CALLING SEQUENCE * * LDA DCB ADDRESS * LDB SUBFUNCTION * JSB TYP0 * RETURN * * TYP0 NOP STA T0DCB LDA LU# GET LU SZA,RSS IF NOT DEFINED INA DEFINE AS LU = 1 STA LU# CLA JSB SET SET DIRECTORY JSB SET ADDRESS TO ZERO JSB SET ALSO SET TYPE TO 0 LDA LU# GET LOGICAL UNIT IOR 1 MERGE IN SUBFUNCTION JSB SET AND SET IN DCB JSB EXEC GET DRIVER TYPE DEF *+4 DEF D13 DEF LU# DEF EQT5 LDA EQT5 GET TYPE ALF,ALF ROTATE TO LOW A AND B77 AND MASK CPA B5 IF MASK TYPE-CODE IS <05>, JSB TYPE5 THEN GO EXAMINE THE SUBCHANNEL. STA EQT5 SAVE THE EQUIPMENT TYPE-CODE. LDB B100 GET EOF CONTROL SUBFUNCTION ADA MD17 IF TYPE > 16 SSA,RSS JMP SEOF SET EOF CODE LDB B1000 LDA EQT5 CPA B2 IS DRIVER A PUNCH? JMP SEOF GO SET LEADER GENERATION CLB SZA,RSS IF TYPE = 0 DON'T DO PAGE EJECT JMP SEOF LDB B1100 LINE SPACE OPTION SEOF LDA LU# GET LU IOR 1 MERGE EOF CONTROL SUBFUNCTION JSB SET SET IN DCB CLA JSB SET SET NO SPACING LEGAL LDA B1001 SET READ & WRITE LEGAL JSB SET AND SECURITY CODES AGREE JSB SET AND UPDATE MODES AGREE LDA 1717B GET MY ID ADDRESS ISZ T0DCB INCREMENT TO WORD 9 JSB SET SET OPEN FLAG LDA T0DCB ADA B3 STA T0DCB SET TO WORD 13 CLA SET IN MEMORY BUFFER FLAG JSB SET TO ZERO INA # JSB SET SET RECORD COUNT LDA EQT5 GET TYPE CODE LDB T0DCB GET DCB ADDRESS ADB MD11 GET TO CONTROL FUNCTION LOCATION LDB 1,I GET CONTROL WORD STB SET ADA MD17 IF THE EQUIPMENT TYPE-CODE SSA,RSS IS > 16 (MAG. TAPE, ETC.), JMP TYP0,I THEN AVOID WRITING AN END OF FILE JSB EXEC DO A PAGE EJECT, OR GENERATE LEADER DEF *+4 DEF B3 DEF SET DEF M1 FORCE A PAGE EJECT JMP TYP0,I * SET NOP STA T0DCB,I SET IN DCB ISZ T0DCB INCREMENT TO NEXT WORD JMP SET,I * * T0DCB NOP EQT5 NOP MD11 DEC -11 MD17 DEC -17 B5 OCT 5 B77 OCT 77 B1000 OCT 1000 B1001 OCT 100001 B1100 OCT 1100 DRT EQU 1652B ADDRESS OF DEVICE REFERENCE TABLE * * * TYPE-CODE CONVERSION FOR DVR05 (26440 44) SUBCHANNEL SPECIFICATIONS. * * TYPE5 NOP LDA LU# GET THE LOGICAL UNIT ADA M1 SUBTRACT 1 FOR THE DRT INDEXING. ADA DRT CALCULATE THE POSITION IN THE DRT. LDA 0,I GET THE DRT ENTRY. ALF,RAL POSITION THEW SUBCHANNEL TO BITS #4-0. AND B37 ISOLATE THE SUBCHANNEL. STA 1 SZA,RSS IF THE SUBCHANNEL IS ZERO, THEN RETURN JMP TYPE5,I TO SIMULATE A TYPE <00> DEVICE. LDA B23 PREPARE TO SIMULATE A TYPE <23> DEVICE. CPB B4 IF THE SUBCHANNEL IS FOUR, THEN LDA B12 SIMULATE A TYPE <12> DEVICE. JMP TYPE5,I RETURN--DEVICE TYPE: <12>,LP OR <23>,MT * B12 OCT 12 B23 OCT 23 B37 OCT 37 * * SUBROUTINE TO CLEAR BASE PAGE LINKS. * * CLBPL NOP LDA M1020 CLEAR STA COUNT BASE CLA LINKS LDB BPAG4 AREA STA 1,I FOR INB LOADER ISZ COUNT JMP *-3 AND JMP CLBPL,I GENERATOR * M1020 DEC -1020 BPAG4 DEF BPAGE ADD OF 1ST WORD OF BP LINKS TBL COUNT NOP * PRPTA DEF *+1 OCT 1 ASC 1,- SPC 1 * * * SUBROUTINE TO GET LAST WORD OF AVAILABLE MEMORY * * GLWAM NOP STA IWHCH SSA RELEASE? JMP GLWAM,I YES LDA 1,I STA BUFST ISZ 1 LDA 1,I STA BUFST+1 ISZ 1 LDA 1,I STA BUFST+2 ISZ 1 LDA 1,I STA BUFST+3 ISZ 1 LDA 1,I STA BUFST+4 NOP NOP JSB LIMEM DEF *+4 DEF IWHCH GET-RELEASE AVAILABLE MEMORY DEF LST FIRST WORD OF AVAILABLE MEMORY DEF IWRDS # WORDS AVAILABLE MEMORY LDA IWRDS SZA,RSS JMP LGER3 NO MEMORY AVAILABLE LDA LST STA LSTUL CCA ADA LST ADA IWRDS JMP GLWAM,I * IWHCH NOP IWRDS NOP LST NOP * BUFER DEF *+1 BUFST BSS 5 * BU#ER EQU BUFER * LGER3 LDA NM CLB NO FMP ERROR JSB STFER OUTPUT ERROR TO SYSTEM CONSOLE JSB ABRT JMP EXEC7 * NM ASC 1,NM * * SUBROUTINE TO ECHO ON ECHO FILE * * EKHOS NOP STA LENGT SAVE LENGTH OF MESSAGE STB ADDRS SAVE ADDRESS OF MESSAGE LDA ECHO1 IS ECHO ON? SZA,RSS JMP EKHOS,I NO, EXIT LDA EMSAM MAP AND ECHO FILE SAME? CPA B1 JMP EKHOB YES, OUTPUT TO MAP FILE LDA LENGT GET MESSAGE LENGTH LDB ADDRS GET MESSAGE ADDRESS JSB WRFL5 OUTPUT TO ECHO FILE JMP EKHOS,I EKHOB LDA LENGT GET MESSAGE LENGTH LDB ADDRS GET MESSAGE ADDRESS JSB WRFL4 OUTPUT TO MAP FILE JMP EKHOS,I * ECHO1 NOP EMSAM NOP HED RTM LOADER UTILITY SUBROUTINES ***** * ** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF) * CALLING SEQUENCE: * * JSB BLINE * RETURN * ***** BLINE NOP LDA LBUFA STA BELIN LDA MD60 LDB BLANK STB BELIN,I #, ISZ BELIN INA,SZA JMP *-3 JMP BLINE,I * BELIN NOP MD60 DEC -60 * LBUFA DEF LBUF SPC 5 SKP * ***** * ** BAKUP ** BACK UP INPUT BUFFER (QIBUF) POINTERS BY ONE CHARACTER * CALLING SEQUENCE: * * JSB BAKUP * RETURN * ***** BAKUP NOP LDA QQCNT DECREMENT CHAR COUNT ADA M1 STA QQCNT LDB QQPTR SLA AND IF NECESSARY, ADB M1 DECREMENT POINTER STB QQPTR JMP BAKUP,I ***** * THE ABSOLUTE RECORD BUFFER * .ABR DEF ABREC ABREC OCT 0 ABRC1 BSS 49 BUFFER FOR ABSOLUTE RECORD ABL1 DEF ABREC+2 HOLDS CURRENT BUFFER ADDRESS ABL2 DEF ABREC+2 SPC 5 ***** * ** PACK ** INSERT A WORD INTO THE ABSOLUTE RECORD BUFFER * CALLING SEQUENCE: * * LDA WORD TO BE PLACED IN RECORD * JSB PACK * RETURN * * NOTE: .B. IS NOT ALTERED BY THIS SUBROUTINE ***** PACK NOP STA ABL1,I STORE WORD AT NEXT LOCATION ISZ ABL1 IN BUFFER, INCREASE ADDRESS. ADA CKS ADD WORD TO CHECKSUM STA CKS AND RESTORE WORD ISZ ABREC COUNT WORD JMP PACK,I AND EXIT. * PACK# EQU PACK SKP ***** * ** PUNCH ** OUTPUT THE RECORD IN THE ABSOLUTE RECORD BUFFER * CALLING SEQUENCE: * * JSB PUNCH * RETURN * * NOTE: THIS SUBROUTINE INSERTS CHECKSUM AND WORDCOUNT BEFORE OUTPUT ***** PUNCH NOP ENTRY/EXIT LDA OUTON OUTPUT FILE OPEN? SZA,RSS JMP ERROO NO, ERROR EXIT LDA CKS ADD LOAD ADDRESS TO CHECK-SUM ADA ABREC+1 AND SET RECORD SUM STA ABL1,I IN LAST WORD OF RECORD. LDA ABREC ADD 2 TO RECORD WORDCOUNT ALF,ALF POSITION AS FIRST CHAR. AND STA ABREC SET. ALF,ALF REPOSITION, ADD 3 FOR TOTAL ADA B3 LENGTH AND SET FOR CMA,INA LDB .ABR JSB WRFL2 WRITE RECORD TO ABS OUTPUT FILE CLA ScNLH ZERO OUT STA ABREC WORD COUNT STA CKS AND CHECKSUM LDA ABL2 INITIALIZE STA ABL1 NEXT WORD POINTER JMP PUNCH,I EXIT- * ERROO CLB JSB CLFL3 CLOSE REL FILE LDA OO CLB ERROR CODE JMP WERR1 * OO ASC 1,OO * CKS NOP CHECKSUM OUTON NOP * B3 OCT 3 JN HED SCANNER ROUTINE ***** * ** SCAN ** SCAN INPUT BUFFER (QIBUF) FOR KEYWORD * CALLING SEQUENCE: * * LDA NUMBER OF ENTRIES TO SEARCH * LDB ADDRESS OF PNEUMONIC TABLE ENTRY ASSOC WITH FIRST CHOICE * JSB SCAN * RETURN1 NOT FOUND * RETURN2 FOUND, OFFSET FROM FIRST ENTRY SEARCHED IN .A. * * NOTE: THIS ROUTINE WILL SKIP LEADING BLANKS IN ATTEMPTING A MATCH. * FURTHER,BUFFER POINTERS ARE ADVANCED PAST THE KEYWORD * MATCHED OR RESET IF NO MATCH OCCURRED. ***** SCAN NOP ENTRY/EXIT STB PTR INITIALIZE SCANNER STA CNTR CLA STA CNT INITIALIZE OFFSET COUNTER SCAN1 LDA PTR,I GET COMMAND POINTER WORD AND B377 MASK COMMAND TABLE OFFSET ADA CMTBL STA PTR2 STORE POINTER TO ASCII COMMAND LDA PTR,I ALF,ALF AND B377 GET # CHARS. STA NCHAR ISZ CNT BUMP OFFSET COUNTER CLA STA CCNT LDA QQCNT SAVE CHARACTER STREAM STA QQCN1 LDA QQPTR STA QQPT. POINTERS. JSB NXTC GET THE FIRST NON-BLANK CHAR CLA END OF LINE JMP SCAN5 GET REST OF CHARS IN LOOP SCAN2 JSB QGETC GET NEXT CHARACTER. CLA NO MORE CHARS. SCAN5 STA TEMP LDA PTR2,I LDB CCNT ISZ CCNT CPB NCHAR ALL CHARS. MATCH? JMP SCAN4 YES-CHECK END OF INPUT ELEMENT. SLB,RSS IS CHAR IN HIGH-ORDER BYTE? ALF,ALF YES--ROTATE TO LOW AND B177 MASK SLB BUMP ASCII COMMAND TABLE POINTER ON ISZ PTR2 EVEN-NUMBERED CHARACTERS. CPA TEMP DO CHARS. MATCH? JMP SCAN2 YES--SO FAR. LDA QQPT. NO--BACKUP POINTERS STA QQPTR LDA QQCN1 STA QQCNT SPC 1 * NOW BUMP COMMAND TABLE POINTER, OR TAKE ERROR EXIT * IF NO MORE LEFT SPC 1 ISZ PTR ISZ CNTR END OF TABLE? JMP SCAN1 NO JMdUP SCAN,I SPC 1 SCAN4 LDA TEMP IS NEXT SOURCE CHAR A DELIMITER? SZA END OF LINE? JSB BAKUP LDA CNT ISZ SCAN JMP SCAN,I * CCNT NOP COUNTER CNT NOP OFFSET COUNTER CNTR NOP NUMBER OF ENTRIES TO SEARCH NCHAR NOP NUMBER OF CHARACTERS PTR NOP MNEMONIC TABLE ADDRESS PTR2 NOP POINTER TO ASCII COMMAND QQCN1 NOP CHARACTER STREAM QQPT. NOP POINTERS TEMP NOP TEMP STORAGE * B377 OCT 377 HED INPUT COMMAND LINE HED SEARCH SYMBOL TABLE FOR MATCH ROUTINE ***** * ** SSTBL ** SEARCH SYMBOL TABLE * CALLING SEQUENCE * * LDB ADDRESS OF 5 CHAR NAME TO MATCH * JSB SSTBL * RETURN1 SYMBOL NOT FOUND * RETURN2 FOUND, LST1-LST5 POINT TO MATCHED ENTRY * * NOTE: THE NAME INPUT FOR MATCH MUST START ON A WORD BOUNDARY ***** SPC 1 SSTBL NOP CLA FLAG FOR 0 ENTRY IN LST TABLE STA FFLAG STB CMDIN SAVE TEMPORARILY JSB LSTI INITIALIZE SYMBOL TABLE SSTB1 JSB LSTP SET LST ENTRY ADDRESSES JMP SSTBL,I END OF TABLE LDA LST1,I GET WORD 1 OF LST ENTRY SZA USED ENTRY? JMP SSTB2 YES LDA LST1 ADA M1 STA FFLAG SAVE ADDRESS OF LAST 0 ENTRY SSTB2 LDB CMDIN RETRIEVE ADDRESS OF TARGET MATCH LDA B,I CPA LST1,I CHARS. 1&2 MATCH? INB,RSS JMP SSTB1 NO--GET NEXT ENTRY LDA B,I CPA LST2,I INB,RSS JMP SSTB1 LDA B,I XOR LST3,I AND UPCM CHECK CHAR. 5 SZA JMP SSTB1 * MATCH FOUND -- MAKE SUCCESS RETURN ISZ SSTBL JMP SSTBL,I * FFLAG NOP FLAG FOR 0 ENTRY IN LST * UPCM OCT 77400 SKP SKP * * * SUBROUTINE TO GET LOGICAL UNIT NUMBER OF FILE * LOCFS NOP STA IDCB JSB LOCF DEF *+9 DEF IDCB,I DCB BUFFER DEo3F IERR ERROR CODE DEF IREC NEXT RECORD NUMBER DEF IRB RELATIVE BLOCK OF NEXT READ DEF IOFF BLOCK OFFSET OF NEXT READ DEF JSEC NUMBER OF SECTORS IN THE FILE DEF JLU FILE LOGICAL UNIT DEF JTY FILE TYPE JMP LOCFS,I * IOFF NOP IRB NOP IREC NOP JLU NOP JTY NOP JSEC NOP SKP * * LOADER-GENERATOR EXITS * EXEC0 LDB LDGEN GENERATOR CALLING? SZB,RSS JMP CONSL YES, TRY SYSTEM CONSOLE LDB INACT INTERACTIVE INPUT? SZB,RSS JMP CONSL NO, TRY SYSTEM CONSOLE LDA B4 STA CMDLU JMP NXTCM * EXEC6 CCA JSB GLWAM RELEASE MEMORY EXEC7 JSB CLFL1 PROGRAM TERMINATION, CLB JSB CLFL2 CLOSE ALL FILES OPEN OR NOT CLB JSB CLFL3 JSB CLFL4 JSB CLFL5 JSB CLFL6 JSB CLFL7 JSB EXEC TERMINATE PROGRAM DEF *+2 DEF B6 * CONSL LDB PRPTA JSB OTMES JMP NXTC2 * B2 OCT 2 B6 OCT 6 * INACT NOP SKP * * * CFILE DEF *+1 COMMAND INPUT ASC 3,LU.. * OFILE DEF *+1 ABSOLUTE OUTPUT ASC 3,LU.. * LFILE DEF *+1 MAP/LIST AL ASC 3,LU.. * EFILE DEF *+1 PROMPT/ERROR ASC 3,LU.. * IFILE DEF *+1 RELOCATE-SEARCH ASC 3,LU.. * TRANS DEF *+1 TRANSFER ASC 3,LU.. * SNAPS DEF *+1 SNAP/DISPLAY ASC 3,LU.. * ECHOS DEF *+1 ECHO ECFIL ASC 3,LU.. SKP * * SUBROUTINE TO STUFF MESSAGE IN OUTPUT BUFFER AND TO SEND * IT TO THE SYSTEM CONSOLE * STFER NOP STA AMERR+3 STORE MESSAGE IN OUTPUT BUFFER JSB ERRPR PROCESS ANY FMP ERROR CODE LDA B6 MESSAGE LENGTH LDB AMERR MESSAGE ADDRESS JSB MESSI OUTPUT MESSAGE OCT 2 ON SYSTEM CONSOLE JMP STFER,I * BUFAD DEF *+8 AMERR DEF *+1 ASC 3,ERR ERROR MESSAGE 9= ERROR + CODE MERR ASC 3, FMP BSS 3 SKP * * * THIS SUBROUTINE WILL MERGE THE FMP ERROR CODE * WITH A MNEMONIC TYPE AND REPORT IT TO EITHER THE * SESSION CONSOLE OR ERROR LOG DEVICE. * * ERRPR NOP STB 0 SZA,RSS ANY FMP ERROR CODE? JMP ERRPR,I NO, RETURN STA NUMB1 SSA CMA,INA SAVE NO. TO BE CONVERTED STA NUMB JSB CNUMD CONVERT TO ASCII DEF *+3 DEF NUMB DEF BUFAD,I LDA M3 STA KOUNT LDB BUFAD STB BUFF1 ERRP2 LDA 1,I DELETE BLANKS CPA BLANK JMP ERRP1 STA BUFF1,I ISZ BUFF1 ERRP1 INB ISZ KOUNT JMP ERRP2 LDB BLANK LDA NUMB1 SSA LDB BB55 STB MERR+2 LDA BUFAD CMA,INA ADA BUFF1 RAL ADA D12 MESSAGE LENGTH ISZ ERRPR JMP ERRPR,I * BUFF1 NOP KOUNT NOP NUMB NOP NUMB1 NOP * BB55 OCT 20055 * * SKP * * * SUBROUTINE TO SEND-GET MESSAGE TO-FROM SYSTEM CONSOLE * * MESSI NOP CMA,INA STA IL MESSAGE LENGTH STB IBUF MESSAGE ADDRESS LDA MESSI,I STA INOUT INPUT OR OUTPUT ISZ MESSI JSB IMESS DEF *+4 DEF INOUT INPUT/OUTPUT MESSAGE DEF IBUF,I MESSAGE ADDRESS DEF IL CHARACTER COUNT JMP MESSI,I * INOUT NOP * * ADDRESSES OF DATA CONTROL BLOCKS * DCB1 DEF IDCB1 DCB2 DEF IDCB2 DCB3 DEF IDCB3 DCB4 DEF IDCB4 DCB5 DEF IDCB5 DCB6 DEF IDCB6 DCB7 DEF IDCB7 SKP WERR1 JSB ERROR JMP EXEC0 * ABRT1 JSB ABRT JMP EXEC6 EXIT * * * ABRT NOP LDB RTMLG LDA D16 JSB MESSI OCT 2 CLA,INA STA TRUNC DON'T TRUNCATE ON ABORT JMP ABRT,I * TRUNC NOP * * RTMLG DEF *+1 ASC 8,RTMLG TERMINATED * D16 DEC 16 SKP * * * SUBROUTINE p#TO WRITE ON FILES * * WRFL1 NOP JSB WRTFL COMMAND/PROMPT/ERROR DEF DCB1 JMP WRFL1,I * * * WRFL2 NOP JSB WRTFL OUTPUT DEF DCB2 JMP WRFL2,I * * * WRFL4 NOP JSB WRTFL LIST (MAP) DEF DCB4 JMP WRFL4,I * * * WRFL5 NOP JSB WRTFL ECHO DEF DCB5 JMP WRFL5,I * * * WRFL7 NOP JSB WRTFL ERROR/PROMPT DEF DCB7 JMP WRFL7,I * SKP * * * WRITE ON FILES * * A REG = LENGTH OF WRITE REQUEST * B REG = ADDRESS OF BUFFER * * (P+1) = ADDRESS OF DCB * * WRTFL NOP SSA JMP WRT1 INA ARS WRT2 STA IL SAVE BUFFER LENGTH STB IBUF SAVE BUFFER ADDRESS LDA WRTFL,I GET ADDRESS OF DCB AND SAVE JSB INDCK INDIRECT CHECK LDA 0,I STA IDCB ISZ WRTFL INC. RET. ADDRESS JSB WRITF WRITE FILE DEF *+5 RETURN ADDRESS DEF IDCB,I DATA CONTROL BLOCK DEF IERR ERROR CODE DEF IBUF,I DATA BUFFER ADDRESS DEF IL DATA BUFFER LENGTH SZA JMP ERRWE ERROR EXIT JMP WRTFL,I WRT1 CMA,INA JMP WRT2 * ERRWE LDA WE LDB IERR ERROR CODE STA AMERR+3 WRITE ERROR JSB ERRPR PROCESS ANY FMP ERROR CODE LDA B6 LDB AMERR JSB MESSI OCT 2 JMP ABRT1 ABORT * WE ASC 1,WE SKP * * * SUBROUTINES TO READ FILES * * A REG = DATA CONTROL BLOCK ADDRESS * B REG = DATA BUFFER ADDRESS * * RDFL1 NOP JSB READ INPUT COMMANDS DEC 80 READ REQUEST LENGTH JMP RDFL1,I * * * RDFL6 NOP JSB READ TRANSFER DEC 80 READ REQUEST LENGTH JMP RDFL6,I * * * RDFL7 NOP JSB READ ERROR-PROMPT DEC 80 READ REQUEST LENGTH JMP RDFL7,I SKP * * * READ FILE * * A REG =o DATA CONTROL BLOCK ADDRESS * B REG = DATA BUFFER ADDRESS * (P+1) = DATA BLOCK MAXIMUM LENGTH * * ON RETURN A REG = ACTUAL LENGTH READ * * READ NOP STA IDCB DATA CONTROL BLOCK ADDRESS STB IBUF DATA BUFFER ADDRESS LDA READ,I GET MAXIMUM LENGTH OF DATA BLOCK ARS STA IL ISZ READ INC. RET. ADDRESS READ1 JSB READF READ FILE DEF *+6 RETURN ADDRESS DEF IDCB,I DATA CONTROL BLOCK DEF IERR ERROR CODE DEF IBUF,I DATA BUFFER DEF IL READ REQUEST LENGTH DEF LEN ACTUAL READ LENGTH SZA JMP ERRRE ERROR EXIT LDA LEN ACTUAL READ LENGTH SZA,RSS JMP READ1 0 RECORD RAL GET NUMBER OF CHARACTERS JMP READ,I * ERRRE LDA RE LDB IERR ERROR CODE JMP WERR1 READ ERROR * RE ASC 1,RE LEN NOP ACTUAL READ LENGTH, RETURNED * READ# EQU READ SKP * * * SUBROUTINES TO CLOSE FILES * * CLFL1 NOP LDA DCB1 CLOSE COMMAND/PROMPT/ERROR FILE CLB JSB CLSFL JMP CLFL1,I * * * CLFL2 NOP STB EOF LDA DCB2 CLOSE ABSOLUTE OUTPUT FILE JSB INDCK JSB LOCFS GET FILE TYPE CPA M11 DCB NOT OPEN? JMP CLF2A YES SSA JMP CLF2B LOCF ERROR LDA JTY SZA,RSS TYPE 0? JMP CLF2A YES, DON'T TRUNCATE FILE LDA JSEC # SECTORS INA ARS LDB IRB RELATIVE BLOCK OF NEXT READ CMB ADA 1 STA ITRUN # OF BLOCKS TO BE TRUNCATED CLF2A LDB EOF LDA DCB2 JSB CLSFL JMP CLFL2,I * EOF NOP CLF2B LDA CE LDB IERR ERROR CODE JSB STFER JMP CLF2A * * * CLFL3 NOP LDA DCB3 CLOSE REL/SNAP/DISPLAY FILE JSB CLSFL JMP CLFL3,I * * * CLFL4 NOP LDA DCB4 CLOSE LIST (MAP)' FILE CLB,INB JSB CLSFL JMP CLFL4,I * * * CLFL5 NOP LDA DCB5 CLOSE ECHO FILE CLB,INB JSB CLSFL JMP CLFL5,I * * * CLFL6 NOP LDA DCB6 CLOSE TRANSFER FILE CLB JSB CLSFL JMP CLFL6,I * * * CLFL7 NOP LDA DCB7 CLOSE ERROR/PROMPT FILE CLB,INB JSB CLSFL JMP CLFL7,I SKP * * * SUBROUTINE TO CLOSE THE DATA CONTROL BLOCK AND MAKE * THE FILE AVAILABLE TO OTHER CALLERS * * A REG = ADDRESS OF DATA CONTROL BLOCK * * CLSFL NOP STA IDCB SAVE ADDRESS OF DATA CONTROL BLOCK CPA DCB2 ABSOLUTE OUTPUT FILE? JMP CLSF1 YES CLA STA ITRUN CLSF1 LDA B100 GO WRITE END OF FILE SZB WRITE EOF? JSB CNTRL YES LDA TRUNC TRUNCATE? SZA,RSS JMP CLSF2 SET TO TRUNCATE CLA STA ITRUN DON'T TRUNCATE CLSF2 JSB CLOSE CLOSE FILE DEF *+4 RETURN ADDRESS DEF IDCB,I ADDRESS OF DATA CONTROL BLOCK DEF IERR ERROR CODE DEF ITRUN # OF BLOCKS TO BE TRUNCATED SSA,RSS JMP CLSFL,I CPA M11 DCB NOT OPEN JMP CLSFL,I LDA CE ERROR EXIT LDB IERR ERROR CODE JSB STFER CLOSE ERROR JMP CLSFL,I * CE ASC 1,CE * B100 OCT 100 M11 DEC -11 * IERR NOP ITRUN NOP * IERR# EQU IERR SPC 5 * * * SUBROUTINE TO CONTROL A PERIPHERAL DEVICE * * A REG = CONTROL CODE * * CNTRL NOP STA ICNTL SAVE CONTROL CODE JSB FCONT DEF *+4 RETURN ADDRESS DEF IDCB,I DATA CONTROL BLOCK DEF IERR ERROR CODE DEF ICNTL CONTROL CODE JMP CNTRL,I * * ICNTL NOP CONTROL CODE SKP * * * SUBROUTINE TO GET INPUT FROM SYSTEM CONSOLE * OR INTERACTIVE INPUT * * CRTIN NOP STA IL SAVE LENGTH Ʃ LDA ERACT SZA JMP CRT2 ERROR LOG INTERACTIVE LDA INACT INTERACTIVE INPUT? SZA JMP CRT1 YES LDA IL NO, READ FROM SYSTEM CONSOLE JSB MESSI OCT 1 LDA 1 JMP CRTIN,I CRT1 LDA DCB1 DCB JSB RDFL1 READ FROM INTERACTIVE INPUT JMP CRTIN,I CRT2 LDA DCB7 DCB JSB RDFL7 READ FROM ERROR LOG JMP CRTIN,I * * * SUBROUTINE TO CHECK FOR INDIRECTS AND REMOVE THEM * * INDCK NOP SSA,RSS JMP INDCK,I AND UDFE LDA 0,I JMP *-4 * IN#CK EQU INDCK * * IBUF NOP ADDRESS OF BUFFER ICR NOP LABEL IL NOP BUFFER LENGTH IOPTN NOP OPEN OPTION ISECU NOP SECURITY CODE FRTRU NOP FIRST TIME THRU FLAG LDGEN NOP LOADER = 1 OR GENERATOR = 0 CALLING * UDFE OCT 77777 SKP SKP ** NXTC ** GET NEXT NON-BLANK CHAR FROM INPUT BUFFER (QIBUF) *CALLING SEQUENCE: * * JSB NXTC * RETURN1 NO MORE NON-BLANK CHARS * RETURN2 GOT ONE, AND IT IS RETURNED IN .A. * ***** NXTC NOP GET NEXT NONN-BLANK CHARACTER. JSB QGETC JMP NXTC,I ERROR RETURN CPA B40 BLANK? JMP *-3 YES ISZ NXTC TAKE NORMAL EXIT JMP NXTC,I * B40 OCT 40 * * * SUBROUTINE TO OUTPUT MESSAGE ON ERROR/PROMPT LOG DEVICE. * IF NO ERROR DEVICE THEN OUTPUT WILL BE MADE TO THE * INPUT DEVICE IF IT IS INTERACTIVE. IF INPUT IS NOT * INTERACTIVE THEN OUTPUT WILL BE ON LU 1 WHICH SHOULD * BE THE SESSION CONSOLE. * * PRINT NOP STA LENGT SAVE LENGTH OF MESSAGE STB ADDRS SAVE ADDRESS OF MESSAGE LDA ERDVC ERROR/PROMPT DEVICE GIVEN? SZA,RSS JMP DIAG1 NO LDA LENGT GET MESSAGE LENGTH JSB WRFL7 YES, WRITE MESSAGE ON ERROR LOG DEVICE LDA ERACT ERROR LOG INTERACTIVE? SZA JMP PRINT,I YES, EXI='T LDB ADDRS DIAG1 LDA INACT IS INPUT DEVICE INTERACTIVE? SZA,RSS JMP DIAG3 NO OUTPUT TO SESSION CONSOLE LDA FL1OP IS INPUT OPEN? SZA,RSS JMP DIAG3 NO, USE SESSION CONSOLE LDA LENGT GET MESSAGE LENGTH JSB WRFL1 OUTPUT MESSAGE JMP PRINT,I DIAG3 LDA LENGT GET MESSAGE LENGTH JSB MESSI OUTPUT MESSAGE TO SYSTEM CONSOLE OCT 2 JMP PRINT,I * ADDRS NOP MESSAGE ADDRESS ERDVC NOP ERROR/PROMPT DEVICE GIVEN? FL1OP NOP INPUT OPEN? LENGT NOP MESSAGE LENGTH SKP * * * SUBROUTINE TO OUTPUT MESSAGE TO MAP FILE * * MAPS NOP STA LENGT SAVE LENGTH OF MESSAGE STB ADDRS SAVE ADDRESS OF MESSAGE LDA MAPON IS MAP FILE OPEN? SZA,RSS JMP MAPS,I NO, EXIT LDA EMSAM MAP AND ECHO FILE SAME? CPA M1 JMP DIAG4 YES, OUTPUT TO ECHO FILE LDA LENGT GET MESSAGE LENGTH LDB ADDRS GET MESSAGE ADDRESS JSB WRFL4 OUTPUT TO LIST DEVICE JMP MAPS,I DIAG4 LDA LENGT MESSAGE LENGTH LDB ADDRS MESSAGE ADDRESS JSB WRFL5 OUTPUT TO ECHO DEVICE JMP MAPS,I * MAPON NOP SKP SKP ***** * ** DIAG2 ** OUTPUT MESSAGES THAT ARE STORED WITH THE CHAR COUNT * IMMEDIATELY PRECEEDING THE BUFFER. * CALLING SEQUENCE: * * LDB ADDRESS OF BUFFER MINUS 1, WHICH CONTAIN BUFFER LENGTH * JSB DIAG2 * RETURN * ***** DIAG2 NOP ENTRY: LDB,JSB LDA B,I INB JSB PRINT GO OUTPUT MESSAGE LDA LENGT LDB ADDRS JSB MAPS JMP DIAG2,I RETURN. * * ** DIAG ** SAME AS DIAG2 BUT MESSAGE OUTPUT ONLY TO CONSOLE * ONLY IF INPUT IS INTERACTIVE. * * DIAG NOP LDA B,I INB STA LENGT LDA CONSO SWITCH TO SESSION CONSOLE? SZA JMP DIAGA YES, OUTPUT MESSAGE ( LDA INACT INTERACTIVE INPUT? SZA,RSS JMP DIAGB NO DIAGA LDA LENGT JSB PRINT GO OUTPUT MESSAGE LDB ADDRS DIAGB LDA LENGT JSB MAPS GO MAP OR ECHO IF NEEDED JMP DIAG,I * * DIAGNOSTIC OUTPUT SECTION * LER3 LDB MEMOV MEMORY OVERFLOW JMP ERREX * LER5 LDB SYMOV SYMBOL TABLE OVERFLOW ERREX JSB DIAG2 PRINT DIAGNOSTIC ABORT LDB RELAB RELAB JSB DIAG2 PRINT MESSAGE CLA STA UEXFL CLEAR UNDEF EXTERNS FLAG STA NAMR. ALLOW A NAM RECORD JSB LSTI INITIALIZE SYM TAB POINTERS LOOP1 JSB LSTP GO TO NEXT SYM TAB ENTRY JMP ABRT1 NO MORE, ERROR EXIT LDA LST3,I CLEAR AND UPCM EXTERNAL STA LST3,I ID NUMBER JMP LOOP1 DO FOR ALL SYM TAB ENTRIES * NAMR. NOP ALLOW A NAM RECORD UEXFL NOP UNDEF EXTERNALS FLAG * AB#RT EQU ABORT SKP * RELAB DEF *+1 OCT 6 ASC 3,REL AB * MEMOV DEF *+1 OCT 6 ASC 3,MEM OV * SYMOV DEF *+1 OCT 6 ASC 3,SYM OV * * * SUBROUTINE TO OUTPUT ERROR MESSAGES * * ERROR NOP STA AMERR+3 STORE ERROR MESSAGE IN OUTPUT BUFFER JSB ERRPR PROCESS ANY FMP ERROR CODE LDA B6 MESSAGE LENGTH LDB AMERR MESSAGE ADDRESS JSB PRINT GO OUTPUT MESSAGE LDA LENGT LDB ADDRS JSB MAPS JMP ERROR,I * ER#OR EQU ERROR SKP * LNKDR NOP LINK DIRECTION * * THE FOLLOWING CORE IS THE USER'S MEMORY TABLE. * .MEM. DEF *+1 USER'S MEMORY TABLE .MEM1 OCT 100 SET DEFAULT FWABP .MEM2 OCT 1646 SET DEFAULT LWABP .MEM3 OCT 2000 SET DEFAULT FWAM .MEM4 OCT 77777 SET DEFAULT LWAM .MEM5 NOP SET DEFAULT FWAC .MEM6 NOP SET DEFAULT LWAC FWABP EQU .MEM1 LWABP EQU .MEM2 FWAM EQU .MEM3 LWAM EQU .MEM4 FWAC EQU .MEM5 LWAC EQU .MEM6 * MEMRY DEF FWABP SKP p SKP ***** * ** LSTI / LSTP ** SYMBOL TABLE ACCESSING SUBROUTINES * * PURPOSE: TO SET IN WORDS LST1 - LST5 THE * ADDRESSES OF THE FIVE WORDS IN AN * ENTRY IN THE LST (LOADER SYMBOL TABLE) * * INITIAL SETUP IS MADE BY THE ROUTINE * -LSTI- THIS SECTION INITIALIZES * THE NEGATIVE COUNT OF THE NUMBER * OF ENTRIES IN THE LST AND SETS LST5 POINTING TO * THE "-1"TH ENTRY. SPC 1 * THE SECTION -LSTP- SETS THE FIVE * ADDRESSES OF THE NEXT LST ENTRY * IN LST1-LST5. IT ALSO INDEXES THE * ENTRY COUNTER. WHEN THE COUNTER = ZERO * EXIT FROM LSTP IS TO P+1 OF THE CALL * AND LST1-LST5 CONTAIN THE ADDRESSES * FOR A NEW ENTRY. IF THE COUNT AFTER * INDEXING IS NOT ZERO, EXIT IS TO * P+2 OF THE CALL. SPC 1 * CALLING SEQUENCE: (P-1) JSB LSTI * (P) JSB LSTP * (P+1) (END OF LST RETURN) * (P+2) (NEXT ENTRY ADDRESSES * SET RETURN) SPC 2 * - INITIALIZER- SPC 1 LSTI NOP LDA LSTA,I GET NUMBER OF LST ENTRIES - SET CMA NEGATIVE THE VALUE + 1. STA LSTPX STORE LDA LSTA SET ADDRESS+1 OF WORD 1 OF FIRST STA LST5 JMP LSTI,I EXIT SPC 2 * - PROCESSOR - SPC 1 LSTP NOP LDA LST5 INA STA LST1 INA STA LST2 INA STA LST3 INA STA LST4 INA STA LST5 ISZ LSTPX INDEX ENTRY COUNTER. ISZ LSTP NOT END OF LST - SET P+2 EXIT JMP LSTP,I -EXIT- TO P+1 IF END OF LST. * * SUBROUTINE TO INITIALIZE LST PAST KNOWN UNDEFS * LSTM NOP JSB LSTI INITIALIZE LST LDA LSTPX ADD UNDEFS TO ENTRY COUNTER ADA UNDEF STA LSTPX LDA UNDEF SET BHFBLST START ADDRESS PAST UNDEFS RAL,RAL ADA UNDEF ADA LST5 STA LST5 JMP LSTM,I SPC 2 * LSTA DEF LST,I DEFINE STARTING ADDRESS OF LST LSTPX OCT 0 HOLDS ENTRY COUNTER(NEG. #+1). LST1 OCT 0 LST2 OCT 0 LST3 OCT 0 LST4 OCT 0 LST5 NOP UNDEF NOP ******************************************************************** * THE BASE PAGE LINKS TABLE (STORED IN BPAGE) * HAS ROOM FOR 1020 WORDS, CORRESPONDING * TO CORE ADDRESSES(OCTAL) 4-1777. * LOCATIONS 0-1 ARE INACCESSIBLE ANYWAY, AND LOCATIONS * 2,3 ARE RESERVED FOR RTM PROGRAM DESCRIPTION RECORDS. * BSS 4 PROTECT AGAINST FWABP<4 * BPAGE BSS 1020 BASE PAGE LINKS TABLE BPAGA DEF BPAGE-4 OFFSET * **************************************************************** * THE CURRENT PAGE LINKS TABLE HAS ROOM FOR 128 * WORDS. THIS IS THE MAXIMUM NUMBER OF LINKS * THAT CAN BE ASSIGNED ON THE CURRENT PAGE. * CPAGE DEF *+1 BSS 128 SKP * * RELOCATION BASE TABLE ( RBT ) * * THE ORDER OF THESE ENTRIES MUST BE MAINTAINED RBTO DEF LOCC RBTA DEF B0 B0 NOP ABSOLUTE RELOCATION BASE LOCC NOP PROGRAM RELOCATION BASE BPLOC NOP BASE PAGE RELOCATION BASE COMOR OCT 0 COMMON RELOCATION OCT 0 ABSOLUTE * MLOCC EQU LOCC SKP H***** * ** FUTI / FUTP **FIXUP TABLE ACCESSING SUBROUTINES * * * - INITIALIZER- SPC 1 FUTI NOP LDA OPT.3,I GET NO. OF FIXUP ENTRIES CMA SET NEGATIVE + 1 STA FUTPX LDA FUTA,I SET ADDRESS OF FIRST STA FUT4 FIXUP TABLE ENTRY JMP FUTI,I SPC 1 * - PROCESSOR - SPC 1 FUTP NOP LDA FUT4 ADA M1 STA FUT1 ADA M1 STA FUT2 ADA M1 STA FUT3 ADA M1 STA FUT4 ISZ FUTPX INDEX ENTRY COUNTER ISZ FUTP NOT END OF FIXUP TABLE, SET P+2 EXIT JMP FUTP,I EXIT-TO P+1 IF END OF FIXUP TABLE FUTA DEF OPT.3 FUT1 NOP FUT2 NOP FUT3 NOP FUT4 NOP FUTPX NOP * OPT.3 NOP END OF MEMORY POINTER * SPC 1 * - SHORT FIXUP - SPC 1 FUTS NOP LDA FUT4 ADA M1 STA FUT1 EQT EXTENSION ADDRESS ADA M1 STA FUT4 EQT EXTENSION LENGTH ISZ FUTPX ISZ FUTS JMP FUTS,I SKP * * SUBROUTINE TO GET INPUT FROM INPUT DEVICE IF IT IS * INTERACTIVE ELSE SYSTEM CONSOLE. * * OTMES NOP JSB DIAG2 OUTPUT MESSAGE LDB QBUFA INPUT BUFFER LDA D72 MAXIMUM INPUT LENGTH JSB CRTIN GO GET INPUT STA QQCHC DATA LENGTH CLA STA QQCNT RESET COUNTER LDA QBUFA AND STA QQPTR BUFFER POINTER LDA QQCHC MAP/ECHO INPUT LDB QBUFA JSB EKHOS JMP OTMES,I * D72 DEC 72 * * BSS 2 MOVEX NOP MOVE A BLOCK OF DATA STA MOVEX-1 STORE NEG. # WORDS. LDA MOVEX,I ISZ MOVEX STA MOVEX-2 STORE TO POINTER LDA 1 TRACK DOWN JSB INDCK A DIRECT STA 1 'FROM' ADDRESS. LDA B,I GET WORD STA MOVEX-2,I STORE INB ISZ MOVEX-2 ISZ MOVEX-1 DONE? JMP *-5 JMP MOVEX,I YEЋS SKP HED *** MORE UTILITY SUBROUTINES ****** ***** * * SUBROUTINE: CONV (CONVERT 16-BIT BINARY NUMBER * TO 6-CHARACTER * ASCII FORM OF THE OCTAL * REPRESENTATION.) * * CALLING SEQUENCE: * * (A)-ADDRESS OF 3-WORD AREA FOR * STORING ASCII/OCTAL CHARACTERS * (B)-BINARY VALUE FOR CONVERSION * * (P) JSB CONV * (P+1) (RETURN)-(A)=NEXT ADDRESS OF STORAGE * AREA,(B)-DESTROYED. ***** CONV NOP STA NBUF+3 SAVE STORAGE AREA ADDRESS RBL POSITION FIRST DIGIT TO B(15-13). LDA M3 LET CONVERT COUNTER STA NBUF+4 = -3. LDA B40 MAKE FIRST CHARACTER A SPACE. SLB NEGATIVE NUMBER? LDA B61 YES CONV1 ALF,ALF ROTATE CHAR. TO UPPER POSITION STA NBUF+5 AND SAVE. BLF,RBR POSITION NEXT DIGIT TO B(02-00), LDA B AND B7 ISOLATE DIGIT. IOR B60 MAKE AN ASCII CHAR. (60 - 67). IOR NBUF+5 PACK IN UPPER CHARACTER STA NBUF+3,I AND STORE IN STORAGE AREA. ISZ NBUF+3 ADD 1 TO STORAGE AREA ADDRESS. BLF,RBR ROTATE NEXT DIGIT TO LOW B, LDA B ISOLATE CHAR AND B7 IN LOW A, IOR B60 MAKE AN ASCII CHAR. ISZ NBUF+4 INDEX CONVERT COUNTER JMP CONV1 NOT FINISHED. LDA NBUF+3 FINISHED, SET (A)= NEXT STORAGE JMP CONV,I AREA WORD ADDRESS AND EXIT. * LBUF5 DEF LBUF+4 LBF10 DEF LBUF+9 M3 DEC -3 B7 OCT 7 B60 OCT 60 B61 OCT 61 BLANK ASC 1, (ORG LBUF-1 FOR EPL SUBROUTINE) LBUF OCT 0 OCT 0 BSS 58 NBUFA DEF NBUF NBUF BSS 67 HOLDS PROGRAM NAME AND PARAMETERS * LBUF# EQU LBUF SKP ***** * ** PLK ** * * PLK PUNCHES CORE FROM A TO B IN ABS FORMAT. * IT ALSO LISTS THE PUNCH BOUNDS. A, B SPECIFY THE * FINAL LOAD ADDRESS OyF THE DATA. OFFSET IS ADDED TO * GET THE CURRENT CORE LOCATION. * ***** PLKS NOP FOR OFFSET PLK NOP ENTRY: LDA,LDB,JSB. STA PLK1 INB STB PLK3 PL2 LDA MD45 INITIALIZE COUNTER STA PLK2 FOR MAX. BLOCK SIZE OF 45 WORDS. LDA PLK4 STORE LOAD ADDR. OF BLOCK STA ABRC1 IN WORD 2 OF PUNCH BUFFER PL3 LDA PLK1 ADA PLKS ADD OFFSET TO GET ACTUAL ADDRESS IN CORE LDA A,I GET WORD TO PUNCH JSB PACK PUT INTO BUFFER ISZ PLK1 ADD 1 TO CURRENT BLOCK ADDR. ISZ PLK4 LDA PLK1 IF CURRENT BLOCK CPA PLK3 TERMINATED, GO TO JMP PL4 PUNCH LAST BLOCK. ISZ PLK2 INDEX COUNTER. JMP PL3 BUFFER NOT FILLED. JSB PUNCH BUFFER FILLED - PUNCH JMP PL2 FILL NEXT BUFFER. * PL4 JSB PUNCH PUNCH LAST BUFFER - JMP PLK,I EXIT. * PLK1 NOP HOLDS FWA PUNCH AREA PLK2 NOP HOLDS BUFFER INDEX PLK3 NOP HOLDS LWA+1 PUNCH AREA PLK4 NOP MD45 DEC -45 * SKP ***** * ** QGETC ** GET NEXT CHAR FROM INPUT BUFFER (QIBUF) * CALLING SEQUENCE: * * JSB * RETURN1 NO MORE CHARS IN BUFFER * RETURN2 GOT ONE, RETURN IT IN .A. * ***** QGETC NOP GET A CHARACTER LDB QQCNT CPB QQCHC END OF INPUT? JMP QGETC,I YES. ISZ QQCNT COUNT CHARS READ LDA QQPTR,I SLB,RSS LEFT CHAR? ALF,ALF YES, MOVE RIGHT AND B177 SLB IF THIS CHAR IS RIGHT, ... ISZ QQPTR NEXT ONE IS LEFT OF NEXT WORD. ISZ QGETC SKIP EXIT JMP QGETC,I * B177 OCT 177 M60 OCT -60 QBUFA DEF QIBUF QIBUF BSS 40 QQCHC NOP QQCNT NOP QQPTR NOP T1 NOP T3 NOP SKP ***** * ** NSCAN ** GET NUMBER FROM INPUT BUFFER (QIBUF) * CALLING SEQUENCE: * * JSB NSCAN * RETURN1 NO MORE CHARACTERS OR ILLEGAL NUMBER * RETURN2 GOT ONE, VALUE IN .A. * ***** NSCAN NOP CLA INITIALIZE VALUE STA T3 JSB NXTC JMP NSCAN,I NO MORE NON BLANK CHARS JMP NSC2 * NSC1 STA T3 JSB QGETC GET A CHARACTER JMP NSCX+1 DONE RETURN NUMBER NSC2 CPA B54 COMMA? JMP NSCX YES. END OF FIELD. CPA B40 BLANK? JMP NSCX YES-END OF FIELD ADA M60 CONVERT TO DIGIT SSA IS IT A DIGIT? JMP NSCAN,I NO, ERROR STA T1 SAVE DIGIT ADA MD8 LEGAL DIGIT? SSA,RSS JMP NSCAN,I LDA T3 ALF,RAR MULTIPLY RADIX ADA T1 JMP NSC1 * NSCX JSB BAKUP BACK UP OVER LAST CHAR LDA T3 PICK UP VALUE ISZ NSCAN RETURN (P+2) JMP NSCAN,I * MD8 DEC -8 B54 OCT 54 SKP END  # 91740-18055 1740 S C0122 DS/1000 MODULE: LIMEM              H0101 \kASMB,R,L,C * NAME: LIMEM * SOURCE: 91740-18055 * RELOC: 91740-16055 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM LIMEM,8 91740-16055 REV 1740 770912 * * * ENTRY POINT NAMES * ENT LIMEM * * * EXTERNAL REFERENCE NAMES * EXT DB#PC,LIST * * * THIS SUBROUTINE GETS AND RETURNS THE LAST AVAILABLE * WORD OF USER MEMORY AND THE NUMBER OF WORDS OF * AVAILABLE MEMORY. * * SKP LIMEM NOP LDA LIMEM,I GET RETURN ADDRESS ISZ LIMEM STA LIM2 LDB LIMEM,I ISZ LIMEM LDB 1,I GET AVAILABLE MEMORY? SSB JMP LIM2,I NO, RELEASE MEMORY JSB DB#PC FIND LONGEST SEGMENT DEF *+4 RETURN ADDRESS DEF LIST # OF NAMES IN LIST DEF FWAMM FWAM THAT MAY BE USED BY PROGRAM DEF LWAMM LWA OF USER MEMORY LDA FWAMM GET FWAM SZA,RSS =0? JMP ERRLM YES, ERROR LDB LIMEM,I ISZ LIMEM STA 1,I RETURN FWAM CMA,INA ADA LWAMM INA ERRLM LDB LIMEM,I STA 1,I RETURN # WORDS OF AVAILABLE MEMORY JMP LIM2,I * B6 OCT 6 * FWAMM NOP LIM2 NOP LWAMM NOP END I  91740-18056 1740 S C0122 DS/1000 MODULE: DB#PC              H0101 a/ASMB,R,L,C * NAME: DB#PC * SOURCE: 91740-18056 * RELOC: 91740-16056 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * * NAM DB#PC,8 91740-16056 REV 1740 770920 * * * ************************************************************* * * * * THIS ROUTINE DETERMINES THE BOUNDARIES OF MEMORY THAT IS * AVAILABLE FOR USE BY PROGRAMS FOR BUFFERS, TEMPORARY STORAGE * ETC. * * THE CALLING SEQUENCE IS: * * CALL DB#PC(LIST,FWAM,LWAM) * * WHERE: * * LIST = A COUNT OF NAMES OF SEGMENTS OR PROGRAMS * FOLLOWED BY THE NAMES IN ASCII WITH THREE * 16 BIT WORDS FOR EACH NAME. * * FWAM = THIS IS THE FIRST AVAILABLE WORD OF MEMORY * THAT MAY BE USED BY A PROGRAM. IF THE LIST * IS SEGMENT NAMES THEN IT IS FIRST AVAIL- * ABLE WORD PAST THE LONGEST SEGMENT. * * LWAM = THE LAST AVAILABLE WORD OF USER MEMORY. * * NOTE: IF ANY OF THE NAMES IN THE LIST ARE NOT FOUND * THIS ROUTINE WILL EXIT AND INDICATE AN ERROR BY SETTING * FWAM = 0. * * * EXAMPLE OF 'LIST' * * LIST DEC 3 * ASC 3,SEGM1 * ASC 3,SEGM2 * ASC 3,SEGM3 * * * ENT DB#PC * EXT .ENTR * * * LIST NOP FWAM NOP LWAM NOP * DB#PC NOP JSB .ENTR DEF LIST * * CLA INITIALIZE STA FWAM,I FWAM TO ZERO LDA LIST,I SET UP CMA,INA STA TEMP1 SEGMENT COUNTER LDA LIST SET UP INA ADDRESS STA SGTBA NAME ADDRESS NXTSG CLA INITIALIZE KEYWORD PNTR STA TEMP2 TO START OF KEYWORD TABLE CKSEG LDA TEMP1 GET SEGMENT COUNT ADA LIST,I FORM POINTER MPY .3 TO SEGMENT'S ASCII ADA SGTBA NAME AND SAVE IT STA TEMP3 LDB 1657B GET START OF KEYWORD TABLE ADB TEMP2 FORM PTR TO I.D. ENTRY LDB 1,I GET ADDRESS OF I.D. ENTRY SZB,RSS END OF TABLE? JMP ERROR YES - ERROR - EXIT ADB .12 FORM PNTR TO NAME(1) LDA 1,I GET NAME(1) CPA TEMP3,I SAME AS SEGMENT? INB,RSS YES, MOVE PNTR TO NAME(2) JMP NXTEN NO, INDEX TO NEXT ENTRY LDA 1,I GET NAME(2) ISZ TEMP3 MOVE NAME POINTER CPA TEMP3,I SAME AS SEGMENT? INB,RSS YES, MOVE PNTR TO NAME(3) JMP NXTEN NO, INDEX TO NEXT ENTRY LDA 1,I GET NAME(3) AND M256 ISOLATE UPPER CHAR IOR B40 MERGE IN ASCII BLANK ISZ TEMP3 MOVE NAME POINTER CPA TEMP3,I SAME AS SEGMENT? JMP *+3 YES, GO CHECK ADDRESSES NXTEN ISZ TEMP2 MOVE PNTR TO NEXT I.D. ENTRY JMP CKSEG -GO CHECK I.D. ENTRY * LDA 1,I TEST FOR SHORT ID SEGMENT STA TYPE AND B20 ADB .2 SZA,RSS SHORT ID SEGMENT? ADB .7 NO! LDA 1,I GET ADDRESS OF LAST WORD INA INCREMENT TO GET NEW FWAM LDB FWAM,I GET CURRENT FWAM CMB,INB ADB 0 IS IT GREATER THAN SSB,RSS NEW FWAM? STA FWAM,I ISZ TEMP1 INDEX SEGMENT CNTR, IS IT = 0? JMP NXTSG NO, LOCATE NEXT SEGMENT * EXIT LDA TYPE GET WHERE PROGRAM RESIDES AND B17 CPA .2 FOREGROUND? JM9t P FG YES LDA 1777B BACKGROUND (LWA MEMORY) JMP BLEN FG LDA 1751B LWA+1 MEMORY ADA N1 BLEN STA LWAM,I LAST AVAILABLE WORD JMP DB#PC,I RETURN * ERROR CLA SET FWAM = 0 STA FWAM,I FOR ERROR JMP EXIT * * N1 DEC -1 .2 DEC 2 .3 DEC 3 .7 DEC 7 .12 DEC 12 B17 OCT 17 B20 OCT 20 B40 OCT 40 M256 OCT 177400 TEMP1 BSS 1 TEMP2 BSS 1 TEMP3 BSS 1 TYPE NOP SGTBA BSS 1 * END   91740-18057 1740 S C0122 DS/1000 MODULE: RTMGM              H0101 kqASMB,R,L,C RTMGM * NAME: RTMGM GEN. MAIN CONTROL FOR SEGMENTED GEN.-LOADER * SOURCE: 91740-18057 * RELOC: 91740-16057 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * HED RTE-M SYSTEM GENERATOR-LOADER * NAM RTMGM,8 91740-16057 REV 1740 770912 ***************** - HIGH CORE - ****************** * * * - IDENTS - * * * ************************************************** * - FIXUP TABLES - * * ---------- * * * * * * ------- * * - LST - * ************************************************** * * * * * PROGRAM LOADING CONTROL * * * * * ************************************************** * * * * I/O TABLE GENERATION * * * * ************************************************** * * * * * PARAMETER INPUT * * ,v * * * ************************************************** * * * SKP * * * LST FORMAT * * WORD 1: LST1 - NAME 1,2 * WORD 2: LST2 - NAME 3,4 * WORD 3: LST3 - NAME 5, ORDINAL * WORD 4: LST4 - IDENT ADDRESS * WORD 5: LST5 - BP LINK ADDRESS * * * * ENTERNS AND EXTERNS * EXT ATBUF,CM#LG,DO#ON,ENTPT,ER#OR,FIXUP EXT GENRT,GE#AL,GE#NA,GI#IT,GNFLG EXT GNSG1,GNSG2,GREAD,GTIME,IN#RR,INTER,LDSEG EXT LDSG3,LST1,LST4,LST5 EXT OUTON,PRCMD,PRIN1 EXT SAVE2,SEGFL,SP#CE,SYSTM,TBUF# EXT UNDEF,ZPRIV,ZRENT * * ENT RTLG1,RTMLC,RTMLI * CMFLG EQU CM#LG DOCON EQU DO#ON GETAL EQU GE#AL GETNA EQU GE#NA GINIT EQU GI#IT INERR EQU IN#RR READ EQU GREAD SPACE EQU SP#CE TBUF EQU TBUF# * * .MEM. TABLE DEFINITIONS * * .MEM1 = FWABP * .MEM2 = LWABP * .MEM3 = FWAM * .MEM4 = LWAM * .MEM5 = FWAC * .MEM6 = LWAC * SKP * * * ERROR CODES * * AD: INVALID ENTRY POINT * CH: INVALID CHANNEL NUMBER * DR: INVALID DRIVER NAME * DU: DUPLICATE PROGRAM NAME * EQ: INVALID EQT. NO. IN INT. RECORD * IN: PARAMETER INTERVAL EXECUTION ERROR * LU: INVALID DEVICE REFERENCE NUMBER * ON: INVALID ON PARAMETER * NA: PARAMETER NAME ERROR * PA: PARAMETER ERROR * PD: PARTITION ALREADY DEFINED * PR: PARAMETER PRIORITY ERROR * PS: NOT ENOUGH MEMORY LEFT FOR PARTITION * PT: PARTITION DEFINITION ERROR * SO: SYSTEM OVERFLOW * TB: SYMBOL TABLE/ID SEGMENT OVERFLOW * * SUP * SKP RTLG1 LDA P6 LOAD IN GENERATOR SEGMENT 1 LDSGA CLB STB SEGFL LAST SEGMENT FLAG JMP LDSEG LOAD IN SEGMENT * SKP * * * RTMLI CONTROLS THE LOADING OF THE SEGMENT WHILE * RTMLC CONTROLS THE EXECUTION OF THAT SEGMENT. * RTMLI LDA GNFLG WHERE GO FLAG (INITIALIZATION) SZA,RSS JMP DEDEV DEFINE OUTPUT DEVICES CPA RP1 JMP CENTS CHANGE ENTRIES CPA P2 JMP FIXI DO FIXUP CPA P3 JMP RESLB PUT IN ZPRIV ZRENT JMP SNAP2 PROCESS SNAP REQUEST SPC 5 RTMLC LDA GENRT WHERE GO FLAG CPA P1 JMP ENTRA CHANGE ENTRIES CPA P2 JMP FIXC DO FIXUP JMP RTMGR PUT IN ZPRIV ZRENT SKP * * DEFINE OUTPUT DEVICES * DEDEV CLA,INA STA GNFLG SET FOR CHANGE ENTRIES CLA,INA STA GENRT SET FOR CHANGE ENTS JSB SPACE OTPUT JSB INTER LDA P23 LDB MES31 *DEFINE OUTPUT DEVICES JSB PRIN1 JSB PRCMD CALL LOADER SUBCONTROL JMP OTPUT ERROR, REPEAT INPUT LDA OUTON ANY OUTPUT DEVICE DECLARED? SZA,RSS JMP ERROO NO, OUTPUT ERROR CLA,INA STA GNSG1 LDA P6 LOAD IN GEN SEGMENT 1 AND START JMP LDSGA EXECUTION AT SET TYPE OF SYSTEM * ERROO LDA OO ERROR MESSAGE CLB ERROR CODE JSB ER#OR JMP OTPUT * OO ASC 1,OO SKP * * CENTS LDA P2 STA GNFLG SET FOR FIXUP STA LDSG3 SET FOR PUTTING ENTRY IN LST LDA P3 JMP LDSGA LOAD IN LOADER SEGMENT 3 ENTRA LDA P2 STA GENRT SET FOR FIXUP LDA SYSTM RTE-M-I SYSTEM? CPA P1 JMP ENTRX YES LDB D$CLS ADDRESS OF ENTRY JSB ENTPT PUT IN LST LDA UDFE STA LST4,I SET TO UNDEFINED ISZ UNDEF DON'T OUTPUT AS UNDEF LDB D$RNT ADDRESS OF ENTRY JSB ENTPT PUT IN LST LDA UDFE STA LST4,I SET TO UNDEFINED ISZ UNDEF DON'T OUTPUT AS UNDEF * * CHANGE ENTRY POINTS * ENTRX JSB SPACE NEW LINE ENTRY JSB INTER INTERACTIVE INPUT LDA P14 LDB MES17 CHANGE ENTS? JSB READ PRINT MESSAGE, GET REPLY CLA STA CHRCT LDA N2 JSB GETNA GET FIRST 2 CHARACTERS CPA EN END? JMP END? YES,CHECK TO SEE IF NOT ENTRY ENTRI JSB GINIT REINITIALIZE INPUT CCA STA CMFLG ENTLN JSB GETAL GET NEXT CHARACTER CPA BLANK REACHED COMMA YET? JMP ENTFN YES ISZ CHRCT CHARACTER COUNTER JMP ENTLN ENTFN LDA N2 MOVE 2 CHARACTERS TO TBUF JSB GETNA CLB CPA RP MICROCODE REPLACEMENT? JMP RP1 YES CPA AB ABSOLUTE? JMP AB1 YES ENTER JSB INERR NEITHER MICROCODE RELACEMENT NOR ABSOLUTE JMP ENTRY ERROR, REPEAT INPUT RP1 INB AB1 ADB P3 STB TBUF+4 CCA STA CMFLG JSB GETAL GET NEXT CHAR. IN RESPONSE CPA BLANK REACHED COMMA YET? RSS JMP ENTER ERROR LDA BBLNK INITIALIZE TBUF STA TBUF WITH BLANKS STA TBUF+1 STA TBUF+2 LDA P6 SET FOR 6 OCTAL DIGITS INPUT JSB DOCON GET VALUE OF RP OR AB JMP ENTRY REPEAT INPUT STA TBUF+3 JSB GINIT BUFFER INITIALIZE LDA CHRCT GET NO. OF CHAR. IN ENTRY POINT CMA,INA JSB GETNA PUT ENTRY POINT IN TBUF LDA TBUF+2 IOR TBUF+4 STA TBUF+2 LDB ATBUF JSB ENTPT CLA STA GTIME JMP ENTRY GET NEXT CHANGE END? LDA N2 JSB GETNA GET NEXT 2 CHARACTERS CPA D D? RSS YES, DONE JMP ENTRI NO, MUST BE ENTRY POINT LDA P3 STA GNSG1 LDA P6 JMP LDSGA LOAD IN GEN SEG 1 SKP FIXI LDA P3 STA LDSG3 SET FOR PUTTING ENTRY IN LST JMP LDSGA LOAD IN LOADER SEGMENT 3 FIXC JSB FIXUP DO FIXUP FOR CLASS I O AND RESOURCE LDA P6 NUMBERS STA GNSG1 LOAD IN LOADER SEGMENT 2 JMP LDSGA SKP RESLB LDA P4 STA GNFLG SET FOR SNAP STA LDSG3 SET FOR PUTTING ENTRY IN LST LDA P3 JMP LDSGA LOAD IN LOADER SEGMENT 3 RTMGR LDA P4 STA GENRT SET FOR SNAP LDB .ZPRV PUT .ZPRV IN LST JSB ENTPT LDA LST1 SAVE LST ADDRESS STA ZPRIV LDA N4 STA LST5,I SET .ZPRV FOR MICROCODE LDA B2001 REPLACEMNT "RSS" STA LST4,I LDB .ZRNT PUT .ZRNT IN LST JSB ENTPT LDA LST1 SAVE LST ADDRESS STA ZRENT LDA N4 STA LST5,I SET .ZRNT FOR MICROCODE LDA B2001 REPLACEMENT "RSS" STA LST4,I LDB $SSGA JSB ENTPT PUT $SSGA IN LST CLA STA LST4,I SET ITS ADDRESS TO 0 LDA LST4 SAVE LST ADDRESS FOR FIXUP STA SAVE2 LDA P2 STA GNSG2 SET TO RELOCATE RESIDENT LIBRARY NEXT LDA P9 JMP LDSGA LOAD IN GEN SEG 2 SKP SNAP2 JSB INTER LDA P11 LDB MES09 * SNAPSHOT? JSB PRIN1 JSB PRCMD GO PROCESS SNAP REQUEST JMP SNAP2 ERROR, TRY AGAIN LDA P9 STA GNSG2 SET FOR SNAP RETURN JMP LDSGA LOAD IN GENERATOR SEGMENT 2 SKP * AB ASC 1,AB D ASC 1,D EN ASC 1,EN RP ASC 1,RP * B2001 OCT 2001 P1 DEC 1 P2 DEC 2 P3 DEC 3 P4 DEC 4 P6 DEC 6 P9 DEC 9 P11 DEC 11 P14 DEC 14 P23 DEC 23 N2 DEC -2 N4 DEC -4 * BBLNK OCT 20040 BLANK OCT 40 UDFE OCT 77777 * CHRCT NOP * D$CLS DEF $CLS $CLS ASC 3,$CLAS D$RNT DEF $RNTB $RNTB ASC 3,$RNTB $SSGA DEF *+1 ASC 3,$SSGA .ZPRV DEF *+1 ASC 3,.ZPRV .ZRNT DEF *+1 ASC 3,.ZRNT * MES09 DEF *+1 ASC 6,* SNAPSHOT? MES17 DEF *+1 ASC 7,* CHANGE ENTS? MES31 DEF *+1 ASC 12,* DEFINE OUTPUT DEVICES END SKP    91740-18058 1740 S C0122 DS/1000 MODULE: RTMGC              H0101 lgASMB,R,L,C RTMGC * NAME: RTMGC GENERATOR SUBROUTINES * SOURCE: 91740-18058 * RELOC: 91740-16058 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * HED RTE-M SYSTEM GENERATOR-LOADER NAM RTMGC,8 91740-16058 REV 1740 770912 * * A EQU 0 ***************** - HIGH CORE - ****************** * * * - IDENTS - * * * ************************************************** * - FIXUP TABLES - * * ---------- * * * * * * ------- * * - LST - * ************************************************** * * * * * PROGRAM LOADING CONTROL * * * * * ************************************************** * * * * I/O TABLE GENERATION * * * * ************************************************** * * * * * PARAMETER INPUT * *  * * * ************************************************** * * * SKP * * * LST FORMAT * * WORD 1: LST1 - NAME 1,2 * WORD 2: LST2 - NAME 3,4 * WORD 3: LST3 - NAME 5, ORDINAL * WORD 4: LST4 - IDENT ADDRESS * WORD 5: LST5 - BP LINK ADDRESS * * * * ENTERNS AND EXTERNS * * * * EXT ADDRS,ABRT1,ATBUF,BPLOC,CLBPL,CONSO,CRTIN EXT EKHOS,ER#OR,IDCB1,INACT,KONSO EXT LDSEG,LENGT,LNKDR,LST,.MEM2 EXT .MEM3,MLOCC,OPT.3 EXT PRCMD,PRINT,RDFL1,SEGFL EXT TBUF#,TYPRO,?XFER * ENT PNAMA,PNAME,PRAMS * ENT A$CIA,AINT#,ALBUF,BIDNT,BPFIX ENT CM#LG,CU#AL,CURAT ENT DO#ON,ELIB,GBUF,GENRT,GE#AL,GE#NA ENT GE#OC,GI#IT,GNFLG,GNSG1,GNSG2,GREAD ENT GTIME,IDNOS,IDS,IDSAD,IN#RR,INTER ENT IP1,IP2,IP3 ENT KEYCN,LSTSV,LWACG,LWAMG,LWGBP,LWSA1 ENT MATA,MAXPT,MPFT,MRMP ENT MSIZE,NMAX,OC#NO ENT PARNO,PCOM,PGLIB,PLIB,PP#EL,PRIN1,PRIN2,PROCT ENT RANAD,REL06 ENT RELOC,SAVE1,SAVE2,SG1AD ENT SP#CE,SSGAP,START,STRAD ENT STRPN,SYSAD,SYSTM,TB#HN,TCNT,WDCNT * LOCC EQU MLOCC TBUF EQU TBUF# * * * * .MEM. TABLE DEFINITIONS * * .MEM1 = FWABP * .MEM2 = LWABP * .MEM3 = FWAM * .MEM4 = LWAM * .MEM5 = FWAC * .MEM6 = LWAC * * * * ERROR CODES * * AD: INVALID ENTRY POINT * CH: INVALID CHANNEL NUMBER * DR: INVALID DRIVER NAME * DU: DUPLICATE PROGRAM NAME * EQ: INVALID EQT. NO. IN INT. RECORD * IN: PARAMETER INTERVAL EXECUTION ERROR * LU: INVALID DEVICE REFERENCE NUMBER * ON: INVALID ON PARAMETER * NA: PARAMETER NAME ERROR * PA: PARAMETER ERROR * PD: PARTITION ALREADY DEFINED * PR: PARAMETER PRIORITY ERROR * PS: NOT ENOUGH MEMORY LEFT FOR PARTITION * PT: PARTITION DEFINITION ERROR * SO: SYSTEM OVERFLOW * TB: SYMBOL TABLE/ID SEGMENT OVERFLOW * * SUP SKP * * THE SPACE SUBcROUTINE IS USED TO SPACE UP THE TELEPRINTER. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB SPACE * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * SPACE NOP CLA STA FTIME CLEAR FIRST TIME THRU FLAG LDB ZBUFF OUTPUT BLANK LINE CLA,INA JSB PRIN1 JMP SPACE,I RETURN * SP#CE EQU SPACE * ZBUFF DEF *+1 ASC 1,* * FTIME NOP FIRST TIME THRU FLAG GTIME EQU FTIME * * * A$CIA NOP ADDRESS OF $CIC ROUTINE AINT NOP ADDRESS OF INTERRUPT TABLE ELIB NOP ADDRESS AT END OF LIBRARY GENRT NOP INITIATOR FLAG GNFLG NOP CONTINUATOR FLAG GNSG1 NOP WHERE RETURN FLAG GNSG2 NOP WHERE RETURN FLAG IDNOS NOP ACTUAL IDS FILLED IDS NOP # OF ID SEGMENTS LEFT IDSAD NOP SEGMENT ADDRESS KEYCN NOP ADDRESS OF KEYWORD TABLE LWACG NOP LAST WORD OF AVAILABLE COMMON LWGBP NOP LAST WORD BP FOR JSB $CIC,I LWSA1 NOP LAST WORD SAM MATA NOP ADDRESS OF $MATA MAXPT NOP MAXIMUM NUMBER OF PARTITIONS MPFT NOP ADDRESS OF $MPFT MRMP NOP ADDRESS OF $MRMP MSIZE NOP MEMORY SIZE NMAX NOP - MAXIMUM NUMBER OF PARTITIONS PCOM NOP PRIV. DRIVERS ACCESS COMMON PGLIB NOP PAGE # AT END OF RES. LIB. PLIB NOP ADD. JUST PAST END OF LIB. PPREL NOP REL ADDRESS SAVE1 NOP ENPNT RETURN ADDRESS SAVE2 NOP ADDRESS OF LST4 FOR $SSGA SG1AD NOP SEGMENT 1 ADDRESS SSGAP NOP FWAM(START OF MEM RES PROG AREA) START NOP START-UP PROGRAM USED STRAD NOP $STRT START ADDRESS STRPN BSS 3 START-UP PROGRAM NAME SYSAD NOP ID SEGMENT ADDRESS SYSTM NOP SYSTEM TYPE TBCHN NOP TIME BASE GENERATOR CHANNEL * AINT# EQU AINT PP#EL EQU PPREL TB#HN EQU TBCHN SKP * ALBUF DEF LBEUF LBUF BSS 64 GBUF EQU LBUF * WDCNT NOP TEMPORARY WORD COUNTER * * HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** * THE DOCON SUBROUTINE ANALYZES THE INPUT FOR THE * CHANNEL NO., TBG CHANNEL NO., AND LAST * WORD OF AVAILABLE MEMORY. * * CALLING SEQUENCE: * A = MAX NO. OF CHARACTERS PERMITTED IN RESPONSE. * THE SIGN OF A DETERMINES THE CONVERSION FROM * ASCII TO OCTAL (POS.) OR DECIMAL (NEG.). * B = IGNORED * JSB DOCON * * RETURN: * (N+1): CONTENTS OF A AND B ARE DESTROYED. AN INVALID * CHARACTER HAS BEEN DETECTED IN THE RESPONSE, OR * THE RESPONSE CONTAINS AN INVALID NO. CHARACTERS. * THE MESSAGE IS TO BE REPEATED ON RETURN. * (N+2): A = CONVERTED RESULT * DOCON NOP JSB GETOC GET OCTAL/DECIMAL, RETURN OCTAL JMP *+4 INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP *+3 YES - CONTINUE JSB INERR INVALID DIGIT ENTRY JMP DOCON,I RETURN ISZ DOCON INCR RETURN ADDRESS LDA OCTNO GET CONVERTED NUMBER JMP DOCON,I RETURN * DO#ON EQU DOCON * ZERO DEC 0 * OCTNO NOP * OC#NO EQU OCTNO SKP * * SUBROUTINE TO RELOCATE ALL MODULES (SYSTEM AND USER PROGRAMS). * * CALLING SEQUENCE: * * A = MESSAGE LENGTH * B = MESSAGE ADDRESS * JSB RELOC * * RETURN: * (N+1): CONTENTS OF A AND B ARE DESTROYED. LOADER * WAS NOT ABLE TO RELOCATE MODULE (ERROR EXIT). * (N+2): CONTENTS OF A AND B DESTROYED. LOADER RELOCATION * WORKED. * * RELOC NOP JSB PRIN1 PRINT MESSAGE LDA P2 STA ?XFER NON-ZERO TO LOAD MODULES STA GNSG1 JSB CLBPL CLEAR BASE PAGE LINKS STA GNSG2 STA PNAME CLEAR NAME FLAG STA LOCC CLEAR LOCC IN LOADER STA BPLOC SAME FOR BPLOC STA OPT.3,I CLEAR FIXUP TABLE LENGTH TLDA LST,I SAVE LST LENGTH STA LSTCT LDA LSTSV RESTORE SYMBOL TABLE COUNT STA LST IN THE LOADER LDA RELOC,I GET MODULE TYPE STA TYPRO SAVE FOR LOADER SUB CONTROL SZA,RSS STA ?XFER ISZ RELOC SET RETURN ADDRESS JSB PRCMD GO RELOCATE MODULES JMP REL05 ERROR EXIT LDA .MEM2 SAVE LWABP STA BPFIX LDB LNKDR GET LINK DIRECTION FLAG CPB P1 USER LINKS ? JMP REL02 YES LDA LOCC UPDATE FWAM SZA,RSS LDA .MEM3 STA .MEM3 LDA BPLOC UPDATE FWABP SZA STA .MEM2 SYSTEM LINKS, UPDATE LWABP LDA LST STA LSTSV SAVE FOR RELOCATION ERROR REL03 ISZ RELOC REL05 CLA STA SEGFL LAST SEGMENT FLAG LDA B6 LDB TYPRO CPB B1 RSS ADA B3 JMP LDSEG REL06 JMP RELOC,I * REL02 LDA LSTCT RESTORE LST LENGTH STA LST,I JMP REL03 * BPFIX NOP LWABP TEMP STORE LSTCT NOP LST LENGTH LSTSV NOP * B1 OCT 1 B3 OCT 3 B6 OCT 6 P1 DEC 1 P2 DEC 2 SKP * SUBROUTINE TO OUTPUT MESSAGE * PRIN2 NOP JSB PRINT GO OUTPUT MESSAGE LDA LENGT LDB ADDRS JSB EKHOS GO ECHO IF NEEDED JMP PRIN2,I * * SUBROUTINE TO OUTPUT MESSAGE ONLY IF ECHO, INTERACTIVE * INPUT, OR SESSION CONSOLE NEEDED OR USED. * PRIN1 NOP STA LENGT MESSAGE LENGTH LDA CONSO OUTPUT TO SESSION CONSOLE? SZA JMP PRINA YES LDA INACT INTERACTIVE INPUT? SZA JMP PRINA YES LDA READX OUTPUT TO SESSION CONSOLE? SZA,RSS JMP PRINB NO, JUST ECHO IF NEEDED PRINA LDA LENGT JSB PRINT GO OUUTPUT MESSAGE LDB ADDRS PRINB LDA LENGT JSB EKHOS GO ECHO IF NEEDED JMP PRIN1,I * * THE INERR SUBROUTINE PRINTS THE DIAGNOSTIC FOR INVALID #* RESPONSES DURING THE INITIALIZATION SECTION. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INERR * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * INERR NOP LDA PA SET INVALID DEVICE ERROR CODE CLB NO FMP ERROR JSB ER#OR PRINT ERROR MESSAGE JMP INERR,I RETURN * PA ASC 1,PA PARAMETER ERROR * IN#RR EQU INERR SKP HED READ INPUT FILES * * * SUBROUTINE TO READ INPUT FILES * * CALLING SEQUENCE * * A = MESSAGE LENGTH * B = MESSAGE ADDRESS * JSB READ * * RETURN: * A = DATA LENGTH * B = DESTROYED * * * READ NOP JSB PRIN1 PRINT MESSAGE READ2 LDB ALBUF DATA INPUT ADDRESS LDA CONSO GET INPUT FROM SESSION CONSOLE? SZA JMP READ1 YES LDA READX INTERACTIVE INPUT? SZA JMP READ1 NO, GET INPUT FROM SYSTEM CONSOLE LDA DCB1 DCB BUFFER ADDRESS JSB RDFL1 READ FROM INPUT FILE CPA N1 END OF FILE? JMP READA YES, GET NEXT INPUT FROM CONSOLE READ3 STA PARNO SAVE DATA LENGTH INA PUT ZERO AT END OF CLE,ERA DATA BUFFER ADA ALBUF CLB STB A,I JSB GINIT INITIALIZE INPUT LDA ALBUF,I CHECK IF FIRST CHARACTER CPA EX EXIT? JMP ABRT1 YES ALF,ALF IS AN ASTERISK AND B177 CPA B52 JMP READ2 YES, READ NEXT RECORD LDB ALBUF DATA ADDRESS LDA PARNO DATA BUFFER JSB EKHOS CHECK IF ECHO NEEDED LDA PARNO RETURN WITH DATA LENGTH IN A REG. JMP READ,I * READ1 CLA,INA LDB PRPTA JSB PRIN2 LDA P72 LDB ALBUF JSB CRTIN JMP READ3 * READA CLA,INA STA CONSO STA KONSO JMP READ1 * DCB1 DEF IDCB1 * PARNO NOP PARAMETER RECORD LENGTH READX NOP INTERACTIVE INPUT 0=YES, 1=NO * B52 OCT 52 B177 OCT 177 N1 DEC -1 P72 DEC 72 * EX ASC 1,EX * GREAD EQU READ * PRPTA DEF *+1 ASC 1,- HED RTMGN I/O TABLE GENERATION SUBROUTINES * * THE FOLLOWING SUBROUTINE SUPPLIES THE CHARACTERS FOR * GETNA AND GETOC. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB GETAL * * RETURN: * A = CURRENT CHARACTER * B = DESTROYED * GETAL NOP LDA CMFLG CMFLG = COMMA-IN FLAG SZA,RSS SKIP IF NO COMMA IN JMP BLRET RETURN BLANK LDB BUFUL GET U/L FLAG IGNOR LDA CURAL,I GET CHAR FROM LBUF SZB SKIP IF LOWER CHAR ALF,ALF ROTATE TO LOWER AND B377 ISOLATE LOWER CHAR CPA ZERO END OF BUFFER? JMP GETAL,I YES - RETURN WITH ZERO CMB,SZB RESET U/L, SKIP IF UPPER CHAR ISZ CURAL INCR LBUF ADDRESS CPA BLANK CHAR = BLANK? JMP IGNOR IGNORE BLANKS STB BUFUL SAVE U/L FLAG CPA B54 CHAR = COMMA? ISZ CMFLG RESET FLAG TO SHOW COMMA IN JMP GETAL,I RETURN WITH NON-BLANK CHAR BLRET LDA BLANK REPLACE WITH BLANK CHAR JMP GETAL,I RETURN WITH BLANK * BLANK OCT 40 B54 OCT 54 B377 OCT 377 BUFUL NOP BUFFER U/L FLAG CMFLG NOP COMMA-IN FLAG CURAL NOP * CM#LG EQU CMFLG CU#AL EQU CURAL GE#AL EQU GETAL SKP * * THE FOLLOWING SUBROUTINE MOVES THE CHARACTERS FROM LBUF * TO TBUF. * * CALLING SEQUENCE: * A = MAX. NO. OF CHARACTERS TO BE MOVED. THE SIGN OF A * DESIGNATES THE POSITION OF THE FIRST CHARACTER. * IF THE SIGN OF A IS POSITIVE, THE FIRST CHAR. IS TO * BE MOVED TO THE LOW CHAR IN TBUF. IF A IS NEGATIVE, THE * FIRST CHARACTER IS TO BE MOVED TO THE UPPER CHAR IN TBUF. * B = IGNORED * JSB GETNA * * RETURN: * A = FIRST CHARACTER (IF ONLY 1 CHARACTER) OR FIRST 2 CHARS * MOVED. * B = DESTROYED * GETNA NOP cM CCE,SSA,RSS SET E = 1 (EVEN) POSITION CMA,CLE,INA SET E = 0 (ODD) POSITION - COMP STA MAXC MAXC = MAXIMUM NO. OF CHARACTERS LDA ATBUF ATBUF = ADDR OF TBUF STA CURAT SET CURRENT TBUF ADDRESS CLB STB TBUF CLEAR WORD 1 OF TBUF CCA STA CMFLG SET COMMA-IN FLAG SEZ,RSS SKIP - ODD POSITION JMP OCHAR BEGIN WITH ODD CHARACTER NEXTC JSB GETAL GET CHAR FROM LBUF CPA ZERO END OF BUFFER? LDA BLANK YES - REPLACE CHAR WITH BLANK ALF,ALF ROTATE TO UPPER A STA CURAT,I SET CHARACTER IN TBUF ISZ MAXC CHECK FOR ALL CHARS IN JMP OCHAR GET ODD CHAR FROM LBUF LDA TBUF GET FIRST 2 TRANSFERRED CHARS JMP GETNA,I YES - RETURN OCHAR JSB GETAL GET CHAR FROM LBUF CPA ZERO END OF BUFFER? LDA BLANK REPLACE ZERO CHAR WITH BLANK IOR CURAT,I ADD TO UPPER CHAR IN TBUF STA CURAT,I SET CHARS IN TBUF ISZ CURAT INCR TBUF ADDRESS ISZ MAXC CHECK FOR ALL CHARS IN JMP NEXTC NO - TRY NEXT UPPER CHAR LDA TBUF GET FIRST 2 TRANSFERRED CHARS JMP GETNA,I RETURN * GE#NA EQU GETNA * CURAT NOP CURRENT TBUF ADDRESS MAXC NOP MAX CHARACTER COUNT SKP PNAMA DEF PNAME PNAME NOP REP 5 NOP PRAMS DEC 3 DEC 9999 REP 6 NOP SKP SKP * * THE GETOC SUBROUTINE CONVERTS THE NEXT CHARACTERS IN LBUF FROM * ASCII (DECIMAL OR OCTAL) TO THEIR BINARY VALUE. * * CALLING SEQUENCE: * A = MAX. NO. OF CHARS IN CONVERSION REQUEST. IF A IS * POSITIVE, THE REQUEST IS FOR OCTAL; IF A IS NEGATIVE, * THE REQUEST IS FOR DECIMAL. * B = IGNORED * JSB GETOC * * RETURN: * (N+1): INVALID DIGIT OR OVERFLOW IN CONVERSION * (N+2): A = CONVERTED NO. * B = DESTROYED * GETOC NOP LDB N8 GET OCTAL RANGE SSA  SKIP IF OCTAL REQUEST LDB N10 GET DECIMAL RANGE STB DRANG SET DIGIT RANGE SSA,RSS SKIP IF DECIMAL REQUEST CMA,INA SET REQUEST COUNT TO NEGATIVE STA MAXC SET MAX NO. OF DIGITS CCA STA DIFLG SET DATA-IN FLAG = NO DATA IN STA CMFLG SET COMMA-IN FLAG CLA STA OCTNO OCTNO = OCTAL NUMBER GETNX JSB GETAL GET CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP ENDOC YES - RETURN CPA BLANK CHAR = BLANK? (COMMA IN) JMP ENDOC YES - RETURN ADA M60 SUBTRACT 60B FROM CHAR STA TCHAR SAVE CHAR SSA SKIP IF VALID LOWER LIMIT JMP DGERR INVALID DIGIT ADA DRANG ADD DIGIT RANGE CLE,SSA,RSS CLEAR E - SKIP IF VALID DIGIT JMP DGERR INVALID DIGIT ISZ DIFLG INCR DATA-IN FLAG, SKIP NOP LDA OCTNO GET PREVIOUS OCTAL NO. ADA A SET A = OCTNO X 2 ADA A SET A = OCTNO X 4 LDB DRANG GET DIGIT RANGE CPB N10 RANGE = DECIMAL? ADA OCTNO SET A = OCTNO X 5 ADA A SET A = OCTNO X 10/8 ADA TCHAR SET A = NEW OCTAL NO. STA OCTNO SAVE NEW OCTAL NO. SEZ TEST FOR OVERFLOW JMP DGERR INVALID NO. ISZ MAXC SKIP IF ALL DIGITS PROCESSED JMP GETNX GET NEXT DECIMAL DIGIT ISZ GETOC INCR RETURN ADDRESS LDA OCTNO GET OCTAL EQUIVALENT DGERR JMP GETOC,I RETURN ENDOC ISZ DIFLG SKIP - NO DATA IN JMP *-4 DATA IN - NORMAL RETURN JMP GETOC,I RETURN - ERROR * GE#OC EQU GETOC * DIFLG NOP DATA IN FLAG = -1/0 = NOT IN/IN DRANG NOP DIGIT RANGE TCHAR NOP TEMPORARY CHARACTER SAVE AREA * M60 OCT -60 N8 DEC -8 N10 DEC -10 PROCT NOP NO. OF INTERRUPT ENTRIES * LWAMG NOP BIDNT NOP ADDRESS OF FIRSTK <:6 IDENT IP1 NOP IP2 NOP IP3 NOP * * * INITIALIZE CHAR TRANSFER * * THE GINIT SUBROUTINE SETS THE CURRENT ADDRESS AND UPPER/LOWER * FLAG FOR SCANNING LBUF. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB GINIT * * RETURN : CONTENTS OF A AND B ARE DESTROYED * GINIT NOP LDA ALBUF ALBUF = ADDR OF LBUF STA CURAL SET CURRENT LBUF ADDRESS CCB STB BUFUL BUFUL = BUFFER U/L FLAG JMP GINIT,I RETURN * GI#IT EQU GINIT * SKP * RANAD NOP POWER RANGE ADDRESS TCNT NOP CURRENT TBUF COUNT * * * SUBRROUTINE TO DETERMINE IF INPUT DEVICE IS INTERACTIVE * * INTER NOP CLA STA READX SET FOR INTERACTIVE INPUT LDA FTIME FIRST TIME FLAG SZA JMP INT1 NOT FIRST TIME CLA,INA FIRST TIME, SET FLAG STA FTIME JMP INTER,I INT1 LDA INACT INPUT INTERACTIVE? CPA P1 JMP INTER,I YES, RETURN ISZ READX JMP INTER,I * SKP END <  91740-18059 1740 S C0122 DS/1000 MODULE: IDCBO              H0101 X`ASMB,R,L,C * NAME: IDCB0 * SOURCE: 91740-18059 * RELOC: 91740-16059 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM IDCB0,8 91740-16059 REV 1740 770727 * * * THE FOLLOWING ARE SEVEN DATA CONTROL BLOCKS(DCBS). * * THE DCB IS AN ARRAY PROVIDED BY THE USER PROGRAM WITH ONE * DCB REQUIRED FOR EACH FILE OPENED. ONCE A FILE IS OPEN, THE * DCB IS USED TO REFERENCE THE FILE, THE NAME NO LONGER BEING * NEEDED, OR USED. THE DCB INCLUDES A 16-WORD DIRECTORY * AREA AND A BUFFER AREA THAT IS USED FOR DATA TRANSFERS. THE * DCB BUFFER CONTAINS A MULTIPLE OF 128 WORDS. * * * ENT IDCB1,IDCB2,IDCB3,IDCB4,IDCB5,IDCB6,IDCB7 IDCB1 BSS 144 IDCB2 BSS 144 IDCB3 BSS 144 IDCB4 BSS 144 IDCB5 BSS 144 IDCB6 BSS 144 IDCB7 BSS 144 END W  91740-18060 1740 S C0122 DS/1000 MODULE: IMESS              H0101 igASMB,R,L,C * NAME: IMESS * SOURCE: 91740-18060 * RELOC: 91740-16060 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM IMESS,8 91740-16060 REV 1740 760628 * * IMESS READS/WRITES TO THE CONSOLE FROM WHICH THE PROGRAM * WAS SCHEDULED. IF NOT SCHEDULED BY OPERATOR, LU 1 IS USED. * AFTER DETERMINING THE CORRECT LU (FROM $CON) THIS CALL MAPS * DIRECTLY INTO AN EXEC READ/WRITE CALL. * * * CALLING SEQUENCE: * JSB IMESS * DEF RETURN * DEF IO 1=READ/2=WRITE * DEF BUFAD BUFFER ADDRESS * DEF COUNT BUFFER LENGTH * * ON RETURN A AND B ARE AS EXEC LEFT THEM * EXT .ENTR,EXEC,$CON * ENT IMESS * IO NOP BUFAD NOP CCNT NOP * * IMESS NOP JSB .ENTR DEF IO * LDA $CON,I AND B77 ISOLATE LU IOR ECHO STA LU * * JSB EXEC DEF MESSR DEF IO,I DEF LU DEF BUFAD,I DEF CCNT,I * MESSR JMP IMESS,I * ECHO OCT 400 LU NOP B77 OCT 77 END * <  91740-18061 1740 S C0122 DS/1000 MODULE: $CON              H0101 [ASMB,R,L,C * NAME: $CON * SOURCE: 91740-18061 * RELOC: 91740-16061 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM $CON,8 91740-16061 REV 1740 770310 ENT $CON $CON DEF .1 .1 DEC 1 DEFAULT SESSION CONSOLE END   91740-18062 1805 S C0122 DS/1000 MODULE: DTTY              H0101 tDASMB,R,L,C * NAME: DTTY * SOURCE: 91740-18062 * RELOC: 91740-16062 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM DTTY,8 91740-16062 REV 1805 771118 * * DTTY DETERMINE IF THE REFERENCED LU IS ASSOCIATED * WITH AN INTERACTIVE DEVICE (DVR00 OR DVR05 SUB 0). * [MODIFIED NOV 18, 1977, TO CHECK FOR DVR07 SUB 0. DMT] * * DTTY CALLING SEQUENCE: * * LDA LU OF DEVICE TO BE CHECKED * JSB DTTY * * * RETURN * * A=0 IF NOT INTERACTIVE * A#0 IF INTERACTIVE * * * EXT EXEC ENT DTTY * * * DTTY NOP SSA CMA,INA STA LU * JSB EXEC REQUEST STATUS DEF RT1 DEF .13 DEF LU DEF EQ5 DEF EQ4 DEF SPC * * RT1 LDA EQ5 CHECK FOR DVR00 AND TYPE SZA,RSS JMP GOOD YEP--TAKE GOOD EXIT * CPA B2400 CHECK FOR DVR05 JMP SBCNL YEP--GO CHECK FOR SUB CHNL 0 CPA B3400 CHECK FOR DVR07 JMP SBCNL YEP--GO CHECK FOR SUB CHNL 0 * BAD CLA TAKE FALSE EXIT JMP DTTY,I * SBCNL LDA SPC FETCH SUB CHNL AND B77 SZA JMP BAD NOT ZERO GOOD CLA,INA ALL RIGHT--TAKE INTERACTIVE EXIT JMP DTTY,I * * * * SPC NOP .13 DEC 13 EQ5 NOP EQ4 NOP LU NOP TYPE OCT 37400 B2400 OCT 2400 B3400 OCT 3400 B77 OCT 77 * END * "C    91740-18063 1740 S C0122 DS/1000 MODULE: SG#LD              H0101 f9ASMB,R,L,C SG#LD * NAME: SG#LD * SOURCE: 91740-18063 * RELOC: 91740-16063 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM SG#LD,8 91740-16063 REV 1740 770911 * * * * ENTRY POINT NAMES * ENT SG#LD * * * EXTERNAL REFERENCE NAMES * EXT .ENTR,EXEC * * * THIS SUBROUTINE LOADS A SEGMENT OF A PROGRAM * AND TRANSFERS EXECUTION CONTROL TO THE SEGMENT'S * ENTRY POINT. * * SKP SG#LD NOP LDA DZERO STA NAMR STA IERR LDA SG#LD STA DEGLD JMP ENTD * NAMR DEF ZERO IERR DEF ZERO * DEGLD NOP ENTD JSB .ENTR DEF NAMR JSB EXEC MAKE EXEC CALL TO LOAD SEGMENT DEF *+3 RETURN ADDRESS (DOES NOT RETURN HERE) DEF D8 REQUEST CODE DEF NAMR,I SEGMENT'S NAME * * D8 DEC 8 DZERO DEF ZERO ZERO NOP END k  91740-18068 1740 S C0122 DS/1000 MODULE: D$EQT              H0101 ASMB,R,L NAM D$EQT,30 91740-16068 REV 1740 770623 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ******************************************************************* SPC 2 ENT D$EQT,D$XS5 * * D$EQT * SOURCE: 91740-18068 * BINARY: 91740-16068 * D$EQT NOP D$XS5 EQU D$EQT END   91740-18069 1740 S C0122 DS/1000 MODULE: SEGLD              H0101 7ASMB,R,L,C,Z * NAME: SEGLD * SOURCE: 92064-18175 * RELOC: 92064-16058 'N' ASSEMBLY OPTION: STANDARD RTE * RELOC: 91740-16069 'Z' ASSEMBLY OPTION: DS/1000 * PGMR: G.L.M.,C.E.J. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * IFN NAM SEGLD,7 92064-16058 REV 1740 770912 XIF IFZ NAM SEGLD,7 91740-16069 REV 1740 770912 XIF * * ENT SEGLD * EXT .ENTR,.MVW,$LIBR,$LIBX IFZ EXT DOPEN,DREAD,DCLOS XIF IFN EXT OPEN,READF,CLOSE DOPEN EQU OPEN DREAD EQU READF DCLOS EQU CLOSE XIF SUP * * SEGLD NOP STB XB SAVE B REGISTER IN CASE NO PARMS PASSED LDA WD5A RESET TRAILER RECORDS STA SPCAD POINTER. * LDA DZERO STA NAMR RESET PARMS STA IERR STA XT1 STA XT2 STA XT3 STA XT4 STA XT5 IFZ STA NODE XIF CLA STA SPCNT ZERO SPECIAL RECORD COUNT IFZ CMA STA DNODE RESET LOCAL DEFAULT FOR DS NODE XIF LDA SEGLD STA DEGLD SET PARM ADDR FOR .ENTR JMP ENTD GO GET PARMS * * NAMR DEF ZERO IERR DEF ZERO XT1 DEF ZERO XT2 DEF ZERO XT3 DEF ZERO XT4 DEF ZERO XT5 DEF ZERO IFZ NODE DEF ZERO XIF * DEGLD NOP DUMMY ENTRY POINT ENTD JSB .ENTR FETCH DEF NAMR CALL PARMS * LDA NAMR MUST HAVE CPA DZERO NAME PARM. JMP PERR ELSE--EXIT -10 IFZ * * SET UP DESTINATION NODE PARAMETER FO9R DS CALLS * LDA NODE DESTINATION NODE CPA DZERO GIVEN? JMP L.0 NO--DEFAULT IS LOCAL NODE LDA A,I YES--FETCH PARAMETER STA DNODE AND SAVE IT IN TWO WORD CRN XIF * * * IF NO TEMPS -- MOVE ID TMPS TO LOCAL BUFFER * ELSE MOVE TEMPS INTO LOCAL BUFFER * * * L.0 LDA XT1 FETCH 1ST PARAMETER ADDRESS CPA DZERO ANYTHING PASSED? JMP NOPAR NOPE--NOTHING PASSED * LDA N5 SETUP TO STA LMAIN MOVE 5 PARMS INTO LDA XDEF LOCAL BUFFER STA HMAIN * L.1 LDA HMAIN,I FETCH PARAMETER ADDRESS LDA A,I FETCH PARAMETER STA HMAIN,I SAVE IT LOCALLY * * ISZ HMAIN BUMP PARAMETER ADDRESS POINTER ISZ LMAIN ALL FIVE DONE? JMP L.1 NOPE CONTINUE * LDA XEQT FETCH ID ADDRESS INA ADVANCE TO TEMP ADDRESS STA XB SET AS B FOR SEGMENT ENTRY * * * * * * FETCH PROGRAM LIMITS * PLIM LDA XEQT FETCH ADA .22 HIGH-LOW LDB DHILO VALUES FOR JSB .MVW MAIN AND DEF .4 BASE PAGE * NOP * STA W27 SAVE FOR HIGH SEG ADDR * * OPEN FILE CONTAINING * REQUESTED SEGMENT * JSB DOPEN DEF RTO DEF SGDCB DEF ERRS DEF NAMR,I DEF OPENO FORCE TO BINARY IFZ DEF ZERO DEF CRN 2ND WORD IS DESTINATION NODE XIF * RTO LDA ERRS FETCH ERROR RETURN SSA JMP SGERR OPEN ERROR * SPC 5 * * READ ABSOLUTE RECORD * RDF0 JSB DREAD READ DEF RTR DEF SGDCB THRU SEGLD'S DCB DEF ERRS DEF IBUF INTO IBUF DEF .64 MAX RECORD LEGNTH DEF LEN ACTUAL READ LEGNTH RETURNED HERE * RTR SSA ERROR CODE RETURNEeD IN (A) JMP SGERR GOT AN ERROR --EXIT * * CHECK FOR EOF * LDA LEN FETCH LEGNTH WORD SSA SEE IF NEG (EOF?) JMP EOF GOT EOF-GO DO EOF THING * * DO CHECKSUM * LDA IBUF FETCH 1ST WORD AND LHALF ISOLATE ABS SIZE ALF,ALF GET TO LOW END STA ABSSZ SAVE ABS SIZE * * * CALCULATE AND SAVE RECORD HIGH ADDRESS * * CCB REC SIZE ADB A MINUS 1 ADB WD2 PLUS LOAD ADDRESS STB RECSZ EQUALS HIGH ADDRESS. * * CMA,INA NEGATE STA MTMP1 SAVE FOR CHECKSUM LDB WD2 FETCH WD2 AND ADDR LDA WD3A OF WORD 3 STA TMP2 * CKSM1 LDA TMP2,I FETCH NEXT WORD ADB A ADD TO CHECKSUM ISZ TMP2 BUMP WORD POINTER ISZ MTMP1 BUMP COUNT--DONE? JMP CKSM1 NO--CONTINUE * * LDA TMP2,I FETCH CHECKSUM WORD CPA B COMPARE TO CALCULATED VALUE JMP CKOK IT'S OK * SPC 3 * LDA N28 CKSUM ERROR CODE RSS BNDER LDA N27 BOUNDS ERROR RSS PERR LDA N10 PARAMETER ERROR SGERR STA IERR,I SET ERROR CODE * JSB DCLOS GO CLOSE IF OPEN DEF CEX DEF SGDCB DEF ERRS * CEX LDA IERR,I SET A= ERROR CODE FOR RETURN JMP DEGLD,I EXIT SPC 2 N27 DEC -27 N28 DEC -28 * * SEE WHERE RECORD GOES * CKOK LDA WD2 FETCH ADDR OF RECORD CPA .2 JMP SPC MIGHT BE SPEC REC * BPLNK AND BPMSK CHECK FOR BASE PAGE CPA WD2 JMP BPR YEP- IT'S A BASE PAGE RECORD * DLD LMAIN --MAIN MEMORY RECORD-FETCH JMP CKB BOUNDS * BPR DLD LBASE FETCH BP BOUNDS * CKB JSB CKBND GO SEE IF RECORD IS WITHIN BOUNDS JMP BNDER BOUNDS ERROR * * * * COPY ABS TO MEMORY * * LDA WD3A  FETCH ADDR OF WD3(FW OF CODE) LDB WD2 ACTUAL LOAD ADDR JSB PMOVE GO PRIV AND MOVE CODE IN ABSSZ NOP JMP RDF0 GO GET NEXT RECORD * * SPC 3 * * MOVE THE ID TEMPS INTO LOCAL BUFFER * * NOPAR LDA XEQT ID SEG ADDRESS INA ADVANCE TO TEMP AREA LDB XDEF LOCAL BUFFER ADDRESS JSB .MVW MOVE THEM IN DEF .5 ALL FIVE OF THEM NOP JMP PLIM CONTINE WITH PROGRAM LIMITS * * SPC CPA ABSSZ IF LEN=2 RSS THEN ITS A SPECIAL JMP BPR ---NO, MUST BE A LINK * DLD WD3 FETCH TRAILER RECORDS DST SPCAD,I SAVE IN INPUT BUFFER ISZ SPCAD ISZ SPCAD BUMP POINTER FOR NEXT SPEC REC ISZ SPCNT AND SPECIAL RECORD COUNT JMP RDF0 FETCH NEXT RECORD SPC 3 * * GOT AN EOF * EOF LDA N39 RELOCATABLE INPUT ERROR LDB SPCNT CPB .10 RSS JMP SGERR MUST HAVE SEEN 10 SPECIAL RECORDS * * * LDA ID27 LOCATION OF SEG HIGH ADDR(SPC REC) LDB W27 ID SEGMENT WD 27 ADDRESS JSB PMOVE GO SETIT .1 OCT 1 * JSB DCLOS DEF CRTN DEF SGDCB CLOSE SEG FILE BEFORE ENTERING THE UNKNOWN! DEF ERRS * * * * MOVE THE PARAMETERS INTO THE ID SEGMENT * * THE PARAMETERS ARE: 1) FIVE TEMPS PASSED IN CALL (B=ID TEMP AREA) * OR 2) FIVE TEMPS FROM ID IF NOTHING PASSED * B IS NOT CHANGED. * * * CRTN LDA XDEF ADDRESS OF PARAMETERS LDB XEQT IDSEG ADDRESS INB ADVANCE TO TEMP AREA * * GO PRIV AND MOVE THEM IN * JSB PMOVE .5 OCT 5 * * LDB XB IF NO PARMS B=ORIG VALUE * ELSE B=ID TEMP ADDRESS * LDA XEQT SET A=ID SEG ADDRESS JMP WD4,I ENTER SEGMENT SPC 3 * * CKBND NOP CMA,INA ADA WD2 7 SSA JMP CKBND,I * CMB,INB ADB RECSZ SSB ISZ CKBND JMP CKBND,I * * * ROUTINE TO MOVE WORDS IN PRIVELEDGED MODE * PMOVE NOP JSB $LIBR NOP JSB .MVW DEF PMOVE,I NOP ISZ PMOVE JSB $LIBX DEF PMOVE * * * SKP * .2 DEC 2 .4 DEC 4 .10 DEC 10 .22 DEC 22 .64 DEC 64 N5 DEC -5 N10 DEC -10 N39 DEC -39 IBUF BSS 64 * ZERO NOP IFZ DNODE DEC -1 CRN EQU ZERO XIF DZERO DEF ZERO XDEF DEF XT1 XB NOP * DHILO DEF LMAIN LMAIN NOP HMAIN NOP LBASE NOP HBASE NOP DON'T CHANGE ABOVE ORDER * SPCAD NOP MTMP1 EQU SEGLD W27 NOP ERRS NOP OPENO OCT 110 FORCE TO BINARY LEN NOP LHALF OCT 177400 WD2 EQU IBUF+1 WD3 EQU IBUF+2 WD4 EQU IBUF+3 WD3A DEF IBUF+2 WD5A DEF IBUF+4 TMP2 NOP BPMSK OCT 1777 ID27 DEF IBUF+17 NEED ADDRESS TO SET SEG HIGH RECSZ NOP SPCNT NOP * IFN SGDCB BSS 144 XIF IFZ SGDCB BSS 4 XIF * * XEQT EQU 1717B A EQU 0 B EQU 1 PLEN EQU * END u   91740-18070 1805 S C0122 DS/1000 MODULE: SGPRP              H0101 ^ASMB,L,C,R RTE-M SEGMENTED PROGRAM PREPARATION PROGRAM * * NAME: RTE-M SGPRP * SOURCE: 91740-18070 * RELOC: 91740-16070 * PROGMR: E.J.W.,C.E.J. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * * TO INITIATE SGPRP: * *RU,SGPRP,FI,LN,MN * OR * *RU,SGPRP,LU * WHERE: * FILNMN IS AN ASCII ANSWER FILE CONTAINING THE NAMR OF THE MAIN * PROGRAM'S FILE AS THE FIRST RECORD, FOLLOWED BY THE * SEGMENT(S)' NAMR(S) IN CONSECUTIVE RECORDS, ENDING WITH * AN "/E". * * LU IS THE LOGICAL UNIT NUMBER OF THE DEVICE FROM WHICH SGPRP * IS TO TAKE DATA. * * THE DEFAULT VALUE FOR THE PARAMETER IS LU # 1 (SYSTEM CONSOLE). * * NAM SGPRP,3,90 91740-16070 REV 1805 771118 EXT $LIBR,$LIBX,EXEC,$CVT1,$CVT3,$PARS EXT OPEN,READF,WRITF,CLOSE,POSNT * A EQU 0 B EQU 1 * * SGPRP NOP CLA STA PRMPT STA INLU LDA B,I GET INPUT PARAMETER CMA,INA LU OR FILE NAME? ADA B77 SSA JMP FILE FILE--GO MOVE NAME INTO STORAGE * LDA B,I LU--RESET A REG. SZA,RSS DEFAULTED? LDA D1 YES--GET DEFAULT LU STA INLU AND SAVE FOR INPUT RETRIEVAL * JSB EXEC SEE IF DEVICE IS INTERACTIVE DEF *+1+6 DEF D13 DEF INLU DEF DVR DEF TEMP DEF SUB LDA DVR DVR00, DVR05 SUB. 0, AND DVR07 SUB. 0 ALF,ALF ARE DRIVERS FOR INTERACTIVE DEVICES AND B77 SZA,RSS JMP SETPM I- CPA D5 JMP SUB? CPA D7 JMP SUB? JMP BEGIN SUB? LDA SUB AND B37 SZA JMP BEGIN SETPM ISZ PRMPT IF INTERACTIVE--SET PROMPT FLAG LDA INLU IOR B400 AND ECHO BIT IN LU STA INLU JMP BEGIN * FILE LDA .FLNM MOVE FILE NAME INTO LOCAL STORAGE SWP MVW D3 * JSB OPEN OPEN THE FILE DEF *+1+3 DEF IDCB1 DEF ERR .FLNM DEF FILNM IGNORE ERRORS ON THIS FILE * JSB READF READ FILE NAME OF MAIN DEF *+1+5 AND SAVE FOR MUCH LATER. DEF IDCB1 DEF ERR DEF MBUF DEF D10 DEF MLEN JMP SEGMT * BEGIN LDA PRMPT SEE IF LU INTERACTIVE SZA,RSS JMP RMAIN JSB EXEC IF SO--WRITE "SGPRP STARTED" DEF *+1+4 DEF D2 DEF INLU DEF MESS1 DEF D7 JSB EXEC AND PROMPT "MAIN PROGRAM NAME?" DEF *+1+4 DEF D2 DEF INLU DEF ASKMP DEF D10 * RMAIN JSB EXEC READ FILE NAME OF MAIN DEF *+1+4 AND SAVE FOR MUCH LATER. DEF D1 DEF INLU DEF MBUF DEF D10 STB MLEN * SEGMT CLA CLEAR OUT WORDS TO SAVE STA HMAIN HIGHEST MAIN AND HIGHEST BASE PAGE STA HBASE LOCATIONS USED BY ANY SEGMENT * NXSEG LDA INLU INPUT FROM FILE OR LU? SZA JMP NXLU LU--BRANCH AROUND * JSB READF FILE--READ SEGMENT NAME DEF *+1+5 DEF IDCB1 DEF ERR DEF IBUF DEF D10 DEF LEN JMP OPSEG * NXLU LDA PRMPT LU INTERACTIVE? SZA,RSS JMP NXLU2 NO--BRANCH AROUND WRITE JSB EXEC YES--PROMPT "/E OR SEGMENT NAME?" DEF *+1+4 DEF D2 DEF INLU DEF ASKSG DEF MD21 * NXLU2 JSB EXEC READ SEGMENT NAME DEF *+1+4 DEF D1 DEF INLU DEF IBUF DEF D10 STB LEN * OPSEG LDA DIBUF (A)=INPUT STRING ADDR LDB LEN (B)=WORD LENGTH OF INPUT STRING JSB PARSE PARSE INTO FNAME, SC, AND CR COMPONENTS LDA FNAME CPA /E NO MORE SEGMENTS? JMP UPDAT RIGHT, GO UPDATE MAIN'S BOUNDS * JSB OPEN OPEN SEGMENT FILE (ABSOLUTE) DEF *+7 DEF IDCB2 DEF ERR DEF FNAME DEF ABS DEF SC DEF CR SSA JMP FMPER * CLA INITIALIZE SPECIAL RECORD COUNT STA SRECN TO COUNT TIE-OFF RECORDS * NXREC JSB READF READ AN ABSOLUTE RECORD DEF *+6 INTO ABUF DEF IDCB2 DEF ERR DEF ABUF DEF D128 DEF LEN SSA JMP FMPER * CCA END-OF-FILE? CPA LEN JMP SGEOF YES, * JSB ABSCK PERFORM CHECKSUM CHECK LDA ABSAD COULD IT BE SPECIAL RECORD? CPA D2 IE., ADDR=2? RSS JMP NXREC NO, TRY NEXT RECORD * LDA LEN IT MIGHT BE SPECIAL RECORD CPA D5 SO CHECK ABSOLUTE RECORD LENGTH RSS JMP NXREC NOT SPECIAL RECORD. * ISZ SRECN IT IS A SPECIAL RECORD. LDA SRECN CPA D7 IS IT PROG'S MAIN ADDR BOUNDS? JMP SGMAN YES, SEE IF THESE ARE THE HIGHEST. * CPA D8 IS IT PROG'S BASE PAGE ADDR BOUNDS? JMP SGBAS YES, SEE IF THESE ARE THE HIGHEST. JMP NXREC * SGMAN LDA WORD2 GET HIGH ADDR BOUND STA B CMA,INA ADA HMAIN IS CURRENT SEGMENT HIGH ADDR SSA HIGHER THAN PREVIOUS HIGH? STB HMAIN YES, SAVE NEW HIGH JMP NXREC * SGBAS LDA WORD2 GET HIGH BASE PAGE BOUND STA B CMA,INA ADA HBASE IS CURRENT SEGMENT HIGH BASE ADDR SSA HIGHER THAN PREVIOUS HIGH? STB HBASE YES, SAVE NEW HIGH BASE * SGEOF JSͯB CLOSE DONE NOW. SO, CLOSE FILE DEF *+3 DEF IDCB2 DEF ERR JMP NXSEG DONE WITH THIS SEGMENT, MORE SEGMENTS? * UPDAT LDA DMBUF GET ORIGINAL INPUT STRING LDB MLEN FOR MAIN PROGRAM FILE NAME JSB PARSE AND PARSE INTO FNAME,SC,CR COMPONENTS * JSB OPEN OPEN THE MAIN PROGRAM FILE DEF *+7 DEF IDCB2 DEF ERR DEF FNAME DEF UPDTA UPDATE ABSOLUTE DEF SC DEF CR SSA JMP FMPER * CLA STA SRECN INIT SPECIAL RECORD COUNT * NXMRC JSB READF DEF *+6 DEF IDCB2 DEF ERR DEF ABUF DEF D128 DEF LEN SSA JMP FMPER * CCA CPA LEN END-OF-FILE? JMP MNEOF YES * JSB ABSCK PERFORM CHECKSUM CHECK LDA ABSAD IS IT SPECIAL RECORD CPA D2 ORIGINED AT 2? RSS MAYBE JMP NXMRC DEFINITELY NO. * LDA LEN CPA D5 IS IT THE RIGHT SIZE (5 WORDS)? RSS YES JMP NXMRC NO * ISZ SRECN LDA SRECN CPA D7 IS IT MAIN'S MAIN ADDR BOUNDS? JMP MNMAN YES * CPA D8 IS IT MAIN'S BASE PAGE ADDR BOUNDS? JMP MNBAS YES JMP NXMRC * MNMAN LDA HMAIN SET UP NEW HIGH MAIN SZA,RSS ANY CHANGE? JMP NXMRC NO, IGNORE STA WORD2 ADA WORD1 AND COMPUTE NEW CHECKSUM ADA ABSAD STA CKSUM * JSB POSNT BACK UP ONE RECORD DEF *+4 DEF IDCB2 DEF ERR DEF MD1 SSA JMP FMPER * JSB WRITF REWRITE RECORD DEF *+5 DEF IDCB2 DEF ERR DEF ABUF DEF LEN SSA JMP FMPER JMP NXMRC * MNBAS LDA HBASE FIX UP HIGH BASE PAGE WORD SZA,RSS ANY CHANGE? JMP MNEOF NO, IGNORE STA WORD2 AND R6ECOMPUTE THE CHECKSUM ADA WORD1 ADA ABSAD STA CKSUM * JSB POSNT BACK UP ONE RECORD DEF *+4 DEF IDCB2 DEF ERR DEF MD1 * JSB WRITF REWRITE RECORD IN MAIN FILE DEF *+5 DEF IDCB2 DEF ERR DEF ABUF DEF LEN SSA JMP FMPER * MNEOF LDA PRMPT IS INPUT DEVICE INTERACTIVE? SZA,RSS JMP EXIT JSB EXEC YES--WRITE "SGPRP DONE" DEF *+1+4 DEF D2 DEF INLU DEF MESS2 DEF D5 * EXIT JSB CLOSE CLOSE MAIN PROGRAM'S FILE DEF *+1+2 DEF IDCB2 DEF ERR IGNORE ERROR RETURNS * LDA INLU INPUT FROM FILE? SZA JMP TERM JSB CLOSE YES--CLOSE IT ALSO DEF *+1+2 DEF IDCB1 DEF ERR IGNORE ERROR RETURN * TERM JSB EXEC ALL DONE! DEF *+2 DEF D6 * * PARSE NOP BLS CONVERT B TO CHARACTER COUNT JSB $LIBR NOP JSB $PARS DEF PBUF JSB $LIBX DEF PARSE * ABSCK NOP ROUTINE FOR CHECKSUM VERIFY LDA ABSCT IF BAD CHECKSUM THEN AND LHALF EXIT VIA 'FMP ERROR' ALF,ALF SHIFT WORD COUNT TO LOW BITS CMA,INA STA ERR SAVE NEGATIVE COUNT LDB ABSAD GET ADDR, START CKSM LDA DABSD STA TEMP2 SET DATA ADDR * ABSC2 LDA TEMP2,I GET A WORD ADB A AND ADD TO CKSM ISZ TEMP2 BUMP TO NEXT WORD ISZ ERR BUMP COUNT JMP ABSC2 REPEAT TILL DONE * LDA TEMP2,I CPA B COMPARE CHECKSUMS JMP ABSCK,I MATCH, SO RETURN. * LDA D7 ERROR, SO FALL THROUGH 'FMP ERROR 007' * FMPER LDB PLUS SSA IF NEGATIVE NUMBER LDB MINUS GET ASCII "-" STB SIGN SSA CMA,INA MAKE ERROR CODE POSITIVE JSB $LIBR BEFORE CONVERTING TJO ASCII NOP FOR ERROR MESSAGE CCE (E)=1 FOR DECIMAL CONVERSION JSB $CVT3 JSB $LIBX DEF *+1 DEF *+1 INA DLD A,I GET LAST 4 DIGITS OF ERROR CODE DST ERMNO INTO ERROR MESSAGE DLD FNAME MOVE CURRENT FILENAME DST ERMNM INTO ERROR MESSAGE LDA FNAME+2 STA ERMNM+2 LDA PRMPT GET INITIATING TERMINAL'S LU SZA,RSS OR, IF NON-INTERACTIVE, LU # 1 LDB D1 SZA LDB INLU STB LU2 AND STORE IN EXEC CALL JSB EXEC WRITE ERROR MESSAGE DEF *+1+4 DEF D2 DEF LU2 DEF ERMSG DEF D12 JMP EXIT * * * * MESS1 ASC 7,SGPRP STARTED MESS2 ASC 5,SGPRP DONE ASKMP ASC 10,MAIN PROGRAM NAME? _ ASKSG ASC 11,/E OR SEGMENT NAME? __ ERMSG ASC 12, FMP ERROR -#### FNAMEX SIGN EQU ERMSG+5 ERMNO EQU ERMSG+6 ERMNM EQU ERMSG+9 MINUS ASC 1, - PLUS ASC 1, DMBUF DEF MBUF DIBUF DEF IBUF DABSD DEF WORD1 LHALF OCT 177400 FILNM BSS 3 /E ASC 1,/E ABS OCT 2310 UPDTA OCT 2312 LEN NOP ERR NOP TEMP EQU ERR SRECN NOP DVR EQU SRECN TEMP2 NOP LU2 EQU TEMP2 SUB EQU TEMP2 INLU NOP PRMPT NOP * B37 OCT 37 B77 OCT 77 B400 OCT 400 D1 DEC 1 D2 DEC 2 D3 DEC 3 D5 DEC 5 D6 DEC 6 D7 DEC 7 D8 DEC 8 D10 DEC 10 D12 DEC 12 D13 DEC 13 D128 DEC 128 MD1 DEC -1 MD21 DEC -21 * HMAIN NOP HBASE NOP MLEN NOP MBUF BSS 10 IBUF BSS 10 ABUF BSS 128 ABSCT EQU ABUF ABSAD EQU ABUF+1 WORD1 EQU ABUF+2 WORD2 EQU ABUF+3 CKSUM EQU ABUF+4 PBUF BSS 33 FNAME EQU PBUF+1 SC EQU PBUF+5 CR EQU PBUF+9 IDCB1 BSS 144 IDCB2 BSS 144 * * BSS 0 SIZE OF MODULE END SGPRP *($$*   91740-18071 1813 S C0222 DS/1000 MODULE: DVA65             H0102 b8ASMB,R,L,C HED DVA65 91740-16071 REV 1813 * (C) HEWLETT-PACKARD CO. 1978 NAM DVA65 91740-16071 REV 1813 780215 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 *********************************************** * *DVA65 COMMUNICATIONS DRIVER FOR DS/1000 * ALL LINE INTERRUPTS HANDLED BY MICROCODE * EXCEPT PROTOCOL FOR LINES ABOVE PRIVILEGED SLOT * *SOURCE PART # 91740-18071 * *REL PART # 91740-16020 * *WRITTEN BY: CHUCK WHELAN * *DATE WRITTEN: DEC 1976 * *********************************************** SPC 3 * * DEFINE ENTRY POINTS * ENT IA65,CA65 ENT MIC$X SPC 3 * * DEFINE EXTERNALS * EXT $LIST,$OPSY SKP * * CALLING SEQUENCES * SPC 2 * TRANSMIT OR RECEIVE REQUEST AND DATA SPC 1 * JSB EXEC * DEF *+7 * DEF RCODE OCT 1 * DEF CONWD LU (BIT 6= 1 IF WRITE, BIT 7= 1 IF PROGL) * DEF DBUF DATA BUFFER ADDRESS * DEF DBUFL DATA BUFFER LENGTH * DEF RBUF REQUEST BUFFER ADDRESS * DEF RBUFL REQUEST BUFFER LENGTH * SPC 2 * ENABLE LISTEN MODE SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE OCT 3 * DEF CONWD 100B+LU * SPC 2 * SEND STOP SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE OCT 3 * DEF CONWD 0 + LU * SPC 2 * CLEAR REQUEST SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE OCT 3 * DEF CONWD 200B + LU * SPC 2 * QUEUE REQUEST SPC 1 * JSB EXEC * DEF *+4 * DEF RCODE OCT 3 * DEF CONWD 300B+LU * DEF (CLASS QUEUE ENTRY) * SKP * * ERROR CODES (IN EQT 5 STATUS) * * BIT MEANING * 0 REQUEST COMPLETED...NO ERRORS * 1 REQUEST PENDING ON A WRITE, OR NOT PENDING ON A READ * 2 SIMULTANEOUS REQUEST REJECT * 3 TIME OUT * 4 STOP RECEIVED * 5 REMOTE BUSY * 6 PARITY ERROR OR PROTOCOL FAILURE * 7 WRITE FLAG (FOR "GRPM" AT CCE) * * * * EQT WORD USAGE BREAKDOWN * * EQT # USE * 1 DEFINED * 2 DEFINED * 3 DEFINED * 4 DEFINED * 5 DEFINED * 6 DEFINED * 7 ADDRESS OF DATA BUFFER * 8 LENGTH OF DATA BUFFER * 9 ADDRESS OF REQUEST BUFFER * 10 LENGTH OF REQUEST BUFFER * 11 COROUTINE ADDRESS * 12 CURRENT STATUS TABLE (SEE BREAKDOWN) * 13 ADDRESS OF EQT EXTENSION * 14 DEFINED...USED FOR SINGLE WORD TURN-AROUND TIMEOUT * 15 DEFINED...MICROCODE ALSO SETS TIME-OUTS * EXT(0) COUNTER FOR DATA TRANSFER * EXT(1) LAST WORD RECEIVED OVER COMM LINE * EXT(2) VERTICAL PARITY WORD / RP REQ LENGTH * EXT(3) DIAGONAL PARITY WORD / RP DATA LENGTH * EXT(4) COUNT OF TOTAL BLOCK TRANSFERS * EXT(5) COUNT OF TOTAL NUMBER OF RETRIES * EXT(6) ID SEQ ADDRESS FOR SCHEDULE ON NEW REQUEST * * * BREAKDOWN OF EQT WORD 12 * * BIT USAGE * 0-2 RETRY COUNTER OR * 0-5 BROKEN LINE COUNTER * 6 BROKEN LINE FLAG * 7-8 NOT USED * 9 REQUEST PENDING * 10 LISTEN MODE ENABLED * 11 NOT USED * 12 LAST SUCCESSFUL OPERATION (1=WRITE) * 13 FLAG FOR WRITE RAETRY IN PROGRESS * 14 MICROCODE READ/WRITE FLAG * 15 NOT USED SKP * * DRIVER INITIALIZATION SECTION * IA65 NOP LDA EQT14 INA STA EQT15 REESTABLISH EQT15 ADDR JSB SETIO CONFIGURE I/O INSTRUCTIONS SERET LDB EQT13,I EXTENSION ADDRESS ADB B6 LDA 1,I GET 7TH EXT. WORD SZA IS THIS THE FIRST ENTRY FOR EQT? JMP NFIR NO * * THIS CODE IS EXECUTED ONLY ON FIRST TIME THROUGH FOR EQT * STA EQT12,I YES, INITIALIZE EQT12 STATUS STB TEMP 7TH WORD OF EXT. AREA * MODIFY INTERRUPT TABLE LDA CELL GET SELECT CODE ADA N6 SUBTRACT 6 TO FIND ADA INTBA ENTRY IN INTERRUPT TABLE LDB 0,I FETCH USER INTERRUPT LINK CMB,INB GET INTERRUPT LINK STB TEMP,I AND SAVE LDB EQT1 SET DRIVER STB 0,I INTERRUPT LINK JSB RDD.C CLEAR CARD * MODIFY CODE IF A DMS SYSTEM LDB $OPSY SYSTEM TYPE CLA,CCE RBR,SLB DMS SYSTEM? STA MOD1 YES, MODIFY INSTRUCTIONS ERA CCB SET REGISTERS FOR CPU TYPE CHECK OCT 100060 THIS SETS B TO 0 IFF XE NOP LDA XEMIC MICROCODE CALL FOR XE SZB SKIP IF XE LDA MXMIC ELSE USE 21MX MICROCODE CALL STA MIC$X SAVE LOCALLY * LDA EQT4,I TELL RTE THAT I WANT CONTROL ON TIME OUTT IOR .100 STA EQT4,I SKP * NFIR LDB EQT5,I RBL ROTATE TO ISOLATE BUSY BIT LDA EQT6,I GET REQUEST CODE AND B3703 ISOLATE IT CCE,SSB,RSS IS IT BUSY? CPA B3 OR A STOP REQUEST? JMP STPRQ YES, SEND STOP * DETERMINE OPERATION TYPE LDB 0 AND B3 MASK OFF CODE CPA B1 IS IT A READ? JMP REQ YES...READ OR WRITE/READ CPB B203 IS IT A CLEAR REQ? JMP CLREQ dYES...CLEAR REQ. CPB B103 IS IT AN ENABLE LISTEN MODE JMP LCREQ YES * ERROR IN REQUEST HAS OCCURRED CLB,INB CODE FOR REQUEST ERROR SZA WAS IF A CONTROL CODE? INB YES, RETURN A 2 (CONTROL REQ. ERROR) JMP IDON * * B3 OCT 3 B6 OCT 6 B103 OCT 103 B203 OCT 203 B3703 OCT 3703 MXMIC OCT 105520 XEMIC OCT 105300 SKP * * SET UP ENABLE LISTEN MODE LCREQ LDA MIC$X INITIALIZE TO USE OPEN LOOP MICROCODE MOD1 JMP LCR2 NOP IF DMS SYSTEM CELL EQU *+1 XSA * DO CROSS-MAP STORE RSS LCR2 STA CELL,I NON-DMS, MODIFY TRAP CELL JSB RDD.C READ CARD TO CLEAR IT LISTI STC 0,C SET RECEIVE INTERRUPT MODE LDA .020 SET LISTEN ENABLED STATUS RSS CLREQ JSB RDD.C READ DATA AND STATUS FROM CARD TO CLEAR STA EQT12,I UPDATE EQT STATUS CLB,INB GOOD STATUS BIT JSB STAT PUT NEW STATUS IN EQT 5 LDB B4 SET FOR IMMEDIATE COMPLETION * * HERE FOR COMPLETION RETURN * EQT 12 WILL BE SET DEPENDING UPON LISTEN MODE * STATUS IDON STB TEMP SAVE COMPLETION STATUS LDA EQT12,I GET CURRENT DRIVER STATUS AND .020 MASK OFF ALL BUT LISTEN ENABLE LDB LSTNI GET ADDRESS OF LISTEN ENABLED ROUTINE SZA LISTEN MODE ENABLED? CLA,INA,RSS YES, ENABLE MICROCODE READ CLB NO STA EQTX,I SET TRANSFER COUNT LDA TEMP GET STATUS AGAIN STB EQT11,I SAVE COROUTINE ADDRESS JMP IA65,I RETURN TO RTE SYSTEM SKP * * COME HERE ON A READ OR WRITE * REQ LDB EQT7,I GET ADDRESS OF DATA ADB N7 POINT TO 2ND WORD OF CLASS HDR LDA EQT14,I GET THIS EQT'S TIMEOUT IOR TBITS ENSURE BITS 15, 14, AND RAL 0 ARE SET FOR SYSTEM USE STA 1,I PASS TIMEOUT TO GRPM LDA EQT8,I DATA LENGTH CMA,INA ADA wEQT9,I COMPUTE (REQ ADDR - DATA LEN) STA EQT7,I USE IT AS ACTUAL BUFFER ADDR * LDA EQT12,I AND NMSK CLEAR UNNECESSARY FLAGS STA EQT12,I * LDB EQT6,I GET REQUEST CODE BLF,BLF RBL ALF,RAR ALF,ERA E = REQUEST PENDING FLAG LDA EQT8,I STA EQT6,I SET XMISSION LOG INTO EQT6 ADA EQT10,I COMBINE BOTH LENGTHS SLB,RSS IS THIS A WRITE TO SCE-1? STA EQT8,I NO, SAVE COMBINED LENGTHS LDA EQT5,I EQT STATUS WORD AND B1774 CLEAR BITS 7-0 SSB,RSS IS THIS A WRITE? CME,RSS NO, REVERSE RP FLAG IOR B200 YES, SET BIT 7 STA EQT5,I CLA,SEZ,INA SKIP IF (WRITE&NOT RP) OR (READ&RP) JMP BUSY OTHERWISE BUSY OR INVALID REQUEST SSB SKIP IF A READ JMP WREQ DO A WRITE SKP * * READ REQUEST * LDA EQT12,I AND CLR9 CLEAR REQUEST PENDING FLAG STA EQT12,I * REQ1 LDB EQT10,I GET RECEIVED RQST LENGTH LDA EQT4,I ALF,ALF GET LSB OF SUBCHANNEL RAL,ELA AND STORE IT IN E REG RBL,ERB ECHO WD WITH BIT15=1 IFF CLOSED LOOP REQ2 JSB TALK READ RESPONSE JSB CHECK CHECK RCVD WORD JMP REQ3 MUST RETRY ON TIMEOUT JMP ERR.4 STOP RECEIVED JMP ERR.6 RC RCVD, PROTOCOL FAILURE CPB TNW JMP RDREQ "TNW" RCVD, OK TO READ-IN REQUEST CPB RLW RLW RECEIVED? JMP REQ1 YES, RE-ECHO REQUEST LENGTH * REQ3 JSB RETRY UNRECOGNIZED WORD RECEIVED LDB RLW SEND RLW AND JMP REQ2 TRY AGAIN SPC 2 * * SET-UP TO READ DATA BLOCK * RDREQ LDA EQT8,I DATA LENGTH CPA B2 IS THIS AN SCE-1 REQUEST? CLA,INA,RSS YES JMP RDBLK NO, INITIATE READ STA EQT8,I SET READ LENGTH TO 1 LDB EQT7,I BUFFER ADDRESS LDA EQT1 ADDR OF THIS E(QT STA 1,I PASS IT TO PROGL IN 1ST WORD ISZ EQT7,I BUMP ADDR FOR BUFFER * * THIS SECTION INITIATES ALL MICROCODE BLOCK READS * RDBLK LDB EQT4,I LSL 9 SIGN = SUBCHANNEL LSB LDA MIC$X GET MICROCODE MACRO INSTRUCTION SSB SKIP IF SUBCHANNEL EVEN (XMIT MODE) INA ODD SUBCHANNEL, RUN CARD IN RCV MODE STA CELL,I STORE COMM.LINES TRAP CELL LDB TNW SEND TNW JSB OUTPB LDB EQT14,I & SET COMM LINE TIMEOUT STB EQT15,I LDA EQT8,I GET SUM OF DATA & REQ LENGTHS CMA -# OF WORDS -1 STA EQTX,I SET MICROCODE'S COUNTER JSB CEXIT NOW DO IT! * * BLOCK HAS BEEN READ, CHECK TRANSMISSION LDA COUNT MICROCODE COUNT ADA EQT8,I SSA SKIP IF XFER GOT STARTED JMP RDB6 ELSE RETRY, TNW MAY HAVE BEEN LOST * JSB CHECK CHECK XMISSION JMP ERR.3 TIMEOUT JMP ERR.4 STOP RECEIVED JMP RDB7 REQUEST COMING RDB2 CPB RLM JMP RDBLK RETRANSMIT LAST RCVD CPB TNW WAS LAST A "TNW" JMP ENDIT YES, SUCCESSFUL READ * * LAST CONTROL UNRECOGNIZED LDB RLW SEND "RETRANSMIT LAST WORD JSB TALK & READ RESPONSE JSB CHECK SEE WHAT WE GOT JMP ENDIT NO RESPONSE, ASSUME IT WAS OK JMP ERR.4 STOP RECEIVED JMP RDB7 REQUEST COMING JSB RETRY RETRY OUR RETRY JMP RDB2 * RDB6 JSB RETRY GIVE IT 8 TRIES JMP RDBLK * RDB7 LDB RLW SEND RLW SO THAT LAST RC GETS RETRIED JSB OUTPB JMP ENDIT EXIT SKP * * WRITE REQUEST * WREQ LDA EQT9,I LDA 0,I GET 1ST WORD OF REQUEST SLB IS THIS A PROGL DOWNLOAD? STA EQT10,I YES, USE IT INSTEAD OF BUFFER LEN * WRTRY LDB RC JSB TALK SEND RC & READ RESPONSE JSB CHECK CHECK WHAT WE GOT JMP WRTR1 - TRY AGAIN IF TIMEOUT JMP WRTRY STOP, RETRY IMMEDIATELY JMP SIMRQ RC, SIMULTANEOUS REQUEST CPB RLW RLW RECEIVED? JMP WRTRY YES, OTHER SIDE SAYS RETRY CPB TNW RSS SKIP IF "TNW" RECEIVED JMP WRTR1 UNRECOGNIZED, RETRY * SEND DATA LENGTH LDB EQT6,I JSB TALK SEND DATA LENGTH, GET ECHO JSB CHECK CHECK IT JMP ERR.3 TIMEOUT JMP ERR.4 STOP RECEIVED JMP SIMRQ SIMULTANEOUS REQUEST CPB EQT6,I ECHO OK? RSS YES JMP WRTR1 NO, RETRY * SEND REQUEST LENGTH LDB EQT10,I REQUEST LENGTH JSB OUTPB SEND IT LDA B1776 STA EQT15,I APPROXIMATELY 1 SEC TIMEOUT JSB TRAPR SETUP TRAP CELL FOR 1 WORD READ JSB CEXIT READ NEXT WORD WREQ2 JSB CHECK CHECK RESPONSE JMP WRTR1 TIMEOUT, RETRY JMP ERR.5 REMOTE IS BUSY JMP SIMRQ RC * CONFIGURE FOR EITHER CLOSED OR OPEN LOOP MICROCODE PROCESSING LDA EQT10,I ELA SAVE EQT10 SIGN LDA MIC$X MICROCODE CALL RBL,SLB,ERB IF BIT 15=1, RCVR WANTS CLOSED LOOP INA SET TO CALL CLOSED LOOP PROCESSOR STA CELL,I SET TRAP CELL CPB EQT10,I CHECK ECHOED RQST LENGTH JMP WRBLK LENGTH ECHO IS OK SKP * JSB RETRY NOT VALID ECHO, BUMP RETRY COUNT CPB RLW WAS IT AN RLW? (SCE-1 RETRY) JMP WRTRY YES, DO IMMEDIATE RC RETRY LDB RLW JSB TALK SEND RLW JMP WREQ2 * * REQUEST PREAMBLE WRITE FAILURE - WAIT 10 MSEC AND RETRY THE RC * WRTR1 JSB RETRY CHECK RETRY COUNT LDB EQT14,I SET COMMUNICATIONS STB EQT15,I LINE TIMEOUT JSB TRAPR SETUP TRAP CELL FOR 1 WORD READ JSB CEXIT DO READ JSB CHECK SEE WHAT WE GOT JMP WRTRY TIMED-OUT, RESEND RC JMP ERR.4 STOP RCVD, EXIT RSS  RC, SIMULTANEOUS REQUEST JMP WRTRY UNRECOGNIZED, DO RC ANYWAY * * SIMULTANEOUS REQUEST OCCURRED, RESOLVE BASED ON LAST OPERATION * SIMRQ JSB RETRY DON'T TRY FOREVER LDA EQT12,I ALF,SLA TEST LAST SUCCESSFUL OPERATION RSS LAST WAS WRITE, WE MUST WAIT JMP WRTR1+1 LAST WAS READ, WE GET PRIORITY * LDB RLW JSB XMITX SEND RLW IN XMIT MODE LDB B4 JMP CEND GIVE SIMULTANEOUS REQUEST STATUS SKP * * ENTER HERE TO DO ALL BLOCK WRITES * WRBLK LDB TNW THIS TNW WILL INITIATE MICROCODE WXFER JSB OUTPB SEND IT LDB EQT14,I STB EQT15,I SET LINE TIMEOUT LDA EQT12,I IOR .400 SET MICROCODE WRITE BIT STA EQT12,I UPDATE EQT STATUS LDA EQT8,I LENGTH FOR XFER SZA,RSS JMP ENDIT ZERO LENGTH DATA, GET OUT NOW CMA -LENGTH-1 STA EQTX,I SET MICROCODE COUNTER JSB CEXIT LET MICROCODE DO ITS THING * * BLOCK HAS BEEN WRITTEN, CHECK TRANSMISSION * LDB EQTX DONE WITH XFER ADB B4 ISZ 1,I BUMP TOTAL DATA BLOCK XFER COUNT NOP LDA COUNT MICROCODE XFER COUNTER SZA,RSS DID IT GO OK? JMP ENDIT YES CPA B77 DID PARITY FAIL? INB,RSS YES JMP ERR.3 ELSE GIVE TIMEOUT ERROR * * PERFORM A WRITE RETRY JSB RETRY CHECK RETRY COUNT ISZ 1,I BUMP WRITE RETRY COUNTER NOP LDA EQT12,I IOR .200 SET "WRITE RETRY" FLAG STA EQT12,I LDB RLM "RETRANSMIT LAST MESSAGE" JMP WXFER PERFORM RE-WRITE SKP * * LOCAL BUSY OR READ REJECT FOR NO R.P. BUSY CCB LDA EQT15,I IS THERE A TIMEOUT PENDING IOR EQTX,I OR IS MICROCODE ENABLED? SZA,RSS SKIP IF YES TO EITHER STB EQT15,I ELSE SYSTEM WIPED OUR TIMEOUT LDB B2 JSB STAT SET LOCAL BUSY FLAG LDA B4 IMMEDIATE COMPLETION LDB EQT6,I RETURN DATA LENGTH IN B JMP IA65,I RETURN * * HERE FOR REMOTE BUSY ERR.5 LDB B40 JMP CEND * * HERE FOR PARITY ERROR ERR.6 LDB B100 PARITY BIT IN EQT5 * * HERE TO SET ERROR, SEND STOP, & TERMINATE ERSET JSB STAT PUT STATUS INTO EQT 5 LDB STOP JSB XMITX SEND STOP & AWAIT INTERRUPT JSB RDD.C CLEAR CARD BY READING IT JMP CEND+1 GO TERMINATE * * LSTNI DEF ILSTN B1 OCT 1 .020 OCT 2000 .010 OCT 1000 * B40 OCT 40 B77 OCT 77 B100 OCT 100 .100 OCT 10000 .200 OCT 20000 .400 OCT 40000 NMSK OCT 13100 TBITS OCT 160000 CLR9 OCT 176777 CLR11 OCT 173777 SKP * * THIS SUBROUTINE INITIALIZES THE EQT TIMEOUT FLAG, SETS THE * COMM LINE TRAP CELL TO A "JSB CIC" IF IT IS ABOVE THE * PRIVILEGED CARD AND SETS THE MICROCODE COUNTER TO 1. * TRAPR NOP LDA EQT4,I AND CLR11 CLEAR THE EQT4 TIMEOUT FLAG STA EQT4,I LDB CELL THIS LINE'S SELECT CODE CMB,INB ADB DUMMY TEST AGAINST PRIVILEGED CARD'S SC LDA MIC$X MICROCODE CALL MACRO SSB ARE WE ABOVE THE PRIVILEGED CARD? LDA TBG,I YES, GET A "JSB CIC" STA CELL,I SETUP TRAP CELL CLA,INA STA EQTX,I SET MICROCODE COUNT = 1 JMP TRAPR,I RETURN SPC 1 * * SEND WORD, SET TIMEOUT, & AWAIT RESPONSE * TALK NOP JSB OUTPB SEND WORD IN B REG LDB EQT14,I SET COMMUNICATIONS STB EQT15,I LINE TIMEOUT JSB TRAPR SETUP TRAPCELL FOR 1 WORD READ LDA TALK COROUTINE RETURN ADDRESS JMP CEXT1 SPC 1 * * IF ALREADY 7 RETRIES, GIVE PARITY ERROR ELSE BUMP COUNT & RETURN * RETRY NOP LDA EQT12,I AND B7 ISOLATE RETRY COUNTER CPA B7 IS THIS THE 8TH RETRY? JMP FAIL YES, RETURN ERROR ISZ EQT12,I BUMP COUNT JMP RETRY,I Q & TRY AGAIN * FAIL LDB COUNT SZB WAS WORD COUNT ZERO? CPB B77 NO, WAS IT BLOCK PARITY? JMP ERR.6 RETURN A PARITY ERROR * * HERE FOR TIMEOUT ERR.3 LDB B10 TIMEOUT BIT FOR EQT5 JMP ERSET EXIT WITH LINE T.O. ERROR SKP * * CONTINUATION SECTION * CA65 NOP JSB SETIO CONFIGURE I/O INSTRUCTIONS LDB EQT11,I GET COROUTINE ADDR SZB,RSS IT IT SET-UP? JMP IUNKN GO TO UNKNOWN INTERRUPT PROCESSOR LDA EQTX,I STA COUNT SAVE MICROCODE COUNT CLA STA EQTX,I DISABLE MICROCODE LDA EQT12,I AND .020 ISOLATE "LISTEN ENABLED" BIT IOR EQT1,I ALSO TEST FOR DRIVER BUSY SZA ARE EITHER CONDITION TRUE? JMP 1,I YES, GO TO COROUTINE ADDR ISZ CA65 * CLCRD JSB RDD.C CLEAR THE CARD JMP CEXT3 & GET OUT * * * * UNKNOWN INTERRUPTS COME HERE * WE'RE IN TROUBLE IF WE EVER GET HERE!!!!! * IUNKN STB EQT12,I CLEAR ALL CARD STATI LDB B77 SET ALL STATUS ERROR BITS JMP CEND GET OUT...NOW!!! * SKP * * HERE FOR FIRST INTERRUPT WHEN CARD IN LISTEN MODE * ILSTN LDA EQT12,I AND B1776 INITIALIZE BROKEN LINE COUNT STA EQT12,I * ILSN0 JSB CHECK FIND OUT WHAT THEY SENT US JMP ILSN4 TIME OUT...IGNORE JMP ILSN4 STOP...IGNORE JMP ILSN1 REQUEST COMING * * ENTER HERE WHEN UNRECOGNIZED WORD RECEIVED WHILE "LISTENING" SZB ZERO RECEIVED? JMP ILSN4 NO, JUST IGNORE IT JSB RDD.C CLEAR COMMUNICATIONS CARD LDA EQT12,I ISZ EQT12,I BUMP BROKEN LINE COUNT AND B77 CPA B77 64 ZEROES IN A ROW = BROKEN LINE! JMP DEXIT IT IS, LEAVE CARD DISABLED & EXIT JSB TRAPR SETUP FOR 1 WORD READ JSB CEXIT EXIT IN RCV MODE JMP ILSN0 GOT ANOTHER WORD, GO CHECK IT * ILSN1 LDA EQT12,I EQT STATUS IOR .010 SET REQUEST PENDING FLAG STA EQT12,I SAVE IT * ILSN2 LDB TNW SEND A TNW JSB TALK & WAIT FOR DATA LENGTH JSB PRECK DO PREAMBLE CHECKING ADA B3 POINT TO EXT(3) STB 0,I SAVE DATA LENGTH FOR PROGRAM JSB TALK ECHO IT & GET DATA LENGTH JSB PRECK DO PREAMBLE CHECKING ADA B2 POINT TO EXT(2) STB 0,I SAVE RQST LENGTH FOR PROGRAM ADA B4 POINT TO EXT(6) LDB 0,I GET I/O ADDRESS OF PROGRAM STB PROG SAVE ADDRESS ADB B17 GET TO STATUS LDA 1,I GET STATUS AND B17 MASK OFF ALL BUT STATUS SZA BUSY? JMP ILSN3 YES...TELL OTHER SIDE TO RETRY ADB N5 ID SEG B REG SAVE AREA LDA EQT4 GET ADDRESS OF LU STA 1,I PASS IT IN B REG JSB $LIST SCHEDULE PROGRAM OCT 101 PROG NOP ILSN4 JSB RDD.C CLEAR CARD BY READING IT JSB TRAPR SETUP TRAP CELL & ENABLE 1 WORD READ LDA LSTNI SET FOR LISTEN MODE INTERRUPT JMP CEXT1 AND EXIT * * HERE IF WE GOT A "BUSY" CONDITION * ILSN3 LDB STOP SEND STOP TO INDICATE "REMOTE BUSY" JSB OUTPB SEND IT * * HERE ON STOP...CLEAR REQUEST PENDING STATUS * ILSN5 LDA EQT12,I AND CLR9 CLEAR REQUEST PENDING FLAG STA EQT12,I JMP ILSN4 TERMINATE * * SUBROUTINE TO CHECK RCVD PREAMBLE WORD & RETRY IF RC * PRECK NOP JSB CHECK CHECK RCVD WORD JMP ILSN5 TIME-OUT, CLEAR RP CONDITION RSS 7760B IS POSSIBLE DATA LEN JMP ILSN2 RC, RESTART PREAMBLE LDA EQTX PASS EXT AREA ADDR BACK JMP PRECK,I SPC 2 * * HERE FOR SEND STOP REQUEST * STPRQ LDB STOP SEND STOP CLA DON'T ALTER STA CELL TRAP CELL. JSB XMITX IN XMIT MODE JSB RDD.C READ CARD TO C<LEAR IT STA CELL LDA EQT12,I AND BSTMK SAVE LISTEN, BROKEN LINE, & LAST OP.BITS JMP ENDOK * * NOW SET FLAG TO SHOW WHETHER THE LAST SUCCESSFUL OPERATION WAS A * READ OR WRITE. THIS IS USED TO RESOLVE SIMULTANEOUS LINE CONTENTION. ENDIT LDA EQT12,I AND .020 SAVE "LISTEN ENABLED" FLAG LDB EQT5,I BLF,BLF SSB SKIP IF READ IOR .100 SET LAST OPERATION AS WRITE * ENDOK STA EQT12,I SET STATUS CLB,INB,RSS SET GOOD STATUS * * STOP RCVD EXIT ERR.4 LDB B20 SKP * * HERE TO TERMINATE * CEND JSB STAT UPDATE EQT 5 STATUS LDA EQT12,I GET CARD STATUS WORD AND .020 IS IT LISTEN MODE? SZA,RSS JMP CLCRD NO, CLEAR CARD & EXIT JSB TRAPR SET UP TRAP CELL & ENABLE 1 WORD READ LDA LSTNI GET LISTEN INTERRUPT JMP CEXT2 AND LEAVE * * HERE TO DO CONTINUATION RETURN * CEXIT NOP LDA CEXIT GET NEXT INTERRUPT ADDRESS CEXT1 ISZ CA65 BUMP CONTINUATOR RETURN CEXT2 STC 0,C SET FOR LISTEN MODE CEXT3 STA EQT11,I SAVE NEW INTERRUPT LOCATION CEXT4 CLA LDB SETIO CPB I65AD WAS THIS ENTRY VIA INITIATOR? JMP IA65,I YES, THEN RETURN THE SAME WAY LDB EQT6,I GET EQT6 IN CASE IT'S COMPLETION JMP CA65,I RETURN * I65AD DEF SERET SPC 3 * * SUBROUTINE TO PUT NEW STATUS INTO EQT WORD 5 * STAT NOP LDA EQT10 STA EQT15 FOOL RTE SO IT LEAVES TIMEOUT ALONE LDA EQT5,I GET WORD 5 AND B1776 MASK OFF OLD STATUS IOR 1 STUFF IN NEW STATUS STA EQT5,I AND PUT IT AWAY JMP STAT,I RETURN * SKP * * ROUTINE TO DO CHECKING OF INPUT DATA * WILL RETURN *+1 TIME OUT * *+2 STOP RECEIVED * *+3 REQUEST COMING RECEIVED * *+4 NORMAL RETURN...B REG= LAST DATA WORD * CHECK NOP LDB EQTX NLH EQT EXTENSION ADDRESS INB LDB 1,I LAST WD RCVD LDA COUNT MICROCODE COUNT SZA SKIP IF ALL TRANSFERRED JMP CHEC2 NO, POSSIBLE INTERRUPT * CHEC1 ISZ CHECK SET FOR STOP RETURN CPB STOP STOP? JMP CHECK,I YES...DO STOP RETURN ISZ CHECK CPB RC REQUEST COMING? JMP CHECK,I YES ISZ CHECK JMP CHECK,I DO NONE OF THE ABOVE RETURN * CHEC2 LDA EQT4,I AND .040 ISOLATE TIMEOUT FLAG SZA IS THIS A REAL TIMEOUT JMP CHECK,I YES, RETURN STA COUNT CLCC1 CLC 0,C NO, DISABLE CARD LIB1 LIB 0 INPUT THE WORD JMP CHEC1 * * B10 OCT 10 B20 OCT 20 B17 OCT 17 .040 OCT 4000 BSTMK OCT 12100 B1774 OCT 177400 B1776 OCT 177600 TEMP NOP MIC$X NOP OPEN LOOP MICROPROGRAM CALL COUNT NOP EQTX NOP SKP @ N* * ROUTINE TO CLEAR CARD * RDD.C NOP CLCC2 CLC 0,C LIAC2 LIA 0,C CLEAR STATUS LIA2 LIA 0 READ DATA WORD CLA JMP RDD.C,I * * HERE TO SEND WORD AND EXIT IN TRANSMIT MODE * XMITX NOP JSB OUTPB SEND WORD JSB TRAPR SETUP TRAP CELL STC0 STC 0 SET TRANSMIT MODE LDA XMITX COROUTINE UPON RETURN STA EQT11,I DEXIT ISZ CA65 BUMP CONTINUATION RETURN JMP CEXT4 * * OUTPB NOP OTB1 OTB 0 OUTPUT B JMP OUTPB,I RETURN * RC OCT 170017 REQUEST COMING WORD TNW OCT 170360 TRANSMIT NEXT WORD STOP OCT 7760 SEND STOP RLW OCT 7417 RETRANSMIT LAST WORD RLM OCT 170377 RETRANSMIT LAST MESSAGE * B2 OCT 2 B4 OCT 4 B7 OCT 7 N5 DEC -5 N6 DEC -6 N7 DEC -7 SKP * SETIO NOP LDA EQT12,I EQT STATUS AND MICFG CLEAR MICROCODE R/W & RETRY FLAGS STA EQT12,I UPDATED EQT LDB EQT2,I CLA SSB SYSTEM TRYING TO INITIATE NEW REQUEST? CCA YES, SET A TICK STA EQT15,I SET TIMEOUT LDB EQT13,I STB EQTX SAVE ADDRESS OF EQT EXTENSION LDA EQT4,I AND B77 ISOLATE SELECT CODE STA CELL SAVE FOR TRAP CELL ADDR IOR CLCC CLC0,C COMMAND STA CLCC1 STA CLCC2 XOR .040 CONVERT TO STC 0,C COMMAND STA LISTI STA CEXT2 XOR .010 CONVERT TO STC 0 COMMAND STA STC0 XOR B200 CONVERT TO LIA COMMAND STA LIA2 XOR .010 CONVERT TO LIA 0,C COMMAND STA LIAC2 XOR .050 CONVERT TO LIB COMMAND STA LIB1 XOR B300 CONVERT TO OTB 0 COMMAND STA OTB1 JMP SETIO,I RETURN * * MICFG OCT 117777 CLCC CLC 0,C B200 OCT 200 B300 OCT 300 .050 OCT 5000 * BSS 0 SEE HOW BIG IT IS SKP * * DEFINE BASE PAGE LOCATIONS NEEDED * * * . ,  EQU 1650B EQT1 EQU .+8 EQT2 EQU .+9 EQT4 EQU .+11 EQT5 EQU .+12 EQT6 EQU .+13 EQT7 EQU .+14 EQT8 EQU .+15 EQT9 EQU .+16 EQT10 EQU .+17 EQT11 EQU .+18 EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 DUMMY EQU 1737B INTBA EQU 1654B TBG EQU 1674B END ަ   91741-18001 1840 S C0222 &DVG67              H0102 sgASMB,L,C HED DVG67 RTE-2/3/4 12889 PHYSICAL LEVEL DRIVER NAM DVG67,0,0 91741-16001 REV 1840 770719 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ENT IG67,CG67 ENT EQTAD FOR LOGICAL DRIVER ENT HREC,HSND,HCONT EXT $CGRN SPC 1 * DVG67 * SOURCE: 91741-18001 * BINARY: 91741-16001 * TOM KEANE * JUNE 24, 1976 SPC 2 A EQU 0 B EQU 1 SC EQU 0 SPC 1 * * * NOTE: * * * * THE FOLLOWING DRIVER WAS WRITTEN FOR A DOS III * * PHYSICAL LEVEL DRIVER. THE FOLLOWING EQUATES * * ARE THE DIFFERENCES BETWEEN THE DOS III AND THE * * RTE EQT TABLE * * * * RTE DOS-III * EQT01 EQU 1660B ----- EQT02 EQU 1661B DEQ01 EQT03 EQU 1662B DEQ02 EQT04 EQU 1663B DEQ03 EQT05 EQU 1664B DEQ04 EQT06 EQU 1665B DEQ09 EQT07 EQU 1666B DEQ10 EQT08 EQU 1667B DEQ11 EQT09 EQU 1670B DEQ12 EQT10 EQU 1671B DEQ13 EQT13 EQU 1772B DEQ14 EQT14 EQU 1773B DEQ16 EQT15 EQU 1774B DEQ15 SKP **************************************************** * * * CONTINUATOR SECTION * * * **************************************************** * MODIFIED TO CHECK FOR SPURIOUS INTERRUPT BY DMT (7/11/78) CG67 NOP jLDB EQT01,I SPURIOUS SZB,RSS INTERRUPT? JMP SPURI YES--IGNORE. SPRTN CLB ZERO RETURN STB SAVA CODE. STA SCODE SELECT CODE JSB INTON TEST INTERRUPT SYSTEM. JSB SAVE LDA EQT04,I WAS IT ALF TIMER SSA,RSS INTERRUPT? JMP WEND NO. LDA EQT04,I YES. RESET AND PAROF TIMER STA EQT04,I BIT. JSB LTIMA JUMP TO TIMER RETURN WEND EQU * LDB LSIT LINE STATE JMP LSWCH TRANSITION TABLE SPC 1 * SPURIOUS INTERRUPT-- SPURI LDB SWORD IF WE'RE EXPECTING SZB AN ENQ, JMP SPRTN NOT SPURIOUS. STB EQT15,I ZERO TIME-OUT CLOCK WORD. * KEEP LONG-TERM COUNT FOR # OF SPURIOUS INTERRUPTS * IN UNUSED "# ERROR-FREE MSGS RECEIVED" EQT EXTENSION WORD. LDB P65$ BUMP EQTX JSB BUMP WORD 66. JMP SPRTN *** JUST KEEP TRACK FOR NOW *** ISZ CG67 MAKE A JMP CG67,I CONTINUATION RETURN. SPC 2 **************************************************** * * * INITIATOR SECTION * * * **************************************************** IG67 EQU * NOP CLB STB RTX SET RETURN INDEX FOR IG67 STB SAVA ZERO RETURN CODE LDB IG67 SAVE RETURN ADDRESS STB EXIT STA SCODE SAVE SELECT CODE JSB INTON TEST INTERRUPT SYSTEM LDB DEQ17 LDA EQT09,I GET REQUEST AND MASK1 SAVE FUNCTION AND REQUEST CPA INCD INITIALIZE REQUEST? JMP I.67B YES AND MASK2 SPECIAL CASES CPA B4400 CLEAR REQUEST? JMP I.67A YES. SZB LOGICAL LINKAGE PRESENT JMP I.67A YES. LDA P01$ NO/INVALID REQUEST STA SAVA RETURN TO r JSB RTRN SYSTEM. * I.67B EQU * LDB EQT07,I GET EXTENSION ADDRESS STB DEQ17 LINK WITH LOGICAL INB CLA STA DEQ3 INSURE EQT RESET STA DEQ5 CLEAR LINE STATE STA DEQ6 CLEAR TEST BITS STA DEQ16 CLEAR TIMER FLAGS LDA EQTAD GET EQT BASE ADDRESS ADB P07$ COMPUTE DEQ26 STA B,I SAVE AS TIMER ID (DVR67) ADB P04$ COMPUTE DEQ30 STA B,I SAVE AS TIMER ID (LOGICAL) * I.67A EQU * LDA DEQ17 SET UP EQT JSB SETQ EXTENSION. LDA DEQ6 GET DMA AND DMAMF CHANNEL IOR DMAA AND LDB CHAN SET SLB ALLOCATED IOR DMAM FLAG. STA DEQ6 LDA DEQ4 SET AND LBYT$ STATUS STA DEQ4 TO ZERO. LDA SCODE GET SELECT CODE JSB SETIO SET I/O INSTRUCTIONS LDA DEQ12 CONTROL WORD AND MASK2 FUNCTION CODE CPA B4400 CLEAR REQUEST? JMP C0 YES. LDA DEQ9 CURRENT I/O WORD AND M17$ CPA P02$ WRITE/CONTROL REQUEST? JMP TWOPR YES./GET SECOND PARAMETER CHEKM EQU * LDA DEQ9 GET CONTROL WORD AND M17$ CPA P01$ READ REQUEST? JMP READ YES. CLB STB SWORD CPA P02$ WRITE REQUEST? JMP WRITE YES. ISZ SAVA INDICATE ERROR JSB RTRN RETURN TO SYSTEM TWOPR EQU * LDA DEQ12 GET CONTROL BITS AND M64$ AND OFF LOGICAL UNIT IOR P02$ INSERT REQUEST CODE STA DEQ9 STORE IN CONTROL WORD STA EQT06,I CONTROL WORD TO SYSTEM AND B14$ CONTROL REQUEST? SZA JMP CONTL YES./RESET BITS JMP CHEKM NO/TEST FOR REQUEST SKP **************************************************** * * * READ REQUEST INITIATION * *  * **************************************************** READ EQU * LDA DEQ12 GET CONTROL WORD AND M64$ AND OFF LOGICAL UNIT IOR P01$ INSERT REQUEST CODE STA DEQ9 STORE IN CONTROL WORD STA EQT06,I CONROL WORD TO SYSTEM AND MASK2 SPECIAL CASE CPA B4500 SPECIAL READ? JMP SPECR YES. CCB INDICATE INITIATION CALL LDA P01$ JSB DEQ22,I CALL LOGICAL READ JSB DONE COMPLETE READC JSB DRCTV EVALUATE DIRECTIVE BITS JSB RTRN RETURN TO SYSTEM * SPECR EQU * STA SWORD SET SPECIAL CASE LDA DEQ10,I GET RN STA RNUMB STORE OFF JSB RDMA INHIBIT DMA INTERRUPTS LDA IO05A START STA STDMA INSTRUCTION LDA RECV LINE STATE STA DEQ5 EQUALS RECEIVE JSB READP ENABLE INTERFACE * READ1 EQU * LDA P04$ INDICATE IMMEDIATE STA SAVA COMPLETION JSB RTRN RETURN TO SYSTEM SPC 2 **************************************************** * * * WRITE REQUEST INITIATION * * * **************************************************** WRITE EQU * CCB INDICATE INITIATION CALL JSB DEQ23,I CALL LOGICAL WRITE JSB DONE COMPLETE WRITC JSB DRCTV EVALUATE DIRECTIVES NOP NOP JSB RTRN RETURN TO SYSTEM SKP **************************************************** * * * CONTROL REQUEST INITIATION * * * **************************************************** CONTL EQU * LDA DEQ9 CURRENT I/O WORD XOR CONOF BIT 14 OFF 1 ON STA DEQ9 RESTORE CONTROL WORD STA EQT06,I CONTROL WORD TO SYbSTEM CLA CCB INDICATE INITIATION CALL JSB DEQ24,I CALL LOGICAL CONTROL JMP READ1 COMPLETE LDA DEQ9 GET CONTROL WORD ALF,ALF ISOLATE RAL,RAL FUNCTION AND M77$ CODE. ADA N04$ FUNCTION LESS SSA,RSS THAN FIVE? JMP CNTL1 NO/INVALID ADA CNTLT YES/CALCULATE LDA A,I TABLE ADDRESS JMP A,I PROCESS BY FUNCTION CODE * * * INVALID REQUEST * * * CNTL1 EQU * ISZ DEQ4 INDICATE INVALID JMP READ1 REQUEST * * CONTROL TRANSFER TABLE * DEF C0 CLEAR DEF READ1 INITIALIZE(NO ADDITIONAL PROCESS) DEF C2 LINE OPEN DEF C3 LINE CLOSE CNTLT DEF * * * * CLEAR REQUEST * * * C0 EQU * LDA DEQ17 EXTENSION THERE? SZA SKIP DEQUEUE IF NOT LINKED JSB DQT DEQUEUE TIMERS JSB C4 GO CLEAR I/F CLA BREAK STA DEQ17 LINKAGE. LDA IDLE LINE STATE STA DEQ5 EQUALS IDLE. JMP READ1 RETURN * * * LINE OPEN REQUEST * * * C2 EQU * LDA DEQ19,I GET TEST BITS RAL PRIMARY SSA STATION? JSB SETBT YES./SET INDICATOR LDA AOPEN LINE STATE STA DEQ5 EQUALS OPEN. JMP READ1 RETURN * SETBT EQU * NOP LDA DEQ6 GET TEST BITS IOR B10$ PRIMARY STATION STA DEQ6 RETURN WORD JMP SETBT,I * * * LINE CLOSE REQUEST * * * C3 EQU * JSB C4 GO CLEAR I/F LDA CLOSE LINE STATE STA DEQ5 EQUALS CLOSED. JMP READ1 COMPLETE * * * CLEAR INTERFACE * * * C4 EQU * NOP JSB CLC.C CLEAR INTERFACE JSB RDMA RELEASE DMA JMP C4,I RETURN TO CALLER SKP **************************************************** * * * SET EQT TABLE * * * * A=ADDRESS OF EQT * * * **************************************************** SETQ EQU * NOP LDB EQT02,I STB DEQ1 LDB EQT03,I STB DEQ2 LDB EQT04 STB DEQ3 LDB EQT05,I STB DEQ4 LDB EQT06,I STB DEQ9 LDB EQT07,I STB DEQ10 LDB EQT08,I STB DEQ11 LDB EQT09,I STB DEQ12 LDB EQT10,I STB DEQ13 LDB EQT13,I STB DEQ14 LDB EQT15 STB DEQ15 LDB EQT14,I STB DEQ16 INA STA DEQ19 ADA P03$ LDB A,I STB DEQ22 INA LDB A,I STB DEQ23 INA LDB A,I STB DEQ24 ADA P10$ STA DEQ34 INA STA DEQ35 ADA P42$ STA TLOGD JMP SETQ,I RETURN SKP **************************************************** * * * TIME OFF * * * **************************************************** TIMOF EQU * B=TIMER FLAG MASK NOP A=EQT STB TMOF1 A^ SAVE TIMER TYPE LDA DEQ16 RESET XOR B15$ TIMER STA DEQ16 BIT. JMP TIMOF,I RETURN * TMOF1 NOP **************************************************** * * * LOGICAL TIMER * * * **************************************************** LTIMA DEF LTIM LTIM EQU * NOP LDB B15$ JSB TIMOF SET UP FOR TIMER OFF CLA,INA INDICATE TIMER STA RTX RETURN LDB LSTT PROCESS LSWCH ADB DEQ5 BY LDB B,I LINE JMP B,I STATE. LSTT DEF *+1 DEF LSTA 0-CLOSED DEF LSTA 1-AWAITING OPEN DEF LSTA 2-IDLE DEF LSTC 3-RECEIVE DEF LSTD 4-CONTROL DEF LSTE 5-SEND DEF LSTE 6-SEND TO RECEIVE * LSIT DEF *+1 DEF LSIA 0-CLOSED DEF LSIB 1-AWAITING OPEN DEF LSIA 2-IDLE DEF LSIC 3-RECEIVE DEF LSID 4-CONTROL DEF LSIE 5-SEND DEF LSIF 6-SEND TO RECEIVE SKP **************************************************** * * * SET UP I/O INSTRUCTIONS * * * **************************************************** SETIO EQU * NOP ADA ISTCC FORM STC INSTRUCTION STA IO07 STA IO08 STA IO09 STA IO10 ADA ICLCC FORM CLC INSTRUCTION STA XIO02 ADA IOTA FORM OTA INSTRUCTION STA XIO03 ADA ILIA FORM LIA INSTRUCTION STA XIO05 ADA ISTF FORM STF INSTRUCTION STA IO06 * * * CONFIGURE DMA LOW SC INSTRUCTIONS * * * LDB P02$ LDA DEQ6 AND DMAM SZA INB ADB ISTCC STB IO02 ADB ICLCC STB IO00 ADB IOTA STB IO01 STB IO03 ADB ILIA STB IO15 * * * CONFIGURE DMA HI SC INSTRUCTIONS * * * ADB .ISTC STB IO05 ADB ICLCC STB IO05A STB IO05B ADB IOTA STB IO04 ADB ISTF0 STB IO13 STB IO14 JMP SETIO,I SKP * **************************************************** * * * DIRECTIVE EVALUATOR * * * * * * B=TIMER REQUEST * * <0-INITIATE/UPDATE VALUE * * =0-NO REQUEST * * >0-CANCEL REQUEST * * * **************************************************** DRCTV EQU * NOP LDA B15$ UPDATE FLAGS STA DEQ16 UPDATE FLAGS STB A DOS TIME CLB TICKS MPY P10$ ARE 100MS STA DEQ15,I STORE TIMER COUNT LDA DEQ3,I TELL SYSTEM IOR B12$ WE WILL SERVICE STA DEQ3,I TIMER INTERRUPTS JMP DRCTV,I RETURN * **************************************************** * * START READ * * A-REG = ADDRESS, B-REG = BYTE COUNT * **************************************************** HREC EQU * NOP STA DEQ34 STORE OFF STB DEQ35 PARAMETERS LDB HREC,I TIMER PARAMETER ISZ HREC TIMER ACTIVE SZB JSB DRCTV CHECK TIMER LDA RECV LINE STATE STA DEQ5 EQUALS RECEIVE. JSB RDMA RELEASE DMA LDA DEQ34 GET BOTH LDB DEQ35 PARAMETERS. Y BRS BYTES TO WORDS JSB DMARD CONFIGURE DMA JSB READP LDA SWORD SPECIAL SZA,RSS CASE? JMP TEST RETURN. CLA RESET STA SWORD SPECIAL CASE FLAG. LDA EBIT EOT SZA,RSS RECEIVED? JMP ENQR NO/FAKE ENQ CLA YES/CLEAR STA EBIT TEST WORD JMP EOTR FAKE EOT DMARD EQU * NOP IOR B15$ SET INPUT JSB INDMA SETUP DMA CPB P00$ DO NOT START JMP NONDM IF LENGTH = 0. LDA IO05 FOR DMA STA STDMA TRANSFER LDA DEQ6 SET BIT INDICATING IOR DMAA WE ARE USING STA DEQ6 DMA. LDA IO05A STA STDMA+1 JMP DMARD,I RETURN * NONDM EQU * JSB RDMA INHIBIT DMA INTERRUPTS LDA IO05A START INSTRUCTION STA STDMA JMP DMARD,I RETURN * NODMW EQU * JSB RDMA INHIBIT DMA INTERRUPTS JMP IO05A RETURN * INDMA EQU * NOP IO00 CLC DMAL,C INITIALIZE DMA ROUTINE IO01 OTA DMAL SET ADDRESS IO02 STC DMAL,C LDA B SET COUNT IO03 OTA DMAL LDA SCODE SET SELECT CODE IO04 OTA DMAH JMP INDMA,I RETURN **************************************************** * * * START WRITE * * * * A-REG = ADDRESS, B-REG = BYTE COUNT * * * **************************************************** HSND EQU * NOP STA DEQ34 STORE STB DEQ35 OFF PARAMETERS LDB HSND,I TIMER ISZ HSND PARAMETER? SZB JSB DRCTV YES/SET TIME LDA SEND LINE STATE STA DEQ5 EQUALS SEND. WTXTP STC SC,C SET INTERFACE CONTROL WORD LDA TCWD1 JSB OTA JSB RDMA RELEASE DMA ! LDA DEQ34 INITIALIZE DMA LDB DEQ35 AND SET STB DEQ14 XLOG. BRS BYTES TO WORDS JSB INDMA CPB P00$ DO NOT START JMP NODMW IF LENGTH = 0. LDA DEQ6 SET BIT INDICATING IOR DMAA WE ARE USING STA DEQ6 DMA. IO05 STC DMAH,C START DMA IO05A CLC DMAH,C IO06 STF SC START TRANSFER JMP TEST IO07 EQU WTXTP * * * WRITE ONE WORD OUT * * CONTROL REQUEST * * * HCONT EQU * NOP STA DEQ34 STORE ISZ HCONT PARAMETER. LDA CNTRL LINE STATE STA DEQ5 EQUALS CONTROL. JSB RDMA INHIBIT DMA INTERRUPTS RWOWD STC SC,C SET INTERFACE CONTROL WORD LDA TCWD5 JSB OTA LDA DEQ34,I GET CHARACTER JSB OTA JMP TEST IO10 EQU RWOWD * * * CONTROL INTERRUPT * * * LSID EQU * CLA NORMAL COMPLETION SZA LSTD EQU * LDA P15$ TIMEOUT JMP HCONT,I RETURN TO LOGICAL * * * SEND INTERRUPT * * WRITE END OF TEXT * * * LSIE EQU * JSB RDMA RELEASE DMA LDA TCWD3 END OF TEXT JSB CLC.C SEND ETX JSB OTA LDA DEQ14 MODIFY CMA,INA AND M17$ ETX ALF,ALF BY ALF BYTE IOR ETX COUNT JSB OTA JSB WAIT LDA TCWD4 SEND CRC JSB CLC.C JSB OTA JSB OTA DUMMY WORD JSB WAIT LDA S2R LINE STATE EQUALS STA DEQ5 SEND TO RECEIVE. LDA IO05HA INHIBIT DMA STA STDMA START INSTRUCTION JSB READP READ GARBAGE CHARACTER LSIF EQU * CLA RETURN TO CLB LOGICAL. JMP HSND,I COMPLETION LSTE EQU * LDA P15$ TIMEOUT JMP HSND,I RETURN TO LOGICAL SPC 1 * WAIT NOP SUBROUTINE TO WAIT LDA DELAY SEVERAL MICRO-SECONDS CHK SLA,RAR SO HP3000 WON'T JMP WAIT,I MISS ANY DATA. JMP *+1,I DEF CHK SPC 2 * * * ENABLE INTERFACE TO READ * * * READP EQU * NOP LDA RCWD1 SET CONTROL WORD JSB CLC.C JSB OTA JSB LIA READ 1 OR 2 JSB LIA DATA WORDS. IO08 STC SC,C SET CONTROL, CLEAR FLAG JSB LIA AND CLEAR THE STATUS WORD STDMA NOP OVERLAY WITH START DMA INST NOP OVERLAY WITH CLC DMAH CLA CLEAR THE START DMA INST. STA STDMA STA STDMA+1 JMP READP,I RETURN TO CALLER * * * PROCESS END OF TEXT * * * PETX EQU * IO14 STF DMAH INHIBIT DMA XFERS IO15 LIA DMAL GET CHARACTER COUNT STA MOD16 SAVE CHARACTER COUNT JSB WAIT WAIT FOR HOST JSB CLC.C READ STATUS JSB LIA WORD. STA STAT1 JSB LIA READ CRC WORD STA STAT2 LDA TCWD4 TRANSMIT JSB CLC.C CRC JSB OTA TO JSB OTA CHECK IT. JSB WAIT JSB CLC.C READ STATUS & JSB LIA CHECK AND P02$ ERROR SZA BITS JMP BTEXT CRC ERROR LDA MOD16 CHECK MODULO COUNT JSB GTEXT STA DEQ14 STORE IN XMISSION LOG ALF,ALF ALF XOR XTE AND NIB3 MASK FOR ERROR SZA JMP BTEX1 JSB RDMA RELEASE DMA LDA P10$ GOOD TEXT JMP HREC,I RETURN TO LOGICAL * BTEXT EQU * LDA P11$ CRC ERROR JMP HREC,I RETURN TO LOGICAL * BTEX1 EQU * LDA P12$ TEXT UNDERRUN JMP HREC,I RETURN TO LOGICAL * * GTEXT EQU * NOP LDB DEQ35 NEGATIVE BYTE COUNT CMB,INB MAKE IT POSITIVE BRS WORDS STB DEQ35 ADA DEQ35 ADD WORD COUNT ALS POSITIVE BYTES JMP GTEXT,I * * RECEIVE INTERRUPT * * * LSIC EQU * LDA SCODE ADA M8 IGNORE SSA DMA JMP TEST INTERRUPTS NOP JSB CLC.C READ INTERRUPT JSB LIA TAG1 WORD SLA NO/JUST DATA WORD JMP RTAG1 YES WENDC EQU * STC SC,C REENABLE INTERFACE JSB LIA JSB LIA JMP TEST RETURN RTAG1 EQU * JSB LIA LOAD TAG1 WORD STA XTE SAVE CHARACTER AND MASK0 CLEAR HI-ORDER BIT CPA ACK0 CHARACTER = JMP ACK0R ACK0 CPA ACK1 CHARACTER = JMP ACK1R ACK1 CPA WACK CHARACTER = JMP WACKR WACK CPA RVI CHARACTER = JMP RVIR RVI CPA ENQ CHARACTER = JMP ENQR ENQ CPA NAK CHARACTER = JMP NAKR NAK CPA EOT CHARACTER = JMP EOTR EOT CPA DEOT CHARACTERS = JMP DEOTR DLE EOT CPA TTD CHARACTERS = JMP TTDR STX ENQ/ABORTED TEXT AND MASK1 HI-ORDER BITS CPA ETX CHARACTER = JMP PETX ETX/PROCESS CRC JMP BTEXT NO RECOGNIZABLE CHARACTERS XTE OCT 0 IO09 EQU WENDC * ACK0R EQU * LDA P01$ JMP HREC,I ACK1R EQU * LDA P0~NLH2$ JMP HREC,I WACKR EQU * LDB P72$ BUMP WACK/TTD JSB BUMP LONG-TERM STAT. LDA P03$ JMP HREC,I RVIR EQU * LDA P04$ JMP HREC,I ENQR EQU * LDA SWORD SPECIAL SZA CASE JMP SCASE YES LDA P05$ JMP HREC,I NAKR EQU * LDB P67$ BUMP NAK JSB BUMP LONG-TERM STAT. LDA P06$ JMP HREC,I EOTR EQU * LDA SWORD SPECIAL SZA CASE JMP EBIT1 YES LDA P07$ JMP HREC,I DEOTR EQU * LDA P08$ JMP HREC,I TTDR EQU * LDA P09$ JMP HREC,I * EBIT1 EQU * STA EBIT SET EOT JMP SCASE RECEIVED SCASE EQU * LDA RNUMB UNLOCK RN JSB $CGRN LDA P01$ STA DEQ14 JMP TEST * LSTC EQU * LDA P15$ TIMEOUT JMP HREC,I RETURN TO LOGICAL * LSTA EQU * LSIA EQU * LSIB EQU * JSB RTRN RETURN TO SYSTEM * * * INTERFACE COMMANDS * * * NCLC.C EQU * NOP XIO02 CLC SC,C JMP CLC.C,I * OTA EQU * NOP XIO03 OTA SC NOP DEBUG JMP OTA,I * LIA EQU * NOP XIO05 LIA SC NOP DEBUG JMP LIA,I SPC 1 * SUBROUTINE TO BUMP LONG-TERM STATISTIC. * CALLING SEQUENCE: LDB * JSB BUMP * BUMP NOP ENTRY. ADB DEQ17 ADD BASE ADDRESS. ISZ B,I BUMP IT. NOP IN CASE OF ROLL-OVER. JMP BUMP,I RETURN. SPC 2 **************************************************** * * * COMMON RETURN * * * **************************************************** RTRN EQU * NOP LDA RTX DETERMINE SZA,RSS RETURN TYPE JMP RTRN1 IG67 SLA,RSS JMP RTRN0 LOGICAL TIMER RTRN2 EQU * LDB DEQ14 GET TRANSMISSION LOG LDA DEQ4 GET SLC STATUS STA EQT05,I LDA SAVA COMPLETION STATUS ISZ IFLAG INTERRUPT SYSTEM ON? STF 0 ENABLE INTERRUPTS JMP CG67,I RTRN1 EQU * LDA DEQ4 GET SLC STATUS STA EQT05,I LDB DEQ14 TRANSMISSION LOG LDA SAVA ISZ IFLAG STF 0 JMP IG67,I RTRN0 EQU * ISZ IFLAG STF 0 JMP LTIM,I SPC 2 **************************************************** * * * DEQUEUE TIMERS * * * **************************************************** DQT EQU * NOP LDA DEQ16 GET TIMER FLAGS ELA,CLE,ERA CLEAR LOGICAL STA DEQ16 TIMER BIT JMP DQT,I RETURN * * SAVE EQU * NOP CLA,INA INDICATE STA RTX INTERRUPT LDA SAVE CALCULATE Z5 ADA N05$ RETURN LDA A,I ADDRESS. STA EXIT JMP SAVE,I * INTON EQU * NOP LDB N01$ INTERRUPT STB IFLAG SYSTEM CLB ON. SFC 0 STORE STB IFLAG ZERO JMP INTON,I * * * DMA IS NOT REQUIRED INHIBIT IT * * * CDMA EQU * NOP ROUTINE TO CLEAR LDA DEQ6 DMA IF AND DMAA CHANNEL CPA P00$ IS JMP CDMA,I IO05B CLC DMAH,C IO13 STF DMAH ALLOCATED JMP CDMA,I RDMA EQU * NOP ROUTINE TO CLEAR AND JSB CDMA RELEASE DMA LDA DEQ6 IF A CHANNEL AND DMAMF IS STA DEQ6 ALLOCATED JMP RDMA,I TEST EQU * ISZ CG67 INCREMENT FOR JSB RTRN CONTINUATION DONE EQU * NOP JSB DQT DEQUE TIMERS LDA IDLE LINE STATE STA DEQ5 EQUALS IDLE JSB RTRN RETURN SPC 5 **************************************************** * * * EQT LINKAGE TABLE * * * **************************************************** SPC 1 * ENTRIES ARE IN DOS-III ORDER * EQTAD DEF DEQ1 BASE ADDRESS FOR EQT DEQ1 NOP DRIVER INITIATION SECTION ADDR DEQ2 NOP DRIVER CONTINUATION SECTION ADDR DEQ3 NOP UNIT-SELECT CODE DEQ4 NOP STATUS DEQ5 NOP LINE STATE DEQ6 NOP I/F CONTROL WORD NOP PLACE HOLDERS NOP (FOR HSLC). DEQ9 NOP CONWD DEQ10 NOP PARAMETER 1 DEQ11 NOP PARAMETER 2 DEQ12 NOP LOGICAL DRIVER DEQ13 NOP LOGICAL DRIVER DEQ14 NOP TRANSMISSION LOG DEQ15 NOP PHYSICAL DRIVER DEQ16 NOP TIMER FLAGS DE Q17 NOP EXTENSION LINK DEQ19 NOP BOARD PARAMETERS DEQ22 NOP LOGICAL READ ADDRESS DEQ23 NOP LOGICAL WRITE ADDRESS DEQ24 NOP LOGICAL CONTROL ADDRESS DEQ34 NOP ADDR PARAMETER FOR HREC, HSND & HCONT DEQ35 NOP LENGTH PARAMETER FOR HREC, HSND & GTEXT SPC 2 N01$ DEC -1 N04$ DEC -4 N05$ DEC -5 N08$ DEC -8 P00$ DEC 0 P01$ DEC 1 P02$ DEC 2 P03$ DEC 3 P04$ DEC 4 P05$ DEC 5 P06$ DEC 6 P07$ DEC 7 P08$ DEC 8 P09$ DEC 9 P10$ DEC 10 P11$ DEC 11 P12$ DEC 12 P15$ DEC 15 P42$ DEC 42 P65$ DEC 65 P67$ DEC 67 P72$ DEC 72 M17$ EQU P15$ M77$ OCT 77 LBYT$ OCT 177400 B15$ OCT 100000 B14$ OCT 40000 B12$ OCT 10000 B11$ OCT 4000 B10$ OCT 2000 B09$ OCT 1000 B06$ OCT 100 B4400 OCT 4400 B4500 OCT 4500 M64$ OCT 177700 ACK0 OCT 2176 ACK1 OCT 4176 AOPEN EQU P01$ CHAN EQU 1673B CLOSE EQU P00$ CNTRL EQU P04$ CONOF OCT 40001 DEOT OCT 16177 DMAA EQU B09$ DMAMF OCT 172777 DMAM EQU B11$ DMAL EQU 0 DMAH EQU 0 EBIT NOP ENQ OCT 77776 EOT OCT 1176 ETX OCT 1775 EXIT NOP ICLCC EQU B11$ IDLE EQU P02$ ILIA EQU M64$ IFLAG NOP IOTA OCT 172700 INCD EQU P67$ ISTCC OCT 103700 .ISTC OCT 1204 ISTF EQU LBYT$ ISTF0 OCT 177300 M8 EQU N08$ MASK0 OCT 77777 MASK1 OCT 7777 MASK2 OCT 7700 MOD16 NOP NIB3 OCT 170000 NAK OCT 0576 PAROF OCT 173777 RECV EQU P03$ RNUMB NOP RTX NOP RCWD1 OCT 2404 RVI OCT 0376 SAVA NOP SCODE NOP SEND EQU P05$ STAT1 NOP STAT2 NOP S2R EQU P06$ SWORD NOP SPECIAL READ FLAG. TTD OCT 7176 TLOGD NOP WACK OCT 3576 TCWD1 EQU P04$ TCWD3 EQU B06$ TCWD4 EQU B11$ DELAY EQU B15$ TCWD5 EQU B06$ END IG67 t  91741-18002 1740 S C0122 DS/1000 MODULE: QUEZ              H0101 bOASMB,R,L,C HED 3000 SLAVE REQ. WATCHDOG * (C) HEWLETT-PACKARD CO. 1977 NAM QUEZ,17,2 91741-16002 REV 1740 770830 SPC 1  ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT QUEZ * EXT EXEC,#LU3K,#QXCL,RNRQ,#QZRN * * QUEZ * SOURCE: 91741-18002 * BINARY: 91741-16002 * PRGMR: JIM HARTSELL * DATE: 17 FEB 76 * * * QUEZ IS A "POLLING PROGRAM" FOR UNSOLICITED SLAVE REQUESTS * FROM THE HP3000. WHEN QUEX HAS NOTHING TO DO, QUEZ IS * SCHEDULED TO WAIT FOR THE SLC DRIVER TO RECEIVE AN "ENQ" * FROM THE 3000. QUEZ THEN WRITES A ZERO LENGTH * REQUEST TO QUEX'S I/O CLASS, TO FORCE QUEX TO * RECEIVE THE PENDING SLAVE REQUEST. * * QUEZ ALSO PERFORMS "LINE OPEN" CALL FOR QUEX SO THAT QUEX * NEED NOT LOCK UP A PARTITION DURING I/O SUSPEND. * QUEZ LDA 1,I GET SCHEDULE PARAM. SZA,RSS NORMAL "POLLING" ENTRY? JMP POLL YES. * * LINE OPEN SECTION. QUEX HAS SCHEDULED QUEZ WITH WAIT. * LDA LOPWD NO. CONFIGURE LINE OPEN CALL. IOR #LU3K STA TEMP * JSB EXEC ISSUE LINE OPEN REQUEST. DEF *+6 (SETS # RETRIES = 7, DEF B2 LONG TIMEOUT = 60 SEC., DEF #LU3K # ID SEQUENCES = 0) DEF B2 GO TO "SEND" STATE. DEF B3 DEF TEMP (QUEX WILL CHECK FOR ERRORS) * JMP EXIT TERMINATE WHEN CALL COMPLETES. SKP * * SLAVE "POLL" SECTION. * POLL LDA SPRWD CONFIGURE SPECIAL READ PARAM. IOR #LU3K STA TEMP LDA #QZRN STA TEMP1 * JSB EXEC ISSUE SPECIAL "READ ENQ". DEF *+6 c   DEF B1 DEF #LU3K DEF TEMP1 RESOURCE NUMBER. DEF B0 DEF TEMP * JSB RNRQ HANG ON ATTEMPT TO LOCK RN. DEF *+4 COMMUNICATION DRIVER WILL UNLOCK DEF GLLCK WHEN AN "ENQ" IS RECEIVED AND QUEZ DEF #QZRN WILL RESUME EXECUTION WITH RN LOCKED. DEF TEMP B0 NOP IGNORE ERROR RETURN. * JSB EXEC CLASS WRITE TO QUEX. DEF *+8 (NO REPLY EXPECTED) DEF CLS20 DEF B0 DEF B0 DUMMY BUFFER ADDRESS. DEF B0 ZERO-LENGTH RECORD. DEF B0 LENGTH PASSED TO QUEX. DEF B0 DEF #QXCL NOP IGNORE ERRORS. * EXIT JSB EXEC TERMINATE. DEF *+2 DEF B6 SPC 1 * ****************************************** * B1 OCT 1 B2 OCT 2 B3 OCT 3 B6 OCT 6 GLLCK OCT 40002 CLS20 OCT 100024 LOPWD OCT 060200 SPRWD OCT 024500 TEMP NOP TEMP1 NOP * END QUEZ ;   91741-18003 1840 S C0222 &QUEX              H0102 [ASMB,R,L,C HED 3000 COMMUN. MONITOR * (C) HEWLETT-PACKARD CO. 1978 NAM QUEX,19,4 91741-16003 REV 1840 780713 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * Z OPTION INCLUDES DEBUG. * ENT QUEX EXT EXEC,D$EQT,#LU3K,D$LID,#LDEF,SLC EXT #QXCL,#RQCV,RNRQ,#MRTH,#QZRN,D$XS5 EXT MESSS,#RSAX,PGMAD,$OPSY IFZ EXT DBUG XIF * * QUEX * SOURCE: 91741-18003 * BINARY: 91741-16003 * JIM HARTSELL * AUG. 25,1975 * L EQU 304 MAXIMUM LINE BUFFER SIZE. * * QUEX PERFORMS COMMUNICATION WITH A REMOTE HP3000 COMPUTER. * ALL MASTER REQUESTORS AND SLAVE MONITORS WISHING TO TRANSMIT * TO AN HP3000 DO SO BY WRITING THEIR BUFFERS TO THE * QUEX I/O CLASS. QUEX HANGS ON A CLASS GET CALL * AND THEN BLOCKS AS MANY REQUESTS/REPLIES AS WILL FIT INTO THE * SEND BUFFER. A "WRITE CONVERSATIONAL" CALL TO THE SYNCHRONOUS * LINE CONTROL PACKAGE (SLC) TRANSMITS THE SEND BUFFER AND * RETURNS A RECEIVE BUFFER. QUEX THEN DE-BLOCKS THE RECEIVE * BUFFER AND DISPATCHES THE REQUESTS/REPLIES TO THE PROPER MONITORS * OR MASTER REQUESTORS VIA CLASS WRITES. THE RECEIVE BUFFER * MAY BE EMPTY. SKP SUP A EQU 0 B EQU 1 * * CHECK FOR DEBUG OPTION. * QUEX EQU * LDA B,I SZA,RSS JMP INITL SCHEDULED BY LSTEN IF P1 = 0. SSA JMP *+3 SCHEDULED FOR DEBUG IF P1 NEGATIVE. STA TRCLU SCHEDULED FOR BUFFER TRACE IF P1 POSITIVE. JMP RESCH (P1 = LU FOR TRACE DUMP) * IFZ JSB DBUG YES. ALLOW DEBUG COMMANDS HERE, DEF *+1 FOLLOWED BY "CONTIN {UE". XIF * RESCH JSB EXEC SAVE RESOURCES & TERMINATE. DEF *+4 LSTEN WILL SCHEDULE QUEX. DEF B6 DEF B0 DEF B1 * JMP QUEX LSTEN CALL STARTS HERE. * * FIRST ENTRY INTO QUEX (SCHEDULED BY LSTEN): * INITIALIZE THE HP3000 COMMUNICATION LINK. * INITL LDB #QXCL SAVE QUEX CLASS NUMBER. ELB,CLE,ERB CLEAR "DISCONNECT" BIT. STB QXCLS * LDA $OPSY RAR,SLA IS THIS AN RTE-III OR IV? RSSI RSS YES. JMP CLEAN NO. LDB RSSI GET "RSS" INSTRUCTION. STB MODI2 MODIFY TO DO CROSS-MAP LOAD. * LDA N180 INITIALIZE DELAY TIME STA DTIME TO 180 SEC (LONG). * * CLEAN JSB ABORT CLEAN OUT PREVIOUS ACTIVITY. * INIT CLA STA ENQFL CLEAR "NEED ENQ" FLAG. * LDA CNTRL CONFIGURE THE CONTROL WORDS. STA TEMP CLOOP LDA TEMP,I GET NEXT. SZA,RSS DONE IF ZERO. JMP WHICH AND B1777 CLEAR LOW 6 BITS. IOR #LU3K INSERT LU OF 3000. STA TEMP,I STORE BACK. ISZ TEMP JMP CLOOP LOOP TILL DONE. * WHICH LDA D$XS5 SET FLAG WHETHER RAR HARD-WIRED OR AND B1 MODEM LINK. STA LINK 0 = HSI, 1 = SSLC. * JSB EXEC ISSUE CLEAR REQUEST. DEF *+6 DEF B2 DEF #LU3K DEF B0 DEF B3 DEF CLRWD * JSB SLCER CHECK FOR ERRORS. OCT 0 * JSB SLC INITIALIZE SLC. DEF *+3 DEF #LU3K LU OF THE 3000. DEF D$EQT EQT EXTENSION ADDRESS. * SZA,RSS JMP LNOPN * LDA D18 INITIALIZATION ERROR. JMP ERR SPECIAL "SLCER" USAGE. * LNOPN LDA LINK MODEM LINK? SZA,RSS JMP LNOP NO. * JSB EXEC YES. DISPLAY DEF *+5 ">> HP 3000: READY FOR DIALING" DEF B2 DEF B1 DEF DIALM DEF D15 * LNOP JSB EXEC SCHEDULE QUEZ WITH WAIT TO DEF *+4 PERFORM LINE OPEN REQUEST. DEF D9 (THIS KEEPS QUEX FROM LOCKING DEF QUEZ UP PARTITION WHILE IN I/O SUSPEND.) DEF B1 SCHEDULE PARAM FOR QUEZ. * JSB SLCER CHECK FOR ERRORS. OCT 1 * LDA D$LID ADDR OF LOCAL ID IN "RES". LDB Q$LID ADDR OF LOCAL ID AREA IN QUEX. MVW D19 MOVE LOCAL & REMOTE ID STORED IN "RES" * LDA LOCID GET BYTE LENGTH OF LOCAL ID. SZA,RSS JMP RDISQ ZERO. NO LOCAL ID, OR HSI SYSTEM. * JSB EXEC ESTABLISH LOCAL ID SEQUENCE. DEF *+6 DEF B2 DEF #LU3K DEF B1 DEF LOCID DEF LIDSQ * JSB SLCER CHECK FOR ERRORS. OCT 0 * RDISQ LDA REMID GET BYTE LENGTH OF REMOTE ID. SZA,RSS JMP CERP ZERO. NO REMOTE ID, OR HSI SYSTEM. * JSB EXEC ESTABLISH REMOTE ID SEQUENCE. DEF *+6 DEF B2 DEF #LU3K DEF B1 DEF RCVID DEF RIDSQ * JSB SLCER CHECK FOR ERRORS. OCT 0 * CERP JSB EXEC CHANGE ERROR RECOVERY PARAMETERS. DEF *+6 DEF B2 DEF #LU3K DEF D20 # RETRIES = 20. DEF B7 LONG TIMEOUT = 21 SEC. DEF ERCWD * JSB SLCER CHECK FOR ERRORS. OCT 0 * SNENQ JSB EXEC ISSUE WRITE INQUIRY REQUEST. DEF *+6 DEF B2 DEF #LU3K DEF B1 DEF B0 DEF WNQWD * JSB SLCER CHECK FOR ERRORS (IGNORE EOT). OCT 2 * DLD UP 3000 LINK IS "UP". DST STMSG+16 LDA UP+2 STA STMSG+18 * JSB EXEC DISPLAY STATUS MESSAGE ON LU 1. DEF *+5 DEF B2 DEF B1 DEF STMSG DEF D20 * LDA N180 SET DELAY TIME TO STA DTIME 180 SECONDS (LONG). * * SEND INITIALIZATION REQUEST. * LDA XLEN STORE MAX. SIZE, CLB DIV D16 ADA N1 STA B ALF,ALF IOR B AND CURRENT SIZE. STA STRTM+4 * LDA STRTM ADDR OF INIT. REQUEST. LDB SBFAD ADDR OF SEND BUFFER. MVW D8 MOVE INIT. REQUEST TO "SEND" * LDA N16 SET SEND LENGTH (TLEN). STA TLEN LDA SBFAD SET FWA OF RECEIVE SECTION. ADA D8 STA SBUFR * JMP REMIO GO SEND INIT. REQUEST. SKP * * WAIT FOR THE 3000 TO SEND SOMETHING BY SCHEDULING "QUEZ". * WAIT FOR SOMETHING TO SEND TO THE HP3000 BY HANGING ON * A CLASS I/O GET WITH WAIT TO QUEX'S I/O CLASS. * BLOCK AS MANY REQUESTS/REPLIES FROM QUEX'S I/O CLASS * BUFFER AS WILL FIT IN THE TRANSMIT BUFFER. * WATCH JSB PGMAD IS QUEZ ACTIVATED? DEF *+4 DEF QUEZ DEF TEMP DEF TEMP1 * LDA TEMP1 (A) = PROGRAM STATUS. SZA,RSS JMP SCHED NO. GO SCHEDULE QUEZ. * JSB RNRQ YES, BUT SPECIAL READ NOT IN EFFECT. DEF *+4 UNLOCK QUEZ SO THAT IT CAN BE DEF GLCLR RE-SCHEDULED FOR A SPECIAL READ. DEF #QZRN (QUEZ WILL FALL THRU IT'S RN DEF TEMP LOCK REQUEST & LEAVE RN LOCKED.) NOP * CLA,INA SIGNAL TO IGNORE QUEZ'S STA IGNOR DYING CLASS WRITE. * SCHED JSB EXEC SCHEDULE QUEZ TO LOOK FOR DEF *+4 SLAVE REQUESTS FROM THE 3000. DEF D10 DEF QUEZ DEF B0 SET SCHEDULE OPTION CODE. * NEWGT CLA INITIALIZE LENGTH (BYTES) STA TLEN OF TRANSMIT BUFFER. LDA SBFAD INITIALIZE CURRENT XMIT STA SBUFR BUFFER ADDR FOR CLASS READS. * GET JSB EXEC CLASS I/O GET TO LOOK FOR DEF *+6 MASTER REQUESTS FROM RTE USERS. DEF CLS21 NO ABORT. DEF QXCLS QUEX I/O CLASS. SBUFR NOP DEF MXLEN BUFFER LENGTH. DEF LOG RETURNED BLOCK LENGTH (WORDS). NOP IGNORE ERROR RETURN. * * THE 6ZCLASS GET HAS COMPLETED. IF RECEIVED DATA LENGTH IS ZERO, * THE 3000 WANTS TO SEND A SLAVE REQUEST OR A MASTER REPLY. * IF NON-ZERO, THE RTE IS SENDING A MASTER REQUEST OR SLAVE REPLY. * LDA LOG IS QUEZ TELLING US THE 3000 IS SENDING? SZA JMP BLKIN NO. ACCUMULATE OUTGOING REQUESTS. * LDA IGNOR YES. ARE WE TO IGNORE THIS ONE? SZA,RSS JMP CLRQZ NO. NEED TO SERVICE THE 3000. CLA YES. GO BACK TO THE GET. STA IGNOR JMP NULGT * CLRQZ LDA SBUFR IS THERE ANYTHING IN "SEND BUFFER"? CPA SBFAD (I.E. ABOUT TO DO WRITE CONVERSATIONAL?) JMP RCENQ NO. GO DO "READ INITIAL". CLA,INA YES. KEEP GOING, BUT MAKE SURE STA ENQFL WE SEND AN ENQ BEFORE THE JMP NULGT WRITE CONVERSATIONAL. * * THE SEND BUFFER CONTAINS MASTER REQUESTS AND/OR SLAVE REPLIES, * BUT BEFORE IT COULD BE SENT, THE 3000 HAS SENT A REQUEST. * WRITE THE CONTENTS OF THE SEND BUFFER BACK TO QUEX'S I/O CLASS * AND SERVICE THE 3000 REQUEST. (HAPPENS ONLY IF RTE IS SECONDARY.) * PREMP LDA TLEN GET NEGATIVE # BYTES. CMA,INA MAKE POSITIVE WORDS. INA ARS STA TEMP LDA SBFAD RESET SEND BUFFER POINTER. STA SBUFR * JSB EXEC CLASS WRITE BACK TO QUEX. DEF *+8 DEF CLS20 DEF B0 DEF SBUFR,I ADDR OF SEND BUFFER. DEF TEMP LENGTH. DEF TEMP DEF B0 DEF QXCLS NOP IGNORE ERROR RETURN. * JMP RCENQ NOW GO DO "READ INITIAL". * * A BLOCK HAS BEEN ADDED TO THE TRANSMIT BUFFER. * ADVANCE BUFFER POINTERS AND COUNTERS. * BLKIN LDA SGNOF INIT. REQ. EXCHANGED YET? SZA JMP NULGT NO. IGNORE. (SHOULDN'T HAPPEN) CLA CHECK VALIDITY. LDB SBUFR JSB VERIF JMP NULGT INVALID: IGNORE. * LDA LOG ADD LEN OF BLOCK IN NEG BYTES CLE,ELA TO TOT?AL XMIT BYTE LEN (NEG) CMA,INA THAT HAVE BEEN ACCUMULATED. ADA TLEN STA TLEN * LDA SBUFR ADVANCE CURRENT XMIT BUFR PTRS. ADA LOG STA SBUFR * * ISSUE A NULL GET CALL TO QUEX'S I/O CLASS TO SEE * IF THERE IS ANOTHER PENDING REQUEST AND TO SEE WHETHER * THERE IS ROOM IN THE TRANSMIT BUFFER. ISSUE THE GET * WITHOUT WAIT, SAVE CLASS BUFFER, AND BUF LEN = 0. * NULGT LDA QXCLS HAS BIT 13 SET (NO DE-ALLOCATE). IOR B1400 SET BITS 14,15 (NO-WAIT & BUFFER SAVE). STA QCLAS * JSB EXEC CLASS GET (DUMMY). DEF *+6 DEF CLS21 NO ABORT. DEF QCLAS QUEX I/O CLASS. DEF B0 DUMMY BUFFER. DEF B0 ZERO LENGTH BUFFER. DEF LOG RETURNED BLOCK LENGTH (WORDS). NOP IGNORE ERROR RETURN. * SSA WAS THERE ANYTHING THERE? JMP REMIO NO. GO SEND WHAT WE HAVE. * * A REQUEST IS IN THE CLASS BUFFER. SEE IF THERE * IS ROOM TO BLOCK IT INTO THE TRANSMIT BUFFER. * LDA SBUFR CMA,INA ADA RBFAD # WORDS LEFT IN XMIT BUFR. INA CMA,INA NEGATE. ADA LOG ADD LENGTH OF BLOCK (WORDS). SSA JMP GET FITS. GO READ IT IN. * * IF THERE WAS NO ROOM FOR THE LAST BLOCK, IT IS STILL IN * THE CLASS BUFFER AND WILL BE PICKED UP NEXT TIME AROUND. * * SEND THE BLOCKS TO THE HP3000 AND WAIT FOR INCOMING BLOCKS. * REMIO LDA SBUFR SET FWA OF RECEIVE BUFFER. CPA SBFAD JMP NEWGT IGNORE OPERATION IF EMPTY BUFFER. STA RBUFR * LDA ENQFL DO WE NEED TO DO A SZA,RSS "WRITE INQUIRY"? JMP WRCON NO. * JSB EXEC ISSUE WRITE INQUIRY. DEF *+6 DEF B2 DEF #LU3K DEF B1 DEF B0 DEF WNQWD * CLA STA ENQFL CLEAR ENQ FLAG. * JSB SLCER CHECK FOR ERRORS. OCT 2 * CPA D13 JMP PREMP RECEIVED ENQ (IF RTE SECONDARY). * WRCON LDA TLEN SAVE 1ST WORD OF WC BUFFER. STA LOC * JSB EXEC WRITE CONVERSATIONAL. DEF *+6 DEF B2 DEF #LU3K DEF TLEN ADDR OF SEND BUFFER. DEF BFLEN LEN OF RECEIVE BUFFER (-BYTES). DEF CONWD CONTROL WORD. * LDA LOC CHECK FOR DRIVER MALFUNCTION. CPA TLEN JMP WRCR OK. LDA D19 DRIVER CLOBBERED WC BUFFER. JMP ERR * WRCR CPB B2 TREAT 2 BYTES AS ZERO. CLB STB WCLOG SAVE POSITIVE # BYTES. * JSB SLCER CHECK FOR SLC ERROR. OCT 3 CPA B5 JMP EOT EOT RECEIVED. JMP CKLEN * RCENQ LDA SBFAD SET UP BUFFER POINTER STA RBUFR TO "RECEIVE" SECTION. LDA TLEN SAVE 1ST WORD OF WC BUFFER. STA LOC * JSB EXEC ISSUE "READ INITIAL" CALL. DEF *+6 DEF B1 DEF #LU3K DEF RBUFR,I DEF BFLEN DEF RDIWD * LDA LOC CHECK FOR DRIVER MALFUNCTION. CPA TLEN JMP RIR OK. LDA D20 DRIVER CLOBBERED WC BUFFER. JMP ERR * RIR STB WCLOG * JSB SLCER CHECK FOR ERRORS. OCT 4 * CPA B5 JMP DONE RECEIVED EOT (HSI). * LDB WCLOG CHECK TRANSMISSION LOG. SZB,RSS JMP RESET SEND EOT IF ZERO. CPB B2 JMP RESET SEND EOT IF 2 BYTES. * JMP CKLEN * * EOT RECEIVED. TREAT AS EMPTY BUFFER. * EOT CLA,INA SIGNAL NEED TO "WRITE ENQ" STA ENQFL BEFORE NEXT WRITE CONVERSATIONAL. JMP WATCH * * REQUESTS AND/OR REPLIES HAVE BEEN RECEIVED FROM * THE 3000. FOR REQUESTS, DO A CLASS WRITE TO THE * CORRESPONDING MONITOR. FOR REPLIES, DO A CLASS * WRITE TO THE "TO PROCESS #". * CKLEN LDA WCLOG DID WE GET EMPTY BLOCK? SZA JMP DATA NO. * INA YES. IF DATA WAS SENT, LDB TLEN V SET "SNZRO" TO SEND SZB 0-LEN. STA SNZRO JMP DONE * DATA CLA STA TLOG RESET # OF PROCESSED BYTES. CLA,INA SET FLAG TO SEND 0-LEN DATA IF STA SNZRO QUEX HAS NOTHING TO SEND. * * GET TO THE NEXT BLOCK. * DISP LDA TLOG IS THERE ANOTHER BLOCK? INA CMA,INA (SUBTRACT PROCESSED # BYTES ADA WCLOG FROM TOTAL RECEIVED # BYTES.) SSA JMP DONE NO. SERVICING COMPLETE. * LDA WCLOG CHECK REMAINING LENGTH. ADA N16 IGNORE IF LESS THAN 16 BYTES. SSA JMP DONE SERVICING COMPLETE. * * DETERMINE WHETHER IT IS A REQUEST FROM THE 3000 * OR A REPLY TO AN RTE REMOTE REQUEST. * CLA,INA CHECK VALIDITY. LDB RBUFR JSB VERIF JMP NEXT INVALID REQUEST. IGNORE. LDA RBUFR GET LENGTH OF REPLY ADA B7 IN WORDS. LDA A,I INA CLE,ERA ADA D8 STA BUFL * JSB GTSTM GET STREAM WORD. SSA,RSS IF BIT 15 SET, IT IS A REPLY. JMP REQCL REQUEST. * AND B400 IF 3000 IS SZA REJECTING AN RTE REPLY, JMP NEXT SKIP IT. * LDA RBUFR,I $STDLIST REPLY? AND B377 CPA B5 JMP RPCNV YES. SCHEDULE "RPCNV". JMP REPLY NO. * * A REQUEST HAS ARRIVED FROM THE 3000. * DISPATCH THE REQUEST. * REQCL LDA RBUFR,I GET MESSAGE CLASS IN (A). AND B377 STA TEMP1 SZA,RSS IF SPECIAL MESSAGE CLASS JMP MZERO ZERO, GO PROCESS. LDA SGNOF INIT. REQ. EXCHANGED YET? SZA JMP REJCT NO. REJECT. JSB GTSTM GET STREAM TYPE. RAL IF REJECT BIT SET, SSA JMP REPLY TREAT AS REPLY. RAR AND B377 ISOLATE AND SAVE STREAM TYPE. STA TEMP2 * LDA TEMP1 CHECK FOR "INTERMEDIATE" REPLY ALF,ALF I TO A PREVIOUSLY SENT PREAD-ACCEPT IOR TEMP2 WITH CONTINUATION. CPA M4S26 JMP RPCNV YES. AWAKEN RPCNV. * LDA TEMP1 CPA B5 MESSAGE CLASS = 5? RSS JMP REQ NO. LDB RBUFR YES: GET "TO PROCESS #". ADB B4 LDA B,I AND B377 SZA IF NON-ZERO TREAT AS A "REPLY" JMP REPLY TO MASTER REQUEST. * REQ LDA BUFL 8-WORD BLOCK? CPA D8 RSS JMP RQCNV NO. * LDA TEMP1 YES. IS IT MESSAGE CLASS 8? CPA D8 (DEXEC OR RFA TO RTE) JMP *+2 JMP RQCNV NO. * RPCNV LDA RBUFR YES. RETRIEVE WORD 7 OF REQUEST ADA B6 AND PASS TO RPCNV (3000 REC. ID). LDA A,I STA TEMP * JSB EXEC SCHEDULE "RPCNV" WITH PASSWORD. DEF *+5 (RPCNV IS WAITING FOR THIS DEF D24 "INTERMEDIATE REPLY") DEF NAMRP NOTE--IF RPCNV ISN'T DORMANT, DEF PASWD QUEX WILL WAIT. DEF TEMP PASS 3000 RECORD ID AS PARAM #2. * JMP NEXT GO DISPATCH NEXT REQUEST. * RQCNV JSB EXEC WRITE REQUEST TO RQCNV'S CLASS. DEF *+8 DEF CLS20 DEF B0 DEF RBUFR,I DEF BUFL DEF B0 DEF B0 DEF #RQCV CLASS NUMBER OF RQCNV. JMP REJCT ERROR RETURN. * JMP NEXT GO DISPATCH NEXT BLOCK. * * MESSAGE CLASS ZERO RECEIVED: PROCESS INITIALIZATION OR * TERMINATION REQUEST. * MZERO JSB GTSTM CHECK STREAM TYPE. CPA B20 JMP MINIT INITIALIZATION REQUEST. CPA B21 TERMINATION REQUEST? RSS JMP NEXT NO. LDA B,I GET STREAM WORD AGAIN. RAL TERMINATION REJECTED? SSA JMP NEXT YES. JSB DCNCT TERMINATION REQUEST. JMP CLOSE (NO REPLY IS SENT TO THE 3000) * MINIT ADB B2 IF EXCLUSIVE ACCESS REQUESTED, LDA B,9I ALF,ALF AND B377 SZA,RSS JMP REJCT REJECT IT. ADB N2 IOR BIT15 PREPARE INITIALIZATION REPLY. STA B,I INB LDA XLEN COMPUTE (LEN/16)-1 CLB DIV D16 ADA N1 STA B,I STORE IN REPLY. JSB CNNCT ESTABLISH "CONNECT" STATUS. JMP TOQX GO WRITE TO QUEX'S CLASS. * * THE 3000 HAS FOUND NOTHING TO DO (NO HELLO OUTSTANDING AND * NO SLAVE ACTIVITY) AND HAS DISCONNECTED THE LINE, OR AN * ABORTIVE COMMUNICATION ERROR HAS OCCURRED. CLOSE THE * LINE AND RE-INITIALIZE THE DRIVER AND QUEX. * CLOSE JSB EXEC WRITE DISCONNECT. DEF *+6 DEF B2 DEF #LU3K DEF B0 DEF B0 DEF WRDIS * LNCLO JSB EXEC CLOSE THE LINE. DEF *+6 DEF B2 DEF #LU3K DEF B0 DEF B3 DEF LCLWD * LDA D$XS5 RESET TO "SECONDARY" MODE. AND N2 STA D$XS5 * LDA LINK IS THIS A MODEM LINK? SZA,RSS JMP INIT NO. * JSB EXEC YES. DISPLAY DEF *+5 ">> HP 3000: DISCONNECT" DEF B2 DEF B1 DEF SNOFF (QUEX WILL HANG IN "LINE OPEN" DEF D11 UNTIL EITHER END RE-DIALS.) * JMP INIT GO RE-INITIALIZE. SKP * * SEND "REJECT" REPLY FOR ILLEGAL REQUESTS. * REJCT JSB GTSTM SET REJECT BIT. IOR B400 STA B,I ADB B2 REVERSE PROCESS NUMBERS. LDA B,I ALF,ALF STA B,I * TOQX JSB EXEC WRITE TO QUEX'S I/O CLASS DEF *+8 FOR TRANSMISSION TO THE 3000. DEF CLS20 DEF B0 DEF RBUFR,I DEF D8 DEF D8 DEF B0 DEF QXCLS NOP IGNORE ERROR RETURN. * JMP NEXT GO DISPATCH NEXT BLOCK. SKP * * REPLY TO AN RTE REMOTE REQUEST. THE "TO PROCESS #" * IS THE I/O CLASS OF THE ORIGINATING USER. WRITE * THE REPLY TO THAT CLASS NUMBER. * NREPLY LDA RBUFR,I MESSAGE CLASS ZERO? AND B377 SZA JMP REP1 NO. JSB GTSTM YES. CHECK STREAM TYPE. AND B377 CPA B20 INITIALIZATION REPLY? JMP CONCT YES. CPA B21 NO TERMINATION? JMP CLOSE YES. JMP NEXT NO. * CONCT JSB CNNCT YES. ESTABLISH "CONNECT" STATUS. LDA D$XS5 SET MODE TO "PRIMARY". IOR B1 STA D$XS5 JMP NEXT GO PROCESS NEXT BLOCK. * REP1 CPA B6 MESSAGE CLASS 6? RSS JMP REP2 NO. JSB GTSTM YES. STREAM 21? AND B377 CPA B21 RSS JMP REP2 NO. * * BYE REPLY RECEIVED. CHECK IF THIS IS LAST HELLO OUTSTANDING. * LDB #LDEF YES. GET ADDR OF PNL HEADER ADDR. ADB N1 LDB B,I GET ADDR OF PNL HEADER. JSB LODWD GET ADDR OF 1ST PNL ENTRY. SZA,RSS JMP STDIS IF ZERO, SET DISCONNECT FLAG. LDB A JSB LODWD GET ADDR OF 2ND PNL ENTRY. SZA JMP REP2 MORE THAN ONE HELLO OUTSTANDING. * STDIS CLA,INA SET DISCONNECT FLAG. STA DCNFL * * PROCESS REPLY. * REP2 JSB GTSTM GET STREAM WORD. RAL CHECK REJECT BIT. SSA JMP NEXT SET: IGNORE REPLY. ADB B2 LDA B,I AND B377 CLASS NUMBER. STA TEMP1 SAVE 8-BIT CLASS NUMBER. * LDB #MRTH GET ADDR OF 1ST MASTER LIST ENTRY. SLOOP SZB,RSS JMP NOCLS CLASS NOT FOUND. STB TEMP ADB B3 SEARCH FOR CLASS NUMBER JSB LODWD IN MASTER-LIST IN "RES". AND B377 CPA TEMP1 JMP FULCL FOUND IT. LDB TEMP GO TO NEXT ENTRY. JSB LODWD LDB A JMP SLOOP * NOCLS LDA RBUFR,I MESSAGE CLASS 5? AND B377 CPA B5 RSS JMP NEXT NO. IGNORE. LDB RBUFR YES. CLEAR "TO PROCESS #". ADB B4 LDA B,I AND HB377  STA B,I JMP REQ GO PASS TO "CNSLM" MONITOR. * FULCL JSB LODWD GET FULL CLASS WORD. ELA,CLE,ERA STA CLASN * JSB EXEC CLASS WRITE TO MASTER REQUESTOR. DEF *+8 DEF CLS20 NO ABORT. DEF B0 RBUFR NOP DEF BUFL DEF B0 DEF B0 DEF CLASN MASTER'S CLASS NUMBER. NOP IGNORE ERROR. * NEXT LDA BUFL BLOCK PROCESSED: CLE,ELA ADA TLOG UPDATE COUNTER. STA TLOG LDA RBUFR UPDATE POINTER INTO ADA BUFL RECEIVE BUFFER. STA RBUFR * JMP DISP GO CHECK FOR ANOTHER BLOCK. * * ALL RECEIVED BLOCKS HAVE BEEN DISPATCHED. * DONE CLA CLEAR "NEED ENQ" FLAG. STA ENQFL LDA QXCLS ISSUE A NULL GET CALL TO SEE IF IOR B1400 THERE IS ANYTHING IN QUEX'S CLASS. STA QCLAS * JSB EXEC CLASS GET. (NEW BUFFERS MAY HAVE BEEN DEF *+6 ADDED WHILE QUEX WAS I-O SUSPENDED). DEF CLS21 DEF QCLAS DEF B0 DEF B0 DEF LOG NOP IGNORE ERROR RETURN. * SSA ANYTHING THERE? JMP NOMOR NO. * LDA LOG YES. SZA ZERO LENGTH BUFFER? JMP CLRRD NO. NOP YES. QUEZ DID IT JUST BEFORE THE INA WRITE CONVERSATIONAL. REQUEST HAS STA IGNOR ALREADY BEEN READ, SO IGNORE IT. * NOMOR LDA DCNFL ARE WE TO ATTEMPT DISCONNECT? SZA,RSS JMP CKDAT NO. * CLA YES. SEND TERMINATION REQUEST. STA DCNFL LDA TRMRQ MOVE TERMINATION REQUEST TO LDB RBUFR CURRENT RBUFR LOCATION. MVW D8 JMP TOQX GO WRITE TO QUEX. * CKDAT LDA SNZRO DID WE RECEIVE DATA? SZA,RSS JMP RESET NO. RECEIVED 0-LENGTH. CLA YES. TELL 3000 WE HAVE NOTHING STA SNZRO TO SEND. STA TLEN SEND AN EMPTY BLOCK vNLHTO THE 3000. LDA SBFAD (WILL RECEIVE EOT) STA RBUFR JMP WRCON (DON'T SEND ENQ). * RESET JSB EXEC PERFORM "WRITE RESET" (SEND EOT). DEF *+6 DEF B2 DEF #LU3K DEF B0 DEF B0 DEF RESWD * JSB SLCER CHECK FOR ERRORS. OCT 5 * CLA,INA SET "SEND ENQ" FLAG. STA ENQFL * JMP WATCH * CLRRD CLA CLEAR "RECEIVED DATA" FLAG. STA SNZRO JMP NEWGT GO HANG ON GET. SPC 3 * * ESTABLISH "DISCONNECT" STATUS (CHECKED BY UPLIN, D3KMS, D3KCL). * DCNCT NOP CLA,INA SET SIGN OFF FLAG. STA SGNOF LDA #QXCL SET DISCONNECT FLAG IN #QXCL IOR BIT15 TO INDICATE DISCONNECT STATUS. STA #QXCL JMP DCNCT,I RETURN. * * ESTABLISH "CONNECT" STATUS. * CNNCT NOP CLA CLEAR SIGN OFF FLAG. STA SGNOF LDA #QXCL CLEAR DISCONNECT FLAG IN #QXCL ELA,CLE,ERA TO INDICATE CONNECT STATUS. STA #QXCL JMP CNNCT,I RETURN. SKP * * SUBROUTINE TO VERIFY AUTHENTICITY OF REQUESTS AND REPLIES * BEING SENT OR RECEIVED. * * ON ENTRY, (A) = 0 IF OUTGOING REQ/REPLY, * = 1 IF INCOMING REQ/REPLY. * (B) = BUFFER ADDRESS OF REQ/REPLY. * VERIF NOP N STA TEMP SAVE DIRECTION CODE. STB TEMP2 SAVE ADDR FOR POSSIBLE DUMP. * LDA B,I CHECK WORD 1: SZA,RSS JMP BADBF ERROR IF ZERO. AND B377 ISOLATE MESSAGE CLASS. ADA N9 SSA,RSS JMP BADBF ERROR IF MESSAGE CLASS .GT. 8. * ADB B2 CHECK WORD 3: LDA B,I AND B377 ISOLATE STREAM TYPE. ADA NB20 SSA JMP BADBF ERROR IF .LT. OCTAL 20. ADA NB10 SSA,RSS JMP BADBF ERROR IF .GT. OCTAL 27. * ADB B5 CHECK WORD 8: LDA B,I SSA JMP BADBF ERROR IF NEGATIVE. * LDB TEMP2 VERIFY THAT ADB B7 WDCNT .LE. N(WORDS) + 8. LDB B,I INB CLE,ERB ADB D8 INB CMB,INB LDA TEMP2,I ALF,ALF AND B377 ADA B SSA,RSS JMP BADBF ERROR. ISZ VERIF NO ERROR, TAKE NORMAL RETURN. LDA TRCLU TRACE OPTION REQUESTED? SZA,RSS JMP VERIF,I NO. STA DMPLU YES. SET LU FOR BUFFER DUMP. JMP DSPLY * BADBF LDA DRECV INITIALIZE FOR "RECEIVED". LDB TEMP CHECK DIRECTION FLAG. SZB,RSS LDA DOUTG CHANGE TO "OUTGOING". LDB DINSR GET ADDR IN MAIN MESSAGE. MVW B5 MOVE DIRECTION MESSAGE. * JSB EXEC DISPLAY DEF *+5 ">> HP 3000: BAD BUFFER RECEIVED". DEF B2 OR DEF B1 ">> HP 3000: BAD BUFFER OUTGOING". DEF BDBUF DEF D16 * LDA B1 DISPLAY ON LU 1. STA DMPLU * DSPLY LDB TEMP2 ALSO DISPLAY BUFFER ON LU 1. ADB B7 LDB B,I CLE,ERB ADB D8 TOTAL # WORDS IN BUFFER. LDA TEMP2,I ALF,ALF AND B377 # WORDS NOT COUNTING DATA. CPA B377 GUARD AGAINST 377. RSS JMP *+3 LDB D8 JMP BAD2 CPA B CHECK IF THERE IS DATA. RSS ADA D10 DATA: SHOW 1ST 10 WORDS ONLY. STA B (B) = # WORDS TO DUMP. BAD2 LDA TEMP2 (A) = FWA BUFFER. JSB TRACE DUMP THE BUFFER. * JMP VERIF,I TAKE ERROR EXIT. SKP * * SUBROUTINE TO LOAD WORD FROM ALTERNATE MAP (IF RTE-III OR IV). * LODWD NOP MODI2 LDA B,I GET WORD FROM TCB (RSS IF DMS SYSTEM). JMP LODWD,I RETURN IF RTE-II. XLA B,I LOAD WORD FROM ALTERNATE MAP. JMP LODWD,I RETURN. SPC 3 * * RETURN (A) = STREAM WORD, (B) = ADDR OF STREAM WORD. * GTSTM NOP LDB RBUFR ADB B2 LDA B,I JMP GTSTM,I SKP * * SUBROUTINE TO CHECK STATUS AFTER SLC CALLS. * SLCER NOP * JSB EXEC ISSUE STATUS CALL. DEF *+5 DEF D13 DEF #LU3K CURRENT HP3000 LU. DEF STATS COMPLETION STATUS (EQT WORD 5). DEF TEMP2 EQT WORD 4. * LDA STATS WAS THERE AN ERROR? AND B37 STA STATS SZA,RSS JMP ERREX NO. RETURN. (A) = 0. * ERR LDB ETABL ADDR OF ERROR MESSAGE TABLE. ADB A ADD STATUS CODE. LDB B,I GET ADDR OF ERROR MESSAGE. SZB JMP ABT NON-ZERO. SET UP ERROR MESSAGE. * LDA STATS CPA B6 WHEN DLE EOT (HANGUP) IS RECEIVED, JMP LNCLO QUEX MUST ISSUE "LINE CLOSE." ERREX ISZ SLCER JMP SLCER,I RETURN TO CALLER. (A)=NON-ABORT CODE. * ABT STB A ADDR OF ERROR MESSAGE. LDB MSGA1 STORAGE ADDR IN MAIN MESSAGE. MVW D8 MOVE ERROR MSG TO MAIN MESSAGE. * LDA DTIME IF DELAY TIME IS CPA N9 9 SECONDS (SHORT), JMP SKPRT SKIP PRINT. * LDA SLCER,I PLACE TYPE OF CALL IN MESSAGE. MPY B5 ADA DCTN LDB DEM11 MVW B5 * DLD DOWN INSERT "*DOWN*". DST STMSG+16 LDA DOWN+2 STA STMSG+18 * JSkB EXEC DISPLAY ERROR MSG ON LU 1. DEF *+5 DEF B2 DEF B1 DEF STMSG DEF D39 * SKPRT JSB ABORT PERFORM GLOBAL ABORT. * LDA LINK MODEM LINK? SZA JMP CLOSE YES. DON'T SUSPEND. * JSB EXEC PUT QUEX IN TIME LIST. DEF *+6 DEF SCHTM DEF B0 DEF B2 UNITS = SECONDS DEF B0 DEF DTIME DELAY TIME = -180 OR -9 NOP * LDA N9 SET DELAY TIME TO STA DTIME 9 SECONDS (SHORT). * JMP CLOSE CLOSE LINE AND RESTART. * * DCTN DEF *+1 ASC 5, ASC 5, LINE OPEN ASC 5, SEND ENQ ASC 5, WRITE CON ASC 5, READ INIT ASC 5, SEND EOT DTIME BSS 1 DELAY TIME = 180 SEC WHEN LINE N180 DEC -180 FIRST GOES DOWN, 9 SEC AFTERWARD. SKP * * GLOBAL HP 3000 ABORT SUBROUTINE - KILL EVERYTHING FOR FRESH START: * ABORT ALL COMMUNICATION ACTIVITY CURRENTLY IN PROGRESS. * NEW REQUESTS ARE BLOCKED SINCE HP 3000 IS IN "DISCONNECT" STATUS. * ABORT NOP JSB DCNCT ESTABLISH "DISCONNECT" STATUS. * JSB PGMAD CHECK STATUS OF QUEZ. DEF *+4 DEF QUEZ DEF TEMP ID SEG ADDR. DEF TEMP1 PROGRAM STATUS. * LDA TEMP * JSB KILIT ABORT QUEZ IF NOT DORMANT. * HUPLN JSB PGMAD MAKE SURE QUEX DIDNT INTERRUPT UPLIN. DEF *+4 DEF UPLIN DEF TEMP DEF TEMP1 * LDA TEMP1 WAS UPLIN RUNNING? SZA,RSS JMP UPLN NO. * JSB EXEC YES. GO INTO TIME LIST FOR DEF *+6 500 MILLISECONDS. DEF D12 DEF B0 DEF B1 DEF B0 DEF N50 * JMP HUPLN GO CHECK UPLIN AGAIN. * UPLN JSB EXEC HOLD OFF UPLIN BY PUTTING IN DEF *+6 TIME LIST TO RUN IN ONE MINUTE. DEF SCHTM DEF UPLIN DEF B3 DEF B1 DEF N1 NOP IGNORE ERROR RETURN. * M LDA QXCLS QUEX CLASS # /NO DE-ALLOC (BIT13). IOR BIT15 SET NO-WAIT BIT (#15). STA CLASN RELEASE BUFFER. * FLUSH JSB EXEC FLUSH QUEX'S I/O CLASS. DEF *+5 DEF CLS21 DEF CLASN DEF B0 DEF B0 RSS IGNORE ERRORS. * SSA,RSS ANYTHING THERE? JMP FLUSH YES. KEEP FLUSHING. * LDB #LDEF ADDR OF MASTER LIST HEADER ADDR. INB LDB B,I GET ADDR OF MASTER HEADER. CKMST STB TEMP1 ADDR OF MASTER HEADER. CKMS2 LDB TEMP1 ADDR OF NEXT TCB ADDR. JSB LODWD (CROSS) LOAD ADDR OF NEXT TCB. SZA,RSS JMP PNLST NO MORE MASTER TCBS TO PROCESS. * * MASTER LIST ENTRY FOUND FOR AN ACTIVE MASTER REQUEST. * ONLY IF IT IS FOR A HP 3000 USER, ABORT THE USER, * RELEASE MASTER CLASS NUMBER, AND DELETE LIST ENTRY. * STA TEMP3 SAVE ADDR IN CASE WE HIT DS-1 REQUEST. LDB A INB POINT TO FLAGS-TIMEOUT WORD. JSB LODWD (CROSS) LOAD. RAL CHECK "3000 REQ" BIT. SSA,RSS SET? JMP CKMS3 NO. THIS IS A DS/1000 REQUEST! INB YES. POINT TO SEQ # WORD. JSB LODWD (CROSS) LOAD SEQUENCE NUMBER. STA TEMP SAVE FOR TCB RELEASE. INB POINT TO CLASS NUMBER WORD. JSB LODWD (CROSS) LOAD CLASS NUMBER. IOR BIT15 INCLUDE NO-WAIT BIT (#15), STA CLASN AND SAVE FOR CLASS # RELEASE. INB POINT TO ID SEG ADDR WORD. JSB LODWD (CROSS) LOAD ID SEG ADDR OF THIS USER. * JSB KILIT ABORT THE USER VIA "OF,XXXXX,1". * CREPT CCA RELEASE MASTER CLASS NUMBER (FLUSH). STA TEMP2 SET RELEASE RE-TRY SWITCH TO -1. * CLRTN JSB EXEC RELEASE CLASS NUMBER. DEF *+5 DEF CLS21 SPECIFY CLASS GET - NO ABORT. DEF CLASN MASTER CLASS/RELEASE/NO WAIT. DEF B0 DEF B0 RSS IGNORE ERRORS. * ISZ TEMP2 RELEASE PROCESSING COMPLETED? JMP CLRES YES. GO CLEAR THE "RES" ENTRY. INA,SZA NO. ARE ALL PENDING REQUESTS CLEARED? JMP CREPT NO. CONTINUE TO CLEAR REQUESTS. * LDA CLASN GET THE CLASS NUMBER AGAIN. AND CLMSK EXCLUDE THE NO-DEALLOC BIT (#13). STA CLASN JMP CLRTN RETURN FOR FINAL DE-ALLOCATION. * CLRES JSB #RSAX GO TO "RES" ACCESS ROUTINE. DEF *+3 DEF B6 CLEAR A LIST ENTRY. DEF TEMP SEARCH, USING SEQ NUMBER. * JMP CKMS2 GO CHECK FOR NEXT TCB. CKMS3 LDB TEMP3 JMP CKMST * * ABORT ALL ACTIVE HELLO'S FROM THE PROCESS NUMBER LIST. * PNLST LDB #LDEF GET ADDR OF PNL HEADER. ADB N1 LDB B,I JSB LODWD (CROSS) LOAD ADDR OF NEXT PNL ENTRY. SZA,RSS (ALWAYS POINTS TO "FIRST" ENTRY) JMP RSTUP DONE WITH PNL ENTRIES. * LDB A ADB B2 POINT TO 3RD WORD OF ENTRY. JSB LODWD (CROSS) LOAD THE PROCESS NUMBER. STA TEMP2 SAVE PROCESS NUMBER FOR SEARCH. ADB B2 POINT TO 5TH WORD OF ENTRY. JSB LODWD (CROSS) LOAD ID SEG ADDR. * JSB KILIT ABORT USER IF NOT DONE ALREADY. * JSB #RSAX DELETE PROCESS NUMBER LIST ENTRY. DEF *+3 DEF D10 CODE FOR "REMOVE". DEF TEMP2 SEARCH, USING PROCESS NUMBER. * JMP PNLST GO CHECK NEXT ENTRY. * RSTUP JSB EXEC RESTORE UPLIN INTERVAL TO 5 SECONDS, DEF *+6 TO BEGIN IN 2 SECONDS. DEF SCHTM DEF UPLIN DEF B2 DEF B5 DEF N2 NOP IGNORE ERROR RETURN. * JMP ABORT,I RETURN TO CALLER. * CLMSK OCT 157777 SCHTM OCT 100014 UPLIN ASC 3,UPLIN SKP * * IF USER NOT DORMANT, ABORT BY GENERATING "OF,(NAME),1" MESSAGE. * KILIT NOP ENTRY: (A) = ID SEG ADDR OF USER. ELA,CLE,ERA LDB A ADB D15 GET STATUS UF USER. LDA B,I AND D15 ISOLATE STATUS. SZA,RSS DORMANT? JMP KILIT,I YES. RETURN TO CALLER. * ADB N3 NO. GET ADDR OF USER'S NAME. STB SHEDR SAVE THE ADDRESS. LDB COMMA LDA SHEDR,I MOVE NAME TO "OF,XXXXX,1" MESSAGE. LSL 8 STB MSNAM LSL 8 ISZ SHEDR LDA SHEDR,I LSL 8 STB MSNAM+1 LSL 8 ISZ SHEDR LDA SHEDR,I LSL 8 STB MSNAM+2 * JSB MESSS CALL RTE MESSAGE PROCESSOR. DEF *+3 DEF OFMES DEF D10 NOP * JMP KILIT,I RETURN TO CALLER. * OFMES ASC 1,OF MSNAM BSS 3 ASC 1,,1 COMMA OCT 54 SKP SKP * * DUMP REQUEST/REPLY. * TRACE NOP STA ADDR INIT. CORE ADDR POINTER. CMB,INB STB CNTR NEGATIVE WORD COUNTER. LDA N8 STA LNCNT LINE WORD COUNT. CLA STA PRLEN CLEAR PRINT LINE LENGTH. STA B.PTR RESET BUFFER BYTE POINTER. LDA B60 BEGIN WITH DOUBLE SPACE. JMP LOOP+1 * LOOP LDA BLANK START WITH BLANK BYTE. JSB STBYT LDA BLANK JSB STBYT * LDA N6 SET FOR 6 CHARACTERS. STA BCNTR * LDB ADDR,I GET NEXT CORE WORD. CLA RRL 1 JMP XXX * DLOOP BLF,RBR POSITION NEXT 3 BITS. LDA B AND B7 XXX IOR B60 JSB STBYT STORE ASCII BYTE. ISZ BCNTR JMP DLOOP LOOP TILL DONE. * LDA PRLEN BUMP PRINT LINE LENGTH. ADA B4 STA PRLEN ISZ ADDR BUMP TO NEXT CORE WORD. ISZ CNTR END OF CORE WORDS? JMP EOLCK NO. GO CHECK LINE. JMP PRINT YES. * EOLCK ISZ LNCNT END OF LINE (8 CORE WORDS)? JMP LOOP NO. LDA N8 YES. RESET WORD COUNTER. STA LNCNT * PRINT JSB EXEC DISPLAY. DEF *+5 DEF B2 DEF DMPLU BUFAD DEF ASCBF DEF xPRLEN * CLA CLEAR LINE LENGTH. STA PRLEN STA B.PTR RESET BUFFER BYTE POINTER. LDA CNTR SZA JMP LOOP GO GET NEXT CORE WORD. JMP TRACE,I * * STORE A BYTE INTO THE PRINT LINE BUFFER. * STBYT NOP STA TMP SAVE BYTE. LDA B.PTR BYTE POINTER. CLE,ERA FORM WORD ADDRESS. ADA BUFAD FORM BUFFER ADDRESS. STA TMP1 SAVE FOR LATER. LDA A,I GET CURRENT WORD FROM BUFFER. SEZ,RSS ALF,ALF POSITION IF NEEDED. AND HB377 MASK. IOR TMP STUFF NEW BYTE. SEZ,RSS ALF,ALF RE-POSITION IF NEEDED. STA TMP1,I STORE INTO BUFFER. ISZ B.PTR BUMP BYTE POINTER. JMP STBYT,I * B60 OCT 60 N6 DEC -6 BLANK OCT 40 ADDR NOP CNTR NOP LNCNT NOP PRLEN NOP B.PTR NOP BCNTR NOP TMP NOP TMP1 NOP ASCBF BSS 32 SKP ETABL DEF * TABLE OF ERROR MESSAGES FOR STATUS. DEF EM1 =1 DEF EM2 =2 DEF EM3 =3 DEF EM4 =4 NOP =5 NON-ABORTIVE (EOT RECEIVED). NOP =6 NON-ABORTIVE (DLE EOT RECVD). DEF EM7 =7 DEF EM8 =8 DEF EM9 =9 DEF EM10 =10 DEF EM11 =11 DEF EM12 =12 NOP =13 NON-ABORTIVE (SENT ENQ, GOT ENQ). DEF EM14 =14 DEF EM15 =15 DEF EM16 =16 DEF EM17 =17 DEF EM18 =18 (ADDED CODE FOR SLC ERROR). DEF EM19 =19 DEF EM20 =20 * EM1 ASC 8,INVALID REQUEST EM2 ASC 8,WRONG LINE STATE EM3 ASC 8,BAD ID SEQUENCE EM4 ASC 8,HARDWARE FAILURE EM7 ASC 8,TIMEOUT EM8 ASC 8,SENT EOT,GOT ENQ EM9 ASC 8,DATA OVERRUN EM10 ASC 8,MAX. NAKS RECV'D EM11 ASC 8,MAX # ENQ SENT EM12 ASC 8,RVI RECEIVED EM14 ASC 8,NAK RECEIVED EM15 ASC 8,MAX ENQ RECEIVED EM16 ASC 8,NO NAK TO TTD EM17 ASC 8,IMPOSSIBLE ERROR EM18 ASC 8,SLC INIT. ERROR EM19 ASC 8,DRIVER WC ERROR EM20 ASC 8,DRIVER RI ERROR * STMSG OCT 6412 ASC 18,>> HP 3000 COMMUNICATION LINK *DOWN* OCT 6412 EMSG ASC 18,>> **************** @ ********* OCT 6412 DEM11 DEF EMSG+11 UP ASC 3,* UP * DOWN ASC 3,*DOWN* DIALM ASC 15,>> HP 3000: READY FOR DIALING SNOFF ASC 11,>> HP 3000: DISCONNECT BDBUF ASC 16,>> HP 3000: BAD BUFFER RECEIVED DINSR DEF BDBUF+11 DRECV DEF *+1 ASC 5, RECEIVED DOUTG DEF *+1 ASC 5, OUTGOING * B37 OCT 37 MSGA1 DEF EMSG+2 SKP * * CONSTANTS AND WORKING STORAGE. * Q$LID DEF LOCID LOCID NOP LOCAL ID BYTE COUNT. BSS 8 LOCAL ID, UP TO 15 CHAR. RCVID NOP RESERVED FOR PARAM FROM SLC. REMID NOP REMOTE ID BYTE COUNT. BSS 8 REMOTE ID, UP TO 15 CHAR. * B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B20 OCT 20 B21 OCT 21 NB10 OCT -10 NB20 OCT -20 B377 OCT 377 B400 OCT 40000 B1400 OCT 140000 B1777 OCT 177700 BIT15 OCT 100000 HB377 OCT 177400 CLS20 OCT 100024 CLS21 OCT 100025 PASWD OCT 22222 M4S26 OCT 2026 D8 DEC 8 D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D13 DEC 13 D15 DEC 15 D16 EQU B20 D18 DEC 18 D19 DEC 19 D20 DEC 20 D24 DEC 24 D39 DEC 39 N1 DEC -1 N2 DEC -2 N3 DEC -3 N8 DEC -8 N9 DEC -9 N16 EQU NB20 N50 DEC -50 QXCLS NOP QUEX CLASS NUMBER. QCLAS NOP LOG NOP LINK OCT 0 DCNFL OCT 0 SGNOF OCT 0 ENQFL OCT 0 IGNOR OCT 0 SNZRO NOP GLCLR OCT 40004 QUEZ ASC 3,QUEZ NAMRP ASC 3,RPCNV * CNTRL DEF *+1 TABLE OF CONTROL WORDS. CLRWD OCT 064400 CLEAR LIDSQ OCT 064000 LOCAL ID SEQUENCE RIDSQ OCT 064100 REMOTE ID SEQUENCE WNQWD OCT 020100 WRITE INQUIRY ERCWD OCT 064200 ERROR PARAMETERS CONWD OCT 022300 WRITE CONVERSATIONAL RESWD OCT 020400 WRITE-640 RESET (EOT) RDIWD OCT 020200 READ INITIAL LCLWD OCT 060300 LINE CLOSE WRDIS OCT 020500 WRITE DISCONNECT (DLE EOT) OCT 0 DELIMITER. * TRCLU NOP DMPLU NOP STATS NOP TLOG NOP CLASN NOP BUFL NOP SHEDR NOP LOC NOP TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP WCLOG NOP * STRTM DEF *+1 OCT 4000 INITIALIZATION REQUEST. OCT 0 OCT 20 OCT 0,0,0,0,0 * TRMRQ DEF *+1 OCT 4000 TERMINATION REQUEST. OCT 0 OCT 21 OCT 0,0,0,0,0 * XLEN ABS L MAX # WORDS PER TRANSMISSION. * TLEN NOP LEN OF XMIT BUFR (-BYTES). OUBUF BSS L TRANSMIT BUFFER. INBUF BSS L RECEIVE BUFFER. * BFLEN ABS -L-L MAX -CHAR LENGTH OF RECEIVE BUFFER. MXLEN ABS L MAX +WORD LENGTH OF TRANSMIT BUFFER. SBFAD DEF OUBUF INITIAL XMIT BUFFER ADDR. RBFAD DEF INBUF INITIAL RECEIVE BUFFER ADDR. * BSS 0 *** SIZE OF QUEX **** * END QUEX LY6  91741-18004 1740 S C0222 DS/1000 MODULE: RQCNV QUEZ             H0102 ASMB,R,L,C HED 3000 REQUEST CONVERTER (C) HEWLETT-PACKARD CO. 1977 NAM RQCNV,19,25 91741-16004 REV 1740 770830 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 26 ENT RQCNV * EXT EXEC,$LIBR,$LIBX,$RNTB,#QXCL,RNRQ EXT #RSAX,#TST,#NULL,#LDEF,#TBRN EXT #RQCV,#QRN,$OPSY * IFZ EXT DBUG XIF * * Z OPTION INCLUDES DEBUG. * * RQCNV * SOURCE: 91741-18004 * BINARY: 91741-16004 * JIM HARTSELL * FEB. 14, 1977 * L EQU 304 MAXIMUM LINE BUFFER SIZE. DBL EQU 512 MAXIMUM SLAVE DATA LENGTH. * * RQCNV IS THE INTERFACE TO THE DS/1000 SLAVE MONITORS FOR REQUESTS * ORIGINATING FROM THE HP 3000. ALL INCOMING REQUESTS ARE CONVERTED * TO DS/1000 FORMATS FOR PROCESSING AT THE RTE SYSTEM. * SUP A EQU 0 B EQU 1 * RQCNV EQU * IFZ LDA B,I IS P1 = 99? CPA D99 RSS JMP INIT NO. NORMAL ENTRY. * JSB DBUG YES. ENTER DEBUG MODE. DEF *+1 * JSB EXEC SAVE RESOURCES & TERMINATE. DEF *+4 DEF B6 DEF B0 DEF B1 * JMP RQCNV LSTEN CALL STARTS HERE. XIF * INIT LDA $OPSY RAR,SLA IS THIS AN RTE-III OR IV? RSSI RSS YES. JMP GET NO. LDB RSSI GET "RSS" INSTRUCTION. STB MODI2 MODIFY TO DO CROSS-MAP LOAD. STB MODI3 MODIFY TO DO CROSS-MAP STORE. DLD MWII MODIFY TO DO "MWI" DST DMS2 CROSS-MAP MOVE. DLD MWFI MODIFY TO DO "MWF" DST DMS3 CROSS-MAP MOVE. * ******** **************************************************** * * * MAIN PROCESSING SECTION FOR ALL REQUESTS FROM THE 3000. * * * ************************************************************ * GET EQU * * JSB EXEC WAIT FOR A REQUEST. DEF *+5 DEF CLS21 DEF #RQCV RQCNV'S I/O CLASS. DEF RQBUF 3000 REQUEST BUFFER. DEF MAXRQ NOP IGNORE ERRORS. * STB RCVLN SAVE ACTUAL # WORDS RECEIVED. CLA CLEAR TST POINTER INTO S.A.M. STA TSTAD STA STREM CLEAR LOCAL TST HEADER. STA LCSEQ STA HLDCL STA MCLAS STA FCNCD * LDA PARMA CLEAR DS/1000 REQUEST BUFFER AREA. STA TEMP LDB PRMBL CMB,INB CLA CLR STA TEMP,I ISZ TEMP INB,SZB JMP CLR * LDA RQ0 CHECK FOR MESSAGE CLASS 6, AND B377 STREAM 22 OCTAL (BREAK). ALF,ALF STA B LDA RQ2 AND B377 IOR B CPA M6S22 JMP SNREP YES. JUST SEND A REPLY. * * CHECK TRANSACTION STATUS TABLE (TST) FOR MATCHING SEQUENCE # * IN 8-WORD FIXED-FORMAT HEADER. A MATCH WILL BE FOUND ONLY IF * THIS REQUEST IS A CONTINUATION FOR DWRIT/PWRIT/DEXEC(2). NOTE * THAT CONTINUATION BIT IS NOT SET IF THIS IS THE LAST ONE. * DLD #TST GET TST ADDR AND # OF ENTRIES. STA TEMP CMB,INB STB TEMP1 SZA SZB,RSS JMP REJCT REJECT IF NO TST. * TSTLP LDB TEMP CHECK NEXT ENTRY. JSB LODWD ENTRY IN USE? SZA,RSS JMP NXTST NO. GO ON TO NEXT ENTRY. INB YES. JSB LODWD (CROSS) LOAD LOCAL SEQ. #. CPA RQ5 JMP CONT1 MATCH. GO PROCESS CONTINUATION. * NXTST LDB TEMP BUMP TO NEXT ENTRY. ADB TSTLN STB TEMP ISZ TEMP1 JMP 3TSTLP * * NO TST ENTRY. PERFORM "GRPM" FUNCTIONS FOR NEW REQUEST. * LDA RQ0 IF WORD COUNT BYTE = 8, THIS ALF,ALF IS A RESIDUAL CONTINUATION AND B377 REQUEST AFTER A TIMEOUT. CPA D8 JMP REJCT * LDB #NULL SZB,RSS ANY TCBS AVAILABLE? JMP REJCT NO. REJECT. * LDA RQ0 GET 3000 MESSAGE CLASS. AND B377 STA TEMP1 LDA RQ2 GET 3000 STREAM TYPE. AND B377 STA TEMP2 * LDB MAPTB MAP DS/3000 MSG CLASS AND STB TEMP STREAM TO DS/1000 STREAM. * MAPLP LDA B,I GET NEXT MAP TABLE ENTRY. CPA N1 JMP REJCT NOT IN TABLE. CPA TEMP1 COMPARE MESSAGE CLASS. RSS JMP NMACH NO MATCH ON THIS ONE. * INB MATCH. LDA B,I COMPARE DS/3000 STREAM TYPE. SZA IF TABLE ENTRY = 0, IT'S A MATCH. CPA TEMP2 NON-ZERO: TEST IT. JMP MATCH MATCH. GO GET DS/1000 STREAM TYPE. * NMACH LDB TEMP BUMP TO NEXT MAP TABLE ENTRY. ADB B3 STB TEMP JMP MAPLP CONTINUE SEARCH. * MATCH INB LDA B,I GET DS/1000 STREAM TYPE. STA STREM * ADA #LDEF ADA B2 POINT TO LIST HEADER POINTER. LDB A,I POINT TO LIST HEADER. INB LDA B,I STA MCLAS SAVE MONITOR'S CLASS #. INB LDB B,I GET ID SEG ADDR OF MONITOR. RBL,CLE,ERB SZB,RSS IF MONITOR NOT ENABLED, JMP REJCT REJECT REQUEST. ADB D15 LDA B,I AND D15 CPA B4 AVAILABLE MEMORY SUSPEND? JMP REJCT YES. REJECT THE REQUEST. * LDB $RNTA RSS LDB B,I RESOLVE INDIRECT. RBL,CLE,SLB,ERB JMP *-2 LDA #QRN GET QUIESCENT RN. AND B377 ISOLATE TABLE INDEX. ADB A COMPUTE POSITION IN RN TABLE. LDA B,I GET IT. AND bB377 SZA QUIESCING? JMP REJCT YES. SEND IT BACK. STA PARMB+2 SET SOURCE NODE # = 0. * CCA SET DESTINATION NODE = LOCAL. STA PARMB+3 * JSB #RSAX BUILD TCB FOR THIS STREAM. DEF *+5 DEF B3 DEF B0 PASS ORIGINATORS SEQUENCE # DEF STREM & STREAM DEF PARMB+2 & ORIGIN NODE #. * SSB OK? JMP REJCT NO. STA PARMB+1 YES. STORE SEQ # IN PARMB. STA LCSEQ SAVE FOR TST ENTRY. * INB SET "3K" BIT IN WORD 2 OF TCB. JSB LODWD IOR BIT14 JSB STRWD ADB B2 LDA LCSEQ STORE "LOCAL SEQ #" AS JSB STRWD "ORIG SEQ #" IN TCB. * LDB #NULL IF WE USED SZB LAST TCB, JMP OK JSB RNRQ LOCK TABLE DEF *+4 ACCESS RN DEF LGNW [GLOBAL LOCK] DEF #TBRN [NO WAIT] DEF TEMP [NO ABORT] * * IF CONTINUATION BIT IS SET IN DS/3000 REQUEST, ALLOCATE * A HOLDING CLASS FOR COLLECTION OF DATA BLOCKS BEFORE * PASSING REQUEST TO DS/1000 MONITOR. * OK LDA RQ2 BIT 13 OF STREAM WORD RAL,RAL IS CONTINUATION BIT. SSA,RSS JMP CONV NO CONTINUATION. * LDA B1315 INITIALIZE CLASS # FOR STA HLDCL NO RELEASE & NO WAIT. * JSB EXEC QUICK ALLOCATE - NO ABORT. DEF *+5 DEF CLS19 CLASS CONTROL. DEF B0 LU = "BIT BUCKET" FOR ALLOCATION. DEF B0 DUMMY PARAM FOR ALLOCATION. DEF HLDCL CLASS NUMBER STORAGE ADDRESS. JMP REJCT ERROR. * JSB EXEC COMPLETE PREVIOUS ALLOC. REQUEST. DEF *+5 DEF CLS21 CLASS GET - NO ABORT. DEF HLDCL DEF B0 DEF B0 JMP REJCT ERROR. * * CONVERT DS/3000 REQUEST TO DS/1000 FORMAT. * CONV JSB D1000 * STA RQLEN SAVE LENGTH OF DS/1000 REQUEjST. * * BUILD ENTRY IN TRANSACTION STATUS TABLE (TST). * DLD #TST FIND EMPTY SLOT (AVAIL. ENTRY). STA TEMP CMB,INB STB TEMP1 BLOOP LDB TEMP CHECK NEXT ENTRY. JSB LODWD CROSS LOAD WORD 1. SZA,RSS ZERO? JMP STTST YES. (B) = ADDR IN S.A.M. * LDB TEMP NO. GO TO NEXT ENTRY. ADB TSTLN STB TEMP ISZ TEMP1 JMP BLOOP JMP REJCT NO AVAILABLE ENTRY. * STTST STB TSTAD SAVE ADDR OF TST ENTRY IN S.A.M. LDA TSTLN LENGTH OF A TST ENTRY. CAX PREPARE FOR A DMS "MWI". LDA LTSTA GET LOCAL TST AREA ADDRESS. JSB $LIBR NOP DMS2 MVW TSTLN MOVE ENTRY TO TST [DMS: "MVI"]. JSB $LIBX DEF *+1 DEF *+1 * STDL LDB ARQ0 PREPARE FOR DATA ADDRESS POINTER. LDA RQ0 IS THERE DATA? ALF,ALF AND B377 ADB A STB DABUF SET ADDR OF POSSIBLE DATA. ADA N8 CMA,INA LDB RQ7 INB BRS ADA B STA DALEN SAVE LENGTH OF DATA (OR ZERO). * * CHECK IF THERE WILL BE A CONTINUATION OF DATA. * LDA RQ2 CONTINUATION BIT SET IN RAL,RAL DS/3000 REQUEST? SSA JMP CONT2 YES. GO USE HOLDING CLASS. * * CLASS WRITE THE DS/1000 REQUEST TO REQUIRED MONITOR. * PUT JSB EXEC DO CLASS WRITE/READ. DEF *+8 DEF CLS20 NO ABORT. DEF CONWX CONTROL WORD W/"Z" BIT & "WRITE". DEF DABUF,I DATA ADDRESS. DEF DALEN DATA LENGTH (COULD BE ZERO). DEF PARMB REQUEST ADDRESS. DEF RQLEN REQUEST LENGTH. DEF MCLAS I/O CLASS OF MONITOR. JMP REJCT ERROR RETURN. * JMP GET GO GET NEXT REQUEST. SKP * ************************************************************ * * * SECONDARY SECTION FOR DWRIT/PWRIT/DEXEC(2) WHEN DATA  * * RECORD LENGTH IS GREATER THAN 256 WORDS (CONTINUATIONS). * * * ************************************************************ * * PROCESS CONTINUATION REQUEST. * CONT1 LDA TEMP SAVE ADDR OF TST ENTRY IN S.A.M. STA TSTAD LDA B6 MOVE 1ST 6 WORDS OF TST ENTRY CAX TO LOCAL TST STORAGE AREA. LDA TSTAD LDB LTSTA JSB $LIBR NOP DMS3 MVW B6 MOVE: [DMS: "MWF"]. JSB $LIBX DEF *+1 DEF *+1 * JSB #RSAX IS SLAVE TCB STILL AROUND? DEF *+4 DEF B5 DEF LCSEQ DEF STREM * SSB JMP REJCT NO! REJECT. * LDB ARQ0 YES. SET DATA POINTER & LENGTH. LDA RQ0 ALF,ALF AND B377 ADB A STB DABUF ADA N8 CMA,INA LDB RQ7 INB BRS ADA B STA DALEN * JMP CONT3 GO STACK THE DATA BLOCK. * * WRITE DS/1000 REQUEST TO HOLDING CLASS. LOCAL TST STORAGE * AREA CONTAINS APPLICABLE TST ENTRY. * CONT2 JSB EXEC WRITE THE DS/1000 REQUEST TO DEF *+8 THE HOLDING CLASS. DEF CLS20 DEF B0 DEF PARMB ADDRESS OF REQUEST. DEF RQLEN LENGTH. DEF RQLEN DEF B0 DEF HLDCL JMP REJCT ERROR. * * WRITE THE DATA BLOCK TO THE HOLDING CLASS. LOCAL TST * STORAGE AREA CONTAINS APPLICABLE TST ENTRY. * CONT3 JSB EXEC WRITE DATA BLOCK TO HOLDING CLASS. DEF *+8 DEF CLS20 DEF B0 DEF DABUF,I ADDRESS OF DATA. DEF DALEN LENGTH OF THIS BLOCK. DEF DALEN DEF B0 DEF HLDCL JMP REJCT ERROR. * LDA RQ2 CONTINUATION BIT SET (IS THERE MORE?). RAL,RAL SSA,RSS JMP GATHR NO. GO PREPARE FOR MONITOR. * * SEND INTERMEDIATE REPLY FOR THIS CONTINUATION REQUEST. * SNREP LDA RQ0 SET WDCNT = 8. ANTD B377 IOR LFT8 STA RQ0 LDA RQ2 SET REPLY BIT. IOR BIT15 STA RQ2 LDA RQ4 REVERSE PROCESS NUMBERS. ALF,ALF STA RQ4 LDA LCSEQ STORE LOCAL SEQUENCE NUMBER. STA RQ5 CLA SET N = 0. STA RQ7 * LDA #QXCL SSA JMP GET LINE IS DISCONNECTED. IGNORE. * JSB EXEC WRITE "REPLY" TO QUEX'S CLASS. DEF *+8 DEF CLS20 DEF B0 DEF RQBUF DEF D8 DEF D8 DEF B0 DEF #QXCL JMP REJCT ERROR. * JMP GET GO WAIT FOR CONTINUATION. * * GATHER DS/1000 REQUEST AND DATA BLOCKS FOR * PASSAGE TO DS/1000 SLAVE MONITOR. * GATHR JSB EXEC GET DS/1000 REQUEST. DEF *+6 DEF CLS21 DEF HLDCL NO WAIT, NO RELEASE. DEF PARMB DEF PRMBL DEF LOG JMP REJCT ERROR. * SSA ANYTHING THERE? JMP REJCT NO. * LDA LOG STA RQLEN SAVE LEN OF DS/1000 REQUEST. * LDA ARQ8 INIT DATA BUFFER POINTER. STA DABUF SET POINTER TO DATA. STA TEMP CLA INIT TOTAL DATA LENGTH. STA DALEN * GDATA JSB EXEC GET A DATA BLOCK. DEF *+6 DEF CLS21 DEF HLDCL NO WAIT, NO RELEASE. DEF TEMP,I DATA BUFFER POINTER. DEF MAXDA MAX DATA LENGTH. DEF LOG JMP REJCT ERROR. * SSA,RSS ANYTHING THERE? JMP ADJST YES. LDA DALEN NO. DID WE GET ANY DATA? SZA,RSS JMP REJCT NO. REJECT. JSB RLEAS YES. RELEASE HOLDING CLASS. JMP PUT GO SEND REQUEST TO MONITOR. * ADJST LDA TEMP ADJUST FOR NEXT DATA BLOCK. ADA LOG STA TEMP LDA DALEN ADA LOG STA DALEN * JMP GDATA GET MORE DATA. SKP * * SEND A "REJECT" REPLY TO THE 3000 FOR THIS REQUEST. * LOCAL TST STORAGE AREA CONTAINS CURRENT TST 6-WORD HEADER * AND FIXED-FORMAT HEADER FROM CURRENT REQUEST. "TSTAD" * CONTAINS ADDRESS OF TST ENTRY IN S.A.M. * REJCT LDB TSTAD DELETE TST ENTRY IN S.A.M. CLA SZB SKIP IF NO TST CREATED. JSB STRWD * LDA LCSEQ WAS SLAVE TCB CREATED? SZA,RSS JMP HLD NO. * JSB #RSAX YES. DELETE SLAVE TCB. DEF *+4 DEF B7 DEF LCSEQ DEF STREM * HLD LDA HLDCL HOLDING CLASS ALLOCATED? SZA JSB RLEAS YES. RELEASE IT. * LDA RQ2 SET REJECT BIT IN REQUEST. IOR BIT14 STA RQ2 LDA D8 STA RQLEN JMP SNREP GO SEND REJECT REPLY. SPC 3 * * SUBROUTINE TO FLUSH AND RELEASE THE HOLDING CLASS. * RLEAS NOP * CREPT CCA SET RELEASE RE-TRY SWITCH STA TEMP TO -1. * CLRTN JSB EXEC RELEASE CLASS NUMBER. DEF *+5 DEF CLS21 NO ABORT. DEF HLDCL HOLDING CLASS #. DEF B0 DEF B0 RSS * ISZ TEMP RELEASE PROCESSING COMPLETED? JMP RLEND YES. INA,SZA NO. ARE ALL PENDING REQUESTS CLEARED? JMP CREPT NO. CONTINUE TO CLEAR REQUESTS. * LDA HLDCL YES. SET FOR DE-ALLOCATE. AND CLMSK STA HLDCL JMP CLRTN DO FINAL DEALLOCATION. * RLEND CLA CLEAR SLOT IN LOCAL TST. STA HLDCL JMP RLEAS,I RETURN TO CALLER. SKP * * SUBROUTINE TO LOAD FROM ALTERNATE MAP (IF RTE-III OR IV). * LODWD NOP MODI2 LDA B,I (RSS IF DMS SYSTEM) JMP LODWD,I RETURN IF RTE-II. XLA B,I LOAD WORD FROM ALTERNATE MAP. JMP LODWD,I * MWII MWI NOP * MWFI MWF NOP SPC 3 * * SUBROUTINE TO STORE INTO ALTERNATE MAP (IF RTE-III OR IV). * STRWD NOP JSB $LIBR NOP MODI3 STA B,I (RSS IF DMS SYSTEM) JMP OUT XSA B,I STORE WORD INTO ALTERNATE MAP.غ OUT JSB $LIBX DEF STRWD SKP * ************************************************************** * * * SUBROUTINE TO CONVERT DS/3000 REQUESTS TO DS/1000 FORMAT. * * * ************************************************************** * D1000 NOP * * KEY OFF 3000 MESSAGE CLASS NUMBER. * LDA RQ0 AND B377 ISOLATE MESSAGE CLASS. ADA N3 SUBRACT 3. LDB B5 JSB BNDCK CHECK RANGE: 0 - 5. ADA JTAB1 TABLE ADDRESS + MESSAGE CLASS. LDA A,I LDB RQ2 GET DS/3000 STREAM WORD. JMP A,I GO TO MESSAGE CLASS PROCESSORS. * JTAB1 DEF *+1 DEF MSCL3 OPERATOR COMMAND. DEF MSCL4 PREAD/PWRIT/PCONT. DEF MSCL5 $STDLIST/$STDIN. DEF REJCT DEF MSCL7 POPEN/PCLOS. DEF MSCL8 RFA/DEXEC. * ************************************************ * MESSAGE CLASS 3 ..... OPERATOR COMMANDS. * ************************************************ * MSCL3 CPB B20 RSS JMP REJCT ILLEGAL STREAM TYPE. * LDA B7 STORE DS/1000 STREAM TYPE. IOR BIT3K SET "3K" BIT. STA PARMB LDA RQ7 STORE COMMAND LENGTH. STA PARMB+4 (+ BYTES) INA ARS CONVERT +BYTES TO +WORDS. STA TEMP * CMA,INA CHECK LENGTH AGAINST LIMIT. ADA PRMBL ADA N5 SSA JMP REJCT COMMAND IS TOO LONG. REJECT. * LDA ARQ8 MOVE ASCII COMMAND. LDB NAMA MVW TEMP * LDA TEMP SET LENGTH OF DS/1000 REQUEST. ADA B5 JMP D1000,I RETURN. * ************************************************ * MESSAGE CLASS 4 ..... PREAD/PWRIT/PCONT. * ************************************************ * MSCL4 LDA B4 STORE DS/1000 STREAM TYPE. IOR BIT3K SET "3K" BIT. STA PARMOSB LDA B GET DS/3000 STREAM WORD. AND B377 ISOLATE STREAM. ADA NB22 SUBRACT 22 OCTAL. LDB B2 JSB BNDCK CHECK RANGE: 0 - 2. ADA B2 FORM PTOP FCODE. STA PARMB+7 STORE IN REQUEST. STA FCNCD STORE IN TST ENTRY. * LDA ARQ10 MOVE PCB AND TAG FIELD. LDB PCBA MVW D23 * LDA FCNCD CPA B4 JMP MSC4A SKIP IF PCONT. LDA RQ9 CHECK FOR DATA LIMIT. JSB LIMCK STB PARMB+10 STORE IL PARAM IN PARMB. * MSC4A LDA D31 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * ************************************************ * MESSAGE CLASS 5 ..... $STDLIST/$STDIN * ************************************************ * MSCL5 LDA RCVLN CHECK LENGTH AGAINST LIMIT. CMA,INA ADA PRMBL LDB PRMBL SSA STB RCVLN TOO LONG. TRUNCATE MESSAGE. * LDA ARQ0 MOVE REQ TO PARMB AREA. LDB PARMA MVW RCVLN LDA LCSEQ STORE SEQUENCE NUMBER. STA PARMB+5 * LDA RCVLN SET LENGTH OF REQUEST. STA RQLEN JMP STDL PASS ON TO "CNSLM". * ************************************************ * MESSAGE CLASS 7, STREAM 21 ..... POPEN/PCLOS.* ************************************************ * MSCL7 LDA B AND B377 CPA B21 RSS JMP REJCT ILLEGAL STREAM. * LDA B4 STORE DS/1000 STREAM TYPE. IOR BIT3K SET "3K" BIT. STA PARMB * LDA RQ10 GET DS/3000 "RFA" CODE. AND B377 ADA NB25 SUBTRACT 25 OCTAL. LDB B1 JSB BNDCK CHECK RANGE: 0 - 1. SZA JMP PCLOS * * CONVERT POPEN REQUEST. * CLA,INA STORE PTOP FCODE. STA PARMB+7 STA FCNCD STORE IN TST ENTRY. * LDA ARQ11 MOVE PROGRAM NAME. LDB PCBA MVW B3 LDA ARQ29 MOVE TAG FIELD. LDB /PCBA ADB B3 MVW D20 * LDA RQ55 STORE POPEN MASK IN TST ENTRY. STA MASK * LDA D31 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * * CONVERT PCLOS REQUEST. * PCLOS LDA B5 STORE PTOP FCODE. STA PARMB+7 STA FCNCD STORE IN TST ENTRY. * LDA ARQ11 MOVE PCB. LDB PCBA MVW B3 * LDA D11 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I * ************************************************ * MESSAGE CLASS 8, STREAM 20 ..... RFA. * ************************************************ * MSCL8 LDA B AND B377 CPA B20 RSS JMP STM21 STREAM 21 IS DEXEC. * LDA B6 STORE DS/1000 STREAM TYPE. IOR BIT3K SET "3K" BIT. STA PARMB LDA ARQ12 MOVE DCB (GARBAGE FOR DSTAT). LDB NAMA MVW B3 * LDA RQ8 GET FCN CODE FROM DS/3000 REQUEST. ADA N150 SUBRACT 150. LDB D12 JSB BNDCK CHECK RANGE: 0 - 12. ADA JMAP1 TABLE ADDRESS + 3000 FCN CODE. LDA A,I GET DS/1000 FCN CODE. STA PARMB+4 STORE IN DS/1000 REQUEST. STA FCNCD STORE IN TST ENTRY. * ADA JTAB3 TABLE ADDRESS + 1000 FCN CODE. LDB A,I LDA XEQT GET ID SEG ADDR OF RQCNV (DUMMY). JMP B,I GO CONVERT THE RFA REQUEST. * JMAP1 DEF *+1 DS/3000 - DS/1000 FCN MAPPING TABLE. B3 DEC 3 DCRET D8 DEC 8 DPURG B6 DEC 6 DOPEN D12 DEC 12 DWRIT D9 DEC 9 DREAD B7 DEC 7 DPOSN D11 DEC 11 DWIND B1 DEC 1 DCLOS B5 DEC 5 DNAME B2 DEC 2 DCONT B4 DEC 4 DLOCF B0 DEC 0 DAPOS D10 DEC 10 DSTAT * JTAB3 DEF *+1 TABLE OF CONVERSION ROUTINE ADDRESSES. DEF DAPOS DEF DCLOS DEF DCONT DEF DCRET DEF DLOCF DEF DNAME DEF ݨDOPEN DEF DPOSN DEF DPURG DEF DREAD DEF DSTAT DEF DWIND DEF DWRIT * * CONVERT DS/3000 RFA REQUEST TO DS/1000 FORMAT. * DAPOS STA PARMB+5 LDA RQ15 MOVE RECNUM PARAM. STA PARMB+8 LDA RQ16 MOVE REL BLOCK PARAM. STA PARMB+9 LDA RQ17 MOVE BLOCK OFFSET PARAM. STA PARMB+10 * LDA D11 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DCLOS STA PARMB+5 LDA RQ15 MOVE ITRUN PARAM. STA PARMB+8 LDA D9 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DCONT STA PARMB+5 DLD RQ15 MOVE ICON1, ICON2 DST PARMB+8 * LDA D10 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DCRET STA PARMB+9 LDA RQ19 MOVE ICR PARAM. STA PARMB+8 LDA RQ18 MOVE ISECU PARAM. STA PARMB+10 DLD RQ15 MOVE ISIZE(1), ISIZE(2). DST PARMB+11 LDA RQ17 MOVE ITYPE PARAM. STA PARMB+13 * LDA D14 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DLOCF STA PARMB+5 LDA D8 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DNAME STA PARMB+9 LDA RQ19 MOVE ICR PARAM. STA PARMB+8 LDA RQ18 MOVE ISECU PARAM. STA PARMB+10 DLD RQ15 MOVE NEWNAME PARAM. DST PARMB+11 LDA RQ17 STA PARMB+13 * LDA D14 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DOPEN STA PARMB+9 LDA RQ17 MOVE ICR PARAM. STA PARMB+8 LDA RQ16 MOVE ISECU PARAM. STA PARMB+10 LDA RQ15 MOVE IOPTN PARAM. STA PARMB+11 * LDA D12 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DPOSN STA PARMB+5 LDA RQ15 MOVE NUR PARAM. STA PARMB+8 LDA RQ16 MOVE ICR PARAM. STA PARMB+9 * LDA D10 o NLH SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DPURG STA PARMB+9 LDA RQ16 MOVE ICR PARAM. STA PARMB+8 LDA RQ15 MOVE ISECU PARAM. STA PARMB+10 * LDA D11 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DREAD STA PARMB+5 LDA RQ15 MOVE IL PARAM. STA PARMB+8 LDA RQ17 MOVE NUM PARAM. STA PARMB+9 * LDA D10 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DSTAT CLA STA PARMB+5 STA PARMB+6 * LDA B7 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DWIND STA PARMB+5 LDA D8 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. .q * DWRIT STA PARMB+5 LDA RQ15 MOVE IL PARAM. STA PARMB+8 LDA RQ16 MOVE NUM PARAM. STA PARMB+9 * LDA RQ10 CHECK FOR DATA LIMIT. JSB LIMCK * LDA D10 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. N* ************************************************ * MESSAGE CLASS 8, STREAM 21 ..... DEXEC. * ************************************************ * STM21 CPA B21 RSS JMP REJCT ILLEGAL STREAM TYPE. * LDA B5 STORE DS/1000 STREAM TYPE. IOR BIT3K SET "3K" BIT. STA PARMB * LDA RQ12 GET RCODE FROM DS/3000 REQUEST. ADA N1 SUBTRACT 1. LDB D12 JSB BNDCK CHECK RANGE: 0 - 12. LDB A STORE RCODE IN TST ENTRY. INB STB FCNCD STB PARMB+4 STORE RCODE FOR DS/1000. ADA JTAB4 TABLE ADDRESS + RCODE. LDA A,I JMP A,I GO CONVERT THE DEXEC REQUEST. * JTAB4 DEF *+1 TABLE OF CONVERSION ROUTINE ADDRESSES. DEF DEX1 READ DEF DEX1 WRITE (SAME AS READ) DEF DEX3 I/O CONTROL. DEF REJCT DEF REJCT DEF REJCT DEF REJCT DEF REJCT DEF REJCT DEF DEX10 SCHEDULE DEF DEX11 TIME DEF DEX12 EXECUTION TIME DEF DEX13 I/O STATUS * * CONVERT DS/3000 DEXEC REQUEST TO DS/1000 FORMAT. * DEX1 LDA RQ13 MOVE ICNWD PARAM. STA PARMB+5 LDA RQ14 MOVE IBUFL PARAM. STA PARMB+6 DLD RQ15 MOVE IPRM1, IPRM2. DST PARMB+7 * LDA RQ10 CHECK FOR DATA LIMIT. JSB LIMCK * LDA D9 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DEX3 LDA RQ13 MOVE ICNWD PARAM. STA PARMB+5 LDA RQ14 MOVE IPRAM STA PARMB+6 * LDA B7 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DEX10 LDA ARQ13 MOVE PROG NAME & 5 PARAMS. LDB NAMA MVW D8 * LDA D13 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DEX11 LDA D13 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DEX12 LDA ARQ13 MOVE PROGRAM NAME.  LDB NAMA MVW B3 DLD RQ16 MOVE IRESL, MULT PARAMS. DST PARMB+8 LDA RQ18 MOVE IOFST/IHRS PARAM. STA PARMB+10 SSA JMP DX12A NEGATIVE - DONE WITH THIS ONE. * DLD RQ19 MOVE MINS, ISECS. DST PARMB+11 LDA RQ21 MOVE MSECS. STA PARMB+13 LDA D14 SET LENGTH OF DS 1000 REQUEST. RSS * DX12A LDA D11 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DEX13 LDA RQ13 MOVE ICNWD PARAM. STA PARMB+5 * LDA D10 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. SKP * * SUBROUTINE TO CHECK IF INDEX IS WITHIN SPECIFIED RANGE. * (A) = INDEX (PRESERVED) (B) = UPPER LIMIT. * REQUEST IS REJECTED IF OUT OF BOUNDS. * BNDCK NOP STA LOC SAVE A-REGISTER. SSA JMP REJCT REJECT IF NEGATIVE. CMA,INA ADA B SSA JMP REJCT REJECT IF BEYOND LIMIT. LDA LOC RESTORE A-REGISTER. JMP BNDCK,I RETURN. * LOC OCT 0 SPC 3 * * SUBROUTINE TO CHECK IF DATA LENGTH EXCEEDS DS/1000 LIMIT. * LIMCK NOP (A) = TCOUNT: -BYTES OR +WORDS. SSA,RSS JMP LIM1 + WORDS. CMA,INA - BYTES. CONVERT TO +WORDS. INA ARS LIM1 STA B SAVE WORD COUNT IN B-REG. CMA,INA ADA MAXDA SSA JMP REJCT EXCEEDS LIMIT. REJECT. JMP LIMCK,I SKP * * CONSTANTS AND WORKING STORAGE. * * MAPPING TABLE BETWEEN DS/3000 AND DS/1000 STREAM TYPES. * * WORD 1 = DS/3000 MESSAGE CLASS. * WORD 2 = DS/3000 STREAM (0 = DON'T CARE). * WORD 3 = DS/1000 STREAM TYPE. * MAPTB DEF *+1 OCT 3,0,7 RTE COMMANDS - OPERM OCT 4,0,4 SLAVE PREAD/PWRIT/PCONT - PTOPM OCT 5,0,2 $STDLIST/$STDIN - CNSLM OCT 7,21,4 SLAVE POPEN/PCLOS - PTOPM OCT 10,20,6 RTE FMP RFA G - RFAM OCT 10,21,5 REMOTE EXEC (DEXEC) - EXECM OCT -1 DELIMITER FOR MAP TABLE. * XEQT EQU 1717B LGNW OCT 140002 USED FOR RN LOCK B20 OCT 20 B21 OCT 21 B377 OCT 377 B1315 OCT 120000 BIT14 OCT 40000 mm BIT15 OCT 100000 BIT3K EQU BIT15 "3K" BIT FOR DS/1000 STREAM WORD. CLMSK OCT 117777 LFT8 OCT 4000 CONWX OCT 10100 CLS19 OCT 100023 CLS20 OCT 100024 CLS21 OCT 100025 M6S22 OCT 3022 CLASS 6, STREAM 22. D13 DEC 13 D14 DEC 14 D15 DEC 15 D20 DEC 20 D23 DEC 23 D31 DEC 31 D99 DEC 99 N1 DEC -1 N3 DEC -3 N5 DEC -5 N8 DEC -8 N150 DEC -150 NB22 OCT -22 NB25 OCT -25 $RNTA DEF $RNTB LOG NOP TEMP NOP TEMP1 NOP TEMP2 NOP RCVLN NOP RQLEN NOP DABUF NOP DALEN NOP * PRMBL DEC 50 MAX LENGTH OF DS/1000 REQUEST. PARMB BSS 50 DS/1000 REQUEST BUFFER. PARMA DEF PARMB NAMA DEF PARMB+5 PCBA DEF PARMB+8 * TSTAD NOP ADDR OF TST ENTRY IN S.A.M. TSTLN DEC 14 LENGTH OF TST ENTRY. LTSTA DEF STREM ADDR OF LOCAL TST AREA. ******************************************************************** STREM NOP * * DS/1000 STREAM TYPE * LCSEQ NOP * L * LOCAL SEQUENCE NUMBER * HLDCL NOP * O T * HOLDING CLASS NUMBER * MCLAS NOP * C S * MONITOR CLASS NUMBER * FCNCD NOP * A T * CALL TYPE * MASK NOP * L * MASK WORD FOR POPEN * RQBUF BSS 8 * * DS/3000 FIXED FORMAT HEADER, * ******************************************************************** BSS L-8 PLUS REQUEST BUFFER. BSS DBL-L+8 EXTRA ROOM FOR DATA ACCUMULATION. * MAXRQ ABS L MAXDA ABS DBL * RQ0 EQU RQBUF RQ2 EQU RQBUF+2 RQ4 EQU RQBUF+4 RQ5 EQU RQBUF+5 RQ7 EQU RQBUF+7 RQ8 EQU RQBUF+8 RQ9 EQU RQBUF+9 RQ10 EQU RQBUF+10 RQ11 EQU RQBUF+11 RQ12 EQU RQBUF+12 RQ13 EQU RQBUF+13 RQ14 EQU RQBUF+14 RQ15 EQU RQBUF+15 RQ16 EQU RQBUF+16 RQ17 EQU RQBUEF+17 RQ18 EQU RQBUF+18 RQ19 EQU RQBUF+19 RQ21 EQU RQBUF+21 RQ29 EQU RQBUF+29 RQ55 EQU RQBUF+55 * ARQ0 DEF RQ0 ARQ8 DEF RQ8 ARQ10 DEF RQ10 ARQ11 DEF RQ11 ARQ12 DEF RQ12 ARQ13 DEF RQ13 ARQ29 DEF RQ29 * BSS 0 ******** SIZE OF RQCNV ************ * END RQCNV L\  91741-18005 1740 S C0122 DS/1000 MODULE: RQCNV              H0101 ?ASMB,R,L,C HED 3000 REPLY CONVERTER (C) HEWLETT-PACKARD CO. 1977 NAM RPCNV,19,25 91741-16005 REV 1740 770830 SPC 1  ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT RPCNV * EXT EXEC,$LIBR,$LIBX,D65GT EXT #RPCV,#QXCL,#TST,$OPSY * IFZ EXT DBUG XIF * * Z OPTION INCLUDES DEBUG. * * RPCNV * SOURCE: 91741-18005 * BINARY: 91741-16005 * JIM HARTSELL * FEB. 28, 1977 * D EQU 256 MAX DATA PER 3000 DATA REPLY. L EQU 304 MAXIMUM LINE BUFFER SIZE. DBL EQU 512 MAXIMUM SLAVE DATA LENGTH. * * RPCNV IS THE INTERFACE TO THE DS/1000 SLAVE MONITORS FOR REPLIES * DESTINED FOR THE HP 3000. ALL OUTGOING REPLIES ARE CONVERTED * TO DS/3000 FORMATS. * SUP A EQU 0 B EQU 1 * RPCNV EQU * IFZ LDA B,I IS P1 = 99? CPA D99 RSS JMP INIT NO. NORMAL ENTRY. * JSB DBUG YES. ENTER DEBUG MODE. DEF *+1 * JSB EXEC SAVE RESOURCES & TERMINATE. DEF *+4 DEF B6 DEF B0 DEF B1 * JMP RPCNV LSTEN CALL STARTS HERE. XIF * INIT LDA $OPSY RAR,SLA IS THIS AN RTE-III OR IV? RSSI RSS YES. JMP GET NO. LDB RSSI GET "RSS" INSTRUCTION. STB MODI2 MODIFY TO DO CROSS-MAP LOAD. STB MODI3 MODIFY TO DO CROSS-MAP STORE. DLD MWFI MODIFY TO DO "MWF" DST DMS3 CROSS-MAP MOVE. * ************************************************************ * = * * MAIN PROCESSING SECTION FOR ALL REPLIES FOR THE 3000. * * * ************************************************************ * GET EQU * * JSB D65GT WAIT FOR A REPLY DEF *+6 FROM DS-1000 SLAVE MONITORS. DEF #RPCV RPCNV'S I/O CLASS. DEF PARMB 1000 REPLY BUFFER. DEF PRMBL MAXIMUM LENGTH. DBUFA DEF DABUF DEF MAXDA JMP GET ERROR RETURN. * STA RQLOG SAVE REPLY LENGTH. STB TCNT SAVE LENGTH OF DATA RECEIVED. * * SEARCH TRANSACTION STATUS TABLE (TST) FOR MATCHING SEQUENCE # * IN 8-WORD FIXED-FORMAT HEADER. * DLD #TST GET TST ADDR AND # OF ENTRIES. STA TEMP CMB,INB STB TEMP1 SZA SZB,RSS JMP GET FORGET IT IF NO TST. * TSTLP LDB TEMP CHECK NEXT ENTRY. JSB LODWD VALID ENTRY? SZA,RSS JMP NXTST NO. GO CHECK NEXT ENTRY. INB YES. JSB LODWD (CROSS) LOAD LOCAL SEQ. #. CPA PARMB+1 JMP CONV MATCH. GO PROCESS REPLY. * NXTST LDB TEMP BUMP TO NEXT ENTRY. ADB TSTLN STB TEMP ISZ TEMP1 JMP TSTLP JMP GET NOT FOUND. * * MOVE TST ENTRY FROM S.A.M. TO LOCAL STORAGE AREA. * (THIS IS 8-WORD HEADER BELONGING TO THIS REPLY.) * CONV LDA TEMP SAVE ADDR OF TST ENTRY IN S.A.M. STA TSTAD LDA TSTLN MOVE TST ENTRY TO LOCAL STORAGE. CAX LDA TSTAD LDB LTSTA JSB $LIBR NOP DMS3 MVW TSTLN MOVE: [DMS: "MWF"]. JSB $LIBX DEF *+1 DEF *+1 * * PERFORM PRELIMINARY SET-UP OF FIXED FORMAT HEADER. * LDA RQ2 AND NOT13 CLEAR CONTINUATION BIT. IOR BIT15 SET REPLY BIT. STA RQ2 LDA RQ4 REVERSE PROCESS NUMBERS. ALF,ALF STA RQ4 * LDA RQLOG IF UPLIN DETECTED A TIMEOUT CPA B2 ON2 THIS REQUEST, JMP REJCT REJECT IT. * * IF OPERATOR COMMAND REPLY, PROCESS INTERVENING $STDLIST MESSAGE. * LDA PARMB AND B17 CPA B7 RSS JMP CONV1 NOT A COMMAND REPLY. * LDA RQ4 SET "FROM IOR UP8 PROCESS NO." STA RQ4 NON-ZERO. (TO FIX 3000 BUG) LDA RQ0 SAVE 3000 MESSAGE CLASS. STA SVMCL LDA RQ2 SAVE 3000 STREAM TYPE. STA SVSTR (REPLY BIT IS SET) LDA B5 BUILD $STDLIST REQUEST. STA RQ0 MESSAGE CLASS = 5. LDA B20 STA RQ2 STREAM = 20. CLA CLEAR CONTROL WORDS. STA RQ8 STA RQ9 LDA PARMB+7 GET LENGTH OF ASCII REPLY MSG. ADA B2 ADD # CONTROL WORDS. ALS STA RQ7 STORE BYTE COUNT. ARS ADA D8 STA RQLEN SAVE LENGTH OF REQUEST. ALF,ALF STA B LDA RQ0 STORE WORD COUNT. AND B377 IOR B STA RQ0 LDA PARMB+7 IF NO ASCII REPLY MESSAGE, SZA,RSS JMP SNQX DON'T DO THE MOVE. * LDA PCBA MOVE ASCII REPLY MESSAGE. LDB ARQ10 MVW PARMB+7 * SNQX JSB SEND WRITE $STDLIST TO QUEX. JMP RLTST ERROR RTN: LINE DISCONNECTED. * JSB SLEEP WAIT FOR REPLY. STB RQ6 STORE 3000 RECORD ID. * LDA SVMCL RESTORE 3000 MESSAGE CLASS. STA RQ0 LDA SVSTR RESTORE 3000 STREAM. STA RQ2 * * CONVERT DS/1000 REPLY TO DS/3000 FORMAT. * CONV1 JSB D1000 * STA RQ7 STORE BYTE LENGTH. INA STORE WORD COUNT BYTE. ARS ADA D8 STA RQLEN SAVE LEN OF DS/3000 REPLY. ALF,ALF STA B LDA RQ0 AND B377 IOR B STA RQ0 * * CHECK IF THERE IS DATA IN THIS REPLY. * LDA TCNT IS THERE DATA? SZA JMP CONT1 YES. GO PREPARE DATA REPLY. * * CLAS!S WRITE THE DS/3000 REPLY TO QUEX'S I-O CLASS. * PUT JSB SEND DO CLASS WRITE/READ. NOP IGNORE ERROR RETURN. * * RELEASE TST ENTRY IN S.A.M. * RLTST LDB TSTAD CLA JSB STRWD * JMP GET DONE WITH THIS REPLY. SKP * ************************************************************ * * * SECONDARY SECTION FOR DREAD/PREAD/DEXEC(1) DATA REPLIES. * * * ************************************************************ * * PROCESS DATA REPLIES (POSSIBLE CONTINUATIONS). * CONT1 LDA DBUFA INIT DATA BUFFER POINTER. STA DAPTR * CONT2 LDA RQ2 CLEAR CONTINUATION BIT. AND NOT13 STA RQ2 * LDA TCNT TOTAL # DATA WORDS REMAINING. STA DALEN CMA,INA ADA BLKLN WILL IT ALL FIT IN THIS REPLY? SSA,RSS JMP CONT3 YES. LDA FCNCD NO. IS IT DSTAT? CPA D10 JMP CONT3 YES. DO IT ANYWAY. * LDA BLKLN NO. SET BLOCK LENGTH TO MAX. STA DALEN LDA RQ2 SET CONTINUATION BIT. IOR BIT13 STA RQ2 * CONT3 LDA STREM IF PTOP (PREAD), DATA IS AND B377 ALREADY IN PLACE. CPA B4 JMP CONT4 TAKE JUMP IF PTOP. * LDA RQ0 FIND WHERE TO PUT THE DATA ALF,ALF IN THE DS/3000 REPLY. AND B377 STA RQLEN ADA ARQ0 * LDB A MOVE THE NEXT DATA BLOCK. LDA DAPTR MVW DALEN * CONT4 LDA DALEN UPDATE REPLY BYTE COUNT. ALS ADA RQ7 STA RQ7 * LDA DAPTR ADVANCE SOURCE POINTER. ADA DALEN STA DAPTR LDA RQLEN SET LENGTH OF DS/3000 REPLY. ADA DALEN STA RQLEN * JSB SEND WRITE REPLY TO QUEX. JMP RLTST ERROR RTN: LINE DISCONNECTED. * LDA DALEN REDUCE TCNT BY DALEN. CMA,INA % ADA TCNT STA TCNT SZA,RSS ANY MORE DATA BLOCKS? JMP RLTST NO. GO RELEASE TST ENTRY. * JSB SLEEP YES. WAIT FOR INTERMEDIATE REPLY. STB RQ6 STORE 3000 RECORD ID. * CLA CLOBBER WORD IN LOCAL TST TO STA STREM FORCE PTOP TEST TO FAIL. STA RQ7 RESET BYTE COUNT LDA RQ0 AND WORD COUNT. AND B377 IOR UP8 STA RQ0 JMP CONT2 GO PROCESS NEXT DATA REPLY. SKP * * SEND A "REJECT" REPLY TO THE 3000 FOR THIS REQUEST. * LOCAL TST STORAGE AREA CONTAINS CURRENT TST 4-WORD HEADER * AND FIXED-FORMAT HEADER FROM CURRENT REQUEST. "TSTAD" * CONTAINS ADDRESS OF TST ENTRY IN S.A.M. * REJCT LDB TSTAD DELETE TST ENTRY IN S.A.M. CLA SZB SKIP IF NO TST CREATED. JSB STRWD * LDA RQ2 SET REJECT BIT IN REQUEST. IOR BIT14 STA RQ2 LDA RQ7 SET LENGTH OF REPLY. INA CLE,ERA ADA D8 STA RQLEN JMP PUT GO SEND REJECT REPLY. SPC 5 * * SUBROUTINE TO SAVE RESOURCES AND TERMINATE UNTIL * RE-SCHEDULED BY QUEX WHEN INTERMEDIATE REPLY ARRIVES. * SLEEP NOP * NOD JSB EXEC DEF *+4 DEF B6 DEF B0 DEF B1 * LDA B,I CHECK PASSWORD. SZA,RSS JMP NOD JUST UPLIN KEEPING US "UP". INB GET 3000 RECORD ID IN B-REG. LDB B,I (2ND SCHEDULE PARAM) CPA PASWD JMP SLEEP,I SCHEDULED PROPERLY BY QUEX. CPA LCSEQ TIMEOUT CONDITION. A=SEQ#. JMP REJC TIMEOUT IS FOR CURRENT REPLY. * STA PARMB+1 BUILD CLA DUMMY STA PARMB REPLY * JSB EXEC TIMEOUT IS FOR A PENDING REPLY. DEF *+8 WRITE A 2 WORD BUFFER TO RPCNV'S CLASS DEF CLS20 TO FORCE A REJECT REPLY TO BE SENT. DEF B0 DEF PARMB TEMP BUFFER AREA. DEF B2 DEF B2 DEF B0 DEF #RPCV NOP JMP NOD GO BACK TO SLEEP * REJC LDB TSTAD "REJECT" CONDITION. CLA RELEASE TST ENTRY. SZB (IF ONE EXISTS) JSB STRWD JMP GET GO GET NEXT REPLY. SKP * * SUBROUTINE TO LOAD FROM ALTERNATE MAP (IF RTE-III OR IV). * LODWD NOP MODI2 LDA B,I (RSS IF DMS SYSTEM) JMP LODWD,I RETURN IF RTE-II. XLA B,I LOAD WORD FROM ALTERNATE MAP. JMP LODWD,I * MWFI MWF NOP SPC 3 * * SUBROUTINE TO STORE INTO ALTERNATE MAP (IF RTE-III OR IV). * STRWD NOP JSB $LIBR NOP MODI3 STA B,I (RSS IF DMS SYSTEM) JMP OUT XSA B,I STORE WORD INTO ALTERNATE MAP. OUT JSB $LIBX DEF STRWD RETURN TO CALLER. SPC 3 * * SUBROUTINE TO WRITE TO QUEX'S I/O CLASS. * SEND NOP * LDA #QXCL IF DISCONNECTED, SSA TAKE ERROR RETURN. JMP SEND,I * JSB EXEC DO CLASS WRITE/READ. DEF *+8 DEF CLS20 NO ABORT. DEF B0 DEF RQBUF REPLY ADDRESS. DEF RQLEN REPLY LENGTH. DEF RQLEN DEF B0 DEF #QXCL I/O CLASS OF QUEX. JMP REJCT ERROR RETURN. * ISZ SEND TAKE NORMAL RETURN. JMP SEND,I RETURN TO CALLER. SKP Pl * ************************************************************** * * * SUBROUTINE TO CONVERT DS/1000 REPLIES TO DS/3000 FORMAT. * * * ************************************************************** * D1000 NOP LDA PARMB ISOLATE STREAM TYPE. AND B377 ADA N4 SUBRACT 4. LDB B3 JSB BNDCK CHECK RANGE: 0 - 3. ADA JTAB1 TABLE ADDRESS + STREAM TYPE. LDA A,I JMP A,I GO TO MESSAGE CLASS PROCESSORS. * JTAB1 DEF *+1 DEF MSCLQ|4 PTOP. DEF MSC8B DEXEC. DEF MSC8A RFA. DEF MSCL3 OPERATOR COMMAND. * ************************************************ * MESSAGE CLASS 3 ..... OPERATOR COMMANDS. * ************************************************ * MSCL3 CLA SET (A) = BYTE COUNT. JMP D1000,I RETURN. qq * ************************************************ * MESSAGE CLASS 4 ..... PREAD/PWRIT/PCONT.* ************************************************ * MESSAGE CLASS 7, STREAM 21 ..... POPEN/PCLOS.* ************************************************ * MSCL4 LDA PARMB+7 PCLOS REPLY? AND B17 CPA B5 JMP SBC YES. * LDA PARMB+5 MAP DS/1000 ERROR CODES TO DS/3000. LDB BIT15 SET DEFAULT TO "CCE". CPA N41 LDB CL209 MAP -41 TO CCL & 209. CPA N42 LDB CL205 MAP -42 TO CCL & 205. CPA N44 LDB CL213 MAP -44 TO CCL & 213. CPA N45 LDB CL216 MAP -45 TO CCL & 216. STB RQ8 STORE IN DS/3000 REPLY. * LDA SB21 INIT. STREAM TO 100021B. STA RQ2 * LDB MASK IF POPEN REPLY, LDA FCNCD CPA B1 STB RQ33 MOVE MASK WORD TO DS/3000 REPLY. * LDA B26 SET ACCEPT/REJECT STREAM TYPE. LDB PARMB+7 SSB LDA B27 IOR BIT15 SET REPLY BIT. STA RQ2 ELA,CLE,ERA LDB D211 IF REJECT, CPA B27 STB RQ8 STORE CCG & 211. * CLA CLEAR UNUSED WORD. STA RQ9 * LDA PCBA MOVE PCB & TAG. LDB ARQ10 MVW D23 * SBC LDA FCNCD SET REPLY BYTE COUNT. AND B17 ADA N1 ADA JTAB2 LDA A,I RETURN (A) = BYTE CNT W/O DATA. JMP D1000,I * JTAB2 DEF *+1 DEC 52 POPEN. DEC 50 PREAD. DEC 50 PWRIT. DEC 50 PCONT. DEC 0 PCLOS. * ******************************mm****************** * MESSAGE CLASS 8, STREAM 20 ..... RFA. * ************************************************ * MSC8A LDB PARMB+5 MOVE IERR TO "A-REG", IERR. STB RQ8 STB RQ10 * CLA SSB IF ERROR, SKIP RFAMD #. JMP MSCA1 LDB FCNCD IF DCRET OR DOPEN, MOVE CPB B3 RFAMD ENTRY # TO "B-REG" SLOT. LDA PARMB+7 CPB B6 LDA PARMB+7 MSCA1 STA RQ9 * CPB D9 CHECK FOR ADDITIONAL PROCESSING. JMP DREAD CPB B4 JMP DLOCF CPB D10 JMP DSTAT * LDA B6 NONE OF THE ABOVE. JMP D1000,I RETURN WITH (A) = BYTE COUNT. * DREAD LDA PARMB+7 MOVE LEN PARAM. LDB PARMB+5 SSB CLA STA RQ11 LDA D8 JMP D1000,I RETURN WITH (A) = BYTE COUNT. * DLOCF LDA PMB7A MOVE DLOCF PARAMS. LDB ARQ11 MVW B7 LDA D20 JMP D1000,I RETURN WITH (A) = BYTE COUNT. * DSTAT CLA STA RQ8 STA RQ9 LDA B4 JMP D1000,I RETURN WITH (A) = BYTE COUNT. * ************************************************ * MESSAGE CLASS 8, STREAM 21 ..... DEXEC. * ************************************************ * MSC8B DLD PARMB+4 MOVE A&B-REG RETURN VALUES. DST RQ8 * CLA MOVE ADDITIONAL VALUES. LDB FCNCD CPB D11 LDA B5 CPB D13 LDA B2 STA TEMP # ADDITIONAL WORDS. * SZA,RSS JMP FRBC NONE TO MOVE. * LDA PMB7A LDB ARQ10 MVW TEMP * FRBC LDA TEMP FIND RESULTING BYTE COUNT. ADA B2 ALS JMP D1000,I RETURN WITH (A) = BYTE COUNT. SKP * * SUBROUTINE TO CHECK IF INDEX IS WITHIN SPECIFIED RANGE. * (A) = INDEX (PRESERVED) (B) = UPPER LIMIT. * REQUEST IS REJECTED OF OUT OF BOUNDS. * BNDCK NOP STA LOC SAVE A-REGISTER. SSA JMP REJCT REJECT IF NEGATIVE. lCMA,INA ADA B ii SSA JMP REJCT REJECT IF BEYOND LIMIT. LDA LOC RESTORE A-REGISTER. JMP BNDCK,I RETURN. * LOC OCT 0 SPC 3 * * SUBROUTINE TO CHECK IF DATA LENGTH EXCEEDS DS/1000 LIMIT. * LIMCK NOP (A) = TCOUNT: -BYTES OR +WORDS. SSA,RSS JMP LIM1 + WORDS. CMA,INA - BYTES. CONVERT TO +WORDS. INA ARS LIM1 CMA,INA ADA MAXDA SSA JMP REJCT EXCEEDS LIMIT. REJECT. JMP LIMCK,I SKP * * CONSTANTS AND WORKING STORAGE. * B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B17 OCT 17 B20 OCT 20 B26 OCT 26 B27 OCT 27 B377 OCT 377 UP8 OCT 4000 BIT13 OCT 20000 BIT14 OCT 40000 BIT15 OCT 100000 NOT13 OCT 157777 SB21 OCT 100021 CLS20 OCT 100024 CL205 OCT 040315 CL209 OCT 040321 CL213 OCT 040325 CL216 OCT 040330 D8 DEC 8 D9 DEC 9 D10 DEC 10 D11 DEC 11 D13 DEC 13 D20 DEC 20 D23 DEC 23 D99 DEC 99 D211 DEC 211 N1 DEC -1 N4 DEC -4 N41 DEC -41 N42 DEC -42 N44 DEC -44 N45 DEC -45 SVMCL NOP SVSTR NOP TEMP NOP TEMP1 NOP RQLOG NOP RQLEN NOP DALEN NOP DAPTR NOP TCNT NOP PASWD OCT 22222 * PRMBL DEC 31 MAX LENGTH OF DS/1000 REQUEST. PARMB BSS 31 DS/1000 REQUEST BUFFER. PMB7A DEF PARMB+7 PCBA DEF PARMB+8 * TSTAD NOP ADDR OF TST ENTRY IN S.A.M. TSTLN DEC 14 LENGTH OF TST ENTRY. LTSTA DEF STREM ADDR OF LOCAL TST AREA. ******************************************************************** STREM NOP * * DS/1000 STREAM TYPE * LCSEQ NOP * L * LOCAL SEQUENCE NUMBER * NOP * O T * HOLDING CLASS NUMBER * NOP * C S * MONITOR CLASS NUMBER * FCNCD NOP * A T * CALL TYPE * MASK NOP * L * MASK WORD FOR POPEN * RQBUF BSS 8 * * DS/3000 FIXED FORMAT1<:6 HEADER * ******************************************************************** BSS L-8 PLUS REQUEST BUFFER. BSS DBL-L+33 MORE ROOM FOR DATA BUFFER. DABUF EQU RQBUF+33 FWA OF DATA BUFFER AREA. * MAXDA ABS DBL BLKLN ABS D * RQ0 EQU RQBUF RQ2 EQU RQBUF+2 RQ4 EQU RQBUF+4 RQ6 EQU RQBUF+6 RQ7 EQU RQBUF+7 RQ8 EQU RQBUF+8 RQ9 EQU RQBUF+9 RQ10 EQU RQBUF+10 RQ11 EQU RQBUF+11 RQ33 EQU RQBUF+33 * ARQ0 DEF RQ0 ARQ10 DEF RQ10 ARQ11 DEF RQ11 * BSS 0 ******** SIZE OF RPCNV ************ * END RPCNV -<  91741-18006 1740 S C0122 DS/1000 MODULE: CNSLM              H0101 :ASMB,L,R,C HED 3000 $STDLIST MONITOR * (C) HEWLETT-PACKARD CO. 1977 NAM CNSLM,19,30 91741-16006 REV 1740 770606 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT CNSLM EXT EXEC,#QXCL,#RSAX,D65GT,#LDEF,$OPSY IFZ EXT DBUG XIF * * * CNSLM * SOURCE: 91741-18006 * BINARY: 91741-16006 * PRGMR: JIM HARTSELL * DATE: 10 FEB 76 * * * * CNSLM IS THE DS/1000 MONITOR WHICH RECEIVES $STDLIST REQUESTS * INITIATED BY AN HP3000. * * CNSLM LDA B,I GET INPUT PARAMETER IFZ CPA D99 IS IT 99? JMP *+3 YES - CALL DEBUG XIF STA CLSN NO - NORMAL SCHEDULE - SAVE CLASS NUMBER JMP INIT GO TO GET THE FIRST REQUEST * IFZ JSB DBUG CALL DEBUG IF P1 WAS 99. DEF *+1 JSB EXEC TERMINATE...SAVE RESOURCES DEF *+4 DEF B6 DEF B0 DEF B1 JMP CNSLM TRY AGAIN XIF * INIT LDA $OPSY IS THIS AN RTE-III OR IV? RAR,SLA RSSI RSS JMP GET NO. LDB RSSI YES. GET "RSS" INSTRUCTION. STB MODI2 MODIFY TO DO CROSS-MAP LOAD. * GET JSB D65GT DO A CLASS GET AND WAIT FOR REQUEST DEF *+6 DEF CLSN CLASS # DEF RQBUF REQUEST BUFFER DEF D80 MAX LENGTH = 80 WORDS. DEF TEMP DUMMY BUFFER. DEF B0 JMP GET ERROR RETURN. * LDA RQBUF+2 GET STREAM TYPE WORD. AND B77 ISOLATE STREAM TYPE. CPA B20 JMP MESG STREAM 20 IS $STDLIST "REPLY". CPA B21 STREAM 21 IS $STDIN "REQUEST". JMP STDIN CPA B22 STREAM 22 IS $STDIN ALSO. JMP STDIN CPA B24 JMP CNSL1 IGNORE $STDIN ABORT. JMP IGNOR JUST REPLY TO OTHERS. * * WE HAVE A REQUEST FROM THE HP3000 FOR INPUT FROM THE * OPERATOR CONSOLE (PREVIOUS $STDLIST SHOULD HAVE * PROVIDED A PROMPT MESSAGE OR CHARACTER). * STDIN LDB B1 READ FROM LOGICAL UNIT 1. ADB B400 SET ECHO BIT. STB TEMP * JSB EXEC READ FROM OPERATOR CONSOLE. DEF *+5 DEF B1 DEF TEMP DEF RQBUF+10 ASCII BUFFER IN REPLY. DEF RQBUF+8 (+ = WORDS, - = BYTES) * LDA RQBUF+8 (B) = POS. BYTES OR POS. WORDS INPUT. SSA,RSS IF $STDIN SPECIFIED POS. WORDS, BLS MAKE (B) = POS. BYTES. * LDA B IF # BYTES IS ADA MD3 SSA,RSS ONE OR TWO, JMP REPLY LDA RQBUF+10 AND INPUT WORD = BLANKS, CPA BLNKS CLB SET 0-LEN REPLY MESSAGE. * REPLY ADB B4 STORE TOTAL REPLY BYTE LENGTH. STB RQBUF+7 COUNT CONTROL & LENGTH WORDS. * LDA B STORE WORD COUNT BYTE: INA ARS + WORDS ALF,ALF IN LEFT BYTE. IOR B5 INSERT MESSAGE CLASS. STA RQBUF * ADB MD4 RESTORE POS. BYTE LEN OF INPUT. LDA RQBUF+8 SSA IF $STDIN SPECIFIED NEG. BYTES, CMB,INB,RSS MAKE (B) = NEG. BYTES, BRS ELSE MAKE (B) = POS. WORDS. STB RQBUF+9 STORE NEG. BYTE OR POS. WORD COUNT. * CLB,INB STORE STATUS WORD. STB RQBUF+8 * LDA RQBUF+2 SET REPLY BIT IN STREAM WORD. IOR BIT15 STA RQBUF+2 * LDA RQBUF+4 REVERSE "FROM & TO" PROCESS #'S. ALF,ALF STA RQBUF+4 * JMP SEND SEND $STDIN REPLY. * * WE HAVE A $STDLIST REQUEST FROM THE HP3000. * DISPLAY ON USER-SPECIFIED LIST DEVICE. * !MESG LDA RQBUF+7 GET BYTE LENGTH. ADA MD4 OMIT CONTROL WORDS FROM COUNT. CMA,INA NEGATE MESSAGE BYTE LENGTH. STA BUFL SAVE NEGATIVE LENGTH. LDA RQBUF+8 GET FORMS CONTROL WORD. AND B377 STA CNWRD SAVE. * CLA,INA DISPLAY ON JSB OTPUT SYSTEM CONSOLE. LDA RQBUF+4 ARE WE TO BROADCAST? ALF,ALF AND B377 (I.E. IS "FROM PROCESS #" = 0?) SZA JMP NEXT NO. SEND REPLY. SPC 2 * BROADCAST MESSAGE TO ALL PROCESS LOGLUS LDB #LDEF YES. GET ADDR OF PNL HEADER ADDR. ADB MD1 LDB B,I GET ADDR OF PNL HEADER. STB TEMP1 ADDR OF PNL HEADER. CKPN2 LDB TEMP1 GET ADDR OF NEXT PNL ADDR. JSB LODWD (CROSS) LOAD ADDR OF NEXT PNL. SZA,RSS JMP NEXT NO MORE PNL ENTRIES. * STA TEMP1 SAVE ADDR OF NEXT PNL ENTRY. LDB A ADB B3 GET TO MTM LU WORD. JSB LODWD (CROSS) LOAD MTM LU. SZA,RSS JMP CKPN2 N/A FOR THIS PNL ENTRY. CPA B1 JMP CKPN2 ALREADY DISPLAYED ON LU 1. * JSB OTPUT BROADCAST TO THIS TERMINAL. * JMP CKPN2 GO CHECK NEXT PNL ENTRY. * * BUILD A REPLY FOR THE $STDLIST REQUEST. * NEXT LDA RQBUF STORE COUNT WORD. AND B377 IOR LB11 STA RQBUF LDA RQBUF+2 SET REPLY BIT. IOR BIT15 STA RQBUF+2 LDA RQBUF+4 REVERSE PROCESS NUMBERS. ALF,ALF STA RQBUF+4 AND B377 IF NO REPLY TO BE SENT, SZA,RSS JMP CNSL1 GO RELEASE SLAVE TCB. LDA B2 SET BYTE COUNT = 2. ADA APEND ADD POSSIBLE FCONTROL PARAM. STA RQBUF+7 LDA CCE STORE STATUS WORD. STA RQBUF+8 LDA RQBUF+10 GET PARAM WORD IN CASE OF FCONTROL. STA RQBUF+9 LDB APEND FCONTROL? SZB,RSS JMP CLR NO. BRS YES. ADJUST WORD COUNT.  BLF,BLF LDA RQBUF ADA B STA RQBUF CLR CLA STA APEND * SEND LDA RQBUF+7 GET BYTE COUNTER. INA CLE,ERA ADA D8 STA RQLEN LENGTH OF REPLY. * LDA #QXCL IS 3000 LINK DOWN? SSA JMP CNSL1 YES. IGNORE REPLY. * JSB EXEC WRITE REPLY TO QUEX. DEF *+8 DEF CLS20 DEF B0 DEF RQBUF DEF RQLEN DEF RQLEN DEF B0 DEF #QXCL NOP IGNORE ERROR RETURN. * JMP CNSL1 GO RELEASE SLAVE TCB. * IGNOR LDA B2 JUST REPLY TO FCONTROL. STA APEND JMP NEXT * CNSL1 JSB #RSAX DELETE SLAVE TCB. DEF *+4 DEF B7 CODE FOR "CLEAR". DEF RQBUF+5 LOCAL SEQUENCE #. DEF B2 CNSLM STREAM TYPE. * JMP GET GO WAIT FOR ANOTHER REQUEST. SKP * SUBROUTINE TO PERFORM $STDLIST ON LU IN A-REGISTER * OTPUT NOP ENTRY POINT STA LU STORE LU NUMBER LDA CNWRD JSB CNTRL PROCESS FORMS CONTROL JSB EXEC DISPLAY MESSAGE DEF *+5 DEF SB2 DEF LU BUFA DEF RQBUF+10 DEF BUFL NOP IGNORE ERRORS JMP OTPUT,I RETURN SKP * * SUBR. TO MAP HP3000 MPE FORMS CONTROL TO RTE. * (TEMP) = FORMS CONTROL WORD. * CNTRL NOP STA TEMP GET FORMS CONTROL WORD. CPA B60 IF OCTAL 60, JMP DBLSP GO SET DOUBLE SPACE. CPA B320 IF OCTAL 320, JMP BKARR GO DO BACK-ARROW THING. AND B300 CPA B200 IF OCTAL 2NN, SKIP NN LINES. RSS JMP CNTRL,I NEITHER. RETURN. * * SKIP N LINES VIA I-O CONTROL CALL. * LDA TEMP AND B77 STA TEMP IPRAM FOR I/O CONTROL. * LDA LOGLU AND FNMSK IOR FCN11 STA TEMP1 CONTROL WORD WITH FUNCTION CODE. * JSB EXEC I/O CONTROL CALL. DEF *+4 DEF B3  DEF TEMP1 CONTROL WORD. DEF TEMP IPRAM. * JMP CNTRL,I RETURN. * * INSERT A BACK-ARROW AS LAST CHAR. IN MESSAGE. * BKARR LDB BUFL CMB,INB POSITIVE # MESSAGE BYTES. CLE,ERB E SET IF ODD # BYTES. ADB BUFA ADDR OF WORD FOR BACK-ARROW. * LDA B,I CLEAR DESTINATION BYTE. SEZ,RSS ALF,ALF AND HB377 * IOR "_" INSERT BACK ARROW. SEZ,RSS ALF,ALF STA B,I * LDA BUFL INCR NEG. BYTE COUNT BY 1. ADA MD1 STA BUFL * JMP CNTRL,I RETURN TO DISPLAY SECTION. * * SET DOUBLE SPACE AFTER PRINT. * DBLSP LDB BUFL NEGATIVE BYTES. CMB,INB POSITIVE BYTES. CLE,ERB E SET IF ODD #. ADB BUFA SEZ,RSS JMP DBL LDA B,I ODD BYTES: BLANK EXTRA BYTE. AND HB377 IOR BLNK STA B,I INB GET TO NEXT WORD. * DBL LDA CRLF INSERT CR-LF AT END. STA B,I LDA BUFL ADVANCE BUFFER LENGTH. ADA MD2 SEZ ADA MD1 STA BUFL * JMP CNTRL,I RETURN. * B60 OCT 60 B320 OCT 320 B300 OCT 300 B200 OCT 200 FNMSK OCT 174077 FCN11 OCT 1100 "_" OCT 137 * LODWD NOP MODI2 LDA B,I (RSS IF DMS SYSTEM) JMP LODWD,I RETURN IF RTE-II. XLA B,I LOAD WORD FROM ALTERNATE MAP. JMP LODWD,I SKP * * CONSTANTS AND WORKING STORAGE. * A EQU 0 B EQU 1 B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B20 OCT 20 B21 OCT 21 B22 OCT 22 B24 OCT 24 B77 OCT 77 B400 OCT 400 B377 OCT 377 CLS20 OCT 100024 D8 DEC 8 D80 DEC 80 D99 DEC 99 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD4 DEC -4 SB2 DEF 2,I LB11 OCT 4400 HB377 OCT 177400 LU NOP CRLF OCT 6412 BLNK OCT 40 BLNKS ASC 1, LOGLU OCT 1 BIT15 OCT 100000 CLSN NOP RQBUF BSS 6$"80 RQLEN NOP APEND NOP TEMP NOP TEMP1 NOP CCE OCT 1000 BUFL NOP CNWRD NOP * BSS 0 SIZE OF CNSLM * END CNSLM $   91741-18007 1840 S C0222 &RMOTE              H0102 ASMB,R,L,C HED OPERATOR ACCESS TO 3000 * (C) HEWLETT-PACKARD CO. 1978 NAM RMOTE,19,80 91741-16007 REV 1840 780612 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * RMOTE * SOURCE: 91741-18007 * BINARY: 91741-16007 * JIM HARTSELL * OCT 21, 1975 * * DS/1000 PROGRAM TO PROVIDE OPERATOR ACCESS * TO A REMOTE HP3000 COMPUTER. RMOTE CAN BE USED BY SEVERAL * TERMINALS - SEE RTE MANUAL, MULTIPLE TERMINAL OPERATION. * ENT RMOTE * EXT EXEC,PARSE,CNUMD,KCVT,MESSS,REIO EXT OPEN,READF,POSNT,CLOSE EXT .ENTR,#LU3K,HELLO,BYE EXT D3KMS,D$STW,D$ZRO,D$WDC EXT D$RQB,D$INI,D$ERR EXT D$INP,D$LOG,D$SMP IFZ EXT DBUG XIF * A EQU 0 B EQU 1 SUP * * CHECK FOR DEBUG OPTION. * RMOTE EQU * IFZ LDA B,I IS P1 = -1 ? CPA MD1 (*ON,RMOTE,-1 TO INVOKE DEBUG) RSS JMP INIT NO. INITIALIZE DATA LINK. * JSB DBUG YES. ALLOW DEBUG COMMANDS HERE, DEF *+1 FOLLOWED BY "CONTINUE". * JSB EXEC SAVE RESOURCES & TERMINATE. DEF *+4 RE-SCHEDULE RMOTE WITH DESIRED PARAMS. DEF B6 DEF B0 DEF B1 * JMP RMOTE RE-SCHEDULE STARTS HERE. XIF * * INITIALIZE TRANSFER STACK AND PROMPT CHARACTER. * INIT STB TEMP SAVE ADDR OF SCHEDULE PARAMS. * LDA STKHD RESET STACK POINTER. STA P.STK CLA,INA SET FIRST STACK ENTRY STA P.STK,I FOR LOGICAL UNIT 1 (DEFAULT). CLA STA DSTLU RESET DEST. LU TO LOCAL. STA D$SMP FOR RTE-gM, CLEAR SMP NUMBER. * LDA LPRMP INITIALIZE FOR LOCAL PROMPT CHAR. STA CPRMP LDA PROMP AND B377 IOR CPRMP STA PROMP OPERATOR PROMPT CHAR. * LDA A.TR AND B377 IOR CPRMP STA A.TR CANNED TRANSFER COMMAND. * LDA TEMP,I CHECK IF P1 = ASCII PARAM. AND HB377 SZA,RSS JMP STR NO. MUST BE INPUT LU. * * FETCH SCHEDULE PARAMETERS (FL,NA,ME,SEVERITY,LIST). * LDA A.TR GENERATE "$TR,FLNAME" IN BUFFER. STA INBUF LDA A.TR1 STA INBUF+1 LDA TEMP,I STA INBUF+2 ISZ TEMP LDA TEMP,I SZA,RSS LDA BLNKS STA INBUF+3 ISZ TEMP LDA TEMP,I SZA,RSS LDA BLNKS STA INBUF+4 ISZ TEMP * LDA B5 SET COUNT. STA INCNT * LDA TEMP,I SET UP DUMMY SCHEDULE PARAMS. STA ALTBK+3 SEVERITY CODE. ISZ TEMP LDA TEMP,I STA ALTBK+2 LIST LU. * LDA DFALT POINT TO DUMMY PARAMS. STA TEMP * STR STA TRFLG SET/CLEAR FLAG FOR QUERY SECTION. * * FETCH SCHEDULE PARAMETERS (LU,LOG,LIST,SEVERITY CODE). * LDA TEMP,I GET LU OF INPUT DEVICE. SZA,RSS JMP STAT IF NONE, USE DEFAULT. CPA B1 IGNORE IF = 1. JMP STAT * STA P.STK,I PUT SPECIFIED LU INTO XFER STACK. * STAT LDA P.STK,I JSB EQTYP CHECK EQ. TYPE OF INPUT LU. STA LUTYP * ISZ TEMP LDA TEMP,I GET LU OF LOG DEVICE. SZA JMP SVLOG * LDB LUTYP CLA,INA EITHER LU 1 OR SZB,RSS LDA P.STK,I INPUT LU IF TTY DEVICE. SVLOG STA LOGLU STA D$LOG * LDB LUTYP SET LU FOR ERROR MESSAGES: CLA,INA SZB,RSS LDA P.STK,I INPUT LU IF TTY DEVICE. STA ERRLU OTHERWISE, 1. * ISZ TEMP LDA TEMP,I GET LU OF LIST DEVICE, SZA,RSS ,LDA B6 OR USE DEFAULT = 6. STA LSTLU * ISZ TEMP LDA TEMP,I SAVE SEVERITY CODE. STA SEVER * LDA TRFLG IF SCHEDULED WITH FILE NAME, SZA ALREADY HAVE TR SIMULATED. JMP CHKPR SKP * * DISPLAY PROMPT CHARACTER (IF TTY DEVICE). * CONTROL RETURNS HERE WHEN REQUEST PROCESSING COMPLETES. * QUERY LDA P.STK,I CHECK CURRENT INPUT: AND HB377 NON ZERO IF FILE NAME, ELSE LU. SZA JMP REMRD DISK FILE. * LDA P.STK,I STA TEMP SAVE LU FOR LATER USE. JSB EQTYP CHECK TYPE. STA LUTYP SZA JMP LOCRD LU NOT TTY DEVICE. * JSB REIO DISPLAY PROMPT ON TTY DEVICE. DEF *+5 DEF B2 DEF P.STK,I DEF PROMP DEF B1 * LDA P.STK,I SET ECHO BIT. IOR B400 STA TEMP * * INPUT OPERATOR REQUEST FROM CURRENT DEVICE OR FILE. * LOCRD JSB REIO LU READ. DEF *+5 DEF SD1 DEF TEMP DEF INBUF DEF D40 RSS JMP RDOK IF ERROR ON INPUT LU, DST EMSG+3 SET LDA EMSG+2 UP AND HB377 ERROR IOR B40 MESSAGE. JMP INERR GO TO INPUT ERROR HANDLER. * RDOK STA TEMP SAVE STATUS WORD. STB INCNT SAVE WORD COUNT. JSB EOFCK CHECK FOR END OF FILE. JMP TRANS GOT IT. JMP ECHO GO ECHO IF NECCESSARY. * REMRD JSB READF LOCAL DISK FILE. DEF *+6 (OPENED WHEN FIRST TRANSFER DEF IDCB WAS PERFORMED) DEF IERR DEF INBUF DEF D40 DEF INCNT ACTUAL WORD COUNT. * JSB ERCHK CHECK FOR ERRORS. * LDA INCNT IF EOF, GENERATE TR REQUEST. INA,SZA JMP BUMP TRANS LDA A.TR RESULTS IN TR,-1 (TO PREVIOUS ONE). STA INBUF LDA A.TR+1 STA INBUF+1 LDA B2 STA INCNT JMP ECHO * BUMP LDA P.STK AD]A B3 ISZ A,I BUMP RECORD COUNT. * * ECHO THE REQUEST IF NOT INPUT FROM TTY DEVICE. * ECHO LDA LUTYP SZA,RSS JMP CKCNT IT IS A TTY DEVICE. * LDA SEVER ECHO IF SZA,RSS SEVERITY CODE = 0. JSB ECHPR * CHKPR LDA INBUF FIRST CHARACTER MUST AND HB377 BE CURRENT PROMPT CHARACTER. CPA CPRMP RSS JMP INVAL * LDA INBUF BLANK OUT THE PROMPT CHAR. AND B377 IOR BLANK STA INBUF * CKCNT LDB INCNT IGNORE REQUEST IF NULL. RBL MAKE CHARACTER COUNT. SZB,RSS JMP QUERY * * PARSE THE OPERATOR REQUEST. * STB TEMP * JSB PARSE DEF *+4 DEF INBUF DEF TEMP DEF PRAMS PARAMETER BUFFER ADDRESS. * JMP M0000 TRY FOR RMOTE COMMAND FIRST. * * LOCAL RTE OR REMOTE HP3000 COMMAND. * OTHER LDA INCNT SET UP +CHAR COUNT. RAL STA TEMP SZA,RSS JMP QUERY IGNORE IF ZERO. * LDA DSTLU IF LOCAL MODE, SEND COMMAND SZA,RSS TO RTE. JMP LCRTE * * SEND REMOTE HP3000 COMMANDS. * LDA D$SMP HAS "HELLO" BEEN ENTERED? SZA,RSS JMP NHLLO NO. ERROR. * JSB BLKIL KILL LEADING BLANKS IN COMMAND. SNCMD JSB CMNDS SEND COMMAND TO HP3000. DEF *+3 DINBF DEF INBUF DEF TEMP * JMP QUERY * * PASS COMMAND TO LOCAL RTE. * LCRTE JSB MESSS PROCESS COMMAND. DEF *+4 (RU & ON COME THRU HERE IF 5TH DEF INBUF PARAM WAS SPECIFIED IN COMMAND.) DEF TEMP DEF STKHD,I PASS LU OF USER'S TERMINAL. * SZA,RSS IF CHAR CNT NON-ZERO, JMP QUERY * STA TEMP NEGATIVE CHARACTER COUNT. * JSB REIO DISPLAY REPLY MESSAGE. DEF *+5 DEF SD2 DEF LOGLU DEF INBUF DEF TEMP RSS ERROR CHECK. * JMP QUERY * * ERROR ON OUTYNPUT LU OTERR DST EMSG+3 SET LDA EMSG+2 UP AND HB377 ERROR IOR B40 MESSAGE JSB EROUT PRINT IT. JMP QUERY SKP * * CHECK THE OPERATOR REQUEST CODE AGAINST THE LEGAL * REQUEST CODES AND JUMP TO THE PROPER PROCESSOR. * * TO ADD NEW REQUEST ONE MERELY: * A. ADDS ASCII OPERATION CODE TO TABLE "LDOPC". * B. ADDS PROCESSOR START ADDRESS TO TABLE "LDJMP". * C. ADDS PROCESSOR CODING TO PROCESS THE REQUEST. * M0000 LDA OP FETCH OPERATION CODE. AND UMASK UPSHIFT. STA B STB OPP SET STOP FLAG. LDA LDOPC SET OPERATION TABLE POINTER. STA TEMP1 LDA LDJMP SET PROCESSOR JUMP ADDRESS. STA TEMP2 * M0030 CPB TEMP1,I COMPARE WITH TABLE VALUE. JMP TEMP2,I COMPARES. GO DO IT. * ISZ TEMP1 KEEP LOOKING. ISZ TEMP2 JMP M0030 * LDOPC DEF *+1 OPERATION CODE TABLE ADDRESS. * ASC 8,SWHEBYTREXRUONLL OPP NOP OP CODE FOR CURRENT REQ. * LDJMP DEF *+1,I JMP ADDRESS FOR EACH OP CODE. DEF M0100 SWITCH. DEF M0200 HELLO. DEF M0300 BYE. DEF M0400 TRANSFER. DEF M0500 EXIT. DEF M0600 "RU" COMMAND TRAP. DEF M0600 "ON" COMMAND TRAP. DEF M0700 LL COMMAND. DEF OTHER ASSUME RTE OR HP3000 COMMAND. * NHLLO JSB DSPLY DISPLAY "NEED HELLO" DEF NHMSG JMP QUERY * NHMSG DEF *+2 DEF B6 ASC 6,NEED "HELLO" * INVAL JSB DSPLY DISPLAY "INVALID INPUT". DEF INVLM JMP QUERY * INVLM DEF *+2 DEF B7 ASC 7,INVALID INPUT * UMASK OCT 157737 UPSHIFT MASK. SKP * * SW[,N] * * CHANGE OR TOGGLE DESTINATION OF OPERATOR COMMANDS. * M0100 LDA CP1 CHECK IF FIRST PARAM SPECIFIED. SZA JMP M0105 PARAM SPECIFIED. * LDB CPRMP NO PARAM. TREAT AS A TOGGLE. CLA [ CPB RPRMP IS CURRENT PROMPT = REMOTE PROMPT? JMP M0110 YES. SWITCH TO LOCAL PROMPT. LDA #LU3K NO. GET LU OF 3000. SZA JMP M0110 GO CHANGE CURRENT PROMPT. JMP NLSTN TELL USER HE NEEDS TO RUN "LSTEN". * M0105 LDA P1 PARAM GIVEN: SZA,RSS 0=LOCAL RTE, N=HP3000 LU. JMP M0110 LDB #LU3K IF NON-ZERO, MUST BE IN #LU3K. SZB,RSS JMP NLSTN TELL USER HE NEEDS TO RUN "LSTEN". CPB A CHECK FOR VALID REMOTE LU. JMP M0110 VALID. JSB DSPLY DISPLAY "INVALID REMOTE LU". DEF ILLU JMP CLRLU * M0110 STA DSTLU CHANGE THE PROMPT CHARACTER: LDB LPRMP LOCAL IF NEW LU = 0, SZA LDB RPRMP REMOTE IF NEW LU NON-ZERO. STB CPRMP * LDA PROMP CHANGE OPERATOR PROMPT. AND B377 IOR CPRMP STA PROMP * LDA A.TR CHANGE CANNED TR AND B377 COMMAND PROMPT. IOR CPRMP STA A.TR * JMP QUERY * DSTLU OCT 0 CURRENT DESTINATION LU. * NLSTN JSB DSPLY DISPLAY "NEED TO RUN LSTEN". DEF NLSN * CLRLU CLA STA DSTLU * JMP QUERY * NLSN DEF *+2 DEF D10 ASC 10,NEED TO RUN "LSTEN" * ILLU DEF *+2 DEF D9 ASC 9,INVALID REMOTE LU SKP * * PROCESSOR FOR "HELLO" COMMAND. * M0200 LDA CPRMP IF LOCAL PROMPT, CPA LPRMP JMP NDREM COMMAND IS AN ERROR. * JSB BLKIL KILL LEADING BLANKS IN COMMAND. LDA INCNT GET MESSAGE BYTE LENGTH. CLE,ELA STA #BYTS * LDA P.STK,I IF CURRENT INPUT IS A LOGICAL UNIT, STA B USE IT. IF NOT, USE SPECIFED LU. AND HB377 SZA LDB STKHD,I ADB B400 SET ECHO BIT. STB D$INP * JSB HELLO SEND "HELLO" TO HP3000. DEF *+7 DEF IERR DEF DSTLU LU OF HP3000. DEF LOGLU LU OF LOG DEVICE . DEF SMPNM RETURNED PROCESS NUMBER. DEF INBUF ADDR OF HELLO MESSAGE. DEF #BYTS POS. # BYTES. * LDA IERR CHECK FOR ERRORS. SZA JMP BDHEL FAILED. JMP QUERY BDHEL CPA B1 ERROR CODE = 1? RSS JMP RFAIL NO. * JSB DSPLY YES. DISPLAY MESSAGE. DEF HFAIL * JMP QUERY * HFAIL DEF *+2 DEF D13 ASC 13,HELLO FAILED OR LINE DOWN SKP * * PROCESSOR FOR "BYE" COMMAND. * M0300 LDA CPRMP IF LOCAL PROMPT, CPA LPRMP JMP NDREM COMMAND IS AN ERROR. LDA D$SMP IF NO HELLO ISSUED, SZA,RSS JMP NHLLO COMMAND IS AN ERROR. * JSB BYE SEND "BYE" TO HP3000. DEF *+5 DEF IERR DEF DSTLU LU OF HP3000. DEF LOGLU LU OF LOG DEVICE. DEF SMPNM PROCESS NUMBER. * LDA IERR CHECK FOR ERRORS. SZA JMP RFAIL FAILED. * JMP QUERY SKP RFAIL CPA B5 JMP TMOUT CPA "IO" JMP OTERR CPB "05" JMP TMOUT CPA B1 JMP DSCNT CPB "01" JMP DSCNT * JSB DSPLY DISPLAY "REQUEST FAILED". DEF RQFL * JMP QUERY * DSCNT JSB DSPLY DISPLAY "LINK IS DISCONNECTED". DEF DISCN JMP QUERY * RQFL DEF *+2 DEF B7 ASC 7,REQUEST FAILED * TMOUT JSB DSPLY "TIMEOUT" DEF TOMSG * JMP QUERY * TOMSG DEF *+2 DEF D15 ASC 15,TIMEOUT: NO REPLY FROM REMOTE * NDREM JSB DSPLY NOT LOCAL COMMAND. DEF NTLOC * JMP QUERY * NTLOC DEF *+2 DEF D9 ASC 9,NOT LOCAL COMMAND * DISCN DEF *+2 DEF D10 ASC 10,LINK IS DISCONNECTED SKP * TR PROCESSOR. * * TRANSFER CONTROL TO LU OR DISK FILE. * M0400 LDA P.STK,I IF CURRENT INPUT IS FROM A AND HB377 DISC FILE, CLOSE IT. SZA,RSS JMP M1210 *  JSB CLOSE DEF *+3 DEF IDCB DEF IERR * CLA CLEAR IDCB OPEN FLAG. STA OPNFL * M1210 LDA P1 GET PARAM 1. SZA,RSS IF NOT SPECIFIED, CCA SIMULATE "TR,-1". SSA,RSS NEGATIVE INTEGER? JMP M1220 NO. * * BACK UP THROUGH TRANSFER STACK. * LDB P.STK TOP OF STACK? BKUP CPB STKHD JMP M0500 YES. SIMULATE "EX" REQUEST. ADB MD4 NO. BACK UP 1 ENTRY. INA,SZA JMP BKUP LOOP TILL DONE. STB P.STK SET NEW STACK ADDRESS. JMP M1250 GO CHECK FOR FILE. * * ADD NEW CONTROL TO THE TRANSFER STACK. * M1220 LDA P.STK BUMP TO NEXT ENTRY. ADA B4 STA P.STK CPA STKEN RSS JMP M1230 JSB DSPLY STACK OVERFLOW. DEF STKOV * JMP QUERY * M1230 LDB P1 STORE LU OR FILE NAME. STB A,I INA LDB P1+1 STB A,I INA LDB P1+2 STB A,I INA CLB,INB SET RECORD NUMBER TO 1. STB A,I * * IF DISK FILE, OPEN AND OPTIONALLY POSITION. * M1250 LDA P.STK,I AND HB377 SZA,RSS JMP QUERY LOCAL LU. GO GET NEXT REQUEST. * STA LUTYP SET LU TYPE NON-TTY. JSB OPEN OPEN THE FILE. DEF *+4 DEF IDCB DEF IERR DEF P.STK,I * LDA IERR PROCESS ERRORS ONLY IF SSA IERR IS NEGATIVE. JSB ERCHK ISZ OPNFL SET OPEN FLAG. * LDA P.STK POSITIONING REQUIRED? ADA B3 LDB A,I CPB B1 (REC. CNT MORE THAN 1?) JMP QUERY NO. STB TEMP YES. * JSB POSNT POSITION TO NEXT RECORD. DEF *+5 DEF IDCB DEF IERR DEF TEMP NUR GREATER THAN ZERO. DEF TEMP ABSOLUTE RECORD NUMBER. * JSB ERCHK CHECK FOR ERRORS. JMP QUERY * * TRANSFER STACK: * FOR EACH ENTRY, WORD 1 = INTEGER LU OR * FIRST 2 FNAME CHAR. * WORD 2,3 = REST OF FNAME. * WORD 4 = NEXT RECORD NUMBER. * P.STK NOP STACK POINTER. STKHD DEF *+1 * BSS 32 8 ENTRIES. * STKEN DEF * STACK LWA+1. * STKOV DEF *+2 DEF D9 ASC 9,TR STACK OVERFLOW SKP * * EX PROCESSOR * * TERMINATE THE OPERATOR INTERFACE PROGRAM. * M0500 LDA D$SMP CHECK IF A "HELLO" IS OUTSTANDING. SZA,RSS JMP M0510 NO. * JSB BYE YES. ISSUE AN AUTO BYE. DEF *+5 DEF IERR DEF #LU3K DEF LOGLU DEF SMPNM * LDA IERR CHECK FOR ERRORS. SZA,RSS JMP M0510 NONE. JSB DSPLY ERROR FROM "BYE". DEF BYMSG * M0510 JSB DSPLY DISPLAY TERMINATION MESSAGE DEF TRMSG ON LOG DEVICE. * JSB CLSFL CLOSE OPEN FILES. * JSB EXEC EXIT. DEF *+2 DEF B6 * BYMSG DEF *+2 DEF D9 ASC 9,AUTO "BYE" FAILED TRMSG DEF *+2 DEF B6 ASC 6, $END RMOTE SKP * * PROCESSOR FOR "RU" COMMAND TRAP. IF ENTERED UNDER THE LOCAL * PROMPT, AND 5TH PARAM IS NOT SPECIFIED, PASS SESSION NUMBER * AS 5TH SCHEDULE PARAMETER. * M0600 LDA RPRMP IF REMOTE PROMPT, CPA CPRMP JMP OTHER LET IT GO BY. LDA P2 FIRST PARAM = "NOW"? CPA "NO" JMP OTHER YES. LET IT GO BY. * LDA CP6 WAS 5TH PARAM SPECIFIED? SZA JMP M0610 YES. LEAVE IT ALONE. * LDA D$SMP NO. GET CURRENT PROCESS NUMBER, CMA,INA NEGATE IT, STA P6 AND STORE AS 5TH SCHEDULE PARAM. * M0610 LDB STKHD,I LDA CP2 IS FIRST PARAM SPECIFIED? SZA,RSS STB P2 NO. PASS LU OF USER'S TERMINAL. * JSB EXEC SCHEDULE THE PROGRAM WITH WAIT. DEF *+8 PASS 1ST 4 PARAMS ALONG WITH 5TH. DE?F SD9 DEF P1 PROGRAM NAME. DEF P2 SCHEDULE PARAMETERS. DEF P3 DEF P4 DEF P5 DEF P6 JMP SCERR ERROR RETURN. * SZA,RSS NORMAL RETURN. JMP QUERY LDA PGBZY PROGRAM WAS BUSY. JMP SCMSG * SCERR CPA "SC" RSS JMP SCM1 NOT A SCHEDULING ERROR. LDA DSC03 CPB "03" JMP SCMSG "ILLEGAL STATUS" LDA DSC05 CPB "05" JMP SCMSG "NO SUCH PROG" SCM1 LDA RQFL "REQUEST FAILED" SCMSG STA SCM2 JSB DSPLY SCM2 NOP JMP QUERY * DSC03 DEF *+1 DEF *+2 DEF B7 ASC 7,ILLEGAL STATUS DSC05 DEF *+1 DEF *+2 DEF B6 ASC 6,NO SUCH PROG PGBZY DEF *+1 DEF *+2 DEF B5 ASC 5,PROG BUSY SKP * * PROCESSOR FOR LL COMMAND. CHANGE $STDLIST DESTINATION (D$LOG). * M0700 LDB CP1 JSB INTCK CHECK FOR NUMERIC PARAM. LDA P1 IOR B200 STA D$LOG CHANGE $STDLIST DESTINATION. JMP QUERY * B200 OCT 200 SKP * * * SEND OPERATOR COMMAND (ASCII STRING) TO HP3000. * * CALLING SEQUENCE: * * JSB CMNDS * DEF *+3 * DEF BUFA ADDR OF ASCII STRING. * DEF BUFL POS. # BYTES IN STRING. * PARMS NOP ADDR OF ASCII COMMAND STRING. NOP LENGTH OF ASCII STRING (+BYTES). * CMNDS NOP JSB .ENTR GET PARAM ADDRESSES. DPRAM DEF PARMS CLA CLEAR ERROR CODE STORAGE. CLB DST D$ERR * * BEGIN CONSTRUCTION OF REQUEST BUFFER WITH * THE 8-WORD FIXED FORMAT FOR REMOTE COMMANDS. * LDA DPRAM POINT TO ADDR OF FIRST PARAM. JSB D$INI INITIALIZE BUFFER STUFFERS. * LDA B3 STORE MESSAGE CLASS = 3. JSB D$STW CLA CLEAR COMPUTER ID. JSB D$STW LDA B20 STORE STREAM TYPE = 20 OCTAL. JSB D$STW LDA MD4 CLEAR SUB-STREAM, PROCESS #'S. JSB D$ZRO LDA PARMS+1,I SET BYTE COUNT IN REQUEST. ADA MD2 ADJUST FOR D$STW. JSB D$STW STORE MESSAGE BYTE COUNT. * * MOVE ASCII MESSAGE TO REQUEST BUFFER. * LDA PARMS COMMAND MESSAGE SOURCE ADDRESS. LDB PARMS+1,I NUMBER OF BYTES. INB ROUND UP. CLE,ERB MAKE WORDS. STB TEMP LDB D$RQB DESTINATION ADDRESS. ADB D8 * MVW TEMP MOVE THE MESSAGE. * JSB D$WDC SET WORD LENGTH OF REQUEST. * * SET UP INPUT LU FOR $STDIN REQUESTS. * LDA P.STK,I IF CURRENT INPUT IS A LOGICAL UNIT, STA B USE IT. IF NOT, USE SPECIFIED LU. AND HB377 SZA LDB STKHD,I ADB B400 SET ECHO BIT. STB D$INP * * SEND REQUEST TO THE 3000 BY WRITING TO * QUEX'S CLASS, AND WAIT FOR THE REPLY. * JSB D3KMS SHIP THE REQUEST BUFFER TO QUEX. DEF *+2 NO ABORT IF ERROR. DEF CONWD NO TIMEOUT. JMP RFAIL REQUEST FAILED. * JMP CMNDS,I RETURN. * CONWD OCT 140000 SKP * * SUBROUTINE TO TEST FOR END OF FILE ON VARIOUS DEVICES. * * TEMP = EQT STATUS WORD. * INCNT = EQT WORD COUNT. * LUTYP = EQUIPMENT TYPE. * JSB EOFCK * EOF RETURN * NORMAL RETURN * EOFCK NOP CLE LDA LUTYP EOF DEPENDS ON DEVICE. SZA,RSS JMP EOF1 TTY. CPA B1 JMP EOF1 PHOTOREADER. CPA D9 JMP EOF4 CARD READER. CPA D13 JMP EOF4 MARK SENSE. CCE DEFAULT TO MAG TAPE. * EOF1 LDA TEMP GET STATUS WORD. ALF,ALF SEZ,RSS IF E=1, CHECK BIT 7. JMP EOF2 SSA JMP EOF3 EOF2 RAL,RAL CHECK BIT 5. SSA,RSS JMP EOF5 NO EOF. * EOF3 LDA LUTYP END OF FILE. SZA IF TTY, OUTPUT CAR. RET. JMP EOF6 * JSB REIO OUTPUT CARRIAGE-RETURN. DEF *+5 DEF B2E DEF P.STK,I DEF CR DEF B1 * JMP EOF6 * EOF4 LDA INCNT CHECK FOR BLANK CARD. SZA EOF5 ISZ EOFCK EOF6 JMP EOFCK,I SKP * * KILL LEADING BLANKS IN COMMAND. * BLKIL NOP LBLNK LDA INBUF CHECK FOR LEADING BLANK AND HB377 (OK FOR RTE, BUT NG FOR 3000). CPA BLANK RSS JMP BLKIL,I NONE. RETURN. * LDA DINBF ADDRESS OF ASCII COMMAND. STA TEMP1 SOURCE POINTER. STA TEMP2 DESTINATION POINTER. LDA INCNT CMA,INA STA TEMP3 NEGATIVE # WORDS. LDB TEMP1,I PRIME THE PUMP. ISZ TEMP1 * LOOP1 LDA TEMP1,I MOVE STRING LEFT ONE BYTE. RRL 8 STB TEMP2,I ISZ TEMP2 RRL 8 ISZ TEMP1 ISZ TEMP3 JMP LOOP1 LOOP TILL DONE. * CCA SUBTRACT 1 FROM ADA TEMP CHARACTER COUNT. STA TEMP SZA CHECK FOR ZERO LENGTH. * JMP LBLNK GO LOOK FOR ANOTHER LEADING BLANK. * JMP QUERY ALL BLANKS. GET NEXT COMMAND. SKP * * SUBROUTINE TO CHECK INTEGER PARAMETERS. * INTCK NOP (B) = CODE WORD. SZB,RSS JMP INVAL ERROR IF MISSING. ADB MD1 SZB JMP INVAL ERROR IF NOT NUMERIC. JMP INTCK,I SPC 3 * * SUBROUTINE TO FIND EQUIPMENT TYPE OF AN LU. * RETURN DRIVER TYPE, OR 0 FOR INTERACTIVE LU. * EQTYP NOP (A) = LU. STA TEMP1 * JSB EXEC DEF *+6 DEF D13 ICODE FOR STATUS DEF TEMP1 LU DEF TEMP2 EQT 5 RTN DEF TEMP3 EQT 4 RTN DEF TEMP4 UP/SUBCHANNEL RTN * LDA TEMP2 ALF,ALF ISOLATE AND B77 DRIVER NUMBER. STA TEMP2 * CPA B5 DVR05? JMP SUBC? YES--CHECK SUBCHANNEL. CPA B7 DVR07? JMP SUBC? YES--CHECK SUBCHANNEL. JMP EQTYP,I RETURN WITH TYPE IN A-REG. dNLH* SUBC? LDA TEMP4 DVR05 OR DVR07. AND B37 ISOLATE SUBCHANNEL. SZA IF ZERO, RETURN ZERO... LDA TEMP2 ELSE RETURN TYPE. JMP EQTYP,I RETURN. SPC 3 * * SUBROUTINE TO PROCESS ERRORS IN FILE CALLS. * ERCHK NOP LDA IERR CAN BE POS. OR NEG. SZA,RSS JMP ERCHK,I NO ERROR. * LDB BLANK MAKE POSITIVE, SET SIGN WORD. SSA,RSS JMP ERCK1 LDB MINUS CMA,INA ERCK1 STB EMSG+3 STA TEMP * JSB CNUMD DECIMAL CONVERSION. DEF *+3 CONVERT TO ASCII. DEF TEMP DEF ASCI LDA ASCI+2 STORE LAST 2 DIGITS IN MSG BUFFR. IOR LB20 LEADING BLANK TO ASCII 0. STA EMSG+4 LDA ASCI+1 SET UP SIGN AND AND B377 FIRST DIGIT. IOR EMSG+3 IOR B20 LEADING BLANK TO ASCII 0. STA EMSG+3 STORE IN MESSAGE BUFFER. SPC 2 * RESULT OF BAD INPUT LU/FILE: * ECHO OFFENDING COMMAND (IF SEVERITY=2) * CLOSE COMMAND FILE (IF OPEN) * DISPLAY ERROR MESSAGE * GENERATE TR TO INITIAL LU OR 1 * INERR LDA SEVER IF SEVERITY CPA B2 CODE = 2, JSB ECHPR ECHO OFFENDING COMMAND. JSB EROUT PRINT ERROR MESSAGE. * JSB CLSFL CLOSE COMMAND FILE (IF ONE IS OPEN). * LDA STKHD IF STACK POINTER CPA P.STK IS AT THE TOP, JMP M0500 EXIT RMOTE! * STA P.STK RESET STACK POINTER. * LDA LUTYP SZA,RSS JMP QUERY * LDA A.TR GENERATE TR TO INITIAL LU (OR 1), giN STA INBUF USING CURRENT PROMPT CHAR. LDA A.TR1 STA INBUF+1 LDA A.TR1+1 STA INBUF+2 LDA STKHD,I ENTRY AT TOP OF STACK. AND HB377 SZA FILE NAME? JMP TR1 YES. USE TR,1. * JSB KCVT NO. CONVERT LU TO ASCII AND DEF *+2 PLACE IN TR COMMAND. DEF STKHD,I * STA INBUF+2 TR1 LDA B3 STA INCNT JMP ECHO SPC 3 * PRINT ERROR MESAGE * EROUT NOP JSB REIO DEF *+5 DEF B2 DEF ERRLU DEF EMSG DEF B5 JMP EROUT,I * EMSG ASC 5,RMOTE ERRLU NOP SPC 3 * * ECHO LAST INPUT * ECHPR NOP JSB REIO DEF *+5 DEF B2 DEF LOGLU DEF INBUF DEF INCNT JMP ECHPR,I SPC 3 * * SUBROUTINE TO CLOSE THE COMMAND FILE OPEN TO IDCB, IF OPEN. * CLSFL NOP LDA OPNFL SZA,RSS JMP CLSFL,I DCB IS ALREADY CLOSED. * JSB CLOSE CLOSE THE COMMAND FILE. DEF *+3 DEF IDCB DEF IERR * CLA STA OPNFL CLEAR OPEN FLAGS. JMP CLSFL,I RETURN. SPC 4 * * DISPLAY ON LOG DEVICE. * DSPLY NOP LDB DSPLY,I GET ADDR OF MESSAGE BUFFER. LDA B,I STA DSPL1 ADA MD1 GET ADDR OF MESSAGE LENGTH. LDA A,I STA DSPL2 * JSB REIO DISPLAY. DEF *+5 DEF SD2 DEF LOGLU DSPL1 NOP MESSAGE ADDRESS. DSPL2 NOP MESSAGE LENGTH. * NOP IGNORE ERRORS ISZ DSPLY RETURN. JMP DSPLY,I SKP * * PARAMETER STORAGE AREA. * PRAMS NOP FLAG WORD. OP BSS 3 OPERATION CODE. CP1 NOP FLAG WORD. P1 BSS 3 PARAM 1 (UP TO 6 CHARACTERS). CP2 NOP P2 BSS 3 NOP P3 BSS 3 NOP P4 BSS 3 NOP P5 BSS 3 CP6 NOP P6 BSS 3 NOP BSS 3 NOP PARAMEP  TER COUNTER. * B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B20 OCT 20 B37 OCT 37 B40 OCT 40 B77 OCT 77 B377 OCT 377 B400 OCT 400 LB20 OCT 10000 HB377 OCT 177400 MD1 DEC -1 MD2 DEC -2 MD4 DEC -4 D8 DEC 8 D9 DEC 9 D10 DEC 10 D13 DEC 13 D15 DEC 15 D40 DEC 40 SD1 DEF 1,I SD2 DEF 2,I SD9 DEF 9,I "IO" ASC 1,IO "NO" ASC 1,NO "SC" ASC 1,SC "01" ASC 1,01 "03" ASC 1,03 "05" ASC 1,05 OPNFL NOP ASCI BSS 3 SMPNM NOP TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP INCNT NOP # WORDS IN INPUT REQUEST. #BYTS NOP LUTYP NOP EQ. TYPE OF INPUT DEVICE. LOGLU NOP LU OF LOG DEVICE. LSTLU NOP LU OF LIST DEVICE. SEVER NOP SEVERITY CODE. A.TR ASC 2,$TR TR COMMAND WITH CURRENT PROMPT CHAR. A.TR1 ASC 2,R,1 CR OCT 6400 LPRMP OCT 22000 "$" PROMPT FOR LOCAL RTE. RPRMP OCT 21400 "#" PROMPT FOR REMOTE 3000. CPRMP NOP CURRENT PROMPT (LEFT BYTE). IERR NOP PROMP ASC 1,$_ CURRENT OPERATOR PROMPT. BLANK OCT 020000 BLNKS OCT 20040 MINUS OCT 026400 DFALT DEF ALTBK ALTBK OCT 0,0,0,0 TRFLG NOP INBUF BSS 40 BUFFER. IDCB BSS 144 * BSS 0 **** SIZE OF RMOTE **** * END RMOTE    91741-18008 1740 S C0122 DS/1000 MODULE: D$EQT              H0101 ASMB,R,L HED SLC EQT EXTENSION * (C) HEWLETT-PACKARD CO. 1977 NAM D$EQT,30 91741-16008 REV 1740 770830 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ENT D$EQT,D$XS5 * * D$EQT * SOURCE: 91741-18008 * BINARY: 91741-16008 * JIM HARTSELL * DEC. 15, 1975 * S EQU 56 LENGTH OF EQTX STORAGE AREA. T EQU 100 LENGTH OF EQTX EVENT TRACE TABLE. F EQU 4 LENGTH OF EQTX CHAR TRACE TABLE. * * EQT EXTENSION BUFFER - SYNCHRONOUS LINE CONTROL PACKAGE. * D$EQT ABS 20+S+T+F LENGTH OF EQT EXTENSION. OCT 100030 LINE PLEX, REVERSE CHANNEL. (BY "LSTEN") OCT 26 SYNC CHARACTER = ASCII. OCT 0 SPEED INDICATOR. SPC 1 BSS S STORAGE AREA. D$XS5 OCT 0 ENVIRONMENT. (BY "LSTEN") ABS F LENGTH OF CHAR TRACE TABLE. SPC 1 1 OCT 0 # OF READ REQUESTS. ******************* OCT 0 # OF WRITE REQUESTS. * * OCT 0 # OF MESSAGES TRANSMITTED. * LONG-TERM * OCT 0 # OF ERROR-FREE MSGS RECV. * * OCT 0 # OF LINE ERRORS. * * OCT 0 # OF TIMES NAK RECEIVED. * COMMUNICATION * OCT 0 # OF TIMES BCC/PARITY. * * OCT 0 # OF LONG TIMEOUTS. * * OCT 0 # OF RESPONSE ERRORS. * STATISTICS * OCT 0 # OF TIMES RESPONSE REJ. * * OCT 0 # OF TIMES WACK/TTD RECV. ******************* SPC 1 OCT 0 ADDR OF NEXT WORD IN CHAR TRACE. OCT 0 ADDR OF CURR>   ENT ENTRY IN EVENT TRACE. OCT 0 ADDR OF OLDEST ENTRY IN EVENT TRACE. SPC 1 BSS T EVENT TRACE TABLE. BSS F CHARACTER TRACE TABLE. * SIZE EQU * END C   91741-18009 1740 S C0122 DS/1000 MODULE: FCHEK              H0101 (ASMB,R,L,C HED FCHEK 91741-16009 REV 1740 770317 * (C) HEWLETT-PACKARD CO. 1977 NAM FCHEK,7 91741-16009 REV 1740 770317 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT FCHEK * EXT .ENTR,D$INI,D$RFH,D$STW,D$PRM,D3KMS EXT D$ERR,D$WDC,D$RQB,D$IPM,D$NPM,D$SPM * * FCHEK * SOURCE: 91741-18009 * BINARY: 91741-16009 * JIM HARTSELL * AUG. 13, 1975 * FCHEK NOP ENTRY POINT. CLA STA PRAMS CLEAR OLD PARAM ADDRESSES. STA PRAMS+1 STA PRAMS+2 STA PRAMS+3 STA PRAMS+4 LDA FCHEK STA ENTRY JMP BEGIN * PRAMS NOP FILE NUMBER. NOP ERROR CODE. NOP TRANSMISSION LOG. NOP BLOCK # (DBL-WORD). NOP # RECORDS IN BAD BLOCK. * ENTRY NOP ENTRY POINT. BEGIN JSB .ENTR GET ADDRESSES OF USER PARAMS. DPRAM DEF PRAMS * * BUILD FRONT END OF REQUEST BUFFER. * LDA DPRAM ADDR OF 1ST PARAM TO SEND. JSB D$INI INITIALIZE BUFFER STUFFERS. * JSB D$RFH SET UP FIXED FORMAT. * LDA B16 JSB D$STW FCHEK CODE = 16 OCTAL. * * MOVE USER PARAMS TO REQUEST BUFFER. * LDA N1 MOVE FNUM. JSB D$PRM * LDA N5 SET UP PARAMETER MASK. STA TEMP LDA DPRAM STA TEMP1 CLA,RSS LOOP RAL LDB TEMP1,I SZB IOR B1 SET BIT IF PARAM SPECIFIED. ISZ TEMP1 ISZ TEMP JMP LOOP JSB D$STW STORE MASK IN REQUEST. * JSB D$WDC SET WORD COUNT. * * REQUEST BUFFER= READY. SEND TO QUEX'S CLASS, * AND WAIT FOR REPLY. * JSB D3KMS SHIP REQUEST BUFFER TO QUEX. DEF *+2 DEF BIT15 NO ABORT. JMP ABERR ERROR RETURN. * JMP RTPRM NORMAL RETURN. (A) = STATUS. * ABERR DST D$ERR STORE CODE FOR FCHEK RETRIEVAL. * * PASS RETURN PARAMETERS TO CALLER. * RTPRM STA STAT SAVE STATUS WORD FOR RETURN. * LDB D$RQB IF REPLY PARAM NOT RETURNED, ADB B7 STORE ZERO IN PARAM SLOT. LDA B,I REPLY BYTE COUNT. ADB B7 STB TEMP POINTER TO LAST PARAM. INA ARS REPLY WORD COUNT. ADA N7 # PARAM WORDS TO CLEAR. SSA,RSS JMP RTP ALL PARAMS RETURNED. LOOP1 CLB STB TEMP,I LDB TEMP ADB N1 STB TEMP INA,SZA JMP LOOP1 * RTP LDB D255 SET UP FOR IMPOSSIBLE ERROR, LDA D$ERR AND CHECK DS ERROR CODE. SZA,RSS JMP RTPM1 NO ERROR POSTED. * CPA "DS" DS ERROR: IMPOSSIBLE ERROR? RSS JMP POST YES. * DLD D$ERR ERROR CODE IS "DSXX". PERFORM MAPPING. LDA B LDB D254 CPA "01" JMP POST MAP "DS01" TO DECIMAL 254. LDB D245 CPA "05" JMP POST MAP "DS05" TO DECIMAL 245. LDB D216 CPA "06" JMP POST MAP "DS06" TO DECIMAL 216. LDB D255 IMPOSSIBLE ERROR. POST LDA D$RQB STORE DS ERROR IN REPLY BUFFER. ADA D9 STB A,I * RTPM1 LDB D$RQB INITIALIZE: ADB D9 (B) = ADDR OF 1ST REPLY VALUE. LDA DPRAM INA (A) = ADDR OF 1ST RETURN PARAM ADDR. JSB D$IPM * LDA N2 PASS ERROR CODE, TLOG. CCB JSB D$NPM * LDA N2 PASS BLKNUM (2 WORDS). JSB D$SPM * CCA PASS NUMREC (1 WORD). JSB D$SPM * LDA STAT RESTORE STATUS WORD. JMP ENTRY,I RETURN. SP C 3 * * CONSTANTS AND WORKING STORAGE. * A EQU 0 B EQU 1 B1 OCT 1 B7 OCT 7 B16 OCT 16 D9 DEC 9 D216 DEC 216 D245 DEC 245 D254 DEC 254 D255 DEC 255 N1 DEC -1 N2 DEC -2 N5 DEC -5 N7 DEC -7 BIT15 OCT 100000 STAT NOP TEMP NOP TEMP1 NOP "DS" ASC 1,DS "01" ASC 1,01 "05" ASC 1,05 "06" ASC 1,06 * END   91741-18010 1740 S C0122 DS/1000 MODULE: FCLOS              H0101 3ASMB,R,L,C HED FCLOS 91741-16010 REV 1740 770317 * (C) HEWLETT-PACKARD CO. 1977 NAM FCLOS,7 91741-16010 REV 1740 770317 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT FCLOS,FRDSK,FRLAB,FWLAB,FSPAC,FPOIN,FCNTL ENT FSTMD,FRNAM,FRLAT,FLOCK,FUNLK * EXT D$RQB,D$NWD EXT .ENTR,D$INI,D$RFH,D$STW,D$PRM,D3KMS EXT D$ERR,D$WDC,D$NWD,D$ASC,D$IPM,D$SPM * * FCLOS * SOURCE: 91741-18010 * BINARY: 91741-16010 * JIM HARTSELL * AUG. 13, 1975 * A EQU 0 B EQU 1 * FCLOS NOP FCLOSE. JSB ENTRY OCT 203 * FRDSK NOP FREADSEEK. JSB ENTRY OCT 501 * FRLAB NOP FREADLABEL. JSB ENTRY OCT 1001 * FWLAB NOP FWRITELABEL. JSB ENTRY OCT 1101 * FSPAC NOP FSPACE. JSB ENTRY OCT 1302 * FPOIN NOP FPOINT. JSB ENTRY OCT 1401 * FCNTL NOP FCONTROL. JSB ENTRY OCT 1703 * FSTMD NOP FSETMODE. JSB ENTRY OCT 2002 * FRNAM NOP FRENAME. JSB ENTRY OCT 2101 * FRLAT NOP FRELATE. JSB ENTRY OCT 2202 * FLOCK NOP FLOCK. JSB ENTRY OCT 2302 * FUNLK NOP FUNLOCK. JSB ENTRY OCT 2401 * * ALL ENTRY POINTS CONVERGE HERE. * ENTRY NOP LDA ENTRY,I SAVE FUNCTION CODE. ALF,ALF RAL,RAL AND B77 STA FCN LDA ENTRY,I SAVE # OF INITIAL PARAMS. AND B77 CMA,INA STA NUM CLA CLEAR OLD PARAM nADDRESSES. STA PRAMS STA PRAMS+1 STA PRAMS+2 STA PRAMS+3 LDA ENTRY GET ADDR OF USER'S JSB + 1. ADA N2 LDA A,I STA RETRN SET UP FOR .ENTR CALL. JMP BEGIN * PRAMS NOP NOP NOP NOP * RETRN NOP COMMON ENTRY POINT. BEGIN JSB .ENTR GET ADDRESSES OF USER PARAMS. DPRAM DEF PRAMS * CLA CLEAR ERROR CODE FOR FCHEK. CLB DST D$ERR * * BUILD FRONT END OF REQUEST BUFFER. * LDA DPRAM ADDR OF 1ST PARAM TO SEND. JSB D$INI INITIALIZE BUFFER STUFFERS. * JSB D$RFH SET UP FIXED FORMAT. * LDA FCN JSB D$STW STORE FUNCTION CODE IN REQUEST. * * MOVE USER PARAMS TO REQUEST BUFFER. * LDA NUM MOVE INITIAL PARAMETERS. JSB D$PRM * * PERFORM SPECIAL HANDLING FOR CERTAIN FILE CALLS. * LDA FCN CPA B5 JMP F5 FREADSEEK. CPA B10 JMP F11 FREADLABEL. CPA B11 JMP F11 FWRITELABEL. CPA B14 JMP F5 FPOINT. CPA B21 JMP F21 FRENAME. JMP STWD * F5 LDA N2 FREADSEEK: JSB D$NWD MOVE RECNUM. JMP STWD * F11 CLA FWRITELABEL AND FREADLABEL: LDA PRAMS+2,I JSB D$STW STORE TCOUNT (+WORDS). CLA (A) CLEARED IN CASE NO PARAM. LDA PRAMS+3,I JSB D$STW STORE LABELID. * LDA DPRAM SET UP PARAMETER MASK. STA TEMP LDA N4 MAX. NUMBER OF PARAMS. STA TEMP1 CLA,RSS MSK RAL SHIFT ACCUMULATED BITS. LDB TEMP,I SEE IF PARAM GIVEN. SZB IOR B1 YES. SET THE BIT. ISZ TEMP ISZ TEMP1 JMP MSK LOOP TILL DONE. * JSB D$STW STORE MASK. LDA FCN DONE IF FREADLABEL. CPA B10 JMP STWD LDA PRAMS+1 FWRITELABEL. SZA,RSS JMP >STWD NO TARGET ADDRESS. CLA CLEARED IN CASE NO PARAM. LDA PRAMS+2,I SZA,RSS JMP STWD TCOUNT IS ZERO OR NOT GIVEN. SSA ARS NEG BYTES. MAKE NEG WORDS. SSA,RSS CMA,INA POS WORDS. MAKE NEG WORDS. JSB D$NWD STORE LABEL. JMP STWD * F21 LDA PRAMS+1 FRENAME: LDB N14 SZA SKIP IF NO FILE NAME. JSB D$ASC STORE NEW FILE NAME. * STWD JSB D$WDC SET WORD COUNT. * * REQUEST BUFFER READY. SEND TO QUEX'S CLASS, * AND WAIT FOR REPLY. * JSB D3KMS SHIP REQUEST BUFFER TO QUEX. DEF *+2 DEF BIT15 NO ABORT. JMP ABERR ERROR RETURN. * * PASS ANY RETURN PARAMETERS TO USER. * STA TEMP SAVE STATUS WORD. * LDA FCN CHECK TYPE OF CALL. CPA B10 JMP FF10 CPA B17 JMP FF17 CPA B22 RSS JMP RET * LDB D$RQB FRELATE: ADB D9 LDA B,I PASS JMP RETRN,I (A) = INT-OR-DUP WORD. * FF17 LDB D$RQB FCONTROL: ADB D9 LDB B,I GET RETURN PARAMETER. LDA PRAMS+2 SZA STB A,I PASS TO CALLER. JMP RET * FF10 LDA PRAMS+1 IF NO TARGET ADDR, SZA,RSS JMP RET DON'T PASS LABEL. LDA DPRAM FREADLABEL: INA LDB D$RQB ADB D9 JSB D$IPM INITIALIZE PARAM PASSERS. * LDA D$RQB DETERMINE # WORDS IN LABEL. ADA B7 LDA A,I ADA N1 # BYTES -1 (DELETE STATUS WORD). ARS # WORDS. CMA,INA NEG. # WORDS. SZA SKIP IF NO LABEL RETURNED. JSB D$SPM PASS N-WORD PARAM. * RET LDA TEMP RESTORE STATUS WORD. * JMP RETRN,I RETURN TO USER. (A) = STATUS. * ABERR DST D$ERR STORE CODE FOR FCHEK RETRIEVAL. CLA JMP RETRN,I RETURN. SKP  * * CONSTANTS AND WORKING STORAGE. * B1 OCT 1 B5 OCT 5 B7 OCT 7 B10 OCT 10 B11 OCT 11 B14 OCT 14 B17 OCT 17 B21 OCT 21 B22 OCT 22 B77 OCT 77 N1 DEC -1 N4 DEC -4 D9 DEC 9 N2 DEC -2 N14 DEC -14 BIT15 OCT 100000 TEMP NOP TEMP1 NOP FCN NOP NUM NOP * END my  91741-18011 1840 S C0122 &FINFO              H0101 uASMB,R,L,C HED FINFO 91741-16011 REV 1840 780612 * (C) HEWLETT-PACKARD CO. 1978 NAM FINFO,7 91741-16011 REV 1840 780612 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT FINFO * EXT D$RQB EXT .ENTR,D$INI,D$RFH,D$STW,D$PRM,D3KMS EXT D$ERR,D$WDC,D$IPM,D$NPM,D$SPM * * FINFO * SOURCE: 91741-18011 * BINARY: 91741-16011 * JIM HARTSELL * AUG. 13, 1975 * FINFO NOP ENTRY POINT. LDA DPRAM CLEAR OLD PARAM ADDRESSES. STA ENTRY LDB COUNT CLA STA ENTRY,I ISZ ENTRY INB,SZB JMP *-3 LDA FINFO STA ENTRY JMP BEGIN COUNT DEC -20 * PRAMS NOP FILE NUMBER. NOP FILE NAME ARRAY (14 WORDS). NOP FOPTIONS. NOP AOPTIONS. NOP RECORD SIZE. NOP DEVICE TYPE. NOP LOGICAL DEVICE #. NOP HARDWARE ADDRESS. NOP FILE CODE. NOP RECORD POINTER (DBL-WORD). NOP END-OF-FILE (DBL-WORD). NOP FILE LIMITS (DBL-WORD). NOP # RECORDS XF (DBL-WORD). NOP # PHYS I/O XF (DBL-WORD). NOP BLOCK SIZE. NOP EXTENT SIZE. NOP NUMBER OF EXTENTS. NOP USER LABELS. NOP CREATOR ID (4 WORDS). NOP LABEL ADDRESS (DBL-WORD). * ENTRY NOP ENTRY POINT. BEGIN JSB .ENTR GET ADDRESSES OF USER PARAMS. DPRAM DEF PRAMS CLA CLEAR ERROR CODE FOR FCHEK. CLB G" DST D$ERR * B EQU 1 SKP * * BUILD FRONT END OF REQUEST BUFFER. * LDA DPRAM ADDR OF 1ST PARAM TO SEND. JSB D$INI INITIALIZE BUFFER STUFFERS. * JSB D$RFH SET UP FIXED FORMAT. * LDA B15 JSB D$STW FINFO CODE = 15 OCTAL. * * MOVE USER PARAMS TO REQUEST BUFFER. * CCA MOVE FNUM. JSB D$PRM * * SET UP DBL-WORD PARAMETER MASK FOR 20 PARAMS: BIT 3 OF 1ST WORD * REPRESENTS THE FILNUM PARAM; BIT 0 OF 2ND WORD REPRESENTS * LABADDR. IF A BIT IS SET, THAT PARAMETER WAS SPECIFIED IN * THE CALLING SEQUENCE. * LDA DPRAM ADDR OF 1ST PARAM ADDRESS. LDB N4 CHECK 1ST 4 PARAMS FOR MASK(1). JSB BTMSK BUILD MASK WORD 1. JSB D$STW STORE WORD 1 OF MASK IN REQUEST. LDA DPRAM ADA B4 ADDR OF 5TH PARAM ADDRESS. LDB N16 CHECK LAST 16 PARAMS FOR MASK(2). JSB BTMSK BUILD MASK WORD 2. JSB D$STW STORE WORD 2 OF MASK IN REQUEST. * JSB D$WDC SET WORD COUNT. * * REQUEST BUFFER READY. SEND TO QUEX'S CLASS, * AND WAIT FOR REPLY. * JSB D3KMS SHIP REQUEST BUFFER TO QUEX. DEF *+2 DEF BIT15 NO ABORT. JMP ABERR ERROR RETURN. * * PASS RETURN PARAMETERS TO THE CALLER IF PARAM SPECIFIED. * STA TEMP SAVE STATUS WORD. * LDB D$RQB IF REPLY PARAM NOT RETURNED, ADB B7 STORE ZERO IN PARAM SLOT. LDA B,I REPLY BYTE COUNT. ADB D44 STB TEMP1 POINTER TO LAST PARAM. INA ARS REPLY WORD COUNT. ADA N44 # PARAMS WORDS TO CLEAR. SSA,RSS JMP RTP ALL PARAMS RETURNED. LOOP CLB STB TEMP1,I LDB TEMP1 ADB N1 STB TEMP1 INA,SZA JMP LOOP * RTP LDA DPRAM INITIALIZE: INA (A) = ADDR OF 1ST RETURN PARAM ADDR. LDB D$RQB ADB D9 (B) = ADDR OF 1ST REPLY VALUE. 2 JSB D$IPM * LDA N14 RETURN FILE NAME (14 WORDS). JSB D$SPM * LDA N7 RETURN FOPTIONS THRU FILECODE. CCB (SINGLE WORD VALUES) JSB D$NPM * LDA N5 RETURN RECPT THRU PHYSCOUNT. LDB N2 (DOUBLE WORD VALUES) JSB D$NPM * LDA N4 RETURN BLKSIZE THRU USERLABELS. CCB (SINGLE WORD VALUES) JSB D$NPM * LDA N4 RETURN CREATORID. JSB D$SPM (4-WORD VALUES) * LDA N2 RETURN LABADDR. JSB D$SPM * LDA TEMP RESTORE STATUS WORD. JMP ENTRY,I RETURN TO USER. (A) = STATUS. * ABERR DST D$ERR STORE CODE FOR FCHEK RETRIEVAL. CLA JMP ENTRY,I RETURN. * * SUBROUTINE TO BUILD PARAMETER BIT MASK. * (A) = ADDR OF 1ST PARAM. * (B) = # PARAMS. * BTMSK NOP STA TEMP SAVE PARAM ADDR. STB TEMP1 SAVE # PARAMS. CLA,RSS RESET BIT MASK WORD. MSK RAL SHIFT ACCUMULATED BITS. LDB TEMP,I SEE IF PARAM GIVEN. SZB IOR B1 YES. SET THE BIT. ISZ TEMP ISZ TEMP1 JMP MSK LOOP FOR N PARAMS. JMP BTMSK,I RETURN. (A) = BIT MASK. SKP * * CONSTANTS AND WORKING STORAGE. * B1 OCT 1 B4 OCT 4 B7 OCT 7 B15 OCT 15 D9 DEC 9 D44 DEC 44 N1 DEC -1 N2 DEC -2 N4 DEC -4 N5 DEC -5 N7 DEC -7 N14 DEC -14 N16 DEC -16 N44 DEC -44 BIT15 OCT 100000 TEMP NOP TEMP1 NOP * END #  91741-18012 1740 S C0122 DS/1000 MODULE: FREAD              H0101 {4ASMB,R,L,C HED FREAD 91741-16012 REV 1740 770317 * (C) HEWLETT-PACKARD CO. 1977 NAM FREAD,7 91741-16012 REV 1740 770317 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ENT FREAD,FRDIR * EXT .ENTR,D3KMS,D$INI,D$RFH,D$STW,D$PRM EXT D$RQB,D$ERR,D$WDC * * FREAD * SOURCE: 91741-18012 * BINARY: 91741-16012 * JIM HARTSELL * AUG. 14, 1975 * A EQU 0 B EQU 1 * FREAD NOP FREAD. JSB ENTRY B3 OCT 3 * FRDIR NOP FREADDIR. JSB ENTRY OCT 4 * ENTRY NOP CLA CLEAR OLD PARAM ADDRESSES. STA PRAMS STA PRAMS+1 STA PRAMS+2 STA PRAMS+3 LDA ENTRY,I SAVE FUNCTION CODE. STA FCN LDA ENTRY SET UP FOR .ENTR CALL. ADA N2 LDA A,I STA RETRN JMP BEGIN * PRAMS NOP FILE NUMBER. NOP BUFFER ADDRESS NOP BUFFER LENGTH NOP RECORD NUMBER. * RETRN NOP ENTRY POINT. BEGIN JSB .ENTR GET ADDRS OF USER PARAMS. DPRAM DEF PRAMS * CLA CLEAR ERROR CODE FOR FCHEK. CLB DST D$ERR SKP * * BUILD FRONT END OF REQUEST BUFFER. * LDA DPRAM ADDR OF 1ST PARAM TO SEND. JSB D$INI INITIALIZE BUFFER STUFFERS. * JSB D$RFH SET UP FIXED FORMAT. * LDA FCN JSB D$STW FREAD CODE = 3, FRDIR = 4. * * MOVE USER PARAMS TO REQUEST BUFFER. * CCA JSB D$PRM MOVE FNUM. * LDA PRAMS+1 IF NO TARGET ADDR, SZA,RSS STA PRAMS+2 ZERO TCOUNT ADDR." CLA CLEAR (A) IN CASE NO PARAM. LDA PRAMS+2,I STORE USER BUFFER LEN IN "TCOUNT". JSB D$STW + = WORDS, - = BYTES. * LDA FCN IF FREADDIR, STORE RECNUM. CPA B3 JMP STWD CLA CLEAR (A) IN CASE NO PARAM. LDA PRAMS+3,I JSB D$STW CLA CLEAR (A) IN CASE NO PARAM. LDA PRAMS+3 SZA INA LDA A,I JSB D$STW * STWD JSB D$WDC SET WORD COUNT. LDA N4 SET APPENDAGE LENGTH = 4 BYTES. STA APEND * * SEND REQUEST TO 3000 BY WRITING TO QUEX'S CLASS, * AND WAIT FOR THE REPLIES (MAY BE SEVERAL). * LDA PRAMS+1 SET ADDR OF USER DATA BUFFER. STA TBUF CLA STA TCNT CLEAR RECEIVED BYTE COUNT (LOG). * INA SIGNAL FOR MULTIPLE REPLIES. SN/RC IOR BIT15 STORE CONTROL WORD FOR D3KMS. STA CONWD HAS NO-ABORT BIT SET. * JSB D3KMS SHIP REQUEST BUFFER TO QUEX, DEF *+2 AND WAIT FOR DATA REPLY. DEF CONWD JMP ABERR ERROR RETURN. * LDA CONWD WAS LAST CALL TO RELEASE AND B377 CPA B4 CLASS ONLY? JMP DONE YES. * LDA D$RQB CHECK IF ANY DATA WAS ADA B7 RECEIVED. LDA A,I ADA APEND SZA,RSS JMP CONBT READ ERROR - NO DATA. * * PASS RECEIVED DATA BLOCK BACK TO USER. * JSB MOVE MOVE DATA TO USER BUFFER. * CONBT LDA D$RQB IS CONTINUATION BIT SET? ADA B2 LDA A,I RAL,RAL SSA JMP DMREP YES. LDA B4 NO. DE-ALLOC CLASS. JMP SN/RC * DMREP LDB D$RQB SET UP "REPLY". LDA B,I STORE COUNT AND MSG CLASS. AND B377 IOR LB10 STA B,I ADB B2 LDA B,I CLEAR REPLY BIT. ELA,CLE,ERA STA B,I ADB B2 LDA B,I REVERSE PROCESS NUMBERS. ALF,ALF STA B,I ADB B3  CLA CLEAR BYTE COUNT. STA B,I STA APEND SET APPENDAGE LEN = 0. * LDA B2 TELL D3KMS TO LOOK FOR MORE. JMP SN/RC GO GET NEXT DATA BLOCK. * DONE LDA TCNT RETURN TO USER WITH LDB PRAMS+2 (A) = + WORDS OR + BYTES SZB,RSS JMP RETRN,I LDB B,I SSB DEPENDING ON HIS BUFLEN. JMP RETRN,I INA CLE,ERA JMP RETRN,I * ABERR DST D$ERR STORE CODE FOR FCHEK RETRIEVAL. CLA JMP RETRN,I RETURN. SPC 3 * * SUBROUTINE TO MOVE A BLOCK OF DATA FROM REPLY * BUFFER TO USER BUFFER. * ENTRY: (A) = + # DATA BYTES IN THIS REPLY. * EXIT WITH TCNT = TOTAL BYTES RECEIVED. * MOVE NOP LDB A ACCUMULATE LOG. ADB TCNT STB TCNT INA (A) = + BYTES. CLE,ERA CMA,INA STA TEMP NEG. # WORDS TO MOVE. * LDA APEND COMPUTE ADDR OF REPLY DATA. CMA,INA ARS LDB D$RQB ADB D8 ADB A STB RQPTR ADDRESS OF REPLY DATA. * LOOP LDA RQPTR,I MOVE WORD FROM REPLY STA TBUF,I TO USER BUFFER. ISZ RQPTR BUMP POINTERS. ISZ TBUF * ISZ TEMP JMP LOOP LOOP TILL DONE. JMP MOVE,I SKP * * CONSTANTS AND WORKING STORAGE. * B2 OCT 2 B4 OCT 4 B7 OCT 7 D8 DEC 8 N2 DEC -2 N4 DEC -4 LB10 OCT 4000 B377 OCT 377 BIT15 OCT 100000 APEND NOP FCN NOP CONWD NOP TCNT NOP TBUF NOP TEMP NOP RQPTR NOP * END L  91741-18013 1840 S C0122 &FWRIT              H0101 ASMB,R,L,C HED FWRIT 91741-16013 REV 1840 780612 * (C) HEWLETT-PACKARD CO. 1978 NAM FWRIT,7 91741-16013 REV 1840 780612 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT FWRIT,FWDIR,FUPDT * EXT .ENTR,D3KMS,D$INI,D$RFH,D$STW,D$PRM EXT D$RQB,D$ERR,D$WDC * * FWRIT * SOURCE: 91741-18013 * BINARY: 91741-16013 * JIM HARTSELL * AUG. 13, 1975 * D EQU 256 MAX. LENGTH OF DATA BLOCK (WORDS). A EQU 0 B EQU 1 * FWRIT NOP FWRITE. JSB ENTRY OCT 6 * FWDIR NOP FWRITEDIR. JSB ENTRY B7 OCT 7 * FUPDT NOP FUPDATE. JSB ENTRY B12 OCT 12 * ENTRY NOP LDA ENTRY,I SAVE FUNCTION CODE. STA FCN CLA CLEAR OLD PARAM ADDRESSES. STA PRAMS STA PRAMS+1 STA PRAMS+2 STA PRAMS+3 LDA ENTRY SET UP FOR .ENTR CALL. ADA N2 LDA A,I STA RETRN JMP BEGIN * PRAMS NOP FILE NUMBER NOP BUFFER ADDRESS NOP BUFFER LENGTH NOP CONTROL WORD OR RECNUM. * RETRN NOP ENTRY POINT. BEGIN JSB .ENTR GET ADDRS OF USER PARAMS. DPRAM DEF PRAMS * CLA CLEAR ERROR CODE FOR FCHECK. CLB DST D$ERR * * BUILD FRONT END OF REQUEST BUFFER. * LDA DPRAM ADDR OF 1ST PARAM TO SEND. JSB D$INI INITIALIZE BUFFER STUFFERS. * JSB D$RFH SET UP FIXED FORMAT. * LDA FCN JSB D$STW FWRIT = 6, FWDIR = 7, FUPDT = 12. * * MOVE USER PARAMS TO REQUEST BUFFER. * ~CCA JSB D$PRM MOVE FNUM. * LDA PRAMS+1 IF NO TARGET ADDR, SZA,RSS STA PRAMS+2 CLEAR TCOUNT ADDR. CLA JSB D$STW STORE DUMMY TCOUNT FOR NOW. LDA D5 INITIALIZE LENGTH OF STA APEND APPENDAGE TO 5 WORDS. * LDA FCN IF UPDATE, NO MORE PARAMS. CPA B12 JMP STWD * ISZ APEND CHANGE APPENDAGE TO 6. CLA CLEAR (A) IN CASE NO PARAM. LDA PRAMS+3,I JSB D$STW MOVE CONTROL WORD OR RECNUM. * CLA CLEAR (A) IN CASE NO PARAM. LDA PRAMS+3 SZA INA LDA A,I LDB FCN IF FWRITEDIR, STORE WORD 2 OF RECNUM. CPB B7 RSS JMP STWD JSB D$STW ISZ APEND CHANGE APPENDAGE TO 7. * STWD JSB D$WDC SET WORD COUNT. * * MOVE USER DATA TO REQUEST BUFFER. BLOCK IT OUT. * LDA PRAMS+1 SET POINTER TO USER DATA. STA TBUF * CLA CLEAR (A) IN CASE NO PARAM. LDA PRAMS+2,I GET USER BUFFER LENGTH. SSA,RSS + = WORDS, - = BYTES. RAL WORDS. CONVERT. SSA BYTES. MAKE POSITIVE. CMA,INA STA TCNT TOTAL DATA BYTES TO SEND. CMA,INA STORE "TCOUNT" IN REQUEST. LDB D$RQB ADB D12 STA B,I * SZA SKIP MOVE IF NO DATA. JSB MOVE MOVE 1ST BLOCK TO REQ BUFFER. * CLA SET APPENDAGE = 0. STA APEND LDA TCNT SZA,RSS IF ALL DATA MOVED, JMP SEND TELL D3KMS THERE IS SINGLE REPLY. * LDB D$RQB CONTINUATION BLOCKS REQUIRED. ADB D2 LDA B,I IOR BIT13 SET CONTINUATION BIT IN STREAM WORD. STA B,I CLA,INA TELL D3KMS THERE ARE MULT. BLOCKS. * * SEND REQ TO 3000 BY WRITING TO QUEX'S CLASS. * SEND IOR BIT15 STORE CONTROL WORD FOR D3KMS. STA CONWD (NO-ABORT BIT SET) * JSB D3KMS SH0\IP REQUEST BUFFER TO QUEX, DEF *+2 AND WAIT FOR INTERMEDIATE DEF CONWD OR FINAL REPLY. JMP ABERR ERROR RETURN. * LDB TCNT IF ALL DATA OUT, WE HAVE SZB,RSS RECEIVED THE REPLY. JMP RETRN,I RETURN. (A) = STATUS WORD. * LDB D$RQB IF CONTINUATION ADB D2 BIT IS NOT LDA B,I SET, ERROR AND BIT13 CONDITION! SZA,RSS RETURN. USER JMP RETRN,I GETS REASON VIA ICC. * * MORE DATA... SHIP OUT NEXT BLOCK. * LDA B,I CLEAR REPLY BIT. ELA,CLE,ERA STA B,I * JSB MOVE MOVE SOME MORE DATA TO REQUEST. * LDA D2 LDB TCNT SZB IF MORE DATA, KEEP CONTIN. BIT. JMP SEND CALL D3KMS WITH RCODE = 2. * LDB D$RQB THIS IS LAST BLOCK. ADB D2 LDA B,I AND NOT13 CLEAR CONTINUATION BIT. STA B,I LDA D3 TELL D3KMS THIS IS LAST BLOCK. JMP SEND * ABERR DST D$ERR STORE CODE FOR FCHEK RETRIEVAL. CLA JMP RETRN,I RETURN. SKP * * SUBROUTINE TO STORE # BYTES LEFT TO SEND IN REQ * BUFFER AND MOVE NEXT BLOCK OF USER DATA (REMAINING * BYTES UP TO MAX). STORE ADJUSTED BYTE COUNTER (N) * IN REQUEST. ON EXIT, TCNT IS REMAINING # DATA * BYTES OR ZERO. * MOVE NOP LDA D$RQB INITIALIZE BYTE COUNTER (N). ADA B7 LDA A,I STA BYTCT LDB D$RQB ADB D8 * ADB APEND SET ADDR OF DATA IN RQBUF. STB RQPTR LDA MAXSZ STA TEMP SET LIMIT OF MAX WORDS. * LOOP LDA TBUF,I MOVE DATA FROM USER TO REQUEST. STA RQPTR,I ISZ TBUF ISZ RQPTR ISZ BYTCT ADD 2 TO BYTE COUNTER (N). ISZ BYTCT LDA TCNT DECREMENT TOTAL DATA BYTES LEFT. ADA N2 STA TCNT CMA,INA NEGATE. SSA,RSS IF 0 OR 1, JMP ADJ ALL USER DATA MOVED, ISbZ TEMP JMP LOOP ELSE LOOP TILL DONE. JMP STBYT REACHED LIMIT OF MAX WORDS. * ADJ CMA,INA ADJUST BYTE COUNTER (N) ADA BYTCT IF ODD # DATA BYTES. STA BYTCT * STBYT LDA D$RQB STORE BYTE COUNT (N). ADA B7 LDB BYTCT STB A,I LDA TCNT IF TCNT = -1, MAKE IT 0. CPA N1 CLA STA TCNT * JMP MOVE,I RETURN. SKP * * CONSTANTS AND WORKING STORAGE. * D2 DEC 2 D3 DEC 3 D5 DEC 5 D8 DEC 8 D12 DEC 12 N1 DEC -1 N2 DEC -2 BIT13 OCT 20000 NOT13 OCT 157777 BIT15 OCT 100000 FCN NOP CONWD NOP TBUF NOP TCNT NOP BYTCT NOP RQPTR NOP TEMP NOP APEND OCT 0 MAXSZ ABS -D * END   91741-18014 1740 S C0122 DS/1000 MODULE: HELLO              H0101 2ASMB,R,L,C HED HELLO 91741-16014 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 NAM HELLO,7 91741-16014 REV 1740 770504 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ENT HELLO,BYE EXT D$RQB,#LU3K,.ENTR,#RSAX,#TBRN,RNRQ EXT D$INI,D$STW,D3KMS,D$ZRO,D$WDC EXT D$SMP,D$LOG * * HELLO * SOURCE: 91741-18014 * BINARY: 91741-16014 * JIM HARTSELL * SEP. 29, 1975 * * SUBROUTINE HELLO MUST BE CALLED BY A USER PROGRAM BEFORE * ANY MASTER COMMUNICATION FUNCTIONS WITH AN HP3000, SUCH AS * RFA AND PTOP. THIS SUBROUTINE ESTABLISHES COMMUNICATION * AND CREATES A REMOTE SESSION MAIN PROCESS ON THE HP3000 WHICH * ACTS AS A LOGICAL EXTENSION TO THE LOCAL PROCESS. * * SUBROUTINE BYE IS CALLED TO TERMINATE COMMUNICATION WITH * A REMOTE HP3000 AND TO RELEASE THE SESSION MAIN PROCESS NUMBER. * * CALLING SEQUENCES: * * JSB HELLO JSB BYE * DEF *+7 DEF *+5 * DEF ERRCD <<<<<<<<< ERROR CODE >>>>>>>>>> DEF ERRCD * DEF LDEV <<<<<<< LU OF AN HP3000 >>>>>>> DEF LDEV * DEF LSTDV <<<<<< LU OF LOG DEVICE >>>>>>> DEF LSTDV * DEF SMPNM <<< RETURNED PROCESS NUMBER >>> DEF SMPNM * DEF LOGB << ADDRESS OF LOGON MESSAGE . * DEF LOGBL < LENGTH OF LOGON MSG IN BYTES . * . . * . . * . . * LOGB ASC 8,HELLO USER.ACCT * * RETURNED ERRCD: 0 = NO ERROR. * ; 1 = HELLO FAILURE (SMPNM = 0) OR LINK DOWN. * 2 = RESERVED FOR EXCLUSIVE ACCESS. * 4 = INVALID LU. * 5 = TIMEOUT. * 6 = ILLEGAL (REJECTED) REQUEST. * 7 = "RES" TABLE ACCESS ERROR. * 8 = IMPOSSIBLE ERROR. * B EQU 1 SUP * HELLO NOP ENTRY FOR "HELLO". LDA HELLO LDB B20 STREAM = 20 OCTAL. JMP PASAD * BYE NOP ENTRY FOR "BYE". LDA BYE LDB B21 STREAM = 21 OCTAL. * PASAD STA RETRN SET UP RETURN ADDRESS. STB STREM SAVE STREAM TYPE. CLA STA PRAMS CLEAR OLD PARAM ADDRESSES. STA PRAMS+1 STA PRAMS+2 STA PRAMS+3 STA PRAMS+4 STA PRAMS+5 JMP ENTER * PRAMS NOP ERROR CODE. NOP LOGICAL UNIT OF HP3000. NOP LU OF LOG DEVICE. NOP RETURNED PROCESS NUMBER. NOP ADDR OF LOGON MESSAGE. NOP LENGTH OF LOGON MESSAGE (BYTES). * RETRN NOP ENTER JSB .ENTR GET PARAM ADDRESSES. DPRAM DEF PRAMS * LDA DPRAM CHECK FOR MISSING PARAMETERS. STA TEMP LDA STREM LDB N6 6 PARAMS FOR HELLO, CPA B21 OR LDB N4 4 PARAMS FOR BYE. PLOOP LDA TEMP,I SZA,RSS JMP ILL ERROR - MISSING PARAM. ISZ TEMP INB,SZB JMP PLOOP * * VERIFY VALID HP3000 LOGICAL UNIT. * LDA B4 LDB #LU3K CPB PRAMS+1,I RSS JMP NGOOD INVALID LU. * * CHECK IF USER FOLLOWED A "HELLO" WITH ANOTHER "HELLO", * AND IF SO, PERFORM "BYE" PROCESSING FOR PREVIOUS "HELLO". * LDA STREM IS THIS A "HELLO"? CPA B21 JMP GTLOG NO. * LDA D$SMP GET CURRENT PROCESS NUMBER. SZA,RSS HAS IT ALREADY BEEN ESTABLISHED? JMP GTLOG NO. * JS%6B #RSAX YES. DO "BYE" PROCESSING FOR DEF *+3 PREVIOUS "HELLO": DEF D10 REMOVE OLD ENTRY FROM THE PNL. DEF D$SMP PROCESS NUMBER. * GTLOG LDA PRAMS+2,I GET LU OF LOG DEVICE. SZA,RSS CLA,INA ZERO: SET DEFAULT = LU 1. STA D$LOG SAVE LOG LU. * * BEGIN CONSTRUCTION OF REQUEST BUFFER WITH * THE 8-WORD FIXED FORMAT FOR REMOTE HELLO OR BYE. * LDA DPRAM POINT TO ADDR OF FIRST PARAM. JSB D$INI INITIALIZE BUFFER STUFFERS. * LDA B6 STORE MESSAGE CLASS = 6. JSB D$STW CLA CLEAR COMPUTER ID. JSB D$STW LDA STREM STORE STREAM TYPE. JSB D$STW LDA N4 CLEAR SUB-STREAM, PROCESS #'S. JSB D$ZRO CLA,INA LDB STREM HELLO OR BYE? CPB B20 BYE: BYTE COUNT WILL BE 3. LDA PRAMS+5,I HELLO: USE SUPPLIED BYTE COUNT. SZA,RSS JMP NOLEN ZERO LENGTH: ILLEGAL REQUEST. ADA N2 ADJUST FOR D$STW. JSB D$STW STORE MESSAGE BYTE COUNT. JMP MOVE NOLEN CLA,INA JMP NGOOD ILL LDA B6 JMP NGOOD TBLER LDA B7 JMP NGOOD * * MOVE ASCII MESSAGE TO REQUEST BUFFER. * MOVE LDA STREM HELLO OR BYE? CPA B20 JMP MVMSG HELLO. * LDA "BY" BYE. MOVE ASCII "BYE". JSB D$STW LDA "E" JSB D$STW BYTE COUNT NOW = 3. LDA PRAMS+3,I FORCE USER'S PROCESS # FOR D3KMS. STA D$SMP JMP STCNT * MVMSG LDB PRAMS+5,I NUMBER OF BYTES. INB ROUND UP. CLE,ERB MAKE WORDS. STB TEMP LDA PRAMS+4 SOURCE ADDRESS. LDB D$RQB ADB D8 DESTINATION ADDRESS. MVW TEMP MOVE THE MESSAGE. * STCNT JSB D$WDC STORE WORD LENGTH OF REQUEST. * * SEND REQUEST TO THE 3000 BY WRITING TO QUEX'S CLASS. * JSB D3KMS SHIP THE REQUEST BUFFER TO QUEX. DEF *+2 DEF BIT15 NO-ABORT BIT SET IN CONWD. JMP ERRTN ERROR RETURN. * CLA CLEAR ERROR CODE. STA PRAMS,I LDA STREM HELLO OR BYE? CPA B21 JMP BYEX BYE: CLEAN UP. * LDB D$RQB HELLO: GET PROCESS NUMBER ADB B4 FROM REPLY BUFFER. LDA B,I ALF,ALF AND B377 STA D$SMP STORE FOR MASTER REQUESTS. STA PRAMS+3,I PASS BACK TO CALLER. STA B CLA,INA SZB,RSS JMP NGOOD HELLO FAILURE. * * BUILD PROCESS NUMBER LIST ENTRY IN "RES". * JSB RNRQ WAIT FOR AVAILABILITY OF LIST-ENTRY SPACE. DEF *+4 DEF LGW LOCK GLOBAL RN/WAIT/NO ABORT. DEF #TBRN TABLE-ACCESS RN. DEF TEMP DUMMY. JMP TBLER ** RTE ERROR. * JSB #RSAX ADD PROCESS # LIST ENTRY. DEF *+5 DEF D8 DEF D$LOG LOGGING LU. DEF XEQT IDSEG ADDR OF USER. DEF D$SMP PROCESS NUMBER.NTRY DATA. * SSB ANY ERRORS? JMP TBLER YES. * * SEND "DSLINE" COMMAND TO HP3000 AFTER "HELLO". * LDA DSLBF MOVE REQUEST TO D3KMS BUFFER. LDB D$RQB MVW D12 * JSB D3KMS SEND "DSLINE" TO HP3000, DEF *+2 AND WAIT FOR REPLY. DEF BIT15 NO ABORT. JMP ERRTN ERROR RETURN. * JMP RETRN,I RETURN TO USER. * * BYE: REMOVE AN ENTRY FROM THE PROCESS # LIST IN "RES". * BYEX JSB #RSAX DEF *+3 DEF D10 REMOVE AN ENTRY. DEF D$SMP PROCESS NUMBER. * CLA CLEAR STA D$SMP PROCESS NUMBER, INA AND STA D$LOG SET LOG LU = 1. JMP RETRN,I RETURN TO USER. * ERRTN CPA "DS" RSS JMP IMPOS IMPOSSIBLE ERROR. * LDA B GET NUMERIC PORTION OF "DSXX". CPA "00" JMP IMPOS IMPOSSIBLE IF ZERO. AND B7 ISOLATE LAST DIGIT. * NGOOD LDB PRAMS MAKE SURE ERROR PARA^M SZB WAS SPECIFIED. STA PRAMS,I RETURN ERROR CODE. JMP RETRN,I RETURN TO CALLER. * IMPOS LDA D8 JMP NGOOD SKP * * CONSTANTS AND WORKING STORAGE. * B4 OCT 4 B6 OCT 6 B7 OCT 7 B20 OCT 20 B21 OCT 21 BIT15 OCT 100000 B377 OCT 377 D8 DEC 8 D10 DEC 10 D12 DEC 12 N2 DEC -2 N4 DEC -4 N6 DEC -6 XEQT EQU 1717B LGW OCT 40002 STREM NOP "BY" ASC 1,BY "E" ASC 1,E "DS" ASC 1,DS "00" ASC 1,00 TEMP NOP * DSLBF DEF *+1 OCT 006003 "DSLINE" REQUEST BUFFER. OCT 0 OCT 22 OCT 0,0,0,0 OCT 10 ASC 2,RFA OCT 27 OCT 0 * END H   91741-18015 1840 S C0522 %HSLC              H0105 ]ASMB,R,L,C *** SLC *** HED SYNC LINE CONTROL 09/01/78 HI-SPEED NAM HSLC,30 91741-16015 REV 1840 780901 SPC 2 ******************************************************* * * * MODIFIED BY DMT ON MAY 30, 1978 TO REMOVE UNUSED * * CODE, MOSTLY IN THESE AREAS * * EBCDIC CHARACTER HANDLING * * LCR BLOCK CHECK (CRC ONLY IS USED) * * ID SEQUENCE CHECKING/SENDING * * CHARACTER CHECK UPON RETURN FROM DRIVER * * * * ASSEMBLY "Z" OPTION RETAINS THE CODE * * * ******************************************************* SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT SLC LOGICAL INIT ROUTINE EXT EQTAD EXT .ENTR EXT EXEC * * SLC (HSI VERSION) * SOURCE: 91741-18015 * BINARY: 91741-16015 * TOM KEANE * JULY 1, 1975 * EXT HCONT,HSND,HREC * * SUBROUTINE SLC: LOGICAL INITIALIZATION ROUTINE FOR SLC * JSB SLC * DEF *+3 * DEF LU LOGICAL UNIT NUMBER * DEF BUFFER EQT EXTENSION * LU OCT 0 PTR TO LOGICAL UNIT NUMBER EQTXP OCT 0 ADDR OF EQT EXTENSION BUFFER * SLC NOP JSB .ENTR PROCESS PARAMETERS DEF LU LDB EQTXP GET ADDR OF EQTX ADB .4 B = EQT22 ADDR LDA .SLCR STA B,I SET UP SLC READ ADDR INB LDA .SLCW  STA B,I SET UP SLC WRITE ADDR INB LDA .SLCC STA B,I SET UP SLC CONTROL ADDR INB UNL IFZ ***** LST LDA SPCTA PUT SPEC CHAR TABLE ADDR STA B,I IN EQT 25 UNL XIF ***** LST ADB M5 B = EQTX3 ADDR (SYNC) LDA B,I GET SPECIFIED SYNC CHAR ADB .31 B = EQTX WORD 34 ADDR UNL IFZ ***** LST CPA ECCT+1 EBCDIC SYNC CHAR? JMP EBDIC YES UNL XIF ***** LST CPA .22 ASCII SYNC CHAR? JMP ASCII YES CLA,INA NO, SET A-REG =1 AS AN ERROR IND JMP SLC,I & RETURN, BYPASSING EXEC CALL * ASCII EQU * UNL IFZ ***** LST LDA ACCT+3 STA B,I SET MAX (LARGEST) CONTROL CHAR UNL XIF ***** LST ADB .4 B = EQTX WORD 38 DATA UNL IFZ ***** LST LDA ACCTA STA B,I SET UP TRANSM CODE TABLE ADDR UNL XIF ***** LST ADB .23 B = EQTX WORD 61 ADDR LDA B,I GET ENVIR IOR H4000 SET BIT 14 FOR ASCII UNL IFZ ***** LST JMP TCSET EBDIC LDA ECCT+8 STA B,I SET MAX (LARGEST) CONTROL CHAR ADB .4 B = EQTX WORD 38 DATA LDA ECCTA STA B,I SET UP TRANSM CODE TABLE ADDR ADB .23 B = EQTX WORD 61 ADDR LDA B,I GET ENVIR AND HBFFF CLEAR BIT 14 FOR EBCDIC TCSET EQU * UNL XIF ***** LST STA B,I & SAVE ENVIR ADB M29 B = EQTX WORD 32 ADDR UNL IFZ ***** LST SSA CRC TO BE USED (B15 =0)? JMP ULRC NO LDA B377 STA B,I SET UP 8-BIT MASK UNL XIF ҃ ***** LST ADB M30 B = EQTX WORD 2 ADDR LDA B,I GET EQTX2 AND M64 MASK OUT PARITY & CHAR SIZE IOR .8 SPEC NO PARITY & 8-BIT BYTE UNL IFZ ***** LST X2SET EQU * UNL XIF ***** LST STA B,I LDA EQTXP A = ADDR OF EQTX ADA .61 A = ADDR OF CHAR TRACE LENGTH LDA A,I ADA EFIXL ADA .3 CMA,INA A = EQTX LENGTH - (FIXED LENGTH ADA EQTXP,I + CHAR TRACE +3) SSA EVENT TRACE LENGTH > 2? JMP ASCII-2 NO, ERROR: BYPASS EXEC CALL LDA LU,I GET LOG UNIT # IOR B100 SET FUNCTION CODE =1 (INITLIZE) STA LU IOR H4000 CONTROL REQUEST AND M64 IOR .3 STA OP1 LDA EQTXP A =ADDR OF EQTX ADA EFIXL A =ADDR OF TRACE TABLE STA B INB INIT WORD 1 OF 1ST ENTRY STB A,I IN TRACE TABLE ADB M2 B =ADDR OF TRACE TABLE -1 STA B,I INIT OLDEST ENTRY ADDR ADB M1 B =ADDR OF TRACE TABLE -2 STA B,I INIT NEWEST ENTRY ADDR JSB EXEC MAKE CONTROL (INITIALIZE) REQ DEF *+6 DEF .2 SPECIFY WRITE DEF LU CONTROL WORD: FUNCTION & LU DEF EQTXP,I EQT EXTENSION BUFFER DEF .3 DUMMY PARAMETER DEF OP1 CLA SET A =0 TO IND A GOOD REQ JMP SLC,I RETURN * UNL IFZ ***** LST ULRC LDA B177 HERE IF USING LRC STA B,I SET UP 7-BIT MASK ADB M30 B = EQTX WORD 2 ADDR LDA B,I GET EQTX2 AND M64 MASK OUT PARITY & CHAR SIZE IOR .23 SPEC ODD PARITY & 7-BIT BYTE JMP X2SET * UNL XIF ***** LST .23 DEC 23 DEC 23, OCT 27 .61 DEC 61 M29 DEC -29 M64 DEC -64 OCT 177700, DEC -64 .SLCC DE9F SLCC ADDR OF SLC CONTROL ROUTINE .SLCR DEF SLCR READ ROUTINE .SLCW DEF SLCW WRITE ROUTINE UNL IFZ ***** LST ACCTA DEF ACCT ASCII CONTROL CHAR TABLE ADDR ECCTA DEF ECCT EBCDIC CONTROL CHAR TABLE ADDR UNL XIF ***** LST OP1 OCT 0 OPTIONAL PARAMETER SPC 4 UNL IFZ ***** DEC 16 DLE UNL XIF ***** LST .22 DEC 22 SYN UNL IFZ ***** LST DEC 2 STX DEC 31 ITB DEC 1 SOH DEC 23 ETB DEC 3 ETX DEC 4 EOT DEC 21 NAK DEC 5 ENQ OCT 74 RVI (WITH DLE) OCT 73 WAK (WITH DLE) OCT 61 AK1 (WITH DLE) OCT 60 AK0 (WITH DLE) OCT 177 7-BIT PAD * * EBCDIC CONTROL CHARACTERS ECCT EQU * DLE DEC 16 DLE DEC 50 SYN STX DEC 2 STX (BOTH EBCDIC & ASCII) DEC 31 ITB DEC 1 SOH DEC 38 ETB DEC 3 ETX DEC 55 EOT DEC 61 NAK DEC 45 ENQ OCT 174 RVI (WITH DLE) OCT 153 WAK (WITH DLE) OCT 141 AK1 (WITH DLE) OCT 160 AK0 (WITH DLE) OCT 377 8-BIT PAD UNL XIF ***** LST SKP * SLC CONTROL ROUTINE FOR LOGICAL DRIVER * SLCC NOP STB PHB SAVE B-REG LDB SLCC GET RETURN ADDRESS JSB SETUP SET UP RETURN ADDR & PTRS LDB PHB GET B-REG FROM PHYSICAL SSB,RSS IS THIS A NEW REQUEST (B NEG)? JMP SLCER NO, ERROR LDB B300 SPECIFY CONTROL: REQ CODE OFFSET JSB TRAIN GET FUNCTION & INIT TRACE ENTRY CPA .1 INITIALIZE?  JMP CF01 YES CPA .2 LINE OPEN? JMP CF02 YES CPA .3 LINE CLOSE? JMP CF02 YES ADA M32 SUBTRACT OCT 40 FROM FUNCTION UNL IFZ ***** LST SZA,RSS ESTABLISH LOCAL ID SEQUENCE? JMP CF40 YES CPA .1 ESTABLISH LIST OF REMOTE IDS? JMP CF41 YES UNL XIF ***** LST CPA .2 CHANGE ERROR RECOVERY PARAMS? JMP CF42 YES CPA .3 ZERO THE LONG TERM STATISTICS? JMP CF43 YES UNL IFZ ***** LST CPA .4 SPECIAL SHIFT TO READ STATE? JMP CF44 YES CPA .5 DISABLE AUTOMATIC NAK SENDING? JMP CF45 YES UNL XIF ***** LST SSA,RSS FUNCTION BELOW 40? JMP SLCER NO,ERROR CLA YES CLB JMP PRET,I LET PHYSICAL (P+2) LOOK AT FUNCT * CF01 CLA SET STATE = 0 (UNOPENED) STA STATE,I * ------------------------------------------------- * COMPLETE "CONTINUATION" RETURN TO PHYSICAL * SLCPC LDA PRET SPECIFY CONTINUATION CLB & COMP STATUS = 0 = OK JMP SLCXT+2 * ------------------------------------------------- CF02 ADA M2 GET EVENT NO. (0 OR 1) JMP SEA GO TO STATE-EVENT-ACTION CIRCLE UNL IFZ ***** LST CF40 LDA IDFLS,I GET ID FLAG/COUNT WORD ALF,ALF MOVE OLD SEND-FLAG TO RT. HALF AND HFF00 ZERO OLD FLAG IOR EQT10,I & MERGE IN NEW FLAG (8 1) ALF,ALF MOVE SEND-FLAG TO LEFT HALF STA IDFLS,I LDA EQT11,I GET ID-SEQ ADDR (REGARDLESS 8-1) STA SIDAD,I JMP SLCXT EXIT WITH STATUS =OK CF41 LDA IDFLS,I GET ID FLAG/COUNT WORD AND HFF00 ZERO OLD FLAG IOR EQT10,I & MERGE IN NEW FLAG (8-1) STA IDFLS,I LDA EQT11,I GET ID-SEQ ADDR (REGARDLESS 8-1) STA RIDAD,I & SAVE JMP SLCXT EXIT WITH STATUS =OK UNL XIF ***** LST CF42 LDA EQT10,I GET SPECIFIED # LDA A,I CMA,INA MAKE NEGATIVE STA NTRY,I AND SAVE UNL IFZ ***** LST NOP NOP UNL XIF ***** LST LDA EQT11,I GET # OF 3-SEC PERIODS IN LTO CMA,INA MAKE NEG STA NLTO,I & SAVE UNL IFZ ***** LST NOP NOP UNL XIF ***** LST JMP SLCXT EXIT WITH STATUS =OK CF43 JSB ZSTAT ZERO THE LONG TERM STATISTICS JMP SLCXT EXIT WITH STATUS =OK UNL IFZ ***** LST CF44 LDA .5 STA STATE,I SET STATE =5 (READ STATE) CLA,INA STA MPFLS,I SET CONTACT-MADE FLAG, CLR REST JMP SLCXT EXIT WITH STATUS =OK CF45 LDA MPFLS,I IOR .4 SET BIT 2: DISABLE NAK SENDING JMP CF45-2 UNL XIF ***** LST * SLCER CLB,INB COMP STATUS =INVALID REQUEST =1 JMP SLCXT+1 * ------------------------------------------------- * COMPLETION RETURN TO PHYSICAL * SLCXT CLB COMPLETION STATUS =OK =0 LDA PRETF SPECIFY COMPLETION STA PRETV & SET UP RETURN LDA MPFLS,I AND M3 CLEAR SEND-CONTINUE FLAG (BIT 1) STA MPFLS,I LDA ET04,I AND HFF00 MASK OUT OLD COMP STATUS IOR B & PUT NEW ONE LDB BLKSP,I PLUS THE BLOCK SPEC BITS BLF (MOVED TO BITS 7-5) RBL,RBL SLB,RSS IS THIS A WRITE REQ? IOR B NO, PUT BLK SPEC INTO STATUS STA ET04,I RIGHT HALF OF EQT 4 * ------------------------------------------------- * ! ROUTINE TO COMPLETE TRACE TABLE ENTRY * AND B377 ALF,ALF MOVE COMPLETION STATUS TO LEFT LDB TRNEW,I B =ADDR OF CURRENT ENTRY WORD 1 JSB TRINC GET ADDR OF ENTRY WORD 2 IOR B,I MERGE IN REQUEST & FUNCTION CODE STA B,I & STORE BACK IN WORD 2 LDB TRNEW,I LDB B,I B = ADDR OF NEXT WORD TO BE FILLD STB TRTMP SAVE IT (NOW ADDR OF NEXT ENTRY) JSB TRINC GET ADDR OF WORD AFTER NEXT STB A JSB TRACE INIT WORD 1 FOR NEXT ENTRY LDB TRNEW,I B =ADDR OF CURRENT ENTRY WORD 1 LDA TRTMP A =ADDR OF NEXT ENTRY WORD 1 STA B,I RESTORE PTR TO NEXT ENTRY STA TRNEW,I & SET NEXT ENTRY =CURRENT ENTRY CLA CLB JMP PRETV,I RETURN TO PHYSICAL SPC 4 * SLC READ ROUTINE FOR LOGICAL DRIVER * SLCR NOP STB PHB SAVE B-REG LDB SLCR GET RETURN ADDRESS JSB SETUP SET UP RETURN ADDR & PTRS LDB PHB GET B-REG FROM PHYSICAL SSB,RSS IS THIS A NEW REQUEST (B NEG)? JMP LCONT NO, CONTINUE READ/WRITE LDA NTRY,I STA RTCTR,I INIT RETRY CTR ISZ LTCS,I INC TOTAL # OF READ REQUESTS NOP NULL IN CASE OF ROLLOVER LDB B100 SPECIFY READ: REQ CODE OFFSET JSB TRAIN GET FUNCTION & INIT TRACE ENTRY SZA,RSS FUNCTION = 0? JMP SLCER YES,ERROR CPA .7 FUNCTION = 7? JMP SLCER YES, ERROR INA GET EVENT NO. (2 THROUGH 7) STA CURRQ,I SAVE CURRENT READ REQ # JMP SEA GO TO STATE-EVENT-ACTION CIRCLE SPC 4 * SLC WRITE ROUTINE FOR LOGICAL DRIVER * SLCW NOP STB PHB SAVE B-REG LDB SLCW GET RETURN ADDRESS JSB SETUP SET UP RETURN ADDR & PTRS LDB PHB GET B-REG FROM PHYSICAL SSB,RSS IS THIS A NEW REQUEST (B NEG)? JMP LCXONT NO, CONTINUE READ/WRITE LDA NTRY,I STA RTCTR,I INIT RETRY CTR LDA LTCS A=ADDR OF WORD 1, LONG-TERM STAT INA ISZ A,I INC TOTAL # OF WRITE REQUESTS NOP NULL IN CASE OF ROLLOVER LDB B200 SPECIFY WRITE: REQ CODE OFFSET JSB TRAIN GET FUNCTION & INIT TRACE ENTRY ADB B2000 SET BIT 10 TO IND WRITE STB BLKSP,I SAVE BLOCK SPEC BITS SLB,RSS TRANSPARENT TEXT TO BE SENT? JMP *+4 NO LDB ENVIR,I SSB LRC SPECIFIED? JMP SLCER YES, ERROR SZA,RSS FUNCTION = 0? JMP SLCER YES,ERROR ADA M7 SSA,RSS FUNCTION > 6? JMP SLCER YES, ERROR ADA .14 GET EVENT NO. (8 THROUGH 13) JMP SEA GO TO STATE-EVENT-ACTION CIRCLE * LCONT LDB KEY,I B = ADDR OF EDITOR ENTRY LDA PHA GET A-REG PASSED BY PHYSICAL JMP B,I * HE000 OCT 160000 OCT 160000 SPC 6 * STATE-EVENT-ACTION CIRCLE -- A STATE-TRANSITION PROCESSOR * * CALLING SEQUENCE: * (A) = EVENT # * (P) = JMP SEA * (A) = MESSAGE PROCESSOR FLAGS * SEA STA EVENT SAVE EVENT # LDA PRVST,I GET PREVIOUS STATES, AND B377 ISOLATE PREV-1, ALF,ALF & MOVE TO LEFT HALF LDB STATE,I GET CURRENT STATE (NOW PREV) IOR B MERGE IN PREV STATE STA PRVST,I ADB STADT ADD STATE TABLE BASE, GET ENTRY STB A INA LDA A,I GET ADDR OF NEXT STATE STA NEXST LDB B,I GET CLUSTER HEADER ADDR PCLUS LDA B,I GET CLUSTER HEADER INB STB CLUST SAVE ADDR OF 1ST CLUSTER WORD CLB RRR 8 A = 1ST EVENT IN CLUSTER BLF,BLF & B = -1 + LENGTH OF CLUSTER CMA,INA ADA EVENT COMPUTE REAL EVENT - 1ST EVENT SSA RESULTS NEG (EVENT BELOW CLUST)? JMP SEAER YE.S, ERROR STA EVOFF SAVE EVENT OFFSET CMA,INA ADA B COMPUTE CLUSTER LENGTH - OFFSET SSA RESULTS NEG (EVENT ABOVE CLUST)? JMP EVOUT YES LDB CLUST ADB EVOFF B = ADDR OF ACTION/NEXT STATE PR LDA B,I SEAF CLB RRR 8 A = ACTION INDEX BLF,BLF & B = NEXT STATE STB STATE,I STA CURAC SAVE ACTION LDA EVENT ALF,ALF GET WORD READY FOR TRACE TABLE: IOR B EVENT & RESULTANT STATE JSB TRACE LDA PRVAC,I AND B377 ISOLATE PREVIOUS ACTION ALF,ALF IOR CURAC MERGE IN CURRENT ACTION STA PRVAC,I & SAVE LDA CURAC ADA ACTAD A = ADDR OF APPROPRIATE ACTION: LDB A,I LDA MPFLS,I JMP B,I GO TO ACTION EVOUT ADB CLUST INB B = ADDR OF NEXT CLUSTER HEADER CPB NEXST ARE WE THROUGH WITH THIS STATE? JMP SEAER YES, ERROR SINCE EVENT NOT FOUND JMP PCLUS NO, PROCESS NEXT CLUSTER SEAER LDA BLOUT SET ACTION/NEXT STATE TO HANDLE JMP SEAF IMPROBABLE SITUATION * CLUST OCT 0 ADDR OF 1ST CLUSTER ENTRY CURAC OCT 0 CURRENT ACTION EVENT OCT 0 CURRENT EVENT # EVOFF OCT 0 OFFSET OF EVENT FROM CLUSTER NEXST OCT 0 ADDR OF ENTRY FOR NEXT STATE SKP UNL IFZ ***** LST * SUBROUTINE ENSEN: CHECK SEND & SET SEND-CONTINUE FLAG * ENSEN NOP SZA SEND OK? JMP LOW NO, SET EVENT =LINE ERROR (LOW) LDA MPFLS,I IOR .2 SET SEND-CONTINUE FLAG (BIT 1) STA MPFLS,I JMP ENSEN,I SPC 4 UNL XIF ***** LST * SUBROUTINE SCM: SEND CONTROL MESSAGE (ID, IF ANY, HAS * BEEN SENT ALREADY) * (A) = INDEX OF MESSAGE TO BE SENT: * 0 = ENQ 5 = WACK * 1 j= NAK 6 = RVI * 2 = EOT 7 = DLE EOT * 3 = ACK0 8 = TTD (STX ENQ) * 4 = ACK1 9 = SOH ENQ * SCM NOP STA SCMTP LDB SCM STB CMRET,I SAVE SCM RETURN UNL IFZ ***** LST LDB ENVIR,I RBL SSB TRANSM CODE = ASCII? JMP *+3 YES ADA EBCMA NO RSS UNL XIF ***** LST ADA ASCMA LDA A,I A = ADDR OF MESSAGE JSB HCONT NOP SZA SEND OK? JMP LOW NO, SET EVENT =LINE ERROR (LOW) LDA CMRET,I GET RETURN FROM SCM JMP STXT4 INC # OF MESSAGES SENT SCMTP OCT 0 TEMP FOR SCM SKP * SUBROUTINE SETUP: SET UP RETURN ADDRESSES TO PHYSICAL * DRIVER & EQTX POINTERS * (A) = A-REG PASSED BY PHYSICAL * (B) = P+1 RETURN OF CURRENT SLC ROUTINE * (P) = JSB SETUP * SETUP NOP STA PHA SAVE A-REG PADDED BY PHYSICAL STB PRETF SAVE P+1 (COMPLETION) ADDR INB STB PRET SAVE P+2 (CONTINUATION) ADDR LDB EQTAD B = EQT 1 ADDR ADB .3 B = EQT 4 ADDR CPB ET04 ALREADY CONFIGURED FOR THIS EQT? JMP SETUP,I YES STB ET04 ADB .6 B = EQT 10 ADDR STB ET10 INB B = EQT 11 ADDR STB ET11 ADB .3 B = EQT 14 ADDR STB ET14 ADB .3 B = EQT 17 ADDR LDB B,I B = EQTX 1 ADDR LDA B,I COMPUTE TOTAL EQTX LENGTH ADA EFIXC -(1 + FIXED LENGTH) ADB .21 EQTX 22 UNL IFZ ***** LST STB BCC BLOCK-CHECK CHAR UNL XIF ***** LST INB EQTX 23 STB BLKSP BLOCK SPEC BITS INB EQTX 24 STB EBUFA EDITOR BUFFER ADDR X INB EQTX 25 STB EBUFL EDITOR BUFFER LENGTH INB EQTX 26 UNL IFZ ***** LST STB ENXT NEXT EDITOR STATE INDEX UNL XIF ***** LST INB EQTX 27 STB ERET EDITOR RETURN ADDR INB EQTX 28 UNL IFZ ***** LST STB ESTAT EDITOR STATUS UNL XIF ***** LST INB EQTX 29 UNL IFZ ***** LST STB HDCNT HEADER COUNT UNL XIF ***** LST INB EQTX 30 UNL IFZ ***** LST STB ICCTR INIT CHAR CTR UNL XIF ***** LST INB EQTX 31 UNL IFZ ***** LST STB SYCNT LEADING SYNC CTR UNL XIF ***** LST INB EQTX 32 UNL IFZ ***** LST STB CMASK 7 OR 8-BIT CHAR MASK UNL XIF ***** LST INB EQTX 33 STB KEY ENTRY AFTER PHYS RECALL INB EQTX 34 UNL IFZ ***** LST STB MAXCC MAX CONTROL CHAR UNL XIF ***** LST INB EQTX 35 STB MPFLS MESSAGE PROCESSOR FLAGS INB EQTX 36 STB NTRY NUMBER OF RETRIES INB EQTX 37 STB RTCTR RETRY CTR INB EQTX 38 UNL IFZ ***** LST STB TCTA TRANS CODE TABLE ADDR UNL XIF ***** LST INB EQTX 39 STB CONVL CONVERSTNL BUFFER LENGTH INB EQTX 40 Y STB CURRQ CURRENT READ REQ # INB EQTX 41 UNL IFZ ***** LST STB IDFLS ID SEQ FLAGS/LENGTHS UNL XIF ***** LST INB EQTX 42 STB NLTO # OF 3-SECS IN LONG T/O INB EQTX 43 STB PRVAC PREV & CURRENT ACTIONS INB EQTX 44 STB PRVST PREV-1 & PREV STATES INB EQTX 45 STB PVACK CODE FOR PREV ACK INB EQTX 46 UNL IFZ ***** LST STB RIDAD ADDR OF RECVD ID SEQ LST UNL XIF ***** LST INB EQTX 47 UNL IFZ ***** LST STB SIDAD ADDR OF SENT ID SEQ UNL XIF ***** LST INB EQTX 48 STB STATE MAIN SLC STATE NUMBER INB EQTX 49 STB TOCTR LONG-TIMEOUT CTR INB EQTX 50 STB CMBUF CONTROL MESSAGE BUFFER ADB .8 EQTX 58 STB CMRET SCM RETURN ADDR INB EQTX 59 STB TXRET STXT RETURN ADDR INB EQTX 60 STB TLOG TRANSMISSION LOG (POSTV) INB EQTX 61 STB ENVIR SPECIFIED ENVIRONMENT INB EQTX 62 STB CTLEN CHAR TRACE LENGTH INB EQTX 63 STB LTCS LONG-TERM COMM STATISTCS ADB .11 EQTX 74 UNL IFZ ***** LST STB CTNXT NEXT WORD IN CHAR TRACE UNL XIF ***** LST INB EQTX 75 STB TRNEW ADDR OF NEWST TRACE NTRY INB EQTX 76 STB TROLD ADDR OF OLDST TRACE NTRY INB EQTX 77 STB NLHTRFWA TRACE TABLE 1ST WORD ADB A EQTX LWA STB CTLWA CHAR TRACE LAST WORD LDA CTLEN,I CMA,INA ADB A STB TRLWA EVENT TRACE LAST WORD JMP SETUP,I * EFLEN EQU 76 LENGTH OF EQTX - TRACE TABLE EFIXC ABS -1-EFLEN -1( + FIXED-LENGTH PART OF EQTX) EFIXL DEF EFLEN FIXED LENGTH OF EQT EXTENSION SPC 4 UNL IFZ ***** LST * SUBROUTINE SIDIF: SEND ID SEQUENCE IF NECESSARY * (P) = JSB SIDIF * (P+1) = RETURN IF SENDING ID * (P+4) = RETURN IF NOT SENDING ID * SIDIF NOP LDA MPFLS,I GET CONTACT-MADE FLAG (BIT 0) LDB SIDIF ADB .3 GET P+4 RETURN SLA CONTACT MADE (BIT 0 = 1)? JMP B,I YES, TAKE P+4 RETURN LDA IDFLS,I GET SEND/RECV ID FLAGS ALF,ALF AND B377 ISOLATE SEND FLAG SZA,RSS ID TO BE SENT? JMP B,I NO, RETURN LDA SIDAD,I LDB A,I CMB B = - (LENGTH +1) INA A = ADDR OF ID SEQ JMP SIDIF,I c#N SKP UNL XIF ***** LST * SUBROUTINE STXT: SEND TEXT * STXT NOP LDA MPFLS,I AND HFFBF CLEAR MP TIMEOUT FLAG (BIT 6) STA MPFLS,I LDA STXT STA TXRET,I SAVE STXT RETURN CLA STA TLOG,I ZERO TRANSMISSION LOG LDA ET10,I A = BUFFER ADDR LDB ET11,I JSB HSND NOP NOP SZA SEND OK? JMP LOW NO, SET EVENT =LINE ERROR(LOW) LDA NLTO,I STA TOCTR,I RESET LONG-TIME-OUT CTR LDA MPFLS,I AND M3 CLEAR SEND-CONTINUE FLAG STA MPFLS,I LDA TXRET,I GET RETURN FROM STXT STXT4 LDB .2 INC # OF MESSAGES SENT; ADB LTCS WORD 3 OF LONG-TERM STAT ISZ B,I NOP NULL IN CASE OF ROLLOVER JMP A,I RETURN HFFBF OCT 177677 REVERSE MASK BIT 6 SPC 2 * SUBROUTINE STXCH: SEND TEXT CHARACTERS * (A) = INDEX OF MESSAGE TO BE SENT * 10 = SOH 11 = STX ) ONE CHAR * 12 = ETX 13 = ETB ) * 14 = DLE STX 15 = DLE ETX ) TWO CHAR * 16 = DLE ETB ) STXCH NOP STA SCMTP UNL IFZ ***** LST LDB ENVIR,I RBL SSB TRANSM CODE = ASCII? JMP *+3 YES ADA EBCMA NO RSS UNL XIF ***** LST ADA ASCMA LDA A,I A = ADDR OF CHARS LDB SCMTP ADB M14 COMPUTE INDEX - 14 SSB INDEX 14 OR MORE? JMP *+3 NO LDB M3 YES: IN EITHER CASE, RSS LDB M2 B = - (1 + # OF CHARS) JMP STXCH,I RETURN SKP * SUBROUTINE TRACE: PUT WORD INTO TRACE TABLE * (A) = WORD TO BE STORED * TRACE NOP LDB TRNEW,I A =ADDR OF CURRENT ENTRY, WORD 1 LDB B,I B =ADDR OF NEXT WORD TO BE FILLD CPB TROLD,I MATCH ADDR OF OLDEST ENTRY? RSS YES JMP *+5 NO LDB B,I B =ADDR OF NEXT-TO-OLDEST ENTRY STB TROLD,I UPDATE PTR TO OLDEST ENTRY LDB TRNEW,I LDB B,I B=ADDR OF NEXT WORD TO BE FILLED STA B,I STORE WORD IN TRACE TABLE JSB TRINC GET ADDR OF NEXT WORD TO FILL LDA TRNEW,I CPB A IS NEXT WORD = CURRENT ENTRY? RSS YES, SET NEXT WORD = ENTRY START JMP *+3 JSB TRINC ADVANCE TO 2ND WORD OF ENTRY JSB TRINC ADVANCE TO 3RD WORD OF ENTRY STB A,I UPDATE WORD 1 OF CURRENT ENTRY JMP TRACE,I SPC 2 * SUBROUTINE TRAIN: GET FUNCTION & INITIALIZE TRACE ENTRY * (B) = REQUEST CODE (OFFSET 6 BITS TO LEFT) * (P) = JSB TRAIN * (A) = FUNCTION CODE * (B) = BLOCK SPEC BITS * TRAIN NOP LDA EQT09,I GET CONTROL WORD ALF,ALF & POSITION FUNCTION RAL,RAL CPB B300 IS THIS A CONTROL REQUEST? RSS YES AND .7 ISOLATE READ/WRITE FUNCTION AND B77 ISOLATE CONTROL FUNCTION STA TRTMP & SAVE IT IOR B MERGE IN REQUEST CODE (OFFSET) JSB TRACE STORE REQ & FUNCT IN TRACE TABLE CLA STA TLOG,I STA BLKSP,I LDA EQT09,I GET CONTROL WORD ALF POSITION BLOCK SPEC BITS AND HE000 & ISOLATE THEM RAL,RAL NOW IN BITS 1,0, & 15 STA B LDA TRTMP GET FUNCTION JMP TRAIN,I TRTMP OCT 0 TRACE TABLE TEMPORARY SKP * SUBROUTINE TRINC: INCREMENTS ADDRESS IN EVENT TRACE, * CHECKING FOR WRAPAROUND * (B) = ADDR TO BE INC * TRINC NOP CPB TRLWA IS IT LAST WORD OF TABLE? JMP *+3 YES INB JMP TRINC,I LDB TRFWA WRAPAROUND TO 1ST OF TABLE JMP TRINC,I SPC 3 * SUBROUTINE ZSTAT:  ZERO LONG TERM COMM. STATISTICS * ZSTAT NOP LDA M11 STA MPCTR SET COUNTER = 11 LDA LTCS A=ADDR OF WORD 1, LONG-TERM STAT CLB ZLOOP STB A,I ZERO TABLE ENTRY INA ISZ MPCTR JMP ZLOOP JMP ZSTAT,I * MPCTR OCT 0 COUNTER SKP * CONSTANTS & STORAGE FOR MESSAGE PROCESSOR ONLY * .16 DEC 16 DEC 16, OCT 20 .20 DEC 20 DEC 20, OCT 24 .21 DEC 21 DEC 21, OCT 25 .27 DEC 27 DEC 27, OCT 33 .29 DEC 29 DEC 29, OCT 35 .30 DEC 30 DEC 30, OCT 34 .31 DEC 31 DEC 31, OCT 37 .32 DEC 32 DEC 32, OCT 40, BIT 5 B200 OCT 200 OCT 200, DEC 128 B300 OCT 300 OCT 300, DEC 192 B2000 OCT 002000 OCT 2000, BIT 10, LEFT 4 H1400 OCT 012000 LEFT HALF = DEC 20 HBFFF OCT 137777 OCT 137777, REVERSE BIT 14 HEFFF OCT 167777 OCT 167777, REVERSE BIT 12 HFF00 OCT 177400 M11 DEC -11 DEC -11, OCT 177765 M14 DEC -14 DEC -14, OCT 177762 M17 DEC -17 DEC -17, OCT 177757, REV BIT 4 M20 DEC -20 DEC -20, OCT 177754, OCT -24 M32 DEC -32 DEC -32, OCT 177740, OCT -40 * PHA OCT 0 A-REG ON ENTRY FROM PHYSICAL PHB OCT 0 B-REG ON ENTRY FROM PHYSICAL PRETV OCT 0 VARIABLE RETURN TO PHYSICAL * * EQT POINTERS ET04 OCT 0 PTR TO COMPLETION STATUS IN EQT ET11 OCT 0 PTR TO EQT 11: REQ BUFFER LENGTH ET14 OCT 0 PTR TO TRANS LOG IN EQT 14 * * EQT EXTENSION POINTERS * CMRET OCT 0 PTR TO SCM RETURN CONVL OCT 0 PTR TO WRITE-CONV BUFFER LENGTH CURRQ OCT 0 PTR TO CURRENT READ REQ # UNL IFZ ***** LST IDFLS OCT 0 PTR TO ID FLAGS; EACH HALF =# OF * ID SEQS: LEFT,SEND; RT,RECV UNL XIF ***** LST NLTO OCT 0 PTR TO # OF 3-SECS IN LONG TMOUT PRVAC OCT 0 PTR TO PREV ACTION: PREV,CURRENT PRVST OCT 0 PTR TO PREV STATES: PREV-1,PREV PVACK OCT 0 PTR TO CODE FOR PREV ACK UNL IFZ ***** LST RIDAD OCT 0 ADDR OF RECVD ID SEQ LIST SIDAD OCT 0 ADDR OF SENT ID SEQ UNL XIF ***** LST STATE OCT 0 PTR TO MAIN SLC STATE NUMBER TOCTR OCT 0 PTR TO LONG-TIMEOUT CTR CMBUF OCT 0 ADDR OF CONTROL MESSAGE RECV BUF LTCS OCT 0 ADDR OF LONG-TERM COMM STATISTCS TRNEW OCT 0 ADDR OF NEWEST TRACE TABLE ENTRY TROLD OCT 0 ADDR OF OLDEST TRACE TABLE ENTRY TRFWA OCT 0 FIRST WORD ADDR OF TRACE TABLE TRLWA OCT 0 LAST WORD ADDR OF TRACE TABLE TXRET OCT 0 PTR TO STXT RETURN SKP * ASCII CONTROL MESSAGES -- WITH ODD PARITY * ASCM OCT 77776 ENQ 0 OCT 000576 NAK 1 OCT 001176 EOT 2 OCT 002176 ACK0 3 OCT 77577 PAD PAD OCT 004176 ACK1 4 OCT 77577 PAD PAD OCT 003576 WACK 5 OCT 77577 PAD PAD OCT 000376 RVI 6 OCT 77577 PAD PAD OCT 016177 EOT 7 OCT 77577 PAD PAD OCT 007176 TTD 8 OCT 00605 SOH ENQ 9 OCT 00400 SOH 10 OCT 01000 STX 11 OCT 101400 ETX 12 OCT 113400 ETB 13 OCT 10002 DLE STX 14 OCT 010203 DLE ETX 15 OCT 010227 DLE ETB 16 * ASCMA DEF *+1 ASCII CONTROL MESSAGE ADDR PTR DEF ASCM ENQ 0 DEF ASCM+1 NAK DEF ASCM+2 EOT DEF ASCM+3 ACK0 DEF ASCM+5 ACK1 DEF ASCM+7 WACK DEF ASCM+9 RVI DEF ASCM+11 DLE EOT DEF ASCM+13 TTD DEF ASCM+14 SOH ENQ DEF ASCM+15 SOH 10 TEXT DE(F ASCM+16 STX 11 DEF ASCM+17 ETX 12 DEF ASCM+18 ETB 13 DEF ASCM+19 DLE STX 14 DEF ASCM+20 DLE ETX 15 DEF ASCM+21 DLE ETB 16 SPC 2 UNL IFZ ***** LST * EBCDIC CONTROL MESSAGES * EBCM OCT 26777 ENQ PAD OCT 36777 NAK PAD OCT 33777 EOT PAD OCT 10160 DLE ACK0 DEC -1 PAD PAD OCT 10141 DLE ACK1 DEC -1 PAD PAD OCT 10153 DLE WACK DEC -1 PAD PAD OCT 10174 DLE RVI DEC -1 PAD PAD OCT 10067 DLE EOT DEC -1 PAD PAD OCT 01055 STX ENQ OCT 00455 SOH ENQ OCT 00400 SOH 10 OCT 01000 STX 11 OCT 01400 ETX 12 OCT 23000 ETB 13 OCT 10002 DLE STX 14 OCT 10003 DLE ETX 15 OCT 10046 DLE ETB 16 * EBCMA DEF *+1 EBCDIC CONTROL MESSAGE ADDR PTR DEF EBCM ENQ DEF EBCM+1 NAK DEF EBCM+2 EOT DEF EBCM+3 ACK0 DEF EBCM+5 ACK1 DEF EBCM+7 WACK DEF EBCM+9 RVI DEF EBCM+11 DLE EOT DEF EBCM+13 TTD DEF EBCM+14 SOH ENQ DEF EBCM+15 SOH 10 TEXT DEF EBCM+16 STX 11 DEF EBCM+17 ETX 12 DEF EBCM+18 ETB 13 DEF EBCM+19 DLE STX 14 DEF EBCM+20 DLE ETX 15 DEF EBCM+21 DLE ETB 16 UNL XIF ***** LST SKP * ACTION DEFINITIONS * AC01 EQU 400B OPEN LINE AC02 EQU 1000B CLOSE LINE AC03 EQU 1400B SEND EOT AC04 EQU 2000B SEND EOT, RECV RESPONSE AC05 EQU 2400B SEND ENQ, RECV RESPONSE AC06 EQU 3000B SEND ENQ, RECV CONVERSATNAL TEXT AC07 EQU 3400B INC RE5TRY CTR & RESPONSE ERRORS AC08 EQU 4000B SEE IF PRIMARY OR SECONDARY AC09 EQU 4400B SET CONTACT FLG & POST NORM COMP AC10 EQU 5000B POST 0, NORMAL COMPLETION AC11 EQU 5400B POST 1, INVALID REQUEST AC12 EQU 6000B POST 2, REQ INCOMPATIBLE W STATE AC13 EQU 6400B POST 3, BAD ID SEQUENCE AC14 EQU 7000B POST 4, LINE ERROR AC15 EQU 7400B POST 5, EOT RECVD AC16 EQU 10000B POST 6, DLE EOT RECVD AC17 EQU 10400B POST 7, LONG TIMEOUT OCCURRED AC18 EQU 11000B POST 8, ENQ RECVD AFTER EOT SENT AC19 EQU 11400B POST 9, TEXT OVERRUN AC20 EQU 12000B POST 10, MAX # OF NAKS RECVD AC21 EQU 12400B POST 11, MAX # OF ENQS SENT AC22 EQU 13000B POST 12, RVI RECVD AC23 EQU 13400B POST 13, ENQ RECVD AFTER ENQ SENT AC24 EQU 14000B POST 14, NAK RECVD AFTER ENQ SENT AC25 EQU 14400B POST 15, MAX ENQS RECVD FRM CONV AC26 EQU 15000B POST 16, BAD RESPONSE TO TTD AC27 EQU 15400B SEND TTD, RECV RESPONSE AC28 EQU 16000B SEND TEXT, RECV RESPONSE AC29 EQU 16400B SEND TEXT, TEXT AC30 EQU 17000B CHECK RVI AC31 EQU 17400B PROCESS POSITIVE ACK AC32 EQU 20000B PROCESS SHORT TIMEOUT DURNG SEND AC33 EQU 20400B INC RETRY CTR AC34 EQU 21000B CHECK TIMEOUT & BAD RESPSE FLAGS AC35 EQU 21400B PROCESS ENQ RECVDIN WRITE STATE AC36 EQU 22000B PROCESS SHORT TIMEOUT DURNG RECV AC37 EQU 22400B CHECK READ REQUEST TYPE AC38 EQU 23000B SEND ACK, RECV TEXT AC39 EQU 23400B SEND PREV ACK, RECV TEXT AC40 EQU 24000B SEND NAK, REVV TEXT AC41 EQU 24400B RECV RESPONSE AC42 EQU 25000B RECV TEXT AC43 EQU 25400B SEND WACK, RECV RESPONSE AC44 EQU 26000B SEND RVI, RECV TEXT AC45 EQU 26400B POST 17, IMPOSSIBLE SITUATION AC46 EQU 27000B SEND DLE-EOT AC47 EQU 27400B INC MESSAGE ERRORS,RECV RESPONSE AC48 EQU 30000B TOGGLE RECV ACK FLAG AC49 EQU 30400B BCC ERROR: SEND NAK, RECV TEXT AC50 EQU 31000B SET RECV ACK, CLEAR SEND ACK FLG AC51 EQU 319400B TOGGLE SEND ACK FLAG AC52 EQU 32000B TOGGLE SEND ACK & RECV ACK FLAGS * * EVENT DEFINITIONS * EV00 EQU 0 EVENT 0: LINE OPEN REQUEST EV14 EQU AC14 EVENT 14: ACK0 RECVD EV18 EQU AC18 EVENT 18: ENQ RECEIVED EV29 EQU AC29 EVENT 29: LONG TIMEOUT EV30 EQU AC30 EVENT 30: LOW EV31 EQU AC31 EVENT 31: HIGH SPC 4 * LINE OPEN ACT1 JSB ZSTAT ZERO THE LONG TERM STATISTICS LDA M7 STA NTRY,I INIT # OF RETRIES = 7 LDA M20 STA NLTO,I INIT LONG TIMEOUT = 60 SEC CLA UNL IFZ ***** LST STA IDFLS,I INIT BOTH ID FLAGS TO 0 UNL XIF ***** LST STA MPFLS,I INIT MESS PROC FLAGS UNL IFZ ***** LST LDA TRLWA INA STA CTNXT,I INIT CHAR TRACE ADDR UNL XIF ***** LST JMP SLCPC CONT.RETURN TO PHYS, STATUS = OK SPC 2 * LINE CLOSE ACT2 JMP SLCPC CONT.RETURN TO PHYS, STATUS = OK SPC 2 * SEND EOT ACT3 LDA .2 JSB SCM SEND EOT CONTROL MESSAGE LDA MPFLS,I AND .1 EXCEPT FOR CONTACT-MADE FLAG, STA MPFLS,I INIT MESS PROC FLAGS JMP HIGH SET EVENT = HIGH (NORMAL COMPL) SPC 2 * SEND EOT, RECV RESPONSE ACT4 LDA .2 JSB SCM SEND EOT CONTROL MESSAGE LDA MPFLS,I AND .1 EXCEPT FOR CONTACT-MADE FLAG, STA MPFLS,I INIT MESS PROC FLAGS ACT4A LDA NLTO,I STA TOCTR,I RESET LONG-TIMEOUT CTR JMP ACT5B RECV RESPONSE (NO ID) SPC 2 * SEND ENQ, RECV RESPONSE ACT5 EQU * UNL IFZ ***** LST JSB SIDIF SEND ID SEQUENCE IF NECESSARY JSB BSCT SEND ID OCT 0 SPECIFY NO ENDING OR INC JSB ENSEN CHECK SEND & S)ET SEND-CONT FLAG UNL XIF ***** LST LDB ENVIR,I GET SPECIFIED ENVIRONMENT CLA SPECIFY ENQ MESSAGE BLF,SLB HASP WORKSTATION (BIT 12 =1)? LDA .9 YES, SPECIFY SOH ENQ MESSAGE JSB SCM SEND CONTROL MESSAGE LDA PRVAC,I AND HFF00 ISOLATE PREV ACTION CPA H2000 PREV ACTION = 32? JMP *+3 YES, BYPASS RESET LDA NLTO,I STA TOCTR,I RESET LONG-TIME-OUT CTR LDA ENVIR,I SLA,RSS IS STATION PRIMARY? JMP ACT5C NO LDA M27 STA NOM3 SET NOM 3-SEC TIMEOUT TO 2.7 SEC ACT5C LDA MPFLS,I AND M3 CLEAR SEND-CONTINUE FLAG (BIT 1) STA MPFLS,I ACT5A EQU * UNL IFZ ***** LST LDA MPFLS,I GET CONTACT-MADE FLAG (BIT 0) SLA CONTACT MADE (BIT 0 = 1)? JMP ACT5B YES LDA IDFLS,I GET SEND/RECV ID FLAGS AND B377 ISOLATE RECV FLAG STA RIDNO SAVE # OF ID SEQ IN THE LIST SZA,RSS ID TO BE RECVD? UNL XIF ***** LST JMP ACT5B NO UNL IFZ ***** LST CCE YES, SET E =1 TO SAVE ID LDA CMBUF A = ADDR OF CONTRL MESS RECV BUF LDB M17 B = -(1 + BUF LENGTH) JSB BSCR RECEIVE ID & CONTROL MESSAGE * -------------------------------- * ROUTINE TO CHECK ID SEQUENCES STA IDTMP SAVE EDITOR STATUS LDB M7 ADB A SSB,RSS WAS RESPONSE RECVD (STATUS < 7)? JMP STEM NO, PROCESS STATUS LDA TLOG,I GET STA IDRLN & SAVE RECVD ID LENGTH CLA STA TLOG,I ZERO TRANSMISSION LOG LDA RIDNO GET # OF ID SEQ IN THE LIST CMA,INA STA RIDCT & SET UP A COUNTER FOR THIS LDA RIDAD,I GET ADDR OF 1ST WORD IN ID LIST STA IDWD1 & SAVE IT px INA IDLEN LDB A,I BET # OF BYTES IN THE ENTRY STB IDCNT SAVE BYTE COUNT INA STA .LRID & ADDR OF LOCAL ID SEQ CPB IDRLN ENTRY LENGTH SAME AS RECVD ID? JMP IDCOM YES, GO COMPARE THE SEQUENCES IDNXT ISZ RIDCT HAVE WE LOOKED AT ALL ENTRIES? RSS NO, PROCESS NEXT ENTRY JMP IDBAD YES, NO MATCH FOUND LDA .LRID GET ADDR OF LOCAL ID SEQ LDB IDCNT & BYTE COUNT OF CURRENT ENTRY CLE,ERB SEZ IS ENTRY LENGTH ODD? INB YES, INCREASE WORD COUNT BY 1 ADA B GET ADDR OF NEXT ENTRY JMP IDLEN GO COMPARE LENGTHS IDCOM STA LRIDA SET UP PTR TO LOCAL ID LDA CMBUF STA RRIDA & PTR TO ID RECVD FROM REMOTE IDTST SLB IS BYTE COUNT ODD? JMP IDODD YES LDA LRIDA,I CPA RRIDA,I DOES LOCAL MATCH REMOTE ID WORD? RSS YES JMP IDNXT NO, GO CHECK NEXT ENTRY ISZ LRIDA ISZ RRIDA INC ID ADDR PTRS ADB M2 & REDUCE BYTE COUNT BY 2 SZB BYTE COUNT = 0? JMP IDTST NO, CHECK NEXT WORD JMP IDOK YES, THE ID'S DO MATCH IDODD CPB .1 BYTE COUNT = 1? RSS YES JMP IDTST+2 NO, CAN CHECK WHOLE WORD LDA LRIDA,I XOR RRIDA,I AND HFF00 SZA DO THE LEFT BYTES MATCH? JMP IDNXT NO, CHECK NEXT WORD IDOK LDA RIDCT HERE IF ENTIRE ID'S MATCH ADA RIDNO INA GET INDEX OF MATCHING ID STA IDWD1,I & SAVE IN 1ST WORD OF ID LIST LDA IDTMP JMP STEM GET EVENT FROM COMPLETION CODE IDBAD CLA HERE IF ID'S DO NOT MATCH STA IDWD1,I ZERO 1ST WORD OF ID LIST LDA .27 SET EVENT = BAD ID JMP SEA GO TO STATE-EVENT-ACTION CIRCLE UNL XIF ***** LST * M27 DEC -27 UNL IFZ ***** A LST .LRID OCT 0 FIXED RECVD IN ADDR, LOCAL LIST IDCNT OCT 0 # OF BYTES IN RECVD ID SEQ IDRLN OCT 0 LENGTH OF RECEIVED ID IDTMP OCT 0 TEMP FOR EDITOR STATUS IN A-REG IDWD1 OCT 0 ADDR OF WORD 1 OF ID LIST LRIDA OCT 0 RECVD ID PTR, FROM LOCAL LIST RIDCT OCT 0 CTR: # OF RECVD ID SEQ IN LIST RIDNO OCT 0 # OF RECVD ID SEQ IN LIST RRIDA OCT 0 RECVD ID PTR, RECVD FROM REMOTE UNL XIF ***** LST * ACT5B CLE SET E = 0: DISCARD ID LDA CMBUF A = ADDR OF CONTRL MESS RECV BUF LDB M17 B = -(1 + BUF LENGTH) JSB BSCR RECEIVE CONTROL MESSAGE * ------------------------------------------------- STEM ADA .13 SET UP MOST EVENT NUMBERS CPA .27 LINE ERROR? ADA .3 YES, CHANGE EVENT TO "LOW" JMP SEA GO TO STATE-EVENT-ACTION CIRCLE SPC 2 * SEND ENQ, RECEIVE CONVERSATIONAL TEXT ACT6 CLA CODE = 0 JSB SCM SEND CONTROL MESSAGE: ENQ LDA PRVAC,I AND HFF00 ISOLATE PREV ACTION CPA H2000 PREV ACTION = 32? JMP *+3 YES, BYPASS RESET OF LTO CTR LDA NLTO,I STA TOCTR,I RESET LONG-TIMEOUT CTR CLA STA TLOG,I ZERO TRANS LOG LDA ET10,I GET REQ BUFFER ADDR LDA A,I GET LENGTH OF WRITE BUFFER ISZ ET10,I GET CORRECT POINTER LDB ET11,I GET READ BUFFER LENGTH JMP AC29A RECV CONV TEXT SPC 2 * INCREMENT RETRY CTR & NO. OF RESPONSE ERRORS ACT7 LDB LTCS B = ADDR OF 1ST LONG-TERM STAT ADB .8 B = ADDR OF 9TH LONG-TERM STAT ISZ B,I INCREMENT NO. OF RESPONSE ERRORS NOP NULL IN CASE OF ROLLOVER IOR .32 SET BAD-RESPONSE FLAG (BIT 5) STA MPFLS,I JMP INTRY INC RETRY CTR & GET EVENT SPC 2 * SEE IF PRIMARY O= "00"? JMP ERR47 NO, GIVE -47 LDA 1 ADA N9 NUMERIC PART - 9 CMA,SSA SKIP IF DS00 - DS08 ERR47 LDA K11 MAKE A -47 ERROR ADA N58 A = -47 OR -50 THRU -58 JMP EXIT ERR2 LDA N40 JMP EXIT RETURN WITH IERR SKP * * READ REQUESTS * RIPCB NOP RIERR NOP RIBUF NOP RIL NOP RITAG NOP * PREAD NOP JSB .ENTR GET USER PARAMETERS DEF RIPCB JSB MVPCB MOVE 2 WORD PCB INTO REQUEST * LDB PREAD RETURN ADDRESS LDA RIERR JSB BLDRQ BASIC REQUEST PROCESSING DEF RITAG K2 DEC 2 IFZ JMP QREAD PERFORM PREAD TO 3000 XIF * LDA RIBUF SAVE BUFFER ADDRESS STA DBUF LDB RIL,I SAVE DATA LENGTH STB $DLEN * CLA STA WRLEN CLEAR WRITE DATA LENGTH LDA RIPCB PCB ADDRESS JMP MAIN NOW DO LINE COMM & RETURN SKP * * WRITE REQUESTS * PIPCB NOP PIERR NOP PIBUF NOP PIL NOP PITAG NOP * * PWRIT NOP PWRITE REQUESTS HERE JSB .ENTR PICK UP PARAMETERS DEF PIPCB JSB MVPCB MOVE 2 WORD PCB INTO REQUEST BUFR * LDB PWRIT SET UP ERROR RETURN LDA PIERR JSB BLDRQ BUILD BASIC REQST DEF PITAG K3 DEC 3 IFZ JMP QWRIT PERFORM PWRIT TO 3000 XIF * LDA PIBUF GET DATA ADDRESS STA DBUF LDA PIL,I GET DATA LENGTH STA $DLEN STA WRLEN * LDA PIPCB CLB JMP MAIN NOW DO LINE COMM & RETURN SKP * * CONTROL REQUESTS * CIPCB NOP CIERR NOP CITAG NOP * * PCONT NOP JSB .ENTR GET PARAMETERS DEF CIPCB JSB MVPCB MOVE 2 WORD PCB INTO REQUEST BUFR * i LDB PCONT SET UP RETURN ADDR LDA CIERR JSB BLDRQ BUILD BASIC REQST DEF CITAG K4 DEC 4 IFZ JMP QCONT PERFORM PCONT TO 3000 XIF * LDA CIPCB PCB ADDRESS JMP NODAT DO LINE COMM & RETURN SKP * * CLOSE REQUESTS * FIPCB NOP FIERR NOP * * RTRN EQU * PCLOS NOP JSB .ENTR GET PARAMETERS DEF FIPCB JSB MVPCB MOVE 2 WORD PCB INTO REQUEST BUFR * LDA DFIEA STA CLEAR SAVE LAST PARAM ADDR LDA FIERR SZA,RSS ERROR ADDR SPECIFIED? JMP ERR2 NO, GIVE ERROR STA ERRAD SET ERROR ADDRESS IFZ LDA #LU3K GET 3000 LU CMA,INA,SZA,RSS NEGATE IT JMP *+3 JUMP IF NO 3000 LINK CPA $DEST WAS NEGATIVE LU OF 3000 SPECIFIED? JMP QCLOS YES, DO PCLOS TO 3000 XIF * LDA K11 STA IRBFL 11 WORD REQUEST LDA K5 STA $FUNC FUNCTION CODE = 5 * LDA FIPCB PCB ADDRESS JMP NODAT DO COMMUNICATION & RETURN SKP * * DATA AREA * IRBFL NOP WRLEN NOP RDLEN NOP K5 DEC 5 K11 DEC 11 K20 DEC 20 K31 DEC 31 N2 DEC -2 N9 DEC -9 N40 DEC -40 N58 DEC -58 NEG00 OCT 147720 "DS" ASC 1,DS CONWD OCT 100000 ERRAD NOP TAGAD NOP CLEAR NOP DFIEA DEF FIERR RTAGA DEF $TAG ADDR OF REQ TAG FIELD DUMAD DEF * * * DEFINE REQUEST IRBUF BSS 31 IFZ BSS 4 XIF $STRM EQU IRBUF $DEST EQU IRBUF+3 $ERR EQU IRBUF+5 $FUNC EQU IRBUF+7 $PCB EQU IRBUF+8 $DLEN EQU IRBUF+10 $TAG EQU IRBUF+11 IFN UNL XIF IFZ SKP * * GENERATE POPEN REQUEST FOR REMOTE DS/3000 COMPUTER. * QOPEN LDA ITAG STA TAGAD * LDA ITAG SZA,RSS JMP ERR2 ILLEGAL NUMBER OF PARAMETERS. * * BEGIN THE REQUEST BUFFER WITH SETUP OF 8-WORD FIXED * FORMAT FOR PTOPC, THEN "RFA " IN NEXT 2 WORDS. * 2 LDA IPRAM POINT TO ADDR OF FIRST PARAM. JSB D$INI INITIALIZE BUFFER STUFFERS. * LDB B21 POPEN STREAM = 21 OCTAL. JSB D$PTP SET UP 8 WORD FIXED FORMAT AREA. LDB D$RQB LDA B7 CHANGE POPEN MSG CLASS TO 7. STA B,I * LDA "RF" JSB D$STW STORE "RFA ". LDA "A" JSB D$STW * LDA B25 JSB D$STW FUNCTION CODE = 25 OCTAL. * LDA INAM MOVE PROGRAM NAME (UP TO 28 BYTES). LDB N14 (DELIMITER = BLANK) JSB D$ASC * INA (A) = TOTAL BYTES IN REQUEST. ARS NEED TO INSERT TRAILING BLANKS ADA N17 IN PROGRAM NAME FIELD? STA TEMP SSA,RSS JMP MVENT NO. * LOOP2 LDA BLNKS YES. ADD TRAILING BLANKS JSB D$STW TO FILL OUT 14-WORD FIELD. ISZ TEMP JMP LOOP2 * MVENT LDA ENAM MOVE ENTRY NAME (UP TO 8 BYTES). LDB N4 DELIMITER = BLANK. JSB D$ASC * INA (A) = TOTAL BYTES IN REQUEST. ARS ADA N21 NEED TO INSERT TRAILING BLANKS STA TEMP IN ENTRY NAME FIELD? SSA,RSS JMP MVTAG NO. * LOOP3 LDA BLNKS YES. ADD TRAILING BLANKS TO FILL JSB D$STW OUT 4-WORD FIELD. ISZ TEMP JMP LOOP3 * MVTAG LDA N20 MOVE TAG FIELD. JSB D$NWD * CLA MOVE 2 PARAMETERS. LDA ENAM+1,I JSB D$STW CLA LDA ENAM+2,I JSB D$STW CLA ZERO 3 WORDS. JSB D$STW CLA JSB D$STW CLA JSB D$STW LDA MAXSZ STORE MAX BLOCK SIZE (+WORDS). LDB BUFSZ GET USER'S VALUE IF SZB IT WAS SPECIFIED. LDA BUFSZ,I SZA SSA LDA MAXSZ JSB D$STW * * SET UP PARAMETER MASK AS FOLLOWS: * BIT 9 = PROGRAM NAME * BIT 8 = ENTRY NAME * BIT 7 = 0 * BIT 6 = CONTROL INFO * BIT 5 = LOADING OPTIONS * BIT 4 = 0 * BIT 3 = 0 * BIT 2 = 0 * BIT 1 = 0 * BIT 0 = 0 * LDA DPARM FWA PARAM ADDR LIST. STA TEMP LDA N5 COUNTER. STA CONTR CLA INITIALIZE PARAMETER MASK. * LOOP4 LDB TEMP,I GET ADDR OF NEXT PARAM. LDB B,I SZB IOR B1 SET BIT IF PARAM SPECIFIED. RAL MOVE IT OVER. ISZ TEMP ISZ CONTR JMP LOOP4 LOOP TILL DONE. ALF BITS 0-4 = 0. JSB D$STW * * REQUEST BUFFER READY. D3KMS WILL WRITE IT TO QUEX'S I/O * CLASS. USER WILL BE SUSPENDED UNTIL D3KMS'S CLASS GET * IS COMPLETED WHEN THE REPLY ARRIVES. * JSB D$WDC STORE WORD COUNT. CLA POPEN HAS A SINGLE REPLY. LDB BIT15 SET NO-ABORT BIT IN FLAG WORD. * JSB REMIO SEND REQUEST AND WAIT FOR REPLY. * JSB PASSP RETURN ERROR CODE AND TAG FIELD. * LDA D$RQB RETURN PCB FROM REPLY. ADA K10 (CURRENTLY NOT USED - ALL ZEROES) STA TAGPR LDA N3 LDB IPCB JSB MOVE * LDA ERRAD,I JMP RTRN,I RETURN TO CALLER. * * DPARM DEF *+1 TABLE OF POPEN PARAMETER DEF INAM ADDRESSES FOR BIT MASK. DEF ENAM DEF B0 DEF ENAM+1 DEF ENAM+2 * SKP * * SUBROUTINE TO SEND AND/OR RECEIVE BUFFERS TO/FROM THE HP3000. * REMIO NOP IOR 1 STA CNWRD * JSB D3KMS DEF *+2 DEF CNWRD JMP ERR ERROR RETURN. * LDA D$RQB SAVE "FROM PROCESS #" AS ADA K4 "TO PROCESS #" FOR NEXT REQUEST. LDA A,I ALF,ALF AND B377 STA D$SMP * ISZ BLKCT BUMP PREAD/PWRIT BLOCK COUNTER. JMP REMIO,I EXIT. * * SUBROUTINE TO BUILD 8-WORD FIXED FORMAT AREA OF REQUEST. * * (A) = 1ST BYTE RIGHT JUSTIFED * (B) = STREAM TYPE. * D$PTP NOP STB TE.MP SAVE STREAM TYPE. LDA K4 STORE MESSAGE CLASS = 4. JSB D$STW STORE 1ST WORD IN REQUEST BUFFER. CLA CLEAR COMPUTER ID. JSB D$STW LDA TEMP STORE STREAM TYPE. JSB D$STW LDA N4 CLEAR NEXT 4 WORDS. JSB D$ZRO LDA N2 FORCE BYTE COUNTER TO CLEAR. JSB D$STW JMP D$PTP,I * * SUBROUTINE TO PASS RETURNED ERROR CODE AND TAG * FIELD TO THE USER PROGRAM. * PASSP NOP LDB D$RQB RETURN ERROR CODE. ADB K8 LDB B,I CLA MAP DS/3000 TO DS/1 ERROR CODES. CPB CG211 INA CCG & 211 = 1 (REJECT). CPB CL209 LDA N41 CCL & 209 = -41. CPB CL205 LDA N42 CCL & 205 = -42. CPB CG210 LDA N44 CCG & 210 = -44. CPB CL213 LDA N44 CCL & 213 = -44. STA ERRAD,I * LDB D$RQB ADB K13 RETURN TAG FIELD. STB TAGPR LDA N20 20 WORDS. LDB TAGAD JSB MOVE JMP PASSP,I SKP * * GENERATE PREAD REQUEST FOR REMOTE DS/3000 COMPUTER. * QREAD CLA CLEAR BLOCK COUNTER. STA BLKCT LDA RITAG STA TAGAD SZA,RSS JMP ERR2 ILLEGAL # PARAMETERS. * LDA RPRAM POINT TO ADDR OF 1ST PARAM (TAG). JSB D$INI INITIALIZE BUFFER STUFFERS. * LDB B22 SET UP 8-WORD FIXED FORMAT AREA. JSB D$PTP * CLA JSB D$STW * LDA RIL,I GET USER BUFFER LENGTH. SSA,RSS JMP *+4 CMA,INA INA CLE,ERA JSB D$STW STORE IN REQUEST BUFFER. * LDA RIPCB MOVE PCB TO REQUEST. JSB MVPC (EMPTY AT PRESENT) LDA N20 MOVE TAG FIELD. JSB D$NWD * JSB D$WDC SET WORD COUNT. * * SEND REQUEST TO THE 3000 AND WAIT FOR REPLIES. * LDA RIBUF SET ADDR OF USER DATA BUFFER. STA TBUF CLA z STA TCNT CLEAR RECEIVED BYTE COUNTER. INA SIGNAL FOR MULTIPLE REPLIES. * SN/RC LDB BIT15 SET NO-ABORT BIT IN FLAG WORD. * JSB REMIO SEND REQUEST AND GET REPLIES. * LDA CNWRD WAS LAST CALL TO RELEASE CLASS ONLY? AND B377 CPA K4 JMP DONE YES. * LDA BLKCT IF FIRST REPLY, PASS ERROR CPA B1 CODE AND TAG TO USER. JSB PASSP * LDA D$RQB CHECK IF ANY DATA WAS RECEIVED. ADA B7 LDA A,I (A) = + BYTES. ADA N10 ADJUST FOR IERR & PCB. LDB BLKCT CPB B1 IF FIRST REPLY, ADJUST FOR TAG. ADA N40 SZA,RSS JMP DEALC NO DATA (COULD BE REJECT). * JSB RDMOV MOVE DATA TO USER BUFFER. * LDA D$RQB IS CONTINUATION BIT SET? ADA K2 LDA A,I RAL,RAL SSA JMP DMREP YES. DEALC LDA K4 NO. DE-ALLOCATE CLASS. JMP SN/RC * DMREP LDB D$RQB NO. SET UP "REPLY". LDA B,I STORE COUNT AND MSG CLASS. AND B377 IOR LB10 STA B,I ADB K2 LDA B,I CLEAR REPLY BIT. ELA,CLE,ERA STA B,I ADB K2 LDA B,I REVERSE PROCESS NUMBERS. ALF,ALF STA B,I ADB K3 CLA CLEAR BYTE COUNT. STA B,I * LDA K2 TELL D3KMS TO LOOK FOR MORE. JMP SN/RC GO GET NEXT DATA BLOCK. * DONE LDA ERRAD,I JMP RTRN,I RETURN TO USER. SPC 2 * * MOVE SUBROUTINE * MOVE NOP STA CONTR MOVE1 LDA TAGPR,I PICK UP NEXT WORD STA 1,I AND PUT IT AWAY INB ISZ TAGPR INCREMENT POINTERS ISZ CONTR JMP MOVE1 UNTIL DONE JMP MOVE,I SKP * * SUBROUTINE TO MOVE A BLOCK OF DATA FROM REPLY * BUFFER TO USER BUFFER (REMAINING BYTES UP TO MAX LEN). * EXIT WITH TCNT = TOTAL BYTES REMAINING. * RDMOV NOP (A) = + BYTES. SZA,RSS EXIT FOR JMP RDMOV,I 0-LEN DATA. LDB A ACCUMULATE LOG. ADB TCNT STB TCNT INA CLE,ERA (A) = + WORDS. CMA,INA STA TEMP NEG. # WORDS TO MOVE. LDB D$RQB ADB K13 GET PAST 3-WORD "PCB" AREA. LDA BLKCT IF THIS IS FIRST REPLY, CPA B1 ADB K20 ADJUST FOR TAG FIELD. STB RQPTR ADDR OF REPLY DATA. * LOOP LDA RQPTR,I MOVE WORD FROM REPLY STA TBUF,I TO USER BUFFER. ISZ RQPTR BUMP POINTERS. ISZ TBUF * ISZ TEMP JMP LOOP ELSE LOOP TILL DONE. JMP RDMOV,I REACHED LIMIT OF MAX WORDS. SKP * * GENERATE PWRIT REQUEST FOR REMOTE DS/3000 COMPUTER. * QWRIT CLA CLEAR BLOCK COUNTER. STA BLKCT LDA PITAG STA TAGAD * SZA,RSS JMP ERR2 ILLEGAL # PARAMETERS. * LDA PPRAM POINT TO ADDR OF 1ST PARAM (TAG). JSB D$INI INITIALIZE BUFFER STUFFERS. * LDB B23 SET UP 8-WORD FIXED FORMAT AREA. JSB D$PTP * CLA JSB D$STW * LDA PIBUF SET POINTER TO USER DATA. STA TBUF * LDA PIL,I GET USER BUFFER LENGTH. SSA,RSS JMP *+5 CMA,INA SLA INA RSS CLE,ELA BYTES (POSITIVE). STA TCNT TOTAL DATA BYTES TO SEND. CLE,ERA JSB D$STW STORE IN REQUEST BUFFER (TCOUNT). * LDA PIPCB MOVE PCB TO REQUEST. JSB MVPC (EMPTY AT PRESENT) LDA N20 MOVE TAG FIELD. JSB D$NWD * JSB D$WDC SET WORD COUNT. * JSB WRMOV MOVE 1ST BLOCK TO REQUEST BUFFER. LDA TCNT SZA,RSS IF ALL DATA MOVED, JMP SEND TELL D3KMS THERE IS A SINGLE REPLY. * LDB D$RQB CONTINUATION BLOCKS REQUIRED. ADB K2 LDA B,I IOR BIT13 SET CONTINUATION BIT IN STREAM WORD. STA B,I  CLA,INA TELL D3KMS THERE ARE MULT. BLOCKS. * * SEND REQUESTS TO THE 3000 AND GET THE REPLY. * SEND LDB BIT15 SET NO-ABORT BIT IN FLAG WORD. * JSB REMIO SEND REQUESTS AND/OR GET REPLY. * LDB TCNT IF ALL DATA OUT, WE HAVE RECEIVED SZB THE REPLY. JMP MORE JSB PASSP RETURN ERROR CODE & TAG TO USER. LDA ERRAD,I JMP RTRN,I RETURN TO CALLER. * * MORE DATA... SHIP OUT THE NEXT BLOCK. * MORE LDB D$RQB CLEAR REPLY BIT. ADB K2 LDA B,I ELA,CLE,ERA STA B,I * JSB WRMOV MOVE NEXT CHUNK OF DATA. LDA K2 LDB TCNT SZB IF MORE DATA, KEEP CONT. BIT. JMP SEND CALL D3KMS WITH RCODE = 2. * LDB D$RQB THIS IS LAST BLOCK. ADB K2 LDA B,I AND NOT13 CLEAR CONTINUATION BIT. STA B,I LDA K3 TELL K3KMS THIS IS LAST BLOCK. JMP SEND SKP * SUBROUTINE TO STORE # BYTES LEFT TO SEND IN REQ * BUFFER AND MOVE NEXT BLOCK OF USER DATA (REMAINING * BYTES UP TO MAX). STORE ADJUSTED BYTE COUNTER (N) * IN REQUEST. ON EXIT, TCNT IS REMAINING # DATA * BYTES OR ZERO. * WRMOV NOP LDB D$RQB ADB B7 LDA B,I INITIALIZE BYTE COUNTER (N). STA BYTCT LDA TCNT # REMAINING DATA BYTES. SZA,RSS EXIT FOR JMP WRMOV,I 0-LEN DATA. LDB D$RQB * ADB K13 SET ADDR OF DATA IN RQBUF. LDA BLKCT SZA,RSS ADJUST FOR TAG FIELD ADB K20 IN FIRST REQUEST. STB RQPTR LDA RLSIZ STA TEMP SET MAX # DATA WORDS (NEG). * LOOP1 LDA TBUF,I MOVE DATA FROM USER TO REQUEST. STA RQPTR,I ISZ TBUF ISZ RQPTR ISZ BYTCT ADD 2 TO BYTE COUNTER (N). ISZ BYTCT LDA TCNT DECREMENT TOTAL DATA BYTES LEFT. ADA N2 STA TCNT CMA,INA NEGATE. SSA,RSS IF 0 OR 1, JMP AD2 J1 ALL USER DATA MOVED, ISZ TEMP JMP LOOP1 ELSE LOOP TILL DONE. JMP STBYT REACHED LIMIT OF MAX WORDS. * ADJ1 CMA,INA ADJUST BYTE COUNTER (N) ADA BYTCT STA BYTCT * STBYT LDA D$RQB STORE BYTE COUNT (N). ADA B7 LDB BYTCT STB A,I LDA TCNT IF TCNT = -1, MAKE IT 0. CPA N1 CLA STA TCNT JMP WRMOV,I RETURN. SKP * * GENERATE PCONT REQUEST FOR REMOTE DS/3000 COMPUTER. * QCONT LDA CITAG STA TAGAD * SZA,RSS JMP ERR2 ILLEGAL # PARAMETERS. * LDA CPRAM ADDR OF 1ST PARAM (TAG). JSB D$INI INITIALIZE BUFFER STUFFERS. * LDB B24 SET UP 8-WORD FIXED FORMAT AREA. JSB D$PTP LDA N2 CLEAR NEXT 2 WORDS. JSB D$ZRO * LDA CIPCB MOVE PCB TO REQUEST. JSB MVPC (EMPTY AT PRESENT) LDA N20 MOVE TAG FIELD. JSB D$NWD * JSB D$WDC SET WORD COUNT. * * SEND REQUEST TO THE 3000 AND WAIT FOR THE REPLY. * CLA SINGLE BLOCK. LDB BIT15 SET NO-ABORT BIT IN FLAG WORD. * JSB REMIO SEND REQUEST AND GET REPLY. * JSB PASSP RETURN ERROR CODE & TAG FIELD. * LDA ERRAD,I JMP RTRN,I RETURN. SKP * * GENERATE PCLOS REQUEST FOR REMOTE DS/3000 COMPUTER. * QCLOS LDB D$RQB MOVE REQUEST TO D3KMS BUFFER. LDA BRKBF MVW K8 MOVE 8 WORDS * JSB D3KMS SEND BREAK REQ TO 3000, DEF *+2 AND GET THE REPLY. DEF BIT15 NOP * LDA FIERR ADDR OF 1ST PARAM (DUMMY). JSB D$INI INITIALIZE BUFFER STUFFERS. * LDB B21 SET UP 8-WORD FIXED FORMAT AREA. JSB D$PTP * LDB D$RQB CHANGE PCLOS MSG CLASS TO 7. LDA B7 STA B,I * LDA "RF" STORE "RFA ". JSB D$STW LDA "A" JSB D$STW LDA B26 STORE FCN CODE)NLH = 26 OCTAL. JSB D$STW * LDA FIPCB MOVE PCB TO REQUEST. JSB MVPC (EMPTY AT PRESENT) * JSB D$WDC SET WORD COUNT. * * SEND REQUEST TO THE 3000 AND WAIT FOR THE REPLY. * CLA SINGLE BLOCK. LDB BIT15 SET NO-ABORT BIT IN FLAG WORD. * JSB REMIO SEND REQUEST AND GET REPLY. * JSB PASSP RETURN ERROR CODE & TAG FIELD. * LDA ERRAD,I JMP RTRN,I RETURN. SKP * * MOVE PCB FROM USER ARRAY TO REQUEST BUFFER. * MVPC NOP STA TAGPR POINTER TO PCB. LDA N3 STA CONTR MVP1 LDA TAGPR,I JSB D$STW ISZ TAGPR ISZ CONTR JMP MVP1 JMP MVPC,I * * TEST WHETHER REQUEST FOR 3000 OR REMOTE RTE. * DS3K NOP (A) = ADDR OF USER PCB. ADA K3 BUMP TO LU WORD. STA TEMP LDA #LU3K GET LU OF 3000. INA LDB A,I CPB TEMP,I SAME AS LU IN USER PCB? RSS YES. EXIT VIA P+1. ISZ DS3K NO. EXIT VIA P+2. JMP DS3K,I SKP N* * CONSTANTS AND WORKING STORAGE. * B0 OCT 0 B1 OCT 1 B7 OCT 7 B21 OCT 21 B22 OCT 22 B23 OCT 23 B24 OCT 24 B25 OCT 25 B26 OCT 26 B377 OCT 377 LB10 OCT 4000 K8 DEC 8 K10 DEC 10 K13 DEC 13 N1 DEC -1 N3 DEC -3 N4 DEC -4 N5 DEC -5 N10 DEC -10 N14 DEC -14 N17 DEC -17 N20 DEC -20 N21 DEC -21 N41 DEC -41 N42 DEC -42 N44 DEC -44 CL205 OCT 040315 CL209 OCT 040321 CG210 OCT 000322 CG211 OCT 000323 CL213 OCT 040325 MAXSZ DEC 4096 MAXIMUM USER BUFFER SIZE. RLSIZ ABS -D MAXIMUM # DATA WORDS PER REQUEST. "RF" ASC 1,RF "A" ASC 1,A BIT13 OCT 20000 NOT13 OCT 157777 BLNKS ASC 1, RQPTR NOP BYTCT NOP IPRAM DEF ITAG RPRAM DEF RITAG PPRAM DEF PITAG CPRAM DEF CITAG CNWRD NOP BLKCT NOP TEMP BSS 2 TCNT NOP TBUF NOP * BRKBF DEF *+1 OCT 4006 OCT 0 OCT 22 OCT 0,0,0,0,0 A EQU 0 B EQU 1 TAGPR NOP CONTR NOP BIT15 EQU CONWD XIF * LST * SIZE EQU * * END S6  91741-18017 1740 S C0122 DS/1000 MODULE: FOPEN              H0101 5ASMB,R,L,C HED FOPEN 91741-16017 REV 1740 770317 * (C) HEWLETT-PACKARD CO. 1977 NAM FOPEN,7 91741-16017 REV 1740 770317 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT FOPEN,D$RFH * EXT .ENTR,D3KMS,D$INI,D$STW,D$WDC,D$ZRO EXT D$PRM,D$NWD,D$ASC,D$RQB,D$ERR * * FOPEN * SOURCE: 91741-18017 * BINARY: 91741-16017 * JIM HARTSELL * AUG. 7, 1975 * A EQU 0 B EQU 1 * FOPEN NOP ENTRY POINT. LDA DPRAM CLEAR OLD PARAM ADDRESSES. STA ENTRY LDB COUNT CLA STA ENTRY,I ISZ ENTRY INB,SZB JMP *-3 LDA FOPEN STA ENTRY JMP BEGIN COUNT DEC -13 * PRAMS NOP FILE NAME (BYTE ARRAY) NOP FOPTIONS NOP AOPTIONS NOP RECORD SIZE NOP DEVICE SPECS (BYTE ARRAY) NOP FORMS MESSAGE (BYTE ARRAY) NOP # USER LABELS NOP BLOCK FACTOR NOP # BUFFERS NOP FILE SIZE (DBL-WORD) NOP # EXTENTS NOP INITALLOC NOP FILE CODE * ENTRY NOP ENTRY POINT. BEGIN JSB .ENTR GET ADDRESSES OF USER PARAMS. DPRAM DEF PRAMS CLA CLEAR ERROR CODE FOR FCHEK. CLB DST D$ERR * * BUILD THE REQUEST BUFFER. BEGIN WITH SETUP OF * 8-WORD FIXED FORMAT HEADER FOR RFA, THEN "RFA " IN * THE NEXT TWO WORDS. * LDA DPRAM POINT TO ADDR OF FIRST PARAM. JSB D$INI INITIALIZE BUFFER STUFFERS. * JSB D$RFH SET UP FIXED FORMAT AND b"RFA5". * CLA,INA JSB D$STW FOPEN CODE = 1. * * MOVE USER CALL PARAMETERS TO REQUEST BUFFER. * LDA N9 MOVE DUMMY,FOPTN,AOPTN,RECSZ, JSB D$PRM DUMMY,DUMMY,ULABL,BLCKF,NUMBF. * LDA N2 MOVE FILE SIZE JSB D$NWD (DOUBLE-WORD PARAM). * LDA N3 MOVE NUMXT,INALC,FLCOD. JSB D$PRM * * SET UP PARAMETER MASK FOR 13 PARAMS: BIT 12 REPRESENTS THE * FILENAME PARAM; BIT 0 REPRESENTS FILECODE. IF A BIT IS SET, * THAT PARAMETER WAS SPECIFIED IN THE CALLING SEQUENCE. * LDA DPRAM POINTER TO PARAM ADDRESSES. STA TEMP LDA N13 MAX. OF 13 PARAMS. STA TEMP1 CLA,RSS MSK RAL SHIFT ACCUMULATED BITS. LDB TEMP,I SEE IF PARAM GIVEN. SZB IOR B1 YES. SET THE BIT. ISZ TEMP ISZ TEMP1 JMP MSK LOOP FOR 13 PARAMS. STA TEMP SAVE PRELIMINARY MASK. * * FOR ASCII PARAMETERS, CHECK WHETHER A FILLER OF ZERO * WAS GIVEN TO SPECIFY NO PARAMETER. * CLA CLEAR (A) IN CASE PARAM NOT SPECIFIED. CLB INITIALIZE RESET MASK. LDA PRAMS,I GET 1ST WORD OF FILE NAME (ASCII). SZA,RSS LDB B10K NO FILE NAME. SET BIT 12. CLA CLEARED IN CASE NO PARAM. LDA PRAMS+4,I GET 1ST WORD OF DEV NAME. SZA,RSS ADB B400 NO DEV NAME. SET BIT 8. CLA CLEARED IN CASE NO PARAM. LDA PRAMS+5,I GET 1ST WORD OF FORMMSG. SZA,RSS ADB B200 NO FORMMSG. SET BIT 7. CMB COMPLIMENT (B), LDA TEMP GET THE PRELIMINARY MASK, AND B AND CLEAR REQUIRED BITS. * JSB D$STW STORE MASK IN REQUEST. INA STA NBYTS * * MOVE ASCII STRINGS TO REQUEST BUFFER. * CLA CLEAR BYTE POINTERS IN REQUEST. LDB D$RQB ADB D11 STA B,I FILE NAME POINTER. ADB B4 STA B,I DEvV NAME POINTER. INB STA B,I FORMMSG POINTER. * LDA PRAMS CHECK IF FILE NAME SPECIFIED. LDB A,I SZA SZB,RSS JMP SEND NO NAME. LDB D$RQB GET ADDR OF FLNAME BYTE ADB D11 POINTER IN RQBUF. LDA NBYTS REPLACE DUMMY VALUE WITH ADA N1 STA B,I BYTE POINTER TO ASCII STRING. LDA PRAMS MOVE FILE NAME ASCII STRING LDB N14 JSB D$ASC TO REQUEST BUFFER. INA STA NBYTS * LDA PRAMS+4 CHECK IF DEV NAME SPECIFIED. LDB A,I SZA SZB,RSS JMP FRMSG NO NAME. GO CHECK FORMMSG. LDB D$RQB ADB D15 LDA NBYTS REPLACE DUMMY VALUE WITH ADA N1 STA B,I BYTE POINTER TO ASCII STRING. LDA PRAMS+4 MOVE DEVICE NAME. LDB N4 MAX WORDS (NEG). JSB D$ASC INA STA NBYTS * FRMSG LDA PRAMS+5 CHECK IF FORMMSG SPECIFIED. LDB A,I SZA SZB,RSS JMP SEND NO FORMMSG. LDB D$RQB ADB D16 LDA NBYTS REPLACE DUMMY VALUE WITH ADA N1 STA B,I BYTE POINTER TO ASCII STRING. LDA PRAMS+5 MOVE FORMS MESSAGE. LDB N25 MAX WORDS (NEG). JSB D$ASC * * REQUEST BUFFER READY: D3KMS WILL WRITE IT TO QUEX'S * I/O CLASS. USER WILL BE SUSPENDED UNTIL D3KMS'S CLASS GET * IS COMPLETED WHEN THE REPLY ARRIVES. D3KMS WILL RETURN * WITH A-REG = STATUS WORD (FILE NUMBER). * SEND JSB D$WDC STORE WORD COUNT BYTE. * JSB D3KMS SHIP THE REQUEST BUFFER TO QUEX. DEF *+2 DEF BIT15 NO ABORT. JMP ABERR ERROR RETURN. * AND B377 ISOLATE FILE NUMBER IN A-REG. JMP ENTRY,I RETURN TO USER. * ABERR DST D$ERR STORE CODE FOR FCHEK RETRIEVAL. CLA JMP ENTRY,I FILE NUMBER = 0. SPC 3 * * D$RFH - COMMON SUBROUTINE FOR ALL RFA CALLS TO 3000. * SET UP FRONT END OF REQUEST BUFFER. * D$RFH NOP LDA B7 STORE MESSAGE CLASS = 7. JSB D$STW CLA CLEAR COMPUTER ID. JSB D$STW LDA B20 STORE STREAM TYPE = 20 OCTAL. JSB D$STW LDA N4 CLEAR SUB-STREAM, ETC. JSB D$ZRO LDA N2 FORCE BYTE CNTR TO CLEAR. JSB D$STW LDA "RF" JSB D$STW STORE "RFA ". LDA "A" JSB D$STW JMP D$RFH,I RETURN. SKP * * CONSTANTS AND WORKING STORAGE. * B1 OCT 1 B4 OCT 4 B7 OCT 7 B20 OCT 20 B377 OCT 377 B200 OCT 200 B400 OCT 400 B10K OCT 10000 D11 DEC 11 D15 DEC 15 D16 DEC 16 N1 DEC -1 N2 DEC -2 N3 DEC -3 N4 DEC -4 N9 DEC -9 N13 DEC -13 N14 DEC -14 N25 DEC -25 "RF" ASC 1,RF "A" ASC 1,A BIT15 OCT 100000 NBYTS OCT 0 TEMP NOP TEMP1 NOP * END 5  91741-18018 1840 S C0222 &D3KMS              H0102 nASMB,R,L,C HED D3KMS 91741-16018 * (C) HEWLETT-PACKARD CO. 1978 NAM D3KMS,7 91741-16018 REV 1840 780731 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ENT D3KMS,PRCNM,D$INI,D$STW,D$PRM,D$ABT ENT D$NWD,D$ASC,D$RQB,ICC,D$ZRO,D$WDC ENT D$ERR,D$INP ENT D$IPM,D$APM,D$NPM,D$SPM,D$SMP,D$LOG EXT .ENTR,EXEC,REIO,IFBRK,IFTTY EXT #QRN,RNRQ,#TBRN,#RSAX,#QXCL EXT CNUMO,.DFER,$LIBR,$LIBX,$OPSY,#RQCV * L EQU 304 MAXIMUM LINE BUFFER SIZE. * * D3KMS * SOURCE: 91741-18018 * BINARY: 91741-16018 * JIM HARTSELL * AUG. 11, 1975 * * D3KMS PROVIDES THE MASTER REQUESTOR WITH AN INTERFACE TO AN * HP3000 REMOTE COMPUTER. ALL REQUESTS ARE SENT TO THE 3000 * LU, AND MPE PROCESS NUMBER, WHICH WERE DEFINED IN THE PREVIOUS * CALL TO HELLO. D3KMS WRITES THE REQUESTS TO THE QUEX I-O CLASS, * WHICH QUEX RETRIEVES VIA CLASS I/O GET CALLS PRIOR TO TRANSMISSION. * D3KMS IS THE COUNTERPART OF THE DS/1000 D65MS SUBROUTINE. * * D3KMS CALLING SEQUENCE: * * JSB D3KMS * DEF *+2 * DEF CONWD CONTROL WORD (SEE BELOW). * RETURN HERE UPON ERROR DETECTION. * NORMAL RETURN. * * ENTRY CONDITIONS: * * CONWD ASSIGN SEND GET DEALLOC * BITS 0-7 CLASS REQ REPLY CLASS * * 0 YES YES YES YES * 1 YES YES YES NO * 2 NO YES YES NO * 3 NO YES YES YES * 4 NO NO NO YES * * BIT 15 - ERROR-RETURN FLAG (NO-ABORT BIT). * BIT 14 - NO TIMEOUT. Y SKP * * D3KMS ERROR PROCESSING: * * 1. IF SIGN BIT (15) OF CONTROL WORD IS SET, ASCII ERROR CODES * ARE SUPPLIED TO THE CALLER IN THE A & B REGISTERS, UPON * RETURN TO THE POINT IN THE CALLING SEQUENCE. * * 2. IF THE SIGN BIT IS NOT SET, THEN THE CALLER'S PROGRAM IS * ABORTED, AFTER PRINTING AN ERROR MESSAGE ON THE SYSTEM * CONSOLE. THE MESSAGE PRINTED WILL CONTAIN EITHER THE USER- * SUPPLIED ERROR ADDRESS (ERRAD), OR THE ADDRESS OF THE * USER'S CALL TO 'D3KMS'. * * D3KMS ERROR MESSAGES: * * "DS00" - LOCAL SYSTEM IS SHUT DOWN! * "DS01" - SATELLITE NOT INITIALIZED. * "DS05" - TIMEOUT. * "DS06" - ILLEGAL REQUEST. * "DS07" - "RES" LIST ACCESS ERROR. * * * EXIT CONDITIONS: A-REG = STATUS WORD. * * ICC = -1 IF CCL (01) CONDITION CODE (A LA HP3000) FOR EVERY REPLY. * = 0 IF CCE (10) " * = 1 IF CCG (00) " * SKP A EQU 0 B EQU 1 SUP * CONWD NOP CONTROL WORD ADDRESS. * D3KMS NOP ENTRY POINT. JSB .ENTR OBTAIN DIRECT ADDRESSES DEF CONWD FOR PARAMETERS & RETURN POINT. * CLB CLEAR STB BRFLG BREAK FLAG AND STB OEFLG OUTPUT ERROR FLAG STB PRFLG AND PROMPT FLAG. * LDA $OPSY IS THIS AN RTE-III OR IV? RAR,SLA RSSI RSS YES. JMP CECND NO. LDB RSSI GET "RSS" INSTRUCTION. STB MODI2 MODIFY TO DO CROSS-MAP LOAD. STB MODI3 MODIFY TO DO CROSS-MAP STORE. * CECND LDA CONWD,I GET CONTROL WORD. AND B377 ISOLATE REQUEST CODE. STA RCODE SZA CPA B1 CHECK ENTRY CONDITIONS. JMP NEWRQ NEW REQUEST: ASSIGN MASTER CLASS #. CPA B4 RSS JMP FRMTO USE CURRENT MASTER CLASS #. * JSB CLNUP RELEASE CLASS # ONLY. CLA JMP NEXIT * * A NEW REQUEST IS READY TO GO TO THE HP3000. CHECK FOR * LO:CAL SYSTEM SHUT-DOWN OR QUIESCENT STATUS. * (CONTINUATION REQUESTS WILL NOT COME THRU HERE.) * NEWRQ LDA #QRN GET THE QUIESCENT/SHUTDOWN RN. SZA,RSS IS THE SYSTEM SHUT DOWN? JMP DOWN YES. GO TELL CALLER. * * NEW REQUESTS WILL BE FORCED TO WAIT HERE * IF LOCAL SYSTEM HAS BEEN QUIESCED. * JSB RNRQ GO TO RTE TO CHECK FOR QUIESCENCE. DEF *+4 DEF LCGW LOCK/CLEAR/WAIT/NO-ABORT. DEF #QRN SYSTEM-QUIESCENCE RESOURCE NUMBER. DEF TEMP DUMMY PARAMETER. JMP PASER * RTE ERROR - PASS CODE TO CALLER * * LDA #QRN IF QUIESCENT STATE HAS BEEN CHANGED SZA,RSS TO SYSTEM SHUT-DOWN STATE, JMP DOWN THEN TELL THE CALLER. * * * GET A CLASS NUMBER FOR THIS REQUEST AND STORE * IN REQUEST BUFFER AS "FROM PROCESS #". * LDA BIT13 CLEAR CLASS # AND SET BIT 13 STA CLASN FOR NON-RELEASE USAGE. * JSB EXEC GO TO RTE FOR A CLASS NO.---WAIT FOR IT. DEF *+5 DEF CLS19 CLASS CONTROL(QUICK ALLOCATE)- NO ABORT. DEF B0 LU = "BIT BUCKET" FOR ALLOCATION. DEF B0 DUMMY PARAMETER. DEF CLASN CLASS NUMBER STORAGE ADDRESS. JMP PASER * RTE ERROR: MESSAGE IN A & B * * JSB EXEC GO TO RTE TO COMPLETE DEF *+5 PREVIOUS ALLOCATION REQUEST. DEF CLS21 CLASS GET - NO ABORT. DEF CLASN CLASS NUMBER STORAGE ADDRESS. DEF B0 DUMMY. DEF B0 DUMMY. JMP PASER * RTE ERROR: MESSAGE IN A & B * * * ADD CLASS NUMBER TO REQUEST. * FRMTO LDA CLASN STORE CLASS # IN AND B377 "FROM PROCESS #". ALF,ALF BIT 13 CLEARED UNTIL REPLY ARRIVES. STA RQBUF+4 * * USE MPE PROCESS NUMBER RETRIEVED FROM "HELLO" * AS THE "TO PROCESS #". IF ZERO, THIS MUST BE A HELLO COMMAND. * LDA RQBUF ISOLATE MESSAGE CLASS. AND B377 STA B HOLD IT IN B-REG. LDA D$SMP N GET SESSION NUMBER. AND B377 CPB B6 IF NOT HELLO, JMP *+3 SZA,RSS AND SESSION # IS ZERO, JMP ILRQ IT IS AN ILLEGAL REQUEST. IOR RQBUF+4 STA RQBUF+4 * * WAIT FOR AVAILABILITY OF LIST-ENTRY SPACE IN "RES"; ADD NEW ENTRY. * SEND LDA RQBUF+7 GET BYTE COUNTER. INA CLE,ERA MAKE WORD COUNT. ADA D8 ADD FIXED FORMAT LENGTH. STA BUFL STORE REQUEST LENGTH. * SEND1 JSB RNRQ CHECK TABLE-ACCESS RN. DEF *+4 DEF LGW LOCK GLOBAL RN/WAIT/NO ABORT. DEF #TBRN TABLE-ACCESS SPACE-AVAILABLE RN. DEF TEMP DUMMY. JMP PASER * RTE ERROR - PASS ERROR CODE TO USER * * LDA CONWD,I RAL,ELA BIT 14 HAS TIMEOUT SUPPRESS FLAG. LDA CLASN RAL,ERA MOVE FLAG TO BIT 15 OF CLASS WORD. STA TEMP * JSB #RSAX GO TO "RES" ACCESS ROUTINE. DEF *+5 DEF B2 ADD A MASTER ENTRY. DEF TEMP CLASS # AND TIMEOUT FLAG. DEF XEQT ID SEGMENT ADDRESS OF USER. DEF B0 DUMMY DESTINATION NODE. SSB ANY ERRORS? JMP RESER * ERROR: "DS07" (NOT LIKELY) * * STA RQBUF+5 STORE SEQ # IN REQUEST. STA SEQ# SAVE LOCALLY. * INB SET "3K" BIT IN MASTER TCB. JSB LODWD IOR BIT14 JSB STRWD * LDA BRFLG IF CONTROL-Y SZA,RSS BREAK IS JMP CLSWR BEING SENT, LDA SEQ# STORE SEQ # IN STA YSEQ#,I CONTROL-Y REQUEST. CLA CLEAR STA BRFLG BREAK FLAG. * * SEND REQUEST TO THE 3000 BY WRITING IT * TO THE I/O CLASS FOR QUEX. * CLSWR LDA #QXCL GET QUEX I/O CLASS. SZA,RSS JMP NINIT DS/3000 NOT INITIALIZED. SSA JMP NINIT DS/3000 DISCONNECTED. * JSB EXEC CLASS WRITE TO QUEX. DEF *+8 DEF CLS20 ] DEF B0 DEF RQBUF DEF BUFL DEF BUFL PASS LENGTH FOR "GET" (WORDS). DEF B0 DEF #QXCL QUEX I/O CLASS. JMP PASER * RTE ERROR - PASS CODE TO CALLER * * LDA BRFLG WAS A "BREAK" SENT? SZA,RSS JMP WAIT NO. LDA B4 YES. EXIT WITH CLEAN-UP. STA RCODE JMP EXIT * * ISSUE A CLASS GET TO USER'S CLASS TO WAIT FOR A REPLY. * USER WILL BE SUSPENDED UNTIL REPLY ARRIVES. * WAIT LDA RQSIZ CMA,INA STA BUFL * GETRP JSB EXEC GO TO RTE TO GET THE REPLY. DEF *+5 DEF CLS21 CLASS GET - NO ABORT. DEF CLASN MASTER CLASS NO. -- NO RELEASE. DEF RQBUF REPLY ADDRESS. DEF BUFL REPLY LENGTH. JMP PASER * RTE ERROR: MESSAGE IN A & B * * * CHECK FOR PROPER REPLY. * SZB,RSS CHECK FOR ZERO REPLY LENGTH. JMP MTOER YES. GO PROCESS TIMEOUT ERROR. * LDA RQBUF+5 GET SEQUENCE NUMBER. CPA SEQ# JMP CKREJ SEQ # MATCHES. * LDA RQBUF NO MATCH: $STDLIST REQUEST? AND B377 CPA B5 JMP STDLS YES. CPA B7 NO. BREAK REPLY PRECEDING PCLOSE? RSS JMP GETRP LDA RQBUF+2 AND B377 CPA B21 JMP CKREJ YES. LET IT THROUGH. JMP GETRP NO. IGNORE. * * WE HAVE A $STDLIST REQUEST WHOSE "TO PROCESS NUMBER" (MASTER CLASS * NUMBER) HAPPENS TO MATCH ONE ALREADY IN USE BY ANOTHER PENDING * MASTER REQUEST. SINCE THIS $STDLIST MUST BE RESULTING FROM A "TELL" * COMMAND ISSUED ELSEWHERE, OR A "LATE" MASTER "REPLY", PASS IT OFF * TO "CNSLM" FOR DISPLAY ON THE SYSTEM CONSOLE, AND GO BACK TO GET * THE REPLY THAT IS STILL PENDING. * STDLS LDA RQBUF GET LENGTH OF $STDLIST REQUEST. ALF,ALF AND B377 STA BUFL * JSB EXEC CLASS WRITE TO CNSLM. DEF *+8 (VIA RQCNV) DEF CLS20 DEF B0 DEF RQBUF DEF BUFL DEbF B0 DEF B0 DEF #RQCV NOP ERROR RETURN. * JMP WAIT NOW GO WAIT FOR REAL REPLY. * * PROCESS "REAL" REPLY. * CKREJ LDA RQBUF+2 CHECK REJECT BIT. RAL SSA JMP ILRQ REQUEST REJECTED. * * GO CHECK IF A $STDLIST OR $STDIN WAS RECEIVED. IF NOT, * CONTROL WILL BE RETURNED. IF YES, THE MASTER-LIST ENTRY WILL * BE CLEARED, THE PRINT-READ WILL BE PROCESSED, A REPLY WILL BE * BUILT, AND CONTROL WILL GO TO "SEND". * JSB PRTRD GO CHECK FOR PRINT/READ REQUEST. * * DE-ALLOCATE THE USER'S CLASS NUMBER IF RCODE = 0 OR 3 OR 4, * AND RELEASE MASTER LIST ENTRY IN "RES". * EXIT JSB CLNUP GO CLEAN UP BEFORE EXIT. * * STORE CONDITION CODE IN ICC AND RETURN TO * CALLER WITH (A) = STATUS WORD. * LDB OEFLG WAS THERE AN OUTPUT ERROR? SZB JMP PSER1 YES! LDA RQBUF+8 ALF,ALF AND B3 IF CC IS: SET ICC TO: CPA B1 CCB 01 (CCL) -1 CPA B2 CLB 10 (CCE) 0 CPA B0 CLB,INB 00 (CCG) +1 LDA RCODE DON'T CHANGE ICCC IF RCODE = 2. CPA B2 RSS STB ICCC * LDA RQBUF+8 NEXIT ISZ D3KMS SET EXIT POINTER FOR NORMAL RETURN. JMP D3KMS,I RETURN. (A) = STATUS WORD. SKP * * SUBROUTINE TO PROCESS $STDLIST OR $STDIN "REQUESTS" THAT * MAY HAVE BEEN RECEIVED AS A "REPLY" FROM THE 3000. * PRTRD NOP LDA RQBUF AND B377 CHECK FOR MESSAGE CLASS 5 CPA B5 ($STDLIST, $STDIN, OR $STDIX). RSS JMP PRTRD,I NOT PRINT/READ. RETURN. LDA RQBUF+2 SSA CHECK IF IT IS A REQUEST. JMP PRTRD,I NO... REPLY, SO LET IT THROUGH. * LDA RQBUF+2 GET STREAM WORD. AND B77 ISOLATE STREAM TYPE. CPA B20 JMP MESG STREAM 20 IS $STDLIST "REPLY". CPA B21 STREAM 21 IS $STDIN "REQUEST". JMP STDIN E CPA B22 STREAM 22 IS $STDIN ALSO. JMP STDIN CPA B24 JMP PRTRD,I IGNORE $STDIN ABORT. JMP IGNOR JUST REPLY TO OTHERS. * * WE HAVE A REQUEST FROM THE HP3000 FOR INPUT FROM A * USER TERMINAL (PREVIOUS $STDLIST SHOULD HAVE * PROVIDED A PROMPT MESSAGE OR CHARACTER). * STDIN JSB #RSAX CLEAR CURRENT MASTER LIST ENTRY. DEF *+3 DEF B6 DEF SEQ# * * CHECK WHETHER WE NEED TO REWRITE PREVIOUS $SDTLIST BY CHECKING: * D$INP <> D$LOG AND PROPMT FLAG = TRUE AND D$INP IS INTERACTIVE. LDA D$INP IF D$INP = XOR D$LOG D$LOG, AND B77 SZA,RSS JMP RDLIN GO READ. LDA PRFLG IF PROMPT SZA,RSS IS ZERO, JMP RDLIN GO READ. JSB IFTTY IF D$INP DEF *+2 IS NOT DEF D$INP INTERACTIVE, SZA,RSS JMP RDLIN GO READ. * JSB REIO REPEAT DEF *+5 PROMPT DEF SD2 ON DEF D$INP INPUT DEF ORCRD DEVICE. DEF OLDLN NOP IGNORE ERRORS. CLA CLEAR PROMPT STA PRFLG FLAG. * RDLIN JSB REIO READ FROM USER TERMINAL. DEF *+5 DEF SD1 DEF D$INP DEF RQBUF+10 DEF RQBUF+8 (+ = WORDS, - = BYTES) CLB INPUT ERROR: SET B:=0. * LDA RQBUF+8 (B) = POS. BYTES OR POS. WORDS INPUT. SSA,RSS IF $STDIN SPECIFIED POS. WORDS, BLS MAKE (B) = POS. BYTES. * LDA B IF # BYTES IS ADA N3 SSA,RSS ONE OR TWO, JMP REPLY LDA RQBUF+10 AND INPUT WORD = BLANKS, CPA BLNKS CLB SET 0-LEN REPLY MESSAGE. * REPLY ADB B4 COUNT CONTROL & LENGTH WORDS. STB RQBUF+7 STORE TOTAL REPLY BYTE LENGTH. * ADB N4 RESTORE POS. BYTE LEN OF INPUT. LDA RQBUF+8 SSA IF $STDIN SPECIFIED NEG. BYTES, N CMB,INB,RSS MAKE (B) = NEG. BYTES, BRS ELSE MAKE (B) = POS. WORDS. STB RQBUF+9 STORE NEG. BYTE OR POS. WORD COUNT. * CLB,INB STORE STATUS WORD. STB RQBUF+8 * JSB D$WDC STORE WORD COUNT IN REPLY. * LDA RQBUF+2 SET REPLY BIT IN STREAM WORD. IOR BIT15 STA RQBUF+2 * LDA RQBUF+4 REVERSE "FROM & TO" PROCESS #'S. ALF,ALF STA RQBUF+4 * JSB BRKCK CHECK FOR OPERATOR BREAK. JMP BREAK YES. GO BUILD BREAK REQUEST. JMP SEND NONE. SEND $STDIN REPLY. * * WE HAVE A REPLY MESSAGE FROM THE HP3000. * DISPLAY ON USER-SPECIFIED LOG DEVICE. * MESG LDA OEFLG SKIP OUTPUT SZA IF OUTPUT ERROR JMP NEXT FLAG IS SET. LDA RQBUF+7 GET BYTE LENGTH. ADA N4 OMIT CONTROL WORDS FROM COUNT. CMA,INA NEGATE MESSAGE BYTE LENGTH. STA BUFL SAVE NEGATIVE LENGTH. LDA RQBUF+8 GET FORMS CONTROL WORD. AND B377 * JSB CNTRL PROCESS FORMS CONTROL. * JSB REIO DISPLAY THE MESSAGE. DEF *+5 DEF SD2 DEF D$LOG BUFA DEF RQBUF+10 DEF BUFL JSB OERR OUTPUT ERROR. * * SAVE OUTPUT LINE FOR POSSIBLE RE-PROMPT. * LDA BUFL IGNORE SZA,RSS WRITES WITH JMP NEXT NO DATA. STA OLDLN SAVE LENGTH. CMA,INA GET INA POSITIVE CLE,ERA NUMBER STA TEMP OF WORDS. ADA N40 DON'T SSA LET JMP MVBUF LENGTH LDA N80 GO STA OLDLN OVER CMA,INA 40. CLE,ERA STA TEMP MVBUF LDA BUFA MOVE LDB @ORCD THE MVW TEMP BUFFER. CCA PROMPT FLAG STA PRFLG := TRUE. * * BUILD A REPLY FOR THE $STDLIST REQUEST. * NEXT LDA RQBUF+2 SET REPLY BIT. IOR BIT15 STA *RQBUF+2 LDA RQBUF+4 REVERSE PROCESS NUMBERS. ALF,ALF STA RQBUF+4 AND B377 IF NO REPLY TO BE SENT, SZA,RSS JMP WAIT GO WAIT FOR REAL REPLY. * JSB #RSAX CLEAR CURRENT MASTER LIST ENTRY. DEF *+3 DEF B6 DEF SEQ# * LDA B2 SET BYTE COUNT = 2. ADA APEND ADD POSSIBLE FCONTROL PARAM. STA RQBUF+7 LDA CCE STORE STATUS WORD. STA RQBUF+8 LDA RQBUF+10 GET PARAM WORD IN CASE OF FCONTROL. STA RQBUF+9 STORE IN REPLY BUFFER. JSB D$WDC STORE WORD COUNT. CLA STA APEND * JSB BRKCK CHECK FOR OPERATOR BREAK. JMP BREAK YES. GO BUILD BREAK REQUEST. JMP SEND NONE. SEND $STDLIST REPLY. * IGNOR LDA B2 JUST REPLY TO FCONTROL. STA APEND JMP NEXT SKP * * ADD BREAK OR CONTROL Y REQUEST TO END OF $STDLIST/$STDIN * REPLY BEFORE SENDING TO QUEX. (P.PTR POINTS TO WHERE TO * START BUILDING THIS ADDITIONAL REQUEST.) * BREAK STB BRFLG SAVE STREAM TYPE FROM "BRKCK". LDA RQBUF+7 SAVE BYTE COUNT FROM 1ST BLOCK. STA TEMP2 INA SET P.PTR TO END OF REPLY. CLE,ERA ADA D8 ADA D$RQB STA P.PTR LDA MSGCL STORE WDCNT/MESSAGE CLASS. JSB D$STW CLA JSB D$STW LDA BRFLG STORE STREAM TYPE. JSB D$STW CLA JSB D$STW LDA RQBUF+4 STEAL "FROM/TO" FROM 1ST BLOCK. JSB D$STW LDA P.PTR SAVE CONTROL-Y STA YSEQ# SEQ # ADDR. JSB D$STW CLA JSB D$STW CLA STA P.PTR,I CLEAR BYTE COUNT WORD. LDA TEMP2 RESTORE BLOCK 1 BYTE COUNT. STA RQBUF+7 * ISZ P.PTR SET UP BUFL FOR CLASS WRITE. LDA D$RQB CMA,INA ADA P.PTR STA BUFL * LDA BRFLG CPA B25 GO WRITE TO QUEX: JMP SEND1 CONTROL-Y INCLUDES MASTER TRCB. JMP CLSWR BREAK DOESN'T. * MSGCL OCT 4006 YSEQ# NOP SKP * * SUBR. TO MAP HP3000 MPE FORMS CONTROL TO RTE. * (A) = FORMS CONTROL WORD. * CNTRL NOP STA TEMP FORMS CONTROL WORD. AND B300 SKIP N CPA B200 LINES? JMP SKIPN YES. JSB EXEC CHECK DEF *+4 $STDLIST DEF D13 LU DEF D$LOG TYPE. DEF TEMP1 LDA TEMP1 ALF,ALF AND B77 CPA B12 IF = 12 (LINE PRINTER), JMP CNTRL,I DON'T TRY OTHER CONTROLS. LDA TEMP GET CONTROL WORD. CPA B60 IF OCTAL 60, JMP DBLSP GO SET DOUBLE SPACE. CPA B320 IF OCTAL 320, JMP BKARR GO DO BACK-ARROW THING. JMP CNTRL,I NEITHER. RETURN. * * SKIP N LINES VIA I-O CONTROL CALL. * SKIPN LDA TEMP AND B77 SZA ADA N1 RTE WILL SKIP 1 LINE DURING WRITE. SZA,RSS IF N WAS 0 OR 1, JMP CNTRL,I EXIT! STA TEMP IPRAM FOR I/O CONTROL (# OF LINES) * LDA D$LOG AND FNMSK IOR FCN11 STA TEMP1 CONTROL WORD WITH FUNCTION CODE. * JSB EXEC I/O CONTROL CALL. DEF *+4 DEF SD3 DEF TEMP1 CONTROL WORD. DEF TEMP IPRAM. JSB OERR OUTPUT ERROR. * JMP CNTRL,I RETURN. * * INSERT A BACK-ARROW AS LAST CHAR. IN MESSAGE. * BKARR LDB BUFL CMB,INB POSITIVE # MESSAGE BYTES. CLE,ERB E SET IF ODD # BYTES. ADB BUFA ADDR OF WORD FOR BACK-ARROW. * LDA B,I CLEAR DESTINATION BYTE. SEZ,RSS ALF,ALF AND HB377 * IOR "_" INSERT BACK ARROW. SEZ,RSS ALF,ALF STA B,I * LDA BUFL INCR NEG. BYTE COUNT BY 1. ADA N1 STA BUFL * JMP CNTRL,I RETURN TO DISPLAY SECTION. * * SET FOR DOUBLE SPACE AFTER PRINT. * DBLSP LDB BUFL NEGAWTIVE BYTES. CMB,INB POSITIVE BYTES. CLE,ERB E SET IF ODD # ADB BUFA SEZ,RSS JMP DBL LDA B,I ODD BYTES: BLANK EXTRA BYTE. AND HB377 IOR BLNK STA B,I INB GET TO NEXT WORD. * DBL LDA CRLF INSERT CR-LF AT END. STA B,I LDA BUFL ADVANCE BUFFER LENGTH. ADA N2 SEZ ADA N1 STA BUFL * JMP CNTRL,I RETURN. * B60 OCT 60 B320 OCT 320 B300 OCT 300 B200 OCT 200 FNMSK OCT 174077 FCN11 OCT 1100 "_" OCT 137 SKP * * SUBROUTINE TO TEST AND SERVICE OPERATOR BREAK. * BRKCK NOP LDA OEFLG OUTPUT ERROR SZA FLAG SET? JMP BRK1 YES--IGNORE BREAK CHECK. JSB IFBRK DEF *+1 SZA,RSS HAS THERE BEEN A BREAK? JMP BRK1 NO. TAKE "NO-BREAK" RETURN. * JSB REIO DISPLAY DEF *+5 "ENTER CONTROL REQ. (B OR Y)". DEF SD2 DEF D$INP DEF CMSG DEF D13 JMP BRK1 OUTPUT ERROR. * JSB REIO READ OPERATOR RESPONSE. DEF *+5 DEF SD1 DEF D$INP DEF INBUF DEF B2 JMP BRK1 INPUT ERROR. * LDA INBUF TEST RESPONSE. AND HB377 ALF,ALF LDB B22 CPA "B" JMP BRKCK,I BREAK. LDB B25 CPA "Y" JMP BRKCK,I CONTROL Y. * JSB REIO NEITHER: DEF *+5 DISPLAY "INVALID INPUT" DEF B2 DEF D$LOG DEF ILMSG DEF B7 * BRK1 ISZ BRKCK SET "NO-BREAK" RETURN. JMP BRKCK,I * CMSG ASC 13,ENTER CONTROL REQ (B OR Y) ILMSG ASC 7,INVALID INPUT "B" OCT 102 "Y" OCT 131 SKP * SUBROUTINE TO RELEASE THE MASTER CLASS AND CLEAR MASTER-LIST ENTRY. * CLNUP NOP ENTRY/EXIT. CPA "DS" JMP CLASS CLEAR ALL FOR ABORTIVE ERROR. LDA RCODE CPA B1 JMP CLRES KEEP CLASS #. CPA B2 JMP CLRES KEEP CLASS #. * CLASS LDA CLASN GET THE CLASS NUMBER. CCE,SZA,RSS IF CLASS NUMBER NEVER ASSIGNED, JMP CLNUP,I RETURN NOW. * RAL,ERA INCLUDE THE NO-WAIT BIT (#15), STA CLASN AND SAVE FOR RELEASE. CREPT CCA SET THE RELEASE RE-TRY SWITCH STA TEMP TO -1. * CLRTN JSB EXEC GO TO RT TO RELEASE CLASS NUMBER. DEF *+5 DEF CLS21 SPECIFY CLASS GET - NO ABORT. DEF CLASN MASTER CLASS/RELEASE/NO WAIT. DEF B0 DUMMY BUFFER ADDRESS. DEF B0 DUMMY BUFFER LENGTH. RSS IGNORE ERRORS. * ISZ TEMP RELEASE PROCESSING COMPLETED? JMP CLRES YES. GO TO CLEAR THE "RES" ENTRY. INA,SZA NO. ARE ALL PENDING REQUESTS CLEARED? JMP CREPT NO. CONTINUE TO CLEAR REQUESTS. * LDA CLASN GET THE CLASS NUMBER AGAIN. AND CLMSK EXCLUDE THE NO-DE-ALLOCATION BIT (13). STA CLASN RESTORE THE MODIFIED CLASS WORD. JMP CLRTN RETURN FOR FINAL DE-ALLOCATION. * CLRES JSB #RSAX GO TO "RES" ACCESS ROUTINE. DEF *+3 DEF B6 CLEAR A LIST ENTRY. DEF SEQ# SEARCH, USING SEQUENCE NUMBER. * LDB RCODE IF RCODE = 1 OR 2, KEEP CLASS #. CPB B1 JMP CLNUP,I CPB B2 JMP CLNUP,I * CLA STA CLASN JMP CLNUP,I RETURN. * CLMSK OCT 117777 CLASS NUMBER MASK. SKP * * ERROR PROCESSING SECTION. * DOWN LDB "00" SYSTEM IS SHUT-DOWN: "DS00". JMP GETDS NINIT LDB "01" SATELLITE NOT INITIALIZED. JMP GETDS MTOER LDB "05" MASTER REQUEST TIMEOUT: "DS05". JMP GETDS ILRQ LDB "06" ILLEGAL REQUEST. JMP GETDS RESER LDB "07" "RES" LIST-ACCESS ERROR: "DS07". JMP GETDS * GETDS LDA "DS" GET FIRST HALF OF ERROR MESSAGE: "DS". * PASER DST MSGBF SAVE TOTAL ERROR MESSAGE. * JSB CLNLHNUP GO TO CLEAN UP BEFORE EXITING. (A)="DS". * PSER1 LDB MSGAD POINTS TO ERROR MESSAGE ADDRESS. LDA CONWD GET ERROR-RETURN FLAG. ELA POSITION TO FOR TESTING. SSA,RSS ABORT OR RETURN TO CALLER? JSB D$ABT ABORT! - NO RETURN. LDA N1 SET CONDITION CODE TO CCL. STA ICCC DLD MSGBF GET ERROR CODES AND RETURN TO JMP D3KMS,I THE CALLER AT ERROR-RETURN POINT. SPC 3 * * OUTPUT ERROR WAS DETECTED * OERR NOP DST MSGBF SAVE ERROR MESSAGE. STA OEFLG SET OUTPUT ERROR FLAG. JMP OERR,I RETURN. SKP * SUBROUTINE TO HANDLE ABORT MESSAGES. * * A REG = SUSPEND OR ABORT ADDRESS. * B REG = ADDRESS OF 4 CHAR ERROR MESSAGE. * JSB D$ABT (DOES NOT RETURN TO CALLER) * D$ABT NOP STA ERCD SAVE ABORT ADDRESS. DLD B,I GET ERROR MESSAGE. DST MSG SAVE ERROR MESSAGE. * JSB CNUMO CONVERT ERROR ADDRESS TO OCTAL. DEF *+3 DEF ERCD DEF ERCD * LDA 1717B GET ADDRESS OF ID SEGMENT. ADA D12 GET TO NAME ADDRESS. STA TEMP SAVE ADDRESS FOR XFER. JSB .DFER MOVE NAME INTO AREA. NMSGA DEF AMSG DESTINATION ADDRESS. DEF TEMP,I SOURCE ADDRESS. * JSB .DFER MOVE NAME FOR DS ERROR MESSAGE. DEF PNAM1 DESTINATION ADDRESS. DEF TEMP,I SOURCE ADDRESS. LDB MSGA MOVE A SPACE LAST CHAR OF NAME. ADB B2 LDA B,I AND UP377 IOR B40 STA B,I SAVE IT AGAIN. STA LNAM SAVE FOR LINE 1 ERROR. * JSB EXEC SEND 2-LINE ERROR/ABORT MESSAGE. DEF *+5 DEF B2 DEF D$LOG LOG DEVICE GIVEN FOR HELLO CALL. DEF MSG DEF D18 * JSB EXEC TERMINATION REQUEST. DEF *+2 NO RETURN. DEF B6 SPC 1 MSG ASC 3,DS PNAM1 ASC 2, LNAM ASC 1, ERCD ASC 3, OCT 6412 CR/LF AMSG ASC 8, ABORTED B6 OCT 6 B40 OCT 40 D12 DEC 12 D18 DEC 18 UP377 OCT 177400 SPC 3 * * FUNCTION FOR RETRIEVAL OF CONDITION CODE. * ICC NOP LDA ICC,I SET RETURN ADDRESS. STA ICC LDA ICCC FETCH CONDITION CODE. JMP ICC,I RETURN. SPC 5 * * SUBROUTINE TO STORE CURRENT PROCESS NUMBER. * * JSB PRCNM * DEF *+2 * DEF ISMP NEGATIVE PROCESS NUMBER. * ISMP NOP PRCNM NOP JSB .ENTR GET ADDRESS OF PROCESS NUMBER. DEF ISMP * LDA ISMP,I GET NEGATIVE PROCESS NUMBER. CMA,INA MAKE POSITIVE. STA D$SMP STORE AS CURRENT PROCESS #. * JMP PRCNM,I RETURN. SPC 3 * * SUBROUTINE TO LOAD FROM ALTERNATE MAP. * LODWD NOP MODI2 LDA B,I (RSS IF DMS SYSTEM) JMP LODWD,I XLA B,I LOAD WORD FROM ALTERNATE MAP. JMP LODWD,I * * SUBROUTINE TO STORE INTO ALTERNATE MAP. * STRWD NOP JSB $LIBR NOP MODI3 STA B,I (RSS IF DMS SYSTEM) JMP OUT XSA B,I STORE WORD INTO ALTERNATE MAP. OUT JSB $LIBX DEF STRWD SKP * * INITIALIZE BUFFER STUFFING ROUTINES. * D$INI NOP B STA U.PTR PTR TO 1ST USER PARAM ADDR. LDA D$RQB STA P.PTR PTR TO REQUEST BUFFER. * STA TEMP CLEAR REQUEST BUFFER. LDB RQSIZ CLA STA TEMP,I ISZ TEMP INB,SZB JMP *-3 JMP D$INI,I RETURN. * * STORE A-REG IN REQUEST BUFFER. * D$STW NOP LDB RQSIZ CHECK IF STILL ROOM IN BUFFER. CMB,INB ADB D$RQB CPB P.PTR JMP D$STW,I REQUEST BUFFER OVERFLOW! * STA P.PTR,I STORE WORD. ISZ P.PTR BUMP BUFFER POINTER. LDA BYTCT ADA B2 INCREMENT BYTE COUNTER. STA BYTCT JMP D$STW,I RETURN. (A) = BYTE COUNT. * * STORE N PARAMETERS IN REQUEST BUFFER: (A) = -N. * D$PRM NOP STA TEMP SAVE NEG. # PARAMS. NPM LDA U.PTR,I GET ADDR OF NEXT PARAM. SZA IF NOT SPECIFIED, STORE ZERO. LDA A,I JSB D$STW STORE VALUE IN REQ BUFFER. ISZ U.PTR ISZ TEMP JMP NPM LOOP TILL DONE. JMP D$PRM,I RETURN. (A) = BYTE COUNT. * * STORE N-WORD PARAM IN REQUEST BUFFER: (A) = -N. * D$NWD NOP STA TEMP SAVE NEG. WORD COUNT. LDB U.PTR,I GET ADDR OF PARAM. STB TEMP1 * NWD LDA TEMP1 IF PARAM NOT SPECIFIED, SZA STORE ZERO. LDA TEMP1,I GET NEXT WORD OF PARAM. JSB D$STW STORE IN REQ BUFFER. LDA TEMP1 SZA ISZ TEMP1 ISZ TEMP JMP NWD ISZ U.PTR JMP D$NWD,I RETURN. (A) = BYTE COUNT. * * STORE ASCII STRING IN REQUEST BUFFER. * D$ASC NOP STA ADDR SAVE ADDR OF STRING. STB TEMP SAVE MAX # WORDS (NEG.). SZA,RSS JMP ASC2 QUIT IF NOT SPECIFIED. * CLA CPB N25 SET FLAG IF ONLY DELIMITER CCA IS A PERIOD (FORMMSG). STA DMFLG * ASC1 LDA ADDR,I GET NEXT 2 CHARACTERS. SZA,RSS JMP ASC2 GET OUT IF ZERO WORD. JSB D$\STW STORE IN REQUEST BUFFER. LDA ADDR,I ALF,ALF LOOK FOR DELIMITER. AND B377 JSB DELIM JMP ASC2 LEFT BYTE WAS DELIMITER. LDA ADDR,I AND B377 JSB DELIM JMP ASC2 RIGHT BYTE WAS DELIMITER. * ISZ ADDR NO DELIMITER ENCOUNTERED. ISZ TEMP JMP ASC1 LOOP TILL MAXIMUM REACHED. * LDA BLNKS LIMIT REACHED. STORE BLANKS. JSB D$STW JMP D$ASC,I RETURN. (A) = BYTE COUNT. * ASC2 LDA BYTCT JMP D$ASC,I RETURN. (A) = BYTE COUNT. * * DELIM NOP CHECK IF (A) = DELIMITER. STA TEMP1 LDB DMFLG INB,SZB JMP DLM1 CPA PEROD STRING IS FORMS MESSAGE. JMP DELIM,I CHARACTER IS A PERIOD. JMP NODLM LET ANYTHING ELSE THROUGH. * DLM1 CPA SLASH NOT FORMMSG STRING. JMP NODLM LET SLASH THROUGH. CPA PEROD JMP NODLM LET PERIOD THROUGH. * ADA NB60 LET 0-9 THROUGH. SSA JMP DELIM,I ADA NB12 SSA JMP NODLM ADA B72 * ADA NEGA LET A-Z THROUGH. SSA ANYTHING ELSE IS A DELIMITER. JMP DELIM,I ADA NGMAX SSA,RSS JMP DELIM,I * NODLM ISZ DELIM DELIMITER NOT REACHED. JMP DELIM,I * * STORE ZERO IN NEXT N WORDS OF REQUEST BUFFER. * (A) = NEGATIVE # WORDS. * D$ZRO NOP STA TEMP ZRO CLA JSB D$STW ISZ TEMP JMP ZRO JMP D$ZRO,I * * COMPUTE AND STORE REQUEST WORD COUNT IN FIRST BYTE OF REQUEST. * D$WDC NOP LDA RQBUF FIRST WORD OF REQUEST BUFFER. AND B377 CLEAR WORD COUNT BYTE. LDB RQBUF+7 BYTE COUNT FROM REQUEST. INB CLE,ERB MAKE WORD COUNT. ADB D8 ADD FIXED FORMAT LENGTH. BLF,BLF MOVE TO LEFT BYTE. IOR B MERGE WITH MESSAGE CLASS. STA RQBUF STORE FIRST WORD. JMP D$WDC,I RETU)RN. SKP * * INITIALIZE REPLY VALUE PASSAGE SUBROUTINES. * D$IPM NOP STA U.PTR 1ST RETURN PARAM ADDR IN CALL. STB P.PTR 1ST RETURN VALUE IN REPLY BUFFER. JMP D$IPM,I * * STORE A-REG IN NEXT USER PARAMETER. * D$APM NOP LDB U.PTR,I GET PARAM ADDRESS. SZB SKIP STORE IF PARAM NOT SPECIFIED. STA B,I RETURN THE PARAM VALUE. ISZ U.PTR BUMP TO NEXT PARAM ADDRESS. JMP D$APM,I * * PASS N M-WORD RETURN PARAMS TO CALLER. * (A) = -N, (B) = -M * D$NPM NOP STA TEMP SAVE NEG. # PARAMS. STB TEMP2 SAVE NEG. # WORDS PER PARAM. NPM1 LDB U.PTR,I GET ADDR OF NEXT PARAM. SZB,RSS JMP NPM3 IGNORE OF PARAM NOT SPECIFIED. * LDA TEMP2 STA TEMP1 NPM2 LDA P.PTR,I GET NEXT WORD OF PARAM VALUE. STA B,I PASS TO CALLER. INB BUMP TO NEXT WORD OF PARAMETER. ISZ P.PTR BUMP TO NEXT WORD IN REPLY BUFFER. ISZ TEMP1 BUMP PARAM SIZE COUNTER. JMP NPM2 LOOP FOR M WORDS. * NPM3 ISZ U.PTR BUMP TO NEXT PARAM ADDRESS. ISZ TEMP BUMP # PARAMS COUNTER. JMP NPM1 LOOP FOR N PARAMS. JMP D$NPM,I * * PASS SINGLE N-WORD PARAM TO USER. * D$SPM NOP STA B B = NEG WORD COUNT. CCA A = ONE PARAM. JSB D$NPM PASS THE N-WORD PARAM. JMP D$SPM,I SKP * * CONSTANTS AND WORKING STORAGE. * B0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B7 OCT 7 B12 OCT 12 B20 OCT 20 B21 OCT 21 B22 OCT 22 B24 OCT 24 B25 OCT 25 B72 OCT 72 B77 OCT 77 B377 OCT 377 HB377 OCT 177400 D8 DEC 8 D13 DEC 13 N1 DEC -1 N2 DEC -2 N3 DEC -3 N4 DEC -4 NB12 OCT -12 N25 DEC -25 N40 DEC -40 NB60 OCT -60 N80 DEC -80 SD1 DEF 1,I SD2 DEF 2,I SD3 DEF 3,I RCODE NOP D$SMP OCT 0 SESSION MAIN PROCESS NUMBER. D$LOG OCT 1 LU OF LOG DEVICE. D$INP OCT 401 LU OF INPUT DEVICE. CCE OCT 1000 D$ERR BSS 2 BLNK OCT 40 CRLF BYT 15,12 BLNKS ASC 1, PEROD OCT 56 SLASH OCT 57 NEGA OCT -101 NGMAX OCT -33 XEQT EQU 1717B MSGAD DEF MSGBF MSGBF ASC 2,DS00 ERROR MESSAGE BUFFER. "00" ASC 1,00 "01" ASC 1,01 "05" ASC 1,05 "06" ASC 1,06 "07" ASC 1,07 "DS" ASC 1,DS * INBUF NOP APEND NOP U.PTR NOP P.PTR NOP TEMP NOP TEMP1 NOP TEMP2 NOP ADDR NOP BRFLG NOP BREAK FLAG DMFLG NOP OEFLG NOP OUTPUT ERROR FLAG BIT13 OCT 20000 BIT14 OCT 40000 BIT15 OCT 100000 CLASN NOP BUFL NOP ICCC NOP LCGW OCT 40006 GLOBAL RN LOCK/CLEAR/WAIT/NO-ABORT. LGW OCT 40002 GLOBAL RN LOCK/WAIT/NO ABORT. CLS20 DEF 20,I CLASS READ-WRITE (NO ABORT). CLS19 DEF 19,I CLASS CONTROL - NO ABORT. CLS21 DEF 21,I CLASS GET - NO ABORT. * PRFLG NOP PROMPT FLAG. OLDLN NOP LENGTH OF LAST WRITE. ORCRD BSS 40 LAST WRITTEN BUFFER. @ORCD DEF ORCRD * SEQ# NOP SEQ # STORAGE FOR REPLY VALIDATION. * D$RQB DEF RQBUF RQSIZ ABS -L SIZE OF REQ BUFFER (NEG WORDS). RQBUF BSS L REQUEST BUFFER. BYTCT EQU RQBUF+7 BYTE COUNT WORD (N). * BSS 0 ****** SIZE OF D3KMS ****** * END   91741-18020 1740 S C0122 DS/1000 MODULE: D65MS              H0101 MNASMB,R,L NAM D65MS,7 91741-16020 REV 1740 770629 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ******************************************************************* SPC 2 ENT D65MS * * D65MS * SOURCE: 91741-18020 * BINARY: 91741-16020 * D65MS NOP END n  91780-18011 1840 S C0622 &RJE RJE/1000 MAIN             H0106 ASMB,R,L,C,Z IFZ HED RJE WITH FMP INTERFACE [Z] * (C) HEWLETT-PACKARD CO.1978 * NAM RJE,19,50 91780-16011 REV.1840 780725 XIF IFN HED RJE WITHOUT FMP INTERFACE [N] * (C) HEWLETT-PACKARD CO. 1978 * NAM RJE,3,50 UNRELEASED 91780-16002 UPDATE XIF ENT RJE EXT $LIBR,$LIBX,$OPSY,EXEC EXT #BSC,#TIME,#CTRL,#CMBF,#WRBF,#RDBF UNL IFZ LST EXT PARSE,REIO,PRTN,IFBRK,.MVW EXT #TFLG EXT OPEN,CLOSE,CREAT,READF,WRITF,#RDCB,#LDCB,#PDCB UNL XIF IFN LST EXT #INGT REIO EQU EXEC UNL XIF LST EXT LURQ SUP * * NAME: RJE "REMOTE JOB ENTRY" * SOURCE: 91780-18011 - - - UNL IFZ LST * RELOC: 91780-16011 [FMP VERSION: 'Z' ASSEMBLY OPTION] UNL XIF IFN LST * RELOC: 91780-16002 [NON-FMP VERSION: 'N' ASSEMBLY OPTION] UNL XIF LST * PGMR: R. PASSMORE ( 11/20/73 ) * * MODIFIED BY: R. SHATZER, R. FUNK, P. KAPOOR ( 01/11/75 ) * C. WHELAN ( 10/31/75 ) * C. HAMILTON ( 04/12/77 ) * D.BOLIERE & R. GUDZ ( 08/11/78 ) * * ***************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * ***************************************************************** * * THE PROGRAM RJE, WITH THE BISYNC DRIVER (DVR50, AND #BSC) * EMULATES THE IBM 2780 REMOTE BATCH TERMINAL TO PROVIDE A * COMMUNICATIONS LINK TO IBM 360/370 COMPUTERS FROM THE RTE-II/III * AND RTE-C ENVIRONMENTS. SKP ******************************************************i|***************** * RJE PARAMETERS * * UP TO FIVE OPTIONAL PARAMETERS MAY BE SPECIFIED WHEN SCHEDULING * RJE. THE MEANING OF THESE PARAMETERS ARE: * * P1.......LOGICAL UNIT OF DVR50 (DEFAULT CAUSES SEARCH) * P2.......MODE PARAMETER. POSSIBLE VALUES ARE: * 0=INPUT AVAILABLE,LOCAL DIAL,NON TRANSPARENT * 1=NO INPUT, LOCAL DIAL, NON TRANSPARENT * 2=INPUT AVAILABLE, LOCAL ANSWER, NON TRANS. * 3=NO INPUT, LOCAL ANSWER, NON TRANSPARENT * 4=INPUT AVAILABLE, LOCAL DIAL, TRANSPARENT * 5=NO INPUT, LOCAL DIAL, TRANSPARENT * 6=INPUT AVAILABLE, LOCAL ANSWER, TRANSPARENT * 7=NO INPUT, LOCAL ANSWER, TRANSPARENT * * ADD 16384 FOR DIAGNOSTIC MODE. * UNL IFZ LST * P3-P5.....THREE CASES: 1) LOGICAL UNITS OF INPUT, LIST, UNL XIF IFN LST * P3-P5.......TWO CASES: 1) LOGICAL UNITS OF INPUT, LIST, UNL XIF LST * AND PUNCH DEVICES, RESPECTIVELY. * 2) P3=(LOGICAL UNIT + 100) OF * DEVICE USED TO SPECIFY INPUT, LIST AND PUNCH. UNL IFZ LST * 3) P3-P5 CONTAIN ASCII FILE NAME * USED TO SPECIFY INPUT, LIST, AND PUNCH. UNL XIF LST * * * DEFAULT VALUES ARE P2=0, P3=5, P4=6, P5=4 * * UNL IFZ LST * WHEN CASE TWO OR THREE IS USED, THE DEVICES ARE SPECIFIED * IN THIS FORMAT: * * [INPUT LU OR FN][,LIST LU OR FN][,PUNCH LU OR FN] * ( FN = FNAMER[:SC[:CR]] ) * * NON-EXISTING FILES ARE CREATED FOR LIST AND PUNCH STREAMS. * ( FILE-TYPE = 3, FILE SIZE = 24 BLOCKS ) UNL XIF IFN LST * WHEN CASE TNyWO IS USED, THE DEVICES ARE SPECIFIED IN THIS FORMAT: * * [ INPUT LU ] [ ,LIST LU ] [ ,PUNCH LU ] UNL XIF LST * * ALL READ REQUESTS TO THE SYSTEM CONSOLE ARE PRECEEDED BY * THE PROMPT #. * * FILE NAMES ARE ACCEPTED FOR I/O ONLY WHEN THE FILE MANAGER * VERSION IS BEING USED. * * **************************************************************************** SKP *************************************************************************** * SYSGEN REQUIREMENTS * * THE 12618A SYNCHRONOUS MODEM INTERFACE KIT AND APPROPRIATE DATA * SET ARE REQUIRED TO COMMUNICATE. INSTALLATION OF THIS PACKAGE * FOLLOWS NORMAL RTE/RTE-C SYSGEN PROCEEDURES. THE DRIVER, DVR50 * MUST BE INSTALLED AS PRIVILEDGED (OPTION P23 IN RTE). * * RJE IS RECOMMENDED BACKGROUND DISC RESIDENT IN RTE, AND IS NOT * SWAPPABLE WHEN #BSC IS ATTACHED. ON LINE LOADING OF RJE IS * RECOMMENDED IN RTE-C DUE TO THE PROGRAM SIZE. * * #BSC MAY BE CONFIGURED AS A RESIDENT LIBRARY ROUTINE, MAKING * RJE SWAPPABLE. LARGE BATCH ORIENTED SYSTEMS MAY PREFER THIS * CONFIGURATION WITH RJE FORGROUND DISC RESIDENT. * * **************************************************************************** * DIALING CAPABILITY * * DURING ITS OPERATION, RJE WILL SCHEDULE A PROGRAM, #DIAL * TO PROVIDE DIALING CAPABILITY. THE HP SUPPLIED VERSION PRINTS * A MESSAGE FOR MANUAL DIALING. THE USER MAY SUPPLY HIS OWN * VERSION FOR AUTO DIALING, ETC. * * *************************************************************************** * DATA FORMAT * * DATA TRANSMISSION IS ON A UNIT RECORD (CARD IMAGE) BASIS, WITH * MULTIRECORD BLOCKING USED TO FILL A 400 CHARACTER BUFFER. THE * EM CHARACTER MAY BE USED TO SUPPRESS TRAILING BLANKS. * * HORIZONTAL TAB, VERTICAL FORMAT CONTROL, DEVICE SELECTION, * AND TRANSPARENCY ARE ALSO SUPPORTED. * * IF TRANSPARENT MODE IS SPECIFIED, THE INPUT "eFILE" IS NOT * TRANSLATED INTO THE PROPER LINE CODE, BUT BINARY TRANSMISSION * OF 80 CHARACTER RECORDS IS POSSIBLE. ON RECEPTION, THE LIST * STREAM IS ALWAYS TRANSLATED, BUT THE PUNCH STREAM IS TRANSLATED * ONLY IN NON TRANSPARENT OPERATION, OR IF DIRECTED TO LPT OR TTY. * *************************************************************************** SKP *************************************************************************** * COMMANDS USED IN INPUT STREAM * * INPUT-EOF CAUSES A LINE TURNAROUND, AND, FOLLOWING THE RECEPTION OF ONE * FILE, TERMINATION OF RJE. * * TEN SPECIAL CONTROL RECORDS ARE RECOGNIZED IN THE INPUT STREAM: * * #E RECORD TRANSMITS THE CURRENT DATA BUFFER & CAUSES A LINE TURNAROUND. * * #P [,N [,M]] PAUSES FOR N LONG TIMEOUTS TO WAIT FOR UP TO M OUTPUTS. * N OR M EQUAL TO -1 MEANS INFINITE: #P,3,-1 = #R , #P = #E , #P,-1 = #W * * #C [,XX] RECORD CAUSES RECONFIGURATION OF I/O DEVICES. [XX] IS OF THE UNL IFZ LST * SAME FORMAT AS CASE TWO OR THREE FOR P3, ABOVE, BUT DEFAULT =NO CHANGE. UNL XIF IFN LST * SAME FORMAT AS CASE TWO FOR P3, ABOVE, BUT DEFAULT = NO CHANGE. UNL XIF LST * * #I RECORD CAUSES A TTY FILE TO BE INSERTED IN THE INPUT STREAM * UNTIL AN EOF IS READ FROM THE TTY, OR #P, #E, #R, #W IS USED. * WHEN THIS HAPPENS, THE INSERT IS TERMINATED. * * #R RECORD IS EQUIVALENT TO A #P,3,-1. * * #W RECORD SPECIFIES CONTINUAL WAIT FOR ONE OUTPUT FROM THE REMOTE. * THE WAIT INTERVAL MAY BE TERMINATED VIA OPERATOR INTERRUPT. * (*BR,RJE--FMP VERSION, OR *ON,#INRP--NON-FMP VERSION) * * #D RECORD CAUSES IMMEDIATE TERMINATION. * * #T [,XX] RECORD ENABLES TRANSPARENT MODE FROM THE CURRENT INPUT STREAM. UNL IFZ LST * 'XX' = LU OR FILE FROM WHICH INPUT WILL BE DERIVED UPON DETECTION OF UNL XIF IFN LST * 'XX' = LU FROM WHICH INPUT WILL BE DERIVED wUPON DETECTION OF UNL XIF LST * END-OF-FILE ON THE CURRENT INPUT-STREAM. 'XX' HAS THE SAME FORMAT AS UNL IFZ LST * CASE TWO OR THREE FOR P3, AND MAY ALSO BE USED TO RE-CONFIGURE THE UNL XIF IFN LST * CASE TWO FOR P3, AND MAY ALSO BE USED TO RE-CONFIGURE THE UNL XIF LST * LIST AND PUNCH STREAM DEVICES AS IN #C. NOTE THAT #COMMANDS, E.G. #P * RECORDS, ARE TREATED AS DATA, NOT COMMANDS, IN TRANSPARENT MODE. * * #X COMMAND FORCES TRANSLATION OF TRANSPARENT DATA IN THE PUNCH STREAM. * #X IS CANCELLED AT RECEIPT OF 'EOT' IN PUNCH STREAM OR ENTRY OF THE * #C COMMAND, OR INVOCATION OF #T STREAM CHANGES AFTER EOF FROM INPUT. * * #S COMMAND IS USED TO SWITCH ON OR OFF THE DIAGNOSTIC MESSAGES * CAPABILITY OR THE TRACE FEATURE. THIS COMMAND MAY ALSO APPEAR IN * A CONFIGURATION DATA STREAM, E.G. #S,T,ON => TURN ON TRACE MODE. * **************************************************************************** * RTE INTERRUPT FEATURE * * THE RTE OPERATOR INTERRUPT FEATURE IS SUPPORTED, AND CAUSES * INTERRUPTION OF THE OUTPUT STREAM AND INSERTION (#I) OF A TTY * FILE IN THE INPUT STREAM * **************************************************************************** SKP *************************************************************************** * DIAGNOSTIC AND ERROR MESSAGES * * RJE PRINTS AN ON MESSAGE, A TERMINATION MESSAGE, AND ERROR * MESSAGES WITH THE FORMAT " RJE: XX" WHERE XX HAS VALUES WHOSE * MEANINGS ARE: * * 50...INITIALIZATION REQUEST ISSUED TO DRIVER * 51...#DIAL SCHEDULED * 52...HANDSHAKE REQUEST ISSUED * 53...ANSWER REQUEST ISSUED * 54...WRITE REQUEST ISSUED * 55...READ REQUEST ISSUED * 56...SEND EOT REQUEST ISSUED * 57...RECEIVE TO SEND REQUEST ISSUED * 58...DISCONNECT REQUEST ISSUED * 59...EXTENDED STATUS REQUEST ISSUED * 60...IRRECOVERABLE LINE ERROR * 61...TERMINAL ON LINE * 62...TRANSA~MIT MODE * 63...RECEIVE MODE * 64...RVI RECEIVED * 65...BUFFER OVERFLOWED * 66...CONTROL MODE * 67...WAITING FOR REMOTE MODEM... * * NOTE THAT CODES 50-67 ARE PRINTED ONLY IN DIAGNOSTIC * MODE, AND ARE INFORMATION MESSAGES, NOT ERROR * MESSAGES. * * 20...SECURITY CODE VIOLATION (#BSC NOT FOUND IN CORE) * 21...PASSWORD VIOLATION (ANOTHER PROGRAM HAS INITIALIZED THE DRIVER) * 22...ILLEGAL MODE FOR REQUEST ISSUED TO DRIVER * 23...ILLEGAL BUFFER FORMAT GIVEN TO DRIVER * 24...ILLEGAL BISYNC SEQUENCE RECEIVED REPEATEDLY * 25...LOSS OF CLEAR TO SEND * 26...8 NAK CHARACTERS SENT (GARBAGE RECEIVED) * 27...8 NAK CHARACTERS TRANSMITTED (GARBAGE TRANSMITTED) * * 30...RECEIVE TIMEOUT OCCURED REPEATEDLY * 31...LONG TIMEOUT FAILURE * 32...LINE TERMINATION SEQUENCE SENT (DLE/EOT) * 33...LINE TERMINATION SEQUENCE RECEIVED (DLE/EOT) * 34...LOSS OF DATA SET READY SIGNAL * 35...LOSS OF CARRIER DETECT DURING RECEIVE (REPEATEDLY) * 36...TTD OR WACK LIMIT EXCEEDED * 37...REQUEST TIMEOUT DURING CONTROL MODE * * * NOTE THAT CODES 20-37 REPORT ERRORS WHICH WERE DETECTED * IN THE DRIVER, AND ARE CONSIDERED IRRECOVERABLE. * SKP * * 40...NAK READ REQUEST ISSUED 3 TIMES * 41...REMOTE DOES NOT RESPOND TO BID FOR LINE (HANDSHAKE REQUEST) * 42...I/0 DEVICE ERROR * 43...I/O CONFIGURATION PARAMETER ERROR * 44...LOGICAL UNIT NUMBER INVALID * 45...DVR50 NOT AVAILABLE (DEVICE DOWN, OR IN USE BY ANOTHER PROG) * 46...I/O REQUEST REJECTED BY DVR50 * 47...USER REQUEST TO ABORT RJE UNL IFZ LST * 48...TIMEOUT AND CONTROL MODIFICATION PARAMETER ERROR * * * NOTE THAT CODES 40-48 ARE ERRORS DETECTED BY RJE. UNL XIF IFN LST * * * NOTE THAT CODES 40-47 ARE ERRORS DETECTED BY RJE. UNL XIF IFZ LST * * * 01...FMGR ERROR -1 * 02...FMGR ERROR -2 * 03...FMGR ERROR -3 * 04...FMGR ERROR -4 * 05...FMGR ERROR -5 * 06...FMGR *FERROR -6 * 07...FMGR ERROR -7 * 08...FMGR ERROR -8 * 09...FMGR ERROR -9 * * 10...FMGR ERROR -10 * 11...FMGR ERROR -11 * 12...FMGR ERROR -12 * 13...FMGR ERROR -13 * 14...FMGR ERROR -14 * 15...FMGR ERROR -15 * 16...FMGR ERROR -16 * 17...FMGR ERROR -17 * * * NOTE THAT CODES 00-17 ARE ERRORS ENCOUNTERED BY THE * FILE MANAGER, AND ARE CONSIDERED IRRECOVERABLE BY * RJE. * UNL XIF LST * * **************************************************************************** SKP *************************************************************************** *********** THIS IS AN ENHANCED VERSION OF RJE CREATED 11/11/76 ********* *********** IT CONTAINS THE FOLLOWING CHANGES: ********* * * -> DOES A CORELOCK TO PREVENT SWAPPING IF #BSC IS DISC-RESIDENT. * -> WHEN ENTERING CONFIGURATION DATA, THE COMMAND "#!" WILL ABORT RJE. UNL IFZ LST * -> IF THE FIRST RECORD OF CONFIGURATION DATA IS OF THE FORMAT: * ----- * #M,CODE [,PAD [,DUPLEX [,RCVTO [,XMITO [,LNGTO [,TTDWK ]]]]]] * * RJE MAY BE CONFIGURED FOR THE FOLLOWING OPERATING OPTIONS: * * CODE* = EBCDIC/ASCII COMMUNICATION LINE CODE TO BE USED. * PAD* = PAD/EOM PAD WITH BLANKS/TERMINATE WITH 'EOM'. * DUPLEX* = HALF/FULL MODEM OPERATIONAL MODE. * RCVTO = NNNNN (+10'S OF MSEC.>=+200) RECEIVE TIMEOUT. * XMITO = NNNNN (+10'S OF MSEC.>=+100) TRANSMIT TIMEOUT. * LNGTO = NNNNN (+10'S OF MSEC.>=+400) LONG TIMEOUT. * TTDWK = NNNNN (POSITIVE COUNT >=400) NO.OF TTD/WACK SEQUENCES. * * PARAMETERS INDICATED WITH '*' SUFFIX ARE ENTERED AS ASCII; * (CODE,PAD,DUPLEX ARE ASCII; OTHERS ARE NUMERIC <= +32767) * AT LEAST ONE PARAMETER MUST BE ENTERED; OTHERS ARE OPTIONAL. * CURRENT VALUES ARE UNCHANGED WHEN ",," PLACE-HOLDERS ARE ENTERED. * INITIAL VALUES ARE DEFINED BY <#COMN>. IF <#COMN> IS CORE-RESIDENT, * CHANGED VALUES REMAIN IN EFFECT, UNTIL FURTHER MODIFIED, OR UNTIL * THE SYSTEM IS RE-BOOTED FROM DISC. * * -> NON-EXISTING LIST AND/OR PUNCH-STREAM FILES ARE CREATED. * -> THE RTE "BR" COMMAND IS USED INSTEAD OF THE OPERATOR * SCHEDULING "#INRP". "#INRP" & "#INXT" ARE NO LONGER NEEDED. * -> "PRTN" IS CALLED TO REPORT ERRORS BACK TO THE SCHEDULING * PROGRAM. THE FIVE PARAMETERS ARE AS FOLLOWS: * P1 = INDICATES ABORT IF BIT 15 SET * P2 = LOWER 8 BITS OF EQT WORD 5 * P3 = EQT WORD 12 * P4 = FMP ERROR CODE * P5 = LAST ERROR CODE (IN ASCII) REPORTED TO SYSTEM CONSOLE * NOTE THAT NORMAL COMPLETION IS INDICATED BY P3 = 2000B. UNL XIF LST * -> TRANSMITTED RECORDS WILL NORMALLY BE PADDED OUT TO 80 * CHARACTERS WITH BLANKS. END-OF-MEDIA CHARACTERS WILL ONLY * BE USED(AS PREVIOUSLY) IF BIT 1 OF WORD #5 IN "#COMN" IS SET. UNL IFZ LST * -> RE-ENTRANT I/O ("REIO") IS USED FOR ALL UNIT-RECORD DEVICE * READ/WRITES. THIS PERMITS SWAPPING OF RJE WHILE IN I/O SUSPEND. UNL XIF LST * -> DVR05 ( 2640/2644/2645 ) TERMINAL OPERATION IS SUPPORTED. * -> ASCII AND EBCDIC ARE BOTH HANDLED BY THIS VERSION OF RJE. * ASCII TRANSLATION IS SELECTED BY SETTING BIT 2 IN THE * #CTRL WORD OF "#COMN". * -> #W COMMAND ADDED: CONTINUAL WAIT FOR OUTPUT FROM REMOTE. * -> #T[,XX] ALLOWS 'XX' TO RECONFIGURE ALL STREAMS AS IN #C[,XX]. * -> THIS SOURCE SUPPORTS BOTH THE FMP AND NON-FMP VERSIONS OF * RJE. TO ASSEMBLE THE FMP VERSION, INCLUDE THE CONDITIONAL * ASSEMBLY "Z" OPERATOR ON THE ASSEMBLER CONTROL CARD. TO * ASSEMBLE THE NON-FMP VERSION, USE THE "N" OPERATOR INSTEAD. * -> PARTS OF RJE HAVE BEEN RECODED TO DECREASE ITS SIZE AND * BASE PAGE LINKAGE REQUIREMENTS. * -> RJE,#BSC, AND DVR50 HAVE BEEN MODIFIED FOR RTE-III OPERATION. ********>******************************************************************* * * * **************************************************************************** **************************************************************************** **************************************************************************** * PCO 1840 AUGUST 11,1978 **************************************************************************** * * THIS VERSION OF RJE DOES NOT BID FOR THE LINE UNLESS IT HAS * DATA TO SEND. THIS PREVENTS THE "READER ACTIVE" DEADLOCK * WHICH WAS CAUSED BY BIDDING FOR THE LINE AND THEN TURNING * IT AROUND BY SENDING EOT WITHOUT HAVING SENT DATA. * * TO COPE WITH MULTIPLE RETURNING OUTPUTS, #P COMMAND WAS ADDED. * * DIAGNOSTIC MESSAGES AND ERROR MESSAGES AND INFORMATION MESSAGES * ARE NOW PRINTED IN ASCII FOR FMP VERSIONS. * * A TRACE CAPABILITY NOW EXISTS WHICH ALLOWS RECORDING OF ALL * BYTES SENT AND RECEIVED OVER THE LINE. * * TRACE AND DIAGNOSTICS MODE MAY BE SWITCHED ON OR OFF AT ANY TIME * BY USE OF THE #S COMMAND. * *........................................................................ * * BUGS FIXED: * * PARSING BUG IN CONFIGURATION FILE INPUT FILENAME RECOGNITION. * (CAN NOW BE LESS THAN SIX CHARACTERS.) * * COMMUNICATIONS BUFFER OVERLAP. * * #I USED TO CAUSE BID FOR THE LINE. * * 18.2 HR IN AUTO ANSWER USED TO HANG SYSTEM. * * DID NOT RECOGNIZE SECURITY CODE > 72. * * #R WAITED FOR FOUR LONG TIMEOUTS INSTEAD OF THREE. * * BAD SYN CHARACTER SEARCH COULD CAUSE TO BE LOCKED OUT OF SYNC. * * END OF MEDIA EM NOW IS BYPASSED ONLY ON VERY FIRST RECORD. * * TROUBLE WITH 80 CHARACTER FIRST RECORDS. * * IF SENT NAK AND TIMED OUT RECEIPT OF ANSWER SYSTEM WOULD HANG. * ************************************************************************** ************************************************************************** SKP ******************************X********************************************* * THIS SECTION EXECUTES ONLY ON A SCHEDULE OPERATION. IT PERFORMS * THE FOLLOWING: * 1. RETRIEVE SCHEDULE PARAMETERS AND DECODE MODE. * 2. RESET ALL FLAGS TO MAKE PROGRAM RE-SCHEDULABLE * 3. CONFIGURE I/O CALLS FOR THE COMMUNICATIONS LU. * 4. READ THE CONFIGURATION FILE, IF REQUIRED. * 5. MODIFY THE TIMEOUT AND CONTROL VALUES, IF SPECIFIED. * 6. CALL CONFG TO INTERPRET THE FILE, AND START TO SET DEFAULT LU'S. * 7. TRANSFER CONTROL TO THE NEXT SECTION *************************************************************************** * RJE NOP PRIMARY ENTRY POINT LDA C.5 SET COUNTER TO -5 STA CNT1 LDA P1ADD AND INITIALIZE POINTER TO P1 STA TEMP1 RETRV LDA B,I RETRIEVE PARAMETER,AND UNL * SPC 1 * EXT DBUG * CPA C.1 * RSS * JMP *+9 * JSB DBUG * DEF *+1 * JSB EXEC * DEF *+4 * DEF C6 * DEF ZERO * DEF D1 * JMP RJE+1 * SPC 1 LST STA TEMP1,I STORE IT INB BUMP ADDRESSES AND COUNT ISZ TEMP1 ISZ CNT1 IF THERE ARE MORE JMP RETRV RETRIEVE THEM * CLA GET A=0 STA INFLG RESET CONFIGURATION STA TRFLG FLAGS STA ASFLG TO ZERO STA BRKFL STA DIAGF STA IOBFL STA ABORT STA TST1 UNL IFZ LST STA #TFLG STA MODSW UNL XIF LST STA XTRAN PUNCH TRANSLATION FLAG STA RDLK RESET LU LOCK FLAGS STA LSTLK STA PUNLK STA EOTFL INA SET SYSTEM LU TO 1 STA SYSLU * LDA C.4 SET LISTEN TIME TO 1 MINUTE STA LISFL * * DECODE MODE PARAMETER * LDA P2 GET MODE PARAMETER CCB SET B = -1 STB RECCT SET RECEIVE COUNT TO 1 STREAM STB DISFL CLEAR DISCONNECT FLAG. STB FCRDF SET FIRST-CARD FLAG. STB FCDRD SLA IF INPUT EXPECTED, JMP *+3 STB LISFL STB INFLG SET INPUT FLAG RAR,SLA POSITION AND IF ANSWER, STB ASFLG SET ANSWER FLAG RAR POSITION SLA,RSS IF TRANSLATION, STB TRFLG SET TRANSLATION FLAG ALF,SLA POSITION,AND IF DIAG MODE STB DIAGF SET DIAG FLAG * * MODE PARAMETER HAS NOW BEEN DECODED * SLA IF DIAGNOSTIC MODE JSB HALT1 HALT COMPUTER * * CONFIGURE COMMUNICATIONS LU INTO CONTROL WORDS * LDA P1 GET LU OF COMMUNICATION INTERFACE. SZA,RSS IF LU WAS DEFAULTED, GO FIND IT JMP FINDL STA CWD00 STA OUTCW RETRIEVE EQUIPMENT TYPE JSB GTWST CPA C50 IF ITS DVR50, JMP *+4 PROCEED LUERR LDB DEC44 ELSE REPORT LU ERROR (44), JSB REPOR JMP EXIT2 AND ABORT LDA CWD00 COMM BOARD, AND CFGLU ADA C2700 STORE IN ALL LDB D.9 SET COUNTER TO -9 STB CNT1 LDB ACW27 GET ADDRESS OF CONTROL WORDS * STA B,I SET CONTROL WORD INB BUMP ADDRESS ADA C100 INCREMENT CONTROL WORD VALUE ISZ CNT1 IF THERE ARE MORE, JMP *-4 DO THEM * * TRACK DOWN BUFFER ADDRESSES, AND MAKE THEM DIRECT. * LDA RDBUA READ BUFFER. JSB INDA STA RDBUA LDA WRBFA WRITE BUFFER. JSB INDA STA WRBFA ADA C.1 STA WRBFB BINARY WRITE BUFFER. LDA COMBA COMMUNICATIONS READ BUFFER. JSB INDA STA COMBA UNL IFZ LST LDA TIME TIMEOUT/COcNTROL MODIFICATION BUFFER. JSB INDA STA TIME UNL XIF LST LDA #TIME TIMEOUT/CONTROL SPECIFICATION BUFFER. JSB INDA STA TIMAD ADDRESS OF TIMEOUT SPECIFICATIONS. LDA BSCAD ADDRESS OF #BSC. JSB INDA STA BSCAD UNL IFZ LST LDA DRDF ADDRESS OF INPUT-STREAM DCB JSB INDA STA DRDF * * DISABLE TRACE CAPABILITY IF NOT RTE III OR IV OR IF #COMN IS * NOT IN SSGA. * CLA PREPARE FOR UNDEFINED: $OPSY (RTE-C) LDA $OPSY GET THE OP-SYSTEM SPECIFICATION AND D2 ISOLATE DMS BIT SZA,RSS IF NOT DMS, STA TFGAD DISABLE TRACE * LDA RTORG FETCH FWA OF RT AREA CMA,INA ADA COMBA CLB SSA,RSS IF #COMN NOT IN SSGA, STB TFGAD DISABLE TRACE UNL XIF LST * * IF A CONFIGURATION FILE IS PRESENT, READ IT * LDA P3 GET LU SPECIFIER ADA D.100 SUBTRACT 1// SSA IF NEGATIVE JMP STAR GO START PROCESS ADA D.100 SUBTRACT 1// SSA,RSS SKIP IF NOT A FILE NAME JMP COFN ELSE GO READ CON FILE * LDA P3 SET LU OF CONFILE DEVICE ADA D.100 STA OUTCW JSB GTWST GET CORRESPONDING EQUIP TYPE LDB OUTCW SZA,RSS IF ITS DVR00, STB SYSLU RESET SYSTEM LU * TTRD LDB DEC71 WRITE MESSAGE ON TTY JSB REPOR * LDA POIN RESET READ STA PPOIN LU ADDRESS * JSB GTWST GET EQUIP TYPE AGAIN SZA,RSS IF ITS DVR00, JMP TTYRD USE PROMPT READ FOR TTY * * READ CONTINUE * UNL IFZ LST LDA D1 SET SWITCH TO RETURN HERE, STA MODSW FOR CONFILE CONTINUATION. * UNL XIF LST LURD JSB EXECNLH READ CONFILE INTO DEF *+5 CONFILE BUFFER DEF D1 ICODE=1=READ DEF OUTCW RDBUA DEF #RDBF DEF D.80 RSSI RSS * TTYRD JSB TTYIN * STCNT LDA #RDBF UNL IFZ LST STB MCNT SAVE CHARACTER COUNT FOR 'PARSE'. UNL XIF LST CPA ASC#! LOOK FOR "#!" JMP ABUSR FOUND, ABORT USER UNL IFZ LST CPA ASC#M IF THE FIRST CONFILE ENTRY IS "#M", JMP MODFY GO TO MODIFY TIMEOUT/CONTROL VALUES. CPA ASC#S JMP SWCH2 UNL XIF LST CMB STORE COUNT IN LENGTH WORD STB RDLEN * N UNL IFN SKP XIF LST * NOW READY TO INTERPRET CONFILE. * CLA JSB CONFG DECODE DEVICES & OPEN FILES JMP EXIT2 ERROR RETURN * * * CONFIGURE FOR ASCII OR EBCDIC * STAR LDB TIMAD ADB C5 LDB B,I RBR,RBR BIT 2= ASCII/EBCDIC FLAG LDA RSSI SLB CLA USE NOP IF ASCII STA MOD1 MODIFY INSTRUCTIONS STA MOD2 SZA LDA ALF2 ALF,ALF STA MOD3 LDB SYASC SZA LDB SYEBC STB IPRM,I STORE SYNC CHAR LDB CODEX STB PPOIN LDB CODE# STB CNT1 LDB CODTB SETCD LDA PPOIN,I GET CODE (LHW=EBCDIC/RHW=ASCII) MOD3 NOP HAS ALF,ALF IF EBCDIC AND C377 CHAR IS IN RHW STA B,I STORE IN CONTROL WORD TABLE ISZ PPOIN INB ISZ CNT1 JMP SETCD * JSB START SET LU'S JMP EXIT2 ERROR RETURN, ABORT LDB DEC70 WRITE "ON" MESSAGE JSB REPOR JMP INITL GO START BOARDS * SKP * 'FINDL' SEARCHES FOR THE FIRST LU WHICH IS LINKED TO DVR50. * FINDL CLB,INB START WITH LU = 1, STB OUTCW AND SEARCH FOR EQUIP TYPE =50B. JSB EXEC DO 'EXEC' STATUS CALL. DEF *+4 DEF D13I TRAP ERRORS. DEF OUTCW DEF ISTAT JMP NXTLU IGNORE UNASSIGNED LU'S. * LDA ISTAT GET EQT WORD #5. ALF,ALF POSITION TYPE-CODE TO LSB'S. AND C77 ISOLATE THE TYPE-CODE. CPA C50 IF IT IS 50B, THEN THIS IS IT! JMP GOTLU GO TO INITIALIZE THE CONTROL WORD. * NXTLU LDB OUTCW GET THE CURRENT LU NUMBER. INB ADVANCE TO THE NEXT SEQUENTIAL LU. CPB C100 IF ALL LU'S HAVE BEEN EXAMINED IN VAIN, JMP LUERR REPORT THE NON-EXISTENCE OF DVR50! JMP FINDL+1 OTHERWISE, CONTINUE THE SEARCH. * GOTLU LDA OUTCW SET THE CORRECT LU _STA CWD00 INTO THE PROGRAM, JMP CFGLU AND BRANCH BACK INTO PROCESSING. * * ABUSR LDB DEC47 JSB REPOR JMP EXIT2 ABORT * SPC 3 INDA NOP INDIRECT ADDRESS TRACKDOWN ROUTINE. RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDA,I * * * * SKP UNL IFZ LST * TIMEOUT/CONTROL MODIFICATION PROCESSING ROUTINE. * MODFY LDA CH.BL REPLACE THE STA #RDBF #M, STRING LDA C40 WITH LDB RDBUA ASCII INB BLANKS RBL STB BBUFB JSB STRBY * JSB PARSE PARSE THE USER'S PARAMETERS DEF *+4 WHICH CAN BE FOUND DEF #RDBF IN THE INPUT BUFFER, DEF MCNT WHOSE LENGTH IS IN 'MCNT', DEF #WRBF AND PLACE THE RESULT INTO '#WRBF'. LDA #WRBF+32 GET THE PARAMETER COUNT, AND CMA,INA,SZA,RSS FORM A NEGATIVE COUNTER--IF ONLY #M... JMP MODER THEN INFORM THE USER OF HIS ERROR! STA MDCNT SAVE THE NEGATIVE PARAMETER COUNT. * LDA TIMAD GET THE ADDRESS OF THE CURRENT VALUES, LDB TIME AND THE ADDRESS OF THE LOCAL BUFFER. JSB .MVW MOVE THE DEFAULT VALUES DEF C6 INTO THE LOCAL-PROCESSING BUFFER. NOP * DLD #WRBF GET "CODE"(1ST) PARAMETER SZA,RSS IF NOT SPECIFIED, JMP MPAD USE THE ORIGINAL VALUE. CPA D2 IF THE PARSED PARAMETER-TYPE IS ASCII, RAL,SLA SET THE BIT MASK FOR BIT#2, AND SKIP. JMP MODER * IMPROPER PARAMETER: ERROR #48 * CPB "EB" IF THE USER WANTS EBCDIC TRANSLATION, CLB,RSS THEN PREPARE TO CLEAR BIT #2; LDB A ELSE, IT'S ASCII: BIT #2 =1. JSB MODBT GO TO MODIFY THE CONTROL WORD. DEF CTRL * MPAD JSB PCHEK CHECK FOR ADDITIONAL PARAMETERS. DLD #WRBF+4 GET THE "PAD" PARAMETER. SZA,RSS IF N/<OT SPECIFIED JMP MDUP THEN USE THE DEFAULT VALUE. CPA D2 IF THE PARSED-PARAMETER TYPE IS ASCII, JMP *+2 PROCEED WITH BIT MASK SET FOR BIT #1. JMP MODER * IMPROPER PARAMETER: ERROR #48 * CPB "PA" IF THE USER PADDING WITH BLANKS, CLB,RSS PREPARE TO CLEAR BIT #1; ELSE, LDB A USE SET BIT #1 FOR USE OF 'EOM'. JSB MODBT GO TO MODIFY DEF CTRL THE CONTROL WORD. * MDUP JSB PCHEK CHECK FOR NEXT PARAMETER. DLD #WRBF+8 GET "DUPLEX" PARAMETER. SZA,RSS IF NOT SPECIFIED, JMP MRTM USE THE DEFAULT VALUE. CPA D2 IF THE PARSED-PARAMETER TYPE IS ASCII, SLA,RAR SET BIT #0 MASK, AND PROCEED. JMP MODER * IMPORPER PARAMETER: ERROR #48 * CPB "HA" IF THE USER SAYS LINE IS HALF DUPLEX, CLB,RSS THEN PREPARE TO CLEAR BIT #0; ELSE, LDB A SET BIT #0 FOR FULL DUPLEX OPERATION. JSB MODBT GO TO MODIFY DEF CTRL THE CONTROL WORD. MRTM JSB PCHEK CHECK FOR NEXT PARAMETER. DLD #WRBF+12 GET RECEIVE TIMEOUT PARAMETER. SZA,RSS IF NOT SPECIFIED, JMP MXTM USE THE DEFAULT VALUE. JSB TMIN CHECK THE SUPPLIED VALUE DEF MINRC AGAINST THE MINIMUM. DEF RCTM STORE RESULT IN 'RCTM'. * MXTM JSB PCHEK CHECK FOR ANOTHER PARAMETER. DLD #WRBF+16 GET TRANSMIT TIMEOUT PARAMETER. SZA,RSS IF NOT SPECIFIED, JMP MLTM USE THE DEFAULT VALUE. JSB TMIN CHECK THE SUPPLIED VALUE DEF MINXM AGAINST THE MINIMUM. DEF XMTM STORE RESULT IN 'XMTM'. * MLTM JSB PCHEK CHECK FOR ANOTHER ONE. DLD #WRBF+20 GET THE LONG TIMEOUT PARAMETER. SZA,RSS IF NOT SPECIFIED, JMP MTTD USE THE DEFAULT VALUE. JSB TMIN CHECK THE SUPPLIED VALUE DEF MINLT AGAINST THE MINIMUM. DEF LGTM STORE RE}SULT IN 'LGTM'. * MTTD JSB PCHEK CHECK FOR NEXT PARAMETER. DLD #WRBF+24 GET THE TTD/WACK PARAMETER. SZA,RSS IF NOT SPECIFIED, JMP MCTL USE THE DEFAULT VALUE. JSB TMIN CHECK THE SUPPLIED VALUE DEF MINTD AGAINST THE MINIMUM. DEF TDWK STORE RESULT IN 'TDWK'. * MCTL JSB PCHEK CHECK FOR THE LAST PARAMETER DLD #WRBF+28 GET THE CONTROL MODE TIMELIMIT SZA,RSS IF NOT SPECIFIED, JMP MODEX USE THE DEFAULT VALUE CPA D1 IF PARAMETER NOT NUMERIC SSB OR IF NEGATIVE, JMP MODER THE PARAMETER IS INCORRECT! LDA 1 MPY C3 CONVERT TO LOOP COUNTER CMA,INA AND COMPLEMENT STA CMTM SAVE FINAL VALUE * MODEX LDA XMTM GET THE TRANSMIT TIMEOUT VALUE. CMA,INA MAKE IT POSITIVE. ADA RCTM ADD THE NEGATIVE RECEIVE TIMEOUT. SSA,RSS IF RECEIVE T.O. IS <= TRANSMIT T.O., JMP MODER THEN THE VALUES ARE INCORRECT! * LDA TIME SOURCE ADDRESS = LOCAL ARRAY. LDB TIMAD DESTINATION = EXTERNAL ARRAY. JSB .MVW MOVE THE MODIFIED TIMEOUT AND DEF C6 CONTROL VALUES TO EXTERNAL STORAGE. NOP * MEXIT LDA RTNDF GET THE RETURN-TABLE POINTER. ADA MODSW COMPUTE THE RETURN ADDRESS, AND JMP A,I RETURN TO THE SPECIFIED PROCESS. * RTNDF DEF *+1,I RETURN FOR NEXT INPUT FROM: DEF TTRD CONSOLE (MODSW=0) DEF LURD SPECIFIED LU (MODSW=1) DEF FLRD CONFIG. FILE (MODSW=2) * MODER LDB DEC48 REPORT AN ERROR IN THE JSB REPOR TIMEOUT & CONTROL PARAMETERS. JMP MEXIT EXIT: OLD VALUES INTACT! * * BIT MODIFICATION SUBROUTINE * * CALLING SEQUENCE: LDA MASK 1'S IN BIT-POSITIONS TO BE REFERENCED. * LDB DATA 1'S/0'S IN BIT-POSITIONS TO BE MODIFIED. * JSB MODBT CHANGE ONLY MASKED BITS. * DEF WORD ADDRESS OF WORD TO BE MODIFIED. * * MODBT NOP STA MSKSV SAVE THE MASK, TEMPORARILY. LDA MODBT,I GET ADDRESS OF WORD TO BE MODIFIED. STA MPNTR SAVE THE POINTER. ISZ MODBT ADVANCE THE EXIT POINTER. LDA MSKSV GET THE BIT MASK AGAIN. CMA PREPARE TO EXCLUDE THE OLD BITS. AND MPNTR,I REMOVE THE OLD BITS. IOR B INCLUDE THE NEW ONES. STA MPNTR,I RESTORE THE MODIFIED WORD. JMP MODBT,I RETURN (P+2). * * PARAMETER CHECKING ROUTINE. * PCHEK NOP ISZ MDCNT DECREMENT THE PARAMETER COUNTER. JMP PCHEK,I MORE TO PROCESS--RETURN. JMP MODEX ALL DONE--WRAP IT UP. * * MINIMUM TIMEOUT VALUE VERIFICATION ROUTINE. * * CALLING SEQUENCE: LDA TYPE PARSED PARAMETER TYPE (1, ELSE ERROR). * LDB VALUE PARAMETER VALUE ( POSITIVE, <=32767 ). * JSB TMIN * DEF MINVL MINIMUM VALUE (NEGATIVE). * DEF STOR ADDRESS FOR STORAGE OF NEGATED VALUE. * TMIN NOP CPA D1 IF PARSED-PARAMETER TYPE IS NUMERIC, JMP *+2 THEN CONTINUE; ELSE, JMP MODER THE PARAMETER TYPE IS INCORRECT! LDA TMIN,I GET THE MINIMUM VALUE ADDRESS. ISZ TMIN ADVANCE TO STORAGE POINTER. LDA A,I GET THE MINIMUM VALUE (NEGATIVE). SSA,RSS IF IT'S NOT NEGATIVE, JMP MODER INDICATE AN ERROR! ADA B IF THE SUPPLIED VALUE SSA IS LESS THAN THE MINIMUM, JMP MODER INDICATE THE ERROR! LDA TMIN,I GET THE STORAGE ADDRESS. ISZ TMIN ADVANCE THE EXIT POINTER. CMB,INB NEGATE THE SUPPLIED VALUE, STB A,I AND RETURN IT TO SPECIFIED LOC'N. JMP TMIN,I RETURN. SKP * * ENTRY TO SWITCH ROUTINE FOR CONFIGURATION INPUT * SWCH2 JSB SWTCH SZA ^ GOOD COMMAND? JMP MODER NO, REPORT ERROR JMP MEXIT YEP, CONTINUE WITH NEXT RECORD * * * #S COMMAND PROCESSOR TO SWITCH DIAGNOSTICS AND TRACE CAPABILITY * ON AND OFF * SWTCH NOP REGISTERS MEANINGLESS JSB PARSE INTERPRET USER STRING DEF *+4 DEF #RDBF DEF MCNT CHAR COUNT DEF #WRBF RESULTANT * LDA #WRBF+32 FETCH # OF PARAMS CPA C3 EQUAL TO 3? RSS JMP SWER NO, SWITCH ERROR! * LDA #WRBF+5 FETCH 2ND PARAM (1ST=#S) AND M1774 STRIP TO UPPER BYTE CLB CPA "D" LDB DFGAD POINT TO DIAGNOSTIC FLAG CPA "T" LDB TFGAD POINT TO TRACE FLAG SZB,RSS EITHER D OR T? JMP SWER NO, SWITCH ERROR * STB SWAD SAVE LOC TO CHANGE LDA #WRBF+9 FETCH 3RD PARAM CLB,CLE CPA "ON" CCB,CCE CPA "OF" CCE SEZ,RSS ON OR OFF? JMP SWER NOPE, ERROR AGAIN STB SWAD,I SET APPROPRIATE SWITCH CLA,RSS EXIT WITH A=0 IF GOOD SWER CCA ELSE A=-1 JMP SWTCH,I * "D" OCT 042000 "T" OCT 052000 "ON" ASC 1,ON "OF" ASC 1,OF SWAD NOP DFGAD DEF DIAGF TFGAD DEF #TFLG SKP UNL XIF LST SKP **************************************************************************** * THESE SUBROUTINES INTERPRET A CONFIGURATION DATA RECORD, * AND SELECT THE APPROPRIATE I/O PROCESSES. UNL IFZ LST * THE ROUTINE 'IOPEN' IS CALLED TO OPEN/CREATE ANY FILE, IF SPECIFIED. UNL XIF LST **************************************************************************** * CONFG NOP ENTRY TO CONFIGURE I/O STA P3 INITIALIZE LU POINTERS STA P4 STA P5 LDA C.3 INITIALIZE THE STREAM-COUNTER STA P2 FOR THREE PARAMETERS. LDA POIN RESET PARAMETER  STA PPOIN POINTERS LDA RDBUA GET BUFFER ADDRESS RAL SHIFT LEFT FOR CHARACTER ADDRESS STA BBUFA INITIALIZE GET BYTE ROUTINE BUMP EQU * UNL IFZ LST LDB OPNA GET ADDRESS OF NAME BUFFER LDA CH.BL INITIALIZE STA B,I THE INB NAME STA B,I BUFFER INB WITH STA B,I BLANKS. CLA CLEAR THE STA NEGFL NEGATIVE SUBPARAMETER FLAG, STA TYPFL AND THE SUBPARAMETER TYPE-FLAG. STA ISEC SET FOR NO SECURITY CODE. STA ICR ESTABLISH DEFAULT CARTRIDGE NUMBER. UNL XIF LST * * GET THE FIRST CHARACTER, IGNORING BLANKS. * JSB GETCR GET THE CHARACTER. JMP NEXT COMMA: END OF PARAMETER. JMP NEREX COLON: SUBPARAM. INVALID AT THIS POINT. STB PPOIN,I CLEAR OLD DEVICE & NUMERIC ACCUMULATOR. SEZ,RSS ALPHA OR NUMERIC CHARACTER? UNL IFZ LST JMP FILNM ALPHA--PROCESS A FILE NAME. UNL XIF IFN LST JMP NEREX ALPHA--FILES INVALID FOR NON-FMP! UNL XIF LST JSB NUMBR NUMERIC--PROCESS AN LU REFERENCE. JSB GETCR GET THE NEXT NUMBER--IF ANY. JMP NEXT COMMA: END OF LU SPECIFICATION. JMP NEREX COLON: INVALID FOR LU SPEC. SEZ,RSS IF IT IS NOT NUMERIC, JMP NEREX THEN THE LU SPEC. IS IN ERROR! JSB NUMBR COMPLETE THE LU SPECIFICATION. JSB GETCR SEARCH FOR THE DELIMITER. JMP NEXT FOUND: PROCESS THE NEXT PARAMETER. JMP NEREX COLON IS UNACCEPTABLE! JMP NEREX SO IS ANYTHING, BUT A COMMA! * UNL IFZ LST FILNM LDB OPNA FORM A RBL BYTE ADDRESS STB BBUFB FOR THE FILE NAME. LDB C.7 ESTABLISH COUNTER FOR STB P1 MAXIMUM FILE-NAME SIZE. * FLOOP JSB STRBY ADD THE CHARACTER TO THE NAME BUFFER. JSB GETCR GET THE NEXT CHARACTER. JMP FLOPN COMMA: COMPLETE THE FILE PROCESSING. JMP SUBP COLON: PROCESS SUBPARAMETERS. ISZ P1 ANY MORE CHARACTERS ACCEPTABLE? JMP FLOOP YES, CONTINUE FILE-NAME PROCESSING. JMP NEREX NO--TOO MANY CHARACTERS IN NAME! * SUBP LDA C.6 INITIALIZE FOR 1RST PARAMETER SIZE, LDB D1 AND ESTABLISH IT'S REFERENCE NUMBER. DST CHCNT SAVE THE CONTROL VALUES. NXTCH JSB GETCR GET THE NEXT CHARACTER. JMP ENDSP COMMA/EOR: END OF SUBPARAMETERS. JMP ENDSP COLON: TERMINATE THE SUBPARAMETER. ISZ CHCNT HAVE ALL CHARACTERS BEEN PROCESSED? JMP *+2 NO--CONTINUE PROCESSING. JMP ENDSP YES--TERMINATE THE SUBPARAMETER. CCB,SEZ,RSS ALPHA OR NUMERIC ? JMP NEGCK ALPHA--GO TO CHECK FOR '-'. * LDB TYPFL GET THE CURRENT SUBPARAMETER TYPE. ERB,BLS POSITION ALPHA(LSB) TO , FOR TEST. SEZ,CLE IF WE WERE PROCESSING AN ALPHA SUBP., JMP ASTOR THEN PROCESS THIS NUMBER AS ASCII. STB TYPFL SET THE SUBP. TYPE = NUMERIC (BIT#15). JSB NUMBR GO TO PROCESS THE NUMBER. JMP NXTCH LOOK FOR CONTINUATION/TERMINATION. * NEGCK CPA MINUS IS THE CHARACTER AN ASCII '-' ? ALF,SLA,ALF YES--POSITION TO UPPER BYTE, & SKIP. JMP ALCHK NO--CONTINUE ALPHA PROCESSING. STA NEGFL SET THE NEGATIVE SUBP. FLAG. ADB CHCNT RESET THE MAXIMUM STB CHCNT ALLOWABLE CHARACTER COUNT. JMP NXTCH LOOK FOR CONTINUATION/TERMINATION. * ALCHK LDB TYPFL GET THE SUBP. TYPE-FLAG. SSB IF PREVIOUS CHARACTERS WERE NUMERIC, JMP NEREX THEN AN ALPHA CHARACTER IS INCORRECT! CLB,INB SET THE SUBPARAMETER TYPE-FLAG STB TYPFL FOR AN ALPHA SUBPARAMETER (LSB=1). * AS*TOR LDB PPOIN,I GET THE PREVIOUS CHARACTER--IF ANY. SZB,RSS SKIP, IF ONE HAS ALREADY BEEN SAVED; ADB NEGFL ELSE, CHECK FOR A SAVED 'MINUS'. SZB,RSS IF NOTHING HAS BEEN SAVED, ALF,ALF POSITION NEW ONE TO UPPER BYTE. IOR B INCLUDE SAVED CHAR., IF THIS IS SECOND. STA PPOIN,I SAVE THE RESULT. SZB,RSS IF THIS IS FIRST CHARACTER, JMP NXTCH THEN GO TO GET THE NEXT ONE--IF ANY; JMP SUBSV ELSE, SECURITY IS COMPLETE--SAVE IT. * SKP ENDSP LDA PPOIN,I GET THE SUBPARAMETER VALUE. LDB TYPFL GET THE SUBPARAMETER TYPE. SZB,RSS IF THE PARAMETER HAS BEEN DEFAULTED, JMP SUBSV GO TO MAKE IT A ZERO. SSB,RSS IF THE TYPE IS ALPHA, JMP PADCK GO TO SEE IF PADDING IS NEEDED; LDB NEGFL ELSE, GET THE NEGATIVE SUBP. FLAG. SZB IF THE FLAG IS SET, CMA,INA THEN NEGATE THE SUBPARAMETER VALUE, JMP SUBSV AND GO TO SAVE THE RESULT. * PADCK AND C377 ISOLATE THE LOWER BYTE. SZA,RSS IF IT IS NULL, LDA C40 THEN PAD IT WITH A BLANK. IOR PPOIN,I FORM COMPLETE ASCII PARAMETER. * SUBSV LDB SUBDF GET THE SUBPARAMETER POINTER. ADB SUBCN COMPUTE THE CORRECT SUBP. ADDRESS. STA B,I CONFIGURE THE SUBPARAMETER. CLB PREPARE TO CLEAR THE FLAGS. LDA LASTC GET THE LAST CHARACTER PROCESSED. CPA CH.CO IF IT WAS A COMMA, THEN JMP FLOPN COMPLETE SUBPARAMETER PROCESSING. CPA COLON IF IT WAS A COLON, THEN JMP NXSUB PREPARE FOR THE NEXT SUBPARAMETER. * DELIM JSB GETCR SEARCH FOR THE NEXT DELIMITER. JMP FLOPN FOUND A COMMA OR END-OF-RECORD. JMP NXSUB FOUND A COLON--PROCESS NEXT SUBPARAMETER. JMP DELIM CONTINUE THE SEARCH. * NXSUB STB NEGFL CLEAR FLAGS, ETC. STB TYPFL FOR THE NEXT STB PPOIN,I cSUBPARAMETER--IF ANY. * LDA C.6 REMAINING SUBPARAMETERS = 6 CHARS. LDB SUBCN GET THE CURRENT SUBP. INDICATOR. INB ADVANCE TO THE NEXT ONE. CPB MAXSP HAVE WE PROCESSED ALL SUBPARAMETERS? JMP DELIM YES--IGNORE ANYTHING ELSE. JMP SUBP+2 NO--PROCESS THE NEXT ONE. * FLOPN JSB IOPEN OPEN/CREATE THE SPECIFIED FILE. JMP NEXT GO TO PROCESS THE NEXT PARAMETER. * UNL XIF LST NUMBR NOP NUMERIC PARAMETER PROCESSING. AND D15 ISOLATE THE PERTINENT BITS. LDB PPOIN,I GET THE PREVIOUS VALUE. RBL MULTIPLY ADA B BY TEN RBL,RBL AND ADD ADA B THE NEW VALUE. SSA IF THE VALUE IS TOO LARGE, JMP NEREX THEN REPORT THE ERROR! STA PPOIN,I SAVE THE RESULT. JMP NUMBR,I GO BACK FOR MORE--IF ANY. * NEREX LDB DEC43 REPORT JSB REPOR CONFIGURATION ERROR (#43)! JMP CONFG,I TAKE THE ERROR EXIT. * UNL IFZ LST SUBDF DEF * SUBPARAMETER STORAGE POINTER. ISEC NOP FILE SECURITY CODE. ICR NOP CARTRIDGE REFERENCE NUMBER. NEGFL NOP NEGATIVE SUBPARAMETER FLAG. TYPFL NOP SUBP. TYPE (BIT#15=NUMERIC, BIT#1=ALPHA). CHCNT NOP SUBPARAMETER CHARACTER COUNTER. SUBCN NOP SUBPARAMETER COUNTER. UNL XIF LST LASTC NOP LAST CHARACTER. * * 'GETCR' GETS THE NEXT CHARACTER FROM THE READ BUFFER. BLANKS ARE IGNORED, * BUT COUNTED. NOTE: 'RDLEN' INITIALIZED = -(CHARACTER COUNT +1). * * JSB GETCR * < P+1 > COMMA DETECTED (A=',' B=0); OR END OF RECORD (A&B =0) * < P+2 > COLON DETECTED (A=':' B=0) * < P+3 > A=CHARACTER(LOWER BYTE) B=0: ALPHA:=0; NUMERIC:=1. * GETCR NOP CLA PREPARE FOR END-OF-RECORD EXIT. LDB RDLEN GET THE REMAINING CHARACTER COUNT. ]INB,SZB,RSS IF NONE REMAIN, JMP GETCR,I TAKE THE END-OF-RECORD EXIT. STB RDLEN SAVE REMAINING CHARACTER COUNT. JSB GETBY GET THE NEXT CHARACTER. STA LASTC SAVE IT FOR LATER INSPECTION. CLB,CLE RETURN TYPE=ALPHA FOR DELIMITERS. CPA C40 IF IT'S A BLANK, JMP GETCR+1 IGNORE AND GET THE NEXT ONE. CPA CH.CO IS IT A COMMA? JMP GETCR,I YES--TAKE COMMA EXIT (P+1). ISZ GETCR PREPARE FOR COLON EXIT(P+2). CPA COLON IS IT A COLON? JMP GETCR,I YES--TAKE THE COLON EXIT. ISZ GETCR PREPARE FOR DATA-CHAR. EXIT(P+3). LDB A TEST DATA-TYPE IN . ADB C.60 SUBTRACT 60B. CLE,SSB IF IT'S <60B, CME,RSS TAKE THE ALPHA RETURN =0. ADB C.12 SUBTRACT 12B FOR NUMERIC TEST. CLB,CME IF IT'S NUMERIC (<72B) =1. JMP GETCR,I RETURN WITH =CHAR & =TYPE. * NEXT ISZ PPOIN BUMP TO NEXT LU ISZ P2 BUMP LU COUNT & TEST JMP BUMP DO NEXT LU * ISZ CONFG BUMP TO GOOD RETURN JMP CONFG,I EXIT CONFIGURATION * UNL IFZ LST * ER3EX JSB FERR REPORT FILE ERROR JMP CONFG,I AND TAKE ERROR EXIT. UNL XIF LST * * * SET UP STREAM LU'S AND PROCESS POINTERS. LU VALIDITY IS CHECKED. * ON ENTRY, P3,P4,P5 ARE SET: NEG-IGNORE, ZERO-DEFAULT, POS-SET UP LU. * NOTE: TRANSFER OF COMMAND (#C,#T) FROM FILE TO LU CLOSES THE FILE. * START NOP LDA RDLK SZA,RSS JMP NLOCK SKIP IF INPUT LU NOT LOCKED, JSB LURQ ELSE UNLOCK INPUT LU. DEF *+4 DEF ZERO DEF RDLU DEF C1 CLA RESET INPUT LOCK FLAG STA RDLK NLOCK LDA P3 GET INPUT-STREAM SPECIFICATION. SSA IF IT'S NEGATIVE (FILE/IGNORE), JMP RLUOK GO TO PROCESS THE LIST-STREAM. * SZA,RSS IF IT'S 0, T LDA C5 USE THE DEFAULT LU #5. JSB LUCHK VERIFY THE LU'S VALIDITY. STA RDLU SAVE THE NEW INPUT-STREAM LU. LDA IORDA = NEW READ-PROCESS ADDRESS. UNL IFZ LST CPA IORDP IF OLD INPUT-STREAM WAS VIA 'EXEC', JMP NRFIL THEN NO NEED TO CLOSE INPUT FILE. UNL XIF LST STA IORDP SET NEW INPUT-STREAM PROCESS ADDRESS. UNL IFZ LST * JSB CLOSE CLOSE DEF *+2 THE FORMER DEF #RDCB INPUT-STREAM FILE. * UNL XIF LST NRFIL JSB GTWST GET THE DEVICE TYPE-CODE. LDB RDLU SZA,RSS IF ITS AN INTERACTIVE DEVICE JMP SYSET RESET THE SYSTEM LU JSB LURQ ELSE LOCK THE INPUT LU. DEF *+4 DEF C1 DEF RDLU DEF C1 ISZ RDLK SET INPUT LOCK FLAG. RSS SYSET STB SYSLU * RLUOK LDA P4 GET LIST-STREAM SPECIFICATION. SSA IF IT'S NEGATIVE, JMP LLUOK GO TO PROCESS THE PUNCH-STREAM. * SZA,RSS IF IT'S ZERO, LDA C6 SUBSTITUTE LU=6 JSB LUCHK VERIFY THE LU'S VALIDITY. STA LSTLU SAVE THE NEW LIST-STREAM LU. STA USELS INDICATE: DEVICE NOT YET USED. LDA IOLSA = NEW LIST-PROCESS ADDRESS. UNL IFZ LST CPA IOLSP IF OLD LIST-STREAM WAS VIA 'EXEC', JMP LLUOK THEN NO NEED TO CLOSE LIST FILE. UNL XIF LST STA IOLSP SET NEW LIST-STREAM PROCESS ADDRESS. UNL IFZ LST * JSB CLOSE CLOSE DEF *+2 THE FORMER DEF #LDCB LIST-STREAM FILE. UNL XIF LST * SKP LLUOK LDA P5 GET THE PUNCH-STREAM SPECIFICATION. SSA IF IT'S NEGATIVE, JMP PLUOK COMPLETE THE PROCESS. * SZA,RSS IF IT'S ZERO, LDA C4 `NLH SUBSTITUTE LU=4 JSB LUCHK VERIFY THE LU'S VALIDITY. STA PUNLU SAVE NEW PUNCH-STREAM LU. STA USEPU INDICATE: DEVICE NOT YET USED. LDA IOPUA = NEW PUNCH-PROCESS ADDRESS. UNL IFZ LST CPA IOPUP IF OLD PUNCH-STREAM WAS VIA 'EXEC', JMP PLUOK THEN NO NEED TO CLOSE PUNCH FILE. UNL XIF LST STA IOPUP SET NEW PUNCH-STREAM PROCESS ADDRESS. UNL IFZ LST * JSB CLOSE CLOSE DEF *+2 THE FORMER DEF #PDCB PUNCH-STREAM FILE. * UNL XIF LST PLUOK ISZ START INDICATE GOOD RETURN.URN JMP START,I * +N* LUCHK NOP ENTRY TO VERIFY EQUIP TYPE <30 STA OUTCW GET EQT TYPE JSB GTWST CPA D1 IF ITS PAPER TAPE JMP OPTRP OPEN DEVICE ADA C.30 SSA IF ITS BAD, JMP LUOKX LDB DEC44 REPORT ERROR AND JSB REPOR JMP START,I DO P+1 RETURN * * OPTRP LDA C700 LOAD LEADER SKIP CONTROL WORD JSB GOCON ISSUE CONTROL REQUEST * LUOKX LDA OUTCW ELSE RESTORE LU JMP LUCHK,I AND EXIT * HALT1 NOP ENTRY TO HALT THE COMPUTER JSB $LIBR CALL LIBR NOP FORMAT IS PRIVILEDGED HLT 27B HALT JSB $LIBX CALL LIBX DEF HALT1 EXIT ADDRESS * * *************************************************************************** SKP **************************************************************************** * THIS SECTION ESTABLISHES THE COMMUNICATIONS LINE, AND TRANSFERS * CONTROL TO THE APPROPRIATE PROCESS. IF LOCAL DIAL IS * SPECIFIED, THE PROGRAM, #DIAL WILL BE SCHEDULED WITH WAIT. **************************************************************************** * * EXAMINE NEED FOR CORE-LOCK AND/OR MAP SWITCHING (DMS). * INITL CLA PREPARE FOR UNDEFINED: $OPSY (RTE-C). LDA $OPSY GET THE OP-SYSTEM SPECIFICATION. AND D2 ISOLATE DMS(DYNAMIC MAPPING) BIT(#1), STA B AND TRANSFER THE DMS FLAG TO . CMB,INB,SZB,RSS NEGATE AND SUBTRACT ONE: LDB C.6 FORCE LARGE VALUE FOR NON-DMS SYSTEMS. INB =-1: DMS; = -5: NON-DMS SYSTEM. LDA XEQT GET I.D. SEGMENT ADDRESS. ADA D14 POINT TO THE FIFTEENTH ENTRY. LDA A,I GET THE ENTRY. AND D15 ISOLATE THE PROGRAM TYPE-CODE (RTE-C=1). CPA D2 FOREGROUND DISC RESIDENT? JMP BSC? YES--CHECK LOCATION OF #BSC. CPA C3 BACKGROUND DISC RESIDENT? JMP BSC? YES--CHECK LOCATION OF #BSC. JMP BUF? #BSC RESIDENT: NO MAP SWITCHING--YET. * BSC? LDA RTORG GET ORIGIN OF REAL TIME AREA. CMA,INA IF #BSC RESIDES ADA BSCAD BELOW THIS AREA, THEN SSA IT IS IN SSGA OR THE RESIDENT LIBRARY, JMP BUF? SO NO NEED TO LOCK CORE. * INB =0: DMS; = -4: NON-DMS SYSTEM. JSB EXEC #BSC IS IN "SWAP TERRITORY", DEF BUF? SO LOCK UP DEF D22 THE PARTITION DEF D1 TO AVOID A CATASTROPHE! * BUF? CPB C.1 IF = -1, THEN JMP *+2 CONTINUE DMS PROCESSING; JMP SETSW ELSE, SET THE MAP SWITCH, NOW. * LDA RTORG IF THE #COMN BUFFERS CMA,INA ARE LOCATED IN THE ADA COMBA SUBSYSTEM GLOBAL AREA, SSA,RSS THEN SET THE SWITCH = -1; ELSE, INB =0: MAP SWITCHING REQUIRED. SETSW STB MAPSW SET MAP-SWITCHING PARAMETER FOR DVR50. * * NOTE: WILL BE SET AS FOLLOWS: 1. NON-DMS =-(5,4), SPECIFYING * THAT NO MAP INSTRUCTIONS ARE TO BE EXECUTED. 2. DMS =-1 (#BSC * AND #COMN ARE IN SYSTEM MAP) USE DMS STATUS INSTRUCTIONS, ONLY. 3. * DMS =0 (EITHER/BOTH #BSC & #COMN NOT IN SYSTEM MAP) SWITCH MAPS. * **************************************************************************** SKP * INITIALIZE THE DRIVER AND SAVE THE ID PARAMETER * LDB D.16 SET REPEAT COUNTER TO -16 STB WAITC WAIT1 ISZ WAITC IF LESS THAN 15 RETRIES, JMP *+2 ALLOW ANOTHER INITIALIZATION ATTEMPT JMP DVRUN ELSE REPORT DVR50 UNAVAILABLE. LDB DEC50 REPORT INITIAL CALL JSB DIARP * JSB EXEC CALL EXEC TO INITIALIZE THE DRIVER DEF *+4 DEF C3 CONTROL REQUEST DEF CWD37 INITIALIZATION REQUEST DEF IPRM INITIALIZATION PARAMETER BUFFER * * ON RETURN, A=STATUS, B=SECURITY CODE * STB IDPRM SAVE SECURITY CODE SZB,RSS REQUEST ACCEPTED? JMP WAIT1 NO--WAIT, THEN TRY AGAIN. * LDA ASFLG GET ANSWER FLAG SSA ANSWER? JMP A.ANS YES,GO TO AUTO ANSWER SECTION * * DIAL LINE * LDB DEC51 JSB DIARP REPORT REQUEST ISSUED JSB EXEC NOW PROCEED WITH DIALING DEF *+5 SCHEDULE PROGRAM #DIAL DEF D9 WITH WAIT DEF #DIAL DEF SYSLU PARAMETER #1 IS SYSTEM LU DEF ZERO #2 =0: MAKE CONNECTION. * * SET UP HARDWARE TO LOOK FOR SUCCESSFUL CONNECTION * LDB DEC52 JSB DIARP REPORT REQUEST ISSUED * LDB ACW34 DO HANDSHAKE REQUEST JSB LINCN JMP REDI. ADDRESS OF FAILURE SERVICE-ROUTINE * LDA INFLG INPUT AVAILABLE? SSA,RSS JMP X.EOT NO, LISTEN FOR A WHILE, THEN DISCONNECT JMP XMITP YES, GO PROCESS THE FIRST CARD. * * PRINT ERROR MESSAGE (NO CONTACT) & RESTART DIAL OPERATIONS * REDI. LDB DEC41 JSB REPOR JMP EXSTA ABORT SKP * * WAIT2 ISZ WAITC BUMP AND TEST REPEAT COUNT JMP A.ANS GO AHEAD AND TRY IT AGAIN. DVRUN LDB DEC45 REPORT "DVR50 UNAVAILABLE". JSB REPOR JMP EXSTA AND ABORT * * THIS SECTION PERFORMS AUTO ANSWER * A.ANS LDB DEC67 REPORT REQUEST ISSUED JSB DIARP * LDB ACW33 DO AUTO ANSWER JSB LINCN * JMP BRKCK REQUEST REJECT, CHECK FOR A BREAK. LDA RCVFL GET STATE FLAG SSA,RSS ARE WE IN RECEIVE MODE? JMP BRKCK NO, TEST FOR OPERATOR REQUESTED BREAK STA RVIFL YES, SET RVI FLAG FOR AUTO ANSWER JMP RECVP GO TO RECEIVE PROCESSOR * BRKCK EQU * CHECK FOR OPERATOR BREAK REQUEST UNL IFZ LST JS"B IFBRK CHECK FOR OPERATOR BREAK REQUEST DEF *+1 UNL XIF IFN LST JSB #INGT UNL XIF LST SSA,RSS TEST FOR BREAK REQUEST. JMP WAIT2 NONE: DO AUTO ANSWER AGAIN. LDA INFLG BREAK: GET INPUT-AVAILABLE FLAG. SSA IF INPUT IS AVAILABLE, JMP XMITP GO TO PROCESS INPUT STREAM; JMP EXIT ELSE GO TO TERMINATION. * *************************************************************************** SKP *************************************************************************** * * THIS IS THE BEGINNING OF THE TRANSMIT PROCESS. * IT IS ENTERED AFTER A SUCCESSFUL HANDSHAKE * OR SUCCESSFUL RECEIVE TO SEND CALL. * * THE PROCESS: 1. READ A RECORD * 2. IF THERE IS ROOM, PUT IT IN BUFFER, AND REPEAT 1 * 3. IF THERE IS NO ROOM, TRANSMIT THE BUFFER, AND * 4. GO TO 1. * 5. IF AN EOF IS READ, SEND AN EOT,AND EXIT TO * THE APPROPRIATE PROCESS. * **************************************************************************** * XMITP CLA STA RVIFL RESET RVI AND EOT FLAGS STA EOTXM RSET LDA COMBA YES, RESET COMM BUFFER RAL MULTIPLY BY TWO STA BBUFB STORE IN PUT ROUTINE LDA RDBUA RESET I/O BUFFER START ADDRESS RAL STA BBUFA LDA D.400 GET LENGTH OF BUFFER STA WRCNT SET CHAR COUNTER LDA IOBFL GET IO BUFFER FLAG SSA IF DATA IS IN THE BUFFER, JMP REBID YES. GO CHECK IF WE HAVE LINE. RVITS LDA RVIFL GET RVI FLAG SSA RVI FLAG SET? JMP EOTST YES GO DO TURN-AROUND JSB IORDP,I GO READ CARD * * ROUTINE RETURNS CARD IN BUFFER WITH ADDRESS GET * INTO GETBYTE ROUTINE, AND CHARACTER COUNT(-)IN CNT2 * IF EOF WAS READ, COUNT = ZERO. EM IS ON END OF BUFFER * AND IOBFL IS SET NEGATIVE * LDA CNT2 GET CHARACTER COUNT SZA,RSS COUNT = 0 (EOF) JMP EOTS1 YES GO PROCESS LDA WRCNT GET COMM BUF COUNT CPA D.400 EQUAL TO -400? (EMPTY?) JMP REBID YES. GO CHECK IF WE HAVE THE LINE ADA D8 NO MAKE AVAILABLE COUNT + LESS 8 CMA,INA ADA CNT2 SUBTRACT NEW CHARACTER COUNT SSA WILL NEW RECORD FIT IN BUFFER? JMP ETBPT NO. GO PUT ETB IN BUFF & XMIT LDA ITB YES. GET ITB CHAR JSB STRBY PUT IT IN THE BUFFER ISZ WRCNT BUMP COUNT JMP STXST GO PROCESS DATA * SKP * REBID LDA XMTFL SSA IF ALREADY IS XMIT MODE, JMP STXST BYPASS LINE BID. LDA RCVFL SSA JMP BRNCH LDB DEC57 JSB DIARP REPORT: RECEIVE-TO-SEND LDB ACW35 JSB LINCN REQUEST TRANSMIT LINE MODE. JMP REDI. ERROR WAS DETECTED! * LDA XMTFL IF TRANSMIT MODE ACHIEVED, SSA,RSS THEN SKIP TO SEND THE DATA; JMP BRNCH ELSE DETERMINE THE NEXT MOVE. STXST LDA CNT2 GET CHARACTER COUNT (NEW BUFFER) ADA C.2 BUMP FOR STX AND ITB LDB TRFLG GET TRANS FLAG SZB,RSS IF TRANSPARENT MODE, ADA C.1 BUMP COUNT JSB PUTWD PUT LENGTH WORD INTO BUFFER * LDA TRFLG GET TRANSPARENCY FLAG SZA IF NON TRANSPAR, JMP *+4 FORGET DLE LDA DLE OTHERWISE, GET DLE, JSB STRBY AND PUT IT IN BUFFER ISZ WRCNT AND BUMP COUNT * LDA STX LOAD STX JSB STRBY PUT CHAR IN BUFFER ISZ WRCNT BUMP COUNT TRSFR JSB GETBY GET CHARACTER * SKP * * THIS ROUTINE TRANSL$ATES XMIT DATA-CHARACTERS FROM * INTERNAL HP-ASCII CODE TO THE USER-SPECIFIED LINE CODE: * EITHER EBCDIC, OR ASCII WITH ODD PARITY. * LDB TRFLG GET INPUT TRANSLATE FLAG SZB,RSS TRANSLATE CHARACTER JMP STFCR EXIT ROUTINE * AND C177 MASK OF EXTRA BITS MOD1 NOP RSS HERE IF EBCDIC JMP TRASC DO ASCII TRANSLATION CLE,ERA FIND RESULT FROM TABLE, OR ADA TABLE LDA A,I SEZ,RSS ALF2 ALF,ALF AND C377 JMP STFCR TRASC LDB C.7 SET COUNTER TO -7 STB TRAN2 CMB,INB INITIALIZE PARITY TO ODD RAL RAR,SLA TEST BIT AND IF SET INB BUMP PARITY ISZ TRAN2 IF MORE BITS, JMP *-3 DO THEM ERB ELSE ISOLATE PARITY BIT RAR,ERA AND PUT IT INTO DATA ALF,ALF REPOSITION RESULT STFCR JSB STRBY PUT CHAR IN XMIT BUFF ISZ WRCNT BUMP LINE COUNT ISZ CNT2 BUMP &TEST INPUT COUNT JMP TRSFR GO TRANSFER NEXT CHARACTER CLA SET A= 0 STA IOBFL CLEAR I/O BUFFER FLAG JMP RVITS GO CHECK FOR RVI & DO NEXT RCD * * SKP *************************************************************************** * * GENERAL STORAGE, AND CONSTANTS * *************************************************************************** * A EQU 0 B EQU 1 EQTA EQU 1650B DRT EQU 1652B XEQT EQU 1717B RTORG EQU 1746B BPA1 EQU 1742B * LISFL NOP RECCT NOP ACWX NOP RECFG NOP BRKFL NOP EOTFL NOP M1774 OCT 177400 FCRDF NOP FCDRD NOP ACW27 DEF CWD27 ACW30 DEF CWD30 ACW31 DEF CWD31 ACW32 DEF CWD32 ACW33 DEF CWD33 ACW34 DEF CWD34 ACW35 DEF CWD35 ACW36 DEF CWD36 * POIN DEF P3 WRBFA DEF #WRBF WAITB NOP WAITC NOP * XMTFL NOP RCVFL NOP OUTCW NOP * 'PROMP OCT 3443,57400 BELL,#,LEFT ARROW,NULL * PPOIN NOP CNT3 NOP * RDLEN NOP UNL IFZ LST OPNA DEF OPNAM OPNAM BSS 3 UNL XIF LST XPRFL NOP * IORDA DEF IORDL READ I/O IOLSA DEF IOLSL WRITE I/O IOPUA DEF IOPUL PUNCH I/O * IORDP DEF IORDL READ PROCESS POINTER IOLSP DEF IOLSL LIST PROCESSER POINTER IOPUP DEF IOPUL PUNCH PROCESS POINTER IODRT DEF * BASE OF PROCESS TABLE IOUTP DEF IOLSL POINTER FOR OUTPUT STREAM PROCESSING RDLU NOP RDLK NOP * SYSLU NOP HTBUW NOP P1 NOP P2 NOP P3 NOP P4 NOP P5 NOP P1ADD DEF P1 INFLG NOP TRFLG NOP ASFLG NOP DIAGF NOP ABORT NOP EOTXM NOP CH.CO OCT 54 * CWD00 NOP CWD27 NOP CWD30 NOP CWD31 NOP CWD32 NOP CWD33 NOP CWD34 NOP CWD35 NOP CWD36 NOP CWD37 NOP TLOG NOP LPCON NOP * HTBUA DEF HTBUF UNL IFN LST HTBUF BSS 15 UNL XIF IFZ LST HTBUF BSS 28 TIME EQU HTBUA RCTM EQU HTBUF XMTM EQU HTBUF+1 LGTM EQU HTBUF+2 TDWK EQU HTBUF+3 CMTM EQU HTBUF+4 CTRL EQU HTBUF+5 MODSW EQU HTBUF+6 MDCNT EQU HTBUF+7 MSKSV EQU HTBUF+8 MPNTR EQU HTBUF+9 MCNT EQU HTBUF+10 MAXSP OCT 3 UNL XIF LST TEMP4 NOP BBUFA NOP TEMP1 NOP BBUFB NOP TEMP2 NOP CH.BL ASC 1, OVFFL NOP * IPRM DEF *+1 DVR50/#BSC INITIALIZATION PARAMETERS. NOP SYNC: ASCII/LRC=26B; EBCDIC/CRC=100062B MAPSW NOP MAP SWITCH: 0,-1 =DMS; -X =NON-DMS. TIMAD NOP DIRECT ADDRESS OF TIMEOUT/CONTROL DATA. BSCAD DEF #BSC DIRECT ADDRESS OF #BSC ENTRY POINT. * LSTLU NOP LSTLK NOP PUNLU NOP PUNLK NOP IDPRM NOP DISFL NOP TEMP6 NOP RVIFL NOP * TST1 NOP TEMP3 NOP CNT1 NOP IOBFL NOP WRCNT NOP CNT2 NOP UNL IFZ LST FMFLG NOP UNL XIF LST SYASC OCT 26 SYEBC OCT 100062 2 SKP * A RANDOM LIST OF NUMBERS * ZERO OCT 0 C1 OCT 1 C2 OCT 2 C3 OCT 3 C4 OCT 4 C5 OCT 5 C6 OCT 6 C7 OCT 7 C11 OCT 11 C40 OCT 40 C50 OCT 50 C77 OCT 77 C100 OCT 100 C177 OCT 177 C200 OCT 200 C300 OCT 300 C377 OCT 377 C400 OCT 400 C700 OCT 700 C1000 OCT 1000 C1100 OCT 1100 C2700 OCT 2700 C60K OCT 60000 * C.1 OCT -1 C.2 OCT -2 C.3 OCT -3 C.4 OCT -4 C.5 OCT -5 C.6 OCT -6 C.7 OCT -7 C.12 OCT -12 C.30 OCT -30 C.60 OCT -60 * D1 EQU C1 D2 EQU C2 D8 DEC 8 D9 DEC 9 D10 DEC 10 D13 DEC 13 D14 DEC 14 D15 DEC 15 D22 DEC 22 D24 DEC 24 D41 DEC 41 * D.8 DEC -8 D.9 DEC -9 D.10 DEC -10 D.11 DEC -11 D.12 DEC -12 D.16 DEC -16 D.55 DEC -55 D.80 DEC -80 D.82 DEC -82 D.100 DEC -100 D.145 DEC -145 D.400 DEC -400 D.424 DEC -424 * SKP *************************************************************************** * TABLE OF CONTROL CODES (LHW = EBCDIC, RHW = ASCII) * CODES OCT 001603 ETX OCT 023227 ETB OCT 023633 ESC OCT 002611 HT OCT 172064 CH.4 OCT 171463 CH.3 OCT 060521 SS OCT 161122 DS OCT 161723 TS OCT 140701 A OCT 141302 B OCT 141503 C OCT 142304 D OCT 142505 E OCT 143106 F OCT 143707 G OCT 144310 H OCT 040040 BLANK OCT 177577 MASK * DEFCH DEF CH.3 POINTS TO CARRAIGE CONTROL TABLE CODEX DEF CODES CODTB DEF *+1 CONTROL CODE TABLE ETX NOP ETB NOP ESC NOP HT NOP CH.4 NOP ESC SEQUENCES: THIS ONE INDICATES PUNCH, CH.3 NOP NEXT ELEVEN ARE CARRAIGE CONTROL CHARACTERS SS NOP DS NOP TS NOP A. NOP B. NOP C NOP D NOP E NOP F NOP G NOP H NOP BLANK NOP MASK NOP CODE# ABS CODTB-*+1 * SKP *  PARALLEL TABLE OF CARRAIGE CONTROL SPECS: * CONCW NOP CONFIGURED CONTROL WORD * CONTA DEF * CONWL NOP THIS LOCATION REMEMBERS CURRENT CHOICE OCT 0 SINGLE SPACE OCT 1 DOUBLE SPACE OCT 2 TRIPLE SPACE DEC 63 DEC 61 DEC 60 DEC 59 DEC 61 DEC 60 DEC 59 DEC 62 * *************************************************************************** SKP *************************************************************************** * SOME SPECIAL CHARACTER DEFINITIONS * COLON OCT 72 MINUS OCT 55 ITB OCT 37 DLE OCT 20 STX OCT 2 SOH OCT 1 EM OCT 31 * #DIAL ASC 3,#DIAL ASC#C ASC 1,#C ASC#D EQU #DIAL ASC#E ASC 1,#E ASC#I ASC 1,#I ASC#P ASC 1,#P ASC#R ASC 1,#R ASC#S ASC 1,#S ASC#T ASC 1,#T ASC#W ASC 1,#W ASC#X ASC 1,#X ASC#! ASC 1,#! ASC#M ASC 1,#M "EB" ASC 1,EB "PA" ASC 1,PA "HA" ASC 1,HA * *************************************************************************** * TIMEOUTS * MINRC DEC -200 MINIMUM RECEIVE TIMEOUT: 2.0 SEC. MINXM EQU D.100 MINIMUM TRANSMIT TIMEOUT: 1.0 SEC. MINLT EQU D.400 MINIMUM LONG TIMEOUT: 4.0 SEC. MINTD EQU MINLT MINIMUM TTD/WACK SEQUENCES: 400 * *************************************************************************** SKP *************************************************************************** * MESSAGE TABLES *************************************************************************** * TEMPX NOP TEMP USED BY REPOR ASC00 ASC 1,00 ASC10 EQU C400 THIS CORRESPONDS TO TENS PLACE (ASCII) * * DEFINED MESSAGES: * DEC19 DEC 19 FOR FMGR ERRORS DEC20 DEC 20 DEC30 DEC 30 DEC40 DEC 40 DEC41 DEC 41 *42 UNUSED DEC43 DEC 43 DEC44 DEC 44 DEC45 DEC 45 DEC46 DEC 46 DEC47 DEC 47 DEC48 DEC 48 *49 UNUSED DEC50 DEC 50 DEC51 DEC 51 DEC52 DEC 52 DEC53 DEC 53 DEC54 DEC 54 DE,C55 DEC 55 DEC56 DEC 56 DEC57 DEC 57 DEC58 DEC 58 DEC59 DEC 59 DEC60 DEC 60 *61 USED *62 USED *63 USED *64 USED DEC65 DEC 65 DEC66 DEC 66 DEC67 DEC 67 *68 UNUSED *69 UNUSED DEC70 DEC 70 DEC71 DEC 71 DEC72 DEC 72 *************************************************************************** SKP * * THIS SECTION PUTS ETB,EXT IN BUFFER, SENDS BUFFER * AND HANDLES EOT * EOTS1 STA IOBFL I/O BUFFER FLAG EOTST LDA WRCNT GET XMIT BUFFER COUNT CPA D.400 BUFFER EMPTY? JMP S.EOT YES. GO SEND EOT CCB NO. SET EOT FLAG STB EOTXM LDA ETX GET ETX RSS SKIP NEXT INSTRUCTION ETBPT LDA ETB GET ETB JSB STRBY STORE CHARACTER IN XMIT BUFFER ISZ WRCNT BUMP COUNT CLA GET A ZERO RECORD LENGTH JSB PUTWD PUT ZERO LENGTH WORD IN BUFFER * * XMIT BUFFER IS NOW COMPLETE FOLLOWING SECTION PUTS IT ON * THE LINE * LDA WRCNT GET REMAINING BUFFER SIZE CMA,INA MAKE POSITIVE ADA D.400 SUBTRACT 400 TO GET SIZE OF XMIT BUF. STA WRCNT CONFIGURE TRANSMIT BUFFER LENGTH. LDB DEC54 JSB DIARP REPORT REQUEST ISSUED JSB EXEC CALL LINE TO XMIT DEF *+6 BUFFER DEF D2 WRITE REQUEST DEF CWD37 CONTROL WORD = 37XX DEF #CMBF COMM. WRITE BUFFER ADDRESS DEF WRCNT BUFFER LENGTH DEF IDPRM * JSB STATC GO CHECK STATUS OF LINE JMP EXSTA ERROR PROCESSING: EXTENDED STATUS * LDA XMTFL SSA,RSS JMP X.EOT LDA EOTXM SSA,RSS SEND EOT? JMP RSET NO.GO DO NEXT BUFFER * *************************************************************************** SKP ****************************************************&*********************** * S.EOT LDA BRKFL IF A BREAK SSA HAS BEEN REQUESTED, THEN JMP NOPLK DO NOT CLEAR THE LU LOCKS. LDA RDLK SZA,RSS JMP NORLK SKIP IF INPUT NOT LOCKED, JSB LURQ ELSE UNLOCK INPUT LU. DEF *+4 DEF ZERO DEF RDLU DEF C1 CLA RESET INPUT LOCK FLAG. STA RDLK NORLK LDA LSTLK SZA,RSS JMP NOLLK SKIP IF LIST LU NOT LOCKED, JSB LURQ ELSE UNLOCK LIST LU. DEF *+4 DEF ZERO DEF LSTLU DEF C1 CLA RESET LIST LU FLAG. STA LSTLK NOLLK LDA PUNLK SZA,RSS JMP NOPLK SKIP IF PUNCH LU NOT LOCKED, JSB LURQ ELSE UNLOCK PUNCH LU. DEF *+4 DEF ZERO DEF PUNLU DEF C1 CLA RESET PUNCH LOCK FLAG. STA PUNLK * NOPLK LDA DISFL IF DISCONNECT FLAG IS SET, SSA,RSS JMP DWN.2 HONOR THE REQUEST! CPA BRKFL IF A BREAK HAS BEEN REQUESTED, THEN JMP SEOT. GO, DIRECTLY, TO SEND AN 'EOT'. * CPA FCDRD IF THIS IS 1RST CARD & #E/#R/#W, JMP R.EOT THEN DO NOT SEND 'EOT' ! * SEOT. LDB DEC56 JSB DIARP LDB ACW32 SEND THE EOT. JSB LINCN JMP EXSTA ERROR: PROCESS EXTENDED STATUS. CCA STA FCDRD SET FIRST RECORD AFTER EOT FLAG STA EOTFL SET SENT AN EOT FLAG * SKP * BRNCH LDA RCVFL IF RECEIVE MODE,GO TO RECIEVE PROC SSA JMP RECVP LDA XMTFL IF TRANSMIT MODE, GO TO TRANSMIT PROC. SSA JMP XMITP * * IT'S CONTROL MODE--CONTINUE. R.EOT LDA BRKFL IF PROCESSING AN OPERATOR INTERRUPT, SSA JMP XMITP GO PROCESS NEXT CARD LDB EOTFL CLA STA EOTFL CLEAR HAVING SENT EOT FLAG LDA LISFL SSB JUST SENT AN EOT? INA,SZA YES, DECREASE WAIT COUNT BY ONE INA,SZA,RSS PROCESSING A #R,#E,#E,#W OR #P? JMP BRNC1 NO, GO CHECK FOR DISCONNECT. RSS X.EOT LDA C.3 SET LISTEN COUNT TO 1 MINUTE STA WAITC SETUP WAIT * LDB ACW31 EACH LOOP= 1 LONG T.O. INA,SZA IF ONLY 1 (#E) LDB ACW27 OR= 20 SECS FOR ELSE STB ACWX JMP WLOOP * ..EOT LDA WAITC FETCH WAIT COUNT SSA,RSS CLA RESET TO INFINITE WAIT INA,SZA,RSS JMP NWAIT IF DONE WAITING THEN EXIT STA WAITC OR BUMP WAIT COUNT * UNL IFZ LST WLOOP JSB IFBRK DEF *+1 UNL XIF IFN LST WLOOP JSB #INGT UNL XIF LST SSA,RSS OPERATOR-INTERRUPT DETECTED? JMP S.TOR NO, GO LISTEN SOMEMORE * NWAIT CCA ELSE, TURN OFF STA LISFL THE #R REQUEST, * BRNC1 LDA INFLG GET THE 'INPUT-AVAILABLE' FLAG. SSA,RSS IF INPUT IS NOT AVAILABLE, JMP DWN.2 GO TO DISCONNECT. JMP XMITP ELSE GET NEW INPUT. * * **************************************************************************** SKP **************************************************************************** * * LINE TURN-AROUND PROCESSES: * * 'S.TOR' - REQUEST TURN-AROUND FROM SEND TO RECEIVE. * S.TOR LDB DEC53 JSB DIARP LDB ACWX LISTEN FOR 1 LONG T.O. OR 20 SECS JSB LINCN FROM SEND TO RECEIVE. JMP EXSTA ERROR RETURN LDA RCVFL IF NOT RECEIVE MODE, SSA,RSS JMP ..EOT CHECK FOR LISTEN AGAIN. JMP RECVP OR GO TO RECEIVE PROCESSOR * * * * * *************************************************************************** SKP *************************************************************************** * * PUTWD INSERTS THE BLOCK LENGTH WORD FOR THE XMIT PROCESS * * LINRD PERFORMS READ REQUESTS FROM THEWFNLH LINE. ENTRY IS WITH * ADDRESS OF CONTROL WORD IN B * * LINCN PERFORMS CONTROL REQUESTS ON THE LINE. ENTRY IS WITH * ADDRESS OF CONTROL WORD IN B * *************************************************************************** * * * PUTWD NOP ENTRY. A= LENGTH WORD LDB BBUFB GET CURRENT BYTE ADDRESS SLB,RSS IF ON AN EVEN BYTE JMP *+3 PROCEED INB OTHERWISE BUMP ADDRESS TO EVEN ISZ WRCNT ALSO COUNT RBR MAKE WORD ADDRESS STA B,I STORE LENGTH WORD INB INCREMENT WORD ADDRESS RBL TRANSFORM TO BYTE ADDRESS STB BBUFB RESTE BYTE ADDRESS POINTER ISZ WRCNT BUMP BYTE COUNT ISZ WRCNT BY TWO NOP JMP PUTWD,I EXIT ROUTINE * * LINRD NOP ENTRY STB LINRW PUT CONTROL WORD IN REQUEST LDB DEC55 JSB DIARP JSB EXEC ISSUE READ REQUEST DEF *+6 DEF D1 LINRW NOP COMBA DEF #CMBF DEF D.424 DEF IDPRM JSB STATC CHECK STATUS JMP EXSTA IF ERROR,DO EXTENDED STATUS ISZ OVFFL JMP LINRD,I ELSE EXIT LDB ACW34 ISZ WAITB IF REPEAT FLAG SAYS DO IT AGAIN, JMP LINRD+1 THEN DO SO. LDB DEC65 JSB REPOR REPORT BUFFER OVERFLOW ERROR JMP DWN.2 AND ABORT * * 7N* * * LINCN NOP ENTRY LDA LINCN GET RETURN ADDRESS STA STATC DUMMY UP STATUS RETURN STB LINCW PUT CONTROL WORD IN REQUEST JSB EXEC ISSUE CONTROL REQUEST DEF *+4 DEF C3 LINCW NOP DEF IDPRM JMP STATC+1 GO TO STATUS FOR EXIT * * **************************************************************************** SKP *************************************************************************** * * * THIS PROCESS EXECUTES AFTER A SUCCESSFUL ANSWER, OR LINE * TURNAROUND. ITS FUNCTION IS: * 1. READ A BUFFER FROM THE COMM LINE * 2. MOVE EACH BLOCK FROM THE COMM BUFFER * TO AN I/O BUFFER, AND OUTPUT IT. * 3. RECOGNIZE AND EXECUTE HT AND ESC SEQUENCES * 4. REREAD IMPROPER BUFFERS UP TO THREE TIMES * * **************************************************************************** * * RECVP LDA IOPUP SELECT PUNCH STA IOUTP UNL * IFZ * LST * JSB IFBRK CLEAR BREAK FLAG * DEF *+1 * UNL * XIF * IFN * LST * JSB #INGT CLEAR BREAK FLAG. * UNL * XIF LST CLA STA RECFG CLEAR THE RECEIVE FLAG RECV3 LDA C.4 SET REPEAT COUNTER TO -4 STA WAITB CLA RESET EOT FLAG STA TST1 RESET REPEAT COUNTER UNL IFZ LST JSB IFBRK DEF *+1 UNL XIF IFN LST JSB #INGT UNL XIF LST STA BRKFL SET #I FLAG LDB ACW33 SSA,RSS IF THE BREAK FLAG IS NOT SET, JMP RECV1 DO AN ACK READ STA LISFL ELSE RESET LISTEN FLAG JMP S.EOT AND SEND AN EOT * RECV1 JSB LINRD LDB RCVFL SSB,RSS JMP REOT. STB RECFG GOT ONE OR MORE RECORDS! LDA COMBA GET COMM BUFF ADDRESS RAL  ADJUST FOR BYTES AND STA BBUFA INITIALIZE GET BYTE ROUTINE LDB TST1 GET REPEAT COUNTER CMB,INB,SZB,RSS SKIP IF LINE HAS BEEN PRINTED JMP SET2 STB TEMP4 SAVE NUMBER TO SKIP SKIP JSB GETWD GET BLOCK LENGTH CMA,INA LDB A ADA TLOG BUMP COUNT PAST BLOCK SSA,RSS JMP NAKRD ISSUE NAKRD IF THAT'S ALL STA TLOG ADB BBUFA ADD ADDR TO COUNT STB BBUFA ISZ TEMP4 JMP SKIP SKIP ANOTHER * SKP SET2 LDA WRBFA GET ADDRESS OF WRITE BUFFER RAL MULTIPLY BY TWO STA BBUFB INITIALIZE STORE BYTE ROUTINE CLA CLEAR A AND STA CNT1 COUNT1 =NO.OF CHARACTERS STORED STA LPCON * * NOW READY TO EXAMINE RCVE BUFFER * JSB GETWD GET THE LENGTH WORD (LABEL GTDLE?) STA CNT3 INITIALIZE COUNTER JSB GETBY GET THE FIRST CHARACTER CPA DLE IS IT A DLE JMP XPARP YES GO PROCESS BUFFER AS TRANSPARENT CLB SET TRANSPARENCY POINTER STB XPRFL TO NON TRANSPARENT CPA STX NOT DLE IS IT STX? JMP ESCCK YES. PROCEED WITH PROCESSING CPA SOH NO. CHECK FOR SOH? JMP ESCCK IT WAS SOH. TREAT AS STX LDB TST1 GET REPEAT WRITE FLAG SZB IF THIS IS NOT THE FIRST BLOCK JMP ESCK PROCEED NAKRD ISZ WAITB IF OK TO TRY AGAIN, JMP *+4 DO SO. LDB DEC40 ELSE REPORT ERROR AND ABORT JSB REPOR JMP DWN.2 LDB ACW34 DO NAK READ JMP RECV1 ENTER PROCESSING FOR READ REQUESTS * * REOT. CCA DO A "PAGE EJECT", OR PT TRAILER STA LPCON JSB IOUTP,I CLA STA EOTFL CCA SET DEVICE NOT USED FLAGS $ STA USELS STA USEPU LDA LSTLK SZA,RSS JMP NLLK SKIP IF LIST LU NOT LOCKED, JSB LURQ ELSE UNLOCK LIST LU. DEF *+4 DEF ZERO DEF LSTLU DEF C1 CLA RESET LIST LOCK FLAG. STA LSTLK NLLK LDA PUNLK SZA,RSS JMP NPLK SKIP IF PUNCH UNIT NOT LOCKED, JSB LURQ ELSE UNLOCK PUNCH LU. DEF *+4 DEF ZERO DEF PUNLU DEF C1 CLA RESET PUNCH LOCK FLAG. STA PUNLK NPLK LDB IOUTP IF THE EOT WAS RECEIVED CPB IOPUP ON THE PUNCH STREAM, STA XTRAN THEN CLEAR THE FORCED-TRANSLATE FLAG. LDB RECCT FETCH # STREAMS WAITING FOR LDA RECFG FETCH RECEIVE FLAG SZA NO RECORDS RECEIVED? SSB,RSS OR WAITING FOR INFINITE # STREAMS (RECCT=0)? JMP R.EOT YES, DON'T CHANGE EXPECTED COUNT CCA INB,SZB,RSS IF LAST STREAM EXPECTED, STA LISFL CLEAR LISTEN FLAG STB RECCT JMP R.EOT * * GETWD NOP ENTRY LDB BBUFA GET BYTE ADDRESS SLB,RSS ARE WE ON AN EVEN BYTE JMP *+3 YES, GO AHEAD INB NO. BUMP ADDRESS TO EVEN BYTE ISZ TLOG DITTO COUNT. RBR MAKE ADDRESS ABSOLUTE LDA B,I GET WORD FROM BUFFER INB INCREMENT ADDRESS RBL TRANSFORM TO BYTE ADDRESS STB BBUFA RESET GET BYTE ROUTINE ISZ TLOG BUMP CHARACTER COUNTS ISZ TLOG JMP GETWD,I RETURN, A= WORD * * THIS SECTION LOOKS FOR ESCAPE SEQUENCES * ESCCK JSB BUMGT BUMP TO NEXT CHAR ESCK CPA ESC ESCAPE SEGENCE? JMP ESCPR YES. GO PROCESS * THERE ISZ CNT3 END OF BLOCK? RSS JMP DATAA YES LDB XPRFL MOVE TRANSPARENT MODE FLAG CLE,ELB INTO . 1 =TRANSPARENT. LDB CNT1 GET THE OUTPUT COUNT SEZ IF TRANSPARENT MODE, ALLOW TWO MORE ADB C.2 CHARACTERS FOR VERTICAL FMT CONTROL, ADB D.145 IN ADDITION TO USUAL MAXIMUM LENGTH. SSB,RSS IF ITS TOO LONG JMP NAKRD SOMETHINGS WRONG LDB XPRFL GET TRANSPARENCY FLAG SSB IF IN TRANSPARENT MODE, JMP DATA4 BIPASS HT AND EM LDB IOUTP GET THE OUTPUT PROCESS CPA HT IF NOT HT, DO EM CPB IOPUP IF ITS THE PUNCH, JMP EMCK BIPASS HT CHECK LDB HTBUA GET ADDRESS OF TABS HT1 LDA B,I GET CURRENT BUFFER POSITION CMA,INA,SZA,RSS JMP DATA5 ADD POSITION TO IT INB ADA CNT1 SSA CPA C.1 JMP HT1 STA TEMP3 SAVE BLANK COUNT HT2 ISZ TEMP3 DO WE NEED MORE BLANKS? RSS YES. GO STUFF THEM JMP DATA5 LDA C40 GET A BLANK JSB STRBY PUT IT IN THE BUFFER ISZ CNT1 BUMP OUT PUT COUNT JMP HT2 GO DO NEXT BLANK EMCK CPA EM IS THE CHARACTER EM ? JMP DATA3 YES. PROCESS END DATA4 JSB TRAN2 JSB STRBY PUT CHAR IN I/O BUFF ISZ CNT1 BUMP I/O COUNT DATA5 JSB LBUMP JSB GETBY GET NEXT CHAR JMP THERE * DATA1 JSB IOUTP,I GO OUTPUT RECORD ISZ TST1 BUMP REPEAT COUNT JMP SET2 GO START NEXT BLOCK * DATA2 JSB IOUTP,I GO OUTPUT RECORD JMP RECV3 OK GO PROCESS NEXT BUFFER * DATA3 JSB LBUMP GO TEST COM BUFFER JSB GETBY GET NEXT CHAR ISZ CNT3 IF THATS ALL JMP NAKRD ISSUE NAK * DATAA CPA ITB JMP DATA1 JMP IF CHAR WAS ITB CPA ETB JMP DATA2 JMP IF CHAR WAS ETB CPA ETX JMP DATA2 JMP IF CHAR WAS ETX JMP NAKRD OTHERWISE ERROR, RESTART * * THIS SECTION PROCESS TRANSPARENT BUFFERS * XPARP JSB BUMGT BUMP TO NEXT CHAR CCB STB XPRFL TRANSPARENT MODE CPA STX IS IT AN STX? JMP XVFCK YES.CHECK FOR VERTICAL FMT. JMP NAKRD NO. BUFFER ERROR. REREAD XVFCK JSB BUMGT BUMP TO NEXT CHARACTER. LDB IOUTP GET OUTPUT PROCESS ADDRESS. CPA ESC ESCAPE SEQUENCE? CPB IOPUP YES. OUTPUT TO LIST STREAM? JMP DEVCK NO. IGNORE VERTICAL FMT. JSB BUMGT YES. GET NEXT CHARACTER AND JMP ESCVF CHECK FOR VERTICAL FMT. * DEVCK LDB XTRAN GET THE FORCED-TRANSLATION FLAG. SZB IF IT'S ALREADY SET, JMP THERE THEN BYPASS DEVICE TYPE CHECKING; UNL IFZ LST LDB IOFNP CPB IOPUP IF PUNCH TO FILE, JMP THERE DON'T TRANSLATE! UNL XIF LST STA GETWD ELSE, SAVE THE CHARACTER, TEMPORARILY. LDA PUNLU GET THE STA OUTCW EQUIPMENT TYPE-CODE JSB GTWST FOR THE PUNCH-DEVICE. SZA IF THE DEVICE IS INTERACTIVE, CPA D10 OR IF IT'S A LINEPRINTER, ISZ XTRAN THEN FORCE TRANSLATION. LDA GETWD RETRIEVE THE CHARACTER IN . JMP THERE PROCESS THE CHARACTER. * XTRAN NOP * * THIS SECTION PROCESSES ESCAPE SEQUENCES. * ESCPR JSB BUMGT BUMP TO NEXT CHAR CPA CH.4 IS IT A FOUR? JMP SELPU YES GO SELECT PUNCH CPA HT IS IT HORIZONTAL TAB JMP HTSET YES GO SET UP HORIZONTAL TAB ESCVF LDB DEFCH SET UP VERTICAL FORMAT SEARCH STB TEMP2 LDB D.12 SEARCH TABLE UNTIL PROPER CHARACTER STB TEMP6 IS FOUND CLB,INB ESCP. CPA TEMP2,I JMP SELLS INB ISZ TEMP2 ISZ TEMP6 JMP ESCP. CL nB CLEAR CONTROL VALUE SELLS STB LPCON SET FINAL VALUE OF PRINT CONTROL UNL IFZ LST LDB IOFNL CPB IOLSP JMP OWNLS IF LIST TO FILE, NO LU LOCK. UNL XIF LST LDB LSTLK SZB JMP OWNLS IF LIST ALREADY LOCKED, NO LU LOCK. LDA LSTLU STA OUTCW SETUP FOR DEVICE TYPE ROUTINE. JSB GTWST GET DEVICE TYPE. SZA,RSS JMP OWNLS IF LIST TO A TERMINAL, NO LU LOCK. JSB LURQ LOCK LIST LU. DEF *+4 DEF C1 DEF LSTLU DEF C1 ISZ LSTLK SET LIST LOCK FLAG. OWNLS LDA IOLSP GET ADDRESS OF LIST PROCESSOR JMP SETPA GO TO SET PROCESSOR ADDRESS. SELPU EQU * UNL IFZ LST LDB IOFNP CPB IOPUP JMP OWNPU IF PUNCH TO FILE, NO LU LOCK. UNL XIF LST LDB PUNLK SZB JMP OWNPU IF PUNCH ALREADY LOCKED, NO LU LOCK. LDA PUNLU STA OUTCW SETUP FOR DEVICE TYPE ROUTINE. JSB GTWST GET DEVICE TYPE. SZA,RSS JMP OWNPU IF PUNCH TO A TERMINAL, NO LU LOCK. JSB LURQ LOCK PUNCH LU. DEF *+4 DEF C1 DEF PUNLU DEF C1 ISZ PUNLK SET PUNCH LOCK FLAG. OWNPU LDA IOPUP GET ADDRESS OF PUNCH PROCESSOR SETPA STA IOUTP STORE IN OUTPUT PROCESS ADDRESS JSB BUMGT BUMP TO NEXT CHARACTER. JMP THERE SKP * * THIS SECTION ESTABLISHES HORIZONTAL TAB POSITIONS. * HTSET LDB HTBUA GET ADDRESS OF HT BUFFER STB HTBUW HTST JSB LBUMP CHECK COMM BUFFER ISZ CNT3 CHECK BLOCK COUNT JMP HTSTA IF OK, GO SET NEXT TAB CLB ELSE TERMINATE HT BUFFER STB HTBUW,I SELECT LINE PRINTER, CLB,INB AND PROCESS NEXT RECORD Y STB LPCON LDB IOLSP STB IOUTP JMP DATAA * HTSTA JSB GETBY ISZ CNT1 BUMP COUNT CPA HT IS CHAR A HORIZONTAL TAB RSS YES GO STORE TAB POSITION JMP HTST LDA CNT1 SET POSITION COUNT STA HTBUW,I ISZ HTBUW JMP HTST EXIT * * LBUMP NOP ISZ TLOG JMP LBUMP,I JMP NAKRD ISSUE NAK * BUMGT NOP JSB LBUMP ISZ CNT3 RSS JMP NAKRD ISSUE NAK JSB GETBY GET NEXT CHAR JMP BUMGT,I * SKP *************************************************************************** * * THIS ROUTINE READS THE NEXT BYTE FROM A BUFFER * ROUTINE IS RESET BY PLACING BUFFER ADDRESS IN BBUFA * SHIFTED LEFT ONE BIT TO ALLOW BYTE ADDRESSING * **************************************************************************** * * GETBY NOP ENTRY LDB BBUFA CLE,ERB LDA B,I SEZ,RSS ALF,ALF AND C377 ISZ BBUFA JMP GETBY,I * * *************************************************************************** * * THIS ROUTINE STORES A BYTE IN THE BUFFER WHOSE * ADDRESS IS FOUND IN BBUFB. BYTE ADDRESSING * IS USED. BYTE SHOULD BE IN (A). * **************************************************************************** * * STRBY NOP ENTRY STA TEMP1 LDB BBUFB CLE,ERB LDA B,I SEZ,RSS ALF,ALF AND M1774 IOR TEMP1 SEZ,RSS ALF,ALF STA B,I ISZ BBUFB JMP STRBY,I * * SKP * * TRANSLATION SUBROUTINE: TRANSLATES FROM LINE CODE TO HP-ASCII. * TRAN2 NOP ENTRY A CONTAINS CHARACTER IN LINE CODE LDB XPRFL GET TRANSPARENCY FLAG SSB,RSS IF IN NON TRANSPARENT MODE JMP TRAN. GO TRANSLATE LDB XTRAN IF FORCED-TRANSLATION FLAG IS SET SZB THEN JMP TRAN. TRANSLATE LINE CODE TO ASCII. LDB IOUTP CHECK OUTPUT PROCESS CPB IOLSP IF IT IS LIST, JMP TRAN. GO TRANSLATE JMP TRAN2,I EXIT ROUTINE * TRAN. AND MASK MASK OFF PARITY BIT MOD2 NOP RSS IF EBCDIC JMP TRAN2,I EXIT IF ASCII CLE,ERA ADA TABL. FIND RESULT FROM TABLE LDA A,I SEZ,RSS ALF,ALF AND C377 JMP TRAN2,I EXIT WITH CHAR IN A SKP *************************************************************************** * * * STATC DECODES THE CONTROL STATUS RETURNED FROM THE COMM LINE * RETURN IS P+1 IF REJECTED, OR AN ERROR OCCURED. OTHERWISE * RETURN IS P+2. * *************************************************************************** * * * * * STATC NOP ENTRY POINT STB TLOG SAVE TRANSMISSION LOG LDB DIAGF SSB,RSS SKIP IF IN DIAG. MODE JMP NODIA LDB D.8 STB CNT1 LDB DEC60 JSB EXST3 ALF,ALF NODIA SLA IF BIT ZERO=1, LINE IS LOST JMP STATC,I PROCESS AS REJECT CLB CLEAR B AND ALSO STB XMTFL STATE (RCVE/XMIT) STB RCVFL STB OVFFL STB TRMFL CCB SET B=-1 RAR,SLA IF TERMINAL ON LINE, STB TRMFL MAKE STATE FLAG =-1. RAR,SLA IF XMIT BIT IS SET, STB XMTFL MAKE STATE FLAG =-1 RAR,SLA IF THE RCV BIT IS SET, STB RCVFL MAKE RCV FLAG =-1 RAR,SLA IF THE RVI BIT IS SET, STB RVIFL MAKE RVI FLAG =-1 RAR,SLA IF THE BUFFER OVERFLOW BIT IS STB OVFFL SET, MAKE FLAG=-1 AND C60K LDB DEC66 SZA,RSS JSB DIARP REPORT "CONTROL MODE". LDA TRMFL  SSA ISZ STATC BUMP TO NORMAL RETURN JMP STATC,I EXIT ROUTINE * TRMFL NOP TERMINAL-STATE FLAG. (0=OFF-LINE). SKP **************************************************************************** * * THIS SECTION PROCESSES EXTENDED STATUS. ALL ERROR MESSAGES * ARE PRINTED. THE PROGRAM IS TERMINATED,OR RESTARTED * **************************************************************************** * EXSTA LDB DEC46 GET ASCII FOR 10 SZA,RSS IF REQUEST REJECTED JSB REPOR ELSE, REPORT A=O, LDB DEC59 JSB DIARP REPORT REQUEST ISSUED LDB ACW30 DO EXTENDED STATUS REQUEST JSB LINCN NOP * LDA TLOG GET STATUS WORD IN A LDB D.8 GET A -8 AND STB CNT1 INITIALIZE COUNTER LDB DEC20 GET ASCII FOR 20 JSB EXST3 GO REPORT 8-BITS LDB D.8 GET A -8 AND STB CNT1 INITIALIZE COUNTER LDB DEC30 GET ASCII FOR 30 JSB EXST3 GO REPORT 8-BITS * * PRINT TERMINATION MESSAGE? * * JMP EXIT EXST3 NOP ENTRY. B=BASE CODE A=DATA,CNT1=# SLA IF BIT IS SET, JSB REPOR REPORT IT INB BUMP REPORT CODE RAR SHIFT TO NEXT BIT ISZ CNT1 IF THERE ARE MORE BITS, JMP EXST3+1 DD THEM JMP EXST3,I ELSE, EXIT ROUTINE * UNL IFZ LST * HANDLE FMGR ERROR CODES FERR NOP STA FMFLG SAVE ERROR CODE FOR RETURN TO USER LDB A CHANGE REGISTER JSB REPOR REPORT IT TO USER JMP FERR,I EXIT ROUTINE * UNL XIF LST SKP REPOR NOP ENTER: A TO BE SAVED, B=ERROR CODE STA TEMP1 SAVE A STB TEMPX FOR LATER USE SSB CONVERT NEGATIVE FMG~R ERR CODES CMB,INB LDA ASC00 SET UP ASCII ZERO XNUM ADB D.10 SUBTRACT TEN FROM ERR CODE SSB STILL POSITIVE? JMP XNUMX NO, SO GO COMPUTE ONES PLACE ADA ASC10 YES, BUMP THE TENS PLACE (IN ASCII) JMP XNUM AND TRY FOR MORE * XNUMX ADB D10 REPLACE THAT LAST TEN ADB A AND COMPUTE THE ASCII ANSWER STB STCOD PUT STATUS CODE IN MESSAGE BUF JSB EXEC CALL TTY TO PRINT STATUS MESSAGE DEF *+5 DEF C2 REQUEST CODE = 2 DEF SYSLU CONTROL WORD = 1 DEF STMES ADDRESS OF STATUS MESSAGE UNL IFN LST DEF D.8 UNL XIF IFZ LST DEF D.10 LENGTH IS 10 CHARACTERS * LDA TEMPX REMEMBER THAT ERROR CODE SSA NEGATIVE => FMGR LDA DEC19 SPECIAL CASE! LDB A NEED ANOTHER COPY ADA MSLEN ADD IN ADDRESS OF MSG LENGTH TABLE STA MSSIZ KEEP IT HANDY ADB MSTXT ADD IN ADDRESS OF TEXT PTRS TABLE LDB B,I GET THE ACTUAL TEXT ADDRESS STB MSPTR AND KEEP IT TOO! JSB EXEC NOW PRINT OUT THE TEXT STRING DEF *+5 DEF C2 DEF SYSLU MSPTR DEF MESXX DEFAULT MESSAGE MSSIZ DEF C1 DEFAULT MESSAGE SIZE * UNL XIF LST LDA TEMP1 RESTORE A LDB TEMPX RESTORE B JMP REPOR,I EXIT *************************************************************************** SKP UNL IFZ LST ************************************************************************ ER1EX NOP LDA RDERR SSA,RSS JMP ER1EX,I NO ERROR, RETURN JSB FERR * UNL XIF LST UNL XIF LST ************************************************************************** * * THIS SECTION CLOSES ALL FILES, DISCONNECTS THE LINE, AND * TERMINATES RJE * **************************************************************************** * * EXIT2 CCA STA USEPU STA USELS EXIT CLA SET INPUT FLAG TO STA INFLG ZERO CCA SET CONTROL REQUEST STA LPCON TO END OF FILE WRITE STA ABORT SET ABORT FLAG JSB IOPUP,I CLOSE PUNCH DEVICE CCA SET CONTROL TO EOF STA LPCON JSB IOLSP,I CLOSE LIST DEVICE UNL IFZ LST * JSB CLOSE DEF *+2 DEF #RDCB * CLA STA P1 SET PARAMETERS TO ZERO STA P2 STA P3 LDA CWD00 GET LU OF I/O BOARDS ADA C.1 ADA DRT CALCULATE LUN ADDRESS LDA A,I GET EQT # AND C77 CMA,INA STA CNT4 LDB EQTA GET EQT START ADDR ADB D.11 -11 EXIT4 ADB D15 LDA B,I EQT WORD 5 ALF,ALF AND C77 ISOLATE EQUIPMENT TYPE CPA C50 DVR50? JMP *+4 YES, GO PASS PARAMETERS ISZ CNT4 DONE WITH EQTS JMP EXIT4 NO JMP EXIT5 NO DVR50 ?? LDA B,I AND C377 ISOLATE STATUS BITS STA P2 ADB C7 LDA B,I PICK UP EQT12 STA P3 & SAVE IN P3 EXIT5 LDA STCOD GET LAST ASCII ERROR CODE STA P5 UNL XIF LST * JSB EXEC CALL #DIAL FOR SIGN-OFF DEF *+5 DEF D9 DEF #DIAL DEF SYSLU DEF C.1 * JSB EXEC ISSUE A CLEAR REQUEST TO DVR50. DEF *+3 DEF C3 DEF CWD00 * LDB DEC72 WRITE "TERMINATE" MESSAGE JSB REPOR UNL IFZ LST * LDA FMFLG FMP ERROR CODE STA P4 * JSB PRTN RETURN THE PARAMETERS DEF *+2 DEF P1 UNL XIF LST * #` JSB EXEC CALL SYSTEM TO TERMINATE DEF *+2 DEF C6 REQUEST CODE IS 6 * HLT 37B ?? SAFETY ?? UNL IFZ LST * CNT4 NOP UNL XIF LST * DIARP NOP IF IN DIAGNOSTIC MODE, PRINT MESSAGE LDA DIAGF SSA JSB REPOR JMP DIARP,I * SKP * STMES ASC 3, RJE: STCOD NOP ASC 1, _ SPACE,BACKARROW * ISTAT NOP RDERR NOP XPRLU NOP * SKP ************************************************************************** * * * THIS SECTION CONTAINS I/O PROCESSORS FOR EXEC DEVICES * * ************************************************************************** * * 'EXEC' READ PROCESSOR. * READ BUFFER: #RDBF/ASCII, #RDBF-1/BINARY * READ LENGTH: SAVED IN 'CNT2' * IORDL NOP LDA BRKFL GET BREAK FLAG LDB SYSLU PREPARE FOR BREAK PROCESSING. SSA,RSS IF THE BREAK-FLAG IS NOT SET, LDB RDLU THEN GET READ LU. STB OUTCW INITIALIZE FOR TYPE-CODE CHECKING. JSB GTWST GET THE EQUIPMENT TYPE-CODE. SZA SKIP, IF IT'S TYPE <00>; JMP TRTST ELSE, GO TO TRANSPARENCY CHECKING. * JSB TTYIN PROMPT & READ FROM AN INTERACTIVE DEVICE. JMP IORD1 GO TO CHECK FOR END-OF-FILE. * * TEST FOR BINARY MODE OF INPUT * TRTST LDB TRFLG GET THE TRANSPARENCY FLAG SZB IF NON TRANSPARENT, JMP RDASC DO ASCII READ * CPA C11 JMP RDASC CPA D13 IF CARD READER,ASCII READ JMP RDASC * * DO BINARY READ * LDB A LDA RDLU MAKE CONWORD CPB C1 IOR C300 DO PAPER TAPE READ STA XPRLU * JSB REIO DO READ DEF *+5 DEF C1 DEF XPRLU DEF #RDBF-1 DEF D.82 ADB C.2 REMOVE LENGTH WORD JMP IORD1 * SKP RDASC JSB REIO CALL EXNLHEC TO READ ASCII RECORD DEF *+5 DEF C1 REQUEST CODE = 1 DEF RDLU CONTROL WORD = L.U. OF DEVICE DEF #RDBF READ BUFFR ADDRESS DEF D.80 -80 CHARACTERS MAX IORD1 STA TEMP3 SAVE STATUS LDA EQTYP GET THE EQUIPMENT TYPE-CODE. ADA D.8 SSA IF TYPE IS LESS THAN TEN, JMP PTEOF USE PAPER TAPE EOF CONVENTIONS LDA TEMP3 RECOVER STATUS ALF,ALF POSITION TO MT EOF SSA IF ITS SET, JMP RDEOF GO PROCESS SZB IF RECORD LENGTH IS NON ZERO JMP RDPK GO PROCESS DATA AND C100 ELSE TEST DOWN BIT (6) SZA IF DEVICE IS DOWN, JMP IORDL+1 ATTEMPT TO REREAD RECORD INB ELSE SEND ONE BLANK JMP RDPK FOR ALL BLANK RECORD. * PTEOF LDA TEMP3 RECOVER PT STATUS AND C40 TEST BIT 5 SZA RDEOF CLB REPORT EOF RDPK JSB PACK GO PACK DATA DEF IORDL,I * ^NPACK NOP LDA PACK,I STA PACK LDA BBUFB GET PRESENT BYTE ADDRESS AND STA TEMP6 SAVE IT LDA TRFLG SZB,RSS IF RECORD LENGTH IS ZERO, JMP DISC. GO DISCONNECT (UNLESS TRANSPARENT) SZA,RSS IF TRANSPARENT MODE, JMP PACK1 BIPASS COMMANDS LDA RDBUA,I GET COMMAND DATA * * TEST FOR INPUT STREAM COMMANDS * CPA ASC#C JMP CHANG IT'S A CHANGE DEVICE COMMAND CPA ASC#T JMP TRSET IT'S TRANSPARENT MODE COMMAND UNL IFZ LST CPA ASC#S SWITCH OPTIONS? JMP SWCH UNL XIF LST UNL IFZ LST CPA ASC#P JMP PAUSE ITS A PAUSE COMMAND UNL XIF LST CPB C2 IF LENGTH IS REQUIRED 2, RSS CHECK FOR OTHER COMMANDS JMP PACK1 ELSE TREAT AS DATA * CPA ASC#D JMP DISC1 ITS A FORCE DISCONNECT COMMAND CPA ASC#X JMP XLATE IT'S A TRANSLATE PUNCH STREAM CPA ASC#I JMP INSER ITS AN INSERT COMMAND CPA ASC#W CCB #W=WAIT FOREVER FOR 1 STREAM CPA ASC#R LDB C.5 #R=WAIT FOR 1 MINUTE FOR 1 STREAM CPA ASC#E LDB C.3 #E=WAIT FOR 1 LONG T.O. FOR 1 STREAM SSB,RSS ONE OF THE WAIT COMMANDS? JMP PACK1 NO, THEN TREAT AS DATA * INB STB LISFL #E:-2 #R:-4 #W:0 CCB CPA ASC#R IF #R, SET STREAM CNT TO INFINITY, CLB ELSE SET IT TO 1 STB RECCT SAVE COUNT OF JOB STREAMS EXPECTED JMP P.END * INSER CCB SET FLAG TO INDICATE #I PROCESSING STB BRKFL JMP FLUSH AND GO FLUSH BUFFER * UNL IFZ LST PAUSE STB MCNT SAVE CHAR CNT FOR PARSE LDB C.2 STB LISFL DEFAULT TIME= 1 LONG T.O. CCB STB RECCT DEFAULT COUNT= 1 STREAM * JSB PARSE PARSE THE COMMAND STRING DEF *+4 DEF #RDBF DEF MCNT DEF #WRBF * LDA #WRBF+32 FETCH PARAM COUNT CMA,INA INA,SZA,RSS ONLY #P? JMP P.END YES, JUST USE DEFAULTS * STA MDCNT NO, SAVE -PARAM COUNT DLD #WRBF+4 FETCH 1ST PARAM CPA C1 NON-NUMERIC SZB,RSS OR ZERO? JMP P.CNT+1 YES, USE DEFAULT * CLA SSB IF NEGATIVE, JMP P.CNT MAKE INFINITE LDA 1 MULTIPLY USER # MINUTES BY THREE MPY C3 INA CMA,INA ADJUST TO PROPER LISFL SPECS P.CNT STA LISFL * ISZ MDCNT ANOTHER PARAM? RSS JMP P.END NO, QUIT DLD #WRBF+8 YES, FETCH 2ND PARAM CPA C1 NON-NUMERIC SZB,RSS OR ZERO? JMP P.END YES, USE DEFAULT CMB,SSB,INB,RSS MAKE NEGATIVE AND IF IT WAS CLB NEGATIVE ALREADY, SET TO INFINITE # STB RECCT UNL XIF LST P.END CLB STB EOTFL INITIALIZE NO EOT BEEN SENT FLAG JMP DISC0 CLEAR BREAK FLAG * DISC. SZA,RSS IF TRANSPARENT MODE, DONT DISCONNECT, JMP TRCLR BUT CHECK FOR DEVICE CHANGES. LDA BRKFL IF PROCESSING #I, DON'T DISCONNECT, SSA,RSS BUT CLEAR #I FLAG. JMP DISC2 DISC0 STB BRKFL JMP EXT4 * DISC1 CLB DISC2 STB DISFL ELSE SET FLAG TO INDICATE DISCONNECT, JMP EXT4 AND CONTINUE PROCESSING OF COMM BUFFER * XLATE CCB SET THE FORCED-TRANSLATION FLAG. STB XTRAN JMP RREAD READ THE NEXT RECORD. * UNL IFZ LST SWCH STB MCNT SAVE CHARACTER COUNT FOR PARSE JSB SWTCH ANALYZE RECORD JMP RREAD GO TO NEXT RECORD * UNL XIF LST * #T[,XX] BUFFER MOVE ROUTINE: EXCHANGES CONTEN>TS OF #RDBF & HTBUF. * * LDB CHCNT GET THE COMMAND CHARACTER LENGTH. * CLE/CCE =0: SAVE COMMAND IN HTBUF; =1: RESTORE CMD. TO #RDBF * JSB MVBUF MOVE BUFFER & RETURN: = DON'T CARE, =0. * MVBUF NOP CMB,INB FORM A NEGATIVE CHARACTER COUNT. BRS CONVERT CHARACTER COUNT TO WORDS. STB BTEMP SAVE THE COUNT TEMPORARILY. LDA RDBUA GET THE READ BUFFER ADDRESS. LDB HTBUA GET THE SAVE-BUFFER ADDRESS. SEZ IF THE COMMAND IS BEING RESTORED, SWP EXCHANGE SOURCE & DESTINATION ADDRESSES. DST SRCPT SAVE THE SOURCE & DESTINATION POINTERS. LDB BTEMP RESTORE THE MOVE COUNTER TO . MLOOP LDA SRCPT,I GET A WORD FROM THE SOURCE, STA DESPT,I AND MOVE IT TO THE DESTINATION. ISZ SRCPT ADVANCE THE SOURCE POINTER. ISZ DESPT ADVANCE THE DESTINATION POINTER. INB,SZB ALL WORDS BEEN MOVED? JMP MLOOP NO--GO BACK FOR MORE. JMP MVBUF,I YES--RETURN. * SRCPT NOP DESPT NOP BTEMP EQU RDERR * SKP * TRCLR LDB HTBUF GET THE SAVED COMMAND CHAR. COUNT. CCE,SZB,RSS IF THE COUNT IS ZERO, THEN NO TRANSFER JMP DISC2 WAS SPECIFIED, SO GO TO DISCONNECT; ISZ TRFLG ELSE, TURN OFF TRANSPARENCY, JSB MVBUF AND RESTORE THE COMMAND BUFFER. LDB HTBUF GET THE COMMAND CHARACTER COUNT, JMP CHANG AND GO TO CHANGE CONFIGURATION. * TRSET LDA B GET THE COMMAND CHARACTER LENGTH. UNL IFZ LST ADA D.55 UNL XIF IFN LST ADA D.12 UNL XIF LST SSA,RSS IF THE COMMAND IS TOO LONG, JMP PACK1 THEN TREAT IT AS DATA! CPB C2 IF THIS IS A '#T' ONLY, CLB THEN SET FOR DISCONNECT @EOF. STB HTBUF SAVE THE COMMAND CHARACTER LENGTH. CLE,SZB,RSS IF THIS IS A '#T' ONLY, #ZJMP SETRS THEN BYPASS SAVING THE BUFFER; STB #RDBF ELSE,SAVE THE COMMAND LENGTH, JSB MVBUF AND SAVE THE COMMAND DATA. SETRS STB TRFLG ENABLE TRANSPARENT MODE (B=0). LDA IORDP IF PROCESSOR IS AN EXEC DEVICE, CPA IORDA RSS JMP FLUSH LDA RDLU GET EQUIP TYPE STA OUTCW JSB GTWST LDB A LDA C700 CPB C1 IF ITS DVR01, SET EOT BIT JSB GOCON FLUSH LDA D.400 GET EMPTY BUFFER SIZE. CPA WRCNT IF THE COMMUNICATIONS BUF IS EMPTY JMP RREAD GO READ NEXT INPUT STA CNT2 ELSE, RESET THE BUFFER-EMPTY COUNT, JMP EXT5 AND BIPASS IOBUF FLAG-SET DURING EXIT. * CHANG CMB SET THE READ-BUFFER LENGTH STB RDLEN TO = NEGATIVE (CHARACTER COUNT +1). LDA CH.BL REPLACE STA #RDBF THE LDA C40 COMMAND LDB RDBUA CHARACTERS INB AND FOLLOWING RBL COMMA STB BBUFB WITH ASCII JSB STRBY BLANKS. CCA INITIALIZE LUS TO NO CHANGE JSB CONFG GO CONFIGURE I/O JMP RREAD ERROR: IGNORE CMD. & READ NEXT RECORD. JSB START SET LU.S NOP CLA CLEAR THE FORCED-TRANSLATION FLAG. STA XTRAN JMP FLUSH NOW FLUSH COMM BUFFER * RREAD LDA PACK ELA,CLE,ERA LDA A,I STA IORDP,I LDA IORDP GET PROPER ENTRY ADDRESS FOR REPEAT INA LDB TEMP6 STB BBUFB JMP A,I JUMP TO READ PROCESSOR * PACK1 LDA RDBUA GET ADDRESS OF BUFFER RAL MAKE INTO CHARACTER ADDRESS STA BBUFA SZB,RSS IF LENGTH IS ZERO JMP EXT4 PROCESS AS EOF CPB K80 WERE 80 CHARACTERS PASSED? JMP EXT6 YES! GO PROCEED LDA BBUFA GET CURRENT ADDRESS MOF READ BUF ADA B ADD COUNT TO ADDRESS TO GET NEXT BYTE STA BBUFB ADDRESS,AND INITIALIZE STORE BYTE ROUT, LDA TRFLG SZA,RSS JMP PADTR LDA #CTRL RAR,SLA RSS SKIP IF END OF MEDIA OK JMP PADIT ELSE MUST PAD BLANKS LDA FCRDF IF THIS IS THE FIRST CARD, SSA JMP PADIT STUFF BLANKS STA FCDRD TURN OFF "FIRST CARD AFTER EOT" FLAG CMB MAKE COUNT ONE LARGER & NEGATIVE STB CNT2 INITIALIZE BUFFER LENGTH LDA EM GET END OF MEDIA CHARACTER JSB STRBY PUT CHAR IN BUFFER JMP EXT3 * PADTR LDA BLANK RSS PADIT LDA C40 USE ASCII ADB D.80 GET NEG.DIFFERENCE IN ACTUAL & FULLBUFFER STB TEMP4 SAVE TEMPORARILY STA FCRDF BEGIN PADDING LDA FCRDF JSB STRBY PUT IT IN THE BUFFER ISZ TEMP4 DO WE HAVE 80 CHAR YET? JMP *-3 NO PUT ANOTHER IN EXT6 CLB FIRST CARD READ, STB FCRDF TURN OFF FORCED PADDING STB FCDRD AND SAY THAT AN EOT MUST BE SENT LDB D.80 OK. GET COUNT OF -80 EXT4 STB CNT2 INITIALIZE BUFFER LENTGH EXT3 CCB STB IOBFL EXT5 LDA TEMP6 RECOVER BYTE ADDRESS AND STA BBUFB RESTORE IT JMP PACK,I GET A -1 & SET K80 DEC 80 * * * THIS SECTION PROCESSES WRITES TO EXEC DEVICES * SETFG NOP STA OUTCW SETUP CONTROL WORD LDB SETFG,I SZB,RSS JMP WRIT2 LDA LPCON SSA JMP NOWRT EOF AND DEVICE NOT USED, JUMP JSB GTWST CPA C2 IF DEVICE IS PUNCH, DO LEADER JMP OPPTP CCB CPA D10 IF LINE PRINTER, EJECT PAGE JSB CTRLP PAGE EJECT JMP WRIT2 * OPPTP LDA C1000 PUT LEADER ON PAPER TAPE PUNCH JSB GOCON WRIT2 LDA C40 M STUFF EXTRA BLANK JSB STRBY LDA LPCON GET CONTROL VALUE CPA C1 IF THIS IS SELECT ONLY, JMP WRPEX EXIT WRITE PROCESSOR SSA IF ITS NEGATIVE, JMP WRSTA BIPASS DATA OUTPUT * JSB GTWST GET EQUIPMENT TYPE LDB XPRFL SSB,RSS IF NON TRANSPARENT MODE, JMP WRASC DO ASCII WRITE LDB IOLSP CPB IOUTP IF THIS IS THE LIST PROCESSOR JMP WRASC DO ASCII WRITE * CPA C2 IF IT'S DVR02, RSS GET SET FOR PAPER TAPE CLA,RSS ELSE DO OTHER DEVICE LDA C300 SET CONTROL WORD IOR OUTCW STA CONCW * LDA CNT1 SET UP LENGTH WORD FOR PT ADA C2 LDB A BRS CONVERT LENGTH TO WORDS BLF,BLF AND POSITION TO UPPER BYTE STB WRBFB,I STORE IN BUFFER LDB WRBFB JMP WRAIT * SKP WRASC LDB A LDA OUTCW CPB D10 IF DEVICE IS LP, IOR C200 MERGE V-BIT(#7) FOR COLUMN #1 PRINT. STA CONCW LDA CNT1 LDB WRBFA WRAIT CMA,INA STA CNT1 SET UP REQUEST COUNT STB WRPNT SET BUFFER ADDR IN CALL JSB REIO DO ASCII WRITE DEF *+5 DEF C2 REQ CODE =2 DEF CONCW CONTROL WORD = L.U. WRPNT NOP DEF CNT1 LENGTH WRSTA JSB GTWST GET EQUIPMENT TYPE * * LDB LPCON GET CONTROL VALUE CPA D10 IF DVR12, JMP FMTLP DO LINE PRINTER FORMATTING SSB,SZB IF ITS NEGATIVE OR ZERO SZA,RSS IF ITS DVR00, FORGET CONTROL REQUEST JMP WRPEX * ALF,ALF NEGATIVE,POSITION TYPE TO UPPER DIGIT ALF,SLA IF ITS IS 20, JMP CONMT DO MAG TAPE EOF LDA C1000 GET PT EOF WORD CON.. JSB GOCON WRPEX CLA RESET CONTROL WORD STA LPCON TO ZERO * NOWRT CLB STB SETFG,I LDA SETFG ADA C.3 COMPUTE RETURN ADDR LDA A,I JMP A,I RETURN * CONMT LDA C100 GET MAG TAPE CONTROL WORD JMP CON.. GO DO CONTRO L REQUEST * FMTLP SZB,RSS IF ZERO, THEN DEFAULT TO JMP NOWRT SINGLE SPACE (JMP TO CONDF FOR SPC SUPPRESS) ADB CONTA ADD TABLE ADDRESS TO VALUE LDB B,I GET CONTROL PARAMETER SZB CONDF JSB CTRLP JMP WRPEX * SKP CTRLP NOP STB CONWL PUT IT IN PLACE LDA OUTCW GET LU IOR C1100 MERGE IN CONTROL WORD STA CONCW PLACE CONTROL WORD JSB EXEC DO CONTROL REQUEST DEF *+4 DEF C3 DEF CONCW DEF CONWL JMP CTRLP,I EXIT PROCESSOR * GOCON NOP SET UP CONWORD AND ISSUE CONTROL REQUEST IOR OUTCW STA CONCW JSB EXEC DEF *+3 DEF C3 DEF CONCW JMP GOCON,I * GTWST NOP EQUIPMENT TYPE-CODE EXAMINATION. JSB EXEC DO EXEC STATUS CALL DEF *+4 DEF D13I TRAP ERRORS DEF OUTCW DEF ISTAT JMP LUERR REPORT BAD LU (ERROR 44) & ABORT! * LDA ISTAT GET EQT WORD NUMBER 5. ALF,ALF POSITION AND ISOLATE AND C77 THE EQUIPMENT TYPE-CODE. CPA C7 IF THE TYPE IS <07> CLA THEN SIMULATE TYPE <07>. CPA C5 IF THE TYPE-CODE IS <05>, JSB TYP05 THEN GO TO EXAMINE THE SUBCHANNEL; STA EQTYP ELSE, SAVE THE EQUIPMENT TYPE, JMP GTWST,I AND RETURN TO THE CALLER. * TYP05 NOP DVR05 SUBCHANNEL EXAMINATION. LDA OUTCW GET THE CONWORD. AND C77 ISOLATE THE LOGICAL UNIT NUMBER. ADA C.1 SUBTRACT ONE FOR DRT INDEXING. ADA DRT CALCULATE THE POSITION IN THE DRT. LDA A,I GET THE CONTENTS OF TTHE DRT ENTRY. ALF,RAL POSITION SUBCHANNEL TO BITS #4-0. AND ITB ISOLATE SUBCHANNEL (ITB = 37B). STA B SAVE IT TEMPORARILY. SZA,RSS IF THE SUBCHANNEL IS ZERO, THEN RETURN JMP TYP05,I TO SIMULATE A TYPE <00> DEVICE. LDA B23 PREPARE TO SIMULATE A TYPE <23> DEVICE. CPB C4 IF THE SUBCHANNEL IS FOUR, THEN LDA D10 SIMULATE A TYPE <12> DEVICE. JMP TYP05,I RETURN--DEVICE TYPE: <12>,LP OR <23>,MT. B23 OCT 23 D13I OCT 100015 STATUS CODE W/SIGN. EQTYP NOP EQUIPMENT TYPE-CODE STORAGE. SKP * * THIS SECTION HANDLES LIST OUTPUT TO EXEC DEVICES * IOLSL NOP LDA LSTLU SET UP LIST DEVICE OUTPUT JSB SETFG EXECUTE WRITE TO LIST DEVICE USELS NOP * * THIS SECTION HANDLES PUNCH OUTPUT TO EXEC DEVICES * IOPUL NOP LDA PUNLU SET UP PUNCH CONTROL WORD JSB SETFG EXECUTE WRITE TO PUNCH DEVICE USEPU NOP * * THIS SECTION PRINTS A PROMPT AND READS A CHAR STRING * TTYIN NOP ENTRY JSB REIO OUTPUT THE PROMPT CHAR DEF *+5 DEF C2 DEF OUTCW DEF PROMP DEF C.3 * LDA C400 MERGE CONTROL WORD WITH LU IOR OUTCW STA OUTCW * JSB REIO READ REQUEST FROM TTY DEF *+5 DEF C1 DEF OUTCW DEF #RDBF DEF D.80 JMP TTYIN,I EXIT SUBROUTINE * SKP * WRBFB DEF #WRBF-1 SKPOP NOP * COFN EQU * UNL IFZ LST CLA STA SKPOP LDA C2 PREPARE FOR RETURN STA MODSW TO READ NEXT FILE-RECORD. LDA POIN STA PPOI LDB CH.BL PREPARE FOR NAMER <6 CHARACTERS. LDA P4 GET THE THIRD & FOURTH CHARACTERS. SZA,RSS IF THE PARAMETER IS NULL, STB P4 REPLACE IT WITH BLANKS. LDA P5 GET THFE FIFTH & SIXTH CHARACTERS. SZA,RSS IF THESE ARE NON-EXISTENT, STB P5 SUBSTITUTE BLANKS. * JSB OPEN OPEN FILE WHOSE NAME IS IN P3 DEF RTN1 DEF #RDCB DEF RDERR PPOI DEF P3 RTN1 JSB ER1EX CHECK FOR ERROR * FLRD JSB READF READ CONFILE INTO DEF RTN2 THE READ BUFFER DEF #RDCB DEF RDERR NOTE: -1 ERROR DEF #RDBF DEF C50 DEF RDLEN RTN2 JSB ER1EX CHECK FOR ERROR * SKP * * CHECK TO SEE IF INPUT STREAM IS FROM CONFILE * IF SO, THEN SET FLAG TO PREVENT RE-OPENING IT * (CONFILE NAME = INPUT FILE NAME => SAME FILE) * (I.E. BETTER BE ON SAME CARTRIDGE!!!) * LDA RDBUA REMEMBER WHERE READ BUFFER STARTS STA PTEMP SET UP PTR TO FIRST CHAR LDB C.6 MAX OF SIX CHARS TO CHECK LDA RDLEN BUT DON'T CHECK MORE THAN EXIST! ALS CMA STA LNCNT INIT LINE COUNT = -#CHARS -1 COMP ISZ LNCNT ANY CHARS LEFT ON LINE? RSS YES, SKIP AND KEEP GOING JMP ALLOK NO, ALL DONE! LDA PPOI,I CHECK NAME OF CONFILE SLB RIGHT OR LEFT CHAR? ALF,ALF RIGHT, SO MOVE IT LEFT AND M1774 MASK DOWN TO JUST LEFT STA CTEMP SAVE FOR LATER COMPARISON LDA PTEMP,I CHECK NAME OF INPUT FILE SLB RIGHT OR LEFT CHAR? ALF,ALF RIGHT, SO MOVE IT LEFT AND M1774 MASK DOWN TO JUST LEFT CPA COMMA LDA SPACE CONVERT COMMA TO SPACE CPA COLOL LDA SPACE CONVERT COLON TO SPACE CPA CTEMP RSS THE TWO CHARS ARE EQUAL, SO SKIP JMP RTN3 NOT EQUAL, SO FORGET IT CPA SPACE JMP ALLOK CHAR WAS SPACE SO ALL IS DONE INB,SZB,RSS BUMP CHAR COUNT JMP ALLOK NO MORE CHARS LEFT SO ALL DONE SLB LEFT OR RIGHT CHAR? JMP COMP RIGHT, SO STI%9LL IN SAME WORDS ISZ PPOI LEFT, SO BUMP PTRS TO NEXT WORDS ISZ PTEMP JMP COMP AND CHECK REMAINDER OF CONFILE NAME * ALLOK CCA INDICATE THAT THE INPUT-STREAM STA SKPOP WILL COME FROM THE CONFILE, ALSO, JMP RTN4 BY SETTING "SKIP OPENING" FLAG. * RTN3 LDA POIN ACCOMMODATE THE MODIFICATION RECORD , STA PPOI (#M...), BY RESETTING THE POINTER. RTN4 LDB RDLEN GET THE READ LENGTH (WORDS). RBL CONVERT TO A CHARACTER COUNT. JMP STCNT PROCESS RESULTS * PTEMP NOP PTR TO CHAR IN READ BUFFER CTEMP NOP USED FOR THE COMPARISON LNCNT NOP # CHARS ON LINE FROM READ BUF COMMA OCT 26000 COLOL OCT 35000 SPACE OCT 20000 * SKP UNL XIF IFN LST LDB DEC43 REPORT ERROR IF NON-FMP JSB REPOR CLB JMP STCNT UNL XIF IFZ LST * * THIS ROUTINE OPENS THE FILE,AND MODIFIES CONTROL FOR * LU SIMULATION DURING I/O * IOPEN NOP ENTRY ISZ SKPOP RSS JMP GOOD LDA DCBPA GET BASE ADDRESS OF DCB ADDRESSES ADA P2 OFFSET TO CORRECT ADDRESS LDB A,I PICK UP ADDRESS OF DCB STB OPDCB STORE IT IN THE OPEN CALL JSB OPEN OPEN FILE DEF RTN5 OPDCB DEF #RDCB DEF RDERR DEF OPNAM DEF ZERO DEF ISEC DEF ICR RTN5 SSA,RSS IF NO ERRORS WERE DETECTED, JMP GOOD THEN SET UP THE PROCESS POINTERS; LDB OPDCB ELSE, PREPARE FOR INPUT FILE CHECK. CPA C.6 IF THE FILE DOES NOT EXIST, CPB DRDF AND THE REFERENCE IS TO INPUT-STREAM, JMP ER3EX THEN WE CANNOT CREATE AN INPUT FILE! * JSB CREAT CREATE THE NON-EXISTING FILE. DEF RTN6 DEF OPDCB,I DCB ADDRESS. DEF RDERR ERROR RETURN. DEF OPNAM FILE NAM4>E. DEF D24 FILE SIZE = 24 BLOCKS. DEF C3 FILE TYPE = 3. DEF ISEC SECURITY CODE (DEFAULT=0). DEF ICR CARTRIDGE NUMBER (DEFAULT=0). RTN6 SSA IF 'CREAT' ERROR WAS DETECTED, JMP ER3EX CALL IT QUITS! * * FILE IS OPEN, AND I/O SIMULATOR HAS DCB. SET PROCESS POINTER TO FILE. * GOOD CCA INDICATE THAT THE STREAM STA PPOIN,I IS ASSOCIATED WITH A FILE. LDA IOFNT GET BASE ADDRESS OF FILE I/O ROUTINES. ADA P2 OFFSET INTO TABLE LDA A,I LOAD ADDRESS OF PROCESS ROUTINE LDB IODRT GET BASE ADDRESS: I/O ROUTINE POINTERS ADB P2 OFFSET INTO TABLE STA B,I STORE POINTER JMP IOPEN,I EXIT ROUTINE * DRDF DEF #RDCB INPUT-FILE DCB ADDRESS. DLSF DEF #LDCB LIST -FILE DCB ADDRESS. DPUF DEF #PDCB PUNCH-FILE DCB ADDRESS. DCBPA DEF * BASE OF DCB ADDRESSES. * IOFNR DEF IORDF READ FILE PROCESSOR IOFNL DEF IOLSF LIST FILE PROCESSOR IOFNP DEF IOPUF PUNCH FILE PROCESSOR IOFNT DEF * BASE OF FILE I/O PROCESSORS * * DISC FILE INPUT ROUTINE * IORDF NOP ENTRY LDA BRKFL GET TTY INTERRUPT FLAG SSA,RSS IF IT IS SET, JMP *+4 CONTINUE LDA IORDF ELSE SET UP FOR EXEC PROCESSING STA IORDL JMP IORDL+1 AND ENTER EXEC DEVICE PROCESSOR * LDA TRFLG IF NON TRANSPARENT,DO ASCII READ SZA JMP RDAS. JSB READF ELSE DO BINARY READ DEF *+6 DEF #RDCB DEF RDERR DEF #RDBF-1 DEF D41 DEF TEMP3 CCB ADB TEMP3 JMP RDA.. * RDAS. JSB READF READ RECORD FROM FILE DEF *+6 DEF #RDCB DATA CONTROL BLOCK DEF RDERR DEF #RDBF BUFFER ADDRESS DEF C50 AVAILABLE LENGTH DEF TEMP3 STORE ACTUAL LENGTH * LDB TEMP3 GET THE READ WORD COUNT. RDA.. SSA ANY FMP ERRORS DETECTED? JMP DWN. YES--REPORT IT & DISCONNECT! RBL,SLB NO--FORM A CHARACTER COUNT. CLB SET COUNT =0, IF EOF DETECTED (LEN=-1). JSB PACK GO PAD OUT BUFFER & INITIALIZE DEF IORDF,I * DWN. JSB FERR REPORT THE FMP ERROR. UNL XIF LST * DWN.2 LDB DEC58 JSB DIARP LDB ACW36 ISSUE DISCONNECT REQUEST JSB LINCN NOP JMP EXIT UNL IFZ LST * SKP * THIS SECTION HANDLES FILE WRITES * WRITQ NOP ENTRY STA OTDCB STORE DCB ADDRESS STA CLDCB LDB LPCON GET CONTROL VALUE LDA CNT1 AND OUTPUT COUNT CPB C1 IF THIS IS SELECT JMP WRTQX EXIT PROCEXXOR SSB,RSS IF ITS POSITIVE JMP WRTQG GO AHEAD LDA INFLG ELSE GET INPUT FLAG SSA IF NO INPUT AVAILABLE, TREAT AS EOF JMP WRTQX ELSE WRITE ZERO LENGTH RCD JSB CLOSE CLOSE FILE DEF *+2 CLDCB NOP WRTQX CLA RESET CONTROL VALUE STA LPCON JMP WRITQ,I RETURN * WRTQG INA BUMP CHARACTER COUNT ARS CHANGE TO WORDS LDB IOUTP CPB IOLSP IF LIST DEVICE, IGNORE BINARY FORMAT JMP *+4 LDB XPRFL IF TRANSPARENT, SSB INA BUMP COUNT FOR LENGTH WORD STA CNT1 PLACE IN CNT1 ALF,ALF STA #WRBF-1 STORE IN CASE A BINARY WRITE LDA C40 PUT A BLANK ON THE END OF BUFFER JSB STRBY LDA WRBFB STA WBFPT SET BUFFER ADDRESS LDB XPRFL IF TRANSPARENT DO BINARY WRITY LDA IOUTP SSB SKIP IF NOT TRANSPARENT CPA IOLSP IF LIST, DO ASCII WRITE ISZ WBFPT SET ADDR FOR ASCaNLHII WRITE * JSB WRITF CALL FMP TO WRITE DATA DEF *+5 OTDCB NOP DCB ADDR DEF RDERR WBFPT NOP DEF CNT1 WORD COUNT * SSA,RSS IF POSITIVE JMP WRTQX PROCESS JSB FERR ELSE REPORT FILE ERROR LDB ABORT GET ABORT FLAG SSB IF THIS IS ABORT , JMP WRTQX EXIT PROCESSOR JMP DWN.2 AND ABORT * * IOLSF NOP ENTRY LDA DLSF GET DCB ADDRESS FOR LIST JSB WRITQ GO DO WRITE JMP IOLSF,I EXIT ROUTINE * IOPUF NOP ENTRY LDA DPUF GET DCB ADDRESS FOR PUNCH JSB WRITQ GO DO WRITE JMP IOPUF,I EXIT ROUTINE * UNL XIF LST * * FN*************************************************************************** SKP ************************************************************************ TABLE DEF A000 LOCATION OF TRANSLATION TABLE * * THIS IS THE TABLE FOR CONVERSION FROM ASCII TO EBCDIC ************************************************************************ * ASCII _ 0 1 2 3 4 5 6 7 * ^^^ A000 OCT 000001,001003,033455,027057 * EBCDIC-->NULSOH STXETX EOTENQ ACKBEL * A010 OCT 013005,022413,006015,007017 * BS HT LF VT FF CR SO IC * A020 OCT 010021,011023,036075,031046 * DLEDC1 DC2DC3 DC4NAK SYNETB * A030 OCT 014031,037447,016035,017037 * CAN EM SUBESC IFSIGS IRSIUS * A040 OCT 040117,077573,055554,050175 * SP ! " # $ % & ' * A050 OCT 046535,056116,065540,045541 * ( ) * + , - . / * A060 OCT 170361,171363,172365,173367 * 0 1 2 3 4 5 6 7 * A070 OCT 174371,075136,046176,067157 * 8 9 : ; < = > ? * A100 OCT 076301,141303,142305,143307 * @ A B C D E F G * A110 OCT 144311,150722,151724,152726 * H I J K L M N O * A120 OCT 153730,154742,161744,162746 * P Q R S T U V W * A130 OCT 163750,164512,160532,057555 * X Y Z [ \ ! ] - * SKP ************************************************************************ * THE FOLLOWING TRANSLATION IS FROM LOWER CASE ASCII TO LOWER CASE EBCDIC ************************************************************************ * A140 OCT 074601,101203,102205,103207 * \ A B C D E F G * A150 OCT 104211,110622,111624,112626 * H I J K L M N O~ * A160 OCT 113630,114642,121644,122646 * P Q R S T U V W * A170 OCT 123650,124700,065320,120407 * X Y Z ! DEL * SKP ************************************************************************ TABL. DEF E000 LOCATION OF TRANSLATION TABLE * * THIS IS THE TABLE FOR CONVERSION FROM EBCDIC TO ASCII * XXX INDICATES NO TRANSLATION, THE RESULTING CHARACTER * HAS BIT 7 SET (HIGH ORDER BIT) AND BITS 0 THRU 6 REMAIN * THE SAME AS THE SOURCE CODE ************************************************************************ * * EBCDIC _ 0 1 2 3 4 5 6 7 * ^^^ E000 OCT 000001,001003,102011,103177 * ASCII--> NULSOH STXETX XXX HT XXXDEL * E010 OCT 104211,105013,006015,007017 * XXXXXX XXX VT FF CR SO SI * E020 OCT 010021,011023,112012,004000 * DLEDC1 DC2DC3 XXX LG BS NUL * E030 OCT 014031,115233,016035,017037 * CAN EM XXXXXX FS GS RS US * E040 OCT 120241,121243,122012,013433 * XXXXXX XXXXXX XXX LF ETBESC * E050 OCT 124251,125253,126005,003007 * XXXXXX XXXXXX XXXENQ ACKBEL * E060 OCT 130261,013263,132265,133004 * XXXXXX SYNXXX XXXXXX XXXEOT * E070 OCT 134271,135273,012025,137032 * XXXXXX XXXXXX DC4NAK XXXSUB * E100 OCT 020301,141303,142305,143307 * SP XXX XXXXXX XXXXXX XXXXXX * E110 OCT 144311,055456,036050,025441 * XXXXXX [ . < ( + ! * E120 OCT 023321,151323,152325,153327 * & XXX XXXXXX XXXXXX XXXXXX * E130 OCT 154331,056444,025051,035536 * XXXXXX ] $ : ) : 7 * E140 OCT 026457,161343,162345,163347 * - / XXXXXX XXXXXX XXXXXX * E150 OCT 164351,076054,022537,037077 * XXXXXX ! , % - > ? * E160 OCT 170361,171363,172365,173367 * XXXXXX XXXXXX XXXXXX XXXXXX * E170 OCT 174140,035043,040047,036442 * XXX \ : # @ ' = " * SKP ************************************************************************ * THE FOLLOWING TRANSLATION IS FROM LOWER CASE EBCDIC * TO LOWER CASE ASCII ************************************************************************ * E200 OCT 100141,061143,062145,063147 * XXX A B C D E F G * E210 OCT 064151,105213,106215,107217 * H I XXXXXX XXXXXX XXXXXX * E220 OCT 110152,065554,066556,067560 * XXX J K L M N O P * E230 OCT 070562,115233,116235,117237 * Q R XXXXXX XXXXXX XXXXXX * E240 OCT 120176,071564,072566,073570 * XXXESC S T U V W X * E250 OCT 074572,125253,126255,127257 * Y Z XXXXXX XXXXXX XXXXXX * E260 OCT 130261,131263,132265,133267 * XXXXXX XXXXXX XXXXXX XXXXXX * E270 OCT 134271,135273,136275,137277 * XXXXXX XXXXXX XXXXXX XXXXXX * SKP ************************************************************************ * THE FOLLOWING TRANSLATION IS FROM UPPER CASE EBCDIC * TO UPPER CASE ASCII ************************************************************************ * E300 OCT 075501,041103,042105,043107 * A B C D E F G * E310 OCT 044111,145313,146315,147134 * H I XXXXXX XXXXXX XXX \ * E320 OCT 076512,045514,046516,047520 * \ J K L M N O P * E330 OCT 050522,155333,156335,157337 * Q R XXXXXX XXXXXX XXXXXX * E340 OCT 160134,051524,052526,053530 * XXX \ S T U V W X *  E350 OCT 054532,165353,166355,167357 * Y Z XXXXXX XXXXXX XXXXXX * E360 OCT 030061,031063,032065,033067 * 0 1 2 3 4 5 6 7 * E370 OCT 034071,175373,176375,177377 * 8 9 XXXXXX XXXXXX XXXXXX * ************************************************************************ **************************************************************************** SKP UNL IFZ LST **************************************************************************** * ASCII MESSAGE TABLES **************************************************************************** * MESXX ASC 1,XX MES19 ASC 5,FMGR ERROR MES20 ASC 24,SECURITY CODE VIOLATION (#BSC NOT FOUND IN CORE) MES21 ASC 9,PASSWORD VIOLATION MES22 ASC 21,ILLEGAL MODE FOR REQUEST ISSUED TO DRIVER MES23 ASC 19,ILLEGAL BUFFER FORMAT GIVEN TO DRIVER MES24 ASC 22,ILLEGAL BISYNC SEQUENCE RECEIVED REPEATEDLY MES25 ASC 11,LOSS OF CLEAR TO SEND MES26 ASC 20,8 NAK CHARACTERS SENT (GARBAGE RECEIVED) MES27 ASC 25,8 NAK CHARACTERS TRANSMITTED (GARBAGE TRANSMITTED) *28 UNUSED *29 UNUSED MES30 ASC 17,RECEIVE TIMEOUT OCCURED REPEATEDLY MES31 ASC 10,LONG TIMEOUT FAILURE MES32 ASC 20,LINE TERMINATION SEQUENCE SENT (DLE/EOT) MES33 ASC 22,LINE TERMINATION SEQUENCE RECEIVED (DLE/EOT) MES34 ASC 15,LOSS OF DATA SET READY SIGNAL MES35 ASC 25,LOSS OF CARRIER DETECT DURING RECEIVE (REPEATEDLY) MES36 ASC 13,TTD OR WACK LIMIT EXCEEDED MES37 ASC 18,REQUEST TIMEOUT DURING CONTROL MODE *38 UNUSED *39 UNUSED * NOTE THAT CODES 20-37 REPORT ERRORS WHICH WERE DETECTED * IN THE DRIVER, AND ARE CONSIDERED IRRECOVERABLE. * * MES40 ASC 16,NAK READ REQUEST ISSUED 3 TIMES MES41 ASC 20,REMOTE DOES NOT RESPOND TO BID FOR LINE MES42 ASC 8,I/0 DEVICE ERROR MES43 ASC 17,I/O CONFIGURATION PARAMETER ERROR MES44 ASC 14,LOGICAL UNIT NUMBER INVALID MES45 ASC 10,DVR50 NOT AVAILABLE MES46 ASC 15,I/O REQUEST REJECTED BY DVR50 MES47 ASC 13,USER REQUEST TO ABORT RJE MES48 ASC 25,TIMEOUT AND CONTROL MODIFICATION PARAMETER ERROR * * * NOTE THAT CODES 40-48 ARE ERRORS DETECTED BY RJE. * * MES50 ASC 9,INITIALIZE DRIVER MES51 ASC 8,#DIAL SCHEDULED MES52 ASC 17,ESTABLISH REMOTE MODEM CONNECTION MES53 ASC 6,LISTENING... MES54 ASC 3,WRITE MES55 ASC 2,READ MES56 ASC 4,SEND EOT MES57 ASC 6,BID FOR LINE MES58 ASC 5,DISCONNECT MES59 ASC 12,REQUEST EXTENDED STATUS MES60 ASC 13, IRRECOVERABLE LINE ERROR MES61 ASC 9, TERMINAL ON LINE MES62 ASC 7, TRANSMIT MODE MES63 ASC 7, RECEIVE MODE MES64 ASC 7, RVI RECEIVED MES65 ASC 9, BUFFER OVERFLOWED MES66 ASC 7, CONTROL MODE MES67 ASC 14, WAITING FOR REMOTE MODEM... * * NOTE THAT CODES 50-67 ARE PRINTED ONLY IN DIAGNOSTIC * MODE, AND ARE INFORMATION MESSAGES, NOT ERROR * MESSAGES. * MES70 ASC 1,ON MES71 ASC 13,ENTER CONFIGURATION DATA MES72 ASC 6,TERMINATED * *************************************************************************** SKP *************************************************************************** * MESSAGE LENGTH TABLE (CHARACTERS.DIV.2) MSLEN DEF *+1-19 DEC 5 19 DEC 24 20 DEC 9 21 DEC 21 22 DEC 19 23 DEC 22 24 DEC 11 25 DEC 20 26 DEC 25 27 DEC 1 28 UNUSED DEC 1 29 UNUSED DEC 17 30 DEC 10 31 DEC 20 32 DEC 22 33 DEC 15 34 DEC 25 35 DEC 13 36 DEC 18 37 DEC 1 38 UNUSED DEC 1 39 UNUSED DEC 16 40 DEC 20 41 DEC 8 42 DEC 17 43 DEC 14 44 DEC 10 45 DEC 15 46 DEC 13 47 DEC 25 48 DEC 1 49 UNUSED DEC 9 50 DEC 48 51 DEC 17 52 DEC 6 53 DEC 3 54 DEC 2 55 DEC 4 56 DEC 6 57 DEC 5 58 DEC 12 59 DEC 13 60 DEC 9 61 DEC 7 62 DEC 7 63 DEC 7 64 DEC 9 65 DEC 7 66 DEC 14 67 DEC 1 68 UNUSED DEC 1 69 UNUSED DEC 1 70 DEC 13 71 DEC 6 72 * **************************************************************************** SKP *************************************************************************** * TABLE OF POINTERS TO TEXT STRINGS * MSTXT DEF *+1-19 DEF MES19 DEF MES20 DEF MES21 DEF MES22 DEF MES23 DEF MES24 DEF MES25 DEF MES26 DEF MES27 DEF MESXX 28 UNUSED DEF MESXX 29 UNUSED DEF MES30 DEF MES31 DEF MES32 DEF MES33 DEF MES34 DEF MES35 DEF MES36 DEF MES37 DEF MESXX 38 UNUSED DEF MESXX 39 UNUSED DEF MES40 DEF MES41 DEF MES42 DEF MES43 DEF MES44 DEF MES45 DEF MES46 DEF MES47 DEF MES48 DEF MESXX 49 UNUSED DEF MES50 DEF MES51 DEF MES52 DEF MES53 DEF MES54 DEF MES55 DEF MES56 DEF MES57 DEF MES58 DEF MES59 DEF MES60 DEF MES61 DEF MES62 DEF MES63 DEF MES64 DEF MES65 DEF MES66 DEF MES67 DEF MESXX 68 UNUSED DEF MESXX 69 UNUSED DEF MES70 DEF MES71 DEF MES72 * ***************************************************************************** **************************************************************************** UNL *($ XIF LST *************************************************************************** BSS 0 RJE LENGTH * END RJE I* Q 91780-18012 1840 S C0122 &#COMN #COMN CNTRL & BFFR             H0101 qASMB,R,L,C HED #COMN: COMMON STORAGE FOR RJE * (C) HEWLETT-PACKARD CO.1978 * * NAM #COMN,30 91780-16003 REV.1648 761109 * NAM #COMN,30 7-18-78 W/ MAGNOVOX FIXES & CNT MODE T.O. NAM #COMN,30 91780-16012 REV.1840 780725 ENT #TIME,#CTRL,#CMBF,#WRBF,#RDBF,#RDCB,#LDCB,#PDCB ENT #TFLG,#TBUF,#OVRN,#WRPT,#RDPT,#BFEN * * NAME: #COMN * SOURCE: 91780-18012 * RELOC: 91780-16012 * PGMR: C. HAMILTON ( 11/09/76 ) * D. BOLIERE ( 7/18/78 ) * MODIFIED BY: * * ***************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * ***************************************************************** * * THIS MODULE PROVIDES COMMON STORAGE FOR THOSE CONSTANTS AND BUFFERS * WHICH MUST BE SHARED BETWEEN RJE AND THE LIBRARY PORTION OF THE * BISYNC COMMUNICATIONS DRIVER: #BSC/DVR50. * * PROGRAM TYPE 30 WILL FORCE THE RTE-III GENERATOR TO PLACE THIS * MODULE INTO THE SUBSYSTEM GLOBAL AREA. THUS, WHEN THE USER SPECIFES * THAT PRIVILEGED DRIVERS HAVE ACCESS TO SSGA, AND IF #BSC IS FORCED * TO RESIDE IN THE SUBSYSTEM GLOBAL AREA OF THE RTE-III SYSTEM, THEN * NO TIME-CONSUMING MAP SWITCHING WILL BE REQUIRED OF THE DRIVER. * * ADDITIONALLY, IF #BSC IS SSGA-RESIDENT(RTE-III), RJE MAY BE SWAPPED * SINCE ALL OF ITS BUFFERS ARE LOCATED IN THIS SSGA-RESIDENT MODULE. * [** USER MAY MODIFY TIMEOUT AND CONTROL VALUES--IF NECESSARY **] * #TIME DEF *+1 ADDRESS OF TIMEOUT/CONTROL ARRAY. DEC -301 RECEIVE TIMEOUT = 3.01 SEC. DEC -190 TRANSMIT TIMEOUT = 1.90 SEC. DEC -2000 LONG TIMEOUT = 20.0 SEC. DEC -1500 MAXIMUM NO. OF TTD/WACK SEQUENCES. DEC -15 K   CONTROL MODE TIMEOUT=5.0 MINUTES * #CTRL DEC 0 BIT#2(LINE CODE): 0=EBCDIC, 1=ASCII * BIT#1(BUF. TERM): 0=PAD W/BLANKS, 1=USE 'EOM' * BIT#0(LINE MODE): 0=HALF DUPLEX, 1=FULL DUPLEX * * TRACE BUFFER AND ADDRESS POINTERS. >>>>> DO NOT CHANGE! <<<<< * #TFLG NOP TRACE ON=NON-ZERO #TBUF DEF TBUF FWA OF TRACE BUFFER #OVRN NOP NON-ZERO IF BUFFER OVERRUNS DEVELOP #RDPT DEF TBUF READ POINTER #WRPT DEF TBUF WRITE POINTER #BFEN DEF TBFEN LWA OF TRACE BUFFER TBUF BSS 200 MUST BE 200 WORDS FOR 4800 BAUD! TBFEN EQU * * * * DATA BUFFERS AND DATA CONTROL BLOCKS. >>>>> DO NOT CHANGE! <<<<< * #CMBF BSS 212 COMMUNICATIONS DATA BUFFER. BSS 1 (EXTRA WORD FOR TRANSPARENT WRITE). #WRBF BSS 73 WRITE BUFFER. #RDBF BSS 40 READ BUFFER. * #RDCB BSS 144 INPUT-FILE DATA CONTROL BLOCK #LDCB BSS 144 LIST-FILE DATA CONTROL BLOCK #PDCB BSS 144 PUNCH-FILE DATA CONTROL BLOCK * BSS 0 [ MODULE SIZE ] * END '   91780-18013 1840 S C0422 &#BSC DRIVER EXTENSION             H0104 ASMB,R,L,C HED #BSC: BISYNC TELECOM DRIVER * (C) HEWLETT-PACKARD CO.1978 * NAM #BSC,14 91780-16013 REV.1840 780725 ENT #BSC EXT $TIME * * NAME: #BSC * SOURCE: 91780-18013 * RELOC: 91780-16013 * PGMR: P. KAPOOR ( 11/20/73 ) * * MODIFIED BY: P. KAPOOR, R.SHATZER ( 01/11/75 ) * C. WHELAN ( 10/31/75 ) * C. HAMILTON ( 04/12/77 ) * C. HAMILTON ( 04/01/78 ) * D. BOLIERE, R. GUDZ ( 08/11/78 ) * * ***************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * ***************************************************************** * * CAUTION: * THIS IS THE SSGA (OR LIBRARY) RESIDENT PORTION OF A SYSTEM * RESIDENT TELECOMMUNICATION DRIVER DVR50 . THIS * MODULE MAY BE APPENDED AS A SUBROUTINE TO THE * MAIN DEVICE EMULATOR PROGRAM. IT CAN RESIDE EITHER * IN THE USER AREA OR IN THE SYSTEM AREA. IN FORMER * CASE IT MUST NOT BE SWAPPED OUT ONCE INITIATED. * * REFER TO THE SYSTEM RESIDENT DVR50 BEFORE USING * THIS MODULE. * * * ON ENTRY INTO #I.50 DURING INITIALIZATION , EQT7 * CONTAINS SYNC CHARACTER FOR THE LINE CODE WITH BIT * 15 EQUAL TO 1 FOR CRC AND 0 FOR LRC. UPON EXIT * BACK INTO THE SYSTEM RESIDENT DRIVER, REG-B HAS * THE PASSWORD. REG-A ALWAYS HAS COMPLETION CODE. * RETURN IS (P+1) AFTER INITIALIZATION AND (P+2) * OTHERWISE. * * ON EXIT FROM #C.50 INTO DVR50 , TAKE (P+1) RETURN IF IN BETWEEN REQUESTS, * TAKE A (P+2) RETURN ON COMPLETION AND (P+3) RETURN FOR CONTINUATION. * * FOR (P+2) RETURN , REG-A & B HAVE COMPLETION PARAMETERS. * * RETURN FROM #P.50 IS ALWAYS (P+1) . * =RECV. SYNC-REFERENCE COMMAND, IF SYNC HUNT MODE; OR y=0, IF NOT. * ************************************************************************** SKP ************************************************************************** * * PCO 1840 AUGUST 11,1978 * ************************************************************************** * * TRACE HAS BEEN ADDED! * * EACH LINE BID WILL LAST AS LONG AS 127 ENQ'S. * ************************************************************************** SKP * * 160010 [XMIT BOARD] * * * 1 * 1 1 0 * 0 0 0 * 0 0 0 * 0 0 1 * 0 0 0 * * ****************************************************************** * * C * C C R * P P S * S T ! NOT USED ! CHAR SIZE * * * M * M D C * A A Y * T E ! * ! * * * * D * D V * R R N * A S ! * ! * * * * * O * C * T T ! * ! * * * * * N (C)* S S * ! * ! * * * * * (A)* T E E * I ! * ! * * * * * * A N N * N ! * ! * * * * * O * T S A * T ! * ! * * * * * F * E B * ! * ! * * * * * F * O L * O ! * ! * * * * * * F E * F ! * ! * * * * * * F V O * F ! * ! * * * * * * E N * ! * ! * * * * * * N * ! * ! * * * ****************************************************************** * * * 151030 [RCV BOARD] * * * 1 * 1 1 0 * 0 0 0 * 0 0 0 * 0 0 1 * 0 0 0 * * ****************************************************************** * * C * C X C * P P S * S S S * T S ! CHAR SIZE * * * M * M D * A A Y * T P B * E Y ! * * * * D * D * R R N * A E A * S N ! * * * * * O * C * T C * T C ! * * * * * N * S E * O * ! * * * * * * T V H * C F * C F ! * * * * * * A E U * I H F * L L ! * * * * * * T N N * N * K G ! * * * * * * T * T I * ! * * * * * * O * N * O ! * * * * * * F O * O T * N ! * * * * * * F N * F * ! * * * * * * * F O * ! * * * * * * * F * ! * * * * * * * F * ! * * * ****************************************************************** * SKP * * 171010 [XMT BOARD] * * * 1 * 1 1 0 * 0 0 0 * 0 0 0 * 0 0 1 * 0 0 0 * * ****************************************************************** * * C * C C S * P P S * S T ! NOT USED ! CHAR SIZE * * * M * M D N * A A Y * T E ! * ! * * * * D * D D * R R N * A S ! * ! * * * * * O * C * T T ! * ! * * * * * N (C)* S E * ! * ! * * * * * (A)* T V E * I ! * ! * * * * * * A E N * N ! * ! * * * * * O * T N A * T ! * ! * * * * * F * B * ! * ! * * * * * F * O L * O ! * ! * * * * * * F * F ! * ! * * * * * * F O * F ! * ! * * * * *  * F * ! * ! * * * * * * F * ! * ! * * ******************************************************************* SKP * #BSC OCT 150003 SECURITY CODE DEF #I.50 DEFINE DEF #C.50 LIBRARY DEF #P.50 ENTRY POINTS. * #I.50 NOP STA TIMAD SAVE ADDRESS OF TIMEOUT VALUES. LDA EQ6,I AND M3777 GET FUNCTION AND REQUEST CODES STA FUNC * LDA BIT12 LDB TFLAG,I FETCH TRACE FLAG SZB SET SWITCHES TO EITHER NOP LDB RSSI OR RSS CPB TSW1 CHANGING MODE? JMP TSW1 NO, SKIP SETTING SWITCHES INA YES, SO INDICATE IN TRACE ENTRY STB TSW1 SET TRACE SWITCHES STB TSW2 STB TSW3 STB TSW4 * TSW1 NOP TRACE SWITCH JMP *+3 LDB FUNC SET BREG TO FUNCTION JSB TRACE LDA FUNC RESUME PROCESSING LDB CWTBL REG-B HAS PROCESS POINTER SCH CPA 1,I FOUND THE PROCESS ? JMP GOTIT YES INB BUMP PROCESS POINTER CPB CWLST JMP REJ2 ILLEGAL FUNCTION, REJECT JMP SCH LOOP BACK. GOTIT ADB TLEN JMP 1,I GET ADDR OF PROCESSOR & GO * CWTBL DEF *+1 CONTROL WORK TABLE OCT 3703 INITIALIZE OCT 3603 DISCONNECT REO7 OCT 3503 RECEIVE-TO-SEND REO6 OCT 3403 HANDSHAKE REO9 OCT 3303 AUTO-ANSWER REO8 OCT 3203 SEND EOT REO10 OCT 3103 SEND-TO-RECEIVE (1 LONG T.O.) OCT 2703 SEND-TO-RECEIVE (20 SECS) OCT 3702 WRITE REO5 OCT 3701 WRITE-CONVERSATIONAL REO4 OCT 3601 READ (SEND RVI) REO3 OCT 3501 READ CONVERSATIONAL. REO2 OCT 3401 READ (SEND NAK) REO1 OCT 3301 READ (SEND ACK0 OR ACK1) * TLEN ABS *-CWTBL-32768 DEF INITL INcITIALIZE DEF OFF DISCONNECT DEF RC2SD RECEIVE-TO-SEND DEF HNDSK HANDSHAKE DEF ANSWR AUTO-ANSWER DEF SEOF SEND 'EOT' DEF SD2RC SEND-TO-RECEIVE (1 LONG T.O.) DEF LSN20 SEND-TO-RECEIVE (20 SECONDS) DEF SEND WRITE DEF SENDC WRITE-CONVERSATIONAL DEF READ READ (SEND 'RVI') DEF READ READ (CONVERSATIONAL) DEF READ READ(SEND 'NAK') DEF READ READ (SEND 'ACK0' OF 'ACK1') * CWLST DEF TLEN * * ** INITIALIZATION ** * * THIS SECTION INITIALIZES THE DRIVER. * ON EXIT, REG-B HAS A PASSWORD WHICH IS THE * ADDRESS OF XLINK WORD IN USER'S ID SEGMENT. * THIS ROUTINE SETS UP SYSTEM TIME PARAMETERS * OBTAINED FROM #COMN ROUTINE. * * INITL LDA EQ1 SET ADA P3 LDB EQ4A STA 1,I SET EQT POINTER INB INA CPB EQ12A RSSI RSS DONE JMP *-5 DO NEXT LDA EQ12 STA EQT12 INA STA EQT13 ADA P2 STA EQT15 CLB STB EQ14,I MAKE SURE THAT TIMER STB 0,I IS ZERO * LDA EQTA EQT CMA,INA ADA EQ1 THIS EQT ADDR - 1ST EQT ADDR DIV P15 COMPUTE RELATIVE EQT # INA STA EQT# * LDA EQT7,I SET UP BCC AND CODE FLAG STA BCCFL JSB CCADR SET UP LINE CODE TABLE LDA EQT4,I SET BIT12 OF EQT4 TO TELL RTE IOR MTOWN TO ENTER C.50 ON TIME-OUT . STA EQT4,I * LDA TIMAD GET ADDRESS OF TIMEOUT VALUES. LDB A,I SET UP STB RCTM RECEIVE TIMEOUT INA LDB A,I STB XMTM TRANSMIT TIMEOUT INA LDB A,I STB LGTM LONG TIMEOUT INA LDB A,I STB #NUMB # OF TTD'S / WACK'S INA LDB A,I FETCH CONTROL MODE TIMEOUT STB CMDTM INA BUMP POINTER TO MODE CONJTROL WORD LDB A,I GET CONTROL WORD STB DUPLX SET VALUE FOR HALF/FULL DUPLEX FLAG * INA BUMP ADDRESS STA TFLAG INA STA TBUF START OF TRACE BUFFER INA STA OVRN OVERRUN FLAG INA STA RDPT READ POINTER INA STA WRPT WRITE POINTER INA STA BFEN END OF BUFFER * CCA INITIALIZE UPPER TIME STAMP STA LTIME * JSB EXST CLEAN EXTENDED STATUS STA SETCN CLR STC ,C FLAG FROM LAST TIME * * CONFIGURE I/O INSTRUCTIONS * LDA EQT4,I GET DEVICE'S AND M77 CHANNEL NUMBER (RECEIVE BOARD) STA B IN B-REG IOR OTA FORM CONFIGURED OTA STA OTA1R CONFIGURE RECEIVE BOARD STA OTA4R STA OTA5R STA OTA6R STA OTA7R INA STA OTA1S CONFIGURE SEND BOARD STA OTA2S STA OTA3S STA OTA4S STA OTA6S STA OTA7S * LDA CLC IOR B FORM CONFIGURED CLC XX,C STA CLC2 STA PCLCR STA CCLCR INA INCREMENT FOR SEND BOARD STA CLC1 STA PCLCT STA CCLCT * LDA STC FORM COFIGURED STC XX,C IOR B STA STC1R INA STA STC1S * LDA LIA FORM CONFIGURED LIA XX IOR B STA LIA3R INA STA SSTA LDA SYNC OUTPUT THE SYNC CHARACTER OTA6S OTA 0 TO THE TRANSMIT BOARD, OTA6R OTA 0 AND TO THE RECEIVE BOARD. * LDA EQT5,I CLEAN STATUS IN EQT4 AND MFST STA EQT5,I JSB WACTZ CLEAN WACK/TTD & SPEC CASE FLAG LDB EQ1,I GET ADDRESS OF USER'S I.D. SEGMENT. STB PSWD USE IT FOR THE PASSWORD. JSB SCLR CLEAN INTERNAL FLAGS. STA LINE SET TERMINAL OFF-LINE. STA FUNC ERASE FUNCTION FOR LDA P4 IMMEDIATE COMPLETION JMP CLC1 DO CLC'S & EXIT * EQ4A DEF EQT4 EQ12A DEF EQT12 * *** CLEAN INTERNAL FLAGS FOR NEXT OPERATION *** SCLR NOP TIMAD EQU SCLR SHARE STORAGE (INITIALIZATION ONLY). CLA STA EOF CLEAR "EOT" FLAG STA RQ2SD CLEAR "RVI" FLAG STA INERR CLEAR OPERATION IN ERROR FLAG STA TLOG CLEAR TRANSMISSION LOG STA OVRFL CLEAR BUFFER-OVERFLOW FLAG STA SYNFL CLEAR SYNC-REFERENCE FLAG JMP SCLR,I RETURN * *SCFWA OCT 25045 TEMP DEBUG TFLAG DEF OVRN TRACE FLAG ADDRESS OVRN NOP OVERRUN FLAG ADDRESS TBUF NOP FWA OF TRACE BUF WRPT NOP ADDRESS OF WRITE POINTER RDPT NOP ADDRESS OF READ POINTER BFEN NOP END OF BUFFER ADDRESS SKP * ** ACTIVATE TIMER ** * * THIS ROUTINE SETS UP TIME-OUT VALUE IN EQT15. * EQT14 IS NOT USED BY THIS DRIVER (EQT14 IS SET TO * ZERO AFTER THE INITIALIZATION CALL AND THE USER * MUST NOT ATTEMT TO DO ANY KIND OF DEVICE TIME-OUT * MANIPULATION WHILE THE DRIVER IS IN USE). * * ON ENTRY INTO 'TACTV' : * REG-A = NEG NUMBER OF 10 MSEC INTERVALS * REG-B = ADDRESS OF ROUTINE TO BE EXECUTED * UPON TIMEOUT * TACTV NOP LDB TACTV,I STA EQT15,I SET TIME-OUT VALUE OR ZERO IT SZA IS IT DEACTIVATE TIMER ? STB TADRS NO. THEN SET TRANSFER ADDRESS. ISZ TACTV JMP TACTV,I RETURN. * TADRS NOP TRANSFER ADDRESS AFTER REENTRY ON TIMEOUT STA EQT15,I SET TIMEOUT JMP EXITR * TACTZ NOP CCA STA EQT15,I SET FAST TIMEOUT LDA TACTZ STA TADRS SET ADDR UPON RETURN * RTN0 CLA CLC1 CLC 0,C XMIT BOARD CLC2 CLC 0,C RCV BOARD JMP #I.50,I **************************************************** SKP * ** C.50 ** * #C.50 NOP LDA SETCN FETCH STC FLAG SSA,RSS ARE WE TO STC THE CARDS UPON EXIT? CLA NO, SO RESET FLAG STA SETCN * LDA RSSI STA EXITR MODIFY INSTRUCTION ISZ #C.50 ISZ #C.50 ASSUME (P+2) RETURN JMP TADRS,I GO TO TIME-OUT PROCESSOR. * * ** P.50 ** #P.50 NOP CLA STA SETCN CLEAR 'STC XX,C' FLAG STA EXITR MODIFY INSTRUCTION JSB LCHCK DROP LINE IF DATA-SET IS OFF. JMP EXIT,I TRANSFER ADDRESS ON I/O INTERRUPT * EXIT NOP EXITR NOP #C.50 EXIT ? JMP PEXIT NO, THEN #P.50 EXIT. ISZ SETCN YES. SET CONTROL,CLEAR FLAG ? JMP CCLCT NO, DO CLC,CLF ON BOTH BOARDS CCLC CLC 0,C STC1 STC 0,C CONFIGURED SET CONTROL, CLR FLAG JMP #C.50,I RETURN * #P.50 EXIT PEXIT LDA SYNFL GET SYNC-REFERENCE COMMAND, OR ZERO. ISZ SETCN SET CONTROL, CLEAR FLAG? JMP PCLCT NO, DO CLC, CLF ON BOTH BOARDS PCLC CLC 0,C STC2 STC 0,C CONFIGURED SET CONTROL, CLR FLAG JMP #P.50,I RETURN: =SYNC REF, OR ZERO. * PCLCT CLC 0,C PCLCR CLC 0,C JMP #P.50,I * CCLCT CLC 0,C CCLCR CLC 0,C JMP #C.50,I * STC STC 0,C CLC CLC 0,C OTA OTA 0 LIA LIA 0 * DEVDN OCT 40000 DEVICE DOWN MASK MTOWN OCT 10000 MFHNT OCT 176777 MFST OCT 177400 M3777 OCT 3777 STC1S NOP CONFIGURED STC XX,C (SEND BOARD) STC1R NOP CONFIGURED STC XX,C (RECEIVE BOARD) SETCN NOP IF -1 THEN SET CONTROL ON BOARD SYNFL NOP SYNC-REF.CMD, IF SYNC HUNT; OR ZERO MSK14 OCT 140000 * * SET CONTROL, CLEAR FLAG ON SEND BOARD SYN2S NOP JSB SYN7 OUTPUT CHAR LDA STC1S CONFIGURE INSTRUCTIONS FOR STA STC1 SEND BOARD STA STC2 JSB SYN3S READ STATUS SSA,RSS DATA SET OFF ? JMP DSOF YES SLA,RSS CLEAR-TO-SEND OFF ? JMP MODFL YES CCA STA SETCN STC,C FLAG LDA CCLCR STA CCLC STݮA PCLC JSB EXIT EXIT DRIVER FOR NOW JMP SYN2S,I RETURN * * SET CONTROL, CLEAR FLAG ON RECEIVE BOARD SYN2R NOP LDA STC1R CONFIGURE INSTRUCTIONS FOR STA STC1 RECEIVE BOARD STA STC2 CCA STA SETCN SET CONTROL AND CLEAR FLAG UPON LDA CCLCT STA CCLC STA PCLC JMP SYN2R,I RETURN * * GET SEND BOARD STATUS SYN3S NOP SSTA LIA 0 LOAD A-REG WITH STATUS BITS RAL,RAL JMP SYN3S,I RETURN * * GET RECEIVE BOARD STATUS SYN3R NOP LIA3R LIA 0 LOAD A-REG WITH STATUS BITS JMP SYN3R,I RETURN * * CCADR NOP LDB N13 STB SYN3S SET 13 WORD TRANSFER LDB CCADD STB SYN3R SET DESTINATION ADRS LDA BCCFL AND MASK GET LINE CODE SYN CHAR LDB ASCCC CPA ECCC+11 LINE CODE = EBCDIC ? LDB EBCCC YES MUST BE ASCII. LOOP2 LDA B,I TRANSFER STA SYN3R,I A WORD. INB BUMP SOURCE ADDRESS ISZ SYN3R BUMP DESTINATION ADDRESS ISZ SYN3S ALL DONE ? JMP LOOP2 NO JMP CCADR,I YES, LEAVE. * * SET UP BOARD TO SEND * SYN5 NOP STA SEC3C SET TIMEOUT LDA SSEND GET SYNC CONFIGURED CONTROL WORD OTA3S OTA 0 OUTPUT TO I/O BOARD CLB JSB SYN7 SEND BLANKS JMP SYN5,I RETURN * * * SET UP BOARD TO RECEIVE * SYN6 NOP LDA STOR GET TURN-AROUND CONTROL WORD LDB DUPLX GET DUPLEX FLAG SLB,RSS SKIP IF FULL DUPLEX OTA4S OTA 0 CHANGE SEND BOARD TO RECEIVE CONDITION LDA SREVC GET SYNC CONFIGURED CONTROL WORD OTA4R OTA 0 OUTPUT TO I/O BOARD JMP SYN6,I RETURN * * * SEND CHARACTER TO THE I/O BOARD (CHARACTER IN B) * * SYN7 NOP LDA B AND MASK MASK EXTRANEOUS BITS OTA2S OTA 0 OUTPUT TO SEND BOARD TSW2 NOP TRACE SWITCH JMP SYN7,I RETURN IO$R BIT15 JMP TTRAC CREATE A TRACE ENTRY * * * GET RECEIVED CHARACTER AND PLACE IN A-REG * DOLIA NOP JSB SYN2R ENABLE RCV INTERRUPTS JSB EXIT AWAIT NEXT WORD JSB SYN3R GET CHARACTER FROM RECEIVE BOARD ALF,RAR SLA,RSS DATA SET OFF ? JMP DSOF YES SSA RECEIVED CARRIER FAILED ? JMP DOLIX NO CCA YES STA CARCT SET "CARRIER FAILED" FLAG LDA SREVC AND MFHNT OTA5R OTA 0 DISABLE LINE STATUS INTERRUPT DOLIX JSB SYN3R AND MASK TSW3 NOP TRACE SWITCH JMP DOLIA,I RETURN * * TTRAC: TIME TRACE ROUTINE TO CREATE A 2 WORD ENTRY COMPLETE * WITH LOWER TIME STAMP. ALSO REPORTS NEW UPPER TIME * STAMP IF NEEDED. * TTRAC LDB $TIME+1 FETCH UPPER TIME STAMP CPB LTIME SAVE AS LAST REPORTED? JMP TRAC2 YES, THEN JUST REPORT DATA & LOWER TIME STB LTIME NO, RESET AND REPORT NEW UPPER TIME STA TTEMP+1 LDA BIT14 JSB TRACE LDA TTEMP+1 FETCH BACK DATA BYTE TRAC2 LDB $TIME JSB TRACE CREATE DATA ENTRY LDA TTEMP RESTORE AREG SSA WHICH WAY OUT? JMP SYN7,I JMP DOLIA,I * * TRACE: SUBROUTINE TO CREATE A TWO WORD ENTRY INTO THE TRACE * BUFFER. CHECKS FOR AND INDICATES OVERRUN CONDITIONS. * TRACE NOP STA TTEMP SAVE A-REG LDA WRPT,I STB 0,I SAVE B-REG FIRST INA LDB TTEMP STB 0,I THEN A-REG INA CPA BFEN,I END OF TRACE BUFFER? LDA TBUF,I YES, RESET POINTER STA WRPT,I CPA RDPT,I OVERRAN READ POINTER? ISZ OVRN,I YEP, TELL SOMEONE NOP JMP TRACE,I * TTEMP BSS 2 LTIME NOP * CARCT NOP CARRIER FAIL COUNTER * DUPLX NOP 0 FOR HLF-DUPLEX, 1 FOR FULL DUPLEX * * PASSWORD VALIDATION ROUTINE PSW NOP CPA PSWD PASSLSWORD CORRECT ? JMP PSW,I YES, THEN RETURN. LDB BIT1 SET PASSWORD VIOLATION JMP MVIOL+1 * VALIDATE ON-LINE CONDITION ONLN NOP LDA LINE SZA TERMINAL ON-LINE JMP ONLN,I YES, THEN RETURN. JMP MVIOL RECORD MODE VIOLATION * ERCNT NOP JSB UPCAR BRING UP CARRIER LDA M8 STA ERROR SETUP ERROR RETRY COUNTER JMP ERCNT,I M8 DEC -8 * * VALIDATE OFF-LINE CONDITION OFLN NOP LDA LINE SZA,RSS TERMINAL OFF-LINE ? JMP OFLN,I YES, THEN RETURN. JMP MVIOL RECORD VIOLATION IN STATISTICS * * VALIDATE RECEIVE MODE CONDITION RMD NOP LDA EQT9,I JSB PSW CHECK PASSWORD LDA RCSND SZA,RSS IN RECEIVE MODE ? JMP RMD,I YES, THEN RETURN. JMP MVIOL RECORD MODE VIOLATION * * VALIDATE CONTROL MODE CONDITION CNTMD NOP JSB ONLN VALIDATE THAT ON-LINE LDA EQT5,I GET PREVIOUS STATUS AND P12 GET XMIT AND REC BITS SZA,RSS TRML IN XMIT OR REC MODE ? JMP CNTMD,I NO, THEN IT IS OK. * MVIOL LDB BIT2 GET (B) FOR MODE VIOLATION JSB SET SET VIOLATION IN STATISTICS * REJ2 LDA EQ5,I SET 'OPERATION IN ERROR' IOR P1 IN STANDARD STATUS WORD. STA EQ5,I LDA P2 REG-A = 2 FOR ERROR RETURN CLB STB FUNC ERASE FUNCTION HOLDER. JMP #I.50,I RETURN EQ5 EQU 1664B * * *** HANDSHAKE PROCESSOR *** * * EXECUTION STEPS: * 1. REJECT IF PASSWORD IS INCORRECT. * 2. REJECT IF TERMINAL ON-LINE. * 3. WAIT FOR OPERATOR TO DIAL REMOTE. * 4. SEND "ENQ" CHARACTER TO REMOTE. * 5. WAIT FOR "ACK0" OR "RVI" FROM REMOTE. * 6. ACTIVATE THE "TTD" MODULE TO FUNCTION FOR THE * TIME SPECIFIED BY THE "#COMN" ROUTINE. * * HNDSK LDA EQT7,I JSB PSW CHECK PASSWORD JSB OFLN CHECK MODE JSB EXST G CLEAN EXTENDED STATUS JSB TACTZ * * REQUEST ACCEPTED. SET UP I/O BOARD. * LDA SEC10 JSB SYN5 PRIME I/O BOARDS HDSK1 JSB SYN3S GET STATUS OF SEND BOARD SSA DATA SET READY ? JMP BHND1 YES BHND LDA EQTM SET 1 SEC TIMER LOOP JSB TADRS AT "HDSK1" JMP HDSK1 * BHND1 SLA CLEAR-TO-SEND UP ? JMP CTSOK YES. ISZ SEC3C 10 SEC OVER ? JMP BHND NO JMP MODFL YES, REPORT FAILURE. * CTSOK ISZ EOF INDICATE CONTROL MODE CLA,INA SET UP THE A REGISTER JMP CTSXT FOR A BUMMED EXIT! * * SKP * * *** "ENQ" PROCESSOR *** * * THIS ROUTINE SENDS AN "ENQ" TO REMOTE AND EXPECTS * TO RECEIVE ACK0 OR RVI. IF SOME OTHER CHARACTER IS * RECEIVED, "ENQ" WILL BE RESENT UP TO 127 TIMES.IF * ACK0 IS STILL NOT RECEIVED THEN "DEL EOT" WILL BE * SENT AND THE LINE DROPPED. SUCCESSFUL EXECUTION * ENABLES THE "TTD" MODULE. CONTROL IS THEN RETURNED * TO THE USER. * THIS MODULE IS USED BY "HANDSHAKE" AND "RECEIVE TO * SEND" * * * SENQ LDA M127 SET THE BID CNT TO 127 TRIES STA ERROR SET ERROR RETRY COUNTER LDA EQTM SET CURRENT RECEIVE TIMEOUT STA CRTM JSB UPCAR BRING UP CARRIER * DD3 LDA ENQ "ENQ" JSB BLDBF SETUP BUFFER WITH ENQ DEC 3 STB SCASE SET SPECIAL CASE FLAG JSB CNTRL SEND "ENQ" THROUGH CONTROL ROUTN * * TEST IF REMOTE SENT BACK "ACK0" OR "RVI" * CPA ENQ RECEIVED ENQ? JMP GOTEQ YES - DEFER TO REMOTE CPA ACK0 RECEIVED "ACK0" ? JMP SHDSK YES, ACTIVATE "TTD" MODULE. CPA RVI RECEIVED "RVI" ? JMP SHDSK YES, ACTIVATE "TTD" MODULE. LDA N13 ALLOW 130 MSECS BEFORE UPCAR JSB TADRS * JSB UPCAR BRING UP CARRIER ISZ ERROR IS THIS THE LAST TRY ? NLHJMP DD3 NO, TRY AGAIN. * * REMOTE REFUSES TO SEND "ACK0" OR "RVI". DISCONNECT * * * *** SEND "DLE EOT" TO REMOTE AND DROP LINE *** * ENDAL CLA,INA STA INERR SET "OPERATION IN ERROR" EDALL LDA EOT BUFFER STA RSEND+2 LDA DLE JSB BLDBF "PAD DLE EOT" IN SEND BUFFER DEC 4 JSB CNTRL SEND "DLE EOT".RETURN AT "CCSS". * * * "DLE EOT" WAS SENT. TAKE TERMINAL OFF-LINE. CLOSE CLA,INA STA INERR SET "OPERATION IN ERROR" CCSS CLA STA LINE SET TRML "OFF-LINE" LDA MSK14 OTA1S OTA 0 TURN-OFF SEND BOARD & OTA1R OTA 0 RECEIVE BOARD JSB WACTZ CLEAN WACK/TTD & SPEC CASE FLAG JMP COMPT DO COMPLETION * * N* UPDATE STATUS. "ACK0" OR "RVI" RECEIVED. * SHDSK CLB ZERO STB EOF LAST RECORD NOT AN END-OF-FILE. CPA RVI REMOTE REQUEST TO SEND ? LDB BIT4 YES. SET "REQ TO SEND". STB RQ2SD UPDATE REQUEST TO SEND. CCA SET NEXT REPLY STA BCONT FOR ACK1 STA RCSND PUT IN SEND MODE. LDA RCTM RESET RECEIVE TIMEOUT TO 3 SEC STA CRTM * * ENABLE "TEMPORARY TEXT DELAY" MODULE. * CLA,INA ACTIVATE STA WACT "TTD" MODULE STA SCASE CTSXT STA LINE SET "ON-LINE" JMP COMPT RETURN TO USER * M127 DEC -127 SEC3 DEC -150 HALF OF 3 SECS SEC3C NOP CLR-TO-SEND TIMEOUT FOR MODEM SEC10 DEC -10 10 SEC COUNTER EQTM DEC -100 REC TIMEOUT FOR CONTENTION CRTM NOP CURRENT REC TIMEOUT BEING USED * * * * *** LINE STATUS CHECK *** * * THIS ROUTINE CHECKS THAT THE DATA SET IS ON. IF * IT IS OFF THEN THE I/O BOARDS ARE TURNED OFF AND * THE OPERATION IS TERMINATED WITH AN "IN ERROR" * CONDITION . * LCHCK NOP JSB SYN3S GET SEND BOARD STATUS SSA DATA SET READY ? JMP LCHCK,I YES. RETURN TO CALLER. DSOF LDB BIT12 NO, RECORD FAILURE AND EXIT. JSB SET (NO RETURN FROM SUBROUTINE) * * SKP * * * *** BRING UP CARRIER *** * THIS ROUTINE DISABLES INTERRUPTS ON RECEIVE * BOARD AND WAITS FOR A CERTAIN AMOUNT OF * TIME BEFORE PROCEEDING FURTHER. THIS ALLOWS THE * REMOTE TO QUIET DOWN. THE BOARDS ARE THEN SET UP * TO SEND AND 3 SECS ARE ALLOWED FOR CLEAR TO SEND * TO COME UP. THREE SYNCS ARE OUTPUT BEFORE * RETURNING TO THE CALLING PROCESSOR. * * UPCAR NOP CCA JSB TADRS SET QUICK TIMEOUT & EXIT * LDA SEC3 JSB SYN5 SET UP SEND BOARD TO SEND * * CHECK"CLEAR TO SEND" * UPCA1 JSB SYN3S SLA,RSS CLEAR-TO-SEND ? JMP UC10 NO. WAIT. CLB,INB YES. SYN,1CHRONIZE. JSB SYNRZ JMP UPCAR,I RETURN TO CALLER. * * UC10 ISZ SEC3C 3 SEC UP ? JMP UC1 NO, POLL AGAIN. MODFL LDB BIT5 RECORD MODEM FAILURE AND EXIT JSB SET (NO RETURN FROM SUBROUTINE) * UC1 JSB LCHCK CLOSE OPERATION IF DATA SET OFF LDA M2 JSB TADRS SET 20 MSEC TO CHK CLR-TO-SEND JMP UPCA1 SKP * * *** CONTROL SUBROUTINE *** * USE: PERFORMS LINE TURNAROUND (FROM SEND TO RECV). * EXECUTION: * * 1.TRANSMITS A STRING OF CHARACTERS. * * 2.DROPS CARRIER. * * 3.WAITS FOR CARRIER FROM REMOTE. * THERE ARE THREE CASES POSSIBLE : * A. IN "HANDSHAKE" OR "REC-TO-SEND", NO RESPONSE * FOR 1 SEC AFTER SENDING ENQ (OR 3 SEC IF * WACK WAS RECEIVED), THEN RESEND ORIGNAL * BUFFER UP TO 8 TIMES BEFORE DROPPING LINE. * B. IN SEND MODE DURING "WRITE" , RECEIVE MODE * DURING "WRITE CONV" OR IN SEND MODE DURING * TTD GENERATION AND NO RESPONSE FOR 3 SEC, THEN * SEND ENQ BUFFER TO SOLICIT RESPONSE. TRY UP * TO 8 TIMES BEFORE DROPPIN THE LINE. * C. IN RECEIVE MODE DURING READ OR IN WACK * GENERATOR AND NO RESPONCE FOR 30 SECS (LONG * TIMEOUT) THEN SEND "DLE EOT" AND DROP LINE. * * 4. GET A CONTROL CHARACTER SEQUENCE FROM REMOTE : * A. IF CHARACTER = "WABT" THEN RETURN TO STEP 1 * WITH CHARACTER STRING = "ENQ". * B. IF CHAR="ENQ" AND IN REC-TO-SEND OR WACK * PROCESSOR THEN RETURN TO THE PROCESSOR. IF IN * ANOTHER PROCESSOR THEN THERE WAS A XMISSION * ERROR; THE ERROR RECOVERY PROCEDURE OF STEP 3 * IS APPLIED. * C. IF "DLE EOT" IS RECEIVED OR SENT, THE LINE * WILL BE DROPPED AND DRIVER IS RELEASED. * D. ANY OTHER CONTROL CHARACTER SEQUENCE WILL * CAUSE A RETURN TO THE CALLING PROCESSOR. * * CALLING SEQUENCE: * REG-A = STARTING ADDRESS OF STRING TO BE SENT. * REG-B = POSITIVE STRING LENGTH (UNPACKED). * JSB CNTRL * NOTE: I/O BOARD MUST HAVE CARRIER ON. PLACE CHAC *  SEQUENCE TO BE RESENT (FOR ERROR RECOVERY) * IN "RESEND". PLACE LENGTH OF SEQUENCE IN * "RESLN" (MAXIMUM LENGTH IS 5 CHACS). IF IN * "RECEIVE-TO-SEND", "AUTOANSWER" OR "WAIT- * BEFORE-TRANSMIT" PROCESSOR THEN SET "SCASE" * = 1, OTHERWISE SET IT 0 . * * UPON RETURN: * * REG-A : RECEIVED CONTROL CHARACTER * * REG-B : IF 1 THEN "DLE" PRECEEDED RECEIVED * CONTROL CHARACTER . * * * *** INITIALIZATION SECTION *** * CNTRL NOP STA ADRS2 SAVE STRING STARTING ADDRESS CMB,INB STB CONT3 SAVE NEGATIVE STRING LENGTH CNTR7 STA ADRS1 POINTER STB CONT1 COUNTER JSB TIME? SET UP PROPER RECEIVE TIMEOUT * CNTR8 LDB ADRS1,I GET FIRST CHARACTER OF STRING JSB SYN2S ENABLE FLAG TO STC XX,C * * *** SEGMENT ONE: OUTPUT CHARACTER STRING *** * ISZ ADRS1 ISZ CONT1 FINISHED SENDING STRING ? JMP CNTR8 OUTPUT NEXT CHARACTER * LDB M4 ADB ADRS1 DLD 1,I CPB EOT AN "EOT" CHARACTER BEFORE PAD? RSS YES JMP *+3 NO CPA DLE WAS IT A DLE BEFORE THE EOT? JMP SLOW YES: TAKE TERMINAL OFF LINE! * * CHARACTER STRING HAS BEEN SENT. SET UP TO RECEIVE. * SETUP CLB INITIALIZE STB LOGC1 "DLE" NOT RECEIVED JSB SYNRZ GO OBTAIN SYNC.=0: RECEIVE MODE. SZA,RSS SYNC OBTAINED ? JMP SYXT YES * * SEGMENT THREE * THIS SEGMENT IS ENTERED WHEN A REPLY WAS EXPECTED * WITHIN 3 OR 1 SEC BUT SYNC INPUT ROUTINE FAILED * TO RECEIVE SYNC OR CNTRL ROUTINE DID NOT GET A * VALID BISYNC CHARACTER. THIS ROUTINE CAUSES THE * RESEND BUFFER TO BE TRANSMITTED UP TO 7 TIMES. * LDA REO8 GET FUNC CODE FOR 'SEND EOT' CPA FUNC CURRENTLY PROCESSING 'SEND EOT'? JMP EOTER YES, RETURN TO PROCESSOR. JSB UPCAR BRING UP CARRIER ISZ ERROR > IS THIS THE 8TH. TIME ? JMP RRRR NO. TRY AGAIN. LDB BIT8 JSB SET RECORD REPEATED REC TIMEOUT JMP ENDAL * * RRRR LDA RESH GET ADDRESS OF RE-SEND BUF IN'A' LDB RESLN AND LEN OF RESEND BUF IN'B'. CMB,INB MAKE LENGTH NEGATIVE. JMP CNTR7 * SKP * * *** SEGMENT FOUR: THIS SEGMENT ANALYZES * CHARACTERS RECEIVED FROM REMOTE. *** * CNTR4 JSB READ? DOING READ TYPE REQUEST? CLA,INA NO, SET "LAST CHAR WAS DLE" SYXR STA LOGC1 SYXT JSB DOLIA GET CHARACTER CPA SYN DISREGARD SYN JMP SYXTT AND RESET TIMEOUT CPA ENQ CHARACTER="ENQ" ? JMP AENQ YES. GO ANALYZE. CPA DLE CHARACTER="DLE" ? JMP CNTR4 YES, SKIP ANALYSIS * LDB LOGC1 LAST CHARACTER SLB,RSS A "DLE" ? JMP ANALZ NO, CONTINUE CHECKING. * CPA ACK0 YES. IS PRESENT CHAR AN "ACK0" ? JMP FOUND YES, RETURN TO CALLING PROCESSOR CPA ACK1 IS IT ACK 1 ? JMP FOUND YES, RETURN TO CALLER. * CPA EOT PRESENT CHARACTER AN "EOT" ? JMP CLOS YES. DROP THE LINE CPA WABT PRESENT CHARACTER A "WACK" ? RSS YES. FORGET ANLYZING. JMP ANALZ NO. CONTINUE CHECKING. * LDA RCTM RESTORE TIMEOUT TO NORMAL 3 SEC STA CRTM RECEIVE TIMEOUT * JSB ERCNT UP CARRIER & SET ERROR COUNT LDA SYN STORE "PAD" CHARACTER STA PAD1 IN REPLY BUFFER LDA ENQ RECEIVED CHARACTER WAS "WABT". STA REPLY SEND LDA PADD "SYN ENQ PAD PAD" STA REPLY+1 TO REMOTE STA REPLY+2 LDA REPAD AND LDB P4 AWAIT JMP CNTRL+1 REPLY. * ANALZ JSB READ? PROCESSING READ TYPE REQ ? LDB CCADD SEARCH IF CHAR IS ANY OF EOT, STB TEMP ETB,ETX,NAK,RVI,SOH OR STX LDB M7 CONTROL CHARACTERS`. LOOP1 CPA TEMP,I JMP FOUND IF FOUND GO TO "FOUND" ISZ TEMP OTHERWISE INB,SZB DROP OUT OF LOOP. JMP LOOP1 * STB LOGC1 SET 'LAST CHAR A DLE' TO FALSE JSB SYN2R RECEIVED CHAR NOT A CONTROL CHAR JMP EXITR AND EXIT * * AENQ LDB SCASE CHAR="ENQ". IS DRIVER IN "WABT", SZB OR "RC2SD" MODE ? JMP FOUND YES. GIVE CONTROL TO PROCESSOR. JSB UPCAR BRING UP CARRIER. LDB CONT3 LDA ADRS2 ISZ ERROR TRANSMISSION ERROR 8TH TIME ? JMP CNTR7 NO, PREPARE TO RESEND STRING. JMP ILSQ RECORD REPEATED ILLEGAL SEQUENCE * SYXTT LDA TTTT JSB TACTV RESET TIMEOUT DEF .TOUT CLA JMP SYXR * * TEST IF CURRENTLY SERVICING READ OR WRITE * TYPE REQUEST. IF SO THEN DO (P+1) RETURN * OTHERWISE EXIT : =CHAR., =DLE FLAG. * READ? NOP STA TEMP SAVE RECVD CHAR TEMPORARILY LDA FUNC AND M77 GET CURRENT REQUEST CODE STA B (B) = CURRENT REQ CODE LDA TEMP (A) = RECEIVED CHARACTER CPB P1 IF DOING READ TYPE REQUEST FOUND CLB,RSS JMP READ?,I RETURN STB EQT15,I DEACTIVATE TIMER LDB LOGC1 GET "DLE" FLAG IN B REG JMP CNTRL,I RETURN TO PROCESSOR SKP * * "DLE EOT" RECEIVED PROCESSOR * CLOS LDB BIT11 JSB SET RECORD DLE EOT RECEIVED LDB BBMB SET ENTRY AT 'CLOSE' JMP CLOW ALSO CHECK CARRIER FAIL FLAG BBMB DEF CLOSE * * "DLE EOT" SENT PROCESSOR * SLOW LDB BIT10 JSB SET RECORD DLE EOT SENT LDB DCLOS SET ENTRY AT 'CCSS' CLOW LDA N13 SET 130 MSEC DELAYED ENTRY STB *+2 JSB TACTV NOP LDA CARCT LDB BIT13 SZA CARRIER FAIL FLAG SET ? JSB SET YES, RECORD THIS FACT. JMP EXITR DCLOS DEF CCSS * * * * * * * *** DATA **X * * ADRS1 BSS 1 STRING ADDRESS OF CONTROL SEQENC ADRS2 BSS 1 ORIGNAL BUFFER START ADDRESS. CONT1 BSS 1 STRING LENGTH OF CONTROL SEQUENC CONT3 BSS 1 ORIGNAL BUFFER LENGTH ERROR BSS 1 ERROR COUNTER FOR RETRY. LOGC1 BSS 1 LOGICAL VARIABLE FOR "DLE" REPAD DEF PAD1 ADDRESS OF RE-TRY MESSAGE. PAD1 BSS 1 RE-TRY REPLY BSS 3 BUFFER RESH DEF RSEND ADDRESS OF RESEND BUFFER RESLN BSS 1 LENGTH OF RESEND BUFFER. RSEND BSS 5 RESEND CHARACTER SEQUENCE. SCASE NOP =1 IF IN WABT, AUTOANSWER,RC2SD. TEMP BSS 1 TEMPORARY STORAGE. S2RTM NOP SKP * * *** I/O BOARD SYNCHRONIZE *** * * ON ENTRY REG-B # 0 FOR TRANSMIT AND = 0 FOR RCV. * 'DATA-SET READY' MUST BE ON BEFORE ENTRY HERE. * TRANSMIT: BEFORE ENTRY INTO THIS ROUTINE, THE * "CLEAR-TO-SEND" MUST BE ON. THIS ROUTINE * TRANSMITS 3 SYNC CHARACTERS AND THE * REMOTE IS EXPECTED TO BE IN SYNCHRONIZA- * -TION THEREAFTER. * * RECEIVE: THIS ROUTINE OUTPUTS SYNC COMMAND WORD * TO THE INPUT SYNC RECOGNIZING CIRCUIT * AND SETS UP THE RECEIVE BOARD TO HUNT FOR * SYNC CHARACTER. ONE "RECEIVE TIMEOUT" * IS ALLOWED TO ACQUIRE SYNC AFTER WHICH * SYNC FAILURE IS REPORTED TO THE CALLING * PROGRAM (REG-A = 0). ONLY ONE * SYNC IS LOOKED FOR IN ORDER TO ALLOW * SUCCESSFUL OPERATION OF SYNC HUNT. * REC TIMEOUT IS EITHER 1, 3 OR 30 SEC. * SYNRZ NOP JSB LCHCK DROP LINE IF DATA-SET OFF. SZB,RSS SEND OR RECEIVE SYNC CHARACTERS? JMP IN RECEIVING. GO TO 'IN'. * * TRANSMIT SYNC CHARACTERS. * LDA SYNC GET THE SYNC CHARACTER. OTA7S OTA 0 SEND IT TO THE XMIT BOARD. LDA M3 SET UP LOOP FOR STA WORK THREE SYNC CHARACTERS. * OTPUT LDB SYN OUTPUT SYNC JSB SYN2S STC,C ON SEND BOARD. * * SEGMENT ONE: d~SEND INTERRUPTS CHANNELED HERE. * ISZ WORK ALL SYNCS SENT YET ? JMP OTPUT NO, SEND ANOTHER. JMP OBTND YES, RETURN. * * * RECEIVE SYNC CHARACTERS. IN LDA TTTT OBTAIN PROPER "RECEIVE TIMEOUT" JSB TACTV ENTER AT "TOUT" IF TIMEOUT BEFORE SYNC DEF .TOUT NOSYN LDA SYNC GET SYNC REFERENCE COMMAND STA SYNFL SET SYNC-HUNT FLAG FOR DVR50. JSB SYN6 SET XMIT BOARD TO TURN AROUND JSB SYN2R STC ,C ON RECEIVE BOARD JSB EXIT * SKP * * SEGMENT TWO: RECEIVE INTERRUPTS CHANNELED HERE * JSB SYN3R GET STATUS OF RECEIVE BOARD RAL POSITION BIT14 SSA SYNC ACQUIRED YET ? JMP NOSYN NO, SET UP HUNT AGAIN. RAR POSITION AND AND MASK MASK IN RECEIVED CHARACTER. CPA SYN IS INTERRUPT FROM SYNC ? CLA,RSS YES, THEN SYNC OBTAINED. JMP NOSYN FALSE INTERRUPT, TRY HUNT AGAIN. * * RECEIVE SYNC ACQUIRED * STA SYNFL CLEAR SYNC-HUNT FLAG. LDA SREVC OUTPUT RECV CONTROL WORD AFTER AND MFHNT MASKING OFF 'HUNT' BIT. IOR BIT8 ENABLE INT FROM LINE STATUS INDI OTA7R OTA 0 OUTPUT ON RECEIVE BOARD. LDA TTTT JSB TACTV RESET TIMEOUT DEF .TOUT OBTND CLA SET REG-A=0 FOR SYNC OBTAINED JMP SYNRZ,I RETURN. * * * THE CLOCK INTERRUPTS HERE IF RCV BOARD DOES NOT * GET TWO SYNCS WITHIN THE RECV TIMEOUT. * .TOUT LDA FUNC LDB LGTM CPB TTTT WAS IT A LONG TIMEOUT? CPA REO8 YES, THEN WAS IT CALLED BY "SEND EOT"? JMP SYNNO RETURN WITH SYNC FAILURE CPA REO9 CALLED BY 'AUTO-ANSWER' ? JMP BRKCK YES, CHECK FOR OPERATOR ABORT. CPA REO10 CALLED BY 'SD2RC' ? JMP SYNNO YES, THEN RETURN. LDB BIT9 RECORD LONG TIMEOUT JMP EDBD * BRKCK LDA PSWD GET RJE'S ID ADDRESS ADA P20  POINT TO ID WORD #21 LDB A,I GET THE CONTENTS BLF,SLB IF THE BREAK FLAG IS SET, JMP BRKEX TAKE CONTROL MODE EXIT SYNNO CCA JMP SYNRZ,I ELSE RETURN: #0. * TTTT NOP P20 DEC 20 SKP * * *** RECEIVE TIMEOUT ALLOCATION ROUTINE *** * * THIS ROUTINE IS USED BY THE I/O SYNCHRONIZATION * SYN HUNT ROUTINE TO GET THE PROPER RECEIVE TIMEOUT * FOR THE CURRENT RECEIVE OPERATION. ON RETURN REG-A * HAS THE APPROPRIATE TIMEOUT. DEPENDING UPON THE * STATE OF THE LOCAL TERMINAL, THE TIMEOUT ALLOCATED * FOR RECEIVING SYNCHRONIZATION CAN BE EITHER A * 'LONG RECEIVE TIMEOUT'(30 SEC), A 'NORMAL RECEIVE * TIMEOUT'(3 SEC) OR 'SHORT RECEIVE TIMEOUT'(1 SEC). * * 1. 'SHORT RECEIVE TIMEOUT' (1 SEC) IS USED WHEN : * (A). THE LOCAL TERMINAL IS BIDDING FOR THE LINE. * 2. 'NORMAL RECEIVE TIMEOUT' (3 SEC) IS USED WHEN : * (A). LOCAL TERMINAL IS IN TRANSMIT MODE. * 3. 'LONG RECEIVE TIMEOUT' (30 SEC) IS USED WHEN : * (A). LOCAL TERMINAL IS IN RECEIVE MODE. * (B). LINE IS IN CONTROL MODE FOLLOWING * TRANSMISSION OF AN 'EOT' . * (C). WAITING FOR REMOTE TO BID FOR THE LINE. * * TIME? NOP LDA S2RTM LDB FUNC CPB REO10 SEND-TO-RECEIVE JMP TTXX YES, USE LONG T.O OR 20 SECS LDA LGTM SET TO LONG TIMEOUT CPB REO9 AUTO-ANSWER JMP TTXX YES CPB REO6 HANDSHAKE ? JMP STIME YES CPB REO7 REC-TO-SEND ? JMP STIME YES CPB REO8 SEND EOT ? JMP TTXX YES CPB REO5 WRITE CONV ? JMP RTIME YES LDB RCSND SZB TRANSMIT MODE ? RTIME LDA RCTM SET 3 SEC RECEIVE TIMEOUT TTXX STA TTTT SAVE CURRENT RECEIVE TIMEOUT JMP TIME?,I RETURN WITH TIME * STIME LDA CRTM SET SHORT RECEIVE TIMEOUT JMP TTXX * * * SKP * *** 'TTD' / 'WACK' GENERATOR *** * * USE: WHILE IN TRANSMIT MODE THIS SUROUTINE WILL * HOLD OFF THE RECEIVING STATION. IT IS DURING * THE EXECUTION OF TTD OR WACK MODULE THAT * USER REQUESTS ARE ALLOWED TO PENETRATE THE * DRIVER. * EXECUTION: * 1. WAIT FOR 'TRANSMIT TIME-OUT'. * 2. SET DEVICE DOWN, SEND "STX ENQ"/"DLE WACK" . * 3. TEMINAL SENDS BACK "NAK"/"ENQ". * 4. WAIT FOR 10 MSEC BEFORE EXECUTING STEP 5. THIS * ENSURES THAT 'RTE' WAS NOT EXECUTING WHEN $IOUP * IS ENTERED. * 5. ALLOW ANY STACKED REQUESTS TO BE SERVICED BY * ENTERING RTIOC AT $IOUP WITH REG-A = EQT#. * 6. GO TO STEP 2 . * WACTZ NOP CLA STA WACT CLR 'GENERATOR ON' FLAG STA SCASE CLR 'SPECIAL CASE FLAG' ON. JMP WACTZ,I RETURN TO CALLER * WABT1 LDA EQT5,I SET IOR DEVDN DEVICE STA EQT5,I DOWN IMXMT JSB ERCNT UP CARRIER & SET ERROR COUNT LDA WACT SSA DOES FLAG INDICATE "WACK" GEN ? JMP WBUF YES. FORMULATE "WACK" BUFFER. LDA NAK STA CRPY SET REPLY CHAR= NAK LDA SYN BUILD THE "TTD" TRANSMISSION SEQUENCE: STA TSEND CONTAINING "SYN STX ENQ PAD PAD" LDA PADD STA TSEND+3 STA TSEND+4 LDA ENQ STA TSEND+2 JSB BLDBF FORM RESEND BUFFER WITH DEC 3 "SYN ENQ PAD PAD" LDA STX STA TSEND+1 LDA TSBF LDB P5 WBRET JSB CNTRL GO OUTPUT BUFFER CPA CRPY IS REPLY AS EXPECTED ? RSS YES. SKIP NEXT INSTRUCTION. JMP IMXMT NO. TRY AGAIN IMMEDIATLY. LDB BIT14 ISZ #N# ALL TTD'S/WACK'S SENT ? CCA,RSS NO JMP EDBD YES JSB TADRS * LDA XMTM SET UP TO RESEND TTD/WACK IF NO JSB TACTV DEF WABT1 IOUPX LDB M2 ADB #C.50 DVR50 WILL EXIT TO $IOUP LDA EQT# JMP 1,I * * FORMULATE "WACK" BUFFER: * WBUF LDA ENQ STA CRPY SET REPLY CHAR = ENQ LDA WABT STA 0@RSEND+2 IN SEND BUFFER LDA DLE JSB BLDBF SETUP "WACK" BUFFER CONTAINING: DEC 4 "SYN DLE ,(OR ) PAD PAD" JMP WBRET RETURN * #N# BSS 1 WACT BSS 1 "WACK"/"TTD" GENERATOR ON FLAG. CRPY BSS 1 REPLY CHAR EXPECTED TSBF DEF TSEND TSEND BSS 5 TEOF NOP EOT RECEIVED TEMP FLAG SKP * * * * *** COMPLETION SECTION *** * * THIS SECTION IS CALLED BY A PROCESSOR WHEN AN * OPERATION HAS BEEN COMPLETED. THIS SECTION IS * CALLED BOTH WHEN A USER REQUEST COMPLETES AND * ALSO IN BETWEEN REQUESTS IF THERE IS A PREMATURE * TERMINATION RESULTING FROM AN ERROR CONDITION. * * * EXECUTION: * * 1. UPDATE STATUS. * 2. GO TO AN EXIT PROCESSOR TO DETERMINE THE * MODE OF EXIT TO BE PERFORMED AND EXIT FROM * THE DRIVER ACCORDINGLY. * * * * * COMPT LDA EQT5,I INITIALIZE STATUS BYTE TO ZERO. AND MFST IOR INERR OP-IN-ERROR STATUS LDB OVRFL SZB BUFFER OVERFLOW ? IOR BIT5 YES. SET BIT 5 OF STATUS. IOR RQ2SD SET "REQ TO SEND" STATUS LDB LINE SZB,RSS IS TERMINAL ON LINE ? JMP COMPV NO IOR BIT1 YES. SET BIT 1 OF STATUS. LDB EOF SZB SET TERMINAL IN CONTROL MODE ? JMP COMPV YES , THEN FORGET XMIT/REC FLAG IOR BIT2 SET BIT 2 IF IN XMIT MODE CPB RCSND IS TRML IN REC MODE ? ADA BIT2 YES. SET BIT 3 OF STATUS. * COMPV STA EQT5,I STORE UPDATED STATUS IN EQT5. TSW4 NOP TRACE SWITCH JMP *+5 AND M177 SAVE EQT5 STATUS IOR BIT11 INSERT STATUS INDICATOR LDB EQT12,I REPORT EXTENDED STATUS TOO JSB TRACE LDA EOF PICK UP EOT RECEIVED FLAG STA TEOF AND SAVE IT TEMPORARILY LDA TLOG STA EQT6,I STORE XMISSION LOG TEMPORARILY. JSB SCLR CLEAR.DRIVER STATUS FLAGS CCA JSB TADRS WAIT 10 MSEC FOR PROPER COMPLETION * LDA FUNC GET FUNCTION CODE SZA,RSS IS DRIVER IN-BETWEEN REQUESTS ? JMP IOUPX YES CLB CPA REO1 NO: PROCESSING 'ACK-READ'? JMP COMPX YES - RETAIN EOT INDICATOR CPA REO6 HANDSHAKE NEEDS 5 MIN TIMEOUT TOO! JMP COMPX CPA REO8 SEND EOT NEEDS 5 MIN T.O. TOO. JMP COMPX CPA REO10 PROCESSING 'SEND-TO-RECEIVE'? JMP *+2 YES, RETAIN EOF INDICATION. STB TEOF IF NEITHER, CLR THE EOF INDICATOR COMPX AND P3 MASK FUNC TO GET REQ CODE SZA CPA P3 STB EQT6,I NOT READ OR WRITE REQUEST. STB FUNC CLEAN UP FUNCTION INDICATOR CCA ADA #C.50 DECREMENT RETURN ADDRESS TO STA #C.50 MAKE A (P+2) EXIT. CPB WACT JMP MAXTM DON'T SWITCH ON TTD WACK GEN LDA #NUMB SET NUMBER OF TTD'S/WACK'S (NEG) STA #N# TO BE SENT LDA XMTM ENTER AT SEGMENT TWO JSB TACTV DEF WABT1 * MXRET LDA EQ14 CHANGE BASE PAGE POINTER TO STA EQ15 PREVENT RESETTING OF CLOCK. CLA REG-A =0 LDB EQT6,I REG-B =0 OR TLOG JMP #C.50,I RETURN TO USER * MAXTM CPB LINE TERMINAL ON LINE? JMP MXRET NO LDA CMDTM FETCH CONTROL MODE T.O. LDB TEOF GET THE EOF INDICATOR SZB,RSS IS THIS A (QUALIFIED) EOT CONDITION? CCA NO, WAIT FOR ONLY 20 SECS STA CNTTM PAUSE LDA M2000 PAUSE FOR 20 SECS JSB TACTV DEF CNTOF JMP MXRET * BIT15 OCT 100000 * CNTOF LDA CNTTM SSA WAITING INDEFINITELY? ISZ CNTTM NO, DONE WAITING? JMP PAUSE NO, WAIT SOMEMORE LDB BIT15 YES, JSB SET RECORD CONTROL TIME-OUT LDA EQT5,I IOR DEVDN STA EQT5,I SET DEVICE DOWN JMP TOFF GO TO DISCONNECT P`ROCESSOR * * SKP * * *** AUTO-ANSWER & REC-TO-SEND PROCESSOR *** * * EXECUTION: * 1. REJECT REQUEST IF PASSWORD IS ILLEGAL OR * TERMINAL IS ALREADY ON-LINE. * 2. SET UP I/O BOARDS TO RECEIVE. GIVE 130 MSEC * FOR BOARDS TO CALM DOWN AND EXIT WITH REQUEST * INITIATED. * 3. ENTER AFTER 130 MSEC AND CHECK IF 'RECD LINE * SIGNAL DETECT ' (CARRIER DETECT) IS ON.IF NOT * THEN SET UP 130 MSEC LOOP FOR STEP 3. IF IS * ON THEN REMOTE IS CALLING AND GO TO STEP 4. * 4. GET INTO SYNCHRONIZATION WITH REMOTE. * 5. GET "ENQ" FROM REMOTE. * 6. ACTIVATE "WACK" PROCESSOR AND RETURN TO USER. * * * * * LSN20 LDB REO10 RESET FUNCTION TO SEND-TO-RECV STB FUNC LDA M2000 PICK UP 20 SECOND COUNT RSS SD2RC LDA LGTM PICK UP LONG TIMEOUT COUNT STA S2RTM SETUP FOR TIME? JSB CNTMD CHECK CONTROL-MODE CONDITION RSS * * ANSWR JSB OFLN CHECK OFF-LINE CONDITION LDA EQT7,I JSB PSW CHECK PASSWORD JSB EXST CLEAN EXTENDED STATUS JSB WACTZ DEACTIVATE GENERATORS JSB TACTZ JSB TIME? SET LONG TIMEOUT FOR SYNCHRONIZATION. * ANSR1 LDA FUNC CPA REO10 CONTROL-TO-RECEIVE JMP ANSR.+1 YES, GO TO SYNC HUNT NOW. JSB SYN6 PRIME I/O BOARDS TO BE RCVR JSB SYN3R GET STATUS OF RECEIVE BOARD RAL,RAL SSA DATA SET READY ? JMP ANSR.+1 YES LDA EQTM NO, THEN WAIT ANOTHER SEC JSB TADRS JMP ANSR1 * * SET UP 'SYNC HUNT' LOOP WITHOUT ANY TIMEOUT * EVEN THOUGH CARRIER NOT DETECTED * * ANSR. JSB ANSR5 CHECK FOR REPETION CLB INDICATE 'RECEIVE' AND JSB SYNRZ GO INTO SYNCHRONIZATION. SZA SYNC ACQUIRED ? JMP ANSR. NO. TRY AGAIN. * * RECEIVE BOARD IN SYNC. SET UP TO GET "ENQ". * GETCR JSB DOLIA GET NEXT CHAR. FROM RECV BOARD. CPA ENQ IF IT IS AN 'ENLHNQ', THEN THE JMP GOTEQ REMOTE IS BIDDING FOR THE LINE. CPA SYN IF IT IS 'SYN', IGNORE: IT MAY BE A JMP GETCR LENGTHY SYNCHRONIZATION SEQUENCE LDA LGTM ELSE, IT'S AN INCORRECT BID, JSB TACTV OR A LOSS OF SYNC, SO ALLOW A DEF ANSR4 LONG TIMEOUT TO AWAIT NEXT BID. JMP ANSR.+1 BEGIN THE WAIT BY RE-ACQUIRING SYNC. * GOTEQ CLA,INA A VALID BID HAS BEEN DETECTED. STA LINE SET TERMINAL ON-LINE CLA STA EOF LAST RECORD NOT AN END-OF-FILE STA RQ2SD REMOTE NOT REQUESTING TO SEND SEOF2 CLA STA RCSND SET "RECEIVE" MODE STA BCONT SET REPLY FOR ACKO. * WACTN CCA STA WACT SET "WACK GEN" FLAG STA SCASE "SPECIAL CASE" FLAG JMP COMPT EXECUTE COMPLETION. * * ANSR4 LDB BIT9 JSB SET RECORD LONG TIMEOUT JSB ANSR5 DECIDE COMPLETION TYPE JMP CLOSE DO ERROR EXIT * * ANSR5 NOP LDA FUNC CPA REO9 AUTO-ANSWER ? JMP ANSR5,I YES, THEN RETURN, BRKEX ISZ EOF INDICATE CONTROL MODE JMP COMPT EXECUTE SD2RC COMPLETION * SKP * zJN* * * * *** DISCONNECT PROCESSOR *** * * * A "DISCONNECT" REQUEST IS VALID ONLY WHEN THE * TERMINAL IS ON-LINE. SINCE THE CLOCK IS ALWAYS * RUNNING WHEN TERMINAL IS ON-LINE , THIS REQUEST * WILL NOT COME THROUGH THE DRIVER FRONT-END IF NOT * ISSUED IN PROPER SEQUENCE. * * EXECUTION: * 1. VALIDATE PASSWORD. * 2. SEND "DLE EOT" TO REMOTE. * 3. TURN OFF I/O BOARDS. * 4. UPDATE STATUS. * 5. RETURN TO USER AFTER DATA-SET IS OFF. * * OFF LDA EQT7,I JSB PSW CHECK PASSWORD JSB ONLN CHECK ON-LINE CONDITION JSB EXST CLEAN EXTENDED STATUS JSB TACTZ AND RETURN WITH * TOFF JSB WACTZ CLEAN WACK/TTD & SPEC CASE FLAG STA PSWD CLEAN UP THE PASSWORD STA INERR CLEAN"IN ERROR" FLAG STA EOF "EOF" FLAG STA TLOG "TLOG" STA OVRFL "OVERFLOW" FLAG STA RQ2SD "RVI" FLAG JSB UPCAR JMP EDALL SEND "DLE EOT" AND DROP LINE. SKP * * * * *** SEND END-OF- TRANSMISSION *** * * THIS MODULE SENDS A LOGICAL END-OF-TRANSMISSION * (SYNC,EOT,PADD) TO THE REMOTE. IT THEN WAITS FOR * A REPLY FROM THE REMOTE. THE NEXT STEP IS DEPENDENT * ON THE REMOTE'S RESPONSE. * * REMOTE RESPONSE ACTION TAKEN * ------ -------- ------ ----- * 1. CHANGE STATE TO RECEIVE. * "ENQ" 2. ENABLE "WACK" MODULE. * 3. XLOG=1, BCONT=0. * * ANY OTHER 1. RETURN TO USER IN CONTROL * CHARACTER OR MODE. * NO RESPONSE. * * * ERROR REJECTS: * 1. ILLEGAL PASSWORD. * 2. TERMINAL OFF-LINE. * 3. LOCAL TERMINAL IN RECEIVE MODE. * * * SEOF LDA EQT7,I GET PASSWORD JSB PSW CHECK PASSWORD JSB ONLN CHECK ON-LINE CONDITION JSB EXST CLEAN EXTENDED STATUS STA WACT DEACTIVATE TTD/WACK GENERATORS * CLA,INA SET TRANSMISSION LOG STA TLOG A TO 1 CHARACTER SENT. JSB TACTZ * CCA SET LOGIC IN "CNTRL" SUBROUTINE STA SCASE TO RETURN IF "ENQ" IS RECEIVED. JSB ERCNT SET UP RETRY COUNTER LDA EOT BUILD BUFFER WITH EOT JSB BLDBF DEC 3 JSB CNTRL SEND CONTROL BUF TO REMOTE * * CHECK FOR RECEIVED CHARACTER * CPA ENQ RECEIVED "ENQ" ? JMP SEOF2 YES, SETUP RECEIVE MODE. EOTER JSB WACTZ STA BCONT RESET ACK0 ISZ EOF INDICATE CONTROL MODE JMP COMPT DO COMPLETION * * * * * *** RECEIVE-TO-SEND PROCESSOR *** * * THIS PROCESSOR PROVIDES A "HANDSHAKE" WHEN THE * TERMINAL IS ON-LINE. * * EXECUTION: * 1.SEND "ENQ" CHARACTER TO THE REMOTE. * 2.WAIT FOR "RVI" OR "ACK0" TO BE RECEIVED. * 3.ACTIVATE "TTD" GENERATOR. * 4.CHANGE TERMINAL STATE TO SEND MODE. * * ERROR REJECTS: * 1. ILLEGAL PASSWORD. * 2. TERMINA OFF-LINE. * 3. TERMINAL NOT IN CONTROL MODE. * * * RC2SD LDA EQT7,I JSB PSW CHECK PASSWORD JSB CNTMD CHECK CONTROL MODE CONDITION JSB EXST CLEAN EXTENDED STATUS JSB WACTZ DEACTIVATE GENERATORS JSB TACTZ SETUP 10 MSEC INTERRUPT AT "SENQ" JMP SENQ * * * * SKP * * * * *** STATISTICS *** EXST NOP CLEAN EXTENDED STATUS CLA STA CARCT CLEAR CARRIER FAIL FLAG STA EQT12,I JMP EXST,I * * THIS ROUTINE IS USED TO RECORD ERROR CONDITIONS * IN THE EXTENDED STATUS WORD EQT12. * * ON ENTRY: REG-B = BIT THAT HAS TO BE SET IN EQT12 * * (IF BIT5 OR BIT12 ARE SET THEN THERE IS NO * RETURN FROM THIS SUBROUTINE. ALSO IF BIT13 * IS SET THEN THEN CARRIER FAIL COUNTER IS * CLEARED BEFORE RETURN). * * SET NOP STATISTICS PROCESSING ROUTINE LDA EQT12,I GET WORD 12 OF EQT IOR B INCLUSIVE OR WITH PROPER BIT STA EQT12,I AND SAVE IT AGAIN CPB BIT5 IS IT MODEM FAILURE? JMP CLOSE YES CPB BIT12 IS IT DATA SET NOT READY? JMP CLOSE YES CLA CPB BIT13 IS IT CARRIER FAIL? STA CARCT CLEAR CARRIER FAIL COUNTER JMP SET,I NOW RETURN * * SKP * * * *** WRITE PROCESSOR *** * * THIS PROCESSOR SENDS A BLOCK OF DATA AND WAITS FOR * ACCEPTANCE OR REJECTION. ERROR RECOVERY INVOLVES * RETRANSMISSION UP TO 8 TIMES BEFORE DROPPING THE * LINE. * * EXECUTION: * 1. SEND DATA TO REMOTE. * 2. SEND PROPER CHECK CHARACTER. * 3. WAIT FOR A "RECEIVE TIMEOUT" FOR REPLY. * 4. IF "WACK" RECEIVED, OR NOTHING RECEIVED, SEND * "ENQ" AND DO STEP 3. * 5. IF "NAK" OR IMPROPER CHAR RECEIVED, DO 1,2 &3. * 6. IF "ACK" RECEIVED, ENABLE "TTD" GENERATOR AND * RETURN TO USER. * * MULTIRECORD BLOCKING IS SUPPORTED BY USING CHAIN- * ED BUFFERS. MIXED MODE OF TRANSMISSION IS ALSO * SUPPORTED. CONSULT THE ERS FOR BUFFER FORMAT. * * * A REPLY OF "DLE EOT" WILL CAUSE THE DRIVER TO * DROP THE COMMUNICATION LINE BEFORE RETURNING TO * THE USER. * * ERROR REJECTS: * 1. ILLEGAL PASSWORD. * 2. TERMINAL OFF-LINE OR IN ILLEGAL MODE. * * SKP * * * * * SENDC JSB RMD CHECK IF IN REC MODE JMP SE0 SEND LDA EQT9,I JSB PSW CHECK PASSWORD LDA RCSND SZA,RSS CHECK FOR SEND MODE JMP MVIOL * * REQUEST ACCPTED. SET UP BUF ADDR AND LENGTH * SE0 JSB EXST CLEAN EXTENDED STATUS LDA EQT7,I STA BUFWA SET UP BUFFER ADDRESS LDB BUFWA,I SSB,RSS REJECT IF FIRST CHAIN WORD JMP BREJ2 NOT NEGATIVE LDB EQT8,I JSB CKLEN CK LENGTH & CONVERT TO CHAR CNT STB BUFWL SET UP NEG CHAR LEN. ADB P2 TEST CMB,INB BUFFER RBR FORMAT ADA B LDB A,I SZB REJECT IF LAST CHAIN WORD NOT 0 JMP BREJ2 * * TEST FOR "CONVERSATIONAL MODE" * STB CONVS CONVERSATION MODE LOGIC LDA FUNC GET REQ CODE. SLA,RSS IS REQ CODE FOR WRITE CONV ? JMP SINIT NO, THEN DONT SET CONV PARMS ISZ CONVS LDB EQT10,I YES. GET READ LENGTH. JSB CKLEN CK LENGTH & CONVERT TO CHAR CNT STB BUFRL SET INPUT LENGTH. LDA BUFWA SET UP STA BUFRA READ BUFFER ADDRESS * * * SINIT LDA M8 STA SCONT SET RE-TRY COUNT JSB WACTZ DEACTIVATE "TTD" MODULE JSB TACTZ * * CONTINUATOR * SEND1 JSB TIME? SETUP PROPER RECEIVE TIMEOUT LDA BCCFL (A)=BCC TYPE AND SYNC CHAR LDB BUFWL (B)=WRITE BUFFER LENGTH JSB BSCT WRITE INITIALIZE EDITOR JMP GIVUP ABORT ON ILLEGAL RETURN JSB ERCNT SET UP RETRY COUNTER SEND2 JSB LCHCK CHECK LINE CONDITIONS CLB STB EOF CLEAR CONTROL MODE FLAG JSB BSCT JMP SCOMP CHECK COMPLETION EDITOR RETURN JSB SYN2S ENABLE INTERRUPTS JMP SEND2 * BREJ2 LDB BIT3 JMP MVIOL+1 RECORD ILLEGAL BUFR FORMAT * SCOMP STA TLOG SET NEG OUTPUT BUF LENGTH JSB SYN2S ENABLE INTERRUPTS * CLA SET UP TO SEND ENQ IF NO RESPONSE STA SCASE OR ILLEGAL RESPONSE * LDA CONVS GET CONVERSATIONAL-WRITE FLAG SZA IF DOING WRITE-CONVERSATIONAL JSB REINT THEN READ INITIALIZE EDITOR * * SET UP "ENQ" BUFFER TO SOLICIT RESPONCE. * LDA ENQ JSB BLDBF FORM BUFFER: "SYN ENQ PAD PAD" DEC 3 CMB,INB STB CONT3 STB CONT1 STA ADRS2 STA ADRS1 LDA ADSD4 SET UP SUBROUTINE LINK STA CNTRL TO RETURN AT SEND4. JMP SETUP SOLICIT RESPONCE. * GAIN LDA RESH LDB P4 SEND "ENQ" TO REMOTE JSB CNTRL * SEND4 STA WORK STORE CHAR TEMPORARILY CPA NAK REPLY CHAR A NAK ? JMP YTMINE YES LDB CONVS EXPECT CONVERSATIONAL REPLY ? SZB JMP CREAD YES. GO TO READ. CPB BCONT EXPECT AN ACK0? JMP CACK0 YES, SEE IF ACK0 WAS SENT. CPA ACK1 IS CHARACTER AN ACK1 ? JMP AOK YES. END OPERATION. JMP *+3 NO. SEE IF REMOTE SENT RVI. CACK0 CPA ACK0 IS CHARACTER AN ACK0 ? JMP AOK YES, END OPERATION. * CPA RVI IS CHARACTER A "REVERSE INTRPT"? JMP SRRIS YES, SET "REMOTE REQ TO SEND". * CPA EOT 'EOT' RECEIVED ? JMP REOT YES, GO SET UP FOR CONTROL MODE. * * * REMOTE SENT IMPROPER CONTROL CHARACTER. SEND "ENQ" * JSB UPCAR BRING UP CARRIER ISZ ERROR SENT 8 TIMES ? JMP GAIN NO, THEN SEND "ENQ". ILSQ LDB BIT4 JSB SET RECORD REPEATED ILLEGAL SEQ JMP ENDAL SEND "DLE EOT" AND DROP LINE. * * REMOTE NAK'ED THE MESSAGE. RESEND ORIGNAL BUFFER. * TMINE ISZ SCONT SENT 8 TIMES ? JMP SEND1 NO. RETRY. LDB BIT7 JMP EDBD RECORD REPEATED NAKS RCVD * * * REMOTE'S REPLY WAS ACCEPTABLE. UPDATE STATUS AND * ACTIVATE "TTD" MODULE, UNLESS 'EOT' IS RECEIVED. * * REOT STA EOF SET CONTROL MODE FLAG STB RQ2SD CLEAR RVI FLAG JMP EOK RESET FOR ACK0 * SRRIS LDB BIT4 SET "REMOTE SENT RVI" AOK STB RQ2SD SET STATE OF "RVI" FLAG. LDB BCONT ALTERNATE CMB ACKNOWLEDGEMENT EOK STB BCONT FLAG. LDB TLOG LDA EQT8,I GET REQUESTED BUF LEN SSA REQUEST IN WORDS ? JMP *+3 NO CMB,INB YES. MAKE TRASMISSION LOG POS BRS AND CONVERT TO # OF WORDS. STB TLOG CLA CPA EOF CONTROL MODE EXIT?LAG INA NO STA WACT ACTIVATE/DEACTIVATE 'TTD' GEN STA SCASE JMP COMPT EXECUTE COMPLETION. * * CHECK LENGTH & CONVERT TO CHARACTER COUNT * CKLEN NOP SZB,RSS JMP BREJ2 LEN= 0, REJECT SSB JMP CKLEN,I ALREADY A CHAR COUNT RBL CMB,INB CONVERT FROM WORD TO CHAR COUNT JMP CKLEN,I * * DATA * BUFWA NOP WRITE BUFFER ADDRESS BUFWL NOP WRITE BUFFER LENGTH SCONT NOP WRITE RETRY COUNTER ADSD4 DEF SEND4 CONVS NOP WRITE-CONVERSATIONAL FLAG * SKP * * * *** RECEIVE PROCESSOR *** * * CALLING SEQUENCE: * JSB EXEC * DEF *+7 * DEF ICODE * DEF ICNWD * DEF IBUFR * DEF IBULF * DEF IDPRM * DEF IPRM1 * .. RETURN .. * ICODE DEC 1 READ REQ CODE * ICNWD OCT YYLU CONTROL WORD * IBUFR BSS N BUFFER * IBULF DEC N (-2N) BUF LENGTH * IPRM1 OCT REPLY ACKNOWLEDEMENT CHAR FOR CONV RED * IDPRM OCT ID PASSWORD * AND YY = 33 ACK0 OR ACK1 * = 34 NAK * = 35 SEND ACK0 AS CONVERSATIONAL REPLY * = 36 RVI * * THIS PROCESSOR FIRST SENDS THE ACKNOWLEDGEMENT * CHARACTER INDICATED BY YY AND THEN PROCEEDS TO * READ FROM THE LINE INTO THE USER BUFFER. THE BUF * FORMAT INVOLVES CHAINING. A STATUS OF 'OFF LINE' * OR 'IN SEND MODE' WILL CAUSE THE DRIVER TO REJECT * THE REQUEST (AS ALSO WILL AN ILLEGAL PASSWORD). * AN 'ENQ' RECEIVED WILL CAUSE THE DRIVER TO : * 1. RESEND ITS INITIAL ACKNOWLEDGEMENT CHARACTER IF * IT IS THE FIRST CHARACTER RECEIVED. * 2. SEND A NAK IF AT END OF RECEIVED TEXT. * * * AFTER THE MESSAGE IS CORRECTLY RECEIVED * THE DRIVER WILL AUTOMATICALL ACTIVATE THE 'WACK' * GENERATOR. * * ERROR RECOVERY: * * 1. BCC ERROR : REREAD (MESSAGE NAKED) SEVEN TIMES * AND ON THE 8TH TRY SEND 'DLE EOT' AND DROP * THE LINE. * 2. DURING RECEIPT OF CHARACTERS, IF 30 SECONDS(LGTO) * PASS WITHOUT A CHARACTER BEING RECEIVED. THE * DRIVER WILL SET THE STATUS TO INDICATE A TIME- * OUT , SEND 'DLE EOT' AND DROP THE LINE. * SKP * * 9READ JSB RMD CHECK IF IN REC MODE JSB EXST CLEAN EXTENDED STATUS * * SET UP REQUESTED OPTIONS. * JSB FLAGC GO CLEAR CONTROL OPTION FLAGS LDA FUNC CCB * * CPA REO2 'NAK' REQUESTED ? STB NAKFG YES. SET 'NAK' FLAG. CPA REO3 'COVERSATIONAL READ' REQUESTED ? STB CONVR YES. SET 'CONVR' FLAG. CPA REO4 'REQUEST TO SEND' BY USER ? STB RVIFG YES. TURN ON 'RVI' FLAG. CLB CPA REO2 'NAK' REQUESTED? INB YES - SET USER NAK FLAG STB UNAK * * SET UP BUF ADRS AND LENGTH. * LDA EQT7,I STORE STA BUFRA BUFFER ADDRESS LDB EQT8,I JSB CKLEN CK LENGTH & CONVERT TO CHAR COUNT STB BUFRL SET BUFFER LENGTH ADB P6 SSB,RSS JMP BREJ2 REJECT IF LENGTH LESS THAN 3 WDS JSB TACTZ ENTER 'READ1' AFTER 10 MSEC * * READ1 JSB WACTZ DEACTIVATE WACK TTD GEN STA WORK CLEAR STATUS STORAGE STA TLOG CLEAR XMISSION LOG JSB UPCAR BRING UP CARRIER LDB RVI GET RVI CHARACTER LDA RVIFG SZA RVI FLAG ON ? JMP CALLB+1 YES * CPA NAKFG NAK FLAG ON ? JMP NONAK NO LDA NAK SETUP NAK IN BUFFER JSB BLDBF DEC 3 JMP CALLC * NONAK CPA CONVR CONVR FLAG ON ? RSS NO JMP CALLB * LDB ACK1 CPA BCONT CALLB LDB ACK0 USE ACK0 STB RSEND+2 SEND BUFFER LDA DLE FORM BUFFER CONTAINING: JSB BLDBF "SYN DLE ACK PAD PAD" ABORT DEC 4 * CALLC CLA CLEAR STA RVIFG RVI STA NAKFG NAK STA CONVR AND ACK0 FLAG. LDA M8 STA ERROR SET RETRY COUNTER * * INITIALIZE BISYNC READ EDITOR * JSB REINT READ INITIALIZE EDITOR * * OUTPUT RESPONSE TO PREVIOUS READ * LDA RESH LDB RESLN GET BU_F ADDR & LEN OF RESPONSE JSB CNTRL OUTPUT RESPONSE & GET FIRST CPA EOT EOT RECEIVED? JMP REOT1 YES - AVOID BSC EDITOR FOR SPEED * CNTN1 CLB MAKE CONTINUATION ENTRY JSB BSCR AND STORE RECVD CHARACTER JMP CMANZ ANALYZE COMPLETION STATUS. SZB STB NAKFG EITHER BCC ERROR OR BAD 'DLE' SEQUENCE. LDA XMTM SET 2 SEC REC TIMEOUT JSB TACTV DEF TIMEO JSB DOLIA GET CHARACTER JMP CNTN1 * * CMANZ STB WORK SAVE STATUS IN WORK WORD STA TLOG SZB,RSS ANY ABNORMAL CONDITION ? JMP COMPR NO. THEN DO COMPLETION. SLB,RBR IS BCC IN ERROR ? STB NAKFG YES. TURN ON NAK FLAG. SLB,RBR ILLEGAL DLE SEQUENCE ? STB NAKFG YES. TURN ON NAK FLAG. SLB,RBR ENQ AS ENDING CHARACTER ? STB NAKFG YES. TURN ON NAK FLAG SLB,RBR DLE EOT RECEIVED ? JMP GIVU DROP LINE. SLB,RBR EOT RECEIVED STB EOF SET EOT RCVD FLAG. SLB,RBR NAK AS ENDING CHARACTER ? STB NAKFG YES, SET NAK FLAG. SLB BUFFER OVERFLOW ? STB OVRFL SET BUFFER OVERFLOW FLAG. * * COMPR LDA NAKFG GET NAK FLAG SET BY READ. SZA,RSS IS NAK FLAG SET ? JMP NAKNO NO. THEN GO TO READ COMPLETION. LDA WORK GET STATUS FROM WORK RAR,RAR SLA,RSS NAK FLAG SET BY ENQ (TTD) ? TNAK ISZ RETRI NO, THEN BUMP COUNTER (8 TIMES?) JMP READ1 GO RETRY LDB BIT6 RECORD 8 NAKS SENT JMP EDBD GO TO RECORD & DROP LINE * * NAKNO LDA EQT8,I GET USER GIVEN TLOG SSA DOES USER WANT POSITIVE LEN ? JMP *+5 NO, THEN IT IS ALREADY SET UP. LDB TLOG MAKE LENGTH POSITIVE. CMB,INB BRS STB TLOG LDB EOF SZB EOT RECEIVED ? JMP RCEOT YES LDA BCONT NO, THEN SET UP AS READ EXIT CMA CPB UNAK USER WANTED A NAK? STA BCONT NO, TOGGLE ACK FLIP-FLOP JMP WACTN SET UP "WACK" GENERATOR. * REOT1 STA EOF SET EOT RECVD FLAG RCEOT JSB WACTZ DEACTIVATE GENERATORS STA BCONT RESET ACK0 JMP COMPT DO COMPLETION * TIMEO ISZ NAKFG SET NAK FLAG JMP TNAK AND RETRY. GIVU LDB BIT11 RECORD 'DLE EOT' RECEIVED EDBD JSB SET RECORD VIOLATION IN STATISTICS GIVUP JSB UPCAR BRING UP CARRIER JMP ENDAL SEND "DLE EOT" & DROP LINE. SKP * * "CREAD" IS ENTRY POINT FOR THE CONVERSATIONAL * WRITE ROUTINE TO CALL THE READ PROCESSOR. * CREAD JSB FLAGC GO CLEAR ALL FLAGS STB CONVS CLEAR TO ALLOW PROPER EXIT LDA WORK GET RECEIVED CHARACTER JMP CNTN1 GO STORE IT * * * CLEAR READ PROCESSOR FLAGS * FLAGC NOP LDA M8 STA RETRI SET RE-TRY COUNTER CLB CLEAR STB NAKFG NAK FLAG STB RVIFG RVI FLAG STB CONVR CONVERSATIONAL FLAG JMP FLAGC,I RETURN * * INITIALIZE BISYNC EDITOR FOR READ * REINT NOP LDB BUFRL (B) = READ BUFFER LENGTH LDA BCCFL (A) = BCC TYPE AND SYNC CHAR JSB BSCR READ INITIALIZE EDITOR JMP GIVUP ABORT ON ILLEGAL RETURN JMP REINT,I RETURN FROM INITIALIZATION * * FORM BUFFER WITH WRD 0 = SYN * WRD 1 = (PASSED IN A) * WRD N-2 = PAD * BLDBF NOP STA RSEND+1 LDA SYN STA RSEND WRD 0 = SYN LDB BLDBF,I ADB DEFB COMPUTE ADDR FOR PADS LDA PADD STA 1,I WRD N-2= PAD INB STA 1,I WRD N-1= PAD LDB BLDBF,I INB STB RESLN STORE LENGTH & RETURN IN B ISZ BLDBF LDA RESH JMP BLDBF,I RETURN DEFB DEF RSEND-1 * * * DATA * WORK NOP NAKFG NOP CONVR NOP RVIFG NOP BUFRA NOP 7READ BUFFER ADDRESS BUFRL NOP READ BUFFER LENGTH RETRI NOP READ RETRY COUNTER UNAK NOP 1 IF USER REQUESTED NAK, ELSE 0 * SKP * * * * *** BINARY SYNCHRONOUS EDITOR *** * (NOTE: PARITY BIT INSERTED AND DELETED BY USER). * CALLING SEQUENCES * * INITIALIZATION CALL * * LDA LRC/CRC SYN CHAR.BIT15=0 FOR LRC,1 CRC. * LDB NEG NEG BUF LENGTH * JSB BSCT/BSCR TRANSMIT OR RECEIVE ENTRY POINT. *(P+1)RETURN ABORT *(P+2)RETURN NORMAL * * CONTINUATION CALL * * LDA CHAR RECEIVED CHAR. (IGNORED ON XMIT) * LDB POS ANY POSITIVE NUMBER * JSB BSCT/BSCR TRANSMIT OR RECEIVE ENTRY POINT. *(P+1) COMPLETION RETURN *(P+2) CONTINUATION REG-B = RECEIVE STATUS OR * RETURN TRANSMITE CHAR. * REG-A = TRANSMISSION LOG. * STATUS (OCT): * 0 : NORMAL BLOCK WITHOUT ERROR * 1 : BCC IN ERROR * 2 : ILLEGAL DLE SEQUENCE * 4 : ENQ IS ENDING CHARACTER * 10 : DLE EOT RECEIVED * 20 : EOT IS ENDING CHARACTER * 40 : NAK IS ENDING CHARACTER * 100 : BUFFER OVERFLOW * (STATUS 1 & 2 CAN BE IN CONTINUATION RETURN ALSO, * BUT OTHERS OCCUR ON COMPLETION ONLY). SKP * TRANSMISSION ROUTINE BSCT NOP SSB,RSS INITIAL CALL ? JMP TNXT,I NO LDB WBFAD,I SET UP POINTER TO FIRST STB BFRPT BUFFER IN CHAIN INB RBL STB SNDA LDB BFRPT,I STB SNDL SET LENGTH OF 1ST BUFR IN CHAIN LDB LRCSA SET LRC PROCESSOR ADDRESS SSA IF A IS POSITIVE LDB CRCSA OTHERWISE SET CRC PROCESSOR ADR. STB TBCPA * LDB P2 SET XMISSION LOG TO ACCOUNT FOR STB TLOGG THE FIRST CHAIN WORD. JSB EDINT GO INITIALIZE THINGS JMP ENDTX ERROR RETURN LDB ESYN STB BYTE SET SYN FOR OUTPUTs LDB SYNCT SET COUNT FOR STB SYNOW NEXT SYNC. CLA JMP XITX1 RETURN. * * * COMPUTE LONGITUDINAL/CYCLICAL REDUNDANCY * DOBCC NOP LDA BCC LDB BCCFG SSB SKIP IF LONGITUDINAL REDUNDANCY CHECK JMP DOCRC ELSE IT'S CYCLICAL REDUNDANCY LDB BYTE BLF,BLF XOR B COMPUTE LRC JMP DOBEX * DOCRC XOR BYTE XOR IN NEW BYTE LDB M8 SLA,RAR NOW THE POLYNOMIAL XOR CRCD INB,SZB JMP *-3 DOBEX STA BCC JMP DOBCC,I RETURN BCCFG NOP CRCD OCT 020001 * * WBFAD DEF BUFWA TBCPA NOP BCC NOP * * * PTR NOP * * * LRCSA DEF LRCS CRCSA DEF CRCS SNDA NOP SNDL NOP * * ASCII.CONTROL CHARACTERS OCT 160 ASCII STICK MACK OCT 60 ASCII STICK ACCTA DEF *+1 DEC -10 NUMBER OF CONTROL CHARACTERS EDLE OCT 20 DLE OCT 26 SYN ESTX OCT 2 STX EITB OCT 37 ITB OCT 1 SOH OCT 27 ETB OCT 3 ETX OCT 4 EOT OCT 25 NAK P5 OCT 5 ENQ CMASK OCT 377 BFRPT NOP ESYN NOP SYN BEING USED EEOT NOP EOT BEING USED * TNXT NOP TINC2 LDA P2 INCREMENT STATE BY 2 XITXS ADA XMTI XITX1 STA XMTI ADA OTPRT ADD BASE ADDRESS LDA A,I STA TNXT SET TRANSFER ADDRESS XITX ISZ BSCT BUMP TO CONTINUATION RETURN ENDTX LDB BYTE ON RETURN REG-A = BYTE AND LDA TLOGG REG-B = XMISSION LOG CMA,INA MAKE XMISSION LOG NEGATIVE JMP BSCT,I RETURN TLOGG NOP XMTI NOP BYTE NOP BYTLD NOP LDB SNDA GET BYTE ADDRESS CLE,ERB BYTE ADDR IS NOW WORD ADDRESS LDA 1,I GET WORD FROM BUFFER SEZ,RSS ALF,ALF ENSURE BYTE IS IN RHW AND CMASK STA BYTE SAVE BYTE ISZ SNDA SAVE NEW BYTE ADDRESS ; ISZ TLOGG BUMP TRANSMISSION LOG JSB DOBCC COMPUTE BCC ISZ SNDL SKIP IF LAST JMP BYTLD,I RETURN * END? LDB SNDA SLB,RSS JMP *+3 INB BUMB TO NEXT BYTE ADDRESS ISZ TLOGG BUMP TLOGG BECAUSE EMPTY BYTE. ISZ TLOGG BUMP XMISSION LOG TO ACCOUNT FOR ISZ TLOGG THE CHAIN WORD RBR MAKE IT WORD ADDRESS LDA B,I GET LINK SZA,RSS ANY MORE BUFFER ? JMP ENCK NO. CHECK LAST BYTE OF LAST BUF. STA SNDL SET UP LENGTH OF NEXT BUFFER INB RBL STB SNDA SET ADDRESS OF NEXT BUFFER LDA P10 LDB EITB CPB BYTE IS LAST BYTE = ITB ? JMP XITX1 YES. PROCESS IT. JMP CONTU NO. TERMINATE RIGHT HERE. ENCK LDB ESQCC JMP RDCOD DECODE LAST BYTE * DLECC LDB RTCC GET TRANSPARENT PRCR TBL ADRS RDCOD STB PRTA SAVE PROCESSOR TABLE ADDRESS LDA BYTE AND DMASK MASK OFF PARITY IF EXPECTED CMA,INA ADA MAXCC SSA IF NOT A CONTROL CHAR JMP 1,I THEN DONT SCAN TBL LDA BYTE AND DMASK FORGET PARITY WHILE DECODING LDB PCCTA PUT CNTRL CHAR TBL STB PTR ADRS IN WORK WORD LDB B,I GET TABLE LENGTH ISZ PTR BUMP TO NEXT CNTRL CHAR CPA PTR,I EQUAL TO TBL ENTRY JMP *+3 YES ISZ B END OF TBL ? JMP *-4 NO CMB,INB COMPUTE PROCESSING ROUTINE ADB PRTA ADDRESS AND JMP TO IT. JMP 1,I * OTPRT DEF *+1 DEF SRBGN SRCH FOR BGN BCC ACCUM CHAR DEF XMTSY XMIT A SYNC CHAR DEF STX? CHECK STX AFTER DLE DEF TXTXT SEND NON-TRANS TEXT DEF XMTSY XMIT A SYNC CHAR DEF STX? CHECK STX AFTER DLE DEF TTXTX SEND TRANSPARENT TEXT DEF XMTSY XMIT A SYNC CHAR DEF TXDLE XMIT DLE FOLLOWING DLE NLH DEF TXBCC SEND BCC AFTER ETB/ETX DEF ITXBC SEND BCC AFTER ITB DEF SPAD SEND PAD DEF SPAD SECOND PAD DEF ENDTX LAST BYTE IS GONE DEF ITXSY SEND SYN AFTER ITB/BCC DEF LSLD LOAD LAST BYTE OF TRANS TEXT * * * SPAD LDA CMASK SEND PAD STA BYTE AND CLA,INA SET FOR COMPLETION EXIT JMP XITXS * * * SRBGN JSB TYMSY CHECK TIME TO SEND SYNC JMP XMIT1 NOT TIME XNTSY CLA,INA,RSS SET TO INCREMENT STATE XMTSY CCA SET TO DECREMENT STATE LDB ESYN STB BYTE SEND SYN JMP XITXS AND SET STATE * XMIT1 JSB BYTLD GET A BYTE LDB SRCCT GET CNTRL CHAR PROCR ADDRESS JMP RDCOD DECODE BYTE * SRCCT DEF *+1,I DEF XITX DATA DEF XITX ENQ DEF XITX NAK DEF XITX EOT DEF XITX ETX DEF XITX ETB DEF SETXT SOH DEF XITX ITB DEF SETXT STX DEF XITX SYN DEF TINC2 DLE * STX? JSB BYTLD GET A BYTE LDB ESTX CPB BYTE IS BYTE = STX ? JMP SETPM YES. SET TRANSPARENT MODE LDA M2 NO. REVERT BACK TO SRCH HEADER. JMP XITXS * zN* SETPM LDB XMTI ADB M2 IF NOT IN TEXT MODE SZB,RSS CLEAR BCC STB BCC LDA P6 JMP XITX1 SET STATE TO TRANSPARENT MODE * TXTXT JSB TYMSY TIME TO SEND SYNC ? RSS NO JMP XNTSY YES. GO SEND NON-TRANS SYN DLE? JSB BYTLD GET A BYTE LDB EDLE CPB BYTE BYTE = DLE ? JMP TINC2 YES. SET TO CHECK FOR STX . JMP XITX NO, THEN MAINTAIN THIS MODE. * TTXTX JSB TYMSY TIME TO SEND SYN ? JMP XMTT NO CLA,INA,RSS YES. SEND DLE NOW, GTDLD LDA P9 GTDLE LDB EDLE AND INCREMENT STATE STB BYTE TO SEND SYN NEXT TIME. JMP XITXS * XMTT LDA SNDL GET REMAINING LENGTH INA,SZA,RSS WILL NEXT BYTE BE THE LAST ONE ? JMP GTDLD NEXT STATE TO LOAD LAST BYTE. JMP DLE? GO CHECK FOR DLE * TXDLE LDA M2 GO BACK TO TRANS MODE AND JMP GTDLE SEND DLE THIS TIME * LSLD JSB BYTLD LOAD LAST TRANS BYTE JMP END? THIS SHOULD NOT BE * SYNCT DEC -300 SYNOW NOP TYMSY NOP ISZ SYNOW TIME FOR SYNC PATTERN JMP TYMSY,I NO ISZ TYMSY YES, THEN BUMP RETURN LDB SYNCT STB SYNOW RESET COUNT TO NEXT SYNC JMP TYMSY,I * SETXT LDA P3 JMP TXBCX * ETXI LDA P9 JMP XITX1 * ITXBC JSB TBCPA,I GET BCC JMP XITX CONTINUE LDA P14 INDEX TO SEND SYN AFTER BCC JMP TXBCX * ITXSY LDA P3 SET UP TO SEND ONE MORE SYN STA XMTI AND THEN GO BACK TO NON-TRAN JMP XNTSY MODE * TXBCC JSB TBCPA,I GET BCC BYTE JMP XITX CONTINUE CONTU LDA P11 TXBCX CLB STB BCC CLEAR ACCUMULATED BCC JMP XITX1 INDEX TO SEND NEXT SEQUENCE * * * CRCS NOP LDA BCC GET FIRST BCC BYTE FOR XMIT AND CMASK STA BYTE LDA CRS2A STA TBCPA SET TO SEND NEXT BCC BYTE } JMP CRCS,I * CRS2A DEF CRCS2 * CRCS2 NOP LDA CRCSA STA TBCPA RESTORE CRCS ADDRESS ISZ CRCS2 BUMP TO COMPLETION RETURN LDA BCC ALF,ALF AND CMASK GET SECOND CRC BYTE FOR XMIT STA BYTE JMP CRCS2,I * * * LRCS NOP ISZ LRCS BUMP TO COMPLETION RETURN JSB VRCS GO DO VRC ON LRC BCC IF ASCII STA BYTE JMP LRCS,I * BCNT NOP BIT COUNTER * VRCS NOP LDA BCC ALF,ALF AND DMASK MASK TO GET 7 OR 8 BITS LDB PCCTA ADB P2 LDB B,I CPB ECCTA+3 EBCDIC CODE ? JMP VRCS,I YES, THEN NO VRC. LDB M7 STB BCNT SET UP BIT COUNTER CLB HR SLA,RAR IS BIT = 1 INB YES, THEN BUMP B ISZ BCNT DONE ? JMP HR NO SLB,RSS NUMBER OF BITS EVEN ? INA YES, THEN INSERT PARITY. RAR POSITION THE CHARACTER ALF,ALF JMP VRCS,I RETURN * * CRCK NOP LDA BYTE GET FIRST CRC BYTE XOR BCC XOR TO COMPUTED CRC STA BCC SAVE IT LDA CRK2A SET TO CHECK NEXT BYTE STA RBCPA JMP XITRD * CRK2A DEF CRCK2 * CRCK2 NOP LDA CRCKA STA RBCPA RESTORE CRC CHECK ADDRESS LDA BYTE GET SECOND CRC BYTE ALF,ALF MOVE TO HIGH 8 BITS XOR BCC XOR TO COMPUTED CRC LDB CRCK2 B= RETURN ADDR JMP LRCEX * LRCK NOP JSB VRCS COMPUTE VRC ON LRC IF ASCII XOR BYTE XOR WITH RECEIVED LRC/VRC BCC LDB LRCK RETURN ADDR LRCEX SZA CLA,INA CRC/BCC BAD, NON-ZERO STATUS STA RSTAT CLA STA BCC CLEAR BCC JMP 1,I RETURN SKP * RECEIVE ROUTINE * BSCR NOP SSB INITIALIZATION CALL ? JMP RDINT YES AND CMASK NO, THEN SET UP TO DECODE BYTE. STA BYTE CLB STB RSTAT CLEAR STATUS BYTE JMP RNXT,I JUMP TO PROCESSING ROUTINE * RDINT ADB P4 ACCOUNT FOR FIRST & LAST LINKS. STB RCVL SET REMAINING LENGTH. LDB RBFAD,I STB BFRPT SET POINTER TO CHAIN WORD CLE,INB SET BUF BYTE POINTER ELB STB RCVA SET CURRENT BUF AND LDB LRCKA SET SSA BCC LDB CRCKA PROCESSOR STB RBCPA ADDRESS. LDB INPRT+1 STB RNXT SET NEXT ENTRY CLB STB ECHAR CLEAR END-CHAR TYPE STB RCVI CLEAR RECEIVE STATE INDEX STB RLOG AND RECV LOG STB RSTAT CLEAR STATUS WORD JSB EDINT GO INITIALIZE THINGS. JMP ENDRD ERROR RETURN JMP XITRD NORMAL RETURN * RBFAD DEF BUFRA LRCKA DEF LRCK CRCKA DEF CRCK RLOG NOP RSTAT NOP RCVL NOP RCVA NOP RCVI NOP RBCPA NOP RNXT NOP * EOB LDA P9 INDEX TO READ INTERMEDIATE BCC JMP SETIS EOM LDA P8 INDEX TO READ BCC JMP SETIS * PADC AND LO4 CPA LO4 IS PAD OK ? JMP PADOK YES. DECR1 CCA,RSS DECREMENT INDEX INCR2 LDA P2 INCREMENT INDEX BY 2 SETX ADA RCVI SETIS STA RCVI SET NEW INDEX ADA INPRT SET NEW LDA A,I PROCESSOR STA RNXT ADDRESS. XITS JSB BYTST STORE RECEIVED BYTE XITRD ISZ BSCR BUMP TO CONTINUATION RETURN. ENDRD LDB RSTAT GET STATUS LDA RLOG AND XMISSION LOG JMP BSCR,I LEAVE EDITOR * BYTST NOP LDB RCVL GET LENGTH ISZ RCVL REMAINING LENGTH AFTER BUMP =0 ? SSB SKIP IF >0 JMP CARYN BFST LDA BFRFL YES. SET BFR FULL IN STATUS. JMP FRMST SET UP READ BUF AND END READING. * CARYN LDB RCVA CLE,ERB CHANGE TO WORD ADDRESS LDA 1,I GET NEXT WORD SEZ,RSS ALF,ALF POSITION BYTE AND UPBYT T MASK IT IOR BYTE MERGE NEW BYTE SEZ,RSS ALF,ALF POSITION FOR STORE STA 1,I BACK INTO BUFFER ISZ RCVA BUMP BYTE ADDRESS JSB DOBCC COMPUTE BCC ISZ RLOG BUMP RECEIVED LOG JMP BYTST,I * * PCCTA NOP MAXCC NOP PRTA NOP BFRFL OCT 100 * * INPRT DEF *+1 DEF SRHDR SEARCH FOR START OF HEADER DEF PADC CHECK PAD AFTER CONTROL SEQUENCE DEF STICK CHECK STX/STICK AFTER DLE DEF RDTXT READ NON-TRANSPARENT TEXT DATA DEF PADC CHECK PAD AFTER ENQ DEF DLSTX CHECK STX AFTER DLE DEF RTTXT READ TRANSPARENT TEXT DATA DEF DLECC CHECK CONTROL CHAR AFTER DLE DEF RDBCC READ BCC DEF RIBCC READ INTERMEDIATE BCC DEF RDTXT READ DATA AFTER ITB AND BCC DEF PADC CHECK PAD AFTER ENQ DEF DLSTX CHECK STX AFTER DLE * SKP * SRHDR LDB SRPRT GET PROCESSOR TBL ADRS JMP RDCOD GO DECODE RECEIVED BYTE * SRPRT DEF *+1,I DEF XITS NON-CONTROL CHAR PROCESSOR DEF ENQI ENQ PROCESSOR DEF NAKI NAK PROCESSOR DEF EOTI EOT PROCESSOR DEF EOM ETX PROCESSOR DEF EOM ETB PROCESSOR DEF SOM SOH PROCESSOR DEF XITS ITB PROCESSOR DEF SOM STX PROCESSOR DEF XITRD SYN PROCESSOR DEF INCR2 DLE PROCESSOR * * * EDINT NOP STA BCCFG SIGN = BCC MODE CCB STB BCC SET ILLEGAL BCC AND LET STX CLEAR IT AND CMASK SET LINE-CODE TABLE CPA ECCTA+3 ACCORDING TO JMP EB SYN CHARACTER CPA ACCTA+3 RSS JMP EDINT,I ERROR RETURN LDB M177 STB DMASK SET ASCII DECODING MASK=177 LDB ACCTA LDA ACCTA+5 JMP EB+4 EB LDB CMASK STB DMASK SET EBCDIC DECODING MASK = 377 LDB ECCTA LDA ECCTA+10 STA MAXCC SET MAX CONTROL CHARACTER STB PCCTA SET CNTRL CHAR TBL ADDRESS ISZ EDINT ADB P2 LDA B,I STA ESYN ADB P6 SET LINE CODE FOR 'SYNC' LDA B,I AND 'EOT' BEING USED. STA EEOT JMP EDINT,I * * * * * * EBCDIC CODE SET * OCT 340 EBCDIC STICK MASK OCT 140 EBCDIC STICK ECCTA DEF *+1 DEC -10 OCT 20 DLE OCT 62 SYN OCT 2 STX OCT 37 ITB OCT 1 SOH OCT 46 ETB OCT 3 ETX OCT 67 EOT OCT 75 NAK OCT 55 ENQ * * * ESQCC DEF *+1,I DEF CONTU DATA DEF CONTU ENQ DEF CONTU NAK DEF CONTU EOT DEF ETXI ETX DEF ETXI ETB DEF CONTU SOH DEF CONTU ITB DEF CONTU STX DEF CONTU SYN DEF CONTU DLE * * * DLEOT LDB DEOT SET DLE EOT RECEIVED RSS ENQI LDB ENQR SET ENQ AS END CHAR RSS NAKI LDB NAKR SET NAK AS END CHAR RSS EOTI LDB EOTR SET EOT AS END CHAR STB ECHAR SET END CHAR TYPE AND PADOK LDA ECHAR END-CHAR TYPEED STATUS FRMST IOR RSTAT INCLUDE IN ACCUMULATED STATUS STA RSTAT SET NEW STATUS JMP RDEND AND END READ * DEOT OCT 10 ENQR EQU ABORT EOTR OCT 20 NAKR OCT 40 * * ECHAR NOP LO4 OCT 17 * * * * TSTX LDA P6 SET TRANSPARENT TEXT INDEX RSS SOM LDA P3 SET NON-TRAN TEXT INDEX STA RCVI JSB BYTST STORE BYTE CLA STA BCC CLEAR BCC JMP SETI SET INDEX * * RDBCC JSB RBCPA,I VALIDATE BCC RDEND LDA RLOG CMA,INA SET NEG BYTE LEN STA BFRPT,I OF LAST BUF IN CHAIN. CLA LDB RCVA GET BYTE ADDRESS INB FORM WORD ADDRESS CLE,ERB STA B,I _ SET ZERO IN LAST CHAIN WORD LDA RBFAD,I CMB ADA 1 BIT9 ALS SET NEG BYTE LEN OF REC BUF STA RLOG IN RLOG. JMP ENDRD END READING. * * RIBCC JSB RBCPA,I VALIDATE BCC LDA RCVL GET REMAINING LENGTH LDB RCVA GET NEXT BYTE ADDRESS SLB,RSS IS IT BYTE ADDRESS ? JMP *+3 NO INB YES, THEN BUMP TO WORD ADRS INA AND DECREMENT LENGTH. ADA P2 INCREMENT FOR CHAIN WORD STA RCVL AND UPDATE REMAINING LENGTH. INA SSA,RSS WILL 1 MORE WORD FIT IN ? JMP BFST NO, LESS THAN 2. TERMINATE. LDA RLOG SET LENGTH CMA,INA OF STA BFRPT,I LAST BUFFER. RBR STB BFRPT SET POINTER TO NEXT CHAIN WORD. INB RBL STB RCVA SET BUF POINTER CLA STA RLOG RESET LOG FOR NEXT BUF. BMPI CLA,INA JMP SETI * STICK CPA EEOT JMP DLEOT CPA ESTX IS BYTE = STX ? JMP TSTX YES, THEN SET TRANSPARENT MODE. LDB PCCTA NO ADB M3 AND B,I MASK BYTE WITH STICK MASK INB CPA B,I IS BYTE = STICK ? JMP DECR1 YES. INDEX TO CHECK PAD. CLA NO. CLEAR END-CHAR-TYPE AND STA ECHAR SET INDEX TO SEARCH FOR HEADER. JMP SETIS * * * * * * RDTXT LDB TXTCC GET PROCESSOR TABLE ADDRESS JMP RDCOD * TXTCC DEF *+1,I DEF XITS DATA DEF ENQI ENQ DEF XITS NAK DEF XITS EOT DEF EOM ETX DEF EOM ETB DEF XITS SOH DEF EOB ITB DEF XITS STX DEF XITRD SYN DEF INCR2 DLE * DLSTX CPA ESTX IS BYTE=STX ? JMP STRMD YES. SET TRAN MODE. LDA M2 DECREMENT INDEX BY 2. JMP SETX STORE BYTE. * STRMD LDA P6 SET TRAN MODE WIJ!THOUT RESETTING JMP SETIS BCC. * RTTXT CPA EDLE RECEIVED BYTE " DLE ? JMP BMPI YES. DONT STORE IT & BUMP INDEX. JMP XITS NO, THEN STORE IT. * * RTCC DEF *+1,I DEF RTER ILLEGAL DLE SEQ DEF ENQI ENQ DEF RTER NAK DEF RTER EOT DEF EOM ETX DEF EOM ETB DEF RTER SOH DEF EOB ITB DEF RTER STX DEF DECR SYN DEF DECR1 DLE * * RTER LDB ILDLE SET STATUS FOR ILLEGAL DLE SEQ. STB RSTAT JMP DECR1 DECREMENT STATE & STORE BYTE. ILDLE OCT 2 * * DECR CCA SETI ADA RCVI DECREMENT INDEX STA RCVI SET NEW INDEX ADA INPRT AND LDA A,I NEW ENTRY ADDRESS STA RNXT JMP XITRD SKP * * LINE CODE DATA * CCADD DEF EOT ADDRESS OF CONTROL CHARACTER LST EOT BSS 1 ETB BSS 1 ETX BSS 1 NAK BSS 1 RVI BSS 1 SOH BSS 1 STX BSS 1 ACK0 BSS 1 ACK1 BSS 1 WABT BSS 1 ENQ BSS 1 SYN BSS 1 SYNC CHAR SYNC BSS 1 SYNC-REFERENCE CMD. ('SYN'+BIT#14) ITB OCT 37 DLE OCT 20 STOR OCT 160010 CONFIGURED SEND-TO-RECEIVE CMAND SSEND OCT 171010 CONFIGURED SYNC SEND COMMAND SREVC OCT 151030 CONFIGURED SYNC RECEIVE COMMAND MASK EQU CMASK PADD EQU CMASK * EBCCC DEF ECCC ASCCC DEF ACCC * * EBCDIC CODE * ECCC OCT 67 EOT OCT 46 ETB P3 OCT 3 ETX OCT 75 NAK OCT 174 RVI P1 OCT 1 SOH P2 OCT 2 STX OCT 160 ACK0 OCT 141 ACK1 OCT 153 WACK OCT 55 ENQ OCT 62 SYNC OCT 40062 CONFIGURED SYNC * * * ASCII CODE * ACCC OCT 4 EOT OCT 227 ETB OCT 203 ETX OCT 25 NAK OCT 274 RVI OCT 1 SOH OCT 0.*2 STX OCT 260 ACK0 OCT 61 ACK1 OCT 73 WACK OCT 205 ENQ OCT 26 SYNC OCT 40026 CONFIGURED SYNC SKP * * ** DATA / CONSTANTS ** * EQ1 EQU 1660B EQ6 EQU 1665B EQ12 EQU 1771B EQ14 EQU 1773B EQ15 EQU 1774B EQT4 NOP EQT5 NOP EQT6 NOP EQT7 NOP EQT8 NOP EQT9 NOP EQT10 NOP EQT11 NOP EQT12 NOP EQT13 NOP EQT15 NOP EQTA EQU 1650B FWA OF EQT TABLE * A EQU 0 B EQU 1 P4 EQU ABORT P6 DEC 6 P8 EQU DEOT P9 DEC 9 P10 DEC 10 P11 DEC 11 P12 DEC 12 P14 DEC 14 P15 EQU LO4 M2 DEC -2 M3 DEC -3 M4 DEC -4 M7 DEC -7 N13 DEC -13 M2000 DEC -2000 M77 OCT 77 M177 OCT 177 UPBYT OCT 177400 BCONT NOP IF ODD, EXPECT OR SEND ACK1 LINE NOP IF 1 THEN TERMINAL IS ON-LINE DMASK NOP INERR NOP EOF NOP RQ2SD NOP TLOG NOP RCSND NOP OVRFL NOP BCCFL NOP SYN WORD(BIT15=0 LRC;"1 FOR CRC) RCTM NOP RECEIVE TIME OUT XMTM NOP TRANSMIT TIME-OUT LGTM NOP LONG TIMEOUT #NUMB NOP NUMBER OF TTD'S / WACK'S PSWD NOP PASSWORD EQT# NOP FUNC NOP REQ & FUN CODE OF CURRENT REQST CNTTM NOP TEMP CONTROL MODE LOOP COUNTER CMDTM NOP CONTROL MODE TIMEOUT * BIT1 EQU ILDLE BIT2 EQU ABORT BIT3 EQU DEOT BIT4 EQU EOTR BIT5 EQU NAKR BIT6 EQU BFRFL BIT7 OCT 200 BIT8 OCT 400 BIT10 OCT 2000 BIT11 OCT 4000 BIT12 EQU MTOWN BIT13 OCT 20000 BIT14 EQU DEVDN * * BSS 0 [ SIZE OF #BSC ] * END 0 6 91780-18014 1840 S C0122 &#DIAL MANUAL DIAL PROGRAM             H0101 ASMB,R,L,C HED #DIAL: DIAL ROUTINE FOR RJE * (C) HEWLETT-PACKARD CO.1978 * NAM #DIAL,2,20 91780-16014 REV.1840 780725 ENT #DIAL EXT EXEC SUP * * NAME: #DIAL * SOURCE: 91780-18014 * RELOC: 91780-16014 * PGMR: C. HAMILTON ( 11/09/76 ) * * MODIFIED BY: * * ***************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * ***************************************************************** * * #DIAL PRINTS A MESSAGE FOR MANUAL DIALING * * ** USERS MAY REPLACE THIS MODULE WITH APPROPRIATE AUTO-DIAL SOFTWARE ** * #DIAL LDA 1,I GET AND SAVE PARAM.#1: STA SYSLU ESTABLISH THE CONSOLE LU. INB POINT TO THE SECOND PARAMETER. LDA 1,I GET PARAM.#2: + =DIAL, - =DISCONNECT. SSA IF NEGATIVE, JMP DISC. DISCONNECT (BYPASS THE MESSAGE). * DIAL. EQU * POSITIVE: ESTABLISH CONNECTION. * JSB EXEC DIAL (PRINT MESSAGE). DEF *+5 DEF C2 DEF SYSLU DEF MESSA DEF MESSL * DISC. EQU * DISCONNECT. * JSB EXEC TERMINATE DEF *+2 THE DEF C6 PROGRAM. * * CONSTANTS * SYSLU OCT 1 C2 OCT 2 C6 OCT 6 MESSA ASC 9, RJE: DIAL REMOTE MESSL DEC -18 * END #DIAL ƃ  91780-18015 1840 S C0122 &DVR50 PRIV RTE DVR50             H0101 MASMB,R,L,C HED DVR50: BISYNC TELECOM DRIVER * (C) HEWLETT-PACKARD CO.1978 * NAM DVR50,0 91780-16015 REV.1840 780725 ENT I.50,C.50,P.50 EXT $IOUP * * NAME: DVR50 * SOURCE: 91780-18015 * RELOC: 91780-16015 * PGMR: P. KAPOOR ( 11/20/73 ) * * MODIFIED BY: P. KAPOOR, R.SHATZER ( 01/11/75 ) * C. WHELAN ( 06/30/76 ) * C. HAMILTON ( 11/09/76 ) * * ***************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * ***************************************************************** * * RTE/IBM BINARY SYNCHRONOUS COMMUNICATIONS DRIVER * CAUTION: THIS SYSTEM MODULE IS A FRONT-END FOR * THE SSGA/LIBRARY PORTION OF DVR50 (#BSC). * * UNIVERSAL(RTE-C/II/III) VERSION, PROCESSES DMS MAPPING REQUIREMENTS. * SKP * * DRIVER INITIALIZATION: BEFORE USING THIS DRIVER, * THE USER MUST MAKE AN INITIALIZATION CALL. THIS * ENABLES THE SYSTEM RESIDENT FRONT-END TO SET UP * LINKS TO ENTRY POINTS #I.50, #C.50 AND #P.50 IN * THE LIBRARY PORTION OF DVR50. INITIALIZATION * CALLING SEQUENCE IS: * * JSB EXEC * DEF *+4 * DEF ICODE * DEF ICNWD * DEF IPRM * RETURN POINT * . * . * ICODE DEC 3 * * ICNWD OCT 37XX * * IPRM DEF *+1 * OCT ZZZZ * MAPSW NOP * TIMAD DEF #TIME * BSCAD DEF #BSC * * WHERE ZZZZ = 100026 FOR ASCII WITH CRC * = 26 FOR ASCII WITH LRC & VRC * = 100062 FOR EBCDIC WITH CRC * = 62 FOR EBCDIC WITH LRC * * MAPSW = 0 TO ALLOW DMS MAP SWITCHING FOR RTE-III * =-1 EXECUTE ONLY DMS-STATUS SAVE/RESTORE FOR P.50 (RTE-III) * d<-1 TO BYPASS ALL DMS INSTRUCTIONS (RTE-C/II). * * TIMAD IS THE ADDRESS OF THE TIMEOUT-CONTROL ARRAY (IN #COMN), * AND #BSC IS AN ENTRY POINT IN LIBRARY PORTION * OF THE DRIVER : * * #BSC OCT 150003 * DEF #I.50 * DEF #C.50 * DEF #P.50 * * ON RETURN FROM INITIALIZATION, REG A = EQT5 AND * REG B = PASSWORD (ID SEG ADDR OF CALLING PROGRAM) * * ON ALL SUBSEQUENT CALLS TO DVR50 (TILL THE LINE * GOES DOWN) THE CALLING PROGRAM MUST INSERT THIS * NUMBER IN THE OPTIONAL PARAMETER WORD OF THE * CALLING SEQUENCE. * SKP * FUNCTIONS AVAILABLE: (XX = L.U.) *--------------------------------------------------- * * ICODE ICNWD NAME DESCRIPTION REJECT * ----- ----- ---- ----------- ------ * 3 37XX INIT- SET FLAGS. LINK ALREADY * IALIZE LIBRARY AND SYSTEM INITIALIZED * RESIDENT POTIONS * OF DRIVER. SET UP * I/O INSTRUCTIONS. * * 3 36XX DIS- PUT I/O BOARD 1. DRIVER NOT * CONNECT ON-HOOK. INITIALIZED * 2. SECURITY * CODE ERASED * * 3 35XX CONTROL CAUSES L.U. TO 1. DRIVER NOT * TO BECOME A SENDER INITIALIZED * SEND AND REMOTE TO 2. SECURITY * BECOME RECEIVER. CODE ERASED * 3. TRML NOT IN * CONTROL * MODE. * * 3 34XX HAND- CONNECT WITH 1. DRIVER NOT * SHAKE REMOTE. TRML INITIALIZED * BECOMES SENDER. 2. SECURITY * CODE ERASED * 3. ALREADY "ON * LINE". * * 3 33XX AUTO- CONNECT WITH 1. DRIVER NOT * ANSWER REMOTE. TRML INITIALIZED *  BECOME RECEIVER.2. SECURITY * VIOLATION. * * 3 32XX SEND SEND END-OF- 1. SECURITY * END- TRANSMISSION CODE ERASED * OF-FILE CHARACTER TO 2. DRIVER NOT * REMOTE. CHANGE INITIALIZED * STATE TO RCV 3. TERMINAL IN * IF REMOTE SENDS RCV MODE. * "ENQ". * * 3 31XX CONTROL ANSWER PHONE 1. DRIVER NOT * TO FOR LONG INITIALIZED * RECEIVE TIMEOUT AND 2. SECURITY * BECOME VIOLATION. * RECEIVER 3. TRML NOT IN * CONTROL MODE * * 3 00XX CLEAR DROP LINE & * CLEAN DRIVER * * 3 30XX EXTENDED STATISTICS RETURNED IN REG-B. * * 1 33XX READ SEND ACK0 OR ACK1 1. SECURITY * TO PREVIOUS MESSAGE CODE ERASED * AND READ FROM LINE.2. DRIVER NOT * 1 34XX READ SEND NAK TO LAST INITIALIZED * MESSAGE AND READ 3. TERMINAL * FROM THE LINE. OFF LINE. * 1 35XX READ REPLY ACK0 TO 4. TERMINAL IN * CONVERSATIONAL READ SEND STATE. * AND READ FROM 5. LONG OR RECV * LINE. TIMEOUT * OR 8 * 1 36XX READ SEND RVI IN RESPONSE TRIES * TO LAST MESSAGE AND FAILED AND * READ FROM THE LINE. LINE PUT * DOWN. * 1 37XX WRITE SEND DATA TO 6. 'DLE EOT' * CONVERSA- REMOTE AS RECEIVED * TIONAL ACKNOWLEDGEMENT AND LINE * OF LAST MESSAGE DROPPED. * AND READ FROM * LINE INTO THE * SAME BUFFER. * * 2 37XX WRITE SEND DXATA TO 1. SECURITY * REMOTE AND GET CODE ERASED * ACK. START TTD 2. DRIVER NOT * AND RETURN TO INITIALIZED * USER. 3. TERMINAL * OFF LINE. * 4. TERMINAL IN * RECEIVE * STATE. * 5. REMOTE DOES * NOT ACKNOW- * LEDGE; LINE * DROPPED. * 6. 'DLE EOT' * RECEIVED; * LINE * DROPPED. * * 13 XX STATUS DRIVER IS NOT * ENTERED FOR THIS * REQUEST. SYSTEM * PUTS EQT5 IN A * REGISTER AND * CONTROL RETURNS * TO USER. *--------------------------------------------------- * * THE DRIVER NEVER CAUSES THE USER PROGRAM TO BE * ABORTED BECAUSE I.50 ONLY RETURNS A=0, 2 OR 4. * C.50 RETURNS A=0 OR 1. ON RETURN TO USER FROM I.50, B=0 * MEANS THAT THE REQUEST WAS NOT INITIATED. *--------------------------------------------------- * SKP * DVR50/#BSC STATUS-BIT DEFINITIONS: * --------------------------------- * * EQT5 ( RETURNED IN FOR ALL REQUESTS ): * * BIT# MEANING * ---- ---------------------- * 0 0 = REQUEST SERVICED W/O ERROR 1 = IRRECOVERABLE LINE ERROR. * 1 0 = TERMINAL OFF LINE 1 = TERMINAL ON LINE. * 2 0 = * 1 = TRANSMIT MODE. * 3 0 = * 1 = RECEIVE MODE. * 4 0 = [ DON'T CARE ] 1 = 'RVI' RECEIVED. * 5 0 = [ DON('T CARE ] 1 = BUFFER OVERFLOW. * * * BITS #2&3 =0, AND BIT #1 =1 IMPLIES: CONTROL MODE. * * EQT12 ( RETURNED IN FOR EXTENDED STATUS REQUEST ): * * BIT# MEANING WHEN EQUAL TO 1 * ---- ----------------------- * 0 SECURITY CODE VIOLATION. * [ RJE: 20 ] * 1 PASSWORD VIOLATION. * [ RJE: 21 ] * 2 ILLEGAL MODE FOR REQUEST ISSUED TO DRIVER. * [ RJE: 22 ] * 3 ILLEGAL BUFFER FORMAT SPECIFIED. * [ RJE: 23 ] * 4 ILLEGAL BISYNC SEQUENCE RECEIVED REPEATEDLY (7 TIMES). * [ RJE: 24 ] * 5 LOSS OF 'CLEAR-TO-SEND' FROM MODEM. * [ RJE: 25 ] * 6 RECEIVED BUFFER 'NAK'ED' 7 TIMES. * [ RJE: 26 ] * 7 XMITTED BUFFER 'NAK'ED' BY REMOTE 7 TIMES. * [ RJE: 27 ] * 8 RECEIVE TIMEOUT OCCURRED REPEATEDLY (7 TIMES). * [ RJE: 30 ] * 9 LONG TIMEOUT FAILURE. * [ RJE: 31 ] * 10 DISCONNECT (DLE-EOT) SENT TO REMOTE & LINE DROPPED. * [ RJE: 32 ] * 11 DISCONNECT (DLE-EOT) RECEIVED FROM REMOTE & LINE DROPPED. * [ RJE: 33 ] * 12 LOSS OF 'DATA-SET-READY' FROM MODEM. * [ RJE: 34 ] * 13 LOSS OF 'CARRIER-DETECT' FROM MODEM, DURING RECEIVE MODE. * [ RJE: 35 ] * 14 'TTD' OR 'WACK' LIMIT EXCEEDED. * [ RJE: 36 ] * 15 CONTROL-TIMEOUT FAILURE - LINE IN 'CONTROL-MODE' AND USER * FAILED TO MAKE A REQUEST BEFORE EXPIRATION OF 'LONG TIMEOUT. * THE LINE IS DISCONNECTED, FOLLOWING A 'CONTROL-TIMEOUT. * [ RJE: 37 ] * SKP * INITIATION SECTION * I.50 NOP STA SCODE SAVE SELECT CODE OF RCV BOARD LDA EQT6,I AND M3777 CPA M3 CLEAR REQUEST ? JMP RSET YES. C6(LEAN DRIVER & DROP LINE. CPA M3003 EXTENDED STATUS REQUEST ? JMP STATR YES. RETURN EXTENDED STATUS. LDB EQT15,I GET CLOCK VALUE SZB,RSS IS CLOCK ACTIVE ? JMP ICHK NO. CHECK FOR INITIALIZE CALL. CPA M3703 IS IT INITIALIZE AGAIN. JMP MVIOL YES, RECORD MODE VIOLATION. * * CHECK SECURITY CODE BEFORE ALLOWING ENTRY INTO LIBRARY SECTION. * SURCH LDA SPTR,I GET SECURITY WORD FROM LIBRARY DVR CPA SECD IS SECURITY VIOLATED ? JMP IENTR NO, THEN ENTER #I.50 JSB SVIOL YES, RECORD SECURITY VIOLATION. REJ2 LDA P2 INDICATE: CLB ERROR RETURN! JMP I.50,I RETURN * * THIS SECTION IS ENTERED WHEN EQT15=0. IN THAT CASE * IT MUST EITHER BE AN INITIALIZATION CALL OR HAND- * SHAKE/AUTO-ANSWER CALL. IF HAND-SHAKE OR AUTO- * ANSWER THEN PASSWORD AND SECURITY CODE MUST BE VALID. * ICHK CPA M3703 IS IT INITIALIZE CALL ? JMP SETUP YES. SET UP INITIALIZATION. CPA M3403 HAND-SHAKE ? JMP SURCH YES, CHECK SECURITY CODE. CPA M3303 AUTO-ANSWER ? JMP SURCH YES, CHECK SECURITY CODE. * MVIOL LDB P4 JSB SET RECORD MODE VIOLATION IN BIT 2 JMP REJ2 REJECT REQUEST. * SVIOL NOP CLB,INB RECORD SECURITY VIOLATION JSB SET IN BIT 0 . JMP SVIOL,I REJECT REQUEST. * SET NOP LDA EQT12,I SET APPROPRIATE ERROR IOR B BIT IN EXTENDED STATUS WORD STA EQT12,I CLB,INB LDA EQT5,I ALSO SET 'OPERATION IN IOR B ERROR' BIT IN STANDARD STA EQT5,I STATUS WORD. JMP SET,I RETURN * RSET JSB CLC$ INHIBIT INTERRUPTS STB FLG CLEAR REQUEST-IN-PROGRESS FLAG. JSB OFBRD TURN OFF MODEM JMP IMCMP GO FOR IMMEDIATE COMPLETION * * IENTR CLA STA FLG LDA TIMAD PASS #TIME ADDRESS FOR INITIALIZATION. JSB ,#I.50,I * SZA,RSS REQUEST INITIATED ? ISZ FLG YES, SET FLAG JMP I.50,I RETURN. * * RESOLVE REG-A POINTER * APTR NOP APTR1 SSA,RSS INDIRECT ADDRESS ? JMP APTR,I NO, THEN RETURN. ELA,CLE,ERA CLEAR BIT15 LDA A,I GET NEXT ADDRESS LINK JMP APTR1 RESOLVE INDIRECT AGAIN * * RETURN EXTENDED STATISTICS IN REG-B * STATR CCA OFFSET SYSTEM EQT15 POINTER TO ADA EQT15 PREVENT RESETTING OF CURRENT STA EQT15 CLOCK VALUE. LDB EQT12,I GET EXTENDED STATUS FROM EQT12 IMCMP LDA P4 INDICATE IMMEDIATE COMPLETION JMP I.50,I RETURN TO THE CALLER. * SKP * THIS IS THE INITIALIZATION SET-UP ROUTINE. IT * ESTABLISHES #I.50, #C.50 AND #P.50 LINKS WITH * THE LIBRARY RESIDENT DRIVER. A POINTER TO A * SECURITY CODE (LOCATED IN #BSC) IS ESTABLISHED. * SOME EQT POINTERS ARE SET UP AND "CLC" & "OTA" * INSTRUCTIONS ARE CONFIGURED. * (NOTE: CONTENTS OF CLMSK ARE USED AS A MASK TO * CLEAR THE STANDARD STATUS OF THE DRIVER.) * SETUP LDA EQT7,I GET ADDR OF "IPRM" FROM CALL JSB APTR CLMSK LDB A,I (MASK IS 164000) STB EQT7,I SET ASC/EBCDIC & CRC/LRC FLAG INA BUMP POINTER LDB A,I GET MAP SWITCHING PARAMETER. INA POINT TO NEXT PARAMETER. SZB IF MAP SWITCHING IS NOT NEEDED (B#0), JMP CKPRV LEAVE BYPASS INSTRUCTIONS INTACT; STB MAP1 ELSE, STB MAP2 CLEAR ALL OF THE STB MAP3 BYPASS INSTRUCTIONS, STB MAP4 IN ORDER TO ENABLE STB MAP5 MAP SWITCHING FOR RTE-III. JMP *+3 CONTINUE THE PROCESS. CKPRV INB,SZB IF =-1, ENABLE DMS STATUS-ONLY; JMP GTAD ELSE, IGNORE ALL DMS INSTRUCTIONS! STB MAP6 ALLOW P.50 TO SAVE DMS STATUS, ON ENTRY. STB MAP7 ALLOW P.50 TO RESET DMS STATUS, ON EXIT. GTAD LDB A,I GET THE TIMEOUT-ARRAY ADDRESS STB TIMAD AND SAVE FOR #BSC INITIALIZATION. INA ADVANCE POINTER TO #BSC ADDRESS. LDA 0,I GET THE ADDRESS OF #BSC JSB APTR LDB 0 STB SPTR SET POINTER TOWARDS SECURITY LOC INB BUMP TO NEXT ADDRESS LDA B,I SET JSB APTR STA #I.50 POINTERS INB TO LDA B,I #I.50 JSB APTR STA #C.50 #C.50 INB AND LDA B,I #P.50 JSB APTR STA #P.50 IN THE LIB DVR. * MAP1 JMP FCLC BYPASS MAP SWITCH (NOP: SWITCH) LDA BUF1A USA GET USER MAP FOR RJE/#BSC * FCLC LDA CLC CONFIGURE IOR SCODE CLC XX,C STA CLC1 FOR RECEIVE INA AND STA CLC2 TRANSMIT BOARDS. LDA OTA CONFIGURE "OTA XX" INSTRUCTIONS IOR SCODE STA OTA1 INA BUMP TO XMIT CHANNEL STA OTA2 LDA EQT1,I GET ADDRESS OF WORD #16 ADA P15 OF CALLING PROGRAM'S ID SEGMENT STA STPNT WHICH HAS STATUS OF PROGRAM. LDA EQT15 SET STA EQP15 EQT15 POINTER JMP SURCH GO FOR #I.50 ENTRY * SKP * * ** TIME-OUT / COMPLETION SECTION ** * * THIS ROUTINE IS ENTERED ON A 'TIME-OUT' (DVR50 SETS BIT#12 OF EQT4 TO * TELL RTE THAT IT IS HANDLING IT'S OWN TIMEOUT). COMPLETION IS INDICATED * BY A (P+1) RETURN FROM THIS SECTION TO RTIOC. * BEFORE JUMPING TO THE LIBRARY RESIDENT #C.50, SECURITY CODE IS CHECKED. * IF VIOLATED, AND A REQUEST WAS IN PROGRESS, THEN RETURN TO RTIOC WITH * =1 (MALFUNCTION). IF NO REQUEST, $UPIO (IN RTIOC) HANDLES THE EXIT. * #C.50 MAKES A P+1 RETURN TO DVR50, IF NO REQUEST WAS IN PROGRESS * ($IOUP IN RTIOC HANDLES THE DRIVER'S EXIT); #C.50 MAKES A (P+2) RETURN * TO DVR50, IF A REQUEST WAS COMPLETED (RETURN TO RTIOC IS VIA C.50); * #C.50 RETURNS TO DVRy450 AT (P+3) FOR REQUEST COMPLETION (RETURN TO * RTIOC IS VIA (C.50+1). * C.50 NOP TIMAD EQU C.50 TEMPORARY STORAGE: INITIALIZATION. CLF 0 TURN OFF INTERRUPT SYSTEM LDA EQT4,I AND MTBIT CLEAR TIME-OUT BIT STA EQT4,I LDA EQT15,I GET CLOCK VALUE SZA IS EQT15=0 ? JMP CEXIT NO, ILLEGAL INTERRUPT, DO P+2 RETURN * MAP2 JMP CLRTO BYPASS DMS STATUS (NOP: SAVE STATUS) RSB STB TOSTS SAVE DMS STATUS BLF,SLB JMP CLRTO ALREADY IN USER MAP, JUMP * * UNDER SYSTEM MAP, GET RJE USER MAP LDB BUF3A USB SAVE CURRENT USER MAP CONTENTS LDB BUF1B USB SET RJE MAP UJP *+2 NOW RUNNING UNDER RJE MAP * CLRTO JSB CLC$ PROHIBIT INTERRUPT ON BOARDS STF 0 TURN ON INTERRUPT SYSTEM CPA ABTFG TEST ABORT FLAG SET BY P.50 JSB EXIST NO ABORT, CHECK SEC CODE & DORMANCY JMP VIOLA * JSB #C.50,I CALL #BSC TIMEOUT SECTION JMP IOUP REQUEST NOT BEING PROCESSED JMP CP1 RETURN VIA C.50: REQUEST COMPLETED. ISZ C.50 RETURN VIA C.50+1: REQUEST CONTINUATION. STB SAVB TSMAP JSB MAPIT DO POSSIBLE MAP RESTORE LDB SAVB JMP C.50,I RETURN * SKP * * SUBROUTINE TO RESTORE ORIGINAL MAP STATUS * MAPIT NOP MAP3 JMP MAPIT,I RETURN IMMEDIATELY (NOP: PROCESS MAPS) LDB TOSTS BLF,SLB JMP MAPIT,I JUMP IF DVR50 DIDN'T SWITCH USER MAP CLF 0 SJP *+2 ENABLE SYSTEM MAP LDB BUF3B USB RESTORE ORIGINAL USER MAP STF 0 JMP MAPIT,I * * CEXIT ISZ C.50 P+2 RETURN STF 0 JMP C.50,I * VIOLA JSB SVIOL RECORD SECURITY VIOLATION JSB OFBRD TURN OFF BOARDS CLA,INA EXIT IN PROPER DIRECTION. LDB FLG GET DIRECTION FLAG SZB REQUEST BEING PROCESSED JMP C.50,I YES. RETURN WITH A=1 AND B=1 JMP $IOUP+1 EXIT VIA $UPIO [$IOUP+1=$UPIO: RTE-C]. * CP1 STB SAVB SAVE REG-B TEMPORARILY CLB NO REQUEST BEING SERVICED SO STB FLG CLEAR THE FLAG WORD. JMP TSMAP * IOUP JSB MAPIT RESTORE MAP IF SWITCHED JMP $IOUP 'UP' THE DEVICE & AWAIT NEXT REQUEST. * * SAVB NOP B-REGISTER TEMPORARY STORAGE. TOSTS NOP DMS STATUS TEMPORARY STORAGE. * SKP * * DISABLE I/O BOARDS * CLC$ NOP CLC1 NOP DISABLE RECEIVE INTERRUPTS. CLC2 NOP DISABLE TRANSMIT INTERRUPTS. JMP CLC$,I * * DISABLE MODEM * OFBRD NOP LDA OFCOD GET CONTROL WORD TO OFF BOARDS OTA1 NOP OUTPUT ON RECEIVE BOARD OTA2 NOP OUTPUT ON TRANSMIT BOARD LDA CLMSK GET MASK=OCT164000 AND EQT5,I CLEAR STANDARD STATUS STA EQT5,I SET UP NEW STATUS CLB STB ABTFG CLEAR ABORT FLAG STB SPTR CLEAR SECURITY CODE POINTER STB EQT15,I PREVENT TIME-OUT ENTRY JMP OFBRD,I RETURN * * CHECK IF SECURITY CODE IS INTACT AND CALLING * PROGRAM IS NOT DORMANT. IF SO, RETURN (P+1) * AND IF NO VIOLATION THEN (P+2). * EXIST NOP LDA SPTR,I GET SEC CODE FROM LIBRARY DVR CPA SECD SECURITY VIOLATED ? JMP *+2 NO JMP EXIST,I YES, RETURN (P+1). LDA STPNT,I GET STATUS WORD OF PROGRAM AND P15 MASK IN STATUS SZA BUMP RETURN IF ISZ EXIST PROGRAM NOT DORMANT. JMP EXIST,I RETURN * * SKP * ** PRIVILEDGED ROUTINE ** * * AN I/O INTERRUPT CAUSES ENTRY HERE. BEFORE ENTRY * INTO #P.50 , THIS ROUTINE CHECKS THE SECURITY * CODE. IF VIOLATED (LIB DVR ABSENT) THEN A 10 MSEC * INTERRUPT TO C.50 IS SET, WHICH WILL CAUSE A PROPER * EXIT FROM THE DRIVER, AFTER RESETTING ITSELF (WILL CAUSE * DEVICE TO BE DOWNED). * P.50 NOP PRIVILEGED INTERRUPT ENTRY/EXIT CLF 0 TURN OF ALL INTERRUPTS IMMEDIATELY! MAP6 JMP CLDMA BYPASS DMS STATUS (NOP: SAVE IT) SSM SAVST SAVE DMS STATUS CLDMA CLC 6 TURN OFF CLC 7 DMA INTERRUPTS STA ASV S STB BSV A ERA,ALS V SOC E INA STA EOSV REGISTERS LDA MPTFL SAVE MEMORY STA MPFSV PROTECT FLAG CLA,INA TURN OFF STA MPTFL MEMORY PROTECT FLAG * * SWITCH USER MAPS * MAP4 JMP INTON BYPASS MAP SWITCH (NOP: SWITCH) LDA BUF2A USA SAVE CURRENT USER MAP * LDA BUF1B USA LOAD RJE/#BSC MAP * UJP INTON ENABLE USER MAP. INTON STF 0 ENABLE INTERRUPTS. JSB EXIST CHECK SECURITY CODE. CCA,RSS VIOLATION OCCURRED JMP PENTR ENTER #P.50 * * SECURITY VIOLATION * JSB CLC$ CLC XX,C ON I/O BOARDS STA ABTFG SET ABORT FLAG FOR C.50 STA EQT15,I SET 10 MSEC ENTRY AT C.50 JMP PEXIT * PENTR JSB #P.50,I GO TO #BSC INTERRUPT SECTION * PEXIT CLF 0 MAP5 JMP MPT? BYPASS MAP SWITCH (NOP: SWITCH) SJP *+2 NOW UNDER SYSTEM MAP LDA BUF2B USA RESTORE USER MAP * MPT? LDA MPFSV SZA WAS MEMORY PROTECT ON ? JMP MAP7 NO, FORGET DMA'S LDB INTBA TURN LDA B,I DMA'S SSA BACK STC 6 ON INB IF LDA B,I THEY SSA WERE STC 7 ON. * MAP7 JMP E&O BYPASS DMS CODE (NOP: RESTORE) JRS SAVST E&O RESTORE DMS STATUS E&O LDA EOSV RESTORE CLO E SLA,ELA O STO AND LDB BSV B REGISTERS LDA MPFSV RESTORE MEMORY STA MPTFL PROTECT FLAG IN THE SYSTEM SZc5HFBA MEMORY PROTECT ON ? JMP NOSTC NO LDA ASV YES, RESTORE A STF 0 TURN ON INTERRUPTS STC 5 SET MEMORY PROTECT JMP P.50,I RETURN * NOSTC LDA ASV RESTORE A STF 0 TURN ON INTERRUPTS JMP P.50,I RETURN * * * SKP * *** DATA / CONSTANTS *** * A EQU 0 B EQU 1 EQT1 EQU 1660B EQT4 EQU 1663B EQT5 EQU 1664B EQT6 EQU 1665B EQT7 EQU 1666B EQT12 EQU 1771B EQT15 EQU 1774B MPTFL EQU 1770B INTBA EQU 1654B EOSV NOP ASV NOP BSV NOP SCODE NOP STPNT NOP ABTFG NOP SAVST NOP MPFSV NOP EQP15 NOP #I.50 NOP #C.50 NOP #P.50 NOP SPTR NOP FLG NOP CLC CLC 0,C OTA OTA 0 P2 DEC 2 P4 DEC 4 P15 DEC 15 OFCOD OCT 140000 SECD OCT 150003 MTBIT OCT 173777 M3 OCT 3 M3777 OCT 3777 M3703 OCT 3703 M3403 OCT 3403 M3303 OCT 3303 M3003 OCT 3003 BUF1A DEF BUF1,I BUF1B DEF BUF1 BUF2A DEF BUF2,I BUF2B DEF BUF2 BUF3A DEF BUF3,I BUF3B DEF BUF3 * BUF1 BSS 32 MAP FOR RJE/#BSC BUF2 BSS 32 MAP FOR INTERRUPTED USER AREA BUF3 BSS 32 USER-AREA MAP (SAVED ON TIMEOUT ENTRY) * BSS 0 **** SIZE OF DVR50 **** * END H  91780-18016 1840 S C0122 &#TRAC RJE TRACE MAIN             H0101 /FTN4,L PROGRAM TRACE(19,90),91780-16016 REV 1840 780725 C C **************************************************************** C C NAME: TRACE C SOURCE: 91780-18016 C RELOC: 91780-16016 (PART OF) C PGMR: D. BOLIERE ( 07/24/78 ) C C **************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * C * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * C * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C **************************************************************** C C TRACE IMPLEMENTS A DIAGNOSTIC CAPABILITY FOR RJE/1000. C C :RU,TRACE [,LU OR NAME:SC:CRN] C C INTEGER AREG,BREG,IREG(2),IBUF(128),IDCB(144) EQUIVALENCE (AREG,REG,IREG(1)),(BREG,IREG(2)) C C INITIALIZE THE CONSOLE PTR AND THE OUTPUT DEVICE TO MAG TAPE C LUC=LOGLU(ISES) LUO=8 C C FETCH PARAMETER STRING. IF NONE, JUST USE DEFAULT DEVICE C CALL GETST(IBUF(11),-80,LOG) IF(LOG.EQ.0) GO TO 40 C C FETCH FIRST PARAMETER. IF NULL, USE DEFAULT. C +NUM, SET LU TO IT C ELSE, TREAT AS FILE NAMR ISTRC=1 IF(NAMR(IBUF,IBUF(11),LOG,ISTRC)) 40,20 20 IF(IBUF(4).EQ.0) GO TO 40 IF(IBUF(4).NE.1) GO TO 30 IF(IBUF(1).GE.0) LUO=IBUF(1) GO TO 40 C C MUST BE A FILE NAME! TRY TO OPEN. C 30 LUO=-1 CALL OPEN(IDCB,IERR,IBUF,0,IBUF(5),IBUF(6)) IF(IERR.GE.0) GO TO 50 IF(IERR.EQ.-6) GO TO 35 WRITE(LUC,910) IERR GO TO 99 C C FILE NON-EXISTENT! TRY TO CREATE. C 35 CALL CREAT(IDCB,IERR,IBUF,24,3,IBUF(5),IBUF(6)) IF(IERR.GE.0) GO TO 50 WRITE(LUC,920) IERR GO TO 99 C C MUST BE A LU! TRY TO LOCK. C 40 IF(LUO.LE.0) GO TO 50 REG=LURQ(1,LUO,1) IF(AREG.EQ.0) GO TO   50 WRITE(LUC,930) GO TO 99 C C INITIALZE SUBROUTINE BY SETTING OVERRUN COUNT TO POSITIVE. C 50 IOVER=0 C C REQUEST SUBROUTINE TO FILL BUFFER WITH NEXT BLOCK OF DATA. C ICNT=LENGTH OF BLOCK UPON RETURN. IOVER=+ IF LAST BLOCK. C 60 CALL RETRV(IBUF,ICNT,IOVER) IF(ICNT.EQ.0) GO TO 70 IF(LUO.GE.0) GO TO 65 C C OUTPUT DEVICE= FILE! C CALL WRITF(IDCB,IERR,IBUF,ICNT) IF(IERR.GE.0) GO TO 70 WRITE(LUC,940) IERR GO TO 80 C C OUTPUT DEVICE= LU! C 65 IF(LUO.GT.0) CALL REIO(2,LUO,IBUF,ICNT) C C IF DONE, REPORT OVERRUN COUNT. C 70 IF(IOVER.LT.0) GO TO 60 WRITE(LUC,950)IOVER C C IF OUTPUT TO LU, WRITE EOF C IF(LUO.LE.0) GO TO 80 CALL EXEC(3,100B+LUO) C C IF OUTPUT TO FILE, CLOSE IT. C 80 IF(LUO.LT.0) CALL CLOSE(IDCB) 90 CONTINUE 910 FORMAT(" TRACE ABORTED WITH FILE OPEN ERROR ",I4) 920 FORMAT(" TRACE ABORTED WITH FILE CREATE ERROR ",I4) 930 FORMAT(" TRACE ABORTED DUE TO LOGICAL UNIT LOCK FAILURE") 940 FORMAT(" TRACE ABORTED DUE TO FILE WRITE ERROR ",I4) 950 FORMAT(" TRACE COMPLETED WITH",I4," OVERRUN ERRORS") 99 END END$   91780-18017 1840 S C0122 &#TDMP RJE TDUMP MAIN             H0101 *FTN4,L PROGRAM TDUMP(19,90),91780-16017 REV.1840 780725 C C **************************************************************** C C NAME: TDUMP C SOURCE: 91780-18017 C RELOC: 91780-16017 (PART OF) C PGMR: D. BOLIERE ( 07/25/78 ) C C **************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * C * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * C * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C **************************************************************** C C PROGRAM TDUMP IS USED TO PROVIDE AN OFF-LINE ANALYSIS OF THE TRACE C DATA GENERATED FOR RJE/1000 BY THE PROGRAM TRACE. C C RU,TDUMP [,INPUT [,OUTPUT [,LINECT ] ] ] C C WHERE: INPUT AND OUTPUT ARE ANY LU OR LEGAL FILE C NAME IN THE FORMAT NAMR [:SC [:CR ] ]. C C INPUT IS THE LOCATION WHERE THE RAW TRACE DATA CAN BE C FOUND. C C OUTPUT IS THE DESTINATION FOR THE INTERPRETED LISTING. C IF A FILE IS SPECIFIED AND CANNOT BE FOUND, ONE IS C CREATED OF TYPE 3 AND 24 BLOCKS WITH THE OPTIONAL USER C SPECIFIED SECURITY CODE AND CARTRIDGE. C C LINECT IS THE MAXIMUM NUMBER OF LINES OF INFORMATION TO C PRINT AFTER EACH LINE TURNAROUND. C C DEFAULTS ARE: INPUT=8, OUTPUT=6, LINECT=999 C C INTEGER PARAM(5),DATA(2,64),LABL(14),TIME(2),TIM(16) INTEGER IREG(2),AREG,BREG,LBUF(40),LUARY(2),IDCB(144,2) INTEGER DIREC,IBUF(50) EQUIVALENCE (REG,IREG,AREG), (IREG(2),BREG) EQUIVALENCE (LUARY(1),LUIN), (LUARY(2),LUOUT) DATA TIME/2*0/,LCNT/999/,LUARY/8,6/ DATA LCNTR/0/,DIREC/0/ C C PICK UP CONSOLE LU AND GET USER PARAMETER STRING C LUC=LOGLU(ISES) CALL GETST(IBUF(11),-80,LOG)% ISTRC=1 C C DECODE FIRST TWO PARAMETERS THE SAME WAY C DO 40 I=1,2 C C IF NO OR NULL PARAMETERS, USE DEFAULTS C IF(LOG.EQ.0) GO TO 20 IF(NAMR(IBUF,IBUF(11),LOG,ISTRC)) 20,10 10 IF(IBUF(4).EQ.0) GO TO 20 C C CHECK FOR FILE NAME C IF(IBUF(4).NE.1) GO TO 30 C C IF NUMERIC AND + , USE AS NEW LU # C IF(IBUF(1).GT.0) LUARY(I)=IBUF(1) C C LOCK LU # C 20 REG=LURQ(100001B,LUARY(I),1) IF(AREG.EQ.0) GO TO 40 WRITE(LUC,930) LUARY(I) GO TO 999 C C TRY TO OPEN SPECIFIED FILE C 30 LUARY(I)=-1 CALL OPEN(IDCB(1,I),IERR,IBUF,0,IBUF(5),IBUF(6)) IF(IERR.GE.0) GO TO 40 IF(IERR.EQ.-6.AND.I.NE.1) GO TO 35 WRITE(LUC,910) IERR,(IBUF(J),J=1,3) GO TO 999 C C TRY TO CREATE THE FILE INSTEAD C 35 CALL CREAT(IDCB(1,I),IERR,IBUF,24,3,IBUF(5),IBUF(6)) IF(IERR.GE.0) GO TO 40 WRITE(LUC,920) IERR,(IBUF(J),J=1,3) GO TO 999 C 40 CONTINUE C C DECODE THIRD PARAMETER AS LINE COUNT LIMITATION C 60 IF(NAMR(IBUF,IBUF(11),LOG,ISTRC)) 100,70 70 IF(IBUF(4).NE.1) GO TO 100 IF(IBUF(1).GE.0) LCNT=IBUF(1) C C INITIALIZATION ALL DONE, NOW START INTERPRETING THE FILE C 100 NREC=0 C C IF INPUT DEVICE IS A LU, READ FROM IT C 110 IF(LUIN.LT.0) GO TO 120 REG=REIO(1,LUIN,DATA,128) LEN=BREG GO TO 130 C C OTHERWISE READ DATA FROM THE FILE SPECIFIED C 120 CALL READF(IDCB(1,1),IERR,DATA(1,1),128,LEN) IF(IERR.GE.0) GO TO 130 WRITE(LUC,940)IERR GO TO 999 C C MUST BE AN EOF: TERMINATE TDUMP C 130 IF(LEN.LE.0) GO TO 790 C C SUCCESSFUL READ, START PROCESSING THE NEXT RECORD. IF ITS THE FIRST C RECORD, DECODE TIME STAMP. C 200 NREC=NREC+1 IPT=1 IF(NREC.NE.1) GO TO 210 CALL TMDA1(TIM,DATA) CALL CODE WRITE(LBUF,800)TIM KCNT=25 GO TO 700 C C PICK UP NEXT PAIR OF DATA ENTRIES C 210 I1=DATA(1,IPT) I2=DATA(2,WIPT) C C IF UPPER BYTE OF I2 IS 200B OR 0B, THEN DECODE AS I/O ENTRY C WHICH MEANS I1 IS LOWER TIME STAMP AND LOWER BYTE OF I2 IS DATA BYTE C IF(IAND(I2,77400B).NE.0) GO TO 300 TIME=I1 C C RESET LINE DIRECTION INDICATOR IF WE'VE TURNED AROUND. ONLY C PRINT OUT USER SPECIFIED NUMBER OF LINES AFTER EACH TURNAROUND. C K=0 IF(I2.LT.0) K=1 IF(K.NE.DIREC) LCNTR=0 DIREC=K IF(LCNTR.GE.LCNT) GO TO 720 LCNTR=LCNTR+1 CALL TMVAL(TIME,TIM) C C CONVERT BYTE TO 4 CHARACTER DESCRIPTION C CALL EBC(I2,LABL) C C PRINT OUT AS RECEIVED IF UPPER BYTE OF I2=0 C IF(I2.GE.0) GO TO 250 CALL CODE WRITE(LBUF,810) TIM(4),TIM(3),TIM(2),TIM(1),I2,LABL(1),LABL(2) KCNT=14 GO TO 700 C C PRINT OUT AS SENT IF UPPER BYTE OF I2=200B C 250 CALL CODE WRITE(LBUF,820) TIM(4),TIM(3),TIM(2),TIM(1),I2,LABL(1),LABL(2) KCNT=21 GO TO 700 C C IF UPPER BYTE OF I2=100B, ENTRY IS NEW UPPER TIME STAMP. C 300 IF(IAND(I2,40000B).EQ.0) GO TO 400 TIME(2)=I1 GO TO 750 C C IF UPPER BYTE OF I2=40B, ENTRY IS OVERRUN INDICATOR C 400 IF(IAND(I2,20000B).EQ.0) GO TO 500 CALL CODE WRITE(LBUF,830) KCNT=18 GO TO 700 C C IF UPPER BYTE OF I2=20B, ENTRY IS NEW I/O REQUEST. ADDITIONALY, C IF THE LOWER BIT OF I2 IS SET, WE'VE ALSO STARTED A NEW TRACE. C 500 IF(IAND(I2,10000B).EQ.0) GO TO 600 IF(IAND(I2,1).EQ.0) GO TO 550 CALL CODE WRITE(LBUF,840) KCNT=37 DATA(2,IPT)=IAND(I2,177776B) IPT=IPT-1 GO TO 700 C 550 CALL CMD(I1,LABL) CALL CODE WRITE(LBUF,850)I1,LABL KCNT=25 GO TO 700 C C IF UPPER BYTE OF I2=10B, ENTRY IS A I/O COMPLETION/STATUS REPORT C 600 IF(IAND(I2,4000B).EQ.0) GO TO 650 CALL CODE WRITE(LBUF,860)I2,I1 KCNT=23 GO TO 700 C C IF WE'VE GOT HERE, ITS AN ENTRY TYPE THAT IS NOT RECOGNIZED, SO C PRINT OUT DECODE ERROR. C 650 CALL CODE WRITE(LBUF,870) KCNT=7 GO TO 700 C C IF LUOUT=-1, WRITE EXPLANATION BUFFER TO DISC FILE C 700 IF(LUOUT.GE.0) GO TO 710 CALL WRITF(IDCB(1,2),IERR,LBUF,KCNT) IF(IERR.GE.0) GO TO 720 WRITE(LUC,950) IERR GO TO 999 C C IF LUOUT>0, WRITE BUFFER TO THAT LU. C 710 CALL REIO(2,LUOUT,LBUF,KCNT) C C IF JUST WROTE HEADER, WRITE SECOND LINE AS WELL C 720 IF(NREC.NE.1.OR.IPT.NE.1) GO TO 750 IPT=3 CALL CODE WRITE(LBUF,880) KCNT=21 GO TO 700 C C IF MORE DATA IN RECORD, REPEAT ANALYSIS BEFORE ACCESSING I/O DEVICE C 750 IPT=IPT+1 IF(IPT*2.LE.LEN) GO TO 210 GO TO 110 C C COMPLETION! C 790 IF(LUIN.LT.0) CALL CLOSE(IDCB(1,1)) IF(LUOUT.LT.0) CALL CLOSE(IDCB(1,2)) WRITE(LUC,890) GO TO 999 C C FORMAT STATEMENTS C 800 FORMAT("1RJE/1000 TRACE OF",16A2) 810 FORMAT(5X,I2,":",I2,":",I2,".",I2,3X,@3,1X,2A2,1X) 820 FORMAT(5X,I2,":",I2,":",I2,".",I2,17X,@3,1X,2A2,1X) 830 FORMAT(" OVERRUN! ",6X,20("*")) 840 FORMAT(" NEW TRACE STARTED ",55("*")) 850 FORMAT(" I/O REQUEST=",@6,3X,14A2) 860 FORMAT(" COMPLETION/ERROR REPORT, STATUS=",@3,4X,@6) 870 FORMAT(" DECODE ERROR!") 880 FORMAT(5X,"HR:MN:SECOND",2X,"SENT",10X,"RECEIVED ") 890 FORMAT(" TDUMP COMPLETED!") 910 FORMAT(" TDUMP ABORTED DUE TO OPEN ERROR",I4," ON FILE ",3A2) 920 FORMAT(" TDUMP ABORTED DUE TO CREATE ERROR",I4," ON FILE ",3A2) 930 FORMAT(" TDUMP ABORTED DUE TO LOCK FAILURE ON LU",I4) 940 FORMAT(" TDUMP ABORTED DUE TO FILE READ ERROR",I4) 950 FORMAT(" TDUMP ABORTED DUE TO FILE WRITE ERROR",I4) C 999 END END$ H>  91780-18018 1840 S C0122 &#RETV RJE TRACE UTILITY             H0101 $zASMB,R,L,C HED RETRV: RJE TRACE SUPPORT ROUTINE * (C) HEWLETT-PACKARD CO.1978 * NAM RETRV,7 91780-16016 REV.1840 780725 ENT RETRV EXT .ENTR,IFBRK,EXEC EXT #TBUF,#OVRN,#RDPT,#WRPT,#BFEN * * DATE: 780725 * NAME: RETRV * SOURCE: 91780-18018 * RELOC: 91780-16016 (PART OF) * PGMR: D. BOLIERE * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * THIS SUBROUTINE IS USED BY THE TRACE CAPABILITY OF RJE/1000 TO * RETRIEVE DATA FROM A CIRCULAR SPEED BUFFER LOCATED IN THE * RJE/1000 MODULE CALLED #COMN. THIS DATA IS IN THE FORMAT OF TWO * WORDS PER ENTRY. RETRV COLLECTS THIS DATA AND BLOCKS IT INTO THE * USERS BUFFER. WHEN EITHER THE USERS BUFFER IS FULL, OR WHEN A * OPERATOR BREAK OF THE TRACE PROGRAM IS DETECTED, THE BLOCK OF * DATA IS RETURNED TO THE CALLER. * * FORMAT OF SPEED BUFFER IN #COMN: * * #TFLG NOP 0=TRACE OFF,1=TRACE ON * #TBUF DEF BUF FWA OF SPEED BUFFER * #OVRN NOP NON-ZERO INDICATES THE NUMBER OF OVERRUNS * CAUSED BY THIS RETRV NOT EMPTYING THE SPEED * BUFFER AS FAST AS RJE/1000 FILLS IT. * #RDPT DEF BUF POINTER INTO SPEED BUFFER OF NEXT ENTRY TO * RETRIEVE * #WRPT DEF BUF POINTER INTO SPEED BUFFER OF NEXT ENTRY TO * BE WRITTEN BY RJE/1000. * #BFEN DEF BFEN LAST WORD ADDRESS OF CIRCULAR SPEED BUFFER * BUF BSS 200 TRACE BUFFER LOCATED IN SSGA * BFEN DEF * NEXT WORD PAST BUFFER *  * * CALLING SEQUENCE: * * CALL RETRV (BUF,BUFCT,OVRN) * * WHERE: BUF=USERS BUFFER (AT LEAST 128 WORDS) * BUFCT=LENGTH OF BLOCK OF DATA RETURNED TO CALLER * OVRN= UPON ENTRY: + INDICATES THAT RETRV SHOULD * INITIALIZE ITSELF AND THE * SPEED BUFFER POINTERS * - INDICATES THAT RETRV SHOULD * JUST REFILL THE USERS BUFFER * UPON EXIT: - INDICATES TO CALLER THAT MORE * DATA IS AVAILABLE AFTER THIS * CALL * + INDICATES TO CALLER THE NUMBER * OF OVERRUNS DETECTED AND THAT * A BREAK OF TRACE HAS BEEN * ENTERED BY THE USER. * BUF NOP BUFCT NOP OVRN NOP * RETRV NOP JSB .ENTR PASS PARAMETER ADDRESSES DEF BUF * LDA BUFLN INITIALIZE COUNT TO REPORT TO CALLER STA BUFCT,I ARS DIVIDE BY 2 CMA,INA COMPLEMENT STA CNTR AND INITIALIZE INTERNAL COUNTER LDA BUF STA PTR SETUP INTERNAL BUF POINTER LDB OVRN,I SSB CALL SAYS TO RE-START? JMP START NO, JUST RE-FILL THE BUFFER * ADA D5 YES, SETUP YEAR POINTER STA PTR6 JSB EXEC SAVE SIX WORD TIME STAMP DEF *+4 IN FIRST SIX BUFFER LOCATIONS DEF D11 PTR NOP FWA OF BUFFER PTR6 NOP ADDRESS OF WORD SIX * LDA PTR6 INA STA PTR RESET BUF PTR TO 7TH WORD LDA CNTR ADA D3 STA CNTR BUMP INTERNAL COUNTER * LDA #TBUF STA #RDPT STA #WRPT CLA STA #OVRN STA OVCNT cu * START CCA TELL CALLER THAT LAST RECORD NOT STA OVRN,I YET FOUND * LOOP JSB IFBRK CHECK BREAK STATUS DEF *+1 SSA BREAK? JMP EXIT YEP, GO TELL USER * LDA #RDPT CPA #WRPT POINTERS THE SAME? RSS JMP FETCH NO, MUST BE NEW DATA TO GET! * LDA #OVRN BUFFER OVERRUN? SZA,RSS JMP LOOP NO, REPEAT CHECKS * OVER CLA OVERRUN!!! STA #OVRN CLEAR FLAG ISZ OVCNT BUMP OVERRUN COUNT LDA #WRPT STA #RDPT RESET READ PTR DLD OVCNT CREATE AN OVERRUN ENTRY DST PTR,I SAVE ENTRY SAVE ISZ PTR ISZ PTR ISZ CNTR BUMP COUNTER RSS JMP RETRV,I IF BUFFER FULL, RTN TO CALLER JMP LOOP RETURN FOR CHECKS * FETCH DLD #RDPT,I GET POSSIBLE DATA DST PTR,I SAVE IN TEMP BUFFER LDA #OVRN FETCH OVERRUN FLAG SZA OVERRUN? JMP OVER YEP, FORGET DATA! * ISZ #RDPT NO, BUMP TEMP PTR ISZ #RDPT LDA #RDPT CPA #BFEN AT END OF SPEED BUFFER? LDA #TBUF YES, WRAP-AROUND STA #RDPT JMP SAVE FINISH BOOKKEEPING * EXIT LDA BUF COMPUTE AMOUNT OF DATA IN CMA,INA TEMP BUFFER ADA PTR STA BUFCT,I REPORT PROPER COUNT TO CALLER LDA OVCNT STA OVRN,I REPORT LAST RECORD TO CALLER JMP RETRV,I * * D3 DEC 3 D5 DEC 5 D11 DEC 11 BUFLN DEC 128 CNTR NOP * OVCNT NOP OCT 020000 * *STRBF DEF #BUF END   91780-18019 1840 S C0122 &#TMDA DATE & TIME UTILITY             H0101 ASMB,L,C HED TIME AND DATE TRANSLATION ROUTINE * (C) HEWLETT-PACKARD CO.1978 * NAM TMDA,7,0 91780-16017 REV.1840 780725 ENT TMDA,TMDA1,TMDA2 EXT .ENTR,EXEC,.MVW * * DATE: 780725 * NAME: TMDA * SOURCE: 91780-18019 * RELOC: 91780-16017 (PART OF) * PGMR: GARY E. MODRELL * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * THIS ROUTINE RETURNS THE DATE IN DAY OF WEEK, MONTH, * DAY OF MONTH, AND YEAR, AND THE TIME IN HOURS, MINUTES, * SECONDS, AND HUNDREDTHS OF SECONDS AS PACKED ASCII * CHARACTERS IN THE PROPER FORMAT. THESE CHARACTERS * ARE RETURNED IN A 16 WORD BUFFER. * * PROPER USE: * DIMENSION IA(16) * CALL TMDA(IA) * WRITE (6,10) IA * 10 FORMAT(16A2) * * FOR EACH CALL TO TMDA, AN EXEC CALL (RCODE=11) IS MADE * THEN THE RETURNED VALUES FOR YEAR, DAY OF YEAR (1,366) * AND TIME ARE TRANSLATED; DAY OF YEAR TO MONTH-DAY, AND * THE NUMERIC DATA TO ASCII CHARACTERS AS SHOWN BELOW. * * ENTRY POINT TMDA1 IS USED TO TRANSLATE A PROVIDED TMVAL * ARRAY RATHER THAN THE SYSTEM TIME. * * PROPER USE: * DIMENSION IA(16),IDAT(6) * CALL TMDA1(IA,IDAT) * WRITE (6,10) IA * 10 FORMAT(16A2) * * FOR EACH CALL TO TMDA1, THE CALLERS VALUE FOR YEAR,DAY * AND TIME ARE TRANSLATED; DAY OF YEAR TO MONTH-DAY, AND * THE NUMERIC DATA TO ASCII CHARACTERS IN THE FOLLOWING FORMAT: * * CONTENTS: MON JAN 01, 1973 16:02:19.53 * WORD # :01020304050607080910111213141516 * * IFr! ERROR IN IDAT ARRAY, DATE " SUN JAN 00, 1900 00:00:00.00" * IS RETURNED. * THE ROUTINE IS NOT PRIVILEDGED SO IT IS RTE-IV COMPATABLE * BFAD NOP BUFFER ADDRESS DAT NOP ADDR OF DATE TO BE TRANSLATED TMDA NOP ENTRY POINT JSB .ENTR DEF BFAD LDA DAT GET 2ND ARG ADDR SZA IS THERE TWO? JMP TMD1 YES, TMDA1 ENTRY JSB EXEC GET TIME OF DAY DEF *+4 DEF D11 DIMS DEF IMS DEF IYR JMP TMD2 TMD1 LDB DIMS A=ADDR OF SOURCE, B=ADDR OF DESTINATION JSB .MVW MOVE THE WORDS DEF D6 6 WORDS NOP CLA STA DAT CLEAR DAT FOR NEXT CALL TMD2 JSB DATE CONVERT DATE SSA CHECK FOR ERROR JMP ERR YES, DO ERROR EXIT BLS GET TABLE ADDRESS ADB DTBL3 DLD B,I GET ASCII DAY OF WEEK DST DW STORE IN PROPER FORMAT LDA MO NUMBER OF MONTH ALS GET TABLE ADDRESS ADA DTBL2 DLD A,I GET ASCII MONTH NAME DST MON STORE IN PROPER POSITION * * NOW CONVERT DAY OF MONTH, YEAR, HOURS, MINUTES, SECONDS * AND HUNDREDTHS OF SECONDS TO ASCII * LDA IMS HUNDREDTHS OF SECONDS JSB ACONV CONVERT TO ASCII STA MS LDA IMN MINUTES JSB ACONV CONVERT TO ASCII STA MN LDA DA DAY OF MONTH JSB ACONV CONVERT TO ASCII STA DAY LDA IYR CLB DIV D100 STB T1 HUNDREDS OF YEARS JSB ACONV CONVERT TO ASCII STA YR LDA T1 TENS & UNIT YEARS JSB ACONV CONVERT TO ASCII STA YR+1 LDA IHR HOURS JSB ACONV CONVERT TO ASCII LDB CNSP GET COLON-SPACE IN B-REG RRR 8 POSITION CHARS DST HR STORE INTO ASCII ARRAY LDA ISC JSB ACONV CONVERT TO ASCII LDB PDCN GET ASCII PERIOD-COLON RRR 8 POSITION CHARS DST SC STORE INTO ASCII ARRAY LDA DBUF ADDR OF SOURCE LDB BFAD ADDR OF DESTINATION JSB .MVW MOVE THE WORDS DEF D16 16 WORDS NOP JMP TMDA,I RETURN * * FOR ERROR RETURN USE JAN 00,1900 00:00:00.00 * ERR CLA ZERO TMVAL ARRAY STA IMS STA ISC STA IMN STA IHR STA IDA STA IYR JMP TMD2 DECODE ERROR VALUES * * CONVERTS BINARY NUMBER IN A-REG (0-99) * TO TWO PACKED ASCII CHARACTERS RETURNED IN A * ACONV NOP CLB PREPARE FOR DIVIDE DIV D10 RESULT A = TENS VALUE, B = UNITS VALUE ALF,ALF POSITION TENS VALUE IOR B MERGE IN UNITS VALUE IOR ASB MERGE IN ASCII BASE VALUE JMP ACONV,I * * DATE CONVERSION ROUTINE * CONVERTS DAY OF YEAR (1-366) TO DAY OF WEEK, * MONTH, DAY OF MONTH, ACCOUNTING FOR ALL LEAP * YEARS. CORRECT FOR ANY DATE AFTER JAN 00,1900 * UNTIL FEB 28,2100 * ON EXIT B-REG CONTAINS # OF DAY OF WEEK (0-6) * DAY ON MONTH IN "DA" (1-31) * MONTH NUMBER IN "MO" (1-12) * IF A-REG = -1 ERROR * DATE NOP CLB STB MO MO=0 LDA IYR GET YEAR ADA MYB SUBTRACT 1900 SSA IF YEAR <= 1900 CLA DEFAULT TO 1900 STA Y0 YEARS AFTER 1900 SZA IF Y0=0 SKIP NEXT STEP ADA M1 MINUS ONE FOR # PREV LP-YR DIV D4 DETERMINE # OF LEAP YEARS STA NLP SAVE # LEAP YEARS PREVIOUSLY CLA CPB D3 YEAR ENTERED A LEAP YEAR? CMA YES, MAKE FEB HAVE 29 DAYS STA LPFLG IF LP-YR, LPFLG=-1 ELSE =0 LDA IDA DAY OF YEAR (1-366) LDB DTBL1 L1 STA DA SUBTRACT DAYS IN EACH MONTH ADA B,I UNTIL DAY COUNT NEG CPB DTB11 IS MONPTH FEB? ADA LPFLG YES, SUBTRACT EXTRA DAY SZA SSA JMP OT1 INB NEXT ADDR IN TABLE ISZ MO MONTH # LEFT IN MO CPB DEND DAY OF MONTH LEFT IN DA JMP ERR1 ERROR IF MORE THAN 366 DAYS JMP L1 OT1 CLE DETERMINE DAY OF WEEK LDA Y0 YEARS AFTER 1900 MPY D365 DAYS AFTER JAN 0,1900 (RES=31 BIT INT) ADA NLP ADD LEAP DAYS SEZ CLE,INB CARRY OVERFLOW BIT ADA IDA ADD DAYS THIS YEAR SEZ INB CARRY OVERFLOW BIT DIV D7 REMAINDER=NUMBER OF DAY OF WEEK (0-6) JMP DATE,I RETURN * ERR1 CCA SET A<0 FOR JMP DATE,I ERROR RETURN SKP * * DECIMAL DATE ENTRY POINT * GIVEN ITIME ARRAY IT(6), THIS ROUTINE EXTRACTS THE JULIAN * DAY OF YEAR [IT(5)], AND THE YEAR [IT(6)], AND RETURNS THE * DAY OF WEEK # (0-6, 0=SUNDAY), THE MONTH # (1-12), AND THE * DAY OF MONTH NUMBER (1-31) AS BINARY NUMBERS. * USE: INTEGER IT(6) * CALL EXEC(11,IT,IT(6)) * CALL TMDA2(IT,IDOW,IMON,IDOM) * IF IT(5)=281 AND IT(6)=1976 THE RETURNED VALUES WOULD BE * IDOW=4, IMON=10, & IDOM=7. * IF ERROR IN GIVEN IT ARRAY, IDOW SET = -1 * * ADAT NOP ADDR OF TIME ARRAY ADOW NOP ADDR FOR RETURN OF DAY OF WEEK AMON NOP ADDR FOR RETURN OF MONTH NUMBER ADOM NOP ADDR FOR RETURN OF DAY OF MONTH NUMBER TMDA2 NOP ENTRY POINT JSB .ENTR GET ARG ADDRESSES DEF ADAT LDA ADAT GET ADDR OF START OF ITIME ARRAY ADA D4 COMPUTE ADDR OF ITIME(5) DLD A,I GET ITIME(5) & ITIME(6) STA IDA STORE JULIAN DAY OF YEAR STB IYR STORE JULIAN YEAR JSB DATE CONVERT DATE SSA CHECK FOR ERROR CCB YES, SET B=-1 STB ADOW,I RETURN DAY OF WEEK NUMBER (0-6) LDA MO V GET MONTH NUMBER INA CONVERT 0-11 TO 1-12 LDB DA GET DAY OF MONTH NUMBER STA AMON,I RETURN MONTH NUMBER STB ADOM,I RETURN DAY OF MONTH JMP TMDA2,I NORMAL RETURN * * CONSTANTS & STORAGE * D3 DEC 3 D4 DEC 4 D6 DEC 6 D7 DEC 7 D10 DEC 10 D11 DEC 11 D16 DEC 16 D100 DEC 100 D365 DEC 365 M1 DEC -1 MYB DEC -1900 -BASE YEAR ASB ASC 1,00 ASCII ZERO-ZERO CNSP ASC 1,: ASCII COLON-SPACE PDCN ASC 1,.: ASCII PERIOD-COLON DA OCT 0 DAY OF MONTH MO OCT 0 MONTH NUMBER (0-11) Y0 OCT 0 YEARS AFTER 1900 NLP OCT 0 # LEAP YEARS AFTER 1900 * 6 WORD ARRAY - DO NOT SEPERATE IMS NOP HUNDREDTHS OF SECONDS ISC NOP SECONDS IMN NOP MINUTES IHR NOP HOURS IDA NOP DAY OF YEAR (1-366) IYR DEC 1900 YEAR (BINARY) * DBUF DEF BUF BUF ASC 1, OUTPUT BUFFER DW ASC 2,SUN MON ASC 2,JAN DAY ASC 1,00 ASC 1,, YR ASC 2,1900 ASC 1, HR ASC 1, 0 ASC 1,0: MN ASC 1,00 SC ASC 1,:0 ASC 1,0. MS ASC 1,00 * DTBL1 DEF TBL1 DAYS IN MONTH TABLE TBL1 DEC -31,-28,-31,-30,-31,-30 DEC -31,-31,-30,-31,-30,-31 DEND DEF TBL1+12 DTB11 DEF TBL1+1 * DTBL2 DEF TBL2 TBL2 ASC 2,JAN MONTH NAME TABLE ASC 2,FEB ASC 2,MAR ASC 2,APR ASC 2,MAY ASC 2,JUN ASC 2,JUL ASC 2,AUG ASC 2,SEP ASC 2,OCT ASC 2,NOV ASC 2,DEC * DTBL3 DEF TBL3 TBL3 ASC 2,SUN ASC 2,MON ASC 2,TUE ASC 2,WED ASC 2,THU ASC 2,FRI ASC 2,SAT * A EQU 0 B EQU 1 T1 EQU Y0 TMDA1 EQU TMDA LPFLG EQU MS LP YR FLAG * LEN EQU * END $"$   91780-18020 1840 S C0122 &#CODE RJE TDUMP UTILITY             H0101 pASMB,R,L,C HED DCODE: RJE TRACE SUPPORT SUBROUTINE * (C) HEWLETT-PACKARD CO.1978 * NAM DCODE,7 91780-16017 REV.1840 780725 ENT CMD,EBC EXT .MVW,.ENTR * * DATE: 780725 * NAME: DCODE * SOURCE: 91780-18020 * RELOC: 91780-16017 (PART OF) * PGMR: D. BOLIERE & B. GUDZ * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * THIS DCODE SUBROUTINE WAS WRITTEN FOR USE WITH THE TRACE CAPABILITY * OF RJE/1000. IT CONTAINS TWO ENTRY POINTS: * * CALL CMD(ICMD,LABEL) TO INTERPRET AN OCTAL COMMAND WORD 'ICMD' * FOR RJE/1000 INTO A 14 WORD ASCII DESCRIPTION WHICH IS PLACED * INTO THE USERS BUFFER IDENTIFIED BY 'LABEL'. * * CALL EBC(IEBC,CODE) TO TRANSLATE AN HP ASCII CHARACTER LOCATED * IN 'IEBC' INTO AN EBCDIC CHARACTER TO BE PLACED INTO 'CODE'. * * ICMD NOP LABEL NOP CMD NOP JSB .ENTR PASS PARAMETER ADDRESSES DEF ICMD * LDB CWTBL SET B-REG TO FWA OF CONTROL WORD TABLE LDA ICMD,I AND M3777 FETCH COMMAND TO DECODE * SCH CPA 1,I COMPARE AGAINST NEXT TABLE ENTRY JMP GOTIT FOUND A MATCH!! INB BUMP TABLE POINTER INB CPB LSTEN END OF TABLE? RSS YES, USE ERROR MESSAGE THEN JMP SCH NO, CONTINUE SEARCH * GOTIT INB MOVE 14 LDA 1,I WORD ASCII LDB LABEL DESCRIPTION JSB .MVW TO THE DEF D14 USERS BUFFER NOP JMP CMD,I RETURN TO CALLER * * M3777 OCT 3777 D14 DEC 14 * CWTBL DEF *+1 TABLE OF LHEGAL CONTROL WORDS MESSAGE POINTERS OCT 3703 DEF INITL OCT 3603 DEF OFF OCT 3503 DEF RC2SD OCT 3403 DEF HNDSK OCT 3303 DEF ANSWR OCT 3203 DEF SEOF OCT 3103 DEF SD2RC OCT 2703 DEF LSN20 OCT 3702 DEF SEND OCT 3701 DEF SENDC OCT 3601 DEF READ1 OCT 3501 DEF READ2 OCT 3401 DEF READ3 OCT 3301 DEF READ4 LSTEN DEF * DEF ENMES * SUP INITL ASC 14,INITIALIZE DRIVER OFF ASC 14,DISCONNECT RC2SD ASC 14,BID FOR LINE HNDSK ASC 14,ESTABLISH MODEM CONNECTION ANSWR ASC 14,AUTO-ANSWER SEOF ASC 14,SEND EOT SD2RC ASC 14,LISTEN TO LINE FOR LONG T.O. LSN20 ASC 14,LISTEN TO LINE FOR 20 SECS SEND ASC 14,WRITE SENDC ASC 14,WRITE-CONVERSATIONAL READ1 ASC 14,READ (SEND RVI) READ2 ASC 14,READ (CONVERSATIONAL) READ3 ASC 14,READ(SEND NAK) READ4 ASC 14,READ(SEND ACK 0/1) ENMES ASC 14,ILLEGAL FUNCTION * * IEBC NOP CODE NOP EBC NOP JSB .ENTR PASS PARAMETER ADDRESSES DEF IEBC * LDA IEBC,I FETCH USER SPECIFIED CHARACTER ALR AND MULTIPLY BY TWO ADA EBTBL INDEX INTO TABLE DLD 0,I AND FETCH EBCDIC CHARACTER DST CODE,I SAVE IN USER BUFFER JMP EBC,I AND RETURN * SUP * EBTBL DEF *+1 TABLE OF LEGAL EBCDIC CODES ASC 16,NULL SOH STX ETX PF HT LC DEL --> 7 ASC 16, XXX RLF SMM VT FF CR SO SI --> 17 ASC 16, DLE DC1 DC2 DC3 RES NL BS IL --> 27 ASC 16, CAN EM CC XXX IFS IGS IRS IUS --> 37 ASC 16, DS SOS FS XXX BYP LF ETB ESC --> 47 ASC 16, XXX XXX SM XXX XXX ENQ ACK BEL --> 57 ASC 16, XXX XXX SYN XXX PN RS UC EOT --> 67 ASC 16, XXX XXX XXX XXX DC4 NAK XXX SUB --> 77 ASC 16, XXX XXX XXX XXX XXX XXX XXX -->107 ASC 16, XXX XXXCENT . < ( +VBAR -->117 ASC 16, & XXX XXX  XXX XXX XXX XXX XXX -->127 ASC 16, XXX XXX ! $ * ) ; NOT -->137 ASC 16, - / XXX XXX XXX XXX XXX XXX -->147 ASC 16, XXX XXXBBAR , % - > ? -->157 ASC 16, XXX XXX XXX XXX XXX XXX XXX XXX -->167 ASC 16, XXX \ : # @ ' = " -->177 ASC 16, XXX 'A 'B 'C 'D 'E 'F 'G -->207 ASC 16, 'H 'I XXX XXX XXX XXX XXX XXX -->217 ASC 16, XXX 'J 'K 'L 'M 'N 'O 'P -->227 ASC 16, 'Q 'R XXX XXX XXX XXX XXX XXX -->237 ASC 16, XXXTILD 'S 'T 'U 'V 'W 'X -->247 ASC 16, 'Y 'Z XXX XXX XXX XXX XXX XXX -->257 ASC 16, XXX XXX XXX XXX XXX XXX XXX XXX -->267 ASC 16, XXX XXX XXX XXX XXX XXX XXX XXX -->277 ASC 16,LBRA A B C D E F G -->307 ASC 16, H I XXX XXX XXX XXX XXX XXX -->317 ASC 16,RBRA J K L M N O P -->327 ASC 16, Q R XXX XXX XXX XXX XXX XXX -->337 ASC 16, / XXX S T U V W X -->347 ASC 16, Y Z XXX XXX XXX XXX XXX XXX -->357 ASC 16, 0 1 2 3 4 5 6 7 -->367 ASC 16, 8 9 XXX XXX XXX XXX XXX XXX -->377 * END }  92000-18001 A S C0122 AUTO RESTART PROGRAM AUTOR             H0101 ASMB,R,L,C,B HED AUTO RESTART PROGRAM ** A-92000-16001-1 * NAME: AUTOR * SOURCE: 92000-18001 * RELOC: 92000-16001 * DATE: 750527 * * ******************************************************* ********** * * THIS PROGRAM CONTAINS INFORMATION WHICH IS PROPRIETARY TO * * * THE HEWLETT-PACKARD COMPANY. IT IS NOT TO BE DISCLOSED TO * * * ANY THIRD PARTIES OR REPRODUCED EXCEPT FOR ARCHIVE PURPOSES * * ******************************* ********************************** NAM AUTOR,1,1 92000-16001 750527 ENT AUTOR EXT EXEC * AUTOR NOP ENTRY/TEMPORARY STORAGE * CLA,INA RESET LU# TO STA CNWD 1 FOR THIS ENTRY * SRCH JSB EXEC *SEARCH EQT FOR DVR43* DEF *+4 ERROR RETURN DEF ICODE REQUEST CODE DEF CNWD LU# FOR STATUS CALL DEF EQT5 BUF LOCATION JMP BDLU ERROR ROUTINE LDA EQT5 AND EMASK MASK OUT S TATUS AND AV. CPA .43 TEST FOR POWER FAIL DRIVER JMP GTIME FOUND DVR43-GO GET TIME OF P/F BDLU LDA CNWD NOT DVR43--GO TRY AGAIN CPA B77 TEST FOR END OF LU#S JMP NO.LU YES-POWER FAIL DRIVER NOT FOUND INA NO-CONTINUE SEARCH--BUMP LU STA CNWD SAVE LU# FOR EXEC CALL JMP SRCH * * * * POWER FAIL DRIVER NOT FOUND * NO.LU JSB EXEC DEF *+5 DEF .2 DEF .1 DEF NOBUF DEF NBL CLA STA CNWD SET P/F LU. TO 0 FOR SECOND CALL JMP SCAN SKP * * * POWER FAIL DRIVER FOUND * REQUEST READ TO * OBTAIN TIME * GTIME JSB EXEC DEF GT2 RETURN DEF .1 READ DEF CNWD LU OF P/F DRIVER DEF TIME TIME BUFFER DEF .3 BUFFER LENGTH * * * GT2 LDA TIME *CONVERT TIME FOR PRINTING* LDB TIME+1 CLE CLEAR E FOR ADDITION ADA PRS1 ADD POSITIVE 24 HRS. SEZ TO GET A POSITIVE INB TIME ADB PRS2 DIV .6000 DIVIDE BY 6000 STA BUF1 TEMPORARY STORAGE FOR MIN/HRS ASR 16 POSITION B(SEC/10MS) FOR DIVID E DIV .100 DIVIDE BY 100 TO GET SEC/10MS STB BUF4 SET 10MS VALUE STA BUF3 SET SECONDS VALUE CLB CLB FOR DIVIDE LDA BUF1 GET MIN/HRS DIV .60 SEPARATE STB BUF2 SET MIN LDB R.BUF SET BUFFER AREA POINTER STB TEMP1 FOR THIS CONVERSION LDB N4 SET CONVERSION COUNTER STB TEMP2 * * BACK JSB CNVRT GO CONVERT TO ASCII STA TEMP1,I SAVE IN OUTPUT BUFFER ISZ TEMP2 TEST FOR END OF CONVERSION RSS JMP DA.YR GO CONVERT DAY AND YEAR ISZ TEMP1 BUMP OUTPUT POINTER ISZ TEMP1 LDA TEMP1,I GET NEXT VALUE JMP BACK GO CONVERT NEXT VALUE * DA.YR LDA TI ME+2 FETCH DAY AND YEAR CLB DIV D365 GET YEAR CCE,INA ADA YEAR1 SET YEAR INTO BUFFER STA YEAR SAVE FOR PRINTING ASR 16 PREPARE TO GET DAY DIV .100 GET HUNDREDS IOR BLK0 STA DAY SAVE IN PRINT BUFFER ASR 16 JSB CNVRT GO GET TENS AND ONES STA DAY+1 SAVE IN PRINT BUFFER * * * * SCAN EQT FOR ALL TTY DEVICES (DVR00) * AND ISSUE WRITE REQUEST (POWER FAIL * TIME MESSAGE ) TO EACH * * * SCAN CLA,INA SET LU#. TO STA LU 1 FOR SEARCH OF EQT SCAN2 JSB EXEC DEF *+4 ERROR RETURN POINT DEF ICODE REQUEST CODE DEF LU LU# FOR STATUS TEST DEF EQT5 BUF LOCATION JMP BAD LU NOT ASSIGNED-GO TEST NEXT LU LDA EQT5 FETCH EQT5 AND EMASK GET RID OF STATUS AND AV. SZA,RSS TEST FOR DVR00 JMP PRINT FOUND DVR00 GO PRINT P/F MESSAGE BAD LD A LU NOT DVR00-CONTINUE CPA B77 TEST FOR END OF SCAN JMP DONE YES-GO RESET POINTERS AND CONSTANTS-EXIT INA NO-BUMP LU# STA LU SET LU# FOR NEXT TEST JMP SCAN2 GO TEST NEXT LU * * * * PRINT POWER FAIL MESSAGE * ON DVR00 DEVICE FOUND IN SCAN ROUTINE * * * * * PRINT JSB EXEC DEF *+5 RETURN DEF .2 WRITE COMMAND DEF LU LU# OF DEVICE DEF MESS P/F ME SSAGE DEF MESL. MESSAGE LENGTH JMP BAD GO TEST FOR END OF SEARCH-CONTINUE SPC 5 * * * * CONVERT A TWO DIGIT BINARY NUMBER INTO ASCII * * * * CNVRT NOP CLB DIV .10 GET TENS AND ONE S ALF,ALF SHIFT TENS DIGIT INTO UPPER CHAR POSITION IOR ASCII CREATE AN ASCII FIELD IOR B 'OR' IN ONES DIGIT JMP CNVRT,I * * * * SECOND CALL ON P.FAIL ROUTINE RESETS * TO SAVE TIME ON NEXT F AILURE. * * DONE JSB EXEC DEF *+5 DEF N1 SECOND READ REQUEST DEF CNWD LU OF P/F DRIVER. DEF TIME TIME BUFFER DEF .3 BUFFER LEGNTH NOP POINT OF RETURN IF P/F LU. UNKNOWN SPC 5 * * * * * * * * *************EXIT TO SYSTEM************* JSB EXEC DEF *+2 DEF IC2 * * * * * CONSTANT AND STORAGE AREAS * * ICODE OCT 100015 YEAR1 OCT 033460 BLK0 OCT 0200 60 ASCII OCT 030060 EMASK OCT 37400 .43 OCT 21400 D365 DEC 365 B77 OCT 77 .2 DEC 2 .3 DEC 3 .1 DEC 1 N1 OCT 100001 PRS1 OCT 153000 PRS2 OCT 203 CNWD OCT 1 EQT5 BSS 1 TEMP2 EQU EQT5 TEMPORARY STORAGE NOBUF OCT 6412 CR/LF ASC 12, NO POWER FAIL LU FOUND. NBL DEC 13 TIME BSS 3 .6000 DEC 6000 .100 DEC 100 .60 DEC 60 .10 DEC 10 MESS OCT 6412 ASC 9, POWER FAILED AT : BUF1 NOP ASC 1,: BUF2 NOP ASC 1,: BU F3 NOP ASC 1,: BUF4 NOP ASC 4,: ON DAY DAY BSS 2 ASC 2, OF ASC 1,19 YEAR BSS 1 MESL. DEC 27 TEMP1 BSS 1 TEMPORARY STORAGE LU EQU TEMP1 TEMPROARY STORAGE R.BUF DEF BUF1 IC2 DEC 6 B EQ U 1 N4 OCT -4 END AUTOR j  92000-18002 A S C0122 MEMORY ALLOCATION $ALC             H0101 }ASMB,R,L,C,B HED * REAL-TIME EXECUTIVE MEMORY ALLOCATION * A-92000-16002-1 * NAME: $ALC * SOURCE: 92000-18002 * RELOC: 92000-16002 * PGMR: G.A.A. * * *************************************************************** * * ( C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM $ALC,0 92000-16002 750327 * ENT $ALC,$RTN EXT $LIST,$WORK * * PROGRAMMER: G.A. ANZINGER HP AMD 1 MAY 70 BCS * 24 JUN 74 RTE * 26 MAR 75 RTE-B * * REQUESTS MAY BE MADE TO ALLOCATE AND RELEASE BUFFERS * FROM THE MEMORY AVAILABLE AFTER LOADING. * * 1. ALLOCATE: CALLING SEQUENCE - * (P) JSB $ALC * (P+1) (# OF WORDS NEEDED) * (P+2) -RETURN NO MEMORY EVER (A)=-1, (B)=MAX EVER * (P+3) -RETURN NO MEMORY NOW (A)=0, (B)=MAX NOW * (P+4) -RETURN OK (A)=ADDR , (B)=SIZE OR SIZE+1 * * 2. RELEASE BUFFER TO AVAILABLE MEMORY * (P) JSB $RTN * (P+1) (FWA OF BUFFER) * (P+2) (# OF WORDS RETURNED) * (P+3) -RETURN- (ALL REGISTERS DESTROYED) * * IF A REQUEST FOR A BUFFER OF LENGTH X CANNOT BE FILLED * DURING A GIVEN CALL, RETURN IS MADE WITH: * (A) = 0 * * IF, WHEN BUFFER REQUESTED, - (AVMEM) - SHOWS INSUFFICIENT CORE * AVAILABLE TO CONTAIN A BUFFER OF THE LENGTH REQUESTED, * THEN RETURN IS MADE WITH: * (A) = -1 * (B) = MAXIMUM LENGTH BUFFER THAT THE PROGRAM MAY ALLOCATE. * * TO FIND OUT HOW LARGE A BUFFER MAY BE ALLOCATED, USE THE CALL * * JSB $ALC * DEC 32767 * k* BLOCKS OF MEMO RY AVAILABLE FOR OUTPUT BUFFERING ARE LINKED THROUGH * THE FIRST TWO WORDS OF EACH BLOCK - * WORD1 - LENGTH OF BLOCK * WORD2 - ADDRESS OF NEXT BLOCK (OR 77777 IF THIS IS LAST BLOCK) * * THE ALLOCATOR 'TRANSFERS' THE UPPER EN D OF A BLOCK TO IOC AND * SHORTENS THE LENGTH OF THE BLOCK BY THE AMOUNT 'TRANSFERRED' * * * REGISTERS ARE NOT PRESERVED * SKP $ALC JMP ALCIN INIT (FROM $STRT, RETURNS TO $WORK) LDA $ALC,I GET THE LENGTH OF THE RE QUEST STA ADX AND SAVE IT STA XTEMP,I SAVE IN ID SEG IN CASE SUSPEND LDB A ADA AVMEM ENOUGH MEMORY NOW SSA TO HONOR THE REQUEST? JMP .A1 YES, GO ALLOCATE. ADB MAXEV SSB,RSS WHAT ABOUT LATER? JMP ERETN NEVER! ISZ $ALC MAYBE, BUT NOT NOW. REJ CLA,CLE,RSS A=0, E=0 NOT NOW ERETN CCA,CLE A=-1,E=0 NOT EVER JMP SETB RETURN * .A1 ISZ $ALC TRY AN ALLOCATION CCA SET CORE AVAIL. NOW TO 0 STA ALCIN LDB PNTRA START THE SEARCH LOOP WITH .A2 STB BAD SET LAST BUFFER ADDRESS CLE,INB STEP TO THE NEXT ADDRESS LDB B,I GET THE NEXT S EGMENT ADDRESS CPB M7 IF 77777 THEN END OF LIST AND NO JMP NOMOR MEMORY SO REJECT LDA B,I CHECK TO SEE IF THIS IS THE ADA ALCIN LARGEST LENGTH SO FAR LDA B,I GET THE LENGTH CMA,SEZ SET NEG(-1) AND IF STA ALCIN LARGEST SO FAR SAVE ADA ADX WILL IT SATISFY THE REQUEST? CMA,SSA IF ZERO OR NEGATIVE USE IT JMP .A2 ELSE GO TRY NEXT ONE ADA DM2 IS BLOCK AT LEAST 2 WORDS CCE,SSA LARGER THAN REQUEST? JMP .A4 NO-ALLOCATE WHOLE BLOCK ADA D2 (A)=LENGTH(I)-L(X) STA B,I SET NEW L(I) ADA B (A)=BUFFER ADDRESS JMP eSETA RETURN TO USER * .A4 LDA B, I ALLOCATE ENTIRE BLOCK. STA ADX SET BUFFER LENGTH STB A BUFFER ADDRESS TO A CCE,INB SET E FOR ACCEPTED RETURN LDB B,I GET THE POINTER TO THE NEXT BLOCK ISZ BAD STEP TO POINTER AD DRESS IN LAST STB BAD,I BLOCK AND SET THE POINTER SETA ISZ $ALC SETB LDB MAXEV SET B FOR REJECT SZA,RSS IF JUST FOR NOW RESET TO MAX LDB AVMEM AVAILABLE NOW CMB,SEZ SET POSITIVE AND IF REQUEST LDB ADX SATISFIED SET TO LENGTH ISZ $ALC STEP RETURN ADDRESS JMP $ALC,I AND RETURN * NOMOR LDA ALCIN PICK UP MAX LEFT DURING SEARCH STA AVMEM UPDATE MAX AVAILABLE NOW JMP REJ NOW RETURN * * $RTN NOP ENTRY POINT FOR BUFFER RETURN LDA $RTN,I (A) = FWA RETURN BUFFER (ADX) STA ADX CMA,INA SET NEG AND STA SAVA SAVE ISZ $RTN LDA $RTN,I # OF WORDS RETURNED (X) ADA DM2 SSA <2? JMP RETNR BUFFER TO SMALL - IGNORE LDA PNTRA GET THE STARTING POINTER .R11 STA BAD BAD _ AAD INA LDB A,I AAD _ NEXTBUFAD STB A A _ PNTR ADB SAVA AAD -ADX CMB,SSB,INB,SZB ADX-AAD>=0? RSS SKIP IF FOUND JMP .R11 ELSE CONTINUE * * * LDB BAD GET LOWER BUFFER ADDRESS CPB PNTRA IF LOCAT POINTER JMP .R3 ASSUME NO OVERLAP ADB B,I ADD LENGTH AND ADB SAVA SUBTRACT THE NEW BLOCK ADDRESS CMB,SSB,INB,RSS IF NEG NO OVERLAP SO JMP .R3 JUMP ADB $RTN,I ELSE COMPUTE NEW LENGTH ADB BAD,I NOW HAVE NEW +OLD-OVERLAP .R4 ST B BAD,I SET LENGTH ;CHECK FOR HIGH OVER- ADB BAD LAP COMPUTE END OF BLOCK CMB,CLE,INB AND SUBTRACT FROM THE HIGH BLOCK ADB A A HAS HIGH BLOCK ADDRELSS SEZ,CLE,SZB IF RESULT POSITIVE JMP .R5 JUMP ADB A,I ADD OLD UPPER LENGTH ADB BAD,I CURRENT LENGTH STB BAD,I NEW+OLD-OVERLAP CLE,INA GET POINTER AND BRING LDA A,I DOWN TO NEW BLOCK .R5 LDB BAD,I SAVE MAX LENGTH THIS RETUR N ISZ BAD STEP TO POINTER ADRRESS STA BAD,I SET THE POINTER LDA AVMEM CHECK TOO SEE IF THIS LENGTH ADA B ADD CURRENT MAX CMB,SEZ,CLE SET NEG; NEW MAX? STB AVMEM YES; SET IT RETNR ISZ $RTN MEM16 LDB SUSP3 GET SUSPENSION LIST PTR SZB,RSS IF END OF LIST JMP $RTN,I RETURN. * LDA B INA PICK UP XTEMP,I FOR LDA A,I BLOCK SIZE REQUESTED. ADA AVMEM COMPARE TO MAX NOW CMA,SSA,INA,SZA ENOUGH YET? JMP $RTN,I NO, TOO BAD. JSB $LIST YES, SCHEDULE PROGRAM. OCT 401 JMP MEM16 TRY NEXT PROGRAM TOO. * .R3 ISZ BAD NO LOW OVERLAP SET NEW BLOCK LDB AD X ADDRESS IN LOW BLOCK STB BAD,I TO LINK THE BLOCKS STB BAD SET POINTER FOR HIGH BLOCK CHECK LDB $RTN,I SET B TO THE LENGTH OF RETURN JMP .R4 CHECK FOR HIGH OVERLAP * * * PNTRA DEF AVMEM DUMMY BLOCK ADDRESS(DON'T MESS!) AVMEM OCT -1 DUMMY BLOCK LENGTH (NOT USED) PNTR OCT 77777 DUMMY BLOCK END (DON'T MESS!) BAD NOP SAVA NOP M7 OCT 77777 DM2 OCT -2 D2 OCT 2 ADX NOP * ALCIN LDA AVMEM INITIALIZATION C ODE MAXEV STA * MAX SIZE BLOCK EVER AVAILABLE JMP $WORK JMP TO NEXT STARTUP ROUTINE * A EQU 0 B EQU 1 SUSP3 EQU 1714B XTEMP EQU 1721B * BSS 0 LENGTH OF PROGRAM * END $ALC o   92000-80003 B S 0422 REAL TIME (RTC) EXEC CONT.             H0104 ASMB,R,F,B,C,L HED * REAL TIME (RTC) EXEC. CONTROL A-92000-60003-2 REV. B * NAME: RTC * LISTING: A-92000-60003-2 * SOURCE: 92000-80003 * RELOC: 92000-60003 * * ********************************** ****************************** * * THIS PROGRAM CONTAINS INFORMATION WHICH IS PROPRIETARY TO * * * THE HEWLETT-PACKARD COMPANY. IT IS NOT TO BE DISCLOSED TO * * * ANY THIRD PARTIES OR REPRODUCED EXCEPT FOR ARCHIVE PURPOSES * * ********** ****************************************************** NAM RTC,7 92000-60003 750404 REV.B SUP * * * * * ENTRY POINTS FOR SYSTEM * * * ENT $LIST,$XCIC,$CIC,$STRT,EXEC,$TIME ENT $LIBX,$LIBR,.OPSY ENT $T MP1,$TMP2,$TMP3,$TMP4,$TMPW ENT $ER04,$XEQ,$RXIT,$IOER,$WRD2 ENT $L.13,$L.51,$L.55,$R02,$L.10 ENT $CVEQ,$SCLK,$UPIO ENT $PWR5,$MESS,$WORK ENT $L.16,$L.56,$R06 * EXT $ALC,$RTN * * * ***** < EXEC > PR OGRAM DESCRIPTION ***** * * THE PRIMARY FUNCTION OF THIS PROGRAM IS * TO PROVIDE GENERAL CHECKING AND EXAMINATION * OF SYSTEM SERVICE REQUESTS AND TO CALL THE * APPROPRIATE PROCESSING ROUTINE IN OTHER * SECTIONS OF THE REAL-TIME EXECUTIVE. * * THIS PROGRAM IS CALLED BY THE USERS PROGRAM. * * SYSTEM REQUEST FORMAT: * ---------------------- * * THE GENERAL FORMAT OF A SYSTEM REQUEST IS * A BLOCK CONTAINING AN EXECUTABLE INSTRUCTION * TO GAIN ENTRY TO THE EXECUTIVE AN D AN ADDRESS * LIST OF PARAMETERS. THE FIRST PARAMETER IS * A NUMERIC CODE IDENTIFYING THE REQUEST TYPE. * THE LENGTH OF THE PARAMETER LIST VARIES * ACCORDING TO THE AMOUNT OF INFORMATION RE- * QUIRED FOR EACH REQUEST (OR VARIATIONS WITHIN * A SINGLE REQUEST). THIS FORMAT ALLOWS SYSTEM * REQUESTS TO BE SPECIFIED IN A FORTRAN CALL * STATEMENT IN ADDITION TO ASSEMBLY LANGUAGE FORMAT. * * CALL EXEC (P1,P2,...PN) * * OR * * EXT EXEC * JSB EXEC * DEF *+1+N DEFINE EXIT POINT, N= # PARAMETERS * DEF RCODE DEFINE REQUEST CODE * DEF P1 DEFINE PARAMETER LIST, 1 TO N * . * . (PARAMETERS MAY BE INDIRECTLY * . REFERENCED, E.G. DEF P3,I) * DEF PN * -- ERROR RETURN IF NEGATIVE RCODE * -- NORMAL RETURN * - EXIT POINT - * * RCODE DEC N * P1 DEC/OCT/DEF,ETC TO DEFINE A VLAUE * * * SKP * EXEC NOP CLF 0 LDB EXEC * ANALYZE SYSTEM REQUEST * LDA B,I GET EXIT ADDRESS, ADB N1 STB XSUSP,I SAVE SUSPEND LOCATION INB STA RQRTN SAVE IN BASE PAGE STB TEMP1 SAVE REQUEST WORD 2 ADDRESS. CMB,INB SUBTRACT WORD 2 ADDRESS FROM ADA B EXIT ADDRESS. ADA N2 STA RQCNT AND SAVE # OF ACTUAL PARAMETERS. STA B * ADA N9 IS GREATER SSA,RSS THAN JMP RQERR 8. * LDA RQP1A SET (TEMP2) = STA TEMP2 ADDRESS OF RQP1 IN B.P. CMB ISZ TEMP1 SET (TEMP1) = ADDR OF WORD 4 R1 JSB EFFAD GET EFFECTIVE ADDRESS STA TEMP2,I SET IN B.P. ISZ TEMP2 INDEX ISZ TEMP1 ADDRESSES AND INB,SZB PARAMETER COUNT. JMP R1 - CONTINUE - SKP * * CHECK LEGALITY OF REQUEST CODE * LDA RQP1,I GET REQUEST CODE LDB XEQT GET ID SEG A DDR ADB .15 COMPUTE STATUS WORD ADDRESS STB TEMP1 AND SAVE LDB B,I GET STATUS WORD RAL,CLE,ERA PUT aBORT OPTION IB (E) RBL,ERB PUT ABORT OPTION STB TEMP1,I IN STATUS WORD SSB IF ABORT OPTION SET ISZ RQRTN THEN INCREMENT RETURN STA RQP1 SAVE REQUEST CODE SZA,RSS ERROR IF JMP RQERR ZERO CMA,INA SSA,RSS JMP :RQERR SUBTRACT FROM # ADA .3 SSA,RSS JMP R3 CPA N10 R3 JMP IOREQ IF REQ=1,2,3,6 OR 13 ITS OK CPA N3 IS THIS EXEC(6)/COMPLETION REQUEST JMP PCOMP YES! JMP RQERR * * SUBROUTINE , COMPUTE EFFECTIVE ADDRESS * EFFAD NOP LDA TEMP1,I GET ADDRESS SZA,RSS ERROR IF JMP RQERR ADDRESS = CPA .1 0 OR 1 JMP RQERR (A OR B REGISTERS) RAL,CLE,SLA,ERA TEST I-BIT AND CLEAR RSS -INDIREC T- JMP EFFAD,I RETURN WITH (A) = ADDRESS. LDA A,I GET NEXT ADDRESS IN INDIRECT JMP EFFAD+2 CHAIN AND PROCESS. SPC 1 .3 DEC 3 N1 DEC -1 N2 DEC -2 N9 DEC -9 RQP1A DEF RQP1 * * * PROGRAM COMPL ETION REQUEST * * ALL PARAMETERS OTHER THAN REQUEST CODE=6 * ARE IGNORED. PROGRAM IS PUT IN DORMANT LIST * * PCOMP LDA XEQT ID SEG ADDR OF CURRENT PROGRAM STA *+3 JSB $LIST DORMANT REQUEST OCT 100 DEF * JMP $XEQ * HED SIMULATED $LIBR AND $LIBX SUBR. A-92000-60003-2 REV. B * *CALLING SEQUENCES: ENTRY TERMINATION * *PRIVILEGED: JSB $LIBR JSB $LIBX * NOP DEF (PROGRA M ENTRY PT) * *RE-ENTRANT: JSB $LIBR JSB $LIBX * DEF TDB DEF TDB * DEC 0 OR 1 * * BASIC ASSUMPTION: PRIVILEGED ROUTINES MAY NO CALL * RE-ENTRANT ROU TINES * * $LIBR NOP CLF 0 OFF THE INTERRUPTS STA TEMPA SAVE A LDA $LIBR,I ISZ $LIBR SET RETURN ADDRESS SZA NOP(PRIV) OR DEF TDB(RE-ENT) JMP RENT R RE-ENTRANT ISZ PRIV ADD ONE TO PRIV FLAG JMP EXITR EXIT RENTR ADA .2 A=DEF TDB+2=RETURN ADDRESS STB -TEMPB SAVE B ERB STB TEMPE SAVE E LDB $LIBR ADB N3 B=WORD BEFOR "JSB $LIBR" * =RETURN ADDRESS LDB B,I LOAD RETURN ADDRESS STB A,I AND STORE IN TDB+2 LDB TEMPE ELB RESTORE E LDB TEMPB RESTORE B EXITR LDA TEMPA RESTORE A JMP $LIBR,I RETURN * $LIBX NOP STA TEMPA SAVE A STB TEMPB SAVE B ERB STB TEMPE SAVE E LDA $LIBX,I LDB PRIV IF PRIV = 0? SZB,RSS JMP RENTX THIS IS A RE-ENTRANT ROUTINE ADB N1 ELSE PRIVILEGED STB PRIV SET PRIV=PRIV-1 LDA A,I A=RETURN ADDRESS JMP EXITX EXIT RENTX ADA .2 A=DEF TDB+2 LDA A,I A=ADDRESS IN TDB+2 ISZ $LIBX $LIBX POINTS TO DEC 0 OR 1 ADA $LIBX,I ADD O OR 2 TO RETURN ADDRESS EXITX STA $LIBX CLA CPA PRIV LDA STFO STA STFX LDA TEMPA RESTORE A LDB TEMPE ELB RESTORE E LDB TEMPB RESTORE B STFX NOP JMP $LIBX,I RETURN * PRIV OCT 0 STFO STF 0 * * HED SYSTEM ABORT SECTION A-92000-60003-2 REV. B * * * ROUTINE: < ABORT > * * PURPOSE: THIS ROUTINE PROVIDES FOR REMOVING * A USER PROGRAM FROM EXECUTION USUALLY * AFTER AN ERROR CONDITION IS DETECTED * WHICH PROHIBITS CONTINUED EXECUTION. * THE PROGRAM IS THEN RESTARTED. * * CALL: (P) JMP ABORT * (P+1) DOES NOT RETURN * ABORT JSB IOCL CLEAR I/O DEVICE QUEUE JSB $LIST REMOVE PROGRAM FROM SCHEDULE LIST  OCT 100 ABP NOP RSTRT JSB $LIST RESCEDULE BASIC OCT 101 BASA NOP JMP $XEQ * RS1 OCT 25000 RESET VALUE FOR TIME RS2 OCT 177574 $TIME OCT 25000 TIME OF DAY IN NEG 10S OF MS OCT 177574 OCT 33633 DAY 000 YEAR 197X .2 OCT 2 * * HED REAL TIME CLOCK PROCESSOR A-92000-60003-2 REV. B ******************************************************************** * THE REAL TIME CLOCK PROCESSOR SECTION OF HP-2100 REAL TIME* * EXECUTIVE HANDLES ALL TIME DEPENDENT FUNCTIONS: * * 1. INCREMEN T REAL TIME CLOCK VALUES EVERY 10 MILLISECOND. * * 2. RESTARTS THE REAL TIME CLOCK AFTER POWER FAILURES. * ******************************************************************** ** ** THE $SCLK ROUTINE IS CONFIGURED IN THE STARTUP ROUTINE A ND * ** IS CALLED BY THE POWER FAIL ROUTINE. * ** ONCE ENTERED, $SCLK RESTARTS THE SYSTEM CLOCK AND EXITS * ** BACK TO THE POWER FAIL DRIVER. * * * $SCLK NOP LDA .2 SETUP TIME BASE OTATB OTA 0 CONFIGURED TO STC TBG STCTB OCT 1100 CONFIGURED TO STC TBG,C STFTB OCT 1600 CONFIGURED TO STF TBG JMP $SCLK,I EXIT * * * * * THE $CLCK ROUTINE FUNCTIONS AS FOLLOWS: * * THE ROUTINE IS ENTERED EVERY 10 MILLISECOND DUE * * TO TIME BASE GENERATOR INTERRUPTS. * * THE TIME VALUE IS INCREMENTED BY 100MS * * THE TIME-OUT CLOCKS F OR ALL ACTIVE DEVICES ARE * UPDATED. IF ANY DEVICE HAS TIMED-OUT, * RTIOC IS ENTERED TO PROCESS THE CONDITION. * * * $CLCK ISZ $TIME INCREMENT TIME BY 10MS JMP IOTOP ISZ $TIME+1 JMP IOTOP LDA RS1 RESET THE COUNTER LDB RS2 TO THE FULL DAYS WORTH STA $TIME OF TENS OF MS. STB $TIME+1 * * PROCESS DEVICE TIME-OUT CLOCKS * IO TOP LDA EQT# SET NEGATIVE OF CMA,INA NUMBER OF EQT STA TEMP ENTRIES FOR INDEX LDA EQTA POINT TO WORD 15 IOTO2 ADA .14 OF EQT ENTRY LDB A,I LOAD WORKING CLOCK- SZB IS IT ACTIVE ? ISZ A,I YES: INCREMENT IT INA,RSS IT HAS NOT TIMED-OUT JMP $DEVT GO TO TIME-OUT PROCESSOR ISZ TEMP THRU? JMP IOTO2 NO: GO DO NEXT ONE * * * * * * * SKP HED ** R EAL TIME SYSTEM SCHEDULER ** A-92000-60003-2 REV. B * * THE $XEQ SECTION OF THE HP-2100 REAL TIME EXECUTIVE * * PERFORMS THE FOLLOWING FUNCTIONS: * * 1. IDLE LOOP WHEN NO PROGRAMS ARE SCHEDULED OR CA NNOT BE * * EXECUTED. * * * CALLING SEQUENCE * JMP $XEQ * $XEQ LDA SKEDD GET ID SEQ ADDRESS SZA IF ZERO, THEN NO PROG SCHED JMP X0010 GO TO PROCESS SCHED LIST * * NO PROGRAM SCHEDULED--SETUP FOR IDLE LOOP * * * THE IDLE LOOP SECTION CONSISTS OF: * * CLEARING XEQT WORD TO SIGNIFY THAT NO P ROGRAM * * CURRENTLY EXECUTING. * * STORE ADDRESS OF 4 DUMMY WORDS INTO XSUSP-XSUSP+3 * * DUE TO I/O PROCESSING. * * TURN INTERRUPT SYSTEM BACK ON * * JUMP TO * * * * LDA N4 SET XSUSP TO XSUSP+3 TO ADDR STA TMP OF FOU R DUMMY WORDS LDB DSUSP ADDRESS OF XSUSP LDA VSUSP ADDRESS OF IDLE DUMMY WORDS STA B,I IN6A INB ISZ TMP JMP *-4 CLA STA XEQT CLEAR XEQT ADDRESS VALUE STF 0 TURN ON INTERRUPTS JMP * IDLE LOOP XQDEF DEF XEQT XEQT TABLE ADDRESS DSUSP DEF XSUSP ADDRESS OF XEQT SUSPEND VALUE VSUSP DEF *+1 ADDRESS OF IDLE DUMMY WORDS BSS 4 DUMMY XEQT IDLE WORDS * * THE SWITCHING SEC TION USES THE SCHEDULE LIST TO DETERMINE * * WHICH PROGRAM TO EXECUTE-STARTING FROM TOP OF LIST. * * IF PROGRAM FROM LIST OF LOWER PRIORITY, THEN * * EXECUTION OF CURRENT PROGRAM CONINUES. * * IF PROGRAM FROM LIST OF HIGHER PRIORITY * * EXECUTION SWITCHING TAKES PLACE.* * X0010 STA ZWORK SCHED LIST PROG ID SEG ADDR ADA .6 STA ZPRIO PRIORITY ADDRESS LDA XEQT IS PR OGRAM CURRENTLY EXECUTING SZA,RSS YES! JMP X0040 NO, SO EXECUTE IT LDA XPRIO,I IS CURRENT PRIO=NEW PRIO CMA,INA ADA ZPRIO,I SZA,RSS NO! JMP X0020 YES,CONTINUE EXISTING PROG SSA IS NEW PROG HIGHER PRIO JMP X0040 YES! X0020 LDA XSUSP,I CONTINUE AT PT OF SUSPENSION X0025 STA TEMP RETURN ADDRESS STORED * RESTORE REGISTERS, MEMORY PROTECT, AND TURN ON INTERRUPT SYSTEM LDA XEO,I RESTORE CLO E, SLA,ELA OVERFLOW STF 1 LDA XA,I A AND LDB XB,I B REGISTERS STF 0 TURN ON INTERRUPTS JMP TEMP,I GO TO EXECUTE PROGRAM * * * * * LOAD PROGRAM ID SEGMEN T ADDRESSES INTO XEQT AREA X0040 LDA N12 LOAD PROGRAM TO BE EXECUTED STA TMP INTO XEQT AREA LDA XQDEF LDB ZWORK STB 0,I INA STB 0,I INB ISZ TMP JMP *-4 LDA XSUSP,I C HECK IF PROGRAM SUSPENDED SZA,RSS NO, SO START AT PRIMARY ENTRY LDA XPENT,I SET TO PRIMARY START ADDRESS JMP X0025 GO TO SET FENCE,REGISTERS AND XEQ * * * LLIST DEF DORMT TOP OF LIST ADDRESSES * .14 DEC 14 .15 DEC 15 N12 DEC -12 * HED RTE SCHED.LIST PROCESSOR SECTION A-92000-60003-2 REV. B * * THE $LIST PROCESSOR SECTION OF THE HP-2100 REAL TIME * * EXECUTIVE PROCESSES THE FOLLOWING LIST REQUESTS * * 1. D ORMANT * * 2. SCHEDULE * * 3. OPERATOR SUSPEND * * 4. NON-OPERATOR SUSPEND * * A. I/O * * B. MEMORY AVAILABLE * * * * CALLING SEQUENCE * * * JSB $LIST * * OCT (ADDRESS CODE)(FUNCTION CODE) * DEF (ADDRESS) * * WHERE * FUNCTION CODE * 0 = DORMANT REQUEST * 1 = SCHEDULE REQUEST * 2 = I/O SUSPEND REQUEST * 3 = *****NOT CURRENTLY USED***** * 4 = MEMORY AVAILABEL REQUEST * 6 = OPERATOR SUSPEND REQUEST * 17 = RELINK PROGRAM REQUEST * 10 THRU 16 ARE NOT ASSIGNED * * ADDRESS CODE * 1 = ID SEGMENT ADDRESS * 2 = ASCII PROGRAM NAME * 3 = NOT USED * 4 = ID SEGMENT ADDRESS IN (B) * * * ADDRESS * 1 = ID SEGMENT ADDRESS * 2 = ASCII PROGRAM NAME ADDRESS * * :THIS WORD MUS T NOT BE SUPPLIED * FOR ADDRESS CODE = 4 * SKUP $LIST NOP ENTRY/EXIT LDA $LIST,I WORD 1 AND .15 STA $WORK SAVE REQUEST CODE XOR $LIST,I FORM ALF,ALF A DDRESS RAL,RAL CODE CPA .4 SEG. ADDR. IN B-REG.?? JMP XXXX YES, GO PROCESS REQUEST ISZ $LIST STEP TO ADDRESS WORD LDB $LIST,I GET IT TO B CPA .1 DEF TO SEG. JM P XXXX ADDRESS IN B-REG?? * JSB TNAME ADDRESS OF ASCII NAME IN B SZA,RSS ID SEG.ADDR. FOUND??? JMP $LIST,I NO. THIS IS AN ERROR RETURN * * XXXX STB WORK STB WLINK LINKAGE ADDRESS ADB .6 STB WPRIO PRIORITY ADDRESS ADB .2 STB WSUSP ADB .7 STB WSTAT STATUS ADDRESS LDA WSTAT,I GET OLD STATUS LDB $WORK GET REQUEST CODE FROM TEMP STORAGE STB WSTAT,I SET NEW STATUS AND .1 5 RRR 16 SWAP REGISTERS HED LINK UPDATE PROCESSOR A-92000-60003-2 REV. B * * THE LINK PROCESSOR SECTION OF THE HP-2116 REAL TIME * * EXECUTIVE * * 1. REMOVES A PROGRAM FROM A LIST * * AND * * 2. ENTERS THE PROGRAM INTO ANOTHER LIST AT THE PROPER PLACE * * ACCORDING TO PRIORITY LEVEL. * * * * * * WHERE * B = CODE OF REMOVAL LIST * A = CODE OF INSERTION LIST * THE ID SEGMENT IS ASSUM ED TO BE LOCATED IN WORK * AND WLINK AND WPRIO SET * * * * THE REMOVAL OF PROGRAM FROM A LIST CONSISTS OF: * * 1. IF I/O LIST (CODE 2), THEN T HIS IS SPECIAL CASE * * AND DOES NOT REQUI ^RE REMOVAL. * * 2. IF NULL LIST, THEN ERROR EXIT TAKEN. * * 3. IF FIRST AND ONLY PROGRAM IN LIST, THEN LIST * * VALU E SET TO ZERO. * * 4. IF FIRST PROGRAM IN LIST, BUT NOT THE ONLY * * PROGRAM IN LIST(LINKAGE NOT ZERO), THEN SET LIST * * VALUE TO THE LINKAGE VALUE. * * 5. IF IN MIDDLE OF LIST, THE LINKAGE OF THE ID SEG * * MENT WHICH POINTS TO THE PROGRAM TO BE REMOVED * * IS SET TO THE LINKAGE VALUE OF THE PROGRAM THAT * * IS REMOVED. * * 6. IF LAST PROGRAM IN LIST, THE LINKAGE VALUE OF * * PREVIOUS PROGRAM IN LIST IS SET TO ZERO. * * SZB REMOVAL CODE IN B IGNORE DORMANT CPB .2 I/O LISj REQ UESTS JMP LK100 YES, SEE IF ADDITION. ADB LLIST ADD TOP OF LIST POINTER * LK010 STB TEMP TOP OF REMOVAL LIST LDB B,I GET TOP OF LIST POINTER SZB,RSS END OF LIST? JMP LK150 YES, RETURN CPB WORK MATCHES PROGRAM? RSS YES JMP LK010 NO, KEEP SEARCHING LDB WLINK,I UPDATE LINKAGE TO BYPASS STB TEMP,I THE DELETED ID SEG HED LINK PROC.-ADD PROGRAM TO A LIST A-92000-60003-2 REV. B * * ADD A PROGRAM TO A LIST * * THE ADDITION OF PROGRAM TO A LIST CONSISTS OF: * * 1. IF I/O LIST (CODE 2), THEN THIS IS SPECIAL CASE * * AND NO ADDITION MADE TO LIST. * * 2. IF NULL LIST, THEN LIST VALUE SET TO POINT TO ID * * SEGMENT OF PROGRAM TO BE ADDED AND THE LINKAGE * * SET TO ZERO. * * 3. IF NOT NULL LIST, THE PROGRAM IS I NSERTED INTO * * LI0ST ACCORDING TO PRIORITY LEVEL AND LINKAGES * * CHANGED TO REFLECT THIS INSERTION. * * 4. IF OF LOWER PRIOR. THAN ANY PROGRAM IN LIST, THEN* * LAST LINKA GE IS SET TO POINT TO THE PROGRAM TO * * BE ADDED AND THE PROGRAM LINKAGE IS CLEARED. * * LK100 SZA,RSS TEST FOR DORMANT REQUEST JMP CLRID CLEAR ID SEG PT OF SUSPENSION CPA .2 I/O LIST REQUESTS JMP LK150 YES, RETURN LK101 ADA LLIST ADD TOP OF LIST POINTER * LK110 STA TEMP SAVE TOP OF LIST POINTER LDA A,I GET POINTER SZA,RSS END OF LIST? JMP LK140 YES, LINK IN NEW PROG CPA WORK IS IT A DUPLIC. PROG? JMP LK150 YES, DUPLIC SO RETURN STA B NOT DUPLIC, COMPARE PRIORITY ADB .6 OF WORK ID SEG LDB B,I AGAINST CMB,INB CURRENT ADB WPRIO,I ID SEG SS B,RSS WORK < CURRENT? JMP LK110 NO, SEE NEXT ONE * LK140 STA WLINK,I LINK THIS TO FOLLOW WORK LDA WORK LINK WORK TO FOLLOW STA TEMP,I PREVIOUS PROG * LK150 ISZ $LIST INCRE RETURN ADDR * CLA *FORCE XEQT RE-LOAD* STA XEQT CLEAR CURRENTLY " EXECUTING" POINTER * JMP $LIST,I FOR RETURN * * * CLEAR PROGRAM ID SEG FOR RESTART * * CLRID STA OPFLG CLEAR OPERATOR FLAG STA WSUSP,I CLEAR SUSPENSION P OINT STA XEQT JMP LK150 * .6 OCT 6 * HED PROGRAM ID SEARCH ROUTINE A-92000-60003-2 REV. B ********************************************************************* ****************PROGRAM ID SEARCH ROUTINE************* *************** * * * * * * * ON ENTRY  * * (B)=ADDRESS OF ASCII PROGRAM NAME * * * * ON RETURN * * IF ID SEGMENT FOUND. * * (B)=ADDRESS OF REQUESTED SEGMENT * * (E)=0 * * * * IF ID SEGMENT NOT FOUND. * * (A)=0 * * (E)=1 * * * ********************************************************************* * TNAME NOP ENTRY EXIT CCE SET E FOR ERROR RETURN STB TMP10 ADDRESS OF NAME CHAR 1&2 INB INCREMENT ADDRESS POINTER STB TMP11 ADDRESS OF NAME CHAR 3&4 INB INCREMENT ADDRESS POINTER LDA B,I FETCH CHAR 5&X AND MASKU (OCT 177400) AND OFF X STA TMP5. SAVE CHARACTER 5 SZA LDA KEYWD FETCH TOP OF KEYWORD LIST STA KEY SET FOR SEARCH * * TN005 LDA KEY,I CHECK TOP OF LIST SZA,RSS IF END JMP TNAME,I ERROR RETURN ADA .12 INCREMENT TO NAME CHAR 1&2 LDB A,I FETCH ASCII NAME CHAR 1&2 CPB TMP10,I COMPARE WITH REQUESTED CHAR 1&2 INA,RSS COMPARES JMP TN030 DOES NOT COMPARE-GO TO NEXT PROG. LDB A,I FETCH CHAR 3&4 CPB TMP1 1,I COMPARE WITH REQUESTED CHAR 3&4 INA,RSS COMPARES JMP TN030 DOES NOT COMPARE-GO TO NEXT PROG LDA A,I FETCH CHAR 5 AND MASKU MASK OFF EXTRA CHAR CPA TMP5. COMPARE WITH REQUESTED CHAR 5  JMP TN040 COMPARES * * TN030 ISZ KEY INCREMENT TO NEXT ID SEGMENT JMP TN005 GO COMPARE NEXT PROGRAM * * TN040 LDB KEY,I PLACE ID SEGMENT ADDRESS IN B CLE CLEAR E FOR NORMAL RETURN JMP TNAME,I EXIT * * MASKU OCT 177400 .12 DEC 12 HED MESSAGE PROCESSOR SIMULATOR ROUTINE A-92000-60003-2 REV. B *************************************************************** *************************************************************** * THE MESSAGE PROCESSOR ROUTINE PROVIDES * * COMPATABILITY FOR THE POWER-FAIL DRIVER. * * THEREFORE,$MESS CAN ONLY BE CALLED BY * * DVP43. THE CALL IS THEN MAPPED INTO A CALL * * TO $LIST(TO ABORT AUTOR) . * * PRIOR TO CALLING $LIST, A SEARCH OF ID. * * SEGMENTS IS PERFORMED(VIA A CALL TO TNAME). * * IF AUTOR IS NOT FOUND,A 1 IS RETURNE D TO * * DVP43 IN THE A-REGESTER. IF AUTOR IS FOUND, $LIST * * IS CALLED AND AUTOR IS ABORTED.RETURN IS TO $XEQ. * *************************************************************** ************************************************ *************** $MESS NOP ADA .2 POSITION POINTER TO RRR 16 ASCII NAME(AUTOR) JSB TNAME SEARCH ID SEGMENTS * SEZ,INA AUTOR NOT FOUND JMP $MESS,I RETURN TO P/F ROUTINE * JSB $LIS T ABORT AUTOR OCT 400 ID SEG ADDR. IN B JMP $XEQ EXIT HED SYSTEM START UP A-92000-60003-2 REV. B ******************************************************************** * THE START SECTION: * * CLEARS INTERRUPT SYSTEM. * * SETS THE FENCE REGISTER TO 0. * * CLEARS XEQT. :TRN * * CONFIGURES AND STARTS THE SYSTEM CLOCK * * CALCULATES SYSTEM AVAILABLE MEMORY AND * * INITIALIZES THE MEMORY ALOCATION ROUTINE. * * CAN BE ENTERED ONLY ONCE FOR START UP. * * AFTER THAT IT IS USED FOR TEMP STORAGE * ******************************************************************** * * $STRT CLC 0 CLEAR INTERRUPT SYSTEM * WPRIO CLA STA FENCE SET FENCE TO 0 OTA 5B WLINK STA XEQT CLEAR XEQT WORD WSUSP LDB KEYWD FIND THE LAST ID SEGMENT WSTAT LDA B,I IN KEYWORD TABLE BECAUSE WORK INB THE EXECUTBLE PROGRAM ZWORK SZA WILL ALWAYS BE IN THAT ZPRIO JMP WSTAT POSITION. OR ELSE! TEMP ADB N2 TMP LDA B,I GOT THE LAST ID SEGMENT ADDRESS COMPL STA BASA SET UP START UP PROGRAM TEMP1 STA SSP SET UP SUSPEND PTR TEMP2 STA ABP SET UP ABORT POTR * SPC 1 TEMP3 LDA TBG SET UP TIME BASE TEMP4 IOR OTA TEMP5 STA TEMPL TMP5. STA OTATB TEMP6 IOR M1100 TEMP9 STA TEMPW KEY STA STCTB CONFL XOR STFTB SCONF STA STFTB TEMP0 LDA .2 TEMPL OTA 0 SET TBG INTERVAL TO 10MS TEMPW STC 0,C * LDB AVMEM RELEASE AVAIL. STB FWA. CMB,INB MEMORY FOR USE ADB BKORG BY $ALC STB RTN. JSB $RTN FWA. NOP RTN. NOP JMP $ALC GO INITIALIZE MEMORY ALLOCATION ROUTINE $WORK LDA BEGIN RETURN FROM $ALC INI TIALIZATION TMP10 JSB SYSMG OUTPUT "SET TIME" MESSAGE TMP11 JMP RSTRT T* SPC 1 * BEGIN DEF *+1 N10 DEC -10 $PWR5 OCT 6412 DO NOT USE FOR TEMPORARY STORAGE ASC 4,SET TIME * SPC 1 OTA OTA 0 M1100 OCT 1100 * HED ** CENTRAL INTERRUPT CONTROL ** A-92000-60003-2 REV. B * * MODULE OF THE R E A L - T I M E E X E C U T I V E * * * THIS INCLUDES THE FOLLOWING MAJOR SECTIONS: * * 1) CENTRAL INTERRUPT CONTROL * * 2) INPUT / OUTPUT CONTROL * - I/O REQUEST PROCESSING * - I/O COMPLETION PROCESSING * - GENERAL I/O ERROR PROCESSING * * 3) SYSTEM ERROR DIAGNOSTIC PRINT ROUITNE * * 4) PROCESSOR FOR OPERATOR I/O STATEMENTS * HED < CENTRAL INTERRUPT CONTROL > A-92000-60003-2 REV. B * *** C E N T R A L I N T E R R U P T C O N T R O L *** * * THE PROCESSING OF SYSTEM INTERRUPTS IS CONTROLLED * BY DIRECTING ALL SOURCES TO THE ENTRY POINT < CIC >. * < CIC > IS RESPONSIBLE FOR SAVING AND RESTORING * THE CURRENT STATE OF THE MACHINE, ANALYSING THE * SOURCE OF THE INTERRUPT, AND ACTIVATING THE * APPROPRIATE PROCESSOR. THIS ROUTINE IS TABLE-DRIVEN * BY THE *INTERRUPT TABLE*. * * SPECIAL PROCESSING FOR A "PRIVILEGED" CLASS OF * INTERRUPTS IS PROVIDED BY CIC. THIS IS DESCRIBED * FUL LY IN SECTION III BELOW. BRIEFLY, A SPECIAL * I/O CARD CAN BE USED TO SEPARATE SPECIAL INTERRUPTS * FROM NORMAL SYSTEM CONTROLLED INTERRUPTS. THE * PRESENCE AND LOCATION OF THE SPECIAL CARD IS * NOTED AT SYSTEM CONFIGURATION TIME. IF IT IS * P RESENT, THE EXEC OPERATIONS ARE NOT PERFORMED * WITH THE INTERRUPT SYSTEM DISABLED BUT RATHER * WITH THE CONTROL SET ON THE SPECIAL CARD TO * HOLD OFF SYSTEM I/O INTERRUPTS. * * I. INTERRUPT TABLE (INTBL) * * A TABLE, ORDERED BY HARDWARE I NTERRUPT PRIORITY, * DESIGNATES THE ASSOCIATED SOFTWARE PROCESSOR AND * THE PROCEDURE FOR INITIATING THE PROCESSOR. THIS * TABLE IS CONSTRUCTED BY *RTGEN* ON INFORMATION * SUPPLIED BY THE USER IN CONFIGURING THE SYSTEM. * THE TABLE C ONSISTS OF ONE ENTRY PER INTERRUPT * SOURCE: EACH ENTRY CONTAINS ONLY ONE WORD. THE * CONTENTS OF EACH VALID ENTRY IS THE IDENTIFIER * OF THE PROCESSOR. SYSTEM PROCESSORS ARE NOTED * BY POSITIVE VALUES, USER PROCESSORS BY NEGATIVE * V ALUES: * * 1. SYSTEM - THE IDENTIFIER IS THE ADDRESS OF * THE EQT ENTRY IDENTIFYING THE I/O DEVICE. * * 2. USER - THE ADDRESS OF THE PROGRAM * IDENTIFICATION SEGMENT IS IN 2-S COMPLEMENT * FORM IN THE ENTRY. * * 3. ILLEGAL - AN ENTRY CORRESPONDING TO AN * ILLEGAL INTERRUPT SOURCE CONTAINS ZERO. * * A PROCESSOR IS CALLED DIRECTLY IF IT RESPONDS * TO STANDARD SYSTEM INTERRUPT (E.G., CLOCK, * MEMORY PROTECT, I/O DEV ICE CONTROLLED BY A * SYSTEM DRIVER) OR IS SCHEDULED IN THE NORMAL * PRIORITY ORDER IF IT RESPONDS TO A USER * CONTROLLED DEVICE OR INTERRUPT SOURCE. SKP * II. INTERRUPT PROCESSING * * INTERRUPT ACKNOWLEDGEMENT BY THE CPU C AUSES * THE INSTRUCTION IN THE WORD CORRESPONDING * TO THE I/O CHANNEL ADDRESS TO BE EXECUTED. * FOR ALL ACTIVE I/O CHANNELS ( PLUS LOCATIONS * 5-7 ) CONTROLLED BY THE SYSTEM, THE INSTRUCTION * SET IN EACH INTERRUPT LOCATION IS A JUM P * SUBROUTINE INDIRECTLY TO < CIC >. * SKP * PERFORMS THE FOLLOWING: * * 1. DISABLES THE INTERRUPT SYSTEM. * * 2. SAVES ALL REGISTERS PLUS THE INTERRUPT * RETURN POINT IN THE EXECUTING * ID SEGMENT. * * 3. CLEARS THE FLAG OF THE INTERRUPT SOURCE. * * * 6. TRANSFERS DIRECTLY TO THE INTERRUPT * PROCESSOR FOR SOURCES OF: * * (TBG) - TIME BASE GENERATOR * * FOR OTHER SOURCES, THE INTERRUPT SO URCE * CODE IS USED TO INDEX THE INTERRUPT TABLE. * THE CONTENTS OF THE INTBL ENTRY DETERMINES * THE MANNER IN INITIATING THE PROCESSOR: * * A. +, THE CONTENTS OF THE ENTRY IS * ASSUMED TO BE THE FWA O F AN EQT ENTRY. * THE ADDRESSES OF THE 15-WORD ENTRY * ARE SET IN AND CONTROL * TRANSFERRED DIRECTLY TO THE COMPLETION * SECTION ADDRESS (WORD 3 OF EQT ENTRY). * * B. -, THE VAL UE IS SET POSITIVE AND IS * SET IN A CALL TO IN THE * SCHEDULING MODULE- THE CALL IS MADE IF B * THE USER PROGRAM IS DORMANT- CONTROL IS * TRANSFERRED TO $XEQ. IF THE PROGRAM IS * NOT DORMANT, IT IS NOT SCHEDULED AND THE * DIAGNOSTIC "SC03 INT XXXXX" IS OUTPUT * TO THE SYSTEM TTY- XXXXX IS THE PROGRAM * NAME. CONTROL IS RETURNED TO THE INTER- * RUPTED SEQUENCE. * * C. 0, ILLEGAL OR UNDEFINED INTERRUPTS ARE * NOT PROCESSED BUT THE DIAGNOSTIC * "ILL INT XX" IS OUTPUT TO THE SYSTEM * TTY. XX IS THE INTERRUPT CODE. * * 7. I/O DRIVER RETURNS INDICATE CONTINUATION * OR COMPLETION OF THE OPERATION BY THE * DRIVER OR DEVICE: * * A. RETURN AT (P+1): COMPLETION OF THE * OPERATION. CIC TRANS- * FERS DIRECTLY TO THE * IOC COMPLETION SECTION * AT < IOCOM >. CONTROL * IS NOT RETURNED TO * < CIC >. * * B. RETURN AT (P+2): CONTINUATION OF THE * OPERATION. CIC RETURNS * TO THE INTERRUPTED * SEQUENCE AS DESCRIBED * IN STEP 8 FOLLOWING. * SKP CIC NOP * CLF CLF 0 DISABLE INTERRUPT SYSTEM * * PRESERVE CURRENT STATUS OF MACHINE * DST XA,I SAVE REGISTERS ERA,ALS A,B SOC E AND INA OVERFLOW STA XEO,I LIA 4 GET INTERRUPT SOURCE CO DE. IOR CLF CONSTRUCT A CLF XX INSTRUCTION STA *+1 AND CLEAR INTERRUPT FLAG TO * ALLOW SPECIAL USER INTERRUPTS NOP TO BE ACKNOWLEDGED. * $XCIC LIA 4 ### SPECIAL ENT RY TO SKIP CLF ### STA INTCD SAVE INTERRUPT SOURCE CODE. * LDB INTCD LDA CIC SAVE P-REGISTER AS POSSIBLE STA XSUSP,I POINT OF SUSPENSION. * * CHECK FOR TRANSFER TO NON-I/O SYSTEM PROCESSOR * CPB TBG IF TIME BASE GENERATOR, JMP $CLCK PROCESS CLOCK INERRUPT * * CHECK LEGALITY OF INTERRUPT * LDA INTCD INTERRUPT ADA N6 CODE - 6. STA B (SAVE FOR TABLE INDEX) SSA - ERROR IF CODE JMP CIC.4 LT 6, ISSUE DIAGNOSTIC. CMA CHECK FOR BEYOND RANGE ADA INTLG OF INTERRUPT TABLE SSA ERROR IF JMP CIC.4 NEGATIVE, ISSUE DIAG. * * GET PROCESSOR IDENT FROM INTERRUPT TABLE * ADB INTBA INDEX TO PROPER ENTRY BY SOURCE LDA B,I CODE. GET CONTENTS OF ENTRY SZA,RSS UNDEFINED INTERRUPT JMP CIC.4 IF VALUE = 0, ISSUE DIAG. * * LDB INTCD REMOVE CPB .6 BIT 15 OF INTBL WORD RSS IF DMA CPB .7 CHANNEL RAL,CLE,ERA INTERRUPT. * SSA,RSS SYSTEM PROCESSOR IS TO BE CALLED JMP CIC.2 IF VALUE IS POSITIVE. * SPC 1 * * * ASSUME PROCESSOR FOR CODE GT= 6 IS A * SYSTEM I/0 DRIVER. VALUE OF INTERRUPT * TABLE ENTRY IS THE STARTING ADDRESS * OF THE EQUIPMENT TABLE ENTRY CORRESPONDING * TO THE INTERRUPTING DEVICE. * CIC.2 JSB SETEQ SET EQT ENTRY ADDRESSES. * LDA INTCD (A) = INTERRUPT SOURCE CODE * CIC.6 LDB EQT14,I SET DEVICE STB EQT15,I TIME-OUT CLOCK * * CALL I/O PROCESSOR, COMPLETION SECTION * LDB EQT3,I CALL DRIVER JSB B,I *COMPLETION* SECTION. * JMP IOCOM ( P+1): *COMPLETION RETURN* * CLA (P+2): *CONTINUATION RETURN* LDB OPATN CHECK FOR OPERATOR ATTENTION. STA OPATN CLEAR OPERATOR FLAG SZB IF FLAG SET, JMP $TYPE ACKNOWLEDGE. JMP X0020 RETURN TO INTERRUPTED SEQUENCE * * ILLEGAL OR UNDEFINED INTERRUPT * CIC.4 LDA INTCD GET INTERRUPT CODE CLB RRR 3 CONVERT IT TO ASCII ALF,ALS RRL 3 IOR FILL STA CICM1+6 LDA CICM1 PRINT JSB SYSMG "ILL INT XX", JMP X0020 RETURN TO INTERRUPTED SEQUENCE. * INTCD NOP HOLDS INTERRUPT SOURCE CODE SKP * CICM1 DEF *+1 DEC -10 ASC 5,ILL INT XX FILL OCT 30060 ASCII MASK HED < RT EXEC.INPUT/OUTPUT CONTROL > A-92000-60003-2 REV. B *** I N P U T / O U T P U T C O N T R O L *** * * THE I/O SCHEDULING AND CONTROL MODULE < IOC > * IS RESPONSIBLE FOR ALLOCATING THE USE OF ALL * STANDARD I/O DEVICES AND THE TWO D MA CHANNELS. * I/O DRIVERS OPERATE UNDER CONTROL OF AND * FOR INITIATION AND COMPLETION OF SYSTEM * AND USER DIRECTED I/O OPERATIONS. I/O DRIVERS * ARE INDEPENDENT PROGRAMS IDENTIFIED TO * BY THE DEVICE ASSOCIATED EQUIPMENT TABLE . DRIVERS * ARE COMPOSED TO TWO SECTIONS: *INITIATION* AND * *COMPLETION*. THE *INITIATION* SECTION IS * CALLED BY TO EXAMINE AND INITIATE AN I/O * OPERATION. THE *COMPLETION* SECTION IS CALLED * BY TO CONTINUE OR COMPLETE THE OPERATION . * DRIVERS PROVIDE FOR SIMULTANEOUS MULTI-DEVICE * CONTROL BY USING THE DEVICE EQT ENTRY FOR * VARIABLE STORAGE. * * I. * EQUIPMENT TABLE * (EQT) * * EACH I/O DEVICE CONTROLLED BY THE IOC/DRIVER * RELATIONSHIP IS DEFINED BY STATIC AND D YNAMIC * INFORMATION IN THE EQUIPMENT TABLE. THE EQT * IS A SYSTEM RESIDENT TABLE WHICH IS CONSTRUCTED * FROM USER DIRECTIVES BY . EACH EQT * ENTRY IS COMPOSED OF 15-WORDS IN THE FOLLOWING FORMAT: * SKP * * WORD C ONTENTS * ---- ------------------)--------- * 1 * I/O LIST . LINK POINTER * * 2 *DRIVER *INITIATION ADDRESS* * 3 *DRIVER *COMPLETION ADDRESS* * 4 *DB//T/////UNIT#--CHANNEL #* * 5 *AV-TYPE CODE- UNIT STATUS* * 6 *REQUEST CONTROL WORD * * 7 *REQUEST BUFFER ADDRESS * * 8 *REQUEST BUFFER LENGTH * * 9 *TEMPORARY OR DISC TRACK # * * 10 *TEMPORARY OR DISC SECTOR #* * 11 *DRIVER TEMPORARY STORAGE* * 12 * " " " * * 13 * " " " * * 14 * DEVICE CLOCK RESET VALUE * * 15 * " " WORKING " * * * D: =1 IF A DMA CHANNEL REQUIRED FOR TRANSFER * B: =1 IF AUTOMATIC OUPUT BUFFERING DESIRED * T: DEVICE TIM E-OUT BIT - CLEARED BEFORE EACH * IO INITIATION; SET IF DEVICE TIMES-OUT. * UNIT#: OPTIONAL FOR DEVICES REQUIRING * SUB-CHANNEL DESIGNATION * CHANNEL#: I/O SELECT CODE (LOWER # IF * MULTI-BOARD INTERFACE) * AV (A VAILABILITY INDICATOR): * =0, UNIT AVAILABLE FOR OPERATION * =1, UNIT DISABLED * =2, UNIT CURRENTLY IN OPERATION * =3, UNIT WAITING FOR DMA CHANNEL * TYPE CODE: CODE IDENTIFYING TYPE OF I/O DEVICE * UNIT STATUS: ACTUAL OR SIMULA TED UNIT STATUS * AT END OF OPERATION * * II. * DEVICE REFERENCE TABLE * (DRT) * * THE DEVICE REFERENCE TABLE PROVIDES FOR * LOGICAL ADDRESSING OF PHYSICAL UNITS DEFINED * IN THE EQUIPMENT TABLE. THE *DRT* CONSISTS * OF 1-WORD ENTR IES CORRESPONDING TO THE RANGE * OF USER-SPECIFIED "LOGICAL" UNITS, 1 TO N * WHERE N IS LT OR = TO 63(10). THE CONTENTS OF * THE WORD CORRESPONDING TO A LOGICAL UNIT IS * THE RELATIVE POSITION OF THE EQT ENTRY * DEFINING THE ASSIGNED PHYSICAL UNI T,IN * BITS 5 - 0, AND THE SUBCHANNEL OF THE * EQT ENTRY TO BE REFERENCED BY THIS * LOGICAL UNIT NUMBER, IN BITS 13 - 11.  * * CERTAIN LOGICAL UNIT #S ARE PERMANENTLY * ASSIGNED TO FACILITATE SYSTEM, USER AND * SYSTEM SUPPORT I/O OPERATIONS. THE SE ARE: SKP * 1 - SYSTEM TELETYPEWRITER * 2 - SYSTEM DISC * 3 - AUXILIARY DISC * 4 - 'STANDARD' PUNCH UNIT * 5 - 'STANDARD' INPUT UNIT * 6 - 'STANDARD' LIST UNIT * 7 - ASSIGNED * . BY * . USER * 63 - * * III. INPUT/OUTPUT REQUESTS * * I/O REQUESTS INCLUDE COMMANDS FOR * READ, WRITE, CONTROL(FUNCTIONS) AND STATUS. * THE FORMAT OF THESE REQUESTS CONFORM TO * THE GENERAL SYSTEM REQUEST FORMAT. T HE * NUMBER OF PARAMETERS VARIES DEPENDING * ON THE TYPE OF REQUEST AND THE CHARAC- * TERISTICS OF THE REFERENCED DEVICE. * * A USER I/O REQUEST IS DIRECTED TO * AT -IOREQ- BY THE EXECUTIVE REQUEST * PROCESSOR . SYSTEM I/O REQUESTS * ARE IN A DIFFERENT FORMAT AND ARE PROCESSED * AT THE SECTION -XSIO- IN . REFER TO * THAT SECTION FOR DETAILED DESCRIPTION. * * A *STATUS* REQUEST IS PROVIDED * FOR USER AND SYSTEM SUPPORT PROGRAMS * WHICH REQUIRE KNOWLEDGE OF DEVICE * CONDITIONS OR TYPE BEFORE A READ/WRITE/ * CONTROL REQUEST IS MADE. THE PROGRAM * IS NOT SUSPENDED ON THIS CALL. * A PARAMETER WORD IS INCLUDED IN THE * REQUEST TO CONTAIN THE DEVICE STATUS ON * RETURN TO THE USER . THIS STATUS IS FROM WORD * 5 OF THE EQT ENTRY FOR THE DEVICE. * ALSO, AN ADDITIONAL PARAMETER WORD CAN BE * INCLUDED IN THE REQUEST- WORD 4 OF THE * EQT ENTRY IS RETURNED IF THE ADDITIONAL * PARAMETER WORD IS INCLUDED. * * A DYNAM IC STATUS REQUEST CAN BE MADE BY * MEANS OF A CONTROL REQUEST, THE FORMAT * OF WHICH IS DEFINED BELOW. IN THIS CASE, * THE REQUEST IS QUEUED, THE DRIVER IS ENTERED, * AND THE STATUS IS RETURNED TO THE CALLING * PROGRAM IN THE A REGISTER. * SKP * * A. READ/WRITE REQUEST FORMAT * * EXT EXEC * JSB EXEC h * DEF EXIT (DEFINE EXIT POINT) * DEF RCODE (DEFINE READ (1) OR WRITE(2)) * DEF CONWD (DEFINE CONTROL WORD) * DEF BUFFR (DEFINE BUFFER LOCATION) * DEF BUFFL (DEFINE BUFFER LENGTH) * DEF DTRAK (OPTIONAL - DISC TRACK #) * DEF DSECT (OPTIONAL - DISC SECTOR #) * EXIT --- * . * . * RCODE DE C 1 OR 2 * CONWD OCT NNNNN CONTROL INFO/LOGICAL UNIT # * BUFFL DEC N OR -N WORD OR CHARACTER LENGTH * DTRAK DEC N DISC TRACK # * DSECT DEC N STARTING SECTOR # * * * B. CONTROL REQUEST FORMAT * * EXT E XEC * JSB EXEC * DEF EXIT (DEFINE EXIT POINT) * DEF RCODE (DEFINE REQUEST CODE) * DEF CONWD (DEFINE CONTROL WORD) * DEF PARAM (DEFINE OPTIONAL PARAMETER) * EXIT --- * . * . * RCODE DEC 3 * CONWD OCT NNNNN CONTROL CODE/LOGICAL UNIT # * PARAM DEC N PARAMETER REQUIRED BY TYPE OF CODE * * CONTROL CODES (FIELD 10-06 OF CONTROL WORD): * * 01 - WRITE END-OF-FILE --/ PRIMARILY * 02 - BACKSPACE 1 RECORD / FOR * 03 - FORWARD SPACE 1 RECORD / MAGNETIC * 04 - REWIND / TAPE * 05 - REWIND STANDBY / UNITS * 06 - DYNAMIC STATUS --/ * 07 - SET EOT ST ATUS (FOR PAPER TAPE INPUT) * 10 - GENERATE LEADER FOR PAPER TAPE * 11 - LIST OUTPUT LINE SPACING SKP * * C. DEVICE STATUS REQUEST FORMAT * * EXT EXEC * JSB EXEC * DEF EXIT (DEFINE EXIT POINT) * DEF RCODE (DEFINE REQUEST CODE) * DEF CONWD (DEFINE CONTROL WORD) * DEF STAT1 (DEFINE STATUS WORD 1) * DEF STAT2 (DEFINE STATUS WORD 2 -- OPTIONAL) * EXIT --- * . * . * RCODE DEC 13 STATUS REQUEST CODE = 13 * CONWD OCT NN LOGICjAL UNIT # * STAT1 NOP WORD 5 OF EQT ENTRY FOR * DEVICE STORED IN THIS WORD. * STAT2 NOP WORD 4 OF EQT ENTRY FOR * DEVICE STORED IN THIS WORD * IF PRESENT IN REQUEST. * * * IV. GENERAL OPERATION * * ALL INPUT/OUTPUT OPERATIONS ARE PERFORMED * CONCURRENTLY WITH PROGRAM COMPUTATION IN THE * OVERALL SYSTEM. AN I/O OPERATION IS CONSIDERED * TO BE NON-BUFFERED TO THE REQUESTING USER * PROGRAM AS THE PROGRAM IS SUSPENDED UNTIL * THE TRANSMISSION OR OPERATION IS COMPLETED. * THE EXCEPTION TO THIS IS IN PROVIDING FOR * AUTOMATIC BUFFERING OF OUTPUT TO USER- * DESIGNATED DEVICES. IN THIS CASE, THE USER * BUFFER IS MOVED TO SYSTEM AVAILABLE MEMORY * AND THE USER PROGRAM IS NOT SUSPENDED. SKP IOREQ CLA SET CONTROL FLAG = 0 TO MEAN STA CONFL *REQUEST* SECTION ENTERED * LDA RQCNT INSURE ADA N1 THAT AT LEAST 1 SSA PARAMETER WAS SUPPLIED. JMP ERR01 - NO, ISSUE DIAGNOSTIC. * * LOGICAL UNIT REFERENCE VALIDITY CHECK * LDA RQP2,I EXTRACT LOGICAL UNIT # FROM AND MASK1 PARAMETER 1 STA B (SAVE #) CMA,INA,SZA,RSS CHECK FOR ZERO AND JMP ERR02 FOR A ADA LUMAX VALUE GT THE LARGEST SSA DEFINED #. JMP ERR02 - ERROR, EXCEEDS RANGE. * ADB N1 INDEX TO ADB DRT DEVICE-REFERENCE-TABLE LDA B,I GET EQT ASSIGNMENT. AND MASK2 MASK OUT SUBCHANNEL SZA,RSS -ERROR JMP ERR03 IF NOT ASSIGNED. JSB CVEQT CONVERT TO ABSOLUTE EQT ADDRESSES * * REQUEST CODE ANALYSIS * LDB RQP1 GET REQUEST CODE (PARAMETER 1). CPB .3 IF REQUEST IS , JMP L.02 SKIP FURTHER ANALYSIS. * CPB .13 TRANSFER IF JMP L.15 * STATUS * REQUEST. * LDA RQCNT CHECK # OF O ADA N3 PARAMETERS SUPPLIED SSA FOR READ OR WRITE. JMP ERR01 -ERROR, LT 3. * * BUFFER LEGALITY CHECK FOR INPUT. * LDA RQP4,I GET THE LENGTH CLE,SSA,RSS CONVERT TO JMP *+3 WORDS IF ARS CHARACTERS CMA,INA SET POSITIVE AND STA TEMP2 SAVE. SPC 1 CPB .2 IF WRITE REQUEST, JMP L.02 SKIP B UFFER CHECK. SPC 1 LDA RQP3 GET THE BUFFER ADDRESS CMA AND CHECK TO SEE IF ADA RTORG BELOW THE PROGRAMS CLE,SSA,RSS AREA. ERROR IF ATTEMPT TO READ JMP ERR04 INTO SYSTEM AREA. * LDB TEMP2 CHECK TO SEE IF EXCEEDING ADB RQP3 LWA MEMORY. SEZ ERROR IF NEGATIVE WRAP-AROUND JMP ERR04 WITH OVERFLOW. CMB,INB -IF WRAP-AROUND ADB BKLWA ERROR, SSB,INB,SZB I SSUE JMP ERR04 ERROR 4 DIAGNOSTIC * SPC 1 * * * CHECK FOR AUTOMATIC BUFFERING REQUIREMENT * L.02 LDB RQP1 SKIP CHECK CPB .1 IF REQUEST JMP L.10 IS INPUT. LDA EQT4,I CHECK THE UNIT DE SCRIPTOR RAL WORD IN ITS EQT ENTRY,BIT 14, SSA FOR BUFFERING JMP $L.16 YES,AUTOMATIC BUFFERING SKP * * REQUEST IS A NORMAL WRITE, CONTROL OR READ. * THE PARAMETERS OF THE REQUEST ARE MOVED * I NTO THE ID SEGMENT OF THE REQUESTING * PROGRAM. THE ID SEGMENT IS THEN LINKED * INTO THE I/O LIST FOR THE REFERENCED DEVICE. * THE -SCHEDULER- IS THEN CALLED TO REMOVE * THE PROGRAM FROM THE SCHEDULED LIST AND TO * CHANGE THE PROGRAM STATUS T O I/O SUSPENSION. * L.10 JSB WORD2 ASSEMBLE CONTROL WORD STA XTEMP,I SAVE IN TEMPORARY #1. LDB RQP1 (B) = REQUEST CODE. LDA RQP3 SET BUFFER ADDRESS CPB .3 OR CONTROL LDA RQP3,I PARAMETER STA XTEMP+1,I WORD, LDA u RQP4,I BUFFER STA XTEMP+2,I LENGTH AND LDA RQP5,I ADDITIONAL PARAMETERS IF STA XTEMP+3,I PROVIDED, LDA RQP6,I E.G., DISC STA XTEMP+4,I TRACK/SECTOR ADDRESSES . * LDA XPRIO,I SET PRIORITY OF REQUESTING STA TEMP2 PROGRAM IN TEMP2. LDA XLINK SET ADDRESS OF LINK WORD STA TEMP1 IN TEMP1. STA L.11 * JSB $LIST CALL SCHEDULER TO SUSPEND OCT 102 L.11 NOP - ADDRESS OF ID SEGMENT. * * CALL -LINK- TO PERFORM THE LINKING OF THE NEW * BLOCK INTO THE DEVICE QUEUE OF * WAITING OPERATIONS. * L.13 JSB LINK. * SZA,RSS IF QUE WAS EMPTY CALL DRIVR. * * EMPTY LIST, CALL TO INITIATE CURRENT REQUEST. * JSB DRIVR JMP L.14 - OPERATION INITIATED - LDA RQRTN STA XSUSP,I JMP NOTRD * L.14 LDA RQRTN SET REQUEST -EXIT- ADDRESS STA XSUSP,I AS P OINT OF SUSPENSION. JMP $XEQ TRANSFER TO EXECUTE SECTION * * STATUS REQUEST SECTION * L.15 LDA RQCNT INSURE THAT AT LEAST 2 ADA N2 PARAMETERS PROVIDED - ONE SSA TO STORE STATUS WORD. JMP ERR01 -NO, ERROR '01'. * LDB EQT5,I STORE WORD 5 OF EQT ENTRY IN STB RQP3,I 'STAT1' LDB EQT4,I STORE WORD 4 OF EQT ENTRY IN CPA .1 'STAT2' IF PARAMETER 3 IS STB RQP4,I PRESENT. * * JMP L. 14 GO TO RETURN TO XEQ. * * .1 OCT 1 SKP * * AUTOMATIC BUFFERING SECTION * * $L.16 CLA CPB .3 IF REQUEST IS FOR -CONTROL-, JMP L.03 SKIP BUFFER SIZE CHECK. LDA $TMP2 GET THE XFER LENGTH CMA,INA SET NEG AND STA $TMP3 -SET AS MOVE INDEX CMA,INA (SET POSITIVE) L.03 ADA .5 ADD 5 FOR BLOCK CONTROL WORDS. STA L.04 SET TOTAL LENGTH FOR ALLOCATION. ADA .2 CHECK FOR BUFFER CMA,INA $O SIZE TO BE GREATER LDB AVMEM THAN MAXIMUM CMB,INB AMOUNT ADB BKORG OF SYSTEM ADA B AVAILABLE MEMORY. SSA IF YES, THEN ABORT JMP $ER04 PROGRAM * * ALLOCA TE BLOCK IN TEMPORARY STORAGE * JSB $ALC CALL AT SYSTEM ENTRY POINT L.04 NOP - REQUESTED LENGTH OF BLOCK - * JMP L.10 NO MEMORY EVER, GO TRY NON-BUFFEREDFERED RSS NO MEMORY NOW-GO SUSPEND JM P L.06 BLOCK AVAILABLE, (A) CONTAINS STARTING ADDR. * * NO MEMORY AVAILABLE FOR BLOCK - CALLING USER * PROGRAM IS TO BE LINKED INTO MEMORY SUSPENSION * LIST AND RE-SCHEDULED AT POINT OF REQUEST * WHEN A PREVIOUSLY ALLOCATED BLOCK IS RELEASED . * LDA XEQT SET PROGRAM ID SEGMENT ADDRESS STA L.05 IN CALL TO LINK JSB $LIST CALL TO LINK PROGRAM INTO OCT 104 MEMORY SUSPEND L.05 NOP JMP $XEQ SKP * SET REQUEST PARAMETERS, PROGRAM PRI ORITY AND * USER BUFFER INTO TEMPORARY BLOCK. * L.06 STB L.05 SET ACTUAL BLOCK LENGTH. STA $TMP1 SAVE STA B LOCATION INB STB $TMPW SAVE ADDRESS JSB $WRD2 ASSEMBLE CONTROL WORD IOR MASK5 SET = 1 FOR BUFFERING. LDB $TMPW STA B,I AND SET IN WORD 2 OF BLOCK. INB LDA XPRIO,I SET REQUESTING PROGRAM PRIORITY STA B,I IN WORD 3. STA $TMP2 SAVE PRIORITY FOR LINKING INB LDA L.05 SET BLOCK LENGTH IN STA B,I WORD 4. INB LDA .3 IF REQUEST CPA RQP1 IS -CONTROL-, SKIP JMP L.08 BUFFER MOVE LDA RQP4,I SET USER BUFFER LENGTH STA B,I IN WORD 5. SZA,RSS IF LENGTH = 0, JMP $L.13 SKIP BUFFER MOVE * * MOVE USER BUFFER TO TEMPORARY BLOCK. * INB LDA RQP3 SET USER BUFFER STA $TMP4 ADDRESS FOR MOVE L.07 LDA $TMP4 PERFORM n LDA A,I STA B,I BUFFER MOVE ISZ $TMP4 ((B) = BLOCK ADDRESS INB (TEMP4) = BUFFER ADDRESS, ISZ $TMP3 (TEMP3) = BUFFER LENGTH INDEX) JMP L.07 JMP $L.13 GOTO EXIT SECjION * L.08 LDA RQP3,I FOR CONTROL REQUEST, SET WORD 3 STA B,I (PARAM) IN PLACE OF RECORD JMP $L.13 LENGTH SKP * * * RELEASE AUTOMATIC BUFFERING BLOCK * $L.56 LDA $TMP3 BY PASS RELEASE OF SZA BUFFER IF MALFUNCTION JMP $IOER OCCURED ADB .2 GET TOTAL LDB B,I BLOCK LENGTH AND STB L.50+1 SET IN RELEASE CALL. LDB EQT1,I SET ADDRESS OF BLOCK STB L.50 IN CALL. LDA B,I SE T LINK TO NEXT STACKED STA EQT1,I REQUEST IN EQT ENTRY - WORD 1. * JSB $RTN RELEASE BLOCK TO AVAILABLE MEM. L.50 NOP - BLOCK ADDRESS - NOP - BLOCK LENGTH - JMP $L.55 * RELEASE BUFFER BLOCK D UE TO ILLEGAL REQUEST ERROR * $R06 ADB .2 BUFFERED BLOCK LDB B,I GET TOTAL BLOCK LENGTH. STB R01+1 SET IN RELEASE CALL. LDA EQT1,I SET FWA OF BLOCK STA R01 IN RELEASE CALL. JSB $RTN RELEA SE BLOCK. R01 NOP - FWA - NOP - # WORDS - JMP $RXIT * MASK5 OCT 40000 SKP * * ASSEMBLE CONTROL WORD * WORD2 NOP LDA RQP2,I COMBINE REQUEST CODE WITH AND MASK3 CONTROL INFOR MATION IOR RQP1 IN PARAMETER TWO AND STA B TEMPORARILY STORE IT- LDA RQP2,I EXTRACT LOGICAL UNIT # AND MASK1 FROM PARAMETER TWO ADA N1 INDEX TO ENTRY IN ADA DRT DEVICE REFERE NCE TABLE LDA A,I GET SUBCHANNEL AND MASK9 ASSIGNMENT AND COMBINE IOR B IT WITH CONTROL WORD JMP WORD2,I EXIT - SPC 1 SPC 1 MASK3 OCT 3700 .13 DEC 13 N3 D TRN DEC -3 T SKP * SUBROUTINE: -LINK- * * PURPOSE: THIS ROUTINE PROVIDES FOR ADDING * AN I/O REQUEST INTO THE SUSPENDED * LIST (QUEUE) CORRESPONDING TO THE * REFERENCED DEVICE. THE PROCEDURE * OF ADDING AN ENTRY INTO THE LIST * INVOLVES ONLY THE ALTERATION OF * THE LINKAGE VALUE IN THE NEW ENTRY * AND IN THE ENTRY PRECEDING THE * NEW ONE IN THE PRIORITY CHAIN. * THE NEW ENTRY IS LINKED ACCORDING * TO ITS PRIORITY AND ON A FIFO * BASIS WITHIN THE SAME PRIORITY * LEVEL. THE END OF A LIST IS MARKED * BY A LINKAGE VALUE OF ZERO. THE * FIRST ENTRY IN A LIST IS SKIPPED * BECAUSE IT IS ASSUMED TO BE THE * REQUESTOR FOR THE CURRENT I/O * OPERATION. IF THE LIST IS EMPTY, * THE LINK WORD IN THE EQT ENTRY * IS SET TO POINT TO THE NEW ENTRY * AND AN INDICATION IS GIVEN TO * THE CALLER OF -LINK- THAT THE * NEW REQUES T MAY BE INITIATED. * * CALL: THE FOLLOWING LOCATIONS MUST BE * SET TO THE INDICATED VALUES * BEFORE THE CALL IS MADE: * * TEMP1 = LOCATION OF NEW REQUEST * TO BE LINKED INTO THE * I/O LIST DEFINED BY THE * CURRENT EQT ENTRY. THE * ADDRESS OF THE LINKAGE * WORD IN THE EQT ENTRY * IS IN -EQT1-. * * TEMP2 = PRIORITY OF THE NEW * REQ UEST. * * * - JSB LINK * - (RETURN) (A) = 0 IF THE NEW * REQUEST IS THE ONLY ENTRY * IN THE I/O LIST, I.E. THE * DRIVER MAY BE CALLED TO * INITIATE THE NEW O PERATION. * * THERE ARE NO ERROR CONDITIONS * DETECTED OR DIAGNOSED BY THIS * ROUTINE. * * SKP LINK. NOP LDB EQT1,I IF THE I/O LIST IS NULL, SZB,RSS EQT LIST POINTER = 0, JMP LINK4 SKIP TO ADD NEW REQUEST. * * FIRST ENTRY IN LIST IS SKIPPED BECAUSE IT * IS THE CALLER FOR THE CURRENT OPERATION * ACTIVE ON THE I/O DEVICE. * JMP LINK7 GO START THE SCAN * LINK1 STB TEMP3 TEMP3 = ADDRESS OF CU RRENT ENTRY. INB EXAMINE THE LDA B,I TYPE FIELD IN WORD 2 OF BLOCK INB TO DETERMINE LOCATION RAL,SLA OF PRIORITY. JMP LINK5 IF SYS REQ, SET PR=0 SSA,RSS IF NORMAL USER RE QUEST, PRIORITY ADB .4 IS IN WORD 7 OF ID SEGMENT. LDA B,I GET PRIORITY OF CURRENT ENTRY. LINK2 LDB TEMP3 CMA,INA SUBTRACT CURRENT PRIORITY FROM ADA TEMP2 PRIORITY OF NEW REQUEST. SSA I F CURRENT IS LOWER PRIORITY JMP LINK3 (HIGHER #), GO TO LINK NEW. LINK7 STB TEMP5 SAVE PREVIOUS ENTRY POINTER LDB B,I GET NEXT ENTRY SZB IF END-OF-LIST, SKIP. JMP LINK1 -CONTINUE SCAN. * * PROP ER POSITION (BY PRIORITY) IS FOUND IN LIST, * OR ELSE THE SCAN OF THE LIST IS FINISHED AND * THE NEW REQUEST IS ADDED AS THE LAST ENTRY. * LINK3 LDA TEMP1 SET ADDRESS OF NEW ENTRY IN STA TEMP5,I LINKAGE VALUE OF PREVIOUS ENTRY. LINK6 STB TEMP1,I SET ADDRESS OF NEXT OR 0 IF LAST JMP LINK.,I IN NEW - EXIT TO CALLER * * NULL LIST- REQUEST IS MADE FIRST IN LIST AND FLAG FOR SET FOR CALLER. * LINK4 LDA TEMP1 SET ADDRESS OF NEW IN LIST POINT- STA EQT1,I ER IN EQT ENTRY. CLA SET NEXT LINK ADDR. IN NEW = 0. JMP LINK6 GO FINISH LINK AND EXIT SPC 1 * A SYSTEM REQUEST HAS BEEN FOUND IN THE QUE * LINK5 CLA SYSTEM REQUEST, SET JMP LINK2 PRIORITY=0, LINK OLD R EQUEST SKP SKP * SUBROUTINE: -DRIVR- * * PURPOSE: THIS ROUTINE PROVIDES A CENTRAL POINT * FOR CALLING AN I/O DRIVER TO INITIATE * A NEW OPERATION. THIS ROUTINE, BEFOREJz * CALLING A DRIVER, SETS THE REQUEST * PARAMETERS INTO THE APPROPRIATE WORDS * IN THE EQT ENTRY CORRESPONDING TO THE * REFERENCED DEVICE AND ASSIGNS A DMA * CHANNEL IF REQUIRED. * IT ALSO SETS THE DEVICE TIME-OUT CLOCK. * * REQUIREMENTS: THE ADDRESSES OF THE EQUIPMENT * TABLE ENTRY (15 WORDS) MUST BE SET * IN EQT1 TO EQT15 BEFORE THE ROUTINE * IS CALLED. * * CALLING SEQUENCE: - PARAMETER SET UP AS ABOVE- * - (REGISTERS MEANINGLESS) - * * (R) JSB DRIVR * (P+1) -OPERATION INITIATED OR STACKED * (P+2) -OPERATION REJECTED OR COMPLETED- * * ERRORS/DIAGNOSTICS: A DRIVER IS CALLED ONLY * IF THE UNIT IS AVAILABLE * AND NOT BUSY; OTHERWISE, * RETURN IS MADE TO THE * CALLER. IF THE DRIVER * FINDS THE UNIT UNAVAILABLE * OR THE REQUEST ILLEGAL FOR * THE UNIT, THE INDICATION IS * RETURNED TO THE CALLER FOR * FURTHER ACTION. * DRIVR NOP LDA EQT5,I CHECK AVAILABILITY RAL,RAL OF AND .3 DEVICE. STA TEMP6 SAVE AVAILABILITY STATUS. CPA .1 IF DOWN OR NOT READY JMP DRIVR,I EXIT IMMEDIATELY. CPA .2 IF CURRENTLY BUSY, JMP DRIVR,I ALSO EXIT. * * DEVICE IS AVAILA BLE - CHECK FOR DMA REQUIREMENT * CPA .3 IF IN DMA QUE JMP DVR00 GO ATTEMPT ASSIGNMENT LDA EQT4,I SKIP DMA CHANNEL ASSIGNMENT IF SSA,RSS NOT REQUIRED ( D FIELD = 0 ) JMP DRV02 IN WORD 4 OF E QT ENTRY. SPC 1 * LDB EQT1,I SKIP DMA CHANNEL ASSIGNMENT IF * INB CONTROL REQUEST (CODE = 3) * LDA B,I * R AND .3 * CPA .3 * JMP DRV02+2 * * DMA CHANNEL REQUIRED - ATTEMPT TO ASSIGN CHANNEL * DVR0 LDA DMACF IF DMA QUE IS NOT EMPTY SZA JMP DVR1 THEN JUST ADD THIS EQT TO QUE. * DVR00 LDA .6 INITIALIZE FOR STA CHA N CHANNEL 6 (DMA # 1 ) LDB INTBA ADDR. OF DMA 1 IN INTERRUPT TABLE CLA IF DMA CHANNEL # 1 CPA B,I AVAILABLE (INTBL ENTRY = 0), JMP DRV01 GO TO ASSIGN IT TO THIS UNIT. INB SET FOR CHANN EL 7, ISZ CHAN DMA CHANNEL # 2. CPA B,I IF THIS CHANNEL AVAILABLE, JMP DRV01 GO TO ASSIGN IT. * * NO CHANNEL AVAILABLE - SET FLAGS AND RETURN * DVR1 LDA EQT5,I IF DEVICE SSA IS ALREADY WAITING FOR DMA, JMP DRIVR,I EXIT. IOR MASK4 SET AVAIL TO SAY WAITING FOR STA EQT5,I DMA, ADD 1 TO ISZ DMACF # DEVICES WAITING. JMP DRIVR,I - EXIT TO CALLER - * * ASSIGN AVAILABLE CHANNEL * DRV01 LDA EQT1 SET EQT ENTRY ADDRESS IN INTER- STA B,I RUPT TABLE ENTRY FOR CHANNEL. LDB DMACF IF UNIT WAS LDA TEMP6 PREVIOUS WAITING CPA .3 FOR A DMA ADB N1 CHANNEL, SUBTRACT 1 FROM # OF STB DM ACF UNITS WAITING. LDA EQT5,I CLEAR AND MASK6 STA EQT5,I FIELD. * * TRANSFER REQUEST PARAMETERS TO EQT ENTRY * DRV02 LDB EQT1,I GET CURRENT REQUEST ADDRESS INB FROM LINK WORD OF EQT ENTR Y. LDA B,I GET REQUEST CONTROL WORD, AND MASKS SET SUBCHANNEL BITS TO ZERO STA EQT6,I SET IN EQT 6. XOR B,I SET SUBCHANNEL ALF,ALF NUMBER INTO ALF,RAR BITS 8-6 STA TEMPL OF EQT4 LDA B,I RAL IF REQUEST IS SSA HELD AS A TEMPORARY BLOCK FOR JMP DRV03 BUFFERING, JUMP. INB s LDA B,I SET BUFFER STA EQT7,I ADDRESS. INB LDA B,I SET BUFFER STA EQT8,I LENGTH. INB DLD B,I SET ADDITIONAL 2 DST EQT9,I PARAMETERS IF SUPPLIED. JMP DRV05 * DRV03 ADB .3 * TEMPORARY BLOCK * RAR,SLA CHECK REQUEST CODE. RSS - CONTROL REQUEST - JMP DRV04 - WRITE REQUEST - LDB B,I SET CONTROL PARAMETER JMP DVR4 IN THE EQT DRV04 LDA B,I GET BUFFER LENGTH STA EQT8,I OF THE BLOCK. INB ADDRESS OF WORD 6 IS DVR4 STB EQT7,I THE BUFFER ADDRESS. CLA CLEAR STA EQT9,I WORDS 9 AND 10 OF STA EQT10,I EQT ENTRY. * * CALL DRIVER -INITIATION- SECTION * DRV05 LDA EQT14,I SET DEVICE STA EQT15,I T IME-OUT CLOCK LDA EQT4,I ZERO TIME-OUT AND MASK7 BIT AND SET IOR TEMPL IN SUBCHANNEL STA EQT4,I SET (A) = CHANNEL AND MASK1 # OF I/O DEVICE. LDB EQT2,I CALL DRIVER *INITIATION* JSB B,I SECTION. SKP * DRIVER RETURNS AN INDICATION OF THE ACCEPTANCE * OR REJECTION OF THE REQUESTED OPERATION: * (A) = 0, OPERATION SUCCESSFULLY INITIATED * (A) NOT = 0, OPERATION REJECTED AND (A) * CONTAINS A NUME RIC CODE * IDENTIFYING THE CAUSE OF * THE REJECT. * * = 1 READ OR WRITE REQUEST ILLEGAL FOR DEVICE * = 2 CONTROL REQUEST ILLEGAL OR NOT DEFINED * = 3 EQUIPMENT MALFUNCTION OR NOT READY * = 4 IMMEDIATE COMPLETION OF OPERATION * = 5 DRIVER REQUIRES DMA BUT FLAG IS NOT SET IN EQT * STA TEMP6 SAVE DRIVER CODE. SZA IF REJECTED, JMP DRV06 EXAMINE REASON * * OPERATION INITIATED * LDA EQT5,I SET IOR MSIGN = 2 TO SAY DEVICE STA EQT5,I IN OPERATION. JMP DRIVR,I EXIT. * * OPEtRATION REJECTED * DRV06 STB TEMPW SAVE (B) CLA CLEAR DEVICE STA EQT15,I T IME-OUT CLOCK JSB CLDMA CLEAR DMA IF ALLOCATED LDA TEMP6 (A) = REJECT CODE. CPA .5 IF DMA REQUIRED JMP DVR0 GO ATTEMPT ASSIGNMENT ISZ DRIVR SET RETURN TO (P+2). CPA .3 IF NOT READY THEN JMP DRIVR,I -EXIT. JMP ILLCD ELSE GO TO SEND THE MESSAGE SPC 1 MASK7 OCT 173077 MASK9 OCT 34000 MASKS OCT 143777 HED < I/O SUBSECT- SYS RQST PROC > A-92000-60003-2 REV. B * SYSTEM I/O REQUEST PROCESSOR - XSIO - * * A PRIVATE ENTRY IS PROVIDED AT ENTRY POINT * < XSIO > TO ALLOW MODULES OF THE REAL TIME * EXECUTIVE TO CALL FOR I/O OPERATIONS WITHOUT * INCURRING THE OVERHEAD AND PROCEDURES * INVOLVED WITH USER I/O REQUESTS. NO ERROR * CHECKING IS PERFORMED, THE REQUEST IS LINKED * INTO THE APPROPRIATE I/O LIST AT A PRIORITY * LEVEL OF ZERO (HIGHEST PRIORITY), AND CONTROL * IS RETURNED TO THE FIRST WORD FOLLOWING THE * REQUEST CALL. * REQUEST FORMAT: A SYSTEM I/O REQUEST DIFFERS * FROM THE USER I/O REQUEST IN * FORMAT AND POWER. SPECIFICALLY, * A COMPLETION ADDRESS CAN BE * SPECIFIED FOR OPERATION OF * AN OPEN SUBROUTINE AT THE * END OF T HE OPERATION. THIS * FACILITY IS ONLY AVAILABLE * TO SYSTEM ROUTINES AND IS * USED TO RESET FLAGS, ETC. * BECAUSE AN OPERATION IS * ALWAYS BUFFERED TO THE * SYSTEM. A ZERO COMPLETION * ADDRESS INDICATES ABSENCE * OF A COMPLETION ROUTINE. * WORD * ---- EXT XSIO * 1 JSB XSIO * 2 OCT * 3 DEF * 4 NOP * 5 OCT bN * 6 DEF * 7 DEC * SKP * XSIO NOP LDB XSIO,I G ET LOGICAL UNIT #. ADB N1 SUBTRACT 1 AND INDEX TO ADB DRT DEVICE REFERENCE TABLE. LDA B,I GET ASSIGNED EQT ENTRY #. AND MASK9 MASK OUT SUBCHANNEL STA TEMPL AND SAVE IT XOR B,I EQT # INTO A JSB CVEQT CONVERT TO ABSOLUTE EQT ADDRESSES * LDB XSIO SET ADDRESS ADB .2 OF LIST POINTER WORD IN STB TEMP1 REQUEST FOR . * CCE,INB SET LDA B,I FIELD (B ITS 15-14) OF AND MASKS IOR TEMPL WORD 5 = 2 FOR SYSTEM REQUEST ELA,RAR AND SET IN SUBCHANNEL NUMBER STA B,I IDENTIFICATION. CLA SET PRIORITY OF REQUEST = 0 STA TEMP2 FOR
  • , STA CONFL SET CONTROL FLAG = 0 (REQUEST). ADB .3 SET B TO RETURN ADDR STB XSIO AND SAVE IT. JSB LINK. CALL TO LINK REQUEST IN I/O LIST * SZA,RSS IF DEVICE NOT BUSY * JSB DRIV R CALL DRIVER TO INITIATE OPERATION JMP XSIO,I -GOOD REQUEST,EXIT * LDB XSIO BAD NEWS SO TRANSFER THE STB XSIOE RETURN ADDRESS FOR NR ROUTINE * JMP NOTRD PRINT DIAGNOSTIC. SPC 1 XSIOE NOP HED A-92000-60003-2 REV. B * * I/O COMPLETION SUBSECTION * * THIS SECTION IS RESPONSIBLE FOR THE INITIATION * OF STACKED I/O OPERATIONS, PLACING A USER * PROGRAM BACK IN A SCHEDULED STATE WHEN ITS * I/O OPERATION IS COMPLETED, DYNAMIC ALLOCATION * OF THE TWO DMA CHANNELS AMONG SYNCHRONOUS * DEVICES, AND CALLING FOR OPERATOR NOTIFICATION * OF EQUIPMENT MALFUNCTION. * * IS ENTERED DIRECTLY FROM INTERRUPT CONTROL * WHEN AN I/O OPERATION IS TERMINATED AND ALL * ERROR RECOVERY PROCEDURES HAVE BEEN ATTEMPTED. * ON ENTRY TO THIS SECTION, (B) CONTAINS THE * NUMBER OF WORDS TRANSFERRED. THE ADDRESSES OF * THE EQUIPMENT TABLE ENTRY ARE SET IN -EQT1- TO * - EQT 15-. * * REQUESTS ARE STACKED IN LISTS FOR EACH DEVICE * ACCORDING TO PRIORITY. THE REQUESTS ARE EITHER * USER (NORMAL), USER (AUTOMATIC OUTPUT BUFFERING) * OR SYSTEM - IDENTIFICATION OF REQUEST TYPE * THE CODE IN BITS 15-14 OF THE * IN EACH REQUEST CALL. THE FORMATS OF THE THREE * TYPES OF REQUESTS AS THEY APPEAR IN THE I/O * LISTS ARE: * * 1) USER (NORMAL OPERATION) * * THE PARAMETERS FROM THE REQUEST ARE STORED * IN THE TEMPORARY AREA OF THE PRO GRAM ID * SEGMENT. THE LINK WORD OF THE SEGMENT IS * USED TO LINK INTO THE I/O LIST. * * WORD CONTENTS * ---- -------- * 1 < LINKAGE WORD > * 2 * 3 * 4 * 5 * 6 * 7 * . -REMAINDER OF ID SEGMENT . * * SKP * 2) USER (AUTOMATIC OUTPUT BUFFERING) * * REQUESTS OF THIS TYPE ARE CONSTRUCTED * IN THE SECTION OF SYSTEM AVAILABLE MEMORY. * * WORD CONTENTS * ---- -------- * 1 < LINKAGE WORD > * 2 * 3 * 4 * 5 * 6 * . . . . * . . . . * N+5 * * * 3) SYSTEM REQUEST * * THE SYSTEM REQUEST IS LINKED INTO * THE I/O LIST BY USING WORD 4 OF THE * CALL AS A LINK WORD. A SYSTEM * REQUEST ASSUMES THE PRIORITY LEVEL * OF ZERO (HIGHEST PRIORITY).  * * WORD CONTENTS * ---- -------- * 1 < JSB XSIO > * 2 < LOGICAL UNIT # > * 3 * 4 < LINKAGE WORD > * 5 * 6 * 7 * * THE FIELD (BITS 15-14 IN CONTROL WORD) * IDENTIFI ES THE REQUEST TYPE AS: * * 00 USER (NORMAL OPERATION) * 01 USER (AUTOMATIC BUFFERING) * 10 SYSTEM * * SKP IOCOM RAL,CLE,ERA CLEAR THE SIGN BIT AND SAVE IN E STA TEMP3 SAVE STATUS FROM DRIVER AND STB TLOG TRANSMISSION LOG * CLA CLEAR STA COMPL CLEAR COMPLETION ADDRESS. STA EQT15,I CLEAR TIME-OUT CLOCK * LDA EQT4,I SET THE COMPLETION SECTION FLAG STA CONFL AND TEST FOR DMA RETUR N SEZ,RSS SIGN OF A IS EXPLICID RETURN OF SSA DMA CHANNEL, CALL TO JSB CLDMA RELEASE ITS ASSIGNMENT. * LDB EQT1,I GET CONTROL WORD FROM SZB,RSS IF ILLEGAL ENTRY JMP CIC.4 SEND ERROR MESSAGE INB REQUEST BLOCK TO LDA B,I EXTRACT FIELD. STA TEMP0 SAVE CONTROL WORD. RAL,SLA IF BIT 15 = 1 ( = 2) JMP L.53 PROCESS AS SYSTEM REQUEST. SSA IF = 0, PROCESS JMP $L.56 RELEASE AUTO BUFFER BLOCK * * * NORMAL USER OPERATION COMPLETION * L.51 LDB EQT1,I GET ID SEGMENT ADDRESS LDA B,I SET NEXT LINK ADDRESS STA EQT1,I IN WORD 1 OF EQT ENTRY. STB L.52 SET CURRENT ADDR. FOR SCHEDULER. * ADB .9 SET (B) = ADDR. OF XA IN ID SEG. LDA TEMP3 GET COMPLETION STATUS CLE,SZA SET BIT 14 CCE IN STATUS WORD LDA EQT5,I IF T HE STATUS RAL,RAL IS NON-ZERO ERA,CLE,_ERA AND SAVE IN USER A-REG. STA B,I CONTENTS OF PROGRAM. INB STB TEMP9 SAVE TRANSMISSION LOG ADDRESS LDA TLOG SET TRANSMISSION LOG AS STA B, I SAVED B-REGISTER. * JSB $LIST CALL SCHEDULER MODULE TO PLACE OCT 101 USER PROGRAM INTO SCHEDULE L.52 NOP LIST. JMP L.54 * * SYSTEM REQUEST COMPLETION * L.53 LDB EQT1,I GET CURRENT REQUEST AD DR. LDA B,I SET NEXT LINK ADDRESS STA EQT1,I IN EQT ENTRY. * ADB N1 GET WORD 3 OF REQUEST LDA B,I . STA COMPL SAVE COMPLETION ADDR. OR ZERO. * * < L.54 > : AT THIS POINT: * 1) A TEMPORARY BUFFER HAS BEEN RELEASED, * 2) A NORMAL OPERATION HAS CAUSED THE * REQUESTING PROGRAM TO BE LINKED * BACK INTO THE LIST, OR * 3) A SYSTEM REQUEST COMPLETION ADD RESS * HAS BEEN SAVED. * L.54 LDA TEMP3 BY PASS INITIATING THE NEXT SZA OPERATION IF A MALFUNCTION HAS JMP IOERR OCCURRED ON THIS DEVICE. * * L.55 LDA EQT5,I CHECK FIELD. SSA,RSS IF AV SAYS BUSY JMP IOCX SKIP ELSE GO EXIT * * SECTION <60> PROVIDES FOR INITIATING THE NEXT * OPERATION WAITING FOR THE COMPLETED DEVICE. * L.60 LDA EQT5,I SET AND MASK6 FIELD STA EQT5,I = 0 TO SAY AVAILABLE. JMP L.68 GO START THE NEXT REQUEST * .11 DEC 11 SPC 1 * * THIS DEVICE IS COMPETING WITH OTHER DEVICES FOR * THE USE OF THE AVAILABLE DMA CHANNEL. THE * FIELD IN THE CURRENT ENTRY IS SET = 3 TO MEAN * WAITING FOR DMA. THE EQT IS THEN SCANNED FROM * FIRST TO LAST ORDER (#1 TO N) TO FIND THE FIRST * UNIT WAITING FOR DMA. THEREFORE, THE ORDER OF * THE EQT DETERMINES PRIORITY FOR DYNAMIC ASSIGN- * MENT OF DMA CHANNELS - THE SYSTEM DISC SHOULD * BE THE FIRST ENTRY IN THE EQT. * kL.63 LDA EQT# SET # OF CMA,INA EQT ENTRIES STA TEMP1 AS AN INDEX VALUE. LDB EQTA INITIALIZE TO FIRST EQT ENTRY. * L.64 STB TEMP2 SAVE CURRENT ENTRY ADDR. ADB .4 EXTRACT LDA B,I FIELD FROM AND AFLD WORD 5. CPA DMACW IF A = 3, GO TO JMP L.66 ASSIGN DMA. * L.65 ADB .11 SET (B) FOR NEXT ENTRY. ISZ TEMP1 END OF EQT? JMP L. 64 - NO, CONTINUE SCAN JMP IOCX1 -YES, EXIT * L.66 CLA,INA IF ONLY 1 DEVICE WAITING CPA DMACF FOR DMA, GO TO JMP L.67 ASSIGN TO THIS DEVICE. LDA TEMP2 IF CURRENT UNIT IS CPA EQTA FIRST IN EQT (I.E SYSTEM DISC) JMP L.67 ASSIGN ANYWAY. CPA EQT1 IF SAME DEVICE JUST COMPLETED, JMP L.65 ALLOW OTHER DEVICES DMA TIME. * L.67 LDA TEMP2 IF DEVICE TO BE INITIATED IS CPA EQT1 SAM E AS INTERRUPTING DEVICE, JMP L.68 SKIP SETTING EQT ADDRESSES. * JSB SETEQ SET EQT ADDRESSES. * * CALL IF A REQUEST IS STACKED OR A * WAITING UNIT IS ASSIGNED A DMA CHANNEL. * L.68 LDA EQT1,I IF NO REQUEST SZA,RSS WAITING, JMP IOCX EXIT. * JSB DRIVR CALL RSS IF GOOD REQUEST THEN SKIP JMP NOTRD DIAGNOSTIC IF NOT AVAILABLE. * * I/O COMPLETION - EXIT SECTION. * * THIS ROUTI NE CHECK FOR A DMA QUE AND IF ANY AND IF A CHANNEL IS * AVAILABLE THE CHANNEL ASSIGNMENT ROUTINE IS ENTERED. * IOCX LDA DMACF GET THE DMA QUE FLAG SZA,RSS IF EMPTY QUE THEN JMP IOCX1 GO EXIT * DLD INTBA,I ELSE GET THE DMA FLAGS SZA IF ANY SZB,RSS AVAILABLE JMP L.63 GO ALLOCATE IT. * IOCX1 LDA COMPL IF SYSTEM REQUEST LDB TLOG SZA COMPLETION ROUTINE SPECIFIED, JMP COM PL,I OPERATE ITn. * LDB OPATN GET OPERATOR ATTENTION FLAG STA OPATN CLEAR OPERATOR FLAG SZB IF OPERATOR DESIRES CONTROL, JMP $TYPE ACKNOWLEDGE JMP $XEQ TRANSFER TO EXECUTE SECTION * HE D I/O REQUEST ERROR SECTION A-92000-60003-2 REV. B * * * * I/O REQUEST ERROR SECTION * * PART 1: ERRORS ENCOUNTED IN ANALYSING A * USER REQUEST CAUSE A DIAGNOSTIC * TO BE PRINTED ON THE SYSTEM * TELETYPEWRI TER AND THE USER * PROGRAM ABORTED. THE FORMAT OF * THE DIAGNOSTIC IS: * * 'ERR-XX' * * WHERE XX IS AS FOLLOWS: * * * XX = RQ EXEC REQUEST ERROR * PA NOT ENOUGH PARAMETERS * LU ILLEGAL LOGICAL UNIT * EQ LOGICAL UNIT NOT ASSIGNED * BF USER BUFFER VIOLATES SYSTEM * RW READ OR WRITE ILLEGAL FOR DEVICE * BY THE ROUTINE -ERMSG- IN * * * CODE IDENTIFYING THE ERROR TYPE. * RQERR LDA RQ REQUEST ERROR JMP ERRM * ERR01 LDA PA PARAMETER ERR JMP ERRM * ERR02 LDA LU LU ERR JMP ERRM * ERR03 LDA EQ EQT ERR JMP ERRM * ERR04 LDA BF BUFFER ERR JMP ERRM * ERR07 LDA RW READ/WRITE ILLEGAL ERRM STA MSG+2 JSB CKABT GO TEST ABORT OPTION LDA MSGA * JSB SYSMG WRITE MESSAGE JMP ABORT * * RQ ASC 1,RQ PA ASC 1,PA LU ASC 1,LU EQ ASC 1,EQ BF ASC 1,BF RW ASC 1,RW * MSGA DEF *+1 N6 DEC -6 MSG ASC 3,ERR-XX * SPC 10 * * SUBROUTINE TO CHECK FOR ABORT OPTION * * IF"NO ABORT" OPTION SET- RESCHEDULE * * IF "NO ABORT"OPTION NOT SET-ABORT * * CKABT NOP STA XA,I SAVE ERROR CODE ( IN A REG) LDB XEQT GET ADDRESS OF CURRENT ID ENTRY STB CKBT1 SAVE ID ENTRY FOR RESCHEDULE ADB .8 GET DISPLACEMENT RETURN ADDRESS STIB SY SMG SAVE FOR NO ABORT OPTION ADB .7 GET TO STATUS WORD LDA B,I RAL,CLE,SLA,ERA IS ABORT FLAG SET? RSS YES---DO NOT ABORT JMP CKABT,I NO--STANDARD ABORT CCA ADA RQRTN GET ERROR RE TURN ADDRESS STA SYSMG,I SAVE RETURN ADDRESS * JSB $LIST RESTART PROGRAM OCT 101 CKBT1 NOP ID SEG ADDRESS * CLA CLEAR XEQT STA XEQT FORCING A RELOAD LDA SCONF RESTORE STA CONFL *CONTROL FLAG* LDA TEMP9 RESTORE UNIT JSB SETEQ LDA MSG+2 GET ERROR CODE CPA RW IS IT A READ/WRITE ERROR?? JMP REXIT YES--CHECK OTHER DEVICES AND TERMINATE JMP $XEQ NO--IN ITATOR ERROR .8 DEC 8 SKP * PART 2: ILLEGAL REQUEST DETECTED BY * I/O DRIVER. THE REASON IS A READ OR * WRITE OPERATION IS ILLEGAL FOR THE * DEVICE OR A CONTROL REQUEST IS * MEANINGLESS FOR THE DEV ICE. * AN ADDITIONAL REASON FOR TRANSFER TO THIS * SECTION IS AN "IMMEDIATE COMPLETION" (CODE 4) * RETURN FROM THE DRIVER; PROCESSED AS A * CONTROL REJECT. * * * ERROR PROCEDURE IS: * 1. IF THE REQUEST IS PROCESSED AS * BUFFERED OUTPUT, THE TEMPORARY * BLOCK IS RELEASED TO AVAILABLE * MEMORY. * * 2. THE REJECT IS IGNORED IF A SYSTEM * PROGRAM GENERATED THE REQUEST - * HOWEVER, A COMPLETION ROUTINE, * IF SPECIFIED IN THE REQUEST, IS * OPERATED. (NOTE: THIS PHILOSOPHY * IS BASED ON THE ASSUMPTION THAT * THIS CONDITION SHOULD NEVER OCCUR.) * * 3. A US ER CONTROL REQUEST WHICH IS * REJECTED IS TREATED AS IF IT * WAS PERFORMED. THE PROGRAM IS * LINKED BACK INTO THE SCHEDULE LIST. * * 4. A USER READ OR WRITE REQUEST REJECT * %TRN CAUSES A DIAGN OSTIC TO BE ISSUED * AND THE PROGRAM ABORTED. AT SKP ILLCD CPA .4 IF CODE =4 FOR IMMEDIATE LDA .2 COMPLETION, TREAT AS CONTROL STA TEMP4 REJECT, SAVE CODE. LDB EQT1,I GET LOCATION OF LDA B,I ILLEGAL REQUEST (LINK ADDR.) STA TEMP0 SAVE NEXT REQUEST ADDRESS. INB GET CONTROL WORD LDA B,I OF REQUEST BLOCK STA EQT6,I SAVE FOR REXIT RAL CHECK FIELD SSA FOR TYPE OF REQUEST BLOCK JMP $R06 RELEASE BLOCK * R02 SLA,RSS CHECK FIELD AGAIN. JMP R03 -USER PROGRAM REQUEST- * ADB N2 GET WORD IN SYSTEM REQUEST LDA B,I CONTAINING -COMPLETION ROUTINE- STA COMPL ADDRESS OR 0 AND SAVE IT. JMP REXIT * R03 LDA TEMP4 USER REQUEST- CPA .2 CONTINUE IF CONTROL REQUEST JMP R04 REJECTED. LDA EQT1,I SET ID SEGMENT ADDRESS OF PROGRAM STA XEQT CONTAINING ERROR ADA .8 GET PT OF SUSPENSION ADDR. LDB A,I GET RETURN ADDRESS STB RQRTN AND SAVE ON B.P. INA SET XSUSP TO POINT STA XSUSP TO SAVED INITIAL CALL ADDRESS LDA EQT1 SAVE CURRENT STA TEMP9 EQT ADDRES S LDA CONFL SAVE CURRENT STA SCONF *CONTROL FLAG* JMP ERR07 ILLEGAL READ OR WRITE R04 LDA EQT1,I SET PROGRAM ID SEGMENT STA R05+2 ADDR. IN LIST CALL. ADA .9 (A) = ADDR. OF XA IN ID SEGMENT. LDB EQT5,I SET DEVICE STATUS STB A,I WORD IN XA. LDB TEMP6 CPB .2 STORE TLOG IF IMMEDIATE RETURN CLB,RSS FROM DRIVER (A)=4; LDB TEMPW OTHERWISE, STORE ZERO INA TRAN SMISSION LOG STB A,I IN XB. R05 JSB $LIST CALL SCHEDULER OCT 101 TO LINK PROGRAM BACK NOP INTO SCHEDULE LIST. * REXIT LDA TEMP0 SET NEXT LIST STA EQT1,I ENTRY ADDRESS. } LDB CONFL I F THE IOC *COMPLETION* SZB SECTION IS IN CONTROL, JMP L.60 RETURN TO L.60 FOR NEXT REQUEST * LDA EQT6,I REJECT OCCURRED IN IOC *REQUEST* SSA SECTION. RETURN TO JMP XSIO,I SYSTEM CALLE R. LDA TEMP4 IF REJECTING LDB RQRTN A CONTROL REQUEST TO IOREQ, CPA .2 SET EXIT IN POINT STB XSUSP,I OF SUSPENSION. JMP $XEQ EXECUTE SECTION IN SCHEDULER SKP * * I/O DEVICE ERROR SECTION * * THIS SECTION IS ENTERED WHEN A DEVICE * IS UNAVAILABLE FOR INITIATION OF AN * OPERATION OR WHEN AN ERROR IS DETECTED * AT THE END OF AN OPERATION. A DIAGNOSTIC * IS PRINTED ON THE SYSTEM TELETYPE IN THE * FOLLOWING FORMAT: * * I/O ERR MN * * WHERE NN IS THE EQT ENTRY # OF THE DEVICE * AND MN IS A MNEMONIC DESCRIBING THE * CONDITION: * * 1. NR - DEVICE NOT READY * 2. ET - END OF TAPE OR TAPE SUPPLY LOW * 3. PE - TRANSMISSION PARITY ERROR * 4. TO - DEVICE TIMED-OUT * - NEW CODES MAY BE ADDED - * * ON ENTRY TO THE SECTION, (A) CONTAINS A # * CORRESPONDING TO THE ASSOCIATED MNEMONIC * AND EQT1 CONTAINS ADDRESS OF DEVICE. * * NOTRD CLA,INA -SPECIAL NOT READY ENTRY- * IOERR ADA ERTBL INDEX TO ERROR CODE TABLE. LDA A,I GET MNEMONIC AND STA MSG2+2 SET IN DIAG MESSAGE * LDA EQT1 STA TEMP9 * LDA EQT5,I GET STATUS WORD FROM EQT AND MASK6 SET FIELD IO R MASK0 = TO 1 STA EQT5,I -UNIT DOWN- * LDA CONFL SAVE CURRENT STA SCONF *CONTROL FLAG* * LDA MSGA2 ADDRESS OF MESSAGE JSB SYSMG CALL TO PRINT. * * LDA SCONF RESTORE *CONTROL FLAG*. STA CONFL LDB TEMP9 CPB SYSTY JMP L.60 LDB B,I GET FIELD INB WORD LDB B,I TO B. SZA SECTION IN CONTROL, JMP IOCX GO EXIT IOC SSB *REQUEST* SECTION. IF SYSTEM JMP XSIOE,I REQUEST, RETURN TO CALLER. JMP $XEQ EXECUTE SECTION IN SCHEDULER * * I/O DEVICE ERROR MNEMONIC TABLE - ORDERED * BY ERROR CODE DESCRIBING CONDITION * ERTBL DEF * * ASC 1, NR - NOT READY - * ASC 1,ET - END OF TAPE (INFORMATION) - * ASC 1,PE - TRANSMISSION PARITY ERROR - * ASC 1,TO - TIMED-OUT - * * NEW CODES ADDED AT THIS POINT * * MSGA2 DEF *+1 DEC -6 MSG2 ASC 3,ERR-XX HED < IO-DEVICE TIME-OUT PROCESSOR > A-92000-60003-2 REV. B * * * AFTER A DEVICE IS DISCOVERED TO HAVE TIMED-OUT * BY THE SCHEDULER'S CLOCK PROCESSOR,THIS * ROUTINE IS ENTERED. ITS PURPOSE IS TO * CLE AR THE PENDING IO TRANSFER AND ENTER * IOCOM IN SUCH A WAY AS TO SIMULATE AN IO * COMPLETION RETURN FROM THE DRIVER ITSELF. * * * ENTER FROM SCHEDULER MODULE: * * (A)
    * * $DEVT ADA N14 POINT TO EQT JSB SETEQ SET EQT ADDRESSES LDA EQT4,I IOR MASK8 SET TIME-OUT BIT STA EQT4,I STA B SAVE WORD IN B FOR TEST AND MASK1 SELECT CODE TO A BLF,SLB IF DRI VER TO HANDLE TIME JMP CIC.6 OUT GO CALL THE DRIVER. JSB CLCHS CLEAR ALL CHANNELS LDA .4 SERVICED BY THIS ENTRY CLB SIMULATE COMPLETION JMP IOCOM RETURN FROM DRIVER SPC 1 N14 DEC -14 HED A-92000-60003-2 REV. B * CONSTANT AND VARIABLE STORAGE AREA .4 DEC 4 .5 DEC 5 .7 DEC 7 .9 DEC 9 * MASK1 OCT 77 MASK2 OCT 377 MASK4 OCT 140000 MASK6 OCT 37777 MASK8 OCT 4000 MSIGN OCT 100000 * TEMPA EQU TEMP1 TEMPB EQU TEMP2 TEMPE EQU TEMP3 * TLOG NOP AFLD EQU MASK4 DMACW EQU MASK4 DMACF NOP FLAGS USED IN ALLOCATING HED A-92000-60003-2 REV. B * * SUBROU TINE: < SYSMG > (SYSTEM MESSAGE) * * PURPOSE: THIS ROUTINE PROVIDES FOR THE * OUTPUT OF SYSTEM MESSAGES AND * ERROR DIAGNOSTICS ON THE SYSTEM * TELEPRINTER. * * CALL: (A) = ADDRESS OF FIRST WORD OF * MESSAGE BLOCK - THIS WORD * CONTAINS THE CHARACTER * LENGTH OF THE MESSAGE AS * A NEGATIVE VALUE. * * (P) JSB SYSMG * (P+1) -RETURN- * SYSMG NOP LD B A,I STB SLEN SET UP MESSAGE LENGTH INA STA SBAD SET UP MESSAGE ADDRESS JSB XSIO PRINT MESSAGE OCT 1 NOP NOP OCT 2 SBAD NOP SLEN NOP JMP SYSMG,I * SKP * SUBROU TINE: * * PURPOSE: THIS ROUTINE CONVERTS AN EQT * ENTRY # TO AN EQT DISPLACEMENT * AND CALLS TO SET THE * ENTRY ADDRESSES. * * CALLING SEQUENCE: * * (A) = EQT ENTRY # * * (P) JSB CVEQT * (P+1) -RETURN- REGISTERS MEANINGLESS * * CVEQT NOP $CVEQ EQU CVEQT ADA N1 SUBTRACT 1 AND STA B MULTIPLY EQT ENTRY # CMB,INB BY 15 ALF TO ADA B COMPU TE THE ADA EQTA ABSOLUTE ADDRESS. * JSB SETEQ SET ALL 15 ADDRESSES. * JMP CVEQT,I -RETURN- SKP HED I/O CLEAR SECTION A-92000-60003-2 REV. B * SPECIAL SECTION "I/O CLEAR " * * PURPOSE : THE FUNCTION OF THIS ROUTINE * IS TO REMOVE A PROGRAM FROM AN * I/O HANG-UP CONDITION RESULTING * FROM AN INPUT REQUEST NOT BEING * COMPLETED BY THE DEVICE. * * THIS "CLEARING" PROCEDURE IS * INITIATED BY THE OPERATOR IN * REQUESTING AN ABORT OPERATION * * PROCESS: THE LIST OF EACH EQT ENTRY * IS SEARCHED TO FIND THE QUEUED * A REQUEST CORRESPONDING TO THE * ID SEGMENT OF THE REFERENCED * PROGRAM. THE ENTRY IS REMOVED * FROM THE LIST AND THE LIST IS * APPROPRIATELY LINKED TO REFLECT * THE CHANGE. * * IF THE ENTRY WAS THE FIRST ONE * IN THE LIST (I.E. THE ACTIVE * REQUEST), THE DEVICE'S CHANNELS * AND DMA CHANNEL, IF ASSIGNED,ARE * CLEARED. THE DEVICE'S TIME-OUT * CLOCK IS CLEARED. * * CALLING SEQUENCE: * * (A)= ID SEGMENT ADDRESS OF PROGRAM * * (P) JSB IOCL * * -NO RETURN - * * SKP * IOCL NOP CLA STA OPFLG LDA EQT# SET TEMP2 = NEGATIVE CMA,INA NUMBER OF EQT STA TEMP2 ENTRIES. LDA EQTA INITIALIZE FOR * STA IOCL 5 EQT ENTRY WORD STA IOCL6 1 ADDRESS. * IOCL1 LDA A,I GET LINK ADDRESS. CPA ABP JUMP IF A JMP IOCL2 MATCH TO PROGRAM. * SZA IF NOT END OF LIST, JMP IOCL1-1 CONTINUE SCAN. * LDA IOCL5 SET (A) = ADDRESS OF ADA .15 NEXT EQT ENTRY. ISZ TEMP2 IF NOT END OF EQT, GO JMP IOCL1-2 TO SCAN NEXT ENTRY LIST. JMP IOCL,I RETURN * * PROGRAM REQUEST ENTRY FOUND, UNLINK REQUEST. * IOCL2 LDB A,I GET NEXT LINK AND SET STB IOCL6,I IN PREVIOUS LINK. LDA IOCL5 IF PROGRAM REQUEST WAS CPA IOCL6 CURRENT REQUEST CLB,RSS SKIP TO LEAR DEVICE JMP IOCL,I RETURN * JS B SETEQ STA CONFL FOR IOCOMPLETION STB COMPL COMPLETION FLAG STB EQT15,I CLEAR TIME OUT FLAG JSB CLCHS LDA EQT5,I CLEAR BUSY BIT AND MASK6 STA EQT5,I JMP IOCL,I RETURN SPC 1 IOCL5 NOP IOCL6 NOP SKP HED UP-IO-SECTION A-92000-60003-2 REV.B * * * THE UP - IO SECTION IS CALFbLED BY THE * POWER-FAIL DRIVER TO HELP IN RESTARTING * THE DMA CHANNELS. * * * $UPIO JSB CLDMA GO CLEAR DMA CHANNEL LDA EQT5,I GET AVAILABILITY ISZ CONFL SET CONTROL FLAG SSA,RSS IF DOWN OR AVAIL. JMP L.60 GO TRY TO OPERATE JMP $XEQ CONTINUE HED SET EQT TABLE A-92000-60003-2 REV. B * SUBROUTINE: < SETEQ > * * PURPOSE: THIS ROUTINE SETS THE ADDRESSES * OF THE 15 WORDS OF AN * EQUIPMENT TABLE ENTRY IN THE * 15 WORDS IN BASE PAGE COMMUNICATION * AREA LABEL LED -EQT1- TO -EQT15-. * * CALLING SEQUENCE: * * (A) - STARTING ADDRESS OF THE EQT * ENTRY FOR THE REFERENCED * I/O UNIT. * * (P) JSB SETEQ * (P+1) - RETURN - (A),(B) MEANINGLE SS * * THERE ARE NO ERROR RETURNS OR * ERROR CONDITIONS DETECTED. * * SETEQ NOP STA EQT1 INA STA EQT2 INA STA EQT3 INA STA EQT4 INA STA EQT5 INA STA EQT6 INA STA EQT7 INA STA EQT8 INA STA EQT9 INA STA EQT10 INA STA EQT11 INA STA EQT12 INA STA EQT13 INA STA EQT14 INA STA EQT15 JMP SETEQ,I * * SKP HED SYSMG BUFF & PRIV I-O CONFIG A-92000-60003-2 REV. B * * ROUTINE TO CLEAR DMA CHANNEL IF ASSIGNED TO DEVICE * CLDMA NOP LDB INTBA GET THE INTERRUPLE ADDRESS TO B LDA B,I AND DMA 6 ENTRY TO A RAL,CLE,ERA CLEAR THE SIGN BIT CPA EQT1 THIS CHANNEL ASSIGNED? CLA,RSS YES- SKIP JMP IOCL3 NO TRY NEXT CHANNEL CLC 6 CLEAR CHANNEL ST F 6 6. STA B,I SET IT AVAILABLE IN INTBA SPC 1 IOCL3 INB STEP TO DMA 7 ENTRY 3 LDA B,I GET TO A AND RAL,CLE,ERA CLEAR THE SIGN BIT CPA EQT1 THIS CHANNEL ASSIGNED? CLA,RSS YES - SKIP JMP CLDMA,I NO - EXIT CHANNELS CLEARED CLC 7 CLEAR CHANNEL 7 STF 7 AND STA B,I MAKE IT AVAILABLE. JMP CLDMA,I * * ROUTINE TO CLEAR ALL CHANNELS SERVICED BY EQT ENTRY * CLCHS NOP JSB CLDMA CLEAR DMA CHANNEL IF ASSIGNED LDA INTLG STORE INTERRUPT CMA,INA TABLE LENGTH- ADA .2 RELATED INDEX STA TEMPW LDA CLR10 STORE INITIAL ST A CLCSC CLC S.C. LDA INTBA INSTRUCTION ADA .2 CLRNX LDB A,I GET NEXT TABLE ENTRY- CPB EQT1 DOES IT REFERENCE THIS EQT? CLCSC CLC 00B YES-GO CLEAR IT ISZ TEMPW THRU TABLE? INA,RSS NO-INDEX TO NEXT ENTRY JMP CLCHS,I YES-EXIT ISZ CLCSC JMP CLRNX * CLR10 CLC 10B HED OUTPUT * ON SYTEM TELETYPE A-92000-60003-2 REV. B ************************************************************** * TH E $TYPE SECTION FUNCTIONS AS FOLLOWS: * ENTRY IS MADE BY STRIKING ANY KEY ON THE SYSTEM TTY * * IF TELETYPE IS NOT BUSY,THEN * IS OUTPUT AND REQUEST* * IS MADE FOR INPUT.IF FLAG IS SET THEN IQNORE REQUEST * * ON COMPLETION OF INPUT THE MESSAGE IS DECODED AND IF* * THE MESSAGE IS A "GO","AB","SS", OR "UP" THEN THE * CORRECT ACTION IS TAKEN ELSE "?" IS PRINTED. ************************************************************** * $TYPE LDA OPFLG CHECK SYSTEM TTY FLAG SZA JMP $XEQ BUSY SO IGNORE * LDA COLON JSB SYSMG OUTPUT ASTERISK * JSB XSIO INPUT OPERATOR MESSAGE OCT 1 DEF TYP10 GO HERE ON COMPLETION NOP OCT 401 DEF BUFFR DEC -4 * ISZ OPFLG SET SYSTEM TTY BUSZ JMP $XEQ * TYP10 CLA STA OPFLG LDA BUFFR GET MESSAGE CPA AB JMP ABORT ABORT PROGRAM CPA GO JMP TYP20 CPA SS JMP STP STOP EXECUTION(SUSPEND) CPA UP UP LOGICAL UNIT JMP UPLU * LDA QMRKA JSB SYSMG OUTPUT ? AND CONTINUE JMP $XEQ * TYP20 CLA CLEAR TTY FLAG CPA SUSP5 JMP $XEQ CONTINUE EXECUTION * JMP RSTRT ITS SUSPENDED,SO RESTART STP JSB $LIST SUSPEND PROGRAM OCT 106 SSP NOP * * UP A DOWNED LOGICAL UNIT * UPLU LDB EQTA GET EQT ADDRS ADB .4 ADDRESS OF STATUS WORD CLA,INA START COUNTI NG EQTS UPLU1 STA TEMP LDA B,I GET STATUS WORD AND MASK0 SEE IF THIS DEVICE IS DOWN SZA,RSS JMP NXTEQ NO,ITS NOT! LDA TEMP YES,ITS DOWN JSB CVEQT SET EQT ADDRESSES CLA,INA STA CONFL SET CONTROL FLAG=1 FOR IOCOM CLA STA OPFLG CLEAR OPER. FLAG STA COMPL CLEAR COMPLETION FLAG JMP L.60 GOTO IOCOM * NXTEQ ADB .15 INCREMENT TO NEXT EQT LDA TEMP CPA EQT# HAVE WE LOOKED AT ALL EQTS JMP $XEQ YES! INA JMP UPLU1 NO,GOTO NEXT ONE * AB ASC 1,AB GO ASC 1,GO SS ASC 1,SS UP ASC 1,UP * QMRKA DEF *+1 DEC -1 ASC 1,? COLON DEF *+1 N4 DEC -4 OC T 6412 CR,LF ASC 1,:_ PROMPT BUFFR BSS 2 MASK0 OCT 40000 SKP * HED SYSTEM DEFINE ROUTINE A-92000-60003-2 REV. B * * * * CALLING SEQUENCE: * * JSB .OPSY * * RESULT IN A REGIST ER * * A = -3 * * .OPSY NOP LDA N3 JMP .OPSY,I RETURN * * * * SKP HED * SYSTEM BASE PAGE COMM. AREA * A-92000-60003-2 REV. B A EQU 0 B EQU 1 * $CIC EQU CIC $L.13 EQU L.13 $L.51 EQU L.51 $L.55 EQU L.55 $L.10 EQU L.10 $R02 EQU R02 $TMP1 EQU TEMP1 $TMP2 EQU QTEMP2 $TMP3 EQU TEMP3 $TMP4 EQU TEMP4 $TMPW EQU TEMPW $WRD2 EQU WORD2 $ER04 EQU ERR04 $RXIT EQU REXIT $IOER EQU IOERR * * * . EQU 1650B ESTABLIS H ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POI NT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 8 PARAMETERS) * * DEFINITION OF SYSTEM LISTS (QUEUES) * * DORMT EQU .+32 ADDRESS OF 'DORMANT' LIST, SKEDD EQU .+33 'SCHEDULE' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SE GMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSIOu<:6N XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA * * UTILITY PARAMETERS * FENCE EQU .+85 MEM PROTECT FENCE ADDRESS BKLWA EQU .+87 LWA MEMORY IN BACKGROUND END CIC ~_< ; 92001-18002 1732 S C0922 RTE II/III LOADER              H0109 _+ASMB,L,N,C *LOADR USE 'ASMB,R,N' (RTE-II) OR 'ASMB,R,Z' (RTE-III) * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * IFN ******* BEGIN NON-MEU CODE **** HED RELOCATING LOADR FOR RTE-II <1732> NAM LOADR,3,90 92001-16002 REV.1732 770811 ******* END NON-MEU CODE ****** XIF IFZ ******* BEGIN MEU CODE ******** HED RELOCATING LOADR FOR RTE-III <1640> NAM LOADR,3,90 92060-16004 REV.1732 770811 EXT $ENDS,$MATA ******* END MEU CODE ********** XIF * UNL IFN ******* BEGIN NON-MEU CODE **** LST * NAME: RTE LOADER * SOURCE: 92001-18002 * RELOC: 92001-16002 * PGMR: P. KAPOOR, E. WONG, G. ANZINGER * UNL ******* END NON-MEU CODE ****** XIF IFZ ******* BEGIN MEU CODE ******** LST * NAME: RTE LOADER * SOURCE: 92001-18002 * RELOC: 92060-16004 * PGMR: E. WONG * UNL ******* END MEU CODE ********** XIF LST SUP EXT EXEC,$LIBR,$LIBX,PRTN * SKP * LIST OF ERROR DIAGNOSTICS * * * = MODULE NAME PRINTED BEFORE DIAGNOSTIC * **= ENTRY POINT NAME PRINTED AFTER MODULE NAME * * 01 * - CHECKSUM ERROR * 02 * - ILLEGAL RECORD * 03 * - MEMORY OVERFLOW * 04 * - BP LINKAGE OVERFLOW * 05 * - SYMBOL TABLE OVERFLOW * 06 * - COMMON BLOCK ERROR * 07 * ** - DUPLICATE ENTRY POINTS * 08 - NO TRANSFER ADDR * 09 * - RECORD OUT OF SEQUENCE * 10 - ILLEGAL PARAMETER IN ON OR GO STATEMENT * 11 - ATTEMPT TO REPLACE A CORE RESIDENT PROG * 12 - LG AREA USED WITHOUT RESETTING (P1=2 IN 'GO') * P1 WAS NOT INPUT AS 99 PREVIOUSLY. * 13 - LG AREA HAS BEEN ILLEGALLY RESET - OVERWRITTEN. * PROGRAM ADDITION ON LG AREA NOT ALLOWED FOR MAIN SEG * LOAD IF THE LOADER HAS ALREADY LOADED THE LAST SEGMENT. * HAVING ONCE USED LG AREA FOR FORCE LOADING WITH P1=99, * LOADER CANNOT BE RESCHEDULED WITH P1=99 IN THE 'GO' REQUEST. * 14 * - ASMB PRODUCED ILLEGAL RELOCATABLE . A DBL REC * REFERS TO AN EXTERNAL WHICH HAS NOT BEEN DEFINED. * (THE ORDINAL CAN NOT BE FOUND IN THE SYMBOL TABLE). * 15 * ** - FORWARD REFERENCE TO A TYPE 3 OR TYPE 4 ENT OR TO * AN EXT WITH OFFSET WHICH HAS NOT YET BEEN DEFINED, * OR A FORWARD INDIRECT EXTERNAL REFERENCE. * 16 - ILLEGAL PARTITION NUMBER OR CORRUPT MAP TABLE. * 17 - NUMBER OF PAGES REQUIRED EXCEEDS AMOUNT IN PTTN. * 18 - TOTAL NUMBER OF PAGES REQUIRED EXCEEDS 32. * * * LIST OF WARNINGS (THE RELOCATION IS NOT ABORTED) * * 17 - NUMBER OF PAGES REQUIRED EXCEEDS AMOUNT IN PTTN. SKP * * VARIABLES AND CONSTANTS * PLIST NOP LIST/NO LIST FLAG = 0/1 CWABP NOP CURRENT BASE PAGE ADDR LST1 NOP LST WORD 1 ADDR LST2 NOP LST WORD 2 ADDR LST3 NOP LST WORD 3 ADDR LST4 NOP LST WORD 4 ADDR LST5 NOP LST WORD 5 ADDR PRIOR NOP ADDR OF PRIORITY IN ID SEG PRENT NOP ADDR OF PRIMARY ENTRY POINT NAM12 NOP ADDR OF NAME 1,2 NAM34 NOP ADDR OF NAME 3,4 NAM5 NOP ADDR OF NAME 5, TYPE RESL NOP ADDR OF 10'S MILLS. IN ID SEG TMDY1 NOP ADDR OF TIME OF DAY ,LS TMDY2 NOP ADDR OF TIME OF DAY , MS NUPLS NOP NO. UTILITY PROGS LOADED TPREL NOP CURRENT MAX PROG RELOC ADDR DBLAD NOP DATA BLOCK RELOCATION ADDR OPRND NOP ABSOLUTE MEMORY ADDR WDCNT NOP TEMPORARY COUNTER DSKUN NOP CURRENT DISK LOGICAL UNIT NO. DTRAK NOP CURRENT DBUF TRACK DSECT NOP CURRENT DB*UF SECTOR DCNT NOP CURRENT DBUF COUNT CURAL NOP CURRENT LBUF ADDR CURAT NOP CURRENT TBUF ADDR TBUF BSS 5 TEMPORARY BUFFER MSEGF NOP MAIN/SEGMENT FINAL LOAD FLAG NPAR BSS 7 NAME REC PARAMETERS BKLWR NOP LAST WORD OF AVAILABLE MEM LWA NOP LOADING AREA, BPFWA NOP FWA OF ACTUAL BP LINK AREA FWABP NOP FWA AND LWA OF DUMMY LWABP NOP BASE PAGE AREA. SEGB NOP SEGMENT BASE PAGE LOWER BOUND DBFLG NOP NO DEBUG/DEBUG FLAG = 0/1 LGO NOP LOAD-AND-GO FLAG: 0=NO, >0=YES MSEG NOP MAIN/SEGMENT LOAD FLAG: 0=NO, >O=YES DBLFL NOP FIRST DBL REC: -1,YES; 0,NO. EDFLG NOP EDIT FLAG: 1=ADDITION, 2=REPLACEMENT PTYPE DEC 3 PROG TYPE PPRI NOP PROG PRIORITY OPCOD NOP COMTP NOP TYPE OF COMMOM MXCOM NOP MAXIMUM COMMON LENGTH PAM1 NOP PARM1 OF ON REQ PAM2 NOP BATCH NOP BATCH MODE FLAG: 0=NO, -1=YES INDLU NOP N1 DEC -1 N9 DEC -9 N64 DEC -64 N128 DEC -128 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P8 DEC 8 P12 DEC 12 P16 DEC 16 P18 DEC 18 P20 DEC 20 P22 DEC 22 P23 DEC 23 P26 DEC 26 P42 DEC 42 P98 DEC 98 P99 DEC 99 P128 DEC 128 P9999 DEC 9999 M7 EQU P7 M17 OCT 17 M20 OCT 20 M60 OCT 60 M77 OCT 77 M177 OCT 177 M200 OCT 200 M300 OCT 300 M377 OCT 377 M400 OCT 400 M0760 OCT 76000 M7400 OCT 177400 NDAY OCT 177574,025000 ENTRL DEF *+3 RELOCATION BASE TABLE RBTAD DEF *+1 RELOCATION BASE TABLE NOP PPREL NOP CURRENT PROG BASE BPREL NOP BASE PAGE BASE COMAD NOP COMMON BASE NOP ABSOLUTE BASE BLOK# NOP BLANK OCT 40 UBLNK OCT 20000 UCHRG OCT 43400 MSIGN OCT 100000 CHRDE ASC 1,DE CHRBU ASC 1,BU MESS2 DEF MBUF AMEM3 DEF MBUF+3 AMEM6 DEF MBUF+6 MES10 DEF *+1 AS5tC 7,LOADR ABORTED PGMIN OCT 305 SEOT OCT 705 SET END OF TAPE CONWORD LISTU OCT 206 LIST OUTPUT UNIT NO. BLST NOP BEGINNING OF LOADER SYMBOL TABLE PLST NOP END OF LST TLST NOP CURRENT LST ADDR. SLST NOP INITIALIZE FOR SEGMENT AREA. FLST NOP FWA OF LST SET FOR USER'S PROG OEFL1 NOP ODD/EVEN SECTOR FLAG SEOFG NOP ODD/EVEN SEC FLAG FOR MAIN/SEG LBOEF NOP LIB ODD/EVEN SECOR FLAG LGTMP NOP PREVIOUS LG ODD/EVEN SEC FLAG LGOEF NOP CURRENT LG ODD/EVEN SECTOR FLAG LGOBF NOP LG ON GO REQ. FLAG #IDAD NOP ADDR OF LONG ID SEGMENT * SPC 1 IFN ******* BEGIN NON-MEU CODE **** N40 DEC -40 ******* END NON-MEU CODE ****** XIF SPC 1 SPC 1 IFZ ******* BEGIN MEU CODE ******** N140 DEC -140 N34 DEC -34 P1000 DEC 1000 P21 DEC 21 M40 OCT 40 MES11 DEF *+1 ASC 9,00 PAGES REQUIRED MS11# EQU MES11+1 #PGS NOP # PAGES NEEDED IN PTTN #PTTN NOP REQUESTED PTTN NUMBER #PGPT NOP # PAGES IN PTTN #MPFT NOP MEMORY PROTECT FENCE TABLE INDEX #MNPG NOP LOWEST PAGE NO. USED BY PROG #MXPG NOP HIGHEST PAGE NO. USED BY PROG #MXRT DEC -1 #PAGES IN LARGEST RT PTTN #MXBG DEC -1 #PAGES IN LARGEST BG PTTN ER.16 LDA ERR16 ILLEGAL PTTN # RSS ER.17 LDA ERR17 #PAGES REQ.>PTTN SIZE RSS ER.18 LDA ERR18 TOTAL PAGES > 32 JMP ABOR ERR16 ASC 1,16 ERR17 ASC 1,17 ERR18 ASC 1,18 ******* END MEU CODE ********** XIF SPC 1 SKP * BASE PAGE COMMUNICATION VALUES * A EQU 0 B EQU 1 * . EQU 1650B ESTABLISH ORIGIN OF AREA * INTLG EQU .+5 NUMBER OF INTERRUPT TBL ENTRIES TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE KEYWD EQU .+7 FWA OF KEYWORD BLOCK XEQT EQU .+39 ID SEGMENT ADDR OF LOADR IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR BPA2 EQU .+59 LWA RT DISC RES. BP LINK AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTLWA EQU .+65 LWA OF RT DISC RESIDENT AREA BKORG EQU .+66 FWA OF BG AREA BKCOM EQU .+67 LENGTH OF BG COMMON AREA TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDR BKLWA EQU .+87 LWA OF MEMORY IN BG SPC 1 IFN ******* BEGIN NON-MEU CODE **** BPA1 EQU .+58 FWABP RT DISC RES BPA3 EQU .+60 FWABP BG DISC RES BKGBL OCT 1646 LWABP BG DISC RES URFWA EQU .+64 FWA OF USER RT DISC RES AREA URLWA NOP LWA OF USER RT DISC RES AREA UBFWA EQU .+68 FWA OF USER BG DISC RES AREA UBLWA EQU BKLWA LWA OF USER BG DISC RES AREA ******* END NON-MEU CODE ****** XIF SPC 1 SPC 1 IFZ ******* BEGIN MEU CODE ******** BPA1 EQU P2 FWABP USER RT DISC RES BPA3 EQU BPA1 FWABP USER BG DISC RES BKGBL EQU BPA2 LWABP USER BG DISC RES URFWA NOP FWA USE RT DISC RES AREA URLWA OCT 77777 LWA USER RT DISC RES AREA UBFWA EQU URFWA FWA USER BG DISC RES AREA UBLWA EQU URLWA LWA USER BG DISC RES AREA ******* END MEU CODE ********** XIF SPC 1 SKP * * LOADING OF PROGRAMS WITH THE RELOCATABLE LOADER CONSISTS OF * (1) LOADING PROGRAMS FROM THE INPUT UNIT * (2) LOADING PROGRAMS FROM THE PROG LIB * THE FIRST PROGRAM WITH A PRIMARY ENTRY POINT IS CONSIDERED * TO BE THE MAI*N PROGRAM. AT LEAST ONE MAIN PROG MUST BE LOADED * BEFORE THE LIBRARY IS LOADED. LINKAGES FROM THE MAIN PROG * TO ALL USER AND LIB SUBROUTINES IS DETERMINED BY ENTRIES * IN THE LOADER SYMBOL TABLE (LST). * * EACH LST ENTRY CONSISTS OF 5 WORDS: * * ************************************************************* * * NAME - * NAME - * NAME - *ENT/EXT FLG* * * * CHARS 1,2 * CHARS 3,4 * CHAR 5/ * 'V' BIT * * * * * * ORDINAL * ENT TYPE * SYMB VALU * * ************************************************************* * * EACH WORD IN THE LST ENTRY CONSISTS OF THE FOLLOWING: * * WORD 1: SYMBOL NAME - ASCII CHARACTERS 1,2 * BIT 15 = 1 MEANS THE ENTRY HAS BEEN LISTED * BIT 15 = 0 MEANS THE ENTRY HAS NOT BEEN LISTED * WORD 2: SYMBOL NAME - ASCII CHARACTERS 3,4 * WORD 3: (8-15) SYMBOL NAME - ASCII CHARACTER 5 * (0-7) EXT ORDINAL * WORD 4: ORGANIZED INTO FOLLOWING THREE FIELDS - * STATUS FIELD (BITS 0 TO 6) - INDICATES STATUS * OF THE SYMBOL AS FOLLOWS: * 0 - ENT SYMBOL READ DURING LIB SCAN (COULD BE * FROM RES LIB, RELOC LIB ON DISC OR USER * GIVEN LIB). * 1 - ENT SYMBOL READ DURING FORCE LOADING OF USER * PROGRAM. * 2 - EXT ENTRY (UNDEFINED SYMBOL). * NOTE THAT STATUS OF A SYMBOL CHANGES FROM 2 TO * 0 OR 1 AS IT BECOMES DEFINED. * 'V' BIT (BIT 7) - WHEN SET THEN WORD 5 HAS THE * THE ADDRESS OF THE BASE PAGE LINK, ELSE WORD 5 * HAS SYMBOL VALUE (VALUE OF ENT AFTER RELOCATIONA). * ENT TYPE (BITS 8 TO 15) - IS 0 FOR EXT ENTRY AND * 0 TO 4 (RELOCATION INDICATOR) FOR ENT SYMBOL. * WORD 5: BASE PAGE LINKAGE ADDR IF 'V' BIT IS SET * ELSE SYMBOL VALUE . * * INITIALLY, THE LOADER SYMBOL TABLE CONSISTS OF THE ENTRY POINTS * FOR THE LIBRARY ROUTINES IN THE RESIDENFT LIB AND THE * SYSTEM ENTRY POINTS (TYPE 1 ENT NOT PICKED UP). AS EACH * USER PROGRAM IS LOADED AND ENT/EXT RECS PROCESSED, SYMBOLS * ARE ADDED TO THE LIST. WHEN ALL USER PROGS HAVE * BEEN LOADED, AND LIB LOADING IS INITIATED, THE LOADER * SCANS LST FOR UNDEFINED SYMBOLS AND MATCHES THESE WITH THE * ENT SYMBOLS IN LIBRARY DIRECTORY. ON FINDING A MATCH, THE * LOADER LOADS THE CORRESPONDING LIB PROG AND ADDS ITS * ENT'S AND EXT'S TO THE LST. THIS PROCEDURE CONTINUES UNTIL ALL * UNDEFINED SYMBOLS HAVE BEEN DEFINED OR A COMPLETE PASS THROUGH * THE DIRECTORY FAILED TO RESOLVE ANY EXTERNAL . * FOR MAIN/SEGMENT LOAD, IF UNRESOLVED SYMBOLS STILL REMAIN * THEN THE ENTIRE LG AREA IS SCANNED FOLLOWING WHICH THE DISC * LIBRARY DIRECTORY IS AGAIN SCANNED - IF NEED BE. IF ANY * SYMBOL STILL REMAINS UNDEFINED AFTER THIS THEN IT LISTED * - EXCEPT FOR UNDEFINED SYMBOLS IN MAIN - AND THE LOADER * SUSPENDS. * IF THE LOADER IS OPERATING UNDER BATCH, ALL OUTPUT * THAT NORMALLY COMES ON THE SYSTEM CONSOLE GETS LISTED * ON LU 6. * * THE LST IS ORIGINED AT THE UPPER END OF THE LOADER AND EXTENDS * TOWARD HIGH CORE. AN IRRECOVERABLE ERROR IS DETECTED IF LST * EXTENDS PAST THE LAST WORD OF AVAILABLE MEMORY. * IN CASE OF ERROR THE LOADER PRINTS THE NAME OF THE MODULE * IN WHICH THE ERROR OCCURED, FOLLOWED BY THE ERROR CODE. * IN CASE OF ERRORS 7 & 15 , NAME OF THE ENTRY POINT CAUSING * THE VIOLATION IS ALSO PRINTED FOLLOWING THE MODULE NAME. * SKP * * LOADER INITIALIZATION SECTION * * LOADR IS SCHEDULED BY AN 'ON' STATEMENT HAVING * THE FOLLOWING FORMAT: * * 'ON,LOADR,P1,P2,P3,P4,P5' , WHERE: * * P1 = N, N IS THE LOGICAL UNIT NUMBER OF THE * BINARY INPUT DEVICE FOR LOADING * PROGRAMS. IF P1 = 0, UNIT #5 IS USED. * IF P1 = 99, LOAD FROM THE DISC * LOAD-AND-GO AREA. * * P2 = N, N IS THE LOGICAL UNIT NUMBER OF THE * LIST OUTPUT DEVICE FOR PRINTING * LOADING INFORMATION. IF P2 = 0, * UNIT #6 IS USED. * * P3 = N, N IS A CODE FOR THE TYPE OF OPERATION: UNL IFN LST * N IS A 2 DECIMAL DIGITS CODE (YZ) UNL XIF IFZ LST * N IS A 3 DECIMAL DIGITS CODE (XYZ) * 100'S DIGIT (X) - SUBSYSTEM GLOBAL AREA * --------------------------------------- * 0 - SSGA NOT USED (DEFAULT) * 1 - SSGA USED BY PROG (ONLY IN RTE-III) UNL XIF LST * * 10'S DIGIT (Y) - COMMON TYPE * ----------------------------- UNL IFN LST * 0 - DEFAULT RT COMMON FOR RT PROGS, * BG COMMON FOR BG PROGS * LOCAL COMMON FOR TEMPORARY LOADS UNL XIF LST UNL IFZ LST * 0 - DEFAULTS TO LOCAL COMMON !! (*** NOTE THIS ***) !! UNL XIF LST * 1 - SYSTEM COMMON * RT COMMON FOR RT PROGS, * BG COMMON FOR BG PROGS * 2 - LOCAL COMMON * 3 - REVERSE COMMON * RT COMMON FOR BG PROGS, * BG COMMON FOR RT PROGS * * DEFAULT * COMMON 1'S DIGIT (Z) - OPERATION CODE * ---------------------------------------- * 2 0 - BG TEMPORARY(DEFAULT) * 2 1 - BG TEMPORARY WITH DEBUG * 1 2 - ONLINE EDIT * - 3 - LIST PROGS * - 4 - PURGE PROG * 2 5 - REAL-TIME TEMPORARY * 1 6 - REAL-TIME REPLACE * 1 7 - REAL-TIME ADD NEW * 1 8 - BG REPLACE * 1 9 - BG ADD NEW * NOTE : VALUES N=13,14,23,24,33 AND 34 ARE INVALID. * * P4 = N, N IS THE STRUCTURE PARAMETER ! UNL IFZ LST * (5 DECIMAL DIGITS CODE XXYYZ) * XX - NUMBER OF PAGES REQUIRED * ----------------------------- * 00 - USE PROG SIZE (DEFAULT) * 01-32 - NUMBER OF PAGES * * YY - PTTN ASSIGNMENT * ------------------------- * 00 - NONE ASSIGNED (DEFAULT) * 01-64 - PTTN NUMBER * * Z - STRUCTURE * -------------- UNL XIF LST * 0 - MAIN PROG ONLY (DEFAULT) * 1 - BG MAIN+SEGMENT LOADING. * * P5 = 1, OMIT PROG NAME AND BOUNDS LIST * = 2, OMIT LIST OF ENTRY POINTS * = 3, OMIT BOTH * = 0, DO BOTH LISTINGS (DEFAULT) * PARAMETERS P3, P4 AND P5 DEFAULT TO ZERO IF OMITTED. * SKP * MESS7 DEF *+1 THIS MESS MUST PRECEDE MBUF ASC 11,DUPLICATE PROG NAME - MBUF BSS 66 NAM REC BUFFER MBUF1 EQU MBUF+1 SBUF BSS 128 DIRECTORY BLOCK BUFF XBUF BSS 128 DISC BUF FOR RELOCS DBUF BSS 128 DISC BUF FOR ABS LBUF BSS 128 RELOC IN, UREAD, COMP TRKS .BUF EQU * END OF BUFFERS IN OVERLAYED CODE * ORG MBUF PUT INIT CODE IN BUFFER LOADR LDA B,I SAVE STA PAM1 PARAMETER 1 INB LDA B,I CHECK PARAMETER STA PAM2 SAVE PARAMETER P2 SZA,RSS IF LIST DEVICE NOT GIVEN LDA P6 USE 6 IOR M200 ADD V BIT TO USE COLUMN ONE STA LISTU SET NEW LU. INB LDA B,I AND 3, STA OPCOD OPERATION CODE. INB LDA B,I AND 4, SPC 1 IFN * BEGIN NON-DMS CODE *************** AND P1 KEEP ONLY BIT 0 IF RTE-II *** END NON-DMS CODE *************** XIF SPC 1 STA MSEG (MAIN/SEGMENT FLAG) INB LDA B,I AND 5. STA PLIST (LIST/NO LIST) SPC 2 UNL * ************}E******DEBUGGING*********************** * EXT DBUG * AND P3 * CPA PLIST PARAM > 3 ? * JMP LOADP NO, NORMAL EXECUTION * STA PLIST YES, SET CORRECT PARAM * JSB DBUG WE WANT DDT ! * DEF *+1 LOADP EQU * * ******************DEBUGGING*********************** LST SPC 1 * JSB EXEC DEF *+3 INDICATE UNDECLARED CORE DEF P22 USAGE. DEF P3 JSB LGSET SET UP LG PARAMETERS LDA LGOC SET UP END OF LG AREA ADDR STA LGOCP FOR PROG INPUT STA LGOCL AND FOR LIB SCAN. CLB SET FLAG TO INDICATE SLA WHETHER LAST LGOC ENDED CCB ON ODD SEC BOUNDRY OR EVEN. STB LGOEF LDB XEQT (B)=ADDR OF LOADR'S ID SEG ADB P20 (B)=ID SEG'S WORD 21 ADDR LDA B,I GET WORD 21 TO CHECK BIT 15 LDB LISTU (B)=LIST LU CONTROL WORD SSA IF LOADR RUNNING UNDER BATCH STB LIST1 THEN SYSOUT DEVICE IS LIST LU. CLB SSA SET 'BATCH' FLAG TO NON-ZERO CCB IF RUNNING UNDER BATCH STB BATCH LDA PLIST CHECK PARAM 5 SSA IF NEGATIVE JMP LDI5 THEN INPUT ERROR ADA N4 SSA,RSS IF GREATER THAN 3 JMP LDI5 THEN INPUT ERROR. LDA PLIST ARS SET FLAG STA ENFLG FOR ENTRY POINT LISTING. LDA PAM1 CHECK PRAM 1. SZA,RSS IF ZERO, GO TO CHECK #2, JMP LDI2 LEAVE INPUT AS LU 5. CPA P1 IF INPUT IS SYS TTY, JSB CHKP1 TREAT AS ERROR UNLESS P3=3 OR 4. CPA P2 IS THIS TO THE DISK JMP LDI5 JUST WHO DO YOU THINK YOUR KIDDING?????? LDB P2 CPA P99 IF PARAM STA LGO WORD. CPA P99 IF LG TO BE USED STB LGOU SET 'LG IN USE' FLAG * LDI2 LDB XEQT (B)H=ADDR OF LOADR'S ID SEG ADB P23 (B)=ADDR OF LOADR'S HIGH MAIN LDA B,I SET UP LOADR SYMBOL TABLE TO STA BLST START FROM LOADR'S HIGH STA PLST MAIN ADDR AND GROW UP STA TLST TOWARD HIGH CORE. STA SLST STA FLST ADB N9 (B)=ADDR OF LOADR ID'S WORD 15 LDA B,I GET LOADR'S PROG TYPE LDB RTLWA GET ADDR OF LOADR'S LAST WORD SPC 1 IFN ******* BEGIN NON-MEU CODE **** ADB N1 SUBTR 1 FOR RTE-II STB URLWA ******* END NON-MEU CODE ****** XIF SPC 1 SLA SKIP IF LOADR IS FG LDB BKLWA ELSE GET LWA OF BG. STB BKLWR SET AS LWA AVAILABLE TO LOADR LDA OPCOD GET P3 OF 'ON' REQUEST. SPC 1 IFN ******* BEGIN NON-MEU CODE **** ADA N40 ADD -40 TO CHECK RANGE ******* END NON-MEU CODE ****** XIF SPC 1 SPC 1 IFZ ******* BEGIN MEU CODE ******** ADA N140 ADD 140 (MAX WITH SSGA) ******* END MEU CODE ********** XIF SPC 1 SSA,RSS IF OPCODE > 39 JMP LDI5 THEN INPUT ERROR LDA OPCOD GET P3 AGAIN CLB .MBUF EQU *-MBUF OVERLAY PROBLEM? STB MBUF CLEAR "VALID MODULE NAME PRESENT" FLAG DIV P10 GET 'COMMON TYPE' (REG-A) AND STA COMTP SAVE IT. STB OPCOD 10-119 RANGE IN 'OPCOD' ADB OPTBL ADD TABLE BASE ADDR TO OPCODE LDB B,I RESOLVE INDIRECT JMP B,I GO TO PROPER PROCESSOR * OPTBL DEF *+1 DEF BGTMP 0=BG TEMPORARY DEF DBGF 1=BG TEMP WITH 'DEBUG' DEF LEDIT 2=EDIT WITH "GO" REQUEST DEF LLIST 3=LIST ID SEGMENTS DEF LDI3 4=PURGE PROG DEF FGTMP 5=FG TEMPORARY DEF FGRPL 6=FG REPLACE DEF FGNEW 7=FG ADD NEW DEF BGRPL 8=BG REPLACE DEHFBF BGNEW 9=BG ADD NEW * DBGF ISZ DBFLG SET DEBUG FLAG BGTMP JMP LEDT3 TREAT AS BG TEMPORARY BGNEW CLB,INB,RSS EDIT FLAG = 1 FOR NEW BG BGRPL LDB P2 EDIT FLAG = 2 FOR REPLACE STB EDFLG SET PROPER EDIT FLAG JMP LEDT3 SET COMMON BOUNDS * FGNEW CLB,INB,RSS EDIT FLAG = 1 FOR ADD FGRPL LDB P2 EDIT FLAG = 2 FOR REPLACE STB EDFLG SET PROPER EDIT FLAG FGTMP LDB P2 STB PTYPE SET PROG TYPE = 2 JMP LEDT3 SET COMMON BOUNDS * * NORMAL ON-LINE LOADING OPERATION * LEDT3 EQU * SPC 1 IFZ ******* BEGIN MEU CODE ******** LDA MSEG GET PARAM P4 CLB DIV P1000 SAVE # PAGES REQ. STA #PGS 00XXX-32XXX LDA B CLB DIV P10 SAVE PTTN # REQ. STA #PTTN XX00X-XX64X STB MSEG SAVE XXXX0-XXXX1 * CCB GET ADDR MAP TABLE - 1 ADB $MATA WHERE # OF PART. IS KEPT SZA,RSS WAS PTTN# SPECIFIED? JMP NOPTN NO, DO SIZE CHECK LATER SPC 2 * PARTITION WAS SPECIFIED FOR THIS PROG * LDA B,I YES, DO SIZE CHECK NOW CMA ADA #PTTN SSA,RSS ERR16 IF PTTN# > #PTTNS JMP ER.16 * H CCA ADA #PTTN 6 * (PTTN# - 1) + $MATA MPY P6 IS ADDR OF ENTRY ADA $MATA IN MAP TABLE LDB A,I (A) IS ADDR MAP ENTRY SSB IF ENTRY NOT DEFINED, JMP ER.16 GIVE ERR16 * ADA P4 BUMP TO WORD 5 LDB A,I RBL,CLE,ERB REMOVE RESERVED FLAG STB #PGPT SAVE #PAGES IN PTTN CMB ADB #PGS ENOUGH PAGES IN SSB SPECIFIED PTTN? JMP PGSOK YES SZB OK IF EQUAL LDB #PGS NO, BUT WAS SPECIFIC SZB SIZE REQUESTED? JMP ER.17 YES, CAN'T FIT! * *PGSOK INA * LDB A,I * LDA P2 * SSB,RSS * INA * CPA PTYPE PTTN TYPE SAME * RSS SAME AS PROG TYPE? * JMP ER.16 NO, ERR16 PGSOK CCA ADA #PGS SUBT 1 FROM #PGS REQUESTED SSA ANY REQUESTED? LDA #PGPT NO, USE SIZE OF PTTN STA #MXBG SET AS MAX SIZE STA #MXRT OF QUALIFIED AREAS JMP CMMST NOW SET UP COMMON STUFF * * * NO PARTITION WAS SPECIFIED FOR THIS PROG * NOPTN LDA B,I NO PTTN SPECIFIED CMA,INA,SZA,RSS FIND MAX OF EACH TYPE JMP ER.16 ERROR IF NO PTTNS DEFINED STA WDCNT SAVE NEG # PTTNS INB NXPTN STB TBUF SAVE CURR PTTN DEF ADDR LDA TBUF,I SSA IS PTTN DEFINED? JMP A6PTN NO, SKIP THIS ENTRY ADB P4 LDA B,I GET WORD 5 SSA IF RESERVED, SKIP IT JMP A6PTN CAUSE WE GOT NO RESERVATION * INB LDB B,I GET WORD 6 SSB,RSS FIND TYPE OF PTTN: JMP BGPTN LDB A RT PTTN CMB,INB ADB #MXRT RT PTTN SIZE SSB BIGGER THAN PREVIOUS MAX? STA #MXRT YES, SAVE NEW MAX JMP A6PTN CHECK NEXT PTTN DEFINITION * BGPTN LDB A BG PTTN CMB,INB ADB #MqXBG BG PTTN SIZE SSB BIGGER THAN PREVIOUS MAX? STA #MXBG YES, SAVE NEW MAX * A6PTN LDB TBUF ADB P6 INCRE TO NEXT PTTN DEFINITION ISZ WDCNT SEARCH THROUGH UNTIL DONE JMP NXPTN * * CMMST LDA COMTP GET COMMON TYPE CLB DIV P10 DIV BY 10 AGAIN STB COMTP TO GET ONLY 2ND DIGIT STA #MPFT SAVE TO DETERMINE FENCE INDEX ADA B SZA ANY TYPE OF COMMON USED? JMP CMUSE YES LDA $ENDS NO COMMON USED ALF,ALF SHIFT #PAGES IN SYS RAL,RAL TO GET ADDR OF NEXT PAGE JMP CMNCM SET FWA USER CMUSE LDA BKORG SSGA OR COMMON ADA BKCOM WAS USED ADA M1777 USE ADDR OF NEXT PAGE AND M0760 AFTER COMMON FOR CMNCM STA URFWA SET FWA USER RAL,RAL SHIFT PAGE NO. TO ALF LOW BITS ADA #PGS ADD SPECIFIED PAGE NO. ADA N34 TOO BIG?? SSA,RSS WELL? JMP ER.18 YES TOO BAD BETTER LUCK NEXT TIME. * LDA URFWA RESTORE LOAD POINT TO A * CCB SET PROPER LWA USER ADB #PGS #PAGES REQ'D LESS BASEPAGE SSB WAS ANY REQUESTED? JMP LEDT4 NO, DEFAULTS 77777 BLF,BLF SHIFT TO FORM PAGE ADDR RBL,RBL ADA N1 SUBT 1 AND ADD TO U.FWA ADA B FOR ADDR OF U.LWA SSA,RSS IF PAST 32K USE 77777 STA URLWA NO, SET URLWA,UBLWA ******* END MEU CODE ********** XIF SPC 1 LEDT4 LDB EDFLG GET EDIT FLAG LDA COMTP GET COMMON TYPE SZA,RSS COMMON SPECIFIED ? JMP DFLCM NO, SET DEFAULT TYPE. CPA P2 LOCAL COMMON ? JMP LCLCM YES, SET LOCAL COMMON. SYSCM LDB P2 SET (B)=2 FOR SYSTEM COM CPA P3 REVERSE COMMON ? LDB P3 YES, SET REVERSE COMMON. LDA BKCOM (A) = LEN OF BG8 SYS COMM CPB PTYPE BG PROG ? LDA RTCOM YES, SET (A)=LEN OF FG COMM STA MXCOM SET MAXIMUM LEN OF COMMOM LDA BKORG ALSO SET ORIGIN CPB PTYPE OF THE RESPECTIVE LDA RTORG COMMON AREA. STA COMAD JMP CMEXI FINISH UP COMMON STUFF DFLCM EQU * SPC 1 IFN ******* BEGIN NON-MEU CODE **** SZB EDIT OPERATION ? JMP SYSCM YES, SET SYSTEM COMMON. ******* END NON-MEU CODE ****** XIF SPC 1 LCLCM CCA SET LOCAL COMMON FLAG STA COMIN TO ALLOC AT NAM REC SPC 1 IFZ ******* BEGIN MEU CODE ******** CLA (A)=0 IF LOCAL COMMON JMP CMLOC ******* END MEU CODE ********** XIF SPC 1 * CMEXI EQU * SPC 1 IFZ ******* BEGIN MEU CODE ******** LDA P3 (A)=3 IF BG COMMON CPB PTYPE LDA P2 (A)=2 IF RT COMMON CMLOC LDB #MPFT (A)=0 IF LOCAL COMMON SZB LDA P4 (A)=4 IF SUBSYSTEM GLOBAL AREA STA #MPFT SET MPFT INDEX ******* END MEU CODE ********** XIF SPC 1 * LDB PTYPE CPB P3 IF BG PROG JMP LDI3 THEN GO SET UP BG BOUNDS. * * RT REPLACEMENT OR ADDITION * LDA URFWA SET FWA USER RT DISC RES STA AFWA ORIGIN AS ABS. FWA AND LDA URLWA LWA USER RT DISC RES STA LWA LDA BPA1 SET FWA OF RT LINK AREA STA BPFWA AS REAL BP ADDR. STA BPREL AND BP REL BASE. CMA,INA CALCULATE # OF WORDS ADA BPA2 IN LINK AREA, LDB MSEG IF 'MSEG' FLAG = 0, (P4) SZB,RSS THEN GO TO JMP LDI4 COMPLETE SETUP. JMP LEDT1 ---CONFLICT IN PARAMETERS. * * BG REPLACEMENT OR ADDITION * LDI3 LDA UBFWA SET FWA USER BG DISC RES STA AFWA ORIGIN AS ABS FWA + LDA UBLWA SET UPPER STA LWA B9OUND. LDA BPA3 GET FWA OF BKG BASE PAGE AREA STA BPREL SET BASE PAGE RELOCATION BASE STA BPFWA SAVE IT CMA,INA AND SUBTRACT FROM LWA OF ADA BKGBL LINK AREA. * LDI4 CMA,INA CACULATE AREA SIZE IN UPPER MEMORY STA B SAVE COUNT FOR ZEROING ADA BKLWR SUBTRACT FROM END OF MEM STA FWABP SET BOUNDRY STA CWABP INITIALIZE ALLOCATION WORD STA SEGB AND SEGMENT BASE PAGE STA IDA ADDRESS OF BASE ID SEG (NONE EXIST YET) STA MBUF1 POINTER TO ZAP THE AREA WITH STA TFIX LOW END OF FIXUP TABLE (AGAIN NONE EXIST) LDA BKLWR SET LWA STA LWABP OF AREA CLA CLEAR LDI7 STA MBUF1,I DUMMY ISZ MBUF1 BASE INB,SZB PAGE JMP LDI7 AREA * LDA AFWA SET UP THE BASE LOAD ADDRESSES STA FWA FIRST WORD FOR LOAD ADA P2 ALLOCATE ROOM FOR X,Y REGS STA SEGM SEGMENT BASE STA TPREL HIGHEST USED MEM. ADD. STA PPREL MODULE BASE * LDB OPCOD IF THIS IS A PURGE CPB P4 THEN JMP PURGE GO DO IT SKP * * CALCULATE THE BLOCK NUMBER WHERE THE LIB DIRECTORY STARTS * AND THE POSSIBLE OFFSET IN NUMBER OF ENTRYS TO ACCOUNT FOR * AN ODD STARTING SECTOR. SPC 1 LDA DSCLB GET DISC ADDR OF LIB DIRECT. AND M177 GET SECTOR NUMBER STA BLOK# AND SAVE TEMP XOR DSCLB GET TRACK NUMBER ALF,ALF AND POSITION RAL RIGHT JUSTIFIED MPY SECT2 MULYPLY BY SECTORS/TRACK ADA BLOK# AND ADD INTO SECTOR NUMBER CLE,ERA PRODUCE BLOCK NUMBER STA BLOK# AND SAVE FOR "GTENT" CLA,SEZ NOW SET ENTRY OFFSET NUMBER ADA P16 EQUAL TO 0 OR 16 STA OEFL1 AND SET FOR "GTENT" * LDB EDFLG IF REPLACEMENT, CPB P2 DON'T REQUIRE A< CLA,INA,RSS BLANK ID SEGMENT. CLA BLANK ID REQUIRED CLB INDICATE LONG ID JSB SETID BLANK ID SEGMENT LDA MSEG (A)= MAIN/SEGMENT FLAG LDB P2 ASK 2 TRKS FOR SINGLE PROG LOAD SZA BUT IF DOING MAIN/SEG LOOADING ADB P2 THEN ASK FOR 4 TRACKS STB #TRAK INITIALLY. JSB ITRAK MAKE ALLOCATION. CCB STB NUPLS SET NO. PROGS LOADED = -1 STB PLFLG SET LOADING FLAG = LOADING LDA DBFLG GET DEBUG FLAG SZA,RSS SKIP - DEBUG OPTION SELECTED JMP NODBG OMIT ENTERING DEBUG INTO LST SKP * * ENTER 'DEBUG' INTO LST * JSB LSTX SET CURRENT LST ADDRES NOP LDA CHRDE GET CHARS D,E STA LST1,I SET NAME 1,2 INTO LST LDA CHRBU GET CHARS B,U STA LST2,I SET NAME 3,4 INTO LST LDA UCHRG GET UPPER CHAR G STA LST3,I SET NAME 5 INTO LST LDA P2 SET LST4 = UNDEF SYMBOL & STA LST4,I LDA TLST SET NEW STA PLST END-OF-LIST ADDR. NODBG CLA STA DSECT SET CURRENT SECTOR = 0. LDA TRAKB SET CURRENT TRACK = STA DTRAK TRACK BASE. LDA PAM1 GET THE INPUT PARAM CPA P99 IF LG AREA FOR INPUT JMP LDRN2 THEN READ FROM LG TRACKS. JMP JREAD ELSE READ FROM GIVEN INPUT UNIT. * CHKP1 NOP CHECK OPERATION VALIDITY IF P1 = 1 LDA OPCOD CLB DIV P10 GET OPERAND IN (B) LDA PAM1 RESTORE (A) CPB P3 ID SEG LIST OPTION ? JMP CHKP1,I YES - THEN OK RETURN CPB P4 PURGE OPTION ? JMP CHKP1,I YES - THEN OK RETURN JMP LDI5 SKP * * INITIALIZE CONDITIONS FOR EDITING OPERATIONS * LEDIT LDA P26 PRINT MESSAGE: LDB MESS6 "GO" WITH EDIT PARAMETERS JSB SYOUT ON SYSTEM TTY. CCB JSB EX&EC CALL FOR DEF *+2 PROG SUSPENSION. DEF P7 * * THE "GO" STATEMENT EXPECTED HAS 3 POSSIBLE PARAMETERS: * * GO,LOADR,P1,P2,P3 , WHERE: * * P1 = 1 FOR ADDITION, OR * 2 FOR REPLACEMENT * * P2 = 2 FOR REAL-TIME DISC RESIDENT, OR * 3 FOR BACKGROUND DISC RESIDENT * * P3 = N , WHERE N IS AN OVER-RIDING PRIORITY * DESIGNATION, 0 < N < 9999. IF * P3 IS NOT PRESENT OR = 0, THE * VALUE FROM THE NAM REC OF THE * MAIN PROG IS USED OR 9999 IF THE * NAM VALUE = 0. * * ANY ERRORS DETECTED CAUSE DIAGNOSTIC 'L10' TO * BE PRINTED AND THE MESSAGE REPEATED. * * SSB,RSS IF NO PARAMETERS INPUT, SKIP JMP LEDT2 -GO TO CHECK PARAMETERS. * LEDT1 LDA ERR10 PRINT ERROR DIAGNOSTIC JSB ERROR "L10" JMP LEDIT AND REPEAT. * LEDT2 LDA B,I SET TYPE STA EDFLG OF EDIT FLAG. CPA P1 CHECK RSS FOR CPA P2 = 1 OR 2 RSS -YES, JMP LEDT1 -NO,ERROR. * INB SET FOR PARAM # 2. LDA B,I SET CODE FOR STA PTYPE PROG TYPE. CPA P2 CHECK RSS FOR CPA P3 = 2 OR RSS 3. JMP LEDT1 -NO, ERROR. * INB GET LDA B,I P3 PARAMETER. LDB P9999 INITIALIZE PRIORITY SZA,RSS IF 0, JMP LEDT3 ASSUME 9999 CMB SET B = -10000 ADB A SUBTRACT 10000 FROM SSB,RSS P3. IF POSITIVE RESULT, THEN JMP LEDT1 ERROR, P3 >= 10000 STA PPRI SET NEW PRIORITY. JMP LEDT3 * * SKP * * SYSTEM PROGRAM LISTING OPTION * * THE SELECTION OF THIS OPTION GIVES A LISTING * (ON THE LIST UNIT) OF THE PRIMARY CONTENTS OF * EACH ID SEGMENT IN THE SYSTEM. * THE LISTING IS PRECEDED BY THE HEADING: * "5 SYSTEM PROGRAM LIST: NAME, TYPE, PRIORITY" * * EACH LINE OF OUTPUT FOR A DEFINED ID SEGMENT IS: * " PNAME T PR" , T IS TYPE AND PR IS PRIORITY. * * A BLANK ID SEGMENT (AVAILABLE FOR USE) IS * NOTED BY THE LINE OUTPUT: * "" OR "" * * LLIST JSB SPACE LDB LLM1 PRINT SPC 1 IFN ******* BEGIN NON-MEU CODE **** LDA P42 HEADING ******* END NON-MEU CODE ****** XIF SPC 1 SPC 1 IFZ ******* BEGIN MEU CODE ******** LDA P54 ******* END MEU CODE ********** XIF SPC 1 JSB DRKEY JSB SPACE JSB SPACE * LDA KEYWD SAVE STARTING STA ABT1 KEYWORD ADDR. * LL1 LDB ABT1,I GET ID SEGMENT ADDR. SZB,RSS IF END-OF-LIST, GO TO SINGLE JMP EXIT TERMINATION * ADB P12 SET TO NAME AREA. LDA B,I GET NAME 1,2, STA LLM2+2 SET IN MESSAGE. SZA,RSS IF NAME WORD = 0, THEN JMP LL3 BLANK ID SEGMENT. INB LDA B,I SET NAME 3,4 STA LLM2+3 IN MESSAGE. INB LDA B,I GET NAME 5, AND M7400 ISOLATE, IOR BLANK ADD BLANK STA LLM2+4 AND STORE. * LDA B,I GET TYPE AND M7 CODE. STA B SAVE PROG TYPE IOR M60 MAKE ASCII, IOR UBLNK ADD UPPER BLANK, STA LLM2+5 AND STORE. LDA P12 OUTPUT LEGTH=12 CHAR FOR SEG CPB P5 IF PROG TYPE IS SEG JMP T5SEG THEN FORGET PRIORITY. * LDB ABT1,I GET ADB P6 "PRIORITY" LDA B,I WORD. LDB LLM2 GET BUFFER ADDR ADB P6 FOR CONVERSION ROUTINE JSB CONVD CONVERT TO DECIMAL SPC 1 IFZ ******* BEGIN MEU CODE ******** LDB ABT1,I GET ID SEG ADDR ADB P21 OF WORD 22 LDA B,I SSA,RSS ANY PTTN RESERVED? JMP LL4 NO AND M77 YES, GET PTTN# INA ADD 1 FOR REAL PTTN# JSB CNV99 CONVERT TO DECIMAL STA LLM2+10 ASCII AND SET LDA P20 FOR PRINTING RSS ******* END MEU CODE ********** XIF SPC 1 LL4 LDA P18 PRINT NAME T5SEG LDB LLM2 LINE JSB DRKEY * LL2 ISZ ABT1 GET NEXT KEYWORD ADDR. JMP LL1 -REPEAT SCAN. * * OUTPUT BLANK ID MESSAGE * LL3 ADB P2 (B)=ADDR OF NAM5 WORD LDA B,I GET NAM5 WORD AND M20 MASK IN 'SS' BIT LDB LLM3 (B)=ADDR OF LONG ID MESSAGE SZA 'SS' BIT SET ? LDB LLM4 YES-(B)=ADDR OF SHORT ID MESSAGE LDA P18 (A)=MESSAGE LENGTH JSB DRKEY JMP LL2 * PURGE CLA,INA GO SET CLB JSB SETID ID ADDRS FOR LONG ID LDA A? SET ASC ? IN STA LLM2+5 MESSAGE LDA PAM1 GET INPUT PARAMETER P1 SZA INPUT SPECIFIED ? JMP USEIM YES - GO USE IT. LDB BATCH GET BATCH FLAG INA SET FOR LU1 SZB RUNNING UNDER BATCH ? LDA P5 YES-THEN DEFAULT INPUT TO LU 5 SZB,RSS RUNNING UNDER BATCH? USEIM STA LIST1 NO, SET PROMPT LU IOR M400 SET UP ECHO BITS STA INDLU SET UP INPUT LU. TRYAG LDA P10 SEND THE MESSAGE LDB LLM2 LOADR: PNAME ? JSB SYOUT TO THE OUTPUT DEVICE JSB EXEC READ THE REPLY DEF *+5 TO THE DEF P1 DEF INDLU DEF NAM12,I NAME AREA IN THE ID SEGMENT DEF P3 THREE WORDS ADB NAM12 ADD THE BUFFER ADDR TO THE TLOG LDA LLM2+1 GET A DOUBLE BLANK STA B,I BLANK UN SENT NAME CHARACTERS INB STA B,I LDA NAM12,I CHECK FOR /A (ABORT OPERATION) CPA /A JMP ABORT YES GO ABORT JSB MIDN GO SEE IF THE NAME IS DEFINED JMP NOPGM NO GO SEND MESSAGE JMP ED0 GO PURGE THE PROG SPC 1 NOPGM LDA ERR10 INPUT ERROR JSB ERROR JMP TRYAG TRY AGAIN * * * A? ASC 1,?_ ASC "?_" SPC 2 LLM1 DEF *+1 ASC 17, SYSTEM PROG LIST: NAME, TYPE, ASC 4,PRIORITY SPC 1 IFZ ******* BEGIN MEU CODE ******** ASC 6,, PARTITION PART OF LLM1 P54 DEC 54 ******* END MEU CODE ********** XIF SPC 1 /A ASC 1,/A * LLM4 DEF *+1 ASC 9, LLM3 DEF *+1 ASC 9, LLM2 DEF *+1 ASC 10, PNAME T PRIO PT * * * * ****************************** SPC 1 IFZ ******* BEGIN MEU CODE ******** OVLYC BSS .BUF-* OVERLAYABLE CODE LEFT ******* END MEU CODE ********** XIF SPC 1 SPC 1 IFN ******* BEGIN NON-MEU CODE **** BSS .BUF-* IF NOT ENOUGH, UP IT ******* END NON-MEU CODE ****** XIF SPC 1 NOVLY EQU * BEGIN NON-OVERLAYABE CODE * ****************************** * .LBUF EQU *-LBUF-128 OVERLAY CHECK .DBUF EQU *-DBUF-128 OVERLAY CHECK .XBUF EQU *-XBUF-128 OVERLAY CHECK SKP MESS1 DEF *+1 ASC 4,LOAD LIB * * PRINT 'LOAD', SUSPEND LOADER * TREAD LDA P4 TRED1 LDB MESS1 MESS1 = ADDR: LOAD JSB SYOUT PRINT: LOAD SUSP CCB JSB EXEC REQUEST PROG SUSPENSION DEF *+2 DEF P7 7 = OPERATOR-SUSPEND CODE * * * AT THIS POINT THE LOADER IS READY TO LOAD FROM EITHER * THE PROGRAM INPUT UNIT, THE LOAD-AND-GO AREA, * OR THE PROGRAM LIBRARY. THE INDICATION IS * MADE BY THE FIRST PARAMETER IN THE "GO" STATEMENT: * * "GO,LOADR,P1,P2,[P3]", WHERE * * P1 = N , N IS A CODE DESIGNATING THE NEXT * OPERATION: * * 0 - LOAD FROM BINARY INPUT UNIT * 1 - LOAD REFERENCED LIB PROGS * ( 2 - LOAD FROM LOAD-AND-GO AREA (LG NOT RESET) * 3 - LIBRARY LOAD FOR THE LAST SEGMENT * IN A MAIN SEGMENT LOAD. * 4 - IGNORE UNDEFINED EXTERNALS * 98 - LIST UNDEFINED EXTERNALS * 99 - USE LOAD-&-GO FOR INPUT FROM START * (LG AREA HAS BEEN RESET AND WAS * NOT PREVIOUSLY USED FOR INPUT). * X - IF NOT ANY OF ABOVE THEN 'X' IS * THE NEW PROG INPUT UNIT. * * P2 = 1 OMIT LIST OF ENTRY POINTS AT END OF LOADING * * P3 = 1 SCAN SPRCIFIED INPUT FOR LIB * * CARDINAL RULES FOR USING LG TRACKS * ---------------------------------- * * 1. IF LG TRACKS HAVE ONCE BEEN USED FOR FORCE LOADING, * THEY MUST NOT BE RESET WITH THE SYSTEM 'LG,X' COMMAND. * * 2. P1 = 99 MUST BE USED IF LG TRACKS HAVE BEEN RESET * WITH THE SYSTEM 'LG,X' COMMAND AND P1 = 2 MUST BE * USED IF LG TRACKS HAVE NOT BEEN RESET. * * REMEMBER THAT ANYTHING GIVEN TO THE LOADER DURING THE * 'ON' COMMAND IS AUTOMATICALLY FORCE LOADED. P3 IN THE * ABOVE GO COMMAND DEFAULTS TO 0 (FORCE LOAD) IF NOT * SPECIFIED. SKP * * * NOTE: P1=2 SHOULD BE USED IF ADDITIONAL INPUT HAS * TO BE APPENDED TO THE LG AREA. IN OTHER WORDS * P1=99 HAS BEEN USED PREVIOUSLY (EITHER IN THE * ON REQUEST IF ORIGNAL INPUT WAS FROM LG, OR * IN THE GO REQUEST IF ORIGNAL INPUT WAS NOT * FROM THE LG AREA). * IN A MAIN/SEG LOAD AFTER THE LAST SEG HAS BEEN * FORCE LOADED IN (EITHER AUTOMATICALLY WITH * LG OPERATION OR UNDER DIRECTION OF THE OPERATOR * HAVING TOLD THE LOADER TO SCAN LIB FOR THE * LAST SEGMENT - GO WITH P1=3), NO MORE FORCE * LOADING CAN BE DONE EITHER FROM THE LG AREA * OR FROM PROGRAM INPUT DEVICE. * IF UNDEFINED EXTERNALS REMAIN IN THE MAIN * OF A SEGMENTED PROG (WHICH THE LOADER * DISCOVERS AFTER LOADING THE LAST SEGMENT) * ,AND PRINTS "MAIN - UNDEFINED EXTS", THEY * CAN NOT BE SATISFIED AND THE ONLY RESPONSE * THAT CAN BE ENTERTAINED AT THAT TIME IS * 'GO' WITH P1=98 OR 4. SINCE THE LOADER SCANS THE * LG TRACKS FOR A MAIN SEGMENT LOAD, ONLY ONE COPY * OF A SUBROUTINE USED BY SEVERAL SEGMENTS NEED BE * PRESENT. AS LONG AS THE MAIN IS READ IN FIRST, THE * ORDER OF SEGMENTS AND THEIR SUBROUTINES IS ALSO * NOT IMPORTANT (SO LONG YOU DON'T CARE ABOUT UNWANTED * SUBROUTINES BEING ATTACHED TO THE SEGMENTS). RECALL * THAT EVERYTHING GIVEN DURING THE 'ON' REQUEST GETS * FORCE LOADED THUS IF UNWANTED SUBROUTINES EXIST * BETWEEN CONSQUETIVE SEGMENTS AND BETWEEN THE LAST * SEGMENT AND THE END OF LG AREA , THEY GET FORCE LOADED * WITH THE PREVIOUS SEGMENT. IF ADDITIONAL LIB IS * APPENDED THEN, HOWEVER, THAT DOES NOT GET FORCE LOADED. * * * P3 IS APPLICABLE ONLY IF P1 IS NOT 1, 3, 4 OR 98. * * IF LIBRARY IS READ FROM OTHER THAN THE LG TRACKS, IT * SHOULD BE REPEATEDLY INPUT TILL THE LOADER PRINTS 'LOAD' * INSTEAD OF 'LIB LOAD'. * * IF LOADING FROM THE PROG INPUT UNIT, THE DEVICE * SHOULD BE MADE READY BEFORE THE 'GO' STATEMENT IS * ENTERED ON THE SYSTEM TELETYPE TO INITIATE LOADING * SKP * NEWIN CLA STA LIBFL CLEAR LIB SCAN FLAG SSB SKIP - SOME PARAMETERS ENTERED JMP KREAD LOAD FROM PROG INPUT UNIT LDA B,I GET "P1". CPA P1 IF = 1 JMP LOADL OR CPA P3 = 3, JMP LOADL GO TO LOAD FROM LIB. CPA P4 IF = 4 JMP FIXCL THEN IGNORE UNDEFINED EXTS CPA P98 IF = 98 JMP LSTEX THEN LIST UNDEFINED EXTERNALS STA LLM2 SAVE P1 TEMPORARILY INB LDA B,I GET P2 (LIST,NO LIST) SZA SKIP IF NOT SET STA ENFLG SET NO LIST FLAG INB LDA B,I GET P3 (LIB LOOK PARAM) SZA,UHFBRSS P3 = ZERO ? JMP GETP1 YES,THEN FORGET IT. CCA STA LIBFL YES, SET LIB FLAG. STA NUPLS # OF LIB PROG LOADED=-1 STA PLFLG 'LOOKING FOR NAM FIRST' GETP1 LDA LLM2 GET P1 BACK CPA P2 USE LG FOR INPUT ? JMP PRC2 YES (FROM LG WITHOUT RESETTING). CPA P99 FROM LG AREA FROM START ? JMP PRC99 YES (LG SHOULD HAVE BEEN RESET). JREAD SZA,RSS IF P1=0, JMP KREAD LOAD FROM INPUT IOR M300 SET THE BINARY AND V BITS STA PGMIN SET NEW INPUT LU IOR M400 SET EOT CONTROL WORD STA SEOT * KREAD JSB EXEC SET EOT ON INPUT UNIT DEF *+3 DEF P3 DEF SEOT * CLA SET FLAG FOR 'LG NOT BEING USED' STA LGOU * IREAD LDA PLIST GET LIST/NO LIST FLAG SLA,RSS SKIP - OMIT LISTING JSB SPACE NEW LINE ON LIST OUTPUT DEVICE * LDRIN LDA LGOU GET 'LG USE' FLAG SZA LG BEING USED FOR INPUT ? JMP LDRN2 YES, READ FROM LG AREA. SKP * * LOAD FROM INPUT LU * JSB EXEC DEF *+5 DEF P1 1 = READ REQUEST DEF PGMIN PROG INPUT UNIT NO. DEF LBUF LBUF = INPUT BUFFER DEF P128 BUFFER LENGTH = 64 WORDS * AND M240 EOF OR EOT? SZA NO JMP REDL? YES, CHECK IF LIB READ. SZB SKIP - NO WORDS TRANSMITTED JMP TESTR TEST REC TYPE PQHREDL? LDA LIBFL GET LIB SCAN FLAG SZA,RSS IF NOT READING LIB JMP TREAD THEN PRINT "LOAD". ISZ NUPLS ELSE ANYTHING READ IN LAST SCAN ? RSS YES - NEED TO READ LIB AGAIN. JMP TREAD NO - THEN READY FOR PROG INPUT. LDA P8 GO PRINT "LOAD LIB" JMP TRED1 * M240 OCT 240 * FIXCL LDA MSEG FOURCE LOAD WITH SZA,RSS UNDEFINED EXTS MUST CLEAN JMP NODEX UP THE FIXUP TBL. IF SEGMENT * JSB SILST SET TO SCAN THE SEGMENTS LDB TLST LST FIXC0 CPB PLST END? JMP NODEX YES GO FINISH * STB LST1 SET LST1 FOR FIXAL ADB P3 TO GET THE LDA B,I DEFINED FLAG AND P7 ISOLATE IT CPA P2 UNDEFINED? JMP FIXC1 YES GO DEFINE IT * FIXC2 ADB P2 NO INDEX TO THE NEXT ONE JMP FIXC0 AND GO LOOK AT IT * FIXC1 LDA M2000 SET TYPE TO 4 (IN HIGH BYTE) STA B,I DEFINE THE SYMBOL INB SET ITS VALUE CLA STA B,I TO ZERO JSB FIXAL GO DO ALL FIXUPS LDB LST4 RESTOR B JMP FIXC2 AND CONTINUE THE LOOP * SKP * * PROCESS FOR P1=2. ADDITIONAL INPUT APPENDED TO LG. * LG TRKS SHOULD NOT HAVE BEEN RESET & MUST HAVE BEEN * USED FOR INPUT PREVIOUSLY BY P1=99 EITHER IN THE * 'ON' REQUEST OR 'GO' REQUEST. ADDITIONAL INPUT * CAN BE EITHER FOR LIB SCAN OR FOR FORCE * LOADING (WITH THE CONSTRAINT REGARDING UNDEFINED * SYMBOLS DISCOVERED IN THE LAST SEGMENT OF A * MAIN/SEG LOAD , IN WHICH CASE ADDITION TO LG MAY * ONLY BE FOR LIBRARY SCAN AND P3 MUST BE SPECIFIED AS 1). * LIMST LDA MSEGF GET FLAG FOR 'LAST SEG LOADED' CPA P3 LOADED LAST SEGMENT ? SZB YES - THEN IS LIB SCAN WANTED ? JMP GOON YES - THEN WE CAN HACK IT. JMP LD13 NO - BOMB HIM (COULD HAVE SEGS THERE) * PRC2 LDA LGO SZA,RSS LG PREVIOUSLY BEEN USED ? JMP LD12 NO - ERROR L12. LDB LIBFL GET LIB FLAG SSA,RSS USED PREVIOUSLY FOR FORCE LOAD ? JMP LIMST YES - CHECK IF LIB SCAN WANTED. GOON SZB NO - THEN WANT LIB SCAN AGAIN ? JMP LIBAG YES (LET LGO BE -1) LDA P99 NO - THIS IS PROG ADDITION. STA LGO SET LGO=99 (AS IF LG FROM START). LIBAG STB DREAD SAVE REG-B TEMPORARILY CLB,INB STB LGOBF SET FLAG THAT WE WERE HERE LDB LGOEF GET PREVIOUS FLAG STB LGTMP AND SET FOR CURRENT INPUT. JSB LGRES RESTORE LG - EXCEPT TRK & SEC! LDA LGOCL GET LAST ADDR OF END OF LG FOR LIB ALF,ALF GET STARTING TRACK ADDR TO RAL WHERE CURRENT APPEND TO LG AND M377 BEGINS AND SET UP. STA LGTRK LDA LGOCL ALSO GET STARTING SECT ADDR - BUT ERA,CLE,ELA BACK UP ONE SECT IF START IS AND M177 ON ODD SECT BOUNDARY. LGTMP WILL STA LGSEC TAKE CARE OF STARTING CORE ADDR. LDA LGOC UPDATE LDB DREAD RESTORE REG-B SZB,RSS SKIP IF ONLY LIB STA LGOCP END OF LG ADDR FOR PROG INPUT STA LGOCL END OF LG AREA FOR LIB SCAN. RDLGO LDA P2 STA LGOU SET FLAG FOR LG IN USE LDA XBUFA FORCE NEW SECTOR READ STA XCUR CLA STA XCNT LDA LGOC CLB SET FLAG TO INDICATE WHETHER SLA LAST LGOC ENDED ON ODD OR CCB EVEN SECTOR BOUNDRY. STB LGOEF JMP IREAD READ FROM LG AREA * SKP * * PROCESS P1=99 ON 'GO'. LG HAS BEEN RESET - IT * SHOULD NOT HAVE BEEN USED BEFORE FOR FORCE LOADING. * (THE FLAG WORD LGO USED FOR THIS PURPOSE SHOULD BE * ZERO OR -1. IF -1 THEN THE PREVIOUSLY PUT * LIBRARY ON LG HAS BEEN OVERWRITTEN AND USER * IS EXPECTED TO BE AWARE OF THIS). * PRC99 LDA LGO CPA P99  LG ALREADY USED FOR FORCE LOAD ? JMP LD13 YES - THEN ERROR L13. JSB LGSET NO, THEN SET UP START OF LG ADDR. LDA LGOC SET STA LGOCP END OF LG FOR FORCE LOAD STA LGOCL END OF LG FOR LIB SCAN. LDA LIBFL GET LIB FLAG ( P3 IN 'GO') LDB P99 LGO = 99 FOR FORCE LOAD SZA SKIP IF PROG LOAD CCB LGO = -1 FOR LIB SCAN STB LGO SET PROPER LGO CLB STB LGOBF CLEAR ODD/EVEN FLAGS STB LGTMP JMP RDLGO * SKP * * * INPUT FROM DISC LOAD-AND-GO AREA * LDRN2 LDB XCUR IF CURRENT ADDR. OF XBUF = CPB XBUFA FWA OF XBUF, JMP LDRN3 READ NEXT SECTOR CPB XBHLF =HALF THE ADDR OF XBUF ? RSS YES - LOOK IF END OF LG JMP LDRN4 NO - THEN BUFFER ALREADY IN CORE LDB SLIBF IF READING FROM SYS LIB SZB (WILL NEVER BE HERE FOR NAM) JMP LDRN4 THEN STUFF ALREADY IN CORE CCB ELSE CHECK FOR END OF LG ADB LGSEC LDA LGTRK ALF,ALF RAR IOR B LDB LIBFL STA BID2 SAVE ADDR LDA LGOCP END LG ADDR FOR FORCE LOAD SZB IF SCANNING LG AS LIB LDA LGOCL THEN END LG ADDR FOR LIB SCAN ELA,CLE,ERA REMOVE LU BIT CPA BID2 REACHED THE END ? RSS YES JMP LDRN4 NO - THEN STUFF ALREADY IN BUFFER LDB LGSEC SET UP LG ADDRS FOR POSSIBLE LGSAV CPB LGS# CLA,RSS JMP *+3 NO TRK BOUNDRY SO SKIP STA LGSEC ISZ LGTRK LDB LIBFL GO TO LDRN9 WITH LIB FLG IN B JMP LDRN9 DETERMINE NEXT MOVE * LDRN3 LDB LGSEC CHECK CURRENT SECTOR #. CPB LGS# IF CURRENT = LAST SECTOR, CLB,RSS SKIP JMP LDRN8 GO TO INPUT SECTOR. STB LGSEC RESET SECTOR # TO ZERO ISZ LGTRK  ADD 1 TO TRACK # * * CONTINUE IF READING LIB. * IF END OF LOAD-AND-GO AREA, GO TO PRINT * 'LOAD' OR TO LOAD LIB. * LDRN8 LDA SLIBF (B) = CURRENT SECTOR # SZA READING SYSTEM LIB? JMP LDRN6 YES, CONTINUE. LDA LGTRK NO, TEST FOR END OF LG ALF,ALF RAR TRACK # IN 14-07 IOR B SECTR # IN 06-00. STA BID2 SAVE CURR LG ADDR TEMPORARILY LDA LGOCP (A)= END OF LG ADDR FOR PROG INPUT LDB LIBFL GET LIB SCAN FLAG SZB IF SCANNING LG AS LIB LDA LGOCL THEN (A)=END OF LG ADDR FOR LIB SCAN ELA,CLE,ERA REMOVE LU BIT CPA BID2 REACHED END OF LG AREA ? RSS YES - SKIP JMP LDRN6 NO - THEN CONTINUE LG READ LDRN9 SZB IF SCANNING LG AS LIB JMP LBSCN THEN FIND OUT NEXT MOVE. JSB LGSAV ELSE SAVE END OF LG ADDR LDB MSEG GET MAIN SEGMENT FLAG SZB,RSS IF SINGLE PROG JMP RETRN THEN USER TRACKS NOT TO BE SCANNED. LDB P3 SET FLAG FOR LAST SEGMENT STB MSEGF LIB?? CCA SET FLAG TO COME BACK TO STA SCLG LG ONCE IF UNDEF AFTER DISC LIB SCAN. DLIB LDA PLIST GET LIST/NO LIST FLAG ARS JMP LOADM LOAD FROM DISC LIB IF NEED BE LIB? JSB LSTX1 ANY UNDEFINED IN LST ? JMP DLIB NO - GO FOR DISC LIB FOR NEXT MOVE JMP LBSEG YES - SCAN LG AS LIB * * LBSCN ISZ NUPLS ANYTHING LOADED IN LAST SCAN ? JSB LSTX1 ANY UNDEFINED SYMBOLS ? JMP RETRN NO, THEN FIND OUT NEXT MOVE. LBSEG CCA YES - SCAN LG AS LIB STA PLFLG SET FLAG FOR "NAM SHOULD BE FIRST" STA NUPLS "ANYTHING LOADED OR NOT" STA LIBFL "DOING LIB SCAN" JSB LGRST RESET LG READ FROM START JMP LDRIN READ FROM LG AREA * RETRN LDA LGO CPA P99 IF LG FROM START JMP DLIB THEN READ FROM DISC LIB. JSB LGSAV ELSE LGO IS -1 AND SAVE ADDRES JMP TREAD GO PRINT "LOAD". * ERR05 ASC 1,05 ERR10 ASC 1,10 ERR12 ASC 1,12 ERR13 ASC 1,13 P13 DEC 13 SCLG NOP PLFLG NOP LDI5 LDA ERR10 RSS LD12 LDA ERR12 RSS LD13 LDA ERR13 JMP ABOR SKP * * SYMBOL TABLE OVERFLOW * LOVER EQU * JSB CPRNM PRINT MODULE NAME(IF PRSENT) LDA ERR05 SET CODE EQUAL LST OVERFLOW ABOR JSB ERROR ABORT CLA CLEAR PROG NAME STA PRAM IN NAME PASSED BACK STA PRAM+1 THRU PRTN ROUTINE STA PRAM+2 LDA P13 LDB MES10 MES10 = ADDR "LOADR ABORTED" JMP LTERM TERMINATE LOADER(AND THIS PROGMER) * * READ NEXT SECTOR FROM LG AREA OR SYS LIB * LDRN6 JSB EXEC DEF *+7 DEF P1 DEF LGLUN DEF XBUF DEF P128 READ 2 LOGICAL SECTORS (1 PHYSICAL 7900) DEF LGTRK DEF LGSEC * ISZ LGSEC -ADD 2 FOR NEXT SECTOR. ISZ LGSEC LDA XBUFA SET STARTING BUFFER STA XCUR ADDR LDA N128 AND STA LGT1 COUNTER = -128. * LDA LGOBF ARE WE TRYING FOR A SZA,RSS GO REQUEST TO L&G JMP LDR3 CLA CLEAR THE FLAG STA LGOBF LDA LGTMP WAS THE PREVIOUS PNTR SZA,RSS SET IN AN ODD SECTOR JMP LDRN4 -NO- CLA RESET THE FLAG STA LGTMP JMP LDR2 LDR3 LDA SLIBF ARE WE SCANNING THE LIBARY SZA NO JMP LDR1 YES LDA LIBFL GET LG LIB SCAN FLAG SZA SCANNING LG AS LIB ? JMP LDRN4 YES - SO AVOID HALF SEC CRAP LDB SEOFG IS THE MAIN/SEG ODD/EVEN SSB,RSS FLAG SET?? JMP LDRN4 -NO- CLA YES STA SEOFG CLEAR THE FLAG JMP LDR2 GO RESET BUFFERS LDR1 LDB LBOEF IS THE LIB ODD/EVEN SSB,RSS FLAG SET??? JMP LDRN4 a -NO- CLA CLEAR THE STA LBOEF FLAG LDR2 LDA N64 RESET COUNT FOR HALF SECTOR ONLY STA LGT1 CLA STA XCNT SET REC COUNT TO ZERO LDA XBHLF SET THE BUF ADDR STA XCUR TO THE ODD SECTOR * LDRN4 CLA IF CURRENT CPA XCNT REC COUNT = 0, RSS THEN SET FOR NEW REC. JMP LDRN5 CONTINUE WITH CURRENT REC. LDA XCUR,I GET NEXT ALF,ALF REC LENGTH (UPPER CHAR.), AND M77 SET NEGATIVE CMA,INA,SZA,RSS ZERO LENGTH? JMP LDRNE YES, READ NEXT SECTOR STA XCNT NO, SAVE COUNT FOR MOVE LDA ALBUF RESET ADDR OF STA LGT2 LBUF FOR MOVE. * LDRN5 LDA XCUR,I MOVE WORD FORM XBUF STA LGT2,I TO LBUF ISZ XCUR UPDATE BUFFER ISZ LGT2 ADDRES. ISZ XCNT INDEX NOP ISZ LGT1 COUNTERS. NOP CLA LDB XBUFA RESET ADDR OF CPA LGT1 'XBUF' IF STB XCUR END OF XBUF. CPA XCNT IF END OF REC, JMP TESTR GO TO PROCESS IT. CPA LGT1 IF END OF XBUF, JMP LDRN3 GO TO READ NEXT SECTOR. JMP LDRN5 CONTINUE WITH CURRENT REC. * LDRNE LDA XBUFA WAS ZERO LENGTH REC AT CPA XCUR START OF A SECTOR? RSS JMP LDRN3 NO, READ NEW SECTOR. CCB YES, SUBTRACT 1 FROM CURR SECTOR ADB LGSEC IN CASE END OF LG ON ODD SECTOR JMP LDRN8 CHECK FOR END OF LG * SKP * * SUBROUTINES TO SAVE AND RESTORE DISC READ PARAMETERS. * * "LGSET" - SET ADDRESSES FOR START OF LG AREA AND ALSO SAVE THEM * LGSET NOP LDA LGOTK GET LGO CONTROL WORD LDB P2 SSA SET LU = 2 OR 3 (SIGN BIT SET) INB STB LGLUN STB ILGLU ALSO SAVE IT ALF,ALF RAL ISOLATE STARTING AND M377 TRA)CK ADDR STA LGTRK AND SET. STA ILGTR ALSO SAVE TRACK ADDR LDA SECT3 SET LGS# = NUMBER OF CPB P2 SECTORS PER TRACK LDA SECT2 FOR APPROPRIATE DISC. STA LGS# STA ILGS# ALSO SAVE IT JSB LGSAV SAVE ALSO AS DYNAMIC ADDRES. JSB LGRST ALSO RESET TO START JMP LGSET,I - RETURN - * * * "LGSAV" - SAVE CURRENT LG ADDRES * LGSAV NOP LDA LGTRK SAVE STA SVLGT TRACK ADDR LDA LGSEC STA SVLGS SECTOR ADDR LDA XCUR STA SVCUR BUFFER ADDR JMP LGSAV,I - RETURN - * LGLUN NOP LU LGTRK NOP TRACK LGSEC NOP SECTOR LGS# NOP # SECS / TRK LGT1 NOP DOWN COUNTER IN XBUF LGT2 NOP CURRENT LBUF ADDR XCNT NOP REC LENGTH RIC NOP REC INDICATOR L6 OCT -6 XBHLF DEF XBUF+64 ADDR OF END OF XBUF XBUFA DEF XBUF DEFINE ADDR OF XBUF XCUR DEF XBUF * SKP * "LGRES" - RESTORE LG ADDRES * LGRES NOP LDA ILGLU RESTORE STA LGLUN LU LDA ILGS# STA LGS# # OF SECS / TRK LDA SVLGT STA LGTRK TRACK ADDR LDA SVLGS STA LGSEC SECTOR ADDR LDA SVCUR STA XCUR BUFFER ADDR CLA STA XCNT REC COUNT JMP LGRES,I - RETURN - * * * "LGRST" - RESET TO BEGINNING OF LG AREA * LGRST NOP LDA ILGLU RESET STA LGLUN LU LDA ILGTR STA LGTRK TRACK ADDR LDA ILGS# STA LGS# # OF SECS / TRK LDA XBUFA STA XCUR BUFFER ADDR CLA STA LGSEC SEC ADDR STA XCNT REC COUNT JMP LGRST,I - RETURN - * * STORAGE FOR LG READ PARAMETERS * ILGLU NOP ILGTR NOP ILGS# NOP LGOCP NOP LGOCL NOP LGOU NOP SVCUR NOP SVLGT NOP SVLGS NOP *  SKP * TEST FOR VALID REC * TESTR LDA LBUF+1 GET REC IDENTIFIER ALF,RAR AND M7 ISOLATE RIC STA RIC SAVE REC ID CODE SZA SKIP - ABSOLUTE REC ADA L6 SUBTRACT 6B SSA,RSS SKIP - VALID REC TYPE JMP RCERR INVALID REC TYPE * TEST FOR VALID CHECKSUM LDA LBUF GET REC LENGTH AND M7400 AND ZERO LOWER CHARACTER, STA B BLF,BLF ROTATE TO LOW B CMB,INB COMPLEMENT ADB P3 ADJUST FOR ADDR OF WORD 4 SSB,RSS SKIP - VALID REC LENGTH JMP RCERR INVALID (SHORT) REC STB WDCNT SET WORD COUNT FOR CHECKSUM LDA LBUF+1 GET WORD 2 - INITIALIZE CHECKSUM LDB ALBUF GET ADDR OF LBUF ADB P3 ADJUST ADDR FOR WORD 3 TEST1 ADA B,I ADD WORD TO CHECKSUM INB INCR CURRENT LBUF ADDR ISZ WDCNT SKIP - END OF REC JMP TEST1 CONTINUE CHECKSUM TEST CPA LBUF+2 EQUAL TO GIVEN CHECKSUM? JMP LDRC YES - PROCESS REC * * CHECKSUM ERROR. PRINT MODULE NAME * (MODULE NAME WILL BE IN MBUF IF A NAM REC * HAS ALREADY BEEN READ. OTHERWISE, IT WILL NOT * BE PRINTED SINCE IT MAY BE GARBAGED IN THE * THE NAM RECORD ITSELF. * JSB CPRNM PRINT NAME IF ANY LDA ERR01 CODE 01 = CHECKSUM ERROR LSUSP JSB ERROR PRINT DIAGNOSTIC ON SYSTEM TTY JMP SUSP GO SUSPEND AND WAIT FOR HELP * ERR01 ASC 1,01 ERR02 ASC 1,02 * * * ILLEGAL RECORD TYPE * RCERR EQU * JSB CPRNM PRINT MODULE NAME,IF GOOD LDA ERR02 CODE 02 = ILLEGAL REC JMP LSUSP * * PRINT NAME OF MODULE(OR ENTRY POINT) * * CALLING SEQUENCE: * JSB PRNAM * DEF TO NAME TO BE PRINTED * * PRNAM NOP PRINT 5 CHARACTERS LDA P5 LDB PRNAM,I GET NAME ADDR ISZ PR-TNAM BUMP FOR RETURN JSB SYOUT PRINT MESSAGE JMP PRNAM,I RETURN * * CHECK IF GOOD REC HAS BEEN READ BEFORE * PRINT NAME. * CPRNM NOP LDA MBUF GET "VALID NAME" FLAG SZA,RSS NAME READ? JMP CPRNM,I NO, EXIT JSB PRNAM PRINT NAME DEF MBUF JMP CPRNM,I EXIT * * CLASSIFY RECS BY TYPE LDRC LDA RIC GET REC IDENTIFICATION CODE LDB PLFLG GET LOADING FLAG CPA P1 TYPE = NAM ? JMP NAMR YES - PROCESS NAM REC SZB SKIP - NOT LOADING JMP NMERR REC OUT OF SEQUENCE CPA P2 TYPE = ENT? JMP ENTR YES - PROCESS ENT REC CPA P3 TYPE = DBL? JMP DBLR YES - PROCESS REC CPA P4 TYPE = EXT? JMP EXTR YES - PROCESS EXT REC * * PROCESS END REC * LDA IGNOR SZA,RSS LATEST SUBROUTINE LOADED ? JMP RESET YES, PROCESS AS NORMAL. * LDA BID3 NO, THEN RESTORE CURRENT STA CWABP FW AVAILABLE ON BASE PAGE. LDA BID4 AND END OF LST. STA PLST JMP NOCLR SKIP CLEARING OF BIT15 IN LST1 * * TEST FOR OVERFLOW OF COMMON * RESET LDA MCOMX GET COMMON LENGTH OF LAST MODULE CMA,INA SUBTRACT FROM INITIAL SET LENGTH ADA MXCOM SSA,RSS IF SAME OR LESS JMP NOCLR THEN OK * * COMMON ALLOCATION ERROR * CMERR JSB CPRNM PRINT MODULE NAME LDA ERR06 ELSE ERROR 06 - COMMON BLOCK JMP ABOR ERROR. ERR06 ASC 1,06 MCOMX NOP LEN OF LAST MODULE SCANNED/LOADED * NOCLR LDA XBUFA RESET ADDR OF CPA XCUR IF ALREADY SET JMP NOUSE THEN NO USE CHECKING FURTHER LDB XBHLF GET THE ODD SEC BOUNDARY CMB,INB ADB XCUR IS CURRENT IN EVEN OR ODD SZB IF ZERO THEN I]XN LOWER HALF SSB LDA XBHLF SET FOR ODD SECTOR STA XCUR LGO BUFFER ON END REC. LDB N128 SET DOWN COUNTER TO PROPER VALUE CPA XBHLF LDB N64 STB LGT1 NOUSE CLA SET REC INDEX STA XCNT = 0 TO GET SECTOR. LDA ALBUF GET ADDR OF LBUF ADA P3 ADJUST FOR WORD 3 OF END REC STA CURAL SET CURRENT LBUF ADDR LDA LBUF+1 GET PRIMARY ENTRY POINT FLAG SLA,RSS SKIP - HAS PRIMARY ENTRY POINT JMP NOPRE OMIT PROCESSING NO ENTRY POINT SKP * * * PRINT MEMORY MAP ENDKY LDA PRENT,I GET PRIMARY ENTRY POINT. SZA SKIP - PRENT NOT SET JMP ENDK1 TEST FOR DEBUG LOADED LDA LBUF+3 GET WORD 3 OF END REC ADA PPREL ADD PROG RELOC BASE STA PRENT,I SET IN ID SEGMENT LDA MBUF GET PROG NAME 1,2 STA NAM12,I SET IN ID SEGMENT LDA MBUF+1 GET PROG NAME 3,4 STA NAM34,I SET IN ID SEGMENT LDA MBUF+2 GET PROG NAME 5 AND M7400 ISOLATE UPPER CHAR IOR PTYPE SET PROG TYPE STA NAM5,I AND SET IN ID SEGMENT. AND P7 ISOLATE PROG TYPE CPA P5 IF PROCESSING SEGMENT JMP IDSN0 THEN FORGET REMAINING PARMS LDA NPAR STORE PRIORITY SZA FROM NAME REC STA PRIOR,I IF NON-ZERO. LDA PPRI STORE OVER-RIDING SZA PRIORITY IF STA PRIOR,I IF NON-ZERO. LDA NPAR+1 IF RESOLUTION SZA,RSS CODE = 0, SKIP SETTING OTHER JMP IDSN0 TIME PARAMETERS. AND P7 PUT ALF,ALF RESOLUTION ALF,RAL CODE (3 BITS) STA B IN 15-13 LDA NPAR+2 AND AND M7770 EXECUTION MULTIPLE IOR B IN 11-00 STA RESL,I LDA NPAR+5 GET SECONDS MPY P100 SCALE TO TMS ADA NPAR 17 WORDS ADB A ADD DIFFERENCE TO MAP LENGTH BLS CONVERT TO WORDS STB NOIDS SAVE FOR MAP OUTPUT CPB P20 IF NO EXTRA WORDS JMP SEMAP,I EXIT * CMA,INA SET TO MOVE THE REST OF THE NAM JSB MOVE REC TO DEF LBUF+17 MBUF DEF MBUF+10 JMP SEMAP,I RETURN SPC 1 PLGTH BSS 1 PROG LENGTH N17 DEC -17 N7 DEC -7 SKP MOVE NOP WORD MOVE SUBROUTINE STA PRMAP SAVE WORD COUNT LDA MOVE,I GET SOURCE STA LSCAN SET IN LSCAN ENTRY ISZ MOVE STEP TO DEST. ADDR LDA MOVE,I GET DEST. ISZ MOVE STEP TO RETURN ADDR MOV1 LDB LSCAN,I GET A WORD STB A,I PUT IT AWAY ISZ LSCAN STEP SOURCE INA AND DEST. ADDRES ISZ PRMAP DONE? JMP MOV1 NO - CONTINUE JMP MOVE,I YES - EXIT SPC 1 * PRINT MEMORY MAP * * PRMAP SETS THE CURRENT MEMORY BOUNDS INTO THE MEMORY MAP * AND PRINTS THE MAP IF THIS OPTION WAS SELECTED. FOLLOWING * THIS, THE MEMORY BOUNDS ARE UPDATED FOR THE NEXT PROG. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * ' JSB PRMAP * * RETURN: CONTENTS OF A AND B ARE DESTROYED * PRMAP NOP LDA PPREL GET CURRENT PROG RELOC ADDR LDB AMEM3 GET ADDR IN MEMORY MAP JSB CONVD CONVERT TO OCTAL IN MAP CCA ADA TPREL GET LWA PROG LDB AMEM6 GET ADDR IN MEMORY MAP JSB CONVD CONVERT TO OCTAL IN MAP LDA PLIST GET LIST/NO LIST FLAG SLA SKIP - LIST MEMORY BOUNDS JMP PRMA1 OMIT LISTING LDA BLNK2 BLANK THE UNSET WORD STA MBUF+9 LDA NOIDS LDB MESS2 MESS2 = ADDR MEMORY MAP JSB DRKEY PRINT: XXXXX NNNNN NNNNN PRMA1 LDA TPREL GET NEXT AVAIL ADDR STA PPREL SET NEXT RELOCATION BASE JMP PRMAP,I RETURN SKP * SCAN LST FOR SAME ENT/EXT * * LSCAN SEARCHES FOR AN ENTRY IN LST IDENTICAL TO THE NAME IN TBUF. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB LSCAN * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): END OF LST. CURRENT LST ADDRES POINT TO THE NEXT * AVAILABLE ENTRY IN LST. * (N+2): NAME FOUND IN LST. CURRENT LST ADDRES POINT * TO THIS ENTRY. * LSCAN NOP JSB INLST INITIALIZE LSTX LDB TLST ENTX1 CPB PLST END OF LST ? JMP SLSTS YES - GO MAKE NEW ENTRY LDA B,I RAL,CLE,ERA CPA TBUF NAME 1,2 EQUAL ? JMP *+3 YES ADB P5 JMP ENTX1 NO - CHECK NEXT ENTRY INB LDA B,I CPA TBUF+1 NAME 3,4 EQUAL ? JMP *+3 ADB P4 JMP ENTX1 NO - CHECK NEXT ENTRY INB LDA B,I AND M7400 MASK OFF ORDINAL STA TBUF+3 LDA TBUF+2 AND M7400 MASK IN NAME 5 CPA TBUF+3 NAME 5 EQUAL ? JMP *+3 YES - SET LST1-5 ADDRES ADB P3 JMP ENTX1 ADB N2 BACK UP TO LST1 STB TLST AND SET UP TO CALL LSTX JSB LSTX FAKE IT HLT 0 I ALREADY CHECKED!! ISZ LSCAN SET FOR (P+2) RETURN JMP LSCAN,I SLSTS STB TLST (FOR LSTX TO USE) JSB LSTX ** RETURN MUST ALWAYS BE (P+1) ** JMP LSCAN,I RETURN (P+1) HLT 0 SKP * * SET NAME INTO LST * * SELST SETS THE CURRENT NAME INTO LST. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB SELST * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * SELST NOP LDA TBUF GET NAME 1,2 STA LST1,I SET NAME 1,2 INTO LST. LDA TBUF+1 GET NAME 3,4 STA LST2,I SET NAME 3,4 INTO LST LDA TBUF+2 GET NAME 5 AND M7400 ISOLATE UPPER CHAR STA LST3,I SET NAME 5 INTO LST LDA TLST GET NEXT LST ADDR STA PLST SET NEW END OF LST JMP SELST,I RETURN SPC 2 * * MATCH DIRECTORY ENTRY WITH LST * * THIS ROUTINE DETERMINES IF ENT ENTRY FROM DIRECTORY * (IN TBUF) MATCHES ANY EXT IN THE LST . THE START OF * LST MUST BE SET BEFORE CALLING THIS SUBROUTINE. * * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB MATCH * (P+1) - MATCH NOT FOUND * (P+2) - MATCH FOUND * MATCH NOP LDB TLST MACH? CPB PLST END OF LST ? JMP MATCH,I YES - RETURN (P+1) LDA B,I GET LST1 RAL,CLE,ERA CLEAR BIT15 CPA TBUF NAME 1 , 2 EQUAL ? JMP *+3 YES ADB P5 NO - BUMP (B) BY 5 JMP MACH? GET NEXT LST1 INB LDA B,I GET LST2 RAL,CLE,ERA CLEAR BIT 15 CPA TBUF+1 NAME 3, 4 EQUAL ? JMP *+3 YES ADB P4 NO - BUMP (B) BY 4 JMP MACH? GET NEXT LST1 INB LDA B,I GET LST3 AND M7400 MASK IN NAME 5 CPA TBUF+2 NAME 5 EQUAL ? JMP *+3 YES ADB P3 HFB POINT TO NEXT LST1 JMP MACH? GET NEXT LST1 INB LDA B,I GET LST4 AND P7 MASK IN SYMBOL STATUS CPA P2 UNDEFINED ? JMP *+3 YES ADB P2 NO - FORGET ENT MATCHED TO ENT JMP MACH? GET NEXT LST1 ISZ MATCH BUMP TO (P+2) RETURN FOR MATCH JMP MATCH,I RETURN (P+2) * * SKP * * SCAN LINKAGE AREAS FOR OPERAND * * * SCAN SETS UP AREA ADDRES FOR 'ARSCN' ROUTINE WHICH * ACTUALLY DOES THE SCAN. THE AREAS SCANNED ARE THE * SYSTEM/FG RES/RES LIB , BG RES AND THE DUMMY LINK AREAS. * CALLING PROGRAM MUST SET THE APPROPRIATE OPERAND VALUE * IN 'OPRND'. * ON RETURN: * (P+1) - MATCH FOUND AND REG-A = 0 * REG-E = 0 LINK FOUND IN BASE PAGE * REG-E = 1 LINK FOUND IN DUMMY BASE PAGE * AND REG-B = ABSOLUTE LINK ADDR * * (P+2) - NO MATCH - REGS ARE MEANINGLESS. * SCAN NOP SPC 1 IFN * BEGIN NON-MEU CODE **** LDA INTLG (A)=NUM OF INT TBL ENTRIESH ADA P8 (A)=FWA OF SYS/FG RES/RES LIB LINK AREA STA LOWER SET LOWER BOUND FOR AREA LDA BPA1 (A)=UPPER BOUND OF AREA STA UPPER SET UPPER BOUND JSB ARSCN SCAN SYSTEM LINKAGE AREA JMP SYSFD OPERAND FOUND LDA BPA2 SET BOUNDS FOR BG RES LINK AREA SURCH INA STA LOWER LDA BPA3 (A)= LWA OF BG RES LINK AREA STA UPPER H JSB ARSCN SCAN BG RES LNK AREA FOR OPERAND JMP SYSFD OPERAND FOUND * END NON-MEU CODE ****** XIF SPC 1 SPC 1 IFZ * BEGIN MEU CODE ******** LDA BPA2 SET BOUNDS FOR RESIDENT INA LINKAGE AREA STA LOWER SEARCH LDA M1646 STA UPPER JSB ARSCN SCAN RES LINKS FOR OPERAND JMP SYSFD OPERAND FOUND * END MEU CODE ********** XIF SPC 1 LDA FWABP SET DUMMY LINKAGE AREA BOUNDS STA LOWER LDA CWABP STA UPPER JSB ARSCN SCAN DUMMY AREA FOR OPERAND JMP DMYFD OPERAND FOUND ISZ SCAN (P+2) RETURN FOR NO MATCH FOUND JMP SCAN,I (P+2) RETURN * DMYFD LDB FWABP GET REAL BASE PAGE LOCATION CMB,INB CORRESPONDING TO THE LOCATION ADB LOWER IN DUMMY LINK AREA. ADB BPFWA (B)=REAL BP LINK AREA CLA,CCE,RSS (A)=0, (E)=1 LINK FOUND IN DUMMY SYSFD CLA,CLE (A)=0, (E)=0 LINK FOUND IN BASE PAGE JMP SCAN,I (P+1) RETURN FOR MATCH FOUND. * M1646 OCT 1646 LWABP RES LINKS * * * SCAN SPECIFIED AREAS FOR THE OPERAND * * ARSCN SCANS THE SPECIFIED AREA FOR AN OPERAND IDENTICAL TO * THAT IN 'OPRND'. CALLING MODULE MUST SET: * OPRND = OPERAND TO BE SURCHED * LOWER = LOW ADDR OF AREA * UPPER = HIGH ADDR OF AREA (NOT INCLUDING LAST ADDR) * * RETURN IS: * (P+1) - MATCH FOUND AND REG-B = ABSOLUTE ADDR OF MATCHED * LOCATION IN THE AREA. * AND REG-A = OPERAND * * (P+2) - NO MATCH FOUND - REGS ARE MEANINGLESS. * * ARSCN NOP LDB UPPER SET NEGATIVE CMB,CLE,INB UPPER BOUND. ADB LOWER CHECK IF HIGHER SEZ EQUAL OF LOWER? JMP NOMAC YES,RETURN P+1 LDB LOWER GET LOWER BOUND LDA OPRND SET (A)=OPERAND SRC CPA B,I OPERAND IN AREA? M JMP FOUND YES, RETURN INB NO, BUMP TO NEXT ONE CPB UPPER DONE? RSS YES, RETURN P+2 JMP SRC NO, TRY NEXT ONE NOMAC ISZ ARSCN BUMP TO (P+2) RETURN FOUND STB LOWER SET LOWER FOR PAST ROUTINES JMP ARSCN,I RETURN RETURN SPC 1 LOWER BSS 1 UPPER BSS 1 * * ALLOCATE NEXT BP LINK ADDR * * ALLOC ALLOCATES A WORD IN BASE PAGE TO BE USED FOR INDIRECT * LINKAGES. IF THE BASE PAGE AREA HAS BEEN EXHAUSTED, A * DIAGNOSTIC IS PRINTED AND LOADING IS ABORTED. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB ALLOC * * RETURN: * A = ABSOLUTE BASE PAGE ADDR * B = DUMMY AREA BASE PAGE ADDR * ALLOC NOP LDA CWABP GET NEXT AVAILABLE BP ADDR ISZ CWABP INCR CURRENT BP ADDR LDB A CMB,INB SET B = - CURRENT BP ADDR ADB LWABP GET LWA BP LINKAGE. SSB,RSS SKIP - BP OVERFLOW JMP ALLO1 JSB CPRNM PRINT MODULE NAME(IF ANY) LDA ERR04 04 = BP LINKAGE OVERFLOW JMP ABOR ALLO1 CLB STB A,I ZERO THE LINK WORD LDB FWABP SUBTRACT FWA BP AREA CMB,INB FROM CURRENT ADDR, ADA B TO GET RELATIVE ADDR. ADA BPFWA ADD FWA OF ACTUAL AREA FOR LDB CWABP ABS ADDR, B=DUMMY AREA ADB N1 JMP ALLOC,I ADDR. -RETURN. * ERR04 ASC 1,04 BASE PAGE OVERFLOW * * SET BP LINK ADDR FOR EXT * * DBLEX HANDLES ALL DBL EXTERNAL REFERENECS. IF A LINK HAS * BEEN ASSIGNED TO A SYMBOL (V BIT OF LST4 IS SET) AND THE * OFFSET IS NON-ZERO, THEN IT IS CONSIDERED AS AN ILLEGAL * FORWARD REFERENCE AND LOADER ABORTS WITH ERROR 15. * BEFORE ENTRY INTO DBLEX, 'EXORD' MUST BE SET UP WITH * THE PROPER ORDINAL AND OFFSET SHOULD HAVE A FINITE VALUE. * (TYPE 4 DBL RECORD SETS OFSET=0 AND TYPE 5 GETS OFSET FROM * THE RECORD). * * CALLING SEQUE"iNCE: * A = IGNORED * B = IGNORED * JSB DBLEX * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (A) HAS INSTRUCTION TO BE OUTPUT * DBLEX NOP JSB INLST INITIALIZE LSTX LDB PLST ADB P2 SET END PNTR STB PRMAP LDB TLST ADB P2 DBLF CPB PRMAP END OF LST ? JMP ORD? ORDINAL NOT FOUND * LDA B,I GET LST3 AND M377 MASK IN ORDINAL ADB P5 POINT TO NEXT LST1 CPA EXORD ORDINALS EQUAL ? RSS YES - SKIP JMP DBLF NO - CHECK NEXT LST ENTRY * ADB N7 BACK UP TO CURRENT SYMBOL STB TLST AND SET UP FOR LSTX JSB LSTX HLT 0 I HAVE ALLREADY CHECKED!! LDA REKEY SET THE DBL AND M7 TYPE STA T1FIX FOR FIXIT OR... LDA CURAL,I GET THE INSTRUCTION AND M1740 ISOLATE IT STA T2FIX AND SAVE IT ALSO LDA LST4,I GET WORD 4 OF LST ENTRY AND P3 ISOLATE THE TYPE CPA P2 IS SYMBOL DEFINED? JMP DBLE0 NO GO BUILD A FIX UP * JSB FIXIT YES FIX IT UP AND OUTPUT IT JMP DBLEX,I RETURN * DBLE0 LDB TFIX GET CURRENT END ADB N4 PUSH DOWN STB TFIX THE BOTTOM OF THE TABLE CMB,INB WAS THERE ROOM? ADB PLST SSB,RSS WELL?? JMP LOVER NOPE DID HIM IN * LDB TFIX YES JSB FIXX SET UP THIS ENTRY * LDA LST1 SET STA FIX2,I THE LST ENTRY LDA T2FIX COMBINE IOR T1FIX THE INSTRUCTION AND DBL TYPE STA FIX3,I AND SET IT LDA OFSET GET THE OFSET STA FIX4,I AND SET IT LDA DBLAD NOW FOR THE ADDRESS STA FIX1,I JMP DBLEX,I EXIT * ORD? JSB CPRNM PRINT MODULE NAME LDA ERR14 ASMB GAVE EXT REF IN DBL REC JMP ABOR BUT NO EXT REC. ASMB ERROR * * * OUTAB NOP  ROUTINE TO OUTPUT STA ABWRD ALL ABS CODE STB ABADD SAVE WORD (A) AND ADDRESS (B) CMB SET ADDRESS NEGATIVE STB A SAVE IT ADB FWA BELOW CURRENT MODULE? SSB,RSS WELL? JMP OUTA3 YES COULD BE BP OR MAIN FIXUP * ADA TPREL BEYOND LAST WORD PUT OUT? INA SSA,RSS WELL?? JMP OUTA2 NO JUST PUT THE WORD TO ABOUT * OUTA1 CLA ZERO'S LDB TPREL NEXT ADDRESS CPB ABADD THIS THE ADDRESS TO WRITE? JMP OUTA2 YES GO DO IT * JSB ABOUT ELSE SEND A ZERO JMP OUTA1 CHECK IF ANOTHER NEEDED * OUTA2 LDA ABWRD GET THE WORD LDB ABADD AND THE ADDRESS JSB ABOUT AND SEND IT JMP OUTAB,I RETURN * OUTA3 STA B ADDRESS NOT IN CURRENT MAIN ADA M2000 IN BP? SSA,RSS WELL?? JMP OUTA6 YES GO DO BASE PAGE FIX * STB A GET ANOTHER COPY ADB SEGM SEG-CURRENT ADDRESS ADA AFWA ABSOLUTE BASE-CURRENT ADDRESS SSB,RSS IF ABOVE SEGMENT BASE SSA,RSS OR BELOW MAIN JMP RCERR ERROR SHOULD NEVER GET HERE * LDA DMTBL SET ADDRESSES FOR ABOUT STA DTBL INA STA DTBL+1 INA STA DTBL+2 SO IT CAN GET BACK TO THE MAIN LDA ABWRD GET THE WORD LDB ABADD AND THE ADDRESS JSB ABOUT PUT IT OUT LDA DSTBL RESTOR ADDRESSES STA DTBL INA STA DTBL+1 INA STA DTBL+2 JMP OUTAB,I RETURN * OUTA6 ADB BPFWA GET OFFSET INTO PGM. CMB BASE PAGE (MAIN AND SEG ARE CONTIG.) ADB FWABP TRANSLATE TO MEM. RES. DUMMY LDA ABWRD GET THE WORD STA B,I STORE IT IN THE BP JMP OUTAB,I RETURN * ABADD NOP TEMP TO HOLD LOAD ADDRESS * DMTBL DEF *+1 ADDRESS OF MAIN TRIPLET AFWA OCT 0,0,0 ABSOLUTE BAS E DSTBL DEF *+1 NORMAL LOADING BASE ADDRESSES FWA NOP BASE OF CURRENT PROGRAM OR SEGMENT STRAK NOP BASE TRACK SSECT NOP BASE SECTOR (BOTH ARE RELATIVE TO ZERO FOR MAIN) * DTBL DEF FWA NORMAL SET UP OF DEF STRAK ABOUT LOAD ADDRESSES DEF SSECT CHANGED ONLY TO FIX UP MAIN * * * FIXAL FIXES UP REFERENCES * TO ENTRY POINTS NOT DEFINED WHEN REFERENCED * BY TAKING THE INFORMATION FROM THE CURRENT FIXUP TABLE ENTRY * AND BUILDING AN APPROPIATE INSTRUCTION FROM IT. * * THE FIX UP TABLE HAS 4- WORDS PER ENTRY AS FOLLOWS: * * FIX1 MEMORY ADDRESS TO BE FIXED (-1 INDICATEDS AN EMPTY ENTRY) * FIX2 SYMBOL TABLE ADDRESS OF EXT FOR THIS INSTRUCTION * FIX3 INSTRUCTION FROM DBL RECORD BITS 01 =DBL TYP (3 OR 4) * FIX4 OFSET FROM DBL RECORD. * * FIXAL EXTRACTS THE INFORMATION FROM THE CURRENT FIXUP TABLE ENTRY * AND LEAVES IT WHERE 'FIXIT' CAN FIND IT. THIS IS DONE TO ALLOW * 'FIXIT' CODE TO BE USED WITHOUT THE FIXUP TABLE OVER HEAD WHEN * DOING CODE THAT DOES NOT REQUIRE FIXUPS. * FIXAL NOP LDB IDA GET ORGION FIXA2 CPB TFIX END OF TABLE? JMP FIXA3 GO PACK THE TABLE * ADB N3 DOWN TO THE LDA B,I SYM. TBL. ENTRY ADB N1 SET B TO ORGION OF ENTRY CPA LST1 THIS ONE? JMP FIXA1 YES GO DO IT * JMP FIXA2 AROUND WE GO * FIXA1 JSB FIXX SET THE BASE ADDS IN FIX1-FIX4 LDA FIX2,I FIRST GET STA TLST THE RIGHT LST ENTRY JSB LSTX SET UP HLT 0 BETTER BE GOOD * LDA FIX3,I GET THE DBL CODE AND P7 AND STA T1FIX SET IT XOR FIX3,I GET THE MASKED INSTRUCTION STA T2FIX AND SET IT LDA FIX4,I GET THE OFFSET STA OFSET AND SET IT LDA FIX1,I GET THE MEMORY ADDRESS STA DBLAD SET IT JSB FIXIT DO THE FIXUP CC"vA STA FIX1,I RELEASE THE FIXUP TABLE ENTRY STA FIX2,I * LDB FIX1 CONTINUE JMP FIXA2 SEARCH * FIXA3 LDB IDA TABLE GET THE BASE ADDRESS PKF00 CPB TFIX IF EMPTY JMP FIXAL,I JUST EXIT * ADB N4 INDEX TO FRONT OF ENTRY STB SET1 SET ADDRESS OF FIRST AVAILABLE ENTRY LDA B,I IS IT? SSA,RSS IT IS IF IT IS <0. JMP PKF00 NO AROUND WE GO * PKF01 LDA N4 SET UP A MOVE COUNTER STA SET2 TO MOVE THE NEXT ENTRY PKF02 CPB TFIX IS THERE ANOTHER ENTRY? JMP PKF05 NO GO PATCH UP TFIX * ADB N4 YES CHECK IT LDA B,I STILL IN USE? SSA WELL JMP PKF02 NO TRY NEXT ONE * PKF03 STA SET1,I YES MOVE IT DOWN INB ISZ SET1 STEP THE ADDRESSES LDA B,I GET THE NEXT WORD ISZ SET2 FOUR WORDS MOVED YET? JMP PKF03 NO * LDA SET1 YES SET UP FOR THE NEXT ADA N8 EMPTY SLOT STA SET1 ADB N4 ALSO B JMP PKF01 TRY THE NEXT ENTRY * PKF05 LDA SET1 END OF THE FIX UP LIST ADA P4 SET THE ADDRESS STA TFIX OF THE LAST VALID ENTRY IN TFIX JMP FIXAL,I RETURN * * FIXIT NOP THIS ROUTINE BUILD A INSTRUCTION AND PUTS IT OUT LDA LST4,I GET THE SYMBOL TYPE ALF,ALF AND P7 TO A CPA P4 IF REPLACE OP JMP FIX05 GO DO IT * LDA LST5,I GET THE SYMBOL VALUE ADA OFSET ADD THE OFFSET STA OPRND SET FOR SCANNERS AND M0760 ISOLATE PAGE BITS CMA,CLE,INA SET E IF PAGE ZERO LDA T2FIX GET THE OPCODE SEZ IF BASE PAGE REF JMP FIX04 USE DIRECT LINK * LDB T1FIX GET THE DBL TYPE CPB P4 IF TYPE 4 THEN JMP FIX01 ALWAYS USE LINK * SZA ELSE USE LINK CPA MSIGN ONLY IF yJNOT A DEF JMP FIX04 A DEF DO DIRECT LINK * LDA OPRND CHECK IF A LINK NEEDED XOR DBLAD AND M0760 ISOLATE PAGE INFO SZA IN NOT SAME PAGE JMP FIX01 MUST USE LINK * LDA OPRND EXT REF WITH OFFSET TO SAME PAGE AND MPAG ISOLATE THE PAGE OFFSET IOR M2000 AND INDIRECT BIT ADD CURRENT PAGE ADA T2FIX BIT AND THE INSTRUCTION CODE JMP FIX03 GO SEND IT TO THE DISC * FIX01 LDB OPRND IF OPCODE LDA T2FIX SSA IS INDIRECT ADB MSIGN ADD A SIGN BIT STB OPRND JSB SCAN SCAN FOR A LINK JMP FIX02 SUCCESS * JSB ALLOC NO LINK FOUND ALLOCATE ONE STB T3FIX SAVE ACTUAL MEMORY ADDRESS OF IMAGE LDB OPRND AND STB T3FIX,I SET THE OPERAND INTO IT LDB A GET ACTUAL ADDRESS FIX02 LDA T2FIX INSTRUCTION TO A IOR MSIGN ADD THE INDIRECT IOR B AND THE BASE PAGE ADDRESS FIX03 LDB DBLAD GET THE ADDRESS TO B JSB OUTAB SEND THE WORD JMP FIXIT,I RETURN * FIX04 ADA OPRND DIRECT DEF ADD IN OPERAND JMP FIX03 GO PRODUCE IT * FIX05 LDA LST5,I REPLACE OP JMP FIX03 SEND IT * * * FIXX SETS UP FIX1-FIX4 * * ON ENTRY B=FIX1 ADDRESS * FIXX NOP STB FIX1 INB STB FIX2 INB STB FIX3 INB STB FIX4 JMP FIXX,I SO YOU EXPECTED COMMENTS YET! * * * FIX1 NOP FIX2 NOP FIX3 NOP FIX4 NOP T1FIX NOP T2FIX NOP T3FIX NOP TFIX NOP EXORD BSS 1 SET2 NOP SET1 NOP M1740 OCT 174000 ERR14 ASC 1,14 ASMB IN ERROR - ORDINAL ABSENT. MPAG OCT 101777 PAGE OFFSET AND INDIRECT BIT SKP * * SET MEMORY REFERENCE ADDRES * * MREF RELOCATES THE MEMORY REFERENCE INSTRUCTIONS. IF THE CURRENT * REFERENCE IS OUTSIDE THE CURRENT PAGE, IT ESTABLISHES AN INDIRECTUb * LINK THROUGH BASE PAGE. * * CALLING SEQUENCE: * A = FIRST WORD OF MEMORY REFERENCE GROUP * B = IGNORED * JSB MREF * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * MREF NOP STA ABT4 SAVE (A) TEMPORARILY AND P3 ISOLATE RELOCATION BASE TYPE LDB ENTRL GET RELOCATION ADDR PNTR ADB A ADD OFFSET TO GET PROPER PNTR LDB B,I GET RELOCATION BASE ADDR LDA ABT4 RESTORE (A) ADB CURAL,I ADD CURRENT INSTRUCTION ADDR AND M1740 ISOLATE INSTRUCTION CODE SSA SKIP - DIRECT REFERENCE ADB MSIGN SET SIGN OF ADDR = 1 STA INSTR SAVE INSTRUCTION CODE LDA DBLAD GET CURRENT RELOCATION ADDR AND M0760 ISOLATE CURRENT PAGE NO. STA PAGNO SAVE CURRENT PAGE NO. LDA B GET CURRENT ADDR AND M0760 ISOLATE PAGE NO. OF ADDR SZA,RSS BASE PAGE REFERENCE? JMP DBL8 YES CPA PAGNO CURRENT PAGE REFERENCE? JMP DBL7 YES, NO LINK NEEDED STB OPRND SAVE ABSOLUTE OPERAND LDA FWABP SET BOUNDS FOR DUMMY LINK AREA STA LOWER LDA CWABP STA UPPER JSB ARSCN SCAN DUMMY LINK AREA JMP LNFND LINK FOUND JSB ALLOC ALLOCATE LINK STA TBUF SAVE BP LINK ADDR LDA OPRND GET CURRENT OPERAND STA B,I SET OPERAND IN DUMMY BASE PAGE. LDA TBUF GET BP LINK ADDR SMLNK IOR MSIGN ADD INDIRECT BIT MREF0 IOR INSTR ADD INSTRUCTION CODE TO ADDR JMP MREF,I RETURN LNFND LDA FWABP CMA,INA GET ACTUAL BP LINK ADDR ADA LOWER ADA BPFWA (A)=ACTUAL BP LINK ADDR JMP SMLNK GO TO USE SAME LINK * DBL7 LDA B IT'S CURR PAGE AND M1777 SO REMOVE PAGE BITS FROM ADDR IOR M2000 AND SET CURR PAGE BIT JMP MREF0 ADD INSTR TO ADDR, RETURN * DBL8 LDA B IT'S BASE PAGE JMP MREFn0 JUST ADD INSTR TO ADDR, RETURN * M2000 OCT 2000 M1777 OCT 1777 INSTR BSS 1 OPADD BSS 1 PAGNO BSS 1 * * * SET VALUE INTO SYSTEM * * THE SYSET SUBROUTINE SET THE CURRENT WORD (IN THE A REG) * INTO THE SPECIFIED LOCATION OF THE SYSTEM. THIS IS REQUIRED * FOR BOTH THE BASE PAGE LINKAGES AND THE ID SEGMENT. * * CALLING SEQUENCE: * A = CURRENT VALUE * B = CURRENT LOCATION * JSB SYSET * * RETURN: CONTENTS OF A AND B ARE THE SAME AS AT CALL * SYSET NOP JSB $LIBR TURN OFF NOP INTERRUPT SYSTEM STA B,I STORE WORD INTO SYSTEM JSB $LIBX RESTORE INTERRUPT DEF SYSET SYSTEM AND RETURN * EMES DEF *+1 ASC 1, * ENTRY POINT BSS 6 LIST BUFFER ENFLG BSS 1 SKP * * NORMAL LOAD TERMINATION * NODEX LDA ENFLG GET ENTRY POINT LIST FLAG SZA SKIP - LIST ENTRY POINTS JMP NOLST OMIT ENT LISTING * * LIST LIB ENTRY POINTS * JSB SPACE NEW LINE LDA P12 LDB MESS8 MESS8 = ADDR: ENTRY POINTS JSB DRKEY PRINT : ENTRY POINTS JSB SPACE NEW LINE ON LIST OUTPUT DEVICE JSB INLST INITIALIZE LSTX ELIST JSB LSTX SET CURRENT LST ADDRES JMP NOLST END OF LST LDA LST4,I GET ENT/EXT FLAG AND P7 MASK IN SYMBOL STATUS CPA P2 IF STILL UNDEFINED JMP ELIST THEN DON'T LIST IT * LDA LST1,I GET NAME 1,2 CCE,SSA IF UN USED LIB ENTRY JMP ELIST DON'T LIST IT. * STA EMES+2 SET NAME 1,2 INTO BUFFER RAL,ERA SET THE SIGN BIT SO IT IS LISTED ONCE STA LST1,I RESET IN LST LDA LST2,I GET NAME 3,4 STA EMES+3 SET INTO BUFFER LDA LST3,I GET NAME 5 AND M7400 ISOLATE UPPER CHAR IOR BLANK ADD BLANK CHAR i STA EMES+4 SET NAME 5 INTO BUFFER LDA LST5,I A= SYMBOL VALUE LDB EMES GET ADDR OF 'NNNNN ' IN ADB P4 BUFFER. JSB CONVD CONVERT TO OCTAL IN MEMORY MAP LDA P14 LDB EMES ADDR OF ' *' BEFORE ENT BUFFER JSB DRKEY PRINT ENTRY POINT LISTING JMP ELIST CONTINUE ENTRY POINT SEARCH * NOLST JSB DWRIT WRITE LAST DISK SECTOR LDA FWA SET LOW MAIN STA MEM1,I ADDR LDA TPREL SET STA MEM2,I ADDR LDA FWABP CALCULATE RELATIVE CMA,INA CURRENT BP ADDR ADA CWABP AND ADD FWA OF REAL ADA BPFWA AREA FOR LAST ADDR AND STA MEM4,I SET IN ID SEGMENT LDA FWABP IF SEGMENT BEING LOADED, CMA,INA SUBTRACT FWABP FROM SEGB ADA SEGB (SEGMENT BASE) AND ADD ADA BPFWA TO REAL FWA OF BASE PAGE, STA MEM3,I SET AS LOW BOUND OF BP. LDA SEGB GET CURRENT LOWER BOUND OF BP, CMA,INA ADA CWABP ADD CURRENT BP LINK ADDR LDB MSEG (B) = M/SEG FLAG. CPB P1 IF LOADING MAIN, STA MTMP SAVE BP LENGTH SZA,RSS SKIP - SOME BP LINKAGES JMP NOBPL NO BP OUTPUT * * OUTPUT BASE PAGE LINKAGES * LDA FWA SET CMA,INA DBLAD ADA PPREL = TO DISPLACEMENT ADA M177 TO START OF AND M7600 NEXT SECTOR ADA FWA FOR STA DBLAD BP AREA. CLA,INA SET ABT12 = 1, STA ABT12 FOR WRITING BASE PAGE. LDA SEGB SET FWA OF CURRENT BASE PAGE STA ABT13 AREA IN ABT13. CPB P1 IF NOT LOADING RSS MAIN, JMP NOLS1 JUMP TO OUTPUT BASE PAGE. LDA FWA SAVE MAIN: STA MTMP+1 FWA LDA PPREL STA MTMP+2 PPREL LDA DBLAD STA MTMP+3 DBLAD LDA SEGB STA MTMP+4 FWABP LDA CWABP STA MTMP+5 CWABP. * NOLS1 LDA ABT13 IF CURRENT ABT13 = LAST USED CPA CWABP BASE PAGE ADDR, JMP NOBPL THEN FINISHED. * LDA ABT13,I OUTPUT CURRENT LINK WORD LDB DBLAD JSB ABOUT ISZ DBLAD UPDATE ISZ ABT13 ADDRES JMP NOLS1 AND CONTINUE. * NOBPL CLA RESET BASE PAGE OUTPUT STA ABT12 FLAG FOR "ABOUT". LDA MSEG SKIP NAME CPA P2 PROCESSING IF JMP MSGP1 SEGMENT LOAD LDB MESS4 GET ADDR OF TERM. MESSAGE LDA NAM12,I GET PROG NAME 1,2 STA B,I SET NAME INTO MESSAGE INB INCR CURRENT ID SEG ADDR LDA NAM34,I GET PROG NAME 3,4 STA B,I SET NAME INTO MESSAGE INB INCR CURRENT ID SEG ADDR LDA NAM5,I GET PROG NAME 5 AND M7400 ISOLATE UPPER CHAR IOR BLANK ADD BLANK CHAR STA B,I SET NAME INTO MESSAGE * * LDA MSEG CHECK FOR SPECIAL SZA,RSS MAIN/SEGMENT PROCESSING JMP NTRM0 -NO, NORMAL TERMINATION * MSGP1 LDB PLST IF MAIN LOADED, SAVE END OF CPA P1 LST AS BEGINNING OF STB SLST SEGMENT AREA OF LST. * LDB SLST ERASE PREVIOUS STB PLST SEGMENT LST ENTRIES. STB TLST * LDB OPCOD CHECK OPERATION CODE. CPB P1 -IF DEBUG LOAD, RSS SKIP. JMP MSGP4 CONTINUE. CPA P2 CONTINUE IF JMP MSGP3 SEGMENT * * FIND AND CLEAR 'DEBUG' ENTRY POINTS * LDA MSGDC SET FWA OF STA ED20 ENT NAMES LDA N4 SET NEG STA ED21 INDEX OF -4. * MSGP2 LDA ED20,I SET STA TBUF ENTRY ISZ ED20 LDA ED20,I POINT STA TBUF+1 ISZ ED20 NAME LDA ED20,I STA TBUF+2 IN ISZ ED20 TBUF. * JSB LSCAN HFBFIND MATCH JMP MSGP0 -NO MATCH- CHECK NEXT LDA UBLNK SET STA LST3,I NAME IOR BLANK FIELD STA LST1,I OF STA LST2,I ENTRY = BLANKS. MSGP0 ISZ ED21 END-OF-LIST? JMP MSGP2 NO JMP MSGP3 YES. * N4 DEC -4 * MSGDC DEF *+1 ASC 3,DEBUG ASC 3,$DBP1 ASC 3,$DBP2 ASC 3,$MEMR * * MSGP3 LDA MSEGF SKIP DEBUG CHECK , ETC., CPA P3 IF FINAL JMP MSGP6 LOAD (=3). * JSB SILST INITIALIZE FOR SEGMENT AREA, JSB LSTX SET ADDRES FOR NEXT LST ENTRY NOP LDA CHRDE PUT STA LST1,I "DEBUG" LDA CHRBU IN STA LST2,I NEXT LDA UCHRG LST ENTRY STA LST3,I FOR SEGMENT. LDA P2 SET LST4 = UNDEF SYMBOL STA LST4,I LDA TLST SET NEW STA PLST END-OF-LIST ADDR. * * SAVE "MAIN" BOUNDS IF MAIN JUST LOADED * MSGP4 LDA MSEG CONTINUE IF CPA P2 PROCESSING A SEGMENT. JMP MSGP5 ISZ MSEG SET 'MSEG' = 2. LDA PPREL SAVE SEGMENT STA SEGM BASE ADDR LDA CWABP SAVE BASE PAGE LOWER BOUND STA SEGB FOR LINK AREA FOR SEGMENTS. LDA P5 SET PTYPE = 5 IOR M20 MASK IN 'SS' BIT FOR SEG ID H STA PTYPE FOR BKG SEGMENT. * * SET CONDITIONS FOR NEXT SEGMENT. * MSGP5 LDA MSEGF SKIP IF CPA P3 FINAL LOAD. JMP MSGP6 LDA SEGM RESET LOWER STA PPREL BOUNDS VALUES FOR STA FWA PPREL , FWA STA TPREL CCA SET LAST ACCESS PNTR STA LELAD USED BY OUTAB ROUTINE LDA SEGB AND THE STA CWABP BASE PAGE AREA. CCA SET FIRST DATA BLOCK STA DBLFL FLAG = -1. * * LDA IDA (A) = ID SEGMENT ADDR(DUMMY) ADA P4 (A)= ADDR OF MEM1 OF SHORT ID LDB TYPID GET LONG/SHORT ID FLAG SZB,RSS LONG ID ? ADA P4 YES, (A)=ADDR OF LONG ID'S MEM1 JSB C#S CALCULATE # SECTORS. * ADA SSECT ADD IN STARTING SECTOR. CLB DIVIDE BY DIV TRKS# # SECTORS PER TRACK. STB SSECT SET REMAINDER AS NEW SSECT. ADA STRAK ADD IN STARTING TRACK TO STA STRAK QUOTIENT AND SET NEW STRAK. ALF,RAL ROTATE TRACK # TO RAL,RAL 14-07, ADD IN IOR SSECT SECTOR # AND STA ALLOC SAVE TEMPORARILY IN SUB HEAD * * ALLOCATE NEW ID SEGMENT. * LDB EDFLG SET CLA (A) = 1 IF CPB P2 A REPLACEMENT, INA OTHERWISE (A)=0, CLB,INB INDICATE SHORT ID JSB SETID ALLOCATE SHORT ID SEG * LDA ALLOC STORE NEW STARTING TRACK STA DMAIN,I AND SECTOR IN "DMAIN" * LDA PLIST CHECK LIST FLAG SLA SKIP IF NOT SUPPRESSED. JMP MSG10 GO TO LOAD NEXT * JSB SPACE TRIPLE JSB SPACE SPACE FOR JSB SPACE CLARITY ON LISTING. MSG10 LDA LGO GET LOAD AND GO FLAG CMA,SSA,INA,SZA IF IN LOAD AND GO AREA JMP IREAD CONTINUE THE LOAD,ELSE JMP TREAD GO PRINT "LOAD" MESSAGE SKP * * RE-OUTPUT "MAIN" BASE PAGE LINKAGES * MSGP6 LDA SLST SAVE SLST VALUE TEMPORARILY STA LSTX AND SET IT EQUAL TO FLST LDB FLST TO FOOL LSTX1 TO INITIALIZE STB SLST LST FROM START. JSB LSTX1 ANY UNDEFINED ? JMP MSGP9 NO - THEN DON'T OUTPUT MESSAGE LDA LSTX SET ACTUAL VALUE OF SLST BACK STA SLST ISZ MSEG SET MSEG FOR INLST LIUND LDA P6 LDB MESSM PRINT "MAIN'S" JSB SYOUT JSB PUDF GO REPORT THE UNDEFINEDS SSB IF NO PARAMETERS JMP ABORT THEN ABORT LDB B,I ELSE GET PARAMETER CPB P98 IF 98 JMP LIUND THEN LIST UNDEFINED AGAIN. CPB P4 IF 4 RSS THEN SKIP AND WRAP UP LOADING JMP ABORT ABORT IF ANY OTHER PARAMETER MSGP9 LDA LSTX RESET ORIGNAL VALUE OF SLST STA SLST LDA MTMP SZA,RSS TRANSFER IF NO JMP NTRM0 BASE PAGE. * LDA MTMP+1 RESET "MAIN" WORDS. STA FWA FWA LDA MTMP+2 STA PPREL PPREL LDA MTMP+3 STA DBLAD DBLAD LDA MTMP+4 STA ABT13 FWABP LDA MTMP+5 STA CWABP CWABP CLA SET STARTING TRACK STA STRAK AND SECTOR FOR STA SSECT PROG = 0. CLA,INA SET BP OUTPUT STA ABT12 FLAG. MSGP7 LDA ABT13 IF CURRENT ABT13 = LAST USED CPA CWABP BASE PAGE ADDR, JMP NTRM0 THEN FINISHED. * LDA ABT13,I OUTPUT CURRENT LINK WORD LDB DBLAD JSB ABOUT ISZ DBLAD UPDATE ISZ ABT13 ADDRES JMP MSGP7 AND CONTINUE MTMP OCT 0,0,0,0,0,0 TEMP STORAGE FOR "MAIN" P17 DEC 17 P9 DEC 9 SKP * * CHECK FOR AND DO NORMAL ON-LINE LOAD TERMINATION * FOR A MAIN OR SEGMENT , OR FOR MAIN AND SEGMENTS * IF NO EDITING. * NTRM0 JSB DWRIT DUMP LAST OF BASE PAGE LDA FWABP SE[T UP ADDR ADA N13 OF DUMMY STA IDA ID SEGMENT. LDA ID# SET NEGATIVE CMA,INA INDEX FOR NUMBER OF STA ID## DUMMY ID SEGMENTS. LDA EDFLG CHECK FOR SZA LOADING OPERATION JMP ED00 -EDITING * NTRM7 LDA IDA ADA P4 GET ADDR OF MEM1 LDB ID## CMB,INB CPB ID# ADA P4 STA ED61 AND SAVE IT. JSB C#S COMPUTE # OF SECTORS NEEDED STA ABT13 AND SAVE FOR LATER. LDB ED61 GET ADDR OF MEM1 ADB P4 AND SET (B)=DMAIN'S ADDR LDA B,I GET DMAN AND M177 ISOLATE SECTOR STA ED62 ADDR AND SAVE. LDA B,I GET DMAN AGAIN ALF,ALF ISOLATE RELATIVE STARTING RAL TRACK NUMBER AND AND M377 ADD BASE TRACK NUMBER. ADA TRAKB STA TRAKP SAVE ABSOLUTE TRACK ADDR ALF,RAL RAL,RAL STA ABT11 SAVE POSITIONED TRACK # LDA TRKLU GET LU OF USER TRACKS CLE,ERA PUT 0 OR 1 FOR LU2 OR CLA LU3 RESPECTIVLY ERA PUT BIT IN (A) IOR ABT11 MERGE IN TRACK IOR ED62 AND SECTOR ADDRES. STA B,I STORE REAL ADDR IN DMAN LDA EDFLG GET EDIT FLAG SZA EDIT OPERATION ? JMP NOSET YES LDB IDA NO, THEN SET BIT7 OF ADB P3 NAM5 WORD OF ID SEG LDA ID## CMA,INA TO INDICATE THAT CPA ID# 'PROG IN CORE ONLY'. INB LDA B,I GET NAM5 WORD IOR M200 MERGE IN BIT7 STA B,I STORE BACK IN NAM5 * NOSET LDA ABT13 GET # OF SECTORS REQD CLB DIVIDE BY # OF SEC/TRK DIV TRKS# TO FIND # OF TRKS REQD. SZB IF REMAINDER INA THEN BUMP TO WHOLE TRK. STA #TRAK SET AS NUMBER OF TRACKS LDA EDFLG ` GET EDIT FLAG SZA,RSS IF NOT DOING EDIT OPERATION JMP NTRM5 THEN DO NOT COMPRESS TRACKS. * * DETERMINED FOR MAIN/SEGMENT LOAD IF SEMENTS * HAVE TO BE COMPRESSED (MOVED UP ON USER * TRACKS IF PREVIOUS SEGMENTS OR MAIN HAVE * BEEN STUFFED IN SYSTEM AVAILABLE AREA). * LDA ID## CMA,INA CPA ID# IF PROCESSING MAIN JMP NTRM5 THEN DO NOT MOVE. LDB IDA GET CURRENT DUMMY ID SEG ADDR ADB P17 (B)=DMAN ADDR OF PREVIOUS ID LDA ID## ADA ID# CPA P1 PROCESSING FIRST SEG ? ADB P4 YES, ADJUST DMAN'S ADDR. LDA B,I GET DMAN SSA IF PREVIOUS SEG/MAIN ON LU3 JMP NTRM5 THEN TOO DO NOT MOVE CMA,INA MAKE DMAN NEGATIVE AND ADA DSCLB ADD TO DISC LIB ADDR SSA DMAN POINT TO SYSTEM AREA ? JMP NTRM5 NO, THEN TOO DO NOT MOVE. LDA ID## ADA ID# CPA P1 IF PROCESSING FIRST SEGMENT JMP MOVEB THEN MOVE TO START OF USER TRKS CMA,INA SET NEG INDEX FOR NUMBER OF STA ED61 DUMMY IDS TO BE UPDATED. UPID ISZ ED61 REACHED MAIN'S ID ? RSS NO, THEN SKIP. ADB P4 YES, ADJUST DMAN'S ADDR. LDA B,I GET DMAN SSA IS THIS SEG ON LU 3 ? JMP MOVER YES, MOVE TO WHERE HE LEFT OFF. CMA,INA NO, THEN SUBTRACT FROM ADA DSCLB LIB ADDR SSA THIS SEG ON USER TRAKS ? JMP MOVER YES, MOVE TO WHERE HE LEFT OFF. LDA ED61 SZA,RSS EXAMINED MAIN'S ID ? JMP MOVEB YES, MOVE TO START OF USER TRKS. ADB P9 (B)=DMAIN ADDR OF PREVIOUS ID JMP UPID EXAMINE NEXT ID SKP * DETERMINE WHERE LAST SEGMENT OR MAIN LEFT OFF * ON USER TRACKS. * MOVER LDA B,I SAVE DMAN OF LAST ID STA BID2 POINTING TO USER TRACKS. LDA B ADA N4 (A)=ADDRa OF MEM1 JSB C#S DETERMINE NUMBER OF SECTORS STA BID1 AND SAVE THE NUMBER LDA BID2 GET DMAN AND M177 GET SECTOR ADDR ADA BID1 ADD TO TOTAL REQUIRED CLB DTERMINE TRACK OFFSET BY DIV TRKS# DIVIDING BY SECS/TRK STA BID1 SAVE NUMBER OF TRACKS LDA BID2 GET DMAN AGAIN ALF,ALF MASK IN RAL TRACK AND M377 ADDR (RELATIVE) ADA BID1 ADD TRK OFFSET FOR MOVE STA ED66 SET AS DESTINATION TRACK STB ED67 AND SET DESTINATION SECTOR JMP SHIFT GO DO MOVE * DESLU NOP IDCNT NOP * * MOVE TO BEGINNING OF USER TRACKS * MOVEB LDA TRAKB GET BASE TRACK ADDR STA ED66 SET DESTINATION TRACK CLB AND SECTOR TO VERY STB ED67 BEGINNING. * * * MOVE CURRENT AND REMAINING SEGMENTS * UPWARD ON USER TRACKS. * SHIFT LDB ID## SET # OF SEGS TO BE MOVED STB IDCNT INCLUDING CURRENT LDA DSKUN SET DESTINATION LU STA DESLU OF USER TRACKS LDB IDA SET ADDR OF ID SEG STB BID2 BEING PROCESSED. LDA ED66 GET TARGET TRACK NUMBER CPA TRAKP SAME AS SOURCE TRACK # ? CLA,RSS YES, THEN SKIP. JMP DIFTR NO (ATLEAST 1 TRK DIFFERENCE) LDB ED67 GET TARGET SECTOR ADDR CMB,INB MAKE NEGATIVE TO GET REMAINDER JMP SAMTR GO FIND REMAINING SECS ON TRK DIFTR INA GET NUMBER OF TRACKS CMA,INA TO BE ADA TRAKP SHIFTED THROUGH MPY TRKS# CONVER TO NUMBER OF SECTORS LDB ED67 GET DESTINATION SEC ADDR CMB,INB SUBTRACT FROM SECS/TRK ADB TRKS# TO NUM LEFT ON TRACK. SAMTR ADB ED62 ADD TO OFFSET FROM SOURCE ADB A ADD FOR TRACK OFFSET CMB,INB MAKE NEGATIVE STB BID1 SAVE NEGATIVE SEC OFFSET CLA CLEAR NUMBER STA ED21 OF SECS TO BE MOVED. * * UPDATE DMAN OF CURRENT AND REMAINING * ID SEGMENTS AND DETERMINE TOTAL NUMBER * OF SECTORS TO BE MOVED. * LDA BID2 GET ID SEG ADDR OF CURRENT ID MORID ADA P4 (A)=ADDR OF MEM1 JSB C#S FIND # OF SECS FOR THIS ID ADA ED21 ADD TO TOTAL NUMBER OF STA ED21 SECTORS TO BE MOVED. LDB BID2 ADB P8 (B)=DMAN'S ADDR LDA B,I GET DMAN AND M177 ISOLATE SECTOR ADDR STA BID4 SAVE SECTOR ADDR TEMPORARILY LDA B,I GET DMAIN AGAIN ALF,ALF POSITION RAL AND AND M377 MASK IN RELATIVE TRK ADDR MPY TRKS# GET EQUIVALENT SEC COUNT ADA BID4 ADD SECTOR OFFSET (ADDR IN SECS) ADA BID1 DECREMENT BY SEC OFFSET CLB (A)=NEW ADDR IN SECS DIV TRKS# GET RELATIVE TRK & SEC ADDR ALF,RAL POSITION REL TRK ADDR RAL,RAL IOR B MERGE IN SECTOR ADDR LDB BID2 ADB P8 (B)=ADDR OF DMAIN STA B,I UPDATE DMAIN ISZ IDCNT ALL IDS UPDATED ? RSS NO JMP FSHFT YES, GO MOVE USER TRACKS. LDA BID2 SET ADDR OF NEXT ADA N9 ID SEGMENT (EXTENDING STA BID2 DOWNWARD IN CORE) JMP MORID UPDATE NEXT ID * * MOVE USER TRACKS FSHFT LDA ED21 SET NEGATIVE NUMBER CMA,INA NUMBER OF TRACKS TO STA ED21 BE MOVED. JSB ED15 MOVE USER TRACKS * * NTRM5 LDB IDA GET CURRENT ID SEG ADDR ADB P8 (B)=ADDR OF DMAN LDA ID## CMA,INA CPA ID# IF PROCESSING MAIN'S ADB P4 THEN ADJUST ADDR OF DMAN LDA B,I GET DMAN ALF,ALF POSITION AND RAL ISOLATE ACTUAL AND M377 STARTING TRACK NUMBER STA BID2 SAVE IT LDA B,I GET DMAIN AGAIN AND M177 GET SECTOR OFFSET CMA,INA,SZA,RSS IF NO OFFSET JMP TRBDY THEN NO SPECIAL FIX ADA TRKS# GET SEC LEN - OFFSET CMA,INA TO GET # OF SECS USED IN 1ST TRK ADA ABT13 SUBRTRACT FROM TOTAL SECS NEEDED SSA CROSSED TRACK BOUNDARY ? JMP NTRM9 NO - THEN TAT OK. CLB YES - THEN FIND TRACKS REQD. DIV TRKS# (EXCLUDING OFFSET) SZB IF REMAINDER INA THEN BUMP TO WHOLE TRACK STA #TRAK SET NEW TRACK LENGTH ISZ BID2 ALSO FORGET ABOUT FIRST TRACK TRBDY LDA #TRAK SET NUMBER OF CMA,INA,SZA,RSS TRKS AS NEGATIVE COUNT. JMP NTRM9 TAT OK IF ON TRK BOUNDARY STA ABT1 COUNT. LDA TRKLU SET (B) = FWA OF LDB TATSD SYSTEM CPA P2 OR AUXILIARY CLB DISC'S TRACK BASE ADB TAT ADB BID2 (B)=ADDR IN TAT STB ABT2 SAVE TAT'S ADDR * NTRM2 LDA MSIGN (A)=100000 FOR SYSTEM ASSIGNED. LDB ABT2 (B)= TAT ADDR JSB SYSET SET VALUE IN TAT CLA CHECK CPA EDFLG OPERATION JMP NTRM8 -NORMAL LDA MSIGN -EDITING- CHANGE LDB ABT2 WORD IN JSB SYRUW TAT ON DISC NTRM8 ISZ ABT2 ADD 1 TO TAT ADDR. ISZ ABT1 INDEX TRACK # COUNTER. JMP NTRM2 -DO NEXT TRACK. * * * DO FINAL ID SEGMENT PROCESSING * NTRM9 CLB CLA,INA (A)=1 FOR ADDITION CPB EDFLG IF NOT EDITING CLA THEN (A)=0 FOR NORMAL LOAD LDB ED25 (B)=ADDR OF TARGET ID IF ANY JSB MVIDS MOVE DUMMY TO REAL ID JSB FIX FIX FOR TRYING LONG TO SHORT MOVE CLA CPA MSEG DOING MAIN/SEGMENT LOAD JMP NTRM4 NO, THEN TERMINATE. JMP ED183 YES, SET UP FOR NEXT SEG. * NTRM4 EQU * SPC 1 IFZ ******* BEGIN MEU CODE ******** Z LDA #MNPG CALCULATE CMA,INA NUMBER OF PAGES ADA #MXPG USED BY CODE ADA P2 +1 CURR PAGE, +1 BASE PAGE LDB #PGS # PAGES REQUESTED SZB,RSS BY USER? STA #PGS NO, USE PROG SIZE * LDA PLIST SLA LOADR LISTING SUPPRESSED? JMP PTNCK YES, SKIP #PAGES MESS. JSB SPACE LDA #PGS GET PROG SIZE + BASE PAGE JSB CNV99 CONVERT TO ASCII STA MS11# FILL INTO MESSAGE LDA P18 LDB MES11 PRINT MESSAGE JSB DRKEY '00 PAGES REQUIRED' * PTNCK CCA CHECK #PAGES REQ'D DOESN'T LDB PTYPE EXCEED MAX OF QUALIFIED PTTN CPB P2 RT? LDA #MXRT YES SSA (IF NO RT PTTNS, LDA #MXBG USE BG PTTN MAX) SSA (IF NO BG PTTNS, LDA #MXRT USE RT PTTN MAX) SSA SUPER-DUPER ERROR CHECK JMP ER.16 IF NONE, OH-OOH! INA ADD 1 FOR BASE PAGE LDB #PGS CMB,INB ADB A #PAGES REQ'D SSB > MAX ? JSB WN.17 YES, GIVE WARNING * CCB BUILD ID SEG WORD 22 ADB #PTTN PUT PTTN NUMBER CCE,SSB IN BITS 0-5 CLB,RSS SET BIT 15 IF PTTN RBL,ERB REQUESTED, ELSE 0 * CCA ADA #PGS PUT NUMBER OF PAGES ALF,RAR FOR PROG'S PTTN IOR #MPFT IN BITS 10-14 ALF,ALF & MEM PROT FENCE TABLE RAR INDEX INTO IOR B BITS 7-9 LDB #IDAD KEEP IT IN (A) ADB P21 GET ADDR WORD 22 OF STB SYR1 ID SEG FOR PROG JSB SYSET SET ID SEG IN MEMORY LDB EDFLG SZB,RSS PERMANENT PROG? JMP *+3 NO LDB SYR1 YES, FIX DISC ID SEG JSB SYRUW * JMP DONE FINISHED * * * ISSUE WARNING FOR CODE EXCEEDING PTTN SIZE * CALLm SEQUENCE: JSB WN.17 * WN.17 NOP LDA P4 (A)=CHAR COUNT LDB WNG17 (B)=MESSAGE ADDR JSB SYOUT PRINT: 'W 17' JMP WN.17,I RETURN * WNG17 DEF *+1 ASC 2,W 17 CODE > PTTN SIZE * * * CONVERT TO DECIMAL ASCII (MAX VALUE = 99) * CALL SEQUENCE: LDA VALUE * JSB CNV99 * STA ASCII * CNV99 NOP QUICK CONVERSION CLB BINARY TO DECIMAL ASCII DIV P10 MAX VALUE = 99 SZA ADA M20 FORCE LEADING BLANK IF ZERO ADA M40 ALF,ALF PUT IN LEFT HALF IOR B FILL UNITS IN RIGHT IOR M60 JMP CNV99,I RETURN ASCII IN (A) ******* END MEU CODE ********** XIF SPC 1 DONE LDA #IDAD INA GET ADDR OF ID TEMP AREA LDB #IDAD ADB P10 GET ADDR OF B-REG SAVE WORD STB SYR1 WITHIN THE ID SEG JSB SYSET SET TEMP ADDR IN B LDB EDFLG SZB,RSS JMP *+3 LDB SYR1 IF PERMANENT, UPDATE JSB SYRUW ID SEG ON DISC TOO * LDA P12 LDB MESS4 MESS4 = ADDR: XXXXX READY ETC. JSB SYOUT PRINT: XXXXX READY - LOADING ETC * * * RESET LGO CONTROL WORDS IF LGO USED * LDA LGO GET LG USE FLAG SZA,RSS IF LG NOT USED JMP EXIT THEN DO NOT RESET 'LGOC' * LDA LGOTK SET AND M7600 'LGOC' LDB C1766 = LU, STARTING TRACK #,SECT 0 JSB SYSET * EXIT LDA P4 SET UP TO LDB ENDMS SEND END MESSAGE. * LTERM JSB SYOUT SEND TERMINATE MESSAGE * LDB BATCH GET BATCH FLAG LDA OPCOD GET OP CODE CPA P4 IS IT DELETE ? SZB YES - NON-BATCH OPERATION ? JMP DLEN NO - THEN GO THROUGH PAGE-EJECT JMP EXIT1 AVOID PAGE EJECT FOR NON-BATCH DELETE DLEN LDA PLIST GET LIST/NO LIST FLAG CPA P3 SKIP PAG6E EJECT IF JMP EXIT1 NOT LISTING ANYTHING AT ALL * LDA LISTU GET THE LIST LU AND M77 TO A IOR M1100 SET THE PAGING BITS STA RELAD SET FOR EXEC CALL JSB EXEC DEF *+4 CALL TO EJECT A PAGE ON A DEF P3 PRINTER OR DEF RELAD SPACE 2 LINES ON DEF N2 A TTY * * EXIT1 JSB EXEC RELEASE DEF *+3 ANY TRACKS DEF P5 NOT DEF N1 ACCOUNTED FOR. * * PASS BACK PROG NAME TO BATCH MONITOR * JSB PRTN CALL ROUTINE DEF *+2 DEF PRAM ADDR OF NAME BUF * SPC 1 JSB EXEC REQUEST PROG COMPLETION DEF *+2 DEF P6 6 = PROG COMPLETION CODE SPC 1 C1766 OCT 1766 M1100 OCT 1100 M7600 OCT 177600 SPC 1 RELAD BSS 1 RELATIVE BG ADDR TEMPP BSS 1 ABSOLUTE PROG WORD LELAD DEC -1 OFFSET INTO CURRENT LOAD MODULE LOFST NOP OFFSET OF THE MODULE ABWRD NOP SAVED ABSOLUTE PROG WORD CELAD NOP TARGET REL ADDR TO BE ACHIEVED ENDMS DEF $END SKP * * OUTPUT ABSOLUTE PROG WORD * * ABOUT PUTS OUT THE CURRENT ABSOLUTE PROG WORD. * * IF THE CURRENT PROGRAM WORD IS TO BE LOCATED IN A DIFFERENT * SECTOR FROM THE CURRENT SECTOR, THE CURRENT SECTOR IS WRITTEN ON * THE DISK AND THE APPROPRIATE SECTOR READ. * * * CALLING SEQUENCE: * A = CURRENT PROGRAM WORD * B = ADDRESS * DTBL SET UP AS FOLLOWS: *DTBL DEF BASE MEMORY ADDRESS * DEF BASE TRACK OFSET * DEF BASE SECTOR OFSET * * JSB ABOUT * * RETURN: CONTENTS OF A AND B ARE DESTROYED * ABOUT NOP STB TEMPQ SAVE THE ADDRESS STA TEMPP SAVE ABSOLUTE PROG WORD LDA DTBL,I SUBTRACT FWA OF CMA,INA AREA FROM CURRENT ADA B ADD CURRENT RELOCATION ADDR. STA RELAD SAVE RELATIVE ADDR. LDA MSIGN SET ABT14 TO INA BE 100001 FOR NO SUSPENSION, STA ABT14 1 TRACK ALLOCATION. * CLA,INA IF FLAG SAYS DUMMY BASE PAGE CPA ABT12 AREA IS BEING OUTPUT, JMP AB0 SKIP OVERFLOW CHECK. * CMB,INB FROM LWA OF AREA. ADB LWA -ERROR SSB IF AREA IS JMP LGERR EXCEEDED. * AB0 CLB DIVIDE RELATIVE ADDR LDA RELAD BY 64 (SECTOR SIZE). DIV P64 STB SPOS SAVE REMAINDER (POSITION) ADA DTBL+2,I ADD STARTING SECTOR OF PROG. CLB DIVIDE BY # OF DIV TRKS# SECTORS PER TRACK. CLE SET FOR ERB,RBL EVEN SECTOR BOUNDARIES STB TSECT SAVE SECTOR # IN TRACK. LDB P64 SEZ,RSS IF SECTOR WAS ODD JMP *+3 * ADB SPOS OFFSET POSITION TBY 64 STB SPOS ADA DTBL+1,I ADD THE PGRM BASE TRACK AND STA B SAVE FOR TEST OF OVERFLOW ADA TRAKB ADD IN TRACK BASE ADDR. STA TTRAK SAVE AS ABSOLUTE TRACK # LDA #TRAK SUBTRACT # OF TRACKS ALLOCATED CMA,INA FROM RELATIVE TRACK #, ADA B A POSITIVE RESULT MEANS TRACK SSA,RSS OVERFLOW, GO TO JMP AB3 OVERFLOW SECTION. * * TRACK/SECTOR OF CURRENT WORD IS DETERMINED. * LDA TTRAK CHECK FOR CURRENT TRACK/SECTOR CPA DTRAK = TRACK/SECTOR IN CORE. RSS TRACKS =. JMP AB1 LDA TSECT CHECK FOR SECTOR CPA DSECT # NEEDED. JMP AB2 -CURRENTLY IN CORE. * * WRITE OUT SECTOR IN CORE, READ IN NEW SECTOR * AB1 JSB DWRIT WRITE CURRENT SECTOR. LDA TTRAK SET STA DTRAK NEW LDA TSECT TRACK/SECTOR #'S. STA DSECT JSB DREAD READ IN DESIRED SECTOR. * AB2 LDB ADBUF ADD POSITION IN SECTOR OF NEW ADB SPOS WORD TO ADDR OF DBUF. LD4HFBA TEMPP STORE ABSOLUTE WORD INTO STA B,I DBUF CLA,INA RETURN IMMEDIATELY IF DUMMY CPA ABT12 BASE PAGE AREA IS JMP ABOUT,I BEING OUTPUT * * CHECK FOR NEW UPPER BOUND * LDA TEMPQ ABSOLUTE LOAD ADDR, INA ADD 1, STA B SAVE. CMA,INA -SUBTRACT THIS ADDR ADA TPREL FROM CURRENT UPPER BOUND, SSA IF CURRENT IS LARGER, STB TPREL SET NEW ADDR. JMP ABOUT,I RETURN * TEMPQ NOP * * * OVERFLOW OF TRACK ALLOCATION * AB3 JSB EXEC ASK FOR 1 TRACK DEF *+6 DEF P4 DEF ABT14 1 TRACK. DEF ABT1 -STARTING TRACK # - DEF ABT2 -LOGICAL UNIT # - DEF ABT3 -# SECTORS PER TRACK- * CCA CPA ABT1 IF NO TRACK AVAILABLE, JMP AB4 GO TO PRINT WAITING MESSAGE. * LDA ABT2 CHECK IF NEW TRACK ON SAME CPA TRKLU DISC (LOGICAL UNITS =) RSS -YES JMP AB10 -NO, LDA TRAKB CHECK FOR NEW TRACK TO ADA #TRAK BE NEXT CONTIGOUS TO CMA,INA SUBTRACT FROM ADA ABT1 NEW ALLOCATION SZA IF CONTIGOUS SKIP JMP AB5 ELSE GO TEST FURTHER H JSB RELLO RELEASE ANY TRACKS BELOW THE NEEDED ISZ #TRAK ADD 1 TO # OF TRACKS JMP AB0 CONTINUE. * * PRINT WAITING MESSAGE AND REPEAT 1 TRACK CALL * AB4 LDA P22 PRINT: LDB ITRKM "WAITING FOR DISC SPACE" JSB SYOUT CLA,INA RESET FOR SUSPENSION, STA ABT14 1 TRACK, JMP AB3 REPEAT CALL. SPC 1 AB5 SSA,RSS IF NEW TRACK BELOW CURRENT AREA JMP AB10 SKIP, ELSE GO SET TO MOVE JMP AB3 GO TRY ANOTHER ALLOCATION SPC 1 * * NOT CONTIGUOUS, RELEASE LATEST AND ALLOCATE * COMPLETE NEW SET OF TRACKS. * AB10 JSB EXEC RELEASE ONE DEF *+5 TRACK DEF P5 JUST DEF P1 ALLOCATED DEF ABT1 DEF ABT2 * JSB RELLO RELEASE ALL TRACK BLOW CURRENT LDA #TRAK SAVE STA ABT1 CURRENT LDA TRAKB VARIBLES STA ABT2 ASSOCIATED STA ABT9 LDA TRKLU WITH STA ABT3 TRACK LDA TRKS# ALLOCATION STA ABT4 LDA SSECT STA ABT5 LDA STRAK STA ABT6 * JSB DWRIT WRITE OUT CURRENT SECTOR. ISZ #TRAK JSB ITRAK LARGER THAN PREVIOUS. * LDA ABT2 OLD TRAKB + OLD #TRAK ADA ABT1 TO ABT7 FOR LIMIT STA ABT7 ON MOVE. LDA TRAKB STA ABT8 CLA SET STARTING STA ABT10 SECTOR # = 0 FOR BOTH STA ABT11 SOURCE AND DESTINATION TRACKS. * * MOVE PREVIOUS INFORMATION TO NEW SET OF TRACKS * AB11 JSB EXEC READ SECTOR DEF *+7 DEF P1 DEF ABT3 SOURCE LOGICAL UNIT DEF DBUF DBUF INPUT DEF P128 DEF ABT9 CURRENT TRACK DEF ABT10 CURRENT SECTOR * JSB EXEC WRITE SECTOR DEF *+7 DEF P2 DEF TRKLU DESTINATION LOGICAL UNIT DEF DBUF DEF P128 DEF ABT8 %m CURRENT TRACK DEF ABT11 CURRENT SECTOR * LDA ABT10 UPDATE SOURCE ADA P2 SECTOR #. CPA ABT4 IF = TO # SECTORS PER TRACK, CLA RESET TO ZERO STA ABT10 AND RESTORE. SZA,RSS IF RESET ISZ ABT9 ADD 1 TO CURRENT TRACK #. LDA ABT9 CHECK FOR TERMINATION CPA ABT7 TRACK #. JMP AB12 -YES. * LDA ABT11 UPDATE DESTINATION ADA P2 SECTOR #. CPA TRKS# IF = TO # SECTORS PER TRACK CLA RESET TO ZERO STA ABT11 AND RESTORE. SZA,RSS IF RESET, ISZ ABT8 ADD 1 TO CURRENT TRACK #. LDA TRAKB CHECK FOR POSSIBLE ADA #TRAK OVERFLOW OF NEW CPA ABT8 ALLOCATION. HLT 0 ?????????????????????????????????????? JMP AB11 -NO, CONTINUE COPY * AB12 LDA TRAKB SET UP "DREAD" STA DTRAK AND CLA READ IN SECTOR 0 STA DSECT OF FIRST TRACK JSB DREAD TO INITIALIZE. * * RELEASE OLD SET OF TRACKS * JSB EXEC DEF *+5 DEF P5 DEF ABT1 DEF ABT2 DEF ABT3 * LDA ABT5 RESET RELATIVE STA SSECT STARTING TRACK AND SECTOR LDA ABT6 FOR CURRENT STA STRAK LOAD. * * ADJUST RELATIVE DMAN IN SEGMENTS' IDS IF * PROCESSING SEGMENTS (MAIN'S RELATIVE * DMAN IS ALREADY SET UP - ZERO). * CLA,INA CPA ID# IF PROCESSING SEGMENTS RSS JMP AJST THEN ADJUST THEIR DMAN * * CHECK FOR DIFFERENT SIZE DISCS * LDA ABT4 IF # OF SECTORS IS THE SAME CPA TRKS# ON BOTH ALLOCATIONS, JMP AB0 THEN CONTINUE TO LOAD. * CLA IF NOT DOING MAIN/SEGMENT CPA MSEG LOADING, THEN ALSO JMP AB0 CONTINUE TO LOAD. * * NEED TO ADJUST BASE TRACK/SECTOR BASES FOR * MAIN AND SEGMENTS. * * AJST LDA ID# `{ SET INDEX AS # OF DEFINED CMA,INA DUMMY ID SEGMENTS STA ABT1 FOR MAIN/SEGMENT. CCB SET 'STRAK' & 'SSECT' TO STB ABT7 BE SET ONLY ONCE. LDA IDA (A)= STARTING ADDR. * AB14 ADA P8 SET (ABT2) = ADDR OF ID STA ABT2 SEGMENT WORD (DISC ADDR) ISZ ABT1 IF ABOUT TO UPDATE MAIN'S ID RSS JMP AB0 THEN AVOID - DMAN ALREADY ZERO. LDA ABT2,I GET DISC ADDR AND M177 ISOLATE AND SAVE STA ABT5 SECTOR #. LDA ABT2,I GET AGAIN ALF,ALF FOR RAL ISOLATING AND M377 TRACK #. MPY ABT4 MULTIPLY BY PREVIOUS # SECT/TRAK ADA ABT5 ADD SECTOR BASE, CLB DIVIDE BY NEW TRKS# TO GET NEW DIV TRKS# TRACK/SECTOR BASE. ISZ ABT7 IF 'STRAK' & 'SSECT' SET ONCE JMP *+3 THEN DO NOT MODIFY AGAIN. STA STRAK SET RELATIVE TRACK & SECTOR STB SSECT ADDR FOR NEXT ID SEGMENT. ALF,ALF ROTATE TRACK TO 14-07, RAR AND -OR- SECTOR # IOR B INTO 06-00, STA ABT2,I RESTORE WORD IN ID SEGMENT. LDA ABT2 (A)= ID SEGMENT (DUMMY) ADDR. INA JMP AB14 -CONTINUE TO PROCESS. * ABT1 NOP TEMPORARY ABT2 NOP ABT3 NOP STORAGE ABT4 NOP ABT5 NOP FOR ABT6 NOP ABT7 NOP "ABOUT" ABT8 NOP ABT9 NOP ROUTINE. ABT10 NOP ABT11 NOP ABT12 NOP ABT13 NOP ABT14 NOP SPC 1 RELLO NOP RELEASE ALL OWNED TRACKS BELOW CLA THE CURRENT TRAKB STA ABT2 CLEAR THE TRACK COUNT LDA TAT SET THE ATAT ADDR STA ABT3 FOR INDEXING LDB TATSD SET UP THE TRAKB STOP LDA TRKLU IF ON LU 3 SLA,RSS THEN CLB ADD TATSD ADB TRAKB ADD THE CURRENT BASE STB ABT5 SET AS THE LIMIT SPC 1 GA0 LDA ABT2 GET CURRENT TRACK CPA ABT5 END? JMP RELLO,I YES RETURN LDA ABT3,I NO IS THE TRACK CPA XEQT ASSIGNED TO ME? RSS IF SO SKIP JMP GA1 ELSE GO STEP THE PNTRS LDA P2 SET UP TO REALSE THE TRACK LDB TATSD IF ON CMB,INB LU 3 ADB ABT2 THE SSB,RSS TRACK AND LU INA MUST BE ADDJUSTED SSB FOR THE AUX DISC LDB ABT2 DST ABT6 SET FOR THE CALL JSB EXEC GIV THE TRACK BACK DEF *+5 DEF P5 DEF P1 DEF ABT7 DEF ABT6 SPC 1 GA1 ISZ ABT2 ISZ ABT3 STEP THE PNTRS JMP GA0 AND CONTINUE SKP * * SUBROUTINE: "MVIDS" MOVE ID SEGMENT * * PURPOSE: THIS IS A GENERAL ROUTINE TO PROCESS * THE DUMMY ID SEGMENTS GENERATED DURING * BOTH A NORMAL LOAD AND AN EDITING * OPERATION. IT PERFORMS THE FOLLOWING * FUNCTIONS ACCORDING TO THE TYPE OF * LOAD OPERATION: * * 1) NORMAL BG LOAD: * * -FIND BLANK ID SEGMENT * -MOVE DUMMY ID SPECIFIED BY * THE CONTENTS OF "IDA" TO * THE POSITION OF THE BLANK * ID SEGMENT IN THE SYSTEM AREA. * * 2) EDITING OPERATION: * * ADDITION: SAME AS FOR A NORMAL * LOAD EXCEPT THAT THE NEW * ID SEGMENT IS WRITTEN IN THE * APPROPRIATE AREA ON THE SYSTEM * DISC TO MAKE THIS A PERMANENT * ADDITION. * * * * CALLING SEQUENCE: (IDA) = ADDR. OF DUMMY * ID SEGMENT * * (A):= 0 FOR NORMAL LOAD * * = 1 FOR EDITING ADDITION * * (B) = ID SEGMENT ADDR IF A * PARTICULAR ONE IS TO *  BE USED FOR ADDITION. * * (P) JSB MVIDS * (P+1) -ERROR - NO BLANK ID'S- * (P+2) - NORMAL RETURN- * SKP * MVIDS NOP STA ABT10 SAVE EDIT NO-EDIT FLAG STB ABT11 SAVE DESTINATION ID ADDR * LDA DESA INITIALIZE DESTINATION STA DESAM ADDR ARRAY PNTR. LDA RTORG SUBTRACT FWA OF R/T AREA CMA,INA FROM SOURCE ID ADDR TO ADA IDA CHECK IF SOURCE IS IN DUMMY. SSA,RSS SOURCE ID IN SYSTEM AREA ? JMP DMYMV NO, THEN IT IS IN DUMMY. * * SOURCE ID IS IN SYSTEM AREA AND SO DESTINATION * MUST BE SPECIFIED. ONLY MEM1 TO DMAN NEED TO * BE MOVED FROM SOURCE TO DESTINATION. * LDB IDA ADB P14 (B) = NAM5 ADDR OF SOURCE ID JSB MEM? GET ADDR OF MEM1 NOP STB SRADR SET FWA OF SOURCE LDB ABT11 GET DESTINATION ID ADDR ADB P14 (B)=NAM5 ADDR OF DESTINATION ID JSB MEM? GET ADDR OF MEM1 NOP LDA N5 SET MOVE COUNT = 5 WORDS STA NUMWD FOR MEM1 TO DMAN. JSB STRFR TRANSFER ADDRES INTO ARRAY JMP MOVID MOVE TO SYSTEM AREA * * SET ADDRESS ARRAY FOR CONSEQUETIVE MOVE. * (A) = NUMBER OF WORDS TO BE MOVED * (B) = FIRST WORD DESTINATION ADDR * STRFR NOP SADRS STB DESAM,I SET DESTINATION ID WORD ADDR ISZ DESAM MOVE UP TO NEXT ARRAY STORAGE INB BUMP ID WORD ADDR INA,SZA ALL ADDRES STORED ? JMP SADRS NO, THEN CONTINUE. JMP STRFR,I RETURN * * * SOURCE ID IS IN DUMMY AREA. SET SOURCE * ADDRESS AND COUNT AND ALSO CHECK IF * DESTINATION ID HAS BEEN SPECIFIED. * * DMYMV LDB IDA SET ADDR STB SRADR OF SOURCE ID. LDA ID# CHECK IF SOURCE CMA,INA ID IS FOR CPA ID## MAIN (LONG ID) ? CLA,RSS SET FLAG FOR LONG ID = 0 CCA SET FLAG FOR SHORT ID = -1 STA SSFLG SOURCE ID TYPE FLAG LDB N9 SET MOVE COUNT=-9 (SHRT ID) SZA,RSS IF LONG ID LDB N13 THEN SET MOVE COUNT=-13. STB NUMWD LDB ABT11 GET DESTINATION ID ADDR SZB,RSS DESTINATION SPECIFIED ? JMP FBLNK NO, THEN FIND BLANK ID. * * DESTINATION ID HAS BEEN SPECIFIED * ADB P14 (B)=NAM5 ADDR OF DESTINATION ID JSB MEM? FIND IF ID LONG OR SHORT. CCB,RSS SHORT ID, SET (B)=-1. CLB LONG ID, SET (B)=0. SZB DESTINATION ID LONG ? JMP SCHK NO, GO CHECK SOURCE ID. CPB SSFLG YES. IS SOURCE ID ALSO LONG. JMP DB13B YES, THEN SET 13 WORD TRANSFER. JMP SDS9B NO, SET 9 TO 13 WORD TRANSFER. SCHK CPB SSFLG IS SOURCE ID SHORT TOO ? JMP DS9S YES, SET 9 TO 9 WORD TRANSFER. JMP MVIDS,I ERROR RETURN (LONG TO SHORT ILLEGAL). * * FIND BLANK ID OF APPROPRIATE LENGTH * FBLNK JSB BLKID FIND BLANK ID ASSIGNMENTS LDB SSFLG GET SOURCE ID FLAG SZB,RSS SOURCE ID SMALL ? JMP SLNG NO, ANALYZE FOR LONG ID. LDA BID4 SET ADDR OF SMALL ID STA ABT11 W/O DISC ALLOCATION. LDB BID8 GET # OF SMALL IDS W/O DISC ALLOC SZB ANY SMALL IDS W/O DISC ALLOCATION ? JMP DS9S YES, SET 9 WORD SMALL-TO-SMALL TRFR LDA BID3 SET ADDR OF SMALL ID STA ABT11 WITH LEAST DISC ALLOCATION. LDB BID6 (B)=3 SMALL IDS WITH & W/O DSC ALLOC SZB ANY AVAILABLE ? JMP DS9S YES, SET 9 WORD SMALL-TO-SMALL TRFR * SLNG LDB BID7 GET # OF LONG IDS W/O DISC ALLOC LDA BID2 (A)=LONG ID ADDR W/O DISC ALLOC SZB ANY LONG ID W/O DISC ALLOCATION ? JMP SSCHK YES LDA BID1 (A)=LONG ID ADDR WITH LEAST DSC ALLOC LDB BID5 (B)=# OF LONG IDS WITH & W/O DSC ALLC SZB,RSS 'ANY LONG ID WITH DISC ALLOCATION ? JMP MVIDS,I NO, DO ERROR RETURN. * SSCHK STA ABT11 SET DESTINATION ID ADDR LDA SSFLG GET SOURCE ID FLAG SZA,RSS SOURCE ID LONG ? JMP DB13B YES, SET 13 WORD BIG-TO-BIG TRANSFER SKP SDS9B LDB IDA ADB P3 (B)=NAM5 ADDR IN SHORT ID LDA B,I GET NAM5 WORD CONTAINING 'SS' BIT XOR M20 MASK OFF 'SS' BIT STA B,I AND STORE BACK NAM5 * * * TRANSFER FROM SMALL ID IN DUMMY AREA TO * BIG ID IN SYSTEM AREA. * LDB ABT11 GET DESTINATION ID ADDR ADB P7 (B)=ADDR OF PRIM ENTRY POINT STB DESAM,I SET ADDR IN ARRAY ISZ DESAM ADB P5 (B)=ADDR OF NAM12 LDA N3 (A)=-3 FOR TRFR OF NAM12 TO NAM5 JSB STRFR TRANSFER ADDR PNTRS ADB P7 (B)=ADDR OF MEM1 LDA N5 (A)=-5 TO TRFR MEM1 TO DMAN PNTRS JSB STRFR TRANSFER MEM1 TO DMAN ADDRES JMP MOVID DO MOVE TO SYSTEM AREA * * * TRANSFER FROM SMALL ID IN DUMMY AREA TO * SMALL ID IN SYSTEM AREA. * DS9S LDB ABT11 (B)=DESTINATION ID ADDR ADB P11 POSITION TO PRENT OF ID SEG LDA N9 (A)=-9 TO TRANSFER 9 WORDS JSB STRFR TRANSFER ADDR PNTRS JMP MOVID DO MOVE TO SYSTEM AREA * N3 DEC -3 P11 DEC 11 * * TRANSFER FROM BIG ID IN DUMMY AREA * TO BIG ID IN SYSTEM AREA. * DB13B LDB ABT11 GET DESTINATION ID ADDR ADB P6 (B)=ADDR OF PRIORITY WORD LDA N2 (A)=-2 TO TRFR PRIOTY & PRM EN PNT JSB STRFR TRANSFER ADDR PNTRS ADB P4 (B)=ADDR OF NAM12 LDA N3 (A)=-3 TO TRFR NAM12 TO NAM5 PNTRS JSB STRFR TRANSFER ADDR PNTRS ADB P2 (B)=ADDR OF RESL WORD LDA N3 (A)=-3 FOR RESL TO TMDY2 ADDR TRFR JSB STRFR TRANSFER ADDR PNTRS ADB P2 (B)=ADDR OF MEM1 LDA N5 (A)=-5 FOR MEM1 TO DMAN ADDR TRFR JSB STRFR ? TRANSFER ADDR PNTRS * AND DO MOVE TO SYSTEM AREA. SKP * * * MOVE INTO SYSTEM ID AREA TAKES PLACE FROM * SOURCE (FIRST WORD ADDR IN 'SRADR' AND * AND BUMPED CONSEQUETIVELY) TO DESTINATION * (ADDRESS POINTERS SET UP IN 'DESAM' ARRAY). * NUMBER OF WORDS TO BE MOVED IS IN 'NUMWD'. * MOVID LDB DESA INITIALIZE DESTINATION STB DESAM ADDR ARRAY PNTR. KEPON LDA SRADR,I GET WORD FROM SOURCE ID LDB DESAM,I (B)=ADDR OF DESTINATION ID WORD JSB SYSET STORE IN SYSTEM ID LDB ABT10 GET EDIT FLAG SZB,RSS PERMANENT ADDITION ? JMP UPDT NO LDB DESAM,I YES, SO RESTORE REG-B. JSB SYRUW STORE ON DISC UPDT ISZ DESAM BUMP DESTINATION ARRAY ADDR ISZ SRADR BUMP SOURCE ADDR OF ID WORD ISZ NUMWD ALL WORDS MOVED ? JMP KEPON NO, DO MORE. * LDB ABT11 GET DEST ADDR ADB P14 BUMP TO NAM5 ADDR LDA B,I GET TYYPE AND P7 CPA P5 IS IT A SEGMENT? CLA,RSS YES, SET SSFLG=0 CCA NO, SET SSFLG=-1 STA SSFLG SPC 1 IFZ ******* BEGIN MEU CODE ******** JSB MEM? USE MEM? TO GET ADDR OF MEM1 NOP IGNORE SHORT RETURN ******* END MEU CODE ********** XIF SPC 1 ISZ SSFLG SKIP IF NOT SEGMENT JMP MOVI2 BUT IF SEGMENT TRY FIND HIGH LDA ABT11 FIND LOW SINCE THIS IS MAIN STA #IDAD SAVE ADDR OF THIS ID SPC 1 IFZ ******* BEGIN MEU CODE ******** LDA B,I (B) STILL IS ADDR OF MEM1 ALF,RAL SHIFT PAGE NUMBER RAL TO BITS 0-4 AND M37 STA #MNPG SAVE LOWEST PAGE # ******* END MEU CODE ********** XIF SPC 1 * MOVI2 EQU * SPC 1 IFZ ******* BEGIN MEU CODE ******** INB INCRE TO MEM2 CCA SUBT 1 FCROM MEM2 FOR ACTUAL LAST WORD ADA B,I ALF,RAL SHIFT PAGE NUMBER RAL TO BITS 0-4 AND M37 LDB A CMB,INB IS THIS PAGE # ADB #MXPG HIGHER THAN PREVIOUS SSB HIGHEST PAGE #? STA #MXPG YES, SET NEW HIGH ******* END MEU CODE ********** XIF SPC 1 ISZ MVIDS BUMP TO SUCCESSFUL RETURN JMP MVIDS,I **RETURN** * * 'MVIDS' CONSTANTS * NUMWD NOP NUMBER OF WORDS TO BE MOVED SRADR NOP FWA OF SOURCE ID MOVE DESA DEF *+1 ARRAY CONTAINING ADDRES BSS 13 IN DESTINATION ID AREA. DESAM NOP CURRENT PNTR TO ARRAY SSFLG NOP 0 FOR LONG, -1 FOR SHORT SOURCE ID * SKP * * SUBROUTINE: "C#S" CALCULATE # SECTORS * * THIS ROUTINE CALCULATES THE TOTAL # OF WORDS * IN THE MAIN BODY AND BASE PAGE AREA FOR A PROG * AND DETERMINES THE # OF SECTORS REQUIRED. * * CALL: (A) = ADDRESS OF MEM1 IN ID SEGMENT * * (P) JSB C#S * (P+1) -RETURN- (A) = # SECTORS REQUIRED * * C#S NOP STA ABT4 INA SET STA ABT5 ADDRES INA OF STA ABT6 BOUNDS INA WORDS. STA ABT7 * LDA ABT4,I DETERMINE CMA,INA # OF ADA ABT5,I MAIN WORDS STA ABT1 LDA ABT6,I DETERMINE CMA,INA # OF ADA ABT7,I BASE PAGE WORDS CLB DIV P64 DIVIDE BP BY SZB 64 AND INA ROUND AND SLA SKIP IF EVEN SECTOR COUNT INA ELSE BUMP TO EVEN SECTOR COUNT STA ABT2 SAVE. CLB DIVIDE MAIN # WORDS LDA ABT1 BY 64, DIV P64 ROUND TO WHOLE SECTOR SZB INA SLA IF ODD SECTOR COUNT INA THEN MAKE EVEN. ADA ABT2 ADD TO BASE PAGE COUNT FOR TOTAL $ JMP C#S,I RETURN. SKP * * SUBROUTINE: "MEM?" IDENTIFY LONG/SHORT ID SEGMENT * * THIS SUBROUTINE IDENTIFIES WHETHER THE ID SEGMENT * UNDER CONSIDERATION IS LONG OR SHORT. * * (NOTE: THIS ROUTINE NOT USED FOR DUMMY ID SEGMENTS * SET UP BY THE LOADER) * * CALL: (B)=ADDRESS OF NAM5 WORD IN ID SEGMENT * (P) JSB MEM? * * RETURN (P+1) FOR SHORT ID SEGMENT * (P+2) FOR LONG ID SEGMENT * REG-B = ADDRESS OF MEM1 IN ID SEGMENT. * REG-A = OCT 20 IF (P+1) RETURN * = 0 IF (P+2) RETURN * * MEM? NOP LDA B,I GET NAM5 WORD FROM ID SEG AND M20 MASK IN 'SS' BIT INB (B)=MEM1 ADDR OF SHORT ID SZA LONG ID ? ('SS' BIT = 0) JMP MEM?,I NO, SHORT ID RETURN. ADB P7 (B)=MEM1 ADDR OF LONG ID ISZ MEM? BUMP TO (P+2) RETURN JMP MEM?,I LONG ID RETURN * SKP * * * * * * * SUBROUTINE: "BLKID" * * THIS ROUTINE SCANS THE SYSTEM ID SEGMENTS AND * AND RECORDS THE FOLLOWING : * * BID1 = ADDRESS OF BIG ID WITH LEAST DISC ALLOC. * BID2 = ADDRESS OF BIG ID WITHOUT DISC ALLOCATION * BID3 = ADDRS OF SMALL ID WITH LEAST DISC ALLOC. * BID4 = ADDRS OF SMALL ID WITHOUT DISC ALLOCATION * BID5 = # OF BIG IDS WITH & WITHOUT DISC ALLOC. * BID6 = # OF SMALL IDS WITH & WITHOUT DISC ALLOC. * BID7 = # OF BIG IDS WITHOUT DISC ALLOCATION * BID8 = # OF SMALL IDS WITHOUT DISC ALLOCATION * * (NOTE: ABOVE PARAMETERS ARE ZERO IF NOT SET) * * * CALL: (P) JSB BLKID * (P+1) -RETURN- * (A) = # AVAIL (SMALL+BIG) OR 0 * IF NO BIG AVAILABLE (TOTAL * INCLUDES WITH AND W/O DISC * ALLOCATION). * (B) = MEANINGLESS * BLKID NOP CLA CLEAR STA BID1 ADDR OF BIG WITH LEAST DISC ALLOC STA BID2 ADDR OF BIG WITHOUT DISC ALLOCATION STA BID3 ADDR OF SMALL WITH LEAST DISC ALLOC STA BID4 ADDR OF SMALL WITHOUT DISC ALLOC STA BID5 # OF BIG IDS WITH & WITHOUT DISC ALOC STA BID6 # OF SMALL IDS WITH & W/O DISC ALLOC STA BID7 # OF BIG IDS WITHOUT DISC ALLOCATION STA BID8 # OF SMALL IDS W/O DISC ALLOCATION STA DISPS CLEAR DISC ALLOC FOR SHORT ID STA DISPL AND FOR LONG ID LDA KEYWD INITIALIZE ADDR OF STA KEYPT KEYWORD LIST. RSS SKIP ADDR BUMP FOR FIRST TIME BLK1 ISZ KEYPT BUMP KEYWORD ADDR LDB KEYPT,I GET KEYWORD SZB,RSS IF END OF LIST JMP BLK3 THEN GO TO SET COUNTS. ADB P12 (B)=ADDR OF NAM12 CLA STA FLGSS CLEAR ID TYPE FLAG CPA B,I IF NAM12=0 JMP BLK2 THEN BLANK ID. JMP BLK1 ELSE CONTINUE SCAN * * ANALYZE BLANK ID * BLK2 ADB P2 (B)=ADDR OF NAM5 JSB MEM? FIND IF ID LONG OR SHORT CCA,RSS SHORT ID, SET (A)=-1. CLA LONG ID, SET (A)=0. STA FLGSS SET ID TYPE FLAG ADB P4 (B)=ADDR OF DMAIN LDA B,I GET DMAN SZA ANY DISC ALLOCATION ? JMP DSCAL YES * LDA FLGSS GET SHORT/LONG ID FLAG SZA,RSS LONG ID ? JMP LGND YES SHND ISZ BID8 BUMP COUNT FOR SHORT ID W/O DSC CLA LDB KEYPT,I GET ID SEG ADDR CPA BID4 ADDR OF 1ST SMALL W/O DSC SET ? STB BID4 NO, SET ADDR OF SMALL ID. JMP BLK1 YES, CONTINUE SCAN. LGND ISZ BID7 COUNT LONG ID W/O DSC ALOC. LDB KEYPT,I GET ID SEG ADDR CPA BID2 ADDR OF 1ST BIG W/O DSC SET ? STB BID2 NO, SET ADDR OF LONG ID. JMP BLK1 YES, CONTINUE SCAN. * * P15 DEC 15 * DSCAL LDA KEYPT,I GET ID SEG ADDR ADA P15 (A)=ADDR OF MEM1 OF SHORT ID LDB FLGSS GET ID TYPE FLAG ]HFBSZB,RSS LONG ID ? JMP DLGND YES,ADJUST (A) FOR MEM1 OF BIG ID. JSB C#S DETERMINE # OF SECTORS LDB DISPS GET DISC ALLOC COMPARATOR SZB,RSS ANY DISC ALLOC SET UP YET ? JMP SHNEW NO, THEN SET THIS ONE. STA B SAVE SEC COUNT TEMPORARILY CMA,INA SUBTRACT THIS SPACE FROM PREVIOUS ADA DISPS SSA IS THIS DISC SPACE < PREVIOUS ? JMP SHCNT NO, LET PREVIOUS BE THERE. LDA B RESTORE SECTOR COUNT SHNEW STA DISPS SET DISC SPACE ALLOCATION LDB KEYPT,I SET ADDR OF SMALL ID WITH STB BID3 LEAST DISC ALLOCATION. SHCNT ISZ BID6 COUNT SHORT IDS WITH DISC ALLOC JMP BLK1 CONTINUE SCAN * DLGND ADA P7 (A)=MEM1 ADDR OF LONG ID JSB C#S DETERMINE NUMBER OF SECTORS LDB DISPL GET DISC ALLOC COMPARATOR SZB,RSS ANY ALLOC SET UP YET ? JMP LGNEW NO, THEN SET THIS ONE IN. STA B SAVE SECTOR COUNT TEMPORARILY CMA,INA SUBTRACT THIS ALLOC ADA DISPL FROM PREVIOUS. SSA IS THIS ALLOC LESS ? JMP LGCNT NO LDA B RESTORE SECTOR COUNT LGNEW STA DISPL SET ALLOCATION LDB KEYPT,I SET ADDR OF LONG ID STB BID1 WITH LEAST ALLOCATION. LGCNT ISZ BID5 COUNT LONG IDS WITH H JMP BLK1 DISC ALLOCATION & CONTINUE SCAN. * BLK3 LDA BID8 SET BID8= # OF SMALL IDS ADA BID6 WITH AND WITHOUT STA BID6 DISC ALLOCATION. LDA BID7 SET BID5= # OF LONG IDS ADA BID5 WITH AND WITHOUT STA BID5 DISC ALLOCATION. SZA,RSS ANY BIG IDS AVAILABLE ? JMP BLKID,I NO, RETURN WITH (A)=0. ADA BID6 YES, RETURN WITH (A) = TOTAL JMP BLKID,I NUMBER OF IDS. * * * CONSTANTS * BID1 NOP BID2 NOP BID3 NOP BID4 NOP BID5 NOP BID6 NOP BID7 NOP BID8 NOP FLGSS NOP =0 FOR LONG ID, NON-ZERO FOR SHORT DISPL NOP LONG ID SECTOR COUNT DISPS NOP SHORT ID SECTOR COUNT KEYPT NOP KEYWORD * SKP * * * SUBROUTINE: "MIDN" MATCH ID SEGMENT NAME * * THIS ROUTINE SEARCHES THE SYSTEM ID SEGMENTS * TO FIND A MATCH WITH THE NAME IN THE CURRENT * DUMMY ID SEGMENT. * * CALL: (P) JSB MIDN * (P+1) -NO MATCH RETURN- * (P+2) -MATCH RETURN, ID SEG ADDR IN ABT1 AND (B) * MIDN NOP LDA KEYWD INITIALIZE STA ABT1 KEYWORD LIST ADDR. * MIDN1 LDB ABT1,I IF END-OF-LIST, SZB,RSS RETURN TO JMP MIDN,I NO MATCH RETURN, P+1. * ADB P12 COMPARE LDA B,I NAME CPA NAM12,I AREAS INB,RSS OF JMP MIDN2 DUMMY ID SEG. LDA B,I AND CPA NAM34,I CURRENT INB,RSS SYSTEM ID SEG. JMP MIDN2 LDA B,I STA BLKID SAVE THE TYPE WORD AND M7400 STA B LDA NAM5,I AND M7400 CPA B JMP MIDN3 MATCH - MIDN2 ISZ ABT1 INDEX FOR NEXT ID SEGMENT- JMP MIDN1 CONTINUE SCAN. * MIDN3 ISZ MIDN MATCH - ADJUST RETURN TO (P+2) LDB ABT1,I (B) = ADDR OF MATCH ID SEG. LDA BLKID GET THE ID WORD AND P7 STRIP TO TYPE CPA P4 Q IF CORE RSS CPA P1 RESIDENT JMP ERL11 ERROR GO SEND MESSAGE AND ABORT JMP MIDN,I RETURN. SPC 1 ERL11 LDA ASL11 SEND L11 MESSAGE JMP ABOR AND ABORT SPC 2 ASL11 ASC 1,11 SKP * * SUBROUTINE: 'SYRUW' SYSTEM DISC READ/UPDATE/WRITE * * THIS ROUTINE PROVIDES FOR UPDATING A WORD IN * THE ID SEGMENT OR 'TAT' AREA OF THE SYSTEM DISC. * * CALL: (A) = VALUE TO BE STORED IN WORD * (B) = ADDR OF WORD IN ID SEG AREA OR TAT * * (P) JSB SYRUW * (P+1) -RETURN- * * SYRUW NOP STA SYR1 SAVE VALUE LDA KEYWD,I SUB. FWA OF 1ST ID SEGMENT CMA,INA AND ADD IN ADA B POSITION OF 1ST ADA IDSDP ID SEG TO GET RELATIVE ADDR. CLB DIVIDE DIV P64 BY 64 ADB ALBUF SET ADDR STB SYR2 WITHIN LBUF STA B SAVE REL SECTOR # LDA IDSDA GET DISC ADDR OF 1ST ID SEG, AND M177 ISOLATE SECTOR # AND ADB A ADD TO REL SECTOR # LDA IDSDA GET AND ALF,ALF SAVE STARTING RAL TRACK #. AND M377 STA UTRAK LDA B DIVIDE REL SECTOR CLB # BY # SECTORS/ DIV SECT2 TRACK STB USECT AND SET SECTOR # ADA UTRAK SET ABS. STA UTRAK TRACK #. * JSB UREAD READ IN SECTOR * LDA SYR1 UPDATE STA SYR2,I WORD ISZ P1 CHANGE 1 TO 2 (FOR UPDATE) JSB UREAD RE-WRITE SECTOR CLA,INA RESET 1 STA P1 IN 'P1'. * JMP SYRUW,I RETURN. * SYR1 NOP SYR2 NOP SKP * * SUBROUTINE: "ITRAK" -INTIIALIZE TRACK ALLOCATION * * CALL: "#TRAK" CONTAINS # OF TRACKS * TO BE ALLOCATED * * A AND B MEANINGLESS * (P) JSB ITRAK * (P+1) -RETURN- A AND B MEANINGLESS * * THE FOLLOWING WORDS OFR STORAGE ARE SET * AND ALL TRACKS HAVE BEEN SET TO ZERO: * * #TRAK - # OF TRACKS ALLOCATED * TRAKB - STARTING TRACK # (BASE TRACK) * TRKLU - LOGICAL UNIT OF DISC * TRKS# - # OF SECTORS PER TRACK * * IF THE TRACK ALLOCATION CANNOT BE MADE, THE * LOADER PRINTS THE MESSAGE * "/LOADR: WAITING FOR DISC SPACE" * AND REPEATS THE REQUEST WITH THE SUSPENSION * OPTION. THE LOADR CONTINUES WHEN TRACKS BECOME * AVAILABLE. THE LOADR MAY BE ABNORMALLY * TERMINATED BY THE OPERATOR IN THIS STATE. * * ITRAK NOP LDA #TRAK SET SIGN BIT OF #TRAK WORD IOR MSIGN FOR NO SUSPENSION IF TRACKS STA #TRAK NOT AVAILABLE. * ITRK1 JSB EXEC REQUEST DEF *+6 DISC DEF P4 SPACE DEF #TRAK DEF TRAKB DEF TRKLU DEF TRKS# * LDA #TRAK REMOVE RAL,CLE,ERA SIGN BIT FROM STA #TRAK # TRACKS WORD. CCA IF STARTING TRACK # = -1, CPA TRAKB THEN NO TRACKS AVAILABLE, JMP ITRK3 GO TO PRINT MESSAGE * * LDA TRKLU DSKUN = DISC'S STA DSKUN LU # LDA TRAKB ITRKB = STARTING TRACK # ADA #TRAK ITRK6 = ENDING TRACK STA ITRK6 # +1. JMP ITRAK,I RETURN * * PRINT WAITING MESSAGE * ITRK3 LDA P22 LDB ITRKM JSB SYOUT JMP ITRK1 * ITRKM DEF *+1 ASC 11,WAITING FOR DISC SPACE * ITRK6 NOP * * #TRAK NOP # OF TRACKS ALLOCATED TRAKB NOP STARTING TRACK # (BASE TRACK) TRKLU NOP LOGICAL UNIT OF DISC TRKS# NOP # OF SECTORS PER TRACK SPOS NOP RELATIVE SECTOR POSITION TSECT NOP TEMPORARY SECTOR AND TTRAK NOP TRACK #. SKP * * 'EDIT' COMPLETION * ED00 LDA MSEG GET MAIN/SEG FLAG SZA PROCESSING MAIN/SEG ? JMP ED18 YES * * SINGLE PROGRAM OPERATION * CLA,INA CHECK  CPA EDFLG TYPE JMP ED10 ADDITION * * PROGRAM REPLACEMENT * E0D JSB MIDN FIND MATCHING ID SEGMENT JMP ED10 -NO, TREAT AS ADDITION. * ED0 STB ED25 SAVE MATCH ID ADDR. ADB P14 (B)=NAM5 ADDR JSB MEM? GET ADDR OF MEM1 NOP STB A CALCULATE JSB C#S # SECTORS STA ED60 AND SAVE * ED001 LDB TAT SET SIGN BIT LDA B,I ON SYS DISC TO TEST JSB SYRUW WRITE PROTECT BEFORE DAMAGE IS DONE * LDB ED25 ADB P12 SET ADDR OF NAM12 STB LH1 OF ID SEG. JSB $LIBR TURN OFF NOP INTERRUPT SYSTEM ADB P2 (B)=NAM5 ADDR OF MATCHED ID LDA B,I GET NAM5 AND AND P7 MASK IN PROG TYPE. CPA P5 IS THIS A SEGMENT ? JMP ED004 YES, FORGET DORMANY CHECK. ADB N6 (B)=ADDR OF SUSPEND WORD LDA B,I POINT OF SUSPENSION? SZA ZERO - CONTINUE JMP ED003 SUSPEND ADB P7 GET LDA B,I STATUS: SZA DORMANT? JMP ED003 NO - SUSPEND ADB P2 GET LDA B,I TIME LIST: AND BIT12 IN LIST? SZA,RSS YES - SUSPEND JMP ED004 NO - CONTINUE * SKP ED003 JSB $LIBX RESTORE DEF *+1 INTERRUPT DEF *+1 SYSTEM LDA P18 PRINT MESSAGE LDB MES70 AND SUSPEND JSB SYOUT PROG IS NON-DORMANT JSB EXEC AND/OR HAS A NON-ZERO DEF *+2 PT OF SUSP AND/OR IS DEF P7 IN THE TIME LIST - JMP ED001 CHECK AGAIN * MES70 DEF *+1 ASC 9,SET PRGM INACTIVE BIT12 OCT 10000 LH1 NOP * ED004 CLB STB LH1,I ZERO ISZ LH1 NAME STB LH1,I IN ISZ LH1 CORE LDA LH1,I ID AND M20 @ SEGMENT (LEAVE 'SS' BIT) STA LH1,I JSB $LIBX RESTORE DEF *+1 INTERRUPT DEF *+1 SYSTEM * * RELEASE "OLD" TRACKS * LDB ED25 GET MATCHED ID SEG ADDR ADB P14 (B)=NAM5 ADDR JSB MEM? GET ADDR OF MEM1 NOP ADB P4 (B)=ADDR OF DMAIN LDA B,I GET DISC WORD AND SAVE STA ED63 TEMPORARILY. SSA TRACKS ON LU3 ? JMP CLEAR YES, THEN RELEASE TRKS. CMA,INA SUBTRACK FROM DISC LIB ADDR ADA DSCLB AND IF SSA,RSS IN SYSTEM AREA JMP ED01 THEN DON'T RELEASE TRKS CLEAR CLA CLEAR JSB SYSET DISC WORD. JSB SYRUW DISC TOO LDB ED63 RESTORE DISC WORD TO B. LDA ED60 JSB DREL GO RELEASE TRACKS UNLESS GLOBAL * SKP ED01 LDB ED25 GET ID SEGMENT ADDR TO B JSB TATCL GO CLEAR ANY TRACKS ASSIGNED TO PGM LDB ED25 CLEAR ADB P12 NAME STB ED63 WORDS (3) LDB N3 STB ED60 ED02 CLA CCB CPB ED60 IF CLEARING NAM5 LDA LH1,I THEN GET SAME VALUE AS IN CORE LDB ED63 JSB SYRUW ISZ ED63 ISZ ED60 JMP ED02 LDA OPCOD CPA P4 IF PURGE OPERATION JMP EXIT THEN DONE SO GO TERMINATE JMP PADD GO TO TREAT AS ADDITION * * * PROGRAM ADDITION * ED10 CLA CLEAR MATCHED STA ED25 ID SEG ADDR STORAGE. RSS SKIP MESSAGE OUTPUT FOR NOW ED03 JSB NOIDS GO TELL THER ARE NO ID SEGMENTS PADD JSB BLKID DETERMINE # BLANK ID'S. LDB ID## CMB,INB CPB ID# IF LOOKING FOR MAIN'S ID JMP BIGID THEN SKIP SETTING UP FOR SMALL LDA BID6 (A)=TOTAL # OF SMALL IDS LDB BID8 (B)=# OF SMALL IDS WITHOUT DISC ALOC SZA SETTLE FOR LONG IF SMALL UNAVAILABLE  JMP *+3 SKIP SETTING FOR LONG IDS BIGID LDA BID5 (A)=TOTAL # OF LONG IDS LDB BID7 (B)=# OF LONG IDS WITHOUT DISC ALLOC SZA,RSS IF NONE, JMP ED03 PRINT MESSAGE CPA B IF NONE WITH DISC ALLOC, JMP NTRM7 GO TO USE FIRST BLANK. * LDA IDA GET ID SEGMENT ADDR ADA P4 (A)=MEM1 ADDR OF SHORT ID LDB ID## CMB,INB CPB ID# IF PROCESSING MAIN ADA P4 THEN (A)=MEM1 ADDR OF LONG ID JSB C#S CALCULATE # OF SECS REQUIRED STA ED20 SAVE # OF SECTORS CMA,INA SAVE STA ED21 NEGATIVE # OF SECTORS LDA KEYWD SAVE STARTING KEYWORD STA ED22 LIST ADDR. CLA CLEAR STA ED23 ACCUMULATOR * ED11 LDB ED22,I GET NEXT ID SEGMENT ADDR. SZB,RSS JMP ED14 -END OF LIST * ADB P12 CHECK NAME(1) CLA IF CPA B,I = JMP ED17 0, CHECK FURTHER. ED12 ISZ ED22 CHECK JMP ED11 NEXT SEGMENT. * ED17 ADB P2 (B)=NAM5 ADDR JSB MEM? GET ADDR OF MEM1 CLA (REG-A NOT 0 FOR SHORT ID RETURN) ADB P4 (B)=ADDR OF DMAIN CPA B,I IF NO DISC ALLOC TO THIS SEG JMP ED12 THEN CONTINUE SCAN. * LDA B ADA N4 (A)=MEM1 ADDR JSB C#S GET SECTOR COUNT STA B SAVE ADA ED21 SUBTRACT DUMMY FROM THIS SSA # OF SECTORS. JMP ED12 IF DUMMY >, CONTINUE SCAN. * LDA ED23 GET PREVIOUS MIN # SECTORS SZA,RSS IF 0, JMP ED13 GO TO USE THIS ALLOCATION. CMA,INA SUBTRACT ADA B PREVIOUS FROM NEW, SSA,RSS USE NEW # IF < OLD. JMP ED12 NO, KEEP CHECKING ED13 STB ED23 SET ALLOCATION #. LDA ED22,I ALSO, SET STA ED24 ID SEGMENT ADDR. i JMP ED12 GO TO CHECK NEXT. * * * MODIFY WORD IN ID IN SYSTEM AREA * MODID NOP JSB SYSET STORE IN CORE JSB SYRUW STORE ON DISC JMP MODID,I RETURN * * ED14 LDA ED23 IF SPACE NOT FOUND IN SYSTEM SZA,RSS AREA, GO TO USE A BLANK ID SEG JMP NTRM7 AND KEEP PROG ON USER TRACKS * SKP * * * MOVE PROGRAM INTO SYSTEM AREA * LDB IDA GET DUMMY ID ADDR ADB P8 (B)=DMAN ADDR OF SHORT ID LDA ID## CMA,INA CPA ID# IF PROCESSING MAIN ADB P4 THEN (B)=DMAN ADDR OF LONG ID LDA B,I GET RELATIVE STARTING ALF,ALF TRACK # RAL AND AND M377 ADD ADA TRAKB BASE TRACK. STA TRAKP SET ABSOLUTE TRACK ADDR LDA B,I GET DMAN AGAIN AND M177 MASK IN SEC ADDR STA ED62 SET SECTOR ADDR * LDB ED24 GET DESTINATION ID ADDR ADB P14 (B)=ADDR OF NAM5 JSB MEM? GET ADDR OF MEM1 NOP ADB P4 (B)=ADDR OF DMAIN LDA B,I GET DESTINATION AREA ON SYS DSC ALF,ALF SET STARTING RAL TRACK AND M377 NUMBER. STA ED66 LDA B,I AND M177 SET STARTING STA ED67 SECTOR NUMBER. LDA P2 SET STA DESLU DESTINATION LU. LDA ED23 GET NUMBER OF ADA ED21 SECTORS LEFT OVER. SZA,RSS IF NO SECTORS LEFT JMP MPRG THEN ONLY MOVE THE PROG. SKP * * ALLOCATE LEFTOVER SPACE TO A BLANK * ID SEGMENT WITHOUT DISC ALLOCATION. * MPY P64 FIND # OF WORDS LEFT OVER STA ED23 AND SAVE FOR LATER. JSB BLKID FIND BLANK ID ALLOCATION LDB BID7 (B)=# OF IDS W/O DISC ALLOC SZB ANY BIG ID W/O DISC AVAIL ? JMP LFND YES, SET IT UP FOR ALLOC.9 LDB BID8 (B)=# OF SMALL IDS W/O DSC ALOC SZB,RSS ANY SMALL ONES AVAILABLE ? JMP MPRG NO, THEN GO TO MOVE PROG. LDB BID4 (B)=ADDR OF SHORT ID W/O DSC ALOC ADB P15 (B)=MEM1 ADDR OF SHORT ID JMP SBND SKIP OVER LONG ID'S SET UP LFND LDB BID2 (B)=ADDR OF LONG ID W/O DISC ALOC ADB P22 (B)=MEM1 ADDR OF LONG ID SBND STB BID2 SET ADDR OF MEM1 CLA JSB MODID SET LOW MAIN = 0 ISZ BID2 SET ADDR OF MEM2 LDA ED23 GET NUMBER OF WORDS LEFT OVER LDB BID2 GET ADDR OF MEM3 JSB MODID SET HIGH MAIN=WORDS LEFT OVER ISZ BID2 SET ADDR OF MEM3 LDB BID2 SET LOW BASE =0 CLA JSB MODID ISZ BID2 SET ADDR OF MEM4 LDB BID2 GET MEM4 ADDR CLA JSB MODID SET HIGH BASE =0 ISZ BID2 SET ADDR OF DMAN LDA ED67 GET STARTING SECTOR ADDR ADA ED20 MOVE UP TO END OF USED AREA CLB GET DISC ADDR OF AREA LEFT DIV SECT2 FIND # OF TRKS ADA ED66 GET ACTUAL DISC ADDR ALF,RAL POSITION TRACK RAL,RAL ADDR. IOR B MERGE IN SECTOR ADDR LDB BID2 GET DMAN ADDR JSB MODID SET DISC ADDR IN DMAN * SKP * MPRG JSB ED15 MOVE PROG TO SYSTEM AREA JMP ED16 SET UP IDS * ED15 NOP BGN JSB EXEC READ 1 SECTOR FROM DEF *+7 SOURCE AREA DEF P1 DEF DSKUN DEF LBUF DEF P64 DEF TRAKP DEF ED62 * JSB EXEC WRITE SAME SECTOR DEF *+7 INTO DESTINATION DEF P2 DEF DESLU DEF LBUF DEF P64 DEF ED66 DEF ED67 * ISZ ED21 INDEX SECTOR MOVE COUNT RSS -NOT FINISHED. JMP ED15,I -FINISHED. * LDA ED62 INDEX INA SOURCE SECTOR } #. CPA TRKS# IF = # SECTORS/TRACK, CLA SET = 0, STA ED62 RESTORE. SZA,RSS IF = 0 ISZ TRAKP ADD 1 TO TRACK #. * LDA ED67 INDEX INA DESTINATION SECTOR #. CPA SECT2 IF = # SECTORS/TRACK, CLA SET = 0, STA ED67 RESTORE. SZA,RSS IF = 0, ISZ ED66 ADD 1 TO TRACK #. JMP BGN SKP * * COMPLETE ID SEGMENT PROCESSING * ED16 LDB ED24 GET OLD ID SEG ADDR ADB P14 (B)=NAM5 ADDR JSB MEM? GET ADDR OF MEM1 NOP ADB P4 (B)=ADDR OF DMAIN LDA B,I GET DISC ADDR STA ED63 SAVE TEMPORARILY LDB IDA STORE IT ADB P8 IN LDA ID## DMAN CMA,INA OF CPA ID# NEW ADB P4 ID LDA ED63 SEGMENT STA B,I * LDB ED24 IF SAME ID-SEGMENT CPB ED25 THEN RSS SKIP JSB SWPID ELSE SWAP THE ID-SEGMENTS ON THE DISC JSB FIX24 IDS NOT SWAPPED - CLEAN ED24'S. CLA,INA (A) = 1 FOR ADDITION JSB MVIDS JSB FIX FIX FOR TRYING LONG TO SHORT MOVE LDA MSEG PROCESSING MAIN/SEG ? SZA,RSS THEN SKIP. JMP NTRM4 ELSE TERMINATE * * MAIN/SEGMENT REPLACEMENT OR ADDITION * ED183 LDA IDA SET ADDR OF ADA N9 NEXT SHORT DUMMY STA IDA ID SEGMENT. ISZ ID## END OF SEGMENTS ? CLB,RSS NO, THEN SKIP JMP NTRM4 TERMINATE, ALL MAIN/SEGS DONE. CPB EDFLG EDIT OPERATION ? JMP NTRM7 NO, GO BACK TO TEMP LOAD. JMP ED181 YES, SET UP FOR NEXT SEG. * ED18 LDA IDA INA * ED181 CLB,INB CPB EDFLG ADDITION ? JMP ED10 YES, ATTEMPT TO USE SYSTEM AREA. INA IT IS REPLACEMENT SO STA NAM12 SET UP INA B ADDRES STA NAM34 OF NAM12, NAM34 INA AND NAM5. STA NAM5 JMP E0D GO LOOK FOR MATCHING ID SEG. SKP * SAVE MEM BOUNDS AND DISC ADDR OF MATCHED ID INTO * ID SEG WHOSE DISC SPACE WE USED. * SWPID NOP ROUTINE TO SWAP SYS ID-SEG TACKS LDA IDA SAVE THE DUMMY ID ADDR STA DREL IN DREL ENTRY LDA ED25 GET THE ID-SEGMENT TO MOVE SZA,RSS IF NO OLD ID-SEGMENT JUST JMP SWPID,I RETURN, ELSE STA IDA SET IT IN IDA FOR MVIDS AND STA MIDN SAVE FOR LATER CLA,INA SET EDIT FLAG JSB MVIDS AND CALL MVIDS TO SET UP NOP IGNOR ERROR RETURN LDB DREL RESTORE STB IDA THE DUMMY ID-ADDR LDB MIDN AND THE MOVED (AND NOW FREE) STB ED25 ID-SEGMENT ADDR ISZ SWPID BUMP RETURN ADDR FOR SWAP DONE JMP SWPID,I RETURN * * * THIS ROUTINE IS EXECUTED WHEN "MVIDS" DOES AN ERROR * RETURN FOR ATTEMPTING TO MOVE A LONG ID INTO A SHORT * ONE. "FIX" ROUTINE BLANKS OUT MEM BOUNDS AND DMAIN * OF THE SHORT ID AND THEN GOES TO "MVIDS" WITHOUT * SPECIFYING A TARGET ID. "MVIDS" SHOULD NEVER RUN * INTO THE PROBLEM OF RUNNING OUT OF LONG ID SEGS. * FIX NOP LDA N5 SET UP TO BLANK OUT STA SWPID MEM1 TO DMAIN OF SHORT ID. LDA ABT11 SET UP ADDR OF MEM1 OF ADA P11 SHORT ID SEGMENT. STA DREL WIPE CLA WRITE 0 IN MEM1 TO DMAIN LDB DREL JSB MODID ISZ DREL ISZ SWPID DONE ? JMP WIPE NO CLB CLA,INA CPB EDFLG SKIP IF EDITING CLA JSB MVIDS SET UP ID IN SYSTEM HLT 0 ** SHOULD NEVER HAPPEN ** JMP FIX,I RETURN * SKP * * DISC TRACK RELEASE ROUTINE * DREL NOP STA ED63 LDA TAT STARTING SSB BASE ADA TATSD ADDR STA ED64 FYOR DISC UNIT. LDA SECT2 SET APPROPRIATE SSB # SECTORS/TRACK LDA SECT3 FOR STA ED62 DISC LDA B GET AND M177 MASK THE TRACK SWP SWAP ALF,ALF STARTING RAL TRACK AND M377 #. ADA ED64 ADD TO STA ED64 BASE ADDR. LDA B SET STARTING SECTOR CMA,INA,SZA,RSS IF ZERO JMP DREL1 JUMP ISZ ED64 ELSE DO NOT RELEASE FIRST TRACK ADA ED62 COMPUTE NUMBER LEFT ON TRACK CMA,INA AND DREL1 ADA ED63 SUBTRAC FROM NUMBER TO RELEASE SSA IF NEGATIVE JMP DREL,I RETURN NO TRACKS START WITH THIS ID SEGMENT CLB TOTAL # OF DIV ED62 SECTORS BY # SECTORS/TRACK. SZB ROUND INA TO # OF TRACKS INVOLVED, CMA,INA,SZA,RSS SET NEG. IF ZERO JMP DREL,I EXIT DONE STA ED62 FOR INDEX. * DR LDB ED64 CLEAR LDA B,I DO NOT SSA,RSS RELEASE JMP DR2 GLOBAL TRACKS LDA XEQT ASSIGN TRACK TO SELF JSB SYSET IN TRACK CLA JSB SYRUW DR2 ISZ ED64 TABLE. ISZ ED62 JMP DR JMP DREL,I SKP * * CLEAR ENTRY IN TAT * TATCL NOP SUBROUTINE TO RELEASE ALL TRACKS STB DREL CURRENTLY ASSIGNED TO PROG ID ADDR IN B LDB TATLG SET TAT LENGTH STB FIX24 FOR COUNT LDB TAT SET INITIAL ADDR NXTRK LDA DREL GET ID SEGMENT ADDR TO A CPA B,I THIS TRACK BELONG?? RSS YES SKIP JMP NXTR1 NO STEP TO NEXT ONE LDA XEQT ASSIGN JSB SYSET TRACK TO SELF NXTR1 INB STEP TRACK ADDR ISZ FIX24 DONE?? JMP NXTRK NO TRY NEXT TRACK JMP TATCL,I YES REETURN * * ROUTINE TO CLEAN OUT THE IsHFBD SEG (MEM1 TO DMAIN) * WHOSE DISC SPACE WE UTILIZED BUT 'SWAPID' * DID NOT SAVE ANYTHING IN IT. USEFUL IF THIS * ID HAPPENS TO BE A LONG ONE BUT THE DUMMY IS SHORT. * ALSO EXECUTED WHEN ED24 AND ED25 HAVE SAME ID ADDR. * FIX24 NOP LDB ED24 ADB P14 (B)= NAM5 ADDR JSB MEM? GET ADDR OF MEM1 NOP STB DREL SET UP MEM1 ADDR LDB N5 SET COUNT TO BLANK STB SWPID TO BLANK OUT MEM1-DMAIN. WIPE1 CLA (A)=0 LDB DREL (B)=ADDR OF WORD IN ID SEG JSB MODID MODIFY THE ID SEG ISZ DREL BUMP ADDR ISZ SWPID DONE ? JMP WIPE1 NO LDB ED25 (B)=0 FOR NO PARTICULAR ID JMP FIX24,I RETURN * SKP * * TRAKP NOP ID## NOP ED20 NOP ED21 NOP ED22 NOP ED23 NOP ED24 NOP ED25 NOP ED60 NOP ED61 NOP ED62 NOP ED63 NOP ED64 NOP ED66 NOP ED67 NOP * MESSM DEF *+1 ASC 3,MAIN'S * MESS3 DEF *+1 ASC 7,UNDEFINED EXTS * MESS4 DEF *+1 PRAM ASC 6, READY * MESS6 DEF *+1 ASC 13,"GO" WITH EDIT PARAMETERS * MESS8 DEF *+1 ASC 6,ENTRY POINTS * SYM4 DEF SYMES+4 SYMES ASC 20, /LOADR: $END ASC 2,$END * BSS 0 SIZE OF LOADR SPC 3 END LOADR zH xW 92001-18003 B S C0122 MUL. TERM. MONITOR (PRMPT, R$PN$)             H0101 (ASMB,L,C HED PRMPT - MTM PROMPTER * NAME: PRMPT * SOURCE: 92001-18003 * RELOC: 92001-16003 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM PRMPT,1,10 92001-16003 REV.B 741216 SUP PRESS ALL EXTRANEOUS LISTING EXT EXEC,EQLU A EQU 0 B EQU 1 * THIS INTERRUPT ROUTINE REPLACES (AUXTY IN RTE) WITH (PRMPT IN RTE II). * IT IS SCHEDULED ON INTERRUPT BY DVR00 IF THAT TERMINAL HAS BEEN * PROPERLY ENABLED (ON,CNTRL,LU,20) * PRMPT : DETERMINES LU IN ASCII & BINARY * OUTPUTS A ZERO LENGTH RECORD * OUTPUTS "LU>_" * REQUESTS A CLASS READ TO THE INTERRUPTING LU * SCHEDULES R$PN$,2,10 WITH :CLASS #,EQT4,LU,ASCII LU * W/O WAIT * TERMINATES,SAVING RESOURCES SPC 2 PRMPT EQU * STB EQT4 SAVE INTERRUPTING DEVICE'S EQT WORD 4 ADDRESS JSB EQLU OBTAIN LU IN BINARY & ASCII DEF *+1 SZA,RSS FOUND ONE ? JMP EXIT NO,TERMINATE. STA LU YES,SAVE LU IOR B400 READY PRINT BACK STA RLU SAVE READ LU + CNTRL IN RLU STB ASCLU SAVE ASCII LU XOR B2500 STA CONWD JSB EXEC DEF *+1+2 DEF D3 DEF CONWD CRLF JSB EXEC RESPOND WITH DEF *+1+4 ZERO LENGTH RECORD DEF DS2 DEF LU DEF BUFF DEF D0 NOP PROMT JSB EXEC RESPOND WITH DEF *+1+4 "LU>_" DEF DS2 DEF LU DEF BUFF DEF D2 NOP SPC 1 INPUT JSB EXEC PERFORM CLASS I/O READ DEF *+1+7 Gl DEF DS17 DEF RLU DEF * DEF DM52 DEF LU DEF EQT4 DEF CLASS NOP SSA ERROR RETURN? JMP EXIT YES-BEAT IT ! SPC 1 SCHED JSB EXEC SCHEDULE R$PN$ W/O WAIT DEF *+1+3 DEF D10 DEF R$PN$ DEF CLASS * * IGNORE NOT SCHEDULED ERRORS SINCE R$PN$ IS CLASS GET SUSPENDED * EXIT JSB EXEC TERMINATE DEF *+1+3 & SAVE DEF D6 RESOURCES DEF D0 DEF D1 JMP PRMPT RESTART HERE ON INTERRUPT SPC 2 EQT4 BSS 1 LU BSS 1 B400 OCT 400 B2500 OCT 2500 RLU BSS 1 DS2 OCT 100002 D2 OCT 2 D3 DEC 3 CONWD NOP BUFF EQU * ASCLU ASC 2,00>_ PROMPT MESSAGE D6 DEC 6 D0 DEC 0 D1 DEC 1 CLASS NOP DM52 DEC -52 D10 DEC 10 R$PN$ ASC 3,R$PN$ DS17 OCT 100021 EOP EQU * SPC 2 END PRMPT ASMB,R,L,C HED R$PN$ MTM RESPONSE * NAME: R$PN$ * SOURCE: 92001-18003 REV.B * RELOC: 92001-16003 REV.B * PGMR: G.A.A. * DATE: AUGUST 1,1974 * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM R$PN$,1,10 92001-16003 REV.B 741002 SUP PRESS EXTRANEOUS LISTING EXT MESSS,EXEC,EQLU * A EQU 0 B EQU 1 * * * R$PN$ : DESCRIPTION * PROGRAM DESCRIPTION * FTN,L * PROGRAM R$PN$(1,10) * INTEGER BUFFER(22),PRAM(5),IREG(2),P1,P2,CLASS * EQUIVALENCE (PRAM(1),CLASS), * & (PRAM(2),IREG,REG,IA), * & (PRAM(3),IB), * & (PRAM(4),LU), * & (PRAM(5),ID) * CALL RMPAR(PRAM) * 1 REG = EXEC(21,CLASS,BUFFER,22,LU,ID,LULAS) * LU = MESSS(BUFFER,IB,LU) * * * GO TO 1 * END SPC 2 R$PN$ EQU * ENTRY POINT,SCHED BY PRMPT SPC 2 LDA B,I GET CLASS # AND C160K MASK OFF CLASS NO ONLY STA RQCLS & SAVE IT IOR B20K SET FOR SAVE CLASS STA CLASS & SAVE IT ! SPC 2 WAIT JSB EXEC CLASS I/O GET DEF *+1+7 DEF D21 DEF CLASS DEF BUFF DEF DM52 DEF LU DEF ID DEF RCLAS * LDA RCLAS RAR,SLA WAS THIS A READ RETURN? JMP WAIT NO, WAIT STB IB YES, SAVE XFER LOG CHARS SZB,RSS IF ZERO-LENGTH JMP ENABL SKIP PROCESSING CODE. SPC 2 TEST EQU * LDA BUFF TEST FOR FLUSH COMMAND CPA ASCFL JMP FL YES-FLUSH THIS LU'S BUFFER SPC 2 PROCS EQU * NO-PROCESS REQUEST JSB MESSS GIVE REQUEST DEF *+1+3 DEF BUFF DEF IB TO SYSTEM DEF LU SPC 2 SZA,RSS ANY MESSAGES ? JMP ENABL NO,WAIT FOR NEXT INPUT SPC 2 STA IA SAVE 'A'REG JSB EXEC & DISPLAY DEF *+1+7 SYSTEM DEF D18 MESSAGE DEF LU DEF BUFF DEF IA DEF LU DEF ID DEF RQCLS SPC 2 JMP ENABL NOW WAIT SPC 2 FL EQU * LDA B2300 SET UP CNWRD IOR LU TO FLUSH STA CONWD JSB EXEC PERFORM DEF *+1+4 I/O DEF D3 CONTROL DEF CONWD DEF CONWD DEF RQCLS SPC 2 ENABL EQU * LDB ID RETRANSLATE JSB EQLU INCASE LU WAS REASSIGNED DEF *+1 IOR B2000 STA CONWD JSB EXEC DEF *+1+2 DEF D3 REENABLE THE TERMINAL \DEF CONWD JMP WAIT SPC 2 PRAM NOP BEGIN 5 WORD PRAM BUFFER CLASS EQU PRAM IA NOP PLEASE IB NOP DO NOT LU NOP RE-ARRANGE ID NOP THESE CONSTANTS D21 DEC 21 D3 DEC 3 C160K OCT 17777 KEEP BITS 0-12 DM52 DEC -52 BUFF BSS 26 D18 DEC 18 RCLAS NOP ASCFL ASC 1,FL CONWD NOP B2300 OCT 2300 B2000 OCT 2000 B20K OCT 20000 RQCLS NOP EOP EQU * SPC 2 END R$PN$ v=  92001-18004 1631 S C0122 RTE-II POWER FAIL DRIVER              H0101 ASMB,L,C HED DVP43 - RTE POWER FAIL / AUTO RESTART * NAME: DVP43 * SOURCE: 92060-18001 * RELOC: 92001-16004 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM DVP43,0 92001-16004 REV.1631 760622 ENT $POWR,IP43,CP43 EXT $CVEQ,$SCLK,$TIME,$XEQ,$UPIO,$LIST,$MESS EXT $CIC,$PWR5 SUP * * * * THIS IS THE RTE POWER FAIL AUTO RESTART ROUTINE. * * IT WORKS AS FOLLOWS: * * ON POWER FAILURE: * 1. BOTH DMA CHANNELS (PORT A AND B) ARE STOPPED * 2. ALL REGISTERS ARE SAVED, ALSO RETURN ADDRESS * 3. FOR RTE-III THE USER, PORT-A, AND PORT-B MAPS ARE SAVED * 4. TURN OFF POWER-FAIL INTERRUPTS UNTIL POWER RETURNS * * ON POWER UP: * 1. IN RTE-III THE USER, PORT-A, AND PORT-B MAPS ARE RESTORED * 2. THE SYSTEM MAP IS REBUILT FROM MEMORY * 3. THE EQT ADDRESS FOR THIS ROUTINE IS FOUND, IT * IS SET TO TIME OUT IN ONE TICK, AND THE "I WILL * HANDLE TIME OUT" BIT IS SET. * 4. THE CURRENT SYSTEM TIME IS SAVED (THIS WILL BE THE * TIME OF POWER FAILURE). * 5. THE CLOCK IS RESTARTED BY CALLING $SCLK WHICH WILL * SET UP FOR AN IMMEDIATE INTERRUPT. * 6. A RETURN WITH ALL REGISTERS RESTORED IS MADE TO THE * POINT OF THE POWER FAIL INTERRUPT. * * * ON THE FOLLOWING TIME OUT ENTRY THE FOLLOWING ACTION IS * TAKEN: * * 1. EACH EQT ENTRY IS CHECKED AND) * A) IF BUSY IT'S POWER FAIL FLAG IS SET (BIT 13 OF * THEN THE DRIVER IS ENTERED AT I.XX. THE FACT THAT * IT ISV A POWER FAIL ENTRY MAY BE DETECTED BY * CHECKING THE BUSY BIT (ON NORMAL ENTRIES IT IS * NOT SET.) * * B) IF THE DEVICE IS BUSY AND IT'S POWER FAIL BIT * IS NOT SET THE DEVICE WILL BE SET DOWN, THE * POWER FAIL ROUTINE TIME OUT WILL BE SET BACK * TO ONE TICK AND THE CLOCK RESTARTED AND THE * SYSTEM "UP" PROCESSOR WILL BE CALLED TO UP * THE DEVICE. THIS CAUSES THE SYSTEM TO REISSUE * THE LAST REQUEST AND TO REENTER THE TIME OUT * SECTION OF THIS REOUTNE. * THE IMPLICATIONS OF THIS ARE THAT DISC TRANSFERS * WILL BE RETRIED, TTY, PUNCH, PHOTO READER * REQUESTS WILL BE RE-DONE RESULSTING IN DOUBLE * LINES IN SOME CASES. * * SOME DEVICES WILL BE REPORTED DOWN IS THEIR POWER * WAS ALSO CUT E.G. MAGTAPE, DISC. THESE * DEVICES MAY BE UPPED BY THEIR DRIVERS WHEN THEY * COME BACK ON LINE E.G. THE DISC. * * C) IF THE DEVICE IS DOWN THE SYSTEM UP PROCESSOR WILL * BE CALLED TO UP THE DEVICE. THIS WILL CAUSE * THE DOWNED DEVICES TO HAVE NEW MESSAGES POSTED * ON THE SYSTEM TTY. * * 2. THE PROGRAM "AUTOR" WILL BE ABORTED AND RESCHEDULED. * (THE ABORT IS TO ALLOW FOR MOMENTARY POWER UPS.) * AUTOR SHOULD TAKE WHAT EVER ACTION IS NEEDED TO * BRING UP THE SYSTEM IN TERMS OF ENABLING TERMINALS - * COMMUNICATION LINES ETC. IN ORDER TO ALLOW TIME * SYNC. THIS ROUTINE WILL PROVIDE THE THREE WORD SYSTEM * TIME AT POWER FAILURE ON THE FIRST READ REQUEST * AFTER POWER UP. THE SECOND READ REQUEST WILL * RETURN THE SAME TIME BUT CAUSES THE ROUTINE TO * RESET TO HANDLE A TOTAL NEW POWER FAILURE HED POWER UP/DOWN ENTRY POINT/ DOWN CODE. $POWR NOP POWER UP/DOWN ENTRY SFC 4  UP? JMP UP YES GO DO UP THING. * JMP DOWN,I GO TO DOWN ROUTINE DOWN DEF DWN POINTS TO WAIT WHILE SENSITIVE * CODE IS EXECUTING. STF STF 0 TURN ON THE INTERRUPT SYSTEM SW2 NOP (CLF 0 IF NOT USER RETURN ELSE STC 5) JMP PSAVE,I RETURN TO POINT OF POWER FAILURE. * DOWNI DEF DOWN INDIRECT FOR EXIT TO AVOID INTERRUPT * EXIT2 LDA ASAVE RESTORE A REGISTER LDB BSAVE AND THE B REGISTER JSB DOWNI,I RESET DOWN SWITCH AND EXIT * * DOWN ROUTINE * DWN STF 6B STOP DMA! PREVENT LONG DMA STF 7B TRANSFER FROM JAMMING CPU STA ASAVE SAVE A-REG. STB BSAVE SAVE B-REG. ERA,ALS SOC SET LEAST A FOR INA "O-REG" SIGN FOR "E-REG" STA EOSAV SAVE E/O LDA $POWR SAVE INTERRUPT LOCATION STA PSAVE LIB 6 CHECK IF MX CPU SZB,RSS JMP NOMX1 * STX XSAVE SAVE X-REG STY YSAVE SAVE Y-REG NOMX1 LIA 5 SAVE ADDRESS WHERE WE LIB 5 LAST VIOLATED IN CASE OF MP IN CPB A PROGRESS - IF SO THEN ALSO STA $CIC RESET THE INTERRUPT LOCATION STA $PWR5 LIA 2 SAVE THE DMA STA SDMA1 WORD COUNTS LIA 3 STA SDMA2 LIA 1 SAVE THE SWITCH STA SSAVE REGISTER LDA STC5 SET UP THE EXIT SFS 0 SWITCH BASED ON INTERRUPT SYSTEM LDA CLF0 STA SW2 WAIT CLC 4 SET UP FOR MOMENTARY HLT 0 POWER FAILURE /WAIT FOR POWER HED POWER UP ROUTINE UP LDA DWAIT SET SWITCH FOR DOWN ROUTINE STA DOWN TO AVOID LOSS OF INFORMATION. LDA SW2 SSA,RSS IF HALTED AT POWER DOWN JMP HALT GO HALT AGAIN * CLC 0,C INIT THE WHOLE I/O SYSTEM. * STC 4 CAN NOW ALLOW A DOWN INTERRUPT. * LDB EQT# zuSET UP TO SEARCH FOR CMB,INB THE POWER FAIL STB EQTCO EQT LDB EQTA ADDRESS INB * NEXT LDA B,I GET WORD #2 CPA DEFI. IS IT THE LOCAL IP43? JMP FOUND YES GO DO IT * ADB D15 NO INDEX TO NEXT EQT ISZ EQTCO IF END THEN SKIP JMP NEXT TRY NEXT ENTRY * HALT HLT 4,C CPU HALTED OR NO JMP *-1 EQT ENTRY * FOUND ADB D2 INDEX TO WORD 4 LDA B,I FETCH IT IOR B10K SET THE "I WILL HANDLE TIME OUT" STA B,I BIT ADB D11 INDEX TO EQT15 CCA,CCE AND SET TIME OUT STA B,I FOR NEXT TICK. STB EQ15 SAVE EQT15 ADDRESS * LDA TIME+2 IF TIME IN HAND SZA THEN DO NOT JMP NIXTM SAVE IT AGAIN * DLD $TIME GET THE TIME OF DAY D$TM EQU *-1 DST TIME AND SAVE IT LDA D$TM GET ADDRESS RAL,CLE,SLA,ERA OF LDA A,I DAY/YEAR ADA D2 AND LDB A,I SAVE THE TIME OF YEAR STB TIME+2 TOO. * NIXTM CLA,CCE CLEAR THE EQT COUNT STA EQTCO FOR THE TIME OUT ROUTINE. LDA EQ5,I SET EQT IN PROCESS ALR,ERA BUSY STA EQ5,I SO WE UP IT AGAIN JSB $SCLK SET CLOCK FOR INTERRUPT LDA CLF0 SET EXIT SWITCH TO SYSTEM LDB MPTFL IF MP FLAG SZB SAYS WE STA SW2 WERE IN THE SYSTEM LDA DUMMY IF PRIV. SYS SZA,RSS MUST SET UP. WELL? JMP NOPRV OK SO DON'T. * IOR STF MAKE A STF DUMMY STA STFD PUT IT DOWN STFD NOP AND DO IT IOR STCD NOW MAKE A STC DUMMY STA STCD AND IOR CLCD A CLC DUMMY STA CLCD DO THE CLC CLCD CLC 0 NOW SZB IF IN SYSTEM ALSO STCD NOP DO THE STC. NOPRV LDA EOSAV RESTORE THE REGISTERS CLO pSLA,ELA STO LDA SDMA1 STC 2 OTA 2 LDA SDMA2 STC 3 OTA 3 LIB 6 IF MX CPU SZB,RSS JMP NOMX2 * LDX XSAVE RESTORE X-REG LDY YSAVE RESTORE Y-REG NOMX2 LDA SSAVE OTA 1 LDA FENCE OTA 5 LDA STFTB CONFIGURE THE TBG STF IOR TBG AND STA STFTB RESTORE IT JMP EXIT2 GO RETURN TO POINT OF INTERRUPT * SPC 3 STC5 STC 5 CLF0 CLF 0 DWAIT DEF WAIT ASAVE NOP BSAVE NOP EOSAV NOP * XSAVE NOP YSAVE NOP SDMA1 NOP SDMA2 NOP SSAVE NOP EQ5 NOP EQT IN PROCESS FLAG EQ15 NOP EQTCO NOP PSAVE DEF HALT P-REG SAVE (HLT DEF IF HALTED) TIME BSS 3 TIME SAVE LOCATION A EQU 0 B EQU 1 SPC 3 DEFI. DEF IP43 D15 DEC 15 D3 DEC 3 B10K OCT 10004 D2 DEC 2 HED TIME OUT SECTION CP43 NOP ENTRY HERE FOR TIME OUT ONLY CLA CLEAR THE EQT IN PROCESS FLAG STA SW2 CLEAR SWITCH TO SHOW NO PFAIL STA EQ5 STFTB STF 0 SET CLOCK FOR ANOTHER TIME OUT CCB SET UP TO TIME OUT AGAIN STB EQ15,I SET IN EQT15 * NOTIM LDA EQTCO GET CURRENT EQT COUNT CPA EQT# IF DONE JMP AUTOR GO START AUTOR * SZA,RSS IF FIRST TIME STB BSAVE SET BSAVE FOR AUTOR COUNT SZA,RSS STB EOSAV SET EOSAV FOR TIME CALL * ISZ EQTCO STEP THE EQT NUMBER LDA EQTCO GO SET UP JSB $CVEQ THE EQT ADDRESSES LDA EQT5,I GET EQT5 RAL,CLE,SLA IF DMA WAIT, CCE,SSA,RSS THEN FORGET RSS RESTART. JMP NOTIM * LDA EQT1,I CHECK IF SYS IS CLEARING SSA WELL? JMP NOTIM YES LET TIME OUT CATCH IT. * LDA EQT4,I DEVICE(CONTROLLER) IS UP, DOWN OR BUSY ALF,RAR CHECK HIS "I KNOW ABOUT PF" SEZ,CCE,SLA BIT  JMP DVR SET AND BUSY GO DO IT * LDA EQT5 EITHER CONTROLLER IS UP OR DOWN OR BUSY WITHOUT STA EQ5 POWER FAIL BIT SET. SAVE EQT5 ADDRESS INCASE LDA EQT5,I WE GO DOWN WHILE PROCESSING ALR,RAL SET CONTROLLER DOWN ERA,RAR AND STA EQT5,I AND JMP $UPIO GO RESTART CONTROLLER AND ANY DOWN DEVICES. * DVR LDA EQT4,I SET SELECT AND B77 CODE IN LDB EQT2,I A-REG AND JSB B,I CALL AT I.XX JMP NOTIM GO DO NEXT EQT. * AUTOR ISZ BSAVE FIRST TIME HERE? JMP SAUTO NO - GO SCHEDULE AUTOR * LDA DOF YES - ABORT AUTOR LDB D11 BY CALLING SYSTEM JSB $MESS MESSAGE PROCESSOR SZA A RETURN INDICATES JMP NOAUT NO AUTOR * SAUTO JSB $LIST SECOND ENTRY OCT 201 SCHEDULE BY NAME DEF OF2 NOAUT CLA CLEAR THE TIME OUT STA EQ15,I FLAG IN EQT 15 JMP $XEQ START THE SYSTEM * DOF DEF *+1 ASC 2,OFF, OF2 ASC 4,AUTOR,1 D11 DEC 11 B77 OCT 77 N3 DEC -3 D4 DEC 4 HED TIME REQUEST SECTION IP43 NOP LDA EQT6,I GET THE REQUEST CODE RAR,SLA IF NOT READ GO COMPLETE JMP REJ * LDA EQT8,I MUST HAVE A ADA N3 THREE WORD SSA BUFFER JMP REJ ELSE IGNOR * LDA EQT7,I BUFFER ADDRESS TO A LDB TIME SET THREE WORD STB A,I TIME MESSAGE INA IN LDB TIME+1 USER STB A,I BUFFER INA LDB TIME+2 STB A,I CCA IF FIRST CALL AFTER TIME OUT CPA EOSAV AFTER POWER UP ISZ EOSAV SET FLAG TO ZERO AND SKIP JMP CLEAR NOT FIRST ENTRY JMP * I.EX LDB D3 SET TLOG = 3 REJ LDA D4 IMMEADIATE COMPLETION JMP IP43,I RETURN TO USER * CLEAR CLA SECOND OR LATER ENTRY STA TIME+2 CLEAR THE TIME IN HAND FLAG JMP I.EX AND EXIT * * * HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 9 PARAMETERS) RQP9 EQU .+32 * * DEFINITION OF SYSTEM LISTS (QUEUES) * * SKEDD EQU .+33 'SCHEDULE' LIST, SUSP2 EQU .+35 'WAIT' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'LPOINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BACKGROUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND * ORG * LENGTH OF $POWR END $POWR 64006   92001-18005 1813 S C2122 &SYLIB RTE SYSTEM LIB.             H0121 ASMB,L * NAME: $YSLB * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM $YSLB 92001-16005 REV 1813 780212 END ('ASMB,R,L,C ** $ALRN RN-LU COMMON SUBROUTINES *** HED $ALRN - RN-LU COMMON SUBROUTINES * NAME: $ALRN * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM $ALRN,6 92001-16005 741106 * EXT $RNTB,$ERAB,$LIST,$XEQ ENT $ALRN,$RNSU,$RNEX,$LUEX,$LUSU,$DRAD SUP A EQU 0 B EQU 1 * * $ALRN THIS ROUTINE ALLOCATES AN RN IF POSSIBLE * TO THE USER WHOSE ID SEGMENT ADDRESS IS * AT XEQT. * * OPTIONS/CALLING SEQUENCE: * * < IDNO MUST BE USER ID SEG # OR 377 IF GLOBAL * LDB =B1 TO ALLOCATE FROM BOTTOM OF THE RN TABLE * LDB =B-1 TO ALLOCATE FROM THE TOP OF THE RN TABLE * * JSB $ALRN * * < RETURN A=RN WORD (USER FORMAT) IF SUCESSFUL * A=0 IF NO RN'S AVAILABLE NOW * RQP6 IS SET TO RN ADDRESS IN RN TABLE * * * * $ALRN NOP STB TEMP4 SAVE THE INCREMENT LDA $RNTB GET THE LENGTH OF THE RN TABLE CMA,INA SET NEGATIVE. * STA TEMP2 SET THE COUNT LDA D$RN GET THE RN TABLE ADDRESS JSB $DRAD MAKE INTO DIRECT ADDR STA D$RN SAVE FOR LATER SSB,RSS IF BOTTOM UP INA,RSS SET TO FIRST WORD ADA $RNTB ELSE SET TO LAST WORD * ALRN1 LDB A,I SEARCH FOR SZB,RSS AN AVAILABLE JMP ALRN2 SLOT. FOUND * ADA TEMP4 STEP THE ADDRESS ISZ TEMP2 SKIP IF END JMP ALRN1 ELSE TRY NEXT ONE * CLA NO RN'S,d AVAILABLE NOW JMP $ALRN,I SO EXIT WITH A=0 * ALRN2 STA RNADR SAVE LOCATION CMA,INA SET TO CACULATE RN NUMBER * LDB IDNO GET THE USER ID NUMBER BLF,BLF ROTATE TO HIGH HALF STB RNADR,I SET THE ASSIGNMENT IN THE TABLE ADA D$RN COMPUTE RN NUMBER CMA,INA SET POSTIVE ADA B ADD THE USER ID FLAG JMP $ALRN,I RETURN * * $RNSU LDB RQOP GET NO-WAIT OPTION FLAG SSB IF NO WAIT JMP EXRNW THEN EXIT * $LUSU STA XTEMP,I SET THE SUSPEND FLAG JSB $LIST AND PUT THE PROG IN LIST OCT 503 NUMBER 3. JMP $XEQ GO THE THE DISPATCHER * EXRNW LDB D5 ENTRY FOR 6/7 RETURN $RNEX LDA RNADR TEST THE RN LOCATION ADDRESS CMA,CLE,INA,SZA,RSS IF ZERO SET E, ELSE SKIP LDB D4 NO RN STATUS LDA RNADR,I GET THE RN SEZ,SZA,RSS SKIP IF ALLOCATE PROBLEMS CLB ELSE SET DEALLOCATED FLAG IF RN IS ZERO AND B377 MASK TO LOCK BITS SZA IF LOCKED INB STEP B TO SO INDICATE CPA B377 IF GLOBAL INB STEP AGAIN STB RQST,I SET THE STATUS WORD $LUEX LDB XEQT SET THE RN BIT IN HIS ADB D20 ID-SEGMENT LDA B,I IOR B400 STA B,I LDA RQRTN PUSH UP HIS STA XSUSP,I RETURN ADDRESS JMP $XEQ ** GO TO THE DISPATCHER ** * * * $DRAD NOP ADDR IS GIVEN IN A RSS GET DIRECT ADDRESS LDA A,I IF NOT ALREADY RAL,CLE,SLA,ERA JMP *-2 JMP $DRAD,I RETURN DIRECT ADDR IN A D$RN DEF $RNTB * * D5 DEC 5 D4 DEC 4 D20 DEC 20 B377 OCT 377 B400 OCT 400 TEMP2 NOP TEMP4 NOP * RQOP EQU 1701B RQP2 IS RN/LU REQUEST CODE RQNO EQU 1702B RQP3 IS ADDR OF RN/LU NUMBER RQST EQU 1703B RQP4 IS ADDR OF RN/LU STATUS IDNO EQU 1704B RQP5 IS USERS ID SEG # RNADR EQU 1705B RQP6 IS ADDR OF RN IN RN TABLE RQRTN EQU 1677B XEQT EQU 1717B XTEMP EQU 1721B XSUSP EQU 1730B * ORG * PROGRAM LENGTH END -KASMB,R,L,C ** RNRQ RESOURCE NUMBER MODULE ** HED ** REAL-TIME EXECUTIVE RNRQ RESOURCE NUMBER MODULE ** * NAME: RNRQ * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM RNRQ,6 92001-16005 741120 * EXT $ERAB,$RNTB,$IDNO,$SCD3,$DRAD EXT $ALRN,$LIBR,$PVCN,$RNSU,$RNEX ENT RNRQ * SUP A EQU 0 B EQU 1 * * * * RESOURCE NUMBERS (RN'S) ARE ACCESSED BY USER * CALLS THAT CAN ALLOCATE, DEALLOCATE * SET AND CLEAR THE RN. IF A RN REQUEST CAN NOT * BE GRANTED BECAUSE OF NONE AVAILABLE OR * CONFLICT WITH OTHER PROGRAMS THE REQUESTER IS * SUSPENDED UNTIL THE RN BECOMES AVAILABLE * * THE EXEC CALL IS: * * EXT RNRQ * * JSB RNRQ * DEF *+4 * DEF OPTION OPTION ADDRESS * DEF RN RN NUMBER ADDRESS/RETURN * DEF STAT RN STATUS RETURN ADDRESS * * * WHERE: * OPTIN BSS 1 OPTION WORD * RN BSS 1 RN WORD * STAT BSS 1 RN STATUS * * THE OPTION WORD DEFINES WHAT ACTION IS TO BE TAKEN ON THE * REQUEST AS FOLLOWS: * * BIT MEANING IF SET * BIT 0 SET THE RN LOCALLY * BIT 1 SET THE RN GLOBALLY * BIT 2 CLEAR THE RN * BIT 3 ALLOCATE AN RN LOCALLY * BIT 4 ALLOCATE AN RN GLOBALLY * BIT 5 DEALLOCATE THE RN * BIT 14 DON'T ABORT IF ERROR, RETURN ASCII CODE IN A,B * BIT 15 RETURN EVEN IF REQUEST NOT GRANTED * * A LOCALLY ALLOCATED RN MAY B E RELEASED ONLY BY THE ALLOCATOR * A LOCALLY SET RN MAY BE CLEARED ONLY BY THE SETER * GLOBALLY ALLOCATED/SET RN'S MAY BE DEALLOCATE/CLEARED BY * ANY PROGRAM. * * IF MORE THAN ONE BIT IS SET IN THE OPTION WORD THE FOLLOWING * PRESEDENCE IS FOLLOWED: * * 1) LOCAL ALLOCATE (SKIP 2 IF DONE) * 2) GLOBAL ALLOCATE * 3) DEALLOCATE * 4) LOCAL SET (SKIP 5 IF DONE) * 5) GLOBAL SET * 6) CLEAR * * THIS IMPLIES THAT RN MAY BE ALLOCATED,SET,AND CLEARED IN * THE SAME REQUEST. * A STATUS REQUEST WOULD BE A SET, CLEAR, WITHOUT WAIT. * THERE ARE TWO RN CODE WORDS: * A) THE USER WORD (RETURN ON ALLOCATE/SUPPLIED FOR OTHER * REQUESTS). * B) THE RN TABLE CODE WORD. * * THE USER CODE WORD HAS THE RN NUMBER IN THE LOW HALF (8 BITS) * AND THE OWNERS ID SEGMENT NUMBER IN THE HIGH 8 BITS * * THE RN TABLE CODE WORD HAS THE LOCKERS ID SEGMENT NUMBER * IN THE LOW HALF AND THE OWNERS ID NUMBER IN THE HIGH OF * THE WORD. * * GLOBAL ALLOCATES/LOCKS ARE CODED AS 377 * AVAILABLE/UNLOCKED IS CODED AS 0. * * RN STATUS IS AS FOLLOWS: * * VALUE MEANING * 0 NORMAL DEALLOCATE RETURN * 1 RN IS CLEAR (UNLOCKED) * 2 RN IS LOCKED LOCALLY TO CALLER * 3 RN IS LOCKED GLOBALLY * 4 NO RN AVAILABLE NOW * 5 NOT DEFINED * 6 RN IS LOCKED LOCALLY TO OTHER PROGRAM * 7 RN WAS LOCKED GLOBALLY WHEN REQUEST WAS MADE. * * STATUS 4,6,7 ARE ONLY RETURNED IF THE REQUEST FAILED * AND THE NO WAIT BIT WAS SET * * POSSIBLE ERRORS FROM THIS CODE ARE: * * ERROR MEANING * * RN00 NO BITS SET IN THE OPTION WORD. * RN01 NO RN'S IN THE SYSTEM (EVER). * RN02 ILLEGAL RN NUMBER. * RN03 RELEASE OR UNLOCK OF UNOWNED RN. * RN REQUEST PROCESSOR * SKP RNRQ NOP ENTRY JSB $LIBR PRIVILEGED NOP CLA SINCE WE DON'T PLAN TO RETURN STA $PVCN VIA $LIBR, CLEAR CNTR LDA D$RN JSB $DRAD GET DIRECT ADDR OF RN TABLE STA D$RN * CCA ADA RNRQ SET CALLING ADDR IN SUSP. WORD STA XSUSP,I IN CASE OF SUSPENSION LDA RNRQ,I SET RETURN ADDR JSB $DRAD WORRY ABOUT FTN CALLS STA RQRTN IN CASE OF ABORT * ISZ RNRQ LDB RNRQ,I LDA B,I GET OPTION WORD STA RQOP RAL,CLE,ELA BIT14 TO E SEZ,RSS NO ABORT OPTION? JMP ABCAL NO, NORMAL CALL * LDB XSUSP ADB D7 GET ADDR OF STATUS LDA B,I RAL,ERA PUT E IN BIT15 STA B,I OF STATUS WORD ISZ RQRTN BUMP RETURN ADDR * ABCAL ISZ RNRQ LDA RNRQ,I JSB $DRAD GET DIRECT ADDR STA RQNO ADDR OF RN NUMBER ISZ RNRQ LDA RNRQ,I JSB $DRAD GET DIRECT ADDR STA RQST GET ADDR OF RETURN STATUS LDB RQRTN IF RETURN ADDR CMB,INB IS LESS THAN ADB RNRQ THIS NOW, SSB,RSS THEN JMP ERN02 ABORT WITH RN02 * LDB XEQT GET THE ID SEGMENT NUMBER JSB $IDNO TO B STB IDNO SAVE FOR EVERYBODY STB TEMP6 SAVE FOR ME LDA RQOP GET THE OPTION WORD AND B77 IF NO BITS SET THEN CLB SET B FOR ERROR EXIT SZA,RSS TAKE JMP ERN00 ERROR EXIT * AND B30 MASK TO THE ALLOCATE BITS SZA,RSS IF NO ALLOCATION REQUESTED JMP DAL GO TEST FOR DEALLOCATE * AND B10 LDB B377 SZA,RSS GLOBAL ALLOCATE? (BIT 4) STB IDNO YES, SET IDNO TO 377B CCB SET TO SCAN FROM TOP JSB $ALRN ALLOC AN RN AND SET RNADR STA RQNO,I SET IN THE USER AREA SZA SKINP IF ALLOCATION FAILED JMP DALX ELSE GO TEST DALLOCATION * LDA D$RN GET SUSPEND FLAG JMP $RNSU CHECK IF NEED TO SUSPEND * DAL LDA RQNO,I GET THE RN USER SUPLIED WORD AND B377 ISOLATE THE RN#. STA B TEST THE RN CMB,INB TO SEE IF IN THE ADB $RNTB TABLE CLE,SZA IF ZERO OR SSB BIGGER THAN LEGAL JMP ERN02 GO BOOM! * ADA D$RN INDEX INTO THE RN TABLE STA RNADR SET THE RN ADDRESS LDA A,I GET THE RN ENTRY XOR RQNO,I IS IT OWNED AND C377 BY THE SAME USER HE THINKS? CLE,SZA JMP ERN03 NO TOO BAD ABOUT THAT! * DALX LDA RQOP TEST FOR AND B40 DEALLOCATE SZA,RSS BIT SET? JMP SET NO GO DO THE SET THING * LDA RQNO,I GET THE RN AND ALF,CLE,ALF MAKE SURE HE OWNS IT AND B377 OWNER ID# TO A CPA B377 IF GLOBAL RSS OR CPA TEMP6 HE IS OWNER CLA,RSS THEN SKIP THE JMP ERN03 BAD NEWS SEND 'RN03' (WATCH E) * STA RNADR,I CLEAR THE RN ASSIGNMENT LDA D$RN RESCHEDULE JSB $SCD3 ALLOCATION WAITERS JMP CLRN2 GO DO CLEAR SCHEDULING * SET LDA RNADR,I GET THE RN AND B377 MASK TO CURRENT LOCK LDB RQOP GET THE FLAG WORD CCE,SLB,RSS IF LOCK ERB,SLB THEN JMP LOKRN GO DO LOCK * CLRN LDB RQOP CHECK FOR CLEAR RBR,RBR FLAG. IF NOT CLE,SLB,RSS SET JUST JMP EXRN EXIT * SZA IF NEVER LOCKED, THEN OK. CPA B377 IF GLOBALLY LOCKED RSS CPA TEMP6 OR LOCKED BY CALLER RSS THEN OK, ELSE JMP ERN03 SEND 'RN03' (WATCH E) * XOR RNADR,I CLEAR THE RN. STA RNADR,I RESTORE THE WORD * CLRN2 JSB SRNW SCHEDULE THE WAITERS EXRN CLB,INB SET TH6{E CLEAR FLAG JMP $RNEX EXIT TO DISPATCHER PROPERLY * * LOCK RN ROUTINE * LOKRN LDB B377 GET GLOBAL FLAG SEZ IF LOCAL LDB TEMP6 REPLACE WITH LOCAL SZA IF NOT LOCKED CPA TEMP6 OR LOCKED TO CALLER CMA,INA,RSS THEN OK CONTINUE JMP LKSUS ELSE SUSPEND THIS GUY. * LOKIT ADA B SET LOCK FLAG LESS CURRENT ENTRY ADA RNADR,I SET THE LOCK FLAG STA RNADR,I IN THE RN TABLE LDA B SET A=ID OF NEW LOCKER JMP CLRN GO TEST FOR CLEAR OPTION * LKSUS LDA RNADR GET THE SUSPEND FLAG JMP $RNSU AND GO SUSPEND SPC 2 * SRNW SCHEDULES ANY PROGRAMS SUSPENDED IN THE '3' LIST * WITH A FLAG = (RNADR) (USUALLY RN LOCK REQUEST SUSPEND) * SRNW NOP LDA RNADR GET THE FLAG WORD JSB $SCD3 SCHEDULE ALL SUCH WAITERS JMP SRNW,I RETURN * * ERN02 LDB D2 RN02 ERROR RSS ERN03 LDB D3 RN03 ERROR ERN00 LDA ASRN USE RN JMP $ERAB GO BOOM!#$#$%&'" * ASRN ASC 1,RN SKP * LU UNLOCK REQUEST * * D$RN DEF $RNTB D2 DEC 2 D3 DEC 3 D7 DEC 7 B377 OCT 377 C377 OCT 177400 B77 OCT 77 B10 OCT 10 B30 OCT 30 B40 OCT 40 * TEMP6 NOP * RQRTN EQU 1677B RETURN POINT ADDRESS IDNO EQU 1704B USERS ID SEG # RNADR EQU 1705B RN ADDR IN RN TABLE XEQT EQU 1717B ID SEGMENT ADDR. OF CURRENT PROG. XSUSP EQU 1730B 'POINT OF SUSPENSION' * RQOP EQU 1701B RQP2 USED FOR RN OPTION NUMBER RQNO EQU 1702B RQP3 USED FOR ADDR OF RN NUMBER RQST EQU 1703B RQP4 USED FOR ADDR OF RN STATUS ORG * PROGRAM LENGTH END NASMB,R,L,C ** LURQ LU LOCK REQUEST MODULE ** HED ** REAL-TIME EXECUTIVE LURQ LU LOCK REQUEST MODULE ** * NAME: LURQ * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM LURQ,6 92001-16005 770509 * EXT $ERAB,$RNTB,$IDNO,$SCD3,$LUSU,$DRAD EXT $LUSW,$LIBR,$PVCN,$ALRN,$LUEX,$ULLU * ENT LURQ * SUP A EQU 0 B EQU 1 * * * * THE LU LOCK FEATURE ALLOWS A PROGRAM TO LOCK AN LU * TO HIS PROGRAM EXCULSIVELY. ANY OTHER PROGRAM IS * PUT IN THE WAIT LIST WHEN IT REQUESTS EITHER * A LOCK ON THE SAME LU OR WHEN IT ATTEMPTS I/O * ON A LOCKED LU (ASSUMING IT IS NOT LOCKED TO HIM) * * THE WAITING PROGRAM WILL BE RESTARTED WHEN THE * LU IS UNLOCKED. ALL LU'S LOCKED TO A PROGRAM WILL BE * UNLOCKED WHEN THE PROGRAM TERMINATES. LU'S MAY * ALSO BE UNLOCKED SELECTIVELY WITH THE FOLLOWING * CALL. * * CALL TO LOCK/UNLOCK AN LU * * EXT LURQ * * JSB LURQ * DEF *+4 * DEF IOPT ADDRESS OF OPTION FLAG WORD * DEF LUARY ADDRESS OF ARRAY OF LU'S * DEF NOLU ADDRESS OF NUMBER OF LU'S TO LOCK/UNLOCK * RETURN - - * . * . * . *LUARY DEC N1 ARRAY OF LU'S TO BE LOCKED * DEC N2 ONLY THE LEAST 6 BITS ARE USED. * . * . * . *IOPT DEC OPTION OPTIONS FOR THIS CALL SEE BELOW *NOLU DEC NO NUMBER OF LU'S IN THE ARRAY * * OPTIONS ARE: * IOPT MEANING * 0 UNLOCK SPECIFIED LU'S * 100000B UNLOCK ALL OWNED LOCKS * 1 LOCK WITH WAIT THE SPECIFIED LU'S * 100001B LOCK WITHOUT WAIT THE SPECIFIED LU'S. * * TO PREVENT A DEAD LOCK AN ARRAY OF LU'S IS TO BE USED * IT IS POSSIBLE TO RELEASE LOCKS ON AN LU AT ANY TIME. * IF A NO WAIT LOCK REQUEST IS MADE AND THE CALLER ALREADY * HAS ONE OR MORE LU'S LOCKED HE WILL BE ABORTED 'LU01' * * ON A NO WAIT RETURN THE A REGISTER INDICATES THE * STATUS AS FOLLOWS: * * A REGISTER MEANING * -1 NO RN AVAILABLE AT THIS TIME * 0 REQUEST SUCESSFUL * 1 ONE OR MORE OF THE LU'S IS ALREADY LOCKED TO * ANOTHER PROGRAM * * POSSIBLE ABORT ERRORS ON THIS REQUEST ARE: * ERROR MEANING * LU01 HE HAS OTHERS LOCKED AND WAIT OPTION * LU02 ILLEGAL LU * LU03 NOT ENOUGH PRAMETERS * RN01 SYSTEM HAS NO RN'S * RN03 HE DOESN'T OWN THE LOCK HE IS TRYING TO RELEASE * * INTERNAL FUNCTION: * * THE USER IS ASSIGNED AN RN WHICH IS LOCKED TO HIM. * THE DRT ENTRY FOR EACH LOCKED LU CONTAINS A POINTER * TO THE RN USED TO DO THE LOCK. * * ALL A PROGRAMS LU LOCKS ARE CONNECTED WITH THE SAME RN * AND THE DRT FIELD IS 5 BITS WIDE, THUS A TOTAL * OF 31 (0 IS RESERVED FOR NO LOCK) PROGRAMS * MAY HAVE LU'S LOCKED AT THE SAME TIME. * THE DRT ENTRY IS IN BITS 6-10 OF THE DRT ENTRY. * SKP LURQ NOP JSB $LIBR PRIVILEGED ENTRY NOP CLA CLEAR CNTR SINCE WE DON'T STA $PVCN PLAN TO RETURN VIA $LIBX LDA D$RN JSB $DRAD GET DIRECT ADDR OF RN TABLE STA D$RN * CCA ADA LURQ SET CALLING ADDR IN SUSP. WORD STA XSUSP,I IN CASE OF SUSPENSION LDA LURQ,I SET RETURN ADDR JSB $DRAD (WORRY ABOUT FTN CALLS.) STA RQRTN IN CASE OF ABORT * ISZ LURQ LDB LURQ,I LDA B,I GET OPTION WORD RAL,CLE,ELA BIT14 TO E RAR,RAR RESTORE OPTION, LESS NO-ABORT BIT. STA RQOP SAVE CALLER'S OPTIONS. SEZ,RSS NO-ABORT OPTION? JMP ABCAL NO, NORMAL CALL * LDB XSUSP ADB D7 GET ADDR OF STATUS LDA B,I RAL,ERA PUT E INTO BIT15 STA B,I OF STATUS WORD ISZ RQRTN BUMP RETURN ADDR * ABCAL ISZ LURQ LDA LURQ,I JSB $DRAD GET DIRECT ADDR STA RQTB ADDR OF LU ARRAY STA RQP7 SAVE FOR FIRST LOOPS ISZ LURQ LDA LURQ,I JSB $DRAD GET DIRECT ADDR STA RQSZ ADDR OF NUMBER OF LU'S LDA BIT15 CPA RQOP IF REQ IS RELEASE ALL JMP LUUL3 SKIP PARAMS CHECK * LDB RQRTN MAKE SURE THERE ARE CMB,INB ENOUGH PARAMETERS ADB LURQ ELSE SSB,RSS REJECT JMP ELU03 WITH LU03 ERROR * LDB XEQT HERE ON LU LOCK CALL JSB $IDNO GET THE USERS ID NUMBER STB IDNO SET FOR ALLOCATE, ECT BLF,BLF PUT USER OWN/LOCK ADB IDNO FLAG IN STB TEMP6 TEMP6 LDA RQSZ,I GET THE # OF LU'S CMA,INA,SZA IF NEG OR ZERO, SSA,RSS JMP ELU03 'LU03' ERROR * STA TEMP5 SET COUNTERS STA TEMP4 FOR THE TWO LOOPS LDA LUMAX GET THE DRT SIZE CMA SET NEG OF MAX LU STA TEMP3 STA TEMP9 SET FOR BOTH LOOPS LDA RQOP GET THE OPTION FLAG SLA,RSS IF THIS IS NOT LOCK REQ, JMP LUUL1 GO TO RELEASE CODE * * CHECK IF AN RN HAS ALREADY BEEN ASSIGNED * FOR THIS PROGRAMS LU LOCKS. * ISZ TEMP3 STEP LU COUNTER LDB DRT GET THE DRT ADDRESS LULK1 LDA B,I GET LU ENTRY AND B3700 MASK TO LU LOCK FLAG STA RQP8 SAVE THE LOCK FLAG ALF,ALF ROTATE TO RAL,CLE,RAL LOW AND USE TO V) ADA D$RN INDEX INTO THE RN TABLE LDA A,I GET RN CODE CPA TEMP6 IF OWNED AND LOCKED BY CALLER JMP LULK8 BY CALLER, JUMP * CCE,INB ELSE STEP DRT ISZ TEMP3 ADDRESS IF NOT END JMP LULK1 CONTINUE SEARCH * CLA CLEAR ALLOCATED FLAG STA RQP8 * LULK2 JSB SWITH SWITCH BATCH LU GET DRT ENTRY SZA IF AVAILABLE CONTINUE CPA RQP8 OR HIS ALREADY RSS ALL OK JMP LULK5 ELSE GO SUSPEND * ISZ TEMP4 STEP THE COUNT DONE?? JMP LULK2 NO TRY NEXT LU. * LDA RQP8 GET THE ALLOCATED FLAG SZA IF AN RN ALREADY ALLOCATED JMP LULK3 GO SET UP * * NO RN ASSIGNED SO ALLOCATE ONE * CLB,INB ASSIGN FROM LOW END OF TABLE JSB $ALRN AND B377 SET RN NUMBER IN A STA B AND B AND B37 IF RN>37B CPA B OR ZERO SZA,RSS THEN GO JMP LULK7 HANG HIM UP. * BLF,BLF MOVE NUMBER TO RBR,RBR BITS 6-10 STB RQP8 AND SET FOR LOCK LOOP LDB TEMP6 GET THE LOCAL LOCK FLAG STB RNADR,I AND SET IN RN TABLE * LULK3 LDA RQTB RESET THE ARRAY ADDRESS STA RQP7 FOR SWITH LULK4 JSB SWITH GET THE DRT ADDRESS LDA B,I GET DRT ENTRY IOR RQP8 SET LOCK FLAG STA B,I RESET IN THE DRT ISZ TEMP5 IF NOT DONE JMP LULK4 DO THE NEXT ONE * LULKS CLA SET A TO SHOW LULKF STA XA,I SUCESSFUL COMPLETION JMP $LUEX EXIT VIA LU-RN EXIT CODE * * * LOCKED TO SOME OTHER PROGRAM * LULK5 ALF,ALF IF LOCK IS TO CALLER RAL,RAL THEN ADA D$RN THE LOCK STA RNADR IS TO BE IGNORED CLA,INA SET FAILURE FLAG LULK6 LDB RQOP IF SUSPEND OPTION SSB SUSPEND OPTION? JMP LULKF YES, EXIT/ LDA RNADR NO, SUSPEND PROGRAM JMP $LUSU * * * ALLOCATION FAILED - * LULK7 CLB IF BECAUSE >32B SZA THEN STB RNADR,I RELEASE THE RN LDB D$RN SET SUSP FLAG STB RNADR IN RNADR AND CCA SET THE COMPLETION FLAG JMP LULK6 GO EXIT * * HE HAS AT LEAST ONE LU LOCKED ALREADY * TO PREVENT DEAD LOCK HE MUST NOT CODE * WAIT ON SUBSEQUENT CALLS * LULK8 LDA RQOP GET THE OPTION FLAG ERN01 CME,SSA AND THIS CALL WITH JMP LULK2 WAIT THEN * CLB,INB,RSS SEND 'LU01' ELU02 LDB D2 LU ERROR RSS ELU03 LDB D3 LU ERROR LDA ASLU LU ERROR JMP $ERAB GO BOOM!#$#$%&'" * ASLU ASC 1,LU * * * LUUL1 JSB SWITH DO BATCH SWITCH GET LOCK ECT. STA TEMP3 SAVE IN CASE FOUND ALF,ALF ROTATE TO RAL,RAL LOW A AND ADA D$RN USE TO INDEX THE RN TABLE STA RNADR SAVE THE ADDRESS LDA A,I GET THE FLAG CPA TEMP6 HIS? RSS YES SKIP ERROR EXIT JMP ELU03 NO- TOO BAD, YOU LOSE. * LDA B,I UNLOCK THE XOR TEMP3 LU STA B,I ISZ TEMP4 DONE? JMP LUUL1 NO TRY NEXT ONE * LDA RNADR SCHEDULE ANY WAITING PROGRAMS JSB $SCD3 * ISZ TEMP9 TEST IF ANY LU'S LDB DRT STILL LOCKED LUUL2 LDA B,I BY CALLER AND B3700 IF SO CPA TEMP3 JUST JMP LULKS EXIT * INB STEP DRT ADDRESS ISZ TEMP9 AN COUNT / DONE? JMP LUUL2 NO TRY NEXT * CLA NO LU'S LOCKED STA RNADR,I DEALLOCATE THE RN LDA D$RN SCHEDULE ANY ALLOCATION JSB $SCD3 WAITERS AND JMP LULKS EXIT * LUUL3 LDB XEQT RELEASE ALL JSB $ULLU LU'S LOCKED BY JMP LULKS CALLER AND RETURN * SWITH NOP DO BATCH SWITCH IF REQUIRED CCA GET THE LU-1 ADA RQP7,I GET THE LU AND B77 ISOLATE IT STA RQP9 SAVE IN TEMP ISZ RQP7 STEP ADDRESS FOR NEXT TIME LDB XEQT GET THE BATCH FLAG ADB D20 LDB B,I TO B SSB,RSS IF NOT IN BATCH MODE JMP SWEX GO GET THE WORD FROM DRT. * LDA DLUSW GET ADDRESS OF JSB $DRAD THE LU SWITCH TABLE STA B SET IN B LDA A,I GET THE LENGTH CMA,INA SET NEGATIVE FOR COUNTER STA COUNT SET COUNTER * SWNXT INB START THE LOOP LDA B,I GET THE ENTRY AND B77 ISOLATE THIS ENTRY CPA RQP9 THIS IT?? JMP SWIT YES GO GET THE SWITCH * ISZ COUNT NO , END OF TABLE? JMP SWNXT NO TRY NEXT ONE * JMP SWEX YES USE THE GIVEN LU * SWIT LDA B,I GET THE SWITCH LU ALF,ALF TO LOW A AND B77 ISOLATE STA RQP9 SET IN THE TEMP * SWEX LDA RQP9 GET THE LU ADA TEMP9 TEST FOR LEGALITY INA ADJUST FOR -1 CONVENTION CCE,SSA,RSS SKIP IF OK JMP ELU02 ELSE BAIL OUT WITH DIAGNOSTIC * LDB RQP9 GET THE DRT ENTRY ADB DRT LDA B,I TO A AND B3700 ISOLATE IT JMP SWITH,I RETURN B= ADDRESS, A= ISOLATED LOCK FLAG * COUNT NOP D$RN DEF $RNTB D2 DEC 2 D3 DEC 3 D7 DEC 7 D20 DEC 20 DLUSW DEF $LUSW BIT15 OCT 100000 B377 OCT 377 B3700 OCT 3700 B77 OCT 77 B37 OCT 37 * TEMP3 NOP TEMP4 NOP TEMP5 NOP TEMP6 NOP TEMP9 NOP * DRT EQU 1652B LUMAX EQU 1653B * RQOP EQU 1701B RQTB EQU 1702B RQSZ EQU 1703B IDNO EQU 1704B RQP5 IS USERS ID SEG # RNADR EQU 1705B RQP6 IS RN ADDR IN RN TABLE * RQRTN EQU 1677B RQP7 EQU 1706B RQP8 EQU 1707B RQP9 EQU 1710B XEQT EQU 1717B XSUSP EQU 1730B XA EQU 1731B ORG * *($ PROGRAM LENGTH END T*ASMB,L ** PRTN TO RETURN PARAMETERS TO SCHEDULING PROG ** HED PRTN TO RETURN PRAMETERS TO THE SCHEDULING PROGRAM * NAME: PRTN * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM PRTN,6 92001-16005 761122 ENT PRTM ENT PRTN EXT $LIBR,$LIBX SPC 2 * THIS ROUTINE IS USED TO PASS FIVE PARAMETERS TO THE PROGRAM * THAT SCHEDULED THE CALLER WITH WAIT. IT DOES NOT HONOR THE * NO PARAMETERS BIT. * * THE SCHEDULING PROGRAM MAY RECOVER THESE PARAMETERS WITH RMPAR. * * THE WAIT FLAG IS CLEARED SO THE CALLER SHOULD HAVE HIGHER * PRIORITY THAN THE SCHEDULER TO PREVENT A SWAP. * * CALLING SEQUENCE: * * JSB PRTN * DEF *+2 STANDARD FORTRAN SEQUENCE * DEF PRAM ADDRESS OF THE FIVE RETURN PRAMATERS * JSB EXEC PROGRAM SHOULD COMPLETE * DEF *+2 * DEF SIX SPC 3 PRTN NOP ENTRY POINT JSB $LIBR GO DO PRIVLEDGE THING COUNT NOP LDA PRTN GET THE ADDRESS OF THE CALL PRAMS LDB A,I GET RETURN ADDRESS STB RTN SAVE IT INA STEP TO PRAM ADDRESS LDA A,I GET PRAM ADDRESS RAL,CLE,SLA,ERA REMOVE POSSIBLE INDIRECT JMP *-2 IF INDIRECT TRY AGAIN STA PRTN SAVE THE PRAM ADDRESS LDA KEYWD GET HEAD OF THE KEY WORD LIST STA PRTM SAVE IT LOCALLY JMP NEXT1+1 GO SCAN THE LIST SPC 1 NEXT CLB,INB ADD ONE ADB A TO IT TO GET THE WAIT ID ADDRESS STB ID ALSO THE PRAM SAVE ADDRE SS SAVE IT LDB B,I GET THE WORD CPB XEQT THIS THE SCHEDULING PROGRAM? JMP FOUND LOOKS GOOD GO CHECK THE STATUS NEXT1 ISZ PRTM STEP KEYWORD ADDRESS LDA PRTM,I GET NEXT ENTRY SZA IF END OF LIST EXIT JMP NEXT NOT END TRY NEXT ID SPC 1 EXIT LDA OP1 RESET THE OPTION FOR PRTN ENTRY STA OPTIN JSB $LIBX EXIT TO THE SYSTEM EXIT ROUTINE DEF RTN RETURN ADDRESS SPC 1 RTN NOP ID NOP STAT NOP SPC 2 FOUND LDB D5 CACULATE LAST PRAM ADDRESS ADB A TO B STB LAST SAVE IT FOR TESTING ADB D10 CALCULATE THE STATUS ADDRESS STB STAT SAVE IT LDB B,I GET STATUS OF SCHEDULER BLF,SLB IS HE WAITING? OPTIN CCE,RSS (OR CLE,INA,RSS FOR PRTM) JMP NEXT1 NO TRY NEXT PGM ERB,CLE,ELB CLEAR WAIT BIT(SAVE E-REG.) BLF,BLF ROTATE B THE REST BLF OF THE WAY AROUND OVER SEZ,CLE,INA ADVANCE POINTER. STB STAT,I SAVE STATUS WITHOUT WAIT BIT IF PRTN. LDB PRTN,I GET FIRST PRAM STB A,I SET PRAM ISZ PRTN STEP ADDRESS CPA LAST LAST PRAMETER? CLB,INB,RSS YES B_1 AND SKIP JMP OVER NO GO DO NEXT ONE ADA D5 YES SET TO B REG ADDRESS LDB ID GET ADDRESS OF PRAM AREA STB A,I SET BREG SAVE TO POINT TO PRAMS JMP EXIT DONE RETURN TO PGM SPC 3 OP1 CCE,RSS INARS CLE,INA,RSS PRTM ENTRY A OPTION LAST NOP D5 OCT 5 D10 DEC 10 SPC 2 PRTM NOP OPTIONAL ENTRY FOR FOUR JSB $LIBR PRAMETER PASS WITH OUT CLEARING NOP THE WAIT BIT LDA INARS GET THE OPTIONAL INSTRUCTION STA OPTIN SET IT IN THE CODE LDA PRTM GET THE RETURN ADDRESS STA PRTN SET IT IN THE MAIN ENTRY POINT JMP COUNT+1 GO TO MAIN LINE AND DO THE JOB Q SPC 2 A EQU 0 B EQU A+1 KEYWD EQU 1657B XEQT EQU 1717B END qASMB,R,L,C ** EQLU - FIND 'LU' FROM EQT4 ADDR IN B REG ** HED -EQLU - FIND 'LU' FROM EQT4 ADDRESS IN B-REG * NAME: EQLU * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM EQLU,6 92001-16005 741120 ENT EQLU EXT $LIBR,$LIBX * * ROUTINE TO FIND THE LOGICAL UNIT NUMBER OF A DEVICE * GIVEN THE ADDRESS OF WORD 4 OF ITS EQUIPMENT TABLE * CALLED AS FOLLOWS: * * LDB EQT4 (PASSED FROM DVR00/DVR65) * * JSB EQLU -OR- JSB EQLU -OR- CALL EQLU (LUSDI) * DEF *+2 DEF *+1 * DEF LUSDI * * A-REG. = 0 IF NOT FOUND -OR- * A-REG. = THE LOGICAL UNIT NUMBER IF FOUND * LUSDI = RETURNED SAME AS A-REG. * B-REG. = ASCII "00" -OR- LOGICAL UNIT IN ASCII (I.E. "16") * SUP EQLU NOP ENTRY JSB $LIBR PRIVLAGED ROUTINE NOP STB EQT4 SAVE B-REG FOR LATER TEST LDA EQLU,I GET ADRS OF RETURN ADDRESS ISZ EQLU BUMP TO POSSIBLE PRAM. LDB EQLU,I GET POSS. ADDRS OF PRAM. CPA EQLU PARAMETER PASSED? CLB NO, SET DUMMY ADRS (A-REG.) STA EQLU SET RETURN POINT FOR $LIBX STB LUADR SET PASSED PRAM. ADDRESS CLA STA LUNUM SET LU POINTER NEXT LDA LUNUM GET CURRENT LU NUM-1 CPA LUMAX DONE THRU ALL LU'S JMP NTFND YES, NOT FOUND!! ISZ LUNUM BUMP TO CURRENT LU ADA DRT POINT TO TABLE ADDRESS LDA 0,I GET CONTENTS AND O77 MASK OFj   SUBCHANNEL BITS MPY D15 CALCULATE ADDRESS OF WORD 4 ADA EQTA BASE ADDRESS ADA DM12 SUBTRACK ONE EQT & ADD DEC 3 CPA EQT4 COMPARE?? JMP FOUND YES !! JMP NEXT NO, TRY NEXT ONE SPC 1 NTFND STB LUNUM NOT FOUND RETURN A=0 FOUND LDA LUNUM FOUND RETURN A= LU NUMBER DIV D10 CONVERT TO ASCII ALF,ALF POSITION MOST SIG. DIGIT ADB 0 MIRGE IN LEAST ADB ASC00 CONVERT TO ASCII LDA LUNUM RESTORE BINARY VALUE STA LUADR,I PASS BACK TO CALLER JSB $LIBX RETURN A=BIN. VALUE, B= ASCII VALUE DEF EQLU SPC 1 EQT4 NOP LUADR NOP LUNUM NOP O77 OCT 77 D10 DEC 10 ASC00 ASC 1,00 D15 DEC 15 DM12 DEC -12 EQTA EQU 1650B DRT EQU 1652B LUMAX EQU 1653B END L ASMB,L HED .DRCT ROUTINE * NAME: .DRCT * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM .DRCT,7 92001-16005 741120 SPC 1 ENT .DRCT * CALLING SEQUENCE * THIS ROUTINE TRACKS DOWN POSSIBLE INDIRECT ADDRESSES * * JSB .DRCT * DEF ADDR * RETURN IS TO HERE WITH A THE ADDRESS * B IS UN ALTERED E IS LOST .DRCT NOP LDA .DRCT LDA A,I RAL,CLE,SLA,ERA JMP *-2 ISZ .DRCT JMP .DRCT,I A EQU 0 END ASMB,L,C ** REIO ** * NAME: REIO * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A.,D.L.S. * DATE: OCT. 2,1974 * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM REIO,7 92001-16005 780212 EXT .DFER,$LIBR,$LIBX,EXEC,.ENTR ENT REIO SUP SPC 1 * THIS ROUTINE DOES REENTRENT I/O IF THE USERS BUFFER * IS 5 OR MORE WORDS ABOVE THE FENCE. * THIS RESTRICTION IS ENFORCED BECAUSE THE USERS BUFFER * IS USED AS A TDB FOR THE REENTRANT PROCESSOR AND THUS * THREE WORDS(PLUS 2 FOR SAVE X AND Y REG WORDS) * ARE REQUIRED AHEAD OF IT. * * THESE THREE WORDS ARE SAVED LOCALLY AND THE TDB IS SET UP * AFTER THE I/O HAS COMPLETED THE WORDS ARE RESTORED. * * IF THE BUFFER IS TOO CLOSE TO THE FENCE THE I/O IS PREFORMED * IN THE STANDARD MANNER. THIS IS ALSO TRUE IF THE BUFFER IS * MORE THAN 129 WORDS LONG (TO CONSERVE SYSTEM MEMORY). * * CALLING SEQUENCE: * * THE SAME AS THE EXEC I/O CALL WITH OUT THE TRACK/SECTOR WORDS. * RQ BSS 4 PRAMETER ADDRESS AREA REIO NOP ENTRY POINT JSB .ENTR FETCH THE PRAMETERS DEF RQ LDA RQ+3,I PULL PRAMETERS IN LOCALLY STA RQ+3 INCASE THEY ARE LDA RQ,I ARE IN THE THREE WORD STA RQ AREA AHEAD OF LDA RQ+1,I THE BUFFER STA RQ+1 * LDA RQ+2 GET THE BUFFER ADDRESS ADA N3 LESS THREE AND STA TDBA SET UP THE LIBR/LIBX STA TDBA2 CALLS ADA N2 NOW DECREMENT BY TWO FOR SAVE X/Y REG CMA SAVE f  WORDS, NEGATE AND TEST ADA FENCE AGAINST THE FENCE CLE,SSA,RSS IF BELOW THE FENCE JMP DIRIO GO DO DIRECT I/O. * JSB .DFER ELSE SAVE THE THREE WORDS DEF S1 IN LOCAL SAVE AREA DEF TDBA,I LDB RQ+3 GET THE REQUEST LENGTH SSB,RSS IF POSITIVE SKIP CONVERSION JMP RE1 * BRS CONVERT CHARACTERS TO CMB,INB WORDS AND SET POSITIVE RE1 ADB D3 ADD THREE WORDS FOR TDB LENGTH STB A AND PUT IN A FOR LENGTH TEST ADA N133 SUBTRACT 133 (129 + 3 + 1) CLE,SSA,RSS IF POSITIVE OF ZERO JMP DIRIO DO IT DIRECT * CLA,CCE SET ZERO IN WORD ONE AND DST TDBA,I LENGTH IN WORD TWO OF THE TDB JSB DOIO GO DO THE I/O S1 OCT 0,0,0 RETURN SKIPS THREE WORDS DST RQ SAVE THE REGISTERS JSB .DFER RESTORE THE THREE WORDS DEF TDBA,I DEF S1 DLD RQ RESTORE THE A AND B REGS. JMP REIO,I AND EXIT TO USER. * DOIO NOP JSB $LIBR TELL THE SYSTEM WE ARE TDBA DEF * RENT DIRIO JSB EXEC DO THE I/O CALL DEF EX RETURN ADDRESS DEF RQ DEF RQ+1 DEF RQ+2,I DEF RQ+3 EX RSS SKIP IF ERROR EXIT ISZ REIO ELSE STEP RETURN ADDRESS SEZ,RSS IF DIRECT JMP REIO,I EXIT * JSB $LIBX ELSE EXIT RENT TDBA2 DEF * SECTION D3 DEC 3 +3 WORDS * N133 DEC -133 N3 DEC -3 N2 DEC -2 FENCE EQU 1775B A EQU 0 ORG * END D ASMB,R,L,C ** IFBRK ** HED R/T IFBRK MODULE * NAME: IFBRK * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM IFBRK,7 92001-16005 741120 * ENT IFBRK EXT $LIBR,$LIBX SPC 2 * CALLING SEQUENCE: * * IF(IFBRK(IDMY)) 10,20 * * WHERE: 10 BRANCH WILL BE TAKEN IF SET & WILL CLEAR IT. * 20 BRANCH WILL BE TAKEN IF NOT SET * * JSB IFBRK * DEF *+1 * A-REG. = -1 IF SET, ELSE A-REG = 0 * BREAK BIT WILL ALWAYS BE CLEARED IF SET! SPC 1 IFBRK NOP ENTRY FROM FTN LDA IFBRK,I GET P+1 ADDRESS STA IFBRK SET RETURN ADDRESS LDB XEQT GET IDSEG ADDRESS OF THIS PROG ADB D20 GET ID(21) ADDRESS LDA B,I GET CONTENTS AND BIT12 MASK DOWN TO BIT 12 SZA,RSS SET? JMP IFBRK,I NO, RETURN A=0 JSB $LIBR TURN OFF INTERRUPTS NOP XOR B,I YES, CLEAR IT STA B,I RESTORE WORD 21 CCA RETURN A-REG. = -1 JSB $LIBX DEF IFBRK SPC 1 D20 DEC 20 BIT12 OCT 10000 XEQT EQU 1717B B EQU 1 END _ASMB,L ** COR.A ** HED COR.A ROUTINE * NAME: COR.A * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM COR.A,7 92001-16005 741120 ENT COR.A * * ROUTINE TO FIND THE ADDRESS OF THE FIRST WORD OF AVAIL MEM. * FOR A GIVEN ID SEGMENT * * CALLING SEQUENCE: * * LDA IDSEG GET ID SEGMENT ADDRESS TO A * JSB COR.A CALL THIS ROUTINE * RETURN A= FIRST WORD OF AVAIL MEM (MEM2 FROM ID) * COR.A NOP ADA .14 INDEX TO THE NAME 5 WORD LDB A,I GET THE WORD BLF,BLF ROTATE THE BLF,SLB SHORT ID FLAG TO LOW B AND TEST INA,RSS SHORT SO INDEX TO MEM ADA .8 LONG SO INDEX TO MEM INA INDEX TO MEM2 LDA A,I SET IT IN A JMP COR.A,I RETURN * .14 DEC 14 .8 DEC 8 A EQU 0 END jZASMB,R,L ** KCVT ** HED CONVERT ROUTINE * NAME: KCVT * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM KCVT,6 92001-16005 741120 ENT KCVT * * EXT $CVT1,.ENTP,$LIBR,$LIBX * NUMBR BSS 1 * KCVT NOP JSB $LIBR NOP JSB .ENTP DEF NUMBR LDA NUMBR,I CCE JSB $CVT1 JSB $LIBX DEF KCVT END ;ASMB,R,L,C HED MESSS * NAME: MESSS * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A.,D.L.S. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM MESSS,7 92001-16005 770813 ENT MESSS EXT $LIBR,$LIBX,$MESS,.ENTP,$WORK,$PVCN EXT $PARS,EXEC * A EQU 0 B EQU 1 * BUFFR NOP LNGTH NOP PP1 NOP MESSS NOP JSB $LIBR GO PRIVILEGED. CNTR NOP JSB .ENTP GET PARAMETERS. DEF BUFFR LDA MESSS LDB HERE IF BEEN HERE SZB BEFORE, THEN JMP EXIT2 EXIT. * STA RTN STA HERE LDA DEFEF STA MESSS * LDA BUFFR,I IF 'EQ', 'TO' CPA =ALU OR 'LU' COMMANDS, JMP DP5 THEN GO CPA =AEQ SCHEDULE JMP DP5 PROGRAM $$CMD CPA =ATO TO PROCESS. JMP DP5 * STB $PVCN B-REG = 0 FROM ABOVE. CLEAR PRIV. LDA BUFFR COUNTER SINCE WE MAY NOT COME BACK. LDB LNGTH,I JSB $MESS PASS MESSAGE TO SYSTEM. ISZ $PVCN RESET PRIVILEGED COUNTER SINCE WE CAME BACK. SZA,RSS IF NO RETURNED MESSAGE FROM SYSTEM, THEN JMP CHECK CHECK FOR SPECIAL PATCHING OF 'RU' OR 'ON'. * LDB A,I OTHERWIZE, PROCESS MESSAGE. STB LNGTH SAVE NEGATIVE CHARACTER LENGTH BRS STB CNTR LOOP INA LDB A,I STB BUFFR,I ISZ BUFFR ISZ CNTR JMP LOOP * LDA LNGTH SET A-REG TO NEG.CHAR.LENGTH. EXIT1 JSB $LIBX EVERYTHING OK SO DEF *+1 SO RETURN SYSTEM / DEF *+1 MESSAGE. JMP EXIT * DEF DEF RTN DO NOT RTN NOP CHANGE HERE NOP THESE FOUR DEFEF DEF DEF WORDS. * CHECK LDB $WORK GET PROGRAM'S ID SEGMENT ADDRESS. LDA BUFFR,I TEST FOR ON,RUN CPA =AON COMMANDS JMP DP1 TEST 1ST PRAM CPA =ARU JMP DP1 JMP EXIT2 * DP1 EQU * FOUND A 'RU' OR 'GO' COMMAND. INB GO SET LDA B,I LU# IN FIRST SZA,RSS PARAMETER LDA PP1,I IF FIRST IS NOT GIVEN STA B,I AND LU IS GIVEN. * EXIT2 CLA SET A=0 FOR NO JMP EXIT1 MESSAGE TO USER. * DP5 LDA BUFFR USING BUFFER ADDRESS LDB LNGTH,I AND LENGTH GO JSB $PARS PARSE INPUT DEF PRAM BUFFER. * CCA IF ONLY ONE PARAMETER, LDB CP2 THEN SET SECOND SZB,RSS PARAMETER TO STA P2 -1 FOR $$CMD. * JSB $LIBX GO UNPRIVILEGED. DEF *+1 DEF *+1 * JSB EXEC GO RECOVER ANY STRING DEF *+5 LEFT OVER FOR THIS DEF D14S PROGRAM AND THROUGH DEF D1 AWAY SINCE $$CMD DEF BUFFR,I MAY NOT RETURN A DEF D1 MESSAGE TO THIS PROG. JMP EX ABORT RETURN. * JSB EXEC SCHEDULE DEF *+8 COMMAND DEF D23S PROGRAM. DEF $$CMD DEF OP =COMMAND DEF P1 =PARAMETER ONE. DEF P2 =PARAMETER TWO. DEF P3 =PARAMETER THREE. DEF OP =NONZERO SO $$CMD WILL RETURN MESSAGES. JMP EX ABORT RETURN. * JSB EXEC NO ABORT RETURN. TRY AND DEF *+5 RECOVER STRING. DEF D14S DEF D1 DEF BUFFR,I DEF DM20 EX CLB,RSS ABORT RETURN. CMB,INB NO-ABORT RETURN. SET LOG NEGATIVE. * LDA B RETURN A=-e CHARACTER LENGTH. EXIT CLB CLEAR OUT STB HERE BEEN HERE STB P1 FLAGS AND JMP RTN,I RETURN. * PRAM BSS 1 OP BSS 3 CP1 BSS 1 P1 BSS 3 CP2 BSS 1 P2 BSS 3 CP3 BSS 1 P3 BSS 3 CP4 BSS 1 P4 BSS 3 CP5 BSS 1 P5 BSS 3 CP6 BSS 1 P6 BSS 3 CP7 BSS 1 P7 BSS 3 PRMCT BSS 1 * D1 OCT 1 D14S OCT 100016 D23S OCT 100027 DM20 DEC -20 $$CMD ASC 3,$$CMD * END pASMB,R,L ** PARSE ** HED PARSE ROUTINE * NAME: PARSE * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM PARSE,6 92001-16005 741120 ENT PARSE * EXT $PARS,.ENTP,$LIBR,$LIBX * CMBUF BSS 1 BFLEN BSS 1 BUFR BSS 1 * PARSE NOP JSB $LIBR NOP JSB .ENTP DEF CMBUF LDA BUFR STA BUFR1 LDA CMBUF LDB BFLEN,I JSB $PARS BUFR1 BSS 1 JSB $LIBX DEF PARSE END ASMB,L ROUTINE TO CONVERT TIME HED TMVAL * NAME: TMVAL * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM TMVAL,6 92001-16005 741120 ENT TMVAL EXT $LIBX,$LIBR,.ENTP,$TIMV * * * CALLING SEQUENCE (FORTRAN) * * CALL TMVAL(ITM,ITMAR) * * WHERE ITM IS THE TWO WORD NEGATIVE TIME IN TENS OF * MS. AND ITMAR IS A 5 WORD ARRAY TO RECIEVE THE * TIME. THE ARRAY WILL BE SET UP AS: * * 1. TENS OF MS. * 2. SECONDS * 3. MINUTES * 4. HOURS * 5. CURRENT SYSTEM DAY OF YEAR (NOT RELATED TO CALL VALUES) * ITM NOP ITM1 NOP * TMVAL NOP JSB $LIBR NOP JSB .ENTP GET PRAMS DEF ITM * LDA ITM1 SET ADDRESS STA RQP2 FOR SYSTEM ROUTINE CLA AND ZAP THE STA RQP3 YEAR ADDRESS DLD ITM,I GET THE TIME JSB $TIMV CONVERT IT JSB $LIBX EXIT DEF TMVAL * RQP2 EQU 1701B RQP3 EQU RQP2+1 END ASMB,L,R ** CNUMD ** HED CNUMD...ROUTINE TO CONVERT BINARY TO ASC * NAME: CNUMD * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM CNUMD,6 92001-16005 741120 SPC 2 * * ROUTINE TO CONVERT BINARY TO OCTAL. USED IN * RTEII * CALLING SEQUENCE * JSB CNUMD * DEF *+3 * DEF BINARY # TO BE CONVERTED * DEF BUFFER * . * . *BUF BSS 3 * SPC 2 * * DEFINE ENTRY POINT * ENT CNUMD SPC 2 * * DEFINE EXTERNAL * EXT $LIBR,$LIBX,.ENTP,.DFER,$CVT3 SPC 4 * * HERE WE START BY DEFINING PRAM AREA * BINA NOP BINARY # ADDRESS WILL APPEAR HERE BUFA NOP BUFFER ADDRESS WILL APEAR HERE CNUMD NOP ENTRY POINT INTO ROUTINE JSB $LIBR TURN OFF THE "LIGHT" NOP JSB .ENTP GO GET PRAMS DEF BINA CCE SET FOR BINARY TO DEC. CONVERSION LDA BINA,I GET NUMBER JSB $CVT3 GO CONVERT IT STA FROM SAVE ADDRESS FROM JSB .DFER AND MOVE IT DEF BUFA,I WHERE TO PUT IT FROM NOP JSB $LIBX AND RETURN DEF CNUMD END ÎASMB,L,R ** CNUMO ** HED CNUMO...ROUTINE TO CONVERT BINARY TO ASC * NAME: CNUMO * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM CNUMO,6 92001-16005 741120 SPC 2 * * ROUTINE TO CONVERT BINARY TO OCTAL. USED IN * RTEII * CALLING SEQUENCE * JSB CNUMO * DEF *+3 * DEF BINARY # TO BE CONVERTED * DEF BUFFER * . * . *BUF BSS 3 * SPC 2 * * DEFINE ENTRY POINT * ENT CNUMO SPC 2 * * DEFINE EXTERNAL * EXT $LIBR,$LIBX,.ENTP,.DFER,$CVT3 SPC 4 * * HERE WE START BY DEFINING PRAM AREA * BINA NOP BINARY # ADDRESS WILL APPEAR HERE BUFA NOP BUFFER ADDRESS WILL APEAR HERE CNUMO NOP ENTRY POINT INTO ROUTINE JSB $LIBR TURN OFF THE "LIGHT" NOP JSB .ENTP GO GET PRAMS DEF BINA CLE SET FOR BINARY TO OCTAL CONVERSION LDA BINA,I GET NUMBER JSB $CVT3 GO CONVERT IT STA FROM SAVE ADDRESS FROM JSB .DFER AND MOVE IT DEF BUFA,I FROM NOP JSB $LIBX AND RETURN DEF CNUMO END ASMB,R,L,C ** INPRS ** HED INPRS - PREAMBLE * NAME: INPRS * SOURCE: 91001-18005 * RELOC: 91001-16005 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM INPRS,6 92001-16005 741119 SUP PRESS EXTRANEOUS LISTING ENT INPRS EXT $LIBR,$LIBX,.ENTP,$CVT3 SPC 1 A EQU 0 B EQU 1 HED INPRS : DESCRIPTION * CALLING EXAMPLE : * FTN,L * PROGRAM R$PN$(2,10) * INTEGER BUFFER(22),PARBUF(33),PRAM(5),IREG(2),P1,P2,CLASS * EQUIVALENCE (PRAM(1),CLASS), * & (PRAM(2),IREG,REG,IA), * & (PRAM(3),IB), * & (PRAM(4),IC), * & (PRAM(5),ID) * CALL RMPAR(PRAM) * 1 REG = EXEC(21,BUFFER,22,IC,ID,CLASS) * CALL PARSE(BUFFER,IB,PARBUF) * <"ON" REQUEST - PARBUF(2)="ON" ?> * * * CALL INPRS(PARBUF,PARBUF(33)) * IC = MESSS(BUFFER,IB) * * * GO TO 1 * END SPC 2 * THE BUFFER 'PARBUF' LOOKS LIKE : SPC 2 * PARBUF(1) * PRAM(1) TYPE * (2) * VALUE(1) * (3) * (2) * (4) * (3) * (5) * PRAM(2) TYPE * (6) * VALUE(1) * (7) * (2) * (8) * (3) SPC 1 * ET CETERA SPC 1 * PARBUF(33)* NUMBER OF PARAMETERS PARSED SPC 2 * WHERE : TYPE = 0 => NULL PARAMETER * 1 => NUMERIC PARAMETER IN VALUE(1) *  2 OR 3 => ASCII PARAMETERS IN VALUE(1) TO VALUE(3) HED INPRS : MAIN BUF NOP #P NOP INPRS NOP JSB $LIBR NOP JSB .ENTP DEF BUF SPC 2 LDA #P,I SET PRAM CMA,INA,SZA,RSS COUNTER JMP EXIT NO PRAMS EXIT STA #P INIT COUNTER LDB BLANK USE LEADING BLANK SPC 2 LOOP EQU * LDA BUF GET VALUE FOR INA THIS ENTRY LDA A,I AND IF SSA NEGATIVE ADB B21 CONVERT BLANK TO 1. LDA BUF,I GET PRAM SPEC STB BUF,I STORE ", " OR " " BACK ISZ BUF STEP TO VALUE CMA,INA,SZA,RSS IF ZERO JMP NULL THEN NULL PRAM SPC 2 INA,SZA,RSS IF ONE JMP NUMBR THEN NUMERIC SPC 2 ISZ BUF MUST BE ASCII,SO LOOP2 EQU * IT'S OK ISZ BUF AS ISZ BUF IS. LDB COMMA GET ", " ISZ #P DONE ? JMP LOOP NO-GET NEXT PRAM. SPC 2 EXIT EQU * JSB $LIBX YES-EXIT DEF INPRS TO CALLER SPC 2 NULL EQU * LDB BLANK FOR NULL STB BUF,I PRAM , REPLACE LDA B WITH STO EQU * ISZ BUF SIX DST BUF,I BLANKS JMP LOOP2 & GET NEXT PRAM. SPC 2 NUMBR EQU * NUMERIC PRAM PROC. LDA BUF,I GET NUMBER CCE,SSA VALUE IF CLE NEG,SET FOR OCTAL CONVERSION JSB $CVT3 CONVERT TO ASCII ERB SET E IF NEG. LDB A,I GET HIGH DIGIT SEZ,INA STEP & IF OCTAL ADB B104C CONVERT '1' TO 'B' STA T SAVE ADDRESS LDA A,I GET NEXT DIGIT RRL 8 ROTATE 1ST 2 DIGITS TO 'B'REG STB BUF,I STORE 1ST 2 DIGITS ISZ T STEP TO LAST 2 DIGITS ALF,ALF LDB T,I GET LAST 2 DIGITS RRL 8 ROTATE!W TO RIGHT ORDER JMP STO GO STORE IT HED INPRS : CONSTANTS B21 OCT 21 B104C OCT 10400 COMMA ASC 1,, BLANK ASC 1, T NOP HED INPRS - END END zASMB,L ** .MVW - MOVE WORD ROUTINE ** * NAME: .MVW * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: G.A.A * HED MOVE WORD ROUTINE TO SIMULATE 105777B MICROCODE INSTR * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** NAM .MVW,7 92001-16005 751021 MICROCODE = 105777B ENT .MVW .MVW EQU * *** MOVE NOP STA FROM MICRO CODE MOVE REPLACEMENT SUB LDA MOVE,I GET THE COUNT LDA A,I TO A ISZ MOVE STEP TO NOP (NOP IS RETURN) SZA,RSS JMP OUT SKIP MOVE IF ZERO COUNT * CMA,INA SET IT NEGATIVE STA COUNT SET COUNTER LOOP LDA FROM,I GET WORD STA B,I SET IN DESTINATION INB STEP DESTINATION ISZ FROM FROM ISZ COUNT AND COUNT JMP LOOP IF NOT DONE LOOP * OUT LDA FROM PUT NEXT LOCATION IN A FOR PURISTS JMP MOVE,I AND RETURN * * A EQU 0 B EQU 1 FROM NOP COUNT NOP END MASMB,R,L,C HED SUBROUTINE GETST * * * NAME: GETST * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: D.L.S. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM GETST,7 92001-16005 770208 ENT GETST EXT EXEC,.ENTR SUP * ***************************************************************** * * SUBROUTINE GETST: * * GETST IS A FORTRAN CALLABLE SUBROUTINE WHICH MAY BE USED TO * RETRIEVE ANY PARAMETER STRING FROM A COMMAND STRING WHICH * FOLLOWS THE SECOND COMMA(THIRD IF THE SECOND PARAMETER IS * 'NO' AND 'NOW'). ONLY THE FIRST 80 CHARACTERS OF THE * COMMAND STRING ARE CHECKED. * * CALLING SEQUENCE: * * EXT GETST * JSB GETST * DEF RTN * DEF IBUFR * DEF IBUFL * DEF ILOG * RTN ... * IBUFR BSS N BUFFER TO STORE STRING IN. * IBUFL DEC N(-2N) WORD(+) OR CHARS(-) TO TRANSFER. * ILOG BSS 1 TRANSMISSION LOG. * * RETURN: * =:=POSITIVE NUMBER OR WORDS(CHARS)TRANSFERRED. * :=0 IMPLIES NO BUFFER FOUND. * ***************************************************************** * IBUFR NOP IBUFL NOP ILOG NOP * GETST NOP JSB .ENTR DEF IBUFR * JSB EXEC GO GET ANY PARAMETER STRING. DEF *+5 DEF D14 DEF D1 DIBR DEF IBR DEF DM80 * SZB,RSS IF TRANSMISSION LOG JMP L2 IS ZERO, THEN EXIT. INB CMB,INB SET UP CHARACTER STB CNT CHARACTER COUNTER. * LDB IBUFR CONVERT DESTINATION BUFFER CLE,ELB ADDRESS TO CHARACTER STB DBADD AND SAVE. LDB DIBR CONVERT SOURCE CLE,ELB BUFFER ADDRESS ADB DM1 TO CHARACTER STB ADD ADDRESS AND SAVE. LDB DM2 SET COMMA COUNT STB TEMP TO -2. * L1 JSB GETCH GO GET A CHARACTER. CPA ASCCM IF NOT A COMMA OR THE FIRST COMMA, ISZ TEMP THEN CONTINUE SCANNING FOR JMP L1 COMMAS. * LDB ADD OTHERWIZE, SAVE STB TEMP ADDRESS. LDB CNT SAVE CHAR STB TCNT COUNT. * L31 JSB GETCH NOW SCAN FOR 'NO' OR 'NOW'. CPA ASCBK STRIP LEADING BLANKS. JMP L31 CPA ASC.N IF CHARACTER EQUALS 'N' JMP L5 THEN CHECK FOR A 'O'. * L6 LDA TEMP IF CHARACTER IS NOT 'N', THEN LDB TCNT GET SAVED ADDRESS AND CHARACTER JMP L91 COUNT AND GO MOVE BUFFER. SKP L5 JSB GETCH GET NEXT CHARACTER. CPA ASC.O CHECK IF CHARACTER RSS IS A 'O'. JMP L6 IF NOT, GO MOVE BUFFER. * JSB GETCH FOUND 'NO'. CPA ASCBK CHECK IF NEXT CHARACTER JMP L81 IS A BLANK OR CPA ASCCM A COMMA. JMP L9 * CPA ASC.W FOUND 'NO'. CHECK IF RSS NEXT CHARACTER IS A 'W'. JMP L6 IF NOT THEN MOVE BUFFER. * JSB GETCH FOUND 'NOW' SO GET NEXT CHARACTER. CPA ASCCM CHECK IF NEXT JMP L9 CHARACTER IS A CPA ASCBK BLANK OR A COMMA. RSS JMP L6 IF NOT THEN MOVE BUFFER. * L81 JSB GETCH GET NEXT CHARACTER. CPA ASCCM SKIP TO THIRD COMMA IN STRING. RSS JMP L81 * L9 LDA ADD SAVE STARTING CHAR ADDRESS LDB CNT AND CHARACTER COUNT L91 INA OF SOURCE BUFFER. INB STA SBADD LDA IBUFL,I GET REQUwEST LENGTH SSA AND CONVERT TO CHARACTERS. JMP L92 RAL CMA,INA L92 STA CNT SAVE NEGATIVE CHARACTER COUNT. CMA,INA ADA B USE LESSER OF ACTUAL TRANSMISSION LOG SSA AND THE ACTUAL REQUEST LENGTH. LDB CNT STB CNT COMPUTE NUMBER OF CMB,INB CHARACTERS IN STB ILOG,I SOURCE BUFFER. SKP LL3 LDB SBADD GET CLE,ERB SOURCE LDA B,I CHARACTER. SEZ,RSS ALF,ALF AND B377 * LDB DBADD STORE CLE,ERB INTO SEZ,RSS DESTINATION JMP LL5 BUFFER. XOR B,I LL4 STA B,I ISZ SBADD INCREMENT SOURCE CHAR. ADD ISZ DBADD DESTINATION BUFFER ADD AND ISZ CNT CHARACTER COUNT. JMP LL3 * SEZ IF LAST BYTE WAS A RIGHT CHARACTER, JMP LL43 THEN JUST CONTINUE. CPA ASCB0 IF LAST BYTE WAS A LEFT BLANK, JMP LL55 THEN GO REMOVE IT. XOR ASCBK OTHERWIZE, GO PLACE A BLANK IN STA B,I LOWER BYTE. * LL43 LDB ILOG,I GET MODIFIED TRANSMISSION LOG. LDA IBUFL,I IF CHARACTERS WERE SSA SPECIFIED, THEN JMP L2 RETURN. INB IF WORDS WERE SPECIFIED, THEN BRS CHANGE TO WORDS AND RETURN. * L2 STB ILOG,I SAVE TRANSMISSION LOG JMP GETST,I AND RETURN. * LL5 ALF,ALF JMP LL4 * LL55 LDB ILOG,I DECREMENT ADB DM1 CHARACTER STB ILOG,I COUNT. JMP LL43 SKP * ****************************************************************** * * SUBROUTINE GETCH: * * GETCH WILL GET THE NEXT CHARACTER IN A BUFFER. * IF THE BUFFER BECOMES EMPTY, GETCH WILL * FORCE AN EXIT FROM GETST. * * CALLING SEQUENCE: * :=PREVIOUS CHARACTER ADDRESS * :=PREVIOUS CHARACTER COUNT(NEGATIVE) * JSB GETCH * * RETURN: * :=CHARACTER IN LOWER BYTE. * :=CURRENT CHARACTER ADDRESS. * :=CURRENT CHARACTER COUNT. * ALL REGISTERS ARE MODIFIED EXCEPT B. * ******************************************************************** * GETCH NOP CLB SET POSSIBLE TRANSMISSION LOG TO 0. ISZ ADD INCREMENT CHARACTER ADDRESS. ISZ CNT INCREMENT CHARACTER COUNT. RSS IF COUNT GOES JMP L2 TO ZERO, LEAVE GETST. * LDA ADD GET CHARACTER ADDRESS AND CLE,ERA AND CONVERT TO WORD ADDRESS. LDA A,I E=1 MEANS LOWER BYTE. SEZ,RSS GET WORD AND ALF,ALF PLACE PROPER AND B377 CHARACTER IN JMP GETCH,I LOWER BYTE. * B377 OCT 377 SKP * * CONSTANTS * A EQU 0 B EQU 1 * CNT NOP TEMP NOP TCNT NOP ADD NOP SBADD NOP DBADD NOP * IBR BSS 40 * D1 DEC 1 D14 DEC 14 DM1 DEC -1 DM2 DEC -2 DM80 DEC -80 * ASCCM OCT 54 COMMA ASCBK OCT 40 BLANK ASC.N OCT 116 'N' ASC.O OCT 117 'O' ASC.W OCT 127 'W' ASCB0 OCT 20000 * END ASMB,R,L,C ** IFTTY - SEE IF SPECIFIED LU IS INTERACTIVE. HED -IFTTY - DETERMINES IF SPECIFIED LU IS INTERACTIVE. * NAME: IFTTY * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: C.M.M. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM IFTTY,7 92001-16005 780212 ENT IFTTY,.TTY EXT EXEC * * ROUTINE TO DETERMINE IF THE SPECIFIED LU IS INTERACTIVE * CALLED AS FOLLOWS: * * IFLAG = IFTTY(LU) JSB IFTTY * DEF *+2 * DEF LU * * * IFLAG = A REG = -1 IF THE LU IS INTERACTIVE * = 0 IF THE LU IS NON-INTERACTIVE * B REG = UPPER BYTE = DEVICE TYPE * LOWER BYTE = SUBCHANNEL NUMBER * * * .TTY EQU * IFTTY NOP ENTRY DLD IFTTY,I GET RETURN ADDRESS & LU# LDB B,I GET THE LU # STA IFTTY SAVE RETURN ADDRESS STB ANLU# AND LU # * JSB EXEC SEE IF THE LU IS INTERACTIVE DEF *+6 DEF D13I STATUS REQUEST DEF ANLU# THE LU WE WANT THE INFO ABOUT DEF YTEMP EQT WORD 5 PLACED HERE DEF DTYPE EQT WORD 4 PLACED HERE(NOT NEEDED) DEF ZTEMP SUB CHANNEL IN LOWER 5 BIT HERE * JMP ITSNT IT AIN'T EVEN AN LU !!!! LDA YTEMP GET EQT WORD 5 AND MEQT KEEP ONLY THE EQT TYPE FIELD LDB A AND SAVE IT LDA ZTEMP GET THE SUBCHANNEL BITS AND M37 STA ZTEMP ADA B CONFIGURE B REGISTER RETURN WORD STA DTYPE SZB,RSS IF DVR 00 THEN JMP 0  ITSIN ITS INTERACTIVE CPB M2400 IF DVR 05 THEN JMP DVR05 DO ONE MORE CHECK FOR SUB CHANNEL CPB M3400 IS IT DVR07 ? JMP DVR05 THEN DO DVR05 CHECK JMP ITSNT ELSE ITS NOT INTERACTIVE * DVR05 LDA ZTEMP GET THE SUB CHANNEL # SZA,RSS IF = 0 THEN ITS ITSIN CCA,RSS SET INTERACTIVE FLAG ITSNT CLA SET NON INTERACTIVE FLAG LDB DTYPE JMP IFTTY,I RETURN TO CALLER * * D13I OCT 100015 M2400 OCT 2400 M37 OCT 37 M3400 OCT 3400 MEQT OCT 37400 ANLU# NOP DTYPE NOP YTEMP NOP ZTEMP NOP A EQU 0 B EQU 1 END !h ASMB,R,L,C ** LOGLU - RETURNS LU FROM PROGRAM ID SEGMENT HED -LOGLU - FIND LU THAT THIS PROGRAM ORIGINATED FROM. * NAME: LOGLU * SOURCE: 92001-18005 * RELOC: 92001-16005 * PGMR: D.L.S. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM LOGLU,7 92001-16005 780212 ENT LOGLU * * ROUTINE TO FIND THE LOGICAL UNIT NUMBER THAT THIS * PROGRAM ORIGINATED FROM. * * THIS IS A DUMMY ROUTINE FOR RTE-II AND III WHICH IF * CALLED, WILL ALWAYS RETURN LU 1 IN THE A REGISTER. * * CALLED AS FOLLOWS: * * LU = LOGLU(IDUMY) JSB LOGLU * DEF *+2 * DEF IDUMY * * * LU = A REG = LU # = 1. * B REG = ASCII LU # * IDUMY = 0 IF IN SESSION * = -1 IF NOT IN SESSION * * LOGLU NOP ENTRY DLD LOGLU,I GET RETURN ADDRESS & DUMMY ADDRESS STB DUMMY SAVE DUMMY ADDRESS STA LOGLU &RETURN ADDRESS LDB ASC01 B-REG = ASCII 01S CCA STA DUMMY,I INDICATE NOT IN SESSION(WHATEVER THAT IS). * CLA,INA A-REG = 1. JMP LOGLU,I RETURN * DUMMY NOP ASC01 ASC 1,01 A EQU 0 B EQU 1 END P E; 92001-18012 1840 S 2222 RTE-II CORE RES. OP. SYSTEM             H0122 ASMB,Q * * NAME: $CRSY * SOURCE: * RELOC: * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM $CRSY,0 92001-16012 REV.1840 780810 END ASMB,R,Q,C ** RT DISPATCHER MODULE ** HED REAL TIME DISPATCHER * NAME: DISPA * SOURCE: 92001-18012 * RELOC: 92001:16012 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM DISPA,0 92001-16012 780810 * SUP ******************************************************************** * * ***** AMD ***** JUL,73 * * ******************************************************************** * * DISPATCHER ENTRY POINT NAMES * ENT $RENT,$BRED,$ZZZZ,$XEQ * * DISPATCHER EXTERNAL REFERENCE NAMES * EXT $RSRE,$ABRT,$XSIO,$DREQ EXT $WATR,$TIME,$DREL,$TRRN EXT $IOCL,$IRT EXT $ABRE,$LIST,$RTST * ******************************************************************** * * THE DISPA MODULE OF THE HP-2100 REAL TIME EXECUTIVE * * PERFORMS THE FOLLOWING FUNCTIONS: * * 1. IDLE LOOP WHEN NO PROGRAMS ARE SCHEDULED OR CANNOT BE * * EXECUTED. * * 2. SWITCHES PROGRAM EXECUTION SUCH THAT THE HIGHEST * * PRIORITY EXECUTABLE PROGRAM EXECUTES. * * 3. SETS THE FENCE REGISTER ACCORDING TO PROGRAM TYPE. * * 4. LOADS, SWAPS, AND EXECUTES DISC RESIDENT PROGRAMS * SKP ABORT LDA B,I GET POSSIBLE NEXT PGM STA $ZZZZ AND SET IT FOR ABORT CLA CLEAR THE XSUSP ADDRESS STA B,I FOR THE NEXT START ADB DM8 BACK UP TO ID-SEG ADDRESS STB A SAVE THE ID-SEG. ADDRESS STB TMP A FEW TIMES ADA D14  CHECK IF DISC RES. LDA A,I PROGRAM RAR,SLA IF TYPE 2 OR 3 JSB DREL RELEASE ANY SWAP TRACKS LDB TMP RELEASE ANY RE-ENTRENT JSB $ABRE MEMORY PROGRAM OWNS. LDB TMP RELEASE ANY STRING STORAGE JSB $RTST MEMORY THAT THE PROGRAM OWNS. * LDB TMP JSB $WATR SCHEDULE ANYONE WAITING LDB TMP LDA B ADA D20 STA TEMP SAVE ADDR OF FLAG WORD LDA A,I ALF,ALF GET FLAG WORD SLA ANY RESOURCES HELD? JSB $TRRN YES, RELEASE THEM * CLA IF CURRENTLY LDB TEMP,I GET THE CURRENT FLAG WORD STA TEMP,I (CLEAR THE OLD FLAG WORD) SLB IF LEAST BIT SET THEN JMP $XEQ HE IS SERIALLY REUSABLE SO LEAVE IN CORE * LDB TMP RESIDENT CPB RDISK IN FORGROUND JMP X0253 GO CLEAR IT OUT CPB BKRES IF BACKGROUND AND RESIDENT JMP X0153 GO CLEAR IT HED REAL TIME DISPATCHER - LIST PROCESSING SECTION- * CALLING SEQUENCE * JMP $XEQ * $XEQ LDB $ZZZZ CHECK IF PROGRAM TO BE ABORTED SZB JMP ABORT YES GO HANDLE IT * STB FSWP CLEAR THE BEEN HERE FLAGS STB BSWP FOR FORGROUND AND BACKGROUND LDB $LIST IF LIST NOT ENTERED SZB,RSS THEN NOTHING NEW SO JMP $IRT GO CONTINUE CURRENT PGM * X0005 LDA SKEDD LOAD TOP OF SCHEDULE LIST CLB SET $LIST TO ZERO TO PREVENT STB $LIST RESCAN RSS SKIP FIRST TIME X0035 LDA ZWORK,I GET THE NEXT PGM IN THE LIST SZA IF ZERO, THEN NO PROG SCHED JMP X0010 GO TO PROCESS SCHED LIST * * NO PROGRAM SCHEDULED--SETUP FOR IDLE LOOP * * * THE IDLE LOOP SECTION CONSISTS OF: * * CLEARING XEQT WORD TO SIGNIFY THAT NO PRO=lGRAM * * CURRENTLY EXECUTING. * * STORE ADDRESS OF 4 DUMMY WORDS INTO XSUSP-XSUSP+3 * * DUE TO I/O PROCESSING. * * SET MEMORY PROTECT REGISTER TO ZERO. * * CALL INTERRUPT RESTORE ROUTINE, $IRT * JUMP TO * * * * STA XEQT CLEAR XEQT ADDRESS VALUE LDB VSUSP SET XSUSP,XA,XB,XEO STB XSUSP TO POINT INB TO DUMMY STB XA LOCATION STB XB STB XEO STB XI JMP X0029 GO TO IDLE LOOP (JMP *) * IDLE JMP * IDLE LOOP SPC 1 XQDEF DEF XLINK XEQT TABLE ADDRESS VSUSP DEF *+1 ADDRESS OF IDLE DUMMY WORDS DEF IDLE DUMMY XEQT IDLE WORDS OCT -1 A,B,E,O REGS. SHARE THE SAME LOC. IN IDL NOP STORAGE FOR OPTIONAL Y REGISTER. SKP * * THE SWITCHING SECTION USES THE SCHEDULE LIST TO DETERMINE * * WHICH PROGRAM TO EXECUTE-STARTING FROM TOP OF LIST. * * IF PROGRAM FROM LIST OF LOWER OR EQUAL PRIORITY, * * THEN EXECUTION OF CURRENT PROGRAM CONINUES. * * IF PROGRAM FROM LIST OF HIGHER PRIORITY AND * * TYPE EITHER REAL TIME RESIDENT OR BACKGROUND * * RESIDENT, EXECUTION SWITCHING TAKES PLACE.* * TYPE IS BACKGROUND DISC RESIDENT, * * GO TO BACKGROUND DISC PROCESSING. * * TYPE IS REAL TIME DISC RESIDENT, GO TO REAL * * TIME DISC RESIDENT PROCESSING * * X0010 STA ZWORK SCHED LIST PROG ID SEG ADDRESS ADA D6 STA ZPRIO PRIORITY ADDRESS ADA D8 STA ZTYPE TYPE ADDRESS * * CHECK IF CURRENT PGM IS STILL TOP. * LDA XEQT SEE IF PROGRAM CURRENTLY EXECUTING SZA,RSS YES SKIP JMP X0030 NO, SO GO XECUTE IT ADA D15 CHECK STATUS OF XEQT ID SEGMENT LDA A,I AND D15 MASK TO MAJOR STATUS CPA D1 RSS SCHEDULED-SO GO TO CHECK PRIORITY JMP X0030 NOT SCHEDULED -SO GO SWITCH LDA XPRIO,I LOAD TEST PROGRAM PR CMA,INA MAKE NEGATIVE ADA ZPRIO,I SUPTRACT FROM CURRENT PGM PR. SSA,RSS IF SIGN A=0 THEN PROG OF HIGHER PR JMP $RENT PROGRAM OF HIGHER PRIORITY * * CHECK PROGRAM TYPE * X0030 LDA ZTYPE,I PROGRAM TYPE AND D15 CPA D1 CHECK IF REAL TIME RESIDENT JMP X0040 YES CPA D2 CHECK IF REAL TIME DISK RESIDENT JMP X0200 YES CPA D4 CHECK IF BACKGROUND RESIDENT JMP X0040 YES CPA M3 CHECK IF BACKGROUND DISK RESIDENT PROGRAM JMP X0100 YES JMP X0035 NOT LEGAL TYPE, IGNOR * DM8 DEC -8 DM12 DEC -12 M40 OCT 40 DM2 DEC -2 MI EQU DM2 HED LOAD PROGRAM ID SEGMENT ADDRESSES INTO XEQT AREA X0040 LDA ZWORK SET CORE RES X,Y SAVE ADD ADA MI IN A STA XI SET X,Y FOR RESIDENT PROG. X0D40 LDB ZWORK IF SAME AS CURRENT PGM CPB XEQT THEN JMP $RENT SKIP BASE PAGE SET UP. * LDA DM12 LOAD PROGRAM TO BE EXECUTED STA TMP INTO XEQT AREA LDA XQDEF STB XEQT X0041 STB A,I INA INB ISZ TMP JMP X0041 LDB XSUSP,I CHECK IF PROGRAM SUSPENDED CMB,INB,SZB IF SO THEN JMP $RENT GO SET IT UP LDB XPENT,I GET PRIMARY ENTRY PT. STB XSUSP,I SET ENTRY ADDRESS LDA ZTYPE,I IF BACKGROUND SLA DISC RESIDENT IOR M40 SET THE STA ZTYPE,I ALL OF CORE BIT. * * CHECK IF PT OF SUSPENSION IN LIBRARY AREA * $RENT LDB XTEMP+4 GET THE RENT% BIT ADB D15 LDB B,I GET THE WORD BLF,RBL ROTATE TO PUT RENT BIT IN SIGN SSB,RSS IF RENT NOT IN CONTROL JMP X0028 GO SET FENCE SLB IF MEMORY MOVED JSB $RSRE GO RESTORE IT LDA LBORG SET THE LIBRARY FENCE JMP X0029 GO SET IT UP * * SET MEMORY PROTECT ACCORDING TO PROG TYPE * X0028 LDA XEQT COMPUTE PROGRAM TYPE ADDRESS ADA D14 CCB BY SUBTRACTING ONE FROM ADB A,I ITS TYPE LDA RTORG ASSUME FORGROUND RBR,SLB GOOD ASSUMPTION? LDA BKORG NO USE BACKGROUND FENCE X0029 STA FENCE SET THE FENCE ADDRESS OTA 5B * * RESTORE REGISTERS, MEMORY PROTECT, AND TURN ON INTERRUPT SYSTEM * JMP $IRT GO EXECUTE THE PROGRAM HED XEQ PROCESSOR--BUFFERS, CONSTANTS, POINTERS, ETC * RDISK NOP RT DISK PROG RESIDENT SWITCH BKRES NOP BACKGROUND PROG RESIDENT SWITCH BKREF NOP READ COMPL FLAG-BACKGROUND DISC RDISF NOP READ IN COMPL FLAG-RT DISC * ZWORK NOP SCHED LIST ID SEGMENT ADDRESS ZPRIO NOP SCHED LIST PRIORITY LIST ZTYPE LDB SKEDD SCHED LIST PRIORITY ADDRESS SPC 1 TEMP ADB D6 TEMPORARY WORKING STORAGE AREA TEMP1 STB ZPRIO TEMP2 INA TEMP3 LDB B,I TEMP4 STB A,I TEMP5 CLB TEMP6 STB ZPRIO,I ZEXIT LDB BKRED JMP $ZZZZ,I TMP BSS 1 TEMPORARY WORKING STORAGE TMP1 BSS 1 TMP2 BSS 1 CN#SC NOP CURRENT # SECTORS/TRACK (-) * DM3 DEC -3 * D2 DEC 2 D4 DEC 4 D8 DEC 8 D6 DEC 6 D14 DEC 14 D15 DEC 15 D20 DEC 20 D27 DEC 27 * D1 OCT 1 M3 DEC 3 B177 OCT 177 B377 OCT 377 * HED XEQ PROCESSOR--BACKGROUND DISK PROGRAM LOADING * * BACKGROUND DISK RESIDENT PROGRAM SCHEDULED * * * IF PROGRAM IS NOT RESIDENT OR BEING LOADED, GO TO * * R READ IN PROGRAM FROM DISC AND SET READ IN WAIT * * FLAG, AND I/O SUSPEND THE PROGRAM. * * IF A PROGRAM IS RESIDENT AND * * IT IS THE DESIRED PROGRAM, GO TO SWITCHING * * SECTION TO EXECUTE THE PROGRAM. * * IT IS NOT THE DESIRED PROGRAM, * * CALL SWPCK TO CHECK SWAPABILITY OF THE * * CURRENT RESIDENT PROGRAM AND TAKE * * THE INDICATED ACTION. * * * X0100 ISZ BSWP SET BEEN HERE FLAG LDB BKRES CHECK IF PROGRAM RESIDENT SZB,RSS YES, SO CHECK IF READ IN COMPLETE JMP X0120 NO, SO GO READ IT IN LDA BKREF GET READ COMPLETION FLAG CPB ZWORK IF DESIRED PROGRAM JMP X0130 GO CHECK FOR READ COMPLETE CCA ADA BSWP CHECK BEEN HERE FLAG CCE,SZA BEEN HERE BEFORE? JMP X0035 YES SO RETURN, STILL CAN'T DO ANYTHING. * * SET UP TO CALL SWPCK * LDA BKDRA GET THE LOW MEMORY BOUND STA LOADD AND SET IT LDA BKLWA NOW SET THE HIGH INA STA HIADD ADDRESS(SEE SWPCK) LDA BKREF GET THE READ IN FLAG TO A JSB SWPCK CHECK SWAPABILITY JMP X0152 GO CLEAR CURRENT LOAD JMP X101 GO SWAP OUT CURRENT PGM. * * LOAD RETURN FROM SWPCK * X0120 LDB ZWORK GET THE ID-SEG. ADDRESS AND STB BKRES SET PGM RESIDENT JSB $BRED GO READ IN THE PGM. JMP X0005 RESCAN THE SCHEDULED LIST SPC 2 X0130 CLB,INB CHECK IF STILL IN CORE CPA M3 AFTER A SWAP STB BKREF RESET TO SHOW IN CORE LDB BKDRA GET X,Y SAVE ADDRESS JMP X0240 GO FINISH IN FG PROCESSOR SKP * * BACKGROUND READ IN COMPLETIOKN PROCESSOR * * * THE BACKGROUND DISC RESIDENT READ COMPLETION PROCESSOR, * * IF NO READ ERROR, IT CLEARS THE READ IN WAIT FLAG, * * ENTERS PROGRAM INTO SCHEDULE LIST VIA LIST * * SUCH THAT EXECUTION CAN BEGIN AT THE NEXT * * OPPORTUNITY THE PROGRAM BECOME THE TOP OF LIST.* * IF READ ERRORS OCCURRED, CALL $ABRT PROCESSOR . * X0122 STB TEMP SAVE READ IN STATUS OF DISC ISZ BKREF STEP THE BACKGROUND LDB BKRES GET THE BACKGROUND RES. ID ADDRESS LDA BKRQ STATE FLAG, IF SWAP X0125 ISZ $LIST SET LIST FLAG TO FOURCE SCAN SLA,RSS THEN JMP $XEQ GO SCAN THE LIST CLA,INA SET READ IN COMPLETE FLAG CPB BKRES TO ONE IF STA BKREF BACKGROUND READ COMPLETE STB TEMP1 SAVE ID-SEG. ADDRESS JSB $LIST CALL $LIST OCT 401 LDB TEMP CHECK READ IN STATUS FLAG SZA,RSS IF LIST ERROR OR SSB DISC ERROR RSS GO ABORT JMP $XEQ ALL O-K SO GO SCAN THE LIST * LDA TEMP1 A CONTAINS ID SEG ADDR JSB $ABRT GO TO ABORT ROUTINE JMP $XEQ RETURN TO $XEQ HED XEQ PROCESSOR--BACKGROUND DISK RESIDENT PROGRAM SWAP OUT * * SETUP TO SWAP OUT BACKGROUND DISK RESIDENT * * * SWAP OUT RT DISC RESIDENT PROGRAM FUNCTIONS AS FOLLOWS: * * COMPUTE NUMBER OF TRACKS NEEDED FOR SWAPPING * * OUT PROGRAM BY COMPUTING NUMBER OF SECTORS * * NEEDED FOR MAIN AND BASE PORTION OF PROGRAM. * * REQUEST THE NECESSARY NUMBER OF CONTIGUOUS * * TRACKS FROM EXECUTIVE. IF NONE IS AVAILABLE, * * THEN CANNOT SWAP AND RETURN TO CHECK NEXT PROG.* * L IF TRACKS AVAILABLE, THEN SAVE STARTING TRACK * * ADDRESS, DISC LOGICAL UNIT NUMBER, AND NUMBER * * OF TRACKS INTO ID SEGMENT SWAP WORD. GENERATE * * PARAMETERS FOR SWAP OUTOF PROGRAM AND CALL * * DISC I/O ROUTINE. * * X101 LDB BKRES ID SEGMENT ADDRESS LDA ZPRIO,I SET A TO PRIORITY JSB BKRED GO SET UP AND START SWAP ISZ BKREF SET THE SWAP OUT FLAG JMP X0035 SPC 2 X0152 LDB BKRES RESCHEDULE THE JSB $LIST PROGRAM OCT 401 X0153 STA BKRES CLEAR THE RESIDENT FLAG LDB BKREF GET THE BACKGROUND STATE FLAG LDA DX166 GET THE ABORT LINK ADDRESS X0154 SLB,RSS IF NOT DOING AN XFER. SKIP JMP $IOCL ELSE GO CANCEL THE LOAD JMP $XEQ GO TRY AGAIN SPC 1 DX166 DEF X0166 HED XEQ PROCESSOR--RT DISK RESIDENT LOAD TESTS * * REAL TIME DISC RESIDENT * * REAL TIME DISC RESIDENT PROGRAM EXECUTION * * IF PROGRAM IS NOT RESIDENT OR BEING LOADED, GO TO * * READ IN PROGRAM FROM DISC AND SET READ IN WAIT * * FLAG, AND I/O SUSPEND THE PROGRAM. * * IF A PROGRAM IS RESIDENT AND * * IT IS THE DESIRED PROGRAM, GO TO SWITCHING * * SECTION TO EXECUTE THE PROGRAM. * * IT IS NOT THE DESIRED PROGRAM, * * CALL SWPCK TO CHECK SWAPABILITY OF THE * * CURRENT RESIDENT PROGRAM AND TAKE * * THE INDICATED ACTION. * * * X0200 ISZ FSWP SET BEEN HERE FLAG LDB RDISK CHECK IF PROGRAM RESIDENT SZB,RSS YES, SO CHECK IF READ IN COMPLETE JMP X0220 NO, SO GIO READ IT IN LDA RDISF GET READ COMPLETION FLAG CPB ZWORK IF DESIRED PROGRAM JMP X0230 GO CHECK FOR READ COMPLETE CCA ADA FSWP CHECK BEEN HERE FLAG CLE,SZA BEEN HERE BEFORE? JMP X0035 YES SO RETURN, STILL CAN'T DO ANYTHING. * * SET UP TO CALL SWPCK * LDA RTDRA GET THE LOW MEMORY BOUND STA LOADD AND SET IT LDA AVMEM NOW SET THE HIGH STA HIADD ADDRESS. LDA RDISF GET THE READ IN FLAG TO A JSB SWPCK CHECK SWAPABILITY JMP X0252 GO CLEAR CURRENT LOAD JMP X201 GO SWAP OUT CURRENT PGM. * * LOAD RETURN FROM SWPCK HED XEQ PROCESSOR--RT DISK RESIDENT READ IN * * SETUP TO READ IN RT DISK PROGRAM * * READ IN OF REAL TIME DISC RESIDENT PROGRAM * * IF ID SEGMENT SWAP ADDRESS IS ZERO, THE SYSTEM * * GENERATED DISC ADDRESS IS USED TO COMPUTE THE * * PARAMETERS FOR DISC I/O CALL. * * IF THERE IS SWAP ADDRESS, THEN THIS DISC ADDRESS * * IS USED. * * * X0220 LDB ZWORK CHECK IF PREVIOUSLY SWAPPED STB RDISK STORE ID SEGMENT ADDRESS JSB $LIST I/O SUSPEND THE PROGRAM OCT 402 UNTIL READ COMPLETED CCA,CCE SET FOR PREST STA RDISF SET READ IN WAIT FLAG HED XEQ PROCESSOR--RT DISK RESIDENT PROGRAM SWAP OUT * * SETUP TO SWAP OUT RT DISK RESIDENT * * * SWAP OUT RT DISC RESIDENT PROGRAM FUNCTIONS AS FOLLOWS: * * COMPUTE NUMBER OF TRACKS NEEDED FOR SWAPPING * * OUT PROGRAM BY COMPUTING NUMBER OF SECTORS * * NEEDED FOR MAIN AND BASE PORTION OF PROGRAM. * * REQUEST THE NECESSARY NUMBER OF CONTIGUOUS * * TRACKS FROM EXECUTIVE. IF NONE IS AVAILABLE, * * THEN CANNOT SWAP AND RETURN TO CHECK NEXT PROG.* * IF TRACKS AVAILABLE, THEN SAVE STARTING TRACK * * ADDRESS, DISC LOGICAL UNIT NUMBER, AND NUMBER * * OF TRACKS INTO ID SEGMENT SWAP WORD. GENERATE * * PARAMETERS FOR SWAP OUTOF PROGRAM AND CALL * * DISC I/O ROUTINE. * * X201 CLB,SEZ,INB,RSS SET UP THE REQUEST CODE INB AND SET STB FGRQ LDB RDISK ID SEGMENT ADDRESS LDA RREDS GET THE QUE ADDRESS JSB PREST GO SET UP THE SWAP STB X0250 SET THE LU STA RSWP SET THE TRIPLET QUE ADDRESS LDA ZPRIO,I SET THE REQUEST PRIORITY STA FSPR IN THE CALL JSB $XSIO CALL FOR DISK I/O X0250 NOP LOGICAL UNIT DEF X0251 COMPLETION ADDRESS X0255 OCT 0 FGRQ NOP REQUEST CODE READ/WRITE RSWP DEF RTSWP ARRAY ADDRESS FSPR NOP FORGROUND SWAP PRIORITY ISZ RDISF SET THE STATUS FLAG JMP X0035 IF SWAP GO CONTINUE SEARCH JMP X0005 ELSE RESCAN THE LIST SPC 2 * * * READ IN COMPLETION PROCESSOR * * THE REAL TIME DISC RESIDENT READ COMPLETION PROCESSOR, * * * IF NO ERRORS, IT CLEARS READ IN WAIT FLAG, AND * * SCHEDULES PROGRAM SUCH THAT PROGRAM EXECUTION * * CAN BEGIN AT THE NEXT OPPORTUNITY. * * IF READ ERRORS, CALL $ABRT PROCESSOR * * * X0251 STB TEMP SAVE READ IN STATUS OF DISK. ISZ RDISF STEP THE STATE FLAG LDB RDISK GET THE RESIDENT ID ADDRESS LDA FGRQ GET THE REQUEST CODE JMP X0125 GO FINISH CHECKS ETC. SPC 2 X0252 LDB (RDISK ABORT LOAD SO RESCHEDULE JSB $LIST THE PROGRAM FOR OCT 401 LATER X0253 STA RDISK CLEAR THE RESIDENT FLAG LDB RDISF GET THE STATE FLAG LDA DX255 GET THE DEF TO THE QUE ADDRESS JMP X0154 GO ABORT THE I/O REQUEST SPC 1 RREDS DEF RTSWP DX255 DEF X0255 SPC 1 X0230 CLB,INB TEST TO SEE IF STILL CPA M3 IN CORE AFTER SWAP STB RDISF YES RESET TO SAY IN CORE LDB RTDRA GET FG DR X,Y SAVE ADDRESS SPC 1 X0240 SLA,RSS READ IN COMPLETE? JMP X0035 NO GO TRY THE NEXT PGM * STB XI SET X,Y SAVE ADDRESS FOR DR PGM LDB ZWORK GET THE ID-SEG. ADDRESS JSB DREL RELEASE SWAP TRACKS IF ANY JMP X0D40 GO EXECUTE THE PGM. SKP DREL NOP ROUTINE TO RELEASE DISC SWAP TRK ADB D27 COMPUTE ID SEGMENT SWAP ADDRESS LDA B,I CCE,SZA,RSS SWAPPED, SO GO TO RELEASE JMP DREL,I NOT, SWAPPED, SO RETURN STA TEMP SAVE LU/TRK/#TRK AND B177 STA TEMP2 ISOLATE # TRACKS TO RELEASE CLA CLEAR ID SEGMENT STA B,I SWAP VALUE LDA TEMP ALF,ALF RAL AND B377 LDB TEMP SSB ADA TATSD L. U. 3 SO ADD # SYS TRACKS LDB TEMP2 (B) TO # OF TRACKS TO REL JSB $DREL CALL DISC TRACK RELEASE PROCESOR JMP DREL,I RETURN SPC 2 FSWP NOP BSWP NOP HED XEQ SWAP CHECK ROUTINE. CAN AND SHOULD WE SWAP? * SWAPCK CHECKS TO SEE IF AN AREA SHOULD BE SWAPED, * IT CHECKS: * 1. IF A SWAP OUT IS UNDER WAY (IF SO FORGET IT) * 2. IF THE BASE PAGE SWAP FLAG FOR THE AREA ALLOWS SWAPING. * 3. IF THE RESIDENT PROGRAM HAS INHIBITED SWAPING. * 4. IF THE RESIDENT PROGRAM IS SCHEDULED AND HAS HIGHER * OR EQUAL PRIORITY. * 5. IF THE RESIDENT IS DORMANT BUT HAS PRIORITY AND IS IN *  THE TIME LIST AND ITS TIME IS "NEAR". * 6. IF THE RESIDENT IS I/O SUSPENDED * WITH THE BUFFER IN HIS AREA. * * ALL OF THE ABOVE CONDITIONS INHIBIT A SWAP. ( JMP X0035 ). * THE FOLLOWING CONDITIONS CAUSE THE INDICATED ACTIONS. * * 7. THE RESIDENT IS BEING READ IN BUT DOES NOT HAVE PRIORITY * CAUSES AN ABORT (I.E. STOP THE READ) RETURN. * 8. THE RESIDENT HAS NOT BEEN EXECUTED SINCE IT WAS LAST * LOADED FROM THE DISC CAUSES A READ RETURN (I.E. ASSUME * THE RESIDENT CAN BE RELOADED WHEN NEEDED) * * CALLING SEQUENCE: * * LOADD SET TO THE AREA LOW BOUNDRY * HIADD SET THE HIGH AREA BOUNDRY + 1. * A = THE READ IN FLAG 0=READING, 1 = INCORE, 2 =SWAPING OUT OR * SEGMENT LOAD, 3 = INCORE AND SWAPED OUT. * B = THE RESIDENTS ID-SEGMENT ADDRESS * E = 1 IF BACKGROUND * E = 0 IF FORGROUND * JSB SWPCK * JMP ABORT ABORT (I.E. STOP LOAD) RETURN (A=B=E=0). * JMP SWP SWAP OUT RETURN * --- LOAD RETURN * * THE FOLLOW TEMP AREAS ARE USED IN SWPCK: * RINF EQU TEMP READ IN FLAG SAVE LOCATION RBUFA EQU TEMP1 ADDRESS OF CONWRD THEN BUFFER ADDRESS RPRIO EQU TEMP2 ADDRESS OF RESIDENTS PRIORITY RSUSP EQU TEMP3 ADDRESS OF RESIDENTS SUSP RTIML EQU TEMP4 ADDRESS OF RESIDENTS T BIT. RTIME EQU TEMP5 ADDRESS OF RESIDENTS TIME. RSWTR EQU TEMP6 ADDRESS OF RESIDENTS SMAN. HIADD EQU TMP ADDRESS OF HI BOUNDRY LOADD EQU TMP1 ADDRESS OF LOW BOUNDRY SKP SWPCK NOP CPA M3 IF CURRENT IS SWAPED OUT JMP SWPC4 GO MAKE LOAD RETURN STA RINF SAVE THE READ IN FLAG RAR,SLA IF SWAPING OR LOADING A SEGMENT JMP X0035 FORGET THE SWAP LDA SWAP GET THE BASE PAGE FLAG SEZ,INB PUT AREA BIT RAR IN LEAST A (ROTATE IF BG) SLA,RSS SWAP OFF FOR AREA? JMP X0035 YES FO;NLHRGET IT STB RBUFA INDEX TO THE I-O CONWRD ADDRESS AND SAVE. ADB D5 INDEX TO THE PRIORITY ADDRESS STB RPRIO SAVE IT ADB D2 INDEX TO THE SUSPENTION ADDRESS STB RSUSP SAVE IT ADB D6 INDEX TO THE TYPE/CORE LOCK BIT ADDRESS LDA B,I GET THE WORD AND D100 ISOLATE THE CORE LOCK BIT SZA IF SET JMP X0035 FORGET THE WHOLE THING INB INDEX TO THE STATUS LDA B,I GET STATUS TO A AND D15 ISOLATE THE STATUS ADB D2 INDEX TO THE TIME LIST ADDRESS STB RTIML SAVE IT INB INDEX TO THE TIME ADDRESS STB RTIME SAVE IT ADB D9 INDEX TO THE SWAP TRACK ADDRESS *N STB RSWTR AND SAVE IT * LDB RPRIO,I GET THE PRIORITY CMB,CLE,INB SUBTRACT FROM ADB ZPRIO,I SET E IF RES. WINS PRIORITY TEST) LDB RINF GET THE READ FLAG CPA D2 IF I/O SUSPENDED JMP SWPC3 GO DO I/O SUSP. CHECKS * SEZ,RSS IF THE CONTENDER HAS PRIORITY JMP SWPC1 GO CHECK IF SWAP IS NEEDED CPA D1 IF RESIDENT IS SCHEDULED JMP X0035 FORGET THE WHOLE THING LDB RTIML,I GET THE TIME LIST BIT BLF,SLB IF IN TIME LIST CLE,SZA AND DORMANT JMP SWPC1 NO SO GO CHECK IF SWAP IS NEEDED * DLD $TIME GET THE SYSTEM TIME DIV BREAD DIVIDE BY ZERO TO SET POS. BREDS EQU *-1 DEF TO BREAD ADA RTIME,I SUBTRACT THE ID-SEG TIME VALUE SEZ,CLE IF OVERFLOW INB STEP B ISZ RTIME STEP TO NEXT TIME WORD ADB RTIME,I ADD THE HIGH WORD ADA SWPTM ADD THE NEG. OF # OF TICKS SYS WILL WAIT. SEZ,SZB,RSS IF HIGH VALUE IS ZERO SSA,RSS AND THE DIFF < LIMIT JMP SWPC1 CPB SWPTM AND LIMIT NOT= 0, RSS JMP X0035 THEN FORGET THE SWAP. * SWPC1 LDA RSUSP,I SWAP IN ORDER TEST IF THE RESIDENT LDB RSWTR,I WAS RUN SINCE LAST LOAD CLE,SZB,RSS IF SWAP TRACKS STILL ASSIGNED OR SZA,RSS POINT OF SUSP IS ZERO SWPC4 ISZ SWPCK THEN JUST READ SWPC2 ISZ SWPCK ELSE SET TO SWAP RETURN JMP SWPCK,I EASY ISN'T IT? SPC 1 SWPC3 CLA E = 0 IF HE HAS PRIORITY SEZ,SZB,RSS IF READING IN AND PRIORITY JMP SWPCK,I RETURN P+1 WITH A = 0 (ABORT) * SZB,RSS IF READING IN BUT NOT PRIORITY JMP X0035 FORGET THE WHOLE THING * * THE FOLLOWING LINES ALLOW SWAPPING OF UNBUFFERED * CONTROL REQUESTS. * * LDA RBUFA,I GET CONWRD. * RAR IF IT IS A * SSA,SLA CONTROL REQUEST * JMPV SWPC2 THEN ALLOW SWAP. * ISZ RBUFA ELSE INCREMENT TO THE I-O BUFFER ADDRESS. LDA LOADD CHECK TO SEE IF THE I/O BUFFER CMA,CLE,INA IS IN THE AREA ADA RBUFA,I LDA RBUFA,I E = 0 MEANS BELOW AREA CMA,SEZ,CLE IF SO SKIP ADA HIADD ELSE TEST FOR ABOVE AREA SEZ E = 0 IF NOT IN THE AREA JMP X0035 ELSE FORGET THE WHOLE THING JMP SWPC2 GO MAKE THE SWAP RETURN SPC 1 D100 OCT 100 SWPTM DEC -15 MAX WAIT IS 150 MS. D5 DEC 5 D9 DEC 9 HED XEQ PROCESSOR--PRELIMINARY SETUP FOR DISK CALL * PREST SETS UP FOR A DISC LOAD OR SWAP AS FOLLOWS: * * 1. SETS MEMORY BOUNDS FOR THE PROGRAM * TEMP = #WORDS IN MAIN * TEMP3 = FIRST WORD OF MAIN * TMP = #WORDS IN BASE PAGE * TMP1 = FIRST WORD OF BASE PAGE * * 2. IF SWAP, GET SWAP TRACKS IF REQUIRED * AND SETS SMAN IN THE ID-SEGMENT. * * 3. SETS THE INITIAL DISC ADDRESS * TEMP1 = TRACK ADDRESS * TEMP2 = SECTOR ADDRESS * B = LU OF DISC * * 4. SETS THE NUMBER OF SECTORS: * CN#SC = -NUMBER OF SECTORS/TRACK * * 5. CALLS SETUP TO BUILD THE TRIPLET FOR THE LOAD * * PREST CHECKS THE FOLLOWING OPTIONS: * * 1. SHORT ID-SEGMENT (BG-SEGMENT LOAD) * 2. THE "ALL OF CORE" BIT CAUSES THE WHOLE AREA * TO BE SWAPED ALONG WITH ALL OF THE AREA * BASE PAGE. * 3. IF SWAP THEN THE FIRST WORD IS ALWAYS THE AREA * BOUNDRY. * 4. IF SWAP AND NO TRACK ASSIGNED THEN SWAP TRACKS * ARE ALLOCATED. * * CALLING SEQUENCE: * * B = ID-SEGMENT ADDRESS * E = 1 FOR LOAD * E = 0 FOR SWAP OUT * A = BOTTOM OF TRIPLET TABLE * JSB PREST * * ON RETURN: * * B = DISC LU * A = DEF OF TRIPLET TABLE FOR XSIO CALL * *  ABNORMAL EXIT * * A JMP IS MADE TO X0035 IF NO DISC TRACKS ARE AVAILABLE * FOR SWAPING. * * INTERNAL TEMP AREA USAGE: * TEMP4 - TRIPLET QUE ADDRESS * TEMP5 - PROGRAM TYPE WORD * TEMP6 - MEMORY ADDRESS POINTER TO ID-SEGMENT. * TMP2 - DISC ADDRESS POINTER TO ID-SEGMENT. SKP PREST NOP STA TEMP4 SAVE THE TRIPLET QUE ADDRESS CLA SET THE START SECTOR STA TEMP2 ADDRESS FOR SWAP OPTION CPB XEQT IF CURRENT EXECUTING STA XEQT PROGRAM CLEAR THE FLAG ADB D14 INDEX TO TYPE WORD LDA B,I GET PROGRAM TYPE TO A STA TEMP5 SAVE IT ALF,ALF ROTATE THE SHORT ID-SEG. BIT ALF,SLA,RAR TO ZERO AND TEST - SET INB,RSS ALL OF CORE BIT TO LEAST A ADB D8 INDEX TO MEMORY ADDRESSES STB TEMP6 SAVE THE MEMORY ADDRESS ADB D4 INDEX TO THE DISC ADDRESS STB TMP2 AND SAVE IT SSA IF SHORT ID-SEG. JMP PRES1 GO SET UP MEM * SEZ,INB STEP TO SWAP DISC ADDRESS LDB B,I GET SWAP ADDRESS (SKIPPED IF SWAP) CMB,CLE,INB,SZB IF SWAP TRACK OR SWAPING ISZ TMP2 STEP THE DISC ADDRESS TO SMAN. PRES1 LDB TEMP6,I GET THE ID-SEG LOW MAIN ADD. ISZ TEMP6 STEP THE MEMORY ADDRESS TO HIGH MAIN SEZ IF FIRST LOAD JMP PRES2 GO SET UP TRUE TO ID-SEG. * LDB TEMP5 GET THE TYPE WORD SLB,RSS IF FORGROUND JMP PRES3 GO SET FORGROUND BOUNDS * LDB BKDRA GET THE BACKGROUND BOUNDRY STB TEMP3 AND SET FOR LOW MAIN. CMB,INB SUBTRACT FROM CCE,SLA,RSS IF NOT ALL OF AREA BIT THEN JMP PRES4 ID-SEG VALUE * ADB BKLWA ELSE LAST WORD OF MEM CLE,INB,RSS PLUS ONE. PRES4 ADB TEMP6,I ID-SEG HIGH MAIN PRES5 STB TEMP SET #WORDS IN MAIN ISZ TEMP6 STEP TO LOwW BASE PAGE LDB TEMP6,I GET LOW BP STB TMP1 AND SET IT ISZ TEMP6 STEP TO HIGH BASE PAGE CMB,SEZ,INB SET NEG SKIP IF ALL OF AREA JMP PRES6 NOT ALL SO GO GET FROM ID-SEG. ADB B1650 SET HIGH END OF BG-BP AREA RSS SKIP STANDARD DEF PRES6 ADB TEMP6,I CACULATE SIZE OF STD BP AREA STB TMP SET BASE PAGE SIZE CMA,CLE,INA SET E IF FIRST LOAD LDA TMP2,I GET THE DISC ADDRESS SZA IF NONE SKIP JMP PRES7 DISC DEFINED GO SET UP * * GET SWAP TRACKS * LDA B GET BASE PAGE SIZE ADA B177 FORCE SIZE UP TO NEXT SECTOR AND C177 TRUNCATE TO EVEN SECTOR STA TMP SAVE LDA TEMP WHILE CHECK MAIN SIZE ADA B177 FORCE SIZE UP TO NEXT SECTOR AND C177 TRUNCATE TO EVEN SECTOR STA TEMP SAVE MAIN SIZE ADA TMP ADD IF ANY ROUNDED UP FROM BP CLB DIV #WDS DIVIDE BY MIN #WORDS/TRACK SZB IF REMAINDER INA BUMP STA SETUP SET #TRACKS IN SMAN CLB GO TO SYS TO GET TRACKS JSB $DREQ ERB,SLB SET LEAST LU BIT IN E SKIP IF NONE ALF,SLA,ALF ROTATE TRACK SKIP ALWAYS JMP X0035 NO TRACKS EXIT TO SWITCHER ERA,CLE SET LU BIT IN TRACK WORD IOR SETUP ADD THE # TRACKS STA TMP2,I AND SET BACK IN ID-SEG * * DECODE TRACK/SECTOR ADDRESS IN A * PRES7 AND B177 MASK OUT THE SECTOR/#TRACKS CLB,SEZ,INB SET B TO 1,SKIP IF SWAP STA TEMP2 SET SECTOR ADDRESS XOR TMP2,I GET THE TRACK/LU ASL 1 SET LU IN B/TRACK IN HIGH A ALF,ALF BRING DOWN THE TRACK STA TEMP1 SET THE TRACK ADDRESS LDA SECT2 GET THE SECTOR SIZE FOR LU 2 SLB IF LU IS 3 LDA SECT3 USE 3'S NUMBER CMA,INA SET NEGATIVE STA CN#SC NUMBER OF SECTORS/TRACK * * NOW CALL SETUP TO BUILD THE TRIPLETS * STB TEMP6 SET LU IN A SAFE PLACE LDA TEMP4 GET THE TRIPLET ADDRESS JSB SETUP SET UP THE MAIN LDB TMP STB TEMP SET UP FOR THE LDB TMP1 BASE PAGE STB TEMP3 AND JSB SETUP GO BUILD IT'S TRIPLETS LDB TEMP6 RESTORE THE LU TO B JMP PREST,I NOW THAT WASN'T HARD WAS IT? SPC 2 PRES2 CLA,RSS SET TO LOAD ACTUAL BOUNDS PRES3 LDB RTDRA LOAD FORGROUND BOUNDRY STB TEMP3 SET IN TEMP CMB,INB SET NEG. FOR SIZE COMP CCE,SLA,RSS IF WHOLE AREA BIT SET SKIP JMP PRES4 ELSE GO GET TRUE MEM. ADB AVMEM USE WHOLE AREA JMP PRES5 GO SET IN TEMP SPC 2 B1650 OCT 1650 LAST WORD OF BG BASE PAGE + 1. C177 OCT 177600 #WDS NOP HED XEQ PROCESSOR--DISK CALLING SEQUENCE GENERATOR * * DISK READ/WRITE CALLING SEQUENCE GENERATOR ROUTINE * ON ENTRY * TEMP = NUMBER OF WORDS * TEMP1 = TRACK ADDRESS * TEMP2 = SECTOR ADDRESS * TEMP3 = STARTING MEMORY ADDRESS * A = PARAMETER TABLE ADDRESS * * THE DISC PARAMETER GENERATOR FUNCTION IS TO GENERATE * * PARAMETERS FOR DISC CALL GUARANTEEING THAT ALL * * TRACK CROSSING CALLS ARE BROKEN DOWN INTO SUB-CALLS * * SUCH THAT THE DISC DRIVER CAN HANDLE THE REQUEST. * * THE CALLS ARE BROKEN UP IN TRIPLETS OF * * STARTING CORE MEMORY ADDRESS * * NUMBER OF WORDS TO TRANSFER * * STARTING TRACK/SECTOR ADDRESS. * * THE END OF CALL IS INDICATED BY A ZERO FOLLOWING * * THE LAST TRIPLET. * * * SETUP NOP ENTRY/EXIT Z LDB TEMP COMPUTE NUMBER OF SECTORS SETU1 SZB,RSS ZERO, SO RETURN JMP SETUP,I ADA DM3 SET UP TRIPLET STA DSTAD ADDRESS ADB B177 ROUND UP NUMBER ASR 7 OF SECTORS BLS STB TEMP5 SAVE NUMBER OF SECTORS LDA TEMP2 INITIAL SECTOR ADDRESS ADA B ADA CN#SC SUB CURRENT # SECTORS/TRACK LDB TEMP3 STB DSTAD,I STORE STARTING MEMORY ADDRESS ISZ DSTAD INCREMENT ARRAY ADDRESS CMA,CLE,INA,SZA CLE,SSA,RSS CHECK IF TRACK OVERFLOW JMP SETI0 NO, SO LAST TRIPLET ADA TEMP5 YES, USE REST OF TRACK IF OVER. ASL 6 UPSET LDB TEMP1 FORM BLF,RBL TRACK RBL,RBL ADDRESS ADB TEMP2 AND SECTOR ADDRESS DST DSTAD,I STORE LAST TWO WORDS OF TRIPLET DSTAD EQU *-1 ADA TEMP3 UPDATE STARTING STA TEMP3 MEMORY ADDRESS LDB TEMP2 INCREMENT SECTOR ADDRESS ADB TEMP5 TO START SECTOR FOR SEZ CHECK IF NEW TRACK CLB,RSS RSS NOT NEW TRACK SO SKIP ISZ TEMP1 YES, SO INCREMENT TRACK ADDRESS STB TEMP2 RESET SECTOR LDB DSTAD,I UPDATE NUMBER CMB,INB OF ADB TEMP WORDS STB TEMP TO GO CCA SUB 1 FOR CORRECT NEXT TRIPLET ADA DSTAD ADDRESS CALC. JMP SETU1 GO TO NEXT LOOP SPC 1 SETI0 LDA TEMP SET FOR LAST JMP UPSET TRIPLET HED XEQ PROCESSOR--READ SETUP * * SETUP TO READ IN BACKGROUND DISK RESIDENT PROGRAM * OR BACKGROUND DISK RESIDENT SEGMENTS * $BRED NOP ENTRY/EXIT CPB BKRES IF SEGMENT LOAD SKIP CLA,CCE,RSS SET E FOR PRESET LDA D2 SEGMENT LOAD SET SWAPING FLAG TO STA BKREF SET READ IN WAIT FLAG LDA BKRES GET PRIORITY ADA D6 FROM THE ID-SEG. LDA A,I JSB BKRED GO SET UP AND START READ LDB BKRES I/O SUSPEND BACKGROUND JSB $LIST SEGMENT UNTIL READ IN OCT 402 FROM DISC COMPLETE JMP $BRED,I EXIT SPC 2 * BACKGROUND READ/SWAP ROUTINE * CALL SEQUENCE: * * LDA PRIORITY FOR REQUEST * LDB ID-SEG ADDRESS * E = 1 FOR READ * E = 0 FOR WRITE * * JSB BKRED * ON RETURN REGISTERS ARE MEANINGLESS * BKRED DEF RDISK STA BKPR SET REQUEST PRIORITY CLA,SEZ,INA,RSS SET UP THE REQUEST CODE INA AND STA BKRQ STORE IT LDA BREDS GET TRIPLET ADDRESS JSB PREST STA BRED STB BRELU SET DISC LU JSB $XSIO BRELU NOP DEF X0122 COMPLETION ADDRESS X0166 OCT 0 LINK ADDRESS BKRQ OCT 1 READ/WRITE REQUEST CODE BRED DEF BREAD ARRAY ADDRESS BKPR NOP PRIORITY ADDRESS JMP BKRED,I RETURN HED SYSTEM START UP ******************************************************************** * THE START SECTION: * * CLEARS INTERRUPT SYSTEM * * SETS FENCE REGISTER TO 0 * * CLEARS XEQT * * SCHEDULES 'FMGR' IF PRESENT * STARTS THE CLOCK BY CALLING $SCLK IN RTIME MODULE * THIS SECTION IS EXECUTED ONCE - IT IS OVERLAYED ******************************************************************** * $ZZZZ NOP * STB DFMG SET THE NAME ADDRESS CLC 0 CLEAR INTERRUPT SYSTEM LDA SWAP SET UP THE SWAP DELAY ALF,ALF AND B377 CMA,INA SET NEGATIVE STA SWPTM SET THE VALUE * LDA SECT2 FIND MINIMUM # SECTORS/TRACK LDB SECT3 SUBTRACT # FOR LU 3 CMB,INB,SZB FROM # FOR LU 2. ADB SECT2 IF POSITIVE RESULT, CMB,SSB,INB,SZB LU 3 IS SMALLER. LDA SECT3 OTHERWISE, USE LU 3 LSL 6 STA #WDS LDA SKEDD SAVE THE CURRENT STA ZWORK SCHEDULE POINTER SPC 1 JSB $LIST SCHEDULE 'FMGR' PROGRAM OCT 201 IF IT IS IN THE SYSTEM. DFMG DEF * BREAD NOP SPC 1 SZA JMP ZEXIT NO - LDA SKEDD LDB A,I INSURE 'FMGR' IS CPB ZWORK FIRST IN THE SWP SCHEDULED LIST. STB SKEDD STA B,I CLB STB A,I LDA SKEDD GET THE FMGR ID-SEG ADDRESS INA AND LDB TATLG INHIBIT ALL TRACK STB A,I ALLOCATIONS UNTIL CCB 'FMGR' EXECUTES. STB TATLG 'FMGR' UNDOES THIS SPC 1 JMP ZTYPE NOP GO BACK TO SCHED RTSWP NOP HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** * * *** SYSTEM BASE PAGE COMMUNICATION AREA *** * . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * XI EQU .-1 X,Y REG. SAVE ADDRESS EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES * DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) * INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES * TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE * KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 9 PARAMETERS) RQP9 EQU .+32 * * DEFINITION OF SYSTEM LISTS (QUEUES) * * SKEDD EQU .+33 'SCHEDULE' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BACKGROUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE p<:6 TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) * DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS * BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND * A EQU 0B LOCATION OF A REGISTER B EQU 1B LOCATION OF B REGISTER ORG * PROGRAM LENGTH END $ZZZZ [<ASMB,R,L,C ** RT TIME MODULE ** HED REAL TIME TIME MODULE * NAME: RTIME * SOURCE: 92001-18012 * RELOC: 92001-16012 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM RTIME,0 92001-16012 770131 * SUP ******************************************************************** * * ***** AMD ***** JUL,73 * * ******************************************************************** * * RTIME ENTRY POINT NAMES * ENT $TADD,$CLCK,$TREM,$TIME,$TIMV ENT $ETTM,$TIMR,$ONTM,$TMRQ,$SCLK ENT $BATM * * RTIME EXTERNAL REFERENCE NAMES * EXT $INER,$DEVT,$LIST,$XEQ EXT $ERMG,$MESS,$SYMG,$IDSM EXT $WORK * ******************************************************************** * * THE RTIME MODULE OF HP2100 REAL TIME EXECUTIVE CONSISTS OF * * * 1. TIME PROCESSOR ROUTINES * * 2. CLOCK START UP ROUTINE. * * ******************************************************************** HED REAL TIME CLOCK-TIME LIST PROCESSING ******************************************************************** * THE REAL TIME CLOCK PROCESSOR SECTION OF HP-2100 REAL TIME* * EXECUTIVE HANDLES ALL TIME DEPENDENT FUNCTIONS: * * 1. INCREMENT REAL TIME CLOCK VALUES EVERY 10 MILLISECOND. * * 2. SCHEDULE PROGRAMS AT THE REQUESTED TIME AND COMPUTE ITS* * NEXT START TIME. * * 3. ADD PROGRAMS TO THE TIME LIST. * * 4. REMOVE PROGRAMS FROM THE TIME LI_ST. * * 5. OUTPUT CURRENT SYSTEM TIME TO USER ARRAY. * * 6. SET ID SEGMENT VALUES AS REQUESTED BY USER. * ******************************************************************** SPC 1 * THE $CLCK ROUTINE FUNCTIONS AS FOLLOWS: * * THE ROUTINE IS ENTERED EVERY 10 MILLISECOND DUE * * TO TIME BASE GENERATOR INTERRUPTS. * * THE TIME VALUE IS INCREMENTED BY 10 MILLISECONDS. * * THE TIME VALUES OF EACH PROGRAM IN TIME LIST IS * * COMPARED TO THE CURRENT TIME. IF THE TIMES * * COMPARE AND THE PROGRAM IS DORMANT, A SCHEDULE * * REQUEST IS MADE VIA LIST PROCESSOR. REGARDLESS * * OF PROGRAM STATUS, THE NEXT START TIME IS * * COMPUTED UNLESS THE MULTIPLE VALUE IS ZERO- * * WHICH MEANS THAT THE PROGRAM IS TO BE REMOVED * * FROM TIME LIST. * * THE TIME-OUT CLOCKS FOR ALL ACTIVE DEVICES ARE * UPDATED. IF ANY DEVICE HAS TIMED-OUT, * RTIOC IS ENTERED TO PROCESS THE CONDITION. * * $CLCK ISZ $TIME STEP THE LOW ORDER TIME VALUE JMP CL010 GO TO PROCESS LISTS ISZ $TIME+1 STEP THE HIGH ORDER TIME VALUE JMP CL010 GO TO PROCESS LISTS LDA RS1 RESET THE COUNTER LDB RS2 TO THE FULL STA $TIME DAYS WORTH OF STB $TIME+1 OF TENS OF MS. ISZ $TIME+2 STEP THE DAYS/YEARS COUNTER * * CHECK IF TIME TO SCHEDULE PROGRAM * CL010 LDB TLIST TIME LIST CL011 CLE,SZB,RSS IF THRU PROCESSING IT, GO JMP TOBAT PROCESS BATCH TIME-OUT STB POINT SAVE TIME LINK ADB D2 B NOW PTS TO IDSEG TIME VAULE DLD B,I GET THE SCHEDULE TIME a| CPA $TIME IF BOTH WORDS MATCH CCE THEN CPB $TIME+1 THE SEZ,RSS TIME IS JMP CH010 JSB TMSCH NOW SO SCHEDULE THE PROG. * * INCREMENT TO NEXT PROGRAM IN LIST * CH010 LDB POINT,I GET ADDR OF NEXT PROG IN LIST JMP CL011 GO TO COMPARE NEXT PROG IN LIST * * IF CURRENT PGM IS BATCH THEN STEP THE TIMER * TOBAT LDB XEQT GET THE BATCH BIT SZB IF NO CURRENT PGM SKIP CPB DD.RT IF CURRENT PGM IS D.RTR DO NO TIME JMP IOTOP BUT GO DO DEVICE TIME OUTS * CPB $IDSM IF SMP JMP IOTOP ADB D20 TO LDA B,I GET THE BATCH FLAG SSA,RSS IF NOT BATCH JMP IOTOP SKIP TEST * ISZ $BATM STEP BATCH TIMER JMP IOTOP IF NO ROLL OVER EXIT * ISZ $BATM+1 ELSE STEP NEXT WORD JMP IOTOP IF NO ROLL OVER SKIP * RAL PUT FATHER BIT IN 15. SSA IF THIS IS A SON JMP ABOR THEN ABORT HIM * RAR RESTORE A IOR B10K SET THE BREAK FLAG STA B,I AND RESET THE WORD JMP IOTOP CONTINUE WITH TIME OUTS * ABOR LDA ATI GET THE TI ABORT MESSAGE LDB BLANK JSB $ERMG GO ABORT HIM * * PROCESS DEVICE TIME-OUT CLOCKS * IOTOP LDA EQT# SET NEGATIVE OF CMA,INA NUMBER OF EQT STA $TIMV ENTRIES FOR INDEX LDA EQTA POINT TO WORD 15 IOTO2 ADA D14 OF FIRST EQT ENTRY LDB A,I LOAD WORKING CLOCK- SZB IS IT ACTIVE? ISZ A,I YES: INCREMENT IT INA,RSS IT HAS NOT TIMED-OUT JMP $DEVT GO TO TIME-OUT PROCESSOR ISZ $TIMV THRU? JMP IOTO2 NO: GO DO NEXT ONE JMP $XEQ YES; NO TIME-OUTS-RETURN SPC 1 D20 DEC 20 M7777 OCT 7777 RS1 OCT 25000 RS2 OCT 177574 PRS1 OCT 153000 PRS2 OCT 203 BLANK ASC 1, HED REAL TIME CLOCK SC{HEDULE ON TIME ROUTINE * * PROGRAM TO BE SCHEDULED * * THE TMSCH ROUTINE SCHEDULES THE PROGRAM IF DORMANT * THEN COMPUTES ITS NEXT SCHEDULE TIME FROM ITS * RES CODE AND MULT FACTOR IN ITS ID-SEGMENT. * IF THE RES CODE IS ZERO THE PROGRAM IS REMOVED FROM * THE TIME LIST. * * THE CALLING SEQUENCE IS: * SET POINT TO THE ADDRESS OF THE TIME LINK WORD * JSB TMSCH * TMSCH NOP CCB COMPUTE THE STATUS ADDRESS ADB POINT LDA B,I GET THE STATUS AND D15 GET THE LOW BITS SZA IF NOT DORMANT JMP CH026 FORGIT IT ADB DM15 ELSE SET B TO THE ID-SEG ADDRESS JSB $LIST CALL LIST PROCESSOR TO SCHED PROG OCT 401 THE PROGRAM * * CHECK IF NEXT SCHEDULE TIME TO BE COMPUTED * CH026 LDB POINT INB LDA B,I RES CODE/MULT FACTOR AND M7777 SZA,RSS IF ZERO, THEN NO NEW START TIME JMP CH040 GO REMOVE PROG FROM LIST STA TEMP SAVE MULTIPLICATION FACTOR JSB TUDAT GO UPDATE THE SCHEDULE TIME JMP TMSCH,I RETURN * * REMOVE PROGRAM FROM TIME LIST * CH040 LDA B10K CLEAR THE RESOLUTION TOO. STA B,I AND RESET IN THE ID-SEGMENT. LDB POINT VALUE OF TLINK JSB $TREM GO TO REMOVE PROGRAM JMP TMSCH,I GO TO PROCESS NEXT PROGRAM HED REAL TIME CLOCK PROCESSING ID-TIME UPDATE * TUDAT USES THE RES AND MULT FROM THE ID-SEGMENT TO * UPDATE THE EXECUTE TIME OF THE PROGRAM WHOES ID- * SEGMENT RESOLUTION CODE ADDRESS IS IN B. * * CALLING SEQUENCE: * * SET TEMP TO THE MULT FACTOR * SET B TO THE RES CODE ADDRESS * JSB TUDAT * TUDAT DEF SETMS ENTRY POINT LDA B,I GET THE RES CODE TO A INB SET STB TEMP1 TEMPS TO THE TIME INB ADDRESSES STB TEMP2 IN THE ID-SEGMENT RAL,CLE,SLA,RAL IF HOURS JMP HR 1 GO DO SPECIAL HOURS UPDATE RAL,CLE ELSE SET UP AND D7 FOR THE APPROPIATE ADA TTAB BASE LDA A,I AND MULTIPLY BY THE MULT. CH030 MPY TEMP CH031 ADA TEMP1,I ADD THE CURRENT VALUE SEZ IF OVERFLOW INB STEP B ADB TEMP2,I ADD THE HIGH BITS. STA TEMP1,I RESTORE THE NEW TIME STB TEMP2,I TO THE ID-SEG. CLE,SSB IF NEGATIVE RESULT THEN JMP TUDAT,I EXIT * LDA RS1 POSITIVE RESULT SO ADD NEG. OF LDB RS2 DAY TO MAKE NEGATIVE JMP CH031 * HR LDA TEMP FOR HOURS FIRST CLB INSURE LESS THAN DIV D24 ONE DAY LDA B RESULT IS MODULO 24 MPY D15 NOW SET UP TO MULTIPLY BY 60,000 STA TEMP IN TWO STEPS TO PREVENT OVERFLOW LDA D24K FIRST BY 15, JMP CH030 AND NEXT BY 24,000 * $BATM NOP NOP TLIST NOP TOP OF TIME SCHEDULE LIST $TIME OCT 16000 TIME OF DAT SET TO 8:00 AND OCT 177650 DAY AND YEAR TO APPROX. DAYS OCT 4552 RELEASE DATE. TTAB DEF * TTAB1 DEC 1 TTAB2 DEC 100 TTAB3 DEC 6000 D24K DEC 24000 D2 DEC 2 D7 DEC 7 D14 DEC 14 D15 DEC 15 D16 DEC 16 D24 DEC 24 DM15 DEC -15 SPC 4 * * SYSTEM START TBG ROUTINE * * THE $SCLK ROUTINE STARTS THE CLOCK PROVIDES * AN ENTRY POINT TO AID THE POWERFAIL ROUTINE. * * ON FIRST ENTRY THIS ROUTINE: * * 1. CONFIGURES IT SELF * 2. STARTS THE TBG. * 3. PRINTS "SET TIME" * 4. EXITS TO THE DISPATCHER. * * ON SUBSEQUENT ENTRIES IT IS A SUBROUTINE TO RESTART * TIME BASE GENERATOR. * $SCLK JMP CONFI GO CONFIGURE ON FIRST ENTRY LDA D2 PROGRAM THE TBG FOR 10'S OF MS. OTATB OTA 0 STCTB OCT 1100 CONFIGURED TO A STC TBG,C STFTB OCT 1600 CONFIGURED TO A STF TBG JMP $SCLK,I RETURN SPC 2 CONFI LDA TBG CONFIGURE THE TBG TEMP IOR OTATB MAKE AN OTA TBG TEMP1 STA OTATB SET IT TEMP2 IOR STCTB FORM AN STC TBG,C TCC STA STCTB SET THE STC XOR STFTB SET UP THE STF STA STFTB TLINC JSB $SCLK START THE TBG POINT LDA TUDAT SEND THE DD.RT STB DD.RT SAVE D.RTR ID-SEG. ADDRESS JSB $SYMG SET TIME JMP $XEQ MESSAGE AND GO TO THE DISPATCHER SPC 2 SETMS DEC -10 LENGTH OF SET TIME MESSAGE OCT 6412 PUT CR/LF OUT FIRST ASC 2,SET TIME ATI ASC 1,TI TI USED BY BATCH TIMER HED $TIMV ROUTINE TO GET CURRENT SYSTEM TIME * THE $TIMV ROUTINE CONVERTS THE CURRENT REAL TIME VALUES * * AND STORES THE VALUES INTO A USER SPECIFIED BUFFER. * * * * ROUTINE TO PROVIDE CURRENT TIME * CALLING SEQUENCE * DLD TIME PUT TIME IN A AND B REGS. * JSB $TIMV * RQP2 CONTAINS BEGIN ADDRESS OF 5 WORD BUFFER * RQP3 (OPTIONAL) CONTAINS ADDRESS OF YEAR BUFFER * ON RETURN, * ARRAY(1) = TENS OF MILLISECOND * ARRAY(2) = SECONDS * ARRAY(3) = MINUTES * ARRAY(4) = HOURS * ARRAY(5) = DAYS * RQP3,I = YEAR (197X) * * E IS SET * A IS THE YEAR * $TIMV ASC 1,ME ENTRY/EXIT (END OF SET TIME MSS.) CLE CLE FOR ADDITION ADA PRS1 ADD POSITIVE 24 HRS. SEZ TO GET A POSITIVE INB TIME ADB PRS2 DIV TTAB3 DIVIDE BY 6000 STA RQP4 SAVE MIN/HR ASR 16 POSITION B (SEC/10MS) FOR DIVIDE DIV TTAB2 DIVIDE BY 100 TO GET SEC/10MS STB RQP2,I SET 10MS VALUE ISZ RQP2 STEP ADDRESS POINTER STA RQP2,I SET SEC. VALUE ISZ RQP2 STEP TO MIN. ADDRESS. CLB SET UP FOR DIVIDE LDA RQP4 FETCH MIN/HR DIV D60 Z SEPERATE STB RQP2,I SET MINUTES ISZ RQP2 STEP TO HR. ADDRESS STA RQP2,I SET HRS ISZ RQP2 STEP ADDRESS CLB SET B FOR DIVIDE LDA $TIME+2 GET DAYS FORM THE TIME DIV D365 SEPERATE DAYS AND YEARS CCE,INB STEP DAYS TO 1-365 FROM 0-364 STB RQP2,I SET DAYS ADA D1970 ADD THE BASE YEAR TO YEAR STA RQP3,I SET YEAR JMP $TIMV,I RETURN SPC 2 D60 DEC 60 D365 DEC 365 D1970 DEC 1970 BASE YEAR DM197 DEC -1970 NEG OF BASE YEAR HED REAL TIME ON REQUEST FOR TIME SCHED PROGRAM * ON REQUEST CONTINUATOR * * IF CURRENT TIME VALUES ARE ZERO OR NOW IS CODED THEN * THE CURRENT TIME IS PUT IN THE ID-SEG. AND R/M USED * TO COMPUTE THE NEXT TIME. * * IF CURRENT TIME VALUES ARE NOT ZERO THE PROGRAM IS * JUST PUT IN THE TIME LIST. * * CALLING SEQUENCE * * A=-1 IF NOW OPTION * A#-1 IF NOT NOW BUT PUT IN TIME LIST * B=ID-SEGMENT TIME ADDRESS. * * JMP $ONTM * $ONTM STB DLDAD SET LOAD ADDRESS STA TCC SET NOW FLAG FOR LATER INA,SZA,RSS IF NOW SKIP LOAD JMP NOW DLD DLDAD,I GET THE CURRENT TIME VALUES DLDAD EQU *-1 SZA,RSS IF TIME NOT ZERO SZB THEN JMP TIMIN THEN GO PUT IN TIME LIST NOW DLD $TIME GET CURRENT TIME DST DLDAD,I AND SET IN THE ID-SEG TIMIN LDB DM2 COMPUTE TIME LIST ADDRESS ADB DLDAD AND STB POINT AND SET FOR LIST ROUTINE JSB $TADD ADD PROG TO TIME LIST. ISZ TCC SKIP IF NOW RSS JSB TMSCH SCHEDULE THE PROG. AND UPDATE MESEX CLA SET A FOR NO ERROR LDB $MESS GET RETURN ADDRESS JMP B,I RETURN THRU $MESS ROUTINE HED $TIMR ROUTINE SETS UP ID SEGMENT TIME VALUES * THE $TIMR ROUTINE WHICH ALLOWS USER TO ENTER TIME VALUES * * INTO AN ID SEGMENT FUNCTIONS AS FOLmLOWS: * * IF PROG VALUE IS ZERO, THEN CURRENT EXECUTING PROG. * * AND IF NON-ZERO, THEN SEARCH FOR ID SEGMENT * * ADDRESS. * * IF RESOLUTION CODE IS NON-ZERO, THEN RES/MULT WORD * * STORED. THE NEXT VALUE IS CHECKED FOR + OR -. * * IF PLUS, THEN NEXT START TIME VALUES GIVEN AND * * ARE STORED AND PROGRAM ENTERED INTO TIME LIST. * * IF MINUS, THEN THE COMPLEMENT OF VALUE IS ADDED* * TO THE CURRENT TIME AND ENTERED INTO THE ID * * SEGMENT. IF PROG VALUE IS ZERO, THIS IS TO BE A* * TIME DELAY OF CURRENT PROGRAM AND THUS PROGRAM * * IS SET DORMANT VIA LINK PROCESSOR BUT POINT OF * * SUSPENSION IS NOT CLEARED. IF PROG VALUE IS NON* * ZERO, THEN PROGRAM IS ENTERED INTO TIME LIST. * * THIS IS METHOD FOR SPECIFYING AN INITIAL OFFSET* * TIME. * * * ROUTINE TO SET ID SEGMENT TIME VALUES * CALLING SEQUENCE * JSB EXEC * DEF *+6 OR DEF *+9 * DEF REQUEST CODE ADDRESS RQP1 * DEF PROG RQP2 * DEF RES RQP3 * DEF MULT RQP4 * DEF OFFSET OR DEF HRS RQP5 * DEF MINS RQP6 * DEF SECS RQP7 * DEF TENS OF MSEC RQP8 * WHERE * PROG = 0 IF CURRENTLY EXECUTING * = ADDRESS OF PROGRAM NAME * RES = 1 FOR 10 MILLISECOND RESOLUTION * = 2 FOR SECONDS RESOLUTION LIST *  = 3 FOR MINUTES RESOLUTION LIST * = 4 FOR HOURS RESOLUTION LIST * MULT = 0 FOR N0 MULTIPLE VALUE * = N A POSITIVE INTEGER FOR COMPUTING * NEXT SCHEDULE TIME * OFFSET= M A NEGATIVE INTEGER FOR COMPUTING INITIAL * OFFSET TIME * HRS= START TIME HOURS * MINS= START TIME MINUTES * SECS= START TIME SECONDS * TENS= START TIME TENS OF MILLISECONDS * * EXEC PRE-PROCESSOR CHECKS FOR RESOLUTION CODE * ERRORS AND FINDS THE ID-SEGMENT ADDRESS. * * CALLING SEQUENCE: * * LDB ID-SEGMENT ADDRESS * JMP $TIMR SKP $TIMR ADB D16 GET ADDRESS OF TIME LINK STB TCC AND SAVE IT INB STEP TO RESOLUTION ADDRESS STB TEMP1 AND SAVE LDA B,I GET RESOLUTION CODE/T/MULT INB STEP TO TIME LOCATION STB DSTAD SAVE THE ADDRESS * ALF,ERA SAVE BIT 12 SINCE PROGRAM MAY LDA RQP4,I ALREADY BE IN THE TIME LIST ALF,ERA COMBINE MULT AND SAVED T-BIT LDB RQP3,I RESOLUTION TO B LSR 3 SHIFT RESULT TO A STA TEMP1,I SET IT IN THE ID-SEG. LDA RQP5,I NEGATIVE IF OFFSET SSA,RSS POSITIVE IF START TIME JMP TI100 CMA,INA SET POSITIVE AND STA TEMP SAVE IN TEMP LDA RQP2,I CHECK IF CURRENT XEQ PROGRAM SZA JMP TI012 NO * LDB XEQT YES, SET THE SAVE- STB $WORK RESOURCES BIT IN STA XEQT THE PROGRAM'S STATUS ADB D15 WORD. LDA B,I (CLEAR XEQT SO THAT $LIST WILL IOR B200 SET THE NP BIT IF THE USER IS STA B,I MODIFYING ITS ON TIME VALUES). JSB $LIST MAKE PROGRAM DORMANT OCT 300 TI012 LDA $TIME GET THE CURRENT TIME LDB $TIME+1 AND SET DS ZT DSTAD,I IT IN THE ID-SEG DSTAD EQU *-1 LDB TEMP1 GET THE RES. CODE ADDRESS TO B JSB TUDAT UPDATE THE TIME * TI015 LDB TCC JSB $TADD ENTER PROG INTO TIME LIST JMP $XEQ DONE - EXIT TO DISPATCHER * * GIVEN START TIME * TI100 LDB DSTAD SET B TO THE TIME ADDRESS AND JSB $ETTM GO TO STORE VALUES IN ID SEGMENT JMP TI015 GO PUT PROG IN TIME LIST * DM2 DEC -2 B200 OCT 200 HED REAL TIME CLOCK PROCESSOR SET TIME IN ID-SEG * $ETTM SETS A TIME IN THE REFERENCED ID-SEGMENT. * * CALLING SEQUENCE * * RQP5,I=HOURS * RQP6,I=MINUTES * RQP7,I=SECONDS * RQP8,I=TENS OF MS. * * B=TIME ADDRESS IN THE ID-SEG. * $ETTM NOP ENTRY POINT STB DSTA2 SAVE THE ID-SEG. ADDRESS LDA RQP7,I GET SECONDS MPY TTAB2 CONVERT TO MS (MPY D100) ADA RQP8,I ADD THE MS VALUE AND STA RQP8 AND SAVE LDA RQP5,I GET HOURS MPY D60 CONVERT TO MINUTES ADA RQP6,I ADD MINUTES MPY TTAB3 CONVERT MINUTES TO MS (MPY D6000) CLE PREPARE FOR ADD ADA RQP8 ADD MS VALUE SEZ IF OVERFLOW INB STEP HIGH PART SET01 CLE,SSB IF POSITIVE JMP SET02 ADA RS1 SUBTRACT 24 HRS SEZ,CLE UNTIL INB ADB RS2 IT IS JMP SET01 NEGATIVE SET02 DST DSTA2,I SET THE VALUE IN THE ID-SEG. DSTA2 EQU *-1 JMP $ETTM,I RETURN HED ADDITION OF PROGRAM TO TIME RESOLUTION CODE LIST * THE $TADD ROUTINE FUNCTIONS AS FOLLOWS: * * IF RESOLUTION CODE IS ZERO, THEN EXIT * * IF NON-ZERO RESOLUTION, AND PROGRAM NOT IN TIME LIST* * (BIT 12 OF RES/T/MULT 0), THEN SET BIT 12 OF * * MULT WORD TO SIGNIFY THAT IT IS IN TIME LIST. * * IF TIME LIST IS NULL, THEN SET IT TO POINT TO * * PROGRAM TIME LINK AND SET TLINK TO ZERO. * * IF PROGRAM NOT IN LIST, THEN IT IS ADDED TO * * TOP OF TIME LIST AND ITS TLINK VALUE MADE * * TO POINT TO THE PREVIOUS TOP OF LIST * * PROGRAM. * * * * * ADDING A PROGRAM TO A TIME RESOLUTION CODE LIST * CALLING SEQUENCE * LDB ADDRESS OF ID SEGMENT TLINK VALUE * JSB $TADD * $TADD NOP STB TLINC SAVE TLINK ADDRESS INB INCR TO RES CODE/MULT FACTOR ADD LDA B,I ALF,CLE,ERA AND D7 SZA,RSS JMP $TADD,I EXIT SEZ PROG IN TIME LIST? JMP $TADD,I YES, SO EXIT * LDA B,I IOR B10K SET T BIT STA B,I LDB TLIST LOAD VALUE OF TOP OF LIST LDA TLINC SET LINK OF NEW PROG TO PREVIOUS STB A,I OF TIME LIST STA TLIST SET TOP OF TIME LIST TO NEW PROG TLINK ADDRESS JMP $TADD,I RETURN HED REMOVE A PROGRAM FROM TIME LIST * * * THE $TREM ROUTINE FUNCTIONS AS FOLLOWS: * * IF PROGRAM NOT IN TIME LIST, THEN EXIT * * IF PROGRAM IN TIME LIST, THEN CLEAR BIT 12 OF * * RES/T/MULT TO INDICATE NOT IN TIME LIST. * * A SEARCH IS MADE OF THE TIME LIST PROGRAMS * * UNTIL PROGRAM FOUND OR END OF LIST. THE * * TLINK VALUES ARE CHANGED AS NECESSARY. * * * * * CALLING SEQUENCE * LDB TLINK ADDRESS OF ID SEGMENT * JSB $TREM * $TREM NOP ENTRY/EXIT STB TLINC COMPUTE LIST ADDRESS INB S LDA B,I CHECK IF PROGRAM IS IN TIME LIST AND B10K SZA,RSS JMP $TREM,I NO, SO EXIT XOR B,I CLEAR T-BIT STA B,I LDA DTLST GET ADDR OF TOP OF LIST PNTR * TR010 LDB A,I GET CURRENT TOP OF LIST CPB TLINC IS THIS THE PROG? JMP TR030 YES SZB,RSS END OF LIST? JMP $TREM,I YES, RETURN STB A SAVE ADDR OF CURRENT LINKWORD JMP TR010 GO CHECK NEXT PROG * TR030 LDB B,I LINK NEXT PROG STB A,I TO PREV PROG TO REMOVE JMP $TREM,I RETURN SPC 1 DTLST DEF TLIST B10K OCT 10000 HED MESSAGE PROCESSOR TM REQUEST COMPLETION * THIS ROUTINE COMPLETES THE SET TIME REQUEST * * CALLING SEQUENCE: * * LDB DEFP1 SET B TO ADDRESS OF PRAM LIST * JMP $TMRQ * $TMRQ LDA DM6 SET UP PRAM ADDRESSES ON STA TEMP THE BASE PAGE LDA DRQP3 TM1 STB A,I ADB D4 PRAMS SEPERATED BY FOUR WORDS INA ISZ TEMP DONE? JMP TM1 NO * LDA RQP3,I GET YEAR ADA DM197 SUBTRACT THE BASE MPY D365 MULTIPLY BY DAYS PER YEAR ADA RQP4,I ADD THE DAY CMB SET B TO -1 IF LEGAL RESULT ADA B SUBRTACT ONE FROM DAY INB,SZB IF B WAS NOT ZERO AFTER MULT. THEN JMP $INER INPUT ERROR STA $TIME+2 SET DAY COUNTER * LDB DTIME GET TIME ADDRESS TO B JSB $ETTM SET THE TIME JMP MESEX EXIT TO MESSAGE PROCESSOR SPC 2 DM6 DEC -6 DRQP3 DEF RQP3 D4 DEC 4 DTIME DEF $TIME HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** * * *** SYSTEM BASE PAGE COMMUNICATION AREA *** * . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES * DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE LUMAX EQU .+3  # OF LOGICAL UNITS (IN DRT) * INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES * TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE * KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 8 PARAMETERS) * * DEFINITION OF SYSTEM LISTS (QUEUES) * * DORMT EQU .+32 ADDRESS OF 'DORMANT' LIST, SKEDD EQU .+33 'SCHEDULE' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQ|mTRNU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BACKGROUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) * DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS * BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND * * FREG1 EQU LBORG FREG2 EQU RTORG FREG3 EQU BKORG FLG EQU OPFLG * A EQU 0B LOCATION OF A REGISTER B EQU 1B LOCATION OF B REGISTER ORG * PROGRAM LENGTH END $SCLK mTASMB,R,L ** RT MESSAGE MODULE ** HED RT MESSAGE MODULE * NAME: $ASCM * SOURCE: 92001-18012 * RELOC: 92001-16012 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM $ASCM,0 92001-16012 760622 * SUP * ENTRY REFERENCE NAMES * ENT $OPER,$ERIN,$NOPG,$ILST,$NOLG,$LGBS,$NMEM * ******************************************************************** * * THE RTE MESSAGE MODULE CONTAINS ALL THE FIXED MESSAGES THE * SYSTEM OUTPUTS TO THE USER. * * THESE MESSAGES CONSISTS OF A CHARACTER COUNT (NEGATIVE) * FOLLOWED BY THE ASCII MESSAGE. * * THE ENTRY POINT IS ON A DEF TO THE ABOVE MESSAGE. * ******************************************************************** * $ILST DEF *+1 ILLEGAL STATUS ERROR MESSAGE DEC -14 ASC 7,ILLEGAL STATUS * $NOLG DEF *+1 DM12 DEC -12 ASC 6,NO LGO SPACE * $LGBS DEF *+1 DM10 DEC -10 ASC 5,LGO IN USE * $OPER DEF *+1 OPERATION CODE ERROR MESSAGE DEC -12 ASC 6,OP CODE ERR * $NOPG DEF *+1 NO SUCH PROGRAM ERROR MESSAGE DEC -12 NO ASC 6,NO SUCH PROG * $ERIN DEF *+1 INPUT ERROR MESSAGE DEC -12 ASC 6,INPUT ERROR * $NMEM DEF *+1 DEC -18 ASC 9,CMD IGNORED-NO MEM * END $ERIN UASMB,Q,C ** R/T INPUT/OUTPUT CONTROL MODULE ** HED ** R/T INPUT/OUTPUT CONTROL MODULE ** * NAME: RTIOC * SOURCE: 92001-18012 * RELOC: 92001-16012 * PGMR: G.A.A.,D.L.S. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM RTIOC 92001-16012 780810 * ***** AMD-DAS ***** FEB,72 ***** REV.LWH ***** ***** AMD-DAS ***** AUG,72 ***** REV.GAA ***** * * * ENT $CIC,$XSIO,$SYMG,$IORQ,$IOUP,$IODN ENT $ETEQ,$IRT,$XCIC,$DEVT ENT $GTIO,$UPIO,$CVEQ,$YCIC ENT $BITB,$UNLK,$XXUP,$DLAY,$DMEQ,$CKLO ENT $BLLO,$BLUP ENT $OPSY * EXT $RQST,$CLCK,$XEQ,$TYPE,$LIST,$ALC,$RTN EXT $LUSW,$SCD3,$RNTB,$CVT3,$ERMG EXT $CVT1,$CLAS,$REIO,$ABRT,$INER,$ZZZZ EXT $PDSK EXT .MVW,$ERAB,$IDNO * * SUP ORB $BLLO DEC -100 $BLUP DEC -300 ORR * * MODULE OF THE R E A L - T I M E E X E C U T I V E * * * THIS INCLUDES THE FOLLOWING MAJOR SECTIONS: * * 1) CENTRAL INTERRUPT CONTROL * * 2) INPUT / OUTPUT CONTROL * - I/O REQUEST PROCESSING * - I/O COMPLETION PROCESSING * - GENERAL I/O ERROR PROCESSING * * 3) SYSTEM ERROR DIAGNOSTIC PRINT ROUITNE * * 4) PROCESSOR FOR OPERATOR I/O STATEMENTS * HED < CENTRAL INTERRUPT CONTROL > * *** C E N T R A L I N T E R R U P T C O N T R O L *** * * THE PROCESSING OF SYSTEM INTERRUPTS IS CONTROLLED * BY DIRECTING ALL SOURCES TO THE ENTRY POINT < $CIC>. * < $CIC> IS RESPONSIBLE FOR SAVING AND RESTORING * THE CURRENT STATE OF THE MACHINE, ANALYSING THE * SOURCE OF THE INTERRUPT, AND ACTI6VATING THE * APPROPRIATE PROCESSOR. THIS ROUTINE IS TABLE-DRIVEN * BY THE *INTERRUPT TABLE*. * * SPECIAL PROCESSING FOR A "PRIVILEGED" CLASS OF * INTERRUPTS IS PROVIDED BY $CIC. THIS IS DESCRIBED * FULLY IN SECTION III BELOW. BRIEFLY, A SPECIAL * I/O CARD CAN BE USED TO SEPARATE SPECIAL INTERRUPTS * FROM NORMAL SYSTEM CONTROLLED INTERRUPTS. THE * PRESENCE AND LOCATION OF THE SPECIAL CARD IS * NOTED AT SYSTEM CONFIGURATION TIME. IF IT IS * PRESENT, THE EXEC OPERATIONS ARE NOT PERFORMED * WITH THE INTERRUPT SYSTEM DISABLED BUT RATHER * WITH THE CONTROL SET ON THE SPECIAL CARD TO * HOLD OFF SYSTEM I/O INTERRUPTS. * * I. INTERRUPT TABLE (INTBL) * * A TABLE, ORDERED BY HARDWARE INTERRUPT PRIORITY, * DESIGNATES THE ASSOCIATED SOFTWARE PROCESSOR AND * THE PROCEDURE FOR INITIATING THE PROCESSOR. THIS * TABLE IS CONSTRUCTED BY *RTGEN* ON INFORMATION * SUPPLIED BY THE USER IN CONFIGURING THE SYSTEM. * THE TABLE CONSISTS OF ONE ENTRY PER INTERRUPT * SOURCE: EACH ENTRY CONTAINS ONLY ONE WORD. THE * CONTENTS OF EACH VALID ENTRY IS THE IDENTIFIER * OF THE PROCESSOR. SYSTEM PROCESSORS ARE NOTED * BY POSITIVE VALUES, USER PROCESSORS BY NEGATIVE * VALUES: * * 1. SYSTEM - THE IDENTIFIER IS THE ADDRESS OF * THE EQT ENTRY IDENTIFYING THE I/O DEVICE. * * 2. USER - THE ADDRESS OF THE PROGRAM * IDENTIFICATION SEGMENT IS IN 2-S COMPLEMENT * FORM IN THE ENTRY. * * 3. ILLEGAL - AN ENTRY CORRESPONDING TO AN * ILLEGAL INTERRUPT SOURCE CONTAINS ZERO. * * A PROCESSOR IS CALLED DIRECTLY IF IT RESPONDS * TO STANDARD SYSTEM INTERRUPT (E.G., $CLCK, * MEMORY PROTECT, I/O DEVICE CONTROLLED BY A * SYSTEM DRIVER) OR IS SCHEDULED IN THE NORMAL * PRIORITY ORDER IF IT RESPONDS TO A USER * CONTROLLED DEVICE OR INTERRUPT SOURCE. SKP * II. INTERRUPT PROCESSING * * INTERRUPT ACKNOWLEDGEMENT BY THE CPU CAUSES * THE INSTRUCTION IN THE 9RWORD CORRESPONDING * TO THE I/O CHANNEL ADDRESS TO BE EXECUTED. * FOR ALL ACTIVE I/O CHANNELS ( PLUS LOCATIONS * 5-7 ) CONTROLLED BY THE SYSTEM, THE INSTRUCTION * SET IN EACH INTERRUPT LOCATION IS A JUMP * SUBROUTINE INDIRECTLY TO < $CIC>. * SKP * <$CIC> PERFORMS THE FOLLOWING: * * 1. DISABLES THE INTERRUPT SYSTEM. * * 2. SAVES ALL REGISTERS PLUS THE INTERRUPT * RETURN POINT IN THE EXECUTING * ID SEGMENT. * * 3. CLEARS THE FLAG OF THE INTERRUPT SOURCE. * * 4. SETS 'MPTFL' = 1 TO MEAN MEMORY PROTECT * IS OFF - FLAG FOR PRIVILEGED PROCESSORS. * * 5. CHECKS FOR SPECIAL INTERRUPT PROCESSING. * IF 'DUMMY' IN BASE PAGE COMMUNICATION * AREA = 0, THEN LEAVE THE INTERRUPT SYSTEM * DISABLED AND GO TO STEP 6. * * 'DUMMY' > 0 - PRIVILEGED INTERRUPTS: * -THE CONTENTS OF 'DUMMY' IS THE I/O * ADDRESS OF THE CARD; THIS IS USED TO * SET THE CONTROL FF ON THE CARD (FLAG * IS ALREADY SET) TO HOLD OFF LOWER * PRIORITY INTERRUPTS (SYSTEM INTERRUPTS) * -CLEARS THE CONTROL FLIP-FLOP OF * EACH DMA CHANNEL TO PROHIBIT POSSIBLE * INTERRUPTS FROM OCCURRING. * -ENABLE THE INTERRUPT SYSTEM. * * 6. TRANSFERS DIRECTLY TO THE INTERRUPT * PROCESSOR FOR SOURCES OF: * * 5 - MEMORY PROTECT VIOLATION * 6 - TIME BASE GENERATOR(TBG)INTERRUPT * * FOR OTHER SOURCES, THE INTERRUPT SOURCE * CODE IS USED TO INDEX THE INTERRUPT TABLE. * THE CONTENTS OF THE INTBL ENTRY DETERMINES * THE MANNER IN INITIATING THE PROCESSOR: * * A. +, THE CONTENTS OF THE ENTRY IS * ASSUMED TO BE THE FWA OF AN EQT ENTRY. * THE ADDRESSES OF THE 15-WORD ENTRY * ARE SET IN AND CONTROL * TRANSFERRED DIRECTLY TO THE COMPLETION * SECTION] ADDRESS (WORD 3 OF EQT ENTRY). * * B. -, THE VALUE IS SET POSITIVE AND IS * SET IN A CALL TO <$LIST> IN THE * SCHEDULING MODULE- THE CALL IS MADE IF * THE USER PROGRAM IS DORMANT- CONTROL IS * TRANSFERRED TO $XEQ. IF THE PROGRAM IS * NOT DORMANT, IT IS NOT SCHEDULED AND THE * DIAGNOSTIC "SC03 INT XXXXX" IS OUTPUT * TO THE SYSTEM TTY- XXXXX IS THE PROGRAM * NAME. CONTROL IS RETURNED TO THE INTER- * RUPTED SEQUENCE. * * C. 0, ILLEGAL OR UNDEFINED INTERRUPTS ARE * NOT PROCESSED BUT THE DIAGNOSTIC * "ILL INT XX" IS OUTPUT TO THE SYSTEM * TTY. XX IS THE INTERRUPT CODE. * * 7. I/O DRIVER RETURNS INDICATE CONTINUATION * OR COMPLETION OF THE OPERATION BY THE * DRIVER OR DEVICE: * * A. RETURN AT (P+1): COMPLETION OF THE * OPERATION. $CIC TRANS- * FERS DIRECTLY TO THE * IOC COMPLETION SECTION * AT < IOCOM >. CONTROL * IS NOT RETURNED TO * < $CIC>. * * B. RETURN AT (P+2): CONTINUATION OF THE * OPERATION. $CIC RETURNS * TO THE INTERRUPTED * SEQUENCE AS DESCRIBED * IN STEP 8 FOLLOWING. * * 8. RESTORING INTERRUPT CONDITIONS AND RETURN * TO POINT OF INTERRUPTION. AN ENTRY POINT * CALLED '$IRT' IS PROVIDED FOR USE BY * OTHER MODULES OF THE R/T EXEC TO RESET * FLAGS AND THE DMA CHANNELS AND RETURN TO * THE USER PROGRAM. * * THE CALLING SEQUENCE IS JUST: * * - JMP $IRT - * * $IRT PERFORMS THE FOLLOWING: * 1 - DISABLES THE INTERRUPT SYSTEM * 2 - SETS 'MPTFіL' = 0 TO MEAN THAT MEMORY * PROTECT IS ON (ENABLED). * 3 - SKIP TO 6 IF NOT A PRIVILEGED SYSTEM * 4 - ISSUES A CLC TO CLEAR THE CONTROL * FF ON THE SPECIAL CARD. * 5 - SETS THE CONTROL FF ON EITHER DMA * CHANNEL IF BIT 15 OF THE INTBL WORD * =1 TO MEAN IT IS ACTIVE. THIS * ENABLES DMA INTERRUPTS ONLY. * 6 - RESTORES THE REGISTERS AND * 7 - EXECUTES THE CURRENT PROGRAM AT XSUSP. SKP * III. SPECIAL (PRIVILEGED) INTERRUPTS * * THIS PROVISION ALLOWS INTERRUPTS FROM SPECIAL * DEVICES TO BE RECOGNIZED WITHIN 100 MICRO SECONDS * AND TO BE PROCESSED BY SPECIAL, COMPLETELY * INDEPENDENT ROUTINES CLASSIFIED AS SYSTEM TYPE * PROGRAMS. INTERRUPTS ARE CHANNELED DIRECTLY * TO THE ENTRY POINT OF A ROUTINE BY A JSB INDIRECT * IN THE CORRESPONDING CORE LOCATION. $CIC IS * NOT AWARE OF THESE SPECIAL INTERRUPTS OCCURRING; * IT ONLY ALLOWS THE INTERRUPT SYSTEM TO BE * ENABLED AND A SOFTWARE FLAG SET TO INDICATE * THE STATUS OF MEMORY PROTECT. THE JSB TO THE * ENTRY POINT FOR A ROUTINE IS SET BY USING THE * "ENT,XXXXX" STATEMENT IN RTGEN WHEN CONFIGURING * A REAL-TIME SYSTEM. * THE SPECIAL PROCESSING ROUTINES CANNOT USE * ANY FEATURES OR REQUESTS OF THE STANDARD * R/T EXEC. THESE ARE INDEPENDENT ROUTINES. * COMMUNICATION BETWEEN A NORMAL PROGRAM UNDER * THE CONTROL OF THE R/T EXEC AND A SPECIAL * INTERRUPT PROCESSOR CAN BE DONE THROUGH * THE APPROPRIATE COMMON REGION: I.E. FLAGS OR * INDICATORS CAN BE SET IN PRE-DEFINED WORDS * IN COMMON TO INITIATE PROCESSING. THE NORMAL * USER PROGRAM CAN BE SCHEDULED TO RUN AT A * PERIODIC TIME INTERVAL TO SCAN THE INDICATORS. * THIS FACILITY IS PROVIDED TO ACCOMODATE HIGH- * SPEED PROGRAM CONTROLED DATA TRANSMISSION * WHICH REQUIRES QUICK RESPONSE. * THE SPECIAL INTERRUPT PRbOCESSORS ARE * RESPONSIBLE FOR SAVING AND RESTORING ALL * REGISTERS USED AND FOR RESTORING MEMORY * PROTECT TO ITS STATE BEFORE THE SPECIAL * INTERRUPT OCCURRED. MEMORY PROTECT IS * AUTOMATICALLY DISABLED AT THE OCCURRENCE * OF ANY INTERRUPT. THE WORD 'MPTFL' IN THE * BASE PAGE COMMUNICATION AREA IS SET BY THE * R/T EXEC TO INDICATE THE STATUS OF THE * MEMORY PROTECT: * * 'MPTFL' = 0 MEANS MEMORY PROTECT IS 'ON'. * THE SPECIAL ROUTINE MUST ISSUE * A STC 5 IMMEDIATELY BEFORE * RETURNING TO THE INTERRUPTED * SEQUENCE BY A JMP -,I * * = 1 MEANS THAT THE R/T EXEC ITSELF * WAS EXECUTING WHEN THE INTERRUPT * OCCURRED AND THAT MEMORY * PROTECT IS 'OFF'. THE ROUTINE * MUST NOT ISSUE THE STC 5 IN * THIS CASE. * * IF A SPECIAL INTERRUPT ROUTINE MUST EXECUTE * WITH THE INTERRUPT SYSTEM DISABLED, THE * STC 0 TO RE-ENABLE INTERRUPTS JUST PRIOR TO * EXITING MUST BE IN THE FOLLOWING SEQUENCE IF * MEMORY PROTECT IS ALSO TO BE TURNED ON: * * - STF 0 - * - STC 5 - * - JMP -,I - SKP $CIC NOP * CLF CLF 0 DISABLE INTERRUPT SYSTEM * * PRESERVE CURRENT STATUS OF MACHINE * STA XA,I SAVE REGISTERS STB XB,I SAVE REGISTERS ERA,ALS A,B SOC E AND INA OVERFLOW STA XEO,I LIA 4 GET INTERRUPT SOURCE CODE. CPA .5 IF MP/PE JMP $YCIC SKIP CLF (CLEARS SIGN BIT IF PE) * IOR CLF CONSTRUCT A CLF XX INSTRUCTION STA *+1 AND CLEAR INTERRUPT FLAG TO * ALLOW SPECIAL USER INTERRUPTS NOP TO BE ACKNOWLEDGED. * $XCIC LIA 4 ### SPECIAL ENTRY TO SKIP CLF ### $YCIC STA .}INTCD SAVE INTERRUPT SOURCE CODE. * ISZ MPTFL SET 'MPTFL' = 1 TO MEAN MP IS OFF. * SW1 JMP CIC.0 (STC DUMMY IF PRIVILEDGED OPTION) * * PROVIDE FOR SPECIAL (PRIVILEGED) INTERRUPTS * * CLC 6 CLEAR DMA CHANNELS CLC 7 CONTROL FF. * STF 0 RE-ENABLE INTERRUPTS * * CIC.0 EQU * MX1 EQU * ADDRESS OF JMP NMX1 JMP NMX1 CXA IF MX CPU CYB IF MX SAVE THE X/Y REGS DST XI,I LDA INTCD RESTORE THE INT CODE NMX1 LDB $CIC SAVE P-REGISTER A POSSIBLE STB XSUSP,I POINT OF SUSPENSION. * * CHECK FOR TRANSFER TO NON-I/O SYSTEM PROCESSOR * CPA .5 IF MEMORY PROTECT VIOLATION, JMP $RQST GO TO EXAMINE MP VIOLATION. * CPA TBG IF TIME BASE GENERATOR, JMP $CLCK GO TO TBG PROCESSOR ROUTINE. * * CHECK LEGALITY OF INTERRUPT * ADA N6 CODE - 6. STA B (SAVE FOR TABLE INDEX) ADB INTBA INDEX TO PROPER ENTRY CMA,CLE,SSA - ERROR IF CODE ADA INTLG LESS THAN 6 OR BEYOND * * GET PROCESSOR IDENT FROM INTERRUPT TABLE * LDA B,I GET CONTENTS OF ENTRY SEZ SKIP IF OUT OF INTBL RANGE. CLE,SZA,RSS UNDEFINED INTERRUPT JMP CIC.4 IF VALUE = 0, ISSUE DIAG. * * LDB INTCD REMOVE ERB BIT 15 OF INTBL WORD CPB .3 IF DMA CHANNEL RAL,CLE,ERA INTERRUPT. * SSA,RSS SYSTEM PROCESSOR IS TO BE CALLED JMP CIC.2 IF VALUE IS POSITIVE. * ** INTERRUPT PROCESSOR IS USER ROUTINE TO BE ** SCHEDULED FOR PRIORITY EXECUTION * CMA,INA SET POSITIVE TO GET ID SEGMENT STA B ADDRESS, SET IN B TO <$LIST>. * ADA .15 CHECK STATUS OF PROGRAM. LDA A,I IF STATUS IS ZERO (DORMANT), SZA SCHEDULE PROGRAM, OTHERWISE JMP CIC.5 ISSUE DIAGNOSTIC. * JSB $LIST CALL SCHEDULER TO LINK PROGRAM OCT 401 INTO SCHEDULE LIST. JMP $XEQ SPC 1 N6 DEC -6 SKP * * * ASSUME PROCESSOR FOR CODE GT= 6 IS A * SYSTEM I/0 DRIVER. VALUE OF INTERRUPT * TABLE ENTRY IS THE STARTING ADDRESS * OF THE EQUIPMENT TABLE ENTRY CORRESPONDING * TO THE INTERRUPTING DEVICE. * CIC.2 JSB $ETEQ SET EQT ENTRY ADDRESSES. * LDA INTCD (A) = INTERRUPT SOURCE CODE * CIC.6 EQU * LDB EQT14,I SET DEVICE SZB TIME-OUT CLOCK IF STB EQT15,I USER SPECIFIED TIME-OUT. * * CALL I/O PROCESSOR, COMPLETION SECTION * LDB EQT3,I CALL DRIVER JSB B,I *COMPLETION* SECTION. * JMP IOCOM (P+1): *COMPLETION RETURN* * CLA (P+2): *CONTINUATION RETURN* LDB OPATN CHECK FOR OPERATOR ATTENTION. STA OPATN -CLEAR OPERATOR FLAG- SZB IF FLAG SET, JMP $TYPE ACKNOWLEDGE. * LDA $LIST IF $LIST ENTERED SZA,RSS SKIP TO ENTER $XEQ JMP $IRT RETURN TO POINT OF INTERRUPT * JMP $XEQ GO DISPATCH POSSIBLE NEW PROGRAM * * ILLEGAL OR UNDEFINED INTERRUPT * CIC.4 LDA INTCD GET THE INTERRUPT CODE. JSB $CVT1 CONVERT. STA CICM1+6 STUFF IN THE MESSAGE LDA CICM1 PRINT JMP CIC.7 "ILL INT XX" * * ISSUE DIAGNOSTIC FOR BEING UNABLE TO * SCHEDULE USER PROGRAM ON INTERRUPT. * CIC.5 ADB .12 SET (B) TO ADDRESS OF NAME IN LDA B,I PROGRAM ID SEGMENT. STA CICM2+7 STORE INB PROGRAM DLD B,I NAME IN DST CICM2+8 DIAGNOSTIC AND PRINT LDA CICM2 "SC03 INT XXXXX" CIC.7 JSB $SYMG * * RESET INTERRUPT CONDITIONS - RETURN TO SEQUENCE * * ROUTINE: '$IRT' * * THIS ROUTINE RETURNS TO THE CURRENT USER PROGRAM. * IT DOES THE PRIV. INTERRUPT SYSTEM EXIT THING AND * RESTORES THE PROGRAMS REGISTERS AND THE INTERRUPT * AND MEMORY PROTECT SYSTEM. * [* CALLING SEQUENCE: * * SET UP XEQT AREA ON THE BASE PAGE FOR THE PROGRAM * * JMP $IRT * $IRT LDA XSUSP,I GET THE EXECUTE ADDRESS * STA INTCD SAVE THE RETURN ADDRESS MX2 EQU * ADDRESS OF JMP MX2 JMP NMX2 (DLD IF MX CPU) DEF XI,I ADDRESS FOR DLD IF MX CAX CBY NMX2 LDA XEO,I RESTORE E AND CLO O REGS. SLA,ELA PRIOR TO INTERRUPT TURN OFF STF 1 TO KEEP TIME DOWN CLA CLEAR 'MPTFL' TO MEAN CLF 0 TURN OFF THE INTERRUPT SYSTEM STA MPTFL MEMORY PROTECT IS ON. * SW2 JMP IRT2 RETURN IF NOT PRIV. (ELSE CLC) * STF1 STF 12B BUFFER ON DUMMY I/O CARD * DLD INTBA,I CHECK CONDITION OF DMA CHANNELS SSA IF BIT = 1 FOR DMA #1 (ACTIVE) STC 6 THEN SET CONTROL TO ENABLE SSB INTERRUPTS. SAME FOR STC 7 DMA CHANNEL #2. * IRT2 LDA XA,I RESTORE THE A AND B REGS LDB XB,I STF 0 TURN ON THE INTERRUPT SYSTEM STC 5 AND MEMORY PROTECT JMP INTCD,I -RETURN- SPC 4 CICM1 DEF *+1 DEC -10 ASC 5,ILL INT XX * CICM2 DEF *+1 DEC -15 ASC 8,SC03 INT XXXXX * INTCD NOP HOLDS INTERRUPT SOURCE CODE D$LUT DEF $LUSW ADDRESS OF BATCH LU TABLE $OPSY DEC -3 EXTERNAL FLAG INDICATING RTE-II SYSTEM. HED < RT EXECUTIVE INPUT/OUTPUT CONTROL > *** I N P U T / O U T P U T C O N T R O L *** * * THE I/O SCHEDULING AND CONTROL MODULE < IOC > * IS RESPONSIBLE FOR ALLOCATING THE USE OF ALL * STANDARD I/O DEVICES AND THE TWO DMA CHANNELS. * I/O DRIVERS OPERATE UNDER CONTROL OF AND * <$CIC> FOR INITIATION AND COMPLETION OF SYSTEM * AND USER DIRECTED I/O OPERATIONS. I/O DRIVERS * ARE INDEPENDENT PROGRAMS IDENTIFIED TO * BY THE DEVICE ASSOCIATED EQUIPMENT TABLE. DRIVERS * ARE COMPOSED TO TWO SECTIONS: *INITIATION* AND3O * *COMPLETION*. THE *INITIATION* SECTION IS * CALLED BY TO EXAMINE AND INITIATE AN I/O * OPERATION. THE *COMPLETION* SECTION IS CALLED * BY <$CIC> TO CONTINUE OR COMPLETE THE OPERATION. * DRIVERS PROVIDE FOR SIMULTANEOUS MULTI-DEVICE * CONTROL BY USING THE DEVICE EQT ENTRY FOR * VARIABLE STORAGE. * * I. * EQUIPMENT TABLE * (EQT) * * EACH I/O DEVICE CONTROLLED BY THE IOC/DRIVER * RELATIONSHIP IS DEFINED BY STATIC AND DYNAMIC * INFORMATION IN THE EQUIPMENT TABLE. THE EQT * IS A SYSTEM RESIDENT TABLE WHICH IS CONSTRUCTED * FROM USER DIRECTIVES BY . EACH EQT * ENTRY IS COMPOSED OF 15-WORDS IN THE FOLLOWING FORMAT: * SKP * * WORD CONTENTS * ---- ---------------------------- * 1 * I/O LIST . LINK POINTER * * 2 *DRIVER *INITIATION ADDRESS* * 3 *DRIVER *COMPLETION ADDRESS* * 4 *DBPOT/----UNIT#--CHANNEL #* * 5 *AV-TYPE CODE- UNIT STATUS* * 6 *REQUEST CONTROL WORD * * 7 *REQUEST BUFFER ADDRESS * * 8 *REQUEST BUFFER LENGTH * * 9 *TEMPORARY OR DISC TRACK # * * 10 *TEMPORARY OR DISC SECTOR #* * 11 *DRIVER TEMPORARY STORAGE* * 12 * " " " * * 13 * " " " * * 14 * DEVICE CLOCK RESET VALUE * * 15 * " " WORKING " * * * D: =1 IF A DMA CHANNEL REQUIRED FOR TRANSFER * B: =1 IF AUTOMATIC OUPUT BUFFERING DESIRED * P: =1 IF DRIVER TO HANDEL POWER FAIL RECOVERY. * O: =1 IF DRIVER TO HANDEL TIME OUT. * T: DEVICE TIME-OUT BIT - CLEARED BEFORE EACH * IO INITIATION; SET IF DEVICE TIMES-OUT. * UNIT#: LAST SUBCHANNEL REFERENCED ON THIS EQT. * CHANNEL#: I/O SELECT CODE (LOWER # IF * MULTI-BOARD INTERFACE) * AV (AVAILABILITY INDICATOR): * =0, UNIT AVAILABLE FOR OPERATION * =1, UNIT DISABLED * =2, UNIT CURRENTLY IN OPERATION * =3, UNIT WAITING FOR DMA CHANNEL * TYPE CODE: CODE IDENTIFYING TYPE OF I/O DEVICE * UNIT STATUS: ACTUyAL OR SIMULATED UNIT STATUS * AT END OF OPERATION * * II. * DEVICE REFERENCE TABLE * (DRT) * * THE DEVICE REFERENCE TABLE PROVIDES FOR * LOGICAL DEVICE ADDRESSING OF PHYSICAL I-O * SLOTS DEFINED IN THE *EQT*. THE *DRT* CONSISTS * OF TWO SEQUENTIAL TABLES EACH TABLE CONSISTING * OF 1-WORD ENTRIES CORRESPONDING TO THE RANGE * OF USER-SPECIFIED "LOGICAL" UNITS, 1 TO N * WHERE N IS LT OR = TO 63(10). THE CONTENTS OF * EACH LOGICAL UNIT'S WORD ONE IS AS FOLLOWS: * BITS 5-0 DEVICE'S EQT NUMBER * BITS 6-10 THE LOCKING RESOURCE NUMBER * BITS 11-15 THE DEVICE'S SUBCHANNEL ON THE EQT. * THE CONTENTS OF EACH LOGICAL UNIT'S DEVICE * REFERENCE TABLE WORD TWO CONTAINS A * POINTER TO THE I/O QUEUE OF THE I/O REQUESTS * FOR THIS DEVICE WHEN THE DEVICE IS DOWN: * BIT 15=0 FOR AN UP LU. * =1 FOR A DOWN LU. * BITS 14-0=0 FOR AN UP LU. * #0 FOR A DOWN LU WHERE * = ADDRESS OF THE I/O QUEUE IF THIS * IS THE FIRST LU(MAJOR LU)POINTING * TO THE DEVICE. * = 1 TO 1777(8). THE LU NUMBER OF * DEVICE(MAJOR LU)ON WHICH THE I/O * IS QUEUED. * * CERTAIN LOGICAL UNIT #S ARE PERMANENTLY * ASSIGNED TO FACILITATE SYSTEM, USER AND * SYSTEM SUPPORT I/O OPERATIONS. THESE ARE: * * 0 - BIT BUCKET(DUMMY LU)(NO ENTRY IN DRT) * 1 - SYSTEM TELETYPEWRITER * 2 - SYSTEM DISC * 3 - AUXILIARY DISC * 4 - 'STANDARD' PUNCH UNIT * 5 - 'STANDARD' INPUT UNIT * 6 - 'STANDARD' LIST UNIT * 7 - ASSIGNED * . BY * . USER * 63 - SKP * * III. INPUT/OUTPUT REQUESTS * * I/O REQUESTS INCLUDE COMMANDS FOR * READ, WRITE, CONTROL(FUNCTIONS) AND STATUS. * THE FORMAT OF THESE REQUESTS CONFORM TO * THE GENERAL SYSTEM REQUEST FORMAT. THE * NUMBER OF PARAMETERS VARIES DEPENDING * ON THE TYPE OF REQUEST AND THE CHARAC- * TERISTICS HOF THE REFERENCED DEVICE. * * A USER I/O REQUEST IS DIRECTED TO * AT -$IORQ- BY THE EXECUTIVE REQUEST * PROCESSOR <$RQST>. SYSTEM I/O REQUESTS * ARE IN A DIFFERENT FORMAT AND ARE PROCESSED * AT THE SECTION -$XSIO- IN . REFER TO * THAT SECTION FOR DETAILED DESCRIPTION. * * A *STATUS* REQUEST IS PROVIDED * FOR USER AND SYSTEM SUPPORT PROGRAMS * WHICH REQUIRE KNOWLEDGE OF DEVICE * CONDITIONS OR TYPE BEFORE A READ/WRITE/ * CONTROL REQUEST IS MADE. THE PROGRAM * IS NOT SUSPENDED ON THIS CALL. * A PARAMETER WORD IS INCLUDED IN THE * REQUEST TO CONTAIN THE DEVICE STATUS ON * RETURN TO THE USER. THIS STATUS IS FROM WORD * 5 OF THE EQT ENTRY FOR THE DEVICE. * ALSO, AN ADDITIONAL PARAMETER WORD CAN BE * INCLUDED IN THE REQUEST- WORD 4 OF THE * EQT ENTRY IS RETURNED IF THE ADDITIONAL * PARAMETER WORD IS INCLUDED. * * A DYNAMIC STATUS REQUEST CAN BE MADE BY * MEANS OF A CONTROL REQUEST, THE FORMAT * OF WHICH IS DEFINED BELOW. IN THIS CASE, * THE REQUEST IS QUEUED, THE DRIVER IS ENTERED, * AND THE STATUS IS RETURNED TO THE CALLING * PROGRAM IN THE A REGISTER. * SKP * * A. READ/WRITE REQUEST FORMAT * * EXT EXEC * JSB EXEC * DEF EXIT (DEFINE EXIT POINT) * DEF RCODE (DEFINE READ (1) OR WRITE(2)) * DEF CONWD (DEFINE CONTROL WORD) * DEF BUFFR (DEFINE BUFFER LOCATION) * DEF BUFFL (DEFINE BUFFER LENGTH) * DEF DTRAK (OPTIONAL - DISC TRACK #) * DEF DSECT (OPTIONAL - DISC SECTOR #) * EXIT --- * . * . * RCODE DEC 1 OR 2 * CONWD OCT NNNNN CONTROL INFO/LOGICAL UNIT # * BUFFL DEC N OR -N WORD OR CHARACTER LENGTH * DTRAK DEC N DISC TRACK # * DSECT DEC N STARTING SECTOR # * * BIT 12 OF THE CONTROL WORD SET ON NON-DISC REQUESTS * INDICATES A DOUBLE BUFFER FOR THIS OPERATION. * IN THIS CASE THE CONTROL BUFFER IS AT "DTRʡNLHAK" AND IT'S * LENGTH IN WORDS-CHARACTERS IS AT "DSECT". * * * B. CONTROL REQUEST FORMAT * * EXT EXEC * JSB EXEC * DEF EXIT (DEFINE EXIT POINT) * DEF RCODE (DEFINE REQUEST CODE) * DEF CONWD (DEFINE CONTROL WORD) * DEF PARAM (DEFINE OPTIONAL PARAMETER) * EXIT --- * . * . * RCODE DEC 3 * CONWD OCT NNNNN CONTROL CODE/LOGICAL UNIT # * PARAM DEC N PARAMETER REQUIRED BY TYPE OF CODE * * CONTROL CODES (FIELD 10-06 OF CONTROL WORD): * * 01 - WRITE END-OF-FILE --/ PRIMARILY * 02 - BACKSPACE 1 RECORD / FOR * 03 - FORWARD SPACE 1 RECORD / MAGNETIC * 04 - REWIND / TAPE * 05 - REWIND STANDBY / UNITS * 06 - DYNAMIC STATUS --/ * 07 - SET EOT STATUS (FOR PAPER TAPE INPUT) N* 10 - GENERATE LEADER FOR PAPER TAPE * 11 - LIST OUTPUT LINE SPACING * 12 - WRITE FILE GAP --/ PRIMARILY * 13 - FORWARD SPACE FILE/ FOR MAGNETIC * 14 - BACKWARD SPACE FILE/ TAPE UNITS SKP * C. DEVICE STATUS REQUEST FORMAT * * EXT EXEC * JSB EXEC * DEF EXIT (DEFINE EXIT POINT) * DEF RCODE (DEFINE REQUEST CODE) * DEF CONWD (DEFINE CONTROL WORD) * DEF STAT1 (DEFINE STATUS WORD 1) * DEF STAT2 (DEFINE STATUS WORD 2 -- OPTIONAL) * DEF STAT3 (DEFINE STATUS WORD 3 -- OPTIONAL) * EXIT --- * . * . * RCODE DEC 13 STATUS REQUEST CODE = 13 * CONWD OCT NN LOGICAL UNIT # * STAT1 NOP WORD 5 OF EQT ENTRY FOR * DEVICE STORED IN THIS WORD. * STAT2 NOP WORD 4 OF EQT ENTRY FOR * DEVICE STORED IN THIS WORD * IF PRESENT IN REQUEST. * STAT3 NOP IF PRESENT, THEN BIT 15 INDICATES * THE LU IS UP(0) OR DOWN(1) AND BITS * 0-4 GIVE THE LU'S SUBCHANNEL. * * * IV. GENERAL OPERATION * * ALL INPUT/OUTPUT OPERATIONS ARE PERFORMED * CONCURRENTLY WITH PROGRAM COMPUTATION IN THE * OVERALL SYSTEM. AN I/O OPERATION IS CONSIDERED * TO BE NON-BUFFERED TO THE REQUESTING USER * PROGRAM AS THE PROGRAM IS SUSPENDED UNTIL * THE TRANSMISSION OR OPERATION IS COMPLETED. * THE EXCEPTION TO THIS IS IN PROVIDING FOR * AUTOMATIC BUFFERING OF OUTPUT TO USER- * DESIGNATED DEVICES. IN THIS CASE, THE USER * BUFFER IS MOVED TO SYSTEM AVAILABLE MEMORY * AND THE USER PROGRAM IS NOT SUSPENDED. * * V. CLASS I/O OPERATIONS * * CLASS I/O REFERS TO NO-WAIT I/O IN WHICH THE USER * DIRECTS THE COMPLETION INFORMATION TO A 'CLASS' BY * NUMBER. LEGAL CLASSES ARE DEFINED AT GENERATION TIME * AND QUEUES ARE KEPT FOR EACH CLASS IN A TABLE CALLED * ; THE CLASS TABLE. THIS TABLE IS LOCATED AT $CLAS * AND CONSISTS OF A LENGTH WORD (DEFINING THE NUMBER * OF WORDS (CLASSES) IN THE TABLE (SYSTEM)) FOLLOWED * BY ONE WORD FOR EACH DEFINED CLASS. * * IN OPERATION THE USER REQUESTS I/O ON A CLASS, * RTIOC REQUESTS BUFFER MEMORY FOR THE REQUEST * MOVES THE REQUEST TO THE BUFFER MEMORY * QUEUES THE REQUEST ON THE SPECIFIED EQT AND * NOTES IN THE CLASS QUEUE THAT A REQUEST IS * PENDING. * * ON COMPLETION THE COMPLETED REQUEST IS QUEUED IN THE CLASS * QUEUE AND ANY PROGRAM WAITING FOR THE CLASS * IS RESTARTED. * * A. READ/WRITE AND WRITE-READ REQUEST FORMAT * * EXT EXEC * JSB EXEC * DEF EXIT * DEF RCODE (DEFINE READ (17) WRITE (18) WRITE-READ (20) * DEF CONWD (SAME AS STANDARD READ/WRITE) * DEF IBUFR (SAME AS STANDARD (NOT USED ON READ) * DEF BUFFL (SAME AS STANDARD) * DEF OPT1 (SAME AS STANDARD (TRACK)) * DEF OPT2 (SAME AS STANDARD (SECTOR)) * DEF CLASS (CLASS TO QUEUE REQUEST ON ) * EXIT --- * . * . * RCODE DEC 17 OR 18 OR 20 (SEE NOTE BELOW) * CONWD OCT NNNNN CONTROL INFO/LOGICAL UNIT # * BUFFL DEC N OR -N WORD OR CHARACTER LENGTH * OPT1 DEC N (SEE GET CALL BELOW) * OPT2 DEC N (SEE GET CALL BELOW) * CLASS DEC N DEFINES CLASS TO BE USED IN GET CALL. * IBUFR BSS N DATA BUFFER * * * NOTES: * THE WRITE-READ CALL IS FOR DEVICES WHICH EXPECT DATA IN * THE READ BUFFER. THIS CAUSES THE SYSTEM TO MOVE THE BUFFER * TO SYSTEM MEMORY AND ALSO TO SAVE AND PASS TO THE USER * THE BUFFER ON THE GET CALL. THE REQUEST CODES RECEIVED * BY THE DRIVER ARE: * 1 FOR REQUEST 17 OR 20 * 2 FOR REQUEST 18 * 3 FOR REQUEST 19 * ̿ * THE CLASS WORD HAS THE FOLLOWING FORMAT * BITS 0-7 DEFINE THE CLASS. IF ZERO OR NOT SUPPLIED * THE SYSTEM WILL ASSIGN A CLASS FOR THE REQUEST. * BITS 8-12 CONTAIN THE SECURITY CODE ASSIGNED BY THE * SYSTEM UPON CLASS ALLOCATION. * BITS 13-14 ARE NOT USED BY READ/WRITE OR WRITE-READ * BUT WILL BE RETURNED TO CALLER IF A CLASS * IS ALLOCATED. * BIT 15 SHOULD BE SET TO INDICATE THAT THE PROGRAM IS TO * BE CONTINUED WITHOUT MAKING THE REQUEST IF THERE * IS NOT ENOUGH SYSTEM MEMORY AT THE CURRENT TIME. * * ON RETURN TO THE PROGRAM THE A REGISTER WILL BE SET AS * FOLLOWS (IF BIT 15 WAS SET): * * A = -1 DYNAMIC CLASS ASSIGNMENT FAILED (NO FREE CLASS NOW) * -2 NO MEMORY AVAILABLE FOR BUFFERING. * = >0 THE NEWLY ALLOCATED CLASS NUMBER AND SECURITY CODE. * * B. CLASS CONTROL REQUEST FORMAT * * EXT EXEC * JSB EXEC * DEF EXIT * DEF RCODE (DEFINES REQUEST CODE) * DEF CONWD (DEFINES CONTROL WORD) * DEF PRAMD (DEFINES PRAMETER WORD) * DEF CLASS (CLASS TO QUEUE REQUEST ON) * DEF OPT1 (OPTIONAL PARAMETER 1) * DEF OPT2 (OPTIONAL PARAMETER 2) * EXIT --- * . * . * RCODE DEC 19 CLASS CONTROL REQUEST CODE * CONWD OCT NNNN CONTROL INFO/LOGICAL UNIT # * PRAM DEC N PRAMETER AS REQUIRED BY TYPE OF CODE * CLASS DEC N DEFINES CLASS TO USED IN GET CALL. * OPT1 DEC N (SEE GET CALL BELOW) * OPT2 DEC N (SEE GET CALL BELOW) * * THE CLASS CONTROL IS THE SAME AS THE STANDARD CONTROL EXCEPT * COMPLETION INFORMATION IS QUEUED ON THE DESIGNATED CLASS QUEUE. * * C. CLASS GET REQUEST FORMAT. * * EXT EXEC * JSB EXEC * DEF EXIT (DEFINE RETURN ADDRESS) * DEF RCODE (DEFINE REQUEST CODE ADDRESS) * DEF CLASS (DEFINE CLASS ADDRESS) * DEF IBUFR (DEFINE BUFFER ADDRESS) * DEF IBUFL (DEFINE BUFFER LENGTH) * DEF IRP1 ((RETURN PRAMETER 1 (OPTIONAL)) * DEF IRP2 ((RETURN PRAMETER 2 (OPTIONAL)) * DEF RCLAS (RETURN CLASS WORD ADDRESS)(OPTIONAL) * EXIT --- * . * . * RCODE DEC 21 REQUEST CODE FOR GET REQUEST * CLASS OCT NNN CLASS THE GET IS TO GET FROM. * IBUFR BSS N BUFFER TO HOLD THE READ DATA * IBUFL DEC N OR -N WORD OR CHARACTER LENGTH OF BUFFER * IRP1 BSS 1 OPTIONAL PRAMETER ONE RETURNED HERE * IRP2 BSS 1 OPTIONAL PRAMETER TWO RETURNED HERE * RCLAS BSS 1 CLASS RETURN WORD. * * NOTES: * THE CLASS WORD HAS THE FOLLOWING OPTIONS: * BITS 0 - 7 CLASS TO BE USED * BITS 8 -12 CLASS SECURITY CODE * BIT 13 DO NOT DEALLOCATE THE CLASS. IF THIS BIT * IS NOT SET AND THE CLASS IS EMPTY (NO * COMPLETED OR PENDING REQUESTS) IT IS * DEALLOCATED. * BIT 14 RETURN THE INFORMATION BUT DO NOT DEQUEUE * THE REQUEST (MUST MAKE ANOTHER REQUEST TO * DEQUEUE THE REQUEST). * BIT 15 IF NO ENTRIES IN QUEUE RETURN TO PROGRAM * (NORMAL ACTION IS TO SUSPEND UNTIL A * REQUEST IS PUT ON THE QUEUE). * * THE RETURNED CLASS WORD (RCLAS) IS AS FOLLOWS: * BITS 0 - 7 SET TO THE REQUEST CODE SENT TO THE DRIVER I.E. * 17 IS SET TO 1 * 18 IS SET TO 2 * 19 IS SET TO 3 * 20 IS SET TO 1 * * THE PARAMETERS IRP1/IRP2 ARE SET TO THE ORIGINAL REQUEST * PARAMETERS OPT1/OPT2. THEY ARE PROTECTED FROM DRIVER * MODIFICATION AND SO SHOULD BE AS SUPPLIED, EXCEPT IF * BIT 12 IN THE CONWORD IS SET "IRP1" POINTS TO * THE BUFFER AREA THE SYSTEM USED (I.E. IT IS NONSENSE). * * THUE A REGISTER ON RETURN IS SET AS FOLLOWS: * A = -N N IS THE NUMBER OF REQUESTS PENDING ON THE CLASS * IN ONE'S COMPLEMENT [-(N+1)] = [-N-1] * (NO REQUEST HAS COMPLETED YET) * A = 10XXXX (WHERE 1 IS BIT 15, 0 IS BIT 14, * AND XXXX IS THE REST OF EQT5 WHEN THE * REQUEST EITHER WAS REJECTED BY THE DRIVER * OR WAS IMMEDIATELY COMPLETED BY THE DRIVER. * ON REJECT B = -1,ON IMMEDIATE COMPLETION * B = TLOG. * A = > 0 A IS THE STATUS (EQT5) OF THE DEVICE AT * COMPLETION OF THE REQUEST. (IF BIT 14 IS SET * THE REQUEST CAUSED THE DEVICE TO GO DOWN). * B = TLOG IN THIS CASE. * * ON COMPLETION OF AN 18 REQUEST THE DATA BUFFER IS RETURNED * TO SYSTEM MEMORY. * THE GET REQUEST WILL ALWAYS GET A BUFFER WHICH IS THE * MINIMUM OF THE ALLOTTED SIZE ON THE GET AND THE BUFFER * IN THE QUEUE. THE CONTROL BUFFER (BIT 12 OPTION) IS AT THE * END OF THE ALLOTED BUFFER AND MAY BE RETURNED ON A GET IF * THE BUFFER SUPPLIED WILL HOLD IT AND THE REQUEST WAS NOT A * CLASS WRITE (18) REQUEST. SKP * CLASS I/O QUEUE FORMAT AND ITS USE * * THE CLASS QUEUE CAN BE IN FOUR DIFFERENT STATES. * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 * ------------------------------------------------------ * ! 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0! * ------------------------------------------------------ * STATE 1: CLASS DEALLOCATED, AVAILABLE * * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 * ------------------------------------------------------- * ! 0 ! A D D R E S S O F F I R S T E N T R Y ! * ------------------------------------------------------- * STATE 2: POINTER TO FIRST ENTRY IN CLASS QUEUE * * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 :00 * ------------------------------------------------------ * ! 1 0 X! SECURITY CODE ! NUMBER OF PENDING REQS. ! * ------------------------------------------------------ * STATE 3: CLASS ALLOCATED, NO ONE WAITING ON CLASS * NUMBER OF PENDING REQUESTS COUNTER MAY BE 0-255 * * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 * ------------------------------------------------------ * ! 1 1 X! SECURITY CODE ! NUMBER OF PENDING REQS. ! * ------------------------------------------------------ * STATE 4: CLASS ALLOCATED, SOMEONE WAITING (SUSPENDED) * NUMBER OF PENDING REQUESTS COUNTER MAY BE 0-255 * * ACTIONS TO BE TAKEN WHEN HANDLING A CLASS I/O OR GET REQUEST * DEPEND ON THE CURRENT STATE OF THE CLASS QUEUE HEAD * GET REQUESTS: * STATE 1. ABORT THE PROGRAM IO00, NO CLASS. * STATE 2. RETURN THE DATA FROM CLASS BUFFER * STATE 3. SET THE SOMEONE WAITING BIT(BIT14), SUSPEND PROGRAM * STATE 4. ABORT THE PROGRAM IO00, ONLY ONE PROGRAM MAY BE * SUSPENDED PER CLASS. * CLASS I/O REQUESTS: * STATE 1. STATE 3 IS SET UP, SECURITY CODE IS LOW 5 BITS OF * PROGRAM ID NUMBER, COUNTER IS SET TO 1. * STATE 2. THE COUNTER AT END OF QUEUE IS INCREMENTED BY 1 * STATE 3. THE COUNTER IS INCREMENTED BY 1. * STATE 4. THE COUNTER IS INCREMENTED BY 1. * ON COMPLETION OF CLASS I/O REQUESTS: * STATE 1. ILLEGAL--SHOULD NEVER HAPPEN--BUFFER IS RETURNED * AND THE COMPLETION IS IGNORED. * STATE 2. THE NEW DATA IS ADDED AT THE END OF THE LIST (FIFO) * AND THE COUNTER IS DECREMENTED BY 1. * STATE 3. THE NEW DATA IS ADDED AT THE END OF THE LIST (FIFO) * AND THE COUNTER IS DECREMENTED BY 1. * STATE 4. THE WAITING PROGRAM IS SCHEDULED AND THE COUNTER * IS DECREMENTED BY 1 AND THE SOMEONE WAITING BIT(BIT14) * IS CLEARED. SKP $IORQ EQU * CLA SET CONTROL FLAG=0 TO MEAN STA CONFL *REQUEST* SECTION ENTERED STA TEMPL AND 'DISC R/W USER REQ' FLAG STA CLASS CLEAR THE CLASS WORD STA TEMP5 CLEAR LU FLAG FOR LU 0 * CPA RQCNT INSURE AT LEAST ONE PRAMETER JMP ERR01 - NO, ISSUE DIAGNOSTIC. * * LOGICAL UNIT REFERENCE VALIDITY CHECK * CCA,CCE TRANSLATE BY -1 ADA RQP2,I EXTRACT LOGICAL UNIT # FROM AND B77 PARAMETER 1 STA TEMP1 SAVE LOGICAL UNIT #-1 FOR DISC TEST LDB XSUSP GET PROGRAM'S BATCH FLAG ADB .12 AND LDB B,I IF BATCH SSB,RSS FLAG JMP L.0 IS SET * LDB $LUSW CHECK FOR LU SWTCH CMB,INB NEGATE COUNT FOR LOOP. * STB TMP8 ELSE SET UP TO SCAN THE TABLE LDB D$LUT GET DEF TO TABLE L.00 INB STEP TABLE ADDRESS LDA B,I GET ENTRY AND B77 IF SAME CPA TEMP1 AS CURRENT LU JMP L.001 GO SWITCH * ISZ TMP8 STEP COUNT JMP L.00 AND LOOP * L.0 LDA TEMP1 NO SWITCH USE SUPPLIED LU L.0.1 LDB A CPB B77 IF 0 SPECIFIED JMP L.00X GO DO IMMEDIATE COMPLETION THING * CMA,CLE CHECK FOR ZERO AND ADA LUMAX FOR A VALUE GT THE LARGEST SEZ,RSS DEFINED #. JMP ERR02 - ERROR, OUTSIDE OF RANGE. ADB DRT INDEX INTO THE DRT. LDA B,I GET EQT ASSIGNMENT. STA TEMP5 SAVE FOR 'WORD2' ROUTINE. AND B77 CCE,SZA,RSS IF ZERO JMP L.00X THEN DO IMMEADIATE COMPLETION THING * JSB $CVEQ CONVERT TO ABS.EQT ADD(WILL MASK SUBCH.). SKP * * REQUEST CODE ANALYSIS * L.000 LDA RQP1 GET REQUEST CODE (PARAMETER 1). AND .15 KEEP LOW PART STA RQPX SAVE IT CPA .13 TRANSFER IF JMP L.15 * STATUS * REQUEST. * LDA TEMP1 GET LU-1 AND DETERMINE JSB STADV IF THE LU OR EQT ARE DOWNG>. JMP L.014 IF DOWN, SUSPEND THE PROGRAM. * LDA RQPX UP, SO CONTINUE. LDB XPRIO,I SET THE PRIORITY STB TEMP2 FOR LINK AND STB TEMP6 FOR BUFFERING CPA .3 IF REQUEST IS JMP L.02 SKIP FURTHER ANALYSIS. * LDB RQCNT CHECK # OF ADB N3 PARAMETERS SUPPLIED SSB FOR READ OR WRITE. JMP ERR01 -ERROR, LT 3. * * BUFFER LEGALITY CHECK FOR INPUT. * BFCK LDB RQP4,I GET THE LENGTH CLE,SSB,RSS CONVERT TO JMP BFCK1 WORDS IF BRS CHARACTERS CMB,INB SET POSITIVE BFCK1 STB TMP8 AND SAVE. SZA DO BUFFER CHECK IF GET CPA RQP1 IF CLASS REQUEST CPA .2 OR IF WRITE REQUEST, JMP L.01 SKIP BUFFER CHECK. SPC 1 ADB RQP3 CHECK IF AREA EXTENDS ABOVE THE CMB,SEZ,CLE,INB,RSS LAST WORD ADB BKLWA OF MEMORY INB CLB,SEZ,RSS IF SO THEN JMP ERR04 ERROR 4 DIAGNOSTIC * CLE,SZA,RSS IF GET REQUEST JMP G.01 GO FINISH GET OPERATION * L.01 LDB RQCNT GET REQUEST COUNT ADB N5 AND SET 'E' FOR FIVE PRAM TEST LDA EQT5,I CHECK REFERENCED DEVICE AND B36K FOR BEING A CPA B14K DISC FILE (DVR30,31,32,33) RSS JMP L.02 NO, UNIT IS NOT DISC. STA TEMPL SET 'DISC R/W USER REQ' FLAG SKP * * DISC ACCESS VALIDITY CHECK. * LDA RQP1 CLASS REQUESTS ALF,ALF TO THE DISC ALF,SLA ARE NOT JMP ERR02 ALLOWED. * SSB DISC REQUEST MUST HAVE 5 PRAMS. JMP ERR01 -ERROR-. * LDB TEMP1 GET (LU-1) CPB .1 IF LU # 2 OR 3, RSS SET INTO LOW CPB .2 BITS OF 'DISC INB,RSS R/W USER REQ' JMP DPOPT,I FLAG. IF USER DISC JUMP ON PROTECT OP. *  L.10 IF NOT PROTECTED ELSE L.012 ADB TEMPL STB TEMPL * LDA RQP5,I GET TRACK ADDRESS FROM AND B377 STA TEMP0 REQUEST - SAVE. LDA TATLG COMPUTE POSITIVE ADA TATSD LENGTH OF CMA,INA AUXILIARY DISC IN *TAT*. SLB,RSS IF REF TO SYSTEM DISC (LU #2), LDA TATSD USE SYS DISC SIZE. CMA,INA SUBTRACT MAX SIZE ADA TEMP0 FROM USER TRACK #. SSA,RSS JMP ERR05 -ERROR, ILLEGAL TRACK #. * LDA SECT2 (A)= # SECTORS/TRACK FOR LU #2 SLB IF LU FOR REQUEST = 3, LDA SECT3 SET (A) = # SECTORS FOR LU #3 CMA,CLE,INA SET VALUE NEG. LDB RQP6,I GET SECTOR ADDRESS ADB A ERROR CCB,SEZ IF STARTING SECTOR LESS THAN 0 JMP ERR05 OR GREATER THAN TRACK SIZE. * ADB TMP8 CHECK FOR TRACK OVERFLOW BRS,BRS DIVIDE BUFFER LENGTH BRS,BRS (IN WORDS) BRS,CLE,BRS BY 64(10) ADB RQP6,I ADD STARTING SECTOR # STB TMP8 SAVE FOR L.G. UPDATE ADB A ERROR IF LAST SECTOR CLA,SEZ,INA GT= JMP ERR08 LIMIT (EXCEEDS TRACK BOUNDARY) * CPA RQP1 INPUT IS ALLOWED TO REFERENCE ANY JMP L.10 TRACK. * LDA TEMP0 (A) = TRACK #. LDB TEMP1 (LU-1) TO (B). SLB,RSS IF REF TO LU #3 ADD ADA TATSD SYS DISC SIZE TO TRACK #. ADA TAT INDEX TO TRACK ASSIGNMENT TABLE. LDA A,I GET REFERENCED TRACK ASSIGNMENT. CPA XEQT (ID SEGMENT ADDRESS). IF SAME AS JMP L.10 REQUESTOR, ALLOW ACCESS. * CPA C100K ALLOW ACCESS IF TRACK IS JMP L.10 GLOBALLY ASSIGNED. * INA IF FMP TRACK THEN CPA C100K GO CHECK JMP L.012 FOR LEGAL CALL. * * CHECK FOR LOAD-AND-GO ACCESS * ERB,ERB CONSTRUCT LDB TEMP0 L.G. WORD BLF,BLF FOR CURRENT RQ. ERB SET SIGN IF LU 3. ADB RQP6,I SET SECTOR IN LOW BITS CPB LGOC IF NOT = TO CURRENT LGO CLA,RSS ADDRESS, THEN JMP L.011 GO TO CHECK FOR "LOADR". * * UPDATE FOR NEXT LGO ACCESS - THIS ACCESS ALLOWED * ISZ TMP8 SAVE THE NEXT SECTOR ADDRESS IN TMP8 CPA LGOTK IS LGO AREA IS ASSIGNED. JMP L.011 -NO, CHECK LOADR. * LDA SECT2 SET (A) TO APPROPRIATE RBL,SLB,ERB # SECTORS (SET E IF LU 3) LDA SECT3 PER TRACK FOR LU #. CPA TMP8 IF NEW SECTOR EXCEEDS TRACK, CLA,RSS GO TO UPDATE TRACK #. JMP L.010 -NO OVERFLOW. * STA TMP8 SET SECTOR # TO 0. ISZ TEMP0 ADD 1 TO TRACK #. LDA LGOTK GET LGO TRACK ASSIGNMENT WORD. AND B177 -ADD # STA B OF TRACKS XOR LGOTK ASSIGNED CLE,ELA LU BIT TO E. ALF,ALF TO STARTING ADA B CHECK CPA TEMP0 FOR OVERFLOW. JMP ERR09 ---YES, '09' ERROR AND ABORT. * L.010 LDA TEMP0 RECONSTRUCT TRACK ALF,ALF THE CURRENT ERA LGO AREA IOR TMP8 DISC STA LGOC RESET. JMP L.10 SPC 1 L.014 LDB .4 4 TO B L.013 STB XTEMP,I SET 4 IN FIRST WORD OF TEMP AREA. L.015 JSB $LIST PUT PGM IN WAIT LIST OCT 503 UNTIL DEVICE COMES UP. JMP $XEQ EXIT TO DISPATCHER * ICOMX NOP DUMMY EQT FOR LU=0 B36K OCT 36000 .12 DEC 12 B14K OCT 14000 EQT4 OF DUMMY(BITS 0-5 = 0). .13 DEC 13 TEMP1 NOP EQT6 OF DUMMY N3 DEC -3 N5 DEC -5 C100K OCT 77777 $DMEQ DEF ICOMX ADDRESS OF DUMMY EQT DPOPT DEF L.10 DISC PROTECT OPTION (L.012 IF PROTECTED) SPC 2 L.00X LDA $DMEQ SET UP DUMMY EQT FOR LU=0 JSB $ETEQ ON BASE PAGE JMP L.000 CONTINUE PROCESSING SPC 2 L.001 LDA eB,I SWITCH THE LU ALF,ALF USE HIGH HALF OF TABLE AND B77 MASK STA TEMP1 SET THE NEW (LU-1) JMP L.0.1 GO CONTINUE THE REQUEST SKP * ALLOW PRIVILEGED ACCESS TO "LOADR" TO PERMIT * UPDATING OF ID SEGMENTS AND PROGRAMS ON THE * SYSTEM AREA OF THE DISC. * L.011 LDB XEQT COMPARE ADB .12 NAME LDA B,I 3 CPA LDRNM WORD INB,RSS AREA JMP ERR06 IN * LDA B,I CURRENT CPA LDRNM+1 ID INB,RSS SEGMENT JMP ERR06 WITH * LDA B,I 'LOADR' AND C377 -IF CPA LDRNM+2 SO, JMP L.10 ALLOW FULL ACCESS * JMP ERR06 - ERROR - * LDRNM ASC 2,LOAD L O A D OCT 51000 R -ZERO- SPC 1 B177 OCT 177 B74K OCT 74000 B160K OCT 160000 KEEP BITS 13-15 SPC 2 L.012 LDA RQP2,I FMP TRACK LDB RQP1 AND B74K IF FLAG SET SLB,RSS OR IF READ CPA B74K THEN ALLOW JMP L.10 ACCESS. * JMP ERR06 ELSE ILLEGAL DISC WRITE. SKP L.02 CLA,SEZ,RSS IF BIT 12 OF CONWORD LDA RQP2,I SET AND ALF,SLA NOT FIVE PRAMS JMP ERR01 TAKE GAS! * LDA TEMP5 CHECK FOR LU LOCK RRR 6 GET LOCK BITS TO LOW A AND B37 ISOLATE THEM SZA,RSS IF NOT LOCKED JMP L.020 FOR GET CHECK * STA TEMP3 SAVE RN NUMBER FOR PASS TEST LDB C100K SET 77777 FOR LINK PRIORITY STB TEMP2 AND CLB,INB ONE FOR STB TEMP6 BUFFERING PRIORITY. ADA D$RN ELSE INDEX INTO STA XTEMP,I THE RN TABLE LDA A,I GET THE ENTRY AND B377 CHECK IF STA TEMPW SAVE OWNING PROGRAM NUMBER ADA KEYWD CURRENT PROGRAM ADA N1 IS THE LDA A,I ONE THAT OWNS THE LOCK CPA XEQT ? JMP L.020 YES CONTINUE THE REQUEST * CLA GET POSSIBLY PASSED RN NUMBER WHICH LDA RQP9,I WOULD BE IN RQP9. USE ZERO IF NONE XOR TEMP3 PASSED. CONSTRUCT AND ALF,ALF COMPARE WITH THE LOCKER'S XOR TEMPW RN NUMBER. SZA IF EQUAL, SKIP. JMP L.015 ELSE, GO SUSPEND CALLER 'TIL AVAIABLE. * L.020 LDB RQPX GET THE MASKED REQUEST CPB RQP1 IF STANDARD I/O JMP L.027 SKIP THE CLASS CODE SKP * * * CLASS I/O ALLOCATE CLASS FROM HIGH END OF TABLE * IF HE DID NOT SPECIFY A CLASS. * CLA,CLE E=0 IF USE OLD CLASS NUMBER STA XA,I A=0 FOR INIT.GOOD RETURN LDA RQP7 ADDR FROM THE REQUEST CPB .3 IF CONTROL REQUEST (19) LDA RQP4 USE THE CONTROL CLASS WORD SZA,RSS IF CLASS WORD ADDR = 0 JMP ERR01 FLUSH IT OUT. * STA TEMP3 SAVE ADDR OF CLASS WORD LDA B160K GET BITS 15,14, AND 13 FROM AND TEMP3,I USER'S CLASS WORD STA SECCD L.025 LDA TEMP3,I GET CLASS WORD STA CLASS SET THE CLASS WORD AND B377 MASK TO THE CLASS DEF. STA B SAVE CLASS NUMBER IN B CMA,INA,SZA IF SUPPLIED JMP L.021 SKIP ALLOCATION CODE * * * ALLOCATE A CLASS FROM THE HIGH END OF THE TABLE * LDB XEQT GET ID SEG ADDR JSB $IDNO CONVERT TO ID # LDA B37 FOR USE AS SECURITY CODE AND B ALF,ALF IOR SECCD FILL IN USER'S BIT15,14,13 STA TEMP3,I FOR RETURN AS CLASS NUMBER * LDA $CLAS GET THE LENGTH OF THE TABLE ADA DCLAS ADD THE TABLE ADDRESS * L.022 LDB A,I GET THE ENTRY TO B CCE,SZB,RSS IF FREE (0) JMP L.023 GO USE IT * ADA N1 NO STEP TO NEXT ONE CPA DCLAS END OF TABLE? CCA,RSS YES SKIP (A = -1) JMP L.022 NO - GO TEST N *NLHEXT ONE. * L.026 STA XA,I SET REASON FOR REJECT IN A REG. LDB DCLAS SET B=CLASS TABLE ADDR LDA CLASS FOR L.013 IN CASE OF SUSPEND SSA NO-WAIT REQUESTED? JMP L.16 NO, GIVE NO CLASS STATUS * JMP L.013 YES, SUSPEND UNTIL CLASS AVAILABLE * L.023 LDB A SET B TO ADR OF CLASS QUEUE WORD ADA MCLAS SUBTRACT THE CLASS TABLE ADDRESS IOR TEMP3,I ADD SECURITY CODE AND USER BIT STA TEMP3,I RETURN NEW CLASS WORD TO USER AND B174C GET SECURITY CODE FOR CLASS QUEUE-HEAD RAL,ERA SET THE ALLOCATED BIT STA B,I PUT INTO CLASS QUEUE CCE SET E=1 AGAIN FOR NEW ALLOC JMP L.025 GO SET UP * L.021 ADB DCLAS USE CLASS# (IN B) TO INDEX AND STB PTR SET POINTER TO TABLE N STA B LDA CLASS GET CLASS WORD AND B174C SAVE REAL SECURITY CODE STA SECCD LDA PTR,I GET CONTENTS SEZ,CLE,RSS IF NOT NEW ALLOCATION SZA AND NOT ALLOCATED, FORCE ERROR ADB $CLAS IF OUTSIDE OF TABLE CLB,SEZ,RSS THEN JMP ERR00 SEND ERROR 'IO00' * LDA PTR L.13A STA B SET B TO ADDR OF QUEUE ENTRY LDA B,I GET CONTENTS SSA,RSS A POINTER? JMP L.13A YES, TRACE IT MORE * AND B174C GET SECURITY CODE FROM QUEUE CPA SECCD COMPARE IT WITH USER'S RSS DOES IT MATCH? JMP ERR00 NO, ERROR 'IO00' * STB SECCD SAVE QUEUE ENTRY ADDR IN SECCD LDB RQPX GET THE MASKED REQUEST CODE JMP L.028 AND GO DO THE BUFFER THING SKP * * CHECK FOR AUTOMATIC BUFFERING REQUIREMENT * L.027 CPB .1 SKIP CHECK IF REQUEST JMP L.10 IS INPUT. * LDA EQT4,I CHECK THE UNIT DESCRIPTOR RAL WORD IN ITS EQT ENTRY,BIT 14, SSA,RSS FOR BUFFERING. JMP L.10 -NO * LDA RQP2,I DYNAMIC STATUS AND B3700 REQUESTS ADA B ARE NEVER CPA B603 BUFFERED JMP L.10 DYNAMIC STATUS DO STD. USER RQ. * * * AUTOMATIC BUFFERING SECTION * L.028 CLA CLEAR 2ND BUFFER STA TMP6 SIZE INITIALLY. CPB RQP1 IF NOT CLASS REQUEST, THEN USE LDA N2 5 WORDS FOR CONTROL REQUEST. CPB .3 IF REQUEST IS FOR -CONTROL-, JMP L.03 SKIP BUFFER SIZE CHECK. * LDA TMP8 GET THE XFER LENGTH STA TEMP3 -SET AS MOVE INDEX- LDB RQP2,I IF DOUBLE BUFFER REQUEST BLF,SLB RSS JMP L.03 NO, SKIP SECOND BUFFER SIZE. * CLA CLEAR REG-A FOR CASE RQP6=0. LDB RQP6,I YES, GET SECOND BUFFER SIZE. SSB,RSS NEGATIVE CHAR COUNT? JMP L.029 NO, SET WORD COUNT. * BRS YES, CONVERT TO + WORDS. CMB,INB L.029 LDA B GET SECOND BUFFER SIZE. ADA TMP8 ADD TO SECOND BUFFER SIZE. STB TMP6 SAVE SECOND BUFFER SIZE. * L.03 ADA .8 ADD 8 FOR BLOCK CONTROL WORDS. LDB RQPX CPB RQP1 IF NOT CLASS REQUEST ADA N1 THEN SUBTRACT 1 STA L.04 AND SET UP IN CALL * LDA N41 IF PRIORITY ADA XPRIO,I LT 41 THEN SSA DO NOT DO BUFFER LIMIT JMP L.031 TEST * LDB $BLUP CHECK IF BEYOND THE LIMIT IN WORDS JSB QCHK ON THIS DEVICE JMP L.040 YES GO CHECK FOR CLASS RQ * * ALLOCATE BLOCK IN TEMPORARY STORAGE * L.031 JSB $ALC CALL AT SYSTEM ENTRY POINT L.04 NOP - REQUESTED LENGTH OF BLOCK - JMP L.041 NEVER ANY MEMORY, TRY NO BUFFER. JMP L.042 NO MEMORY NOW, SUSPEND. JMP L.06 ALLOCATION OK. * L.040 LDA CLASS IF CLASS AND NO SUSP. SSA,RSS ON BUFFER LIMIT SKIP TO EXIT JMP L.013 ELSE GO SUSPEND * * NO MEMORY AVAILABLE FOR BLOCK - CALLING USER * PROGRAM IS TO BE LINKED INTO MEMORY SUSPENSION * $LIST AND RE-SCHEDULED AT POINT OF REQUEST * WHEN A PREVIOUSLY ALLOCATED BLOCK IS RELEASED. * L.042 LDA N2 IF CLASS I/O CHECK LDB CLASS FOR NO SUSP OPTION SSB IF SET JMP L.026 GO SET FLAG AND EXIT * JSB $LIST CALL TO LINK PROGRAM INTO OCT 504 MEMORY SUSPENSION LIST. JMP $XEQ * L.041 LDA CLASS NEVER ENOUGH MEMORY SZA IF CLASS REQUEST JMP ERR04 ABORT PROGRAM IO04 * JMP L.10 ELSE GO UNBUFFERED. * SECCD NOP B603 OCT 603 N41 DEC -41 SKP * * * SET REQUEST PARAMETERS, PROGRAM PRIORITY AND * USER BUFFER INTO TEMPORARY BLOCK. * L.06 STB L.04 SET ACTUAL BLOCK LENGTH. STA TEMP1 SAVE BLOCK CLE,INA STA TEMPW SAVE ADDRESS JSB WORD2 ASSEMBLE CONTROL WORD LDB RQP1 IF A CLASS CPB RQPX REQUEST CLE THEN RAL,ERA SET THE FIELD TO 3 IOR B40K SET = 1 FOR BUFFERING. LDB TEMPW STA B,I AND SET IN WORD 2 OF BLOCK. INB LDA TEMP6 SET REQUESTING PROGRAM PRIORITY STA B,I IN WORD 3. INB LDA L.04 SET BLOCK LENGTH IN STA B,I WORD 4. INB LDA TEMPW,I GET THE CONWORD SSA,RSS IF STANDARD REQUEST JMP L.061 SKIP * LDA CLASS ELSE SET THE CLASS STA B,I WORD IN INB THE BUFFER L.061 LDA .3 IF REQUEST CPA RQP1 IS -STANDARD CONTROL-, SKIP JMP L.08 BUFFER MOVE * LDA RQP4,I SET USER BUFFER LENGTH STA B,I IN WORD 5. CMA,CLE,INA,SZA SET E IF ZERO LENGTH BUFFER (SAVE A CYCLE IF SO) CLA USE ZERO IF NO OPTION WORD SUPPLIED LDA RQP5,I GET FIRST OPTIONAL WORD INB STEP TO STORE LOCATION STB TEMPW SAVE THE ADDRESS OF THE LOCATION STA B,I SET IT INB SET FOR NEXT WORD CLA USE ZERO IF SECOND OPTION WORD NOT SUPPLIED LDA RQP6,I GET SECOND OPTIONAL WORD STA B,I SET IT IN THE BUFFER LDA RQP1 CPA B23 IF CLASS CONTROL, GO JMP L.078 FINISH ITS SET-UP. CPA B21 IF CLASS READ ADB TMP8 ADJUST BUFFER ADDRESS FOR DOUBLE BUF. SEZ,CLE,INB,RSS IF LENGTH = 0, CPA B21 OR CLASS READ JMP L.075 SKIP BUFFER MOVE. * * MOVE USER BUFFER TO TEMPORARY BLOCK. * LDA RQP3 SET USER BUFFER L.065 EQU * ADDRESS FOR MOVE. JSB .MVW USE WORD MOVE SUBROUTINE DEF TEMP3 (RP'ED IF MX (WE HOPE)) NOP L.075 LDA TMP6 GET LENGTH OF SECOND BUFFER STA TEMP3 SET FOR MOVE LDA RQP2,I GET THE REQUEST CONTROL WORD ALF,SLA IF FIRST TIME AND DOUBLE BUFFER SEZ,CCE SKIP JMP L.13 ELSE CONTINUE * STB TEMPW,I SET BUFFER ADDRESS IN REQUEST LDA RQP5 GET USER BUFFER ADDRESS JMP L.065 GO MOVE THE BUFFER * L.078 ADB N2 CORRECT B-REG. L.08 CLA USE ZERO IF NO PRAM WORD LDA RQP3,I FOR CONTROL REQUEST, SET WORD 3 STA B,I (PARAM) IN PLACE OF RECORD JMP L.13 LENGTH. * B21 OCT 21 B23 OCT 23 D$RN DEF $RNTB ADDRESS OF RN TABLE SKP SPC 2 * * REQUEST IS A NORMAL WRITE, CONTROL OR READ. * THE PARAMETERS OF THE REQUEST ARE MOVED * INTO THE ID SEGMENT OF THE REQUESTING * PROGRAM. THE ID SEGMENT IS THEN LINKED * INTO THE I/O LIST FOR THE REFERENCED DEVICE. * THE -SCHEDULER- IS THEN CALLED TO REMOVE * THE PROGRAM FROM THE SCHEDULED LIST AND TO * CHANGE THE PROGRAM STATUS TO I/O SUSPENSION. * * L.10 CLA,CLE PRESET TO USE ZERO FOR OPTION WORD LDB RQP3,I SET CONTROL WORD LDA RQP1 (A) = REQUEST CODE. CPA .3 IF CONTROL GO JMP L.101 SET IT UP * LDB XTEMP+4 GET THE ADDRESS OF THE RENT ADB .15 BIT IN THE ID-SEG. LDA B,I GET THE WORD TO A ALF,RAL PUT THE BIT IN SIGN OF A LDB RQP3 BUFFER ADDRESS TO B CLE,SSA IF BIT SET JSB $REIO GO MOVE THE TDB (IF NEEDED) * STB XTEMP+1,I SET BUFFER ADDRESS OR CONTROL WORD LDA RQP4,I BUFFER STA XTEMP+2,I LENGTH AND LDA RQP2,I GET THE CON WORD CMA,CME SET COMPLEMENT IOR TEMPL MIRGE WITH DISC FLAG LDB RQP5 GET SECOND BUFFER ADDRESS ALF,SLA IF NONE SZB,RSS IF NONE USE RSS ZERO LDB B,I GET THE OPTION WORD SEZ,SLA,RSS IF RENT AND DOUBLE BUFFER JSB $REIO GO CHECK OUT THE BUFFER ADDRESS STB XTEMP+3,I SET THE PRAMETER IN THE ID-SEGMENT * CLA USE ZERO IF FINAL OPTION WORD NOT SUPPLIED LDA RQP6,I SET THE FINAL OPTIONAL WORD STA XTEMP+4,I IN THE ID-SEGMENT * CLE,RSS SKIP CONTROL SET UP L.101 STB XTEMP+1,I SET CONTROL WORD JSB WORD2 ASSEMBLE CONTROL WORD STA XTEMP,I SAVE IN TEMPORARY #1 LDB XEQT SET ADDRESS OF LINK WORD STB TEMP1 IN TEMP1. * JSB $LIST CALL SCHEDULER TO SUSPEND PROG. OCT 402 - ID SEG. ADDR./I/O SUSPEND - * * CALL -LINK- TO PERFORM THE LINKING OF THE NEW * BLOCK INTO THE DEVICE QUEUE OF * WAITING OPERATIONS. * L.13 LDA RQP1 IF STANDARD I/O CPA RQPX THEN JMP L.131 GO UP DATE AND EXIT * * CLASS I/O SO SET THE CLASS QUEUE TO SHOW * ANOTHER REQUEST IS PENDING. * ISZ SECCD,I INCREMENT CLASS QUEUE COUNT BY 1 JMP L.132 SKIP XSUSP SET UP * * L.131 LDB XSUSP,I SET THE SUSP POINT STB XA,I IN XA FOR THE ABORT ROUTINE L.132 LDA RQRTN AND SET THE RETURN ADDRESS STA XSUSP,I IN THE ID-SEG. JSB LINK LINK SETS E=0 IF EMPTY QUEUE LDB EQT1 IF DUMMY EQT FOR LU=0 CPB $DMEQ THEN JMP L.135 GO TO COMPLETE * * SEZ,RSS IF QUEUE WAS EMPTY CALL DRIVR. * * EMPTY LIST, CALL TO INITIATE CURRENT REQUEST. * JSB DRIVR JMP $XEQ - OPERATION INITIATED - JMP NOTRD - OPERATION REJECTED OR COMPLETED - * L.135 LDB RQP4,I GET THE REQUEST LENGTH L.136 SSB AND SET UP CMB,INB THE TLOG LDA .2 SET A FOR IMMEDIATE COMPLETION JMP R00 AND GO TO COMPLETION SECTION * SKP * STATUS REQUEST SECTION * L.15 LDA RQCNT INSURE THAT AT LEAST 2 ADA N2 PARAMETERS PROVIDED - ONE SSA TO STORE STATUS WORD. JMP ERR01 -NO, ERROR '01'. * LDB EQT5,I STORE WORD 5 OF EQT ENTRY STB RQP3,I IN 'STAT1'. LDA EQT4,I STORE WORD 4 OF EQT ENTRY STA RQP4,I IN 'STAT2'. * LDB TEMP1 GET SUBCHANNEL ADB DRT FROM DRT LDA B,I WORD 1. AND B174K ALF,RAL PUT SUBCHANNEL IN ADB LUMAX LOWER 5 BITS. LDB B,I GET UP/DOWN BIT FROM CLE,ELB DRT WORD 2 AND OR RAL,ERA WITH SUBCHANNEL. STA RQP5,I STORE IN 'STAT3'. L.16 LDA RQRTN UPDATE THE STA XSUSP,I RETURN ADDRESS JMP $XEQ AND EXIT SPC 3 RQPX NOP CLASS NOP DCLAS DEF $CLAS CONFIGURED TO BE DIRECT. MCLAS NOP CONFIGURED TO BE NEGATIVE OF ABOVE. B174C OCT 17400 BITS 8-12 B37 OCT 37 N2 DEC -2 SKP * $GTIO IS THE ENTRY POINT THE EXEC CALLS FOR A 'GET' EXEC * CALL. * $GTIO LDA RQP2,I GET THE CLASS AND B377 MASK STA B SAVE AND CMA,CLE,INA,SZA,RSS IF CLASS=0 CLE,RSS SEND "IO00" * ADA $CLAS IF GREATER THAN MAX THEN CLA,SEZ,RSS SEND JMP ERR00 'IO00' ERROR * ADB DCLAS SET THE STB CLASS CLASS TABLE ADDRESS JMP BFCK GO CHECK THE BUFFER ADDRESS. * * BFCK RETURNS TO G.01 * G.01 LDA RQP2,I GET SECURITY CODE AND B174C BITS FROM CLASS WORD STA SECCD LDB CLASS,I GET QUEUE HEAD SSB IF A COUNTER JMP G.06 GO SUSPEND THE PROGRAM * SZB,RSS IF QUEUE-HEAD = 0 JMP ERR00 ERROR "IO00" * STB PTR SAVE THE ADDRESS INB GET THE CON WORD LDA B,I AND AND .3 ISOLATE THE REQUEST CODE STA RQP7,I RETURN IT TO USER'S IRCLS INB STEP TO STATUS WORD LDA B,I GET COMPLETION STATUS. STA XA,I AND SET IT IN THE A REG. INB GET THE BUFFER LENGTH p LDA B,I AND SET IT STA CLTMP FOR RETURN INB STEP TO USER CLASS WORD LDA B,I GET IT AND B174C KEEP SECURITY CODE CPA SECCD MATCHES CALLER'S? RSS JMP ERR00 NO, ERROR IO00 * INB INDEX TO THE LDA B,I TLOG AND STA XB,I SET IT IN THE 'B' REG INB INDEX TO THE LDA B,I FIRST OPTIONAL WORD AND STA RQP5,I SET IT IN THE USERS BUFFER INB NOW DO THE SECOND OPTIONAL WORD LDA B,I STA RQP6,I * STB TEMP4 SAVE THE BUFFER ADDRESS LDA .8 GET THE BUFFER LENGTH CMA,INA SET NEGATIVE ADA CLTMP LOP OFF THE HEAD WORDS STA TEMP3 SET THE MOVE COUNT LDB TMP8 GET THE SUPPLIED LENGTH CMA,INA SET MOVE COUNT NEG ADA TMP8 USE LESSOR OF THE TWO SSA,RSS COUNTS LDB TEMP3 USE QUEUE COUNT IF SMALLER SSB IF COUNT LESS THAN ZERO THEN JMP G.05 THEN SKIP MOVE * LDA TEMP4 GET THE BUFFER ADDRESS. INA STEP TO THE PROPER WORD STB TEMP3 SET THE COUNT LDB RQP3 GET DESTINATION ADDRESS JSB .MVW MOVE WORDS DEF TEMP3 COUNT ADDRESS NOP * G.05 LDA RQP2,I IF SAVE RAL,RAL QUEUE OPTION SLA,ELA THEN JMP L.16 THEN EXIT * LDA PTR,I ELSE STA CLASS,I UPDATE THE LIST SSA IF POINTER, SKIP COUNT CHECK AND B37 GET # PENDING REQUESTS LEFT SEZ,SZA,RSS NO REQUESTS LEFT STA CLASS,I AND IF DEALLOCATE WANTED, DO IT. JSB $RTN RETURN THE MEMORY PTR NOP AND CLTMP NOP THEN JMP G.08 SCHEDULE WAITERS AND EXIT * G.06 LDA B174C GET SECURITY CODE AND B FROM QUEUE CPA SECCD MATCH? RSS JMP ERR00 NO, ERROR IO00 X * RBL,CLE,ELB MOVE BIT14 (SOMEONE WAITING) TO E G.065 LDA CLASS,I GET CLASS WORD AND B377 CMA,SEZ ANYONE WAITING? (SET ONES COMP) JMP SCEDT YES,SORRY SOMEBODY BEAT YOU TO IT * STA XA,I SET A FOR POSSIBLE RETURN INA GET CORRECT 2'S COMPLEMENT STA B LDA RQP2,I GET THE OPTION FLAG ELA,RAL SET E=BIT15 NO-WAIT OPT. SZB,RSS IF QUEUE-HEAD = 0 SSA AND BIT14 SET, JMP G.07 DON'T DEQUEUE * STB CLASS,I IF Q-H=0 AND BIT14=0 DEQUEUE! G.08 LDA DCLAS NOW SCHEDULE ALL THOSE WAITING JSB $SCD3 FOR AN AVAILABLE CLASS NUMBER. JMP L.16 RETURN * G.07 SEZ,CCE JMP L.16 BIT15=1 FOR NO-WAIT. RETURN. * LDB CLASS GET CLASS ADDR IN B FOR L.013 LDA B,I SET "SOMEONE IS WAITING" FLAG RAL,RAL ERA,RAR STA B,I AND JMP L.013 PUT IT BACK INTO WAIT LIST SPC 1 C377 OCT 177400 COMPLEMENT OF 377 SKP **************************************************************** * *WORD2 ASSEMBLE CONTROL WORD * * CONTROL WORD IS BUILT AS FOLLOWS: * ******************************************************** * T * S * X * U * S FUN * SUB CHAN * REQUEST CODE * * 15/14*13 *12 *11 * 10----6* 5------2 * 1/0 * ******************************************************** * * WHERE: * T= 0 FOR STD USER REQUEST CODE = 1 FOR READ (CLASS OR NORMAL) * = 1 FOR BUFFERED RQ. = 2 FOR WRITE " * = 2 FOR SYSTEM = 3 FOR CONTROL " * = 3 FOR CLASS RQ. * * 'SUB CHAN' IS THE LOW 4 BITS AND 'S' IS THE 5'TH BIT OF THE * SUB CHANNEL. * 'X' IS THE DOUBLE BUFFER BIT * 'U' IS CURRENTLY UNUSED * 'S FUN' IS THE USER SUB FUNCTION * IF THE DEVICE IS A DISC THEN THE 'X' BIT IS CLEARED AND BITS * 8,9 IN 'S FUN' ARE SET TO rTHE LU IF 2 OR 3 ,ELSE THEY ARE * ZEROED. * THIS ROUTINE DOES NOT BUILD THE 'T' FIELD. *** CALL WITH E=0 *** * ***************************************************************** WORD2 NOP LDB RQPX IF CLASS WRITE-READ CPB .4 THEN CHANGE CLB,CLE,INB CHANGE TO READ REQUEST LDA RQP2,I COMBINE REQUEST CODE WITH AND B137C CONTROL INFORMATION ADB A TEMPORARILY STORE IT- LDA TEMP5 GET DRT ENTRY FOR THIS LU AND B174K GET SUBCHANNEL ELA,RAL SAVE HIGH BIT AND ALF,RAL POSITON REST ADA B ADD IT TO THE WORD SEZ IF HIGH BIT SET ADA B20K SET IT IN THE WORD LDB TEMPL IF NOT DISC CCE,SZB,RSS REQUEST, JMP WORD2,I EXIT - * AND C114C OTHERWISE, SWP SET BITS (9,8) AND .3 TO INDICATE ALF,ALF SYSTEM, AUXILIARY, IOR B OR PERIPHERAL TYPE JMP WORD2,I EXIT - * B137C OCT 13700 B3700 OCT 3700 C114C OCT 166377 * * SCEDT ERB,RBR CLEAR THE BIT AND STB CLASS,I RESET THE CLASS HEAD LDB $LIST SAVE STATUS OF STB STADV $LIST ENTRY POINT. LDA CLASS GET HEAD ADDRESS TO A AND JSB $SCD3 RESCHEDULE THE WAITER IF ANY CLE E=0 FOR G.065. IF $LIST ENTRY POINT LDA $LIST IS UNCHANGED, THEN THERE WAS CPA STADV NO WAITER. JMP G.065 NO, SO MUST HAVE BEEN ABORTED. CONTINUE. JMP ERR10 YES. ERROR, SO GO ABORT. * * **************************************************************** * * SUBROUTINE STADV: * * STADV WILL RETURN AT THE UP EXIT IF LU = 0. IT NEXT * CHECKS TO DETERMINE IF THE CURRENT EQT IS DOWN(BIT * 14 EQT WORD 5)OR IF THE LU IS DOWN(BIT 15 DRT WORD 2). IF * DOWN, RETURN IS MADE AT P+1. IF UP, RETURN IS MADE AT P+2. * * CALLING SEQUENCE: * :=ADDRESS OF STATUS WORD FOR THIS EQT. * :=LU#-1. * JSB STADV * * RETURN: * (P+1) EQT OR LU DOWN. * (P+2) EQT AND LU UP. * ALL REGISTERS ARE VIOLATED. * ****************************************************************** * STADV NOP CPA B77 IF LU=0(IE, 77B), THEN JMP STAD9 GOTO UP EXIT. * ADA DRT GET DRT WORD ADA LUMAX 2 AND CHECK LDA A,I IF THE LU IS SSA UP OR DOWN. JMP STADV,I LU IS DOWN. * LDB EQT5,I LU IS UP, SO RBL,SLB CHECK IF THE JMP STAD9 EQT IS UP OR SSB DOWN. JMP STADV,I EQT IS DOWN. * STAD9 ISZ STADV LU AND EQT JMP STADV,I ARE UP. SKP * THE QUEUE CHECK ROUTINE CHECKS TO SEE IF THE QUEUE ON * THE CURRENT EQT HAS MORE THEN THE 'LIMIT' NUMBER OF WORDS * OF BUFFER MEMORY ON IT AT THE CURRENT TIME. * THE LIMIT IS PASSED IN THE B REG. SO THE ROUTINE CAN * CAN BE USED FOR BOTH UPPER AND LOWER LIMIT CHECKS. * * CALLING SEQUENCE: * * LDB NEGATIVE OF LIMIT * JSB QCHK * --- MORE THAN LIMIT WORDS ON QUEUE * --- LESS THAN LIMIT WORDS ON QUEUE * EQT1 ADDRESS IS IN B ON EXIT * QCHK NOP STB TEMP1 SET LIMIT LDA EQT1,I START AT EQT HEAD RAL,CLE,ERA CLEAR POSSIBLE SIGN AND E CLE,SZB SET E FOR NOT EXCEEDED QCHK1 SZA,RSS END OF QUEUE? JMP QCHK3 YES GO EXIT * STA TEMPW SET CURRENT ELEMEMT INA GET THE CON WORD LDB A,I TO B RBL CHECK IF A BUFFERED SSB,RSS REQUEST? JMP QCHK2 NO TRY NEXT ONE * ADA .2 YES STEP TO THE COUNT LDB A,I GET COUNT TO B ADB TEMP1 ADD TO LIMIT STB TEMP1 AND RESET QCHK2 LDA TEMPW,I GET NEXT ELEMENT JMP QCHK1 GO CHECK THIS ELEMENT * QCHK3 LDB EQT1 GET SUSPEND POINTER SEZ,RSS OVERFLOW? ISZ QCHK NO STEP RETURN JMP QCHK,I RETURN * SKP * SUBROUTINE: -LINK- * * PURPOSE: THIS ROUTINE PROVIDES FOR ADDING * AN I/O REQUEST INTO THE SUSPENDED * LIST (QUEUE) CORRESPONDING TO THE * REFERENCED DEVICE. THE PROCEDURE * OF ADDING AN ENTRY INTO THE LIST * INVOLVES ONLY THE ALTERATION OF * THE LINKAGE VALUE IN THE NEW ENTRY * AND IN THE ENTRY PRECEDING THE * NEW ONE IN THE PRIORITY CHAIN. * THE NEW ENTRY IS LINKED ACCORDING * TO ITS PRIORITY AND ON A FIFO * BASIS WITHIN THE SAME PRIORITY * LEVEL. THE END OF A LIST IS MARKED * BY A LINKAGE VALUE OF ZERO. THE * FIRST ENTRY IN A LIST IS SKIPPED * BECAUSE IT IS ASSUMED TO BE THE * REQUESTOR FOR THE CURRENT I/O * OPERATION. IF THE LIST IS EMPTY, * THE LINK WORD IN THE EQT ENTRY * IS SET TO POINT TO THE NEW ENTRY * AND AN INDICATION IS GIVEN TO * THE CALLER OF -LINK- THAT THE * NEW REQUEST MAY BE INITIATED. * * CALL: THE FOLLOWING LOCATIONS MUST BE * SET TO THE INDICATED VALUES * BEFORE THE CALL IS MADE: * * TEMP1 = LOCATION OF NEW REQUEST * TO BE LINKED INTO THE * I/O LIST DEFINED BY THE * CURRENT EQT ENTRY. THE * ADDRESS OF THE LINKAGE * WORD IN THE EQT ENTRY * IS IN -EQT1-. * * TEMP2 = PRIORITY OF THE NEW * REQUEST. * * TEMPL = DISC QUEUE FLAG (# 0 MEANS DISC) * * - JSB LINK * - (RETURN) (E) = 0 IF THE NEW * REQUEST IS THE ONLY ENTRY * IN THE I/O LIST, I.E. THE * DRIVER MAY BE CALLED TO * INITIATE THE NEW OPERATION. * * THERE ARE NO ERROR CONDITIONS * \ DETECTED OR DIAGNOSED BY THIS * ROUTINE. * * SKP LINK NOP LDB EQT1 GET THE HEAD OF THE LIST CLE,RSS SET FIRST FLAG AND SKIP * * FIRST ENTRY IN LIST IS SKIPPED BECAUSE IT * IS THE CALLER FOR THE CURRENT OPERATION * ACTIVE ON THE I/O DEVICE. * LINK1 SEZ,CCE,RSS IF NOT FIRST SKIP JMP LINK7 GO START THE SCAN * STB TEMP3 TEMP3 = ADDRESS OF CURRENT ENTRY. CCE,INB EXAMINE THE LDA B,I TYPE FIELD IN WORD 2 OF BLOCK INB TO DETERMINE LOCATION RAL OF PRIORITY. SSA IF BUFFERED REQUEST JMP LINK8 B POINTS AT PRIORITY * SLA,RSS IF USER REQUEST JMP LINK5 GO BUMP BY 4 * LDA TEMPL SYSTEM IS IT A DISC SZA,RSS REQUEST ? JMP LINK2 NO USE ZERO PRIORITY * INB,RSS YES USE THE PROVIDED WORD LINK5 ADB .4 IS IN WORD 7 OF ID SEGMENT. LINK8 LDA B,I GET PRIORITY OF CURRENT ENTRY. LINK2 LDB TEMP3 CMA,INA SUBTRACT CURRENT PRIORITY FROM ADA TEMP2 PRIORITY OF NEW REQUEST. SSA IF CURRENT IS LOWER PRIORITY JMP LINK3 (HIGHER #), GO TO LINK NEW. * LINK7 STB TEMP5 SAVE PREVIOUS ENTRY POINTER LDB B,I GET NEXT ENTRY ELB,CLE,ERB CLEAR POSSIBLE SIGN (SAVES E) SZB IF END-OF-LIST, SKIP. JMP LINK1 -CONTINUE SCAN. * * PROPER POSITION (BY PRIORITY) IS FOUND IN LIST, * OR ELSE THE SCAN OF THE LIST IS FINISHED AND * THE NEW REQUEST IS ADDED AS THE LAST ENTRY. * LINK3 LDA TEMP1 SET ADDRESS OF NEW ENTRY IN STB TEMP1,I SET ADDRESS OF NEXT OR 0 IF LAST XOR TEMP5,I KEEP SIGN OF OLD WORD AND C100K IF IT WAS SET XOR TEMP5,I STA TEMP5,I SET THE POINTER TO THE NEW REQUEST JMP LINK,I IN NEW - EXIT TO CALLER. * SPC 1 .1 DEC 1 .2 DEC 2 .4 DEC 4 .6 DEC 6 .7 DEC 7 NLH.15 DEC 15 SKP SKP * SUBROUTINE: -DRIVR- * * PURPOSE: THIS ROUTINE PROVIDES A CENTRAL POINT * FOR CALLING AN I/O DRIVER TO INITIATE * A NEW OPERATION. THIS ROUTINE, BEFORE * CALLING A DRIVER, SETS THE REQUEST * PARAMETERS INTO THE APPROPRIATE WORDS * IN THE EQT ENTRY CORRESPONDING TO THE * REFERENCED DEVICE AND ASSIGNS A DMA * CHANNEL IF REQUIRED. * IT ALSO SETS THE DEVICE TIME-OUT CLOCK. * * REQUIREMENTS: THE ADDRESSES OF THE EQUIPMENT * TABLE ENTRY (15 WORDS) MUST BE SET * IN EQT1 TO EQT15 BEFORE THE ROUTINE * IS CALLED. * * CALLING SEQUENCE: - PARAMETER SET UP AS ABOVE- * - (REGISTERS MEANINGLESS) - * * (R) JSB DRIVR * (P+1) -OPERATION INITIATED OR STACKED * (P+2) -OPERATION REJECTED * * ERRORS/DIAGNOSTICS: A DRIVER IS CALLED ONLY * IF THE UNIT IS AVAILABLE N* AND NOT BUSY; OTHERWISE, * RETURN IS MADE TO THE * CALLER. IF THE DRIVER * FINDS THE UNIT UNAVAILABLE * OR THE REQUEST ILLEGAL FOR * THE UNIT, THE INDICATION IS * RETURNED TO THE CALLER FOR * FURTHER ACTION. * DRIVR NOP LDA EQT5,I CHECK AVAILABILITY RAL OF DEVICE SSA,SLA IF DMA WAIT JMP DVR00 GO DO DMA WAIT THING. * CMA,SSA,SLA,RSS IF DOWN OR BUSY JMP DRIVR,I EXIT * * * DEVICE IS AVAILABLE - CHECK FOR DMA REQUIREMENT * LDA EQT4,I SKIP DMA CHANNEL ASSIGNMENT IF SSA,RSS NOT REQUIRED ( D FIELD = 0 ) JMP DRV02 IN WORD 4 OF EQT ENTRY. SPC 1 * LDB EQT1,I SKIP DMA CHANNEL ASSIGNMENT IF * INB CONTROL REQUEST (CODE = 3) * TOA B,I * AND .3 * CPA .3 * JMP DRV02+2 * * DMA CHANNEL REQUIRED - ATTEMPT TO ASSIGN CHANNEL * DVR0 LDA DMACF IF DMA QUEUE IS NOT EMPTY B2002 SZA JMP DVR1 THEN JUST ADD THIS EQT TO QUE. * DVR00 LDA .6 INITIALIZE FOR STA CHAN CHANNEL 6 (DMA # 1 ) LDB INTBA ADDR. OF DMA 1 IN INTERRUPT TABLE CLA IF DMA CHANNEL # 1 CPA B,I AVAILABLE (INTBL ENTRY = 0), JMP DRV01 GO TO ASSIGN IT TO THIS UNIT. * INB SET FOR CHANNEL 7, ISZ CHAN DMA CHANNEL # 2. CPA B,I IF THIS CHANNEL AVAILABLE, JMP DRV01 GO TO ASSIGN IT. * * NO CHANNEL AVAILABLE - SET FLAGS AND RETURN * DVR1 LDA EQT5,I IF DEVICE SSA IS ALREADY WAITING FOR DMA, JMP DRIVR,I EXIT. * IOR B140K SET AVAIL TO SAY WAITING FOR STA EQT5,I DMA, ADD 1 TO ISZ DMACF # DEVICES WAITING. JMP DRIVR,I - EXIT TO CALLER - * DRV03 SEZ,CLE,INB STEP OVER PRIORITY AND INB IF CLASS REQUEST OVER CLASS WORD AND .6 ISOLATE REQUEST (A IS SHIFTED REMEMBER) CPA .6 IF CONTROL REQUEST JMP DRV2 GO SET IT UP * STB A SET BUFFER ADDRESS ADA .4 IN A (SKIP LENGTH AND TWO OPTION WDS) JMP DRV3 GO FINISH SET UP. * * ASSIGN AVAILABLE CHANNEL * DRV01 LDA EQT1 SET EQT ENTRY ADDRESS IN INTER- STA B,I RUPT TABLE ENTRY FOR CHANNEL. LDB DMACF IF UNIT WAS LDA EQT5,I PREVIOUS WAITING SSA FOR A DMA ADB N1 CHANNEL, SUBTRACT 1 FROM # OF STB DMACF UNITS WAITING. ALR,RAR CLEAR STA EQT5,I FIELD. * * * TRANSFER REQUEST PARAMETERS TO EQT ENTRY * DRV02 EQU * DV02C LDB EQT1,I GET CURRENT REQUEST ADDRESS INB FROM LINK WORD OF EQT ENTRY. LDA B,I GET REQUEST CONTROL WORD, AND NTSUB SET SUBCHANNEL BITS TO ZERO STA EQT6,I SET IN EQT 6. XOR B,I SET SUBCHANNEL RAL,RAL NUMBER INTO RAL,SLA,RAL BITS 10-6 OF WORD XOR B2002 SET HIGH BIT,CLEAR LOW. STA TEMPL SAVE FOR EQT4 LDA B,I CLE,ELA IF REQUEST IS DRV2 INB SSA HELD AS A TEMPORARY BLOCK FOR JMP DRV03 BUFFERING, JUMP. * LDA B,I DRV3 STA EQT7,I ADDRESS. INB LDA B,I SET BUFFER STA EQT8,I LENGTH. INB DLD B,I SET ADDITIONAL 2 DST EQT9,I PARAMETERS IF SUPPLIED. * * CALL DRIVER -INITIATION- SECTION * LDA EQT14,I SET DEVICE LDB EQT15,I TIME OUT CLOCK ONLY SZB,RSS IF NOT CURRENTLY RUNNING STA EQT15,I LDA EQT4,I ZERO TIME-OUT AND C7700 BIT AND SET IOR TEMPL IN SUBCHANNEL STA EQT4,I SET (A) = CHANNEL AND B77 # OF I/O DEVICE. q& LDB EQT2,I CALL DRIVER *INITIATION* JSB B,I SECTION. SKP * * DRIVER RETURNS AN INDICATION OF THE ACCEPTANCE * OR REJECTION OF THE REQUESTED OPERATION: * (A) = 0, OPERATION SUCCESSFULLY INITIATED * (A) NOT = 0, OPERATION REJECTED AND (A) * CONTAINS A NUMERIC CODE * IDENTIFYING THE CAUSE OF * THE REJECT. * * = 1 READ OR WRITE REQUEST ILLEGAL FOR DEVICE * = 2 CONTROL REQUEST ILLEGAL OR NOT DEFINED * = 3 EQUIPMENT MALFUNCTION OR NOT READY * = 4 IMMEDIATE COMPLETION OF OPERATION * = 5 DRIVER REQUIRES DMA BUT FLAG IS NOT SET IN EQT * STA TEMP6 SAVE DRIVER CODE. CCE,SZA IF REJECTED, JMP DRV06 EXAMINE REASON * * OPERATION INITIATED * LDB EQT5,I SET RBL,ERB = 2 TO SAY DEVICE LDA EQT1,I IF NO QUE SZA SKIP BUSY SET STB EQT5,I IN OPERATION. JMP DRIVR,I EXIT. * * OPERATION REJECTED * DRV06 STB TLOG SAVE (B) CLA CLEAR DEVICE STA EQT15,I TIME-OUT CLOCK JSB CLDMA CLEAR DMA IF ALLOCATED LDA TEMP6 (A) = REJECT CODE. CPA .5 IF DMA REQUIRED JMP DVR0 GO ATTEMPT ASSIGNMENT ISZ DRIVR SET RETURN TO (P+2). CPA .3 IF NOT READY THEN JMP DRIVR,I -EXIT. JMP ILLCD ELSE GO TO SEND THE MESSAGE SPC 1 C7700 OCT 170077 NTSUB OCT 153703 B174K OCT 174000 B20K OCT 20000 HED < I/O MODULE SUBSECTION - SYSTEM REQUEST PROCESSOR > * SYSTEM I/O REQUEST PROCESSOR - $XSIO- * * A PRIVATE ENTRY IS PROVIDED AT ENTRY POINT * < $XSIO> TO ALLOW MODULES OF THE REAL TIME * EXECUTIVE TO CALL FOR I/O OPERATIONS WITHOUT * INCURRING THE OVERHEAD AND PROCEDURES * INVOLVED WITH USER I/O REQUESTS. NO ERROR * CHECKING IS PERFORMED, THE REQUEST IS LINKED * INTO THE APPROPRIATE I/O LIST AT A PRIORITY * LEVEL OF ZERO (HIGHEST PRIF;ORITY), AND CONTROL * IS RETURNED TO THE FIRST WORD FOLLOWING THE * REQUEST CALL. * REQUEST FORMAT: A SYSTEM I/O REQUEST DIFFERS * FROM THE USER I/O REQUEST IN * FORMAT AND POWER. SPECIFICALLY, * A SYSTEM DISC CALL CAN SPECIFY A * SERIES OF TRANSFERS TO BE * PERFORMED BEFORE THE NEXT * OPERATION IS INITIATED. A * COMPLETION ADDRESS CAN BE * SPECIFIED FOR OPERATION OF * AN OPEN SUBROUTINE AT THE * END OF THE OPERATION. THIS * FACILITY IS ONLY AVAILABLE * TO SYSTEM ROUTINES AND IS * USED TO RESET FLAGS, ETC. * BECAUSE AN OPERATION IS * ALWAYS BUFFERED TO THE * SYSTEM. A ZERO COMPLETION * ADDRESS INDICATES ABSENCE * OF A COMPLETION ROUTINE. * WORD * ---- EXT $XSIO * 1 JSB $XSIO * 2 OCT * 3 DEF * 4 NOP * 5 OCT * 6 DEF * 7 DEC OR * * DISC VERSION OF REQUEST: * WORD 6 OF REQUEST POINTS TO AN ARRAY * CONTAINING -N- SETS OF TRIPLETS * DECLARING BUFFER ADDRESS, LENGTH AND * TRACK/SECTOR ADDRESS FOR EACH TRANSFER. * THE SET OF TRIPLETS IS OPEN-ENDED AND * TERMINATED BY A ZERO WORD: * * 1 DEF < BUFFER ADDRESS> * 2 DEC < BUFFER LENGTH > * 3 OCT < TRACK/SECTOR #> * . ETC * . . * N DEC 0 (END OF TRIPLETS) * FOR DISC REQUEST THE 7'TH WORD IS THE REQUEST PRIORITY. * * $XSIO NOP CCB ADB $XSIO,I GET LOGICAL UNIT #. STB $CKLO SAVE FOR *STADV*. ADB DRT INDEX INTO THE DRT. LDA B,I GET ASSIGNED EQT ENTRY #. STA TEMPL AND SAVE IT JSB $CVEQ CONVERT TO ABSOLUTE EQT ADDRESSES * LDB $XSIO SET ADDRESS ADB .2 OF LIST POINTER WORD IN STB TEMP1 REQUEST FOR . * LDA TEMPL GET THE SUBCHANNEL WORD AND B174K ISOLATE THE SUB CHANNEL CLE,INB SET ADDRESS OF HIS CON WORD ELA,ALF MOST BIT TO 'E', REST AROUND ELA,SLA,RAL TO BITS 2-5, SKIP IF MOST IS ZERO ADA B20K SET MOST IN BIT 13 IF REQUIRED ADA MSIGN ADD THE 'SYSTEM REQUEST' BIT XOR B,I ADD HIS INFORMATION AND SUBCH =B120074 THROW OUT THE EXCESS XOR B,I SET HIS BITS AGAIN STA B,I PUT THE RESULT BACK IN THE QUE CLA SET PRIORITY OF REQUEST = 0 STA TEMP2 FOR , STA CONFL SET CONTROL FLAG = 0 (REQUEST). STA TEMPL SET DISC FLAG TO ZERO (NON-DISC) LDA EQT5,I GET THE DRIVER TYPE AND B36K MASK TO TEST FOR DISC ADB .3 SET B TO THE RETURN ADDRESS STB $XSIO AND SAVE IT ADB N1 SET B TO DISC PRIORITY WORD LDB B,I GET PRIORITY WORD CPA B14K IF DISC STB TEMP2 SET PRIORITY CPA B14K AND STA TEMPL THE DISC FLAG FOR * JSB LINK CALL TO LINK REQUEST IN I/O LIST. SEZ IF DEVICE IS BUSY JMP $XSIO,I THEN EXIT. * LDA $CKLO ELSE, IF DEVICE IS JSB STADV DOWN, THEN RETURN RSS TO CALLER. * JSB DRIVR CALL DRIVER TO INITIATE OPERATION JMP $XSIO,I -GOOD REQUEST,EXIT * LDB $XSIO BAD NEWS SO TRANSFER THE STB XSIOE RETURN ADDRESS FOR NR ROUTINE * JMP NOTRD PRINT DIAGNOSTIC. SPC 1 XSIOE NOP SUBCH OCT 120074 SUBCHANNEL MASK, (PLUS SYSTEM RQ CODE) HED < I/O CONTROL MODULE - COMPLETION SUBSECTION > * * I/O COMPLETION SUBSECTION * * THIS SECTION IS RESPONSIBLE FOR THE INITIATION * OF STACKED I/O OPERATIONS, PLACING A USER * PROGRAM BACK IN A SCHEDULED STATE WHEN ITS * I/O OPERATION IS COMPLETED, DYNAMIC ALLOCATION * OF THE TWO DMA CHANNELS AMONG SYNCHRONOUS * DEVICES, AND CALLING FOR OPERATOR NOTIFICATION * OF EQUIPMENT MALFUNCTION. * * IS ENTERED DIRECTLY FROM INTERRUPT CONTROL * WHEN AN I/O OPERATION IS TERMINATED AND ALL * ERROR RECOVERY PROCEDURES HAVE BEEN ATTEMPTED. * ON ENTRY TO THIS SECTION, (B) CONTAINS THE * NUMBER OF WORDS TRANSFERRED. THE ADDRESSES OF * THE EQUIPMENT TABLE ENTRY ARE SET IN -EQT1- TO * - EQT 15-. * * REQUESTS ARE STACKED IN LISTS FOR EACH DEVICE * ACCORDING TO PRIORITY. THE REQUESTS ARE EITHER * USER (NORMAL), USER (AUTOMATIC OUTPUT BUFFERING) * OR SYSTEM - IDENTIFICATION OF REQUEST TYPE * THE CODE IN BITS 15-14 OF THE * IN EACH REQUEST CALL. THE FORMATS OF THE THREE * TYPES OF REQUESTS AS THEY APPEAR IN THE I/O * LISTS ARE: * * 1) USER (NORMAL OPERATION) * * THE PARAMETERS FROM THE REQUEST ARE STORED * IN THE TEMPORARY AREA OF THE PROGRAM ID * SEGMENT. THE LINK WORD OF THE SEGMENT IS * USED TO LINK INTO THE I/O LIST. * * WORD CONTENTS * ---- -------- * 1 < LINKAGE WORD > * 2 * 3 * 4 * 5 * 6 * 7 * . -REMAINDER OF ID SEGMENT . * * SKP * * 2) USER (AUTOMATIC OUTPUT BUFFERING) * * REQUESTS OF THIS TYPE ARE CONSTRUCTED * IN THE SECTION OF SYSTEM AVAILABLE MEMORY. * * WORD CONTENTS * ---- -------- * 1 < LINKAGE WORD > * 2 * 3 * 4 * 5 * 6 * 7 * 8 * . . . . * . . . . * N+7 * * 3) USER (CLASS INPUT/OUTPUT) * * REQUESTS OF THIS TYPE ARE CONSTRUCTED * IN THE SECTION OF SYSTEM AVAILABLE MEMORY. * * WORD CONTENTS * ---- -------- * 1 < LINKAGE WORD > * 2 * 3 (CHANGED TO STATUS AT COMP.) * 4 * 5 * 6 (CHANGED TO TLOG AT COMP.) * 7 * 8 * 9 * . . . . * . . . . * N+8 * SKP * * 4) SYSTEM REQUEST * * THE SYSTEM REQUEST IS LINKED INTO * THE I/O LIST BY USING WORD 4 OF THE * CALL AS A LINK WORD. A SYSTEM * REQUEST ASSUMES THE PRIORITY LEVEL * OF ZERO (HIGHEST PRIORITY). * * WORD CONTENTS * ---- -------- * 1 < JSB $XSIO > * 2 < LOGICAL UNIT # > * 3 * 4 < LINKAGE WORD > * 5 * 6 * 7 * * THE FIELD (BITS 15-14 IN CONTROL WORD) * IDENTIFIES THE REQUEST TYPE AS: * * 00 USER (NORMAL OPERATION) * 01 USER (AUTOMATIC BUFFERING) * 10 SYSTEM * 11 8CLASS I/O * * SKP IOCOM RAL,CLE,ERA CLEAR THE SIGN BIT AND SAVE IN E STA TEMP3 SAVE STATUS FROM DRIVER AND STB TLOG TRANSMISSION LOG STB XLOG SAVE TRANSMISSION LOG FOR RETURN. * CLA CLEAR STA EQT15,I TIME-OUT CLOCK. * LDA EQT4,I SET THE COMPLETION SECTION FLAG STA CONFL AND TEST FOR DMA RETURN SEZ,RSS SIGN OF A IS EXPLICID RETURN OF SSA DMA CHANNEL, CALL TO JSB CLDMA RELEASE ITS ASSIGNMENT. * L.49 LDB EQT1,I GET CONTROL WORD FROM CLE,SZB,RSS IF ILLEGAL ENTRY JMP CIC.4 SEND ERROR MESSAGE * SSB,INB REQUEST BLOCK TO JMP L.502 IF CLEAR COMPLETION GO CLEAN IT UP. STB IOE11 SAVE CONWD FOR *IOERR* USE. * LDA B,I EXTRACT FIELD. STA TEMP0 SAVE CONTROL WORD. LDB EQT1,I LDA TEMP3 IF ERROR, CPA .1 GO PROCESS. JMP NOTRD * LDA B,I UNLINK STA EQT1,I CURRENT I/O LDA TEMP0 REQUEST. RAL,SLA,ELA IF BIT 15 = 1 ( = 2 OR 3) JMP L.53 PROCESS AS SYSTEM REQUEST. * SEZ,RSS IF = 0, PROCESS JMP L.51 AS NORMAL USER REQUEST. * * RELEASE AUTOMATIC BUFFERING BLOCK * LDA TEMP3 IF MALFUNCTION OCCURRED, SZA THEN UNDO THE RELINKING STB EQT1,I AND BY PASS RELEASE OF SZA BUFFER. JMP L.70 STB L.50 * ADB .3 GET TOTAL LDB B,I BLOCK LENGTH AND STB L.50+1 SET IN RELEASE CALL. * JSB $RTN RELEASE BLOCK TO AVAILABLE MEM. L.50 NOP - BLOCK ADDRESS - NOP - BLOCK LENGTH - L.501 JSB $CKLO CHECK IF BELOW THE LIMIT. IF SO, JMP L.54 SCHED ANY WAITERS. START NEXT REQUEST. * L.502 ADB C100K SUBTRACT ONE AND SIGN BIT STB EQT1,I RESET IN THE EQT AND JMP L.55 g GO START THE NEXT RQ. SKP * * NORMAL USER OPERATION COMPLETION * L.51 STB L.52 SET CURRENT ADDR. FOR SCHEDULER. ADB .9 SET (B) = ADDR. OF XA IN ID SEG. LDA TEMP3 GET COMPLETION STATUS CLE,SZA SET BIT 14 CCE IN STATUS WORD LDA EQT5,I IF THE STATUS RAL,RAL IS NON-ZERO ERA,CLE,ERA AND SAVE IN USER A-REG. STA B,I CONTENTS OF PROGRAM. INB STB TEMP9 SAVE TRANSMISSION LOG ADDRESS LDA TLOG SET TRANSMISSION LOG AS STA B,I SAVED B-REGISTER. ADB .5 INDEX TO THE STATUS WORD LDA B,I AND SAVE FOR STA TEMPX DISC ERROR ROUTINE * JSB $LIST CALL SCHEDULER MODULE TO PLACE OCT 101 USER PROGRAM INTO L.52 NOP LIST. JMP L.54 * * SYSTEM REQUEST COMPLETION * L.53 STB PTR SAVE THE QUEUE ADDRESS SEZ IF CLASS REQUEST JMP C.01 GO REQUEUE THE REQUEST * ADB N1 GET WORD 3 OF REQUEST LDA B,I . STA COMPL SAVE COMPLETION ADDR. OR ZERO. SKP * * < L.54 > : AT THIS POINT: * 1) A TEMPORARY BUFFER HAS BEEN RELEASED, * 2) A NORMAL OPERATION HAS CAUSED THE * REQUESTING PROGRAM TO BE LINKED * BACK INTO THE LIST, OR * 3) A SYSTEM REQUEST COMPLETION ADDRESS * HAS BEEN SAVED. * L.54 LDA TEMP3 BY PASS INITIATING THE NEXT CMA,SSA,INA,SZA OPERATION IF A MALFUNCTION HAS JMP L.70 OCCURRED ON THIS DEVICE. * * L.55 LDA EQT5,I CHECK FIELD. RAL SSA IF AV SAYS DOWN JMP IOCX GO EXIT * * SECTION <60> PROVIDES FOR INITIATING THE NEXT * OPERATION WAITING FOR THE COMPLETED DEVICE. * L.60 LDA EQT5,I SET ALR,RAR FIELD STA EQT5,I = 0 TO SAY AVAILABLE. JMP L.68 oW GO START THE NEXT REQUEST * .11 DEC 11 N8 DEC -8 * * CHECK IF BELOW THE BUFFER LIMIT ON THE CURRENT EQT. * $CKLO NOP LDB $BLLO CHECK IF BELOW THE LIMIT. JSB QCHK JMP $CKLO,I NO, SO RETURN. * LDA B YES, SO SCHEDULE ANY WAITERS JSB $SCD3 AND JMP $CKLO,I RETURN. SKP * CLASS REQUEST COMPLETION * * CLASS COMPLETION IS HANDLED AS FOLLOWS: * * 1. THE EXCESS BUFFER IS RETURNED ON WRITE COMPLETION * 2. IF THE CLASS QUEUE IS NOT EXPECTING A REQUEST * THE WHOLE BUFFER IS RELEASED AND WE EXIT. * 3. IF A PROGRAM IS WAITING FOR THE REQUEST IT IS * RESCHEDULED. * 4. THE REQUEST IS MODIFIED TO PUT THE STATUS WORD * AND THE TRANSMISSION LOG (TLOG) IN WORDS * 3 (PRIORITY) AND 6 (USER LENGTH WORD) * 5. THE CLASS QUEUE IS UPDATED AND WE EXIT. * * SEE DESCRIPTION OF CLASS QUEUE IN COMMENTS AT BEGINNING * OF SECTION ON USER REQUESTS. * * C.01 LDB PTR GET THE QUEUE ADDRESS INB LDA B,I GET THE CON WORD ADB .2 STEP TO LENGTH WORD STB CLTMP SET LENGTH ADDRESS SLA IF READ JMP C.03 SKIP RETURN * LDA B,I GET BLOCK SIZE TO A. ADB .5 STEP TO RETURN BUFFER ADDRESS ADA N8 SUBTRACT SIZE OF OVERHEAD STA CLRTN SET RETURN SIZE ADA N2 IF LESS THAN TWO WORDS SSA THEN SKIP JMP C.03 THE RETURN * STB CARTN SET THE BUFFER ADDRESS JSB $RTN RETURN THE WRITE BUFFER CARTN NOP BUFFER ADDRESS CLRTN NOP BUFFER LENGTH * LDA CLRTN SET THE CMA,INA NEW BLOCK SIZE ADA CLTMP,I IN THE BLOCK STA CLTMP,I SET THE NEW SIZE * C.03 ISZ CLTMP STEP TO CLASS WORD LDA CLTMP,I GET THE CLASS AND B377 COMPUTE THE ADA DCLAS CLASS HEAD ADDRESS * C.404 LDB A,I GET THE CONTENTS OF CLASS HEAD. * CLE,SSB,RSS IF POSITIVE JMP C.08 GO TRACK DOWN THE QUE. * STA CLASS SAVE THE CLASS QUEUE ADDRESS RBL,CLE,ELB IF PROGRAM WAITING SEZ,CLE,RSS JMP C.05 SKIP,ELSE GO LINK IN THE RQ. * * PROGRAM IS WAITING, CLEAR THE WAIT FLAG * AND RESCHEDULE THE PROGRAM * ERB,RBR CLEAR THE WAIT FLAG STB A,I AND RESET IN THE QUEUE. * JSB $SCD3 SCHEDULE ANY PROGRAMS WAITING C.05 LDB CLASS,I GET CURRENT END OF LIST ADB N1 SUBTRACT ONE PENDING REQUEST STB PTR,I SET IN NEW END OF LIST LDB PTR SET NEW ELEMENT IN STB CLASS,I THE LIST. * ISZ PTR STEP TO ISZ PTR PRIORITY ADDRESS ISZ CLTMP STEP TO BUFFER LENGTH WORD LDA EQT5,I GET CURRENT STATUS ALR,RAL CLEAR DOWN/BUSY BITS. LDB TEMP3 GET COMPLETION STATUS CMB,CLE,INB IF FROM ILCODD * CME IF BAD COM CODE ERA,CLE,RAR SET BIT 14 LDB TLOG GET THE TRANSMISSION LOG. STA PTR,I SET THE STATUS WORD STB CLTMP,I AND THE TLOG * JMP L.501 ELSE STANDARD COM EXIT * C.08 LDA B TRACK DOWN JMP C.04 THE END OF THE LIST SPC 1 * * THIS DEVICE IS COMPETING WITH OTHER DEVICES FOR * THE USE OF THE AVAILABLE DMA CHANNEL. THE * FIELD IN THE CURRENT ENTRY IS SET = 3 TO MEAN * WAITING FOR DMA. THE EQT IS THEN SCANNED FROM * FIRST TO LAST ORDER (#1 TO N) TO FIND THE FIRST * UNIT WAITING FOR DMA. THEREFORE, THE ORDER OF * THE EQT DETERMINES PRIORITY FOR DYNAMIC ASSIGN- * MENT OF DMA CHANNELS - THE SYSTEM DISC SHOULD * BE THE FIRST ENTRY IN THE EQT. * L.63 LDA EQT# SET # OF CMA,INA EQT ENTRIES STA TEMP1 AS AN INDEX VALUE. LDB EQTA INITIALIZE TO FIRST EQT ENTRY. * L.64 STB TEMP2 SAVE CURRENT ENTRY ADDR. ADB .4 0 EXTRACT LDA B,I FIELD FROM RAL WORD 5. SSA,SLA IF A = 3, GO TO JMP L.66 ASSIGN DMA. * L.65 ADB .11 SET (B) FOR NEXT ENTRY. ISZ TEMP1 END OF EQT? JMP L.64 - NO, CONTINUE SCAN * CCA DECREMENT THE DMA COUNT ADA DMACF (MUST HAVE ABORTED A DMA STA DMACF WAIT WITH 'OF,XXX,1' REQUEST) JMP IOCX EXIT * L.66 CLA,INA IF ONLY 1 DEVICE WAITING CPA DMACF FOR DMA, GO TO JMP L.67 ASSIGN TO THIS DEVICE. * LDA TEMP2 IF CURRENT UNIT IS CPA EQTA FIRST IN EQT (I.E SYSTEM DISC) JMP L.67 ASSIGN ANYWAY. * CPA EQT1 IF SAME DEVICE JUST COMPLETED, JMP L.65 ALLOW OTHER DEVICES DMA TIME. * L.67 LDA TEMP2 IF DEVICE TO BE INITIATED IS CPA EQT1 SAME AS INTERRUPTING DEVICE, RSS SKIP SETTING EQT ADDRESSES. JSB $ETEQ SET EQT ADDRESSES. * LDA EQT1,I IF NO I/O QUEUED ON THIS SZA,RSS DEVICE, THEN GO CLEAN OUT JMP L.60 ITS 'WAITING ON DMA ALLOC.' FLAG. * * CALL IF A REQUEST IS STACKED OR A * WAITING UNIT IS ASSIGNED A DMA CHANNEL. * L.68 LDA EQT1 GO CLEAN OUT ANY CPA $DMEQ I-O REQUESTS IF THIS JMP IOCX7 IS THE BIT BUCKET. * LDB EQT1,I IF NO REQUEST SZB,RSS IS WAITING, THEN JMP IOCX GO EXIT. * JSB DRIVR CALL RSS IF GOOD REQUEST THEN SKIP JMP NOTRD DIAGNOSTIC IF NOT AVAILABLE. SKP * **************************************************************** * * I/O COMPLETION - EXIT SECTION. * * THIS ROUTINE FIRST CHECKS FOR A DMA QUEUE AND IF ANY AND IF A * CHANNEL IS AVAILABLE, THEN THE CHANNEL ASSIGNMENT ROUTINE * IS ENTERED. IF THIS CONDITION DOES NOT EXIST, THEN * IF THE "BIT BUCKET FLAG" IS SET, THEN THE BIT BUCKET * IrNLH/O REQUEST ARE CLEANED OUT. IF THE FLAG IS NOT SET, THEN * IF THE REQUEST IS A SYSTEM REQUEST WITH A COMPLETION ADDRESS, * THEN CONTROL IS TRANSFERED TO THE COMPLETION ADDRESS. IF * NEITHER OF THESE CONDITIONS EXITS, THEN THE OPERATOR ATTENTION * FLAG IS CHECKED. IF SET, THEN THE OPERATOR ACKNOWLEDGEMENT * ROUTINE IS ENTERED. IF NOT SET, THEN CONTROL IS RETURNED * TO THE SYSTEM. * ***************************************************************** * IOCX LDA DMACF GET THE DMA QUEUE FLAG SZA,RSS IF EMPTY QUE THEN JMP IOCX1 GO EXIT * DLD INTBA,I ELSE GET THE DMA FLAGS SZA IF ANY SZB,RSS AVAILABLE JMP L.63 GO ALLOCATE IT. * IOCX1 LDB $BITB CHECK THE "BIT BUCKET FLAG" TO SEE SZB TO SEE IF THE BIT BUCKET MUST BE JMP IOCX0 CLEANED OUT. * LDA COMPL IF SYSTEM REQUEST N STB COMPL CLEAR COMPLETION SPECIFICATION. LDB XLOG SZA COMPLETION ROUTINE SPECIFIED, JMP A,I OPERATE IT. * LDB OPATN GET OPERATOR ATTENTION FLAG STA OPATN - CLEAR FLAG - SZB IF OPERATOR DESIRES CONTROL, JMP $TYPE ACKNOWLEDGE. JMP $XEQ OTHERWIZE, RETURN TO THE DISPATCHER. * XLOG NOP SKP * * * CLEAN OUT BIT BUCKET REQUESTS. * * IOCX0 LDA $DMEQ SET UP THE BIT JSB $ETEQ BUCKET EQT ADDRESSES. IOCX7 LDB EQT1,I CHECK IF THERE IS ANY SZB,RSS I/O REQUEST TO BE JMP IOCX9 INITIATED ON THE BIT BUCKET. * LDB EQT1,I YES, SO GET THE REQUEST'S ADB .3 SIZE AND DO AN IMMEDIATE LDB B,I COMPLETION. JMP L.136 * IOCX9 STB $BITB NO, SO CLEAR BIT BUCKET FLAG AND JSB $CKLO CHECK BUFFER LIMITS AND SCHED.WAITERS. JMP IOCX1 * $BITB NOP BIT BUCKET FLAG. DO NOT TOUCH. SKP * * * I/O DEVICE COMPLETION ERROR FROM DRIVER * (A) = ERROR CODE * L.70 LDA TEMP3 CPA .3 IF PARITY ERROR, CCE,RSS CHECK FOR DISC. JMP IOERR - OTHER ERROR CONDITION - * LDA EQT5,I IF AND B36K DEVICE CPA B14K IS DISC, PUT JMP DISCE OUT SPECIAL MESSAGE. * LDA .3 PARITY ERROR ON JMP IOERR OTHER DEVICE, PRINT DIAG. * * DISC ERROR PROCESSING (SYSTEM/USER) * DISCE LDA TLOG (A) = ERROR TRACK ADDRESS. JSB $CVT3 CONVERT TO DECIMAL ASCII. INA DLD A,I SET DECIMAL TRACK DST DMSG+1 IN ERROR MESSAGE. JSB CPEQT COMPUTE EQT ENTRY # (SETS E). JSB $CVT1 STA DMSG+5 SET IN ERROR MESSAGE. * LDA EQT4,I GET SUBCHANNEL ALF,ALF AND CONVERT RAL,RAL TO ASCII AND B37 JSB $CVT1 STA DMSG+7 * LDB TEMP0 (B)= REQUEST TYPE LDA BLS (A)= " S" SSB,RSS IF USER TYPE REQUEST, LDA BLU (A)= " U" STA DMSG+8 SET "S" OR "U" IN MESSAGE * LDA EQT1 SAVE DISC STA TEMP7 -EQT- ADDRESS LDA COMPL SAVE REQUEST (SYSTEM) STA TEMP8 COMPLETION ADDRESS LDA DMSGA PRINT DIAGNOSTIC: JSB $SYMG "TRNNNN EQTXX,UYY S(OR U)" * CCB LDA TEMP0 IF DISC ERROR SSA FROM SYSTEM REQUEST, JMP L.71 CONTINUE. * STB TEMP9,I SET TLOG IN ID-SEGMENT FOR ABORT ALF,ALF IF LU # 2 OR 3, AND .3 SET TRACK DOWN SZA,RSS IN TAT- JMP L.71 OTHERWISE, CONTINUE * SLA,RSS CLB,RSS LDB TATSD ADB TLOG INDEX TO ADB TAT TAT, SET ERROR LDA MSIGN TRACK STA B,I "DOWN" (ASSIGNED TO SYSTEM). * LDA L.52 (A)= ID SEGMENT ADDRESS LDB TEMPX GET THE SAVED STATUS AND IF NO-ABORT SET SSB,RSS SKIP THE ABORT JSB $ABRT -- ABORT PROGRAM -- * L.71 STB TLOG SET TLOG FOR SYSTEM EXIT LDA TEMP8 RESET "COMPLETION" STA COMPL ADDRESS. LDA TEMP7 RESET EQT STA CONFL SET FLAG FOR COMPLETION. JSB $ETEQ ADDRESSES JMP L.60 * DMSGA DEF *+1 DEC -18 DMSG ASC 9,TRNNNN EQTXX UYY S BLS ASC 1, S BLU ASC 1, U HED < I/O CONTROL MODULE - ERROR SECTION > * * I/O REQUEST ERROR SECTION * * PART 1: ERRORS ENCOUNTED IN ANALYSING A * USER REQUEST CAUSE A DIAGNOSTIC * TO BE PRINTED ON THE SYSTEM * TELETYPEWRITER AND THE USER * PROGRAM ABORTED. THE FORMAT OF * THE DIAGNOSTIC IS: * * 'IONN PNAME RADDR' * * AS CONSTRUCTED AND SET * BY THE ROUTINE -$ERMG- IN * THE PROGRAM <$RQST>. -NN- IS A * CODE IDENTIFYING THE ERROR TYPE. * ERR00 CLB,RSS ILLEGAL CLASS NUMBER OR SEC/URITY CODE ERR01 CLB,INB INSUFFICIENT # OF PARAMETERS RSS ERR02 LDB .2 ILLEGAL LOGICAL UNIT REFERENCE, RSS = 0 OR UNDEFINED. ERR04 LDB .4 USER BUFFER VIOLATES SYSTEM RSS OR OTHER BOUNDARIES. ERR05 LDB .5 ILLEGAL DISC TRACK OR SECTOR RSS ADDRESS IN DISC REQUEST. ERR06 LDB .6 REFERENCE TO PROTECTED DISC TRACK RSS ERR08 LDB .8 DISC TRANSFER EXCEEDS TRACK BOUND RSS ERR09 LDB .9 LOAD-N-GO AREA OVERFLOW RSS ERR10 LDB B400 DOUBLE REQUEST ON SAME CLASS * LDA ERIO (A) = ASCII * IO *. JMP $ERAB WRITE DIAGONISTIC AND EXIT TO DISPATCHER * ERIO ASC 1,IO B400 OCT 400 SKP * PART 2: ILLEGAL REQUEST DETECTED BY * I/O DRIVER. THE REASON IS A READ OR * WRITE OPERATION IS ILLEGAL FOR THE * DEVICE OR A CONTROL REQUEST IS * MEANINGLESS FOR THE DEVICE. * AN ADDITIONAL REASON FOR TRANSFER TO THIS * SECTION IS AN "IMMEDIATE COMPLETION" (CODE 4) * RETURN FROM THE DRIVER; PROCESSED AS A * CONTROL REJECT. * * * ERROR PROCEDURE IS: * 1. IF THE REQUEST IS PROCESSED AS * BUFFERED OUTPUT, THE TEMPORARY * BLOCK IS RELEASED TO AVAILABLE * MEMORY. * * 2. THE REJECT IS IGNORED IF A SYSTEM * PROGRAM GENERATED THE REQUEST - * HOWEVER, A COMPLETION ROUTINE, * IF SPECIFIED IN THE REQUEST, IS * OPERATED. (NOTE: THIS PHILOSOPHY * IS BASED ON THE ASSUMPTION THAT * THIS CONDITION SHOULD NEVER OCCUR.) * * 3. A USER CONTROL REQUEST WHICH IS * REJECTED IS TREATED AS IF IT * WAS PERFORMED. THE PROGRAM IS * LINKED BACK INTO THE SCHEDULE LIST. * * 4. A USER READ OR WRITE REQUEST REJECT * CAUSES A DIAGNOSTIC TO BE ISSUED * AND THE PROGRAM ABORTED. SKP ILLCD CLB CPA .4 IF CODE =4 FOR IMMEDIATE RAR,SLA COMPLETION, TREAT AS CONTROL R00 STB TLOG ELSE SET TLOG TO 0. STA TEMP4 REJECT, SAVE CODE. CPA .2 SET ERROR FLAG FOR CLA CLASS COMPLETION. CMA,INA NEGATE TO AVOID STA TEMP3 REPORT AT L.54. LDB EQT1,I GET LOCATION OF LDA B,I ILLEGAL REQUEST (LINK ADDR.) STA TEMP0 SAVE NEXT REQUEST ADDRESS. INB GET CONTROL WORD LDA B,I OF REQUEST BLOCK STA EQT6,I SAVE FOR REXIT RAL CHECK FIELD SSA,RSS FOR TYPE OF REQUEST BLOCK. JMP R02 -USER OR SYSTEM- * CCE,SLA IF CLASS REQUEST JMP L.49 GO DO CLASS COMPLETION. ADB .2 BUFFERED BLOCK. LDB B,I GET TOTAL BLOCK LENGTH. STB R01+1 SET IN RELEASE CALL. LDA EQT1,I SET FWA OF BLOCK STA R01 IN RELEASE CALL. JSB $RTN RELEASE BLOCK. R01 NOP - FWA - NOP - # WORDS - JMP REXIT * R02 SLA,RSS CHECK FIELD AGAIN. JMP R03 -USER PROGRAM REQUEST- * ADB N2 GET WORD IN SYSTEM REQUEST LDA B,I CONTAINING -COMPLETION ROUTINE- STA COMPL ADDRESS OR 0 AND SAVE IT. JMP REXIT * R03 LDA TEMP4 USER REQUEST- CPA .2 CONTINUE IF CONTROL REQUEST JMP R04 REJECTED. LDA EQT1,I SET ID SEGMENT ADDRESS OF PROGRAM STA XEQT CONTAINING ERROR. ADA .8 GET POINT OF SUSPENSION ADDRESS LDB A,I GET RETURN ADDRESS STB RQRTN AND SAVE ON BASE PAGE CCE,INA SET XSUSP(SET E FOR $CVT1 STA XSUSP TO POINT TO SAVED INITIAL CALL ADDRESS LDA EQT1 SAVE CURRENT STA TEMP9 EQT ENTRY ADDRESS. LDA CONFL SAVE CURRENT STA SCONF *CONTROL FLAG* LDA TEMP4 CPA .1 D CHANGE ANY NOT READY REJECT LDA .7 CODE TO 7. JSB $CVT1 CONVERT TO ASCII AND LDB A STORE IN B REG. LDA ERIO (A) = ASCII * IO * JSB $ERMG PRINT DIAGNOSTIC CLA SET XEQT STA XEQT TO ZERO TO FOURCE RELOAD LDA SCONF RESTORE STA CONFL *CONTROL FLAG* LDA TEMP9 RESTORE UNIT JSB $ETEQ EQT ENTRY ADDRESSES. JMP REXIT * R04 LDA EQT1,I SET PROGRAM ID SEGMENT STA R05+2 ADDR. IN LIST CALL. ADA .9 (A) = ADDR. OF XA IN ID SEGMENT. LDB EQT5,I SET DEVICE STATUS STB A,I WORD IN XA. LDB TLOG STORE INA TRANSMISSION LOG STB A,I IN XB. R05 JSB $LIST CALL SCHEDULER OCT 101 TO LINK PROGRAM BACK NOP INTO SCHEDULE LIST. * REXIT LDA TEMP0 SET NEXT LIST STA EQT1,I ENTRY ADDRESS. LDA EQT6,I GET CONWORD CLB CLEAR ERROR STB TEMP3 FLAG. CPB CONFL IF $XSIO CALL SSA,RSS THEN SKIP, JMP L.501 ELSE DO NEXT REQUEST. JMP $XSIO,I $XSIO ERROR RETURN. SKP * ********************************************************************** * * I/O DEVICE ERROR SECTION * * THIS SECTION IS ENTERED WHEN A DEVICE IS UNAVAILABLE FOR * INITIATION OF AN OPERATION OR WHEN AN ERROR IS DETECTED AT THE * END OF AN OPERATION. A DIAGNOSTIC MESSAGE IS PRINTED ON THE * SYSTEM CONSOLE IN THE FOLLOWING FORMAT: * * I/O MN LXX EYY SZZ * * WHERE: XX = THE LOGICAL UNIT NUMBER OF THE DEVICE * YY = THE EQT NUMBER OF THE DEVICE * ZZ = THE SUBCHANNEL NUMBER OF THE DEVICE * MN = A MNEMONIC DESCRIBING ONE OF THE FOLLOWING CONDITIONS: * 1. NR - DEVICE IS NOT READY * 2. ET - END-OF-TAPE OR TAPE SUPPLY LOW ON THE DEVICE * 3. PE - TRANSMISSYDION PARITY ERROR TO/FROM THE DEVICE * 4. TO - THE DEVICE TIMED OUT * -- NEW CODES MAY BE ADDED HERE -- * * GIVEN A BAD I/O REQUEST, IOERR WILL DOWN ALL LU'S ASSOCIATED WITH * THE DEVICE(DEFINED BY THE EQT AND SUBCHANNEL). ALL I/O CHANNELS * ASSOCIATED WITH THE EQT ARE CLEARED. ALL I/O REQUESTS ASSOCIATED * WITH THE DEVICE ARE UNSTACKED FROM THE EQT'S I/O REQUEST QUEUE AND * RELINKED IN THE LOWEST LU'S(MAJOR LU) I-O REQUEST QUEUE(DRT ENTRY * WORD 2)BY THE SUBROUTINE UNLNK. DRT ENTRY WORD 2 OF OTHER DOWNED * LU'S ARE SET TO THE LU NUMBER OF THE MAJOR LU. THE LU DOWN BIT(BIT * 15 OF DRT ENTRY WORD 2)FOR EACH DOWNED LU IS SET. THE EQT ENTRY IS * NOT SET DOWN. I/O ERROR MESSAGES ARE ISSUED FOR ALL LU'S SET DOWN. * * ON ENTRY, CONTAINS A NUMBER CORRESPONDING TO THE ASSOCIATED * MNEMONIC AND EQT1 CONTAINS THE ADDRESS OF WORD ONE OF THE ASSOCIATED * DEVICE'S EQT ENTRY. * * THE FOLLOWING TEMPORARY LOCATIONS ARE USED FOR TEMPORARY STORAGE BY * IOERR: * :=SUBCHANNEL-EQT WORD FOR THE BAD I-O REQUEST GIVING THE * SUBCHANNEL IN BITS 11-15 AND THE EQT IN BITS 0-5(USED BY * LUERR). * :=WORD 2 OF THE BAD I-O REQUEST. * ********************************************************************** * SKP NOTRD LDB EQT1,I LU NOT READY ENTRY. INB GET BAD I-O REQUEST CONWD STB IOE11 AND SAVE FOR LATER. CLA,INA SET A=1 FOR NOT READY. * IOERR LDB EQT1 REMOVE ALL ENTRIES IN THE QUEUE STB HEAD RELATED TO THE BAD I-O REQUEST. ADA ERTBL INDEX TO ERROR CODE TABLE. LDA A,I GET MNEMONIC AND SET STA IOMSG+2 IN DIAGNOSTIC MESSAGE. * LDA BLL SET UP STA IOMSG+3 "L" AND LDA BLS "S" IN THE STA IOMSG+7 DIAGNOSTIC MESSAGE. * JSB CPEQT GET EQT NUMBER(SETS E=1). STA TEMP8 SAVE EQT NUMBER. JSB $CVT1 CONVERT TO ASCII STA IOMSG+6 AND SAVE(E MUST = 1). * LDA EQT4,I GET LAST USED SUBCHANNEL ALF,RAL FORM EQT4 AND POSITION AND B174K TO HIGH 5 BITS. IOR TEMP8 ADD IN EQT NUMBER STA TEMP8 AND SAVE AS SUBCHANNEL-EQT WORD. * ALF,RAL GET SUBCHANNEL AND B37 NUMBER. JSB $CVT1 CONVERT TO ASCII(ON ENTRY,E MUST=1) STA IOMSG+8 AND SAVE. * JSB LUERR DOWN THE LOGICAL UNITS(ENTRY A#0).WAIT UNTIL LDA EQT5,I AFTER LUERR CALL TO SET AVAIL FIELD TO 0 SO ALR,RAR WE WON'T ENTER DRIVER(VIA $XSIO)TO PRINT STA EQT5,I ERROR MESSAGE ON SAME EQT WE'RE DOWNING. * SEZ CHECK IF WE TRIED TO JMP IOER9 DOWN LU 1. IGNORE ATTEMPT. * LDA EQT1 LDB A,I CHECK IF WE MUST SZB INITIATE AN JSB $DLAY I/O REQUEST OF THIS EQT. * LDB IOE11,I GET SAVED WORD 2(CONWORD) LDA CONFL FOR THE BAD I/O REQUEST. SZA IF COMPLETION SECTION IS IN JMP IOCX CONTROL, THEN EXIT IOC. * RBL,SLB IF REQUEST SECTION IN CONTROL, SSB CHECK IF USER OR SYSTEM I/O REQUEST. JMP IOCX IF USER, GO TO EXECUTION SECTION. JMP XSIOE,I IF SYSTEM, RETURN TO SYSTEM CALLER. * IOER9 LDA CONFL SAVE CONTROL STA SCONF FLAG. CLA,INA SET JSB $CVT1 ASC11 1 STA IOMSG+4 INTO MESSAGE. LDA IOMSA JSB $SYMG ISSUE MESSAGE. LDA SCONF RESTORE FLAG. STA CONFL JMP L.60 * HEAD NOP IOE11 NOP * * IOMSA DEF *+1 DEC -18 IOMSG ASC 9,I/O MN LXX EYY SZZ * * * * I/O DEVICE ERROR MNEMONIC TABLE--ORDERED BY * ERROR CODE DESCRIBING CONDITION. * ERTBL DEF * ASC 1,NR - NOT READY - ASC 1,ET - END OF TAPE (INFORMATION) - ASC 1,PE Q - TRANSMISSION PARITY ERROR - ASC 1,TO - TIMED-OUT - * * NEW CODES MAY BE ADDED AT THIS POINT * SBMSK OCT 20074 BLL ASC 1, L * SKP * ***************************************************************** * * SUBROUTINE LUERR * * THIS SUBROUTINE IS USED TO DOWN ALL LU'S CORRESPONDING TO A * SPECIFIC EQT AND SUBCHANNEL. IT WILL OPTIONALLY PRINT AN * ERROR MESSAGE FOR EACH DOWNED LU. * * CALLING SEQUENCE: * :=0 DO NOT PRINT I/O ERROR MESSAGES * :#0 PRINT I/O ERROR MESSAGES(ASSUMES ASCII EQT AND * SUBCHANNEL ALREADY SET) * := POINTER TO I-O REQUEST LIST TO SCAN. * :=SUBCHANNEL-EQT WORD FROM THE BAD I-O REQUEST. * JSB LUERR * * RETURN: * :=1 TRIED TO DOWN LU 1 * :=0 DID NOT TRY TO DOWN LU 1 * NO REGISTERS ARE SAVED. * SUBROUTINE UNLNK USES TEMP0 AND OTHERS. * USES THE FOLLOWING REGISTERS: * :=FLAG AS TO WHETHER TO PRINT(#0) OR NOT PRINT(=0) * I/O ERROR MESSAGES. * :=USED TO STORE THE MAJOR LU. * :=COUNTER FOR SCAN THROUGH DRT. * :=USED TO SAVE POINTER INTO DRT. * :=USED TO SAVE EQT1. * :=USED TO STORE LU TEMPORARILY. * ****************************************************************** * LUERR NOP STA TMP1 * LDA CONFL SAVE CURRENT STA SCONF CONTROL FLAG. * CLA SET MAJOR LU STA TMP2 TO ZERO. * LDA LUMAX SET CMA,INA UP STA TMP3 COUNTER. LDB DRT GET FIRST DRT ENTRY. * SKP D.00 LDA B,I GET DRT WORD 1 STB TMP4 SAVE POINTER IN DRT. AND C3700 COMPARE DRT WORD 1 TO THE SUBCHANNEL- CPA TEMP8 EQT WORD(LESS THE LOCK FLAG). RSS IF EQUAL,FOUND A LU,SO GO PROCESS. JMP D.04 OTHERWIZE,GO CONTINUE SCAN OF DRT. * LDA LUMAX FOUND A LU MATCH SO PROCESS IT. CCE,INA COMPUTE THE(SET E=1 FOR POSSIBLE LU=1) ADA TMP3 LU NUMBER. STA TMP8 SAVE LU NUMBER FOR LATER. CPA .1 CHECK TO SEE IF SYSTEM CONSOLE. IF SO, JMP D.06 DO NOT SET THE DEVICE DOWN. ADB LUMAX POSITION POINTER TO DRT WORD 2. LDA TMP2 CHECK TO SEE IF A MAJOR SZA LU HAS BEEN FOUND JMP D.02 IF SO,THEN STORE THE MAJOR LU # IN WORD * 2,SET THIS LU BUZY,ISSUE MESSAGE. * STB A SAVE DRT WORD 2 ADDRESS. LDB EQT1 SAVE EQT1 ADDRESS STB TMP6 FOR RESTORATION. LDB HEAD GO UNLINK ANY I-O REQUESTS FROM JSB $UNLK THE GIVEN I-O QUEUE. DEF TEMP8 LDA TMP8 SAVE THIS LU STA TMP2 AS MAJOR LU. LDB TMP4 RESTORE POINTER TO DRT WORD 2. ADB LUMAX LDA B,I D.02 CCE RAL,ERA SET THE(E MUST=1) STA B,I LU DOWN. LDB TMP1 CHECK IF WE ARE TO PRINT ERROR CCE,SZB,RSS MESSAGES(SET E=1 FOR $CVT1). JMP D.025 NO, SO SKIP. LDA TMP8 JSB $CVT1 CONVERT LU TO STA IOMSG+4 ASCII AND SAVE. LDA IOMSA GET LU I/O ERROR MESSAGE JSB $SYMG AND ISSUE TO USER. LDA TMP6 RESTORE JSB $ETEQ EQT POINTERS. D.025 LDB TMP4 * D.04 INB INCREMENT POINTER TO NEXT DRT ENTRY. ISZ TMP3 JMP D.00 GO SCAN NEXT ENTRY. * JSB $CKLO CHECK BUFFER LIMITS AND SCHED WAITERS. CLE D.06 LDA SCONF RESTORE CONTROL STA CONFL FLAG. JMP LUERR,I IF NO MORE LU ENTRIES, RETURN. SKP * *********************************************************************** * * SUBROUTINE $UNLK * * THIS SUBROUTINE IS USED TO UNLINK I/O REQUESTS FROM THE EQT I/O LB* REQUEST QUEUE POINTED TO BY EQT1. IT MAY BE USED IN ONE OF TWO * MODES: * MODE I. IF ON ENTRY THE A REGISTER EQUALS ZERO, NORMAL USER * (UNBUFFERED)I-O REQUESTS ARE UNLINKED WITH THE CALLING * PROGRAMS SUSPENDED IN THE GENERAL WAIT LIST. IT IS * ASSUMED THAT THE EQT WILL BE SET DOWN BY THE CALLER. * MODE II. IF ON ENTRY THE A REGISTER IS NONZERO, THEN ONLY I/O * REQUESTS MATCHING THE SUBCHANNEL GIVEN IN SUEQT ARE * UNLINKED. UNBUFFERED I/O REQUESTS ON THIS SUBCHANNEL ARE * HANDLED AS IN MODE I. BUFFERED, CLASS AND SYSTEM * I/O REQUESTS ARE STACKED UPON AN LU I/O REQUEST QUEUE AFTER * THE I/O REQUEST POINTED TO BY THE A REGISTER IN THE ORDER * THAT THEY APPEARED IN THE EQT QUEUE. * * CALLING SEQUENCE: * :=THE SUBCHANNEL-EQT WORD DEFINING THE DEVICE(MODE II * ONLY, UNUSED WITH MODE I). * :=EQT1(HEAD OF THE I-O REQUEST QUEUE)OF THE DEVICE'S * EQT(USED WITH MODE I AND II). * :=0 INDICATES MODE I PROCESSING. * :#0 INDICATES MODE II PROCESSING. POSITION IN LU I/O REQUEST * QUEUE AFTER WHICH ALL UNLINKED I-O REQUESTS ARE * TO BE RELINKED. * JSB $UNLK * DEF SUEQT * * RETURN: * NO REGISTERS ARE SAVED. * USES UNLK3,UNLK8,TEMPX,TEMP0 * ************************************************************************ SKP $UNLK NOP STA UNLK8 SET UP POINTER TO THIS I/O REQUEST QUEUE. LDA $UNLK,I GET LDA A,I AND B174K SUBCHANNEL CLE,ELA AND SHIFT RAL,RAL UPPER BIT ALF TO BIT 13 SEZ ADD IN LOWER 4 BITS ADA B20K AT BITS 2-5 STA TEMP0 AND SAVE. RSS * UNLK0 LDB TEMPX,I GET NEXT ENTRY. UNLK1 STB TEMPX  SAVE POINTER TO PREVIOUS REQUEST. UNLK2 LDB TEMPX,I GET POINTER TO THIS REQUEST. RBL,CLE,ERB STRIP OFF POSSIBLE SIGN BIT. SZB,RSS IF END, JMP UNLK6 THEN GO EXIT. * STB UNLK3 SAVE POINTER TO THIS REQUEST. INB STEP TO CONTROL WORD OF THIS REQUEST. LDA UNLK8 CHECK IF MODE I OR II PROCESSING. SZA,RSS JMP UNL25 MODE I SO SKIP SUBCHANNEL CHECK. LDA B,I GET CONTROL WORD OF THIS REQUEST. AND SBMSK PICK OFF SUBCHANNEL INFORMATION AND CPA TEMP0 COMPARE TO THE SUBCHANNEL INFO OF RSS THE BAD I/O REQUEST. IF NOT EQUAL, JMP UNLK0 GO CHECK THE NEXT REQUEST. * UNL25 LDA B,I GET CONTROL WORD OF THIS I/O RAL REQUEST AND ROTATE IT. CMA,SSA,SLA,RSS IF NOT STANDARD USER REQUEST, JMP UNLK4 GO PROCESS AS OTHER TYPES. * LDA .4 STANDARD USER, SO SUSPEND PROGRAM STA B,I IN GENERAL WAIT LIST. ADB .8 SET TEMP WORD #1 IN ID-SEG.TO 4. LDA B,I STEP TO SAVE A REG., GET SAVED ADB N1 POINT OF SUSPENSION, AND STORE STA B,I IT IN XSUSP FOR THIS PROGAM. LDA UNLK3,I UNLINK THIS STA TEMPX,I I/O REQUEST. JSB $LIST LINK THIS PROGRAM INTO THE OCT 103 GENERAL WAIT LIST. UNLK3 NOP JMP UNLK2 GO TRY NEXT ENTRY. * UNLK4 LDA UNLK8 CHECK IF MODE I OR II. SZA,RSS IF MODE I, DO NOT UNLINK JMP UNLK0 THIS REQUEST. GO TRY NEXT ONE. LDB UNLK8,I IF MODE II, CLEAR RBL,CLE,ERB POSSIBLE SIGN BIT LDA UNLK3,I AND LINK THIS I-O STA TEMPX,I STB UNLK3,I REQUEST TO THE LDB UNLK3 END OF THE DOWN STB UNLK8,I I/O REQUEST QUEUE. STB UNLK8 SET UNLK8 TO POINT TO THE LAST REQUEST. JMP UNLK2 GO TRY NEXT ENTRY. * UNLK6 ISZ $UNLK JMP $UNLK,I INITIATE THE I/O REQUEST. * UNLK8 NOP TEMPX NOP * TMP1 CLE CLE FOR INIT CODE TMP2 DEF TEMP2 DEF FOR INIT CODE TMP3 CXA CXA FOR INIT CODE TMP4 NOP TMP5 NOP TMP6 NOP * TMP8 NOP SKP * ****************************************************************** * * SUBROUTINE $DLAY: * * $DLAY IS USED TO SET UP A SHORT TIMEOUT(10 MSEC)WHICH, WHEN IT * OCCURS, SIGNALS THAT AN I/O OPERATION MUST BE INITIATED ON THE * TIMED-OUT EQT(SEE $DEVT). * * CALLING SEQUENCE: * LDA * JSB $DLAY * * RETURN: * ALL REGISTERS ARE MODIFIED. * ***************************************************************** * $DLAY NOP CCE,INA SET THE SIGN BIT LDB A,I ON TO INDICATE RBL,ERB WE MUST INITIATE AN STB A,I OPERATION. ADA .3 CCE LDB A,I SET THE RBL,ERB EQT STB A,I BUZY. ADA .10 LDB N1 SET A STB A,I TIMEOUT JMP $DLAY,I OF 10 MSEC. HED < IO-DEVICE TIME-OUT PROCESSOR > * * * AFTER A DEVICE IS DISCOVERED TO HAVE TIMED-OUT * BY RTIME'S $CLCK PROCESSOR,THIS * ROUTINE IS ENTERED. ITS PURPOSE IS TO * CLEAR THE PENDING IO TRANSFER AND ENTER * IOCOM IN SUCH A WAY AS TO SIMULATE AN IO * COMPLETION RETURN FROM THE DRIVER ITSELF. * * IF THE TIMEOUT WAS DUE TO THE NEED TO INITIATE AN * I/O OPERATION(BIT 15 EQT2 SET)THEN THIS BIT * IS CLEARED AND IOCOM IS ENTERED(AT L.60) TO * INITIATE THE I/O OPERATION. * * * ENTER FROM SCHEDULER MODULE: * * (A)
    * * $DEVT ADA N14 POINT TO EQT JSB $ETEQ SET EQT ADDRESSES LDA EQT1,I GET THE CLEAR BIT SSA IF CLEAR TIME OUT JMP CLTIM JUST CLEAR * LDA EQT2,I CHECK IF THE TIMEOUT SSA IS FOR INITIATING_NLH I/O JMP INTDL ON THIS EQT. * LDA EQT4,I IOR B4K SET TIME-OUT BIT STA EQT4,I STA B SAVE WORD IN B FOR TEST AND B77 SELECT CODE TO A BLF,SLB IF DRIVER TO HANDLE TIME JMP CIC.6 OUT GO CALL THE DRIVER. * CLTIM JSB CLCHS CLEAR ALL CHANNELS LDA .4 SERVICED BY THIS ENTRY CLB SIMULATE COMPLETION JMP IOCOM RETURN FROM DRIVER * INTDL RAL,CLE,ERA CLEAR INITIATION STA EQT2,I BIT. ISZ CONFL SET CONTROL FLAG TO NONZERO. JMP L.60 GO INITIATE. * N14 DEC -14 HED < I/O CONTROL MODULE - DATA SECTION > * ***************************************************************** * * CONSTANT AND VARIABLE STORAGE AREA * ******************************************************************* * A EQU 0 DEFINE SYMBOLIC REFERENCES B EQU 1 FOR A AND B REGISTERS. eN.3 DEC 3 .5 DEC 5 .8 DEC 8 .9 DEC 9 .10 DEC 10 N1 DEC -1 * B77 OCT 77 B377 OCT 377 B140K OCT 140000 B40K OCT 40000 B4K OCT 4000 MSIGN OCT 100000 * TEMP2 LIB 6 GETS -1 IF MX MACHINE, ELSE 0 TEMP3 EQU * LABLE FOR TEMP3 SZB,RSS IF MX SKIP TEMP4 JMP TEMP9 ELSE JUST COMPLETE THE MESSAGE * TEMP5 LDB TMP3 'CAX' ENABLE THE SAVE X,Y CODE TEMP6 STB TLOG,I 'DMX1,I' TEMP7 LDB SCONF 'DLD' TEMP8 STB SYSCL,I 'DMX2,I' TEMP9 LDB IODNS PLANT A HLT TEMP0 STB 2 IN 2 TEMPL INB AND TEMPW STB 3 3 * CONFL JMP $SYMG+1 SCONF DLD MX1 TLOG EQU *-1 COMPL NOP DO NOT USE FOR ANY INIT CODE(MUST=0 BEGIN). DMACF NOP FLAGS USED IN ALLOCATING HED ** I/O CONTROL - OPERATOR COMMUNICATION ** * ***************************************************************** * * I/O MODULE // OPERATOR COMMUNICATION * * * THE SYSTEM USES COMMANDS FROM THE * OPERATOR TO CONTROL THE OVERALL STATUS OF * I/O EQUIPMENT, CHANGE ASSIGNMENT OF LOGICAL * UNITS AND TO INTERROGATE THE STATUS AND * PROPERITES OF THE DEVICES IN THE EQUIPMENT * TABLE. * * OPERATOR STATEMENTS ARE PROCESSED ONLY * FROM THE DESIGNATED SYSTEM TELETYPE. THE * ROUTINE IN THE SCHEDULING MODULE * IS RESPONSIBLE FOR STATEMENT DECODE AND * PARAMETER SEPARATION AND CONVERSION. THE * ASSOCIATED STATEMENT PROCESSOR IS CALLED * TO PERFORM THE REQUESTED ACTION. THE * STATEMENT PROCESSING IS ALL TABLE-DRIVEN * AS DESCRIBED IN THE LISTING AND DOCUMENTATION * OF THE SCHEDULING MODULE. * * * TWO OF THE I-O CONTROL STATEMENT PROCESSORS * MUST BE INCLUDED IN THE BASIC SYSTEM PACKAGE * AND ARE INCLUDED IN RTIOC. * THESE ARE THE 'UP' AND 'DOWN' STATEMENTS * CONCERNING THE OVERALL STATUS OF I/O DEVICES. * THE OTHER THREE STATEMENT PROCESSORS ( LOGICAL * UNIT ASSIGNMENT, TIME-OUT, AND EQT STATUS) * ARE OPTIONAL AND ARE CONTAINED IN THE USER PROGRAM * $$$CMD WHICH IS SCHEDULED BY SCHED. THE#SE COMMANDS * MAY BE REMOVED BY DELETING $$CMD. * ****************************************************************** * SKP * **************************************************************** * * 'DOWN' STATEMENT (REQUIRED) * * FORMAT: DN,N1 OR DN,,N2 * WHERE N1 IS THE EQT # OF THE I/O SLOT TO BE SET DOWN * OR N2 IS THE LU # OF THE I/O DEVICE TO BE SET DOWN. * * ACTION: WHEN SETTING THE EQT DOWN, THE AVAILABILITY FIELD OF THE * REFERENCED SLOT IS SET = 1(SLOT DISABLED). * WHEN SETTING THE LU DOWN, BIT 15 OF DRT WORD 2 IS SET AND * ANY I/O FOR THIS DEVICE IS REMOVED FROM THE EQT I/O * QUEUE AND ADDED TO THE LU I/O QUEUE HEADED AT DRT * WORD 2. * * CALL (FROM MESSAGE PROCESSOR): * * := N1 (EQT #) IN BINARY OR 0 * :=-1 OR N2 (LU #) IN BINARY * JMP $IODN * * RETURN IS TO <$XEQ> IF ACTION TAKEN OR TO -MESS.I- TO PRINT * * INPUT ERROR * IF N1 OR N2 ARE ILLEGAL OR IF BOTH ARE PRESENT. * **************************************************************** * $IODN SZA,RSS CHECK IF DOWN LU OR JMP DNLU DOWN EQT COMMAND. DNEQT INB,SZB DOWN EQT COMMAND. IF BOTH LU AND EQT ARE JMP $INER GIVEN, ISSUE INPUT ERROR MESSAGE. * JSB IODNS CHECK LEGALITY OF EQT & SET EQT ADDRESSES. LDA EQT1 IF ATTEMPT TO DOWN EQT OF SYSTEM CPA SYSTY CONSOLE, ISSUE INPUT ERROR MESSAGE. JMP $INER LDA EQT5,I SET AVAILABITY FIELD ALR,RAR TO 1 IOR B40K TO SET STA EQT5,I DOWN. * JSB XUPIO SET ANY DOWNED LU'S UP. * LDB EQT1,I GO PUT ALL WAITERS(UNBUFFERED RBL,CLE,ERB I/O)INTO THE GENERAL WAIT SZB,RSS LDB EQT1 CLA LIST. SKIP FIRST REQUEST. JSB $UNLK DEF A (DUMMY DEF FOR THIS MODE). JMP $XEQ RETURN. * DNLU STB A SAVE| LU NUMBER. CMB,CLE,INB,SZB,RSS ISSUE AN ERROR MESAGE JMP $INER IF THE LU IS LESS THEN ADB LUMAX 1 OR IS GREATER THEN CCB,SEZ,RSS LUMAX. JMP $INER * ADB A USE LU NUMBER ADB DRT TO POSITION TO LDA B,I WORD 1 OF THE AND C3700 DRT ENTRY. STA TEMP8 SET UP SUBCHANNEL-EQT WORD. AND B77 INPUT SZA,RSS ERROR IF JMP $INER DOWNING BIT BUCKET DEVICE. * STB TEMP9 SAVE ADDRESS OF DRT WORD 1. JSB $CVEQ SET EQT ENTRY ADD(WILL MASK SUBCH.). * LDB EQT5,I CHECK IF RBL,SLB EQT IS JMP DNLU5 UP OR IS SSB DOWN. JMP DNLU9 EQT IS DOWN. * DNLU5 LDB EQT1,I SKIP FIRST EQT I-O REQUEST QUEUE SZB,RSS ENTRY UNLESS THE QUEUE IS EMPTY. LDB EQT1 STB HEAD SAVE THIS POINTER. CLA SET FOR NO ERROR MESSAGES. JSB LUERR GO DOWN ALL LU'S POINTING TO DEVICE. SEZ ERROR IF ATTEMPT JMP $INER TO DOWN LU 1. JMP $XEQ NO, RETURN TO SYSTEM. * DNLU9 LDB TEMP9 IF EQT IS DOWN, THEN ADB LUMAX GET DRT WORD 2 LDA B,I AND SET THE LU IOR MSIGN DOWN. STA B,I JMP $XEQ RETURN. * C3700 OCT 174077 * * *IODNS* SUBROUTINE TO CHECK LEGALITY OF AN * EQT # (IN A-REGISTER) AND TO CALL * A SUBROUTINE TO CONSTRUCT THE EQT * ENTRY ADDRESSES. * IODNS HLT 2 HLT FOR INIT CODE STA B ERROR CMB,INB,SZB IF EQT NO. IS ZERO SSA OR NEGATIVE CCB,RSS SKIP ADB EQT# CHECK FOR LIMITS SSB IF ANY ERROR, JMP $INER GO TO $MESS ERROR EXIT. JSB $CVEQ SET EQT ENTRY ADDRESSES. STB CONFL SET ALL THE FLAGS TO ZERO. JMP IODNS,I SKP * **********************************************6=****************** * * ' UP ' STATEMENT (REQUIRED) * * FORMAT: UP,NN WHERE NN IS THE EQT # * OF THE I/O DEVICE * * ACTION: THE AVAILABILITY FIELD OF THE REFERENCED SLOT(EQT ENTRY * #)IS SET = 0 (UNIT AVAILABLE). THE AVAILABILITY FIELD OF * ANY DEVICES(BIT 15 DRT WORD 2) REFERENCING THIS EQT ARE * SET = 0 AND THE LU'S' I/O QUEUES ARE ADDED TO THE EQT'S * I/O QUEUE. IF THE EQT WAS AVAILABLE OR DOWN, THEN THE * *IOCOM* SECTION(AT *L.68*)IS ENTERED TO INITIATE ANY * WAITING I/O REQUESTS. * * CALL (FROM MESSAGE PROCESSOR): * * := NN (EQT #) IN BINARY * JMP $IOUP * * RETURN IS MADE TO *IOCOM* OR TO *$XEQ* IF ANY ACTION * IS TAKEN. IF NN IS ILLEGAL, THEN RETURN IS MADE TO * *MESS,I* TO PRINT 'INPUT ERROR'. * ****************************************************************** * $IOUP JSB IODNS CHECK 'NN' AND SET EQT ADDRESSES. $UPIO EQU * JSB CPEQT GET EQT # STA TMP1 FROM EQT1. LDA .4 RESCHEDULE ALL WAITING PGMS. JSB $SCD3 (RETURN B=0). JSB CLDMA HELP POWER FAIL OUT WITH DMA. * JSB XUPIO SET ANY ASSOCIATED LU'S UP. * LDA EQT5,I GET AVAILABILITY ISZ CONFL SET THE CONTROL FLAG SSA,RSS IF DOWN OR AVAIL. JMP L.60 GO TRY TO OPERATE JMP $XEQ ELSE JUST FORGIT IT. SKP * ************************************************************************* * * SUBROUTINE XUPIO: * * XUPIO IS USED TO UP ANY LU'S ASSOCIATED WITH THIS EQT. * * CALLING SEQUENCE: * :=THE ADDRESS OF THE FIRST WORD OF THIS EQT. * :=THE EQT NUMBER. * JSB XUPIO * * RETURN: * ALL REGISTERS ARE DISTROYED. * USES TMP2,TMP4,TMP6. * CALLS SUBROUTINE XXUP. * ************************************************************************* * XUPIR^O NOP LDA LUMAX SET CMA,INA UP STA TMP2 COUNTER. LDB DRT POSITION TO FIRST STB TMP6 DRT ENTRY. * UPIO1 LDA TMP6,I CHECK IF THIS AND B77 DRT ENTRY POINTS CPA TMP1 TO THE EQT. JMP UPIO5 YES. UPIO3 ISZ TMP6 NO. SO ISZ TMP2 GO CHECK JMP UPIO1 NEXT DRT ENTRY. JMP XUPIO,I RETURN. * UPIO5 LDB TMP6 POSITION TO DRT ADB LUMAX WORD2. STB TMP4 GO PLACE LDB B,I ENTRIES LDA EQT1 INTO EQT JSB $XXUP I/O QUEUE(RETURN B=0). STB TMP4,I SET THE LU 'UP'. JMP UPIO3 GO CHECK NEXT DRT ENTRY. SKP **************************************************************** * * SUBROUTINE $XXUP: * * $XXUP TAKES AN I/O QUEUE AND(USING LINK)POSITIONS THE I/O * REQUESTS IN THE CURRENT EQT QUEUE ACCORDING TO THEIR PRIORITY. * IT RETURNS A FLAG IF AN I/O OPERATION SHOULD BE INITIATED. * * CALLING SEQUENCE: * := EQT1 OF OLD DEVICE. * :=ADDRESS OF FIRST STACKED I/O REQUESTS TO BE LINKED ON * THE CURRENT EQT(SIGN BIT WILL BE STRIPPED). * JSB $XXUP * * RETURN: * :=0 * :#0 A NEW I/O OPERATION IS AT THE HEAD OF THE CURRENT * EQT I/O QUEUE SO IT MUST BE INITIATED. = * THE ADDRESS OF THE FIRST WORD OF THE EQT. * USES TEMP1,TEMP2,UNLK8,TEMP4,XXUP7 * ***************************************************************** * $XXUP NOP STA TEMP4 SAVE OLD DEVICE EQT1. CLA CLEAR STA XXUP7 INITIATION FLAG. RBL,CLE,ERB STRIP OFF POSSIBLE SIGN BIT. XXUP9 SZB,RSS RETURN WHEN END OF I/O JMP XXUP2 REQUEST QUEUE IS FOUND. * STB TEMP1 SET UP POINTER FOR LINK. ADB B176K IF POINTER IS < 2000, SSB THEN NO I-O STACKED ON JMP XXUP2 THIS LU SO EXIT B=0. * LDB TEMP1 OTHERWIZE, GET I-O REQUEST ADDRESS. LDA B,I UNLINK THIS STA UNLK8 I/O REQUEST. INB LDA B,I GET INB PRIORITY RAL OF THE SSA I-O REQUEST JMP XXUP8 SLA,RSS BUFFERED AND CLASS I-O REQUESTS. JMP XXUP5 NORMAL USER REQUEST. LDA TEMP4 SYSTEM REQUEST. ADA .4 LDA A,I AND B36K CHECK IF THE OLD DEVICE CPA B14K IS A DISK OR NOT. JMP XXUP1 CLA IF OLD DEVICE IS NOT A DISK, STA TEMPL SET TEMPL=0 AND USE JMP XXUP3 ZERO PRIORITY. XXUP1 STA TEMPL IF OLD DEVICE IS A DISK, THEN INB,RSS SET TEMPL#0 AND USE PRIORITY. XXUP5 ADB .4 XXUP8 LDA B,I XXUP3 STA TEMP2 SAVE PRIORITY FOR LINK. JSB LINK LINK THIS REQUEST ONTO THE EQT. LDA EQT1 SEZ,RSS IF ONLY REQUEST ON THE EQT, THEN STA XXUP7 STORE INTO THE INITIATION FLAG. LDB UNLK8 LOOP FOR NEXT JMP XXUP9 I/O REQUEST. * XXUP2 CLB SET B=0. LDA XXUP7 GET INITIATION FLAG JMP $XXUP,I AND RETURN. * XXUP7 NOP B176K OCT 176000 HED < I/O CONTROL MODULE - SUBROUTINE SECTION > * * SUBROUTINE: < $SYMG > (SYSTEM MESSAGE) * * PURPOSE: THIS ROUTINE PROVIDES FOR THE * OUTPUT OF SYSTEM MESSAGES AND * ERROR DIAGNOSTICS ON THE SYSTEM * TELETYPEWRITER. THE ROUTINE * MAINTAINS A 'ROTATING' BUFFER * AREA CONSISTING OF 5 10-WORD * BLOCKS - I.E., THE MAXIMUM * LENGTH OF A MESSAGE IS 18 * CHARACTERS (9-WORDS) PLUS 1 * WORD PRECEDING THE MESSAGE * WHICH CONTAINS THE CHARACTER * COUNT. * * CALL: (A) = ADDRESS OF FIRST WORD OF * MESSAGE BLOCK - THIS WORD * CONTAINS THE CHARACTER * LENGTH OF THE MESSAGE AS * A NEGATIVE VALUE. * * (P) JSB $SYMG * (P+1) -RETURN- * * ON RETURN: * (A) = 0 - MESSAGE ACCEPTED AND * MOVED TO BUFFER. * (A) NOT = 0 - BUFFER FILLED, * MESSAGE REJECTED * (E) = 0 * * $SYMG NOP JMP SBUF CHANGED TO CLE ON FIRST ENTRY * LDB SY# IF BUFFER CPB .5 IS FILLED, JMP $SYMG,I REJECT EXIT. * LDB SYC SET CURRENT STB SYT1 ENTRY ADDRESS FOR MOVE JSB .MVW MOVE DEF .10 THE NOP WORDS. * ISZ SY# INCREMENT COUNT ENTRY. LDB SYC (B) = CURRENT ENTRY ADDRESS. LDA SYT1 ADA .10 (A) = NEXT ENTRY ADDRESS. CPA SBL IF NEXT EXCEEDS BUFFER, LDA SBF RESET TO FWA BUFFER STA SYC AND SAVE. * LDA SY# IF ENTRY. CPA .1 COUNT = 1, JSB SYSCL INITIATE OUTPUT. * CLA,CLE (A) = 0 FOR EXIT WITH JMP $SYMG,I MESSAGE ACCEPTED. * * CALL <$XSIO> TO INITIATE OUTPUT * SYSCL DEF MX2 ADDRESS FOR INIT CODE LDA B,I GET THE MESSAGE LENGTH STA SYS7 SET IN THE CALL INB STEP TO BUFFER ADDRESS STB SYS6 SET IN THE CALL JSB $XSIO OCT 1 - LOGICAL UNIT 1 - SYS TTY DEF SYS8 - COMPLETION ROUTINE ADDRESS NOP OCT 2 - ASCII WRITE - SYS6 NOP MESSAGE ADDRESS SYS7 NOP MESSAGE LENGTH JMP SYSCL,I * * COMPLETION ROUTINE FROM I/O CALL * SYS8 CCA SUBTRACT 1 FROM ADA SY# ENTRY COUNT FOR STA SY# MESSAGE JUST OUTPUT. SZA,RSS IF NO MORE IN BUFFER, JMP $XEQ EXIT. * LDB SYS6 SET ADB .9 NEXT ENTRY CPB SBL ADDRESS LDB SBF JSB SYSCL INITIATE OUTPUT JMP $XEQ -EXIT. * SY# NOP SYT1 NOP SYC DEF SBUF SBF DEF SBUF SKP * SUBROUTINE: <$CVEQ> * * PURPOSE: THIS ROUTINE CONVERTS AN EQT * ENTRY # TO AN EQT DISPLACEMENT * AND CALLS <$ETEQ> TO SET THE * ENTRY ADDRESSES. * * CALLING SEQUENCE: * * (A) = EQT ENTRY # IN LOWER 6 BITS. * * (P) JSB $CVEQ * (P+1) -RETURN- REGISTERS MEANINGLESS * * $CVEQ NOP AND B77 MASK TO LOW BITS ADA N1 SUBTRACT 1 AND MPY .15 MULTIPLY BY 15 ADA EQTA ABSOLUTE ADDRESS. * JSB $ETEQ SET ALL 15 ADDRESSES. * JMP $CVEQ,I -RETURN- * * SUBROUTINE: * * PURPOSE: THIS ROUTINE COMPUTES THE ENTRY # * OF THE ENTRY DESCRIBED BY -EQT1-. * * CALLING SEQUENCE: (P) JSB CPEQT * (P+1) - RETURN - * ON RETURN, (A) = EQT # * (E) = 1 * * CPEQT NOP LDA EQTA SUBTRACT DEVICE CMA,INA EQT ENTRY ADDRESS ADA EQT1 FROM FWA OF EQT. CLB CLEAR B FOR DIVIDE DIV .15 DIVIDE BY 15 CCE,INA SET E FOR CONVERSION/ADJUST COUNT. JMP CPEQT,I SKP * SUBROUTINE: < $ETEQ > * * PURPOSE: THIS ROUTINE SETS THE ADDRESSES * OF THE 15 WORDS OF AN * EQUIPMENT TABLE ENTRY IN THE * 15 WORDS IN BASE PAGE COMMUNICATION * AREA LABELLED -EQT1- TO -EQT15-. * * CALLING SEQUENCE: * * (A) - STARTING ADDRESS OF THE EQT * ENTRY FOR THE REFERENCED * I/O UNIT. * * (P) JSB $ETEQ * (P+1) - RETURN - (A),(B) MEANINGLESS * * THERE ARE NO ERROR RETURNS OR * ERROR CONDITIONS DETECTED. * * $ETEQ NOP STA EQT1 INA STA EQT2 INA STA EQT3 INA % STA EQT4 INA STA EQT5 INA STA EQT6 INA STA EQT7 INA STA EQT8 INA STA EQT9 INA STA EQT10 INA STA EQT11 INA STA EQT12 INA STA EQT13 INA STA EQT14 INA STA EQT15 JMP $ETEQ,I * * SKP * * SPECIAL SECTION "I/O CLEAR " * ENTRY POINT IS "$IOCL" * * PURPOSE: THE FUNCTION OF THIS ROUTINE * IS TO REMOVE A PROGRAM FROM AN * I/O HANG-UP CONDITION RESULTING * FROM AN INPUT REQUEST NOT BEING * COMPLETED BY THE DEVICE. * * THIS "CLEARING" PROCEDURE IS * INITIATED BY THE OPERATOR IN * USING THE I/O ABORT VERSION OF THE * "OF,XXXXX,1" COMMAND. THE "OF" * STATEMENT PROCESSOR IN 'SCHED' * CALLS THIS SECTION IF THE REF- * ERENCED PROGRAM IS SUSPENDED * FOR AN I/O INPUT REQUEST. * * PROCESS: THE LIST OF EACH EQT ENTRY * IS SEARCHED TO FIND THE QUEUED * REQUEST CORRESPONDING TO THE * ID SEGMENT OF THE REFERENCED * PROGRAM. THE ENTRY IS REMOVED * FROM THE LIST AND THE LIST IS * APPROPRIATELY LINKED TO REFLECT * THE CHANGE. * * IF THE ENTRY WAS THE FIRST ONE * IN THE LIST (I.E. THE ACTIVE * REQUEST), THE DEVICE'S DRIVER IS * CALLED WITH A CLEAR REQUEST (CONTROL * WITH ZERO SUBFUNCTION. IF THE DRIVER * ACCEPTS THE REQUEST (A=0 ON RETURN) THEN * EQT1 SIGN BIT IS SET AND A 1 SEC. TIME OUT * IS SET UP. (THIS TIME OUT IS TRAPED BY THE * SYSTEM AND IS NEVER GIVEN TO THE DRIVER). * $ABRT IS CALLED TO ABORT THE PROGRAM AND * CONTROL IS TRANSFERRED TO "$XEQ" * IF THE DEVICE WAS NOT CLEARED * OR TO "IOCOM" TO INITIATE THE NEXT STACKED * REQUEST (OR TO ALLOCATE THE DMA CANNEL) * * CAL>LING SEQUENCE: * * (A)= ID SEGMENT ADDRESS OF PROGRAM * * (P) JMP $IOCL * * -NO RETURN - * * SKP ENT $IOCL * $IOCL STA TEMP1 SAVE ID SEGMENT ADDRESS. LDA EQT# SET TEMP2 = NEGATIVE CMA,INA NUMBER OF EQT STA TEMP2 ENTRIES. LDA EQTA INITIALIZE FOR * IOCL STA IOCL5 EQT ENTRY WORD IOCL0 STA IOCL6 1 ADDRESS. * LDA A,I CLEAR SIGN ,SET E IF SIGN WAS SET RAL,CLE,ERA GET LINK ADDRESS. CPA TEMP1 JUMP IF A JMP IOCL2 MATCH TO PROGRAM. * SZA IF NOT END OF LIST, JMP IOCL0 CONTINUE SCAN. * LDA IOCL5 SET (A) = ADDRESS OF ADA .15 NEXT EQT ENTRY. ISZ TEMP2 IF NOT END OF EQT, GO JMP IOCL TO SCAN NEXT ENTRY LIST. * * SCAN ALL DRT WORD 2 I/O QUEUES * LDA LUMAX SET TEMP2 = NEGATIVE CMA,INA NUMBER OF DRT STA TEMP2 ENTRIES. LDA DRT INITIALIZE ADA LUMAX FOR FIRST STA IOC50 DRT WORD IOC41 STA IOC51 TWO. * LDA A,I CLEAR SIGN, SET E IF SIGN SET. RAL,CLE,ERA GET LINK. CPA TEMP1 JUMP IF A MATCH JMP IOC62 TO A PROGRAM. * SZA IF NOT END OF LIST, JMP IOC41 CONTINUE SCAN. * ISZ IOC50 SET = NEXT LDA IOC50 ADDRESS OF NEXT ISZ TEMP2 DRT WORD 2. JMP IOC41 IF NOT END OF DRT, CONTINUE SCAN. JMP IOC63 IF END,NOT FOUND.MUST BE PROGRAM SO ABORT. SKP * * PROGRAM REQUEST FOUND IN DRT, UNLINK REQUEST. * IOC62 LDB A,I GET NEXT LINK, PROPOGATE RBL,ERB SIGN IF SIGN WAS SET AND STB IOC51,I STORE IN PREVIOUS LINK. * IOC63 LDA TEMP1 CHECK IF THIS ISZ TEMP1 IS A SYSTEM LDB TEMP1,I REQUEST. SSB,RSS IF SO SKIP ABORT. JSB $ABRT 'ABORT PROGRAM' JMP $XEQ RETURN. * * PROGRAM REQUEST ENTRY FOUND IN EQT, UNLINK REQUEST. * IOCL2 LDB A,I GET NEXT LINK AND SET RBL,ERB PROPOGATE SIGN IF SIGN SET STB IOCL6,I IN PREVIOUS LINK. * LDA TEMP1 "ABORT ISZ TEMP1 CHECK IF THIS IS A LDB TEMP1,I SYSTEM REQUEST SSB,RSS IF SO SKIP ABORT JSB $ABRT PROGRAM" * LDA IOCL5 IF PROGRAM REQUEST LDB IOCL6,I CPA IOCL6 WAS CURRENT ENTRY, SSB AND NOT NOW CLEARING SKIP TO CLEAR DEVICE. JMP $XEQ -EXIT TO $XEQ. SKP JSB $ETEQ JSB CLDMA CLEAR ANY DMA CHANNEL ASSIGNED LDA B3.I GET CLEAR REQUEST (100003B) STA EQT6,I SET IN EQT LDA EQT5,I GET CURRENT STATUS RAL,CLE IF DOWN OR IN DMA SSA WAIT JMP $XEQ JUST LEAVE IT ALONE * ERA ELSE SET NOT BUSY STA EQT5,I AND PLANT LDA EQT4,I GET THE SELECT CODE LDB EQT2,I AND THE I.XX ADDRESS AND B77 ISOLATE THE SELECT CODE AND JSB B,I RUN THE DRIVER * * IF REQUEST ACCEPTED THEN WE MUST SET UP FOR AN INTERRUPT BY * * A) SETTING THE DEVICE BUSY * B) SETTING A TIME OUT (1 SEC. IS ARBITRARILY USED) * * IF REQUEST IS NOT ACCEPTED OR IS COMPLETED THEN: * * A) ZAP TIME OUT AND * B) GO TO IOCOM TO GET THE NEXT REQUEST * CLB,CCE FIRST ZAP TIME OUT STB EQT15,I LDB EQT1,I SET THE SIGN BIT IN EQT1 RBL,ERB FOR IOCOM (NOW OR LATER) STB EQT1,I CCE,SZA INTERRUPT EXPECTED? JMP IOCOM NO SO JUST GO TO IOCOM * LDA EQT5,I YES SO SET RAL,ERA BUSY STA EQT5,I AND LDA N100 SET UP STA EQT15,I A REASONABLE TIME OUT JMP $XEQ GO TO THE DISPATCHER * SPC 1 IOCL5 NOP IOCL6 NOP IOC50 NOP IOC51 NOP SKP * * ROUTINE TO CLEAR DMA CH&\ANNEL IF ASSIGNED TO DEVICE * CLDMA NOP LDB INTBA GET THE INTERRUPLE ADDRESS TO B LDA B,I AND DMA 6 ENTRY TO A RAL,CLE,ERA CLEAR THE SIGN BIT CPA EQT1 THIS CHANNEL ASSIGNED? CLA,RSS YES- SKIP JMP IOCL3 NO TRY NEXT CHANNEL * CLC 6 CLEAR CHANNEL STF 6 6. STA B,I SET IT AVAILABLE IN INTBA SPC 1 IOCL3 INB STEP TO DMA 7 ENTRY LDA B,I GET TO A AND RAL,CLE,ERA CLEAR THE SIGN BIT CPA EQT1 THIS CHANNEL ASSIGNED? CLA,RSS YES - SKIP JMP CLDMA,I NO - EXIT CHANNELS CLEARED * CLC 7 CLEAR CHANNEL 7 STF 7 AND STA B,I MAKE IT AVAILABLE. JMP CLDMA,I * * ROUTINE TO CLEAR ALL CHANNELS SERVICED BY EQT ENTRY * CLCHS NOP JSB CLDMA CLEAR DMA CHANNEL IF ASSIGNED LDA INTLG STORE INTERRUPT CMA,INA TABLE LENGTH- ADA .2 RELATED INDEX STA TEMPW LDA CLR10 STORE INITIAL STA CLCSC CLC S.C. LDA INTBA INSTRUCTION ADA .2 CLRNX LDB A,I GET NEXT TABLE ENTRY- CPB EQT1 DOES IT REFERENCE THIS EQT? CLCSC CLC 00B YES-GO CLEAR IT ISZ TEMPW THRU TABLE? INA,RSS NO-INDEX TO NEXT ENTRY JMP CLCHS,I YES-EXIT * ISZ CLCSC JMP CLRNX * CLR10 CLC 10B B3.I DEF 3,I N100 DEC -100 HED * $SYMG BUFFER AND PRIVLEDGE I/O CONFIGURE SECTION * * SBUF BSS 50 ORG SBUF PUT IOC CONFIGURING ROUTINE IN BUFFER STA SBUF SAVE THE A REG. CLA STA $ZZZZ ZERO THE ABORT LIST STA DUMMY,I ZAP THE PRIV. TRAP CELL. LDA DUMMY GET THE DUMMY I/O ADDRESS SZA,RSS IF NONE JMP NOPRV GO EXIT * ADA CLCP CONFIGURE THE DUMMY ADDRESSES STA CLC2,I USE INDIRECTS TO AVOID LINKS XO+NLHR STCP MAKE STC STA STC2,I STC STA STCP SET IN LINE TOO XOR STFP STF STA STF2,I AND STF STA STFP NEED THIS IN LINE ALSO STCP OCT 4000 SET UP THE PRIV. CARD STFP OCT 600 NOW FOR DISC DRIVERS ETC. NOPRV LDA TMP1 REPLACE CALL TO HERE STA $SYMG+1 WITH A CLE JSB DIR TRACK DOWN ALL THE INDIRECTS DEF DCLAS CMA,INA SET NEGATIVE STA DDMCL,I AND SET AGAIN JSB DIR ALSO NEED DEF D$RN FOR RN TABLE JSB DIR AND FOR DEF D$LUT LU TABLE LDB DL.12 GET DEF TO L.012 FOR LDA PDSK DISC PROTECT OPTION SZA PROTECT?? STB DPOPI,I YES, SET IT UP LDA SBUF RESTORE A JMP TMP2,I GO TO TEMP BUFFER TO SET UP X,Y * DIR NOP SUBROUTINE TO TRACK DOWN DIRECT ADDRESS LDA DIR,I GET ADDRESS OF DEF STA B AND SAVE IT LDA A,I GET DEF THAT IS INDIRECT RAL,CLE,SLA,ERA CLEAR A LEVEL JMP *-2 IF MORE LOOP * STA B,I SET THE DIRECT ADDRESS JN ISZ DIR STEP OVER THE ADDRESS JMP DIR,I AND RETURN * SPC 2 PDSK DEF $PDSK DL.12 DEF L.012 CLCP CLC 0 DPOPI DEF DPOPT STC2 DEF SW1 STF2 DEF STF1 CLC2 DEF SW2 LOCAL DEFS TO AVOID LINKS DDMCL DEF MCLAS SPC 1 L EQU 50+SBUF-* ERROR HERE MEANS WE RAN OUT OF BUFFER ORR LEAVE THE BUFFER SBL DEF * HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** XI EQU 1647B . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 RQP9 EQU .+32 9 PARAMETERS) * * DEFINITION OF SYSTEM LISTS (QUEUES) * * SKEDD EQU .+33 'SCHEDULE' LIST, SUSP2 EQU .+35 'WAIT' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU ".+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BACKGROUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80  MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND * ORG * LENGTH OF RTIOC END $CIC &ASMB,R,L,C ** RT EXEC CENTRAL CONTROL MODULE ** HED ** REAL-TIME EXECUTIVE CENTRAL CONTROL MODULE ** * NAME: EXEC * SOURCE: 92001-18012 * RELOC: 92001-16012 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM EXEC,0 92001-16012 770131 * ***** AMD-DAS ***** FEB,72 ***** REV.LWH ***** * ENT EXEC,$ERMG,$RQST,$OTRL ENT $LIBR,$LIBX,$DREQ,$DREL,$SDRL,$SDSK ENT $ERAB,$PVCN,$REIO,$CREL,$RSRE,$ABRE ENT $PDSK ENT $PWR5 * EXT $CVT3,$SYMG,$LIST,$XEQ EXT $RENT,$CVEQ,$ABRT EXT $CGRN,$SCLK,$ALC,$RTN EXT .MVW SUP $PDSK EQU 0 DEFINE DEFAULT FOR DISC PROTECT * ***** < EXEC > PROGRAM DESCRIPTION ***** * * THE PRIMARY FUNCTION OF THIS PROGRAM IS * TO PROVIDE GENERAL CHECKING AND EXAMINATION * OF SYSTEM SERVICE REQUESTS AND TO CALL THE * APPROPRIATE PROCESSING ROUTINE IN OTHER * SECTIONS OF THE REAL-TIME EXECUTIVE. * * THIS PROGRAM IS CALLED DIRECTLY FROM THE * CENTRAL INTERRUPT CONTROL SECTION * WHEN A MEMORY PROTECT VIOLATION IS ACKNOWLEDGED. * ALL SYSTEM REQUESTS BY A USER PROGRAM CAUSE A * PROTECT VIOLATION. * * SYSTEM REQUEST FORMAT: * ---------------------- * * THE GENERAL FORMAT OF A SYSTEM REQUEST IS * A BLOCK CONTAINING AN EXECUTABLE INSTRUCTION * TO GAIN ENTRY TO THE EXECUTIVE AND AN ADDRESS * LIST OF PARAMETERS. THE FIRST PARAMETER IS * A NUMERIC CODE IDENTIFYING THE REQUEST TYPE. * THE LENGTH OF THE PARAMETER LIST VARIES * ACCORDING TO THE AMOUNT OF INFORMATION RE- * QUIRED FOR EACH REQUEST (OR VARIATIONS WITHIN * AR SINGLE REQUEST). THIS FORMAT ALLOWS SYSTEM * REQUESTS TO BE SPECIFIED IN A FORTRAN CALL * STATEMENT IN ADDITION TO ASSEMBLY LANGUAGE FORMAT. * * CALL EXEC (P1,P2,...PN) * * OR * * EXT EXEC * JSB EXEC (CAUSES MEMORY PROTECT VIOLATION) * DEF *+1+N DEFINE EXIT POINT, N= # PARAMETERS * DEF RCODE DEFINE REQUEST CODE * DEF P1 DEFINE PARAMETER LIST, 1 TO N * . * . (PARAMETERS MAY BE INDIRECTLY * . REFERENCED, E.G. DEF P3,I) * DEF PN * - EXIT POINT - * * RCODE DEC N * P1 DEC/OCT/DEF,ETC TO DEFINE A VLAUE * * * RE-ENTRANT LIBRARY REQUEST * -------------------------- * * THE SYSTEM LIBRARY (RESIDENT) CONTAINS * PROGRAMS STRUCTURED IN 'RE-ENTRANT' FORMAT * OR IN 'PRIVILEGED' EXECUTION FORMAT. * * - RE-ENTRANT FORMAT ALLOWS A LIBRARY * PROGRAM TO BE RE-ENTERED BY A CALL FROM * A HIGHER-PRIORITY PROGRAM DURING THE * PROCESSING OF A CALL FROM A LOWER-PRIORITY * PROGRAM. * * - PRIVILEGED EXECUTION FORMAT ALLOWS A * SHORT-RUNNING LIBRARY PROGRAM TO BE EXECUTED * WITH THE INTERRUPT SYSTEM DISABLED. * * * * MEMORY PROTECT ERROR: * --------------------- * * IF THE INSTRUCTION CAUSING THE PROTECT VIOLATION * IS NOT A JSB EXEC OR A JSB TO LIBRARY * PROGRAM, THEN A USER PROGRAM ERROR IS * ASSUMED. A DIAGNOSTIC IS OUTPUT TO THE SYSTEM * TELETYPE LISTING THE PROGRAM NAME AND ADDRESS * OF VIOLATING INSTRUCTION AND THE PROGRAM IS * SET DORMANT IN THE PROGRAM ABORT PROCEDURE. * SKP EXEC NOP HLT 0 PROTECTION AGAINST DIRECT CALL. * $RQST LIB 5 GET ADDRESS OF VIOLATION. LIA 4 DO NOT REARRANGE!!! CPA D4 POWER FAIL? LDB $PWR5 YES, USE LAST INTERRUPT ADDR. STF 5 REENABLE PARITY ERROR OPTION. STB VADR SAVE VIOLATION ADDRESS. STB XSUSP,I SET AMS POINT OF SUSPENSION. STB $LIBR SAVE (P+1) OF ISZ $LIBR CALL. RBL,CLE,SLB,ERB CHECK FOR PARITY ERROR HLT 5 FOUND ONE!!!!! LDA B,I GET WORD. AND B074K ISOLATE INSTR. CODE. CPA JSBI IF INSTRUCTION IS JSB RSS CHECK OPERAND ADDRESS. JMP MPERR -MEMORY PROTECT ERROR- LDA B,I CHECK FOR EFFECTIVE AND B2000 ADDRESS SZA LINK THRU CURRENT PAGE? LDA VADR YES, USE CURRENT PAGE BITS XOR VADR,I MIRGE THE PAGE OFFSET AND G76 UNDER THE RULES OF WOO. XOR VADR,I NOW HAVE THE ADDRESS RAL,CLE,SLA,ERA IF INDIRECT INDR LDA A,I GET NEXT LEVEL RAL,CLE,SLA,ERA CHECK FOR MULTI LEVEL JMP INDR FOUND ONE SO LOOP (MUST END) * CPA EXECA -EXEC-. JMP R0 YES, REQUEST TO BE ANALYSED. CPA LIBRA -LIBRARY ROUTINE CALLING FOR JMP LIBRC RE-ENTRANT OR PRIVILEGED RUN. CPA LIBXA -LIBRARY ROUTINE RETURNING JMP LIBXC TO CALLER. * * CHECK FOR USER CALL TO LIBRARY PROGRAM * STA B SAVE OPERAND ADDRESS. LDA LBORG SUBTRACT LIBRARY CMA,CLE,INA AREA ORIGIN FROM ADA B OPERAND ADDRESS. LDA B (E = 0 IF SYSTEM VIOLATION ) CMA,SEZ,CLE,INA SKIP IF VIOLATION ALREADY ELSE ADA RTORG TEST FOR ABOVE LIB. SEZ,RSS IF NOT CALL TO LIBRARY RESIDENT, JMP MPERR THEN VALID MEMORY PROTECT ERROR. LDA $LIBR -CALL TO LIBRARY. STA B,I SET (P+1) ADDRESS IN ENTRY POINT ADB D2 SET (P+1) OF STB $LIBR JSB $LIBR IN -$LIBR-. JMP LIBRC - TRANSFER TO $LIBR SECTION SPC 1 JSBI JSB 0 B074K OCT 074000 G76 OCT 76000 EXECA DEF EXEC RQP1A DEF RQP1 VADR NOP $PWR5 NOP ADDR OF INTERRUPT BEFORE POWER FAIL DM9 DEC -9 * * ANALYZE SYSTEM REQUEST * R0 LDA $LIBR,I (A) = RETURN ADDREUcSS OF JSB EXEC. ISZ $LIBR SET $LIBR TO FIRST PRAM. (RQ) ADDRESS. STA RQRTN SAVE IN BASE PAGE LDB $LIBR CACULATE THE NUMBER OF CMB,CLE PARAMETERS IN REQUEST ADB A LESS THE REQUEST CODE. STB RQCNT AND SAVE # OF ACTUAL PARAMETERS. STB A CMB,SEZ,CME SKIP IF RETURN IS BAD (< JSB +2) * ADA DM9 IS GREATER CLA,SEZ THAN JMP RQERR 8. * STA RQP2 ZERO STA RQP3 PARAMETER STA RQP4 STA RQP5 ADDRESS STA RQP6 STA RQP7 AREA STA RQP8 STA RQP9 * LDA RQP1A SET TEMP2 = STA TEMP2 ADDRESS OF RQP1 IN BASE PAGE STA TEMP3 SAVE FOR CALL BY NAME TEST R1 LDA $LIBR GET EFFECTIVE OPERAND ADDRESS. R1D1 LDA A,I FIRST LEVEL TO A SZA IF THROUGH A CPA D1 OR B JMP RQERR BAD NEWS FELLOW! * RAL,CLE,SLA,ERA REMOVE INDIRECT BIT SKIP IF DIRECT JMP R1D1 STILL INDIRECT GO TRY AGAIN. * STA TEMP2,I SET IN BASE PAGE. ISZ TEMP2 INDEX ISZ $LIBR ADDRESSES AND INB,SZB PARAMETER COUNT. JMP R1 - CONTINUE - SKP * CHECK LEGALITY OF REQUEST CODE * LDA RQP1,I GET REQUEST CODE LDB XEQT COMPUTE ADB D15 THE STATUS WORD STB TEMP1 ADDRESS AND SAVE LDB B,I GET STATUS RAL,CLE,ERA PUT ABORT OPTION BIT RBL,ERB IN SIGN OF STATUS STB TEMP1,I AND RESET IN ID-SEG. SSB IF OPTION SELECTED ISZ RQRTN STEP RETURN ADDRESS. STA RQP1 SAVE THE REQUEST CODE. SZA IF ZERO SKIP TO REJECT ADA CODE# IF RQUEST CODE IF NOT DEFINED SSA,RSS -THEN JMP RQERR TOUGH LUCK, YOUR A DEAD DUCK! * ADA RQTBL GET ADDRESS OF PROCESSOR TO A LDA A,I GET ADDRESS SZA,RSS IF NOT LOADED  JMP RQERR THEN REQUEST CODE ERROR * STA VADR SAVE THE ADDRESS * * TEST EACH PRAMETER FOR BEING BELOW THE FENCE IF * THE CALL CAUSES A STORE TO THE AREA DEFINED. * LDB RQP1 USE REQUEST CODE CLE,ERB TO INDEX INTO ADB RQTBL THE BY NAME TABLE LDA B,I GET THE FLAG WORD LDB RQCNT GET THE NUMBER OF PRAMS TO CMB,SEZ,RSS TEST SET COUNT ALF,ALF ROTATE IF ODD REQUEST CODE STB TEMP1 SET PRAMETER COUNT * R3 ISZ TEMP3 STEP THE PRAMETER ADDRESS LDB TEMP3,I GET THE ADDRESS ISZ TEMP1 SKIP IF END OF LIST CMB,CLE,RSS SET UP FOR TEST AND SKIP JMP VADR,I GO EXERCISE THE REQUEST SLA,RAR IF FLAG NOT SET THEN ADB FENCE SKIP THE ADD CLB,SEZ,RSS SET B FOR ERROR SKIP IF ERROR JMP R3 NO ERROR GO TEST NEXT PRAM * LDA RQ1 SET A FOR ERROR JMP $ERAB GO SEND 'RQ00' ERROR SPC 1 D1 DEC 1 D2 DEC 2 D15 DEC 15 DM1 DEC -1 CODE# ABS TBL-TBLE-1 NEGATIVE OF NUMBER OF REQUEST+1 RQTBL DEF TBLE ADDRESS INDIRECT OF LAST + 1. HED ** SUPERVISORY CONTROL OF LIBRARY PROGRAM EXECUTION ** * * SUPERVISORY CONTROL OF PROGRAM LIBRARY EXECUTION * * ALL LIBRARY PROGRAMS REFERENCED BY USER PROGRAMS * IN THE SYSTEM ARE COMBINED IN A BLOCK OF MEMORY * WHICH IS PROTECTED FROM THE REAL-TIME AREA. THE * LIBRARY AREA IS IMMEDIATELY BELOW THE RT AREA * AND JUST ABOVE THE SYSTEM AREA. * * A USER LIBRARY CALL CAUSES A PROTECT VIOLATION. * THIS SECTION FACILITATES ENTRY INTO THE LIBRARY * PROGRAM BY PERFORMING THE NECESSARY PROCESSING * FOR RE-ENTRANCY OR OPERATING THE PROGRAM WITH H= * THE INTERRUPT SYSTEM TURNED OFF FOR A 'PRIVILEGED' * EXECUTION PROGRAM. * * RE-ENTRANT OR PRIVILEGED PROGRAM FORMAT: * ---------------------------------------- * * ENTRY NOP * JSB $LIBR * DEF TDB (OR 'NOP' IF PRIVILEGED) * j - FIRST INSTRUCTION FOR FUNCTION - * - CODE * - TO * - PERFORM * - PROGRAM FUNCTION * EXIT JSB $LIBX * DEF TDB (OR DEF ENTRY IF PRIVILEGED) * DEC N RETURN ADJUSTMENT FOR RE-ENTRANT * - * TDB NOP HOLDS SYSTEM POINTER TO ID-EXTENSION. * DEC N LENGTH OF TEMPORARY DATA BLOCK * NOP RETURN ADDRESS OF CALL. * - BLOCK USED FOR * HOLDING TEMPORARY * VALUES GENERATED * BY THE ROUTINE. * * * < $LIBR> IS ENTERED WHEN A LIBRARY * PROGRAM IS CALLED. IF THE CALLED * PROGRAM IS 'RE-ENTRANT' AND IS CALLED * DURING THE PROCESSING OF A PREVIOUS * CALL, THE TEMPORARY-DATA-BLOCK IS * MOVED INTO A BLOCK IN AVAILABLE MEMORY * BEFORE THE ROUTINE IS ENTERED. * * LIBRA DEF $LIBR * $LIBR NOP DIRECT ENTRY HAS TO BE PRIV. STA XA,I AND GOING DEEPER LDA $LIBR,I MAKE SURE SZA AND IF GOING RENT JMP MPERR SEND SOUTH INSTEAD. * LIBRX LDA XA,I RESTORE AND RETURN ISZ $LIBR SET RIGHT ADDRESS ISZ $PVCN AND STEP THE DEPTH COUNTER JMP $LIBR,I RETURN TO USER * LIBRC LDB $LIBR,I GET (P+2) OF -$LIBR- CALL. SZB,RSS IF (P+2) = 0, THEN CALLED PROGRAM JMP PVEXC IS IN 'PRIVILEGED' FORMAT. * STB TEMP1 SAVE -TDB- ADDRESS. LDA B,I GET WORD 1 OF DATA BLOCK. LDA A,I GET ID SEG ADDRESS OR ZERO RAL,CLE,ERA REMOVE POSSIBLE SIGN BIT CPA XEQT RECURSIVE ENTRY? JMP ERE01 YES GO ABORT HIM INB STEP TO LENGTH WORD IN TDB SZA IF BLOCK IN USE GET LENGTH LDA B,I ELSE ADA D4 USE JUST FOUR WORDS STA TEMP4 SAVE LENGTH FOR ALLOCATE CALL LDB DHED GET POINTER TO HEAD OF RENT LDA XEQT LIST ADA D20 CHECK IF ALREADY IN LIST STA TEMP3  SAVE ID-SEG POINTER LDA A,I GET THE STATUS WORD ALF,RAL BIT 10 IS RENT BIT SSA,RSS IF CLEAR THEN THIS IS FIRST ENTRY JMP RE2 SO GO SET UP * LDB XEQT NOT FIRST ENTRY SO FIND OTHERS JSB FINDL USING FINDL ROUTINE JMP ERE01 LIST ERROR ABORT THE PGM ADB D3 STEP TO SUB QUE HED RE2 STB TEMP2 SET POINTER TO LIST HEAD * JSB $ALC ALLOCATE THE MEMORY TEMP4 NOP NUMBER OF WORDS REQUIRED JMP NVRM IF NEVER ANY MEMORY, TRY 4 ONLY JMP LB05 NO MEMORY NOW, SUSPEND. CCE ALLOC DONE. * CPB TEMP4 DID WE GET THE REQUESTED NUMBER? B40 CLE YES CLEAR E AS A FLAG * LDB TEMP2,I GET OLD POINTER STA TEMP2,I SET NEW BLOCK ADDRESS STB A,I LINK OLD BLOCKS INTO THE LIST LDB XEQT GET THE ID-SEG ADDRESS SEZ,INA STEP A AND SKIP IF EXACT ALLOCATION ADB SIGN ELSE ADD SIGN BIT TO ID-ADDRESS STB A,I SET IN WORD 2 STA TEMP4 SET TDB ADDRESS POINTER INA SET TO WORD 3 ADDRESS LDB TEMP1 SET TDB ADDRESS IN WORD THREE STB A,I INA CLEAR CLB WORD STB A,I FOUR * LDB TEMP1,I IF BLOCK AVAILABLE THEN SZB,RSS SKIP THE JMP RE4 MOVE * SEZ,INA SET A TO SAVE BLOCK ADDRESS INA (EXTRA WORD USED IN ID-EXTENSION) LDB TEMP1 DIG THE TDB SIZE OUT CLE,INB OF THE TDB LDB B,I AND SET IN B JSB MTDB MOVE OUT THE TDB RE4 LDA TEMP4 GET THE ADDRESS OF THE ID-SEG. ADDRESS STA TEMP1,I AND SET IN THE TDB LDA TEMP3,I GET THE ID-STATUS WORD IOR B2000 SET THE RENT BIT STA TEMP3,I RESTORE THE WORD LDB TEMP1 (B) = ADDR. OF TDB. ADB D2 SET LDA $LIBR (P+1) ADA DM2 OF ORIGINAL JLDA A,I CALL IN STA B,I WORD 3 OF TDB IN PROGRAM. ISZ $LIBR SET TO FIRST INSTR IN LIB. PROG. * LDB $LIBR SET RETURN ADDRESS STB XSUSP,I IN THE ID-SEG. JMP $RENT RETURN TO THE DISPATCHER * $PVCN NOP SKP * * REJECT SECTION CAUSED BY NO MEMORY * AVAILABLE FOR -TDB-. CALLING USER PROGRAM * IS SUSPENDED BACK TO POINT OF CALL AND * LINKED INTO MEMORY SUSPENSION LIST. * NVRM LDA D4 NEVER ENOUGH MEMORY, REQUEST 4 NEXT TIME STA XTEMP,I LB5 JSB $LIST SUSPEND OCT 504 PROGRAM JMP $XEQ TRANSFER TO EXECUTE SECTION. * LB05 LDA $LIBR BACK UP TO ADA DM2 THE ENTRY POINT. CCB SUBTRACT ONE FROM THE RETURN ADB A,I ADDR TO GET ADDR OF THE CALL. STB XSUSP,I POST THE ADDR AS THE SUSP.POINT. JMP LB5 * * * INITIATE PRIVILEGED EXECUTION OF USER PROGRAM * PVEXC EQU * RESTORE REGISTERS. JMP NOTMX (OR DLD IF MX CPU) * DEF XI,I DEF FOR DLD CAX PUT IN X CBY AND Y NOTMX LDA XEO,I NOW E,O CLO SLA,ELA STF 1 LDB XB,I JMP LIBRX GO GET A AND EXIT * HED RENT SUBROUTINES * MTDB MOVES A TDB TO SYSTEM MEMORY AND UPDATES THE LINKAGES * AS REQUIRED. * * CALLING SEQUENCE: * * TEMP6 = NUMBER OF WORDS REQUIRED (IF ALLOCATION) * TEMP1 = ADDRESS OF TDB TO BE MOVED * A = CORE ADDRESS (FROM $ALC ) * B = NUMBER OF WORDS ALLOCATED (FROM $ALC ) * E = 0 IF MEMORY IS ALREADY ALLOCATED * = 1 IF TEMP6 IS SET AND A AND B ARE NOT. * * THE SECOND WORD OF THE SAVE AREA IS SET TO THE CONTENTS * OF B WHILE THE SECOND WORD OF THE TDB DETERMINS HOW * MANY WORDS TO MOVE. * * TEMP USAGE IN THIS ROUTINE IS: * * AHLD DESTINATION ADDRESS * TEMP6 COUNTER * TEMP7 ID-EXTENSION ADDRESS(CONTENTS OF TEMP1,Ià) * MTDB NOP SEZ,RSS IF NO ALLOCATE OPTION JMP MTDB2 SKIP ALLOCATE CALL * JSB $ALC GET THE MEMORY TEMP6 NOP JMP MTDB0 NEVER ANY MEMORY JMP LB5 NO MEMORY NOW, SUSPEND PROG * MTDB2 STA AHLD SET UP DESTINATION POINTER LDA TEMP1,I SAVE THE ID-EXTENSION ADDRESS STA TEMP7 LDA TEMP1 GET THE TDB ADDRESS DST AHLD,I AND SET IT IN THE SAVE AREA. AHLD EQU *-1 ADB DM2 ADJUST COUNT FOR MOVE STB TEMP6 AND SET FOR MVW ADA D2 ADJUST THE FROM ADDRESS LDB AHLD GET THE TO ADRESS ADB D2 ADJUST THE TO ADDRESS JSB .MVW MOVE WORDS DEF TEMP6 TO SAM NOP * CLA STA TEMP1,I SET THE TDB "FREE" LDB TEMP7,I GET THE ID-SEGMENT ADDRESS FOR RBL,CLE,ERB THE OWNING PROGRAM ADB D20 INDEX TO THE STATUS WORD LDA B,I FETCH IT AND SET IOR B4000 THE RENT MEMORY MOVED STA B,I BIT ISZ TEMP7 STEP TO THE TDB POINTER ADDRESS LDA AHLD GET THE NEW LOCATION IOR SIGN SET THE MOVED FLAG STA TEMP7,I AND SET IN THE EXTENSION. JMP MTDB,I RETURN * MTDB0 CLA NEVER ANY MEMORY CLB RETURN (A)=0, (B)=0 JMP MTDB,I SPC 2 * FINDL FINDS A ID-EXTENSION GIVEN THE ID-SEGMENT ADDRESS * * CALLING SEQUENCE: * * LDB ID-SEG ADDRESS * JSB FINDL * NOT FOUND RETURN * FOUND RETURN B = ADDRESS OF EXTENSION,TEMP5 = ADDRESS OF * PREVIOUS BLOCK IN THE LIST (FOR UNLINKING). * E = 0. * * TEMP USAGE: * * TEMP5 = LAST POINTER * TEMP6 = ID-SEGMENT ADDRESS * FINDL NOP STB TEMP6 SAVE THE ID-SEGMENT ADDRESS LDB DHED GET THE HED OF THE LIST ADDRESS FIND1 STB TEMP5 SET LAST POINTER LDB B,I GET THE ADDRESS OF THE EXTENSION SZB,RSS END OF LIST? JMP FINDL,I YES- MAKE NOT FOUND RETURN LDA B ADDRESS TO A INA STEP TO THE ID-ADDRESS LDA A,I GET THE ADDRESS RAL,CLE,ERA CLEAR POSSIBLE SIGN BIT CPA TEMP6 THIS IT? CLE,RSS YES RETURN E = 0 JMP FIND1 NO TRY NEXT ENTRY ISZ FINDL STEP TO TRUE RETURN JMP FINDL,I RETURN SKP * RTN4 RETURNS THE FOUR WORD ID-EXTENSION AND CAN CLEAR * THE PROGRAMS RENT BIT * * CALLING SEQUENCE: * * TEMP2 = ADDRESS OF THE FOUR WORD BLOCK * E = 0 IF THE RENT BIT IS TO BE CLEARED. * TEMP1 = ADDRESS OF THE TDB (TO SET FIRST WORD TO ZERO) * JSB RTN4 * * TEMP USAGE: * TEMP2 AS ABOVE * TEMP3 NUMBER OF WORDS TO RETURN * TEMP1 AS ABOVE * RTN4 NOP LDA TEMP2 GET BLOCK ADDRESS INA INDEX TO ID SEG ADDRESS LDB A,I GET ID-SEG ADDRESS LDA D4 SET A TO THE REQUEST LENGTH RBL,SLB,ERB IF WE GOT 4 SKIP INA ELSE SET TO 5. STA TEMP3 SET RETURN LENGTH SSB IS RENT BIT CLEAR REQUESTED? JMP RTNA NO SKIP ADB D20 YES INDEX TO THE BIT LDA B,I GET THE WORD XOR B2000 ZAP THE BIT STA B,I RESET THE WORD RTNA CLA CLEAR THE TDB FLAG STA TEMP1,I JSB $RTN RETURN THE MEMORY TEMP2 NOP TEMP3 NOP JMP RTN4,I RETURN SPC 2 DHED DEF *+1 NOP HED OF ID-EXTENSION LIST DM3 DEC -3 D20 DEC 20 B4000 OCT 4000 B2000 OCT 2000 SIGN DEF 0,I HED $REIO RENT I/O PROCESSOR ROUTINE * $REIO MOVES TO SYSTEM MEMORY THE TDB CONTAINING THE * REFERENCED ADDRESS - IF ANY. THIS ROUTINE IS CALLED * BY RTIOC TO ALLOW I/O FROM A RE-ENTRENT ROUTINE. * * CALLING SEQUENCE * * LDB BUFAD BUFFER ADDRESS IN B. * JSB $REIO * ON RETURN B IS THE NEW BUFFER ADDRESS, E IS SET. * * TEMP USAGE: * * TE%MP1 = TDB ADDRESS * TEMP3 = NEG. OF PASSED BUFFER ADDRESS * TEMP4 = NEXT ENTRY POINTER. * TEMP5 = TDB PTR ADDRESS IN ID-EXTENSION * $REIO NOP CMB,INB SET BUFFER ADDRESS NEGATIVE FOR TESTS. STB TEMP3 TEST AND SAVE IT LDB XEQT GET THE ID-ADDRESS JSB FINDL AND SO THE ID-EXTENSION JMP REIO2 NOT FOUND - EXIT * REIO1 LDA B SET ADDRESS IN A TOO SZB,RSS IF END OF LIST JMP REIO2 EXIT WITH SAME ADDRESS * SEZ,RSS FIRST POINTER IS ADA D3 + 3 STA TEMP4 REST ARE STANDARD LINK ADB D2 INDEX TO THE TDB ADDRESS STB TEMP5 SAVE THE TDB ADDRESS LDA B,I TDB ADDRESS TO A RAL,CLE,SLA,ERA CLEAR MOVED FLAG, SKIP IF NOT LDA A,I IF MOVED GET THE TRUE TDB ADDRESS STA TEMP1 SAVE FOR MTDB ROUTINE LDB A PUT IN A TOO SO CLE,INA WE CAN INDEX TO LENGTH ADB TEMP3 ADD NEG OF BUFFER ADDRESS SEZ,CLE,RSS E SET =>BELOW TDB SO SKIP ADB A,I ADD TDB LENGTH LDB TEMP4,I GET THE NEXT ENTRY TO B SEZ,CCE,RSS E=0 IF NOT IN THE TDB. JMP REIO1 TRY NEXT TDB HE OWNS. * LDB A,I GET LENGTH OF TDB AND SET STB TEMP6 FOR MTDB LDA TEMP5,I IF ALREADY MOVED LDB TEMP1,I THEN SKIP SZB MOVE AND USE CURRENT POINTER JSB MTDB GO MOVE THE TDB RAL,CLE,ERA CLEAR THE SIGN BIT LDB A,I OLD TDB ADDRESS TO B CMA,INA NEG. OF NEW ADDRESS TO A ADB A NEG. OF OFFSET TO B REIO2 ADB TEMP3 NEG OF NEW BUFFER ADDRESS TO B CMB,CCE,INB SET POSITIVE AND SET E. JMP $REIO,I RETURN TO CALLER HED RESTORE MOVED TDB'S FOR CURRENT PROGRAM * $RSRE MOVES BACK ANY TDB MOVED OUT BY CONTENDING PROGRAMS * THIS ROUTINE IS CALLED BY THE DISPATCHER WHEN IT IS * ABOUT TO DISPATCH A PROGRAM AND THE RENT MEMORY * MObWVED BIT IS SET IN THE PROGRAMS ID-SEGMENT. * * CALLING SEQUENCE: * * SET UP BASE PAGE (XEQT ETC.) * JSB $RSRE * * ON RETURN THE PROGRAM IS READY TO RUN * * IF MEMORY IS NEEDED BUT NOT AVAILABLE THE PROGRAM IS * MEMORY SUSPENDED AND RETURN IS TO $XEQ. * * TEMP USAGE: * * TEMP1 = TDB POINTER * TEMP3 = THE FROM ADDRESS * TEMP6 = # WORDS FOR ALLOCATION * TEMP4 = MOVE COUNTER * TEMP5 = RETURN MEMORY ADDRESS * TEMP9 = RETURN # WORDS * $RSRE NOP RSRE1 LDB XEQT GET THE ID-SEGMENT EXTENSION JSB FINDL JMP RSRE3 NOT FOUND GO EXIT * RSRE2 ADB D2 INDEX TO THE TDB ADDRESS LDA B,I GET THE TDB ADDRESS TO A SSA IF NOT MOVED OUT THEN SKIP JMP RSRE4 ELSE GO MOVE BACK * SEZ,CCE,INB GET ADDRESS OF NEXT BLOCK ADB DM3 TO B LDB B,I SZB IF ZERO THEN DONE JMP RSRE2 ELSE GO TEST NEXT ONE * RSRE3 LDB XEQT GET THE ID-ADDRESS ADB D20 AND REMOVE LDA B,I THE MEMORY XOR B4000 MOVE REQUIRED BIT STA B,I RESET THE WORD JMP $RSRE,I RETURN * RSRE4 RAL,CLE,ERA CLEAR THE SIGN BIT AND STA TEMP5 SAVE THE ADDRESS STB TEMP3 SET THE FORM ADDRESS DLD A,I GET THE TDB ADDRESS & # OF WORDS STA TEMP1 SET THE TDB ADDRESS STB TEMP9 AND THE RETURN COUNT DLD A,I GET CURRENT OWNER AND ACTUAL COUNT STB TEMP6 SET COUNT FOR ALLOCATION ADB DM2 SET UP THE MOVE COUNT STB TEMP4 SAVE IT CCE,SZA SKIP IF SUBROUTINE IS FREE JSB MTDB MOVE THE OTHER USER TO SYS. MEM. * CCB ADB TEMP3 BACK UP TO THE ID ADDRESS IN THE EXTENSION STB TEMP1,I SET IN THE TDB TO SHOW OWNER LDB TEMP1 SET UP ID-EXTENSION STB TEMP3,I LDA TEMP5 GET ADDRESS OF MEMORY ADA D2 ADJUST FOR MOVE HNLHADB D2 ADJUST TO ADDRESS ALSO JSB .MVW MOVE THE WORDS DEF TEMP4 NOP JSB $RTN RETURN THE MEMORY TEMP5 NOP TEMP9 NOP JMP RSRE1 GO TRY AGAIN HED ABORT PROCESSOR FOR PROGRAM ABORTED IN A RENT SUBROUTINE * $ABRE CLEANS UP MEMORY ALLOCATION AND OWNERSHIP FLAGS * FOR A PROGRAM ABORTED (OR TERMINATED) WHILE IN A REENTRENT * SUBROUTINE. * * CALLING SEQUENCE: * * A=0 IF DISC RESIDENT * A#0 IF CORE RESIDENT * * LDB ID-SEG ADDRESS * JSB $ABRE * * TEMP USAGE: * * TEMP4 = NEXT ID-SEG EXTENSION * TEMP1 = TDB ADDRESS * TEMP7 = MEMORY ADDRESS * TEMP8 = # WORDS TO RETURN * TEMP9 = CORE RESIDENT FLAG (PASSED IN A) * SAVER = ID-SEGMENT ADDRESS SAVE WHILE RN RELEASE CALLED * $ABRE NOP STA TEMP9 SAVE THE RESIDENCY FLAG LDA B ADA D20 ADVANCE TO FATHER PTR LDA A,I ALF,RAL TEST REENTRANT BIT SSA SEARCH ONLY IF NEED TO. ,N JSB FINDL DOES HE HAVE ANY? JMP $ABRE,I NO EXIT * LDA B,I YES UNLINK FROM LIST STA TEMP5,I ABRE1 STB TEMP2 SET ID-EXTENTION ADDRESS CLA,SEZ,RSS COMPUTE ADDRESS LDA D3 OF NEXT ENTRY ADA B IN THE PROGRAMS LIST LDA A,I AND SAVE STA TEMP4 IT * ADB D2 INDEX TO THE TDB ADDRESS LDA B,I FETCH IT RAL,CLE,SLA,ERA CLEAR MOVED BIT, SKIP IF NOT JMP ABRE2 NOT MOVED CONTINUE * STA TEMP1 SET THE TDB ADDRESS FOR CLEAR LDB TEMP9 GET THE RESIDENCY FLAG CMA,CLE IF THE TDB IS NOT IN THE LIB. AREA ADA RTORG AND THE PROG IS DISC RESIDENT SEZ,CCE,RSS THEN DO NOT CLEAR THE TDB SZB JMP ABRE4 EITHER RESIDENT OR TRUE LIB. JMP ABRE3 IN DISC RESIDENT PGM. * ABRE2 STA TEMP7 SET UP TO RETURN IT INA STEP TO THE LENGTH LDA A,I GET IT STA TEMP8 SET FOR RETURN CALL JSB $RTN RETURN THE SAVE AREA TEMP7 NOP TEMP8 NOP * ABRE3 CLA,CCE CLEAR TEMP1 TO AVOID PROBLEMS STA TEMP1 ABRE4 JSB RTN4 RETURN THE 4 WORD EXTENSION LDB TEMP4 GET ADDRESS OF NEXT CCE,SZB EXTENSION JMP ABRE1 GO DO IT IF IT EXISTS JMP $ABRE,I DONE - RETURN HED $LIBX EXIT PROCESSOR FOR RENT/PRIV LIB ROUTINES SKP * < $LIBX> IS ENTERED WHEN A LIBRARY * PROGRAM TERMINATES ITS EXECUTION. A * TEMPORARY DATA BLOCK IS MOVED BACK * INTO THE LIBRARY PROGRAM, IF REQUIRED, * BEFORE RETURN TO THE ORIGINAL CALLER. * * LIBXA DEF $LIBX * $LIBX NOP NON MP ENTRY - MUST BE STA XA,I RETURNING FORM PRIV. SUB. LDA $PVCN SUBTRACT ONE FORM THE COUNT CMA,INA WITH OUT AFFECTING CMA,SZA,RSS "E" ($PVCN >0 ) JMP LB10 IF NOT STILL PRIV. JMP * STA $PVCN STILL PRIV. SET THE COUNTER BACK LDA $LIBX,I TRACK DOWN THE RETURN LDA A,I ADDRESS STA $LIBX AND SET IT LDA XA,I RESTORE A AND JMP $LIBX,I RETURN * LB10 STA $PVCN RETURN NON PRIV. SET COUNTER STB XB,I TO ZERO AND FINISH THE REG. SAVE ERA,ALS E SOC O INA STA XEO,I LDA $LIBX,I GET THE LDA A,I RETURN ADDRESS STA XSUSP,I AND SAVE IT SAVXY JMP $RENT (CXA IF MX CPU) CYB SAVE THE X,Y REGS. DST XI,I IN THE X,Y SAVE AREA JMP $RENT NOW GO SET THE FENCE * * * RE-ENTRANT PROGRAM RETURNING TO USER CALL. * LIBXC LDB $LIBR,I SET -TDB- ADDRESS. STB TEMP1 IN TEMP1. ISZ $LIBR SET TO (P+2) OF CALL TO -$LIBX-. ADB D2 GET LDA B,I RETURN POINT ADJUSTMENT. ADA $LIBR,I ADD TO (P+1) OF LIBRARY CALL STA XSUSP,I AND SET FOR RETURN TO USER. * LDB XEQT GET ID EXTENSION JSB FINDL ADDRESS JMP MPERR NOT FOUND??? JMP LB14 START SEARCH * LB15 SEZ,CCE,RSS FIND NEXT ENTRY ADDRESS ADB D3 STB TEMP5 SAVE POINTER LDB B,I GET ADDRESS LB14 STB A GET ADDRESS OF INA ID WORD CPA TEMP1,I THIS ONE?? RSS YES GO DO IT JMP LB15 NO TRY NEXT ONE * STB TEMP2 SAVE BLOCK ADDRESS LDB B,I RELINK THE BLOCKS STB TEMP5,I JSB RTN4 RETURN THE ID-EXTENSION JMP $RENT TDB = 0, GO TO CHECK RETURN. * HED ** SYSTEM DISC ALLOCATION/RELEASE PROCESSOR ** * SYSTEM DISC ALLOCATION/RELEASE REQUESTS * * THESE REQUESTS CONFORM TO THE GENERAL * SYSTEM REQUEST FORMAT. * * A. DISC TRACK ALLOCATION * * THE ALLOCATION REQUEST INCLUDES THE * NUMBER OF CONTIGUOUS TRACKS DESIRED, A * PARAMETER TO INDICATE SUSPENSION OR * NO SUSPENSION IF THE REQUESTED SPACE IS * NOT AVAILABLE AND VARIABLE STORAGE FOR * REOTURNING THE STARTING TRACK NUMBER, THE * DISC LOGICAL UNIT NUMBER AND THE NUMBER * OF SECTORS PER TRACK FOR THE ASSIGNED * DISC. * * (P) JSB EXEC * (P+1) DEF *+6 (DEFINE RETURN) * (P+2) DEF RCODE ( " REQUEST CODE) * (P+3) DEF #TRAK ( " # TRACKS DESIRED) * (P+4) DEF STRAK ( " WORD FOR TRACK #) * (P+5) DEF DISC ( " " FOR DISC LU #) * (P+6) DEF SECT# ( " " FOR # SECTORS) * (P+7) - RETURN - * * RCODE DEC M * #TRAK DEC N * STRAK NOP * DISC NOP * SECT# NOP * * M = 4 ALLOCATE TRACK TO PROGRAM * = 15 ALLOCATE TRACK GLOBALLY * * #TRAK (BIT 15):= 0 TO MEAN SUSPENSION IF * TRACKS NOT AVAILABLE * = 1 TO MEAN NO SUSPENSION AND * SET (STRAK) = -1 IF NO * TRACKS AVAILABLE. * * STRAK : THE STARTING TRACK NUMBER OF THE * CONTIGUOUS GROUP ALLOCATED IS * STORED IN THIS WORD ( OR = -1 AS * DESCRIBED FOR 'NO SUSPENSION' ABOVE). * * DISC : THE LOGICAL UNIT NUMBER OF THE DISC * ON WHICH THE TRACK(S) WERE ALLOCATED * IS STORED IN THIS WORD. * * SECT#: THE NUMBER OF SECTORS PER TRACK FOR * THIS DISC ALLOCATION IS STORED IN * THIS WORD. SKP * * B. DISC TRACK RELEASE * * THE RELEASE REQUEST PROVIDES FOR RELEASING * A SINGLE TRACK, A CONTIGUOUS GROUP OF TRACKS * OR ALL TRACKS ASSIGNED. THE TRACKS TO BE * RELEASED MUST BE EITHER ASSIGNED TO THE * REQUESTING PROGRAM (REQUEST CODE 5) OR * ASSIGNED GLOBALLY (REQUEST CODE 16). * * (P) JSB EXEC * (P+1) DEF *+5 (DEFINE RETURN) * (P+2) DEF RCODE ( " REQUEST CODE) * (P+3) DEF #TRAK ( " # TRACKS TO RELEASE) * (P+4) DEF STRAK ( " STARTING TRACK #) * (P+5) DEF DISC ( " DISC LU # ) * (P+6) - RETURN - * * t RCODE DEC M * #TRAK DEC N * STRAK NOP * DISC NOP * * M = 5 RELEASE PROGRAM TRACK * = 16 RELEASE GLOBAL TRACK * * #TRAK: = N, TO INDICATE THE NUMBER OF CONTIG- * UOUS TRACKS TO RELEASE BEGINNING * AT THE TRACK NUMBER IN 'STRAK'. * * = -1, TO MEAN RELEASE ALL TRACKS ASSIGNED * TO THE USER PROGRAM - * VALID ONLY FOR PROGRAM ASSIGNED TRACKS * IN THIS CASE, THE 'STRAK' ANDNk * 'DISC' PARAMETERS NEED NOT * BE INCLUDED. * * STRAK: THE STARTING TRACK OF THE GROUP TO * BE RELEASED IS STORED IN THIS WORD. * * DISC: THE LOGICAL UNIT NUMBER OF THE DISC * CONTAINING THE TRACKS IS STORED * IN THIS WORD. SKP * * ** TRACK ASSIGNMENT TABLE ** * * THE *TAT* IS A VARIABLE LENGTH TABLE DESCRIBING * THE AVAILABILITY OF EACH DISC TRACK ON THE * SYSTEM DISC AND, IF INCLUDED, THE AUXILIARY DISC. * THE *TAT* IS CONSTRUCTED BY BASED ON * USER PARAMETERS DECLARING THE SIZE OF THE SYSTEM * DISC AND THE AVAILABILITY AND SIZE OF AN AUXILIARY * DISC. EACH TRACK IS REPRESENTED BY A 1-WORD ENTRY. * THE FIRST WORDS OF THE TABLE CORRESPOND TO THE * N TRACKS OF THE SYSTEM DISC, USUALLY 32, 64 OR * 128. THE WORD "TATSD" IN THE BASE PAGE COMMUNI- * CATION AREA CONTAINS THE SIZE OF THE SYSTEM DISC * AS A POSITIVE INTEGER. IF AN AUXILIARLY DISC IS * INCLUDED, THE REST OF THE *TAT* CONTAINS 1-WORD * ENTRIES TO DESCRIBE THE TRACKS ON THAT DISC. * RTGEN INITIALIZES THE PROTECTED TRACKS OF THE * SYSTEM DISC TO BE ASSIGNED TO THE SYSTEM (PERM- * ANENTLY UNAVAILABLE). * THE CONTENTS OF A TRACK ASSIGNMENT ENTRY WORD * MAY BE ONE OF THE FOUR VALUES: * * 0 - AVAILABLE FOR ASSIGNMENT * 100000 - ASSIGNED TO THE SYSTEM (OR PROTECTED) * 077777 - ASSIGNED GLOBALLY * NNNNN - USER PROGRAM ASSIGNMENT. NSNNNN IS THE * ID SEGMENT ADDRESS OF THE PROGRAM. * * THE WORD "TATLG" IN THE BP COMMUNICATION AREA * CONTAINS THE NEGATIVE LENGTH OF THE TAT. * THE WORD "TAT" CONTAINS THE FWA OF THE TABLE. * * ** VARIABLE NUMBER OF SECTORS PER TRACK ON FIXED-HEAD SYSTEMS ** * * ONE RTE CAN ACCOMODATE TWO FIXED-HEAD * DISC UNITS TERMED THE SYSTEM DISC (LU #2) * AND THE AUXILIARY DISC (LU#3). THESE DISCS * MAY BE DIFFERENT MODELS OF A FIXED-HEAD * DISC AND WITH DIFFERING NUMBER OF SECTORS * PER TRACK. FOR THIS REASON THE WORDS * 'SECT2' AND 'SECT3' IN THE BASE PAGE * COMMUNICATION AREA CONTAIN THE NUMBER OF * SECTORS PER TRACK FOR LOGICAL UNITS 2 AND 3. * * SKP * TRACK ALLOCATION (USER CALL) * DISCA CCB,RSS SET DISC1 LDB XEQT ENTRY LDA RQCNT INSURE ADA DM4 THAT SSA 4 PARAMETERS ARE SUPPLIED. JMP DERR1 -NO, ERROR 'DR01' * LDA RQP2,I GET '#TRAK' PARAMETER TO CHECK AND C100K 'N'. REMOVE BIT 15, SZA,RSS -ERROR IF JMP DERR2 #TRAK = 0. * ELB,CLE,ERB JSB $DREQ CALL FOR CONTIGUOUS ALLOCATION * SZB IF TRACKS ALLOCATED, JMP DSC3 CONTINUE. * * NO TRACKS ARE AVAILABLE * CCA CHECK SUSPENSION LDB RQP2,I PARAMETER. SSB IF BIT 15 = 1, GO TO SET STRAK JMP DSC3 = -1 AND RETURN TO CALLER. * * SUSPEND PROGRAM - LINK INTO DISC SUSPENSION LIST * JSB $LIST SUSPEND OCT 505 PROGRAM JMP $XEQ - EXIT - * * AVAILABLE TRACK FOUND * DSC3 STA RQP3,I SAVE STARTING TRACK #. LDA SECT2 SET TO STORE CPB D3 # SECTORS PER TRACK IN LDA SECT3 'SECT#' DEPENDING ON LU # IN B. STA RQP5,I SET # SECTORS. * STB RQP4,I SET DISC LOGICAL UNIT #. * DSC4 LDA RQRTN SET *XSUSP* TO STA XSUSP,I BE EXIT ADDRESS JMP $XEQ - E\XIT -. * D3 DEC 3 DM2 DEC -2 DM4 DEC -4 C100K OCT 77777 * * * TRACK RELEASE (USER CALL) * DISC2 CLA,CLE,RSS SET DISCB CLA,CCE,INA ENTRY STA TEMP7 SWITCH LDA RQCNT INSURE SZA,RSS THAT AT LEAST 1 PARAMETER GIVEN. JMP DERR1 - NO, ERROR LDA XEQT (A)= ID SEGMENT ADDRESS LDB RQP2,I GET PARAMETER: CPB DM1 IF = -1, JMP DSC7 GO TO RELEASE ALL FOR THIS PROG * LDA RQCNT INSURE THAT THE ADA DM3 STRAK AND DISC PARAMETERS SSA ARE PROVIDED. JMP DERR1 -NO, ERROR * LDA RQP4,I GET DISC LU #. CLE,ERA CHECK VALIDITY. CPA D1 IF NOT 2 OR 3 CLB,RSS THEN GO SEND HIM JMP DERR2 DOWN THE TUBES. * SEZ IF LU 3 USE ADB TATSD AUXILIARY DISC ADB RQP3,I ADD STRAK FROM USER CALL. * LDA RQP2,I GET #TRAK. CMA,INA SET NEGATIVE FOR SSA,RSS COUNTER. ERROR IF 0 OR JMP DERR2 ORIGINALLY NEGATIVE. STA TEMP1 SET COUNTER. * LDA TEMP7 RELEASE CCE,SZA NON-GLOBAL JMP DSC8 GLOBAL * ADB TAT ADD THE TAT ADDRESS DSC5 LDA B,I GET CURRENT TRACK ASSIGNMENT CPA XEQT COMPARE TO PROGRAM ID SEG ADDRESS CLA,RSS JMP DERR3 OTHERWISE, REQUEST ERROR. STA B,I = 0 TO BE AVAILABLE. INB ADD 1 TO TAT ADDRESS. ISZ TEMP1 -INDEX COUNTER. JMP DSC5 -MORE * DSC6 JSB $SDSK FINISHED-SCHEDULE DISC SUSP PROGS * JMP DSC4 GO ADVANCE RETURN ADDRESS AND EXIT * DSC8 LDA TEMP1 SET A TO NUMBER OF TRACKS(-) JSB $CREL TRY CONDITIONAL RELEASE STB XA,I SET RESULT IN USER A REG. JMP DSC4 AND GO EXIT * DSC7 SEZ IF GLOBAL RELEASE JMP DERR1 SHOT DOWN THE CLOD. JSB $SDRL RELEASE ALL TRACKS JMP DSC6 GO SCHEDULE ALL WAITING PGMS. * * * $CREL CONDITIONALLY RELEASES SYSTEM OR GLOBAL TRACKS * THE CONDITION BEING: * A) THAT THEY ARE ASSIGNED AS EXPECTED AND * B) THAT THEY ARE NOT IN A DISC I/O QUEUE. * * CALLING SEQUENCE: * * E = 1 IF GLOBAL TRACK RELEASE * E = 0 IF SYSTEM TRACK RELEASE * A = THE NEGATIVE OF THE NUMBER OF TRACKS TO RELEASE. * B = THE FIRST TRACK'S OFFSET IN THE TAT. * * JSB $CREL * * RETURN CONDITIONS ARE: * * B = -1 ONE OR MORE OF THE TRACKS IS IN USE * = -2 ONE OR MORE OF THE TRACKS IS NOT ASSIGNED AS SPECIFIED. * = 0 TRACKS WERE RELEASED. * $CREL NOP ADB TAT GET THE TAT ADDRESS TO B STB TEMP4 STB TEMP7 ENTRY IN TAT SPC 1 STA TEMP1 SET THE COUNTERS STA TEMP6 LDA C100K SET UP THE SEZ,RSS ASSIGNMENT FLAG INA STEP GLOBAL TO SYSTEM STA TEMP2 SAVE IT LDA TATSD COMPUTE THE DISC LU ADA TAT A IS THE TAT POSITION CMA,INA (-) OF THE FIRST WORD OF LU 3. ADA B SUBTRACT FROM TAT POSITON OF FIRST TRACK CLE,SSA IF NEG. THEN ADJUST ADA TATSD FOR LU 2 (SETS E) STA TEMP8 SET THE TRACK NUMBER CLB,SEZ,INB,RSS SET B TO INB THE DISC LU LESS ONE. STB $OTRL SAVE THE LU ISZ $OTRL ADD THE MISSING ONE. ADB DRT GET THE EQT ADDRESS LDA B,I INTO JSB $CVEQ EQT1 SPC 1 DSC9 LDA TEMP7,I GLOBAL CPA TEMP2 TRACK? RSS YES-GO SEE IF IN USE JMP DSC15 NO-RETURN TO PROG WITH A=-2 LDB EQT1,I GET REQUESTS QUEUED ON DISC ELB,CLE,ERB STRIP POSSIBLE SIGN BIT DSC10 STB TEMP9 DISC QUEUE EXHAUSTED? SZB,RSS JMP DSC12 YES-GO TO NEXT TRACK INB NO-SEE IF REQUEST LDA B,I IS FOR THIS TRACK ALF,ALF AND D3 CPA $OTRL SAME LU? I.E. DISC? RSS YES-CHECK IF SAME TRACK JMP DSC11 NO ADB D3 LDA B,I CPA TEMP8 SAME TRACK? JMP DSC14 YES-RETURN WITH A=-1 SPC 1 DSC11 LDB TEMP9,I GO TO NEXT REQUEST JMP DSC10 IN QUEUE SPC 1 DSC12 ISZ TEMP7 SET UP FOR NEXT TRACK ISZ TEMP8 CHECK NEXT TRACK ISZ TEMP1 ALL TRACKS CHECKED? JMP DSC9 NO TRY AGAIN SPC 1 DSC13 STB TEMP4,I CLEAR ALL ISZ TEMP4 TRACKS ISZ TEMP6 JMP DSC13 SETUP TO RETURN JSB $SDSK SCHEDULE ANY WAITING PGMS. JMP $CREL,I AND RETURN SPC 1 DSC14 CCB,RSS STORE B REGISTER DSC15 LDB DM2 TO INDICATE WHY NO TRACKS JMP $CREL,I RELEASED AND RETURN * * DISC REQUEST ERROR SECTION * DERR1 CLB,INB,RSS -ILLEGAL DISC REQUEST - DR01 - DERR2 LDB D2 -ILLEGAL TRACK # - DR02 - JMP DERR DERR3 LDB D3 -TRACK NOT ASSIGNED TO PROG- DR03 DERR LDA DRA (A) = DR IN ASCII. $ERAB ADB AS00 ADD ASC "00" JSB $ERMG PRINT ERROR DIAG. AND ABORT PROG JMP $XEQ -EXIT- * DRA ASC 1,DR AS00 ASC 1,00 * * * SUBROUTINE: <$OTRL> * * PURPOSE: THIS SUBROUTINE SCANS THE TAT * (TRACK ASSIGNMENT TABLE) AND * RELEASES ANY TRACKS ASSIGNED * TO THE PROGRAM WHOSE ID SEGMENT * ADDRESS IS IN THE A REGISTER. * * * CALL: (A) = ID SEGMENT ADDRESS OF PROGRAM * WHOSE TRACKS ARE TO BE RELEASED * (P) JSB $OTRL * (P+1) -RETURN- * * $OTRL NOP STA TEMP3 SAVE ID SEGMENT ADDRESS LDA *-2 AND RETURN ADDRESS FOR STA $SDRL $SDRL ROUTINE AND JUMP JMP SDSC1 TO IT SKP * * SUBROUTINE: < $SDRL > * * PURPOSE: THIS ROUTINE SCANS THE TAT * (TRACK ASSIGNMENT TABLE) AND * RELEASES ANY TRACKS AS SIGNED * TO THE PROGRAM WHOSE ID SEGMENT * IS DEFINED IN *XEQT* OR ANY TRACKS ASSIGNED * GLOBALLY DEPENDING ON A REG CONTENTS ON ENTRY. * * * EXCEPTION: IF THE NAME OF THE SUBJECT PROGRAM IS * "EDIT",OR "D.RTR" AN IMMEDIATE EXIT IS MADE TO * AVOID RELEASING SAVED SOURCE FILES AND * DIRECTORY TRACKS IN THE NAME OF THESE * PROGRAMS. * * CALL: (A) = ID SEGMENT ADDRESS OF PROGRAM * OR 077777B (GLOBAL FLAG) * (P) JSB $SDRL * (P+1) -RETURN- * * $SDRL NOP STA TEMP3 DLD IDADD,I GET THE ID ADDRESSES OF D.RTR IDADD EQU *-1 AND EDIT CPA TEMP3 IF D.RTR RSS CPB TEMP3 OR EDIT JMP $SDRL,I DO NOT RELEASE THE TRACKS * SDSC1 LDA TAT SET *TAT* STA TEMP1 ADDRESS LDA TATLG AND TAT LENGTH STA TEMP2 AS INDEX. CLB (B) = 0 FOR RELEASE * SDSC2 LDA TEMP1,I GET CURRENT TRACK ASSIGNMENT. CPA TEMP3 IF ASSIGNED TO THIS PROGRAM, STB TEMP1,I RELEASE IT. ISZ TEMP1 SET ISZ TEMP2 FOR JMP SDSC2 NEXT TRACK. JSB $SDSK SCHEDULE DISC SUSPENDED PROGRAMS JMP $SDRL,I -FINISHED- * SKP * * SYSTEM SUBROUTINE: < $DREQ> * * PURPOSE: THIS SUBROUTINE PROVIDES FOR THE * ALLOCATION OF 'N' CONTIGUOUS TRACKS * FOR BOTH SYSTEM ROUTINES AND NORMAL * USER PROGRAMS. THE 'N' CONTIGUOUS * TRACKS ALLOCATED WILL BE ON THE SAME * DISC UNIT, NO SPANNING OF DISCS WITH * ONE ALLOCATION IS ALLOWED. * * CALL: (A) = NUMBER OF CONTIGUOUS TRACKS * (B) = : 0 FOR CALL FROM SYSTEM ROUTINE * : (XEQT) FOR AN ACTUAL USER * REQUEST. THE ID SEGMENT * ADDRESS (XEQT) IS STORED IN * THE ASSIGNED TRACK WORDS IN * THE -TAT-. * : (077777B) FOR A GLOBAL ASSIGNMENT REQUEST. * THIS OCTAL NUMBER IS STORED IN THE * ASSIGNED TRACK WORDS IN THE -TAT-. * * (P) JSB $DREQ * (P+1) -RETURN- * * ON RETURN: 1) B = 0 IF N TRACKS WERE * NOT AVAILABLE * * 2) A = STARTING TRACK ADDRESS * OF N TRACKS. * B = LOGICAL UNIT # OF DISC * * $DREQ NOP CMA,INA SET COUNT NEGATIVE FOR LOOPS STA TEMP1 SAVE '-N' * CLA,INA ALLOCATION IS TOP DOWN FOR SYS CLE,SZB REQUEST AND BOTTOM UP JMP DREQ0 FOR USER REQUEST - USER JMP. * CCA,CCE SET INCREMENT VALUE AND SYSTEM FLAG LDB SIGN B= SYS TAT FLAG WORD DREQ0 STB TEMP6 SAVE ASSIGNMENT VALUE. STA $DREL SET TABLE INCREMENT VALUE (+1 OR -1) * LDB TAT SET *TAT* LDA B COMPUTE ADDRESS OF LU 3'S ADA TATSD TAT POSITION SEZ IF SYSTEM RQ. ADA $DREL SUBTRACT ONE STA TEMP7 SET ADDRESS OF FIRST WORD ON OTHER DISC LDA TATLG AND TAT LENGTH STA TEMP4 AS INDEX. CMA,SEZ IF SYSTEM RQ. ADB A SET TO START AT THE TOP * DREQ1 LDA B,I GET CURRENT TRACK ASSIGNMENT. SZA,RSS IF NOT ASSIGNED, JMP DREQ3 CHECK FOR N CONTIGUOUS. * DREQ8 ADB $DREL SET FOR DREQ5 ISZ TEMP4 NEXT JMP DREQ1 TRACK. * DREQ2 CLB NOT AVAILABLE, EXIT JMP $DREQ,I WITH (B) = 0. * * AVAILABLE TRACK FOUND - CHECK NEXT 'N-1' TRACKS * DREQ3 STB TEMP3 (B) = FIRST TRACK TAT INDEX. LDA TEMP1 SET STA TEMP2 'N' AS INDEX. DREQ4 LDA B,I CHECK CURRENT SZA TRACK ASSIGNMENT. JMP DREQ8 -ASSIGNED, CONTINUE OTHER SCAN. * ISZ TEMP2 INDEX -'N' RSS NOT ZERO, CHECK NEXT TRACK. JMP DREQ6 - FOUND N TRACKS - * ADB $DREL INDEX TO NEXT TRACK CPB TEMP7 DISC (LU 2)? JMP DREQ5 YES - DO NOT SPAN * ISZ TEMP4 INDEX AND TRACK INDEX. JMP DREQ4 -NOT FINISHED WITH TAT SIZE. * JMP DREQ2 NOT N AVAILABLE. * * N CONTIGUOUS TRACKS FOUND * DREQ6 SEZ IF SYSTEM REQUEST STB TEMP3 SET START ALLOCATION ADDRESS LDB TEMP3 SET THE FIRST TRACK TAT ADDRESS. LDA TEMP6 SET TRACK WORD DREQ7 STA B,I = 100000 FOR SYSTEM USE INB OR TO THE ID SEGMENT ADDRESS ISZ TEMP1 OF THE USER PROGRAM OR TO JMP DREQ7 077777B FOR GLOBAL ASSIGNMENT. * LDA TEMP7 GET ADDRESS OF LU 3 TR 0 IN TAT CMA,SEZ,RSS AND SUBTRACT FROM INA ADA TEMP3 ALLOCATED POSITION CLE,SSA IF ON LU 3 THEN WE HAVE THE TRACK ADA TATSD ELSE NOW WE HAVE IT (E SET TOO) CLB,CME,INB TURN E AROUND TO LEAST LU BIT ELB SET DISC LU IN B JMP $DREQ,I -EXIT-. SPC 1 TEMP1 NOP SKP * * SYSTEM SUBROUTINE: < $DREL> * * PURPOSE: THIS ROUTINE RELEASES 'N' CONTIGUOUS * TRACKS (ASSIGNED TO THE SYSTEM) * BEGINNING AT TRACK 'M'. * * CALL: (A) = 'M' - STARTING TRACK # (+ SIZE OF * SYSTEM DISC IF LU #3) * (B) = 'N' - # OF CONTIGUOUS TRACKS * (P) ) JSB DREL * (P+1) -RETURN- A = 0. * * $DREL CXA CXA FOR X,Y CONFIGURATION ADA TAT COMPUTE *TAT* ADDRESS STA TEMP1 OF STARTING ADDRESS. LDA A,I GLOBAL TRACKS SSA,RSS ARE NOT TO JMP $DREL,I BE RELEASED. CMB,INB SET 'N' AS INDEX. CLA SET CURRENT STA TEMP1,I TRACK ISZ TEMP1 RELEASED INB,SZB JMP *-3 JSB $SDSK SCHEDULE ANY SUSPENDED PROGRAMS. JMP $DREL,I -EXIT- * * SUBROUTI% NE: < $SDSK > * * PRUPOSE: THIS ROUTINE CALLS FOR THE * SCHEDULING OF ALL USER PROGRAMS * SUSPENDED BECAUSE OF DISC TRACK * AVAILABILITY. * * CALL: (P) JSB $SDSK * (P+1) - RETURN - A = 0 * * $SDSK DEF IDADD LINK FOR START UP CODE ISZ $LIST FORCE ENTRY INTO DISPATCHER. DSKD1 LDB SUSP4 GET DISC SUSPENSION LIST POINTER. CCE,SZB,RSS IF EMPTY LIST, JMP $SDSK,I EXIT. * JSB $LIST CALL *SCHEDULER* TO OCT 401 LINK INTO SCHEDULE LIST. * JMP DSKD1 SCHEDULE NEXT PROGRAM HED * EXEC - ERROR MESSAGE SECTION * * * ERROR SECTION * * THE FOLLOWING DIAGNOSTICS ARE OUTPUT ON THE * SYSTEM TELETYPEWRITER ON DETECTION OF: * * 1) VALID MEMORY PROTECT VIOLATION (I.E THE * INSTRUCTION CAUSING THE VIOLATION IS * NOT JSB EXEC. * * MP -PNAME- -PADDR- * * 2) REQUEST CODE UNDEFINED OR ILLEGAL * NUMBER OF PARAMETERS * * RQ -PNAME- -PADDR- * * THE ROUTINE -$ERMG- IS USED TO FORMAT * THE DIAGNOSTIC AND CALL FOR ITS OUTPUT. * * ERE01 LDA RE (A) = 'RE' RSS MPERR LDA MP (A) = 'MP' RSS * RQERR LDA RQ1 (A) 'RQ' LDB BLANK (B) = BLANKS JSB $ERMG JMP $XEQ * MP ASC 1,MP RQ1 ASC 1,RQ RE ASC 1,RE * * SUBROUTINE: <$ERMG> * * PURPOSE: THIS ROUTINE FORMATS A DIAGNOSTIC * MESSAGE WHICH CONTAINS A FOUR * CHARACTER MNEMONIC DESCRIBING THE * ERROR WITH THE PROGRAM NAME AND * LOCATION OF THE ERROR. IT THEN * CALLS THE ROUTINE <$SYMG> TO * OUTPUT THE MESSAGE. * * CALL: (A),(B) CONTAIN A 4 ASCII CHARACTER * MNEMONIC OR CODE DESCRIBING THE ERROR * * (P) JSB $ERMG * (P+1) - RETURN - (REGISTERS MEANINGLESS) SKP * $ERMG JMP EXINT FIRST ENTRY BY JMP GOES TO INIT * STA MSG+1 SET ERROR MNEMONIC IN STB MSG+2 FIRST 4 vJNLHCHARACTERS OF MESSAGE. * LDB XEQT SET (B) = ADDRESS OF POINT OF ADB D8 SUSPENTION IN ID-SEG. STB $SDSK AND SAVE FOR ABORT OPTION ADB D4 SET (B) = ADDRESS OF 3-WORD NAME LDA B,I AND SET STA MSG+4 PROGRAM INB NAME LDA B,I IN STA MSG+5 MESSAGE. CLE,INB (E=0 FOR ASCII CONVERSION) LDA B,I AND C377 IOR B40 STA MSG+6 INB GET THE STATUS LDA B,I WORD AND IF RAL,CLE,SLA,ERA ABORT OPTIN IN EFFECT JMP NOABT GO SET IT UP. * ERM LDA XSUSP,I GET LOCATION OF ERROR JSB $CVT3 CONVERT TO OCTAL/ASCII FORMAT LDB A,I MAKE STB MSG+7 5-DIGIT MEMORY ADDRESS. INA SET DLD A,I GET THE OTHER TWO WORDS DST MSG+8 AND SET IN THE MESSAGE * LDA MSGA CALL TO JSB $SYMG OUTPUT DIAGNOSTIC. * LDA XEQT NOW GO JSB $ABRT ABORT THE PROGRAM * JMP $ERMG,I ND4 DEC 4 D8 DEC 8 C377 OCT 177400 * NOABT ADB DM6 SET A,B ADDRESS STB DSTAD SET DOUBLE STORE ADDRESS DLD DLD MSG+1 GET THE ERROR CODE DST DSTAD,I SET A,B TO THE ERROR CODE DSTAD EQU *-1 DOUBLE STORE ADDRESS * CCA,CLE USE THE RETURN ADDR - 1 FOR CPB BLANK (BUT IF "MP","RQ", OR "RE" JMP ERM ABORT ANYWAY) ADA RQRTN STA $SDSK,I THE RETURN ADDRESS TO THE PGM. JSB $LIST OCT 501 JMP $ERMG,I RETURN * DM6 DEC -6 * * MSGA DEF *+1 * MSG DEC -18 EXINT STB $SDSK,I SET THE TWO SPECIAL ID-SEG. ADDS ASC 1, XOR 40 WHEN EXECUTED BLANK ASC 1, LIB 6 SZB,RSS IF NOT AN MX CPU JMP NOXY DON'T ENABLE X,Y SAVE,RESTORE * LDB $DREL ELSE SET A CXA STB SAVXY IN SAVE REG. ROUTINE LDB DLD AND A DLD IN STB PVEXC IN THE RESORE REG. ROUTINE NOXY LDB $SDSK,I RESTORE B FOR $CGRN JMP $CGRN GO SET UP RN CODE IF ANY LDB B,I GET THE ADDR OF D.RTR'S ID-SEG. JMP $SCLK GO START THE CLOCK SPC 1 * A EQU 0 B EQU 1 HED * EXEC -- REQUEST CODE TABLE * *** REQUEST CODE TABLE *** * * THIS DEFINES THE RELATION FOR SYSTEM * REQUEST CODES AND CORRESPONDING PROCESSORS. * THE TABLE CONSISTS OF ONE-WORD ENTRIES IN * NUMERIC ORDER CORRESPONDING TO THE DEFINED * SYSTEM REQUEST CODES. THE CONTENTS OF EACH * ENTRY IS THE BASE PAGE LINKAGE ADDRESS OF * THE WORD CONTAINING THE ENTRY POINT ADDRESS * * OF THE PROCESSOR. AN -EXT- MUST BE USED * WITH THE -DEF- IN DEFINING THE TABLE. * * THE WORD LABELED -CODE#- CONTAINS THE NEGATIVE OF * ONE + THE TOTAL # OF REQUEST CODES. * EXT $IORQ TBL DEF $IORQ CODE 1 I/O READ DEF $IORQ CODE 2 I/O WRITE DEF $IORQ CODE 3 I/O CONTROL * DEF DISC1 CODE 4 DISC TRACK ALLOCATION DEF DISC2 CODE 5 DISC TRACK RELf EASE * EXT $MPT1 DEF $MPT1 CODE 6 PROGRAM COMPLETION * EXT $MPT2 DEF $MPT2 CODE 7 OPERATOR SUSPENSION * EXT $MPT3 DEF $MPT3 CODE 8 LOAD PROGRAM SEG$MNT * EXT $MPT4 DEF $MPT4 CODE 9 SCHEDULE WITH WAIT * EXT $MPT5 DEF $MPT5 CODE 10 SCHEDULE PROGRAM * EXT $MPT6 DEF $MPT6 CODE 11 REAL TIME/DATE * EXT $MPT7 DEF $MPT7 CODE 12 TIME SELECTION * DEF $IORQ CODE 13 I/O DEVICE STATUS * EXT $MPT9 DEF $MPT9 CODE 14 GET-PUT STRING * DEF DISCA CODE 15 GLOBAL TRACK ASSIGNMENT DEF DISCB CODE 16 GLOBAL TRACK RELEASE * DEF $IORQ CODE 17 READ CLASS I/O DEF $IORQ CODE 18 WRITE CLASS I/O DEF $IORQ CODE 19 CONTROL CLASS I/O DEF $IORQ CODE 20 WRITE-READ CLASS I/O * EXT $GTIO DEF $GTIO CODE 21 GET CLASS I/O * EXT $MPT8 DEF $MPT8 CODE 22 SWAP/CORE USAGE REQUEST * DEF $MPT4 CODE 23 SCHEDULE WITH WAIT/WAIT * DEF $MPT5 CODE 24 SCHEDULE NO WAIT/WAIT * * * * DEFINE END OF TABLE AND # ENTRIES IN TABLE. * -ADDITIONAL REQUESTS MAY BE INSERTED * AT THIS POINT. * TBLE EQU * * * THE NAMTB WHICH FOLLOWS CONTAINS A BIT FOR EACH PRAMETER * IN AN EXEC CALL WHICH SHOULD BE CALLED BY NAME...THAT IS * THE SYSTEM WILL NORMALLY STORE INTO THE LOCATION DEFINED * BY THE PRAMETER. THIS TABLE IS USED TO CHECK SUCH * PRAMETERS TO SEE IF THEY ARE ABOVE THE CURRENT * FENCE ADDRESS. * * 8 BITS ARE DEVOTED TO EACH CALL. THE LEAST BIT REFERS * TO PRAMETER NUMBER TWO AND SO ON. * THE 'L' AND 'H' NUMBERS ARE SET UP TO REFER TO EACH * PRAMETER BY NUMBER WHERE L REFERS TO THE LOW OR ODD * CALL FOR EACH WORD AND H REFERS TO THE HIGH OR EVEN CALL. * H = HIGH(EVEN CALL) * L = LOW(ODD CALL) * NAMTB ABS L3 0/1 (READ BUFFER) d ABS 0 2/3 ABS H3+H4+H5 4/5 (ALLOCATE PRAMS) ABS 0 6/7 ABS L8 8/9 (SCHEDULE) ABS L2+L3+H8 10/11 (SCHED WWAIT),(TIME VALUES) ABS L3+L4+L5 12/13 (STAT RETURN) ABS L3+L4+L5+H3 14/15 (G/S PRM.ST),(GL.ALC.PRM) ABS L7 16/17 (CLASSWORD FOR 17,18,20) ABS H7+L4 18/19 (CLASSWORD) ABS H7+L3+L5+L6+L7 20/21 (CLASSWORD,BUFFER,AND OPT PRAMS) ABS L8 22/23 (SCHEDULE W WAIT/WAIT) ABS H8 24/25 (SCHEDULE NO WAIT/WAIT) SPC 2 L2 EQU 1 L3 EQU 2 L4 EQU 4 L5 EQU 10B L6 EQU 20B L7 EQU 40B L8 EQU 100B H2 EQU 400B H3 EQU 1000B H4 EQU 2000B H5 EQU 4000B H6 EQU 10000B H7 EQU 20000B H8 EQU 40000B HED * * SYSTEM BASE PAGE COMMUNICATION AREA * * . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * XI EQU .-1 X,Y SAVE ADDRESS EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15 - WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU 5.+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 9 PARAMETERS) RQP9 EQU .+32 * * DEFINITION OF SYSTEM LISTS (QUEUES) * * SKEDD EQU .+33 'SCHEDULE' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BABKGSMUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK RON LU 3 (AUX.) DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND * ORG * PROGRAM LENGTH END EXEC uASMB,R ** $TRRN RN-LU SYSTEM ROUTINES ** HED ** REAL-TIME EXECUTIVE $TRRN RN-LU SYSTEM ROUTINES ** * NAME: $TRRN * SOURCE: 92001-18012 * RELOC: 92001-16012 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM $TRRN,0 92001-16012 750326 * EXT $RNTB,$IDNO,$SCD3,$SCLK ENT $TRRN,$CGRN,$ULLU * SUP A EQU 0 B EQU 1 * * * $TRRN IS THE RN/LU LOCK CLEAN UP ROUTINE. * IT IS CALLED BY THE DISPATCHER WHEN EVER A PROGRAM COMPLETES * (THE CALL IS BY WAY OF THE REENTRENT CLEAN UP ROUTINE. * * ITS FUNCTION IS TO RELEASE ANY LOCAL LOCKS AND ANY LOCAL * ALLOCATIONS THE PROGRAM HAS. IT ALSO RELEASES ANY LU * LOCKS THE PROGRAM HAS. * * CALLING SEQUENCE: * * LDB ID-SEGMENT ADDRESS * JSB $TRRN * NORMAL RETURN REGISTERS MEANING LESS * * $TRRN NOP JSB $ULLU RELEASE ANY LU LOCKS / SET UP TEMPS LDA D$RN SET THE TABLE ADDRESS FOR STA TEMP1 BOTH LOOPS STA TEMP2 LDA A,I GET THE TABLE SIZE CMA,INA,SZA,RSS SET NEGATIVE / IF ZERO EXIT JMP $TRRN,I * STA TEMP3 SET LOOP COUNTERS STA RQP8 FOR BOTH LOOPS * TRRN1 ISZ TEMP2 DALLOCATE LOOP LDA TEMP2,I GET THE RN ALF,ALF PUT OWNER FLAG IN LOW A AND B377 MASK CPA RQP5 IF OWNED BY COMPLETING STA TEMP2,I PROGRAM FLAG FOR NEXT LOOP ISZ RQP8 STEP COUNTER JMP TRRN1 LOOP IF NOT DONE * TRRN3 ISZ TEMP1 LOCAL LOCK LOOP LDA TEMP1,I GET THE RN AND B377 IF LOCALC LOCK CPA RQP5 TO COMPLETING PROGRAM JMP TRRN6 GO RELEASE THE LOCK * TRRN4 ISZ TEMP3 STEP COUNT JMP TRRN3 IF NOT DONE LOOP * LDB TEMP2 GET THE DEALLOCATE FLAG LDA D$RN AND THE ALLOCATE SUSPEND FLAG SZB,RSS IF ANY DEALLOCATED JSB $SCD3 SCHEDULE ANY WAITING PROGRAMS JMP $TRRN,I RETURN * TRRN6 XOR TEMP1,I CLEAR THE LOCK STA TEMP1,I FLAG AND RESET SZA,RSS IF DEALLOCATED STA TEMP2 SET FLAG FOR END OF LOOP JSB SRNW SCHEDULE ANY WAITERS FOR THIS RN JMP TRRN4 RETURN TO LOOP SKP * $CGRN IS THE CLEAR GLOBAL RN ROUTINE FOR USE BY DRIVERS * AND OTHER SUCH USER WRITTEN SYSTEM PROGRAMS * * CALLING SEQUENCE: * * LDA RN SET A TO USER RN WORD * JSB $CGRN CALL THIS ROUTINE * RETURN REGISTERS MEANING LESS. * $CGRN JMP TEMP1 INITILIZE ON FIRST JUMP TO HERE. STA B SAVE THE RN NUMBER AND B377 CACULATE THE TABLE ADA D$RN ADDRESS STA TEMP1 AND SET IT LDA B GET RN WORD AGAIN IOR B377 SET THE GLOBAL FLAG CPA TEMP1,I IS THIS A LEGAL RN? RSS YES SKIP JMP $CGRN,I NO RETURN NO ACTION AND C377 CLEAR THE RN STA TEMP1,I AND RESET IT JSB SRNW SCHEDULE ANY WAITING PROGRAMS JMP $CGRN,I RETURN SPC 3 * SRNW SCHEDULES ANY PROGRAMS SUSPENDED IN THE '3' LIST * WITH A FLAG = (TEMP1) (USUALLY RN LOCK REQUEST SUSPEND) * SRNW NOP LDA TEMP1 GET THE FLAG WORD JSB $SCD3 SCHEDULE ALL SUCH WAITERS JMP SRNW,I RETURN SKP * * THIS SUBROUTINE RELEASES ALL LU'S LOCKED BY A PROGRAM * AND SCHEDULES ANY PROGRAMS WAITING FOR AN * LU OR AN RN. * * CALLING SEQUENCE: * * LDB ID ADDRESS * JSB $ULLU * RETURN - REGISTERS MEANNINGLESS * $ULLU NOP JSB $IDNO K GET THE ID NUMBER STB RQP5 SET FOR $TRRN BLF,BLF PUT THE FLAG WORD STB RQP6 IN HIGH END ADB RQP5 AND IN BOTH ENDS STB RQP7 SET IN RQP7 LDA LUMAX SET UP TO SCAN THE CMA,CLE,INA DRT STA TEMP2 * LDA DRT GET THE DRT ADDRESS STA TEMP3 AND SET FOR LOOP ULLU1 LDA TEMP3,I SEARCH FOR ALL AND B3700 LOCKED LU'S SZA THIS ONE LOCKED? JMP ULLU4 YES - GO TEST * ULLU2 ISZ TEMP3 NO / YES STEP TO NEXT ENTRY ISZ TEMP2 IF NOT DONE JMP ULLU1 TRY NEXT ONE * CLB,SEZ,RSS IF NONE RELEASED JMP $ULLU,I JUST EXIT * STB TEMP1,I CLEAR THE RN JSB SRNW SCHEDULE RN WAITERS LDA D$RN AND ALLOCATION JSB $SCD3 WAITERS JMP $ULLU,I EXIT * ULLU4 CLB LSL 10 SHIFT LOCK FLAG TO LOW B ADB D$RN AND INDEX INTO THE RN TABLE LDA B,I GET THE RN FLAG CPA RQP7 CURRENT PROGRAM? CCE,RSS YES SKIP JMP ULLU2 NO CONTINUE SEARCH * STB TEMP1 YES SET ADDRESS FOR SCHEDULE LDA TEMP3,I GET THE DRT ENTRY AND C3700 CLEAR THE FLAG STA TEMP3,I RESET IT AND JMP ULLU2 CONTINUE SEARCH * D$RN DEF $RNTB B377 OCT 377 C377 OCT 177400 B3700 OCT 3700 C3700 OCT 174077 SPC 2 TEMP1 STA D$RN INITIALIZE CODE TEMP2 LDB B,I GET ADDRESS OF TEMP3 JMP $SCLK D.RTR AND GO START CLOCK * DRT EQU 1652B LUMAX EQU 1653B RQP5 EQU 1704B RQP6 EQU 1705B RQP7 EQU 1706B RQP8 EQU 1707B * ORG * PROGRAM LENGTH END $TRRN ^ASMB,R,Q,C ** RT SCHEDULER MODULE ** HED RTE SCHEDULER/MESSAGE PROCESSOR * NAME: SCHED * SOURCE: * RELOC: * PGMR: G.A.A.,D.L.S. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM SCHED,0 92001-16012 780810 * SUP ******************************************************************* * ***** AMD ***** JUL,73 * ******************************************************************* * * SCHED ENTRY POINT NAMES * ENT $LIST,$MESS,$CVT3,$CVT1,$ABRT,$TYPE ENT $MPT1,$MPT2,$MPT3,$MPT4,$MPT5,$MPT6 ENT $PARS,$STRT,$SCD3,$INER,$MPT7,$ASTM ENT $MPT8,$IDNO,$WORK,$WATR,$IDSM ENT $MPT9,$RTST,$CVWD,$STRG,$IDEX * * SCHED EXTERNAL REFERENCE NAMES * EXT $XSIO,$IOUP,$IODN,$ERMG,$DREQ EXT $IOCL,$OTRL,$DREL EXT $ERAB,$ZZZZ,$TIME,$PVCN EXT $ERIN,$NOPG,$OPER,$ILST,$NOLG,$LGBS,$NMEM EXT $XEQ,$TMRQ,$ONTM,$ALC,$RTN EXT $BRED,$TIMR,$ETTM,$TIMV,$TREM EXT $RNTB,$CREL,$SYMG,$SDRL EXT $BLLO,$BLUP EXT .MVW * ******************************************************************* * * THE SCHED MODULE OF HP2100 REAL TIME EXECUTIVE CONSISTS OF * * 1. LIST PROCESSORS * 2. LINK PROCESSORS * 3. OPERATOR INPUT MESSAGE PROCESSORS * 4. SYSTEM START UP AND OPER INPUT REQUEST ACKNOWLEDGE * 5. MEMORY PROTECT VIOLATION SCHEDULER PREPROCESSORS * 6. ABORT AND TERMINATION PROCESSORS * ******************************************************************* HED --BUFFERS, CONSTANTS, POINTERS, ETC * TEMP LDA EQT11 ***TEMPORARY WORKING STORAGE4 AREA TEMP1 STA TEMP5 * TEMP2 LDB EQT12 * TEMP3 STB TEMP6 * TEMP4 JSB $RTN * THESE TEMPS ARE USED TO INITIALIZE TEMP5 NOP *** SYSTEM AVAILABLE MEMORY. TEMP6 NOP * AND ALSO TMP JMP $ALC * USED BY $PARS AS CONTIGUOUS BUFFER SPACE WORK JMP GTFMG * $WORK EQU WORK * WPRIO NOP * ASCI BSS 1 * ASCI1 BSS 1 *** ASCI2 BSS 1 DM5 DEC -5 * D2 DEC 2 D4 DEC 4 D5 DEC 5 D6 DEC 6 D7 DEC 7 D9 DEC 9 D14 DEC 14 D15 DEC 15 D17 DEC 17 * D1 OCT 1 D3 DEC 3 B77 OCT 77 B177 OCT 177 B377 OCT 377 * ZERO REP 5 (NOTE: EQUATED TO $IDEX) NOP DEF0 DEF ZERO $IDEX EQU ZERO HED ID-SEGMENT MAP ID-SEGMENT MAP ID-SEGMENT MAP * WORD USE * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 * ! ! ! ! ! ! * 1 LIST LINKAGE * ! ! ! ! ! ! * 2-6 5 WORD TEMPORARY AREA USED FOR SPECIAL FLAGS IN QUEUES ETC. * ! ! ! ! ! ! * 7 PRIORITY * ! ! ! ! ! ! * @ 8 PRIMARY ENTRY POINT * ! ! ! ! ! ! * 9 POINT OF SUSPENSION (XSUSP) * ! ! ! ! ! ! * 10 A REGISTER AT SUSPENSION (XA) * ! ! ! ! ! ! * 11 B REGISTER AT SUSPENSION (XB) * ! ! ! ! ! ! * 12 E/O REGISTERS AT SUSPENSION (XEO) * ! ! ! ! ! ! * @ 13 NAME ( FIRST AND SECOND CHARACTERS ) * ! ! ! ! ! ! * @ 14 NAME (THIRD AND FOURTH CHARACTERS) * ! ! ! ! ! q{ ! * @ 15 NAME (FIFTH CHARACTER)---- TM CL AM SS --- TYPE --- * ! ! ! ! ! ! * 16 NA NP W A O R D --- STATUS- * ! ! ! ! ! ! * 17 TIME LIST LINKAGE WORD * ! ! ! ! ! ! * @ 18 RESOLUTION T -------MULTIPLE----------------------- * ! ! ! ! ! ! * @ 19 LOW ORDER 16 BITS OF EXECUTE TIME LESS 24 HRS IN 10'S MS. * ! ! ! ! ! ! * @ 20 HIGH ORDER 16 BITS OF EXECUTE TIME * ! ! ! ! ! ! * 21 BA FW AT RM RE PW RN --FATHER ID-SEG. NUMBER-- * ! ! ! ! ! ! * 22 THIS WORD IS RESERVED FOR FUTURE IMPROVEMENTS * ! ! ! ! ! ! * @ 23 LOW MAIN ADDRESS * ! ! ! ! ! ! * @ 24 HI MAIN ADDRESS + 1 * ! ! ! ! ! ! * @ 25 LOW BASE PAGE ADDRESS * ! ! ! ! ! ! * @ 26 HI BASE PAGE ADDRESS + 1 * ! ! ! ! ! ! * @ 27 DISC ADDRESS (LU (15),TRACK (14-7),SECTOR(6-0) * ! ! ! ! ! ! * 28 SWAP DISC ADDRESS (LU (15),TRACK (14-7),#TRACKS(6-0) * ! ! ! ! ! ! * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 * * @ WORDS USED IN SHORT ID SEGMENTS SKP * WHERE THE FLAG BITS MEAN: * * TM = TEMP LOAD (COPY OF ID-SEG NOT ON DISC) * CL = CORE LOCK (MAY NOT SWAP) * AM = ALL MEMORY (PROGRAM USES ALL OF ITS AREA) * SS = SHORT SEGMENT (INbDICATES A 9-WORD ID-SEGMENT) * NA = NO ABORT (PASS ABORT ERRORS TO THE PROGRAM INSTEAD) * NP = NO PRAMS ALLOWED ON RESCHEDULE. * W = WAIT BIT (WAITING FOR PROG. WHOES ID-SEG ADD. IS IN WD.2) * A = ABORT ON NEXT LIST ENTRY FOR THIS PGM. * O = OPERATOR SUSPEND ON NEXT SCHEDULE ATTEMPT * R = RESOURCE SAVE (SAVE RESOURCES WHEN SETING DORMANT) * D = DORMANT BIT (SET DORMANT ON NEXT SCHEDULE ATTEMPT) * T = TIME LIST ENTRY BIT (PROG IS IN THE TIME LIST) * BA = BATCH (PROGRAM IS RUNNING UNDER BATCH) * FW = FATHER IS WAITING (HE SCHEDULE WITH WAIT) * AT = ATTENTION BIT (OPERATOR HAS REQUESTED ATTENTION) * RM = RE-ENTRENT MEMORY MUST BE MOVED BEFORE DISPATCHING PGM. * RE = RE-ENTRENT ROUTINE IN CONTROL NOW * PW = PROGRAM WAIT (SOME PROGRAM WANTS TO SCHEDULE THIS ONE ) * RN = RESOURCE NUMBER EITHER OWNED OR LOCKED BY THIS PGM. * * * $LIST STATE TRANSITION TABLE: * * THE FOLLOWING TABLE DETAILS THE STATE TRANSITIONS EFFECTED BY * $LIST. THE MAJOR STATES ARE 0 THRU 6 (DORMANT THRU OP-SUSP) * AND THE STATE MODIFIERS ARE THE ADDITIONAL BITS SET FROM TIME * TO TIME IN THE STATUS WORD. THE BITS WHICH AFFECT OR ARE * MODIFIED BY $LIST ARE (SEE ABOVE DESCRIPTION): * * BIT WEIGHT POSITION * O 10 9 * W 4 12 * R 2 7 * D 1 6 * * THESE BITS ARE COMBINED TO FORM 16 SUBSTATES AS PER THE TABLE BELOW * THE ENTRYS IN EACH SQUARE OF THE TABLE DEFINE THE NEXT STATE AS * FOLLOWS: * * THE FIRST DIGIT IS THE REQUESTED MAJOR TRANSITION (FROM * THE $LIST CALL). * THE SECOND TWO NUMBERS (SEPERATED BY A ".") DEFINE THE NEXT * MAJOR STATE . SUBSTATE. THUS 62.10 INDICATES A OP-SUSPEND * REQUEST (6) CAUSES A MOVEMENT TO I/O SUSPEND (2) SUBSTATE 10 * (THE O BIT IS SET). * A "*" AS THE DESTINATION INDICATES THE CURRENT STATE/SUB- * STATE I.E. NO CHANGE. * ILLEGAL OR UNEXPECTED STATES ARE MARKED WITH "X" * ONLY EXPECTED CALLS ARE PLOTTED. * * IN GENERAL CODE EXTERNAL TO $LIST MOVES PROGRAMS FROM SUB-STATE * TO SUB-STATE WHILE ONLY $LIST CAN MOVE A PROGRAM FROM ONE * MAJOR STATE TO ANOTHER. HED SYSTEM STATE TABLE******SYSTEM STATE TABLE*** *MAJOR STATE 0 1 2 3 4 5 6 *SUB-STATES *---------!-----!-------!-------!-------!-------!-------!------ * 0 11.0 00.0 02.1 00.0 00.0 00.0 00.0 * 22.0 11.0 11.0 11.0 11.0 11.0 * 33.0 62.10 66.0 66.0 66.0 * 44.0 * 55.0 * 66.0 *---------!-----!-------!-------!-------!-------!-------!------ * 1 D X X 02.1 X X X X * 10.0 * 62.11 *---------!-----!-------!-------!-------!-------!-------!------ * 2 R 11.0 00.2 02.3 00.2 00.2 00.2 06.3 * 66.3 *---------!-----!-------!-------!-------!-------!-------!------ * 3 RD X X 0* X X X 0* * 10.2 10.2 *---------!-----!-------!-------!-------!-------!-------!------ * 4 W 00.0 33.4 00.0 00.0 00.0 00.0 00.0 * 1* 13.4 * 66.4 *---------!-----!-------!-------!-------!-------!-------!------ * 5 WD X X X X X X X *---------!-----!-------!-------!-------!-------!-------!------ * 6 WR 0* X X 00.6 X X 06.7 * 13.4 * 66.7 *---------!-----!-------!-------!-------!-------!-------!------ * 7 WRD X X X X X X 0* * 10.6 *---------!-----!-------!-------!-------!-------!-------!------ * 10 O X X 021.11 X X X X * 16.0 * 6* *---------!-----!-------!-------!-------!-------!-------!------ * 11 OD X X 0* X X X X * 10.0 * 6* *---------!-----!-------!-------!-------!-------!-------!------ * 12 OR X X 02.13 X X X X *---------!-----!-------!-------!-------!-------!-------!------ * 13 ORD X X 0* X X X X * 16.3 * 6* *---------!-----!-------!-------!-------!-------!-------!------ * 14 OW X X X X X X X *---------!-----!-------!-------!-------!-------!-------!------ * 15 OWD X X X X X X X *---------!-----!-------!-------!-------!-------!-------!------ * 16 OWR X X X X X X X *---------!-----!-------!-------!-------!-------!-------!------ * 17 OWRD X X X X X X X *---------!-----!-------!-------!-------!-------!-------!------ HED REAL TIME SCHEDULER---LIST PROCESSOR SECTION--- * * THE $LIST PROCESSOR SECTION OF THE HP-2100 REAL TIME * EXECUTIVE PROCESSES THE FOLLOWING LIST REQUESTS * 1. DORMANT * 2. SCHEDULE * 3. OPERATOR SUSPEND * 4. NON-OPERATOR SUSPEND * A. I/O * B. MEMORY AVAILABLE * C. DISC AVAILABLE * 5. SEGMENT LOADING * * * * CALLING SEQUENCE * * JSB $LIST * OCT (ADDRESS CODE)(FUNCTION CODE) * DEF (ADDRESS) * * IF A = 0, THEN NO MESSAGE * A NOT 0, THEN ADDR OF MESSAGE * IF ERROR, (B) CONTAINS ASCII ERR CODE * WHERE * FUNCTION CODE * 0 = DORMANT REQUEST * 1 = SCHEDULE REQUEST * 2 = I/O SUSPEND REQUEST * 3 = GENERAL WAIT LIST REQUEST * 4 = MEMORY AVAILABEL REQUEST * 5 = DISK ALLOCATION REQUEST * 6 = OPERATOR SUSPEND REQUEST * 17 = RELINK PROGRAM REQUEST * 10 THRU 16 ARE NOT ASSIGNED * * ADDRESS CODE * 0 = ID SEGMENT NAME FOLLOWED BY 5 OPTIONAL * PARAMETERS TO GO INTO TEMPORARY AREA OF ID SEG. * 1 = ID SEGMENT ADDRESS * 2 = ASCII PROGRAM NAME ADDRESS * 3 = ID SEGMENT ADDRESS IN WORK * 4 = ID SEGMENT ADDRESS IN B-REG * 5 = ID SEGMENT ADDRESS IN XEQT * 6 = ID SEG ADD FOLLOWED BY CONTENTS TO BE PUT * INTO "B-REG @ SUSP" WORD OF ID SEG. * 7 = ID SEG NAME FOLLOWED BY 5 PARAMETERS TO GO * INTO ID'S TEMPORARY AREA. * * * ADDRESS * KEYWORD, ID SEGMENT, OR * PROGRAM NAME ADDRESS AS SPECIFIED BY CODE * MUST NOT BE SUPPLIED FOR * ADDRESS CODES 3 AND 4. * SKP $LIST NOP ENTRY/EXIT LDA $LIST,I WORD 1 AND D15 STA L0091 STORE AWAY REQUEST CODE XOR $LIST,I FORM ADDR CODE ALF,ALF RAL,RAL CPA D4 ADDRESS IN B-REG? JMP L0021 YES GO SET UP CPA D3 ADDRESS IN WORK? JMP L0060 YES GO SET UP LDB XEQT PRESET FOR CURRENT EXECUTING PGM. CPA D5 CURRENT PGM? JMP L0021 YES GO SET IT UP ISZ $LIST STEP TO ADDRESS WORD LDB $LIST,I GET IT TO B CPA D1 IS ADDRESS NOW IN B? JMP L0021 YES \RGO SET IT UP CPA D2 DOES B POINT TO AN ASCII NAME? JMP DL02 YES, SO GO SEE IF PROGRAM EXISTS. * STB RETRN B-REG MUST BE A RETURN ADDRESS, SO SAVE. ISZ $LIST BUMP POINTER TO EITHER PROG.NAME OR ADD. CPA D6 JMP DL06 LDB $LIST,I GET THE ID ADD. OR PROG.NAME ADDRESS. SZA,RSS IF ADDRESS = 0 THEN ID ADDRESS. JMP DL00 IF NON ZERO, THEN PROCESS AS ADDRESS * JSB TNAME OF PROGRAM NAME. GO GET ID ADDRESS. SEZ IF PROGRAM DOES NOT JMP NPRG EXIST, THEN TELL FOLKS. * DL00 JSB DORM? SETUP THE $LIST PRAMS & SEE IF DORMANT. SZA IS THE PROGRAM DORMANT? JMP L0074 NO, GO TELL CALLER TO FORGET IT. * * THE FOLLOWING ROUTINE IS USED FOR ADDRESS CODES 0 AND 7 * TO STUFF PARAMETERS INTO THE PROGRAM'S ID SEGMENT. CODES * 0 AND 7 ARE PROVIDED FOR DRIVERS WHICH WISH TO SCHEDULE * PROGRAMS. * * ASSUMPTIONS * 1) AT LEAST ONE PARAMETER MUST BE SUPPLIED(I.E. ONE DEF). * 2) THE RETURN ADDRESS MUST END THE PARAMETERLIST. * 3) 5 PARAMETERS ARE THE MAXIMUM. * 4) ABSOLUTELY NO ERROR CHECKING IS DONE. * ISZ $LIST BUMP $LIST TO POINT TO FIRST PARAMETER. LDB RETRN USE RETURN ADDRESS CMB,INB TO DETERMINE HOW MANY ADB $LIST PARAMETERS TO PASS. STB DM5 SAVE TO FAKE OUT SUBROUTINE *PRAM*. * LDA WORK SET A-REG TO ID ADDRESS. LDB $LIST SET B-REG TO PARAMETER'S ADDRESS. ADB SIGN SET SIGN BIT OF B-REG. JSB PRAM GO STUFF THE ID ADDRESS. * LDA DMM5 RESET -5 CONSTANT STA DM5 TO MINUS 5. CCA SET UP THE RETURN ADA RETRN ADDRESS FOR $LIST'S STA $LIST REURN. JMP L0290 NOW GO SCHEDULE THE PROGRAM. * DL06 LDA $LIST,I SET A-REG TO "B-REG @ SUSP". STA TEMPX AND SAVE TEMPORRIALLY. JSB DORM? ( SET UP LIST PARAMETERS & CHECK FOR DORMANT. SZA IF PROGRAM IS DORMANT, JMP L0075 THEN TELL CALLER TO FORGET IT. LDB WORK PUT "B-REG @ SUSP" ADB D10 VALUE INTO THE LDA TEMPX PROPER ID STA B,I SEGMENT JMP L0290 WORD.GO SCHEDULE. * DL02 JSB TNAME NOW ITS IN B SEZ,RSS SKIP IF NOT FOUND OR SHORT ID SEG. JMP L0021 PROG FOUND, SO GO PROCESS JMP NPG1 * NPRG CCA RESTORE ADA RETRN $LIST FOR STA $LIST RETURN. NPG1 LDA $NOPG NO SUCH PROG ERROR MESSAGE LDB D5 NO SUCH PROG ERROR CODE JMP L0015 GO TO RETURN * * PROCESS ID SEGMENT ACCORDING TO REQUEST CODE * L0060 LDB WORK SET B-REG TO ID ADDRESS. * L0021 JSB DORM? GET CURRENT PROGRAM LDB L0091 REQUEST CODE. SZB,RSS CHECK IF DORMANT REQUEST JMP L0100 DORMANT REQUEST CPB D1 CHECK IF SCHEDULE REQUEST JMP L0200 YES CPB D6 CHECK IF OPERATOR SUSPEND REQUEST JMP L0300 YES CPB D15 CHECK IF LINKAGE UPDATE REQUEST JMP L0135 YES JMP L0400 MUST BE A SIMPLE LIST MOVE * L0074 CCA RESTORE ADA RETRN $LIST STA $LIST FOR RETURN. L0075 LDA $ILST ILLEGAL STATUS MESSAGE ADDRESS LDB D3 ILLEGAL STATUS ERROR CODE JMP L0015 GO TO EXIT * RETRN NOP DMM5 DEC -5 TEMPX NOP SKP * ************************************************************ * * THE DORM? SUBROUTINE IS CALLED BY THE $LIST PROCESSOR * FOR ALL CALLS. IT'S PRIMARY PURPOSE IN LIFE IS TO SET * UP WORK, WPRIO, WSTAT AND L0090. IN ADDITION, IT RETURNS * L0090, THE PROGRAM'S CURRENT STATUS, IN THE A REGISTER. * $LIST FUNCTION CODES OF 0, 6 AND 7(THE DRIVER $LIST CALLS) * USE THIS SUBROUTINE TO SEE IF THE PROGRAM IS DORMANT. * * CALLING SEQUENCE: *  LDB ID-ADDRESS * JSB DORM? * * RETURN: * A-REG = CURRENT STATUS(BITS 0-6) * ************************************************************* * DORM? NOP STB $WORK SET UP THE ID ADDRESS FOR LATER. ADB D6 AND STB WPRIO THE PRIORITY WORD ADB D9 AND STB WSTAT THE STATUS WORD. LDA B,I GET THE OLD STATUS AND D15 AND KEEP ONLY LOWER STA L0090 STATUS BITS. JMP DORM?,I RETURN TO USER. HED LIST PROCESSOR--DORMANT REQUEST * * DORMANT REQUEST * * THE DORMANT REQUEST IS PROCESSED AS FOLLOWS: * IF ABORT BIT SET, MAKE PROGRAM DORMANT * IF ALREADY DORMANT, RETURN * IF SCHEDULED, THEN ENTERED INTO DORMANT LIST, POINT * OF SUSPENSION CLEARED. * IF ID SEGMENT ADDRESS IS SAME AS RESIDING * BACKGROUND DISC RESIDENT PROGRAM, THEN BKRES * FLAGS ARE CLEARED SO ANOTHER PROGRAM MAY BE * LOADED INTO THE AREA. * IF ID SEGMENT ADDRESS IS SAME AS RESIDING REAL * TIME DISC RESIDENT PROGRAM, THEN RDISK FLAGS * ARE CLEARED SO ANOTHER PROGRAM MAY BE LOADED * INTO THE AREA. * IF NOT ONE OF ABOVE, THEN DORMANT BIT SET IN STATUS SPC 1 L0100 LDB WSTAT,I CHECK IF ABORT BIT SET BLF RBL,SLB,BLF JMP L0115 YES, SO GO MAKE DORMANT CPA D2 IF I/O SUSPENDED L0103 ALF,SLA,RAL SET DORMANT BIT JMP L0350 ELSE GO CHECK RESOURCE BIT * L0105 IOR WSTAT,I IF I-O SUSP,MERGE CURRENT STATUS AND SEE IF JMP L0375 NP BIT OF DOER IS NOT CUR.PROG(TO SAVE TEMPS) * L0115 LDA WORK CLEAR ID SEG TEMP AND SET B LDB DEF0 JSB PRAM LDB WORK SET FLAG FOR DISPATCHER CLA CPB XEQT STA $PVCN ADB D8 LINK THROUTGH XSUSP LDA $ZZZZ SO RESIDENT FLAGS STB $ZZZZ ARE STA B,I CLEARED ADB D6 INDEX TO TYPE WORD LDA B,I AND CLEAR AND NCLAM THE CORE LOCK AND ALL OF MEMORY STA B,I BITS CLA STA XEQT CLEAR CURRENT PGM FLAG IN CASE IT IS SPC 1 L0130 STA WSTAT,I SET THE NEW STATUS AND D15 GET THE ADDITION CODE L0135 LDB L0090 SET B FOR LINK JSB LINK RELINK THE PROG CLA SET FOR NORMAL RETURN LDB $WORK SET B-REG=ID ADDRESS OF PROG L0015 ISZ $LIST STEP TO RETURN ADDRESS JMP $LIST,I LOOK MA! NO LABEL! SPC 1 SPC 1 L0350 SLB,RSS IF RESOURCE BIT NOT SET JMP L0115 GO MAKE DORMANT CPA D6 IF OPERATOR SUSPENDED JMP L0103 GO SET DORMANT BIT TOO. * L0355 LDA WSTAT,I GET OLD STATUS AND CLD.R CLEAR THE "R" AND "D" BITS L0375 LDB WORK IF NOT CURRENT CPB XEQT PROGRAM THEN RSS IOR B20K SET THE NO PRAMS BIT. JMP L0130 GO PUT IN THE DORM LIST SPC 2 L0090 NOP L0091 NOP SPC 1 NCLAM OCT 177637 HED LIST PROCESSOR--SCHEDULE REQUEST * * SCHEDULE REQUEST * * THE SCHEDULE REQUEST IS PROCESSED AS FOLLOWS: * IF ABORT BIT SET, STORE ID SEGMENT ADDRESS SUCH THAT * PROGRAM WILL BE ABORTED AT NEXT ENTRY FROM XEQ * IF DORMANT BIT SET, GO TO DORMANT REQUEST * IF OPERATOR-SUSPEND BIT SET, GO TO OPERATOR-SUSPEND * REQUEST * IF SCHEDULED, THEN STATUS ERROR EXIT * IF CURRENT STATUS NOT ONE OF ABOVE, THE PROGRAM IS * ENTERED INTO THE SCHEDULE LIST. * L0200 CPA D6 IF OP-SUSP JMP L0250 GO CHECK FOR DORMANT BIT LDB WSTAT,I GET WHOLE STATUS WORD CPA D2 IF I/O SUSP. THEN BLF,SLB,BLF ROTATE AND SKIP JMP L0255 ELSEB GO CHECK WAIT BIT * RBR,SLB,RBL IF OP-SUSP BIT SET JMP L0220 GO CHECK FURTHER * L0270 CLA,INA SET A FOR SCHEDULE RBL DORM BIT TO 15 SSB IF DORM BIT SET JMP L0100 GO SET DORMANT L0290 CLA,INA OTHERWIZE, GO JMP L0130 SCHEDULE * L0220 RBL,SLB CHECK RESOURCE BIT JMP L0230 IF SET GO CLEAR OP-SUSP SSB IF DORM BIT SET JMP L0100 GO MAKE DORMANT * L0230 LDA B1004 CLEAR THE OP-SUSP BIT AND JMP L0280 GO OP-SUSP THE PGM. * L0250 LDA WSTAT,I IF OP-SUSP BIT SET AND B100 AND DORM BIT SET SZA JMP L0355 GO CLEAR BIT AND SET DORMENT * L0255 LDA WSTAT,I IF WAIT BIT SET ALF,SLA,ALF THEN ALF,SLA,ALF GO MOVE TO WAIT LIST (SKIPS) JMP L0270 ELSE, SCHEDULE THE PROGRAM * XOR D3 CHANGE STATUS TO 3 AND D15 L0280 XOR WSTAT,I AND JMP L0130 GO RELINK HED LIST PROCESSOR--SUSPEND REQUESTS * * OPERATOR SUSPEND REQUEST * * THE OPERATOR-SUSPEND REQUEST IS PROCESSED AS FOLLOWS: * IF DORMANT, THEN ENTER INTO OPERATOR SUSPEND LIST * IF ALREADY OPERATOR SUSPEND, THEN STATUS ERROR EXIT * IF SCHEDULED, THEN ENTER INTO OPERATOR SUSPEND LIST * IF NOT ONE OF ABOVE, THEN OPERATOR-SUSPEND BIT SET * L0300 LDB WSTAT,I CGET THE FULL STATUS WORD SZB IF ZERO CPA D6 OR OP-SUSP JMP L0075 REJECT THE REQUEST * CPA D2 IF I/O SUSP JMP L0310 GO SET TO "O" BIT * SZA IF DORM WITH RESOURCES SKIP JMP L0400 ELSE GO RELINK I.E. SET OP-SUSP. * LDA B306 ELSE SET "R" AND "D" BITS AND IOR B PUT IN OP-SUSP LIST JMP L0130 * L0310 LDA B1000 SET OPER-SUSP BIT IN STATUS JMP L0105 GO SET BIT AND EXIT SPC 1 * * NON-OPERATOR SUSPEND REQUEST * * cNLH THE NON-OPERATOR SUSPEND REQUEST IS PROCESSED AS FOLLOWS: * THE PROGRAM IS ENTERED INTO THE REQUESTED LIST AND * THE NEW STATUS REPLACES THE 4 LOW ORDER BITS OF THE * PROGRAM STATUS-THUS SAVING THE DORMANT OR OPERATOR- * SUSPEND BITS THAT MAY BE PRESENT. * * L0400 LDA WSTAT,I UPDATE STATUS SAVING ALL AND C17 BUT LOW 4 BITS IOR L0091 JMP L0130 GO TO EXIT SPC 1 C17 OCT 177760 B100 OCT 100 B306 OCT 306 B1004 OCT 1004 CLD.R OCT 57460 HED LINK UPDATE PROCESSOR * * THE LINK PROCESSOR SECTION OF THE HP-2116 REAL TIME * EXECUTIVE * 1. REMOVES A PROGRAM FROM A LIST * AND * 2. ENTERS THE PROGRAM INTO ANOTHER LIST AT THE PROPER PLACE N* ACCORDING TO PRIORITY LEVEL. * * * * CALLING SEQUENCE * * LDB CODE1 * LDA CODE2 * JSB LINK * * WHERE * CODE1 = CODE OF REMOVAL LIST * CODE2 = CODE OF INSERTION LIST * THE ID SEGMENT IS ASSUMED TO BE LOCATED IN WORK * AND WPRIO SET * * * THE REMOVAL OF PROGRAM FROM A LIST CONSISTS OF: * 1. IF I/O LIST (CODE 2), THEN THIS IS SPECIAL CASE * AND DOES NOT REQUIRE REMOVAL. * 2. IF NULL LIST, THEN ERROR EXIT TAKEN. * 3. IF FIRST AND ONLY PROGRAM IN LIST, THEN LIST * VALUE SET TO ZERO. * 4. IF FIRST PROGRAM IN LIST, BUT NOT THE ONLY * PROGRAM IN LIST(LINKAGE NOT ZERO), THEN SET LIST * VALUE TO THE LINKAGE VALUE. * 5. IF IN MIDDLE OF LIST, THE LINKAGE OF THE ID SEG * MENT WHICH POINTS TO THE PROGRAM TO BE REMOVED * IS SET TO THE LINKAGE VALUE OF THE PROGRAM THAT * IS REMOVED. * 6. IF LAST PROGRAM IN LIST, THE LINKAGE VALUE OF * PREVIOUS PROGRAM IN LIST IS SET TO ZERO. * LINK NOP ENTRY/EXIT SZB IGNOR DORMANT AND CPB D2 I/O LIST REQUESTS JMP LK100 YES, SEE IF ADDITION. ADB LLIST ADD TOP OF LIST POINTER * LK010 STB TEMP TOP OF REMOVAL LIST LDB B,I GET TOP OF LIST POINTER SZB,RSS END OF LIST? JMP LK150 YES, RETURN CPB WORK MATCHES PROGRAM? RSS YES JMP LK010 NO, KEEP SEARCHING LDB B,I UPDATE LINKAGE TO BYPASS STB TEMP,I THE DELETED ID SEG HED LINK PROCESSOR--ADDING PROGRAM TO A LIST * * ADD A PROGRAM TO A LIST * * THE ADDITION OF PROGRAM TO A LIST CONSISTS OF: * 1. IF I/O LIST (CODE 2), THEN THIS IS SPECIAL CASE * AND NO ADDITION MADE TO LIST. * 2. IF NULL LIST, THEN LIST VALUE SET TO POINT TO ID * SEGMENT OF PROGRAM TO BE ADDED AND THE LINKAGE * SET TO ZERO. * 3. IF NOT NULL LIST, THE PROGRAM IS INSERTED INTO * LIST ACCORDING TO PRIORITY LEVEL AND LINKAGES * CHANGED TO REFLECT THIS INSERTION. * 4. IF OF LOWER PRIOR. THAN ANY PROGRAM IN LIST, THEN * LAST LINKAGE IS SET TO POINT TO THE PROGRAM TO * BE ADDED AND THE PROGRAM LINKAGE IS CLEARED. * LK100 SZA IGNOR DORMANT AND CPA D2 I/O LIST REQUESTS JMP LINK,I YES, RETURN ADA LLIST ADD TOP OF LIST POINTER * LK110 STA TEMP SAVE TOP OF LIST POINTER LDA A,I GET POINTER SZA,RSS END OF LIST? JMP LK140 YES, LINK IN NEW PROG CPA WORK IS IT A DUPLIC. PROG? JMP LK150 YES, DUPLIC SO RETURN STA B NOT DUPLIC, COMPARE PRIORITY ADB D6 OF WORK ID SEG LDB B,I AGAINST CMB,INB CURRENT ADB WPRIO,I ID SEG SSB,RSS WORK < CURRENT? JMP LK110 NO, SEE NEXT ONE * LK140 STA WORK,I LINK THIS TO FOLLOW WORK LDA WORK LINK WORK TO FOLLOW STA TEMP,I PREVIOUS PROG * LK150 JMP LINK,I RETURN * * LLIST DEF DORMT TOP OF LIST ADDRESS WSTAT NOP WORK STATUS ADDRESS DM32 DEC -32 B1000 OCT 1000 B4000 OCT 4000 COM OCT 54 TBUF DEF TEMP5 TBUFS DEF TEMP5+7 DM58 DEC -58 HED OPERATOR INPUT MESSAGE PROCESSOR * * THE $MESS PROCESSOR SECTION OF HP-2116 REAL TIME EXECUTIVE * PROCESSES THE FOLLOWING OPERATOR INPUT REQUESTS: * * 1. TURN ON A PROGRAM * ON[IH],XXXXX * ON[IH],XXXXX,NOW * ON[IH],XXXXX,P1,...,P5 * ON[IH],XXXXX,NOW,P1,...,P5 * 2. TURN OFF A PROGRAM * OF,XXXXX,P * 3. OPERATOR SUSPEND A PROGRAM *  SS,XXXXX * 4. CONTINUE A OPERATOR SUSPENDED PROGRAM * GO[IH],XXXXX * GO[IH],XXXXX,P1,...,P5 * 5. CURRENT STATUS OF A PROGRAM * ST,XXXXX * 6. CHANGE PROGRAM ID SEGMENT TIME PARAMETERS. * IT,XXXXX,R,MMM * IT,XXXXX,R,MMM,HR,MN * IT,XXXXX,R,MMM,HR,MN,SC * IT,XXXXX,R,MMM,HR,MN,SC,MS * 7. CHANGE PROGRAM PRIORITY * PR,XXXXX,ZZ * 8. SET REAL TIME CLOCK AND START TIME BASE GENERATOR * TM,DAY,HR,MN,SC * 9. CURRENT REAL TIME CLOCK VALUES * TI * 10. SET A SLOT OR DEVICE DOWN. * DN,N1 * DN,,N2 * 11. SET A SLOT AND DEVICES UP * UP,NN * 12. LOGICAL UNIT SWITCH AND STATUS * LU,N1 * LU,N1,N2 * LU,N1,N2,N3 * 13. EQUIPMENT STATUS * EQ,NN * 14. SET SOURCE FILE * LS,P1,P2 * 15. SELECT LOAD-AND-GO * LG,P * 16. CHANGE DEVICE TIME-OUT PARAMETER * TO,N1 * TO,N1,N2 * 17. RELEASE PROGRAM'S TRACKS * RT,XXXXX * 18. SWAP STATUS * SW[,N] * 19. SET BREAK FLAG * BR,XXXXX * 20. ABORT JOB REQUEST * AB * 21. RUN REQUEST * RU[IH],XXXXX * RU[IH],XXXXX,P1,...,P5 * 22. BUFFER LIMIT PRINT/CHANGE * BL * BL,N1,N2 HED OPERATOR INPUT MESSAGE DECIPHER ROUTINE * * CALLING SEQUENCE * JSB $MESS * B CONTAINS NUMBER OF CHARACTERS * A IS THE BUFFER ADDRESS * * * * INPUT DECIPHER ROUTINE ROUTINE SCANS THE ASCII OPERATOR * INPUT AND STORES THE DATA INTO PARAMETERS. * THIS ROUTINE ASSUMES THE CHARACTER COUNT IN B ON ENTRY AND * DATA IN BUFFR. COMMA IS USED TO SEPARATE PARAMETERS. A PARA- * METER MAY BE UP TO 6 ASCII CHARACTERS- EXCEPT FOR OP CODE * WHICH MUST BE 2 CHARACTERS. A MAXIMUM OF 40 CHARACTERS MAY BE * INPUT. A COUNT IS KEPT OF THE NUMBER OF PARAMETERS INPUT AND * A CHARACTER COUNT IS KEPT FOR EACH PARAMETER. THE VALUES ARE * STORED LEFT ADJUSTED IN THE BUFFERS. * * $MESS NOP ENTRY/EXIT SZB,RSS IS COUNT ZERO JMP M0150 YES, SO EXIT STA BFADD SAVE BUFFER ADDRESS AND STB BFCNT SAVE POSITIVE CHAR.COUNT. JSB $PARS GO PARSE THE REQUEST BUFAD DEF PRAMS ADDRESS OF PRAMETER BUFFER HED MESSAGE PROCESSOR--OP REQUEST SEARCH * * THIS SECTION CHECKS THE OPERATOR REQUEST CODE AGAINST THE * LEGAL REQUEST CODES AND JUMPS TO THE PROPER PROCESSOR. ******************************************************************* * TO ADD NEW REQUEST ONE MERELY, * A. ADDS ASCII OPERATION CODE TO TABLE -LDOPC- * B. ADDS PROCESSOR START ADDRESS TO TABLE -LDJMP- * C. ADDS PROCESSOR CODING TO PROCESS THE REQUEST. ******************************************************************* * LDB OP OPERATION CODE INTO B STB OPP SET STOP FLAG LDA LDOPC SET OPERATION TABLE POINTER STA TEMP1 LDA LDJMP SET OPERATION PROC. JUMP ADDRESS STA TEMP2 LDA P1 SEND P1 IN A REG. UNL IFN LST CPB DBUG **********DEBUG********** CLB,RSS **********DEBUG********** JMP M0030 **********DEBUG********** STB FLG **********DEBUG********** JSB $DDT **********DEBUG********** DEF $TYPE+2 **********DEBUG********** DBUG ASC 1,DB **********DEBUG********** EXT $DDT **********DEBUG********** UNL XIF LST M0030 CPB TEMP1,I COMPARE WITH TABLE VALUE JMP TEMP2,I COMPARES GO DO IT ISZ TEMP1 DOES NOT COMPARE-INCREMENT OP TABLE ISZ TEMP2 INCREMENT JUMP ADR. JMP M0030 GO TO COMPARE NEXT OP CODE * OPER LDA $OPER ILLEGAL OPERATION CODE REQUEST JMP $MESS,I  * * LDOPC DEF *+1 & OPERATION CODE TABLE ADDRESS ASC 8,RTONOFSSGOSTPRIT $ASTM ASC 9,TMDNUPLUEQLSLGTOTI ASC 5,SWBRABRUBL OPP NOP OPCODE FOR CURRENT REQUEST LDJMP DEF *+1,I JUMP ADDRESS FOR EACH OPER. CODE DEF M0070 RELEASE PROGRAM'S TRACKS DEF M0100 TURN ON DEF M0200 TURN OFF DEF M0300 OPERATOR SUSPEND DEF M0400 REMOVE OPERATOR SUSPEND DEF M0500 STATUS DEF M0650 PRIORITY CHANGE DEF M0600 INTERVAL TIME CHANGE DEF M0700 REAL TIME CLOCK INITIALIZATION DEF M0800 DN REQUEST DEF $IOUP UP REQUEST DEF M0920 LU REQUEST DEF M0920 EQ REQUEST DEF M0960 LS REQUEST DEF M0970 LG REQUEST DEF M0920 TO REQUEST DEF M0750 TI REQUEST DEF M0625 SW REQUEST DEF M0725 BR REQUEST DEF M0950 AB REQUEST DEF M0408 RU REQUEST DEF BLIM BL REQUEST DEF OPER OPERATOR ERROR HED PARSE SUBROUTINE FOR OPERATOR MESSAGES * CALLING SEQUENCE: * LDA BUFFER ADDRESS * LDB CHARACTER COUNT * JSB $PARS * DEF PRAM BUFFER * -RETURN- * * THE PRAM BUFFER IS 33 WORDS LONG AND CONTAINS UP TO 8 * PRAMETER DESCRIPTERS FOLLOWED BY THE PRAMETER COUNT. * * EACH PARAMETER DESCRIPTER CONSISTS OF FOUR WORDS: * * WORD MEANING * 1 FLAG WORD 0=NULL PRAMETER * 1=NUMERIC PRAMETER * 2=ASCII PRAMETER * 2 0 IF NULL,VALUE IF NUMERIC,ASCII(1,2) IF ASCII * 3 0 IF NOT ASCII ELSE ASCII(3,4) * 4 0 IF NOT ASCII ELSE ASCII(5,6) * * TEMP USAGE IN PARSE SECTION: * * TEMPP = CHARACTER ADDRESS * TEMP = PARAMETER FLAG ADDRESS * TEMP1 = TEMP BUFFER FETCH ADD. * Ȟ TEMP2 = TEMP BUFFER STORE ADD. * TEMP3 = LAST INPUT CHAR.+1 ADD. * TEMP4 = PARAMETER VALUE ADDRESS. * TBUF = DEF TEMP5 (6 LOCATIONS) * TBUFS = DEF TEMP5+7 * $PARS NOP ENTRY/EXIT CLE,ELA MAKE CHARACTER ADD. STA TEMPP SET BUFFER CHAR ADD. ADA B COMPUTE END ADDRESS. STA TEMP3 AND SET IT. LDB DM32 CLEAR PARAMETER AREA STB TEMP LDB $PARS,I CLA MES1 STA B,I INB ISZ TEMP JMP MES1 * STA B,I CLEAR THE PRAM COUNT STB WSTAT SET ADDRESS OF PRAM COUNT DEC09 LDA TBUF INITIALIZE TEMP BUFFER ADDRESS STA TEMP1 STA TEMP2 * DEC10 LDB TEMPP GET THE BUFFER CHAR ADDRESS CPB TEMP3 IF NO MORE CHARACTERS JMP DEC60 GO PROCESS PRAM ISZ TEMPP STEP INPUT POINTER CLE,ERB CONVERT TO WORD SET UP LOW IN E LDA B,I GET WORD FROM THE BUFFER SEZ,RSS CHECK IF TO EXAMINE UPPER/LOWER ALF,ALF UPPER, SO ROTATE TO LOWER BITS AND B377 MASK OFF ALL BUT LOW ORDER CPA COM SEE IF A COMMA JMP DEC60 YES CPA LASCI CHECK IF BLANK CHARACTER JMP DEC10 YES, SO SKIP CHARACTER LDB TEMP2 CHECK IF 6 CHARACTERS IN PRAM CPB TBUFS IF SO JMP DEC10 SKIP STORE STA TEMP2,I STORE THE CHARACTER STA SABRT SAVE THE LAST CHARACTER ISZ TEMP2 STEP FOR NEXT CHAR. * JMP DEC10 GO TO PROCESS NEXT CHARACTER * * ATTEMPT NUMERIC CONVERSION OF PRAM. * DEC60 LDA WSTAT,I FIRST SET UP POINTERS RAL,RAL TAKE 4 TIMES THE PRAM NUMBER ADA $PARS,I PLUS THE OP CODE ADDRESS-1 STA TEMP SET FLAG ADDRESS CLE,INA ONE MORE AND WE HAVE STŭA VALOC THE PRAMETER VALUE LOCATION LDA TEMP2 IF NO CHARACTERS CPA TBUF INPUT JMP DEC75 GO TRY NEXT ONE * * NOW TRY FOR A NUMBER * ISZ TEMP,I SET FLAG TO 1 FOR NUMBER. LDB TEMP1,I GET FIRST CHAR CPB DASH MINUS SIGN? ISZ TEMP1 YES, INCRE TO NEXT CHAR CPA TEMP1 (A) STILL = TEMP2 JMP DEC80 IF "-" WAS ONLY CHAR, THEN ASCII * LDB D10 SET UP CONVERSION BASE LDA SABRT CPA "B" IF B SUFFIX LDB D8 SET FOR BASE 8 STB TEMP4 SET BASE DEC65 MPY VALOC,I BUMP THE CURRENT VALUE VALOC EQU *-1 LDB TEMP1,I GET THE NEXT CHAR. ADB DM58 IF GREATER THAN "9" SEZ,CLE,RSS THEN NOT A NUMBER ADB D10 IF LESS THAN "0" SEZ,CLE,RSS THEN JMP DEC80 NOT A NUMBER ADA B ACCUMULATE THE STA VALOC,I NUMBER ISZ TEMP1 STEP THE BUFFER ADDRESS LDA TEMP4 GET THE BASE TO A LDB TEMP1 AND THE NEXT CHAR. LOC. TO B CPB TEMP2 IF END THEN JMP DEC70 GO TO NEXT PRAM * INB IF BASE 8 CONVERSION CPB TEMP2 AND LAST CPA D10 CHAR. THEN DONE SO SKIP JMP DEC65 ELSE GO GET THE NEXT ONE * SPC 1 DEC70 LDB VALOC,I GET VALUE LDA TBUF,I IF NEG NUMBER, CPA DASH CMB,INB NEGATE VALUE STB VALOC,I STORE VALUE * DEC75 ISZ WSTAT,I COUNT THE PRAMETER LDA WSTAT,I IF LDB TEMP3 EOL OR CPB TEMPP 8 PRAMS LINE RSS THEN CPA D8 JMP DEC90 GO PROCESS JMP DEC09 ELSE GO GET NEXT CHARACTER SPC 1 DEC80 ISZ TEMP,I SET NOT NUMBER FLAG LDA AASCI FILL THE PRAM WITH BLANKS LDB VALOC PRAM ADDRESS TO B INB DON'T WORRY ABOUT FIRST WORD STA B,I SET SECOND WORD CLE,INB ! STEP TO THIRD WORD STA B,I SET THIRD WORD TO DOUBLE BLANK. LDB TBUF GET THE TEMP BUFFER POINTER DEC85 CPB TEMP2 END OF INPUT? JMP DEC75 YES GO PROCESS NEXT PRAM CPB STOP SIXTH CHAR YET? JMP DEC75 YES, END PARAM LDA B,I GET THE CHARACTER SEZ,RSS IF UPPER CHARACTER ALF,SLA,ALF ROTATE AND SKIP XOR VALOC,I LOWER ADD THE UPPER CHAR. XOR LASCI ADD/DELETE THE LOWER BLANK STA VALOC,I STORE THE PACKED WORD SEZ,CME,INB STEP B,SKIP IF UPPER ISZ VALOC ELSE STEP STORE ADDRESS. JMP DEC85 GO GET OTHER CHAR. SPC 2 DEC90 ISZ $PARS STEP RETURN ADDRESS JMP $PARS,I RETURN SPC 2 "B" OCT 102 ASCII "B" DASH OCT 55 ASCII "-" STOP DEF TEMP5+6 ASCII 6TH CHAR STOP HED MESSAGE PROCESSOR--RT,XXXXX COMMAND * * RT,XXXXX * * THE RELEASE TRACKS ROUTINE FUNCTIONS AS FOLLOWS: * IF PROGRAM STATUS NOT DORMANT, STATUS ERROR. * IF DORMANT, ALL TRACKS ASSIGNED TO THAT PROGRAM * ARE RELEASED - ALL PROGRAMS IN DISC TRACK * ALLOCATION SUSPENSION ARE RESCHEDULED. * M0070 JSB TTNAM GO FIND ID SEGMENT ADDRESS ADB D8 IF SUSPENSION POINT IS ZERO, LDA B,I THEN PROGRAM IS DORMANT. SZA OTHERWIZE, SEND ILLEGAL JMP M0405 STATUS ERROR. LDA WORK GET ID SEGMENT ADDRESS JSB $OTRL RESCHEDULE DISC-SUSP PROGRAMS JMP M0150 RETURN- HED MESSAGE PROCESSOR--ON,XXXXX COMMAND * ***************************************************************** * * ON[IH],XXXXX * ON[IH],XXXXX,NOW * ON[IH],XXXXX,P1,...,P5 * ON[IH],XXXXX,NOW,P1,...,P5 * * THE ON REQUEST FUNCTIONS AS FOLLOWS: * IF NO RESOLUTION CODE, THEN PROGRAM SCHEDULED. * IF -NOW- OPTION, THEN ENTER PROGRAM INTO TIME LIST *  AND SET TIME VALUES TO CURRENT TIME PLUS 10 MSC * IF NOT ONE OF ABOVE, AND TIME VALUES ARE ZERO THEN * PROGRAM FUNCTIONS SAME AS -NOW- OPTION. * IF NOT ONE OF ABOVE, AND TIME VALUES ARE PRESENT, * THEN PROGRAM IS ADDED TO TIME LIST. * NOTE: 1)ALL THE ABOVE OPTIONS ALLOW PARAMETERS TO BE * PASSED TO THE PROGRAM. THESE MUST BE ASCII * DECIMAL NUMBERS WHICH ARE CONVERTED TO BINARY * AND STORED IN ID SEGMENT TEMP AREA. UPON * EXECUTION, THE B REGISTER WILL POINT TO TEMP. * UP TO 5 PARAMETERS MAY BE INPUT. IF NO PARA- * METERS ARE INPUT, THE TEMP AREA ARE ZEROS BUT * B REGISTER WILL STILL POINT TO TEMP. AREA * 2) THE ABOVE OPTIONS WILL ALLOW THE ORIGINAL * SCHEDULING STRING TO BE SAVED(UNLESS 'IH' * IS SPECIFIED OR THERE ARE NO PARAMETERS). * THE SCHEDULED PROGRAM MAY RECOVER THIS STRING * WITH AN EXEC 14 CALL. * ******************************************************************** * M0100 JSB TTNAM FIND ID SEGMENT ADDR LDB WSTAT,I IF NO PARAMETERS RBL,RBL BIT IS SET, THEN SSB,RSS ILLEGAL STATUS. SZA CHECK IF PROGRAM DORMANT JMP M0405 ILLEGAL STATUS ERROR JSB PLOAD GO TO PROCESS CONTROL PRAMETERS LDB WORK ADB D17 COMPUTE RES/T/MULT ADDR LDA B,I ALF,RAR AND D7 CHECK RESOLUTION CODE SZA NONE, SO GO TO SCHED NOW JMP M0110 M0105 JSB $LIST SCHEDULE PROGRAM OCT 301 JMP $MESS,I RETURN M0110 INB SET B FOR $ONTM LDA CP2 IF ASCII RAR,SLA "NO" ENTERED LDA P2 THEN CPA NO GO PUT CCA IN THE TIME LIST FOR NOW+10MS._ JMP $ONTM GO TO TIME MODULE TO COMPLETE HED MESSAGE PROCESSOR--OF,XXXXX COMMAND * * OF,XXXXX * OF,XXXXX,1 "ABORT" * OF,XXXXX,8 "ABORT AND REMOVE FROM SYSTEM" * * THE OF REQUEST FUNCTIONS AS FOLLOWS: * IF PROGRAM DORMANT, IT MAY STILL BE IN TIME LIST SO * A CALL IS MADE TO REMOVE PROGRAM FROM TIME LIST * IF ABORT OPTION 1, THEN $ABRT PROCESSOR IS * CALLED. IF ABORT OPTION 8, IN ADDITION TO * $ABRT PROCESSOR BEING CALLED, IF BIT 7 OF THE * TYPE FIELD IS SET, THEN TRACK(S) WHERE PROGRAM * IS STORED IS ALSO RELEASED BY $DREL. THE NAME * FIELD IN THE ID SEGMENT IS CLEARED SO THAT THE * PROGRAM CANNOT BE CALLED AGAIN. * IF PROGRAM SCHEDULED OR OPERATOR-SUSPENDED, THEN * DORMANT REQUEST MADE VIA LIST PROCESSOR AND * PROCEED AS ABOVE. * IF PROGRAM STATUS NOT ONE OF ABOVE, THE DORMANT BIT * IS SET IN STATUS, IF NOT ABORT OPTION. IF ABORT * OPTION, CHECK IF AVAILABLE MEMORY OR UNAVAILABL * DISC TRACK SUSPENSION-IN WHICH CASE THE ABORT * BIT IS SET AND $ABRT CALLED. IF STATUS IS I/O * SUSPENSION, SET ABORT BIT AND RETURN. * IF INPUT SUSPENSION, CHECK IF * PROGRAM BEING READ IN FROM DISC. IF YES, THEN * SET ABORT BIT AND RETURN. IF NOT BEING READ IN * FROM DISC, SET ABORT BIT AND CALL $IOCL TO * CLEAR THE I/O REQUEST * M0200 JSB TTNAM GO TO FIND ID SEG ADDR M0202 LDB WORK GET ID SEG ADDRESS AND STB TEMPH SAVE IT IN LOCAL STORE SEZ IF SHORT ID-SEG. JMP M0207 GO TEST FOR 8 LDA P2 GET PRAM TWO SZA IF NOT ZERO GO DO POWER THING JMP M0250 * M0240 JSB SABRT GO DO SOFT ABORT JMP $XEQ EXIT DONE * M0250 LDA WSTAT,I POWER ABORT SO AND D15 GET CURRENT STATUS SWP PUT ID-SEG. ADDRESS IN A,STAT IN B CPB D2 IF I/O SUSP THEN JMP $IOCL GO ABORT THE I/O * JSB $ABRT GO TO ABORT ROUTINE CLE CLEAR E FOR TRACK RELEASE M0207 LDA P2 RELEASE PROG'S TRACKS? CPA D8 IF P = 8, RSS YES JMP $XEQ NO-SO RETURN * LDB TEMPH ADB D14 GET ADDRESS OF LAST LDA B,I NAME WORD ALF,ALF CHECK IF TYPE BIT 7 SET SSA,RSS JMP $XEQ NO-CANNOT REL PROG TRACKS SEZ,INB,RSS IF SHORT ID-SEG. SKIP ADB D7 ELSE INDEX TO MEM ADDRESS FOR LONG LDA B,I CMA,INA INB ADA B,I STA TEMP3 # WORDS OF MAIN INB LDA B,I CMA,INA INB ADA B,I # WORDS IN BASE PAGE INB SET UP THE DISC ADDRESS POINTER STB TEMP1 IN TEMP1 CLB CLEAR FOR DOUBLE SHIFT ADA B177 ROUND UP TO NEAREST SECTOR IOR B177 SET THE LOW BITS AND ADA TEMP3 ADD AND ROUND UP THE MAIN LSR 6 DIVIDE BY 64 TO GET SECTORS STA TEMP5 TOTAL # SECTORS IN PROGRAM LDA TEMP1,I GET THE DISC ADDRESS LSR 7 SHIFT TO TRACK AND B377 ADDRESS AND LDB TEMP1,I CHECK IF LU 2 OR 3 SSB LU 2 ADA TATSD LU 3 STA TEMP2 ACTUAL STARTING TRACK # LDB SECT2 LDA TEMP1,I CHECK IF LU 2 OR 3 SO CAN DIVIDE SSA BY # OF TRACKS FOR THAT LDB SECT3 DISC. STB TEMP LDA TEMP1,I GET THE TRACK ADDRESS AND B177 MASK OUT THE SECTOR ADDRESS CMA,INA,SZA,RSS IF ZERO RELEASE THIS TRACK JMP M0226 ADA TEMP ELSE SUBTRACT FROM TRACK ISZ TEMP2 -SIZE STEP TO NEXT TRACK CMA,INA AND COMPUTE THE REMAINING SECTORS M0226 ADA TEMP5 A IS TOTAL NUMBER TO CLB CLEAR FOR DIVIDE STB TEMP1,I WIPE THE TRACK WORD WHILE WERE HERE SZA GEORGES FIX 3/13 SSA RELEASE IF NEGATIVE JMP M0227 FORGET THE WHOLE THING DIV TEMP SZB CHECK IF PARTIAL TRACK INA YES STA B (B)=# TRACKS LDA TEMP2 (A)=STARTING TRACK JSB $DREL CALL EXEC SYS RELEASE TRACKS M0227 LDB TEMPH ADB D12 CLA STA B,I INB STA B,I INB LDA B,I SAVE THE OLD SHORT/LONG AND B77 FLAG STA B,I JMP $XEQ GO EXIT SPC 1 * * THE SOFT ABORT ROUTINE CLEARS ANY RESOURCE FLAGS * CALLS THE TERMINATION ROUTINE AND REMOVES A PROGRAM FROM * THE TIME LIST. * * IT ALSO SETS THE ABORT FLAG (100000) IN THE FATHERS ID-SEG. * (IF THERE IS A FATHER AND HE IS WAITING) SO THAT RMPAR * MAY RECOVER THE PRAMETER. * * IF THE PROGRAM IS WAITING FOR A SON IT CLEARS THE SONS * "FATHER IS WAITING" FLAG. * * CALLING SEQUENCE: * * LDB ID-SEG. ADDRESS * JSB SABRT * * RETURN REGISTERS MEANING LESS. * * THIS ROUTINE DOES NOT GENERATE AN ABORT MESSAGE NOR DOES IT * PULL A PROGRAM OUT OF AN I/O LIST. ($LIST DOES SET A FLAG * WHICH WILL PUT THE PROGRAM DORMANT ON I/O COMPLETION. * SABRT NOP STB TEMPH SAVE THE ID ADDRESS ADB D15 GET THE STATUS LDA B,I WORD AND ZAPR CLEAR THE RESOURCE BIT STA B,I RESET IT INB SET B TO THE TIME LIST WORD JSB $TREM REMOVE PGM FROM THE TIME LIST LDB TEMPH RESTORE THE ID ADDRESS AND ADB D15 INDEX TO THE STATUS WORD LDB B,I AND FETCH IT BLF,SLB IF PROGRAM IS WAITING JMP SABT2 GO CLEAR THE SONS FLAG * NLH SABT1 LDB TEMPH RESTORE THE ID-SEG. ADDRESS AND JSB TERM CALL THE TERMINATION PROCESSOR ISZ POP STEP TO THE FATHER'S FIRST PRAM WORD RSS JMP SABRT,I LDA SIGN SET SIGN BIT FOR FATHER ABORT FLAG STA POP,I SET THE ABORT FLAG LDB POP CACULATE THE B-REG ADDRESS ADB D9 AND LDA POP SET IT TO STA B,I POINT TO THE ABORT WORD JMP SABRT,I DONE RETURN * SABT2 LDB TEMPH GET THE SONS ID ADDRESS INB FROM WORD TWO LDB B,I OF THE ID-SEGMENT ADB D20 INDEX TO THE FATHER WAIT FLAG WORD LDA B,I GET THE WORD RAL,CLE,RAL CLEAR BIT 14 ERA,RAR AND STA B,I RESTORE THE WORD JMP SABT1 GO TERMINATE THE PROGRAM SPC 2 TEMPH DEF FMGR D12 DEC 12 {NDM24 DEC -24 DM60 DEC -60 ZAPR OCT 177477 HED MESSAGE PROCESSOR--SS,XXXXX COMMAND * * SS,XXXXX PROCESSOR * * THE SUSPEND REQUEST FUNCTIONS AS FOLLOWS: * IF PROGRAM DORMANT OR OPERATOR SUSPENDED, THEN * ILLEGAL STATUS ERROR * IF SCHEDULED, THEN OPERATOR SUSPEND VIA $LIST * IF OTHER THAN ABOVE, SET THE OPERATOR-SUSPEND BIT * IN STATUS. AND ALL THESE WONDERS ARE * BY $LIST. * M0300 JSB $LIST OCT 206 SCHED TO OPER-SUSP DEFP1 DEF P1 BY NAME SZA IF ERROR JMP $MESS,I EXIT * LDA WSTAT,I SET THE NO PRAMS IOR B20K BIT STA WSTAT,I TO PREVENT PRAMS ON RESTART JMP M0150 EXIT SPC 2 B20K OCT 20000 HED MESSAGE PROCESSOR--GO COMMAND * ***************************************************************** * * GO[IH],XXXXX * GO[IH],XXXXX,P1,...,P5 * * THE CONTINUE FROM POINT OF SUSPENSION FUNCTIONS AS * FOLLOWS: * IF NOT OPERATOR SUSPEND: * BIT SET - REMOVE OPER-SUSP BIT IN STATUS * BIT NOT SET - ERROR EXIT FOR MESSAGE * IF OPERATOR SUSPEND, SCHEDULE PROGRAM. UNLESS * 'IH' IS SPECIFIED OR NO PARAMETERS ARE GIVEN, * ANY PREVIOUS OPERATOR SCHEDULING STRING IS * RELEASED AND THE 'GO' SCHEDULING STRING IS * SAVED FOR RETRIEVAL BY THE PROGRAM USING AN * EXEC 14 CALL. * ***************************************************************** * M0400 JSB TTNAM GO TO FIND ID SEG ADDR CPA D6 CHECK IF PROGRAM OPERATOR-SUSPEND JMP M0410 OPERATOR-SUSPEND--SO GO TO PROCESS LDA WSTAT,I NOT OPER SUSP - AND B1000 IS BIT SET? SEZ IF SHORT ID-SEG SEND ERROR SZA,RSS JMP M0405 NO, ERROR- XOR WSTAT,I YES, C='LEAR BIT STA WSTAT,I AND M0150 CLA EXIT JMP $MESS,I * M0405 LDA $ILST ILLEGAL STATUS MESSAGE ADDRESS JMP $MESS,I EXIT SKP * ***************************************************************** * * RU[IH],XXXXX * RU[IH],XXXXX,P1,...,P5 * * THE RU COMMAND FUNCTIONS AS FOLLOWS: * IF DORMANT, THE PROGRAM IS SCHEDULED. * PARAMETERS MAY BE PASSED TO THE PROGRAM. THESE * ARE TREATED LIKE PARAMETERS IS THE GO COMMAND * (SEE NOTE 1 FOR THE GO COMMAND). * THE SCHEDULING STRING MAY BE SAVED. SEE NOTE 2 * FOR THE GO COMMAND. * ******************************************************************* * M0408 JSB TTNAM RUN COMMAND ROUTINE LDB WSTAT,I IF NO PARAMETERS RBL,RBL BIT IS SET, THEN SSB,RSS ILLEGAL STATUS. SZA IF NOT DORMANT JMP M0405 GIVE THE MESSAGE,ELSE DO IT * M0410 LDA D2 CHECK IF CONTROL PARAMETERS FOLLOW CPA PARAM JMP M0105 NO,DO NOT RETURN STRING,SCHEDULE PROGRAM. * JSB PLOAD GO TO PROCESS CONTROL PARAMETERS JMP M0105 GO SCHEDULE THE PROGRAM HED MESSAGE PROCESSOR--ST,XXXXX COMMAND * * ST,XXXXX PROCESSOR * * IF XXXXX = 0 NAME AND PARTITION# OF CURRENT PGM IS PRINTED * IF XXXXX > 0 NAME OF THE PGM IN PARTITION #XXXXX IS PRINTED * THE STATUS REQUEST OUTPUTS THE REQUESTED PROGRAM STATUS * IN THE FOLLOWING FORMAT: * PRPRP S R MMMM HR MN SC MS T * * PRPRP =PRIORITY * S = STATUS (0 THRU 6 * R = RESOLUTION CODE (0 THRU 4) * MMM = MULTIPLE VALUE * HR = NEXT START TIME -HR * MN = NEXT START TIME -MIN * SC = NEXT START TIME -SEC * MS = NEXT START TIME -10 MSEC * T = PRESENT IF PROGRAM IN TIME LIST * M0500 LDB XEQT & IF ZERO CMA,INA,SZA,RSS GO DO JMP M0550 CURRENT PGM * LDB DRDIS,I SET UP FOR FOREGROUND INA,SZA,RSS IF ONE JMP M0550 GO PRINT IT'S NAME * LDB DBDIS,I GET BASKGROUND DR ID-SEG ADDRESS INA,SZA,RSS IF 2 THEN JMP M0550 GO PRINT IT'S NAME. * JSB TTNAM GO TO FIND ID SEGMENT ADDR CLB,CCE STB RQP3 SET UP FOR $TIMV CALL JSB $CVT1 CONVERT STATUS TO ASCII. ALF,ALF MOVE TO HIGH HALF WORD STA BUFF4 STORE STATUS IN BUFFER. LDB DM28 CPA BL9 IF SHORT ID-SEG ADB D20 SET FOR 8 CHAR. MESS STB BUFFR STORE CHARACTER COUNT IN BUFFER LDB WORK ADB D6 PRIORITY ADDRESS CPA BL9 IF SHORT ID-SEG CLA,RSS SET PR TO 0 LDA B,I JSB $CVT1 CONVERT PRIORITY TO ASCII LDB ASCI1 GET DIGITS 23-45 TO B-A RRL 8 34-52 IN B-A STB BUFF2 SET 34 LDB ASCI 1-52 IN B-A ALF,ALF 1-25 IN B-A RRL 8 12-5 IN B-A STB BUFF1 SET 12 STA BUFF3 SET 5 BLANK LDB TEMP6 RESTORE B TO PRIOR ADDRESS ADB D11 RESOL CODE/MULT ADDRESS LDA B,I ALF,RAR AND D7 JSB $CVT1 CONVERT RESOLUTION CODE TO ASCII ALF,ALF ROTATE TO HIGH HALF WORD STA BUFF5 STORE RESOLUTION CODE IN BUFFER LDA B,I AND B7777 JSB $CVT1 CONVERT MULTIPLE TO ASCII STA BUFF7 STORE MULTIPLE IN BUFFER LDA ASCI1 STA BUFF6 STORE MULTIPLE IN BUFFER LDA B,I CHECK IF PROG IN TIME LIST ALF,SLA TEST BIT 12 (T) BIT JMP M0510 YES LDA AASCI PROGRAM NOT IN TIME LIST RSS M0510 LDA TZERO PROG IN TIME LIST STA BUF14 STORE ASCII BLANK OR T IN BUFFER INB SET B TO TIME ADDRESS LDA DTEMP }SET UP TO GET TIME TO STA RQP2 TEMP AREA DLD B,I GET TIME FROM ID-SEG JSB $TIMV CONVERT THE TIME LDA TEMP3 GET HOURS JSB $CVT1 CONVERT LDB ASCI1 GET VALUE RRR 8 ROTATE TO BLANK ON EACH SIDE DST BUFF8 SET IN MESSAGE LDA TEMP2 GET MIN. VALUE JSB $CVT1 CONVERT STA BUF10 STUFF IN BUFFER LDA TEMP1 AND AGAIN FOR SEC JSB $CVT1 LDB ASCI1 VALUE TO A BLANK TO B RRR 8 ROTATE DST BUF11 SET IN BUFFER LDA TEMP ONE MORE TIME FOR 10'S OF MS. JSB $CVT1 STA BUF13 STORE TENS OF MSEC IN BUFFER M0520 LDA BUFAD LOAD A WITH OUTPUT BUFFER ADDRESS JMP $MESS,I RETURN SPC 1 TZERO ASC 1, T D11 DEC 11 B7777 OCT 7777 DTEMP DEF TEMP BL9 ASC 1,9 BLANK 9 DM28 DEC -28 SPC 1 M0550 CCA SET A FOR ZERO PRINT SZB SKIP IF NO PROGRAM LDA DM5 ELSE RESET A FOR PGM PRINT STA BUFFR SET MESSAGE LENGTH LDA MPT81 GET UPPER ASCII "0" TO A SZB SKIP IF NO PGM ADB D12 ELSE STEP TO NAME ADDRESS M0555 LDA B,I STA BUFF1 SET NAM12 INB STEP TO NEXT NAME WORD DLD B,I GET THE NEXT WORDS DST BUFF2 AND SET IN THE BUFFER JMP M0520 GO EXIT SPC 2 INBUF BSS 22 MESSAGE INPUT BUFFER BUFFL EQU *-INBUF+*-INBUF LENGTH IN #CHARS SPC 2 * SYSTEM OUTPUT BUFFER * BUFFR EQU * SHOULD BE AT LEAST 15 WORDS LONG BUFF1 EQU BUFFR+1 BUFF2 EQU BUFFR+2 BUFF3 EQU BUFFR+3 BUFF4 EQU BUFFR+4 BUFF5 EQU BUFFR+5 BUFF6 EQU BUFFR+6 BUFF7 EQU BUFFR+7 BUFF8 EQU BUFFR+8 BUFF9 EQU BUFFR+9 BUF10 EQU BUFFR+10 BUF11 EQU BUFFR+11 BUF12 EQU BUFFR+12 BUF13 EQU BUFFR+13 BUF14 EQU BUFFR+14 BSS 33 ENDT EQU * DEFINE END OF BUFFER FOR TEST ORG INBUF PUT INIT CODE IN BUFFER $STRT ULDA DM5 STA TEMP5 PREPARE TO CALL $ALC LDA DEQT1 TO RETURN BLOCKS OF MEMORY STA TEMP6 TO INITIALIZE SYSTEM AVAILABLE MEMORY MRTNL LDA TEMP6,I BLOCK ADDRESSES ARE IN PAIRS STA MADR1 EQT1 THRU EQT12 ISZ TEMP6 LDA TEMP6,I STA NWDS1 ISZ TEMP6 JSB $RTN RETURN A BLOCK MADR1 NOP NWDS1 NOP ISZ TEMP5 DONE WITH EQT1 THRU EQT10? JMP MRTNL NO, RELEASE NEXT BLOCK JMP TEMP YES, RELEASE LAST BLOCK DEQT1 DEF EQT1 GOES TO GTFMG FROM $ALC VIA $WORK * GTFMG LDB TEMPH GET FMGR'S NAME ADDRESS JSB $ZZZZ GO TO DISPATCHER TO SET UP STB DRDIS SET FG RESIDENT FLAG ADDRESS INB AND STB DBDIS BACKGROUND DISC RESIDENT FLAG ADDRESS LDB TERM GET ADDRESS JSB TNAME OF D.RTR TO B SEZ,RSS IF NONE SKIP STB ID.RT SET FOR LATER. LDB P1OR2 LOOK UP EDIT'S ADDRESS JSB TNAME ALSO SEZ,RSS IF NONE SKIP STB ID.RT+1 SET IN LIST LDB TEMPH NOW FIND JSB TNAME FMGR'S ID-SEGMENT ADDRESS SEZ,RSS IF NONE SKIP STB IDFMG SET ADDRESS LDB DSMP JSB TNAME SEZ,RSS STB $IDSM LDA D$RN TRACK DOWN RN TABLE ADDRESS RAL,CLE,SLA,ERA IF INDIRECT LDA A,I USE NEXT LEVEL * LDB IDADS GET ADDRESS OF ID ADDRESSES JMP $ERMG GO TO EXEC TO SET UP NO RETURN * * IDADS DEF ID.RT FMGR ASC 3,FMGR D.RTR ASC 3,D.RTR DSMP DEF *+1 ASC 3,SMP D$RN DEF $RNTB TES EQU ENDT-* ERROR HERE MEANS OUT OF BUFFER ORG BUFFR SHARE PARSE BUFFER WITH MESSAGE BUFFER * * PARAMETER POINTERS FOR DATA STORAGE * PRAMS BSS 1 CHARACTER COUNT-OP CODE OP BSS 3 OPERATION CODE CP1 BSS 1 CHAR COUNT-PARAM 1 P1 BSS 3 PARAM 1 (UP TP 3 WORDS-6CHAR.) CP2 BSS 1 CHAR COUNT-PARAM 2 P2 BSS 3 ,S PARAMETER 2 CP3 BSS 1 CHAR COUNT-PARAM 3 P3 BSS 3 PARAMETER 3 CP4 BSS 1 CHAR COUNT-PARAM 4 P4 BSS 3 PARAMETER 4 CP5 BSS 1 CHAR COUNT -PARAM 5 P5 BSS 3 PARAMETER 5 CP6 BSS 1 CHAR COUNT-PARAM 6 P6 BSS 3 PARAMETER 6 CP7 BSS 1 CHAR COUNT-PARAM 7 P7 BSS 3 PARAMETER 7 PARAM BSS 1 PARAMETER COUNTER ORR EXIT BUFFER HED MESSAGE PROCESSOR--IT,XXXXX COMMAND * IT,XXXXX * IT,XXXXX,R,MMM * IT,XXXXX,R,MMM,HR,MN * IT,XXXXX,R,MMM,HR,MN,SC * IT,XXXXX,R,MMM,HR,MN,SC,MS * * R=RESOLUTION CODE * 1= TEN MILLISECOND CODE * 2= SECONDS CODE * 3= MINUTES CODE * 4= HOURS CODE * MM= MULTIPLICATION FACTOR * HR= START HOURS * MN= START MINUTES * SC= START SECONDS * MS= START TENS OF MILLISECONDS * M0600 JSB TTNAM GO FIND ID SEG ADDR SZA PROG MUST BE DORMANT TO CONTINUE JMP M0405 ILLEGAL STATUS ERROR LDA WORK SET ADA D17 UP THE TIME PRAMETER STA TEMPP STARTING ADDRESS. LDB P2 GET THE RESOLUTION ADB DM5 CODE AND TEST SSB,RSS FOR MORE THAN 4. JMP $INER GREATER THAN 4-ILLEGAL CODE LDA P3 GET THE MULT. FACTOR. LDB TEMPP,I GET THE OLD TIME PRAM. BLF,ERB IF IN TIME LIST ALF,ERA SET BIT IN NEW WORD. LDB P2 GET RESOLUTION TO B SZB,RSS IF ZERO RESOLUTION JMP M0605 GO REMOVE FROM TIME LIST LSR 3 SHIFT THE WHOLE MESS TO A M0604 STA TEMPP,I SET NEW RESOLUTION MULT. ISZ TEMPP INCR TO TMS ADDRESS LDA P7 GET TENS OF MS. ADA DM100 SSA,RSS MINUS, IF LEGAL VALUE JMP $INER INPUT ERROR LDA P6 GET SECONDS VALUE ADA DM60 SSA,RSS MINUS, IF LEGAL VALUE JMP $INEELR INPUT ERROR LDA P5 GET MINUTES. ADA DM60 SSA,RSS YES, SO CONVERT TO DECIMAL JMP $INER INPUT ERROR LDA P4 GET HOURS ADA DM24 SSA,RSS MINUS, IF LEGAL VALUE JMP $INER INPUT ERROR LDA DP4 SET DEFS TO THE PRAMS STA RQP5 ON THE BASE LDA DP5 PAGE FOR STA RQP6 $ETTM LDA DP6 THE SET TIME STA RQP7 SUBROUTINE LDA DP7 IN THE STA RQP8 RTIME MODULE LDB TEMPP GET ID-SEG ADDRESS AND JSB $ETTM GO SET VALUES IN ID-SEG JMP M0150 EXIT $MESS SPC 2 M0605 CCB REMOVE PGM FROM TIME ADB TEMPP LIST JSB $TREM CLA AND CONTINUE JMP M0604 SETTING UP THE ID-SEG SPC 1 DM100 DEC -100 SPC 2 BLIM CLB,CCE,INB CHECK TO SEE IF EXAMINE CPB PARAM ONE PRAM? JMP BLIMP YES GO PRINT LIMITS * LDB P2 GET THE SECOND PRAMETER CMB,INB,SZB GET NEW UPPER LIMIT STB $BLUP IF ZERO SKIP THE STORE CMA,INA SET UP THE LOWER LIMIT STA $BLLO JMP M0150 GO EXIT DONE SPC 1 BLIMP LDA $BLLO GET THE LOWER LIMIT CMA,INA SET POSITIVE JSB $CVT1 CONVERT TO ASCII OCTAL STA BUFF3 SET LOW DIGITS DLD ASCI GET THE HIGH 4 DIGITS DST BUFF1 AND SET IN BUFFER LDA $BLUP GET THE UPPER LIMIT CMA,CCE,INA SET POSITIVE JSB $CVT1 CONVERT STA BUFF7 SET THE LOW DIGITS DLD ASCI GET THE HIGH DIGITS DST BUFF5 SET IN THE BUFFER LDA AASCI GET A DOUBLE BLANK STA BUFF4 SET BETWEEN THE NUMBERS LDA DM14 GET RECORD LENGTH STA BUFFR SET IN THE BUFFER AND JMP M0520 GO SEND THE MESSAGE SPC 1 DM14 DEC -14 HED MESSAGE PROCESSOR--SW,X COMMAND * * SW[,N] * * IF N IS NOT PRESENdT PRINT THE BASE PAGE SWAP FLAG * IF -1=1 NO PRAMS BIT SET. * =0 NO PRAMS BIT NOT SET. * OTHER REGISTERS MEANINGLESS. * PRAM NOP INA STEP TO THE PRAM AREA STA TEMP SET IN TEMP ADA D9 STEP TO THE B-REGISTER STA TEMP1 ADDRESS AND SAVE ADA D5 STEP TO THE STATUS ADDRESS LDA A,I GET THE STATUS AND CHECK RAL,RAL THE NO PRAM ALLOWED BIT CCE,SSA IF SET THEN (SET E REG) JMP PRAM,I JUST EXIT * LDA TEMP GET THE PRAM AREA ADDRESS AND STA TEMP1,I SET IT IN THE B REG. SAVE AREA LDA DM5 SET UP THE STA TEMP1 COUNTER PRAM1 CLA ZERO ADDRESS GETS A ZERO LDA B,I GET PRAM STA TEMP,I STUFF IT ISZ TEMP STEP STORE ADDRESS CLE,INB STEP SOURCE ADDRESS (CLEAR E REG) ISZ TEMP1 DONE? JMP PRAM1 NO- CONTINUE JMP PRAM,I YES - EXIT HED MESSAGE PROCESSOR NAME SEARCH * * CALL TO NAME SEARCH ROUTINE * * CALLING SEQUENCE: * * JSB TTNAM NAME ASSUMED TO BE IN P1 * * ON RETURN: * WORK AND B CONTAIN THE ID-SEG. ADDRESS * WSTAT CONTAINS THE STATUS ADDRESS * A CONTAINS THE LEAST 4 STATUS BITS. * E = 0 IF STANDARD ID SEGMENT * E = 1 IF SHORT (9 WORD ) ID SEGMENT * IF A SHORT ID SEGMENT A WILL BE SET TO 9. * TTNAM NOP ENTRY/EXIT LDB DEFP1 ADDRESS OF ASCII PROG NAME JSB TNAME CALL TO NAME SEARCH ROUTINE SZA,RSS IF ZERO, THEN PROG NOT FOUND JMP NXPRG SO TAKE GAS! LDA WSTAT,I GET STATUS TO A AND D15 MASK IT AND SEZ IF SHORT ID SEGMENT LDA D9 REPLACE IT WITH 9. JMP TTNAM,I RETURN SPC 2 NXPRG LDA $NOPG NO SUCH PROG ERROR JMP $MESS,I EXIT HED SEARCH KEYWORD LIST FOR PROGRAM NAME * ON ENTRY * B IS ADDRESS OF ASCII PROGRAM NAME * ON RETURN * A IS 0 IF PROGRAM NOT FOUND (E=1) * B AND WORK ARE THE ID SEGMENT ADDRESS OF REQUESTED PROGRAM * WSTAT = THE STATUS WORD ADDRESS. * E = 0 IF STANDARD ID SEGMENT * E = 1 IF SHORT (9 WORD ) ID SEGMENT OR NOT FOUND * TNAME NOP ENTRY/EXIT STB TEMP3 ADDRESS OF NAME 1 AND 2 INB INCR TO CHAR 3 AND 4 ADDR STB TEMP4 SAVE IT INB INCR TO CHAR 5 ADDR LDA B,I ASCII NAME CHAR 5 AND X AND MASKU MASK OFF X STA TEMP5 SZA IF NULL CHAR. FOURCE ERROR RETURN LDA KEYWD STA KEY TOP OF KEYWORD LIST TN005 LDA KEY,I CHECK IF AT END OF LIST CCE,SZA,RSS JMP TNAME,I END OF LIST ERROR RETURN ADA D12 LDB A,I ID SEG ASCII NAME CHARS 1 AND 2 CPB TEMP3,I COMPARE WITH REQUESTED CHAR 1,2 INA,RSS COMPARES JMP TN030 DOES NOT COMPARE-GO TO NEXT PROG LDB A,I ID SEG ASCII NAME CHARS 3 AND 4 CPB TEMP4,I COMPARE WITH REQUESTED CHARS 3,4 INA,RSS COMPARES JMP TN030 DOES NOT COMPARE-GO TO NEXT PROG STA WSTAT SET UP WSTAT IN CASE LDA A,I ID SEG ASCII NAME CHARS 5,X STA B SAVE FOR SHORT ID TEST AND MASKU MASK OFF X CPA TEMP5 COMPARE CHARACTER 5 JMP TN040 COMPARES-SO PROGRAM FOUND * TN030 ISZ KEY INCREMENT KEYWORD ADDRESS JMP TN005 GO TO COMPARE CHARACTERS TN040 LSR 4 MOVE SHORT ID BIT TO LEAST B ERB SET E FOR RETURN LDB KEY,I LOAD B WITH ID SEGMENT ADDRESS STB WORK SET IN WORK ISZ WSTAT STEP TO STATUS ADDRESS AND JMP TNAME,I EXIT HED CVT3 (BINARY TO ASCII CONVERSION) * * BINARY TO ASCII CONVERSION ROUTINE * * CALLING SEQUENCE * * SET E TO 0 IF OCTAL CONVERSION OR * SET E TO 1 FOR DECIMAL CONVERSION * LDA NUMBER TO BE CONVERTED * JSB $CVT3 * * RETURN A.ODDRESS OF ASCI IN A AND E=1. * RESULTS IN ASCI, ASCI+1, ASCI+2 * LEADING 0'S SUPPRESSED * $CVT3 NOP ENTRY/EXIT STB TEMP6 SAVE B REGISTER LDB PTTE INIT LOCATION OF BUFFER STB TMP LDB AASCI SET BUFFER=ASCII BLANK'S STB ASCI STB ASCI1 STB ASCI2 LDB DF10 ASSUME BASE TEN SEZ,CLE,RSS IF BASE EIGHT INB SET UP FOR BASE EIGHT STB BASE SET CONVERSION BASE ADDRESS DPCRL CLB START CONVERSION DIV BASE DIVIDE BY BASE BASE EQU *-1 DEFINE BASE ADDRESS ADB B20 CONVERT TO ASCII-BLANK SEZ IF HIGH DIGIT BLF,BLF ROTATE ADB TMP,I ADD CURRENT VALUE STB TMP,I STORE THE CONVERTED VALUE CCB,SEZ PREPARE FOR SUBTRACT ADB TMP IF HIGH CHAR. BACKUP SEZ,CME BUFFER POINTER STB TMP AND RESET SZA IF MORE DIGITS JMP DPCRL GO SET THE NEXT ONE * CCE SET E FOR NEXT CALL (ASSUME BASE 10) LDA PTT LOAD A WITH ASCI BUFFER ADDRESS LDB TEMP6 RESTORE B JMP $CVT3,I RETURN * B20 OCT 20 DF10 DEF D10 D10 DEC 10 D8 DEC 8 PTT DEF ASCI PTTE DEF ASCI2 HED $CVT1 (BINARY TO ASCII CONVERSION) * CALLING SEQUENCE: SAME AS $CVT3 * * RETURN RESULTS LEAST TWO DIGITS IN A. * OTHERS AS PER $CVT3 * $CVT1 NOP JSB $CVT3 GO CONVERT THE NUMBER LDA ASCI2 GET LEAST TWO DIGITS JMP $CVT1,I RETURN HED OUTPUT *_ ON SYSTEM TELETYPE ******************************************************************* * THE $TYPE SECTION FUNCTIONS AS FOLLOWS: * ENTRY IS MADE BY STRIKING ANY SYSTEM TELETYPE KEY. * IF TELETYPE FLAG NOT BUSY, THEN * IS OUTPUT AND A * REQUEST IS MADE FOR INPUT. IF FLAG IS SET THEN * IGNORE REQUEST. UPON COMPLETION OF INP.UT (LF), * THE MESSAGE PROCESSOR ROUTINE IS CALLED. * UPON RETURN, IF A REGISTER IS ZERO THEN NO * MESSAGE TO BE OUTPUT. IF A NON-ZERO, THEN A IS * ADDRESS OF MESSAGE TO OUTPUT WITH CHARACTER * COUNT THE FIRST WORD IN BUFFER. ******************************************************************* * $TYPE LDA FLG CHECK SYSTEM TTY FLAG SZA JMP $XEQ BUSY, SO RETURN TO $XEQ JSB $XSIO CALL TO OUTPUT ASTERISK(*) OCT 1 ON SYSTEM TELETYPE NOP NOP OCT 2 DEF ASTRK DM4 DEC -4 OUTPUT CHARACTER COUNT JSB $XSIO CALL TO REQUEST OPERATOR INPUT OCT 1 DEF TYP10 INPUT COMPLETION ADDRESS NOP OCT 401 INPUT WITH TYPEOUT IBUF DEF INBUF ABS -BUFFL DETERMINED BY $STRT ROUTINE ISZ FLG SET SYSTEM TTY BUSY FLAG JMP $XEQ GO TO $XEQ * TYP10 CLA CLEAR THE COM FLAG STA FLG LDA IBUF GET BUFFER ADDRESS TO A JSB $MESS GO TO MESSAGE PROCESSOR ROUTINE SZA,RSS CHECK IF MESSAGE TO BE OUTPUT JMP TYP30 NO MESSAGE-SO GO RETURN * ISZ FLG SET THE COM FLAG LDB A,I STB TYP26 BRS CONVERT CHARACTER COUNT  CMB,INB TO POSITIVE WORD COUNT. STB TYPCO SAVE WORD COUNT. LDB IBUF GET BUFFER INA ADDRESSES. JSB .MVW GO MOVE WORDS. DEF TYPCO NOP * JSB $XSIO CALL TO OUTPUT ERR MESSAGE OCT 1 DEF TYP30 COMPLETION ADDRESS TYPCO NOP OCT 2 DEF INBUF TYP26 NOP JMP $XEQ GO TO $XEQ TYP30 CLA CLEAR SYSTEM FLAG FOR NEXT STA FLG REQUEST JMP $XEQ ASTRK OCT 006412 CR, LF ASC 1,*_ ASTERISK, LEFT ARROW HED $ABRT ROUTINE TO ABORT A PROGRAM * ROUTINE: < $ABRT > * * PURPOSE: TEHIS ROUTINE PROVIDES FOR REMOVING * A USER PROGRAM FROM EXECUTION USUALLY * AFTER AN ERROR CONDITION IS DETECTED * WHICH PROHIBITS CONTINUED EXECUTION. * THE PROGRAM IS SET TO THE DORMANT * STATE, TIME INTERVAL REMOVED AND ANY * DISC TRACKS ASSIGNED TO THE PROGRAM * RELEASED. * * THE PROGRAM NAME IS SET IN THE MESSAGE * "XXXXX ABORTED" WHICH IS PRINTED * ON THE SYSTEM TELETYPE. * * CALL: (A) = ID SEGMENT ADDRESS * (P) JSB ABORT * (P+1) -RETURN- (REGISTERS MEANINGLESS) * $ABRT NOP SET ID SEGMENT ADDRESS STA TEMPH FOR SABRT CALL ADA D15 INDEX TO THE STATUS WORD LDB A,I GET THE WORD ADB B4000 SET THE ABORT BIT STB A,I RESET THE STATUS WORD LDB TEMPH SET B AND CALL JSB SABRT THE SOFT ABORT ROUTINE LDA TEMPH GET THE ADDRESS AND JSB $SDRL GO RELEASE THE DISC TRACKS LDB TEMPH SET (B) = ADDRESS OF 3-WORD ADB D12 PROGRAM NAME IN ID SEGMENT. LDA B,I SET STA ABM PROGRAM INB NAME LDA B,I IN STA ABM+1 MESSAGE INB LDA B,I AND MASKU MASK OUT THE LOWER CHARACTER IOR LASCI REPLACE WITH A BLANK STA ABM+2 LDA ABMA PRINT MESSAGE: JSB $SYMG "XXXXX ABORTED" JMP $ABRT,I -EXIT- * ABMA DEF *+1 DEC -13 ABM ASC 7,EDIT ABORTED (NAME 'EDIT' IS USED) AASCI ASC 1, HED MEMORY PROTECT VIOLATION SCHEDULER PREPROCESSORS ******************************************************************* * THE $MPT1 THRU $MPT9 PREPROCESSORS CONSIST OF MEMORY * PROTECT VIOLATION CALLS FROM EXEC THAT INVOLVE LIST * PROCESSING. * THE FOLLOWING REQUESTS ARE HANDLED: * PROGRAM COMPLETION (DORMANT) * SUSPEND (OPERATOR) * BACKGROUNs{D SEGMENT LOAD * SCHEDULE WITH WAIT * SCHEDULE WITHOUT WAIT * CURRENT SYSTEM TIME (TIME ROUTINE CALL) * SET ID SEGMENT TIME VALUES (TIMER ROUTINE CALL) * SET/CLEAR ALL-OR-MEMORY AND CORE-LOCK FLAGS * GET/PUT A COMMAND STRING ******************************************************************* SPC 3 * * DORMANT REQUEST - PROGRAM HAS RUN TO COMPLETION * $MPT1 JSB GETID GET THE ID-SEGMENT ADDRESS OF AFFECTED STB P2 PROGRAM - SAVE THE ID ADDRESS FOR PRAM MOVE CPB XEQT IF CURRENT PGM. SKIP JMP MPT1A FATHER CHECKS * ADB D20 STEP TO FATHER POINTER ADDRESS CCA GET ADA B,I TO A AND B377 AND MASK ADA KEYWD ADDRESS OF ID OF FATHER IN A LDA A,I NOW CPA XEQT CURRENT PROGRAM? RSS YES SKIP JMP ESC04 NO GO FLUSH * LDB WORK RESTORE THE ID-SEGMENT ADDRESS TO B * MPT1A LDA RQRTN UPDATE THE RETURN STA XSUSP,I ADDRESS CLA SET A TO ZERO IN CASE LDA RQP3,I PRAMETER NOT SUPPLIED CMA,SZA,RSS IS THIS GUY SERIALLY REUSABLE JMP MPT1E YES, GO DO IT * INA,SZA,RSS JMP MPT1B STANDARD TERMINATION CALL. * INA,SZA,RSS IS IT JMP MPT1C A SAVE RESOURCES TERMINATION * INA,SZA,RSS MAY BE A SOFT ABORT JMP M0240 YES GO TO ABORT ROUTINE * INA,SZA,RSS HARD ABORT (LAST CHANCE) JMP M0250 WOW THAT WAS CLOSE! * ESC02 LDB D2 YOU LOSE - UNRECOGNIZED PRAMETER. JMP ESCXX GO ABORT HIM * MPT1C LDA WSTAT,I SET THE IOR B200 RESOURCE BIT IN THE STATUS STA WSTAT,I AND THEN CPB XEQT IF CURRENT PROGRAM JMP MPT1D SKIP DORMANT REQUEST JSB $LIST OCT 400 JMP $XEQ GO TO DISPATCHER * MPT1E CPB XEQT TERM SON AS REUSABLE  RSS JMP MPT1B GO DO NORMAL TERMINATE JSB TERM CALL TERMINATE ROUTINE ISZ TMP,I IF OK, SET FLAG FOR SERIAL REUSE JMP MPT1F GO FINISH PROCESSING * MPT1D JSB $WATR FIND WAITERS LDB XEQT MPT1B JSB TERM CALL TERMINATION ROUTINE MPT1F LDA DM3 IF REQUEST PRAMS ADA RQCNT THEN SSA SKIP JMP $XEQ ELSE GO TO THE DISPATCHER * LDB DEFR4 GET DEF TO PRAMS LDA P2 GET ID-ADDRESS JSB PRAM TRANSFER THE PRAMETERS JMP $XEQ GO TO THE DISPATCHER SPC 1 DM3 DEC -3 SKP * THE TERM SUBROUTINE PERFORMS THE FOLLOWING FUNCTIONS: * * 1. CALL $LIST TO PUT THE PROGRAM IN THE DORMANT LIST * 2. IF THE PROGRAM HAS A FATHER WHO IS WAITING THE * FATHER IS RESCHEDULED * 3. CHECKS TO SEE IF ANOTHER PROGRAM IS WAITING FOR THIS ONE * AND SCHEDULES IT IF SO. * * CALLING SEQUENCE: * * LDB ID ADDRESS * JSB TREM * * ON RETURN THE FATHER POINTER (IF ANY) IS IN POP. * AND IF HE WAS WAITING E WILL BE SET ELSE E=0. * TERM DEF D.RTR JSB $LIST PUT PGM. IN DORMANT OCT 400 LIST LDB WORK GET ID SEG ADDRESS * STB IDCKK SAVE THE ID-ADDRESS ADB D20 INDEX TO THE PA POINTER LDA B,I GET THE WORD STB TMP SAVE THE ADDRESS RAL,ELA SET E IF FATHER IS WAITING CCB,SEZ,CME,RSS E=0 IF FATHER/1 IF NO FATHER JMP TERM2 IF NO FATHER GO SET -1. ADB KEYWD KEYWD-1 TO B (SETS E) RAR,CLE,RAR RESTORE A AND SET E TO FATHER WAITING. AND B377 GET THE FATHER ID NUMBER ADB A ID ADDRSS TO B LDB B,I GET THE ID-SEG ADDRESS TERM2 STB POP SAVE THE ADDRESS ADB D15 REMOVE THE POP'S WAIT BIT LDA B,I GET POP'S STATUS AND B7777 KNOCK OUT THE WAIT BIT SEZ,RSS IF WAITING STA B,I RESTORE THE WORD AND D15 IF POP'S CPA D3 IN THE WAIT LIST SEZ AND WAITING JMP TERM3 JSB $LIST THEN RESCHEDULE OCT 101 THE FATHER POP DEF POP * TERM3 LDA TMP,I GET THE FLAG WORD AND B7400 AND KEEP ONLY RE,RM,RN FLAGS STA TMP,I IN WORD JMP TERM,I RETURN * D20 DEC 20 SIGN OCT 100000 B200 OCT 200 B7400 OCT 7400 DEFR4 DEF RQP4,I SPC 2 $WATR NOP LDA B ADB D20 LDB B,I BLF,BLF RBR,SLB JSB $SCD3 SCHEDULE IF ANY WAITING JMP $WATR,I RETURN SPC 2 * * PROGRAM SUSPEND REQUEST * $MPT2 LDA XEQT GET ADDR OF ID SEG ADA D20 LDA A,I GET FATHER POINTER CLB SSA IF BATCH FLAG IS SET JMP ESCXX ABORT SC00 JSB $LIST OCT 506 OPERATOR SUSPEND REQUEST JMP MEM15 GO UPDATE XSUSP SPC 3 * * READ IN BACKGROUND PROGRAM SEGMENT * $MPT3 CCA CHECK PARAMETER COUNT ADA RQCNT SSA JMP ESC01 ERROR, SO RETURN LDB RQP2 ADDR OF ASCII PROG SEGMENT JSB TNAME GO FIND THE ID SEG. SZA,RSS IF NOT FOUND JMP ESC05 TAKE GAS! ADB D7 STEP TO PRIMARY ENT PT. SEZ IF SHORT ID-SEG. STEP ADB D4 TO THE SHORT ID-SEG PRI ENT PT. ADD LDA B,I FETCH AND STA $WATR SAVE FOR RETURN ADDRESS IF ALL OK. ADB D7 STEP TO TYPE ADDRESS LDA B,I BET TYPE AND D7 MASK IT SEZ,RSS IF SHORT IT MUST BE A SEG. CPA D5 SEGMENT?? CCE,RSS YES SKIP. JMP ESC03 NO TAKE GAS! LDA $WATR ALL OK, SO GET SEG ENTRY POINT STA RQRTN AND SAVE AS RETURN ADDRESS. LDB WORK GET THE ID-SEG ADDRESS STB XA,I JSB $BRED GO SET UP TO LOAD CCB SET THE ALL OF CORE ADB WSTAT BIT LDA B,I FOR THE IOR LASCI DISPATCHER STA B,I JSB PRAMO PASS PRAMETERS IF ANY JMP MEM15 ADVANCE THE RETURN ADDRESS AND EXIT SPC 3 * PRAMO PASSES PRAMETERS FORM RQP3,4,5,6,AND 7 TO * THE ID-SEGMENT POINTED TO BY WORK. * * CALLING SEQUENCE: * * SET UP WORK * JSB PRAMO * * ID-SEGMENT MUST NOT HAVE NO PRAM BITS SET IN IT'S STATUS. * PRAMO NOP CLB,INB IF NO PRAMS CPB RQCNT THEN JMP PRAMO,I JUST EXIT * LDA WORK SET ADDRESS IN A LDB DEFR3 PRAM ADDRESS IN B AND JSB PRAM GO MOVE THE PRAMS. JMP PRAMO,I RETURN. SKP * * $SCD3 SCHEDULES PROGRAMS IN THE WAIT LIST (STATUS-3) * WHICH ARE WAITING FOR THE GIVEN RESOURCE. * * CALLING SEQUENCE: * * LDA RESOURCE FLAG (CONTENTS OF XTEMP OF WAITER) * JSB $SCD3 * RETURN - B,E = 0 A = ? * $SCD3 NOP STA $IDNO SAVE THE RESOURCE ID FLAG LDB SUSP2 GET THE LIST HEAD SCD31 CLE,SZB,RSS IF END OF LIST JMP $SCD3,I RETURN * LDA B GET THIS ENTRIES INA FLAG FROM LDA A,I HIS ID-SEGMENT CPA $IDNO THIS ONE?? JMP SCD32 YES GO RESCHEDULE * LDB B,I NO GET NEXT ENTRY TO B JMP SCD31 AND GO TEST IT. * SCD32 LDA B,I GET THE NEXT ID IN LIST STA PRAMO AND SAVE IT JSB $LIST SCHEDULE THE PROGRAM OCT 401 WHOES ID-SGEMENT ADDRESS IS IN B LDB PRAMO GET NEXT ID TO B JMP SCD31 SCAN THE REST OF THE LIST SKP * SCHEDULE REQUEST WITH WAIT * $MPT4 JSB IDCKK CHECK IF PROGRAM DORMANT LDB XEQT GET THE ADDRESS ADB D20 OF THE BATCH FLAG XOR B,I AND SET IT AND C120K INTO THE XOR B,I THE NEW PROGRAM IOR B40K SET THE FATHER IS WAITING BIT STA $IDNO,I SET THE WORD IN (THE SON'S ID. JSB $LIST PUT CURRENT PGM IN OCT 503 THE WAIT LIST LDB XEQT ADB D15 LDA B,I IOR B10K SET STATUS WAIT REQUEST BIT STA B,I INTO CURRENT EXEC PROGRAM RSS * * SCHEDULE REQUEST WITHOUT WAIT * $MPT5 JSB IDCKK CHECK IF PROGRAM DORMANT * MEM15 LDA RQRTN STA XSUSP,I POINT JMP $XEQ * ESC01 CLB,INB,RSS ILLEGAL PARAMETER COUNT ESC03 LDB D3 PROGRAM CANNOT BE SCHEDULED. RSS ESC04 LDB D4 CONTROLLED PROGRAM NOT A SON. RSS ESC05 LDB D5 NO SUCH PROGRAM ERROR CODE. RSS ESC07 LDB D7 PROHIBITED CORE LOCK ATTEMPTED. RSS ESC10 LDB D10 NO MEMORY EVER FOR STRING PASAGE. ESCXX LDA ASY OUTPUT SC ERROR CODE JMP $ERAB CALL SYSTEM ERROR MESSAGE ROUTINE * B40K OCT 40000 C120K OCT 57777 SKP * * CALL TO GET SYSTEM REAL TIME * $MPT6 DLD $TIME CALL TIME SUBROUTINE JSB $TIMV JMP MEM15 GO TO STORE RETURN ADDRESS * * GETID IS A SUBROUTINE TO GET THE ID-SEGMENT ADDRESS * FROM PRAMETER NUMBER TWO WHERE THE USER MAY * SUPPLY ZERO (HIS ID) OR NOTHING (HIS ID) OR * AN ASCII NAME. * * CALLING SEQUENCE: * * JSB GETID * RETURN B= THE ID-SEGMENT ADDRESS. * IF NOT FOUND THEN ERROR "SC05"IS GENERATED * E=0 * A=0 ON ALL RETURNS * WORK = THE ID-ADDRESS * WSTAT = THE ID-STATUS ADDRESS * GETID NOP CLA IF NOT SUPPLIED PRESET TO ZERO LDB XEQT AND CURRENT PGM ADB D12 SET B TO POINT TO CURRENT NAME LDA RQP2,I GET THE PRAMETER SZA IF ZERO OR NOT SUPPLIED SKIP LDB RQP2 GET ADDRESS OF NAME JSB TNAME GO SEARCH FOR IT CLA,SEZ IF FOUND SKIP JMP ESC05 ELSE FLUSH HIM OUT OF THE SYSTEM * JMP GETID,I RETURN SPC 2 * $IDNO COMPUTES THE ID-SEGMENT NUMBER OF A PROGRAM * * CALLING SEQUENCE * LDB ID-SEGMENT ADDRESS * JSB $IDNO * RETURN ID NUMBER IN B * $IDNO NOP STB GETID SAVE THE REQUESTED ID-ADDRESS LDB KEYWD IDNO LDA B,I GET KEYWORD BLOCK ENTRY INB STEP FOR NEXT ONE CPA GETID THIS IT? CMB,INB,RSS YES NEGATE AND SKIP JMP IDNO NO CONTINUE LOOP * ADB KEYWD NEGATIVE OF NUMBER TO B CMB,INB SET POSITIVE AND JMP $IDNO,I RETURN SKP * * CALL TO SET ID SEGMENT TIME VALUES * $MPT7 LDA DM7 CHECK PARAM COUNT FOR 7. ADA RQCNT SZA,RSS JMP MPT7A 7 IS OK. ADA D3 CHECK PARAM COUNT FOR 4. SZA JMP ESC01 ERROR IN PARAMETER COUNT LDA RQP5,I 4 IS OK, SO CHECK IF INITIAL SSA,RSS OFFSET IS NEGQTIVE. IF POSITIVE, JMP ESC02 THEN ERROR CONDITION. * MPT7A LDA RQP3,I IF RESOLUTION CODE LDB D6 SZA ZERO OR ADA DM5 GREATER THAN 4 SSA,RSS THEN JMP ESCXX ABORT * JSB GETID GO GET THE ID-SEGMENT ADDRESS TO B LDA RQRTN PUT RETURN STA XSUSP,I ADDRESS IN THE ID SEG. JMP $TIMR GO CONTINUE REQUEST IN TIME ROUTINE SPC 1 * CHECK IF PROGRAM DORMANT AND THEN SCHEDULE IDCKK NOP LDB RQP2 GET ID SEGMENT ADDRESS JSB TNAME SEZ JMP ESC05 NO SUCH PROGRAM ERROR ADB D14 MAKE SURE IT IS NOT LDA B,I A SEGMENT AND D7 CPA D5 IF SEGMENT JMP ESC03 TAKE GAS! * LDB XEQT COMPUTE THE ID NUMBER JSB $IDNO AND STB GETID SAVE IT LDA WORK ALSO COMPUTE THE ADA D20 FATHER POINTER WORD ADDRESS STA $IDNO AND SAVE IT LDA WSTAT,I CHECK PROGRAM STATUS FOR DORMANT AND S&NP KEEP JUST THE IMPORTANT BITS STA XA,I RETURN PROG STATUS IN A REG SZA DORMANT? NLH JMP IDCK2 NO - CHECK FURTHER * LDB RQP9,I (A MUST=0)CHECK IF THE OPTIONAL SZB,RSS PARAMETER STRING IS INCLUDED. JMP IDCK4 IF NOT,SKIP STRING STORAGE. JSB $CVWD CONVERT BUFFER LENGTH TO STB BFCNT POSITIVE CHARS AND SAVE. LDA RQP8 SET UP BUFFER ADDRESS. STA BFADD CLE LDB WORK GET ID-SEGMENT ADDRESS JSB ALCST AND STORE PARM.STRING. JMP ESC10 ABORT PROGRAM(SC10)IF NO MEM EVER. JMP NMNOW SUSPEND FATHER IF NO MEM NOW. * IDCK4 JSB PRAMO PASS THE PARAMETERS,IF ANY,TO IDCK5 JSB $LIST THE ID-SEG.AND THEN SCHEDULE. OCT 301 STA XA,I SHOW THAT IT WAS DONE LDA WORK SET UP THE WAIT POINTER STA XTEMP,I INCASE IT IS A 9 REQUEST LDA $IDNO,I GET THE CURRENT FLAG BITS AND C377 MASK OUT ANY OLD FATHER NUMBER. IOR GETID ADD THE FATHER NUMBER STA $IDNO,I AND RESET IT. JMP IDCKK,I RETURN SPC 1 IDCK2 RAL,ALR IF JUST THE NO PRAMS ~vN CMA,CLE,INA SET E LDA $IDNO,I CHECK TO SEE AND B377 IF THIS GUY IS THE FATHER CPA B IF NOT RSS THEN JMP MPT15 GO TEST FOR QUEING * SEZ IF JUST "NP" BIT THEN JMP IDCK5 GO SCHEDULE HIM * LDA WSTAT,I IF "R" AND "D" BITS BOTH SET AND B300 THEN JUST CPA B300 CLEAR THEM ELSE CLB,RSS JMP MPT15 GO CHECK FOR QUEUEING * XOR WSTAT,I CLEAR THE "R" AND "D" BITS STA WSTAT,I AND RESET IN SON'S ID STB XA,I INDICATE SUCESS. JMP MEM15 AND EXIT. * DM7 DEC -7 DM8 DEC -8 C377 OCT 177400 SKP * *SCHEDULE WITH WAIT WITH WAIT REQUEST * * IF REQUESTED PROGRAM IS NOT DORMANT THE REQUESTER IS * SUSPENDED UNTIL IT IS. * MPT15 LDA RQP1 HERE AFTER FINDING REQUESTED PGM BUSY CPA D9 IF NO WAIT RSS THEN JUST DO CPA D10 THE OLD JMP MEM15 THING * LDB WORK ELSE SET THE SUSPEND REASON STB XTEMP,I IN REQUESTERS ID-SEGMENT LDA $IDNO,I TO INDICATE IOR B1000 WE WERE HERE STA $IDNO,I JSB $LIST PUT REQUESTER IN WAIT LIST OCT 503 JMP $XEQ GO TRY SOMEBODY ELSE. SPC 2 ASY ASC 1,SC ASCII -SC- FOR SCHED ERROR DEFR3 DEF RQP3,I B10K OCT 10000 S&NP OCT 20017 STATUS PLUS NO PRAMS BIT MASK B300 OCT 300 SKP * * $MPT8 SET/CLEAR ALL OF MEMORY AND CORE LOCK FLAGS * * EXEC 22 REQUEST WITH ONE PRAMETER * PRAMETER MEANING * 0 CLEAR CORE LOCK * 1 SET CORE LOCK * 2 CLEAR ALL OF MEMORY FLAG * 3 SET ALL OF MEMORY FLAG. * $MPT8 LDB XEQT GET THE ADDRESS ADB D14 OF THE BITS IN THE ID-SEGMENT STB $LIST SAVE ADDRESS LDA B,I GET CURRENT STATUS LDB RQP2,I GET THE REQUEST WORD CMB,INB,SZB,PRSS IF ZERO JMP CLCL CLEAR THE CORE LOCK * INB,SZB,RSS IF ONE JMP STCL SET THE CORE LOCK * INB,SZB,RSS IF TWO JMP CLAM CLEAR ALL OF MEMORY FLAG * INB,SZB IF NOT THREE THEN JMP ESC02 GO ABORT HIM. * B40 CLE MUST BE SET ALL OF MEMORY REQUEST CLAM LDB B40 GET THE ALL MEMORY BIT TO B JMP MPT81 GO SET CLEAR THE BIT * STCL LDB SWAP CHECK IF LEGAL REQUEST RBR,RBR GET LEGAL FLAG SLA TO LEAST B RBR,CLE CLE,SLB,RSS IF ILLEGAL JMP ESC07 GO DO HIM IN * CLCL LDB B100 GET THE CORE LOCK FLAG TO B MPT81 IOR B SET THE FLAG SEZ AND IF A CLEAR REQUEST XOR B CLEAR THE FLAG STA $LIST,I RESET THE WORD JMP MEM15 GO EXIT. SKP ********************************************************************** * * EXEC 14--GET/PUT A COMMAND STRING. * * FOUR PARAMETERS USED: * . * . * . * JSB EXEC * DEF RTN * DEF ICODE * DEF GPCOD * DEF IBUFR * DEF IBUFL * RTN . * . * . * ICODE DEC 14 * GPCOD DEC 1 OR 2 1 = GET(RETRIEVE)PARAMETER STRING * 2 = PUT(WRITE)PARAMETER STRING TO FATHER * IBUFR BSS N BUFFER OF N WORDS * IBUFL DEC N(OR -2N) BUFFER LENGTH WORDS(+) OR CHARACTERS(-) * ****************************************************************** * $MPT9 LDA RQCNT CHECK TO SEE ADA DM3 IF THERE ARE SSA FOUR PARAMETERS. JMP ESC01 SORRY BUDDY, YOU BLEW IT! LDA RQP3 SAVE ADDRESS STA BFADD OF BUFFER. LDB RQP4,I GET BUFFER LENGTH, SAVE STB $IDNO FOR TRANS.LOG CHECK, JSB $CVWD CONVERT TO POSITIVE STB BFCNT CHAR COUNT AND SAVE. LDA RQP2,I GET TYPE OF REQUEST. ADA DM2 SZA,RSS JMP MPT9W 2=WRITE. INA,SZA 1=READ. JMP ESC02 ILLEGAL REQUEST. * MPT9R LDB XEQT READ A STRING BLOCK FOR AN ID-SEG. JSB $STSH TO THE BUFFER(E=1,EXTRA WORD). SZA,RSS GET THE STRING BLOCK ADDRESS JMP NOPAW FOR THIS PROG. IF NO STRING, ADA D2 THEN SET A=1, CLEAR B, AND RETURN. LDB A,I GET ACTUAL SIZE OF STORED CMB,CLE,INB STRING AND COMPARE ADB BFCNT TO REQUESTED LDB A STRING SIZE. SEZ,INA,RSS SET A REG. TO SOURCE ADDRESS. LDB BFCTA USE WHICHEVER SIZE IS LDB B,I SMALLER AND CONVERT STB BFCNT INB TO WORDS AND USE BRS AS MOVE WORDS STB XB,I COUNT. LDB BFADD SET B REG. TO DESTINATION ADD. JSB .MVW GO MOVE WORDS. DEF XB,I NOP LDB XEQT WHEN COMPLETE, RETURN THE JSB $RTST STRING BLOCK TO MEMORY. LDB XB,I GET MOVE WORDS COUNT. LDA $IDNO IF ORIGINAL REQUEST WAS SSA FOR CHARS, THEN DOUBLE LDB BFCNT WORD COUNT FOR TRANS.LOG. JMP MPT91 GO SETUP REGS. AND RETURN. * MPT9W LDA XEQT WRITE A STRING BLOCK TO THE FATHER. ADA D20 GET CURRENT PROGRAM LDA A,I AND DETERMINE IF THERE AND B377 IS A FATHER. SZA,RSS JMP NOPAW ERROR, NO FATHER. CCB,CCE GET ID(SET E=1 FOR ALCST) ADB KEYWD SEGMENT ADB A ADDRESS OF LDB B,I FATHER. JSB ALCST DEALLOCATE AND THEN ALLOC.BLOCK FOR PAW. JMP ESC10 IF SUCCESS ALLOC.,THEN SET A=0.IF NO JMP NMNOW MEM EVER,ABORT SON(SC10).IF NO MEM MPT91 CLA NOW, SUSPEND THE SON. * MPT95 STB XB,I SET UP B REGISTER. STA XA,I SET UP A REGISTER. JMP MEM15 RETURN. * NMNOW JSB $LIST  NOT ENOUGH MEMORY NOW SO OCT 504 LINK PROGRAM INTO MEMORY JMP $XEQ SUSPENSION LIST. * NOPAW INA IF NO STRING ON 'GET' OR CLB NO FATHER ON 'PUT', THEN JMP MPT95 SET A=1 OR B=0. * DM2 DEC -2 SKP ************************************************************** * * SUBROUTINE TO STORE A STRING IN SYSTEM AVAILABLE MEMORY. * ALCST DEALLOCATES ANY STRING MEMORY, ALLOCATES A BLOCK OF * MEMORY, TRANSFERS THE STRING INTO THE BLOCK, AND LINKS THE * BLOCK INTO THE HEAD OF THE STACK LOCATED AT $STRG. THE LINKED * BLOCKS LOOK AS FOLLOWS: * * * *********** ********************* * $STRG * ---------* 0 OR LINK-------------- * *********** *-------------------* * EXTRA WORD BIT------* ID SEG ADDRESS * * *-------------------* * * # CHARS IN STRING * * *-------------------* * * CHAR 1 CHAR 2 * * *-------------------* * * * * *-------------------* * * CHAR M * * ********************* * * EXTRA WORD * * *-------------------* * * * WORD 1 = LINK TO NEXT BLOCK OR 0 FOR LAST BLOCK * WORD 2 = BITS 0-14 = ID-SEGMENT ADDRESS * BIT 15 = EXTRA WORD IN BLOCK BIT(SEE $ALC) * WORD 3 = ACTUAL NUMBER OF CHARS (M) IN STRING * * CALLING SEQUENCE: * BFADD:= BUFFER ADDRESS * BFCNT:= POSITIVE BUFFER WORD COUNT * CLE/CCE (SEE BELOW) * LDB ID-SEGMENT ADDRESS * JSB ALCST * * RETURN: * (P+1) =-1, =MEANINGLESS UNSUCCESSFUL,NO MEM EVER * (P+2) =0 , =MEANINGLESS UNSUCCESSFUL,NO MEM NOW * (P+3) =+ , =MEANINGLESS SUCCESSFUL ALLOCATION EVER * * AND C8 ARE MODIFIED * TEMP1 AND TEMP4 ARE USED. * CALLS $RTST WHICH USES TEMP2 AND TEMP3. * * ON ENTRY, IF E REG=0, THE BASE PAGE WORD XTEMP(1721B)IS SET * TO THE ID SEGMENT WORD 2 ADDRESS INDICATED BY THE B REGISTER * AND THEN RESTORED ON EXIT. IF THE E REG=1, THEN XTEMP IS * NOT MODIFIED. SINCE ON "NOT ENOUGH MEMORY", $ALC WILL STORE * THE AMOUNT OF MEMORY REQUIRED IN 'XTEMP,I' THIS WILL RESULT: * 1)E=0,SAVE MEMORY SIZE IN XTEMP OF B REG PROGRAM, OR * 2)E=1,SAVE MEMORY SIZE IN XTEMP OF CURRENT PROGRAM(USED * ONLY IN EXEC 14 CALLS FROM SON TO FATHER). * *************************************************************** * ALCST NOP STB TEMP1 SAVE ID ADDRESS. LDA XTEMP SAVE ADDRESS OF STA TEMP4 CURRENT PROGRAM'S ID WORD 2. SEZ,INB,RSS IF E=0,THEN SETUP OUR PROGRAM'S STB XTEMP ID WORD 2 FOR USE BY $ALC. LDB TEMP1 GET ID ADDRESS AND JSB $RTST RETURN ANY STRING MEMORY. LDA BFCNT GET CHAR COUNT. INA CHANGE TO ARS WORD COUNT STA RTSTW AND SAVE. ADA D3 INCREMENT WORD COUNT BY STA WORDS 3 FOR LINKAGE WORDS AND JSB $ALC GO GET MEMORY. WORDS NOP JMP ALST9 NO MEMORY EVER RETURN. JMP ALST8 NO MEMORY NOW RETURN. CCE OK RETURN. SET E REG TO CPB WORDS 1 IF AN EXTRA WORD WAS CLE RETURNED. LDB $STRG LINK THE BLOCK INTO STB A,I THE HEAD OF THE STA $STRG STACK HEADED AT $STRG. LDB TEMP1 GET ID-SEG ADDRESS, ADD IN RBL,ERB EXTRA BLOCK WORD BIT, INA AND STORE IN SECOND STB A,I BLOCK WORD. LDB BFCNT STORE BUFFER CHAR INA COUNT IN THIRD STB A,I WORD OF BLOCK. INA LDB A GET ADD.OF DESTINATION BUFFER. # LDA BFADD GET ADDRESS OF SOURCE BUFFER. JSB .MVW GO MOVE WORDS FROM USER MAP. DEF RTSTW NOP ISZ ALCST SUCCESSFUL RETURN. ALST8 ISZ ALCST NO MEMORY NOW RETURN. ALST9 LDB TEMP4 RESTORE THE CURRENT STB XTEMP PROGRAM'S ID WORD 2 ADDRESS. JMP ALCST,I NO MEMORY EVER RETURN--A=STATUS. * STRGA DEF $STRG $STRG OCT 0 HEAD OF STRING STORAGE STACK. BFCTA DEF BFCNT BFCNT BSS 1 BFADD BSS 1 SKP ************************************************************** * * SUBROUTINE TO RETURN SYSTEM AVAILABLE MEMORY ALLOCATED * FOR A STRING. GIVEN A PROGRAM'S ID-SEGMENT ADDRESS, $RTST * LOCATES THE STRING IN THE BLOCK HEADED AT $STRG, UNLINKS * IT AND RETURNS IT TO SAVMEM. * * CALLING SEQUENCE: * LDB ID-SEGMENT ADDRESS * JSB $RTST * * RETURN: * NO REGISTERS ARE SAVED. * USES TEMP2 FOR TEMPORARY STORAGE. * CALLS $STSH WHICH USES TEMP3. * ************************************************************** * $RTST NOP STB TEMP2 SAVE ID-SEGMENT ADDRESS. RTST1 JSB $STSH GET STRING BLOCK ADD.(E=1,EXTRA WD). SZA,RSS CHECK IF STRING JMP RTST9 BLOCK FOUND. STA RTSTA STORE STARTING BLOCK ADDRESS. LDA A,I UNLINK BLOCK STA B,I FROM STACK. LDA RTSTA ADA D2 GET SIZE OF LDB A,I BLOCK, CONVERT INB TO WORDS BRS AND ADB D3 ADD 3. SEZ IF EXTRA WORD BIT SET, INB ADD 1 TO SIZE. STB RTSTW STORE TOTAL SIZE OF BLOCK. JSB $RTN RETURN MEMORY BLOCK. RTSTA NOP RTSTW NOP LDB TEMP2 GET ID SEGMENT ADDRESS. JMP RTST1 CHECK FOR ANY MORE BLOCKS. * RTST9 JMP $RTST,I RETURN. SKP ********************************************************************** * * SUBROUTINE $STSH CHASES DOWN A STRING nBLOCK IN THE STACK * HEADED AT $STRG GIVEN THE ID-SEGMENT ADDRESS. * * CALLING SEQUENCE: * LDB ID-SEGMENT ADDRESS * JSB $STSH * * RETURN: * =0 = COULD NOT FIND NAMED BLOCK * =+ = ADDRESS OF BLOCK, E=1 = EXTRA WORD IN BLOCK * B= ADDRESS OF PREVIOUS BLOCK * USES TEMPORARY LOCATION TEMP3. * ********************************************************************** * $STSH NOP STB TEMP3 SAVE ID-SEGMENT ADDRESS LDB STRGA GET POINTER TO HEAD OF STACK. STSH1 LDA B,I GET BLOCK ADDRESS AND CLE,SZA,RSS IF ZERO, THEN END JMP STSH9 OF STACK. INA OTHERWIZE,INCREMENT IT,AND GET LDA A,I GET ID-SEGMENT ADDRESS. ELA,RAR SAVE EXTRA WORD BIT IN E REG. CPA TEMP3 IF THIS IS CORRECT JMP STSH2 BLOCK, THEN RETURN. LDB B,I OTHERWIZE, GO CHECK JMP STSH1 NEXT BLOCK. * STSH2 LDA B,I SET A=BLOCK ADDRESS AND STSH9 JMP $STSH,I RETURN. * ********************************************************************** * * $CVWD CONVERTS NEGATIVE CHARACTER COUNT OR POSITIVE WORD COUNT * TO POSITIVE CHARACTER COUNT. * * CALLING SEQUENCE: * LDB COUNT(+ = WORDS, - = CHARACTERS) * JSB $CVWD * * RETURN: * B = +CHARACTERS * ********************************************************************** * $CVWD NOP SSB CONVERT NEGATIVE CMB,INB,RSS CHARACTERS AND BLS POSITIVE WORDS TO JMP $CVWD,I POSITIVE CHARACTERS. HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** * * *** SYSTEM BASE PAGE COMMUNICATION AREA *** * XI EQU 1647B . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES * DRT EQU .+2 FWA OF DEVICE REFERENCE/ TABLE LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) * INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES * TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE * KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 9 PARAMETERS) RQP9 EQU .+32 * * DEFINITION OF SYSTEM LISTS (QUEUES) * * DORMT EQU .+32 ADDRESS OF 'DORMANT' LIST, SKEDD EQU .+33 'SCHEDULE' LIST, SUSP2 EQU .+35 'WAIT' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUN.640ICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BACKGROUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) * DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS * BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND * * FREG1 EQU LBORG FREG2 EQU RTORG FREG3 EQU BKORG FLG EQU OPFLG * A EQU 0B LOCATION OF A REGISTER B EQU 1B LOCATION OF B REGISTER ORG * PROGRAM LENGTH END $LIST a6ASMB,R HED * REAL-TIME EXECUTIVE MEMORY ALLOCATION * * NAME: $ALC * SOURCE: 92001-18012 * RELOC: 92001-16012 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM $ALC,0 92001-16012 741120 * ENT $ALC,$RTN EXT $LIST,$WORK * * PROGRAMMER: G.A. ANZINGER HP AMD 1 MAY 70 BCS * 24 JUN 74 RTE * * REQUESTS MAY BE MADE TO ALLOCATE AND RELEASE BUFFERS * FROM THE MEMORY AVAILABLE AFTER LOADING. * * 1. ALLOCATE: CALLING SEQUENCE - * (P) JSB $ALC * (P+1) (# OF WORDS NEEDED) * (P+2) -RETURN NO MEMORY EVER (A)=-1, (B)=MAX EVER * (P+3) -RETURN NO MEMORY NOW (A)=0, (B)=MAX NOW * (P+4) -RETURN OK (A)=ADDR , (B)=SIZE OR SIZE+1 * * 2. RELEASE BUFFER TO AVAILABLE MEMORY * (P) JSB $RTN * (P+1) (FWA OF BUFFER) * (P+2) (# OF WORDS RETURNED) * (P+3) -RETURN- (ALL REGISTERS DESTROYED) * * IF A REQUEST FOR A BUFFER OF LENGTH X CANNOT BE FILLED * DURING A GIVEN CALL, RETURN IS MADE WITH: * (A) = 0 * * IF, WHEN BUFFER REQUESTED, - (AVMEM) - SHOWS INSUFFICIENT CORE * AVAILABLE TO CONTAIN A BUFFER OF THE LENGTH REQUESTED, * THEN RETURN IS MADE WITH: * (A) = -1 * (B) = MAXIMUM LENGTH BUFFER THAT THE PROGRAM MAY ALLOCATE. * * TO FIND OUT HOW LARGE A BUFFER MAY BE ALLOCATED, USE THE CALL * * JSB $ALC * DEC 32767 * * BLOCKS OF MEMORY AVAILABLE FOR OUTPUT BUFFERING ARE LINKED THROUGH * THE FIRST TWO WORDS OF EACH BLOCK - * WORD1 - LENGTH OF BLOCK * WORD2 - ADDRESS OF NEXT BLOCK (OR 77777 IF THIS IS LAST BLOCK) * * THE ALLOCATOR 'TRANSFERS' THE UPPER END OF A BLOCK TO IOC AND * SHORTENS THE LENGTH OF THE BLOCK BY THE AMOUNT 'TRANSFERRED' * * * REGISTERS ARE NOT PRESERVED * SKP $ALC JMP ALCIN INIT (FROM $STRT, RETURNS TO $WORK) LDA $ALC,I GET THE LENGTH OF THE REQUEST STA ADX AND SAVE IT STA XTEMP,I SAVE IN ID SEG IN CASE SUSPEND LDB A ADA AVMEM ENOUGH MEMORY NOW SSA TO HONOR THE REQUEST? JMP .A1 YES, GO ALLOCATE. ADB MAXEV SSB,RSS WHAT ABOUT LATER? JMP ERETN NEVER! ISZ $ALC MAYBE, BUT NOT NOW. REJ CLA,CLE,RSS A=0, E=0 NOT NOW ERETN CCA,CLE A=-1,E=0 NOT EVER JMP SETB RETURN * .A1 ISZ $ALC TRY AN ALLOCATION CCA SET CORE AVAIL. NOW TO 0 STA ALCIN LDB PNTRA START THE SEARCH LOOP WITH .A2 STB BAD SET LAST BUFFER ADDRESS CLE,INB STEP TO THE NEXT ADDRESS LDB B,I GET THE NEXT SEGMENT ADDRESS CPB M7 IF 77777 THEN END OF LIST AND NO JMP NOMOR MEMORY SO REJECT LDA B,I CHECK TO SEE IF THIS IS THE ADA ALCIN LARGEST LENGTH SO FAR LDA B,I GET THE LENGTH CMA,SEZ SET NEG(-1) AND IF STA ALCIN LARGEST SO FAR SAVE ADA ADX WILL IT SATISFY THE REQUEST? CMA,SSA IF ZERO OR NEGATIVE USE IT JMP .A2 ELSE GO TRY NEXT ONE ADA DM2 IS BLOCK AT LEAST 2 WORDS CCE,SSA LARGER THAN REQUEST? JMP .A4 NO-ALLOCATE WHOLE BLOCK ADA D2 (A)=LENGTH(I)-L(X) STA B,I SET NEW L(I) ADA B (A)=BUFFER ADDRESS JMP SETA RETURN TO USER * .A4 LDA B,I ALLOCATE ENTIRE BLOCK. STA ADX SET BUFFER LENOGTH STB A BUFFER ADDRESS TO A CCE,INB SET E FOR ACCEPTED RETURN LDB B,I GET THE POINTER TO THE NEXT BLOCK ISZ BAD STEP TO POINTER ADDRESS IN LAST STB BAD,I BLOCK AND SET THE POINTER SETA ISZ $ALC SETB LDB MAXEV SET B FOR REJECT SZA,RSS IF JUST FOR NOW RESET TO MAX LDB AVMEM AVAILABLE NOW CMB,SEZ SET POSITIVE AND IF REQUEST LDB ADX SATISFIED SET TO LENGTH ISZ $ALC STEP RETURN ADDRESS JMP $ALC,I AND RETURN * NOMOR LDA ALCIN PICK UP MAX LEFT DURING SEARCH STA AVMEM UPDATE MAX AVAILABLE NOW JMP REJ NOW RETURN * * $RTN NOP ENTRY POINT FOR BUFFER RETURN LDA $RTN,I (A) = FWA RETURN BUFFER (ADX) STA ADX CMA,INA SET NEG AND STA SAVA SAVE ISZ $RTN LDA $RTN,I # OF WORDS RETURNED (X) ADA DM2 SSA <2? JMP RETNR BUFFER TO SMALL - IGNORE LDA PNTRA GET THE STARTING POINTER .R11 STA BAD BAD _ AAD INA LDB A,I AAD _ NEXTBUFAD STB A A _ PNTR ADB SAVA AAD -ADX CMB,SSB,INB,SZB ADX-AAD>=0? RSS SKIP IF FOUND JMP .R11 ELSE CONTINUE * * * LDB BAD GET LOWER BUFFER ADDRESS CPB PNTRA IF LOCAT POINTER JMP .R3 ASSUME NO OVERLAP ADB B,I ADD LENGTH AND ADB SAVA SUBTRACT THE NEW BLOCK ADDRESS CMB,SSB,INB,RSS IF NEG NO OVERLAP SO JMP .R3 JUMP ADB $RTN,I ELSE COMPUTE NEW LENGTH ADB BAD,I NOW HAVE NEW +OLD-OVERLAP .R4 STB BAD,I SET LENGTH ;CHECK FOR HIGH OVER- ADB BAD LAP COMPUTE END OF BLOCK CMB,CLE,INB AND SUBTRACT FROM THE HIGH BLOCK ADB A A HAS HIGH BLOCK ADDRESS SEZ,CLE,SZB IF RESULT POSITIVE JMP .R5 JUMP ADB A,I ADD OLD UPPER LENGTH ADB t<BAD,I CURRENT LENGTH STB BAD,I NEW+OLD-OVERLAP CLE,INA GET POINTER AND BRING LDA A,I DOWN TO NEW BLOCK .R5 LDB BAD,I SAVE MAX LENGTH THIS RETURN ISZ BAD STEP TO POINTER ADRRESS STA BAD,I SET THE POINTER LDA AVMEM CHECK TOO SEE IF THIS LENGTH ADA B ADD CURRENT MAX CMB,SEZ,CLE SET NEG; NEW MAX? STB AVMEM YES; SET IT RETNR ISZ $RTN MEM16 LDB SUSP3 GET SUSPENSION LIST PTR SZB,RSS IF END OF LIST JMP $RTN,I RETURN. * LDA B INA PICK UP XTEMP,I FOR LDA A,I BLOCK SIZE REQUESTED. ADA AVMEM COMPARE TO MAX NOW CMA,SSA,INA,SZA ENOUGH YET? JMP $RTN,I NO, TOO BAD. JSB $LIST YES, SCHEDULE PROGRAM. OCT 401 JMP MEM16 TRY NEXT PROGRAM TOO. * .R3 ISZ BAD NO LOW OVERLAP SET NEW BLOCK LDB ADX ADDRESS IN LOW BLOCK STB BAD,I TO LINK THE BLOCKS STB BAD SET POINTER FOR HIGH BLOCK CHECK LDB $RTN,I SET B TO THE LENGTH OF RETURN JMP .R4 CHECK FOR HIGH OVERLAP * * * PNTRA DEF AVMEM DUMMY BLOCK ADDRESS(DON'T MESS!) AVMEM OCT -1 DUMMY BLOCK LENGTH (NOT USED) PNTR OCT 77777 DUMMY BLOCK END (DON'T MESS!) BAD NOP SAVA NOP M7 OCT 77777 DM2 OCT -2 D2 OCT 2 ADX NOP * ALCIN LDA AVMEM INITIALIZATION CODE MAXEV STA * MAX SIZE BLOCK EVER AVAILABLE JMP $WORK JMP TO NEXT STARTUP ROUTINE * A EQU 0 B EQU 1 SUSP3 EQU 1714B XTEMP EQU 1721B * BSS 0 LENGTH OF PROGRAM * END $ALC V   92001-18014 1631 S 0122 &AUTOR AUTO RESTART (AUTOR)             H0101 FTN,L C NAME: AUTOR C SOURCE: 92001-18014 C RELOC: 92001-16014 C PGMR: G.A.A. C D.L.S.,760622 C C PROGRAM AUTOR(2,1) DIMENSION ITM(3),ITMX(5) EQUIVALENCE (ITM(1),REG),(ITM(2),IB) C C SCAN THE LU'S TO FIND THE LU FOR C THE PFAIL DRIVER DO 5 I= 1,64 C DO A STATUS CALL C CALL EXEC(100015B,I,IEQT5,IEQT4) C C IGNOR UNDEFINED,AND UNASSIGNED LU'S. GO TO 5 C IS DRIVER TYPE EQUAL TO 43? C 600 IF (IAND(IEQT5,37400B)-21400B)5,15,5 C C YES, IS THE SELECT CODE=4? C 15 IF (IAND(IEQT4,77B)-4)5,17,5 C 5 CONTINUE C POWER FAIL LU NOT FOUND WRITE (1,700) 700 FORMAT("POWER FAIL LU NOT FOUND. TIME OF POWER FAIL UNKNOWN") C C SET TO USE LU ZERO LU=0 GO TO 20 C LU FOUND SET TO GET FAIL TIME 17 LU=I C CALL THE PFAIL DVR TO GET FAIL TIME 20 CALL EXEC(1,LU,ITM,3) C CONVERT THE DOUBLE INTEGER TO: C HR,MIN,SEC.TENS OF MS CALL TMVAL(ITM,ITMX) C GET THE YEAR OFFSET FROM DAYS IB=ITM(3)/365 C ADD THE BASE YEAR TO GET ACTUAL YEAR IY=IB+1970 C SUBTRACT THE YEARS TO GET DAYS AND C CORRECT FOR DAY ZERO. ID=ITM(3)-IB*365+1 C FLOAT THE TENS OF MS VALUE REG=ITMX(1) C COMPUTE SECONDS INTO ONE FLOATING WORD REG=REG/100.+FLOAT(ITMX(2)) C ***************************** C G THE FOLLOWING DO LOOP MAY BE C MODIFIED IF DESIRED. C IT SERVES TWO FUNCTIONS: C 1) BY SENDING A MESSAGE TO EACH TTY C THE DRIVER WILL RESET THE TTY C INTERFACE TO REENABLE ANY C TERMINALS (MUST ISSUE A STC). C 2) ANY USERS AT THE TERMINALS ARE C INFORMED THAT THE LAST LINE MAY C NOT HAVE BEEN TRANSMITTED C CORRECTLY. C ***************************** C C FORMAT TO PRINT THE TIME C 40 FORMAT("POWER FAILED AT "I2":"I2":"F6.3" ON DAY "I3" OF "I4) C C SCAN FOR ALL THE TTY TYPE DEVICES DO 30 I=1,64 C DO STATUS CALL CALL EXEC(100015B,I,IEQT5,ISTA2,ISTA3) C IGNOR UNDEFINED,AND UNASSIGNED LU'S GO TO 30 C CHECK IF TYPE 0 DEVICE (I.E. A TTY) 1 IF(IAND(IEQT5,37400B))25,2,25 C CHECK IF TYPE 5 DEVICE 25 IEQT5=IEQT5-2400B IF(IAND(IEQT5,37400B))30,27,30 C IF TYPE 5 DEVICE, CHECK TO SEE IF C SUBCHANNEL 0(I.E. A CONSOLE) 27 IF(IAND(ISTA3,37B))30,2,30 C IF FIND A DEVICE, WRITE TIME ON IT. 2 WRITE(I,40)ITMX(4),ITMX(3),REG,ID,IY 30 CONTINUE C ***************************** C USER POWER FAIL RECOVERY CODE C SHOULD BE ADDED HERE. C REMEMBER IF POWER FAILS C  WHILE IN THIS CODE IT C MAY RUN FOR A FEW C SECONDS AFTER POWER IS C RESTORED AND THEN BE ABANDONED C AND RESTARTED FROM THE C TOP. C ***************************** C C SECOND CALL ON PFAIL ROUTINE RESETS C TO SAVE TIME ON NEXT FAILURE. CALL EXEC(1,LU,ITM,3) STOP END END$ G   92001-18015 1631 S C1222 RTE II SYSTEM GEN PART I             H0112 *ASMB,R,L,Z USE 'Z' FOR RTE-III GENERATOR *ASMB,R,L,N USE 'N' FOR RTE-II GENERATOR HED REAL TIME SYSTEM GENERATOR * NAME: RTGEN * SOURCE: 92001-18015 (RTE-II AND RTE-III) * RELOC: 92001-16015 (RTE-II) 92060-16030 (RTE-III) * PGMR: GAA/RHB * * *************************************************************** * * THIS PROGRAM CONTAINS INFORMATION WHICH IS PROPRIETARY TO * * * THE HEWLETT-PACKARD COMPANY. IT IS NOT TO BE DISCLOSED TO * * * ANY THIRD PARTIES OR REPRODUCED EXCEPT FOR ARCHIVE PURPOSES * * *************************************************************** * IFN *** BEGIN NON-MEU CODE *** NAM RTEGN 92001-16015 REV.1631 760630 **** END NON-MEU CODE **** XIF IFZ ***** BEGIN MEU CODE ***** NAM RTEGN 92060-16030 REV.1631 760630 ****** END MEU CODE ****** XIF SPC 1 ENT N1,N2,N3,N4,N5,N6,N8,N9,N10,N16,N27 ENT N64,P2,P3,P4,P5,P6,P7,P8,P9,P11,P12,P13,P14 ENT P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 ENT P28,P29,P31,P33,P60,P64,P99,P202,P6K,L60,L2000 ENT M60,M77,M120,M177,M377,M777,M400,D128,M200,M0760 ENT M1740,M1600,M1777,M2000,M1377,M7400,M7000,M7600 ENT M7700,M7777,M0300,M1177 ENT DPWRS,P0100,P1000,P100,P10,P1 ENT OPWRS,M0100,M1000,M100,M10 ENT PPREL,LWASM,BLANK,UBLNK,MSIGN,RPARB ENT ADBP,DSKA,MOVW * * ENTRY POINTS FOR THIS MODULE * * VARIABLES ... * EXT DSKAB * * UTILITY SUBROUTINES * ENT DOCON,SPACE,READ,GETNA,GINIT,GETOC,GETAL ENT INERR,YE/NO,LSTS,ERROR,LSTE,LABDO,IRERR ENT OUTID,CONVD * ORB A EQU 0 B EQU 1 SPC 2 * THE FOLLOWING LABELS ARE TO BE SATISFIED BY THE DRIVER MODULE * OF THE GENERATOR. THAT MODULE TAKES CARE OF ALL THINGS WHICH * DEPEND ON THE DETAILS OF THE DISC AND ITS CONTROLER. * EXT SYSCH SYSTEM SUBCHANNEL EXT AUXCH AUX DISC SUBCHANNEL EXT DSIZE SY'STEM DISC SIZE (TRACKS) EXT DAUXN AUX DISC SIZE (TRACKS) EXT DSETU INITILIZE SUBROUTINE EXT DSKSC SCRATCH DISC ADDRESS EXT LSSYS,LSAUX LAST SEEK FLAGS EXT DISKA INCREMENT DISC ADDRESS SUBROUTINE EXT DISKO DISC OUTPUT ROUTINE EXT DISKI DISC INPUT ROUTINE EXT DSTBL GENERATE DISC TABLE SUBROUTINE EXT TRTST TEST CURRENT TRACK SUBROUTINE EXT DTSET SET UP TAT SUBROUTNE EXT SDS# SYSTEM DISC SECTORS/TRACK EXT ADS# AUX DISC SECTORS/TRACK EXT FSECT FLUSH FINAL SECTOR FROM CORE EXT DERCN DISC ERROR COUNT EXT DBPO ORG OF DUMMY BASE PAGE EXT DSKAB INITIAL ABS DISC ADDRESS EXT PTBOT CONFIGURE DISC/ PUNCH BOOT SKP * GENERATOR ORGANIZATION * ORDER * OF EXECUTION SPC 3 ***************** - HIGH CORE - ****************** * * * SIO DRIVERS (TTY,LP,PT,HSP,MT) * * * ************************************************** * - IDENTS - * * ---------- * * * * - FIX UP TABLE - * * ------- * * - LST - * ************************************************** * * * DISC MODULE USUALLY HERE * * * ************************************************** * * * LOAD, LINKAGE SUBROUTINES * * * ************************************************** * * {* FINAL CLEAN UP, LIBRARY MOVE * 8 * DIRECTORY CREATION ECT. * * * * IFZ - (DMS SYSTEM) PARTITION DEFINITION, * * PROG SIZE OVERRIDE, ETC. * * * * PROGRAM LOADING CONTROL * 4,6 * * ************************************************** * * * I/O TABLE GENERATION * 5 * * * PARAMETER INPUT * 3 * * ************************************************** * * * * * RELOCATABLE PROGRAM INPUT * 2 * * * INITIALIZATION * 1 * * * * ****************** - 2000 - ********************** * * * * * DATA AREAS, SOME GENERAL SUBS. * * * * * ************************************************** SKP * IDENT FORMAT * * WORD 1: ID1 - NAME 1,2 * WORD 2: ID2 - NAME 3,4 * WORD 3: ID3 - NAME 5, USAGE FLAG (SEE BELOW) * WORD 4: ID4 - COMMON LENGTH * WORD 5: ID5 - CURRENT DISK ADDRESS * WORD 6 (15): ID6 - M/S * WORD 6 (08-14): ID6 - NOT USED * WORD 6 (00-06): ID6 - TYPE * WORD 7: ID7 - LOWEST DBL ADDRESS * WORD 8: ID8 - DISK LENGTH FOR UTILITY RELOCATABLES * OR.. MAIN IDENT ADDR FOR SEGMENTS * OR.. (DMS SYSTEMS) PG REQMTS (8 BI4TS) * THEN KEYWD INDEX (LOW 8 BITS). * * USAGE FLAG BITS ARE AS FOLLOWS: * * BIT 0 IF SET MODULE WAS LOADED * BIT 1 IF SET MUST LOAD THIS MODULE (EXT DEFINED BY IT) * BIT 2 IF SET THIS MODULE WAS LOADED AS PART OF A SEGMENT * * * LST FORMAT * * WORD 1: LST1 - NAME 1,2 * WORD 2: LST2 - NAME 3,4 * WORD 3: LST3 - NAME 5, ORDINAL * WORD 4: LST4 - IDENT ADDRESS OR 2 IF COMMON, 3 IF ABS, 4 IF REPLACE * WORD 5: LST5 - SYMBOL VALUE * * * PROGRAM TYPES (NON-DMS) * * 0: SYSTEM * 1: RT RESIDENT * 2: RT DISK RESIDENT * 3: BG DISK RESIDENT * 4: BG RESIDENT * 5: BG SEGMENT * 6: LIBRARY * 7: UTILITY * 8: LOAD ONLY TO SATISFY EXTERNAL REFERENCES. * 9: RT RESIDENT USING BACKGROUND COMMON. * 10: RT DISC RESIDENT USING BACKGROUND COMMON. * 12: BG RESIDENT USING FORGROUND COMMON. * 11: BG DISC RESIDENT USING FORGROUND COMMON. * 13: BG SEGMENT USING FORGROUND COMMON * 14: TYPE 6 THAT IS TO BE FOURCE LOADED TO THE LIBRARY. * 30: (DMS SYSTEM SSGA MODULE) CONVERTED TO TYPE 7. * 16-29,31 (DMS MODULES USING SSGA) TYPE SET TO TYPE-16. * 15,32-99:UNUSED (TYPE + 80 IS USED TO DESIGNATE AUTO SPC 1 * PROGRAM TYPES (DMS SYSTEMS) * * 0: SYSTEM * 1: MEMORY RESIDENT * 2: RT DISK RESIDENT * 3: BG DISK RESIDENT * 4: (CONVERTED TO 9) * 5: BG SEGMENT * 6: LIBRARY * 7: UTILITY * 8: LOAD ONLY TO SATISFY EXTERNAL REFERENCES. * 9: MEMORY RESIDENT USING BACKGROUND COMMON. * 10: RT DISC RESIDENT USING BACKGROUND COMMON. * 11: BG DISC RESIDENT USING FORGROUND COMMON. * 12: (CONVERTED TO TYPE 1) * 13: (CONVERTED TO 5, USES SAME COMMON AS MAIN) * 14: TYPE 6 THAT IS TO BE FOURCE LOADED TO THE LIBRARY. * 30: SUBSYSTEM GLOBAL MODULE * 17,18,19,25,26,27: TYPES 1,2,3,9,10,11 (RESP.) * W/ACCESS TO SSGA. * 15,16,20-24,28,29,31-99:UNUSED (TYPE + 80 IS USED TO * DESIGNATE AUTO SCHEDULE AT STARTUP, BUT MAY * ONLY BE ENTERED IN PARM PHASE. +80 IS JUST *  A FLAG TO PARM PHASE, NOT STORED IN ID-SEG.) * * * FIX UP TABLE FORMAT * * FIX1: CORE ADDRESS * FIX2: INSTRUCTION CODE * FIX3: OFFSET * FIX4: ADDRESS OF LST ENTRY REFERENCED OR ZERO IF NONE. SKP * * ERROR CODES * * 1: INVALID TTY REPLY TO INITIALIZATION PARAMETERS * 2: CHECKSUM ERROR * 3: RECORD OUT OF SEQUENCE * 4: INVALID RECORD TYPE * 5: DUPLICATE ENTRY POINTS * 6: NOT USED * 7: LST,IDENT,FIXUP TABLE OVERFLOW * 8: DUPLICATE PROGRAM NAMES * 9: PARAMETER NAME ERROR * 10: PARAMETER TYPE ERROR * 11: PARAMETER PRIORITY ERROR * 12: PARAMETER EXECUTION INTERVAL ERROR * 13: BG SEGMENT PRECEDES BG DISC RESIDENT * 14: SYS AV MEM OR BG BOUNDARY ERRORS * 15: ILLEGAL CALL BY A TYPE 6 PROGRAM (MAY CALL TYPE 0 AND 6 ONLY) * 16: BP LINKAGE AREA OVERFLOW * 17: DISK OVERFLOW (NEXT DISK ADDR EXCEEDS LAST AVAIL DISK ADDR) * 18: MEMORY OVERFLOW * 19: ATTEMPT TO RESTART AFTER CLEAN-UP BEGUN * 20: NOT USED * 21: '$CIC' NOT FOUND IN LOADER SYMBOL TABLE * 22: DISK READ PARITY/DECODE ERROR * 23: INVALID FWA BP LINKAGE REPLY * 24: INVALID CHANNEL NO. IN EQT RECORD * 25: INVALID DRIVER NAME IN EQT RECORD * 26: INVALID D, B, U, OPERANDS IN EQT RECORD * 27: INVALID DEVICE REFERENCE NO. * 28: INVALID INTERRUPT REC CHANNEL NO. * 29: INVALID INTERRUPT REC CHANNEL NO. ORDER * 30: INVALID INT RECORD MNEMONIC * 31: INVALID EQT NO. IN INT RECORD * 32: INVALID PROGRAM NAME IN INT RECORD * 33: INVALID ENTRY POINT IN INT RECORD * 34: INVALID ABSOLUTE VALUE IN INT RECORD * 35: BP INTERRUPT LOCATION OVERFLOW * 36: INVALID TERMINATING OPERAND IN INT RECORD * 37: INVALID COMMON LENGTH IN SYS, LIB, OR SSGA MODULE..... * 38: ABSOLUTE SYSTEM HAS OVERLAYED A RELOCATABLE PROGRAM * 39: ILLEGAL SYSTEM CALL OF TYPE 6 PROGRAM * 40: MH RTEGN ATTEMPTED TO USE A DEFECTIVE CYLINDER * 41: MORE THAN 10 BAD TRACKS IN A MOVING HEAD SYSTEM * 42: ABSOLUTE SYSTEM INCLUDES A BAD TRACK * 43: DISC SPECIFICATIONS DO NOT CONFORM +TO SYSTEM DISC SKP ******************************************************************** * * * M E U E R R O R C O D E S * * * ******************************************************************** SPC 1 * DURING DEFINITION OF PARTITIONS: * 44: INVALID PARTITION NUMBER * 45: INVALID PARTITION SIZE * 46: INVALID PARTITION TYPE * 47: INVALID PARTITION RESERVE * USER RESPONSE TO 44 THRU 47: REENTER DESCRIPTION * OF PARTITION IN QUESTION AND CONTINUE. * * 53: PARTITION SIZES DON'T TOTAL TO AVAILABLE AREA * USER RESPONSE TO 53: REDEFINE ALL PARTITIONS * * DURING ASSIGNMENT OF PROGRAMS TO PARTITIONS: * 48: INVALID OR UNKNOWN PROGRAM NAME * 49: INVALID PARTITION NUMBER * 50: PROGRAM TOO LARGE FOR PARTITION SPECIFIED * USER RESPONSE TO 48 THRU 50: REENTER ASSIGNMENT * OR GIVE UP AND CONTINUE * * DURING OVERRIDE OF PROGRAM SIZE REQMTS: * 48: (SAME AS ABOVE) * 51: INVALID SIZE (LARGER THAN ALLOWABLE OR * SMALLER THAN PROGRAM REQUIREMENT * USER RESPONSE TO 48 OR 51: REENTER SIZE OVERRIDE * OR GIVE UP AND CONTINUE * * DURING PROGRAM LOADING AND RELOCATION: * 52: MODULE WITHOUT SSGA BIT IN TYPE HAS * EXTERNAL REF TO AN SSGA ENTRY POINT * USER RESPONSE: CHANGE TYPE OR DELETE SSGA REFERENCE * 54: SUBROUTINE OR SEGMENT DECLARED MORE COMMON THAN MAIN * USER RESPONSE: RECOMPILE MAIN SPECIFYING MAX COMMON NEEDED HED RTE GENERATOR - CONSTANTS AND ADDRESSES * DRPTR EQU 101B PT READER DRIVER ADDRESS DRKEY EQU 102B KEYBOARD OUPUT DRIVER ADDRESS DRHSP EQU 103B HS PUNCH DRIVER ADDRESS DRTTY EQU 104B TELETYPE INPUT DRIVER ADDRESS FWAM EQU 105B LWAM EQU 106B END AVAIL. MEM - SET BY DRIVERS DRMAG EQU 107B (TEMP MAG TAPE DRIVER ADDR) . EQU 1650B ORIGIN OF SYS COMM AREA SPZC 1 TRANS DEF RTEGN TRANSFER ADDR TO RTEGN AINPT DEF INPUT ADDRESS OF PROGRAM INPUT CODE APARS DEF PARAM ADDRESS OF PARAMETER INPUT CODE IFZ ***** BEGIN DMS CODE ***** APART DEF PARTS ADDRESS OF PARTITION DEF PHASE ****** END DMS CODE ****** XIF NRST DEF E19 ADDRESS OF RESTART ERROR CODE ADBP DEF DBPO STARTING ADDRESS OF DUMMY BASE PAGE NADBP BSS 1 THE NEG OF RTEGN START SKP * * PROGRAM CONSTANT FACTORS ZERO OCT 0 N1 DEC -1 N2 DEC -2 N3 DEC -3 N4 DEC -4 N5 DEC -5 N6 DEC -6 N7 DEC -7 N8 DEC -8 N9 DEC -9 N10 DEC -10 N11 DEC -11 N16 DEC -16 N27 DEC -27 N32 DEC -32 N64 DEC -64 N65 DEC -65 N80 DEC -80 N2048 DEC -2048 NDAY OCT 177574,025000 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P8 DEC 8 P9 DEC 9 P11 DEC 11 P12 DEC 12 P13 DEC 13 P14 DEC 14 P15 DEC 15 P16 DEC 16 P17 DEC 17 P18 DEC 18 P19 DEC 19 P20 DEC 20 P21 DEC 21 P22 DEC 22 P23 DEC 23 P24 DEC 24 P25 DEC 25 P26 DEC 26 P28 DEC 28 P29 DEC 29 P30 DEC 30 P31 DEC 31 P32 DEC 32 P33 DEC 33 P60 DEC 60 P64 DEC 64 P99 DEC 99 P202 DEC 202 P6K DEC 6000 L6 EQU N6 L10 EQU N8 L12 EQU N10 L60 OCT -60 L2000 OCT -2000 M4 EQU P4 M7 EQU P7 M13 EQU P11 M17 EQU P15 M20 EQU P16 M37 EQU P31 M60 OCT 60 M77 OCT 77 M120 OCT 120 M177 OCT 177 M377 OCT 377 M777 OCT 777 M400 OCT 400 D128 DEC 128 M200 EQU D128 M0760 OCT 076000 M1740 OCT 174000 M1760 OCT 176000 M1600 OCT 160000 M1777 OCT 1777 M2000 OCT 2000 M2002 OCT 2002 M1377 OCT 100377 M4000 OCT 4000 M7400 OCT 177400 M7000 OCT 177000 M7600 OCT 177600 M7700 OCT 177700 M7777 OCT 77777 M0300 OCT 030000 M0400 OCT 040000 M1177 OCT 101777 SKP DPWRS DEF *+1 P0100 DEC 10000 P1000 DEC 1000 P100 DEC 100 P10 DEC 10 P1 DEC 1 OP,CWRS DEF *+1 M0100 OCT 10000 M1000 OCT 1000 M100 OCT 100 M10 OCT 10 OCT 1 * SUP BLANK OCT 040 BLANK UBLNK OCT 20000 UPPER CHAR BLANK MSIGN OCT 100000 NEGATIVE SIGN RPARB OCT 24440 RIGHT PAREN, BLANK SPC 3 * DBLNK DEF UBLNK DEF OF BLANK FOR SPACE ROUTINE TTYIN NOP ADDRESS OF THE TTY INPUT DRIVER (ACTUAL) LSTD NOP ADDRESS OF THE ACTUAL LIST DEVICE DRIVER DAOUT DEF ASOUT ADDRESS OF DUMMY LIST OUTPUT DRIVER DASIN DEF ASIN ADDRESS OF DUMMY INPUT DRIVER. SPC 2 IFN *** BEGIN NON-DMS CODE *** FWSCA EQU .-1 FIRST WORD OF SYS COMM AREA LWSBP ABS FWSCA LAST WORD OF BP LINK AREA +1 EOBP ABS -FWSCA #IREG EQU P2 NUMBER OF INDEX REGS (AMOUNT OF * SPACE ALLOWED FOR SAVING THEM) **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** FWSCA EQU .-1 EXTEND COMM AREA FOR I-REG PTR LWSBP ABS FWSCA LWA BP LINK AREA +1 #IREG EQU P2 SAVE 2 I-REGS ****** END DMS CODE ****** XIF SPC 2 * ALL STARTS AND RESTARTS COME TO HERE. * BEGIN LDA DAOUT GET THE DUMMY DRIVER ADDRESS CPA DRKEY ALREADY SET UP? JMP TRANS,I YES GO RESTART THE CODE * LDB DRKEY GET THE ACTUAL ADDRESS STB LSTD AND SET FOR DUMMY ROUTINES LDB DRTTY GET THE ACTUAL INPUT DRIVER ADDRESS STB TTYIN AND SET FOR DUMMY ROUTINES STA DRKEY SET THE DUMMY ADDRESSES LDA DASIN GET THE DUMMY INPUT ROUTINE ADDRESS STA DRTTY AND SET IT. JMP TRANS,I GO DO THE RT GENERATION!! HED RTE GENERATOR BASE PAGE ROUTINES * THE INIDX,IDXS AND IDX SUBROUTINES ARE USED TO SET THE CURRENT * ADDRESSES FOR THE ENTRY IN THE PROGRAM IDENTIFICATION * BLOCK TABLE (IDENT). THE ADDRESS OF THE NEXT ENTRY * IN THE IDENT TABLE IS CONTAINED IN TIDNT. ON RETURN FROM * IDX, TIDNT CONTAINS THE ADDRESS OF THE NEXT AVAILABLE * ENTRY IA N IDENT. THE ADDRESS OF THE FIRST ENTRY IS CONTAINED * IN BIDNT AND THE ADDRESS OF THE END OF IDENT IS CONTAINED * IN PIDNT. * * IDXS FINDS AN ENTRY IN THE TABLE. * * IF THE NEXT IDENT ENTRY OVERFLOWS INTO THE LAST LST ENTRY, * IDX PRINTS A DIAGNOSTIC AND EXITS TO THE IRRECOVERABLE ERROR * SUBROUTINE. * * SET INITIAL IDENT ADDRESS * * INIDX SETS THE ADDRESS OF THE FIRST ENTRY IN THE IDENT * TABLE AS THE CURRENT ADDRESS. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INIDX * * RETURN: CONTENTS OF A DESTROYED, B PRESERVED * INIDX NOP LDA BIDNT BIDNT = INITIAL IDENT ADDRESS STA TIDNT SET CURRENT IDENT ADDRESS JMP INIDX,I RETURN SKP * IDXS FINDS AN ID ENTRY IN THE IDENT TABLE. * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF THE NAME TO FIND. * JSB IDXS * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): CURRENT IDENT ADDRESSES ARE FOR THE NEXT FREE ENTRY IN * THE IDENT LIST. SYMBOL NOT FOUND. * (N+2): CURRENT IDENT ADDRESSES ARE FOR THE SPECIFIED PROGRAM. * IDXS NOP JSB INIDX INIT TIDNT TO 1ST IDENT ADDR STB INIDX SAVE PTR TO ASCII NAME * ** OTHER SUBS MAY WANT NAME PTR IN INIDX ** LDB TIDNT B WILL KEEP ADDR IN IDENT JMP IDXS7 JUMP TO END TO ENTER LOOP SPC 1 IDXS2 ADB N8 POINT TO NEXT IDENT IDXS3 CPB PIDNT IF AT END OF IDENTS JMP IDXS4 THEN LEAVE... CPA B,I ELSE IF 1ST 2 CHARS RSS DON'T MATCH JMP IDXS2 TRY NEXT IDENT SPC 1 ISZ IDXST 1ST 2 MATCH, GET LDA IDXST,I NEXT 2 FROM INPUT INB AND FROM IDENT. CPA B,I IF NOT A MATCH RSS THEN JUMP TO UPDATE JMP IDXS5 IDENT PTR AND CONTINUE. SPC 1 ISZ IDXST 1ST 4 CHARS MATCH, LDA IDXST,I GET NEXT FROM INPUT INB i AND IDENT XOR B,I AND M7400 COMPARE UPPER BYTE ONLY SZA AND IF NO MATCH JMP IDXS6 GO GET NEXT IDENT SPC 1 * MATCH OCCURRED - BACKUP POINTER TO BEGINNING OF IDENT SPC 1 ADB N2 POINT TO START OF IDENT SPC 1 * MATCH OR NOT..... SET UP IDENT POINTERS USING 'IDX' SPC 1 IDXS4 STB TIDNT POINT TIDNT AT CURRENT IDENT JSB IDX GO SET IDENT POINTERS JMP IDXS,I NO MATCH - RETURN AT N+1 ISZ IDXS JMP IDXS,I MATCH - RETURN AT N+2 SPC 1 IDXS5 ADB P1 JUGGLE A LITTLE IDXS6 ADB N10 TO GET NEXT IDENT ADDR IDXS7 LDA INIDX RESET POINTER TO STA IDXST START OF NAME. LDA A,I PUT 1ST CHARS IN A. JMP IDXS3 GO CHECK NEXT IDENT IDXST BSS 1 TEMPORARY SPC 3 * * SET IDENT ADDRESSES FROM TIDNT * * IDX SETS THE ADDRESSES OF THE CURRENT 10-WORD ENTRY IN THE * IDENT TABLE FROM THE ADDRESS OF THE CURRENT ENTRY (TIDNT). * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB IDX * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): CURRENT IDENT ADDRESSES ARE THE ADDRESSES * OF THE NEXT AVAILABLE IDENT ENTRY, OR THE * END OF THE IDENT TABLE HAS BEEN REACHED. * (N+2): CURRENT IDENT ENTRY ADDRESSES (NOT END OF IDENT) * IDX NOP LDA TIDNT TIDNT = CURRENT IDENT ADDRESS CPA PIDNT END OF IDENT LIST? RSS YES - RETURN TO NEXT INSTRUCTION ISZ IDX SET RETURN ADDRESS FOR N+2 STA ID1 SET ADDRESS OF NAME 1,2 INA STA ID2 SET ADDRESS OF NAME 3,4 INA STA ID3 SET ADDRESS OF NAME 5, USE FLAG INA STA ID4 SET ADDRESS OF COM/PROG LENGTH INA STA ID5 SET ADDRESS OF CURRENT DISK ADDR INA STA ID6 SET ADDRESS OF M/S,PRIOR/DISK,TY INA STA -bID7 SET ADDRESS OF EXEC INTERV(1) INA STA ID8 SET MAIN IDENT ADDR FOR BS LDA TIDNT TIDNT = CURRENT IDENT ADDR CMA,INA ADA PLST PLST = CURRENT END LST ADDR SSA,RSS SKIP IF NO OVERLAP JMP LSERR PRINT OVERFLOW MESSAGE * LDA TIDNT GET CURRENT ADDRESS AND ADA N8 SET FOR NEXT IDENT ADDRESS STA TIDNT SET NEXT IDENT ADDRESS JMP IDX,I RETURN SKP * THE INLST, LSTS, LSTE AND LSTX SUBROUTINES ARE USED TO SET THE * CURRENT LOADER SYMBOL TABLE (LST) ADDRESSES. THE ADDR OF THE * NEXT ENTRY IN LST IS CONTAINED IN TLST. ON RETURN FROM IDX, * TLST CONTAINS THE ADDRESS OF THE NEXT AVAILABLE ENTRY IN LST, OR * THE ADDRESS OF THE END OF LST. THE ADDRESS OF THE FIRST ENTRY * IN LST IS AT BLST AND THE ADDRESS OF THE NEXT AVAILABLE ENTRY * IS AT PLST. * * IF THE NEXT ENTRY IN LST OVERFLOWS INTO THE CURRENT * IDENT ENTRY, LSTX PRINTS A DIAGNOSTIC AND EXITS * TO THE IRRECOVERABLE ERROR SUBROUTINE. * * SET INITIAL LST ADDRESS * * INLST SETS THE ADDRESS OF THE FIRST ENTRY IN LST. * INLST NOP LDA BLST BLST = FIRST LST ADDRESS STA TLST SET CURRENT LST ADDRESS JMP INLST,I RETURN SKP * LSTS SEARCHED THE LST FOR A SPECIFIED ENTRY. * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF THE ASCII NAME TO BE FOUND. * JSB LSTS * * RETURN: CONTENTS OF A AND B DESTROYED. * (N+1): THE END OF THE LST WAS FOUND WITH OUT FINDING THE * SYMBOL. THE LST ENTRIES ARE SET TO THE NEXT AVAILABLE * ENTRY. * (N+2): THE CURRENT LST ADDRESS POINT TO THE FOUND ENTRY. * LSTS NOP JSB INLST INIT TLST TO 1ST LST ADDRDDR STB INLST SAVE PTR TO ASCII NAME * ** SOME SUBS EXPECT LSTS TO STORE THIS ** * ** POINTER IN INLST'S ENTRY POINT ** LDB TLST B WILL KEEP ADDR IN LST Hm JMP LSTS7 ENTER LOOP AT END. SPC 1 LSTS2 ADB P5 POINT TO NEXT LST LSTS3 CPB PLST IF AT END OF LSTS JMP LSTS4 THEN LEAVE... CPA B,I ELSE IF 1ST 2 CHARS RSS DON'T MATCH JMP LSTS2 TRY NEXT LST SPC 1 ISZ LSTST 1ST 2 MATCH, GET LDA LSTST,I NEXT 2 FROM INPUT INB AND FROM LST. CPA B,I IF NOT A MATCH RSS THEN JUMP TO UPDATE JMP LSTS6 LST PTR AND CONTINUE. SPC 1 ISZ LSTST 1ST 4 CHARS MATCH, LDA LSTST,I GET NEXT FROM INPUT INB AND LST XOR B,I AND M7400 COMPARE UPPER BYTE ONLY SZA AND IF NO MATCH JMP LSTS5 GO GET NEXT LST SPC 1 * MATCH OCCURRED - BACKUP POINTER TO BEGINNING OF LST SPC 1 ADB N2 POINT TO START OF LST SPC 1 * MATCH OR NOT..... SET UP LST POINTERS USING 'LSTX' SPC 1 LSTS4 STB TLST POINT TLST AT CURRENT LST JSB LSTX GO SET LST POINTERS JMP LSTS,I NO MATCH - RETURN AT N+1 ISZ LSTS JMP LSTS,I MATCH - RETURN AT N+2 SPC 1 LSTS5 ADB N1 JUGGLE A LITTLE LSTS6 ADB P4 TO GET NEXT LST ADDR LSTS7 LDA INLST RESET PTR TO STA LSTST ASCII NAME. LDA A,I PUT 1ST 2 CHARS IN A. JMP LSTS3 GO CHECK NEXT IDENT.... LSTST BSS 1 TEMPORARY SKP * * SET LST ADDRESSES FROM TLST * * LSTX SETS THE CURRENT LST ADDRESSES FROM TLST. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB LSTX * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): THE END OF LST IS REACHED AND THE CURRENT * LST ADDRESSES ARE THE ADDRESSES OF THE NEXT AVAILABLE * ENTRY IN LST. * (N+2): CURRENT LST ADDRESSES ARE SET (NOT END OF LST). * LSTX NOP LDA TLST GET CURRENT LST ADDRESS qj CPA PLST END OF LST TABLE? RSS ISZ LSTX INCR RETURN ADDRESS STA LST1 SET WORD 1 ADDR INA STA LST2 SET WORD 2 ADDR INA STA LST3 SET WORD 3 ADDR INA STA LST4 SET WORD 4 ADDR INA STA LST5 SET WORD 5 ADDR INA STA TLST SET NEXT LST ADDRESS CMA,INA ADA PIDNT PIDNT = ADDR CURRENT IDENT SSA,RSS SKIP - INVALID LST ENTRY JMP LSTX,I RETURN * * LSERR LDA ERR07 JSB IRERR IRRECOVERABLE ERROR EXIT * ERR07 ASC 1,07 IDENT/LST OVERFLOW SKP * ENTRY A NEW SYMBOL * * LSTE SEARCHS THE LST FOR A SYMBOL AND IF NOT FOUND ENTERS IT * IN THE LST. * * CALLING SEQUENCE: * A = IGNORED * B = SYMBOL ADDRESS * JSB LSTE * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): SYMBOL IS NEW AND WAS ENTRED, LST ADDRESS ARE SET UP * (N+2): SYMBOL WAS IN LST. LST ADDRESS ARE SET UP. * LSTE NOP JSB LSTS SEARCH FOR THE SYMBOL JMP LSTE2 IF NOT FOUND GO ENTER * ISZ LSTE STEP TO ALREADY IN LST EXIT JMP LSTE,I AND EXIT * LSTE2 LDB INLST,I GET THE FIRST CHARACTERS OF NEW STB LST1,I SYMBOL AND SET IN THE LIST ISZ INLST STEP TO NEXT CHARACTERS LDA INLST,I GET THE CHARACTERS STA LST2,I AND SET ISZ INLST STEP TO THE LAST CHARACTER LDA INLST,I FETCH IT AND M7400 KEEP ONLY THE HIGH CHARACTER STA LST3,I SET IT IN THE LST CLA CLEAR STA LST4,I THE IDENT FLAG STA LST5,I AND VALUE FIELDS LDA LST5 ADVANCE THE END OF THE LST INA BY STA PLST ONE ENTRY JMP LSTE,I EXIT BACK TO THE USER HED RTE GENERATOR BASE PAGE WORKING LOCATIONS AND BUFFERS * RELOCATION BASE TABLE MRTAD DEF TPREL DEF FOR MR FIELD RBTAD DEF *+1 OCT 0 ABSOLUTE PROGRAM BASE TPREL OCT 0 CURRENT PROG BASE ADDRESS TPBRE OCT 0 BP RELOCATION ADDRESS COMAD OCT 0 CURRENT COMMON RELOCATION BASE NOP ABS PROGRAM BASE FOR MR CODE * ALBUF DEF LBUF ADBUF DEF DBUF ATBUF DEF TBUF AMLST DEF MLIST AMEM5 DEF MLIST+5 AMEM8 DEF MLIST+8 AILST DEF ILIST * WDCNT OCT 0 TEMPORARY WORD COUNTER * BLST NOP ADDR OF FIRST LST ENTRY TLST BSS 1 CURRENT LST ADDR PLST NOP ADDR OF NEXT AVAILABLE ENTRY * BIDNT BSS 1 ADDR OF FIRST IDENT TIDNT BSS 1 CURRENT IDENT PIDNT OCT 36000 NEXT AVAILABLE IDENT * BFIX NOP TFIX NOP PFIX NOP * * THE LST POINTERS BELOW CANNOT BE MOVED WITHOUT CHANGING * THE DRIVER (RTGEN PART 2)....THEY ARE EQUATED THERE ALSO. * LST1 EQU 07B WORD 1 ADDR (LST) LST2 EQU 10B WORD 2 ADDR (LST) LST3 EQU 11B WORD 3 ADDR (LST) LST4 EQU 12B WORD 4 ADDR (LST) LST5 EQU 13B WORD 5 ADDR (LST) * MAXC EQU 14B MAX CHAR COUNT TCHAR EQU 15B TEMPORARY CHAR SAVE AREA OCTNO EQU 16B OCTAL DIGIT * DSKSY EQU 17B INITIAL ID SEGMENT DISK ADDRESS PIOC EQU 20B ADDR. OF PRIVILEGED I/O CARD IDSP EQU 21B POSITION OF 1ST ID SEG. IN SECT TBCHN EQU 22B TIME BASE GENERATOR CHNL SWAPF EQU 23B SWAPPING FLAG = 0/1 = NO/YES LWASM EQU 24B LAST WORD SYS AVAIL MEM PARAD EQU 25B PARAMETER INPUT DRIVER ADDRESS TTYCH EQU 26B SYSTEM TTY CHANNEL NO. * DSKAD EQU 27B CURRENT DISK ADDRESS PLFLG EQU 30B PROGRAM LOAD. FLAG = -1/0 = L/NL DSCNT EQU 31B DISK SEGMENT SECTOR COUNT * ID1 EQU 32B IDENT 1 ADDR: NAME 1,2 ID2 EQU 33B IDENT 2 ADDR: NAME 3,4 ID3 EQU 34B IDENT 3 ADDR: NAME 5, USAGE FLAG ID4 EQU 35B IDENT 4 ADDR: COMMON LENGTH ZXTTZID5 EQU 36B IDENT 5 ADDR: CURRENT DISK ADDR ID6 EQU 37B IDENT 6 ADDR: M/S,PRIORITY,TYPE ID7 EQU 40B IDENT 7 ADDR: EXEC INTERV (1) ID8 EQU 41B IDENT 8 ADDR: LIB LGTH/BS MAIN * /ID SEG ADR FOR DMS MAINS * NXFLG EQU 42B ENT/EXT FLAG = -1/0 EXCNT EQU 43B SYMBOL COUNTER * CURAL EQU 44B CURRENT LBUF ADDRESS LCNT EQU 45B CURRENT LBUF COUNT * CURAD EQU 46B CURRENT DBUF ADDRESS DCNT EQU 47B CURRENT DBUF COUNT * CURAI EQU 50B CURRENT IBUF COUNT * CPLS EQU 51B ADDRESS OF TOP OF FIXED CP LINK IMAGE CPL2 EQU 52B ADDRESS OF HIGH CURRENT PAGE LINK SPECS. CPL1 EQU 53B ADDRESS OF LOW CURRENT PAGE LINK SPECS. CPL1H EQU 54B NUMBER OF CURRENT PAGE LINKS ASSIGNED CPL2H EQU 55B IN LOW AND HIGH AREA RESPECTIVELY URBP1 EQU 56B LWA R/T DISC RES BP LINK AREA BPMAX EQU 57B MAX USED BASE PAGE LINKAGE +1 CURAK EQU 60B CURRENT KBUF ADDRESS * CURAT EQU 61B CURRENT TBUF ADDRESS TCNT EQU 62B CURRENT TBUF COUNT * CURAP EQU 63B CURRENT PLIST ADDRESS * AMAD EQU 64B CURRENT MLIST ADDRESS * LICNT EQU 65B LONG ID SEGMENT COUNT SICNT EQU 66B SHORT ID SEGMENT COUNT COMRT EQU 67B MAXIMUM RT COM LENGTH COMBG EQU 70B MAX BG COM LENGTH * DSKEY EQU 71B CURRENT KEYWORD DISK ADDRESS DSKID EQU 72B DISK ID SEGMENT ADDRESS KEYCN EQU 73B TOTAL KEYWORD COUNT KEYCT EQU 74B CURRENT KEYWORD COUNT PTYPE EQU 75B PROGRAM TYPE * ******* LOCATION 76B BEGINS RESERVED AREA (SIO'S, ETC) ****** * FIX1 NOP FIX2 NOP FIX3 NOP FIX4 NOP * LNK1 NOP LNK2 NOP LNK3 NOP * LBUF BSS 64 LOAD BUFFER * CUBPA DEF CUBP ADDR OF CURRENT B.P. SPECS TBUF BSS 4 TEMP BUFFER MLIST BSS 11 MEMORY MAP BUFFER * TEMP1 NOP TEMP2 NOP LWH1 NOP LWH2 NOP LWH3 NOP LWH4 NOP L01 NOP * FSYBP BSS 1 FIRST WORD SYS BP LINKAGE SYSAD BSS 1 CURRENT ID SEGMENT ADDRESS * TBREL BSS 1 CURRENT BP RELOC ADDR PBREL BSS 1 INITIAL BP RELOC ADDR PPREL BSS 1 INITIAL PROG RELOC ADDR * RELAD BSS 1 CURRENT CORE RELOCATION ADDRESS * BSBAD BSS 1 BG SEGMENT BP RELOC ADDR BSPAD BSS 1 BG SEGMENT PROG RELOC ADDR * LFLAG BSS 1 PROGRAMS-LOADED FLAG IMAIN BSS 1 CURRENT MAIN IDENT ADDR HDFLG BSS 1 HEADING FORMAT FLAG CIDNT BSS 1 CURRENT MAIN IDENT ADDRESS DSKRD BSS 1 DISK INPUT ADDRESS * AEQT BSS 1 ADDRESS OF EQUIPMENT TABLE CEQT BSS 1 NO. ENTRIES IN EQUIPMENT TABLE * ASQT BSS 1 ADDR OF DEVICE REFERENCE TABLE CSQT BSS 1 NO. ENTRIES IN DEV. REF. TABLE * AINT BSS 1 ADDRESS OF INTERRUPT TABLE CINT BSS 1 NO. ENTRIES IN INTERRUPT TABLE * DSKIN BSS 1 DISK ADDR OF INT CODE RECORD INTCN BSS 1 RECORD COUNT OF INT CODE * CURIL BSS 1 CURRENT ILIST ADDRESS ILIST BSS 64 USER SYSTEM PROG IDENT ADDR LIST * DSKRX BSS 1 CURRENT TRACK ADDR. FOR "DBIN" IDSAV BSS 1 POINTER TO CURRENT IDENT ABCNT BSS 1 CURRENT ABSOLUTE DISPLACEMENT DSKMN BSS 1 INITIAL MAIN DISK ADDRESS BSSDP BSS 1 INITIAL DISK RES MAIN BSS DISP PRENT BSS 1 PRIMARY ENTRY POINT DBLAD BSS 1 CURRENT DBL ADDRESS REKEY BSS 1 INSTRUCTION TYPE BYTE INSCN BSS 1 INSTRUCTION TYPE COUNTER INSTR BSS 1 CURRENT INSTRUCTION PAGNO BSS 1 CURRENT PAGE NO. OPRND BSS 1 CURRENT OPERAND PLGTH BSS 1 PROGRAM LENGTH RANAD BSS 1 CURRENT POWER RANGE ADDRESS DSKA NOP TOP DISK ADDRESS WRITTEN ON DRT2 BSS 1 DISK DRT ENTRY ( SYSTEM) DRT3 BSS 1 AUX DISK DRT ENTRY LIBFG BSS 1 LDTYP BSS 1 SCH1 BSS 1 ADDRESS OF IDENT OF PGM TO BE SCHEDULED SCH3 BSS 1 ADDRESS OF CURRENT ID SEGMENT SCH4 BSS 1 AD['DRESS OF THE SCHEDULED PGM ID SEG FGBGC NOP BACKGROUND USING FG COMMON FLAG $LIBR NOP ADDRESS OF $LIBR ENT $LIBX NOP ADDRESS OF $LIBX ENT $RENT NOP ADDRESS OF $RENT ENT $PRIV NOP ADDRESS OF $PRIV ENT CUPRI NOP * MEM1 DEC 0 MEM2 DEC 0 MEM3 DEC 0 MEM4 DEC 0 MEM5 DEC 0 MEM6 DEC 0 MEM7 DEC 0 MEM8 DEC 0 MEM9 DEC 0 MEM10 DEC 0 MEM11 DEC 0 MEM12 DEC 0 * IFZ ***** BEGIN DMS CODE ***** COMSZ BSS 1 #WORDS COMMON DECLARED FOR * CURRENT MAIN MAPFG BSS 1 FLAG SAYS COMMON MAPPED BY SYS LPCOM BSS 1 LAST PAGE CONTAINING COMMON FPSAM BSS 1 1ST PAGE CONTAINING S.A.M. FWSAM BSS 1 1ST WORD CONTAINING S.A.M. LPSYS BSS 1 LAST PAGE CONTAINING SYS OR LIB FPDSK BSS 1 1ST PAGE DISK PART AREA LOLNK BSS 1 LOW LINK FOR SSGA,LIB, OR SYS HILNK BSS 1 HI LINK USED BY MEM RES PRG BPINC BSS 1 CURR DIRECTION FOR BP LINK * ALLOCATION. +1=UP,-1=DOWN BPLMT BSS 1 WORD AFTER LAST WORD AVAIL * FOR BP LINK ALLOCATION TPMAX BSS 1 HWM FOR RELOCATION OF BG * MAINS AND SEGS NUMPG BSS 1 NUM PAGES OF MAIN MEM MAXPT BSS 1 NUM PARTS. ALLOWED MAT. BSS 1 ADR OF LENGTH WORD * BEFORE MEM ALLOC TABLE (MAT) SSGA. BSS 1 FWA SSGA (LAST WORD SYS * OR LIB +1) FWMRP BSS 1 FWA MEM RES PROG AREA * (NEXT WORD AFTER COMMONS) MAP. BSS 1 PTR TO DMS RES MAP MPFT. BSS 1 PTR TO MPFT ****** END DMS CODE ****** XIF ERR09 ASC 1,09 PARAMETER NAME ERROR ERR10 ASC 1,10 PARAMETER TYPE ERROR ERR11 ASC 1,11 PARAMETER PRIORITY ERROR ERR12 ASC 1,12 PARAMETER INTERVAL ERROR ERR21 ASC 1,21 $CIC NOT FOUND IN LST ERR24 ASC 1,24 INVALID CHANNEL NO. IN EQT REC ERR25 ASC 1,25 INVALID DRIVER NAME ERR26 ASC 1,26 INVALID D,B, OR T OPERAND ERR27 ASC 1,27 INVALID DEVICE REF. NO. ERR28 ASC 1,28 INVALID INT REC CHANNEL NO. ERR29 ASC 1,29 INVALID INT CHANNEL NO. ORDER ERR30 ASC 1,30 INVALID INT REC MNEMONIC ERR31 ASC 1,31 INVALID EQT NO. IN INT RECORD ERR32 ASC 1,32 INVALID PROGRAM NAME IN INT REC ERR33 ASC 1,33 INVALID ENTRY POINT IN INT RECORD ERR34 ASC 1,34 INVALID ABS VALUE IN INT REC ERR35 ASC 1,35 BP INTERRUPT LOCATION OVERFLOW ERR36 ASC 1,36 INVALID FINAL OPERAND IN INT REC ERR37 ASC 1,37 INVALID COMMON IN SYS. LIB, OR UT PGM ERR39 ASC 1,39 ILLEGAL SYSTEM USE OF TYPE 6 PROGRAM ERR38 ASC 1,38 SYSTEM OVERFLOW INTO SCRATCH MESSAGE "/E" ASC 1,/E COMMA OCT 54 COMMA IJSB JSB 0,I I-JSB CODE FOR INTERRUPT LOCS UASCZ OCT 30000 UPPER ASCII ZERO CHAR "D" OCT 104 ASCII CHAR D "B" OCT 102 ASCII CHAR B "T" OCT 124 ASCII CHAR T BIT14 OCT 40000 BIT 14=1 $CIC ASC 3,$CIC "EQ" ASC 1,EQ "PR" ASC 1,PR "EN" ASC 1,EN "AB" ASC 1,AB UTCHR ASC 1,T UGCHR ASC 1,G USCHR ASC 1,S MES22 DEF *+1 ASC 3,(NONE) MES24 DEF MS24 MES28 DEF MS28 MES29 DEF MS29 * HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** *** SYSTEM BASE PAGE COMMUNICATION AREA *** * * * SYSTEM TABLE DEFINITION * * XI EQU .-1 ADDR OF I-REG SAVE AREA * FOR RUNNING PROG (DMS) EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10  OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 9 PARAMETERS) RQP9 EQU .+32 * * DEFINITION OF SYSTEM LISTS (QUEUES) * * DORMT EQU .+32 ADDRESS OF 'DORMANT' LIST, SKEDD EQU .+33 'SCHEDULE' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC 0RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BACKGROUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND HED RTE GENERATOR INITIALIZATION (** OVERLAYED **) ORR * * INITIAL TRANSFER IS MADE TO RTEGN BY SETTING 100(8) * IN THE SWITCH REGISTER AND PRESSING RUN. IF ANY ERRORS ARE * DETECTED DURING THE INITIALIZATION PHASE, THE INITIALIZATION * SECTION CAN BE REPEATED. * * THE FOLLOWING MESSAGES ARE PRINTED DURING THE INITIALIZATION * PHASE, WITH THE SPECIFICATIONS FOR EACH VALID RESONSE. * * * MESSAGE RESPONSE * * * TBG CHNL? ENTER 2 OCTAL DIGITS * * PRIV. INT. CARD ADDR? ENTER 2 OCTAL DIGITS * * SWAPPING? ENTER YES OR NO * * LWA MEM? ENTER 5 OCTAL DIGITS * * PRGM INPT? * LIBR INPT? ENTER PT, MT, DF, OR TY * PRAM INPT? * * FOLLOWING SUCCESSFUL COMPLETION OF THIS SECTION, * THE TRANSFER ADDRESS IS MOVED TO THE INITIALIZATION SECTION * OF THE LOADING PHASE. *  SKP RTEGN CLC 0,C TURN OFF ALL I/O,INTERRUPTS DBUF EQU RTEGN JSB SPACE GET A NEW JSB SPACE LINE LDA ADBP GET ADDRSS OF DUMMY BASE PAGE CMA,INA MAKE NEG STA NADBP SAVE LDA FWAM CLEAR THE STA PLST LST STA BLST AND SET UP STA TLST ITS POINTERS LDA CPLIM SET UP THE HIGH END LIMIT CMA,SSA,INA OF THE CP LINK IMAGE STA CPLIM AREA (IF NOT RESTARTING) LDB D$REN ENTER $RENT IN THE LST JSB LSTE LDA RSS SET IT UP AS STA LST5,I A REPLACE WITH RSS LDA P4 STA LST4,I ENT LDA LST1 SET FLAG STA $RENT FOR LOAD PHASE * LDB D$PRV DO SAME FOR $PRIV JSB LSTE LDA P4 STA LST4,I LDA RSS STA LST5,I LDA LST1 STA $PRIV SET FLAG FOR LOAD PHASE CLA SET THE INTERACTIVE INPUT FLAG STA ERROR * LDB D$CLS ENTER $CLAS IN JSB LSTE THE SYMBOL TABLE LDB D$LUS NOW ENTER $LUSW JSB LSTE LDB D$RNT AND $RNTB JSB LSTE LDB $LUAV AND $LUAV JSB LSTE * JSB DSETU SET UP THE DISC SPECIFICATIONS. * * SET TIME BASE GENERATOR CHANNEL * JSB SPACE NEW LINE CHNLT LDA P9 LDB MES30 MES30 = ADDR: TBG CHNL? JSB READ PRINT MESSAGE, GET REPLY LDA P2 SET FOR 2 OCTAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP CHNLT REPEAT INPUT STA TBCHN SET TBG CHANNEL NO. * * GET PRIV. INT. CARD ADDR. * JSB SPACE NEW LINE DUMY LDA P22 LDB MES41 MES41 = ADDR: PRIV. INT. CARD? JSB READ PRINT MESSAGE, GET REPLY LDA P2 SET FOR 2 OCTAL DIGITS INPUT JSB DOCON GET DIGITS JMP DUMY -ERROR, REPEAT INPUT. STA PIOC SET /ADDR. OF DUMMY CARD. IFN *** BEGIN NON-DMS CODE *** * SET SWAPPING FLAG * * * LDA "FG" GET ASCII 'FG' AND GO JSB SWAP? ASK 'FG SWAPPING?' STA SWAPF SAVE THE FLAG BIT * LDA "BG" NOW THE SAME FOR BACKGROUND JSB SWAP? RAL POSITION THE BIT IOR SWAPF COMBINE WITH 'FG' FLAG STA SWAPF AND SAVE IT **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** LDA P3 SET BOTH FG AND STA SWAPF BG SWAP FLAGS ALWAYS. SPC 1 JSB SPACE MAPC? LDA MLMP ASK USER IF DRIVERS ACCESS LDB MSMP. COMMON, IF SO, SET FLAG FOR JSB YE?NO SYSTEM TO MAP COMMON JMP MAPC? ASK AGAIN IF BAD ANSWER STA MAPFG SAVE 1 IF YES, 0 IF NO ****** END DMS CODE ****** XIF LDA "FG" NOW ASK JSB LOCK? 'FG CORE LOCK?' RAL,RAL ROTATE TO PROPER BIT POSITION IOR SWAPF COMBINE STA SWAPF AND SAVE * LDA "BG" NOW DO SAME FOR BACKGROUND JSB LOCK? ALF,RAR IOR SWAPF COMBINE STA SWAPF SAVE THE WORD. * SWPDL JSB SPACE LDA P11 GET THE LDB MES33 SWAP DELAY JSB READ LDA N3 CONVERT JSB DOCON TO BINARY FROM DECIMAL JMP SWPDL ERROR TRY AGAIN * AND M7400 IF > 256 SZA,RSS THEN JMP SWPOK * JSB INERR BITCH AND JMP SWPDL TRY AGAIN * SWPOK LDA OCTNO COMBINE ALF,ALF WITH SWAP IOR SWAPF FLAG STA SWAPF AND SAVE IFN *** BEGIN NON-DMS CODE *** * * SET LAST WORD AVAIL MEMORY * JSB SPACE NEW LINE SMLWA LDA P8 LDB MESS3 MESS3 = ADDR: LWA MEM? JSB READ PRINT MESSAGE, GET REPLY LDA P5 SET FOR 5 OCTAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP SMLWA REPEAT INPUT STA LWASM SET LWA MEM FOR SYSTEM **** END NON-DMS CODE **** XIF * IFZ ***** BEGIN DMS CODE ***** JSB SPACE SKIP A LINE MEMSZ LDA P9 THEN ASK USER LDB MESS3 FOR NUMBER OF PAGES JSB READ OF MAIN MEMORY LDA N4 GET 4 DECIMAL JSB DOCON DIGITS OR TRY AGAIN JMP MEMSZ IF ERROR STA NUMPG SPC 1 * DETERMINE LAST ADDR AVAILABLE TO RESIDENT SYSTEM * SPC 1 LDB P32 IF #PAGES IS CMB OVER 32 THEN ADB A USE 32, ELSE USE SSB,RSS WHAT HE SAID LDA P32 SPC 1 LSL 10 MULT BY 1024 AND SUBTRACT ADA N193 193 AND SAVE AS LAST STA LWASM USEABLE MEM WORD ****** END DMS CODE ****** XIF * SET PROGRAM INPUT UNIT JSB SPACE NEW LINE PGMIN LDA P10 LDB MESS4 MESS4 = ADDR: PRGM INPT? JSB READ PRINT MESSAGE, GET REPLY JSB SINIT GET CODE, ANALYSE JMP PGMIN REPEAT UNIT ENTRY STA PGMAD SET PROGRAM INPUT DRIVER ADDR * * SET LIBRARY INPUT UNIT JSB SPACE NEW LINE LIBIN LDA P10 LDB MESS5 MESS5 = ADDR: LIBR INPT? JSB READ PRINT MESSAGE, GET REPLY JSB SINIT GET CODE, ANALYSE JMP LIBIN REPEAT ENTRY STA LIBAD SET LIB INPUT DRIVER ADDRESS * * SET PARAMETER INPUT UNIT JSB SPACE NEW LINE PARIN LDA P10 LDB MESS6 MESS6 = ADDR: PRAM INPT? JSB READ PRINT MESSAGE, GET REPLY JSB SINIT GET CODE, ANALYSE JMP PARIN REPEAT PARAMETER INPUT STA PARAD PARAD = PRAM INPUT DRIVER ADDR JSB PTBOT FINISH THE DISC SET UP. LDA AINPT SET TRANSFER STA TRANS FOR INIT CODE LDA PLST  SET BOTTOM OF PROGRAM STA SLST DEFINED LST. SPC 2 * THE FOLLOWING EQUATES SET UP THE CURRENT PAGE LINKAGE IMAGE * AREA WHICH FOLLOWS DBUF. THESE TWO AREAS OVERLAY THE * INITIAL GENERATOR CODE BUT ARE NOT USED UNTIL PRAM AND LOAD * TIME. * LRBP EQU DBUF+64+3 LEAVE 64 WORDS FOR DBUF TBLNK EQU LRBP-3 SET STARTER POINTER URBP EQU LRBP+1 IRBP EQU LRBP+2 LBBP EQU LRBP+3 UBBP EQU LRBP+4 IBBP EQU LRBP+5 CUBP EQU LRBP+6 UCUBP EQU LRBP+7 ICUBP EQU LRBP+8 HED RTE GENERATOR INITIALIZE AND LOAD (** OVERLAYED**) * * INITIALIZE LOADING * INPUT CLA STA DERCN SET DISK ERROR COUNT TO ZERO JSB SPACE NEW LINE JSB SPACE NEW LINE IMAGT JMP *+9 IF MAGTAPE NOT DEFINED SKIP JSB DRMAG,I ELSE REWIND OCT 3 MT UNIT CLA,INA AND SPACE CLB TO FILE JSB DRMAG,I NUMBER OCT 4 TWO HLT 1 ERROR HLT 1 HALTS LDA LWAM GET LAST WORD AVAIL MEMORY ADA N9 ADJUST FOR FIRST IDENT LENGTH STA BIDNT BIDNT = ADDR OF FIRST IDENT STA PIDNT PIDNT = ADDRESS OF NEXT IDENT LDA SLST SLST = ADDR OF FIRST PGM LST ENTRY STA PLST PLST = ADDRESS OF END OF LST LDA DSKSC GET DISK ADDRESS OF SCRATCH AREA STA DSKAD SET CURRENT DISK ADDRESS LDB ADBUF GET ADDRESS OF DBUF STB CURAD INITIALIZE CURRENT DBUF ADDRESS JSB BUFCL CLEAR DBUF LDA N64 STA DCNT INITIALIZE CURRENT DBUF COUNT CCA SET A = -1 STA PLFLG PLFLG = LOADING FLAG = -1 * * TEST FOR PROG, LIB, END OF LOAD * SWR = 00 - LOAD NEXT SOURCE PROG * SWR = 01 - TERMINATE LOADING * SWR = 10 - LOAD LIBRARY PROGRAM * TSTIN JSB HL-IT77 GET SWR, SET INPUT UNIT LIA 1 GET SWR SLA SKIP IF MORE RECS TO READ JMP LSTEX PROCESS END OF LOAD CONDITION TSTN4 LDB PGMAD GET PROG INPUT DRIVER ADDR ARS,SLA SKIP - LOAD PROGRAM TAPE LDB LIBAD GET LIBR INPUT DRIVER ADDR STB PINAD SET INPUT UNIT DRIVER ADDR CCA STA ETFLG SET EOT FLAG = IGNORE 10 FF * READ BINARY RECORD LDRIN LDB ALBUF ALBUF = ADDR OF LBUF JSB BUFCL CLEAR LBUF LDA DRMAG CPA PINAD CCA,RSS JMP PTDV. STA LSSYS SET LAST SEEK FLAGS STA LSAUX TO -1 IN CASE INPUT FROM SAME DISC LDA N64 LDB ALBUF JSB PINAD,I OCT 000000 JMP MTEOT JMP PAR.E JMP TESTR PTDV. LDA N64 LDB ALBUF ALBUF = ADDRESS OF LBUF JSB PINAD,I GET BINARY RECORD FROM INPT UNIT SZA TEST FOR FEED FRAMES INPUT JMP TESTR NO - PROCESS RECORD LDA ETFLG GET EOT FLAG SZA SKIP IF MAX 10 FF PERMITTED JMP LDRIN IGNORE 10 FEED FRAMES MTEOT LDA P4 LDB MESS7 MESS7 = ADDR: *EOT JSB DRKEY,I PRINT: *EOT JMP TSTIN TEST SWR, SET INPUT UNUT * * PROCESS INPUT RECORD TESTR CLA STA ETFLG SET EOT FLAG = MAX 10 FF LDA LBUF+1 GET RECORD IDENTIFIER ALF,RAR ROTATE RIC TO LOW A AND M7 ISOLATE RIC STA RIC RIC = RECORD IDENT CODE SZA SKIP IF ABSOLUTE RECORD ADA L6 ADD -6B SSA,RSS TEST FOR RIC = (1,5) JMP RCERR INVALID RECORD TYPE * * TEST CHECK SUM LDB LBUF GET RECORD LENGTH BLF,BLF ROTATE TO LOW B CMB,INB SET TO NEG ADB P3 ADD 3 FOR WORD COUNT IN CHECKSUM SSB,RSS TEST FOR SHORT (1,3) RECORD JMP RCERR  SHORT (1-3) WORD RECORD JSB CKSUM FIGURE CHECK SUM CPA LBUF+2 TEST WITH GIVEN CHECKSUM JMP LDRC PROCESS VALID RECORD * * INVALID CHECKSUM PAR.E LDA ERR02 ERCOV LDB BULST IF PROCESSING A SKIP SSB JMP LDRIN THEN JUST CONTINUE * JSB ERROR SEND ERROR MESSAGE LDA PLFLG GET THE LOADING FLAG LDB ID1 AND THE NAME ADDRESS OF CURRENT MODULE SZA IF NOT WITHIN A MODULE LDB MES22 USE '(NONE' INSTEAD LDA P5 PRINT 5 CHARACTERS JSB DRKEY,I OF PROGRAM NAME ON TTY HLT 04B WAIT FOR OPERATOR * LIA 1 GET THE SWITCH REGISTER LDB PLFLG GET THE LOADING FLAG SSA IF FLUSH NOT CHOSEN OR SZB IF NO CURRENT PROGRAM JMP NOFL FORGET ABOUT FLUSHING * LDA BUID ELSE BACK UP THE IDENT LST STA PIDNT LDA BULST AND THE ENT LIST STA PLST CCA SET THE FLUSHING STA BULST FLAG STA PLFLG AND THE NAM EXPECTED FLAG JSB DDOUT RESET THE BUFFER POINTERS LDA ID5,I TO THE ORGION STA DSKAD JMP LDRIN GO GET THE NEXT RECORD * NOFL LDA DRMAG IF ERROR ON CPA PINAD MASS STORAGE CLA,RSS THEN SKIP JMP LDRIN ELSE REREAD THE RECORD CCB MASS STORAGE SO JSB DRMAG,I BACKSPACE OCT 4 ONE HLT 1 RECORD HLT 1 AND JMP LDRIN REREAD RECORD * RCERR LDA ERR04 JMP ERCOV GO TEST AND PRINT MESSAGE * * CLASSIFY RECORDS BY TYPE * LDRC LDA RIC GET REC IDENT CODE LDB PLFLG PLFLG = PROGRAM LOADING FLAG CPA P1 RIC = 1? (NAM) JMP NAMR PROCESS NAM REC SZB SKIP IF NOT LOADING JMP NMERR RECORD OUT OF SEQUENCE CPA P2 RIC = 2? (pENT) JMP ENTR PROCESS ENT REC CPA P3 RIC = 3? (DBL) JMP DBLR PROCESS DBL REC CPA P4 RIC = 4? (EXT) JMP EXTR PROCESS EXT REC SKP * * PROCESS END RECORD CLA,INA SET MASK = 1 AND LBUF+1 ISOLATE M/S RAR MOVE M/S TO SIGN POSITION IOR ID6,I ADD TO TYPE STA ID6,I SET M/S, TYPE * CCA STA PLFLG SET PROG LOAD FLAG = LOADING STA CNFLG SET FLAG FOR LB, UT END COUNT JSB DWRIT PACK, PUT OUT TO DISK * LDA ID5,I GET NAM DISK ADDRESS LDB ALBUF INPUT NAM RECORD JSB DISKI LDA LWH1 COMPILED? SZA,RSS YES,SKIP JMP CKSM1 NO,JUST FIGURE CHECKSUM LDA LWH2 STORE LENGTH IOR MSIGN INTO IT STA LBUF+6 CKSM1 JSB CKSUM GO FIGURE THE CHECKSUM STA LBUF+2 NEW CHECKSUM LDA ID5,I OUTPUT NAM LDB ALBUF RECORD AGAIN JSB DISKO JMP LDRIN NOW GO * NMERR LDA ERR03 NOT EXPECTING CURRENT RECORD TYPE JMP ERCOV TEST FOR ACTION AND ECT. SPC 2 D$PRV DEF A$PRV "BG" ASC 1,BG IFN *** BEGIN NON-DMS CODE *** "FG" ASC 1,FG **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** N193 DEC -193 (-(64+128+1) ROM+DR BOOT+1 "FG" ASC 1,RT ****** END DMS CODE ****** XIF IFN *** BEGIN NON-DMS CODE *** * * * SWAP? ASKS THE 'XX SWAPPING?' QUESTION AND RETURNS * THE ANALIZED ANSWER. * * CALLING SEQUENCE: * LDA "FG" OR "BG" * JSB SWAP? * RETURN A=1 IF YES, 0 IF NO. * SWAP? NOP STA MES31,I SET THE 'FG' OR 'BG' JSB SPACE SPACE TO MAKE IT LOOK NEAT FSWAP LDA P12 GET COUNT LDB MES31 GET THE MESSAGE ADDRESS JSB YE?NO ASK AND ANALIZE THE RESPONCE JMP FSWAP BAD NEWS, TRY AGAIN * JMP SWAP?,I EXIT TRN**** END NON-DMS CODE **** XIF * * * LOCK? ASKS AND ANALIZES THE 'XX CORE LOCK?' QUESTION. * * CALLING SEQUENCE: * * LDA "FG" OR "BG" * JSB LOCK? * RETURN A=1 IF YES, 0 IF NO. * * LOCK? NOP STA MES32,I SET THE 'FG' OF 'BG' IN MESSAGE JSB SPACE MAKE IT LOOK NEAT. LOCK1 LDA P13 GET THE LENGTH LDB MES32 GET MESSAGE ADDRESS JSB YE?NO GO ASK AND GET ANSWER JMP LOCK1 ERROR SO RETRY * JMP LOCK?,I RETURN SPC 2 * YE?NO ROUTINE SENDS A QUESTION TO THE TTY * AND READS AND ANALIZES THE RESPONCE * * CALLING SEQUENCE: * * LDA MESSAGE CHARACTER COUNT * LDB MESSAGE ADDRESS * JSB YE?NO * JMP ERROR * NORMAL RETURN A=1 FOR YES, 0 FOR NO. * YE?NO NOP JSB READ GO PRINT MESSAGE AND GET ANSWER JSB YE/NO ANALIZE THE ANSWER JMP YE?NO,I ERROR EXIT * CLA,RSS NO RETURN CLA,INA YES RETURN ISZ YE?NO STEP RETURN ADDRESS JMP YE?NO,I RETURN TO CALLER. SKP * * NAM RECORD PROCESSOR NAM12 EQU LBUF+3 NAM34 EQU LBUF+4 NAM5 EQU LBUF+5 NPROG EQU LBUF+6 NCOM EQU LBUF+8 NTYP EQU LBUF+9 NPRIO EQU LBUF+10 NINT1 EQU LBUF+11 NINT2 EQU LBUF+12 NINT3 EQU LBUF+13 NINT4 EQU LBUF+14 NINT5 EQU LBUF+15 NINT6 EQU LBUF+16 DNAM DEF NAM12 * NAMR SZB,RSS SKIP IF LOADING JMP NMERR RECORD OUT OF SEQUENCE * LDA PIDNT SAVE CURRENT IDENT AND STA BUID LST LDA PLST ADDRESS STA BULST FOR POSSIBLE MODULE PURGE LDA LBUF GET RECORD LENGTH ALF,ALF ROTATE TO LOW A T CPA P9 TEST FOR NAM REC = 9 WORDS LDA P17 GET NEW NAM REC LENGTH CODE ALF,ALF ROTATE TO HIGH A STA LBUF SET NAM REC LENGTH IN WORD 1 CLB STB DSCNT CLEAR DISK SEGMENT COUNT STB CNFLG CLEAR DISK SEGMENT COUNT FLAG STB PLFLG SET PLFLG = NOT LOADING LDB DNAM GET NAME ADDRESS JSB IDXS SEARCH FOR THE ENTRY JMP ENTNA YES - ENTER NAME * LDA ERR08 GET ERROR CODE - DUPLICATE NAMES JSB ERROR PRINT DIAGNOSTIC LDA P5 LDB ID1 GET ADDRESS OF NAME IN IDENT JSB DRKEY,I PRINT DUPLICATE PROG. NAME JMP REPNA REPLACE REST OF IDENT * ENTNA LDA NAM12 GET NAME 1,2 STA ID1,I SET NAME 1,2 IN IDENT LDA NAM34 GET NAME 3,4 STA ID2,I SET NAME 3,4 IN IDENT LDA NAM5 GET NAME 5 AND M7400 SAVE UPPER CHAR STA ID3,I SET NAME 5 IN IDENT LDA TIDNT GET ADDRESS OF NEXT IDENT STA PIDNT SAVE NEXT IDENT ADDRESS * REPNA LDA NTYP GET PROGRAM TYPE AND M177 ISOLATE TYPE JSB FILTR CHANGE IF NECESSARY *RTE 2 & 3* STA ID6,I SET TYPE IN IDENT LDB NCOM GET COMMON LENGTH STB ID4,I SAVE COMMON LENGTH * LDA DSKAD DSKAD = CURRENT DISK ADDR STA ID5,I SET CURRENT DISK ADDR IN IDENT LDB NPROG COMPILED? SSB,RSS IF YES, SKIP & SET SWITCH CLA OTHERWISE, CLEAR SWITCH STA LWH1 LDA M7777 INITILIZE THE FIRST DBL ADDRESS STA ID7,I TO MAX POSSIBLE CLA AND THE PROG. LENGTH TO STA LWH2 MIN. POSSIBLE CLA STA ID8,I CLEAR BS IDENT MAIN ADDRESS XLDRN JSB DWRIT PACK RECORD, OUTPUT TO DISK JMP LDRIN GET NEXT RECORD SKP * * DBL REC PROCESSOR * DBLR LDA LBUF+3 GET THE RELOCATION ADDRESS CMA,INA IF LESS THAN CURRENT ADA ID7,I MIN. SSA SKIP JMP DBLR1 ELSE JUST SKIP * LDA LBUF+3 NEW MIN. SO SET IT STA ID7,I IN THE IDENT. * DBLR1 LDA LBUF+1 GET THE LENGTH AND M77 OF THE RECORD (NO. OF PROGRAM WORDS) ADA LBUF+3 COMPUTE MAX. LOAD ADDRESS LDB A SAVE IN B CMB,INB IF THIS IS A NEW ADB LWH2 MAX. THEN SSB SET THE STA LWH2 NEW MAX. JMP XLDRN GO WRITE THE RECORD TO THE DISC SKP * * ENT/EXT RECORD PROCESSOR ENTR CCA,RSS ENT PROCESSOR EXTR CLA EXT PROCESSOR STA NXFLG NXFLG = ENT/EXT FLAG LDA LBUF+1 SET NO. SYMBOLS AND M37 ISOLATE NO. SYMBOLS CMA,INA STA EXCNT SET SYMBOL COUNT LDB ALBUF ALBUF = A(LBUF) ADB P3 P3 = +3 STB SYM12 SET STARTING SYMBOL ADDR * SETNX LDB SYM12 SET B FOR LSTE JSB LSTE ENTR SYMBOL IN THE LST JMP ENTX3 NEW ENTRY GO FINISH. * * LDA NXFLG GET ENT/EXT FLAG SZA,RSS SKIP IF ENT JMP ENTX4 COMPLETE EXT PROCESSING * * PROCESS ENT REC * LDA LST4 IF THIS IS A FOURCED CMA,INA SYMBOL ADA SLST THEN SSA,RSS GIVE ERROR JMP DUPEN * LDA LST4,I GET WORD 4 OF LST ENTRY SZA,RSS SKIP IF NON-ZERO (DEFINED) JMP ENTX2 MAKE ENTRY FOR DEFINED EXT * SSA SKIP IF ENTRY MADE JMP ENTX6 MAKE ENTRY FOR BS EXT * DUPEN LDA ERR05 SET CODE - DUPLICATE ENTRY POINT JSB ERROR PRINT ERROR MESSAGE LDA P5 LDB LST1 LST1 = ADDR OF SYMBOL JSB DRKEY,I PRINT DUPLICATE ENTRY SYMBOL LDA LST4,I GET THE CURRENT DEFINING ADA N5 VALUE AND IF NOT A SELF DEFINING SSA,RSS SYMBOL JMP ENTX2 ӡGO REDEFINE THE SYMBOL * JMP ENTX5 ELSE GO REDEFINE ONLY IF NEW SELF DEF. * ENTX6 LDA ID6,I GET CURRENT TYPE AND M7 ISOLATE TYPE CPA P3 TYPE = BG DISK RESIDENT? RSS YES - CONTINUE (ERROR) JMP ENTX2 MAKE ENTRY FOR UNDEFINED EXT * LDA ERR13 SET CODE = INVALID BG BS ORDER JSB IRERR IRRECOVERABLE ERROR ENTX2 LDA ID1 GET MAIN IDENT ADDRESS STA LST4,I ENTER IDENT ADDR IN WORD 4 JMP ENTX5 * ENTX3 LDA NXFLG GET EXT/ENT FLAG SZA SKIP IF EXT ENTRY JMP ENTX2 SET WORD 4 OF ENT ENTRY * LDA ID6,I GET TYPE AND M7 ISOLATE TYPE LDB ID1 GET MAIN IDENT ADDRESS CPA P5 TYPE = BS? CMB,RSS YES - SET LST4 = BS REF, SKIP CLB NO - SET LST4 = UNDEFINED STB LST4,I YES - SET ADDRESS IN LST WORD 4 ENTX4 LDA ID6,I GET TYPE AND M7 ISOLATE TYPE CPA P5 TYPE = BG SEGMENT? RSS YES - CONTINUE JMP ENTX5 NO - IGNORE BG SEG MAIN ADDR * LDA ID1 GET CURRENT IDENT ADDRESS STA IMAIN SAVE IDENT ADDRESS LDA LST4,I GET IDENT ADDRESS SZA SKIP IF UNDEFINED SSA SKIP IF IDENT ADDRESS JMP ENTX5 IGNORE UNDEFINED EXT * CPA P2 IF SPECIAL SYMBOL RSS RSS FOR GET CPA P3 THE BS RSS BIT CPA P4 JMP ENTX5 * STA TIDNT SET IDENT ADDRESS FOR IDX JSB IDX SET IDENT ADDRESSES HLT 0 IDENT NOT FOUND LDA ID6,I GET TYPE SSA,RSS SKIP IF MAIN JMP NTMAN SET FLAG FOR IGNORING BS REF * AND M7 ISOLATE TYPE CPA P3 TYPE = BG DISK RESIDENT? CCB,RSS SET FLAG FOR BS REF, SKIP NTMAN CLB SET FLAG FOR IGNORING BS REF STB TCHAR SET FLAG = 0/-1 = IGNORE/BS REF LDA IMAI N GET CURRENT IDENT ADDRESS STA TIDNT SET FOR NEXT IDENT ADDRESSES JSB IDX SET CURRENT IDENT ADDRESSES HLT 0 ADDRESS INVALID ISZ TCHAR SKIP - SET IDENT ADDR FOR BS REF JMP ENTX5 IGNORE IF NOT MAIN BG DISK RES * LDA LST4,I GET BG MAIN ADDRESS STA ID8,I SET MAIN IDENT ADDR IN BS IDENT ENTX5 LDA SYM12 GET SYMBOL ADDR ADA P3 ADJUST FOR BOTH ENT & EXT STA SYM12 SAVE THE ADDRESS FOR NEXT SYMBOL LDB NXFLG GET EXT/ENT FLAG SZB,RSS IF EXT SKIP THE SPECIAL SYMBOL JMP ENTX8 CODE * ADB SYM12 GET THE FLAG LDA B,I TO A AND P15 ISOLATE THE SYMBOL TYPE LDB LST4,I IF UNDEFINED MUST SZB,RSS BE A FOURCED JMP ENTX7 SYMBOL SO DON'T RESET * SZA IF PROGRAM CPA P1 OR BASE PAGE JMP ENTX7 THEN STANDARD SYMBOL SKIP * STA LST4,I SET THE SPECIAL FLAG LDA SYM12,I GET THE VALUE STA LST5,I AND SET IT ENTX7 ISZ SYM12 STEP TO THE NEXT SYMBOL ENTX8 ISZ EXCNT TEST SYMBOL COUNTER JMP SETNX PROCESS NEXT SYMBOL * JMP XLDRN PACK RECORD, OUTPUT TO DISK SKP * * WRITE RELOC REC ON DISK * * DWRIT PACKS THE CURRENT CONTENTS OF LBUF INTO DBUF AND DUMPS * DBUF WHEN IT CONTAINS 64 WORDS OF RELOCATABLE INPUT. * IF THE END RECORD IS BEING PROCESSED, DWRIT TESTS FOR * PROCESSING LIBRARY PROGRAMS AND SETS THE NO. OF PACKED * RELOCATABLE LIBRARY RECORDS IN WORD 10 OF IDENT FOR * USE IN MOVING THE RELOCATABLE LIBRARY TO THE PROTECTED * AREA OF THE DISK AFTER THE LOADING PHASE IS COMPLETE. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB DWRIT * * RETURN: CONTENTS OF A AND B DESTROYED * DWRIT NOP LDB ALBUF GET ADDRESS OF LBUF STB CURAL SAVE CURRENT LBUF ADDRESS LDA LBUF GET RECORD LENGTH ;, ALF,ALF ROTATE TO LOW A CMA,INA STA LCNT SAVE RECORD LENGTH COUNT LTOD LDA CURAL,I GET WORD FROM LBUF STA CURAD,I SET WORD INTO DBUF ISZ DCNT SKIP IF DBUF FULL JMP GETL TEST FOR END OF LBUF * JSB DDOUT OUTPUT DBUF TO DISK RSS OMIT CURRENT DBUF ADDR INCREMENT GETL ISZ CURAD INCR CURRENT DBUF ADDRESS ISZ CURAL INCR CURRENT LBUF ADDRESS ISZ LCNT SKIP IF LBUF MOVED TO DBUF JMP LTOD MOVE NEXT WORD TO DBUF LDA CNFLG GET END FLAG SZA,RSS SKIP IF END RECORD READ JMP DWRIT,I RETURN * LDA DCNT CPA N64 BUFFER EMPTY? RSS JSB DDOUT OUTPUT TO DISK * LDA ID6,I GET TYPE AND M7 ISOLATE TYPE CPA P5 TYPE = BG SEGMENT? JMP DWRIT,I RETURN LDA DSCNT GET TOTAL LIBR DISK SECTR COUNT STA ID8,I SET TOTAL SECTOR COUNT IN IDENT JMP DWRIT,I RETURN SKP * * OUTPUT DBUF TO DISK * * THE DDOUT SUBROUTINE WRITES THE CONTENTS OF DBUF IN THE * CURRENT DISK SECTOR. FOLLOWING THIS DBUF IS CLEARED, * THE CURRENT ADDRESS AND COUNT FOR DBUF ARE SET, * AND THE NEXT DISK ADDRESS IS SET INTO DSKAD. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB DDOUT * * RETURN: CONTENTS OF A AND B ARE DESTROYED * DDOUT NOP LDA DSKAD GET CURRENT DISK ADDRESS LDB ADBUF GET BUFFER ADDRESS JSB DISKO OUTPUT RECORD TO DISK LDB ADBUF GET ADDRESS OF DBUF STB CURAD INITIALIZE DBUF CURRENT ADDRESS JSB BUFCL CLEAR DBUF LDA N64 STA DCNT INITIALIZE CURRENT DBUF COUNT ISZ DSCNT COUNT RECORD LDA DSKAD GET CURRENT DISK ADDRESS JSB DISKA INCR CURRENT DISK ADDRESS STA DSKAD SET NEW DISK ADDRESS JMP DDOUT,I RETURN SKP * * ߱ ALPHABETIC INPUT CONTROL * * THE SINIT SUBROUTINE ANALYZES THE RESPONSE FOR THE PROGRAM, * LIBRARY, AND PARAMETER INPUT. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB SINIT * * RETURN: * (N+1): AN INVALID SET OF CHARACTERS (NOT PT, MT, TY) * OR NO. OF CHARACTERS HAS BEEN DETECTED. * AFTER PRINTING THE DIAGNOSTIC, A RETURN IS MADE TO * PERMIT THE MESSAGE TO BE REPEATED. THE CONTENTS * OF A AND B ARE DESTROYED. * (N+2): A = ADDRESS OF DESIGNATED INPUT DRIVER * B = DESTROYED * SINIT NOP LDA N2 SET MAX NO. DIGITS FOR GETNA JSB GETNA MOVE LBUF TO TBUF JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP *+3 YES - CONTINUE CODIN JSB INERR INVALID TTY RESPONSE JMP SINIT,I RETURN - ERROR LDA TBUF GET 2-CHARACTER CODE CPA "TY" TYPE = TTY? JMP TYUN YES - UNIT IS TELETYPE CPA "PT" TYPE = PT READER? JMP PTUN SET UNIT = PT READER CPA "MT" TYPE = MAG TAPE? JMP MTUN SET UNIT = MAG TAPE CPA "DF" TYPE = DISC FILE? JMP MTUN -PROCESS AS MAG TAPE. JMP CODIN INVALID PT, MT OR TY TYUN LDA DRTTY DRTTY = TTY INPUT DRIVER ADDRESS RSS PTUN LDA DRPTR DRPTR = PT READER DRIVER ADDR JMP PT.DV MTUN CLA MT OR DF CPA DRMAG DRIVER LOADED? JMP CODIN NO - ERROR STA IMAGT YES - CLEAR FLAG TO PERMIT REWIND LDA DRMAG DRMAG = MAG TAPE DRIVER ADDR PT.DV ISZ SINIT INCR RETURN ADDRESS JMP SINIT,I RETURN HED RTE GENERATOR LIST UNDEFINED EXTERNALS (** OVERLAYED **) * * LIST UNDEFINED EXTS * * THE UNDEFINED EXTERNAL REFERENCES CAN BE LISTED AFTER * EACH END-OF-TAPE CONDITION IS DETECTED. * * FOLLOWING COMPLETION OF THE EXT LISTING, THE COMPUTER * HALTS TO PERMcIT THE OPERATOR TO RETURN FOR ADDITIONAL * PROGRAM INPUT, OR CONTINUE WITH THE PROCESSING OF PARAMETERS. * LSTEX JSB SPACE NEW LINE JSB SPACE NEW LINE CCA STA NXCNT SET SYMBOL COUNT = -1 LDA SLST SET BOTTOM OF PGM LST STA TLST FOR SCAN OUTNX JSB LSTX SET LST1 - LST5 JMP EXOUT END OF LIST LDA LST4,I GET WORD 4 OF LST CMA,SSA,INA,SZA SKIP IF UNDEFINED OR BS REF JMP OUTNX TRY NEXT LST SYMBOL ISZ NXCNT TEST FOR FIRST UNDEF EXT JMP OUTEX NO - PUT OUT SYMBOL NAME LDA P10 LDB MESS8 MESS8 = ADDR: UNDEF EXTS JSB DRKEY,I PRINT: UNDEF EXTS JSB SPACE NEW LINE OUTEX LDA P5 LDB LST1 LST1 = A(SYMBOL) JSB DRKEY,I PRINT SYMBOL JMP OUTNX TRY NEXT SYMBOL * EXOUT ISZ NXCNT TEST FOR NO UNDEF EXTS JMP ENDEX NO - OMIT MESSAGE LDA P14 LDB MESS9 MESS9 = ADDR: NO UNDEF EXTS JSB DRKEY,I PRINT MESSAGE ENDEX JSB SPACE NEW LINE JSB HLT77 WAIT FOR OPERATOR INTERVENTION LIA 1 GET SWITCH REGISTER SLA,RSS SKIP IF SWITCH 0 UP JMP TSTN4 TEST FOR PROGRAM OR LIBR LOAD * CLA SET TOP DISK ADDRESS TO STA DSKA ZERO STA ERROR CLEAR THE ERROR FLAG FOR PRAM INPUT STA SCH1 STA SCH4 CLEAR SCHED ID SEG FLAG LDA IMAGT IF MT OR DF USED SZA FOR INPUT SKIP TO REWIND JMP IPARS NO, INITIATE PARAMETER INPUT. JSB DRMAG,I REWIND/STANDBY OCT 5 MT OR DF. JMP IPARS INITIATE PARAMETER INPUT SECTION HED RTE GENERATOR LOCAL STORAGE (** OVERLAYED **) * ERR02 ASC 1,02 CHECKSUM ERROR ERR03 ASC 1,03 RECORD OUT OF SEQUENCE ERR04 ASC 1,04 INVALID RECORD ERR05 ASC 1,05 DUPLICATE ENTRY POINTS ERR08 ASC 1,08 DUPLICATE PROGRAM NAMES ERR13 ASC 1,13 BG SEGMENT PRECEDES BG MAIN * F "TY" ASC 1,TY "PT" ASC 1,PT "MT" ASC 1,MT "DF" ASC 1,DF * D$REN DEF *+1 ASC 3,.ZRNT A$PRV ASC 3,.ZPRV MESS3 DEF *+1 IFN ASC 5,LWA MEM? XIF IFZ ASC 5,MEM SIZE? XIF MESS4 DEF *+1 ASC 5,PRGM INPT? MESS5 DEF *+1 ASC 5,LIBR INPT? MESS6 DEF *+1 ASC 5,PRAM INPT? MESS7 DEF *+1 ASC 2,*EOT MESS8 DEF *+4 MESS9 DEF *+1 ASC 7, NO UNDEF EXTS MES30 DEF *+1 ASC 5,TBG CHNL? IFN *** BEGIN NON-DMS CODE *** MES31 DEF *+1 ASC 6,FG SWAPPING? **** END NON-DMS CODE **** XIF MES32 DEF *+1 ASC 7,FG CORE LOCK? MES33 DEF *+1 ASC 6,SWAP DELAY? IFZ ***** BEGIN DMS CODE ***** MSMP. DEF *+1 ASC 14,PRIV. DRIVERS ACCESS COMMON? MLMP EQU P28 ****** END DMS CODE ****** XIF SLST NOP BUID NOP BULST NOP SPC 1 PGMAD BSS 1 PROGRAM INPUT DRIVER ADDRESS LIBAD BSS 1 LIB INPUT DRIVER ADDR PINAD BSS 1 INPUT DRIVER ADDRESS ETFLG BSS 1 END TAPE FLAG = -1/0 = IGN/MAX CNFLG BSS 1 LB, UT END FLAG RIC BSS 1 RECORD IDENTIFICATION CODE SYM12 BSS 1 CHAR 1,2 ADDR NXCNT BSS 1 UNDEFINED SYMBOL COUNT * CPLIM DEF *-6 END OF CP LINK IMAGE AREA HED RTE GENERATOR PARAMETER PHASE * * * CHECKSUM ROUTINE * BUILD A CHECKSUM FOR THE RECORD IN LBUF * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB CKSUM * * * RETURN: * A = CHECKSUM OF RECORD * B = DESTROYED * CKSUM NOP LDB LBUF GET RECORD LENGTH BLF,BLF ROTATE TO LOW B CMB,INB SET TO NEG ADB P3 ADJUST COUNT TO SHOW SKIPPED WORDS STB WDCNT SET RECORD WORD COUNT LDA LBUF+1 GET WORD 2,INITIALIZE CHECKSUM LDB ALBUF ALBUF = A(LBUF) ADB P3 SET TO WORD 4 ADA B,I ADD WORD TO CHECKSUM INB INCREMENT ADDRESS IS$Z WDCNT SKIP IF END OF RECORD JMP *-3 CONTINUE JMP CKSUM,I RETURN SPC 1 * NUMERICAL INPUT CONTROL * * THE DOCON SUBROUTINE ANALYZES THE INPUT FOR THE * CHANNEL NO., DISK SIZES, TBG CHANNEL NO. AND LAST * WORD OF AVAILABLE MEMORY. * * CALLING SEQUENCE: * A = MAX NO. OF CHARACTERS PERMITTED IN RESPONSE. * THE SIGN OF A DETERMINES THE CONVERSION FROM * ASCII TO OCTAL (POS.) OR DECIMAL (NEG.). * B = IGNORED * JSB DOCON * * RETURN: * (N+1): CONTENTS OF A AND B ARE DESTROYED. AN INVALID * CHARACTER HAS BEEN DETECTED IN THE RESPONSE, OR * THE RESPONSE CONTAINS AN INVALID NO. CHARACTERS. * THE MESSAGE IS TO BE REPEATED ON RETURN. * (N+2): A = CONVERTED RESULT * DOCON NOP JSB GETOC GET OCTAL/DECIMAL, RETURN OCTAL JMP *+4 INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP *+3 YES - CONTINUE JSB INERR INVALID DIGIT ENTRY JMP DOCON,I RETURN ISZ DOCON INCR RETURN ADDRESS LDA OCTNO GET CONVERTED NUMBER JMP DOCON,I RETURN SKP * * INVALID TTY RESPONSE * * THE INERR SUBROUTINE PRINTS THE DIAGNOSTIC FOR INVALID * RESPONSES DURING THE INITIALIZATION SECTION. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INERR * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * INERR NOP LDA ERR01 SET INVALID DEVICE ERROR CODE JSB ERROR PRINT ERROR MESSAGE JMP INERR,I RETURN SPC 1 ERR01 ASC 1,01 SKP * * SET PARAMETERS INTO IDENTS * * THE PARAMETER INPUT SECTION PERMITS ALTERATION (OR INTRODUCTION) * OF THE TYPE, PRIORITY, AND EXECUTION INTERVAL FOR EACH PROGRAM. * EACH PARAMETER RECORD HAS ONE OF THE FOLLOWING FORMATS: * * NAME,TYPE * NAME,TYPE,PRIORITY * NAME,TYPE,PRIORITY,EXECUTION INTERVAL * * TYPE = 2 DECIMAL DIGITS (1-99) * PRIORITY = 2 DECIMAL DIGITS (0-99) * EXECUTION INTERVAL = 6 OPERANDS * 1 - RESOLUTION CODE (2 DECIMAL DIGITS) * 2 - EXECUTION MULTIPLE (5 DECIMAL DIGITS) * 3 - HOURS (2 DECIMAL DIGITS) * 4 - MINUTES (2 DECIMAL DIGITS) * 5 - SECONDS (2 DECIMAL DIGITS) * 6 - 10'S MULLISECONDS (2 DECIMAL DIGITS) * * NOTE: TYPE OF BG DISK RESIDENTS HAVING BG SEGMENTS MAY NOT * BE ALTERED WITHOUT DESTROYING RELATIONSHIP. * PARAM JSB SPACE NEW LINE LDA DSKA SAVE UPPER DISC ADDRESS STA TODIS SO WE CAN MODIFY PROGS ON THE DISC LDA P10 LDB MES24 MES24 = ADDR: PARAMETERS JSB DRKEY,I PRINT: PARAMETERS JSB SPACE NEW LINE LDB PARAD GET PARAM INPUT DRIVER ADDRESS CPB DRTTY INPUT UNIT = TTY? RSS YES - CONTINUE JSB HLT77 WAIT FOR INSERTION OF PARAMETERS * * PARST LDA P64 LDB ALBUF GET ADDRESS OF LBUF JSB PARAD,I GET ASCII PARAMETER RECORD SZA,RSS SKIP IF CHARS INPUT JMP PARST REPEAT PARAMETER INPUT * STA PARNO SAVE PARAMETER RECORD LENGTH INA ZAP WORD CLE,ERA FOLLOWING ADA ALBUF THE INPUT STRING CLB AS A STB A,I SCANNER STOP JSB GINIT INITIALIZE BUFFER SCAN LDA N5 JSB GETNA MOVE CHARS FROM LBUF TO TBUF CPA "/E" CHARS = /E? JMP SETLB YES - SET LIBRARY TYPE IN IDENT * CPA DBLK BLANK LINE OR COMMENT? JMP PARST YES TRY ANOTHER * JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = BLANK?(DELIMITER = COMMA) JMP PANOK YES - CONTINUE * PANER LDA ERR09 PARAMETER NAME ERROR JMP PARER * PANOK LDB ATBUF FIND THE PROGRAM JSB IDXS IN THE IDENT TABLE JMP PANER NOT FOUND- INVALID NAME * * { SET TYPE LDA N2 JSB GETOC CONVERT TO OCTAL JMP PATER INVALID DIGIT * JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) RSS YES - CONTIMUE CPA BLANK CHAR = BLANK?(DELIMITER = COMMA) JMP SETYP SET PROGRAM TYPE IN IDENT * PATER LDA ERR10 PARAMETER TYPE ERROR JMP PARER * SETYP CLB IF THIS IS THE SCHEDULED PGM LDA ID1 AGAIN CPA SCH1 THEN STB SCH1 CLEAR ITS FLAG LDB OCTNO GET CONVERTED NUMBER LDA ID6,I GET CURRENT TYPE AND M177 TO A CPA B IF NO CHANGE JMP TYPOK SKIP CHECK * CPB P14 IF CHANGE IS TO CORE RES LIB CPA P6 MUST BE LEGAL CORE RES. LIB. MODULE RSS OK SKIP JMP PATER NOT OK, ERROR * TYPOK LDA OCTNO IF AUTO SCHED AND P64 BIT NOT SET SZA,RSS THEN JUST GO JMP SCH SET TYPE. SPC 1 LDB OCTNO AUTO SCHED...SUBTRACT ADB N80 80 FROM TYPE TO STB OCTNO GET REAL TYPE. SPC 1 LDA ID6,I MERGE M/S BIT IN AND MSIGN WITH TYPE. IOR B LDB ID1 B POINTS TO IDENT. SPC 1 SSA,RSS IF NOT MAIN PGM JMP SCH IGNOR IT AND M7 MASK TO THE ID TYPE SZA IF ZERO OR ADA N5 MORE THAN 4 SSA SKIP STB SCH1 ELSE SET PGM IDENT IN SCH FLAG SPC 1 SCH LDA OCTNO GET NEW TYPE JSB FILTR FILTER IT, LDB A THEN MERGE LDA ID6,I INTO IDENT 6 AND M7600 IOR B STA ID6,I SPC 1 JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO ? (END OF BUFFER) JMP PARST YES - GET NEXT PARAMETER RECORD * * SET NEW PROGRAM PRIORITY J* LDA N5 SET COUNT FOR DECIMAL CONVERSION JSB GETOC CONVERT TO OCTAL JMP PAPER PRIORITY ERROR * SSA IF NEGATIVE JMP PAPER THEN ERROR * JSB GETAL GET NEXT CHAR FROM LBUF SZA CHAR = ZERO ? (END OF BUFFER) CPA BLANK CHAR = BLANK?(DELIMITER = COMMA) JMP SETNR SET PRIORITY * PAPER LDA ERR11 PARAMETER PRIORITY ERROR JMP PARER * SETNR LDA ID5,I GET THE NAM RECORD TO LDB ADBUF TO DBUF JSB DISKI FROM THE DISC LDB OCTNO GET PRIORITY SZB,RSS SKIP - PRIORITY ENTERED LDB P99 REPLACE ZERO PRIORITY WITH 99 LDA ID6,I GET THE TYPE AND M177 AND ISOLATE IT SZA,RSS IF A SYSTEM PROGRAM USE CLB PRIORITY ZERO STB DBUF+10 SET NEW PRIORITY IN THE RECORD JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO ? (END OF BUFFER) JMP PARWR YES - GO REWRITE THE NAM RECORD * * GET RESOLUTION CODE * LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF STA DBUF+11 SET IN THE NAM RECORD * * GET EXECUTION MULTIPLE * LDA N5 SET COUNT FOR DECIMAL CONVERSION JSB EXINT GET DIGITS FROM LBUF AND M1600 ISOLATE UPPER 3 BITS IN A SZA SKIP IF VALID MULTIPLE JMP PAIER INVALID EXECUTION INTERV FORMAT LDA OCTNO GET CONVERTED NUMBER STA DBUF+12 SET IN THE NAM RECORD * * GET HOURS * LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF STA DBUF+13 SET IN THE NAM RECORD * * GET MINUTES * LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF STA DBUF+14 SET IN THE NAM RECORD * *  GET SECONDS * LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF STA DBUF+15 SET IN THE NAM RECORD * * GET TENS OF MILLISECONDS * LDA N2 SET FOR DECIMAL CONVERSION JSB GETOC CONVERT TO OCTAL JMP PAIER INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF SZA CHAR = 0? (END OF BUFFER) JMP PAIER NO - INVALID DELIMITER * LDA OCTNO GET CONVERTED NUMBER STA DBUF+16 SET IN THE NAM RECORD PARWR LDB ALBUF MOVE THE RECORD TO LDA ADBUF LBUF FOR CHECKSUM JSB MOVW DEC -64 JSB CKSUM DO A CHECKSUM STA LBUF+2 SET IN THE RECORD LDA ID5,I GET THE DISC ADDRESS LDB ALBUF AND WRITE THE NAM RECORD JSB DISKO BACK OUT TO THE DISC JMP PARST GET NEXT PARAMETER RECORD * * EXECUTION INTERVAL INPUT CONTROL EXINT NOP JSB GETOC CONVERT TO OCTAL JMP PAIER INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = BLANK? (DELIMITER=COMMA) RSS YES - CONTINUE JMP PAIER NO - INVALID DELIMITER LDA OCTNO GET CONVERTED NUMBER JMP EXINT,I RETURN WITH NUMBER IN A * PAIER LDA ERR12 PARAMETER INTERVAL ERROR PARER JSB PNERR SEND ERROR MESSAGE JMP PARST TRY AGAIN * PNERR NOP SUBROUTINE TO TEST FOR ECHO AND PRINT ERROR STA TEMPE SAVE ERROR CODE JSB ERPNT TEST FOR PRINTING LBUF LDA TEMPE GET ERROR CODE JSB ERROR PRINT ERROR MESSAGE JSB SPACE NEW LINE JMP PNERR,I RETURN * * PRINT LBUF UNLESS FROM TTY ERPNT NOP PRINT CONTENTS OF LBUF LDB PARAD GET ADDRESS OF PARAMETER UNIT CPB DRTTY DEVICE = TTY? JMP ERPNT,I YES - OMIT PRINTCTRNING ON TTY LDA PARNO PARNO = PARAMETER RECORD LENGTH LDB ALBUF ALBUF = BUFFER ADDRESS JSB DRKEY,I PRINT PARAMETER RECORD JMP ERPNT,I RETURN * SETLB JSB ERPNT TEST FOR PRINTING /E JSB SPACE NEW LINE * * CHANGE ENTS SECTION * LDA P12 GET MESSAGE LENGTH LDB MES21 SEND MESSAGE JSB DRKEY,I 'CHANGE ENTS?' JSB SPACE SKIP A LINE * PENT LDA P64 READ THE LDB ALBUF ENT RECORD JSB PARAD,I FROM THE PRAMETER INPUT DEVICE SZA,RSS IF ZERO JMP PENT TRY AGAIN * STA PARNO SAVE COUNT INA COMPUTE THE CLE,ERA LAST WORD ADDRESS ADA ALBUF AND CLB STB A,I CLEAR THE NEXT WORD JSB GINIT GET THE ENT NAME LDA N5 TO JSB GETNA TBUF CPA "/E" IF '/E' JMP EXENT DONE GO TO NEXT SECTION * CPA DBLK IF '*' OR BLANK LINE JMP PENT TRY THE NEXT LINE * JSB GETAL GET THE NEXT CHAR CPA BLANK IF COMMA JMP ENTOK OK * LDA ERR09 ELSE ERROR JMP EARER GO REPORT IT * ENTOK LDB ATBUF FIND THE JSB LSTE DEFINE AND OR LOCATE LST NOP (DON'T CARE IF EARLIER DEFINED) * LDA N2 GET TYPE FLAG JSB GETNA CARACTER CLE CPA "AB" IF ABSOLUTE CLB,CCE SET FLAG CPA "RP" IF REPLACE CLB,CCE,INB SET OTHER FLAG SEZ IF NONE OF THE ABOVE JMP ENTNO * EATER LDA ERR10 THEN SEND ERROR EARER JSB PNERR JMP PENT * ENTNO ADB P3 ADJUST TO ENT TYPE STB IDXS SAVE IN TEMP 0TT JSB GETAL CHECK FOR COMMA CPA BLANK AS NEXT CHARACTER RSS IF NOT JMP EATER BITCH * LDA CURAL SAVE CURRENT STA ID1 POSITION LDA BUFUL FOR BACKING STA ID2 UP LDA P7 GET NUMBER JSB GETOC ASSUMING OCTAL RSS IF ERROR MIGHT BE DECIMAL SO SKIP JMP ENTOC IT IS OCTAL SO GO SET UP * LDA ID1 BACK UP THE SCANNER STA CURAL POSITION LDA ID2 STA BUFUL LDA N7 NOW TRY JSB GETOC A DECIMAL CONVERSION RSS ERROR EXPECTED ( 12345D) ON THE D JMP EATER NO ERROR SO WRONG INPUT * LDA TCHAR MAKE SURE ERROR CPA P20 WAS ON A "D" RSS YES SO FAR SO GOOD JMP EATER NO GO BITCH * ENTOC LDA IDXS SET THE ENT TYPE STA LST4,I AND LDA OCTNO VALUE STA LST5,I IN THE SYMBOL TABLE JMP PENT GO GET NEXT SYMBOL. * EXENT JSB ERPNT PRINT /E IF REQUIRED JSB SPACE SEND A SPACE LDA TODIS RESTORE THE TOP OF DISC STA DSKA FLAG SKP * * SET LIBRARY, COM, TYPE TOTALS * * THIS SECTION IS EXECUTED WHEN THE PARAMETERS HAVE * BEEN COMPLETELY READ IN. IT COMPUTES THE MAXIMUM LENGTH OF * BOTH THE REAL TIME AND BACKGROUND COMMON AREAS. * FINALLY, IT RESERVES A 22-WORD SECTION OF CODE FOR EACH USER * PROGRAM (PLUS AN ADDITIONAL 6 WORDS IF DISK RESIDENT) TO * GENERATE THE ID SEGMENTS. FINALLY, IT RESEVES A KEYWORD TO * CONTAIN THE ADDRESS OF EACH ID SEGMENT. * * CLA STA FGBGC CLEAR FORGROUND USING BG COMMON FLAG STA SICNT CLEAR SHORT ID SEG COUNT STA LICNT CLEAR LONG ID SEG COUNT STA SSCNT CLEAR BG SEG. ID SEG COUNT STA COMRT CLEAR RT COM LENGTH STA COMBG CLEAR BG COM LENGTH JSB INIDX INITIALIZE IDX SETIX JSB IDX m_ SET IDENT ADDRESSES JMP TRMCN TERMINATE ID SEGMENT COUNT * LDA ID6,I GET TYPE AND M17 ISOLATE tYPE AND REV COM BITS LDB ID4,I GET COMMON LENGTH CLE CLEAR FORGROUND USING BG COMMON SWITCH CPA P11 IF BG RESIDENT USING FG COMMON RSS IFN *** BEGIN NON-DMS CODE *** CPA P12 OR BG DSC RESIDENT USING FG COMMON RSS CPA P13 OR BG SEG USING FG COMMON RSS **** END NON-DMS CODE **** XIF CPA P1 OR TYPE = RT RESIDENT? RSS CPA P2 OR TYPE = RT DISK RESIDENT? JMP SETRC SET RT COMMON LENGTH * CPA P9 IF FG RES. USING BG COMMON CCE,RSS SET CROSS COMMON SWITCH CPA P10 LIKEWISE IF FG DSC RESIDENT CCE,RSS CPA P3 TYPE = BG DISK RESIDENT?? IFN *** BEGIN NON-DMS CODE *** RSS CPA P4 TYPE = BG RESIDENT? RSS CPA P5 TYPE = BG SEG?? **** END NON-DMS CODE **** XIF JMP SETBC SET BG COMMON LENGTH * IFZ ***** BEGIN DMS CODE ***** LDA ID6,I GET TYPE AGAIN AND M37 BUT LEAVE SSGA BIT ON ****** END DMS CODE ****** XIF CPA P14 IF CORE RES LIB. RSS CPA ZERO TYPE = SYSTEM? RSS CPA P6 TYPE = LIBRARY? IFZ ***** BEGIN DMS CODE ***** RSS CPA P30 TYPE = SSGA?? ****** END DMS CODE ****** XIF SZB,RSS SKIP - HAS INVALID COMMON JMP SETR1 OK, GO SEE IF ID SEG NEEDED * LDA ERR37 SET CODE = INVALID COMMON JSB ERROR PRINT DIAGNOSTIC LDA P5 LDB ID1 GET IDENT ADDRESS JSB DRKEY,I PRINT PROG NAME FOR INVALID COM JMP SETIX PROCESS NEXT IDENT * SETBC SEZ IF CROSS COMMON SWITCH SET ISZ FGBGC SET THE CROSS COMMON FLAG LDA COMBG GET PREVIOUS MAX COMMON LENGTH \ CMA,INA ADA B SET A = PROG COM - PREVIOUS COM SSA,RSS SKIP IF PREVIOUS GREATER STB COMBG SET NEW MAX BG COMMON LENGTH JMP SETR1 CHECK TYPE * SETRC LDA COMRT GET PREVIOUS MAX COMMON LENGTH CMA,INA ADA B SET A = PROG COM - PREVIOUS COM SSA,RSS SKIP IF PREVIOUS GREATER STB COMRT SET NEW MAX RT COM LENGTH SETR1 LDA ID6,I GET M/S SSA,RSS SKIP IF MAIN JMP SETIX PROCESS NEXT IDENT * AND M7 ISOLATE TYPE CPA P1 TYPE = RT RESIDENT? IFN *** BEGIN NON-DMS CODE *** RSS CPA P4 OR TYPE = BG RESIDENT? **** END NON-DMS CODE **** XIF ISZ SICNT YES, COUNT SHORT ID SEGMENT CPA P2 IF FORGROUND DISC RESIDENT RSS OR CPA P3 BACKGROUND DISC RESIDENT ISZ LICNT COUNT A LONG ID SEGMENT CPA P5 IF A SEGMENT ISZ SSCNT COUNT A SEGMENT ID SEGMENT JMP SETIX GO PROCESS THE NEXT MODULE * * TRMCN JSB SPACE LDA P23 LDB MES42 MES42 = ADDR: # OF BLANK ID'S JSB READ PRINT AND GET REPLY LDA N2 GET 2 JSB GETOC DECIMAL DIGITS, CONVERT JMP TRM2 -INVALID INPUT. SZA,RSS IF ZERO, ADD 1 INA FOR BKG. ON-LINE LOADING. ADA LICNT ADD TO LONG ID SEGMENT COUNT. STA LICNT JSB SPACE SEND TRM4 LDA P31 MESSAGE LDB MES43 '# OF BLANK SEGMENT ID'S?' JSB READ AND GET ANSWER LDA N2 CONVERT JSB GETOC THE ANSWER JMP TRM4 ERROR TRY AGAIN SPC 1 ADA SSCNT ADD TO THE SHORT ID SEG COUNT STA SSCNT AND RESTORE ADA LICNT SUM THE TOTAL COUNT ADA SICNT INA ADD ONE FOR STOP WORD STA KEYCN IFZ ***** BEGIN DMS CODE ***** ******************************************************************** * * * ASK FOR MAXIMUM NUMBER OF PARTITIONS TO BE DEFINED * * * ******************************************************************** SPC 1 JSB SPACE GNP LDA MS30L LENGTH OF MSG LDB MS30. ADR OF MESSAGE JSB READ SEND AND READ RESPONSE LDA N2 CHECK FOR 2 DECIMAL JSB GETOC DIGITS IN RESPONSE JMP GNP TRY AGAIN ON ERROR SPC 1 LDB N65 ADB A IF MORE THAN 64, SSB,RSS THEN GO AND ASK JMP GNP AGAIN STA MAXPT ELSE SAVE MAX NO. PARTS. ****** END DMS CODE ****** XIF JMP FWENT GO LOAD THE SYSTEM * TRM2 LDA TRM3 PRINT JSB ERROR "ERR 01" JMP TRMCN+1 * DBLK ASC 1, TRM3 ASC 1,01 SSCNT NOP "RP" ASC 1,RP TODIS NOP MES21 DEF *+1 ASC 6,CHANGE ENTS? MESSAGE SPC 1 MES41 DEF *+1 ASC 11,PRIV. INT. CARD ADDR? SPC 1 MES42 DEF *+1 ASC 12,# OF BLANK ID SEGMENTS? SPC 1 MES43 DEF *+1 ASC 16,# OF BLANK BG SEG. ID SEGMENTS? **** BEGIN DMS CODE **** IFZ MS30. DEF *+1 MS30 ASC 13,MAX NUMBER OF PARTITIONS? MS30L EQU P25 XIF ***** END DMS CODE ***** SKP * * CLEAR UNDEFINED EXTS * IPARS LDA SLST INITIALIZE LSTX STA TLST IGNOR PREDEFINED ENTRIES CLST3 JSB LSTX SET LST ADDRESSES JMP ENDLB SET USAGE FLAGS * LDA LST4,I GET IDENT ADDRESS CMA,INA SSA SKIP - UNDEFINED EXT JMP CLST3 IGNORE DEFINED ENTRY POINT * LDA P4 SET UNDEFINEDS TO ZERO REPLACE ENTS STA LST4,I CLEAR IDENT ADDRESS JMP CLST3 TRY NEXT LST ENTRY SPC 2 * THIS ROUTINE IS CALLED AFTER THE SYSTEM IS LOADED BUT BEFORE THE * LIBRARY. SPC 1 * 7 CLEAR LOAD FLAGS FOR TYPE 6 PGMS * CLRT6 NOP * SET LIBRARY RESIDENT FLAGS JSB INIDX INITIALIZE IDX SETLX JSB IDX SET IDENT ADDRESSES JMP CLRT6,I END OF IDENTS LDA ID6,I GET TYPE AND M177 ISOLATE TYPE CPA P14 IF FOURCED CORE RES. RSS PROCESS CPA P6 TYPE = LIBRARY? RSS YES - CONTINUE JMP SETLX PROCESS NEXT IDENT * LDA ID3,I TYPE = 6 - GET LOAD FLAG RAR,CLE,ELA LOAD BIT TO E - AND CLEARED STA ID3,I RESET CLEARED FLAG SEZ,RSS WAS IT LOADED? JMP SETLX NO - CONTINUE LDA ERR39 YES - ILLEGAL SYSTEM REFERENCE JSB ERROR ERROR 39 LDA P5 NOW SEND THE NAME LDB ID1 OF THE CALLED PGM JSB DRKEY,I SPC 1 JSB INLST INITIALIZE LSTX SETUX JSB LSTX SET CURRENT LST ADDRESSES JMP SETLX END - CONTINUE ID SCAN LDA LST4,I GET IDENT ADDRESS CPA ID1 ENT BELONGS TO CURRENT PROG? CLA,RSS YES - CONTINUE JMP SETUX NO - TRY NEXT ENT STA LST5,I SET LINK TO ZERO. JMP SETUX CONTINUE SEARCH SPC 2 DEMTL NOP DEMOTE UNCALLED TYPE 6 TO TYPE 7 LDA BIDNT SET UP THE SCAN STA CIDNT PARAMETERS LDA P6 FOR TYPE 6 STA PTYPE SCAN DEMS JSB IDSCN GO SET ID ADDRESSES JMP DEMTL,I END - SO RETURN LDB ID3,I WAS PGM SLB,RSS LOADED? ISZ ID6,I NO; CHANGE TO TYPE 7. JMP DEMS YES/NO CONTINUE SCAN * ENDLB LDB D$LIR FIND THE LIBRARY JSB LSTS ENTRY POINTS $LIBR CLA,RSS USE ZERO IF NOT FOUND LDA LST1 STA $LIBR SAVE FOR THE LOADER * LDB D$LIX DO SAME THING FOR $LIBX JSB LSTS CLA,RSS LDA LST1 STA $LIBX * LDA APARS GET ADDR OF PARAMETER INPUT CODE STA TRANS RESET INITIAL TRANSFER ADDRESS JMP PARAM GET PARAMETERS * D$LIR DEF *+1 ASC 3,$LIBR D$LIX DEF *+1 ASC 3,$LIBX HED RTE GENERATOR GENERATE I/O TABLES * * GENERATE I/O TABLES * * THIS SECTION OF CODE GENERATES THE I/O TABLES * FOR THE SYSTEM. THESE INCLUDE THE EQUIPMENT TABLE (EQT), * STANDARD DEVICE REFERENCE TABLE (DRT), AND INTERRUPT TABLE. * * THE EQT RECORDS HAVE THE FOLLOWING FORMAT: * * N1,DVRN2<,D><,B><,T> * * N1 = CHANNEL NO. (2 OCTAL DIGITS) * N2 = DRIVER CLASS. CODE (2 OCTAL DIGITS) * D = DMA FLAG (OPTIONAL) * B = BUFFERING FLAG (OPTIONAL) * T = TIME-OUT VALUE TO BE ENTERED * * IF T IS ENTERED, A VALUE FOR THE DEVICE'S TIME-OUT * CLOCK MUST BE NEXT ENTERED IN RESPONSE TO: * ' T = ' * THE OPERATOR MUST ENTER A POSITIVE DECIMAL NUMBER * OF UP TO FIVE DIGITS. THIS IS THEN THE NUMBER OF * TIME BASE GENERATOR INTERRUPTS (10 MSEC INTERVALS) * BETWEEN THE TIME IO IS INITIATED ON THE DEVICE AND * THE TIME AFTER WHICH THE DEVICE SHOULD HAVE INTERRUPTED. * IF THE DEVICE HAS NOT INTERRUPTED BY THIS TIME, IT * IS CONSIDERED TO HAVE TIMED-OUT. * * * EACH DRT RECORD CONSISTS OF A 2-DIGIT NO. SPECIFYING THE * CORRESPONDING ENTRY IN THE EQUIPMENT TABLE * AND AN OPTIONAL 1-DIGIT NO. SPECIFYING A * SUBCHANNEL WITHIN THAT ENTRY. FOR EXAMPLE, IN * RESPONSE TO THE MESSAGE: 5 = ?, THE RESPONSE 6 INDICATES THAT * THE LOGICAL UNIT NO. 5 IS TO USE DEVICE 6 IN EQT. * WHEREAS THE RESPONSE 6,2 INDICATES THAT THE * LOGICAL UNIT NO. 5 IS TO USE SUBCHANNEL 2 OF * DEVICE 6 IN EQT. * * * THE INT RECORDS HAVE ONE OF THE FOLLOWING FORMATS: * * N1,EQT,N2 * N1,PRG,NAME * N1,ENT,ENTRY * N1,ABS,N3 * * N1 = CHANNEL NO. (2 OCTAL DIGITS - MUST BE IN INCREASING ORDER) * EXCEPTION: IF N1 = 04 (POWER - FAIL), * THIS ENTRY DOES NOT HAVE TOu BE IN ORDER. ALSO, * ONLY AN ENT OR AN ABS TYPE ENTRY IS ACCEPTED * FOR N1 = 04. * N2 = EQT NO. * NAME = PROGRAM NAME TO BE SCHEDULED * ENTRY = ENTRY POINT TO WHICH TRANSFER IS TO BE MADE * N3 = ABSOLUTE VALUE (6 OCTAL DIGITS) * * * ROUTINE TO INPUT TO BUFFER FROM TTY * * READ NOP JSB DRKEY,I SEND QUESTION JSB READ2 GO READ ANSWER JMP READ,I THEN RETURN TO CALLER READ2 NOP READ3 LDA P64 LDB ALBUF GET ADDRESS OF LBUF JSB DRTTY,I ENTRY FROM TTY SZA,RSS SKIP - DATA INPUT JMP READ3 REPEAT INPUT INA BUMP TO NEXT CHAR CLE,ERA CLEAR LAST ENTRY ADA ALBUF IN INPUT BUFFER CLB PLUS ONE STB A,I FOR BUFFER TERMINATE JSB GINIT INITIALIZE LBUF SCAN CLA,INA IF FIRST CHARACTER JSB GETNA IS A CPA BLANK BLANK (OR A "*") JMP READ3 THEN SKIP THE RECORD * JSB GINIT RESET THE SCANNER JMP READ2,I RETURN * * * GENIO NOP CLA SET FLAG STA LST1 TO DETERMIN IF A TABLE GENERATED STA SPLCO CLEAR THE SPOOL EQT COUNT. STA ERROR CLEAR THE ERROR FLAG JSB DSTBL GO GENERATE A DISC MAP TABLE LDA LST1 IF A SZA TABLE GENERATED JSB DAFIX FIX UP THE REFERENCES * * GENERATE THE CLASS I/O TABLE * JSB RED2 SEND MESSAGE AND GET ANSWER DEC 18 18 CHARACTERS DEF MES04 '*# OF I/O CLASSES?' D$CLS DEF $CLS ADDRESS OF ENT NAME ADB OCTNO RESERVE ROOM STB PPREL FOR IT (SETS IT TO ZERO) * * GENERATE THE LU MAP TABLE * JSB RED2 SEND MESSAGE AND GET ANSWER DEC 18 DEF MES05 '*# OF LU MAPPINGS?' D$LUS DEF $LUMP ADDRESS OF ASC ENT NAME LDA OCTNO INITILIZE THE TABLE CMA,INA TO STA TBUF -1'S NXLUM CCA AND ' JSB LABDO THEN ISZ TBUF JMP NXLUM RESET * STB PPREL THE RELOCATION ADDRESS * * GENERATE THE RN TABLE * JSB RED2 SEND MESSAGE AND GET DEC 23 ANSWER DEF MES06 '*# OF RESOURCE NUMBERS?' D$RNT DEF $RNTB ADDRESS OF ENT POINT NAME ADB OCTNO RESERVE THE TABLE AREA STB PPREL (SETS IT TO ZERO) STB AEQT SAVE ADDRESS OF EQT * * SET UP THE BUFFER LIMITS * BLGEN LDA D26 SEND MESSAGE 'BUFFER LIMITS (LOW,HIGH)?' LDB DMES7 AND GET ANSWER JSB READ JSB BLSET SET UP DEF $BLLO LOWER LIMIT JMP BLGEN IF ERROR TRY AGAIN * JSB BLSET NOW SET UP THE UPPER LIMIT DEF $BLHI JMP BLGEN IF ERROR TRY AGAIN * * * GENERATE EQUIPMENT TABLE (EQT) * JSB SPACE MAKE IT LOOK NICE. CLA STA CEQT CLEAR NO. OF EQT ENTRIES CCA SET DRT2 AND STA DRT2 DRT3 STA DRT3 TO IMPOSSIBLE NUMBERS LDA P23 LDB MES25 MES25 = ADDR: * EQT TABLE ENTRY JSB DRKEY,I PRINT: * EQUIPMENT TABLE ENTRY * SEQT JSB SPACE SEND SPACE LDA CEQT CONVERT CMA LDB ATBUF THE CURRENT EQT JSB CONVD NUMBER TO ASCII LDA TBUF+2 SET IN THE STA MESEQ EQT MESSAGE BUFFER LDA P7 GET MESSAGE LENGTH LDB MESQE SEND MESSAGE "EQT XX?" AND JSB READ GET EQT RECORD FROM TTY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA "/E" CHARS = /E? JMP EQTFX YES - SET DEVICE REF TABLE (SQT) JSB GINIT RE-INITIALIZE LBUF SCAN LDA P2 JSB GETOC GET 2 OCTAL DIGITS, CONVERT JMP IOERR INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP CLDBU YES - SET CHNL NO., CLEAR D,B,U IOERR LDA ERR24 SET CODE = INVALID C"HNL IN EQT JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * CLDBU LDB OCTNO GET I/O CHANNEL NO. STB IOADD SET I/O ADDRESS CLA STA IODMA CLEAR DMA FLAG STA IOBUF CLEAR AUTOMATIC BUFFERING FLAG STA FIX3,I CLEAR THE STA FIX4,I FLAG WORDS STA TVAL AND TIME OUT VALUE CCA STA TFLAG CLEAR TIME-OUT FLAG LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA "DV" CHAR = "DV"? CLA,INA,RSS YES - CONTINUE JMP DVERR INVALID DRIVER NAME JSB GETNA MOVE 1 CHAR TO TBUF (CHAR 3) JMP STYPE GET DRIVER TYPE * DVERR LDA ERR25 SET CODE = INVALID DRIVER NAME JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * STYPE STA X. SAVE KEY CHARACTER (R FOR STD.) LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF STA .YY SAVE 2 ASCII CHARS FOR I.XX,C.XX CCA ADA CURAL ADJUST CURRENT LBUF ADDR STA CURAL RESET CURAL TO CONVERT TYPE LDA P2 JSB GETOC GET 2 OCTAL CHARS, CONVERT JMP DVERR INVALID DRIVER NAME * LDB OCTNO GET DRIVER TYPE BLF,BLF ROTATE TO UPPER B STB IOTYP SET DRIVER TYPE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP GENEQ SCAN FOR I.XX, C.XX CPA BLANK CHAR = COMMA? RSS YES - CONTINUE JMP DVERR NO - INVALID DRIVER NAME * CCA STA FIX1,I STA DFLAG SET DMA-IN FLAG STA BFLAG SET BUFFERING-IN FLAG STA XFLAG SET EQT EXTEND FLAG * INDBU CCA STA CMFLG SET COMMA FLAG = NO COMMA IN JSB GETAL GET NEXT CHAR FROM LBUF CPA "D" CHAR = D? JMP SEDMA YES - SET DMA CODE * CPA "B" CHAR = B? JMP SETBU YES - SET BUFFERING CODE * CPA "T" CHAR = T? JMP SETIM YES - SET TIME-OUT FLAG * CPA "X" CHAR = X? JMP SETEX YES GO SET UP EQT EXTENSION * UNERR LDA ERR26 SET CODE = INVALID D,B,T,X JSB ERROR PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * SETIM ISZ TFLAG SKIP - FIRST T ENTERED JMP UNERR DUPLICATE T'S ENTERED * JMP TEQU GET THE TIME OUT VALUE * EQTST JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP GENEQ SCAN FOR I.XX, C.XX * CPA BLANK CHAR = COMMA? JMP INDBU YES - GET NEXT D,B,U, ENTRY * JMP UNERR NO - INVALID D,B,U CHARACTER * SEDMA ISZ DFLAG SKIP - FIRST D ENTERED JMP UNERR DUPLICATE D'S ENTERED * LDA MSIGN SET BIT 15 = 1 FOR DMA FLAG STA IODMA SET DMA CODE JMP EQTST TEST FOR NEXT OPERAND * SETBU ISZ BFLAG SKIP - FIRST B ENTERED JMP UNERR DUPLICATE B'S ENTERED * LDA BIT14 SET BIT14 = 1 STA IOBUF SET AUTOMATIC BUFFERING CODE JMP EQTST TEST FOR NEXT OPERAND * SETEX ISZ FIX1,I SKIP FIRST X ENTERED JMP UNERR NO BITCH * TEQU STA I.XX SAVE THE TYPE FLAG JSB GETAL GET THE NEXT CHARACTER CPA EQU IF NOT "=" RSS JMP UNERR BITCH * LDA N5 GET DECIMAL NUMBER JSB GETOC JMP UNERR ILLEGAL NUMBER SO BITCH * LDB I.XX GET THE TYPE FLAG CPB "X" IF EXTENSION STA FIX3,I SAVE THE LENGTH OF THE EXTENSION CPB "T" IF TIME OUT STA TVAL SET THE TIME OUT VALUE JMP EQTST GO GET THE NEXT OPERAND * GENEQ LDA X. GET THE KEY CHARACTER CPA "R" IF R THEN USE LDA "." A PERIOD. IOR "INL" SET "I" IN UPPER HALF STA X. SET FOR LST SEARCH LDB ENT GET ADDRESS JSB LSTS LOOK FOR SYMBOL JMP DVERR ILLEGAL DRIVER ENT NOT FOUND. *  LDA LST5,I GET CORE ADDRESS STA I.XX SAVE DRIVER ENTRY POINT * LDA X. GET THE I. OR WHAT EVER XOR B5000 CHANGE IT TO C. OR WHAT EVER STA X. AND RESET LDB ENT SCAN THE LST JSB LSTS FOR THE "C.YY" ENTRY POINT. JMP NOCXX C.XX NOT FOUND IN LST * LDA LST5,I GET CORE ADDRESS STCXX STA C.XX SAVE DRIVER EXIT POINT LDA X. IF THIS IS CPA "CS" DVS43 THEN LDA .YY COUNT CPA "43" A ISZ SPLCO SPOOL EQT * CLA LDB PPREL GET THE ADDRESS JSB LABDO PUT OUT I/O LIST POINTER LDA I.XX GET DRIVER ENTRY POINT JSB LABDO OUTPUT ABSOLUTE DVRXX ENT ADDR LDA C.XX GET DRIVER EXIT POINT JSB LABDO OUTPUT ABSOLUTE DVRXX COMP. ADDR LDA IODMA GET DMA CODE IOR IOBUF ADD BUFFERING CODE IOR IOADD ADD CHANNEL NO. JSB LABDO OUTPUT D,B,U, CHANNEL * LDA IOTYP GET EQUIPMENT TYPE CODE AND M7000 ISOLATE UPPER 7 BITS SZA SKIP - TYPE = 0,I CLA,RSS SET STATUS = 0, SKIP LDA BLANK SET STATUS = 40(8) IOR IOTYP ADD EQUIPMENT TYPE CODE JSB LABDO OUTPUT EQUIPMENT TYPE, STATUS * LDA N8 ADB P6 INDEX TO EQT12 LDA FIX3,I GET EXTENSION SIZE JSB LABDO AND SEND IT TO THE DISC STB FIX2,I SAVE EQT13 ADDRESS FOR EXTENT ALLOCATION INB STEP TO EQT14 LDA TVAL GET THE TIME OUT VALUE SZA IF ZERO LEAVE IT CMA ELSE SET IT TO ONES COMPLEMENT JSB LABDO SEND TIME OUT TO EQT INB SET THE ADDRESS STB PPREL OF THE NEXT EQT * JSB SFIX GET A NEW FIXUP TABLE ENTRY IF NEEDED ISZ CEQT INCR EQT ENTRY COUNT JMP SEQT PROCESS NEXT EQT RECORD * NOCXX LDA I.XX C.XX NOT FOUND SO USE JMP STCXCsX I.XX ADDRESS SPC 2 MESQE DEF *+1 ASC 2,EQT DO NOT REARANGE THESE MESEQ NOP THESE THREE ASC 1,? LINES "CS" ASC 1,CS "43" ASC 1,43 SPLCO NOP D26 DEC 26 "R" OCT 122 "X" OCT 130 EQU OCT 75 ASCII "=" XFLAG NOP TVAL NOP "DV" ASC 1,DV "." OCT 56 "INL" OCT 44400 ASCII I NULL B5000 OCT 5000 SPC 2 * THE BLSET ROUTINE SETS UP THE BUFFER LIMITS. * * CALLING SEQUENCE: * * JSB BLSET * DEF ENT NAME ENTRY POINT NAME ADDRESS * JMP RETRY ERROR RETURN * * --- NORMAL EXIT * BLSET NOP FIRST FIND LDB BLSET,I THE ENTRY POINT ISZ BLSET STEP RETURN ADDRESS JSB LSTS SEARCH FOR THE ENTRY JMP FGET IF NOT FOUND JUST EXIT * LDA N5 CONVERT A 5 DIGIT DECIMAL JSB GETOC LIMIT JMP BLSET,I ERROR TAKE ERROR EXIT * LDB LST5,I GET THE LIST ADDRESS CMA,INA SET THE LIMIT NEGATIVE AND JSB LABDO GO OUTPUT THE LIMIT FGET ISZ BLSET STEP TO OK RETURN JMP BLSET,I AND RETURN * * THE RED2 SUBROUTINE IS USED TO SET UP TABLES * WHICH START WITH THERE SIZE AS THE FIRST WORD * * CALLING SEQUENCE: * * JSB RED2 * DEC XX CHARACTER COUNT OF QUESTION. * DEF MESXX ADDRESS OF ASCII MESSAGE * DEF ENT ADDRESS OF ASCII ENTRY POINT NAME * RETURN B=NEXT AVAILABLE CORE LOCATION * REERR JSB INERR SEND ERROR 01 AND RSS RETRY * RED2 NOP ENTRY POINT RERED DLD RED2,I GET THE MESSAGE PRAMETERS JSB READ GO SEND MESSAGE AND GET RESPONCE LDA N3 CONVERT 3 ASCII DIGITS JSB DOCON AS DECIMAL JMP RERED IF ERROR RETRY * AND M7400 IF NOT LESS THAN SZA 256 JMP REERR THEN ERROR * LDA OCTNO GET THE ANSWER AGAIN SZA,RSS IF ZERO INA SET TO ONE Q STA OCTNO AND RESET ISZ RED2 STEP ISZ RED2 TO THE SYMBOL ADDRESS LDB RED2,I FIND JSB LSTS THE SYMBOL IN THE LST HLT 0 MUST BE THERE LDB PPREL DEFINE THE SYMBOL STB LST5,I LDA OCTNO OUTPUT THE FIRST JSB LABDO WORD STB PPREL UPDATE THE ADDRESS JSB DAFIX FIX UP ALL REFERENCES JSB SPACE MAKE IT LOOK NICE. LDB PPREL SET B FOR RETURN ISZ RED2 SET RETURN ADDRESS JMP RED2,I RETURN * MES04 ASC 9,*# OF I/O CLASSES? MES05 ASC 9,*# OF LU MAPPINGS? MES06 ASC 12,*# OF RESOURCE NUMBERS? DMES7 DEF MES07 MES07 ASC 13,BUFFER LIMITS (LOW, HIGH)? $CLS ASC 3,$CLAS $RNTB ASC 3,$RNTB $LUMP ASC 3,$LUSW $BLLO ASC 3,$BLLO $BLHI ASC 3,$BLUP $LUAV DEF *+1 ASC 3,$LUAV SPC 2 EQTFX JSB FIXX ALLOCATE AND SET UP NXEQF JSB FIX EXTENDED EQTS JMP SSQT END OF FIXUPS GO DO SQT * LDA FIX1,I GET THE TYPE FLAG SZA IF NOT ZERO THEN NOT JMP NXEQF AN EQT PATCH ENTRY * LDB FIX2,I GET EQT12 ADDRESS LDA PPREL AND CURRENT CORE ADDRESS JSB LABDO OUTPUT THE ADDRESS LDA PPREL RESERVE THE ADA FIX3,I CORE STA PPREL CCA CLEAR THE FIX STA FIX1,I ENTRY JMP NXEQF AND TRY THE NEXT ONE * SSQT LDB $LUAV MAKE THE LUAV TABEL JSB LSTS FIRST SET UP THE ENTRY HLT 0 IT BETTER BE THERE LDB PPREL GET THE CORE ADDRESS STB LST5,I SET THE ADDRESS LDA SPLCO GET THE NUMBER OF ENTRYS CMA,INA,SZA IF ZERO SKIP THE TABEL GEN. JSB LABDO SEND THE TABEL HEAD (IF NONE ZERO) ADB SPLCO ADJUST FOR THE TABLE SIZE ADB SPLCO (TWO WORD ENTRYS) STB PPREL SET THE NEW ADDRESS JSB DAFIX GO FIX UP ANY REFERENCES SKP * * SET DEVICE RTRNEFERENCE TABLE (DRT) * JSB SPACE NEW LINE JSB SPACE NEW LINE LDA PPREL GET CURRENT RELOCATION ADDRESS STA ASQT SAVE SQT ADDRESS CLA,INA STA CSQT SET SQT COUNT = 1 CCA STA LFLAG SET 1ST DEV REF INPUT FLAG = -1 LDA P24 LDB MES26 MES26 = ADDR: *DEV REF TABLE JSB DRKEY,I PRINT: * DEVICE REFERENCE TABLE * DEVRE LDA CSQT GET CURRENT DEV REF NO. CMA,INA SET TO NEG. FOR DECIMAL CONV LDB ATBUF GET ADDRESS OF TBUF JSB CONVD CONVERT TO DECIMAL AT TBUF LDA TBUF+2 GET 2 LEAST SIGNIFICANT DIGITS AND M7400 ISOLATE UPPER CHAR CPA UASCZ CHAR = ASCII ZERO? LDA UBLNK YES - REPLACE WITH BLANK STA B SAVE UPPER CHAR LDA TBUF+2 GET 2-DIGIT DEV REF NO. AND M177 ISOLATE LOWER CHAR IOR B SET A = DEV REF CODE STA MES28,I PUT DEV REF CODE IN MESSAGE JSB SPACE NEW LINE LDA P11 LDB MES28 MES28 = ADDR: XX = EQT #? JSB READ GET SQT RECORD FROM TTY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA "/E" CHARS = /E? JMP SINTT YES - SET INTERRUPT TABLE JSB GINIT RE-INITIALIZE LBUF SCAN LDA N2 JSB GETOC GET 2 DECIMAL DIGITS, CONVERT JMP DRERR INVALID DIGIT ENTERED STA TEMPL SAVE DEV. REF. NO. SZA,RSS IF NO CHANNEL JMP SUBCH IGNOR SUBCHANNEL JSB GETAL COMMA ENCOUNTERED? SZA,RSS YES - GO GET SUBCHANNEL JMP SUBCH NO - DEFAULT IT TO ZERO * LDA N2 JSB GETOC GET TWO DECIMAL DIGITS JMP DRERR tT AND M37 KEEP MAX SIZE CPA OCTNO IF NOT SAME RSS JMP DRERR THEN ERROR * SUBCH STA TEMPS SAVE SUB CHANNEL ALF,ALF SET SUBCHANNEL NO. ALF,RAR INTO BITS 13 - 11 STA TEMPH SAVE SUBCHANNEL NO. LDA TEMPL GET DEV. REF. NO. CMA,INA COMPLEMENT ADA CEQT ADD NO. EQT ENTRIES SSA SKIP IF VALID DEV. REF NO. JMP DRERR INVALID DEV. REF. NO. (NO EQT) LDA TEMPL GET DEV. REF NO. LDB CSQT GET CURRENT SQT NO. CPB P1 FIRST ENTRY? RSS YES - CONTINUE CPB P2 SECOND ENTRY? RSS YES - CONTINUE JMP SESQT PUT OUT DEV REF NO. TO SQT SZA,RSS SKIP IF DEV REF IS NOT ZERO JMP DRERR INVALID DEV. REF. NO. CPB P1 FIRST SQT ENTRY? RSS YES - CONTINUE (SET TTY CHANNEL) JMP SESQT PUT OUT DEV. REF. NO. TO SQT CMA,INA COMPLEMENT CURRENT DEV. REF. NO. LDB AEQT GET ADDRESS OF EQT INA,SZA,RSS SKIP - DEV. REF. NOT 1 JMP *+4 SET TTY CHANNEL NO. = FIRST EQT ADB P15 ADJUST CURRENT EQT ADDRESS INA,SZA SKIP - EQT FOUND JMP *-2 CONTINUE CURRENT EQT SEARCH STB TTYCH SET EQT ADDR IN TTY CHANNEL SESQT LDB CSQT SET UP TO TEST LDA TEMPS FOR PROPER SUB CHANNEL REFERENCES CPB P2 DEV. REF = 2? CPA SYSCH YES - SYSTEM SUB CHANNEL? RSS YES - YES OR NO -X SKIP JMP DRERR YES - NO - ERROR CPB P3 DEV. REF =3? CPA AUXCH YES - AUX SUB CHANNEL? JMP SETQT YES - YES OR NO - X - GO SETUP * LDA AUXCH GET THE CHANNEL SSA IF DISC ON DIFFERENT CONTROLER JMP SETQT GO SET IT UP * LDA TEMPL YES - NO - TEST FOR AUX UNIT DEFINED LDB DAUXN SZB SKIP IF NO AUX UNIT JMP DRERR !AUX DEFINED SO ERROR * SZA NO AUX-UNIT WAS REF = 0? JMP DRERR NO - SO ERROR * SETQT LDA TEMPL GET DEV. REF. NO. IOR TEMPH SET IN SUBCHANNEL NO. LDB CSQT SET UP TO TEST FOR ILLEGAL DISC REF. CPA DRT2 IF SAME AS SYSTEM DISC JMP DRERR ERROR CPB P2 IF SYSTEM DISC ENTRY STA DRT2 SET FOR FUTURE TESTING CPA DRT3 IF SAME AS AUX DISC JMP DRERR ERROR SZA,RSS IF ZERO SKIP JMP *+3 TEST FOR AUX ENTRY CPB P3 IF AUX ENTRY STA DRT3 SET FOR FUTURE TESTING LDB PPREL SET CORE ADDRESS JSB LABDO OUTPUT SQT ENTRY ISZ PPREL INCR CURRENT RELOC ADDRESS ISZ CSQT INCR CURRENT SQT COUNT JMP DEVRE GET NEXT SQT ENTRY DRERR LDA ERR27 SET CODE = INVALID DEV. REF. NO. JSB ERROR PRINT DIAGNOSTIC JMP DEVRE REPEAT INPUT * TEMPL NOP TEMPH NOP TEMPS NOP D$CIC DEF $CIC SKP SINTT JSB SPACE NEW LINE JSB SPACE NEW LINE CCB ADB CSQT SUBTRACT 1 FROM SQT COUNT STB CSQT SET SQT COUNT * ADB PPREL THE FOLLOWING ALLOWS FOR TWO WORDS STB PPREL PER DRT ENTRY. CLA ZERO THEM JSB LABDO OUT. * * SET INTERRUPT TABLE (INT) * LDA PPREL GET CURRENT RELOCATION ADDR STA AINT SAVE INTERRUPT TABLE ADDRESS LDA DSKAD GET CURRENT ABS. CODE DISK ADDR STA DSKIN SAVE INT CODE DISK ADDR LDA DCNT GET CURRENT ABS. CODE DBUF COUNT STA INTCN SAVE INT CODE DISK RECORD COUNT LDA P17 LDB MES29 MES29 = ADDR. * INT TABLE JSB DRKEY,I PRINT: * INTERRUPT TABLE LDB AILST GET ADDRESS OF ILIST STB CURIL GET CURRENT ILIST ADDRESS JSB BUFCL CLEAR ILIST * LDB D$CIC GET ADDRESS OF CIC JSB LSTS GET LST ADDRES{>S JMP NOCIC CIC NOT FOUND IN LST LDA LST5,I GET CORE ADDRESS STA OPRND SET FOR BP SCAN CLA SET BP ONLY STA BPONL FLAG JSB BPSCN GO GET THE LINK ADDRESS IOR IJSB ADD JSB 0,I CODE STA JSCIC SET JSB CIC,I CODE LDB FSYBP GET FWA BP LINKAGE CMB,INB COMPLEMENT STB TCNT SET TEMPORARY COUNT LDB ADBP ADJUST FOR FIRST BP ADDRESS STA B,I PUT JSB CIC,I IN BP LOCATION INB INCR CURRENT BP ADDRESS ISZ TCNT SKIP - ALL INT LOCATIONS FILLED JMP *-3 CONTINUE FILLING INT LOCATIONS * LDB P4 INITIALIZE TRAP CELL FOUR ADB ADBP ADJUST TO PSEUDO BASE PAGE LDA HLTB4 TO HALT(B) 4 STA B,I ADB P2 GET ADDR OF FIRST INT LOCATION STB MEM12 SET CURRENT BP ADDRESS * SETIN CLA,INA NEW LINE LDB DBLNK SEND ONE BLANK FOR SPACEING JSB READ GET INT RECORD FROM TTY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA "/E" CHARS = /E? JMP ENDIO YES - I/O TABLES COMPLETE JSB GINIT RE-INITIALIZE LBUF SCAN LDA P2 JSB GETOC GET 2 OCTAL DIGITS, CONVERT JMP CHERR INVALID INT CHANNEL NO. DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP SETCH SAVE INT CHANNEL NO. CHERR LDA ERR28 SET CODE = INVALID INT CHNL NO. JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * NOCIC LDA ERR21 SET CODE = CIC NOT FOUND IN LST JSB IRERR IRRECOVERABLE ERROR * SETCH LDA OCTNO GET INT CHANNEL NO. STA INTCH SAVE CHANNEL NO. * LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA "EQ" CHARS = EQ? JMP INTEQ YES - PROCESS INT EQT RECORD * CPA "PR" CHARS = PR? JMP INTPR YES - PROCESS INT PRG RECORD * CPA "EN"G` CHARS = EN? JMP INTEN YES - PROCESS INT ENT RECORD * CPA "AB" CHARS = AB? JMP INTAB YES - PROCESS INT ABS RECORD * IMNEM LDA ERR30 SET CODE = INVALID INT MNEMONIC JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * INTEQ LDA N2 JSB GETNA MOVE NEXT 2 CHARS TO TBUF CPA UTCHR CHARS = T,BLANK? RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA N2 JSB GETOC GET 2 DECIMAL DIGITS, CONVERT JMP EQUER INVALID EQT NO. IN INT REC LDB OCTNO GET EQT TABLE ENTRY NO. CMB,INB,SZB,RSS SKIP - VALID LOWER LIMIT JMP EQUER INVALID EQT REFERENCE STB TCHAR SAVE EQT NO. ADB CEQT ADD UPPER EQT REF. NO. SSB,RSS SKIP - INVALID UPPER LIMIT JMP TSTIQ TEST FOR FIRST EQT REFERENCE * EQUER LDA ERR31 SET CODE = INVALID EQT NO. JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * TSTIQ LDB TCHAR GET EQT REF. NO. LDA AEQT GET ADDR OF EQT INB,SZB,RSS SKIP - NOT FIRST EQT REFERENCE JMP SEQTI SET EQT ADDR IN INT TABLE * ADA P15 ADJUST FOR NEXT EQT ENTRY ADDR INB,SZB SKIP - EQT ADDRESS FOUND JMP *-2 CONTINUE EQT SEARCH * SEQTI LDB JSCIC GET JSB CIC CODE JMP COMIN SET INTERRUPT TABLE, LOCATION * INTPR LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA UGCHR CHARS = G,BLANK? RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA N5 JSB GETNA MOVE 5 CHARS TO TBUF * LDB ATBUF FIND THE PROGRAM JSB IDXS IN THE IDENT LIST JMP PRERR INVALID PROGRAM NAME LDB JSCIC GET JSB CIC CODE LDA ID1 GET CURRENT IDENT ADDRESS CMA,INA SET NEGATIVE JMP COMIN SET INTERRUPT TABLE, LOCATION * PRERR LDA ERR32 SET CODE = INVALID PROGRAM NAME JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * * INTEN LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA UTCHR CHARS = T, BLANK RSS YES - CONTINUE JMP IMNEM INVALID INT MNEMONIC LDA N5 JSB GETNA MOVE 5 CHARS TO TBUF * LDB ATBUF FIND THE ENTRY JSB LSTS IN THE LST JMP ENERR INVALID ENTRY POINT LDA LST4,I GET IDENT ADDR SZA,RSS SKIP - ENT IS DEFINED JMP ENERR INVALID ENTRY POINT STA TIDNT SET IDENT ADDRESS OF PROGRAM JSB IDX SET IDENT ADDRESSES HLT 0B END OF IDENT LIST LDA ID6,I GET PROGRAM TYPE AND M177 ISOLATE TYPE SZA,RSS SKIP - NOT SYSTEM PROGRAM JMP SETEN SET ENTRY POINT ADDRESS * ENERR LDA ERR33 SET CODE = INVALID ENTRY POINT JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INT RECORD INPUT * SETEN LDA LST5,I GET CORE ADDRESS STA OPRND SET THE OPERAND ADDRESS JSB BPSCN GET THE LINK ADDRESS IOR IJSB ADD JSB 0,I CODE STA B CLA SET INT ENTRY = ZERO JMP COMIN SET INTERRUPT TABLE, LOCATION * INTAB LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA USCHR CHARS = U,BLANK RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA P6 JSB GETOC GET 6 OCTAL DIGITS, CONVERT JMP ABERR INVALID ABS DIGIT CLA LDB OCTNO GET ABSOLUTE VALUE * COMIN STA TBUF SAVE INT TABLE CODE STB TBUF+1 SAVE INT LOCATION CODE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP *+4 YES - CONTINUE * LDA ERR36 SET CODE = INVALID FINAL OPRND JSB ERROR PRINT DIAGNOSTIC JMP SETIN GET NEXT INT RECORD * LDA INTCH GET INT CHANNEL NO. CPA P4 SPECIAL PROCESSING JMP PFINT IF TRAP CELL FOUR CMA,INA ADA NADBP ADJUST FOR BP LOCATION ADDR ADA MEM12 ADD CURRENT BP ADDRESS SZA,RSS SKIP - NOT NEXT LOCATION JMP STINT SET INTERRUPT TABLES, LOCATION * SSA SKIP - INVALID CHANNEL NO. ORDER JMP FILLI FILL IN SKIPPED VALUES LDA ERR29 SET CODE = INVALID INT CHNL ORDR JSB ERROR PRINT DIAGNOSTIC JMP SETIN GET NEXT INTERRUPT RECORD * PFINT LDA TBUF IF TRAP CELL FOUR, SZA ENTRY MUST BE AN JMP CHERR 'ABS' OR AN 'ENT' * LDA ADBP ADA P4 ADJUST LDB TBUF+1 STORE INTO STB A,I TRAP CELL FOUR JMP SETIN GET NEXT INTERRUPT RECORD * HLTB4 OCT 103004 TRAP CELL DEFAULT VALUE * FILLI STA TCNT SET NO. OF FILL-INS REQUIRED FILLJ CLA SET INTERRUPT TABLE ENTRY = ZERO LDB PPREL GET ADDRESS JSB LABDO OUTPUT ZERO TO INTERRUPT TABLE ISZ PPREL INCR CURRENT INT TABLE ADDRESS LDA JSCIC GET JSB CIC CODE STA MEM12,I PUT JSB CIC IN INT LOCATION ISZ MEM12 INCR CURRENT INT LOCATION ADDR ISZ CURIL STEP THE INT IMAGE ADDRESS ISZ TCNT SKIP - ALL FILL-INS COMPLETE JMP FILLJ CONTINUE INT FILL-IN * STINT LDB TBUF+1 GET INT LOCATION CODE STB MEM12,I PUT INT LOCATION CODE IN INT LOC ISZ MEM12 INCR CURRENT BP LOCATION ADDR LDB MEM12 GET INT LOCATION ADDR ADB NADBP ADJUST FOR BP ADDR CMB,INB ADB FSYBP ADD ADDR OF FIRST SYS LINK SSB,RSS SKIP - INT LOCATION OVERFLOW JMP NOBPO SET INT TABLE ENTRY * LDA ERR35 SET CODE = BP INT LOC OVERFLOW JSB ERROR PRINT DIAGNOSTIC JSB SPACE NEW LINE JMP FWENT GET FWA BP LINKAGE * ABERR LDA ERR34 SET CODE = INVALID ABS DIGIT JSB ERROR PRINT DIAGNOSTIC JMP SETIN REPEAT INTgD REC INPUT * NOBPO LDA TBUF GET INT TABLE CODE STA CURIL,I SET WORD IN INT IMAGE ISZ CURIL STEP IMAGE ADDRESS FOR NEXT TIME LDB PPREL GET CORE ADDRESS JSB LABDO OUTPUT INT TABLE ENTRY ISZ PPREL INCR CURRENT RELOCATION ADDR JMP SETIN GET NEXT INT TABLE RECORD * ENDIO LDA AINT GET ADDRESS OF INT CMA,INA ADA PPREL ADD CURRENT RELOCATION ADDR STA CINT SAVE NO. INT ENTRIES JSB SPACE NEW LINE JSB SPACE NEW LINE JMP GENIO,I RETURN - CONTINUE LOADING HED RTE GENERATOR PAGE PARAMETERS AND CONSTANTS TEMPE BSS 1 PARAMETER ERROR CODE PARNO BSS 1 PARAMETER RECORD LENGTH * IOADD BSS 1 I/O ADDR (CHANNEL NO.) IN EQT IODMA BSS 1 I/O DMA FLAG IN EQT IOBUF BSS 1 I/O BUFFERING FLAG IN EQT IOTYP BSS 1 I/O DRIVER TYPE IN EQT (OCTAL) DFLAG BSS 1 DMA-IN FLAG FOR EQT BFLAG BSS 1 BUFFERING-IN FLAG FOR EQT TFLAG BSS 1 TIME-OUT ENTRY FLAG FOR EQT INTCH BSS 1 INT RECORD CHANNEL NO. JSCIC BSS 1 JSB CIC,I CODE FOR INTERRUPT LOC I.XX BSS 1 DRIVER ENTRY POINT C.XX BSS 1 DRIVER EXIT POINT * DRANG BSS 1 DIGIT RANGE DIFLG BSS 1 DATA-IN FLAG = -1/0 = NOT IN/IN CMFLG BSS 1 COMMA FLAG = -1/0 = NOT IN/IN BUFUL BSS 1 BUFFER U/L FLAG MS24 ASC 5,PARAMETERS MS28 ASC 6, = EQT #? MS29 ASC 9,* INTERRUPT TABLE ENT DEF *+1 X. ASC 1,I. .YY NOP ASC 1, D$STR DEF *+1 ASC 3,$STRT STAR OCT 52 SPC 1 MES25 DEF *+1 ASC 12,* EQUIPMENT TABLE ENTRY SPC 1 MES26 DEF *+1 ASC 12,* DEVICE REFERENCE TABLE HED RTE GENERATOR I/O TABLE GENERATION SUBROUTINES * * GET CHAR FROM LBUF, RETURN IN A * * THE FOLLOWING SUBROUTINE SUPPLIES THE CHARACTERS FOR * GETNA AND GETOC. * * CALLING SEQUENCE: * A = IGNORED * B = IGNOREDj * JSB GETAL * * RETURN: * A = CURRENT CHARACTER * B = DESTROYED * GETAL NOP LDA CMFLG CMFLG = COMMA-IN FLAG SZA,RSS SKIP IF NO COMMA IN JMP BLRET RETURN BLANK LDB BUFUL GET U/L FLAG IGNOR LDA CURAL,I GET CHAR FROM LBUF SZB SKIP IF LOWER CHAR ALF,ALF ROTATE TO LOWER AND M377 ISOLATE LOWER CHAR CPA STAR IF STAR CLA TREAT AS END OF LINE CPA ZERO END OF BUFFER? JMP GETAL,I YES - RETURN WITH ZERO CMB,SZB RESET U/L, SKIP IF UPPER CHAR ISZ CURAL INCR LBUF ADDRESS STB BUFUL SAVE U/L FLAG CPA BLANK CHAR = BLANK? JMP IGNOR IGNORE BLANKS * CPA COMMA CHAR = COMMA? ISZ CMFLG RESET FLAG TO SHOW COMMA IN (SKIPS) JMP GETAL,I RETURN WITH NON-BLANK CHAR BLRET LDA BLANK REPLACE WITH BLANK CHAR JMP GETAL,I RETURN WITH BLANK SKP * * MOVE ALPHA FROM LBUF TO TBUF * * THE FOLLOWING SUBROUTINE MOVES THE CHARACTERS FROM LBUF * TO TBUF. * * CALLING SEQUENCE: * A = MAX. NO. OF CHARACTERS TO BE MOVED. THE SIGN OF A * DESIGNATES THE POSITION OF THE FIRST CHARACTER. * IF THE SIGN OF A IS POSITIVE, THE FIRST CHAR IS TO * BE MOVED TO THE LOW CHAR IN TBUF. IF A IS NEGATIVE, THE * FIRST CHARACTER IS TO BE MOVED TO THE UPPER CHAR IN TBUF. * B = IGNORED * JSB GETNA * * RETURN: * A = FIRST CHAR (IF ONLY 1 CHAR) OR FIRST 2 CHARS MOVED. * B = DESTROYED * GETNA NOP CCE,SSA,RSS SET E = 1 (EVEN) POSITION CMA,CLE,INA SET E = 0 (ODD) POSITION - COMP STA MAXC MAXC = MAXIMUM NO. CHARS LDA ATBUF ATBUF = ADDR OF TBUF STA CURAT SET CURRENT TBUF ADDRESS CLB STB TBUF CLEAR WORD 1 OF TBUF CCA STA CMFLG SET COMMA-IN FLAG SEZ,RSS SKIP - ODD POSITION JMP OCHAR BEGIN WITH ODD CHARACTER NEXTC JSB GETAL GET CHAR FROM LBUF CPA ZERO END OF BUFFER? LDA BLANK YES - REPLACE CHAR WITH BLANK ALF,ALF ROTATE TO UPPER A STA CURAT,I SET CHARACTER IN TBUF ISZ MAXC CHECK FOR ALL CHARS IN JMP OCHAR GET ODD CHAR FROM LBUF LDA TBUF GET FIRST 2 TRANSFERRED CHARS JMP GETNA,I YES - RETURN OCHAR JSB GETAL GET CHAR FROM LBUF CPA ZERO END OF BUFFER? LDA BLANK REPLACE ZERO CHAR WITH BLANK IOR CURAT,I ADD TO UPPER CHAR IN TBUF STA CURAT,I SET CHARS IN TBUF ISZ CURAT INCR TBUF ADDRESS ISZ MAXC CHECK FOR ALL CHARS IN JMP NEXTC NO - TRY NEXT UPPER CHAR LDA TBUF GET FIRST 2 TRANSFERRED CHARS JMP GETNA,I RETURN SKP * * CONVERT OCT/DEC ASCII TO BINARY * * THE GETOC SUBROUTINE CONVERTS THE NEXT CHARACTERS IN LBUF FROM * ASCII (DECIMAL OR OCTAL) TO THEIR BINARY VALUE. * * CALLING SEQUENCE: * A = MAX. NO. OF CHARS IN CONVERSION REQUEST. IF A IS * POSITIVE, THE REQUEST IS FOR OCTAL; IF A IS NEGATIVE, * THE REQUEST IS FOR DECIMAL. * B = IGNORED * JSB GETOC * * RETURN: * (N+1): INVALID DIGIT OR OVERFLOW IN CONVERSION * (N+2): A = CONVERTED NO. * B = DESTROYED * GETOC NOP LDB L10 GET OCTAL RANGE SSA SKIP IF OCTAL REQUEST LDB L12 GET DECIMAL RANGE STB DRANG SET DIGIT RANGE SSA,RSS SKIP IF DECIMAL REQUEST CMA,INA SET REQUEST COUNT TO NEGATIVE STA MAXC SET MAX NO. OF DIGITS CCA STA DIFLG SET DATA-IN FLAG = NO DATA IN STA CMFLG SET COMMA-IN FLAG CLA STA OCTNO OCTNO = OCTAL NUMBER GETNX JSB GETAL GET CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) JMP ENDOC YES - RETURN CPA BLANK CHAR = BLANK? (C֥OMMA IN) JMP ENDOC YES - RETURN ADA L60 SUBTRACT 60B FROM CHAR STA TCHAR SAVE CHAR SSA SKIP IF VALID LOWER LIMIT JMP DGERR INVALID DIGIT ADA DRANG ADD DIGIT RANGE CLE,SSA,RSS CLEAR E - SKIP IF VALID DIGIT JMP DGERR INVALID DIGIT ISZ DIFLG INCR DATA-IN FLAG, SKIP NOP LDA OCTNO GET PREVIOUS OCTAL NO. ADA A SET A = OCTNO X 2 ADA A SET A = OCTNO X 4 LDB DRANG GET DIGIT RANGE CPB L12 RANGE = DECIMAL? ADA OCTNO SET A = OCTNO X 5 ADA A SET A = OCTNO X 10/8 ADA TCHAR SET A = NEW OCTAL NO. STA OCTNO SAVE NEW OCTAL NO. SEZ TEST FOR OVERFLOW JMP DGERR INVALID NO. ISZ MAXC SKIP IF ALL DIGITS PROCESSED JMP GETNX GET NEXT DECIMAL DIGIT ISZ GETOC INCR RETURN ADDRESS LDA OCTNO GET OCTAL EQUIVALENT DGERR JMP GETOC,I RETURN ENDOC ISZ DIFLG SKIP - NO DATA IN JMP *-4 DATA IN - NORMAL RETURN JMP GETOC,I RETURN - ERROR SKP * * INITIALIZE CHAR TRANSFER * * THE GINIT SUBROUTINE SETS THE CURRENT ADDRESS AND UPPER/LOWER * FLAG FOR SCANNING LBUF. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB GINIT * * RETURN : CONTENTS OF A AND B ARE DESTROYED * GINIT NOP LDA ALBUF ALBUF = ADDR OF LBUF STA CURAL SET CURRENT LBUF ADDRESS CCB STB BUFUL BUFUL = BUFFER U/L FLAG JMP GINIT,I RETURN HED RTE GENERATOR LOAD ABSOLUTE SYSTEM * * LOAD ABSOLUTE SYSTEM * * THIS SECTION OF CODE CONTROLS THE GENERATION OF * THE ABSOLUTE CODE FOR THE SYSTEM. EACH PROGRAM * IS LOADED BY TYPE AS FOLLOWS: * * (1) SYSTEM * (2) RESIDENT LIBRARY * (3) RT RESIDENTS * (4) RT DISK RESIDENTS * (5) BG RESIDENTS * (6) BIG DISK RESIDENTS (AND BG SEGMENTS) * * EACH TYPE OF PROGRAM IS LOADED IN THE FOLLOWING MANNER: * * (1) THE IDENTIFICATION BLOCK FOR THE PROGRAM IS LOCATED * IN IDENT. A CALL TO LOAD IS EXECUTED TO LOAD THIS PROGRAM AND * ALL CALLED SUBROUTINES. IF THE PROGRAM IS DISK RESIDENT, * THE BASE PAGE SECTION OF CODE IS WRITTEN ON THE DISK * IMMEDIATELY AFTER THE MAIN SECTION OF CODE. IF THE * PROGRAM IS RT DISK RESIDENT, THE BOUNDARIES OF THE LARGEST * SECTION OF BASE PAGE AND PROGRAM ARE SAVED. IF THE PROGRAM IS * A USER PROGRAM (OTHER THAN SYSTEM USER PROGRAM) AN ID SEGMENT IS * GENERATED. FINALLY, THE BASE PAGE LINKAGE ADDRESSES ARE MADE * UNAVAILABLE TO SUBSEQUENT PROGRAMS IF THE PROGRAM IS DISK RESIDENT. * * THE ALLOCATION OF MEMORY TO THE SYSTEM IS GIVEN BELOW: * THE FREE MEMORY IS REPORTED TO THE SYSTEM IN EQT1 TO EQT12 * WITH THE ODD NUMBERED ENTRIES BEING THE CORE ADDRESSES * AND THE EVEN NUMBERED ENTRIES BEING THE NUMBER OF WORDS. SKP ************************************************** * * * * * BG DISK RESIDENTS * * * ************************************************** * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * BG RESIDENTS * * * * * ************************************************** * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * BG COMMON * **************** BG BOUNDARY ********************* * * * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** *  * * * * RT DISK RESIDENTS * * * ************************************************** * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * * * RT RESIDENTS * * * ************************************************** * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * RT COMMON * ***************** RT BOUNDARY ******************** * RESIDENT LIBRARY * ************************************************** * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * * * DISK ALLOCATION TABLE * * ID SEGMENTS * * KEYWORDS * * SYSTEM TABLES * * * ************************************************** * * * RT EXECUTIVE * * SYSTEM DRIVERS ETC. * * * ********************* 2000 *********************** * * * BASE PAGE LINKAGES * * * ************************************************** SKP * MEM AS SEEN MEM AS SEEN MEM AS SEEN MEM AS SEEN * BY SYSTEM BY ANY MEM BY DISC PROG BY DISC PROG * RES PROG USING COMMON NOT USING * OR SSGA COMMON OR * V SSGA ************************************************************ 77777 * (MAX=77777) * ROM BOOT * (MAX=77777) * (MAX=77777) * * * DR BOOT * * * * * EXTENSION * * * * **************** * * 77500 * * (MAX=77477) * DISC RESIDENT* DISC RESIDENT* * * * PROGRAMS * PROGRAMS * * * * USING * NOT USING * * * MEMORY * COMMON OR * COMMON OR * * * RESIDENT * SSGA * SSGA * * * PROGRAMS * * * * SYSTEM * * * * * * (ALL MUST * (EACH HAS * (EACH HAS * * AVAILABLE * FIT INTO * THIS SPACE * THIS SPACE * * * THIS SPACE) * AVAILABLE) * AVAILABLE) * * MEMORY * * * * * * * * * * (PHYSICALLY * * * * * AFTER MEM * * * * * RESIDENT * * * * * PROGRAMS) * * * * *-------------******************************* * * * * * * COMMON AREA * BACKGROUND COMMON AREA * * * IN SYSTEM * * * * MAP ONLY IF ******************************* * * USER SAID * * * * PRIV DRVRS * REAL-TIME COMMON AREA * * * ACCESS * * * * COMMON. ******************************* * * * * * * * SUBSYSTEM GLOBAL AREA * * * =6 * * * ************************************************************ * MEMORY RESIDENT LIBRARY * ************************************************************ * * * REAL-TIME EXECUTIVE, DRIVERS, * * TABLES, ETC. * * * ************************************************************ 2000 * COMMUNICATION AREA, SYSTEM LINKS, RES LIBRARY LINKS * ************************************************************ * MEMORY RESIDENT PROGRAM * * * LINKS * DISC RESIDENT PROGRAM * ****************************** LINKS, ASCENDING FROM 2 * * TRAP CELLS * * ************************************************************ 0 * * RELOCATION IN A MAPPED RTE SYSTEM SKP * SET FWA BP LINKAGE FWENT JSB SPACE LDA P15 LDB MES27 MES27 = ADDR: FWA BP LINKAGE? JSB READ PRINT AND GET REPLY LDA P4 JSB GETOC GET 4 OCTAL DIGITS, CONVERT JMP LNKER INVALID DIGIT ENTERED JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP SETFB YES - SET FWA BP LINKAGE LNKER LDA ERR23 GET ERROR CODE FOR INVALID REPLY JSB ERROR PRINT DIAGNOSTIC JMP FWENT REPEAT MESSAGE SETFB LDB OCTNO GET FWA BP SZB,RSS SKIP - VALID (NON-ZERO) FWA BP JMP LNKER REPEAT FWA BP LINKAGE INPUT STB FSYBP SET ADDR OF FIRST SYS LINK STB BPMAX INITILIZE TOP OF USED LINK POINTER JSB SPACE NEW LINE * * CLEAR LST WORD 5 JSB INLST INITIALIZE LST ADDRESSES CLLST JSB LSTX SET LST ADDRESSES JMP CLRID-1 CLEAR &ZXTUSAGE FLAGS CLA LDB LST4,I GET TYPE Z ADB N5 IF SELF SSB,RSS DEFINING SKIP CLEAR STA LST5,I CLEAR LST WORD 5 LDA LST3,I GET WORD 3 OF LST ENTRY AND M7400 ISOLATE UPPER CHARACTER STA LST3,I SET LST WORD 3 WITH NO ORDINAL JMP CLLST CONTINUE CLEARING LST * * CLEAR PROGRAM USAGE FLAGS JSB INIDX INITIALIZE IDENT ADDRESSES CLRID JSB IDX SET IDENT ADDRESSES JMP IDCLR ALL IDENT FLAGS CLEAR LDA ID3,I GET USAGE FLAG AND M7400 SET FLAG = ZERO STA ID3,I SET CLEARED USAGE FLAG JMP CLRID CLEAR NEXT IDENT FLAG * CLEAR PAGE 1 FOR INDIRECT LINKS IDCLR LDA L2000 STA WDCNT SET WORD COUNT = 2000(8) CLA LDB ADBP GET ADDRESS OF PSEUDO BASE PAGE CLRBP STA B,I CLEAR WORD IN BASE PAGE AREA INB INCR PAGE ADDRESS ISZ WDCNT SKIP - AREA CLEARED JMP CLRBP CONTINUE CLEARING SKP * * LOAD INITIALIZATION * IFN *** BEGIN NON-DMS CODE *** LDA PLST INITILIZE THE STA BFIX THE FIX UP LIST STA PFIX FOR FIX AND FIXX CLA STA TBLNK INITILIZE THE LNKX STARTER STA LIBFG SET LIB FLAG TO SHOW NOT LIBRARY STA KEYCT STA RELAD CLEAR RELOCATION ADDR FOR LABDO STA COMAD CLEAR COMMON RELOC BASE STA PTYPE SET PROGRAM TYPE = SYSTEM STA URBP CLEAR UPPER RESIDENT BP BOUND STA LBBP CLEAR LOW BACKGROUND BP BOUND STA UBBP CLEAR HIGH BACKGROUND BP BOUND STA LRBP CLEAR LOW RESIDENT BP BOUND LDA FSYBP GET FIRST WORD AVAIL BP LINKAGE STA PBREL SET BP RELOC ADDRESS STA CUBP SET UP THE CURRENT BP VALUES ADA ADBP SET DUMMY IMAGE ADDRESS STA ICUBP AND LDA LWSBP THE UPPER LIMIT STA UCUBP OF BASE PAGE ADDIaRESSES LDA CUBPA GET THE ADDRESS OF LAST LINKAGE ENTRY STA CPL2 AND SET LINK LST STA CPLS END MARKS LDA M2000 STA PPREL SET PROGRAM RELOC ADDR STA LRMAN SET LOWER RESIDENT MAIN ADDR STA URMAN SET CURRENT UPPER MAIN ADDRESS LDA DSKAB GET INITIAL ABSOLUTE DISK ADDR STA DSKAD SET CURRENT ABSOLUTE DISK ADDR STA DSKBP SET INITIAL BP ADDRESS * LDA M2000 GET UPPER ADDRESS OF BASE PAGE STA UBPSY SAVE UPPER BP DISK ADDRESS LDB P2 GET LOWER ADDRESS OF BASE PAGE STB LBPSY SAVE LOWER BP DISK ADDRESS JSB BPOUT OUTPUT RESIDENT BP CODE JSB DSKEV INSURE EVEN SECTOR ADDRESS STA DSKRR SET MAIN RESIDENT DISK ADDRESS * JSB SYS SET UP THE SYSTEM LOAD PRAMS LDA M177 SET SEARCH MASK STA TYPMS TO PICK UP WHOLE TYPE **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** * DISK LOAD INITIALIZATION * LDA PLST INIT FIXUP LIST STA BFIX FOR FIX STA PFIX AND FIXX SPC 1 CLA STA TBLNK RESET THE LNKX STARTER STA LIBFG SET "NOT LOADING RES LIB" STA KEYCT STA COMAD RESET COMMON RELOC BASE SPC 1 STA PTYPE SET UP TO LOAD TYPE 0 PROGS SPC 1 * SET BOUNDS FOR BASE PAGE LINK SCANNING SPC 1 STA LRBP SHOW NO LINKS IN RESIDENT STA URBP BASE PAGE AREA STA LBBP OR IN BG RESIDENT STA UBBP BASE PAGE AREA SPC 1 LDA FSYBP SET "CURRENT PROGRAM" SCAN AREA STA CUBP TO START AT FIRST LINK ADDR ADA ADBP ...AND SET ADDR OF RTGEN STA ICUBP IMAGE OF THE AREA SPC 1 LDA LWSBP CURRENT PROGS SCAN AREA ENDS AT STA UCUBP SYSTEM COMM AREA SPC 1 LDA CUBPA MARK CURRENT PAGE LINK STA CPL2 AREA EMvPTY STA CPLS SPC 1 * SET RELOCATION ADDRESSES SPC 1 LDA M2000 STA PPREL SYSTEM RELOC BASE = 2000B STA LRMAN SAME FOR LOWER RES BOUND STA URMAN AND,CURRENTLY FOR UPPER RES BND SPC 1 * SET INITIAL DISK ADDRESSES SPC 1 LDA DSKAB FIRST DISK ADDRESS STA DSKAD SET AS CURRENT STA DSKBP AND AS LOC OF BASE PAGE SPC 1 * STORE BASE PAGE ON DISK, JUST TO SAVE SPACE FOR IT SPC 1 LDA M2000 SET PARM AND SAVE STA UBPSY UPPER SYSTEM BP ADDR LDB P2 SET OTHER PARM AND STB LBPSY SAVE LOWER ADDR JSB BPOUT DUMP A BASE PAGE TO DISK SPC 1 * BUMP TO NEXT EVEN SECTOR AND SAVE ADDR SPC 1 JSB DSKEV ALIGN AT EVEN SECTOR STA DSKRR AND SAVE ADDR SYS ON DSK SPC 1 * SET UP LABDO CONTROL WORDS TO ACCESS SYSTEM AREA OF DISK SPC 1 JSB SYS SPC 1 * SET PROGRAM TYPE MASK TO LOOK AT WHOLE * TYPE FIELD WHEN SCANNING THROUGH IDENT LIST SPC 1 LDA M177 LOW SEVEN BITS STA TYPMS SPC 1 * SET BP LINK PARMS TO ALLOCATE TOP-DOWN FROM SYSTEM * COMMUNICATION AREA TO FIRST AVAILABLE LINK SPC 1 CCA STA BPINC SET INC= -1 SPC 1 ADA LWSBP SET FIRST LINK ADDR STA PBREL TO WORD BEFORE COMM AREA SPC 1 LDA FSYBP SET BP LINK ALLOCATION STA BPLMT LIMIT TO LOWEST WORD AVAILABLE SPC 1 LDA M2000 STA BPMAX RESET BP LINK HIGH WATER MARK ****** END DMS CODE ****** XIF SKP * * LOAD SYSTEM LDA P6 LDB MES12 MES12 = ADDR: SYSTEM JSB SETHD PRINT HEADING, INITIALIZE IDX SYLD JSB IDSCN SCAN IDENTS JMP SYEND END OF IDENTS LDB ID3,I GET USAGE FLAG SLB,INB SKIP IF UNUSED JMP SYLD ; IGNORE USED PROGRAM * STB ID3,I SET WORD 3 WITH USAGE FLAG JSB LOAD INITIATE AND LOAD MAIN PROGRAM JSB INCAD UPDATE BP, PROG RELOC ADDR JMP SYLD PROCESS NEXT SYSTEM PROGRAM * SYEND JSB NOTST TEST FOR PROGRAMS LOADED JSB SPACE NEW LINE JSB GENIO SET I/O TABLES LDA TBREL UPDATE THE BASE PAGE STA PBREL AND REPORT STA BPMAX JSB BPLNR THE CURRENT BP USAGE * * SET UP THE KEYWORD AREA * LDA DSKAD GET CURRENT ABSOLUTE DISK ADDR STA DSKEY SAVE DISK ADDR FOR KEYWORDS LDA PPREL GET CURRENT PROGRAM RELOC ADDR STA KEYAD SET CURRENT KEYWORD ADDRESS STA CURAK SET FOR ID SEG GEN TOO ADA KEYCN ADD TOTAL KEYWORD COUNT STA PPREL SET NEW RELOC ADDRESS FOR ID SEG STA SYSAD SET INITIAL ID SEGMENT ADDRESS STA IDSAD SET ADDR OF FIRST ID SEG STA CURAI SET ADDRESS FOR OUTID LDA KEYAD COMPUTE THE KEYWORD ADDRESS ADA LICNT FOR SHORT ADA SICNT BACKGROUND SEGMENT ID SEGMENTS STA SKEYA AND SET IT STA ASKEY ALSO FOR BLANK GENERATION LDB IDSAD SET ADR OF 1ST ID LDA SICNT SEGMENT, THEN BUMP PAST PREFIX IF SZA MEM RESIDENT (SHORT ID), ADB #IREG THEN GET ITS DISC ADDR CLA BY WRITING WORD TO DISC. JSB LABDO * * SET UP ID SEGMENT AREA * LDA B BACK UP TO ID-SEG START (AFTER ADA N1 PREFIX), AND MASK TO POSITION IN AND M77 SECTOR (MOD 640), THEN SAVE STA IDSP FOR BASE PAGE LATER. SPC 1 LDA DSKAD GET CURRENT DISK ADDRESS STA DSKID SET DISK ID ADDRESS STA DSKSY SET INITIAL ID SEGMENT DISK ADDR * * SAVE SPACE FOR ID SEGS,DISK DICT * LDA P22 BANSE LEN OF ID SEG ADA #IREG PLUS OFFSET FOR IREG STORAGE MPY SICNT TIMES # OF SHORT ID'S TELLS * SPACE NEEDED. STA OCTNO SAVE COUNT LDA LICNT GET LONG ID SEGMENT COUNT MPY P28 ADJUST LENGTH FOR LONG ID SEG ADA OCTNO ADD THE SHORT COUNT ADA PPREL ADD THE BASE ADDRESS STA OCTNO SAVE THE ADDRESS ADA N11 COMPUTE THE KEY ADDRESS FOR FIRST STA SIDSA BG SEG. ID SEGMENT AND SAVE LDA SSCNT RESERVE ROOM MPY P9 FOR THE BG SEG. ID SEGS ADA OCTNO COMPUTE NEW MEMORY ADDRESS IFZ ***** BEGIN DMS CODE ***** * LEAVE SPACE FOR MAT AND RESIDENT PROG MAP STA MAT. COMPUTE ADDR OF MAT STA OCTNO AND SAVE... LDA MAXPT MULTIPLY #PARTS BY MPY P6 #WORDS/ENTRY AND INA ADD 1 FOR A LENGTH WORD SPC 1 ADA OCTNO GET NEXT AVAIL MEM ADDR STA MAP. SAVE AS ADDR OF MR MAP ADA P32 ADD LENGTH OF MAP STA MPFT. THEN SAVE START ADDR OF MPFT ADA P5 ADVANCE PAST MPFT ****** END DMS CODE ****** XIF STA ADICT SAVE ADDR OF DISK DICTIONARY ADA DSIZE ADJUST FOR DISC DICT LENGTH ADA DAUXN + AUX DISC LENGTH IFN *** BEGIN NON-DMS CODE *** STA MEM1 SET ADDRESS OF FIRST FREE MEMORY AREA JSB CHBND CHANGE DEF MES52 ' LIB ADDRS' DEF LWASM THE SKY IS THE LIMIT, BUT.... STA MEM2 SAVE THE UPPER ADDRESS OF FREE AREA **** END NON-DMS CODE **** XIF STA PPREL SAVE NEW MAIN RELOCATION ADDRESS STA LBCAD SAVE LIBRARY CODE ADDRESS CCB RESERVE ALL THE SPACE SO FAR ADB A BY SENDING THE LAST WORD CLA JSB LABDO OUTPUT ZEROS CCA SET LIB FLAG TO SHOW LIB LOADING STA LIBFG SO ONLY TYPE 6 PROGRAMS WILL LOAD  JSB CLRT6 GO CLEAR LOAD FLAGS FOR TYPE 6 PGMS * * LOAD LIBRARY * LDA P14 SET TO GET RESIDENT LIB. ROUTINES STA PTYPE JSB CLID3 CLEAR LOAD FLAGS FOR AND TYPE 7'S LDA P7 LDB MES13 MES13 = ADDR: LIBRARY JSB SETHD PRINT HEADING, INITIALIZE IDX LDLB JSB IDSCN SCAN IDENTS JMP LBEND END OF IDENTS LDB ID3,I GET USAGE FLAG SLB,INB SKIP IF UNUSED LIBRARY ROUTINE JMP LDLB IGNORE USED PROGRAM * LDA P14 IF THIS IS A FOURCE LOAD CPA PTYPE THEN STB ID3,I SET THE LOADED FLAG JSB LOAD INITIATE AND LOAD MAIN PROGRAM JSB INCAD UPDATE BP, PROG RELOC ADDR JMP LDLB PROCESS NEXT LIBRARY PROGRAM IFN *** BEGIN NON-DMS CODE *** LBEND LDA PTYPE WAS LIB LOAD FOR CPA P4 BACKGROUND RES? JMP COMTS YES; DONE * LDB P4 SET UP FOR NEXT SCAN CPA P14 IF CURRENT WAS FOURCE LOAD CLB,INB DO FG RES ELSE DO BG RES STB PTYPE NO; SET FOR NEXT SCAN LDA M7 RESET SCAN MASK STA TYPMS FOR LEAST BITS ONLY LDA BIDNT RESET IDX STA CIDNT TO START OF LIST JMP LDLB GO CHECK FOR BACKGROUND RES LIB SPC 1 COMTS CLA CLEAR LIB LOAD FLAG STA LIBFG JSB SPACE JSB DEMTL DEMOT UN CALLED TYPE 6 TO TYPE 7 JSB NOTST TEST FOR PROGRAMS LOADED JSB SPACE NEW LINE LDA PPREL GET CURRENT PROG RELOCATION BASE STA RTCAD SAVE RT LOAD ADDRESS CMA,INA COMPUTE MAX ALLOWABLE ANSWER ADA LWASM AND STA ID1 SET FOR CALL LDA COMRT GET CURRENT COMMON SIZE JSB CHBND CHANGE COMMON SIZE? DEF MES53 MESSAGE ADDRESS DEF ID1 UPPER LIMIT STA COMRT SET NEW COMMON SIZE SZA,RSS SKIP IF NON-ZERO JMP COMRZ \ IGNORE ZERO COMMON * * PUT OUT HALTS FOR RT COMMON * LDA PPREL GET CURRENT PROG RELOC ADDR STA RELAD SET CURRENT RELOCATION ADDRESS LDB MES14+1 GET MESSAGE ADDRESS JSB CONVD CONVERT TO DECIMAL IN MESSAGE LDA P16 LDB MES14 MES14 = ADDR: RT COM JSB DRKEY,I PRINT LISTING JSB SPACE NEW LINE LDB COMRT GET RT COM LENGTH CMB,INB STB TCNT SET RT COM LENGTH LDB PPREL GET THE ADDRESS OF COMMON FGCOM LDA HLT0 GET HALT CODE FOR RT COM JSB LABDO OUTPUT HALT CODE FOR COMMON ISZ TCNT SKIP - RT COM FILLED WITH HALTS JMP FGCOM CONTINUE FILLING RT COMMON * STB PPREL SET NEW CORE ADDRESS COMRZ CLA,INA STA PTYPE SET PROGRAM TYPE = RT RESIDENT LDA PPREL GET RT RESIDENT BOUND STA MEM3 SAVE LOWER BOUND OF FREE AREA JSB CHBND CHANGE IT? DEF MES54 DEF LWASM ADDRESS OF UPPER LIMIT STA MEM4 SAVE UPPER LIMIT OF FREE AREA STA PPREL SET NEW ADDRESS LDA BFIX CLEAR THE FIX UP LIST STA PFIX UNDEFINES ARE LOST HERE * LDA FGBGC DO FG PROGRAMS REFER SZA,RSS TO BG COMMON? JMP RRLDD NO- SKIP QUESTION * LDA PPREL YES ASK FOR THE BG JSB CHBND BOUNDRY DEF MES56 NOW SO WE DEF LWASM KNOW WHERE COMMON STA BGBND IS. **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** LBEND LDA P1 DID WE FINISH LOADING LIB FOR CPA PTYPE RESIDENT?? JMP COMTS YES, CONTINUE...... STA PTYPE NO, SET UP LDA M7 THE SCAN STA TYPMS MASK LDA BIDNT AND RESET STA CIDNT THE LST POINTERS JMP LDLB AND RESTART SPC 1 COMTS EQU * JSB NOTST PRINT "NONE" IF NO LIB JSB SPACE  SKIP A LINE SPC 1 * * LOAD SUBSYSTEM GLOBAL MODULES * SPC 1 SSGA1 JSB SPACE LDA M177 SET TYPE MASK FOR IDSCN STA TYPMS TO LOOK AT WHOLE TYPE LDA P30 SET TO SCAN FOR TYPE O/ STA PTYPE MODULES (SSGA MODULES) LDA MS31L PASS MSG LNTH LDB MS31. AND ADDRESS JSB SETHD TO HEADER ROUTINE SPC 1 LDA PPREL STA SSGA. SET START ADDR OF SSGA SPC 1 * FIND SSGA MODULES AND LOAD * (NOTE THAT WE ARE STILL LOADING AS IF LOADING THE * LIBRARY.....LINKS ARE STILL DESCENDING IN BASE PAGE) SPC 1 SSGA2 JSB IDSCN FIND NEXT TYPE 30 JMP SSGA3 (NO MORE,EXIT) LDA ID3,I PICK UP USE FLAG IOR P1 SET LOADED BIT STA ID3,I AND RESTORE JSB LOAD LOAD THE MODULE JSB INCAD UPDATE RELOC BASES JMP SSGA2 THEN GO FIND NEXT MODULE SPC 1 MS31. DEF *+1 MS31 ASC 12,SUBSYSTEM GLOBAL MODULES MS31L EQU P24 SPC 1 SSGA3 EQU * SPC 1 * CLEAN UP AFTER LOADING LIBRARY AND SSGA MODULES SPC 1 CCA GET LAST WORD ADDR ADA SSGA. OF SYSTEM LSR 10 AND ISOLATE AND M77 PAGE NUMBER. STA LPSYS SAVE LAST PAGE ADDR OF SYSTEM SPC 1 CLA CLEAR THE STA LIBFG "LIBRARY LOADING" FLAG LDA PBREL SET THE ADDRESS INA OF THE LOWEST STA LOLNK LINK USED BY THE SYSTEM SPC 1 JSB DEMTL DEMOTE UNCALLED TYPE 6 TO 7 JSB NOTST ANY PROGS LOADED?? JSB SPACE SKIP A LINE SPC 1 * SET UP COMMON AREAS....START WITH REAL TIME SPC 1 LDA PPREL COMPUTE MAX SIZE FOR STA RTCAD RT COM BY SUBTRACTING CMA,INA CURRENT LOCATION FROM ADA LWASM LAST AVAILABLE STA ID1 SAVE AS A LIMIT SPC 1 LDA COMRT ASK IF HE WANTS TO CMA JSB CHBND CHANGE DEF MES53 SIZE (DECIMAL) DEF ID1 AND THEN STA COMRT STORE NEW SIZE SPC 1 LDA RTCAD LOAD START ADDR OF RT COM LDB MES14+1 JSB CONVD STUFF IN MESSAGE LDA P16 LDB MES14 JSB DRKEY,I AND PRINT IT JSB SPACE SPC 1 * NOW ASK ABOUT BG COMMON SPC 1 LDA COMRT SAVE BASE OF RT COMMON ADA PPREL AND STA BGBND COMPUTE AND CMA,INA SAVE MAX ADA LWASM ALLOWABLE STA ID1 COMMON SIZE SPC 1 LDA COMBG DISPLAY REQUIRED CMA JSB CHBND SIZE OF COMMON DEF MES57 AND ASK (IN DECIMAL) DEF ID1 TO CHANGE STA COMBG SPC 1 LDA BGBND LOAD START ADDR OF BG COMMON LDB MES18+1 JSB CONVD STUFF IN MESSAGE LDA P16 LDB MES18 AND DISPLAY JSB DRKEY,I JSB SPACE SPC 1 * NOW ASK ABOUT ALIGNING LWA OF BG COMMON SPC 1 LDA BGBND ADA COMBG ADA N1 GET LWA COMMON LDB MSBGX POINT TO MESSAGE JSB ALIGN AND ASK FOR CHANGE DEF MSBG LDB A SAVE NEXT ADDR AFTER COMMON INB AS FIRST ADDRESS IN MEM RES STB FWMRP PROGRAM AREA. LSR 10 THEN SHIFT TO GET LAST PAGE AND M37 CONTAINING COMMON AND SAVE STA LPCOM FOR LATER SPC 1 * IF MEM RES BOUND WAS CHANGED, EXTRA WORDS ARE * ADDED TO THE BG COMMON AREA SPC 1 LDA FWMRP LDB BGBND ADD ANY EXTRA WORDS CMB,INB INTO THE ADA B BACKGROUND STA COMBG COMMON AREA SPC 1 * WRITE HALTS ON DISK FROM (RTCAD) THRU (FWMRP-1) SPC 1 LDA COMRT ADA COMBG GET TOTAL COMMON SIZE SZA,RSS JMP CO@MEX JUMP OUT IF NO COMMON SPC 1 CMA,INA STA TCNT SET LOOP COUNTER TO -LENGTH OF COMMON LDB PPREL WTCOM LDA HLT0 WRITE ONE JSB LABDO HALT AT ISZ TCNT A TIME JMP WTCOM TILL DONE SPC 1 STB PPREL THEN UPDATE RELOC BASE SPC 1 COMEX EQU * SPC 1 * * INITIALIZE FOR MEMORY RESIDENT PROGRAM LOADING * SPC 1 LDA M7 SET IDENT SCAN MASK TO STA TYPMS CHECK PRIMARY BITS ONLY. CLA,INA SET UP TO SCAN FOR STA PTYPE TYPE 1 PROGRAMS LDA BFIX CLEAR FIX-UP LIST...ALL STA PFIX REMAINING UNDEFS ARE LOST. SPC 1 * SET FOR BOTTOM-UP LINK ALLOCATION SPC 1 CLA STA BPMAX RESET HIGHWATERMARK * FOR BP LINK ALLOCATION CLA,INA INDICATE ASCENDING STA BPINC ALLOCATION OF LINKS SPC 1 LDA LOLNK UPPER LIMIT FOR MEM RES LINKS STA BPLMT IS LOW SYSTEM LINK SPC 1 LDA FSYBP AND LOWER LIMIT IS STA PBREL FIRST ALLOWED BY USER SPC 1 * RESET LINK AREA POINTERS * RESET CP LINK AREA POINTERS SPC 1 LDA CUBPA STA CPL2 LAST CP AREA=LAST BP AREA STA CPLS LAST "SAVE" CP AREA=LAST BP AREA ****** END DMS CODE ****** XIF SKP * * LOAD RT RESIDENTS * RRLDD EQU * IFZ ***** BEGIN DMS CODE ***** LDA P16 ****** END DMS CODE ****** XIF IFN *** BEGIN NON-DMS CODE *** LDA P12 **** END NON-DMS CODE **** XIF LDB MES15 MES15 = ADDR: RT RESIDENTS JSB SETHD PRINT HEADING, INITIALIZE IDX RRLD JSB IDSCN SCAN IDENTS JMP RREND END OF IDENTS SEZ,RSS SKIP IF MAIN JMP RRLD IGNORE SUB LDB ID3,I GET USAGE FLAG SLB,INB SKIP - PROGRAM NOT LOADED  JMP RRLD IGNORE LOADED PROGRAM STB ID3,I SET NEW USAGE FLAG JSB LOAD INITIATE AND LOAD MAIN PROGRAM CLA JSB GENID GENERATE ID SEGMENT, KEYWORD IFZ ***** BEGIN DMS CODE ***** CLA NO PARTITION REQMT LDB ID1 POINT TO IDENT JSB IDFIX GO SET MEM PROTECT INDEX ****** END DMS CODE ****** XIF JSB INCAD UPDATE BP, PROG RELOC ADDR JMP RRLD PROCESS NEXT RT RESIDENT * RREND JSB NOTST TEST FOR PROGRAMS LOADED JSB SPACE NEW LINE LDA PPREL GET CURRENT PROG RELOCATION BASE STA URMAN SET UPPER RESIDENT MAIN ADDR IFN *** BEGIN NON-DMS CODE *** STA MEM5 SAVE LOW BOUND OF POTENTIAL FREE AREA **** END NON-DMS CODE **** XIF JSB CCPLK PACK THE CURRENT PAGE LINKAGE AREA JSB BPDSA OUTPUT REMAINDER OF RECORD * * SCAN LST FOR INITIAL ENTRY POINT * LDB D$STR GET ADDRESS OF STRT JSB LSTS SCAN LST FOR IT HLT 0B START NOT FOUND IN LST LDB ADBP GET ADDR FOR JMP,I START ADB P2 ADJUST LDA JMP3I GET JMP 3,I CODE STA B,I SET JMP 3,I IN BP LOCATION INB INCR CURRENT BP ADDRESS LDA LST5,I GET CORE ADDRESS FOR START STA B,I SET ADDR OF START IN BP LOCATION IFZ ***** BEGIN DMS CODE ***** * * DUMP LOW PART OF BASE PAGE TO DISK. DISK RESIDENT PROGRAMS * CAN'T SEE (OR SHARE) ANY WORDS BELOW LOLNK (LOWEST SYSTEM LINK) * ANYHOW, SO THEY ARE NOT NEEDED IN THE GENERATOR ANY LONGER. * WE NEED THE AREA THEY OCCUPY IN THE BASE PAGE IMAGE FOR THE * DISK PROGRAM LINKS. * SPC 1 LDA DSKAD STA TEMP4 SAVE THE CURRENT DISK ADDR LDA DSKBP STA DSKAD BACK UP DISK TO START OF * SYSTEM BASE PAGE SPC 1 LDB P2 START AT LOW ADDRESS LDA LOLNВK AND CONTINUE UP TO SYS LNKS JSB BPOUT AND WRITE WHAT WE'VE GOT SPC 1 LDA TEMP4 RESTORE THE PREVIOUS DISK STA DSKAD ADDRESS. SPC 1 * INITIALIZE FOR REAL TIME DISK RESIDENT LOADING SPC 1 CLA STA MAXRP STA MAXRB LDA P2 STA PTYPE SET TO FIND TYPE 1 PROGS SPC 1 LDA LOLNK SET LOW SYS OR LIB OR SSGA LNK STA LRBP AS LOWEST RES LINK ADA ADBP AND SAVE ITS IMAGE ADDR STA IRBP LDA LWSBP SET LAST LINK BEFORE COMM AREA STA URBP (+1) AS LAST RES LINK SPC 1 * SET BPLINK SCAN AREA FOR CURRENT PROGRAM AND BOUNDS * FOR BP LINK ALLOCATION. NOTE THAT THAT BP LINK ALLOCATION * REMAINS SET IN THE "UPWARD" DIRECTION FROM MEM RESIDENT * LOADING, AND LIMIT IS STILL LOLNK. SPC 1 LDA P2 SET LOWEST DISK LINK STA PBREL STARTING AT 2 STA CUBP ADA ADBP AND SAVE ITS IMAGE STA ICUBP ADDRESS. LDA LOLNK SET UPPER DISK LINK AS STA UCUBP BELOW SYS,LIB, AND SSGA LNKS * CLEAR BASE PAGE IMAGE OF MEMORY RESIDENT PROGRAM LINKS SPC 1 LDA PBREL START CLEAR AT 2 LDB LOLNK AND END 1 BEFORE LOW SYS LINK JSB CLRLT AND GO DO IT SPC 1 * RESET CP LINK AREA POINTERS TO "EMPTY" SPC 1 LDA CUBPA STA CPL2 LAST CP AREA=LAST BP AREA STA CPLS LAST "SAVE" CP AREA=LAST BP AREA SPC 1 * UPDATE "LAST WORD OF MEMORY" ADDR - DON'T NEED TO LEAVE ROOM * FOR THE 64 WORD BOOT IN A DISK PARTITION SPC 1 LDA LWASM TAKE CURRENT LAST WORD ADA P64 ADD BOOT SIZE ADA D128 INCLUDE DR BOOT TOO! STA LWASM AND RESTORE ****** END DMS CODE ****** XIF IFN *** BEGIN NON-DMS CODE *** CLA STA MAXRP CLEAR MAX RT DISK RES PROG LGTH STA MAXRB CLEAR MAX RT DISK RES BP LENGTH ISZ PTYPE SET PROGRAM TYPE = RT DISK RES LDA CUBP SET UP THE STA LRBP BP AREA POINTERS ADA ADBP ADD THE DUMMY BASE PAGE ADDRESS STA IRBP AND SET THE BASE DUMMY ADDRESS LDA TBREL NOW THE NEW STA CUBP USER AREA STA URBP SET THE TOP OF THE RES. AREA ADA ADBP (ALL THE REST) STA ICUBP * LDA MEM5 GET THE CURRENT DR AREA ADDRESS JSB CHBND ASK IF IT'S TO BE CHANGED DEF MES55 DEF LWASM STA MEM6 SAVE THE UPPER FREE AREA LIMIT STA PPREL AND THE CURRENT ADDRESS JSB CCPLK PACK THE CP LINK AREA LDA CPL2 SAVE LAST ADDRESS STA CPLS OF CP IMAGE **** END NON-DMS CODE **** XIF SKP * * LOAD RT DISK RESIDENTS LDA P17 LDB MES16 MES16 = ADDR: RT DISK RESIDENTS JSB SETHD PRINT HEADINGS, INITIALIZE IDX RDLD JSB DSKEV START DISK RESIDENTS ON EVEN SECTOR LDA BFIX KILL ANY LEFT OVER STA PFIX FIX UP ENTRYS JSB IDSCN SCAN IDENTS JMP RDEND END OF IDENTS SEZ,RSS SKIP IF MAIN JMP RDLD IGNORE SUBS LDB ID3,I GET USAGE FLAG SLB,INB SKIP - PROGRAM NOT LOADED JMP RDLD IGNORE LOADED PROGRAM STB ID3,I SET NEW USAGE FLAG IFZ ***** BEGIN DMS CODE ***** * SAVE IDENT POINTER AND SET RELOC BASE DEPENDING * ON USE OF COMMON OR SSGA. LDA ID1 SAVE IDENT PNTR STA IDSAV JSB SETRB SET RELOC BASE ****** END DMS CODE ****** XIF JSB USERS SET UP TO OUTPUT USER CODE JSB LOAD INITIATE AND LOAD MAIN PROGRAM LDA CPLS BACK UP THE CP LINK STA CPL2 BOTTOM JSB SYS RESET TO OUTPUT SYSTEM CODE CCA JSB GENID GENERATE ID SEGMENT, KEYWORD IFN *** BEGIN NON-DMS CODE *** HTRNLDA PPREL GET PROG RELOC ADDR CMA,INA ADA TPREL SET A = PROG LENGTH LDB MAXRP GET PREVIOUS MAX PROG LENGTH CMB,INB ADB A SET B = PROG LENGTH - MAX LENGTH SSB,RSS SKIP IF NO NEW MAXIMUM STA MAXRP SET NEW MAX PROG LENGTH LDA PBREL GET BP RELOC ADDR CMA,INA ADA TBREL SET A = BP LENGTH LDB MAXRB GET PREVIOUS MAX BP LENGTH CMB,INB ADB A SET B = BP LENGTH - MAX LENGTH SSB,RSS SKIP IF NO NEW MAXIMUM STA MAXRB SET NEW MAX BP LENGTH **** END NON-DMS CODE **** XIF JSB BPDSA OUTPUT REMAINING OF ABS REC LDA TBREL GET UPPER BP ADDRESS LDB PBREL GET LOWER BP ADDRESS JSB BPOUT OUTPUT BP SECTION LDA PBREL GET LOWER RT DISK RES BP ADDR LDB TBREL GET UPPER BOUND BP ADDRESS JSB CLRLT CLEAR LOCAL BP LINKS IFZ ***** BEGIN DMS CODE ***** * PRINT PAGE REQUIREMENTS FOR RTE-III PROGRAMS * ALSO SET NEW FIELDS (WORD 22) IN ID-SEG. LDA TPREL PASS START LOC LDB PPREL AND END LOC + 1 JSB PGREQ TO PAGE REQ ROUTINE * (RETURNS A=#PAGES) LDB IDSAV POINT TO IDENT TOO JSB IDFIX AND FIX WORD 22 IN IDSEG ****** END DMS CODE ****** XIF JMP RDLD PROCESS NEXT RT DISK RESIDENT * * TEMP4 BSS 1 RDEND EQU * JSB NOTST PRINT "NONE" IF NO RT DR'S JSB SPACE IFN *** BEGIN NON-DMS CODE *** LDA BPMAX GET CURRENT BP ADDRESS JSB CHBND ASK FOR NEW ONE DEF MS02 DEF LWSBP UPPER LIMIT = 1647 STA SYBAD SET NEW BP ADDRESS T STA BPMAX AND NEW UPPER LIMIT ADA N1 SET THE LAST LINK ADDRESS STA URBP1 FOR FORGROUND * LDB FGBGC CHECK IF WE ALREADY LDA BGBND HAVE THE BACKGROUND BOUNDRY SZB,RSS LDA LWASM NO THE SKY IS THE LIMIT STA ID1 SET UPPER LIMIT OF SYS MEMORY * LDA PPREL GET PROG RELOC ADDRESS ADA MAXRP ADD MAX. DR PROG. LENGTH JSB CHBND ASK IF WE ARE TO CHANGE IT DEF MES60 DEF ID1 STA SYMAD SET SYSTEM AVAIL MEM ADDRESS STA MEM7 SET LOWER BOUND OF FREE MEM. * LDA BGBND GET CURRENT BG BOUND IN CASE LDB FGBGC DO WE HAVE ONE? SZB JMP BGSET YES GO SET IT UP * LDA MEM7 GET LOWER BOUND OF FREE AREA JSB CHBND ASK FOR NEW ONE DEF MES56 DEF LWASM SKY IS THE LIMIT BGSET STA MEM8 SAVE THE UPPER LIMIT OF THE FREE AREA STA BGBND SET THE BACKGROUND BOUNDRY STA RELAD AND THE RELOCATION ADDRESS STA LBMAN AND A FEW STA PPREL MORE GOODIES CMA,INA COMPUTE ADA LWASM THE MAX COMMON STA ID1 SIZE AND SAVE IT SKP * * GET BG BOUNDARY * LDA DSKAD GET DISK ADDRESS STA DSKBG SAVE ADDRESS OF BG CODE LDA SYBAD GET CURRENT BG BP ADDRESS STA PBREL SET BP RELOCATION ADDRESS STA LBBP SET LOW BG BP ADDRESS STA UBBP SET UPPER BASE PAGE TO SAME STA TBREL SET RELOCATION BASE STA CUBP ALSO SET UP CURRENT BASE PAGE ADA ADBP COMPUT IMAGE ADDRESS STA IBBP SET IMAGE ADDRESS STA ICUBP FOR BOTH AREAS * JSB USERS SET UP THE USERS MAP FOR BG CORE RES LDA COMBG CHECK FOR A LARGER JSB CHBND COMMON FOR DEF MES57 BACKGROUND DEF ID1 STA COMBG SET THE NEW COMMON SIZE SZA,RSS SKIP IF BACKGROUND COMMON JMP RICLR IGNORE ZERO COMMON * * FILL BG COMMON WITH HALTS * LDB MES18+1 GET ADDRESS OF MESSAGE JSB CONVD CONVERT TO OCTAL/DECIMAL LDA P16 LDB MES18 GET MESSAGE ADDRESS JSB DRKEY,I PRINT BACKGROUND COMMON LISTING JSB SPACE NEW LINE LDB COMBG GET BG COM LENGTH CMB,INB STB TCNT SET COMMON LENGTH LDB PPREL GET ADDRESS OF BG COMMON BGCOM LDA HLT0 GET HALT CODE JSB LABDO OUTPUT HALT CODE FOR COMMON ISZ TCNT SKIP - BG COM FILLED WITH HALTS JMP BGCOM CONTINUE FILLING BG COMMON * STB PPREL SET NEW ADDRESS RICLR LDA P4 STA PTYPE SET PROGRAM TYPE = BG RESIDENT LDA PPREL GET CURRENT BG RESIDENT ADDRESS STA MEM9 SAVE FOR FREE MEMORY LIST JSB CHBND CHANGE IT? DEF MES58 DEF LWASM STA PPREL SET NEW ADDRESS STA MEM10 AND UPPER BOUND OF FREE AREA SKP * * LOAD BG RESIDENTS LDA P12 LDB MES19 MES19 = ADDR: BG RESIDENTS JSB SETHD PRINT HEADING, INITIALIZE IDX BRLD JSB IDSCN SCAN IDENTS JMP BREND END OF IDENTS SEZ,RSS SKIP IF MAIN JMP BRLD IGNORE SUBS LDB ID3,I GET USAGE FLAG SLB,INB SKIP - PROGRAM NOT LOADED JMP BRLD IGNORE LOADED PROGRAM STB ID3,I SET NEW USAGE FLAG JSB USER SET USER MAP JSB LOAD INITIATE AND LOAD MAIN PROGRAM JSB SYS SET SYSTEM MAP AGAIN JSB INCAD INCR RELOCATION ADDRESSES CLA JSB GENID GENERATE ID SEGMENT, KEYWORD JMP BRLD PROCESS NEXT BG RESIDENT * BREND JSB NOTST TEST FOR PROGRAMS LOADED JSB SPACE NEW LINE JSB BPDSA OUTPUT REMAINDER OF ABS REC LDA CUBPA SET THE LOWER LIMIT TO STA CPLS FLUSH WH#AT WE HAVE PASSED LDA PPREL GET CURRENT PROGRAM RELOC BASE STA UBMAN SAVE UPPER BG MAIN ADDRESS STA MEM11 SAVE THE LOWER BOUND OF THE FREE JSB CHBND AREA AND ASK FOR BG DISC BOUND DEF MES59 DEF LWASM STA MEM12 SAVE THE HIGH BOUND STA PPREL AND THE NEW RELOCATION ADDRESS JSB CCPLK PACK THE CURRENT PAGE AREA LDA TBREL GET CURRENT BP ADDRESS STA UBBP SET UPPER BACKGROUND BP BOUND STA CUBP SET CURRENT BP ADDRESS ADA ADBP AND ITS IMAGE STA ICUBP ADDRESS LDA CPL2 GET THE CP LINK IMAGE STA CPLS ADDRESS AND SAVE IT STA CPLSB ALSO FOR AFTER SEGMENTS **** END NON-DMS CODE **** XIF ***** BEGIN DMS CODE ***** IFZ LDA CUBPA RESET POINTERS TO STA CPL2 HIGH CP LINK AREA, STA CPLS HIGHEST AREA TO BE SAVED IN PACK, STA CPLSB AND CPLS FOR B.S. LOADING. XIF ****** END DMS CODE ****** SKP * * LOAD BG DISK RESIDENTS LDA P3 SET PROGRAM TYPE AS STA PTYPE BG DISK RESIDENT LDA P17 LDB MES20 MES20 = ADDR: BG DISK RESIDENTS JSB SETHD PRINT HEADING INITIALIZE IDX BDLD JSB DSKEV LOAD DISC RESIDENTS ON EVEN SECTOR LDA BFIX KILL ANY LEFT OVER FIX UPS STA TFIX JSB IDSCN SCAN IDENTS JMP BDEND END OF IDENTS SEZ,RSS SKIP IF MAIN JMP BDLD IGNORE SUBS LDB ID3,I GET USAGE FLAG SLB,INB SKIP - PROGRAM NOT LOADED JMP BDLD IGNORE LOADED PROGRAM STB ID3,I SET NEW USAGE FLAG LDA ID1 GET CURRENT MAIN IDENT ADDRESS STA IDSAV SAVE MAIN IDENT ADDR FOR BS REF IFZ ***** BEGIN DMS CODE ***** JSB SETRB SET UP RELOC BASE ****** END DMS CODE ****** XIF JSB USERS SET UP A NEW USER JSB LOAD INITIATE AND LOAD MAIN PROGRAM JSB SYS RESET TO SYSTEM MAP CCA JSB GENID GENERATE ID SEGMENT, KEYWORD JSB BPDSA OUTPUT REMAINDER OF RECORD LDA DSKAD GET CURRENT DISK ADDRESS STA DSKBS SAVE DISK ADDR OF BP SECTION LDA TBREL GET UPPER BP ADDRESS LDB PBREL GET LOWER BP ADDRESS JSB BPOUT OUTPUT BP SECTION LDA TPREL GET CURRENT PROG RELOC ADDR STA BSPAD SAVE PROG RELOC ADDR FOR BS IFZ ***** BEGIN DMS CODE ***** STA TPMAX SET HWM FOR MAIN ****** END DMS CODE ****** XIF JSB CCPLK PACK THE CP LINK AREA LDA CPL2 UP DATE STA CPLS THE LOW SAVE ADDRESS LDA TBREL GET CURRENT BP RELOC ADDR STA BSBAD SAVE BP RELOC ADDR FOR BS LDA P5 STA PTYPE SET TYPE = BG SEGMENT JSB INIDX INITIALIZE IDX BSLD JSB IDX SET IDENT ADDRESSES JMP BSEND END OF IDENTS LDA ID1 GET CURRENT MAIN IDENT ADDRESS STA IMAIN SAVE MAIN BS IDENT ADDRESS LDA ID6,I GET TYPE SSA,RSS SKIP IF MAIN BG SEGMENT JMP BSLD IGNORE SUBS AND M7 ISOLATE TYPE CPA P5 TYPE = BG SEGMENT? RSS YES - CONTINUE JMP BSLD NO - IGNORE IDENT LDA ID8,I GET BS MAIN IDENT ADDRESS CPA IDSAV BS CALLS THIS BG MAIN? RSS YES - CONTINUE JMP BSLD NO - IGNORE BACKGROUND SEGMENT LDA TIDNT GET NEXT IDENT ADDRESS STA ABSID SAVE ADDR FOR NEXT BG SEG SCAN CCB STB HDFLG SET HEADING FLAG FOR BG SEGMENT JSB DSKEV SET FOR EVEN SECTOR JSB SEGS SET UP A NEW USER AREA LDA BSPAD RESET THE STA ABCOR,I BASE CORE ADDRESSES FOR STA MXABC,I A SEGMENT LOAD JSB LOADS LOAD BG SEGMENT LDA CPLS RESET THE CP LINK STA CPL2 BOTTOM JSB SYS RESET TOF@ SYSTEM MAP JSB SPACE NEW LINE CCA JSB GNSID GENERATE ID SEGMENT, KEYWORD JSB BPDSA OUTPUT REMAINING OF ABS REC IFZ ***** BEGIN DMS CODE ***** LDB TPREL SUBTRACT SEG'S HIGH ADDR LDA B FROM PREV MAX CMA,INA HIGH ADDR ADA TPMAX SSA IF NEW IS HIGHER STB TPMAX THEN STORE AS MAX ****** END DMS CODE ****** XIF LDA TBREL GET UPPER BP ADDRESS LDB BSBAD GET LOWER BS BP ADDRESS JSB BPOUT OUTPUT BP SECTION LDA BSBAD GET BS BP RELOC ADDR LDB TBREL GET UPPER BOUND BP ADDRESS JSB CLRLT CLEAR BP LINKAGES LDA BSBAD GET BS BP RELOC ADDRESS STA TBREL SET BP RELOC ADDR LDA BSPAD GET BS PROG RELOC ADDRESS STA TPREL SET PROG RELOC ADDR LDA ABSID GET NEXT BG SEG IDENT ADDR STA TIDNT SET IDENT ADDRESS FOR IDX JMP BSLD LOAD NEXT BG SEGMENT * BSEND EQU * IFZ ***** BEGIN DMS CODE ***** * PRINT PAGE REQMT, FIX ID SEGMENT LDA TPMAX PASS MAX HIGH ADDR LDB PPREL AND LOW ADDR, THEN JSB PGREQ PRINT PAGES AND SET A-REG LDB IDSAV PASS PAGE REQMT & IDENT JSB IDFIX ADDR THEN FIX iD SEG. ****** END DMS CODE ****** XIF LDA DSKAD GET CURRENT DISK ADDRESS STA DSKBR SAVE CURRENT DISK ADDR OF ABS LDA DSKBS GET DISK ADDR FOR MAIN BP CODE STA DSKAD SET CURRENT BP CODE ADDRESS LDA BSBAD GET UPPER ADDR OF BP CODE LDB PBREL GET LOW ADDR FOR BP CODE JSB BPOUT OUTPUT BP CODE FOR MAIN DISK RES LDA DSKBR GET CURRENT DISK ADDRESS STA DSKAD SET CURRENT ABS DISK ADDRESS LDA PBREL GET LOW BP ADDRESS LDB BSBAD GET UPPER BOUND BP CODE JSB CLRLT CLEAR BP LINKAGES * LDA P3 STA PTYPE SET PROG TYPE = BG DISK RESIDENT JSB CLID3 CL\EAR PROGS-LOADED FLAGS LDA IDSAV GET MAIN IDENT ADDRESS STA TIDNT SET CURRENT IDENT ADDRESS LDA CPLSB RESET THE LOW SAVE ADDRESS STA CPLS RESET FOR BG MAIN STA CPL2 PROGRAMS JMP BDLD LOAD NEXT BG DISK RESIDENT * BDEND JSB NOTST TEST FOR PROGRAMS LOADED JSB SPACE NEW LINE IFN *** BEGIN NON-DMS CODE *** SKP **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** HED RTE-III GENERATOR - DEFINE PARTITIONS SPC 1 ******************************************************************** * RTE-III - FINISH UP AFTER LOADING ALL PROGRAMS * ******************************************************************** SPC 1 * HALT TO GIVE OPERATOR A CHANCE TO CHANGE INPUT DEVICE (SWR) SPC 1 JSB HLT77 SPC 1 * SET SO RESTARTS COME HERE SPC 1 LDA APART STUFF ADDR OF PARTS STA TRANS IN RESTART VECTOR SPC 1 PARTS EQU * CLA CLEAR THE ERROR FLAG STA ERROR SPC 1 * * LIST PARTITION REQUIREMENTS FOR RT & BG * DISC RESIDENTS * SPC 1 LDA M7 SET IDSCN MASK TO LOOK STA TYPMS AT PRIMARY TYPE ONLY. LDA P2 SET IDSCN TYPE TO STA PTYPE REAL TIME DISC RESIDENTS LDA "RT" STUFF 'RT' IN STA MSQ1 MESSAGE. SPC 1 PQLP1 LDB MSQ1. SENT EITHER RT OR BG LDA MSQ1L PARTITION REQMT JSB DRKEY,I MESSAGE. SPC 1 CLA SET FLAG FOR NO PROGRAMS STA PQFLG OF TYPE FOUND. LDA BIDNT REINIT IDENT PTRS STA CIDNT FOR IDSCN. PQLP2 JSB IDSCN FIND PROG MATCHING PTYPE JMP PQDON (NO MORE) ISZ PQFLG INCR FLAG - AT LEAST ONE PROG LDA ID8,I PICK UP PAGE REQMT RRR 8 AND ISOLATE AND M37 IT. CMA GET -(PAGES +1) 4 LDB MSQ2X AND STUFF JSB CONVD DECIMAL EQUIV IN MSG SPC 1 LDA BLNKS PUT BLANKS STA MSQ2 LDA ID1,I THEN PROGRAM NAME STA MSQ2+1 LDA ID2,I IN MESSAGE... STA MSQ2+2 LDA ID3,I AND M7400 IOR P32 STA MSQ2+3 SPC 1 LDA MSQ2L LDB MSQ2. JSB DRKEY,I SEND THE MESSAGE JMP PQLP2 THEN LOOK FOR MORE PROGS SPC 1 PQDON LDA PQFLG ANY PROGRAMS FOUND? SZA IF AT LEAST ONE JMP PQSOM THEN JUMP. LDA P6 ELSE PRINT LDB MES22 "(NONE)". JSB DRKEY,I SPC 1 PQSOM JSB SPACE SKIP A LINE LDA P3 DID WE ALREADY LOOK CPA PTYPE FOR BG'S? JMP PQEND YES, DONE STA PTYPE NO, STUFF LDA "BG"2 'BG' IN HEADER STA MSQ1 MESSAGE AND JMP PQLP1 CONTINUE. SPC 2 PQFLG BSS 1 SPC 1 MSQ1. DEF *+1 MSQ1 ASC 10,XX PARTITION REQMTS: MSQ1L EQU P20 SPC 1 MSQ2. DEF *+1 MSQ2 ASC 8, NNNNN XX PAGES MSQ2L EQU P16 MSQ2X DEF MSQ2+2 SPC 1 MSQ3. DEF *+1 ASC 15,LARGEST ADDRESSABLE PARTITION: MSQ3L EQU P30 SPC 1 MSQ4. DEF *+1 MSQ4 ASC 4,W/ COM SPC 1 "O" ASC 1,O SPC 1 PQADD NOP *PRINT LARGEST PART MESSAGE* STB MSQ4+1 MAKE MESSAGE W/COM OR LDB MSQ2X W/O COM, THEN PUT SIZE ADA N32 JSB CONVD IN MESSAGE LDA MSQ4. LDB MSQ2. STUFF IN MSG JSB MOVW HEAD,OVERLAYING HIGH-ORDER DEC -4 ZEROS OF PAGE SIZE. LDB MSQ2. LDA MSQ2L JSB DRKEY,I PRINT MESSAGE JMP PQADD,I SPC 1 PQEND EQU * * * LIST LARGEST ADDRESSABLE PART SIZES * SPC 1 LDA MSQ3L LDB MSQ3. PRINT HEADER JSB DRKEY,I LDB "O" PASS AN O (FOR W/O) LDA LPSYS AND LAST SYS PAGE ; JSB PQADD AND PRINT MSG (MAX W/O COM) SPC 1 CCA ADA FWMRP CALCULATE LAST PAGE LSR 10 CONTAINING COMMON AND M77 AND PASS IN A. LDB BLNKS PASS BLANKS IN B. JSB PQADD AND PRINT (MAX W/ COM) JSB SPACE SPC 1 * ASK IF WE SHOULD ALIGN M.R.P UPPER BOUND (S.A.M. LOWER * BOUND). THEN GET FIRST DISK PARTITION PAGE (S.A.M. * UPPER BOUND). SPC 1 CCA ADA URMAN A=LWA MEM RES PROGS LDB MSMRX POINT TO MESSAGE JSB ALIGN ASK IF WE SHOULD ALIGN DEF MSMR (MSG POINTER) INA A=FWA S.A.M. STA FWSAM SAVE ADDR LSR 10 AND THEN AND M77 GET PAGE # STA FPSAM AND SAVE THAT..... SPC 1 LDA LPSYS GET LAST SYS PAGE LDB MAPFG (OR LAST COMMON PAGE IF SZB SYSTEM IS TO MAP THE LDA LPCOM COMMON AREA). CPA FPSAM DOES SYS SHARE A PAGE WITH SAM?? ADA N1 YES, REDUCE COUNT CMA,INA COMPUTE MAX PAGE # ALLOWABLE ADA P31 FOR SAM UPPER BND (PAGE AFTER) ADA FPSAM MAX=31-SYSLASTPAGE+1STPAGESAM STA FPDSK AND SAVE AS 1ST DISK PAGE SPC 1 LDB NUMPG IF MORE PAGES ADDRESSABLE THAN CMA,INA REALLY AVAILABLE, ADA NUMPG BETTER SET S.A.M LIMIT SSA TO LAST REAL PAGE. STB FPDSK SPC 1 LDB FPSAM PASS CURRENT END OF INB SYS AV MEM, AND JSB SAMSZ PRINT CURRENT SAM SIZE. SPC 1 LDA FPSAM PROMPT 1ST SAM PAGE INA PLUS ONE CMA AND ASK FOR FIRST JSB CHBND DISK PAGE DEF MES61 (PASS 1'S COMP FOR DECIMAL) DEF FPDSK STA FPDSK SAVE FOR LATER SPC 1 LDB A PASS 1ST DISK PAGE AS END S.A.M. JSB SAMSZ THEN PRINT FINAL S.A.M SIqZE SPC 1 * DEFINE DISK RESIDENT PROGRAM PARTITIONS SPC 1 * CLEAR M.A.T. FIRST. SET LINK WORDS TO -1 TO * SHOW PARTITIONS UNDEFINED. SPC 1 DPINT JSB SYS MAP SYSTEM AREA ON DISK LDA MAXPT SET LOOP COUNTER TO CMA -(NO. OF PARTS +1) STA DPTMP AND SAVE SPC 1 CLA,INA GET ABS TARGET ADDR JSB DPCNV OF PART 1 DESCRIPTOR LDB A SAVE IN B-REG JMP DPCN2 ENTER LOOP AT BOTTOM SINCE * MAXPT MAY BE XERO SPC 1 DPLP3 CCA SET LINK TO JSB LABDO MINUS 1 DPLP4 CLA THEN SET NEXT JSB LABDO 5 WORDS TO ZERO ISZ DPTM2 JMP DPLP4 DPCN2 LDA N5 REPEAT THE ABOVE STA DPTM2 TILL MAT IS ISZ DPTMP EXHAUSTED JMP DPLP3 SPC 1 * ASK USER TO DEFINE PARTITIONS SPC 1 LDA FPDSK COMPUTE # OF CMA,INA REMAINING ADA NUMPG PAGES. STA DPARE SAVE SIZE OF DISK AREA CMA,INA CONVD NEEDS NEG PARM LDB MXM1 POINT TO SPOT IN MSG JSB CONVD STUFF DECIMAL INTO MSG JSB SPACE SPC 1 LDB MSM1. LDA MLM1 JSB DRKEY,I SEND SIZE LEFT SPC 1 LDA MAXPT SZA,RSS JMP DPTHD IF NO PARTS ALLOWED...DON'T ASK SPC 1 LDB MSM2. LDA MLM2 JSB DRKEY,I SEND INSTRUCTIONS SPC 1 * READ PARTITION DEFINITION AND PARSE SPC 1 DPRD JSB READ2 READ USER LDA N2 INPUT JSB GETNA AND CPA "/E" CONTINUE UNLESS JMP DPEND HE ENTERED /E SPC 1 * GET PARTITION NUMBER SPC 1 JSB GINIT REINITIALIZE PARSE LDA N2 AND ASK FOR JSB GETOC UP TO 2 DECIMAL JMP DPER1 DIGITS (PART #) STA DPNUM SPC 1 CM8A,INA IF PART # IS GREATER ADA MAXPT THAN MAXPT OR=0 SSA,RSS WE HAVE CPA MAXPT AN ERROR JMP DPER1 JSB DPCHK MAKE SURE JMP DPER1 WE HIT A JMP DPER1 COMMA SPC 1 * GET NUMBER OF PAGES FOR PARTITION SPC 1 LDA N4 ASK FOR JSB GETOC FOUR DECIMAL DIGIT JMP DPER2 # OF PAGES ADA N1 REDUCE BY ONE STA DPSIZ AND SAVE. SPC 1 SSA CHECK IF JMP DPER2 BETWEEN CMA,INA 1 AND 1024 ADA M1777 PAGES ENTERED SSA BY USER. JMP DPER2 SPC 1 JSB DPCHK MAKE SURE JMP DPER2 JMP DPER2 WE HIT A COMMA... SPC 1 * GET TYPE: EITHER "RT" OR "BG" SPC 1 LDA N2 JSB GETNA GET 2 CHARS CLB CPA "BG"2 IF BG JMP DPTYP INB ELSE INCREMENT CPA "RT" AND IF RT JMP DPTYP THE JUMP JMP DPER3 OTHERWISE ERROR. SPC 1 DPTYP STB DPTY CCA SET RESERVED FLG=-1 STA DPRSV IN CASE THAT PARM IS OMITTED SPC 1 JSB DPCHK CHECK DELIMITER JMP DPER3 ERROR IF NOT COMMA OR EOR JMP DPSTO GO BUILD MAT ENTRY IF EOR * ELSE CONTINUE ON COMMA SPC 1 * GET RESERVED FLAG SPC 1 LDA P1 READ ONE JSB GETNA CHARACTER CPA "R" IF AN R ISZ DPRSV THEN SET FLG AND SKIP JMP DPER4 ELSE ERROR SPC 1 JSB DPCHK CHECK DELIMITER JMP DPER4 ANY BUT "," OR EOR BAD JMP DPSTO EOR OK JMP DPER4 COMMA BAD SPC 1 * BUILD MAT ENTRY - THINGS AREA A LITTLE CONFUSING SINCE * THE M.A.T. IS ALREADY ON DISK AS PART OF THE SYSTEM AREA SPC 1 DPSTO LDA DPNUM CONVERT PART # JSB DPCNV TO COPRE ADDR LDB A CLA JSB LABDO CLEAR LINK WORD ADB P3 POINT TO PART SIZE, RSV FLAG SPC 1 LDA DPRSV GET RESERVED FLAG INA IF SET (0) THEN RAR SET BIT 15 IN MAT WORD IOR DPSIZ MERGE IN PART SIZE SPC 1 JSB LABDO WRITE MAT WORD 4 LDA DPTY PICK UP TYPE BIT RAR MAKE IT SIGN BIT * (1=RT,0=BG) JSB LABDO WRITE WORD 5 SPC 1 * GO GET NEXT PARTITION DEFINITION SPC 1 JMP DPRD SKP * ALL PARTS DESCRIBED, CHECK FOR USE OF ALL CORE AND SORT * INTO RT AND BG FREE LISTS SPC 1 DPEND CLA STA DPTOT INIT PAGE COUNT LDA MAXPT SET UP A COUNTER CMA,INA FOR NUMBER OF STA DPTMP MAT ENTRIES SPC 1 * LOOK AT ALL PARTITION LENGTHS AND INSURE TOTAL IS OK SPC 1 CLA,INA GET ADDR JSB DPCNV OF LDB A PART 1'S DESCRIPTOR DPLP1 JSB DPRW READ LINK WORD ADB P3 POINT TO LENGTH WORD SSA LINK <0?? JMP DPCN1 YES, UNDEFINED JSB DPRW READ LENGTH-1 AND M1777 ISOLATE IT AND GET INA TRUE VALUE ADA DPTOT ADD TO TOTAL STA DPTOT AND UPDATE SPC 1 ADB N1 DPCN1 ADB P2 POINT TO NEXT LINK ISZ DPTMP AND CONTINUE JMP DPLP1 TILL DONE SPC 1 LDA DPARE GET SIZE OF DISK AREA CPA DPTOT COMPARE WITH SUM OF PARTS JMP DPTHD EQUAL, CONTINUE SPC 1 * ERROR - PARTITIONS DON'T TOTAL TO SIZE OF AVAIL AREA SPC 1 LDA ERR53 JSB ERROR SEND ERR 54 MESSAGE JMP DPINT AND START WHOLE PARTITION * THING OVER AGAIN SKP * THREAD MAT INTO TWO LISTS: BG FREE LIST, AND RT FREE LIST SPC 1 DPTHD CLA INITIALIZE STA DPRTL TWO STA DPBGL FREE LISTS SPC 1 LDA MAXPT SAVE CMA -MAX PT -1 STA DPTMP AS LOOP COUNTER LDA FPDSK STA DPORG SET FIRST PAGE TO GIVE AWAY CLA,INA JSB DPCNV A=ABS ADDR OF MAT#1 STA DPTM2 SAVE IT JMP DPEN3 ENTER LOOP AT BOTTOM SPC 1 * BEGIN MAIN LOOP: INSERT PART DESCRIPTORS INTO LISTS * AND SET PARTITION START ADDRS INTO DESCRIPTORS SPC 1 DPLP2 LDB DPTM2 GET ABS ADDR OF NEXT MAT ENTRY JSB DPRW READ LINK SSA IF UNDEFINED PART THEN JMP DPEN2 DON'T LINK IT. ADB P2 ELSE POINT TO PAGE ADDR * FIELD IN MAT ENTRY. JSB LABDO READ AND DESTROY FIELD IOR DPORG OR-IN START PAGE ADB N1 BACK UP LABDO TO SAME WORD JSB LABDO AND REWRITE THE FIELD SPC 1 JSB DPRW NOW GET LENGTH OF PART AND M1777 ISOLATE IT STA DPSIZ SAVE FOR COMPARE IN SORT INA AND MAKE TRUE LENGTH SPC 1 ADA DPORG UPDATE THE STA DPORG PARTITION ORIGIN LOCATION SPC 1 JSB DPRW READ AND RESTORE THE RT FLAG AND MSIGN LEAVE JUST SIGN BIT STA DPRSV AND SAVE. SPC 1 * LINK MAT ENTRY (A-REG CONTAINS RT FLAG) LDB DPBG. LOAD BG LIST HEAD IF SSA BG PARTITION LDB DPRT. ELSE RT LIST HEAD STB DPLH. SAVE ADDR OF LIST HEAD LDB B,I LOAD LIST HEAD CONTENTS SPC 1 * CHASE DOWN FREE LIST TO FIND PLACE TO INSERT ENTRY SPC 1 DPLNK EQU * B CONTAINS POINTER TO FIRST * MAT ENTRY IN LIST, A IGNORED. STB DPCUR SAVE FIRST AS CURRENT CLA STA DPPRV AND ZERO AS PREVIOUS SPC 1 DPLL1 LDB DPCUR IF POINTER IS NULL SZB,RSLS THEN JMP DPLEX WERE DONE ADB P4 ELSE POINT TO LEN OF CURRENT JSB DPRW READ/RESTORE LENGTH AND M1777 AND ISOLATE IT CMA,INA IF INSERTEE SIZE IS ADA DPSIZ LESS THAN CURRENT SSA THEN WERE JMP DPLEX DONE SPC 1 LDB DPCUR ELSE SAVE CUR AS STB DPPRV PREVIOUS AND READ JSB DPRW NEXT LINK STA DPCUR AND SET AS CURRENT JMP DPLL1 THEN LOOP BACK AND CONTINUE SPC 1 * FOUND POSITION TO INSERT - IF DPPRV IS STILL ZERO, * THEN INSERTEE GOES AT TOP OF LIST. DPLEX LDA DPTM2 A POINTS TO INSERTEE LDB DPPRV IS PREVIOUS GUY HEAD?? SZB JMP DPINS NO, INSERT IN LIST STA DPLH.,I YES,JUST MAKE HEAD POINT HERE JMP DPFOR THEN FIX FOW'D PNTR SPC 1 DPINS EQU * GO MAKE MAT(DPPRV) POINT * TO INSERTEE, B POINTS TO * PREVIOUS MAT ENTRY JSB LABDO SPC 1 DPFOR EQU * MAKE INSERTEE POINT TO NEXT MAT * ENTRY. LDA DPCUR WRITE ADDR OF NEXT MAT ENTRY LDB DPTM2 INTO 1ST WORD OF INSERTEE JSB LABDO SPC 1 DPEN2 LDA P6 POINT TO NEXT ADA DPTM2 MAT ENTRY STA DPTM2 DPEN3 ISZ DPTMP CONTINUE UNTIL MAT JMP DPLP2 IS EXHAUSTED SPC 1 * DONE THREADING PARTITION DESCRIPTORS, STORE LENGTH OF * M.A.T. (MAY BE ZERO) ON DISK SPC 1 LDB MAT. POINT TO WORD BEFORE M.A.T. LDA MAXPT AND CRAM IN THE JSB LABDO NO. OF PARTITIONS SPC 1 * SKIP AROUND CONSTANTS AND SUBROUTINES SPC 1 JMP MPSRT SKP * SUBROUTINES, ERROR ROUTINES, VARIABLES, AND CONSTANTS SPC 1 DPER1 LDA ERR44 JMP DPERR DPER2 LDA ERR45 JMP DPERR DPER3 LDA ERR46 JMP DPERR DPER4 TRNLDA ERR47 DPERR JSB ERROR SEND ERROR MESSAGE JMP DPRD GO REREAD ENTRY SPC 1 ERR44 ASC 1,44 ERR45 ASC 1,45 ERR46 ASC 1,46 ERR47 ASC 1,47 SPC 1 * PRINT SIZE OF SYS AV MEM IN DECIMAL WORDS * B-REG CONTAINS PAGE# OF PAGE AFTER S.A.M. SPC 1 SAMSZ NOP LDA FPSAM COMPUTE TOTAL PAGES CMA OF S.A.M. ADA B AND MULTIPLY BY LSL 10 1024, SAVE SWP IN B-REG. SPC 1 LDA FWSAM COMPUTE #WORDS AND M1777 IN 1ST PAGE OF CMA,INA SAM, THEN ADA M2000 ADD TO TOTAL. ADA B CMA,INA PASS -NUMBER OF WORDS LDB MXSM TO GET DECIMAL ASCII JSB CONVD IN MESSAGE. JSB SPACE SPC 1 LDB MSSM. PRINT LDA MLSM THE JSB DRKEY,I MESSAGE. SPC 1 JMP SAMSZ,I SPC 1 MSSM. DEF *+1 ASC 12,SYS AV MEM: XXXXX WORDS MXSM DEF MSSM.+7 MLSM EQU P24 SPC 1 * CHECK NEXT CHAR IN LBUF FOR DELIMITER * * RETURNS: * (N) NOT COMMA OF EOR * (N+1) END-OF-RECORD * (N+2) COMMA SPC 1 DPCHK NOP JSB GETAL GET NEXT CHAR CPA BLANK JMP DPC1 JUMP IF COMMA SZA JMP DPC3 JUMP IF NOT COMMA OR EOR JMP DPC2 JUMP IF EOR DPC1 ISZ DPCHK DPC2 ISZ DPCHK DPC3 JMP DPCHK,I SPC 3 * CONVERT PARTITION NUMBER TO ABS CORE ADDR IN TARGET SYSTEM * * LDA PART# (1 THRU 64) * JSB DPCNV DPCNV NOP ADA N1 MPY P6 GET OFFSET IN M.A.T. ADA MAT. MAKE ABSOLUTE INA ADJUST FOR LENGTH WORD JMP DPCNV,I SPC 3 \T* DPRW - READ AND REWRITE A WORD FROM THE ABSOLUTE SYSTEM * STORED ON THE DISK * * CALL A-IGNORED * B- ABS TARGET SYSTEM ADDR * RETURN: B SET TO B+1 * A=CONTENTS OF DESIRED WORD SPC 1 DPRW NOP JSB LABDO READ AND DESTROY WORD STA DPRWT SAVE IN TEMP ADB N1 BACK UP ADDR JSB LABDO RESTORE WORD LDA DPRWT BACK TO A JMP DPRW,I AND RETURN SPC 1 DPRWT BSS 1 SKP DPTMP BSS 1 DPTM2 BSS 1 "RT" ASC 1,RT "BG"2 ASC 1,BG ("BG", EARLIER, GETS OVERLAYED) DPNUM BSS 1 PART # (1 THRU 64)?????? DPSIZ BSS 1 PART SIZE(1 TO 1024 PAGES) DPTY BSS 1 PART TYPE (BG=0,RT=1) DPRSV BSS 1 PART RSV FLG (-1,NOT RES,0=RES) DPTOT BSS 1 DPARE BSS 1 SIZE OF DISK PART AREA IN PAGES DPORG BSS 1 TEMP USED FOR PART ORIGINS DPBG. DEF DPBGL DPRT. DEF DPRTL DPLH. BSS 1 POINTER TO EITHER LIST HEAD DPCUR BSS 1 USED DURING FREE LIST BUILD DPPRV BSS 1 USED DURING FREE LIST BUILD SPC 3 MSM1 ASC 11,PAGES REMAINING: XXXXX MXM1 DEF MSM1+8 MLM1 EQU P22 MSM1. DEF MSM1 SPC 1 MSM2 ASC 9,DEFINE PARTITIONS MSM2. DEF MSM2 MLM2 EQU P17 SPC 1 ERR53 ASC 1,53 SKP * ALLOW USER TO ALTER THE PROGRAMS PAGE REQUIREMENTS * ONLY INCREASES ARE ALLOWED * * SEND MESSAGE: "MODIFY PROGRAM PAGE REQUIREMENTS?" * * USER RESPONDS WITH: PROGNAME,PARTSIZE * (PARTSIZE INCLUDES BASE PAGE) * * USER TERMINATES WITH: /E * * NOTE: THIS IS DONE BEFORE ASSIGNING PROGRAMS TO * PARTITIONS, SO WE DON'T NEED TO CHECK IF * PROGRAM WILL STILL FIT IN ITS ASSIGNED PARTITION SPC 1 * SEND QUESTION SPC 1 MPSRT JSB SPACE LDA MLM5 LDB MSM5. JSB DRKEY,I SPC 1 * GET PROGRAM NAME, SET UP POINTERS TO IDENT SPC 1 MPLOP JSB APRED USE CODE IN ASSIGN PART. ROUTINE - JMP APSRT JUMP OUT IF /E WAS ENTERED * CONVERT SIZE TO BINARY AND VERIFY SPC 1 LDA N2 GET 2 DECIMAL DIGITS JSB GETOC FROM LBUF AND JUMP JMP MPER1 IF BAD DIGIT ADA N1 SAVE OVERRIDE LESS 1 STA DPSIZ SPC 1 LDB DPID READ LO-MAIN ADB P22 ADDRESS JSB DPRW FROM ID-SEGMENT LSR 10 GET PAGE NUMBER AND M37 AND ISOLATE. ADA DPSIZ GET TOTAL PAGES CMA,INA AND COMPARE TO 32. ADA P32 SSA ERROR IF OVER 32. JMP MPER1 SPC 1 LDA ID8,I GET PAGE REQMT LSR 8 FROM IDENT. POSITION AND M37 AND ISOLATE. CMA,INA SUBTRACT REQMT ADA DPSIZ FROM REQUEST, AND SKIP IF SSA REQMT IS EQUAL OR LESS. JMP MPER1 ERROR IF OVERRIDE IS LESS SPC 1 * OVERRIDE IS VALID, UPDATE SIZE REQMT IN ID-SEGMENT SPC 1 LDB DPID DESTRUCTIVELY READ WORD22 ADB P21 (THE DMS WORD) FROM THE ID- JSB LABDO SEGMENT. RRR 10 AND M7700 THEN MERGE IN NEW IOR DPSIZ PAGE REQUIREMENTS AND RRL 10 BACKUP THE ADDRESS TO ADB N1 WORD 22 AGAIN JSB LABDO AND REWRITE IT JMP MPLOP GO READ NEXT SKP * ALLOW USER TO ASSIGN A PROGRAM TO A PARTITION. * PROGRAMS THUS ASSIGNED WILL RUN IN NO OTHER * PARTITION. * * SEND MESSAGE: "ASSIGN PROGRAM PARTITIONS?" * * USER RESPONDS WITH: PROGNAME,PART# * * USER TERMINATES WITH: /E SPC 1 * SEND QUESTION SPC 1 APSRT JSB SPACE LDA MLM4 LDB MSM4. JSB DRKEY,I SPC 1 * READ RESPONSES (CALL INLINE SUBROUTINE) SPC 1 APLOP JSB APRED JMP APEND END LOOP IF /E WAS ENTERED JMP APCNV ELSE CONTINUE APRED NOP APRD2 JSB READ2 GET RESPONSED. LDA N5 ASK FOR A 5 CHAR NAME,BUT JSB GETNA IF THE 1ST 2 CHARS ARE CPA "/E" /E THEN JMP APRED,I WE ARE DONE JSB DPCHK CHAR AFTER PROGRAM NAME JMP APER1 SHOULD BE A COMMA, OTHERWISE JMP APER1 WE HAVE AN ERROR. SPC 1 * GO LOCATE PROGRAM IN IDENT TABLE * SET UP POINTERS ID1,I THRU ID8,I * PUT ID SEG ADDR IN 'DPID' SPC 1 LDB ATBUF LOCATE IDENT JSB IDXS AND SET POINTERS. JMP APER1 ERROR IF NOT FOUND LDB ID1 POINT TO IDENT JSB IDFND GET ID-SEG ADDR STB DPID AND SAVE. ADB P14 READ PROG TYPE FROM JSB DPRW ID-SEG WORD 15 AND M7 1= BASIC TYPE-IS CPA P2 NOT 2 (RT DISK RES) RSS OR 3 (BG DISK RES) CPA P3 THEN WE DONT MESS RSS AROUND WITH PARTITION JMP APER1 STUFF. ISZ APRED INCREMENT TO NORMAL RETURN POINT JMP APRED,I AND RETURN TO CALLER DPID BSS 1 POINTER TO ID-SEG FOR NAMED PROG SPC 1 * CONVERT PARTITION NUMBER TO BINARY * AND VERIFY SPC 1 APCNV LDA N2 GET A 2-DIGIT DECIMAL NUMBER JSB GETOC FROM LBUF AND MAKE IT BINARY JMP APER2 ERROR IF BAD DIGIT STA DPNUM CMA,INA IF ENTRY IS MORE THAN MAX ADA MAXPT ESTABLISHED EARLIER OR SSA,RSS ZERO, CPA MAXPT THEN WE HAVE JMP APER2 AN ERROR. SPC 1 JSB DPCHK IT'S ALSO AN ERROR IF NEXT JMP APER2 CHAR IS ANYTHING BUT RSS END OF JMP APER2 RECORD. SPC 1 * SEE IF PARTITION IS DEFINED SPC 1 LDA DPNUM CONVERT PART. NUMBER TO JSB DPCNV ABS ADDRESS IN M.A.T. IN STA DPTM2 TARGET SYSTEM AND SAVE IT. LDB A JSB DPRW READ LjINK FIELD IN M.A.T. ENTRY SSA IF IT IS NEGATIVE JMP APER2 THAT MEANS UNDEFINED PARTITION SPC 1 * GOOD PARTITION NUMBER - SEE IF PROG WILL FIT SPC 1 LDB DPTM2 READ SIZE OF ADB P4 THE SPECIFIED PARTITION JSB DPRW (LOW 10 BITS OF FIELD) AND M1777 AND SAVE IT STA DPSIZ SPC 1 LDB DPID READ WORD 22 (DMS WORD) FROM ADB P21 ID-SEGMENT AND SAVE IT. JSB DPRW STA DPTMP RRR 10 ISOLATE SIZE FIELD FROM AND M37 ID-SEGMENT CMA,INA AND COMPARE WITH ADA DPSIZ PARTITION SIZE SSA ERROR IF PARTITION JMP APER3 IS SMALLAR THAN PROGRAM SPC 1 * PROGRAM WILL FIT PARTITION: FIXUP ID-SEGMENT SPC 1 LDA DPTMP PICK UP OLD CONTENTS OF AND M7700 ID-SEG WORD 22 IOR DPNUM AND MERGE IN PARTITION ADA N1 NUMBER LESS 1 IOR MSIGN AND ASSIGNED LDB DPID BIT. THEN ADB P21 REWRITE THAT WORD JSB LABDO IN ID-SEGMENT JMP APLOP GO BACK AND GET NEXT USER INPUT SPC 1 MSM5 ASC 17,MODIFY PROGRAM PAGE REQUIREMENTS? MSM5. DEF MSM5 MLM5 EQU P33 SPC 1 MSM4 ASC 13,ASSIGN PROGRAM PARTITIONS? MLM4 EQU P26 MSM4. DEF MSM4 SPC 1 APER1 LDA ERR48 SEND APPROPRIATE ERROR JSB ERROR JMP APRD2 MESSAGE APER2 LDA ERR49 JMP APERR APER3 LDA ERR50 APERR JSB ERROR JMP APLOP ERR48 ASC 1,48 ERR49 ASC 1,49 ERR50 ASC 1,50 MPER1 LDA ERR51 JSB ERROR JMP MPLOP ERR51 ASC 1,51 SPC 1 APEND EQU * SKP * BUILD MEMORY PROTECT FENCE TABLE * * (MPFT CONTAINS ABS ADDR OF TABLE IN TARGET SYSTEM) * * TABLE FORMAT: WORD LOGICAL FENCE ADDR FOR * 0 - DISK RES PROG W/O COMMON * 1 - MEM RES PROG W/O COMMON *  2 - ANY PROG USING RT COMMON * 3 - ANY PROG USING BG COMMON * 4 - ANY PROG USING SSGA SPC 1 JSB SYS LET LABDO KNOW WE'RE REFERING * TO SYSTEM ADDRESSES. LDA LPSYS USING LAST PAGE TOUCHED BY SYS INA OR LIBRARY, COMPUTE FIRST ADDR LSL 10 AVAILABLE TO ANY DISK RES LDB MPFT. PROGRAM AND SAVE AS WORD 0 JSB LABDO OF MPFT. SPC 1 LDA FWMRP SAVE FIRST WORD ADDR OF MEM RES JSB LABDO PROGS IN WORD 1. SPC 1 LDA RTCAD AND FIRST WORD ADDR OF RT JSB LABDO COMMON IN WORD 2. SPC 1 LDA BGBND AND FIRST WORD ADDR OF BG JSB LABDO COMMON IN WORD 3. SPC 1 LDA SSGA. AND FIRST WORD ADDR OF SSGA JSB LABDO IN WORD 4. SKP * * BUILD DMS MAP FOR MEMORY RESIDENT PROGRAMS * (SET DMS WRITE-PROTECT BIT FOR ALL PAGES * ABOVE LAST MEMORY RES PROG PAGE). * SPC 1 JSB SYS MAKE SURE LABDO ADDRESSES THE * SYSTEM PART OF THE DISK. LDA N32 SET A LOOP COUNTER STA DPTMP FOR 32 ITERATIONS. CLA SET INITIAL PHYSICAL PAGE ADDR STA DPTM2 TO ZERO. SPC 1 LDA URMAN GET LAST WORD ADDR OF MEM RES ADA N1 PROG AREA RRR 10 ISOLATE THE PAGE NUMBER AND M37 AND SAVE (-PAGE#-1) FOR CMA LATER STA MMTMP COMPARISON. SPC 1 LDB MAP. POINT TO FIRST WORD OF MAP IN SPC 1 TARGET SYSTEM. MMLOP LDA DPTM2 ADA MMTMP IF THIS PAGE IS ABOVE THE SSA HIGHEST MEM RES PROG PAGE JMP MMOK THEN SET THE WRITE PROTECT LDA M0400 BIT AND THE READ IOR MSIGN PROTECT BIT. RSS MMOK CLA ELSE CLEAR IT ADA DPTM2 MERGE IN PAGUE NUMBER SPC 1 JSB LABDO WRITE MAP WORD (IWTH OR W/O ISZ DPTM2 WRITE-PROTECT BIT). INCREMENT ISZ DPTMP ABS PAGE ADDR AND LOOP BACK JMP MMLOP UNTIL ALL 3I REGS ARE FILLED. SKP * STUFF CRITICAL VALUES INTO ENTRY POINTS DECLARED * IN SYSTEM MODULES. (TABLE DRIVEN FOR EASY CHANGE) SPC 1 * COMPLETE THE TABLE OF VALUES LDA MAP. SET ADDR OF RESIDENT STA $MRMP+1 PROGRAM MAP. LDA LPSYS SET LENGTH OF SYSTEM INA AND LIB IN PAGES STA $ENDS+1 LDA MAT. SET ADDR OF MEMORY ALLOCATION INA TABLE. (NOTE THIS IS ADDR OF STA $MATA+1 NEXT WORD AFTER TABLE LENGTH). LDA MPFT. SET ADDR OF MEMORY PROTECT STA $MPFT+1 FENCE TABLE. SPC 1 LDA FPSAM GET NUMBER OF PAGES PARTIALLY CMA,INA OR FULLY OCCUPIED BY S.A.M. ADA FPDSK LSL 10 THEN SHIFT TO POSITION, IOR FPSAM MERGE IN FIRST PAGE ADDR STA $MPSA+1 AND SET IN TABLE. SPC 1 LDA FWSAM COMPUTE LWA MEM RES PROG ADA N1 FROM FWA S.A.M, THEN STA $EMRP+1 STUFF IN TABLE SPC 1 LDA FPDSK COMPUTE LAST PAGE OF S.A.M. ADA N1 AND STUFF INTO STA $LPSA+1 TABLE. SPC 1 * LOOK UP ENTRIES IN MODULES AND STUFF IN * VALUES FROM TABLE. SPC 1 JSB SYS TELL LABDO WE'RE ADDRESSING * THE TARGET SYSTEM. LDA SCT. INITIALIZE A POINTER INTO STA SCTMP THE VALUE TABLE SPC 1 SCLOP LDB SCTMP,I LOAD POINTER TO ENTRY NAME SZB,RSS IN TABLE JMP SCEND (ZERO MEANS END OF TABLE). JSB LSTS FIND NAME IN LST AREA AND HLT 0B HALT IF MISSING. SPC 1 LDB LST5,I GET ENTRY ADDRESS ISZ SCTMP LDA SCTMP,I AND DESIRED VALUE JSB LABDO  THEN STUFF IT IN MODULE. SPC 1 LDA SCTMP FIX VALUE-TABLE POINTER ADA P4 TO ADDRESS NEXT STA SCTMP 5-WORD ENTRY. JMP SCLOP LOOP BACK TILL DONE. SPC 1 * THE FOLLOWING TABLE CONTAINS A 5-WORD * ENTRY FOR EACH OF THE SYSTEM ENTRY * POINTS TO BE STUFFED WITH A VALUE. THE * TABLE ENDS WITH A WORD CONTAINING ZERO. * * ENTRY STRUCTURE: * WORD 0 - POINTER TO ENTRY PT. NAME * WORD 1 - VALUE TO BE STUFFED IN ENTRY PT. * WORDS 2,3,4 - ENTRY POINT NAME SPC 1 SCTAB EQU * $MRMP DEF *+2 NOP ASC 3,$MRMP $ENDS DEF *+2 NOP ASC 3,$ENDS $MATA DEF *+2 NOP ASC 3,$MATA $MPSA DEF *+2 NOP ASC 3,$MPSA $MPFT DEF *+2 NOP ASC 3,$MPFT $RTFR DEF *+2 DPRTL NOP (VALUE SET WHEN PARTITIONS DEFINED) ASC 3,$RTFR $BGFR DEF *+2 (VALUE SET EARLIER, AS ABOVE) DPBGL NOP ASC 3,$BGFR $EMRP DEF *+2 NOP ASC 3,$EMRP $LPSA DEF *+2 NOP ASC 3,$LPSA DEC 0 *END OF TABLE* SPC 1 SCT. DEF SCTAB SCTMP BSS 1 MMTMP BSS 1 SPC 1 SCEND EQU * SKP * SET LOGICAL ADDRESSES OF SYSTEM AVAILABLE MEMORY * * MEM1 = FIRST WORD ADDR OF S.A.M. * MEM2 = LAST WORD ADDR OF S.A.M. +1 * * NOTE: THE TERM,LOGICAL ADDRESS, IS USED SINCE S.A.M. * MAY APPEAR TO THE SYSTEM AT AN ADDRESS WHICH IS LOWER * THAN (BY AN INTEGRAL # OF PAGES) ITS PHYSICAL ADDR. * THIS IS BECAUSE SSGA AND BOTH COMMONS PHYSICALLY RESIDE * BETWEEN THE END OF THE LIBRARY AND THE START OF SAM, YET * THESE AREAS ARE NOT INCLUDED IN THE SYSTEM'S MAP (OR "LOGICAL * ADDRESS SPACE"). EXCEPTION:SSGA AND COMMON ARE IN SYSTEM'S * MAP IF USER SAID PRIV DRIVERS ARE TO USE COMMON. SPC 1 LDA LPSYS RELOCATE S.A.M. AFTER SYSTEM LDB MAPFG UNLESS USER SAID DRIVERS USE COMMON, SZB THEN RELOCATE AFTER COMMON LDA LPCOM * CALCULATE THE NUMBER OF WHOLE CMA,INA PAGES (SIZE OF GAP) SEPARATING ADA FPSAM S.A.M. FROM END OF SYS/LIB/COM SZA IF S.A.M. STARTS ON SAME OR ADA N1 NEXT PAGE THE GAP IS ZERO. STA MEM2 (SAVE GAP SIZE IN MEM2) LSL 10 GET GAP SIZE IN WORDS AND CMA,INA ADJUST FWA OF S.A.M. ADA FWSAM DOWNWARD, THEN STA MEM1 STORE IN MEM1. SPC 1 LDA MEM2 SIMILARLY, ADJUST LWA+1 OF CMA,INA S.A.M. DOWNWARD ADA FPDSK THEN CONVERT PAGE ADDR LSL 10 TO WORD ADDR STA MEM2 AND STORE IN MEM2. ****** END DMS CODE ****** XIF HED RTE GENERATOR COMPLETE ABSOLUTE LOAD * BEGIN CLEAN-UP....DO NOT ALLOW RESTARTS BEYOND THIS POINT SPC 1 LDA NRST PUT ERROR ROUTINE ADDRESS IN STA TRANS RESTART VECTOR. SPC 1 * CLEAR SYSTEM COMMUNICATION AREA * LDA LWSBP GET ADDR OF SYS COMM AREA LDB NLCOM GET NEG. LENGTH OF COMM AREA STB WDCNT SET COUNT FOR CLEARING BP AREA CLB STB A,I CLEAR BP COMM AREA WORD INA ISZ WDCNT SKIP - AREA CLEARED JMP *-3 CONTINUE CLEARING BP AREA * * MOVE UTILITY PROGS TO LOW DISK CLA STA UTCNT CLEAR UTILITY PROGRAM COUNT LDA DSKAD GET CURRENT DISK ADDRESS STA DSKUT SAVE DISK ADDR OF UTILITY PROGS JSB INIDX INITIALIZE IDENT SCAN GETLB JSB IDX SET IDENT ADDRESSES JMP ENDU ALL UTILITY PROGRAMS MOVED LDA ID6,I GET TYPE AND M177 ISOLATE TYPE CPA P7 TYPE = UTILITY? RSS YES - MOVE JMP GETLB IGNORE OTHER PROGRAMS LDA ID8,I GET DISK SECTOR COUNT CMA,INA 4JSTA DSCNT SET SECTOR COUNT LDA ID5,I GET INITIAL DISK ADDR LDB DSKAD SET CURRENT DISC STB ID5,I IN IDENT FOR LIB. DICT. SSA IF SCRATCH NOT ON SAME UNIT JMP MOVEL SKIP TEST LDB DSKA SAME UNIT CHECK TO SEE IF ABSOLUTE HAS COVERED CMB THIS RELOCATABLE PGM ADB A SUBTRACT CURRENT ABS ADDRESS SSB,RSS OVERFLOW? JMP MOVEL NO GO MOVE THE PGM * LDA ERR38 YES ERROR JSB IRERR NOT RECOVERABLE GO TELL HIM * MOVEL STA DSKRD SET CURRENT UTILITY DISK ADDRESS LDB ALBUF GET ADDRESS OF LBUF JSB DISKI READ UTILITY PROGRAM RECORD LDA DSKAD GET CURRENT ABSOLUTE DISK ADDR LDB ALBUF GET ADDRESS OF LBUF JSB DISKO WRITE UTILITY RECORD ON DISK LDA DSKAD GET CURRENT ABSOLUTE DISK ADDR JSB DISKA INCR DISK ADDRESS STA DSKAD SET NEW CURRENT DISK ADDRESS LDA DSKRD GET CURRENT UTILITY DISK ADDR JSB DISKA INCR DISK ADDRESS ISZ DSCNT SKIP - UTILITY PROGRAM MOVED JMP MOVEL MOVE NEXT UTILITY PROGRAM ISZ UTCNT INCR UTILITY PROGRAM COUNT JMP GETLB SCAN IDENTS FOR NEXT UTILITY PRG * * MAKE LIBRARY ENTRY POINT LIST ENDU CLA STA LBCNT CLEAR LIBRARY ENTRY POINT COUNT STA RELAD CLEAR RELOCATION ADDR FOR LABDO LDA DSKAD GET CURRENT ABSOLUTE DISK ADDR STA DSKLB SAVE LIBR ENTRY POINT LIST ADDR JSB USERS OUTPUT THE LIB USING USER MAP LDA M2000 WITH 2000 FOR THE BASE STA ABCOR,I CORE BASE ADA N1 AND MAX STA MXABC,I JSB INLST INITIALIZE LST SCAN LBLST JSB LSTX SET CURRENT LST ADDRESSES JMP ENDSX END OF LIST * LDA LST4,I GET IDENT ADDR FOR ENTRY POINT * STA TIDNT SET IDENT ADDRESS FOR IDX SZA,RSS IF UNDEFINED SYMBOL GO  JMP LBLTS TEST FOR GENERATED SYMBOL * ADA N5 IF SELF DEFINING SSA SYMBOL JMP LBOU GO SEND IT FORTH WITH * JSB IDX SET IDENT ADDRESSES HLT 0 INVALID IDENT ADDRESS LDA ID6,I GET PROGRAM TYPE AND M177 ISOLATE TYPE SZA,RSS IS TYPE A SYSTEM PROGRAM JMP LBO YES GO DO IT * AND M7 KEEP THE SIGNIFIGANT BITS IFN *** BEGIN NON-DMS CODE *** CPA P1 KEEP IF CORE RESIDENT RSS CPA P6 TYPE = LIBRARY? RSS YES - PROCESS LIBRARY ENTRY PT CPA P4 TYPE = BG RESIDENT? **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** CPA P6 ONLY LIBR AND SYS ENTS SAVED ****** END DMS CODE ****** XIF CLA,RSS YES - PROCESS JMP LBLST IGNORE NON-LIBRARY ENTRY POINT * LBO STA TIDNT CLEAR THE TYPE FLAG LBOU JSB LBOUT SEND THE ENTRY POINT JMP LBLST GO GET THE NEXT ONE * LBLTS LDA LST5,I IF UNDEFINED SYMBOL HAS A SZA NON-ZERO VALUE JSB LBOUT SEND IT ANY WAY JMP LBLST CONTINUE THE SCAN * * LBOUT NOP ROUTINE TO OUTPUT ENTRY POINTS LDA LST1,I GET ENTRY POINT 1,2 LDB MXABC,I GET THE CORE RELATIVE LOCATION INB OF THE NEXT RECORD JSB LABDO OUTPUT NAME 1,2 LDA LST2,I GET ENTRY POINT 3,4 JSB LABDO OUTPUT NAME 3,4 LDA LST3,I GET ENTRY POINT 5 AND M7400 ISOLATE UPPER CHAR ADA TIDNT ADD THE FLAG WORD JSB LABDO OUTPUT NAME 5 LDA LST5,I GET SYMBOL VALUE JSB LABDO OUTPUT VALUE OF ENTRY PT ISZ LBCNT INCR ENTRY POINT COUNT JMP LBOUT,I RETURN * * * OUTPUT THE DICTIONARY * ENDSX JSB INLST DICTIONARY IS IN ORDER SXEND JSB LSTX OF DEFINATION JMP ENDS2 END OF ENT'S GcFO WRAP UP * LDA LST4,I GET THE IDENT ADDRESS STA TIDNT SET FOR IDX ADA N5 IF UNDEFINED OR SELF SSA DEFINING JMP SXEND SKIP THE SYMBOL * JSB IDX GET THE IDENT ADDRESSES HLT 0 WOOPS! LDA ID6,I GET THE TYPE AND M177 ISOLATE CPA P7 IF NOT LIBRARY CLA,INA,RSS JMP SXEND TRY THE NEXT ONE * STA TIDNT ELSE SET THE FLAG TO 1 LDA ID5,I GET THE DISC ADDRESS STA LST5,I AND SET IN VALUE WORD JSB LBOUT OUTPUT THE ENT JMP SXEND TRY THE NEXT ONE. * * ENDS2 JSB BPDSA OUTPUT REMAINDER OF LIBR LIST JSB SYS BACK TO THE SYSTEM MAP * * GENERATE BLANK ID SEGMENTS * ENDBI LDA CURAK MORE BLANK ID'S? CPA ASKEY ? JMP ENDRL NO HOW ABOUT SHORT ONES? * LDA N2 YES GENERATE A JSB GENID BLANK ID SEGMENT JMP ENDBI NEED ANOTHER? * ENDRL LDA SKEYA IF NEXT KEYWORD IS INA CPA IDSAD THEN TERMINATE JMP ENDSZ BLANK OUTPUT. * LDA N2 A=-2 FOR BLANK ID SEGMENT FLAG. JSB GNSID GENERATE ID SEGMENT. JMP ENDRL REPEAT TEST. * * PUT OUT DISK DICTIONARY ENDSZ LDA DSKAD GET CURRENT DISC ADDRESS. ALF,ALF ROTATE DISK TRACK NO. TO LOW A RAL ISOLATE AND M377 TRACK NUMBER. INA SET A = NUMBER OF USED TRACKS STA CURAT SAVE NO. OF USED TRACKS CMA,INA STA TCNT SET TRACK USAGE COUNT CLA STA TBUF CLEAR TBUF LDA ADICT SET THE TAT ADDRESS STA CURAI FOR OUTID SYSTR LDA MSIGN SET FLAG FOR SYSTEM-USED TRACK JSB OUTID OUTPUT TRACK-USED FLAG ISZ TCNT STEP THE COUNT RSS MORE TO DO CONTINUE JMP USRTR DONE - JUMP ISZ TBUF STEP CURRENT TRACK LDA TBUF GET CURRENT TRACK JSB TRTST IS IT FLAGGED? CPB TBUF ?? JMP SYSTR YES - SET IT * LDA ERR42 NO - BOMB JSB IRERR WE CAN NOT RECOVER * USRTR LDA CURAT SET A = NO. OF USED TRACKS JSB DTSET SET DISK TRACK TABLE JSB REMDO FLUSH FINAL SECTOR FROM DBUF * LDA AEQT GET ADDRESS OF EQT STA EQTA GET ADDRESS OF EQT * LDA CEQT GET NO. OF EQT ENTRIES STA EQT# SET NO. OF EQT ENTRIES * LDA ASQT GET ADDR OF DEV REF TABLE STA DRT SET ADDR OF DEV REF TABLE * LDA CSQT GET NO. OF DEV REF TABLE ENTRIES STA LUMAX SET NO. OF DEV REF TABLE ENTRIES * LDA AINT GET ADDR OF INTERRUPT TABLE STA INTBA SET ADDR OF INTERRUPT TABLE * LDA CINT GET NO. OF INT ENTRIES STA INTLG SET NO. OF INT ENTRIES * LDA ADICT GET ADDR OF DISK TRACK TABLE STA TAT SET ADDR OF DISK TRACK TABLE * LDA KEYAD GET ADDR OF KEYWORD LIST STA KEYWD SET ADDR OF KEYWORD LIST * LDA TBCHN GET I/O ADDR FOR TBG STA TBG SET I/O ADDR FOR TBG * LDA TTYCH GET I/O ADDR FOR SYS TELETYPE STA SYSTY SET I/O ADDR FOR SYS TELETYPE * LDB SCH4 SET ID ADDRESS OR ZERO STB SKEDD IN SCHEDULED LIST * LDA SWAPF GET SWAPPING FLAG STA SWAP SET SWAPPING FLAG * LDA LBCAD GET ADDR OF LIBRARY STA LBORG SET ADDR OF LIBRARY * LDA RTCAD GET RT COM ADDRESS STA RTORG SET RT COM ADDRESS * LDA COMRT GET RT COM LENGTH STA RTCOM SET RT COM LENGTH IFN *** BEGIN NON-DMS CODE *** LDA MEM6 SET FWA OF R/T STA RTDRA DISC RESIDENT AREA. * LDA SYMAD GET ADDRESS OF SYS AV MEM STA AVMEM SET ADDR OF SYS AV MEM **** END NON-DMS CODE **** XIF * LD%pA BGBND SET BG BOUNDARY STA BKORG SET BG BOUNDARY * LDA COMBG SET BACKGROUND STA BKCOM COMMON LENGTH. * IFN *** BEGIN NON-DMS CODE *** LDA MEM12 GET BG DISK RESIDENT ORIGIN STA BKDRA SET BG DISK RESIDENT ORIGIN **** END NON-DMS CODE **** XIF * LDA LWASM GET LAST AVAIL ADDR FOR SYSTEM STA BKLWA SET LAST AVAIL ADDR FOR SYSTEM * IFN *** BEGIN NON-DMS CODE *** LDA URBP SET FWA OF R/T DISC RESIDENT STA BPA1 LINK AREA IN BASE PAGE. * LDA URBP1 SET LWA FOR R/T STA BPA2 BASE PAGE LINK. * LDA UBBP SET FWA OF BKG DISC RESIDENT STA BPA3 LINK AREA IN BASE PAGE. **** END NON-DMS CODE **** XIF * IFZ ***** BEGIN DMS CODE ***** LDA P2 STA BPA1 1ST LINK FOR RT DR'S STA BPA3 1ST LINK FOR BG DR'S LDA LOLNK SAVE LOWEST SYS LINK ADA N1 LESS ONE, STA BPA2 AS LAST LINK FOR RT DR'S ****** END DMS CODE ****** XIF LDA PIOC SET ADDRESS OF STA DUMMY PRIVILEGED I/O CARD. * LDA SDS# SET # SECTORS/TRACK FOR STA SECT2 SYSTEM DISC (LU #2). * LDA ADS# SET # SECTORS/TRACK FOR STA SECT3 AUXILIARY DISC (LU #3). * LDA DSKSY SET DISC ADDR. OF STA IDSDA FIRST ID SEGMENT. * LDA IDSP SET POSITION OF 1ST ID SEGMENT STA IDSDP IN SECTOR. * LDA DSKLB GET DISK ADDR OF LIB ENTRY PTS STA DSCLB SET DISK ADDR OF LIB ENTRY PTS * LDA LBCNT GET NO. OF LIB ENTRY PTS STA DSCLN SET NO. OF LIB ENTRY PTS * LDA DSKUT GET DISK ADDR OF UTILITY PROGS STA DSCUT SET DISK ADDR OF UTILITY PROGS * LDA UTCNT GET NO. OF UTILITY PROGS STA DSCUN SET NO. OF UTILITY PROGS LDA DSIZE SYSTEM DISC SIZE STA TATSD * LDA DSIZE TOTAL DIbTRNSC TABLE LENGTH ADA DAUXN CMA,INA STA TATLG SET TOTAL DISK TABLE LENGTH * * IFZ ***** BEGIN DMS CODE ***** CLA STA MEM12 CLEAR JUNK OUT OF MEM12 ****** END DMS CODE ****** XIF LDA DMEM1 SET UP THE MEMORY TABLE STA TBUF TO BE FIRST ADDRESS LDB N6 FOLLOWED BY NUMBER MADJ LDA TBUF,I OF WORDS CMA,INA CACULATE THE NUMBER ISZ TBUF STEP TO THE HIGH WORD ADA TBUF,I COMPUTE SIZE STA TBUF,I SET IT ISZ TBUF STEP TO THE NEXT WORD INB,SZB IF DONE EXIT JMP MADJ ELSE LOOP * STA EQT12 SET THE LAST WORD * LDA DMEM1 MOVE THE FREE MEMORY LDB DEQT1 TABLE INTO JSB MOVW THE EQT AREA DEC -11 * LDA LWSBP MOVE THE SYS COM LDB ADBP AREA ADB A TO THE JSB MOVW THE DUMMY BASE PAGE NLCOM ABS FWSCA-2000B * * PUT OUT BASE PAGE * JSB DSKEV GET NEXT EVEN SECTOR ADDRESS STA DSKAV SAVE NEXT AVAILABLE DISK ADDR IFN *** BEGIN NON-DMS CODE *** LDA DSKAB GET INITIAL ABSOLUTE DISK ADDR STA DSKAD SET CURRENT DISK ADDRESS LDA M2000 GET UPPER SYSTEM BP ADDRESS LDB P2 GET LOWER SYSTEM BP ADDRESS JSB BPOUT OUTPUT RESIDENT BP SECTION **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** SPC 1 * WRITE UPPER PART OF SYSTEM BASE PAGE TO DISK. * * THE PORTION OF THE BASE PAGE CONTAINING MEMORY * RESIDENT PROGRAM LINKS WAS ALREADY WRITTEN OUT. \T* SINCE WE PROBABLY ENDED THE LOWER PORTION IN * THE MIDST OF A SECTOR, IT IS MOST CONVENIENT TO * WRITE THE REMAINDER OF THE B.P. USING LABDO, A * WORD AT A TIME, TO INSURE THAT NEW WORDS ARE * MERGED INTO THE APPROPRIATE POSITIONS ON DISK. * * WE TELL LABDO WE ARE WRITING PAGE 1 WORDS VICE * PAGE 0 SINCE LABDO WAS DESIGNED TO VECTOR ALL BASE * PAGE REFERENCES INTO THE IN-CORE "DUMMY BASE PAGE" * INSTEAD OF THE DISK. SPC 1 LDA DSKBP GET STARTING SECTOR OF SBP STA DBDSK AND SAVE IN LABDO MAP. LDA M2002 SET BASE CORE ADDR STA DBASE IN MAP. LDA M4000 AND SET MAX CORE ADDR SEEN STA DBMAX IN MAP. LDA DBMAP SET LABDO TO USE SPECIAL JSB SETDS MAP BELOW. LDA LOLNK SAVE CORE ADDRESS OF LOWEST ADA ADBP SYSTEM LINK IN TEMPORARY. STA TEMP5 LDB LOLNK CONVERT TARGET BP ADDR TO PAGE 1 ADB M2000 ADDR TO FAKE OUT LABDO. SPC 1 BLOOP LDA TEMP5,I PICK UP NEXT BP WORD AND JSB LABDO WRITE TO DISK, INCREMENTING B ISZ TEMP5 REG (TARGET) AND TERMP5 CPB M4000 (SOURCE) EACH TIME UNTIL JMP BPEND END OF PAGE IS PASSED JMP BLOOP (TARGET ADDR = PAGE 2) SPC 1 TEMP5 BSS 1 LOCAL TEMPORARY DBMAP DEF *+1 *MAPPING ENTRIES * DBASE BSS 1 * FOR LABDO, DO NOT* DBMAX BSS 1 * MOVE W/RESPECT * DBDSK BSS 1 * TO EACH OTHER. * SPC 1 BPEND EQU * ****** END DMS CODE ****** XIF LDA OLDDA FLUSH THE LABDO BUFFER LDB ADBUF TO THE JSB DISKO DISC LDA ASECT GET ADDRESS OF BOOT SPECS. JSB FSECT FLUSH THE FINAL SECTOR * * LDA P22 LDB MES23 MES23 = ADDR: *SYSTEM STORED ETC JSB DRKEY,I PRINT: SYSTEM STORED ON DISK * LDA DSKAV CONVERT ALF,ALF LAST RAL USED AND M377 DISC CMA,INA LDB ATBUF ADDRESS (TRACK #) TO DECIMAL JSB CONVD AND LDA TBUF+2 STORE STA MES38+6 IN MESSAGE. LDA DSKAV CONVERT AND M177 SECTOR ARS CONVERT TO 128 WORD SECTORS CMA,INA (DECIMAL) LDB ATBUF # JSB CONVD AND LDA TBUF+2 STORE STA MES38+11 IN LDA TBUF+1 MESSAGE AND M377 ISOLATE 3RD DIGIT, IOR UBLNK ADD UPPER BLANK. STA MES38+10 LDA P31 PRINT MESSAGE: LDB MES38 "SYS SIZE: JSB DRKEY,I TRK XX SEC XXX(10)" JSB SPACE * LDA DSKAV GET NEXT AVAILABLE DISK ADDR LDB DERCN GET DISK ERROR COUNT JSB HLT77 JMP *-1 END OF JOB * * (TURN ON DISK PROTECT) * CPLSB NOP DMEM1 DEF MEM1 DEQT1 DEF EQT1 ASKEY NOP ADDRESS OF FIRST SHORT ID'S KEY WORD SKP IFZ ***** BEGIN DMS CODE ***** * IDFIX: SETS UP WORD 22 OF ID-SEGMENT FOR RTE-III * * WORD 22 FORMAT - BIT 15: 1=PARTITION ASSIGNED * 10-14: PARTITION SIZE REQMT. IN PAGES * NEGLECTING BASE PAGE (#PAGES-1) * 7-9: MEM PROTECT FENCE TBL INDEX * 6: RESERVED (0) * 0-5: ASSIGNED PARTITION NUMBER-1 * * CALLING SEQUENCE: * * JSB SYS (OR MAKE SURE LABDO IS MAPPING SYSTEM) * A= #PAGES NEEDED BY PROGRAM INCL. BASE PAGE * B= ADDR OF IDENT ENTRY FOR PROG * JSB IDFIX * * SUBROUTINES CALLED: LABDO * * RETURN: * A,B,E DESTROYED SPC 1 IDFIX NOP SZA DON'T INCLUDE BASE ADA N1 PAGE IN SIZE. STA IDTM1 SAVE PAGE REQMT STB IDTM2 SAVE IDENT POINTER ADB P5 B=ADDR OF IDENT WORD 6 SPC 1 * CHECK USE OF SSGA SPC 1 LDA B,6YI GET PROG TYPE FROM IDENT AND M20 AND ISOLATE THE SSGA BIT. SZA,RSS IF NOT USING SSGA, JMP NOSSC THEN GO CHECK OTHER COMMONS. SPC 1 LDA XSSGA IF USING SSGA, THEN PICK UP JMP IDSET MPFT INDEX AND GO WRITE ID-SEG. SPC 1 * NOT USING SSGA; USE COMMON SIZE FROM IDENT * (EITHER SOME OR NONE), REVERSE COMMON BIT IN TYPE, * AND LOW TWO TYPE BITS TO INDEX INTO TABLE OF * MPFT INDICES. SPC 1 NOSSC LDA B,I GET TYPE AGAIN AND SAVE BITS AND M13 0,1, AND REVERSE COMMON BIT. ADB N2 PICK UP COMMON SIZE LDB B,I IN IDENT. SZB IF ANY, THEN SET BIT 2 IN A. IOR M4 SPC 1 ADA IDTB. USE BIT PATTERN IN A TO INDEX LDA A,I TABLE, AND PICK UP MPFT INDEX. SPC 1 * A CONTAINS MPFT INDEX, MERGE IN SIZE REQUIREMENT * AND WRITE DISK. SPC 1 IDSET CLB RRR 3 PUT MPFT INDEX AND IOR IDTM1 PAGE REQMT IN PROPER RRL 10 POSITIONS IN A-REG SPC 1 STA IDTM3 SAVE NEW ID WORD LDB IDTM2 THEN PICK UP IDENT ADDR, JSB IDFND AND CONVERT TO ID-SEG PTR ADB P21 POINT TO ID-SEG WORD 22 LDA IDTM3 AND WRITE NEW CONTENTS JSB LABDO TO DISK. SPC 1 LDA IDTM1 MERGE PARTITION SIZE LSL 8 REQUIREMENT LESS 1 LDB IDTM2 INTO UPPER BYTE ADB P7 OF IDENT WORD 8. IOR B,I STA B,I SPC 1 * RETURN TO CALLER JMP IDFIX,I SPC 1 * CONSTANTS, ETC. SPC 1 IDTM1 BSS 1 IDTM2 BSS 1 IDTM3 BSS 1 XSSGA EQU 4 MPFT INDEX IF USING SSGA XDRNC EQU 0 MPFT INDEX IF DISK RES W/O COM. XMRNC EQU 1 MPFT INDEX IF MEM RES W/O COM. XBG EQU 3 MPFT INDEX IF USER OF BG COM. XRT EQU 2 MPFT INDEX IF USER OF RT COM.  SPC 1 * INDEX LOOKUP TABLE * * TABLE CONTAINS MPFT INDICES (XSSGA, XDRNC, * XMRNC, XBG, OR XRT) * * THE INDEX TO THIS TABLE IS 4 BITS LONG: * * BITS 0,1: 00 - SHOULDN'T HAPPEN * (FROM TYPE) 01 - RT MEM RES * 10 - RT DISK RES * 11 - BG DISK RES * BIT 2: 0 - NO COMMON USED * 1 - COMMON USED * BIT 3: 0 - USE NORMAL COMMON * 1 - USE REVERSE COMMON SPC 1 IDTB. DEF *+1 ABS 0 INDEX=0000-SHOULDN'T HAPPEN ABS XMRNC 0001-MR W/O COMMON ABS XDRNC 0010-RT DR W/O COMMON ABS XDRNC 0011-BG DR W/O COMMON ABS 0 0100 BAD ENTRY ABS XRT 0101-MR W/RT COMMON ABS XRT 0110-RT DR W/RT COMMON ABS XBG 0111-BG DR W/BG COMMON ABS 0 1000-BAD ENTRY,SHOULDN'T OCCUR ABS XMRNC 1001-MR W/O COMMON (REVERSE) ABS XDRNC 1010-RT DR W/O COMMON (REVERSE) ABS XDRNC 1011-BG DR W/O COMMON (REVERSE) ABS 0 1100-BAD ENTRY ABS XBG 1101-MR W/BG COMMON ABS XBG 1110-RT DR W/BG COMMON ABS XRT 1111-BG DR W/RT COMMON * END OF TABLE SPC 5 * * IDFND - FIND ID SEGMENT ADDRESS BY READING * KEYWORD FROM DISC. * * CALLING SEQ: RETURN SEQ: (N+1) * (INSURE 'SYS' MAP IS SET FOR LABDO) A IS DESTROYED * (INSURE IDFIX CALLED EARLIER FOR PROG) B IS ID SEG ADDR * LDB IDENT-ADDR * JSB IDFND * SPC 1 IDFND NOP ADB P7 POINT TO IDENT WORD 8 LDA M377 PICKUP KEYWD# AND AND B,I ISOLATE IT. ADA KEYAD ADD KEYWORD BASE ADDR LDB A AND SAVE IN B FOR DPRW. JSB DPRW THEN READ KEYWD. LDB A JMP IDFND,I RETURN W/ID-SEG ADDR IN B. * DETERMINE PAGE REQxUIREMENTS FOR A PROGRAM * * CALLING SEQUENCE: RETURN SEQUENCE: * A=HIGH MAIN ADDR+1 B,E DESTROYED * B=LOW MAIN ADDR A=PAGE REQUIREMENT * JSB PGREQ INCL. BASE PAGE. SPC 1 PGREQ NOP CMB B=-LOMAIN-1 ADA B A=NO. WORDS NEEDED-1 RRR 10 A=#PAGES-1 AND M37 CLEAN OUT BAD BITS ADA P2 A=#PAGES+1(I.E. INCL BASE PAGE) SPC 1 JMP PGREQ,I PAGE REQUIREMENTS. ****** END DMS CODE ****** XIF SKP * * PRINT HEADING, INITIALIZE IDX * * THE SETHD SUBROUTINE PRINTS THE HEADINGS FOR THE DIFFERENT * TYPES OF PROGRAMS LOADED, SETS THE NO-PROGRAMS-LOADED-YET * FLAG, AND ORIGINS THE SCAN OF IDENT. * * CALLING SEQUENCE: * A = NO. CHARS. (POS.) IN MESSAGE * B = ADDRESS OF MESSAGE * JSB SETHD * * RETURN: CONTENTS OF A AND B ARE DESTROYED * SETHD NOP DST TBUF SAVE THE MESSAGE JSB SPACE NEW LINE DLD TBUF NOW JSB DRKEY,I PRINT HEADING JSB SPACE NEW LINE CCA STA LFLAG SET PROGRAMS-LOADED FLAG = -1 LDA BIDNT GET FIRST IDENT ADDRESS STA CIDNT SET IDENT ADDRESS FOR ID SCAN JMP SETHD,I RETURN SPC 2 * * THE MOVW SUBROUTINE MOVES WORDS FROM ONE CORE LOCATION * TO ANOTHER * * CALLING SEQUENCE: * * LDA FROM ADDRESS * LDB TO ADDRESS * JSB MOVW * DEC -WORD COUNT * MOVW NOP STA TBUF LDA MOVW,I GET THE COUNT STA TBUF+1 SET IN COUNTER * MOVW2 LDA TBUF,I GET A WORD STA B,I SET IT INB ISZ TBUF STEP THE ADDRESSES ISZ TBUF+1 DONE? JMP MOVW2 NO DO THE NEXT ONE * ISZ MOVW STEP TO RETURN POINT JMP MOVW,I YES- RETURN SKP * * UPDATE RESIDENT MEMORY BOUNDS * * THE INCADo SUBROUTINE UPDATES THE MAIN AND BP MEMORY BOUNDS * FROM THAT USED IN THE PREVIOUS LOADING CALL. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INCAD * * RETURN: CONTENTS OF A AND B ARE DESTROYED * INCAD NOP LDA TPREL GET CURRENT RELOCATION ADDRESS STA PPREL SET NEW PROGRAM RELOC ADDRESS LDA TBREL GET CURRENT BP RELOC ADDRESS STA PBREL SET NEW BP RELOCATION ADDRESS JMP INCAD,I RETURN SPC 5 * DSKEV FORCES THE CURRENT DISC * ADDRESS TO BE EVEN. THIS IS * DONE TO INCREASE LOAD EFFENCIENCY * DURING RTE EXECUTION DSKEV NOP LDA DSKAD GET CURRENT ADDRESS SLA IF EVEN SKIP JSB DISKA ELSE STEP BY ONE STA DSKAD RESET ADDRESS JMP DSKEV,I RETURN - ADDRESS IN A. HED RTE GENERATOR PAGE PRAMETERS AND CONSTANTS * ERR14 ASC 1,14 BG BOUNDARY ERROR ERR23 ASC 1,23 INVALID FWA BP LINKAGE ADDRESS ERR42 ASC 1,42 * MES13 DEF MS13 MES14 DEF *+2 DEF *+6 ASC 8,RT COM MES15 DEF MS15 MES16 DEF MS16 MES18 DEF *+2 DEF *+6 ASC 8,BG COM IFN *** BEGIN NON-DMS CODE *** MES19 DEF MS19 **** END NON-DMS CODE **** XIF MES20 DEF MS20 MES23 DEF MS23 MES12 EQU MES23 MES27 DEF MS27 * MES38 DEF *+1 ASC 16,SYS SIZE: XX TRKS, XXX SECS(10) * ASECT DEF SECTR JMP3I JMP 3,I INITIAL JMP INSTRUCTION * * SKP * SECTR BSS 0 BOOTSTRAP BUFFER FORMAT * LBPSY BSS 1 LOWER SYSTEM BP ADDRESS UBPSY BSS 1 UPPER SYSTEM BP ADDRESS DSKBP BSS 1 SYS BP DISK ADDRESS * LRMAN BSS 1 MAIN RESIDENT LOWER ADDRESS URMAN BSS 1 MAIN RESIDENT UPPER ADDRESS DSKRR BSS 1 MAIN RESIDENT DISK ADDRESS * LBMAN NOP MAIN BG LOWER ADDRESS UBMAN NOP MAIN BG UPPER ADDRESS DSKBG NOP  MAIN BACKGROUND DISK ADDRESS * SYMAD BSS 1 AVAIL SYS MEM ADDR BGBND BSS 1 BACKGROUND BOUNDARY * DSKAV BSS 1 NEXT AVAILABLE DISK ADDRESS DSKLC BSS 1 DISK ADDRESS OF LIBRARY CODE DSKLB BSS 1 DISK ADDR OF LIBRARY ENTRY PTS DSKUT BSS 1 UTILITY PROG DISK ADDRESS DSKBS BSS 1 DISK ADDR OF MAIN BG DISK RES BP DSKBR BSS 1 CURRENT MAIN BG DISK RES DISK AD ADICT BSS 1 ADDR OF DISK DICTIONARY LBCNT BSS 1 RESIDENT LIBR ENTRY PT COUNT UTCNT BSS 1 UTILITY LIBRARY COUNT KEYAD BSS 1 CURRENT KEYWORD ADDRESS RTCAD BSS 1 RT COM CORE ADDRESS LBCAD BSS 1 LIBRARY CODE ADDRESS SYBAD BSS 1 ADDR OF FIRST BP LINK FOR BG IDSAD BSS 1 ADDR OF FIRST ID SEGMENT ABSID BSS 1 IDENT ADDR FOR NEXT BG SEG SCAN MAXRP BSS 1 MAXIMUM RT DISK RESIDENT PROG MAXRB BSS 1 MAXIMUM RT DISK RESIDENT BP IDMBS BSS 1 BG MAIN ADDRESS FOR BS REF MS02 ASC 8,BP LINKAGE XXXXX MS13 ASC 4,LIBRARY IFN *** BEGIN NON-DMS CODE *** MS15 ASC 6,FG RESIDENTS MS16 ASC 9,FG DISC RESIDENTS **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** MS15 ASC 8,MEMORY RESIDENTS MS16 ASC 9,RT DISC RESIDENTS ****** END DMS CODE ****** XIF IFN *** BEGIN NON-DMS CODE *** MS19 ASC 6,BG RESIDENTS **** END NON-DMS CODE **** XIF MS20 ASC 9,BG DISC RESIDENTS MS23 ASC 11,SYSTEM STORED ON DISC MS27 ASC 8,FWA BP LINKAGE? TYPMS NOP SKP IFZ ***** BEGIN DMS CODE ***** * SET RELOCATION BASE AT FIRST PAGE FOLLOWING SYSTEM * OR, IF USED, COMMON. THIS ROUTINE IS CALLED BEFORE * RELOCATION OF EACH DISK RESIDENT PROGRAM SPC 1 SETRB NOP LDB SSGA. GET LWA OF SYS/LIB + 1 LDA ID6,I GET PROG TYPE AND M20 ISOLATE SSGA BIT IN TYPE, IOR ID4,I MERGE IN COMMON LENGTH, SZA AND IF HE USES EITHER LDB FWMRP SET RELOC BASNsE ABOVE COMMON. CCA ADA B GET LWA OF SYS OR COMMON, AND M1760 KEEP JUST PAGE NUMBER, ADA M2000 BUMP TO START OF NEXT PAGE STA PPREL AND SAVE AS RELOCATION BASE. CLA RESET BASE PAGE ALLOCATION STA BPMAX HIGH-WATER-MARK JMP SETRB,I RETURN ****** END DMS CODE ****** XIF HED RTE GENERATOR SCAN IDENTS FOR PROGRAM TYPE * * SCAN IDENTS FOR PROGRAM TYPE * * THE IDSCN SUBROUTINE SCANS IDENT FOR A PROGRAM OF THE * CURRENT TYPE (SET IN PTYPE). * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB IDSCN * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * E = M/S FLAG FOR CURRENT PROGRAM. * IDSCN NOP LDA CIDNT GET NEXT IDENT IN SCAN STA TIDNT SET IDENT ADDRESS FOR IDX JSB IDX SET IDENT ADDRESSES JMP IDSCN,I RETURN - END OF IDENTS LDA ID1 GET CURRENT MAIN IDENT ADDRESS STA IMAIN SAVE CURRENT MAIN IDENT ADDRESS LDA TIDNT GET NEXT IDENT ADDRESS STA CIDNT SAVE ADDR FOR NEXT IDENT SCAN LDA ID6,I GET TYPE RAL,CLE,ERA SET E = M/S AND TYPMS ISOLATE PROGRAM TYPE CPA PTYPE CURRENT TYPE? RSS YES - CONTINUE JMP IDSCN+3 IGNORE IDENT - TRY NEXT IDENT ISZ IDSCN INCR RETURN ADDRESS JMP IDSCN,I RETURN HED RTE GENERATOR TEST FOR SOME PROGRAMS LOADED * * TEST FOR SOME PROGRAMS LOADED * * THE NOTST SUBROUTINE CHECKS FOR PROGRAMS OF THE CURRENT * TYPE LOADED. IT IS EXECUTED FOLLOWING COMPLETION OF THE * LOADING SEQUENCE FOR EACH PROGRAM TYPE. IF NO PROGRAMS OF * THIS TYPE HAVE BEEN LOADED, IT PRINTS THE MESSAGE * (NONE) ON THE TELEPRINTER. * OTHERWISE IT REPORTS THE CURRENT BASE PAGE LINKAGE ADDRESS. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB NOTST * * RETURN: CONTENTS OF2 A AND B ARE DESTROYED. * NOTST NOP LDA BPMAX GET CURRENT TOP OF LINKAGE ISZ LFLAG IF NO PROGRAMS LOADED JMP BPRPT SEND: (NONE) LDA P6 LDB MES22 MES22 = ADDR: (NONE) JSB DRKEY,I PRINT: (NONE) IFN JMP NOTST,I RETURN * BPRPT JSB BPLNR SEND BP LINKAGE MESSAGE JMP NOTST,I RETURN XIF IFZ BPRPT JMP NOTST,I XIF SPC 2 MES02 DEF MS02 MES03 DEF MS02+5 SPC 2 BPLNR NOP SEND MESSAGE 'BP LINKAGE XXXXX' LDB MES03 XXXXX IS IN A ON ENTRY JSB CONVD CONVERT TO MESSAGE LDA P16 GET LENGTH LDB MES02 AND ADDRESS JSB DRKEY,I SEND MESSAGE JMP BPLNR,I RETURN HED RTE GENERATOR CLEAR LOCAL LIST ENTRIES * * CLEAR LOCAL LST ENTRIES * * CLRLT CLEARS THE CURRENT BP LINKAGE ADDRESSES IN THE BASE PAGE * IMAGE. (CLEARS B-A WORDS). * * CALLING SEQUENCE: * A = CURRENT LOW BP ADDRESS * B = CURRENT HIGH BP ADDRESS PLUS ONE * JSB CLRLT * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * CLRLT NOP IFZ ***** BEGIN DMS CODE ***** STA CLRTM SAVE PARM IN TEMP LDA BPINC AND PICK UP BP INCREMENT ELA AND SAVE SIGN (<0 = DOWN) LDA CLRTM THEN RESTORE PARM. SEZ IF BP LINKS GO DOWNWARD, SWP THEN SWAP PARMS. ****** END DMS CODE ****** XIF CMB,INB SET HIGH BOUND NEGATIVE ADB A SET A = TOTAL WORD COUNT SSB,RSS SKIP - SOME BP SECTION TO CLEAR JMP CLRLT,I RETURN - NO BP SECTION STB WDCNT SET COUNT FOR CLEARING ADA ADBP ADJUST FOR BP ADDRESS LDB CLWRD GET THE CLEARING WORD STB A,I CLEAR BP WORD INA ISZ WDCNT SKIP - ALL BP CLEAR JMP *-3 JMP CLRLT,I END OF CLEARING IFZ ***** BEGIN DMS CODE ***** CLRTM BSS 1 ****I** END DMS CODE ****** XIF SPC 2 * SETBP SET THE SPECIFIED BASE PAGE IMAGE WORDS TO -1 * CALLING SEQUENCE: SAME AS CLRLT. * SETBP NOP STB CLRLT SAVE THE HIGH LIMIT CCB SET THE CLEAR WORD STB CLWRD TO -1 LDB CLRLT RESTORE B JSB CLRLT GO SET THE WORDS TO -1 ISZ CLWRD RESET CLEAR WORD TO 0 NOP ALWAYS SKIPPED JMP SETBP,I RETURN SPC 1 CLWRD NOP HED RTE GENERATOR OUTPUT ABSOLUTE BASE PAGE CODE * * OUTPUT ABSOLUTE BASE PAGE CODE * * BPOUT OUTPUTS THE BASE PAGE SECTION OF CODE FOLLOWING LOADING OF * EACH DISK RESIDENT PROGRAM, BEGINNING WITH THE DISK * ADDRESS SPECIFIED IN DSKAD. * * CALLING SEQUENCE: * A = UPPER BP ADDRESS PLUS ONE * B = LOWER BP ADDRESS * JSB BPOUT * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * BPOUT NOP CMA,INA COMPLEMENT UPPER ADDRESS ADA B ADD LOWER ADDRESS STA TCNT SAVE BP LENGTH ADB ADBP ADJUST FOR BP ADDRESS STB CURAT SAVE CURRENT LOWER CORE ADDR SSA,RSS SKIP - SOME CODE IN BP JMP BPOUT,I RETURN - ALL CODE OUT LDA DSKAD GET CURRENT DISK ADDRESS BPSYO JSB DISKO OUTPUT CURRENT BP SECTOR LDA DSKAD GET CURRENT DISK ADDRESS JSB DISKA INCR DISK ADDRESS STA DSKAD SAVE NEXT DISK ADDRESS LDB TCNT GET CURRENT LENGTH ADB P64 STB TCNT SAVE COUNT FOR NEXT PASS SSB,RSS SKIP - MORE CODE TO PUT OUT JMP BPOUT,I RETURN - ALL CODE OUT LDB CURAT GET CURRENT LOW CORE ADDRESS ADB P64 STB CURAT SET NEXT CORE ADDRESS JMP BPSYO OUTPUT NEXT SECTOR TO DISK HED RTE GENERATOR CONVERT A TO ASCII AT B * * CONVERT A TO ASCII AT B * * THE CONVD SUBROUTINE CONVERTS THE CONTENTS OF A * INTO ASCII (DECIMAL OR OCTAL) AT TH&E LOCATION SPECIFIED * BY B. THE CONVERTED RESULT REQUIRES 3 WORDS, AND IS * IN THE FORMAT: XXXXX, WITH A SPACE IN THE FIRST POSITION. * * CALLING SEQUENCE: * A = NO. TO BE CONVERTED. IF THE SIGN OF A IS POS., * THE CONVERSION IS TO BE IN OCTAL; IF NEGATIVE, * IN DECIMAL. * B = ADDRESS OF CORE LOCATION FOR CONVERTED RESULT * JSB CONVD * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * CONVD NOP STB CURAT SET MESSAGE ADDRESS LDB OPWRS GET ADDR OF OCTAL POWERS SSA SKIP IF OCTAL CONV REQUIRED LDB DPWRS GET ADDRESS OF DECIMAL POWERS STB RANAD SET POWER RANGE ADDRESS SSA,RSS SKIP IF NEGATIVE (DECIMAL) CMA,INA CONVERT NUMBER TO NEGATIVE STA B PUT NUMBER IN B (REMAINDER) LDA N2 STA TCNT SET CONVERSION COUNTER JSB GETD GET FIRST DIGIT IOR UBLNK ADD BLANK TO FIRST CHAR STA CURAT,I SAVE FIRST BLANK, CHARACTER ISZ CURAT INCR MESSAGE ADDRESS NEXTD JSB GETD GET NEXT DIGIT ALF,ALF ROTATE TO UPPER STA CURAT,I SAVE UPPER CHARACTER JSB GETD GET NEXT DIGIT IOR CURAT,I ADD UPPER CHAR STA CURAT,I SAVE NEXT 2 CHARACTERS ISZ CURAT INCR MESSAGE ADDRESS ISZ TCNT SKIP - 5 DIGITS IN JMP NEXTD NO - CONTINUE WITH NEXT DIGIT JMP CONVD,I YES - RETURN HED RTE GENERATOR GET DIGIT FOR CONVD * * GET DIGIT FOR CONVD * * GETD PROVIDES THE ASCII CHARACTERS FOR CONVD. * * CALLING SEQUENCE: * A = IGNORED * B = REMAINDER * JSB GETD * * RETURN: * A = ASCII DIGIT * B = IGNORED * GETD NOP CLA INCRA ADB RANAD,I ADD POWER CMB,SSB,INB,SZB SKIP - TRY NEXT HIGHER DIGIT JMP GET2 DIGIT FOUND INA INCR DIGIT CMB,INB RESTORE REMAINDER TO NEGATIVE JMP INCRA TRY HIGHER DIGIT GET2 ADB RAINAD,I ADD POWER CMB,INB RESTORE REMAINDER ISZ RANAD INCR POWER LIST ADDRESS IOR M60 CONVERT TO ASCII JMP GETD,I RETURN WITH DIGIT IN A HED RTE GENERATOR CLEAR MEMORY MAP BUFFER * * CLEAR MEMORY MAP BUFFER * * CLIST CLEARS THE MEMORY MAP BUFFER WITH BLANKS. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB CLIST * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * CLIST NOP LDB AMLST AMLST = ADDR OF MLIST LDA N8 STA AMAD SET BUFFER LENGTH LDA BLNKS GET 2 BLANK CHARACTERS STA B,I CLEAR BUFFER WORD INB ISZ AMAD ALL WORDS CLEAR? JMP *-3 NO - CONTINUE CLEARING JMP CLIST,I RETURN SPC 2 B4400 OCT 4400 LBUF5 DEF NAM5 WORD 6 OF LBUF ADDESS HED RTE GENERATOR INITIATE MAIN PROGRAM LOADING * * INITIATE MAIN PROGRAM LOADING * * LOAD IS THE SUBROUTINE FOR ENTRY TO LOADS FOR THOSE * PROGRAMS WHICH REQUIRE USE OF A NEW BP AND PROGRAM BASE. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB LOAD * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * LOAD NOP IFZ **** BEGIN DMS CODE **** * INDICATE VALIDITY OF SSGA REFERENCES SPC 1 LDA ID6,I TYPE AND M20 LOOK AT SSGA BIT STA SSGAF SET SSGA FLAG (0=NO SSGA USE) ****** END DMS CODE ****** XIF CCB STB HDFLG SET HEADING FLAG LDA ID6,I GET TYPE AGAIN AND M7 JUST PRIMARY BITS LDB PPREL PICK UP BASE ADDR CPA P2 AND IF PROG IS DISK RESIDENT RSS CPA P3 (EITHER RT OR BG) ADB #IREG BUMP BY ENOUGH FOR * INDEX REG STORAGE STB TPREL LDA PBREL GET BP RELOCATION ADDRESS STA TBREL SET CURRENT BP RELOC ADDRESS JSB LOADS LOAD PROGRAM  LDA LIBFG IF NOT LIB LOAD SZA,RSS THEN JSB SPACE NEW LINE JMP LOAD,I RETURN IFZ **** BEGIN DMS CODE **** SSGAF BSS 1 ***** END DMS CODE ***** XIF HED RTE GENERATOR LOAD AND LINK MAIN PROGRAMS AND SUBROUTINES * * LOAD, LINK MAIN PROG & SUBS. * * LOADS IS THE MAIN LOADING SUBROUTINE FOR GENERATING THE ABSOLUTE * CODE AND LINKING ALL CALLED SUBROUTINES. IT IS USED BY EACH * PROGRAM TYPE FOR LOADING. IT READS THE RELOCATABLE RECORDS FROM * THE SCRATCH PORTION OF THE DISK, AND WRITES THE ABSOLUTE CODE * ON THE LOWER (PROTECTED) PORTION OF THE DISK. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB LOADS * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * LOADS NOP JSB SFIX SET UP A FIX UP ENTRY CCA STA PLFLG SET FLAG = NO DBL RECS IN * LOADN LDA TPREL CLEAR THE CP LINK IMAGE JSB CCPLK AREA LDA TPREL SAVE FOR RESET STA LWH4 FOR NEXT PASS LDA TBREL STA LWH3 CLA LOADX STA L01 * LDA LWH3 BP LINK LDB TBREL ADDRESSES JSB CLRLT LDA LWH3 STA TBREL RESTORE TBREL JSB CLIST BLANK MEMORY MAP BUFFER CLA CLEAR THE LIBRARY TRAP STA ADTRP WORDS STA LIBTP LDA AMLST AMLST = ADDR OF MEM MAP BUFFER STA AMAD SET CURRENT MEMORY MAP ADDRESS LDA HDFLG GET HEADING FORMAT FLAG STA TEMP2 SSA,RSS SKIP IF NEGATIVE (MAIN) ISZ AMAD INCR CURRENT MEM MAP ADDR LDA ID1,I GET NAME 1,2 STA AMAD,I SET NAME 1,2 IN MEMORY MAP ISZ AMAD INCR CURRENT MEMORY MAP ADDRESS LDA ID2,I GET NAME 3 4 STA AMAD,I SET NAME 3,4 IN MEMORY MAP ISZ AMAD INCR CURRENT MEMORY MAP ADDRESS LDA ID3,I GET NAME 5 AND M7400 ISOLATE UPPER CHAR IOR BLANK ADD BLANK TRN(OCT 40) STA AMAD,I SET NAME 5 IN MEMORY MAP LDA ID6,I PICK UP TYPE AND M7 MASK TO ACTUAL TYPE. STA LDTYP LDA ID5,I GET THE NAM RECORD STA DSKRD SAVE CURRENT DISC ADDRESS JSB DBIN GET THE NAM RECORD DBINT JSB ZLOAD LOADING? JMP LH7 NO * LDA L01 SZA 1ST PASS? JMP LH7 YES * ISZ TEMP2 NO - TEST TEMPORARY HDFLG JMP SUBHD * JMP LH8 * LH7 ISZ HDFLG TEST REAL THING JMP SUBHD SKIP PRIORITY OUTPUT FOR SUB * LH8 LDA ID6,I SET CURRENT LOAD TYPE AND M17 LOOK AT PRIMARY & REV BITS IFZ ***** BEGIN DMS CODE ***** CPA P5 DON'T CHANGE COMMON JMP COMOK FOR SEGMENTS (USE MAIN'S) LDB ID4,I THIS IS A MAIN STB COMSZ SET HIS COM SIZE AS LIMIT. ****** END DMS CODE ****** XIF LDB BGBND GET BACKGROUND COMMON BOUND CPA P1 IF FORGROUND RSS CPA P2 RSS CPA P11 OR BACKGROUND USING FORGROUND COMMON IFN *** BEGIN NON-DMS CODE *** RSS CPA P12 RSS CPA P13 NO TYPE 13'S IN RTE-III **** END NON-DMS CODE **** XIF LDB RTCAD USE FORGROUND COMMON ADDRESS STB COMAD SET THE COMMON BASE ADDRESS COMOK LDA DSKAD GET CURRENT DISK ADDRESS LDB L01 SZB,RSS IF 1ST PASS, STA DSKMN SAVE INITIAL MAIN DISK ADDRESS LDA PTYPE IF FOURCED SUBROUTINE yT AND M17 OR SSGA ROUTINE CPA P14 LOAD JMP SUBHD SEND SUB HEAD MAP * LDA LPAR GET LEFT PAREN (OCT 50) IOR AMAD,I CHANGE NAME 5, BLANK TO NAME 5,( STA AMAD,I SET NAME 5, LEFT PAREN IN MAP LDA NPRIO GET PRIORITY FROM THE NAM RECORD SZA,RSS IF ZERO SET LDA P99 TO 99 SZB,RSS UNLESS SYSTEM WHICH CLA SET TO ZERO STA CUPRI SET FOR THE ID-SEG GENERATION CMA,INA SET TO NEGATIVE FOR DECIMAL CONV LDB ATBUF GET MESSAGE ADDRESS JSB CONVD CONVERT TO DECIMAL/OCTAL LDA TBUF+1 GET HIGH TWO CHARACTERS STA MLIST+3 SET IN MAP LDA TBUF+2 GET 2 LEAST SIGNIFICANT DIGITS STA MLIST+4 SET PRIORITY IN MEMORY MAP LDA NINT2 SET UP THE TIME PARAMETERS ASL 4 FIRST THE RESOLUTION LDB NINT1 AND MULTIPLE BLS ASR 4 COMBINE STA MULR SET FOR ID SEG GENERATOR LDA NINT5 GET THE SECONDS MPY P100 CONVERT TO 10'S OF MS. ADA NINT6 ADD 10'S OF MS. STA OCTNO SAVE TEMP * LDA NINT3 GET THE HOURS MPY P60 CONVERT TO MIN. ADA NINT4 ADD MIN. MPY P6K CONVERT TO 10'MS CLE PREPARE FOR ADD ADA OCTNO ADD 10'S MS. SEZ,CLE IF OVERFLOW INB STEP HIGH ORDER PART ADA NDAY+1 SUBTRACT ONE DAY OF 10'S MS. SEZ,CLE IF OVER FLOW INB STEP HIGH ORDER DIGIT ADB NDAY DST TIME SAVE DOUBLE WORD TIME FOR ID-SEG. * SUBHD LDA TPREL GET CURRENT PROG RELOC ADDR LDB AMEM5 SET B = ADDR OF MEMORY MAP + 5 JSB CONVD CONVERT TO DECIMAL/OCTAL LDA MLIST PUT A ")" IN THE CPA BLNKS HIGH PART OF THE JMP SUBH2 ADDRESS IF NOT A SUBHEAD * LDA MLIST+5 I.E. IF MAIN ADA B4400 CONVERT BLANK TO ) O STA MLIST+5 RESTORE IT. SUBH2 LDA LBUF+1 GET RIC ALF,RAR ROTATE TO LOW A AND M7 ISOLATE RIC CPA P1 NAM RECORD? RSS YES - CONTINUE HLT 0B INVALID DISK RECORD LDA LBUF+6 GET PROGRAM LENGTH STA PLGTH SAVE PROGRAM LENGTH RAL,CLE,ERA REMOVE POSSIBLE SIGN BIT ADA TPREL COMPUTE THE LAST WORD ADDRESS ADA N1 LDB AMEM8 AND JSB CONVD CONVERT TO THE MAP IFN *** BEGIN NON-DMS CODE *** LDA TBREL GET THE CURRENT BP ADDRESS STA TPBRE AND SET FOR BP CODE LDB LBUF+7 ADVANCE LINK AREA ADB TBREL BEYOND THE PROGRAM STB A TEST FOR BP OVERFLOW ADA EOBP SUBTRACT LAST WORD +1 SSA,RSS IF NOT NEGATIVE JMP E16RR GO SEND MESSAGE **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** * * SET RELOCATION BASE FOR ORB STUFF SPC 1 LDB LBUF+7 GET SIZE OF BASE PAGE CODE LDA BPINC AND FIGURE OUT IF WE'RE GOING SSA UP OR DOWN IN BASE JMP SUBH3 PAGE. SPC 1 LDA TBREL GOING UP, SET STA TPBRE ORB BASE AT TBREL ADB TBREL INCREMENT LINK BASE LDA BPLMT SUBTRACT LIMIT CMA,INA FROM ADA B NEXT ADDR TO CHECK FOR JMP SUBH4 BASE PAGE OVERFLOW. SPC 1 SUBH3 CMB,INB GOING DOWN...SUBTRACT ORB LENGTH ADB TBREL FROM LINK BASE INB ADD ONE STB TPBRE TO GET ORB BASE. ADB N1 GET NEXT AVAILABLE LINK ADDR. LDA B CMA,INA SUBTRACT NEW BASE FROM LIMIT ADA BPLMT TO CHECK FOR OVERFLOW. SPC 1 SUBH4 SSA,RSS IF LIMIT IS EXCEEDED, WE JMP E16RR HAVE AN ERROR. ****** END DMS CODE ****** XIF CONLD STB TBREL BASE PAGE LDA TPBRE JSB SETBP SET PROGRAM BASE PAGE IMAGE TO -1 LDA LBUF GET RECORD SIZE ALF,ALF LOW ORDER A STA LBUF SAVE IN RIGHT HALF JSB ZLOAD LOADING? JMP NOLD NO, SKIP * LDA L01 FIRST PASS? SZA,RSS NO, DO MAP JMP NOMP YES, NO MAP * LDB LBUF5 THE SIXTH WORD IN LBUF ISZ LFLAG BUMP THE L FLAG NOP IN CASE OF LEAP LDA N11 NUMBER OF WORDS STA TCNT TO MOVE TO LBUF LDA AMLST ADDRESS OF NAME BUFFER STA WDCNT SAVE FOR POINTER LH1 LDA WDCNT,I GET NAME WORD, AND ADDRESS STA B,I STORE IN LBUF INB BUMP B ISZ WDCNT BUMP NAME ADDRESS ISZ TCNT ALL DONE? JMP LH1 NO, DO MORE * LDA BLNKS GET TWO BLANKS STA B,I PUT THEM IN LBUF BEFORE THE COMMENTS LDA LBUF GET RECORD SIZE ADA N5 REDUCE TO MAP LENGTH ALS TIMES 2 FOR CHARACTER COUNT LDB LBUF5 ADDRESS OF MAP AND COMMENTS JSB DRKEY,I PRINT ALL * * THE FOLLOWING ROUTINES LINK A PROGRAM THROUGH CURRENT PAGE * LINKS WHEN POSSIBLE. THIS IS POSSIBLE WHEN THE LENGTH * OF THE PROGRAM IS KNOWN AND WHEN THE PROGRAM IS NOT AN * ASSEMBLED TYPE 3 OR 5 PROGRAM. SPC 3 NOMP EQU * IFZ ***** BEGIN DMS CODE ***** LDA ID4,I COMPARE CMA,INA THIS MODULE'S COMMON ADA COMSZ DECLARATION TO MAIN'S SSA,RSS ERROR IF GREATER. JMP NOM2 LDA ERR54 JSB ERROR ****** END DMS CODE ****** XIF NOM2 LDA L01 1ST OF 2 PASSES? SSA JMP NOLD NO - 1 PASS ONLY * SZA,RSS IF PASS ONE JMP LH12 GO CHECK FOR OPTION SPC 1 LDA CPL1 PASS TWO SO SET UP THE NOW STA CPL2 KILL THE UPPER AREA JSB LNKS SET FOR DEFINING CODE JMP LH10 GO SET THE BOUNDRYS SPC 1 LH12 tJSB GETCP SET UP A CURRENT PAGE LINK AREA STA CPL1 USE FOR BOTH CLA AREAS STA CPL1H CLEAR THE COUNT WORDS STA CPL2H LIB 1 DOES OPERATOR WANT CURRENT PAGE RBL LINKS IF POSSIBLE? SSB IF YES - JMP LH222 GO SET UP * LH2 CCA NO - SW REG BIT 14=0 JMP LOADX RESTART SPC 1 LH222 LDA PLGTH SSA,RSS NO CURRENT PAGE LINKS LDA LDTYP IF ASSEMBLED TYPE 3 OR 5 CPA P3 RSS CPA P5 JMP LH2 * LDA TPREL GET ADDR STA B OF LAST WD IOR M1777 OF PAGE SPC 1 CMB,INB COMPUTE # WDS INB REMAINING ADB A ON PAGE STB TEMP2 SPC 1 LDA PLGTH COMPUTE # WDS RAL,CLE,ERA OF PROGRAM CMB,INB THAT FALL ADB A BEYOND THIS STB TEMP1 PAGE SPC 1 SSB PROGRAM FIT ON RSS THIS PAGE? SZB,RSS NO - SKIP JMP NOLOW YES GO SET UP THE HIGH AREA SPC 1 LDA TEMP2 COMPUTE MINIMUM OF: ARS HALF # WDS OF PROG CMB,INB ON CURRENT PAGE-OR- ADB A # WDS OF PROG ON SSB,RSS NEXT PAGE SPC 1 LDA TEMP1 DIVIDE THIS CLB MINIMUM BY DIV P4 FOUR SZA,RSS IF NON-ZERO, USE AS SIZE JMP NOLOW OF LOW CURRENT PG LINK BUFF RSS SPC 1 LH10 LDA CPL1H GET PASS ONE DEFINED LENGTH LDB LWH4 SET NEW STB LNK1,I LOWER LINK ADDRESS ADB A AND UPPER LIMIT STB TPREL OF LINK BUFFER STB LNK2,I (ALSO PROGRAM LOAD ADDRESS) JSB CLRCP CLEAR THE CURRENT PAGE IMAGE SPC 1 JSB GETCP GET ANOTHER CP LINK AREA LDA PLGTH GET PROGRAM LENGTH RAL,CLE,ERA STRIP POSSIBLE SIGPN BIT ADA TPREL ADD THE BASE ADDRESS STA LNK1,I SET ORGION OF HIGH LINK AREA IOR M1777 TOP IS INA FIRST WORD OF STA LNK2,I NEXT PAGE JSB CLRCP GO CLEAR THE ALLOCATED AREA CLA CLEAR THE UPPER COUNT WORD STA CPL2H * NOLD LDB TPREL GET PROGRAM RELOCATION BASE STB RELAD SET CURRENT RELOCATION ADDRESS LDA CURAL GET CURRENT LBUF ADDRESS ADA LBUF ADJUST FOR END OF NAM RECORD STA CURAL SET FOR END OF NAM RECORD LDA LCNT GET CURRENT LBUF COUNT ADA LBUF ADJUST FOR END OF NAM RECORD STA LCNT SET NEW CURRENT COUNT * * CLASSIFY ENT, EXT, DBL, END RECS * CLSRC LDA CURAL,I SAVE THE RECORD LENGTH FOR STA TBUF DBL SKIP ROUTINE JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDA CURAL,I GET SECOND WORD IN RECORD LDB A SAVE WORD IN B ALF,RAR ROTATE RIC TO LOW A AND M7 ISOLATE RIC CPA P2 ENT RECORD? JMP DENTR PROCESS ENT RECORD CPA P3 DBL RECORD? JMP DDBLR PROCESS DBL RECORD CPA P4 EXT RECORD? JMP DEXTR PROCESS EXT RECORD CPA P5 END RECORD? RSS YES - PROCESS END RECORD HLT 0B INVALID DISK RECORD * JSB ZLOAD LOADING? JMP CLSTX NO * NOLOW LDA L01 IF FIRST OF SSA,INA IF NOT CURRENT PAGE LINKING JMP PEND JUST GO END IT * CPA P1 IF PASS ONE JMP CPRST GO DO PASS TWO * * PASS TWO OUTPUT THE CP LINK AREAS AND UPDATE. * LDA CPL1 OUTPUT THE JSB OUTCP LOW AREA LDA CPL2 SET UP FOR THE JSB LNKS HIGH AREA LDA CPL2H GET THE NUMBER ALLOCATED ADA LNK1,I AND COMPUTE THE UPPER LIMIT STA LNK2,I SET THE ACTUAL VALUE LDA CPL2 NOW JSB OUTCP OUTPUT THE LINKS * PEND JSB DBSET GET ADDR OF NEXT WORD IN LBUF JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDA TPREL GET CURRENT PROG RELOCATION BASE ADA CURAL,I ADD RELOCATION ADDRESS LDB HDFLG GET HEADING FLAG SZB,RSS SKIP UNLESS MAIN STA PRENT SAVE PRIMARY ENTRY POINT FOR ID CLSTX JSB INLST INITIATE LSTX CLST JSB LSTX SET LST ADDRESSES JMP LSTCR END OF LST * LDA LST3,I GET WORD 3 OF LST (ORDINAL) AND M7400 ISOLATE UPPER CHAR - CLEAR ORD STA LST3,I SET NAME 5 IN LST JMP CLST CONTINUE CLEARING ORDINALS * LSTCR JSB ZLOAD WAS CURRENT PGM LOADED? JMP PLSCM NO SKIP ADDRESS UP DATE * LDA PLGTH GET PROGRAM LENGTH RAL,CLE,ERA SET E = SIGN ADA TPREL ADD PROGRAM RELOCATION BASE ADA CPL2H REFLECT ANY CURRENT PAGE LINKS STA TPREL ALLOCATED LIB 1 GET THE SWITCH LDA TBREL REG. AND THE CURRENT BP ADDRESS BLF,RBR IF BIT 13 SLB IS SET JSB BPLNR REPORT THE BP LINKAGE PLSCM JSB INIDX SCAN THE PLSCN JSB IDX IDENTS FOR MODULES JMP CLFLG LEFT TO LOAD NONE SO GO EXIT * LDA ID3,I GET THE FLAG WORD SLA,INA IF ALREADY LOADED JMP PLSCN TRY THE NEXT ONE * RAR,SLA,RAL IF MUST LOAD FLAG SET JMP ENTID GO LOAD IT * JMP PLSCN ELSE GO TRY NEXT IDENT. * * ENTID STA ID3,I SET THE LOADED FLAG JMP LOADN AND GO LOAD * CLFLG CCA FILL FINAL BSS ADA TPREL LDB A IF TPREL IS GREATER CMA,INA ADA MXABC,I THAN MXABC (LABDO HIGHWATERMARK) SSA,RSS JMP CLF2 CLA JSB LABDO CLF2 LDA TBREL UPDATE LDB A THE MAX BP CMB,INB ADDRESS IF ADB BPMAX NEEDED IFN *** BEGIN NON-DMS CODE *** ~T SSB STA BPMAX **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** * SET BASE PAGE HIGH WATER MARK SPC 1 LDA BPINC A=BP INCREMENT SSA UP OR DOWN?? JMP BPDEC DOWN, SEE IF LOWER SSB UP, SEE IF HIGHER JMP UPDAT YES, HIGHER SO UPDATE JMP BPCNT LOWER, CONTINUE BPDEC SSB DOWN, SEE IF LOWER JMP BPCNT NO, JUST CONTINUE UPDAT LDA TBREL YES, UPDATE STA BPMAX BPCNT EQU * ****** END DMS CODE ****** XIF LDA PTYPE GET CURRENT PROGRAM TYPE CPA P3 TYPE = BG DISK RESIDENT? JMP LOADS,I YES - DO NOT CLEAR LOADED FLAGS * JSB CLID3 CLEAR PROG-LOADED FLAGS JMP LOADS,I RETURN - ALL FLAGS CLEARED * IFN *** BEGIN NON-DMS CODE *** E16RR LDA ERR16 GET BP OVERFLOW JSB ERROR MESSAGE ON THE TTY CCB ADB LWSBP USE MAX WE HAVE JMP CONLD AND CONTINUE LOAD **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** E16RR LDA ERR16 PRINT BP OVFLOW JSB ERROR MESSAGE LDB BPINC USE LIMIT CMB,INB +1 OR -1 AS BASE ADB BPLMT PAGE BASE (DEPENDS ON WHETHER * WE'RE GOING UP OR DOWN * ALLOCATING LINKS JMP CONLD ****** END DMS CODE ****** XIF CPRST LDB CPL1H SET UP THE NEW TPREL ADB LWH4 USE SUM OF OLD AND USED LINKS STB TPREL SET NEW ADDRESS JMP LOADX GO START THE FINAL PASS SPC 1 ERR54 ASC 1,54 SKP * PROCESS ENT/EXT RECORDS DENTR CCA,RSS SET ENT FLAG AND SKIP DEXTR CLA SET EXT FLAG STA NXFLG SAVE ENT/EXT FLAG LDA B GET NO. ENTRIES IN EXT/ENT AND M37 ISOLATE SYMBOL COUNT CMA,INA STA EXCNT SET SYMBOL COUNTER JSB DBSET 5 GET ADDR OF NEXT WORD IN LBUF JSB DBSET GET ADDR OF NEXT WORD IN LBUF NXSYM LDA CURAL,I GET NAME 1,2 STA TBUF SAVE NAME 1,2 IN TEMP BUFF JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDA CURAL,I GET NAME 3,4 STA TBUF+1 SAVE NAME IN TEMP BUFF JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDA CURAL,I GET NAME 5 STA TBUF+2 SAVE NAME IN TEMP BUFF JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDB ATBUF GET ADDRESS OF SYMBOL JSB LSTS SET LST ADDRESSES HLT 0B ENT/EXT NOT FOUND IN LST * LDA NXFLG GET ENT/EXT FLAG SZA,RSS SKIP IF ENTRY JMP EXT1 PROCESS EXT * JSB ZLOAD IF NOT LOADING CURRENT PGM JMP NLENT SKIP LINK AND MAP * LDA LST4,I IF THIS ENT IS SELF DEFINING ADA N5 SKIP IF PROGRAM SSA OR BASE PAGE RELOCATABLE JMP NLENT GO DO SELF DEFINING THING * LDA TBUF+2 GET THE RELOCATION AND P7 INDICATOR ADA MRTAD RELOCATE THE LDB A,I SYMBOL ADB CURAL,I ADD CURRENT RELOCATION VALUE STB OPRND SAVE ABS ENTRY PT. ADDRESS STB LST5,I SET VALUE IN THE LST LDA L01 IF 1ST OF TWO SZA,RSS PASSES, SKIP JMP NLENT THE MAP AND FIX UP * LIA 1 GET SWITCH REGISTER SSA,RSS SKIP - SWITCH 15 UP (LIST ENTS) JMP MLENT SUPPRESS PRINTING OF MAP * JSB CLIST CLEAR MEMORY MAP BUFFER LDA BLAST GET BLANK, ASTERISK STA MLIST+1 SET IN MAP LDA LST1,I GET NAME 1,2 STA MLIST+2 SET IN MEMORY MAP LDA LST2,I GET NAME 3,4 STA MLIST+3 SET IN MEMORY MAP BUFFER LDA LST3,I GET NAME 5 AND M7400 ISOLATE UPPER CHAR IOR BLANK SET LOWER CHARACTER = BLANK STA MLIST+4 SET NAME 5 IN MEM MAP LDA LST5,I GET ABSOLUTE ENTRY PT. ADDRESS LDB uAMEM5 GET ADDRESS OF MESSAGE JSB CONVD CONVERT TO DECIMAL/OCTAL LDA P16 LDB AMLST GET ADDRESS OF MEM MAP BUFFER JSB DRKEY,I PRINT ENTRY POINT MLENT JSB DAFIX FIX UP ALL REFERENCES TO THIS SYMBOL NLENT JSB DBSET GET ADDR OF NEXT WORD IN LBUF JMP EXEND PROCESS NEXT SYMBOL * EXT1 LDA TBUF+2 GET ORDINAL STA LST3,I SET ORDINAL IN LST * LDA LST4,I GET IDENT ADDRESS SZA IF ENTRY NOT DEFINED CPA P2 RSS CPA P3 OR SELF-DEFINING RSS THEN CPA P4 SKIP THE LOAD JMP LIBTS AND JUST CONTINUE * STA TIDNT SET ID ADDR FOR IDX LDA ID1 GET CURRENT IDENT ADDRESS STA TBUF SAVE CURRENT IDENT ADDRESS JSB IDX SET IDENT ADDRESSES HLT 0B IDENT NOT FOUND IN LIST LDA ID6,I GET M/S, TYPE STA TBUF+1 SAVE M/S, TYPE LDA ID3 GET PROGRAM USAGE FLAG ADDRESS STA TBUF+2 SAVE USAGE FLAG ADDRESS LDA TBUF GET CURRENT IDENT ADDRESS STA TIDNT SET CURRENT IDENT ADDR JSB IDX SET IDENT ADDRESSES HLT 0B CURRENT IDENT NOT FOUND IN LIST LDA TBUF+1 GET M/S, TYPE FOR EXT RAL,CLE,ERA SET E = M/S AND M177 ISOLATE TYPE IFZ ***** BEGIN DMS CODE ***** CPA P30 JUMP IF SSGA MODULE JMP CKSSC ****** END DMS CODE ****** XIF SZA,RSS IF SYSTEM REFERENCE JMP EXT23 CONTINUE * AND M7 KEEP JUST THE LOW TYPE CPA P6 TYPE = LIBRARY? JMP LIBUT YES - TEST FOR LOADING * LDB P6 ELSE IF CURRENT TYPE CPB LDTYP IS 6 THEN JMP CALER ERROR, TYPES 6,14,30 MAY * ONLY CALL TYPES 0,6,14,30 * EXT23 CPA P7 TYPE = UTILITY? JMP LIBUT YES - TEST FOR LOADING * SEZ SKIP - NOT MAIN PROGRAM JMP EXEND IGNORE PROGRAM CALL LIBUT LDA TBUF+2,I GET PROGRAM USAGE FLAG SLA SKIP - PROGRAM NOT LOADED JMP EXEND OMIT PROGRAM LIST ENTRY * LDB PTYPE IF BACK GROUND SEGMENT CPB P5 THEN IOR P4 SET THE BS FLAG IOR P2 SET THE MUST LOAD FLAG STA TBUF+2,I RESTORE THE FLAG TO THE IDENT * EXEND ISZ EXCNT SKIP - ALL SYMBOLS PROCESSED JMP NXSYM NO - PROCESS NEXT SYMBOL * JMP CLSRC NO - CLASSIFY NEXT RECORD * CALER LDA ERR15 SET ERROR CODE - ILLEGAL CALL JSB ERROR PRINT THE NO-NO JMP EXEND TEST FOR ANOTHER IFZ ***** BEGIN DMS CODE ***** * MAKE SURE PROGRAM HAS SSGA PRIVILEGES CKSSC LDB SSGAF GET FLAG SZB IF SET, THEN JMP EXEND JUST CONTINUE LDA ERR52 ELSE SEND ERROR MSG JSB ERROR JMP EXEND ERR52 ASC 1,52 ****** END DMS CODE ****** XIF LIBTS LDA LIBFG LOADING CORE RES. LIB? CLE,SZA,RSS JMP EXEND NO SO SKIP * CLB YES SET UP LDA LST1 THE LIB REPLACEMENT CODE CPA $PRIV REFERENCE TO $PRIV? CLB,CCE,INB YES SET FLAGS CPA $RENT REFERENCE TO $RENT? CCB,CCE YES SET FLAGS SEZ,RSS IF NEITHER JMP EXEND TREAT NORMALLY * STB LIBTP ELSE SET THE TRAP FLAG STA TRPLB AND LST ADDRESS JMP EXEND AND CONTINUE * * SKIPR LDA TBUF SKIP A DBL RECORD ALF,ALF GET SAVED RECORD LENGTH CMA,INA AND SET NEGATIVE INA SKIP THE LENGTH STA TBUF SET FOR COUNTER SKIPX JSB DBSET SKIP A WORD ISZ TBUF DONE? JMP SKIPX NO DO NEXT ONE. * JMP CLSRC YES GO GET NEXT RECORD * * PROCESS DBL RECORDS * DDBLR JSB ZLOAD IF NOT LOADING JMP SKIPR SKIP TO END * LDA B GET COUNT AND M77 ISOLATE COUNT CMA,INA STA EXCNT SET INSTRUCTION COUNT LDA B COMPUTE THE RECORDS AND M100 RELOCATION LDB TPREL GET THE MAIN RELOCATION BASE SZA,RSS IF BASE PAGE LDB TPBRE REPLACE WITH BP BASE STB DBLAD AND SET THE RECORD BASE ADDRESS JSB DBSET GET ADDR OF NEXT WORD IN LBUF JSB DBSET GET ADDR OF NEXT WORD IN LBUF * LDB CURAL,I GET RELOCATION ADDRESS ADB DBLAD RELOCATE THE RECORD ADDRESS STB DBLAD SAVE RELOCATION ADDRESS LDB ID7,I GET FIRST DBL ADDRESS ISZ PLFLG SKIP - FIRST DBL RECORD JMP DBL0 IGNORE SUBSEQUENT RECORDS IFN *** BEGIN NON-DMS CODE *** CLA CLEAR THE BSS FLAG STA BSSDP LDA L01 IF CURRENT PAGE LINKING THEN SZA MUST NOT SKIP OR WE LOSE THE LINKS LDA ID6,I GET TYPE AND M7 ISOLATE TYPE CPA P2 TYPE = RT DISK RESIDENT? RSS CPA P3 TYPE = BG DISK RESIDENT? RSS CPA P5 TYPE = BG SEGMENT? RSS JMP DBL0 SET PGMAD = 0 FOR RESIDENTS **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** * COME HERE ON FIRST BSS OF MODULE * IF MODULE IS A SEGMENT THEN DON'T * STORE BSS ON DISK SINCE IT ONLY * INDICATES ADDRESSES SHARED WITH THE MAIN SPC 1 CLA STA BSSDP ZERO LOAD POINT OFFSET LDA ID6,I AND M7 GET PRIMARY MODULE TYPE CPA P5 RSS ADJUST LOAD PT FOR SEG JMP DBL0 START FROM REL LOC 0 * FOR ALL OTHERS ****** END DMS CODE ****** XIF STB BSSDP SAVE INITIAL PROG DISPLACEMENT ADB ABCOR,I DISC /CORE STB ABCOR,I BASE ADDRESS STB MXABC,I AND THE MAX ADDRESS DBL0 JSB DBSET GET ADDR OF NEXT WORD IN LBUF DBL1 LDB CURAL,I GET RELOCATION BYTIES STB REKEY SAVE FOR RELOCATION TYPE LDA N5 STA INSCN SET RELOCATION BYTE COUNT JSB DBSET GET ADDR OF NEXT WORD IN LBUF * DBL2 LDA REKEY GET RELOCATION BYTES ALF,RAR ROTATE TO LOW A STA REKEY SAVE FOR NEXT INSTRUCTION WORD AND M7 ISOLATE CURRENT BYTE CPA P4 EXTERNAL REFERENCE? JMP DBL4 YES - GET LINK ADDRESS * CPA P5 MEMORY REFERENCE? JMP DBL5 YES - CHECK FOR INDIRECT LINK * CPA P6 BYTE ADDRESS? JMP DBL6 YES - GO CACULATE THE ADDRESS. * ADA RBTAD ADD RELOCATION BASE TABLE ADDR LDB A,I GET RELOCATION BASE ADB CURAL,I ADD CURRENT INSTRUCTION WORD CLA CLEAR THE INSTRUCTION JMP DBL42 AND GO JOIN THE TYPE 4 PROCESSOR * DBL33 JSB DBSET GET ADDR OF NEXT WORD IN LBUF ISZ EXCNT SKIP - LAST INSTRUCTION OUT RSS NO - CONTINUE JMP CLSRC YES - CLASSIFY NEXT RECORD ISZ DBLAD INCR DBL RELOCATION ADDRESS ISZ INSCN SKIP IF NEW RELOCATION BYTE JMP DBL2 NO - PROCESS NEXT INSTRUCTION JMP DBL1 YES - GET NEXT RELOCATION BYTE * * * PROCESS DBL EXT RECORD * DBL4 LDA CURAL,I GET CURRENT DBL WORD AND NT2K CLEAR THE CURRENT PAGE BIT CLB SET OFFSET TO ZERO DBL42 STA INSTR SAVE THE INSTRUCTION WORD JMP DBL54 GO TO TYPE 5 RECORD HANDLER * DBL5 LDA CURAL,I GET CURRENT DBL WORD AND NT2K CLEAR THE CURRENT PAGE BIT DBL56 STA INSTR SAVE INSTRUCTION CODE JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDB CURAL,I GET ADDRESS TO B LDA INSTR GET THE INSTRUCTION ALF,RAL SET E ELA IF A BYTE ADDRESS LDA INSTR GET INSTRUCTION CODE AND P3 ISOLATE THE MR FIELD ADA MRTAD INDEX INTO THE BASE TABLE ADB A,I RELOCATE THE ADDRESS 8 SEZ IF BYTE ADDRESS THEN ADB A,I DOUBLE THE ADDRESS LDA INSTR GET THE INSTRUCTION WORD AGAIN ARS,ARS MOVE ORDINAL TO LOW A. * * DBL TYPE 4 JOINS HERE * DBL54 AND M377 ISOLATE THE ORDINAL STA FIX4,I SAVE ORDINAL IN THE FIX UP TABLE STB FIX3,I SAVE THE OFFSET/ ADDRESS LDA INSTR GET THE INSTRUCTION AGAIN AND M1760 ISOLATE THE OP CODE AND STA FIX2,I PUT IT IN THE FIXUP TABLE LDA DBLAD GET THE RECORD ADDRESS STA FIX1,I SET THE CORE ADDRESS IN THE TABLE LDA FIX4,I GET THE ORDINAL SZA,RSS IF NONE JMP DBL57 GO OUTPUT THE INSTRUCTION * JSB LSTOS LOOK FOR ORDINAL IN LST'S HLT 0 HALT IF NOT THERE * LDA LST1 SET THE LST ENTRY IN THE LDB LIBFG GET THE LIB FLAG SZB,RSS IF NOT LOADING CORE RES LIB JMP DBL45 JUST CONTINUE * CPA TRPLB ELSE IS THIS A REFERENCE TO $RENT OR $PRIV? RSS YES SKIP JMP DBL45 NO, CONTINUE * LDA $LIBR YES USE $LIBR INSTEAD STA TLST JSB LSTX HLT 0 LDA FIX1,I GET THE CORE ADDRESS INA AND SET THE ADDRESS STA ADTRP TRAP LDA N3 STA ADTPF SET FOR FIRST ADDRESS DBL44 LDA LST1 GET NEW LST ENTRY AND CONTINUE DBL45 STA FIX4,I FIX UP TABLE LDA LST4,I GET THE DEFINITION ADDRESS CPA P3 IF PREDEFINED RSS THEN GO CPA P4 SEND JMP DBL57 THE INSTRUCTION * CPA P2 IF SYMBOL IS IN COMMAN JMP DBL58 GO ADDJUST FOR COMMAN * LDA LST5,I ELSE IF SYMBOL CCE,SZA IS DEFINED JMP DBL57 GO SEND IT * DBL60 LDA L01 IF NOT LOADING SZA SKIP THE FIX ENTRY JSB SFIX UNDEFINED SYMBOL MAKE FIX ENTRY CCA MAKE SURE FIX ENTRY IS STA FIX1,I FLAGED PTRNROPERLY JMP DBL33 GO GET NEXT ENTRY * DBL57 LDA FIX1,I GET THE ADDRESS CPA ADTRP THIS A TRAP ADDRESS RSS YES SKIP JMP DBL61 NO, DO NORMAL LOAD * LDA ADTPF GET TRAP REASON FLAG INA,SZA,RSS LAST TRAP OF THREE? JMP ADDX1 YES GO DO X+1 THING * INA,SZA,RSS X ADDRESS? JMP ADDX YES GO DO X ADDRESS THING * CLA MUST BE P+1 TRAP STA FIX4,I SET LST FIX ADDRESS TO ZERO ISZ ADTPF SET FOR X ADDRESS NEXT TRAP LDB FIX3,I GET ADDRESS FROM FIX LST STB ADTRP SET FOR NEXT LDB FIX3 SAVE THE FIX ENTRY ADDRESS STB FIXTP SO WE CAN FIX IT STA FIX3,I SET TO NOP INCASE NOT RENT LDA LIBTP GET FLAG THAT TELLS INA,SZA,RSS IF RENT JMP DBL60 GO MAKE FIX ENTRY * DBL61 JSB DFIX SEND THE INSTRUCTION JMP DBL33 GO GET THE NEXT ENTRY * DBL58 LDA COMAD ENTRY POINT IS IN COMMON ADA FIX3,I SO FIX THE STA FIX3,I THE OFFSET JMP DBL57 AND OUTPUT THE INSTRUCTION * DBL6 LDA CURAL,I GET THE INSTRUCTION WORD IOR M2000 SET THE INTERNAL BYTE FLAG BIT JMP DBL56 JOIN THE DBL 5 CODE * ADDX STA FIX3,I ZAP THE OFFSET ISZ ADTRP SET FOR NEXT TRAP ISZ ADTPF TRAP NEXT ADDRESS (X+1) LDA $LIBX REPLACE THIS ONE WITH STA TLST $LIBX JSB LSTX SET IT UP HLT 0 LDA JSB SET INSTRUCTION STA FIX2,I TO A JSB JMP DBL44 GO SEND IT * NT2K OCT 175777 JSB JSB 0 * ADDX1 STA ADTRP CLEAR ALL TRAPS STA ADTPF XT LDB LIBTP GET TYPE FLAG INB,SZB IF $PRIV JMP DBL61 JUST SEND THE WORD * STA LST1 ELSE CLEAR THE LST ADDRESS LDA FIX3,I SET THIS DEF STA FIXTP,I IN THE OTHER FIX ENTRY JSB DAFIX GO SEND BOTH INSTRUCTIONS JMP DBL33 GET THE NEXT INSTRUCTION * * ZLOAD NOP TEST FOR LOADING CURRENT PGM LDA LIBFG LIB LOADING? SZA,RSS JMP *+3 NO; THEN LOADING - GO STEP ADDRESS LDA P6 YES; CURRENT PGM TYPE=6? CPA LDTYP ISZ ZLOAD LIB AND SIX OR NOT LIB STEP ADDRESS JMP ZLOAD,I RETURN SPC 1 TIME BSS 2 MULR NOP FIXTP NOP TRPLB NOP LIBTP NOP ADTRP NOP ADTPF NOP SPC 3 * * LSTOS - SEARCHES LST'S FOR ONE WITH ORDINAL MATCHING * FIX4,I * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * * RETURN SEQUENCE: CONTENTS OF A AND B DESTROYED. * (N+1): CURRENT LST POINTERS SET UP FOR LAST LST. * ORDINAL NOT FOUND. * (N+2): CURRENT LST POINTERS SET TO LST CONTAINING * DESIRED ORDINAL. * LSTOS NOP JSB INLST SET TLST TO 1ST LST LDB TLST PICK UP LST POINTER RSS SKIP INCR FIRST TIME SPC 1 LSTO2 ADB P3 POINT TO NEXT LST CPB PLST IF AT END OF LST'S JMP LSTO4 THEN EXIT. ADB P2 ELSE POINT TO ORD. IN LST LDA FIX4,I AND COMPARE WITH FIXUP. XOR B,I AND M377 IF LOW BYTE DOESN'T SZA MATCH, THEN TRY NEXT JMP LSTO2 LST ENTRY. SPC 1 ADB N2 MATCH..SET ADDR OF LST SPC 1 LSTO4 STB TLST SET ADDR OF CURRENT LST JSB LSTX GO SET LST POINTERS JMP LSTOS,I NO MATCH - N+1 EXIT ISZ LSTOS JMP LSTOS,I MATCH - N+2 EXIT SPC 3 * DFIX DOES THE FIX UP POINTED TO BY THE CURRENT FIX UP * TABLE AND LST ENTRYS. DFIX IS USED FOR ALL * INSTRUCTIONS AN]D MAY BE CALLED ONLY * AFTER THE SYMBOL (IF ANY) IS DEFINED. * * CALLING SEQUENCE: * * SET UP FIX1-4 AND LST1-5 FOR THE ENTRY * * JSB FIX * * RETURN THE FIX ENTRY IS FREE, A/B MEANING LESS * DFIX NOP CCB,CLE SET THE NOT BP LINK STB BPONL FLAG LDA FIX4,I IF NO SZA,RSS LST ADDRESS JMP VFIX USE ZERO VALUE * LDA LST5,I GET THE SYMBOL VALUE LDB LST4,I GET THE SYMBOL TYPE CPB P4 IS REPLACEMENT SYMBOL JMP ZFIX GO DO REPLACEMENT * VFIX LDB FIX2,I GET THE BYTE BLF,RBL BIT TO RBL,CLE,SLB,ERB E AND ADA A DOUBLE THE ADDRESS IF SET BLF,BLF RESTORE B BLF,RBR WITHOUT THE BYTE BIT STB FIX2,I AND RESET IN THE TABLE ADA FIX3,I COMPUTE THE MEMORY ADDRESS STA OPRND AND SAVE AND M0760 EXTRACT THE PAGE NUMBER STA PAGNO AND SAVE SZA,RSS IF BASE PAGE OP JMP CPFIX GO TREAT AS CURRENT PAGE * LDA FIX1,I GET THE INSTR. ADDRESS AND M0760 EXTRACT THE PAGE STA OPPAG SAVE IT LDB FIX4,I GET THE LIST ADDRESS SZB IF EXT REFERENCE JMP WFIX USE A BP LINK * CPA PAGNO IF SAME PAGE AS OPERAND JMP CPFIX GO DO CURRENT PAGE TRICK * WFIX LDA FIX2,I GET THE INSTRUCTION CLE,ELA ZAP THE INDIRECT BIT SZB IF EXT REFERENCE JMP IDEF GO USE A LINK * SZA,RSS IF NOT A MRF INSTRUCTION JMP CPFIX THEN DO THE DEF TRICK * IDEF LDB OPRND GET THE OPERAND SEZ IF INDIRECT REFERENCE ADB MSIGN ADD THE SIGN BIT STB OPRND RESET IT LDA FIX4,I IF EXTERNAL REFERENCE SZA THEN STA BPONL SET FOR BASE PAGE LINK ONLY JSB BPSCN GET A LINK ADDRESS IOR MSIGN A = ADDRESS, SET INDIRECT BIT * XFIX STA B ʷ SAVE THE ADDRESS AND M1177 =B101777 PURGE THE PAGE BITS CPA B IF THERE WERE SOME RSS THEN IT'S A CP LINK SO IOR M2000 SET THE CP BIT * YFIX IOR FIX2,I INCLUDE THE INSTRUCTION ZFIX LDB L01 IF NOT LOADING SZB,RSS THEN JMP AFIX SKIP THE DISC WRITE * LDB FIX1,I GET THE CORE ADDRESS JSB LABDO OUTPUT THE WORD AFIX CCA FREE THE FIX UP TABLE ENTRY STA FIX1,I JMP DFIX,I AND EXIT * CPFIX LDA OPRND CP/BP/DEF - GET OP ADDRESS LDB FIX2,I IF CLE,ELB DEF SZB,RSS THEN JMP YFIX JUST PICK UP THE INDIRECT. * LDB PAGNO IF A BASE PAGE REFERENCE SZB OR IF LDB FIX4,I NOT AN EXT SZB THEN DO DIRECT LINK ISZ BPONL ELSE SET TO USE BP LINK (SKIPS) JMP XFIX USE STANDARD LINK * JMP WFIX USE BP LINK * OPPAG NOP BPONL NOP SPC 3 * SFIX FINDS THE FIRST FREE FIX UP TABLE ENTRY. * * CALLING SEQUENCE: * * JSB SFIX * SFIX NOP JSB FIXX INITILIZE THE FIX UP TABLE SFIX1 JSB FIX SET ADDRESSES JMP SFIX2 EXIT NEW ENTRY * LDA FIX1,I THIS ENTRY FREE? SSA,RSS FREE IF NEGATIVE JMP SFIX1 NO KEEP LOOKING * JMP SFIX,I EXIT * SFIX2 LDA TFIX IF NEW ENTRY STA PFIX UPDATE THE END CCB OF THE LIST STB FIX1,I AND CLEAR THE ENTRY JMP SFIX,I EXIT SPC 3 * DAFIX DOES ALL FIX UP FOR THE CURRENT LST ENTRY * * CALLING SEQUENCE: * * SET UP THE LST ENTRY * * JSB DAFIX * DAFIX NOP JSB FIXX SET UP THE SCAN DAFI1 JSB FIX SET ADDRESSES JMP DAFI2 END OF LIST GO TO EXIT CODE * LDA FIX1,I IF NULL ENTRY SSA THEN JMP DAFI1 IGNOR IT * LDA FIX4,I GET LST ENTRY CPA LST1 THIS ENTRY? JSB DFIX YES DO THE FIX JMP DAFI1 GET NEXT FIX UP * DAFI2 JSB SFIX SET UP A FREE FIX UP ENTRY JMP DAFIX,I AND EXIT SKP * * FIX ADDRESS ROUTINES * * FIX AND FIXX SET UP THE FIX1 - FIX4 ADDRESSES * * FIXX INITILIZES THE ADDRESS TO THE FIRST ENTRY * * FIX GET THE NEXT ENTRY * * CALLING SEQUENCE: * * JSB FIXX A,B IGNORED A LOST ON RETURN, B SAVED * FIXX NOP LDA BFIX SET TFIX TO FIRST STA TFIX ENTRY JMP FIXX,I RETURN * * * CALLING SEQUENCE: * * JSB FIX A,B IGNORED A LOST B SAVED ON RETURN * * RETURN TO P+2 IF OK, TO P+1 IF BEYOND END OF DEFINED FIX UPS * FIX NOP LDA TFIX GET CURRENT LOCATION CPA PFIX END OF LIST? RSS YES SKIP THE INDEX ISZ FIX STEP TO ALTERNATE RETURN ADDRESS STA FIX1 SET UP INA THE STA FIX2 ADDRESSES INA STA FIX3 INA STA FIX4 INA SET NEXT ADDRESS STA TFIX IN TFIX CMA,INA CHECK FOR MEMORY OVERFLOW ADA PIDNT SSA,RSS IF OUT OF MEMORY SKIP JMP FIX,I ELSE RETURN TO CALLER * JMP LSERR ELSE GO TO ERROR ROUTINE HED RTE GENERATOR LOAD UTILITY SUBROUTINES * CLEAR PROGRAMS-LOADED FLAGS * * CLID3 CLEARS THE USAGE FLAGS TO ENSURE THAT PROGRAMS WILL BE * RE-LOADED AGAIN IF CALLED MORE THAN ONCE. THIS IS ESSENTIAL * FOR ALL UTILITY PROGRAMS AND USER SUBROUTINES, BUT MUST NOT * BE DONE FOR SYSTEM PROGRAMS, LIBRARY PROGRAMS, OR MAIN USER * PROGRAMS. BOTH THE USAGE FLAG IN THE IDENT ENTRY AND THE * SYMBOL VALUES FOR ALL ENTRY POINTS IN THE PROGRAM ARE CLEARED. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB CLID3 * RETURN: CONTENTS OF A AND B ARE DESTROYED. * CLID3 NOP LDB P3 GET THE STANDARD FLAG LDA P5 mCPA PTYPE PROG = BG SEGMENT? LDB P7 YES - GET BS FLAG BITS STB CURAP SET CURRENT PROG FLAG BITS JSB INIDX INITILIZE THE IDENT SCANNER TRID3 JSB IDX GET THE NEXT IDENT. JMP CLID3,I IF NONE THEN EXIT - DONE * LDA ID6,I GET M/S,TYPE RAL,CLE,ERA SET E IF MAIN AND M177 ISOLATE TYPE SZA,RSS IF SYSTEM JMP TRID3 FORGET IT * AND M7 ISOLATE FURTHER CPA P6 TYPE = LIBRARY? JMP TRID3 THEN - DO NOT CHANGE FLAG * CCB PRESET B FOR IMPOSSIBLE TYPE CPA P7 IF LIB TYPE CLB,CLE SET NOT MAIN FLAG (B=SYS TYPE) CPB PTYPE IF SYS REF TO LIB JMP TRID3 DON'T CLEAR IT (ONE COPY FOR SYS) * SEZ IF MAIN JMP TRID3 FORGET IT * LDA ID3,I GET USAGE FLAG AND P7 ISOLATE THE USAGE FLAG CPA CURAP IF ONE THAT WE ARE AFTER RSS SKIP JMP TRID3 ELSE TRY THE NEXT ONE * XOR ID3,I ZAP THE USAGE FLAGS STA ID3,I AND RESTORE THE WORD JSB INLST INITIALIZE LSTX CLSUT JSB LSTX SET CURRENT LST ADDRESSES JMP TRID3 TRY NEXT IDENT * LDA LST4,I GET IDENT ADDRESS CPA ID1 ENT/EXT BELONGS TO CURRENT PROG? CLB,RSS YES - CONTINUE JMP CLSUT TRY NEXT LST ENTRY * STB LST5,I CLEAR SYMBOL VALUE JMP CLSUT CONTINUE CLEARING BP LINK ADDR. SPC 2 * THE GETCP ROUTINE SETS UP AND INITILIZES A NEW CP LINK AREA * * CALLING SEQUENCE: * * JSB GETCP * * RETURN A = LNK1,CPL2 ADDRESS * GETCP NOP LDA CPL2 USE CURRENT TOP JSB LNKS SET ADDRESSES CLA FOOL THE LINK ROUTINE STA CPL2 JSB LNK SET ADDRESS FOR NEXT AREA CLA SET AREA TO ZERO SIZE STA LNK1,I STA LNK2,I LDA LNK3 SET THE IMAGE ADDRESS [ INA STA LNK3,I LDA LNK1 SET NEW TOP AND A FOR EXIT STA CPL2 JMP GETCP,I RETURN SKP * * GET BP LINK ADDR, SET BP VALUE * * BPSCN SCANS THE CURRENT ALLOCATED LINKS * FOR A VALUE EQUAL TO THE CURRENT OPERAND. IF SUCH A VALUE * IS FOUND, THE ADDRESS OF THE OPERAND IS RETURNED * IN THE A-REGISTER. OTHERWISE, A NEW LINK WORD IS * RESERVED AND THE ADDRESS OF THIS WORD RETURNED IN A. * IN THIS CASE THE OPERAND WORD IS SET IN THE ALLOCATION * IMAGE AREA. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB BPSCN * * RETURN: * A = BP LINK ADDRESS FOR CURRENT OPERAND * B = DESTOYED * BPSCN NOP * JSB LNKX INITILIZE THE LINK MAPPER BPSC2 JSB LNK SET UP THE FIRST AREA JMP BPSC4 IF NON LEFT GO ALLOCATE * JSB SCN SCAN THE AREA FOR A LINK JMP BPSC2 IF NON FOUND TRY NEXT AREA * JMP BPSCN,I ELSE RETURN THE LINK * BPSC4 JSB ALLOC NON ALLOCATED SO ALLOCATE ONE JMP BPSCN,I AND RETURN SKP * * SCAN AREA FOR SAME OPERAND * * THE SCN SUBROUTINE CONTROLS THE SCAN FOR A GIVEN OPERAND * IN THE CURRENT LINK SECTION. * * CALLING SEQUENCE: * SET UP LNK1, LNK2, LNK3 TO POINT TO THE CURRENT LINK AREA * SET OPRND TO THE VALUE DESIRED, AND BPONL TO -1 FOR ANY AREA * AND TO 0 FOR BASE PAGE ONLY. * * JSB SCNBP * * RETURN: * P+1: LINK NOT FOUND * P+2: LINK FOUND (A = ADDR OF OPERAND) * SCN NOP LDA LNK1,I GET THE LOWER ADDRESS STA LNK AND SAVE IT LDB BPONL GET THE BASE PAGE ONLY FLAG AND M0760 ISOLATE THE PAGE OF CURRENT AREA SZA,RSS IF BP THEN CCB SET B FOR OK SSB,RSS IF BP ONLY AND NOT BP JMP SCN,I RETURN NOT FOUND * SZA CHECK IF RIGHT PAGE (BP IS ALWAYS RIGHT) CPA OPPAG RSS GOV#OD LINK AREA JMP SCN,I NOT RIGHT PAGE, EXIT * LDB LNK3,I GET THE IMAGE ADDRESS TO B SCN1 LDA LNK GET THE ACTUAL ADDRESS TO A CPA LNK2,I END OF AREA? JMP SCN,I YES, EXIT NOT FOUND * LDA B,I NO, GET THE VALUE CPA OPRND THIS IT? JMP SCN2 YES, GO RETURN IT * INB NO SET FOR NEXT ENTRY ISZ LNK JMP SCN1 * SCN2 LDA LNK GET THE CORE ADDRESS ISZ SCN STEP TO THE RETURN ADDRESS JMP SCN,I RETURN, LINK FOUND, ADDRESS IN A SKP * * SET UP LNK AREA * * LNK, LNKS, AND LNKX MANAGE THE LINK AREA. * THIS AREA IS COMPOSED OF TRIPLETS AND LINK AREA * IMAGES AS FOLLOWS: * * WORD1 THE ACTUAL CORE ADDRESS OF THE LINK AREA * WORD2 THE ACTUAL CORE ADDRESS OF THE LAST WORD+1 OF THE AREA * WORD3 THE ADDRESS OF THE LOADRS IMAGE OF THE AREA * * THE FIRST THREE ENTRIES ARE FOR BASE PAGE AS FOLLOWS: * * AREA 1 THE CORE RESIDENT SYSTEM BASE PAGE AREA * AREA 1 THE BACK GROUND CORE RESIDENT AREA * AREA 3 THE CURRENT PROGRAMS BASE PAGE AREA * * FOR THESE AREA THE IMAGE IS IN THE DUMMY BASE PAGE * FOR ALL OTHER ENTRIES (I.E. FOR CURRENT PAGE LINK AREAS) * THE IMAGE FOLLOWS THE THREE WORD DEFINITION OF THE AREA. * * IN ALL CASES THE LAST DEFINED AREA IS THE ONE THAT HAS A * WORD1 ADDRESS OF CPL2, WHICH IS USUALLY THE HIGH * CURRENT PAGE LINK AREA FOR THE CURRENT PROGRAM * * LNKX INITILIZES THE SCANNING OF THE LINKAGE AREA * LNK SETS UP LNK1, LNK2, LNK3 FOR THE NEXT ENTRY * P+1 RETURN INDICATING THERE IS NO NEXT ONE. * P+2 INDICATING THAT THE SET UP WAS DONE. * * LNKS SETS UP LNK1, LNK2, LNK3 GIVEN THAT THE FIRST WORD ADDRESS * IS KNOWN (AND PASSED IN THE A REGISTER) * LNKX NOP LDA TLNK GET INITIAL ADDRESS STA LNK1 SET IN LNK1 JMP LNKX,I RETURN SPC 3 LNK NOP LDA LNK1 GET CURRENT ADDRESS CPA CPL2 IF LAST ENTRY JMP LNK,I RETURN, END OF LST * LDA A,I GET THE ACTUAL ADDRESS AND M0760 ISOLATE THE PAGE ADDRESS SZA,RSS IF BASE PAGE DO THE BP THING JMP LNKB * LDA LNK1,I ELSE CACULATE THE ADDRESS OF CMA,INA THE NEXT ADA LNK2,I ENTRY ADA LNK3,I BY SKIPPING OVER THE IMAGE LNKA JSB LNKS SET UP THE NEW AREA ISZ LNK SET OK RETURN ADDRESS JMP LNK,I RETURN * LNKB LDA LNK1 FOR BASE PAGE ADA P3 USE NEXT THREE JMP LNKA WORD AREA. SPC 3 LNKS NOP STA LNK1 SET THE LINK POINTERS UP INA STA LNK2 INA STA LNK3 JMP LNKS,I AND RETURN SPC 3 TLNK DEF TBLNK SKP * * ALLOCATE NEW LINK WORD * * THE ALLOC SUBROUTINE ESTABLISHES ALL THE LINKAGE ADDRESSES. * IF THE ALLOCATED LINK WORD FALLS IN THE SYSTEM COMMUNICATION AREA, * A DISGNOSTIC IS PRINTED. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB ALLOC * * RETURN: * A = ALLOCATED BP LINK ADDRESS * B = DESTROYED * ALLOC NOP LDB OPRND SAVE THE OPERAND STB ALSAV LOCALLY CLB SET OPERAND STB OPRND TO ZERO TO CALL SCN LDA CPL1 SET UP TO SCAN THE LOW CP LINK AREA JSB LNKS JSB SCN SCAN THE AREA RSS IF NOT ALLOCATED SKIP JMP ALLO1 ELSE GO SET UP * LDA CPL2 TRY THE HIGH AREA JSB LNKS SET IT UP JSB SCN SCAN IT CLA,INA,RSS IF NOT FOUND SKIP JMP ALLO1 ELSE GO SET IT UP IFN *** BEGIN NON-DMS CODE *** STA LNK1 FOOL THE COUNTER LDA TBREL CHECK FOR OVER FLOW CPA LWSBP TOO MUCH? JMP ER16 YES GO SEND MESSAGE * ISZ TBREL STEP FOR NEXT TIME LDB A COMPUTE THE ADB ADBP IMAGE OF THE BASE PAGE **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** * SET UP NEW LINK IN BASE PAGE AREA SPC 1 STA LNK1 SKIP FLAG = 1 LDA TBREL DOES NEW LINK CPA BPLMT EQUAL LIMIT ADDR JMP ER16 YES,ERROR LDB A NO, SAVE LINK ADDR ADA BPINC UPDATE TO NEXT STA TBREL SET NEXT LINK ADDR LDA B GET REAL ADDR OF NEW LINK ADB ADBP AND IMAGE ADDR OF NEW LINK SPC 1 * TBREL CONTAINS POINTER TO NEXT FREE BPLINK (STARTS * AT 2 FOR DR'S, FSYBP FOR MR'S, AND LWSBP FOR SYS, * LIB, AND SSGA MODULES). BPINC SET TO -1 WHEN * LOADING SYS, TABLES, LIB, & SSGA, AND TO +1 * OTHERWISE. BPLMT SET TO FSYBP (ABOVE TRAP CELLS) * FOR SYS,LIB,TABLES,AND SSGA, AND TO LOWEST * SYSTEM LINK FOR OTHERS. ****** END DMS CODE ****** XIF ALLO1 STA TCHAR SET THE ADDRESS LDA ALSAV GET THE OPERAND STA OPRND RESTORE IT STA B,I SET IT IN THE IMAGE AREA LDA LNK1 IF ALLOCATION FROM CPA CPL1 CP LOW AREA ISZ CPL1H STEP THE COUNT CPA CPL2 IF FORM THE HIGH AREA ISZ CPL2H STEP ITS COUNT LDA TCHAR SET THE ADDRESS IN A JMP ALLOC,I AND RETURN * ER16 LDA ERR16 GET THE ERROR CODE JSB ERROR SEND IT CLA RETURN ZERO AS THE LINK JMP ALLOC,I * ALSAV NOP SKP * * PACK THE CP LINK AREA * * CCPLK PACKS THE CURRENT PAGE LINK AREA TO GET RID OF LINK * AREAS THAT ARE NO LONGER ACTIVE. * * CALLING SEQUENCE: * * LDA CURRENT PAGE ADDRESS * JSB CCPLK * * RETURN REGISTERS MEANING LESS * * CCPLK WILL DELETE ALL LINK AREAS THAT ARE ABOVE * CPLS AND REFER TO AN AREA ON A PAGE BELOW THE PAGE * ADDRESS IN A ON ENTRY. IT WILL ALSO DELETE ALL * ENTRIES FOR ZERO LENGTH AREAS. * CCPLK NOP ANLD M0760 SAVE THE CMA,INA PAGE STA CPAG ADDRESS LDA CPLS GET THE LOWEST ENTRY TO SAVE STA TCCP4 SAVE FOR LAST VALID ENTRY JSB LNKS SET UP THE LNK AREA JSB LNK GET THE FIRST POSSIBLE PURGE AREA JMP CCPLK,I IF NONE THEN EXIT * LDA LNK1,I IF THIS AREA CPA LNK2,I IS OF ZERO LENGTH JMP CCPL0 GO SET UP * AND M0760 ELSE IF AREA IS ABOVE OR EQUAL ADA CPAG TO THE SAVE PAGE AREA SSA,RSS THEN JMP CCPLK,I EXIT - NO PACK NEEDED * CCPL0 LDA LNK1 SET UP THE NEXT AVAILABLE CCPL1 STA TCCP1 POINTER CCPL5 JSB LNK GET THE NEXT ENTRY JMP CCPL3 IF NONE GO HANDLE * LDA LNK1,I IF STILL CPA LNK2,I A ZERO ENTRY JMP CCPL5 REJECT THE ENTRY AND M0760 ISOLATE THE PAGE ADDRESS ADA CPAG IF STILL SSA BELOW THE SPECIFIED PAGE JMP CCPL5 REJECT THE ENTRY * LDA TCCP1 KEEP THE AREA STA TCCP4 SET LAST AREA POINTER STA TCCP2 SET MOVE POINTER LDA LNK2,I SET UP THE CMA,INA ADA LNK1,I MOVE STA TCCP3 COUNT LDA LNK1,I SET WORDS STA TCCP2,I ONE ISZ TCCP2 LDA LNK2,I TWO STA TCCP2,I ISZ TCCP2 LDA TCCP2 AND INA STA TCCP2,I THREE LDB LNK3,I MOVE CCPL2 ISZ TCCP2 THE LDA B,I IMAGE STA TCCP2,I TO THE NEW LOCATION INB ISZ TCCP3 JMP CCPL2 * LDA LNK1 AND CPA CPL2 CPL2 JMP CCPL3 IF END GO DO SPECIAL * LDA TCCP2 UPDATE INA FOR THE NEXT ENTRY JMP CCPL1 AND GO DO IT * CCPL3 LDB TCCP4 SET UP STB CPL2 CPL2, THE UPPER LIMIT JMP CCPLK,I AND EXIT SPC 2 TCCP1 NOP TCCP2 NOP TCCP3 NOP TCCP4 NOP CPAG NOP SKP * * % CLEAR THE CURRENT PAGE * * CLRCP CLEARS THE CURRENT PAGE LINKING IMAGE POINTED AT BY * THE CURRENT LNK ENTRY. * CLRCP NOP LDA LNK2,I COMPUTE CMA,INA NUMBER ADA LNK1,I OF STA LNK WORDS TO CLEAR SZA,RSS IF ZERO THEN JMP CLRCP,I EXIT * LDA LNK3,I STA LNKX GET ADDRESS OF AREA CLRC1 CLA CLEAR STA LNKX,I A WORD ISZ LNKX STEP TO NEXT ONE LDA LNKX CHECK FOR ADA CPLIM OVERFLOW OF SSA,RSS IMAGE AREA JMP TRUN GO SHORTEN IF OVERFLOW * ISZ LNK STEP COUNTER JMP CLRC1 IF NOT DONE DO NEXT ONE * JMP CLRCP,I RETURN * TRUN LDA LNK3,I CACULATE MAX ADA CPLIM AREA SIZE CMA,SSA,INA IF NEGATIVE CLA SET TO ZERO ADA LNK1,I ADD BASE ADDRESS STA LNK2,I SET NEW UPPER END JMP CLRCP,I AND RETURN SKP * * OUTPUT CURRENT CURRENT PAGE * * OUTCP OUTPUTS THE AREA SPECIFIED BY LNK1, LNK2, AND LNK3 * TO THE DISC. * * CALLING SEQUENCE: * * SET UP LNK1, LNK2, LNK3 * JSB OUTCP * * RETURN REGISTERS MEANINGLESS * OUTCP NOP JSB LNKS SET UP THE LNK AREA LDA LNK1,I GET THE CMA,INA NUMBER OF ADA LNK2,I WORDS TO OUTPUT TO CMA,INA,SZA,RSS A AND IF ZERO JMP OUTCP,I RETURN * STA WDCNT SET THE COUNT LDA LNK3,I GET THE ADDRESS OF THE FIRST WORD STA TBUF AND SET IT LDB LNK1,I GET THE CORE ADDRESS TO BE USED OUTC2 LDA TBUF,I GET A WORD JSB LABDO SEND IT TO THE DISC ISZ TBUF STEP THE WORD ADDRESS ISZ WDCNT AND THE COUNT DONE? JMP OUTC2 NO DO THE NEXT WORD * JMP OUTCP,I YES RETURN SKP * * READ RELOCATABLE RECORD CONTROL * * DBSET ESTRABLISHES THE ADDRESS OF THE NEXT WORD OF THE RELOCATABLE * RECORD IN LBUF. IF LBUF HAS BEEN PROCESSED, IT ISSUES A CALL TO * DBIN TO READ ANOTHER PACKED RELOCATABLE RECORD. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB DBSET * * RETURN: CONTENTS OF A AND B ARE DESTROYED * DBSET NOP ISZ CURAL INCR CURRENT LBUF ADDRESS ISZ LCNT SKIP - END OF LBUF JMP DBSET,I RETURN JSB DBIN READ NEXT RELOCATABLE REC JMP DBSET,I RETURN HED RTE GENERATOR READ RECORDS FROM DISK * * READ PACKED RELOCATABLE RECS * * THE DBIN SUBROUTINE READS THE PACKED RELOCATABLE RECORDS FROM * THE DISK AS SPECIFIED BY THE DISK ADDRESS AT DSKRD. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB DBIN * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * DBIN NOP LDA DSKRD GET CURRENT DISK ADDRESS LDB DBIN GET RETURN ADDRESS CPB DBINS IF NAM RECORD READ SSA AND SYSTEM SUBCHANNEL SKIP JMP DBIN1 ELSE GO READ LDB DSKA GET MAX ADDRESS WRITTEN ON CMB IF GREATER THAN OR EQUAL ADB A THIS READ ADDRESS, SSB,RSS IF POSITIVE - OK JMP DBIN1 SO CONTINUE * LDA ERR38 ELSE - WE LOST THE RECORD JSB IRERR SO BOMB * DBIN1 LDB ALBUF GET ADDRESS OF LBUF STB CURAL SET CURRENT LBUF ADDRESS JSB DISKI READ RECORD FROM DISK LDA DSKRD GET DISK ADDRESS STA DSKRX -SAVE CURRENT ADDRESS. JSB DISKA INCR DISK ADDRESS STA DSKRD SET NEXT DISK ADDRESS LDA N64 STA LCNT SET CURRENT LBUF COUNT JMP DBIN,I RETURN SPC 1 DBINS DEF DBINT ADDRESS OF NAM RECORD READ RETURN SPC 3 ERR15 ASC 1,15 ILLEGAL CALL BY TYPE 6 PGM ERR16 ASC 1,16 BP LINKAGE AREA FULL BLNKS ASC 1, BLANKS BLAST ASC 1, * BLANK,ASTERISK LPAR OCHYT 50 LEFT PAREN SPC 1 HED RTE GENERATOR GENERATE INT ENTRY, KEYWD,ID SEG * * GENERATE INT ENTRY,KEYWD,ID SEG * * GENID GENERATES THE CURRENT ID SEGMENT AND KEYWORD * FOR THE PROGRAM LOADED. IN ADDITION, IT GENERATES THE * LINKAGE REQUIRED IN THE INTERRUPT TABLE FOR THOSE PROGRAMS * WHICH ARE TO BE SCHEDULED UPON RECEIPT OF AN INTERRUPT. * * CALLING SEQUENCE: * A = 0 (GENERATE SHORT ID SEGMENT) * -1 (GENERATE LONG ID SEGMENT) * -2 (GENERATE BLANK LONG ID SEGMENT) * B = IGNORED * JSB GENID * * RETURN: CONTENTS OF A AND B ARE DESTROYED * * NOTE: CHANGED FOR RTE-III, BUT COMPATIBLE WITH RTE-II. * ABS ADDR OF ID SEGMENT IN TARGET SYSTEM IS SAVED * IN IDENT WORD 8 FOR LATER ACCESS TO ID-SEG. * GENID NOP STA PLFLG SAVE ID SEGMENT LENGTH FLAG CPA N2 IF BLANK GEN JMP BLID GO SEND THE KEYWORD SPC 1 ****************** NEW FOR RTE-III ********************* LDB SYSAD GET START ADDR FOR ID-SEG LDA PLFLG IS THIS A SHORT SZA,RSS ID-SEGMENT?? ADB #IREG YES, ADD OFFSET FOR I-REGS STB SCH3 SAVE START ADDR IN A TEMP STB SYSAD AND UPDATE BASE. STB CURAI UPDATE OUTID PTR TOO. ******************************************************* SPC 1 * * GENERATE INT ENTRY FOR USER SYS * LDA AILST GET THE ADDRESS OF INT IMAGE STA CURAL SET CURRENT INT ADDRESS LDA CINT GET NO. OF INT ENTRIES CMA,INA,SZA,RSS SKIP - INT NOT EMPTY JMP STKEY GENERATE KEYWORD, ID SEGMENT STA TCNT SAVE TOTAL INT COUNT GETIT LDA CURAL,I GET CURRENT WORD IN INT CMA,INA TEST NEGATIVE ENTRIES FOR ILIST CPA IMAIN EQUAL TO MAIN IDENT ADDR? RSS YES - CONTINUE JMP NOTPN IGNORE REF IF NOT CURRENT MAIN * LDA SYSAD GET ID SԑEG ADDRESS CMA,INA GET 2'S COMPLEMENT FOR INT ENTRY LDB AILST COMPUTE THE INT CORE CMB,INB ADDRESS ADB CURAL = ILST OFFSET PLUS ADB AINT ACTUAL CORE ADDRESS JSB LABDO SENT THE ENTRY TO THE DISC NOTPN ISZ CURAL STEP TO THE NEXT ENTRY ISZ TCNT SKIP - INT EXHAUSTED JMP GETIT ANALYZE NEXT INT ENTRY * * GENERATE KEYWORD STKEY LDA IMAIN GET MAIN IDENT ADDRESS STA TIDNT SET ADDRESS FOR IDX JSB IDX SET IDENT ADDRESSES HLT 0 NO IDENT FOUND SPC 1 LDB SYSAD POINT TO ID SEGMENT LDA ID1 GET IDENT POINTER CPA SCH1 SCHEDULE PGM? STB SCH4 YES - SAVE ITS ID ADDRESS BLID LDA SYSAD GET THE ID-ADDRESS TO A LDB CURAK AND THE CURRENT CORE ADDRESS JSB LABDO TO B AND OUTPUT TO THE DISC STB CURAK SET THE NEW ADDRESS LDB SYSAD GET THE ADDRESS LDA PLFLG GET THE ID SEGMENT LENGTH FLAG ADB P22 ADJUST FOR NEXT ID SEGMENT ADDR SZA SKIP - SHORT ID SEGMENT ADB P6 ADJUST FOR LONG ID SEGMENT STB SYSAD SET NEXT ID SEGMENT ADDRESS * * GENERATE ID SEGMENT * LDA PLFLG IF FLAG = -2 FOR CPA N2 BLANK OUTPUT, JMP GENID,I EXIT SPC 1 ************************* NEW FOR RTE-III ******************** LDA KEYAD SAVE KEYWORD CMA OFFSET FOR ADA CURAK LATER ACCESS TO ID-SEG. STA ID8,I ************************************************************** LDB N6 JSB ZOUT OUTPUT ZEROES TO ID SEGMENT LDA CUPRI GET THE CURRENT PRIORITY JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA PRENT GET PRIMARY ENTRY POINT JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDB N2 JSB ZOUT OUTPUT ZEROES TO ID SEGMEN9RZXTT LDA SCH3 GET ADDRESS OF CURRENT ID SEG uZ INA STEP TO PRAM LIST JSB OUTID OUTPUT B REG TO ID SEGMENT CLA SEND E/O REGS TO JSB OUTID THE ID SEGMENT LDA ID1,I GET NAME 1,2 JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA ID2,I GET NAME 3,4 JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA ID6,I GET TYPE AND M7 ISOLATE TYPE STA B SAVE TYPE IN B LDA ID3,I GET NAME 5 AND M7400 ISOLATE NAME 5 IOR B ADD TYPE TO NAME 5 JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER CLA PRESET FOR DORMANT LDB ID1 IF THIS PGM TO BE CPB SCH1 SCHEDULED CLA,INA SET SCHEDULED FLAG JSB OUTID SET WORD IN ID CLA SET TIME LINK JSB OUTID TO ZERO AND OUTPUT LDA MULR GET RESOLUTION CODE, EXEC MULT JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA TIME GET LOW PART OF TIME JSB OUTID OUTPUT LS TO ID SEG LDA TIME+1 GET HIGH HALF JSB OUTID OUT MS HALF TO ID SEG LDB N2 ZEROS TO JSB ZOUT ID SEG 21 AND 22 ISZ PLFLG SKIP - PUTOUT LONG ID SEGMENT JMP GENID,I RETURN - SHORT ID SEGMENT * LDA PPREL GET CURRENT PROG RELOC ADDRESS ADA BSSDP ADD INITIAL PROG DISPLACEMENT JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA TPREL GET CURRENT RELOCATION ADDRESS CMA,INA CHECK ADA LWASM MEMORY OVERFLOW SSA,INA,SZA OK IF POS OR -1 JMP ER18 YES GO SEND THE BITCH * LDA TPREL NO SEND THE UPPER LIMIT GENI9 JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA PBREL GET LOW BP RELOCATION ADDR JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA TBREL GET HIGH BP RELOCATION ADDR JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA DSKMN GET INITIAL MAIN DISK ADDRESS JSB OUTID  OUTPUT WORD TO ID SEGMENT BUFFER CLA JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER JMP GENID,I RETURN - ID SEGMENT OUT * SPC 1 ER18 LDA ERR18 SEND ERROR 18 JSB ERROR MEMORY OVERFLOW LDA LWASM USE LAST WORD OF MEMORY INSTEAD JMP GENI9 GO FINISH THE ID-SEGMENT SKP * * OUTPUT ZERO TO IDBUF * * ZOUT PUTS OUT ZEROES TO THE ID SEGMENT BUFFER. * * CALLING SEQUENCE: * A = IGNORED * B = NO. OF ZEROES TO GO OUT (NEG.). * JSB ZOUT * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * ZOUT NOP STB TCNT SAVE NO. OF ZEROES TO GO OUT CLA JSB OUTID OUTPUT ZERO TO IDBUF ISZ TCNT SKIP - ALL ZEROES OUT JMP *-3 CONTINUE ZERO OUTPUT TO IBUF JMP ZOUT,I RETURN SPC 2 GNSID NOP GENERATE SHORT SEGMENT ID-SEGMENTS STA PLFLG SAVE THE FLAG LDB SKEYA GET THE KEYWORD LDA SIDSA ADDRESS AND ITS CONTENTS JSB LABDO SEND THE KEY WORD TO THE DISC STB SKEYA SET THE NEW KEYWORD ADDRESS LDB SIDSA GET THE ID- ADDRESS ADB P9 ADDJUST FOR NEXT TIME STB SIDSA AND SAVE ADB P2 ADDJUST FOR ADDRESS OF CURRENT ID LDA PLFLG THIS A CPA N2 BLANK SHORTY? JMP BLSID YES GO DO BLANK THING * LDA PRENT NO GET THE PRYMARY ENTRY POINT JSB LABDO SEND IT TO THE DISC LDA IMAIN GET THE IDENT STA TIDNT TO CURRENT JSB IDX HLT 0 BETTER BE ONE LDA ID1,I GET NAME 1,2 JSB LABDO SEND TO THE DISC LDA ID2,I GET NAME 3,4 JSB LABDO SEND IT LDA ID3,I GET NAME 5 AND M7400 MASK IOR P21 SET TYPE AND SHORT FLAG JSB LABDO SEND IT TO THE DISC LDA BSPAD GET THE MEMORY ADDRESS ADA BSSDP ADDJUST FOR LEADING BSS JSB LABDkeO SEND MAIN 1 LDA TPREL GET AND CMA,INA CHECK FOR MAIN MEMORY ADA LWASM OVER FLOW SSA,INA,SZA IF OVER FLOW JMP BLSI3 GO REPORT IT * LDA TPREL OK SO PUT IT OUT BLSI0 JSB LABDO SEND MAIN 2 LDA BSBAD GET AND JSB LABDO SEND BP 1 LDA TBREL GET AND JSB LABDO SEND BP 2 LDA DSKMN GET DISC ADDRESS BLSI2 JSB LABDO JMP GNSID,I RETURN * BLSID ADB P3 FOR BLANK LDA P16 SET THE SHORT BIT ONLY JMP BLSI2 GO SEND IT. * BLSI3 LDA ERR18 SEND ERROR MESSAGE STB SIDS2 SAVE POINTER INTO ID SEG JSB ERROR LDB SIDS2 RESTORE POINTER LDA LWASM USE LAST WORD OF MEMORY INSTEAD JMP BLSI0 GO FINISH THE ID-SEGMENT * SIDSA NOP SKEYA NOP SIDS2 BSS 1 SKP * * OUTPUT ID SEGMENT WORD TO IBUF * * OUTID PACKS THE WORDS FOR THE ID SEGMENTS IN THE ID SEGMENT * BUFFER AND WRITES THE BUFFER ON THE DISK WHEN IT CONTAINS * 64 WORDS. * * CALLING SEQUENCE: * A = CURRENT ID SEGMENT WORD * B = IGNORED * JSB OUTID * * RETURN: CONTENTS OF A AND B ARE DESTROYED * OUTID NOP LDB CURAI GET THE CURRENT ID-SEGMENT ADDRESS JSB LABDO SEND THE WORD TO THE DISC STB CURAI SET THE ADDRESS FOR NEXT TIME JMP OUTID,I RETURN HED RTE GENERATOR OUTPUT ABSOLUTE PROGRAM WORD * * OUTPUT ABSOLUTE PROGRAM WORD * * LABDO PUTS OUT THE CURRENT ABSOLUTE CODE WORD FOR THE PROGRAM * BEING LOADED. IT FILLS THE GAPS WITH ZERO CODES IF THE * CURRENT WORD FALLS BEYOND THE HIGHEST PREVIOUSLY GENERATED * WORD. * * LABDO WORKS FROM A TABLE OF THREE WORDS WHICH DEFINE * THE CURRENT CODE SEGMENT'S DISC ADDRESS. THIS TABLE IS * AS FOLLOWS: * * ABDSK,I IS THE BASE DISC ADDRESS OF THE CURRENT CODE SEGMENT * ABCOR,I IS THE BASE CORE ADDRESS OF THE CURREN T CODE SEGMENT * MXABC,I IS THE MAX CORE ADDRESS OBTAINED SO FAR IN THE SEGMENT * * MXABC,I SHOULD BE INITILIZED TO ABCOR,I AND WILL BE UPDATED BY * THIS ROUTINE AS THE LOAD ADVANCES. * * THIS ROUTINE HAS NO RESTRICTIONS ON BACKING UP AND OVERLAYING. * * CALLING SEQUENCE: * A = CURRENT ABSOLUTE CODE WORD * B = CORE ADDRESS OF THE WORD * JSB LABDO * * RETURN: A-REG HAS PREVIOUS CONTENTS OF MODIFIED WORD. * B-REG HAS CORE ADDRESS PLUS ONE * LABDO NOP SSB IF LESS THAN ZERO THEN JMP LABDO,I OVER FLOW OF MEM SO IGNOR * STB CASAV SAVE THE CORE ADDRESS STA INSAV AND THE CODE WORD ADB L2000 IF ADDRESS SSB IS ON THE JMP LABBP BASE PAGE GO DO SPECIAL * LDA ABCOR SAVE CURRENT BASE PRAM STA LABTM IN LOCAL TEMP LDB A,I IF THE CURRENT CORE LDA P5 ADDRESS IS LESS CPA PTYPE THAN THIS BASE AND SEG. LOAD CMB,INB,RSS JMP LAB01 NOT A SEG LOAD * ADB CASAV IF BOTH CONDITIONS TRUE SSB THEN JSB USER SET UP TO FIX MAIN. LAB01 LDB CASAV RESTORE THE CORE ADDRESS CMB,INB COMPUTE OFFSET FROM OLD ADB MXABC,I MAX INB AND STB LABSK SET THE SKIP COUNT (-# TO SKIP) LDA MXABC,I GET THE CURRENT MAX INA PLUS ONE SSB,RSS IF NOT SKIPPING LDA CASAV USE GIVEN ADDRESS LDB ABCOR,I AND COMPUTE CORE CMB,INB ADDRESS OFSET ADA B FROM THE BASE ADDRESS SSA DIAGOSTIC HALT HLT 66B SHOULD NEVER BE NEGATIVE CLB PREPARE TO DIVIDE DIV P64 DIVIDE BY THE SECTOR SIZE ADB ADBUF SET DBUF OFFSET STB CURAD SET ADDRESS FOR TSTEL * STA B SAVE THE SECTOR COUNT LDA ABDSK,I GET THE BASE DISC ADDRESS CMB,INB,SZB,RSS SET THE COUNT SNEGATIVE JMP FSTAD IF ZERO USE FIRST ADDRESS * STB ABCNT SET THE CALL COUNTER LABSA JSB DISKA BUMP THE DISC ADDRESS ISZ ABCNT THE SPECIFIED NUMBER JMP LABSA OF TIMES * FSTAD STA NEWDA SET THE NEW DISC ADDRESS CPA OLDDA IF SAME AS OLD JMP LABIC SECTOR IS IN CORE * LDA OLDDA GET THE OLD ADDRESS LDB ADBUF AND BUFFER ADDRESS SSA,RSS IF REAL DISC ADDRESS JSB DISKO WRITE THE BUFFER LDB LABSK GET THE SKIP COUNT CMB,INB SET POSITIVE LDA ADBUF IF FIRST WORD OF BUFFER CPA CURAD AND NOT BACKING SSB UP RSS JMP LABRD SKIP THE READ * LDB ADBUF READ IN THE SECTOR LDA NEWDA TO BE MODIFIED JSB DISKI LABRD LDA NEWDA UPDATE THE DISC STA OLDDA ADDRESS LABIC LDA LABSK GET THE SKIP COUNT SSA,RSS IF NONE TO SKIP JMP LABOU JUST OPUTPUT THE WORD * LABFI CLA ELSE FILL JSB TSTEL WITH ZEROS ISZ LABSK DONE? JMP LABFI NO DO NEXT WORD * LABOU LDA INSAV GET THE WORD JSB TSTEL OUTPUT IT STB LBSAV SAVE PRIOR CONTENTS OF WORD LDA CASAV GET THE CORE ADDRESS LDB A IF NEW CMB,INB MAXIMUM ADB MXABC,I THEN SSB SET STA MXABC,I SET IT LDA LABTM RESET JSB SETDS THE PRAMETERS LDA OLDDA IF NEW MAX CMA,INA DISC ADDRESS ADA DSKAD THEN LABEX LDB CASAV INB SSA,RSS SKIP RETURN JMP LABX2 * LDA OLDDA AND STA DSKAD UP DATE THE DISC ADDRESS LABX2 LDA LBSAV SET PRIOR CONTENTS OF WORD JMP LABDO,I AND THEN RETURN SPC 2 LABBP LDB CASAV GET THE CORE ADDRESS ADB ADBP ADJUST FOR DUMMY BASE PAGE ADDRESS LDA B,I RETURN OLD STA LBSAV CONTENTS g LDA INSAV OF WORD. STA B,I SET THE WORD CLA SET TO FOURCE EXIT JMP LABEX AND GO EXIT SPC 2 LABTM NOP NEWDA NOP OLDDA OCT -1 LABSK NOP INSAV NOP CASAV NOP ABDSK NOP ABCOR NOP MXABC NOP LBSAV NOP USED HERE AND IN TSTEL * TO RETURN OLD VALUE OF * MODIFIED WORD. * SKP * * SETDS SETS ABDSK,MXABC,ABCOR TO A,A+1,A+2 * FOR USE BY LABDO * SETDS NOP STA ABCOR SET INA THE STA MXABC ADDRESS INA FOR STA ABDSK THE ABS OUTPUT ROUTINE JMP SETDS,I RETURN SPC 3 * USER SETS UP THE LABDO SPECIFICATION ADDRESSES FOR * USER WORK * * CALLING SEQUENCE * * JSB USER * USER NOP LDA DUSER GET DEF TO USER ARRAY JSB SETDS AND SET IT UP JMP USER,I RETURN SPC 3 * USERS SETS UP THE LABDO SPECITICATION ADDRESSES FOR * USER CODE USING THE CURRENT DISC ADDRESS,AND PPREL * FOR THE CORE ADDRESS. * * CALLING SEQUENCE: * * JSB USERS * USERS NOP JSB USER SET UP THE ADDRESSES JSB SET SET UP THE ADDRESSES JMP USERS,I RETURN SPC 2 * SET SETS THE CURRENT PPREL AND DISC ADDRESSES IN THE * CURRENT LABDO SPECIFICATION TABLE * * CALLING SEQUENCE * * JSB SET * SET NOP LDA DSKAD GET CURRENT DISC ADDRESS STA ABDSK,I SET IT IN THE SPEC BUFFER LDA PPREL GET THE CURRENT CORE ADDRESS STA ABCOR,I AND SET STA MXABC,I IT UP JMP SET,I RETURN SPC 2 * SEGS SETS UP A NEW LABDO AREA FOR SEGMENTS * THE SAME AS USERS. * SEGS NOP JSB SEG GO SET THE ADDRESSES JSB SET SET THE PRAMATERS JMP SEGS,I RETURN SPC 2 * SEG IS THE SEGMENT VERSION OF USER * SEG NOP LDA DSEGS GET THE ADDRESS  JSB SETDS SET IT UP JMP SEG,I RETURN SPC 3 * SYS SETS UP THE LABDO SPECIFICATION ARRAY TO POINT AT THE * SYSTEM TABLE. * * CALLING SEQUENCE: * * JSB SYS * SYS NOP LDA DLRMA GET THE SYSTEM SPEC. ADDRERSS JSB SETDS SET UP THE ADDRESSES JMP SYS,I RETURN SPC 2 DLRMA DEF LRMAN DUSER DEF *+1 BSS 3 DSEGS DEF *+1 BSS 3 SKP * * TEST FOR ABSOLUTE BUFFER FULL * * TSTEL PUTS OUT THE CURRENT ABSOLUTE BUFFER WHEN IT * CONTAINS 64 WORDS OF CODE. IN ADDITION, IT CHECKS FOR * * CALLING SEQUENCE: * A = CURRENT WORD * B = IGNORED * JSB TSTEL * * RETURN: A DESTROYED, B HAS OLD CONTENTS * OF ADDRESSED WORD. * TSTEL NOP LDB CURAD IF THE ADB N64 CURRENT ADDRESS CPB ADBUF IS THE END OF THE BUFFER JMP TSTFL THEN IT IS FULL * TSTOU LDB CURAD,I SAVE OLD WORD CONTENTS STA CURAD,I SET THE WORD ISZ CURAD BUMP THE ADDRESS JMP TSTEL,I AND RETURN * TSTFL STA REMDO SAVE THE CURRENT WORD LDA OLDDA GET THE DISC ADDRESS LDB ADBUF AND BUFFER ADDRESS AND STB CURAD SET THE NEW BUFFER ADDRESS JSB DISKO OUTPUT THE BUFFER LDA OLDDA UP DATE JSB DISKA THE DISC STA OLDDA ADDRESS LDA REMDO RESTORE THE CODE WORD JMP TSTOU AND GO OUTPUT IT * ERR18 ASC 1,18 MEMORY OVERFLOW SKP * * OUTPUT REST (IF ANY) OF ABS. REC * * REMDO PUTS OUT THE CURRENT SECTOR IF IT CONTAINS ANY WORDS OF * ABSOLUTE CODE. THIS IS NORMALLY DONE ONLY AT THE END OF THE GEN * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB REMDO * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * REMDO NOP LDA OLDDA GET THE CURRENT DISC ADDRESS LDB ADBUF AND THE BUFFER ADDRESS SSA 8 IF A GOOD ADDRESS JSB DISKO OUTPUT THE CODE JSB BPDSA UPDATE THE DISC ADDRESS JMP REMDO,I RETURN SPC 3 * BPDSA ADVANCES THE DISK ADDRESS TO THE NEXT EVEN * DISC ADDRESS ASSUMING THE CURRENT DISC ADDRESS * IS NOT AVAILABLE. THIS IS NORMALLY DONE * AFTER EACH MAIN IS LOADED AND BEFORE THE BASE * PAGE IS OUTPUT. * * CALLING SEQUENCE: * * JSB BPDSA DOES NOT USE A/B RETURNS A=CURRENT DISC ADDRESS * BPDSA NOP LDA DSKAD BUMP JSB DISKA THE DISC ADDRESS STA DSKAD AND RESET IT JSB DSKEV MAKE SURE IT IS EVEN JMP BPDSA,I RETURN SKP YE/NO NOP ANALYZE YES/NO RESPONSES LDA N3 RETURN: P+1 ERROR JSB GETNA P+2 NO JSB GETAL &+3 YES SZA MORE THEN 3 CHAR JMP YE/ER ERROR LDB TBUF GET RESPONSE CPB YCHAR YE? LDA P2 YES - SET RETURN OFFSET FOR YES CPB NCHAR WAS IT NO? CLA,INA YES - SET RETURN FOR YES SZA,RSS STILL ZERO? JMP YE/ER YES - NOT YES OR NO - ERROR ADA YE/NO ADJUST RETURN JMP A,I RETURN YE/ER JSB INERR ERROR - SEND MESSAGE JMP YE/NO,I AND TAKE ERROR EXIT SPC 1 YCHAR ASC 1,YE NCHAR ASC 1,NO SPC 1 * CHBND IS A ROUTINE TO ASK THE OPERATOR IF HE WANTS TO CHANGE * A BOUNDRY, GET HIS ANSWER AND CHECK IT FOR LEGALITY. * THE MESSAGES SENT ARE: * * XXXXXXXXXX YYYYY AND * CHANGE XXXXXXXXXX? WHERE XXXXXXXXXX IS A 10 CHARACTER * MESSAGE SUPPLIED AS PART OF THE CALL * AND YYYYY IS THE CURRENT BOUND IN OCTAL * OR DECIMAL. * LEGAL RESPONCES ARE: * * 0 NO CHANGE. * N WHERE N>YYYYY AND LESS THAN OR EQUAL TO * THE SUPPLIED LIMIT. * * CALLING SEQUENCE: * A = CURRENT YYYYY A > 0 MEANS `OCTAL * JSB CHBND A < 0 (ONE'S COMPLEMENT) * MEANS DECIMAL * DEF ADDRESS OF XXXXXXXXXX (5 WORD MESSAGE) * DEF UPPER LIMIT OF RESPONCE * * RETURN (ALWAYS P+3) A = NEW BOUND. * CHBND NOP STA CBFLG SAVE DECIMAL FLAG SSA SKIP IF OCTAL REQUEST INA ELSE MAKE DEC. RQST 2'S COMPLEMENT STA TMPX SAVE DEFAULT VALUE LDB CHBND,I GET THE MESSAGE ADDRESS AND STB TMPL SET UP TO MOVE LDA N5 FIVE WORDS STA ERROR TO FORM THE MESSAGE: LDB DMES " CHANGE XXXXXXXXXX YYYYY" CHNX LDA TMPL,I MOVE STA B,I 5 INB WORDS ISZ TMPL TO ISZ ERROR THE JMP CHNX MESSAGE * ISZ CHBND INDEX TO THE UPPER LIMIT STB TMPL SAVE THE ADDRESS FOR RETRY IN CASE CHOVR LDB TMPL OF ERROR LDA TMPX CONVERT THE NUMBER JSB CONVD TO THE BUFFER JSB SPACE SEND A SPACE LDB DMES GET THE ADDRESS LDA P16 AND SEND MESSAGE JSB DRKEY,I "XXXXXXXXXX YYYYY" TO THE TTY LDA "?" PUT A "?" AFTER THE XXXXXXXXXX STA ME11S SET IT LDA P19 SEND MESSAGE AND GET LDB ADMES RESPONCE FOR JSB READ " CHANGE XXXXXXXXXX?" LDA P5 CONVERT RESPONCE LDB CBFLG LOAD FLAG SSB DECIMAL REQUEST?? CMA,INA YES, ASK GETOC FOR DECIMAL JSB GETOC GET BINARY EQUIVALENT JMP CBERR ERROR - REPEAT * JSB GETAL END OF BUFFER? SZA,RSS JMP CHOK YES OK- * CBERR LDA ERR14 SEND ERROR 14 JSB ERROR JMP CHOVR AND REPEAT * CHOK LDA OCTNO GET VALUE SZA,RSS IF ZERO USE LDA TMPX SUPPLIED VALUE LDB TMPX GET -ABS VALUE SSB,RSS OF UPPER LIMIT. CMB,INB SSA GET ABS VALUE OF CMA,+INA CURRENT TOO. ADB A IF LIMIT LESS THAN SSB CURRENT THEN JMP CBERR ERROR * LDB CHBND,I GET UPPER BOUND LDB B,I TO B CMB IF GREATER THAN ADB A MAX SSB,RSS THEN JMP CBERR ERROR * ISZ CHBND ELSE EXIT JMP CHBND,I RETURN VALUE IN A SPC 2 CBFLG BSS 1 DECIMAL/OCTAL FLAG TMPX NOP TMPL NOP DMES DEF .XXX ADMES DEF *+1 ASC 4, CHANGE .XXX BSS 5 ME11S NOP BSS 3 "?" ASC 1,? SPC 2 * * * ASOUT IS CALLED FOR ALL TTY OUTPUT * IT SENDS THE REQUEST TO THE TTY LIST DEVICE AND * IF BIT 4 OF THE SWITCH REGISTER IS * IS SET IT ALSO SENDS IT TO THE PUNCH. * ASOUT NOP ENTRY POINT DST ASOA SAVE THE PRAMETERS LIA 1 IF BIT 6 SET AND P64 THEN PRINT ONLY LDB DERTN ERRORS SZA CPB ASOUT RSS SKIP IF TO BE PRINTED JMP NOLST ELSE GO TEST FOR PUNCH * DLD ASOA GET THE PRINT PRAMS JSB LSTD,I SEND TO THE LIST DEVICE NOLST LIA 1 GET THE SWITCH REGISTER AND P16 MASK BIT 4 SZA,RSS IF NOT SET JMP ASOUT,I EXIT * DLD ASOA GET THE PRAMETERS JSB DRHSP,I SEND REQUEST TO THE PUNCH JMP ASOUT,I RETURN * DERTN DEF ERTN ADDRESS FOR RETURN FROM ERRO ASOA BSS 1 REGISTER SAVE ASOB BSS 1 AREA * * ASIN IS THE INPUT ROUTINE. IT READS FROM THE TTY * UNLESS SWITCH REGISTER BIT 5 IS ON AND ERROR = 0 IN WHICH * CASE IT READS FROM THE PHOTO READER. * * IT THEN ECHOS THE READ ON THE LIST DEVICE IF SWITCH 3 IS ON, * AND ON THE PUNCH IF SWITCH 4 IS ON. * ASIN NOP ENTRY POINT STB ASOB SAVE BUFFER ADDRESS LIB 1 GET THE SWITCH REGISTER BLF,BLF ROTATE BIT BLF,RBR 6 TO LEST SLB t~ IF SET JMP ASIPR GO DO PR INPUT * ASITY LDB ASOB ELSE JSB TTYIN,I GET RECORD FROM THE TTY ASITS CLB CLEAR THE ERROR STB ERROR FLAG SZA,RSS IF ZERO LENGTH JMP ASIN,I DO NOT ECHO * STA ASOA SET THE COUNT LIA 1 GET THE SWITCH REG. AND P8 MASK TO BIT 3 SZA,RSS SET? JMP ASIPU NO TRY THE PUNCH * DLD ASOA GET THE PRAMETERS JSB LSTD,I SEND TO THE LIST DEVICE ASIPU LDA ASOA SET A INCASE WE EXIT LIB 1 GET THE SWR. RBR,RBR RBR,RBR CHECK FOR ECHO ON PUNCH SLB,RSS ? JMP ASIN,I NO RETURN * LDB ASOB YES GET THE ADDRESS JSB DRHSP,I SEND TO PUNCH LDA ASOA RESTORE A JMP ASIN,I AND RETURN * * ASIPR LDB ERROR IF ERROR FLAG SET SZB THEN JMP ASITY GO DO TTY INPUT ANY WAY * LDB ASOB GET THE BUFFER ADDRESS JSB DRPTR,I GO TO THE PHOTO READER JMP ASITS GO TEST FOR ECHO * * MES57 ASC 5,BG COMMON IFN *** BEGIN NON-DMS CODE *** MES52 ASC 5, LIB ADDRS MES53 ASC 5, FG COMMON MES54 ASC 5,FG RES ADD MES55 ASC 5,FG DSC ADD MES56 ASC 5,BG BOUNDRY MES58 ASC 5,BG RES ADD MES59 ASC 5,BG DSC ADD MES60 ASC 5, SYS AVMEM **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** MES53 ASC 5,RT COMMON MES60 ASC 5,LW RES PRG MES61 ASC 5,1ST DSK PG ****** END DMS CODE ****** XIF IFZ ***** BEGIN DMS CODE ***** SPC 1 * WRITE HALT MESSAGE AND SPACE SPC 1 HLT77 NOP JSB SPACE LDB HLTM. LDA HLTML JSB DRKEY,I SEND MESSAGE * LDA N10 * STA HLTCN HLTLP JSB SPACE PUT OUT TEN BLANK LINES * ISZ HLTCN * JMP HLTLP HLT 77B HALT FOR SWR CHANGES JMP HLT77,I SPC 1 *HLTCN BSS 1 HLTM. DEF *+1 ASC 15,HALT 77 - SET SWR & PRESS RUN HLTML EQU P29 ****** END DMS CODE ****** XIF IFN *** BEGIN NON-DMS CODE *** HLT77 NOP HLT 77B JMP HLT77,I **** END NON-DMS CODE **** XIF * * * CLEAR BUFFER WITH OCTAL ZEROES * * THE BUFCL SUBROUTINE CLEARS A 64-WORD BUFFER WITH ZEROES. * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF BUFFER * JSB BUFCL * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * BUFCL NOP LDA N64 STA WDCNT SET BUFFER LENGTH = 64 CLA STA B,I CLEAR BUFFER WORD INB ISZ WDCNT ALL WORDS CLEAR? JMP *-3 NO - CONTINUE CLEARING JMP BUFCL,I RETURN SKP * * NEW LINE (CR,LF) ON TTY * * THE SPACE SUBROUTINE IS USED TO SPACE UP THE TELEPRINTER. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB SPACE * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * SPACE NOP LDB DBLNK GET ADDRESS OF A BLANK CLA,INA SET CHARACTER COUNT = ONE JSB DRKEY,I OUTPUT CR, LF ON TTY JMP SPACE,I RETURN SPC 3 SPC 4 * * PRINT: ERR XX * * THE ERROR SUBROUTINE IS USED TO PRINT THE DIAGNOSTICS * FOR ALL ERROR MESSAGES. * * CALLING SEQUENCE: * A = 2-DIGIT ASCII ERROR CODE * B = IGNORED * JSB ERROR * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * ERROR NOP PRINT ERROR MESSAGES STA AMERR+3 SET ERROR CODE INTO MESSAGE LDA P6 LDB AMERR AMERR = MESSAGE ADDRESS JSB DRKEY,I PRINT ERROR MESSAGE ERTN JMP ERROR,I RETURN * * IRRECOVERABLE ERROR EXIT * IRERR NOP JSB ERROR PRINT ERROR MESSAGE HLT0 HLT 0B WAIT - PROGRAM CAN NOT CONTINUE JMP *-1 IRRECOVERABLE ERROR * AMERR DEF *+1 ASC 3,ERR ERROR MESSAGE = ERR + CODE IFZ **** BEGIN DMS CODE **** * * ALIGN - PRINT CURRENT BOUNDARY THEN ASK USER * IF HE WANTS TO ALIGN AT A PAGE BOUNDARY * * FORM OF MESSAGE: XXXXX * ALIGN AT NEXT PAGE? * * CALLING SEQUENCE: * LDA XXXXX (BINARY...A<0 MEANS DECIMAL) * LDB ADDR TO INSERT XXXXX IN * JSB ALIGN * DEF * * NOTE: IS CHARACTER LENGTH FOLLOWED * BY ASCII TEXT. * * RETURN: AT N+2 * B IS DESTROYED * A IS OLD OR UPDATED VALUE OF XXXXX. * SPC 1 ALIGN NOP STA ATMP1 SAVE ORIGINAL BOUND STB ATMP2 AND SPOT IN MESSAGE BUFF JSB SPACE SKIP A LINE JSB APRNT AND PRINT OLD BOUNDARY. ALIG1 LDB MSAL. LDA MSALL SEND ALIGN QUESTION JSB READ AND READ ANSWER. JSB YE/NO JMP ALIG1 REPEAT QUERY IF BAD RESPONSE. JMP ALNO JUMP IF HE SAID NO. SPC 1 * USER SAID ALIGN SPC 1 LDA ATMP1 PICK UP ORIG BOUNDARY, IOR M1777 ROUND TO PAGE END, STA ATMP1 AND SAVE, LDB ATMP2 THEN GO PRINT NEW JSB APRNT BOUNDARY. SPC 1 * USER SAID DON'T ALIGN SPC 1 ALNO LDA ATMP1 PASS BACK BOUNDARY ISZ ALIGN AND RETURN JMP ALIGN,I TO CALLER. SPC 1 * SEND MESSAGE ROUTINE SPC 1 APRNT NOP LDA ATMP1 PICK UP XXXXX IN BINARY LDB ATMP2 AND ADDR FOR INSERT, JSB CONVD STUFF XXXXX IN MSG LDB ALIGN,I POINT TO MESSAGE, LDA B,I GET LEN TO A, INB AND TEXT ADDR TO A, JSB DRKEY,I AND PRINT IT JMP APRNT,I RETURN SPC 2 ATMP1 BSS 1 ATMP2 BSS 1 SPC 1 MSAL. DEF *+1 ASC 10,ALIGN AT NEXT PAGE? MSALL EQU P19 SPC 1 MSMR DEC 32 ASC 16,LWA MEM RESIDENT PROG AREA XXXXX MSMRX DEHTRNF MSMR+14 SPC 1 MSBG DEC 20 ASC 10,LWA BG COMMON XXXXX MSBGX DEF MSBG+8 ***** END DMS CODE ***** XIF SPC 1 * COME HERE IF USER ATTEMPTS TO RESTART AFTER FINAL * CLEAN-UP HAS BEGUN. SPC 1 E19 LDA ERR19 SEND ERROR 19 CODE JSB IRERR TO IRRECOV. ERROR ROUTINE ERR19 ASC 1,19 SKP * * FILTR - FILTERS PROGRAM TYPES FOR RTE-II & III * * CALLING SEQ: RETURN: (N+1) * LDA TYPE A=NEW TYPE * JSB FILTR B=DESTROYED * SPC 1 FILTR NOP IFZ ***** BEGIN DMS CODE ***** LDB A SET A WITH WHOLE AND M17 TYPE AND B WITH LOW SWP 4 BITS (PRIMARY TYPE, REV). SPC 1 CPB P4 TYPE 4 XOR P13 BECOMES 9 SPC 1 CPB P12 TYPE 12 XOR P13 BECOMES 1 SPC 1 CPB P13 TYPE 13 XOR P8 BECOMES 5 ****** END DMS CODE ****** XIF SPC 1 IFN *** BEGIN NON-DMS CODE *** LDB A SET UP A WITH WHOLE TYPE AND M37 AND B WITH LOW 4 SWP BITS (PRI TYPE, REV, SSGA) SPC 1 CPB P30 TYPE 30 XOR P25 BECOMES 7 SPC 1 AND M17 SHUT OFF ANY SSCA BITS **** END NON-DMS CODE **** XIF SPC 1 JMP FILTR,I ORG * END BEGIN DT  92001-18016 C S C0222 RTE SYSTEM GENERATOR PART 2 (7900 DISK)             H0102 ,ASMBҬ̬àMH-GNDVҠSN. HDMHGNDVҠSNPAPҠAPŠBSAP NAM:MHDV SU:900-06V.B :900-606V.B PGM:G.A.A. (éPYGHԠH-PAKADMPANY95.A̠GHS SVD.NϠPAԠƠHSPGAMMAYBŠPHPD PDUDҠANSADϠANHҠPGAMANGUAGŠHUԪ HŠPҠNNSNԠƠH-PAKADMPANY. NAMMHGN900-606V.à5050 SUP NSANSAŠNA̠NBASŠPAG ԠNNN3NN5N6NN9N0N6N ԠN6PP3PP5P6PPP9PPP3P ԠP5P6PPP9P0PPP3PP5 ԠPP9P3P33P60P6P99P0P6K60̲000 ԠM60MM0MM3MM00DM00M060 ԠM0M600MM000M3M00M000M600 ԠM00MM0300M ԠDPSP000P000P00P0P ԠPSM000M000M00M0 ԠASMPP̬PP̬BANKUBNKMSGNPAB ԠDSKAMV NYPNSҠHSMDU VAABS... NԠSYSHSYSMSUBHANN NԠAUHAUؠDSàSUBHANN NԠDSZŠSYSMDSàSZŠ(AKS NԠDAUNAUؠDSàSZŠ(AKS NԠDSUNZŠSUBUN NԠDSKSàSAHDSàADDSS NԠSSYSSAUؠASԠSKAGS NԠDSKANMNԠDSàADDSSSUBUN NԠDSKϠDSàUPUԠUN NԠDSKɠDSàNPUԠUN NԠDSB̠GNAŠDSàABŠSUBUN NԠSԠSԠUNԠAKSUBUN NԠDSԠSԠUPAԠSUBUN NԠSDSSYSMDSàSSAK NԠADSAUؠDSàSSAK NԠSԠUSHNA̠YSҠM NԠDNDSàҠUN NԠDBPϠGƠDUMMYBASŠPAG NԠDSKABNA̠ABSDSàADDSS NԠPBԠNGUŠDSïPUNHB UYSUBUNS ԠDNSPAŬADGNAGNԬGìGA ԠNҬYůNϬSSҬSŬABDϬ ԠUDNVD AU0 BU DKYU0BYADDSS SPà3 BGNUSAԠƠPG. SPà BUƠBSS5MPBU BHNBSSMP DHSPU03BPUNHADDSS DNŠSԠADDSSS SԠUSԠSDNBASŠPAG SԱUS SԲUS+ S3US+ SԴUS+3 S5US+ HDMHGN-NSANSANDADDSSS DSKABԠNA̠DSàADDSSҠSYSD ASBUƠDƠASPB+ADDSSƠ9-DBUҠNB ABԠDƠSAԠADDSSƠBSAPAD NŠDƠNҠҠDSK DSZŠBSSDSKSZŠ-N.ƠAKS DSKSàBSSADDSSƠDSKSAHAA DAUNBSSAUAYDSKSZ SDSBSSSSAKҠSYSMDS$ ADSԠ0SSAKҠAU.DS DNBSSDSKҠUN AB30DƠ+ BSS6 DSԱDƠSYS SYSԠBSS SYSSDƠSSYS SYSSBBSS SԠBSSSAHUNԠSԠAK SSDƠSAUؠSAHASԠSKADDSS SSBBSSSAHSUBHANN SSYSԠ-SYSMASԠSKAG SAUؠԠ-SAHASԠSKAG SSZBSSSZŠƠSAHUN SYSHBSSSUBHANN̠ƠSYSMUN AUHBSSSUBHANN̠ƠAUؠUN SHBSSSUBHANN̠ƠSAHUN GҠDƠ+ADDSSƠBADAKAB BSS0BADAKAB NԱNPNZANAGҠDV DBPUSAԠƠDUMMYBASŠPAG DBPϠUDBPDNŠNYPN MSDƠMS0 MS0AS"àSAHSUBHN? DAAABSɯB-ɯàN.ƠDAAɯϠNSUNS MNDABSɯ-ɯDN.ƠMMANDɯϠNSUNS NMPBSSMPҠNZANUNS MS3DƠ+SUBHANN̠NUMBҠMSAG ASà MSDƠ+ ASà5KSSԠKNSUBHN: MS50DƠ+ ASàSAԠSAH? MSDƠMS0 MS0ASà6PUNHB? MS05ASàSYSMSUBHN? MS0ASà9AUؠDSàSUBHN? MS0DƠ+ ASà3DSSAK? ""ASà "?0"ASà?0 MS5DƠMS05 MSDƠMS0 HDNAVŠDSàSԠUPSN HŠNGMSSAGSAŠPNDDUNGHŠNAZAN PHASŬHHŠSPANSҠAHVADSNS. MSSAGŠSPNS MHDSàHAN?NҠA̠DGS KSSԠKNSUBHN: 0? .NҠϠ3DGԠDMA̠NS. .SPADBYAMMA . . ? SYSMSUBHN?NҠA̠DG AUؠDSà(YSҠNϩ?NҠYSҠN AUؠDSàSUBHN?NҠA̠DG SAHSUBHN?NҠA̠DGԠ(MAYBŠANYDNDSUBHN̩ SAԠSAH?NҠ3DMA̠DGS DSSAK?NҠ3DMA̠DGS$$ SPà3 DSUNPNYPNԠҠUSNSSSN. DB$B3PUԠB3NHŠS SBS NPGNҠAADYHŠUN AAҠHŠAGDS HNDDAP3 DBMSSMSSADD:DSKHN? SBADPNԠMSSAGŬGԠPY DAPSԠҠA̠DGSNPU SBDNGԠDGSUNA MPHNDPAԠNPU SADHN̠SԠDSKHANN̠NUMB SBSPAŠSԠUPAKMAP SB30DAP9SNDMSSAG: DBMSKSSԠKNSUBHN: SBDKYɠPNԠMSSAG GDAAB30SԠADDSSS SASDSҠNPU SANMPANDAҠPS ADAPSԠAKSADDSS SABHNNBHNMP DBN6A AH B30.SANMPɠAK SZNMPMAP NBSZBSPUNԠ-DN? MPB30.NϠ-AҠNԠD SANԱAҠNԠAG SADSKSàSԠ0DNDSUBHANNS B30ASBNMPSAVŠUNԠUN ADB"?0"ADDNSANԠϠGԠ? BƬBƠANDAŠϠGԠ? SBMS3+SԠNMSSAG DBMS3GԠMSSAGŠADDSS DAPANDNGH SBADGϠGԠHŠANS DANGԠS SBGNAϠHAAS PA""? MPB30ؠYS-GϠHKUH SBGNԠNϠ-NAZŠBUƠSAN DAN3NVԠ3DGS SBGàDMA MPB30ŠҠ- SABHNɠSԠAKS SZASSƠZ MPB30BGϠUPDAŠPNS SBGA̠NԠZϠ-GԠNԠHAA PABANKMMAN? SSYS-SKP MPB30ŠNϠ- DAN3SԠ SBDN3DMA̠DGSANDNV MPB30+ SASDSɠSԠSԠAKƠHANN DABHNɠGԠHANN̠SZ SADSZŠSԠSYSM SASSZANDSAH DANMPϠHSSUBHANN SASYSHҠDAU SASHSNGŠSUBHANN̠SYSM SZDSKSàSPA̠SUBHANN̠UN B30BSZSDSSPAB SZBHNADDSSS SZNMPSPSUBHANN B30ƠDBNMPƠUNԠSUBHANN PBPSHN MPB30YDNŠSϠGϠ MPB30ANԠ-GϠASKҠNԠN SPà B30ŠSBNҠ̠HMHŠASAN AA SABHNɠUNԠAKS MPB30ƠGϠASKAGAN SPà B30ؠSBGA̠ŠND SZAANYHNGS? MPB30ŠYS- B30YDADSKSàNϠ-GԠNUMBҠƠHANNS MANASZADND-SԠZ? MPB30ZNϠ-SKP SBNҠYS-̠HM MPSB30ANDSA B30ZSBDSSZGԠHŠSYSMDSàS.K. SASDSANDSԠ. ANAƠNY PADSKSàNŠSUBHANN MPAUNSKPϠHŠAU.MSSAG SPà SBSPA SYSàDAP5SNDMSSAG: DBMS5SYSMSUBHN? SBADGԠANS ANANŠDGԠA SBDNGϠNV MPSYSàҠ-YAGAN SBSHSԠҠGA̠SUBHANN SBDSZŠSԠSYSMSZ SASYSHSԠSYSMSUBHANN SPà SBSPA SUNDAP6SNDMSSAG: DBMSSAHSUBHN? SBADGϠGԠANS ANANVԠNŠA SBDNDG MPSUNҠ-YAGAN SBSHSԠҠGA̠SUBHANN SASHSAVŠSAHSUBHANN SBSSZANDSZ AUNAPSԠϠSHנNϠAUؠDS SADAUNSԠHANN̠ϠZ AANDSUBHANN SAAUHϠ-. SBSPA AUDSDAP3SNDMSSAG DBMS6AUؠDSà(YSҠNϠҠKS? SBADGϠGԠANS DAN3SԠYҠADMA SBGàNUMB MPAU0NϠYҠYSҠN SABUƠSAVŠHŠNUMB SBGA̠NDƠNPU? SZA MPAU0NϠԠYůNϠSND DABUƠSŠHŠSZŠϠAAND SADAUNLSԠHŠAUؠDSàSZ SBDSSZGԠSSSAK MPAU3GϠSԠ AU0SBGNԠSԠHŠSANN SBYůNϠYҠYSҠN MPAUDSNϠMUSԠBŠBADANS MPSSҠNϠ-SKP ANAYS-ƠNYN PADSKSàDSàSUBHANN̠HN MPAUشHNNGANSҠYAGAN SBSPAŠYS-SԠUPAUؠUN AUUNDAPSNDUSN: DBMSAUؠDSàSUBHN? SBADGϠSNDANDGԠANS ANANVԠNŠDGԠA SBDN MPAUUNҠ-YAGAN SBSHSԠҠGA̠UN AUرSBDAUNSԠSZŠƠAUؠUN PASYSHSAMŠASSYSM? SSYS-ҠSKP MPAUزNϠ-GϠSԠUP AUشSBNҠSNDҠMSSAG MPAUNANDYAGAN SPà AUزSAAUHSԠAUؠHANN DASDSSԠAUؠKSZŠϠSAMŠASSYSDS AU3SAADSSԠAUؠDSàS.AK SPà SSҠSBSPAŠNנN S̠DAP DBMS50MS50ADD:SAԠSAH? SBADPNԠMSSAGŬGԠPY DAN3SԠҠ3DMA̠DGSNPU SBDNGԠDGSUNA MPS̠PAԠNPU DBSSZGԠSAHSZ MBNBƠNPUԠNԠGA ADBAHANDS SSBSZ MPSMSKP SBNҠSŠ MPS̠YAGAN SMDBSHGԠSAHSUBHANN PBSYSHƠSAMŠASSYSM SSSKP ADAM00SŠADD00ϠAGASNNSYSM SZAƠSYSMANDZϠSKP A̬SASŠMUPYBY DADSZŠZϠNSYSM-USŠUPPҠHAƠSYSM AƬAƠAŠ AҬAҠAKAN ANDM600MASKϠAK SADSKSàSԠSAԠSAH N:HŠAԠHAԠANYGVNDS ADDSSSNAUNԠHҠHAN HŠSYSMUNԠSAGGDBY SAKADDSSBNGGAҠHAN 00BYHŠAMUNԠƠHŠDSD AK. MPDSUɠUNϠMANNŠD SPà N3Dà-3 SPà GԠSSҠDS DSSZNP SBSPAŠNנN SñDAP5 DBMS0MS0ADD:DSSAK?$$ SBADPNԠMSSAGŬGԠPY DAN3SԠҠ3DMA̠DGSNPU SBDNGԠDGSUNA MPSñPAԠNPU ASDUBŠҠ6DSS MPDSSZɠUN SKP SPà3 SUBUNŠϠSԠGAY ASUBHANN.HŠSԠNSSS ƠKNGҠHŠDSD HANN̠NHŠAKMAP. ANGSUN P-ҠUN PSBSH P+NMA̠UNHANN̠NASZŠNB SPà ANNYSASSUMDϠBŠHŠSUBHANN̠ϠBŠHKD. ҠԠSP- ƠHŠSUBHANN̠SGA̠ԠSUNDNA ANDBSHŠNUMBҠƠAKSNHAԠHANN SPà SHNP DBAB30GԠABŠADDSS ADBAADDSUBHANN ADBPSPϠAKS DBBɠGԠAKSNB SZBƠZϠ-Ҡ-SKP MPSHɠSŠK-UNBAKS DANԱSŠGԠNԠAG SZASSƠNԠS SBNҠSNDҠMSSAG DASHGԠUNADDSS ADANADUSԠҠP- MPAɠANDUN SKP NSԠHN̠N.NNSUN HŠSDSKSUBUNŠSSHŠUNԠDSKHANN NS.NHŠɯϠNSUNS. ANGSUN: AN.DSϠBŠNGUD(NG. BADDSSƠNSUNADDҠS SBSDSK UN: ADSYD BNԠNSUNADDSS SDSKNP SABUƠSAVŠN.ƠNSUNS SDSDABɠGԠNSUN ANDM00SAŠNSUND ҠDHN̠NSԠHANN̠N. SABɠSԠNSUNND NBNҠNSUNADDSS SZBUƠSKP-A̠NSUNSNG. MPSDSNGUŠNԠNSUN MPSDSKɠUN SPà ADKDƠDK HDMHGNNGUŠANDMPŠNZAN PBԠNPNGUůPUNHBԠNYPN DADAAGԠHŠNUMBҠƠDAAHANN̠NSUNS DBHPDSKGԠHŠADDSSƠHŠDSKADDSSS SBSDSKGϠSԠDAAHANN̠ADDSSS SZDHN̠SPϠMMANDHANN DAMNDGԠNUMBҠƠMMANDHANN̠NSUNS SBSDSKSԠMMANDHANN̠ADDSSS SBNSNZŠHŠSYSMDS SPà DBABԠŠHŠDSàBԠN AŠH SBDSKDDSàAK0SԠ0ϠSԠADDSSS DBADKGԠHŠABŠADDSSNB DASDSS AƬA̠H A̠NUMBҠƠDS SABɠPҠAK NBSPBԠADDSS DAԣA0SԠHŠAKADDSSҠAK0 SABɠNHŠB NBSԠH DASKàSKMMAND SAB DASDSSԠH AҬAҠƠSSSUA NB eSAB NB MANASԠNGAVŠƠABV SAB NB DAHADSԠHŠHAD SABɠBS NB DAңDMSԠHŠADMMAND SAB NB DAUNԠANDHŠUN SAB NB DABɠGԠHŠABŠADDSS ANDMANDMASK SABU+ϠPAGŠS DAASMGԠAM ANDM060MASKϠPAG SABUƠSAV ҠBU+ADDHŠPAGŠS SABɠSԠHŠABŠADDSS DABADDGԠHŠBԠADDSS ANDMMASKϠPAGŠBSAND ҠBUƠADDPAGŠBSAND SABADDSԠҠHŠPAPҠB A̬ŬAAҠHŠSGNB SANԠSԠNHŠDҠB SASPADAUPŠƠMS DBABԠUPUԠHŠBSAP AŠϠHŠDS SBDSKDAKZϠSԠZ SKP B0SBSPAŠNנN DAPSNDMSSAG DBMSPUNHB? SBADGԠHŠD SBYůNϠANAZ MPB0Ҡ-YAGAN MPPBԬɠNϠUNϠMAN SPà SBADҠPUNHAD DANBàGԠBԠNGH SABUƠSԠҠHKSUMAUAN DASAPGԠADADDSS BSSNAZŠHKSUM BԱADBAɠMPUŠHKSUM NASPADDSS SZBUƠDN? MPBԱNϠ-GԠNԠD SBAɠYS-SԠHKSUM DAB̠GԠNGAVŠNGH+3 DBSAPGԠADDSSƠHŠB SBDHSPɠSNDϠHŠPUNH SBADҠPUNHA MPB0GϠASKƠHŠANSANH SPà ADҠNPUNŠϠPUNHAD DANGԠUN SABUƠSԠNUN ADDBDZϠGԠADDSSƠAZ ASԠҠDBNAY SBDHSPɠGϠPUNH SZBUƠSPUNԠ-DN? MPADNϠ-SNDԠAGAN MPADҬɠYS-UN SPà MSSDƠ+ ASàMHDSàHN? MS6DƠ+ ASà6AUؠDSà(YSҠNϠҠKS? HPDSKDƠɯBɠADDSSƠɯϠNSUNS DHN̠BSSDSKɯϠHANN̠N.(A̩ DZϠDƠZ ZϠNP HDMHGNNS-ϠNZŠHŠDS UNŠϠNZŠHŠSYSMDSKS.AHSUBHANN̠SSD ANDƠSYSMAUجҠSAHԠSNZDUNNDNAY. ƠԠSDNDBUԠNԠNŠƠHŠABVŠHŠUSҠSASKDƠH ANSԠNZD.HŠSYSMSNZDϠŠP. A̠HҠUNSAŠUSԠNZD. ANYDVŠAKSAŠAGGDDV.ƠHŠDV AKSAŠUNDNHŠSYSMHŠAUجҠHŠSAHUN HYAŠNDNϠABSSϠHYMAYBŠSKPPDDUNG GNANANDAGGDASSYSMAKSDUNGHŠAKAB GNAN. SPà3 NSNP ASԠNϠHADҠ SABU+3BADAKSAND SABU+N ASԠUNԠDVŠUNԠ SASYSSBZϠNDVҠAB DASDSADUS AƬA̠DMϠSHנH A̠NUMBҠƠDS MANA-ҠDMAPҠAK SADMSԠ DASDSGԠSS ASASDVDŠBYϠϠGԠN.NASD MANASԠNGAV SANSàSԠҠDV DAN0AҠHŠBAD SABUƠAKAB DBGҠGԠADDSSƠAB ASԠϠ-ҠNϠNY N0SABɠSԠNAB NBSPABŠADDSS SZBUƠDN? MPN0NϠDϠNԠN DASYSSBYS-GԠHŠUNԠSUBHANNp N̠DBMSGNGԠNԠDAABԠҠDV PASYSHƠSYSMSUBHANN ADBM000SԠHŠŠPԠB SBNԱSԠҠDV SSSKPҠUN MPNBSUBHANN̠NԠNSYSM SBSHGϠGԠSUBHANN̠SZ MBNBSԠNGAVŠSZ SBNMPNUN PASYSHHSHŠSYSM? SS PASHSAH SS PAAUHAUؠUN? MPNAYS-BYPASSUSN SZBU+NϠ-HADҠPNDY? MPNàYS-SKPHADҠPN SBSPAŠNϠ-PNԠԠN DAP9SNDMSSAG: DBMS9NZŠSUBHN: SBDKYɠϠY NàDASYSSBGԠUNԠSUBHANN ADA"?0"ADDASɠ?0 AƬAƠAŠANDS SAMS3+ DAPSND DBMS3USN SBADϠPYUN SBYůNϠSԠҠYSNϯ MPNà--YAGAN MPNBNϠ-SKPN SPà NADASYSSBSԠS ADAAB30AKҠHS DAAɠUNԠMH SASYSԠAKMAP AS NDSABU+AKϠZ DBM000ADDSSϠ000 ŠŠҠ SBDSKDA̠DV NƠDABU+GԠAK ADAM00ADD SZNMPSPUNԠ--DN? MPNDNϠ-DϠNԠAK SPà NBAYS-SԠҠNԠUN SABU+3SԠNϠHADAGҠҠP SZSYSSBSPUN DASYSSBSNנUN PAP AƬSAYSDN MPN̠NϠ-DϠNԠUN MANAS SADMDMϠ- AANDA SANԱNԠAG !DASYSHSԠUPHŠDVҠAB SASYSSBSԠSUBHANN ADAAB30GԠSԠAK DBAɠMH SBSYSԠAB DASHGԠSAHSUBHANN SASSBSԠNAB ADAAB30GԠSԠAKM DBAɠHŠAB SBSԠANDSԠ DASHGԠSAHSUBHANN DBSYSSANDSYSASԠSKADDSS ŬASԠϠSAHUN SABUƠSAV DASYSSBGԠSYSMSUBHANN ŬASԠϠUN PABUƠƠSAMŠUNԠASSAH SSSKP NBSŠUSŠDNԠASԠSKADDSS SBSSSKADDSSҠSAH MPNSɠUN HDMHGNNԠҠUNŠANDAKAGG HŠDVҠNSHŠAҠ0SHAVŠADϠNZŠH DS. SPà NҠDASABGԠSAUSAND ANDM0MASKSKHKHKANDNDƠYND SZASSBS-ƠNԠSԠNNU MPN0HBADAKUN DAMS3SŠSNDBADSPAN SBҠMSSAGŠAND MP00SA N0DADYƠSԠMMAND SANԱϠAGAKDV ŠAND DBM000A DABU+HŠDV SBDSKDDV AS SABU+HADҠAG SZBU+3BADAKHADҠPNDY MPNSYS-SKP SBSPAŠNϠ-SNDSPA DAP0SNDMSSAG: BADAKSSUBHAN̠ DBSYSSBGԠSUBHANN ADBBK0ADDASàBANK0 SBMS-SԠNMSSAG DBMSSNDH SBDKYɠMSSAG NSDABU+GԠAKADDSS AƬAƠMVŠԠϠ A̠A MANASԠ{ NGAVŠҠDMA̠NVSN DBABUƠSԠBUҠADDSS SBNVDNVԠHŠNUMB DAP6AND DBABUƠSND SBDKYɠHŠAKNUMB AKSNנAGGDANDPDԠSNנNDNH SYSMABŠƠԠSNHŠSYSMAUجҠSAH SUBHANN. DASYSSBSԠH DBMSGNNԠDAA PASYSHƠSYSM ADBM000ADDHŠŠPԠB SBNԱSԠҠDV PASYSHƠNԠSYSM SS PASHSAH SS PAAUHAU SSSKP MPNƠSŠUNϠNԠUN DABU+GԠHŠAK ADASYSSBSŠSԠSUBHANNA̠ANDAKD SASԠϠSԠMPSAV DBGҠGԠHŠBADAKABŠADDSS DAN0Aנ0NS SABU+SԠUN NűDABɠGԠNY SSANGAV? MPNԠYS-USŠHSN NBNϠAADYUSD SZBU+SPUNԠ0Y? MPNűNϠ-YNԠN DAMSYS-SNDVABŠ SBҠҴ NԠDASԠGԠSUBHANN̯AK SABɠSԠNAB MPNƠGϠNSHNZAN. SPà3 DYƠԠ0000 ABUƠDƠ+ BSS3 MSASà M0Ԡ0 MS3ASà3 MS9DƠ+ ASà0NAZŠSUBHN: MSASà0BADAKSSUBHN̠ MSDƠMS BK0ASà0 HDMHGNDSàDVŠɯϠNSUNADDSSS ɯBDƠDSKDADAAHANN DƠDSKDB DƠDSKD DƠDSKDD DƠDSKD DƠDSKD DƠDSKDG DƠDSKDH DƠDSKD DƠDSKD DƠDSKDK DƠDSKD DƠDSKDM DƠDSKDN DƠDSKD DƠDSKDP 7TRNDƠDSKD DƠDSKD DƠDSKDS DƠDSK5 DƠDSK5 DƠDSK53 DƠDSK5 DƠDSK55 DƠDSK56 DƠDSK5 DƠDSK5 DƠDSK59 DƠDSK60 DƠDSK6 DƠDSKDZ ɯàDƠDSKAMMANDHANN DƠDSKB DƠDSK DƠDSKD DƠDSK DƠDSK DƠDSKG DƠDSKG DƠDSKH DƠDSK DƠDSK DƠDSKK DƠDSK DƠDSKM DƠDSKP DƠDSK DƠDSK DƠDSKS DƠDSK DƠDSKU DƠDSKV DƠDSK0 DƠDSK0 DƠDSK03 DƠDSK0 DƠDSK05 DƠDSK0 DƠDSK0 DƠDSK09 DƠDSK0 DƠDSK DƠDSK6 ɯDU SPà BSSBGN+500B-SKPϠ500BϠAVDPBMSH 'ϠUSA-500B' HDMHGNS.0K0BSAP HŠNGADҠPMSADNGƠHŠSDNԠPNS ƠHŠA̠MŠMN.HŠADҠSADNSҠ0 AK0ƠHŠSYSMDS.ԠSGNADBYHŠSYSM TGNAҠANDNSSS: (HŠNSUNSUDҠADNGHŠSYSM (HŠDSKANDŠADDSSSSPYNGADNG HŠADDSSSUDҠADNGAŠHŠNG: (ABASŠPAGŠNKAGS (נŠADDSS (HGHŠADDSS (3DSKADDSSƠABSUŠD (BSYSMԠSDNԠMAN (נŠADDSS (HGHŠADDSS (3DSKADDSSƠABSUŠD (éBGSDNԠMAN (נŠADDSS (HGHŠADDSS (3DSKADDSSƠABSUŠD HŠPGAMSASSUMDϠBŠADDNHŠAAUSԠPDNG HŠPDAD. SAԠABSDB-+ASPBƠGԠADDSSƠDSKSP.BU ABSSB-+SPADSԠUNԠSPBUƠADDSS ABSSB-+PADADMANSYSMԠSDNS ABSSB-+PADADMANBGSDNS ABSSB-+PADADBPNKAGS MP3BɠANSҠϠԠMNҠNYP. PADABS000B-+SAԠADDSSҠBԠHNBBD'D ABSDB-+SPAD++ɠGԠנŠADSS ABSSZ-+SPADNҠUNԠSPBUƠADDSS ABSDA-+SPAD++ɠGԠHGHŠADSS ABSSZ-+SPADNҠUNԠSPBUƠADDSS MAŬNAMPMNԬSԠDNB ADABSԠAA̠DUN B̬BSԠDNBԠNŠADD à BSԠMMYADDSSGS ABSSA-+NԠNAZŠMANNGUN ABSDA-+SPAD++ɠGԠHŠDSKADSS ABSAND-+M.SAŠHŠSҠADDSS SABSԠNB ABS-+SPAD++ɠSAŠHŠAKADSS ABSSZ-+SPADSPHŠPAMABŠAN AƬAƠAŠ A̠נA ABSADA-+BASŠADDAKZϠϠGԠABSUŠAK ABSSA-+ԣAKSAVŠҠADDSSNG BSADDUSԠSҠUNԠҠDSS DABGԠSҠϠA AƬAƠMUPYBY AҠ MANAANDSUBAԠM SADABSADA-+DKNUMBҠƠDSPҠAK ABSSA-+PDSSԠPSVŠDS MANAAND ABSSA-+NDSNGAVŠDSHSAK SSSKPVҠBBD̠ADDSSD ABS000B+BN-ϠDNŠADDSSƠBN ABSDA-+NԠGԠNUMBҠ SSASSƠPSV ABSMP-+PAD++ɠDNŠ-SϠ ABSADA-+PDSSŠSԠϠAD ABSSA-+NԠSAVŠMANNGUN SSANԠAK AUSŠMN.ƠNUMBҠNAK ABSADA-+NDSNUMBҠ SàSԠDMAҠDUN AANDSND ABSDA-+ԣAKGԠHŠAKADDSS DSKDAA0ANDSND DSKDBSà0à ABSDA-+SKMDGԠHŠSK DSKAàMMANDAND DSKBASND DSKàSààSAԠSK ABSADB-+NSԠSUBAKNUMBҠPҠSD SSBSSƠSDŠ ABSADB-+.00ADDHADB SSBS ABSADB-+PSԠADDBAKϠGԠS ABSADB-+BMSKADDHŠSUBHANN̠HADB DSKDàSS0AԠҠAK ABSMP-+DSKD DSKDDB0SNDHADSҠD DSKDŠSà0à̠HŠN ABSDA-+ңMDGԠHŠADMMAND DSKDSS0AԠҠSK ABSMP-+DSKD DSKŠASNDADMMAND DSKDƠSà0àSԠUPҠAD DSKƠà Sà6àSAԠDMA DSKGSààSAԠAD DSKHSSAԠҠND ABSMP-+DSKH SƠ6DSABŠDMAҠSAUS DSKDGSà0àD ABSDA-+UNԠSAUS DSKɠà DSKʠANUN DSKKSà DSKDHSS0AԠҠSAUS ABSMP-+DSKDH DSKDɠA0GԠSAUS SAƠBAD HԠ3BSAUSHA SANSA ABSMP-+SAԠSAԠV BSԠSҠϠZϠҠSԠƠSGMN ABSSZ-+ԣAKSPHŠAKADDSS AAND ABSMP-+SADGϠAD DAAAA ԣAKDà-MVŠUNԠҠBBD̠MV .00Ԡ00 M.Ԡ PDSNP NDSNP NԠԠ500NGUDϠBB̠ADDSS SPADԠ500NGUDϠBB̠ADDSS DKDà30HSŠ BASŠNPSYSMAK SKMDԠ30000 PSԠDà-DSA NSԠDà BMSKNPSԠBYH ңMDԠ0000 UNԠNPGNA ASPBƠABSASPB+- BSS9SYSMADNGSPANS BNԠNPSBHŠMBBD SƠ6ANUPDMA à0àANDHŠɯϠSYSM HԠBDSABŠHŠADҠNABŠSHANDUN DBԠABSDA-+PAD++ɠMVŠDSϠBB- ABSSA-+N++ ABSSZ-+PAD ABSSZ-+N ABSSZ-+ԣAKDN? ABSMP-+DBԠNϠGԠNԠD ABSMP-+SPAD++ɠYSGϠUŠHŠB HŠNGUSNASHŠBSAP ϠBŠADANYHŠNŠHNUPUԠ DSKBUԠUABŠMHŠASԠPAGŠƠ. ϠUSA-500BSԠҠSAԠAԠ500PAGŠAV DBU066000BDB SBU06000BSB ADBU06000BADB SBU06000BSB SZU036000BSZ DAU06000BDA SAU0000BSA ADAU0000BADA ANDU0000BAND ҠU0000B MPU06000BMP ɠU00000BNDԠBԠ(DŠAS+ɩ HŠNGUAŠUSŠϠSԠUPHŠBBD̠MVŠD HNBDBYHŠBBD̠HŠADҠSADDϠ0 ANDSB'DϠAԠ055ɠ(AVũ Ϡш.USA-BAVŠPAGŠANƠSA SPà BSS000B+DBP--5BSVŠKҠDUMMYBP. HDMVŠHADPAPҠAPŠBԠSAP MVNGHADBSAP HSBSAPSNGUDANDPUNHDBYHŠGNAҠANDS USDϠADHŠDSàSDNԠBSAPMSYSMAK 0SҠ0. SPà3 SAPDƠ+ADDSSƠHŠBԠSAP ABSB̲56NGHƠADҠNHGHHAƠƠD ABSBGADADDSS SAԠà0àSPVHNG-ŠSMMNG! DAԣA0-ADNSK DSKDʠA0 DSKDKSà0àSԠSYSM DASK-ADNAK DSK̠A DSKMSààAND DSKDSSS0 MP--ADNHAD DAHAD-ADN DSKD̠A0SA DSKDMSà0àSK DADSKD-ADNS A6UP àDMA DBBADD-ADNBUҠADDSS B DADM-ADNDS Sà A DSKDZSSAԠ MP--ADNSK DAңDM-ADNS DSKPàUP DSKѠAH DSKDNSà0àAD Sà6 DSKҠSààSAԠAD DSKSSSA MP--ADNҠ SƠ6AҠDMAҠSAUS DSKDϠSà0àD DAUN-ADNSAUS DSKԠà DSKUA DSKVSà DSKDPSS0AԠ MP--ADNSAUS DSKDѠA0 B̬ŬBMVŠSGNBԠMADDSS SASSANYS? MPBɠN.GϠϠHŠNSN PASD-ADNSHSHŠSԠM? SSYSYAGAN. HԠBNϠHA MSAMPSA-ADNYNSA SDԠ0000 DMDà- BADDABSSA-++ɠHS UNԠNPSVN HADNPDS SKàԠ30000A ңDMԠ0000SԠBY DSKD?ҠԠ0000H ԣA0NPGNA SPà HNDҠMPSA-ADNMUSԠBŠAԠ00BHNADD NPANҠHKSUM SPà BGU00B+SA-HNDҠUNMŠGƠPAPҠB ADNUHND-00BADDSSADUSNGNSAN. B̠UHND-SA+BԠNGH B̴UB+B+B+B̠BԠNGHMS Ḇ6UB̴+B̴+B̴+B̴MS6 B6UḆ6+Ḇ6+Ḇ6+Ḇ6MS6 B̲56UB6+B6+B6+B6MS56 B̠ABS-B-3NGHҠPUNHNG NBàABS-B-BԠNGHҠHKSUMAUAN HDGNAŠ$B3AKMAPAB DSB̠NP GNAŠB3 SPà DAAB30GԠHŠABŠADDSS SABUƠSԠҠNDNG DAN6GԠNUMBҠƠDS SABU+SԠUN DB$B3GԠHŠSԠNY SBSSҠ$B3 HԠ0BADNSNϠ$B3????? DBPP̠GԠHŠŠADDSSҠAB SBS5ɠSԠNHŠSYMB̠AB DSBDABUƬɠGԠDMAB SBABDϠSNDϠDS SZBUƠSPABŠADDSS SZBU+SPUNԠ-DN? MPDSBNϠ-GԠNԠNY SBPP̠SԠNנŠADDSS MPDSB̬ɠUN SPà3 $B3DƠ+ ASà3$B3 HDMHGNNMNԠDSàADDSSUN NMNԠDSKADDSS HŠDSKASUBUNŠNMNSHŠUNԠDSKADDSS ϠPVDŠHŠADDSSƠHŠSUDNGSҬ HHҠHAԠSҠSNHŠSAMŠAKҠHŠNG AK.NADDNHŠDSKASUBUNŠHKSHA HŠNԠDSKADDSSSVAD. ANGSUN: AUNԠDSKADDSS BGND SBDSKA UN: ANԠDSKADDSS BDSYD DSKANP SABSAVŠUNԠADDSS AN7DMSAŠSҠNUMB NAADD. PASDSƠϠMAؠN.NSYS.DSì ASԠ0 SADSKԠANDSAVŠNנSҠ. DABSA AƬAƠAK A̠ADDSS ANDMNנA. BƠN PBDSKԠSҠ0 NAADDϠAK. PBDSKԠNנAK? SBSԠYS-SԠҠDV SZƠSYSMSKP MPDSKSŠHKAGANSԠSAH PBDSZŠϠAGŠVҠ? MPDKҠYS-BMB MPDSKNϠ-SKP DSKPBSSZSAHV? MPDKҠYS-BMB DSKAƬA̠SŠAKϠ-0 A̬A̠AND ҠDSKԠNSԠSҠ. MPDSKAɠ-UN. DKҠDAұSԠDŠҠNSUNԠDSK SBҠVABŠҠ ұASàҠDSNԠUN DSKԠNP-MPAYSAG HDSԠҠBADAKSUBUN HŠSԠUNŠSSADSàAKϠSŠƠԠHASBNAGGD DVŠBYHŠNZANUN.ԠUNSHŠSԠGD AKABVŠHŠSԠAKƠHŠAKSBAD. SPà SԠNP DBN0SԠUNҠ SBM0NS AƬŬAƠAŠAK AA̠HGHAANDSAVŠSBԠN SZSSADDHŠPP ADASYSHUN SZ ADASHN DBGҠGԠHŠABŠADDSS SPABɠBADAK? ADAM00YSSPAKADDSS NBNϯYSSPABŠADDSS SZMSPUNԠDN? MPSNϠHKNԠNY AƬAƠYSAŠAND ANDM3MASKUԠUN SABSAVŠNBҠUN SZƠNԠSYSUN ҠM00SԠSGN MPSԬɠUN MNP HDMHGNDSàNPUԠN DSKNPUԠDV HŠDSKɠSUBUNŠNSHŠNPUԠMHŠDSK. HSUNŠUSSAŠBUҠϠMAKŠHŠDSàAPPAҠϠHAV 6DSS. ANGSUN: ADSKADDSS BŠADDSS SBDSK UN:NNSƠAANDBAŠDSYD. DSKɠNP ŬASԠVNSҠADDSS SBDSKϠSAVŠŠADDSSҠMV DBUBU+GԠUBUҠADDSS PAUBUƠUSDSҠNUBU? MPDS0YS-GϠMV DBNBU+USDSҠNNBU? PANBUƠ? MPDS0YSGϠMV ASҠNԠNŠG ŠϠDV SBDSKDϠADHŠS DADMNDSԠϠSH ŬASҠN SANBUƠ DBNBU+GԠBUҠADDSS DS0DAN6SԠUNԠҠ6 SADSKԠDS SZƠDDS ADBP6ADD6ϠA̠BUҠADDSS DS03DABɠMVŠH SADSKϬ SZDSKϠ6 NBDS SZDSKԠϠH MPDS03USҠBU MPDSKɬɠUN HDMHGNDSàUPUԠN DSKUPUԠDV HŠDSKϠSUBUNŠNSA̠UPUԠϠH DS.ԠUSSAŠBUҠϠMAKŠHŠDSàAPPAҠϠHAVŠ6 DSS. ANGSUN: ADSKADDSS BŠADDSS SBDSK UN:NNSƠAANDBAŠDSYD. DSKϠNP SBDSKɠSAVŠŠADDSS DBDSKAGԠASԠMAؠADDSS MBNBSԠNGAND ADBASUBAԠMUNԠASS SSBSSƠìUNԠHGH SADSKAHNSԠMA. ŬASԠϠVNS PAUBUƠSAMŠASUNԠS? MPDS0YS-GϠMV AŠNϠ-SԠϠŠUNԠS SADSKASAVŠUSԠADDSS DAUBUƠGԠBUҠADDSSҠŠS DBUBU+GԠŠADDSSƠHŠS AŠAҠŠҠ SBDSKDŠHŠS DADSKAGԠHŠUSDS DBUBU+ANDA̠BUҠADDSS ŠSԠŠҠAD SBDSKDADHŠS DADSKASԠϠSHנԠSN ŬA SAUBUƠ DS0DBNBUƠƠUNԠŠBU PABSHŠAD BBUҠHN SBNBUƠSHנADBUҠMPY DBN6SԠUNҠ SBDSKԠ6DS DBUBU+GԠHŠA̠BUҠADDSS SZƠADDSSSDD ADBP66ϠHŠBUҠAN DS0DADSKɬɠMV SABɠH NB SZDSKɠϠH SZDSKԠA MPDS0BUҠAND MPDSKϬɠUN SPà3 UBUƠԠ DƠBUUUPUԠBUҠADDSS NBUƠԠ-NBUƠNŠAG(MPSSBũ DƠBUNNPUԠBUҠADDSS BUNBSSNPUԠBUҠҠDS BUUBSSUPUԠBUҠҠDS HDMHGNPAGŠNSANS SԠDSKAKAB DSԠSSUPHŠDSKAKABŠҠBHHŠSYSM ANDAUAYDSK.ԠUSSHŠDSGMNԠBUҠ PUNGUԠHŠAKABS. ԠASϠASHŠŠPԠAGSN HŠUPPҠNN-SYSMPNƠHŠSYSMSUBHANN ANGSUN: AN.USDAKS SBDS UN:NNSƠAANDBAŠDSYD. DSԠNP SABUƠSAVŠw@ƠUSDAKS DAADSŠSԠҠADDSSҠDV SANŠϠA̠UN DASDSS AƬA̠DSàDS A̠PҠAK MANANG. SABU+NBU+ DSűDABUƠGԠAK PADSZŠDN? MPDSŴYS-GϠDϠAUؠUN SBSԠNϠ-GDAK? PABUƠS MPDSŲYS-GϠMVŠŠP DAMSGNNϠ-SԠBAD DS3SBUDSԠAKASSGNMNԠAB SZBUƠSPAK MPDSűDϠNԠAK SPà DSŲDABU+GDAKSԠNGH SADMҠU̠AK DAMSGNS SANԱNZŠDAAMMAND DABUƠGԠAK DBM000USŠ000ҠBUҠADDSS AƬAƠAŠAKϠHGH ŬAҠAҠHŠ SBDSKDGϠAҠHŠŠPԠB DADS MANAHŠ SADMUN AAҠH SANԱNԠAG MPDS3GϠSԠDNAKASSGNMNԠAB SPà ADSŠDƠ+ҠUNŠADDSS MPDSKҠGϠϠNMA̠ҠUN SPà DSŴDADAUNGԠSZŠƠAUؠUN MANASZASSSԠNG.ƠZ MPDSԬɠ SABU+SAVŠUN DAAUHSԠAUؠUNԠN SSAƠNԠADSàNSAMŠHANN MPDSԬɠUN SASHSҠUNԠҠSԠUN DAM00SԠAGSϠS SABUƠUSSSҠUN DS5DABUƠGԠAK SBSԠSԠ PABUƠGD? ASSYS-SԠZ DAMSGNNϠ-SԠSGNNAKASSGNMNԠAB SBUDGϠSԠAK SZBUƠSPAK SZBU+SPUNԠ-DN MPDS5NϠ-DϠNԠAK MPDSԬɠYS- SPà3 SԠSAUNŠϠSԠADSPSNHŠADSP. ABŠNHŠDSàSDNԠBԠNSNAND USHHŠNA̠SҠMŠAԠHŠND GNAN. ANGSUN: DASPàBUҠADDSS..ADDSSƠHŠNNŠDS SBS UNGS.MANNGSS SԠNP SADSԠSAVŠHŠADDSSҠAB DBABԠGԠH AŠBԠM SBDSKDHŠDS DADSԠGԠHŠMADDSS DBASBUƠANDHŠϠADDSS SBMVנANDMVŠHŠDS Dà-9 DBABԠNנ AŠHŠB SBDSKDBAKϠHŠDS DAUBUƠUSH DBUBU+HŠNA̠BU AŠM SBDSKD MPSԬɠUN HDMHGNMMNɯϠDSàDV HŠDSKDSUBUNŠSHŠMANDSàNPUԯUPUԠDV. ԠSSUPHŠMPŠANSҠANDADSҠS DSSNHŠDS.ԠASUN̠HŠANS SMP.SAUSSDNŠAҠAHANSҠҠ PԠSHŠPAҠSASKDϠUNNHŠSH. ҠDVŠYNDҠSHŠVABŠҠҴ0S AKN.ҠNԠADYSHŠPAҠSND. ҠHҠSNSAŠMAD.ƠHŠҠS̠S AND: A-ƠHŠNԠAGSSԠԠϠNŠND B-SŠNYPAҠANDHA ADSàADDSS-6DSԠBASS- BDSàSAUS SPà3 ANGSUN ADSKADDSS-NA6DSҠBASS- BŠADDSS ŠҠAD Š0Ҡ UN-AAYSNMA--GS.MANNGSS SPà3 DSKDNP B̬BSťԠHŠADŠB SBMADDҠANDSAVŠHŠADDSS SADMNDDϠAKMAPPNG ANDMSAŠS SASԱSAV ҠDMNDSAŠHŠAK ŬASAHUNԠAGϠ AƬAƠAŠAKϠנA DBDSԱGԠADDSS SZSYSMSAHPAAMҠABŠ-SAH? ADBP3YS-ADDHŠϠGԠSAHPAAMS ADABɠADDSԠAKϠAVŠAK SAԣA0SAVŠABSUŠAK NBSPABŠADDSSϠADDSS DABɠASԠSKAG SAASKSԠADDSSƠASԠSKAG NBSPϠUNԠNUMBҠADDSS DBBɠGԠSUBHANN̠NUMBҠMAB ŬBBSUNԠNԠŠSHGHHADB SBUNԠSAVŠUNԠNUMB ADBM000SԠMMANDS DANԱADDNԠAGϠ ADABMMAND SAףMDANDSԠŠMMAND ADBM000AD SBңDMSԠAD ADBM000 SBSKàSK ASZŬSSƠŠ0 NASԠHAD DBSԱGԠS BSBSAUA̠S SBHADSAV ADBNSàSUBAԠNUMBҠNASD SSBSSƠPSV SBHADSԠS AMVŠNנHADB AƬAƠA ADAHADANDADDHŠS SAHADSAVŠHADSҠADDSS YDAN0SԠ0YUN SADN DSK6SƠSԠAGҠSAUS SBSAàGϠDϠSAUS ANDM00HKADYB SZAƠS MPNҠGϠ̠HŠMAN DAԣA0SԠAKϠA SBSKANDSKHŠD DBMADDҠSԠHŠŠADDSSϠB DAңDMSԠҠAD SSBSS? DAףMDAYS-SԠϠ DSK0àSԠUPMMAND DSK0ASNDMMAND DSK5SƠ0SԠҠ ŬSSBAD? DSK5Sà0àYSSԠҠAD DADSKDҠGԠDMAD A6ASSGNDMA àSԠҠADDSS BSNDADDSS DADMSԠNGHϠ- SàSԠҠNGH ASND Sà6àSAԠDMA DSK03SààSAԠDV à6 SBSAàGԠSAUS SASABSAV SASSƠK MPDSKDɠUN A̬ŬAAҠSGNB PAP9ŠPԠ? MPPMYS-GϠ̠HM PAP5DVŠYND? MPDSBMPGAM-- ANDM00SAŠADYB SZAADY? MPNҠNϠ-GϠ̠HM DAP0YS-YϠV SBSKSK0 AAND SBSKZ SZDNSPA̠ҠUN DAN0ANDN SZDNԠMŠHSPUN MPDSK6NԠNYԠGϠYAGAN DANԱ0MSNNԠPHAS? SZA MPNŬɠYSGϠϠNԠҠUN DSKҠDAҲSŠSND SBҠҠ DADMNDGԠDSKADDSS DBSABANDHŠSAUS HԠBPAUS MPYYAGANNSA SPà PMSBSPAŠŠPԠSHS DAP33 DBMS3Ơ-S SBDKYɠ̠HŠMANϠUNԠN HԠ3BAԠҠUNN MPYYAGAN. SPà NҠSBSPAŠDSàSNԠADY DAP DBMSSNDHŠDϠHŠMAN SBDKY DSK56A0GԠSAUSϠA HԠ33BPAUS MPYNSAԠY SPàoc DSBMDANԱ AƬAƠDVŠYND SAAGPANNPGSS MPDSKDɠGNҠҠANDUN DAҴ0SŠDVŠY̠SGA SBҠNԠVABŠ-SHUDNVҠHAPPN- SPà Ҵ0ASà0ҠD SPà SKNPSKUN DSK5A0SNDAK DSK5Sà0àSԠDAAϠSHנAKSND AƬAƠAKϠHGHA ADAUNԠADDHŠUNԠNUMB DBSKàGԠSKMMAND PAASKɠASASԠSKNHSUNԠϠSAMŠAK ADBMSGNYS-HANGŠϠADDSSMMAND SAASKɠSAVŠASԠSKADDSS DSK09àSԠUPMMANDHANN DSK0BSNDMMAND DSKSàà̠N DBHADGԠHADSҠADDSS DSK59SS0ADY? MPDSK59A DSK60B0SNDHADS DSK6Sà0àSA SBSAàGԠSAUS MPSKɠUN SPà SAàNPAԠANDSAUSUN DSK0SSAԠҠAG MPDSK0 SƠ6AҠDMA DSK05àAҠN DSK53Sà0àSԠDAA DAUNԠSAUS DSK0ASNDSAUSUS DSK0SààSA DSK5SS0AԠ MPDSK5SAUS DSK55A0GԠSAUSAND MPSAìɠUN SPà MADDҠNPMMYADDSSҠUNԠANS DMNDNPDSàADDSSҠUNԠANS DNԠNPҠUNԠҠUNԠANS SԱNP SABNP ASKNP NSàNP ףMDNP ҲASàPAYҠDAA MS3DƠ+ ASàUNƠDSàPԠ-PSSUN MSDƠ+ ASàADYDSàANDPSSUN G NDU ND TRNNT !< 92001-18017 1529 S C0122 RTE II SYS GEN DVR-PART 2 (FIXED HEAD DISC)             H0101 ASMB,R,L,C FH-RTGEN DRIVER SECTION. HED FH RTGEN DRIVER SECTION * NAME: FHDVR * SOURCE: 92001-18017 * RELOC: 92001-16017 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FHGEN 92001-16017 REV 1529 DATE CODE 750630 SUP * * CONSTANTS ARE EXTERNAL ON BASE PAGE * EXT N1,N2,N3,N4,N5,N6,N8,N9,N10,N16,N27 EXT N64,P2,P3,P4,P5,P6,P7,P8,P9,P11,P12,P13,P14 EXT P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 EXT P28,P29,P31,P33,P60,P64,P99,P202,P6K,L60,L2000 EXT M60,M77,M120,M177,M377,M777,M400,D128,M200,M0760 EXT M1740,M1600,M1777,M2000,M1377,M7400,M7000,M7600 EXT M7700,M7777,M0300,M1177 EXT DPWRS,P0100,P1000,P100,P10,P1 EXT OPWRS,M0100,M1000,M100,M10 EXT LWASM,PPREL,PPREL,BLANK,UBLNK,MSIGN,RPARB EXT DSKA,MOVW * * ENTRY POINTS FOR THIS MODULE * * VARIABLES ... * ENT SYSCH SYSTEM SUBCHANNEL ENT AUXCH AUX DISC SUBCHANNEL ENT DSIZE SYSTEM DISC SIZE (TRACKS) ENT DAUXN AUX DISC SIZE (TRACKS) ENT DSETU INITILIZE SUBROUTINE ENT DSKSC SCRATCH DISC ADDRESS ENT LSSYS,LSAUX LAST SEEK FLAGS ENT DISKA INCREMENT DISC ADDRESS SUBROUTINE ENT DISKO DISC OUTPUT ROUTINE ENT DISKI DISC INPUT ROUTINE ENT DSTBL GENERATE DISC TABLE SUBROUTINE ENT TRTST TEST CURRENT TRACK SUBROUTINE ENT DTSET SET UP TAT SUBROUTNE ENT SDS# SYSTEM DISC SECTORS/TRACK ENT ADS# AUX DISC SECTORS/TRACK ENT FSECT FLUSH FINAL SECTOR FROM CORE D ENT DERCN DISC ERROR COUNT ENT DBPO ORG OF DUMMY BASE PAGE ENT DSKAB INITIAL ABS DISC ADDRESS ENT PTBOT CONFIGURE DISC/ PUNCH BOOT * * UTILITY SUBROUTINES * EXT DOCON,SPACE,READ,GETNA,GINIT,GETOC,GETAL EXT INERR,YE/NO,LSTS,ERROR,LSTE,LABDO,IRERR EXT OUTID,CONVD * A EQU 0 B EQU 1 DRKEY EQU 102B TTY ADDRESS SPC 3 BEGIN EQU * START OF PROG. SPC 1 TBUF BSS 5 TEMP BUFFER TBCHN BSS 1 TEMP DRHSP EQU 103B PUNCH ADDRESS * * DEFINE LST ADDRESSES * LST EQU 7 LST IS FIXED ON BASE PAGE LST1 EQU LST LST2 EQU LST+1 LST3 EQU LST+2 LST4 EQU LST+3 LST5 EQU LST+4 DSKAB OCT 4 INITIAL DISC ADDRESS FOR SYS CODE ASBUF DEF ASPBF+1 ADDRESS OF 9-WORD BUFFER IN BOOT ABOOT DEF START ADDRESS OF BOOTSTRAP LOADR LSAUX NOP LSSYS EQU *-1 DSIZE BSS 1 DISK SIZE - NO. OF TRACKS DSKSC BSS 1 ADDRESS OF DISK SCRATCH AREA DAUXN BSS 1 AUXILIARY DISK SIZE SDS# BSS 1 # SECTORS/TRACK FOR SYSTEM DISC$ ADS# OCT 0 # SECTORS/TRACK FOR AUX. DISC DERCN BSS 1 DISK ERROR COUNTER SYSCH NOP SUBCHANNEL OF SYSTEM UNIT AUXCH NOP SUBCHANNEL OF AUX UNIT PTRAK NOP NUMBER OF PROTECTED TRACKS * DBP EQU * START OF DUMMY BASE PAGE DBPO EQU DBP DEFINE ENTRY POINT * INTMP BSS 1 TEMP FOR INITILIZATION ROUTINES * MES50 DEF *+1 ASC 7,START SCRATCH? MES40 DEF *+1 ASC 8,# SECTORS/TRACK? * HED FH RTGEN DRIVER SECTION INTERACTIVE CODE * * DSETU NOP ENTRY POINT FOR QUESTION SECESSION. CHNLD LDA P13 LDB MESS2 MESS2 = ADDR: DISK CHNL? JSB READ PRINT MESSAGE, GET REPLY LDA P2 SET FOR 2 OCTAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP CHNLD REPEAT INPUT * STA DCHNL SET DISK CHANNEL NUMBER * SPC 1 JSB SPACE ISYSC uLDA P14 SEND MESSAGE: LDB MESS1 SYS DISK SIZE? JSB READ GET ANSWER LDA N3 THREE DIGIT DECIMAL JSB DOCON GO CONVERT JMP ISYSC ERROR - TRY AGAIN * STA DSIZE SET SYSTEM SIZE SPC 1 JSB SPACE STREL LDA P14 LDB MES50 MES50 = ADDR: START SCRATCH? JSB READ PRINT MESSAGE, GET REPLY LDA N3 SET FOR 3 DECIMAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP STREL REPEAT INPUT * LDB DSIZE GET DISC SIZE CMB,INB IF INPUT NOT GREATER ADB A THAN DISC SSB SIZE JMP STREM SKIP * JSB INERR ELSE ERROR JMP STREL TRY AGAIN * STREM SZA IF SYSTEM AND ZERO SKIP RAL,SLA ELSE MULTIPLY BY TWO LDA DSIZE ZERO ON SYSTEM - USE UPPER HALF SYSTEM ALF,ALF ROTATE TO RAR,RAR TRACK LOCATION AND M7600 MASK TO TRACK STA DSKSC SET START SCRATCH * JSB SPACE SET NO. PROTECTED PROTD LDA P14 LDB MES21 'NO. PROTECTED?' JSB READ PRINT MESSAGE, GET REPLY LDA N2 SET FOR 2 DIGIT DECIMAL INPUT JSB DOCON GET DIGITS JMP PROTD IF ERROR REPEAT * STA PTRAK SET NO. PROTECTED TRACKS * * JSB SPACE GET # SECTORS FOR SYSTEM DISC #SEC1 LDA P16 LDB MES40 '# SECTORS/TRACK?' JSB READ PRINT MESSAGE, READ REPLY LDA N3 SET FOR 3 DECIMAL DIGIT INPUT JSB DOCON GET DIGITS JMP #SEC1 IF ERROR REPEAT * STA SDS# SET # SECTORS FOR SYSTEM DISC * * GET AUXILIARY DISK SIZE JSB SPACE NEW LINE AUXDS LDA P14 LDB MES33 MES33 = ADDR: AUX DISK SIZE? JSB READ PRINT MESSAGE, GET READ LDA N3 SET FOR 3 DECIMAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP AUXDS $ REPEAT INPUT * STA DAUXN SET AUXILIARY DISK SIZE SZA,RSS IF AUX. DISC NOT PRESENT, JMP DSETU,I SKIP # OF SECTORS INPUT. * * GET # SECTORS FOR AUX. DISC JSB SPACE NEW LINE #SEC2 LDA P16 LDB MES40 REPEAT JSB READ # SECTORS LDA N3 MESSAGE AND JSB DOCON INPUT. JMP #SEC2 STA ADS# SET # SECTORS OF SYSTEM DISC JMP DSETU,I RETURN TO MAIN GENERATOR * HED FH RTGEN DRIVER SECTION CONFIGURE DRIVERS AND BOOTSTRAPS PTBOT NOP * * CONFIGURE DISK I/O INSTRUCTIONS * LDA N5 LDB HPDSK GET HIGH PRIORITY ADDRESSES JSB STDSK SET HIGH PRIORITY CHANNEL NOS. * ISZ DCHNL SET DISK CHNL NO. TO L.P. * LDA N9 JSB STDSK SET LOW PRIORITY DISK ADDRESSES * CLA DSK5 OTA 0 SET DISK ADDRESS = 0,0 DSK6 LIA 0 GET STATUS WORD AND P4 ISOLATE PROTECT BIT SZA SKIP - TRACK IS PROTECTED JMP PTB1 * JSB SPACE NEW LINE LDA P33 LDB MES32 MES32 = ADDR: TURN OFF DISK ETC. JSB DRKEY,I PRINT: TURN OFF DISK PROTECT HLT 32B WAIT FOR OPERATOR JMP DSK6 REPEAT CHECK * PTB1 LDA ASPBF GET ADDRESS OF BOOTSTRAP BUFFER AND M1777 ISOLATE PAGE BITS STA B LDA LWASM GET LWA SYSTEM MEMORY AND M0760 ISOLATE PAGE NUMBER STA TBUF SAVE PAGE NO. OF BOOTSTRAP LDR IOR B SET A = NEW BUFFER ADDRESS STA ASPBF SET BUFFER ADDR IN BOOTSTRAP LDA SDS# SET # OF SECTORS -1 FOR ADA N1 SYSTEM DISC IN STA #SECT BOOTSTRAP LOADER. CPA M177 IF 128 SECTORS/TRACK JSB FS128 MAKE A FAST BOOT CMA,INA AND M177 CONSTRUCT AND SET UPDATE TRACK STA #MASK # WITH SECTOR 0 VALUE. CLA,INA SET -,DISK ADDRESS = 0,1 LDB ABOOT GET ADDRESS OF BOOTSTRAP JSB DISKO OUTPUT BOOTSTRAP TO 0,1 * CLA SET DISK ADDRESS = 0,0 LDB ADBUF GET ADDRESS OF DBUF JSB DISKI READ DISK 0,0 LDB ADBUF GET ADDRESS OF DBUF ADB P3 ADJUST FOR 4TH WORD IN 0,0 LDA B,I GET WORD 4 OF 0,0 (BASIC ENT PT) STA DMS SET BASIC ENTRY PT. IN NEW LDR LDA B1600 GET PAGE OFFSET OF BOOTSTRAP IOR TBUF ADD PAGE NO. STA RT/TS SET RT LOADER ENTRY PT. IN LDR CLA SET DISK ADDRESS = 0,0 LDB BLODR GET ADDRESS OF 0,0 BOOTSTRAP JSB DISKO PUT OUT 0,0 BOOT JMP PTBOT,I RETURN TO MAIN * * FS128 NOP FAST BOOT ROUTINE LDB JMPST THIS ROUTINE STB ADP64 MODIFIES THE BOOT LDB JMPPL TO LOAD THE WHOLE AREA IF STB LDAB THE CONTROLER SUPPORTS END OF JMP FS128,I TRACK SWITCHING (IT DOES IF 128 SECT/TR) * BLODR DEF RLOAD ADDRESS OF 0,0 LOADER DCHNL NOP DISC CHANNEL WDCNT NOP TEMP SKP * * INSERT CHNL NO. IN INSTRUCTION * * THE STDSK SUBROUTINE SETS THE CURRENT DISK CHANNEL * NOS. IN THE I/O INSTRUCTIONS. * * CALLING SEQUENCE: * A = NO. WORDS TO BE CONFIGURED (NEG.) * B = ADDRESS OF INSTRUCTION ADDR LIST * JSB STDSK * * RETURN: * A = DESTROYED * B = NEXT INSTRUCTION ADDRESS * STDSK NOP STA WDCNT SAVE NO. OF INSTRUCTIONS LDA B,I GET INSTRUCTION AND M7700 ISOLATE INSTRUCTION CODE IOR DCHNL INSERT CHANNEL NO. STA B,I SET INSTRUCTION IN CODE INB INCR INSTRUCTION ADDRESS ISZ WDCNT SKIP - ALL INSTRUCTIONS CONFIG. JMP *-6 CONFIGURE NEXT INSTRUCTION JMP STDSK,I RETURN SPC 3 B1600 OCT 1600 MESS1 DEF *+1 ASC 7,SYS DISC SIZE? MESS2 DEF *+1 ASC 7,FH DISC CHNL? MES21 DEF *+1 ASC 7,NO. PROTECTED? MES32 DEF *+1 ASC 17,TURN OFF DISC PROTECT - PRESS RUN MES33 DEF *+1 ASC 7,AUX DISC SIZE? * * HPDSK DEF *+1,I HIGH PRIORITY CHANNEL NOS. DEF LINKG DEF DMAC DEF DSK3 DEF DSK8 DEF DSKB * LOW PRIORITY CHANNEL NOS. DEF DSK2 DEF DSK4 DEF DSK5 DEF DSK6 DEF DSK7 DEF DSK9 DEF DSKAG DEF DSKC HED FH RTGEN DRIVER SECTION** TRACK 0, SECTOR 0 BOOTSTRAP ** * ADBUF DEF *+1 BSS 64 BUFFER TO PUSH BOOT 0,0 AROUND IN BSS BEGIN+1000B-* MAKE CODE EASY TO READ * THE FOLLOWING IS THE FORMAT FOR THE PORTION OF THE * BOOTSTRAP LOADER TO BE SET IN 0,0. THIS SECTION OF THE * BOOTSTRAP IS LOADED INTO 2 TO 77B BY THE PROTECTED BINARY * LOADER. WHEN IT IS READ COMPLETELY INTO CORE IT CHECKS FOR * READ PARITY ERRORS DURING ITS INPUT. FOLLOWING THIS A HALT * INSTRUCTION PERMITS THE OPERATOR TO PROTECT THE BASIC * BINARY LOADER AND SET SWITCH 0 OF THE SWITCH REGISTER * TO 0 (EITHER REAL TIME EXECUTIVE OR TIME-SHARED BASIC) * OR 1 (DISC MONITOR SYSTEM). PRESSING 'RUN' READS THE * SELECTED SYSTEM LOADER FROM 0,1 OR 0,2 RESPECTIVELY. THIS * PORTION OF THE BOOTSTRAP OPERATION WILL THEN LOAD INTO * CORE THE SELECTED SYSTEM AND TRANSFER CONTROL TO IT. * BSBSO EQU * * RLOAD OCT 0,0 DON'T USE (A) AND (B) RT/TS OCT 0 REAL TIME EXEC/TIME-SHARED BASIC DMS OCT 0 HLT 4,C IN CASE OF POWER FAIL * BSLD0 STA BSLD2-BSBSO+1 CHANGE IRRECOVERABLE HLT 0 ISZ BSLD2-BSBSO INTO RECOVERABLE HLT 1 HLT 77B PROTECT BBL, SET SWR FOR SYSTEM LDA LINKG-BSBSO SET UP DISC/DMA OTA 6 LINKAGE * BSLD1 LIA 1 SELECT SYSTEM LOADER CLB,INB FROM SWITCH REGISTER: SLA SWR = 0 IMPLIES SECTOR 1 INB SWR = 1 IMPLIES SECTOR 2 DSK7 OTB 0 OUTPUT DISC ADDRESS CCE,INB SAVE LDA 1,I CHOSEN LOADER'S STA CORAD-BSBSO ENTRY POINT RAL,ERA OUTPUT 'READ' FORM CLC 2 OF LOADER'S OTA 2 CORE ADDRESS LDA .N64-BSBSO OUTPUT STC 2 TRANSFER OTA 2 LENGTH STC 6,C START DMA DSK8 STC 0 START DISC TRANSFER JSB TSTAT-BSBSO VALIDATE READ JMP CORAD-BSBSO,I TRANSFER TO SYSTEM LOADER * TSTAT DEF BSLD0-BSBSO (INITIAL EXIT) DSK9 LIA 0 WAIT FOR SLA TRANSFER JMP *-BSBSO-2 COMPLETION AND BSB32-BSBSO TRANSFER SZA,RSS OK? JMP TSTAT-BSBSO,I YES BSLD2 HLT 0 NO (HLT 1, NOP AFTER CHECK JMP *-BSBSO-1 JMP BSLD1-BSBSO RETRY LOAD * CORAD OCT 0 SYSTEM LOADER ENTRY ADDRESS LINKG OCT 20000 DISC/DMA LINKAGE TEMPLATE BSB32 OCT 32 TRANSFER VALIDATION MASK .N64 DEC -64 * BSS 77B-*+BSBSO PUT JUMP IN LOCATION 77B * JMP DSK9-BSBSO TEST BOOTSTRAP LOAD SPC 2 BSS BEGIN+1600B-* SKIP TO 1600B TO AVOID PROBLEMS WITH * 'O EQU START-1600B' HED FH RTGEN DRIVER SECTION ** TRACK 0, SECTOR 1 BOOTSTRAP** * * THE FOLLOWING LOADER PERMITS LOADING OF THE RESIDENT PORTIONS * OF THE REAL TIME MONITOR. THE LOADER IS LOCATED ON SECTOR 1, * TRACK 0 OF THE SYSTEM DISC. IT IS GENERATED BY THE SYSTEM * GENERATOR AND CONSISTS OF: * * (1) THE INSTRUCTIONS REQUIRED FOR LOADING THE SYSTEM * (2) THE DISK AND CORE ADDRESSES SPECIFYING LOADING * * * THE ADDRESSES REQUIRED FOR LOADING ARE THE FOLLOWING: * * (A) BASE PAGE LINKAGES * (1) LOW CORE ADDRESS * (2) HIGH CORE ADDRESS * (3) DISK ADDRESS OF ABSOLUTE CODE * * (B) SYSTEM, RT RESIDENT MAIN * (1) LOW CORE ADDRESS * (2) HIGH CORE ADDRESS * (3) DISK ADDRESS OF ABSOLUTE CODE * * (C) BG RESIDENT MAIN * IS ALWAYS ENTERED TO * * INITIALIZE A SYSTEM OR USER REQUEST TO * * ANY 264X SUBSYSTEM. * ****************************************** * * REV.1805 FIXES SPURIOUS INTERRUPT PROBLEM AFTER * REV.1806 FIXED T BIT ON KEYBOARD ENTRY * POWER UP. ALSO CHANGED WRITE T.O. TO 3.5 SEC * IFN NAM DVR05 92001-16028 REV. CODE 1806 1-17-78 XIF * IFZ NAM DVR05 92001-16027 REV.1806 1-17-78 XIF ENT I.05,C.05 EXT $LIST,$OPSY I.05 NOP STA TEM12 SAVE SELECT CODE CLB STB TEMP5 SET I.05 C.05 POINTER.DO NOT MOVE JSB SETIO OR Y O U ' L L L O S E CLB DO NOT MOVE THIS BEFORE "SETIO" !!!!! STB EQT20,I "DO'NT SAY I DID'NT TELL YOU SO!!!" * ** DVA ** SFS01 SFS CARD IF FLAG SET THEN POWER FAIL JMP I.055 FLAG NOT SET I.054 JSB XMIT SET UP TO CLR INTERRUPT LDA BN5 CLR ALL CARD INTERRUPTS I.053 JSB OUT2 (0-377) CPA BN7 IS THIS ALL? JMP I.055 YES! FINISHED INA JMP I.053 DO IT AGAIN I.055 LDA EQT16,I FOR BINARY CTU READ AND BN1 CLR SELECTED BITS STA EQT16,I BIT 0 (0\1=TERM.STAT. READ NO\YES) * * * LDA EQT17,I GET THE SCHEDULE FLAG. SZA IS IT DEFINED? JMP I.051 YES, CONTINUE LDA TEM12 SET UP SCHEDULE FLAG . ADA B.6 INDEX INTO INTERRUPT TABLE ADA INTBA GET SCHEDULE WORD.IF WORD NEG. LDB A,I THEN ID SEG. OF PROG. TO SCHED. CMB,SSB,INB CHANGE SIGN OF WORD. CCB NO PROG. TO BE SCHED. (INT. POINTS TO EQT) STB EQT17,I SAVE FOR FURTURE REFERENCE. LDB EQT1 SET EQT ADDRESS IN INTERRUPT STB A,I TABLE LDA EQT4,I SET THE "I WILL HANDLE IOR BN4 TIME OUT" BIT IN STA EQT4,I EQT4.RESTORE WORD. JMP I.054 GO CLEAR ALL SPECIAL INTERRUPTS * * ***************************************************** * "B.X" IS NEG. BINARY NO., "D.X" IS NEG. DECIMAL NO* * "BN" IS SOME BINARY NO. * * SEE BELOW. * ***************************************************** * BN1 OCT 137767 BN4 OCT 10000 BN7 OCT 60377 BN5 OCT 60000 BN70 OCT 173777 * B.6 OCT 177772 B100 OCT 100 * * TEM13 NOP CARD STATUS ON INTERRUPT TEM12 NOP SELECT CODE * * I.051 JSB CDINT *  IFZ * SWH1A NOP SWITCH CRT \CTU ,LP= RSS\NOP * JMP I.251 YES! A CTU OR LP REQUEST XIF LDA TEMP4 GET REQUEST TYPE RAR THIS IS A CRT REQUEST SSA,SLA JMP I.05C THIS IS A CONTROL REQUEST. ** DVA ** LDA TEMP4 GET REQUEST TYPE SLA,RSS JMP I.05W THIS IS A WRITE REQUEST JMP I.05R THIS IS A READ REQUEST * ****************************************************************** * SUBROUTINE INITIALIZES THE COMPLETION SECTION * * FOR ALL COMPLETION INTERRUPTS. * * ****************************************************************** * * C.05 NOP ISZ TEMP5 SET CONT. FLAG JSB SETIO CONFIGURE IO ** DVA ** CLC01 CLC CARD GET CARD STATUS LIA01 LIA CARD STA TEM13 STORE CARD STATUS AND B40 CHECK FOR BUFFER OVERFLOW ** DVA SZA HAS IT OVER FLOWED? ** JMP EOOP9 HARD OVERFLOW (B=3,XMISSON ERROR) *** LDA TEM13 CHECK FOR BREAK INT. TO AVOID AND B100 SPURIOUS INT. AFTER POWERUP SZA JMP EXIT5 THIS IS A BREAK INT. *** LDA EQT1,I GET QUE WORD SZA IS A REQUEST IN PROCESS? JMP *+4 YES! JSB SCHED NO REQUEST IN PROCESS JSB SETEM SET FOR ANOTHER INTERRUPT JMP EXIT5 LDA EQT4,I ALF CHECK FOR TIME OUT ENTRY SSA IS THIS TIME OUT (BIT 11) ? JMP TIMOT YES! LDB EQT11,I GET INTERRUPT ADDRESS JMP B,I GOTO IT * ********************************************* * IS CALLED FOR ALL TIMEOUT * * PROCESSING * ********************************************* * ** DVA TIMOT JSB CDINT REINITIALIZE IO CARD JSB SETEM GO ENABLE CONSOLE *** LDA B4 LDB TEM10 GET DEVICE TYPE. IF CRT/GRAPHICS ADB B.60 DO NOT DOWN SZB,RSS CLA CRT JMP C.05,I *** * ***************************************************** * IS CALLED WHENEVER AN INTERRUPT OCCURS AND* * NO PROGRAM IS SCHEDULED (I.E. USER HITS A KEY TO * * GET THE SYSTEM'S ATTENTION * ***************************************************** * * SCHED NOP JSB CLRCD GET CHAR. OFF CARD CLA STA EQT15,I SET T.O. TO 0 LDB EQT1 IS THIS THE SYSTEM CONSOLE? CPB SYSTY JMP OPFLG YES! GO SET OPERATOR FLAG LDB EQT17,I GET TERMINAL ID ADD. LDA EQT28,I IS TERMINAL ENABLED? RAR,SLA SSB YES! IT IS ENABLED JMP SCHED,I IT IS NOT STB TEMP1 *** LDB EQT4 GET ADDRESS OF THIS TERMINAL'S EQT4 STB TEM7 JSB $LIST GO SCHEDULE IF POSSIBLE OCT 601 SCHEDULE PARAMAETER TEMP1 NOP TEM7 NOP JMP SCHED,I RETURN *** OPFLG ISZ OPATN SET OPER. ATTN. FLAG JMP SCHED,I EXIT * ************************************************* * DOES CONTROL REQUEST PROCESSING FOR * * THE KEYBOARD\DISPLAY. * ************************************************* * *******TERMINAL STATUS****************************** * BIT STATUS * * 1 TERMIAL ENABLED * * 5 "CONTROL D" ENTERED * * 7 BUFFER FLUSH ENABLED * * * **************************************************** * * *******CRT CONTROL********************************** * EXEC CODE CRT CONTROL REQUEST * * 11 SPACE LINES * 20 ENABEL TERMINAL * * 21 DISABLE TERMINAL * * 22 SET TIME OUT * * 23 SET BUFFER FLUSH * * 24 REMOVE BUFFER FLUSH * * 25 UPDATE TERM. STATUS * * **************************************************** * I.05C LDA EQT6,I GET CONTROL WORD LSR 6 SHIFT LDB EQT7,I SSB,RSS CMB,INB COMPLEMENT OPTIONAL PARAMETER AND B37 ISOLATE CON TROL PARAMETER * CPA B11 JMP CN11 GO SPACE LINES CPA B20 JMP CN20 GO ENABLE TERMINAL CPA B21 JMP CN21 GO DISABLE TERMINAL CPA B22 JMP CN22 GO SET TIME OUT CPA B23 JMP CN23 GO SET BUFFER FLUSH CPA B24 JMP CN24 GO REMOVE BUFFER FLUSH *** CPA B25 GET TERMINAL STATUS JMP CN25 *** ********************REJECT REQUEST****************** CLA JMP IOR19 ** * * B11 OCT 11 LF OCT 12 B37 OCT 37 B20 OCT 20 B21 OCT 21 B22 OCT 22 B23 OCT 23 B24 OCT 24 B25 OCT 25 B2 OCT 2 B.3 OCT 177775 B200 OCT 200 B17 OCT 17 B70 OCT 70 BN73 OCT 77776 BN68 OCT 163777 B.60 OCT -60 * **SPACE LINES***** **MAX NO. IS 55** * CN11 SZB,RSS CHECK FOR 0 VALUE CCB CHANGE TO -1 STB EQT7,I ADB B70 MAX NO. OF (CR,LF'S) IS 55 SSB BECAUSE CARD BUFFER IS 128 JMP REJ2 JSB CDINT MASTER RESET JSB EORP OUTPUT (CR,LF) JSB EXIT1 !!!!!!!!!!!!!!!!! JSB ENAK GIVE TERM. TIME TO PROCESS ISZ EQT7,I JMP *-5 * CN11B CLA STA EQT19,I SET A REG. EXIT JMP EOOP4 JMP EOOP4 DVA * * * **GO ENABLE TERMINAL(BIT 1 OF EQT 19)** * CN20 LDA EQT17,I IF -1 THEN NO PROG. TO SCHED. INA,SZA OR "0" INTO EQT28 IF NO PROG. LDA B2 SET BIT 1 (TERM. ENABLED) IOR19 IOR EQT28,I CONSTRUCT NEW STATUS WORD "B@< ST19 STA TEM8 STA EQT28,I RESTORE JSB STPUT PUT IT IN EQT5 JMP REJ2 GO EXIT A=2 * **GO DISABLE TERMINAL** * CN21 LDA B.3 AND19 AND EQT28,I REMOVE BIT 1 JMP ST19 * **GO SET NEW TIME OUT** * CN22 STB EQT14,I B REG. HAS NEW TIME OUT.STORE IT. JMP REJ2 * **GO SET BUFFER FLUSH (BIT 7 OF EQT28)** * B*^^^^ FIRST LINE OF TAPE 2 ^^^^** CN23 LDA B200 SET BIT7 IN EQT28 JMP IOR19 * **GO REMOVE BUFFER FLUSH** * CN24 LDA BN27 REMOVE BIT 7 JMP AND19 * *** UPDATE TERMINAL STATUS * CN25 LDA EQT16,I AND BN73 CLEAR BIT0 AND 15 STA EQT16,I JSB TERST GET STATUS JMP CN11B *** ** DVA ** * **********EQT6 FOR READ\WRITE***************** * * EQT6 FOR READ\WRITE OPERATIONS IS: * * BIT MEANING * * 6 0\1 IS ASCII\BINARY * * 8 0\1 IS OFF\ON ECHO * * 10 0\1 OFF\ON HONEST MODE * * 9 AND 10 SET USER ENABLED BLOCK READ * * ********************************************** * * I.05W CLB,RSS SETUP EQT9(RUNNING CHAR. ADD.) AND I05W1 NOP EQT 10 (LAST CHAR. ADD.) LDA EQT7,I GET BUFFER STARTING ADDRESS RAL,CLE MULTIPLY S.A. BY TWO STA EQT9,I STORE AT EQT9 LDA EQT8,I GET BUFFER LENGTH CMA,SSA,INA,RSS COMPLEMENT,ARE THEY CHAR.? JMP I.W1 YES! CMA,INA MAKE POS AGAIN RAL MULTIPLY WORDS X 2 AND * I.W1 ADA EQT9,I STA EQT10,I STORE LAST CHAR. ADD. AT EQT10,I CMA,INA MAKE LAST CHAR. ADD. NEG. ADA EQT9,I - NO. OF CHAR. ARE NOW IN A REG. SZB JMP I05W1,I SZA,RSS IS IT 0 ? JMP I.W32 YES! IT IS ZERO * *** LDA TEM11 IS THIS GRAPHICS? CPA B3 SUBCHANNEL 3 JSB GRAPH *** JSB TRAN1 GOTO OUTPUT SUBROUTINE * LDA TEMP2 IS THIS HONEST MODE? SZA,RSS * I.W32 JSB EORP THIS IS NOT HONEST JSB EXIT1 JSB ENAK JMP EOOP2 ABOVE NEEDED FOR INTERRUPT * * ********************************************** * WRITES TO THE DISPLAY,CTU AND PRINTER. * STARTING ADDRESS OF DATA IS EQT9,I * * "TEMP1" COUNTS THE NUMBER OF CHAR. IN ONE * * TRANSMISSION AND IS USED TO LIMIT THE TIME * * IN THE DRIVER FOR A SINGLE INTERRUPT. * * IF BUFFER IS NOT EMPTIED IN 1 CALL TO WE* * WILL WAIT FOR A BUFFER EMPTY INTERRUPT AND * * COMPLETE THE TRANSMISSION. * ************************************************** * * TRAN1 NOP LDA TRAN1 SAVE RETURN ADDRESS STA EQT19,I TRAN4 JSB XMIT SET CARD FOR XMIT LDB BN2 SET FOR 33 CHAR.MAX STB TEMP1 IN ONE TRANSMISSION * TRAN2 LDB EQT9,I GET BUFFER ADDRESS X 2 CLE,ERB DIVIDE BY TWO TO GET TRUE ADD. * LDA B,I GET WORD SEZ,RSS DO WE WANT UPPER OR LOWER CHAR.? ALF,ALF UPPER! SHIFT TO LOWER AND B377 LOWER! MASK WORD * IFZ SWH1B NOP CRT\CTU=RSS\NOP JMP TRAN3 YES! IGNORE BELOW CHECKS XIF * * LDB FILL DO NOT SEND "ESC" TO CRT ON SZB BINARY WRITE. JMP ON1 CPA ESC IS THIS AN ESCAPE? JMP OUT6B * ON1 CLB,INB SET B REG TO 1 ADB EQT9,I ADD 1 TO EQT9 CPB EQT10,I IS THIS THE LAST WORD? RSS JMP OTA18 NO! CONTINUE LDB TEMP2 IS THIS HONEST? SZB JMP OTA18 THIS IS HONEST,IGNORE UNDERSCORE CPA B137 IS THIS A "_" UNDERSCORE? JMP EOOP8 YES! GO TO END OF OUTPUT PROCESSING JMP OTA18 TRAN3 LDB FILL IS THIS BINARY? SZB,RSS JMP OTA18 THIS IS BINARY,OUTPUT CHARACTER CPA CR IS IT A ? RSS CPA LF IS IT A LINEFEED? RSS IT IS A CPA RS IS IT A JMP TRAN5 YES,TERMINATE ON OROR * OTA18 OTA CARD OUT6B ISZ EQT9,I INCREMENT CHAR. COUNT LDB EQT9,I GET CURRENT CHAR. ADD.R CPB EQT10,I HAVE WE SENT LAST WORD? JMP TRAN5 THIS IS THE LAST CHARACTER ISZ TEMP1 OINCREMENT CHAR. COUNT. JMP TRAN2 WE HAVE NOT SENT 33 CHAR. JSB EXIT1 WE HAVE SENT 33 CHAR. *** LDA FILL CHECK FOR BINARY SZA JSB ENAK IT IS NOT JSB CDINT !!!!!! *** JMP TRAN4 NOW THAT CARD BUFFER IS EMPTY,RESTART TRAN5 LDA EQT19,I GET RETURN ADDRESS JMP A,I RETURN * * *************************************************** * DOES KEYBOARD READ. IF FIRST CHARACTER * * A "DC2" THE DRIVER EXPECTS A BLOCK TRANSFER AND * * WILL SEND A DC1 TO TRIGGER IT. IF THE FIRST * * CHAR. IS NOT A "DC2" THE DRIVER ASSUMES A CHAR. * * TRANSFER. *************************************************** * * I.05R CLB,INB JSB I05W1 GO SETUP EQT9 AND EQT10 JSB TERST GO CHECK TERMINAL STATUS LDA EQT6,I CHECK IF ECHO SET AND B400 ISOLATE BIT 8 (SET ECHO) RAR,RAR MOVE TO BIT 4 RAR,RAR JSB ECHO SET/CLR = 20/0 ECHO JSB SPCH1 SET CR AND RS INT. LDB BN9 SET RUBOUT INT. JSB CDSET LDB BN40 SET CONTROL "D" INT. JSB CDSET LDA EQT6,I CHECK FOR USER ENABLED BLOCK READ AND B3000 BITS 9,10 WILL BE SET CPA B3000 JMP C05R3 THIS IS ENABLED BLOCK READ JSB DC1OT ENABLE TRANSFER CLB,INB JSB CDSET SET CARD FOR RECEIVE,CHAR.MODE JSB EXIT1 WAIT FOR INTERRUPT * JSB CHRIN GET CHARACTER CPA B22 IS IT A DC2? JMP C05R3 FIRST CHAR. IS A DC2 * * *******THIS IS A CHARACTER TRANSFER********* * * LDA TEMP2 IS THIS HONEST? SZA JSB CLRNT CLB LDA FILL IF BINARY KEYBOARD SET FOR CHAR. REC. SZA,RSS INB IT IS BINARY KEYBOARD JSB CDSET SET BLOCK OR CHAR RECEIVE (B=0\1) LDB BN2 SET CHAR. PROCESS COUNT. FOR 33 CHAR. STB TEM9 FOR ONE INTERRUPT. JMP CHPR8 * * CLRNT NOP LDB BN56 CLR. RUBOUT INT. JSB CDSET LDB B412 CLR. CONTROL "D" INT. JSB CDSET JMP CLRNT,I * B6 OCT 6 RS OCT 36 B377 OCT 377 B137 OCT 137 CR OCT 15 BN9 OCT 57712 BN10 OCT 40000 BN13 OCT 140000 BN40 OCT 40412 B177 OCT 177 B4 OCT 4 B1400 OCT 1400 B3000 OCT 3000 B1512 OCT 1512 B3612 OCT 3612 BN56 OCT 17712 B412 OCT 412 * * ***********THIS IS A BLOCK TRANSFER********* * * C05R3 LDA EQT16,I THIS IS A BLOCK TRANSFER IOR BN10 SET BIT 14 =0/1 CHAR/BLK STA EQT16,I RESTORE SSA IS TERMINAL LINE STRAPPED? JMP C05R4 NO! IT IS PAGE STRAPPED * LDA EQT6,I CHECK FOR USER ENABLED BLOCK READ AND B3000 CPA B3000 JMP C05R5 *** LDA TEM14 GET CHAR. COUNT +1 AND B1400 IF 3 CR HAS ARRIVED CPA B1400 RSS JSB EXIT1 WAIT FOR CR JSB CHRIN GET CR *** JMP C05R5 * C05R4 LDB B1512 REMOVE CR INT. FOR PAGE (RS ONLY) JSB CDSET STRAP AND BLOCK MODE JMP C05R6 * * * WAS ADDED FOR THE 2645 * C05R8 LDB CHPC2 STB EQT11,I SAVE RETURN ADDRESS LDB FILL IF BINARY CLR ALL INTERRUPTS LDA BN20 IF ASCII DO NOT CLR SPEC. CHAR. INTERRUPT SZB LDA BN30 DO NOT CLR. SPEC. CHAR. INT. JSB OUT2 JMP STC04 * * C05R5 LDB B3612 REMOVE "RS" INT. ("CR" ONLY FOR LINE) JSB CDSET FOR ASCII CTU, LINE STRAP AND BLOCK * C05R6 JSB CLRNT CLA JSB ECHO TURN OFF ECHO JSB DC1OT TRIGGER TRANSFER C05R7 JSB EXIT1 AND WAIT FOR INTERRUPT * * ********************************************** * PROCESSES DATA ON KEYBOARD AND CTU * * READ REQUESTS. "TEM9" COUNTS THE NUMBER * * OF CHARACTERS WE HAVE PROCESSED AND IS USED* * TO LIMIT THE TIME WE ARE IN THE DRIVER. * * FOR ASCII READS THE EOR IS DETECTED BY * * LOOKING FOR THE SPECIAL CHAR. BIT SET ON * * THE 12966 CARD. * FOR BINARY EOR IS DETECTED BY THE CHAR. * * COUNT READ FROM THE TAPE. * ********************************************** * * CHPRC LDA BN2 SET CHARACTER PROCESS. COUNT TO -33 STA TEM9 CHPCC JSB CHRIN GET CHARACTER ** LDB TEM14 GET COMPLETE DATA WORD CPB B400 IF BUFFER EMPTY WAIT FOR MORE DATA JMP C05R8 SSB,RSS IF NON VALID WAIT FOR MORE JMP C05R8 ** CHPR8 LDB FILL SZB,RSS IS THIS BINARY? JMP CHPR9 YES,THIS IS BINARY * ********THIS IS ASCII******* * * * LDA TEM14 GET DATA WORD AND BN10 ISOLATE SPEC. CHAR. BIT SZA,RSS IS IT SPECIAL? JMP CHPR2 NO * IFZ SWH1C NOP SWITCH NOP\RSS =CTU\CRT JMP EOOP5 THIS IS CTU ASCII TRANSFER XIF LDA EQT16,I GET TERMINAL STATUS AND BN13 ISOLATE PAGE(15) AND BLK(14) CPA BN13 ARE THEY BOTH SET? JMP EOOP2 YES,TERMINATE REQUEST LDA TEMP8 GET CHARACTER CPA B177 IS IT A RUBOUT? JMP RUB01 YES! GO PROCESS RUBOUT CPA B4 IS IT A CONTROL "D" (SET EOT) JMP CNTLD YES! GO SET EOT CHP9 JSB CDINT !!!!!!!!!!! JSB EORP FOR CHAR. OR LINE STRAP BLK REQUES !!!!!!! JMP EOOP1 FIRST SEND * * CHPR2 LDA EQT16,I * ** DVA IFZ SWH1D NOP CRT\CTU=RSS\NOP JMP CHPR9 THIS IS CTU XIF AND BN10 CHECK FOR BLOCK\CHAR. XFER SZA JMP CHPRA THIS IS BLOCK ** * THIS IS CHAR. XFER LDA TEMP2 IS THIS HONEST MODE? SZA JMP CHPR9 THIS IS HONEST MODE LDA TEMP8 GET CHARACTER JMP LINFD CHAR. TRANSFER AND NOT HONEST ******************************************** * IS CALLED IF RUBOUT INTERRUPT IS * * DETECTED. IT DELETES THE CURRENT RECORD * * =AND OUTPUTS (/,CR,LF). * ******************************************** * * RUB01 JSB CDINT !!!!!!!!!!!!!!! LDA B134 JSB OUT1 SEND A "\" JSB EORP GO OUTPUT JSB EXIT1 EXIT WAITING FOR BUFFER EMPTY INTERRUPT JMP I.051 RE START INPUT * LINFD CPA LF IS THIS A LINEFEED? JMP CHPRC YES,GO GET NEXT CHARACTER CPA CR IS THIS A CR ? JMP CHP9 YES! IT IS A CR,EXIT CPA B4 IS FIRST CHAR. A CONTROL "D" ? JMP CNTLD YES! * CPA B10 IS THIS A BACKSPACE RSS RSS JMP CHPR9 NO! CONTINUE LDA EQT7,I GET STARTING ADDRESS OF BUFFER RAL MULTIPLY BY 2 CPA EQT9,I ARE WE AT STARTING ADDRESS? JMP RUB01 YES! PROCESS AS RUBOUT CCB ADB EQT9,I DECREMENT CURRENT ADDRESS STB EQT9,I CLE,ERB DIVIDE BY TWO TO GET TRUE ADDRESS LDA B,I GET ADDRESS IS A REG. AND BN31 MASK HIGH END ADA FILL ADD ASCII FILL CHARACTER STA B,I RESTORE JMP CHPR6 GO GET NEXT CHARACTER * * TEMP2 NOP HONEST MODE =2000 TEMP8 NOP ASCII DATA WORD TEMP9 NOP CARD STATUS FILL NOP BINARY\ASCII = 0\40 TEM9 NOP CHAR COUNT TEM14 NOP COMPLETE DATA WORD B134 OCT 134 BN30 OCT 50037 B40 OCT 40 B60 OCT 60 OENCE OCT 10000 BN2 OCT 177737 * CNTLD LDA B40 SET BIT 5 (EOT) IOR EQT28,I IN TERMINAL STATUS STA TEM8 CLA STA EQT19,I SET AREG. EXIT JMP EOOP4 GO SET B REG. TO 0 AND EXIT * * *** *** CHPRA LDA TEMP8 ** CPA B37 REMOVE "US" RSS CPA RS REMOVE "RS" JMP CHPR6 CHPR9 LDB EQT9,I GET CURRENT CHAR. ADD. CPB EQT10,I IS BUFFER FULL? JMP CHPR6 YES BUFFER FULL LDA TEMP8 GET CHARACTER LDB EQT9,I GET CHARACTER ADDRESS ISZ EQT9,I INCREMENT CLE,ERB CONVERT TO WORD ADDRESS. SEZ,RSS IF E=0 THEN EVEN AND ALF,SLA,ALF HENCE SHIFT CHAR. TO UPPER 8.SKIP XOR B,I IF ODD ADDRESS XOR WITH CHAR. XOR FILL XOR FILL TO ADD FILL IF EVEN STA B,I REPLACE FULL WORD LDB EQT9,I IS THIS THE LAST WORD? CPB EQT10,I RSS YES IT IS JMP *+5 LDA FILL IF BINARY KEYBOARD REQUEST AND BUFFER ADA TEM10 FULL THEN EXIT CPA B60 JMP EOOP2 YES! EXIT ** ** CHPR6 ISZ EQT20,I INCREMENT RECORD LENGTH COUNT.FOR RSS CTU BINARY READ ONLY. *** JMP CHPR5 THIS IS ALL FOR BINARY READ *** ISZ TEM9 INCREMENT BUFFER COUNT JMP CHPCC IF NOT ZERO GET ANOTHER CHAR. LDB CHPC2 SETUP INTERRUPT RETURN STB EQT11,I STF01 STF CARD SET FLAG FOR IMMEDIATE INTERRUPT JMP EXIT4 THIS IS ALL WE CAN PROCESS,EXIT * CHPC2 DEF CHPRC * CHPR5 LDA OENCE KILL CE INTERRUPT IFZ JSB OUT2 JMP EOOP5 *************************************************** * DOES CTU AND PRINTER REQUEST PROCESSING * *************************************************** * * * * DVA * I.251 LDA TEMP4 RAR SSA,SLA JMP I.25C THIS IS CTU OR LP A CONTROL REQUEST SSA JMP I.25R THIS IS CTU A READ REQUEST * *********CTU OR PRINTER WRITE REQUEST********** * CLB,INB JSB I05W1 GO SET EQT9 AND EQT10 LDB FILL SZA IS CHARACTER COUNT ZERO? JMP I25W6 NO! IT IS NOT ZERO SZB,RSS IS IT BINARY JMP REJ1 EXIT WITH A=1 I25W6 SZB IF BINARY MAX LENGTH IS D 256 JMP *+3 FOR ASCII MAX LENTH IS D 254 (NEDED CR,LF) ADA B400 RSS ADA D254 THIS IS ASCII SSA LESS THAN 254 CHARACTERS JMP REJ1 IT IS NOT,THEREFOR4E EXIT * * JSB CTPRP GO PREP. TERMINAL FOR TRANSFER LDA B144 JSB OUT1 OUTPUT LDA FILL GET FILL CHARACTER SZA IS IT BINARY? JMP I25W2 NO! THIS IS ASCII * ***********CTU BINARY WRITE******** * LDA EQT8,I GET BUFFER LENGTH SSA,RSS IF WORDS MULTIPLY X2 RAL SSA IF CHARACTERS (-) MAKE POS. CMA,INA JSB BINAS GO CONVERT TO ASCII AND SEND * * I25W2 LDA B127 OUTPUT TO INITIALIZE CTU TRANSFER JSB OUT1 * JSB EXIT1 GO EXIT AND WAIT FOR INTERRUPT * LDA FILL IS THIS BINARY SZA,RSS JSB ENAK THIS IS BINARY,GO HANDSHAKE JSB CDINT LDB EQT8,I GET WORD COUNT SZB IS IT ZERO?(ASCII ONLY,BINARY CHECKED * JSB TRAN1 ALREADY).IT IS NOT ZERO LDA FILL GET FILL CHAR. SZA IS IT BINARY JSB EORP NO! THIS IS ASCII,WRITE A "CR,LF" I25W5 JSB EXIT1 &&&&FOR INTERRUPT JSB CDINT JSB SPCH1 JSB DC1OT GO TRIGGER STATUS REPORT JSB EXIT1 WAIT FOR INTERRUT * * JSB CHRIN GET STATUS CHARACTER * STA TEM7 JSB CLRCD GET THE "CR" LDA TEM7 CPA B106 FAILURE? JMP I25W7 YES CLA RSS I25W7 LDA B10 SET BIT 3 IN EQT5 FOR PRINT FAIL LDB TEM10 IS THIS A PRINTER? CPB B64 JMP EOOP6 THIS IS A PRINTER JMP EOOP7 THIS IS A CTU * * D254 DEC 254 B144 OCT 144 B127 OCT 127 B163 OCT 163 B122 OCT 122 B62 OCT 62 B106 OCT 106 * * ***********THIS IS A CTU READ REQUEST******** * * CONTROL CODE FUNCTION I.25R LDB TEM10 IF READ FROM PRINTER REJECT CPB B64 JMP REJ1 LDB EQT8,I GET BUFFER LENGTH SZB,RSS IS IT ZERO? JMP CN3C YES --GO SKIP ONE RECORD CLB,INB NO!, IT IS NOT ZERxO JSB I05W1 GO SET UP EQT9,EQT10 JSB CTPRP GO PREP. TERM. FOR CTU TRANSFER LDA B163 STA TEMP2 SET HONEST FLAG I25R1 JSB OUT1 OUTPUT LDA FILL IS THIS BINARY? SZA,RSS IS THIS BINARY? JMP I25R2 YES! THIS IS BINARY I25R3 LDA B122 OUTPUT JSB OUT1 JSB EXIT1 * * THIS IS ASCII JSB SPCH1 SET AND INTERRUPTS JMP C05R6 GO TRIGGER TRANSFER FOR ASCII * * ****THIS IS BINARY READ***** * I25R2 LDA B62 OUTPUT <2> I25R6 JSB OUT1 LDA B122 OUTPUT JSB OUT1 JSB EXIT1 #### JSB CDINT #### JSB SPCH1 SET FOR INTERRUPT JSB DC1OT TRIGGER BYTE COUNT JSB EXIT1 EXIT AND WAIT FOR INTERRUPT * LDA B.4 INITIALIZE TO READ 4 BYTES STA TEM9 CLA I25R5 ALF SHIFT UP STA TEMP1 AND STORE JSB CHRIN GET CHARACTER CPA RS IS IT A" RS"? JMP EOOP5 YES,THIS IS ALL AND B17 ISOLATE DATA IOR TEMP1 "OR" WITH LAST BYTE ISZ TEM9 IS THIS ALL?? JMP I25R5 NO! GET NEXT BYTE CMA,INA THIS IS ALL,COMPLEMENT STA EQT20,I STORE BINARY RECORD LENGTH. JSB CLRCD JSB CDINT !!!!!!!!!!!!!! JSB DC1OT TRIGGER TRANSFER ** DVA * I25R7 LDA ENCE ENABLE RING INTERRUPT JSB OUT2 FOR BINARY EOR DETECTION JMP C05R7 * * * ***************************************************** * * * * * PRINTER * * 11 SPACE

    LINES IF OPTIONAL * * PARAM (+) OR PAGE EJECT IF * * OPTIONAL PARAM (-). * PAGE EJECT 9871 ONLY ***************************************************** * <*^^^^^ FIRST LINE OF TAPE 3^^^^^** I.25C LDA EQT28,I GET TERMINAL STATUS ALF,ALF IS BUFFER FLUSH SET? SSA JMP REJ4 YES IT IS,EXIT * LDA EQT6,I GET CONTROL WORD LSR 6 SHIFT RIGHT 6 PLACES AND B37 ISOLATE BITS <0-4> STA EQT10,I STORE FOR LATER USE LDB TEM10 GET DEVICE TYPE CPB B64 IS IT A LP? JMP CN28C YES! IT IS A LP CPA B1 IS IT EOF? JMP CN1C YES! CPA B2 IS IT BACKSPACE RECORD? JMP CN50C YES! CPA B3 FORWARD SPACE? JMP CN3C YES! CPA B4 REWIND? JMP CN4C YES! CPA B6 DYNAMIC STATUS JMP CN6C YES CPA B5 REWIND? JMP CN4C YES! CPA B10 GENERATE LEADER(EOF) JMP CN10C CPA B13 FORWARD SPACE 1 FILE? JMP CN13C YES! CPA B14 BACKSPACE FILE? JMP CN50C YES! CPA B26 WRITE EOV? JMP CN26C YES! CPA B27 LOCATE FILE

    OR SPACE

    LINES IF OPTIONAL * * PARAM (+) OR PAGE EJECT IF * * OPTIONAL PARAM (-). * PAGE EJECT 9871 ONLY ***************************************************** * I.25C LDA EQT28,I GET TERMINAL STATUS ALF,ALF IS BUFFER FLUSH SET? SSA JMP REJ4 YES IT IS,EXIT * CB*^^^^FIRST LINE OF TAPE 3^^^** LDA EQT6,I GET CONTROL WORD LSR 6 SHIFT RIGHT 6 PLACES AND B37 ISOLATE BITS <0-4> STA EQT10,I STORE FOR LATER USE LDB TEM10 GET DEVICE TYPE CPB B64 IS IT A LP? JMP CN28C YES! IT IS A LP CPA B1 IS IT EOF? JMP CN1C YES! CPA B2 IS IT BACKSPACE RECORD? JMP CN50C YES! CPA B3 FORWARD SPACE? JMP CN3C YES! CPA B4 REWIND? JMP CN4C YES! CPA B6 DYNAMIC STATUS JMP CN6C YES CPA B5 REWIND? JMP CN4C YES! CPA B10 GENERATE LEADER(EOF) JMP CN10C CPA B13 FORWARD SPACE 1 FILE? JMP CN13C YES! CPA B14 BACKSPACE FILE? JMP CN50C YES! CPA B26 WRITE EOV? JMP CN26C YES! CPA B27 LOCATE FILE

    OR SPACE

    LINES JMP CN27C YES * **************ILLEGAL CONTROL REQUEST************* * * JMP REJ2 * B1 OCT 1 B13 OCT 13 B14 OCT 14 B26 OCT 26 B27 OCT 27 B65 OCT 65 B55 OCT 55 B160 OCT 160 B66 OCT 66 B103 OCT 103 ENCE OCT 10004 B300 OCT 300 * ******BACKSPACE 1 OR 2 RECORDS****** * BSR1 NOP BACKSPACE 1 LDB B61 GET ASCII <1> LDA BSR1 JMP OVER1 BSR2 NOP BACKSPACE 2 LDA BSR2 LDB B62 GET ASCII <2> OVER1 STA EQT8,I STORE RETURN ADD. STB EQT9,I SAVE 1 OR 2 LDA B55 SEND ASCII (-) JSB OUT4 LDA EQT9,I RETREIVE BS NUMBER JSB OUT1 LDA B160 SEND JSB OUT1 LDA B70 SEND JMP OUT5 * *********WRITE EOF************* * CN1C LDA B65 WRITE END OF FILE JSB OUT4 OUTPUT JMP OUT3 * ***********FORWARD SPACE RECORD************** * FSR1 NOP LDA FSR1 SAVE RETURN ADD. RSS CN3C CLA STA EQT8,I LDA B3 SET CONTROL REQUEST STA TEMP4 BECAUSE MAY GET HERE FROM READ 0 ADA B300 SET FOR FORWARD RECORD IOR EQT6,I ALSO SET IN CONWD BECAUSE WILL EXIT STA EQT6,I LDA B160 JSB OUT4 CN3C1 LDA B61 OUTPUT JMP OUT5 **********REWIND*************** CN4C JSB CTPRP JMP OUT3 REWIND * **********DYNAMIC STATUS***************** CN6C JSB CTUST GET CTU STATUS STA B LDA TEM11 GET DEVICE TYPE (OCTAL) RAL AND EQT16,I TEST EOF FLAG FOR DEVICE SZA ADB B200 EOF FLAG IS SET. SET IN EQT5 STB TEM8 CLA SET FOR GOOD RETURN STA EQT19,I JMP EOOP3 * * *********LEADER AND TOP OF FORM********** * FOR THIS REQUEST DRIVER WRITES A EOF * * IF IT DID NOT JUST DO SO,OR TAPE IS * * NOT AT LOAD POINT * ***************************************** * CN10C JSB CTUST GET STATUS AND B300 SZA,RSS DID WE JUST WRITE A EOF OR AT LP? JMP CN1C NO! GO WRITE IT JMP EOOP4 YES,DO NOT WRITE TWO IN A ROW * **********FORWARD SPACE 1 FILE ************ * CN13C LDA B62 OUTPUT JSB OUT4 JMP OUT3 * ************BACKSPACE 1 FILE ************* * BSF1 NOP LDA BSF1 STA EQT8,I LDA B55 OUTPUT JSB OUT4 LDA B61 OUTPUT JSB OUT1 LDA B160 OUTPUT JSB OUT1 LDA B62 OUTPUT JMP OUT5 * ********WRITE END OF VALID DATA (EOV) * CN26C LDA B66 OUTPUT JSB OUT4 JMP OUT3 * *******LOCATE ABSOLUTE FILE (CTU)********* *****************OR*********************** *******SPACE LINES (PRINTER)************** * CN28C LDA EQT10,I GET CONTROL REQUEST CPA B11 IS IT T.0.F. OR SPACE LINES? RSS JMP REJ2 ONLY LEGAL CONTROL TO PRINTER IS 11B CN27C JSB CTPRP PREP. TERM. FOR CTU REQUEST LDA EQT7,I GET FILE NO. SZA,RSS IF ZERO CHANGE TO 1 INA JSB BINAS CONVERT TO ASCII AND SEND LDA B160 OUTPUT JSB OUT1 LDB TEM10 GET DEVICE TYPE CPB B64 IS IT LP? RSS YES A LP JMP CN27D LDB EQT7,I GET OPTIONAL PARAM. IF (-) THEN T.O.F. SSB,RSS IF (+) THEN SPACE (EQT7) LINES. JMP CN3C1 GO OUTPUT CN27D LDA B62 OUTPUT * OUT5 JSB OUT1 OUT3 LDA B103 OUTPUT JSB OUT1 JSB NXQU JMP I25W5 GO WAIT FOR REQUEST COMPLETION OUT4 NOP LDB OUT4 SAVE RETURN ADDRESS STB EQT19,I JSB CTPRP JSB OUT1 LDA EQT19,I JMP A,I * *********BACKSPACE FILE AND RECORD******** * * BACKSPACE FILE AND RECORD REQUIRES SPECIAL PROCESSING * * TO POSITION AND SET STATUS AS A MAG. TAPE UNIT. THIS * * SPECIAL PROCESSING ENABLES THE USE OF EXISTING MTU * * SUBROUTINES. IF THE TAPE IS POSITIONED AFTER AN EOF THEN* * IT WILL MOVE BEFORE THE EOF AND A FLAG SET IN EQT16 * * (BIT3/BIT2 =RIGHT CTU/LEFT CTU) WHICH IS EXAMINED BY * * A DYNAMIC STATUS REQUEST. THESE SPECIAL EOF FLAGS ARE * * NECESSARY BECAUSE THE 264X DOES NOT RETURN EOF STATUS * * BEFORE THE EOF MARK. * * *********************************************************** * * * CN50C LDA EQT16,I SET CN50C ENTRY FLAG IOR B10 BIT3 STA EQT16,I LDB RSS SET CN50C FLAG STB EOOP7 JSB BSR1 ISSUE BACKSPACE 1 RECORD JSB CTUST GET STATUS STA TEM8 AND B103 CHECK FOR L.P. SZA JMP EOOPB WE ARE THERE LDA TEM8 NOT AT L.P. AND B200 IF WE ARE AFTER EOF THE BIT 7 SET SZA,RSS JMP CN54C TAPE NOT AFTER EOF CN55C JSB BSR2 ISSUE BACKSPACE 2 RECORDS JSB CTUST IF AT EOF AGAIN WE ARE AFTER ANOTHER EOF STA TEM8 AND B103 CHECK FOR L.P. SZA JMP EOOPB LDA TEM8 AND B200 AND HENCE NO FORWARD SPACE SZA DO NOT SET EQT16 EOF FLAG IF JMP EOOPB BETWEEN EOF'S JSB FSR1 FORWARD ONE TO GET US BEFORE EOF * * LDA TEM11 GET DEVICE TYPE RAL FOR SETTING EOF FLAG IN EQT16 IOR EQT16,I BIT1/BIT2=EOF LCTU/EOF RCTU AND BN55 REMOVE CN50C FLAG STA EQT16,I RESTORE IT JSB CTUST GET STATUS IOR B200 ADD EOF BIT STA TEM8 JMP EOOPA * * CN54C LDA EQT10,I TAPE NOT AFTER EOF CPA B2 IS THIS A BS RECORD? JMP EOOPB YES JSB FSR1 GET TAPE TO ORIGINAL POSITION JSB CDINT RESET JSB BSF1 BS FILE TO GET US AFTER EOF JSB CDINT RESET JMP CN55C NOW POSITION BEFORE EOF * *** GRAPH NOP LDA ESC FOR 26XX GRAPHICS SEND ESC,*,(SMALL) L JSB OUT1 LDA B52 JSB OUT2 SEND * JSB OUT1 LDA B154 SEND SMALL "L" JSB OUT1 JMP GRAPH,I *** ** DVA P.ERR NOP LDA EQT28,I SEE IF WE HAVE BEEN AND B10 HERE BEFORE SZA JMP P.ERR,I WE HAVE! LDA B10 SET PARITY ERR IN STATUS IOR EQT28,I STA EQT28,I JMP P.ERR,I * * LINCK NOP CHECK MODEM STATUS LINE SWH2A NOP HARD\MODEM =NOP\RSS JMP LINCK,I HARDWIRE IMMED. COMPLET. LDB EQT1 CHECK FOR SYSTEM CONSOLE CPB SYSTY IF IS CANNOT DOWN JMP LINK2 LINK1 JSB CHRIN GET LINE STATUS LDA TEMP9 AND B32 CHECK FOR CLEAR TO SEND ("CB"),DATA CARRIER DETECT("DF") CPA B32 AND DATA SET READY("CC") JMP LINCK,I EVERYTHING O.K. IOR BN69 SET INTERRUPT REF. JSB OUT2 LDA BNd871 ENDABLE STATUS CHANGE INTERRUPT STA EQT20,I SET $UPIO FLAG JSB OUT2 LDA B20 SET DATA SET NOT READY IOR EQT28,I STA EQT28,I LDA TEMP5 CHECK FOR INIT. OR CONT. ENTRY SZA JMP NR CONT. ENTRY REJ3 LDA B3 SET NOT READY TO RTE * JMP IA05,I NR CLA,INA JMP CA05,I SET FOR NOT READY * LINK2 LDA TEM10 CHECK FOR CRT CPA B60 JMP LINCK,I IT IS A SYSTEM CONSOLE CRT JMP LINK1 IT IS NOT THE CRT ** RECIV NOP LDB B5 SET CARD UP FOR RECEIVE,CHAR. JSB CDSET CLA JSB ECHO TURN OFF ECHO STC05 STC CARD ENABLE INTERRUPT JMP RECIV,I **************************************************** * SUBROUTINE READS 1 CHARACTER FROM IO CARD* * AND PLACES IT IN A REG. * * BOARD STATUS IS ALSO READ * * TEMP8=DATA * * TEMP9=BOARD STATUS * * **************************************************** * CHRIN NOP STC02 STC CARD PUT CARD IN DATA MODE LIA03 LIA CARD GET DATA WORD STA TEM14 STORE COMPLETE DATA WORD AT TEM14 AND B377 ISOLATE DATA CHAR.(0-7) STA TEMP8 STORE IT CLC02 CLC CARD PUT CARD IN STATUS MODE LIA02 LIA CARD GET STATUS WORD STA TEMP9 STORE IT LDA TEMP8 RESTORE DATA WORD STC03 STC CARD THIS IS NECESSARY JMP CHRIN,I INTERRUPT * * * *********************************************** * SUBROUTINE TRIGGERS BLOCK TRANSFERS * * FROM THE CPU. THIS IS DONE BY SENDING A * * DC1 TO TRIGGER THE TRANSFER AND * * THEN SETTING UP CARD TO RECEIVE DATA. * * SEE WARNING AT ENAK *********************************************** * DC1OT NOP LDA B21 JSB OUT1 LDA D.60 WAIT FOR DC1 TO RIPPLE THRU FIFO JSB TIMER 150 USECS ON XE(d6SPEC 64 MAX) LDB B4 JSB CDSET SET RECEIVE MODE JMP DC1OT,I RETURN * B5 OCT 5 B154 OCT 154 BN55 OCT 177767 BN20 OCT 50077 B10 OCT 10 BN17 OCT 40040 B400 OCT 400 BN19 OCT 30003 BN21 OCT 50000 BN69 OCT 20000 DVA05 BN71 OCT 10032 D.60 DEC -60 * * * ****************************************************** * SUBROUTINE SETS UP THE IO CARD PER B REG. * * 1/0 IS CHARACTER/BLOCK * * 1/0 IS TRANSMIT/RECEIVE * * 1/0 IS CLEAR/NOT CLEAR INTERUPT FLAGS * * 1/0 SPECIAL CHARACTER IS/IS NOT TO BE * * ADDED OR DELETED.SPECIAL CHARACTER IS IN POSITION * * . 1/0 IS ADD/DELETE * * SPECIAL CHARACTER. * ****************************************************** * CDSET NOP LDA BN4 SET WORD1 IN A REG. SLB,BRS IOR B40 "OR" CHARACTER MODE BIT JSB OUT2 LDA BN17 SET WORD4 IN A REG(SET SBA) SLB,BRS IOR B400 "OR" TRANSMIT BIT JSB OUT2 LDA BN21 SET WORD5 IN A REG. SLB,BRS IOR B177 "OR" CLEAR INTERRUPTS JSB OUT2 LDA BN5 SET WORD6 IN A REG. SLB,RSS JMP OUT BRS,BRS BRS IOR B "OR" SPECIAL CHARACTER JSB OUT2 OUT JMP CDSET,I * * * ECHO NOP SET ECHO ON CARD PER A REG. IOR BN19 A =20/0 IS ECHO ON\OFF JSB OUT2 JMP ECHO,I * *************************************************** * SUBROUTINE INITIALIZES 12966 * * IO CARD. * * BELOW ARE THE INITIAL CONDITIONS FOR CONTROL: * * WORD 0 DO NOT SEND * * WORD 1 DO NOT SEND * * WORD 2 CE=1 STATUS REF. IS 0 * * WORD 3 CHARACTER FRAME CONTROL * * CHAR. SIZE=8 BITS  * * NO PARITY * * ECHO ON (CRT REQUEST ONLY) * * ONE STOP BIT * * * WORD 4 INTERFACE CONTROL * * EXT. CLOCK * * DMA CONTROL OFF * * SBA/SCA ON * * CD (DATA TERM. READY) OFF * *N CA (REQUEST TO SEND) OFF * * TRANSMIT MODE ON * * MASTER RESET * MASTER RESET * * WORD 5 CLEAR CARD INTERRUPTS * * * WORD 6 SPECIAL CHARACTER * * * * ALL USED SPECIAL CHARACTERS (EXCEPT * * RUBOUT) ARE CLEARD * * * *************************************************** * * CDINT NOP * LDA BN19 SET A REG. = 30003 LDB TEM10 GET DEVICE TYPE ADB TEMP4 ADD REQEST TYPE CPB B61 IS IT A CRT READ IOR B20 YES! TURN ON ECHO JSB OUT2 IT IS OFF FOR CTU AND LP * LDA BN17 ** DVA IOR BN72 OR MASTER RESET AND XMIT JSB OUT2 SEND WORD 140XXX * LDA BN20 SEND WORD 50077 JSB OUT2 * LDA BN22 JSB OUT2 SEND 20004 * LDA BN25 SET A REG. = 60004 JSB OUT2 CPA BN26 CLEAR ALL USED SPECIAL INTERRUPTS JMP CDINT,I (4 THRU 36) INA JMP *-4 * * BN22 OCT 20004 B61 OCT 61 BN72 OCT 100400 DVA BN25 OCT 60004 BN26 OCT 60036 BN27 OCT 177577 ESC OCT 33 B136 OCT 136 B.4 OCT 177774 * * FOR ALL WRITE REQUESTS AND CTU CONTROL * THE BUFFER FLUSH BIT IS EXAMINED.IF SET ************************************************** * IS CALLED BY ALL WRITE AND 1CONTROL * * REQUESTS IF THE BUFFER FLUSH BIT IS SET. * ************************************************** * *** NXQU NOP IF LAST REQUEST IN QUE THEN STOP FLUSH LDA $OPSY GET SYSTEM TYPE CPA BN55 CHECK FOR -9 RSS CPA D.13 CHECK FOR -13 JMP GTDMS THIS IS A DMS SYSTEM * OLDSY LDA EQT1,I CHECK FOR LAST REQUEST LDA A,I CHECK SZA IF NOT LAST REQUEST DO NOT CLR BIT7. JMP NXQU,I THIS IS NOT THE LAST REQUEST. LDA EQT28,I LAST REQUEST AND BN27 REMOVE B177 STA EQT28,I RESTORE EQT5 JMP NXQU,I AND RETURN * GTDMS RSA CHECK MAP. IF SYSTEM NO CROSS LOAD ALF,SLA BIT12= 0\1 =SYSTEM\USER RSS JMP OLDSY SYSTEM MAP XLA EQT1,I USER MAP CROSS LOAD XLA A,I JMP CHECK *** * ********************************************* * SUBROUTINE READS TERMINAL STATUS * * AND SETS EQT16 FOR : * * LINE STRAP\PAGE STRAP 0\1 (BIT15) * * TERM. STATUS READ 0\1 NO\YES (BIT 0) * ********************************************* * TERST NOP LDA TERST DVAO5 STA EQT27,I LDA EQT16,I GET TERMINAL STATUS TO SEE IF IT SLA HAS ALREADY BEEN READ JMP TERST,I IT HAS. RETURN. CLA JSB ECHO TURN ECHO OFF JSB SPCH1 SET SPECIAL INTERRUPTS LDA ESC OUTPUT ESCAPE JSB OUT1 LDA B136 OUTPUT CARROT. THESE TWO CHARACTERS JSB OUT1 PREP. TERM. FOR STATUS JSB EXIT1 EXIT AND WAIT FOR BUFFER EMPTY INTERRUPT * JSB DC1OT GO TRIGGER STATUS TRANSMISSION WITH DC1 JSB EXIT1 AND WAIT FOR CR OR RS INTERRUPT * LDA B20 JSB ECHO TURN ECHO ON LDA B.4 SET TO GET BYTE 1 STA TEMP1 JSB CHRIN GO GET CHAR..IT IS NECESARY TO READ AND B10 ISZ TEMP1 ESC AND \ BEFO2RE JMP *-3 READING DESIRED STATUS BYTE. RAR,RAR RAR,RAR MOVE TO SIGN POS. (LINE\PAGE =0\1) INA SET LSB FOR COMPLETED IOR EQT16,I STA EQT16,I JSB CLRCD GO CLEAR CARD LDA EQT27,I JMP A,I * ************************************************* * SUBROUTINE OUTPUTS AN ENK TO TERMINAL * * AND WAITS FOR AN ACK. * * BE CAREFUL IN CALLING ENAK BECAUSE YOU MUST * * DO A MASTER RESET TO GET CHAR. COUNT =0 * * OTHERWISE YOU WILL NEVER SEE A BUFFER * * EMPTY INTERRUPT AGAIN!!! * ************************************************* * ENAK NOP CLA INHIBIT ECHO JSB ECHO LDA ENAK STA EQT23,I SAVE RETURN ADDRESS JSB LINCK CHECK MODEM STATUS LINES JSB XMIT LDA B5 OUTPUT ENK TO TERMINAL OTA20 OTA CARD LDA D.60 !!!!!!!!!!!!!!!!!!! JSB TIMER !!!!!!!!!!!!!!!!!! LDB B5 CLEAR INTERRUPTS AND SET CARD TO RECEIVE JSB CDSET JSB EXIT1 EXIT TO WAIT FOR INTERRUPTS JSB CHRIN GET CHARACTER TO EMPTY CARD * LDA EQT23,I GET RETURN ADDRESS JMP A,I RETURN * TIMER NOP 2.5 USEC TIMER(XE) PER LOOP SSA,INA,RSS !!!!!!!!!!!!!!! JMP TIMER,I !!!!!!!!!!!!! JMP *-2 !!!!!!!!!!!!!!!!! * * ************************************************ * SUBROUTINE READS THE CTU STATUS * * * *SET BIT0--UNIT BUSY OR CARTRIDGE NOT INSERTED* * BIT1--END OF VALID DATA * * BIT2--CARTRIDGE NOT WRITE ENABLED * *-------------- * BIT3--LAST COMMAND ABORTED * * BIT4--READ\WRITE ERROR * * BIT5--END OF TAPE * * ----------- * BIT6--LOAD POINT * * BIT7--END OF FILE |B * * * * THE CTU STATUS COMES IN THREE BYTES * * * BYTE * 1 EOF - LP - EOT - WR. ERR(2645) * 2 CMD.AB.- W.P. - RD.ERR. -BUSY(2645) * 3 RD.ERR. - RD.ERR.(HARD) - EOD -C.I. ************************************************ * CTUST NOP JSB CDINT !!!!!!!!!!!!!!! LDA CTUST STA EQT24,I * JSB CTPRP GO PREP. TERMINAL FOR CTU TRANSFER LDA B136 OUTPUT <^> JSB OUT1 JSB EXIT1 !!!!!!!!!!!!!!!!! JSB SPCH1 SET CR AND RS AS SPECIAL CHAR. JSB DC1OT TRIGGER TRANSFER WITH DC1 JSB EXIT1 EXIT WAITING FOR CR OR RS INTERRUPT * JSB CHRIN GET DATA CTUS3 LDB B.5 INITIALIZE STATUS COUNT STB TEMP1 RSS * * CTUS1 JSB CHRIN GET CHARACTER ISZ TEMP1 ARE THESE STATUS BYTES? JMP CTUS1 NO! GO GET NEXT CHAR. AND B17 ALF STA TEMP1 JSB CHRIN GET STATUS BYTE NO. 2 AND CR ISOLATE BITS 0,2,3 IOR TEMP1 "OR" BYTE 1 WITH BYTE 2 STA TEMP1 STORE IT TEMPORARILY JSB CHRIN GET BYTE 3 AND B4 CHECK FOR READ ERROR RAL,RAL MOVE TO BIT 4 IOR TEMP1 STA B LDA TEMP8 GET BYTE 3 AND B3 ISOLATE FIRST TWO BITS (WEN AND EOV) XOR B1 COMPL. C.I. IOR B OR WITH BYTES 1 AND2 XOR B10 COMPLEMENT BIT 3 AND B377 ISOLATE STATUS BITS STA TEMP1 JSB CDINT LDA TEMP1 * JSB CLRCD GO CLEAR CARD LDB EQT24,I SAVE RETURN ADDRESS JMP B,I * CTPRP NOP THIS SUBROUTINE PREPARES TERMINAL TO ACCEPT LDB CTPRP SAVE RETURN ADDRESS STB EQT25,I STA EQT22,I CTU CONTROL AND R\W REQUESTS LDA EQT16,I CHECK FOR KEYBOARD DISABLE BIT AND B20 (BIT4) SZA IF SET ALREADY DIS\)B@ LDA B46 JSB OUT1 OUTPUT <&> LDA B160 JSB OUT1 OUTPUT LDA TEM10 GET DEVICE JSB OUT1 LDA B165 LDB TEMP4 GET REQUEST TYPE CPB B3 IS IT CONTROL? JSB OUT1 YES, SEND LDA EQT22,I RESTORE A REG LDB EQT25,I GET RETURN ADDRESS JMP B,I * * * * * ************************************************ *SUBROUTIONE TAKES A NO. IN A REG. * * (<1000D) AND CONVERTS TO ASCII WITH MSB * * AT BUFF1 AND LSB AT BUFF3. * *THE CHARACTERS ARE SENT MSB FIRST * ************************************************ * BINAS NOP LDB BINAS SAVE RETURN ADDRESS STB EQT22,I SSA IS NUMBER OK? (POSITIVE) JMP BINAS,I NO! LDB BN50 LOAD B WITH DEC -1000 ADB A ADD NUMBER TO -1000 SSB,RSS IS SIGN ZERO? JMP BINAS,I YES! EXIT FOR NUMBER >999 LDB ADDRT GET BUFFER ENDING ADDRESS ADB B2 ADD 2 STB TEMP1 STORE IT AT TEMP1 BINA1 CLB DIV LF DIVIDE NO. IN A REG. BY 10 ADB B60 CONVERT TO ASCII %BB*^^^^^FIRST LINE OF TAPE 4 ^^^^** STB TEMP1,I STORE IT. LDB TEMP1 GET NEXT ADDRESS ADB B.1 DECREMENT IT STB TEMP1 RESTORE IT SZA IS THE A REG.(QUOTIENT) =0 ? JMP BINA1 NO! GO DIVIDE A REG. AGAIN LDA ADDRT YES! IT IS ZERO ADA B.1 CPA TEMP1 ARE WE FINISHED? JMP BINA2 YES!NOW GO OUPUT CHAR. CLA NO,GO FILL REMAINING PLACES WITH JMP BINA1 ASCII <0> BINA2 LDB ADDRT GET MSD IN B REG. STB EQT19,I STORE IT FOR LATER USE LDA B.3 SETUP COUNTER STA EQT20,I I25W8 LDA B,I GET ASCII CHAR. IN A REG. JSB OUT1 GO SEND IT! ISZ EQT19,I INCREMENT ADDRESS POINTER LDB EQT19,I RESTORE IN B REG. FOR ISZ EQT20,I ISZ COUNT COUNTER JMP I25W8 THERE ARE MORE,GO GET 'EM LDA EQT22,I GET RETURN ADDRESS JMP A,I * ADDRT DEF BUFF1 BUFF1 BSS 3 B.5 OCT 177773 B46 OCT 46 B165 OCT 165 B143 OCT 143 * * BN11 OCT 43612 BN12 OCT 41512 * TEMP4 NOP REQUEST TYPE (1-3) TEMP5 NOP INIT\COMP. = 0\1 TEM8 NOP TEMP STATUS TEM10 NOP ASCII TYPE (6X) TEM11 NOP DEVICE TYPE IN BINARY * XMIT NOP SET CARD UP FOR XMIT LDA BN17 IOR B400 SET XMIT JSB OUT2 JMP XMIT,I * OUT1 NOP STA B JSB XMIT LDA B OTA02 OTA CARD SEND CHAR. JMP OUT1,I * OUT2 NOP GENERAL PURPOSE CARD PROGRAMMING OTA10 OTA CARD ROUTINE JMP OUT2,I * SPCH1 NOP THIS SUBROUTINE SETS SPECIAL CHAR. INTERRUPTS LDB BN12 JSB CDSET SET INTERRUPT LDB BN11 JSB CDSET SET INTERRUPTS JMP SPCH1,I RETURN * * USINT NOP SUBROUTINE TO TEST FOR USER KEYBOARD INTERRUPT LDA USINT SAVE RETURN ADDRESS STA EQT27,I JSB ENAK GO SHAKE HANDS WITH TERMINALe LDA TEMP8 GET CHAR. CPA B6 IS IT A "ACK" ? RSS YES! NO INTERRUPT JSB SCHED USER INTERRUPT JSB CLRCD GET ALL CHAR. OFF CARD LDA EQT27,I JMP A,I * *********************************************** * SUBROUTINE GETS DATA OF CARD UNTIL * * BUFFER EMPTY. * * *********************************************** * CLRCD NOP STA TEMP1 SAVE A REG. LDB B4 SET CARD TO RECEIVE AND CLR. INT. JSB CDSET CLRC1 JSB CHRIN GET CHARACTER LDA TEMP9 GET STATUS WORD ALF,ALF ISOLATE BUFFER EMPTY SSA IS IT EMPTY? JMP CLRC2 YES WE'RE FINISHED LDA TEM14 IS THIS A VALID CHARACTER? SSA JMP CLRC1 YES IT IS CLRC2 LDA TEMP1 RESTORE A REG. JMP CLRCD,I RETURN * B.1 OCT 177777 BN50 DEC -1000 * *********************************************** * ENABLES IO CARD INTERRUPT IF TERM. * * HAS BEEN ENABLED OR IF TERMINAL IS A * * SYSTEM CONSOLE. * *********************************************** * SETEM NOP SUBROUTINE TO SETUP IO CARD FOR RECEIVE CLC03 CLC CARD INHIBIT INTERRUPT LDA EQT28,I MODE PRIOR TO EXIT. GET TERM.STATUS RAR,SLA IS TERMINAL ENABLED? (BIT 1=1) JSB RECIV YES! IT IS LDA SYSTY GET CONSOLE EQT. CPA EQT1 IS THIS THE SYSTEM CONSOLE? JSB RECIV YES! IT IS JMP SETEM,I * *********************************************** * * * EXIT IS A=2 (ILLEGAL CONTROL REQUEST). * *********************************************** * * REJ2 JSB NXQU CHECK QUE JSB SETEM SETUP CARD FOR EXIT LDA B2 RSS REJ1 CLA,INA RSS REJ4 LDA B4 IMMEDIATE COMPLETION CLB JMP IA05,I * **************************************CM************** * IS USED FOR INITIATOR OPERATION WITH * * INITIATED EXITS (A=0), AND COMPLETION * * CONTINUATION EXITS (P+2). "TEMP5" INDICATES * * WHICH EXIT TO TAKE. * **************************************************** * EXIT1 NOP LDB EXIT1 GET CALLING PROGRAMS ADDRESS+1 STB EQT11,I STORE AT EQT11,I FOR INTERRUPT EXIT5 LDA BN20 CLEAR CARD INTERRUPTS JSB OUT2 STC04 STC CARD RE-INITIALIZE CARD FOR INTERRUPT LDB TEM10 CHECK FOR CRT CPB B60 JMP ON3 IT IS A CRT LDA BN68 NOT A CRT SET 60 SEC T.O. JMP ON2 ON3 LDA TIM1 IF READ USE PRESET T.O. LDB TEMP4 CHECK REQUEST TYPE CPB B2 IF A WRITE SET 4 SEC. T.0. ON2 STA EQT15,I EXIT4 CLA EXIT6 LDB TEMP5 GET INITIATION COMPLETION FLAG SZB,RSS JMP IA05,I INITIATION RETURN ISZ CA05 RETURN JMP CA05,I COMPLETION RETURN * EOOP9 LDB B3 SET B=3 FOR XMISSION ERROR STB EQT19,I A REG. EXIT JMP EOOP4 * ********************************************************* * DOES ASCII CTU AND DISPLAY WRITE EOR PROCESSING* ********************************************************* * * EORP NOP LDA CR OUTPUT A JSB OUT1 LDA LF OUTPUT A JSB OUT1 JMP EORP,I * * ******************************************** * ENABLES KEYBOARD IF IT HAS BEEN * * LOCKED BY A CTU REQUEST * ******************************************** * KEYBD NOP LDA EQT16,I AND B20 IS IT LOCKED (BIT 4) SET SZA,RSS JMP KEYBD,I NO! LDA ESC UNLOCK KEYBOARD JSB OUT1 LDA B142 JSB OUT1 SEND SMALL B JSB EXIT1 WAIT FOR INTERRUPT JSB CDINT LDA EQT16,I AND BN3 REMOVE KEYBD LOCK BIT STA EQT16,I JMP KEYBD,I * EOOP7 NOP K IF CN50C FLAG IS SET(BIT3,EQT16) JMP EOOPC THEN EOOP7 IS LDA EQT8,I IT IS SET JMP A,I * EOOP8 LDB TEMP1 THIS EXIT IS USED IF UNDERSCORE CPB BN2 IS ONLY CHAR. RSS * ********************************************************* * AND ARE ENTRIES FOR COMPLETION (P+1) * * EXITS. THE TERMINAL OR CTU STATUS IS TEMPORARLY PUT * * IN TEMP5. * ********************************************************* * EOOP1 JSB EXIT1 EOOP2 CLA STA EQT19,I SET A REG. EXIT LDA EQT28,I GET TERMINAL STATUS STA TEM8 JMP EOOP3 * EOOPC LDB TEMP4 IF CONTROL ALWAYS GET STATUS CPB B3 RSS SZA IF GOOD WRITE DO NOT GET STATUS EOOP5 JSB CTUST YES!,GO UPDATE CTU STATUS ** EOOP6 STA B LDA EQT28,I CHECK FOR CTU PARITY ERROR AND B10 SZA ADB B20 SET FOP ERROR STB TEM8 ** * EOOPB LDA BN55 REMOVE EOF FLAG IN EQT16 LDB TEM11 BECAUSE TAPE HAS MOVED RBL XOR B LDB EQT16,I AND B STA EQT16,I LDA TEM8 * ****************************************************** * A READ TO END OF TAPE WILL GIVE BELOW STATUS * * STATUS * * 0 GOOD READ * * 40 END OF TAPE. GOOD RECORD READ * * 240 EOT+EOF. NO RECORD READ, * * SET FOR NR(A=1) EXIT * * 42 EOT+EOV * * 52 EOT+EOV+ABORT * * 52 EOT+EOV+ABORT * * * ****************************************************** * * ****************************************************** * A WRITE TO END OF TAPE WILL GIVE BELOW STATUS * * STATUS  * * 42 EOT+EOV GOOD RECORD WRITTEN * * 52 EOT+EOV+ABORT (NO RECORD WRITTEN)* * SET ET(A=1) EXIT * * * ****************************************************** * ****************************************************** * READ TO EOV IN MIDDLE OF TAPE * * STATUS * * 200 EOF * * 2 EOV * * 12 EOV+ABORT * * SET NR(A=1) EXIT * * * * ****************************************************** * EOOPA AND B373 REMOVE WRITE PROTECT CPA B240 IF EOF+EOT THEN SET NR JMP OVER4 CPA B52 IF FAILURE ON WRITE JMP OVER4 DUE TO EOT DO THIS(SAVE REQ.) AND B30 CHECK FOR CMD ABORT OR ERROR SZA JMP OVER4 SET N.R. CLB STB EQT19,I SET A=0 FOR GOOD EXIT JMP EOOP3 OVER4 CLB,INB SET NR STB EQT19,I SET A REG. EXIT *********************************************************** * IS ENTRY FOR B=0 (TRANS. LOG =0) EXIT. * *********************************************************** * EOOP4 CLA STA EQT8,I SET UP FOR B REG. =0 EXIT * ********************************************************** * SETS 2640\2644 AND IO CARD FOR NEXT INTERRUPT * * OR REQUEST, AND SETS EITHER CTU OR CRT STATUS IN EQT5 * * * IT ALSO SETS THE TRANSMISSION LOG IN B REG. (+CHAR. OR * * + WORDS). IF EQT8 =0 (VIA EOOP4) THEN B=0. * ********************************************************** * EOOP3 JSB STPUT SET STATUS IN EQT5,I JSB CDINT !!!!!!!!!! JSB KEYBD ENABLE KEYBD IF LOCKED JSB USINT WITH KEYBOARD ENABLED JSB USINT JSB CLRNT CLR RUBOUT INTERRUPT JSB CLRCD GET ALL DATA OFF CARD JSB SETEM ** DVA CLB SET 0 XLOG LDA EQT28,I IF PARITY ERROR ON BLOCK INPUT AND B10 UPDATE XLOG SZA,RSS LDB EQT9,I GET 2X LAST CHAR. ADDRESS CMB,INB MAKE NEG. ADB EQT7,I SUBTRACT TWO TIMES STARTING ADD. ADB EQT7,I CMB,INB LDA EQT8,I IF WORDS THEN DIV. BY 2 SSA JMP *+4 THESE ARE CHARACTERS SLB IS LSB SET? INB YES! INCREMENT SO EVEN FOR DIVIDE BRS DIVIDE TO CONVERT TO WORDS * SZA,RSS IF EQT8 IS 0 THEN CLEAR B REG. CLB LDA EQT19,I SET A REG. EXIT JMP CA05,I ** * * **************************************************** * INSERTS CORRECT DEVICE STATUS INTO EQT5 * **************************************************** STPUT NOP LDA EQT5,I GET CURRENT STATUS AND BN31 RE MOVE OLD STATUS IOR TEM8 OR NEW STATUS STA EQT5,I RESTORE IT JMP STPUT,I * * * TIM1 OCT 177200 BN62 OCT 40040 KEEP FOR DVA BN63 OCT 30002 """""""" BN57 OCT 14740 BN3 OCT 177757 BN37 OCT 102100 B373 OCT 373 B142 OCT 142 B240 OCT 240 B64 OCT 64 B3 OCT 3 BN31 OCT 177400 B1100 OCT 1100 B4000 OCT 4000 B2000 OCT 2000 B52 OCT 52 D.13 DEC -13 B600 OCT 600 B500 OCT 500 ********************************************************** * CONFIGURES IO INSTRUCTIONS TO SELECT CODE SET * * IN A REG. * ********************************************************** * SETIO NOP LDA TEM12 GET SELECT CODE DVA05 IOR BN37 CONSTRUCT STF STA STF01 STF IS 1021XX * IOR B400 CONSTRUCT LIA AND SAVE STA LIA01 STA LIA02 STA LIA03 * XOR B600 CONSTRUCT SFS STA SFS01 SFS IS 1023XX * * * XOR B500 CONSTRUCT OTA AND SAVE STA OTA10 STA OTA02 STA OTA18 STA OTA20 IOR B1100 STA STC02 STA STC03 STA STC04 STA STC05 * IOR B4000 CONSTRUCT CLC,C AND SAVE STA CLC01 CLC,C IS 1077XX STA CLC02 STA CLC03 * * * * * * * * LDA EQT4,I GET SUBCHANNEL AND STORE IN TEM11 LSR 6 SC=0 IS CRT (TEM10=60) AND B37 SC=1 IS L CTU )(TEM10=61) STA TEM11 SC =2 IS R CTU (TEM10 =62) *** SC =3 IS GRAPHICS (TEM10=60) CPA B3 IF GRAPHICS CRT CLR TEM11 CLA SO TEM10 =B60 ADA B60 STA TEM10 LDA EQT6,I GET CONTROL WORD LDB TEM10 GET DEVICE CPB B64 IS IT LP? CLA YES! SET FOR ASCII RAR BIT6 1\0 IS BIN\ASCII AND B40 ISOLATE BIT 5 XOR B40 REMOVE BIT 5 IF BINARY STA FILL SET FILL CHARACTER LDA EQT6,I GET WORD AGAIN TO SET HONEST WORD AND B2000 HONEST IS BIT 10 =1 STA TEMP2 * * ** LDA TEM10 CLB CPA B60 SET SWITCH CRT/CTU = RSS/NOP LDB RSS STB SWH1A STB SWH1B STB SWH1C STB SWH1D * * **************************************************** * SETUP EXTENSIONS ON EQT * * * * EQT NO. USE * * 1-8 STANDARD * * 9 RUNNING CHAR. ADDRESS * * 10 LAST CHAR. ADDRESS * * 11 ADDRESS TO GO ON INTERRUPT * * 12 NO. OF EQT EXTENSIONS * * AND CURRENT CONWD * 13 EQT EXTENSION STARTING ADD. * * 14-15 STD * * 16 u TERMINAL STRAPPING AND CTU INFO* * BIT 14 IS 0\1 =CHAR.\BLOCK * * BIT 15 IS 0\1 =LINE\PAGE * ** DVA * BIT 5-8 IS BAUD RATE * BIT 9 IS PARITY EVEN\ODD 1\0 * * BIT 10 IS PARITY ON\OFF 1\0 * * BIT 11 IS "CD" (DTR) SET * BIT 12 IS "CA" (RTS) SET * BIT 13 IS LINE 0\1 HARD\MODEM * BIT 4 IS KEYBOARD LOCKED * * BIT 3 IS CNC50 FLAG * BIT 2 IS RCTU EOF FLAG * BIT 1 IS LCTU EOF FLAG * BIT 0 IS TERMINAL STRAPPING * * ALREADY READ. * * 17 ID ADDRESS OF TERM. PROG. * * 18 NOT USED G * * 19 RETURN ADDRESS * * AND A REG. EXIT * 20 BINARY RECORD LENTGH * * AND PARITY ERR XLOG * * AND $UPIO ENTRY * 21 NOT USED * * 22 RETURN ADDRES* * 23 RETURN ADDRESS * * 24 RETURN ADDRESS * * LINE CONTROL REF.(MODEM) * * 25 RETURN ADDRESS * * AND LINE CONTROL FLAG * * 26 NOT USED * * 27 RETURN ADDRESS * * 28 TERMINAL STATUS * * BIT 1 TERMINAL ENABLED * BIT 3 PARITY ERROR * BIT 5 CNTRL D ENTERED * BIT 7 BUFFER FLUSH IN PROGRESS * **************************************************** * * SETIP LDA EQT13,I GET STARTING ADDRESS OF EXT. LDB D.13 STB TEMP1 STORE NO. OF EXT. AT TEMP1 LDB ADR16 GET ADD. OF EQT16 P STA B,I STORE S.A. OF EXT. IN IT INA INB ISZ TEMP1 JMP *-4 * * ** DVA LDA EQT16,I SET MODEM SWITCHES CLB PER BIT 13 RAL,RAL HARDWIRE\MODEM =0\RSS SSA LDB RSS STB SWH2A STB SWH2B STB SWH2E * SEP1 CLB LDA EQT16,I GET BAUD RATE AND STORE AND BN57 IN CARD CONTROL WORD 4 (BN17) LSR 5 IOR BN62 STA BN17 BITS 0-4 * LDA EQT16,I GET PARITY INFO. AND AND B3000 STORE IN BN19 (CARD CONTROL WORD 3) LSR 7 IOR BN63 * STA BN19 AND B10 CHECK FOR PARITY. PARITY ON? SZA,RSS IF NO PARITY CHARACTER LENGTH IS 8 ISZ BN19 NO PARITY * * LDA EQT16,I STORE A AT EOOP7 IF CN50C AND B10 FLAG IS SET SZA LDB RSS STB EOOP7 * LDA EQT6,I GET CONTROL WORD AND B3 STA TEMP4 STORE REQUEST TYPE AT TEMP4 CPA B3 IS THIS CONTROL? JMP OVER7 YES RAR SSA IS THIS A WRITE? JMP OVER2 NO! *** *** LDB EQT28,I IF WRITE AND BUFFER FLUSH SET BLF,BLF THEN EXIT VIA REJ2 SSB JMP OVER8 JMP OVER2 OVER7 LDA EQT6,I LSR 6 IF CONTROL TYPE 0 AND B37 THEN SPECIAL PROCESSING REQUIRED SZA,RSS AT JMP OVER3 * * OVER2 LDA EQT6,I NORMAL NON CNTL 0 REQ. STA EQT12,I STORE CURRENT CONWD FOR SYS. INTERRUPT JMP SETIO,I * * BUFFER FLUSH EXITS * OVER8 LDA TEMP5 GET IA05/CA05 FLAG SZA JMP OVER2 CA05 EXIT JMP REJ2 * * SPECIAL "CONTROL 0" PROCESSING * OVER3 LDA EQT6,I IS THIS A SYSTEM REQ.? SSA,RSS JMP SETIO,I * LDA EQT12,I GET OLD CONWD STA EQT6,I PUT IN CURRENT CONWD AND B2 IF WRITE MUST COJ<:6MPLETE XFER CPA B2 OR TERMINAL WILL HANG JMP OVER9 LDA EQT9,I NO MORE DATA IN USERS BUFFER! STA EQT10,I IT IS GONE!!! OVER9 LDA TEM11 IF NON CRT REQ. WE MUST COMPLETE SZA JMP EXIT4 CONTINUE NOT CRT REQ. * JSB CLRCD GET ALL OFF CARD JSB KEYBD ENABLE KEYBOARD IF LOCKED LDA EQT6,I RAR SLA,RSS IF WRITE OR CONT. THEN SEND NULL JMP REJ2 THIS IS A CRT READ CLA SEND NULL TO ALLOW CHAR. OUT OF UART JSB OUT2 JMP EOOP1 ADR16 DEF EQT16 EQT16 NOP 1 EQT17 NOP 1 EQT18 NOP 1 EQT19 NOP 1 EQT20 NOP 1 EQT21 NOP 1 EQT22 NOP 1 EQT23 NOP 1 EQT24 NOP 1 EQT25 NOP 1 EQT26 NOP 1 EQT27 NOP 1 EQT28 NOP 1 * * * * EQU'S FOR VARIOUS ENTRIES A EQU 0 DEFINE A REG. B EQU 1 DEFINE B REG. CARD EQU 15 DEFINE CARD FOR IO INSTRUCTIONS * * SYSTEM BSAE PAGE COMMUNICATION AREA * . EQU 1650B ESTABLISH ORIGIN OF EQTA EQU 1650B * BASE PAGE EQT1 EQU .+8 EQT2 EQU .+9 ADDRESSES EQT3 EQU .+10 EQT4 EQU .+11 OF CURRENT EQT5 EQU .+12 EQT6 EQU .+13 EQT ENTRY EQT7 EQU .+14 EQT8 EQU .+15 EQT9 EQU .+16 EQT10 EQU .+17 EQT11 EQU .+18 EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * INTBA EQU .+4 SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM CONSOLE * OPATN EQU .+52 OPERATOR KEYBOARD ATTN. FLAG ORG * DRIVER LENGTH END < ?2r 92002-18001 1805 S 0422 GASP SOURCE              H0104 ASMB,R,L * NAME: $SPOL * SOURCE: 92002-18001 * RELOC: 92002-16001 * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM $SPOL 92002-16001 REV. 1805 771116 END SPL,L,O ! NAME: GASP ! SOURCE: 92002-18001 ! RELOC: 92002-16001 ! PGMR: A.M.G. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! ! NAME GASP(3,80) "92002-16001 760615" ! ! LET G1ERP,G1OMS,G1ZAP,G1WFI BE SUBROUTINE LET G1IMS BE SUBROUTINE ! LET KCVT BE FUNCTION,EXTERNAL LET POST,CREAT,OPEN,CLOSE,POSNT,EXEC BE SUBROUTINE,EXTERNAL LET READF,WRITF,PARSE,G1ROT,G1CEX BE SUBROUTINE,EXTERNAL LET G1CIN,RNRQ,REIO BE SUBROUTINE,EXTERNAL LET ST.LU BE SUBROUTINE,DIRECT,EXTERNAL LET G1RD,G1WFI,G1OPN BE SUBROUTINE LET ERTS BE SUBROUTINE,DIRECT ! LET G0END,G0NJB,G0NLO,G0SZF,G0NSP BE INTEGER,EXTERNAL LET CS43,N.SEQ,G0MXP,G0SLU BE INTEGER,EXTERNAL ! LET G0EXN,G0JBF,G0SPF BE INTEGER(3),GLOBAL LET PRMPT BE INTEGER(2) LET JODCB,SPDCB BE INTEGER(16) !DO NOT REARRANGE THESE TWO LET G0DCB BE INTEGER(144),GLOBAL !LINES LET SIZE,SIZE1 BE INTEGER LET ERRS BE INTEGER(3) LET SIGN,ERRNO,SSPOL BE INT7#EGER LET NSPL,IERR,SAVE,SAVE1,SAVE2 BE INTEGER LET WRN,IRN,ICNWD,CHARS,FFILE,ADDR BE INTEGER LET G0BUF,G0WD1,G0WD2,G0WD3 BE INTEGER,GLOBAL LET G0WD4 BE INTEGER(3),GLOBAL LET G0WD7,G0WD8,G0WD9,G0W10,G0W11 \ BE INTEGER,GLOBAL LET G0W12 BE INTEGER(2) LET G0W14 BE INTEGER LET G0W15 BE INTEGER,GLOBAL LET G0W16(110) BE INTEGER LET PBFN2,PBFN1 BE INTEGER LET PBUFX,BUFX1,BUFX2,BUFX3,BUFX4 BE INTEGER LET BUFX5 BE INTEGER(9) LET BUX14 BE INTEGER LET BUX15 BE INTEGER(17) LET G0PBF BE INTEGER,GLOBAL LET G0P1V BE INTEGER,GLOBAL LET PARS1 BE INTEGER(3) LET G0P2V BE INTEGER,GLOBAL LET PARS2 BE INTEGER(26) LET G0NOP BE INTEGER,GLOBAL LET G0SDN,G0JDN BE INTEGER,GLOBAL LET G0TTY,G0RDS,G0ERH BE INTEGER,GLOBAL ! INITIALIZE PRMPT TO 1,57137K INITIALIZE G0RDS TO 0 INITIALIZE G0EXN TO "EXTND" INITIALIZE G0JBF TO "JOBFIL" INITIALIZE G0SPF TO "SPLCON" INITIALIZE ERRS,SIGN TO 4,"GASP " ! LET CNWD BE CONSTANT(400K) LET E BE CONSTANT(42440K) LET SEC BE CONSTANT(123456K) LET IOPTN BE CONSTANT(3) ! GASP: CALL EXEC(22,2);SAVE1 _ $$1 IFNOT [G0TTY _ (SAVE1 AND 77K)] THEN G0TTY _ 1 G0TTY _ G0TTY + CNWD !SAVEG0TTY. IF [X_CS43] THEN GOTO FCHEK CALL ST.LU !SET UP $LUAV AND CS43. CALL EXEC(9,G0EXN,0) !EXTND SETS UP $MPID. FCHEK: CALL OPEN(JODCB,IERR,G0JBF,IOPTN,SEC)!TRY TO OPEN JOBFIL. CALL ERTS !TEST FOR ERRORS CALL G1ZAP(SPDCB) CALL OPEN(SPDCB,IERR,G0SPF,IOPTN,SEC) !NOW TRY SPLCON CALL ERTS !TEST FOR ERRORS CALL G1OPN(G0DCB,IERR,G0JBF) !MOVE THE OPEN DATA CALL G1RD(G0BUF,17) !READ RECORD 17 IF X THEN GOTO RSTRT Ew CALL G1RD(PBUFX,1) !REALLOCATE RN S RNRQ(20K,PBUFX,SAVE) !FOR SPLCON/JOBFIL G0BUF _ PBUFX !TIME THROUGH AFTER RNRQ(20K,G0W14,SAVE) !ALLOCATE HOLD BEM RN. CALL G1WFI(PBUFX,1) !BOOT-UP. CALL G1WFI(G0BUF,17) RSTRT: CALL G1OPN(G0DCB,IERR,G0SPF) !SET TO ACCESS SPLCON IF X THEN GO TO RSTR2 CALL G1RD(PBUFX,1) RNRQ(20K,PBUFX,SAVE) CALL G1WFI(PBUFX,1) RSTR2: CALL G1RD(PBUFX,3) G0SDN_PBUFX;G0JDN_G0W15 !SET THE DOWN FLAGS IF X THEN GO TO GETCD BUFX1 _ G0W14 CALL G1WFI(PBUFX,3) CALL G1CEX(-1) !TERMINATE GO TO GETCD !GET COMMAND ON RESTART ! TERM: CALL CLOSE(JODCB,IERR) !CLOSE THE FILE AND CALL CLOSE(SPDCB) EX: CALL EXEC(6) !EXIT ! GETCD: IFNOT G0RDS THEN [ \READ NEXT COMMAND AND CALL G1IMS(PRMPT)] !PARSE, IF NECESSARY. IERR,G0RDS _ 0 CALL G1ROT(G0PBF,G0NOP,IERR) !GO TO PROPER ROUTINE. ERCHK: IFNOT IERR THEN GOTO GETCD !COME BACK. CHECK FOR CALL G1ERP(IERR) !ELSE REPORT THE ERROR GO TO GETCD !GO GET THE NEXT COMAND ! ! INIT: IF SAVE1 < 0 THEN GO TO EX !IF NO INPUT UNIT, EXIT. G0P1V_60K !SET CODE TO GET TO INIT CALL G1ROT(G0PBF,G0NOP,IERR) !CALL INNITILIZE CALL G1OMS(G0END) !SEND END MESSAGE GO TO EX ! ! THE FOLLOWING ROUTINE ZEROES A 16-WORD BUFFER AREA. ! G1ZAP: SUBROUTINE(LOCAT) GLOBAL LET LOCAT BE INTEGER SAVE2 _ @LOCAT - 1 REPEAT 16 TIMES DO [ \ $[SAVE2 _ SAVE2+1] _ 0] RETURN END ! ! THE FOLLOWING ROUTINE GETS THE RESPONSE TO QUESTIONS ! AT INITIALIZATION. ! G1IMS: SUBROUTINE(MESS) GLOBAL LET MESS BE INTEGER CALL G1OMS(MESS) CALL REIO(1,G0TTY,G0BUF,-32) CHARS _ $1 CALL PARSE(G0BUF,CHARS,G0PBF) RETURN END ! ! WRITE OUT A MESSAGE ! G1OMS: SUBROUTINE(STRNG) GLOBAL LET STRNG BE INTEGER SAVE2 _ @STRNG + 1 CALL EXEC(2,G0TTY,$SAVE2,STRNG) RETURN END ! ! READ RECORD NUMR TO RDBF ! G1RD: SUBROUTINE(RDBF,NUMR)GLOBAL CALL READF(G0DCB,IERR,RDBF,16,LOC,NUMR) !READ THE RECORD IF IERR<0 THEN GO TO ERMS RETURN END ! ! ERROR ROUTINE FOR FIRST OPENS ! ERTS: SUBROUTINE DIRECT IFNOT IERR+6 THEN GO TO INIT IF IERR<0 THEN[\ ERMS: CALL G1ERP(IERR);GO TO TERM] RETURN END ! ! THIS OPEN ROUTINE REALLY JUST MOVES IN A SAVED DCB HEADER ! G1OPN: SUBROUTINE(NWDCB,RREI,NAMF) GLOBAL DPT_@NWDCB RREI_2 !ERROR IS ALWAYS TWO IF NAMF = "SP" THEN GO TO SPOPN !IF SPOOL GO DO IT SPT_@JODCB !SET SOURCE POINTER GO TO MVOPN !GO DO THE MOVE ! SPOPN: SPT_@SPDCB ! SET UP FOR SPOOL CON MVOPN: CALL POST(NWDCB,IERR) !POST ANY DATA FOR K_0 TO 15 DO[$(DPT+K)_$(SPT+K)] !MOVE DCB RETURN END ! ! WRITE A RECORD TO A FILE. ! G1WFI: SUBROUTINE(RECD,RNUM) GLOBAL,FEXIT LET RECD,RNUM BE INTEGER CALL WRITF(G0DCB,IERR,RECD,16,RNUM) IF IERR THEN FRETURN RETURN END ! ! PRINT CURRENT ERROR ROUTINE ! G1ERP: SUBROUTINE(BOMNO) GLOBAL SAVE_BOMNO IF BOMNO < 0 THEN [SAVE_ -BOMNO; \IF NEGATIVE SET SIGN SIGN_ 20055K] !TO "-" ERRNO_ KCVT(SAVE) !CONVERT TO ASCII CALL G1OMS(ERRS) !SEND THE MESSAGE SIGN _ " " !BLANK THE SIGN AGAIN G0ERH _ BOMNO i !KEEP THE HISTORY RETURN !EXIT END ! ! END GASP END$ SPL,L,O ! NAME: G1CDJ ! SOURCE: 92002-18001 ! RELOC: 92002-16001 ! PGMR: A.M.G. ! DATE: 741015 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME G1CDJ(8) LET G1SCH,G1RDF BE SUBROUTINE LET G1OMS BE SUBROUTINE,EXTERNAL LET G1STM BE SUBROUTINE,EXTERNAL,DIRECT LET EXEC,G1OPN,READF BE SUBROUTINE,EXTERNAL ! LET G0W15,G0BUF,G0WD1,G0WD7,G0WD8,G0WD9 BE \ INTEGER,EXTERNAL LET CNTR,BEGIN,TYP,SKEY BE INTEGER LET G0JHD,G0TTY,G0DCB,G0JBF BE INTEGER,EXTERNAL LET DOWN(6) BE INTEGER INITIALIZE DOWN TO 5," SHUT DOWN" LET SPACE BE REAL INITIALIZE SPACE TO 2," " ! LET CNWD BE CONSTANT(1100K) ! ! ! G1CDJ: SUBROUTINE(PBUFR,PCNT,ERR) GLOBAL LET PBUFR,PCNT,ERR BE INTEGER BEGIN _ 19; TYP _ $(@PBUFR+4) SKEY _ @PBUFR+5 ICNWD _ CNWD + G0TTY !SET UP I/O DEVICE. CALL EXEC(3,ICNWD,-1) CALL G1OMS(G0JHD) CALL G1OMS(SPACE) CALL EXEC(3,ICNWD,1) CALL G1OPN(G0DCB,ERR,G0JBF) IF ERR < 0 THEN RETURN CALL G1RDF(17,ERR)?[RETURN] !GET SPEC RECORD ENDR_G0WD1 !SAVE THE END RECORD ! IFNOT (PCNT-1) THEN GOTO WHOLE FL_0 !SET NONE FOUND YET FLAG SEEK: G1SCH(SKEY,TYP,BEGIN,ENDR,ERR) \ ? [IF FL THEN GO TO RETN;IFNOT ERR THEN ERR_6;RETURN] CALL G1STM E !PRINT OUT STATUS IF [FL_TYP] = 2 THEN [ \IF NAME KEY, THEN BEGIN _ BEGIN + 1; GOTO SEEK] !LOOK FOR MORE JOBS GOTO RETN !OF SAME NAME. WHOLE: CALL G1RDF(17,ERR) ? [RETURN] CNTR _ G0WD1 FOR STRT _ 19 TO CNTR DO [ \ CALL G1RDF(STRT,ERR) ? \ [RETURN]; IF G0BUF >= 0 THEN \ CALL G1STM] RETN: IF ERR THEN RETURN CALL G1RDF(17,ERR)?[RETURN] IF G0W15 = "D" THEN CALL G1OMS(DOWN) RETURN END ! ! SEARCH THE JOBFIL FOR A JOB (NAME OR NUMBER KEY). ! G1SCH: SUBROUTINE(KEY,TYPE,STR,ENDF,ERRS) GLOBAL,FEXIT LET KEY,TYPE,STR,ENDF,ERRS BE INTEGER FOR STR _ STR TO ENDF DO [ \ CALL G1RDF(STR,ERRS) ? [FRETURN]; \ IF G0BUF >= 0 THEN [ \ IF TYPE = 1 THEN [ \ IF $KEY = G0WD1 THEN RETURN], \ ELSE [IF $KEY = G0WD7 THEN [IF \ $(KEY+1) = G0WD8 THEN [IF \ $(KEY+2) = G0WD9 THEN\ RETURN]]]]] FRETURN END ! G1RDF: SUBROUTINE(NUM,ERROR) GLOBAL,FEXIT LET NUM,ERROR BE INTEGER CALL READF(G0DCB,ERROR,G0BUF,16,LEN,NUM) IF ERROR THEN FRETURN RETURN END END END$ SPL,L,O ! NAME: G1CCJ ! SOURCE: 92002-18001 ! RELOC: 92002-16001 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME G1CCJ(8) "92002-16001 760615" ! ! LET G1SCH,G1WFI,G1OPN BE SUBRjOUTINE,EXTERNAL LET EXEC,POST,RNRQ,G1RDF BE SUBROUTINE,EXTERNAL ! LET G0DCB,G0JBF,G0BUF,G0WD1,G0WD2,G0WD7 BE INTEGER,EXTERNAL ! LET FMGR(3),PAR1,PARS2,PAR2,RSTAT BE INTEGER ! LET IOPTN BE CONSTANT(3) LET SEC BE CONSTANT(123456K) ! INITIALIZE RSTAT TO 0 INITIALIZE FMGR TO "FMGR " LET CHHI BE CONSTANT (44400K) ! ! G1CCJ: SUBROUTINE(PBUFR,PCNT,ERR) GLOBAL LET PBUFR,PCNT,ERR BE INTEGER PAR2 _ [PARS2 _ [PAR1 _ @PBUFR + 5] \ + 3] + 1 IFNOT $(@PBUFR+4) = 1 THEN [ \ RET1: ERR _ 3; GOTO RETN] CALL G1OPN(G0DCB,ERR,G0JBF) IF ERR < 0 THEN RETURN G1RDF(17,ERR) ? [GOTO RETN] IF [REC_$PAR1+18] > G0WD1 THEN[\IF BAD JOB NUM EXIT ER3: ERR_3;RETURN] JRN _ G0BUF POST(G0DCB) RNRQ(1,JRN,RSTAT) CALL G1RDF(REC,ERR)?[GO TO RETN] IF [NP_G0BUF]<0 THEN [ERR_3;GO TO RETN]!IF NO JOB HERE EXIT IF (G0WD2 = "CS") OR (G0WD2 = "A") THEN [ \ RET2: ERR _ 4; GOTO RETN] IF PCNT < 0 THEN[ \ABORT REQUEST NP_0; \SET FOR INPUT ABORT IF G0WD2 = "I" THEN GO TO IAB; \IF INPUT OR IF (G0WD2 AND 177400K) = CHHI THEN[ \INPUT A OR H IAB: G0WD2_ "IA";GO TO WRT]; \SET TO IA G0WD2_ "A";NP_ -G0BUF;GO TO WRT] !ELSE SET TO A ! IFNOT $PARS2 = 1 THEN GOTO CHR IF $PAR2 < 1 THEN GOTO RET1 NP,G0BUF _ $PAR2; GOTO WRT ! ! CHANGE STATUS ! CHR: PAR2_$PAR2 AND 177400K IF PAR2 = 44000K THEN[ \HOLD REQUEST IFNOT [HI_G0WD2 AND 177400K] THEN \IF NO HIGH STATUS HI_G0WD2*400K; \USE THE LOW STATUS G0WD2_HI+"H";NP_0;GO TO WRT] !SET UP AND EXIT IF PAR2 = 51000K THEN[ \RELEASE REQUEST IF G0WD2 AND 177400K THEN \IF A HIGH STATUS G0WD2_G0WD2/400K; \JUST PUT mIT LOW ELSE NOP IF G0WD2 # "R" THEN NP_0; \IF NOT READY DON'T Q IT GO TO WRT] ERR_56 !BAD PRAM SO SEND ERROR CJERR: IF ERR THEN GOTO RETN GOTO RET2 WRT: CALL G1WFI(G0BUF,REC) ? [GOTO RETN] REC_(REC-1)/16 !GET FLAG ADDRESS OFF_$1 CALL G1RDF(REC,ERR)?[GO TO RETN] $(@G0BUF+OFF)_NP !SET THE NEW PRIORTY CALL G1WFI(G0BUF,REC) RETN: IF RSTAT = 2 THEN [POST(G0DCB); \ RNRQ(4,JRN,RSTAT)] IF PCNT<0 THEN GO TO ABT IF PAR2 = 51000K THEN[\ IF GOING ACTIVE OR ABORT THEN ABT: IFNOT ERR THEN CALL EXEC(10,FMGR,-1)]!CALL FMGR TO FINISH RETURN END ! ! ABORT SETS THE JOB ACTIVE AND COUNTS ON FMGR TO CLEAN UP ! G1CAB: SUBROUTINE(P1,P2,P3) GLOBAL CALL G1CCJ(P1,-1,P3) !CALL CHANGE JOB TO DO IT RETURN END END END$ SPL,L,O ! NAME: G1CEX ! SOURCE: 92002-18001 ! RELOC: 92002-16001 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME G1CEX(8) "92002-16001 760615" ! LET CLOSE,POST,G1OPN,EXEC,G1OMS BE SUBROUTINE,EXTERNAL LET G1SUB,G0JDN,G0SDN,G0DCB,G0TTY,G0END BE INTEGER,EXTERNAL ! G1CEX: SUBROUTINE(N) GLOBAL IF N # -1 THEN CALL G1OMS(G0END) CALL POST(G0DCB) !POST DCB IF NEEDED IFNOT G0JDN THEN GO TO EX !IF BOTH IFNOT G0SDN THEN GO TO EX !JOB AND SPOOL SHUT CALL G1OPN(G0DCB,I,"JO") !DOWN CLOSE BOTH FILES  CALL CLOSE(G0DCB) !AND CALL G1OPN(G0DCB,I,"SP") !DO NORMAL TERM CALL CLOSE(G0DCB) CALL EXEC(6) ! ! SPOOL OR JOB OR BOTH STILL ACTIVE ! SO SAVE RESOURCES AND TERMINATE ! EX: CALL EXEC(22,2) !DON'T SWAP ALL OF MEM G1SUB_0 !CLEAR SEGMENT FLAG CALL EXEC(6,0,1,0) I_$$1 !GET THE LU IFNOT [G0TTY_(I AND 77K)] THEN G0TTY_1 G0TTY_G0TTY+400K !SET THE ECHO BIT RETURN END END END$ SPL,L,O ! NAME: G1CKS (G1CRS) ! SOURCE: 92002-18001 ! RELOC: 92002-16001 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME G1CKS(8) "92002-16001 760627" ! ! ! THIS ROUTINE KILLS OUT SPOOL FILES WHICH ARE PENDING ! ON SOME LU OR IN ONE OF THE HOLD STATES. ! ! IT IS INVOKED WITH THE: ! ! KS,PRAM COMMAND ! ! WHERE PRAM IS: ! NUMERIC MEANING KILL THE SPOOL ACTIVE ON LU PRAM ! ASCII MEANING KILL THE SPOOL BY NAME PRAM ! LET G1IMS, \ G1WFI,POST,G1OPN,G1RDF,EXEC,RNRQ BE SUBROUTINE,EXTERNAL LET G1KLG BE FUNCTION,EXTERNAL,DIRECT ! LET G0DCB,G0SPF,G0BUF,G0WD1,G0WD2,G0WD3,G0WD4,\ G0W10,G0W15,G0P1V,G0KIL BE INTEGER,EXTERNAL ! LET RD,RECV,WRIF BE SUBROUTINE,DIRECT ! LET SMP(3) BE INTEGER LET JOB(3) BE INTEGER INITIALIZE SMP TO "SMP " INITIALIZE JOB ^TO "JOB " ! G1CKS: SUBROUTINE(PRAM,N,ER) GLOBAL ! LU_[PV3_[PV2_[PV_[PF_@PRAM+4]+1]+1]+1]+2 !SET UP PRAM ADDRESSES IFNOT $PF THEN [ER_55;RETURN] !IF NO PRAM SEND ERROR CALL G1OPN(G0DCB,ER,G0SPF) !OPEN THE SPOOL FILE IF ER<0 THEN RETURN !IF ERROR EXIT ER_0 !SET TO ZERO SO NO ERROR IS REPORTED IF N= -1 THEN CALL EXEC(9,JOB,-1) !IF KILL CHECK JOB FIRST ! CALL G1RDF(1,ER)?[RETURN] !READ THE RN RECORD JRN_G0BUF !SAVE THE RN CALL POST(G0DCB) CALL RNRQ(1,JRN,RNST) !LOCK THE FILE LREC_[FREC_G0WD3]+G0WD1-1 !GET RECORD NUMBERS NLUS_G0WD2 !AND NUMBER OF LUS IF N= -1 THEN GO TO LUCK !IF RS CALL GO TO CHECK LU IF $PF=2 THEN GO TO NAM !IF NAME, DO NAME SEARCH FOR I_1 TO NLUS DO[ \START LU SCAN CALL RD((I*8)+1); \READ THE LU BLOCK IF (G0BUF AND 77K)=$PV THEN GO TO FLU]!JUMP IF FOUND ! ! END OF SCAN AND NOT FOUND ! BADPM: ER_56 !SEND BAD PRAM ERROR EX: CALL RNRQ(4,JRN,RNST) !UNLOCK THE RN AND RETURN !EXIT ! ! THE LU WAS FOUND ! FLU: IFNOT G0WD1 THEN [ \IF NO QUE EXIT ER4: ER_4;GOTO EX] !WITH ERROR 4 RNUM_G0WD2 !GET THE FIRST FILE CALL RD(RNUM) !READ THE SPOOL CON RECORD IF G0W10="A" THEN GO TO KL1 !MAKE SURE IT IS ACTIVE IF G0W10="AH" THEN GO TO KL1 !ELSE GO TO ER4 !GO SEND ILLEGAL STATUS ! KL1: FLAG_1 !SET LEGAL COUNT IF ACTIVE IF G0W10="A" THEN GO TO KL2 !SPOOL FILE MUST BE IF G0W10="AH" THEN GO TO KL2 L !IN A DEFINED STATE FLAG_0 IF G0W10="W" THEN GO TO KL2 !IN A DEFINED STATE IF G0W10="H" THEN GO TO KL2 !IN A DEFINED STATE KL0: CALL G1IMS(G0KIL) !ELSE MAKE SURE FIRST IF G0P1V = "YE" THEN GO TO KL4 !IF YES ANSWER DO IT GO TO EX !ELSE RETURN NO ACTION ! KL2: IF G1KLG(RNUM) > FLAG THEN GO TO KL0 !IF STILL WRITING, ASK FIRST KL4: CALL RNRQ(4,JRN,RNST) !UNLOCK THE FILE FOR SMP CALL EXEC(23,SMP,13,RNUM,G0WD1,0,G0W10) !CALL SMP TO KILL KL3: RETURN !AND EXIT ! ! LUCK: IFNOT $LU THEN GO TO NAM !IF NO LU THEN OK RNUM_@G0WD4+2 !SET UP TO SEARCH THE LU TABLE FOR RLHD_1 TO G0WD2 DO[ \SCAN FOR THE LU IF $RNUM = ($LU AND 77K) THEN GO TO NAM;\IF THIS IS IT JUMP RNUM_RNUM+1] !ELSE STEP TO NEXT ENTRY GO TO BADPM !NOT FOUND SEND BAD PRAM MESSAGE ! ! NAM: FOR RNUM_FREC TO LREC DO[ \SCAN THE SPOOL RECS CALL RD(RNUM); \TO FIND THE NAME IF G0BUF >= 0 THEN [ \IF AN ACTIVE ENTRY IF $PV=G0WD2 THEN[ \CHECK THE NAME IF $PV2=G0WD3 THEN[ \ IF $PV3=G0WD4 THEN GO TO FNAM]]]] GO TO BADPM !IF NOT FOUND THEN BAD PRAM ! ! NAME FOUND SO CHECK IF KS OR RS COMMAND ! FNAM: IF N# -1 THEN GO TO KL1 !KS SO GO CHECK STATUS ! OLU _ G0W15 RLHD_G0W10 !SET CURRENT STATUS IF RLHD = "A" THEN GO TO AH !IF ACTIVE GO HOLD/ACTIVE IF RLHD = "AH"THEN GO TO W !IF HOLD/ACTIVE GO RELEASE TO WAIT IF RLHD = "W" THEN GO TO H !IF WAITING GO HOLD IF RLHD = "H" THEN GO TO HH !IF IN HOLD GO CHANGE LU ! GO TOl( ER4 !NOT IN A LEGAL STATUS SO EXIT ! ! SPOOL IS ACTIVE SO FIRST PUT A HOLD ON IT ! AH: G0W10_"AH" !SET STATUS CALL WRIF !WRITE TO THE FILE AND UNLOCK CALL EXEC(23,SMP,14,RNUM,G0W15,0,RLHD)!TELL SMP WHAT TO DO ! ! SET UP TO NOW SET THE FILE ACTIVE ! RLHD_"AH" !SET CURRENT STATUS CALL RECV !RECOVER THE LOCK AND RECORD ! ! FILE IS IN ACTIVE HOLD SO SET THE NEW LU AND ! PUT IN WAIT STATUS ! W: G0W10_"W" !SET STATUS LUX_0 IF $LU THEN[IF $LU#G0W15 THEN LUX_$LU] !SET LU CALL WRIF !WRITE OUT AND UNLOCK CALL EXEC(23,SMP,15,RNUM,OLU,LUX,RLHD) !TELL SMP GO TO KL3 !GO EXIT DONE ! ! ! FILE IS IN A WAIT QUEUE SO PUT IN HOLD THEN CHANGE LU ! AND PUT BACK IN WAIT QUEUE FOR THE NEW LU ! H: G0W10_"H" !SET NEW STATUS CALL WRIF !WRITE IT OUT AND UNLOCK CALL EXEC(23,SMP,14,RNUM,G0W15,0,RLHD) !TELL SMP ! ! NOW SET UP FOR THE WAIT QUEUE TRANSITION ! CALL RECV !RESET THE RN LOCK AND READ IF $LU THEN G0W15_$LU OLU_G0W15 !SET LU FOR CALL GO TO W !GO SET TO WAIT ! ! ! FILE IS IN HOLD SO JUST CHANGE LU AND EXIT ! HH: IF $LU THEN G0W15_$LU CALL WRIF !WRITE IT OUT AND UNLOCK RETURN !NOW RETURN ! END ! ! SUBROUTINE TO WRITE CURRENT RECORD AND UNLOCK THE DISC ! WRIF: SUBROUTINE DIRECT CALL G1WFI(G0BUF,RNUM)?[GO TO EX] !WRITE THE RECORD CALL POST(G0DCB) !MAKE SURE IT GOES TO THE DISC CALL RNRQ(4,JRN,RNST) !UNL=NLHOCK THE RN RETURN !AND RETURN END ! ! SUBROUTINE TO LOCK THE RN AND REREAD THE RECORD ! RECV: SUBROUTINE DIRECT CALL RNRQ(1,JRN,RNST) !LOCK THE RN CALL RD(RNUM) !READ THE RECORD TO THE BUFFER RETURN !AND RETURN END ! ! ! RD: SUBROUTINE (R) DIRECT CALL G1RDF(R,ER)?[GO TO EX] RETURN END ! ! THE RESTART SUBROUTINE JUST CALLS THE KS ROUTINE WITH N=-1. ! G1CRS: SUBROUTINE(P,PN,EW) GLOBAL CALL G1CKS(P,-1,EW) RETURN END END END$ wN SPL,L,O ! NAME: G1CIN ! SOURCE: 92002-18001 ! RELOC: 92002-16001 ! PGMR: A.M.G. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME G1CIN(8) "92002-16001 760630" ! LET G1CDA,G1OMS,G1ZAP,G1WFI BE SUBROUTINE,EXTERNAL LET G1CQQ,EXEC,G1IMS BE SUBROUTINE,EXTERNAL LET .DFER BE SUBROUTINE,EXTERNAL,DIRECT ! LET KCVT BE FUNCTION,EXTERNAL LET POST,CREAT,OPEN,CLOSE BE SUBROUTINE,EXTERNAL LET RNRQ BE SUBROUTINE,EXTERNAL LET ST.LU BE SUBROUTINE,DIRECT,EXTERNAL LET CNUMD,G1RD,G1OPN BE SUBROUTINE,EXTERNAL LET CRERR BE SUBROUTINE LET GERR BE SUBROUTINE,DIRECT ! LET G0END,G0NJB,G0NLO,G0SZF,G0NSP BE INTEGER,EXTERNAL LET CS43,N.SEQ,G0MXP,G0SLU BE INTEGER,EXTERNAL ! LET G0EXN,G0JBF,G0SPF BE INTEGER,EXTERNAL LET G0DCB BE INTEGER,EXTERNAL !LINES LET G0BUF,G0WD1,G0WD2,G0WD3 BE INTEGER,EXTERNAL LET G0WD4 BE INTEGER,EXTERNAL LET G0WD7,G0WD8,G0WD9,G0W10,G0W11 \ BE INTEGER,EXTERNAL LET G0W15 BE INTEGER,EXTERNAL LET G0PBF BE INTEGER,EXTERNAL LET G0P1V BE INTEGER,EXTERNAL LET G0P2V BE INTEGER,EXTERNAL LET G0NOP BE INTEGER,EXTERNAL LET G0SDN,G0JDN BE INTEGER,EXTERNAL LET G0TTY,G0RDS,G0ERH BE INTEGER,EXTERNAL LET PBUFX,BUFX1,BUFX2,BUFX3,BUFX4,BUFX5(9),BUX14, \ BUX15(17) BE INTEGER ! LET DUPNM(8),MESS(4),DINIT(8) BE INTEGER INITIALIZE DUPNM,MESS TO 11,"DUP FILE NAME XXXXXX. " INITIALIZE DINIT TO 7,"DEINITIALIZE?_" LET NOROM(3),DNO(12),MS,MSS(11) BE INTEGER INITIALIZE NOROM,DNO,MS,MSS TO 27,\ DISC FULL MESSAGE "DISC XXXXX FULL OR MISSING, XX SPOOL FILES CREATED. " LET SIZE,SIZE1 BE INTEGER !DO NOT REARRANGE THESE LET SPOL(2),SPLNO,IERR BE INTEGER !TWO LINES INITIALIZE SPOL TO "SPOL" INITIALIZE SPLNO TO 1 INITIALIZE SIZE1 TO 16 LET E BE CONSTANT(42440K) LET EXIT BE CONSTANT(42530K) LET SEC BE CONSTANT(123456K) LET IOPTN BE CONSTANT(3) ! G1CIN: SUBROUTINE GLOBAL INIT: CALL ST.LU CALL G1IMS(G0NJB) !INITIALIZE THE BATCH IFNOT [SAVE1 _ G0P1V] > 0 THEN [ \SYSTEM. GET # OF JOBS. INIT1: CALL GERR; GOTO INIT] ! SIZE _ 3 IF G0P1V > 254 THEN GOTO INIT1 IF [SAVE _ G0P1V - 6] <= 0 THEN \FIGURE OUT THE SIZE OF GOTO CRJOB !JOBFIL, AND CREATE IT. IF (SAVE AND 7K) THEN \ SIZE _ SIZE + 1 SIZE _ (SAVE >-3) + SIZE CRJOB: SPDIS_G0P2V !SET THE DISC FOR JOBFIL CALL CREAT(G0DCB,IERR,G0JBF,SIZE,2,SEC,SPDIS) CALL CRERR(G0JBF) !CHECK FOR ERRORS CALL G1ZAP(PBUFX) CALL RNRQ(20K,IRN,SAVE) !ALLOCATE JOBFIL RN. PBUFX _ IRN !PUT IT IN JOBFIL. CALL G1WFI(PBUFX,0) ? [GOTO EXIN] PBUFX _ 0 !INITIALIZE FIRST 2 REPEAT 15 TIMES DO [ \JOBFIL SECTORS. CALL G1WFI(PBUFX,0) ? \ [GOTO EXIN]] NSP: CALL G1IMS(G0NSP) !GET # OF SPOOL FILES. IF [NSPL,BUFX2 _ G0P1V] > 80 THEN [ \MAKE SURE IT IS NOT NSP1: CALL GERR; GOTO NSP] !MORE THAN 80. IFNOT NSPL > 4 THEN GOTO NSP1 SZS: CALL G1IMS(G0SZF) !GET SIZE OF SPOOL FILES. IFNOT G0PBF = 1 THEN GOTO SZS1 !MAKE SURE NUMERIC. IFNOT [SSPOL,BUFX3 _ G0P1V] > 0 THEN [\MAKE SURE IT IS NON-ZERO. SZS1: CALL GERR; GOTO SZS] BUFX1 _ [SIZE _ SAVE1 + 18] PBUFX _ IRN !PUT IN RN NUMBER. RNRQ(20K,WRN,SAVE) !ALLOCATE HOLD BEM RN. BUX14 _ WRN WRT1: CALL G1WFI(PBUFX,0) ? [GOTO EXIN] !WRITE JOBFIL RECORD 17. NOL: CALL G1ZAP(PBUFX) ADDR _ @PBUFX-1; FFILE _ 1 REPEAT 8 TIMES DO [ \GET # OF SPOOL FILES CALL G1IMS(G0NLO); \AT EACH LOCATION AND IF G0P1V = E THEN GOTO ADDUP; \MAKE UP JOBFIL $[ADDR _ ADDR+1] _ (G0P1V <-8) \RECORD 18. XOR FFILE; \ FFILE _ FFILE + G0P1V; \ $[ADDR _ ADDR+1] _ G0P2V] ADDUP: ADDR _ @PBUFX-2 ;SAVE1 _ 0 !CHECK IF THE # OF FILES REPEAT 8 TIMES DO [ \AT EACH LOCATION AGREES SAVE1 _ (($[ADDR _ ADDR+2] -<8) \WITH THE TOTAL # OF AND 377K) + SAVE1] !FILES. IFNOT SAVE1 = NSPL THEN [ \IF DISAGREE, DO OVER. CALL GERR; GOTO NOL] WRT2: CALL G1WFI(PBUFX,0) ? [GOTO EXIN] !WRITE JOBFIL RECORD 18. CALL G1ZAP(G0BUF) G0BUF _ -1 FOR SAVE _ 19 TO SIZE DO [ \INITIALIZE REST OF CALL G1WFI(G0BUF,0) ? \JOBFIL. [GOTO EXIN]] ! ! MNS: CALL G1IMS(G0MXP) !GET SPLCON INFORMATION. IFNOT G0PBF = 1 THEN GOTO MNS1 IFNOT [BUFX1 _ G0P1V + N.SEQ] >= NSPL\GET MAXIMUM # THEN [ \ MNS1: CALL GERR; GOTO MNS] !OF SPOOL FILES. IFNOT [BUFX4 _ G0P1V] > 0 \ THEN GOTO MNS1 BUFX2 _ 0; ADDR _ @BUFX5 REPEAT 11 TIMES DO THRU LUSET LUN: CALL G1IMS(G0SLU) !GET LOGICAL UNIT IF G0P1V = E THEN GOTO ALLDN !NUMBERS FOR IF [G0P1V_G0P1V AND 77K] < 3 THEN GO TO LUNER !LU 1,2 ILL CALL EXEC(100015K,G0P1V,EQT5) !GET DRIVER TYPE GO TO LUNER !BAD LU ERROR IF (EQT5 AND 36000K)=14000K THEN[ \DISC ILLGAL LUNER: GERR;GO TO LUN] !REPORT ERROR AND TRY IFNOT [G0P2V_G0P2V AND 17K] THEN G0P2V_4 !DEFAULT DEPTH $[ADDR _ ADDR+1] _ G0P1V+G0P2V*400K !LEVEL IN HIGH HALF LUSET: BUFX2 _ BUFX2 + 1 ALLDN: IF (BUFX1 AND 7K) THEN SIZE _ 1, \ ELSE SIZE _ 0 SIZE _ (BUFX1 >-3) + SIZE + BUFX2 + 1 CCR: CREAT(G0DCB,IERR,G0SPF,SIZE,2,SEC,SPDIS)!CREATE SPLCON. CALL CRERR(G0SPF) BUFX3 _ ((BUFX2+1) <-3) + 1 RNRQ(20K,PBUFX,SAVE) !ALLOCATE SPLCON RN. ADDR _ @BUFX5 CALL G1ZAP(G0BUF) G1WFI(G2BUF,2) ? [GOTO EXIN] !WRITE 2ND SPLCON REC. G0WD1 _ WRN REPEAT 6 TIMES DO [G1WFI(G0BUF,0) \ ? [GOTO EXIN]] G0WD1 _ 0 REPEAT BUFX2 TIMES DO [ \SET UP LOGICAL UNIT G0BUF _ $[ADDR _ ADDR+1]; \SECTORS IN SPLCON. $ADDR_$ADDR AND 77K; \ISOLATE THE LU G1WFI(G0BUF,0) ? [GOTO EXIN]; \ G0BUF _ 0; \ REPEAT 7 TIMES DO [ \ CALL G1WFI(G0BUF,0) ? \ [GOTO EXIN]]] CALL G1ZAP(G0BUF); G0BUF _ -1 REPEAT BUFX1 TIMES DO [ \ CALL G1WFI(G0BUF,0) ? [GOTO EXIN]] ! CALL G1WFI(PBUFX,1)?[GOTO EXIN] !WRITE 1ST SPLCON REC. ! CALL OPEN(G0DCB,IERR,G0JBF,3,SEC,SPDIS) !REOPEN JOB FILE CALL CRERR(G0JBF) CALL G1RD(PBUFX,18) !GET BACK RECORD 18 ADDR _ @PBUFX-1 REPEAT 8 TIMES DO THRU LAST !CREATE ALL THE SPOOL FFILE _ $[ADDR _ ADDR+1] AND 377K !FILES. SAVE1 _ (($ADDR -<8) AND 377K)+FFILE-1 ICR _ $[ADDR _ ADDR+1] FOR FFILE _ FFILE TO SAVE1 DO [ \ IF [SPLNO _ KCVT(FFILE)] \  < 30000K THEN SPLNO _ \ SPLNO OR 30000K ; \ CALL CREAT(G0BUF,IERR,SPOL, \ SSPOL,3,SEC,ICR); \ IF IERR= -6 THEN GO TO TRUN; \ CALL CRERR(SPOL)] LAST: ! CALL CLOSE(G0BUF) EXINT: CALL CLOSE(G0DCB) !CLOSE THE FILE AND RETURN ! ! TRUN: CALL G1RD(G0BUF,17) !SET UP JOB FILE FOR G0WD2_FFILE -1 !THE ACTUAL NUMBER OF FILES CALL G1WFI(G0BUF,17) !WRITE IT OUT CALL CLOSE(G0DCB) !CLOSE THE FILE MS_KCVT(FFILE-1) !SET UP THE MESSAGE CALL CNUMD(ICR,DNO) CALL G1OMS(NOROM) !SEND NO ROOM MESSAGE GO TO AGAIN END ! ! CRERR: SUBROUTINE(FIN) IF IERR > 0 THEN RETURN !IF NO ERRORS RETURN IF IERR = -2 THEN [CALL .DFER(MESS,FIN); \IF DUP NAME CALL G1OMS(DUPNM); \SEND MESSAGE AND GET ANS. AGAIN: CALL G1IMS(DINIT); \SEND MESSAGE AND GET ANS. IF G0P1V = "YE" THEN[CALL G1CDA(-1); GO TO INIT]] EXIN: CALL G1CQQ(SIZE) !SEND ERROR MESSAGE CALL G1OMS(G0END) !SEND END MESSAGE CALL EXEC(6) !TERMINATE END ! ! ERROR REPORT SUBROUTINE ! GERR: SUBROUTINE DIRECT IERR_2 !SET THE ERROR CODE CALL G1CQQ(SIZE) !PRINT THE MESSAGE RETURN END END END$ SPL,L,O ! NAME: G1CDA ! SOURCE: 92002-18001 ! RELOC: 92002-16001 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROykGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME G1CDA(8)"92002-16001 760627" ! LET G1OMS,G1ZAP,G1WFI BE SUBROUTINE,EXTERNAL LET G1CQQ,EXEC,G1IMS BE SUBROUTINE,EXTERNAL LET .DFER BE SUBROUTINE,EXTERNAL,DIRECT ! LET KCVT BE FUNCTION,EXTERNAL LET POST,PURGE,OPEN,CLOSE BE SUBROUTINE,EXTERNAL LET RNRQ BE SUBROUTINE,EXTERNAL LET G1CEX,G1CSD,G1RD,G1OPN BE SUBROUTINE,EXTERNAL LET FERR BE SUBROUTINE ! LET G0END,G0NJB,G0NLO,G0SZF,G0NSP BE INTEGER,EXTERNAL LET G0MXP,G0SLU BE INTEGER,EXTERNAL ! LET G0EXN,G0JBF,G0SPF BE INTEGER,EXTERNAL LET G0DCB BE INTEGER,EXTERNAL !LINES LET G0BUF,G0WD1,G0WD2,G0WD3 BE INTEGER,EXTERNAL LET G0WD4 BE INTEGER,EXTERNAL LET G0WD7,G0WD8,G0WD9,G0W10,G0W11 \ BE INTEGER,EXTERNAL LET G0W15 BE INTEGER,EXTERNAL LET G0PBF BE INTEGER,EXTERNAL LET G0P1V BE INTEGER,EXTERNAL LET G0P2V BE INTEGER,EXTERNAL LET G0NOP BE INTEGER,EXTERNAL LET G0SDN,G0JDN BE INTEGER,EXTERNAL LET G0TTY,G0RDS,G0ERH BE INTEGER,EXTERNAL ! LET RESON(8),MES(3) BE INTEGER INITIALIZE RESON TO 10,"ERROR ON FILE " LET CLEAN(8) BE INTEGER INITIALIZE CLEAN TO 7,"SPOOL IS DEAD!" LET REALY(9) BE INTEGER INITIALIZE REALY TO 8,"KILL SPOOLING? _" LET SIZE,SIZE1 BE INTEGER !DO NOT REARRANGE THESE LET SPOL(2),SPLNO,IER,I BE INTEGER !TWO LINES INITIALIZE SPOL TO "SPOL" INITIALIZE SPLNO,IER TO 1,0 LET SEC BE CONSTANT(123456K) LET RLF BE CONSTANT(40040K) !RN RELEASE CODE WORD ! G1CDA: SUBROUTINE(F) GLOBAL IF F # -1 THEN[CALL G1IMS(REALY); \IF NOT FROM INIT IF G0P1V # "YE" THEN RETURN] !THEN MAKE SURE. ! ! FIRST CALL SHUT DOWN ! IF G0JDN THEN[IF G0SDN THEN GO TO DOWN] IER _ 0 CALL G1CSD(SIZE1) ! ! FIRST GET THE NUMBER OF SPOOL POOL FILES TO PURGE ! DOWN: CALL OPEN(G0DCB,IER,G0JBF,0,SEC) !OPEN JOB FILE IF IER = 2 THEN GO TO RD17 !IF NO ERROR JUMP IF IER = -6 THEN[SPNO_80;GO TO GOTNO] !IF NO FILE PURGE 80 ! CALL FERR(G0JBF) !REPORT ANY OTHER ERROR GO TO EX !AND GET OUT ! ! RD17: CALL G1RD(G0BUF,17) !GET RECORD 17 SPNO_G0WD2 !SET THE COUNT ! GOTNO: FOR I_1 TO SPNO DO THRU X SPLNO_KCVT(I) IF SPLNO < 30000K THEN SPLNO_SPLNO OR 30000K !FIX IF 01-09 CALL PURGE(G0DCB,IER,SPOL,SEC) !PURGE THE FILE IF IER > -1 THEN GO TO X IF IER = -6 THEN GO TO X !IF NO FILE OR NO ERROR CALL FERR(SPOL) !DON'T WORRY, ELSE REPORT GO TO EX !AND STOP X: !END OF LOOP CALL OPEN(G0DCB,IER,G0JBF,0,SEC) !REOPEN THE JOB FILE IF IER # 2 THEN GO TO PUSP !IF ERROR SKIP ! CALL G1RD(G0BUF,17) !GET THE RN'S TO CORE CALL RNRQ(RLF,G0BUF,IS) !RELEASE THE TWO RN'S GO TO NEX1 NEX1: CALL RNRQ(RLF,G0W14,IS) GO TO NEX2 NEX2: CALL PURGE(G0DCB,IER,G0JBF,SEC) !PURGE JOB FILE IF IER < 0 THEN CALL FERR(G0JBF) !REPORT ERRORS ! PUSP: CALL OPEN(G0DCB,IER,G0SPF,0,SEC) !NOW GET SPLCON IF IER #2 THEN[ \IF ERROR REPORT IT Z: CALL FERR(G0SPF);GO TO EX] !AND EXIT ! CALL G1RD(G0BUF,1) !GET THE FIRST RECORD CALL RNRQ(RLF,G0BUF,IS) !RELEASE THE RN. GO TO NEX3 NEX3: CALL PURGE(G0DCB,IER,G0SPF,SEC) !PURGE THE FILE IF IER < 0 THEN GO TO Z !IF ERROR REPORT IT CALL G1OMS(CLEAN) !ELSE REPORT DONE EX: CALL G1OMS(G0END) !AND EXIT CALL EXEC(6) END ! ! FERR: SUBROUTINE(N) CALL .DFER(MES,N) !SET UP THE FILE NAME CALL G1OMS(RESON) !SENT IT CALL G1CQQ(SIZE) !CALL ?? TO SEND THE FULL MESSAGE RETURN END END END$ ASMB,R,L HED GASP1 * NAME: GASP1 * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM GASP1,5 92002-16001 760615 EXT G0PBF,G1SUB,G1SEG SPC 1 GASP1 LDA TABL STA G1SUB SET THE TABLE ADDRESS JMP G1SEG RETURN TO MAIN SPC 1 TABL DEF *+1 SPC 1 EXT G1CDJ DEF G1CDJ EXT G1CCJ DEF G1CCJ EXT G1CDS DEF G1CDS EXT G1CCS DEF G1CCS EXT G1CKS DEF G1CKS EXT G1CRS DEF G1CRS EXT G1CAB DEF G1CAB END GASP1 ASMB,R,L HED GASP2 * NAME: GASP2 * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM GASP2,5 92002-16001 760615 EXT G0PBF,G1SUB,G1SEG SPC 1 GAj640SP2 LDA TABL STA G1SUB SET THE TABLE ADDRESS JMP G1SEG RETURN TO MAIN SPC 1 TABL DEF *+1 SPC 1 EXT G1CDA DEF G1CDA EXT G1CQQ DEF G1CQQ EXT G1CIN DEF G1CIN EXT G1CSD DEF G1CSD EXT G1CSU DEF G1CSU END GASP2 g6ASMB,R,L,C G1CDS DISPLAY SPOOL STATUS HED G1CDS * NAME: G1CDS G1CCS * SOURCE: 92002-18001 * RELOC: 92002-16001 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM G1CDS,8 92002-16001 760621 * ENT G1CDS,G1CCS * EXT .ENTR,G1OMS,KCVT EXT G0DCB,G0BUF,G0WD1,G0WD2,G0WD3,G0WD4 EXT G0WD9,G0W10,G0W11,G0W15 EXT G1OPN,READF,WRITF,POST,RNRQ EXT EXEC,G1KLG * A EQU 0 B EQU 1 SUP * PBUF1 NOP PLEN1 NOP IERR NOP * G1CDS NOP JSB .ENTR FETCH PARAMETERS DEF PBUF1 CLA STA SPLU INITIALIZE SPOOL LU# STA PBUF2 SET NONE PRINTED FLAG LDA DBLNK STA SPSTM+2 FILL LU# WITH BLANKS CLA,INA CPA PLEN1,I SEE IF MORE THAN 1 PARAM JMP NOPR1 NO, DEFAULT TO ALL LUS LDB PBUF1 GET ADDR OF PARAM LIST ADB D4 SKIP "DS" COMMAND LDA B,I GET LU IF ANY GIVEN SZA IF NULL OR NUMERIC CPA D1 THEN OK INB,RSS JMP ILPM1 ILLEGAL PARAMETER LDA B,I SET REQUESTED LU # STA SPLU * NOPR1 JSB G1OPN OPEN SPLCON DEF *+4 NO NEED TO LOCK RN DEF G0DCB SO SPOOL SYSTEM CAN DEF IERR,I RUN FASTER DEF SPCON SSA JMP EXIT1 EXIT IF ERROR CLA,INA READ 1ST REC JSB RD LDA G0BUF GET THE RN NUMBER STA RNWD AND SAVE IT * LDA G0WD1 GET #SPOOL CONTROL RECS CMA,INA,SZA,RSS JMP DSNOS NO SPOOLS * STA RCONT SAVE THEV COUNT LDA G0WD3 GET RECORD NUMBER OF STA RCNO FIRST CONTROL RECORD JSB G1OMS SEND HEAD DEF *+2 DEF SPSH2 * JSB G1OMS SEND A SPACE DEF *+2 DEF SPACE * * GTSLU LDA RCNO SET TO READ THE RECORD JSB RD READ IT CHCKN LDA G0BUF GET USAGE FLAG SSA IF NOT IN USE JMP GTNRC GO GET THE NEXT ONE * * LDA G0W15 GET THE LU AND B77 MASK OUT ANY CONTROL BITS SZA,RSS IF NO LU JMP PURG? GO CHECK IF WE SHOULD PURGE * NOPU LDB SPLU GET THE REQUEST LU SZB IF NO REQUEST LU CPB A OR THIS IS IT RSS THEN DISPLAY STATUS JMP GTNRC ELSE SKIP TO NEXT RC * STA TEMP JSB KCVT PREPARE HEADING DEF *+2 BY CONVERTING LU # DEF TEMP CPA AB0 IF RESULT IS ZERO LDA ADM REPLACE WITH "--" LDB DBLNK MOVE THE LU RRR 8 OVER ONE CHAR. AND PAD DST SPSTM+1 SET IN THE MESSAGE * LDA G0WD9 GET SPOOL PRIORITY JSB DEC4C CONVERT 4 DEC ASCII DIGITS DEF SPSTM+7 PUT INTO STATUS MESSAGE * LDA G0WD2 MOVE NAM1,NAM2 STA SPSTM+3 LDA G0WD3 MOVE NAM3,NAM4 STA SPSTM+4 LDA G0WD4 MOVE NAM5,NAM6 STA SPSTM+5 LDA G0W10 PICK UP SPOOL STATUS AND B377 FROM WORD 10 CPA G0W10 IF SAME IOR B20K MERGE IN BLANK IOR G0W10 IF NOT MIRGE IN HIGH CHAR TOO CPA B20K IF UPPER BLANK ONLY LDA ADM USE "--" STA SPSTM+12 LDA G0W11 GET JOB NUMBER ADA MD18 STA SPBUF+11 JSB KCVT CONVERT JOB# DEF *+2 AND STUFF INTO MESSAGE DEF SPBUF+11 STA SPSTM+10 JSB G1OMS PRINT SPOOL STATUS MESSAGE DEF *+2 DEF SPSTM * ISZ PBUF2 COUNT THE PRINTED SPOOLS `* GTNRC ISZ RCNO STEP THE RECORD NUMBER ISZ RCONT BUMP RC COUNT JMP GTSLU * LDA PBUF2 IF NONE PRINTED SZA,RSS THEN SO JSB NOSP STATE LDA D3 READ SPLCON REC #3 JSB RD LDA G0BUF CHECK IF SHUT DOWN CPA "D" IS IN EFFECT RSS JMP DSDN NO, NOT DOWN JSB G1OMS YES, PRINT "SHUT DOWN" DEF *+2 DEF DOWN * DSDN CLA LDB SPLU IF NO LU SPECIFIED SZB,RSS THEN NO ERROR JMP EXIT1 IF CAN'T FIND ANY LDB SPSTM+2 GET LU# CPB DBLNK STILL BLANKS? LDA D6 IF NO LU FOUND, ERR 6 EXIT1 STA IERR,I JMP G1CDS,I RETURN * * ILPM1 LDA D56 ILLEGAL PARAMETER JMP EXIT1 * DSNOS JSB NOSP PRINT "NO SPOOLS" JMP DSDN DONE * NOSP NOP JSB G1OMS SEND A SPACE DEF *+2 DEF SPACE FIRST JSB G1OMS PRINT NO SPOOLS MESSAGE DEF *+2 DEF NOSPM JMP NOSP,I * * ADM ASC 1,-- AB0 ASC 1, 0 * RD NOP READ A RECORD FROM THE CURRENT FILE STA NORC SET THE RECORD NUMBER JSB READF GO READ IT DEF *+7 DEF G0DCB DEF IERR,I DEF G0BUF DEF D16 DEF TEMP DEF NORC JMP RD,I RETURN * NORC NOP RCNO NOP RCONT NOP B77 OCT 77 * * PURG? JSB G1KLG GO SCAN THE $LUAV FOR DEF RCNO THIS RECORD SZA IF SOME ENTRIES OK SO JMP NOPU0 JUST CONTINUE * JSB CKPU CHECK FURTHER JMP CHCKN LOOK OK NOW * JSB EXEC CALL JOB TO SEE IF IT OWNS IT DEF *+4 DEF D9 DON'T WAIT(IF BUSY THEN NOT HIS) DEF JOB DEF MD1 SEND -1 TO JUST CLEAN UP * JSB CKPU OK NOW?? JMP CHCKN YES GO PROCESS * JSB EXEC NO CALL SMP TO KILL IT DEF *+5 DEF D23 WAIT FOR IT DEF SMP DEF D13 KILL CODE DEF RCNO THIS IS THE BAD GUY * JMP GTNRC IF NOT CLEAR NOW IT NEVER WILL BE * CKPU NOP RETURN P+2 IF SHOULD PURGE JSB POST POST THE BUFFER DEF *+2 THE DCB DEF G0DCB JSB RNRQ AND LOCK THE RN DEF *+4 DEF RNLOK DEF RNWD DEF RNSTT LDA RCNO NOW JSB RD AND READ THE RECORD AGAIN LDA G0BUF NOW MAKE SURE NOTHING SSA HAS CHANGED JMP FG ALREADY CLEARED SO FORGET IT * LDA G0W15 GET THE LU AND B77 AND IF STILL SZA CONTINUE JMP FG ELSE FORGET IT * JSB G1KLG GO GET THE COUNT DEF RCNO IF STILL ZERO SZA CONTINUE JMP FG ELSE FORGET IT * ISZ CKPU SET TO TAKE THE PU EXIT FG JSB ULOKP UNLOCK THE RN NOP IGNOR ERROR JMP CKPU,I RETURN * * NOPU0 CLA JMP NOPU HED G1CCS CHANGE SPOOL STATUS PBUF2 NOP PLEN2 NOP IERR2 NOP * G1CCS NOP CHANGE SPOOL STATUS ROUTINE JSB .ENTR FETCH PARAMETERS DEF PBUF2 LDA PLEN2,I GET NUMBER OF PARAMS ADA MD3 MAKE SURE NO LESS THAN 3 SSA JMP CSMPR * LDB PBUF2 INCRE TO PARAM 2 ADB D4 SINCE FIRST IS "CS" LDA B,I CPA D2 CHECK PARAM 2 FOR RSS ASCII NAME JMP CSBPR IF NOT, THEN ERROR 56 INB STB SPNM SAVE ADDR OF SPOOL NAME ADB D3 INCRE TO PARAM 3 STB PBUF2 * JSB OPLOK OPEN SPLCON, LOCK RN DEF SPCON JMP EXIT2 EXIT IF ERRORS * LDA G0WD1 GET # SPOOL CONTROL RECS CMA,INA,SZA,RSS IF NONE, JMP NOSP2 THEN ERROR 6 STA SPCNT LDA G0WD3 GET SPOOL REC # OFFSET STA SPOFS STA SPREC * CSRDS JSB pREADF READ A SPOOL RECORD DEF *+7 DEF G0DCB DEF IERR2,I DEF G0BUF DEF D16 DEF TEMP DEF SPREC SSA JMP EXIT2 EXITS IF ERROR * CCA CPA G0BUF IS THIS SPOOL REC UNUSED? JMP CSNXS YES, SO LOOK SOME MORE * LDA SPNM GET SPOOL NAME TO UPDATE STA TEMP LDA G0WD2 CPA TEMP,I COMPARE NAM1,NAM2 RSS JMP CSNXS ISZ TEMP LDA G0WD3 CPA TEMP,I COMPARE NAM3,NAM4 RSS JMP CSNXS ISZ TEMP LDA G0WD4 CPA TEMP,I COMPARE NAM5,NAM6 JMP CSFDS NAME MATCHES * CSNXS ISZ SPREC BUMP SPOOL REC # ISZ SPCNT BUMP COUNT, DONE? JMP CSRDS NO, READ NEXT SPOOL REC NOSP2 LDA D6 CANT FIND SPOOL REQ. JMP EXIT2 * CSFDS LDA PBUF2,I YEH, WE FOUND IT. ISZ PBUF2 CPA D1 CHECK IF PARAM 3 IS # JMP CSPRI YES, PRIORITY CHANGE CPA D2 CHECK IF PARAM 3 IS ASCII JMP CSSTA YES, STATUS CHANGE CSBPR LDA D56 BAD PARAMETER EXIT2 STA IERR2,I JSB ULOKP UNLOCK RN, POST FILE NOP IGNORE ERROR LDA IERR2,I JMP G1CCS,I RETURN * CSILS LDA D4 ILLEGAL STATUS JMP EXIT2 * CSMPR LDA D55 MISSING PARAMETER JMP EXIT2 * * * CSSTA LDB G0W10 GET OLD SPOOL STATUS STB OSTAT LDA PBUF2,I GET NEW STATUS IN A ALF,ALF MOVE CHAR TO LOW BITS AND B377 KEEP ONLY 1 CHAR CPA "H" MUST EITHER BE "H" JMP CSH OR CPA "R" "R" JMP CSR JMP CSBPR ELSE BAD PARAM * CSH CPB "W" IF SPOOL WAITING JMP SMSET JUST SET HOLD CPB "H" IF ALREADY HELD JMP ALSET NO ERROR TO DO AGAIN CPB "AH" JMP ALSET LDA "AH" CPB "A" IF ACTIVE JMP SMSET THEN SET "AH" JMP CSBP7R ANYTHING ELSE IS BAD * CSR LDA "W" RELEASE SPOOL CPB "W" IF IN WAIT JMP ALSET ALREADY DONE CPB "H" IF IN HOLD JMP CSSET RELEASE TO WAIT LDA "A" CPB "AH" IF IN ACTIVE-HOLD JMP CSSET THEN MAKE ACTIVE JMP CSBPR ANYTHING ELSE IS BAD * CSSET LDB D15 SET FOR A RELEASE CALL AND RSS SKIP TO THE CALL SMSET LDB D14 SET FOR A HOLD CALL JSB WRSMP WRITE THE RECORD AND CALL SMP ALSET CLA JMP EXIT2 * WRSMP NOP STB SMPR SAVE THE SMP CALL WORD STA G0W10 SET NEW STATUS JSB WR WRITE UPDATED RECORD BACK LDB SMPR RESET SMP CALL PRAM JSB SMPR GO TELL SMP JMP WRSMP,I EXIT * * * SMPR NOP STB TEMP SET CALL PRAM JSB EXEC CALL SMP TO PUT SPOOL DEF *+8 INTO ANY QUEUE IT DEF D23 SHOULD BE IN DEF SMP DEF TEMP DEF SPREC DEF G0W15 DEF MD1 DEF OSTAT JMP SMPR,I EXIT * * * CSPRI LDA G0W10 GET CURRENT STATUS STA OSTAT OF SPOOL FILE CPA "W" IS IT WAITING OR RSS CPA "H" IN HOLD? RSS YES SO OK JMP CSILS ELSE ILLEGAL STATUS * LDB PBUF2,I GET THE NEW PRIORITY STB G0WD9 AND SET IT CPA "H" IF IN HOLD GO JMP CSPRH GO WRITE THE RECORD * LDA G0W10 ELSE PICK UP THE STATUS LDB D14 AND GO PUT IN HOLD JSB WRSMP LDB D15 NOW RELEASE TO NEW QUEUE JSB SMPR JMP ALSET DONE GO EXIT * * CSPRH JSB WR WRITE THE NEW PRIORITY JMP ALSET AND EXIT * * WR NOP JSB WRITF WRITE UPDATED RECORD BACK DEF *+6 DEF G0DCB DEF IERR2,I DEF G0BUF DEF D16 DEF SPREC SSA JMP EXIT2 JSB ULOKP UNLOCK RN AND POST FLILE NOP JMP WR,I EXIT HED COMMON ROUTINES AND CONSTANTS TO DS,CS * * JSB OPLOK * DEF FILENAME * * * OPLOK NOP OPEN FILE AND LOCK RN LDA OPLOK,I GET ADDR OF FILE NAME STA FNAME ISZ OPLOK JSB G1OPN OPEN FILE DEF *+4 USING GLOBAL DCB DEF G0DCB DEF ULOKP FNAME DEF * SSA ANY ERRORS? JMP OPLKE YES, BUG OUT * JSB READF READ FIRST RECORD DEF *+4 FROM FILE DEF G0DCB INTO GLOBAL BUFFER DEF ULOKP DEF G0BUF SSA ANY ERRORS? JMP OPLKE YES LDA G0BUF GET FIRST WORD OF RECORD STA RNWD WHICH SHOULD BE RN LOCK WORD JSB POST MAKE SURE READS DEF *+2 ARE CLEAN. DEF G0DCB * JSB RNRQ LOCAL LOCK RN TO US DEF *+4 DEF RNLOK DEF RNWD DEF RNSTT * ISZ OPLOK INCRE ADDR FOR GOOD RETURN OPLKE JMP OPLOK,I RETURN * * * * * JSB ULOKP * * * ULOKP NOP UNLOCK RN, POST FILE DCB LDA RNSTT MAKE SURE RN IS NOT CPA D1 ALREADY UNLOCKED. JMP ULOK1 IF SO - DON'T TRY IT. JSB POST POST FILE BUFFER DEF *+2 DEF G0DCB JSB RNRQ UNLOCK RN DEF *+4 DEF RNULK DEF RNWD DEF RNSTT ULOK1 ISZ ULOKP JMP ULOKP,I RETURN * * * * LDA NUMBER * JSB DEC4C * DEF BUFFER * * * DEC4C NOP 4 CHAR DEC ASCII CONVERT LDB DEC4C,I GET BUFFER ADDR STB ADDR TO STORE RESULT ISZ DEC4C CLB DIV D100 STA OS<TAT SAVE 2 HI DIGITS STB CNTR SAVE 2 LOW DIGITS JSB KCVT CONVERT TWO HI DIGITS DEF *+2 DEF OSTAT STA ADDR,I ISZ ADDR JSB KCVT CONVERT TWO LOW DIGITS DEF *+2 DEF CNTR STA ADDR,I JMP DEC4C,I RETURN * * B20K OCT 20000 B377 OCT 377 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D6 DEC 6 D9 DEC 9 D13 DEC 13 D14 DEC 14 D15 DEC 15 D16 DEC 16 D23 DEC 23 D55 DEC 55 D56 DEC 56 D100 DEC 100 MD1 DEC -1 MD3 DEC -3 MD18 DEC -18 * RNSTT DEC 1 ADDR NOP CNTR NOP SPLU NOP SPCNT NOP SPNM NOP SPREC NOP SPOFS NOP RNWD NOP TEMP NOP OSTAT NOP RNLOK OCT 1 RNULK OCT 4 "A" OCT 101 "AH" ASC 1,AH "D" OCT 104 "H" OCT 110 "R" OCT 122 "W" OCT 127 SPBUF BSS 16 SMP ASC 3,SMP JOB ASC 3,JOB SPCON ASC 3,SPLCON SPSH2 DEC 15 ASC 15, LU NAME PRIORITY JOB# STATUS SPSTM DEC 12 ASC 12, LU NAMESP PPPP JJ AA NOSPM DEC 6 ASC 6, NO SPOOLS DOWN DEC 5 ASC 5, SHUT DOWN SPACE DEC 1 DBLNK ASC 1, * BSS 0 SIZE END ASMB,R,L,C G1CSD SHUT DOWN/START UP HED G1CDS * NAME: G1CSD,G1CSU * SOURCE: 92002-18001 * RELOC: 92002-16001 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM G1CSD,8 92002-16001 760622 * ENT G1CSD,G1CSU * EXT G0SDN,G0JDN,.ENTR EXT G0DCB,G0BUF EXT G0W15 EXT G1OPN,READF,WRITF,POST,RNRQ EXT EXEC * A EQU 0 B EQU 1 SUP * PBUF3 NOP PLEN3 NOP IERR3 NOP *  G1CSD NOP JSB .ENTR FETCH PARAMETERS DEF PBUF3 LDB PBUF3 INCRE TO PARAM 2 ADB D4 SINCE PARAM 1 IS "SD" LDA B,I INB STB PBUF3 CLB SZA,RSS IF NO PARAM 2 JMP BOTH THEN SHUT DOWN SPOOL AND JOBS CPA D2 JMP SDASC SDBPR LDA D56 BAD PARAMETER JMP EXIT3 * BOTH STA PBUF3,I SET PARAM 2 TO 0 JMP SDSP IF NOT SPECIFIED * SDASC LDA PBUF3,I GET PARAM 2 CPA "S" SHUT DOWN SPOOLS? JMP SDSP YES CPA "B" SHUT DOWN BATCH JOBS? JMP SDBA YES JMP SDBPR ELSE BAD PARAM * SDSP JSB OPLOK TO SHUT DOWN SPOOLS DEF SPCON OPEN SPLCON AND LOCK RN JMP EXIT3 JSB READF THEN READ REC 3 DEF *+7 DEF G0DCB DEF IERR3,I DEF G0BUF DEF D16 DEF TEMP DEF D3 SSA JMP EXIT3 RETURN IF ERRORS * LDA "D" SET "D" INTO 1ST WORD STA G0BUF OF REC 3 FOR SHUT DOWN STA G0SDN SET FLAG FOR TERM JSB WRITF TO LET SMP KNOW. DEF *+6 WRITE REC BACK TO SPLCON FILE DEF G0DCB DEF IERR3,I DEF G0BUF DEF D16 DEF D3 SSA JMP EXIT3 * JSB ULOKP NOW UNLOCK RN AND POST FILE NOP JSB EXEC CALL SMP TO DO ACTUAL DEF *+4 SHUTDOWN PROCEDURE DEF D23 DEF SMP DEF D16 * LDA PBUF3,I SZA SHUTDOWN BOTH? JMP SDDN NO, DONE. * SDBA JSB OPLOK OPEN JOBFIL AND LOCK RN DEF JOBFI JMP EXIT3 JSB READF READ REC # 17 DEF *+7 DEF G0DCB DEF IERR3,I DEF G0BUF DEF D16 DEF TEMP DEF D17 SSA JMP EXIT3 LDA "D" SET "D" INTO 15TH WORD STA G0W15 AS FLAG FOR BM STA G0JDN SET FLAG FOR TERM JSB WRMITF WRITE THE RECORD BACK DEF *+6 DEF G0DCB DEF IERR3,I DEF G0BUF DEF D16 DEF D17 SSA SDDN CLA SHUT DOWN DONE * EXIT3 STA IERR3,I JSB ULOKP NOW UNLOCK RN, POST FILE NOP LDA IERR3,I JMP G1CSD,I RETURN * * HED G1CSU START UP SPOOL AND/OR BATCH SYSTEM PBUF4 NOP PLEN4 NOP IERR4 NOP * G1CSU NOP JSB .ENTR FETCH PARAMETERS DEF PBUF4 JSB EXEC TELL JOB TO CLEAN UP DEF *+4 IN ANY CASE DEF D9 IF BUSY DON'T WAIT DEF JOB DEF MD1 -1 CLEAN UP ONLY LDB PBUF4 INCRE TO PARAM 2 ADB D4 SINCE PARAM 1 IS "SU" LDA B,I INB STB PBUF4 CLB SZA,RSS IF NO PARAM 2 JMP BOTHU THEN START UP SPOOL AND JOBS CPA D2 JMP SUASC * SUBPR LDA D56 JMP EXIT4 * BOTHU STA PBUF4,I SET PARAM 2 TO 0 JMP SUSP IF NOT SPECIFIED * SUASC LDA PBUF4,I GET PARAM 2 CPA "S" START UP SPOOLS? JMP SUSP YES CPA "B" START UP BATCH JOBS? JMP SUBA YES JMP SUBPR ELSE BAD PARAM * SUSP JSB OPLOK TO START UP SPOOLS DEF SPCON OPEN SPLCON AND LOCK RN JMP EXIT4 JSB READF THEN READ REC 3 DEF *+7 DEF G0DCB DEF IERR4,I DEF G0BUF DEF D16 DEF TEMP DEF D3 SSA JMP EXIT4 RETURN IF ERRORS * CLA CLEAR 1ST WORD STA G0BUF OF REC 3 FOR START UP STA G0SDN SET GLOBAL FLAG TOO JSB WRITF TO LET SMP KNOW. DEF *+6 WRITE REC BACK TO SPLCON FILE DEF G0DCB DEF IERR4,I DEF G0BUF DEF D16 DEF D3 SSA JMP EXIT4 * JSB ULOKP NOW UNLOCK RN AND POST FILE NOP JSB EXEC CALL SMP TO DO ACTUAL DEF *+4 START UP PROCED URE DEF D23 DEF SMP DEF D17 * LDA PBUF4,I SZA START UP BOTH? JMP SUDN NO, DONE. * SUBA JSB OPLOK OPEN JOBFIL AND LOCK RN DEF JOBFI JMP EXIT4 JSB READF READ REC # 17 DEF *+7 DEF G0DCB DEF IERR4,I DEF G0BUF DEF D16 DEF TEMP DEF D17 SSA JMP EXIT4 CLA CLEAR 15TH WORD STA G0W15 AS FLAG FOR BM STA G0JDN SET LOCAL GLOBAL TOO JSB WRITF WRITE RECORD BACK DEF *+6 DEF G0DCB DEF IERR4,I DEF G0BUF DEF D16 DEF D17 SSA JMP EXIT4 EXIT IF ERROR JSB EXEC SCHEDULE FMGR DEF *+4 TO UPDATE JOBS DEF D10 DEF FMGR DEF MD1 -1 MEANS JOB UPDATE ONLY * SUDN CLA START UP DONE EXIT4 STA IERR4,I JSB ULOKP NOW UNLOCK RN, POST FILE NOP LDA IERR4,I JMP G1CSU,I RETURN * * HED COMMON ROUTINES AND CONSTANTS TO DS,CS,SD,SU * * JSB OPLOK * DEF FILENAME * * * OPLOK NOP OPEN FILE AND LOCK RN LDA OPLOK,I GET ADDR OF FILE NAME STA FNAME ISZ OPLOK JSB G1OPN OPEN FILE DEF *+4 USING GLOBAL DCB DEF G0DCB DEF ULOKP FNAME DEF * SSA ANY ERRORS? JMP OPLKE YES, BUG OUT * JSB READF READ FIRST RECORD DEF *+4 FROM FILE DEF G0DCB INTO GLOBAL BUFFER DEF ULOKP DEF G0BUF SSA ANY ERRORS? JMP OPLKE YES LDA G0BUF GET FIRST WORD OF RECORD STA RNWD WHICH SHOULD BE RN LOCK WORD JSB POST MAKE SURE READS DEF *+2 ARE CLEAN. DEF G0DCB * JSB RNRQ LOCAHFBL LOCK RN TO US DEF *+4 DEF RNLOK DEF RNWD DEF RNSTT * ISZ OPLOK INCRE ADDR FOR GOOD RETURN OPLKE JMP OPLOK,I RETURN * * * * * JSB ULOKP * * * ULOKP NOP UNLOCK RN, POST FILE DCB LDA RNSTT MAKE SURE RN IS NOT CPA D1 ALREADY UNLOCKED. JMP ULOK1 IF SO - DON'T TRY IT. JSB POST POST FILE BUFFER DEF *+2 DEF G0DCB JSB RNRQ UNLOCK RN DEF *+4 DEF RNULK DEF RNWD DEF RNSTT ULOK1 ISZ ULOKP JMP ULOKP,I RETURN * * D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D9 DEC 9 D16 DEC 16 D17 DEC 17 D23 DEC 23 D10 DEC 10 D56 DEC 56 MD1 DEC -1 * RNSTT DEC 1 RNWD NOP TEMP NOP RNLOK OCT 1 RNULK OCT 4 "B" ASC 1,B "B " "D" OCT 104 "S" ASC 1,S "S " SMP ASC 3,SMP FMGR ASC 3,FMGR JOBFI ASC 3,JOBFIL JOB ASC 3,JOB SPCON ASC 3,SPLCON * BSS 0 SIZE END [HASMB,R,L,C HED G1C?? - GASP ERROR EXPANDER MODULE * NAME: G1C?? * SOURCE: 92002-18001 * RELOC: 92002-16001 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM G1C??,8 92002-16001 741027 ENT G1CQQ EXT .DFER,G1OMS,G0BUF,G0ERH,G0TTY,.ENTR EXT EXEC SUP N NOP LST NOP SPC 1 G1CQQ NOP ENTRY POINT JSB .ENTR GEN PRAMS DEF LST SPC 1 LDA LST ADVANCE PRAM TO ADA .4 THE FIRST PRAM STA LST AND RESTORE LDB G0ERH GET ERROR PRAM ASR 16 EXTEND THE SIGN BIT DIV .1000 DIVID LDA B ERROR CODE TO A LDB LST,I GET FLAG ISZ LST STEP TO SZB IF NOT SUPPLIED USE .E.R. LDA LST,I ELSE USE FIRST PRAM CPA .99 IF PRAM=99 JMP ALL THEN PRINT ALL CODES ON LIST STA N SAVE CODE ADA MOSNG TEST FOR SSA DEFINED CODE JMP UDF TOO NEGATIVE LDA N ADA NHLP1 SSA JMP PRINT OK - PRINT IT ADA NHLG SSA JMP UDF IN MID CODE GAP - UNDEFINED ADA NHH SSA,RSS JMP UDF TO HIGH - UNDEFINED LDA N ADJUST N ADA NHLG FOR HIGH GROUP STA N TABLE PRINT LDA N GET N ADA TBAD ADD TABLE ADDRESS PR LDB A,I GET MESSAGE ADDRESS STB MSAD SET AS POINTER LDB B,I MESSAGE STB A LENGTH CMA,INA SET FOR STA N MOVE ADB .2 AND STB LNMES OUTPUT JSB .DFER MOVE THE FIRST THREE WORDS DEF G0BUF TO THE BUFFER DEF LNMES INCLUDES THE LENGTH AND NAME LDA BUF.D HEAD RSS LDA A,I OF RAL,CLE,SLA,ERA MESSAGE JMP *-2 GET ADA .3 BUFFER ADDRESS AND MOVE ISZ MSAD LDB MSAD,I MOVE STB A,I MESSAGE INA TO ISZ N BUFFER JMP MOVE JSB G1OMS PRINT DEF FMRTN ON BUF.D DEF G0BUF DEVICE FMRTN CLA STA G0ERH JMP G1CQQ,I ELSE, RETURN SPC 3 UDF LDA DFUDF PICK UN DEFINED JMP PR AND SEND IT. SPC 3 ALL LDA G0TTY SAVE THE TTYLU STA TTY LOCALLY LDA LST IF ADA .4 A LU SUPPLIED LDA A,I THEN USE SZA IT STA G0TTY LDA G0TTY GET THE LU AND B77 KEEP ONLY THE LU IOR B1100 ADD THE PAGE BITS STA LUX SET FOR EJECT LDA PTRS SET THE STA CPTRS POINTER FOR THE MESSAGES WRIT JSB G1OMS WRITE DEF WRRTN THE CPTRS NOP THE WRRTN ISZ CPTRS LDA CPTRS ELIMINATE THE RAL,CLE,ERA NOT DEFINED LDA A,I MESSAGES CPA NDEF UNDEFINED MESSAGE? JMP WRRTN YES SKIP IT * LDA CPTRS,I IF LENGTH NEGATIVE SSA,RSS SKIP JMP WRIT ELSE GO WRITE NEXT MESSAGE SPC 3 LDA TTY RESTORE THE TTY LU STA G0TTY JSB EXEC SEND THE TOP OF FORM DEF EX DEF .3 DEF LUX DEF N2 EX JMP G1CQQ,I GO EXIT SPC 2 .1000 DEC 1000 .99 DEC 99 N2 DEC -2 .2 DEC 2 .3 DEC 3 .4 DEC 4 B77 OCT 77 B1100 OCT 1100 TTY NOP LUX NOP SPC 1 MSAD NOP DFUDF DEF *+1 NDEF DEF UDN-1 LNMES NOP GASP ASC P2,GASP TBAD DEF MS00 PTRS DEF LSHED,I ABS LUDN UDN ASC 6, NOT DEFINED LUDN EQU *-UDN LSHED DEF HEAD-1 THIS LIST DEF BLNK-1 IS IN DEF HD2-1 THE DEF BLNK-1 ORDER DEF ERM14-1 OF DEF ERM13-1 PRINTING DEF ERM12-1 AND DEF UDN-1 ALSO DEF UDN-1 NUMERICAL DEF UDN-1 ORDER DEF ERM8-1 DEF ERM7-1 DEF ERM6-1 DEF UDN-1 DEF ERM4-1 DEF UDN-1 DEF ERM2-1 DEF ERM1-1 MS00 DEF ER0-1 DEF ER1-1 DEF ER2-1 DEF ER3-1 DEF ER4-1 DEF ER5-1 DEF ER6-1 HLOW EQU *-MS00-1 MOST POSITIVE OF LOW GROUP DEF ER55-1 DEF ER56-1 NHIG EQU *-MS00-HLOW-2 NUMBER OF HIGH ERRORS DEF N2 * A EQU 0 B EQU 1 MSTN EQU 14 MOST NEGATIVE ERROR CODE LHIG EQU 55 LOWEST OF HIGH GROUP HHIG EQU LHIG+NHIG HIGHEST OF HIGH GROUP SPC 1 MOSNG ABS MSTN MOST NEG. CODE NHLP1 ABS -HLOW-1 NEG. OF LOW HIGH BOUND NHLG ABS HLOW+1-LHIG NEG. OF LOW HIGH GAP NHH ABS LHIG-HHIG-1 NEG. OF HIGH SIZE. * * ERROR TABLE -CODES ARE ENTERED IN ANY ORDER. * ABS L0 ER0 ASC 6, 0 NO ERROR L0 EQU *-ER0 ABS LM1 ERM1 ASC 7, -1 DISC ERROR LM1 EQU *-ERM1 ABS LM2 ERM2 ASC 12, -2 DUPLICATE FILE NAME LM2 EQU *-ERM2 ABS LM4 ERM4 ASC 19, -4 MORE THAN 32767 RECORDS IN A TYPE ASC 4, 2 FILE LM4 EQU *-ERM4 ABS LM6 ERM6 ASC 18, -6 CR OR FILE NOT FOUND OR NO ROOM LM6 EQU *-ERM6 ABS LM7 ERM7 ASC 13, -7 BAD FILE SECURITY CODE LM7 EQU *-ERM7 ABS LM8 ERM8 ASC 15, -8 FILE OPEN OR LOCK REJECTED LM8 EQU *-ERM8 ABS LM12 ERM12 ASC 11, -12 EOF OR SOF ERROR LM12 EQU *-ERM12 ABS LM13 ERM13 ASC 8, -13 DISC LOCKED LM13 EQU *-ERM13 ABS LM14 ERM14 ASC 10, -14 DIRECTORY FULL LM14 EQU *-ERM14 SPC 1 ABS L1 ER1 ASC 7, 1 DISC ERROR L1 EQU *-ER1 ABS L2 ER2 ASC 11, 2 NUMBER OUT OF RANGE L2 EQU *-ER2 ABS L3 ER3 ASC 9, 3 BAD JOB NUMBER! L3 EQU *-ER3 ABS L4 ER4 ASC 9, 4 ILLEGAL STATUS L4 EQU *-ER4 ABS L5 ER5 ASC 9, 5 ILLEGAL COMMAND L5 EQU *-ER5 ABS L6 ER6 ASC 6, 6 NOT FOUND L6 EQU *-ER6 SPC 2 ABS L55 ER55 ASC 11, 55 MISSING PARAMETER L55 EQU *-ER55 ABS L56 ER56 ASC 9, 56 BAD PARAMETER L56 EQU *-ER56 SPC 2 ABS LHEAD HEAD ASC 9, GASP ERROR CODES LHEAD EQU *-HEAD ABS LHD2 HD2 ASC 9, ERROR MEANING LHD2 EQU *-HD2 ABS LBLNK BLNK ASC 1, LBLNK EQU *-BLNK ORG * PROGRAM LENGTH END ASMB,R,L HED ST.LU * NAME: ST.LU * SOURCE: 92002-18001 * RELOC: 92001-16001 * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM ST.LU,8 92002-16001 760526 ENT ST.LU * EXT N.SEQ,$LIBR,$LIBX EXT $LUAV,.DRCT,EXEC,IS43,CS43 * * THE FOLLOWING ROUTINE INITIALIZES THE SPOOL * AVAILABILITY TABLE, $LUAV, AND SETS CS43 # 0 * AS A DONE FLAG. * ST.LU NOP JSB .DRCT DEF $LUAV GET ADDRESS OF $LUAV. STA ADDR INA STA PTR2 CLA SET COUNTERS AND POINTERS. STA CNTR2 LDA EQTA GET ADDRESS OF WORD 2 OF 1ST EQT. INA STA PTR1 LDA EQTNO SET COUNTER FOR # OF EQT'S CMA,INA TO SEARCH. STA CNTR1 CLB,INB STB NEQT JSB .DRCT GET DIRECT ADDRESS OF DEF IS43 IS43 ENTRY POI NT TO SMD. STA SMDAD JSB $LIBR NOP LOOP1 LDA CNTR2 CPA ADDR,I JMP DONE LDA PTR1,I PICK UP EQT2 - DRIVER CPA SMDAD ENTRY POINT. MATCH IS43? JMP SEEK YES. INCR1 ISZ NEQT KEEP LOOKING AT EQT'S. LDA PTR1 ADA D15 INCREMENT TO NEXT EQT. STA PTR1 ISZ CNTR1 JMP LOOP1 DONE LDA CNTR2 STA N.SEQ DONE - SAVE # OF SPOOL EQT'S. CMA,INA,SZA DON'T SAVE IF THERE ARE NONE STA ADDR,I CCA SET CS43 TO STA CS43 -1 TO SHOW DONE JSB $LIBX DEF ST.LU * SEEK LDA DRT FOUND A SPOOL EQT. STA PTR3 MUST SEARCH DRT TO LDA LUMAX FIND THE CORRESPONDING CMA,INA LU #. STA CNTR3 CLB,INB LOOP2 LDA PTR3,I PICK UP DRT ENTRY. AND B77 GET EQT #. CPA NEQT MATCH THIS ONE? JMP ENTER YES. INB NO - KEEP LOOKING. ISZ PTR3 ISZ CNTR3 JMP LOOP2 JMP INCR1 ENTER STB PTR2,I MAKE AN ENTRY IN $LUAV. ISZ PTR2 CLA STA PTR2,I ISZ PTR2 ISZ CNTR2 JMP INCR1 * SMDAD BSS 1 B77 OCT 77 D15 DEC 15 NEQT BSS 1 CNTR1 BSS 1 CNTR2 BSS 1 CNTR3 BSS 1 PTR1 BSS 1 PTR2 BSS 1 PTR3 BSS 1 ADDR BSS 1 EQTA EQU 1650B EQTNO EQU 1651B DRT EQU 1652B LUMAX EQU 1653B * END ASMB,R,L HED G1ROT * NAME: G1ROT * SOURCE: 92002-18001 * RELOC: 92002-16001 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM G1ROT,8 92002-16001 760615 ) ENT G1ROT ENT G1SUB ENT G1SEG * * EXT .ENTR EXT EXEC EXT G1CEX * PBUFR NOP PLEN NOP IERR NOP * G1ROT NOP JSB .ENTR DEF PBUFR LDA G1SUB IF TABLE ADDRESS IS ZERO SZA,RSS THEN STA CSEG ZERO THE SEGMENT PRESENT FLAG LDB PBUFR INB B POINTS TO COMMAND ENTERED LDB B,I GET THE NUMONIC STB G1KLG SAVE IT * LDB BUFAD GET COMMAND TABLE ADDRESS CLA SET SEGMENT FLAG TO MAIN SEGST STA SEGID CLA SET SEGMENT OFFSET TO STA SEGOF ZERO NXTCM INB STEP TABLE ADDRESS LDA B,I GET ENTRY SSA NEGATIVE MEANS NEW SEGMENT JMP SEGST GO SET IT * SZA,RSS ZERO IS END OF LIST JMP G1RT1 ERROR EXIT * CPA G1KLG THIS IT? JMP ITSIT YES GO PROCESS * ISZ SEGOF STEP THE OFFSET JMP NXTCM TRY THE NEXT ONE * ITSIT LDA SEGID GET THE SEGID LDB RTAD SET ADDRESS IN CASE MAIN CMA,INA,SZA,RSS IF ZERO THEN ITS IN THE MAIN JMP MAIN * ADA "0" MAKE IT ASCII ALF,ALF AND ROTATE TO HIGH CPA CSEG CURRENT SEGMENT? JMP G1SEG YES GO DO IT * STA CSEG SET NEW SEG NAME JSB EXEC CALL SYSTEM TO LOAD THE SEGMENT DEF G1SEG DEF D8 DEF GASP * G1SEG LDB G1SUB GET RETURNED ADDRESS MAIN ADB SEGOF ADD THE OFFSET LDB B,I GET ENTRY POINT OF SUB. JSB B,I DEF *+4 DEF PBUFR,I DEF PLEN,I DEF IERR,I JMP G1ROT,I * G1RT1 LDA D5 ILLEGAL COMMAND STA IERR,I SET ERROR CODE JMP G1ROT,I AND RETURN * GASP ASC 2,GASP CSEG NOP CURRENT SEGMENT G1SUB NOP CURRENT SEGMENTS ENTRY POINT TABLE ADDRESS D5 DEC 5 D8 DEC 8 SEGID NOP SEGOF NOP * BUFAD DEF * ASC 1,EX w OCT -1 FOLLOWING ARE IN SEGMENT 1 ASC 1,DJ ASC 1,CJ ASC 1,DS ASC 1,CS ASC 1,KS ASC 1,RS ASC 1,AB OCT -2 FOLLOWING ARE IN SEGMENT 2 ASC 1,DA ASC 1,?? "0" OCT 60 SPECIAL CODE TO GET TO IN ROUTINE ASC 1,SD ASC 1,SU NOP END OF TABLE RTAD DEF *+1 DEF G1CEX MAIN TRANSFER TABLE * ENT G1KLG * EXT $LUAV,.DRCT,G0WD1 * * THIS ROUTINE COUNTS THE NUMBER OF ACTIVE LU'S FOR THE * SPOLCON RECORD NUMBER PASSED BY SCANNING THE LU AVAILABLITY * TABLE ($LUAV) AND RETURNS THIS NUMBER IN THE A REGISTER * * CALLING SEQUENCE: * * JSB G1KLG * DEF RNUM NUMBER OF THE RECORD TO BE FOUND * --- RETURN A SET AS ABOVE * G1KLG NOP LDA $LUAV GET THE COUNT OF ENTRIES STA COUNT JSB .DRCT GET A DIRECT ADDRESS DEF $LUAV OF THE TABLE STA PTR AND SAVE IT CLA CLEAR THE RETURN COUNT STA RTN LDA G1KLG,I GET THE RECORD NUMBER LDA A,I TO LOCAL STA RNUM STORAGE ISZ G1KLG STEP TO THE RETURN ADDRESS * NEXT ISZ PTR STEP TO THE ENTRY LDA PTR,I GET THE CURRENT LU ISZ PTR STEP TO THE RECORD NUMBER SSA,RSS IF NOT AN ACTIVE ENTRY JMP CONT JUST CONTINUE * LDB PTR,I GET THE ENTRY'S RECORD NUMBER CPB RNUM THIS IT? ISZ RTN YES STEP THE COUNT * CONT ISZ COUNT END OF THE LIST?? JMP NEXT NO TRY NEXT ONE * LDA RTN YES SEND BACK THE COUNT JMP G1KLG,I RETURN SPC 2 PTR NOP RTN NOP RNUM NOP COUNT NOP A EQU 0 B EQU 1 END ASMB,R,L,C HED G1STM * NAME: G1STM * SOURCE: 92002-18001 * RELOC: 92002-16001 * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETTZ-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM G1STM,8 92002-16001 740807 ENT G1STM * EXT G1OMS,CNUMD,KCVT,.DFER EXT G0WD1,G0WD2,G0WD3,G0WD7,G0W11,G0BUF * G1STM NOP JSB CNUMD CONVERT DEF *+3 DEF G0WD1 THE JOB NUMBER DSTAT DEF STAT TO THE STATUS BUFFER JSB .DFER MOVE NAME TO BUFFER. DEF NAME DEF G0WD7 LDA G0WD3 AND MASKL LDB DIR SZA LDB SRC STB STUS JSB CNUMD CONVERT THE DEF *+3 DEF G0BUF PRIORITY DEF STUS+1 TO THE BUFFER LDA G0WD2 AND B377 KEEP LOW PART CPA G0WD2 IF SAME IOR HBLK PAD WITH A BLANK IOR G0WD2 AND SET STA STUS+4 STATUS IN BUFFER CLA,INA STA FNUM LDA M8 SET MAX REPORT LIMIT FOR STA LIM NUMBER OF SPOOL FILES LDA W11AD RAL,CLE,SLA,ERA REMOVE INDIRECT BIT LDA A,I GET DIRECT ADDRESS STA ADDR1 LDA M5 STA CNTR LDA SPAD STA ADDR LOOP LDA M16 STA CNTR1 LDA ADDR1,I STA SAVE ILOP SLA JMP GOTON BACK RAR STA SAVE ISZ FNUM ISZ CNTR1 JMP ILOP * ISZ ADDR1 ISZ CNTR JMP LOOP * OUT LDA DSTAT CALCULATE THE RECORD SIZE CMA ADA ADDR STA STAT JSB G1OMS DEF *+2 DEF STAT JMP G1STM,I GOTON JSB KCVT CONVERT DEF *+2 DEF FNUM THE FILE NUMBER STA ADDR,I ISZ ADDR LDB BLANK STB ADDR,I ISZ ADDR LDA SAVE ISZ LIM MORE THAN MAX NUM OF FILES? JMP BACK NO CFONTINUE * JMP OUT YES JUST SEND WHAT WE HAVE * SUP STAT ASC 6 NAME ASC 5 STUS ASC 8 NUMS BSS 16 * DIR ASC 1, D SRC ASC 1, S LIM NOP FNUM BSS 1 ADDR1 BSS 1 CNTR BSS 1 ADDR BSS 1 SPAD DEF NUMS W11AD DEF G0W11 CNTR1 BSS 1 B377 OCT 377 MASKL OCT 177400 M8 DEC -8 M5 DEC -5 M16 DEC -16 BLANK OCT 20040 HBLK OCT 20000 SAVE BSS 1 A EQU 0 B EQU 1 END ASMB,R,L HED G0QIP * NAME: G0QIP * SOURCE: 92002-18001 * RELOC: 92002-16001 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM G0QIP,8 92002-16001 760621 ENT G0NJB,G0NLO,G0SZF,G0NSP ENT G0KIL,G0END,G0JHD,G0MXP,G0SLU,G0INT * SUP G0NJB DEC -35 ASC 18,MAX NUMBER OF JOBS,JOB FILE DISC? _ GUARD G0NLO DEC -33 ASC 17,NUMBER,LOCATION OF SPOOL FILES? _ GUARD G0MXP DEC -48 ASC 20,MAXIMUM NUMBER ACTIVE AND PENDING SPOOL ASC 4,FILES? _ GUARD G0NSP DEC -34 ASC 17,NUMBER OF SPOOL FILES (5 TO 80)? _ GUARD G0SZF DEC -34 ASC 17,SIZE OF SPOOL FILES (IN BLOCKS)? _GUARD G0SLU DEC -31 ASC 16,ENTER OUTSPOOL DESTINATION LU _ GUARD G0JHD DEC 19 ASC 19,## NAME STATUS SPOOLS G0END DEC 4 ASC 4,END GASP G0KIL DEC -39 ASC 20,MAY ABORT PROGRAM OR JOB, OK TO KILL? _ GUARD G0INT DEC -40 ASC 20,/GASP: IRRECOVERABLE INITIALIZE ERROR ! * END <:66< C3w 92002-18002 1805 S 0222 SMP (SPOOL MONITOR) SOURCE             H0102 ASMB,L,C,N ASSEMBLY STATEMENT FOR RTE II * *ASMB,L,C,Z ASSEMBLY STATEMENT FOR RTE III HED SMP ROUTINE * NAME: SMP * SOURCE: 92002-18002 (RTE II) 92060-18007 (RTE III) * RELOC: 92002-16002 (RTE II) 92060-16007 (RTE III) * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * IFN NAM SMP,2,30 92002-16002 REV. 1740 770908 XIF * IFZ NAM SMP,18,30 92060-16010 REV. 1740 770908 XIF * * * * SSTAT STATES * * 0 NORMAL * 1 SPOUT IS WORKING ON A MENU * * EXT .DFER THREE WORD MOVE ROUTINE EXT REIO I-O ROUTINE EXT .MVW MOVE WORDS ROUTINE EXT RMPAR RETRIEVE PARAMETERS EXT SP.CL SPOUT CLASS ID EXT $LUAV SPOOL LU TABLE EXT IS43 INITIATION ENTRY OF SPOOL DRIVER EXT $LUSW LU TRANSFORM TABLE EXT .DRCT PICK UP DIRECT ADDRESS EXT $LIBR GO PRIVILEGED EXT $LIBX SUSPEND PRIVILEGED OPERATION EXT READF FMGR READ EXT WRITF FMGR WRITE EXT EXEC SYSTEM CALLS EXT PRTN PASS PARAMETERS TO CALLER EXT RNRQ RESOURCE NUMBER CONTROL EXT POST POST FILE BUFFERS A EQU 0 B EQU 1 XEQT EQU 1717B SUP HED SMP CALL PRAMS * PRAMS P1 THRU P5 DESCRIBE THE FUNCTION TO PREFORM * AS FOLLOWS: * * P1 =0 SET UP CALL REQUIRES A 16 WORD CLASS BUFFER * P2 =CLASS NUMBER * P3 =BATCH CHECK FLAG (ID ADDRESS OF PRIV. PROGRAM OR ZERO) * * P1 =1 CHANGE PURGE TO SAVE ON AN EXISTING FILE * P2 =LU ASSIGNED LU OR IF BATCH THE SWITCHED LU MAY BE USED * * P1 =2 CHANGE SAVE TO PURGE * P2 =LU ASSIGNED LU OR IF BATCH THE SWITCHED LU * * * P1 =3 PASS THE FILE TO OUT SPOOL * P2 =LU ASSIGNED OR SWITCH IF IN BATCH * * * P1 =4 CLOSE AND PASS THE FILE * P2 =LU ASSIGNED OR SWITCH IF IN BATCH * * * P1 =5 CHANGE LU AND OR PRIORITY OF OUT SPOOL * P2 =LU ASSIGNED OR SWITCHED IF IN BATCH * P3 =NEW OUT LU * P4 =NEW PRIORITY * * * P1 =6 SET BUFFERED FLAG * P2 =LU ASSIGNED OR SWITCHED * * * P1 =7 CLEAR BUFFERRED FLAG * P2 =LU ASSIGNED OR SWITCHED * * * P1 =8 GET CURRENT POSITION OF FILE * P2 =LU ASSIGNED OR SWITCHED * * * P1 =9 CHANGE POSITION OF FILE * P2 =LU ASSIGNED OR SWITCHED * P3 =POSITION PRAMETER 1 * P4 =POSITION PRAMETER 2 * P5 =POSITION PRAMETER 3 * * * P1 =10 SPOUT CAN NOT OUT SPOOL BECAUSE OF FAILURE * OF LULOCK REQUEST * * * * P1 =11 SPOUT CAN BEGIN OUT SPOOL * P2 =LU SELECTED FOR OUT PUT * * * P1 =12 DEQUEUE OUT SPOOL (SPOUT IS DONE) * P1 =12 DEQUEUE OUT SPOOL (SPOUT IS DONE) * P2 =LU ASSIGNED LU OF FILE * P3 = #0 IF A BAD EOF FOUND ELSE 0 * * * P1 =13 KILL SPOOL * P2 =SPLCON RECORD NUMBER OF FILE TO KILL * P3 =LU ASSIGNED FROM WORD 1 OF RECORD * P4 =0 * P5 =CURRENT STATUS OF FILE * * * P1 =14 HOLD A OUTSPOOL FILE * P2 =SPLCON RECORD NUMBER OF FILE * P3 =OUTSPOOL LU (CURRENT) * P4 =0 * P5 =CURRENT STATUS SPLCON RECORD WILL SHOW 'H' * * * P1 =15 RELEASE A HOLD * P2 =SPLCON RECORD NUMBER OF FILE * P3 =CURRENT OUT SPOOL LU * P4 =NEW LU OR 0 CAN CHANGE LU ON RELEASE * P5 =CURRENT STATUS OF FILE * * * P1 =16 SH UT DOWN OUTSPOOLING * * * P1 =17 START UP OUT SPOOLING * * * P1 =18 CALL FROM SPOUT A LU IS DOWN * P2 =LU CURRENT ASSIGNED LU SKP SKP DTAB DEF CPTS 1 CHANGE PURGE TO SAVE. DEF CSTP 2 CHANGE SAVE TO PURGE. DEF PASS 3 PASS NOW DEF CSAP 4 CLOSE SPOOL AND PASS DEF MPI 5 MODIFY PASS INFORMATION DEF SBF 6 SET BUFFER FLAG DEF CBF 7 CLEAR BUFFER FLAG DEF GCDP 8 GET CURRENT DISK POSITION DEF CSRP 9 CHANGE STARTING RECORD POSITION DEF LULOK 10 LU LOCK CONDITION IN SPOUT DEF SPSEL 11 SPOOL SELECTION BY SPOUT DEF DEQUX 12 DEQUEUE OUTSPOOL. DEF KILL 13 KILL SPOOL DEF HOLD 14 HOLD A SPOOL FILE DEF RELSE 15 RELEASE A HOLD. DEF SHUT 16 SHUT DOWN OUTSPOOLING. DEF STUP 17 START UP OUTSPOOLING. DEF DVCDN 18 I/O DEVICE DOWN SET HOLD * * JOBFL BSS 2 HOLDS FIRST 16 WORDS OF JOBFIL DCB OCT 2 BSS 3 DEC 16 OCT 100201 BSS 5 OCT 0,200,0 SPLFL BSS 2 HOLDS FIRST 16 WORDS OF SPLCON DCB OCT 2 BSS 3 DEC 16 OCT 100201 UP DATE WRITE OK 128 WORD DCB BSS 5 OCT 0,200,0 * DCB1 BSS 144 BUF21 BSS 16 HOLDS SPLCON #1 MOSTLY BUF22 BSS 16 HOLDS SPLCON #2 AND #3 MOSTLY BUF23 BSS 16 HOLDS CURRENT SPLCON FILE RECORD MOSTLY BUF24 BSS 16 HOLDS JOB RECORD #17 AND USED TO CHECK Q BLOCKS BUF25 BSS 62 HOLDS JOB RECORD FROM JOBFIL ALSO MENU MOSTLY LIMIT BSS 2 * * ALL BUFFERS ARE USED TO HOLD THE LU Q AT TIMES * * ORG DCB1 INITIALIZE CODE IS IN THE BUFFERS * * SMP JSB RMPAR DEF *+2 DEF PARM1 LDA XEQT GET MY ID ADDRESS STA JOBFL+9 SET THE OPEN FLAGS STA SPLFL+9 IN THE DCB SAVE AREAS CCE SET THE SIGN BIT> RAL,ERA AND STA IID,I AND SAVE FOR NOW AND LATER JSB EXEC CALL D.RTR TO LOOK UP JOB FILE DEF *+7 DEF D23 DEF D.RTR IID DEF ID DEF JOBNA FILE NAME (NON-EXCLUSIVE) DEF JOBNA+1 DEF JOBNA+2 LDA B,I IF ERROR SSA THEN JMP BAIL GO BAIL OUT * STA JOBFL+5 SET THE FILE SIZE INB STEP TO THE DIRECTORY ADDRESS WORDS LDA B,I AND SET THEM STA JOBFL INB LDA B,I IN STA JOBFL+1 IN THE DCB IMAGE INB NOW THE TRACK ADDRESS LDA B,I STA JOBFL+3 INB NOW THE LDA B,I SECTOR AND X377 STA JOBFL+4 XOR B,I ALF,ALF STA JOBFL+8 SET THE SEC/TRACK WORD JSB EXEC CALL D.RTR TO LOOK UP SPOL FILE DEF *+7 DEF D23 DEF D.RTR DEF ID DEF SPLNA FILE NAME (NON-EXCLUSIVE) DEF SPLNA+1 DEF SPLNA+2 LDA B,I IF ERROR SSA THEN JMP BAIL GO BAIL OUT * STA SPLFL+5 SET THE FILE SIZE INB STEP TO THE DIRECTORY ADDRESS WORDS LDA B,I AND SET THEM STA SPLFL INB LDA B,I IN STA SPLFL+1 IN THE DCB IMAGE INB NOW THE TRACK ADDRESS LDA B,I STA SPLFL+3 INB NOW THE LDA B,I SECTOR AND X377 STA SPLFL+4 XOR B,I ALF,ALF STA SPLFL+8 SET THE SEC/TRACK WORD JMP SMP0 GO CONTINUE THE SET UP * BAIL JSB FILER REPORT THE ERROR AND JMP RETN4 EXIT * X377 OCT 377 * TS EQU BUF21-* IF ERROR WE RAN OUT OF THE DCB * ORG BUF21 GET OUT OF THE DCB SO IT CAN BE USED * * SMP0 LDB DDCB1 LDA PTRJ SET UP TO ACCESS THE JOB FILE JSB .MVW DEF D16 NOP LDB X17 GET THE JOB FILE RN  LDA PTX21 JMP SMP00 BAIL OUT OF THIS BUFFER * ORG BUF22 SAFE GROUND * SMP00 JSB RDREC READ JOBFILE RECORD 17 JMP RETN4 IF ERROR GET OUT * LDA BUF21 GET THE RN STA DJRN,I SAVE IT JSB .DRCT GET IS43 ADDRESS FOR DEF IS43 FOR FUTURE EQT CHECKING. STA IS43A SAVE THE ADDRESS. JSB .DRCT GET ADDRESS OF DEF $LUAV $LUAV TABLE AND SAVE. STA LUAVA LDB DDCB1 SET UP TO ACCESS THE SPOOL CONTROL FILE LDA PTRS JSB .MVW DEF D16 NOP * LDA PTX21 GET FIRST SPLCON RECORD. CLB,INB TS1 EQU *-BUF21-16 IF ERROR THEN CODE WILL BE OVERLAYED JSB RDREC JMP RETN4 ERROR EXIT * LDA PTX23 LDB X3 JMP SMP01 GET TO HIGH GROUND * ORG BUF24 GET OUT OF THE BUFFER * SMP01 JSB RDREC READ SHUT DOWN WORD. JMP RETN4 EXIT IF ERROR * LDA BUF21 STA SRN SAVE SPLCON RESOURCE #. LDA BUF23 SAVE CURRENT SHUT DOWN CONDITION. STA SHUTX,I LDA BUF23+1 SAVE HOLD RN. STA WRN JSB .DRCT INITIALIZE THE MENU. DEF BUF21+6 POINTER TO LU AREA STA TEMX1 LDA MPTRX POINTER TO MENU STA TEMX2 CONTAINS LU-#FILES ON QUE LDA X9 SMP2 STA TEMX3 LDA TEMX2,I SZA,RSS MUST GO THROUGH ALL THE OUTSPOOL JMP SMP4 QUEUES PICKING UP THE NUMBER * LDB TEMX1,I OF OUTSPOOLS WAITING ON EACH STB TEMX2,I ONE. THIS WILL ENABLE A ISZ TEMX2 START-UP TO PICK THEM UP. SZB,RSS JMP SMP5 * LDA PTX23 LDB TEMX3 READ IN THE BEGINNING JSB RDREC OF A QUEUE BLOCK. JMP RETN4 * LDB BUF23+1 GET COUNT OF OUTSPOOLS. SMP5 STB TEMX2,I ISZ TEMX2 STEP MENU ADDRESS ISZ TEMX1 STEP LU LIST ADDRESS LDA TEMX3 STEP RECORD ADDRESS ADA X8 BY 8( JMP SMP2 AROUND WE GO * SMP4 LDA SP.CL CHECK IF CLASS HAS BEEN SZA ALLOCATED FOR SPOUT. IF SO, JMP SMP1 DON'T DO IT AGAIN. * JSB EXEC ALLOCATE CLASS FOR DEF *+5 SPOUT REQUESTS. DEF X19 DEF ZERO DEF ZERO DEF SP.CL LDA SP.CL GET THE CLASS AND IOR B20K SET THE DON'T RELEASE STA SP.CL BIT JMP SMP1 * X3 DEC 3 DDCB1 DEF DCB1 B20K OCT 20000 SHUTX DEF SHUTD X8 DEC 8 X19 DEC 19 X17 DEC 17 X9 DEC 9 JOBNA ASC 3,JOBFIL SPLNA ASC 3,SPLCON PTRJ DEF JOBFL PTRS DEF SPLFL PTX21 DEF BUF21 PTX23 DEF BUF23 MPTRX DEF .MENU TEMX1 NOP TEMX2 NOP TEMX3 NOP DJRN DEF JRN TS3 EQU LIMIT+2-* IF ERROR CODE GOES BEYOND BUFFER ORR * SMP1 JSB EXEC SCHEDULE SPOUT WITHOUT WAIT DEF *+3 AND IGNORE THE RESPONSE DEF D10 FROM EXEC. DEF SPOUT JSB POST MAKE SURE WE'RE SET DEF *+2 FOR NEW RECORDS TO BE DEF DCB1 READ CLEAN FROM DISK. JSB LOCK LOCK THE SPLCON RN. DEF SRN LDA PTR21 CLB,INB JSB RDREC NOP ********************************************** LDA PARM1 WHAT TYPE OF REQUEST? SZA,RSS JMP SETUP NEW SETUP. * CPA D18 IF DOWN DEVICE JMP USEOR GO GET THE RECORD * CPA D12 JMP USEOR DEQUEUE. * ADA M10 SSA,RSS JMP CJUMP GASP OR SPOUT REQUEST. * LDA XEQT MUST BE IN BATCH MODE TO ADA D20 USE THE SWITCH TABLE LDA A,I GET THE FLAG SSA,RSS IF NOT IN BATCH JMP USEOR USE THE GIVEN LU * JSB .DRCT MODIFICATION. DEF $LUSW MUST GO THROUGH $LUSW LDB A,I TABLE TO SEE IF WE CMB,INB MUST TRANSLATE THE GIVEN STB TEMP2 LU #. THE ACTUAL SPOOL INA LU IS THE ONE NEEDED STA TEMP1 TO LOOK UP IN THE LOOP6 LDA TEMP1,I SPOOL LU AVAILABILITY SSA TABLE. JMP LOOP7 * AND B77 INA CPA PARM2 JMP AFIND * LOOP7 ISZ TEMP1 ISZ TEMP2 JMP LOOP6 * JMP USEOR DIDN'T FIND. USE LU GIVEN. * AFIND LDA TEMP1,I ALF,ALF AND B77 INA STA PARM2 USEOR JSB FLU SEARCH LU AVAILABILITY JMP MENU CAN'T FIND. * * LDB TEMP1,I SAVE CORRESPONDING RECORD SZB,RSS (IF NOT ASSIGNED JMP MENU SKIP OUT) * STB RECNO # OF SPLCON RECORD. LDA PTR23 JSB RDREC READ THE APPROPRIATE RECORD. JMP RETRN READ ERROR. * CJUMP CCA IS THE REQUEST ADA PARM1 PARAMETER VALID? SSA JMP MENU ILLEGAL REQUEST PARAMETER. * STA B ADB M18 SSB,RSS JMP MENU ILLEGAL REQUEST PARAMETER. * ADA RTAB BRANCH TO APPROPRIATE JMP A,I SERVICE ROUTINE * FLU NOP ROUTINE TO FIND LU IN LUAV LDB LUAVA SEARCH LU AVAILABILITY LDA B,I SZA,RSS JMP FLU,I CAN'T FIND. * STA TEMP2 LOOP5 INB LDA B,I AND B77 INB CPA PARM2 DOES THE LU MATCH JMP FOUND THE ONE GIVEN? * ISZ TEMP2 JMP LOOP5 * JMP FLU,I NOT FOUND * FOUND ISZ FLU FOUND STEP ADDRESS STB TEMP1 SET ADDRESS FOR LATER JMP FLU,I AND EXIT * RTAB DEF DTAB,I REQUEST TABLE. LUAVA BSS 1 D20 DEC 20 M10 DEC -10 D18 DEC 18 M18 DEC -18 * CSTP CLE,RSS CHANGE SAVE TO PURGE. * CPTS CCE CHANGE PURGE TO SAVE. LDA BUF23+8 ERA,RAL STA BUF23+8 WRTRC LDA PTR23 WRITE OUT SPOOL CONTROL LDB RECNO RECORD. JSB WTREC JMP MENU * * PASS LDB BUF23+8 BATCH INPUT? RBL SSB JMP MENU  YES - ILLEGAL REQUEST. * LDA BUF23+15 IF NO LU SZA,RSS THEN JMP MENU IGNOR * LDB BUF23+8 WAS THE FILE BEING RBR,SLB HELD UNTIL CLOSE. JMP PCHK1 YES - WE ARE OK. * JMP MENU NO - FILE WILL HAVE BEEN PASSED. * * CSAP LDA PARM2 CALL SMD TO POST ANY XOR B3700 REMAINING BUFFERS TO THE STA TEMP2 SPOOL FILE AND-OR CLEAR LDA BUF23+15 IS FILE IS TO BE PASSED SZA,RSS NO SKIP JMP CPST THE LU CLEAR * CLA CLEAR THE REC. NUMBER IN CASE SPOUT LDB TEMP1 HAS CAUGHT UP JSB PUT WILL DO THE WHOLE THING AFTER THE POST CPST JSB EXEC IN-CORE INDICATORS. DEF *+5 DEF D1 DEF TEMP2 DEF BUF21 DEF D16 * LDA BUF23+15 IS FILE TO BE PASSED?? SZA WELL? JMP PCHK YES GO PASS IT * BATIN JSB PRGEX CLOSE THE FILE JMP MENU GO CHECK THE MENU * * PCHK LDB TEMP1 GET LUAV ADDRESS JSB FRELU FREE THE LU AND EQT LDA BUF23+8 WAS IT PASSED BEFORE? RAR,SLA IS HOLD BIT SET? RSS JMP MENU YES. * PCHK1 LDA BUF23+8 REMOVE HOLD BIT. IOR D2 SET JUST IN CASE XOR D2 NOW CLEAR IT STA BUF23+8 JMP QUEUE GO SET IT UP * "W" OCT 127 * MPI LDA PARM4 SAVE NEW PRIORITY IF SZA,RSS IF GIVEN. JMP MPI1 * SSA,RSS STA BUF23+9 MPI1 LDA BUF23+15 SAVE OLD LU. STA TEMP2 LDA PARM3 GET NEW LU STA PARM4 IF GIVEN. SZA SKIP IF NOT GIVEN STA BUF23+15 JSB SMENU CHECK VALIDITY. JMP MPIER NEW LU NOT GOOD. * LDB BUF23+10 IF SPOOL IS ACTIVE, CPB "A" WE CAN PERFORM JMP MPIER THIS OPERATION. * CLB STB TEMP1 LDA TEMP2 IF NO OLD LU, SZA,RSS WRITE RECORD AND JMP SS4 QUEUE IF NEEDED NOW. * LDB BUF23+8 REQUEUE UNLESS THE RBR,SLB FILE IS BEING HELD JMP SS4 FROM THE QUEUE * STA BUF23+15 LDA PTR23 WRITE THE CURRENT RECORD LDB RECNO TO THE SPLCON FILE JSB WRTRC CCE SET TO SHOW NOT ACTIVE JMP DEQ18 UNTIL IT IS CLOSED. * MPIER LDA TEMP2 STA BUF23+15 LDA M21 STA TEMP1 JMP WRTRC * SBF JSB FEQT SET BUFFERED FLAG IN EQT. ADB D3 LDA BUFRD JSB PUTM JMP MENU * PTR21 DEF BUF21 PTR23 DEF BUF23 D3 DEC 3 D12 DEC 12 BUFRD OCT 40000 * CBF JSB FEQT CLEAR BUFFERED FLAG IN EQT. ADB D3 LDA BUFRD SET BIT TO BE CLEARED CLE SET THE CLEAR FLAG JSB PUTM CLEAR THE BIT JMP MENU * SETEQ NOP SUB TO SET EQT ADDRESSES JSB FEQT GET CURRENT DISK POSITION. ADA D2 ADDRESS OF EQT18 (CURRENT TRACK) STA TEMP5 SAVE IT ADA D2 STEP TO EQT20 (EXTENSION NUMBER) STA TEMP2 AND SAVE IT INA NOW EQT21 (CURRENT SECTOR) STA TEMP1 SAVE IT ADA D3 EQT24 (FIRST TRACK OF EXTENT) STA TEMP3 SAVE IT INA EQT25 (FIRST SECTOR OF EXTENT) STA TEMP4 SAVE IT INA EQT26 (FILE SIZE) STA DFSIZ SAVE ADDRESS OF FILE SIZE ADA D4 EQT30 (# SECTORS/TRACK) STA D#PTR SAVE IT JMP SETEQ,I RETURN * GCDP JSB SETEQ SET THE EQT ADDRESSES LDA TEMP3,I GET THE BASE TRACK CMA,INA SUBTRACT FROM ADA TEMP5,I CURRENT TRACK MPY D#PTR,I TIMES #/TRACK D#PTR EQU *-1 LDB TEMP4,I GET BASE SECTOR CMB,INB AND SUBTRACT ADA B IT THEN ADA TEMP1,I ADD CURRENT SECTOR A=SECTOR OFFSET STA TEMP1 IN CURRENT EXTENT LDA TEMP2,I GET EXTENT MPY DFSIZ,I TIMES EXTENTj SIZE = SECTOR OFFSET OF DFSIZ EQU *-1 THIS EXTENT CLE NOW ADD THE TWO ADA TEMP1 DO DOUBLE WORD SEZ,CLE INB ADD STA TEMP1 SET FOR STB TEMP2 RETURN ISZ TEMP5 GET THE OFFSET LDA TEMP5,I AND STA TEMP3 SET IT FOR RETURN JMP RETN2 GO SEND IT * CSRP JSB SETEQ SET UP THE EQT ADDRESSES ADB D10 ADDRESS OF EQT11 STB SETEQ SAVE IT FOR LATER LDA DFSIZ SET ADDRESSES INA SET UP TO GET THE EXTENT STA DIRCT IN ALL CASES INA STA DIRCT+1 LDA PARM3 GET THE DOUBLE WORD LDB PARM4 SECTOR OFFSET DIV DFSIZ,I DIVIDE BY FILE SIZE STA PARM1 SET EXTENT NUMBER FOR D.RTR CALL STB PARM2 SAVE THE REST * JSB EXEC SCHEDULE D.RTR TO OPEN DEF *+8 THE EXTENT. DEF D23 DEF D.RTR DEF 1717B ID SEGMENT ADDRESS. DEF PARM1 EXTENSION #. DIRCT BSS 2 DEF D6 JSB RMPAR DEF *+2 DEF D.1 LDA D.1 SSA JMP RETRN * LDA D.5 AND B377 JSB $LIBR GO PRIV TO SET THE EQT NOP STA TEMP4,I STORE BEGINNING SECTOR (EQT25). CLB,CLE SET UP THE ADA PARM2 OFFSET SEZ INB NOW DIV D#PTR,I GET TRACK OFFSET AND SECTOR ADDRESS STB TEMP1,I SET CURRENT SECTOR ADA D.4 SET CURRENT TRACK STA TEMP5,I IN EQT 18 LDA D.4 STA TEMP3,I STORE BEGINNING TRACK (EQT24). LDA PARM5 IOR DM128 MAKE SURE RANGE IS RIGHT ISZ TEMP5 STEP TO EQT19 STA TEMP5,I STORE CURRENT OFFSET (EQT19). LDA PARM1 STA TEMP2,I STORE CURRENT EXTENT (EQT20). LDA SETEQ,I GET EQT11 AND AND NTEOF CLEAR THE EOF FLAGS STA SETEQ,I RESTORE IT JSB $LIBX GO TEST MENU DEF *+1 DE~F MENU * "A" OCT 101 C377 OCT 177400 NTEOF OCT 117777 MASK TO CLEAR EOF FLAGS M26 DEC -26 M22 DEC -22 D4 DEC 4 B3700 OCT 3700 B377 OCT 377 B77 OCT 77 BMASK OCT 137777 BPAT NOP ADDR1 NOP RECNO NOP D2 DEC 2 M1 DEC -1 M2 DEC -2 M4 DEC -4 M16 DEC -16 PARM1 BSS 1 PARM2 BSS 1 PARM3 BSS 1 PARM4 BSS 1 PARM5 BSS 1 * ERM26 LDA M26 JMP NOGO1 * SETUP LDA PTR22 HAVE RECORD 1. STA ADDR1 SAVE FOR LATER LDB D2 GET RECORD 2. JSB RDREC JMP NOGO1 READ ERROR. * * FIND IF THERE IS AN AVAILABLE SPLCON RECORD. * LDA M16 SET UP STA TEMP1 COUNTER LDA BUF21+3 GET REC. # OF FIRST REC STA RECNO SAVE IT LDA BUF21+1 GET NUMBER OF RECORDS CMA,INA SET FOR COUNTER STA TEMP3 IN TEMP3 LOOP1 LDA M16 SET UP STA TEMP2 COUNTER TWO CLB,INB SET INITIAL BIT MASK LOOP2 LDA ADDR1,I TRY AND B ONE SZA,RSS AVAILABLE?? JMP HAVIT YES USE IT * ISZ TEMP3 ANY RECORDS LEFT? RSS YES SKIP JMP NOGO NO SO SORRY! * RBL NO ADVANCE BIT MASK ISZ RECNO SEP RECORD NUMBER ISZ TEMP2 AND COUNT WORD EXHAUSTED?? JMP LOOP2 NO TRY NEXT BIT * ISZ ADDR1 YES TRY NEXT WORD ISZ TEMP1 IS THERE A NEXT WORD?? JMP LOOP1 YES TRY IT. * JMP NOGO NO AVAILABLE RECORD. * HAVIT LDA ADDR1,I SAVE NEW BIT PATTERN XOR B IN A TEMPORARY. STA BPAT LDA BUF21+4 CMA,INA SET NEGATIVE STA PARM5 SAVE MAX. # PENDING OUTSPOOLS. * * FIND OUT WHETHER ANY OUTPUT QUEUES ARE FULL * OR TOTAL PENDING OUTSPOOLS MATCH THE MAXIMUM. * LDB MPTR GET THE MENU ADDRESS LOOP3 LDA B,I GET ENTRY SZA,RSS END OF LIST? JMP SMP3 YES * INB NO STEP TO CbOUNT LDA B,I GET COUNT RAL,CLE,ERA CLEAR THE SIGN CPA D63 FULL?? JMP ERM26 YES SENT BACK ERROR * ADA PARM5 ADD TO TOTAL STA PARM5 RESET TOTAL SSA,RSS IF NEG. THEN JMP ERM26 TOO MANY * INB NEXT JMP LOOP3 AROUND AGAIN * * * FIND AN AVAILABLE LU #. * * SMP3 JSB FINDL NOGO LDA M22 USE ZERO TO FLAG ERROR AND DO CLASS GET * NOGO1 STA TEMP1 JSB EXEC DO A CLASS GET TO RETRIEVE DEF *+5 THE SETUP BUFFER. DEF D21 DEF PARM2 DEF BUF23 DEF D16 JSB SMENU JMP ERM21 * LDA TEMP1 STA BUF23+1 SAVE LU# IN SETUP BUFFER. SSA,RSS IF NO LU THEN TAKE GAS! JSB OPNSP TRY TO OPEN THE SPOOL FILE. SZA,RSS CHECK FOR ERRORS. JMP ERM16 CANNOT USE TYPE 0 FILES. * SSA JMP ERMES COULDN'T OPEN THE FILE? * LDA BUF23+8 IF BATCH INPUT RAL,ELA THEN CLA,SEZ CLEAR STA BUF23+15 OUTSPOOL LU. LDA BUF23+9 IF PRIORITY IS NEG SSA THEN CLA SET ZERO STA BUF23+9 TO AVOID Q PROBLEMS LDA BUF23+15 IF FILE IS FOR OUTSPOOL SZA,RSS IF NOT FOR OUTSPOOL JMP SSEQT JUST SET IT UP * LDB BUF23+10 GET STATUS CPB "H" IF NOT HOLD JMP SSEQT * LDB "W" SET TO WAIT STB BUF23+10 * * SET UP SPOOL EQT ENTRY. * SSEQT JSB FEQT FIND ADDRESS OF EQT. INB MAKE SURE THAT THIS IS LDA B,I REALLY A SPOOL EQT. CPA IS43A DO THIS BY CHECKING JMP SS3 EQT2 AGAINST THE INIT. * JMP ERM22 ENTRY POINT OF DVS43. * SS3 ADB D2 HAVE EQT ADDRESS. STB TEMP3 GET EQT4 ADDRESS. JSB $LIBR GO PRIVILEGED TO BE ABLE NOP TO STUFF THE EQT. LDA TEMP3,I SET OR CLEAR BUFFERING  AND BMASK FLAG. LDB BUF23+8 SSB XOR BUFRD STA TEMP3,I ISZ TEMP3 LDA BUF23+7 GET DRIVER TYPE AND PUT ALF,ALF AND POSITION CORRECTLY STA TEMP3,I IN EQT5. LDB TEMP3 ADB D6 SET UP REMAINDER OF STB CLSPT SAVE ADDRESS OF EQT 11 LDA PARM1 IF THIS CMA,CLE,INA IS A SET UP FOR SPOUT CLEAR E LDA D16 SET THE STANDARD BIT AT ALL TIMES SEZ IF SPOUT USE ONLY THE STD. BIT IOR BUF23+8 DISPOSITION FLAGS. AND DMASK EQT11. STA B,I ADB D2 INDEX TO EQT EXTENSION. LDB B,I ADB D2 SAVE ADDRESS OF CURRENT STB TEMP3 TRACK/SECTOR. ADB D8 LDA D.1 SAVE FILE SIZE IN EQT26. STA B,I SAVE MASTER DIRECTORY ENTRY INB IN EQT27 AND EQT28. LDA D.2 STA B,I INB LDA D.3 STA B,I ADB M4 LDA D.4 STA B,I SAVE BEGINNING TRACK (EQT24). STA TEMP3,I SAVE CURRENT TRACK (EQT18). ISZ TEMP3 LDA DM128 SET STA TEMP3,I OFFSET ISZ TEMP3 CLA CLEAR THE STA TEMP3,I EXTENT #. ISZ TEMP3 LDA D.5 SAVE CURRENT SECTOR. AND B377 STA TEMP3,I INB STA B,I SAVE BEGINNING SECTOR. ADB D4 LDA BUF23+8 SET BATCH CHECK FLAG RAL,ELA IN E LDA PARM1 SETUP FOR SPOUT? SEZ IF NOT BATCH IN CHECK USE ZERO SZA ALSO FOR SPOUT CLA,RSS BATCH CHECKING DOESN'T APPLY. LDA PARM3 PUT BATCH CHECKING INFO. STA B,I INTO EQT29. INB LDA D.5 ALF,ALF AND B377 STA B,I SAVE # SECTORS TRACK. INB CLA INITIALIZE RECORD COUNT. STA B,I INB STA B,I INITIALIZE CLASS PARAMETER INB WORDS. STA 2TRNB,I JSB $LIBX DEF *+1 DEF SS2 * IS43A BSS 1 DVS43 ENTRY POINT SAVE. DM128 DEC -128 D6 DEC 6 D63 DEC 63 D8 DEC 8 D.1 NOP D.2 NOP D.3 NOP D.4 NOP D.5 NOP PTR22 DEF BUF22 PTR24 DEF BUF24 RECRD NOP DMASK OCT 630 "H" OCT 110 * SS2 LDA PARM1 IF SET UP IS FOR SPOUT CPA D11 SKIP JMP SS4 SKIP THE EOF WRITE * LDA BUF23+8 IF A WRITE ONLY ALF,ALF ACCESS SLA,RSS JMP SS5 NOT WRIT ONLY * LDA BUF23+1 GET THE LU IOR B100 SET UP A EOF REQUEST STA TEMP6 ADA B100 AND A BACKSPACE RECORD STA TEMP5 REQUEST JSB EXEC DO EOF DEF *+3 DEF D3 DEF TEMP6 JSB EXEC NOW BACKSPACE DEF *+3 DEF D3 DEF TEMP5 * SS5 LDA BUF23+8 FIX THE STD. FLAG CMA AS REQUIRED AND D16 ISOLATE THE BIT XOR CLSPT,I CLEAR IT IF NEED BE LDB CLSPT JSB PUT SET THE WORD BACK IN EQT11 SS4 LDA PTR23 LDB RECNO JSB WTREC pxT* * THE FOLLOWING QUEUES A FILE FOR OUTSPOOLING. * QUEUE LDA BUF23+15 IS THIS FILE TO SZA,RSS OUTSPOOLED? JMP SET10 NO. * LDB PARM1 IS THIS A SETUP FOR CPB D11 SPOUT? (SPSEL) JMP SPS5 YES. * * ENTER HERE FROM CSAP OR PASS. * AND B77 STA TEMP6 SAVE OUTSPOOL LU #. LDA BUF23+9 SAVE SPOOL PRIORITY. STA TEMP5 JSB SMENU GET SET TO PASS THIS JMP QUE1 SPOOL FOR OUTSPOOLING. * INB SAVE THE ADDRESS OF THE COUNT WORD STB SMENU FOR LATER LDB BUF23+8 CHECK IF THERE IS RBR,SLB A HOLD ON THIS FILE. JMP SET10 YES. * LDB BUF23+10 MUST ALSO BE IN "W" STATUS CPB "W" WELL RSS YES CONTINUE JMP SET10 NO DO NOT QUEUE * LDA PTR23 FOUND AN LU MATCH. LDB RECNO JSB WTREC JSB RDLUQ GET THE LU QUEUE TO CORE JSB .DRCT SETTING UP HERE TO SEARCH DEF BUF21+3 THE QUEUE AND FIND OUT STA TEMP4 WHERE THE NEW ENTRY ADA M1 SET A FOR SCAN SET2 LDB A,I CAN BE PUT. INA STEP TO PRIORITY SZB,RSS END OF QUEUE? JMP SET1 YES. * LDB A,I GET PRIORITY CMB,INB WE HAVE A PRIORITY. ADB TEMP5 COMPARE WITH PRIORITY SSB OF NEW ENTRY. JMP SET1 NEW ENTRY IS LESS. * INA KEEP LOOKING FOR A JMP SET2 SPOT TO PUT NEW ENTRY. * SET1 ADA M1 HAVE A PLACE. STA TEMP3 SAVE A POINTER. LDA BUF21+1 FIND THE END OF ALS THE LIST. THE LIST FROM ADA TEMP4 POINT OF NEW ENTRY INA WILL BE SHIFTED TO MAKE SET4 STA TEMP6 ROOM FOR NEW ENTRY. ADA M2 SET UP SHIFT POINTERS. STA TEMP4 DLD TEMP4,I DO A SHIFT ON A DST TEMP6,I TWO-WORD ENTRY. LDA TEMP4 DECREMENT POIN)TERS. CPA TEMP3 JUST MOVED LAST ONE? RSS YES SKIP JMP SET4 NO - BACK THROUGH LOOP. * LDA RECNO PUT THE NEW ENTRY LDB TEMP5 IN THE VACATED SPACE. DST TEMP4,I ISZ BUF21+1 INCREMENT THE ENTRY COUNT. JSB WRLUQ WRITE OUT THE LU QUEUE LDA SMENU,I UPDATE THE MENU. ELA SAVE THE SIGN BIT LDA BUF21+1 GET THE NEW COUNT RAL,ERA SET SIGN IF NEEDED STA SMENU,I RESET THE COUNT SET10 LDA PARM1 SETUP PROCESSING? SZA IF NOT, BYPASS BIT SETTING. JMP MENU * LDA PTR22 READ AVAILABILITY BITS. LDB D2 JSB RDREC NOP *********************************************** LDB BPAT RESET AVAILABILITY BITS. STB ADDR1,I LDA PTR22 WRITE OUT AVAILABILITY RECORD. LDB D2 JSB WTREC LDB TEMP2 LDA B,I FIX UP $LUAV. CCE MAKE THE LU UNAVAILABLE. ELA,RAR JSB PUT INB LDA RECNO JSB PUT * MENU LDA SHUTD IS THERE A SHUT DOWN SZA IN EFFECT? JMP RETRN * LDA SSTAT IS SPOUT ALREADY WORKING CPA D1 ON A MENU? JMP SRSEX YES - RETURN. * LDA PARM1 JSB FINDL IS THERE AN AVAILABLE LU JMP SRSEX FOR SPOUT? * STA RESLU MENU1 LDA PTR25 MAKE UP A NEW MENU TO SEND STA TEMP3 TO SPOUT. PUT ONLY LU'S CLB SET TO CLEAR THE BUFFER STB A,I SET SEED LDB A INB JSB .MVW MAKE IT GROW DEF D15 NOP LDA MPTR IN THE MENU THAT ARE NOT STA TEMP4 IN USE AND ALSO HAVE A QUEUE MENU2 LDB TEMP4,I OF FILES TO BE OUTSPOOLED. STB TEMP3,I SZB,RSS END OF .MENU? JMP MENU3 YES. * ISZ TEMP4 NO - GO AHEAD AND CHECK IF LDB TEMP4,I IF THE LU IS IN USE BY ISZ TEMP4 i( SPOUT. SSB JMP MENU2 SPOUT IS ALREADY USING THE LU. * SZB IS ANYTHING ON THIS QUEUE. ISZ TEMP3 YES - SAVE THE ENTRY JUST MADE. JMP MENU2 * MENU3 LDA BUF25 SZA,RSS IS THERE ANYTHING TO SEND SPOUT? JMP SRSEX NO. * CLB,INB SET STATUS TO SHOW STB SSTAT SPOUT WORKING ON MENU LDA D2 SEND CLASS REQUEST STA TEMP5 TO SPOUT WITH A MENU. CLA,CCE STA TEMP6 LDA RESLU RESERVE THE LU ELA,RAR FOR SPOUT LDB TEMP2 JSB PUT MENU4 JSB CLSPT JMP MENU GIVE SPOUT ALL IT CAN TAKE. * CLSPT NOP JSB EXEC DEF *+8 DEF D20 WRITE-READ REQUEST DEF ZERO LU #. PTR25 DEF BUF25 MENU BUFFER. DEF D12 DEF TEMP5 CLASS PARAMETER 1. DEF TEMP6 CLASS PARAMETER 2. DEF SP.CL CLASS ID. JMP CLSPT,I * * D1 DEC 1 D11 DEC 11 M21 DEC -21 TEMP1 BSS 1 TEMP2 BSS 1 TEMP3 BSS 1 TEMP4 BSS 1 TEMP5 BSS 1 TEMP6 BSS 1 MPTR DEF .MENU SHUTD NOP RESLU NOP SSTAT NOP * NTRDY CLA,RSS ERM16 LDA M16 ERMES STA TEMP1 JMP MENU * QUE1 CCA OUTSPOOL LU NOT LEGAL. STA BUF23 LDA PTR23 LDB RECNO JSB WTREC ERM21 LDA M21 JMP ERMES * ERM22 LDA M22 JMP ERMES * RETRN LDA MPTR THEN DO A COMPLETE RETN3 LDB A,I TERMINATION SO AS TO SZB,RSS ALLOW ACCESS TO THE JMP RETN2 SPLCON FILE FOR A * INA USER PACK, ETC. LDB A,I IF SPOUT IS NOT ACTIVE SSB AND THERE IS A SHUTDOWN JMP SRSEX IN EFFECT. * INA JMP RETN3 * RETN2 CLA,RSS OK TO SHUT DOWN SRSEX CLA,INA SAVE RESOURCES SHUT DOWN STA EXIT,I SAVE FOR EXIT * JSB POST MAKE SURE SPLCON BUFFERS DEF *+2 ARE POSTED. DEF DCB1 JSB UNLOK CLEAR WSPLCON RN #. DEF SRN RETN4 JSB PRTN PASS BACK PARAMETERS DEF *+2 TO THE CALLER. DEF TEMP1 CCB SET B AS INDICATOR JSB EXEC COMPLETION RETURN. DEF *+4 DEF D6 DEF ZERO INDICATE CALLER. EXIT DEF WRLUQ SAVE RESOURCES TERMINATION. SSB IF TIME ENTRY JMP TRYAG GO TRY THE MENU AGAIN * JSB RMPAR THIS ENABLES US TO SAVE DEF *+2 INDICATORS AND KEEP SPLCON DEF PARM1 OPEN ALL THE TIME. JMP SMP1 * LULOK CLB SPOUT HAS LU LOCK CONDITION. STB SSTAT JSB SPS RELEASE THE RESERVED LU SWP JSB PUT JSB EXEC SCHEDULE SMP WITH OFFSET DEF *+6 AND CHECK THE HOW WE GOT TO THIS DEF D12 POINT OF SUSPENSION WHEN WE DEF SMPNA ARRIVE. IF ORDINARY SCHEDULE DEF D2 DEF ZERO DEF M8 REQUEST, PROCESS NORMALLY. JMP SRSEX GO EXIT * RDLUQ NOP ROUTINE TO READ THE LU QUEUE LDA PTR21 SET UP TO READ 8 RECORDS. LDB M8 THIS IS ONE LU QUEUE. STB TEMP3 LDB LUREC READ THE APPROPRIATE SET6 JSB RDREC BLOCK. JMP ERMES READ ERROR. * LDB RECRD CLB SET FOR AUTO REC. INCREMENT LDA BUFSP FOR NEXT RECORD. ADA D16 ISZ TEMP3 FINISHED READING BLOCK? JMP SET6 * JMP RDLUQ,I YES RETURN * LUREC NOP M8 DEC -8 * WRLUQ NOP WRITE OUT THE LU Q LDA PTR21 SET UP TO WRITE LDB M8 OUT THE LU QUEUE. STB TEMP3 8 - 16 WORD RECORDS. LDB LUREC SET7 JSB WTREC WRITE A 16 WORD RECORD. LDA BFSP1 UPDATE BUFFER POINTER ADA D16 TO NEXT RECORD. CLB ISZ TEMP3 JMP SET7 * JMP WRLUQ,I DONE SO EXIT * * TRYAG JSB LOCK DEF SRN JMP MENU GO TRY THE MENU * UNLOK NOP LDA UNLOدK,I STA RESNO ISZ UNLOK JSB RNRQ DEF *+4 DEF D4 RESNO BSS 1 DEF IERR JMP UNLOK,I * LOCK NOP LDA LOCK,I STA RESNU ISZ LOCK JSB RNRQ DEF *+4 DEF D1 RESNU BSS 1 DEF IERR JMP LOCK,I * * BITFX NOP STB A AND D15 CMA STA FEQT CLA,INA ISZ FEQT JMP *+4 * BRS,BRS BRS,BRS JMP BITFX,I * RAL JMP *-6 * * * SUBROUTINE TO FIND EQT ADDRESS CORRESPONDING * TO A GIVEN LU #. * FEQT NOP CCA,CCE FIND ADDRESS OF EQT CORRESPONDING ADA DRT TO THE AVAILABLE LU #. ADA BUF23+1 LDA A,I AND B77 GET EQT NUMBER AND INDEX ADA M1 TO THE PROPER ENTRY. MPY D15 ADA EQTA STA B ADA D12 SET EXTENSION LDA A,I ADDRESS IN A JMP FEQT,I * FINDL NOP FIND AVAILABLE LU. LDA LUAVA STA TEMP2 LDA TEMP2,I STA FEQT FIND1 ISZ TEMP2 LDA TEMP2,I SSA,RSS JMP FIND2 * ISZ TEMP2 ISZ FEQT JMP FIND1 * RSS FIND2 ISZ FINDL JMP FINDL,I * SPS NOP LDA LUAVA GET ADDRESS OF $LUAV. SPS0 INA STEP TO FIRST ENTRY LDB A,I GET THE LU INA STEP TO THE RECORD NUMBER SSB IF BUSY, LDB A,I GET THE RECORD NUMBER SZB IF ZERO THEN THIS IS IT JMP SPS0 ELSE TRY NEXT ONE * STA TEMP2 SAVE THE RECORD NO. ADDRESS ADA M1 AND THE LU ADDRESS LDB A,I GET THE LU RBL,CLE,ERB CLEAR THE BUSY BIT STB RESLU AND SAVE THE LU JMP SPS,I * SPSEL CLA CLEAR WORK STA SSTAT IN PROGRESS FLAG LDA PARM2 GET THE LU AND SET IN CASE WE NEED TO STA BUF23+15 CALL OFF SPOUT JSB SPS SEARCH $LUAV FOR A RESeERVED LU. JSB SMENU GET THE MENU ENTRY JMP KILL3 CAN'T FIND?? SHOULD NEVER HAPPEN * INB STB TEMP6 SAVE THE POINTER LDB A RECORD NUMBER TO B LDA PTR24 READ THE TOP OF THE JSB RDREC LU QUEUE AND PICK NOP ******************************************* CLA SET THE Q ENTRY PRIORITY TO STA BUF24+3 TO ZERO TO INDICATE LDA PTR24 IT AS ACTIVE (PREVENTS LDB LUREC INSERTS AHEAD OF IT) JSB WTREC WRITE IT BACK OUT LDB BUF24+2 UP THE FIRST ENTRY. STB RECNO SAVE SPLCON RECORD # OF FILE. LDA PTR23 READ SPLCON RECORD. JSB RDREC NOP ********************************************** LDA RECNO SET THE RECORD NUMBER LDB TEMP2 IN THE LUAV TABLE JSB PUT LDA RESLU AND THE LU STA BUF23+1 IN THE RECORD JSB OPNSP TRY TO OPEN THE FILE. SSA JMP KILL3 YES - KILL THE SPOOL. * LDB "A" SET FILE TO ACTIVE - STB BUF23+10 IT WILL BE OUTSPOOLED. JMP SSEQT GO SET UP EQT ENTRY. * * SPS5 CLA,CCE,INA COME HERE AFTER SETTING STA TEMP5 UP SPOOL EQT. LDA TEMP6,I GET POSITION OF LU IN ELA,RAR MENU AND MARK IT TO STA TEMP6,I SHOW THAT SPOUT IS SPS7 LDB BUF23+8 IS BUSY WITH THAT LU. CCE POTENTIAL OVERLAP PROBLEM? RBR,SLB IF SO, SET SIGN BIT IN CME CLASS PARAMETER TO BE PASSED LDA BUF23+15 TO SPOUT. ELA,RAR STA TEMP6 RBR,CLE,RBR RBR,SLB CCE LDA BUF24 GET # QUEUED LINES. AND C377 ISOLATE IOR RESLU INDICATE LU AND FILE TYPE. ELA,RAR STA BUF25 JMP MENU4 * * SMENU NOP LDA BUF23+15 IF NO LU AND B77 SZA,RSS THEN JMP SM2 JUST EXIT * STA FINDL SAVE THE REQUESTED_ LU LDB MPTR SEARCH MENU FOR DEQ4 LDA B,I OUTSPOOL LU. CPA FINDL THIS IT?? JMP SM1 YES GO EXIT FOUND * SZA,RSS IF END OF TABLE JMP SMENU,I TAKE NOT FOUND EXIT * ADB D2 JMP DEQ4 * SM1 LDA MPTR COMPUTE THE LU QUEUE CMA,INA RECORD NUMBER ADA B FOR THIS LU ALS,ALS ADA D9 STA LUREC AND SAVE IT FOR RDLUQ SM2 ISZ SMENU STEP TO FOUND EXIT JMP SMENU,I AND RETURN * D9 DEC 9 P21.2 DEF BUF21+2 * DEQUX LDA PARM3 IF NO ERROR CMA,INA,SZA,RSS JUST D Q JMP DEQUE * JSB MSFIX FIX UP THE MESSAGE ASC 3,EOF ER STRING FOR MESSAGE DEC 13 * DEQUE JSB PRGEX RELEASE THE SPLCON RECORD JSB DQ DEQUE THE FILE JMP NTRDY EXIT * DQ NOP DEQUE SUBROUTINE ENTER WITH E=0 IF JSB SMENU FIND THE LU FOR THIS FILE JMP ERM21 DIDN'T FIND - ERROR. * INB SAVE THE ADDRESS FOR UPDATE STB PRGEX JSB RDLUQ GET THE LU QUEUE TO CORE LDA PTR21 DEQ11 ADA D2 FIND THE POSITION IN LDB A,I THE QUEUE. CPB RECNO JMP DEQ10 FOUND IT * CPA LIM END OF QUEUE? JMP DQ,I YES - LEAVE. * JMP DEQ11 KEEP LOOKING * DEQ10 LDB PRGEX,I GET THE # OF ENTRIES FLAG ADB M1 DECREMENT IT CPA P21.2 IF FIRST ENTRY RBL,CLE,ERB CLEAR THE BUSY FLAG STB PRGEX,I SET IT BACK DEQ12 STA TEMP2 HAVE IT. ADA D2 STA TEMP3 CMA,INA ADA PTR21 ADA D127 SSA END OF BLOCK? JMP DEQ13 YES. * DLD TEMP3,I NO - MOVE UP NEXT ENTRY. DST TEMP2,I LDA TEMP3 JMP DEQ12 * DEQ13 CLA CLB DST TEMP2,I CCA ADA BUF21+1 DECREASE # OF ENTRIES. STA BUF21+1 JSB WRLUQ WRITE OUT THE LU QUEUE  JMP DQ,I ELEMENT DEQUED SO EXIT * * CLRAV NOP CLEAR THE LUAVA ENTRY USING RECNO LDB LUAVA FIND THE SPOOL LU LDA B,I SET THE COUNT STA PUT INCASE NOT FOUND DEQ16 ADB D2 INDEX TO THE NEXT RECORD ENTRY LDA B,I CPA RECNO THIS THE ONE?? JMP DEQ15 YES GO DO IT * ISZ PUT MORE?? JMP DEQ16 YES TRY NEXT ONE * CCE INDICATE NOT FOUND JMP CLRAV,I RETURN * DEQ15 JSB FRELU FREE THE LU JMP CLRAV,I RETURN * * FRELU NOP FREE LU AND ITS EQT IF ONE CLA CLEAR THE RECORD # SLOT JSB PUT IN THE LUAV ADB M1 BACK TO THE LU NUMBER LDA B,I GET THE NUMBER RAL,CLE,ERA CLEAR THE SIGN STA BUF23+1 SET FOR POSSIBLE FURTURE USE JSB PUT RESET WORD SEZ,CME,RSS IF NOT BUSY OR NOT FOUND JMP FRELU,I EXIT WITH E = 1 * JSB FEQT GET THE EQT ADDRESS STA B SET TO ADB D11 CLEAR EQT27 TO STOP LDA B,I SAVE IT FOR CLOSE STA D.2 FIRST CLA,CLE ANY ACCESSES JSB PUT DO IT JSB UNLOK CLEAR THE HOLD RN DEF WRN CLE CLEAR E TO INDICATE FOUND JMP FRELU,I RETURN * RELSE LDA PTR23 LDB PARM2 STB RECNO JSB RDREC NOP ********************************************** LDA BUF23+1 NEED TO SAVE IN CASE STA PARM2 OF RESTART. LDB PARM4 LOOK AT REL/RES FLAG. LDA PARM5 CPA "AH" ACTIVE FILE? JMP RELS1 YES. * SSB RELEASE? JMP QUEUE YES - REQUEUE. * SZB POSSIBLE LU CHANGE. STB BUF23+15 SAVE NEW LU. JMP QUEUE * RELS1 SSB,RSS A RELEASE? JMP RELS2 NO MUST RESTART. * JSB FEQT ADB D10 CLE SET TO CLEAR THE BIT LDA HMASK XSET THE BIT TO BE CLEARED JSB PUTM GO CLEAR IT LDA BUF23+1 STA RESLU LDA PARM3 STA PARM2 CLA,INA STA TEMP5 JMP SPS7 * RELS2 JSB SPTUN JSB FLU FIND THE LU RSS IF NONE SKIP JSB FRELU FREE IT DEQ18 JSB DQ DEQUE THE FILE LDA PTR23 RELEASING AN ACTIVE LDB RECNO FILE AND RESTARTING IT - JSB RDREC MUST QUEUE IT UP. NOP ********************************************** LDA PARM4 NEW LU? SZA WELL?? STA BUF23+15 YES - SAVE IT. LDA PTR21 READ IN 1ST RECORD CLB,INB FOR QUEUE. JSB RDREC NOP ********************************************** JMP QUEUE * LIM DEF LIMIT "AH" ASC 1,AH D127 DEC 127 D15 DEC 15 * KILL LDB PARM2 STB RECNO SAVE SPLCON RECORD #. LDA PTR23 READ THE SPLCON RECORD JSB RDREC FOR THIS FILE. NOP *********************************************** LDA PARM5 IS THIS AN ACTIVE CPA "A" FILE (BEING OUTSPOOLED)? RSS YES TREAT AS IF ACTIVE HOLD * CPA "AH" ACTIVE HOLD? KILL3 JSB SPTUN YES. * JMP DEQUE GO DO IT. * B100 OCT 100 * PUTM NOP ROUTINE TO SET OR CLEAR BIT SET IN A JSB $LIBR AND ADDRESSED BY 'B' 'E'=1 TO SET NOP 'E'=0 TO CLEAR THE BIT STA FEQT SAVE THE BIT(S) IOR B,I SET THE BIT IN ANY CASE SEZ,RSS IF CLEAR REQUEST XOR FEQT CLEAR THE BIT STA B,I RESET AND JSB $LIBX DEF PUTM EXIT * * SPTUN NOP JSB FEQT SET HOLD BIT TO STOP SPOUT ADB D10 LDA HMASK HOLD BIT TO EQT11 JSB PUTM GO SET IT CLA MAKE SURE AND CALL STA BUF25 SPOUT SO THAT IT LDA D3 WILL UNLOCK THE LU STA TEMP5 BEINMG USED TO LDA BUF23+15 DUMP THIS FILE AND B77 STA TEMP6 JSB CLSPT JMP SPTUN,I * "D" OCT 104 * SHUT LDA "D" STA SHUTD JMP RETRN * STUP CLA STA SHUTD JSB UNLOK RELEASE JOB HOLD JUST IN CASE DEF WRN JMP MENU * DVCDN JSB MSFIX DEVICE WENT DOWN WHILE ASC 3,DOWN OUT SPOOLING D16 DEC 16 LENGTH OF MESSAGE (WORDS) JMP HOLD1 GO HOLD THE FILE * HOLD LDB PARM2 PICK UP AND SAVE RECORD STB RECNO NUMBER OF FILE IN SPLCON. LDA PTR23 READ IN APPROPRIATE FILE JSB RDREC RECORD IN SPLCON. NOP *********************************************** LDA PARM5 HOLDING AN ACTIVE FILE? CPA "A" JMP HOLD1 * JSB DQ NO - DEQUEUE THE FILE. JMP NTRDY AND EXIT * HOLD1 JSB FEQT SET A BIT IN SPOOL EQT ADB D10 FOR SMD. LDA HMASK JSB PUTM GO SET THE HOLD BIT LDA "AH" SET HOLD FLAG STA BUF23+10 LDA PTR23 WRITE THE RECORD LDB RECNO JSB WTREC JMP NTRDY * D10 DEC 10 HMASK OCT 10000 * PUT NOP JSB $LIBR NOP STA B,I JSB $LIBX DEF PUT * OPNSP NOP LDA BUF23+2 SET SIGN BIT ON 1ST CCE WORD OF FILE NAME. ELA,RAR STA TEMP4 SAVE IT. JSB EXEC TRY TO OPEN THE FILE. DEF *+8 DEF D23 SCHEDULE WITH WAIT. DEF D.RTR D.RTR. DEF ID ID SEGMENT ADDRESS. DEF TEMP4 NAME(1). DEF BUF23+3 NAME(2). DEF BUF23+4 NAME(3). DEF BUF23+6 CARTRIDGE ID. JSB RMPAR DEF *+2 GET PARAMETERS BACK DD.1 DEF D.1 FROM D.RTR. LDA D.1 SUCCESSFUL OPEN? JMP OPNSP,I * PRGEX NOP LDA PTR22 LDB D2 READ SPLCON AVAILABILITY BITS. JSB RDREC NOP ************ ************************************ LDB BUF21+3 GET SPLCON RECORD # CMB,INB RELATIVE TO THE BEGINNING ADB RECNO OF THE FILE DESCRIPTOR JSB BITFX RECORDS. ADB PTR22 STA BITFX IOR B,I CLEAR THE BIT. XOR BITFX STA B,I LDA PTR22 LDB D2 JSB WTREC WRITE AVAILABILITY RECORD. CCA STA BUF23 LDA PTR23 LDB RECNO JSB WTREC WRITE FILE DESCRIPTOR RECORD. JSB CLRAV CLEAR ANY LU ASSOCIATED WITH THIS FILE SEZ WAS THERE A CURRENT ONE? JMP PRNLU NO, MUST OPEN TO CLOSE * JSB FEQT YES LU WAS SET FOR FEQT ADA D10 GET ADDRESS OF FILE PRAMS PRPU LDB A,I GET THE FILE SIZE CMB,INB SET NEGATIVE FOR PURGE ADA D2 STEP TO THE DIR. ADDRESS WORD STA TEMP4 LDA BUF23+8 GET THE OPTION WORD SLA IF SAVE IN EFFECT CLB CHANGE TO SIMPLE CLOSE AND D8 ISOLATE SPOOL POOL FILE BIT SZA IF POOL FILE LDB A CHANGE TO PURGE EXTENTS STB WTREC SET THE PRAMETER JSB EXEC SCHEDULE D.RTR DEF *+8 DEF D23 WITH WAIT TO DEF D.RTR CLOSE A FILE DEF 1717B AND PURGE EXTENTS. DEF WTREC DEF D.2 DEF TEMP4,I DEF ZERO PRNFL LDA BUF23+8 GET SPOOL POOL FLAG AND D8 CPA D8 IF SPOOL POOL JMP PRG0 GO SET UP * JMP PREX ELSE JUST RETURN * PRNLU JSB OPNSP OPEN THE FILE SO CAN PURGE SSA WAS IT FOUND?? JMP PRNFL NO * LDA DD.1 YES SET THE ADDRESSES JMP PRPU AND GO PURGE THE FILE * PRG0 JSB POST MUST ACCESS JOB FILE DEF *+2 DDCB DEF DCB1 LDA PTRJF SET UP THE JOB FILE LDB DDCB JSB .MVW DEF D16 BY MOVING IN THE DCB NOP JSB LOCK DEF JRN [ LDA PTR24 READ IN SPOOL POOL FILE LDB D17 AVAILABILITY BITS. JSB RDREC NOP ********************************************* LDA BUF23+4 CONVERT POOL FILE # AND D15 STA TEMP4 LDA BUF23+4 ALF,ALF AND D15 MPY D10 ADA TEMP4 CCB SET NUMBER LESS 1 ADB A IN B JSB BITFX FIND AVAILABILITY BIT. STB TEMP4 SET OFFSET ADDRESS ADB PTR24 ADB D4 CMA MAKE AN ANDING MASK STA TEMP5 AND SAVE IT IN CASE A JOB AND B,I CLEAR THE BIT AND STORE. STA B,I LDA PTR24 WRITE OUT JOBFIL RECORD 17. LDB D17 JSB WTREC SPOOL FILE IS RETURNED TO POOL LDA PTR25 LDB BUF23+11 IF SPOOL NOT CONNECTED SZB,RSS WITH A JOB, FORGET THIS STUFF. JMP DEQ7 * JSB RDREC ELSE READ IN THE JOB RECORD NOP *************************************** LDB P2511 GET ADDRESS OF POOL BITS STB TEMP6 SAVE FOR RELEASE CHECK ADB TEMP4 INDEX INTO AND LDA TEMP5 CLEAR AND B,I THE FREEDED BIT STA B,I FIX OWNED SPOOL BITS OF THE JOB. LDA BUF25+2 GET THE JOB STATUS CPA "CS" IF NOT CS RSS THEN JMP DEQ6 DO NOT CLEAR THE ENTRY * LDB M5 CHECK IF ALL OWNED FILES ARE CLOSED? DEQ8 LDA TEMP6,I SZA ANY HERE? JMP DEQ6 YES DO NOT FREE THE RECORD * ISZ TEMP6 STEP THE COUNT INB,SZB ALL TESTED? JMP DEQ8 NO TRY NEXT ONE * CCA ALL OWNED SPOOLS ARE CLEAR. STA BUF25 DEALLOCATE THE RECORD. DEQ6 LDA PTR25 LDB BUF23+11 WRITE OUT THE RECORD. JSB WTREC DEQ7 JSB POST DEF *+2 PDCB DEF DCB1 JSB UNLOK DEF JRN LDA PTRSF RESET UP THE SPOLCON FILE LDB PDCB JSB .MVW DEF D16 NOP PREX JSB CLRAV CLEAR ANY ADDITIONAL SEZ,RSS LU'S ASSIGNED TO THIS JMP PREX FILE * JMP PRGEX,I EXIT TO CALLER * JRN NOP SRN NOP WRN NOP D17 DEC 17 M5 DEC -5 P2511 DEF BUF25+11 "CS" ASC 1,CS * WTREC NOP STA BFSP1 STB RECRD JSB WRITF DEF *+6 DEF DCB1 DEF IERR BFSP1 BSS 1 DEF D16 DEF RECRD JSB FILER REPORT FILE ERROR IF ANY JMP WTREC,I * RDREC NOP STA BUFSP STB RECRD JSB READF DEF *+7 DEF DCB1 DEF IERR BUFSP BSS 1 DEF D16 DEF FILER DUMMY PLACE HOLDER DEF RECRD SSA,RSS IF NO ERROR ISZ RDREC TAKE OK EXIT ELSE P+1 JSB FILER REPORT FILE ERROR IF ANY JMP RDREC,I * FILER NOP TEST FOR ERROR AND PRINT IF ONE CMA,SSA,INA SET NEGATIVE ERROR + JMP FILER,I IF NONE JUST EXIT * JSB CVTNO CONVERT THE NUMBER STA MESS SET IN THE MESSAGE JSB PRINT PRINT IT DEF SMPER DEF D6 JMP FILER,I RETURN TO CALLER * CVTNO NOP TWO DIGIT NUMBER CONVERTER CLB SET FOR DIVIDE DIV D10 A HAS HIGH DIGIT, B LOW ALF,ALF ROTATE TO HIGH ADA B PUT TOGETHER ADA "00" ADD THE ASCII OFFSETS JMP CVTNO,I RETURN NUMBER IN A * "00" ASC 1,00 * PRINT NOP PRINT TO LU 1 DLD PRINT,I GET THE BUFFER AND COUNT ADDRESSES DST BUFAD SET IN CALL ISZ PRINT ADVANCE THE RETURN ADDRESS ISZ PRINT ADVANCE THE RETURN ADDRESS JSB REIO SENT THE WORD TO THE SYSTEM TTY DEF RTN DEF D2 DEF D1 BUFAD NOP SET TO THE BUFFER ADDRESSES NOP ALSO SET RTN JMP PRINT,I EXIT BACK TO CALLER * MSFIX NOP FIX UP THE MESSAGE LDA BUF23+15 FIRST GET THE AND B77 JSB TRNCVTNO LU AND CONVERT STA LUXX SET IN MESSAGE JSB .DFER NOW MOVE IN THE STRING DEF DNEOF DEF MSFIX,I RETURNS A POINTS TO NEXT SOURCE SO STA MSFIX SAVE AS LENGTH ADDRESS JSB .DFER MOVE IN THE DEF FILEN FILE DEF BUF23+2 NAME JSB PRINT NOW PRINT THE MESSAGE DEF SVERF DEF MSFIX,I POINT TO LENGTH ISZ MSFIX STEP TO RETURN ADDRESS JMP MSFIX,I AND RETURN * PTRSF DEF SPLFL PTRJF DEF JOBFL SMPER ASC 5,SMP: FMP -XX ERORR MESSAGE MESS NOP HOLDS XX FROM MESSAGE SVERF ASC 4,SMP: LU LU DOWN AND BAD EOF TEMPLATE LUXX ASC 2, LU PLUS 2 BLANKS DNEOF ASC 4,EOR ER OR DOWN PLUS 2 BLANKS FILEN ASC 6,XXXXXX HELD. SMPNA ASC 3,SMP .MENU DEC 1 SUP REP 19 DEC 1 DEC 0 D21 DEC 21 D23 DEC 23 SPOUT ASC 3,SPOUT D.RTR ASC 3,D.RTR IERR NOP DRT EQU 1652B EQTA EQU 1650B ZERO DEC 0 ID NOP * END SMP T E!g 92002-18003 1805 S 0222 DVS43 (SPOOL LVR)              H0102 =ASMB,R,L,C,Z ASSEMBLE STATEMENT FOR RTE III * *ASMB,R,L,C,N ASSEMBLE STATEMENT FOR RTE II IFN HED SPOOL MONITOR DRIVER FOR RTE II XIF IFZ HED SPOOL MONITOR DRIVER FOR RTE III XIF * NAME: DVS43 * SOURCE: 92002-18003 (RTE II) 92060-18009 (RTE III) * RELOC: 92002-16003 (RTE II) 92060-16009 (RTE III) * PGMR: A.M.G.,G.A.A * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * IFN NAM DVS43 92002-16003 REV. 1805 780207 XIF IFZ NAM DVS43 92060-16009 REV. 1805 780207 XIF * ENT IS43,CS43,$MPID,N.SEQ SUP * * * *** SPOOL EQT ENTRIES *** * * EQT1 SAME AS STANDARD * . * . * . * EQT7 SAME AS STANDARD (READ WRITE), BUFFER MASK (POST) * EQT8 TRANSFER AMOUNT IN WORDS * EQT9 USED TO SAVE TLOG WHILE WAKING SPOUT. * EQT10 RECORD LENGTH * EQT11 FLAGS: BIT 15 - 1 IF WRITE CALL TO INCOR * BIT 14 - BATCH CHECK FAILED ONCE * BIT 13 - EOF SENT BACK ONCE (OR BATCH * CHECK FAILED) * BIT 12 - HOLDING I/O ON THIS LU. * BIT 9,10,11- TRANSFER VECTOR FOR EXTND/TO * RETURNS: * 0= POST WAIT FOR XSIO CALL * 1= WAIT FOR EXTND TO START SPOUT * 2= WAIT FOR BUFFER ECT. IN INCOR * 3= WAIT FOR READ/WRITE EXTND * 4= WAIT FOR BACKSPACE EXTENT * 5= WAIT IN RWIND FOR EXTND * 6= NOT USED * ~} 7= NOT USED * BIT 7,8- 00 READ AND WRITE * 01 READ ONLY * 10 WRITE ONLY * BIT 6 - NOT USED * BIT 5 - NOT USED * BIT 4 - ORDINARY FILE * BIT 3 - SPOOL POOL FILE * BIT 2 - REQUEST LENGTH IN CHARACTERS * BIT 1 - REQUEST INITIATED * BIT 0 - NOT USED * EQT12 # OF EXTENSION WORDS - BSREC OR PUSH/GETRD RETURN POINT SAVE * EQT13 POINTER TO EXTENSION * EQT14 SAME AS STANDARD * EQT15 SAME AS STANDARD * * *** EQT EXTENSION *** * * EQT16 EQT18 SAVE * EQT17 EQT19/EQT21 SAVE * EQT18 CURRENT TRACK * EQT19 CURRENT OFFSET * EQT20 FILE EXTENSION # * EQT21 CURRENT SECTOR # * EQT22 TRANSFER COUNTER * EQT23 CURRENT PACKING BUFFER ADDRESS * EQT24 BEGINNING TRACK IN THIS EXTENT * EQT25 BEGINNING SECTOR IN THIS EXTENT * EQT26 # OF SECTORS IN THE FILE (AND EACH EXTENT) * EQT27 TR/LU DIRECTORY ADDRESS OF * EQT28 OFFSET/SECTOR MASTER ENTRY. * EQT29 ID SEGMENT ADDRESS OF PGM REQUESTING INPUT CHECK * FILE COUNTER FOR SPOUT (ALWAYS NEGATIVE) * EQT30 # OF SECTORS PER TRACK * EQT31 RECORD COUNT * EQT32 SPOUT CLASS PARAMETER 1 * EQT33 SPOUT CLASS PARAMETER 2 * * * EXT $LIST RTE PROGRAM SCHEDULING EXT $XSIO RTE SYSTEM I/O EXT $XEQ SYSTEM IDLE LOOP EXT $ETEQ RTE - SETUP UP EQT ON BASE PAGE IFZ EXT $DVM IN RTE III TO SETUP USER MAP EXT $RSM IN RTE III TO RESTORE PREVIOUS MAP XIF ******************** * ERROR EXITS * ******************** * * REJECT REQUEST ERROR CODES (CAUSE IOXX ERROR REPORTS) * * XX = 20 ATTEMPT TO READ A WRITE ONLY FILE * = 21 ATTEMPT TO READ PAST EOF * = 22 SECOND ATTEMPT TO READ A JCL RECORD (FIRST RETURNS EOF) * = 23 ATTEMPT TO WRITE ON A READ ONLY FI3LE * = 24 ATTEMPT TO WRITE PAST EOF (OR SPOOL FILE OVERFLOW) * = 25 REQUEST ON A EQT THAT HAS NOT BEEN SET UP WITH A FILE. * * EOF EXITS MADE ON READ OR WRITE REQUESTS (SEE BELOW) * * TLOG = 0 STANDARD EOF ALL OK IF READ, IF WRITE OF # 0 RECORD * IMPLIES FILE IS FULL. NEXT ATTEMPT TO WRITE WILL * CAUSE IO24 (SEE ABOVE) * = -1 EOF WAS A -2, MEANS FILE WAS TERMINATED FOR OVERFLOW * = -5 SAME AS FMGR -5 ERROR I.E. NO EXTENT ON READ OR LENGTHS * AT THE ENDS OF THE RECORD DON'T MATCH. HED SPOOL MONITOR DRIVER REQUEST DECODE SECTION IS43 NOP JSB EXEQT LDA EQT27,I IS THIS SPOOL SZA,RSS EQT INITIALIZED? JMP ABORT NO - REJECT THE CALL. LDA EQT8,I STA EQT10,I CLB SSA,RSS JMP WDS * CMA,INA SLA,ARS INA STA EQT8,I LDB D4 WDS CMA SAVE NEG. OF # OF WORDS TO STA EQT22,I WORDS TO TRANSFER LDA EQT5,I CLEAR EOF BIT. IOR D128 XOR D128 STA EQT5,I LDA EQT11,I AND DISPM IOR B LDB A IF LAST EXIT WAS WITH BATCH CHECK RBL,ELB SEZ,RSS WELL WAS IT? JMP ST11 NO PROCEED * LDB EQT1,I YES IS THIS THE KEEPER OF THE CPB EQT29,I KEYS?? AND CLEOF YES CLEAR THE EOF FLAGS ST11 STA EQT11,I INITIALIZE EQT11 ALF,SLA HOLDING I/O TO THIS LU. JMP ABORT YES. AN ABORTING ERROR (SPOUT KNOWS) * LDA EQT18,I SAVE CURRENT FILE LOCATION STA EQT16,I IN CASE AN EXTENT IS NEEDED LDA EQT19,I AND NOT AVAILABLE AND B377 KEEP LOW BITS OF LENGTH (ITS <0) ALF,ALF IOR EQT21,I STA EQT17,I * LDA EQT6,I AND B77 LDB D20 SET UP THE ERROR CODE RBR,ELB 20 NORMAL, 21 IF POSSIBLE BATCH CHECK CPA D1 JMP RR READ REQUEST * LDB D23 SET FOR WRITE ERRORS CPA D2 JMP WR WRITE REQUEST * * COME HERE FOR CONTROL REQUEST * LDA EQT11,I ALF,ALF READ ONLY FILE? SSA JMP CR1 YES. * AND TFLAG DOES FILE HAVE HEADERS? SZA JMP CR1 NO. INTERPRET REQUEST. * STA EQT8,I SET UP TO PUT THE CONTROL CMA INFORMATION IN THE BUFFER STA EQT22,I TO BE WRITTEN OUT. JMP WR * CR1 LDA EQT6,I GET THE CONWD. RRR 6 LOSES B AND B77 ISOLATE CONTROL FUNCTION CMA,INA,SZA,RSS DECODE THE REQUEST JMP ILL ZERO IS A BAD GUY. * LDB D23 INA,SZA,RSS 1 IS EOF JMP WREOF SO OFF TO THE EOF WRITER * INA,SZA,RSS 2 IS BACK SPACE RECORD JMP BSREC SO OFF THE THE BACK SPACE ROUTINE * INA,SZA,RSS 3 IS FORWARD SPACE RECORD JMP FSREC SO GO DO THAT * INA,SZA,RSS 4 IS REWIND JMP RWIND SO OFF TO DO IT * INA,SZA 5 IS ALSO REWIND CPA N7 14 IS BACKSPACE FILE BUT ONLY ONE SO REWIND RWIND CCA,RSS OFF TO IT. * JMP ILL NONE OF THE ABOVE CAN NOT DO IT * STA EQT20,I REWIND SPOOL FILE BY CALLING THE LDA B5000 EXTND PROGRAM TO GET JMP GTEXT EXTENT 0 (MASTER ENTRY). * * * RETURN TO RW2 AFTER EXTND CALL OR FROM BACKSPACE. * RW2 LDA DM128 MAKE SURE ALL POINTERS STA EQT19,I ARE CONSISTENT WITH * CLA CLEAR THE RECORD COUNT RW3 STA EQT31,I LDA EQT11,I CLEAR EOF BIT IF SET. AND CLEOF STA EQT11,I CLB RETURN A CLEAR TLOG JMP POST1 * ILL LDA D2 NONE OF THE ABOVE JMP IS43,I REJECT REQUEST * ABORT LDA D25 SEND ABORT ERROR IO25 JMP IS43,I RETURN * DISPM OCT 70630 D23 DEC 23 D25 DEC 25 D20 DEC 20 TFLAG OCT 10000 N7 DEC -7 B4000 OCT 4000 CLEOF OCT 117777 j B5000 OCT 5000 B77 OCT 77 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 * EXTST NOP IOR EQT11,I SET THE RETURN VECTOR STA EQT11,I IN EQT 11 LDB $MPID ADB D15 EXTND. DO SO ONLY LDA B,I IF DORMANT, ELSE WAIT. AND D15 SZA JMP NTRDY * JSB $LIST SCHEDULE THE EXTND PROGRAM OCT 101 $MPID NOP SET TO EXTND'S ID ADDRESS BY GASP LDB $MPID SET UP THE PRAMS INB CLA,INA STA B,I INB LDA EQT1 STA B,I INB RETURN WITH B POINTING TO THIRD PRAM. JMP EXTST,I * B3701 OCT 3701 D15 DEC 15 * BSREC LDA EQT11,I IF AT A REAL EOF RAL,RAL THEN SSA JMP BSR0 JUST SET UP THE POINTERS * CCA BACKSPACE ROUTINE JSB BSPTO BACK UP THE POINTER LDA SAVE,I GET THE TRAILING LENGTH WORD CMA SET TO BACK OVER THE RECORD JSB BSPTO DO IT BSR0 CCA BACK UP THE RECORD POINTER ADA EQT31,I BY ONE JMP RW3 GO SET AND EXIT HED SPOOL MONITOR DRIVER BACKSPACE POINTER ROUTINE BSPTO NOP BACKSPACE 'A' WORDS IN THE FILE LDB BSPTO SAVE ENTRY POINT IN CASE STB EQT12,I WE ARE INTERRUPTED. ADA EQT19,I DECREMENT THE BUFFER OFFSET CMA SET FOR DIVIDE CLB SET FOR DIVIDE DIV D128 A IS BLOCK OFFSET, B NEW BUFFER OFFSET CMB SET BUFFER OFFSET NEGATIVE STB EQT19,I SET THE BUFFER OFFSET CMA,INA,SZA,RSS SET BLOCKS NEGATIVE JMP BSP1 IF ZERO THEN IN SAME BUFFER * STA SAVE SAVE THE BLOCK OFFSET JSB SUBT GET CURRENT SECTOR POSITION ADA SAVE ADJUST TO NEW ADA SAVE (IT WAS BLOCKS REMEMBER) CLB SET FOR DIVIDE CMA,SSA,INA SET POS. NUMBER TO GO BACK JMP BSP2 SAME EXTENT GO SET UP * DIV EQT26,xI A= # EXTENTS BACK, B= SECTOR OFFSET IN THAT EXTENT SZB ADJUST IF ZERO REMAINDER INA SET UP TO GO CMA ADA EQT20,I BACK AND GET STA EQT20,I THE EXTENT. INA IF LESS THAN SSA -1 THEN JMP RWIND JUST REWIND * CMB,INB,SZB ADB EQT26,I SAVE INDEX INTO STB EQT17,I THE EXTENT. BS13 LDA B4000 GET THE RETURN VECTOR JMP GTEXT GO GET THE EXTENT * BSP2 CMA,INA,RSS SET POSITIVE OFFSET BS10 LDA EQT17,I RETURN FROM EXTENT TO HERE B40 CLE CLEAR E FOR OVERFLOW TEST ADA EQT25,I TAKE INDEX FROM BEGINNING CLB,SEZ,CLE OF TRACK WHERE THE INB STEP B IF OVERFLOW DIV EQT30,I CURRENT EXTENT BEGINS. ADA EQT24,I FIND OUT HOW MANY STA EQT18,I TRACKS TO ADVANCE. STB EQT21,I SAVE CURRENT TRACK AND SECTOR. BSP1 CLE SET FOR READ ACCESS JMP BSCOR MAKE PRESENT AND RETURN HED SPOOL MONITOR DRIVER READ ROUTINE FSREC CLA FAKE OUT THE READ STA EQT8,I ROUTINES SO THAT INA THEY WILL FORWARD STA EQT6,I SPACE ONE RECORD. CMA,INA STA EQT22,I * RR LDA EQT6,I CPA B3701 IS THIS REALLY A POST REQUEST? JMP POST YES. * LDA EQT11,I CHECK IF FILE IS WRITE ONLY. ALF,ALF SLA JMP EOFRT SEND BACK IO20. * AND B40 ALREADY DONE AN EOF ON INB SET FOR EOF # 2 ERROR SZA THIS FILE? JMP EOFRT * JSB GETRD GET READY TO ACCESS THE BUFFER * LDA SAVE,I GET AND SAVE LENGTH OF STA EQT10,I DISK RECORD. STA B SET IN B IN CASE EOF SSA EOF I.E. LESS THAN 0 JMP EORET YES EOF RETURN. * ADA EQT22,I # OF WORDS LEFT IN RECORD SSA,RSS IF BUFFER PROVIDED IS TOO SHORT JMP STFLG THEN JUST USE IT * om STB EQT8,I ELSE SAVE TOTAL # WORDS TO BE CMB TRANSFERRED. STB EQT22,I SET TRANSFER COUNTER. STFLG JSB PUSH PUSH THE BUFFER ADDRESSES LDB EQT29,I GET THE BATCH CHECK FLAG SZB IF ZERO OR CPB EQT1,I CURRENT USER RSS SSB OR NEGATIVE JMP EORT ALL OK GOT TEST FOR END OF RECORD * LDA SAVE,I IF THIS IS A ":" HE IS AND MASKL IN DEEP CPA COLON JMP BINF SHIT, HE BLEW IT * EORT ISZ EQT22,I ALL WORDS MOVED?? JMP TRWD NO GO MOVE A WORD * LDA EQT10,I SET UP TO SKIP ANY RESIDUE CMA AND TO GET THE LAST WORD ADA EQT8,I STA EQT22,I SET COUNT RCONT LDA SAVE,I HANG ONTO THIS WORD. AT END STA EQT7,I OF RECORD, IT WILL CONTAIN LENGTH. JSB PUSH ADVANCE TO END OF RECORD. ISZ EQT22,I FINISHED? JMP RCONT NO GET THE NEXT ONE * LDA EQT7,I YES DO LINE LENGTHS SURROUNDING CPA EQT10,I THIS RECORD MATCH? JMP NORML YES - EVERYTHING NORMAL. * ERN5 LDB N6 SET UP FOR EOF WITH PREJUDICE (-5) JMP EORET NO MATCH - SEND EOF STATUS. * * N6 DEC -6 * TRWD LDB EQT7,I GET THE WORD ADDRESS LDA SAVE,I GET THE WORD STA B,I SAVE IN USER BUFFER ISZ EQT7,I STEP THE USER BUFFER ADDRESS JSB PUSH PUSH MY ADDRESSES JMP EORT GO TEST FOR END HED SPOOL MONITOR DRIVER POSITION TO NEXT WORD ROUTINES PUSH NOP ROUTINE TO PUSH THE BUFFER ADDRESS ISZ SAVE PUSH THE BUFFER ADDRESS ISZ EQT19,I CHECK THE BUFFER COUNT JMP PUSH,I ALL OK SO CONTINUE * LDA PUSH NEED A NEW SECTOR SO SAVE STA EQT12,I THE RETURN ADDRESS LDA D2 ADD 2 TO THE ADA EQT21,I SECTOR ADDRESS CPA EQT30,I END OF TRACK?? CLA YES SET TO ZERO STA EQT21,I RESET THE SECTOR SZA,$RSS IF FIRST SECTOR ISZ EQT18,I BUMP THE TRACK LDA DM128 SET THE BUFFER POINTER BACK STA EQT19,I TO THE FIRST WORD JSB SUBT CHECK IF END OF EXTENT CPA EQT26,I WELL JMP RDEXT YES GET NEXT EXTENT * JMP XCOR STILL IN FILE GO GET THE BUFFER * RDEXT LDA B3000 NOT IN FILE, SO GET AND EXTENT GTEXT JSB EXTST GET A FILE EXTENSION. LDA EQT6,I CHECK IF WRITE AND D2 ISOLATE READ BIT (0 IF READ) ADA D6 USE 8 FOR WRITE 6 FOR READ STA B,I PUT IN THIRD EXTND PRAM JMP WTOUT GO AWAY FOR A WHILE. * GETRD NOP THIS ROUTINE MAKES SURE THE BUFFER IS LDB GETRD IN CORE AND ADDRESSABLE STB EQT12,I SET RETURN ADDRESS XCOR LDB EQT6,I WSET E FOR THE INCOR CALL RBR,ERB 0= READ, 1= WRITE,CONTROL BSCOR JSB INCOR GO GET THE SECTOR LDA EQT19,I SET UP THE BUFFER POINTER ADA D132 EQT19 STARTS AT -128 AND ADA EQT23,I BUFFER IS 4 WORDS BEYOND EQT23 STA SAVE SET THE POINTER LDB EQT12,I GET THE RETURN ADDRESS JMP B,I AND CONTINUE HED SPOOL MONITOR DRIVER TIME DELAY EXIT / CONSTANTS B3000 OCT 3000 DM128 DEC -128 * NTRDY LDA N4 SET TIME OUT SO THAT WE STA EQT15,I CAN GET BACK IN HERE. LDA EQT4,I IOR TFLAG SET THE HANDLE-OWN-TO FLAG STA EQT4,I WTOUT LDA EQT11,I RAR,SLA,RAL IFN JMP $XEQ GO TO SYSTEM IDLE LOOP. XIF IFZ JMP WT1 IF IN RTE III. XIF * IOR D2 STA EQT11,I CLA JMP IS43,I * IFZ WT1 JSB $RSM IN RTE III, RESTORE PREVIOUS JMP $XEQ MAP AND GO TO SYSTEM IDLE LOOP. XIF * MASKL OCT 177400 COLON OCT 35000 N4 DEC -4 B20K OCT 20000 D6 DEC 6 * EQT1 EQU 1660B EQT4 EQU 1663B EQT5 EQU 1664B EQT6 EQU 1665B EQT7 EQU 1666B EQT8 EQU 1667B EQT9 EQ" U 1670B EQT10 EQU 1671B EQT11 EQU 1672B EQT12 EQU 1771B EQT13 EQU 1772B EQT15 EQU 1774B EQT16 NOP EQT17 NOP EQT18 NOP EQT19 NOP EQT20 NOP EQT21 NOP EQT22 NOP EQT23 NOP EQT24 NOP EQT25 NOP EQT26 NOP EQT27 NOP EQT28 NOP EQT29 NOP EQT30 NOP EQT31 NOP EQT32 NOP EQT33 NOP * * * EOFLG NOP LDA EQT5,I SET EOF FLAG IN EQT5. IOR D128 STA EQT5,I LDA EQT11,I SET FLAG TO INDICATE IOR B20K EOF ALREADY SENT ONCE. STA EQT11,I JMP EOFLG,I * EOFRT LDA EQT5,I SET THE IOR D128 EOF FLAG STA EQT5,I * LDA B GET THE RETURN CODE JMP IS43,I * * THE FOLLOWING ROUTINE FINDS OUT THE DIFFERENCE * IN SECTORS BETWEEN THE CURRENT POSITION AND * THE BEGINNING OF THIS EXTENT. * RETURNS THE RLEATIVE SECTOR OF CURRENT ADDRESS SECTOR * SUBT NOP LDA EQT24,I HOW MANY TRACKS READ WRITTEN? CMA,INA ADA EQT18,I GET RESULT IN SECTORS. MPY EQT30,I LDB EQT25,I ADD NUMBER OF SECTORS TO CMB,INB GET TOTAL. ADA B ACCUMULATE ADA EQT21,I JMP SUBT,I HED SPOOL MONITOR DRIVER POST ROUTINES * COME HERE TO POST BUFFERS BEFORE SPOOL CLOSE. * POST6 LDB EQT23,I SHOW BUFFER EMPTY AS IT MAY NOT CLA BE THE SAME AS THE INB DISC ANY MORE STA B,I SET LU TO ZERO TO CLEAR POST4 LDB EQT7,I ADVANCE TO THE NEXT BUFFER RBL FIRST THE BIT MAP LDA EQT23,I NOW THE ADDRESS ADA D132 JMP POST2 CONTINUE THE FLUSH * D132 DEC 132 * POST LDA PKBUF MUST FIND ALL BUFFERS CLB,INB THAT NEED TO BE WRITTEN. POST2 STB EQT7,I LDB A,I MAKE SURE WE DON'T STA EQT23,I CPB D5 POST A BUFFER THAT IS JMP POST4 BEING READ OR WRITTEN. * SSB JMP POST1 ALL FINISHED. * LDA WRBUF DOES THIS NEED TO AND EQT7,I BE WRI2<:6TTEN OUT. CCE,SZA JMP POST6 NO. GO CLEAR THE INCORE FLAG IN CASE * JSB SXSIO YES - DO IT. JMP NTRDY * LDB EQT23,I INDICATE THAT THE BUFFER LDA D5 IS UNAVAILABLE BY SETTING STA B,I THE AGE WORD. JSB IOCAL,I LDB EQT23,I FREE UP THE BUFFER CLA,INA FOR USE. STA B,I LDA EQT7,I INDICATE BUFFER NEED NOT IOR WRBUF BE WRITTEN. STA WRBUF JMP POST4 LOOK FOR MORE BUFFERS. HED SPOOL MONITOR DRIVER CLEAN UP AND EXIT CODE BINF CCA BATCH CHECK ':' FOUND SO JSB BSPTO BACK SPACE TO LENGTH WORD FOR NEXT TIME LDA EQT11,I AND SET THE IOR B40K BATCH CHECK FAILED BIT STA EQT11,I IN THE EQT CCB SET TLOG FOR A 0 RETURN EORET JSB EOFLG SET EOF FLAGS INB SET B FOR TLOG POST1 STB EQT9,I SAVE B REGISTER. LDA EQT32,I NEED WE CALL BACK SPOUT? ALF,SLA RSS JMP POST5 * CSPT LDA B1000 SET UP RETURN VECTOR JSB EXTST AND GO GET EXTENT LDA EQT33,I SET THIRD PRAM = STA B,I 2'ED CLASS PRAM ADB N1 BACK UP TO 2'EXTND PRAM LDA EQT32,I AND SET TO FIRST CLASS STA B,I PRAM. XOR TFLAG CLEAR BIT WHICH INDICATES NEED STA EQT32,I TO CALL SPOUT. ADB N1 NOW SET FIRST EXTND PRAM TO CCA INDICATE STA B,I THIS IS A SPOUT WAKE UP LDB EQT9,I RESTORE THE TLOG. POST5 LDA D4 NO - DO IMMEDIATE COMPLETION. JMP IS43,I * B1000 OCT 1000 B40K OCT 40000 PKBUF DEF BUFS B377 OCT 377 D5 DEC 5 IOCAL NOP N1 DEC -1 SAVE NOP SAVE1 NOP TRSEC NOP FLU NOP WRBUF OCT 3 < HED SPOOL MONITOR DRIVER GET CURRENT BLOCK ROUTINES * THE FOLLOWING CHECKS AND MAKES SURE THE DESIRED * SECTOR IS IN CORE. THIS ROUTINE MAY CAUSE ONE OR MORE * EXITS TO WAIT FOR RESOURCES. * * ON ENTRY E = 1 INDICATES A WRITE, E = 0 A READ * ON EXIT THE REQUESTED SECTOR IS IN CORE * * THE RETURN ADDRESS MAY BE SAVED IN EQT9 IF INCOR IS EVER CALLED * FROM MORE THAN ONE LOCATION. * * THE RETURN VECTOR IS 2000. * * INCOR NOP LDA EQT11,I SAVE THE DIRECTION BIT RAL,ERA IN EQT11 BIT 15 STA EQT11,I INC0 LDA EQT27,I GET THE LU AND AND B77 ISOLATE IT STA FLU CLA,INA SET BEGINING BUFFER READ/WRITE FLAG LDB PKBUF GET BEGINNING ADDRESS OF BUFFERS. INC1 STB EQT23,I STB TRSEC LDB B,I LOOK AT 1ST WORD OF BUFFER. INB,SZB,RSS FINISHED? JMP INC4 YES. * ISZ TRSEC LOOK AT BUFFER PTR. TO LU. LDB TRSEC,I DOES IT MATCH THIS ONE? CPB FLU RSS YES TRY THE NEXT ONE JMP INC3 NO. * ISZ TRSEC LOOK AT TRACK #. LDB TRSEC,I CPB EQT18,I IS IT EQUAL TO THE JMP INC2 TRACK DESIRED? * INC3 RAL MOVE THE WRITE FLAG TO NEXT BUFFER LDB EQT23,I INDEX THE ADDRESS ADB D132 ALSO JMP INC1 TRY THE NEXT BUFFER * INC2 ISZ TRSEC LOOK ALSO AT LDB EQT21,I SECTOR POINTER. CPB TRSEC,I MATCH THE ONE DESIRED? RSS YES. JMP INC3 NO. * LDB EQT23,I GET THE AGE FLAG LDB B,I TO B CPB D5 BUFFER - IS BUFFER AVAILABLE? JMP INC5 NO - MUST WAIT UNTIL IT'S POSTED. * LDB EQT11,I BUFFER IS IN CORE CMA IF TO BE WRITTEN ON AND WRBUF SET THE PROPER FLAG SSB SKIP IF READ ACCESS STA WRBUF JMP OKRET GO EXIT WE ARE READY NOW * * * * THE FOLLOWING GRABS UP AN AVAILABLE BUFOAFER AND * CHECKS IF IT NEEDS TO BE WRITTEN OUT. * INC4 STB SAVE1 LDB PKBUF CLA,INA OK4 STA SAVE FIND LEAST RECENTLY USED BUFFR. LDA B,I ARE WE AT THE END OF SSA THE BUFFERS? JMP OK2 YES. PICK LEAST RECENTLY USED. * CPA D5 IS THE BUFFER AVAILABLE? JMP OK1 NO. * CMA,INA YES. KEEP LOOKING THROUGH. ADA SAVE1,I CHECK AGE AGAINST CURRENT SSA,RSS IS THIS BUFFER A POSSIBLE? JMP OK3 NO. AGE IT. * STB SAVE1 YES. SAVE THIS BUFFER'S ADDRESS. LDA SAVE SAVE BUFFER POSITION. STA FLU AND WRITE FLAG LOCATION JMP OK3 * OK2 LDB SAVE1 DID WE FIND A BUFFER? SZB,RSS JMP INC5 NO - WAIT FOR TIME OUT * LDA D5 YES - MARK BUFFER AS UNAVAILABLE. STA B,I STB EQT23,I SAVE CURRENT SMD BUFFER ADDRESS. LDA FLU GET THE BUFFER # BIT AND WRBUF ISOLATE MUST BE WRITTEN FLAG CMA,CLE,INA SET E IF MUST BE WRITTEN LDA WRBUF GET THE MUST WRITE FLAG WORD IOR FLU SET THE NO WRITE FLAG LDB EQT11,I READ OR WRITE? SSB SKIP IF READ ELSE XOR FLU CLEAR TO INDICATE MUST WRITE STA WRBUF PUT THE FLAG WORD BACK SEZ,RSS MUST WE WRITE THIS ONE OUT FIRST? JMP OKOUT NO. BYPASS THIS STUFF. * JSB SXSIO WRITE OUT THE BUFFER. JMP NOK NO AVAILABLE $XSIO CALL. * OKOUT LDB EQT23,I MARK BUFFER WITH NEW INFO. INB LDA EQT27,I PUT AND B77 LU STA B,I INB TRACK LDA EQT18,I STA B,I INB LDA EQT21,I AND SECTOR STA B,I IN BUFFER HEAD SEZ IF MUST WRITE THEN JSB IOCAL,I DO IT NOW LDA EQT11,I READ OR WRITE REQUEST? LDB EQT19,I IF READ OR WRITE FROM CPB DM128 OTHER THAN BEGINING OFBLOCK  SSA,RSS THEN MUST READ CLE,RSS MUST READ JMP OKRET NEED NOT READ GO EXIT * JSB SXSIO READ IN THE DESIRED SECTOR. JMP OK5 * JSB IOCAL,I DO THE READ OKRET CLA,INA SET AGE BACK ON BUFFER LDB EQT23,I THAT IS BEING USED. STA B,I JMP INCOR,I * NOK LDA FLU COULD NOT WRITE OUT A SELECTED BUFFER CMA SET AND WRBUF THE MUST BE WRITTEN FLAG JMP OK8 GO FREE THE BUFFER AND WAIT * OK3 LDA B,I IF AGE # 4 CPA D4 RSS ISZ B,I BUMP IT THEN OK1 ADB D132 INDEX TO THE NEXT BUFFER LDA B,I IS THER ONE?? SSA WELL? JMP OK2 NO GO SEE IF ONE WAS FOUND * LDA SAVE YES MOVE RAL THE FLAG AROUND JMP OK4 AND GO TEST THIS ONE * OK5 LDB EQT23,I NO XSIO CALL AVAILABLE INB FOR READ CLA CLEAR THE LU STA B,I AND MUST WRITE FLAGS LDA FLU AND IOR WRBUF OK8 STA WRBUF LDA D4 SET THE FREE FLAG LDB EQT23,I IN THE BUFFER STA B,I AND THEN INC5 LDA EQT11,I SET UP TO TIME OUT IOR B2000 SET RETURN VECTOR STA EQT11,I (RETURNS TO INC0) JMP NTRDY GO TAKE WAIT EXIT * B2000 OCT 2000 HED SPOOL MONITOR DRIVER XSIO CALLS AND SETUP ROUTINES * * THE FOLLOWING SUBROUTINE SETS UP ONE OF THE * CALLS TO $XSIO. SXSIO USES INFORMATION FROM THE * CURRENT PACKING BUFFER. * * CALLING SEQUENCE: * E=0 FOR READ, E=1 FOR WRITE * JSB SXSIO * RETURN NO AVAILABLE CALL * RETURN+1 CALL READY AND SET UP - E=1. * * SXSIO NOP CLA,SEZ,INA INA STA DFUNC SET UP FUNCTION BITS. LDA AVXSI IS THERE AN AVAILABLE $XSIO CALL? SZA,RSS JMP SXSIO,I NO - GO AWAY. * LDB XSI1 CLE,SLA,RSS GET AN AVAILABLE CALLING SEQUENCE. (0 LDB XSI2 STB IOCAL CLE,SLA,RSS BIT 0= CALL ONE, BIT 1= CALL TWO CLA,RSS IF USING CALL TWO THEN BOTH IN USE RAR,ELA USING CALL ONE CLEAR BIT 0 STA AVXSI RESET AVAILABLE-CALL SWITCH. ADB DOFF ADD THE OFFSET TO CALL PRAMS AREA LDA EQT23,I INA STA BUFR LDA A,I STA B,I PUT LU # IN CALLING SEQUENCE. ADB D3 LDA DFUNC STA B,I CCE,INB LDA B,I GET ADDRESS OF DISK CONTROL WDS. LDB BUFR ADB D3 STB A,I STORE BUFFER ADDRESS. ADA D2 STA BUFR ADB N1 LDA B,I GET SECTOR # AND STA BUFR,I PUT IT INTO QUADRUPLET. ADB N1 LDA B,I GET TRACK #. AND B377 IS IT LARGER THAN CPA B,I 256? ALF,SLA,ALF NO ROTATE AND SKIP JMP SXSI1 YES. * RAR FINISH THE ROTATE XOR BUFR,I NO - PUT TRACK AND STA BUFR,I #'S TOGETHER IN ONE CLA,RSS WORD. SXSI2 LDA B,I ISZ BUFR STA BUFR,I PUT IT INTO QUADRUPLET. ISZ SXSIO CCE SET E FOR RETURN JMP SXSIO,I * SXSI1 LDA BUFR,I MAKE A QUADRUPLE INSTEAD OF A TRIPLE. ELA,RAR SEPARATE TRACK AND STA BUFR,I SECTOR. JMP SXSI2 * DOFF ABS XSI12-XSIO1 OFFSET TO LU WORD OF XSIO CALL BUFR NOP DFUNC NOP XSI1 DEF XSIO1 XSI2 DEF XSIO2 AVXSI OCT 3 EQSV1 NOP EQSV2 NOP * COMP1 LDA EQSV1 HERE ON COMPLETION OF CALL 1 ISZ AVXSI SET CALL AVAILABLE AGAIN JSB SIOEX GO TO COMMON EXIT * XSIO1 NOP MUST FOLLOW (PASSES THE RETURN ADDRESS) LDA EQT1 SAVE THE CURRENT STA EQSV1 EQT ADDRESSBE CHANGED TO COMPENSATE. IFZ JSB $RSM IN RTE III, RESTORE PREV. MAP XIF JSB $XSIO XSI12 NOP LOGICAL UNIT #. DEF COMP1 COMPLETION ADDRESS. NOP LIST POINTER WORD. NOP CONTROL INFO.,REQUEST CODE. DEF DSCC1 DISK CONTROL WORDS. DEC 10 PRIORITY OF REQUEST. IFZ NOP MAP INFORMATION (RTE III) XIF LDA EQSV1 RESTORE THE EQT ADDRESSES EXSIO JSB $ETEQ AND THEN JMP WTOUT GO AWAY FOR A WHILE. * SIOEX NOP COMMON XSIO COMPLETION ROUTINE JSB $ETEQ RESTOR THE EQT ADDRESSES CPB D128 TRANMISSION ERROR?? RSS NO ALL OK JSB EOFLG YES SET EOF FLAGS JSB EXEQT SET THE REST OF THE EQT UP IFZ JSB $DVM IN RTE III, SET UP USER MAP. XIF LDB SIOEX,I GET THE RETURN ADDRESS JMP B,I AND RETURN * DSCC1 NOP BUFFER ADDRESS. D128 DEC 128 LENGTH OF BUFFER. NOP SECTOR. NOP TRACK. DEC 0 TERMINATES THE QUADRUPLET. * COMP2 LDA EQSV2 GET THE EQT ADDRESS ISZ AVXSI SET CALL 2 ISZ AVXSI AVAILABLE JSB SIOEX CALL THE COMMON EXIT * XSIO2 NOP LDA EQT1 SAVE THE STA EQSV2 EQT ADDRESS IFZ JSB $RSM IN RTE III, RESTORE PREV. MAP XIF JSB $XSIO XSI22 NOP LOGICAL UNIT #. DEF COMP2 COMPLETION ADDRESS. NOP LIST POINTER WORD. NOP CONTROL INFO., REQUEST CODE. DEF DSCC2 DISK CONTROL WORDS. DEC 10 PRIORITY OF REQUEST. IFZ NOP MAP INFORMATION (RTE III) XIF LDA EQSV2 JMP EXSIO GO SET EQT AND EXIT * TST1 EQU XSI12-XSIO1-XSI22+XSIO2 MUST BE EXACTLY ZERO TST2 EQU -TST1 OR CALL OFFSETS ARE NOT EQUAL * DSCC2 NOP BUFFER ADDRESS DEC 128 LENGTH NOP SECTOR. NOP TRACK. DEC 0 TERMINATES QUADRUPLET. * * THE FOLLOWING ROUTINE SETS UP POINTERS TO THE EQT EXTENSION. * EXEQT NOP LDA EQT13,I LDB N18 STB SAVE LDB ADR16 STA B,I INA INB ISZ SAVE JMP *-4 * JMP EXEQT,I HED SPOOL MONITOR DRIVER WRITE ROUTINES ADR16 DEF EQT16 N18 DEC -18 * * COME HERE FOR WRITE EOF REQUEST * WREOF ISZ EQT11,I SET EOF TO BE DONE FLAG * * HERE FOR WRITE REQUEST * WR LDA EQT11,I IF FILE IS READ-ONLY, ALF,ALF REJECT CALL. SSA JMP EOFRT * AND B40 ALREADY SENT AN EOF INB SET B FOR POSSIBLE ERROR SZA ON THIS FILE? JMP EOFRT * JSB GETRD GET READY TO WRITE THE RECORD LDA EQT11,I ARE LENGTHS TO BE WRITTEN? SLA IF JUST A WRITE EOF JMP WR1 GO WRITE IT * AND B20 ISOLATE THE STD. FILE BIT LDB EQT8,I GET LENGTH SZA IF STANDARD JMP STDFL SKIP THIS NONSENSE * ADB D2 BUMP BY TWO STB EQT8,I SAVE FOR THE SOUTH END OF STB SAVE,I THE RECORD AND SET IN FILE JSB PUSH PUSH THE RECORD POINTERS LDA EQT6,I GET THE CON WORD STA SAVE,I AND SET IT JSB PUSH PUSH THE RECORD POINTERS LDB EQT10,I GET THE LENGTH LDA EQT6,I IS CONTROL REQUEST? SLA NO SKIP LDB EQT7,I YES SET CONTROL EXTRA WORD STDFL STB SAVE,I IN TO THE BUFFER IT GOES JSB PUSH PUSH THE BUFFER POINTERS ISZ EQT22,I DONE?? JMP WR0 NO GO GET NEXT WORD * LDA EQT8,I END OF RECORD - WRITE LENGTH. STA SAVE,I JSB PUSH WR1 CCA WRITE AN EOF AFTER STA SAVE,I LAST LINE. LDA EQT11,I IF THIS WAS A EOF ONLY SLA THEN WR2 JSB EOFLG SET THE EOF FLAGS * NORML ISZ EQT31,I INCREMENT RECORD COUNT. LDB EQT8,I LDA EQT11,I RAR,RAR SLA MAKE SURE LENGTH IS CORRECTLY BLS RETURNED. JMP POST1 * WRf0 LDB EQT7,I MOVE USER'S WORD TO SMD BUFFER. ISZ EQT7,I LDB B,I JMP STDFL GO WRITE IT * B20 OCT 20 B7000 OCT 7000 HED SPOOL MONITOR DRIVER COMPLETION SECTION CS43 NOP JSB EXEQT LDA EQT11,I AND B7000 ISOLATE THE RETURN VECTOR STA B STASH IT IN B XOR EQT11,I CLEAR IT IN EQT 11 STA EQT11,I AND RESET IT ASR 9 PUT VECTOR IN LOW B LDA EQT4,I WHERE DID WE COME FROM? ALF RAL,CLE,SLA,ERA JMP TMOUT TIME OUT INTERRUPT. * LDA EQT21,I RETURN FROM EXTND. ADB XTAB INDEX INTO TRANSFER TABLE JMP B,I RETURN TO CALLING FUNCTION * * XTAB DEF *+1,I EXTEND RETURN TRANSFER TABLE DEF CS43,I 0 INITIALIZE DEF CS43,I 1 SHOULD NEVER HAPPEN DEF CS43,I 2 SHOULD NEVER HAPPEN DEF RLP1 3 CHECK AND RETURN TO READ DEF BS10 4 CONTINUE BACKSPACE DEF RW2 5 CONTINUE RWIND. * RLP1 CPA N1 EXTEND ERROR? CCB,RSS YES - FAKE EOF. JMP XCOR NO - NORMAL CONTINUE. * LDA EQT17,I RESTORE THE ORGIONAL ASL 8 FILE POSITION STB EQT19,I ALF,ALF STA EQT21,I LDA EQT16,I STA EQT18,I LDB EQT6,I GET THE REQUEST CODE RBR,SLB IF WRITE OR CONTROL CLB,RSS SKIP JMP ERN5 READ SEND ERROR -5 * STB EQT8,I SET LENGTH TO ZERO JSB GETRD SET TO WRITE LDA N2 SET A -2 EOF MARK STA SAVE,I IN THE FILE JMP WR2 GO COMPLETE IT * * N2 DEC -2 * * TMOUT ALF,ALF ALF STA EQT4,I RESTORE EQT4 WITH TIME OUT BIT CLEARED ADB XTTAB INDEX INTO TIME OUT TRANSFER TABLE JMP B,I AND DISPATCH THE TIME OUT * * XTTAB DEF *+1,I TIME OUT VECTOR TABLE DEF POST 0 POST WAIT FOR XSIO CALL DEF CSPT 1 WAKE UP SPOUT RETURN g0.* DEF INC0 2 INCOR ROUTINE WAIT DEF RDEXT 3 READ EXTENT DEF BS13 4 BACKSPACE PROCESSOR DEF RWIND 5 REWIND * * N.SEQ NOP * * BUFFERS FOR PACKING. * * NOTE: THE BUFFER PUSHING ALGORITHMS WILL * HANDLE A LARGER NUMBER OF BUFFERS. * BUFS OCT 4 AGE WORD. OCT 0 LOGICAL UNIT #. OCT 0 TRACK #. OCT 0 SECTOR #. BSS 128 BUFFER AREA. OCT 4 AGE WORD. OCT 0 LOGICAL UNIT #. OCT 0 TRACK #. OCT 0 SECTOR #. BSS 128 BUFFER AREA. DEC -1 MARKS END OF BUFFERS. A EQU 0 B EQU 1 END 0 G_ 92002-18004 1805 S 0122 EXTND (GET FILE EX)              H0101 QASMB,R,L,C,Z ASSEMBLE STATEMENT FOR RTE III *ASMB,R,L,C,N ASSEMBLE STATEMENT FOR RTE II HED EXTND ROUTINE * NAME: EXTND * SOURCE: 92002-18004 (RTE II) 92060-18010 (RTE III) * RELOC: 92002-16004 (RTE II) 92060-16010 (RTE III) * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * IFZ NAM EXTND,17,10 92060-16010 REV.1631 760622 XIF IFN NAM EXTND,1,10 92002-16004 REV. 1631 760622 XIF * IFN ENT SP.CL XIF IFZ SUP EXT SP.CL XIF * EXT EXEC,RMPAR,$MPID,$LIBR,$LIBX EXT $PVCN,$CIC,$YCIC * IFN SP.CL DEC 0 XIF FUNC BSS 1 EQTAD BSS 1 ETYPE BSS 5 * EXTND JSB RMPAR DEF *+2 DEF FUNC LDA FUNC SZA INITIALIZE CALL FROM GASP? JMP EXTN2 NO. JSB $LIBR YES. SET UP $MPID FOR NOP DVS43 AND RETURN. LDA XEQT STA $MPID JSB $LIBX DEF *+1 DEF *+1 TERM JSB EXEC TERMINATE EXECUTION. DEF *+2 DEF D6 * EXTN2 SSA JMP EXTN3 MUST CALL UP SPOUT. * * GET A FILE EXTENSION * LDA EQTAD GET EQT ADDRESS AND ADA D12 INDEX TO EQT EXTENSION. LDA 0,I ADA D4 GET CURRENT EXTENSION # (EQT20) LDB 0,I AND INCREMENT IT. INB STB TEMP6 ADA D7 PICK UP DIRECTORY ADDRESS STA DIRCT OF MASTER ENTRY. INA (EQT27 AND EQT28) STA DIRCT+1 CCA IS NEW EXTENT NUMBER CPB D256 GREATER THAN 256? z JMP EXTN4 YES - TAKE ERROR PATH. JSB EXEC CALL D.RTR TO GET DEF *+8 AN EXTENSION. DEF D23 DEF FMDR DEF 1717B DEF TEMP6 DIRCT BSS 2 DEF ETYPE JSB RMPAR GET PARAMETERS BACK DEF *+2 FROM D.RTR. DEF TEMP1 LDA TEMP1 EXTN4 JSB $LIBR NOP LDB DIRCT ADB M6 SSA,RSS ERRORS? JMP OK NO. CCA YES - PUT NEGATIVE # IN EQT21. STA 1,I JMP EXTNO GET OUT OF HERE. OK LDA TEMP5 PUT BEGINNING SECTOR AND B377 IN EQT21. STA 1,I ADB D4 ALSO IN EQT25. STA 1,I ADB M1 PUT BEGINNING TRACK # LDA TEMP4 IN EQT24. STA 1,I ADB M6 ALSO IN EQT18. STA 1,I INB INB LDA TEMP6 SAVE NEW STA 1,I EXTENSION # (EQT20). * * SET UP TO INTERRUPT DVS43. * EXTNO LDA RETPT SAVE RETURN POINT. STA $CIC CLA STA $PVCN CLEAR PRIVILEGED COUNTER. LDB EQTAD INDEX THROUGH EQT TO THE ADB D3 SELECT CODE AND LOAD IT. LDA 1,I AND B77 FAKE THE INTERRUPT TO THE IFZ SJP $YCIC DRIVER TO TELL IT WE ARE XIF IFN JMP $YCIC DRIVER TO TELL IT WE ARE XIF RETPT DEF TERM DONE. * EXTN3 JSB EXEC HAVE A REQUEST FROM SMD DEF *+8 TO CALL SPOUT BACK AND DEF D18 PASS IT THE SAVE CLASS DEF ZERO PARAMETERS. DEF ZERO DEF ZERO DEF EQTAD CLASS PARAMETERS PASSED DEF ETYPE FROM SPOUT TO SMD EQT. DEF SP.CL SPOUT CLASS ID. JMP TERM RETURN. * * STORAGE * XEQT EQU 1720B D6 DEC 6 TEMP1 EQU ETYPE TEMP2 EQU ETYPE+1 TEMP3 EQU ETYPE+2 TEMP4 EQU ETYPE+3 TEMP5 EQU ETYPE+4 TEMP6 EQU FUNC ZERO DEC 0 B77 OCT 77 B377 OCT 377 D3 DEC 3 D4 DEC 4 D7 DEC 7 D12 DEC r 12 D18 DEC 18 D23 DEC 23 D256 DEC 256 M1 DEC -1 M4 DEC -4 M5 DEC -5 M6 DEC -6 FMDR ASC 3,D.RTR * END EXTND 5 HP 92002-18005 1805 S 0122 JOB (JOB ENTRY MON)              H0101 nASMB,R,L,C HED JOB ROUTINE * NAME: JOB * SOURCE: 92002-18005 * RELOC: 92002-16005 * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM JOB,2,30 92002-16005 REV. 1805 760715 SUP * EXT EXEC SYSTEM CALLS EXT RMPAR PARAMETER RETRIEVAL EXT $PARS SYSTEM PARSE ROUTINE EXT OPEN FILE MANAGER OPEN EXT READF FILE MANAGER READ EXT WRITF FILE MANAGER WRITE EXT $LIBR CALL FOR PRIVILEGED OPERATION EXT $LIBX LEAVE PRIVILEGED OPERATION EXT CLOSE FILE MANAGER CLOSE FILE EXT REIO REENTRANT I/O ROUTINE EXT .DRCT PICK UP DIRECT ADDRESS EXT RNRQ RESOURCE NUMBER CONTROL EXT POST POST FILE BUFFER EXT .DFER MOVE THREE WORDS ROUTINE EXT LURQ LOCK LU ROUTINE EXT SPOPN SPOOL OPEN ROUTINE EXT $LUAV SPOOL LU TABLE * IDCB BSS 144 ONBF BSS 4 DO NOT REARRANGE THESE BUFFERS COMND BSS 16 BUFR2 BSS 17 BUFR BSS 41 SAVE BSS 1 SAVE1 BSS 1 RECNO BSS 1 RECNT BSS 1 FILNO BSS 1 SPLU BSS 1 IBUFL BSS 1 BUFL1 BSS 1 OLU OCT 401 * ORG IDCB PUT INIT CODE IN BUFFERS * BEM JSB RMPAR RETRIEVE PARAMETERS. DEF *+2 DEF COMND+5 LDA COMND+5 IS FIRST PARAMETER ASCII? SSA OR NEGATIVE JMP BEM2 FORGET INTERACTIVE SET UP * ADA CCOMP SSA,RSS JMP BEM2 YES. * LDA COMND+5 GET INPUT DEVICE LU. SZA,RSS MAKE DEVICE 5 THE DEFAULT. LDA D5 IOR CNWD STA CONWD  ADA B200 FORM DYNAMIC STATUS COMMAND WORD STA DYSTA SAVE IT JSB EXEC CHECK IF INTERACTIVE DEF INTYS DEVICE DEF D13 DEF CONWD DEF EQT5 DEF CLRN DEF LKRN INTYS LDA EQT5 GET THE TYPE AND TYPW ISOLATE LDB CONWD PRESET B FOR INTERACTIVE INTY0 SZA,RSS IF ZERO THEN INTERACTIVE JMP INT SO GO SET UP * CPA TYP05 05 RSS COULD BE MUST CHECK SUBCHANNEL CPA TYP07 07 RSS AGAIN CHECK SUBCHANNEL JMP BEM1 NOT INTERACTIVE CONTINUE * LDA LKRN GET THE SUBCHANNEL AND D7 ISOLATE THE LOW BITS JMP INTY0 GO TEST FOR ZERO * INT STB OLU SET AS OUTPUT LU TOO CLA STA RDREC SET TO PROMPT JMP BEM2 SKIP THE LU LOCK IF INTERACTIVE * BEM1 JSB LURQ LOCK THE LU IF NOT INTERACTIVE DEF BEM2 DEF D1 LOCK WITH WAIT DEF CONWD THIS LU DEF D1 ONLY ONE OF THEM BEM2 CLA STA EOJSW CLEAR EOJ SWITCH. JMP OPFL3 GET OUT OF DCB FOR OPEN * TST0 EQU COMND+10-* ERROR MEANS WE ARE ABOUT TO OVERLAY * ORG BUFR SKIP OVER THE RU PRAMS * OPFL3 JSB OPEN OPEN JOBFIL DEF *+6 DEF IDCB DEF IERR DEF JOBFL DEF IOPTN DEF ISECU CPA M8 DID WE SUCCEED? JMP OPFL3 KEEP TRYING. * SSA JSB JERR OPEN ERROR. RING BELLS. * LDA D17 JSB GTREC GET JOBFIL RECORD 17. LDA BUFR2 SAVE JOBFIL RN. STA JRN LDA BUFR2+14 SAVE RN FOR HOLDING INSPOOLING. STA WRN LDA BUFR2+1 STA RECNT SAVE RECORD COUNT. JMP CLEAN SKIP OUT OF BUFFERS ORR BACK TO STD. CORE * * THE FOLLOWING CODE CLEANS UP AFTER THIS PROGRAM IF IT WAS * ABORTED WHILE DOING AN INSPOOL. * * TO CLEAN UP WE MUST: * * 1. CALL SMP TO KILL THE SPOOL POOL FILE (CLEANS UP SMP'S RECORDS) * 2. OPEN AND CLOSE THE POOL FILE PURGING EXTENTS (GET BACK DISC) * 3. CLEAR THE BIT MAP BIT THAT SAYS THE FILE IS ASSIGNED * 4. CLEAR THE JOBFILE RECORD(RETURN IT TO POOL) * 5. CLEAR THE FLAGS IN JOBFIL RECORD 17 THAT SAY THESE THINGS * MUST BE DONE * * THIS CODE IS DONE IN SUCH AN ORDER THAT NO MORE HARM IS DONE * IF IT IS ABORTED AT ANY TIME SO WATCH OUT DON'T REARRANGE IT. * * YES I KNOW IT WOULD BE FASTER AND TAKE LESS CODE BUT WE NEED * FAIL SAFE OPERATION HERE. * * FLAGS KEPT IN REC 17 TO HELP: * * WORD 10 SPLCON REC # OF SPOOL CON ENTRY (SAFE EVEN AFTER REBOOT) * WORD 11 WORD ADDRESS OF BIT MAP BIT TO CLEAR * WORD 12 BIT TO CLEAR IN SPOOL POOL BIT MAP * WORD 13 JOBFIL RECORD NUMBER OF RECORD TO CLEAR * CLEAN JSB LKRNP POST AND LOCK THE RN LDA D17 GET A CLEAN JSB GTREC RECORD 17 LDB BUFR2+10 GET THE SPLCON RECORD NUMBER IF ONE SZB,RSS IS THEIR? JMP NOSP NO SKIP SMP CALL * JSB CLRN CLEAR RN FOR SMP JSB EXEC CALL SMP TO CLEAN UP ITS RECORDS DEF *+5 DEF D23 DEF SMPA DEF D13 KILL CODE DEF BUFR2+10 RECORD NUMBER JSB LKRNP POST AND LOCK THE RN LDA D17 GET THE RECORD AGAIN JSB GTREC CLB CLEAR FLAG TO SHOW STB BUFR2+10 WE HAVE CALLED JSB WRTRC WRITE IT AND JSB POST1 MAKE SURE IT GETS TO THE DISC NOSP LDA BUFR2+13 NOW GO GET THE SZA,RSS JOB RECORD IF ONE JMP NJREC NO JOB RECORD SKIP RELEASE * JSB GTREC GET THE RECORD JSB OPEN OPEN THE SPOOL FILE (CLOSES JOBFIL) DEF *+7 DEF IDCB DEF IERR DEF BUFR2+3 NAM FROM JOBREC DEF ZERO EXCLUSIVE OPEN DEF ISECU SAME SECURITY CODE DEF BUFR2+6 CARTRIDGE JSB CLOSE CLOSE IT AND TRUNCATE tEXTENTS DEF *+4 DEF IDCB DEF IERR DEF M8 NEGATIVE NO TO PURGE EXTENTS OPN2 JSB OPEN RE OPEN JOBFILE DEF *+6 DEF IDCB DEF IERR DEF JOBFL DEF IOPTN DEF ISECU CPA M8 OK? JMP OPN2 NO LOCKED TO ANOTHER * SSA ERROR? JSB JERR REPORT AND EXIT * CCA STILL HAVE JOB RECORD AND RN LOCK STA BUFR2 CLEAR USAGE FLAG JSB WRTRC WRITE IT OUT LDA D17 NOW RETRIEVE JSB GTREC RECORD 17 CLA CLEAR THE RECORD FLAG STA BUFR2+13 NJREC LDB BUFR2+11 GET THE OFFSET TO SZB,RSS THE BIT MAP JMP NBITS NONE * ADB DBUF INDEX TO THE WORD LDA BUFR2+12 GET THE BIT TO BE CLEARED CMA CHANGE TO AND MASK AND B,I CLEAR THE BIT STA B,I SET IT BACK CLA STA BUFR2+11 CLEAR THE PRESENTS FLAG NBITS JSB WRTRC WRITE IT OUT JSB CLRNP POST AND CLEAR THE RN * * END OF CLEAN UP CODE * LDA COMND+5 IS THE FIRST PARAMETER SSA NEGATIVE?? JMP TERM YES CALL WAS TO CLEAN UP ONLY * ADA CCOMP AN ASCII PARAMETER? SSA IF SO, TREAT AS A JMP RDREC SIMULATED XEQ. * * JSB EXEC READ THE STRING DEF STRTN DEF D14 DEF D1 DBUFX DEF BUFR DEF BUFLN STRTN SZB,RSS IF NO STRING JMP TERM JUST EXIT * LDA DBUFX GET THE BUFFER ADDRESS JSB $LIBR PARSE THE RECORD NOP JSB $PARS USE SYSTEM ROUTINE DEF ONBF JSB $LIBX DEF *+1 DEF *+1 GO DO THE XEQ THING JSB XEQQ DO XEQ THING JMP TERM GO EXIT * EQT5 NOP TYP05 OCT 2400 TYP07 OCT 3400 TYPW OCT 37400 DYSTA NOP * * RDREC JMP NACT IF NOT INTERACTIVE JUMP * JSB EXEC ELSE SEND A DEF NA+CT ";" DEF NWWC WRITE REQUEST DEF OLU AS A PROMPT DEF SCOL DEF M2 NACT NOP IGNORE ERRORS. JSB REIO READ A CARD (OR TAPE LINE). DEF *+5 DEF RCODE DEF CONWD DBUFR DEF BUFR DEF BUFLN STB IBUFL CMB,INB STB BUFL1 STA STAT SAVE STATUS WORD. STA LASTH CLEAR LAST HOLD FLAG RAL,CLE,ELA MOVE DOWN BIT TO E REG. ALF,RAL MOVE EOF BIT TO SIGN RAL POSITION. SSA JMP EOF EOF CONDITION. * SZB ZERO LENGTH? JMP PRS NO - NORMAL RECORD. * AND B70 IF DEVICE TYPE < 10 OR SEZ,CCE,SZA DEVICE NOT DOWN, THEN EOF. JMP NACT ELSE RETRY THE READ. * JMP EOF * WRIT NOP WRITE A RECORD ROUTINE JSB REIO WRITE THE CARD TO CURRENT SPOOL FILE. DEF *+5 DEF NWWC DEF ICNWD DEF BUFR DEF BUFL1 JSB JERR ERROR CONDITION - FLUSH THE JOB. * JSB TSTEX TEST EXTENT OVERFLOW JMP WRIT,I OK EXIT * JMP WRIT+1 TRY AGAIN IF NEEDED * PRS LDA BUFR AND MASKL CPA COLON IS THIS A BM COMMAND CARD? JMP PRCOM YES. PARSE IT. * OTHER CLA CPA EOJSW ARE WE READING IN A JOB? JMP RDREC NO. IGNORE THE CARD. * WRREC JSB WRIT WRITE THE CARD TO CURRENT SPOOL FILE. * LDA STAT HAVE WE AN EOF ALF,ALF CONDITION? SSA,RSS JMP RDREC NO - GO READ NEXT CARD. * AND B77 YES - IS THIS A PT READER? CPA RCODE RSS YES - DO AN EOF. JMP RDREC * JSB WAITM WRITE OUT A MESSAGE ASC 3,PT D7 DEC 7 MESSAGE LENGTH JSB EXEC NOW PAUSE UNTIL DEF CONT THE OPERATOR PUTS DEF D7 THE NEXT TAPE IN THE DEF ZERO AND SETS JOB GOING DEF RCODE AGAIN. CONT WJMP RDREC LOOK FOR MORE INPUT. * TSTEX NOP TEST FOR EXTENT OVERFLOW ALF,ALF GET EOF BIT TO SIGN SSA,RSS EOF SET? JMP TSTEX,I NO RETURN OK * JSB EXEC CAN USE EXEC CALL BECAUSE DEF *+3 THIS CALL JUST REMOVES THE EOF STATUS DEF D3 DEF BSCWD BACK SPACE TO BE READY TO RETRY * LDA LASTH HAVE WE ALREADY SENT THE MESSAGE? SZA,RSS JMP WEXT YES JUST WAIT * CLA SET FLAG TO SHOW ALREADY SENDT STA LASTH JSB WAITM SEND THE EXTENT WAIT MESSAGE ASC 3,EXTENT B11 OCT 11 9 WORDS * WEXT JSB WAIT WAIT FOR THE RN ISZ TSTEX TRY AGAIN JMP TSTEX,I EXIT IS P+2 * EOF LDA EOJSW HOPPER EMPTY OR EOT. SZA,RSS JMP TERM TERMINATE IF NOT READING A JOB. * CLA * STA BUFL1 WRITE 0 LENGTH RECORD. JMP WRREC * TERM JSB CLOSE DEF *+4 DEF IDCB DEF IERR DEF ZERO CLA,INA CLEAR JOBFIL RN IF NECESSARY. CPA JSTAT RSS JSB CLRN JSB EXEC TERMINATE THE BEM. DEF *+2 DEF D6 * * PRCOM LDA DBUFR JSB $LIBR PARSE A BM COMMAND. NOP LDB IBUFL JSB $PARS DEF COMND JSB $LIBX DEF *+1 DEF *+1 LDA BUFR XOR BUFR+1 GET SECOND TWO CHARS AND B377 XOR BUFR+1 ALF,ALF NOW HAVE TWO AFTER THE ':' CPA "EO" JMP EOJCD :EOJ * CPA "XE" JMP XEQ :XEQ * CPA "JO" RSS JMP OTHER * CLA :JOB CPA EOJSW JMP OPFIL * JSB EOJ CLOSE LAST SPOOLFILE. OPFIL JSB LKRNP JSB JSRCH FIND A JOB RECORD LDA D17 JSB GTREC GET JOBFIL RECORD 17. LDA M5 STA BUFR2+9 TRY TO FIND AN AVAILABLE LDA WD4AD STA CLRN CLA,INA SPOOL FILE  STA FILNO CLB,INB CCA STA CLEAR OLOOP LDA M16 STA BUFR2+11 ILOOP LDA CLRN,I AND B SZA,RSS JMP HAVIT * NOT1 RBL ISZ FILNO ISZ BUFR2+11 JMP ILOOP * ISZ CLRN ISZ BUFR2+9 JMP OLOOP * JSB POST1 NOHAV JSB CLRN WAIT UNTIL THERE IS AN JSB HLDIN AVAILABLE SPOOL FILE. JMP OPFIL * D10 DEC 10 "00" ASC 1,00 D3 DEC 3 SVBIT NOP * HAVIT ISZ CLEAR TEST IF FIRST AVAILABLE FILE RSS IF SECOND SKIP TO USE IT JMP NOT1 DO NOT USE FIRST ONE (LEAVE FOR OUT SPOOL) * LDA FILNO SET UP THE SPOOL USAGE FLAG CMA,INA DIVISION OF FILE # BY 16. ADA BUFR2+2 IS FILNO > # OF SPOOL SSA POOL FILES? JMP NOHAV YES - NO GOOD. * LDA CLRN,I NO - OK. XOR B FIX AVAILABILITY BITS. STB SVBIT SAVE BIT FOR REC 17 STA SAVFL SAVE THE NEW WORD LDA D18 HAVE AN AVAILABLE SPOOL FILE. JSB GTREC GET JOBFIL RECORD 18. CLB SET UP FOR DIVIDE LDA FILNO CONVERT THE FILE NUMBER TO ASCII DIV D10 ALF,ALF A HAS HIGH ORDER, B LOW ADA B ADA "00" ADD THE ASC '00' STA SAVE1 LDA BUFAD FIND THE LOCATION INFORMATION STA SAVE FOR THE FILE. RANGE LDA SAVE,I ALF,ALF ADA SAVE,I AND B377 CMA,INA ADA FILNO ISZ SAVE SSA JMP *+3 * ISZ SAVE JMP RANGE * LDA SAVE,I STA SAVE LDA DBUF2 JSB CLEAR LDA SAVE STA BUFR2+6 SAVE DISC LABEL. LDA SAVE1 STA BUFR2+5 LDA SPOL STA BUFR2+3 SAVE FIRST PART OF FILE NAME. LDA SPOL+1 STA BUFR2+4 LDB "I" FINISH SETTING UP THE JOBFIL JSB FJOBF ENTRY. JSB .DRCT DEF COMND JSB CLEAR JSB .DFER FORM  THE BUFFER TO PASS DEF COMND+2 TO THE SMP. DEF BUFR2+3 MOVE JOB LOCATION. LDA BUFR2+6 STA COMND+6 CARTRIDGE ID. LDA ISECU STA COMND+5 SECURITY CODE. LDA DFLAG STA COMND+8 DISPOSITION FLAGS. LDA RECNO JOBFIL RECD. # OF JOB. STA COMND+11 STA NUM WRITE THE JOB RECORD AND JSB WRTRC SET UP TO UPDATE LDA D17 RECORD 17 JSB GTREC AND LDA RECNO SET THE IN STA BUFR2+13 PROCESS FLAG LDA SAVFL SET THE SPOOL FILE STA CLRN,I IN USE FLAG LDA SVBIT GET THE BIT POSITION STA BUFR2+12 SET IT LDA DBUF COMPUTE THE BUFFER OFFSET CMA,INA TO THE BIT ADA CLRN AND STA BUFR2+11 SET THAT JSB WRTRC AND WRITE THE RECORD JSB CLRNP POST AND UNLOCK THE FILE * STUP2 CLA STA COMND+7 DRIVER TYPE. JSB SPOPN CALL TO OPEN THE SPOOL FILE DEF *+3 RETURN DEF COMND SET UP BUFFER DEF SPLU THE LU LDA SPLU GET THE LU THAT IS PASSED BACK SSA,RSS WAS SETUP SUCCESSFUL? JMP STUP1 YES, GO DO IT * JSB HLDIN NO WAIT UNTIL AN LU OR SUCH JMP STUP2 FREES UP. SMP WILL CALL BACK. * STUP1 STA EOJSW STA ICNWD SET CONTROL WORD FOR WRITES. ADA B200 SET UP A BACKSPACE STA BSCWD FOR EXTENT PROBLEMS JSB LKRNP LOCK UP THE JOB FILE LDA D17 AND GET THE JOB RECORD JSB GTREC AGAIN JSB .DRCT GET THE LU FROM DEF $LUAV THE LU TABLE LDB A,I GET LENGTH STB CLRN SET FOR COUNT NXTLU INA STEP TO LU LDB A,I GET THE LU INA STEP TO THE RECORD NUMBER RBL,CLE,ERB CLEAR SIGN IF SET CPB SPLU THIS THE LU? JMP FSPLU YES GO SET UP * ISZ CLRN STEP COUNT JMP NXTLU TRY NEXT ONE * " JSB JERR REPORT NOT FOUND ERROR * FSPLU LDA A,I GET THE RECORD NUMBER STA BUFR2+10 SET IN THE JOB FILE REC 17 JSB WRTRC WRITE IT OUT JSB CLRNP POST AND CLEAR THE RN JMP WRREC GO WRITE OUT THE JOB CARD. * SAVFL NOP BSCWD NOP B200 OCT 200 * WAIT NOP JSB RNRQ LOCK THE WAIT RN GLOBALLY. DEF *+4 WHEN A CONDITION IN SMP DEF D2 FREES AN LU OR A FILE OR DEF WRN A FULL OUTSPOOL QUEUE, SMP DEF SAVE CLEARS THIS RN SO THAT OTHER JSB RNRQ PROGRAMS CAN CONTINUE. DEF *+4 DEF D6 DEF WRN LOCK THE RN. DEF SAVE JMP WAIT,I * HLDIN NOP LDA HLDIN GET ADDRESS OF LAST CALL CPA LASTH SAME?? JMP HLD1 YES DON'T RESEND THE MESSAGE * STA LASTH NO SET NEW ADDRESS AND SEND THE MESSAGE JSB WAITM SEND WAIT ON SPOOL RESOURCE MESSAGE ASC 3,SPOOL D13 DEC 13 HLD1 JSB WAIT WAIT FOR IT JMP HLDIN,I RETURN * WAITM NOP MESSAGE FIXER AND SENDER JSB .DFER FIX UP THE MESSAGE DEF MES MOVE IN THE 3 WORDS DEF WAITM,I STA WAITM SET THE ADDRESS OF THE LENGTH JSB EXEC DEF *+5 DEF D2 DEF OLU DEF RESWT DEF WAITM,I ISZ WAITM ADVANCE THE RETURN ADDRESS AND JMP WAITM,I RETURN * LASTH NOP ADDRESS OF LAST HOLD * XEQ CLA CPA EOJSW IF THERE IS A JOB SPOOL RSS NOT COMPLETED, THEN END IT. JSB EOJ JSB XEQQ DO XEQ THING JMP RDREC GO GET NEXT RECORD * * XEQQ NOP XEQ SUBROUTINE JSB JSRCH SEARCH FOR A PLACE TO PUT THIS. LDA DBUF2 JSB CLEAR LDB "R" JSB FJOBF SET UP THE JOBFIL RECORD. LDB JNAMA GET JOB NAME ADDRESS LDA COMND+4 IF LU CPA D1 SUPPLIED LDB DCOM5 USE IT STB MVNAM SET ADDRESS JSB .DFER DEF BUFR2+3 MVNAM NOP USE CLEANED UP NAME LDA COMND+13 GET THE CR INFO STA BUFR2+6 AND SET IT JSB QUEUE WRITE IT OUT. JMP XEQQ,I RETURN * EOJCD CLA CPA EOJSW JMP RDREC * JSB WRIT WRITE THE EOJ RECORD JSB EOJP PROCESS THE EOJ JSB EXEC DO DYNAMIC STATUS DEF RTNST DEF D3 DEF DYSTA RTNST ALF,ALF RAL,RAL HOPPER EMPTY? SSA,RSS JMP RDREC NO CONTINUE * RAR,RAR ISOLATE DRIVER TYPE AND B73 CPA B11 CARD READER? (CHECKS 11 OR 15) JMP TERM YES - TERMINATE. * JMP RDREC NO CONTINUE * B73 OCT 73 * EOJ NOP JSB REIO PUT AN ":EOJ" IN THE BUFFER TO BE DEF *+5 DEF WCODE DEF ICNWD DEF EOJC DEF D2 JSB TSTEX TEST FOR EXTENT OVERFLOW RSS NO CONTINUE JMP EOJ+1 YES TRY AGAIN * JSB EOJP PROCESS THE EOJ JMP EOJ,I RETURN * EOJP NOP EOJ COMMON PROCESSOR JSB EXEC SCHEDULE THE SMP TO CLOSE THE DEF *+5 SPOOL FILE. PASS IT THE CLOSE DEF D23 CODE AND THE LU# OF THE SPOOL DEF SMPA DEF D4 DEF SPLU JSB LKRNP MAKE SURE BUFFER IS CLEAR LDA RECNO JSB GTREC GET APPROPRIATE JOBFIL RECORD. LDA BUFR2+2 GET THE STATUS AND B377 IN CASE GASP HAS BEEN HERE CPA "H" NOW IN HOLD? LDA "RH" YES MAKE "RH" CPA "I" WHAT IT SHOULD BE? LDA "R" YES SET "R" STA BUFR2+2 JSB QUEUE WRITE OUT AND Q THE JOBFIL RECORD. JSB LKRNP POST AND LOCK LDA D17 CLEAR THE INPUT IN PROGRESS JSB GTREC FLAG IN CLA RECORD STA BUFR2+10 STA BUFR2+11 STA BUFR2+12 17. STA BUFR2+13 JSB WRTRC SEND IT BACK TO THE DISC. JSB CLRNP UNLOCK THE FILE JMP EOJP,I RETURN * QUEUE NOP WRITE OUT JOB RECORD AND QUEUE IT JSB WRTRC WRITE IT OUT LDA BUFR2+2 GET STATUS CPA "RH" IF HELD JMP QUEUE,I JUST RETURN * LDA BUFR2 STA SAVE SAVE JOB PRIORITY. CLB CCA COMPUTE THE ADDRESS OF ADA RECNO THE QUEUE FLAG DIV D16 ADB DBUF CALCULATE THE BUFFER ADDRESS STB SAVE1 SAVE IT JSB GTREC GET THE RECORD LDA SAVE SET THE PRIORITY STA SAVE1,I IN THE QUEUE JSB WRTRC WRITE THE RECORD BACK OUT JSB POST1 POST THE FILE BUFFER. JSB CLRN CLA STA EOJSW JSB EXEC DEF *+4 SCHEDULE THE FILE MANAGER. DEF NWAIT DEF FLMAN DEF M5 JMP QUEUE,I * JMP QUEUE,I * "RH" ASC 1,RH "H" OCT 110 "I" OCT 111 "R" OCT 122 * WRTRC NOP JSB WRITF DEF *+6 DEF IDCB DEF IERR DBUF2 DEF BUFR2 DEF D16 DEF NUM LDA IERR SSA JSB JERR * JMP WRTRC,I * GTREC NOP STA NUM JSB READF DEF *+7 DEF IDCB DEF IERR DBUF DEF BUFR2 DEF D16 DEF LEN DEF NUM LDA IERR SSA JSB JERR * JMP GTREC,I * LEN BSS 1 NUM BSS 1 * POST1 NOP JSB POST DEF *+2 DEF IDCB JMP POST1,I * CLRNP NOP JSB POST1 JSB CLRN JMP CLRNP,I * LKRNP NOP JSB POST1 JSB LKRN JMP LKRNP,I * CLRN NOP JSB RNRQ DEF *+4 DEF D4 DEF JRN DEF JSTAT JMP CLRN,I * LKRN NOP JSB RNRQ DEF *+4 DEF RCODE DEF JRN DEF JSTAT JMP LKRN,I * JSRCH NOP JSR1 JSB POST1 JSB LKRN LDA D18 SEARCH FOR FREE JOBFIL RECORD. JSR2 INA JSB GTREC  LDA BUFR2 SSA,RSS JMP *+4 * LDA NUM STA RECNO JMP JSRCH,I * LDA NUM CPA RECNT RSS JMP JSR2 * JSB POST1 JSB CLRN NONE AVAILABLE. WAIT UNTIL JSB HLDIN THERE IS. JMP JSR1 * CLEAR NOP LDB M16 STB FJOBF CLB STB A,I INA ISZ FJOBF JMP *-3 * JMP CLEAR,I * FJOBF NOP STB BUFR2+2 LDB COMND+8 IF PRIOITY IS ASCII CPB D2 THEN USE DEFAULT CLA,RSS LDA COMND+9 STORE PRIORITY, STATUS, JOB NAME, SZA,RSS LDA DEFPR DEFAULT PRIORITY, IF NECESSARY. CPA NSPRM LDA DEFPR STA BUFR2 LDA M18 ADA RECNO STA BUFR2+1 STORE JOB #. LDA M6 STA CNTR LDB DCOM5 CLE,ELB STB UPTR LDB JNAMA CLE,ELB STB PPTR FXNM1 LDA BLANK LDB UPTR SZB JSB UNPAK CPA RCOLN JMP BLFIL * SZA,RSS JMP BLFIL * JSB PAK ISZ CNTR JMP FXNM1 * JMP FJOBF,I * BLFIL CLB STB UPTR JMP FXNM1 * JNAMA DEF BUFR2+7 CNTR BSS 1 M6 DEC -6 * UPTR NOP UNPAK NOP LDB UPTR ISZ UPTR CLE,ERB LDA B,I SEZ,RSS ALF,ALF AND B377 JMP UNPAK,I * PCHAR NOP PPTR NOP PAK NOP STA PCHAR LDB PPTR ISZ PPTR CLE,ERB LDA B,I SEZ ALF,ALF AND B377 ALF,ALF IOR PCHAR SEZ,RSS ALF,ALF STA B,I JMP PAK,I * JERR NOP JSB EXEC SEND ERROR MESSAGE DEF EXMS DEF D2 DEF OLU DEF TERMM DEF D7 EXMS JMP TERM * A EQU 0 B EQU 1 DEFPR DEC 9999 NSPRM ASC 1,NS NWAIT OCT 100012 FLMAN ASC 3,FMGR D5 DEC 5 SPOL ASC 2,SPOL TERMM ASC 7,END JOB ABNORM DCOM5 DEF COMND+5 CCOMP OCT -20000pNLH BLANK OCT 40 RCOLN OCT 72 M2 DEC -2 SCOL ASC 1,;_ PROMPT RCODE DEC 1 IOPTN OCT 3 WCODE DEC 2 D2 EQU WCODE DFLAG OCT 40021 B70 OCT 70 B77 OCT 77 B377 OCT 377 M5 DEC -5 BUFAD DEF BUFR2 BUFLN DEC -80 EOJSW BSS 1 JRN BSS 1 WRN BSS 1 JSTAT BSS 1 NWWC OCT 100002 MASKL OCT 177400 COLON OCT 35000 CNWD OCT 400 CONWD BSS 1 ICNWD BSS 1 STAT BSS 1 D6 DEC 6 D23 DEC 23 D4 DEC 4 ZERO DEC 0 D16 DEC 16 D17 DEC 17 D18 DEC 18 M18 DEC -18 WD4AD DEF BUFR2+4 IERR BSS 1 SMPA ASC 3,SMP JOBFL ASC 3,JOBFIL ISECU OCT 123456 M8 DEC -8 M16 DEC -16 "JO" ASC 1,JO "EO" ASC 1,EO EOJC ASC 1,:E ASC 1,OJ "XE" ASC 1,XE D1 DEC 1 D14 DEC 14 RESWT ASC 6,JOB WAIT ON SPOOL RESOURCE MES ASC 3,SPOOL ASC 4,RESOURCE. * ORG * END BEM N I[ 92002-18006 1826 S 0722 FMP LIBRARY              H0107 ASMB,R,L * NAME: $BALB * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM $BALB 92002-16006 REV.1826 780419 END ASMB,R,L,C HED CREAT * NAME: CREAT * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM CREAT,7 92002-16006 741022 ENT CREAT EXT CLOSE,$OPEN,.ENTR EXT NAM..,RMPAR EXT EXEC EXT D.R SUP * * * CREAT IS THE FILE CREATION MODULE OF THE REAL TIME * FILE MANAGEMENT PACKAGE. * * THE FORTRAN CALLING SEQUENCE IS: * * CALL CREAT(IDCB,IERR,NAME,ISIZE,ITYPE,IS,ILU,IBLK) * O R * IER = CREAT(IDCB,IERR,NAME,ISIZE,ITYPE,IS,ILU,IBLK) * * W H E R E: * * IDCB IS THE ADDRESS OF A 144-WORD ARRAY WHICH * CREAT WILL USE AS A SCRATCH AREA. IF * ISIZE<0 THEN THE CREATED FILE IS ALSO * OPENED TO THIS DATA CONTROL BLOCK. * * IERR IS THE ADDRESS TO WHICH THE ERROR CODE * IS RETURNED. THIS INFORMATION IS ALSO * RETURNED IN THE A REGISTER. * * ERROR CODES ARE: * * >0 j THE CREAT WAS SUCCESSFUL - THE #SECTORS IS RETURNED * -1 THE DISC IS DOWN * -2 DUPLICATE NAME * -4 FILE TOO LONG * -6 CARTRIDGE NOT FOUND * -10 NOT ENOUGH PARAMETERS IN THE CALL * -13 DISC LOCKED * -14 DIRECTORY FULL * -15 ILLEGAL NAME * -16 ILLEGAL TYPE OR SIZE * * * * NAME IS A 3-WORD ARRAY CONTAINING THE NEW FILE'S NAME. * THE NAME MUST CONTAIN ONLY LEGAL ASCII * CHARACTERS INCLUDING EMBEDDED BLANKS. COMMAS, * + SIGN, - SIGN ARE NOT ALLOWED. * IN ADDITION THE FIRST * CHARACTER MUST BE NON-NUMERIC AND NON-BLANK. * * ISIZE A TWO-WORD ARRAY. WORD 1 IS THE SIZE IN * 124-WORD DOUBLE SECTORS. WORD 2 IS USED * ONLY FOR TYPE 2 FILES AND IS THE RECORD LENGTH. * * ITYPE IS THE FILE TYPE--MUST BE >0. * * IS (OPTIONAL); IS THE FILE'S SECURITY CODE. * IF IS>0 THE FILE IS WRITE PROTECTED. * IF IS<0 THE FILE IS OPEN PROTECTED. * IF IS=0 OR IS NOT CODED THE FILE IS PUBLIC. * * ILU (OPTIONAL); DIRECTS THE CREAT TO: * IF ILU<0 THEN THE DISC AT LOGICAL UNIT (-ILU). * IF ILU>0 THEN THE DISC WITH LABEL ILU. * IF ILU=0 OR NOT CODED, THE FIRST AVAILABLE * DISC WITH ENOUGH ROOM IS USED. * * IBLK (OPTIONAL); SPECIFIES A DCB BUFFER AREA OF * IBLK WORDS. (NORMALLY 128 IS USED.) MUST BE A * MULTIPLE OF 128. THE BUFFER MUST BE AN EVEN * DIVISOR OF THE FILE SIZE SO ONLY PART OF * THE SPECIFIED SIZE MAY BE USED. THE USED SIZE IS: * USED SIZE=FILE SIZE/N WHERE * N=(FILE SIZE/IBLK)+(IF REMAINDER THEN 1,ELSE 0) * SKP DCB NOP IERR NOP NAME NOP SIZE NOP TYPE DEF ZERO SC DEF ZERO LU DEF ZERO IBLK DEF ZERO SPC 1 CREAT NOP ENTRY POINT JSB .ENTR TROANSFER THE PARAMETERS DEF DCB LDA TYPE MAKE SURE THERE ARE CPA DZERO ENOUGH JMP ER10 NO - ERROR EXIT JSB CLOSE GO CLOSE THE DCR (IF OPEN) DEF *+2 DEF DCB,I SZA NO ERROR CPA N11 AND NOT OPEN ERROR - OK RSS SO SKIP IF THIS IS THE CASE JMP EXIT ELSE EXIT SOME CLOSE ERROR JSB NAM.. GO CHECK THE NAME DEF *+2 DEF NAME,I SZA IF OK SKIP JMP EXIT ELSE EXIT ERROR SPC 2 LDA NAME,I GOOD NAME SO STA BUF SET ISZ NAME UP DLD NAME,I SKELETON DIRECTORY DST BUF+1 ENTRY IN BUF LDA TYPE,I SZA TYPE MUST BE SSA >0 JMP ER16 NOT >0 ; ERR STA BUF+3 LDB SIZE,I GET THE SIZE BLS DOUBLE TO GET 64-WORD SECTORS SSB MUST BE >0 OR CCB SET TO -1 SZB,RSS IF ZERO JMP ER16 ERROR STB BUF+6 SET ISZ SIZE STEP TO RECORD SIZE CPA .2 IF NOT TYPE TWO CLA,RSS THEN JMP CREA4 SKIP SIZE TEST LSR 10 SHIFT TO A FOR DIVIDE DIV SIZE,I IF OVER FLOW THE RECORD SIZE TO SMALL SOC IF OK SKIP JMP ER4 ELSE ERROR FILE TOO LARGE CREA4 LDA SIZE,I LDB BUF+3 GET TYPE CPB .1 IF TYPE=1 LDA .128 SET SIZE TO 128 CPB .2 IF TYPE TWO SIZE MUST BE GIVEN SSA,RSS SIZE GIVEN? RSS YES; OR NOT TYPE TWO SKIP JMP ER4 ELSE ERROR CREA3 STA BUF+7 SET RECORD SIZE LDA SC,I SET STA BUF+8 SECURITY CODE SPC 2 JSB EXEC GET DEF TRRQ ONE DEF .4 TRACK DEF .1 FROM DEF TRACK THE DEF DLU SYSTEM DEF TMP TRRQ JSB EXEC WRITE  DEF WRRTN THE DEF .2 DIRECTORY DEF DLU ENTRY DEF BUF ON DEF .128 THE DEF TRACK TRACK DZERO DEF ZERO AT SECTOR ZERO WRRTN CCA SET TO DISC ERROR CODE CPB .128 DISC ERROR RSS NO; SKIP JMP EXIT YES; EXIT LDA TRACK COMBINE LSL 6 TRACK ADA DLU AND LU STA TMP FOR D.RTR SCHLP JSB EXEC SCHEDULE DEF SCHRT D.RTR DEF .9 TO DEF D.R CREAT DEF XEQT THE DEF TMP FILE DEF LU,I PASSING DEF TMP THE DEF .1 TRACK SCHRT SZA SCHEDULE OK JMP SCHLP NO; TRY AGAIN SPC 2 JSB RMPAR YES; DEF *+2 CALL RMPAR DEF BUF+4 TO GET RETURN CODES JSB EXEC RELEASE DEF RTRTN THE DEF .5 SYSTEM DEF .1 TRACK DEF TRACK DEF DLU RTRTN LDA BUF+4 GET D.RTR COMPLETION SSA CODE - OK JMP EXIT NO; TAKE EXIT LDA BUF+5 YES; SET UP STA DCB,I TO CALL LDB DCB $OPEN CLE,INB TO LDA BUF+6 OPEN STA B,I THE LDA DCB FILE LDB SC,I STO SET UP FOR A UPDATE OPEN JSB $OPEN SET UP REST OF DCB DEF IBLK,I ADDRESS OF BLOCK SIZE DEF BUF+8 ADDRESS OF NO OF SECTORS/TRACK JMP EXIT DISC ERROR - EXIT LDA TYPE,I GET TYPE ADA N3 IF 3 OR MORE SSA SKIP TO WRITE EOF JMP EXIT0 NOT RANDOM ACCESS FILE CCA SET WRITTEN ON AND EOF FLAG IN DCB LDB DCB GET WRITE FLAG ADB .13 ADDRESS STA B,I SET WRITTEN ON FLAG ADB .3 STEP TO THE BUFFER AND SET EOF STA B,I  IN FIRST WORD OF BUFFER EXIT0 LDA BUF+4 NO; USE D.RTR RETURN FOR ERROR EXIT LDB DZERO CODE STB SC RESTORE STB LU CALL WORDS STB TYPE FOR NEXT CALL STB IBLK STA IERR,I SET ERROR CODE JMP CREAT,I AND EXIT SPC 3 ER4 LDA N4 SET ERROR JMP EXIT CODE ER10 LDA N10 AND JMP EXIT EXIT SPC 3 ER16 LDA N16 GET THE ERROR CODE JMP EXIT TAKE EXIT SPC 3 TMP NOP N16 DEC -16 N10 DEC -10 N11 DEC -11 N3 OCT -3 N4 OCT -4 .1 OCT 1 .2 DEC 2 .3 OCT 3 .4 DEC 4 .9 DEC 9 .5 DEC 5 .13 DEC 13 .128 DEC 128 DLU NOP TRACK NOP ZERO NOP BUF BSS 9 SPC 3 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 END EQU * SPC 1 END ASMB,R,L,C HED OPEN * NAME: OPEN * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM OPEN,7 92002-16006 741205 ENT OPEN EXT EXEC,CLOSE,RMPAR,$OPEN EXT .ENTR EXT D.R SUP * * OPEN IS THE FILE OPEN ROUTINE OF THE REAL TIME * FILE MANAGEMENT PACKAGE * * THE FORTRAN CALLING SEQUENCE IS: * * CALL OPEN(IDCB,IERR,NAME,IOP,IS,ILU,IBLK) * * W H E R E: * * IDCB IS A 144-WORD DATA CONTROL BLOCK (ARRAY) * TO BE USED WITH ALL ACCESS TO THE FILE * UNDER THIS OPEN. * * IERR IS THE RETURN ERROR CODE (ALSO RETURNED IN A) * * NAME M3 IS THE 6-CHARACTER (3 WORD) NAME ARRAY. * * IOP (OPTIONAL); IS THE OPEN OPTION FLAG WORD * OPTIONS ARE: * BIT MEANING IF SET * 0 NON-EXCLUSIVE OPEN * 1 UPDATE OPEN * 2 FORCE TO TYPE 1 OPEN * 3 USE SUB FUNCTION IN BITS 6-11 * IF TYPE 0. * * IS (OPTIONAL); IS THE EXPECTED SECURITY CODE. * * ILU (OPTIONAL); IS THE DISC SPECIFIED. * IF ILU >0 THEN USE DISC LABELED ILU * IF ILU <0 THEN USE DISC AT LOGICAL UNIT (-ILU) * * IBLK (OPTIONAL); SPECIFIES A DCB BUFFER AREA OF * IBLK WORDS. (NORMALLY 128 IS USED.) MUST BE A * MULTIPLE OF 128. THE BUFFER MUST BE AN EVEN * DIVISOR OF THE FILE SIZE SO ONLY PART OF * THE SPECIFIED SIZE MAY BE USED. THE USED SIZE IS: * USED SIZE=FILE SIZE/N WHERE * N=(FILE SIZE/IBLK)+(IF REMAINDER THEN 1,ELSE 0) * * OPEN ERRORS ARE AS FOLLOWS: * * -1 DISC ERROR * -6 FILE NOT FOUND * -7 WRONG SECURITY CODE * -8 FILE IS CURRENTLY OPEN (IF EXCLUSIVE REQUEST) OR * IS CURRENTLY OPEN TO 7 OTHER PROGRAMS * -9 ATTEMPT TO OPEN TYPE 0 AS TYPE 1 * -10 NOT ENOUGH PARAMETERS * -13 DISC LOCKED * * SKP DCB NOP ERR NOP NAME DEF ZERO OP DEF ZERO SC DEF ZERO LU DEF ZERO IBLK DEF ZERO SPC 1 OPEN NOP ENTRY POINT JSB .ENTR TRANSFER PARAMETERS DEF DCB TO LOCAL AREA LDA N10 LDB NAME DID WE GET CPB DZERO ENOUGH PARAMETERS? JMP EXIT NO; ERROR - EXIT SPC 1 JSB CLOSE CLOSE DEF *+2 IF DEF DCB,I OPEN SZA SKIP IF NO ERRORS CPA N11 OR IF NOT OPEN CLE,RSS  JMP EXIT ELSE TAKE ERR EXIT LDA NAME,I GET NAME WORD1 LDB OP,I AND OPTION ERB EXCLUSIVE BIT TO E CME INVERT AND RAL,ERA SET IN SIGN OF A STA NAME1 SET FOR CALL TO D.RTR ISZ NAME GET DLD NAME,I REST OF DST NAME1+1 NAME AND SET FOR D.RTR CALL LDA XEQT GET ID CCE AND RAL,ERA SET STA ID SIGN FOR D.RTR CALL SCDRT JSB EXEC SCHEDULE DEF SCRTN D.RTR DEF .23 WITH WAIT DEF D.R TO OPEN X REP 4 THE FILE DEF ID+*-X DEF LU,I SCRTN JSB RMPAR YES; GET THE RETURN DEF *+2 CODES DEF ID TO LOCAL AREA LDA ID GET ERROR WORD SSA IF ERROR JMP EXIT EXIT DLD ID+1 ELSE SET DST DCB,I THE DCB FOR $OPEN CLO SET O LDA OP,I TO RAR,SLA,RAR INDICATE STO UPDATE OPTION ERA AND E FOR TYPE 1 OVER-RIDE STA LU SAVE FLAG LDA DCB GET DCB ADDRESS LDB SC,I AND SECURITY CODE JSB $OPEN AND GO SET UP THE DCB DEF IBLK,I ADDRESS OF BLOCK SIZE DEF ID+4 ADDRESS OF NO OF SECTORS PER TRACK JMP OPEN1 ERROR - CLOSE AND EXIT SSA IF OPEN PROTECT SSB AND CODE MISMATCH THEN SKIP JMP OPEN2 ELSE GO EXIT - GOOD OPEN SPC 2 LDA N7 SET EXIT CODE OPEN1 STA ID IN ID JSB CLOSE ILLEGAL OPEN SO CLOSE DEF *+2 THE DEF DCB,I FILE OPEN2 LDA ID SEND ERROR CODE LDB LU GET SUB FUNCTION FLAG SLB IF NOT SET SZA OR NOT TYPE ZERO JMP EXIT THEN EXIT SPC 1 LDB DCB CACULATE DCB SUB FUNCTION ADB .3 ADDRESS Z4 STB SC SAVE IT LDA OP,I GET THE OPTIN SUB FUNCTION AND B3700 MASK IT OFF STA B AND SAVE IT LDA SC,I GET THE CURRENT WORD AND B77 SAVE THE LU ADA B ADD IN THE NEW SUB FUNCTION STA SC,I SET IT IN THE DCB CLA CLEAR A AND EXIT SPC 1 EXIT LDB DCB IF NO ERRORS, ADB .2 THEN REPLACE THE SIZE SSA,RSS WITH THE TYPE LDA B,I IF NO ERRORS LDB DZERO RESET THE Y REP 5 DEFAULT STB NAME+*-Y PARAMETERS STA ERR,I SET THE ERROR CODE JMP OPEN,I AND RETURN SPC 2 SPC 3 DZERO DEF ZERO N10 DEC -10 N11 DEC -11 ID NOP NAME1 BSS 4 N7 DEC -7 ZERO NOP .2 DEC 2 .3 DEC 3 B3700 OCT 3700 B77 OCT 77 .23 DEC 23 SPC 3 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 3 END EQU * END ASMB,L HED PURGE * NAME: PURGE * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM PURGE,7 92002-16006 740801 ENT PURGE EXT OPEN,EXEC EXT .ENTR,CLOSE * * SUP * * PURGE IS THE FILE DELETION ROUTINE FOR THE RTE * FILE MANAGEMENT PACKAGE * * THE FORTRAN CALLING SEQUENCE IS: * * CALL PURGE(IDCB,IERR,NAME,IS,ILU) * * W H E R E: * * IDCB IS A 144-WORD DATA CONTROL BLOCK * WHICH IS USED BY PURGE AS A * WORKING BUFFER. IDCB IS FREE * FOR OTHER USE AFTER A PURGE. * * IERR IS THE ERROR RETURN LOCATION. * * NAME IS THE NAME OF THE FILE TO BE PURGED. * * IS IS THE FILE'S SECURITY CODE. * * ILU IS THE DISC THAT THE FILE IS ON. * IF ILU >0 THEN ON DISC LABELED ILU * IF ILU <0 THEN ON DISC AT LOGICAL UNIT (-ILU) * * ERRORS RETURNED BY PURGE ARE: * * CODE REASON * 0 NO ERRORS * -1 DISC READ/WRITE ERROR * -6 FILE (OR DISC) NOT FOUND * -7 ILLEGAL SECURITY CODE * -8 FILE IS OPEN TO SOME OTHER PROGRAM * -10 NOT ENOUGH PARAMETERS * -13 DISC LOCKED * -16 ATTEMPT TO PURGE A TYPE 0 FILE * * SKP DCB NOP IERR NOP NAME DEF ZERO SC DEF ZERO LU DEF ZERO SPC 1 PURGE NOP ENTRY POINT JSB .ENTR DO ENTRY ROUTINE DEF DCB LDA N10 NOT ENOUGH PRAM LDB NAME ERROR CPB DZERO ? JMP EXIT YES-EXIT CLA CLEAR THE TRUNCATE WORD STA LNG AND SPC 1 JSB OPEN NO; GO DEF OPRTN OPEN DEF DCB,I EXCLUSIVELY DEF IERR,I TO DEF NAME,I CALLER DZERO DEF ZERO DEF SC,I PASS THE SECURITY CODE DEF LU,I AND THE DISC ID OPRTN SSA OPEN ERROR? JMP EXIT YES; EXIT SZA,RSS NO; TYPE ZERO JMP EX16 YES - ILLEGAL PURGE SPC 1 LDA DCB GET ADDRESS ADA .7 OF LDB A,I SECURITY SSB,RSS IF MISMATCH JMP EX7 GO SET ERROR EXIT SPC 1 ADA N2 ADDRESS OF FILE LENGTH LDA A,I GET FILE LENGTH ARS SET TO BLOCK LENGTH STA LNG SET FOR TRUNCATE CODE SPC 1 CLOS JSB CLOSE CLOSE THE FILE AND TRUNCATE TO ZERO DEF *+4 (I.E. PURGE IT) DEF DCB,I FILE DEF LU DUMMY ERROR RETURN DEF LNG TRUNCATE WORD ADDRESS LDB IERR,I GET CURRENT ERROR CODE SSB IF NONE SKIP LDA B ELSE USE IT EXIT STA IERR,I SET THE ERROR CODE LDB DZERO RESET X REP 3 THE STB NAME+*-X ENTRY JMP PURGE,I AND EXIT SPC 2 EX7 LDA .7 SET ERROR CMA,INA,RSS CODE AND SKIP EX16 LDA N16 STA IERR,I SET CODE IN USER AREA JMP CLOS GO CLOSE THE FILE SPC 3 N2 DEC -2 N10 DEC -10 .7 DEC 7 N16 DEC -16 LNG NOP ZERO NOP D.RTR ASC 3,D.RTR SPC 2 XEQT EQU 1717B A EQU 0 B EQU 1 SPC 2 END EQU * END ASMB,L HED NAMF * NAME: NAMF * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM NAMF,7 92002-16006 771115 EXT EXEC,.ENTR,CLOSE,NAM..,OPEN,RMPAR ENT NAMF * * NAMF IS THE FILE NAME CHANGE MODULE OF THE * RTE FILE MANAGEMENT PACKADGE. * * CALLING SEQUENCE: * * CALL NAMF(IDCB,IERR,NAME,NNAME,IS,ILU) * * WHERE: * IDCB IS A 144 WORD DATA CONTROL BLOCK * THIS AREA IS FREE AFTER THE CALL. * * IERR IS THE ERROR RETURN LOCATION * ERRORS ARE RETURNED HERE AND IN * THE A REGISTER. * DEFINED ERRORS ARE: * * * 0 NO ERROR * -1 DISC DOWN * -2 DUPLICATE NAME * -6 CARTRIDGE OR FILE NOT FOUND * -7 INVALID SECURITY CODE * -8 FILE CURRENTLY OPEN * -10 NOT ENOUGH PARAMETERS * -13 THE REQUIRED DISC IS LOCKED * -15 ILLEGAL NEW NAME * * NNAME THE NEW 6 CHARACTER FILE NAME * * IS OPTIONAL - THE FILE SECURITY CODE * * ILU OPTIONAL - THE FILES DISC ID. * * PRECEEDING CONSTANTS * N7 DEC -7 .7 DEC 7 N10 DEC -10 SPC 3 DCB DEF ZERO DEFINE IERR DEF ZERO PARAMATER NAME DEF ZERO ADDRESSES NNAME DEF ZERO IS DEF ZERO ILU DEF ZERO NOP SPC 1 NAMF NOP ENTRY POINT JSB .ENTR FETCH PARAM ADDRESSES DEF DCB TO LOCAL LIST SPC 1 LDA N10 LOAD FOR NOT ENOUGH PRAM REJECT LDB NNAME NEW NAME SUPPLIED? CPB DZERO JMP EXIT NO; GO EXIT SPC 1 JSB NAM.. YES;NEW NAME DEF NAM.R LEGAL DEF NNAME,I FOR A FILE NAME? NAM.R SZA JMP EXIT NO; EXIT JSB OPEN CALL DEF OPRTN TO DEF DCB,I OPEN DEF IERR,I THE DEF NAME,I FILE DEF ZERO EXCLUSIVELY DEF IS,I WITH DEF ILU,I USER PRAMS OPRTN SSA SUCESSFUL OPEN? JMP EXIT NO; EXIT LDA DCB YES; CHECK ADA .7 THE LDB A,I SECURITY LDA N7 CODE SSB,RSS MATCH? JMP CLOEX NO; CLOSE AND EXIT JSB EXEC GET DEF EXR1 A DEF .4 SYSTEM DEF .1 TRACK DEF TRACK DEF LU DEF DCB2 EXR1 JSB EXEC WRITE DEF EXR2 THE DEF .2 NEW DEF LU NAME DEF NNAME,I ON DEF .128 THE DEF TRACK TRACK DEF ZERO SECTOR ZERO EXR2 DLD DCB,I GE`HFBT DCB2 TO B STB DCB2 AND SAVE IT LDA TRACK FORM TRACK/LU LSL 6 WORD ADA LU FOR STA NAME D.RTR CALL SCH JSB EXEC CALL DEF EXR3 D.RTR DEF .9 TO DEF D.RTR CHANGE DEF XEQT THE DEF NAME FILE DEF DCB,I NAME DEF DCB2 DEF .2 EXR3 SZA SCHEDULE JMP SCH CONFLICT- THEN TRY AGAIN JSB RMPAR CALL RMPAR TO GET DEF *+2 RETURN PARAMETERS DEF NAME TO LOCAL AREA. JSB EXEC RETURN DEF EXR4 THE DEF .5 SYSTEM DEF .1 TRACK DEF TRACK DEF LU SPC 1 EXR4 RSS SKIP ERROR ENTRY CLOEX STA NAME SAVE ERROR CODE JSB CLOSE CLOSE DEF CLOR1 THE DEF DCB,I FILE CLOR1 LDB NAME GET ERROR CODE SZB IF NONE SKIP LDA B ELSE USE IT EXIT STA IERR,I SET RETURN ERROR LDB DZERO RESET X REP 3 THE STB *-X+NNAME ADDRESSES JMP NAMF,I EXIT TO USER SPC 3 * FOLLOWING CONSTANTS SPC 1 DCB2 NOP LU NOP TRACK NOP ZERO NOP DZERO DEF ZERO SPC 2 * TEMPS REFERENCED ONLY BY DEFS SPC 1 .1 DEC 1 .2 DEC 2 .4 DEC 4 .5 DEC 5 .9 DEC 9 .128 DEC 128 D.RTR ASC 3,D.RTR SPC 2 * ASSEMBLY AIDS SPC 1 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 END EQU * PROG. LENGTH SPC 1 END a/HASMB,R,L,C HED READF - WITH RENT. I/O * NAME: READF * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM READF,7 92002-16006 770801 ENT READF,WRITF EXT EXEC,R/W$,.ENTR,P.PAS EXT RW$UB,$KIP EXT D$XFR EXT RFLG$ EXT REIO SUP * * * THIS IS THE RTE FILE MANAGEMENT PACKAGE * READ/WRITE SUBROUTINE. * * THIS ROUTINE WILL READ OR WRITE ANY TYPE FILE. * * * CALLING SEQUENCE: * * CALL READF(IDCB,IERR,IBUF,IL,L,N) * * O R * * IER = READF(IDCB,IERR,IBUF,IL,L,N) * * TO READ, O R * * CALL WRITF(IDCB,IERR,IBUF,IL,N) * * O R * * IER = WRITF(IDCB,IERR,IBUF,IL,N) * * TO WRITE. * * * W H E R E: * * IDCB IS THE 144 WORD DATA CONTROL BLOCK * FOR THE REFERENCED FILE. * * IERR IS THE ERROR RETURN LOCATION * ERRORS ARE AS FOLLOWS: * * CODE ERROR CONDITION * 0 OR >0 NO ERROR * -1 A REQUIRED DISC OR DEVICE IS DOWN * -5 ILLEGAL RECORD NUMBER OR * ATTEMPT TO READ A RECORD NOT WRITTEN * -7 INVALID SECURITY CODE FOR * WRITE (FILE IS READ ONLY) * -10 A REQUIRED PARAMETER IS MISSING * -11 THE DCB IS NOT OPEN * -12 SOF OR EOF SENSED ON READ * -17 ILLEGAL REQUEST TO A TYPE ZERO FILE * * IER  SEE IERR - RETURNED AS FUNCTION * * IBUF IS THE BUFFER TO BE USED TO READ OR WRITE. * * IL IS THE REQUESTED TRANSFER LENGTH IN WORDS. * * L IS THE LENGTH AS READ IN WORDS. * * N IS THE REQUESTED RECORD NUMBER * IF N>0 OR IF N<0 THE RELATIVE RECORD * NUMBER FROM THE CURRENT POSITION. * N IS LEGAL ON TYPE 1 AND 2 FILES ONLY. * * * O P T I O N S: * * IL IS OPTIONAL ON TYPE 1 AND 2 FILES. * ON TYPE 1 FILES, 128 IS USED; * ON TYPE 2 FILES THE RECORD LENGTH IS USED. * * L IS OPTIONAL AT ALL TIMES. * * N IS OPTIONAL AND IS IGNORED ON FILES * OF TYPES OTHER THAN 1 AND 2. IF NOT * SUPPLIED, ZERO IS USED. * THE FIRST RECORD IN A FILE IS RECORD #1. * * * E X T E R N A L S: * * RW$UB IS USED TO READ OR WRITE WORDS * FROM OR TO FILES OF TYPE 2 OR * ABOVE. IT HANDLES ALL SECTOR, * TRACK, AND EXTENT SWITCHING FOR * THESE FILES AND ALSO WRITES AND/OR * READS BLOCKS FROM THE FILE AS * REQUIRED. READS ARE CONDITIONAL * ON RFLG$. A GLOBAL FLAG WHICH * MUST BE NON-ZERO BEFORE A READ * IS EXECUTED. * * RW$UB CALLING SEQUENCE IS: * * LDB #WORDS * LDA DCB ADDRESS * CLE/CCE WRITE/READ * JSB RW$UB CALL * DEF UBUF ADDRESS OF USER'S BUFFER * JMP ERROR ERROR RETURN (A = CONDITION) * -- NORMAL RETURN SKP WRITF DEC -1 WRITE ENTRY POINT LDA WRITF TRANSFER RETURN ADDRESS STA READF TO READ ENTRY JMP READF+1 AND GO TO READ ENTRY SPC 3 DCB NOP DCB POINTER IERR NOP ERROR BOX BUF OCT -17 USER BUFFER ADDRESS IL DEF DM REQUEST LENGTH L DEF ZER0 1 RETURN LENGTH N DEF ZER0 RECORD NUMBER READF NOP READ ENTRY POINT JSB .ENTR TRANSFER THE DEF DCB PARAMETERS LDA DCB SET UP THE CLB,CLE DCB JSB P.PAS ADDRESSES N17 DEC -17 TMP NOP USE FIRST TWO AS BFSZ EQU TMP TMP1 NOP TEMP STORAGE TYPE NOP ADDRESS OF TYPE LU0 NOP LU (FOR 0 FILE) TRACK EQU LU0 ALSO TRACK EOF0 NOP EOF CODE (0 FILE) BSECT EQU EOF0 ALSO SECTOR SPAC NOP SPACING CODE (0 FILE) SIZE EQU SPAC ALSO FILE SIZE RL NOP RECORD LENGTH SCMO NOP SECURITY/OPEN MODE #SC/T NOP SECTORS/TRACK OCFLG NOP OPEN FLAG TR NOP CURRENT TRACK SECT NOP CURRENT SECTOR BUFPT NOP CURRENT POSITION RWFLG NOP READ/WRITE FLAG RC NOP RECORD COUNT TMP2 NOP BUFD NOP SPC 2 LDA N10 PRESET FOR MISSING PRAM ERROR LDB BUF BUFFER MUST BE SSB SUPPLIED JMP EXIT ELSE MISSING PRAM * LDB OCFLG,I IF NOT OPEN LDA N11 CPB XEQT THEN RSS JMP EXIT EXIT FILE NOT OPEN * LDB WRITF GET READ WRITE FLAG LDA SCMO,I AND SECURITY CODE ARS,ALR CLEAR LEAST AND SIGN BITS STA BFSZ SAVE BLOCK LENGTH XOR SCMO,I GET THE SECURITY CODE/UDATE FLAG SSB,RSS IF WRITE SSA AND JMP SCOK BAD SECURITY * LDA N7 THEN EXIT LDB N17 EXIT STB BUF RESTORE LDB DMBUF OPTIONAL STB IL PARAMETER LDB DZER0 ADDRESS STB L FOR STB N NEXT CLB CALL STB ZER0 STB DM CCB STB WRITF RESET READ WRITE FLAG AND STA IERR,I SET THE ERnROR CODE JMP READF,I RETURN SPC 2 SCOK RRL 1 SHIFT SIGN TO LOW A STA RFLG$ USE A READ FLAG LDB L,I GET N FOR WRITE SLA,ARS IF READ LDB N,I GET READ N LDA TYPE,I GET TYPE CPA .2 TWO JMP LTEST GO TEST FOR EOF * CPA .1 IF TYPE ONE CLA,RSS SKIP JMP EOFTS ELSE GO TO EOF TEST * RANDOM ACCESS FILE SPC 1 STA RWFLG,I INHIBIT R/W$ WRITE FOR TYPE ONE FILES LDA .128 FORCE LENGTH TO 128 FOR TYPE 1 FILES STA RL,I FOR THE POSITION ROUTINE STA BFSZ FORCE BLOCK LENGTH TO 128 FOR TYPE 1 SPC 1 LTEST LDA IL,I GET THE REQUEST LENGTH SSA IF EOF REQUEST THEN JMP EXIOK GO EXIT NO ACTION * SZB POSITION OPTION? SSB YES IF <0 ADB RC,I ADD CURRENT POSITION STB TMP2 SAVE RESULT CCA ADA B MULTIPLY RECORD LENGTH SSA IF NEG RECORD NO JMP EOFEX TAKE ERROR EXIT * MPY RL,I BY THE DESIRED RECORD DIV BFSZ COMPUTE THE BLOCK AND OFFSET STB OCFLG SAVE THE OFFSET CLB NOW COMPUTE THE SECTOR ADDRESS MPY BFSZ OF THE BLOCK ASR 6 EVEN SECT ADDRESS TO A STA TMP SAVE CMA CHECK FOR ADA SIZE,I EOF SSA IF NOT EOF SKIP JMP EOFEX TAKE ERROR EXIT * LDA TMP RESTORE A ADA BSECT,I ADD THE BASE SECTOR DIV #SC/T,I DIVIDE BY NO. SECT/TRACK ADA TRACK,I ADD BASE TRACK-A = TRACK DST TMP SAVE NEW TR/SECTOR ADDRESS CPA TR,I IF SAME CCA AS CPB SECT,I CURRENT LDB 0 POSITION CLE,SSB THEN JMP RACS SKIP * LDB DCB ELSE JSB R/W$ WRITE THE CURRENT BLOCK JMP EXIT IF NECESSARY * DLD TMP THEN SET DST TR,I THE NEW SPC 2 ADDRESS RACS LDA OCFLG SET THE OFFSET ADA BUFD ADD BUFFER ADDRESS STA BUFPT,I AND SET THE POINTER LDA TMP2 SET THE STA RC,I NEW RECORD NUMBER SPC 2 EOFTS LDA BUFPT SET THE INDIRECT ADA MSIGN BIT ON STA BUFPT THE BUFFER POINTER LDA TYPE,I GET FILE TYPE CMA,INA,SZA,RSS IF 0 JMP TYP00 OR 1 * INA,SZA,RSS GO DO 0/1 THING JMP .1TYP * INA,SZA,RSS IF TYPE 2 JMP TWOTY GO DO READ TEST * INTS LDA RWFLG,I GET THE IN CORE FLAG CCE,SZA IF IN CORE JMP TWOSP GO TEST FOR TWO * LDB DCB ELSE READ JSB R/W$ THE BLOCK JMP EXIT ERROR EXIT SPC 2 TWOSP LDA TYPE,I GET THE TYPE AGAIN TWORW LDB RL,I GET THE RECORD LENGTH (TYPE 2) CPA .2 IF TYPE 2 JMP .2RW GO DO READ WRITE SPC 2 * * TYPE 3 AND ABOVE READ/WRITE LOOP * LDA WRITF SET READ WRITE FLAG ELA IN E 0=> WRITE 1=>READ LDB BUFPT,I GET CURRENT WORD SSB,RSS IF <0 THEN EOF JMP RDLEN NO <0 - SKIP * LDA RWFLG,I EOF RAR,RAR SET (READ) OR CLEAR (WRITE) ELA,RAL EOF SENT STA RWFLG,I BIT IN DCB LDA WRITF GET THE DIRECTION AGAIN SSA,RSS IF WRITE JMP SWRI GO BACK UP THE COUNT IF REQUIRED * * READ AT EOF * EOFT0 STA L,I FOR EOF HERE WITH A = -1 CLA,SEZ IF FIRST EOF SKIP EOFEX LDA N12 ELSE EOF ERROR SSA,RSS IF FIRST EOF THEN ISZ RC,I STEP THE RECORD COUNT JMP EXIT GO EXIT * * WRITE AT EOF * SWRI CLA,SEZ IF THE EOF WAS PASSED TO THE USER CCA THEN BACK UP THE RECORD COUNT ADA RC,I SO WE DON'T COUNT TWKO OF STA RC,I THEM CLB,CLE RECOVER THE E BIT FOR WRITE STB RFLG$ CLEAR THE READ FLAG RDLEN CCB,SEZ IF READ JMP RDLE1 SKIP WRITE CHECKS * LDA IL,I GET REQUEST LENGTH CMA,CCE,SSA,INA,RSS IF WRITE EOF JMP EOFWR GO WRITE EOF * ADA BUFPT,I COMPARE NEW LENGTH TO OLD LDB RFLG$ GET READ FLAG CLE,SZA IF NEW LENGTH = OLD SZB,RSS OR IF NOT UPDATE JMP RDLE2 CONTINUE WRITE SPC 1 ERR5 LDA N5 ELSE UPDATE ERROR JMP EXIT GO EXIT SPC 1 RDLE1 LDA DMBUF GET LENGTH RETURN ADDRESS RDLE2 CLB,SEZ,INB,RSS IF WRITE LDA IL USE REQUEST LENGTH STA BUA SET ADDRESS OF BUFFER LDA DCB SET THE DCB ADDRESS JSB RW$UB GO READ FIRST LENGTH WORD BUA DEF L,I JMP EXIT ERROR EXIT * LDB A .2RW LDA WRITF GET READ/WRITE FLAG ELA TO E CLA,SEZ,RSS IF WRITE THEN SKIP JMP WRIT WRITE SO SKIP * LDA IL CHECK IF LENGTH SUPPLIED CPA DMBUF IF COMPARE THEN NO LENGTH CLA,RSS NOT SUPPLIED SO FORCE TRANSFER LDA B SUPPLIED SO CHECK FOR RECORD CMA,INA TOO LONG FOR ADA IL,I BUFFER SSA SKIP IF OK LDB IL,I TOO LONG SO USE SUPPIED LENGTH STB L,I SET AS RETURN LENGTH WRIT STA SKIP SAVE RESIDUE FOR SKIP AFTER READ LDA DCB DCB TO A JSB RW$UB READ THE RECORD DEF BUF,I TO USER BUFFER JMP EXIT ERROR EXIT * LDB TYPE,I GET FILE TYPE CPB .2 IF 2 JMP EXIOK-1 THEN DONE - GO EXIT * LDA DCB SET UP TO SKIP LDB SKIP THE RESIDUE CMB,SSB,INB SET + NO WORDS SKIP IF >0 JMP NOSKP <0 SO DON'T SKIP * JSB $KIP GO SKIP THE WORDS JMP EXIT ERROR EXIT * NOSKP LDA WRITF PELSE ELA SET TO CLA,SEZ,RSS READ /WRITE THE LDA IL TWIN WORD STA BUFAA WORD LDA DCB TO DUM CLB,INB OR FROM JSB RW$UB USER. BUFAA NOP JMP EXIT ERROR - EXIT * CPA BUA,I IF TWIN MISMATCH CCB,RSS JMP ERR5 THEN BAD RECORD - EXIT * LDA RFLG$ GET READ FLAG CLE,SZA,RSS IF NOT READING JMP EOFWR GO SET EOF IN FILE * EXT0 ISZ RC,I STEP THE RECORD COUNT EXIOK CLA DONE - OK SO JMP EXIT EXIT SPC 2 EOFWR STB BUFPT,I SET EOF IN DCB ELB,RBL SET UP THE EOF READ FLAG AND THE STB RWFLG,I WRITTEN ON AND EOF FLAG IN THE DCB JMP EXT0 GO EXIT SPC 2 TWOTY LDB RFLG$ GET READ WRITE FLAG SZB IF READING JMP INTS GO TEST FOR IN CORE * JMP TWOSP ELSE GO WRITE. SPC 2 * * TYPE 0 OR 1 FILE -- TRANSFER FROM CORE * .1TYP LDA IL GET LENGTH ADDRESS LDB A,I GET LENGTH CPA DMBUF IF NOT SUPPLIED THEN LDB .128 USE 128 STB IL SAVE LOCALLY ADB B177 ROUND UP LSR 7 GET # OF SECTORS COVERED STB SKIP SAVE ROUNDED LENGTH ADB RC,I = # OF 128 WORD RECORDS STB TMP SAVE NEW RECORD # ADB N1 SUBTRACT 1 (RECORD #'S START AT 1) BLS CONVERT TO 64 WORD SECTORS CMB,INB SUBTRACT ADB SPAC,I FROM FILE SIZE SSB IF OUT OF FILE JMP EOFEX TAKE EOF EXIT SPC 2 LDA SKIP GET ROUNDED LENGTH LSL 7 SET TO CORRECT POSITION LDB WRITF AND SSB,RSS RESET IF STA IL WRITE LDA IL GET XFER LENGTH FOR D$XFR SSB IF READ THEN STA L,I SET THE RETURN LENGTH ELB SET E FOR DXFR$ CALL LDB BUF GET THE BUFFER ADDRESS  STB BUFA SET IT IN THE CALL LDB DCB GET THE DCB ADDRESS JSB D$XFR GO DO THE TRANSFER BUFA NOP JMP EXIT ERROR RETURN * LDA TMP SET THE NEW STA RC,I RECORD COUNT JMP EXIOK AND EXIT SPC 1 TYP00 LDB WRITF IF READ STB TMP SET READ WRITE FLAG FOR EOF TEST LDA RL,I GET THE READ WRITE LEGAL FLAG SSB,RSS IF WRITE RAR SHIFT THE WRITE FLAG TO BIT 15 SSA,RSS TEST THE FLAG JMP EX17 ILLEGAL REQUEST GO EXIT SPC 1 CCA IF READ SSB THEN JMP TYP01 SKIP * CPA IL,I EOF? JMP EOFW0 YES; GO MAKE CONTROL RQ SPC 1 TYP01 CLA,CCE,INA SET UP THE REQUEST CODE SSB,RSS FOR THE CALL INA AND ELA,RAR STA RQ IT. JSB REIO CALL DEF RTN THE DEF RQ EXEC DEF LU0,I FOR DEF BUF,I I/O DEF IL,I TO/FROM USER BUFFER. RTN JMP EX17 DRIVER REJECTED CALL - ERROR. ISZ TMP TEST READ WRITE JMP EXT0 GO EXIT IF WRITE * STB L,I SET THE RETURN LENGTH SPC 1 RAL,CLE,ELA PUT THE DOWN BIT IN E ALF,RAL SHIFT THE EOF BIT RAL TO BIT 15 SSA IF EOF BIT SET JMP EOF00 GO DO EOF THING * SZB IF ZERO WORDS READ THEN SKIP JMP EXT0 ELSE GO EXIT GOOD XFER * AND B70 MASK THE HIGH ORDER TYPE BIT SEZ,CCE,SZA IF NOT DOWN OR IF TYPE <10 THEN EOF JMP TYP00 ELSE RETRY THE XFER SPC 1 EOF00 CCA,CLE JMP EOFT0 DO EOF TYPE ZERO EXIT SPC 2 EOFW0 JSB EXEC WRITE TYPE ZERO EOF DEF EOFRT RETURN ADDRESS DEF .3I CATCH ERRORS DEF EOF0,I DEF N1 EOFRT RSS IF ERROR RETURN THE CODE JMP EXIOK SPC 3 EX17 NLDA N17 SET UP ILLEGAL REQUEST FLAG JMP EXIT GO EXIT SPC 2 * * * C O N S T A N T S N1 OCT -1 .1 OCT 1 .2 OCT 2 .3I DEF 3,I .128 DEC 128 MSIGN DEF 0,I DZER0 DEF ZER0 ZER0 NOP DMBUF DEF DM DM NOP N11 DEC -11 N10 DEC -10 N7 OCT -7 N12 DEC -12 N5 OCT -5 B177 OCT 177 B70 OCT 70 SPC 5 SKIP NOP RQ NOP SPC 3 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 PLENG EQU * END ASMB,L HED FSTAT * NAME: FSTAT * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FSTAT,7 92002-16006 740801 ENT FSTAT EXT EXEC,.ENTR SPC 1 * FSTAT READS THE DIRECTORY OF DISCS TO THE * USER SPECIFIED 125 WORD BUFFER * * CALLING SEQUENCE: SPC 1 * CALL FSTAT(ISTAT) SPC 1 * WHERE: ISTAT IS A 125 WORD BUFFER INTO * WHICH THE DIRECTORY WILL BE READ. SPC 5 ISTAT NOP SPC 1 FSTAT NOP ENTRY POINT JSB .ENTR FETCH THE DEF ISTAT ADDRESS SPC 1 CCA COMPUTE LAST ADA TATSD SYSTEM DISC STA TRACK TRACK NUMBER JSB EXEC CALL EXEC DEF RTN TO DEF .1 READ DEF .2 FROM LU 2 DEF ISTAT,I TO THE USER BUFFER DEF .125 125 WORDS DEF TRACK FROM THE LAST TRACK DEF .0 SECTOR 0 RTN JMP FSTAT,I RETURN SPC 3 .1 DEC 1 .2 DEC 2 .125 DEC 125 .0 NOP TRACK NOP 1756B i SPC 2 A EQU 0 B EQU 1 TATSD EQU 1756B SPC 1 END EQU * SPC 1 END ASMB,R,L,C HED RWNDF * NAME: RWNDF * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM RWNDF,7 92002-16006 740801 ENT RWNDF EXT .ENTR,RWND$,EXEC EXT R/W$ * THE MODULE OF THE RTE FILE MANAGER PERFORMS * THE REWIND OR RESET FUNCTION * * A FILE IS RESET TO EXTENT 0 RECORD 1 VIA RWND$ * A TYPE ZERO UNIT IS REWOUND VIA AND EXEC CALL * * * CALLING SEQUENCE * * CALL RWNDF(IDCB,IER) * * WHERE: * * IDCB IS THE FILES DATA CONTROL BLOCK ARRAY * * IER IS THE ERROR RETURN LOCATION. * ERRORS ARE RETURNED IN THE A REG * ALSO. * ERRORS CODES ARE: * 0 NO ERROR * -11 DCB NOT OPEN * * SPC 2 * PRE CONSTANT AREA SPC 1 .3 DEC 3 TYPE NOP .2 OCT 2 .7 DEC 7 .5 DEC 5 SPC 3 DCB DEF DCB IER DEF DCB SPC 1 RWNDF NOP ENTRY POINT JSB .ENTR FETCH DFDM DEF DCB PRAM ADDRESSES SPC 1 LDB DCB GET DCB ADDRESS ADB .2 INDEX TO TYPE AND STB TYPE SET ADDRESS ADB .7 INDEX TO OPEN FLAG AND LDA B,I FETCH CPA XEQT OPEN? CLA,INA,RSS YES; SET AWRWND RECORD COUNT/SKIP JMP NOOPN NO; TAKE ERROR EXIT ADB .5 INDEX TO RECORD COUNT AND STA B,I SET RECORD COUNT {B@< LDA TYPE,I GET TYPE CLE,SZA IF NOT ZERO JMP DISC GO DO DISC THING SPC 1 ISZ TYPE TYPE =0 -STEP TO LU LDA TYPE,I FETCH LU AND AND B77 ISOLATE IT THEN ADA B400 ADD THE REWIND BIT STA TYPE AND SAVE FOR EXEC SPC 1 JSB EXEC CALL EXEC TO DEF EXRTN REWIND DEF .3 TYPE DEF TYPE ZERO FILE EXRTN CLA,RSS SET ERROR CODE AND SKIP TO EXIT NOOPN LDA N11 NOT OPEN- EXIT -11 EXIT STA IER,I SET ERROR CODE LDB DFDM RESET ENTRY ADDRESSES STB DCB AND STB IER THEN JMP RWNDF,I RETURN SPC 2 * MID CONSTANT AREA SPC 1 B77 OCT 77 B400 OCT 400 N11 DEC -11 SPC 3 DISC LDB DCB SET UP AND JSB R/W$ WRITE THE BLOCK IF NECESSARY JMP EXIT IF ERROR EXIT SPC 1 LDB DCB DISC FILE-CALL CLA RWND$ JSB RWND$ TO SET UP DCB JMP EXIT ERROR RETURN JMP EXRTN NORMAL RETURN SPC 2 * POST CONSTANT AREA SPC 1 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 END EQU * SPC 1 END KBASMB,L HED POSNT * NAME: POSNT * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM POSNT,7 92002-16006 760702 ENT POSNT EXT EXEC,.ENTR,RFLG$,P.PAS,READF,$KIP * * POSNT IS THE FILE POSITION ROUTINE FOR THE * RTE FILE MANAGEMENT PACKAGE * * CALLING SEQUENCE: * CALL POSNT (IDCB,IERR,NP,IR) * WHERE: * IDCB IS THE FILES DATA CONTROL BLOCK * ADDRESS * IERR IS THE ERROR RETURN ADDRESS * POSNT ERRORS ARE: * 0 NONE * -1 DISC DOWN * -5 AN ILLEGAL RECORD WASENCOUNTERED * (LENGTHS AT EACH END DID NOT MATCH * -10 NOT ENOUGH PARAMETERS * -11 DCB NOT OPEN * -12 EOF OR SOF SENSED * NP IF >0 THEN SKIP NP RECORDS * IF <0 THEN BACK SPACE NP RECORDS * IF =0 THEN NO OPERATION * IR (OPTIONAL) IF NOT CODED OR ZERO * NP IS RELATIVE OTHERWIZE * NP IS ABSOLUTE (NP MUST BE>0) SPC 3 * PRE STORAGE SPC 1 N10 DEC -10 N11 DEC -11 DFZER DEF ZERO ZERO NOP DCB NOP ER NOP NP DEF ZERO IR DEF ZERO SPC 1 POSNT NOP ENTRY POINT JSB .ENTR FETCH DEF DCB ADDRESSES LDA N10 ENOUGH LDB NP PRAMS CPB DFZER SUPPLIED? JMP EXIT NO,EXIT STB RFLG$ FOURCE READS WHILE SPACING CLB,CLE SET LDA DCkB UP JSB P.PAS LOCAL DEC -15 DCB RCOU NOP ADDRESSES DUM NOP TYPE NOP TYPE LU NOP LU FOR TYPE 0 EOF NOP EOF CODE FOR TYPE 0 SPACE NOP SPACING LEGAL FLAGE TYPE 0 CONND NOP LN NOP DSTAT NOP OPEN NOP OPEN FLAG ABRC NOP RCLN NOP BFPT NOP BUFFER POINTER TYPE 3AND ABOVE RWFLG NOP READ/WRIE /EOF FLAG RC NOP RECORD COUNT LDA N11 GET NOT OPEN ERROR.CODE TO A LDB OPEN,I GET OPEN FLAG TO B CPB XEQT OPEN CCE,RSS YES; SKIP;SET E JMP EXIT NO; EXIT OPEN ERROR LDA BFPT GET BUFFER POINTER ADDRESS RAL,ERA SET INDIRECT BIT STA BFPT RESET POINTER LDA IR,I GET RELATIVE /ABSOLUTE FLAG CLB ASSUME ABSOLUTE SZA,RSS RELATIVE? LDB RC,I YES; GET CURRENT RECORD NO. ADB NP,I ADD THE REQUESTED MOVEMENT STB ABRC SAVE NEW ABSOLUTE ADDRESS CMB,INB SET NEGATIVE AND ADB RC,I COMPUTE RELATIVE RECORD NUMBER CMB,INB,SZB,RSS SET TO RIGHT SIGN - ZERO? JMP EXOK YES - GO EXIT STB RCOU NO; SET COUNT SPC 1 LDA TYPE,I GET TYPE OF FILE CMA,INA,SZA,RSS TYPE ZERO? JMP TYP0 YES; GO TO TYPE ZERO ROUTINE INA,SZA TYPE; 1 INA,SZA,RSS OR 2 JMP TY1/2 YES; GO TO RANDOM ACESS POSITION SPC 1 CMB,SSB,INB TYPE 3 OR ABOVE - FORWARD JMP FSRC SPACE - YES GO DO IT. SPC 2 * TYPE 3 AND ABOVE BACKSPACE ROUTINE SPC 1 BSRC LDA BFPT,I GET CURRENT POSITION INA,SZA IS IT EOF? JMP BSRC3 NO; GO BACKSPACE LDA RWFLG,I YES; GET THE READ/WRITE RAR,CLE,RAR FLAG AND CLEAR THE EOF BIT ELA,RAL THEN STA RWFLG,I RESTORE THE FLAG SEZ WAS IT SET? JMP BSRC-5 YES; COUNT AS A RECORD BSRC3 CCB NO; BACKSPACE 1 LDA DCB WORD JSB $KIP WITH THE JMP EXIT SKIP ROUTINE LDA BFPT,I GET THE RECORD LENGTH STA RCLN SAVE IT CMA BACK SPACE TO STA B THE LDA DCB TWIN JSB $KIP WITH THE JMP EXIT SKIP ROUTINE LDA BFPT,I GET TWIN CPA RCLN TWINS MATCH? BSRC5 CCA,RSS YES; SKIP JMP ER5 NO; ERROR -5 ADA RC,I DECREMENT THE STA RC,I RECORD COUNT ISZ RCOU STEP BACKSPACE COUNT ; DONE? JMP BSRC3 NO; DO THE NEXT ONE JMP EXOK * FORWARD SPACE TYPE ZERO AND 3 AND ABOVE FILES * FSRC STB RCOU SET COUNT FSRC1 JSB READF READ DEF REART A DEF DCB,I RECORD DEF ER,I TO DEF DUM LOCAL DUMMY DEF .1 ONE WORD BUFFER DEF LN REART SSA IF ERROR JMP EXIT EXIT LDB LN SSB JMP EOFEX ISZ RCOU JMP FSRC1 JMP EXIT SPC 2 N3 DEC -3 SPC 2 * TYPE ZERO SPACE ROUTINE SPC 1 TYP0 CMB,SSB,INB IF FORWARD SPACE JMP FSRC GO TO READ ROUTINE SPC 1 LDA N3 PRESET FOR ERROR LDB SPACE,I BACK SPACE GET SSB,RSS LEGAL CODE JMP EXIT BACK SPACE NOT LEGAL-EXIT SPC 1 LDA LU,I GET AND AND B77 ISOLALE LU ADA B200 ADD BACK SPACE FUNCTION STA CONND SET FOR CALL ADA B400 MAKE A DYNAMIC STATUS RQ STA DSTAT SET IT CCA SET FIRST EOF RECORD FLAG SPC0 STA OPEN IN OPEN JSB EXEC CALL EXEC DEF EXRTN TO DEF .3 BACK DEF CONND SPACE EXRTN JSB EXEC DO DYNAMIC STATUS DEF STRTN DEF .3 DEF DSTAT STRTN AND B200 MASK EOF BIT CCB ? DECREMENT ADB RC,I THE RECORD COUNT STB RC,I CCB SET B TO FORWARD SPACE 1 SZA,RSS IF EOF TEST FOR FIRST JMP *+3 ELSE SKIP TO COUNT THE RECORD ISZ OPEN SKIP IF EOF ON FIRST RECORD JMP FSRC ELSE GO FORWARD SPACE ISZ RCOU DONE? JMP SPC0 NO; DO NEXT ONE JMP EXOK YES; GO EXIT SPC 2 N5 DEC -5 B200 OCT 200 B400 OCT 400 B77 OCT 77 SPC 2 ER5 LDA N5 LENGTH MISMATCH ERROR JMP EXIT SEND ERROR CODE SPC 1 * TYPE 1 AND TWO SPACE ROUTINE * THE NEW RECORD NO. IS SET ONLY * NO EOF CHECK IS DONE * NEGATIVE OR ZERO RECORD * NUMBERS ARE REPLACED * WITH 1 AND SOF ERROR SENT * TY1/2 LDA ABRC GET THE ABSOLUTE RECORD NO. CCE,SZA IF ZERO SSA OR NEGATIVE CLA,CLE,INA SET TO ONE STA RC,I SET NEW RECORD NO. SEZ IF FOURCED TO ONE TAKE SOF EXIT SPC 2 EXOK CLA,RSS GOOD EXIT EOFEX LDA N12 EOF/SOF EXIT SPC 1 EXIT LDB DFZER EXIT-RESET STB NP OPTIONAL STB IR ADDRESSES STA ER,I SET ERROR AND JMP POSNT,I RETURN SPC 2 N12 DEC -12 * POST STORAGE SPC 2 .1 DEC 1 .3 DEC 3 SPC 2 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 END EQU * SPC 1 END ASMB,R,L,C HED APOSN * NAME: APOSN * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  * * *************************************************************** * NAM APOSN,7 92002-16006 750227 ENT APOSN EXT $KIP,NX$EC,RFLG$,.ENTR,LOCF SPC 1 * THE APOSN ROUTINE DOES ABSOLUTE FILE POSITIONING * OF RTE FILES * * CALLING SEQUENCE: * * CALL APOSN(IDCB,IERR,IREC,IRS,IOFF) SPC 1 * WHERE: * * IDCB IS THE FILES DATA CONTROL BLOCK * * IERR IS AN ERROR RETURN FLAG. POSSIBLE ERRORS, * 0 NO ERROR * -1 DISC DOWN * -5 SPACING BEYOND END OF DEFINED EXTENT * -9 ATTEMPT TO POSITION TYPE ZERO FILE * -10 NOT ENOUGH PARAMETERS * -11 DCB NOT OPEN * -12 SOF IE IREC <1 * * IREC THE RECORD NUMBER TO BE READ NEXT * * IRS (REQUIRED FOR 3 & ABOVE ONLY) THE * RELATIVE BLOCK OF THE NEXT RECORD * * * IOFF THE BLOCK OFFSET OF THE NEXT * RECORD (REQUIRED FOR TYPE 3 AND * ABOVE ONLY) * SPC 5 * PRE CONSTANT STORAGE SPC 2 TYPE NOP .2 DEC 2 .5 DEC 5 N11 DEC -11 N3 DEC -3 RC EQU TYPE SPC 5 DCB NOP ER NOP IRC NOP IRS NOP IOFF NOP SPC 1 APOSN NOP ENTRY POINT JSB .ENTR FETCH PRAM DEF DCB ADDRESSES SPC 1 CLB,INB SET THE READ STB RFLG$ FLAG LDB DCB COMPUTE ADB .2 TYPE STB TYPE AND ADB .5 STEP TO BLOCK LENGTH LDA B,I FETCH ARS,ALR AND ALF,ALF CONVERT RAL TONUMBER OF 128 WORD BLOCKS STA BLKSZ SAVE ADB .2 STEP TO OPEN FLAG LDA N11 IS LDB B,I DCB CPB XEQT OPEN? INA,RSS YES; SKIP JMP EXIT NO; EXIT INA SET A= 9 LDB TYPE,I IS FILE TYPE SZB,RSS ZERO? JMP EXIT ٩ YES; EXIT ADB N3 IF TYPE 1 OR 2 LDA IRC TEST FOR RECORD PRAM SSB,RSS ELSE TEST LDA IOFF FOR FULL PRAM SZA,RSS LIST JMP ER10 NOT ENOUGH PRAMS - EXIT SSB IF 1 OR 2 JMP RCSET GO SET RECORD NO. SPC 1 JSB LOCF USE LOCF TO DEF LOCRT GET DEF DCB,I CURRENT DEF ER,I RELATIVE DEF RC SECTOR DEF CIRS ADDRESS LOCRT CLB CALL LDA DCB SKIP JSB $KIP TO JMP EXIT SET UP NX$EC CLB CACULATE LDA CIRS THE RELATIVE DIV BLKSZ BLOCK CMA,INA NUMBER STA CIRS CLB LDA IRS,I DESIRED DIV BLKSZ AND SWP SET FOR ADB CIRS NS$EC CALL SZB,RSS IF ALREADY THERE JMP RCSET SKIP POSITION CALL JSB NX$EC POSITION WITH NX$EC JMP EXIT ERROR - EXIT RCSET RRL 7 LDB DCB GET DCB ADB .12 COMPUTE BUFFER POINTER ADDRESS STB CIRS ADB IOFF,I COMPUTE DESIREDED ADB .4 CONTENTS ADB A ADD THE NO OF 128 WORD BLOCKS STB CIRS,I AND SET ISZ CIRS STEP TO THE ISZ CIRS RECORD NUMBER LDB IRC,I SET RECORD NUMBER SZB ZERO SSB OR NEG JMP ER12 EXIT ERROR STB CIRS,I SET THE RECORD NUMBER CLA,RSS OK - EXIT ER10 LDA N10 EXIT CLB CLEAR STB IRC PRAM STB IOFF ADDRESSES FOR NEXT TIME STA ER,I SET ERROR CODE JMP APOSN,I RETURN. SPC 2 ER12 LDA N12 SEND EOF ERROR JMP EXIT SPC 2 * POST CONSTANTS SPC 1 N12 DEC -12 .4 DEC 4 .12 DEC 12 N10 DEC -10 BLKSZ NOP CIRS NOP SPC 2 A EQU 0 B EQU 1 XEQT EQU 1717B h SPC 1 END EQU * SPC 1 END ASMB,R,L,C,Q HED FCONT * NAME: FCONT * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FCONT,7 92002-16006 REV.1826 780413 * * CHANGE: 4\13\78 TO NOT CHECK A REG ON RETURN FROM EXEC * FOR EOF INDICATION. (GLM) * ENT FCONT EXT .ENTR,EXEC * * THIS IS THE TYPE ZERO CONTROL ROUTINE OF * THE RTE FILE MANAGEMENT PACKAGE. * * A STANDARD RTE CONTROL REQUEST IS ISSUED * TO THE DEVICE VIA THE EXEC IF THE * PCB IS OPEN TO A TYPE ZERO FILE. * CALLING SEQUENCE * CALL FCONT(IDCB,IERR,ICON1,ICON2) * WHERE: * IDCB IS THE DATA CONTROL BLOCK FOR * THE FILE. * IERR IS THE LOCATION FOR RETURNED * ERRORS. * POSSIBLE ERRORS ARE: * 0 NO ERRORS * -11 DCB NOT OPEN * * >0 NOT A TYPE ZERO FILE (IERR=TYPE) * ICON1 IS CONTROL WORD #1 - THE DEVICE * LU IS MURGED INTO THE LOW * 6 BITS OF THIS WORD * ICON2 IS CONTROL WORD TWO - OPTIONAL * ZERO IS USED IF NOT SPECIFIED * ON RETURN A = IERR * B = DEVICE STATUS SPC 3 * PRE CONSTANT AREA .2 OCT 2 TYPE NOP .7 OCT 7 SPC 3 IDCB DEF ZERO PARAMETER IERR DEF ZERO ADDRESS ICON1 DEF ZERO AREA ICON2 DEF ZERO SPC 1 FCONT NOP ENTRY POINT JSB .ENTR FETCH PARAMETERS DEF IDCB LDB IDCB GET DCB ADB .2 ADDRESS STB TYPE OF TYPE ADB .7 AND LDB B,I OPEN FLAG CPB XEQT OPEN? JMP OK YES, CONTINUE LDA N11 NO; SEND NOT OPEN ERROR EXIT STA IERR,I TO CALLER LDB DZERO RESET X REP 4 ENTRY STB *-X+IDCB ADDRESS CLB CLEAR DUMMY STB ZERO ZERO LDB STAT STATUS TO B AND JMP FCONT,I RETURN SPC 2 * MID CONSTANT AREA SPC 1 N11 DEC -11 DZERO DEF ZERO ZERO NOP STAT NOP SPC 1 B77 OCT 77 SPC 3 OK LDA TYPE,I GET FILE TYPE SZA ZERO? JMP EXIT NO; EXIT : TYPE IN A SPC 1 ISZ TYPE YES; STEP TO WORD WITH LU LDA TYPE,I GET LU AND B77 AND ISOLATE THEN STA B SAVE LDA ICON1,I GET THE FUNCTION AND B1777 MAKE SURE THE LOW END IS ZERO IOR B PUT THEM TOGETHER STA ICON1 SET FOR CALL JSB EXEC CALL EXEC TO DEF EXRTN DO DEF FUNC THE DEF ICON1 CONTROL DEF ICON2,I FUNCTION EXRTN JMP EXM17 ERROR RETURN FROM EXEC. STA STAT SAVE STATUS FOR RETURN CLA INDICATE NO ERRORS *780413* JMP EXIT GO; EXIT * EXM17 LDA N17 JMP EXIT * SPC 3 * POST CONSTANT AREA SPC 1 FUNC OCT 100003 B1777 OCT 177700 B200 OCT 200 N17 DEC -17 SPC 2 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 END EQU * SPC 1 END ASMB,R,L,C HED LOCF * NAME: LOCF * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOFmTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM LOCF,7 92002-16006 750416 ENT LOCF EXT P.PAS,.ENTR SPC 2 * * * LOCF RETURNS THE CURRENT STATUS OF A * RTE FILE TO THE CALLER. * SPC 1 * * THE FORTRAN CALLING SEQUENCE IS: * SPC 1 * CALL LOCF(IDCB,IERR,IREC,IRS,IOFF,JSEC,JLU,JTY,JREC) * SPC 1 * * W H E R E: * SPC 1 * IDCB IS THE DATA CONTROL BLOCK FOR THE FILE. * * IERR IS THE ERROR CODE RETURN. * POSSIBLE CODES ARE: * 0 - NO ERROR * -11 - DCB NOT OPEN * -10 - NOT ENOUGH PARAMETERS * * IREC IS THE RECORD NUMBER OF THE NEXT RECORD. * * IRS IS THE RELATIVE SECTOR OF THE NEXT RECORD./2 * * IOFF IS THE OFFSET IN THE SECTOR OF THE NEXT RECORD. * * JSEC IS THE NO. OF SECTORS IN THE FILE (OR EXTENT). * * JLU IS THE FILE'S LOGICAL UNIT. * * JTY IS THE FILE'S TYPE. * * JREC IS THE RECORD SIZE. * SPC 1 * ALL PARAMETERS AFTER IREC ARE OPTIONAL. * SKP DCB NOP IER DEF DM IREC DEF DM IRS DEF DM IOFF DEF DM JSEC DEF DM JLU DEF DM JTY DEF DM JREC DEF DM LOCF NOP ENTRY JSB .ENTR GET DFDCB DEF DCB PARAMETERS ADDRESSES LDA N10 NOT ENOUGH LDB IREC PRAM CPB DFDM TEST JMP EXIT NOT ENOUGH - EXIT LDA DCB SET A TO GET DCB CLB,CCE SET TO GET ERB,CLE ACTUAL WORDS JSB P.PAS CALL TO PASS N16 DEC -16 DCB LU NOP PARAMETERS AD NOP TYP NOP TRK NOP SEC NOP #SEC NOP SIZE NOP COUNT NOP SEC/T NOP OPCLS NOP CTRK NOP CSEC NOP BUFPT NOP TMP NOP REC NOP EXNO NOP LDB OPCLS IS LDA N11 FILE CPB XEQT OPEN? JMP OK YES; JUMP EXIT STA IER,I NO; SET EXIT CODE LDB N9 SET UP STB COUNT AND LDB DFDCB RESTORE STB AD DUMMY LDB DFDM PARAMETER STB AD,I ADDRESSES ISZ AD ISZ COUNT IN JMP *-3 CALL JMP LOCF,I EXIT SPC 3 OK LDB REC GET AND STB IREC,I SET RECORD NO. LDB #SEC SET STB JSEC,I THE FILE SIZE IN SECTORS LDA TYP GET THE TYPE CMA,INA,SZA,RSS SET NET AND TEST FOR ZERO JMP TYPST ZERO SO JUMP ADA .2 IF THREE OR GREATER SSA THEN JMP NOTRA JUMP NOT RANDOM ACCESS CCA COMPUTE THE OFFSET ADA REC AND BLOCK MPY SIZE FOR STA TMP TYPE AND B177 ONE AND STA IOFF,I TWO XOR TMP FILES ASR 7 NOW JMP STRS GO STORE IT NOTRA LDA DCB COMPUTE CMA,INA CURRENT ADA BUFPT BUFFER OFFSET ADA N16 ADJUST FOR BUFFER ADDRESS CLB RE ADDJUST OFFSET TO DIV .128 128 WORD BLOCK BASE STB IOFF,I STA TMP SAVE OVERFLOW LDA #SEC GET AND CLE,ERA DIVIDE BY TWO TO GET BLOCKS MPY EXNO COMPUTE EXTENT OFFSET STA EXNO AND SAVE LDA TRK COMPUTE RELATIVE CMA,INA SECTOR ADA CTRK CTRK-TRK MPY SEC/T (CTRK-TRK)*#SEC/TRACK LDB SEC CMB,INB ADA B (CTRK-TRK)*#S/TR-SEC ADA CSEC (CTRK-TRK)*#S/TR-SEC+CSEC CLE,ERA CONVERT TO BLOCKS ADA EXNO ADD #BLOCKS IN PREVIOUS EXTENTS ADA TMP ADD THE BLOCK OVER FLOW STRS STA IRS,I AND PASS TO CALLER TYPST LDB TYP GET AND SET STB JTY,I ʋ TYPE LDA LU GET LU (DISC FILE) SZB,RSS IS IT A DISC FILE? LDA TRK NO; USE TYPE 0 LU AND B77 MASK STA JLU,I AND SET LDA SIZE GET THE RECORD STA JREC,I SIZE AND SET IT CLA NO ERRORS JMP EXIT RETURN SPC 4 B177 OCT 177 .128 DEC 128 .2 DEC 2 N10 DEC -10 N11 DEC -11 N9 DEC -9 B77 OCT 77 DFDM DEF *+1 DM NOP A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 END EQU * SPC 1 END ASMB,R,L,C HED CLOSE * NAME: CLOSE * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM CLOSE,7 92002-16006 771115 ENT CLOSE EXT EXEC,.ENTR,R/W$,RMPAR SUP * * THIS IS THE CLOSE SUBROUTINE--A PART OF THE * REAL-TIME FILE MANAGEMENT PACKAGE * * THE ASSEMBLY CALL TO CLOSE A FILE IS: * * JSB CLOSE * DEF RTN RETURN ADDRESS * DEF IDCB DATA CONTROL BLOCK ADDRESS * DEF IERR (OPTIONAL) ERROR CODE RETURNED HERE AND IN A REG * DEF IRX (OPTIONAL) NO. OF 128 WORD DOUBLE *RTN SECTORS TO BE DELETED FROM THE FILE * * ERRORS ARE: * 0 NONE * -1 DISC DOWN * -10 NOT ENOUGH PARAMETERS * -11 FILE NOT OPEN * -13 DISC LOCKED * * * SKP IDCB DEF ZERO DCB ADDRESS IERR DEF IDCB ERROR CODE ADDRESS IRX DEF ZERO TRUNICATE CODE ADDRESS SPC 1 CLOSE NOP ENTRY POINT JSB .ENTR TRANSFER THE ADDRESSES DM DEF IDCB LDA IDCB IF NO PARAMETERS CPA DZ THEN JMP ER10 ERROR EXIT INA STEP TO WORD TWO STA DCB2 SAVE FOR D.RTR CALL ADA .8 ADD 8 TO GET THE THE OPEN FLAG STA OPNFL SAVE THE OPEN FLAG ADDRESS LDB A,I GET THE OPEN FLAG ADA N2 BACK UP TO THE STA SC SAVE THE SECURITY CODE ADDRESS CPB XEQT FILE OPEN? CLE,RSS YES SKIP JMP ER11 NO; ERROR EXIT LDB IDCB GET THE DCB ADDRESS JSB R/W$ CALL TO FLUSH THE BUFFER JMP EXIT DISC ERROR EXIT LDB DCB2 GET THE TYPE FLAG INB TO LDA B,I A SZA IF ZERO NO TRUNCATE LDA IRX,I DISC FILE SET TRUNCATE CODE ALS ADJUST FOR 64 WORD SECTORS ADB .13 STEP TO EXTENT WORD LDB B,I IF NOT SZB FIRST EXTENT CLA DO NOT ALLOW TRUNCATION LDB SC,I GET THE SECURITY FLAG SSB,RSS IF BAD SC CLA DIS ALLOW TRUNCATION CMA,INA SET NEGATIVE STA IRX SAVE SCHED JSB EXEC CALL EXEC DEF SCHRT TO DEF .9 SCHEDULE WITH WAIT DEF D.RTR D.RTR DEF XEQT WITH THE ID DEF IRX THE TRUNCATE WORD DEF IDCB,I THE FIRST DCB WORD DCB2 NOP THE SECOND DCB WORD DZ DEF ZERO AND THE CLOSE CODE SCHRT SZA SCHEDULE OK JMP SCHED NO; TRY AGAIN SPC 2 STA OPNFL,I CLEAR THE OPEN FLAG JSB RMPAR CALL RMPAR TO GET DEF *+2 RETURN PARAMETERS DEF ERTN TO LOCAL AREA LDA ERTN GET ERROR RETURN EXIT STA IERR,I SET THE ERROR CODE LDB DM RESET STB IERR THE CALL WORDS LDB DZ FOR THE STB IRX NEXT CALL STB IDCB AND JMP CLOSE,I EXIT ERROR CODE IN A  SPC 3 ER11 CCA FILE NOT OPEN - ERROR 11 ER10 ADA N10 NOT ENOUGH PRAMS - ERROR 10 JMP EXIT GO EXIT SPC 3 N10 DEC -10 N2 DEC -2 .8 DEC 8 .9 DEC 9 .13 DEC 13 SC NOP OPNFL NOP ZERO NOP D.RTR ASC 3,D.RTR ERTN NOP NOP LOCAL STORAGE FOR NOP RETURN PARAMETERS NOP FROM D.RTR NOP SPC 2 SPC 3 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 END EQU * SPC 1 END ASMB,R,L,C HED POST - CLEAR THE DCB BUFFER * NAME: POST * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM POST,7 92002-16006 740801 ENT POST EXT .ENTR,R/W$ * * * THE POST ROUTINE CLEARS THE DCB BUFFER BY POSTING ANY * DATA THAT NEEDS TO BE WRITTEN ON THE DISC. IT WILL IN * ALL CASES CLEAR THE INCORE FLAG SO THE NEXT FILE * ACCESS WILL FOURCE A DISC READ. * * POST IS TO BE USE WITH THE RN LOCK FEATURE AS * FOLLOWS: * * POST * LOCK * * DO YOUR THING * * POST * UNLOCK * * CALLING SEQUENCE: * * CALL POST(DCB,ER) * * WHERE: * * DCB IS THE DCB ARRAY * ER IS THE OPTIONAL RETURN ERROR CODE * DCB NOP ER NOP POST NOP ENTRY POINT JSB .ENTR GET THE PRAM ADDRESSES DEF DCB LDB DCB CHECK ADB D9 THAT THE DCB LDA B,I IS OPEN CPA XEQT YES? JMP OK YES! * LDA N11 NO RETURN ERROR EREXTRN STA ER,I SET THE ERROR CODE CLB SET ER ADDRESS STB ER FOR NEXT TIME JMP POST,I EXIT * OK LDB DCB GET THE DCB ADDRESS CLE SET E FOR WRITE JSB R/W$ GO POST THE BUFFER JMP EREX DISC ERROR GO EXIT * CLA ALL IS GOOD SET OK ERROR CODE JMP EREX AND GO EXIT * D9 DEC 9 N11 DEC -11 XEQT EQU 1717B A EQU 0 B EQU 1 END P+5 A = 0 IF NO ERROR ELSE ERROR * * ASSEMBLY ONLY * JSB EFLG. POST ANY PARTIAL RECORD IN MEMORY * DEF *+2 RETURN ADDRESS * P+2 A=0 IF NO ERROR ELSE ERROR SPC 1 * ERRORS: * THE PROGRAM WILL RETURN TO THE CALLING PROGRAM WITH * A,B= "IO06" ERROR IF THE "LG" AREA WAS NOT DEFINED, OR * A,B= "IO09" ERROR IF THE "LG" AREA OVERFLOWS. SPC 1 * NOTES: * "NAM" RELOCATABLE RECORDS MUST ALWAYS START ON A SECTOR BOUNDRY, * THEREFORE, WHENEVER AN "END" RELOCATABLE RECORD IS WRITTEN, THE * ENTRY POINT " EFLG. " MUST BE CALLED TO POST ANY PARTIAL RECORD * STILL IN MEMORY ONTO THE DISK. SPC 1 .WRIN NOP INIT2 STA BFWA SET THE BUFFER ADDRESS ON FIRST ENTRY CLA CLEAR FOR NEXT STA INIT2 ENTRIES LDA 1766B  LGOC= CURRENT LOAD/GO CODEWORD LDB D2 SSA INB STB WLUN LUN=2 IF SIGN=0, =3 OTHERWISE ALF,ALF RAL AND O377 STA TRACK SET TRACK NO. LDA 1766B LGOC= CURRENT LOAD/GO CODE-WORD AND O177 STA B STA SECTR SET SECTOR NO. LDA DM128 SLB CHECK IF ODD SECTOR IN RTE ARS YES, DIVIDE SECTOR TO 64 WORDS STA BCOUN SECTOR-BUFFER COUNT = -64 CMA,INA SET THE SECTOR SIZE STA PSIZE MAY BE 64 OR 128 WORDS IF RTE LDA BFWA STA BFRAD SET SECTOR BUFFER ADDR = FWA BFR JMP .WRIN,I * *EFLG. OUTPUTS THE WRITE-BUFFER TO THE CURRENT SECTOR *ON DISK, UPDATES THE CURRENT SECTOR NO. *EFLG. IS USUALLY CALLED AT THE END OF EACH SUBPROGRAM OUTPUT. SPC 1 EFLG. NOP LDA EFLG.,I GET RETURN ADD STA EFLG. AND SET IT CCA CHECK HOW MANY SECTORS TO POST ADA BCOUN ADA PSIZE A=# WORDS WRITTEN -1 IOR O77 MIRGE IN 63 SSA,INA CHECK IF ANY & BUMP JMP OKEX NONE, JUST RETURN * STA SSIZE EITHER 64 OR 128 LDB BCOUN IF NOT A WHOLE SECTOR CLA SZB STA BFRAD,I 0 FOR END OF SUBPROGRAM JSB EXEC WRITE SECTOR DEF *+7 DEF D2I CODE FOR WRITE DEF WLUN LUN BFWA NOP FWA OF BUFFER DEF SSIZE 64 OR 128 WORDS DEF TRACK TRACK NO DEF SECTR SECTOR NO JMP EFLG.,I RETURN IF ERROR * JSB .WRIN RE-INITIALIZE FOR NEXT WRITE OKEX CLA SHOW NO ERROR JMP EFLG.,I EXIT SPC 1 SSIZE NOP O77 OCT 77 O377 OCT 377 O177 OCT 177 SPC 1 WRLG. NOP LDA WRLG.,I STA EXIT SET RETURN ADR ISZ WRLG. LDA WRLG. LDA A,I RAL,CLE,SLA,ERA TEST I-BIT AND CLEAR JMP *-2 STA WBFAD SOURCE-BUFFER FWA ISZ WRLG. LDA WRLG.,I LDA 0,I CMA,INA STA COUNT SET COUNT ISZ WRLG. STEP TO THE BUFFER ADDRESS LDA WRLG. GET TO A LDA A,I AND TRACK DOWN INDIRECTS RAL,CLE,SLA,ERA JMP *-2 * INIT JSB .WRIN CALL TO INIT CLA FIRST TIME ONLY STA INIT SET IT WMOVE LDA WBFAD,I STA BFRAD,I MOVE WORD ISZ BFRAD POINTERS ISZ BCOUN BUMP SECTOR-BUFFER COUNT JMP NOEND NOT END OF BUFFER * JSB EFLG. END OF BUFFER, WRITE SECTOR DEF *+1 SZA IF OK JUST CONTINUE JMP EXIT,I ELSE EXIT A,B = CODE * NOEND ISZ WBFAD BUMP ISZ COUNT BUMP COUNTER JMP WMOVE CONTINUE TRANSFER * CLA SHOW NO ERROR JMP EXIT,I READY, EXIT SPC 1 EXIT NOP RETURN ADDR PSIZE DEC 128 DM128 DEC -128 D2 DEC 2 D2I DEF 2,I WLUN NOP LUN TRACK NOP CURRENT TRACK NO SECTR NOP CURRENT SECTOR NO BFRAD NOP CURRENT ADDR IN WRITE-BUFFER WBFAD NOP CURRENT SOURCE-BUFFER ADDR COUNT NOP TRANSFER COUNT BCOUN NOP B EQU 1 A EQU 0 END * * ASMB,L HED J.PUT * NAME: J.PUT * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM J.PUT,8 92002-16006 740801 ENT J.PUT EXT $LIBR,$LIBX EXT .ENTR * * J.PUT IS CALLED TO REQUEST A TRACK FOR THE FMGR * * THE CALL IS: * * CALL J.PUT(TAT1,CD,ER) * * >r W H E R E: * * TATA1 IS THE ADDRESS OF THE TAT WORD FOR THE DESIRED TRACK * CD IS THE CODE TO BE SET IN THE TAT. * ER IS 0 IF SUCCESSFUL OR NON-ZERO IF NOT. * * IF THE ERROR RETURN IS MADE NO TRACK WILL BE ASSIGNED. * * TATA1 NOP CD NOP ER NOP JPUT NOP JSB .ENTR DO ENTRY DEF TATA1 JSB $LIBR INHIBIT CHANGES NOP WHILE WE WORK LDB TATA1,I GET HIGH END OF TAT NEX LDA B,I GET CURRENT ASSIGNMENT SZA IF AVAILABLE CPA GLOBL OR GLOBAL CCA,RSS SKIP A _ -1 JMP EXIT ELSE ERROR RETURN LDA CD,I GET THE DESIRED CODE STA B,I SET IN TAT EXIT1 CLB SET B FOR GOOD ASSIGNMENT EXIT STB ER,I IT IS TRACK ON LU3 - SO SET IT JSB $LIBX EXIT DEF JPUT TO CALLER SPC 2 GLOBL OCT 77776 SPC 2 J.PUT EQU JPUT A EQU 0 B EQU 1 SPC 1 ENQ EQU * SPC 1 END ASMB,R,B,L HED IPUT * NAME: IPUT * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM IPUT,6 92002-16006 740801 B EQU 1 ENT IPUT EXT $LIBR,$LIBX ADDR BSS 1 VALUE BSS 1 IPUT NOP JSB $LIBR NOP ISZ IPUT DLD IPUT,I DST ADDR ISZ IPUT ISZ IPUT LDA VALUE,I LDB ADDR,I STA B,I JSB $LIBX DEF IPUT END ASMB,R,L,C HED WRIS$ * NAME: WRIS$ * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMRa: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM WRIS$,7 92002-16006 740801 ENT WRIS,IWRIS,WEOFS EXT %WRIS,%WRIN,%WEOF EXT .ENTR * THIS ROUTINE IS USED TO CALL THE WRITE SOURCE ROUTINE * FROM A FORTRAN PROGRAM * INITILIZE CALL * CALL IWRIS(IER) IER=0 IF OK -1 IF NO TRACKS * WRITE CALL * CALL WRIS(BUF,L,ER) BUFFER ,LENGTH(-CHARACTERS),ER SAME AS ABOVE * TERMINATE CALL * CALL WEOFS SPC 3 BUF NOP L NOP ER NOP WRIS NOP JSB .ENTR DEF BUF LDA BUF GET THE BUFFER ADDRESS STA BA SET IF FOR THE CALL LDA L,I GET THE LENGTH STA L SET IT JSB %WRIS CALL TO TRANSFER DEF RT BA NOP DEF L CCA,RSS NO TRACK RETURN RT CLA NORMAL RETURN STA ER,I SET ERROR CODE JMP WRIS,I RETURN SPC 2 IER NOP IWRIS NOP JSB .ENTR DEF IER JSB %WRIN MAKE INITILIZE CALL CCB,RSS NO DISC RETURN CLB OK RETURN STB IER,I SET ERROR CODE JMP IWRIS,I RETURN SPC 3 WEOFS NOP JSB %WEOF WRITE THE END OF FILE LDA WEOFS,I GET THE RETURN ADDRESS JMP A,I RETURN SPC 2 A EQU 0 B EQU 1 END ASMB,R,L HED BUMP ROUTINE * NAME: BUMP * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * *3 RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM BUMP.,8 92002-16006 741025 ENT BUMP. EXT $BATM,.ENTR A EQU 0 * T1 NOP T2 NOP BUMP. NOP JSB .ENTR FETCH PARAM ADDRS DEF T1 * LDA T1 INA STA T3 SAVE ADDR OF SECOND WORD DLD $BATM FETCH BATCH TIME CMA,CLE,INA COMPLEMENT CMB,SEZ CLE,INB CLE SET UP FOR NEXT ADD ADA T2,I SUBTRACT FROM PREVIOUS TIME ISZ T2 TO GET ELAPSED TIME SEZ,CLE INB ADB T2,I CMA,CLE,INA COMPLEMENT CMB,SEZ A DOUBLE INTEGER CLE,INB CLE SET UP FOR NEXT ADD ADA T1,I SUBTRACT FROM TIME LIMIT SEZ TO GET TIME LIMIT LEFT. INB ADB T3,I DST T1,I RETURN NEW LIMIT TO CALLER JMP BUMP.,I * T3 NOP * BSS 0 SIZE OF BUMP. END ASMB,R,L HED SET.T ROUTINE * NAME: SET.T * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM SET.T,8 92002-16006 740801 ENT SET.T EXT $LIBR,$LIBX,.ENTP,$BATM SUP * NT NOP OT NOP SET.T NOP JSB $LIBR PRIVILEGED SUBROUTINE NOP JSB .ENTP FETCH PARAM ADDRS DEF NT LDA XEQT IF NOT-> IN BATCH ADA D20 THEN LDA A,I DO NOT SET UP SSA,RSS BATCH FLAG SET? JMP EX NO * DLD $BATM FETCH BATCH TIME DST OT,I RETURN IT AS OLD TIME DLD NT,I FETCH NEW TIME DST $BATM SET AS NEW BATCH TIME EX JSB $LIBX DEF SET.T RETURN. * D20 DEC 20 XEQT EQU 1717B A EQU 0 B EQU 1 BSS 0 SIZE OF SET.T END ASMB,R,L HED TL ROUTINE * NAME: TL. * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM TL.,8 92002-16006 760322 ENT TL. EXT TL.P,$BATM A EQU 0 * TL. NOP FUNCTION FALSE IF DLD TL.P $BATM < TL.P < 0 SSB,RSS OR IF TL.P < 0 AND $BATM > 0. JMP TEXIT LDA D$BA GET DIRECT ADDRESS RAL,CLE,SLA,ERA FOR SECOND WORD LDA A,I BATCH TIMER. INA STA T2 SAVE IT. LDB T2,I IF $BATM IS > 0 THEN SSB,RSS EXIT FALSE. JMP FEXIT DLD TL.P CMA,CLE,INA DO A COMPARISON CMB,SEZ OF $BATM AND TL.P INB REMEMBERING THAT BOTH ADA $BATM ARE DOUBLE WORD SEZ INTEGERS. INB ADB T2,I SSB FEXIT CLA,RSS EXIT FALSE. TEXIT CCA EXIT TRUE (-1). JMP TL.,I * D$BA DEF $BATM T2 NOP * END ASMB,R,L HED ST.TM ROUTING * NAME: ST.TM * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *********\C****************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM ST.TM,8 92002-16006 741223 ENT ST.TM EXT .ENTR A EQU 0 * * THE FOLLOWING ROUTINE SETS UP THE BATCH * TIME VALUES FOR :JO. * HOUR NOP MIN NOP * ST.TM NOP JSB .ENTR DEF HOUR LDA MIN CLE,INA LDA A,I FETCH NUMBER OF 10'S OF MPY D100 MILLISECONDS AND HOLD IT. STA SEC LDA HOUR,I GET NUMBER OF MINUTES MPY D60 ADA MIN,I AND MULTIPLY TO GET 10'S OF MPY D6000 MILLISECONDS. ADA SEC ADD TO PREVIOUS VALUE. SEZ COMPENSATE FOR DOUBLE WORD INB INTEGER. CMA,CLE,INA COMPLEMENT AND INCREMENT THE CMB,SEZ,CCE DOUBLE WORD INTEGER. INB RBL,ERB SET SIGN IN ANY CASE JMP ST.TM,I RETURN TIME IN A AND B * D100 DEC 100 D60 DEC 60 D6000 DEC 6000 SEC NOP * BSS 0 SIZE OF ST.TM END ASMB,R,L HED B.FLG ROUTINE * NAME: B.FLG * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM B.FLG,8 92002-16006 741118 ENT B.FLG * EXT $LIBR,$LIBX,.ENTP * PARAM NOP * B.FLG NOP JSB ]$LIBR NOP JSB .ENTP DEF PARAM LDB XEQT IF NOT FMGR ADB D12 THEN DO NOT SET LDA B,I THE FLAG CPA "FM" FIRST WORD CHECK INB,RSS OK SKIP JMP EX BAD NEWS * LDA B,I GET NEXT WORD CPA "GR" OK? INB,RSS YES SKIP JMP EX NO EXIT * LDA B,I GET LAST WORD AND C377 MASK TO HIGH ONLY CPA BL MAKE IT? RSS YES SKIP JMP EX NO EXIT * LDB PARAM,I LDA XEQT ADA D20 STA PARAM LDA PARAM,I IOR MASK SZB,RSS XOR MASK STA PARAM,I EX JSB $LIBX DEF B.FLG * MASK OCT 100000 D12 DEC 12 C377 OCT 177400 "FM" ASC 1,FM "GR" ASC 1,GR BL OCT 20000 A EQU 0 B EQU 1 D20 DEC 20 XEQT EQU 1717B * END ASMB,R,L HED LULU ROUTINE * NAME: LULU. * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM LULU.,6 92002-16006 760227 ENT LULU. * EXT .ENTP,$LUSW,$LIBR,$LIBX,.DRCT * * THE FOLLOWING ROUTINE MANIPULATES THE * BATCH LU TRANSFORM TABLE. * LU1 BSS 1 LU2 BSS 1 * LULU. NOP JSB $LIBR NOP JSB .ENTP DEF LU1 CLA STA ADDR JSB .DRCT DEF $LUSW STA 1 LDA 1,I GET SIZE OF TABLE CMA,INA AND FORM COUNTER. STA CNTR INB LDA LU1,I SZA,RSS IS LU1 ZERO? JMP RESET YES. GO RESET THE TABLE. LOOP1 LDA 1,I SEARCH THE TABLE FOR (LU1-1). SSA KEEP TRACK OF EMPTY ENTRIES. STB ADDR SAVE ADDRESS OF EMPTY ENTRY. AND B377 INA CPA LU1,I JMP GOTIT HAVE IT. INB ISZ CNTR JMP LOOP1 LDB ADDR DO WE HAVE AN EMPTY ENTRY? SZB,RSS JMP OUT NO. NO ROOM. GOTIT LDA LU2,I WAS THIS A CLEAR REQUEST? SZA JMP *+3 NO. CCA CLEAR THE ENTRY. JMP DEP LDA LU1,I ADA M1 ALF,ALF PUT THE NEW LU TRANSFORM XOR LU2,I INTO THE TABLE. ADA M1 ALF,ALF DEP STA 1,I ISZ LULU. OUT JSB $LIBX DEF LULU. RESET CCA RESET LU TABLE TO STANDARD STA 1,I DEVICES BY CLEARING THE ENTRIES. INB ISZ CNTR JMP RESET JMP OUT-1 * B377 OCT 377 ADDR BSS 1 CNTR BSS 1 M1 DEC -1 * END ASMB,R,L HED RANGE ROUTINE * NAME: RANGE * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM RANGE,8 92002-16006 740801 ENT RANGE * EXT .ENTR * FNUM NOP BUFR NOP * RANGE NOP JSB .ENTR DEF FNUM LDB FNUM,I LDA BUFR,I ALF,ALF ADA BUFR,I AND B377 CMA,INA ADA FNUM,I ISZ BUFR SSA JMP *+3 ISZ BUFR JMP RANGE+4 LDA BUFR,I JMP RANGE,I * B377 OCT 377 * END hTRNNTASMB,R,L HED ONOFF ROUTINE * NAME: ONOFF * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM ONOFF,8 92002-16006 750128 ENT ONOFF,FIT. * EXT .ENTR,CONV.,EXEC,J.NAM,.DRCT EXT OPEN.,WRITF,O.BUF,TMP.,.DFER * * JNAME BSS 1 TMVAL BSS 1 * ONOFF NOP JSB .ENTR DEF JNAME LDB JNAME,I SZB,RSS JMP OFFM JSB .DFER DEF JOBM+4 DEF JNAME,I JSB .DFER DEF J.NAM DEF JNAME,I LDA MONTH+2 STA ONOFM+1 LDA ON STA ONOFM+2 JMP CONVT OFFM JSB .DFER DEF JOBM+4 DEF J.NAM LDA OFF LDB OFF+1 STA ONOFM+1 STB ONOFM+2 CONVT LDA TMVAL ADA D3 STA SAVE JSB CONV. CONVERT HOURS. DEF *+4 DEF SAVE,I DEF TMES1 DEF D2 LDA TMVAL ADA D2 STA YEAR JSB CONV. DEF *+4 DEF YEAR,I DEF SAVE DEF D2 JSB .DRCT DEF TMES1+1 LDB SAVE JSB FIT. LDA TMVAL INA STA SAVE JSB CONV. DEF *+4 DEF SAVE,I DEF TMES2+1 DEF D2 JSB CONV. DEF *+4 DEF TMVAL,I DEF SAVE DEF D2 JSB .DRCT DEF TMES3 LDB SAVE JSB FIT. LDA TMVAL ADA D5 STA SAVE LDB 0,I CHECK FOR LEAP YEAR. CLE,ERB LDA RYTAB SEZ,SLB,RSS LDA LYTAB GET CORRECT TABLE ADDRESS. STA DAY JSB CONV. CONVERT YEAREY TO ASCII. DEF *+4 DEF SAVE,I DEF YEAR+1 DEF D4 LDA TMVAL ADA D4 STA SAVE CLB LOOP LDA DAY,I FIGURE OUT MONTH. SZA,RSS JMP ENDLP ADA SAVE,I SSA,RSS JMP ENDLP INB ISZ DAY JMP LOOP ENDLP INA STA SAVE BLS ADB MNTAB LDA 1,I STA MONTH INB LDA 1,I STA MONTH+1 JSB CONV. CONVERT DAY AND STORE. DEF *+4 DEF SAVE DEF DAY DEF D2 JSB .DRCT DEF TMP. ADA D3 STA PAR3 JSB OPEN. OPEN THE LIST FILE. DEF *+5 DEF O.BUF DEF TMP. PAR3 BSS 1 DEF D0 JSB WRITF DEF *+5 DEF O.BUF DEF SAVE1 DEF JOBM+1 DEF JOBM JMP ONOFF,I * ADDR BSS 1 SAVE1 BSS 1 FIT. NOP STA ADDR STB SAVE1 ASR 8 LDA ADDR,I RRL 8 BLF,BLF STB ADDR,I ISZ ADDR LDA SAVE1 ASL 16 LDA ADDR,I ALF,ALF RRL 8 STB ADDR,I JMP FIT.,I * D0 DEC 0 WRITE EQU * D2 DEC 2 D3 DEC 3 D4 DEC 4 D5 DEC 5 ICNW OCT 6 SAVE BSS 1 * RYTAB DEF *+1 DEC -335 DEC -305 DEC -274 DEC -244 DEC -213 DEC -182 DEC -152 DEC -121 DEC -91 DEC -60 DEC -32 DEC -1 DEC 0 * LYTAB DEF *+1 DEC -336 DEC -306 DEC -275 DEC -245 DEC -214 DEC -183 DEC -153 DEC -122 DEC -92 DEC -61 DEC -32 DEC -1 DEC 0 * MNTAB DEF *+1 ASC 2, DEC ASC 2, NOV ASC 2, OCT ASC 2, SEP ASC 2, AUG ASC 2, JUL ASC 2, JUN ASC 2, MAY ASC 2, APR ASC 2, MAR ASC 2, FEB ASC 2, JAN * JOBM DEC 25 ASC 1, ASC 2,JOB BSS 3 ONOFM ASC 1, ASC 4,b AT TMES1 BSS 1 ASC 1,: TMES2 ASC 1, : BSS 1 TMES3 ASC 1,. ASC 1, ASC 1, O ASC 1,N DAY BSS 1 MONTH BSS 2 ASC 1, YEAR BSS 2 ON ASC 1,ON OFF ASC 2, OFF * END ASMB,R,L HED EX.TM ROUTINE * NAME: EX.TM * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM EX.TM,8 92002-16006 771115 ENT EX.TM * EXT $BATM,TM.VL,CONV.,IPUT,.DRCT EXT EXEC,FIT.,.ENTR,WRITF,O.BUF EXT FM.ER SUP A EQU 0 XEQT EQU 1717B * * THE FOLLOWING ROUTINE PRINT OUT TOTAL * EXECUTION TIME FOR THE CURRENT JOB. * EX.TM NOP JSB .ENTR DEF EX.TM DLD TM.VL CMA,CLE,INA CMB,SEZ INB DST SAVE1 DLD $BATM CLE ADA SAVE1 SEZ INB ADB SAVE2 DST SAVE1 CLA STA SAVE3 JSB .DRCT DEF $BATM STA HSEC INA STA SEC ** * LDA XEQT CHECK TO SEE IF BATCH FLAG SET ADA D20 LDA A,I ELA BATCH FLAG SET?? SEZ,RSS JMP NOBTH NOT SET SO DON'T TOUCH THE BATCH TIMER * JSB IPUT GO CLEAR THE FIRST WORD DEF *+3 DEF HSEC DEF SAVE3 JSB IPUT AND NOW THE SECOND WORD DEF *+3 DEF SEC DEF SAVE3 ** * NOBTH DLD SAVE1 * DIV D6000 STB SAVE3 CLB DIV D60 STA SAVE1 HOURS STB SAVE2 MINUTES LDA SAVE3 CLB DIV D100 STA SEC SECONDS STB HSEC HUNDREDTHS OF SECONDS JSB CONV. CONVERT AND STORE HOURS. DEF *+4 DEF SAVE1 DEF EXMS1 DEF D2 JSB CONV. CONVERT AND STORE MINUTES. DEF *+4 DEF SAVE2 DEF SAVE1 DEF D2 JSB .DRCT DEF EXMS1+1 LDB SAVE1 JSB FIT. JSB CONV. CONVERT AND STORE SECONDS. DEF *+4 DEF SEC DEF EXMS2+1 DEF D2 JSB CONV. CONVERT HUNDREDTHS OF SECONDS. DEF *+4 DEF HSEC DEF SAVE1 DEF D2 JSB .DRCT DEF EXMS2+2 LDB SAVE1 JSB FIT. JSB WRITF DEF *+5 DEF O.BUF DEF SAVE1 DEF EXMS+1 DEF EXMS JSB WRITF NOW DO TOP OF DEF *+5 FORM TO FINISH DEF O.BUF THE JOB DEF SAVE1 DEF EXMS+1 DEF N1 LDA SAVE1 IF ERROR ON LIST FILE SSA,RSS THEN JMP EX.TM,I * JSB FM.ER REPORT TO OPERATOR DEF EX DEF D2 DEF LISTO DEF D7 EX JMP EX.TM,I * EXMS DEC 15 ASC 9, EXECUTION TIME: EXMS1 BSS 1 ASC 1,: EXMS2 ASC 1, : BSS 1 ASC 1,. ASC 1, * N1 DEC -1 D1 DEC 1 D2 EQU * WRITE DEC 2 ICNW OCT 6 SAVE1 BSS 1 SAVE2 BSS 1 SAVE3 BSS 1 HSEC BSS 1 SEC BSS 1 D6000 DEC 6000 D100 DEC 100 D60 DEC 60 D20 DEC 20 * D7 DEC 7 LISTO ASC 7,LIST OVERFLOW! END ASMB,R,L HED FREES ROUTINE * NAME: FREE. * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * ***********************N**************************************** * NAM FREE.,8 92002-16006 740801 ENT FREE. * EXT .ENTR * * NUMBR BSS 1 ADDR BSS 1 * FREE. NOP JSB .ENTR DEF NUMBR LDA NUMBR,I AND MASKL ALF,ALF CLB ADA M60 MPY D10 STA 1 LDA NUMBR,I AND B377 ADA M60 ADA 1 CMA,INA STA NUMBR LDB ADDR,I LOOP1 LDA M16 STA CNTR CLA,INA LOOP2 ISZ NUMBR JMP *+4 XOR 1,I STA 1,I JMP FREE.,I ISZ CNTR JMP *+3 INB JMP LOOP1 RAL JMP LOOP2 * CNTR BSS 1 M16 DEC -16 M60 OCT -60 D10 DEC 10 B377 OCT 377 MASKL OCT 177400 * END ASMB,R,L HED LU.CL ROUTINE * NAME: LU.CL * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM LU.CL,8 92002-16006 760702 ENT LU.CL * EXT LULU.,.ENTR,$LUSW,.DRCT,EXEC * * THE FOLLOWING ROUTINE GOES THROUGH THE $LUSW * TABLE AND CLOSES ALL SPOOL LU'S. * * LU.CL NOP JSB .ENTR DEF LU.CL JSB .DRCT DEF $LUSW STA ADDR LDB 0,I CMB,INB STB CNTR LOOP2 ISZ ADDR LDA ADDR,I SSA JMP LOOP1 * ALF,ALF GET THE DIRECT LU AND B77 INA STA LUNO JSB EXEC DEF *+5 DEF D23 DEF SMPA DEF D4 DEF LUNO LOOP1 ISZ CNTR JMP LOOP2 * JSB LULU. ALL CLOSED NOW CLEAR THE TABLE DEF *+2 DEUF ZERO ZERO NOP IGNOR ERROR RETURN JMP LU.CL,I RETURN * D4 DEC 4 D23 DEC 23 B77 OCT 77 ADDR BSS 1 CNTR BSS 1 LUNO BSS 1 SMPA ASC 3,SMP * END ASMB,R,L HED AVAIL ROUTINE * NAME: AVAIL * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM AVAIL,8 92002-16006 741231 ENT AVAIL,.LUAV * EXT .ENTR,$LUAV * ADDR NOP MASK NOP FNUM NOP * AVAIL NOP JSB .ENTR DEF ADDR LDA M5 STA SAVE1 CLA,INA STA FNUM,I LOOP1 LDB M16 STB SAVE2 LOOP2 STA MASK,I AND ADDR,I SZA,RSS JMP HAVIT ISZ FNUM,I LDA MASK,I RAL ISZ SAVE2 JMP LOOP2 ISZ ADDR ISZ SAVE1 JMP LOOP1 CLA STA FNUM,I JMP AVAIL,I HAVIT LDA MASK,I IOR ADDR,I STA ADDR,I JMP AVAIL,I * SAVE1 BSS 1 SAVE2 BSS 1 M5 DEC -5 M16 DEC -16 D2 DEC 2 DLUAV DEF $LUAV * .LUAV NOP LDA $LUAV GET THE TABLE COUNT SZA,RSS IF ZERO, JMP EX JUST EXIT * STA SAVE1 SET THE COUNTER LDA .LUAV,I GET THE PRAM ADDRESS STA AVAIL AND SAVE IT LDB DLUAV GET THE TABLE ADDRESS RBL,CLE,SLB,ERB MAKE DIRECT LDB B,I GET ADDRESS INB STEP TO FIRST WORD AVLOP LDA B,I GET THE ENTRY AND B77 CPA AVAIL,I HERE? JMP EX YES GO EXIT * ADB D2 NO STEP TO NEXT ENTRY ISZ SAVE1 IS THERE ONE?  JMP AVLOP YES GO TRY IT * CLA MAKE OK EXIT EX ISZ .LUAV STEP TO RETURN ADDRESS JMP .LUAV,I AND RETURN * B77 OCT 77 A EQU 0 B EQU 1 END ASMB,R,L,C HED READ ROUTINE * NAME: READ * SOURCE: 92002-18006 * RELOC: 92002-16006 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM READ.,7 92002-16006 740801 ENT READ. EXT %READ,.ENTR * * * READ. IS AN INTERFACE ROUTINE TO CALL THE * READS ROUTINE FROM FORTRAN. * * THE CALL IS: * * CALL READ.(LU,BUF,RQLN,RTNLN) * * W H E R E: * * LN IS THE LOGICAL UNIT. * BUF IS THE USER'S BUFFER * RQLN IS THE REQUEST LENGTH IN WORDS. * RTNLN IS THE RETURN LENGTH IN WORDS. * * ON END OF FILE RTNLN IS SET TO -1. * * LU NOP BUF NOP LN NOP L NOP READ. NOP JSB .ENTR GET PARAMETERS DEF LU LDA LN,I SET LENGTH CMA,INA TO NEGATIVE ALS CHARACTERS STA LN AND STORE JSB %READ CALL READS ROUTINE DEF *+5 NORMAL RETURN DEF LU,I LU DEF BUF,I BUFFER DEF LN LENGTH CCB,RSS EOF RETURN - SET TLOG TO -1 INB NORMAL RETURN ROUND UP BRS CONVERT TO WORDS STB L,I STORE IN USER AREA JMP READ.,I RETURN END ]0.**0SPL,L,O ! NAME: FID. ! SOURCE: 92002-18006 ! RELOC: 92002-16006 ! PGMR: G.A.A. ! DATE: 740801 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME FID.(8) LET DR.RD BE SUBROUTINE,EXTERNAL LET READI BE CONSTANT(1) LET PK.DR,D.LT BE INTEGER,EXTERNAL ! FID.: FUNCTION (DS)GLOBAL !RETURNS FALSE IF A FILE SYSTEM !EXIST ON DISC WITH ID !DS LET NAM.. BE SUBROUTINE,EXTERNAL DR.RD(READI,DS,0)?[GO TO RETF] !READ THE DIRECTORY ! PDIR8_[PDIR7_[PDIR6_[PDIR5_[PDIR3_[PDIR_@PK.DR]\ +3]+2]+1]+1]+1 DO[TX_$PDIR;$PDIR_TX AND 77777K] DO[NAM..(PK.DR);AREG_$0;$PDIR_TX]!CHECK ASC LABEL IF AREG THEN GOTO RETF !IF ILLEGAL OR FLAG IF TX>0 THEN GOTO RETF !NOT SET THEN NO FILE IF $(PDIR3 )<0 THEN GOTO RETF !IF LABEL WORD LESS THAN ZERO IF $(PDIR7 )-$(PDIR8 )-1 #$D.LT THEN GOTO RETF !LTR MAKE IF $(PDIR6 )<$(PDIR5 ) THEN GO TO RETF DO[FID.V_0; RETURN] RETF: DO[FID.V_1;RETURN] END ! END END$ SPL,L,O ! NAME: MSC. ! SOURCE: 92002-18006 ! RELOC: 92002-16006 ! PGMR: G.A.A. ! DATE: 740801 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  * ! *************************************************************** ! NAME MSC.(8) ! THIS ROUTINE CHECKS THE PASSED PARAMETER AGAINST THE ! SYSTEM MASTER SECURITY CODE ! LET D.RIO BE SUBROUTINE,EXTERNAL LET D.SDR BE INTEGER,EXTERNAL MSC.: FUNCTION(LST)GLOBAL ! RETURNS 1 IF GOOD 0 IF BAD D.RIO(1) !READ THE DIRECTORY OF DISCS IFNOT [T_$(@D.SDR+126)] THEN GO TO GOOD IF $(@LST+1)=T THEN [GOOD: RETURN 1] RETURN 0 END END END$ SPL,L,O ! NAME: LOCK. ! SOURCE: 92002-18006 ! RELOC: 92002-16006 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME LOCK.(8)"92002-16006 771118" ! ! THIS ROUTINE OBTAINS A LOCK AND RELEASES IT ON THE ! GIVEN DISC LET MSS.,EXEC,RMPAR BE SUBROUTINE, EXTERNAL LET DS.DF,D. BE INTEGER,EXTERNAL LET BREG(5) BE INTEGER INITIALIZE A,B,XEQT TO 0,1,1717K ! ! LOCK.:SUBROUTINE(DSID,RQ)GLOBAL,FEXIT !ROUTINE TO REQUEST AND ! RELEASE DISC LOCKS LOCK: EXEC(23,D.,$XEQT,0,DSID,0,RQ) !CALL D.RTR TO GET THE LOCK RMPAR(BREG) IF BREG(1) THEN[MSS.(BREG);FRETURN]! IF ERROR THEN ERROR RETURN DS.DF_0 ! CORE COPY IF ANY IS WRONG NOW RETURN! ELSE GO NORMAL RETURN END END END$ SPL,L,O ! NAME: FM.UT ! SOURCE: 92002-18006 ! RELOC: 92002-18006 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * ! * RESERVED. NO PART OF" THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME FM.UT(8) "92002-16006 771118" ! LET EXEC,MSS.,RMPAR BE SUBROUTINE,EXTERNAL LET D.RIO,DR.RD,DR.SU BE SUBROUTINE LET FM.AB BE LABEL,EXTERNAL LET MSC. BE FUNCTION LET IFLG. BE INTEGER,EXTERNAL LET D.SDR,PK.DR BE INTEGER(128),GLOBAL LET DS.LU,D.LT,D.LB BE INTEGER,GLOBAL LET D. BE INTEGER,EXTERNAL LET DS.DF,DS.F1 BE INTEGER,GLOBAL LET DT(5) BE INTEGER INITIALIZE DS.DF,DS.F1 TO 0,0 LET READI BE CONSTANT(1 ) LET XEQT BE CONSTANT(1717K) LET TEMP BE CONSTANT(1721K) LET PRC BE CONSTANT(74000K) LET TATSD BE CONSTANT(1756K) LET WRIT BE CONSTANT(2 ) LET A BE CONSTANT (0) LET B BE CONSTANT (1) ! ! D.RIO:SUBROUTINE(RCODE) GLOBAL !READ DISC DIRECTORY IF DS.DF THEN[IF RCODE=READI THEN RETURN]!IF IN DO[TRAK_$TATSD-1;T_0]!PRESET FOR DIRECT ACCESS IFNOT IFLG. THEN[IF RCODE=WRIT THEN \!CAN NOT USE DIRECT CALL [DR.SU(D.SDR,-65,100000K,7);GOTO DIR02]]!USE D.RTR DIR0: EXEC(RCODE,74002K,D.SDR,128,TRAK,0)!WRIT/READ THE BLOCK BREG_$B !IF TLOG#128 THEN ERR IF BREG#128 THEN [MSS.(1001,2);GOTO FM.AB] DIR02:DS.DF_1 !SET IN CORE FLAG AND RETURN !RETURN END ! ! DR.RD:SUBROUTINE(RCOD,DISID,BLK)FEXIT,GLOBAL ! ! THIS SUBROUTINE READS/WRITES THE DIRECTORY BLOCK ! SPECIFIED BY BLK FROM THE DISC IDENTIFIED ! BY DISID. FEXIT IS TAKEN IF THE ! DISC CANNOT BE FOUND OR IF THE END ! OF THE DIRECTORY IS REACHED. ! ! NOABT _ 100000K ! IF DISID=DS.F1 THEN[IF RCOD=WRIT THEN[IFNOT BLK THEN\ n GOTO DIRR2];GOTO DRRD1] D.RIO(READI) IF DISID<0 THEN[DLU_-DISID;T_0], \ ELSE[DLU_DISID;T_2] FOR I_0 TO 124 BY 4 DO[IF$(@D.SDR+I+T)=DLU\ THEN GOTO DIRR0] EXITF:FRETURN ! EREX: MSS.(-1006,$DS.LU) GOTO FM.AB ! ! THE DISID HAS BEEN FOUND SO READ IN BLK0 DIRR0:D.LB_[D.LT_[DS.LU_@D.SDR+I]+1]+1 ! SET POINTERS DIRR6:TX_[IF $DS.LU=2 THEN 14 ,ELSE 0] IF RCOD=WRIT THEN[IFNOT BLK THEN GO TO DIRR2] EXEC(NOABT+READI,PRC+$DS.LU ,PK.DR,128,$D.LT,TX) GOTO EREX !DRIVER REJECTED CALL. DO[BREG_$B;IF BREG#128 THEN[MSS.(1001,$DS.LU);GOTO FM.AB]] DIRR2:DS.F1_DISID !SET UP DISC ID DISBL_0 !ALSO THE CURRENT BLOCK DISNT_$(@PK.DR+8) !AND # OF DIRECTORY TRACKS DS.SC_$(@PK.DR+6) !SET NO. OF SECTORS ! IF (BLK=0) AND (RCOD=READI) THEN GO TO EXIT ! CALCULATE THE SECTOR ADDRESS DRRD1:TR_(BLK*14+TX)/DS.SC !COMPUTE THE SECTOR ADDRESS T_$1 !SET IN T TR_TR/7 !RELATIVE TRACK TO TR IF (TR+DISNT)> -1 THEN GO TO EXITF TR_$D.LT-TR !SET THE TRACK ADDRESS IN TR ! ! READ/WRITE IFNOT IFLG. THEN[IF RCOD =WRIT THEN[\ DR.SU(PK.DR,DISID,BLK,9);GOTO EXIT ]]!USE D.RTR IF NEEDED ! DRRD4:EXEC(NOABT+RCOD,PRC+$DS.LU,PK.DR,128,TR,T) GOTO EREX !DRIVER REJECTED CALL. BREG_$B !TEST FOR ERRORS IF BREG#128 THEN[MSS.(1001,$DS.LU); GOTO FM.AB] EXIT: RETURN !RETURN END ! DR.SU:SUBROUTINE(BUF,ID,RS,CD) ! THIS ROUTINE WRITES ON A DIRECTORY SECTOR BY: ! CALLING THE SYSTEM FOR ONE TRACK ! WRITING THE SECTOR THERE ! PASSING THE TRACK TO D.RTR ! RETURNING THE TRACK ! EXEC(4,1,TR,LU,FLG)!GET TRACK DRSU0:EXEC(2,LU,BUF,128,TR,0)!WRITE THE SECTOR DO[BREG_$B; IF BREG#128 THEN[MSS.(1001,LU);GO TO FM.AB]]!ERRORS?? ! DRSU2:EXEC(23,D.,$XEQT,(TR-<6)+LU,ID,RS,CD)!CALL D.RTR TO WRITE THE SEC E EXEC(5,1,TR,LU)!RETURN THE TRACK RMPAR(DT) IF DT(1) THEN [MSS.(DT);GO TO FM.AB]! IF ERROR ABORT RETURN END END END$ SPL,L,O ! NAME: CREA. ! SOURCE: 92002-18006 ! RELOC: 92002-16006 ! PGMR: G.A.A. ! DATE: 740801 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME CREA.(8) LET CLOS.,CREAT,IER. BE SUBROUTINE,EXTERNAL LET .E.R. BE INTEGER,EXTERNAL CREA.:SUBROUTINE(DCBR,LUR,PPLIS) GLOBAL,FEXIT CLOS.(DCBR) !CLOSE CURRENT FILE IF OPEN IF LUR <64 THEN FRETURN DCB3_[DCB2_[DCB1_@PPLIS+1]+1]+1 CREAT(DCBR,.E.R.,LUR,$DCB3,$DCB2,PPLIS,$DCB1) IER. $DCB3_.E.R.>- 1 !SET ACTUAL SIZE FOR TRUNCATE OPTION RETURN END END END$ SPL,L,O ! NAME: CK.SM ! SOURCE: 92002-18006 ! RELOC: 92002-16006 ! PGMR: G.A.A. ! DATE: 740801 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME CK.SM(7) "92002-16006 REV. 1805 771205" ! CK.SM:SUBROUTINE(BF,TYP)GLOBAL,FEXIT !CHECKSUM ROUTINE ! ! A CHECKSUM IS DONE ON BUFFER BF FOR ! RECORD TYPE TYP(1=RELOCATABLES, 0=>ABS) ! FEXIT IF BAD CHECKSUM ! IF [TT_BF-<8]>377K OR TT<0 THEN GO TO RTNF DO[CSS_$(@BF+2);CS_$(@BF+1)] !INITIALIZE CHECKSUM IF TYP THEN BFBP_ -1,ELSE[\ !SET OFFSET AND IF ABS BFBP_1;CS_CSS+CS] !ADD WD THREE TO CS CLN_TT +@BF+BFBP !SET LAST WORD ADDRESS AND IFNOT TYP THEN CSS_$(CLN+1) !IF ABS. SET CHECKSUM FOR BFPT_@BF+3 TO CLN DO[CS_CS+$BFPT] !SUM IF CS=CSS THEN RETURN !CHECK & RETURN RTNF: FRETURN END END END$ ASMB,R,L HED CHECK ID ROUTINE * NAME: CK.ID * SOURCE: 92002-18006 * RELOC: 92002-16006 * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM CK.ID,7 92002-16006 REV.1826 780403 ENT CK.ID EXT .ENTR,$OPSY * * THIS ROUTINE VALIDATES AN ID SEGMENT ADDRESS. * * CALLING SEQUENCE: JSB CK.ID * DEF *+2 * DEF ID ID SEGMENT ADDRESS * * RETURN: E=0 VALID ID SEGMENT ADDRESS * E=1 INVALID ID SEGMENT ADDRESS * ID NOP CK.ID NOP JSB .ENTR DEF ID LDA ID,I FETCH ID SEGMENT ADDRESS SZA,RSS ZERO? JMP CKID1 YES LDB $OPSY OP SYSTEM IDENTIFIER ERB,ERB GET MAPPED BIT TO E LDB KEYWD MAKE SURE THE ADDRESS POINTS STB IADDR TO A VALID ID SEGMENT NEXT SEZ MAPPED SYSTEM? JMP XLOAD YES, CROSS LOAD OF IDSEG ADDRESS LDB IADDR,I NO, DIRECT LOAD OF IDSEG ADDRESS TEST CPB 0 DOES IT MATCH THIS ONE? JMP CKID2 YES, ITS VALID ISZ IADDR NO, TRY THE NEXT ONE SZB END OF KEYWORD BLOCK? JMP NE'XT NO, CONTINUE CKID1 CCE,RSS INVALID ID SEGMENT ADDRESS CKID2 CLE VALID ID SEGMENT ADDRESS JMP CK.ID,I RETURN * XLOAD XLB IADDR,I NEXT IDSEG ADDR FROM KEYWORD BLOCK JMP TEST CONTINUE * KEYWD EQU 1657B IADDR BSS 1 * END ASMB,R,L,C HED "IDSGA" FTN/SPL FUNCTION TO FIND IDSEG ADDRESS OF PROG * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: D.L.B. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** NAM ID.A,6 92002-16008 REV.1826 780403 ENT ID.A ENT IDSGA EXT .ZPRV,$OPSY * CALLED: * IDSEG = IDSGA(NAME) * WHERE: * NAME = THREE WORD ASCII (5 CHARS) BUFFER WITH NAME OF PROG * IDSEG = THE ID SEGMENT ADDRESS OF THE NAME * RETURN: * A-REG = ID SEGMENT ADDRESS OF NAME IF FOUND OR = 0 IF NOT FOUND * E-REG = 0 IF NAME FOUND OR = 1 IF NOT FOUND. * B-REG = 0 * (I BELIEVE THAT THIS ROUTINE IS COMPATABLE WITH ID.A) * NOTE: IF NAME IS NULL THEN FIND BLANK IDSEG ADDRESS. SPC 1 IDSGA NOP ENTRY FTN CALLING SEQUENCE ID.A EQU IDSGA JSB .ZPRV DO THE $LIBR THING DEF LIBX ISZ IDSGA AVOID .ENTR,.DFER LDB IDSGA GET NAME ADDRESS LDB B,I GET NEXT LEVEL RBL,CLE,SLB,ERB TRACK DOWN INDIRECTS JMP *-2 STB NAME AND SAVE FOR LATER USE INB BUMP TO 2ND WORD IN NAME STB NAME+1 SAVE ADDRESS OF NAME(2) INB BUMP TO LAST CHAR LDA B,I PICK UP AND OM400 NULL LAST CHAR STA NAME+2 SAVE VALUE OF NAME(3) LDB $OPSY OP SYSTEM IDENTIFIER ERB MOVE MAPPED BIT FOR SLA STB STYPE SAVE FOR LOADA ROUTINE LDB KEYWD GET KEYWORD POINTER ON BASE PAGE STB POINT SAVE TEMP RSS SKIP THE ISZ 1ST TIME LOOP ISZ POINT BUMP TO NEXT IDSEG ADDRESS LDB POINT GET ID SEGMENT ADDRESS JSB LOADA OF NEXT PROGRAM STA B CCE,SZB,RSS CHECK IF LAST ENTRY JMP ENDTA YES, NOT FOUND PROGRAM ADB D12 POINT TO PROGRAM NAME AREA JSB LOADA GET CHARS 1 & 2 CPA NAME,I EQUAL ? INB,RSS YES, CHECK NEXT 2 JMP LOOP NO, TRY NEXT PROGRAM JSB LOADA GET CHARS 3,4 CPA NAME+1,I EQUAL? INB,RSS YES, BUMP AGAIN JMP LOOP NO, TRY NEXT PROGRAM JSB LOADA GET LAST CHAR AND OM400 MASK TO 5TH CHAR CPA NAME+2 RSS FOUND! JMP LOOP TRY NEXT PROG LDB POINT JSB LOADA RETURN A=ID SEGMENT ADDRESS CLB,CLE ENDTA ISZ IDSGA SET RETURN POINT E=FOUND FLAG LIBX JMP IDSGA,I P+3 DEF IDSGA FOR JSB $LIBX * LOADA NOP DOES XLA B,I IF MAPPED SYSTEM LDA STYPE OP SYSTEM IDENTIFIER (AFTER ERB) SLA MAPPED SYSTEM? JMP MAPSY YES, DO CROSS-MAP LOAD LDA B,I NO, DO DIRECT LOAD JMP LOADA,I RETURN MAPSY XLA B,I CROSS-MAP LOAD (2-WD INSTRUCT.) JMP LOADA,I RETURN SPC 1 NAME REP 3 NOP POINT NOP STYPE NOP OM400 OCT -400 D12 DEC 12 KEYWD EQU 1657B B EQU 1 END SPL,L,O ! NAME: CNT. ! SOURCE: 92002-18006 ! RELOC: 92002-16006 ! PGMR: A.M.G. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CnONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME CNT.(8) "92002-16006 760520" ! ! ! THE FOLLOWING IMPLEMENTS THE CONTROL COMMAND. ! ! :CN [[[,NAMR][,FUNCTION][,SUB-FUNCTION]]] ! LET OPEN., \OPEN FILE OR LU FCONT, \SEND CONTROL FUNCTION EXEC \SYSTEM I/O BE SUBROUTINE,EXTERNAL ! LET O.BUF, \DCB BUFFER N.OPL \SUB-PARAMETER STORAGE BE INTEGER,EXTERNAL ! LET PTR,EQWD5,NAMR,FUNC,FUNCT BE INTEGER LET SUBF,SUBFN,FTAB,FTAB1 BE INTEGER LET FTAB2 BE INTEGER (3) LET FTAB3 BE INTEGER LET FTAB4 BE INTEGER (9) LET FTAB5,FTAB6 BE INTEGER ! INITIALIZE FTAB,FTAB1,FTAB2,FTAB3,FTAB4,FTAB5,\ FTAB6 TO "RW",400K,"EO",100K,"TO",1100K, \ "FF",1300K,"BF",1400K,"FR",300K,"BR",200K, \ "LE",1000K,0 ! ! CNT.: SUBROUTINE(NUM,PLIST,ERR) GLOBAL LET NUM,PLIST,ERR BE INTEGER SUBFN _ [SUBF _ [FUNCT _ [FUNC _ \SET UP POINTERS [NAMR _ @PLIST + 1] + 3] + 1] \AND, IF NECESSARY, + 3] + 1 IFNOT PLIST THEN $NAMR _ 8 !THE DEFAULT FOR NAMR. CALL OPEN.(O.BUF,$NAMR,N.OPL,10K) !OPEN THE FILE OR LU. IFNOT $FUNC THEN GOTO DEFLT !WAS FUNCTION SUPPLIED? IF $FUNC = 3 THEN GOTO DCODE !FUNCTION SUPPLIED. IF FUNC _ $FUNCT <- 6 !NUMERIC, SHIFT TO GOTO SUBFU !PROPER POSITION. DCODE: NAMR _ @SUBF !IF ASCII, DECODE IT. TLOOP: IFNOT $[NAMR _ NAMR + 2] THEN [ \END OF TABLE? PRMER: ERR _ 56; RETURN] !PARAMETER ERROR. IF $FUNCT # $NAMR THEN GOTO TLOOP !MATCH? FUNC _ $(NAMR+1) !YES - GET Fn~<:6UNCTION CODE. SUBFU: IFNOT $SUBF THEN $SUBFN _ -2 !DEFAULT SUBFN IF NEC. CALL FCONT(O.BUF,ERR,FUNC,$SUBFN) !SEND THE CONT. FUNC. IF ERR = -12 THEN ERR _ 0 RETURN DEFLT: PTR _ @O.BUF + 3 !FUNCTION NOT SUPPLIED. CALL EXEC(100015K,$PTR,EQ5,NAMR,FUNC)!GET DEVICE TYPE. GO TO ERR20 !BAIL OUT IF ERROR ( NEVER HAPPEN) IF [EQ5 _ EQ5 AND 37400K] > 7000K THEN [ \IF TYPE > 16 RWCD: FUNC_FTAB1; GOTO SUBFU ] !USE REWIND IF EQ5 = 2400K THEN[ \IF DVR05 CHECK IF [FUNC _ FUNC AND 7] = 1 THEN GO TO RWCD; \IF CASSET USE REWIND IF FUNC = 2 THEN GO TO RWCD] !IF CASSET USE REWIND FUNC_$(PTR+1) !ELSE USE DEFAULT EOF GO TO SUBFU ! ERR20: ERR _ 20; RETURN !ILLEGAL LU ERROR. END END END$ < P[ 92002-18007 1826 S 0222 D.RTR              H0102 JASMB,R,L,C,Q HED RTE FILE MANAGER DIRECTORY ROUTINE **************** * NAME: D.RTR * SOURCE: 92002-18007 * RELOC: 92002-16007 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM D.RTR,2,1 92002-16007 REV.1826 780413 EXT EXEC,PRTN,$OPSY,P.PAS SUP * RTE FMP DIRECTORY ROUTINE NOV/72**GAA * MODIFIED TO REUSE DISC SPACE MAR/76**GAA * MODIFIED TO USE RTE-IV TABLE AREA 2 OCT/77**BL * MODIFIED TO TRUNCATE TYPE 6 FILES JAN/78**GLM / * CORRECTLY * MODIFIED TO MAKE ALL I\O REQUESTS APR/78**GLM * WITH "NO-ABORT" * MODIFIED TO PREVENT CREATION OF APR/78**GLM * ZERO LENGTH FILES * * THIS PROGRAM IS THE CENTRAL MANAGER OF THE RTE FILE MANAGEMENT * SYSTEM. IT OWNS THE DIRECTORY AND PERFORMS ALL WRITES * ON IT. * * PROGRAM WISHING TO ACCESS THE DIRECTORY * SCHEDULE (WITH WAIT) THIS PROGRAM. * * CALLS ARE AS FOLLOWS (P1,P2,P3,P4,P5 ARE THE PASSED PARAMETERS): * * * 1. OPEN * P1. 1,ID CALLER'S ID SEGMENT ADDRESS WITH SIGN BIT SET * P2. E,NAME(1,2) E(BIT 15) INDICATES EXCLUSIVE OPEN IF SET * P3. 0,NAME(3,4) * P4. 0,NAME(5,6) * P5. -LU,+CARTRIDGE LABEL,0 IF ZERO SEARCH ALL MOUNTED CARTRIDGES * * 2. CLOSE * P1. ID CALLER'S ID SEGMENT ADDRESS * P2. 0,-(NO. SECTORS TO BE DELETED),+ PURGE EXTENTS ONLY * P3. TR,LU * P4. OFFSET,SECTOR / DIRECTORY ADDRESS * P5. 0 INDICATES CLOSE * * 3. CREAT * P1. ID * P2. TR,LU DATA TRACK ADDRESS * P3. -LU,+CARTRIDGE,0 SEE 1.P5. * P4. * P5. 1 INDICATES CREAT * * 4. CHANGE NAME * P1. ID * P2. TR,LU DATA TRACK ADDRESS * P3. TR,LU \ * P4. OFFSET,SECTOR \ DIRECTORY ADDRESS OF FILE BEING RENAMED * P5. 2 INDICATES NAME CHANGE CALL * * 6. SET,CLEAR LOCK ON DISC * P1. ID * P2. * P3. -LU,+CARTRIDGE (0 NOT LEGAL) DISC TO BE LOCKED * P4. * P5. 3 FOR SET 5 FOR CLEAR * * 7. GENERATE,PACK,UPDATE CALL * P1. ID * P2. TR,LU DATA TRACK ADDRESS * P3. -LU,+CARTRIDGE (0 NOT LEGAL) DISC TO BE UPDATED * P4. S,#SEC/TRACK S(BIT 15)=1 IF DISC DIRECTORY UPDATE * P5. 7 INDICATES GENERATE CALL. * * 8. EXTENSION OPEN * P1. ID * P2. EXTENSION NUMBER * P3. TR,LU \ * P4. OFFSET,SECTOR \DIRECTORY ADDRESS OF MASTER ENTRY * P5. 6,8 INDICATES EXTENSION REQUEST (READ,WRITE) * * 9. PACK * P1. ID * P2. TR,LU DATA TRACK ADDRESS * P3. -LU,+CARTRIDGE SEE GENERATE * P4. RELATIVE DIRECTORY SECTOR (1 ONLY) TO BE CHANGED * P5. 9 SKP * DATA TRACK FORMAT FOR CREAT AND CHANGE NAME * 1. NAME(1,2) \ * 2. NAME(3,4) > OR NEW NAME * 3. NAME(5,6) / * 4. TYPE * 5. * 6. * 7. #SECTORS REQUESTED OR -1 FOR REST OF DISC * 8. RECORD SIZE (TYPE 2 FILES) * 9. SECURITY CODE * * * WORD FORMATS FOR DOUBLE DUTY WORDS * * 15...6 5..0 15...8 7...0 * TRACK ^ LU OFFSET^SECTOR * #SEC/TR^SECTOR * * RETURN PARAMETERS * R1. ERROR CODE IF >0 THEN #SEC IN FILE (0=> TYPE 0) * R2. TR,LU \ * R3. OFFSET,SECTOR \ DIRECTORY ADDRESS - OPEN & CREATE CALLS * R4. TR(LU IF TYPE 0)/ FILE ADDRESS ON OPEN & CREATE CALLS * R5. #SEC/TR,SECTOR / * * IF R1=-99 (EXEC REJECTED I\O REQUEST) R2 & R3 = ERROR CODE * RETURNED BY EXEC * * ERROR CODES * 0 OR POSITIVE -NO ERROR `  * -1 DISC DOWN * -2 DUPLICATE NAME * -3 FILE NOT FOUND * -5 READ EXTENT OPEN AND EXTENT NOT FOUND * -6 CARTRIDGE NOT FOUND * -8 FILE IS CURRENTLY OPEN (ALSO FOR REJECT LOCK) * -9 FILE CURRENTLY OPEN TO THE SAME PROGRAM * -11 FILE NOT OPEN (CLOSE) * -13 DISC LOCKED * -14 DIRECTORY FULL * -99 EXEC REJECTED AN I\O REQUEST *780413) * * -101 ILLEGAL PARAMETERS IN CALL * -102 ILLEGAL CALL SEQUENCE (LOCK NOT REQUESTED FIRST) SKP BUF BSS 128 CNT NOP DEST NOP PRAMA DEF P1 N5 DEC -5 .20 DEC 20 P1 NOP P2 NOP P3 NOP P4 NOP P5 NOP SPC 2 BEGIN LDA PRAMA PARAMETER DESTINATION ADDR STA DEST SAVE IT LDA N5 PARAMETER COUNT STA CNT LDA $OPSY FETCH SYSTEM IDENTIFIER ERA MOVE "MAPPED" BIT TO SLA STA STYPE SAVE FOR LOADA ROUTINE LOOP JSB LOADA GET NEXT PARAMETER STA DEST,I SAVE IN P1 TO P5 ISZ DEST BUMP DESTINATION ADDR INB BUMP TO NEXT PARAMETER ISZ CNT BUMP PARAMETER COUNT JMP LOOP SPC 1 LDA P1 GET THE FIRST PRAM RAL,CLE,ERA LIST; CLEAR POSSIBLE SIGN BIT STA ID SAVE ID SEG ADDRESS PASSED IN CALL * LDB XEQT GET ID ADDRESS ADB .20 ADVANCE TO FATHER INFO JSB LOADA AND FETCH IT RAL POSITION FATHER WAIT BIT TO SIGN SSA,RSS CONTINUE ONLY IF FATHER IS WAITING JMP EXIT2 NOT WAITING--ILLEGAL CALL * RAR REPOSITION ID# OF FATHER AND B377 ISOLATE IT CCB B=-1 ADB A COUNT FROM 0(USE B FOR LOADA ROUTINE) ADB KEYWD ADD TO TABLE OF ID SEGS JSB LOADA FETCH ID SEG ADDR OF CALLER CPA `ID MUST MATCH VALUE PASSED IN P1 CLB,RSS OK JMP EXIT2 --NOPE --ERROR (BAD CALL) * STB FIRST CLEAR THE FIRST FLAG STB TMP1 LDA ABUF SET LOCK SEARCH FOR FIRST STA DIRAD ENTRY SKP * THE LOCK ROUTINE SEARCHES THE DISC DIRECTORY FOR THE * REFERENCED DISC. * * FOR THE FIRST CALL DIRAD SHOULD POINT AT THE * FIRST WORD IN ABUF. SUBSEQUENTLY LOCK * WILL UPDATE DIRAD EACH CALL. * * WITH THE EXCEPTION OF THE DISC DIRECTORY UPDATE THE DISC * MUST BE FOUND. IN THIS CASE, EXIT IS TO THE CREAT ROUTINE * * ON EXIT ATRAK CONTAINS THE DIRECTORY TRACK * ALU CONTAINS THE DIRECTORY LU * A CONTAINS THE LOCK WORD * * ON SUBSEQUENT CALLS IF THE DISC ID WAS 0, THE NEXT * DISC IS RETURNED. IF THE DISC ID WAS NOT 0, * A NOT FOUND EXIT IS TAKEN. * NEXT LDA P5 GET THE ID -BIT 15 INDICATE DISC LDB P1 ID IN P5 SSB ID IN P5? JMP LOCK0 YES; SKIP CCE,SLA,RSS NO; P5 IS FUNCTION EVEN? JMP LOCK3 YES; GO EXTRACT LU LDA P3 NO; LU IS IN P3 LOCK0 CMA,CCE,SSA,INA E_0 INDICATES CARTRIDGE LABEL CMA,CLE,INA E_1 INDICATES LU(SET +) LDB TMP1 GET PREVIOUS ID STA TMP1 STORE ID CME,SZB IF NOT A ZERO, ID ON SECOND JMP EX6 CALL TAKE -6 EXIT SPC 1 RAL,ERA SET SIGN BIT IF A LABEL SEARCH STA TMP2 AND SET FOR COMPARE SPC 1 LOCK6 JSB RDPS READ THE PARAMETER SECTOR LDA TMP2 SET THE FOUND BIT IN E IF CMA,CLE,INA A ZERO ID LDB DIRAD GET CURRENT DIRECTORY ADD. LOCK2 LDA B,I GET FIRST WORD SZA,RSS IF 0 THEN END JMP LOCK5 SO GO CHECK FOR DIRECTORY STA ALU UPDATE; ELSE SAVE LU CPA TMP2 IS THIS THE REQUIRED DISC? CCE YES SET E TO 1 TO INDICATE FOUND INB STɖEP TO TRACK ADDRESS AND LDA B,I SET STA ATRAK IN ATRAK INB STEP TO LDA B,I LABEL AND FETCH IOR SIGN SET SIGN FOR COMPARE SEZ,INB,RSS STEP TO LOCK ADDRESS SKIP IF FOUND CPA TMP2 IS THIS THE REQUESTED DISC? JMP LOCK4 YES; GO EXIT INB NO; STEP TO NEXT ONE JMP LOCK2 AND GO CHECK IT * LOCK3 LDA P3 LU AND TRACK IN P3 AND B77 MASK TO LU STA TMP2 SAVE LU STA B SAVE LU IN B FOR TEST XOR P3 MASK TO TRACK ALF,RAL ROTATE TO RAL,ALF LOW A AND STA DITR SAVE THE TRACK CPB RDPS DO WE HAVE THIS ONE ALREADY? JMP DECOD YES SO GO DECODE THE REQUEST JMP LOCK6 NO SO GO LOOK FOR IT * LOCK4 STB DIRAD FOUND - UPDATE CURRENT ISZ DIRAD ADDRESS FOR NEXT TIME LDA B,I LOCK TO A SZA IF NOT LOCKED CPA ID OR LOCKED TO CALLER JMP DECOD SKIP LDA TMP1 ELSE IF F# SZA,RSS MULTI-DISC SEARCH JMP NEXT CONTINUE JMP EX13 ELSE EXIT LOCKED DISC SPC 2 DECOD CCA SET THE NONE FOUND YET STA R1 FOR REUSABLE DISC SPACE ROUTINE LDA P1 IF OPEN SSA REQUEST JMP OPEN GO OPEN LDA P5 ELSE SSA CHECK REQUEST CODE JMP EX101 NEGATIVE - EXIT ADA N10 SSA,RSS JMP EX101 GREATER THAN 9 - EXIT ADA TABAD INDEX INTO THE FUNCTION JMP A,I GO EXECUTE THE FUNCTION SPC 2 TABAD DEF TABA+10 TABA JMP CLOSE 0 JMP CREAT 1 JMP CNAM 2 JMP RLOCK 3 JMP EX101 4 JMP ULOCK 5 JMP EXOPN 6 JMP GEN 7 JMP EXOPN 8 JMP PACK 9 SKP * * RDPS READ THE DISC DIRECTORY * RDPS OCT -1  JSB WCSR WRITE CURRENT SECTOR BLOCK LDA .2 A_2 *780413* STA DRLU SET FOR LU2 - SYS DISC CCA COMPUTE LAST TRACK ADA TATSD ADDRESS AND STA TRACK SET CLA SET SECT ADDRESS TO STA SECT ZERO JSB RWSUB READ THE BLOCK JMP RDPS,I RETURN SPC 5 * * WCSR WRITE CURRENT BLOCK * WCSR NOP LDA WCS GET WRITE FLAG ISZ RW SET REQUEST CODE TO WRITE SZA IF NOT WRITTEN ON SKIP JSB RWSUB ELSE WRITE THE BLOCK LDA DS1 RESET REQUEST CODE TO *780413* STA RW READ (NO-ABORT) JMP WCSR,I AND EXIT (A=1) SPC 2 DS1 OCT 100001 RW NOP DRLU NOP SKP * * RWSUB ROUTINE TO READ OR WRITE A TWO-SECTOR BLOCK * RWSUB NOP DLD RW FETCH THE NEW POINTERS ADB PRC STB RPRM SLA,RSS IF WRITE THEN JMP RWSU1 GO DO IT CPB LDRLU ELSE IF LDB N7 SAME BLOCK AS LDA TRACK CURRENT ONE CPA LTRAC THEN INB LDA SECT NO CPA LSECT ACTION IS CLE,INB CPB N5 REQUIRED SO JMP RWSUB,I RETURN RWSU1 JSB EXEC NOT SAME BLOCK CALL EXEC DEF RTN RETURN DEF RW READ WRITE CODE DEF RPRM LU ABUF DEF BUF BUFFER DEF .128 128 WORDS DEF TRACK ON TRACK & DEF SECT SECTOR RTN JMP ERR99 EXEC REJECTED CALL -- EXIT *780413* CLA,CLE CLEAR THE WRITE STA WCS FLAG LDA RPRM SET UP LAST POINTERS FOR NEXT TIME STA LDRLU LDA TRACK SAVE THE TRACK STA LTRAC ADDRESS AND THE LDA SECT SECTOR STA LTRAC+1 ADDRESS CPB .128 DISC ERR? JMP RWSUB,I NO - RETURN STA LDRLU YES; SET NOT IN CORE FLAG JMP EX1 _YES - TAKE DISC ERR EXIT SPC 2 LDRLU NOP LTRAC NOP LSECT NOP SKP OPEN DLD P3 SET NAME WORDS 2 AND 3 DST NAME+1 INTO THE NAME BUFFER LDA P2 SET NAME WORD1 RAL,CLE,ERA LESS POSSIBLE SIGN BIT STA NAME INTO THE NAME BUFFER JSB SETDR SET UP TO READ THE DIRECTORY JSB N.SHR GO FIND THE FILE JMP NEXT NOT FOUND - TRY NEXT DISC JSB SETAD FOUND - GO SET THE ADDRESSES JSB FLAG CHECK THE OPEN FLAGS LDB COUN2 IF 7 OPENS CPB .7 THEN NO ROOM SO JMP EX8 EXIT LDA P2 IF EXCLUSIVE OPEN CLE,SSA,RSS THEN SKIP JMP OPEN3 NON EXCLUSIVE SKIP CCE,SZB IF ANY OPENS THEN JMP EX8 REJECT EXCLUSIVE OPEN OPEN3 LDB SC GET THE FLAG ADDRESS LESS ONE OPEN5 INB SEARCH FOR OPEN SPOT IN FLAG LIST LDA B,I GET FLAG WORD SSA IF SIGN BIT SET THEN JMP EX8 FILE IS EXCLUSIVELY OPEN TO SOME ONE SZA THIS WORD? JMP OPEN5 NO; GO TRY NEXT ONE LDA P1 YES; GET THE ID ADDRESS RAL,ERA SET THE EXCLUSIVE/NON-EXCLUSIVE STA B,I FLAG AND PUT IN THE DIRECTORY STA WCS SET TO WRITE THE BLOCK OPEN4 LDA TYPE,I SET UP THE RETURN PARAMETERS SZA IF TYPE ZERO SEND BACK ZERO CODE OPEN6 LDA #SEC,I ELSE SEND BACK THE FILE SIZE CREX JSB RPRM SET THE RETURN PRAMS EXIT JSB WCSR WRITE THE SECTOR JSB PRTN PASS THE RETURN PRAMS DEF *+2 AND DEF R1 THEN EXIT2 JSB EXEC COMPLETE (SERIALLY REUSABLE) DEF *+4 DEF .6 DEF .0 DEF N1 N1 DEC -1 .0 NOP PP SKP * * EXTENSION OPEN ROUTINE * EXOPN JSB DIRCK GO READ IN THE MASTER DIRECTORY ENTRY CLA CLEAR THE STA ID OPEN FLAG WORD LDA P2 SET THE SZA,RSS IF AFTER THE M;AIN THEN JMP OPEN4 WE HAVE IT ALREADY * AND B377 CHECK IF EXTENT>255? CPA P2 YES ? NO? ALF,SLA,ALF NO EXTENSION NO. FOR POSSIBLE JMP EX6 YES GO EXIT ERROR -6 * STA GSEC EXTENSION CREAT JSB EXSHR SEARCH FOR THE REQUIRED EXTENT JMP EXOPT NOT FOUND SO GO TEST IF READ ALF,ALF EXTENT NO TO A AND B377 MASK CPA P2 THIS IT? JMP OPEN4 YES SO GO RETURN THE PRAMS CSER LDA TYPE NO SO CONTINUE JMP NSHR4 THE SEARCH SPC 1 EXOPT LDB P5 IF EXTENT OPEN IS FOR CPB .8 WRITE THE GO CREAT THE EXTENT JMP CREA0 GO EXIT LDA N5 ELSE RETURN ILLEGAL RECORD ERROR JMP CREX GO EXIT SPC 2 .10 DEC 10 .8 DEC 8 8B .14 DEC 14 ANAME DEF NAME ATRAK NOP SIGN OCT 100000 SPC 2 * * SETDR ROUTINE TO SET UP TO READ A DIRECTORY * SETDR NOP JSB WCSR WRITE CURRENT SECT LDA .128 PRESET # SET TO AVOID DIVIDE ISZ FIRST (EXCEPT WHEN REWRITING) STA #SECT PROBLEMS CCA SET FIRST STA FIRST FLAG TO INDICATE FIRST BLOCK LDA ATRAK SET THE TRACK STA TRACK ADDRESS LDA ALU AND THE LU STA DRLU ADDRESS CPA .2 IF LU=2 CLA,RSS USE ZERO LDA N14 ELSE -14 (UDAD ADDS 14) STA SECT SET THE SECTOR JMP SETDR,I RETURN N14 DEC -14 SKP ll * N.SHR DIRECTORY SEARCH ROUTINE * TARGET NAME IN NAME UNL PRC OCT 74000 LST * RETURNS: * P+1 END OF DIRECTORY A=NEXT ADDR. (IF A=0 END OF SPACE) * P+2 FOUND RETURN A=ENTRY ADDR. * N.SHR NOP NSHR JSB RDNXB READ THE DIRECTORY JMP N.SHR,I END OF DISC RETURN NSHR0 LDA ABUF SET A TO THE BUFFER ADDRESS LDB N8 SET COUNT FOR THE NO. IN A BLOCK STB COUN1 NSӯHR1 CCE SET FOUND FLAG (E=1) LDB ANAME SET THE NAME ADDRESS STB TMP2 IN TMP2 LDB N3 SET FOR 3-WORD NAME STB COUN2 LDB A,I IF PURGED ENTRY INB,SZB,RSS THEN JMP CKRUS CHECK IF REUSABLE * NSHR2 LDB A,I GET A NAME WORD SZB,RSS IF ZERO - END OF DIRECTORY JMP N.SHR,I SO EXIT * CPB TMP2,I MATCH? INA,RSS YES - SET FOR NEXT WORD SKIP CLE,INA NO - SET NOT FOUND - STEP NAME ISZ TMP2 STEP LOCATIONS ISZ COUN2 AND COUNT MORE NAME JMP NSHR2 YES; GO DO IT * CLB,SEZ,CCE,INB NO; FOUND? JMP NSHR3 YES; GO TAKE FOUND EXIT * NSHR4 ADA .13 NO; SET FOR NEXT ENTRY NSHR5 ISZ COUN1 DONE WITH BLOCK? JMP NSHR1 NO; DO NEXT ENTRY * JMP NSHR YES; GO READ NEXT BLOCK * NSHR3 ADB N.SHR FOUND - STEP RETURN ADDRESS ADA N3 ADJUST TO START OF ENTRY JMP B,I RETURN * CKRUS ADA .6 TO BE REUSABLE IT MUST BE THE LDB A,I SAME SIZE ADA .10 SET A FOR FAILURE CPB NAME+6 SAME SIZE? JMP CKRU1 YES GO CHECK FURTHER * JMP NSHR5 NO CONTINUE SEARCH * CKRU1 LDB R1 IF ALREADY GOT ONE SSB,RSS THEN JUST JMP NSHR5 CONTINUE * LDB TRACK ELSE SAVE THE DIRECTORY STB R1 ADDRESS (MUST SAVE A FOR LDB SECT CONTINUATION OF SCAN) STB R2 R1,R2 = DISC ADDRESS STA R3 R3=OFFSET +16 JMP NSHR5 CONTINUE THE SCAN SKP * SETAD TO SET UP ADDRESSES FOR DIRECTORY ENTRY IN BUF AT * ADDRESS POINTED TO BY A * * SETAD NOP CLB,CLE JSB P.PAS N10 DEC -10 DIRA NOP NOP NOP TYPE NOP TRAKA NOP SECTA NOP #SEC NOP RL NOP SC NOP FLAGA NOP JMP SETAD,I SPC 2 SPC 2 RPRM NOP STA R1 SET FIRST RETURN PRAM LDA TRACK TRACK,LU LSL 6 TO ADA ALU RETURN STA R2 TWO LDA ABUF OFFSET CMA,INA AND ADA DIRA SECTOR ALF,ALF TO ADA SECT RETURN STA R3 3 LDA TRAKA,I TRACK OF FILE TO STA R4 RETURN 4 LDA SECTA,I GET THE SECTOR ADDRESS AND B377 ISOLATE IT LDB #SECT GET THE NUMBER OF SECTORS /TRACK BLF,BLF ROTATE AND ADA B COMBINE WITH THE SECTOR STA R5 RETURN 5 JMP RPRM,I SPC 2 R1 NOP R2 NOP R3 NOP R4 NOP R5 NOP SKP * * RDNXB READ NEXT DIRECTORY BLOCK * RDNXB NOP JSB UDAD UPDATE THE ADDRESSES JMP RDNXB,I END OF DIRECTORY RETURN JSB RWSUB READ THE BLOCK ISZ RDNXB STEP TO OK RETURN ISZ FIRST FIRST BLOCK? JMP RDNXB,I NO; SO RETURN SPC 1 CLE JSB DPMM JMP RDNXB,I RETURN * * UDAD -- UPDATE THE DIRECTORY ADDRESS * UDAD NOP JSB WCSR WRITE CURRENT BLOCK LDA .14 A_14 ADA SECT ADD 7 TO THE SECTOR CLB PREPARE FOR DIVIDE DIV #SECT DIVIDE BY THE NO OF SECTORS0TRACK STB SECT SET THE NEW SECTOR ADDRESS SZA IF NO ROLLOVER OR SZB IF SECTOR IS ZERO THEN SKIP (NEW TRACK) JMP UDAD1 ELSE GO EXIT SPC 1 CCB SET TO DECREMENT TRACK CLA SET A FOR ERROR RETURN ADB TRACK ADDRESS CPB LTR OUT OF DIRECTORY? JMP UDAD,I YES SO RETURN STB TRACK SET THE NEW TRACK UDAD1 ISZ UDAD STEP RETURN JMP UDAD,I TAKE OR RETURN SPC 2 LTR NOP NXSCA DEF BUF+5 SKP * DPMM MOVE DISC PARAMETERS FOR CURRENT UNIT * CALLING SEQUENCE * * E=0 - SAVE PARAMETERS * E=1 - MOVE PARAMETB@ NXTR JMP CHKBT EOL STB BADTR SET BAD TRACK POINTER LDB NXSEC GET THE NEXT TRACK LDA NXTR AND SECT CREA1 STA TRAKA,I SET THE TRACK ADB GSEC ADD THE EXTENT WORD STB SECTA,I SET THE SECT/EXTENT LDB #SEC,I GET THE REQUEST SIZE LDA BADTR,I AND THE FIRST BAD TRACK SZA IF GOOD SKIP SSB,RSS ELSE IF REST OF DISC SKIP JMP CREA2 GO CALCULATE SIZE * CREA3 INA BAD TRACK ON REST OF DISC RQ ISZ BADTR SET FILE ABOVE IT AND CLB TRY AGAIN JMP CREA1 * CREA2 SSB IF REST OF DISC JMP CREA5 JMP CREA7 JSB NXT/S COMPUTE THE NEXT TRACK AND SECTOR STA SETAD SECTOR - SAVE LAST TRACK LDA BADTR,I GET LAST AVAILABLE TRACK SZA,RSS IF NOT BAD LDA LASTR THE LAST ON DISC+1 CMA SUBTRACT FROM SZB BUMP TRACK INA  IF SOME OF IT USED ADA SETAD LAST FILE TRACK SSA 0 OR +? JMP CREA4 YES; IT FITS * LDA BADTR,I NO; WON'T FIT SZA WAS IT A BAD TRACK? JMP CREA3 YES; TRY ABOVE IT * CLEAR STA DIRA,I NO CLEAR THE ENTRY FROM BUFFER *780413* LDA GSEC IF EXTENT CREAT SZA,RSS THEN SKIP TO ERROR EXIT JMP NEXT ELSE TRY NEXT DISC JMP EX6 NO ROOM FOR EXTENT EXIT * CREA4 LDA SETAD IT FIT SO CREA6 STA NXTR UPDATE THE NEXT STB NXSEC TRACK AND SECTOR ISZ WCS SET THE WRITE FLAG LDA #SEC,I GET THE RETURN PRAM JSB RPRM AND GO SET UP THE RETURN CCA SET FIRST TO AVOID STA FIRST RESETING THE #SECTORS/TRACK JSB SETDR SET UP TO READ FIRST STA FIRST DIRECTORY BLOCK JSB RDNXB READ IT .2 DEC 2 CCE MOVE NEW JSB DPMM NEXT TRACK AND SECT WORDS ISZ WCS IN - SET TO WRITE JMP EXIT AND EXIT * CREA5 LDA TRAKA,I REQUEST FOR REST OF DISC CMA,INA COMPUTE THE ADA LASTR NUMBER OF LDB SECTA,I GET THE NUMBER OF SECTORS CMB,INB USED THIS TRACK STB MOVE1 AND SAVE MPY #SECT SECTORS ADA MOVE1 SUBTRACT NUMBER USED THIS TRACK SZB,RSS IF MORE THAN 32K SSA THEN LDA MAXSZ SET TO MAX ALLOWABLE(32K) STA #SEC,I SET IN THE FILE ENTRY SZA,RSS IF ZERO JMP CLEAR CLEAR THIS ENT AND TRY NEXT DISC*780413* JMP CREA7 GO WRAP IT UP * MAXSZ OCT 77776 MAX NUMBER OF SECTORS IN A FILE SKP *WE HAVE A REUSABLE ENTRY IN THE DIRECTORY AND WE NEED IT *SO THE DIRECTORY BLOCK IS READ BACK IN (IF REQURED) AND *THE ENTRY IS SET UP. * RUSE STB TRACK B HAS TRACK FROM EXISTANCE TEST LDB R2 GET THE SECTOR AND STB SECT SET IT JSB RWSUnB READ THE BLOCK TO CORE IF REQUIRED LDA N16 GET THE OFFSET (IT WAS SAVED +16) ADA R3 AND SET UP THE ADDRESSES JSB SETAD LDA TRAKA,I SET THE FILE ADDRESSES STA NAME+4 IN THE ENTRY LDA SECTA,I AND B377 PURGE POSSIBLE EXTENT FLAG ADA GSEC ADD IN POSSIBLE NEW EXTENT FLAG STA NAME+5 LDA DIRA MOVE THE ENTRY INTO THE BUFFER CCE JSB MOVE1 LDA ID SET POSSIBLE OPEN FLAG STA FLAGA,I IN THE ENTRY ISZ WCS SET THE WRITE FLAG JMP OPEN6 AND GO EXIT (AFTER THE WRITE) * * * MOVE1/2 TO MOVE DIRECTORY ENTRIES TO/FROM * THE LOCAL SAVE AREA DEFINED * HEREIN. * * CALLING SEQUENCE: * * E=0 TO THIS SAVE AREA * E=1 FROM THIS SAVE AREA * * A = ADDRESS OF OTHER AREA * * MOVE1 MOVES 9 WORDS * MOVE2 MOVES 3 WORDS * MOVE1 NOP LDB SIGN SET B TO MOVE WORDS JSB P.PAS CALL TO MOVE N9 DEC -9 9 WORDS NAME BSS 9 CSEC EQU NAME+5 JMP MOVE1,I RETURN SPC 2 MOVE2 NOP LDB SIGN SET B FOR MOVE JSB P.PAS CALL TO MOVE N3 DEC -3 3 BSS 3 WORDS JMP MOVE2,I RETURN SPC 2 GTRK NOP GLU NOP GSEC NOP G#SEC NOP SKP GEN JSB TESTL TEST LEGALITY OF CALL JSB SETDR SET UP TO ACCESS THE DIRECTORY JSB RDPAS READ THE PASSED DATA GEN2 JSB UDAD UPDATE DIRECTORY ACCESS JMP CREX END GO EXIT CLE SET E FOR DPMM CALL ISZ FIRST FIRST SECTOR? RSS NO; SKIP JSB DPMM YES; GO EXTRACT THE DISC PRAMS ISZ WCS SET TO WRITE JSB WCSR WRITE THE SECTORS LDA BUFA,I IF A ZERO SECTOR SZA,RSS THEN JMP GEN2 ALL THE REST MUST BE ZERO ALSO. * JMP RDPA2 GO GET TQHE NEXT BLOCK SPC 2 TESTL NOP LDA B,I GET THE LOCK LDB TMP1 IF LOCKED CPA ID TO CALLER SZB,RSS AND CORRECT DISC SPEC SKIP JMP EX102 ELSE TAKE ERROR EXIT JMP TESTL,I SPC 5 * * RDPAD READ THE PASSED DATA * RDPAS NOP LDA P2 GET THE ADDRESS AND B77 ISOLATE THE LU STA GLU AND SET XOR P2 ISOLATE THE TRACK ALF,RAL ROTATE TO RAL,ALF LOW A STA GTRK AND SET LDA P4 GET THE #SECTORS/TRACK RAL,CLE,ERA ELIMINATE THE SIGN STA G#SEC AND SET CLA SET FOR SECTOR STA GSEC ZERO RDPA2 STA LDRLU SHOW THE BLOCK NOT IN CORE JSB EXEC READ THE SECTORS DEF GRTN DEF DS1 *780413* DEF GLU BUFA DEF BUF DEF .128 DEF GTRK DEF GSEC GRTN JMP ERR99 EXEC REJECTED CALL -- EXIT *780413* CPB .128 DISC ERROR? RSS NO; CONTINUE JMP EX1 YES; TAKE DISC ERR EXIT LDA GSEC UPDATE THE ADA .2 DISC ADDRESS CPA G#SEC END OF TRACK? CLA YES - USE 0 SECT. STA GSEC SET SECTOR CLE,SZA,RSS IF EOT ISZ GTRK STEP TRACK ADDRESS JMP RDPAS,I RETURN SKP SPC 5 LOCK5 LDA P4 END OF DIRECTORY LDB P5 IF GEN CALL CPB .7 AND SSA,RSS SIGN BIT SET SKIP JMP EX6 ELSE - NOT FOUND EXIT JSB RDPAS NEW DIRECTORY FOR DISCS - READ JMP EXIT3 GO WRITE AND EXIT SPC 3 PACK JSB TESTL TEST LEGALITY OF CALL JSB SETPR SET UP THE DISC PARAMETERS LDA P4 GET RELATIVE DOUBLE SECT CMA,INA,SZA,RSS SET NEGATIVE IF ZERO JMP PACK2 SKIP STA COUN1 SET COUNT PACK1 JSB UDAD BUMP ADDRESS JMP EX101 END OF DIRECTORY EXIT ISZ COUN1 STEP COUNTER; DONE? JMP PACK1 NO; GO BUMP AGIN PACK2 JSB RDPAS YES; READ THE NEW SECT. EXIT3 ISZ WCS SET WRITE FLAG EXIT4 CLA AND TAKE JMP CREX ACCEPT EXIT SPC 2 66 ID NOP TMP1 NOP TMP2 NOP DIRAD NOP TRACK NOP SECT NOP WCS NOP ALU NOP DITR NOP SKP RLOCK LDA TMP1 DISC MUST BE SPECIFIED SZA,RSS JMP EX101 NOT SPECIFIED - EXIT JSB SETDR SET TO SEARCH FOR OPEN FLAGS ROCK1 JSB RDNXB READ ENTRY JMP ROCK4 END OF DIRECTORY - GRANT LOCK LDA N8 SET COUNTER FOR 8 ENTRIES STA EXSH LDA ABUF SET A_ADDRESS OF FIRST ROCK2 LDB A,I END OF SSB IF PURGED JMP ROCK3 IGNOR SZB,RSS DIRECTORY? JMP ROCK4 YES; GRAND LOCK JSB SETAD NO; SET ENTRY ADDRESSES JSB FLAG TEST FOR FLAGS LDB COUN2 ANY SZB SET? JMP EX8 YES; REJECT LOCK LDA DIRA NO; GET ADDRESS TO A ROCK3 ADA .16 STEP TO NEXT ENTRY ISZ EXSH END OF BLOCK? JMP ROCK2 NO; TRY NEXT ENTRY JMP ROCK1 YES; TRY NEXT BLOCK SPC 2 ROCK4 JSB RDPS LOCK GRANTABLE; READ DISC LDA ID DIRECTORY AND CCB SET ADB DIRAD THE ROCK5 STA B,I LOCK JMP EXIT3 EXIT SPC 5 ULOCK CLA UNLOCK - CLEAR JMP ROCK5 AND GO SET IT SPC 2 ERR99 DST R2 SAVE ERROR CODE *780413* CLA CLEAR SOME FLAGS *780413* STA RDPS SO NEXT ENTRY *780413* STA WCS WILL BE CLEAN *780413* STA LDRLU *780413* LDA N99 FETCH ERROR CODE *780413* STA R1 AND SAVE FOR EXIT *780413* JMP EXIT GET OUT * *780413* * EX101 LDA N102 INA,RSS EX102 LDA N102 JMP CREX SPC 2 N99 DEC -99 N102 DEC -102 .16 DEC 16 B377 OCT 377 N7 DEC -7 SKP CNAM JSB RDPAS CHANGE NAM - READ NEW NAME LDA ABUF MOVE IT TO JSB MOVE2 LOCAL SAVE AREA LDA ABUF SET UP THE NAME JSB MOVE1 FOR DUP CHECK JSB SETDR SET UP TO READ THE DIRECTORY JSB N.SHR SEARCH FOR DUPLICATE NAME RSS NOT FOUND SO SKIP JMP EX2 TAKE DUP NAME EXIT JSB DIRCK GO GET DIRECTORY ENTRY LDA FLAGA,I OPEN EXCLUSIVELY RAL,CLE,ERA CLEAR EXCLUSIVE BIT AND SAVE IN E CPA P1 TO CALLER? SEZ,CCE,RSS YES SKIP JMP EX102 NO; REJECT CNAM1 LDA DIRA YES; MOVE JSB MOVE2 THE NEW NAME IN JSB EXSH SEARCH FOR EXTENT OF THIS FILE JMP CNAM1 YES GO SET NEW NAME SPC 2 EXSH NOP DIRECTOR SEARCH FOR EXTENTS TO MODIFY ISZ WCS SET THE WRITE FLAG JSB EXSHR SEARCH FOR EXTENT JMP EXIT4 NOT FOUND SO EXIT JMP EXSH,I FOUND RETURN SPC 5 * * DIRCK READ A DIRECTORY ENTRY - SET FLAGS * CHECK OPEN FLAGS ETC. * DIRCK NOP LDA ALU DO WE ALREADY CPA RDPS HAVE THE DISC SPECS? RSS YES SO SKIP SET UP JSB SETPR SET UP THE DISC PARAMETERS LDA DITR SET STA TRACK TRACK LDA P4 GET THE PASSED AND B377 SECTOR STA SECT AND SET IT XOR P4 NOW GET THE ALF,ALF OFFSET ADA ABUF ADD THE BUFFER ADDRESS JSB SETAD SET DIRECTORY ADDRESSES JSB RWSUB READ THE BLOCK LDA DIRA MOVE THE ENTRY TO LOCAL JSB MOVE1 STORAGE JMP DIRCK,I SKP SPC 5 CLOSE JSB DIRCK CLOSE; GET THE SECTOR LDA N7 SET FOR 7 ENTRIES CLOS1 LDB FLAGA,I FIND _k RBL,CLE,ERB CALLERS CPB ID FLAG JMP CLOS2 FOUND ISZ FLAGA NOT; YET TRY NEXT ONE INA,SZA MORE? JMP CLOS1 YES; OK JMP EX11 NO; ERR - NOT OPEN TO CALLER SPC 2 CLOS2 CLA FOUND; CLEAR THE STA FLAGA,I FLAG LDA P2 GET TRUNCATE CODE SZA IF ZERO THEN SKIP NO ACTION SEZ,RSS EXCLUSIVE OPEN? JMP EXIT3 NO; EXIT SSA,RSS IF POSITIVE THEN JMP EXPUR GO PURGE THE EXTENTS ADA #SEC,I CALCULATE NEW FILE SIZE SLA,RSS IGNOR IF ODD SECTOR COUNT SSA IF RESULT LESS THAN ZERO JMP EXIT3 THEN IGNOR IT CCE,SZA,RSS IF ZERO JMP PURGE GO PURGE STA TMP2 SAVE THE NEW SIZE JSB LAST? LAST FILE? CLE,RSS NO, CLEAR E SKIP CCE YES; SET E LDA TMP2 SET THE NEW SIZE STA #SEC,I IN THE DIRECTORY SEZ,RSS IF NOT THE LAST ENTRY JMP EXPUR GO PURGE ANY EXTENTS JMP PURG8 ELSE GO UPDATE DISC PRAMS SPC 5 NXT/S NOP CACULATE THE NEXT TRACK AND SECTOR LDB #SEC,I GET THE FILE SIZE LDA SECTA,I GET THE NO OF SECTORS IN THE FILE AND B377 ISOLATE ADB A SUM LSR 16 EXTEND TO A DIV #SECT DIVIDE BY THE NO SECT PER TRACK ADA TRAKA,I ADD THE CURRENT TRACK ADDRESS JMP NXT/S,I RETURN A=NEXT TRACK,B=NEXT SECTOR SKP EXSHR NOP EXTENT SEARCH ROUTINE LDB DEF SET RETURN ADDRESS IN STB N.SHR NAME SEARCH ROUTINE JMP NSHR0 GO TO NAME SEARCH DEF DEF *+1 RETURN ADDRESS FOR NAME SHEARCH JMP EXSHR,I NOT FOUND SO EXIT JSB SETAD FOUND SET THE ADDRESSES LDB EXSHR STEP THE RETURN ADDRESS CCE,INB AND LDA SECTA,I MAKE SURE THIS IS NOT THE MAIN CPA CSEC SAME AS MAIN? IKCCA,RSS YES SO TRY AGAIN JMP B,I RETURN * STA R1 AFTER WE CLEAR THE FOUND FLAG JMP CSER CONTINUE THE SEARCH SPC 2 LAST? NOP * 780106 GLM JSB NXT/S COMPUTE THE NEXT TRACK AND SECTOR CPA NXTR SAME TRACK? CCA YES; A_1 CPB NXSEC SAME AS NEXT SECTOR? INA,SZA YES; WAS IT SAME TRACK ALSO? JMP LAST?,I NO; NOT LAST FILE EXIT P+1 ISZ LAST? YES; LAST FILE JMP LAST?,I EXIT P+2 SPC 3 SETPR NOP READ AND SET UP THE DISC PARAMETERS JSB SETDR SET UP TO ACCESS THE DIR JSB RDNXB READ AND SET PRAMS N16 DEC -16 JMP SETPR,I RETURN TO CALLER SPC 2 .6 DEC 6 SKP PURGE CCA PURG0 STA DIRA,I SET PURGE FLAG LDB TYPE,I IF TYPE SIX FILE 780106 GLM CPB .6 THEN TREAT " " RSS AS NOT LAST " " JSB LAST? LAST FILE? JMP EXPUR NO; GO CHECK FOR EXTENTS PURG2 STA DIRA,I MAKE ENTRY AVAILABLE LDA DIRA IS THIS THE FIRST STA WCS SET TO WRITE CURRENT BLOCK CPA ABUF ENTRY IN THE CURRENT BLOCK? JMP PURG5 YES; GO READ PREVIOUS BLOCK PURG7 ADA N16 NO; BACK UP TO PREVIOUS JSB SETAD ENTRY; FIND FIRST UNPURGED LDB TYPE,I CHECK TYPE LDA DIRA,I ENTRY CPB .6 IF TYPE SIX FILE CCE DO NOT ATTEMPT RECOVERY SZB TYPE ZERO - IF SO SKIP SEZ,INA,SZA,RSS PURGED? JMP PURG2 YES; TRY PREVIOUS ENTRY SPC 1 SSA FOUND ENTRY - IS IT THE JMP PURG3 DISC SPEC ENTRY? - YES JUMP PURG8 JSB NXT/S NO; CACULATE THE NEXT TRACK AND SECT JMP CREA6 GO SET, WRITE & EXIT SPC 2 PURG3 LDA TRAKA,I SET TO SHOW CLB NEXT AVAILABLE SECT JMP CREA6 R<:6 IS FIRST SECTOR SPC 1 PURG5 JSB WCSR WRITE CURRENT SECTOR LDB SECT GET SECTOR ADDRESS SZB,RSS IF START OF TRACK ISZ TRACK DIRECTORY TRACK ADB N14 SUBTRACT 14 SECTORS SSB IF NEGATIVE THEN ADB #SECT ADD THE NO. PER TRACK STB SECT SET NEW SECTOR ADDRESS JSB RWSUB READ THE BLOCK LDA ABUF SET ADDRESS FOR ADA .128 LAST ENTRY JMP PURG7 IN THE BLOCK SPC 2 EXPUR JSB EXSH SEARCH FOR EXTENTS TO PURGE JMP PURGE GO PURGE EXTENT SKP * P.PAS EXTERNAL * CALLING SEQUENCE * * E_0 FOR SETUP * E_1 TO MOVE OUT * * B_0 TO SET ADDRESS * B_100000 TO SET PARAMETERS * * A = ADDRESS OF FROM-TO AREA * * JSB P.PAS * DEC -N NO. OF PARAMETERS TO BE MOVED * BSS N AREA SET UP OR MOVED OUT SPC 2 .1 DEC 1 A EQU 0 B EQU 1 . EQU 1650B KEYWD EQU .+7 TATSD EQU .+70 XEQT EQU .+39 LN EQU * END BEGIN < Rm 92002-18008 1826 S C1022 FMGR              H0110 lfASMB,R,L * NAME: $BMON * SOURCE: 92002-18008 * RELOC: 92002-12001 * PGMR: A.M.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM $BMON 92002-12001 REV.1826 780419 $BMON EQU 1826 * * ******************************************************** * * NOTE: ALWAYS CHANGE THE VALUE OF $BMON TO MATCH THE * * * REVISION CODE WHICH IS IN THE NAM RECORD. * * * * * * I.E., NAM $BMON 92002-12001 REV. NNNN * * * $BMON EQU NNNN * * ******************************************************** * END ASMB,R,L,C HED FMGR - RTE FILE MANAGER MAIN * NAME: FMGR * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR,3,90 92002-16008 REV.1826 760627 EXT CLOS.,EXEC,MSS. ENT IFLG.,CAD.,FM.AB,D.,CUSE.,PARS. ENT SEG.R,P.SEG,INI1.,INI2.,I.BUF,O.BUF ENT N.OPL,P.RAM,TTY.,NO.RD,NOCM.,ACTV. ENT J.REC,J.NAM,G0..,JRN.,.IDAD ENT TL.P,TM.VL,L.SEG,GT.JB,.R.E.,SCR. SUP SPC 3 O.BUF BSS 144 GENERAL OUTPUT DCB I.BUF BSS 144 GENERAL INPUT DCB ORG I.[BUF PUT INITIALIZE CODE IN DCB FMGR LDA XEQT GET THE ADA .12 FIRST TWO LDA A,I CHARACTERS OF PGMS STA SEG NAME AND SET FOR SEGMENT CALLS. JMP ITCAL GO LOAD THE INITILIZE SEGMENT INI1. JSB MSS. INIT SEGMENT COMES HERE IF DEF *+2 SYSTEM INITILIZE IS NEEDED DEF IFLG. SEND FMGR 00X (5 OR 3) MESSAGE LDA AS1BL SET TO LOAD JMP PSEGC AND LOAD THE PARSE SEGMENT INI2. CPB ASIN SEGMENT RETURNS HERE AFTER JMP SEGLD READING AND PARSING-EXPECTED INPUT JUMP CPB AS?? WAS ?? INPUT? JMP CAL?? YES -GO SET UP AND CALL ?? ROUTINE JSB MSS. NO! ILLEGAL RESPONCE DEF *+2 SEND FMGR 004 DEF .4 JMP INI1. TRY AGAIN CAL?? LDA .4 ?? CALL FROM INIT-SET MS TO 4 STA MS TO FOURCE FMGR 004 MESSAGE JMP SEGLD GO TO GENERAL CALL ROUTINE SPC 1 INIT2 LDA MS HERE AFTER INIT CALL ON IN SZA SKIP IF OK JMP INI1. NO - TRY AGAIN SPC 1 ITCAL CLA SET UP TO CALL THE INITIALIZE STA CAD. ROUTINE LDA AS2BL FIRST ROUTINE IN SEGMENT TWO JMP PSEGC GO LOAD THE SEGMENT AND CALL IT SPC 1 GT.JB CLA STA CAD. LDA AS7BL JMP PSEGC SPC 1 AS?? ASC 1,?? ASIN ASC 1,IN AS2BL ASC 1,2 AS7BL ASC 1,7 .4 OCT 4 .12 DEC 12 TEST EQU I.BUF+128-* MAKE SURE ABOVE CODE IS IN O.BUF ORR FM.AB JSB CLOS. COMMAND LOOP - ENTRY DEF *+2 CLOSE DEF I.BUF INPUT FILE JSB CLOS. CLOSE DEF *+2 DEF O.BUF OUTPUT FILE INIT0 LDA AS1BL INITILIZE SEGMENT CALL ENTRY POINT CPA CUSE. IF PARSE SEGMENT STILL IN JMP P.SEG CORE THEN SKIP SEGMENT CALL PSEGC STA CUSE. ELSE SET UP SEGLD JSB EXEC AND L.SEG EQU SEGLD DEF *+3 LOAD DEF .8 2k PARSE DEF SEG SEGMENT P.SEG LDA J.REC IF NO MORE JOBS, SSA TERMINATE. JMP TERM P.SG1 CLA NORMAL PARSE SEGMENT RETURN POINT STA MS CLEAR THE ERROR FLAG JSB PARS.,I CALL TO READ & PARSE A COMMAND DEF *+1 SEZ,RSS E=I = SEGMENT ABSENT JMP CALLR E=0 = ROUTINE IN CORE JMP SEGLD SEGMENT ABSENT SO GO LOAD SEG.R ADA CAD. ALL SEGMENTS OTHER THAN PARSE LDA A,I STA CAD. RETURN HERE WITH A= DEF TABLE ADDRESS CALLR JSB CAD.,I CALL THE ROUTINE DEF *+4 PASSING DEF NOCM. THE NUMBER OF PARAMETRS DEF P.RAM THE TABLE ADDRESS DEF MS THE ERROR FLAG ADDRESS LDA MS IF THERE IS NO SZA,RSS ERROR THEN JMP IFTST JUMP JSB MSS. ELSE DEF *+2 PRINT DEF MS FMGR MS IFTST LDA IFLG. IF INITILIZE ROUTINE SZA IN CONTROL JMP INIT2 GO CONTINUE SYSTEM INITIALIZATION JMP FM.AB ELSE READ THE NEXT COMMAND TERM JSB EXEC TERMINATE DEF *+2 DEF .6 SPC 2 .6 DEC 6 MS NOP .IDAD NOP IFLG. NOP NO.RD NOP JRN. BSS 1 ACTV. DEC 0 J.REC DEC 0 J.NAM BSS 3 SCR. BSS 1 * * DO NOT REPOSITION THE FOLLOWING FOUR * ARRAYS! THE PARSE ROUTINE DEPENDS ON IT. * TTY. OCT 1 N.OPL BSS 10 P.RAM BSS 64 NOCM. NOP CAD. NOP PARS. NOP BSS 8 0S AND 1S G0.. BSS 40 0G THROUGH 9G DEC 3 10G BSS 5 1P THROUGH 5P .R.E. BSS 2 6P AND 7P .8 DEC 8 ENDMS ASC 3, $END SEG ASC 2,FMGR CUSE. ASC 1, AS1BL ASC 1,1 D. ASC 3,D.RTR TL.P OCT 0,0 TM.VL OCT 0,0 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 3 ORG * LENGTH OF ROUTINE END FMGR ASMB,R,L HED FMGR0 * NAMEK: FMGR0 * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR0,5 92002-16008 740801 EXT SEG.R,CAD.,.IDAD SPC 1 FMGR0 STA .IDAD LDA TABL JMP SEG.R SPC 1 TABL DEF *+1 SPC 1 EXT PK.. DEF PK.. EXT CR.. DEF CR.. END FMGR0 ASMB,R,L,C HED FMGR1 * NAME: FMGR1 * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR1,5 92002-16008 760929 EXT PARS.,.PARS,REA.C,IFLG.,INI2. EXT $BATM,C.BUF,ABT..,AB.. EXT NO.RD,.ENTR,P.SEG,SEG.R,TR..,.IDAD EXT TTY.,ECHF.,ACTV.,BRKF.,MSS.,IFBRK SUP FMGR1 STA .IDAD LDA PARSE SET THE PARSE ROUTINE ADDRESS STA PARS. IN THE MAINS ADDRESS WORD LDA IFLG. IF INITILIZE SZA,RSS SKIP JMP P.SEG ELSE RETURN TO THE MAIN JSB PAR INITILIZE SO CALL DEF *+1 TO READ AND PARSE THE STATEMENT JMP INI2. RETURN TO THE INITILIZE CODE SPC 2 PAR NOP READ AND PARSE ENTRY POINT JSB .ENTR DEF PAR FETCH RETURN ADDRESS PAR0 JSB IFBRK CHECK FOR BREAK PENDING DEF *+1 SZA,RSS IF NO BREAK JMP NOBRK SKIP MESSAGE * JSB MSS. ELSE SEND THE BREAK MESSAGE DEF *+2 DEF ZERO * NOBRK LDA BRKF. IF A BREAK WAS PROCESSED SZA THEN JMP ANBRK GO ANALIZE IT * PAR1 LDA NO.RD IF NO READ FLAG SET SZA THEN JMP PAR2 BY PASS THE READ CALL * JSB REA.C CALL TO READ A COMMAND DEF *+1 CCA SET THE ECHO NOT DONE FLAG STA ECHF. JSB .PARS PARSE THE COMMAND DEF *+1 JMP PAR,I AND RETURN * PAR2 CLB CLEAR THE NO READ CALL FLAG STB NO.RD STB ECHF. DON'T ECHO INTERNAL CALLS SSA,RSS JMP TRLD * CLB,INB SET TO INTERACTIVE INPUT LDA TTY. SAVE THE TTY FLAG STB TTY. SET IT FOR NOW STA TMPM PARS JSB .PARS PARS THE COMMAND DEF *+1 LDA TMPM RESTORE THE TTY FLAG STA TTY. JMP PAR,I RETURN TO THE MAIN TO CALL THE SEGMENT * TRLD LDA TR JMP SEG.R * ANBRK CLA CLEAR THE BREAK FLAG STA BRKF. LDB ACTV. IF NOT ACTIVE SZB,RSS THEN JMP PAR1 JUST IGNOR THE FLAG * LDB XEQT ELSE CHECK IF WE ARE IN BATCH ADB D20 LDB B,I SSB,RSS IF NOT IN BATCH JMP PAR1 IGNOR BREAK * STA NO.RD CLEAR THE NO READ FLAG DLD $BATM GET THE BATCH TIME CLA SET A FOR OPERATOR ABORT SSB,RSS IF TIME OUT LDA N2 RESET FOR TIME OUT MESSAGE STA TMPM SET FOR CALL JSB AB.. SET UP DEF *+3 AN "AB" COMMAND DEF TMPM DEF ABTM JMP PAR0 * XEQT EQU 1717B ABTM ASC 8, ABEND JOB LIMIT N2 DEC -2 TMPM NOP TR DEF * DEF TR.. TR+1 ASAB ASC 1,AB TR+2 D20 DEC 20 TR+3 ZERO NOP TR+4 PARSE DEF PAR TR+5 uh DEF ABT.. TR+6 A EQU 0 B EQU 1 ORG * END FMGR1 ASMB,R,L HED FMGR2 * NAME: FMGR2 * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR2,5 92002-16008 760622 EXT SEG.R,CAD.,.IDAD SPC 1 FMGR2 STA .IDAD LDA TABL JMP SEG.R SPC 2 TABL DEF *+1 SPC 1 EXT IN.IT DEF IN.IT EXT IN.. DEF IN.. EXT MC.. DEF MC.. EXT RC.. DEF RC.. EXT PU.. DEF PU.. END FMGR2 ASMB,R,L HED FMGR3 * NAME: FMGR3 * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR3,5 92002-16008 760720 EXT SEG.R,CAD.,.IDAD FMGR3 STA .IDAD LDA TABL JMP SEG.R SPC 2 TABL DEF *+1 SPC 1 EXT CS.. DEF CS.. EXT DL.. DEF DL.. END FMGR3 ASMB,R,L HED FMGR4 * NAME: FMGR4 * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * *  * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR4,5 92002-16008 760622 EXT SEG.R,.IDAD SPC 1 FMGR4 STA .IDAD LDA TABL JMP SEG.R SPC 1 TABL DEF *+1 SPC 1 EXT DU..,ST..,CO.. DEF CO.. DEF ST.. DEF DU.. EXT LL..,LO..,SV.. DEF LL.. DEF LO.. DEF SV.. END FMGR4 ASMB,R,L HED FMGR5 * NAME: FMGR5 * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR5,5 92002-16008 760622 EXT SEG.R,.IDAD SPC 1 FMGR5 STA .IDAD LDA TABL JMP SEG.R SPC 1 TABL DEF *+1 SPC 1 EXT RP.. DEF RP.. EXT RU.. DEF RU.. EXT TL.. DEF TL.. EXT PA..,TE..,AN.. DEF PA.. DEF TE.. DEF AN.. EXT CNT. DEF CNT. END FMGR5 ASMB,R,L HED FMGR6 * NAME: FMGR6 * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR6,5 92002-16008 740801 EXT SEG.R,.IDAD * FMGR6 STA .IDAD LDA TABL JMP SEG.R * TABL DEF *+1 EXT JO.. DEF JO.. EXT EO.. DEF EO.. EXT LG.. DEF LG.. EXT OF.. DEF OF.. EXT CN.. DEF CN.. END FMGR6 ASMB,R,L HED FMGR7 * NAME: FMGR7 * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR7,5 92002-16008 760702 EXT SEG.R,CAD.,.IDAD FMGR7 STA .IDAD LDA TABL JMP SEG.R SPC 2 TABL DEF *+1 SPC 1 EXT NX.JB DEF NX.JB EXT ??.. DEF ??.. EXT SY.. DEF SY.. END FMGR7 ASMB,R,L HED FMGR8 * NAME: FMGR8 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR8,5 92002-16008 740801 EXT SEG.R,CAD.,.IDAD FMGR8 STA .IDAD LDA TABL JMP SEG.R SPC 2 TABL DEF *+1 SPC 1 EXT SP.. DEF SP.. EXT MS.. DEF MS.. EXT SA.. DEF SA.. END FMGR8 ASMB,R,L HED FMGR9 * NAME: FMGR9 * ^!SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM FMGR9,5 92002-16008 760720 EXT SEG.R,CAD.,.IDAD FMGR9 STA .IDAD LDA TABL JMP SEG.R SPC 2 TABL DEF *+1 SPC 1 EXT LU.. DEF LU.. EXT CL.. DEF CL.. EXT LI.. DEF LI.. END FMGR9 ASMB,R,L,C HED CA.. ROUTINE * NAME: CA.. * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM CA..,8 92002-16008 760513 ENT CA.. EXT N.OPL,.ENTR,.DFER,G0.. SUP * * THIS MODULE OF THE RTE FILE MANAGEMENT PACKAGE CACULATES * A VALUE AND STORES IT IN A GLOBAL LOCATION. IT IS CALLED * WHEN A STATEMENT OF THE FORM: * * :CA,#,OPERAND1,OPERATION,OPERAND2,OPERATION,OPERAND3...ETC. * * IS ENCOUNTERED. * * THE RESULT OF THE OPERATION WILL BECOME GLOBAL '#'. * * OPERATION CODES ARE: * * + ADD * - SUBTRACT (1-2) * / DIVIDE (1/2) * * MULTIPLY (1*2) * O OR (1 OR 2) * X EXCLUSIVE OR (1 XOR 2) * A AND (1 AND 2) * * THE ORDER OF THE RESULT WILL BE THE MAXIMUM OF THE ORDERS * OF THE OPERANDS. (THE ORDER IS 0=NULL,1=NUMERIC AND 3=ASCII) * IN ALL CASES EXCEPT / AND * THE CACULATION IS DONE INDEPENDTLY * ON THE THREE WORD VALUES OF THE OPERANDS. IN THE CASE OF * / AND * THE FIRST WORD OF OPERAND TWO IS USED FOR ALL * THREE WORD OF OPERAND ONE. * * EVALUATION PROCEEDS FROM LEFT TO RIGHT UNTIL A NULL OPERATION * CODE IS DETECTED. ANY OTHER PRECEDENCE MUST BE EFFECTED BY * MULTIPLE STATEMENTS. * COUNT NOP PRAM NOP ERR NOP CA.. NOP JSB .ENTR GET THE PRAMS DEF COUNT * * ISZ PRAM STEP TO GLOBAL # LDA PRAM,I GET IT LDB N.OPL GET POSSIBLE 'P' FLAG CPB "P" SET ?? JMP PTST YES GO TEST 'P' NUMBER * SSA,RSS CMA,INA,SZA,RSS IF 0 OR - JMP EREX TAKE GAS. * ADA .9 IF MORE THAN SSA 9 JMP EREX TAKE GAS. * LDB PRAM,I GET THE NUMBER BLS,BLS TIMES 4 PADD LDA DGLOB GET THE ADDRESS OF THE RAL,CLE,SLA,ERA GLOBAL ARRAY LDA A,I ADA B COMPUTE THE DESTINATION ADDRESS STA DESTT AND SET IT LDB PRAM SET UP THE TEMP ADB .3 STORE STB TDES ADDRESS STB PRAM * LOOP ADB .5 INDEX TO OP LDA B,I PICK UP OP CODE ADB .3 INDEX TO OP2 STB PRAM SET ADDRESS SZA,RSS IF NO CODE JMP EXOK THEN END OF LINE, GO EXIT * AND C377 KEEP FIRST CHARACTER CLB,CLE SET UP THE COMP LOOP STB COMP STB ADDR STB DMCD CPA MINUS SUBTRACT? CCE,RSS YES SET FLAG AND USE PLUS CPA PLUS ADD LDB ADA YES USE ADD INSTR CPA "O" OR? LDB IOR YES CPA "X" XOR? LDB XOR YES CPA "A" AND? LDB AND }YYES SZB ON OF THE ABOVE? JMP SETOP YES GO SET UP * CPA "/" DIVIDE? LDB DIV YES CPA TIMES *? LDB MPY YES SZB,RSS IF STILL NO GO JMP EREX THEN GO EXIT ERROR * STB DMCD SET *, / CODE LDB LDB SET A LDB BEFORE IT STB COMP AND LDB PRAM SET THE OP 2 ADDRESS CLE,INB AFTER THE DIV STB ADDR LDB ASR GET THE ASR INSTRUCTION * SETOP STB OPCD SET THE OP CODE LDA NEGAT IF - SEZ SET STA COMP A CMA,INA LDA N3 SET THE LOOP COUNT STA COUNT LDA TDES AND THE DESTINATION ADDRESS STA DES LDA A,I SET THE ORDER CODE NEGAT CMA,INA ADA PRAM,I TO THE LDB PRAM,I MAX SSA,RSS OF THE STB DES,I ORDERS PRESENT * CLOOP ISZ DES STEP DESTINATION ADDRESS ISZ PRAM AND SOURCE ADDRESS LDB DES GET ADDRESS TO B LDA PRAM,I OP2 TO A COMP CMA,INA /NOP /LDB B,I DO IT OPCD ADA B,I /ASR 16 DMCD NOP /DIV/MPY ADDR NOP /ADDR -PRAM STA DES,I SET THE RESULT AWAY ISZ COUNT DONE? JMP CLOOP NO DO NEXT WORD * LDB PRAM SET UP A FOR ADB N3 NEXT OP CODE JMP LOOP AND LOOP * PTST ADA .36 MUST BE IN RANGE -36<= X < 7 SSA,RSS IF NEGATIVE THEN < -36 CPA .36 DON'T ALLOW ZERO EITHER JMP EREX ERROR ZERO OR LESS THAN -36 * ADA N43 TEST FOR > 7 SSA,RSS OK? JMP EREX NO NUMBER TO BIG * LDB PRAM,I GET PRAM AND ADB .40 CACULATE THE ADDRESS OFFSET JMP PADD GO SET IT UP AND DO THE 'CA' * * EXOK LDA TDES,I AH - SWEET SUCCESS STA DESTT,I SET NEW PRAM IN DESTINATION ISZ TDES LDB N.OPL IF A CPB "P" P CAS4CULATE JMP PSET GO RESET TO RIGHT THING * ISZ DESTT AND JSB .DFER THEN DESTT NOP TDES NOP EXP CLA,RSS EREX LDA BADPM ERROR EXIT STA ERR,I SET ERROR CODE JMP CA..,I EXIT * * PSET LDA TDES,I GET THE VALUE WORD STA DESTT,I AND SET FOR P JMP EXP GO EXIT * DES NOP DGLOB DEF G0.. BADPM DEC 56 ASR ASR 16 LDB LDB B,I ADA ADA B,I IOR IOR B,I AND AND B,I XOR XOR B,I DIV OCT 100400 MPY OCT 100200 "A" OCT 40400 "X" OCT 54000 "O" OCT 47400 "P" ASC 1,P P BLANK FOR P TEST MINUS OCT 26400 PLUS OCT 25400 "/" OCT 27400 TIMES OCT 25000 C377 OCT 177400 .3 DEC 3 .9 DEC 9 .5 DEC 5 .36 DEC 36 .40 DEC 40 N3 DEC -3 N43 DEC -43 A EQU 0 B EQU 1 ORG * END ASMB,R,L,C * NAME: C.TAB * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM C.TAB,8 92002-16008 760720 ENT C.TAB * * SET UP SEGMENT AND ROUTINE NUMBERS. * R0 EQU 0 R1 EQU 400B R2 EQU R1+R1 R3 EQU R2+R1 R4 EQU R3+R1 R5 EQU R4+R1 R6 EQU R5+R1 R7 EQU R6+R1 R8 EQU R7+R1 R9 EQU R8+R1 R10 EQU R9+R1 SPC 2 S0 EQU 60B S1 EQU S0+1 S2 EQU S0+2 S3 EQU S0+3 S4 EQU S0+4 S5 EQU S0+5 S6 EQU S0+6 S7 EQU S0+7 S8 EQU S0+8 S9 EQU S0+9 * * THIS IS THE COMMAND DISPATCH TABLE FOR THE FMGR PROGRAM * EACH COMMAND ID IS FOLLOWED BY ITS ADDRESS. * FOR ROUTINES IN THE HOME SEGMENT THIS IS AN ADDRESS (DEF XX) * FOR ROUTINES IN OTHER SEGMENTS IT IS THE ASCII SEGMENT * SUFFIX IN THE LOW HALF OF THE WORD AND THE ROUTINE * NUMBER IN THAT SEGMENT IN THE HIGH HALF OF THE WORD. * .PARS BREAKS THESE APART BY THE ADDRESS BEING 0< ADD < 10000B * FOR SEGMENT ADDRESS. * * COMMANDS WITH THE SIGN BIT SET INDICATE THAT THE COMMAND * NEED NOT SATISFY ALL THE SYNTAX RESTRICTIONS IMPOSED ON * OTHER COMMANDS. * SPC 2 C.TAB EQU * NOP DEF TR.. ASC 1,PK ABS S0+R0 ASC 1,CR ABS S0+R1 ASC 1,EX EXT EE.. DEF EE.. ASC 1,TR EXT TR.. DEF TR.. ASC 1,MR EXT MR.. DEF MR.. ASC 1,SE EXT SE.. DEF SE.. ASC 1,IF EXT IF.. DEF IF.. ASC 1,AB EXT AB.. DEF AB.. ASC 1,CA EXT CA.. DEF CA.. OCT 142120 "DP" WITH SIGN BIT SET EXT DP.. DEF DP.. OCT 125052 "**" WITH SIGN BIT SET DEF COMM OCT 125000 "*" WITH SIGN BIT SET DEF COMM OCT 125040 "*" WITH SIGN BIT SET DEF COMM ASC 1,IN ABS S2+R1 ASC 1,MC ABS S2+R2 ASC 1,DC ABS S2+R3 ASC 1,PU ABS S2+R4 ASC 1,CS ABS S3+R0 ASC 1,DL ABS S3+R1 ASC 1,CO ABS S4+R0 ASC 1,ST ABS S4+R1 ASC 1,DU ABS S4+R2 ASC 1,LL ABS S4+R3 ASC 1,LO ABS S4+R4 ASC 1,SV ABS S4+R5 ASC 1,RP ABS S5+R0 OCT 151125 "RU" WITH SIGN BIT ABS S5+R1 ASC 1,TL ABS S5+R2 OCT 150101 "PA" WITH SIGN BIT ABS S5+R3 OCT 152105 "TE" WITH SIGN BIT ABS S5+R4 OCT 140516 "AN" WITH SIGN BIT ABS S5+R5 ASC 1,CN ABS S5+R6 ASC 1,JO ABS S6+R0 ASC 1,EO ABS S6+R1 ASC 1,LG ABS S6+R2 ASC STRN1,LS ABS S6+R2 ASC 1,RT ABS S6+R2 ASC 1,OF ABS S6+R3 ASC 1,RN ABS S6+R4 ASC 1,?? ABS S7+R1 OCT 151531 ASC SY WITH SIGN BIT SET ABS S7+R2 ASC 1,SP ABS S8+R0 ASC 1,MS ABS S8+R1 ASC 1,SA ABS S8+R2 ASC 1,LU ABS S9+R0 ASC 1,CL ABS S9+R1 ASC 1,LI ABS S9+R2 NOP * * COMM NOP LDA COMM,I JMP 0,I END 'TASMB,R,L,C HED FMGR ERROR EXPANDER MODULE PART OF RTE FMP * NAME: ??.. * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM ??..,8 92002-16008 REV.1826 780512 ENT ??.. EXT EXEC,TMP.,WRITF,O.BUF,.ENTR,.R.E.,.E.R. EXT CAM.O,IER.,BUF.,IFLG. EXT FM.AB,OPEN. SUP N NOP LST NOP SPC 1 ??.. NOP ENTRY POINT JSB .ENTR GEN PRAMS DEF N SPC 1 LDB .R.E. GET ERROR PRAM ASR 16 EXTEND THE SIGN BIT DIV .1000 DIVIDE LDA B ERROR CODE TO A LDB LST,I GET FLAG ISZ LST STEP TO SZB IF NOT SUPPLIED USE .E.R. LDA LST,I ELSE USE FIRST PRAM CPA .99 IF PRAM=99 JMP ALL THEN PRINT ALL CODES ON LIST * CPA N99 CHECK FOR SPECIAL ERROR *780512* JMP PN99 GO PRINT IT *780512* * CPA N101 TREAT 101 RSS AND CPA N102 102 JMP ICK SPECIALLY STA N SAVE CODE ADA MOSNG TEST FOR SSA DEFINED CODE JMP UDF TOO NEGATIVE LDA N ADA NHLP1 SSA JMP PRINT OK - PRINT IT ADA NHLG SSA JMP UDF IN MID CODE GAP - UNDEFINED ADA NHH SSA,RSS JMP UDF TO HIGH - UNDEFINED LDA N ADJUST N ADA NHLG FOR HIGH GROUP STA N TABLE PRINT LDA N GET N ALS DOUBLE P ADA TBAD ADD TABLE ADDRESS PR LDB A,I GET MESSAGE ADDRESS STB MSAD SET AS POINTER INA GET LDB A,I MESSAGE STB A LENGTH CMA,INA SET FOR STA N MOVE ADB .2 AND STB LST OUTPUT DLD FMGR SET FMGR BF DST BUF. AT LDA BUF.D HEAD RSS LDA A,I OF RAL,CLE,SLA,ERA MESSAGE JMP *-2 GET ADA .2 BUFFER ADDRESS AND MOVE LDB MSAD,I MOVE STB A,I MESSAGE INA TO ISZ MSAD THE ISZ N BUFFER JMP MOVE JSB EXEC PRINT DEF FMRTN ON DEF .2 LOG DEF CAM.O BUF.D DEF BUF. DEVICE DEF LST FMRTN LDA IFLG. IF INIT SZA THEN JMP ??..,I RETURN LDB .R.E. IF STA .R.E. CPB .60 60 JMP FM.AB THE ABORT JMP ??..,I ELSE, RETURN SPC 3 N99 DEC -99 DN99 DEF DFN99 PN99 LDA DN99 FETCH ADDR OF ERROR *780512* JMP PR SPC 3 ICK SZB IF NOT REAL JMP UDF THEN UNDEFINED LDB ER1+1 FIX CPA N102 MESSAGE INB AND STB EM101+1 THEN LDA DF101 GO JMP PR PRINT IT SPC 2 UDF LDA DFUDF PICK UNDEFINED JMP PR AND SEND IT. SPC 3 ALL LDA IFLG. SZA JMP FMRTN LIST ALL LDA TMP.D RSS POSSIBLE LDA A,I ERROR RAL,CLE,SLA,ERA CODES. JMP *-2 GET PARAMETER ADA .3 ADDRESS STA LST AND JSB OPEN. OPEN DEF OPRTN LIST DEF O.BUF FILE TMP.D DEF TMP. DEF LST,I DEF .0 OPRTN DLD PTRS SET THE DST CPTRS POINTERS FOR LENGTH/BUFFER AD WRIT OJSB WRITF WRITE DEF WRRTN THE DEF O.BUF MESSAGE DEF .E.R. ON CPTRS NOP THE NOP LIST WRRTN JSB IER. DEVICE DEF *+1 CHECK FOR ERRORS LDA CPTRS+1,I IF CURRENT LENGTH SSA NEGATIVE THEN JMP FMRTN DONE - RETURN. ISZ CPTRS ISZ CPTRS STEP THE ISZ CPTRS+1 ISZ CPTRS+1 BUFFER AND LENGTH POINTERS JMP WRIT ELSE GO WRITE NEXT MESSAGE SPC 3 .1000 DEC 1000 .99 DEC 99 N101 DEC -101 N102 DEC -102 .2 DEC 2 .3 DEC 3 .60 DEC 60 SPC 1 A EQU 0 B EQU 1 MSTN EQU 26 MOST NEGATIVE ERROR CODE HLOW EQU 23 MOST POSITIVE OF LOW GROUP LHIG EQU 47 LOWEST OF HIGH GROUP HHIG EQU 62 HIGHEST OF HIGH GROUP SPC 1 MOSNG ABS MSTN MOST NEG. CODE NHLP1 ABS -HLOW-1 NEG. OF LOW HIGH BOUND NHLG ABS HLOW+1-LHIG NEG. OF LOW HIGH GAP NHH ABS LHIG-HHIG-1 NEG. OF HIGH SIZE. SPC 1 BFPT NOP MSAD NOP DFUDF DEF *+1 DEF UDN ABS LUDN FMGR ASC 2,FMGR TBAD DEF MS00 PTRS DEF LSHED,I DEF LSHED+1 ER101 DEF EM101 ABS L101 EM101 ASC 19,-10* INTERNAL VALIDITY CHECK FAILED SE ASC 7,ND BUG REPORT! L101 EQU *-EM101 UDN ASC 6, NOT DEFINED LUDN EQU *-UDN LSHED DEF HEAD THIS LIST ABS LHEAD IS IN DEF BLNK THE ABS LBLNK ORDER DEF HD2 OF ABS LHD2 PRINTING DEF BLNK AND ABS LBLNK ALSO DFN99 DEF ERM99 ABS LM99 DEF ERM26 ABS LM26 DEF ERM25 ABS LM25 DEF ERM24 ABS LM24 DEF ERM23 ABS LM23 DEF ERM22 ABS LM22 DEF ERM21 ABS LM21 DEF ERM20 ABS LM20 DEF UDN ABS LUDN DEF UDN ABS LUDN DEF ERM17 NUMERICAL ABS LM17 ˤ ORDER DEF ERM16 ABS LM16 DEF ERM15 ABS LM15 DEF ERM14 ABS LM14 DEF ERM13 ABS LM13 DEF ERM12 ABS LM12 DEF ERM11 ABS LM11 DEF ERM10 ABS LM10 DEF ERM9 ABS LM9 DEF ERM8 ABS LM8 DEF ERM7 ABS LM7 DEF ERM6 ABS LM6 DEF ERM5 ABS LM5 DEF ERM4 ABS LM4 DEF ERM3 ABS LM3 DEF ERM2 ABS LM2 DEF ERM1 ABS LM1 MS00 DEF ER0 ABS L0 DEF ER1 ABS L1 DEF ER2 ABS L2 DEF ER3 ABS L3 DEF ER4 ABS L4 DEF ER5 ABS L5 DEF ER6 ABS L6 DEF ER7 ABS L7 DEF ER8 ABS L8 DEF ER9 ABS L9 DEF ER10 ABS L10 DEF ER11 ABS L11 DEF ER12 ABS L12 DEF ER13 ABS L13 DEF ER14 ABS L14 DEF ER15 ABS L15 DEF ER16 ABS L16 DEF ER17 ABS L17 DEF ER18 ABS L18 DEF ER19 ABS L19 DEF ER20 ABS L20 DEF ER21 ABS L21 DEF ER22 ABS L22 DEF ER23 ABS L23 DEF ER47 ABS L47 DEF ER48 ABS L48 DEF ER49 ABS L49 DEF ER50 ABS L50 DEF ER51 ABS L51 DEF ER52 ABS L52 DEF ER53 ABS L53 DEF ER54 ABS L54 DEF ER55 ABS L55 DEF ER56 ABS L56 DEF ER57 ABS L57 DEF ER58 ABS L58 DEF ER59 ABS L59 DEF ER60 ABS L60 DEF ER61 ABS L61 DEF ER62 ABS L62 DF101 DEF ER101 EOF RECORD DEC -1 .0 NOP END OF THE LIST * ERROR TABLE -CODES ARE ENTERED IN ANY ORDER. ER0 ASC 5, 000 BREAK L0 EQU *-ER0 ERM1 ASC 8, -01 DISC ERROR LM1 EQU *-ERM1 ERM2 ASC 12, -02 DUPLICATE FILE NAME LM2 EQU *-ERM2 ERM3 ASC 11, -03 BACKSPACE ILLEGAL LM3 EQU *-ERM3 ERM4 ASC 19, -04 MORE THAN 32767 RECORDS IN A TYPE ASC 4, 2 FILE LM4 EQU *-ERM4 ERM5 ASC 13, -05 RECORD LENGTH ILLEGAL LM5 EQU *-ERM5 ERM6 ASC 18, -06 CR OR FILE NOT FOUND OR NO ROOM LM6 EQU *-ERM6 ERM7 ASC 14, -07 BAD FILE SECURITY CODE LM7 EQU *-ERM7 ERM8 ASC 16, -08 FILE OPEN OR LOCK REJECTED LM8 EQU *-ERM8 ERM9 ASC 19, -09 ATTEMPT TO USE APOSN OR FORCE TO ASC 8,1 A TYPE 0 FILE LM9 EQU *-ERM9 ERM10 ASC 13, -10 NOT ENOUGH PARAMETERS LM10 EQU *-ERM10 ERM11 ASC 9, -11 DCB NOT OPEN LM11 EQU *-ERM11 ERM12 ASC 11, -12 EOF OR SOF ERROR LM12 EQU *-ERM12 ERM13 ASC 8, -13 DISC LOCKED LM13 EQU *-ERM13 ERM14 ASC 10, -14 DIRECTORY FULL LM14 EQU *-ERM14 ERM15 ASC 9, -15 ILLEGAL NAME LM15 EQU *-ERM15 ERM16 ASC 14, -16 ILLEGAL TYPE OR SIZE=0 LM16 EQU *-ERM16 ERM17 ASC 19, -17 ILLEGAL READ/WRITE ON TYPE 0 FILE LM17 EQU *-ERM17 ERM20 ASC 11, -20 ILLEGAL ACCESS LU LM20 EQU *-ERM20 ERM21 ASC 14, -21 ILLEGAL DESTINATION LU LM21 EQU *-ERM21 ERM22 ASC 14, -22 NO AVAILABLE SPOOL LU'S LM22 EQU *-ERM22 ERM23 ASC 15, -23 NO AVAILABLE SPOOL FILES LM23 EQU *-ERM23 ERM24 ASC 14, -24 NO MORE BATCH SWITCHES LM24 EQU *-ERM24 ERM25 ASC 10, -25 NO SPLCON ROOM LM25 EQU *-ERM25 ERM26 ASC 23, -26 QUEUE FULL OR MAX PENDING SPOOLS EXCEEDED LM26 EQU *-ERM26 ERM99 ASC 22, -99 DIRECTORY MANAGER EXEC REQUEST ABORTED LM99 EQU *-ERM99 SPC 1 ER1 ASC 14, 001 DISC ERROR-LU REPORTED L1 EQU *-ER1 ER2 ASC 11, 002 INITIALIZE LU 2! L2 EQU *-ER2 ER3 ASC 11, 003 INITIALIZE LU 3! L3 EQU *-ER3 ER4 ASC 18, 004 ILLEGAL RESPONSE TO 002 OR 003 L4 EQU *-ER4 ER5 ASC 18, 005 REQUIRED TRACK NOT AVAILABLE - ASC 15,RELATIVE TAT POSITION REPORTED L5 EQU *-ER5 ER6 ASC 10, 006 FMGR SUSPENDED L6 EQU *-ER6 ER7 ASC 10, 007 CHECKSUM ERROR L7 EQU *-ER7 ER8 ASC 11, 008 D.RTR NOT LOADED L8 CEQU *-ER8 ER9 ASC 13, 009 ID-SEGMENT NOT FOUND L9 EQU *-ER9 ER10 ASC 8, 010 INPUT ERROR L10 EQU *-ER10 ER11 ASC 18, 011 DO OF,XXXXX,8 ON NAMED PROGRAMS L11 EQU *-ER11 ER12 ASC 16, 012 DUPLICATE DISC LABEL OR LU L12 EQU *-ER12 ER13 ASC 11, 013 TR STACK OVERFLOW L13 EQU *-ER13 ER14 ASC 20, 014 REQUIRED ID-SEGMENT OR ID-EXTENSION ASC 5, NOT FOUND L14 EQU *-ER14 ER15 ASC 10, 015 LS TRACK REPORT L15 EQU *-ER15 ER16 ASC 20, 016 FILE MUST BE AND IS NOT ON LU 2 OR ASC 1,3 L16 EQU *-ER16 ER17 ASC 16, 017 ID SEGMENT NOT SET UP BY RP L17 EQU *-ER17 ER18 ASC 12, 018 PROGRAM NOT DORMANT L18 EQU *-ER18 ER19 ASC 19, 019 FILE NOT SET UP BY SP ON CURRENT ASC 3,SYSTEM L19 EQU *-ER19 ER20 ASC 11, 020 ILLEGAL TYPE 0 LU L20 EQU *-ER20 ER21 ASC 14, 021 ILLEGAL DISC SPECIFIED L21 EQU *-ER21 ER22 ASC 10, 022 COPY TERMINATED L22 EQU *-ER22 ER23 ASC 14, 023 DUPLICATE PROGRAM NAME. L23 EQU *-ER23 SPC 2 ER47 ASC 12, 047 SPOOL SETUP FAILED L47 EQU *-ER47 ER48 ASC 14, 048 GLOBAL SET OUT OF RANGE L48 EQU *-ER48 ER49 ASC 20, 049 CAN'T RUN RP'ED PROG. OR PARTITION ASC 5,TOO SMALL L49 EQU *-ER49 ER50 ASC 13, 050 NOT ENOUGH PARAMETERS L50 EQU *-ER50 ER51 ASC 17, 051 ILLEGAL MASTER SECURITY CODE L51 EQU *-ER51 ER52 ASC 8, 052 ILLEGAL LU. L52 EQU *-ER52 ER53 ASC 14, 053 ILLEGAL LABEL OR ILABEL L53 EQU *-ER53 ER54 ASC 11, 054 DISC NOT MOUNTED L54 EQU *-ER54 ER55 ASC 11, 055 MISSING PARAMETER L55 EQU *-ER55 ER56 ASC 9, 056 BAD PARAMETER L56 EQU *-ER56 ER57 ASC 16, 057 BAD TRACK NOT IN FILE AREA L57 EQU *-ER57 ER58 ASC 16, 058 LG AREA EMPTY OR TOO SMALL! L58 EQU *-ER58 ER59 ASC 16, 059 REPORTED TRACK UNAVAILABLE L59 EQU *-ER59 ER60 ASC 19, 060 DO YOU REALLY WANT TO PURGE THIS ASC 9,DISC? (YES OR NO). L60 EQU *-ER60 ER61 ASC 18, 061 DO A "DC" AND A "MC" ON THIS CR. L61 EQU *-ER61 ER62 ASC 12, 062 MORE THEN 31 DISCS. L62 k*($EQU *-ER62 SPC 2 HEAD ASC 9, FMGR ERROR CODES LHEAD EQU *-HEAD HD2 ASC 9, ERROR MEANING LHD2 EQU *-HD2 BLNK ASC 1, LBLNK EQU *-BLNK ORG * PROGRAM LENGTH END *SPL,L,O ! NAME: FM.CM ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME FM.CM(8) "92002-16008 REV.1826 780414" ! ! MODIFIED: 780413 TO SAVE SECURITY CODE IN TRANSFER ! STACK. (GLM) ! ! 780414 TO CLEAR .E.R. IF LU PASSED TO OPEN. ! WAS OK. (GLM) ! ! LET EXEC BE SUBROUTINE,EXTERNAL LET CLOSE,OPEN BE SUBROUTINE,EXTERNAL LET .DFER BE SUBROUTINE,EXTERNAL,DIRECT LET FM.ER,OPEN.,CLOS.,\ IER. BE SUBROUTINE LET CLO BE SUBROUTINE,DIRECT LET IFBRK BE FUNCTION,EXTERNAL LET LURQ BE FUNCTION,EXTERNAL LET RQLU BE FUNCTION,DIRECT LET BRKF. BE INTEGER,GLOBAL LET LCKFL,WATMS(8),WATM BE INTEGER INITIALIZE BRKF. TO 0 INITIALIZE LCKFL,WATMS TO 0,"WAITING FOR LU " LET MSS. BE SUBROUTINE LET JER. BE SUBROUTINE,DIRECT LET EC.HO,CONV. BE SUBROUTINE LET ILOG BE FUNCTION,DIRECT LET CAMS.(60) BE INTEGER,GLOBAL !TRANSFER STACK *780413* LET C.BUX BE INTEGER LET C.BUF(40) BE INTEGER,GLOBAL LET TTY.,N.OPL,I.BUF,O.BUF BE INTEGER,EXTERNAL LET .TTY BE FUNCTION,EXTERNAL LET CAM.I BE INTEGER(144),GLOBAL LET CAM.O,ECH.,BUF.(129) BE INTEGER ,GLOBAL LET ECHF.,C.DLM BE INTEGER ,GLOBAL LET .R.E. BE INTEGER ,EXTERNAL LET .E.R. BE INTEGER,GLOBAL !DEFINE THE ERROR WORD LOCATION LET SVCOD BE INTEGER LET P.TR BE INTEGER ,GLOBAL LET TMP. BE INTEGER,GLOBAL LET LST(2) BE INTEGER LET SVCO,CREF BE INTEGER LET S,LSSC,SCOD,NFA,ECH,LSDIS BE INTEGER LET FM.AB BE LABEL,EXTERNAL LET XEQT BE CONSTANT (1717K) LET FM(2),MS1,MS2 BE INTEGER INITIALIZE C.BUX TO " :" INITIALIZE FM , MS1,MS2 TO "FMGR 000" LET A BE CONSTANT(0) LET B BE CONSTANT(1) INITIALIZE P.TR TO @CAMS. LET NO.RD,ACTV.,CAD. BE INTEGER,EXTERNAL LET STWD BE CONSTANT (100015K) ! MSS.: SUBROUTINE(ER,NX)GLOBAL LET ER,NX BE INTEGER ! ! MESSAGE FORMAT: ! FMGR XXX ! ! MESSAGE ERROR WORD FORMAT ! THE THOUSANDS DIGIT IS USED AS FOLLOWS: ! IF ONE OR THREE THEN TWO MESSAGES ARE TO BE PRINTED ! ! IF ZERO OR TWO THEN ONLY ONE MESSAGE IS PRINTED ! ! IF ZERO OR ONE THEN SEND THE INPUT DEVICE TO THE LOG UNIT ! IF 2 OR 3 LEAVE THE LOG AND INPUT DEVICES AS IT IS ! IFNOT [NO_ER] THEN BRKF._1 !SAVE ERROR FOR ?? AND ! IF BREAK ERROR SET FLAG S_NO/1000;.R.E._.B. MS1_" " !SET SIGN FOR PLUS IF NO<0 THEN [NO_ -NO;MS1_26400K]!IF NEG SET TO GIVE SIGN S_NO/1000;NO_.B. MSS00:CONV.(NO,MS2,3) !CONVERT THE NUMBER FM.ER([IF S>1 THEN 1,ELSE 2],FM,4) IF S AND 1 THEN [S_S-1;NO_NX; \DO SECOND NUMBER MS1 _ 20040K; GOTO MSS00] RETURN END ! ! COMMAND OUTPUT (ERROR) SUBROUTINE ! FM.ER:SUBROUTINE(SCCOD,BFMS,LN)GLOBAL LET SCCOD,BFMS,LN BE INTEGER ! ! FM.ER PRINTS ONLY IF SCCOD IS GREATER THAN OR EQUAL TO ! THE SVCOD ENTERED AT TURN ON TIME ! ! IN ADDITION IF THE SCCOD IS IS GREATER THAN 1 CONTROL IS SWITCHED ! TO THE LOG CHANNEL ! IF SCCOD > 1 THEN GO TO EC !ALWAYS PRINT IF 2 OR MORE IF SCCOD 3 THEN RETURN !IF CODE HIGH ENOUGH RETURN ! IF ACTV. THEN [ \IF IN AN ACTIVE IF SVCOD < 3 THEN [ \JOB, AND SV<3, CAD.,NO.RD _ 6; RETURN]] !ABORT THE JOB. IF ILOG() THEN RETURN !IF ON LOG AREADY RETURN OPEN.(CAM.I,CAM.O,0.0,410K)!OPEN THE INPUT TO THE LOG DEVICE RETURN END ! ! OPEN.:SUBROUTINE(DCBRF,LURF,PLIS,OPLST) GLOBAL LET DCBRF,LURF,PLIS,OPLST BE INTEGER DCB14_[DCB9_[DCB7_[DCB6_[DCB5_[DCB4_[DCB3_[DCB2_@DCBRF+2]+1]+1]\ +1]+1]+1]+2]+5 .E.R._20 ! SET ERROR CODE FOR ILLEGAL LU IF LURF < 0 THEN GO TO ABEX !IF LU NEGATIVE ABORT IFNOT @DCBRF=@CAM.I THEN GOTO OPN3 ! NOT INPUT UNIT TTY._0 !SET TTY FLAG TO INDICATE NOT TTY $P.TR_$DCB14 !SAVE RECORD COUNT FOR FILE P.TR_P.TR+1! SET THE NEXT ADDRESS CALL .DFER($P.TR,LURF);P.TR_P.TR+3 !STACK THE NAME OPN3: CLO (DCBRF) !CLOSE THE OLD FILE IF LURF>20000K THEN [ \ IF FILE THEN OPEN(DCBRF,.E.R.,LURF,OPLST,PLIS,$(@PLIS+1)); \OPEN THE FILE IF .E.R. < 0 THEN[ \IF ERROR OPAB: IF @DCBRF=@CAM.I THEN[ \ON COMAND DCB THEN P.TR_P.TR-4; \ADJUST THE POINTER $DCB14_$P.TR; \AND RESET THE RECORD COUNT IF SVCOD > 3 THEN[ \TR TO LOG NOT ALLOWED SO MSS.(.E.R.);RETURN] \SEND ERROR AND RETURN ] \ ]; \ IER.; \REPORT ERRORS ON OTHERS GO TO OPN2 \SKIP THE ELSE CAUSE ] EXEC(STWD ,LURF,EQT5,NUM,BF) !GET STA5T WORD TYPE CODE GO TO OPAB !IF ABORT GO SEND ERROR .E.R._0 !*780414*CLEAR ILLEGAL LU CODE ! ! SET EOF ! EOF_1100K !ASSUME TTY-PRINTER IF [EQT5_EQT5 AND 37400K] > 7000K THEN \IF DRIVER TYPE 17 OR > GO TO EOFCD !USE EOF IF EQT5 = 2400K THEN[ \IF DVR05 AND IF [BF_BF AND 7] = 1 THEN GO TO EOFCD, \SUBCHANNEL 1 OR ELSE[IF BF = 2 THEN[ \2 I.E. CTU EOF EOFCD: EOF_100K;GO TO OPN1]]] IF EQT5=1000K THEN GO TO LEADR !IF PUNCH OR IF (OPLST AND 110K) = 110K THEN[ \OR LEADR SUB FUN SUPPLIED LEADR: EOF_ 1000K] !USE LEADER FUNCTION ! ! OPN1: $DCB2,DCBRF_0 $DCB3_(OPLST AND 3700K) OR LURF $DCB4_EOF OR (LURF AND 77K) $DCB5,$DCB6,$DCB7_100001K IFNOT 77K AND NUM THEN $DCB6_1 !READ ILLEGAL FROM LU ZERO $DCB9_$XEQT OPN2: IF @DCBRF=@CAM.I THEN[ \IF COMMAND DEVICE $P.TR_ PLIS; P.TR_P.TR+1; \*780413* SAVE SEC CODE $P.TR_ -(DCBRF AND 77K);P.TR_P.TR+1] !SAVE THE CR (-LU) IF $DCB2 THEN RETURN !IF NOT TYPE ZERO THEN RETURN IF .TTY($DCB3) OR @DCBRF=@CAM.I \IF INTERACTIVE OR IF THEN GO TO OPN5 !CMND INPUT, SKIP LOCK IFNOT RQLU() THEN GO TO OPN5 !IF LOCKABLE LOCK AND CONTINUE CALL CONV.($DCB3 AND 77K,WATM,2) !PUT LU IN MESSAGE CALL EXEC(2,CAM.O,WATMS,9) !SEND WAIT MESSAGE OPN6: CALL EXEC(12,0,2,0,-5) !TRY EVERY 5 SECONDS CALL JER. !TEST FOR BREAK IF RQLU() THEN GO TO OPN6 !IF NOT NOW WAIT AGAIN OPN5: IF @DCBRF=@O.BUF THEN[\ IF($DCB4 AND 3700K)=1000K THEN[IF OPLST<0 THEN[\ CALL EXEC(3,$DCB4) ]]] !END FILE IF REASONABLE IF @DCBRF=@CAM.I THEN[d\ TTY._.TTY($DCB3);GO TO OPN4] IF @DCBRF=@I.BUF THEN \ IF INPUT ON A ZERO [OPN4: EXEC(3,700K+($DCB3 AND 77K))] !THEN SET EOT CONDITION RETURN END ! RQLU: FUNCTION DIRECT RETURN LURQ(100001K,$DCB3,1) END ! ! CLOS.:SUBROUTINE(CLSOP) GLOBAL LET CLSOP BE INTEGER IF @CLSOP THEN[CLO(CLSOP);RETURN]! IF SPECIFIED CLOSE THE FILE CLO(I.BUF)! CLOSE INPUT CLO(O.BUF) ! CLOSE OUTPUT CLO (CAM.I) !CLOSE CAMMAND RETURN! RETURN END ! CLO: SUBROUTINE(DCB)DIRECT !CLOSE SUBROUTINE FOR INTERNAL WORK LET DCB BE INTEGER DCBX9_[DCBX3_[DCBX2_@DCB+2]+1]+6 IF $DCBX9 # $XEQT THEN RETURN !IF NOT OPEN FORGET IT IFNOT $DCBX2 THEN[\ !IF THIS IS A TYPE 0 FILE IFNOT @DCB=@CAM.I THEN[\ AND NOT COMMAND INPUT CALL LURQ(40000K,$DCBX3,1) ]] !CLEAR THE LOCK !NOTE-- BIT 14 IS SET(NO-ABORT) GOTO CL1 !THIS LINE IS REQUIRED FOR ! !THE ABORT RETURN CL1: IF DCB AND 177700K THEN CLOSE(DCB) !IF NOT FAKE CLOSE $DCBX9 _0 !ELSE KILL THE OPEN FLAG RETURN END ! ! EC.HO:SUBROUTINE GLOBAL !TO ECHO COMMANDS IFNOT ECHF. THEN RETURN !IF ALREADY DONE THE RETURN IF ILOG() THEN GO TO ECH0 C.BUX_20072K !(BLANK : )ASSUME BATCH IF TTY. THEN C.BUX_ 20040K !(2 BLANKS ) IF BAD ASSUMPTION CHANGE IT CALL EXEC(2,CAM.O,C.BUX,ECH.+1) !ECHO THE COMMAND ECH0: ECHF._0 !SET THE ECHOED FLAG RETURN END ! ! ILOG: FUNCTION DIRECT DCB9_[DCB3_[DCB2_@CAM.I+2]+1]+6 !SET UP DCB ADDRESSES IFNOT ($DCB3 XOR CAM.O) AND 77K THEN[IFNOT $DCB2\ THEN [IF$DCB9=$XEQT THEN RETURN 1 ]] RETURN 0 END ! IER.: SUBROUTINE GLO_BAL IF .E.R. =>0 THEN RETURN ABEX: DO[MSS.(.E.R.);GO TO FM.AB] END ! ! JER.: SUBROUTINE GLOBAL,DIRECT !SUBROUTINE TO CHECK ERRORS IER. ! AND FOR BREAK CONDITION .E.R._0 !SET ERROR CODE FOR BREAK ERROR IF IFBRK THEN GO TO ABEX!IF BREAK CONDITION ,EXIT RETURN !ELSE RETURN END ! ! CONV.:SUBROUTINE (NOO,BUF,NDIG) GLOBAL LET NOO,BUF,NDIG BE INTEGER ! ROUTINE TO CONVERT NO WITH NDIG DIGITS TO ASC ! A T BUF ! ! BUF WILL CONTAIN THE LOWEST DIGITS BUF-1 THE NEXT ! LOWEST ETC. ! EV,BF_@BUF NUM_NOO FOR I_1 TO NDIG DO THRU COV DO[NUM_NUM/10;DI_$B+60K] $BF_[IF EV THEN ($BF AND 177400K)+DI,\ ELSE ($BF AND 377K)+(DI-<8)] COV: IF EV THEN EV_0, ELSE\ EV,BF_BF-1 RETURN END ! ! ! ! ! END END$ SPL,L,O ! NAME: PK.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! DATE: 750416 ! ! MODIFIED 750416 TO NOT MOVE EXTENTS IF THEY ALREADY RESIDE AT ! THE DESTINATION AND ALSO TO CORRECTLY HANDLE FILES TO 32K SECTORS ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME PK..(8) ! PK.. IS THE PACKING ROUTINE FOR THE ! RTE FMGR PROGRAM. ! ! IT PACKS RTE FILES AS FOLLOWS: ! ! 1. IF DISC IS LU2 OR 3 A CHECK IS ! MADE TO INSURE NO CURRENT ID SEGMENTS ! POINT TO FILE TRACKS. ! ! 2. EACH FILE IS MOVED DOWN (IF NECESSARY). ! AFTER EACH FILE IS) MOVED ITS DIRECTORY ! ENTRY IS UPDATED. ! (THUS NO MORE THAN ONE FILE IS ! LOST BY A CRASH.) ! ! 3. AFTER ALL FILES ARE MOVED A NEW DIRECTORY ! IS CREATED PACKING OUT ALL THE PURGED ! ENTRIES AND THIS IS WRITTEN ON THE DISC VIA D.RTR. ! ! THIS ROUTINE IS ENTERED BY THE COMMAND: ! ! PK,CR ! ! WHERE CR IS OPTIONAL AND RESTRICTS ! THE PACK TO DISC CR. ! ! DECLARE EXTERNALS ! LET D.RIO,DR.RD,LOCK.,MSS.,\ IER.,FM.ER,EXEC,READF, \ WRITF,RWNDF \ BE SUBROUTINE,EXTERNAL ! LET JER. BE SUBROUTINE,EXTERNAL,DIRECT ! LET COR.A BE PSEUDO,EXTERNAL,DIRECT ! LET D.SDR,PK.DR,DS.LU,O.BUF,\ .R.E.,.IDAD,\ .E.R.,D.,I.BUF,CUSE. BE INTEGER,EXTERNAL ! ! DECLARE INTERNAL SUBROUTINES ! LET TRAK.,SETAD,BADTR\ BE SUBROUTINE ! ! DECLARE ARRAYS ! LET BTL(6) BE INTEGER ! ! DECLARE CONSTANTS ! LET READI BE CONSTANT( 1) LET WRIT BE CONSTANT( 2) LET BKLWA BE CONSTANT(1777K) LET XEQT BE CONSTANT(1717K) LET KEYWD BE CONSTANT(1657K) LET SECT2 BE CONSTANT(1757K) LET SECT3 BE CONSTANT(1756K) LET A BE CONSTANT( 3 ) LET B BE CONSTANT( 1 ) ! ! PK..: SUBROUTINE(N,LIS,ER) GLOBAL !ENTRY POINT PACK_$(@LIS+1) !GET THE PACK LUPT_@D.SDR PAKAD_@PK.DR !SET DIRECTORY ADD. PK1: D.RIO(READI) ! AGAIN:DIS_[IF PACK THEN PACK,ELSE -$LUPT] IFNOT DIS THEN RETURN !END OF DISC DIRECTORY CALL JER. !CHECK FOR BREAK LOCK.(DIS,3)?[LU_.R.E.;MSS.(DIS);.R.E._LU;GO TO NXDIS] ! DR.RD(READI,DIS,0)?[ER_54;RETURN] ! FILCO_0 SETAD LU_$$@DS.LU ! ! SET UP DCBS FOR PACKING ! DCB5_[NXSEC_[NXTR_[DCB2_[\ DCB_@O.BUFF]+2]+1]+1]+1 DCB21_[DCB20_[DCB19_[OBUF_[DCB9_[DCB8_[DCB7_[DCB6_ \ DCB5+1]+1]+1]+1]+7]+3]+1]+1 FOR T_DCB TO [TBUF_DCB+32] DO $T_0 !CLEAR THE DCB $DCB_LU $DCB2_1 $DCB6_128 !SET RECORD SIZE $DCB7_100200K !SECURITY FLAG $DCB8_$PKD6 $DCB9_$XEQT !AND OPEN FLAG FOR T_DCB TO DCB9 DO[T1_T+16;$T1_$T] IF LU<4 THEN TRAK.(LU)?[GO TO PK26] ! ! THE DISC IS LOCKED AND WE MAY START ! PACKING - WE MUST HAVE A BUFFER ! AND ITS SIZE. IF WE ARE IN THE ! BACKGROUND USE ALL THE REST OF ! CORE; ELSE USE 0.BUF+32 (256 WDS) ! IF ($($XEQT+14)AND 7)#3 THEN GOTO PK3 PK2: IF[LN_($BKLWA-[COR.A,BUFAD_.IDAD]+1)\ AND 77600K]>256 THEN GO TO PK5 ! PK3: DO[LN_256;BUFAD_TBUF] PK5: SECSZ_LN-<10 !SET SECTOR COUNT. ! ! BUFFER AND LENGTH ARE SET NOW ! START TO PACK ! ! DO[$NXTR_$PKD4; FOR\ T_@BTL TO @BTL+5 DO[\ PKD9_PKD9+1; $T_$PKD9]] $NXSEC,BLK_0 NXBLK:DR.RD(READI,DIS,BLK)?[GO TO CLEAN] ! FILCO_0 ! NXFIL:SETAD?[GO TO WRBLK] ! ! IFNOT $PKD THEN GOTO CLEAN !END ! IF $PKD<0 THEN GOTO NXFIL !PURGED IFNOT $PKD3 THEN GOTO NXFIL !TYPE0 ! ! IF THE FILE CONTAINS A BAD TRACK ! PURGE IT AND CONTINUE ! BADTR($PKD4,[$DCB20_$PKD5 AND 377K],$PKD6)?[WRFL,$PKD_ -1;\ GO TO WRBLK] ! ! ! COMPUTE NEW LOCATION ! NEWLO:BADTR($NXTR,$NXSEC,$PKD6)?[\ $NXTR_$BT+1;$NXSEC_0;GO TO NEWLO] ! ! IF NEW LOCATION SAME AS OLD THEN ! GO TO NEXT FILE ! IF $NXTR=$PKD4 THEN [IF $NXSEC=$DCB20 THEN\ GO TO PK11] ! ! FAKE OPEN THE FILES ! WRFL,CO,$DCB5,$DCB21_$PKD6 !# OF SECTORS $DCB19_$PKD4 !START TRACK RWNDF(O.BUF,.E.R.) !SET REST OF DCB IER. RWNDF($OBUF,.E.R.) !FOR IN AND OUT IER. PK10: XFER_[IF CO>SECSZ THEN LN,ELSE CO-<6] ]g READF($OBUF,.E.R.,$BUFAD,XFER) IER. WRITF(O.BUF,.E.R.,$BUFAD,XFER) IER. IF [CO_CO-(XFER-<10)] THEN GOTO PK10 DO[$PKD4_$NXTR;$PKD5_$NXSEC+($PKD5 AND 177400K)] PK11: DO[$NXTR_NTR;$NXSEC_NSEC]!UPDATE FOR NEXT FILE ! ! PONTERS ARE UPDATED ! ! FILE IS MOVED - UPDATE DIRECTORY ! THEN GO DO NEXT FILE. ! WRBLK:IF WRFL THEN[DR.RD(WRIT,DIS,BLK);WRFL_0] IF FILCO=128 THEN[BLK_BLK+1;GOTO NXBLK],ELSE\ GO TO NXFIL CLEAN:BLK,CO_0 PK12: DR.RD(READI,DIS,BLK)?[GO TO PK25] DO[FILCO_0;SETAD] IF BLK THEN GO TO PK16 DO[$PKD5_$NXSEC;$PKD9_$NXTR;$NXSEC_0] NSEC_$SECT2 IF $SECT3 THEN [IF $SECT3<$SECT2 THEN NSEC_$SECT3] $DCB5_-$PKD8*$PKD6+2 NTR_$DCB5/NSEC IF $B THEN NTR_NTR+1 EXEC(4,NTR,$NXTR,$DCB,$DCB8) $DCB6_16 $DCB2_2 RWNDF(O.BUF,.E.R.) IER. PK16: IFNOT $PKD THEN GOTO PK25 IF $PKD+1 THEN[WRITF(O.BUF,.E.R.,$PKD);\ IER.;CO_CO+1] SETAD?[BLK_BLK+1;GOTO PK12] GOTO PK16 ! PK25: FOR T_PKD TO PKD+15 DO $T_0 FOR T_CO TO($DCB5-2)*4 DO[\ WRITF(O.BUF,.E.R.,$PKD);IER.] ! PK15: EXEC(9,D.,$XEQT,($NXTR-<6)+$DCB,DIS,$DCB8,7) DO[AREG_$0;BREG_$1;IF AREG THEN GOTO PK15] DO[.E.R._$BREG;IER.] !CHECK ERRORS PK26: LOCK.(DIS,5) !UNLOCK DISC EXEC(5,-1) !RETURN TRACKS NXDIS:I.BUF_0 !CLEAR I.BUF INCASE WE EXIT IFNOT PACK THEN [LUPT_LUPT+4;GOTO AGAIN] RETURN END ! ! SETAD SETS THE ADDRESSES FOR THE NEXT FILES ENTRY ! IN PK.DR - IF NONE THEN AN FRETURN IS MADE. ! SETAD:SUBROUTINE FEXIT ! IF FILCO=128 THEN FRETURN PKD9_[PKD8_[PKD6_[PKD5_[PKD4_[PKD3_[PKD_\ PAKAD+FILCO]+3]+1]+1]+1]\ +2]+1 FILCO_FILCO+16 RETURN END ! ! BADTR RETURNS FALSE IF THE CURRENT FILE ! AREA CONTAINS A BAD TRACK. ! BADTR:SUBROUTINE(TGRAK,SECT,NOSEC)FEXIT NTR_((SECT+NOSEC)->1)/($DCB8->1)+TRAK !COMPUTE (ROTATE TO AVOID NSEC_$B+$B !NEXT TRACK & SECTOR (32K SECTORS SIGN PROB.) ! CHECK EACH TRACK AGAINST THE BAD LIST. FOR T_TRAK TO[IF NSEC THEN 0,ELSE -1]\ + NTR DO[\ FOR BT_@BTL TO @BTL+5 DO[ \ IF $BT THEN[IF T=$BT THEN FRETURN]]] RETURN END ! ! TRAK. CHECKS FOR ID SEGMENTS THAT REFERENCE ! FILE MANAGEMENT TRACKS. IF ANY ARE FOUND, THE ! NAME OF THE PROGRAM IS PRINTED, ! AND AN FEXIT IS TAKEN. ! TRAK.:SUBROUTINE(LOGUN) FEXIT LU3_LOGUN AND 1 DO[NSEC,FILCO_0;NTR_($PKD4-<7)] SETAD T_$KEYWD NEXT: DMAN_[NAM3_[NAM2_[NAM1_$T+12]+1]+1]+12 IF $NAM3 AND 20K THEN DMAN_NAM3+5 IF [T2_$NAM3 AND 7]=1 THEN GOTO OK IF T2=4 THEN GOTO OK IF (($DMAN-<1)AND 1)#LU3 THEN GOTO OK IF ($DMAN AND 77600K)20000K THEN GO TO ILLU IF $LIS5<1 THEN GO TO ILLU OPEN. (O.BUF,$LIS5,N.OPL,0) !SET DEFAULT EOF CLOS. (O.BUF) !*780414*CLEAN UP LOCK IFNOT $LIS9 THEN GO TO MISPM ! SET R/W CODE IF $LIS9 = RE THEN RW_100000K IF $LIS9 = WR THEN RW_1 IF $LIS9 = BO THEN RW_100001K IFNOT RW THEN GO TO ILLPM ! SET SPACING CODE IFNOT $LIS13 THEN GO TO EOFCD IF $LIS13= BS THEN SP_100000K IF $LIS13 = FS THEN SP_1 IF $LIS13=BO THEN SP_100001K IFNOT SP THEN GOTO ILLPM !BAD SP COMMAND ! SET EOF CODE (DEFAULT -FMGR DEFAULT) ! EOFCD:IF $LIS17=EOF THEN EF_100K IF $LIS17=PA THEN EF_1100K IF $LIS17=LE THEN EF_1000K IF $LIS16<3 THEN EF_($LIS17 AND 37K)-<6 IFNOT $LIS16 THEN EF_$DCB4 IFNOT EF THEN GO TO ILLPM ! ! SET SUB FUNCTION (DEFAULT 00=ASCII ! IFNOT $LIS20 THEN GO TO SETUP IF $LIS20<3 THEN LUC_($LIS21 AND 37K)-<6 IF $LIS21 = BI THEN LUC_100K IF $LIS21=AS THEN GO TO SETUP IFNOT LUC THEN GO TO ILLPM !IF GIVEN AND NOT SET ERROR ! SETUP: LUC_ LUC+[T_($ LIS5 AND 77K)] EF_EF OR T NAM.. ($LIS1) IF .A. THEN GO TO ILNAM LOCK.(-2,3)?[RETURN] ! LOCK THE DISC T1_@NAM FOR T_LIS1 TO LIS1+2 DO [$T1_$T;T1_T1+1] SC(1)_N.OPL !SET THE SECURITY CODE ! SETAD $DCB8_$SECT2 IF $SECT3 THEN [IF $SECT3<$SECT2 THEN $DCB8_$SECT3] $DCB5_ -$PKD8*$PKD6+2 NTR_$DCB5/$DCB8 IF .B. THEN NTR_NTR+1 ! EXEC (4,NTR,$DCB3,$DCB,$DCB8) !GET A TRACK ! EXEC (2,$DCB, NAM,128,$DCB3,0) ! WRITE DIRENT ! SCHD: EXEC (23,D.,$XEQT,($DCB3 -<6)+$DCB,-2,0,1)!ENTER ! ! IF [BREG_$.B.]< 0 THEN GO TO EX ! DO[$DCB7_100200K;$DCB4,$DCB15,$DCB13_0;$DCB9_$XEQT] $DCB6_16 !COMPLET DCB $DCB2_2 ! FAKE OUT RWNDF (O.BUF,.E.R.) ! SET UP TO WRITE IER. ! CHECK ERRORS ! SPLC_SP !SET SPACE CODE WRITF(O.BUF,.E.R.,$PKD) ! WRITE DISC WRITF (O.BUF,.E.R., NAM) ! WRITE FILENM SETA: SETAD ! GET NEXT ENTRY IF $PKD = NAM THEN [IF $ PKD1= NAM1\ THEN [IF $PKD2 = NAM2(1) THEN \ GO TO FILL]] WRITF (O.BUF,.E.R., $PKD) IER. IF $PKD THEN GO TO SETA FILL: FOR T_PKD TO PKD15 DO $T_0 UNTIL .E.R.= -12 DO[IER.;WRITF (O.BUF,.E.R.,\ $PKD)] CR1: EXEC (23,D.,$XEQT, ($DCB3-<6)+$DCB,-2,$DCB8,7) BREG_$.B. EX: IF BREG < 0 THEN ER _ BREG LOCK.(-2,5) EXEC (5,-1) RETURN ! ILLU: DO[ ER_ 20 ; RETURN] MISPM:DO[ ER_ 55 ; RETURN] ILLPM:DO[ ER_ 56 ; RETURN] ILNAM:DO[ ER_-15 ; RETURN] ! END SETAD:SUBROUTINE ! TO SET PACK ADDRESSES ! IF NEW BLOCK - THEN SET UP. IF ADD=128 THEN[DR.RD(1,-2,BLK);BLK_BLK+1;\ ADD_0] ! PKD15_[PKD8_[PKD6_[PKD2_[PKD1_[PKD_@PK.DR+ADD]+\ 1]+1]+4]+2]+7 ! SET ADDRESSES ! ADD_ADD+16 ! STEP ADDRESS FOR NEXT TIME RETURN ! DONE END END END$ SPL,L,O ! NAME: CN.. ! SOURCE: 92002-18008 ! RELOTRNC: 92002-16008 ! PGMR: G.A.A. ! DATE: 741118 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME CN..(8) ! THE CN ROUTINE ALLOWS THE OPERATOR TO ! CHANGE FILE NAMES. ! ! COMMAND: ! ! CN,NAMR,NEWNAME ! ! WHERE NAMR IS THE FILES NAME REFERENCE ! INCLUDING SECURITY CODE AND ! CARTRIDGE ID IF APPROPIATE ! ! NEWNAME IS THE NEW FILE NAME ! ! ! DEFINE EXTERNAL ! LET .E.R.,I.BUF,N.OPL BE INTEGER,EXTERNAL LET NAMF,IER.,CLOS. BE SUBROUTINE,EXTERNAL CN..: SUBROUTINE (N,LI,E) GLOBAL L5_[L1_@LI+1]+4 CLOS.(I.BUF) NAMF(I.BUF,.E.R.,$L1,$L5,N.OPL,$(@N.OPL+1)) IER. RETURN END END END$ TSPL,L,O ! NAME: .PARS ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A.,A.M.G ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME .PARS (8) "92002-16008 760525 " ! ! THE PARSE SUBROUTINE AND ITS ROUTINES SCAN AN ASCII ! STRING AND PRODUCES: ! ! A. AN ACTION ROUTINE ADDRESS (CAD.) ! B. A PARAMETER COUNT (NOCM.) ! C. A PARAMETER LIST WITH 4 WORDS FOR EACH PARAMETER: (P.RAM) ! ! 1. TYPE ! (A.) 0 - NULL ! (B.) 1 - NUMBER ! (C.) 1 - SIGNED OR OCTAL NUMBER ! (D.) 3 - ASC STRING ! ! 2. FOR TYPE 1 THE VALUE, ! ELSE FOR TYPE 3 THE FIRST TWO CHARACTERS. ! ! 3. FOR TYPE 3 CHARACTERS 3 AND 4. ! ! 4. FOR TYPE 3 CHARACTERS 5 AND 6. ! ! D. A 10 WORD OPTION LIST AT N.OPL ! OPTIONS MAY APPEAR ON THE FIRST TWO PARAMETERS ! OPTIONS ARE SEPERATED FROM EACH OTHER AND FROM ! THE PARAMETER ITSELF BY COLONS. ! EACH OPTION IS STORED IN N.OPL STARTING AT ! WORD ZERO FOR PRAMETER ONE AND WORD 5 FOR PARAMETER TWO ! THERE MAY BE ONLY FIVE PARAMETERS PER PARAMETER ! THE FIRST TWO PARAMETERS MAY BE ASCII,THE REST ! MUST BE NUMERIC. ! THE INPUT STRING IS TO BE DELIMITED BY COMMAS. ! BLANKS ARE IGNORED UNLESS THEY ARE WITHIN ASCII STRINGS. ! THE FIRST CHARACTER MUST BE ":" IF INPUT IS NOT FROM A TTY. ! ! ! LET TTY., \INTERACTIVE INPUT FLAG N.OPL,q \NAMER SUBPARAMETER LIST .E.R., \ADDRESS LESS 1 OF SV CODE P.RAM, \PARAMETER LIST ARRAY NOCM., \NUMBER OF PARAMETERS FOUND G0.., \GLOBAL ARRAY CAD., \COMMAND FOUND (ADDRESS OR INDEX IF IN SEGMENT) ECH., \INPUT COMMAND LENGTH(WORDS) RESET FOR EC.HO C.DLM, \CHARACTER ADDRESS OF FIRST DELIMITER AFTER COMMAND C.TAB, \COMMAND TABLE (SIGN SET ON COMMAND INDICATES SPECIAL) CUSE., \CURRENT SEGMENT SUFFIX CHARACTER C.BUF, \COMMAND BUFFER O.BUF, \OUTPUT DCB, USED AS A WORKING BUFFER SCR. \CHARACTERS 3 AND 4 OF COMMAND (OR 0 IF NONE) BE INTEGER,EXTERNAL LET FM.ER, \PRINT ERROR MESSAGE ROUTINE EC.HO, \ECHO THE COMMAND ROUTINE CNUMD, \NUMBER TO ASCII CONVERSION ROUTINE MSS. \ERROR MESSAGE ROUTINE BE SUBROUTINE,EXTERNAL LET IN.ER BE SUBROUTINE LET COLON BE CONSTANT(72K ) LET BLANK BE CONSTANT(40K ) LET COMMA BE CONSTANT (54K ) LET CHAR0 BE CONSTANT(60K ) LET PSIGN BE CONSTANT(53K) LET MSIGN BE CONSTANT(55K) LET QUES BE CONSTANT( 77K) ! ! ! GETCR: FUNCTION DIRECT .B._PTR !CHARACTER ADDRESS TO B. ASSEMBLE["CLE,ERB"; \CORE ADDRESS TO B,E=U/L 0/1 "LDA 1,I"; \GET THE WORD "ELB"; \ADDRESS BACK TO B "SLB,INB,RSS"; \STEP THE ADDRESS SKIP IF LOW CHAR "ALF,ALF" ] !ROTATE TO LOW IF NEEDED PTR_.B. !RESTORE B TO POINTER .A.,CHAR_.A. AND 377K !ISOLATE THE CHARACTER AND SAVE RETURN .A. !DONE GET OUT END ! PUTCR: FUNCTION DIRECT IF [.B._BUFPT]=LIMIT THEN GO TO EXITF !EXIT IF NO ROOM .A._CHAR h !CHAR TO A FOR ASSMBLY ASSEMBLE["CLE,ERB"; \WORD ADD TO B, U/L FLAG TO E "XOR 1,I"; \KEEP OLD HIGH CHAR "AND LOWM"; \IN CASE THIS IS LOW "XOR 1,I"; \NEW CHAR IN LOW A OLD IN HIGH "SEZ,RSS"; \IF UPPER "ALF,ALF"; \ROTATE "STA 1,I"; \STASH IT AWAY "ISZ BUFPT" ] !PUSH BUFFER POINTER BACK TO SPL IF CHAR=BLANK THEN[ \IF FIRST BLANK AFTER IFNOT BF THEN BUFPT_BUFPT-1; \BF SET TO ZERO RETURN 1], \RETURN TRUE FOR ALL BLANKS ELSE [ \NOT A BLANK BF,BFEND_BUFPT; \KEEP TRACK OF HIGHEST NON BLANK RETURN 0 \AND RETURN ZERO ] END ! GETCR.EQ.DELIM:FUNCTION DIRECT ! IF PTR=EOL THEN[ \IF END OF LINE STOPF,CHAR_1; \SET STOP FLAG AND GO TO DELT \EXIT TRUE ] IF GETCR=COLON THEN GO TO DELT !ELSE GET CHAR AND IF CHAR =COMMA THEN GO TO DELT !IF ":" OR "," EXIT TRUE RETURN 0 !EXIT FALSE NOT A DELIMITER ! DELT: RETURN 1 !EXIT TRUE A DELIMITER END ! DIGT: FUNCTION DIRECT IF [CRAC_CHAR-CHAR0] >= 0 THEN[ \IF GREATER THAN "0" IF CRAC < BASE THEN [ \AND LESS THAN BASE ACCUMULATE VAL_VAL*BASE+CRAC; \T NUMBER SET THE FLAG AND T_1; \ RETURN T \RETURN TRUE ] \ ] RETURN 0 !ELSE RETURN FALSE END ! ! PARSE ROUTINE BEGINS HERE. ! .PARS:SUBROUTINE GLOBAL,FEXIT ! ! THE FOLLOWING IS PASS 1 OF A 2-PASS PARSE. THE PROMPT ! CHARACTER, IF PRESENT, IS REMOVED, GLOBALS ARE TRANSLATED AND ! BLANKS BEFORE AND AFTER DELIMITERS ARE REMOVED. ! BASE_10 LOWM_377K !ESTABLISH CONSTANT FOR PUTCH ACM,STOPF _ 0 !ZERO EOL FLAG AND COMMAND FLAG EF,PTR,CBUFC _[CBUFA_@C.BUF]-<1 !SET CHARACTER ADDRESSES EOL_CBUFC+ECH.+ECH. !END OF LINE FLAG BUFPT,CRONE_[C.DLM_@O.BUF]-<1 !OUT LINE CHAR ADDRESSES LIMIT_CRONE+80 !AND LIMIT ! IFNOT ECH. THEN GO TO START !IF EMPTY LINE GO TO PASS TWO IFNOT TTY. THEN[ \IF NOT INTERACTIVE IF GETCR # COLON THEN GO TO EXITF] !MUST HAVE LEAD ":" INGL: SIGN _ 1; OBUFS,BFEND_BUFPT !SET UP FOR VAL,T,BF_0 !SET BLANK STRIP FLAG PRAMS: IF GETCR.EQ.DELIM THEN GO TO ENDP !LOOP TILL DELIMITER ! IF PUTCR THEN GO TO PRAMS !PASS BLANKS IF CHAR = MSIGN THEN GO TO NGLBL !LOOK FOR NUMERICS IF CHAR = PSIGN THEN GOTO GLBL !GLOBAL PARAMETERS. IF DIGT THEN GOTO GLBL !FOUND A DIGIT. ! ! SCAN TO NEXT DELIMITER IT IS NOT A GLOBAL ! TOEND:UNTIL GETCR.EQ.DELIM DO PUTCR !PASS TILL NEXT PRAM ! ENDP: BUFPT_BFEND !STRIP TRAILING BLANKS IF STOPF THEN GO TO START !IF EOL THEN GO TO PASS 2 PUTCR !ELSE PASS THE DELIMITER GO TO INGL !ELSE GET NEXT PRAM ! ! SIGN PART OF NUMBER DETECTED MIGHT BE GLOBAL ! NGLBL:SIGN_ -1 !IT WAS A "-" SO SET FLAG GLBL: IF GETCR.EQ.DELIM THEN GO TO ENDP !NOT GLOBAL IF DELIMITER IF PUTCR THEN GO TO GLBL !JUST PASS BLANKS IF DIGT THEN GO TO GLBL !KEEP A TOTAL OF IF CHAR = "G" THEN [  \LOOK FOR GLOBAL GV _ 0; \DESIGNATORS. SETSZ: SZ _ 4; GOTO REPL] IF CHAR = "S" THEN [ \ GV _ -8; GOTO SETSZ] IF CHAR = "P" THEN [ \ GV _ 40; SZ _ 1; \ GOTO REPL] GOTO TOEND !NOT DIGIT OR "S","G","P" ! REPL: IFNOT T THEN GOTO TOEND !CHECK IF WE HAVE UNTIL GETCR.EQ.DELIM DO[ \PASS ANY TRAILING BLANKS IFNOT PUTCR THEN GO TO TOEND] !IF OTHER THEN NOT GLOBAL ! ! HONEST TO GOODIE GLOBAL BUT IS IT IN RANGE?? ! CBUFS_PTR-1 !SAVE IN ADD (REREAD DELIMITER) ADD _ VAL * SIGN * SZ + GV !A REAL GLOBAL. IF ADD < -8 THEN GO TO EXITF !CHECK BOUNDS. IF ADD > 47 THEN GO TO EXITF ADD _ ADD + @G0.. !GET TABLE OFFSET. BUFPT,BFEND_OBUFS !SET OUTBUF BACK ! ! EVALUATE GLOBAL ! IF SZ # 1 THEN [SZ _ $ADD;ADD_ADD+1] !IF NOT "P" SET SIZE IF SZ = 1 THEN[ \IF NUMERIC GLOBAL VAL_$ADD; \CONVERT THE NUMBER IF VAL < 0 THEN[ \IF NEGATIVE MUST SET VAL_ -VAL;CHAR_MSIGN; \POSITIVE AND SEND A "-" PUTCR \ SEND THE "-" ];\ CALL CNUMD(VAL,P.RAM); \CONVERT THE NUMBER ADD_ @P.RAM \SET RESULT ADDRESS ] IF SZ THEN[ \IF THEIR IS A PARAMETER PTR_ADD-< 1;BF,EF_0; \SET TO MOVE IT IN REPEAT 6 TIMES DO [ \ GETCR;PUTCR \MOVE A CHARACTER ] \ ] EF,PTR_CBUFS;GETCR !RESET SOURCE POINTER CHAR GO TO ENDP !GO PROCESS THE DELIMITER ! ! v< THE SECOND PASS. ! ! INITIALIZE SCAN ! START:BF,CHAR_BLANK !PAD LINE IN CASE ODD CHARS EOL_BUFPT-CRONE+CBUFC !SET EOL FLAG FOR PASS 2. PUTCR !SEND FINAL CHAR. ECH._(BUFPT-CRONE) >- 1 !SET LINE LENGTH IN WORDS. ASSEMBLE["LDA C.DLM"; \SET UP FOR .MVW "LDB CBUFA"; \ "EXT .MVW" ; \ "JSB .MVW"; \MOVE THE BUFFER BACK "DEF ECH."; \ "NOP" ] PTR_CBUFC !SET FOR INPUT IFNOT $(@.E.R.+1) THEN [ \ECHO IF REQUIRED IF C.BUF # "SV" THEN EC.HO \LET SV ECHO ITS OWN ] CAD._@IN.ER STOPF,C.DLM_0 FOR T_ @N.OPL TO @NOCM. DO $T_0 !ZERO THE OPTION LIST LIMIT_([PRAM_@P.RAM]+64) -< 1 !SET PUTCR LIMIT GO TO SCANS !GO START THE SCAN ! GETCH:UNTIL GETCR.EQ.DELIM DO[ PUTCR;GV_CHAR]!MOVE CHARACTERS UNTIL DELIM ! ! A DELIMITER 0 OR COMMA OR COLON - ENCOUNTERED ! VAL,T_0 ! SET UP FOR NUMERIC CONVERSION IF C.DLM THEN GO TO PRMST !IF WE HAVE A COMMAND GO TO PRAM ADD_@C.TAB !MUST BE THE COMMAND SO C.DLM_PTR !SAVE FIRST DELIMITER ADDRESS SCR. _ $PLOC1 ! SAVE CHARS 3,4 ALWAYS DO[ \AND LOOK IT UP IN IF ($ADD AND 77777K)=$PLOC THEN[ \ ACM_$ADD;CAD._$(ADD+1);GO TO RPLOC],\ ELSE [ADD_ADD+2; \FIND THE PROCESSOR IN TABLE IFNOT $ADD THEN GOTO EXITF \ ] \ ] ! ! NOT FIRST SO SET UP THE PARAMETER ! PRMST:CBUFS_PTR-1;POS_BUFPT !SAVE DELIMITER ADDRESS, END ADD IF BUFPT=CUPAD THEN GOTO NULLS !NULL SO ZERO IT d! ! ATTEMPT NUMERIC CONVERSION ! IF GV = "B" THEN[ \IF OCTAL SET UP BASE_8;POS_POS-1], \BASE AND END OF STRING ELSE \OTHER WISE USE BASE_10 !BASE 10 ! PTR_CUPAD;SIGN_1 !SET FOR LOOP ! ! CONVERSION LOOP ! UNTIL PTR=POS DO THRU CLOOP IF GETCR= BLANK THEN GOTO CLOOP !IGNOR IMBEDED BLANKS IFNOT DIGT THEN [ \IF NOT DIGIT IF PTR=SZ THEN[ \IF FIRST CHAR TEST IF CHAR=MSIGN THEN[SIGN_-SIGN;GO TO CLOOP];\ IF CHAR=PSIGN THEN GO TO CLOOP \ ]; \ GO TO NOTNO \NOT DIGIT OR LEGAL SIGN ] CLOOP: !END OF CONVERSION LOOP ! ! SET TYPE AND NO. IN THE LIST ! IFNOT [$PLOC0_T] THEN GOTO NOTNO !IF NO DIGITS-NOT A NUMBER NULLS:$PLOC_VAL*SIGN !SET THE VALUE IN THE LIST $[REAL]PLOC1_0.0 !ZERO THE EXTRA WORDS ! ! SET UP FOR THE NEXT PARAMETER ! NXPRM:PTR_CBUFS;GETCR !GET THE DELIMITER IFNOT SBSCN THEN GO TO NOTSU !SKIP IF NOT SUB SCAN IF [SUBCO_SUBCO+1]<3 THEN GOTO STPM !SKIP ASC TEST IF FIRST TWO IF $PLOC0=3 THEN GO TO EXITF !SUB PRAMETERS ELSE ASC ERROR STPM: IF NOCM.< 3 THEN$(SBSCN+SUBCO)_$PLOC !SET THE SUB PRAM IN THE OP LIST ! IF CHAR=COLON THEN[IF SUBCO=5 THEN GOTO EXITF ,\ TOO MANY ELSE GO TO RPLOC] !GO GET NEXT SUB PRAM ! SCANS:SUBCO,SBSCN_0 !ZERO THE SUB SCAN FLAGS ! SCANC:PLOC1_[PLOC_[PLOC0_PRAM+4*NOCM.]+1]+1 !SET THE CURRENT ADDRESSES ! RPLOC:SZ_[CUPAD,BUFPT_PLOC -< 1]+1 !SET ADDRESSES FOR PUTCR IF CUPAD>LIMIT THEN GO TO EXITF !TOO MANY PRAMS? $PLOC0,$PLOC,$PLOC1_0 !SET LIST LOCATIONS TO ZERO IF STOPF THEN GO TO EXIT !IF FINAL DELIMITER EXIT GO TO GETCH !ELSE GET NEXT PRAM ! ! PARAMETER END NOT SUB PRAM ! NOTSU: IF CHAR = COLON THEN [ \CHECK FOR ILLEGAL IF NOCM. > 1 THEN [ \DELIMITER, BUT LET IF ACM > 0 THEN [ \IT GO THROUGH IN GOTO EXITF] \CASE OF SPECIAL ], \COMMANDS ONLY. ELSE SBSCN _ @TTY. + NOCM.*5] !SET UP SUB-SCAN. ! NOCM._NOCM.+1 !STEP COUNT GO TO SCANC !GO SCAN IT ! ! NOT A LEGAL NUMBER - TRY FOR A NAME ! NOTNO:$PLOC0_3 !ASSUME NAME AND SET UP CHAR_BLANK !SET UP TO BLANK FILL UNTIL BUFPT=>CUPAD+6 DO PUTCR !FILL IT GO TO NXPRM !ASSUME A NAME AND CONTINUE ! ! NORMAL EXIT ROUTINE CLEAR END OF LIST AND CHECK FOR SEG ! EXIT: CHAR_0 UNTIL BUFPT >= LIMIT DO PUTCR !ZAP THE LIST IF CAD.<0 THEN GO TO EXIT1 !IF LOCAL GO EXIT IF CAD.>10000K THEN GO TO EXIT1 !IF LOCAL GO TO EXIT. CHAR,CUSE._(CAD. AND 377K)-<8 ! CAD._((CAD. AND 17400K)-<8) !SET ROUTINE NUMBER IN CAD. EXIT1:.B._ACM !SET ASCII COMMAND IN B FOR MAIN IFNOT CHAR THEN RETURN,ELSE FRETURN ! EXITF:IF ACM<0 THEN GO TO EXIT !IF WE HAVE A SPECIAL THEN EXIT IFNOT EF THEN PTR_CBUFS !IF ERROR WHILE PTR WRONG RESET CAD._@IN.ER;CHAR_0;GO TO EXIT1 !ELSE ERROR EXIT END ! IN.ER:SUBROUTINE MSS.(10) !FOURCE ECHO AND PRINT ERROR BUFPT_PTR;CHAR_QUES;PUTCR !PLANT A "?" CHAR_BLANK;PUTCR !AND A BLANK PAD FM.ER(1,C.BUF ,(BUFPT-CBUFC)>-1) !WRITE IT OUT  RETURN END END END$ SPL,L,O ! NAME: REA.C ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME REA.C(8) "92002-16008 770823" ! READ A COMMAND SUBROUTINE ! LET MSS.,READF,EC.HO,WRITF BE SUBROUTINE,EXTERNAL LET .E.R.,CAM.I,TTY.,ECH.,C.BUF BE INTEGER,EXTERNAL ! REA.C:SUBROUTINE GLOBAL ! IF TTY THEN PROMPT READ1:IF TTY. THEN CALL WRITF(CAM.I,.E.R.,35137K,1) !WRITE ":" ! ! CALL READF(CAM.I,.E.R.,C.BUF,36,ECH.)!READ THE COMMAND ! IF .E.R. < 0 THEN[MSS.(.E.R.-2000);GOTO EY]!IF READ ERROR DO A TR IFNOT ECH. THEN GOTO READ1 EX: IF ECH. <0 THEN[ \IF EOF SET ZERO LENGTH EY: ECH._0] ! ! RETURN END ! END END$ SPL,L,O ! NAME: EE.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME EE..(8) "92002-16008 760512" EE..: SUBROUTINE GLOBAL LET FM.ER,CLOS.,EXEC BE SUBROUTINE,EXTERNAL LET CUSE.,CAD. BE INTEGER,EXTERNAL LET ACTV. BE INTEGER,EXTERNAL LET L.SEG,ABX.. BE LABEL,EXTERNAL IF ACTV. THEN GO TO ABX.. ENDMS_@CUSE.-5 FM.ER(0,$ENDMS,5) CLOS.($0) EXEC (5,-1) CAD. _ 0; CUSE. _ "77" !SET TO GET NEXT JOB GOTO L.SEG !GO LOAD SEGMENT. END END END$ SPL,L,O ! NAME: TR.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A., A.M.G ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME TR..(8) "92002-16008 REV.1826 780419" ! ! MODIFIED: 780413 TO USE TRANS FILE SECURITY CODES (GLM) ! ! LE GRAND TR ROUTINE ! LET OPEN., \FILE OPEN OR FAKE OPEN READF, \READ RECORD IER., \CHECK ERROR (IN FM.CM) EE.., \FMGR EXIT ROUTINE GLOBS \SET UP GLOBALS BE SUBROUTINE,EXTERNAL ! LET P.TR, \TRANSFER STACK POINTER CAMS., \TRANSFER STACK CAM.I, \COMMAND INPUT DCB .E.R., \ERROR CODE ACTV., \ACTIVE JOB POINTER N.OPL \SUB-PARAMETER STORAGE BE INTEGER,EXTERNAL ! LET FM.AB, \IN FMGR MAIN ABX.. \ BE LABEL,EXTERNAL ! TR..: SUBROUTINE(N,LIS,ERR)GLOBAL !TRANSFER SUBROUTINE DCB14_[DCB2_@CAM.I+2]+12 !ADDRESS OF RECORD COUNT, TYPE ! PLIST_[NMFI,NFA_@LIS+1]+3 !GET PARAMETER ADDRESSES. IFNOT $NFA THEN $NFA_$NFA-1 !MAKE UNIFORM BACK UP IF $NFA < 0 THEN [ \IF WE ARE GOING BACK*780413* BADFILE: RC_$([CR_[NFI_[PTR_P.TR+6*($NFA-1)]+1]+3]+2);\PULL GOODIES FROM IF N.OPL < 0 THEN RC_RC+N.OPL; \IF BACK SPACE REQUESTED IF RC < 0 THEN RC_0; \SET IT UP IF PTR+6 < ACTV. THEN GO TO ABX..; \IF TOO FAR ABORT JOB *780419* IF PTR < @CAMS. THEN EE..; \IF PASSED START GO EXIT RS_$[P.TR_PTR]], \LOOKS GOOD LETS BUY IT ELSE [ \GOING FORWARD RC_0; \SET POINTERS FOR RETURN CR,PTR_@N.OPL; \AND THE CALL IF P.TR-@CAMS. > 48 THEN [ \IF TOO DEEP *780413* ERR _ 13; RETURN] \TAKE GAS. ] !LOOKS GOOD , LETS DO IT CALL GLOBS(N-1,$PLIST,1) ? \SET UP GLOBALS. [ERR _ 48; RETURN] !ERROR IN GLOBAL SET. OPEN.(CAM.I,$NFI,$CR ,401K) !OPEN NEW INPUT FILE. IF .E.R.< 0 THEN[ \IF ERROR AND HERE THEN SV>3 N.OPL,$NFA_0;GO TO BADFILE] !MUST REOPEN ORGIONAL FILE $PTR_RS !RESET RECORD COUNT IF RC THEN [ \IF NEEDED. IF $DCB2 THEN[ \(MUST NOT BE TYPE ZERO) UNTIL $DCB14 = RC DO [ \READ AS MANY RECORDS READF(CAM.I,.E.R.,C.BUF,1); \AS NECESSARY FOR IER.]]] !POSITIONING. RETURN END ! END END$ SPL,L,O ! NAME: SA.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME SA..(8)"92002-16008 760621" ! THIS ROUTINE IS TO SAVE LS/LG ROUTINE FOR THE ! RTE FMGR PROGRAM. IT IS ENTERED BY ENTERING ! A COMMAND OF THE FORM: ! ! SA,LS/LG,NAMR !PRAM LOC 1 5 ! ! W H E R E: ! ! SA IS THE COMMAND NAME. ! ! LS/LG IS LS TO SAVE THE LS FILE, ! OR LG TO SAVE THE LOAD & GO FILE. ! ! NAMR IS TO BE THE NEW FILE'S NAME REFERENCE. ! ! ! THE FOLLOWING NAMR PARAMETERS ARE OPTIONAL: ! ! CR IS THE CARTRIDGE TO BE USED TO SAVE ! (ZERO IF NOT GIVEN). ! ! SC IS THE FILE'S SECURITY CODE ! (ZERO IF NOT GIVEN). ! ! TY IS THE FILE'S TYPE (4 FOR LS OR ! 5 FOR LG IF NOT GIVEN). ! ! SZ1 IS THE FILES SIZE ESTIMATE USED FOR LS FILES ONLY ! IF NOT GIVEN THE THE FILE IS ESTIMATED TO FILL ! LESS THAN HALF A TRACK. EXCESS THEN GENERATES AN EXTENT ! IF LESS THAN THE ESTIMATED SIZE IS USED THE ! EXCESS IS RETURNED TO THE SYSTEM ! ! CONSTANT DECLARATIONS ! LET A BE CONSTANT(0 ) LET B BE CONSTANT (1 ) LET XEQT BE CONSTANT (1717K) LET SECT2 BE CONSTANT (1757K) LET SECT3 BE CONSTANT (1760K) LET LGOTK BE CONSTANT (1765K) LET LGOC BE CONSTANT (1766K) LET LG BE CONSTANT (46107K) LET LS BE CONSTANT (46123K) ! ! DECLARE THE ERROR WORD LOCATION ! LET .E.R.,N.OPL BE INTEGER,EXTERNAL ! ! ARRAY DECLARATIONS ! LET O.BUF,I.BUF,BUF.,CUSE. BE INTEGER,EXTERNAL ! ! ! SUBROUTINE DECLARATIONS ! LET CREA.,OPEN.,IER.,\ D& WRITF,LOCF,CLOSE,\ READ.,READF,RWNDF,\ MSS.,EXEC,CK.SM BE SUBROUTINE,EXTERNAL ! LET LSRD,LGRD,READR,\ GET BE SUBROUTINE ! LET IFBRK BE FUNCTION,EXTERNAL LET LG.S BE FUNCTION SA..: SUBROUTINE(NCAM,PLIST,MSNO)GLOBAL LET NCAM,PLIST,MSNO BE INTEGER LIS5_[LIS1_@PLIST+1]+4 !SET LIST ADDRESSES SZ_[RS _[SC_@N.OPL+5]+2]+1 !SET OPTION LIST ADDRESSES ! IF NCAM<2 THEN[MSNO_50;RETURN] IF $LIS1=LG THEN GO TO SALG IF $LIS1#LS THEN [MSNO_56; RETURN] !NOT LS OR LG SO ABORT CUSE._0 !SHOW SEGMENT NOT IN CORE FOR NEXT TIME OPFL_101000K !SET PUNCH OPTION FLAG DO[T1_4;SIZE_$SECT2/4;RD_@LSRD]!SET UP DEFAULT SIZE SA02: IFNOT $SZ THEN $SZ_SIZE !SET DEFAULT SIZE IF NOT SUPPLIED IFNOT $RS THEN $RS _T1 !SET DEFAULT TYPE TYPE_$RS !SET TYPE FOR LATER CREA.(O.BUF,$LIS5,$SC)?[TYPE_0;\!CREAT THE FILE OPEN.(O.BUF,$LIS5,$SC,OPFL)]!OPEN IF NOT A FILE NAME FIRST_1 LOOP: CALL $RD !READ A RECORD IF IFBRK() THEN [MSS.(0);GO TO ABOR] L_IL IFNOT IL THEN[IFNOT TYPE THEN L_-1] WRITF(O.BUF,.E.R.,BUF.,L) !WRITE IT IF .E.R.= -6 THEN[MSS.(.E.R.);GOTO ABOR]!PURGE FILE IER. ! ANY ERRORS? IF IL=>0 THEN GO TO LOOP ! IF NOT EOF CONTINUE ! IFNOT TYPE THEN RETURN LOCF(O.BUF,.E.R.,T,RS) !GET CURRENT POSITION IER. TRUN: CLOSE(O.BUF,.E.R.,$SZ -RS-1)!CLOSE & TRUNCATE IER. EXIT: RETURN !DONE RETURN SALG: TY_0 !SET LOAD & GO FLAG T1_5 !SET DEFAULT TYPE OPFL_101100K !SET THE OPTION FLAG SIZE _(([T_LG.S() ?[MSNO_58;RETURN]]+3)>-1)+T/5 !SIZE ESTIMATE RD_@LGRD !SET THE READ ROUTINE ADDRESS GO TO SA02 !GO DO IT END LSRD: SUBROUTINE READ.(2,BUF.,70,IL) RETURN END ! LGRD: SUBROUTINE BUF1_[BUF_@BUF.]+1 IFNOT FIRST THEN GTRNOTO XFER IBUF4_[IBUF3_[IBUF2_[IBUF_@I.BUF]+2]+1]+1 IBU15 _[IBUF9_[IBUF8_[IBUF7_[IBUF6_[IBUF5_ \ SET UP BUFFER ADDRESSES IBUF4+1 ]+1]+1]+1]+1]+6 $IBUF_[IF $LGOTK<0 THEN 3,ELSE 2] $(IBUF2 )_2 $(IBUF3 )_($LGOTK AND 77600K)-<9 $IBUF4,$IBU15_0 $IBUF7_200K $(IBUF5)_([MXRC_LG.S()]+3) $IBUF6_64 $(IBUF8 )_[IF $IBUF=3 THEN $SECT3,ELSE $SECT2] $(IBUF9 )_$XEQT RWNDF(I.BUF,.E.R.) IER. DO[RC,FIRST,ENFLG_0;READR] XFER: IFNOT ENFLG THEN GOTO LGRD2 IF ENFLG=1 THEN[ENFLG_2;IL_0;RETURN] LGRD1:DO[ENFLG_0;IF ADD#@PLIST THEN READR;IL_-1;\ IF RC>MXRC THEN RETURN] LGRD2:GET(BUF.,1) IFNOT $BUF THEN GO TO LGRD1 GET ( $BUF1 ,[IL_$BUF-<8]-1) CK.SM(BUF.,1)?[GOTO ABORT] IF ( $BUF1 AND 160000K)=120000K THEN ENFLG_1 RETURN ABORT:MSS.(7) ABOR: IFNOT TYPE THEN GO TO EXIT ! IF TYPE ZERO THEN EXIT DO[$(@O.BUF+15)_0;RS_-1;GO TO TRUN] END ! ! GET: SUBROUTINE(DS,NO) ED_@DS+NO-1 FOR I_@DS TO ED DO THRU GET0 $I_$ADD ADD_ADD+1 GET0: IF ADD=ENADD THEN READR RETURN END ! READR:SUBROUTINE DO[READF(I.BUF,.E.R.,PLIST);IER.] ENADD_[ADD_@PLIST]+64 RC_RC+1 RETURN END ! LG.S: FUNCTION FEXIT LG.SV_((($LGOC AND 77600K)-($LGOTK AND 77600K))\ -<9)*[IF $LGOTK<0 THEN $SECT3,ELSE $SECT2]\ +($LGOC AND 177K) IF LG.SV THEN RETURN,ELSE FRETURN END END END$ nTSPL,L,O ! NAME: MR.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME MR..(8)"92002-16008 760621" ! ! ! ! THIS PORTION OF THE FILE MANAGER RESTORES ! A FILE TO THE SYSTEM LOAD AND GO AREA. ! ! ! THE COMMAND IS: ! ! LG,NAMR ! ! ! W H E R E: ! ! NAMR IS THE FILE NAME WHICH MAY CONTAIN THE: ! CR IS ITS CARTRIDGE ID (OPTIONAL). ! SC IS ITS SECURITY CODE (OPTIONAL). ! ! ! ARRAY DECLARATIONS: ! LET O.BUF,I.BUF,BUF.,N.OPL BE INTEGER,EXTERNAL ! ! DECLARE THE ERROR WORD LOCATION ! LET .E.R. BE INTEGER,EXTERNAL ! LET SECT2 BE CONSTANT (1757K) LET SECT3 BE CONSTANT (1760K) LET LGCO BE CONSTANT (1766K) LET LGOTK BE CONSTANT (1765K) ! LET LGMS,LGMS2 BE INTEGER INITIALIZE LGMS,LGMS2 TO "LG, " ! ! ! EXTERNAL SUBROUTINE DECLARATIONS: ! LET CK.SM,READF,OPEN.,\ CNUMD, \ MSS.,EXEC, \ IER. BE SUBROUTINE,EXTERNAL LET JER.,.DFER BE SUBROUTINE,EXTERNAL,DIRECT LET WRLG.,EFLG.,MESSS BE FUNCTION,EXTERNAL ! ! MR..: SUBROUTINE(NCAM,PLIST,MSNO)GLOBAL IFNOT NCAM THEN[MSNO_50;RETURN] OPEN.(I.BUF,$(@PLIST+1),N.OPL,301K) !NON-EXCLUSIVE OPEN IF $LGOTK AND 177K THEN GO TO LG0 !IF LG AREA DEFINED DO IT IFNOT [SZ_$SECT3] THEN SZ_$SECT2 !SET SIZE OF LG DISC FSZ_$([TYP_ @I.BUF+2]+3) !GET FILE DATA FROM DCB IFNOT $TYP THEN [SZ_4;GO TO ASLG] !IF TYPE 0 USE FOUR TRACKS SZ_FSZ/SZ +2 !ELSE 2 PLUS ESTIMATE (GENEROUS) ASLG: CALL .DFER(O.BUF,LGMS) !SET UP MESSAGE CALL CNUMD(SZ,$(@O.BUF+2)) !PUT IN THE NUMBER IF MESSS(O.BUF,10) THEN[ \IF NO LG TRACKS NOTR: MSNO_58;RETURN] !RETURN AN ERROR ! LG0: FLG_0 LG1: READF(I.BUF,.E.R.,BUF.,64,L) !READ A RECORD JER. IF L<1 THEN GOTO LG2 CK.SM(BUF.,1)?[MSNO_7;RETURN] FLG_1 IF WRLG.(BUF.,(BUF.-<8),O.BUF) THEN GO TO NOTR IFNOT($(@BUF.+1) AND 160000K) = 120000K THEN\ GOTO LG1, ELSE[FLG_0;\ IF EFLG.(L) THEN GO TO NOTR; \ GO TO LG1] ! LG2: IF FLG THEN[MSS.(2006);EXEC(7);GOTO LG1] IFNOT L THEN GO TO LG1 RETURN END END END$ SPL,L,O ! NAME: SE.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: A.M.G. ! DATE: 740927 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME SE..(8) ! ! LET G0.. BE INTEGER,EXTERNAL ! LET GLOBS BE SUBROUTINE ! LET PTR,PTR0,PTR1,PTR2 BE INTEGER ! ! SE..: SUBROUTINE(NUM,PLIST,ERR) GLOBAL LET NUM,PLIST,ERR BE INTEGER CALL GLOBS(NUM,PLIST,0) ? [ERR _ 48] RETURN END ! GLOBS: SUBROUTINE(NUMB,GLOBL,IND) GLOBAL,FEXIT LET GLOBL,NUMB,IND BE INTEGER LET G0.. BE INTEGER,EXTERNAL PTR,PTR2 _ @GLOBL IF NUMB > 9 THEN NUMB _ 9 !TOO MANY PARAMETERS? IF NUMB THEN GOTO GLOB2 !IF THERE ARE NONE IF IND THEN GOTO GLOB.2 !AND THIS IS A "SET" PTR1 _ @G0.. + 3 !THEN NULL ALL THE FOR I _ 1 TO 36 DO [ \GLOBALS. $[PTR1 _ PTR1 + 1] _ 0] RETURN GLOB2: PTR _ PTR + 2 !SET POINTERS. PTR1 _ [PTR0 _ @G0.. + 4] + 2 FOR I _ 1 TO NUMB DO [ \MOVE ALL NON-NULL IF $PTR2 = 0 THEN GOTO GLOB3; \PARAMETERS TO THE $[REAL]PTR0 _ $[REAL]PTR2; \GLOBALS IN THE MAIN. $[REAL]PTR1 _ $[REAL]PTR; \ GLOB3: PTR _ [PTR2 _ PTR2 + 4] + 2; \ PTR1 _ [PTR0 _ PTR0 + 4] + 2] RETURN END END END$ SPL,L,O ! NAME: IF.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: A.M.G. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME IF..(8) "92002-16008 760929" ! LET READF,POSNT,IER. BE SUBROUTINE,EXTERNAL LET C.BUF BE REAL,EXTERNAL LET CAM.I,NO.RD,TTY. BE INTEGER,EXTERNAL LET .E.R.,CAD. BE INTEGER,EXTERNAL ! LET ETAB BE CONSTANT (43K) LET LTAB BE CONSTANT (31K) LET GTAB BE CONSTANT (26K) LET FTR BE INTEGER (2) LET DIF,NCOM,P1,P2,MASK,RTABP,REL BE INTEGER LET RTAB BE INTEGER (7) INITIALIZE FTR TO "TR",0 INITIALIZE RTAB TO "LEGEGTLTNEEQ",0 ! ! IF..: SUBROUTINE(N,PLIST,ERR) GLOBAL LET N,PLIST,ERR BE INTEGER IF TTY. THEN [ERR _ 10; RETURN] !IF TTY, REJECT REQ. NCOM _ [P2 _ [REL _ [P1 _ \SET UP POINTERS. @PLIST - 1] + 6] + 2] + 6 FOR I _ 1 TO 4 DO [ 5 \COMPARE P1 AND P2. IF [DIF _ $[P1 _ P1 + 1] \ - $[P2 _ P2 + 1]] THEN \ GOTO COMP] COMP: DIF _ [IF DIF < 0 THEN \GET APPROPRIATE LTAB, ELSE [IF DIF THEN GTAB, \MASK WORD. ELSE ETAB]] RTABP _ @REL; MASK _ 1 CLOOP: IFNOT $[RTABP _ RTABP + 1] \MATCH RELATION THEN [ERR _ 56; RETURN] !USED IN COMMAND. IFNOT $RTABP = $REL THEN [ \ MASK _ MASK <- 1; GOTO CLOOP] IFNOT (MASK AND DIF) THEN RETURN IFNOT $NCOM THEN $NCOM _ 1 !DEFAULT SKIP CALL POSNT(CAM.I,.E.R.,$NCOM) !SKIP INDICATED IF .E.R.= -12 THEN [ \ IF $NCOM<0 THEN RETURN; \ N,$(@PLIST+1)_0; \ CAD.,NO.RD _ 1 ; \ RETURN ] IER. RETURN END END END$ SPL,L,O ! NAME: AB.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: A.M.G, G.A.A ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME AB..(8) "92002-16008 REV.1826 780420" ! ! MOD:TO CLOSE O.BUF BEFORE CALLING .PARS (O.BUF IS USED BY *780221 ! .PARS AS TEMPORARY STORAGE). *780221 ! ! TO WORK WITH SIX WORDS PER ENTRY IN TRANS STACK *780420 ! ! ! LET REA.C, \READS A COMMAND .PARS, \PARSE ROUTINE TR.., \LE GRAND TR ROUTINE IER., \ERROR CHECK ROUTINE OPEN., \OPEN FOR LIST FILE OPEN  CLOS., \CLOSE FOR LIST FILE CLOSE WRITF \FILE WRITE ROUTINE BE SUBROUTINE,EXTERNAL ! LET .DFER \THREE WORD TRANSFER BE SUBROUTINE,DIRECT,EXTERNAL ! LET L.SEG BE LABEL,EXTERNAL ! LET ABX.. BE LABEL,GLOBAL ! LET ACTV., \ACTIVE JOB SWITCH CUSE., \CURRENT SEGMENT LAST CHAR. O.BUF, \OUTPUT DCB NOCM., \NUMBER OF PRAMETERS IN COMMAND J.REC, \JOBFIL RECORD OF SPOOLED JOB CAD., \TABLE OFFSET FOR FUNCTION CALL TMP., \LIST FILE LOCATION P.TR, \COMMAND UNIT STACK POINTER J.NAM, \CURRENT JOB NAME C.BUF, \COMMAND INPUT BUFFER TTY., \INTERACTIVE DEVICE FLAG .E.R., \LOCATION OF SEVERITY CODE -1. ECH., \# OF CHARACTERS IN COMMAND NO.RD \NO-READ FLAG BE INTEGER,EXTERNAL ! LET ABJOB(3),JBNAM(7),ABRT(8),COM BE INTEGER ! INITIALIZE ABJOB,JBNAM TO " JOB XXXXXX ABORTED" INITIALIZE ABRT TO " ABEND OPERATOR " ! ! AB..: SUBROUTINE(N,PLIST,ERR) GLOBAL LET N,PLIST,ERR BE INTEGER IFNOT ACTV. THEN [ERR_10;RETURN] !INPUT ERROR IF NOT IN JOB .DFER(JBNAM,J.NAM) !PUT JOB NAME IN MESSAGE COM _ @ABRT; LN _ 8 !SET UP STANDARD MESSAGE. IF N= -1 THEN [ \IF INTERNAL CALL, SET COM _ @ABJOB; LN _ 10] !UP JOB ABORT MESSAGE. IF N= -2 THEN COM_@PLIST !IF MESSAGE PASSED SET UP CALL OPEN.(O.BUF,TMP.,$(@TMP.+3),0) !OPEN THE LIST FILE CALL WRITF(O.BUF,.E.R.,$COM,LN) !SEND THE OPERATOR ABORT CALL CLOS.(O.BUF) !CLOSE THE LIST FILE *780221 IF P.TR # ACTV. THEN [P.TR_ACTV.+6; \SET P.TR FOR TR *780420 N.OPL_0; \DONM'T CONFUSE THE ISSUE CALL TR..(1,0.0,ER)] !SET BACK TO THE JOB FILE IF TTY. THEN [ \IF TTY THEN EOJ: CAD._1;CUSE._"66";GO TO L.SEG] !GO LOAD EOJ IF J.REC > 0 THEN GO TO EOJ !IF JOB IS NOT $(@.E.R.+1)_1 !SET SV CODE TO KILL ECHO RDCOM: CALL REA.C !SPOOLED AND INPUT IFNOT ECH. THEN[ \IF EOF THEN GO TO EOJ ABX..: NOCM._ -2;GO TO EOJ] CALL .PARS !IS NOT FROM A COMCK: IF [COM _ $1] = "EO" THEN GO TO ABRET!EOF,THEN READ IF COM = "JO" THEN GOTO ABRET !COMMANDS UNTIL A GOTO RDCOM !JOB CARD IS FOUND. ! ABRET: NO.RD_ -1;RETURN END ! ! INTERNAL ABORT ROUTINE ! ABT..: SUBROUTINE GLOBAL IF ACTV. THEN CALL AB..(-1) !IF A JOB ACTIVE GO DO ABORT RETURN END END END$ SPL,L,O ! NAME: IN.IT ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME IN.IT(8) "92002-16008 780106" LET OPEN.,D.RIO,DR.RD, CLOS.,MSS.,\ EE.. BE SUBROUTINE,EXTERNAL LET .DFER BE SUBROUTINE,EXTERNAL,DIRECT LET TATPU,SETM3 BE SUBROUTINE LET TTY. BE INTEGER,EXTERNAL LET PK.DR,D.SDR BE INTEGER,EXTERNAL LET FM.AB BE LABEL,EXTERNAL LET GT.JB BE LABEL,EXTERNAL LET INI1. BE LABEL,EXTERNAL LET I.BUF,TMP.,.R.E.,.E.R.,G0..,NO.RD BE INTEGER,EXTERNAL  LET C.BUF,ECH. BE INTEGER,EXTERNAL LET CAM.I,CAM.O,D.LT BE INTEGER,EXTERNAL LET EXEC,IPUT BE SUBROUTINE,EXTERNAL LET FID. BE FUNCTION,EXTERNAL LET .OPSY BE FUNCTION,EXTERNAL,DIRECT !IDENTIFY OP-SYS LET .TTY BE FUNCTION,EXTERNAL LET FM.AB BE LABEL,EXTERNAL LET IFLG. BE INTEGER,EXTERNAL LET D. BE INTEGER,EXTERNAL LET GASP(3),WELCM(2),X16(3) BE INTEGER INITIALIZE GASP TO "GASP " INITIALIZE WELCM,X16 TO "WELCOM",1,6 LET RT BE CONSTANT(51124K) LET RNULL BE CONSTANT(51000K) LET A BE CONSTANT(0 ) LET B BE CONSTANT(1 ) LET READI BE CONSTANT(1 ) LET TAT BE CONSTANT(1656K) LET TATLG BE CONSTANT(1755K) LET TATSD BE CONSTANT(1756K) LET SECT3 BE CONSTANT(1760K) LET XEQT BE CONSTANT(1717K) LET WRIT BE CONSTANT(2 ) LET KEYWD BE CONSTANT(1657K) LET RTCOM BE CONSTANT(1747K) LET RTDRA BE CONSTANT(1750K) LET BGDRA BE CONSTANT(1754K) LET BPA1 BE CONSTANT(1742K) LET XPRIO BE CONSTANT(1726K) LET DSCUN BE CONSTANT(1764K) LET SYSTY BE CONSTANT(1 ) LET EQTA BE CONSTANT(1650K) IN.IT:SUBROUTINE GLOBAL P3 _ [P2 _ [T1,T_@TMP.] + 1] + 1 IF IFLG. THEN GO TO INITL !MID LOOP JUMP ! ! SAVE THE PARAMETERS ! ADD_$XEQT+1 ! SET PARAMETER ADDRESS REPEAT 5 TIMES DO[$T_$ADD;T_T+1;ADD_ADD+1] $(@.E.R.+1),$(@.R.E.+1)_[IF [T_$(P3+1)]>4 THEN 4,ELSE T] CAM.O_401K !SET OUT PUT LU FOR ERRORS $(T1+8)_0 INITL:PKDR_@PK.DR ! ! IS THE DIRECTORY TRACK ASSIGNED TO D.RTR? a ! Y_$KEYWD !SET UP TO SEARCH THE ID SEGS NEXT: D.RTR_$Y !SET CURRENT ADDRESS IF $(D.RTR+12)=D. THEN[\ !CHECK FOR D.RTR IF $(D.RTR+13)=RT THEN[\ IF($(D.RTR+14) AND 177400K)=RNULL\ THEN GO TO FOUND ]] IF $[Y_Y+1] THEN GO TO NEXT ! CHECK FOR NEXT ID SEG IF $TATLG= -1 THEN IPUT(TATLG,TMP.) MSS.(2008) ! D.RTR NOT FOUND GIVE UP GO TO EXITA !TERMINATE ! FOUND:IF $($TAT+$TATSD-1)=D.RTR\ !TRACK ASSIGNED TO D.RTR?? THEN GO TO PLIST !YES GO TO PLIST ! ! FIRST ENTRY AFTER DISC LOAD SO ASSIGN ALL TRACKS TO ME ! T_$TAT-[IF $TATLG= -1 THEN $@TMP.,ELSE $TATLG]-1 ! FOR ADD_$TAT TO T DO[IFNOT $ADD THEN\ ASSIGN IPUT(ADD,$XEQT)] !ALL UNASSIGNED TRACKS ! ALL TRACKS ASSIGNED SO IF TATLG IS -1 ! RESET IT ! IF $TATLG= -1 THEN IPUT(TATLG,TMP.) IFNOT $$XPRIO THEN CALL IPUT($XPRIO,$P2) !RESET PRIORITY ! ! READ THE DISC DIRECTORY ! D.RIO(READI) OPEN.(CAM.I,SYSTY,0.0,410K) !OPEN TO SYSTY ! ! FORM THE KEY SUM ! ! ! NOTE:RTE-IV KEY SUM=(1650B TO 1657B)+(1742B TO 1747B)+(1755B TO 1764B) ! :RTE-II & III KEY SUM= ABOVE LOCATIONS + (1750B TO 1754B) ! ! KSUM_0 FOR ADD_EQTA TO KEYWD DO[KSUM_KSUM+$ADD] FOR ADD_BPA1 TO RTCOM DO[KSUM_KSUM+$ADD] !780106 GLM FOR ADD_TATLG TO DSCUN DO[KSUM_KSUM+$ADD] !780106 GLM ! !780106 GLM ! !780106 GLM ! !780106 GLM ! THE FOLLOWING WORK IS REQUIRED TO SUPPORT !780106 GLM ! RTE-II & III. !780106 GLM ! !780106 GLM IF .OPSY # -9 THEN [\ FOR ADD_RTDRA TO BGDRA DO[KSUM_KSUM+$ADD]] !781006 GLM ! MS003_[GENWD_@D.SDR+125]+2 IF IFLG. THEN GO TO INCH !IF MID OPERATION GO CHLECK ! ! WAS A SYSTEM SET UP ON THIS DISC? ! IF KSUM=$GENWD THEN GO TO TATUP !INITIALIZED GO SET UP ! ! NO-FIRST ENTRY- ! SET INITIALIZATION FLAGS ETC. ! INIT0:IFLG._2 !SET UP FOR LU 2 ! ! INIT1:GO TO INI1. ! GO TO MAIN TO CONTINUE ! INCH: IF IFLG.=2 THEN[IF $TATLG+$TATSD THEN SETM3] ! ! INITIALIZED - SET UP THE DISC DIRECTORY ! D.RIO(READI) ! READ THE DISC DIRECTORY $GENWD_KSUM ! SET THE KEYSUM D.RIO(WRIT) ! WRITE IT OUT AGAIN ! ! SET UP THE TRACK ASSIGNMENT TABLE ! ! ! SET UP THE TAT USING THE DISC DIRECTORIES TO ! FIND WHICH TRACKS ARE TO BE ASSIGNED ! TATUP:DO[LU_-2;I_0]!LU2 FIRST TATU1:IF FID.(LU)THEN [IF LU= -2 THEN GO TO INIT0,ELSE GO TO EXITB] IF $SECT3 THEN SETM3 !IF LU3, SEND 003 MESSAGE ADD_[T_$( PKDR +4)]+$TAT+I !SET TAT ADDRESS REPEAT $( PKDR +7)-T TIMES DO \SET TAT TATPU(77776K) !FMP TRACKS REPEAT -$( PKDR +8) TIMES DO \SET TAT TATPU( D.RTR) !DIRECTORY TRACKS ! IF LU= -2 THEN [LU_-3;I_$TATSD;GOTO TATU1] ! ! TAT IS SET UP - RELEASE ALL UNUSED TRACKS ! EXITB:CALL EXEC(5,-1) CALL EXEC(100027K,GASP,-1) GO TO GOGO GOGO: .DFER($P3,X16) !SET UP PRAMS FOR AUTO ON .DFER(TMP.,WELCM) !AND LET IT FALL THROUGH IFLG._0 !IFLG. HAS DONE ITS JOB ! ! PLIST: IFNOT TMP. THEN TMP. _ 1 !DEFAULT INPUT DEVICE. IF TMP. < 0 THEN [ \CHECK IF SCHEDULED TMP._6; \FROM BEM. CAM.O _ SYSTY; GO TO GT.JB] G01._@G0..+1 IF TMP. > 20000K THEN [ \FILE NAME GIVEN. IFNOT $P2 THEN $P2 _ " "; \REPLACE 0'S W/BLANKS. IFNOT $P3 THEN $P3 _ " "; \REPLACE 0'S W/BLANKS. CAM.O _ SYSTY; TTY. _ 0; \ B<:6 G0.._3;.DFER($G01.,TMP.); \SET GLOBAL 0G T _ $(T1+4); GOTO PLIS1] G0.._1;$G01._TMP. !SET UP 0G IFNOT [CAM.O _ $P2 ] THEN \ CAM.O _ [IF [TTY. _ .TTY(TMP.)] \ THEN TMP., ELSE SYSTY] T _ $P3 PLIS1: .DFER(I.BUF,TMP.) !SAVE INPUT DEVICE. TMP. _ T IFNOT TMP. THEN TMP. _ 6 OPEN.(CAM.I,I.BUF,0.0,401K) !OPEN INPUT DEVICE. ! CALL EXEC(14,1,C.BUF,40) !IF FILE CHECK FOR PASSED ECH._.B. !STRING IF ECH. THEN [ \IF A STRING AND IF (C.BUF AND 177400K)=35000K THEN[ \IT STARTS WITH A ':' C.BUF_C.BUF+[NO.RD_-15000K]]] !CLEAR THE ':' FOR GO TO FM.AB ! EXITA: CALL EXEC(5,-1) !ERROR EXIT COULD NOT INITIALIZE CALL EXEC(6) !JUST DIE QUICKLY. ! END ! TATPU:SUBROUTINE(ID) IF $ADD#ID THEN[IF $ADD#$XEQT THEN MSS.(1005,ADD-$TAT)\ , ELSE IPUT(ADD,ID)] ADD_ADD+1 !SEND ERROR MESSAGE RETURN END ! SETM3:SUBROUTINE D.RIO(READI) !READ DISC DIRECTORY IFNOT $MS003<0 THEN [ \IF 003 MSG NEVER GIVEN $MS003_$MS003 OR 100000K; \SET MSG 003 FLAG IFLG._3; \SET UP FOR LU 3 D.RIO(WRIT); \WRITE DISC DIRECTORY GO TO INIT1] !SEND MESSAGE RETURN END END END$ <SPL,L,O ! NAME: IN.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME IN..(8) "92002-16008 REV.1826 780413" ! ! 771229 (GLM) -CHANGE TO CORRECTLY INITIALIZE LU3 THE FIRST TIME ! 780413 (GLM) -CHANGE TO CORRECTLY RELEASE LOCK ON ABORT OF INIT. ! ! ! IN.. IS THE RTE FILE MANAGER ACTION ROUTINE ! FOR THE IN DIRECTIVE. ! ! THE IN DIRECTIVE HAS THE FORM: ! ! IN,MSC,CR,LABEL,ILAB,#FT,#DTR,#SEC/TR,BTL !PARAMETER 1 5 9 13 17 21 25 29 ! ! OR ! ! IN,MSC--NMSC ! ! W H E R E: ! ! MSC IS THE TWO CHARACTER MASTER SECURITY CODE ! ! CR IS EITHER THE CARTRIDGE LABEL(+) OR ITS ! LOGICAL UNIT(-) (MUST BE NUMERIC) ! ! LABEL IS THE NEW CARTRIDGE LABEL (MUST BE NUMERIC > 0). ! ! ILAB IS THE CARTRIDGE INFORMATION LABEL (MUST BE ASCII). ! ! #FT IS THE FIRST FMP TRACK. ! ! #DTR IS THE NUMBER OF DIRECTORY TRACK ! (NULL (SET TO 1) OR NUMERIC) ! ! #SEC/TR IS THE NUMBER OF 64 WORD SECTORS ! PER TRACK (NUMERIC (MAY BE NULL FOR LU2 AND 3)). ! ! BTL IS A BAD TRACK LIST - UP TO 6 BAD TRACK NUMBERS. ! ! NMSC IS A NEW MASTER SECURITY CODE. ! ! THE MASTER SECURITY CODE IS SET WHEN LU2 IS FIRST ! INITIALIZED AND MUST MATCH THEREAFTER. ! LET DR.RD,D.RIO,MSS.,NAM..,READC,EXEC \ ,READF,WRITF \ ,J.PUT,IPUT,.PARS\ BE SUBROUTINE,EXTERNAL LET PK.DR,D.SDR,IFLG.,D.LT,D.LB,C.BUF, \ DS.DF, \ D.,DS.LU,.E.R. BE INTEGER,EXTERNAL LET CAM.O,NO.RD,.E.R. BE INTEGER,EXTERNAL LET PDIRS BE SUBROUTINE LET PTST,GT BE SUBROUTINE LET BADTR BE SUBROUTINE LET LOCK. BE SUBROUTINE,EXTERNAL LET FID. BE FUNCTION,EXTERNAL LET MSC. BE FUNCTION,EXTERNAL ! ! CONSTANTS ! LET YE BE CONSTANT(54505K) LET NO BE CONSTANT(47117K) LET A BE CONSTANT(0 ) LET B BE CONSTANT(1 ) LET WRIT BE CONSTANT(2 ) LET READI BE CONSTANT(1 ) LET XEQT BE CONSTANT(1717K) LET SECT2 BE CONSTANT(1757K ) LET SECT3 BE CONSTANT(1760K ) LET TAT BE CONSTANT(1656K ) LET TATLG BE CONSTANT(1755K ) LET TATSD BE CONSTANT(1756K ) LET DMSIN BE CONSTANT(26455K) IN..: SUBROUTINE(NCAM,PLIST,MSNO)GLOBAL LET NCAM,PLIST,MSNO BE INTEGER DDIR_@D.SDR PDIR2_[PDIR1_[PDIR_@PK.DR]+1]+1 PDIR9_[PDIR8_[PDIR7_[PDIR6_[PDIR5_[PDIR4_[PDIR3_\ PDIR2+1]+1]+1]+1]+1]+1]+1 LIS29_[LIS21_[LIS17_[LIS13_[LIST9_[LIST5_@PLIST+5]+4]+4]+4]+4]+8 MSNO_0! INITILIZE FOR NO ERRORS ! ! TEST FOR LEGAL PARAMETERS ! IF NCAM#1 THEN GOTO IN2 IF IFLG. THEN GOTO NOPRM ! MSC CHANGE? ! IFNOT MSC.(PLIST) THEN GOTO SCER ! IF $(@PLIST+2)#DMSIN THEN GOTO NOPRM ! $(DDIR+126)_[IF([T_$(@PLIST+3)]AND 77400K)=20000K THEN 0,ELSE T] D.RIO(WRIT) !WRITE IT OUT RETURN !RETURN ! LABER:DO[MSNO_53;RETURN] ! NOPRM:DO[MSNO_50;RETURN] !NOT ENOUGH PRAMS - EXIT ! IN2: IFNOT IFLG. THEN GOTO IN5!NOT INITIALIZING -JMP IF IFLG.=2 THEN[\ IF PLIST THEN[IF PLIST#3 THEN GOTO SCER] ;\ $(DDIR+126)_$[DS.DF_@PLIST+1]]!SET THE MASTER SECURITY CODE ! ! IF IFLG.# -$(LIST5 )THEN[MSNO_52;RETURN] IF IFLG.=3 THEN[IFNOT$LIST9 THEN BRETURN] !NO LU 3 RETURN IN5: IFNOT MSC.(PLIST)THEN GO TO SCER !CHECK SECURITY ! ! CHECK LABEL PARAMETERS ! ! IN6: IFNOT -$LIST9<0 THEN GO TO LABER !LABEL MUST BE >0 ! IF $(@PLIST+12)#3 THEN GO TO LABER NAM..($(LIS13 )) DO[AREG_$A; IF AREG THEN GO TO LABER] ! ! SET UP TO TEST THE REST OF THE PRAMS. ! FOR T_4 TO 13 DO[PTST($(@PLIST+T*4))] ! IFNOT$[T_(LIS21 )]THEN $T_1 !MUST HAVE DRTRK IFNOT IFLG. THEN GOTO IN7 !IF NOT INIT SKIP IF IFLG.=2 THEN [FOR T_2 TO 124 DO $(DDIR+T)_0;\ $DDIR_2],ELSE $(DDIR+4)_3 !SET LU IN DISC DIRECTORY LTR_[IF IFLG.=2 THEN [$(DDIR+1)_$TATSD-1],\ ELSE[$(DDIR+5)_ -$TATSD -$TATLG-1]] ! IN7: DR.RD(READI,$LIST5 ,0)?[MSNO_54;RETURN] ! DO[EXEC(13,$$@DS.LU,T,T1);T1_T1 AND 77K\GET UNIT SELECT CODE ;EXEC(13,2,T,T2);T3_0;IF $TATLG+$TATSD THEN EXEC(13,3,T,T3)]! ! T_@PLIST+25 !SET NO OF SECTORS ADDRESS IF T1=(T2 AND 77K) THEN \ $T_$SECT2,ELSE[IF T1=(T3 AND 77K ) THEN \ $T_$SECT3] !IF WE DID NOT GET A SECT/TRACK BY NOW IFNOT $T THEN GOTO MSPRM ! THEN ERROR LTR_$$@D.LT NEW,TN_LTR-[FTR_$LIS17]+1 !SET FIRST TRACK,TOTAL NO. TRACKS IF TN<[ND_$LIS21 ]THEN GOTO BADPM ! IF ND>((TN-ND)>-3)+1 THEN GO TO BADPM !DISALLOW UNREASONABLE ! NUMBER OF DIRECTORY TRACKS IF $$@DS.LU=2 THEN[IF FTR<($1761K>-7)+8 THEN GO TO BADPM] ! MUST ! LEAVE SOME TRACKS FOR THE SYSTEM ! ! CHECK THE BAD TRACKS AND ARRANGE IN ASCENDING ORDER ! LIS49_[T1_LIS29]+20 FOR T_LIS29 TO LIS49 BY 4 DO[\ IF $T THEN[$T1_$T;T1_T1+1]] FOR T_T1 TO LIS29+6 DO[$T_0] ! ZERO THE END OF THE LIST IN10: SWP,LAST_0 !INITILIZE THE SORT FOR T_LIS29 TO T1-1 DO[\ SWAP LOOP IF $T LTR-ND THEN GO TO BTER IN13: T3_$$@DS.LU !SET LU DLB_D.LB !SET THE LABEL ADDRESS IF IFLG.=2 THEN GOTO IN20 ! IF $LIST9=$DLB THEN GO TO IN12!IS SAME LABEL SKIP DR.RD(READI,$LIST9,0)?[DR.RD(READI,$LIST5,0);GO TO IN12] MSNO_12 !DUPLICATE LABEL ERROR ! ! (GLM) -FIX FOR INITIALIZE LU3 PROBLEM ! ! IF INIT ON 3 WE MUST CLEAR THE LU3 FLAG (SET BY IN.IT) ! SO WE WILL MAINTAIN THE FMGR 003 ERROR UNTIL A GOOD IN CMND ! COMES IN. ! IF IFLG.=3 THEN[D.RIO(READI) ;TZ_@D.SDR+127;\ CLEAR THE LU3 $TZ_ ($TZ AND 77777K);D.RIO(WRIT)]! PROMPT FLAG ! RETURN IN12: IF IFLG.=3 THEN GOTO IN20 ! FILES NOT SAVED ON LU3 IF [TX,NEW_FID. ($(LIST5 ))] THEN[ \ IFNOT IFLG. THEN[ \IF NOT FIRST CALL IF $(DLB+1)# $XEQT THEN[ \IF NOT LOCKED AND NOT LOCK ABLE MSNO_61;RETURN \RETURN ERROR (DISMOUNTED WITH ] \OUT TELLING US) NO-NO ]; \ GO TO IN20 \ELSE WE ARE OK ] ! LOCK.($LIST5,3)?[RETURN] ! REQUEST LOCK/ RETURN IF ERROR ! A DIRECTORY EXISTS - IS THE NEW PRAM SET ! COMPATIBLE? ENDBL_ -$PDIR8*$PDIR6/2+[IF T3 =2 THEN -1 ,ELSE 0] ! IF FTR>$(PDIR4 ) THEN GOTO IN15 IF $(PDIR9 )>(LTR-ND+1)THEN GOTO IN15 IF ND+$PDIR8 <0 THEN GO TO IN15 !IF FEWER DIRECTORY TRACKS ASK. ! IN20: IF T3 =2 THEN GT($TAT) !IF LU TWO OR THREE IF T3=3 THEN GT($TAT+$TATSD)!GO SET THE TAT ! FULL SPEED AHEAD! $PDIR_$(LIS13 )+100000K $(PDIR1 )_$(@PLIST+14) $(PDIR2 )_$(@PLIST+15) $(PDIR3 )_$LIST9 $(PDIR4 )_FTR IF NEW THEN [$(PDIR5 )_0;$(PDIR9 )_FTR] $(PDIR6 )_$(@PLIST+25) $(PDIR7 )_LTR-ND+1 $(PDIR8 )_-ND FOR T_10 TO 15 DO $(PDIR+T)_$(@PLIST+T+19) IF NEW THEN[FOR T_16 TO 127 DO $(PDIR+T)_0] BL_0 ! ! NOW WRITE IT OUT IN22: DR.RD(WRIT,$LIST5 ,BL)?[GO TO IN25] ! FOR T_0 TO 127 DO $(PDIR+T)_0 IFNOT NEW THEN [BL,NEW_ENDBL;GOTO IN22]!SET TO ZERO ADDED DIRECTORY DO[BL_BL+1;GO TO IN22]!ZERO THE NEXT BLOCK ! IN25: $DLB_$LIST9 !SET THE DIRECTORY LABEL WORD IN30: D.RIO(WRIT);IFNOT IFLG. THEN LOCK.($LIST5,5) !RELEASE LOCK*780413* EXEC(5,-1) !RETURN ANY LEFT OVER TRACKS RETURN !WE DID IT - EXIT ! IN15: MSS.(60);EXEC(2,CAM.O,35137K,1) ;\ SEND COLON PROMPT EXEC(1,CAM.O OR 400K,C.BUF,36);LN_$1 IF LN<1 THEN GOTO IN15 $(@C.BUF+LN)_0 !SET UP THE BUFFER FOR POSSIBLE ?? CALL IF C.BUF=YE THEN[NEW_1; GO TO IN20], ELSE [ \ IF C.BUF=NO THEN [IF IFLG. THEN GOTO MSPRM,\ ELSE GOTO IN30],ELSE[IF C.BUF="??" THEN[\ NO.RD_-1;RETURN],ELSE\ GO TO IN15]] ! BADPM:DO[MSNO_56;RETURN] ! MSPRM:DO[MSNO_55;RETURN] ! BTER: DO[MSNO_57;RETURN] SCER: MSNO_51 RETURN END PTST: SUBROUTINE(PTR) ! IF PTR=3 THEN GOTO BADPM !MUST NOT BE ASCII ! ! IF $(@PTR+1)<0 THEN GOTO BADPM !IF <0 - BAD NEWS ! RETURN !OK !RETURN END ! GT: SUBROUTINE(TRLOC) ! SUBROUTINE TO CHECK ON TRACK ASSIGNMENTS FOR ! CHANGES TO THE SYSTEM OR AUX DISC FILE AREAS ! IF IFLG. THEN RETURN ! IF INIT THE LET MAIN DO IT IF TX THEN GO TO TRASN ! NEW SO GO GET ALL THE TRACKS IF FTR<[T_$(PDIR4 )] THEN GO TO TRASN ! IF LARGER AREA GET TR ! ! RETURN THE LEFT OVER TRACKS FOR ADD_T TO FTR-1 DO[T1_ADD+TRLOC;\ IF $T1=77776K THEN IPUT(T1,$XEQT)] EXEC(5,-1) !RETURN THE TRACKS RETURN !AND RETURN ! TRASN:T1_FTR+TRLOC !SET UP FIRST AND LAST ADDRESSES T2_[IF TX THEN LTR,ELSE T-1]+TRLOC FOR ADD_T2 TO T1 BY -1 DO[J.PUT(ADD,$XEQT,JER);\ IF JER THEN BADTR] ! FOR ADD_T1 TO T2 DO[IF $ADD=$XEQT THEN IPUT(ADD,77776K)] RETURN END BADTR:SUBROUTINE T_ADD-TRLOC !CHECK IF UNAVAILABLE TRACK IS ALSO BAD FOR X_LIS29 TO LIS49 BY 4 DO[IF $X=T THEN RETURN] MSS.(1059,T) !NOT FOUND SO BAD TRACK ERROR OR TRACK NOT AVAILABLE GO TO IN30 !GO EXIT END END END$ SPL,L,O ! NAME: MC.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME MC.. (8) "92002-16008 760511" ! MOUNT CARTRIDGE DIRECTIVE ! ROUTINE FOR RTE FILE ! MANAGER (FMGR). ! ! ENTERED ON COMMAND: ! ! MC,LU,LTR ! ! W H E R E: ! ! LU IS THE LOGICAL UNIT OF THE DISC TO BE MOUNTED. ! ! LTR IS THE LAST TRACK ON THE UNIT TO BE ! USED BY THE FILE MANAGER. ! MC..: SUBROUTINE(N,LIS,ER) GLOBAL !ENTRY ! ! DECLARE EXTERNALS ! LET DR.RD,D.RIO,LOCK.,EXEC\ BE SUBROUTINE,EXTERNAL ! LET D.SDR,DS.F1,PK.DR \ BE INTEGER,EXTERNAL ! LET FID. BE FUNCTION,EXTERNAL ! ! DECLARE CONSTANTS ! LET XEQT BE CONSTANT(1717K) LET TATSD BE CONSTANT(1756K) LET TATLG BE CONSTANT(1755K) LET B BE CONSTANT( 1) LET READI BE CONSTANT( 1) LET WRIT BE CONSTANT( 2) ! Xt LU_$(@LIS+1) !BRING IN THE LTR_$(@LIS+5) !PRAMS DS.F1_0 !INSURE A CLEAN READ IF LU>0 THEN LU_-LU NLU_-LU DR.RD(READI,LU,0)?[GO TO OK] ! MC00: ER_12 !SEND DUPLICATE LU RETURN !ERROR ! OK: DSDR_@D.SDR FOR DLU_DSDR TO DSDR+120 BY 4 DO[\ IFNOT $DLU THEN GO TO MC01] ER_62 !MORE THAN 31 DISCS? RETURN !RETURN ! MC01: MXTR_0 IF NLU=2 THEN MXTR,LTR_$TATSD-1 IF NLU=3 THEN MXTR,LTR_-$TATSD-$TATLG-1 EXEC(100015K,NLU,EQT5) GO TO MC03 IF(EQT5 AND 36000K)#14000K THEN[\ MC03: ER_52; RETURN] !NO DISC-ERR. IF MXTR THEN GOTO MC02 IF (EQT5 AND 37400K)#\ 14000K THEN[EXEC(2,NLU+74000K,1,1,10000,0);\ MXTR_$B-1],ELSE GOTO MC02 IFNOT LTR THEN LTR_MXTR IF LTR>MXTR THEN[ER_56;RETURN] ! MC02: IFNOT LTR THEN[ER_55;RETURN] ! $DLU_NLU DLU_[T_DLU+1]+1 $T_LTR IFNOT [NEW_FID.(LU)] THEN[\ LB_$(@PK.DR+3); \ DR.RD(READI,LB,0)?[GOTO MC05];\ GO TO MC00] ! MC05: $DLU_LB !SET LABEL MC04: IF NEW THEN $(DLU+1)_$XEQT !SET LOCK IF NEW ! D.RIO(WRIT) !WRITE NEW DISC DIR. ! RETURN !DONE END END END$ SPL,L,O ! NAME: RC.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! DATE: 741118 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME RC..(8) ! THIS IS THE REMOVE CARTRIDGE ROUTINE OF THE ! RTE FILE MANAGER PROGRAM FMGR. ! IT IS ENTERED AS A RESULT OF A ! ! RC,CR ! WHERE CR IS THE CARTRIDGE ID ! ! THE CARTRIDGE IS LOCKED IF IT HAS BEEN ! INITILIZED. ! ! THEN IT IS REMOVED FROM THE DIRECTORY OF DISCS. ! ! ! DECLARE EXTERNALS ! LET DR.RD, D.RIO, FM.ER,\ LOCK., CONV. BE SUBROUTINE, EXTERNAL LET MC.. BE SUBROUTINE,EXTERNAL ! LET FID. BE FUNCTION, EXTERNAL ! LET D.LT, DS.LU, D.SDR,DS.DF BE INTEGER, EXTERNAL ! ! DECLARE CONSTANTS LET MSS(7),MS BE INTEGER INITIALIZE MSS TO "LAST TRACK " ! LET WRIT BE CONSTANT ( 2) LET READI BE CONSTANT ( 1) LET B BE CONSTANT ( 1 ) RC..: SUBROUTINE (N,LIS,ER) GLOBAL DIS_@LIS+1 !SET DISC SPEC ADDRESS IFNOT $DIS THEN [ER_55;RETURN] !NOT SPECIFIED ERROR DR.RD(READI,$DIS,0)?[ER_54; RETURN] !NOT MOUNTED IFNOT FID.($DIS) THEN LOCK.($DIS, 3)?[RETURN] ! LOCK CONV. ($$@D.LT,MS,4) !SET LAST TRACK IN MESSAGE DS.DF,$DIS_ - $$@DS.LU !SET LU FOR MOUNT CALL FOR I_DS.LU TO @D.SDR+120 DO[\ $I_$[T_I+4]; $T_0] ! REMOVE FROM DIRECTORY IF $DIS = -2 THEN GO TO MOUNT IF $DIS = -3 THEN GO TO MOUNT !IF SYS OR AUX THEN GO REMOUNT D.RIO(WRIT) ! RE WRITE THE DIRECTORY OF DISCS. FM.ER (0, MSS,8) ! SEND LAST TRACK TO LOG RETURN MOUNT:MC..(N,LIS,ER) RETURN END END END$ SPL,L,O ! NAME: LI.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME LI..(8)"902002-16008 760720" ! ! LI.. IS THE RTE FMGR FILE LIST MODULE ! IT IS ENTERED ON COMMAND ! ! LI,NAMR,TY ! ! WHERE: ! ! ! NAMR IS THE NAME REFERENCE INCLUDING ! SECURITY CODE AND DISC ID ! ! TY IS THE LISTING TYPE AND IS ASCII: ! ! S OR A OR NULL SOURCE WITH LINE NUMBERS ! B BINARY DUMP ! D DIRECTORY HEAD ONLY ! ! ! EACH LISTING WILL BE PROCEEDED BY THE HEAD: ! ! NAMEL T=XXXXX IS ON PK XXXXX USING XXXX BLKS R=XXXX ! ! ! ! ! ! S FORMAT IS A BLANK FOLLOWED BY 4 DIGIT ! LINE NUMBER FOLLOWED BY TWO BLANKS FOLLOWED ! BY THE RECORD. ! ! B FORMAT IS : ! A)THE RECORD HEAD: REC# XXXXX ! B)N LINES FORMATED AS FOLLOWS ! 8 5-DIGIT OCTAL NUMBERS SEPERATED BY BLANKS ! AND FOLLOWED BY A "*" FOLLOWED BY THE ! 16 ASCII CHARACTERS THE DIGITS REP. ! NON-PRINTING CHARACTERS WILL BE FILLED ! WITH BLANKS ! ! D FORMAT IS THE HEAD ONLY ! ! ! ! DEFINE EXTERNALS ! LET .TTY BE FUNCTION,EXTERNAL LET JER. BE SUBROUTINE,EXTERNAL,DIRECT ! LET O.BUF,I.BUF,BUF.,.E.R.,\ TMP.,N.OPL BE INTEGER,EXTERNAL LET FSTAT,OPEN.,LOCF,WRITF,READF,EXEC,\ CONV.,JER. \ BE SUBROUTINE,EXTERNAL ! ! DEFINE INTERNAL ROUTINES ! LET SETA,WRIT,SPACE BE SUBROUTINE,DIRECT ! ! DEFINE CONSTANTS ! HL LET BL.T BE CONSTANT (20124K)! T LET EQ.BL BE CONSTANT (36440K)!= LET BL.I BE CONSTANT (20111K)! I LET S.BL BE CONSTANT (51440K)!S LET O.N BE CONSTANT (47516K)!ON LET BL.C BE CONSTANT (20103K)! C LET R.BL BE CONSTANT (51040K)!R LET BL.L BE CONSTANT (20114K)! L LET U.BL BE CONSTANT (52440K)wN!U LET BL.U BE CONSTANT (20125K)! U LET S.I BE CONSTANT (51511K)!SI LET N.G BE CONSTANT (47107K)!NG LET BL.B BE CONSTANT (20102K)! B LET L.K BE CONSTANT (46113K)!LK LET R.EQ BE CONSTANT (51075K)!R= LET A.BL BE CONSTANT (40440K)!A LET B.BL BE CONSTANT (41040K)!B LET D.BL BE CONSTANT (42040K)!D LET R.E BE CONSTANT (51105K)!RE LET C.NO BE CONSTANT (41443K)!C# LET DST BE CONSTANT (25052K)!** ! ! DEFINE BUFFER SET UP ! LET LSTBF(2),LNNO,BLWD,LBF(128) BE INTEGER LI..: SUBROUTINE(NOC,LIS ,ER) GLOBAL ! OPFL_401K !SET DEFAULT OPEN OPTION NUL_0 !PRESET NULL PRAM FLAG LR_$([FR_[TYPF_[LIS1_@LIS +1]+4]+4]+4)!SET ADDRESSES TYPF_($TYPF AND 177400K)+40K !GET AND ISOLATE THE TYPE IF [FR_$FR] THEN[ \SET FIRST LAST RECORD IFNOT LR THEN LR_ FR] !DEFAULTS (1 IF ONLY FIRST) IF TYPF=A.BL THEN GO TO STYP !CHECK FOR IF TYPF=40K THEN[NUL_1;GO TO STYP]!LEGAL IF TYPF=D.BL THEN GO TO TYPOK !OPTIONS IF TYPF=B.BL THEN[OPFL_311K;GO TO TYPOK]!NULL,A,S,B,D IF TYPF#S.BL THEN [ER_56;RETURN]!NO; RETURN 56 ! STYP: TYPF_S.BL !FOURCE NULL,ATOS ! TYPOK:OPLS_ @TMP.+3 !GET LIST UNIT OP LIST ! CALL OPEN.(O.BUF,TMP.,$OPLS, 0) !OPEN LIST FILE ! CALL OPEN.(I.BUF,$LIS1,N.OPL,OPFL) !OPEN FILE TO BE LISTED ! CALL LOCF(I.BUF,.E.R.,LP,LP,LP,NSEC,FLU,FTYP,RECS) IFNOT NUL THEN GO TO OK !IF NULL THEN CHOSE THE RIGHT OPTION IFNOT FTYP THEN GO TO OK !TYPE ZERO DEFAULT IS ASC IF FTYP=3 THEN GO TO OK !SAME FOR TYPE 3 IF FTYP=4 THEN GO TO OK !SAME FOR TYPE 4 CTYP: TYPF_B.BL !OTHERWISE USE BINARY FORMAT ! OK: CALL LOCF(O.BUF,.E.R.,LP,LP,LP,LP,LLU) !GET LIST LU ! EXEC(13,LLU,EQT5) !GET LIST LU TYPE CODED ! P36_[P3_@LIS +4]+33 !SET UP LIST ADDRESSES LP_1 !SET LINE PRINTER FLAG IF (EQT5 AND 37400K)<5000K THEN LP_0 TTY_.TTY(LLU) FOR T_ P3 TO P36 DO[$T_20040K] ! BLANK THE BUFFER P_P3-1 SETA(BL.T) !SET BLANK T SETA(EQ.BL) !SET = BLANK P_P+2 CONV.(FTYP,$P,5) !SET TYPE SETA(BL.I) !SET BLANK I SETA(S.BL) !SET S BLANK SETA (O.N) !SET ON IF FTYP THEN[SETA(BL.C); \IF DISC FILE FINE CR # SETA(R.BL);\ CALL FSTAT(LNNO); \MUST BE FOUND T_@LNNO; \SO NO STOP NEEDED UNTIL $T = FLU DO T_T+4; \FIND THE LU T_$( T+2);N_5], \SET IT UP ELSE[ \ SETA(BL.L); \SET UP A DIRECT LU SETA(U.BL);\ T_FLU;N_2] P_P + N/2 CONV.(T,$P,N) IFNOT FTYP THEN[N_13;GO TO WRHD] SETA(BL.U) !SET USING SETA(S.I ) SETA(N.G ) P_P+3 ! CONV.(NSEC/2,$P,5) ! ! SETA(BL.B) !SET BLKS R= SETA(L.K) SETA(S.BL) SETA(R.EQ) ! P_P+2 ! CONV.(RECS,$P,4) ! N_27 ! WRHD: TB_[BF_[IF TYPF=S.BL THEN @LSTBF,ELSE @BUF.]]+1 $BF_20040K !BLANK FIRST WD P_LIS1 FOR T_TB TO TB+N DO [$T_$P;P_P+1] !MOVE LINE IF LIS #3 THEN[$([P_TB+1]+1)_DST;\IF FACK FILE REPLACE NAME $P_DST;$TB_DST]! WITH "******" WRIT ! WRITE THE HEAD ! IF TYPF=D.BL THEN GOTO EOF !DONE IF HEAD ONLY SPACE !SPACE A LINE IF FTYP=6 THEN $(@I.BUF+2)_1 !FOURCE TYPE 6 TO ONE RC_1 NEXT: P_BF !INITILIZE BUFFER POINTER SETA(R.E) ! SET UP SETA(C.NO) ! REC# XXXXX SETA(20040K) P_P+2 CONV.(RC,$P,5)! SET NUMBER CALL READF(I.BUF,.E.R.,LBF,128,L) ! READ RECORD IF .E.R.= -12 THEXN GO TO EOF !IF EOF-GO EXIT JER. !CHECK FOR ERRORS IF L <0 THEN GO TO EOF !SOFT EOF? IF RC< FR THEN GO TO NEXTR !SKIP TO FIRST REQUESTED REC. N_L+3 IF TYPF=S.BL THEN[CONV.(RC,LNNO,4);BLWD_20040K;\ L_0;GO TO WRTIT]!JUST LISTING - GO WRIT ! SPACE !SPACE A LINE N_5 !WRITE THE RECORD NUMBER WRIT ! SPACE !SPACE A LINE ! F_@LBF !SET BUFFER POINTER NEXTL:IFNOT L THEN [ \IF NO DATA GET NEXT NEXTR: RC_RC+1; \STEP RECORD COUNT IF LR THEN[ \END OF REQUESTED DATA IF RC > LR THEN GO TO EOF]; \YES GO DO EOF GO TO NEXT] !ELSE DO NEXT RECORD P_[ST_[WP,T_TB]+27]+1 !INITILIZE POINTERS REPEAT 36 TIMES DO[ $T_20040K; T_T+1] UP_ -1 !SET UPPER FLAG TRUE REPEAT 8 TIMES DO THRU PTSTP IF[T2_ [T_$F]AND 77400K]>57400K THEN GOTO BLANK IF T2>17777K THEN GOTO OKUP ! BLANK:T_ (T AND 177K)+20000K ! OKUP: IF [T2_($F AND 177K)]<140K THEN[IF T2> 37K THEN\ GO TO OKLOW] ! T_ (T AND 77400K) +40K ! OKLOW:DO[ $P_T AND 77577K;P_P+1] ! T2_ [T_$F-<1] AND 1 ! $WP_[IF UP THEN (T2-<8)+([T_T-<3] AND 7)+30060K,\ ELSE T2 + 20060K] ! REPEAT 2 TIMES DO[ \ $[WP_WP+1]_(([T_T-<3] AND 7)-<8)+\ ([T_T-<3] AND 7)+ 30060K] ! IF UP THEN GOTO PTSTP ! $[WP_WP+1]_(((T-<3) AND 7)-<8)+30040K ! PTSTP:DO[WP_WP+1;UP_NOT UP;F_F+1;IFNOT [L_L-1] THEN\ GO TO PREPR] ! ! PREPR:IF $[P_P-1]=20040K THEN GO TO PREPR !FIND LAST !NON BLANK N_ P-TB+1 !PRINT LENGTH ! $ST_ $ST +12K !SET THE STAR SEPERATOR ! WRTIT:WRIT !TRANSMIT THE LINE ! GOTO NEXTL !GO DO NEXT LINE ! EOF:ҬNLH WRITF(O.BUF,.E.R.,$BF,-1) !WRITE EOF JER. RETURN END ! ! SETA: SUBROUTINE(PRA)DIRECT !STEP P AND SET PRA IN P INDIRECT $[P_P+1]_PRA RETURN END ! ! WRIT: SUBROUTINE DIRECT!WRITE ON O.BUF BUFFER AT BF IF LP !OR TB IF NOT LP WITH LENGTH N+LP !IF TTY -LIMIT LENGTH TO 72. IF TTY THEN[IF N>36 THEN N_36] WRITF(O.BUF,.E.R.,$(TB-LP),N+LP) JER. RETURN END ! ! SPACE:SUBROUTINE DIRECT !SPACE THE LIST DEVICE N_1 !SET LENGTH TO ONE WORD DO[T_$TB;$TB_ 20040K]!SET BLANK IN BUFFER WRIT !WRIT BLANK LINE $TB_T !RESTORE OLD CONTENTS RETURN !RETURN END END END$ xNSPL,L,O ! NAME: DL.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME DL..(8) "92002-16008 771020" ! ! RTE FMGR DIRECTORY LIST MODULE ! ! ENTERED ON COMMAND: ! ! DL,CR,MSC ! ! WHERE: ! CR IF GIVEN RESTRICTS THE LIST TO ! THE GIVEN CARTRIDE ! ! MSC IF GIVEN MUST BE THE MASTER ! SECURITY CODE AND CAUSES THE ! EXPANDED LIST FORMAT. (SEE BELOW) ! ! FORMATS: ! ! HEAD: ! !L1 CR=XXXXX !L2 ILAB=YYYYYY NXTR=XXXX NXSEC=XXX #SEC/TR=XXX ! LAST TR= XXXX #DR TR=XX ! ! ! ! WHERE: CR IS FOLLOWED BY THE CARTRIDGE ID NUMBER ! YYYYYY IS THE CARTRIDGE LABEL ! NXTR INDICATES THE NEXT TRACK ! NXSEC THE NEXT SECTOR ! #SEC/TR THE NO. OF SECTORS/TRACK ! LAST TR THE LAST TRACK AND ! #DR TR THE NUMBER OF DIRECTORY TRACKS ! ! STANDARD (MSC NOT SUPPLIED): !L3 NAME TYPE #BLKS/LU OPEN TO ! ! FOLLOWED BY THE DIRECTORY ENTRIES ! ! EXTENDED FORMAT (MSC SUPPLIED) ! NAME TYPE #BLKS/LU SCODE TRACK SEC OPEN TO ! ! ! IF THE LIST DEVICE IS A TTY (TYPE 00 OR 05) ! THE EXTENDED FORMAT MAY FOURCE TWO LINES ! (IF 7 PROGRMS HAVE THE FILE OPEN) ! IF A PROGRAM HAS A FILE OPEN EXCLUSIVELY ! A - (MINUS SIGN) WILL FOLLOW THE PROGRAMS NAME ! IF AN ENTRY IS FOR AN EXTENT A + (PLUS SIGN) ! WILL BE PRINTED IN THE OPEN TO FIELD ! FOLLOWED BY THE EXTENT NUMBER ! ! ! DEFINE EXTERNALS ! 0L LET PK.DR,D.SDR,TMP.,O.BUF,.E.R.,\ BUF.,N.OPL BE INTEGER,EXTERNAL LET HEAD.(4),H1(2),H1.5,H2(4),H3,H4(4),H5,H6(5),H7,H8(6),H9,\ H10(4),H11 BE INTEGER LET HEA.1(15),HEA.2(24) BE INTEGER INITIALIZE HEAD.,H1,H1.5,H2,H3,H4,H5,H6,H7,H8,H9,H10,H11 TO \ " ILAB=YYYYYY NXTR=XXXX NXSEC=XXX #SEC/TR=XXX LAST TR= XX"\ ,"XX #DR TR=XX" INITIALIZE HEA.1 TO " NAME TYPE #BLKS/LU OPEN TO" INITIALIZE HEA.2 TO " NAME TYPE #BLKS/LU SCODE TRACK SEC ",\ "OPEN TO " ! LET F.TST,MSC.,.TTY BE FUNCTION,EXTERNAL ! LET F.SET,DR.RD,LOCF,WRITF,OPEN.,CONV.,D.RIO,CK.ID\ BE SUBROUTINE,EXTERNAL LET JER. BE SUBROUTINE,EXTERNAL,DIRECT ! ! DEFINE INTERNALS ! LET SETAD, WRIT, SPACE BE SUBROUTINE ! ! DEFINE CONSTANTS ! LET BLANK BE CONSTANT (20040K) LET C.R BE CONSTANT (41522K)!CR LET EQ.BL BE CONSTANT (36440K)!= LET MIN.B BE CONSTANT (26440K)!- LET PLS.B BE CONSTANT (25440K)!+ LET MIN BE CONSTANT ( 55K)! - ! ! DL..: SUBROUTINE(N,LIS,ER) GLOBAL EXEND,FFLAG_0 DL_ @LIS+1 !SET DISC SPEC IF LIS=3 THEN[ \IF MASK OPTION FFLAG_1; \SET UP THE MASKS CALL F.SET($DL); \AND THE NEW DL_$(@N.OPL+1)], \CR REF. ELSE \OTHER WISE USE AS DL_$DL !A CR LUPT_@D.SDR !SET LU POINTER DO[T_ @LIS+4 ;IF $T THEN[IFNOT[\ !CHECK EXEND_MSC.($T)]THEN[ER_51;RETURN]]]!SECURITY D.RIO(1) AGAIN:DIS_[IF DL THEN DL,ELSE -$LUPT] !GET DISC ID IFNOT DIS THEN RETURN !END OF DIREC-DONE BLK,INDEX_0 T_ @TMP.+3 OPEN.(O.BUF,TMP.,$T,0) !OPEN LIST FILE LOCF(O.BUF,.E.R.,T,T,T,T,T2) !GET LIST LU YTTY_[IF .TTY(T2) THEN 1,ELSE 0] !SET TTY FLAG TB_[BF_@BUF.]+1 $BF_BLANK NXBLK:DR.RD(1, DIS,BLK)?[IFNOT BLK THEN [ER_54;RETURN]\ ,ELSE GO TO CLEAN]!READ BLOCK NXFIL:SETAD?[INDEX_0;BLK_BLK+1;GO TO NXBLK] !SET ADDRESSES P_TB IF INDEX+BLK-16 THEN GO TO FILEP !NOT FIRST JUMP $P_C.R !SET $(P+1) _EQ.BL !CR=XXXXX ! CONV.($PK3,$(P+3),5)!IN BUFFER ! WRIT($BF,4) !WRITE ON LIST UNIT CONV.($PK9,H3,4) !INSERT NEXT TRACK CONV.($PK5,H5,3) ! NEXT SECTOR CONV.($PK6,H7,3) ! #SECTORS/TRACK CONV.($PK7-$PK8-1,H9,4) ! LAST TRACK CONV.(-$PK8,H11,2) ! #DIRICTORY TRACKS FOR T6_@H1 TO @H1.5 DO[ $T6_$PK AND 77777K;\ PK_PK+1] WRIT(HEAD.,34) SPACE IF EXEND THEN WRIT(HEA.2,23) ,ELSE WRIT(HEA.1,14) SPACE !SPACE T6_[T5_[T4_[T3_TB+2]+3]+3]+2 !SET POINTERS GO TO NXFIL !START LIST ! FILEP:IF $PK<0 THEN GO TO NXFIL !PURGED ENTRY IFNOT $PK THEN GO TO CLEAN ! END OF DIRECTORY IF FFLAG THEN[ \IF MASK OPTION IFNOT F.TST(PK) THEN GO TO NXFIL] !REJECT IF NOT IN SET. FOR T_TB TO TB+80 DO[$T_BLANK] !BLANK BUFFER FOR T_TB TO T3 DO [$T_$PK;PK_PK+1]!SET NAME CONV.($PK3,$T4,5) !SET TYPE IF $PK3 THEN GO TO NOT0 !IF TYPE ZERO CONV.($PK4 AND 77K,$T5,2) !CONVERT LU GO TO EXCK !ELSE NOT0: CONV.($PK6/2,$T5,5) !CONVERT BLOCK SIZE ! EXCK: IFNOT EXEND THEN GO TO NAMST !NOT EXTENDED JMP ! !SET NAME LIST ORGIN ! T6_[PK_[PK6_[T2_[P_TB+10]+2]+3]+2]+2 IF $PK8 <0 THEN [$P_MIN.B ;$PK8_-$PK8] CONV.($PK8,$T2,5) !SET SECURITY CODE IFNOT $PK3 THEN GO TO NAMST !IF TYPE ZERO CONV.($P2K4,$PK6,4) !SKIP TRACK CONV.($PK5 AND 377K,$PK,3) !AND SECTOR NAMST:T2_T6 !SET WORKING ADDRESS ! IF $PK3 THEN [IF [T_($PK5 -<8)AND 377K] THEN[\ $T6_PLS.B ;CONV.(T,$(T6+1),3);GO TO PRT] ] ! REPEAT 7 TIMES DO THRU NAMSK NAMSK: IF $[PK8_PK8+1] THEN [VALID_1; \ P_$PK8 AND 77777K; \ CK.ID(P)?[VALID_0];\ IF VALID THEN [P_P+12;FOR T_P TO P+2\ DO[ $T2_$T ;T2_T2+1];T_T2-1; \ $T_($T AND 177400K)+[IF $PK8<0 THEN \ MIN,ELSE 40K]]] PRT: P_TB+81 LNCK: IF $[P_P-1]=BLANK THEN GO TO LNCK L_P-TB+1 T_BF !SET BUFFER ADDRESS IF L>34 THEN[WRIT($BF,34);L_L-15;T_TB+14;\ FOR T6_T TO TB+33 DO $T6_BLANK] WRIT($T,L) ! WRITE THE LINE GO TO NXFIL ! CLEAN:WRITF(O.BUF,.E.R.,T,-1) !END FILE ! IFNOT DL THEN[LUPT_LUPT+4;GOTO AGAIN] ! RETURN END ! SETAD:SUBROUTINE FEXIT ! SET PACK DIRECTORY ENTRY ! ADDRESSES IF INDEX=128 THEN FRETURN !END BLOCK EXIT PK9_[PK8_[PK7_[PK6_[PK5_[PK4_[PK3_[PK_INDEX+@PK.DR]+\ 3]+1]+1]+1]+1]+1]+1 !SET THE ADDRESSES INDEX_INDEX+16 !STEP INDEX RETURN END ! ! WRIT: SUBROUTINE(BAD,NWORD) !WRITE N WORDS ON O.BUF !IF NOT A TTY TWO BLANKS ARE WRITF(O.BUF,.E.R.,$(@BAD+TTY),NWORD+1-TTY)!ADDED JER. !AT THE RETURN !FRONT END ! SPACE:SUBROUTINE $TB_BLANK !SET A 1 WORD BLANK WRIT($BF,1) !WRITE IT RETURN !RETURN END ! END END$ ASMB,R,L,C * NAME: F.SET * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: G.A.A. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * * RESERVED. NO PART OF THI[lS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** NAM F.SET,8 92002-16006 760719 EXT .ENTR EXT N.OPL ENT F.SET FILTER SET UP ENTRY ENT F.TST FILTER TEST ENTRY * * FILTER FOR DL COMMAND * * THIS ROUTINE SET UP THE FILTER MASKS AND TESTS NAMES AGAINST THEM * NAME NOP F.SET NOP ONE PARAMETER THE FILE NAME JSB .ENTR GET PRAM DEF NAME JSB NAMF GET MASK AND TEST FOR FIRST WORD STA CPA1 SET THE VALUES STB MSK1 FOR LATER JSB NAMF GET SAME FOR WORD 2 STA CPA2 AND SAVE STB MSK2 JSB NAMF SAME FOR NAME 3 STA CPA3 STB MSK3 LDA DN.OP GET ADDRESS OF SUB PRAMS RAL,CLE,SLA,ERA CLEAR INDIRECT LDA A,I GET ADDRESS STA NAME SET ADDRESS JSB SUTY GET MASK FOR SC STA CPASC SAVE SC VALUE ONE CMA,SSA,INA SET MASK 2 CMA,INA USE SAME IF POSITIVE CODE PROVIDED STA CPASM STB MSKSC ISZ NAME STEP TO JSB SUTY GET MASK FOR TYPE STB MSKTY STA CPATY JSB SUTY STB MSKSZ ADA A DOUBLE SIZE TO GET SECTORS STA CPASZ JSB SUTY NOW GET RECORD LENGTH STB MSKRL STA CPARL SET VALUES JMP F.SET,I RETURN ALL MASKS SET UP * NAMF NOP NAME DON'T CARE SET UP LDA NAME,I GET VALUE AND C377 ISOLATE THE HIGH CHAR CPA "HM" IS "-"? CLB,RSS YES SET MASK LDB C377 NO, SET KEEP MASK XOR NAME,I GET OTHER CHAR. CPA "LM" IS "-"? RSS YES LEAVE ZERO MASK ADB B377 NO SET THE LOW BITS LDA NAME,I GET THE VALUE AND B MASK IT ISZ NAME STEP FOR NEXT TIME JMP NAMF,I RETURN A=VALUE, B= MASK * SUTY NOP TYPE MASK SET ROUTINE LDA NAME,I GET CURRENT PRAM SZA,RSS SET MASK BASED ON IF SUPPLIED CLB,RSS CCB B IS MASK ,A IS VALUE ISZ NAME STEP TO NEXT ENTRY JMP SUTY,I RETURN * B377 OCT 377 C377 OCT 177400 CPA1 NOP CPA2 NOP CPA3 NOP CPASC NOP CPASM NOP CPATY NOP CPASZ NOP CPARL NOP * MSK1 NOP MSK2 NOP MSK3 NOP MSKSC NOP MSKTY NOP MSKSZ NOP MSKRL NOP "HM" OCT 26400 "LM" OCT 55 DN.OP DEF N.OPL * * DADD NOP F.TST NOP MASK TEST ROUTINE PRAM IS ADDRESS OF DIRECTORY ENTRY JSB .ENTR DEF DADD LDB DADD,I GET THE ADDRESS LDA B,I GET NAME1 AND MSK1 KEEP UN MASKED CHAR CPA CPA1 IF OK CONTINUE INB,RSS ELSE JMP NO TAKE NO EXIT * LDA B,I NAME 2 AND MSK2 CPA CPA2 INB,RSS JMP NO * LDA B,I AND MSK3 CPA CPA3 INB,RSS JMP NO * LDA B,I AND MSKTY TYPE TEST CPA CPATY INB,RSS JMP NO * INB INB STEP OVER DISC ADDRESS LDA B,I GET SIZE AND MSKSZ CPA CPASZ INB,RSS JMP NO * LDA B,I AND MSKRL CPA CPARL INB,RSS RECORD LENGTH OK? JMP NO * LDA B,I SECURITY CODE AND MSKSC CPA CPASC TWO CHANCES HERE RSS CPA CPASM OK? CCA,RSS YES NO CLA NO MATCH EXIT JMP F.TST,I RETURN * A EQU 0 B EQU 1 END SPL,L,O ! NAME: PU.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! DATE: 740801 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS > * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME PU..(8) ! ! PURGE FILE ROUTINE FOR THE RTE FILE MANAGER ! ! ENTERED AFTER A: ! ! PU,NAMR ! ! W H E R E: ! ! NAMR IS THE FILE'S NAMR WHICH CAN CONTAIN: ! ! CR (OPTIONAL) IS THE CARTRIDGE ID. ! ! SC (OPTIONAL) IS THE FILE SECURITY CODE. ! ! ! DEFINE EXTERNAL ADDRESSES ! LET .E.R.,I.BUF,N.OPL,PK.DR BE INTEGER,EXTERNAL ! LET IER.,DR.RD,LOCK.,PURGE BE SUBROUTINE,EXTERNAL ! ! LET TATSD BE CONSTANT (1756K) LET SECT2 BE CONSTANT (1757K) LET WRIT BE CONSTANT (2) LET READI BE CONSTANT (1) PU..: SUBROUTINE(NCAM,PLIST,ER) GLOBAL ! ENTRY POINT ! LET NCAM,PLIST,ER BE INTEGER ! DO[T_@N.OPL+1;BLK_@PLIST+1] ! PURGE(I.BUF,.E.R.,$BLK,N.OPL,$T) ! IF .E.R.= -6 THEN .E.R._ -2006 !SET UNDEFINED MESSAGE ! IF .E.R. = -16 THEN GO TO ZPURG ! IER. RETURN ! ZPURG:X_$[T_@I.BUF+1] AND 377K !SET X TO THE SECTOR ADDRESS TI,BLK_0 !START WITH BLK ZERO TEST: IF TI=X THEN GO TO FOUND !IF MATCH THEN STOP SEARCH BLK_BLK+1 !STEP THE BLOCK ADDRESS TI_(TI+14)/$SECT2 !COMPUTE THE NEXT LOGICAL TI_$1 !BLOCK ADDRESS IN TI GO TO TEST !GO SEE IF THIS IS IT ! FOUND:BLK_BLK+(-(I.BUF/64)+$TATSD-1)*$SECT2-1 ! LOC_$T/400K+@PK.DR !COMPUTE ADDRESS IN BUFFER LOCK.(-2,3)?[RETURN] !LOCK DISC DR.RD(READI,-2,BLK) !READ THE BLOCK IF[T_$(LOC+8)]THEN[IF T-N.OPL THEN [ER_-7;GO TO EXIT]] !CHECK !SECURITY ۵$LOC _ -1 !PURGE THE FILE DR.RD(WRIT,-2,BLK) !WRITE THE BLOCK EXIT: LOCK.(-2,5) !UNLOCK RETURN !RETURN END END END$ SPL,L,O ! NAME: DP.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME DP..(8) "92002-16008 760511" ! ! LET INPRS, \INVERSE PARSE ROUTINE EXEC, \SYSTEM OPEN, \FMGR OPEN READF \FMGR READ BE SUBROUTINE,EXTERNAL ! ! ! LET C.BUF, \INPUT BUFFER ECH., \ITS LENGTH CAM.O \LOG LU BE INTEGER,EXTERNAL ! ! ! DP..: SUBROUTINE GLOBAL B377_377K;UBLK_20000K !SET BLANK AND MASK ASSEMBLE["CCB"; \REPLACE THE FIRST DELIM "EXT C.DLM";\ "ADB C.DLM";\ "CLE,ERB";\ "LDA 1,I";\ "AND B377";\ "IOR UBLK";\ "STA 1,I";\ "SEZ";\ "INB"] ADD_.B. CALL EXEC(2,CAM.O,$ADD,@C.BUF-ADD+ECH.) RETURN END END END$ SPL,L,O ! NAME: RU.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: A.M.G. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARDǗ COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME RU..(8) "92002-16008 761004" ! ! LET BUMP., \UPDATES JOB TIME SET.T, \RESETS JOB TIMER MSS., \PRINTS ERROR MESSAGE EXEC, \SYSTEM CALLS RMPAR, \RETRIEVE PARAMETERS FM.ER, \SEND MESS. TO LOG IDRPL, \10-2:RP,XX PROCESSOR IDRPD, \10-2:RP,,XX PROCESSOR READF, \10-2FMGR READ RECORD IER., \CHECK FMGR ERROR OPEN., \INTERNAL OPEN ROUTINE .RENM, \10-2 RENAMING MOD. IN SES MODE SESSN, \10-2 TEST IF IN SESSION MODE .EXCP, \10-2 TEST IF PROG CAN BE RENAMED WRITF \FMGR WRITE RECORD BE SUBROUTINE,EXTERNAL ! LET .DFER \3-WORD TRANSFER BE SUBROUTINE,EXTERNAL,DIRECT ! !10-2 LET IFBRK BE FUNCTION,EXTERNAL !CHECK BREAK FLAG. LET TL. BE FUNCTION,EXTERNAL,DIRECT !CHECK RUN TIME LIMIT. ! LET .E.R., \FMGR ERROR LOC. O.BUF, \DOB BUFFER TL.P, \RUN TIME LIMIT VALUES CAD., \COMMAND ADD. IN TABLE ACTV., \JOB ACTIVE FLAG NO.RD, \COMMAND R*EAD FLAG G0.., \GLOBAL TABLE ADDRESS BUF., \BUFFER USED BY RP C.BUF, \TRANSLATED "RU" COMMAND ECH., \LENGTH OF COMMAND TMP., \ID SEG TEMP. STORAGE SCR., \SECOND 2 COMMAND CHARS. I.BUF, \10-2 DCB FOR :RP,XXXX N.OPL \10-2 SC & CRN FOR OPEN BE INTEGER,EXTERNAL ! LET SREQ BE CONSTANT (100027K) LET XTEMP BE CONSTANT(1721K) ! LET PTR,PTR1,PTR2,PTR3,PTR4,PTR5,PTR6 BE INTEGER !10-2 LET PAR(4),PAR5,PARM1,PARM(7) BE INTEGER LET SAVE BE INTEGER LET ABEND(4),ABX(7) BE INTEGER LET TIME(4) BE INTEGER LET JOB BE REAL LET LM(3) BE INTEGER LET NNAM(3) BE INTEGER !10-2-76 (DLB) LET RN,BAT BE REAL LET DUM,DUX BE INTEGER LET T1,T2 BE INTEGER ! !10-2 INITIALIZE PAR,PAR5,PARM1,PARM \ !10-2 TO 4(0),3,8(0) INITIALIZE ABEND,ABX TO " ABEND XXXXX ABORTED " INITIALIZE TIME,JOB,LM TO " ABEND JOB LIMIT " INITIALIZE RN TO "RUN " ! ! ! ! ! ! RU..: SUBROUTINE(NUM,PRAMS,ERR) GLOBAL LET NUM,PRAMS,ERR BE INTEGER CRCNT,PFL,RPSW _ 0; DM_@BAT !SET DUMMY TIME LOCATION IFNOT NUM THEN [ERR_50; RETURN] !ARE THERE ENOUGH PARAMS? IF PRAMS = 3 THEN GOTO GETN !CHECK NAME PARAMETER. ! ERR _ 56; RETURN !BAD PARAMETER. GETN: PTR6 _ [PTR5 _ [PTR4 _ [PTR3 _ \ [PTS2,PTR2 _ [PTR2F _ [PTR1 _ \ @PRAMS+1] + 3] + 1] + 4] + 4] \ + 4] + 4 ! ! IF FIRST PRAM NOT SUPPLIED AND 0G IS NUMERIC USE IT INSTEAD ! IFNOT $PTR2F THEN [ \ IF G0.. = 1 THEN PZ2TS2 _ @G0..+1] !10-2 CALL .DFER(PARM1,$PTR1) !SET NAME IN RP.. CALL CALL .DFER(NNAM,$PTR1) !10-2 SET NAME FOR DUP CALL ! CRCNT_ECH. !SET COMMAND LENGTH ! 10-2 CALL SESSN($(@G0..+1))?[GOTO TSET] !10-2 TEST IF IN SESSION MODE CALL .EXCP(NNAM)?[GOTO TSET] !10-2 TEST IF CAN BE RENAMED? CALL .RENM(NNAM,.E.R.,RPSW) !10-2 RENAM MODULE IF POSSIBLE IF .E.R. THEN ERR _ .E.R. !10-2 IF ERROR BRING FORWARD IF ERR THEN RETURN !10-2 CHECK IF ANY ERRORS ! TSET: IF ACTV. THEN[IFNOT TL.() THEN [ \IF IN ACTIVE JOB, CALL SET.T(TL.P,BAT); \SET RUN TIME LIMIT, PFL _ 1; DM _ @DUM]] !IF NECESSARY. TRNON: CALL SET.T(T1,T1) IF SCR. = "IH" THEN CRCNT_0 !IF "IH" PASS ZERO LENGTH $1 _ -1 !MUST PASS THE CALL EXEC(SREQ,NNAM,$PTS2,$PTR3, \10-2 WHOLE COMMAND $PTR4,$PTR5,$PTR6, \BUFFER TO EXEC. C.BUF,CRCNT) ! GOTO REPLC !ERROR EXIT. ! CHKB: IF [SAVE _ $1] = -1 THEN \ GOTO ABCHK ! CALL RMPAR($(@G0..+41)) ABCHK: IF PFL THEN CALL BUMP.(BAT,TL.P) !UPDATE JOB TIME CALL SET.T(BAT,$DM) !RESET THE RUN TIME LIMIT .E.R._0 IF $$XTEMP # 100000K THEN GO TO EX !FIND OUT IF PROGRAM DIED ! CALL .DFER(ABX,NNAM) !10-2SET UP THE ABORT MESSAGE CALL FM.ER(2,ABEND,11) !SEND IT TO THE LOG. IFNOT ACTV. THEN GO TO EX !IF NOT IN JOB GO EXIT ! CALL OPEN.(O.BUF,TMP.,$(@TMP.+3),0) !OPEN THE LIST FILE IF $(DM+1)> -1 THEN [ \IF TIME OUT ABORT IF T2 < 0 THEN [ \ IF PFL THEN JOB _ RN; \IF RN LIMIT USE RN WRITF(O.BUF,.E.R.,TIME,9); \SEND THE ,MESSAGE TO LP NO.RD,CAD._6; \TIME OUT ALWAYS ABORTS IER.]] !CHECK FOR ERRORS CALL WRITF(O.BUF,.E.R.,ABEND,11) !SEND THE ABEND MESSAGE IF .E.R.= -17 THEN .E.R._0 !SET OVERFLOW ERROR TO 0 !10-2EX: IF RPSW THEN CALL RP..(2,PAR,ERR) !PU THE ID IF RP'ED EX: IF RPSW THEN CALL IDRPD(NNAM,.E.R.); \10-2 CALL EXEC (5,-1) !10-2 RELEASE ANY TRACKS IF .E.R. THEN ERR _ .E.R. !10-2 IER. !REPORT ANY OTHER ERRORS IF ERR THEN RETURN !10-2 CHECK IF ANY ERRORS CALL EXEC(14,1,C.BUF,40);ECH._.B. !10-2 GET RETURNED STRNG FROM PROG IF ECH.>40 THEN RETURN !10-2 BUG IN OP-SYSTEM IFNOT ECH. THEN RETURN !10-2 CHECK IF STRING RETURNED IF (C.BUF AND 177400K)=35000K THEN[ \10-2 CHECK IF STARTING : NO.RD _ -1; C.BUF _ C.BUF-15000K] !10-2 SET RD BF FGG,CHANGE : > SPA RETURN ! REPLC: SAVE _ $1 CALL SET.T(BAT,$DM) !RESET THE JOB TIMER IF RPSW THEN GOTO PRMSG ! IF SAVE # "05" THEN GOTO PRMSG ! !10-2 CALL RP..(1,PAR5,ERR) !IF EXEC COULDN'T FIND CALL OPEN. (I.BUF,$PTR1,N.OPL,5) !10-2 CALL READF (I.BUF,.E.R.,BUF.,128) !10-2 FOR LATER TESTS IER. !10-2 CALL IDRPL(I.BUF,.E.R.,NNAM) !10-2 IF .E.R. THEN ERR _ .E.R. !10-2 IF ERR = 19 THEN GO TO ERTS !PROGRAM, LOOK FOR A FILE. IF ERR = 16 THEN[ \IF NON PROGRAM FILE FILE. ERTS: IF BUF.= -1 THEN RETURN; \IF EOF AT START OR IFNOT ($(@BUF.+1) AND 377K) THEN RETURN; \ A BINARY FILE GO TO TRANS] !DON'T TR ELSE DO TR. ! IF ERR THEN RETURN RPSW _ 1; GOTO TSET !FILE AND TRY AGAIN. ! TRANS: C[AD.,NO.RD _ 1 !CAN'T FIND PROGRAM. ERR _ 0; RETURN !TREAT AS A "TR" FILE. PRMSG: ERR _ 49 IF RPSW THEN CALL IDRPD(NNAM,T1); \10-2 IF CANNOT RUN :RP,X > :RP,,X CALL EXEC (5,-1) !10-2 RELEASE ANY TRACKS PICKED UP RETURN END END END$ SPL,L,O ! NAME: ST.DU ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME ST.DU(8) "92002-16008 760622" ! THIS IS THE RTE FMP FMGR ROUTINE TO STORE ! AND DUMP FILES. ! ! DU,NAME,LU,OP1,OP2,OP3 ! ! O R ! ! ST,LU,NAME,OP1,OP2,OP3,OP4 ! ! ! W H E R E: ! ! ST IS STORE. ! DU IS DUMP. ! ! NAME ! NAME IS THE FILE TO BE STORED OR DUMPED. ! ! LU IS EITHER THE SOURCE OR DESTINATION ! DEVICE AND MAY BE A FILE REFERENCE. ! ! OP1 IS A MEDIUM ASC CODE AS FOLLOWS: ! AS ASCII DATA ! BR BINARY RELOCATABLE DATA ! BA BINARY ABSOLUTE DATA ! MT MAG TAPE NORMAL FORMAT ! MS MAG TAPE SIO FORMAT ! ! OP2 IS AN END OF FILE OPTION ! FLAG -- TWO ASC CHARACTERS: ! SA SAVE END OF FILES IN THE ! NEW FILE. ! IN INHIBIT ALL LEADER, TRAILER, ! END OF FILE TRANSFERS; ! DOES NOT APPLY TO FINAL ! < EOF ON A DISC FILE. ! ! OP3 IS THE NUMBER OF THE FIRST FILE ! TO BE TRANSFERRED (APPLIES TO ! FILES OF TYPE ZERO) (DEFAULT=1) ! ! OP4 IS THE NUMBER OF FILES TO BE ! TRANSFERRED (APPLIES TO FILES ! OF TYPE ZERO) (DEFAULT= ) ! ! N O T E: OP3 AND OP4 ARE RELATIVE TO CURRENT POSITION. ! ! DEFINE EXTERNALS ! LET I.BUF,O.BUF,BUF. BE INTEGER,EXTERNAL ! LET N.OPL,.E.R. BE INTEGER,EXTERNAL ! LET CREA.,OPEN.,LOCF,\ EXEC,READF,WRITF,\ MSS.,RWNDF,\ IER.,CK.SM,CLOSE BE SUBROUTINE,EXTERNAL ! LET IFBRK BE FUNCTION,EXTERNAL ! LET DU..,ST.. BE SUBROUTINE ! LET SECT2 BE CONSTANT(1757K) LET AS BE CONSTANT (40523K) LET BR BE CONSTANT (41122K) LET BN BE CONSTANT (41116K) LET BA BE CONSTANT (41101K) LET MT BE CONSTANT (46524K) LET MS BE CONSTANT (46523K) LET IH BE CONSTANT (44510K) LET SA BE CONSTANT (51501K) ! ST..: SUBROUTINE(NPD,LISTO,ERD) GLOBAL ERD_ -1 !SET DUMP FLAG DU..(NPD,LISTO,ERD) RETURN END ! DU..: SUBROUTINE(NPS,LISTS,ERS) GLOBAL LI12_[LIS8_[LIS4_@LISTS+4]+4]+4 ! LIS21_[LIS17_[LIS13_[LIS9_[LIS5_[LIS1_\ @LISTS+1]+4]+4]+4]+4]+4 ! ! PRESET DEFAULT OPTIONS ! OBUF,SPDCB_@O.BUF !SET DCB ADDRESS FOR SPACING IBUF_@I.BUF !SET INPUT DCB ADDRESS BUFF,BUFA,BF_@BUF. DO[F1,SIOI,EOFF,CK,SIO,FLG_0;LDR_100000K] DO[SUBF_400K;F2,TYP,DUMP_1] IFNOT ERS+1 THEN [ERS,DUMP_0;SPDCB_IBUF] !SET STORE OPTIONS IF NPS<2 THEN [ERS_55;RETURN] DT_3 !SET DEFAULT TYPE ! ! ANALYZE OPTIONS ! ! FIRST THE TYPE FLAG ! IFNOT $LIS8 THEN GO TO ST3 !OPTION IS NULL GO TO CHECK NEXT IF $LIS9 = MS THEN [SIO_1;BUZrFA_BF+1;\ LIS9_LIS9+1] IF $LIS9=" " THEN GO TO ST3 IF $LIS9 = AS THEN [SUBF_410K;GO TO ST3] IF $LIS9 = BR THEN[CK,SUBF_310K;\ DT_5; GO TO ST3] IF $LIS9 = BN THEN[SUBF_310K; \ GO TO ST3] IF $LIS9 = BA THEN[CK,SUBF_2310K;TYP_0;\ DT_7;GO TO ST3] IF $LIS9 = MT THEN GO TO ST3 IF $LIS9 = SA THEN[EOFF_1;GO TO ST2] IF $LIS9 = IH THEN[LDR_0;GO TO ST2] ! STER1:DO[ERS_56; RETURN] ! ! CHECK FOR OP2 ! ST3: IF $LI12#3 THEN GO TO ST2 ! IF $LIS13 = SA THEN[EOFF_1;GO TO ST5] IF $LIS13 = IH THEN[LDR_0;GO TO ST5] ! GO TO STER1 !ILLEGAL OPTION ! OPT2 WAS FOUND IN OP1 LOCATION SO ! ADJUST ADDRESSES AND SKIP ! OPT2 CHECK. ! ! ST2: DO[LIS21_[LIS17_LIS13]+4] ST5: OPEN.(I.BUF,$LIS1,N.OPL ,SUBF+1) LOCF(I.BUF,.E.R.,ID,ID,ID,ISZ,ILU,INTY,ISZ2) IER. IF $LIS17>0 THEN F1_$LIS17-1 IF $LIS21>0 THEN F2_$LIS21, ELSE \ [IFNOT $LIS21 THEN [IF$LIS17>0 THEN GOTO ST6,ELSE[\ IF INTY THEN F2_9999]]] ! ST6: SUBF_(SUBF AND 110K)+LDR \SET OUTPUT FUNCTION OR[IF (INTY AND 177775K)=5 THEN 100K,ELSE 0] IF $LIS9=AS THEN SUBF_SUBF AND 177677K ! IF A STORE OPERATION CREAT THE FILE ! SZ1_[SZ_[TY_[OPLS_@N.OPL+5]+2]+1]+1 ! IFNOT ERS+2 THEN[ERS_0;GO TO ST12] !COPY CALL THE FILE IS OPEN IF DUMP THEN GO TO ST10 ! ! SET DEFAULTS ! IFNOT $TY THEN $TY_[IF INTY THEN INTY,\ ELSE DT] IFNOT $SZ THEN $SZ_[IF INTY THEN ISZ->1,\ ELSE $SECT2->2] IFNOT $SZ1 THEN[IF INTY THEN $SZ1_ISZ2] ! ! CREAT THE FILE ! CREA.(O.BUF,$LIS5,$OPLS)?[GO TO ST10] GO TO ST12 ST10: OPEN.(O.BUF,$LIS5,$OPLS,SUBF) ST12: LOCF(O.BUF,.E.R.,ID,ID,ID,ISZ,OLU,OUTY) IER. IF INTY=6 THEN $(IBUF+2),INTY_1 IF OUTY=6 THEN $(OBUF+2),OUTY_1 ! ! BOTH IN AND OUT ARE OPEN -- ! LEADER HAS BEEN PUNCHED IF NOT SUPPRESSED. ! ! IF SIO STORE THEN SET IT UP ! IF SIO THEN [IFNOT DUMP THEN[\ SIO_0; SIOI_1;BUFF_[BUFA_BF]+1]] ! UNTIL F1=0 DO[READF($SPDCB,.E.R.,$BUFA,128,ALN);IER.;\ IF ALN<1 THEN[F1_F1- 1; IF IFBRK() THEN GO TO BRK]] ST15: READF(I.BUF,.E.R.,$BUFA,128,ALN) IF IFBRK() THEN[\ IF BREAK THEN BRK: MSS.(0);GO TO KILL] ! SEND BREAK ERROR AND GO FLUSH THE FILE IF .E.R.= -12 THEN [ALN_ -1;GO TO ST16] IER. IF ALN>0 THEN GO TO ST20 ! DATA? ! ! NO DATA -- EITHER EOF OR ZERO REG ! ! ! END OF XFER? ! ST16: IFNOT ALN+1 THEN[IF INTY THEN[F2_0;\ GO TO ST18]]!TRUE EOF-QUIT ! IF [F2_F2-1] THEN [IF EOFF THEN[ALN_-1;\ GO TO ST22],ELSE GO TO ST25] ST18: ALN_-1 IF LDR THEN GO TO ST22 ! GO TO EXIT !DONE - NO EOF REQUIRED ! ST20: DO [IF SIOI THEN [ALN_[\ IF $BUFA<0 THEN-$BUFA,ELSE\ ($BUFA+1)>-1];ID_BUFA+1],ELSE\ ID_BUFA ;IF CK THEN[\ CK.SM($ID,TYP)?[GO TO ABO];ALN_($ID-<8)+(1-TYP)*3]] FLG_1 !SET FLAG TO SAY WE WROTE A RECORD ST22: IF ALN>0 THEN[IF SIO THEN[$BUFF_-ALN;ALN_ALN+1]],\ ELSE[IF F2 THEN[IF OUTY THEN ALN_0]] WRITF(O.BUF,.E.R.,$BUFF,ALN) IF .E.R. = -6 THEN[MSS.(.E.R.);GO TO KILL] IER. IF ALN= -1 THEN[IFNOT F2 THEN GOTO EXIT,\ ELSE GO TO ST25 ] IF ALN THEN GO TO ST15 ST25: EXEC (13, ILU,EQT5) IF(EQT5 AND 37400K)=400K THEN [MSS.(2006);\ EXEC(7)] GO TO ST15 ! ABO: MSS.(7) !SEND CHECK SUM ERROR KILL: ID_-1 !SET TO ABORT THE FILE ENDIT:IF DUMP THEN RETURN IFNOT OUTY THEN RETURN IF ID<0 THEN RWNDF(O.BUF) !REWIND TO BE SURE OF PURGE CLOSE(O.BUF,.E.R.,$SZ-ID-1) !CLOSE AND IER. RETURN ! EXfd`IT: LOCF(O.BUF,.E.R.,T,ID,IOF) IER. IF OUTY < 3 THEN[ \IF TYPE 2 OR 1 IFNOT IOF THEN ID_ID-1 ] !ADJUST RB FOR ZERO OFSET IFNOT FLG THEN ID_-1 GO TO ENDIT END ! ! END END$ QfSPL,L,O ! NAME: CO.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! DATE: 741118 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME CO..(8) ! CO.. IS A MODULE OF THE RTE ! FMP PROGRAM FMGR. ! CO COPIES ALL DISC FILES ON ! ONE DISC TO SOME OTHER DISC. ! THE COMMAND IS: ! CO, CR, CR2 ! WHERE: ! CR IS THE FROM DISC ID ! CR2 IS THE TO DISC ID ! ! ! DEFINE EXTERNALS ! LET DR.RD, DU..,MSS.,FM.ER,CREAT,CLOS.\ BE SUBROUTINE,EXTERNAL ! LET PK.DR,N.OPL, DS.LU BE INTEGER,EXTERNAL LET O.BUF BE INTEGER ,EXTERNAL ! ! DEFINE LOCALS ! LET SETAD BE SUBROUTINE ! LET STLIS,FNAM(3),LTY,TNAM(3),\ OPLS, SACD, DM(14) BE INTEGER CO..: SUBROUTINE (N, LIS,ER) GLOBAL !SET UP DU.. CALL ARRAY FOR T _ @ STLIS TO @ STLIS+23 DO $T _0 LTY,STLIS,OPLS_3 !SET TYPE FLAGS ! SACD _ 51501K ! SAVE EOF MARKS ! LIS5 _ [LIS1 _ @ LIS+1]+4 ! ! SET UP THE OPTION LIST ADDRESSES ! OPS2_ [OPS1_[OPT2 _ [OPCR2_ [OPL_ [OPT1_ [\ OPCR1_ @N.OPL+1]+1]+3] \ + 1]+1]+1]+1 ! BLK_0 FOR T _ OPCR1 TO OPS2 DO $T _ 0 ! $ OPCR1 _ $ LIS1 $ OPCR2 _ $ LIS5 ADD_128 !SET UP ADDRESS INCREMENT ! DRBF _ @PK.DR ! SET PACK BUFADD. ! ! CHECK FOR LEGAL DISCS. ! IF $ LIS5 THEN [DR.RD(1,$LIS5,0)?[ \ GO TO NODES] ; LU_$$@DS.LU\ ;GO T=?O INCK] ! NODES:DO[ER_21;RETURN]! NO DIS C EXIT ! INCK: IFNOT $LIS1 THEN GO TO NODES ! SETAD ? [GO TO NODES] IF LU = $$@ DS.LU THEN GO TO NODES ! ! BOTH DISCS ARE DEFINED AND ! SEPERATE ! ! START TRANSFER ! XFER: SETAD? [RETURN ] IF $PKD<0 THEN GO TO XFER ! IFNOT $PKD3 THEN GO TO XFER IF $PKD5 AND 177400K THEN GOTO XFER !SKIP EXTENTS FM.ER (1, FNAM,3) ! SEND CURRENT NAME TO LOG CREAT(O.BUF,.E.R.,$PKD,$OPS1,$PKD3,$PKD8,$LIS5)! CREAT THE FILE IF .E.R.<0 THEN [MSS.(.E.R.-2000);GO TO XFER] ERR_-2 !SET COPY CALL FLAG FOR DU ROUTINE DU..(4, STLIS,ERR) !CALL STORE TO TRANSFER ! IFNOT ERR THEN GO TO XFER ! ER _ ERR- 2000 ! BAD: MSS. (ER) !PRINT MESSAGE ! IF ER < 2000 THEN [ER_0; GO TO XFER] ! ER _ 22 RETURN END ! ! SETAD:SUBROUTINE FEXIT ! READ DIRECTORY ! AND SET UP ST CALL ! IF ADD = 128 THEN [ \ DR.RD (1,$LIS1,BLK)?[FRETURN];\ ADD_ 0; BLK_ BLK+1] ! PKD8_[PKD7_[PKD6_[PKD5_[PKD3_[PKD2_[PKD_ \ DRBF+ADD]+2]+1]+2]+1]+1]+1 ! ADD_ ADD+16 !SET ADD FOR NEXT TIME IFNOT $PKD THEN FRETURN !END OF DIR. T1_@FNAM !SET TO MOVE T2_@ TNAM !NAME TO CALL FOR T _ PKD TO PKD2 DO[$T1,$T2_ $T;\ T1_T1 +1; T2_T2+1] ! N.OPL,$OPL_$PKD8 ! SET SECURITY CODES ! $OPT1,$OPT2_$PKD3 ! SET TYPES $OPS1_$PKD6/2 ! SET DEST SIZE $OPS2_$PKD7 ! SET DEST REC. SIZE RETURN ! DONE - RETURN END END END$ SPL,L,O ! NAME: SP.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! DATE: 780405 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAfM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME SP..(8) "92002-16008 REV.1826 780405" ! ! MODIFIED: TO CLEAR WRITTEN-ON FLAG IN DCB SET-UP 780106 GLM ! MODIFIED: TO SET LAST PTN USED (ID22)=0 780221 GLM ! MODIFIED: TO BYPASS ID EXTENSION SAVE FOR TYPE 5 780405 BL ! ! THE SP ROUTINE SAVES A PROGRAM ! IN A FILE. THE FIRST TWO SECTORS ! ARE SET UP TO ALLOW THE PROGRAM ! TO BE RESTORED TO THE SYSTEM ! ! THIS PROGRAM IS INVOKED BY : ! SP, NAME ! WHERE: ! NAME IS THE NAME OF THE ! PROGRAM TO BE SAVED. ! ! DEFINE THE EXTERNALS ! LET CREA., EXEC,\ WRITF,READF,RWNDF,\ IER.,OPEN. BE SUBROUTINE,EXTERNAL ! LET ID.A BE FUNCTION,EXTERNAL ! LET BUF.,O.BUF,I.BUF,N.OPL BE INTEGER,EXTERNAL ! ASSEMBLE ["EXT $OPSY";"EXT $IDEX"] ! ! DEFINE INTERNAL ROUTINES ! LET ADS, SP.. BE SUBROUTINE ! LET MF BE FUNCTION ! ! DEFINE CONSTANTS ! LET XEQT BE CONSTANT (1717K) LET SECT2 BE CONSTANT (1757K) LET SECT3 BE CONSTANT (1760K) SP..: SUBROUTINE (N,LIS,ER) GLOBAL IFNOT N THEN [ER_50; RETURN] PAD_@ LIS +1 ID27_[ID_ ID.A($PAD)?[ER_14 ; RETURN]]+26 ! BF,T1_@I.BUF FOR T_BF TO BF +127 DO $T_0 FOR T_ID TO ID+25 DO [$T1_ $T;T1_T1+1] T1_T1+2 FOR T_ID+28 TO ID+29 DO [$T1_$T;T1_T1+1] ADS (BF+11) ASSEMBLE ["LDA $OPSY";"STA OPSY";"LDA $IDEX";"STA IDEX"] T_$ID15 AND 7 !GET TYPE OF PGM IF T>1 THEN [IF OPSY = -9 OR T#4 THEN GO TO SP2] !LEGAL CONTINUE ER_56 !ILLEGAL PROGRAM TYPE RETURN ! SP2: IF OPSY = -9 AND T#5 THEN [ \IF RTE-IV & NOT SEG. IF $ID22 >= 0 +THEN[$ID22_ ($ID22 AND 177700K)]; \IF PTN NOT ASSIGNED \SET LAST PTN USED=0 \ FOR DISP (780221 GLM) IF $ID29 THEN [ \AND IF EMA T_$(IDEX+(($ID29 AND 176000K)-<6));\THEN INDEX TO ID EXT T1_T1+5; \AND $T1_($T AND 37K) OR 100000K; \SAVE ID EXT WORD 0 T1_T1+1; \AND T_T+1; \SAVE ID EXT WORD 1 $T1_$T AND 176000K]] ! IF $ID15 AND 20K THEN[$(BF+7)_$ID12;\ T1_ID15 ;\ FOR T_ID23 TO ID26 DO[\ $T_$[T1_T1+1]];\ ID27_ID20] $ID16,$ID17,$(BF+8)_0 $ID18_($ID18 AND 167777K) SZR_[SZ_[TY_[CR_ @N.OPL+1]+1]+1]+1 $SZR_128 $TY_6 ! IFNOT $CR THEN $CR_-2 ! $SZ_[XF_MF( ID23)+ MF( ID25)]+1 ! CREA. (O.BUF,$PAD,N.OPL)?[ER_-15;RETURN] ! $(@O.BUF+2)_1 !FORCE TO TYPE 1 CALL EXEC(1,2,BUF.,128,$1756K-1,0) !READ THE SET UP WORD ! $ID35_$(125+@BUF.)!MOVE TO ID BLOCK I.BUF_ -1 !SET EOF FOR THOSE WHO DON'T KNOW BETTER ! FOR T_BF TO ID33 DO[$ID34_$ID34+$T] ! WRITF(O.BUF,.E.R.,I.BUF) ! WRITE ID IER. ! ADS ( [IBUF_@O.BUF+16]+2) ! $IBUF_[IF[T_$ID27]<0 THEN 3,ELSE 2] ! SET DISC LU ! $ID12_1 $ID13_(T AND 77600K)-<9 $ID14_( T AND 177K) $ID15_$SZ-<1 $ID16_128 $ID17_201K $ID18_ [IF T<0 THEN $ SECT3,ELSE $SECT2] $(ID18+1)_$XEQT $ID23_0 !780106 GLM RWNDF($IBUF,.E.R.) IER. ! RDP: READF ($IBUF,.E.R.,$ID26,256) ! IER. ! WRITF(O.BUF,.E.R.,$ID26,[IF[XF_XF-2]<0 \ THEN 128, ELSE 256]) ! IER. ! IF XF>0 THEN GO TO RDP ! RETURN ! END ! MF: FUNCTION(MAD) _ !COMPUTE # BLOCKS OF FILE SPACE MFV_($( MAD+1)-$MAD +177K) >-7 RETURN END ! ADS: SUBROUTINE (BASE) ID18_[ID17_[ID16_[ID15_[ID14_[ID13_[ID12\ _ BASE]+1]+1]+1]+1]+1]+1 ID35_[ID34_[ID33_[ID29_[ID26_[ID25_[ID24_[ID23_[ID22\ 780221 GLM _[ID20_ID18+2]+2]+1]+1]+1]+1]+3]+4]+1]+1 ! 780221 GLM RETURN END END END$ SPL,L,O ! NAME: MS.. ! SOURCE: 92002-18008 ! RELOC: 92002-16008 ! PGMR: G.A.A. ! DATE: 740801 ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME MS..(8) ! ! THIS ROUTINE IS PART OF THE RTE ! FILE MANAGEMENT PACKAGE ! FMGR PROGRAM. ! IT MOVES A FILE INTO THE SYSTEM ! AREA AND SETS UP THE TAT ! FOR THE TRACKS USED TO ! POINT TO THE INDICATED PROGRAM. ! ENTRY IS ON A : ! LS,NAMR,PROG,IH ! 1 5 9 ! WHERE: ! LS GETS TO THIS ROUTINE ! NAMR IS THE FILE NAME REFERENCE INCLUDING SECURITY AND ! CARTRIDGE INFORMATION ! PROG IS PRESENT THE FILE IS TO ! BE ASSIGNED TO THE NAMED ! PROGRAM (IF NOT GIVEN THE ! LS AREA IS ASSIGNED TO ! THE EDITR PROGRAM) ! IH (OPTIONAL) INDICATES THE FILE ! IS NOT TO BE SET UP AS THE CURRENT ! LS FILE. ! DEFINE EXTERNALS ! SUBS. LET OPEN.,IWRIS,WEOFS,\ READF,EXEC, MSS.,\ FM.ER,CONV.,PRTM,\ WRIS, IPUT BE SUBROUTINE,EXTERNAL LET JER. BE SUBROUTINE,EXTERNAL,DIRECT ! ! FUNCTIONS ! LEJT ID.A BE FUNCTION,EXTERNAL ! ! ARRAYS AND INTEGERS ! LET BUF.,I.BUF,N.OPL,CUSE.,.E.R. BE INTEGER,EXTERNAL ! ! DEFINE CONSTANTS. ! LET TAT BE CONSTANT (1656K) LET TATLG BE CONSTANT (1755K) LET XEQT BE CONSTANT (1717K) LET MS(3),MSI,MST(4),MS2 BE INTEGER INITIALIZE MS ,MSI,MST ,MS2 TO " LS LU X TRACK XXX" LET ED(3) BE INTEGER INITIALIZE ED TO "EDITR" LET A BE CONSTANT ( 0 ) ! ! MS..: SUBROUTINE(CO,LIS,ER) GLOBAL ! LIS9 _[LIS5 _[LIS1_@LIS+1]+4 ]+4 !SET PRAM ADDRESSES EXEC (5,-1) PRTM(0) ID_ ID.A ($[IF $LIS5 THEN LIS5 ,ELSE\\ @ ED ])?[ER_14;RETURN] OPEN. (I.BUF, $LIS1,N.OPL,400K) DO [IWRIS(T); TR_ $A; IF T THEN[\ ER_5; RETURN]] ! REPORT THE TRACK ! LU_(TR AND 77400K)-<8 ! SET LU ! CONV.(LU,MSI,1) ! PUT IN MESS ! CONV.(TR AND 377K,MS2,3) ! PUT TRACK ! MSS.(2015) ! TELL HIM ITS ! FM.ER(1,MS,9) ! COMMING. SEND IT ! LSRD: READF (I.BUF,.E.R., BUF.,70,L) JER. IF L<0 THEN GOTO LSEOF ! WRIS (BUF.,-(L-<1),T) ! IF T THEN [ER_5;RETURN] ! GO TO LSRD ! LSEOF:WEOFS(T) ! FOR T_ $TAT TO $TAT-$TATLG DO[\ IF $T = $XEQT THEN IPUT(T,ID)] ! TR_(TR-<7) AND 177600K IF $LIS9 # "IH" THEN IPUT (1767K, TR) ! PRTM(TR) ! RETURN THE LS WORD ! RETURN END END END$ ASMB,R,L,C HED "RP.." FMGR ROUTINE TO DO :RP,X,Y * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: D.L.B. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE -WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** NAM RP..,8 92002-16008 761004 ENT RP.. EXT IDSGA,MSS.,EXEC,OPEN.,READF,IER.,.E.R. EXT IDRPL,IDRPD,.ENTR,I.BUF,N.OPL,BUF. SPC 1 A EQU 0 SPC 1 DUMMY NOP DUMMY PARAMETER PBUF NOP PARAMETER BUFFER IERR NOP RETURNED ERROR PARAMETER RP.. NOP ENTRY JSB .ENTR DEF DUMMY LDA PBUF CALCULATE THE ADDRESS OF THE ADA O4 TWO PARAMETERS LDB A,I GET PARAMETER TYPE INA BUMP TO THE NAME STA PRAM2 SZB,RSS CHECK IF SECOND PARAMETER JMP SKPCC SKIP THE :RP,,XXXXX SPC 1 JSB IDSGA FIND IF ID FOR 2ND PARAMETER DEF *+2 PRAM2 DEF * SEZ,RSS FOUND? JMP FOUN1 YES, :RP,, IT JSB MSS. NO, OUTPUT FMGR 009 DEF *+2 DEF D2009 JMP SKPCC NOW TRY :RP, SPC 1 FOUN1 JSB IDRPD DELETE THE ID DEF *+3 DEF PRAM2,I NAME OF ID DEF DUMMY DONOT CHANGE 6P IF GOOD RETURN SZA CHECK IF ANY ERRORS JMP EXIT YES, RETURN NOW SPC 1 JSB EXEC NO, RELEASE ANY TRACKS DEF *+3 DEF O5 DEF OM1 SPC 1 SKPCC LDA PBUF,I GET THE 1ST PARAMETER TYPE ISZ PBUF POINT TO PARAMETER NAME SZA,RSS CHECK IF 1ST PARAMETER JMP RP..,I NO, JUST RETURN DONE JSB IDSGA YES, FIND IF EXISTS? DEF *+2 DEF PBUF,I NAME OF 1ST PARAMETER SEZ CHECK IF FOUND? JMP FOUN2 NO, THEN PROCEED TO :RP, LDA D23 YES, DUPLICATE PROGRAM EXIT STA IERR,I RETURN FMGR 023 JMP RP..,I ERROR RETURN, WITH ERROR CHANGED!! SPC 1 FOUN2 JSB OPEN. NOW TRY TO OPEN UP THE FILE DEF *+5 DEF I.BUF DCB FOR FILE DEF PBUF,I FILE NAME DEF N.OPL SC,CRN DEF O5 NON EXC, FORCE TYPE 1 JSB READF NOW READ THE 1ST RECORD DEF *+5 DEF I.BUF DEF .E.R. DEF BUF. DEF D128 JSB IER. DEF *+1 JSB IDRPL NOW DO THE :RP, DEF *+4 DEF I.BUF DCB FOR FILE DEF DUMMY GET ERROR LOCALLY DEF PBUF,I SZA,RSS CHECK IF ANY ERROR? JMP RP..,I NO, RETURN DONE JMP EXIT YES, SET THE ERROR NUMBER SPC 1 O4 OCT 4 O5 OCT 5 D23 DEC 23 D128 DEC 128 D2009 DEC 2009 OM1 OCT -1 END ASMB,R,L HED "SESSN" ROUTINE TO FIND IF IN SESSION MODE * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: D.L.B. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** NAM SESSN,7 92002-16008 REV.1826 780403 ENT SESSN EXT .ENTR,$OPSY SPC 1 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 * CALLED: * JSB SESSN * DEF *+2 * DEF 0G LOGICAL UNIT OF SESSION TERMINAL * A = -1 IF NO SESSION * A = ASCII OF THE TERMINAL LOGICAL UNIT * E-REG = 1 IF NO SESSION * E-REG = 0 IF SESSION FOUND * ALGORITHM * WHEN LU IS CONVERTED TO ASCII, IT MUST MATCH THE LAST TWO * CHARACTERS OF THE CALLING PROGRAMS NAME AND THE SESSION BIT * IN THE IDSEGMENT (WORD 21, BIT 13) MUST BE SET. SPC 1 LU NOP GIVEN 0G SESSN NOP ENTRY JSB .ENTR DEF LU LDA LU,I GET POSSIBLE SESSION LU CLB CONVERT TO ASCII DIV D10 ALF,ALF IOR B IOR "00" STA LU SAVE FOR LATER LDA $OPSY OP SYSTEM IDENTIFIER ERA,ERA GET MAPPED BIT TO E LDB XEQT GET LAST TWO CHARS OF MY NAME ADB D13 INDEX INTO MY ID SEGMENT SEZ MAPPED SYSTEM? JMP XLOD1 YES DLD B,I NO, GET LAST 2 CHARS CONT1 RRR 8 GET LAST TWO IN B-REG LDA XEQT NOW CHECK IF SESSION BIT IS SET ADA D20 SEZ MAPPED SYSTEM? JMP XLOD2 YES LDA A,I GET WORD 20 FROM ID SEGMENT CONT2 AND SESBT MASK OFF ALL EXCEPT SESSION BIT CPB LU CHECK IF LAST TWO CHARS MATCH CLE,SZA,RSS AND SESSION BIT IS SET CCA,CCE NO, RETURN WITH NO SESSION LDA B YES, RETURN A & B = ASC 0G JMP SESSN,I DONE SPC 1 XLOD1 XLA B,I GET 2ND WORD OF NAME INB XLB B,I GET 3RD WORD OF NAME JMP CONT1 CONTINUE XLOD2 XLA A,I GET WORD 20 FROM ID SEGMENT JMP CONT2 CONTINUE SPC 1 "00" ASC 1,00 D10 DEC 10 D13 DEC 13 D20 DEC 20 SESBT OCT 20000 END ASMB,R,L,C HED ".RENM" ROUTINE TO RENAM MODULES WITH FMGR :RU,XXX * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: D.L.B. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** NAM .RENM,8 92002-16008 761004 ENT .RENM EXT .ENTR,IDDUP,IDSGA,.DFER SPC 1 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 * PURPOSE: RENAME A PROGRAM BEFORE RUNNING IT IF IN SESSION MODE * * < CALLED: CALL .RENM (NNAM,IERR,RPSW) * WHERE: * NNAM = 3 WORD BUFFER THAT CONTAINS THE GENERIC NAME * RETURNED WITH THE NEW NAME * IERR = NON ZERO IF LACK OF SUCCESS IN RENAMING * RPSW = RETURNED AS 1 IF AN IDSEGMENT IS PRODUCED * SPC 1 OLDNA NOP THREE WORD NAME BUFFER IERR NOP RETURNED ERROR CODE RPSW NOP CREATED NEW ID FLAG .RENM NOP ENTRY JSB .ENTR DEF OLDNA JSB .DFER GET NAME INTO INTERNAL BUFFER DEF NEWNA NEW NAME DEF OLDNA,I GENERIC NAME LDA XEQT GET LAST 2 CHARS OF MYNAME ADA D13 AND PROPAGATE TO NEW NAME DLD A,I RRR 8 GET IN B-REG STB TEMP1 SAVE LAST 2 CHARS OF FMGXX'S NAME DLD NEWNA NOW MODIFY OLD NAME TO NEW NAME AND O377 CHECK FOR IMBEDDED SPACES CPA SPACE ? LDA DOT YES, REPLACE SPACES WITH .'S IOR NEWNA MERGE IN 1ST CHARACTOR STA NEWNA LSR 8 NOW CHECK 2ND CHARACTOR CPB SPACE IS IT A SPACE? LDB DOT YES , CHANGE TO DOT LDA TEMP1 NOW GET LAST 2 CHARS OF NAME RRL 8 POSITION IOR SPACE MAKE 6TH CHAR A SPACE STB NEWNA+1 AND SAVE BACK STA NEWNA+2 IN THE NEW NAME BUFFER SPC 1 JSB IDSGA NOW FIND IF GENERIC NAME IS IN CORE ID? DEF *+2 DEF OLDNA,I SO THAT WE CAN RENAME IT? SZA,RSS YES, GO RENAME IT JMP MOVEB NO, CHANGE OLD NAME TO NEW NAME & RETURN ADA D26 BUMP TO WORD 27 OF IDSEG STA TEMP1 SAVE THE ID ADDRESS FOR LATER CHECK AGAIN JSB IDDUP NOW REPRODUCE THE ID DEF *+4 DEF OLDNA,I DEF NEWNA DEF IERR,I RETURN ERROR CODE SSA CHECK IF ILLEGAL NAME JMP EXIT YES, GET OUT CPA D14 CHECK IF NO ROOM FOR ID'S JMP EXIT YES, GET OUT CPA D16 CHECK IF UNDUPLICATABLE RSS YES CPA D17 CHECK IF UNDUPLICATABLE JMP GDEXT GOOD EXIT, NO RENAMING SPC 1 DUPCK CPA D23 CHECK IF ID ALLREADY EXISTS JMP CKIDT YES, CHECK IF SAME AS GENERIC NAME SZA CHECK IF OK DUPLICATION JMP EXIT IMPOSSIBLE ERROR FROM IDDUP ROUTINE INA SET SUCCESSFUL DUPLICATION FLAG STA RPSW,I AND RETURN IT MOVEB JSB .DFER MOVE NEW NAME BACK INTO OLDNAME BUFFER DEF OLDNA,I DEF NEWNA GDEXT CLA STA IERR,I RETURN GOOD ERROR CODE JMP EXIT DONE SPC 1 CKIDT JSB IDSGA FIND IDSEGMENT OF NEW NAME DEF *+2 DEF NEWNA SZA,RSS CHECK IF FOUND JMP AGAIN NO, WELL THIS IS A REAL TIME SYSTEM ADA D26 BUMP TO DISC ADDRESS WORD LDA A,I GET DISC TRACK/SECTOR/LU WORD CPA TEMP1,I CHECK IF SAME A GENERIC NAME? JMP MOVEB YES, EXIT OK EXIT JMP .RENM,I NO, DUPLICATE NAME ERROR SPC 1 D13 DEC 13 D14 DEC 14 D16 DEC 16 D17 DEC 17 D23 DEC 23 D26 DEC 26 O377 OCT 377 DOT OCT 56 SPACE OCT 40 TEMP1 NOP NEWNA REP 3 NOP END ASMB,R,L,C HED ".EXCP" ROUTINE TO DETERMINE EXCEPTION LIST OF RENAMING * SOURCE: 92002-18008 * RELOC: 92002-16008 * PGMR: D.L.B. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** NAM .EXCP,8 92002-16008 761002 ENT .EXCP EXT .ENTR,IDSGA,N.OPL SPC 1 A EQU 0 * CALLED * JSB .EXCP * DEF *+2 * DEF PNAME PROGRAM NAME * %; A-REG & E-REG = 0 IF ALLOWED TO RENAME PROGRAM * A-REG = -1 & E-REG = 1 IF NOT ALLOWED TO RENAME SPC 1 NAME NOP PROGRAM NAME .EXCP NOP ENTRY JSB .ENTR DEF NAME JSB IDSGA FIND NAME IN SYSTEM DEF *+2 DEF NAME,I LDB N.OPL GET OPTION WORD :RU,PROG:= SOURCE BYTE ADDRESS. LDB NUMBA = MESSAGE BYTE ADDRESS. MBT OCCNT MOVE NODE NUMBER(ASCII) TO MESSAGE. LDA MINCT GET MINIMUM MESSAGE LENGTH (CHARS.) ADA OCCNT ADD THE NODE NUMBER CHAR. LENGTH, CMA,INA AND CONVERT TO NEG. CHAR. COUNT. STA TELCN SET THE MESSAGE LENGTH FOR 'PRINT'. JSB PRINT PRINT: "EDITING AT NODE XXXXX" DEF PSF TELCwN NOP CONFIGURED NEG. MESSAGE LENGTH. TEMSG ASC 11,EDITING AT NODE 0 MINCT DEC 18 NUMBA DBL TEMSG+8 XIF PSF LDA DVTY CHECK FOR DRIVER 07B CPA DVR07 RSS JMP PSFC NO, SKIP NEXT CODE JSB PRINT SET TABS AT COLUMN'S 8 AND 23. DEF PSFC DEC -17 ASC 9,3&a8C1&a22C1 PSFC JSB PRINT PRINT "SOURCE FILE" DEF SRCIN DEC 6 ASC 6,SOURCE FILE? SRCIN JSB TTYIP INPUT RESPONSE CPB .1 ONE WORD RESPONSE? JMP FTST YES, CHECK FOR "0", OR ":". FPARS JSB SC.CR PARSE FILE NAME JMP LSFIL USE LS AREA DLD FSECR SAVE SC AND CR FOR A DST FSECW POSSIBLE ER. JSB INSRC FETCH FILE JMP PSF NOT FOUND TRY AGAIN * LDA FCARW GET USER'S CART. SPECIFICATION. SZA WAS IT SUPPLIED? JMP STEOF YES--NO NEED TO FAKE IT. LDA SBUF$,I NO. GET FIRST WORD OF DCB. AND B77 ISOLATE THE FILE'S LOCATION LU. CMA,INA NEGATE, AND SAVE FOR STA FCARW POSSIBLE USE IN FILE REPLACEMENT. * STEOF CCA SET EOF FLAG STA SLNG IN SOURCE LENGTH JSB ./B1 TRANSFER PARTIAL BUFFER JMP STBUF SET TBUFF. SPC 1 FTST LDA EBUFF,I GET SINGLE INPUT CHARACTER ALF,ALF ISOLATE THE AND LBYTE FIRST-AND 0NLY-INPUT CHARACTER. CPA ":" =":"? JMP ./A1 YES, QUIT NOW CPA B60 ="0"? CLA,RSS YES, SIMULATE NULL LS JMP FPARS GO PARSE FILE NAME JMP LSNUL SPC 1 LSFIL EQU * IFZ JSB REMCK TALKING REMOTE? CLA,RSS YES,TREAT LS AS UNDEFINED XIF LDA SFCUN SAVE SYSTEM LS POINTER, LSNUL CCB UNLESS LS UNDEFINED. SZA,RSS STB NOLSF STA LSLUT IN SOURCE FILE POINTER AND STA LSTRK SET UP RELEASE TRACK PNTR JSB ALCAT GET LS FILE AND DEST. TRACK CCA IF THE LOGICAL SOURCE AREA CPA NOLSF IS UNDEFINED, THEN JMP STEOF+1 BYPASS SOURCE INPUTS, AT PRESENT. JSB SQ FILL INPUT BUFFER STBUF LDA TBUFP POINT TBUFF TO TBUF0 STA TBUFF FOR ALL OTHER EDIT USES. JMP DISPL PRINT FIRST LINE SPC 1 .22 DEC 22 TBUFP DEF TBUF0 MBUF0 EQU EDITR OVERLAY ONE-TIME CODE. LERR EQU *-EDITR-75 CHECK ENOUGH ONE-TIME CODE FOR * 75 WORDS OF MBUF0. SPC 1 * MBUF0 OVERLAYS CODE AT THE START ('EDITR') WHICH IS * NOT NEEDED ONCE SOURCE FILE INFORMATION IS COMPLETE. * IT IS ONE OF THE DYNAMICALLY ASSIGNED BUFFERS. SEE * COMMENTS FOR EBUF0,ETC. NEAR END OF LISTING. SPC 1 NOLSF OCT 0 SET TO -1 IF LS UNDEFINED. N140 OCT -140 N32 OCT -32 * ********* * READ IN EDIT COMMAND AND ACT ON IT. ********* * NODE1 CLA RESET CHARACTER STA EXFLG EXCHANGE FLAG LDA LUCMD GET THE LAST LU-LOCK COMMAND. SLA IF THE LIST LU WAS LOCKED, JSB LULOK THEN GO TO UNLOCK IT. LDA TTYLU RESET THE STA LSTLU LIST LU IFZ CLB LDA INTFL GET THE INTERACTIVE FLAG. STB INTFL CLEAR THE INTERACTIVE FLAG. SZA,RSS IF FLAG WAS SET, SKIP--COMMAND WAS READ. XIF NODE2 JSB TTYIP INPUT COMMAND JSB ECH JMP ERR JSB LCASE CONVERT LOWER CASE CHAR.--IF REQUIRED. STA COMND SAVE TEMPORARILY * CPA "A" JMP ./A LDB ./EFL IF END ENTERED ANY OTHER COMMAND SZB,RSS IS DISALLOWED JMP NOTEN OK ALLOW ANY COMMAND CPA "E" END AGAIN? JMP ./E2 YES GO TRY THE NEW FILE NAME JMP ERR NO ERROR NOTEN LDB B40 RESET TAB FILL STB TBFIL TO SPACE CPA B40 COMMAND? JMP O/PEB NO, OUTPUT LINE CPA "=" T JMP ./= CPA %G JMP ./CG MUTE BELL WITH PROMPT. CPA "P" JMP ./P DISPLAY CURRENT LINE CCB STB TRFLG STB LSTFG CPA "C" IF CHARACTER JMP ./C GO DO IT CPA "L" JMP NUMBR CLB STB LSTFG RESET LIST FLAG CPA "K" JMP ./K CPA "#" SEQUENCE NUMBER? JMP ./# CPA "O" JMP ./O CPA "M" MERGE NEW SOURCE? JMP ./M YES GO DO IT CPA SLASH SLASH AND "+" MEAN THE SAME RSS CPA PLUSS JMP NUMBR CPA "E" JMP ./E CPA "N" JMP ./N CPA "H" JMP ./H CPA "S" JMP ./S CPA "T" JMP ./T CPA "U" JMP ./U UNCOND. REPLACE W/O LIST. CPA "V" JMP ./V THIS WITH LIST. CPA "W" SPECIFY A NEW WINDOW? JMP ./W CPA "G" JMP ./Z CPA "X" JMP ./X CPA "Y" JMP ./X CPA "Z" DEFINE XCHANGE PATRN W/O LIST JMP ./Z CPA "^" JMP ./^ STB TRFLG RESET TRANSFER FLAG CPA MINUS JMP NUMBR JSB ASCII COMMAND CHARACTER RSS NUMERIC? JMP FNUM YES, GO TO FIND LINE NUMBER JSB TAB TAB THE COMMAND LINE LDA COMND RESTORE COMMAND CHARACTER CPA "Q" TERMINAL INTRINSIC EDIT? JMP ./Q YES, GO TO PROCESS. CPA "R" JMP ./R CPA "I" JMP ./I JSB SWPET LDA COMND CPA "D" JMP COMPR CPA "J" JUMP TO NEW LINE W/O TRANSFER JMP ./J CCB STB TRFLG SET TRANSFER FLAG CPA "F" JMP COMPR CPA "B" COMPLETE TRANSFER AND START SEARCH JMP ./B FROM THE BEGINNING ERR JSB PRINT ERROR DEF ERCK IN INPUT DEC 1 COMMAND ASC 1,?? PRINT "??" mERCK SZB,RSS JMP NODE1 JMP EXIT ABORT IF PRINT ERROR. *** %G OCT 7 BELL (CONTROL G) "=" OCT 75 "G" OCT 107 "K" OCT 113 "Q" OCT 121 "U" OCT 125 "V" OCT 126 "X" OCT 000130 B37 OCT 37 B77 OCT 77 DVR12 OCT 5000 LINE PRINTER TYPE CODE. DVR23 OCT 11400 MAG. TAPE TYPE CODE. DVRTY OCT 37400 DRIVER TYPE MASK N.13I OCT 100015 STATUS REQUEST CODE LSTLU OCT 606 LIST LU * NUMBR JSB NUMIN CMA,INA COMPLEMENT NUMBER SZA,RSS AND STORE IN COUNT CCA IF NUMBER IS ZERO SET STA COUNT TO -1 JSB NLSLU SET UP NEW LU IF GIVEN ./CC JSB TR SSB EOF FOUND? JMP EOFPR YES, PRINT "EOF" FNUM2 ISZ COUNT FOUND LINE NUMBER? JMP ./CC NO, FETCH NEXT LINE JMP DISPL YES, DISPLAY IT SPC 1 NLSLU NOP JSB NUMIN GET OPTIONAL NEW LIST LU AND B77 SAVE JUST THE LU LDB 0 SZA,RSS IF NOT SUPPLIED LDA TTYLU USE TTY LU IOR B600 SET ECHO AND V-BITS STA LSTLU SAVE THE LU SZB,RSS SKIP UNLESS NOT SPECIFIED JMP NLSLU,I * JSB TYPEQ GET LIST DEVICE TYPE CODE. SZA,RSS IF IT'S INTERACTIVE, JMP NLSLU,I THEN SIMPLY RETURN; ELSE, CHECK: CPA DVR12 IS IT DVR12--A LINEPRINTER? JMP *+2 YES, SKIP FOR ADDITIONAL PROCESSING. JMP ERR NO! OTHER DEVICES ARE UNACCEPTABLE. JSB LULOK GO TO LOCK THE LIST LINEPRINTER. JMP NLSLU,I RETURN. SPC 1 LULOK NOP LIST LU LOCKING/UNLOCKING ROUTINE. LDA LUCMD GET THE CURRENT COMMAND. XOR .1 CONVERT TO OPPOSITE ACTION. STA LUCMD SAVE FOR NEXT PASS. STA IOPT CONFIGURE THE CALL. IFZ JSB REMCK IF THE LIST DEVICE IS REMOTE, JMP LULOK,I THEN LOCKING IS NOT REQUIRED. XIF LOKIT JSB LURQ REQUEST Y%DEF *+4 LOCK OR DEF IOPT UNLOCK DEF LSTLU FOR THE SPECIFIED DEF .1 LIST LOGICAL UNIT. JMP LUERR REPORT THE ERROR. * CPA M1 IF NO RN'S AVAILABLE, NOW, CLA,INA,RSS THEN GO BACK AND WAIT. CPA .1 IF LOCKED BY ANOTHER, THEN JMP WAITL GO BACK TO WAIT FOR IT. JMP LULOK,I LOCK/UNLOCK SUCCESSFUL--RETURN. * WAITL IOR BIT14 INCLUDE NO-ABORT BIT, STA IOPT AND SET COMMAND: WAIT FOR LU/RN. JSB PRINT INFORM DEF LOKIT THE USER DEC 15 THAT WE MUST WAIT. NAME1 ASC 15,EDITR WAITING FOR LIST DEVICE. * LUERR DST LUMSG+7 CONFIGURE ERROR MESSAGE. LDA TTYLU REPORT TO THE CONSOLE, INSTEAD, STA LSTLU DUE TO LIST-DEVICE PROBLEM. JSB PRINT PRINT THE ERROR MESSAGE, DEF LULOK,I AND DO THE REQUESTED LISTING. DEC 9 LUMSG ASC 9,LU LOCK ERROR XXXX LUCMD OCT 140001 NO WAIT/NO ABORT/LOCK IOPT OCT 140000 FIRST TIME: UNLOCKS ANY LU'S. BIT14 OCT 40000 DVTY NOP * TYPEQ NOP EQUIPMENT TYPE CODE DETERMINATION. STA LULOK SAVE LOGICAL UNIT, TEMPORARILY. JSB DEXEC GO TO GET I/O STATUS FOR THE DEVICE. DEF TYRTN IFZ DEF NODE XIF DEF N.13I NO-ABORT STATUS REQUEST DEF LULOK FOR THE SPECIFIED LOGICAL UNIT NO. DEF TAB EQT5 RETURNED TO 'TAB'. DEF SWPET EQT4 RETURNED, BUT NOT USED. DEF CHKN SUBCHANNEL RETURNED TO 'CHKN'. TYRTN JMP ERR ** ERROR: ISSUE "??" ** LDA TAB ISOLATE THE DEVICE TYPE CODE AND DVRTY FROM EQUIPMENT-TABLE WORD #5. STA DVTY SAVE IT SZA,RSS IF IT'S TYPE <00> (INTERACTIVE), JMP TYPEQ,I THEN RETURN IMMEDIATELY: =0. * CPA DVR05 IF IT'S A 264X TERMINAL, THEN JMP TYPE5 GO TO EXAMINE THE LU SUBCHANNEL; CPA DVR07 2645 MP TERMINAL? CLA  YES, CLEAR "A" JMP TYPEQ,I ELSE RETURN: #0 (NON-INTERACTIVE). * TYPE5 LDA CHKN GET SUBCHANNEL FOR DEVICE. AND B37 ISOLATE SUBCHANNEL BITS(#4-0). STA B SAVE IT TEMPORARILY. SZA,RSS IF THE SUBCHANNEL IS ZERO, THEN RETURN JMP TYPEQ,I WITH SIMULATED TYPE <00> CODE IN . LDA DVR23 PREPARE TO SIMULATE MAG. TAPE TYPE<23>. CPB .4 IF THE SUBCHANNEL IS FOUR, THEN LDA DVR12 SIMULATE TYPE <12> LINEPRINTER. JMP TYPEQ,I RETURN--DEVICE TYPE: <12>,LP OR <23>,MT. SPC 1 COMPR JSB TR TRANSFER PENDING LINE COMP1 JSB ECH MATCH FIELD SUPPLIED? JMP EOFTS NO USE OLD ONE COMP2 LDA EBUFF YES SWAP EBUFF LDB MBUFF AND MBUFF STA MBUFF SET UP THE STB EBUFF NEW MATCH FIELD LDA ELNG SET THE NEW MATCH LENGTH STA MLNG FOR MBUFF EOFTS LDA SLNG IF AT SSA END OF FILE JMP EOFPR PRINT "EOF" JMP COMP4 START SEARCH COMP3 JSB TR SSB EOF FOUND? JMP EOFPR YES, PRINT "EOF" COMP4 CLA CLEAR STA WINDF WINDOW FLAG STA MCCNT STA JDEF$ ZERO THE INDEFINITE STA IDEF$ FLAGS. CMPR1 JSB MCH JMP DISPL CPA INDEF INDEFINITE CHARACTER? JMP CMPR2 YES - GO SET UP. CPA DLMTR WINDOW SPECIFIED JMP CMPR5 ON SEARCH CMPR7 STA NUM1 NO - SAVE THE CHARACTER CMPR6 LDA WIND2 PAST ADA SCCNT WINDOW AND LDB WINDF WINDOW SLB FLAG SSA SET? RSS NO -- CONTINUE SCAN JMP COMP3 YES -- PATTERN NOT FOUND SPC 1 JSB SCH GET SOURCE CHARACTER. DVR05 CLA IF NONE - USE ZERO. CPA NUM1 COMPARE WITH PATTERN JMP CMPR3 COMPARES SO JUMP TO INDEF TEST SZA,RSS IF EOL THEN TAKE JMP COMP3 NOT FOUND EXIT  LDB IDEF$ INB,SZB,RSS IF FIRST CHARACTER SEARCH JMP CMPR6 TRY THE NEXT CHARACTER. ISZ JDEF$ END OF INDEF MATCH? JMP COMP3 NO - SO NO MATCH. SPC 1 LDA SCCN$ RESET SOURCE POINTER STA SCCNT AND LDA MCCN$ PATTERN STA MCCNT LOCATION THEN LDB WINDF RESET THE WINDOW FLAG BRS IF TWO SET TO 1 ELSE 0. RSS SKIP THE CLEAR. SPC 1 CMPR2 CLB CLEAR CMPR8 STB WINDF WINDOW FLAG LDA MCCNT SET UP FOR INDEFINITE STA MCCN$ CHARACTER DVR07 CCA SAVE THE PATTERN LOCATION AND STA IDEF$ SET THE FIRST CHAR. FLAG STA JDEF$ AND THE INDEF FLAG JMP CMPR1 GO GET THE FIRST PATTERN CHARACTER. SPC 1 CMPR3 ISZ IDEF$ FIRST CHAR FOUND AFTER INDEF CHAR? JMP CMPR1 NO CONTINUE LDB WINDF GET WINDOW FLAG AND CPB .1 IF ONE SET TO ISZ WINDF SET TO TWO LDA SCCNT YES - SET STA SCCN$ CURRENT SOURCE POSITION. JMP CMPR1 CONTINUE MATCH SPC 1 CMPR5 CLB,INB IS WINDOW CHARACTER CPB MCCNT THE FIRST CHAR. OF COMMAND? RSS YES -- CONTINUE JMP CMPR7 NO, IGNORE LDA WIND1 START SEARCH AT STA SCCNT BEGINNING OF WINDOW CMA,INA IF WINDOW ADA SLNG STARTS BEYOND SSA END OF LINE JMP COMP3 DO NOT SEARCH JMP CMPR8 CONTINUE SEARCH WITH INDEF. 1ST SPC 1 FNUM CLA RESET COMMAND STA ECCNT CHARACTER POINTER JSB NUMIN COMPUTE LINE NUMBER CMA,INA,SZA,RSS COMPLEMENT AND IF ZERO CCA SET TO -1 STA COUNT AND SAVE STA TRFLG SET TRANSFER FLAG JSB NLSLU SET UP NEW LU IF GIVEN LDA COUNT LOAD -(LINE NUMBER DESIRED) ADA LINES ADD CURRENT POSITION SSA,RSS L8NLHIF POSITIVE JMP FNUM3 GO TO BEGINNING OF FILE STA COUNT ELSE USE DIFFERENCE AS LOOP CNTR JMP ./CC GO FIND LINE SPC 1 FNUM3 JSB ./B1 COMPLETE TRANSFER JMP FNUM2 SPACE FORWARD TO DESIRED LINE ǗN SPC 1 ./# LDA M3 SKIP OVER STA COUNT ALPHA COMMENT. ./#0 JSB ECH NOP ISZ COUNT JMP ./#0 JSB NUMIN FETCH START NUMBER STA BASE AND SAVE AS BASE JSB NUMIN FETCH 2ND NUMBER SZA,RSS IF ZERO SET LDA .10 TO 10 AND STA INCR SAVE AS INCREMENT JSB ./B1 GO TO BEGINNING OF FILE SPC 1 ./#1 CLA RESET CHARACTER OUTPUT STA OCCNT COUNTER LDA M72 MOVE STA COUNT FIRST 72 ./#2 JSB SCH CHARACTERS JMP SPC OF SOURCE JSB OUTCR TO OUTPUT ISZ COUNT BUFFER JMP ./#2 JMP ./#3 SPC 1 SPC LDA B40 BLANK JSB OUTCR FILL TO ISZ COUNT COLUMN 72 JMP SPC ./#3 CLA,INA SET UP COMMAND STA ECCNT BUFFER COUNTER LDA M3 SET UP LOOP STA COUNT COUNTER FOR 3 CHARACTERS ./#4 JSB ECH FETCH NEXT ALPHA COMMENT LDA B40 LOAD BLANKS IF NO COMMENT JSB OUTCR OUTPUT CHARACTER ISZ COUNT THIRD CHARACTER? JMP ./#4 NO, FETCH NEXT CHARACTER SPC 1 LDA BASE OUTPUT LINE NUMBER CLB JSB DEC IN ASCII LDA BASE UPDATE ADA INCR LINE STA BASE NUMBER LDA OCCNT OUTPUT CHARACTER LDB TBUFF TO DISC BUFFER JSB DOUTP JSB I/PSB INPUT NEXT RECORD SSB AT EOF? JMP EOFPR YES, PRINT "EOF" JMP ./#1 NO, CONTINUE SPC 1 ./= JSB NUMIN GET REQUESTED LENGTH SZA,RSS JMP ERR ADA MAXIN IF LONGER THAN ALLOWABLE SSA,RSS MAX, USE ALLOWABLE MAX CLA AND CONTINUE. ADA MAX STA MAXOP JMP NODE1 SPC 2 TBFIL OCT 40 WINDF NOP M72 DEC -72 MLNG NOP MCCNT NOP MBUFF DEF MBUF0 CHANGES POINTS TO CURRENT MATCH BUFFER JDEF$ NOP INDEFINITE PROCESSING FLAG * ALSO USED FOR IDEF$ NOP FIRST CHAR AFTER INDEF FLAG * ALSO USED FOR INDEF OCT 33 INDEFINITE CHAR. IS ESCAPE. INDE2 OCT 176 ALTERNATE ESCAPE CHAR. MCCN$ NOP INPUT PATTERN LOCATION FOR INDEF SEARCH * * TAB PERFORMS THE TAB OPERATION TAB NOP CLA RESET OUTPUT STA OCCNT CHARACTER COUNTER AND STA CNTRL NON-CONTROL CHARACTER COUNTER LDA TABUF RESET STA TBPNT TAB POINTER TAB1 JSB ECH GET NEXT COMMAND CHARACTER JMP TAB,I END OF COMMAND CPA TABCR TAB CHARACTER ? JMP TBFND YES, GO TO TAB FOUND CPA INDE2 ALTERNATE ESCAPE? LDA INDEF YES REPLACE WITH STD. ASCII. LDB A IS CHARACTER CMB CONTROL ADB B40 CHARACTER SSB IF YES DO NOT INCREMENT ISZ CNTRL NON-CONTROL CHARACTER COUNTER JSB OUTCR NO, OUTPUT CHARACTER JMP TAB1 TBFND CCB SET SPACE COUNTER STB CNT1 TO -1 LDB TBPNT,I TAB POINTER SZB,RSS ZERO? JMP SPACE YES, OUTPUT SPACE ISZ TBPNT BUMP TAB POINTER ADDRESS ADB CNTRL PAST SSB,RSS TAB? JMP TBFND+2 YES, GET NEXT TAB STB CNT1 STORE SPACE COUNTER SPACE LDA TBFIL LOAD SPACE JSB OUTCR OUTPUT SPACE ISZ CNTRL BUMP NON-CONTROL CHAR. CNTR. ISZ CNT1 LAST SPACE? JMP SPACE NO, CONTINUE SPACING JMP TAB1 GET NEXT CHARACTER * * SWPET SWAPS EBUFF AND TBUFF SWPET NOP USED AS TEMP LDA TBUFF SWAP LDB EBUFF EBUFF STA EBUFF AND STB TBUFF TBUFF LDA OCCNT STORE OUTPUT CHARACTER STA ELNG LENGTH IN COMMAND LENGTH CLB RESET COMMAND STB ECCNT AND OUTPUT  STB OCCNT CHARACTER POINTERS JMP SWPET,I SPC 1 ./W JSB CHKN CHECK PARAMETERS JSB NUMIN FETCH SZA START OF ADA M1 WINDOW STA WIND1 POINTER JSB NUMIN FETCH CMA,INA,SZA,RSS END OF LDA MAXIN WINDOW STA WIND2 POINTER JMP NODE1 GET NEXT COMMAND SPC 1 WIND1 NOP WIND2 DEC -150 SPC 1 CHKN NOP NPARA JSB NUMIN FETCH NEXT PARAM LDA ELNG IF END OF COMMAND CPA ECCNT THEN, ALL PARAMETERS CLA,INA,RSS WERE NUMERIC JMP NPARA ELSE, FETCH NEXT PARAM STA ECCNT RESET COUNT AND RETURN JMP CHKN,I * ./T JSB ECH STEP PAST TAB CHAR. JMP ./T1 NONE, SO DISABLE TAB JSB CHKN OTHERWISE CHECK PARAMETERS JSB ECH GET TAB CHARACTER ./T1 CCA SET TAB CHARATER TO -1 TO DISABLE STA TABCR STORE TAB CHARACTER LDA TABUF RESET TAB ADDRESS STA TBPNT POINTER LDA M10 SET COUNTER STA CNT1 TO -10 LDA ECCNT IF ONLY TAB CHARACTER CPA ELNG GIVEN, THEN RETURN JMP NODE1 WITH TABS UNCHANGED NXTNM JSB NUMIN GET NEXT NUMBER CMA,INA,SZA FIRST NUMBER ZERO? INA NO, INCREMENT IT STA TBPNT,I STORE TAB NUMBER ISZ TBPNT BUMP POINTER ISZ CNT1 LAST TAB? JMP NXTNM NO, CONTINUE JMP NODE1 YES, GET NEXT COMMAND TABUF DEF TAB0 TABCR OCT 73 DEFAULT TAB CHARACTER = ";" TBPNT NOP B54 OCT 54 "," * * TR TRANSFERS CURRENT SOURCE LINE TO DEST. AND GETS NEXT LINE TR NOP LDB SLNG IF AT SSB EOF, JMP TR,I RETURN LDB XIDT CHECK FOR A BREAK ADB .20 REQUEST BY EXAMINING BIT 12 LDA B,I OF ID SEGMENT WORD 21. AND BIT12 IF BREAK REQUEST IS PRESENT, SZA  STOP WHAT IS GOING ON. JMP BREAK LDB TRFLG TRANSFER RECORD TO SZB DESTINATION FILE? JSB O/PSB YES, OUTPUT RECORD LDB LSTFG LIST CURRENT SZB RECORD? JSB LSTSB YES, PERFORM LIST JSB I/PSB GET NEXT RECORD JMP TR,I SPC 1 .20 DEC 20 BIT12 OCT 10000 SPC 1 BREAK JSB $LIBR NOP LDA B,I GET ID SEGMENT WORD 21 AGAIN XOR BIT12 ZERO ONLY BIT 12 STA B,I JSB $LIBX RESTORE INTERRUPT NOW THAT ID DEF *+1 WORD IS SAFE. DEF DISPL DISPLAY PENDING LINE. SPC 1 ./^ JSB NUMIN GET LINES TO SUBTRACT. LDB T#REM CHECK # DEST REC >65K SZB AND IGNORE COMMAND JMP ERR IF SO. LDB T#REC CURRENT DESTINATION LINE CMB,SSB,RSS IF > 32K,IGNORE JMP ERR COMMAND. SZA,RSS NULL _ 1 INA ADA B SSA,RSS IF OFF THE TOP END, JMP ERR IGNORE COMMAND. STA COUNT JMP FNUM3 GO TO NEW LINE. SPC 1 NUMIN NOP JSB PARAM FETCH NEXT INPUT PARAMETER JMP ERR IF NEG. OR ASCII, ERROR!!! JMP NUMIN,I ELSE RETURN SKP * PARAM FETCHES ONE WORD PARAMETERS SEPARATED BY COLONS OR COMMAS SPC 1 PARAM NOP CLB RESET STB NUM1 NUMBER STB NUM10 ACCUMULATORS STB NEGFL AND NEGATIVE FLAG JSB NXCHR FETCH FIRST CHAR JMP ENDPR NULL PARAM, END JSB ASCII IF CHARACTER IS NON-NUMERIC JMP CHAR GO TO ASCII PARAM. ROUTINE NUMN1 ADA NUM10 ADD NUMBER TO PREVIOUS TOTAL SSA OVERFLOW ENCOUNTERED JMP ERR YES, ERROR IN PARAM. STA NUM1 SAVE NEW TOTAL MPY .10 COMPUTE NEXT PARTIAL SUM SZB,RSS IF OVERFLOW FROM SSA MULTIPY, SET PARTIAL TO VALUE WHICH LDA M10 EWILL CAUSE OVERFLOW WITH NEXT CHAR. STA NUM10 SAVE PARTIAL SUM PARM1 JSB NXCHR FETCH NEXT CHARACTER JMP ENDPR LAST CHAR.? GO TO END JSB ASCII ASCII TO NUMERIC JMP ERR NON-NUMERIC, GO TO ERROR!!! JMP NUMN1 GO TO TOTALIZE SPC 1 ENDPR LDA NUM1 LOAD TOTAL LDB NEGFL IF NEGATIVE SZB FLAG IS SET CMA,INA,RSS COMPLEMENT TOTAL, SKIP ISZ ISZ PARAM BUMP ADDRESS FOR POS. NUMBER JMP PARAM,I RETURN SPC 1 CHAR ISZ NEGFL BUMP NEGATIVE FLAG LDA COMND FETCH FIRST CHARACTER CPA MINUS IF MINUS SIGN JMP PARM1 COMPUTE NUMBER ALF,ALF LEFT JUSTIFY IOR B40 BLANK FILL STA NUM1 AND SAVE JSB NXCHR FETCH NEXT CHARACTER JMP ENDCR LAST CHARACTER RETURN XOR NUM1 INSERT LAST CHARACTER XOR B40 IN LOWER BYTE OF PARAM STA NUM1 AND SAVE JSB NXCHR SEARCH FOR RSS NEXT DELIMITER JMP *-2 OR END ENDCR LDA NUM1 LOAD PARAMETER JMP PARAM,I AND RETURN SPC 1 ASCII NOP STA COMND SAVE CHARACTER ADA M58 GREATER THAN SSA,RSS "9" ? JMP ASCII,I YES, RETURN ADA .10 LESS THAN SSA,RSS "0" ? ISZ ASCII NO, BUMP RETURN ADDRESS JMP ASCII,I SPC 1 NXCHR NOP FCR1 JSB ECH FETCH NEXT COMMAND CHAR. JMP NXCHR,I NO MORE CHARS.? RETURN CPA B40 IGNORE ALL JMP FCR1 SPACES CPA B54 IF EITHER A JMP NXCHR,I COMMA OR CPA ":" A COLON IS JMP NXCHR,I FOUND, RETURN ISZ NXCHR BUMP RETURN ADDRESS JMP NXCHR,I SPC 1 ":" OCT 72 COUNT NOP MATCH NOP ALSO NUM1 NOP ALSO NUM10 NOP ALSO UNCON NOP * * * CXT NOP THIS ROUTINE DOES ALL THE CLA MATCHING IN THE SOURCE BUFFER STA OCCNT AND REPLACEMENT IN THE STA XCCNT DESTINATION BUFFER FOR STA YCCNT EXCHANGE OPERATIONS. STA SCCNT LDB UNCON SZB JMP CXTUC STA BWIND RESET WINDOW BIAS STA MATCH AND MATCH FLAG. LDA WIND1 START SEARCH AT CXT1 STA SCCNT BEGINNING OF WINDOW CMA,INA IF BEYOND ADA SLNG END OF SSA RECORD JMP CXT,I RETURN CP1 JSB SCH FETCH NEXT SOURCE CHAR. JMP CXT,I END OF SOURCE, RETURN CPA FCHAR EQUAL TO 1ST CHAR. OF PATTERN? RSS JMP CP1 NO, GO LOOK AT NEXT CHAR. LDA SCCNT YES, SAVE PRESENT STA SCCN$ SOURCE POSITION ADA BWIND BEYOND ADA WIND2 UPPER BOUND CMA,SSA,INA,SZA OF WINDOW? JMP CXT,I YES, PATTERN NOT FOUND CLA,INA STA XCCNT START XCH WITH 2ND CHAR. SPC 1 CPNXT JSB XCH FETCH NEXT PATTERN CHAR. JMP XFND END OF PATTERN - MATCH!!! STA T1 SAVE PATTERN CHAR. JSB SCH FETCH NEXT SOURCE CHAR. JMP CXT,I END OF SOURCE, NO MATCH CPA T1 CHARACTER MATCH? JMP CPNXT YES, CONTINUE COMPARE LDA SCCN$ NO, BACK UP AND JMP CXT1 CONTINUE SEARCH SPC 1 XFND LDA XLIST SET LIST STA MATCH FLAG LDA SCCNT SAVE CURRENT STA T1 POSITION IN SOURCE CLA RESET STA SCCNT SOURCE CHARACTER COUNTER STA OCCNT OUTPUT CHARACTER COUNTER STA YCCNT REPLACE CHARACTER COUNTER SPC 1 LDA SCCN$ MOVE CMA,INA CHARACTERS INA,SZA,RSS PRECEEDING JMP RPC2 STA T2 MATCH RPC1 JSB SCH CHARACTERS HLT 77B IN JSB OUTCR SOURCE ISZ T2 LINcE JMP RPC1 TO OUTPUT SPC 1 RPC2 JSB YCH MOVE JMP RPC3 REPLACEMENT CHARACTERS JSB OUTCR TO OUTPUT JMP RPC2 SPC 1 RPC3 LDA OCCNT SAVE POSITION STA T2 FOR CONTINUATION OF SEARCH SPC 1 LDA T1 RESET SOURCE CHAR. POINTER STA SCCNT TO REMAINDER OF SOURCE RECORD CPA SLNG IF AT END OF JMP ENDCX RECORD, SEARCH FINISHED RPC4 JSB SCH MOVE REMAINDER JMP ENDRP OF SOURCE LINE JSB OUTCR TO OUTPUT JMP RPC4 SPC 1 ENDRP JSB ./R$ REPLACE OLD SOURCE LINE LDA YLNG COMPUTE CMA,INA BIAS FOR ADA XLNG UPPER BOUND ADA BWIND OF WINDOW STA BWIND LDA T2 RESTORE POSITION AND JMP CXT1 CONTINUE SEARCH SPC 1 ENDCX JSB ./R$ REPLACE LINE JMP CXT,I AND RETURN SPC 1 * CODE FOR UNCONDITIONAL REPLACE. SPC 1 CXTUC LDA XLIST TO LIST OR NOT STA MATCH TO LIST? LDA WIND1 CMA,INA,SZA,RSS JMP CXTU2 STA ASCII CXTU1 JSB SCH MOVE SOURCE CHARACTERS LDA B40 PRECEEDING WINDOW JSB OUTCR TO OUTPUT. ISZ ASCII JMP CXTU1 CXTU2 JSB XCH PASS OVER DUMMY SEARCH JMP CXTU3 PATTERN. JSB SCH NOP JMP CXTU2 SPC 1 CXTU3 JSB YCH MOVE REPLACEMENT CHARACTERS JMP CXTU4 TO OUTPUT. JSB OUTCR JMP CXTU3 SPC 1 CXTU4 JSB SCH MOVE REMAINDER OF RECORD JMP ENDCX TO OUTPUT JSB OUTCR JMP CXTU4 SPC 1 SCCN$ NOP BWIND NOP FCHAR NOP XCCNT NOP YCCNT NOP XLNG NOP YLNG NOP YOFFS NOP * * "XCH" FETCHES NEXT CHARACTER FROM SEARCH PATTERN XCH NOP LDA XCCNT CPA XLNG JMP XCH,I ISZ XCCNT ISZ XCH INA WATCH OUT FOR THIS ONE CLE,ERA xe ADA XYBUF LDA A,I SEZ,RSS ALF,ALF AND LBYTE JMP XCH,I * * "YCH" FETCHES NEXT CHARACTER FROM REPLACEMENT PATTERN YCH NOP LDA YCCNT CPA YLNG JMP YCH,I ISZ YCCNT ISZ YCH ADA YOFFS CLE,ERA ADA XYBUF LDA A,I SEZ,RSS ALF,ALF AND LBYTE JMP YCH,I * * "OUTCR" OUTPUTS ONE CHARACTER TO TBUFF OUTCR NOP LDB OCCNT CPB MAXOP JMP OUTCR,I CLE,ERB ADB TBUFF SEZ,RSS ALF,SLA,ALF XOR B,I XOR B40 STA B,I ISZ OCCNT JMP OUTCR,I * DLMTR OCT 57 DEFAULT DELIMITER IS "/" .6400 OCT 6400 * DLMST STA DLMTR IOR .6400 SET UP PROMPT STA / CHARACTER JMP NODE1 * * ./U CLA ./V CCB,RSS ./Z CLA IF "Z" RESET LIST FLAG ./X STA XLIST IF "X" OR "Y" SET FLAG STB UNCON JSB ECH FETCH 1ST PATTERN CHARACTER JMP XSET1 NO MORE CHARACTERS SO SET EXFLG LDB ECCNT LAST CHARACTER CPB ELNG IN COMMAND? JMP DLMST YES, GO CHANGE DELIMITER CLB STB XLNG INITIALIZE PATTERN LENGTH CNTR CPA DLMTR IF NULL PATTERN CHARACTER JMP ERX CHECK FOR ERROR STA FCHAR SAVE 1ST CHAR. IN PATTERN XSET2 JSB ECH FETCH NEXT CHARACTER JMP ERR NO DELIMITERS FOUND, SO ERROR ISZ XLNG INCREMENT PATTERN LENGTH CPA DLMTR DELIMITER? CLA,RSS JMP XSET2 NO, CONTINUE TO SEARCH XSET4 LDA XLNG STORE POSITION ADA .2 OF REPLACEMENT STA YOFFS PATTERN CMA,INA COMPUTE AND ADA ELNG STORE REPLACEMENT STA YLNG PATTERN LENGTH LDA EBUFF SWAP LDB XYBUF EBUFF STB EBUFF AND STA XYBUF XYBUF XSET1 CLA,INA SET EXCHANGE FLAG STA EXFLG LDB COMND LOAD COMMAND CHARACTER CPB "G" PENDING LINE EXCHANGE? JMP ./G YES - GO DO IT CPB "Y" IF "Y" COMMAND RSS PERFORM SEARCH JMP NODE2 ELSE, FETCH NEXT COMMAND JSB TR MOVE PENDING LINE SPC 1 * PRECEDE "X" PATTERN BY INDEFINITE CHARACTER AND USE AS "F" * PATTERN CLA RESET STA XCCNT XCH AND STA OCCNT OUTCR CHARACTER COUNTERS STA EXFLG AND EXCHANGE FLAG LDA DLMTR MAKE INDEFINITE CHAR. 1ST IN PATTERN XSET3 JSB OUTCR OUTPUT CHARACTER JSB XCH FETCH NEXT PATTERN CHARACTER RSS NO MORE CHARACTERS JMP XSET3 GO TO ADD CHAR. TO PATTERN JSB SWPET SWAP OUTPUT BUFF WITH COMND BUFF JMP COMP2 GO TO SEARCH ROUTINE SPC 1 ERX LDB UNCON NULL PATTERN IS OK FOR A U SZB,RSS OR V OPERATION. JMP ERR BUT AN INPUT ERROR FOR X,Y,Z. JMP XSET4 * ./G JSB CXT PERFORM EXCHANGE JMP DISPL THEN DISPLAY LINE XYBUF DEF XYBF0 CHANGES. POINTS TO CURRENT EXCHANGE * BUFFER. TBUFF DEF NBUF0 CHANGES POINTS TO CURRENT CONSOLE * OUTPUT BUFFER. XLIST NOP * SKP O/PSB NOP LDA EXFLG PATTERN REPLACEMENT SZA,RSS FLAG SET? JMP OPSB2 NO, MOVE CURRENT SOURCE LINE JSB CXT YES, PERFORM REPLACEMENT LDA MATCH LIST PATTERN SZA,RSS MATCH? JMP OPSB1 NO LDA LSTFG THIS PREVENTS DOUBLE LIST SZA,RSS WHEN PATTERN MATCH OCCURS JSB LSTSB LIST NEW LINE OPSB1 LDA SLNG IF RECORD HAS BEEN REDUCED SZA,RSS TO ZERO LENGTH, DON'T JMP O/PSB,I OUTPUT TO DEST. OPSB2 LDA SLNG GET CURRENT # OF CHARS. LDB SBUFP AND LOCATION OF SOURCE LINE JSB DOUTP CALL OUTPUT ROUTINE JMP O/PSB,I * )  * O/PEB LDA SLNG IF NOT AT SSA,RSS EOF THEN JSB O/PSB OUTPUT CURRENT LINE JSB TAB TAB COMMAND LINE ./R JSB ./R$ PERFORM REPLACEMENT ISZ COMND IF P COMMAND SKIP JMP NODE1 GET NEXT COMMAND ISZ CFLG IF C COMMAND SKIP JMP DISPL GO DISPLAY THE NEW LINE CCA SET LIST COUNT TO STA COUNT ONE LINE. JMP ./CC GO FINISH THE C COMMAND * * ./R$ REPLACES CURRENT LINE ON INPUT BUFFER WITH LINE IN COMMAND BUFFER ./R$ NOP LDA SLNG IF AT EOF SSA INSERT NEW LINE BEFORE LDA M2 EOF AND MAKE IT PENDING SLA,ARS COMPUTE ADDRESS INA OF NEXT ADA SBUFP SOURCE RECORD LDB OCCNT REPLACE CURRENT RECORD LENGTH STB SLNG WITH COMMAND RECORD LENGTH CMB,INB CONVERT # CHARS TO BRS MINUS # OF WORDS STB CNT1 STORE COMPLEMENT IN COUNTER ADA B ADD -(# OF WORDS) TO NEXT RECORD ADRS STA SBUFP TO GET NEW SOURCE FILE POINTER SZB,RSS ZERO LENGTH RECORD? JMP ./R$,I RETURN STA P1 LDB TBUFF STARTING ADDRESS OF COMMAND RECORD CTOS LDA B,I MOVE STA P1,I COMMAND INB RECORD ISZ P1 TO ISZ CNT1 SOURCE JMP CTOS FILE JMP ./R$,I SPC 1 ./I LDA OCCNT LOAD RECORD LENGTH LDB TBUFF LOAD RECORD LOCATION JSB DOUTP OUTPUT RECORD JMP NODE1 * * * ./Q ALLOWS USE OF 264X TERMINAL EDIT INTRINSICS TO REPLACE PENDING * LINE. * ./Q LDA DVTY TEST FOR DRIVER TYPE 07B CPA DVR07 RSS YES, GO ON JMP ERR NO, ERROR JSB LSTSB LIST THE PENDING LINE LDA SLNG CHECK FOR LINE>77 CH. CMA,INA ADA .77 SSA JMP ./Q1 YES, MOVE CURSOR UP TWO LINES JSB PRINT POSITION CURSOR DEF ./Q2 AND SET LEFT DEC -9 DELIMITER FOR INTRINSIC EDITING. OCT 015520 < P > OCT 015501 < A > OCT 020033 < > OCT 057435 <137> OCT 057400 <137> * ./Q1 JSB PRINT SAME AS ABOVE BUT UP TWO DEF ./Q2 DEC -11 OCT 015520 < P > OCT 015501 < A > OCT 015501 < A > OCT 020033 < > OCT 057435 <137> OCT 057400 <137> * ./Q2 LDA NOPRN SAVE NON-PRINTING FLAG STA SCH TEMORARALY CCA SET CONDITIONS FOR INPUT ONLY, STA NOPRN OF THE MODIFIED LINE. STA COMND SET FOR DISPLAY OF THE MODIFIED LINE. JSB TTYIP REQUEST INPUT SZB,RSS JMP ZER ZERO LTH. READ JSB TAB LDA SCH RESTORE NON-PRINTING FLAG. STA NOPRN JSB PRINT MAKE SURE INSERT IS OFF. DEF ./Q3 DEC -3 ASC 2,R_ ./Q3 JMP ./R COMPLETE THE REPLACEMENT OPERATION. ZER CLA RESET COMMAND STA COMND LDA SCH RESTORE NON-PRINTING FLAG STA NOPRN JMP NODE1 * .77 DEC 77 * * * * SCH FETCHES NEXT SOURCE CHARACTER * SCH NOP ENTER WITH CHARACTER COUNT LDA SCCNT SCCNT AND SOURCE BUFFER START CPA SLNG ADDRESS IN SBUFP. JMP SCH,I ISZ SCCNT IF AT END OF SOURCE RECORD, ISZ SCH EXIT TO P+1. CLE,ERA ADA SBUFP IF NOT AT END OF SOURCE RECORD, LDA A,I EXIT TO P+2 WITH ASCII OF NEXT SEZ,RSS CHARACTER IN LOW BYTE OF A. ALF,ALF AND LBYTE JMP SCH,I * * "MCH" FETCHES NEXT FIND FIELD CHARACTER MCH NOP LDA MCCNT CPA MLNG JMP MCH,I ISZ MCCNT ISZ MCH CLE,ERA ADA MBUFF LDA A,I SEZ,RSS HFB ALF,ALF AND LBYTE JMP MCH,I * SKP * "ECH" FETCHES NEXT COMMAND CHARACTER * ECH NOP LDA ECCNT CPA ELNG JMP ECH,I ISZ ECCNT ISZ ECH CLE,ERA ADA EBUFF LDA A,I SEZ,RSS ALF,ALF AND LBYTE JMP ECH,I * * "LCASE" CONVERTS LOWER-CASE COMMAND CHAR. TO UPPER CASE ASCII. * LCASE NOP ENTER WITH CHARACTER IN . STA MCH SAVE, TEMPORARILY. ADA N140 CHECK FOR LOWER-CASE ASCII. SSA >140B? JMP LCXIT NO. NOT LOWER-CASE. ADA N32 YES. CHECK FOR ALPHA LOWER-CASE. SSA,RSS <173B? JMP LCXIT NO. RETURN. LDA B40 YES. CONVERT TO XOR MCH UPPER-CASE ALPHA ASCII, JMP LCASE,I AND RETURN WITH =CHARACTER. LCXIT LDA MCH RETRIEVE THE ORIGINAL CHARACTER, JMP LCASE,I AND RETURN. * * / OCT 6457,3537 "CR / BELL _" SPC 1 ./CG EQU * IFZ JSB REMCK IF COMMUNICATING REMOTELY, THEN JMP NODE1 PROMPT CHANGE IS INAPPROPRIATE. XIF LDA /+1 ALF,ALF STA /+1 REVERSE ORDER OF _ AND BELL. CLA,INA XOR LN SHORTEN OR LENGTHEN STA LN MESSAGE LENGTH. JMP NODE1 SKP TTYIP NOP IFZ JSB REMCK TALKING REMOTELY? JMP DOCOM YES! XIF LDA NOPRN IF INPUT IS SZA NON-INTERACTIVE, THEN JMP TTYIN IGNORE THE PROMPT. JSB EXEC PRINT DEF *+5 PROMPT DEF .2.I CHARACTER DEF TTYLU DEF / DEF LN ALTERNATE -4 & -3. NOP 3H SPC 1 TTYIN JSB REIO INPUT DEF *+5 COMMAND DEF .1 FROM DEF TTYLU TELETYPE EBUFF DEF EBUF0 CHANGES, POINTS TO CURRENT COMMAND DEF MAXIN * EBRET STB ELNG CLA RESET STA ECCNT ALL STA SCCNT CHARACTER STA OCCNT COUNTERS JMP TTYIP,I IFZ DOCOM CLA PREPARE FOR NON-INTERACTIVE INPUT. CPA NOPRN IF DEVICE IS INTERACTIVE, THEN LDA LN GET THE PROMPT LENGTH. STA PRMTL INITIALIZE PROMPT LENGTH. SZA CHECK FOR A ZERO LTH. JMP INWR NO, GO ON LDA INLU YES, REMOVE INTERACTIVE BIT XOR BIT11 STA INLU INWR JSB DEXEC DO INTERACTIVE REMOTE READ DEF *+8 DEF NODE DEF RCODE DEF INLU DEF EBUFF,I DEF MAXIN DEF / OPT.PARAMS=PROMPT CHARS DEF PRMTL AND PROMPT LENGTH. JMP ./A0 ABORTIVE COMM. ERROR LDA INLU MAKE SURE INTERATIVE BIT IS SET IOR BIT11 STA INLU JMP EBRET * * RETURN+1 IF CRT IS REMOTE, RETURN+2 IF NOT REMCK NOP LDB NODE CPB M1 ISZ REMCK JMP REMCK,I XIF CFLG NOP ALSO SBUFP NOP POINT TO CURRENT LOC IN SORC BUFFER SLNG NOP LENGTH OF SOURCE RECORD (EVEN) ELNG NOP LBYTE OCT 377 LOWER BYTE MASK LN OCT -4 ALTERN. WITH -3 AFTER CONTROL G. NOPRN NOP SUPPRESS PRINTING IF #0. SCCNT NOP .10K DEC 10000 .1000 DEC 1000 .100 DEC 100 IFZ PRMTL NOP INTERACTIVE PROMPT LENGTH. RPRMT OCT 6412,27537 REMOTE PROMPT: "CR LF / _" BIT11 OCT 4000 INLU NOP NODE NOP INTFL NOP INTERACTIVE WRITE-READ FLAG. WRLEN NOP WRITE LENGTH (-CHARS) FOR WRITE-READ. TEMPZ EQU REMCK TEMPORARY. SVTMP NOP TEMPORARY STORAGE FOR NOP OVERLAYED WORDS. * * INTERACTIVE REMOTE W,eRITE-READ ROUTINE: DISPLAY LINE & READ COMMAND. * INTER NOP STA BUFAD CONFIGURE WRITE-BUFFER ADDRESS IN CALL. STB WRLEN SAVE NEG. CHAR. COUNT, TEMPORARILY. BRS COMPUTE BUFFER LENGTH CMB,INB IN WORDS. ADA B FORM ADDRESS OF NEXT WORD, STA TEMPZ IMMEDIATELY FOLLOWING WRITE BUFFER. DLD TEMPZ,I GET NEXT TWO WORDS-AFTER BUFFER- DST SVTMP AND SAVE, TEMPORARILY. DLD RPRMT OVERLAY TWO WORDS FOLLOWING WRITE BUFFER DST TEMPZ,I WITH THE COMMAND-INPUT PROMPT CHARS. LDB WRLEN GET THE ORIGINAL NEG. CHARACTER COUNT. SLB IF THE COUNT WAS ODD, ADB M1 ADD ONE FOR THE WORD BOUNDRY. ADB LN ADD THE LENGTH OF PROMPT (-CHARS), STB WRLEN AND CONFIGURE CALL WITH TOTAL LENGTH. * JSB DEXEC CALL REMOTE 'EXEC' ROUTINE. DEF ERABT ERROR-RETURN ADDRESS. DEF NODE DESTINATION NODE. DEF RCODE READ REQUEST--NO ABORT. DEF INLU REMOTE TTY LU W/INTERACTIVE BIT(#11). DEF EBUFF,I INPUT BUFFER ADDRESS. DEF MAXIN MAXIMUM NO. OF INPUT CHARACTERS. BUFAD DEF * CONFIGURED WRITE BUFFER ADDRESS. DEF WRLEN CONFIGURED WRITE BUFFER LENGTH. ERABT JMP ./A0 ** COMMUNICATION ERROR: ABORT!! * STB ELNG SAVE READ LENGTH (+CHARS). DLD SVTMP RESTORE THE DST TEMPZ,I OVERLAYED BUFFER CHARACTERS. CLA RESET STA ECCNT ALL STA SCCNT CHARACTER STA OCCNT COUNTERS. LDB ELNG RESTORE = TRANSMISSION LOG. JMP INTER,I RETURN. XIF SKP ./N JSB ECH ANY OTHER CHARACTER? JMP NP NO. PRINT SOURCE LINE. JSB LCASE CONVERT LOWER CASE CHAR.--IF NECESSARY. CPA "D" IF N IS FOLLOWED BY D, RSS PRINT DESTINATION LINE. JMP ERR ELSE ASK AGAIN. DLD T#REC U JMP CVX NP DLD LINES FETCH CURRENT LINE NUMBER CVX JSB DEC CONVERT NUMBER TO ASCII IFZ JSB REMCK IF COMMUNICATING REMOTELY, ISZ INTFL SET THE INTERACTIVE FLAG. XIF LDB OCCNT CALL LDA TBUFF PRINT JSB LST ROUTINE JMP NODE1 PROCESS THE NEXT COMMAND SPC 1 ./H JSB ECH JMP HP JSB LCASE CPA "L" RSS JMP ERR JSB PRINT DEF NODE1 DEC 41 ASC 21, ''''/''''1''''/''''2''''/''''3''''/''''4 ASC 20,''''/''''5''''/''''6''''/''''7''''/''''8 HP LDA SLNG CLB JMP CVX SPC 1 ./S CLB LDA T#SEC COMPUTE NUMBER OF WORDS ASL 6 ALREADY STORED ON DISC, STA DEC SAVE, THEN COMPUTE LDA DBUF$ # OF WORDS IN DEST CMA,INA BUFFER. ADA DBUFP CLE ADA DEC ADD BACK LSB'S OF MPY SEZ AND BUMP B IF E SET. INB JMP CVX SPC 1 DEC NOP CLE,SZB,RSS >65K? JMP SNGLP DIV .10K WORK ON EXCESS FIRST STB I/PSB SAVE REMAINDER FOR NEXT PASS. CLB JSB DEC4 LDA I/PSB CCE SKIP DIV .10K THIS TIME SNGLP JSB DEC4 JMP DEC,I SPC 1 DEC4 NOP SEZ IF NUMBER >65K, SKIP JMP THOU FIRST DIVIDE, PASS 2. DIV .10K OUTPUT TEN THOUSANDS JSB CONVT DIGIT THOU DIV .1000 OUTPUT THOUSANDS JSB CONVT DIGIT DIV .100 OUTPUT HUNDREDS JSB CONVT DIGIT DIV .10 OUTPUT TENS JSB CONVT DIGIT AND JSB CONVT ONES DIGIT JMP DEC4,I SPC 1 CONVT NOP STB NT SAVE REMAINDER SZA IF JMP CONV1 LEADING CPA OCCNT ZERO JMP CONV2 DO NOT OUTPUT IT CONV1 IOR B60 CONVERT NUMBER TO ASCII JSB OUTCR MOVE CHARA)CTER TO BUFFER CONV2 CLB SET REGISTERS UP LDA NT FOR NEXT DIVIDE JMP CONVT,I * * I/PSB FETCHES NEXT RECORD FROM SOURCE BUFFER * RETURNS WITH AN EOF FLAG, I.E. B=-1 EOF FOUND, B=0 NO EOF I/PSB NOP JSB DINP CLB STB NOLSF RESET LS FLAG. LDB SLNG LOAD RECORD LENGTH SSB IF LENGTH < 0, RETURN WITH JMP I/PSB,I EOF FLAG SET IN REGISTER CLB CLEAR EOF FLAG STB SCCNT RESET SOURCE CHARACTER CNTR JMP I/PSB,I * DISPL CLB RESET STB EXFLG EXCHANGE FLAG LDA TTYLU AND THE STA LSTLU LIST LU IFZ JSB REMCK IF COMMUNICATING REMOTELY, ISZ INTFL SET THE INTERACTIVE FLAG. XIF JSB LSTSB LIST CURRENT LINE JMP NODE1 PROCESS THE NEXT COMMAND. SPC 1 ./O JSB O/PSB OUTPUT PENDING LINE, THEN LDA DVTY IF DRIVER TYPE IS 07B GO TO "Q" CPA DVR07 COMMAND. JMP ./Q RSS OTHERWISE USE THE P COMMAND. SPC 2 ./C STB CFLG SET THE "C"FLAG TO -1. * ./P LDA DLMTR USE DLMTR FOR TAB STA TBFIL JSB TAB TAB THE LINE LDA SLNG IF AT EOF SSA PRINT EOF AND GET JMP ERR NEXT COMMAND. JSB SWPET SET UP INPUT BUFFER CCA SET LIST FLAG STA COMND FOR ./R MODE STB PMODE INITIAL MODE IS REPLACE PNXT JSB ECH GET A CHARACTER JMP PFIN IF EOL THEN EXIT CLB SET B FOR MODE CHECK CPA %R CONTROL R? JMP MODE YES GO RESET MODE INB INSERT MODE? CPA %I JMP MODE YES GO RESET CPA %S ALTERNATE COMMAND JMP MODE INB SET FOR DELETE MODE CPA %C DELETE MODE? JMP MODE YES GO RESET CPA %T TRUNCATE LINE MODE? JMP ./R YES GO WRAP UP T LDB PMODE GET THE CURRENT MODE CPB ZERO IF REPLACE JMP PRPL GO REPLACE CPB .1 IF INSERT JMP PINS GO INSERT CPB .2 IF DELETE JMP PDLS GO DELETE SPC 2 PRPL CPA DLMTR IS IT REALLY COPY JMP PCOPY YES GO COPY JSB OUTCR OUTPUT THE NEW CHARACTER SPC 1 PDLS JSB SCH GET THE OLD CHARACTER NOP IGNOR EOL JMP PNXT BURN THE OLD AND GO GET THE NEXT SPC 1 PCOPY JSB SCH GET THE CURRENT CHARACTER LDA B40 USE BLANK IF UNDEFINED JMP PINS2 SPC 1 PINS CPA DLMTR INSERT SPACES FOR LDA B40 DELIMITER PINS2 JSB OUTCR SEND IT OUT JMP PNXT GO PROCESS THE NEXT CHAR. SPC 1 PFIN JSB SCH MOVE THE REST JMP ./R OF THE LINE JSB OUTCR TO THE OUTPUT JMP PFIN BUFFER SPC 1 %R OCT 22 CONTROL R %I OCT 11 CONTROL I %C OCT 3 CONTROL C %S OCT 23 CONTROL S %T OCT 24 CONTROL T PMODE NOP * * SPSP ASC 1, MSPSP DEF SPSP * LST NOP STA CONVT SAVE TEMPORARILY. CLA PREPARE FOR NON-INTERACTIVE DEVICE. CPA NOPRN IF DEVICE IS INTERACTIVE, JMP LST0 THEN PROCEED TO LIST THE LINE. IFZ STA INTFL CLEAR COMMAND-READ INDICATOR. XIF JMP LST,I NON-INTERACTIVE: RETURN IMMEDIATELY. * LST0 LDA CONVT RETRIEVE . CMB,INB,SZB COMPLEMENT CHARACTER COUNT JMP LST1 CONTINUE IF NOT ZERO LDA MSPSP OTHERWISE OUTPUT SPACES LDB M2 LST1 ADB M2 ADD TWO TO THE CHAR. COUNT STB LSTB2 AND SET IT CCB SUBTRACT ONE ADB A FROM THE BUFFER ADDRESS STB LSTB1 AND SET IT LDA B,I GET THE CURRENT CHAR. STA LSTB3 SAVE IT LDA SPSP NOW SET STA B,I THE FIRST CHARS. TO BLANKS IFZ LDA INTFL IF THE INTERACTIVE SZA FLAG IS SET, JMP LSINT GO SET UP FOR WRITE-READ. XIF SPC 1 JSB DEXEC ***************** DEF LSRTN IFZ DEF NODE XIF DEF .2.I LIST DEF LSTLU RECORD LSTB1 NOP DEF LSTB2 LSRTN JMP ERR LIST ABORT RETURN, GIVE "??" IFZ JMP LSTEX BYPASS WRITE-READ SET UP. SPC 1 LSINT LDA LSTB1 GET BUFFER ADDRESS. LDB LSTB2 GET BUFFER CHARACTER COUNT. JSB INTER WRITE BUFFER & READ COMMAND. XIF LSTEX LDA LSTB3 RESTORE THE STA LSTB1,I OLD WORD. JMP LST,I SPC 1 LSTB2 NOP LSTB3 NOP SPC 1 LSTSB NOP USED AS TEMP LDA SBUFP FETCH RECORD LENGTH LDB SLNG AND LOCATION SSB IF AT EOF JMP EOFPR GO PRINT "EOF" JSB LST PERFORM LIST JMP LSTSB,I * STRK# NOP SOURCE TRACK # SRCLU NOP SOURCE DISK LU NWTRK NOP RETURN OF TRACK FROM DISC ALLOC REQ. DTRK# NOP DESTINATION TRACK # NEWLU NOP RETURN OF LU FROM DISK ALLOC REQ. DSTLU NOP DESTINATION LU DSEC# NOP DESTINATION SECTOR # SSEC# NOP SOURCE SECTOR # .4 OCT 4 RCODE OCT 100001 * * RQST REQUESTS A TRACK FROM SYSTEM RQST NOP LDA RCODE ONE TRACK REQUEST STA RQSTC CODE WITH UNAVAIL. RETURN SPC 1 RQ.TR JSB EXEC ********************************* DEF *+6 DEF .4 REQUEST DEF RQSTC TRACK DEF NWTRK FROM DEF NEWLU SYSTEM DEF DSCTR ************************************ SPC 1 LDA NWTRK WAS THE REQUEST SSA,RSS HONORED? ISZ #TCNT YES, ADD 1 TO OUTSTANDING TRACK COUNT. SSA,RSS WAS A TRACK ALLOCATED? JMP RQST,I YES - RETURN l CLA,INA NO - PRINT MESSAGE STA RQSTC AND REQUEST JSB PRINT TRACK WITH DEF RQ.TR SUSPENSION IF DEC 12 UNAVAILABLE. NAME2 ASC 12,EDITR WAITING FOR TRACKS * #TCNT NOP CURRENT # TRACKS OBTAINED FROM SYSTEM. * SETSO NOP SET UP THE SOURCE ROUTINE LDA LSLUT LOAD LS LU AND TRACK LDB .2 ASSUME LU 2 CLE,ELA SHIFT LU FLAG INTO E ALF,ALF MOVE TRACK TO LOWER BYTE STA STRK# STORE SOURCE TRACK # CLA,SEZ LU = 3 ? INB YES, INCREMENT LU STB SRCLU STORE SOURCE LU # STA #TRAK ZERO THE TRACK-RELEASE COUNT. STA SSEC# RESET SOURCE SECTOR NUMBER CCA INITIALIZE THE STA SNTRF NEW-TRACK FLAG =-1 JMP SETSO,I RETURN SPC 1 * ALCAT SETS SOURCE TRACK AND LU AND REQUESTS A DESTINATION * TRACK FROM SYSTEM. * ALCAT NOP JSB SETSO SET UP THE SOURCE JSB RQST REQUEST TRACK FROM SYSTEM LDA NWTRK STORE NEW STA DTRK# TRACK NUMBER LDB NEWLU STORE STB DSTLU NEW LU ALF,CLE,ALF MOVE TRACK # TO UPPER BYTE SLB LU = 3 ? CCE YES, SET E BIT ERA SHIFT E INTO DESTINATION FILE STA DSTRT LU AND TRACK WORD CLA RESET STA DSEC# DEST. SECTOR POINTER AND STA T#SEC TOTAL # OF DEST. SECTORS AND STA T#REC TOTAL # OF DEST. RECORDS JMP ALCAT,I * P1 NOP P2 NOP DSTRT NOP * EOFND STB SLNG JMP DINP,I * DINP NOP LDA SLNG FETCH RECORD LENGTH SSA,INA AT EOF? JMP DINP,I YES, RETURN ISZ LINES BUMP SOURCE LINE COUNTER JMP *+2 ALLOWING HUGE NUMBER ISZ LINEM (DOUBLE WORD). ARS COMPUTE ADDRESS ADA SBUFP OF NEXT RECORD CPA SB%END IF AT END OF BUFFER JMP DINP3 GO TO INPUT FROM DISC LDB A,I LOAD RECORD LENGTH OF NEXT RECORD INA STORE ADDRESS OF NEXT STA SBUFP RECORD IN INPUT BUFFER SSB IF RECORD LENGTH < 0, JMP EOFND THEN GO TO EOF FOUND BLF,BLF CONVERT BLR TO # OF STB SLNG CHARACTERS AND SAVE ADB MAXIN IF RECORD GREATER CMB,SSB,INB,SZB THAN MAX. LENGTH JMP $$$ER GIVE CORRUPT FILE ERROR LDB SLNG FETCH RECORD BRS LENGTH IN WORDS ADB A IF RECORD IS CMB,INB CONTAINED IN ADB SBEND INPUT BUFFER SSB,RSS THEN JMP DINP,I RETURN LDB SLNG FETCH RECORD LENGTH BRS IN WORDS CMB,INB COMPLEMENT FOR LOOP COUNTER STA P1 SET UP ADA MWDC1 POINTERS STA P2 FOR STA SBUFP RECORD MOVE LDA P1 GET SOURCE BEGIN ADDR CMA,INA NEGATE WITH REC SIZE ADA B TO COMPUTE NUMBER INA OF WORDS WHICH ARE ADA LWA PAST LWA SSA,RSS JMP DINP0 NONE, SO (B) IS SIZE CMA,INA ADB A NEG WDS PAST, SUBTR FROM (B) DINP0 SZB,RSS JMP DINP2 GO READ DISC IF 0 TO MOVE SPC 1 DINP1 LDA P1,I MOVE STA P2,I RECORD ISZ P1 RESIDUE ISZ P2 IN FRONT OF INB,SZB INPUT BUFFER JMP DINP1 DINP2 JSB MIN READ BUFFER FROM DISC JMP DINP,I DINP3 JSB SQ JMP DINP,I * SQ NOP JSB MIN FILL INPUT BUFFER FROM DISC LDA SBUF$,I FETCH RECORD LENGTH LDB SBUF$ COMPUTE START OF INB RECORD ADDRESS STB SBUFP AND SAVE ALF,ALF CONVERT RECORD LENGTH ALS WORD TO NUMBER STA SLNG OF CHARACTERS 9#AND SAVE SSA,RSS IF EOF SKIP ADA MAXIN IF RECORD LENGTH GREATER CMA,SSA,INA,SZA THAN MAX ALLOWED JMP $$$ER GIVE CORRUPT FILE ERROR JMP SQ,I * DSCTR NOP DESTINATION SECTORS PER TRACK DNTRF NOP DEST. FILE NEW TRACK FLAG SNTRF NOP SOURCE FILE NEW TRACK FLAG .5 OCT 5 SEC# NOP WDCNT NOP * * * MIN MOVES SOURCE FILE INTO CORE MIN NOP LDA SNTRF READ FROM NEW SSA SOURCE TRACK? ISZ #TRAK YES, BUMP RELEASE TRACK COUNT CLA RESET STA SNTRF NEW TRACK FLAG LDA SSEC# GET NEXT SECTOR POINTER STA SVSSC SAVE THE SOURCE SECTOR. ADA SCT ADD BUFFER SECTOR SIZE CMA LDB SRCLU GET READ LU STB SVSLU SAVE SOURCE LU FOR MERGES. SLB,RSS IF LU = 2 ADA SECT2 USE #SEC FOR LU2 SLB ELSE LU 3 ADA SECT3 WOULD READ CROSS SSA,RSS TRACK BOUNDARY? JMP RDISC NO, GO TO READ CCB SET STB SNTRF NEW TRACK FLAG ADA SCT READ TO END OF CURRENT INA,RSS TRACK, SKIP NEXT INSTRUCTION SPC 1 RDISC LDA SCT LOAD NUMBER OF SECTORS ASL 6 CONVERT SECTORS TO WORDS STA WDCNT STA SVSWC SAVE THE WORD COUNT CMA,INA STORE STA MWDC1 -(WORD COUNT) LDA STRK# STA SVSTR SAVE SOURCE TRACK FOR MERGES. SPC 1 JSB EXEC ************************** DEF *+7 DEF .1 READ DEF SRCLU THE DEF SBUF$,I DISC DEF WDCNT DEF STRK# DEF SSEC# *************************** SPC 1 LDA WDCNT STORE END ADA SBUF$ OF DATA ADDRESS STA SBEND IN SBEND LDA SNTRF SSA NEW TRACK? JMP NTRAK YES, GO TO NEW TRACK PROCESSING LDA SSEC# MOVE ADA SCT SOURCE SECTOR STA SSEC# POINTER JMP MIN,I NTRAK CLA RESET SOURCE STA SSEC# SECTOR POINTER CPA RELS IF RELEASE FLAG IS ZERO JSB RELSR RELEASE SOURCE TRACK CCA MOVE BUFFER END POINTER ADA SBEND SO CODE WORD IS NOT STA SBEND INCLUDED IN SOURCE ISZ MWDC1 INCREMENT -(WORD COUNT) LDA SBEND,I GET CODE WORD AND LBYTE (LAST WORD ON TRACK) STA STRK# AND SET TRACK XOR SBEND,I AND LU POINTERS ALF,ALF TO NEXT TRACK STA SRCLU IN SOURCE JMP MIN,I * * RELSR RELEASES SOURCE TRACK RELSR NOP LDB SRCLU LDA TAT GET TRACK ASSIGNMENT TABLE ADRS CPB .3 LU = 3? ADA TATSD YES, ADD SYSTEM TRACKS TO ADRS ADA STRK# ADD TRACK TO BE RELEASED LDA A,I DOES THIS CPA XIDT "EDITR" RSS OWN TRACK JMP RELSR,I NO, RETURN JSB EXEC YES, RELEASE TRACK DEF *+5 DEF .5 DEF .1 DEF STRK# DEF SRCLU * LDA #TCNT GET OUTSTANDING TRACK COUNT. SZA IF NON-ZERO, ADA M1 SUBTRACT THE ONE JUST RELEASED, STA #TCNT AND UPDATE THE COUNT. JMP RELSR,I RETURN. * .3 OCT 3 SVSSC NOP SVSLU NOP SVSWC NOP SVSTR NOP SKP DOUTP NOP CMA TRUNCATE STA ODDF (ALWAYS -VE) ADA MAXOP OUTPUT CMA,SSA,RSS LENGTH CLA TO MAXOP. ADA MAXOP CPA MAXOP IF RECORD LENGTH=MAXOP JMP ODD? TEST FOR ODD # CHARACTERS. DOUP1 STB P1 SAVE BUFFER ADDRESS SLA,ARS CONVERT # CHARS. TO # WORDS INA ADD ONE WHEN ODD ISZ T#REC BUMP NUMBER OF RECORDS CNTR. JMP *+2 ALLOWING HUGE NUMBER ISZ T#REM (DOUBLE INTEGER) ALF,ALF +MOVE WORD COUNT TO STA DBUFP,I UPPER BYTE AND STORE ALF,ALF COMPUTE LOOP CMA,INA,SZA,RSS COUNTER FOR MOVE. IF = 0 JMP DOUP5 GO TO END BUFR. TEST STA CNT1 ELSE SAVE IT. DOUP2 ISZ DBUFP BUMP DEST. BUFFER POINTER LDB DBUFP CPB DBEND END OF BUFFER? JSB DOUT YES, OUTPUT IT LDA P1,I MOVE NEXT WORD STA DBUFP,I TO OUTPUT BUFFER ISZ P1 BUMP SOURCE ADDRESS ISZ CNT1 LAST WORD IN RECORD? JMP DOUP2 NO, CONTINUE MOVE LDA ODDF IF RECORD LENGTH NOT ODD, SZA JMP DOUP5 GO AWAY NORMALLY. LDA DBUFP,I BUT WITH RECORD LENGTH ODD, AND HBYTE REPLACE THE EVEN CHARACTER IOR TBFIL BEYOND DESIRED LENGTH WITH STA DBUFP,I A BLANK. DOUP5 ISZ DBUFP BUMP DEST. BUFR PNTR. LDB DBUFP CPB DBEND IF AT END OF DEST. BUFFER JSB DOUT OUTPUT BUFFER TO DISC, JMP DOUTP,I ELSE RETURN SPC 1 ODD? SLA,RSS JMP DOUP1 EVEN. NO FIXUP NEEDED. CLA STA ODDF SET TO SHOW ODD. LDA MAXOP RESTORE FOR MORE PROCESSING. JMP DOUP1 SPC 1 HBYTE OCT 177400 MASK FOR HIGH BYTE. ODDF OCT -1 0 MEANS ODD, -VE MEANS EVEN. SKP * DOUT WRITES THE DESTINATION BUFFER ON A SYSTEM-ASSIGNED TRACK. * WHEN THE TRACK WILL BE FILLED BY A WRITE, DOUT REQUESTS A * NEW TRACK, MERGES THE RETURNED LU AND TRACK, AND STORES THE * RESULTING CODE WORD INTO THE LAST WORD OF THE CURRENT TRACK. * THE REST OF THE DESTINATION BUFFER (IF ANY) IS THEN WRITTEN * ON THE NEW DESTINATION TRACK. SPC 2 DOUT NOP CLA RESET NEW STA DNTRF DEST. TRACK FLAG LDA SCT LOAD OF SECTRS TO BE WRITTEN LDB PBFLG PARTIAL BUFFER TO SZB BE WRITTEN? LDA B YES, A_# OF SECTORS PBTRB STA SEC# STORE zNUMBER OF SECTORS OF WRITE ADA DSEC# TRACK CMA BOUNDARY ADA DSCTR CROSSED? SSA,RSS JMP WDISK NO, PERFORM WRITE STA DNTRF SET NEW TRACK FLAG ADA SEC# INA,RSS WDISK LDA SEC# LDB T#SEC ADD NUMBER ADB A OF SECTORS TO STB T#SEC TOTAL NUMBER OF SECTORS ASL 6 CONVERT SECTORS TO WORDS STA WDCNT LDA DNTRF SSA,RSS NEW TRACK? JMP ECALL NO, GO TO EXEC CALL JSB RQST REQUEST NEW TRACK FROM SYSTEM CCB GET ADDRESS ADB DBUF$ OF LAST WORD ADB WDCNT ON TRACK LDA B,I SAVE DISPLACED WORD STA TEMP IN TEMP LDA NEWLU SET UP ALF,ALF AND IOR NWTRK STORE STA B,I CODE WORD INB STORE ADDRESS OF STB RESDU BUFFER RESIDUE SPC 1 ECALL JSB EXEC **************************** DEF *+7 DEF .2 WRITE DESTINATION DEF DSTLU FILE BUFFER DEF DBUF$,I ON DISC DEF WDCNT DEF DTRK# DEF DSEC# ************************ SPC 1 LDB DBUF$ RESET DESTINATION STB DBUFP BUFFER POINTER LDA DNTRF SSA NEW TRACK? JMP NTRK LDA DSEC# COMPUTE ADA SEC# NEXT SECTOR STA DSEC# POINTER JMP DOUT,I SPC 1 NTRK LDB NEWLU STORE STB DSTLU NEW LU LDB NWTRK STORE NEW STB DTRK# TRACK NUMBER CLA RESET NEXT STA DSEC# SECTOR POINTER LDB TEMP MOVE WORD DISPLACED BY CODE STB DBUFP,I WORD TO START OF BUFFER ISZ DBUFP LDA DNTRF CMA,SZA,RSS JMP PBCHK BUFR ENDED ON TRK BOUDARY, CHECK PBFLG ASL 6 CMA,INA MVR LDB RESDU,I MOVE RESIDUE TO START OF BUFFER STB DBUFP,I ISZ RESDU vQNLH ISZ DBUFP INA,SZA JMP MVR PBCHK LDA PBFLG SZA,RSS PARTIAL BUFFER? JMP DOUT,I NO,RETURN LDA DNTRF YES, OUTPUT BUFFER RESIDUE CMA,SZA,RSS COMPL. TO GET SECTR RESID., IF 0 INA INCREMENT FOR WRITE OF CODE WORD CLB STB DNTRF RESET NEW TRACK FLAG JMP PBTRB * RESDU NOP MWDC1 NOP DBUFP NOP POINT TO CURRENT LOC IN DEST BUFFER CNT1 NOP ALSO , T#REC NOP CURRENT # OF REC IN DEST FILE T#REM NOP MOST SIG BITS FOR >65K T#SEC NOP CURRENT # OF SCTRS IN DEST FILE B60 OCT 60 TEMP NOP #TRAK NOP TRACK-RELEASE COUNT. RELS DEC -1 ./EFL NOP PASS1 DEC -1 FIRST PASS FLAG LSTRK NOP LS#TR NOP SKP 2N./K JSB ./B1 RESET TO START OF FILE. ./K0 LDA SLNG RECORD LENGTH, CHARS. LDB MAXOP REQUESTED FIELD WIDTH. CMB,INB ADB A IF > OR = SPECIFIED MAX., SSB,RSS LDA MAXOP SET TO REQUEST MAX. SSA IF EOF, PRINT EOF JMP EOFPR AND GET NEXT COMMAND. SLA DON'T THROW AWAY ODD CHARACTER, INA BUMP COUNT TO EVEN. ARS ./K1 ADA M1 SZA,RSS JMP ./K2 PROCESS THIS RECORD. LDB SBUFP ADB A POINT TO NEXT CHAR. PAIR LDB B,I CPB SPSP IF THEY ARE BOTH BLANKS, JMP ./K1 CONTINUE TO SHORTEN RECORD. ./K2 INA CORRECT TO NEW # OF WORDS. ALS CONVERT TO CHARACTER COUNT. LDB SBUFP JSB DOUTP SEND RECORD TO DEST. FILE JSB DINP GET NEXT RECORD. JMP ./K0 * ./M JSB SC.CR GET THE FILE NAME JMP ERR ERROR IF NO FILE NAME JSB TR SEND THE PENDING LINE JSB INSRC FETCH THE FILE NOP IGNOR NOT FOUND ERROR SPC 1 JSB EXEC NOW GET DEF *+7 THE OLD SOURCE DEF .1 BACK IN DEF SVSLU CORE DEF SBUF$,I DEF SVSWC DEF SVSTR DEF SVSSC SPC 1 JMP DISPL * SPC 1 ./J LDA SLNG IF NOT SSA,RSS AT EOF JSB O/PSB OUTPUT PENDING LINE CLA RESET THE EXCHANGE STA EXFLG FLAG AND CLA,INA THE CURRENT STA LINES LINE NUMBER JSB SETSO SET UP THE INPUT JSB SQ READ THE FIRST BLOCK JMP COMP1 START SEARCH SPC 1 * ./B RESETS SOURCE POINTER TO BEGINNING OF FILE BY * COMPLETION OF TRANSFER OF SOURCE FILE TO DESTINATION * FILE THEN DEFINING THE DEST. FILE AS THE SOURCE FILE * ./B JSB ./B1 PERFORM TRANSFER JMP COMP1 START SEARCH SPC 1 ./B1 NOP I JSB ./B$ COMPLETE TRANSFER. CLA STA EXFLG RESET EXCHANGE FLAG STA PBFLG RESET PARTIAL BUFFER FLAG CLA,INA STA LINES RESET LINE COUNTER JSB ALCAT GET NEW SOUCE AND DEST. FILE JSB SQ READ IN FIRST BLOCK JMP ./B1,I FILL INPUT BUFFER * *./B$ COMPLETES TRANSFER OF SOURCE TO DESTINATION. ./B$ NOP JSB TR TRANSFER SOURCE SSB,RSS TO DESTINATION JMP *-2 FILE CCA PUT END OF STA DBUFP,I FILE RECORD IN ISZ DBUFP OUTPUT BUFFER LDA DBUF$ DETERMINE CMA,INA SIZE ADA DBUFP OF BUFFER CLB CONVERT SIZE ASR 6 TO SECTORS INA ROUNDING UP FOR ANY FRACTION STA PBFLG STORE IN PARTIAL BUFR FLAG JSB DOUT OUTPUT BUFFER TO DISC LDA #TRAK GET THE # OF TRACKS LDB LSLUT AND FIRST SOURCE TRACK ISZ PASS1 FIRST PASS AT SOURCE? JMP ./B2 NO - GO RELEASE TRACKS STA LS#TR YES - SAVE TRACK COUNT RSS BUT SKIP RELEASE ./B2 JSB RELTR RELEASE OLD SOURCE TRACKS LDA DSTRT SET SOURCE FILE POINTER TO STA LSLUT START OF DEST. FILE JMP ./B$,I SPC 1 RELTR NOP CMA,INA FORM A NEGATIVE TRACK COUNT STA TEMP AND SAVE STB LSLUT STORE START TRACK CLA CLEAR THE RELEASE INHIBIT STA RELS FLAG JSB SETSO SET UP TO READ THE SOURCE TRK2 LDA SRCLU GET THE LU LDB SECT2 GET SECTOR COUNT FOR LU 2 SLA IF LU 3 LDB SECT3 USE LU 3 COUNT ADB M2 SUBTRACT FOR 128 READ STB SSEC# SET DISC ADDRESS FOR MIN READT JSB MIN GO READ TRACK AND RELEASE IT LDA SNTRF GET THE NEW TRACK FLAG. SSA,RSS WAS A TRACK RELEASED? JMP READT NO. CONTINUE READING. ISZ TEMP DONE? JMP TRK2 NO - DO NEXT ONE CCA YES - CLEAR THE FLAG STA RELS SO NO MORE ARE RELEASED. JMP RELTR,I *EOFPR PRINTS "EOF THEN RETURNS FOR NEXT COMMAND * EOFPR CLA PREPARE FOR NON-INTERACTIVE DEVICE. CPA NOPRN IF IT'S INTERACTIVE, JMP EOFPN PROCEED TO PRINT THE MESSAGE. IFZ STA INTFL CLEAR REMOTE COMMAND READ INDICATOR. XIF JMP NODE1 GO TO READ THE NEXT COMMAND. EOFPN EQU * IFZ JSB REMCK IF COMMUNICATING REMOTELY, JMP REMEO PERFORM WRITE-READ. XIF JSB PRINT DEF NODE1 EOFLN DEC -4 EOFMS ASC 4,EOF IFZ EOFAD DEF EOFMS * REMEO LDA EOFAD GET BUFFER ADDRESS. LDB EOFLN GET MESSAGE LENGTH. ISZ INTFL SET THE INTERACTIVE FLAG. JSB INTER WRITE EOF MESSAGE/READ NEXT COMMAND. JMP NODE1 GO TO PROCESS THE COMMAND. XIF SPC 1 * ./A TERMINATES EXECUTION LEAVING ORIGINAL LS AREA UNTOUCHED * ./A JSB ECH IF ANY CHARACTERS RSS FOLLOWING THE "A" JMP ERR GIVE AN ERROR INSTEAD OF ABORT ./A0 CLA STA LSTFG PREVENT LISTING. LDA NOPRN GET INTERACTIVE FLAG. STA TYPEQ SAVE, TEMPORARILY. CCA STA NOPRN PREVENT REPETITIOUS ERROR MESSAGES. JSB ./B$ COMPLETE TRANSFER TO DESTINATION. LDA #TCNT GET NO. OF DEST. TRACKS, LDB LSLUT AND FIRST TRACK SPEC. SZA ANY DESTINATION TRACKS? JSB RELTR YES, GO TO RELEASE DEST. TRACKS. LDA TYPEQ RESET THE INTERACTIVE FLAG STA NOPRN FOR THE FINAL MESSAGE. ./A1 JSB PRINT DEF EXIT DEC 7 NAME ASC 7,EDITR ABORTED * * ./E COMPLETES TRANSFER OF SOURCE TO DESTINATION THEN * TERMINATES IF THERE IS NO INPUT ERROR. SPC 1 ./E STA ./EFL SHOW WE'VE BEEN HERE. JSB ./B$ COMPLETE XFER OF SOURCE TO DEST. ./E2 JSB ECnH JMP ERR JSB LCASE CONVERT LOWER CASE CHAR.--IF NECESSARY. STA SAVL FOR RETURN TO SCHEDULER. CPA "L" SET SYSTEM LS POINTER? RSS JMP ./E3 IFZ JSB REMCK REMOTE CRT? JMP ERR YES, CAN'T ACCESS LS XIF SPC 1 JSB $LIBR ******************************* NOP TURN OFF MEMORY PROTECT AND LDA LSLUT SET SYSTEM LS AREA POINTER STA SFCUN TO FINAL FILE ADDRESS JSB $LIBX THEN TURN MEMORY PROTECT DEF *+1 BACK ON DEF LSTLS ****************************** SPC 1 DLU. DEF LU. DTRK. DEF TRK. DLSB DEF LSBUF DTBF0 DEF TBUF0 PERMANENT SAVE. LSLU NOP RETURN TO SCHEDULER LTRAK NOP RETURN TO SCHEDULER LSBUF ASC 4,LS FILE X, LU. ASC 1,2, TRK. ASC 2,XXX SPC 1 LSTLS LDA TBUFF STA DTBF0 LDA DLU. STA TBUFF LDB SFCUN LDA .2 SSB INA STA LSLU CLB JSB DEC CONVERT LU TO ASCII CLA STA OCCNT RESET CHAR COUNTER LDA DTRK. POINT TO TRACK ASCII STA TBUFF LDA SFCUN GET LS TRACK CLE,ELA SHUNT OUT LU ALF,ALF STA LTRAK B ALREADY CLEAR FROM ABOVE JSB DEC LDB OCCNT ACTUAL # OF DIGITS. ADB .10 INCREASE BY PREL CHARS LDA DLSB POINT TO MESSAGE, JSB LST AND SEND IT OUT. LDA DTBF0 RESTORE PRIMARY OUTPUT STA TBUFF POINTER AND RESET CLA CHARACTER COUNTER. STA OCCNT SPC 1 JSB ECH FETCH C OR R JMP ENDMS NONE, GO TO END MESSAGE JSB LCASE CONVERT LOWER CASE CHAR. IF NECESSARY. ./E3 STA ./EFL SAVE COMMAND MODE JSB SC.CR PARSE FILE NAME JMP CHEKR /R IS VALID TO REPLACE SOURCE. LDA ./EFL FETCH COMMAND MODE CPA "C" IF C JMP CRFIL rQ GO TO CREATE FILE CPA "R" IF R JMP RPFIL GO TO REPLACE FILE JMP ERR OTHERWISE GO TO ERROR SPC 1 CHEKR LDA ./EFL GET COMND CPA "R" IF IT'S R, PICK UP TURN-ON RSS FILE NAME:SC:CR. JMP ERR NOT R - ERROR. LDA NBUFF CHANGE POINTER FOR SENDING STA TBUFF FILE NAME. DLD FSECW PICK UP TURN-ON SC DST FSECR AND CR. JMP RPFIL TRY TO REPLACE. SPC 1 NBUFF DEF NBUF0 SPC 1 CRFIL DLD T#REC COMPUTE FILE SIZE NEEDED ASR 6 IN 128 WORD BLOCKS ADA T#SEC FSIZE = ARS ( T#REC/64 + T#SEC )/2 + 1 INA STA FSIZE SPC 1 JSB CREAT CREATE OUTPUT FILE DEF *+9 DEF DBUF$,I DCB DEF RUBSH ERROR BUCKET DEF TBUFF,I FILE NAME DEF FSIZE # OF BLOCKS DEF .4 TYPE 4 DEF FSECR SECURITY CODE DEF FCART CARTRIDGE ID DEF DCBSZ DCB SIZE SPC 1 SSA ERROR FROM CREATE? JMP FMPC YES, PRINT MESSAGE JMP WRITR GO TO OUTPUT FILE SPC 1 RPFIL JSB OPEN OPEN OUTPUT FILE DEF *+8 DEF DBUF$,I DEF RUBSH DEF TBUFF,I DEF ZERO DEF FSECR DEF FCART DEF DCBSZ SPC 1 SSA ERROR FROM OPEN? JMP FMPC YES, PRINT ERROR MESSAGE SPC 1 WRITR JSB SETSO SET UP TO READ SOURCE. JSB SQ READ IN FIRST BLOCK NXREC LDB SLNG CONVERT # CHARS. TO BRS # OF WORDS STB RCLNG SPC 1 JSB WRITF WRITE DEF *+5 RECORD DEF DBUF$,I ON DEF RUBSH OUTPUT DEF SBUFP,I FILE DEF RCLNG SSA IF ERROR, PRINT MESSAGE AND JMP FMPC TRY TO RECOVER LDA RCLNG IF EOF WRITTEN SSA GO TO JMP CLSFL CLOSE FILE JSB I/PSB READ NEXT RECORD JMP NXREC CONTINUE SPC 1 CLSFL JSB CLOSE CLOSE DEF *+2 OUTPUT DEF DBUF$,I FILE SPC 1 SSA IF ERROR PRINT MESSAGE JSB FMPER AND END SPC 1 ENDMS LDA LS#TR FETCH OLD SOURCE TRACK LDB LSTRK COUNT AND POINTER SZB IF POINTER IS NON-ZERO JSB RELTR RELEASE TRACKS SPC 1 JSB PRINT END OF EDIT MESSAGE DEF PRETN DEC 6 ASC 6,END OF EDIT * PRETN LDA SAVL IF E COMMAND INCLUDED L, CPA "L" REPORT THE LS LU AND RSS TRACK BACK TO THE JMP EXIT SCHEDULER. JSB PRTN DEF EXIT DEF LSLU SPC 1 ****** TERMINATION HERE ******** EXIT JSB EXEC DEF *+2 DEF .6 *** * SPC 1 SAVL OCT 0 SAVE PARAMETER FOLLOWING /E .6 DEC 6 B40 OCT 40 M58 DEC -58 M5 DEC -5 M2 DEC -2 "C" OCT 103 M1 DEC -1 .1 OCT 1 .2 OCT 2 M3 DEC -3 DBEND NOP SBEND NOP SPC 1 $$$ER JSB PRINT DEF ./A0 DEC 6 ASC 6,CORRUPT FILE SPC 1 PRINT NOP LDA NOPRN GET THE INTERACTIVE DEVICE FLAG. SZA IF IT'S NON-INTERACTIVE JMP PRNTX THEN, FORGET THE MESSAGE. LDA PRINT INA STA ERMEC INA STA ERMEP JSB DEXEC DEF PRNER IFZ DEF NODE XIF DEF .2.I DEF TTYLU ERMEP NOP ERMEC NOP PRNER CCB,RSS CLB PRNTX LDA PRINT,I JMP A,I * FSECR NOP FILE SECURITY CODE FCART NOP FILE CARTRIDGE REFERENCE NUMBER FSECW NOP SAVE SC DURING TURN-ON. FCARW NOP DITTO CR .75 DEC 75 ZERO NOP DBFP1 NOP * SC.CR NOP JSB NXCHR FETCH FIRST CHARACTER OF NAME JMP SC.CR,I NONE, SO RETURN ISZ SC.CR NAME GIVEN SO BUMP RETURN ADRS ONAME JSB OUTCR OUTPUT NAME CHARACTER JSB NXCHR FETCH NEXT CHAR. RSS JMP ONAME GO TO OUTPUT IT LDA M5 SPACE STA CNT1 FILL ONAM1 LDA B40 NAME JSB OUTCR ISZ CNT1 JMP ONAM1 JSB PARAM FETCH NOP SECURITY CODE STA FSECR AND SAVE. JSB PARAM FETCH NOP CARTRIDGE NUMBER STA FCART AND SAVE. JMP SC.CR,I SPC 1 RLSAL JSB EXEC RELEASE ALL TRACKS DEF *+3 OWNED BY EDITR. DEF .5 DEF M1 JMP IN2 SKP * INSRC FINDS AND LOADS NEW SOURCE FILE. * * - CONDITIONALLY RELEASES ALL THIS EDITR'S TRACKS. * - READS SOURCE (FMGR) FILE INTO DESTINATION BUFFER, ONE RECORD * AT A TIME, DELETING TRAILING DOUBLE BLANKS. * - WHEN DESTINATION BUFFER IS FULL, CALLS TO WRITE THE * BUFFER IN SYSTEM-ASSIGNED TRACK IN LS FORMAT. * INSRC NOP JSB OPEN OPEN INPUT FILE DEF *+8 DEF SBUF$,I DEF RUBSH DEF TBUFF,I DEF ZERO DEF FSECR DEF FCART DEF DCBSZ SSA,RSS ERROR ON OPEN? JMP IN1 NO, READ IN FILE JSB FMPER YES, PRINT ERROR JMP INSRC,I ERROR RETURN IN1 ISZ INSRC STEP TO OK RETURN LDA EXFLG ORIGINAL INPUT SSA,RSS FILE OR MERGE FILE? JMP NXTRC MERGE FILE! LDA SFCUN LDB TAT IF THIS EDITR DOES NOT SSA ADB TATSD OWN THE TRACKS CLE,ELA ALF,ALF POINTED TO BY LS POINTER. ADB A LDA B,I THEN IT IS SAFE TO CPA XIDT RSS JMP RLSAL RELEASE ALL TRACKS. IN2 JSB ALCAT GET FIRST DEST. TRACK SPC 1 NXTRC LDA DBUFP SET DBFP1 INA TO STA DBFP1 DBUFP+1 SPC 1 JSB READF READ DEF *+6 SOURCE DEF SBUF$,I FILE DEF RUBSH DEF DBFP1,I DEF .75 DEF DBUFP,I SPC 1 SSA ERROR FROM READF? JMP FMPA YES, GO TO FILE MANAGER ABORT LDA DBUFP,I FETCH RECORD LENGTH SSA END OF FILE? JMP ENDFL YES, GO TO END PROCESS LDB EXFLG MERGE OR ORIGINAL? SSB JMP DEL? ORIGINAL ISZ T#REC INCREMENT DEST RECORD COUNT JMP *+2 DURING READ FOR A MERGE, ISZ T#REM IN DOUBLE-WORD INTEGER. * * THIS CODE DELETES TRAILING BLANKS FROM RECORDS * READ FROM THE FILE MANAGER DEL? ADA M1 BACK UP ONE WORD SZA,RSS IF LAST WORD IN RECORD JMP .NXT DO NOT DELETE LDB DBFP1 LOAD LAST ADB A WORD OF LDB B,I RECORD CPB SPSP IF LAST TWO CHARS. WERE JMP DEL? BLANK CONTINUE LOOKING * .NXT INA OTHERWISE BUMP WORD COUNT ALF,ALF MOVE RECORD LENGTH TO STA DBUFP,I UPPER BYTE ALF,ALF ADA DBFP1 ADD PREVIOUS POINTER STA DBUFP TO GET NEW POINTER CMA CHECK FOR AVAILABLE ROOM ADA DBEND TO END OF BUFFER. SSA,INA,RSS END OF OUTPUT BUFFER? JMP NXTRC NO, READ NEXT RECORD STA DBFP1 STORE NUMBER OF WORDS OF OVERFLOW JSB DOUT OUTPUT BUFFER LDA DBFP1 NO OVERFLOW SZA,RSS SO CONTINUE JMP NXTRC WITH READ LDB DBEND OTHERWISE FETCH OVERFLOW ADDRESS OVMVR LDA B,I MOVE STA DBUFP,I BUFFER INB OVERFLOW ISZ DBUFP INTO ISZ DBFP1 BEGINNING OF BUFFER JMP OVMVR JMP NXTRC READ NEXT RECORD ENDFL JSB CLOSE CLOSE DEF *+2 SOURCE DEF SBUF$,I FILE SSA ERROR FROM CLOSE? JSB FMPER YES, GO TO FILE MANAGER ERROR JMP INSRC,I RETURN * RUBSH NOP ANYTHING I DON'T WANT GOES HERE SPC 1 * FMPER PRINTS FILE MANAGER ERROR * FMPER NOP CMA,INA COMPLEMENT ERROR NUMBER CLB DIV .10 GENERATE ADA B60 ASCII FROM ADB B60 OCTAL ERROR NUMBER ALF,ALF IOR B STA MSGP+10 STORE IN MESSAGE JSB PRINT DEF FMP? DEC 11 MSGP ASC 11,FILE MANAGER ERROR -XX SPC 1 FMP? SZB JMP EXIT JMP FMPER,I SPC 1 FMPA JSB FMPER PRINT FILE MANAGER ERROR JMP ENDFL THEN ABORT THE READ SPC 1 FMPC JSB FMPER PRINT FILE MANAGER ERROR JMP NODE1 THEN GET NEXT COMMAND SPC 1 NBUF0 ASC 10, FOR NAME:SC:CR SPC 1 * RECORD BUFFERS - THESE BUFFERS ARE DYNAMICALLY ASSIGNED * FOR INSTANCE, DURING EDITING BUFFERS ARE * SWITCHED BY CHANGING POINTERS SO THAT * THE COMMAND BUFFER (INPUT FROM CONSOLE) * IS USED AS AN EXCHANGE FIELD OR MATCH FIELD * BUFFER. * TBUF0 BSS 75 XYBF0 BSS 75 EBUF0 BSS 75 * MBUF0 IS A SIMILAR BUFFER WHICH OVERLAYS ONE-TIME CODE * STARTING AT 'EDITR'. SPC 2 * DEFAULT TABS ARE COLUMNS 7 AND 21 SPC 1 TAB0 DEC -6,-20,0,0,0,0,0,0,0,0,0 * * SKP A EQU 0 B EQU 1 AVMEM EQU 1751B END OF FOREGROUND+1 BKLWA EQU 1777B LAST WORD OF AVAILABLE MEMORY TAT EQU 1656B TRACK ASSGNMNT TABLE ADDRESS XIDT EQU 1717B EDITR ID TABLE ENTRY ADDRESS TATSD EQU 1756B # OF TRACKS ON SYSTEM DISC SFCUN EQU 1767B SYSTEM LS AREA (LU/TRACK) * BIT 15=LU SECT2 EQU 1757B # SECTORS PER TRACK LU 2 SECT3 EQU 1760B # SECTORS PER TRACK LU 3 MXSEC EQU ECCNT CNTRL EQU SWPET USE ENTRY POINT AS TEMP NEGFL EQU MATCH T1 EQU NUM1 T2 EQU NUM10 NT EQU CFLG RQSTC EQU LSTSB ENTRY POINT USED AS TEMP FSIZE EQU CNT1 RCLNG EQU CNT1 BASE EQU JDEF$ INCR EQU IDEF$ EN<:6D EDITR * SKP IFN REIO EQU EXEC .2.I EQU .2 XIF A EQU 0 B EQU 1 AVMEM EQU 1751B END OF FOREGROUND+1 BKLWA EQU 1777B LAST WORD OF AVAILABLE MEMORY TAT EQU 1656B TRACK ASSGNMNT TABLE ADDRESS DRT EQU 1652B DEVICE REF. TABLE ADDRESS LUMAX EQU 1653B MAX LU ON SYSTEM XIDT EQU 1717B EDITR ID TABLE ENTRY ADDRESS TATSD EQU 1756B # OF TRACKS ON SYSTEM DISC SFCUN EQU 1767B SYSTEM LS AREA (LU/TRACK) * BIT 15=LU BITS 14-7=TRACK SECT2 EQU 1757B # SECTORS PER TRACK LU 2 SECT3 EQU 1760B # SECTORS PER TRACK LU 3 MXSEC EQU ECCNT CNTRL EQU SWPET USE ENTRY POINT AS TEMP NEGFL EQU MATCH T1 EQU NUM1 T2 EQU NUM10 NT EQU CFLG RQSTC EQU LSTSB ENTRY POINT USED AS TEMP FSIZE EQU CNT1 RCLNG EQU CNT1 BASE EQU JDEF$ INCR EQU IDEF$ END EDITR "< a7

    LINES JMP CN27C YES * **************ILLEGAL CONTROL REQUEST************* * * JMP REJ2 * B1 OCT 1 B13 OCT 13 B14 OCT 14 B26 OCT 26 B27 OCT 27 B65 OCT 65 B55 OCT 55 B160 OCT 160 B66 OCT 66 B103 OCT 103 ENCE OCT 10004 B300 OCT 300 * ******BACKSPACE 1 OR 2 RECORDS****** * BSR1 NOP BACKSPACE 1 LDB B61 GET ASCII <1> LDA BSR1 JMP OVER1 BSR2 NOP BACKSPACE 2 LDA BSR2 LDB B62 GET ASCII <2> OVER1 STA EQT8,I STORE RETURN ADD. STB EQT9,I SAVE 1 OR 2 LDA B55 SEND ASCII (-) JSB OUT4 LDA EQT9,I RETREIVE BS NUMBER JSB OUT1 LDA B160 SEND JSB OUT1 LDA B70 SEND JMP OUT5 * *********WRITE EOF************* * CN1C LDA B65 WRITE END OF FILE JSB OUT4 OUTPUT JMP OUT3 * ***********FORWARD SPACE RECORD************** * FSR1 NOP LDA FSR1 SAVE RETURN ADD. RSS CN3C CLA STA EQT8,I LDA B3 SET CONTROL REQUEST STA TEMP4 BECAUSE MAY GET HERE FROM READ 0 ADA B300 SET FOR FORWARD RECORD IOR EQT6,I ALSO SET IN CONWD BECAUSE WILL EXIT STA EQT6,I LDA B160 JSB OUT4 CN3C1 LDA B61 OUTPUT JMP OUT5 **********REWIND*************** CN4C JSB CTPRP JMP OUT3 REWIND * **********DYNAMIC STATUS***************** CN6C JSB CTUST GET CTU STATUS STA B LDA TEM11 GET DEVICE TYPE (OCTAL) RAL AND EQT16,I TEST EOF FLAG FOR DEVICE SZA ADB B200 EOF FLAG IS SET. SET IN EQT5 STB TEM8 CLA SET FOR GOOD RETURN STA EQT19,I JMP EOOP3 * * *********LEADER AND TOP OF FORM********** * FOR THIS REQUEST DRIVER WRITES A EOF * * IF IT DID NOT JUST DO SO,OR TAPE IS * * NOT AT LOAD POINT * ***************************************** * CN10C JSB CTUST GET STATUS AND B300 SZA,RSS DID WE JUST WRITE A EOF OR AT LP? JMP CN1C NO! GO WRITE IT JMP EOOP4 YES,DO NOT WRITE TWO IN A ROW * **********FORWARD SPACE 1 FILE ************ * CN13C LDA B62 OUTPUT JSB OUT4 JMP OUT3 * ************BACKSPACE 1 FILE ************* * BSF1 NOP LDA BSF1 STA EQT8,I LDA B55 OUTPUT JSB OUT4 LDA B61 OUTPUT JSB OUT1 LDA B160 OUTPUT JSB OUT1 LDA B62 OUTPUT JMP OUT5 * ********WRITE END OF VALID DATA (EOV) * CN26C LDA B66 OUTPUT JSB OUT4 JMP OUT3 * *******LOCATE ABSOLUTE FILE (CTU)********* *****************OR*********************** *******SPACE LINES (PRINTER)************** * CN28C LDA EQT10,I GET CONTROL REQUEST CPA B11 IS IT T.0.F. OR SPACE LINES? RSS JMP REJ2 ONLY LEGAL CONTROL TO PRINTER IS 11B CN27C JSB CTPRP PREP. TERM. FOR CTU REQUEST LDA EQT7,I GET FILE NO. SZA,RSS IF ZERO CHANGE TO 1 INA JSB BINAS CONVERT TO ASCII AND SEND LDA B160 OUTPUT JSB OUT1 LDB TEM10 GET DEVICE TYPE CPB B64 IS IT LP? RSS YES A LP JMP CN27D LDB EQT7,I GET OPTIONAL PARAM. IF (-) THEN T.O.F. SSB,RSS IF (+) THEN SPACE (EQT7) LINES. JMP CN3C1 GO OUTPUT CN27D LDA B62 OUTPUT * OUT5 JSB OUT1 OUT3 LDA B103 OUTPUT JSB OUT1 JSB NXQU JMP I25W5 GO WAIT FOR REQUEST COMPLETION OUT4 NOP LDB OUT4 SAVE RETURN ADDRESS STB EQT19,I JSB CTPRP JSB OUT1 LDA EQT19,I JMP A,I * *********BACKSPACE FILE AND RECORD******** * * BACKSPACE FILE AND RECORD REQUIRES SPECIAL PROCESSING * * TO POSITION AND SET STATUS AS A MAG. TAPE UNIT. THIS * * SPECIAL PROCESSING ENABLES THE USE OF EXISTING MTU * * SUBROUTINES. IF THE TAPE IS POSITIONED AFTER AN EOF THEN* * IT WILL MOVE BEFORE THE EOF AND A FLAG SET IN EQT16 * * (BIT3/BIT2 =RIGHT CTU/LEFT CTU) WHICH IS EXAMINED BY * * A DYNAMIC STATUS REQUEST. THESE SPECIAL EOF FLAGS ARE * * NECESSARY BECAUSE THE 264X DOES NOT RETURN EOF STATUS * * BEFORE THE EOF MARK. * * *********************************************************** * * * CN50C LDA EQT16,I SET CN50C ENTRY FLAG IOR B10 BIT3 STA EQT16,I LDB RSS SET CN50C FLAG STB EOOP7 JSB BSR1 ISSUE BACKSPACE 1 RECORD JSB CTUST GET STATUS STA TEM8 AND B103 CHECK FOR L.P. SZA JMP EOOPB WE ARE THERE LDA TEM8 Ҙ NOT AT L.P. AND B200 IF WE ARE AFTER EOF THE BIT 7 SET SZA,RSS JMP CN54C TAPE NOT AFTER EOF CN55C JSB BSR2 ISSUE BACKSPACE 2 RECORDS JSB CTUST IF AT EOF AGAIN WE ARE AFTER ANOTHER EOF STA TEM8 AND B103 CHECK FOR L.P. SZA JMP EOOPB LDA TEM8 AND B200 AND HENCE NO FORWARD SPACE SZA DO NOT SET EQT16 EOF FLAG IF JMP EOOPB BETWEEN EOF'S JSB FSR1 FORWARD ONE TO GET US BEFORE EOF * * LDA TEM11 GET DEVICE TYPE RAL FOR SETTING EOF FLAG IN EQT16 IOR EQT16,I BIT1/BIT2=EOF LCTU/EOF RCTU AND BN55 REMOVE CN50C FLAG STA EQT16,I RESTORE IT JSB CTUST GET STATUS IOR B200 ADD EOF BIT STA TEM8 JMP EOOPA * * CN54C LDA EQT10,I TAPE NOT AFTER EOF CPA B2 IS THIS A BS RECORD? JMP EOOPB YES JSB FSR1 GET TAPE TO ORIGINAL POSITION JSB CDINT RESET JSB BSF1 BS FILE TO GET US AFTER EOF JSB CDINT RESET JMP CN55C NOW POSITION BEFORE EOF XIF * *** GRAPH NOP LDA ESC FOR 26XX GRAPHICS SEND ESC,*,(SMALL) L JSB OUT1 LDA B52 JSB OUT2 SEND * JSB OUT1 LDA B154 SEND SMALL "L" JSB OUT1 JMP GRAPH,I *** ** DVA RECIV NOP LDB B5 SET CARD UP FOR RECEIVE,CHAR. JSB CDSET CLA JSB ECHO TURN OFF ECHO STC05 STC CARD ENABLE INTERRUPT JMP RECIV,I **************************************************** * SUBROUTINE READS 1 CHARACTER FROM IO CARD* * AND PLACES IT IN A REG. * * BOARD STATUS IS ALSO READ * * TEMP8=DATA * * TEMP9=BOARD STATUS * * **************************************************** * CHRIN NOP STC02 STC CARD PUT CARD IN DATA MODE LIA03 LIA CARD GET DATA WORD STA TEM14 STORE COMPLETE DATA WORD AT TEM14 AND B377 ISOLATE DATA CHAR.(0-7) STA TEMP8 STORE IT CLC02 CLC CARD PUT CARD IN STATUS MODE LIA02 LIA CARD GET STATUS WORD STA TEMP9 STORE IT LDA TEMP8 RESTORE DATA WORD STC03 STC CARD THIS IS NECESSARY JMP CHRIN,I INTERRUPT * * * *********************************************** * SUBROUTINE TRIGGERS BLOCK TRANSFERS * * FROM THE CPU. THIS IS DONE BY SENDING A * * DC1 TO TRIGGER THE TRANSFER AND * * THEN SETTING UP CARD TO RECEIVE DATA. * * SEE WARNING AT ENAK *********************************************** * DC1OT NOP LDA B21 JSB OUT1 LDA D.60 WAIT FOR DC1 TO RIPPLE THRU FIFO JSB TIMER 150 USECS ON XE(SPEC 64 MAX) LDB B4 JSB CDSET SET RECEIVE MODE JMP DC1OT,I RETURN * B5 OCT 5 B154 OCT 154 BN55 OCT 177767 BN20 OCT 50077 B10 OCT 10 BN17 OCT 40040 B400 OCT 400 BN19 OCT 30003 BN21 OCT 50000 D.60 DEC -60 * * * ****************************************************** * SUBROUTINE SETS UP THE IO CARD PER B REG. * * 1/0 IS CHARACTER/BLOCK * * 1/0 IS TRANSMIT/RECEIVE * * 1/0 IS CLEAR/NOT CLEAR INTERUPT FLAGS * * 1/0 SPECIAL CHARACTER IS/IS NOT TO BE * * ADDED OR DELETED.SPECIAL CHARACTER IS IN POSITION * * . 1/0 IS ADD/DELETE * * SPECIAL CHARACTER. * ****************************************************** * CDSET NOP LDA BN4 SET WORD1 IN A REG. SLB,BRS IOR B40 "OR" CHARACTER MODE BIT JSB OUT2 LDA BN17 SET WORD4 IN A REG(SET SBA) SLB,BRS IOR B400 "OR" TRANSMIT BIT JSB OUT2 LDA BN21 SET WORD5 IN A REG. SLB,BRS IOR 3B177 "OR" CLEAR INTERRUPTS JSB OUT2 LDA BN5 SET WORD6 IN A REG. SLB,RSS JMP OUT BRS,BRS BRS IOR B "OR" SPECIAL CHARACTER JSB OUT2 OUT JMP CDSET,I * * * ECHO NOP SET ECHO ON CARD PER A REG. IOR BN19 A =20/0 IS ECHO ON\OFF JSB OUT2 JMP ECHO,I * *************************************************** * SUBROUTINE INITIALIZES 12966 * * IO CARD. * * BELOW ARE THE INITIAL CONDITIONS FOR CONTROL: * * WORD 0 DO NOT SEND * * WORD 1 DO NOT SEND * * WORD 2 CE=1 STATUS REF. IS 0 * * WORD 3 CHARACTER FRAME CONTROL * * CHAR. SIZE=8 BITS * * NO PARITY * * ECHO ON (CRT REQUEST ONLY) * * ONE STOP BIT * * * WORD 4 INTERFACE CONTROL * * EXT. CLOCK * * DMA CONTROL OFF * * SBA/SCA ON * * CD (DATA TERM. READY) OFF * *N CA (REQUEST TO SEND) OFF * * TRANSMIT MODE ON * * MASTER RESET * MASTER RESET * * WORD 5 CLEAR CARD INTERRUPTS * * * WORD 6 SPECIAL CHARACTER * * * * ALL USED SPECIAL CHARACTERS (EXCEPT * * RUBOUT) ARE CLEARD * * * *************************************************** * * CDINT NOP * LDA BN19 SET A REG. = 30003 LDB TEM10 GET DEVICE TYPE ADB TEMP4 ADD REQEST TYPE CPB B61 IS IT A CRT READ IOR B20 t YES! TURN ON ECHO JSB OUT2 IT IS OFF FOR CTU AND LP * LDA BN17 IOR BN72 OR MASTER RESET AND XMIT JSB OUT2 SEND WORD 140XXX * LDA BN20 SEND WORD 50077 JSB OUT2 * LDA BN22 JSB OUT2 SEND 20004 * LDA BN25 SET A REG. = 60004 JSB OUT2 CPA BN26 CLEAR ALL USED SPECIAL INTERRUPTS JMP CDINT,I (4 THRU 36) INA JMP *-4 * * BN22 OCT 20004 B61 OCT 61 BN72 OCT 100400 BN25 OCT 60004 BN26 OCT 60036 BN27 OCT 177577 ESC OCT 33 B136 OCT 136 B.4 OCT 177774 * * FOR ALL WRITE REQUESTS AND CTU CONTROL * THE BUFFER FLUSH BIT IS EXAMINED.IF SET ************************************************** * IS CALLED BY ALL WRITE AND CONTROL * * REQUESTS IF THE BUFFER FLUSH BIT IS SET. * ************************************************** * * NXQU NOP IF LAST REQUEST IN QUE THEN STOP FLUSH LDA $OPSY GET SYSTEM TYPE CPA BN55 CHECK FOR -9 RSS CPA D.13 CHECK FOR -13 JMP GTDMS THIS IS A DMS SYSTEM * OLDSY LDA EQT1,I CHECK FOR LAST REQUEST LDA A,I CHECK SZA IF NOT LAST REQUEST DO NOT CLR BIT7. JMP NXQU,I THIS IS NOT THE LAST REQUEST. LDA EQT28,I LAST REQUEST AND BN27 REMOVE B177 STA EQT28,I RESTORE EQT5 JMP NXQU,I AND RETURN * GTDMS RSA CHECK MAP. IF SYSTEM NO CROSS LOAD ALF,SLA BIT12= 0\1 =SYSTEM\USER RSS JMP OLDSY SYSTEM MAP XLA EQT1,I USER MAP CROSS LOAD XLA A,I JMP CHECK * * ********************************************* * SUBROUTINE READS TERMINAL STATUS * * AND SETS EQT16 FOR : * * LINE STRAP\PAGE STRAP 0\1 (BIT15) * * TERM. STATUS READ 0\1 NO\YES (BIT 0) * ********************************************* * TERST NOP LDA EQT16,I GET TERMINAL STATUS TO9 SEE IF IT SLA HAS ALREADY BEEN READ JMP TERST,I IT HAS. RETURN. CLA JSB ECHO TURN ECHO OFF JSB SPCH1 SET SPECIAL INTERRUPTS LDA ESC OUTPUT ESCAPE JSB OUT1 LDA B136 OUTPUT CARROT. THESE TWO CHARACTERS JSB OUT1 PREP. TERM. FOR STATUS JSB EXIT1 EXIT AND WAIT FOR BUFFER EMPTY INTERRUPT * JSB DC1OT GO TRIGGER STATUS TRANSMISSION WITH DC1 JSB EXIT1 AND WAIT FOR CR OR RS INTERRUPT * LDA B20 JSB ECHO TURN ECHO ON LDA B.4 SET TO GET BYTE 1 STA TEMP1 JSB CHRIN GO GET CHAR..IT IS NECESARY TO READ AND B10 ISZ TEMP1 ESC AND \ BEFORE JMP *-3 READING DESIRED STATUS BYTE. RAR,RAR RAR,RAR MOVE TO SIGN POS. (LINE\PAGE =0\1) INA SET LSB FOR COMPLETED IOR EQT16,I STA EQT16,I JSB CLRCD GO CLEAR CARD JMP TERST,I * * ************************************************* * SUBROUTINE OUTPUTS AN ENK TO TERMINAL * * AND WAITS FOR AN ACK. * * BE CAREFUL IN CALLING ENAK BECAUSE YOU MUST * * DO A MASTER RESET TO GET CHAR. COUNT =0 * * OTHERWISE YOU WILL NEVER SEE A BUFFER * * EMPTY INTERRUPT AGAIN!!! * ************************************************* * ENAK NOP CLA INHIBIT ECHO JSB ECHO LDA ENAK STA EQT23,I SAVE RETURN ADDRESS JSB XMIT LDA B5 OUTPUT ENK TO TERMINAL OTA20 OTA CARD LDA D.60 JSB TIMER LDB B5 CLEAR INTERRUPTS AND SET CARD TO RECEIVE JSB CDSET JSB EXIT1 EXIT TO WAIT FOR INTERRUPTS JSB CHRIN GET CHARACTER TO EMPTY CARD * LDA EQT23,I GET RETURN ADDRESS JMP A,I RETURN * TIMER NOP 2.5 USEC TIMER(XE) PER LOOP SSA,INA,RSS ! JMP TIMER,I JMP *-[~2 * IFZ * ************************************************ * SUBROUTINE READS THE CTU STATUS * * * *SET BIT0--UNIT BUSY OR CARTRIDGE NOT INSERTED* * BIT1--END OF VALID DATA * * BIT2--CARTRIDGE NOT WRITE ENABLED * *-------------- * BIT3--LAST COMMAND ABORTED * * BIT4--READ\WRITE ERROR * * BIT5--END OF TAPE * * ----------- * BIT6--LOAD POINT * * BIT7--END OF FILE * * * * THE CTU STATUS COMES IN THREE BYTES * * * BYTE * 1 EOF - LP - EOT - WR. ERR(2645) * 2 CMD.AB.- W.P. - RD.ERR. -BUSY(2645) * 3 RD.ERR. - RD.ERR.(HARD) - EOD -C.I. ************************************************ * CTUST NOP JSB CDINT !!!!!!!!!!!!!!! LDA CTUST STA EQT24,I * JSB CTPRP GO PREP. TERMINAL FOR CTU TRANSFER LDA B136 OUTPUT <^> JSB OUT1 JSB EXIT1 !!!!!!!!!!!!!!!!! JSB SPCH1 SET CR AND RS AS SPECIAL CHAR. JSB DC1OT TRIGGER TRANSFER WITH DC1 JSB EXIT1 EXIT WAITING FOR CR OR RS INTERRUPT * JSB CHRIN GET DATA CTUS3 LDB B.5 INITIALIZE STATUS COUNT STB TEMP1 RSS * * CTUS1 JSB CHRIN GET CHARACTER ISZ TEMP1 ARE THESE STATUS BYTES? JMP CTUS1 NO! GO GET NEXT CHAR. AND B17 ALF STA TEMP1 JSB CHRIN GET STATUS BYTE NO. 2 AND CR ISOLATE BITS 0,2,3 IOR TEMP1 "OR" BYTE 1 WITH BYTE 2 STA TEMP1 STORE IT TEMPORARILY JSB CHRIN GET BYTE 3 AND B4 CHECK FOR READ ERROR RAL,RAL MOVE TO BIT 4 IOR TEMP1 STA B LDA TEMP8 GET BYTE 3 AND B3 ISOLATE FIRST TWO BITS (WEN AND EOV) XOR B1 COMPL. C.I. IOR B OR WITH BYTES 1 AND2 XOR B10 COMPLEMENT BIT 3 AND B377 ISOLATE STATUS BITS STA TEMP1 JSB CDINT LDA TEMP1 * JSB CLRCD GO CLEAR CARD LDB EQT24,I SAVE RETURN ADDRESS JMP B,I * CTPRP NOP THIS SUBROUTINE PREPARES TERMINAL TO ACCEPT LDB CTPRP SAVE RETURN ADDRESS STB EQT25,I STA EQT22,I CTU CONTROL AND R\W REQUESTS LDA EQT16,I CHECK FOR KEYBOARD DISABLE BIT AND B20 (BIT4) SZA IF SET ALREADY DISABLED JMP OVER6 LDA ESC JSB OUT1 LDA B143 (SMALL "C") JSB OUT1 CLA JSB OUT1 CLA JSB OUT1 LDA B20 IOR EQT16,I SET KEYBOARD DISABLE BIT STA EQT16,I JSB EXIT1 JSB CDINT OVER6 LDA ESC JSB OUT1 OUTPUT LDA B46 JSB OUT1 OUTPUT <&> LDA B160 JSB OUT1 OUTPUT LDA TEM10 GET DEVICE JSB OUT1 LDA B165 LDB TEMP4 GET REQUEST TYPE CPB B3 IS IT CONTROL? JSB OUT1 YES, SEND LDA EQT22,I RESTORE A REG LDB EQT25,I GET RETURN ADDRESS JMP B,I * * * * * ************************************************ *SUBROUTIONE TAKES A NO. IN A REG. * * (<1000D) AND CONVERTS TO ASCII WITH MSB * * AT BUFF1 AND LSB AT BUFF3. * *THE CHARACTERS ARE SENT MSB FIRST * ************************************************ * BINAS NOP LDB BINAS SAVE RETURN ADDRESS STB EQT22,I SSA IS NUMBER OK? (POSITIVE) JMP BINAS,I NO! LDB BN50 LOAD B WITH DEC -1000 ADB A ADD NUMBER TO -1000 SSB,RSS IS SIGN ZERO? JMP BINAS,I YES! EXIT FOR NUMBER >999 LDB ADDRT GET BUFFER ENDING ADDRESS ADB B2 ADD 2 STB TEeB@ BINA2 LDB ADDRT GET MSD IN B REG. STB EQT19,I STORE IT FOR LATER USE LDA B.3 SETUP COUNTER STA EQT20,I I25W8 LDA B,I GET ASCII CHAR. IN A REG. JSB OUT1 GO SEND IT! ISZ EQT19,I INCREMENT ADDRESS POINTER LDB EQT19,I RESTORE IN B REG. FOR ISZ EQT20,I ISZ COUNT COUNTER JMP I25W8 THERE ARE MORE,GO GET 'EM LDA EQT22,I GET RETURN ADDRESS JMP A,I * XIF * ݬB*^^^^^^ FIRST LINE OF TAPE 4 ^^^^** ADDRT DEF BUFF1 BUFF1 BSS 3 B.5 OCT 177773 B46 OCT 46 B165 OCT 165 B143 OCT 143 * * BN11 OCT 43612 BN12 OCT 41512 * TEMP4 NOP REQUEST TYPE (1-3) TEMP5 NOP INIT\COMP. = 0\1 TEM8 NOP TEMP STATUS TEM10 NOP ASCII TYPE (6X) TEM11 NOP DEVICE TYPE IN BINARY * XMIT NOP SET CARD UP FOR XMIT LDA BN17 IOR B400 SET XMIT JSB OUT2 JMP XMIT,I * OUT1 NOP STA B JSB XMIT SET FOR TRANSMIT LDA B OTA02 OTA CARD SEND CHAR. JMP OUT1,I * OUT2 NOP GENERAL PURPOSE CARD PROGRAMMING OTA10 OTA CARD ROUTINE JMP OUT2,I * SPCH1 NOP THIS SUBROUTINE SETS SPECIAL CHAR. INTERRUPTS LDB BN12 JSB CDSET SET INTERRUPT LDB BN11 JSB CDSET SET INTERRUPTS JMP SPCH1,I RETURN * * USINT NOP SUBROUTINE TO TEST FOR USER KEYBOARD INTERRUPT LDA USINT SAVE RETURN ADDRESS STA EQT27,I JSB ENAK GO SHAKE HANDS WITH TERMINAL LDA TEMP8 GET CHAR. CPA B6 IS IT A "ACK" ? RSS JSB SCHED USER INTERRUPT JSB CLRCD GET ALL CHAR. OFF CARD LDA EQT27,I JMP A,I * *********************************************** * SUBROUTINE GETS DATA OF CARD UNTIL * * BUFFER EMPTY. * * *********************************************** * CLRCD NOP STA TEMP1 SAVE A REG. LDB B4 SET CARD TO RECEIVE AND CLR. INT. JSB CDSET CLRC1 JSB CHRIN GET CHARACTER LDA TEMP9 GET STATUS WORD ALF,ALF ISOLATE BUFFER EMPTY SSA IS IT EMPTY? JMP CLRC2 YES WE'RE FINISHED LDA TEM14 IS THIS A VALID CHARACTER? SSA JMP CLRC1 YES IT IS CLRC2 LDA TEMP1 RESTORE A REG. JMP CLRCD,I RETURN * B.1 OCT 177777 BNX50 DEC -1000 * *********************************************** * ENABLES IO CARD INTERRUPT IF TERM. * * HAS BEEN ENABLED OR IF TERMINAL IS A * * SYSTEM CONSOLE. * *********************************************** * SETEM NOP SUBROUTINE TO SETUP IO CARD FOR RECEIVE CLC03 CLC CARD INHIBIT INTERRUPT LDA EQT28,I MODE PRIOR TO EXIT. GET TERM.STATUS RAR,SLA IS TERMINAL ENABLED? (BIT 1=1) JSB RECIV YES! IT IS LDA SYSTY GET CONSOLE EQT. CPA EQT1 IS THIS THE SYSTEM CONSOLE? JSB RECIV YES! IT IS JMP SETEM,I * *********************************************** * * * EXIT IS A=2 (ILLEGAL CONTROL REQUEST). * *********************************************** * * REJ2 JSB NXQU CHECK QUE JSB SETEM SETUP CARD FOR EXIT LDA B2 RSS REJ1 CLA,INA RSS REJ4 LDA B4 IMMEDIATE COMPLETION CLB JMP I.05,I * **************************************************** * IS USED FOR INITIATOR OPERATION WITH * * INITIATED EXITS (A=0), AND COMPLETION * * CONTINUATION EXITS (P+2). "TEMP5" INDICATES * * WHICH EXIT TO TAKE. * **************************************************** * EXIT1 NOP LDB EXIT1 GET CALLING PROGRAMS ADDRESS+1 STB EQT11,I STORE AT EQT11,I FOR INTERRUPT EXIT5 LDA BN20 CLEAR CARD INTERRUPTS JSB OUT2 STC04 STC CARD RE-INITIALIZE CARD FOR INTERRUPT LDB TEM10 CHECK FOR CRT CPB B60 JMP ON3 IT IS A CRT LDA BN68 NOT A CRT SET 60 SEC T.O. JMP ON2 ON3 LDA TIM1 IF READ USE PRESET T.O. LDB TEMP4 CHECK REQUEST TYPE CPB B2 IF A WRITE SET 4 SEC. T.0. ON2 STA EQT15,I EXIT4 CLA EXIT6 LDB TEMP5 GET INITIATION COMPLETION FLAG SZB,RSS JMP I.05,I INITIATION RETURN ISZ C.05 RETURN JMP C.05,I COMPLETION RETURN * EOOP9 LDB B3 SET B=3 FOR XMISSION ERROR STB EQT19,I A REG. EXIT JMP EOOP4 * ********************************************************* * DOES ASCII CTU AND DISPLAY WRITE EOR PROCESSING* ********************************************************* * * EORP NOP LDA CR OUTPUT A JSB OUT1 LDA LF OUTPUT A JSB OUT1 JMP EORP,I * IFZ * ******************************************** * ENABLES KEYBOARD IF IT HAS BEEN * * LOCKED BY A CTU REQUEST * ******************************************** * KEYBD NOP LDA EQT16,I AND B20 IS IT LOCKED (BIT 4) SET SZA,RSS JMP KEYBD,I NO! LDA ESC UNLOCK KEYBOARD JSB OUT1 LDA B142 JSB OUT1 SEND SMALL B JSB EXIT1 WAIT FOR INTERRUPT JSB CDINT LDA EQT16,I AND BN3 REMOVE KEYBD LOCK BIT STA EQT16,I JMP KEYBD,I * EOOP7 NOP IF CN50C FLAG IS SET(BIT3,EQT16) JMP EOOPC THEN EOOP7 IS LDA EQT8,I IT IS SET JMP A,I * XIF EOOP8 LDB TEMP1 THIS EXIT IS USED IF UNDERSCORE CPB BN2 IS ONLY CHAR. RSS * ********************************************************* * AND ARE ENTRIES FOR COMPLETION (P+1) * * EXITS. THE TERMINAL OR CTU STATUS IS TEMPORARLY PUT * * IN TEMP5. * ********************************************************* * EOOP1 JSB EXIT1 EOOP2 CLA STA EQT19,I SET A REG. EXIT LDA EQT28,I GET TERMINAL STATUS STA TEM8 JMP EOOP3 * EOOPC LDB TEMP4 IF CONTROL ALWAYS GET STATUS IFZ CPB B3 RSS SZA IF GOOD WRITE DO NOT GET STATUS EOOP5 JSB CTUST YES!,GO UPDATE CTU STATUS ** EOOP6 STA TEM83 ** * EOOPB LDA BN55 REMOVE EOF FLAG IN EQT16 LDB TEM11 BECAUSE TAPE HAS MOVED RBL XOR B LDB EQT16,I AND B STA EQT16,I LDA TEM8 * ****************************************************** * A READ TO END OF TAPE WILL GIVE BELOW STATUS * * STATUS * * 0 GOOD READ * * 40 END OF TAPE. GOOD RECORD READ * * 240 EOT+EOF. NO RECORD READ, * * SET FOR NR(A=1) EXIT * * 42 EOT+EOV * * 52 EOT+EOV+ABORT * * 52 EOT+EOV+ABORT * * * ****************************************************** * * ****************************************************** * A WRITE TO END OF TAPE WILL GIVE BELOW STATUS * * STATUS * * 42 EOT+EOV GOOD RECORD WRITTEN * * 52 EOT+EOV+ABORT (NO RECORD WRITTEN)* * SET ET(A=1) EXIT * * * ****************************************************** * ****************************************************** * READ TO EOV IN MIDDLE OF TAPE * * STATUS * * 200 EOF * * 2 EOV * * 12 EOV+ABORT * * SET NR(A=1) EXIT * * * * ****************************************************** * EOOPA AND B373 REMOVE WRITE PROTECT CPA B240 IF EOF+EOT THEN SET NR JMP OVER4 CPA B52 IF FAILURE ON WRITE JMP OVER4 DUE TO EOT DO THIS_(SAVE REQ.) AND B10 CHECK FOR CMD ABORT CPA B10 JMP OVER4 SET N.R. CLB STB EQT19,I SET A=0 FOR GOOD EXIT JMP EOOP3 OVER4 CLB,INB SET NR STB EQT19,I SET A REG. EXIT *********************************************************** XIF * IS ENTRY FOR B=0 (TRANS. LOG =0) EXIT. * *********************************************************** * EOOP4 CLA STA EQT8,I SET UP FOR B REG. =0 EXIT * ********************************************************** * SETS 2640\2644 AND IO CARD FOR NEXT INTERRUPT * * OR REQUEST, AND SETS EITHER CTU OR CRT STATUS IN EQT5 * * * IT ALSO SETS THE TRANSMISSION LOG IN B REG. (+CHAR. OR * * + WORDS). IF EQT8 =0 (VIA EOOP4) THEN B=0. * ********************************************************** * EOOP3 JSB STPUT SET STATUS IN EQT5,I JSB CDINT !!!!!!!!!! IFZ JSB KEYBD ENABLE KEYBD IF LOCKED XIF JSB USINT WITH KEYBOARD ENABLED JSB USINT JSB CLRNT CLR RUBOUT INTERRUPT JSB CLRCD GET ALL DATA OFF CARD JSB SETEM ** DVA LDB EQT9,I GET 2X LAST CHAR. ADDRESS CMB,INB MAKE NEG. ADB EQT7,I SUBTRACT TWO TIMES STARTING ADD. ADB EQT7,I CMB,INB LDA EQT8,I IF WORDS THEN DIV. BY 2 SSA JMP *+4 THESE ARE CHARACTERS SLB IS LSB SET? INB YES! INCREMENT SO EVEN FOR DIVIDE BRS DIVIDE TO CONVERT TO WORDS * SZA,RSS IF EQT8 IS 0 THEN CLEAR B REG. CLB LDA EQT19,I SET A REG. EXIT JMP C.05,I ** * * **************************************************** * INSERTS CORRECT DEVICE STATUS INTO EQT5 * **************************************************** STPUT NOP LDA EQT5,I GET CURRENT STATUS AND BN31 RE MOVE OLD STATUS IOR TEM8 OR NEW STATU^S STA EQT5,I RESTORE IT JMP STPUT,I * * * TIM1 OCT 177200 BN3 OCT 177757 BN37 OCT 102100 B373 OCT 373 B142 OCT 142 B240 OCT 240 B64 OCT 64 B3 OCT 3 BN31 OCT 177400 B1100 OCT 1100 B4000 OCT 4000 B2000 OCT 2000 B52 OCT 52 D.13 DEC -13 B600 OCT 600 B500 OCT 500 ********************************************************** * CONFIGURES IO INSTRUCTIONS TO SELECT CODE SET * * IN A REG. * ********************************************************** * SETIO NOP IOR BN37 CONSTRUCT STF STA STF01 STF IS 1021XX * IOR B400 CONSTRUCT LIA AND SAVE STA LIA01 STA LIA02 STA LIA03 * XOR B600 CONSTRUCT SFS STA SFS01 SFS IS 1023XX * * * XOR B500 CONSTRUCT OTA AND SAVE STA OTA10 STA OTA02 STA OTA18 STA OTA20 IOR B1100 STA STC02 STA STC03 STA STC04 STA STC05 * IOR B4000 CONSTRUCT CLC,C AND SAVE STA CLC01 CLC,C IS 1077XX STA CLC02 STA CLC03 * * * * * * * * LDA EQT4,I GET SUBCHANNEL AND STORE IN TEM11 LSR 6 SC=0 IS CRT (TEM10=60) AND B37 SC=1 IS L CTU )(TEM10=61) STA TEM11 SC =2 IS R CTU (TEM10 =62) *** SC =3 IS GRAPHICS (TEM10=60) CPA B3 IF GRAPHICS CRT CLR TEM11 CLA SO TEM10 =B60 ADA B60 STA TEM10 LDA EQT6,I GET CONTROL WORD IFZ LDB TEM10 GET DEVICE CPB B64 IS IT LP? CLA YES! SET FOR ASCII XIF RAR BIT6 1\0 IS BIN\ASCII AND B40 ISOLATE BIT 5 XOR B40 REMOVE BIT 5 IF BINARY STA FILL SET FILL CHARACTER LDA EQT6,I GET WORD AGAIN TO SET HONEST WORD AND B2000 HONEST IS BIT 10 =1 STA TEMP2 * ** o}DVA * IFZ ** LDA TEM10 CLB CPA B60 SET SWITCH CRT/CTU = RSS/NOP LDB RSS STB SWH1A STB SWH1B STB SWH1C STB SWH1D * XIF * **************************************************** * SETUP EXTENSIONS ON EQT * * * * EQT NO. USE * * 1-8 STANDARD * * 9 RUNNING CHAR. ADDRESS * * 10 LAST CHAR. ADDRESS * * 11 ADDRESS TO GO ON INTERRUPT * * 12 NO. OF EQT EXTENSIONS * * AND CURRENT CONWD * 13 EQT EXTENSION STARTING ADD. * * 14-15 STD * * 16 TERMINAL STRAPPING AND CTU INFO* * BIT 14 IS 0\1 =CHAR.\BLOCK * * BIT 15 IS 0\1 =LINE\PAGE * ** DVA * BIT 5-8 IS BAUD RATE * BIT 9 IS PARITY EVEN\ODD 1\0 * * BIT 10 IS PARITY ON\OFF 1\0 * * BIT 11 IS "CD" (DTR) SET * BIT 12 IS "CA" (RTS) SET * BIT 13 IS LINE 0\1 HARD\MODEM * BIT 4 IS KEYBOARD LOCKED * * BIT 3 IS CNC50 FLAG * BIT 2 IS RCTU EOF FLAG * BIT 1 IS LCTU EOF FLAG * BIT 0 IS TERMINAL STRAPPING * * ALREADY READ. * * 17 ID ADDRESS OF TERM. PROG. * * 18 NOT USED G * * 19 RETURN ADDRESS * * AND A REG. EXIT * 20 BINARY RECORD LENTGH * * AND PARITY ERR XLOG * * AND $UPIO ENTRY * 21 NOT USED * * 22 H RETURN ADDRES* * 23 RETURN ADDRESS * * 24 RETURN ADDRESS * * LINE CONTROL REF.(MODEM) * * 25 RETURN ADDRESS * * AND LINE CONTROL FLAG * * 26 NOT USED * * 27 RETURN ADDRESS * * 28 TERMINAL STATUS * * BIT 1 TERMINAL ENABLED * BIT 3 PARITY ERROR * BIT 5 CNTRL D ENTERED * BIT 7 BUFFER FLUSH IN PROGRESS * **************************************************** * * SETIP LDA EQT13,I GET STARTING ADDRESS OF EXT. LDB D.13 STB TEMP1 STORE NO. OF EXT. AT TEMP1 LDB ADR16 GET ADD. OF EQT16 STA B,I STORE S.A. OF EXT. IN IT INA INB ISZ TEMP1 JMP *-4 * * * ** DVA * IFZ SEP1 CLB * * * LDA EQT16,I STORE A AT EOOP7 IF CN50C AND B10 FLAG IS SET SZA LDB RSS STB EOOP7 * XIF LDA EQT6,I GET CONTROL WORD AND B3 STA TEMP4 STORE REQUEST TYPE AT TEMP4 CPA B3 IS THIS CONTROL? JMP OVER7 YES RAR SSA IS THIS A WRITE? JMP OVER2 NO! *** *** LDB EQT28,I IF WRITE AND BUFFER FLUSH SET BLF,BLF THEN EXIT VIA REJ2 SSB JMP OVER8 JMP OVER2 OVER7 LDA EQT6,I LSR 6 IF CONTROL TYPE 0 AND B37 THEN SPECIAL PROCESSING REQUIRED SZA,RSS AT JMP OVER3 * * OVER2 LDA EQT6,I NORMAL NON CNTL 0 REQ. STA EQT12,I STORE CURRENT CONWD FOR SYS. INTERRUPT JMP SETIO,I * * BUFFER FLUSH EXITS * OVER8 LDA TEMP5 GET I.05/C.05 FLAG SZA JMP OVER2 C.05 EXIT JMP REJ2 * * 640 SPECIAL "CONTROL 0" PROCESSING * OVER3 LDA EQT6,I IS THIS A SYSTEM REQ.? SSA,RSS JMP SETIO,I * LDA EQT12,I GET OLD CONWD STA EQT6,I PUT IN CURRENT CONWD AND B2 IF WRITE MUST COMPLETE XFER CPA B2 OR TERMINAL WILL HANG JMP OVER9 LDA EQT9,I NO MORE DATA IN USERS BUFFER! STA EQT10,I IT IS GONE!!! OVER9 LDA TEM11 IF NON CRT REQ. WE MUST COMPLETE SZA JMP EXIT4 CONTINUE NOT CRT REQ. * JSB CLRCD GET ALL OFF CARD IFZ JSB KEYBD ENABLE KEYBOARD IF LOCKED XIF LDA EQT6,I RAR SLA,RSS IF WRITE OR CONT. THEN SEND NULL JMP REJ2 THIS IS A CRT READ CLA SEND NULL TO ALLOW CHAR. OUT OF UART JSB OUT2 JMP EOOP1 ADR16 DEF EQT16 EQT16 NOP 1 EQT17 NOP 1 EQT18 NOP 1 EQT19 NOP 1 EQT20 NOP 1 EQT21 NOP 1 EQT22 NOP 1 EQT23 NOP 1 EQT24 NOP 1 EQT25 NOP 1 EQT26 NOP 1 EQT27 NOP 1 EQT28 NOP 1 * * * * EQU'S FOR VARIOUS ENTRIES A EQU 0 DEFINE A REG. B EQU 1 DEFINE B REG. CARD EQU 15 DEFINE CARD FOR IO INSTRUCTIONS * * SYSTEM BSAE PAGE COMMUNICATION AREA * . EQU 1650B ESTABLISH ORIGIN OF EQTA EQU 1650B * BASE PAGE EQT1 EQU .+8 EQT2 EQU .+9 ADDRESSES EQT3 EQU .+10 EQT4 EQU .+11 OF CURRENT EQT5 EQU .+12 EQT6 EQU .+13 EQT ENTRY EQT7 EQU .+14 EQT8 EQU .+15 EQT9 EQU .+16 EQT10 EQU .+17 EQT11 EQU .+18 EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * INTBA EQU .+4 SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM CONSOLE * OPATN EQU .+52 OPERATOR KEYBOARD ATTN. FLAG ORG * DRIVER LENGTH END 6  0Q 92001-18029 1710 S 0222 RTE-II COMMAND PROGRAM              H0102 ASMB,L,C HED RTE-II SYSTEM COMMAND MODULE * * NAME: $$CMD * SOURCE: 92001-18029 * RELOC: 92001-16029 * PGMR: D.L.S. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM $$CMD,2,1 92001-16029 REV.1710 770216 ENT $$CMD EXT EXEC,$LIBR,$LIBX,RMPAR,$CVEQ,$CVT1 EXT $CVT3,$UNLK,$XXUP,$DLAY,$DMEQ,$SCD3,$ETEQ EXT $CKLO,$BITB SUP * ***************************************************************** * * RTE SYSTEM PROGRAM $$CMD: * * $$CMD PROVIDES EXECUTION OF THE FOLLOWING SYSTEM COMMANDS: * * LU,P1[,P2[,P3]] LU STATUS AND LU CHANGE. * EQ,P1[,P2] EQT STATUS AND BUFFERING CHANGE. * TO,P1[,P2] SHOW TIMEOUT OR CHANGE TIMEOUT. * * THIS PROGRAM IS SCHEDULED FROM THE SYSTEM MESSAGE PROCESSOR OR * FROM THE SYSTEM LIBRARY ROUTINE *MESSS*. * * BEFORE SCHEDULING, THE SCHEDULER MUST PLACE IN THE PROGRAM'S * FIVE WORD TEMPORARY SECTION OF $$CMD'S ID SEGMENT THE FOLLOWING * FIVE PARAMETERS. * * :=2 CHARACTER ASCII COMMAND. * :=P1 * :=P2 * :=P3 * :=FLAG AS TO WHAT TO DO WITH MESSAGES. * 0 = PRINT MESSAGES ON LU 1(CAME FROM SYSTEM) * NONZERO = RETURN MESS.TO USER(CAME FROM *MESSS*) * ******************************************************************* * SKP CMD NOP P1 NOP P2 NOP P3 NOP CONLU NOP * $$CMD NOP JSB RMPAR GET THE PROGRAM'S DEF *+2 PARAMETERS. DEF CMD * JSB $LIBR NOP * CLA SET PRIORITY OF $$CMD STA XPRIO,I TO ZERO(HIGHEST). LDA OPCDA STA TEMP1 SET UP COMMAND POINTER. LDA OPCDJ STA TEMP2 SSET UP COMMAND SUBROUTINE POINTER. LDB CMD STB STOP SET UP ILLEGAL COMMAND STOP. * M0030 CPB TEMP1,I GO SCAN JMP M0040 FOR THE ISZ TEMP1 COMMAND ISZ TEMP2 PROCESSOR JMP M0030 SUBROUTINE. * OPCDA DEF *+1 ASC 3,LUEQTO STOP NOP OPCDJ DEF *+1,I DEF LUPR DEF EQ.ST DEF CH.TO DEF OPER SKP * * M0040 JSB TEMP2,I GO PROCESS COMMAND. * JSB $LIBX GO UNPRIVILEGED. DEF *+1 DEF *+1 * SZA,RSS IF NO MESSAGE, JMP LL9 THEN END PROGRAM. * STA IBUFL IF MESSAGE, STA BUFL THEN INA SAVE STA IBUFA MESSAGE STA BUFA POINTERS. * LDB CONLU CHECK IF TERMINAL SZB IS THE SYSTEM JMP LL8 CONSOLE. * JSB EXEC IF TERMINAL IS SYSTEM CONSOLE, DEF *+5 THEN SEND MESSAGES TO LU 1. DEF .2 DEF .1 IBUFA NOP IBUFL NOP JMP LL9 * LL8 JSB EXEC IF TERMINAL IS NOT SYSTEM CONSOLE, DEF *+5 THEN RETURN MESSAGE TO USER. DEF .14 DEF .2 BUFA NOP BUFL NOP * LL9 JSB EXEC RETURN TO CALLER DEF *+4 OR TO SYSTEM. DEF .6 DEF ZERO DEF .1 JMP $$CMD * ZERO NOP SKP * EQ.ST NOP LDA P1 JSB IODNS CHECK P2 AND SET EQT ADDRESSES. JMP EQER LDB P2 CHECK PARAMETER #2. LDA EQT4,I GET EQT CHANNEL WORD. CLE,SSB,RSS IF P2=-1, OUTPUT EQT STATUS JMP EQST1 OTHERWIZE, SET BUFFERING BIT IN EQT. * JSB $CVT1 OUTPUT THE EQT STATUS. STA EQMS1 CONVERT THE CHANNEL NUMBER. * LDA EQT4,I CONVERT ASR 6 UNIT #. AND B37 JSB $CVT1 STA EQMS5 LDA EQT4,I SET LDB EQBLK D (FOR DMA CHANNEL) RAL,SLA OR LDB EQBD 0 STB EQMS3 LDB EQBLK SET SSA B (FOR AUTOMATIC BUFFERING) LDB EQBB OR STB EQMS4 0 LDA EQT5,I SET RAL,RAL AVAILABILITY AND .3 STATUS ADA EQBLK (0,1,2,OR3) STA EQMS6 LDA EQT5,I CONVERT ALF,CLE,ALF EQUIPMENT ADA B3000 TYPE (SET HIGH BITS TO JSB $CVT1 FOOL LEADING BLANK GENERATOR) STA EQMS2 DVRNN. LDA EQMSA (A) = ADDRESS OF REPLY JMP EQ.ST,I RETURN. * EQST1 ERB ROTATE BIT 1 TO E RAL,RAL AND PUT IN ERA,RAR 14 OF EQT4 STA EQT4,I AND RESTORE CLA =0 NO RETURN MESSAGE JMP EQ.ST,I * EQER LDA $ERIN 'INPUT ERROR' JMP EQ.ST,I RETURN. * EQMSA DEF *+1 DEC -20 ASC 1, EQMS1 NOP I/O CHANNEL # EQBD ASC 2, DVR EQMS2 NOP EQUIP TYPE CODE EQMS3 NOP D OR 0 EQMS4 NOP B OR 0 ASC 1, U EQMS5 NOP UNIT # EQMS6 NOP AVAILABILITY * EQBLK ASC 1, 0 EQBB ASC 1, B * .2 DEC 2 .3 DEC 3 .6 DEC 6 .14 DEC 14 B37 OCT 37 * TEMP1 NOP TEMP2 NOP SKP * **************************************************************** * * 'LOGICAL UNIT' STATEMENT * * FORMAT: LU,P1(,P2(,P3)) WHERE: * * P1 = LOGICAL UNIT # * P2 = 0, EQT ENTRY #, OR NOT PRESENT * P3 = SUBCHANNEL # OR NOT PRESENT IN WHICH * CASE IT DEFAULTS TO ZERO * * ACTION: 1) P2 AND P3 NOT INPUT; THE ASSIGNMENT OF * LOGICAL UNIT P1 IS PRINTED AS: * ' LU #P1 = EXX SYY D ' * WHERE: * P1=LOGICAL UNIT NUMBER * XX=EQT NUMBER * 0 YY=SUBCHANNEL NUMBER * D=IF PRESENT, THE LU IS DOWN. * 2) P2 = 0; THE ASSIGNMENT IS RELEASED, * I.E, THE CORRESPONDING * WORD IN THE DEVICE * REFERENCE TABLE (DRT) * IS SET = 0. * 3) N2 # 0 THE LU'S ASSIGNMENT IS CHANGED TO POINT * TO THE NEW EQT AND SUBCHANNEL. ANY I/O * ASSOCIATED WITH THE OLD EQT AND SUBCHANNEL * (DEVICE)IS TRANSFERRED TO THE NEW DEVICE. * * THE FOLLOWING LOCATIONS ARE USED AS TEMPORARIES BY LUPR: * := LU NUMBER := P3,P2 NEW SUBCH-EQT WORD * :=DRT WORD 1 ADDRESS :=DRT WORD 2 ADDRESS * :=EQT1 ADDRESS OF OLD :=NEW DEVICE'S EQT NUMBER * DEVICE * :="NEW DEVICE'S EQT IS :=NEW DEVICE SPLIT SUB. * DOWN" FLAG. * :=NEW DEVICE'S MAJOR LU * :#0 INITIATE REQUEST :#0 MORE THAN ONE LU FOR * ON NEW DEVICE UP OLD DEVICE * :=SEE SUB. SDRT2 * :=OLD SUBCH-EQT WORD :=OLD DEVICE MAJOR-LU * :=OLD DEVICE MAJOR-LU :=OLD DEVICE MAJOR-LU * DRT WORD 1 ADDRESS DRT WORD 2 ADDRESS * :=NEW DEVICE MAJOR-LU :=NEW DEVICE MAJOR-LU * DRT WORD 1 ADDRESS DRT WORD 2 ADDRESS * **************************************************************** * SKP LUPR NOP LDA P1 SET A=LU. LDB P2 IF P2 = -1, THEN GO CPB M1 PRINT CURRENT ASSIGNMENT. JMP LUPR0 * LDA B AND B377 SAVE LOWER 8 BITS STA P2 OF P2 AS EQT LDA P3 ADD IN LOWER AND B37 5 BITS OF P3 LSL 11 AC SUBCHANNEL ADA P2 AND SAVE AS NEW _ STA P2 SUBCHANNEL-EQT WORD. * LDA P1 CPA .2 PREVENT JMP LUER REASSIGNMENT CPA .3 OF LU 2 JMP LUER OR LU 3. * LUPR0 CMA,CLE,INA,SZA,RSS ILLEGAL LU NUMBER JMP LUER IF THE LU IS LESS ADA LUMAX THEN 1 OR GREATER CCA,SEZ,RSS THEN LUMAX. JMP LUER * ADA P1 SAVE ADA DRT DRT WORD STA DRT1A 1 AND ADA LUMAX WORD 2 STA DRT2A ADDRESSES. * CCE,INB,SZB,RSS IF P2=-1, THEN GO(SET E=1 FOR LUPR3) JMP LUPR3 PRINT CURRENT ASSIGNMENT. * LDB DRT PREVENT CLE,INB ASSIGNMENT(CLEAR E) DLD B,I OF ANY OTHER CPB P2 DEVICE SZB,RSS TO CPA P2 LU 2 JMP LUER OR 3. SKP * LDA P2 CONSTRUCT I/O AND B174K SUBCHANNEL WORD ELA,RAL FOR NEW DEVICE(E WAS ALF,RAL CLEARED)WITH LOWER CLB,SEZ BITS IN BITS 2-5 ADA B20K AND UPPER BIT IN STA WORD2 BIT 13(CLEAR B REG). * STB NINTF CLEAR "NEW DEVICE I/O INITIATE" FLAG. STB TTEMP CLEAR "NEW DEVICE EQT IS DOWN" FLAG. * LDA DRT1A,I SAVE AND C3700 OLD SUBCH-EQT STA OSBEQ WORD AND AND B77 EQT1 SZA,RSS JMP LUP25 ADA M1 OF MPY .15 OLD(CLEAR B REG.) ADA EQTA DEVICE'S LUP05 STA OEQT1 EQT. * LDA P2 CHECK LEGALITY OF AND B77 N2(NEW EQT)AND STA NEQT# SZA,RSS SET THE EQT JMP LUPR2 JSB IODNS ADDRESSES. JMP LUER * * SPECIAL TEST TO SEE IF MOVING I-O TO A DISK.IF SO, ERROR. * LDA EQT1 IS NEW ADA .4 DEVICE A LDA A,I AND B36K DISK? CPA B14K JMP LU100 YES, SO nGO DO CHECK. * **************************************************************** * DETERMINE IF THE OLD DEVICE IS UP OR DOWN. **************************************************************** * LUPR1 LDA DRT2A,I CHECK IF OLD SSA DEVICE IS JMP DNXX UP OR DOWN. SKP **************************************************************** * OLD DEVICE IS UP. IS THERE MORE THAN ONE LU FOR IT? **************************************************************** UPXX LDA LUMAX SET UP TO SCAN THE LUS CMA,INA STA XLUS IF COUNT GOES TO ZERO THERE IS BUT ONE. LDB DRT GET ADDRESS OF THE FIRST ONE LUCO LDA B,I GET AN ENTRY AND C3700 DROP POSSIBLE LOCK BITS CPA OSBEQ IF NOT THE SAME CPB DRT1A OR IF SAME ENTRY INB,RSS SKIP TO GO ROUND AGAIN JMP MLUS ELSE THERE ARE MORE THAN ONE * ISZ XLUS COUNT DOWN THE ENTRIES JMP LUCO AROUND WE GO *************************************************************** * IF THE DEVICE IS UP AND HAS MORE THAN ONE LU THEN ITS * QUEUE IS NOT MOVED. THIS PREVENTS UNWANTED LOSS OF DATA * CAUSED BY UNRELATED LU CHANGES. *************************************************************** * * DETERMINE IF THE NEW DEVICE IS UP OR DOWN. **************************************************************** MLUS LDA NEQT# CHECK IF NEW SZA,RSS DEVICE IS THE JMP UPBIT BIT BUCKET. * JSB CKNLU CHECK IF NEW DEVICE IS UP OR DOWN. JMP UPDN NEW DEVICE IS DOWN. ISZ TTEMP NEW DEVICE'S EQT IS DOWN. SKP **************************************************************** * THE OLD AND NEW DEVICE ARE UP OR THE OLD DEVICE IS UP * AND THE NEW DEVICE'S EQT IS DOWN. ******************************************************************* UPUP LDA P1 NEW DEVICE IS UP. CPA .1 CHECK IF OLD JMP UPLU1 DEVICE IS LU 1. ** UPUP5 LDA XLUS IF ANOTHER LU EXISTS SZA THEN JMP UPMU DON'T MOVE THE QUEUE * LDB OEQT1,I UNLINK I/O REQUESTS FROM THE RBL,CLE,ERB OLD DEVICE. SKIP THE SZB,RSS LDB OEQT1 LDA DRT2A FIRST I-O REQUEST. JSB $UNLK DEF OSBEQ * LDB DRT2A,I RESET WORD 2 OF THE I/O REQUESTS JSB FXWD2 TO THE SUBCHANNEL OF THE NEW DEVICE. LDA OEQT1 LDB DRT2A,I LINK THE I/O REQUESTS JSB $XXUP ON THE NEW DEVICE. STB DRT2A,I CLEAR UP THE CURRENT LU STA NINTF SET THE MUST START NEW I/O FLAG UPMU LDA TTEMP IS THE NEW DEVICE'S SZA,RSS EQT DOWN? JMP LUP50 NO, SO CONTINUE. * LDB EQT1,I YES, SO RBL,CLE,ERB UNSTACK SZB,RSS NORMAL USER LDB EQT1 I/O(SKIP FIRST JMP DNDE5 ENTRY)AND CONTINUE. * XLUS NOP SKP UPLU1 LDA EQT5,I GET DEVICE AND B374C TYPE OF THE SZA,RSS NEW DEVICE AND SEE JMP UPLU2 IF IT IS LEGAL CPA B2400 (00 OR 05 SUB 0) RSS FOR A SYSTEM JMP LUER CONSOLE. LDA WORD2 SZA JMP LUER * UPLU2 LDA TTEMP MAKE SURE NEW DEVICE'S SZA EQT IS NOT DOWN. JMP LUER LDA EQT1 SET NEW SYSTEM CONSOLE STA SYSTY ADDRESS IN BASE PAGE. JMP UPUP5 GO TRANSFER I/O. * * UPBIT LDA P1 CHANGING AN UP DEVICE TO CPA .1 THE BIT BUCKET. ERROR JMP LUER IF THE OLD DEVICE IS JMP UPUP5 THE SYSTEM CONSOLE. SKP ****************************************************************** * THE OLD DEVICE IS UP AND THE NEW DEVICE IS DOWN. ********************************************************************* UPDN STB TTEMP SAVE LU# OF FIRST LU(MAJOR LU)OF NEW DEVICE. STA NDML2 SAVE DRT WORD 2 ADDRESS OF NEW-MAJOR-LU. =Q ADB M1 COMPUTE NEW- ADB DRT MAJOR-LU STB NDML1 DRT WORD 1. * LDB P1 CHECK IF THIS CPB .1 WILL SET LU JMP LUER 1 DOWN. * LDB TTEMP CHECK IF LU IS CMB,INB LOWER THEN THE ADB P1 MAJOR LU FOR SSB,RSS THE NEW DOWNED JMP UPDN5 DEVICE. * LDB A,I LU IS BELOW NEW DEVICE'S MAJOR LU. STB DRT2A,I MOVE I/O FROM MAJOR LU TO LU. LDB XLUS IF CURRENT DEVICE STILL HAS AN LU SZB THEN JMP DNDN6 SKIP THE MOVE * LDB DRT2A CHASE DOWN THIS DOWN I/O JSB CHASE QUEUE TO ITS END. LDA B * LDB OEQT1,I UNLINK I/O REQUESTS FOR THE RBL,CLE,ERB OLD DEVICE AND ADD TO SZB,RSS LDB OEQT1 JSB $UNLK THE I-O QUEUE. SKIP FIRST ENTRY. DEF OSBEQ JMP DNDN6 GO MODIFY LU'S FOR THE NEW DEVICE. SKP UPDN5 LDB XLUS IF WE STILL HAVE A LU FOR THIS DEVICE SZB THEN JMP UPDN6 SKIP THE MOVE * LDB NDML2 NEW DEVICE'S MAJOR LU IS BELOW LU. JSB CHASE CHASE DOWN THIS I-O QUEUE LDA B TO ITS END. * LDB OEQT1,I UNLINK I/O REQUESTS RBL,CLE,ERB FOR THE OLD DEVICE SZB,RSS (SKIP FIRST REQUEST)AND LDB OEQT1 ADD TO DOWNED LU I/O JSB $UNLK QUEUE. DEF OSBEQ * UPDN6 LDA TTEMP SET ADA MSIGN THE LU STA DRT2A,I DOWN. JMP LUP50 GO FINISH. SKP **************************************************************** * THE OLD DEVICE IS DOWN. ******************************************************************* * DETERMINE IF THE NEW DEVICE IS UP OR DOWN. * DNXX LDA NEQT# CHECK IF SZA,RSS NEW DEVICE JMP DNUP IS BIT BUCKET. * JSB CKNLU CHECK IF NEW DEVICE IS UP OR DOWN. JMP DNDN NEW DEVIC640E IS DOWN. JMP DNDNE NEW DEVICE'S EQT IS DOWN. **************************************************************** * THE OLD DEVICE IS DOWN AND THE NEW DEVICE IS UP(OR BIT BUCKET) ********************************************************************** DNUP JSB DETOL DETERMINE THE OLD-MAJOR-LU. LDB ODML2,I RESET WORD 2 OF I/O REQUESTS JSB FXWD2 TO THE SUBCHANNEL OF THE NEW DEVICE. * LDA OEQT1 LDB ODML2,I LINK OLD DEVICE'S I/O REQUESTS JSB $XXUP ON THE NEW DEVICE. STA NINTF * JSB FOLDD FIX ALL OLD DOWNED LU'S THAT NEED IT. JMP LUP52 ****************************************************************** * THE OLD DEVICE IS DOWN AND THE NEW DEVICE'S EQT IS DOWN. ********************************************************************* DNDNE JSB DETOL DETERMINE OLD DEVICE'S MAJOR-LU LDA OEQT1 LINK OLD DEVICE'S I/O REQUESTS ON THE LDB ODML2,I NEW DEVICE'S EQT. JSB $XXUP STA NINTF * JSB FOLDD FIX OLD DOWNED DEVICE'S LU'S THAT NEED IT. * 6 LDB EQT1 UNLINK ANY NORMAL USER DNDE5 CLA I/O FROM THE NEW DEVICE'S EQT. JSB $UNLK DEF P2 JMP LUP50 SKP **************************************************************** * THE OLD AND NEW DEVICES ARE DOWN. ********************************************************************* DNDN STB TTEMP SAVE NEW DEVICE MAJOR-LU AND STA NDML2 ITS DRT WORD 2 ADDRESS. ADB M1 SAVE ITS ADB DRT DRT WORD STB NDML1 2 ADDRESS. * JSB DETOM DETERMINE THE OLD DEVICE'S MAJOR-LU. * LDB TTEMP CHECK IF NEW CMB,INB NEW DEVICE'S MAJOR ADB P1 LU IS < LU. SSB,RSS LU < NEW DEVICE'S MAJOR LU. JMP DNDN5 * DNDN9 LDB DRT2A LU IS BELOW NEW DEVICE'S MAJOR LU. JSB CHASE CHASE DOWN THE LU'S I/O LDA NDML2,I QUEUE TO ITS END AND RAL,CLE,ERA ADD THERE THE NEW DEVICE'S STA B,I MAJOR-LU I/O QUEUE. * LDA OMJLU IF OLD MAJOR LU EQUALS TO CPA P1 LU, THEN FIX UP OLD DEVICE'S RSS LU'S TO INCLUDE THE NEW OLD- JMP DNDN6 MAJOR-LU. OTHERWIZE, CONTINUE. * LDA OSBEQ A=OLD SUBCHANNEL-EQT WORD. LDB DRT1A INB B=LU WORD 1 ADDRESS + 1. JSB FXOLD GO FIX OLD DEVICE'S LU'S. * DNDN6 LDA P2 MODIFY ALL LU'S STA SSBEQ FOR NEW DEVICE LDA P1 TO POINT TO IOR MSIGN LU. LDB NDML1 CLE JSB SDRT2 JMP LUP50 SKP DNDN5 SZB,RSS CASE WHERE OLD AND NEW DEVICES ARE JMP LUP60 BOTH DOWN AND EQUAL. * LDB NDML2 LU > NEW DEVICE MAJOR-LU. JSB CHASE CHASE DOWN THE NEW MAJOR-LU'S. CCA I/O QUEUE TO ITS END. * ADA DRT CALCULATE DRT ADA OMJLU WORD 2 OF STA ODML1 OLD MAJOR-LU. * ADA LUMAX LINK OLD MAJOR LU I/O LDA A,I H RAL,CLE,ERA QUEUE TO END OF NEW STA B,I MAJOR I/O QUEUE. * LDA TTEMP MAKE LU POINT TO IOR MSIGN NEW DEVICE MAJOR-LU. STA DRT2A,I * LDA OMJLU IF LU = OLD CPA P1 MAJOR-LU, RSS THEN CONTINUE, JMP LUP50 ELSE DONE. * LDA OSBEQ FIX OLD LDB ODML1 DEVICE'S INB LU'S. JSB FXOLD SKP ****************************************************************** * FINISH SWITCHING LU ******************************************************************* LUP50 LDA DRT1A,I SET UP DRT AND B3700 WORD 1 WITH ADA P2 NEW DEVICE AND STA DRT1A,I OLD LOCK FLAG. * LUP52 LDA NINTF CHECK IF AN I/O SZA,RSS OPERATION MUST BE JMP LUP55 INITIATED ON THE NEW EQT. CPA $DMEQ YES, IF THE NEW DEVICE IS THE BIT BUCKET, JMP LUP80 THEN SET A FLAG FOR IOCX. JSB $DLAY IF NOT,SET A TIMEOUT FOR INITIATION. * LUP55 LDA .4 SCHEDULE ANY WAITERS ON JSB $SCD3 DOWNED DEVICES. LDA OEQT1 SET UP THE OLD DEVICE'S JSB $ETEQ EQT ADDRESSES, CHECK BUFFER JSB $CKLO LIMITS AND SCHED WAITERS. * LDA P1 IF LU CHANGED WAS CPA .1 SYSTEM CONSOLE THEN JMP LUP70 ISSUE A MESSAGE. * LUP60 CLA JMP LUPR,I OTHERWIZE, RETURN. * LUP70 CLA ISSUE '**' STA CONLU MESSAGE TO LDA NSYSM NEW SYSTEM JMP LUPR,I CONSOLE. * LUP80 ISZ $BITB SET A FLAG FOR IOCX SO THAT JMP LUP55 IT WILL CLEAN OUT THE BIT BUCKET. * LUPR2 LDA $DMEQ SET UP DUMMY JSB $ETEQ EQT ADDRESES FOR JMP LUPR1 THE BIT BUCKET. * LUP25 LDA $DMEQ JMP LUP05 * LUER LDA $ERIN JMP LUPR,I 'INPUT ERROR' SKP * SPECIAL TEST TO DISALLOW SWTCHING AN LU TO A DISK IF THE * LU HAS I/O STA^CKED ON IT(OR IT'S EQT). * LU100 LDA DRT2A,I DOES THE LU RAL,CLE,ERA HAVE ANY I/O SZA HUNG ON IT? JMP LUER YES, ISSUE ERROR MESSAGE. * SEZ IF NO I/O AND LU IS DOWN, JMP LUPR1 THEN ALLOW SWTCH. LDA OEQT1,I OTHERWIZE, IF UP AND NO I/O IS SZA,RSS HUNG ON THE OLD EQT, THEN JMP LUPR1 ALLOW SWTCH. * JMP LUER IF I-O HUNG ON OLD EQT,ISSUE ERROR MESS. * ****************************************************************** * DISPLAY LU AND IT'S STATUS ****************************************************************** * LUPR3 LDA P1 GET AND JSB $CVT1 SAVE THE STA LUMSG+2 ASCII LU #. LDA DRT1A,I GET AND AND B77 SAVE JSB $CVT1 THE ASCII STA LUMSG+5 EQT #. LDA DRT1A,I CHECK IF AND B174K A SUBCHANNEL CCE,SZA IS SPECIFIED. JMP LUP14 LDA DBLBK IF SUBCHANNEL=0, STA LUMSG+6 THEN DO NOT DISPLAY JMP LUP15 THE SUBCHANNEL. * LUP14 LDB BLS IF SUBCHANNEL#0, STB LUMSG+6 THEN DISPLAY ALF,RAL THE ASCII JSB $CVT1 SUBCHANNEL. LUP15 STA LUMSG+7 LDB DBLBK CHECK IF LDA DRT2A,I THE DEVICE SSA IS UP OR LDB EQBD DOWN. IF STB LUMSG+8 DOWN, LDA LUMGA PRINT A "D". JMP LUPR,I RETURN. SKP * * VARIABLES, CONSTANTS AND BUFFERS FOR LUPR * NSYSM DEF *+1 DEC -2 ASC 1,** * LUMGA DEF *+1 DEC -18 LUMSG ASC 9,LU #N1 = EXX SYY * B174K OCT 174000 B176K OCT 176000 B20K OCT 20000 B14K OCT 14000 B36K OCT 36000 B77 OCT 77 B377 OCT 377 B3700 OCT 3700 C3700 OCT 174077 MSIGN OCT 100000 .1 DEC 1 .4 DEC 4 .15 DEC 15 M1 DEC -1 * DBLBK ASC 1, BLS ASC 1, S * DRT1A NOP DRT2A NOP NINTF NOP TTEMP NOP OEQT1 NOP NEQT# NOP ӐWORD2 NOP OSBEQ NOP OMJLU NOP OLD DEVICE MAJOR LU. ODML1 NOP OLD DEVICE MAJOR-LU DRT WORD 1 ADDRESS. ODML2 NOP OLD DEVICE MAJOR-LU DRT WORD 2 ADDRESS. NDML1 NOP NEW DEVICE MAJOR-LU DRT WORD 1 ADDRESS. NDML2 NOP NEW DEVICE MAJOR-LU DRT WORD 2 ADDRESS. SKP ***************************************************************** * * SUBROUTINE CKNLU: * * CKNLU DETERMINES IF THE DEVICE(LU) OR THE EQT POINTED TO BY * THE SUBCHANNEL-EQT WORD IS UP OR DOWN. * * CALLING SEQUENCE: * := SUBCHANNEL IN BITS 11-15, EQT IN BITS 0-5. * :=ADDRESS OF FIFTH EQT WORD. * JSB CKNLU * * RETURN: * (P+1) DEVICE IS DOWN. * (P+2) EQT IS DOWN. * (P+3) DEVICE IS UP OR NO DEVICE FOUND. * ALL REGISTERS ARE VIOLATED. * AT (P+1): :=MAJOR LU # OF DOWNED DEVICE. * :=MAJOR LU DRT WORD 2 ADDRESS. * USES SDRT2 AS A TEMPORARY. * **************************************************************** * CKNLU NOP LDA EQT5,I CHECK IF RAL,SLA THE EQT JMP CKNL0 IS UP OR SSB DOWN. JMP CKNL2 THE EQT IS DOWN. * CKNL0 LDB LUMAX CMB,INB STB SDRT2 LDB DRT CKNL1 LDA B,I DETERMINE AND C3700 IF THE CPA P2 NEW JMP CKNL7 DEVICE INB EXISTS. ISZ SDRT2 JMP CKNL1 JMP CKNL9 THE DEVICE DOES NOT EXIST. * CKNL7 ADB LUMAX DETERMINE IF THE DEVICE LDA B,I IS UP OR DOWN. SSA JMP CKNL8 CKNL9 ISZ CKNLU THE DEVICE IS UP, RETURN TO P+3. CKNL2 ISZ CKNLU THE EQT IS DOWN, RETURN TO P+2. JMP CKNLU,I RETURN. * CKNL8 STB A THE DEVICE IS DOWN. LDB LUMAX SET =DRT WORD 2 ADDRESS. ADB SDRT2 SET =LU #. INB JMP CKNLU,I RETURN TO P+1. 5G SKP **************************************************************** * SUBROUTINE SDRT2: * * SDRT2 WILL STORE THE A REG IN DRT WORD 2 FOR ANY DRT ENTRIES * WHICH CORRESPOND TO THE SUBCHANNEL AND EQT GIVEN IN P2. IF * ON ENTRY E=1, THEN SDRT2 WILL SCAN ONLY TO THE FIRST ENTRY * CORRESPONDING TO P2. IF E=0, THEN SDRT2 WILL SCAN THE ENTIRE * DRT FROM THE GIVEN ENTRY TO ITS END. * * CALLING SEQUENCE: * :=SUBCHANNEL-EQT WORD FOR THE LU'S TO SCAN FOR: * BITS 5-0=EQT * BITS 15-11=SUBCHANNEL * :=DRT WORD 1 ADDRESS FROM WHICH TO BEGIN SCAN. * :=CONTENTS TO STORE INTO DRT WORD 2. * :=0 SCAN TO END OF DRT. * :=1 SCAN ONLY FOR FIRST ENTRY. * JSB SDRT2 * USES TEMPORARY LOCATIONS CKNLU,SDRT8,SDRT9 * RETURN: * NO REGISTERS ARE SAVED ON EXIT. * ON EXIT: * :=NEXT DRT WORD 1 ADDRESS TO BE SCANNED. * := LUMAX - LAST LU# SCANNED. ***************************************************************** * SDRT2 NOP STA CKNLU SAVE CONTENTS TO STORE INTO DRT WORD 2. LDA LUMAX SET ADA DRT CMA,INA UP ADA B STA SDRT9 COUNTER. STB SDRT8 SAVE ADDRESS OF FIRST DRT ENTRY TO SCAN. SZA,RSS JMP SDRT2,I * SDR29 LDA SDRT8,I SET CONTENTS AND C3700 OF DRT WORD 2 CPA SSBEQ AND COMPARE TO JMP SDR22 SUBCHANNEL-EQT WORD. SDR25 ISZ SDRT8 INCREMENT DRT ADDRESS. ISZ SDRT9 INCREMENT COUNT. JMP SDR29 CLA JMP SDRT2,I NO MORE ENTRIES, SO RETURN. * SDR22 LDB CKNLU FOUND AN ENTRY, LDA SDRT8 POSITION TO ADA LUMAX WORD 2 AND STB A,I STORE NEW CONTENTS. SEZ,RSS IF E=1, JMP SDR25 THEN CONTINUE SCAN. ISZ SDRT8 OTHERWIZE, INCREMENT DRT LD,A SDRT9 ADDRESSES AND RETURN. INA JMP SDRT2,I * SDRT8 NOP SDRT9 NOP SSBEQ NOP * ********************************************************************* * * SUBROUTINE CHASE: * * CHASE WILL FIND THE END OF AN I/O QUEUE GIVEN IT'S HEAD. * * CALLING SEQUENCE: * :=ADDRESS OF HEAD OF I/O QUEUE. * JSB CHASE * * RETURN: * ALL REGISTERS ARE MODIFIED. * :=ADDRESS OF LINK WORD OF LAST I/O REQUEST. * :=0 * ******************************************************************** * CHASE NOP CHASE CHAS1 LDA B,I DOWN RAL,CLE,ERA THE LU'S SZA,RSS I/O QUEUE JMP CHASE,I TO ITS LDB A END. JMP CHAS1 SKP * ***************************************************************** * * SUBROUTINE FXWD2: * * FXWD2 CHANGES THE SUBCHANNEL IN WORD 2 OF EACH I/O REQUEST * IN THE GIVEN I/O QUEUE. * * CALLING SEQUENCE: * :=NEW SUBCHANNEL: BITS 2-5=LOWER 4 BITS * BIT 13 =UPPER BIT. * :=POINTER TO FIRST I-O REQUEST =0 IF NO REQUESTS. * JSB FXWD2 * * RETURN: * ALL REGISTERS ARE VIOLATED. * ****************************************************************** * FXWD2 NOP RBL,CLE,ERB STRIP POSSIBLE SIGN BIT. FWD21 SZB,RSS IF END OF I/O QUEUE, JMP FXWD2,I THEN EXIT. STB SDRT2 INB POSITION TO I/O LDA B,I CONTROL WORD. AND WD2SB STRIP OFF OLD SUBCHANNEL IOR WORD2 AND ADD IN NEW SUBCHANNEL. STA B,I LDB SDRT2,I FIX NEXT I/O REQUEST. JMP FWD21 * WD2SB OCT 157703 SKP * **************************************************************** * * SUBROUTINE DETOL * * DETOL DETERMINES WHAT THE OLD DEVICE'S MAJOR-LU IS AND SETS * UP LOCATIONS OMJLU, ODML1 AND ODML2. * * CALLING SEQUENCE: * JSB DETOL * * RETURN: * ALL REGISTERS ARE MODIFIED. * :=OLD DEVICE'S MAJOR-LU. * :=OLD DEVICE'S MAJOR-LU DRT WORD 1 ADDRESS. * :=OLD DEVICE'S MAJOR-LU DRT WORD 2 ADDRESS. **************************************************************** * DETOL NOP JSB DETOM DETERMINE THE OLD MAJOR-LU. ADA M1 COMPUTE THE ADA DRT OLD DEVICE'S STA ODML1 MAJOR-LU'S ADA LUMAX DRT WORD 1 STA ODML2 AND 2 ADDRESSES. JMP DETOL,I RETURN. * * ************************************************************************ * * SUBROUTINE DETOM: * * DETOM RETURNS THE OLD DEVICE'S MAJOR-LU. * * CALLING SEQUENCE: * JSB DETOM * * RETURN: * :=OLD DEVICE'S MAJOR-LU. * *********************************************************************** * DETOM NOP LDA DRT2A,I DETERMINE IF LU IS RAL,CLE,ERA THE OLD MAJOR-LU. CLE,SZA,RSS IF NO QUEUE, THEN LU CCE IS THE OLD MAJOR-LU. STA B IF QUEUE ELEMENT IS < 2000, ADB B176K THEN QUEUE ELEMENT IS SEZ OLD MAJOR-LU. LDA P1 IF 2000 >= QUEUE ELEMENT, THEN ELEMENT STA OMJLU IS ADDRESS AND LU IS OLD MAJOR-LU. JMP DETOM,I RETURN. SKP * ***************************************************************** * * SUBROUTINE FOLDD: * * FOLDD WILL FIX THE DRT WORD 2'S OF THE OLD DEVICE'S LU'S. * * CALLING SEQUENCE: * :=THE OLD DEVICE'S MAJOR-LU. * :=THE OLD DEVICE'S MAJOR-LU DRT WORD 1 ADDRESS. * JSB FOLDD * * RETURN: * ALL REGISTERS ARE MODIFIED. ***************************************************************** * FOLDD NOP LDA DRT1A,I SET UP DRT WORD 1 AND B3700 OF LU WITH THE NEW ADA P2R DEVICE AND OLD STA DRT1A,I LOCK FLAG. * CLA SET DRT WORD 2 OF STA DRT2A,I LU TO UP STATE. * LDA OMJLU IF LU=OLD DEVICE MAJOR-LU CPA P1 THEN FIX LU'S FOR THE RSS OLD DEVICE. JMP FOLDD,I OTHERWIZE, RETURN. LDA OSBEQ OLD MAJOR LU. LDB ODML1 INB JSB FXOLD FIX LU'S FOR THE OLD DEVICE. JMP FOLDD,I RETURN. SKP * ***************************************************************** * * SUBROUTINE FXOLD: * * FXOLD WILL CREATE A NEW MAJOR-LU FOR THE OLD DEVICE, POINT * ANY OTHER LU'S FOR THIS DEVICE TO THE MAJOR-LU, AND SET ALL * THESE LU'S DOWN. * * CALLING SEQUENCE: * :=SUBCHANNEL-EQT WORD OF THE LU TO SCAN FOR. * :=DRT WORD 1 ADDRESS TO BEGIN SCAN. * JSB FXOLD * CALLS SUBROUTINE SDRT2 * * REUTRN: * NO REGISTERS ARE SAVED. * ***************************************************************** * FXOLD NOP STA SSBEQ LDA MSIGN CREATE A NEW CCE OLD-MAJOR- JSB SDRT2 LU. SZA,RSS IF A=0, THEN NO OTHER JMP FXOLD,I LU'S ON OLD DEVICE. * ADA LUMAX OTHERWIZE, POINT IOR MSIGN ALL OTHER LU'S LDB SDRT8 FOR OLD DEVICE CLE TO THE NEW JSB SDRT2 OLD-MAJOR-LU. JMP FXOLD,I RETURN. SKP * **************************************************************** * * ' DEVICE TIME-OUT PARAMETER ' STATEMENT * * FORMAT: TO,P1,P2 WHERE * * P1 = EQT # * P2 = TIME-OUT PARAMETER OR -1 * * ACTION: IF P2 = -1, A SECOND PARAMETER WAS NOT * RECEIVED FROM THE MESSAGE PROCESSOR; * THEREFORE, PRINT THE CURRENT TIME-OUT * PARAMETER OF DEVICE P1. * * BOTH P1 AND P2 PRESENT, ASSIGN P2 AS THE * NEW TIME-OUT PARAME.TER FOR DEVICE P1. * ***************************************************************** * CH.TO NOP LDA P1 GET EQT NUMBER AND JSB IODNS CHECK VALIDITY. JMP TOER INPUT ERROR. LDB P2 LOOK AT P2 SZB,RSS IF N2 ZERO, DISABLE JMP CHTO2 TIME-OUT FOR DEVICE * INB,SZB IF N2 = -1, OUTPUT T-O PARAMETER JMP CHTO1 OTHERWISE, ENTER NEW T-O VALUE * LDA EQT14,I CONVERT T-O PARAMETER CCE,SZA TO DECIMAL ASCII B3000 CMA JSB $CVT3 LDB A,I GET THE HIGH WORD ADB B164C ADD '=' - 'BLANK' STB TOMS+3 CCE,INA DLD A,I STORE IN MESSAGE DST TOMS+4 * LDA P1 CONVERT EQT # JSB $CVT1 TO DECIMAL ASCII STA TOMS+2 STORE INTO MESSAGE LDA TOMSA JMP CH.TO,I RETURN. SKP CHTO1 CMB,INB ERROR IF ATTEMPT LDA EQT5,I TO SET TYPE 0 OR 5 AND B374C DEVICE TIME-OUT SZA VALUE TO LESS THAN CPA B2400 FIVE SECONDS. RSS JMP CHTO2 OTHERWISE, STORE * LDA .500 NEW TIME-OUT ADA B VALUE. SSA,RSS JMP TOER * CHTO2 STB EQT14,I CLA JMP CH.TO,I RETURN WITHOUT MESSAGE. * TOER LDA $ERIN 'INPUT ERROR' JMP CH.TO,I RETURN. * TOMSA DEF *+1 DEC -12 TOMS ASC 2,TO# NOP ASC 1, = NOP NOP * .500 DEC 500 B164C OCT 16400 B2400 OCT 2400 B374C OCT 37400 SKP OPER NOP LDA $OPER JMP OPER,I * IODNS NOP STA B IF CMB,INB,SZB EQT SSA NUMBER CCB,RSS IS ZERO ADB EQT# SSB THEN TAKEE, JMP IODNS,I ERROR EXIT. JSB $CVEQ OTHERWIZE, SET EQT ENTRY ADDRESSES. ISZ IODNS JMP IODNS,I RETURN. * A EQU 0 B EQU 1  * $OPER DEF *+1 DEC -12 ASC 6,OP CODE ERR $ERIN DEF *+1 DEC -12 ASC 6,INPUT ERROR HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** XI EQU 1647B . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16 EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 RQP9 EQU .+32 9 PARAMETERS) * * DEFINITION OF SYSTEM LISTS (QUEUES) * * SKEDD EQU .+33 'SCHEDULE' LIST, SUSP2 EQU .+35 'WAIT' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPzENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BACKGROUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND * ORG * LENGTH OF SYSTEM COMMAND PROGRAM. END $$CMD uHFBBH "= 92001-18031 1826 S 2322 &RT2GN RTE-II ON LINE GEN.             H0123 ASMB,N,R,L,C HED RT2/3GN -- MAIN FOR ON-LINE GENERATOR IFN ASSEMBLY OPTION "N" FOR RTE-II NAM RT2GN,3,90 92001-16031 REV.1826 780508 XIF IFZ ASSEMBLY OPTION "Z" FOR RTE-III NAM RT3GN,3,90 92060-16037 REV.1826 780508 XIF SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ************************************************************ * * NAME RT2GN/RT3GN MAIN FOR ON-LINE GENERATOR * SOURCE PART # 92001-18031 / 92060-18037 * REL PART # 92001-16031 / 92060-16037 * WRITTEN BY: KFH, JH, RB, GAA * ************************************************************* SPC 3 * * DEFINE ENTRY POINTS. * * OPERATOR INPUT SUBROUTINES: * ENT PROMT PRINT COMMAND AND ACCEPT INPUT. ENT READ READ INPUT. ENT RNAME SPECIAL ENTRY TO READ SUBR. ENT YE/NO ANALYZE YES/NO RESPONSE. ENT DOCON ANALYZE INPUT FOR OCTAL VALUE. ENT GETAL SUPPLY CHAR FOR GETNA & GETOC. ENT GETNA MOVE LBUF TO TBUF. ENT GETOC LBUF CHAR FROM ASCII TO OCTAL. ENT GINIT INITIALIZE LBUF SCAN. * * DIAGNOSTIC SUBROUTINES: * ENT GN.ER PRINT DIAGNOSTIC. ENT INERR CALL ERROR AND CONTINUE. ENT IRERR CALL ERROR AND ABORT. ENT ABORT ABORT THE GENERATION. * * DISC FILE I/O SUBROUTINES: * ENT CRETF CREATE A FILE. ENT CLOSF CLOSE A FILE. ENT CLSAB CLOSE RTGEN OUTPUT FILE. ENT CHFIL CHECK FOR FILE ERRORS. ENT DRKEY WRITE ON I&NTERACTIVE DEVICE. ENT SPACE OUTPUT BLANK LINE. ENT LFOUT WRITE ONTO LIST FILE. ENT RDNAM FIND A NAM RECORD IN A FILE. ENT RDBIN READ RELOCATABLE FILE. ENT GTERM PURGE ALL FILES ON ABORT. * * CORE-IMAGE OUTPUT FILE SUBROUTINES. * ENT DISKA INCR. DISC ADDRESS. ENT DISKI INPUT CONTROL. ENT DISKO OUTPUT CONTROL. ENT DISKD I/O SUBROUTINE. * * DCB'S: * ENT IPDCB COMMAND FILE DCB. ENT LFDCB LIST FILE DCB. ENT RRDCB RELOCATABLE FILE DCB. ENT NMDCB NEW-NAM FILE DCB. ENT ECDCB ECHO DCB * * LST, IDENT, FIX-UP SUBS AND POINTERS. * ENT INLST,LSTS,LSTX,LSTE ENT TLST,PLST ENT .LST1,.LST2,.LST3,.LST4,.LST5 * ENT INIDX,IDXS,IDX ENT TIDNT,PIDNT ENT ID1,ID2,ID3,ID4,ID5,ID6,ID7,ID8,ID9,ID10,ID11 ENT ID12,ID13,ID14,ID15,ID16 * ENT FIXX,FIX,PFIX,TFIX ENT FIX1,FIX2,FIX3,FIX4 * ENT LNKX,LNK,LNKS ENT LNK1,LNK2,LNK3 * * LINKAGES FOR SEGMENT SUBR CALLS TO ANOTHER SEGMENT. * ENT LLOAD "LOAD" EXT NLOAD * ENT LOADS "LOADS" EXT LODER * ENT GENIO "GENIO" EXT GNIO ENT FWBPL EXT FWENT * ENT DSTBL "DSTBL" EXT DSTB EXT DSTB5 * ENT FSECT "FSECT" EXT FSEC EXT FSEC5 * IFZ ******* BEGIN DMS CODE ******** ENT PARTD "PARTS" EXT PARTS ******* END DMS CODE ******** XIF * * POINTERS FOR CURRENT PAGE LINKAGE IMAGE AREA. * ENT TBLNK,CPLIM ENT LRBP,URBP,IRBP ENT LBBP,UBBP,IBBP ENT CUBP,UCUBP,ICUBP,CUBPA * * MISCELLANEOUS SUBROUTINES: * ENT CONVD ENT LABDO,USER,USERS,SEGS,SYS * * MISCELLANEOUS VARIABLES: * ENT NAMRC,NAMBL,NAMOF ENT ERRLU,ATRCM,IACOM,TRCHK ENT SWRET ENT FMRR ENT DPRS2  ENT .NM. ENT BPARS ENT OCTNO ENT BUFUL ENT TCHAR ENT DSKAD ENT ADBUF ENT MAPFG ENT NUMPG ENT PTYPE ENT TYPMS ENT DSKAB ENT $RNT,$PRV ENT TBCHN,PIOC,SWAPF ENT LBUF,TBUF,LWASM,PPREL ENT SDS#,CURAL,CPL2 ENT CMFLG ENT ABCOR ENT MXABC ENT SETDS ENT OLDDA ENT ADBP,NADBP ENT OUBUF ENT TTIME,TIME1,MULR ENT LWSBP ENT NLCOM ENT EOBP ENT #IREG ENT CPLSB,ASKEY,SISDA,SKEYA ENT P3,P4,P5,P14 ENT M7400 * SKP * * DEFINE EXTERNALS * EXT INPUT,LURQ EXT WRITF,EXEC,CLOSE EXT LOCF,APOSN EXT CREAT,OPEN,READF,CNUMD EXT .ENTR EXT PARSE EXT COR.A,RMPAR,DSETU,PTBOT EXT DSET5,PTBT5 EXT DLRM1,DLRM7 * SPC 2 * * DEFINE A AND B REG * A EQU 0 B EQU 1 SUP SPC 3 LST#T DEC 2 # LST TRACKS. IDT#T DEC 3 # IDENT TRACKS. FIX#T DEC 1 # FIX-UP TRACKS. SECWD DEC 128 # WORDS PER SECTOR. SKP * IDENT FORMAT * * WORD 1: ID1 - NAME 1,2 * WORD 2: ID2 - NAME 3,4 * WORD 3: ID3 - NAME 5, USAGE FLAG (SEE BELOW) * WORD 4: ID4 - COMMON LENGTH * WORD 5: (15): ID5 - BASE/CURRENT PAGE LINKING FLAG * WORD 5: (14): ID5 - NEW NAM RECORD FLAG * WORD 5: (13-4): ID5 - NOT USED * WORD 5: (3-0): ID5 - MAP OPTIONS * WORD 6 (15): ID6 - M/S * WORD 6 (08-14): ID6 - NOT USED * WORD 6 (04): ID6 - SSGA (RTE-III) * WORD 6 (03): ID6 - REVERSE COMMON (RTE-III) * WORD 6 (00-06): ID6 - TYPE * WORD 7: ID7 - LOWEST DBL ADDRESS * WORD 8: ID8 - DISK LENGTH FOR UTILITY RELOCATABLES * OR.. MAIN IDENT INDEX FOR SEGMENTS * OR.. (MEU SYSTEMS) PG REQMTS (8 BITS) * THEN KEYWD INDEX (LOW 8 BITS). * WORD 9: ID9 - FILE NAME 1,2 * WORD 10: ID10 - FILE NAME 3,4 * WORD 11: ID11 - FILE NAME 5,6 * WORD 12: ID12 - SECURITY CODE * WORD 13: ID13 - CARTRIDGE LABEL * WORD 14: ID14 - RECORD NUMBER * WORD 15: ID15 - RELATIVE BLOCK * WORD 16: ID16 - BLOCK OFFSET * * USAGE FLAG BITS ARE AS FOLLOWS: * * BIT 0 IF SET MODULE WAS LOADED * BIT 1 IF SET MUST LOAD THIS MODULE (EXT DEFINED BY IT) * BIT 2 IF SET THIS MODULE WAS LOADED AS PART OF A SEGMENT * * * LST FORMAT * * WORD 1: .LST1 - NAME 1,2 * WORD 2: .LST2 - NAME 3,4 * WORD 3: .LST3 - NAME 5, ORDINAL * WORD 4: .LST4 - IDENT INDEX OR 2 IF COMMON, 3 IF ABS, 4 IF REPLACE * WORD 5: .LST5 - SYMBOL VALUE * * * FIXUP TABLE FORMAT * * FIX1: CORE ADDRESS * FIX2: INSTRUCTION CODE * FIX3: OFFSET * FIX4: INDEX OF LST ENTRY REFERENCED, OR ZERO IF NONE * SKP * * PROGRAM TYPES (NON-MEU) * * 0: SYSTEM * 1: RT RESIDENT * 2: RT DISK RESIDENT * 3: BG DISK RESIDENT * 4: BG RESIDENT * 5: BG SEGMENT * 6: LIBRARY * 7: UTILITY * 8: LOAD ONLY TO SATISFY EXTERNAL REFERENCES. * 9: RT RESIDENT USING BACKGROUND COMMON. * 10: RT DISC RESIDENT USING BACKGROUND COMMON. * 12: BG RESIDENT USING FORGROUND COMMON. * 11: BG DISC RESIDENT USING FORGROUND COMMON. * 13: BG SEGMENT USING FORGROUND COMMON * 14: TYPE 6 THAT IS TO BE FOURCE LOADED TO THE LIBRARY. * 30: (MEU SYSTEM SSGA MODULE) CONVERTED TO TYPE 7. * 16-29,31 (MEU MODULES USING SSGA) TYPE SET TO TYPE-16. * 15,32-99:UNUSED (TYPE + 80 IS USED TO DESIGNATE AUTO SPC 1 * PROGRAM TYPES (MEU SYSTEMS) * * 0: SYSTEM * 1: MEMORY RESIDENT * 2: RT DISK RESIDENT * 3: BG DISK RESIDENT * 4: (CONVERTED TO 9) * 5: BG SEGMENT * 6: LIBRARY * 7: UTILITY * 8: LOAD ONLY TO SATISFY EXTERNAL REFERENCES. * 9: MEMORY RESIDENT USING BACKGROUND COMMON. * 10: RT DISC RESIDENT USING BACKGROUND COMMON. * 11: BG DISC RESIDENT USING FORGROUND COMMON. * 12: (CONVERTED TO TYPE 1) * 13: (CONVERTED TO 5, USES SAME COMMON AS MAIN) * 14: TYPE 6 THAT IS TO BE FOURCE LOADED TO THE LIBRARY. * 30: SUBSYSTEM GLOBAL MODULE * 17,18,19,25,26,27: TYPES 1,2,3,9,10,11 (RESP.) * W/ACCESS TO SSGA. * 15,16,20-24,28,29,31-99:UNUSED (TYPE + 80 IS USED TO * DESIGNATE AUTO SCHEDULE AT STARTUP, BUT MAY * ONLY BE ENTERED IN PARM PHASE. +80 IS JUST * A FLAG TO PARM PHASE, NOT STORED IN ID-SEG.) * * SKP * * ERROR CODES * * 0: GENERATOR ERROR (SEND IN BUG REPORT) * 1: INVALID REPLY TO INITIALIZATION PARAMETERS * 2: INSUFFICIENT AMOUNT OF AVAILABLE MEMORY FOR TABLES * 3: RECORD OUT OF SEQUENCE * 4: INVALID RECORD TYPE * 5: DUPLICATE ENTRY POINTS * 6: COMMAND ERROR - PROGRAM INPUT PHASE * 7: LST,IDENT,FIXUP TABLE OVERFLOW * 8: DUPLICATE PROGRAM NAMES * 9: PARAMETER NAME ERROR * 10: PARAMETER TYPE ERROR * 11: PARAMETER PRIORITY ERROR * 12: PARAMETER EXECUTION INTERVAL ERROR * 13: BG SEGMENT PRECEDES BG DISC RESIDENT * 14: SYS AV MEM OR BG BOUNDARY ERRORS * 15: ILLEGAL CALL BY A TYPE 6 PROGRAM (MAY CALL TYPE 0 AND 6 ONLY) * 16: BP LINKAGE AREA OVERFLOW * 17: TYPE 1 OUTPUT FILE OVERFLOW (ESTIMATE WAS NOT LARGE ENOUGH) * 18: MEMORY OVERFLOW * 19: TR STACK UNDERFLOW/OVERFLOW * 20: INVALID COMMAND INPUT LU * 21: '$CIC' NOT FOUND IN LOADER SYMBOL TABLE * 22: LIST FILE ERROR * 23: INVALID FWA BP LINKAGE REPLY * 24: INVALID CHANNEL NO. IN EQT RECORD * 25: INVALID DRIVER NAME IN EQT RECORD * 26: INVALID D, B, U, OPERANDS IN EQT RECORD * 27: INVALID DEVICE REFERENCE NO. * 28: INVALID INTERRUPT REC CHANNEL NO. * 29: INVALID INTERRUPT REC CHANNEL NO. ORDER * 30: INVALID INT RECORD MNEMONIC * 31: INVALID EQT NO. IN INT RECORD * 32: INVALID PROGRAM NAME IN INT RECORD * 33: INVALID ENTRY POINT IN INT RECORD * 34: INVALID ABSOLUTE VALUE IN INT RECORD * 35: BP INTERRUPT LOCATION OVERFLOW * 36: INVALID TERMINATING OPERAND IN INT RECORD * 37: INVALID COMMON LENGTH IN SYS, LIB, OR SSGA MODULE..... * 38: ID-SEGMENT OF SEGMENT 3 NOT FOUND * 39: ILLEGAL SYSTEM }CALL OF TYPE 6 PROGRAM * 40: NOT USED * 41: NOT USED * 42: NOT USED * 43: NOT USED SKP ******************************************************************** * * * M E U E R R O R C O D E S * * * ******************************************************************** SPC 1 * DURING DEFINITION OF PARTITIONS: * 44: INVALID PARTITION NUMBER * 45: INVALID PARTITION SIZE * 46: INVALID PARTITION TYPE * 47: INVALID PARTITION RESERVE * USER RESPONSE TO 44 THRU 47: REENTER DESCRIPTION * OF PARTITION IN QUESTION AND CONTINUE. * 53: PARTITION SIZES DON'T TOTAL AVAILABLE AREA * USER RESPONSE TO 53: REDEFINE ALL PARTITIONS * * DURING ASSIGNMENT OF PROGRAMS TO PARTITIONS: * 48: INVALID OR UNKNOWN PROGRAM NAME * 49: INVALID PARTITION NUMBER * 50: PROGRAM TOO LARGE FOR PARTITION SPECIFIED * USER RESPONSE TO 48 THRU 50: REENTER ASSIGNMENT * OR GIVE UP AND CONTINUE * * DURING OVERRIDE OF PROGRAM SIZE REQMTS: * 48: (SAME AS ABOVE) * 51: INVALID SIZE (LARGER THAN ALLOWABLE OR * SMALLER THAN PROGRAM REQUIREMENT * USER RESPONSE TO 48 OR 51: REENTER SIZE OVERRIDE * OR GIVE UP AND CONTINUE * * DURING PROGRAM LOADING AND RELOCATION: * 52: MODULE WITHOUT SSGA BIT IN TYPE HAS * EXTERNAL REF TO AN SSGA ENTRY POINT * 54: SUBROUTINE OR SEGMENT DECLARED MORE COMMON THAN MAIN * USER RESPONSE: RECOMPILE MAIN SPECIFYING MAX COMMON NEEDED SKP DBP EQU * FWA DUMMY BASE PAGE. * ************************************************ * * * THE NEXT 1K IS OVERLAID FOR DUMMY BASE PAGE * * WHEN RTGN3 BEGINS EXECUTION. * * * ************************************************ SPC 5 START NOP STB PARMA SAVE THE COMMAND ADDRESS * * SET UP COMMAND LU OR FILE, AND THE ERRLU * STRT1 JSB RMPAR RETRIEVE PARAMETERS DEF *+2 DEF PARMA * * STRT2 LDA PARMA GET FIRST WORD SZA,RSS IF ZERO ISZ PARMA SET TO 1 (DEFAULT TO SYS CONSOLE) CLB,INB LU'S TYPE IS 1 AND M7400 IS INPUT AN ASCII FILE NAME? SZA INB YES, FILE'S TYPE IS 2 STB PARS2 TYPE WORD FOR PRS21,+1,+2 DLD PARS3 GET POSSIBLE SEC. CODE & LU STA PRS31 AND SAVE STB PRS41 LDA RWSUB GET POTENTIAL R/W SUBFUNCTION STA PARS5 SAVE FOR OPEN CALL LDB C4040 CONVERT 0 FILL'S IN NAME LDA PARS2+2 TO BLANKS SZA,RSS STB PARS2+2 LDA PARS2+3 SZA,RSS STB PARS2+3 * JSB STATE SET THE STATE FLAGS IACOM & CMDLU JMP INVLU INVALID INPUT LU SPECIFIED - GO RECOVER LDA CMDLU IF AN INTERACTIVE LU, SET THE LDB IACOM 1 MEANS INTERACTIVE SZB,RSS CLA,INA DEFAULT TO LU 1 STA ERRLU ERROR LU * JSB FOPEN GO OPEN FILE DEF *+3 DEF IPDCB DEF PARS5 LDA FMRR SSA,RSS ANY ERRORS? JMP STRT3 NO CMA,INA SET POS. FOR CONVERT STA FMRR JSB CNUMD GET DEC ERROR CODE DEF *+3 DEF FMRR DEF FERMA ERROR MESSAGE ADDR LDA FERMA+2 GET LAST TWO CHARACTERS STA FERMA * JSB EXEC SEND ERROR TO OPERATOR LU DEF *+5 DEF P2 DEF ERRLU DEF FILEA+1 DEF B7 STRT4 CLA SET BACK TO LU 1 STA CMDLU STA PARMA STA IACOM INA STA ERRLU JMP STRT2 START OVER * INVLU JSB EXEC INVALID INPUT LU SPECIFIED DEF *+5 ISSUE ERROR MESSAGE TO LU 1 (NOW DEF P2 DEFAULT ERRLU) DEF P1 DEF GNR20 DEF P5 JMP STRT4 SET UP THE INPUT LU * STRT3 CCA ADA STKAD RESET STACK POINTER. STA P:TR CLA JSB PUSH GO PLACE ON STACK JSB GTERM ERROR RETURN - CAN'T HAPPEN! * LDA ERRLU WE'RE GOING TO OVERLAY 3 WORDS CMA,INA LDB DSTRT AT STRT3 - IN ORDER TO SETUP JSB CONVD THE ERROR COMMAND: LDA STRT3+2 "TR,ERRLU" STA TRCOM+2 STORE THE ASCII LU * LDA CPLIM NEGATE HIGH END OF CURRENT CMA,INA PAGE LINK LIMIT IMAGE STA CPLIM AREA SKP * ALLOCATE SPACE FOR FIX-UP,IDENT, AND LST TABLES: * * DETERMINE HOW MUCH CORE REMAINS BEYOND LONGEST * SEGMENT, DIVIDE INTO 3 BLOCKS FOR IN-CORE CHUNKS * OF TABLES, AND ALLOCATE DISC SPACE FOR TABLE STORAGE. * AVAILABLE CORE MUST BE AT LEAST 512 WORDS. * THE LST IS ALLOCATED LAST TO USE WASTED CORE FROM * FIXUP & IDENT BLOCKS. * LDA 1657B ADDR OF KEYWORD TABLE. STA TEMP1 TRY LDB TEMP1,I GET NEXT ID SEG ADDRESS SZB END OF TABLE IF ZERO JMP TRYY LDA ERR38 SEGMENT 3'S ID SEGMENT IS MISSING JMP NROOM+1 SEND ERROR & TERMINATE * TRYY ADB P12 GET TO NAME. LDA B,I GET FIRST TWO CHAR. * * DYNAMICALLY DETERMINE LONGEST SEGMENT * CPA AS.RT "RTGN3" = LONGEST SEGMENT. RSS MATCH. JMP NEXT INB LDA B,I GET SECOND TWO CHAR. CPA AS.GN RSS MATCH. JMP NEXT INB LDA B,I AND M7400 CPA AS.3 "3". JMP MATCH NEXT ISZ TEMP1 JMP TRY * MATCH LDA TEMP1,I GET ADDR OF IDSEG. JSB COR.A GET TO LWAM OF SEGMENT. INA GET FWAM. STA FWAM SAVE AS FIRST WORD AVAIL. MEM. CMA,INA GET SIZE OF UNDECLARED CORE. ADA LWAM LWAM SET BY RTE. STA NEXT LDA N512 MAKE SURE ENOUGH CORE. ADA NEXT AT LEAST 512 WORDS WORTH SSA JMNdP NROOM NO ROOM. BAIL OUT. LDA NEXT CLB DIV P4 ALLOCATE AVAILABLE MEMORY: STA TEMP1 1/4 TH FOR FIXUP TABLE, AND CMA,INA 3/8 TH'S EACH FOR IDENT AND LST ADA NEXT ARS DIVIDE BY TWO STA TEMP2 * * SET UP FIX-UP TABLE. LDA TEMP1 JSB TTRUN TRUNCATE TO TRACK SIZE SETF0 CLB DIV SECWD SEE HOW MANY SECTORS FIT. STA FX.#S SAVE # SECT PER FIX-UP BLOCK. MPY SECWD CONVERT TO WORDS FOR LENGTH. STA LFIX OF DISC READS AND WRITES. CLB BLOCK MULTIPLE MUST END ON A TRACK LDA P6144 BOUNDARY AS WELL DIV LFIX SZB,RSS JMP SETF1 OK LDA LFIX ADA N128 DECREMENT SIZE BY ONE SECTOR JMP SETF0 * TTRUN NOP CLB TRUNCATE BLOCK SIZE DIV P6144 IF GREATER THAN 6144(#WORD/TRACK) SZA LDB P6144 TO ONE TRACK STB A JMP TTRUN,I * SETF1 LDA LFIX CLB GET # 4 WORD ENTRIES IN DIV P4 THE BLOCK. STA EFIX SAVE # ENTRIES IN BLOCK. * LDA FWAM INITIALIZE FIX-UP POINTERS: STA BFIX FIRST ENTRY, CLA STA PFIX # ENTRIES USED, STA TFIX CURRENT ENTRY INDEX. STA B.F 1ST ENTRY NOW IN CORE. * * SET UP IDENT TABLE. THIS ONE HAS AN OFFSET OF +10. * LDA BFIX SET FWA IDENT AREA AT ADA LFIX STA BIDNT END OF FIX-UP AREA. LDA TEMP2 GET BLOCK JSB TTRUN TRUNCATE BLOCK SIZE IF NECESSARY SETI0 CLB DIV SECWD SEE HOW MANY SECTORS FIT STA ID.#S MPY SECWD CONVERT TO WORDS FOR LENGTH STA LIDNT CLB BLOCK MULTIPLE MUST END ON LDA P6144 TRACK BOUNDARY AS WELL DIV LIDNT SZB,RSS JMP SETI1 OK LDA LIDNT DECREMENT BLOCK ADA N128 SIZE BY ONE SECTOR JMP SETI0 SETI1 LDA LIDNT G CLB GET # 16 WORD ENTRIES IN DIV P16 THE BLOCK. STA EIDNT SAVE # ENTRIES IN BLOCK. * LDA P10 INITIALIZE IDENT POINTERS: STA PIDNT # ENTRIES USED +10, STA TIDNT CURRENT ENTRY INDEX, STA B.I 1ST ENTRY INDEX NOW IN CORE. * * SET UP LOADER SYMBOL TABLE (LST). * LDA BIDNT SET FWA LST AREA AT END ADA LIDNT STA BLST OF IDENT AREA. CMA,INA USE ALL OF REMAINING ADA LWAM AVAILABLE MEMORY. JSB TTRUN TRUNCATE BLOCK SIZE IF NECESSARY SETL0 CLB DIV SECWD SEE HOW MANY SECTORS FIT. STA LS.#S SAVE # SECT PER LST BLOCK. MPY SECWD CONVERT TO WORDS FOR LENGTH STA LLST OF DISC READS AND WRITES. CLB LDA P6144 BLOCK MULTIPLE DIV LLST MUST END ON TRACK SZB,RSS BOUNDARY AS WELL JMP SETL1 LDA LLST ADA N128 DECREMENT BY ONE SECTOR JMP SETL0 SETL1 LDA LLST CLB GET # 5 WORD ENTRIES IN DIV P5 THE BLOCK. STA ELST SAVE # ENTRIES. * CLA INITIALIZE LST POINTERS: STA PLST # ENTRIES USED, STA TLST CURRENT ENTRY INDEX, STA B.L 1ST ENTRY NOW IN CORE. SKP * * ALLOCATE DISC SPACE FOR FIX-UP, IDENT, LST. * LDA FIX#T GET # FIX-UP TRACKS, ADA IDT#T ADD # IDENT TRACKS, ADA LST#T ADD # LST TRACKS. IOR MSIGN SET NO SUSPEND BIT STA NEXT TOTAL # TRACKS TO ALLOCATE. * GETTR JSB EXEC DEF *+6 DEF P4 DEF NEXT # TRACKS REQUESTED. DEF FTRKA RETURNED: FIRST TRACK. DEF DSKLU RETURNED: WHICH DISC. DEF SECTK RETURNED: SECTORS/TRACK. * LDA FTRKA GET FIRST TRACK # SSA,RSS REQUEST GRANTED? JMP ALLOC YES JSB SPACE JSB EXEC NO, TELL USER OF PROBLEM DEF *+5 DEF vP2 DEF ERRLU DEF TRMSG DEF P14 "GENERATOR WAITING FOR TRACKS" * LDA NEXT TAKE OUT NO-SUSPEND BIT XOR MSIGN STA NEXT SUSPEND UNTIL TRACKS ARE AVAILABLE JMP GETTR * * SETB NOP CLE,ELA MPY BY 2 (64-WORD SECTORS) CLB DIV SECTK FIND MULT. FACTOR PER WRITE SZB,RSS IF A TRACK MULTIPLE LDB P96 THEN SET IT SO JMP SETB,I # 64-WORD SECTORS PER BLOCK * * ALLOC LDA FX.#S GET # 128 WORD SECTORS. JSB SETB STB FX.#S SET # 64 WORD SECTORS PER BLOCK. LDA ID.#S JSB SETB STB ID.#S LDA LS.#S JSB SETB STB LS.#S * LDA FTRKA STA FX.BT FIX-UP START TRACK. STA FX.LT FIX-UP TRACK LAST READ. ADA FIX#T STA FX.ET FIX-UP LAST TRACK +1. STA ID.BT IDENT START TRACK. STA ID.LT IDENT TRACK LAST READ. ADA IDT#T STA ID.ET IDENT LAST TRACK +1. STA LS.BT LST START TRACK. STA LS.LT LST TRACK LAST READ. ADA LST#T STA LS.ET LST LAST TRACK +1. CLA STA FX.LS STA ID.LS STA LS.LS SKP * * GET NAME, SECUR, LABEL OF LIST FILE. * FNAME LDA P10 "LIST FILE?" LDB LSTFI JSB RNAME GET LIST FILE JSB CRETF GO CREATE THE FILE DEF *+5 DEF LFDCB DEF P64 DEF P3 DEF ZERO JSB CHFIL CHECK FILE STATUS JMP FNAME ERROR ISZ LFERR 1=> ACKNOWLEDGE LIST FILE ERRORS * DLD PARS2 WAS NAME A FILE OR LU? CPA P1 RSS JMP FLNM0 FILE NAME, SO DEFAULT TO LSTLU=0 STB LSTLU SAVE THE LU - MAY NOT BE INTERACTIVE JSB EXEC DETERMINE THE DEVICE TYPE DEF *+5 DEF P13 DEF LSTLU DEF EQT5 DEF FNAME SAVES A LINK TO EQT4!! * CLB LDA FNAME IF BIT BUCKET WAS SPECIFIEZD, AND M77 DON'T MISTAKE IT FOR A TYPE SZA,RSS 00 DEVICE JMP SETIA * LDB LSTLU LDA EQT5 INTERACTIVE DEVICES ARE TYPE 0, OR ALF,ALF TYPE 5, SUBCHANNEL 0 AND M77 STA EQT5 CPA P5 JSB LUSUB GET TYPE 5 SUBCHANNEL CLB SZA,RSS INB SET INTERACTIVE SETIA STB IALST 0=NOT INTERACTIVE, 1=IT IS * SZB IF ITS INTERACTIVE JMP EC? THEN DON'T LOCK LULOC JSB LURQ DEF *+4 DEF IOPTN DEF LSTLU DEF P1 * SZA,RSS WAS IT SUCCESSFUL? JMP EC? YES JSB SPACE JSB EXEC DEF *+5 DEF P2 DEF ERRLU DEF LUMSG DEF P17 "GENERATOR WAITING ON LIST LU LOCK" * LDA IOPTN SET THE WAIT BIT FOR NEXT CALL XOR MSIGN STA IOPTN JMP LULOC * * RE-OPEN THE LIST FILE WITH A NON-EXCLUSIVE OPEN SO IT CAN * BE EXAMINED CONCURRENT WITH GENERATION * FLNM0 JSB OPEN A CALL TO OPEN AN ALREADY DEF *+7 OPEN FILE WILL RESULT DEF LFDCB IN IT BEING CLOSED AND DEF FMRR RE-OPENED WITH THE OPTIONS DEF PARS2+1 DEF P1 DEF PARS3+1 DEF PARS4+1 JSB CHFIL JMP FLNM0 * * ASK WHETHER ECHO IS DESIRED * AND OPEN IT IF SO * EC? LDA P5 LDB ECHOI JSB YE?NO JMP EC? INVALID REPLY STA ECHON 1 FOR YES, 0 FOR NO * CLA,INA SET UP FOR CREATION STA PARS2 OF DUMMY DCB IN TYP0 LDA ERRLU STA PARS2+1 LU ALREADY DETERMINED JSB FOPEN DEF *+3 DEF ECDCB DEF RWSUB * JSB CHFIL JSB GTERM RSS SKIP * * GET SIZE, NAME, SECUR, LABEL OF CORE-IMAGE RTE OUTPUT FILE. * JSB INERR INPUT ERROR EST# JSB SPACE LDA P30 LDB FISIZ "EST. # TRACKS IN OUTPUT FILE?" JSB READ LDA N3 =NLH JSB DOCON GET BINARY. JMP EST# ERROR. TRY AGAIN. STA NEXT ADA MIN10 CHECK FOR 10 TRACKS MIN. SSA JMP EST#-1 LDA NEXT MPY P48 GET # BLOCKS. SSA IF NEGATIVE THEN RETRY JMP EST#-1 STA NEXT * FLNAM JSB SPACE LDA P17 LDB OUTFI JSB RNAME "OUTPUT FILE NAME?" * LDA PARS2 CHECK FOR NUMERIC OR NULL ANSWER CMA,INA,SZA IF NULL(TYPE 0) INA,SZA,RSS OR NUMERIC(TYPE 1) RSS JMP FLNMC THEN ITS A LU JSB INERR JMP FLNAM * FLNMC JSB CRETF GO CREATE THE OUTPUT FILE DEF *+5 DEF ABDCB DEF NEXT # BLOCKS. DEF P1 TYPE 1 FILE. DEF ZERO JSB CHFIL CHECK FILE ERROR JMP FLNAM RETRY...ERROR * * GET TARGET DISK TYPE * JSB SPACE RSS JSB INERR INPUT ERROR TO "TARGET DISK?" STRT0 LDA P12 TO GET THE INITIAL SEGMENT LDB MES00 DEPENDS ON THE DISK TYPE JSB READ MES00: "TARGET DISK?" LDA N4 WN JSB DOCON CONVERT 4 DEC DIGITS JMP STRT0 ERROR - TRY AGAIN CLB,INB CPA P7900 CHECK FOR A CLB 7900 CPA P7905 OR A 7905 CCB CPA P7906 OR A 7906 CCB CPA P7920 OR A 7920 CCB STB DTYPE 0=7900, -1=7905,7920 SSB JMP STRT5 SZB JMP STRT0-1 NONE OF THE ABOVE * JSB SWAP SWAP IN SEGMENT 1 FOR 7900 DEC 1 DISK DEPENDENT SUBROUTINES LDA DLRM1 JMP .NM * STRT5 JSB SWAP SWAP IN SEGMENT 7 FOR 7905 DEC 7 DISK DEPENDENT SUBROUTINES LDA DLRM7 * * CREATE TEMPORARY FILE FOR MODIFIED NAM RECORDS. * .NM STA DLRMA JSB CREAT CREATE @.NM.@ FILE NAME. DEF *+6 DEF NMDCB DEF FMRR DEF .NM. DEF P64 DEF P5 * LDA FMRR DUPLICATE NAME? CPA N2 RSS YES JMP .NMCH CHECK FOR OTHER ERRORS * JSB OPEN OPEN THE FILE(OLD) DEF *+4 DEF NMDCB DEF FMRR DEF .NM. * JSB CLOSE NOW CLOSE IT WITH TRUNCATE DEF *+4 TO 0 DEF NMDCB DEF FMRR DEF P64 JMP .NM+1 NOW RETRY THE CREATE * .NMCH JSB CHFIL OTHER ERRORS JSB GTERM YES, SO ABORT SKP * * THE FOLLOWING MESSAGES ARE PRINTED DURING THE INITIALIZATION * PHASE, WITH THE SPECIFICATIONS FOR EACH VALID RESONSE. * * * MESSAGE RESPONSE * * * TBG CHNL? ENTER 2 OCTAL DIGITS * * PRIV. INT. CARD ADDR? ENTER 2 OCTAL DIGITS * * SWAPPING? ENTER YES OR NO * * LWA MEM? ENTER 5 OCTAL DIGITS * * JSB SPACE GET A NEW LDA ADBP GET ADDRSS OF DUMMY BASE PAGE CMA,INA MAKE NEG STA NADBP SAVE LDB D$REN ENTER .ZRNT IN THE LST JSB LSTE LDA RSS SET IT UP AS STA .LST5,I A REPLACE WITH RSS LDA P4 STA ʵ.LST4,I ENT CLA STA $RNT INDEX IS 0 * LDB D$PRV DO SAME FOR .ZPRV JSB LSTE LDA P4 STA .LST4,I LDA RSS STA .LST5,I CLA,INA STA $PRV SET FLAG FOR LOAD PHASE * LDB D$CLS ENTER $CLAS IN JSB LSTE THE SYMBOL TABLE LDB D$LUS NOW ENTER $LUSW JSB LSTE LDB D$RNT AND $RNTB JSB LSTE LDB $LUAV AND $LUAV JSB LSTE * LDB DTYPE SET UP THE DISC SPECIFICATIONS. SSB JMP SPEC5 JSB DSETU 7900 RSS RSS * SPEC5 JSB DSET5 7905 * * SET TIME BASE GENERATOR CHANNEL * JSB SPACE NEW LINE CHNLT LDA P9 LDB MES30 MES30 = ADDR: TBG CHNL? JSB READ PRINT MESSAGE, GET REPLY LDA P2 SET FOR 2 OCTAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP CHNLT REPEAT INPUT STA TBCHN SET TBG CHANNEL NO. * * GET PRIV. INT. CARD ADDR. * JSB SPACE NEW LINE DUMY LDA P22 LDB MES41 MES41 = ADDR: PRIV. INT. CARD? JSB READ PRINT MESSAGE, GET REPLY LDA P2 SET FOR 2 OCTAL DIGITS INPUT JSB DOCON GET DIGITS JMP DUMY -ERROR, REPEAT INPUT. STA PIOC SET ADDR. OF DUMMY CARD. IFN *** BEGIN NON-MEU CODE *** * * SET SWAPPING FLAG * * LDA "FG" GET ASCII 'FG' AND GO JSB SWAP? ASK 'FG SWAPPING?' STA SWAPF SAVE THE FLAG BIT * LDA "BG" NOW THE SAME FOR BACKGROUND JSB SWAP? RAL POSITION THE BIT IOR SWAPF COMBINE WITH 'FG' FLAG STA SWAPF AND SAVE IT **** END NON-MEU CODE **** XIF IFZ ***** BEGIN MEU CODE ***** LDA P3 SET BOTH FG AND STA SWAPF BG SWAP FLAGS ALWAYS. SPC 1 JSB SPACE MAPC? LDA MLMP ASK USER IF DRIVERS ACCESS COMMON, IF SO, VM LDB MSMP. SET FLAG FOR SYSTEM TO MAP COMMON JSB YE?NO JMP MAPC? ASK AGAIN IF BAD ANSWER STA MAPFG SAVE 1 IF YES, 0 IF NO ****** END MEU CODE ****** XIF LDA "FG" NOW ASK JSB LOCK? 'FG CORE LOCK?' RAL,RAL ROTATE TO PROPER BIT POSITION IOR SWAPF COMBINE STA SWAPF AND SAVE * LDA "BG" NOW DO SAME FOR BACKGROUND JSB LOCK? ALF,RAR IOR SWAPF COMBINE STA SWAPF SAVE THE WORD. * SWPDL JSB SPACE LDA P11 GET THE LDB MES33 SWAP DELAY JSB READ LDA N3 CONVERT JSB DOCON TO BINARY FROM DECIMAL JMP SWPDL ERROR TRY AGAIN * AND M7400 IF > 256 SZA,RSS THEN JMP SWPOK * JSB INERR BITCH AND JMP SWPDL TRY AGAIN * SWPOK LDA OCTNO COMBINE ALF,ALF WITH SWAP IOR SWAPF FLAG STA SWAPF AND SAVE IFN *** BEGIN NON-MEU CODE *** * * SET LAST WORD AVAIL MEMORY * JSB SPACE NEW LINE SMLWA LDA P8 LDB MESS3 MESS3 = ADDR: LWA MEM? JSB READ PRINT MESSAGE, GET REPLY LDA P5 SET FOR 5 OCTAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP SMLWA REPEAT INPUT STA LWASM SET LWA MEM FOR SYSTEM **** END NON-MEU CODE **** XIF * IFZ ***** BEGIN MEU CODE ***** JSB SPACE SKIP A LINE MEMSZ LDA P9 THEN ASK USER LDB MESS3 FOR NUMBER OF PAGES JSB READ OF MAIN MEMORY LDA N4 GET 4 DECIMAL JSB DOCON DIGITS OR TRY AGAIN JMP MEMSZ IF ERROR STA NUMPG SPC 1 * DETERMINE LAST ADDR AVAILABLE TO RESIDENT SYSTEM * SPC 1 LDB P32 IF #PAGES IS CMB OVER 32 THEN ADB A USE 32, ELSE USE SSB,RSS WHAT HE SAID LDA P32 SPC 1 LSL 10 MULT BY 1024 AND SUBTRACT ADA N193 193 AND SAVE AS LAST STA LWASM USEABLE MEM WORD ****** END MEU CODE ****** XIF LDB DTYPE FINISH THE DISC SET UP. SSB JMP SET05 JSB PTBOT 7900 BOOT RSS * SET05 JSB PTBT5 7905 BOOT * JMP SEGCN SPC 5 * * NOT ENOUGH CORE BEYOND LONGEST SEGMENT * FOR LST, IDENT, FIXUP TABLES. * NROOM LDA ERR02 JSB GN.ER JSB GTERM * ERR02 ASC 1,02 ERR38 ASC 1,38 SEGMENT 3'S ID-SEGMENT MISSING SKP * * OVERLAID CONSTANTS. * FWAM NOP CALCULATED AT RUNTIME LWAM EQU 1777B END OF CORE * N4 DEC -4 MIN10 DEC -10 N128 DEC -128 N512 DEC -512 N193 DEC -193 P1 DEC 1 P9 DEC 9 P11 DEC 11 P16 DEC 16 P17 DEC 17 P22 DEC 22 P30 DEC 30 P32 DEC 32 P48 DEC 48 P96 DEC 96 P6144 DEC 6144 #WORDS PER TRACK P7900 DEC 7900 P7905 DEC 7905 P7906 DEC 7906 P7920 DEC 7920 MSIGN OCT 100000 IOPTN OCT 1 FTRKA NOP RWSUB OCT 400 "FG" ASC 1,FG "BG" ASC 1,BG AS.RT ASC 1,RT IFN AS.GN ASC 1,2G XIF IFZ AS.GN ASC 1,3G XIF AS.3 OCT 31400 LONGEST SEG = RTGN3. TEMP1 NOP TEMP2 NOP DSTRT DEF STRT3 * D$REN DEF *+1 ASC 3,.ZRNT D$PRV DEF *+1 ASC 3,.ZPRV D$CLS DEF *+1 ASC 3,$CLAS D$LUS DEF *+1 ASC 3,$LUSW D$RNT DEF *+1 ASC 3,$RNTB $LUAV DEF *+1 ASC 3,$LUAV * TRMSG ASC 14,GENERATOR WAITING FOR TRACKS LUMSG ASC 17,GENERATOR WAITING ON LIST LU LOCK MES00 DEF *+1 ASC 6,TARGET DISK? LSTFI DEF *+1 ASC 5,LIST FILE? OUTFI DEF *+1 ASC 9,OUTPUT FILE NAME? ECHOI DEF *+1 ASC 3,ECHO? FISIZ DEF *+1 ASC 15,EST. # TRACKS IN OUTPUT FILE? MES30 DEF *+1 ASC 5,TBG CHNL? MES41 DEF *+1 ASC 11,PRIV. INT. CARD ADDR? IFN **** BEGIN NON-DMS CODE **** MES31 DEF *+1 ASC 6,FG SWAPPING? **** END NON-DMS CODE **** XIF MES32 DEF *+1 ASC 7,FG CORE LOCK? MES33 DEF *+1 ASC 6,SWAP DELAY? MESS3 DEF *+1 IFN ASC 5,LWA MEM? XIF IFZ **** BEGIN DMS CODE **** ASC 5,MEM SIZE? MSMP. DEF *+1 ASC 14,PRIV. DRIVERS ACCESS COMMON? MLMP DEC 28 **** END DMS CODE **** XIF GNR20 ASC 5,GEN ERR 20 HED RTGEN SUBROUTINES. IFN **** BEGIN NON-DMS CODE **** * * * SWAP? ASKS THE 'XX SWAPPING?' QUESTION AND RETURNS * THE ANALIZED ANSWER. * * CALLING SEQUENCE: * LDA "FG" OR "BG" * JSB SWAP? * RETURN A=1 IF YES, 0 IF NO. * SWAP? NOP STA MES31,I SET THE 'FG' OR 'BG' JSB SPACE SPACE TO MAKE IT LOOK NEAT FSWAP LDA P12 GET COUNT LDB MES31 GET THE MESSAGE ADDRESS JSB YE?NO ASK AND ANALIZE THE RESPONCE JMP FSWAP BAD NEWS, TRY AGAIN * JMP SWAP?,I EXIT **** END NON-DMS CODE **** XIF SPC 5 * * * LOCK? ASKS AND ANALIZES THE 'XX CORE LOCK?' QUESTION. * * CALLING SEQUENCE: * * LDA "FG" OR "BG" * JSB LOCK? * RETURN A=1 IF YES, 0 IF NO. * * LOCK? NOP STA MES32,I SET THE 'FG' OF 'BG' IN MESSAGE JSB SPACE MAKE IT LOOK NEAT. LOCK1 LDA P13 GET THE LENGTH LDB MES32 GET MESSAGE ADDRESS JSB YE?NO GO ASK AND GET ANSWER JMP LOCK1 ERROR SO RETRY * JMP LOCK?,I RETURN SKP * YE?NO ROUTINE SENDS A QUESTION TO THE TTY * AND READS AND ANALIZES THE RESPONSE * * CALLING SEQUENCE: * * LDA MESSAGE CHARACTER COUNT * LDB MESSAGE ADDRESS * JSB YE?NO * JMP ERROR * NORMAL RETURN A=1 FOR YES, 0 FOR NO. * YE?NO NOP JSB READ GO PRINT MESSAGE AND GET ANSWER JSB YE/NO ANALIZE THE ANSWER JMP YE?NO,I ERROR EXIT * CLA,RSS NO RETURN CLA,INA YES RETURN ISZ YE?NO STEP RETURN ADDRESS f JMP YE?NO,I RETURN TO CALLER. SPC 5 * BSS 2000B+DBP-* RESERVE 1K FOR DUMMY BASE PAGE. * SPC 5 *********************************************** * * * END OF AREA OVERLAID FOR DUMMY BASE PAGE. * * * *********************************************** SKP DSKAB DEC 2 INITIAL DISC ADDR FOR SYS CODE. * DBPO EQU DBP ADBP DEF DBPO ADDR OF DUMMY BASE PAGE NADBP NOP NEG OF RTGN START * * CURRENT PAGE LINKAGE IMAGE AREA. * TBLNK BSS 1 BSS 2 LRBP BSS 1 AREA 1: CR SYSTEM BP URBP BSS 1 IRBP BSS 1 LBBP BSS 1 AREA 2: BG RES BASE PAGE. UBBP BSS 1 IBBP BSS 1 CUBP BSS 1 AREA 3: CURRENT PROG BP. UCUBP BSS 1 ICUBP BSS 1 * BSS 600 CURRENT PAGE LINKAGE IMAGE AREA. * CPLIM DEF * END OF CP LINK AREA. CUBPA DEF CUBP ADDR OF CURRENT BP SPECS. SPC 2 FWSCA EQU 1647B EXTEND COMM AREA FOR I-REG PTR LWSBP ABS FWSCA LWA BP LINK AREA +1 EOBP ABS -FWSCA #IREG DEC 2 SAVE 2 I-REGS NLCOM ABS FWSCA-2000B SPC 2 P8 DEC 8 TTIME BSS 1 TIME1 BSS 1 MULR BSS 1 * $RNT BSS 1 INDEX OF $RENT ENTRY $PRV BSS 1 INDEX OF $PRIV ENTRY * CURAL NOP CURRENT LBUF ADDRESS. CPL2 NOP ADDR OF HIGH CURRENT PAGE LINK SPECS. PPREL NOP INITIAL PROG RELOC ADDR. * TBCHN NOP TIME BASE GENERATOR CHANNEL LWASM NOP LAST WORD SYSTEM AVAILABLE MEMORY PIOC NOP ADDR OF PRIVILEGED I/0 CARD SWAPF NOP SWAPPING FLAG = 0/1 = NO/YES DTYPE NOP TARGET DISK = 0/-1 = 7900/7905 LBUF BSS 64 LOAD BUFFER TBUF BSS 4 TEMP BUFFER SKP * * SEGMENT LOADING CONTROL. * ************************************** * SEGCN JSB SWAP DO PROG INPUT PHASE. P2 DEC 2 JSB INPUT GO TO SEGMENT. * FWBPL JSB SWAP GO GENERATE RTERu! P3 DEC 3 JMP FWENT SPC 5 * * CONTROL ROUTINES FOR SEGMENT CALLS TO SUBROUTINES * IN ANOTHER SEGMENT. * LLOAD NOP IN-CORE RTGN3 ISSUED CALL. JSB SWAP ROLL IN RTGN4. P4 DEC 4 * JSB NLOAD CALL "LOAD" IN RTGN4. * JSB SWAP BRING BACK RTGN3. DEC 3 JMP LLOAD,I RETURN. SPC 3 LOADS NOP IN-CORE RTGN3 ISSUED CALL. JSB SWAP ROLL IN RTGN4. DEC 4 * JSB LODER CALL "LOADS" IN RTGN4. * JSB SWAP BRING BACK RTGN3. DEC 3 JMP LOADS,I RETURN. SPC 3 GENIO NOP IN-CORE RTGN3 ISSUED CALL. JSB SWAP ROLL IN RTGN5. P5 DEC 5 * JSB GNIO CALL "GENIO" IN RTGN5. * JSB SWAP BRING BACK RTGN3. DEC 3 JMP GENIO,I RETURN. SPC 3 IFZ ******* BEGIN DMS CODE ******** PARTD NOP IN-CORE RTGN3 ISSUED CALL JSB SWAP ROLL IN RTGN6 DEC 6 * JSB PARTS DO PARTITION DEFINITION * JSB SWAP BRING BACK RTGN3 DEC 3 JMP PARTD,I ****** END DMS CODE ****** XIF SPC 3 DSTBL NOP IN-CORE RTGN5 ISSUED CALL. LDB DTYPE DETERMINE DISK TYPE SSB JMP D05 * JSB SWAP ROLL IN RTGN1(7900) DEC 1 JSB DSTB CALL "DSTBL" IN RTGN1. JMP BACK5 * D05 JSB SWAP ROLL IN RTGN7(7905) DEC 7 JSB DSTB5 CALL "DSTBL" IN RTGN7 * * BACK5 JSB SWAP BRING BACK RTGEN5. DEC 5 JMP DSTBL,I RETURN. SPC 3 FSECT NOP IN-CORE RTGN3 ISSUED CALL. LDB DTYPE DETERMINE DISK TYPE SSB JMP F05 * JSB SWAP ROLL IN RTGN1 (7900) DEC 1 JSB FSEC CALL "FSECT" IN RTGN1. JMP BK3 * F05 JSB SWAP ROLL IN RTGN7 (7905) DEC 7 JSB FSEC5 CALL "FSECT" IN RTGN7 * BK3 JSB SWAP BRING BACK RTGN3. D DEC 3 JMP FSECT,I RETURN. SPC 4 * * ROUTINE TO SWAP SEGMENTS * CALLING SEQUENCE * JSB SWAP * DEC SEG # * A AND B REG SAVED * SWAP NOP DST ABREG SAVE REGISTERS. CCA ADA SWAP,I GET SEG NUMBER. MPY P3 ADA RTGMA STA SWAPA JSB EXEC ROLL IN SEGMENT DEF *+3 - IT WILL COME BACK TO SWRET DEF P8 AFTER EXECUTING FRONT END CODE. SWAPA NOP SWRET ISZ SWAP GET RETURN ADDRESS DLD ABREG RESTORE REGISTERS. JMP SWAP,I AND RETURN SPC 1 ABREG BSS 2 * * THE FOLLOWING ORDER MUST NOT BE CHANGED * RTGMA DEF *+1 IFN ASC 3,RT2G1 7900 DISC SUBR. SEGMENT. ASC 3,RT2G2 PROG-PARAM INPUT PHASE SEGMENT. ASC 3,RT2G3 LOADING CONTROL SEGMENT. ASC 3,RT2G4 LOADER SEGMENT. ASC 3,RT2G5 I-O TABLE GENERATION SEGMENT. ASC 3, ASC 3,RT2G7 7905 DISK SUBR. SEGMENT . XIF IFZ ASC 3,RT3G1 7900 DISC SUBR. SEGMENT ASC 3,RT3G2 PRO-PARAM INPUT PHASE SEGMENT ASC 3,RT3G3 LOADING CONTROL SEGMENT ASC 3,RT3G4 LOADER SEGMENT ASC 3,RT3G5 I/O TABLE GENERATION SEGMENT ASC 3,RT3G6 PARTITION DEFINITION SEGMENT ASC 3,RT3G7 7905 DISC SUBR. SEGMENT XIF SKP * * CONVERT A TO ASCII AT B * * THE CONVD SUBROUTINE CONVERTS THE CONTENTS OF A * INTO ASCII (DECIMAL OR OCTAL) AT THE LOCATION SPECIFIED * BY B. THE CONVERTED RESULT REQUIRES 3 WORDS, AND IS * IN THE FORMAT: XXXXX, WITH A SPACE IN THE FIRST POSITION. * * CALLING SEQUENCE: * A = NO. TO BE CONVERTED. IF THE SIGN OF A IS POS., * THE CONVERSION IS TO BE IN OCTAL; IF NEGATIVE, * IN DECIMAL. * B = ADDRESS OF CORE LOCATION FOR CONVERTED RESULT * JSB CONVD * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * CONVD NOP STB CURAT SET MESSAGE ADDRESS h LDB OPWRS GET ADDR OF OCTAL POWERS SSA SKIP IF OCTAL CONV REQUIRED LDB DPWRS GET ADDRESS OF DECIMAL POWERS STB RANAD SET POWER RANGE ADDRESS SSA,RSS SKIP IF NEGATIVE (DECIMAL) CMA,INA CONVERT NUMBER TO NEGATIVE STA B PUT NUMBER IN B (REMAINDER) LDA N2 STA TCNT SET CONVERSION COUNTER JSB GETD GET FIRST DIGIT IOR UBLNK ADD BLANK TO FIRST CHAR STA CURAT,I SAVE FIRST BLANK, CHARACTER ISZ CURAT INCR MESSAGE ADDRESS NEXTD JSB GETD GET NEXT DIGIT ALF,ALF ROTATE TO UPPER STA CURAT,I SAVE UPPER CHARACTER JSB GETD GET NEXT DIGIT IOR CURAT,I ADD UPPER CHAR STA CURAT,I SAVE NEXT 2 CHARACTERS ISZ CURAT INCR MESSAGE ADDRESS ISZ TCNT SKIP - 5 DIGITS IN JMP NEXTD NO - CONTINUE WITH NEXT DIGIT JMP CONVD,I YES - RETURN * OPWRS DEF *+1 OCT 10000 OCT 1000 OCT 100 OCT 10 OCT 1 * DPWRS DEF *+1 DEC 10000 DEC 1000 DEC 100 P10 DEC 10 DEC 1 * N2 DEC -2 TCNT NOP SPC 5 * * GET DIGIT FOR CONVD * * GETD PROVIDES THE ASCII CHARACTERS FOR CONVD. * * CALLING SEQUENCE: * A = IGNORED * B = REMAINDER * JSB GETD * * RETURN: * A = ASCII DIGIT * B = IGNORED * GETD NOP CLA INCRA ADB RANAD,I ADD POWER CMB,SSB,INB,SZB SKIP - TRY NEXT HIGHER DIGIT JMP GET2 DIGIT FOUND INA INCR DIGIT CMB,INB RESTORE REMAINDER TO NEGATIVE JMP INCRA TRY HIGHER DIGIT GET2 ADB RANAD,I ADD POWER CMB,INB RESTORE REMAINDER ISZ RANAD INCR POWER LIST ADDRESS IOR M60 CONVERT TO ASCII JMP GETD,I RETURN WITH DIGIT IN A * M60 OCT 60 RANAD NOP SKP * * SET UP LNK AREA * * LNKA, LNKS, AND LNKX MANAGE THE LINK AREA. * THIS AREA IS COMPOSED OF TRIPLETS AND LINK AREA * IMAGES AS FOLLOWS: * * WORD1 THE ACTUAL CORE ADDRESS OF THE LINK AREA * WORD2 THE ACTUAL CORE ADDRESS OF THE LAST WORD+1 OF THE AREA * WORD3 THE ADDRESS OF THE LOADRS IMAGE OF THE AREA * * THE FIRST THREE ENTRIES ARE FOR BASE PAGE AS FOLLOWS: * * AREA 1 THE CORE RESIDENT SYSTEM BASE PAGE AREA * AREA 2 THE BACK GROUND CORE RESIDENT AREA * AREA 3 THE CURRENT PROGRAMS BASE PAGE AREA * * FOR THESE AREA THE IMAGE IS IN THE DUMMY BASE PAGE * FOR ALL OTHER ENTRIES (I.E. FOR CURRENT PAGE LINK AREAS) * THE IMAGE FOLLOWS THE THREE WORD DEFINITION OF THE AREA. * * IN ALL CASES THE LAST DEFINED AREA IS THE ONE THAT HAS A * WORD1 ADDRESS OF CPL2, WHICH IS USUALLY THE HIGH * CURRENT PAGE LINK AREA FOR THE CURRENT PROGRAM * * LNKX INITILIZES THE SCANNING OF THE LINKAGE AREA * LNK SETS UP LNK1, LNK2, LNK3 FOR THE NEXT ENTRY * P+1 RETURN INDICATING THERE IS NO NEXT ONE. * P+2 INDICATING THAT THE SET UP WAS DONE. * * LNKS SETS UP LNK1, LNK2, LNK3 GIVEN THAT THE FIRST WORD ADDRESS * IS KNOWN (AND PASSED IN THE A REGISTER) * LNKX NOP LDA TLNK GET INITIAL ADDRESS STA LNK1 SET IN LNK1 JMP LNKX,I RETURN SPC 3 LNK NOP LDA LNK1 GET CURRENT ADDRESS CPA CPL2 IF LAST ENTRY JMP LNK,I RETURN, END OF LST * LDA A,I GET THE ACTUAL ADDRESS AND M0760 ISOLATE THE PAGE ADDRESS SZA,RSS IF BASE PAGE DO THE BP THING JMP LNKB * LDA LNK1,I ELSE CACULATE THE ADDRESS OF CMA,INA THE NEXT ADA LNK2,I ENTRY ADA LNK3,I BY SKIPPING OVER THE IMAGE LNKA JSB LNKS SET UP THE NEW AREA ISZ LNK SET OK RETURN ADDRESS JMP LNK,I RETURN * LNKB LDA LNK1 FOR BASE PAGE ADA P3 USE NEXT THREE JMP LNKA WORD AREA. SPC 3 LNKS NOP STvA LNK1 SET THE LINK POINTERS UP INA STA LNK2 INA STA LNK3 JMP LNKS,I AND RETURN SPC 3 LNK1 NOP LNK2 NOP LNK3 NOP TLNK DEF TBLNK M0760 OCT 076000 SKP * * NUMERICAL INPUT CONTROL * * THE DOCON SUBROUTINE ANALYZES THE INPUT FOR THE * CHANNEL NO., DISK SIZES, TBG CHANNEL NO. AND LAST * WORD OF AVAILABLE MEMORY. * * CALLING SEQUENCE: * A = MAX NO. OF CHARACTERS PERMITTED IN RESPONSE. * THE SIGN OF A DETERMINES THE CONVERSION FROM * ASCII TO OCTAL (POS.) OR DECIMAL (NEG.). * B = IGNORED * JSB DOCON * * RETURN: * (N+1): CONTENTS OF A AND B ARE DESTROYED. AN INVALID * CHARACTER HAS BEEN DETECTED IN THE RESPONSE, OR * THE RESPONSE CONTAINS AN INVALID NO. CHARACTERS. * THE MESSAGE IS TO BE REPEATED ON RETURN. * (N+2): A = CONVERTED RESULT * DOCON NOP JSB GETOC GET OCTAL/DECIMAL, RETURN OCTAL JMP *+4 INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF SZA,RSS CHAR = ZERO? (END OF BUFFER) JMP *+3 YES - CONTINUE JSB INERR INVALID DIGIT ENTRY JMP DOCON,I RETURN ISZ DOCON INCR RETURN ADDRESS LDA OCTNO GET CONVERTED NUMBER JMP DOCON,I RETURN SKP * * GET CHAR FROM LBUF, RETURN IN A * * THE FOLLOWING SUBROUTINE SUPPLIES THE CHARACTERS FOR * GETNA AND GETOC. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB GETAL * * RETURN: * A = CURRENT CHARACTER * B = DESTROYED * GETAL NOP LDA CMFLG CMFLG = COMMA-IN FLAG SZA,RSS SKIP IF NO COMMA IN JMP BLRET RETURN BLANK LDB BUFUL GET U/L FLAG IGNOR LDA CURAL,I GET CHAR FROM LBUF SZB SKIP IF LOWER CHAR ALF,ALF ROTATE TO LOWER AND M377 ISOLATE LOWER CHAR CPA STAR IF STAR CLA s TREAT AS END OF LINE SZA,RSS END OF BUFFER? JMP GETAL,I YES - RETURN WITH ZERO CMB,SZB RESET U/L, SKIP IF UPPER CHAR ISZ CURAL INCR LBUF ADDRESS STB BUFUL SAVE U/L FLAG CPA BLANK CHAR = BLANK? JMP IGNOR IGNORE BLANKS * CPA COMMA CHAR = COMMA? ISZ CMFLG RESET FLAG TO SHOW COMMA IN (SKIPS) JMP GETAL,I RETURN WITH NON-BLANK CHAR BLRET LDA BLANK REPLACE WITH BLANK CHAR JMP GETAL,I RETURN WITH BLANK * COMMA OCT 54 STAR OCT 52 BLANK OCT 40 BUFUL NOP BUFFER U/L FLAG. CMFLG NOP COMMA FLAG= -1/0= NOT IN/IN. M377 OCT 377 SKP * * MOVE ALPHA FROM LBUF TO TBUF * * THE FOLLOWING SUBROUTINE MOVES THE CHARACTERS FROM LBUF * TO TBUF. * * CALLING SEQUENCE: * A = MAX. NO. OF CHARACTERS TO BE MOVED. THE SIGN OF A * DESIGNATES THE POSITION OF THE FIRST CHARACTER. * IF THE SIGN OF A IS POSITIVE, THE FIRST CHAR IS TO * BE MOVED TO THE LOW CHAR IN TBUF. IF A IS NEGATIVE, THE * FIRST CHARACTER IS TO BE MOVED TO THE UPPER CHAR IN TBUF. * B = IGNORED * JSB GETNA * * RETURN: * A = FIRST CHAR (IF ONLY 1 CHAR) OR FIRST 2 CHARS MOVED. * B = DESTROYED * GETNA NOP CCE,SSA,RSS SET E = 1 (EVEN) POSITION CMA,CLE,INA SET E = 0 (ODD) POSITION - COMP STA MAXC MAXC = MAXIMUM NO. CHARS LDA ATBUF ATBUF = ADDR OF TBUF STA CURAT SET CURRENT TBUF ADDRESS CLB STB ATBUF,I CLEAR WORD 1 OF TBUF CCA STA CMFLG SET COMMA-IN FLAG SEZ,RSS SKIP - ODD POSITION JMP OCHAR BEGIN WITH ODD CHARACTER NEXTC JSB GETAL GET CHAR FROM LBUF SZA,RSS END OF BUFFER? LDA BLANK YES - REPLACE CHAR WITH BLANK ALF,ALF ROTATE TO UPPER A STA CURAT,I SET CHARACTER IN TBUF ISZ MAXC CHECK FOR ALL CHARS IN JMP #MNLHOCHAR GET ODD CHAR FROM LBUF LDA ATBUF,I GET FIRST 2 TRANSFERRED CHARS JMP GETNA,I YES - RETURN OCHAR JSB GETAL GET CHAR FROM LBUF SZA,RSS END OF BUFFER? LDA BLANK REPLACE ZERO CHAR WITH BLANK IOR CURAT,I ADD TO UPPER CHAR IN TBUF STA CURAT,I SET CHARS IN TBUF ISZ CURAT INCR TBUF ADDRESS ISZ MAXC CHECK FOR ALL CHARS IN JMP NEXTC NO - TRY NEXT UPPER CHAR LDA ATBUF,I GET FIRST 2 TRANSFERRED CHARS JMP GETNA,I RETURN * CURAT NOP CURRENT TBUF ADDR. ATBUF DEF TBUF MAXC NOP MAX. CHAR COUNT. SKP * * CONVERT OCT/DEC ASCII TO BINARY * * THE GETOC SUBROUTINE CONVERTS THE NEXT CHARACTERS IN LBUF FROM * ASCII (DECIMAL OR OCTAL) TO THEIR BINARY VALUE. jN* * CALLING SEQUENCE: * A = MAX. NO. OF CHARS IN CONVERSION REQUEST. IF A IS * POSITIVE, THE REQUEST IS FOR OCTAL; IF A IS NEGATIVE, * THE REQUEST IS FOR DECIMAL. * B = IGNORED * JSB GETOC * * RETURN: * (N+1): INVALID DIGIT OR OVERFLOW IN CONVERSION * (N+2): A = CONVERTED NO. * B = DESTROYED * GETOC NOP LDB N8 GET OCTAL RANGE SSA SKIP IF OCTAL REQUEST LDB N10 GET DECIMAL RANGE STB DRANG SET DIGIT RANGE SSA,RSS SKIP IF DECIMAL REQUEST CMA,INA SET REQUEST COUNT TO NEGATIVE STA MAXC SET MAX NO. OF DIGITS CCA STA DIFLG SET DATA-IN FLAG = NO DATA IN STA CMFLG SET COMMA-IN FLAG CLA STA OCTNO OCTNO = OCTAL NUMBER GETNX JSB GETAL GET CHAR FROM LBUF SZA,RSS CHAR = ZERO? (END OF BUFFER) JMP ENDOC YES - RETURN CPA BLANK CHAR = BLANK? (COMMA IN) JMP ENDOC YES - RETURN ADA L60 SUBTRACT 60B FROM CHAR STA TCHAR SAVE CHAR SSA SKIP IF VALID LOWER LIMIT JMP DGERR INVALID DIGIT ADA DRANG ADD DIGIT RANGE CLE,SSA,RSS CLEAR E - SKIP IF VALID DIGIT JMP DGERR INVALID DIGIT ISZ DIFLG INCR DATA-IN FLAG, SKIP NOP LDA OCTNO GET PREVIOUS OCTAL NO. ADA A SET A = OCTNO X 2 ADA A SET A = OCTNO X 4 LDB DRANG GET DIGIT RANGE CPB N10 RANGE = DECIMAL? ADA OCTNO SET A = OCTNO X 5 ADA A SET A = OCTNO X 10/8 ADA TCHAR SET A = NEW OCTAL NO. STA OCTNO SAVE NEW OCTAL NO. SEZ TEST FOR OVERFLOW JMP DGERR INVALID NO. ISZ MAXC SKIP IF ALL DIGITS PROCESSED JMP GETNX GET NEXT DECIMAL DIGIT ISZ GETOC INCR RETURN ADDRESS LDA OCTNO GET OCTAL EQUIVALENT DGERR JMP GETOC,I RETURN ENDOC ISZ DIFLG SKIP - NO DATA IN JMP *-4 DATA IN - NORMAL RETURN JMP GETOC,I RETURN - ERROR * TCHAR NOP TEMP CHAR SAVE AREA. DIFLG NOP DATA-IN FLAG= -1/0= NOT IN/IN. DRANG NOP DIGIT RANGE. OCTNO NOP OCTAL DIGIT. L60 OCT -60 N10 DEC -10 N8 DEC -8 SKP * * INITIALIZE CHAR TRANSFER * * THE GINIT SUBROUTINE SETS THE CURRENT ADDRESS AND UPPER/LOWER * FLAG FOR SCANNING LBUF. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB GINIT * * RETURN : CONTENTS OF A AND B ARE DESTROYED * GINIT NOP LDA ALBUF ALBUF = ADDR OF LBUF STA CURAL SET CURRENT LBUF ADDRESS CCB STB BUFUL BUFUL = BUFFER U/L FLAG JMP GINIT,I SPC 10 * * INVALID TTY RESPONSE * * THE INERR SUBROUTINE PRINTS THE DIAGNOSTIC FOR INVALID * RESPONSES DURING THE INITIALIZATION SECTION. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INERR * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * INERR NOP LDA ERR01 SET INVALID DEVICE ERROR CODE JSB GN.ER PRINT GN.ER MESSAGE JMP INERR,I RETURN SPC 1 ERR01 ASC 1,01 SKP * SUBROUTINE TO READ INPUT * RNAME NOP READ FILE NAME. ISZ RMODE JSB READ CLB STB RMODE JMP RNAME,I * * READ NOP STA READ2 SZA,RSS IF ZERO, THEN NULL PROMPT LDB ALBUF SO PUT A BOGUS ADDRESS IN READB STB READ1 READ0 JSB PROMT DEF *+6 READ1 NOP MSG BUFR NULL IF NO PROMPT. DEF READ2 ZERO LEN IF NO PROMPT. ALBUF DEF LBUF DEF P80 DEF PARSA * STA PARNO SAVE PARAM RECORD LENGTH LDA TBUF STA TEMP4 SAVE IT JSB GINIT CLA,INA JSB GETNA IF FIRST CHAR IS A BLANK CPA BLANK OR A * THEN SKIP RECORD RSS JMP READt|5 NOT SO CLA STA READ2 DON'T REISSUE PROMPT JMP READ0 * READ5 LDA TEMP4 STA TBUF RESTORE LDB RMODE CHECK WHICH ENTRY. SZB JMP READ,I LDA PARNO INA CLE,ERA CONVERT TO WORD ADDR. ADA ALBUF GET TO END OF BUFFER. CLB INSERT ZERO AT END. STB A,I JSB GINIT INITIALIZE LBUF SCAN. LDA PARNO RETURN WITH RECORD LEN. JMP READ,I SPC 1 READ2 NOP RMODE OCT 0 PARNO NOP TEMP4 NOP P80 DEC 80 SKP * ANALYZE YES/NO RESPONSE * RETURN: (P+1) ERROR * (P+2) NO * (P+3) YES * YE/NO NOP LDA N3 JSB GETNA JSB GETAL SZA MORE THEN 3 CHAR JMP YE/ER ERROR LDB ATBUF,I GET RESPONSE CPB YCHAR YE? LDA P2 YES - SET RETURN OFFSET FOR YES CPB NCHAR WAS IT NO? CLA,INA YES - SET RETURN FOR YES SZA,RSS STILL ZERO? JMP YE/ER YES - NOT YES OR NO - ERROR ADA YE/NO ADJUST RETURN JMP A,I RETURN YE/ER JSB INERR ERROR - SEND MESSAGE JMP YE/NO,I AND TAKE ERROR EXIT SPC 1 YCHAR ASC 1,YE NCHAR ASC 1,NO N3 DEC -3 SPC 5 * * NEW LINE (CR,LF) ON TTY * * THE SPACE SUBROUTINE IS USED TO SPACE UP THE TELEPRINTER. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB SPACE * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * SPACE NOP LDB DBLNK GET ADDRESS OF A BLANK CLA,INA SET CHARACTER COUNT = ONE JSB DRKEY OUTPUT CR, LF ON TTY JMP SPACE,I RETURN * DBLNK DEF UBLNK UBLNK OCT 20000 SKP * * PRINT: ERR XX * * THE ERROR SUBROUTINE IS USED TO PRINT THE DIAGNOSTICS * FOR ALL ERROR MESSAGES. * * CALLING SEQUENCE: * A = 2-DIGIT ASCII ERROR CODE, IF NEG THEN DON'T DO A TR,ERRLU8. * B = IGNORED * JSB GN.ER * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * GN.ER NOP PRINT ERROR MESSAGES CLE IF A IS NEG THEN SET IT POSITIVE SSA AND DON'T DO A TR CME SEZ CMA,INA STA AMERR+5 SET ERROR CODE INTO MESSAGE SEZ JMP EROUT LDA IACOM IS COMMAND LU INTERACTIVE ALREADY? SZA JMP EROUT YES * LDA TRCHK SAVE RETURN ADDRESS OF TRCHK IN CASE ITS STA ABORT CALLING ERROR LDA ATRCM SIMULATE THE "TR,ERRLU" LDB B6 JSB TRCHK GO PUSH THE STACK LDA ABORT RESTORE TRCHK RETURN ADDRESS STA TRCHK * LDA EOFFL NO MESSAGE IF EOF-GENERATED SZA JMP GN.ER,I * EROUT JSB SPACE LDA P10 LDB AMERR AMERR = MESSAGE ADDRESS JSB DRKEY PRINT ERROR MESSAGE JMP GN.ER,I RETURN * ATRCM DEF TRCOM TRCOM ASC 3,TR, XX EOFFL NOP SKP * IRRECOVERABLE ERROR EXIT * IRERR NOP JSB GN.ER PRINT GN.ER MESSAGE JSB GTERM IRRECOVERABLE ERROR * AMERR DEF *+1 ASC 5,GEN ERR ERROR MSG = ERR + CODE SPC 5 ABORT NOP FORMERLY "HLT 0B". CCA ADA ABORT GET ADDR OF ABORT CALLER. LDB DER00 JSB CONVD PUT IN MESSAGE. LDA P18 LDB ABERR JSB DRKEY DISPLAY ER00 AND ADDRESS. JSB GTERM ABORT (NO RETURN). * ABERR DEF ERR00 ERR00 ASC 9,GEN ERR 00 DER00 DEF ERR00+6 P18 DEC 18 SKP * THE INIDX,IDXS AND IDX SUBROUTINES ARE USED TO SET THE CURRENT * INDICES FOR THE ENTRY IN THE PROGRAM IDENTIFICATION * BLOCK TABLE (IDENT). THE INDEX OF THE NEXT ENTRY * IN THE IDENT TABLE IS CONTAINED IN TIDNT. ON RETURN FROM * IDX, TIDNT CONTAINS THE INDEX OF THE NEXT AVAILABLE * ENTRY IN IDENT. THE ADDRESS OF THE FIRST ENTRY IS CONTAINED * IN BIDNT AND THE # ENTRIES USED IS IN PIDNT. * * 3 IDXS FINDS AN ENTRY IN THE TABLE. * * IF THE NEXT IDENT ENTRY OVERFLOWS INTO THE LAST LST ENTRY, * IDX PRINTS A DIAGNOSTIC AND EXITS TO THE IRRECOVERABLE ERROR * SUBROUTINE. * * SET INITIAL IDENT ADDRESS * * INIDX SETS THE INDEX OF THE FIRST ENTRY IN THE IDENT * TABLE AS THE CURRENT INDEX. * * NOTE. OFFSET = 10 TO AVOID PROBLEMS WITH VALUES * 1-5 IN LST WORD 4. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INIDX * * RETURN: CONTENTS OF A DESTROYED, B PRESERVED * INIDX NOP LDA P10 RESET CURRENT IDENT INDEX. STA TIDNT (HAS OFFSET OF 10) JMP INIDX,I RETURN SKP * IDXS FINDS AN ID ENTRY IN THE IDENT TABLE. * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF THE NAME TO FIND. * JSB IDXS * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): CURRENT IDENT ADDRESSES ARE FOR THE NEXT FREE ENTRY IN * THE IDENT LIST. SYMBOL NOT FOUND. * (N+2): CURRENT IDENT ADDRESSES ARE FOR THE SPECIFIED PROGRAM. * IDXS NOP JSB INIDX INIT TIDNT TO 1ST IDENT. STB INIDX SAVE POINTER TO ASCII NAME. * ** OTHER SUBS MAY WANT NAME PTR IN INIDX ** * IDXS2 JSB IDX SET IDENT ENTRY ADDRESSES. JMP IDXS,I END OF TABLE. ID1,ID2,... SET. LDB INIDX GET ADDR OF TARGET MATCH. LDA B,I CPA ID1,I CHAR 1 & 2 MATCH? INB,RSS JMP IDXS2 NO. GET NEXT ENTRY. LDA B,I CPA ID2,I CHAR 3 & 4 MATCH? INB,RSS JMP IDXS2 NO. GET NEXT ENTRY. LDA B,I XOR ID3,I AND M7400 CHECK CHAR 5. SZA JMP IDXS2 NOT THIS ENTRY. ISZ IDXS FOUND. TAKE SUCCESS RETURN. JMP IDXS,I SKP * * SET IDENT ADDRESSES FROM TIDNT * * IDX SETS THE ADDRESSES OF THE CURRENT 11-WORD ENTRY IN THE * IDENT TABLE FROM THE INDEX OF THE CURRENT ENTRY (TIDNT). * THE6\ TIDNT ENTRY MAY REFERENCE CURRENT/FORWARD/BACKWARD * BLOCKS. IDX ASSURES THAT THE PROPER BLOCK IS IN CORE. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB IDX * * RETURN: CONTENTS OF A DESTROYED, B PRESERVED. * (N+1): CURRENT IDENT ADDRESSES ARE THE ADDRESSES * OF THE NEXT AVAILABLE IDENT ENTRY, OR THE * END OF THE IDENT TABLE HAS BEEN REACHED. * (N+2): CURRENT IDENT ENTRY ADDRESSES (NOT END OF IDENT) * IDX NOP STB ID16 TEMP SAVE LDA B.I CHECK IF ENTRY IN CORE (DOT OK). CMA,INA ADA TIDNT SSA JMP IDX0 .LT. LOW ENTRY INDEX. * LDA B.I (NOT "B,I" - DOT OK) ADA EIDNT CMA,INA ADA TIDNT SSA JMP IDX2 IN CORE. * IDX0 LDA TIDNT .GT. HIGH ENTRY INDEX. ADA N10 CLB DIV EIDNT GET BLOCK NO. STA B.I TEMP SAVE... DOT OK. MPY ID.#S GET # SECTORS OFFSET. CLB DIV SECTK CHECK TRACK SPILL OVER. STB ID.CS REMAINDER= NEW CURR. SECTOR. ADA ID.BT STA ID.CT NEW CURRENT TRACK. * ADB ID.#S GET LAST+1 SECTOR OF BLOCK. CMB,INB ADB SECTK SSB,RSS JMP *+4 CLB STB ID.CS IF END NOT ON SAME TRACK, ISZ ID.CT START BLOCK ON NEXT TRACK * CPA ID.ET END OF IDENT DISK AREA? JMP LSERR YES. IDENT OVERFLOW! * JSB RDIDN WRITE/READ THE DISC. LDA B.I DOT OK. SET NEW LOW INDEX. MPY EIDNT ADA P10 ADD THE OFFSET. STA B.I DOT OK. IDX2 LDA TIDNT GET ADDR OF DESIRED ENTRY. ADA N10 ADJUST FOR OFFSET. CLB DIV EIDNT LDA B REMAINDER = OFFSET. ALF MULTIPLY BY 16 WORDS PER ENTRY ADA BIDNT STA ID1 SET ADDRESS OF NAME 1,2 INA STA ID2 SET ADDRESS OF NAME 3,4 INA STA ID3 SET ADDRESS OF NAME 5, USE FLAG INA STA ID4 SET ADDRESS OF COM/PROG LENGTH INA STA ID5 SET ADDRESS OF LINKS-MAP OPT FLAGS. INA STA ID6 SET ADDRESS OF M/S,PRIOR/DISK,TY INA STA ID7 SET ADDRESS OF LOWEST DBL. INA STA ID8 SET MAIN IDENT ADDR FOR BS INA STA ID9 SET FILE NAME ADDRESSES. INA STA ID10 INA STA ID11 INA STA ID12 SET ADDRESS OF SECURITY CODE INA STA ID13 SET ADDRESS OF CR LABEL . INA STA ID14 SET ADDRESS OF RECORD NUMBER INA STA ID15 SET ADDRESS OF REL. BLOCK INA LDB ID16 RESTORE B-REG STA ID16 SET ADDRESS OF BLK OFFSET * LDA PIDNT CHECK IF END OF IDENT. CMA,INA ADA TIDNT SSA ISZ IDX NOT END. P+2 EXIT. ISZ TIDNT SET NEXT IDENT ENTRY. JMP IDX,I RETURN * B.I DEC 10 1ST ENTRY INDEX OF CUR CORE BLOCK. * (OFFSET = 10) SPC 3 * POINTERS FOR IDENT TABLE. * BIDNT NOP FWA CORE BLOCK. TIDNT NOP CURRENT ENTRY INDEX IN CORE BLOCK. PIDNT NOP # ENTRIES USED + 10. EIDNT NOP # IDENT ENTRIES PER CORE BLOCK. LIDNT NOP # WORDS PER DISC WRITE/READ. ID.BT NOP START TRACK ID.LT NOP LAST TRACK ID.LS NOP AND SECTOR READ. ID.CT NOP CURRENT TRACK ID.CS NOP AND SECTOR (OR NEXT REQUIRED). ID.ET NOP ENDING TRACK ID.#S NOP # SECTORS PER BLOCK. * ID1 NOP ID2 NOP ID3 NOP ID4 NOP ID5 NOP ID6 NOP ID7 NOP ID8 NOP ID9 NOP ID10 NOP ID11 NOP ID12 NOP ID13 NOP ID14 NOP ID15 NOP ID16 NOP SKP * * SUBROUTINE TO WRITE-READ IDENT TABLE FROM DISC. * CALLING SEQUENCE: * JSB RDIDN * RDIDN NOP LDA ID.LS GET LAST SECTOR ADDR. LDB IDZQ.LT GET LAST TRACK ADDR. CPA ID.CS EQUAL TO CURRENT? RSS YES. JMP RDID1 NO. WRITE AND READ. CPB ID.CT SAME TRACK? JMP RDIDN,I YES, RETURN. * RDID1 LDA BIDNT STA WI1 STA WI2 * JSB EXEC WRITE OUT CURRENT BLOCK. DEF *+7 DEF P2 DEF DSKLU WI1 NOP DEF LIDNT DEF ID.LT DEF ID.LS * JSB EXEC READ NEW BLOCK. DEF *+7 DEF B1 DEF DSKLU WI2 NOP DEF LIDNT DEF ID.CT DEF ID.CS * LDA ID.CT RESET TRACK & SECTOR ADDRS. STA ID.LT LDA ID.CS STA ID.LS JMP RDIDN,I SKP * THE INLST, LSTS, LSTE AND LSTX SUBROUTINES ARE USED TO SET THE * CURRENT LOADER SYMBOL TABLE (LST) INDICES. THE INDEX OF THE * NEXT ENTRY IN LST IS CONTAINED IN TLST. ON RETURN FROM INLST, * TLST CONTAINS THE INDEX OF THE NEXT AVAILABLE ENTRY IN LST, OR * THE INDEX OF THE END OF LST. THE ADDRESS OF THE FIRST ENTRY * IN LST IS AT BLST AND THE # ENTRIES USED IS IN PLST. * * IF THE NEXT ENTRY IN LST OVERFLOWS CORE-DISC SPACE, * LSTX PRINTS A DIAGNOSTIC AND EXITS * TO THE IRRECOVERABLE ERROR SUBROUTINE. * * INLST SETS THE ADDRESS OF THE FIRST ENTRY IN LST. * INLST NOP CLA STA TLST RESET CURRENT LST INDEX. JMP INLST,I RETURN SPC 3 * LSTS SEARCHES THE LST FOR A SPECIFIED ENTRY. * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF THE ASCII NAME TO BE FOUND. * JSB LSTS * * RETURN: CONTENTS OF A AND B DESTROYED. * (N+1): THE END OF THE LST WAS FOUND WITH OUT FINDING THE * SYMBOL. THE LST ENTRIES ARE SET TO THE NEXT AVAILABLE * ENTRY. * (N+2): THE CURRENT LST ADDRESS POINT TO THE FOUND ENTRY. * LSTS NOP JSB INLST INIT TLST TO 1ST LST INDEX. STB INLST SAVE PTR TO ASCII NAME * ** SOME SUBS EXPECT LSTS TO STORE THIS ** * W ** POINTER IN INLST'S ENTRY POINT ** LSTS2 JSB LSTX SET LST ENTRY ADDRESSES. JMP LSTS,I END OF TABLE. .LST1,...,.LST5 SET. LDB INLST GET ADDR OF TARGET MATCH. LDA B,I CPA .LST1,I CHAR 1 & 2 MATCH? INB,RSS JMP LSTS2 NO. GET NEXT ENTRY. LDA B,I CPA .LST2,I CHAR 3 & 4 MATCH? INB,RSS JMP LSTS2 NO. GET NEXT ENTRY. LDA B,I XOR .LST3,I AND M7400 CHECK CHAR 5. SZA JMP LSTS2 NOT THIS ENTRY. ISZ LSTS FOUND. TAKE SUCCESS RETURN. JMP LSTS,I SKP * SET LST ADDRESSES FROM TLST * * LSTX SETS THE CURRENT LST ADDRESSES FROM TLST. THE TLST ENTRY * MAY REFERENCE CURRENT-FORWARD-BACKWARD BLOCKS. LSTX ASSURES * THAT THE PROPER CORE BLOCK IS IN CORE. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB LSTX * * RETURN: CONTENTS OF A DESTROYED, B PRESERVED. * (N+1): THE END OF LST IS REACHED AND THE CURRENT * LST ADDRESSES ARE THE ADDRESSES OF THE NEXT AVAILABLE * ENTRY IN LST. * (N+2): CURRENT LST ADDRESSES ARE SET (NOT END OF LST). * LSTX NOP STB .LST5 TEMP SAVE LDA B.L CHECK IF ENTRY IN CORE. CMA,INA ADA TLST SSA JMP LSTX0 .LT. LOW ENTRY INDEX. * LDA B.L ADA ELST CMA,INA ADA TLST SSA JMP LSTX2 * LSTX0 LDA TLST .GT. HIGH ENTRY INDEX. CLB DIV ELST GET BLOCK NUMBER. STA B.L SAVE FOR LATER. MPY LS.#S GET # SECTORS OFFSET. CLB DIV SECTK SEE IF TRACK SPILL OVER. STB LS.CS REMAINDER= NEW CUR. SECTOR. ADA LS.BT STA LS.CT NEW CURRENT TRACK. * ADB LS.#S GET LAST+1 SECTOR OF BLOCK. CMB,INB ADB SECTK IF END NOT ON SAME TRACK, SSB,RSS START BLOCK ON NEXT TRACK. JMP *+4 O CLB STB LS.CS ISZ LS.CT * CPA LS.ET END OF LST DISC AREA? JMP LSERR YES. LST OVERFLOW! * JSB RDSMB WRITE/READ THE DISC. LDA B.L SET NEW LOW INDEX. MPY ELST STA B.L LSTX2 LDA TLST GET ADDR OF DESIRED ENTRY. CLB DIV ELST LDA B REMAINDER= OFFSET. MPY P5 ADA BLST STA .LST1 SET WORD 1 ADDR. INA STA .LST2 SET WORD 2 ADDR INA STA .LST3 SET WORD 3 ADDR INA STA .LST4 SET WORD 4 ADDR INA LDB .LST5 RESTORE B-REG STA .LST5 SET WORD 5 ADDR LDA PLST CHECK IF END OF LST. CMA,INA ADA TLST SSA ISZ LSTX NOT END. P+2 EXIT. ISZ TLST SET NEXT LST INDEX. JMP LSTX,I RETURN * B.L OCT 0 1ST ENTRY INDEX NOW IN CORE. * LSERR LDA ERR07 JSB IRERR IRRECOVERABLE ERROR EXIT * ERR07 ASC 1,07 IDENT/LST/FIX-UP OVERFLOW. SKP * ENTER A NEW SYMBOL * * LSTE SEARCHS THE LST FOR A SYMBOL AND IF NOT FOUND ENTERS IT * IN THE LST. * * CALLING SEQUENCE: * A = IGNORED * B = SYMBOL ADDRESS * JSB LSTE * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): SYMBOL IS NEW AND WAS ENTRED, LST ADDRESS ARE SET UP * (N+2): SYMBOL WAS IN LST. LST ADDRESS ARE SET UP. * LSTE NOP JSB LSTS SEARCH FOR THE SYMBOL JMP LSTE2 IF NOT FOUND GO ENTER * ISZ LSTE STEP TO ALREADY IN LST EXIT JMP LSTE,I AND EXIT * LSTE2 LDB INLST,I GET THE FIRST CHARACTERS OF NEW STB .LST1,I SYMBOL AND SET IN THE LIST ISZ INLST STEP TO NEXT CHARACTERS LDA INLST,I GET THE CHARACTERS STA .LST2,I AND SET ISZ INLST STEP TO THE LAST CHARACTER LDA INLST,I FETCH IT AND M7400 KEEP ONLY THE HIGH CHARACTER STA .LST3,I SET IT IN THE LST CLA CLEAR STA .LST4,I THE IDENT FLAG STA .LST5,I AND VALUE FIELDS ISZ PLST BUMP # LST ENTRIES. JMP LSTE,I EXIT BACK TO THE USER. SKP * * * POINTERS FOR LOADER SYMBOL TABLE (LST). * BLST NOP FWA CORE BLOCK. TLST NOP CURRENT ENTRY INDEX IN CORE BLOCK. PLST NOP # ENTRIES USED. ELST NOP # LST ENTRIES PER CORE BLOCK. LLST NOP # WORDS PER DISC WRITE/READ. LS.BT NOP START TRACK LS.LT NOP LAST TRACK LS.LS NOP AND SECTOR READ. LS.CT NOP CURRENT TRACK LS.CS NOP AND SECTOR (OR NEXT REQUIRED). LS.ET NOP ENDING TRACK LS.#S NOP # SECTORS PER BLOCK. * .LST1 OCT 0 .LST2 OCT 0 .LST3 OCT 0 .LST4 OCT 0 .LST5 OCT 0 SKP * * SUBROUTINE TO READ/WRITE SYMBOL TABLE FROM DISC * CALLING SEQUENCE * JSB RDSMB * RDSMB NOP LDA LS.LS GET LAST SECTOR ADDRESS LDB LS.LT GET LAST TRACK ADDRESS CPA LS.CS IS IT EQUAL TO CURRENT? RSS YES JMP WTSMT NO...WRITE AND READ CPB LS.CT HOW ABOUT THE TRACK ADDRESS? JMP RDSMB,I SAME THING...DON'T DO ANYTHING * WTSMT LDA BLST STA WS1 STA WS2 * JSB EXEC GO WRITE OUT CURRENT DEF *+7 DEF P2 DEF DSKLU WS1 NOP DEF LLST DEF LS.LT DEF LS.LS * JSB EXEC READ IN NEW BLOCK DEF *+7 DEF B1 DEF DSKLU WS2 NOP DEF LLST DEF LS.CT DEF LS.CS * LDA LS.CT STA LS.LT LDA LS.CS STA LS.LS RESET TRACK SECTOR ADDRESS JMP RDSMB,I AND RETURN SKP * * THE FIXX AND FIX SUBROUTINES ARE USED TO SET THE * CURRENT FIX-UP TABLE INDICES. * * FIXX SETS THE INDEX OF THE FIRST ENTRY IN THE FIX-UP * TABLE AS THE CURRENT ENTRY. * FIXX NOP CLA STA TFIX JMP FIXX,IG SPC 5 * * FIX SETS THE CURRENT FIX-UP ADDRESSES FROM TFIX. * THE TFIX ENTRY MAY REFERENCE CURRENT-FORWARD-BACKWARD * BLOCKS. FIX ASSURES THAT THE PROPER BLOCK IS IN CORE. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB FIX * * RETURN: A LOST, B SAVED. * P+1 IF BEYOND END OF DEFINED FIX-UPS * P+2 IF DEFINED ENTRY. * FIX NOP STB FIX4 TEMP SAVE LDA B.F CHECK IF ENTRY IS IN CORE. CMA,INA ADA TFIX SSA JMP FIX0A .LT. LOW ENTRY INDEX. * LDA B.F ADA EFIX CMA,INA ADA TFIX SSA JMP FIX0C * FIX0A LDA TFIX .GT. HIGH ENTRY INDEX. CLB DIV EFIX GET BLOCK NUMBER. STA B.F MPY FX.#S GET # SECTORS OFFSET. CLB DIV SECTK SEE IF TRACK SPILL OVER. STB FX.CS REMAINDER = NEW CURRENT SECTOR. ADA FX.BT STA FX.CT NEW CURRENT TRACK. * ADB FX.#S GET LAST+1 SECTOR OF BLOCK. CMB,INB ADB SECTK IF END NO ON SAME TRACK, SSB,RSS START BLOCK ON NEXT TRACK. JMP *+4 CLB STB FX.CS ISZ FX.CT * CPA FX.ET END OF FIX-UP DISC AREA? JMP LSERR YES. FIX-UP OVERFLOW! * JSB RDFIX WRITE/READ THE DISC. LDA B.F SET NEW LOW INDEX. MPY EFIX STA B.F FIX0C LDA TFIX GET ADDR OF DESIRED ENTRY. CLB DIV EFIX LDA B REMAINDER = OFFSET. MPY P4 ADA BFIX STA FIX1 SET WORD 1 ADDR. INA STA FIX2 SET WORD 2 ADDR. INA STA FIX3 SET WORD 3 ADDR. INA LDB FIX4 RESTORE B-REG STA FIX4 SET WORD 4 ADDR. LDA PFIX CHECK IF END OF DEFINED FIX-UPS. CMA,INA ADA TFIX SSA ISZ FIX NOT END. P+2 EXIT. ISZ TFIX SET NEXT FIX-UP ENTRY. JMP FIX,I RETURN. * B.F OCT 0 LOW IN-NLHDEX OF BLOCK IN CORE SKP * * * POINTERS FOR FIX-UP TABLE. * BFIX NOP FWA CORE BLOCK. TFIX NOP CURRENT ENTRY INDEX IN CORE BLOCK. PFIX NOP # ENTRIES USED. EFIX NOP # FIX-UP ENTRIES PER CORE BLOCK. LFIX NOP # WORDS PER DISC WRITE/READ. FX.BT NOP START TRACK FX.LT NOP LAST TRACK FX.LS NOP AND SECTOR READ. FX.CT NOP CURRENT TRACK FX.CS NOP AND SECTOR (OR NEXT REQUIRED). FX.ET NOP ENDING TRACK FX.#S NOP # SECTORS PER BLOCK. * FIX1 NOP FIX2 NOP FIX3 NOP FIX4 NOP SKP * * SUBROUTINE TO READ/WRITE FIX-UP TABLE FROM DISC. * CALLING SEQUENCE: NN* JSB RDFIX * RDFIX NOP LDA FX.LS GET LAST SECTOR ADDRESS. LDB FX.LT GET LAST TRACK ADDRESS. CPA FX.CS IS IT EQUAL TO CURRENT? RSS YES. JMP RDFX1 NO... WRITE AND READ. CPB FX.CT HOW ABOUT TRACK ADDRESS? JMP RDFIX,I SAME THING... DON'T TO ANYTHING. * RDFX1 LDA BFIX STA WX1 SET BUFFER ADDRESS. STA WX2 * JSB EXEC GO WRITE OUT CURRENT BLOCK. DEF *+7 DEF P2 DEF DSKLU WX1 NOP DEF LFIX DEF FX.LT DEF FX.LS * JSB EXEC READ IN NEW BLOCK. DEF *+7 DEF B1 DEF DSKLU WX2 NOP DEF LFIX DEF FX.CT DEF FX.CS * LDA FX.CT RESET TRACK & SECTOR ADDRESSES. STA FX.LT LDA FX.CS STA FX.LS JMP RDFIX,I RETURN. SKP * * SUBROUTINE TO CLOSE AND PURGE ALL FILES * CURRENTLY OPEN TO PROGRAM IN CASE OF ABORT * * JSB GTERM * * GTERM NOP LDA P14 GO PRINT ABORT LDB DFABM MESSAGE TO THE JSB LFOUT OUTPUT LIST FILE LDA ABDCB+5 GET # OF SECTORS CLE,ERA CONVERT TO BLOCKS STA BLKS AND SAVE IT JSB CLOSF PURGE THE FILE!!! DEF *+3 DEF ABDCB DEF BLKS JSB OPEN OPEN FILE IN ORDER DEF *+4 TO PURGE IT DEF NMDCB (DON'T WANT TO DEF FMRR TO CALL PURGE) DEF .NM. JSB CLOSE PURGE TEMP NEW NAM FILE. DEF *+4 DEF NMDCB DEF FMRR DEF P64 JSB CLOSF CLOSE LIST FILE DEF *+3 DEF LFDCB DEF ZERO JSB CLOSF CLOSF RELOCATABLE INPUT FILE IF OPEN DEF *+3 DEF RRDCB DEF ZERO JSB CLOSF CLOSE ANSWER FILE DEF *+3 DEF IPDCB DEF ZERO JSB CLOSF CLOSE ECHO DEF *+3 DEF ECDCB DEF ZERO * * AT THIS POINT ALL FILES ARE CLOSED OR PURGED * TELL WORLD WE ARE DONE * LDA IALST ABORT MESSAGE ALREADY SZA PRINTED? JMP RELTR JSB EXEC PRINT OUT ABORT MESSAGE DEF *+5 DEF P2 DEF ERRLU DFABM DEF ABMSG "RT-GN ABORTED" DEF B7 * RELTR JSB EXEC RELEASE TRACKS DEF *+3 DEF P5 DEF M1 JSB EXEC AND TURN OFF DEF *+2 DEF B6 SPC 1 ABMSG ASC 1,RT IFN ASC 1,2G XIF IFZ ASC 1,3G XIF ASC 5,N ABORTED B1 OCT 1 B6 OCT 6 B7 OCT 7 BLKS NOP .NM. ASC 1,@. IFN ASC 1,NM XIF IFZ ASC 1,MN XIF ASC 1,.@ SKP * * SUBROUTINE TO WRITE ON INTERACTIVE COMMAND INPUT DEVICE * AND LIST FILE * CALLING SEQUENCE * JSB DRKEY * A REG= SIO LENGTH WORD * B REG= ADDRESS OF MESSAGE * DRKEY NOP DST ABREG SAVE A AND B REG FOR LFOUT JSB BYTCN CONVERT SIO TO USUAL INB SKIP OVER LEADING SPACE ADA M1 CUT COUNT NOT INCLUDE SPACE STA PRNTA SAVE LENGTH STB PRNTB SAVE ADDRESS LDA IALST IS THE LIST FILE AN I.A. LU? SZA JMP PRNT1 YES, SO DONT PRINT MESSAGE TWICE LDA IACOM IS THE COMMAND DEVICE I.A.? SZA,RSS JMP PRNT1 NO, SO DONT WRITE TO IT * JSB WRITF OUTPUT MESSAGE DEF *+5 DEF IPDCB TO THE INPUT DEVICE DEF FMRR PRNTB NOP DEF PRNTA LENGTH * PRNT1 DLD ABREG GET LENGTH AGAIN JSB LFOUT WRITE TO FILE JMP DRKEY,I AND RETURN SPC 1 PRNTA NOP M1 DEC -1 SKP * SUBROUTINE TO CONVERT SIO LENGTH TO POSITIVE WORDS * BYTCN NOP STA BYTCA SAVE LENGTH FOR CHECKING LATTER SSA WORDS OR CHARACTERS? JMP *+3 WORDS CMA,INA CONVERT CHAR TO WORDS ARS DIVIDE BY 2+1 STA BYTCYC SAVE IN DOWN COUNTER STB BYTCD SAVE B TEMPORARILY. LDB N40 TRUNCATE TO 40 WORDS. ADA P40 SSA STB BYTCC LDB BYTCD RESTORE B. LDA LSBFA GET ADDRESS WHERE TO PUT OUTPUT STA BYTCD SAVE FOR MOVE BYTC1 LDA B,I MOVE MESSAGE STA BYTCD,I ISZ BYTCD INB ISZ BYTCC DONE? JMP BYTC1 NO LDB BYTCA WORDS OR CHARACTERS? SSB JMP BYTC2 WORDS CLE,ERB CONVERT CHARACTERS TO WORDS SEZ,RSS ODD # OF CHAR? JMP BYTC3 NO STB BYTCC YES...SAVE COUNT FOR LATTER ISZ BYTCC INCLUDE ODD CHAR ADB LSBFA GET TO END LDA B,I AND M7400 MASK OFF LOWER HALF IOR B40 OR IN A SPACE STA B,I SAVE IT LDB BYTCC GET LENGTH AGAIN BYTC3 RSS SKIP OVER COMPLEMENTING BYTC2 CMB,INB CHANGE NEG WORDS TO + WORDS LDA B GET LENGTH IN A REG LDB OTBFA GET ADDRESS OF BUFFER...INCLUDING SPACE INA INCLUDE SPACE IN COUNT JMP BYTCN,I AND RETURN SPC 1 BYTCA NOP BYTCC NOP BYTCD NOP OTBFA DEF OTBUF LSBFA DEF OTBUF+1 OTBUF ASC 1, PRINT BUFFER BSS 40 * B40 OCT 40 N40 DEC -40 P40 DEC 40 SKP * * SBROUTINE TO WRITE ONTO A LIST FILE * CALLING SEQUENCE * JSB LFOUT * AREG = SIO LENGTH * B REG= BUFFER ADDRESS * LFOUT NOP JSB BYTCN CONVERT LENGTH STA LOUTA STB LSBF SAVE BUFFER ADDRESS FOR OUTPUTING JSB WRITF WRITE THE RECORD DEF *+5 LDCBA DEF LFDCB DEF FMRR LSBF NOP LIST BUFFER ADDRESS HERE DEF LOUTA * LDA FMRR SSA,RSS JMP LF0 NO LIST FILE ERROR * LDB LFERR ARE WE ACKNOWLEDGING LIST FILE SZB,RSS ERRORS? JMP LF0 NO * CMA,INA SET POSITIVE FOR CONVERSION STA FMRR JSB CNUMD CONVERT ERROR CODE TO ASCII DEF *+3 DEF FMRR DEF FERMA ADDRESS OF ERROR MESSAGE LDA FERMA+2 PICK OFF CODE STA FERMA * JSB WRITF DEF *+5 SEND A BLANK LINE DEF ECDCB DEF FMRR DEF C4040 DEF B1 * JSB WRITF SEND: DEF *+5 FMP ERR -XX DEF ECDCB DEF FMRR DEF FILEA+1 (CHFIL WASN'T CALLED BECAUSE DEF B6 IT CALLS ... LFOUT) * LDA ERR22 STORE GEN ERROR CODE IN MESSAGE STA AMERR+5 JSB WRITF SEND: DEF *+5 GEN ERR 22 DEF ECDCB DEF FMRR DEF AMERR+1 (GN.ER WASN'T CALLED BECAUSE DEF P5 IT CALLS ... LFOUT) * ASKAG JSB WRITF ASK: DEF *+5 "OK TO CONTINUE?" DEF ECDCB DEF FMRR DEF OKAY? DEF P8 * LDA ERRLU SET ECHO BIT IN IOR B400 EXEC CONTROL STA FMRR WORD GETAN JSB EXEC RETRIEVE OPERATOR'S ANSWER DEF *+5 DEF B1 DEF FMRR DEF ECBF DEF N2 SZB,RSS SKIP IF INPUT RECEIVED JMP GETAN ELSE GET AGAIN * CLA SET TO IGNORE ALL FUTURE LIST STA LFERR FILE ERRORS INA TURN ECHO ON STA ECHON * LDA ECBF OKAY? CPA YCHAR "YE" JMP LF0 YES-CONTINUE CPA NCHAR "NO" JSB GTERM NO-ABORT JMP ASKAG ASK AGAIN * LF0 LDA ECHON ARE WE TO ECHO? SZA,RSS JMP LFOUT,I NO * LDA IALST IS THE LIST FILE AN SZA,RSS INTERACTIVE LU? JMP LF1 NO, GO CHECK COMMAND INPUT LDB LSTLU IS THE LIST LU SAME AS CPB ERRLU LU OF OPERATOR CONSOLE? JMP LFOUT,I YES - DON'T ECHO * LF1 LDA IACOM IS THE COMMAND INPUT SZA,RSS FROM AN INTERACTIVE LU? JMP LF2 NO - SO PERFORM ECHO LDB CMDLU .IS THE COMMAND LU THE CPB ERRLU SAME AS OP CONSOLE? JMP LFOUT,I YES - SO DON'T ECHO * LF2 LDA LSBF SET BUFFER ADDRESS STA ECBF JSB WRITF AND OUTPUT IT DEF *+5 DEF ECDCB DEF FMRR ECBF NOP DEF LOUTA JMP LFOUT,I AND RETURN * ECHON NOP ECHO FLAG, 1=ON LOUTA NOP LFERR NOP LIST FILE ERROR ACKNOWLEDGER,0=NO,1=YES ERR22 ASC 1,22 LIST FILE GEN. ERROR CODE OKAY? ASC 8,OK TO CONTINUE? SKP * SUBROUTINE TO OPEN A RELOCATABLE FILE AND ADVANCE TO THE * NAM GIVEN IN THE CURRENT IDENT ENTRY. THE FILE IS LEFT OPEN. * THE NAM DESIRED MAY BE IN THE SAME FILE AS THE PREVIOUS ONE. * * CALLING SEQUENCE: * * A = BUFFER ADDRESS FOR NAM RECORD. * B = 0, DON'T COMPARE BUFFER FILE NAMES * JSB RDNAM * ERROR RETURN * NORMAL RETURN: A = # WORDS. * RDNAM NOP STA RDNMA SAVE BUFFER ADDRESS. SZB,RSS SKIP IF CHECK WANTED JMP RDNM1 LDB DPRS2 CHECK WHETHER RDBIN'S FILE NAME INB IS THE SAME AS IN IDENT. LDA B,I CPA ID9,I INB,RSS JMP RDNM1 NO MATCH. LDA B,I CPA ID10,I INB,RSS JMP RDNM1 NO MATCH. LDA B,I CPA ID11,I INB,RSS JMP RDNM1 NO MATCH LDA B,I CPA ID12,I SECURITY CODE INB,RSS JMP RDNM1 NO MATCH LDA B,I CPA ID13,I CR LABEL JMP RDNM3 THE NAMES MATCH. GO SEARCH. * RDNM1 JSB CLOSE NAMES DO NOT MATCH. CLOSE THIS DEF *+3 FILE AND GET THE RIGHT ONE. DEF RRDCB DEF FMRR * LDA P2 SET TYPE = ASCII. STA PARS2 LDA ID9,I STORE FILE NAME FROM IDENT. STA PARS2+1 LDA ID10,I STA PARS2+2 LDA ID11,I STA PARS2+3 LDA ID12,I GET SECURITY CODE STA PRS31 LDA ID13,I AND CR LABEL STA PRS41 * RDNM3 LDA RDNMA RESTORE BUFFER ADDRESS. CCB SIGNAL RDBIN TO CALL APOSN. JSB RDBIN READ NEXT RECORD FROM FILE. JMP RDNAM,I ERROR. SZA,RSS JMP RDNM3 EOF. MUST HAVE BEEN PAST THE NAM. * ISZ RDNAM SET FOR NORMAL EXIT. JMP RDNAM,I * RDNMA NOP RDNMB NOP SKP * SUBROUTINE TO GET NAME * OPEN,READ AND CLOSE A RELOCATABLE FILE. * CALLING SEQUENCE * JSB RDBIN * ERROR RETURN * NORMAL RETURN * * A REG= BUFFER ADDRESS * B REG: 0 = NULL * 1 = LOCATE BEFORE READ. * -1 = POSITION BEFORE READ. * UPON RETURN * A REG=0 EOF OR A = NUMBER OF WORDS. * RDBIN NOP STA RBINA SAVE BUFFER ADDRESS STB RBINB SAVE CODE. LDA RRDCB+9 SEE IF DCB OPEN CPA 1717B IS IT OPEN JMP RBIN2 YES...DON'T RE OPEN RBIN1 JSB FOPEN TRY TO OPEN FILE DEF *+3 DEF RRDCB DEF B300 JSB CHFIL JMP RDBIN,I RBIN2 LDA RBINB GET CODE. SZA,RSS JMP RBOPN ZERO = NO ACTION. * CPA M1 JMP RBIN3 -1 = PRE-POSITION THE FILE. ADA M1 1 = GET THE FILE POSITION. SZA JMP RBOPN UNDEFINED. ASSUME ZERO. * JSB LOCF GET POSITION OF NEXT DEF *+6 RECORD IN THE FILE. DEF RRDCB DEF FMRR DEF NAMRC DEF NAMBL DEF NAMOF * JMP RBIN4 * RBIN3 JSB APOSN POSITION THE FILE. DEF *+6 DEF RRDCB DEF FMRR DEF ID14,I DEF ID15,I DEF ID16,I * RBIN4 JSB CHFIL JMP RDBIN,I * RBOPN JSB READF READ THE FILE DEF *+6 DEF RRDCB DEF FMRR DEF RBINA,I DEF D60 MAX OF 60 WORDS DEF RLEN LENGTH OF RECORD JSB CHFIL SEE IF ANY ERROR JMP RDBIN,I ERROR...DO ERROR RETURN LDA RLEN GET LENGTH SZA,RSS IGNORE ZERO LENGTH RECORDS.  JMP RBOPN ISZ RDBIN GET NORMAL RETURN. CPA M1 EOF? RSS JMP RDBIN,I NO JSB CLOSF YES...CLOSE FILE DEF *+3 DEF RRDCB DEF ZERO CLA TELL THEM END OF FILE JMP RDBIN,I AND RETURN SPC 2 RBINA NOP RELOC. INPUT BUFFER ADDRESS RBINB NOP " FILE POSITION FLAG RLEN NOP " RECORD LENGTH NAMRC NOP NAMBL NOP NAMOF NOP SKP * * SUBROUTINE TO OPEN A FILE * CALLING SEQUENCE * JSB FOPEN FILE OPEN * DEF *+3 * DEF DCB ADDRESS * DEF SUBFUNCTION FOR READ OR WRITE IN CASE A TYPE 0 FILE * * ASSUMES THAT PARS2+1=FILE NAME * PARS3+1=SECURITY CODE * PARS4+1=LU * ODCBA NOP SUBF NOP FOPEN NOP JSB .ENTR DEF ODCBA LDA ODCBA GGET DCB ADDRESSPE LDB SUBF,I GET SUBFUNCTION JSB TYP0 CHECK IF TYPE IS 0 JMP FOPEN,I YES EXIT JSB OPEN TRY TO OPEN FILE DEF *+7 DEF ODCBA,I DEF FMRR DEF PARS2+1 NAME DEF ZERO OPEN OPTION DEF PARS3+1 SECURTIY CODE DEF PARS4+1 LOGICAL UNIT JMP FOPEN,I RETURN SKP * * SUBROUTINE TO CREATE A DUMMY TYPE 0 FILE * CALLING SEQUENCE * LDA DCB ADDRESS * LDB SUBFUNCTION * JSB TYP0 * RETURN HERE(P+1) IF IT IS TYPE 0 * RETURN HERE(P+2) IF IT IS NOT TYPE 0 * * TYP0 NOP STA T0DCB LDA PARS2 CMA,INA,SZA IF NULL OR NUMERIC (TYPE 0,1) INA,SZA,RSS THEN OPEN A DUMMY TYPE 0 JMP TYP1 ISZ TYP0 OTHERWISE TAKE NOT JMP TYP0,I TYPE 0 EXIT TYP1 LDA PARS2+1 GET LU SZA,RSS IF NOT DEFINED INA DEFINE AS LU = 1 STA PARS2+1 CLA JSB SETIT SET DIRECTORY JSB SETIT ADDRESS TO ZERO JSB SETIT ALSO SET TYPE TO 0 LDA PARS2+1 GET LOGICAL UNIT ._ IOR B MERGE IN SUBFUNCTION JSB SETIT AND SET IN DCB JSB EXEC GET DRIVER TYPE DEF *+4 DEF P13 DEF PARS2+1 DEF EQT5 LDA EQT5 GET TYPE ALF,ALF ROTATE TO LOW A AND M77 AND MASK STA EQT5 SAVE CPA P5 IF TYPE 5, MUST RSS JMP NOT05 CCA ADA DRT DETERMINE ITS SUBCHANNEL ADA PARS2+1 FROM THE LU LDA A,I ALF,RAL AND B7 STA SUB05 SAVE THE SUBCHANNEL * LDA EQT5 NOT05 LDB B100 GET EOF CONTROL SUBFUNCTION CPA P5 RSS JMP TYP2 LDA SUB05 IF SUBCHANNEL 0 SZA,RSS JMP TYP3 JMP SEOF * TYP2 ADA MD17 IF TYPE > 16 SSA,RSS JMP SEOF SET EOF CODE * TYP3 LDB B1000 LDA EQT5 CPA P2 IS DRIVER A PUNCH JMP SEOF GO SET LEADER GENERATION CLB SZA,RSS IF TYPE=0 DON'T DO PAGE EJECT JMP SEOF CPA P5 RSS JMP TYP4 LDA SUB05 NEED TO GET SUBCH ON A TYPE 5 SZA,RSS JMP SEOF * TYP4 LDB B1100 LINE SPACE OPTION SEOF LDA PARS2+1 GET LU IOR B MERGE EOF CONTROL SUBFUNCTION JSB SETIT SET IN DCB CLA JSB SETIT SET NO SPACING LEGAL LDA B1001 SET READ&WRITE LEGAL JSB SETIT AND SECURITY CODES AGREE JSB SETIT AND UPDATE MODEES AGREE LDA 1717B GET MY ID ADDRESS ISZ T0DCB INCREMENT TO WORD 9 JSB SETIT SET OPEN FLAG LDA T0DCB ADA P3 STA T0DCB SET TO WORD 13 CLA SET IN CORE BUFFER FLAG JSB SETIT TO ZERO INA JSB SETIT SET RECORD COUNT CLA STA FMRR CLEAR ERROR CODE FOR TYPE 0 LDB EQT5 IF THIS IS A MT UNIT CPB P5 OR DVR05 DEVICE RSS CPB B23 THEN DON'T WRITE AN EOF JMP TYP0,I LDB T0DCB GET˗ DCB ADDRESS ADB MD11 RESET TO WORD5, CONTROL FUNC LDB B,I GET CONTROL WORD STB SETIT SAVE IN TEMP LOCATION JSB EXEC DO AN EOF DEF *+4 DEF P3 DEF SETIT TEMP WHERE FUNCTION CODE LOCATED DEF MD17 FORCE A PAGE EJECT OR LEADER CLA JMP TYP0,I * * SETIT NOP STA T0DCB,I SET IN DCB ISZ T0DCB INCREMENT TO NEXT WORD JMP SETIT,I * * T0DCB NOP EQT5 NOP MD17 DEC -17 MD11 DEC -11 B23 OCT 23 B100 OCT 100 B300 OCT 300 B1000 OCT 1000 B1001 OCT 100001 B1100 OCT 1100 SPC 2 D60 DEC 60 SUB05 NOP TYPE 5 SUBCHANNEL DRT EQU 1652B SKP * * SUBROUTINE TO CREATE A FILE * CALLING SEQUENCE * JSB CRETF * DEF *+5 * DEF DCB ADDRESS * DEF SIZE * DEF TYPE * DEF SUBFUNCTION FOR READ/WRITE IN CASE A TYPE 0 FILE * * ASSUMES THAT PARS2+1=FILE NAME * PARS3+1=SECURITY CODE * PARS4+1=LU * SPC 1 CDCBA NOP CSIZ NOP CTYP NOP CSBUF NOP CRETF NOP JSB .ENTR DEF CDCBA JSB FOPEN GO TRY TO OPEN THE FILE DEF *+3 DEF CDCBA,I DEF CSBUF,I SZA,RSS TYPE 0? JMP CRETF,I YES...RETURN JSB CLOSE IF NOT CLOSE FILE IF OPEN DEF *+3 DEF CDCBA,I DEF FMRR JSB CREAT TRY CREATING THE FILE DEF *+8 DEF CDCBA,I DEF FMRR DEF PARS2+1 DEF CSIZ,I DEF CTYP,I DEF PARS3+1 DEF PARS4+1 JMP CRETF,I SKP * * SUBROUTINE TO CLOSE A FILE * USED TO DETERMINE IF CLOSING A DUMMY TYPE 0 * CALLING SEQUENCE * JSB CLOSF * DEF *+3 * DEF DCB ADDRESS * DEF TRUNCATE OPTION (DEFAULT IS ZERO) * * CLDCB NOP COPTN DEF ZERO CLOSF NOP JSB .ENTR DEF CLDCB LDA CLDCB,I GET DIRECTORY DISC ADDRESS SZA,RSS IF ZERO JM P FCLS1 THEN DUMMY DCB JSB CLOSE ELSE DO STANDARD CLOSE DEF *+4 DEF CLDCB,I DEF FMRR DEF COPTN,I FCLS1 LDA DFZER RESET THE OPTION WORD STA COPTN IN CASE NOT SUPPLIED NEXT TIME LDA CLDCB,I SZA JMP CLOSF,I DONE WITH FILES LDA CLDCB MAKE SURE DUMMY DCB CLOSED. ADA D9 CLB STB A,I LDA CLDCB SEE IF LIST DCB CPA LDCBA RSS YES IT IS JMP CLOSF,I NO ADA P4 STA FCLS2 SAVE FOR EXEC CALL JSB EXEC DO A PAGE EJECT DEF *+4 DEF NABP3 CONTROL REQUEST FCLS2 NOP LU DEF MD17 PAGE EJECT CODE NOP JMP CLOSF,I AND RETURN * * D9 DEC 9 NABP3 OCT 100003 NO ABORT 3 * SKP * * SUBROUTINE TO CLOSE THE ABSOLUTE CORE IMAGE FILE * * CALLING SEQUENCE * JSB CLSAB * NORMAL RETURN * * THIS ROUTINE WILL DELETE UNUSED FILE AREA * CLSAB NOP ASSUMES NO EXTENTS BEC TYPE 1 CLB LDA FMRR GET DISKD ERROR CODE SSA IF NEGATIVE THE EXACT SIZE WAS CORRECT JMP SETBL LDA ABDCB+3 TRK CMA,INA ADA ABDCB+10 CTRK - TRK MPY ABDCB+8 (CTRK - TRK) * #SEC/TR LDB ABDCB+4 CMB,INB ADA B (CTRK - TRK) * #S/TR - SEC ADA ABDCB+11 (CTRK - TRK) * #S/TR - SEC + CSEC ARS CONVERT TO NUMBER OF BLOCKS LDB ABDCB+5 GET NUMBER OF SECS CLE,ERB CONVERT TO BLOCKS CMA,INA SET CURRENT BLOCK NEG ADB A # OF BLKS - CURRENT BLK CCA ADB A ONE MORE FOR GOOD MEASURE SETBL STB TMP JSB CLOSF DEF *+3 DEF ABDCB DEF TMP JMP CLSAB,I * TMP NOP ABDCB BSS 144 ABS FILE DCB SKP * * SUBROUTINE TO PRINT COMMAND AND ACCEPT * INPUT. * CALLING SEQUENCE * JSB PROMT * DEF *+6 * DEF ֐PRINT MESSAGE BUFFER * DEF LENGTH (IN SIO FORMAT) * DEF REPLY ADDRESS * DEF LENGTH (IN + # OF CHARACTERS) * DEF PARSE BUFFER * * A REG= + NUMBER OF CHARACTERS * PMEMB NOP PMEML NOP PRADD NOP PRLEN NOP PPARS NOP PROMT NOP JSB .ENTR DEF PMEMB PRMT1 LDB PMEMB GET BUFFER ADDRESS LDA PMEML,I GET LENGTH SZA SKIP IF NO QUESTION. JSB DRKEY PRINT QUESTION PRMT5 LDA PRLEN,I GET LENGTH INA CONVERT TO WORDS CLE,ERA STA PRMTA SAVE LENGTH CMA,INA CONVERT TO NEGATIVE WORD COUNT STA PRMTB SAVE IN TEMP LDB PRADD GET ADDRESS WHERE TO SPACE FILL LDA C4040 SPACE WORD STA B,I INB ISZ PRMTB DONE? JMP *-3 NO JSB READF GO GET INPUT DEF *+6 DEF IPDCB FROM INPUT DEVICE DEF FMRR DEF PRADD,I DEF PRMTA DEF PRMTB JSB CHFIL SEE IF WE HAD A FILE ERROR JMP INPRR LDA PRMTB GET LENGTH FOR PRINT ON FILE SSA,RSS IS IT A END OF FILE JMP PRMT2 NO LDA IACOM IF THE COMMAND INPUT IS FROM AN SZA INTERACTIVE LU, THEN JMP PRMT1 TRY AGAIN FOR RESPONSE LDA TR ELSE GO SIMIULATE A TR STA PRADD,I COMMAND TO POP LDA PRADD THE STACK LDB P2 ISZ EOFFL SIGNAL NO ERROR MESSAGE JMP PRMT3 * INPRR CLA FORCE AN INPUT FILE ERROR STA IACOM AND A TR,ERRLU LDA ERR20 JSB GN.ER JMP PRMT1 TRY AGAIN * PRMT2 SZA,RSS IF ZERO-LENGTH RECORD JMP PRMT5 SIMPLY SKIP AND RETRY CLE,ELA CONVERT TO CHARACTERS STA PRMTB LDA IALST IF LIST DEVICE A FILE SZA,RSS (NON-INTERACTIVE) JMP PRMTL THEN ECHO INPUT CPA IACOM IF BOTH COMMAND AND LIST FILE RSS ARE INTERACTIVE, JMP PRKMTL LDA LSTLU THEN SEE IF THEY'RE TO THE SAME CPA CMDLU LU JMP PRMTN YES, SO DON'T ECHO INPUT * PRMTL LDB PRADD GET INPUT LDA PRMTB JSB LFOUT WRITE IT ONTO LIST FILE * PRMTN LDA PRADD,I SEE IF THEY WANT OUT? CPA !! JSB GTERM YES...GET OUT AND M7400 CHECK FIRST CHARACTER FOR CPA ASTER AN * MEANING A COMMENT JMP PRMT5 GO GET NEXT COMMAND CPA LCOMM CHECK FIRST CHARACTER JMP PRMT6 FOR A , OR : MEANING CPA LCOLN A "TR" RSS JMP PRMT7 LDA PRADD,I ADA B171 CONVERT TO A , FOR PARSE STA PRADD,I JMP PRMT6 PRMT7 LDA PRADD,I GET AGAIN JSB PARSE DEF *+4 DEF PRADD,I DEF PRMTB DEF PPARS,I LDB PPARS GET FIRST 2 CHARS. INB LDA B,I CPA TR TRANSFER COMMAND? RSS JMP PRMT4 NO - GO EXIT INB YES - BUT CHECK LDA B,I FURTHER FOR A AND M7400 BLANK OR A CPA LBLNK COMMA IN CHARACTER 3 JMP PRMT6 CPA LCOMM RSS JMP PRMT4 PRMT6 LDA PRADD GET BUFFER ADDRESS LDB PRMTB GET LENGTH PRMT3 JSB TRCHK GO DO TR THING CLA RESET IF EOF-GENERATED STA EOFFL JMP PRMT1 GO RETRY COMMAND PRMT4 LDA PRMTB GET ACTUAL REPLY LENGTH JMP PROMT,I AND RETURN SPC 1 C4040 ASC 1, !! ASC 1,!! TR ASC 1,TR ASTER OCT 25000 * PRMTA NOP PRMTB NOP LBLNK OCT 20000 LCOMM OCT 26000 , LCOLN OCT 35000 : B171 OCT 171000 SKP * SUBROUTINE TO DETERMIN IF STACK IS TO * BE PUSHED OR POPPED * * IF PUSHED, IT CLOSES THE CURRENT FILE, * SAVES RC,AND OPENS NEW FILE * * IF POPPED, IT CLOSES THE CURRENT FILE, * OPENS THE PREVIOUS FILE, AND POSITIONS * IT TO THE PROPER RECORD * SPC 1 TRCHK NOP STB PRMTB SAVE LEN̜NLHGTH STA TRCH1 SET BUFF ADDR. JSB PARSE GO REPARSE DEF *+4 TRCH1 NOP DEF PRMTB DEF BPARS LDA PARS2 GET FILE TYPE SZA IF NOT NULL JMP TR3 GO TO PUSH * TR1 JSB CLOSF CLOSE THE CURRENT FILE DEF *+3 DEF IPDCB DFZER DEF ZERO JSB POP GO POP STACK JMP POPRR ERROR, NO MORE ENTRIES STA RC SAVE RECORD COUNT JSB FOPEN OPEN PREVIOUS FILE DEF *+3 DEF IPDCB DEF B400 JSB CHFIL JMP TRCHK,I FILE ERROR - STAY AT ERRLU LDA IPDCB+2 GET TYPE SZA,RSS IF TYPE 0 JMP TRCHK,I EXIT LDA RC GET RECORD COUNT CMA,INA SET NEGATIVE AND STA COUNT SAVE TR2 ISZ COUNT ARE WE THERE YET? N RSS JMP TRCHK,I YES...GET OUT JSB READF READ A RECORD DEF *+6 DEF IPDCB DEF FMRR DEF PRADD,I DEF ZERO DEF RL JSB CHFIL JMP TRCHK,I ERROR - STAY AT ERRLU LDA RL SSA IF EOF...POP STACK JMP TR1 JMP TR2 GET NEXT RECORD SKP * * PLACE NEW INPUT FILE ON STACK AND PUSH * TR3 LDA IPDCB+14 GET REC NUMBER OF NEXT RECORD STA RC SAVE AS CURRENT RECORD # JSB CLOSF GO CLOSE THE FILE DEF *+3 DEF IPDCB DEF ZERO LDA RC GET RECORD COUNT JSB PUSH GO PUSH STACK JMP PUSHR ERROR - STACK OVERFLOW JMP TR4 OPEN FILE JSB RECOV INVALID LU SPECIFIED LDA ERR20 RECOVER AND ISSUE JSB GN.ER ERROR MESSAGE JMP TRCHK,I * TR4 JSB FOPEN GO OPEN NEW FILE DEF *+3 DEF IPDCB DEF B400 LDA FMRR AN ERROR? SSA,RSS JMP TRCHK,I RETURN (MAY BE TO CHFIL ITSELF) STA PUSH SAVE ERROR VALUE JSB RECOV RECOVER PREVIOUS ENTRY LDA PUSH RESTORE STA FMRR JSB CHFIL ISSUE ERROR & TRANSFER TO ERRLU JMP TRCHK,I AND RETURN * PUSHR CCA ADA P:TR RESET THE POINTER FOR POP STA P:TR JSB RECOV RECOVER PREVIOUS ENTRY * POPRR CLA INSURE THAT A "TR,ERRLU" IS DONE STA IACOM LDA ERR19 TRANSFER STACK UNDERFLOW OR OVERFLOW JSB GN.ER JMP TRCHK,I SKP RECOV NOP RECOVERS THE PREVIOUSLY OPEN STACK ENTRY JSB POP JMP NONET NONE THERE STA RC JSB FOPEN GO OPEN THE FILE DEF *+3 DEF IPDCB DEF B400 LDA RC STA IPDCB+14 JMP RECOV,I NONET CLA "TR,ERRLU" MUST BE DONE STA IACOM JMP RECOV,I * ERR19 ASC 1,19 ERR20 ASC 1,20 COUNT NOP RC NOP RL NOP B400 OChT 400 SKP * * SUBROUTINE TO PUSH AND POP A STACK * STACK DEFINITION * WORD 6= RECORD COUNT FOR NEXT RECORD TO READ * WORD 5= CARTRIDGE REFERENCE NUMBER * WORD 4= SECURITY CODE * WORD 3= 0 ELSE CH5 & CH6 * WORD 2= 0 ELSE CH3 & CH4 * WORD 1= LU ELSE CH1 & CH2 * WORD 0= TYPE...1=TYPE 0, 2=REGULAR * * PUSH-PLACES FILE NAME AND TYPE ON STACK * LEAVES POINTER AT RECORD COUNT (WORD 6) * ASSUMES PARS2 CONTAINS INFO NEEDED * * CALLING SEQUENCE * LDA RC OF CURRENT FILE * JSB PUSH * (P+1) ERROR RETURN STACK OVERFLOW * (P+2) NORMAL RETURN * (P+3) ERROR RETURN INVALID LU * SPC 1 PUSH NOP STA P:TR,I SAVE CURRENT RECORD COUNT ISZ P:TR INCREMENT TO BEGINNING OF NEXT ENTRY LDA ENDST GET END OF STACK ADDRESS CPA P:TR IF = JMP PUSH,I THEN OVERFLOW DLD PARS2 SAVE TYPE DST P:TR,I ISZ P:TR ISZ P:TR DLD PARS2+2 STORE CHARS 3-6 DST P:TR,I ISZ P:TR ISZ P:TR LDA PARS3+1 GET SECURITY CODE LDB PARS4+1 AND CRN DST P:TR,I ISZ P:TR ISZ P:TR JSB STATE SET THE STATES IACOM AND CMDLU ISZ PUSH INVALID LU ISZ PUSH SET FOR NORMAL RETURN JMP PUSH,I AND RETURN SKP * * SUBROUTINE THAT MOVES THE POINTER TO PREVIOUS * STACK ENTRY * PLACES RECORD COUNT IN A REG * LEAVES POINTER AT REC. COUNT * * CALLING SEQUENCE * JSB POP * ERROR RETURN * NORMAL RETURN * A REG=REC. COUNT * SPC 1 POP NOP LDA P:TR GET CURRENT POINTER ADA MD13 DECREMENT TO PREVIOUS ENTRY LDB STKAD GET STACK ADDRESS CMB,INB ADB A IF CURRENT LESS THAN SSB START OF STACK JMP POP,I NO MORE ENTRIES STA P:TR SET AS NEW POINTER DLD P:TR,I GET OLD ENTRY DST PARS2 ISZ P:TR INCREMENT TO WORDS 3 AND 4 ISZ P:TR DLD P:TR,I DST PARS2+2 ISZ P:TR ISZ P:TR DLD P:TR,I STA PARS3+1 STB PARS4+1 ISZ P:TR ISZ P:TR JSB STATE SET THE STATES IACOM AND CMDLU NOP INVALID LU ERROR NOT POSSIBLE HERE LDA P:TR,I GET RECORD COUNT ISZ POP GET NORMAL RETURN JMP POP,I AND RETURN SPC 2 STKAD DEF STACK BSS 1 STACK BSS 70 ALLOWS A NESTING LEVEL TO 10 ENDST DEF * P:TR DEF STACK-1 MD13 DEC -13 SKP * * STATE SETS THE CURRENT "STATE" FLAGS IACOM AND CMDLU, * REFLECTING THE.NEW COMMAND INPUT DEVICE/FILE. * ASSUMES PARS2 AND PARS2+1 CONTAIN THE TYPE * AND FIRST PARAMTER, RESPECTIVELY * * CMDLU = LU #, ELSE 0 FOR ASCII FILE * IACOM = 0 IF A NON-INTERACTIVE LU, OR FILE * = 1 IF AN INTERACTIVE LU * * RETURN (P+1) ERROR - INVALID INPUT LU SPECIFIED * (P+2) NORMAL * STATE NOP DLD PARS2 GET WORD0 = PARAMETER TYPE CPA P2 & WORD1 = PARAMETER CLB A TYPE 2 IS A FILE NAME STB CMDLU SO IS 0, OR THE LU CPA P2 JMP STATF FILE NAME, GO SET IACOM TO 0 * SSB JMP STATE,I CAN'T BE < 0 ADB N64 CHECK IF LU > 63 SSB,RSS JMP STATE,I TOO BAD! * JSB EXEC GET LU TYPE FROM EQT DEF *+5 DEF NAB13 NO-ABORT 13 CALL DEF CMDLU DEF EQT5 DEF EQT4 JMP STATE,I EXEC ERROR RETURN LDA EQT4 CHECK FOR VALID LU AND M77 IF THE SELECT CODE IS 0 SZA,RSS THEN ITS THE BIT BUCKET JMP STATE,I WE'RE EXPECTING INUT FROM! * LDA EQT5 ALF,ALF GET TYPE TO LOW A AND M77 STA EQT5 SAVE IT LDB CMDLU CPA P5 TYPE 5 ? JSB LUSUB YES, GO RETRIEVE ITS SUBCHANNEL ^ CLB * STATF SZA,RSS TYPE 0, OR TYPE 5'S SUBCHANNEL 0? INB YES, SO AN INTERACTIVE DEVICE STB IACOM 0 = NOT IA, 1 = IA ISZ STATE JMP STATE,I * EQT4 NOP NAB13 OCT 100015 SKP * * LUSUB RETURNS IN (A) THE SUBCHANNEL FOR THE LU * SPECIFIED IN (B). * LUSUB NOP CCA ADA DRT POSITION TO CORRECT DEVICE REFERENCE ADA B TABLE ENTRY FOR THE LU LDA A,I ALF,RAL AND B7 STA SUB05 JMP LUSUB,I SKP * * FILE CHECK ROUTINE * CALLING SEQUENCE * JSB CHFIL * ERROR RETURN * NORMAL RETURN * MUST SEND ERROR PRAM TO FMRR * CHFIL NOP LDA FMRR SSA,RSS ANY ERRORS? JMP FNOER CMA,INA SET POS FOR CONVERT STA FMRR JSB CNUMD GET DEC ERROR CODE DEF *+3 DEF FMRR DEF FERMA ERROR MESSAGE ADDRESS LDA FERMA+2 GET LAST TWO CHARACTERS STA FERMA SAVE FOR MESSAGE LDA IACOM DETERMINE IF WE ARE TO BRANCH TO SZA THE ERROR LU JMP ROUT NO, SINCE ALREADY GET INPUT FROM IA DEVICE * LDA TRCHK SAVE ITS RETURN ADDRESS STA DISKA IN A TEMP LDA ATRCM SIMULATE A "TR,ERRLU" LDB B6 JSB TRCHK DO THE TR LDA DISKA RESTORE THE RETURN ADDRESS STA TRCHK * ROUT JSB SPACE LDA P12 LDB FILEA JSB DRKEY SEND ERROR TO USER RSS FNOER ISZ CHFIL GET NORMAL RETURN IF NO ERROR JMP CHFIL,I AND RETURN SPC 2 FILEA DEF *+1 ASC 5,FMP ERR - FERMA ASC 4, FMRR NOP SKP * * INCREMENT DISK ADDRESS * * THE DISKA SUBROUTINE INCREMENTS THE CURRENT DISK ADDRESS * TO PROVIDE THE ADDRESS OF THE SUCCEEDING SECTOR, * WHETHER THAT SECTOR IS ON THE SAME TRACK OR THE FOLLOWING * TRACK. * * NOTE... THIS ROUTINE IS GOOD FOR MH & 7905 DISC. * ... MUST BE MODIFIED FOR FH. * * CALLING SEQUENCE: * A = CURRENT DISK ADDRESS * B = IGNORED * JSB DISKA * * RETURN: * A = NEXT DISK ADDRESS * B = DESTROYED * DISKA NOP STA B SAVE CURRENT ADDRESS AND M177 ISOLATE SECTOR NUMBER INA ADD 1. CPA SDS#T IF = TO MAX NO. ON SYS. DISC, CLA SET # = 0, STA DISKT AND SAVE NEW SECTOR #. LDA B ISOLATE ALF,ALF TRACK RAL ADDRESS AND M777 IN LOW A. CLB IF NEW CPB DISKT SECTOR # = 0, INA ADD 1 TO TRACK #. * ALF,RAL RESTORE TRACK # TO 14-07, RAL,RAL AND IOR DISKT INSERT SECTOR #. JMP DISKA,I -RETURN. * DISKT NOP -TEMPORARY STORAGE M177 OCT 177 M777 OCT 777 SDS#T DEC 96 SYSTEM DISK SECTORS PER TRACK SDS# NOP SKP * * DISK INPUT DRIVER * * THE DISKI SUBROUTINE CONTROLS THE INPUT FROM THE DISK. * * THIS ROUTINE USES A CORE BUFFER TO MAKE THE DISC APPEAR TO HAVE * 64 WORD SECTORS. * * NOTE... THIS ROUTINE IS GOOD FOR MH & 7905 DISC. * ...MUST BE MODIFIED FOR FH. * * * CALLING SEQUENCE: * A = DISK ADDRESS * B = CORE ADDRESS * JSB DISKI * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * DISKI NOP CLE,ERA SET EVEN SECTOR ADDRESS STB DISKO SAVE CORE ADDRESS FOR MOVE LDB OUBUF+1 GET OUTBUFFER ADDRESS CPA OUBUF REQUESTED SECTOR IN OUTBUFFER? JMP DIS01 YES - GO MOVE * LDB INBUF+1 REQUESTED SECTOR IN INBUFFER? CPA INBUF ? JMP DIS01 YES GO MOVE * ELA SECTOR NOT IN CORE GO CCE TO DRIVER JSB DISKD TO READ THE SECTOR LDA DCMND SET TO SHOW CLE,ERA SECTOR IN STA INBUF CORE LDB INBUF+1 GET BUFFER ADDRESS DIS01 LDA N64 SET COUNT FOR 64 STA DISKT WORDS SEZ IF ODD SECTOR ADB P64 ADD 64 TO LOCAL BUFFER ADDRESS DIS03 LDA B,I MOVE THE STA DISKO,I ISZ DISKO 64 INB WORDS ISZ DISKT TO THE JMP DIS03 USER BUFFER * JMP DISKI,I RETURN SKP * * DISK OUTPUT DRIVER * * THE DISKO SUBROUTINE CONTROLS ALL OUTPUT TO THE * DISC. IT USES A CORE BUFFER TO MAKE THE DISC APPEAR TO HAVE 64 * WORD SECTORS. * * NOTE... THIS ROUTINE IS GOOD FOR MH & 7905 DISC. * ...MUST BE MODIFIED FOR FH. * * CALLING SEQUENCE: * A = DISK ADDRESS * B = CORE ADDRESS * JSB DISKO * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * DISKO NOP STB DISKI SAVE CORE ADDRESS LDB DSKA GET LAST MAX ADDRESS CMB,INB SET NEG AND ADB A SUBTRACT FROM CURRENT ACCESS SSB,RSS IF CURRENT HIGHER STA DSKA THEN RESET MAX. CLE,ERA SET TO EVEN SECTOR CPA OUBUF SAME AS CURRENT SECTOR? JMP DIS02 YES - GO MOVE * ELA,CLE NO - SET TO WRITE CURRENT SECTOR STA DISKA SAVE REQUEST ADDRESS LDA OUBUF GET BUFFER ADDRESS FOR CORE SECTOR LDB OUBUF+1 GET CORE ADDRESS OF THE SECTOR ELA,CLE CLEAR E FOR WRITE JSB DISKD WRITE THE SECTOR LDA DISKA GET THE REQUESTED SECTOR LDB OUBUF+1 AND LOCAL BUFFER ADDRESS CCE SET E FOR READ JSB DISKD READ THE SECTOR LDA DISKA SET TO SHOW IT IS IN CLE,ERA STA OUBUF CORE DIS02 LDB INBUF IF CURRENT WRITE BUFFER CPA B IS THE READ CCB BUFFER THEN STB INBUF SHOW READ BUFFER EMPTY LDB N64 SET COUNTER FOR STB DISKT 64 WORDS LDB OUBUF+1 GET THE LOCAL BUFFER ADDRESS SEZ IF ADDRESS IS ODD ADB P64 64 TO THE BUFFER LOCATION DIS04 LDA DISKI,I MOVE STA B,I THE INB ISZ DISKI TO THE ISZ DISKT LOCAL JMP DIS04 BUFFER AND * JMP DISKO,I RETURN * DSKA NOP SPC 3 OUBUF OCT 2 DEF BUFOU OUTPUT BUFFER ADDRESS INBUF OCT -1 INBUF IN CORE FLAG (IMPOSSIBLE) DEF BUFIN INPUT BUFFER ADDRESS BUFIN BSS 128 INPUT BUFFER FOR DISC BUFOU BSS 128 OUTPUT BUFFER FOR DISC SKP * * THE DISKD SUBROUTINE PERFORMS ALL I/O TO THE CORE-IMAGE * RTE SYSTEM OUTPUT FILE. THROUGHOUT THE GENERATOR, DISC * ADDRESSES ARE USED AND MAINTAINED AS IN THE OFF-LINE * VERSION SINCE RTE REQUIRES LOCATIONS OF ITEMS ON THE DISC. * DISC ADDRESSES ARE RELATIVE TO THE START OF THE DISC, THUS * ARE RELATIVE TO THE START OF THE OUTPUT FILE. * * DISKD CONVERTS THE DISC ADDRESS IN THE A-REG (64 WORD BASIS) * TO A RECORD NUMBER WITHIN THE TYPE 1 OUTPUT FILE. READF * AND WRITF CALLS SPECIFY THIS RECORD NUMBER IN ORDER TO * SATISFY THE RANDOM ACCESS NATURE OF I/O TO THIS FILE. * * CALLING SEQUENCE: * * A = DISC ADDR ON A 64 WORD/SECTOR BASIS. * IF NEGATIVE, IMPLIES THAT THE HEADER RECORD IS * TO BE WRITTEN * B = CORE ADDRESS. * E = 1 FOR READ, * = 0 FOR WRITE. * * JSB DISKD * * RETURN - ALWAYS NORMAL, REGS DESTROYED. * DISKD NOP SSB,RSS IF NEGATIVE,THEN WE'RE JMP DIS0 WRITING THE HEADER RECORD STB HEADR WSET FLAG CMB,INB CLA,INA STA NUM FOR THE WRITE * DIS0 STB BUFR1 STORE CORE ADDR IN STB BUFR2 READF AND WRITF CALLS. CLB ELB STB FMRR TEMP SAVE READ-WRITE CODE. * * COMPUTE RECORD NUMBER * FROM THE DISC ADDRESS. * LDB HEADR SSB JMP DIS1 HEADER RECORD - WRITE IT STA DCMND SAVE DISC ADDR. AND M177 ISOLATE SEJCTOR (64 BASIS). STA SECT1 XOR DCMND ISOLATE THE TRACK. ELA,CLE,ERA ALF,ALF RAL MPY SDS#T MULT. BY # 64 WD SECT/TRACK. ADA SECT1 ADD OFFSET. CLE,ERA FORM 128 WORD SECTOR # (0,1,2,,,) ADA P2 GET RECORD NUMBER (2,3,4,,,) STA NUM SAVE FOR CALL. * DIS1 LDA FMRR SEE IF READ OR WRITE. SZA JMP READD * JSB WRITF WRITE. DEF *+6 DEF ABDCB DEF FMRR BUFR1 NOP DEF IL DEF NUM * LDA FMRR CHECK FOR END OF FILE. ADA P12 SZA JMP CHK NOT END. LDA ERR17 IRRECOVERABLE ERROR! JSB IRERR * READD JSB READF READ. DEF *+7 DEF ABDCB DEF FMRR BUFR2 NOP DEF IL DEF LEN DEF NUM * * IGNORE -12 ERROR (EOF SENSED) ON READ: THAT RECORD * HAS NOT YET BEEN WRITTEN. BUFFER WILL CONTAIN * GARBAGE BUT OK FOR PACKING PURPOSES. * LDA FMRR CPA N12 JMP DISKD,I RETURN * CHK JSB CHFIL CHECK FOR ERRORS. JSB GTERM ERROR - ABORT. CLA STA HEADR RESET JMP DISKD,I NO ERROR, RETURN. * DCMND NOP SECT1 NOP NUM NOP IL DEC 128 LEN NOP N12 DEC -12 P12 DEC 12 ERR17 ASC 1,17 HEADR NOP HEADER RECORD FLAG SKP * * OUTPUT ABSOLUTE PROGRAM WORD * * LABDO PUTS OUT THE CURRENT ABSOLUTE CODE WORD FOR THE PROGRAM * BEING LOADED. IT FILLS THE GAPS WITH ZERO CODES IF THE * CURRENT WORD FALLS BEYOND THE HIGHEST PREVIOUSLY GENERATED * WORD. * * LABDO WORKS FROM A TABLE OF THREE WORDS WHICH DEFINE * THE CURRENT CODE SEGMENT'S DISC ADDRESS. THIS TABLE IS * AS FOLLOWS: * * ABDSK,I IS THE BASE DISC ADDRESS OF THE CURRENT CODE SEGMENT * ABCOR,I IS THE BASE CORE ADDRESS OF THE CURRENT CODE SEGMENT * MXABC,I IS THE MAX CORE ADDRESS OBTAINED SO FAR IN THE SEGMENT * * MXABC,I SHOULD BE INITILIZED TO ABCOR,I AND WILL BE UPDATED BY * THIS ROUTINE AS THE LOAD ADVANCES. * * THIS ROUTINE HAS NO RESTRICTIONS ON BACKING UP AND OVERLAYING. * * CALLING SEQUENCE: * A = CURRENT ABSOLUTE CODE WORD * B = CORE ADDRESS OF THE WORD * JSB LABDO * * RETURN: A-REG HAS PREVIOUS CONTENTS OF MODIFIED WORD. * B-REG HAS CORE ADDRESS PLUS ONE * LABDO NOP SSB IF LESS THAN ZERO THEN JMP LABDO,I OVER FLOW OF MEM SO IGNOR * STB CASAV SAVE THE CORE ADDRESS STA INSAV AND THE CODE WORD ADB L2000 IF ADDRESS SSB IS ON THE JMP LABBP BASE PAGE GO DO SPECIAL * LDA ABCOR SAVE CURRENT BASE PRAM STA LABTM IN LOCAL TEMP LDB A,I IF THE CURRENT CORE LDA P5 ADDRESS IS LESS CPA PTYPE THAN THIS BASE AND SEG. LOAD CMB,INB,RSS JMP LAB01 NOT A SEG LOAD * ADB CASAV IF BOTH CONDITIONS TRUE SSB THEN JSB USER SET UP TO FIX MAIN. LAB01 LDB CASAV RESTORE THE CORE ADDRESS CMB,INB COMPUTE OFFSET FROM OLD ADB MXABC,I MAX INB AND STB LABSK SET THE SKIP COUNT (-# TO SKIP) LDA MXABC,I GET THE CURRENT MAX INA PLUS ONE SSB,RSS IF NOT SKIPPING LDA CASAV USE GIVEN ADDRESS LDB ABCOR,I AND COMPUTE CORE CMB,INB ADDRESS OFSET ADA B FROM THE BASE ADDRESS SSA DIAGOSTIC HALT JSB ABORT SHOULD NEVER BE NEGATIVE CLB PREPARE TO DIVIDE DIV P64 DIVIDE BY THE SECTOR SIZE ADB ADBUF SET DBUF OFFSET STB CURAD SET ADDRESS FOR TSTEL * STA B SAVE THE SECTOR COUNT LDA ABDSK,I GET THE BASE DISC ADDRESS CMB,INB,SZB,RSS SET THE COUNT NEGATIVE JMP FSTAD IF ZERO USE FIRST ADDRESS * STB ABCNT SET THE CALL COUNTER LABSA JSB DISKA BUMP THE DISC ADDRESS ISZ ABCNT THE SPECIFIED NUMBER JMP LABSA OF TIMES * FSTAD STA NEWDA SET THE NEW DISC ADDRESS CPA OLDDA IF SAME AS OLD JMP LABIC SECTOR IS IN CORE * LDA OLDDA GET THE OLD ADDRESS LDB ADBUF AND BUFFER ADDRESS SSA,RSS IF REAL DISC ADDRESS JSB DISKO WRITE THE BUFFER LDB LABSK GET THE SKIP COUNT CMB,INB SET POSITIVE LDA ADBUF IF FIRST WORD OF BUFFER CPA CURAD AND NOT BACKING SSB UP RSS JMP LABRD SKIP THE READ * LDB ADBUF READ IN THE SECTOR LDA NEWDA TO BE MODIFIED JSB DISKI LABRD LDA NEWDA UPDATE THE DISC STA OLDDA ADDRESS LABIC LDA LABSK GET THE SKIP COUNT SSA,RSS IF NONE TO SKIP JMP LABOU JUST OPUTPUT THE WORD * LABFI CLA ELSE FILL JSB TSTEL WITH ZEROS ISZ LABSK DONE? JMP LABFI NO DO NEXT WORD * LABOU LDA INSAV GET THE WORD JSB TSTEL OUTPUT IT STB LBSAV SAVE PRIOR CONTENTS OF WORD LDA CASAV GET THE CORE ADDRESS LDB A IF NEW CMB,INB MAXIMUM ADB MXABC,I THEN SSB SET STA MXABC,I SET IT LDA LABTM RESET JSB SETDS THE PRAMETERS LDA OLDDA IF NEW MAX CMA,INA DISC ADDRESS ADA DSKAD THEN LABEX LDB CASAV INB SSA,RSS SKIP RETURN JMP LABX2 * LDA OLDDA AND STA DSKAD UP DATE THE DISC ADDRESS LABX2 LDA LBSAV SET PRIOR CONTENTS OF WORD JMP LABDO,I AND THEN RETURN SPC 2 LABBP LDB CASAV GET THE CORE ADDRESS ADB ADBP ADJUST FOR DUMMY BASE PAGE ADDRESS LDA B,I RETURN OLD STA LBSAV CONTENTS LDA INSAV OF WORD. STA B,I SET THE WORD CLA SET TO FOURCE EXIT u JMP LABEX AND GO EXIT SPC 2 LABTM NOP NEWDA NOP OLDDA OCT -1 LABSK NOP INSAV NOP CASAV NOP ABDSK NOP ABCOR NOP MXABC NOP LBSAV NOP USED HERE AND IN TSTEL * TO RETURN OLD VALUE OF * MODIFIED WORD. ABCNT NOP CURAD NOP L2000 OCT -2000 DSKAD NOP PTYPE NOP SKP * * SETDS SETS ABDSK,MXABC,ABCOR TO A,A+1,A+2 * FOR USE BY LABDO * SETDS NOP STA ABCOR SET INA THE STA MXABC ADDRESS INA FOR STA ABDSK THE ABS OUTPUT ROUTINE JMP SETDS,I RETURN SPC 3 * USER SETS UP THE LABDO SPECIFICATION ADDRESSES FOR * USER WORK * * CALLING SEQUENCE * * JSB USER * USER NOP LDA DUSER GET DEF TO USER ARRAY JSB SETDS AND SET IT UP JMP USER,I RETURN SPC 3 * USERS SETS UP THE LABDO SPECIFICATION ADDRESSES FOR * USER CODE USING THE CURRENT DISC ADDRESS,AND PPREL * FOR THE CORE ADDRESS. * * CALLING SEQUENCE: * * JSB USERS * USERS NOP JSB USER SET UP THE ADDRESSES JSB SET SET UP THE ADDRESSES JMP USERS,I RETURN SPC 2 * SET SETS THE CURRENT PPREL AND DISC ADDRESSES IN THE * CURRENT LABDO SPECIFICATION TABLE * * CALLING SEQUENCE * * JSB SET * SET NOP LDA DSKAD GET CURRENT DISC ADDRESS STA ABDSK,I SET IT IN THE SPEC BUFFER LDA PPREL GET THE CURRENT CORE ADDRESS STA ABCOR,I AND SET STA MXABC,I IT UP JMP SET,I RETURN SPC 2 * SEGS SETS UP A NEW LABDO AREA FOR SEGMENTS * THE SAME AS USERS. * SEGS NOP JSB SEG GO SET THE ADDRESSES JSB SET SET THE PRAMATERS JMP SEGS,I RETURN SPC 2 * SEG IS THE SEGMENT VERSION OF USER * SEG NOP LDA DSEGS GET THE ADDRESS JSB SETDS SET IT UP JMP SEE:G,I RETURN SPC 3 * SYS SETS UP THE LABDO SPECIFICATION ARRAY TO POINT AT THE * SYSTEM TABLE. * * CALLING SEQUENCE: * * JSB SYS * SYS NOP LDA DLRMA GET THE SYSTEM SPEC. ADDRERSS JSB SETDS SET UP THE ADDRESSES JMP SYS,I RETURN SPC 2 DLRMA NOP DUSER DEF *+1 BSS 3 DSEGS DEF *+1 BSS 3 SKP * * TEST FOR ABSOLUTE BUFFER FULL * * TSTEL PUTS OUT THE CURRENT ABSOLUTE BUFFER WHEN IT * CONTAINS 64 WORDS OF CODE. IN ADDITION, IT CHECKS FOR * * CALLING SEQUENCE: * A = CURRENT WORD * B = IGNORED * JSB TSTEL * * RETURN: A DESTROYED, B HAS OLD CONTENTS * OF ADDRESSED WORD. * TSTEL NOP LDB CURAD IF THE ADB N64 CURRENT ADDRESS CPB ADBUF IS THE END OF THE BUFFER JMP TSTFL THEN IT IS FULL * TSTOU LDB CURAD,I SAVE OLD WORD CONTENTS STA CURAD,I SET THE WORD ISZ CURAD BUMP THE ADDRESS JMP TSTEL,I AND RETURN * TSTFL STA SCW SAVE THE CURRENT WORD LDA OLDDA GET THE DISC ADDRESS LDB ADBUF AND BUFFER ADDRESS AND STB CURAD SET THE NEW BUFFER ADDRESS JSB DISKO OUTPUT THE BUFFER LDA OLDDA UP DATE JSB DISKA THE DISC STA OLDDA ADDRESS LDA SCW RESTORE THE CODE WORD JMP TSTOU AND GO OUTPUT IT * N64 DEC -64 SCW NOP ADBUF DEF *+1 DBUF BSS 64 HED RTGEN CONSTANTS AND WORKING STORAGE. * * * RTGEN CONSTANTS AND WORKING STORAGE. * P13 DEC 13 P14 DEC 14 M77 OCT 77 P64 DEC 64 ZERO NOP M7400 OCT 177400 CMDLU NOP LSTLU NOP ERRLU DEC 1 DEFAULT VALUE IACOM NOP INTERACTIVE COMMAND DEVICE, 0=NO, 1=YES IALST NOP INTERACTIVE LIST DEVICE, 0=NO, 1=YES SECTK NOP DSKLU NOP MAPFG NOP IF COMMON MAPPED BY SYSTEM NUMPG NOP TYPMS NOP CPLSB NOP ASKEY NOP ADDR OF 1ST SHORT ID'S EY NLHWORD. SISDA NOP SKEYA NOP SPC 3 DPRS2 DEF PARS2 . EQU * PARS1 BSS 4 .. EQU * PARS2 BSS 1 PRS21 BSS 3 PARS3 BSS 1 PRS31 BSS 3 PARS4 BSS 1 PRS41 BSS 3 PARS5 BSS 1 PRS51 BSS 3 SPC 1 ORG . BPARS BSS 42 ORG .. PARSA BSS 42 SPC 3 * * I-O LU # * PARMA EQU PARS2+1 SPC 1 * * DEFINE DCB'S * LFDCB BSS 144 ECDCB BSS 144 RRDCB BSS 144 IPDCB BSS 3 INDB3 BSS 141 NMDCB BSS 144 * SPC 2 END EQU * END START \NASMB,N,R,L,C HED RTGN1 - 7900 RTGEN SUBROUTINE SEGMENT. IFN ASSEMBLY OPTION "N" FOR RTE-II NAM RT2G1,5,90 92001-16031 771216 XIF IFZ ASSEMBLY OPTION "Z" FOR RTE-III NAM RT3G1,5,90 92060-16037 771216 XIF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAME: RT2G1/RT3G1 * SOURCE: 92001-18031/92060-18037 * RELOC: 92001-16031/92060-16037 * WRITTEN BY: K. HAHN, J. HARTSELL, G. ANZINGER * * * SUBROUTINE ENTRY POINTS: * ENT DSETU,PTBOT ENT DSTB ENTRY FOR DSTBL. ENT FSEC ENTRY FOR FSECT. ENT DLRM1 * * * * EXTERNAL UTILITY SUBROUTINES: * EXT CRETF,WRITF,CLOSF,FMRR,CHFIL,DISKD EXT DRKEY,SWRET,RNAME EXT DOCON,SPACE,READ,GETNA,GINIT,GETOC,GETAL EXT INERR,YE/NO,LSTE,LSTS,ABORT,LABDO EXT PIOC,TBCHN * * EXT .LST5,OUBUF EXT LWASM,TBUF,SDS#,PPREL * A EQU 0 B EQU 1 SUP SKP * THE FOLLOWING BLOCK OF STORAGE FOR VARIABLES PRECEEDS, * AND IS REFERENCED BY, EACH SEGMENT. IT IS NOT OVERLAID * AS EACH NEW SEGMENT IS LOADED INTO CORE. * * THE LOCATION OF EACH VARIABLE MUST BE THE SAME IN * ALL SEGMENTS. IF A CHANGE IS MADE, MAKE THE SAME * CHANGE IN THE REST OF THE SEGMENTS. * * * SYSCH BSS 1 SUBCHANNEL OF SYSTEM UNIT. AUXCH BSS 1 SUBCHANNEL OF AUX UNIT. DSIZE BSS 1 DISK SIZE -NO. OF TRACKS. DAUXN BSS 1 AUXILIARY DISK SIZE. ADS# BSS 1 AUX DISC SECTORS/TRACK. * * RELOCATION BASE TABLE. RBTA BSS 1 ABSOLUTE PROGRAM BASE. TPREL BSS 1 CURRENT PROGRAM BASE ADDRESS. TPBRE BSS 1 BASE PAGE RELOCATION ADDRESS. COMAD BSS 1 CURRENT COMMON RELOCATION BASE. BSS 1 ABS PROGRAM BASE FOR MR CODE. * WDCNT BSS 1 TEMPORARY WORD COUNTER. DSKSY BSS 1 INITIAL ID SEGMENT DISK ADDRESS IDSP BSS 1 POSITION OF 1ST ID SEG. IN SECT TTYCH BSS 1 SYSTEM TTY CHANNEL NO. * PLFLG BSS 1 PROGRAM LOAD. FLAG = -1/0 = L/NL DSCNT BSS 1 DISK SEGMENT SECTOR COUNT * NXFLG BSS 1 ENT/EXT FLAG = -1/0 EXCNT BSS 1 SYMBOL COUNTER * LCNT BSS 1 CURRENT LBUF COUNT DCNT BSS 1 CURRENT DBUF COUNT CURAI BSS 1 CURRENT IBUF COUNT * CPLS BSS 1 ADDRESS OF TOP OF FIXED CP LINK IMAGE CPL1 BSS 1 ADDRESS OF LOW CURRENT PAGE LINK SPECS. CPL1H BSS 1 NUMBER OF CURRENT PAGE LINKS ASSIGNED CPL2H BSS 1 IN LOW AND HIGH AREA RESPECTIVELY URBP1 BSS 1 LWA R/T DISC RES BP LINK AREA BPMAX BSS 1 MAX USED BASE PAGE LINKAGE +1 CURAK BSS 1 CURRENT KBUF ADDRESS * CURAT BSS 1 CURRENT TBUF ADDRESS TCNT BSS 1 CURRENT TBUF COUNT * CURAP BSS 1 CURRENT PLIST ADDRESS * AMAD BSS 1 CURRENT MLIST ADDRESS * LICNT BSS 1 LONG ID SEGMENT COUNT SICNT BSS 1 SHORT ID SEGMENT COUNT SSCNT BSS 1 BG. SEG ID COUNT COMRT BSS 1 MAXIMUM RT COM LENGTH COMBG BSS 1 MAX BG COM LENGTH * DSKEY BSS 1 CURRENT KEYWORD DISK ADDRESS DSKID BSS 1 DISK ID SEGMENT ADDRESS KEYCN BSS 1 TOTAL KEYWORD COUNT KEYCT BSS 1 CURRENT KEYWORD COUNT * MLIST BSS 11 MEMORY MAP BUFFER * TEMP1 BSS 1 TEMP2 BSS 1 LWH1 BSS 1 LWH2 BSS 1 LWH3 BSS 1 LWH4 BSS 1 L01 BSS 1 * FSYBP BSS 1 FIRST WORD SYS BP LINKAGE SYSAD BSS 1 CURRENT ID SEGMENT ADDRESS * TBREL BSS 1 CURRENT BP RELOC ADDR PBREL BSS 1 INITIAL BP RELOC ADDR * RELAD BSS 1 CURRENT CORE RELOCATION ADDRESS * BSBAD BSS 1 BG SEGMENT BP RELOC ADDR BSPAD BSS 1 BG SEGMENT PROG RELOC ADDR * LFLAG BSS 1 PROGRAMS-LOADED FLAG IMAIN BSS 1 CURRENT MAIN IDENT INDEX. HDFLG BSS 1 HEADING FORMAT FLAG CIDNT BSS 1 CURRENT MAIN IDENT INDEX. * AEQT BSS 1 ADDRESS OF EQUIPMENT TABLE CEQT BSS 1 NO. ENTRIES IN EQUIPMENT TABLE * ASQT BSS 1 ADDR OF DEVICE REFERENCE TABLE CSQT BSS 1 NO. ENTRIES IN DEV. REF. TABLE * AINT BSS 1 ADDRESS OF INTERRUPT TABLE CINT BSS 1 NO. ENTRIES IN INTERRUPT TABLE * DSKIN BSS 1 DISK ADDR OF INT CODE RECORD INTCN BSS 1 RECORD COUNT OF INT CODE * CURIL BSS 1 CURRENT ILIST ADDRESS ILIST BSS 64 USER SYSTEM PROG IDENT ADDR LIST * IDSAV BSS 1 INDEX OF CURRENT IDENT. DSKMN BSS 1 INITIAL MAIN DISK ADDRESS BSSDP BSS 1 INITIAL DISK RES MAIN BSS DISP PRENT BSS 1 PRIMARY ENTRY POINT DBLAD BSS 1 CURRENT DBL ADDRESS REKEY BSS 1 INSTRUCTION TYPE BYTE INSCN BSS 1 INSTRUCTION TYPE COUNTER INSTR BSS 1 CURRENT INSTRUCTION PAGNO BSS 1 CURRENT PAGE NO. OPRND BSS 1 CURRENT OPERAND PLGTH BSS 1 PROGRAM LENGTH DRT2 BSS 1 DISK DRT ENTRY ( SYSTEM) DRT3 BSS 1 AUX DISK DRT ENTRY LIBFG BSS 1 LDTYP BSS 1 SCH1 BSS 1 INDEX OF IDENT OF PGM TO BE SCHEDULED SCH3 BSS 1 ADDRESS OF CURRENT ID SEGMENT SCH4 BSS 1 ADDRESS OF THE SCHEDULED PGM ID SEG FGBGC BSS 1 BACKGROUND USING FG COMMON FLAG $LIBR BSS 1 INDEX OF $LIBR ENT $LIBX BSS 1 INDEX OF $LIBX ENT CUPRI BSS 1 * MEM1 BSS 1 MEM2 BSS 1 MEM3 BSS 1 MEM4 BSS 1 MEM5 BSS 1 MEM6 BSS 1 MEM7 BSS 1 MEM8 BSS 1 MEM9 BSS 1 MEM10 BSS 1 MEM11 BSS 1 MEM12 BSS 1 * IFZ ***** BEGIN MEU CODE ***** COMSZ BSS 1 #WORDS COMMON DECLARED FOR * }v CURRENT MAIN LPCOM BSS 1 LAST PAGE CONTAINING ANY COMMON FPSAM BSS 1 1ST PAGE CONTAINING S.A.M. FWSAM BSS 1 1ST WORD CONTAINING S.A.M. LPSYS BSS 1 LAST PAGE CONTAINING SYS OR LIB FPDSK BSS 1 1ST PAGE DISK PART AREA LOLNK BSS 1 LOW LINK FOR SSGA,LIB, OR SYS HILNK BSS 1 HI LINK USED BY MEM RES PRG BPINC BSS 1 CURR DIRECTION FOR BP LINK * ALLOCATION. +1=UP,-1=DOWN BPLMT BSS 1 WORD AFTER LAST WORD AVAIL * FOR BP LINK ALLOCATION TPMAX BSS 1 HWM FOR RELOCATION OF BG * MAINS AND SEGS MAXPT BSS 1 NUM PARTS. ALLOWED MAT. BSS 1 ADR OF LENGTH WORD * BEFORE MEM ALLOC TABLE (MAT) SSGA. BSS 1 FWA SSGA (LAST WORD SYS * OR LIB +1) FWMRP BSS 1 FWA MEM RES PROG AREA * (NEXT WORD AFTER COMMONS) MAP. BSS 1 PTR TO MEU RES MAP MPFT. BSS 1 PTR TO MPFT ****** END MEU CODE ****** XIF * SECTR BSS 0 BOOTSTRAP BUFFER FORMAT * LBPSY BSS 1 LOWER SYSTEM BP ADDRESS UBPSY BSS 1 UPPER SYSTEM BP ADDRESS DSKBP BSS 1 SYS BP DISK ADDRESS * LRMAN BSS 1 MAIN RESIDENT LOWER ADDRESS URMAN BSS 1 MAIN RESIDENT UPPER ADDRESS DSKRR BSS 1 MAIN RESIDENT DISK ADDRESS * LBMAN BSS 1 MAIN BG LOWER ADDRESS UBMAN BSS 1 MAIN BG UPPER ADDRESS DSKBG BSS 1 MAIN BACKGROUND DISK ADDRESS * SYMAD BSS 1 AVAIL SYS MEM ADDR BGBND BSS 1 BACKGROUND BOUNDARY * DSKAV BSS 1 NEXT AVAILABLE DISK ADDRESS DSKLC BSS 1 DISK ADDRESS OF LIBRARY CODE DSKLB BSS 1 DISK ADDR OF LIBRARY ENTRY PTS DSKUT BSS 1 UTILITY PROG DISK ADDRESS DSKBS BSS 1 DISK ADDR OF MAIN BG DISK RES BP DSKBR BSS 1 CURRENT MAIN BG DISK RES DISK ADu ADICT BSS 1 ADDR OF DISK DICTIONARY LBCNT BSS 1 RESIDENT LIBR ENTRY PT COUNT UTCNT BSS 1 UTILITY LIBRARY COUNT KEYAD BSS 1 CURRENT KEYWORD ADDRESS RTCAD BSS 1 RT COM CORE ADDRESS LBCAD BSS 1 LIBRARY CODE ADDRESS SYBAD BSS 1 ADDR OF FIRST BP LINK FOR BG IDSAD BSS 1 ADDR OF FIRST ID SEGMENT ABSID BSS 1 IDENT ADDR FOR NEXT BG SEG SCAN MAXRP BSS 1 MAXIMUM RT DISK RESIDENT PROG MAXRB BSS 1 MAXIMUM RT DISK RESIDENT BP IDMBS BSS 1 BG MAIN ADDRESS FOR BS REF * TB30 BSS 128 TRACK MAP TABLE #SUBC BSS 1 # SUBCHANNELS DEFINED(7905) SPC 4 ********************************************************* * * * END OF COMMON STORAGE BLOCK FOR ALL SEGMENTS. * * * ********************************************************* SPC 2 DLRM1 DEF LRMAN SKP * * THIS SEGMENT CONTAINS THE DISC DEPENDENT SUBROUTINES * FROM THE MH RTGEN DRIVER SECTION. THE FOLLOWING ARE * THE MODIFICATIONS MADE TO THE OFF-LINE VERSIONS. * * * DSETU - IN RTGN1: CALLED BY MAIN. * --MODIFICATIONS: SCRATCH DISC OMITTED. * * DSSIZ - IN RTGN1; CALLED BY DSETU. * * TSTCH - IN RTGN1; CALLED BY DSETU. * --MODIFICATIONS: INIT1 FLAG OMITTED. * * STDSK - IN RTGN1; CALLED BY PTBOT. * * PTBOT - IN RTGN1; CALLED BY MAIN. * --MODIFICATIONS: INITS CALL OMITTED, * PAPER TAPE BOOT WRITTEN ON FMP FILE. * * INITS - OMITTED. * * INIER - OMITTED. * * DSTBL - IN RTGN1; CALLED BY RTGN5 VIA MAIN. * --SLIGHT MODIFICATION. * * DISKA - IN MAIN; CHANGE REQ'D FOR FH GEN (OK FOR 7905). * --MODIFICATION: NO TEST FOR DEFECTIVE TRACKS. * * TRTST - OMITTED. * * DISKI - IN MAIN; CHANGE REQ'D FOR FH GEN (OK FOR 7905). * * DISKO - IN MAIN; CHANGE REQ'D FOR FH GEN (OK FOR 7905). * * DTSET - OMITTED. * * FSECT - IN RTGN1; CALLED BY RTGN3 VIA MAIN. * --MODIFICATIONS: OUBUF IS AN ENT IN MAIN. * * DISKD - IN MAIN; CHANGE REQ'D FOR FH GEN (OK FOR 7905). * --MODIFICATIONS: TRANSLATES DISC ADDR TO RECORD * NUMBER, USES FMP WRITF/READF CALLS FOR ACCESS * TO CORE-IMAGE RTE SYSTEM OUTPUT FILE. * * ATB30 - TRACK MAP TABLE - LOCATED IN BSS BLOCK WHICH * PRECEEDS ALL SEGMENTS. NEEDS DIFFERENT SIZE * FOR 7905. HED MH RTGEN - CONSTANTS AND ADDRESSES BEGIN JMP SWRET SEGMENT'S ENTRY POINT ASBUF DEF ASPBF+1 ADDRESS OF 9-WORD BUFFER IN BOOT ABOOT DEF START ADDRESS OF BOOTSTRAP LOADR DSKSC BSS 1 SUBCHANNEL COUNTER. * #DATA ABS I/OTB-I/OTC NO. OF DATA I/O INSTRUCTIONS #CMND ABS I/OTC-I/OTD NO. OF COMMAND I/O INSTRUCTIONS INTMP BSS 1 TEMP FOR INITILIZATION ROUTINES MS3 DEF *+1 SUBCHANNEL NUMBER MESAGE ASC 2, MES1 DEF *+1 ASC 15,# TRKS, FIRST TRK ON SUBCHNL: * MES4 DEF MES04 MES04 ASC 8,BOOT FILE NAME? MES05 ASC 8,SYSTEM SUBCHNL? MES07 ASC 9,AUX DISC SUBCHNL? MES40 DEF *+1 ASC 13,# 128 WORD SECTORS/TRACK? "/E" ASC 1,/E "?0" ASC 1,?0 MES5 DEF MES05 MES7 DEF MES07 TTEMP NOP STEMP NOP * ATB30 DEF TB30 HED INTERACTIVE DISC SET UP SECTION * * THE FOLLOWING MESSAGES ARE PRINTED DURING THE INITIALIZATION * PHASE, WITH THE SPECIFICATIONS FOR EACH VALID RESONSE. * * * MESSAGE RESPONSE * * MH DISC CHANL? ENTER 2 OCTAL DIGITS * * # TRKS, FIRST TRK ON SUBCHNL: * 0? * . ENTER TWO 3 DIGIT DECIMAL NOS. * . SEPERATED BY A COMMA * . OR * . /E * 7? * * # 128 WORD SECTORS/TRACK? ENTER 3 DECIMAL DIGITS * * SYSTEM SUBCHNL? ENTER 1 OCTAL DIGIT * * AUX DISC (YES OR NO)? ENTER YES OR NO * * AUX DISC SUBCHNL? ENTER 1 OCTAL DIGIT SPC 3 DSETU NOP ENTRY POINT FOR QUESTION SECESSION. LDB $TB31 PUT TB31 IN THE LST :\ JSB LSTE NOP IGNOR ALREADY THERE RETURN CHNLD LDA P13 LDB MESS2 MESS2 = ADDR: DISK CHNL? JSB READ PRINT MESSAGE, GET REPLY LDA P2 SET FOR 2 OCTAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP CHNLD REPEAT INPUT * STA DCHNL SET DISK CHNL # FOR BOOTSTRAP. ADA N8 MUST BE >=10 SSA,RSS JMP STB30-1 OK JSB INERR JMP CHNLD ASK AGAIN * JSB SPACE SET UP TRACK MAP STB30 LDA P29 SEND MESSAGE: LDB MES1 # TRKS, FIRST TRK ON SUBCHNL: JSB DRKEY PRINT MESSAGE LDA ATB30 SET ADDRESSES STA STEMP FOR INPUT *TEMP* STA INTMP AND CLEAR LOOPS ADA P8 SET # TRACKS ADDRESS STA TTEMP * TEMP * LDB N16 CLEAR CLA THE TB30. STA INTMP,I TRACK ISZ INTMP MAP INB,SZB STEP COUNT - DONE? JMP TB30. NO - CLEAR NEXT WORD * STA DSKSC SET 0 DEFINED SUBCHANNELS TB30A STB INTMP SAVE CURRENT UNIT ADB "?0" ADD CONSTANT TO GET ?X BLF,BLF AND ROTATE TO GET X? STB MS3+2 SET IN MESSAGE LDB MS3 GET MESSAGE ADDRESS LDA P4 AND LENGTH JSB READ GO GET THE ANSWER LDA N2 GET FIRST JSB GETNA TWO CHARACTERS CPA "/E" /E? JMP TB30X YES - GO CHECK FURTHER * JSB GINIT NO - REINITIALIZE LBUF SCAN LDA N3 CONVERT 3 DIGITS JSB GETOC DECIMAL JMP TB30E ERROR - * STA TTEMP,I SET # TRACKS SZA,RSS IF ZERO JMP TB30B GO UPDATE POINTERS * JSB GETAL NOT ZERO - GET NEXT CHARACTER CPA BLANK COMMA IN? RSS YES - SKIP JMP TB30E NO - ERROR * LDA N3 SET FOR JSB DOCON 3 DECIMAL DIGITS AND CONVERT JMP TB30E+1 ERROR * STA STEMP,I SET FIRST TRACK OF CHANNEL LDA TTEMP,I GET CHANNEL SIZE STA DSIZE SET SYSTEM LDA INTMP TO THIS SUBCHANNEL STA SYSCH FOR DEFAULT ISZ DSKSC STEP TOTAL SUBCHANNEL COUNT TB30B ISZ STEMP STEP TABLE ISZ TTEMP ADDRESSES ISZ INTMP STEP SUBCHANNEL TB30F LDB INTMP IF CURRENT SUBCHANNEL CPB P8 IS 8 THEN JMP TB30Y DONE SO GO EXIT * JMP TB30A NOT 8 - GO ASK FOR NEXT ONE * SPC 1 TB30E JSB INERR TELL HIM THERE WAS AN ERROR CLA CLEAR STA TTEMP,I CURRENT # TRACKS JMP TB30F GO ASK AGAIN * SPC 1 TB30X JSB GETAL /E ENTERED SZA ANY THING ELSE? JMP TB30E YES - ERROR * TB30Y LDA DSKSC NO - GET NUMBER OF CHANNELS CMA,INA,SZA DEFINED - IS IT ZERO? JMP TB30Z NO - SKIP * JSB INERR YES - TELL HIM JMP STB30 AND RESTART * TB30Z JSB DSSIZ GET THE SYSTEM DISC # SECT./TRK. STA SDS# AND SET IT. * SPC 1 JSB SPACE ISYSC LDA P15 SEND MESSAGE: LDB MES5 SYSTEM SUBCHNL? JSB READ GET ANSWER LDA N5 JSB DOCON GO CONVERT JMP ISYSC ERROR - TRY AGAIN * JSB TSTCH TEST FOR LEGAL SUBCHANNEL STB DSIZE SET SYSTEM SIZE STA SYSCH SET SYSTEM SUBCHANNEL RSS * SETEM CLA LDB ATB30 EXTRACT INFO ADB A CONCERNING SYSTEM LDB B,I SUBCHANNEL STB T#AC0 AND STORE VALUES FOR BOOT LDB A CLE,ERB STB UN#IT * XOR P1 SET PLATTER NUMBER. ALF,ALF RAL STA H#AD * LDA S#EKC ADA B STA S#EKC SET HEAD # IN SEEK COMMAND LDA R#DCM ADA B STA R#DCM AND IN THE READ COMMAND SPC 1 AUXIN CLA PRESET TO SHOW NO AUX DISC STA DAUXN SET CHANNEL TO ZERO STA ADS#  CCA AND SUBCHANNEL STA AUXCH TO -1. JSB SPACE AUXDS LDA P31 SEND MESSAGE LDB MES6 AUX DISC (YES OR NO OR # TRKS)? JSB READ GO GET ANSWER LDA N3 FIRST TRY FOR A DECIMAL JSB GETOC NUMBER JMP AUX0 NO TRY FOR YES OR NO * STA TBUF SAVE THE NUMBER JSB GETAL END OF INPUT? SZA JMP AUX0 NO LET YE/NO SEND ERROR * LDA TBUF RESTORE THE SIZE TO A AND STA DAUXN SET THE AUX DISC SIZE JSB DSSIZ GET ITS # SECTORS / TRACK JMP AUX3 GO SET IT * AUX0 JSB GINIT RESET THE SCANNER JSB YE/NO TRY FOR YES OR NO JMP AUXDS NO MUST BE BAD ANSWER * JMP STSCR NO - SKIP * CLA,INA YES - IF ONLY ONE CPA DSKSC DISC SUBCHANNEL THEN JMP AUX4 THEN WRONG ANSWER TRY AGAIN * JSB SPACE YES - SET UP AUX UNIT AUXUN LDA P17 SEND QUESTION: LDB MES7 AUX DISC SUBCHNL? JSB READ GO SEND AND GET ANSWER LDA N5 JSB DOCON JMP AUXUN ERROR - TRY AGAIN * JSB TSTCH TEST FOR LEGAL UNIT STB DAUXN SET SIZE OF AUX UNIT CPA SYSCH SAME AS SYSTEM? RSS YES - ERROR SKIP JMP AUX2 NO - GO SET UP * AUX4 JSB INERR SEND ERROR MESSAGE JMP AUXIN AND TRY AGAIN * SPC 1 AUX2 STA AUXCH SET AUX CHANNEL LDA SDS# SET AUX TRK SIZE TO SAME AS SYS DISC AUX3 STA ADS# SET AUX DISC # SECT. TRACK SPC 1 STSCR JMP DSETU,I RETURN TO MAIN LINE CODE SPC 1 * * GET # SECTORS FOR DISC * DSSIZ NOP JSB SPACE NEW LINE #SEC1 LDA P25 LDB MES40 MES40 = ADDR: # 128 WORD SECTORS/TRACK?$$ JSB READ PRINT MESSAGE, GET REPLY LDA N3 SET FOR 3 DECIMAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP #SEC1 <:6 REPEAT INPUT * ALS DOUBLE FOR 64 WORD SECTORS JMP DSSIZ,I RETURN SKP SPC 3 * SUBROUTINE TO TEST LEGALITY OF * A SUBCHANNEL. THE TEST CONSISTS * OF LOOKING FOR THE DESIRED * CHANNEL IN THE TRACK MAP. * CALLING SEQUENCE * * P-1 ERROR RETURN * P JSB TSTCH * P+2 NORMAL RETURN CHANNEL IN A SIZE IN B SPC 1 * A ON ENTRY IS ASSUMED TO BE THE SUBCHANNEL TO BE CHECKED. * ERROR EXIT IS P-1 * IF THE SUBCHANNEL IS LEGAL IT IS RETURNED IN A * AND B IS THE NUMBER OF TRACKS ON THAT CHANNEL SPC 1 TSTCH NOP LDB A MAKE SURE THAT SUBCHANNEL ADB N8 SPECIFIED IS <=7 SSB,RSS JMP TSTER IT ISN'T * LDB ATB30 GET TABLE ADDRESS ADB A ADD SUBCHANNEL ADB P8 STEP TO # TRACKS LDB B,I GET # TRACKS IN B SZB IF ZERO - ERROR - SKIP JMP TSTCH,I ELSE OK - RETURN B= # TRACKS * TSTER JSB INERR SEND ERROR MESSAGE LDA TSTCH GET RETURN ADDRESS ADA N2 ADJUST FOR P-1 JMP A,I AND RETURN O<* N5 DEC -5 N8 DEC -8 SKP * * INSERT CHNL NO. IN INSTRUCTION * * THE STDSK SUBROUTINE SETS THE CURRENT DISK CHANNEL * NOS. IN THE I/O INSTRUCTIONS. * * CALLING SEQUENCE: * A = NO. WORDS TO BE CONFIGURED (NEG.) * B = ADDRESS OF INSTRUCTION ADDR LIST * JSB STDSK * * RETURN: * A = DESTROYED * B = NEXT INSTRUCTION ADDRESS * STDSK NOP STA TBUF SAVE NO. OF INSTRUCTIONS STDS1 LDA B,I GET INSTRUCTION AND M7700 ISOLATE INSTRUCTION CODE IOR DCHNL INSERT CHANNEL NO. STA B,I SET INSTRUCTION IN CODE INB INCR INSTRUCTION ADDRESS ISZ TBUF SKIP - ALL INSTRUCTIONS CONFIG. JMP STDS1 CONFIGURE NEXT INSTRUCTION JMP STDSK,I RETURN * SPC 2 A#DTK DEF #WDTK HED MH RTGEN CONFIGURE AND COMPLETE INITILIZATION PTBOT NOP CONFIGURE/PUNCH BOOT ENTRY POINT LDA #DATA GET THE NUMBER OF DATA CHANNEL INSTRUCTIONS LDB HPDSK GET THE ADDRESS OF THE DISK ADDRESSES JSB STDSK GO SET DATA CHANNEL ADDRESSES ISZ DCHNL STEP TO COMMAND CHANNEL LDA #CMND GET NUMBER OF COMMAND CHANNEL INSTRUCTIONS JSB STDSK SET COMMAND CHANNEL ADDRESSES SPC 1 LDB A#DTK GET THE TABLE ADDRESS IN BOOT LDA SDS# SET ALF,RAL THE RAL NUMBER OF WORDS STA B,I PER TRACK INB STEP BOOT ADDRESS LDA T#AC0 SET THE TRACK ADDRESS FOR TRACK 0 STA B,I IN THE BOOT INB SET THE LDA S#EKC SEEK COMMAND STA B,I LDA SDS# SET THE RAR,RAR # OF SECTORS/SURFACE INB STA B,I INB CMA,INA SET NEGATIVE OF ABOVE STA B,I INB LDA H#AD SET THE HEAD STA B,I BITS INB LDA R#DCM SET THE READ COMMAND STA B,I INB LDPA UN#IT AND THE UNIT STA B,I INB LDA B,I GET THE TABLE ADDRESS AND M1777 AND MASK STA TBUF+1 TO PAGE OFFSET LDA LWASM GET LWAM AND M0760 MASK TO PAGE STA TBUF SAVE IOR TBUF+1 ADD THE PAGE OFFSET STA B,I SET THE TABLE ADDRESS LDA BADD GET THE BOOT ADDRESS AND M1177 MASK TO PAGE BITS AND IOR TBUF ADD PAGE BITS AND STA BADD SET FOR THE PAPER BOOT RAL,CLE,ERA CLEAR THE SIGN BIT STA RECNT SET IN THE DR BOOT STA SPCAD A COUPLE OF TIMES * LDB ABOOT OUTPUT THE BOOTSTRAP CLA,CLE TO PSEUDO TRACK 0 SECTOR 0 JSB DISKD IN CORE IMAGE OUTPUT FILE. SKP BOOT0 JSB SPACE NEW LINE LDA P15 SEND MESSAGE LDB MES4 BOOT FILE NAME? JSB RNAME GET THE NAME. * JSB GINIT IF 0 ANSWER, THEN CLA,INA NO BOOT WANTED JSB GETNA CPA ZERO JMP PTBOT,I * JSB CRETF CREATE BOOT FILE. DEF *+5 DEF BTDCB DEF P1 DEF P7 DEF M2300 * JSB CHFIL CHECK FILE STATUS. JMP BOOT0 ERROR- TRY AGAIN. * LDA NBLC GET BOOT LENGTH STA TBUF SET FOR CHECK SUM CACULATION LDA STRAP GET LOAD ADDRESS CLB,RSS INITIALIZE CHECKSUM BOOT1 ADB A,I COMPUTE CHECKSUM INA STEP ADDRESS ISZ TBUF DONE? JMP BOOT1 NO - GET NEXT WORD * STB A,I YES - SET CHECKSUM * JSB WRITF OUTPUT THE BOOTSTRAP FILE. DEF *+5 DEF BTDCB DEF FMRR DEF STRAP+1 DEF BOOTL * LDA BTDCB+2 IF ITS A TYPE 0 FILE SZA THEN WRITE AN EOF JMP BOOTC NO JSB WRITF DEF *+5 DEF BTDCB DEF FMRR DEF STRAP+1 DEF N1 * BOOTC JSB CLOSF CLOSE BOOT FILE. DEF *+2 DEF BTDCB * JMP PTBOT,I RETURN TO MAIN. SPC 2 MESS2 DEF *+1 ASC 7,MH DISC CHNL? MES6 DEF *+1 ASC 16,AUX DISC (YES OR NO OR # TRKS)? HPDSK DEF I/OTB,I ADDRESS OF I/O INSTRUCTION LIST DCHNL BSS 1 DISK I/O CHANNEL NO. (OCTAL) P7 DEC 7 N1 DEC -1 BTDCB BSS 144 BOOT FILE DCB M2300 OCT 2300 ZERO OCT 60 HED MH RTGEN DISC DRIVE I/O INSTRUCTION ADDRESSES I/OTB DEF DSKDA DATA CHANNEL DEF DSKDB DEF DSKDC DEF DSKDD DEF DSKDE DEF DSKDF DEF DSKDG DEF DSKDH DEF DSKDI DEF DSKDJ DEF DSKDK DEF DSKDL DEF DSKDM DEF DSKDN DEF DSKDO DEF DSKDP DEF DSKDQ DEF DSKDR DEF DSKDS DEF DSKDZ I/OTC DEF DSKCA COMMAND CHANNEL DEF DSKCB DEF DSKCC DEF DSKCD DEF DSKCE DEF DSKCF DEF DSKCG DEF DSKCG DEF DSKCH DEF DSKCI DEF DSKCJ DEF DSKCK DEF DSKCL DEF DSKCM DEF DSKCP DEF DSKCQ DEF DSKCR DEF DSKCS DEF DSKCT DEF DSKCU DEF DSKCV I/OTD EQU * HED MH RTGEN ** SECT. 0 TRK 0 BOOTSTRAP ** * * THE FOLLOWING LOADER PERMITS LOADING OF THE RESIDENT PORTIONS * OF THE REAL TIME MONITOR. THE LOADER IS LOCATED ON SECTOR 0/1, * TRACK 0 OF THE SYSTEM DISC. IT IS GENERATED BY THE SYSTEM * GENERATOR AND CONSISTS OF: * * (1) THE INSTRUCTIONS REQUIRED FOR LOADING THE SYSTEM * (2) THE DISK AND CORE ADDRESSES SPECIFYING LOADING * * * THE ADDRESSES REQUIRED FOR LOADING ARE THE FOLLOWING: * * (A) BASE PAGE LINKAGES * (1) LOW CORE ADDRESS * (2) HIGH CORE ADDRESS * (3) DISK ADDRESS OF ABSOLUTE CODE * * (B) SYSTEM, RT RESIDENT MAIN * (1) LOW CORE ADDRESS * (2) HIGH CORE ADDRESS * (3) DISK ADDRESS OF ABSOLUTE CODE * * (C) BG RESIDENT MAIN * (1) LOW CORE ADDRESS * (2) HIGH CORE ADDRESS * q (3) DISK ADDRESS OF ABSOLUTE CODE * * THE PROGRAM IS ASSUMED TO BE LOADED IN THE AREA JUST PRECEDING * THE PROTECTED LOADER. * START ABS LDB-O+ASPBF GET ADDRESS OF DISK SPEC. BUFFER ABS STB-O+SPCAD SET CURRENT SPBUF ADDRESS ABS JSB-O+PLOAD LOAD MAIN SYSTEM, RT RESIDENTS ABS JSB-O+PLOAD LOAD MAIN BG RESIDENTS ABS JSB-O+PLOAD LOAD BP LINKAGES JMP 3B,I TRANSFER TO RT MONITOR ENTRY PT. * PLOAD ABS 2000B-OO+START ADDRESS OR BOOT WHEN BBDL'ED ABS LDB-O+SPCAD+I+I GET LOW CORE ADRESS ABS ISZ-O+SPCAD INCR CURRENT SPBUF ADDRESS ABS LDA-O+SPCAD+I+I GET HIGH CORE ADRESS ABS ISZ-O+SPCAD INCR CURRENT SPBUF ADDRESS CMA,CCE,INA COMPLEMENT, SET DIRECTION BIT ADA B SET A = TOTAL WORD COUNT RBL,ERB SET DIRECTION BIT IN CORE ADDR CLC 2 OTB 2 SET MEMORY ADDRESS REGISTER ABS STA-O+RECNT INITIALIZE REMAINING COUNT ABS LDA-O+SPCAD+I+I GET THE DISK ADRESS ABS AND-O+M.177 ISOLATE THE SECTOR ADDRESS STA B SET IN B ABS XOR-O+SPCAD+I+I ISOLATE THE TRACK ADRESS ABS ISZ-O+SPCAD STEP THE PRAM TABLE LOCATION ALF,ALF ROTATE TO RAL LOW A ABS ADA-O+TBASE ADD TRACK ZERO TO GET ABSOLUTE TRACK ABS STA-O+T#ACK SAVE FOR ADDRESSING BRS ADDJUST SECTOR COUNT FOR 128 WORD SECTORS LDA B GET SECTOR TO A ALF,ALF MULTIPLY BY RAR 128 CMA,INA AND SUBTRACT FROM SLOAD ABS ADA-O+#WDTK NUMBER OF WORDS PER TRACK ABS STA-O+P#WDS SET POSITIVE # WORDS CMA,INA AND ABS STA-O+N#WDS NEGATIVE # WORDS THIS TRACK RSS SKIP OVER BBDL ADDRESS DEF ABS 2000B+BENT-OO DEFINE ADDRESS OF BENT ABS LDA-O+RECNT GET NUMBER LEFT SSA,RSS IF POSITIVE ABS JMP-O+PLOAD+I+I DONE - SO EXIT * ABS ADA-O+P#WDS ELSE SET TO READ ABS STA-O+RECNT SAV]E REMANING COUNT SSA NEXT TRACK CLA USE MIN. OF NUMBER ON TRACK OR ABS ADA-O+N#WDS NUMBER LEFT STC 2 SET DMA FOR WORD COUNT OTA 2 AND SEND IT ABS LDA-O+T#ACK GET THE TRACK ADDRESS DSKDA OTA 0 AND SEND DSKDB STC 0,C IT ABS LDA-O+SKCMD GET THE SEEK DSKCA CLC 1 COMMAND AND DSKCB OTA 1 SEND IT DSKCC STC 1,C START SEEK ABS ADB-O+N#SCT SUBTRACK NUMBER PER SIDE SSB,RSS IF SIDE TWO ABS ADB-O+.400 ADD HEAD BIT SSB ELSE ABS ADB-O+P#SCT ADD BACK TO GET SECTOR ABS ADB-O+B#MSK ADD THE SUBCHANNEL HEAD BIT DSKDC SFS 0 WAIT FOR TRACK ABS JMP-O+DSKDC * DSKDD OTB 0 SEND HEAD/SECTOR WORD DSKDE STC 0,C TELL THE CONTROLLER ABS LDA-O+R#CMD GET THE READ COMMAND DSKCD SFS 0 WAIT FOR SEEK ABS JMP-O+DSKCD * DSKCE OTA 1 SEND READ COMMAND DSKDF STC 0,C SET UP FOR READ DSKCF CLC 1 STC 6,C START DMA DSKCG STC 1,C START READ DSKCH SFS 1 WAIT FOR END ABS JMP-O+DSKCH * STF 6 DISABLE DMA FOR STATUS DSKDG STC 0,C DO ABS LDA-O+U#NIT STATUS DSKCI CLC 1 DSKCJ OTA 1 ON UNIT DSKCK STC 1,C DSKDH SFS 0 WAIT FOR STATUS ABS JMP-O+DSKDH * DSKDI LIA 0 GET STATUS SLA IF BAD HLT 31B STATUS HALT SLA ON RESTART ABS JMP-O+START START OVER * CLB SET SECTOR TO ZERO FOR REST OF SEGMENT ABS ISZ-O+T#ACK STEP THE TRACK ADDRESS CLA AND ABS JMP-O+SLOAD GO LOAD * * DATA AREA T#ACK DEC -128 MOVE COUNT FOR BBDL MOVE .400 OCT 400 M.177 OCT 177 P#WDS NOP N#WDS NOP RECNT OCT 1500 CONFIGURED TO BBL ADDRESS SPCAD OCT 1500 CONFIGURED TO BBL ADDRESS #WDTK DEC 3072 THESE 8 TBASE NOP - SYSTEM TRACK SKCMD OCT 30000 P#SCT DEC -12 WORDS ARE N#SCT DEC 12 B#MSK NOP SET BY THE R#CMD OCT 20000 U#NIT NOP GENERATOR ASPBF ABS ASPBF+1-O BSS 9 SYSTEM LOADING SPECIFICATIONS BENT NOP JSB HERE FROM BBDL STF 6 CLEAN UP DMA CLC 0,C AND THE I/O SYSTEM HLT 77B DISABLE THE LOADR ENABLE SWITCH AND RUN * DRBOT ABS LDA-OO+PLOAD+I+I MOVE 128 WORDS TO BBL-128 ABS STA-OO+RECNT+I+I ABS ISZ-OO+PLOAD ABS ISZ-OO+RECNT ABS ISZ-OO+T#ACK DONE? ABS JMP-OO+DRBOT NO GET NEXT WORD * ABS JMP-OO+SPCAD+I+I YES GO EXECUTE THE BOOT * * * * THE FOLLOWING EQU SECTION ALLOWS THE BOOTSTRAP * TO BE LOCATED ANYWHERE IN CORE WHEN OUTPUT TO * DISK, BUT EXECUTABLE FROM THE LAST PAGE OF CORE. * * * O EQU START-1500B SET FOR START AT 1500 PAGE RELATIVE * LDB EQU 066000B LDB STB EQU 076000B STB ADB EQU 046000B ADB JSB EQU 016000B JSB ISZ EQU 036000B ISZ LDA EQU 062000B LDA STA EQU 072000B STA ADA EQU 042000B ADA AND EQU 012000B AND XOR EQU 022000B XOR JMP EQU 026000B JMP I EQU 040000B INDIRECT BIT (CODE AS I+I) * * THE FOLLOWING EQU ARE USE TO SET UP THE BBDL MOVE CODE * WHEN BOOTED BY THE BBDL THE LOADR IS LOADED TO 2011 * AND JSB'ED TO AT 2055,I (44 RELATIVE) * OO EQU START-11B RELATIVE PAGE LOCATION OF START HED MOVE HEAD PAPER TAPE BOOT STRAP * MOVING HEAD BOOTSTRAP * THIS BOOTSTRAP IS CONFIGURED AND PUNCHED BY THE GENERATOR AND IS * USED TO LOAD THE DISC RESIDENT BOOTSTRAP FROM SYSTEM TRACK * 0 SECTOR 0. * SPC 3 STRAP DEF *+1 ADDRESS OF THE BOOT STRAP ABS BL256 LENGTH OF LOADR IN HIGH HALF OF WORD ABS BORG LOAD ADDRESS S#ART CLC 0,C STOP EVERTHING - RTE IS COMMING! LDA T#AC0-ADCON SEEK DSKDJ OTA 0 TO DSKDK STC 0,C FIdRST SYSTEM LDA S#EKC-ADCON TRACK DSKCL OTA 1 DSKCM STC 1,C AND DSKDS SFS 0 JMP *-1-ADCON HEAD * LDA H#AD-ADCON DSKDL OTA 0 START DSKDM STC 0,C SEEK LDA DSKDR-ADCON SET OTA 6 UP CLC 2 DMA LDB BADD-ADCON BUFFER ADDRESS OTB 2 LDA DM128-ADCON 128 WORDS STC 2 OTA 2 DSKDZ SFS 1 WAIT FOR JMP *-1-ADCON SEEK * LDA R#DCM-ADCON SET DSKCP CLC 1 UP DSKCQ OTA 1 THE DSKDN STC 0,C READ STC 6,C DSKCR STC 1,C START READ DSKCS SFS 1 WAIT JMP *-1-ADCON FOR IT * STF 6 CLEAR DMA FOR STATUS DSKDO STC 0,C DO LDA UN#IT-ADCON STATUS DSKCT CLC 1 DSKCU OTA 1 DSKCV STC 1,C DSKDP SFS 0 WAIT FOR JMP *-1-ADCON STATUS * DSKDQ LIA 0 RBL,CLE,ERB REMOVE SIGN BIT FROM ADDRESS SLA,RSS ANY ERRORS? JMP B,I NO. GO TO THE EXTENSION * CPA JSTLD-ADCON IS THIS THE FIRST TIME? RSS YES, TRY AGAIN. HLT 11B NO HALT JMP S#ART-ADCON RETRY ON RESTART * JSTLD OCT 040001 DM128 DEC -128 BADD ABS START-O+I+I THESE UN#IT NOP SEVEN H#AD NOP WORDS S#EKC OCT 30000 ARE R#DCM OCT 20000 SET BY DSKDR OCT 120000 THE T#AC0 NOP GENERATOR SPC 1 HNDR JMP S#ART-ADCON MUST BE AT 100B WHEN LOADED * NOP LOCATION FOR CHECK SUM SPC 2 BORG EQU 100B+S#ART-HNDR RUN TIME ORG OF PAPER BOOT ADCON EQU HNDR-100B ADDRESS ADJUSTING CONSTANT. BL EQU HNDR-S#ART+1 BOOT LENGTH BL4 EQU BL+BL+BL+BL BOOT LENGTH TIMES 4 BL16 EQU BL4+BL4+BL4+BL4 TIMES 16 BL64 EQU BL16+BL16+BL16+BL16 TIMES 64 BL256 EQU BL64+BL64+BL64+BL64 TIMES 256 BOOTL ABS BL+3 LENGTH FOR PUNCHING NBLC ABS -BL-2 BOOT LENGTH FOR CHECK SUM CACULATION HED RTGN1 - MH RTGEN SUBROUTINE SEGMjENT. * * GENERATE $TB31 TRACK MAP TABLE. * DSTB EQU * *** ENTRY POINT FOR DSTBL *** DSTBL NOP * GENERATE TB31 SPC 2 LDA ATB30 GET THE TABLE ADDRESS STA TBUF SET FOR INDEXING LDA N16 GET NUMBER OF WORDS STA TBUF+1 SET COUNT LDB $TB31 GET THE LST ENTRY JSB LSTS FOR $TB31 JSB ABORT BAD NEWS NO $TB31 ????? LDB PPREL GET THE CORE ADDRESS FOR TABLE STB .LST5,I SET IN THE SYMBOL TABLE * DSTB1 LDA TBUF,I GET WORD FROM TABLE JSB LABDO SEND TO DISC ISZ TBUF STEP TABLE ADDRESS ISZ TBUF+1 STEP COUNT - DONE? JMP DSTB1 NO - GET NEXT ENTRY * STB PPREL RESET NEW CORE ADDRESS * * SAVE THE SYSTEM SUBCHANNEL INFORMATION IN THE HEADER * RECORD, REUSING THE TMT BUFFER * LDA SYSCH GET THE SYSTEM SUBCHANNEL'S ADA ATB30 FIRST TRACK # LDB A,I STB TB30 AND STORE IT IN THE FIRST WORD ADA P8 LDB A,I GET THE # TRACKS STB TB30+1 AND SAVE IT JMP DSTBL,I RETURN SPC 3 $TB31 DEF *+1 ASC 3,$TB31 * SKP * * FSECT IS A ROUTINE TO SET LOAD SPECS IN THE LOAD SPEC. * TABLE IN THE DISC RESIDENT BOOT EXTENSION AND TO * FLUSH THE FINAL SECTOR FROM CORE AT THE END OF * GENERATION. * * CALLING SEQUENCE: * * LDA SPEC BUFFER ADDRESS I.E. ADDRESS OF THE NINE WORDS * JSB FSECT * RETURN REGS. MEANINGLESS * FSEC EQU * *** ENTRY POINT FOR FSECT *** FSECT NOP STA DSTBL SAVE THE ADDRESS FOR A BIT LDB ABOOT GET THE CLA,CCE BOOT FROM JSB DISKD THE DISC LDA DSTBL GET THE FROM ADDRESS LDB ASBUF AND THE TO ADDRESS JSB MOVW AND MOVE THE WORDS DEC -9 LDB ABOOT NOW WRITE CLA,CLE THE BOOT JSB DISKD BACK TO THE DISC  CLE DLD OUBUF FLUSH THE FINAL BUFFER. ELA,CLE FROM CORE JSB DISKD * * MOVE THE SYSTEM SUBCHANNEL DEFINITION TO FOLLOW THE * EQT DEFINITIONS IN THE HEADER RECORD. RESET WORDS * 1-6 IN IT, AND WRITE THE RECORD OUT. * LDB CEQT POSITION POINTER AFTER EQT'S ADB P6 ADB ATB30 LDA TB30 GET THE FIRST TRACK FROM WHERE STA B,I IT HAD BEEN TEMPORARILY STORED INB AND SAVE LDA TB30+1 GET THE # TRACKS STA B,I AND SAVE * LDA SYSCH SET WORDS 1-6 STA TB30 SYSTEM SUBCHANNEL LDA DRT2 AND M77 STA TB30+1 SYSTEM EQT # LDA CEQT STA TB30+2 # OF EQT'S LDA PIOC STA TB30+3 PRIV INT CHANNEL LDA TBCHN STA TB30+4 TBG CHANNEL LDA TB30+127 RETRIEVE FROM TEMP. STORAGE AND M77 STA TB30+5 TTY CHANNEL LDB ATB30 CMB,INB CLA,CLE JSB DISKD WRITE IT OUT * JMP FSECT,I RETURN SKP * * THE MOVW SUBROUTINE MOVES WORDS FROM ONE CORE LOCATION * TO ANOTHER * * CALLING SEQUENCE: * * LDA FROM ADDRESS * LDB TO ADDRESS * JSB MOVW * DEC -WORD COUNT * MOVW NOP STA TBUF LDA MOVW,I GET THE COUNT STA TBUF+1 SET IN COUNTER * MOVW2 LDA TBUF,I GET A WORD STA B,I SET IT INB ISZ TBUF STEP THE ADDRESSES ISZ TBUF+1 DONE? JMP MOVW2 NO DO THE NEXT ONE * ISZ MOVW STEP TO RETURN POINT JMP MOVW,I YES- RETURN HED RTGN1 CONSTANTS AND WORKING STORAGE. N2 DEC -2 N3 DEC -3 N16 DEC -16 P1 DEC 1 P2 DEC 2 P4 DEC 4 P6 DEC 6 P8 DEC 8 P13 DEC 13 P15 DEC 15 P17 DEC 17 P25 DEC 25 P29 DEC 29 P31 DEC 31 M77 OCT 77 M0760 OCT 76000 M1777 OCT 1777 M7700 OCT 177700 M1177 OCT 101777 BLANK OCT 40 * END EQǜ<:6U * * END BEGIN 0<ASMB,N,R,L,C HED RTGN2 - PROGRAM INPUT PHASE SEGMENT. IFN ASSEMBLY OPTION "N" FOR RTE-II NAM RT2G2,5,90 92001-16031 771221 XIF IFZ ASSEMBLY OPTION "Z" FOR RTE-III NAM RT3G2,5,90 92060-16037 771221 XIF SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ****************************************************** * * NAME: RT2G2/RT3G2 * SOURCE PART #: 92001-18031/92060-18037 * REL PART #: 92001-16031/92060-16037 * WRITTEN BY: HAHN - HARTSELL - COOLEY - ANZINGER - WONG * ****************************************************** SPC 1 ENT INPUT * * EXTERNAL REFERENCE NAMES * EXT .LST1,.LST4,.LST5 EXT CURAL,LBUF,TBUF EXT BPARS,DPRS2 EXT PROMT,LSTS,INLST,LSTX,LSTE EXT TLST,PLST,TIDNT,PIDNT EXT INIDX,IDXS,IDX EXT ID1,ID2,ID3,ID4,ID5,ID6,ID7,ID8,ID9,ID10,ID11 EXT ID12,ID13,ID14,ID15,ID16 EXT SWRET,RDBIN EXT RRDCB,CLOSF,ABORT EXT GN.ER,DRKEY,SPACE,GTERM EXT OCTNO,BUFUL,TCHAR EXT READ,GETNA,GETAL,GETOC EXT READF,NMDCB,FMRR,CHFIL,RDNAM,WRITF,CLOSE EXT LOCF,RWNDF,APOSN EXT NAMRC,NAMBL,NAMOF EXT IACOM,ATRCM,TRCHK * A EQU 0 B EQU 1 SUP ************************************************************************ * SKP * THE FOLLOWING BLOCK OF STORAGE FOR VARIABLES PRECEEDS, * AND IS REFERENCED BY, EACH SEGMENT. IT IS NOT OVERLAID * AS EACH NEW SEGMENT IS LOADED INTO CORE. * * THE LOCATION OF EACH VARIABLE MUST BE THE SAME IN * ALL SEGMENTS. IF  A CHANGE IS MADE, MAKE THE SAME * CHANGE IN THE REST OF THE SEGMENTS. * * * SYSCH BSS 1 SUBCHANNEL OF SYSTEM UNIT. AUXCH BSS 1 SUBCHANNEL OF AUX UNIT. DSIZE BSS 1 DISK SIZE -NO. OF TRACKS. DAUXN BSS 1 AUXILIARY DISK SIZE. ADS# BSS 1 AUX DISC SECTORS/TRACK. * * RELOCATION BASE TABLE. RBTA BSS 1 ABSOLUTE PROGRAM BASE. TPREL BSS 1 CURRENT PROGRAM BASE ADDRESS. TPBRE BSS 1 BASE PAGE RELOCATION ADDRESS. COMAD BSS 1 CURRENT COMMON RELOCATION BASE. BSS 1 ABS PROGRAM BASE FOR MR CODE. * WDCNT BSS 1 TEMPORARY WORD COUNTER. DSKSY BSS 1 INITIAL ID SEGMENT DISK ADDRESS IDSP BSS 1 POSITION OF 1ST ID SEG. IN SECT TTYCH BSS 1 SYSTEM TTY CHANNEL NO. * PLFLG BSS 1 PROGRAM LOAD. FLAG = -1/0 = L/NL DSCNT BSS 1 DISK SEGMENT SECTOR COUNT * NXFLG BSS 1 ENT/EXT FLAG = -1/0 EXCNT BSS 1 SYMBOL COUNTER * LCNT BSS 1 CURRENT LBUF COUNT DCNT BSS 1 CURRENT DBUF COUNT CURAI BSS 1 CURRENT IBUF COUNT * CPLS BSS 1 ADDRESS OF TOP OF FIXED CP LINK IMAGE CPL1 BSS 1 ADDRESS OF LOW CURRENT PAGE LINK SPECS. CPL1H BSS 1 NUMBER OF CURRENT PAGE LINKS ASSIGNED CPL2H BSS 1 IN LOW AND HIGH AREA RESPECTIVELY URBP1 BSS 1 LWA R/T DISC RES BP LINK AREA BPMAX BSS 1 MAX USED BASE PAGE LINKAGE +1 CURAK BSS 1 CURRENT KBUF ADDRESS * CURAT BSS 1 CURRENT TBUF ADDRESS TCNT BSS 1 CURRENT TBUF COUNT * CURAP BSS 1 CURRENT PLIST ADDRESS * AMAD BSS 1 CURRENT MLIST ADDRESS * LICNT BSS 1 LONG ID SEGMENT COUNT SICNT BSS 1 SHORT ID SEGMENT COUNT SSCNT BSS 1 BG. SEG ID COUNT COMRT BSS 1 MAXIMUM RT COM LENGTH COMBG BSS 1 MAX BG COM LENGTH * DSKEY BSS 1 CURRENT KEYWORD DISK ADDRESS DSKID BSS 1 DISK ID SEGMENT ADDRESS KEYCN BSS 1 TOTAL KEYWORD COUNT KEYCT BSS 1 CURRENT KEYWORD COUNT * MLIST BSS 11 MEMORY MAP BUFFER * TEMP1 BSS 1 TEMP2 BSS 1 LWH1 BSS 1 LWH2 BSS 1 LWH3 BSS 1 LWH4 BSS 1 L01 BSS 1 * FSYBP BSS 1 FIRST WORD SYS BP LINKAGE SYSAD BSS 1 CURRENT ID SEGMENT ADDRESS * TBREL BSS 1 CURRENT BP RELOC ADDR PBREL BSS 1 INITIAL BP RELOC ADDR * RELAD BSS 1 CURRENT CORE RELOCATION ADDRESS * BSBAD BSS 1 BG SEGMENT BP RELOC ADDR BSPAD BSS 1 BG SEGMENT PROG RELOC ADDR * LFLAG BSS 1 PROGRAMS-LOADED FLAG IMAIN BSS 1 CURRENT MAIN IDENT INDEX. HDFLG BSS 1 HEADING FORMAT FLAG CIDNT BSS 1 CURRENT MAIN IDENT INDEX. * AEQT BSS 1 ADDRESS OF EQUIPMENT TABLE CEQT BSS 1 NO. ENTRIES IN EQUIPMENT TABLE * ASQT BSS 1 ADDR OF DEVICE REFERENCE TABLE CSQT BSS 1 NO. ENTRIES IN DEV. REF. TABLE * AINT BSS 1 ADDRESS OF INTERRUPT TABLE CINT BSS 1 NO. ENTRIES IN INTERRUPT TABLE * DSKIN BSS 1 DISK ADDR OF INT CODE RECORD INTCN BSS 1 RECORD COUNT OF INT CODE * CURIL BSS 1 CURRENT ILIST ADDRESS ILIST BSS 64 USER SYSTEM PROG IDENT ADDR LIST * IDSAV BSS 1 INDEX OF CURRENT IDENT. DSKMN BSS 1 INITIAL MAIN DISK ADDRESS BSSDP BSS 1 INITIAL DISK RES MAIN BSS DISP PRENT BSS 1 PRIMARY ENTRY POINT DBLAD BSS 1 CURRENT DBL ADDRESS REKEY BSS 1 INSTRUCTION TYPE BYTE INSCN BSS 1 INSTRUCTION TYPE COUNTER INSTR BSS 1 CURRENT INSTRUCTION PAGNO BSS 1 CURRENT PAGE NO. OPRND BSS 1 CURRENT OPERAND PLGTH BSS 1 PROGRAM LENGTH DRT2 BSS 1 DISK DRT ENTRY ( SYSTEM) DRT3 BSS 1 AUX DISK DRT ENTRY LIBFG BSS 1 LDTYP BSS 1 SCH1 BSS 1 INDEX OF IDENT OF PGM TO BE SCHEDULED SCH3 BSS 1 ADDRESS OF CURRENT ID SEGMENT SCH4 BSS 1 ADDRESS OF THE SCHEDULED PGM ID SEG FGBGC BSS 1 v BACKGROUND USING FG COMMON FLAG $LIBR BSS 1 INDEX OF $LIBR ENT $LIBX BSS 1 INDEX OF $LIBX ENT CUPRI BSS 1 * MEM1 BSS 1 MEM2 BSS 1 MEM3 BSS 1 MEM4 BSS 1 MEM5 BSS 1 MEM6 BSS 1 MEM7 BSS 1 MEM8 BSS 1 MEM9 BSS 1 MEM10 BSS 1 MEM11 BSS 1 MEM12 BSS 1 * IFZ ***** BEGIN DMS CODE ***** COMSZ BSS 1 #WORDS COMMON DECLARED FOR * CURRENT MAIN LPCOM BSS 1 LAST PAGE CONTAINING ANY COMMON FPSAM BSS 1 1ST PAGE CONTAINING S.A.M. FWSAM BSS 1 1ST WORD CONTAINING S.A.M. LPSYS BSS 1 LAST PAGE CONTAINING SYS OR LIB FPDSK BSS 1 1ST PAGE DISK PART AREA LOLNK BSS 1 LOW LINK FOR SSGA,LIB, OR SYS HILNK BSS 1 HI LINK USED BY MEM RES PRG BPINC BSS 1 CURR DIRECTION FOR BP LINK * ALLOCATION. +1=UP,-1=DOWN BPLMT BSS 1 WORD AFTER LAST WORD AVAIL * FOR BP LINK ALLOCATION TPMAX BSS 1 HWM FOR RELOCATION OF BG * MAINS AND SEGS MAXPT BSS 1 NUM PARTS. ALLOWED MAT. BSS 1 ADR OF LENGTH WORD * BEFORE MEM ALLOC TABLE (MAT) SSGA. BSS 1 FWA SSGA (LAST WORD SYS * OR LIB +1) FWMRP BSS 1 FWA MEM RES PROG AREA * (NEXT WORD AFTER COMMONS) MAP. BSS 1 PTR TO MEU RES MAP MPFT. BSS 1 PTR TO MPFT ****** END DMS CODE ****** XIF * SECTR BSS 0 BOOTSTRAP BUFFER FORMAT * LBPSY BSS 1 LOWER SYSTEM BP ADDRESS UBPSY BSS 1 UPPER SYSTEM BP ADDRESS DSKBP BSS 1 SYS BP DISK ADDRESS * LRMAN BSS 1 MAIN RESIDENT LOWER ADDRESS URMAN BSS 1 MAIN RESIDENT UPPER ADDRESS DSKRR BSS 1 MAIN RESIDENT DISK ADDRESS * LBMAN BSS 1 MAIN BG LOWER ADDRESS UBMAN BSS 1 MAIN BG UPPER ADDRESS DSKBG BSS 1 MAIN BACKGROUND DISK ADDRESS * SYMAD BSS 1 AVAIL SYS MEM ADDR BGBND BSS 1 BACKGROUND BOUNDARY * DSKAV BSS 1 NEXT AVAILABLE DISK ADDRESS DSKLC BSS 1 DISK ADDRESS OF LIBRARY CODE DSKLB BSS 1 DISK ADDR OF LIBRARY ENTRY PTS DSKUT BSS 1 UTILITY PROG DISK ADDRESS DSKBS BSS 1 DISK ADDR OF MAIN BG DISK RES BP DSKBR BSS 1 CURRENT MAIN BG DISK RES DISK AD ADICT BSS 1 ADDR OF DISK DICTIONARY LBCNT BSS 1 RESIDENT LIBR ENTRY PT COUNT UTCNT BSS 1 UTILITY LIBRARY COUNT KEYAD BSS 1 CURRENT KEYWORD ADDRESS RTCAD BSS 1 RT COM CORE ADDRESS LBCAD BSS 1 LIBRARY CODE ADDRESS SYBAD BSS 1 ADDR OF FIRST BP LINK FOR BG IDSAD BSS 1 ADDR OF FIRST ID SEGMENT ABSID BSS 1 IDENT ADDR FOR NEXT BG SEG SCAN MAXRP BSS 1 MAXIMUM RT DISK RESIDENT PROG MAXRB BSS 1 MAXIMUM RT DISK RESIDENT BP IDMBS BSS 1 BG MAIN ADDRESS FOR BS REF * TB30 BSS 128 TRACK MAP TABLE #SUBC BSS 1 " # SUBCHANNELS DEFINED(7905) SPC 5 ********************************************************* * * * END OF COMMON STORAGE BLOCK FOR ALL SEGMENTS. * * * ********************************************************* SKP LSWAP NOP * * RESOLVE ANY ARITHMETIC DEF'S TO EXTERNALS * LDA N GET LOOP COUNTER STA BLINE SAVE IN TEMP LOCATION LDB LSTAA GET ADDRESS OF WHERE LIST ROUTINE LOCATED LOOP LDA B,I GET ADDRESS RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 STA B,I AND SAVE IT AGAIN INB ISZ BLINE DONE? JMP LOOP NO LDA DNAM FIX MOVEX CALLS STA LBUF4 LDA ALBUF STA ML0 JMP SWRET RETURN TO MAIN. SPC 1 N DEC -3 LSTAA DEF *+1 ATBUF DEF TBUF ALBUF DEF LBUF DNAM DEF LBUF +3 SKP * * BEGIN PROGRAM INPUT PHASE (UNDER COMMAND CONTROL). * INPUT NOP JSB SPACE LDA P17 LDB MESS7 JSB DRKEY "PROG INPUT PHASE:" LDA PLST SET BOTTOM OF PROGRAM STA SLST DEFINED LST (INDEX #) * JSB PRCMD PROCESS OPERATOR COMMANDS. * CLA STA SCH1 STA SCH4 * * CLEAR UNDEFINED EXTS * LDA SLST INITIALIZE LSTX STA TLST IGNOR PREDEFINED ENTRIES CLST3 JSB LSTX SET LST ADDRESSES JMP ENDLB SET USAGE FLAGS * LDA .LST4,I GET IDENT INDEX CMA,INA SSA SKIP - UNDEFINED EXT JMP CLST3 IGNORE DEFINED ENTRY POINT * LDA P4 SET UNDEFINEDS TO ZERO REPLACE ENTS STA .LST4,I CLEAR IDENT INDEX JMP CLST3 TRY NEXT LST ENTRY * ENDLB LDB D$LIR FIND THE LIBRARY JSB LSTS ENTRY POINTS $LIBR CLA,INA,RSS USE ZERO IF NOT FOUND LDA TLST ADA N1 STA $LIBR SAVE FOR THE LOADER * LDB D$LIX DO SAME THING FOR $LIBX JSB LSTS CLA,INA,RSS LDA TLST ADA N1 STA $LIBX * JMP PARAM GO DO PARAM INPUT PHASE. * D$LIR DEF *+1 ASC 3,$LIBR D$LIX DEF *+1 ASC 3,$LIBX * P17 DEC 17 MESS7 DEF *+1 ASC 9,PROG INPUT PHASE: N1 DEC -1 SKP SPC 1 ***** * ** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF) * CALLING SEQUENCE: * * JSB BLINE * RETURN * ***** BSS 1 BLINE NOP LDA ALBUF STA BLINE-1 LDA MD24 LDB BLANK STB BLINE-1,I ISZ BLINE-1 INA,SZA JMP *-3 JMP BLINE,I ***** STMP1 NOP * ***** * ** DELIM ** ADVANCE POINTERS TO ASCII INPUT BUFFER PAST NEXT * DELIMETER. ACCEPTABLE DELIMITERS ARE A COMMA, ONE OR * MORE BLANKS, OR A COMMA IMBEDDED IN BLANKS. * CALLING SEQUENCE: * * JSB DELIM * RE4TURN1 NOTHING BUT BLANKS OR A COMMENT TO END OF LINE * RETURN2 DELIMETER FOUND * * NOTE: IF NO VALID DELIMITER IS FOUND (OR COMMA WITH NOTHING BUT * BLANKS TO THE END OF LINE) A DIRECT JUMP TO THE COMMAND * ERROR ROUTINE WILL RESULT. THUS CONTROL MAY NOT BE RETURNED ***** DELIM NOP JSB QGETC GET THE NEXT CHAR JMP DELIM,I END OF LINE , RETURN (P+1) LDB N2 INITIALIZE STB STMP1 COMMA COUNTER CPA B40 IS THIS A BLANK? JMP DEL01 YES CPA B54 NO, IS IT A COMMA? RSS JMP CMER NO, ERROR ISZ STMP1 DEL01 JSB NXTC GET NEXT NON BLANK CHAR JMP DEL02 END OF LINE CPA B54 GOT ONE, IS IT A COMMMA? RSS JMP DEL03 NO ISZ STMP1 YES, IS IT THE SECOND ONE? JMP DEL01 NO, GET NEXT NON BLANK CHARACTER DEL03 JSB BAKUP YES, BACK UP BUFFER POINTERS ISZ DELIM AND EXIT (P+2) JMP DELIM,I DEL02 ISZ STMP1 WAS THERE A COMMA? JMP DELIM,I NO, EXIT (P+1) JMP CMER YES, ERROR ***** * ** BAKUP ** BACK UP INPUT BUFFER (QIBUF) POINTERS BY ONE CHARACTER * CALLING SEQUENCE: * * JSB BAKUP * RETURN * ***** BAKUP NOP CCA ADA QQCNT DECREMENT CHAR COUNT STA QQCNT LDB QQPTR SLA AND IF NECESSARY, ADB N1 DECREMENT POINTER STB QQPTR JMP BAKUP,I ***** * ** PRCMD ** MAIN ENTRY POINT - CONTROL IS PASSED TO NXTCM TO GET THE NEXT * COMMAND. THAT COMMAND IS PARSED, AND CONTROL IS PASSED * TO ITS ASSOCIATED PROCESSING ROUTINE. IF A FATAL ERROR * IS DETECTED, CONTROL IS RETURNED TO THE ROUTINE CALLING * PRCMD AT (P+1). THE ONLY OTHER EXIT IS VIA THE END * COMMAND (P+2). AFTER PROCESSING ANY OTHER COMMAND, * CONTROL RETURNS TO NXTCM TO PROCESS THE NEXT COMMAND. * ***** PRCMD NOP PROCESS OPERATOR COMMANDS. NXTCM JSB CMDIN GET NEXT COMMAND LINE LDA CTACN COMST JMP'S HERE VIA NXTCM+1 LDB CTABL JSB SCAN SCAN 1ST ELEMENT FOR MATCH JMP CMER COMMAND ERROR. ADA PTABL JUMP TO PROCESSOR LDA A,I JMP A,I * ***** CMER LDA ERR06 JSB GN.ER JMP NXTCM GET NEXT COMMAND FROM TTY * ERR06 ASC 1,06 SKP ***** * * BRANCH TABLE FOR COMMAND PROCESSORS. * ORDER OF THIS TABLE MUST CONFORM TO ORDER OF FIRST ENTRIES IN * COMMAND PNEUMONIC TABLE. * ***** PTABL DEF * DEF MAPST MAP STATEMENT DEF RELST RELOCATE STATEMENT DEF RELST REL STATEMENT DEF DSPST DISPLAY STATEMENT DEF EOL /E STATEMENT DEF LNKST LINKS STATEMENT DEF COMST * STATEMENT ***** * * COMMAND PNEUMONIC TABLE * * BITS 15-8 # CHARS IN ASCII KEYWORD TABLE * BITS 7-0 OFFSET IN THAT TABLE (TO LOCATE ASCII WORDS) * * THE ORDER OF ENTRIES IN THIS TABLE IS USED IN DETERMINING THE * OFFSET ASSOCIATED WITH KEYWORDS. THUS ORDER IN THIS TABLE IS * OF PARAMOUNT IMPORTANCE. IF ANY KEYWORD IS EXACTLY THE SAME * AS THE BEGINNING OF A LONGER KEYWORD, THE LONGER KEYWORD MUST * APPEAR FIRST. (FOR EXAMPLE RELOCATE APPEARS BEFORE REL) * ***** CTACN ABS CTABS-CTABN NEG NBR ENTRIES IN TABLE CTABL DEF CTABS CTABS ABS 1400B+AMAP-CMTBL MAP ABS 4000B+ARELC-CMTBL RELOCATE ABS 1400B+ARELC-CMTBL REL ABS 3400B+ADISP-CMTBL DISPLAY ABS 1000B+AEND.-CMTBL /E ABS 2400B+ALINK-CMTBL LINKS ABS 0400B+ASTAR-CMTBL * CTABN EQU * LTABS ABS 2400B+ATBLE-CMTBL TABLE ABS 3000B+AUNDE-CMTBL UNDEFS MTABS ABS 3400B+AMODS-CMTBL MODULES ABS 3400B+AGLOS-CMTBL GLOBALS ABS 2400B+ALINK-CMTBL LINKS ABS 1400B+AOFF.-CMTBL OFF ABS 1400B+AALL.-CMTBL ALL ITAB ABS 1000B+AIN..-CMTBL IN BTAB ABS 2000B+ABASE-CMTBL BASE CPTAB ABS 3400B+ACURN-CMTBL CURRENT|l ITABL DEF ITAB BTABL DEF BTAB CPTBL DEF CPTAB LTABL DEF LTABS MTABL DEF MTABS ***** * ASCII KEYWORD TABLE * ORDER OF ENTRIES IN THIS TABLE IS ON NO IMPORTANCE ***** CMTBL DEF * AMAP ASC 2,MAP ARELC ASC 4,RELOCATE ADISP ASC 4,DISPLAY ATBLE ASC 3,TABLE AUNDE ASC 3,UNDEFS AMODS ASC 4,MODULES AGLOS ASC 4,GLOBALS ALINK ASC 3,LINKS ASTAR ASC 1,* AOFF. ASC 2,OFF AALL. ASC 2,ALL AEND. ASC 1,/E AIN.. ASC 1,IN ACURN ASC 4,CURRENT ABASE ASC 2,BASE * HYADD DEF *+1 PRPTA ASC 1,- * PTR NOP CNTR NOP PTR2 NOP CCNT NOP QQCN1 NOP QQPT. NOP TEMP NOP NCHAR NOP CNT NOP SKP SKP * * SCANNER ROUTINE * ***** * ** SCAN ** SCAN INPUT BUFFER (QIBUF) FOR KEYWORD * CALLING SEQUENCE: * * LDA NUMBER OF ENTRIES TO SEARCH * LDB ADDRESS OF PNEUMONIC TABLE ENTRY ASSOC WITH FIRST CHOICE * JSB SCAN * RETURN1 NOT FOUND * RETURN2 FOUND, OFFSET FROM FIRST ENTRY SEARCHED IN .A. * * NOTE: THIS ROUTINE WILL SKIP LEADING BLANKS IN ATTEMPTING A MATCH. * FURTHER,BUFFER POINTERS ARE ADVANCED PAST THE KEYWORD * MATCHED OR RESET IF NO MATCH OCCURRED. ***** SCAN NOP ENTRY/EXIT STB PTR INITIALIZE SCANNER STA CNTR CLA STA CNT INITIALIZE OFFSET COUNTER SCAN1 LDA PTR,I GET COMMAND POINTER WORD AND B377 MASK COMMAND TABLE OFFSET ADA CMTBL STA PTR2 STORE POINTER TO ASCII COMMAND LDA PTR,I ALF,ALF AND B377 GET # CHARS. STA NCHAR ISZ CNT BUMP OFFSET COUNTER CLA STA CCNT LDA QQCNT SAVE CHARACTER STREAM STA QQCN1 LDA QQPTR STA QQPT. POINTERS. JSB NXTC GET THE FIRST NON-BLANK CHAR CLA END OF LINE JMP SCAN5 GET REST OF CHARS IN LOOP SCAN2 JSB QGETC GET NEXT CHARACTER. CLA NO MORE CHARS. SCAN5 STA TEMP LDA PTR2,I LDB CCNT ISZ CCNT CPB NCHAR ALL CHARS. MATCH? JMP SCAN4 YES-CHECK END OF INPUT ELEMENT. SLB,RSS IS CHAR IN HIGH-ORDER BYTE? ALF,ALF YES--ROTATE TO LOW AND B177 MASK SLB BUMP ASCII COMMAND TABLE POINTER ON ISZ PTR2 EVEN-NUMBERED CHARACTERS. CPA TEMP DO CHARS. MATCH? JMP SCAN2 YES--SO FAR. LDA QQPT. NO--BACKUP POINTERS STA QQPTR LDA QQCN1 STA QQCNT SPC 1 * NOW BUMP COMMAND TABLE POINTER, OR TAKE ERROR EXIT * IF NO MORE LEFT SPC 1 ISZ PTR ISZ CNTR END OF TABLE? JMP SCAN1 NO JMP SCAN,I SPC 1 SCAN4 LDA TEMP IS NEXT SOURCE CHAR A DELIMITER? SZA END OF LINE? JSB BAKUP LDA CNT ISZ SCAN JMP SCAN,I SKP * * INPUT COMMAND LINE * ***** * ** CMDIN ** INPUT NEXT COMMAND LINE * CALLING SEQUENCE: * * JSB CMDIN * RETURN * * * RETURN: QQCHC= POSITIVE # CHARS TRANSMITTED * ***** CMDIN NOP CLA RESET INCOMING CHARACTER STA QQCNT POINTERS LDA QBUFA STA QQPTR JSB PROMT SEND PROMT,READ REPLY DEF *+6 DEF PRPTA DEF P1 DEF QIBUF DEF D72 DEF BPARS STA QQCHC JMP CMDIN,I AND RETURN * MOVE3 NOP SKP ***** * ** MOVE. ** MOVE BLOCK OF CHARS FROM INPUT BUFFER (QIBUF) TO A * SPECIFIED LOCATION. STOP AT FIRST DELIMITER. * CALLING SEQUENCE: * * LDA ADDRESS OF DESTINATION * JSB MOVE. * RETURN * ***** MOVE. NOP STA MOVE3 SAVE DESTINATION ADDRESS JSB NXTC GET NEXT NON BLANK CHAR JMP CMER NONE FOUND MOV01 ALF,ALF POSITION CHAR TO LEFT, STA MOVE3,I AND STORE IN OUTPUT BUFFER JSB QGETC GET NEXT CHAR JMP MOV03 END OF LINE CPA B40 BLANK? JMP MOV02 CPA B54 COMMA? JMP MOV02 CPA GB@= "1" ? SSB JMP LDRIN OK LDB A ADB L73 < A ":"? SSB,RSS JMP LDRIN OK JMP CMER LU CAN'T BE USED * B53 OCT 53 + L60 OCT -60 L73 OCT -73 XNAMA DEF XNAM ***** * ** DISPLAY COMMAND PROCESSOR * ***** DSPST LDA IACOM IF COMMANDS ARE FROM AND INTERACTIVE STA TIACM DEVICE, SZA JMP DISDN THEN DISPLAY ALREADY GOES TO THEM LDA ATRCM ELSE SIMULATE A "TR,ERRLU" LDB P6 JSB TRCHK * DISDN JSB BLINE BLANK PRINT LINE LDA QQPTR SAVE STA STMP BUFFER LDA QQCNT POINTERS STA SVAL LDA ALBUF MOVE NAME OF ENTITY TO BE DISPLAYED JSB MOVE. INTO THE OUTPUT BUFFER LDA STMP STA QQPTR RESTORE BUFFER POINTERS LDA SVAL STA QQCNT LDA N2 LDB LTABL JSB SCAN IS THIS A KEYWORD? JMP DSP10 NO, IT MUST BE AN IDENTIFIER CPA B2 UNDEFS? JMP OLSTU CPA P1 TABLE? JMP OLSTE JMP CMER ERROR. SPC 2 DSP10 LDB ALBUF JSB LSTS SEARCH SYMBOL TABLE JMP DSP30 SYMBOL IS UNDEFINED LDB .LST5,I GET VALUE LDA LBUF+2 SET EQUAL SIGN(=) IN 6TH CHAR AND UPCM OF PRINT LINE IOR B75 STA LBUF+2 LDA LBUF4 JSB CONV CONVERT THE VALUE TO ASCII LDA P12 DSP25 LDB ALBUF JSB DRKEY PRINT THE LINE DSP27 LDA TIACM DETERMINE STATE BEFORE THE DISPLAY SZA JMP NXTCM WAS ALREADY INTERACTIVE LDA ATRCM MUST POP THE "TR,ERRLU" LDB B2 WE PUT THER E JSB TRCHK WITH A "TR" ONLY JMP NXTCM * DSP30 LDA N5 MOVE "UNDEFINED" TO LBUF LDB DSP40 JSB MOVEX LBUF4 NOP LDA D15 JMP DSP25 * DSP40 DEF *+1 ASC 5,UNDEFINED TIACM NOP TEMPORARY STORAGE OF IACOM * OLSTE CLA,INA,RSS ENTRY POINT LIST OPTION. OLSTU CLA LIST UNDEFINED SYMBOLS OPTION. JSB EPL JMP DSP27 ***** * ** MAP COMMAND PROCESSOR * * MAPMD--CORE MAP LISTING FLAG * BIT 0 GLOBAL VARIABLES * 1 MODULES * 2 LINKS ***** MAPST LDA N5 LDB MTABL JSB SCAN JMP CMER STA B LDA MAPMD CPB P1 MODULES? IOR B2 SET BIT 1 CPB B2 GLOBALS? IOR P1 SET BIT 0 CPB P3 LINKS? IOR P4 SET BIT 2 CPB P4 OFF? CLA RESET POINTER CPB P5 ALL? IOR B7 SET BITS 2-0 STA MAPMD JSB DELIM ADVANCE PAST DELIMITERS RSS JMP MAPST JMP NXTCM GET NEXT COMMAND SPC 1 STMP NOP SVAL NOP ***** * ** LINKS IN ** COMMAND PROCESSOR. * ***** LNKST CCA LDB ITABL JSB SCAN LOOK FOR "IN" JMP CMER CCA LDB BTABL JSB SCAN LOOK FOR "BASE" JMP *+3 NO. CLA YES. JMP LNK01 CCA LDB CPTBL JSB SCAN LOOK FOR "CURRENT" JMP CMER NEITHER. CLA,INA LNK01 STA LNKMD 0=BASE, 1=CURRENT. JMP NXTCM * ***** * ** "*" ** COMMAND PROCESSOR * ***** COMST NOP CLA RESET INCOMING POINTERS STA QQCNT LDA QBUFA STA QQPTR JSB PROMT READ REPLY DEF *+6 DEF PRPTA DEF ZERO DON'T REISSUE PROMPT DEF QIBUF DEF D72 DEF BPARS STA QQCHC JMP NXTCM+1 SCAN NEW COMMAND * ***** * ** NXTC ** GET NEXT NON-BLANK CHAR FROM INPUT BUFFER (QIBUF) *CALLING SEQUENCE: * & * JSB NXTC * RETURN1 NO MORE NON-BLANK CHARS * RETURN2 GOT ONE, AND IT IS RETURNED IN .A. * ***** NXTC NOP GET NEXT NONN-BLANK CHARACTER. JSB QGETC JMP NXTC,I ERROR RETURN CPA B40 BLANK? JMP NXTC+1 GET ANOTHER CHARACTER ISZ NXTC TAKE NORMAL EXIT JMP NXTC,I B55 OCT 55 SKP * * RECORD PROCESSING CONTROL * ******************************************************************** * THE TRANSFER OF CONTROL TO * THE APPROPRIATE RECORD PROCESSORS IS MADE * FROM THIS SECTION. EACH PROCESSOR (EXCEPT * NAM PROCESSOR) RETURNS TO THE LABEL -LDRIN-. * * INPUT RECORD, LEGALITY CHECK AND CHECKSUM SECTION ******************************************************************** LDRIN LDA RIC WAS LAST RECORD AN END RECORD? CPA P5 JMP NXTCM GET NEXT COMMAND INCHK LDA ALBUF GET BUFFER WHERE TO PUT REL. LDB POSIN GET RDBIN FLAG. JSB RDBIN GET NEXT RELOCATABLE RECORD JMP CMER FILE ERROR ON INPUT SZA,RSS EOF? JMP NXTCM END OF FILE. * * CHECK FOR LEGAL RECORD TYPE * CLA CLEAR RDBIN FLAG. STA POSIN LDA LBUF+1 GET TYPE WORD ALF,RAR ROTATE RIC FIELD TO AND B7 LOW A AND ISOLATE CODE STA RIC SAVE FOR PROCESSING SZA IF RIC=0 ADA M6 OR GREATER THAN 5 SSA,RSS ERROR? JMP RCERR YES JMP LDRC NO. PROCESS RECORD * RCERR LDA ERR04 YES...TELL THEM ILLEGAL RECORD JMP ERCOV GO TEST & PRINT MESSAGE. SPC 2 * PROCESS VALID RECORD * LDRC ISZ NREC BUMP COUNT # GOOD RECORDS. LDA RIC (A) = RECORD TYPE LDB SERFG CPA P1 IF RIC = 1, THEN GO TO PROCESS JMP LDRC3 NAM RECORD. CPA P5 IF END RECORD THEN PROCESS IT JMP ENDR SSB SKIP RECORD IF NOT LOADING. JMP INCHK CPA B2 / IF RIC = 2, JMP ENTR GO PROCESS ENT RECORD. CPA P3 IF RIC = 3, GO TO JMP DBLR DBL RECORD PROCESSOR. CPA P4 EXT? JMP EXTR EXT RECORD PROCESSOR. SPC 5 * * PROCESSING FOR END RECORD. * ENDR CLA CLEAR FLAG FOR STA NAMR. NAM RECORD EXPECTED. STA SERFG SET PROG LOAD FLAG = LOADING INA STA POSIN SIGNAL RDBIN TO CALL LOCF SSB B STILL IS OLD SERFG JMP INCHK SKIP THIS END RECORD * * PROCESS END RECORD AND LBUF+1 ISOLATE M/S RAR MOVE M/S TO SIGN POSITION IOR ID6,I ADD TO TYPE STA ID6,I SET M/S, TYPE * LDA LWH1 COMPILED PROGRAM? SZA,RSS SKIP IF YES. JMP END2 * * SET NEW LENGTH OF COMPILED PROGRAM. * JSB LOCF SAVE CURRENT POSITION IN FILE. DEF *+6 DEF RRDCB DEF FMRR DEF IRECR DEF IRBR DEF IOFFR JSB CHFIL JSB GTERM * LDA ACBUF READ NAM REC INTO CBUF. CCB JSB RDNAM JSB ABORT ERROR. * LDA CBUF IF 9 WORD RECORD, MAKE ALF,ALF IT 17 WORDS. CPA P9 LDA P17 STA IL ALF,ALF STA CBUF * LDA LWH2 STORE PROGRAM LENGTH. IOR SIGN SET "COMPILED" BIT. STA CBUF+6 JSB CKSUM COMPUTE & STORE NEW CHECKSUM. * JSB WRITF WRITE RECORD TO NEW NAM FILE. DEF *+5 DEF NMDCB DEF FMRR DEF CBUF DEF IL * JSB CHFIL JSB GTERM ABORT IF WRITE ERROR. * LDA ID5,I SET FLAG IN IDENT. IOR BIT14 STA ID5,I * JSB APOSN RESTORE FILE POSITION. DEF *+6 DEF RRDCB DEF FMRR DEF IRECR DEF IRBR DEF IOFFR JSB CHFIL JSB GTERM * END2 LDA XNAM IF XNAM ZERO, SZA CONTINUE PROCESSING RECORDS, JMP NXTCM ELSE GET NEXT COMMAND. JMP INCHK SKP * * PRELIMINARY NAM RECORD PROCESSING * ***** * * THIS PROCESSING OF NAM RECORDS OCCURS BEFORE DECIDING * WHETHER OR NOT TO RELOCATE A MODULE * ***** LDRC3 LDB NAMR. IS NAM 1ST RECORD? SZB IS NAM 1ST RECORD? JMP NMERR NO--SEQUENCE ERROR. LDB XNAMA LDA B,I SZA,RSS WAS A MODULE NAME SPECIFIED? JMP L.DC4 NO. CPA LBUF+3 YES--DOES THIS MODULE MATCH THE NAME? INB,RSS JMP LDRC6 NO--SKIP IT LDA B,I CPA LBUF+4 INB,RSS JMP LDRC6 LDA B,I XOR LBUF+5 AND UPCM SZA JMP LDRC6 L.DC4 CLA STA SERFG CLEAR LOADING FLAG. ISZ NAMR. NAM NOT EXPECTED. JMP NAMR GO PROCESS NAM RECORD. * * RESET PROCESSING - PROGRAM FROM LIBRARY IS * TO BE DISCARDED. LDRC6 CLA STA NAMR. CCA STA SERFG RECORD SKIPPING MODE. JMP INCHK * NMERR LDA ERR03 MISSING END RECORD JMP ERCOV SKP * * MOVEX SUBROUTINE. * * CALLING SEQUENCE: * A = NEG # WORDS * B = ADDR OF SOURCE BUFFER * JSB MOVEX * DEF ADDR OF DESTINATION BUFFER * BSS 2 STORAGE FOR MOVEX MOVEX NOP MOVE A BLOCK OF DATA STA MOVEX-1 STORE NEG. # WORDS. LDA MOVEX,I ISZ MOVEX STA MOVEX-2 STORE TO POINTER LDA B,I GET WORD STA MOVEX-2,I STORE INB ISZ MOVEX-2 ISZ MOVEX-1 DONE? JMP *-5 JMP MOVEX,I YES SPC 3 * * CONSTANTS AND STORAGE FOR MAIN CONTROL SECTION * NREC NOP #GOOD RECORDS COUNTER. RIC OCT 0 HOLDS RECORD IDENTIFICATION CODE UPCM OCT 77400 UPPER CHARACTER MASK. SERFG NOP PROG LOAD FLAG: -1/0=NL/L. NAMR. NOP "NAM REC EXPECTED" FLAG. * M6 DEC -6 D72 DEC 72 * ERR04 ASC 1,04 ERR03 ASѣC 1,03 * * XNAM BSS 3 * BLANK ASC 1, (ORG LBUF-1 FOR EPL SUBROUTINE) NBUF BSS 6 POSIN OCT 0 POSITIONING CODE FOR RDBIN SUBR. SKP * NAM RECORD PROCESSOR * NAMR LDA PIDNT SAVE CURRENT IDENT AND STA BUID LST ENTRY INDICES. LDA PLST STA BULST FOR POSSIBLE MODULE PURGE LDB DNAM GET NAME ADDRESS JSB IDXS SEARCH FOR THE ENTRY JMP ENTNA ENTER NAME * LDA ERR08 GET ERROR CODE - DUPLICATE NAMES CMA,INA SET NEG SO NO TR,ERRLU MAY BE DONE JSB GN.ER PRINT DIAGNOSTIC LDA P5 LDB ID1 GET ADDRESS OF NAME IN IDENT JSB DRKEY PRINT DUPLICATE PROG. NAME * JSB FINDN DID IT HAVE A MODIFIED NAM RECORD? JMP REPNA NO CLA,INA INVALIDATE THE RECORD LDB ACBUF ADB P3 STA B,I JSB NEWNM AND REWRITE THE RECORD JMP REPNA REPLACE REST OF IDENT * ENTNA LDA LBUF+3 GET NAME 1,2 STA ID1,I SET NAME 1,2 IN IDENT LDA LBUF+4 GET NAME 3,4 STA ID2,I SET NAME 3,4 IN IDENT LDA LBUF+5 GET NAME 5 AND M7400 SAVE UPPER CHAR STA ID3,I SET NAME 5 IN IDENT ISZ PIDNT BUMP IDENT COUNTER. * REPNA LDA LBUF+9 GET PROGRAM TYPE AND M177 ISOLATE TYPE JSB FILTR CHANGE IF NECESSARY *RTE 2 & 3* STA ID6,I SET TYPE IN IDENT LDB LBUF+8 GET COMMON LENGTH STB ID4,I SAVE COMMON LENGTH * LDA LNKMD SET BASE/CURRENT LINKAGE RAR AND MAP OPTIONS. IOR MAPMD STA ID5,I CLA,INA LDB LBUF+6 COMPILED? SSB,RSS IF YES, SKIP & SET SWITCH CLA OTHERWISE, CLEAR SWITCH STA LWH1 LDA M7777 INITILIZE THE FIRST DBL ADDRESS STA ID7,I TO MAX POSSIBLE CLA AND THE PROG. LENGTH TO STA LWH2 MIN. POSSIBLE STA ID8,bI CLEAR BS IDENT MAIN ADDRESS LDA DPRS2 SET FILE NAME IN IDENT. INA LDB A,I STB ID9,I INA LDB A,I STB ID10,I INA LDB A,I STB ID11,I ADA B2 POSITION TO SECURITY CODE LDB A,I STB ID12,I SAVE IT ADA P4 POSITION TO CR LABEL LDB A,I STB ID13,I LDA NAMRC STA ID14,I SET RECORD NUMBER. LDA NAMBL STA ID15,I SET RELATIVE BLOCK. LDA NAMOF STA ID16,I SET BLOCK OFFSET. JMP LDRIN GET NEXT RECORD SKP * * DBL REC PROCESSOR * DBLR LDA LBUF+3 GET THE RELOCATION ADDRESS CMA,INA IF LESS THAN CURRENT ADA ID7,I MIN. SSA SKIP JMP DBLR1 ELSE JUST SKIP * LDA LBUF+3 NEW MIN. SO SET IT STA ID7,I IN THE IDENT. * DBLR1 LDA LBUF+1 GET THE LENGTH AND M77 OF THE RECORD (NO. OF PROGRAM WORDS) ADA LBUF+3 COMPUTE MAX. LOAD ADDRESS LDB A SAVE IN B CMB,INB IF THIS IS A NEW ADB LWH2 MAX. THEN SSB SET THE STA LWH2 NEW MAX. JMP LDRIN GO GET NEXT RECORD. SKP * * ENT/EXT RECORD PROCESSOR * ENTR CCA,RSS ENT PROCESSOR EXTR CLA EXT PROCESSOR STA NXFLG NXFLG = ENT/EXT FLAG LDA LBUF+1 SET NO. SYMBOLS AND M37 ISOLATE NO. SYMBOLS CMA,INA STA EXCNT SET SYMBOL COUNT LDB ALBUF ALBUF = A(LBUF) ADB P3 P3 = +3 STB SYM12 SET STARTING SYMBOL ADDR * SETNX LDB SYM12 SET B FOR LSTE JSB LSTE ENTR SYMBOL IN THE LST JMP ENTX3 NEW ENTRY GO FINISH. * * LDA NXFLG GET ENT/EXT FLAG SZA,RSS SKIP IF ENT JMP ENTX4 COMPLETE EXT PROCESSING * * PROCESS ENT REC * LDA SLST IF THIS IS A FORCED  CMA SYMBOL ADA TLST THEN SSA GIVE ERROR JMP DUPEN * LDA .LST4,I GET WORD 4 OF LST ENTRY SZA,RSS SKIP IF NON-ZERO (DEFINED) JMP ENTX2 MAKE ENTRY FOR DEFINED EXT * SSA SKIP IF ENTRY MADE JMP ENTX6 MAKE ENTRY FOR BS EXT * DUPEN LDA ERR05 SET CODE - DUPLICATE ENTRY POINT CMA,INA SET NEG SO NO TR,ERRLU MAY BE DONE JSB GN.ER PRINT GN.ER MESSAGE LDA P5 LDB .LST1 .LST1 = ADDR OF SYMBOL JSB DRKEY PRINT DUPLICATE ENTRY SYMBOL LDA .LST4,I GET THE CURRENT DEFINING ADA N5 VALUE AND IF NOT A SELF DEFINING SSA,RSS SYMBOL JMP ENTX2 GO REDEFINE THE SYMBOL * JMP ENTX5 ELSE GO REDEFINE ONLY IF NEW SELF DEF. * ENTX6 LDA ID6,I GET CURRENT TYPE AND M7 ISOLATE TYPE CPA P3 TYPE = BG DISK RESIDENT? RSS YES - CONTINUE (ERROR) JMP ENTX2 MAKE ENTRY FOR UNDEFINED EXT * LDA ERR13 SET CODE = INVALID BG BS ORDER JMP ERCO1 ENTX2 CCA GET MAIN IDENT INDEX. ADA TIDNT STA .LST4,I ENTER IDENT INDEX IN WORD 4 JMP ENTX5 * ENTX3 LDA NXFLG GET EXT/ENT FLAG SZA SKIP IF EXT ENTRY JMP ENTX2 SET WORD 4 OF ENT ENTRY * LDA ID6,I GET TYPE AND M7 ISOLATE TYPE CCB GET MAIN IDENT INDEX ADB TIDNT CPA P5 TYPE = BS? CMB,RSS YES - SET .LST4 = BS REF, SKIP CLB NO - SET .LST4 = UNDEFINED STB .LST4,I YES - SET INDEX IN LST WORD 4 ENTX4 LDA ID6,I GET TYPE AND M7 ISOLATE TYPE CPA P5 TYPE = BG SEGMENT? RSS YES - CONTINUE JMP ENTX5 NO - IGNORE BG SEG MAIN ADDR * CCA ADA TIDNT GET CURRENT IDENT INDEX. STA IMAIN SAVE IDENT INDEX. LDA .LST4,I GET IDENT INDEX. ;SZA SKIP IF UNDEFINED. SSA SKIP IF IDENT INDEX. JMP ENTX5 IGNORE UNDEFINED EXT * CPA B2 IF SPECIAL SYMBOL RSS FOR GET CPA P3 THE BS RSS BIT CPA P4 JMP ENTX5 * STA TIDNT SET IDENT INDEX FOR IDX JSB IDX SET IDENT ADDRESSES JSB ABORT IDENT NOT FOUND LDA ID6,I GET TYPE SSA,RSS SKIP IF MAIN JMP NTMAN SET FLAG FOR IGNORING BS REF * AND M7 ISOLATE TYPE CPA P3 TYPE = BG DISK RESIDENT? CCB,RSS SET FLAG FOR BS REF, SKIP NTMAN CLB SET FLAG FOR IGNORING BS REF STB TCHAR SET FLAG = 0/-1 = IGNORE/BS REF LDA IMAIN GET CURRENT IDENT INDEX. STA TIDNT SET FOR NEXT IDENT. JSB IDX SET CURRENT IDENT ADDRESSES JSB ABORT INDEX INVALID. ISZ TCHAR SKIP - SET IDENT ADDR FOR BS REF JMP ENTX5 IGNORE IF NOT MAIN BG DISK RES * LDA .LST4,I GET BG MAIN INDEX. STA ID8,I SET MAIN IDENT INDEX IN BS IDENT ENTX5 LDA SYM12 GET SYMBOL ADDR ADA P3 ADJUST FOR BOTH ENT & EXT STA SYM12 SAVE THE ADDRESS FOR NEXT SYMBOL LDB NXFLG GET EXT/ENT FLAG SZB,RSS IF EXT SKIP THE SPECIAL SYMBOL JMP ENTX8 CODE * ADB SYM12 GET THE FLAG LDA B,I AND P15 ISOLATE THE SYMBOL TYPE LDB .LST4,I IF UNDEFINED MUST SZB,RSS BE A FOURCED JMP ENTX7 SYMBOL SO DON'T RESET * SZA IF PROGRAM CPA P1 OR BASE PAGE JMP ENTX7 THEN STANDARD SYMBOL SKIP * STA .LST4,I SET THE SPECIAL FLAG LDA SYM12,I GET THE VALUE STA .LST5,I AND SET IT ENTX7 ISZ SYM12 STEP TO THE NEXT SYMBOL ENTX8 ISZ EXCNT TEST SYMBOL COUNTER JMP SETNX PROCESS NEXT SYMBOL * JMP LDRIN GO GET NEXT RECORD. SKP ERCOV iLDB SERFG IF PROCESSING A SKIP SSB JMP INCHK THEN JUST CONTINUE * CMA,INA SET NEG SO NO TR,ERRLU MAY BE DONE ERCO1 JSB GN.ER SEND ERROR MESSAGE LDA SERFG GET THE LOADING FLAG LDB ID1 AND THE NAME ADDRESS OF CURRENT MODULE SZA IF NOT WITHIN A MODULE LDB MES22 USE '(NONE' INSTEAD LDA NAMR. SZA,RSS LDB MES22 LDA P5 PRINT 5 CHARACTERS JSB DRKEY OF PROGRAM NAME ON TTY * LDA NAMR. WAS A NAM RECORD EXPECTED SZA,RSS SKIP IF ONE WASN'T JMP ERCO2 YES, NEEDN'T BACK UP THE INDICES LDA SERFG WAS A SKIP BEING PROCESSED SSA SKIP IF ONE WASN'T JMP ERCO3 NEED'T BACK UP INDICES * LDA BUID BACK UP THE IDENT LST STA PIDNT LDA BULST AND THE ENT LIST STA PLST * ERCO2 CCA SET THE FLUSHING STA SERFG FLAG ERCO3 CLA STA NAMR. AND CLEAR THE NAM EXPECTED FLAG. JMP INCHK GO GET THE NEXT RECORD SPC 4 * * SUBROUTINE TO COMPUTE & STORE CHECKSUM OF NAM RECORD IN CBUF. * CKSUM NOP LDB CBUF GET RECORD LENGTH. BLF,BLF CMB,INB NEGATE. ADB P3 SKIP WORDS 1-3. STB WDCNT RECORD WORD COUNTER. LDA CBUF+1 INITIALIZE CHECKSUM. LDB ACBUF ADB P3 ADA B,I ADD WORD TO CHECKSUM. INB ISZ WDCNT JMP *-3 LOOP TILL DONE. STA CBUF+2 STORE NEW CHECKSUM. JMP CKSUM,I EXIT. SKP * * FILTR - FILTERS PROGRAM TYPES FOR RTE-II & III * * CALLING SEQ: RETURN: (N+1) * LDA TYPE A=NEW TYPE * JSB FILTR B=DESTROYED * SPC 1 FILTR NOP IFZ ***** BEGIN DMS CODE ***** LDB A SET A WITH WHOLE AND M17 TYPE AND B WITH LOW SWP 4 BITS (PRIMARY TYPE, REV). SPC 1 nB@< CPB P4 TYPE 4 XOR P13 BECOMES 9 SPC 1 CPB P12 TYPE 12 XOR P13 BECOMES 1 SPC 1 CPB P13 TYPE 13 XOR P8 BECOMES 5 ****** END DMS CODE ****** XIF SPC 1 IFN *** BEGIN NON-DMS CODE *** LDB A SET UP A WITH WHOLE TYPE AND M37 AND B WITH LOW 4 SWP BITS (PRI TYPE, REV, SSGA) SPC 1 CPB P30 TYPE 30 XOR P25 BECOMES 7 SPC 1 AND M17 SHUT OFF ANY SSCA BITS **** END NON-DMS CODE **** XIF SPC 1 JMP FILTR,I SKP * BUID NOP SAVED IDENT INDEX. BULST NOP SAVED LST INDEX. N5 DEC -5 P1 DEC 1 P3 DEC 3 P4 DEC 4 P5 DEC 5 P8 DEC 8 P9 DEC 9 P12 DEC 12 P13 DEC 13 P15 DEC 15 P25 DEC 25 P30 DEC 30 M7 OCT 7 M17 OCT 17 M37 OCT 37 M77 OCT 77 M177 OCT 177 M7400 OCT 177400 M7777 OCT 77777 ERR05 ASC 1,05 ERR08 ASC 1,08 ERR13 ASC 1,13 SYM12 NOP SLST NOP SIGN OCT 100000 * MES22 DEF *+1 ASC 3,(NONE) SPC 4 * * PROCESSOR FOR END COMMAND * ***** * ** END COMMAND PROCESSOR * ***** * * PRINT LIST OF UNDEFINEDS, IF ANY, OR "NO UNDEFS" * EOL CLA JSB EPL JMP PRCMD,I END OF COMMANDS. B* * ***** CONSTANTS ***** * MD24 DEC -24 M1 OCT -1 B2 OCT 2 B40 OCT 40 B51 OCT 51 B54 OCT 54 SKP * * SET PARAMETERS INTO IDENTS * * THE PARAMETER INPUT SECTION PERMITS ALTERATION (OR INTRODUCTION) * OF THE TYPE, PRIORITY, AND EXECUTION INTERVAL FOR EACH PROGRAM. * EACH PARAMETER RECORD HAS ONE OF THE FOLLOWING FORMATS: * * NAME,TYPE * NAME,TYPE,PRIORITY * NAME,TYPE,PRIORITY,EXECUTION INTERVAL * * TYPE = 2 DECIMAL DIGITS (1-99) * PRIORITY = 5 DECIMAL DIGITS (0-32767) * EXECUTION INTERVAL = 6 OPERANDS * 1 - RESOLUTION CODE (2 DECIMAL DIGITS) * 2 - EXECUTION MULTIPLE (5 DECIMAL DIGITS) * 3 - HOURS (2 DECIMAL DIGITS) * 4 - MINUTES (2 DECIMAL DIGITS) * 5 - SECONDS (2 DECIMAL DIGITS) * 6 - 10'S MULLISECONDS (2 DECIMAL DIGITS) * * NOTE: TYPE OF BG DISK RESIDENTS HAVING BG SEGMENTS MAY NOT * BE ALTERED WITHOUT DESTROYING RELATIONSHIP. * PARAM JSB SPACE NEW LINE LDA P10 LDB MES24 MES24 = ADDR: PARAMETERS JSB DRKEY PRINT: PARAMETERS * PARST CLA,INA LDB HYADD JSB READ GET ASCII PARAMETER RECORD SZA,RSS SKIP IF CHARS INPUT JMP PARST REPEAT PARAMETER INPUT * LDA N5 JSB GETNA MOVE CHARS FROM LBUF TO TBUF CPA "/E" CHARS = /E? JMP SETLB YES - CLOSE FILE. * CPA BLANK BLANK LINE OR COMMENT? JMP PARST YES TRY ANOTHER * JSB GETAL GET NEXT CHAR FROM LBUF CPA B40 CHAR = BLANK?(DELIMITER = COMMA) JMP PANOK YES - CONTINUE * PANER LDA ERR09 PARAMETER NAME ERROR JMP PARER * PANOK LDB ATBUF FIND THE PROGRAM JSB IDXS IN THE IDENT TABLE JMP PANER NOT FOUND- INVALID NAME * * SET TYPE LDA N2 JSB GETOC CONVERT TO OCTAL JMP PATER INVALID DIGIT * JSB GETAL GET NEXTƭ CHAR FROM LBUF CPA ZERO CHAR = ZERO? (END OF BUFFER) RSS YES - CONTIMUE CPA B40 CHAR = BLANK?(DELIMITER = COMMA) JMP SETYP SET PROGRAM TYPE IN IDENT * PATER LDA ERR10 PARAMETER TYPE ERROR JMP PARER * SETYP CLB IF THIS IS THE SCHEDULED PGM CCA ADA TIDNT AGAIN CPA SCH1 THEN STB SCH1 CLEAR ITS FLAG LDB OCTNO GET CONVERTED NUMBER LDA ID6,I GET CURRENT TYPE AND M177 TO A CPA B IF NO CHANGE JMP TYPOK SKIP CHECK * CPB P14 IF CHANGE IS TO CORE RES LIB CPA P6 MUST BE LEGAL CORE RES. LIB. MODULE RSS OK SKIP JMP PATER NOT OK, ERROR * TYPOK LDA OCTNO IF AUTO SCHED AND P64 BIT NOT SET SZA,RSS THEN JUST GO JMP SCH SET TYPE. SPC 1 LDB OCTNO AUTO SCHED...SUBTRACT ADB N80 80 FROM TYPE TO STB OCTNO GET REAL TYPE. SPC 1 LDA ID6,I MERGE M/S BIT IN AND SIGN WITH TYPE. IOR B CCB ADB TIDNT B HAS IDENT INDEX. SPC 1 SSA,RSS IF NOT MAIN PGM JMP SCH IGNOR IT AND M7 MASK TO THE ID TYPE SZA IF ZERO OR ADA N5 MORE THAN 4 SSA SKIP STB SCH1 ELSE SET PGM IDENT IN SCH FLAG SPC 1 SCH LDA OCTNO GET NEW TYPE JSB FILTR FILTER IT, LDB A THEN MERGE LDA ID6,I INTO IDENT 6 AND M7600 IOR B STA ID6,I SPC 1 JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO ? (END OF BUFFER) JMP PARST YES - GET NEXT PARAMETER RECORD * * SET NEW PROGRAM PRIORITY * LDA N5 SET COUNT FOR DECIMAL CONVERSION JSB GETOC CONVERT TO OCTAL JMP PAPER PRIORITY ERROR _* SSA IF NEGATIVE JMP PAPER THEN ERROR * JSB GETAL GET NEXT CHAR FROM LBUF SZA CHAR = ZERO ? (END OF BUFFER) CPA B40 CHAR = BLANK?(DELIMITER = COMMA) JMP SETNR SET PRIORITY * PAPER LDA ERR11 PARAMETER PRIORITY ERROR JMP PARER * SETNR CLB SIGNAL RDNAM TO IGNORE NAME IN PARSA LDA ACBUF GET THE NAM RECORD TO CBUF. JSB RDNAM JSB ABORT ERROR. * JSB FINDN SEARCH FOR A MODIFIED NAM RECORD JMP SETPR DIDN'T HAVE ONE YET JMP SETPR FOUND, NOW MODIFY IT SKP * * SEARCH FOR A MODIFIED NAM RECORD BELONGING TO THE CURRENT IDENT * * * RETURN: (P+1) IDENT DOES NOT PRESENTLY HAVE ONE * (P+2) FOUND ONE - POSITIONED AT IT * * BRANCHES TO PACLO ON FILE ERROR (FOR TERMINATION) * FINDN NOP CLA STA IRECW LDA ID5,I CHECK IF NAM RECORD ALREADY HAS RAL MODIFIED VERSION (COMPILED PROG). SSA,RSS JMP FINDN,I NO. * JSB LOCF YES. SAVE CURRENT WRITE POINTERS. DEF *+6 DEF NMDCB DEF FMRR DEF IRECW DEF IRBW DEF IOFFW * JSB CHFIL JMP PACLO ERROR. * JSB RWNDF REWIND THE FILE. DEF *+3 DEF NMDCB DEF FMRR * JSB CHFIL JMP PACLO ERROR. * END1 JSB LOCF GET LOC. OF NEXT RECORD. DEF *+6 DEF NMDCB DEF FMRR DEF IRECR DEF IRBR DEF IOFFR * JSB CHFIL JMP PACLO ERROR. * JSB READF READ THE RECORD. DEF *+6 DEF NMDCB DEF FMRR DEF CBUF DEF P60 DEF LEN * JSB CHFIL JMP PACLO ERROR. * LDA LEN CPA N1 JMP PACLO ERROR IF EOF. * LDB ACBUF COMARE NAM IN CBUF ADB P3 AGAINST NAM IN IDENT. LDA B,I CPA ID1,I INB,RSS JMP END1 NO MATCH. LDA B,I CPA ID2,I INB,RSS JMP END1 NO MATCH. LDA B,I XOR ID3,I AND M7400 SZA JMP END1 NO MATCH. * JSB APOSN MATCH. POSITION NEXT WRITE. DEF *+6 DEF NMDCB DEF FMRR DEF IRECR DEF IRBR DEF IOFFR * JSB CHFIL JMP PACLO ERROR. * ISZ FINDN BUMP RETURN ADDRESS JMP FINDN,I SKP * SETPR LDA CBUF ADJUST RECORD LENGTH FOR THOSE ALF,ALF NOT FIXED FOR COMPILED PROGRAMS. CPA P9 LDA P17 STA IL ALF,ALF STA CBUF LDB OCTNO GET PRIORITY SZB,RSS SKIP - PRIORITY ENTERED LDB P99 REPLACE ZERO PRIORITY WITH 99 LDA ID6,I GET THE TYPE AND M177 AND ISOLATE IT SZA,RSS IF A SYSTEM PROGRAM USE CLB PRIORITY ZERO STB CBUF+10 SET NEW PRIORITY IN THE RECORD JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO CHAR = ZERO ? (END OF BUFFER) JMP PARWR YES - GO REWRITE THE NAM RECORD * * GET RESOLUTION CODE * LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF STA CBUF+11 SET IN THE NAM RECORD * * GET EXECUTION MULTIPLE * LDA N5 SET COUNT FOR DECIMAL CONVERSION JSB EXINT GET DIGITS FROM LBUF AND M1600 ISOLATE UPPER 3 BITS IN A SZA SKIP IF VALID MULTIPLE JMP PAIER INVALID EXECUTION INTERV FORMAT LDA OCTNO GET CONVERTED NUMBER STA CBUF+12 SET IN THE NAM RECORD * * GET HOURS * LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF STA CBUF+13 SET IN THE NAM RECORD * * GET MINUTES * LDA N2 SET FOR 2 DECIMAL DIGITS ' JSB EXINT GET DIGITS FROM LBUF STA CBUF+14 SET IN THE NAM RECORD * * GET SECONDS * LDA N2 SET FOR 2 DECIMAL DIGITS JSB EXINT GET DIGITS FROM LBUF STA CBUF+15 SET IN THE NAM RECORD * * GET TENS OF MILLISECONDS * LDA N2 SET FOR DECIMAL CONVERSION JSB GETOC CONVERT TO OCTAL JMP PAIER INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF SZA CHAR = 0? (END OF BUFFER) JMP PAIER NO - INVALID DELIMITER * LDA OCTNO GET CONVERTED NUMBER STA CBUF+16 SET IN THE NAM RECORD * PARWR JSB NEWNM BUILD NEW MODIFIED RECORD JMP PARST GO PROCESS NEXT ENTRY SKP * * COMPUTE AND STORE NEW CHECKSUM, WRITE RECORD TO * NEW NAM FILE, AND SET FLAG IN IDENT. * NEWNM NOP JSB CKSUM * JSB WRITF WRITE RECORD. DEF *+5 DEF NMDCB DEF FMRR DEF CBUF DEF IL * JSB CHFIL ABORT IF WRITE ERROR. JMP PACLO * LDA ID5,I SET FLAG IN IDENT. IOR BIT14 STA ID5,I * LDA IRECW WAS IT AN UPDATE WRITE? SZA,RSS JMP NEWNM,I NO. * JSB APOSN YES. GET BACK TO OLD PLACE. DEF *+6 DEF NMDCB DEF FMRR DEF IRECW DEF IRBW DEF IOFFW JSB CHFIL JMP PACLO * JMP NEWNM,I * IRECW NOP IRBW NOP IOFFW NOP IRECR NOP IRBR NOP IOFFR NOP P60 DEC 60 LEN NOP BIT14 OCT 40000 ACBUF DEF CBUF CBUF BSS 60 SKP * EXECUTION INTERVAL INPUT CONTROL EXINT NOP JSB GETOC CONVERT TO OCTAL JMP PAIER INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA B40 CHAR = BLANK? (DELIMITER=COMMA) RSS YES - CONTINUE JMP PAIER NO - INVALID DELIMITER LDA OCTNO GET CONVERTED NUMBER JMP EXINT,I RETURN WITH NUMBER IN A * PAIER LDA ERR12 PARAMETER INTERVAL ERROR PARER JSB PNERR SEND ERROR MESSAGE JMP PARST TRY AGAIN * PNERR NOP SUBROUTINE TO PRINT ERROR JSB GN.ER PRINT GN.ER MESSAGE JSB SPACE NEW LINE JMP PNERR,I RETURN * PACLO JSB CLOSE CLOSE NEW NAM FILE. DEF *+3 DEF NMDCB DEF TEMP1 * LDA FMRR WRITE ERROR? SSA,RSS JMP PARST NO. * JSB GTERM ABORT. SKP * * CHANGE ENTS SECTION * SETLB JSB CLOSE CLOSE THE NAM RECORD FILE DEF *+3 DEF NMDCB DEF TEMP1 JSB SPACE * LDA P12 GET MESSAGE LENGTH LDB MES21 SEND MESSAGE JSB DRKEY 'CHANGE ENTS?' * PENT CLA,INA LDB HYADD JSB READ READ THE ENT RECORD. SZA,RSS IF ZERO JMP PENT TRY AGAIN * LDA N5 TO JSB GETNA TBUF CPA "/E" IF '/E' JMP EXENT DONE GO TO NEXT SECTION * CPA BLANK IF '*' OR BLANK LINE JMP PENT TRY THE NEXT LINE * JSB GETAL GET THE NEXT CHAR CPA B40 IF COMMA JMP ENTOK OK * ENAME LDA ERR09 ELSE ERROR JMP EARER GO REPORT IT * ENTOK LDB ATBUF FIND THE JSB LSTE DEFINE AND OR LOCATE LST NOP (DON'T CARE IF EARLIER DEFINED) * LDA N2 GET TYPE FLAG JSB GETNA CARACTER CLE CPA "AB" IF ABSOLUTE CLB,CCE SET FLAG CPA "RP" IF REPLACE CLB,CCE,INB SET OTHER FLAG SEZ IF NONE OF THE ABOVE JMP ENTNO * EATER LDA ERR10 THEN SEND ERROR EARER JSB PNERR JMP PENT * ENTNO ADB P3 ADJUST TO ENT TYPE STB IDXS SAVE IN TEMP JSB GETAL CHECK FOR COMMA CPA B40 AS NEXT CHARACTER RSS IF NOT JMP EATER BITCH *  LDA CURAL SAVE CURRENT STA ID1 POSITION LDA BUFUL FOR BACKING STA ID2 UP LDA B7 GET NUMBER JSB GETOC ASSUMING OCTAL RSS IF ERROR MIGHT BE DECIMAL SO SKIP JMP ENTOC IT IS OCTAL SO GO SET UP * LDA ID1 BACK UP THE SCANNER STA CURAL POSITION LDA ID2 STA BUFUL LDA N7 NOW TRY JSB GETOC A DECIMAL CONVERSION RSS ERROR EXPECTED ( 12345D) ON THE D JMP EATER NO ERROR SO WRONG INPUT * LDA TCHAR MAKE SURE ERROR CPA P20 WAS ON A "D" RSS YES SO FAR SO GOOD JMP EATER NO GO BITCH * ENTOC LDA IDXS SET THE ENT TYPE STA .LST4,I AND LDA OCTNO VALUE STA .LST5,I IN THE SYMBOL TABLE JMP PENT GO GET NEXT SYMBOL. * EXENT JSB SPACE SEND A SPACE SKP * * SET LIBRARY, COM, TYPE TOTALS * * THIS SECTION IS EXECUTED WHEN THE PARAMETERS HAVE * BEEN COMPLETELY READ IN. IT COMPUTES THE MAXIMUM LENGTH OF * BOTH THE REAL TIME AND BACKGROUND COMMON AREAS. * FINALLY, IT RESERVES A 22-WORD SECTION OF CODE FOR EACH USER * PROGRAM (PLUS AN ADDITIONAL 6 WORDS IF DISK RESIDENT) TO * GENERATE THE ID SEGMENTS. FINALLY, IT RESEVES A KEYWORD TO * CONTAIN THE ADDRESS OF EACH ID SEGMENT. * * CLA STA FGBGC CLEAR FORGROUND USING BG COMMON FLAG STA SICNT CLEAR SHORT ID SEG COUNT STA LICNT CLEAR LONG ID SEG COUNT STA SSCNT CLEAR BG SEG. ID SEG COUNT STA COMRT CLEAR RT COM LENGTH STA COMBG CLEAR BG COM LENGTH STA IDSP RTMR FLAG *TEMP* STA DSKSY BGMR FLAG *TEMP* JSB INIDX INITIALIZE IDX SETIX JSB IDX SET IDENT ADDRESSES JMP TRMCN TERMINATE ID SEGMENT COUNT * LDA ID6,I GET TYPE AND M17 ISOLATE tYPE AND REV COM BITS LDB ID4,I  GET COMMON LENGTH CLE CLEAR FORGROUND USING BG COMMON SWITCH CPA P11 IF BG RESIDENT USING FG COMMON RSS IFN *** BEGIN NON-DMS CODE *** CPA P12 OR BG DSC RESIDENT USING FG COMMON RSS CPA P13 OR BG SEG USING FG COMMON RSS **** END NON-DMS CODE **** XIF CPA P1 OR TYPE = RT RESIDENT? RSS CPA B2 OR TYPE = RT DISK RESIDENT? JMP SETRC SET RT COMMON LENGTH * CPA P9 IF FG RES. USING BG COMMON CCE,RSS SET CROSS COMMON SWITCH CPA P10 LIKEWISE IF FG DSC RESIDENT CCE,RSS CPA P3 TYPE = BG DISK RESIDENT?? IFN *** BEGIN NON-DMS CODE *** RSS CPA P4 TYPE = BG RESIDENT? RSS CPA P5 TYPE = BG SEG?? **** END NON-DMS CODE **** XIF JMP SETBC SET BG COMMON LENGTH * IFZ ***** BEGIN DMS CODE ***** LDA ID6,I GET TYPE AGAIN AND M37 BUT LEAVE SSGA BIT ON ****** END DMS CODE ****** XIF CPA P14 IF CORE RES LIB. RSS CPA ZERO TYPE = SYSTEM? RSS CPA P6 TYPE = LIBRARY? IFZ ***** BEGIN DMS CODE ***** RSS CPA P30 TYPE = SSGA?? ****** END DMS CODE ****** XIF SZB,RSS SKIP - HAS INVALID COMMON JMP SETR1 PROCESS NEXT IDENT * LDA ERR37 SET CODE = INVALID COMMON JSB GN.ER PRINT DIAGNOSTIC LDA P5 LDB ID1 GET IDENT ADDRESS JSB DRKEY PRINT PROG NAME FOR INVALID COM JMP SETIX PROCESS NEXT IDENT * SETBC SEZ IF CROSS COMMON SWITCH SET ISZ FGBGC SET THE CROSS COMMON FLAG LDA COMBG GET PREVIOUS MAX COMMON LENGTH CMA,INA ADA B SET A = PROG COM - PREVIOUS COM SSA,RSS SKIP IF PREVIOUS GREATER STB COMBG SET NEW MAX BG COMMON LENGTH JMP SETR1 CHECK FTYPE * SETRC LDA COMRT GET PREVIOUS MAX COMMON LENGTH CMA,INA ADA B SET A = PROG COM - PREVIOUS COM SSA,RSS SKIP IF PREVIOUS GREATER STB COMRT SET NEW MAX RT COM LENGTH SETR1 LDA ID6,I GET M/S SSA,RSS SKIP IF MAIN JMP SETIX PROCESS NEXT IDENT * AND M7 ISOLATE TYPE CLB CPA P1 TYPE = RT RESIDENT? IFN *** BEGIN NON-DMS CODE *** INB,RSS CPA P4 OR TYPE = BG RESIDENT? **** END NON-DMS CODE **** XIF ISZ SICNT YES, COUNT SHORT ID SEGMENT SZB IF ONE ENCOUNTERED ISZ IDSP SIGNAL IN *TEMP* FOR LATER CLB RESET FLAG CPA B2 IF FORGROUND DISC RESIDENT INB,RSS OR CPA P3 BACKGROUND DISC RESIDENT ISZ LICNT COUNT A LONG ID SEGMENT SZB IF A RTDR ENCOUNTERED ISZ DSKSY THEN SIGNAL IN *TEMP* FOR LATER CPA P5 IF A SEGMENT ISZ SSCNT COUNT A SEGMENT ID SEGMENT JMP SETIX GO PROCESS THE NEXT MODULE * * TRMCN JSB SPACE LDA P23 LDB MES42 MES42 = ADDR: # OF BLANK ID'S JSB READ PRINT AND GET REPLY LDA N5 GET 5 JSB GETOC DECIMAL DIGITS, CONVERT JMP TRM2 -INVALID INPUT. SZA,RSS IF ZERO, ADD 1 INA FOR BKG. ON-LINE LOADING. ADA LICNT ADD TO LONG ID SEGMENT COUNT. LDB A CHECK AGAINST THE 254 MAX ADA N255 SSA,RSS JMP TRM2 TOO BIG STB LICNT * JSB SPACE SEND TRM4 LDA P31 MESSAGE LDB MES43 '# OF BLANK SEGMENT ID'S?' JSB READ AND GET ANSWER LDA N5 CONVERT JSB GETOC THE ANSWER JMP TRM5 ERROR TRY AGAIN ADA SSCNT ADD TO THE SHORT ID SEG COUNT LDB A AND M7400 SZA CHECK AGAINST 255 MAX JMP TRM5 STB SSCNT  RESTORE ADB LICNT SUM THE TOTAL COUNT ADB SICNT INB ADD ONE FOR STOP WORD STB KEYCN IFZ SKP ***** BEGIN DMS CODE ***** ******************************************************************** * * * ASK FOR MAXIMUM NUMBER OF PARTITIONS TO BE DEFINED * * * ******************************************************************** SPC 1 JSB SPACE GNP LDA MS30L LENGTH OF MSG LDB MS30. ADR OF MESSAGE JSB READ SEND AND READ RESPONSE LDA N5 CHECK FOR 5 DECIMAL JSB GETOC DIGITS IN RESPONSE RSS TRY AGAIN ON ERROR JMP GNP1 LDA TRM3 JSB GN.ER JMP GNP SPC 1 GNP1 LDB N65 ADB A IF MORE THAN 64, SSB,RSS THEN GO AND ASK JMP GNP AGAIN STA MAXPT ELSE SAVE MAX NO. PARTS. ****** END DMS CODE ****** XIF JMP INPUT,I RETURN TO MAIN. * TRM2 LDA TRM3 PRINT JSB GN.ER "ERR 01" JMP TRMCN+1 * TRM5 LDA TRM3 JSB GN.ER JMP TRM4 * * ZERO OCT 0 N7 DEC -7 N255 DEC -255 P6 DEC 6 P10 DEC 10 P11 DEC 11 P14 DEC 14 P18 DEC 18 P20 DEC 20 P23 DEC 23 P31 DEC 31 P64 DEC 64 P99 DEC 99 N65 DEC -65 N80 DEC -80 "/E" ASC 1,/E "AB" ASC 1,AB "RP" ASC 1,RP M1600 OCT 160000 M7600 OCT 177600 IL NOP * MES24 DEF *+1 ASC 5,PARAMETERS MES21 DEF *+1 ASC 6,CHANGE ENTS? MES42 DEF *+1 ASC 12,# OF BLANK ID SEGMENTS? MES43 DEF *+1 ASC 16,# OF BLANK BG SEG. ID SEGMENTS? **** BEGIN DMS CODE **** IFZ MS30. DEF *+1 ASC 13,MAX NUMBER OF PARTITIONS? MS30L EQU P25 XIF ***** END DMS CODE ***** * ERR09 ASC 1,09 ERR10 ASC 1,10 ERR11 ASC 1,11 ERR12 ASC 1,12 ERR37 ASC 1,37 TRM3 ASC 1,01 SKP ***** * ** EPL * ENTRY POINT LIST ROUTINE * * CALLING SEQUENCE: * (A): =0, LIST UNDEFINED EXTERNAL SYMBOLS. * =1, LIST ENTRY POINT SYMBOLS AND * * (P) JSB EPL * (P+1) (RETURN) A AND B DESTROYED * ***** EPL NOP ENTRY/EXIT POINT STA NBUF SAVE ENTRY PARAMETER. SZA,RSS UNDEFS? JMP EPL5 YES EPL0 JSB INLST INITIALIZE SYMBOL TABLE POINTERS. EPL1 JSB LSTX SET LST ENTRY ADDRESSES JMP EPL3 END OF SYMBOL TABLE JSB MLBUF MOVE SYMBOL TO LBUF LDB .LST4,I (B) = ENT. ADDRESS LDA NBUF (A) = ENTRY PARAMETER SZA IF ENT LIST REQUESTED JMP EPL2 GO DISPLAY. CMB,SSB,INB,SZB SKIP IF UNDEF OR BS REF. JMP EPL1 GO CHECK NEXT ENTRY. * LDA TEMP1 HEADING PRINTED? SZA JMP EPL8 YES. ISZ TEMP1 NO. SET FLAG AND LDA UNDFS PRINT "UNDEFS". LDB UNDFS+1 JSB DRKEY * EPL8 LDB ALBUF LDA P5 JSB DRKEY OUTPUT SYMBOL. JMP EPL1 CONTINUE SCAN * * LIST SYMBOL TABLE * EPL2 CMB,SSB,INB,SZB,RSS ENTRY DEFINED? JMP EPL1 NO JMP EPL8 PROCESS NEXT ENTRY IN LST. * EPL5 LDA SLST SET BOTTOM OF PGM LST FOR SCAN. STA TLST CLA CLEAR HEADING FLAG. STA TEMP1 JMP EPL1 * EPL3 LDA NBUF IF NO UNDEFS, ADA TEMP1 PRINT "NO UNDEFS". SZA JMP EPL,I * LDA EPL6 NO--PRINT "NO UNDEFS" LDB EPL6+1 JSB DRKEY JMP EPL,I SPC 1 EPL6 DEC 9 DEF *+1 ASC 5,NO UNDEFS SPC 1 * UNDFS DEC 7 DEF *+1 ASC 4, UNDEFS * * CONSTANT AND STORAGE SECTION FOR -EPL- . * M3 OCT -3 B7 OCT 7 B60 OCT 60 * * * MOVE CURRENT SYMBOL FROM SYMBOL TABLE TO LBUF * MLBUF NOP LDA M3 LDB .LST1 JSB MOVEX ML0 NOP LDA LBUF+2 MAKE 6TH CHAR. A BLANK IOR B40 STA LBUF+2 JMP MLBUF,I SKP ***** * * SUBROUTINE: CONV (CONVERT 15-BIT BINARY NUMBER * TO 6-CHARACTER (LEADING BLANK) * ASCII FORM OF THE OCTAL * REPRESENTATION.) * * CALLING SEQUENCE: * * (A)-ADDRESS OF 3-WORD AREA FOR * STORING ASCII/OCTAL CHARACTERS * (B)-BINARY VALUE FOR CONVERSION * * (P) JSB CONV * (P+1) (RETURN)-(A)=NEXT ADDRESS OF STORAGE * AREA,(B)-DESTROYED. ***** CONV NOP STA NBUF+3 SAVE STORAGE AREA ADDRESS RBL POSITION FIRST DIGIT TO B(15-13). LDA M3 LET CONVERT COUNTER STA NBUF+4 = -3. LDA B40 MAKE FIRST CHARACTER A SPACE. CONV1 ALF,ALF ROTATE CHAR. TO UPPER POSITION STA NBUF+5 AND SAVE. BLF,RBR POSITION NEXT DIGIT TO B(02-00), LDA B AND B7 ISOLATE DIGIT. IOR B60 MAKE AN ASCII CHAR. (60 - 67). IOR NBUF+5 PACK IN UPPER CHARACTER STA NBUF+3,I AND STORE IN STORAGE AREA. ISZ NBUF+3 ADD 1 TO STORAGE AREA ADDRESS. BLF,RBR ROTATE NEXT DIGIT TO LOW B, LDA B ISOLATE CHAR AND B7 IN LOW A, IOR B60 MAKE AN ASCII CHAR. ISZ NBUF+4 INDEX CONVERT COUNTER JMP CONV1 NOT FINISHED. LDA NBUF+3 FINISHED, SET (A)= NEXT STORAGE JMP CONV,I AREA WORD ADDRESS AND EXIT. * SPC 2 ***** * ** QGETC ** GET NEXT CHAR FROM INPUT BUFFER (QIBUF) * CALLING SEQUENCE: * * JSB * RETURN1 NO MORE CHARS IN BUFFER * RETURN2 GOT ONE, RETURN IT IN .A. * ***** QGETC NOP GET A CHARACTER LDB QQCNT CPB QQCHC END OF INPUT? JMP QGETC,I YES. ISZ QQCNT COUNT CHARS READ LDA QQPTR,I SLB,RSS LEFT CHAR? ALF,ALF YES, MNLHOVE RIGHT AND B177 SLB IF THIS CHAR IS RIGHT, ... ISZ QQPTR NEXT ONE IS LEFT OF NEXT WORD. CPA STAR IF * THEN END OF LINE RSS ISZ QGETC SKIP EXIT JMP QGETC,I * QBUFA DEF QIBUF QIBUF BSS 40 QQCHC NOP QQCNT NOP QQPTR NOP STAR OCT 52 SKP * * CONSTANTS,AND MESSAGES * * ***** CONSTANTS ***** * B50 OCT 50 D15 DEC 15 B75 OCT 75 B177 OCT 177 B377 OCT 377 N2 DEC -2 LNKMD NOP LINKS FLAG. MAPMD NOP MAP FLAG. SPC 3 SPC 1 END EQU * * END LSWAP @NASMB,N,R,L,C HED RTGN3 - LOADING CONTROL SEGMENT IFN ASSEMBLY OPTION "N" FOR RTE-II NAM RT2G3,5,90 92001-16031 771219 XIF IFZ ASSEMBLY OPTION "Z" FOR RTE-III NAM RT3G3,5,90 92060-16037 771219 XIF SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ****************************************************** * * NAME: RT2G3/RT3G3 * SOURCE PART #: 92001-18031 / 92060-18037 * REL PART #: 92001-16031 / 92060-16037 * WRITTEN BY: KFH, JH, GAA * ****************************************************** SPC 1 * * ENTRY POINT NAMES * ENT FWENT * * EXTERNAL REFERENCE NAMES * IFZ EXT PARTD XIF * EXT .NM.,IRERR EXT LLOAD,LOADS,GENIO,FSECT EXT SDS#,CURAL,CPL2,PPREL EXT TBCHN,LWASM,PIOC,SWAPF,LBUF,TBUF EXT RDNAM,RDBIN EXT CONVD,LABDO,DISKA,DISKO,DISKI EXT OCTNO,DSKAD,PTYPE,TYPMS EXT GETOC,GETAL,SPACE,READ,GN.ER,DRKEY,ABORT EXT ADBP,SETDS EXT INLST,LSTX,LSTS EXT .LST1,.LST2,.LST3,.LST4,.LST5 EXT INIDX,IDX,TIDNT EXT ID1,ID2,ID3,ID4,ID5,ID6,ID8 EXT TBLNK EXT LRBP,URBP,IRBP EXT LBBP,UBBP,IBBP EXT CUBP,UCUBP,ICUBP,CUBPA EXT LNK,LNKS EXT LNK1,LNK2,LNK3 EXT SEGS,SYS,USERS,USER EXT SWRET,DSKAB,PFIX,TFIX,ADBUF,OLDDA,YE/NO EXT EXEC,CLSAB,LFOUT,CLOSF,LFDCB,FMRR,IPDCB,ERRLU EXT LWSBP,NLCOM,#IREG EXT CLOSE,NMDCB,OPEN,RRDCB,ECDCB EXT ABCOR,MXABC,TTIME,TIME1,MULR EXT CPLSB,ASKEY,SISDA,SK<EYA EXT P3,P4,P5,P14 EXT M7400 * * A EQU 0 B EQU 1 SUP ************************************************************************ * SKP * THE FOLLOWING BLOCK OF STORAGE FOR VARIABLES PRECEEDS, * AND IS REFERENCED BY, EACH SEGMENT. IT IS NOT OVERLAID * AS EACH NEW SEGMENT IS LOADED INTO CORE. * * THE LOCATION OF EACH VARIABLE MUST BE THE SAME IN * ALL SEGMENTS. IF A CHANGE IS MADE, MAKE THE SAME * CHANGE IN THE REST OF THE SEGMENTS. * * * SYSCH BSS 1 SUBCHANNEL OF SYSTEM UNIT. AUXCH BSS 1 SUBCHANNEL OF AUX UNIT. DSIZE BSS 1 DISK SIZE -NO. OF TRACKS. DAUXN BSS 1 AUXILIARY DISK SIZE. ADS# BSS 1 AUX DISC SECTORS/TRACK. * * RELOCATION BASE TABLE. RBTA BSS 1 ABSOLUTE PROGRAM BASE. TPREL BSS 1 CURRENT PROGRAM BASE ADDRESS. TPBRE BSS 1 BASE PAGE RELOCATION ADDRESS. COMAD BSS 1 CURRENT COMMON RELOCATION BASE. BSS 1 ABS PROGRAM BASE FOR MR CODE. * WDCNT BSS 1 TEMPORARY WORD COUNTER. DSKSY BSS 1 INITIAL ID SEGMENT DISK ADDRESS IDSP BSS 1 POSITION OF 1ST ID SEG. IN SECT TTYCH BSS 1 SYSTEM TTY CHANNEL NO. * PLFLG BSS 1 PROGRAM LOAD. FLAG = -1/0 = L/NL DSCNT BSS 1 DISK SEGMENT SECTOR COUNT * NXFLG BSS 1 ENT/EXT FLAG = -1/0 EXCNT BSS 1 SYMBOL COUNTER * LCNT BSS 1 CURRENT LBUF COUNT DCNT BSS 1 CURRENT DBUF COUNT CURAI BSS 1 CURRENT IBUF COUNT * CPLS BSS 1 ADDRESS OF TOP OF FIXED CP LINK IMAGE CPL1 BSS 1 ADDRESS OF LOW CURRENT PAGE LINK SPECS. CPL1H BSS 1 NUMBER OF CURRENT PAGE LINKS ASSIGNED CPL2H BSS 1 IN LOW AND HIGH AREA RESPECTIVELY URBP1 BSS 1 LWA R/T DISC RES BP LINK AREA BPMAX BSS 1 MAX USED BASE PAGE LINKAGE +1 CURAK BSS 1 CURRENT KBUF ADDRESS * CURAT BSS 1 CURRENT TBUF ADDRESS TCNT BSS 1 CURRENT TBUF COUNT V* CURAP BSS 1 CURRENT PLIST ADDRESS * AMAD BSS 1 CURRENT MLIST ADDRESS * LICNT BSS 1 LONG ID SEGMENT COUNT SICNT BSS 1 SHORT ID SEGMENT COUNT SSCNT BSS 1 BG. SEG ID COUNT COMRT BSS 1 MAXIMUM RT COM LENGTH COMBG BSS 1 MAX BG COM LENGTH * DSKEY BSS 1 CURRENT KEYWORD DISK ADDRESS DSKID BSS 1 DISK ID SEGMENT ADDRESS KEYCN BSS 1 TOTAL KEYWORD COUNT KEYCT BSS 1 CURRENT KEYWORD COUNT * MLIST BSS 11 MEMORY MAP BUFFER * TEMP1 BSS 1 TEMP2 BSS 1 LWH1 BSS 1 LWH2 BSS 1 LWH3 BSS 1 LWH4 BSS 1 L01 BSS 1 * FSYBP BSS 1 FIRST WORD SYS BP LINKAGE SYSAD BSS 1 CURRENT ID SEGMENT ADDRESS * TBREL BSS 1 CURRENT BP RELOC ADDR PBREL BSS 1 INITIAL BP RELOC ADDR * RELAD BSS 1 CURRENT CORE RELOCATION ADDRESS * BSBAD BSS 1 BG SEGMENT BP RELOC ADDR BSPAD BSS 1 BG SEGMENT PROG RELOC ADDR * LFLAG BSS 1 PROGRAMS-LOADED FLAG IMAIN BSS 1 CURRENT MAIN IDENT INDEX. HDFLG BSS 1 HEADING FORMAT FLAG CIDNT BSS 1 CURRENT MAIN IDENT INDEX. * AEQT BSS 1 ADDRESS OF EQUIPMENT TABLE CEQT BSS 1 NO. ENTRIES IN EQUIPMENT TABLE * ASQT BSS 1 ADDR OF DEVICE REFERENCE TABLE CSQT BSS 1 NO. ENTRIES IN DEV. REF. TABLE * AINT BSS 1 ADDRESS OF INTERRUPT TABLE CINT BSS 1 NO. ENTRIES IN INTERRUPT TABLE * DSKIN BSS 1 DISK ADDR OF INT CODE RECORD INTCN BSS 1 RECORD COUNT OF INT CODE * CURIL BSS 1 CURRENT ILIST ADDRESS ILIST BSS 64 USER SYSTEM PROG IDENT ADDR LIST * IDSAV BSS 1 INDEX OF CURRENT IDENT. DSKMN BSS 1 INITIAL MAIN DISK ADDRESS BSSDP BSS 1 INITIAL DISK RES MAIN BSS DISP PRENT BSS 1 PRIMARY ENTRY POINT DBLAD BSS 1 CURRENT DBL ADDRESS REKEY BSS 1 INSTRUCTION TYPE BYTE INSCN BSS 1 INSTRUCTION TYPE COUNTER INSTR BSS 1 CURREN4T INSTRUCTION PAGNO BSS 1 CURRENT PAGE NO. OPRND BSS 1 CURRENT OPERAND PLGTH BSS 1 PROGRAM LENGTH DRT2 BSS 1 DISK DRT ENTRY ( SYSTEM) DRT3 BSS 1 AUX DISK DRT ENTRY LIBFG BSS 1 LDTYP BSS 1 SCH1 BSS 1 INDEX OF IDENT OF PGM TO BE SCHEDULED SCH3 BSS 1 ADDRESS OF CURRENT ID SEGMENT SCH4 BSS 1 ADDRESS OF THE SCHEDULED PGM ID SEG FGBGC BSS 1 BACKGROUND USING FG COMMON FLAG $LIBR BSS 1 INDEX OF $LIBR ENT $LIBX BSS 1 INDEX OF $LIBX ENT CUPRI BSS 1 * MEM1 BSS 1 MEM2 BSS 1 MEM3 BSS 1 MEM4 BSS 1 MEM5 BSS 1 MEM6 BSS 1 MEM7 BSS 1 MEM8 BSS 1 MEM9 BSS 1 MEM10 BSS 1 MEM11 BSS 1 MEM12 BSS 1 * IFZ ***** BEGIN DMS CODE ***** COMSZ BSS 1 #WORDS COMMON DECLARED FOR * CURRENT MAIN LPCOM BSS 1 LAST PAGE CONTAINING ANY COMMON FPSAM BSS 1 1ST PAGE CONTAINING S.A.M. FWSAM BSS 1 1ST WORD CONTAINING S.A.M. LPSYS BSS 1 LAST PAGE CONTAINING SYS OR LIB FPDSK BSS 1 1ST PAGE DISK PART AREA LOLNK BSS 1 LOW LINK FOR SSGA,LIB, OR SYS HILNK BSS 1 HI LINK USED BY MEM RES PRG BPINC BSS 1 CURR DIRECTION FOR BP LINK * ALLOCATION. +1=UP,-1=DOWN BPLMT BSS 1 WORD AFTER LAST WORD AVAIL * FOR BP LINK ALLOCATION TPMAX BSS 1 HWM FOR RELOCATION OF BG * MAINS AND SEGS MAXPT BSS 1 NUM PARTS. ALLOWED MAT. BSS 1 ADR OF LENGTH WORD * BEFORE MEM ALLOC TABLE (MAT) SSGA. BSS 1 FWA SSGA (LAST WORD SYS * OR LIB +1) FWMRP BSS 1 FWA MEM RES PROG AREA * (NEXT WORD AFTER COMMONS) MAP. BSS 1 PTR TO MEU RES MAP MPFT. BSS 1 PTR TO MPFT ****** END DMS CODE ****** XIF * SECTR BSS 0 BOOTSTRAP BUOFFER FORMAT * LBPSY BSS 1 LOWER SYSTEM BP ADDRESS UBPSY BSS 1 UPPER SYSTEM BP ADDRESS DSKBP BSS 1 SYS BP DISK ADDRESS * LRMAN BSS 1 MAIN RESIDENT LOWER ADDRESS URMAN BSS 1 MAIN RESIDENT UPPER ADDRESS DSKRR BSS 1 MAIN RESIDENT DISK ADDRESS * LBMAN BSS 1 MAIN BG LOWER ADDRESS UBMAN BSS 1 MAIN BG UPPER ADDRESS DSKBG BSS 1 MAIN BACKGROUND DISK ADDRESS * SYMAD BSS 1 AVAIL SYS MEM ADDR BGBND BSS 1 BACKGROUND BOUNDARY * DSKAV BSS 1 NEXT AVAILABLE DISK ADDRESS DSKLC BSS 1 DISK ADDRESS OF LIBRARY CODE DSKLB BSS 1 DISK ADDR OF LIBRARY ENTRY PTS DSKUT BSS 1 UTILITY PROG DISK ADDRESS DSKBS BSS 1 DISK ADDR OF MAIN BG DISK RES BP DSKBR BSS 1 CURRENT MAIN BG DISK RES DISK AD ADICT BSS 1 ADDR OF DISK DICTIONARY LBCNT BSS 1 RESIDENT LIBR ENTRY PT COUNT UTCNT BSS 1 UTILITY LIBRARY COUNT KEYAD BSS 1 CURRENT KEYWORD ADDRESS RTCAD BSS 1 RT COM CORE ADDRESS LBCAD BSS 1 LIBRARY CODE ADDRESS SYBAD BSS 1 ADDR OF FIRST BP LINK FOR BG IDSAD BSS 1 ADDR OF FIRST ID SEGMENT ABSID BSS 1 IDENT ADDR FOR NEXT BG SEG SCAN MAXRP BSS 1 MAXIMUM RT DISK RESIDENT PROG MAXRB BSS 1 MAXIMUM RT DISK RESIDENT BP IDMBS BSS 1 BG MAIN ADDRESS FOR BS REF * TB30 BSS 128 TRACK MAP TABLE #SUBC BSS 1 # SUBCHANNELS DEFINED(7905) SPC 4 ********************************************************* * * * END OF COMMON STORAGE BLOCK FOR ALL SEGMENTS. * * * ********************************************************* SPC 4 AILST DEF ILIST SKP * NOTE THE FOLLOWING RESOLVES ARITHMETIC DEF'S TO EXTERNALS * LABS LDA N2 GET LOOP COUNTER STA TEMP1 SAVE LDB LSTAA GET ADDRESS OF LIST LOOP fLDA B,I GET ADDRESS RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 STA B,I AND SAVE IT AGAIN INB ISZ TEMP1 JMP LOOP JMP SWRET RETURN TO MAIN * * LSTAA DEF *+1 ATBUF DEF TBUF ALBUF DEF LBUF SKP ERR23 ASC 1,23 INVALID FWA BP LINKAGE ADDRESS * * PROGRAM CONSTANT FACTORS N2 DEC -2 N5 DEC -5 N11 DEC -11 P2 DEC 2 P6 DEC 6 P7 DEC 7 P9 DEC 9 P10 DEC 10 P12 DEC 12 P15 DEC 15 P17 DEC 17 P22 DEC 22 P24 DEC 24 P28 DEC 28 P30 DEC 30 P31 DEC 31 P32 DEC 32 P192 DEC 192 L2000 OCT -2000 M7 EQU P7 M37 EQU P31 M77 OCT 77 M177 OCT 177 M2000 OCT 2000 * HLT0 HLT 0B MSIGN OCT 100000 UBLNK OCT 20000 D$STR DEF *+1 ASC 3,$STRT SKP * * LOAD ABSOLUTE SYSTEM * * THIS SEGMENT CONTROLS THE GENERATION OF * THE ABSOLUTE CODE FOR THE SYSTEM. EACH PROGRAM * IS LOADED BY TYPE AS FOLLOWS: * * (1) SYSTEM * (2) RESIDENT LIBRARY * (3) RT RESIDENTS * (4) RT DISK RESIDENTS * (5) BG RESIDENTS * (6) BG DISK RESIDENTS (AND BG SEGMENTS) * * EACH TYPE OF PROGRAM IS LOADED IN THE FOLLOWING MANNER: * * (1) THE IDENTIFICATION BLOCK FOR THE PROGRAM IS LOCATED * IN IDENT. A CALL TO LOAD IS EXECUTED TO LOAD THIS PROGRAM AND * ALL CALLED SUBROUTINES. IF THE PROGRAM IS DISK RESIDENT, * THE BASE PAGE SECTION OF CODE IS WRITTEN ON THE DISK * IMMEDIATELY AFTER THE MAIN SECTION OF CODE. IF THE * PROGRAM IS RT DISK RESIDENT, THE BOUNDARIES OF THE LARGEST * SECTION OF BASE PAGE AND PROGRAM ARE SAVED. IF THE PROGRAM IS * A USER PROGRAM (OTHER THAN SYSTEM USER PROGRAM) AN ID SEGMENT IS * GENERATED. FINALLY, THE BASE PAGE LINKAGE ADDRESSES ARE MADE * UNAVAILABLE TO SUBSEQUENT PROGRAMS IF THE PROGRAM IS DISK RESIDENT. * * THE ALLOCATION OF MEMORY TO THE SYSTEM IS GIVEN BELOW: * THE FREE MEMORY IS REPORTED TO THE SYSMTEM IN EQT1 TO EQT12 * WITH THE ODD NUMBERED ENTRIES BEING THE CORE ADDRESSES * AND THE EVEN NUMBERED ENTRIES BEING THE NUMBER OF WORDS. SKP ************************************************** * * * * * BG DISK RESIDENTS * * * ************************************************** * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * BG RESIDENTS * * * * * ************************************************** * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * BG COMMON * **************** BG BOUNDARY ********************* * * * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * * * * * RT DISK RESIDENTS * * * ************************************************** * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * * * RT RESIDENTS * * * ************************************************** * POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * RT COMMON * ***************** RT BOUNDARY ******************** * RESIDENT LIBRARY * ************************************************** * Z POSSIBLE SYSTEM AVAL MEM BLOCK * ************************************************** * * * DISK ALLOCATION TABLE * * ID SEGMENTS * * KEYWORDS * * SYSTEM TABLES * * * ************************************************** * * * RT EXECUTIVE * * SYSTEM DRIVERS ETC. * * * ********************* 2000 *********************** * * * BASE PAGE LINKAGES * * * ************************************************** SKP * MEM AS SEEN MEM AS SEEN MEM AS SEEN MEM AS SEEN * BY SYSTEM BY ANY MEM BY DISC PROG BY DISC PROG * RES PROG USING COMMON NOT USING * OR SSGA COMMON OR * SSGA ************************************************************ 77777 * (MAX=77777) * ROM BOOT * (MAX=77777) * (MAX=77777) * * * DR BOOT * * * * * EXTENSION * * * * **************** * * 77500 * * (MAX=77477) * DISC RESIDENT* DISC RESIDENT* * * * PROGRAMS * PROGRAMS * * * * USING * NOT USING * * * MEMORY * COMMON OR * COMMON OR * * * RESIDENT * SSGA * SSGA * * * PROGRAMS * * * * SYSTEM * * * * * * (ALL MUST * (EACH HAS * (EACH HAS * *  AVAILABLE * FIT INTO * THIS SPACE * THIS SPACE * * * THIS SPACE) * AVAILABLE) * AVAILABLE) * * MEMORY * * * * * * * * * * (PHYSICALLY * * * * * AFTER MEM * * * * * RESIDENT * * * * * PROGRAMS) * * * * *-------------******************************* * * * * * * COMMON AREA * BACKGROUND COMMON AREA * * * IN SYSTEM * * * * MAP ONLY IF ******************************* * * USER SAID * * * * PRIV DRVRS * REAL-TIME COMMON AREA * * * ACCESS * * * * COMMON. ******************************* * * * * * * * SUBSYSTEM GLOBAL AREA * * * * * * ************************************************************ * MEMORY RESIDENT LIBRARY * ************************************************************ * * * REAL-TIME EXECUTIVE, DRIVERS, * * TABLES, ETC. * * * ************************************************************ 2000 * COMMUNICATION AREA, SYSTEM LINKS, RES LIBRARY LINKS * ************************************************************ * MEMORY RESIDENT PROGRAM * * * LINKS * DISC RESIDENT PROGRAM * ****************************** LINKS, ASCENDING FROM 2 * * TRAP CELLS * * ************************************************************ 0 * * RELOCATION IN A MAPPED RTE SYSTEM SKP * SET FWA BP LINKAGE FWENT JSB SPACE LDA P15 LDB MES27 MES27 = ADDR: FWA BP LINKAGE? JSB READ PRINT AND GET REPLY LDA P4 JSB GETOC GET 4 OCTAL DIGITS, CONVERT JMP LNKER INVALID DIGIT ENTERED JSB GETAL GET NEXT CHAR FROM LBUF SZA,RSS END OF BUFFER? JMP SETFB YES - SET FWA BP LINKAGE LNKER LDA ERR23 GET ERROR CODE FOR INVALID REPLY JSB GN.ER PRINT DIAGNOSTIC JMP FWENT REPEAT MESSAGE SETFB LDB OCTNO GET FWA BP SZB,RSS SKIP - VALID (NON-ZERO) FWA BP JMP LNKER REPEAT FWA BP LINKAGE INPUT STB FSYBP SET ADDR OF FIRST SYS LINK STB BPMAX INITILIZE TOP OF USED LINK POINTER JSB SPACE NEW LINE * * CLEAR LST WORD 5 JSB INLST INITIALIZE LST ADDRESSES CLLST JSB LSTX SET LST ADDRESSES JMP CLRID-1 CLEAR USAGE FLAGS CLA LDB .LST4,I GET TYPE ADB N5 IF SELF SSB,RSS DEFINING SKIP CLEAR STA .LST5,I CLEAR .LST WORD 5 LDA .LST3,I GET WORD 3 OF .LST ENTRY AND M7400 ISOLATE UPPER CHARACTER STA .LST3,I SET .LST WORD 3 WITH NO ORDINAL JMP CLLST CONTINUE CLEARING LST * * CLEAR PROGRAM USAGE FLAGS JSB INIDX INITIALIZE IDENT ADDRESSES CLRID JSB IDX SET IDENT ADDRESSES JMP IDCLR ALL IDENT FLAGS CLEAR LDA ID3,I GET USAGE FLAG AND M7400 SET FLAG = ZERO STA ID3,I SET CLEARED USAGE FLAG JMP CLRID CLEAR NEXT IDENT FLAG * CLEAR PAGE 1 FOR INDIRECT LINKS IDCLR LDA L2000 STA WDCNT SET WORD COUNT = 200R0(8) CLA LDB ADBP GET ADDRESS OF PSEUDO BASE PAGE CLRBP STA B,I CLEAR WORD IN BASE PAGE AREA INB INCR PAGE ADDRESS ISZ WDCNT SKIP - AREA CLEARED JMP CLRBP CONTINUE CLEARING SKP * * LOAD INITIALIZATION * IFN *** BEGIN NON-DMS CODE *** CLA STA RBTA CLEAR RELOCATION BASE TABLE. STA TPREL STA TPBRE STA COMAD+1 STA TBLNK INITILIZE THE LNKX STARTER STA LIBFG SET LIB FLAG TO SHOW NOT LIBRARY STA KEYCT STA RELAD CLEAR RELOCATION ADDR FOR LABDO STA COMAD CLEAR COMMON RELOC BASE STA PTYPE SET PROGRAM TYPE = SYSTEM STA URBP CLEAR UPPER RESIDENT BP BOUND STA LBBP CLEAR LOW BACKGROUND BP BOUND STA UBBP CLEAR HIGH BACKGROUND BP BOUND STA LRBP CLEAR LOW RESIDENT BP BOUND LDA FSYBP GET FIRST WORD AVAIL BP LINKAGE STA PBREL SET BP RELOC ADDRESS STA CUBP SET UP THE CURRENT BP VALUES ADA ADBP SET DUMMY IMAGE ADDRESS STA ICUBP AND LDA LWSBP THE UPPER LIMIT STA UCUBP OF BASE PAGE LDA CUBPA GET THE ADDRESS OF LAST LINKAGE ENTRY STA CPL2 AND SET LINK LST STA CPLS END MARKS LDA M2000 STA PPREL SET PROGRAM RELOC ADDR STA LRMAN SET LOWER RESIDENT MAIN ADDR STA URMAN SET CURRENT UPPER MAIN ADDRESS LDA DSKAB GET INITIAL ABSOLUTE DISK ADDR STA DSKAD SET CURRENT ABSOLUTE DISK ADDR STA DSKBP SET INITIAL BP ADDRESS * LDA M2000 GET UPPER ADDRESS OF BASE PAGE STA UBPSY SAVE UPPER BP DISK ADDRESS LDB P2 GET LOWER ADDRESS OF BASE PAGE STB LBPSY SAVE LOWER BP DISK ADDRESS JSB BPOUT OUTPUT RESIDENT BP CODE JSB DSKEV INSURE EVEN SECTOR ADDRESS STA DSKRR SET MAIN RESIDENT DISK ADDRESS * B JSB SYS SET UP THE SYSTEM LOAD PRAMS LDA M177 SET SEARCH MASK STA TYPMS TO PICK UP WHOLE TYPE **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** * DISK LOAD INITIALIZATION * SPC 1 CLA STA RBTA CLEAR THE RELOCATION BASE TABLE STA TPREL STA TPBRE STA COMAD+1 STA RELAD STA TBLNK RESET THE LNKX STARTER STA LIBFG SET "NOT LOADING RES LIB" STA KEYCT STA COMAD RESET COMMON RELOC BASE SPC 1 STA PTYPE SET UP TO LOAD TYPE 0 PROGS SPC 1 STA MEM3 CLEAR THE MEMORY TABLE STA MEM4 STA MEM5 STA MEM7 STA MEM8 STA MEM9 STA MEM10 STA MEM11 SPC 1 * SET BOUNDS FOR BASE PAGE LINK SCANNING SPC 1 STA LRBP SHOW NO LINKS IN RESIDENT STA URBP BASE PAGE AREA STA LBBP OR IN BG RESIDENT STA UBBP BASE PAGE AREA SPC 1 STA LBMAN THESE THREE WORDS AREN'T USED STA UBMAN BUT MUST BE ZEROED BECAUSE STA DSKBG THEY'RE IN THE SEGMENT'S BSS AREA SPC 1 LDA FSYBP SET "CURRENT PROGRAM" SCAN AREA STA CUBP TO START AT FIRST LINK ADDR ADA ADBP ...AND SET ADDR OF RTGEN STA ICUBP IMAGE OF THE AREA SPC 1 LDA LWSBP CURRENT PROGS SCAN AREA ENDS AT STA UCUBP SYSTEM COMM AREA SPC 1 LDA CUBPA MARK CURRENT PAGE LINK STA CPL2 AREA EMPTY STA CPLS SPC 1 * SET RELOCATION ADDRESSES SPC 1 LDA M2000 STA PPREL SYSTEM RELOC BASE = 2000B STA LRMAN SAME FOR LOWER RES BOUND STA URMAN AND,CURRENTLY FOR UPPER RES BND SPC 1 * SET INITIAL DISK ADDRESSES 0NLHHN SPC 1 LDA DSKAB FIRST DISK ADDRESS STA DSKAD SET AS CURRENT STA DSKBP AND AS LOC OF BASE PAGE SPC 1 * STORE BASE PAGE ON DISK, JUST TO SAVE SPACE FOR IT SPC 1 LDA M2000 SET PARM AND SAVE STA UBPSY UPPER SYSTEM BP ADDR LDB P2 SET OTHER PARM AND STB LBPSY SAVE LOWER ADDR JSB BPOUT DUMP A BASE PAGE TO DISK SPC 1 * BUMP TO NEXT EVEN SECTOR AND SAVE ADDR SPC 1 JSB DSKEV ALIGN AT EVEN SECTOR STA DSKRR AND SAVE ADDR SYS ON DSK SPC 1 * SET UP LABDO CONTROL WORDS TO ACCESS SYSTEM AREA OF DISK SPC 1 JSB SYS SPC 1 * SET PROGRAM TYPE MASK TO LOOK AT WHOLE * TYPE FIELD WHEN SCANNING THROUGH IDENT LIST SPC 1 LDA M177 LOW SEVEN BITS STA TYPMS SPC 1 * SET BP LINK PARMS TO ALLOCATE TOP-DOWN FROM SYSTEM * COMMUNICATION AREA TO FIRST AVAILABLE LINK SPC 1 CCA STA BPINC SET INC= -1 SPC 1 ADA LWSBP SET FIRST LINK ADDR STA PBREL TO WORD BEFORE COMM AREA SPC 1 LDA FSYBP SET BP LINK ALLOCATION STA BPLMT LIMIT TO LOWEST WORD AVAILABLE SPC 1 LDA M2000 STA BPMAX RESET BP LINK HIGH WATER MARK ****** END DMS CODE ****** XIF SKP * * LOAD SYSTEM * LDA P6 LDB MES12 MES12 = ADDR: SYSTEM JSB SETHD PRINT HEADING, INITIALIZE IDX SYLD JSB IDSCN SCAN IDENTS JMP SYEND END OF IDENTS LDB ID3,I GET USAGE FLAG SLB,INB SKIP IF UNUSED JMP SYLD IGNORE USED PROGRAM * STB ID3,I SET WORD 3 WITH USAGE FLAG JSB LLOAD INITIATE AND LLOAD MAIN PROGRAM JSB INCAD UPDATE BP, PROG RELOC ADDR JMP SYLD PROCESS NEXT SYSTEM PROGRAM * SYEND JSB NOTST TEST FOR PROGRAMS LOADED JSB SPACE NEW LINE B JSB GENIO SET I/O TABLES LDA TBREL UPDATE THE BASE PAGE STA PBREL AND REPORT STA BPMAX JSB BPLNR THE CURRENT BP USAGE * * SET UP THE KEYWORD AREA * LDA DSKAD GET CURRENT ABSOLUTE DISK ADDR STA DSKEY SAVE DISK ADDR FOR KEYWORDS LDA PPREL GET CURRENT PROGRAM RELOC ADDR STA KEYAD SET CURRENT KEYWORD ADDRESS STA CURAK SET FOR ID SEG GEN TOO ADA KEYCN ADD TOTAL KEYWORD COUNT STA PPREL SET NEW RELOC ADDRESS FOR ID SEG STA SYSAD SET INITIAL ID SEGMENT ADDRESS STA IDSAD SET ADDR OF FIRST ID SEG STA CURAI SET ADDRESS FOR OUTID LDA KEYAD COMPUTE THE KEYWORD ADDRESS ADA LICNT FOR SHORT ADA SICNT BACKGROUND SEGMENT ID SEGMENTS STA SKEYA AND SET IT STA ASKEY ALSO FOR BLANK GENERATION * LDB IDSAD GET ADDRESS OF FIRST ID SEGMENT * ***** BEGIN NON-DMS CODE ***** * IFN LDA IDSP ANY RT MEM RES? SZA JMP ADIR YES, SO ADJUST LDA DSKSY ANY RT DISK RES? SZA JMP ADIR+1 YES, SO DON'T ADJUST XIF ***** END NON-DMS CODE ***** * LDA SICNT BUMP PAST PREFIX IF SZA MEM RES (SHORT ID) IS FIRST ADIR ADB #IREG THEN GET ITS DISC ADDR CLA BY WRITING WORD TO DISC. JSB LABDO * * SET UP ID SEGMENT AREA * CCA BACK UP TO ID-SEG START (AFTER ADA B PREFIX), AND MASK TO POSITION IN AND M77 SECTOR (MOD 640), THEN SAVE STA IDSP FOR BASE PAGE LATER. SPC 1 LDA DSKAD GET CURRENT DISK ADDRESS STA DSKID SET DISK ID ADDRESS STA DSKSY SET INITIAL ID SEGMENT DISK ADDR * * SAVE SPACE FOR ID SEGS,DISK DICT * LDA P22 BASE LEN OF ID SEG ADA #IREG PLUS OFFSET FOR IREG STORAGI1E MPY SICNT TIMES # OF SHORT ID'S TELLS * SPACE NEEDED. STA OCTNO SAVE COUNT LDA LICNT GET LONG ID SEGMENT COUNT MPY P28 ADJUST LENGTH FOR LONG ID SEG ADA OCTNO ADD THE SHORT COUNT ADA PPREL ADD THE BASE ADDRESS STA OCTNO SAVE THE ADDRESS ADA N11 COMPUTE THE KEY ADDRESS FOR FIRST STA SISDA BG SEG. ID SEGMENT AND SAVE LDA SSCNT RESERVE ROOM MPY P9 FOR THE BG SEG. ID SEGS ADA OCTNO COMPUTE NEW MEMORY ADDRESS IFZ ***** BEGIN DMS CODE ***** * LEAVE SPACE FOR MAT AND RESIDENT PROG MAP STA MAT. COMPUTE ADDR OF MAT STA OCTNO AND SAVE... LDA MAXPT MULTIPLY #PARTS BY MPY P6 #WORDS/ENTRY AND INA ADD 1 FOR A LENGTH WORD SPC 1 ADA OCTNO GET NEXT AVAIL MEM ADDR STA MAP. SAVE AS ADDR OF MR MAP ADA P32 ADD LENGTH OF MAP STA MPFT. THEN SAVE START ADDR OF MPFT ADA P5 ADVANCE PAST MPFT ****** END DMS CODE ****** XIF STA ADICT SAVE ADDR OF DISK DICTIONARY ADA DSIZE ADJUST FOR DISC DICT LENGTH ADA DAUXN + AUX DISC LENGTH IFN *** BEGIN NON-DMS CODE *** STA MEM1 SET ADDRESS OF FIRST FREE MEMORY AREA JSB CHBND CHANGE DEF MES52 ' LIB ADDRS' DEF LWASM THE SKY IS THE LIMIT, BUT.... STA MEM2 SAVE THE UPPER ADDRESS OF FREE AREA **** END NON-DMS CODE **** XIF STA PPREL SAVE NEW MAIN RELOCATION ADDRESS STA LBCAD SAVE LIBRARY CODE ADDRESS CCB RESERVE ALL THE SPACE SO FAR ADB A BY SENDING THE LAST WORD CLA JSB LABDO OUTPUT ZEROS CCA SET LIB FLAG TO SHOW LIB LOADING STA LIBFG SO ONLY TYPE 6 PROGRAMS WILL LOAD JSB CLRT6 GO CLEAR LOAD FLAGS FOR TYPE 6 PGMS * *  LOAD LIBRARY * LDA P14 SET TO GET RESIDENT LIB. ROUTINES STA PTYPE LDA P7 LDB MES13 MES13 = ADDR: LIBRARY JSB SETHD PRINT HEADING, INITIALIZE IDX LDLB JSB IDSCN SCAN IDENTS JMP LBEND END OF IDENTS LDB ID3,I GET USAGE FLAG SLB,INB SKIP IF UNUSED LIBRARY ROUTINE JMP LDLB IGNORE USED PROGRAM * LDA P14 IF THIS IS A FOURCE LOAD CPA PTYPE THEN STB ID3,I SET THE LOADED FLAG JSB LLOAD INITIATE AND LLOAD MAIN PROGRAM JSB INCAD UPDATE BP, PROG RELOC ADDR JMP LDLB PROCESS NEXT LIBRARY PROGRAM IFN *** BEGIN NON-DMS CODE *** LBEND LDA PTYPE WAS LIB LOAD FOR CPA P4 BACKGROUND RES? JMP COMTS YES; DONE * LDB P4 SET UP FOR NEXT SCAN CPA P14 IF CURRENT WAS FOURCE LOAD CLB,INB DO FG RES ELSE DO BG RES STB PTYPE NO; SET FOR NEXT SCAN LDA M7 RESET SCAN MASK STA TYPMS FOR LEAST BITS ONLY LDA P10 RESET IDX STA CIDNT TO START OF LIST (OFFSET=10) JMP LDLB GO CHECK FOR BACKGROUND RES LIB SPC 1 COMTS CLA CLEAR LIB LOAD FLAG STA LIBFG JSB SPACE JSB DEMTL DEMOT UN CALLED TYPE 6 TO TYPE 7 JSB NOTST TEST FOR PROGRAMS LOADED JSB SPACE NEW LINE LDA PPREL GET CURRENT PROG RELOCATION BASE STA RTCAD SAVE RT LOAD ADDRESS CMA,INA COMPUTE MAX ALLOWABLE ANSWER ADA LWASM AND STA TEMP2 SET FOR CALL LDA COMRT GET CURRENT COMMON SIZE JSB CHBND CHANGE COMMON SIZE? DEF MES53 MESSAGE ADDRESS DEF TEMP2 UPPER LIMIT STA COMRT SET NEW COMMON SIZE SZA,RSS SKIP IF NON-ZERO JMP COMRZ IGNORE ZERO COMMON * * PUT OUT HALTS FOR RT COMMON * LDA PPREL GET CURRENT PROG RELbOC ADDR STA RELAD SET CURRENT RELOCATION ADDRESS LDB MES14+1 GET MESSAGE ADDRESS JSB CONVD CONVERT TO DECIMAL IN MESSAGE LDA P16 LDB MES14 MES14 = ADDR: RT COM JSB DRKEY PRINT LISTING JSB SPACE NEW LINE LDB COMRT GET RT COM LENGTH CMB,INB STB TCNT SET RT COM LENGTH LDB PPREL GET THE ADDRESS OF COMMON FGCOM LDA HLT0 GET HALT CODE FOR RT COM JSB LABDO OUTPUT HALT CODE FOR COMMON ISZ TCNT SKIP - RT COM FILLED WITH HALTS JMP FGCOM CONTINUE FILLING RT COMMON * STB PPREL SET NEW CORE ADDRESS COMRZ CLA,INA STA PTYPE SET PROGRAM TYPE = RT RESIDENT LDA PPREL GET RT RESIDENT BOUND STA MEM3 SAVE LOWER BOUND OF FREE AREA JSB CHBND CHANGE IT? DEF MES54 DEF LWASM ADDRESS OF UPPER LIMIT STA MEM4 SAVE UPPER LIMIT OF FREE AREA STA PPREL SET NEW ADDRESS CLA CLEAR THE FIX UP LIST STA PFIX UNDEFINES ARE LOST HERE * LDA FGBGC DO FG PROGRAMS REFER SZA,RSS TO BG COMMON? JMP RRLDD NO- SKIP QUESTION * LDA PPREL YES ASK FOR THE BG JSB CHBND BOUNDRY DEF MES56 NOW SO WE DEF LWASM KNOW WHERE COMMON STA BGBND IS. **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** LBEND CLA,INA DID WE FINISH LOADING LIB FOR CPA PTYPE RESIDENT?? JMP COMTS YES, CONTINUE...... STA PTYPE NO, SET UP LDA M7 THE SCAN STA TYPMS MASK LDA P10 AND RESET STA CIDNT THE LST POINTERS JMP LDLB AND RESTART SPC 1 COMTS EQU * JSB NOTST PRINT "NONE" IF NO LIB JSB SPACE SKIP A LINE SPC 1 * * LOAD SUBSYSTEM GLOBAL MODULES * SPC 1 SSGA1 JSB SPACE LDA M177 SET TYPEy MASK FOR IDSCN STA TYPMS TO LOOK AT WHOLE TYPE LDA P30 SET TO SCAN FOR TYPE O/ STA PTYPE MODULES (SSGA MODULES) LDA MS31L PASS MSG LNTH LDB MS31. AND ADDRESS JSB SETHD TO HEADER ROUTINE SPC 1 LDA PPREL STA SSGA. SET START ADDR OF SSGA SPC 1 * FIND SSGA MODULES AND LOAD * (NOTE THAT WE ARE STILL LOADING AS IF LOADING THE * LIBRARY.....LINKS ARE STILL DESCENDING IN BASE PAGE) SPC 1 SSGA2 JSB IDSCN FIND NEXT TYPE 30 JMP SSGA3 (NO MORE,EXIT) LDA ID3,I PICK UP USE FLAG CLB,INB IOR B SET LOADED BIT STA ID3,I AND RESTORE JSB LLOAD LLOAD THE MODULE JSB INCAD UPDATE RELOC BASES JMP SSGA2 THEN GO FIND NEXT MODULE SPC 1 MS31. DEF *+1 ASC 12,SUBSYSTEM GLOBAL MODULES MS31L EQU P24 SPC 1 SSGA3 EQU * SPC 1 * CLEAN UP AFTER LOADING LIBRARY AND SSGA MODULES SPC 1 CCA GET LAST WORD ADDR ADA SSGA. OF SYSTEM LSR 10 AND ISOLATE AND M77 PAGE NUMBER. STA LPSYS SAVE LAST PAGE ADDR OF SYSTEM SPC 1 CLA CLEAR THE STA LIBFG "LIBRARY LOADING" FLAG LDA PBREL SET THE ADDRESS INA OF THE LOWEST STA LOLNK LINK USED BY THE SYSTEM SPC 1 JSB DEMTL DEMOTE UNCALLED TYPE 6 TO 7 JSB NOTST ANY PROGS LOADED?? JSB SPACE SKIP A LINE SPC 1 * SET UP COMMON AREAS....START WITH REAL TIME SPC 1 LDA PPREL COMPUTE MAX SIZE FOR STA RTCAD RT COM BY SUBTRACTING CMA,INA CURRENT LOCATION FROM ADA LWASM LAST AVAILABLE STA TEMP2 SAVE AS A LIMIT SPC 1 LDA COMRT ASK IF HE WANTS TO CMA JSB CHBND CHANGE DEF MES53 SIZE DEF TEMP2 AND THEN  STA COMRT STORE NEW SIZE SPC 1 LDA RTCAD LOAD START ADDR OF RT COM LDB MES14+1 JSB CONVD STUFF IN MESSAGE LDA P16 LDB MES14 JSB DRKEY AND PRINT IT JSB SPACE SPC 1 * NOW ASK ABOUT BG COMMON SPC 1 LDA COMRT SAVE BASE OF RT COMMON ADA PPREL AND STA BGBND COMPUTE AND CMA,INA SAVE MAX ADA LWASM ALLOWABLE STA TEMP2 COMMON SIZE SPC 1 LDA COMBG DISPLAY REQUIRED CMA JSB CHBND SIZE OF COMMON DEF MES57 AND ASK DEF TEMP2 TO CHANGE STA COMBG SPC 1 LDA BGBND LOAD START ADDR OF BG COMMON LDB MES18+1 JSB CONVD STUFF IN MESSAGE LDA P16 LDB MES18 AND DISPLAY JSB DRKEY JSB SPACE SPC 1 * NOW ASK ABOUT ALIGNING LWA OF BG COMMON SPC 1 CCA ADA BGBND ADA COMBG GET LWA COMMON LDB MSBGX POINT TO MESSAGE JSB ALIGN AND ASK FOR CHANGE DEF MSBG LDB A SAVE NEXT ADDR AFTER COMMON INB AS FIRST ADDR IN MEM RES STB FWMRP PROGRAM AREA LSR 10 THEN SHIFT TO GET LAST PAGE AND M37 CONTAINING COMMON STA LPCOM AND SAVE FOR LATER SPC 1 * IF MEM RES BOUND WAS CHANGED, EXTRA WORDS ARE * ADDED TO THE BG COMMON AREA SPC 1 LDA FWMRP LDB BGBND ADD ANY EXTRA WORDS CMB,INB INTO THE ADA B BACKGROUND STA COMBG COMMON AREA SPC 1 * WRITE HALTS ON DISK FROM (RTCAD) THRU (FWMRP-1) SPC 1 LDA COMRT ADA COMBG GET TOTAL COMMON SIZE SZA,RSS JMP COMEX JUMP OUT IF NO COMMON SPC 1 CMA,INA STA TCNT SET LOOP COUNTER TO -LENGTH OF COMMON LDB PPREL WTCOM LDA HLT0 WRITE ONE JSB LABDO HALT AT ISZ TCNT A TIME JMP WTCOM TILL DONE SPC 1 STB PPREL THEN UPDATE RELOC BASE SPC 1 COMEX EQU * SPC 1 * * INITIALIZE FOR MEMORY RESIDENT PROGRAM LOADING * SPC 1 LDA M7 SET IDENT SCAN MASK TO STA TYPMS CHECK PRIMARY BITS ONLY. CLA,INA SET UP TO SCAN FOR STA PTYPE TYPE 1 PROGRAMS CLA CLEAR FIX-UP LIST...ALL STA PFIX REMAINING UNDEFS ARE LOST. SPC 1 * SET FOR BOTTOM-UP LINK ALLOCATION SPC 1 CLA STA BPMAX RESET HIGHWATERMARK * FOR BP LINK ALLOCATION CLA,INA INDICATE ASCENDING STA BPINC ALLOCATION OF LINKS SPC 1 LDA LOLNK UPPER LIMIT FOR MEM RES LINKS STA BPLMT IS LOW SYSTEM LINK SPC 1 LDA FSYBP AND LOWER LIMIT IS STA PBREL FIRST ALLOWED BY USER SPC 1 * RESET LINK AREA POINTERS * RESET CP LINK AREA POINTERS SPC 1 LDA CUBPA STA CPL2 LAST CP AREA=LAST BP AREA STA CPLS LAST "SAVE" CP AREA=LAST BP AREA ****** END DMS CODE ****** XIF SKP * * LOAD RT RESIDENTS * RRLDD EQU * IFZ ***** BEGIN DMS CODE ***** LDA P16 ****** END DMS CODE ****** XIF IFN *** BEGIN NON-DMS CODE *** LDA P12 **** END NON-DMS CODE **** XIF LDB MES15 MES15 = ADDR: RT RESIDENTS JSB SETHD PRINT HEADING, INITIALIZE IDX RRLD JSB IDSCN SCAN IDENTS JMP RREND END OF IDENTS SEZ,RSS SKIP IF MAIN JMP RRLD IGNORE SUB LDB ID3,I GET USAGE FLAG SLB,INB SKIP - PROGRAM NOT LOADED JMP RRLD IGNORE LOADED PROGRAM STB ID3,I SET NEW USAGE FLAG JSB LLOAD INITIATE AND LLOAD MAIN PROGRAM CLA JSB GENID GENERATE ID SEtGMENT, KEYWORD IFZ ***** BEGIN DMS CODE ***** CLA NO PARTITION REQMT CCB ADB TIDNT IDENT INDEX (TIDNT POINTS TO NEXT ENTRY) JSB IDFIX GO SET MEM PROTECT INDEX ****** END DMS CODE ****** XIF JSB INCAD UPDATE BP, PROG RELOC ADDR JMP RRLD PROCESS NEXT RT RESIDENT * RREND JSB NOTST TEST FOR PROGRAMS LOADED JSB SPACE NEW LINE LDA PPREL GET CURRENT PROG RELOCATION BASE STA URMAN SET UPPER RESIDENT MAIN ADDR IFN *** BEGIN NON-DMS CODE *** STA MEM5 SAVE LOW BOUND OF POTENTIAL FREE AREA **** END NON-DMS CODE **** XIF * CMA,INA CHECK FOR MEMORY OVERFLOW ADA M7747 PAST 77500 SSA,RSS JMP $STRT * LDA ERR18 SEND ERROR DIAGNOSTIC JSB IRERR AND ABORT * M7747 OCT 77477 * $STRT JSB CCPLK PACK THE CURRENT PAGE LINKAGE AREA JSB BPDSA OUTPUT REMAINDER OF RECORD * * SCAN LST FOR INITIAL ENTRY POINT * LDB D$STR GET ADDRESS OF STRT JSB LSTS SCAN LST FOR IT JSB ABORT START NOT FOUND IN LST LDB ADBP GET ADDR FOR JMP,I START ADB P2 ADJUST LDA JMP3I GET JMP 3,I CODE STA B,I SET JMP 3,I IN BP LOCATION INB INCR CURRENT BP ADDRESS LDA .LST5,I GET CORE ADDRESS FOR START STA B,I SET ADDR OF START IN BP LOCATION IFZ ***** BEGIN DMS CODE ***** * * DUMP LOW PART OF BASE PAGE TO DISK. DISK RESIDENT PROGRAMS * CAN'T SEE (OR SHARE) ANY WORDS BELOW LOLNK (LOWEST SYSTEM LINK) * ANYHOW, SO THEY ARE NOT NEEDED IN THE GENERATOR ANY LONGER. * WE NEED THE AREA THEY OCCUPY IN THE BASE PAGE IMAGE FOR THE * DISK PROGRAM LINKS. * SPC 1 LDA DSKAD STA TEMP4 SAVE THE CURRENT DISK ADDR LDA DSKBP STA DSKAD BACK UP DISK TO START OF *  SYSTEM BASE PAGE SPC 1 LDB P2 START AT LOW ADDRESS LDA LOLNK AND CONTINUE UP TO SYS LNKS JSB BPOUT AND WRITE WHAT WE'VE GOT SPC 1 LDA TEMP4 RESTORE THE PREVIOUS DISK STA DSKAD ADDRESS. SPC 1 * INITIALIZE FOR REAL TIME DISK RESIDENT LOADING SPC 1 CLA STA MAXRP STA MAXRB LDA P2 STA PTYPE SET TO FIND TYPE 1 PROGS SPC 1 LDA LOLNK SET LOW SYS OR LIB OR SSGA LNK STA LRBP AS LOWEST RES LINK ADA ADBP AND SAVE ITS IMAGE ADDR STA IRBP LDA LWSBP SET LAST LINK BEFORE COMM AREA STA URBP (+1) AS LAST RES LINK SPC 1 * SET BPLINK SCAN AREA FOR CURRENT PROGRAM AND BOUNDS * FOR BP LINK ALLOCATION. NOTE THAT THAT BP LINK ALLOCATION * REMAINS SET IN THE "UPWARD" DIRECTION FROM MEM RESIDENT * LOADING, AND LIMIT IS STILL LOLNK. SPC 1 LDA P2 SET LOWEST DISK LINK STA PBREL STARTING AT 2 STA CUBP ADA ADBP AND SAVE ITS IMAGE STA ICUBP ADDRESS. LDA LOLNK SET UPPER DISK LINK AS STA UCUBP BELOW SYS,LIB, AND SSGA LNKS * CLEAR BASE PAGE IMAGE OF MEMORY RESIDENT PROGRAM LINKS SPC 1 LDA PBREL START CLEAR AT 2 LDB LOLNK AND END 1 BEFORE LOW SYS LINK JSB CLRLT AND GO DO IT SPC 1 * RESET CP LINK AREA POINTERS TO "EMPTY" SPC 1 LDA CUBPA STA CPL2 LAST CP AREA=LAST BP AREA STA CPLS LAST "SAVE" CP AREA=LAST BP AREA SPC 1 * UPDATE "LAST WORD OF MEMORY" ADDR - DON'T NEED TO LEAVE ROOM * FOR THE 64 WORD BOOT IN A DISK PARTITION SPC 1 LDA LWASM TAKE CURRENT LAST WORD ADA P192 ADD BOOT SIZE STA LWASM AND RESTORE ****** END DMS CODE ****** XIF IFN *** BEGIN NON-DMS CODE *** CLA STA MAXRP CLEAR MAX RT DISK RES PROG LGTH STA MAXRB CLEAR MAX RT DISK RES BP LENGTH ISZ PTYPE SET PROGRAM TYPE = RT DISK RES LDA CUBP SET UP THE STA LRBP BP AREA POINTERS ADA ADBP ADD THE DUMMY BASE PAGE ADDRESS STA IRBP AND SET THE BASE DUMMY ADDRESS LDA TBREL NOW THE NEW STA CUBP USER AREA STA URBP SET THE TOP OF THE RES. AREA ADA ADBP (ALL THE REST) STA ICUBP * LDA MEM5 GET THE CURRENT DR AREA ADDRESS JSB CHBND ASK IF IT'S TO BE CHANGED DEF MES55 DEF LWASM STA MEM6 SAVE THE UPPER FREE AREA LIMIT STA PPREL AND THE CURRENT ADDRESS JSB CCPLK PACK THE CP LINK AREA LDA CPL2 SAVE LAST ADDRESS STA CPLS OF CP IMAGE **** END NON-DMS CODE **** XIF SKP * * LOAD RT DISK RESIDENTS * LDA P17 LDB MES16 MES16 = ADDR: RT DISK RESIDENTS JSB SETHD PRINT HEADINGS, INITIALIZE IDX RDLD JSB DSKEV START DISK RESIDENTS ON EVEN SECTOR CLA KILL ANY LEFT OVER STA PFIX FIX UP ENTRYS JSB IDSCN SCAN IDENTS JMP RDEND END OF IDENTS SEZ,RSS SKIP IF MAIN JMP RDLD IGNORE SUBS LDB ID3,I GET USAGE FLAG SLB,INB SKIP - PROGRAM NOT LOADED JMP RDLD IGNORE LOADED PROGRAM STB ID3,I SET NEW USAGE FLAG IFZ ***** BEGIN DMS CODE ***** * * SAVE IDENT POINTER AND SET RELOC BASE DEPENDING * ON USE OF COMMON OR SSGA. * CCA ADA TIDNT SAVE IDENT INDEX STA IDSAV JSB SETRB SET RELOC BASE ****** END DMS CODE ****** XIF JSB USERS SET UP TO OUTPUT USER CODE JSB LLOAD INITIATE AND LLOAD MAIN PROGRAM LDA CPLS BACK UP THE CP LINK STA CPL2 BOTTOM JSB SYS RESET TO OUTPUT SYSTEM CODE CCA JSB GENID GENERATE ID SEGM4(ENT, KEYWORD IFN *** BEGIN NON-DMS CODE *** LDA PPREL GET PROG RELOC ADDR CMA,INA ADA TPREL SET A = PROG LENGTH LDB MAXRP GET PREVIOUS MAX PROG LENGTH CMB,INB ADB A SET B = PROG LENGTH - MAX LENGTH SSB,RSS SKIP IF NO NEW MAXIMUM STA MAXRP SET NEW MAX PROG LENGTH LDA PBREL GET BP RELOC ADDR CMA,INA ADA TBREL SET A = BP LENGTH LDB MAXRB GET PREVIOUS MAX BP LENGTH CMB,INB ADB A SET B = BP LENGTH - MAX LENGTH SSB,RSS SKIP IF NO NEW MAXIMUM STA MAXRB SET NEW MAX BP LENGTH **** END NON-DMS CODE **** XIF JSB BPDSA OUTPUT REMAINING OF ABS REC LDA TBREL GET UPPER BP ADDRESS LDB PBREL GET LOWER BP ADDRESS JSB BPOUT OUTPUT BP SECTION LDA PBREL GET LOWER RT DISK RES BP ADDR LDB TBREL GET UPPER BOUND BP ADDRESS JSB CLRLT CLEAR LOCAL BP LINKS IFZ ***** BEGIN DMS CODE ***** * * ALSO SET NEW FIELDS (WORD 22) IN ID-SEG. * LDA TPREL PASS START LOC LDB PPREL AND END LOC + 1 JSB PGREQ TO PAGE REQ ROUTINE * (RETURNS A=#PAGES) LDB IDSAV GET IDENT INDEX JSB IDFIX AND FIX WORD 22 IN IDSEG ****** END DMS CODE ****** XIF JMP RDLD PROCESS NEXT RT DISK RESIDENT * * TEMP4 BSS 1 RDEND EQU * JSB NOTST PRINT "NONE" IF NO RT DR'S JSB SPACE IFN *** BEGIN NON-DMS CODE *** LDA BPMAX GET CURRENT BP ADDRESS JSB CHBND ASK FOR NEW ONE DEF MS02 DEF LWSBP UPPER LIMIT = 1650 STA SYBAD SET NEW BP ADDRESS STA BPMAX AND NEW UPPER LIMIT ADA M1 SET THE LAST LINK ADDRESS STA URBP1 FOR FORGROUND * LDB FGBGC CHECK IF WE ALREADY LDA BGBND HAVE THE BACKGROUND BOUNDRY SZB,RSS LDA LW2NLHASM NO THE SKY IS THE LIMIT STA TEMP2 SET UPPER LIMIT OF SYS MEMORY oN* LDA PPREL GET PROG RELOC ADDRESS ADA MAXRP ADD MAX. DR PROG. LENGTH JSB CHBND ASK IF WE ARE TO CHANGE IT DEF MES60 DEF TEMP2 STA SYMAD SET SYSTEM AVAIL MEM ADDRESS STA MEM7 SET LOWER BOUND OF FREE MEM. * LDA BGBND GET CURRENT BG BOUND IN CASE LDB FGBGC DO WE HAVE ONE? SZB JMP BGSET YES GO SET IT UP * LDA MEM7 GET LOWER BOUND OF FREE AREA JSB CHBND ASK FOR NEW ONE DEF MES56 DEF LWASM SKY IS THE LIMIT BGSET STA MEM8 SAVE THE UPPER LIMIT OF THE FREE AREA STA BGBND SET THE BACKGROUND BOUNDRY STA RELAD AND THE RELOCATION ADDRESS STA LBMAN AND A FEW STA PPREL MORE GOODIES CMA,INA COMPUTE ADA LWASM THE MAX COMMON STA TEMP2 SIZE AND SAVE IT SKP * * GET BG BOUNDARY * LDA DSKAD GET DISK ADDRESS STA DSKBG SAVE ADDRESS OF BG CODE LDA SYBAD GET CURRENT BG BP ADDRESS STA PBREL SET BP RELOCATION ADDRESS STA LBBP SET LOW BG BP ADDRESS STA UBBP SET UPPER BASE PAGE TO SAME STA TBREL SET RELOCATION BASE STA CUBP ALSO SET UP CURRENT BASE PAGE ADA ADBP COMPUT IMAGE ADDRESS STA IBBP SET IMAGE ADDRESS STA ICUBP FOR BOTH AREAS * JSB USERS SET UP THE USERS MAP FOR BG CORE RES LDA COMBG CHECK FOR A LARGER JSB CHBND COMMON FOR DEF MES57 BACKGROUND DEF TEMP2 STA COMBG SET THE NEW COMMON SIZE SZA,RSS SKIP IF BACKGROUND COMMON JMP RICLR IGNORE ZERO COMMON * * FILL BG COMMON WITH HALTS * LDB MES18+1 GET ADDRESS OF MESSAGE JSB CONVD CONVERT TO OCTAL/DECIMAL LDA P16 LDB MES18 GET MESSAGE ADDRESS JSB DRKEY PRINT BACKGROUND COMMON LISTING JSB SPACE NEW LINEj LDB COMBG GET BG COM LENGTH CMB,INB STB TCNT SET COMMON LENGTH LDB PPREL GET ADDRESS OF BG COMMON BGCOM LDA HLT0 GET HALT CODE JSB LABDO OUTPUT HALT CODE FOR COMMON ISZ TCNT SKIP - BG COM FILLED WITH HALTS JMP BGCOM CONTINUE FILLING BG COMMON * STB PPREL SET NEW ADDRESS RICLR LDA P4 STA PTYPE SET PROGRAM TYPE = BG RESIDENT LDA PPREL GET CURRENT BG RESIDENT ADDRESS STA MEM9 SAVE FOR FREE MEMORY LIST JSB CHBND CHANGE IT? DEF MES58 DEF LWASM STA PPREL SET NEW ADDRESS STA MEM10 AND UPPER BOUND OF FREE AREA SKP * * LOAD BG RESIDENTS * LDA P12 LDB MES19 MES19 = ADDR: BG RESIDENTS JSB SETHD PRINT HEADING, INITIALIZE IDX BRLD JSB IDSCN SCAN IDENTS JMP BREND END OF IDENTS SEZ,RSS SKIP IF MAIN JMP BRLD IGNORE SUBS LDB ID3,I GET USAGE FLAG SLB,INB SKIP - PROGRAM NOT LOADED JMP BRLD IGNORE LOADED PROGRAM STB ID3,I SET NEW USAGE FLAG JSB USER SET USER MAP JSB LLOAD INITIATE AND LLOAD MAIN PROGRAM JSB SYS SET SYSTEM MAP AGAIN JSB INCAD INCR RELOCATION ADDRESSES CLA JSB GENID GENERATE ID SEGMENT, KEYWORD JMP BRLD PROCESS NEXT BG RESIDENT * BREND JSB NOTST TEST FOR PROGRAMS LOADED JSB SPACE NEW LINE JSB BPDSA OUTPUT REMAINDER OF ABS REC LDA CUBPA SET THE LOWER LIMIT TO STA CPLS FLUSH WHAT WE HAVE PASSED LDA PPREL GET CURRENT PROGRAM RELOC BASE STA UBMAN SAVE UPPER BG MAIN ADDRESS STA MEM11 SAVE THE LOWER BOUND OF THE FREE JSB CHBND AREA AND ASK FOR BG DISC BOUND DEF MES59 DEF LWASM STA MEM12 SAVE THE HIGH BOUND STA PPREL AND THE NEW RELOCATION ADDRESS JSB CCPLK zPACK THE CURRENT PAGE AREA LDA TBREL GET CURRENT BP ADDRESS STA UBBP SET UPPER BACKGROUND BP BOUND STA CUBP SET CURRENT BP ADDRESS ADA ADBP AND ITS IMAGE STA ICUBP ADDRESS LDA CPL2 GET THE CP LINK IMAGE STA CPLS ADDRESS AND SAVE IT STA CPLSB ALSO FOR AFTER SEGMENTS **** END NON-DMS CODE **** XIF ***** BEGIN DMS CODE ***** IFZ LDA CUBPA RESET POINTERS TO STA CPL2 HIGH CP LINK AREA, STA CPLS HIGHEST AREA TO BE SAVED IN PACK, STA CPLSB AND CPLS FOR B.S. LOADING. XIF ****** END DMS CODE ****** SKP * * LOAD BG DISK RESIDENTS * LDA P3 SET PROGRAM TYPE AS STA PTYPE BG DISK RESIDENT LDA P17 LDB MES20 MES20 = ADDR: BG DISK RESIDENTS JSB SETHD PRINT HEADING INITIALIZE IDX BDLD JSB DSKEV LOAD DISC RESIDENTS ON EVEN SECTOR CLA KILL ANY LEFT OVER FIX UPS STA TFIX JSB IDSCN SCAN IDENTS JMP BDEND END OF IDENTS SEZ,RSS SKIP IF MAIN JMP BDLD IGNORE SUBS LDB ID3,I GET USAGE FLAG SLB,INB SKIP - PROGRAM NOT LOADED JMP BDLD IGNORE LOADED PROGRAM STB ID3,I SET NEW USAGE FLAG CCA ADA TIDNT GET CURRENT MAIN IDENT INDEX STA IDSAV SAVE MAIN IDENT INDEX FOR BS REF IFZ ***** BEGIN DMS CODE ***** JSB SETRB SET UP RELOC BASE ****** END DMS CODE ****** XIF JSB USERS SET UP A NEW USER JSB LLOAD INITIATE AND LLOAD MAIN PROGRAM JSB SYS RESET TO SYSTEM MAP CCA JSB GENID GENERATE ID SEGMENT, KEYWORD JSB BPDSA OUTPUT REMAINDER OF RECORD LDA DSKAD GET CURRENT DISK ADDRESS STA DSKBS SAVE DISK ADDR OF BP SECTION LDA TBREL GET UPPER BP ADDRESS LDB PBREL GET LOWER BP ADDRESS JSB BPOUT OUTPUT BP SECTION LDA TPREL GET CURRENT PROG RELOC ADDR STA BSPAD SAVE PROG RELOC ADDR FOR BS IFZ ***** BEGIN DMS CODE ***** STA TPMAX SET HWM FOR MAIN ****** END DMS CODE ****** XIF JSB CCPLK PACK THE CP LINK AREA LDA CPL2 UP DATE STA CPLS THE LOW SAVE ADDRESS LDA TBREL GET CURRENT BP RELOC ADDR STA BSBAD SAVE BP RELOC ADDR FOR BS LDA P5 STA PTYPE SET TYPE = BG SEGMENT JSB INIDX INITIALIZE IDX BSLD JSB IDX SET IDENT ADDRESSES JMP BSEND END OF IDENTS CCA ADA TIDNT GET CURRENT MAIN IDENT INDEX STA IMAIN SAVE MAIN BS IDENT INDEX LDA ID6,I GET TYPE SSA,RSS SKIP IF MAIN BG SEGMENT JMP BSLD IGNORE SUBS AND M7 ISOLATE TYPE CPA P5 TYPE = BG SEGMENT? RSS YES - CONTINUE JMP BSLD NO - IGNORE IDENT LDA ID8,I GET BS MAIN IDENT INDEX CPA IDSAV BS CALLS THIS BG MAIN? RSS YES - CONTINUE JMP BSLD NO - IGNORE BACKGROUND SEGMENT LDA TIDNT GET NEXT IDENT INDEX STA ABSID SAVE INDX FOR NEXT BG SEG SCAN CCB STB HDFLG SET HEADING FLAG FOR BG SEGMENT JSB DSKEV SET FOR EVEN SECTOR JSB SEGS SET UP A NEW USER AREA LDA BSPAD RESET THE LDB ABCOR STA B,I BASE CORE ADDRESSES FOR LDB MXABC STA B,I A SEGMENT LOAD JSB LOADS LOAD BG SEGMENT LDA CPLS RESET THE CP LINK STA CPL2 BOTTOM JSB SYS RESET TO SYSTEM MAP JSB SPACE NEW LINE CCA JSB GNSID GENERATE ID SEGMENT, KEYWORD JSB BPDSA OUTPUT REMAINING OF ABS REC IFZ ***** BEGIN DMS CODE ***** LDB TPREL SUBTRACT SEG'S HIGH ADDR LDA B FROM PREV MAX CMA,INA HIGH ADDR ADA TPMAX JSSA IF NEW IS HIGHER STB TPMAX THEN STORE AS MAX ****** END DMS CODE ****** XIF LDA TBREL GET UPPER BP ADDRESS LDB BSBAD GET LOWER BS BP ADDRESS JSB BPOUT OUTPUT BP SECTION LDA BSBAD GET BS BP RELOC ADDR LDB TBREL GET UPPER BOUND BP ADDRESS JSB CLRLT CLEAR BP LINKAGES LDA BSBAD GET BS BP RELOC ADDRESS STA TBREL SET BP RELOC ADDR LDA BSPAD GET BS PROG RELOC ADDRESS STA TPREL SET PROG RELOC ADDR LDA ABSID GET NEXT BG SEG IDENT INDEX STA TIDNT SET IDENT INDEX FOR IDX JMP BSLD LOAD NEXT BG SEGMENT * BSEND EQU * IFZ ***** BEGIN DMS CODE ***** * * FIX ID SEGMENT * LDA TPMAX PASS MAX HIGH ADDR LDB PPREL AND LOW ADDR, THEN JSB PGREQ PRINT PAGES AND SET A-REG LDB IDSAV PASS PAGE REQMT & IDENT JSB IDFIX INDEX THEN FIX iD SEG. ****** END DMS CODE ****** XIF LDA DSKAD GET CURRENT DISK ADDRESS STA DSKBR SAVE CURRENT DISK ADDR OF ABS LDA DSKBS GET DISK ADDR FOR MAIN BP CODE STA DSKAD SET CURRENT BP CODE ADDRESS LDA BSBAD GET UPPER ADDR OF BP CODE LDB PBREL GET LOW ADDR FOR BP CODE JSB BPOUT OUTPUT BP CODE FOR MAIN DISK RES LDA DSKBR GET CURRENT DISK ADDRESS STA DSKAD SET CURRENT ABS DISK ADDRESS LDA PBREL GET LOW BP ADDRESS LDB BSBAD GET UPPER BOUND BP CODE JSB CLRLT CLEAR BP LINKAGES * LDA P3 STA PTYPE SET PROG TYPE = BG DISK RESIDENT JSB CLID3 CLEAR PROGS-LOADED FLAGS LDA IDSAV GET MAIN IDENT INDEX STA TIDNT SET CURRENT IDENT INDEX LDA CPLSB RESET THE LOW SAVE ADDRESS STA CPLS RESET FOR BG MAIN STA CPL2 PROGRAMS JMP BDLD LOAD NEXT BG DISK RESIDENT * BDEND JSB NOTST TEST FOR PROGRAMS LOADED JSB SPACE  NEW LINE SPC 2 IFZ ***** BEGIN DMS CODE ***** * JSB PARTD PARTITION DEFINITION PHASE * ***** END DMS CODE ***** XIF SKP * MOVE UTILITY PROGS TO OUTFILE * CLA STA UTCNT CLEAR UTILITY PROGRAM COUNT LDA DSKAD GET CURRENT DISK ADDRESS STA DSKUT SAVE DISK ADDR OF UTILITY PROGS JSB INIDX INITIALIZE IDENT SCAN GETLB JSB IDX SET IDENT ADDRESSES JMP ENDU ALL UTILITY PROGRAMS MOVED LDA ID6,I GET TYPE AND M177 ISOLATE TYPE CPA P7 TYPE = UTILITY? RSS YES - MOVE JMP GETLB IGNORE OTHER PROGRAMS * LDB DSKAD SET CURRENT DISC ADDR STB ID5,I IN IDENT FOR LIB. DICT. * LDA ALBUF READ UTILITY PROG NAM RECORD. STA CURAL CCB JSB RDNAM JSB ABORT ERROR ON READ. SZA,RSS JSB ABORT END OF FILE. * LDA N64 INIT PACKING COUNT. STA TEMP2 LDA APBUF INIT PACK BUF ADDRESS. STA CURD * MOVEL JSB MVREL SEND RECORD TO OUT FILE. LDA LBUF+1 WAS IT AN END RECORD? ALF,RAR AND M7 CPA P5 JMP MOVEN YES. * LDA ALBUF NO. READ NEXT RELOC RECORD. STA CURAL CLB JSB RDBIN JSB ABORT SZA,RSS JSB ABORT JMP MOVEL * MOVEN ISZ UTCNT BUMP UTILITY PROG COUNT. LDA CURD ANYTHING IN PACK BUF? CPA APBUF JMP GETLB NO. * CLA YES. FILL OUT WITH ZEROES. MREL1 STA CURD,I ISZ CURD ISZ TEMP2 DONE? JMP MREL1 NO. LDA DSKAD YES. LDB APBUF JSB DISKO FLUSH TO DISK. LDA DSKAD JSB DISKA INCR. DISC ADDRESS. STA DSKAD * JMP GETLB SCAN IDENTS FOR NEXT UTILITY PROG. * * SUBR TO SEND RELOC UTILITY RECORD TO OUTFILE. * MVREL NOP LDAA LBUF ALF,ALF CMA,INA STA TEMP1 NEGATIVE WORD COUNT FOR LBUF. * MREL2 LDA CURAL,I MOVE A WORD TO PACKING BUFR. STA CURD,I ISZ CURAL BUMP BUFFER POINTERS. ISZ CURD ISZ TEMP2 END OF BUFFER? JMP MREL3 NO. LDA DSKAD YES. OUTPUT PACK BUF TO DISK. LDB APBUF STB CURD JSB DISKO LDA DSKAD UPDATE DISK ADDRESS. JSB DISKA STA DSKAD LDA N64 RESET PACKING COUNT. STA TEMP2 * MREL3 ISZ TEMP1 END OF RELOC RECORD? JMP MREL2 NO. JMP MVREL,I YES. EXIT. * N64 DEC -64 M1 DEC -1 APBUF DEF FWENT BUFR OVERLAYS FRONT END. CURD NOP * * MAKE LIBRARY ENTRY POINT LIST ENDU CLA STA LBCNT CLEAR LIBRARY ENTRY POINT COUNT STA RELAD CLEAR RELOCATION ADDR FOR LABDO LDA DSKAD GET CURRENT ABSOLUTE DISK ADDR STA DSKLB SAVE LIBR ENTRY POINT LIST ADDR JSB USERS OUTPUT THE LIB USING USER MAP LDA M2000 WITH 2000 FOR THE BASE LDB ABCOR STA B,I CORE BASE ADA M1 AND MAX LDB MXABC STA B,I JSB INLST INITIALIZE LST SCAN LBLST JSB LSTX SET CURRENT LST ADDRESSES JMP ENDSX END OF LIST * LDA .LST4,I GET IDENT INDEX FOR ENTRY POINT * STA TIDNT SET IDENT INDEX FOR IDX SZA,RSS IF UNDEFINED SYMBOL GO JMP LBLTS TEST FOR GENERATED SYMBOL * ADA N5 IF SELF DEFINING SSA SYMBOL JMP LBOU GO SEND IT FORTH WITH * JSB IDX SET IDENT ADDRESSES JSB ABORT INVALID IDENT ADDRESS LDA ID6,I GET PROGRAM TYPE AND M177 ISOLATE TYPE SZA,RSS IS TYPE A SYSTEM PROGRAM JMP LBO YES GO DO IT * AND M7 KEEP THE SIGNIFIGANT BITS IFN **** BEGIN NON-DMS CODE **** CLB,INB CPA B KEEP IF CORE RESIDENT RSS CPA P6 TYPE = LIBRARY? RSS YES - PROCESS LIBRARY ENTRY PT CPA P4 TYPE = BG RESIDENT? **** END NON-DMS CODE **** XIF IFZ **** BEGIN DMS CODE **** CPA P6 **** END DMS CODE **** XIF CLA,RSS YES - PROCESS JMP LBLST IGNORE NON-LIBRARY ENTRY POINT * LBO STA TIDNT CLEAR THE TYPE FLAG LBOU JSB LBOUT SEND THE ENTRY POINT JMP LBLST GO GET THE NEXT ONE * LBLTS LDA .LST5,I IF UNDEFINED SYMBOL HAS A SZA NON-ZERO VALUE JSB LBOUT SEND IT ANY WAY JMP LBLST CONTINUE THE SCAN * * LBOUT NOP ROUTINE TO OUTPUT ENTRY POINTS LDA .LST1,I GET ENTRY POINT 1,2 LDB MXABC GET THE CORE RELATIVE LOCATION LDB B,I INB OF THE NEXT RECORD JSB LABDO OUTPUT NAME 1,2 LDA .LST2,I GET ENTRY POINT 3,4 JSB LABDO OUTPUT NAME 3,4 LDA .LST3,I GET ENTRY POINT 5 AND M7400 ISOLATE UPPER CHAR ADA TIDNT ADD THE FLAG WORD JSB LABDO OUTPUT NAME 5 LDA .LST5,I GET SYMBOL VALUE JSB LABDO OUTPUT VALUE OF ENTRY PT ISZ LBCNT INCR ENTRY POINT COUNT JMP LBOUT,I RETURN * * * OUTPUT THE DICTIONARY * ENDSX JSB INLST DICTIONARY IS IN ORDER SXEND JSB LSTX OF DEFINATION JMP ENDS2 END OF ENT'S GO WRAP UP * LDA .LST4,I GET THE IDENT INDEX STA TIDNT SET FOR IDX ADA N5 IF UNDEFINED OR SELF SSA DEFINING JMP SXEND SKIP THE SYMBOL * JSB IDX GET THE IDENT ADDRESSES JSB ABORT WOOPS! LDA ID6,I GET THE TYPE AND M177 ISOLATE CPA P7 IF NOT LIBRARY CLA,INA,RSS JMP SXEND TRY THE NEXT ONE * STA TIDNT ELSE SET THE FLAG TO 1 LDA ID5,I GET THE DISC ADDRESS STA S.LST5,I AND SET IN VALUE WORD JSB LBOUT OUTPUT THE ENT JMP SXEND TRY THE NEXT ONE. * ENDS2 JSB BPDSA OUTPUT REMAINDER OF LIBR LIST JSB SYS BACK TO THE SYSTEM MAP * * GENERATE BLANK ID SEGMENTS * ENDBI LDA CURAK MORE BLANK ID'S? CPA ASKEY ? JMP ENDRL NO HOW ABOUT SHORT ONES? * LDA N2 YES GENERATE A JSB GENID BLANK ID SEGMENT JMP ENDBI NEED ANOTHER? * ENDRL LDA SKEYA IF NEXT KEYWORD IS INA CPA IDSAD THEN TERMINATE JMP ENDSZ BLANK OUTPUT. * LDA N2 A=-2 FOR BLANK ID SEGMENT FLAG. JSB GNSID GENERATE ID SEGMENT. JMP ENDRL REPEAT TEST. * * PUT OUT DISK DICTIONARY ENDSZ LDA DSKAD GET CURRENT DISC ADDRESS. ALF,ALF ROTATE DISK TRACK NO. TO LOW A RAL ISOLATE AND M377 TRACK NUMBER. INA SET A = NUMBER OF USED TRACKS STA CURAT SAVE NO. OF USED TRACKS CMA,INA STA TCNT SET TRACK USAGE COUNT CLA STA TBUF CLEAR TBUF LDA ADICT SET THE TAT ADDRESS STA CURAI FOR OUTID SYSTR LDA MSIGN SET FLAG FOR SYSTEM-USED TRACK JSB OUTID OUTPUT TRACK-USED FLAG ISZ TCNT STEP THE COUNT JMP SYSTR MORE TO DO CONTINUE * USRTR JSB REMDO FLUSH FINAL SECTOR FROM DBUF SKP * * CLEAR SYSTEM COMMUNICATION AREA * * THIS OVERLAYS 131 OCTAL WORDS * BELOW THE LABEL "USRTR". * LDA FWCMM GET ADDR OF SYS COMM AREA LDB NLCOM GET NEG. LENGTH OF COMM AREA STB WDCNT SET COUNT FOR CLEARING BP AREA CLB STB A,I CLEAR BP COMM AREA WORD INA ISZ WDCNT SKIP - AREA CLEARED JMP *-3 CONTINUE CLEARING BP AREA * * LDA AEQT GET ADDRESS OF EQT STA EQTA GEDT ADDRESS OF EQT * LDA CEQT GET NO. OF EQT ENTRIES STA EQT# SET NO. OF EQT ENTRIES * LDA ASQT GET ADDR OF DEV REF TABLE STA DRT SET ADDR OF DEV REF TABLE * LDA CSQT GET NO. OF DEV REF TABLE ENTRIES STA LUMAX SET NO. OF DEV REF TABLE ENTRIES * LDA AINT GET ADDR OF INTERRUPT TABLE STA INTBA SET ADDR OF INTERRUPT TABLE * LDA CINT GET NO. OF INT ENTRIES STA INTLG SET NO. OF INT ENTRIES * LDA ADICT GET ADDR OF DISK TRACK TABLE STA TAT SET ADDR OF DISK TRACK TABLE * LDA KEYAD GET ADDR OF KEYWORD LIST STA KEYWD SET ADDR OF KEYWORD LIST * LDA TBCHN GET I/O ADDR FOR TBG STA TBG SET I/O ADDR FOR TBG * LDA TTYCH GET I/O ADDR FOR SYS TELETYPE STA SYSTY SET I/O ADDR FOR SYS TELETYPE * LDB SCH4 SET ID ADDRESS OR ZERO STB SKEDD IN SCHEDULED LIST * LDA SWAPF GET SWAPPING FLAG STA SWAP SET SWAPPING FLAG * LDA LBCAD GET ADDR OF LIBRARY STA LBORG SET ADDR OF LIBRARY * LDA RTCAD GET RT COM ADDRESS STA RTORG SET RT COM ADDRESS * LDA COMRT GET RT COM LENGTH STA RTCOM SET RT COM LENGTH * * SWTCH NEEDS RTDRA,AVMEM, & BKDRA SET FOR RTE-III FMGR INITIALIZATION LDA MEM6 SET FWA OF R/T STA RTDRA DISC RESIDENT AREA. * LDA SYMAD GET ADDRESS OF SYS AV MEM STA AVMEM SET ADDR OF SYS AV MEM * LDA BGBND SET BG BOUNDARY STA BKORG SET BG BOUNDARY * LDA COMBG SET BACKGROUND STA BKCOM COMMON LENGTH. * LDA MEM12 GET BG DISK RESIDENT ORIGIN STA BKDRA SET BG DISK RESIDENT ORIGIN * LDA LWASM GET LAST AVAIL ADDR FOR SYSTEM STA BKLWA SET LAST AVAIL ADDR FOR SYSTEM * IFN *** BEGIN NON-DMS CODE *** LDA URBP SET FWA OF R/T DISC RESIDENT STA BPA1 LINK AREA IN BASE PAGE. * LDA URBP1 SET LWA FOR R/T STA BPA2 BASE PAGE LINK. * LDA UBBP SET FWA OF BKG DISC RESIDENT STA BPA3 LINK AREA IN BASE PAGE. **** END NON-DMS CODE **** XIF * IFZ ***** BEGIN DMS CODE ***** LDA P2 STA BPA1 1ST LINK FOR RT DR'S STA BPA3 1ST LINK FOR BG DR'S CCA ADA LOLNK SAVE LOWEST SYS LINK-1 STA BPA2 AS LAST LINK FOR RT DR'S ****** END DMS CODE ****** XIF LDA PIOC SET ADDRESS OF STA DUMMY PRIVILEGED I/O CARD. * LDA SDS# SET # SECTORS/TRACK FOR STA SECT2 SYSTEM DISC (LU #2). * LDA ADS# SET # SECTORS/TRACK FOR STA SECT3 AUXILIARY DISC (LU #3). * LDA DSKSY SET DISC ADDR. OF STA IDSDA FIRST ID SEGMENT. * LDA IDSP SET POSITION OF 1ST ID SEGMENT STA IDSDP IN SECTOR. * LDA DSKLB GET DISK ADDR OF LIB ENTRY PTS STA DSCLB SET DISK ADDR OF LIB ENTRY PTS * LDA LBCNT GET NO. OF LIB ENTRY PTS STA DSCLN SET NO. OF LIB ENTRY PTS * LDA DSKUT GET DISK ADDR OF UTILITY PROGS STA DSCUT SET DISK ADDR OF UTILITY PROGS * LDA UTCNT GET NO. OF UTILITY PROGS STA DSCUN SET NO. OF UTILITY PROGS LDA DSIZE SYSTEM DISC SIZE STA TATSD * LDA DSIZE TOTAL DISC TABLE LENGTH ADA DAUXN CMA,INA STA TATLG SET TOTAL DISK TABLE LENGTH * LDA DMEM1 SET UP THE MEMORY TABLE STA TBUF TO BE FIRST ADDRESS LDB N6 FOLLOWED BY NUMBER STB TEMP4 MADJ LDA TBUF,I OF WORDS CMA,INA CACULATE THE NUMBER ISZ TBUF STEP TO THE HIGH WORD LDB TBUF,I COMPUTE SIZE ADA B CMB,INB MAKE SURE HIGH ADDRESS <77776 ADB M7..5 SSB ADA N2 IF NOT, ADJUST DOWNWARD STA TBUF,I SET IT ISZ TBUF STEP TO THE NEXT WORD ISZ TEMP4 IF DONE EXIT JMP MADJ ELSE LOOP * IFZ ***** BEGIN DMS CODE **** CLA STA MEM6 CLEAR JUNK OUT OF MEM6 STA MEM12 CLEAR JUNK OUT OF MEM12 ****** END DMS CODE ****** XIF * STA EQT12 SET THE LAST WORD * LDA DMEM1 MOVE THE FREE MEMORY LDB DEQT1 TABLE INTO JSB MOVW THE EQT AREA DEC -11 * LDA NLCOM SET UP # WORDS. STA OUTBP LDA FWCMM MOVE THE SYS COM LDB ADBP AREA ADB LWSBP TO THE JSB MOVW THE DUMMY BASE PAGE OUTBP NOP SPC 2 * PUT OUT BASE PAGE * JSB DSKEV GET NEXT EVEN SECTOR ADDRESS STA DSKAV SAVE NEXT AVAILABLE DISK ADDR IFN *** BEGIN NON-DMS CODE *** LDA DSKAB GET INITIAL ABSOLUTE DISK ADDR STA DSKAD SET CURRENT DISK ADDRESS LDA M2000 GET UPPER SYSTEM BP ADDRESS LDB P2 GET LOWER SYSTEM BP ADDRESS JSB BPOUT OUTPUT RESIDENT BP SECTION **** END NON-DMS CODE **** XIF SPC 2 IFZ ***** BEGIN DMS CODE ***** * WRITE UPPER PART OF SYSTEM BASE PAGE TO DISK. * * THE PORTION OF THE BASE PAGE CONTAINING MEMORY * RESIDENT PROGRAM LINKS WAS ALREADY WRITTEN OUT. * SINCE WE PROBABLY ENDED THE LOWER PORTION IN * THE MIDST OF A SECTOR, IT IS MOST CONVENIENT TO * WRITE THE REMAINDER OF THE B.P. USING LABDO, A * WORD AT A TIME, TO INSURE THAT NEW WORDS ARE * MERGED INTO THE APPROPRIATE POSITIONS ON DISK. * * WE TELL LABDO WE ARE WRITING PAGE 1 WORDS VICE * PAGE 0 SINCE LABDO WAS DESIGNED TO VECTOR ALL BASE * PAGE REFERENCES INTO THE IN-CORE "DUMMY BASE PAGE" * INSTEAD OF THE DISK. SPC 1 LDA DSKBP GET STARTING SECTOR OF SBP STA DBDSK AND SAVE IN LABDO MAP. LDA M2002 SET BASE CORE ADDR STA DBASE IN MAP. FNLH LDA M4000 AND SET MAX CORE ADDR SEEN STA DBMAX IN MAP. LDA DBMAP SET LABDO TO USE SPECIAL JSB SETDS MAP BELOW. LDA LOLNK SAVE CORE ADDRESS OF LOWEST ADA ADBP SYSTEM LINK IN TEMPORARY. STA TEMP5 LDB LOLNK CONVERT TARGET BP ADDR TO PAGE 1 ADB M2000 ADDR TO FAKE OUT LABDO. SPC 1 BLOOP LDA TEMP5,I PICK UP NEXT BP WORD AND JSB LABDO WRITE TO DISK, INCREMENTING B VN ISZ TEMP5 REG (TARGET) AND TERMP5 CPB M4000 (SOURCE) EACH TIME UNTIL JMP BPEND END OF PAGE IS PASSED JMP BLOOP (TARGET ADDR = PAGE 2) SPC 1 TEMP5 BSS 1 LOCAL TEMPORARY DBMAP DEF *+1 *MAPPING ENTRIES * DBASE BSS 1 * FOR LABDO, DO NOT* DBMAX BSS 1 * MOVE W/RESPECT * DBDSK BSS 1 * TO EACH OTHER. * SPC 1 BPEND EQU * ****** END DMS CODE ****** XIF LDA OLDDA FLUSH THE LABDO BUFFER LDB ADBUF TO THE JSB DISKO DISC LDA ASECT GET ADDRESS OF BOOT SPECS. JSB FSECT FLUSH THE FINAL SECTOR * * LDA P22 LDB MES23 MES23 = ADDR: *SYSTEM STORED ETC JSB DRKEY PRINT: SYSTEM STORED ON DISK * LDA DSKAV CONVERT ALF,ALF LAST RAL USED AND M377 DISC CMA,INA LDB ATBUF ADDRESS (TRACK #) TO DECIMAL JSB CONVD AND LDA TBUF+2 STORE STA MES38+6 IN MESSAGE. LDA DSKAV CONVERT AND M177 SECTOR ARS CONVERT TO 128 WORD SECTORS CMA,INA (DECIMAL) LDB ATBUF # JSB CONVD AND LDA TBUF+2 STORE STA MES38+11 IN LDA TBUF+1 MESSAGE AND M377 ISOLATE 3RD DIGIT, IOR UBLNK ADD UPPER BLANK. STA MES38+10 LDA P31 PRINT MESSAGE: LDB MES38 "SYS SIZE: JSB DRKEY TRK XX SEC XXX(10)" JSB SPACE SKP * * GENERATION COMPLETE. CLEAN HOUSE. * LDA DSKAV FORCE ACESS TO LAST RECORD LDB ADBUF SO TRUNCATE WILL WORK. JSB DISKI JSB CLSAB CLOSE CORE-IMAGE FILE. * LDA P14 PRINT: LDB MES11 "RTGEN FINISHED" JSB LFOUT * JSB OPEN OPEN FILE IN ORDER DEF *+4 TO PURGE IT DEF NMDCB DEF FMRR DEF .NM. * JSB CLOSE  PURGE TEMP NEW NAM FILE. DEF *+4 DEF NMDCB DEF FMRR DEF P64 * JSB CLOSF CLOSF PRINT FILE DEF *+3 DEF LFDCB DEF ZERO * JSB CLOSF CLOSE LAST RELOCATABLE DEF *+3 INPUT FILE DEF RRDCB DEF ZERO * JSB CLOSF DEF *+3 DEF ECDCB DEF ZERO * JSB CLOSF CLOSE INPUT FILE DEF *+3 DEF IPDCB DEF ZERO * JSB EXEC PRINT OUT ENDING MESSAGE DEF *+5 DEF P2 DEF ERRLU DEF MES11+1 DEF P7 * JSB EXEC RELEASE SYMBOL TABLE TRACKS DEF *+3 DEF P5 DEF M1 * * JSB EXEC TERMINATE. DEF *+2 DEF P6 * ZERO NOP * MES11 DEF *+1 ASC 1,RT IFN ***** BEGIN NON-DMS CODE ***** ASC 1,2G ***** END NON-DMS CODE ***** XIF IFZ ***** BEGIN DMS CODE ***** ASC 1,3G ***** END DMS CODE ***** XIF ASC 5,N FINISHED * DMEM1 DEF MEM1 DEQT1 DEF EQT1 * M2002 OCT 2002 M4000 OCT 4000 M377 OCT 377 P16 DEC 16 M7..5 OCT 77775 SKP SKP *** SYSTEM BASE PAGE COMMUNICATION AREA *** * * SYSTEM TABLE DEFINITION * * FWCMM DEF USRTR-131B . EQU USRTR-130B * XI EQU .-1 ADDR OF I-REG SAVE AREA * FOR RUNNING PROG (MEU) EQTA EQU .+0 FWA OF EQUIPMENT TABLE EQT# EQU .+1 # OF EQT ENTRIES LUMAX EQU .+3 # OF LOGICAL UNITS (IN DRT) DRT EQU .+2 FWA OF DEVICE REFERENCE TABLE INTBA EQU .+4 FWA OF INTERRUPT TABLE INTLG EQU .+5 # OF INTERRUPT TABLE ENTRIES TAT EQU .+6 FWA OF TRACK ASSIGNMENT TABLE KEYWD EQU .+7 FWA OF KEYWORD BLOCK * * I/O MODULE/DRIVER COMMUNICATION * EQT1 EQU .+8 ADDRESSES EQT2 EQU .+9 EQT3 EQU .+10 OF EQT4 EQU .+11 EQT5 EQU .+12 CURRENT EQT6 EQU .+13 EQT7 EQU .+14 15-WORD EQT8 EQU .+15 EQT9 EQU .+16  EQT EQT10 EQU .+17 EQT11 EQU .+18 ENTRY EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * CHAN EQU .+19 CURRENT DMA CHANNEL # TBG EQU .+20 I/O ADDRESS OF TIME-BASE CARD SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM TTY * * SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION * * RQCNT EQU .+22 # OF REQUEST PARAMETERS -1 RQRTN EQU .+23 RETURN POINT ADDRESS RQP1 EQU .+24 ADDRESSES RQP2 EQU .+25 RQP3 EQU .+26 OF REQUEST RQP4 EQU .+27 RQP5 EQU .+28 PARAMETERS RQP6 EQU .+29 RQP7 EQU .+30 (SET FOR MAXIMUM OF RQP8 EQU .+31 8 PARAMETERS) * * DEFINITION OF SYSTEM LISTS (QUEUES) * * DORMT EQU .+32 ADDRESS OF 'DORMANT' LIST, SKEDD EQU .+33 'SCHEDULE' LIST, SUSP3 EQU .+36 'AVAILABLE MEMORY' LIST, SUSP4 EQU .+37 'DISC ALLOCATION' LIST, SUSP5 EQU .+38 'OPERATOR SUSPEND' LIST * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU .+49 'A REGISTER' AT SUSPENSION XB EQU .+50 'B REGISTER' XEO EQU .+51 'E AND OVERFLOW * * SYSTEM MODULE COMMUNICATION FLAGS * * OPATN EQU .+52 OPERATOR/KEYBOARD ATTENTION FLAG OPFLG EQU .+53 OPERATOR COMMUNICATION FLAG SWAP EQU .+54 RT DISC RESIDENT SWAPPING FLAG DUMMY EQU .+55 I/O ADDRESS OF DUMMY INT. CARD IDSDA EQU .+56 DISC ADDR. OF FIRST ID SEGMENT IDSDP EQU .+57 -POSITION WITHIN SECTOR * * DEFINITION OF MEMORY ALLOCATION BASES * * BPA1 EQU .+58 FWA R/T DISC RES. BP LINK AREA BPA2 EQU .+59 LWA R/T DISC RES. BP LINK AREA BPA3 EQU .+60 FWA BKG DISC RES. BP LINK AREA LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA RTORG EQU .+62 FWA OF REAL-TIME AREA RTCOM EQU .+63 LENGTH OF REAL TIME COMMON AREA RTDRA EQU .+64 FWA OF R/T DISC RESIDENT AREA AVMEM EQU .+65 FWA OF SYSTEM AVAILABLE MEMORY BKORG EQU .+66 FWA OF BACKGROUND AREA BKCOM EQU .+67 LENGTH OF BACKGROUND COMMON AREA BKDRA EQU .+68 FWA OF BKG DISC RESIDENT AREA * * UTILITY PARAMETERS * TATLG EQU .+69 LENGTH OF TRACK ASSIGNMENT TABLE TATSD EQU .+70 # OF TRACKS ON SYSTEM DISC SECT2 EQU .+71 # SECTORS/TRACK ON LU 2 (SYSTEM) SECT3 EQU .+72 # SECTORS/TRACK ON LU 3 (AUX.) DSCLB EQU .+73 DISC ADDR OF RES LIB ENTRY PTS DSCLN EQU .+74 # OF RES LIB ENTRY POINTS DSCUT EQU .+75 DISC ADDR OF RELOC UTILITY PROGS DSCUN EQU .+76 # OF RELOC UTILITY PROGS LGOTK EQU .+77 LOAD-N-GO: LU,STG TRACK,# OF TRKS LGOC EQU .+78 CURRENT LGO TRACK/SECTOR ADDRESS SFCUN EQU .+79 SOURCE FILE LU AND DISC ADDRESS MPTFL EQU .+80 MEMORY PROTECT ON/OFF FLAG (0/1) FENCE EQU .+85 MEM PROTECT FENCE ADDRESS BKLWA EQU .+87 LWA OF MEMORY IN BACKGROUND HED RTGN3 - LOADING CONTROL SEGMENT SUBROUTINES. IFZ ***** BEGIN DMS CODE ***** * * IDFIX: SETS UP WORD 22 OF ID-SEGMENT FOR RTE-III * * WORD 22 FORMAT - BIT 15: 1=PARTITION ASSIGNED * 10-14: PARTITION SIZE REQMT. IN PAGES * NEGLECTING BASE PAGE (#PAGES-1) * 7-9: MEM PROTECT FENCE TBL INDEX * 6: RESERVED (0) * 0-5: ASSIGNED PARTITION NUMBER-1 * * CALLING SEQUENCE: * * JSB SYS (OR MAKE SURE LABDO IS MAPPING SYSTEM) * A= #PAGES NEEDED BY PROGRAM INCL. BASE PAGE * B= INDEX OF IDENT ENTRY FOR PROG * JSB IDFIX * * SUBROUTINES CALLED: LABDO * * RETURN: * A,B,E DESTROYED SPC 1 IDFIX NOP SZA DON'T INCLUDE BASE ADA M1 PAGE IN SIZE. STA IDTM1 SAVE PAGE REQMT STB TIDNT STORE DESIRED ENTRY INDEX JSB IDX AND BRING INTO CORE JSB ABORT NOT THERE SPC 1 * CHECK USE OF SSGA SPC 1 LDA ID6,I GET PROG TYPE FROM IDENT AND M20 AND ISOLATE THE SSGA BIT. SZA,RSS IF NOT USING SSGA, JMP NOSSC THEN GO CHECK OTHER COMMONS. SPC 1 LDA XSSGA IF USING SSGA, THEN PICK UP JMP IDSET MPFT INDEX AND GO WRITE ID-SEG. SPC 1 * NOT USING SSGA; USE COMMON SIZE FROM IDENT * (EITHER SOME OR NONE), REVERSE COMMON BIT IN TYPE, * AND LOW TWO TYPE BITS TO INDEX INTO TABLE OF * MPFT INDICES. SPC 1 NOSSC LDA ID6,I GET TYPE AGAIN AND SAVE BITS AND M13 0,1, AND REVERSE COMMON BIT. LDB ID4,I PICK UP COMMON SIZE SZB IF ANY, THEN SET BIT 2 IN A. IOR P4 SPC 1 ADA IDTB. USE BIT PATTERN IN A TO INDEX LDA A,I TABLE, AND PICK UP MPFT INDEX. SPC 1 * A CONTAINS MPFT INDEX, MERGE IN SIZE REQUIREMENT * AND WRITE DISK. SPC 1 IDSET CLB PUT MPFT INDEX AND RRR 3 IOR IDTM1 PAGE REQMT IN PROPER RRL 10 POSITIONS IN A-REG SPC 1 STA IDTM3 SAVE NEW ID WORD JSB IDFND FIND ID-SEG ADDRESS ADB P21 POINT TO ID-SEG WORD 22 LDA IDTM3 AND WRITE NEW CONTENTS JSB LABDO TO DISK. SPC 1 LDA IDTM1 MERGE PARTITION SIZE LSL 8 REQUIREMENT LESS 1 IOR ID8,I INTO UPPER BYTE STA ID8,I OF IDENT WORD 8 SPC 1 * RETURN TO CALLER JMP IDFIX,I SPC 1 * CONSTANTS, ETC. SPC 1 IDTM1 BSS 1 IDTM3 BSS 1 XSSGA DEC 4 MPFT INDEX IF USING SSGA XDRNC EQU 0 MPFT INDEX IF DISK RES W/O COM. XMRNC EQU 1 MPFT INDEX IF MEM RES W/O COM. XBG EQU 3 MPFT INDEX IF USER OF BG COM. XRT EQU 2 MPFT INDEX IF USER) OF RT COM. M20 EQU P16 * M13 OCT 13 SPC 4 * INDEX LOOKUP TABLE * * TABLE CONTAINS MPFT INDICES (XSSGA, XDRNC, * XMRNC, XBG, OR XRT) * * THE INDEX TO THIS TABLE IS 4 BITS LONG: * * BITS 0,1: 00 - SHOULDN'T HAPPEN * (FROM TYPE) 01 - RT MEM RES * 10 - RT DISK RES * 11 - BG DISK RES * BIT 2: 0 - NO COMMON USED * 1 - COMMON USED * BIT 3: 0 - USE NORMAL COMMON * 1 - USE REVERSE COMMON SPC 1 IDTB. DEF *+1 ABS 0 INDEX=0000-SHOULDN'T HAPPEN ABS XMRNC 0001-MR W/O COMMON ABS XDRNC 0010-RT DR W/O COMMON ABS XDRNC 0011-BG DR W/O COMMON ABS 0 0100 BAD ENTRY ABS XRT 0101-MR W/RT COMMON ABS XRT 0110-RT DR W/RT COMMON ABS XBG 0111-BG DR W/BG COMMON ABS 0 1000-BAD ENTRY,SHOULDN'T OCCUR ABS XMRNC 1001-MR W/O COMMON (REVERSE) ABS XDRNC 1010-RT DR W/O COMMON (REVERSE) ABS XDRNC 1011-BG DR W/O COMMON (REVERSE) ABS 0 1100-BAD ENTRY ABS XBG 1101-MR W/BG COMMON ABS XBG 1110-RT DR W/BG COMMON ABS XRT 1111-BG DR W/RT COMMON * END OF TABLE SPC 4 * * IDFND - FIND ID SEGMENT ADDRESS BY READING * KEYWORD FROM DISC. * * CALLING SEQ: RETURN SEQ: (N+1) * (INSURE 'SYS' MAP IS SET FOR LABDO) A IS DESTROYED * (INSURE IDFIX CALLED EARLIER FOR PROG) B IS ID SEG ADDR * (INSURE PROG'S IDENT IS IN CORE) * JSB IDFND * SPC 1 IDFND NOP LDA M377 PICKUP KEYWD# IN IDENT AND ID8,I WORD 8 AND ISOLATE IT ADA KEYAD ADD KEYWORD BASE ADDR LDB A AND SAVE IN B FOR DPRW. JSB DPRW THEN READ KEYWD. LDB A JMP IDFND,I RETURN W/ID-SEG ADDR IN B. SPC 4 * DETERMINE PAGE REQUIREMENTS FOR A PROGRAM * * CALLING SEQUENCE: RETURN SEQUENCE: * A=HIGH MAIN ADDR+1 B,E DESTROYED * B=LOW MAIN ADDR A=PAGE REQUIREMENT * JSB PGREQ INCL. BASE PAGE. SPC 1 PGREQ NOP CMB B=-LOMAIN-1 ADA B A=NO. WORDS NEEDED-1 RRR 10 A=#PAGES-1 AND M37 CLEAN OUT BAD BITS ADA P2 A=#PAGES+1(I.E. INCL BASE PAGE) SPC 1 JMP PGREQ,I PAGE REQUIREMENTS. ****** END DMS CODE ****** XIF SKP * * PRINT HEADING, INITIALIZE IDX * * THE SETHD SUBROUTINE PRINTS THE HEADINGS FOR THE DIFFERENT * TYPES OF PROGRAMS LOADED, SETS THE NO-PROGRAMS-LOADED-YET * FLAG, AND ORIGINS THE SCAN OF IDENT. * * CALLING SEQUENCE: * A = NO. CHARS. (POS.) IN MESSAGE * B = ADDRESS OF MESSAGE * JSB SETHD * * RETURN: CONTENTS OF A AND B ARE DESTROYED * SETHD NOP DST TBUF SAVE THE MESSAGE JSB SPACE NEW LINE DLD TBUF NOW JSB DRKEY PRINT HEADING JSB SPACE NEW LINE CCA STA LFLAG SET PROGRAMS-LOADED FLAG = -1 LDA P10 GET FIRST IDENT INDEX STA CIDNT SET IDENT ADDRESS FOR ID SCAN JMP SETHD,I RETURN SPC 2 * * THE MOVW SUBROUTINE MOVES WORDS FROM ONE CORE LOCATION * TO ANOTHER * * CALLING SEQUENCE: * * LDA FROM ADDRESS * LDB TO ADDRESS * JSB MOVW * DEC -WORD COUNT * MOVW NOP STA TBUF LDA MOVW,I GET THE COUNT STA TBUF+1 SET IN COUNTER * MOVW2 LDA TBUF,I GET A WORD STA B,I SET IT INB ISZ TBUF STEP THE ADDRESSES ISZ TBUF+1 DONE? JMP MOVW2 NO DO THE NEXT ONE * ISZ MOVW STEP TO RETURN POINT JMP MOVW,I YES- RETURN SKP * *  UPDATE RESIDENT MEMORY BOUNDS * * THE INCAD SUBROUTINE UPDATES THE MAIN AND BP MEMORY BOUNDS * FROM THAT USED IN THE PREVIOUS LOADING CALL. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INCAD * * RETURN: CONTENTS OF A AND B ARE DESTROYED * INCAD NOP LDA TPREL GET CURRENT RELOCATION ADDRESS STA PPREL SET NEW PROGRAM RELOC ADDRESS LDA TBREL GET CURRENT BP RELOC ADDRESS STA PBREL SET NEW BP RELOCATION ADDRESS JMP INCAD,I RETURN SPC 5 * DSKEV FORCES THE CURRENT DISC * ADDRESS TO BE EVEN. THIS IS * DONE TO INCREASE LOAD EFFENCIENCY * DURING RTE EXECUTION DSKEV NOP LDA DSKAD GET CURRENT ADDRESS SLA IF EVEN SKIP JSB DISKA ELSE STEP BY ONE STA DSKAD RESET ADDRESS JMP DSKEV,I RETURN - ADDRESS IN A. SKP * N6 DEC -6 P21 DEC 21 * MES13 DEF MS13 MES14 DEF *+2 DEF *+6 ASC 8,RT COM MES15 DEF MS15 MES16 DEF MS16 MES18 DEF *+2 DEF *+6 ASC 8,BG COM IFN *** BEGIN NON-DMS CODE *** MES19 DEF MS19 **** END NON-DMS CODE **** XIF MES20 DEF MS20 MES22 DEF *+1 ASC 3,(NONE) MES23 DEF MS23 MES12 EQU MES23 MES27 DEF MS27 * MES38 DEF *+1 ASC 16,SYS SIZE: XX TRKS, XXX SECS(10) * ASECT DEF SECTR JMP3I JMP 3,I INITIAL JMP INSTRUCTION * MES57 ASC 5,BG COMMON IFN *** BEGIN NON-DMS CODE *** MES52 ASC 5, LIB ADDRS MES53 ASC 5, FG COMMON MES54 ASC 5,FG RES ADD MES55 ASC 5,FG DSC ADD MES56 ASC 5,BG BOUNDRY MES58 ASC 5,BG RES ADD MES59 ASC 5,BG DSC ADD MES60 ASC 5, SYS AVMEM **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** MES53 ASC 5,RT COMMON MES60 ASC 5,LW RES PRG MES61 ASC 5,1ST DSK PG ****** END DMS CODE ****** XIF * SPC 3 MS02 ASC 8,BP LINKAGET XXXXX MS13 ASC 4,LIBRARY IFN *** BEGIN NON-DMS CODE *** MS15 ASC 6,FG RESIDENTS MS16 ASC 9,FG DISC RESIDENTS **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** MS15 ASC 8,MEMORY RESIDENTS MS16 ASC 9,RT DISC RESIDENTS ****** END DMS CODE ****** XIF IFN *** BEGIN NON-DMS CODE *** MS19 ASC 6,BG RESIDENTS **** END NON-DMS CODE **** XIF MS20 ASC 9,BG DISC RESIDENTS MS23 ASC 11,SYSTEM STORED ON DISC MS27 ASC 8,FWA BP LINKAGE? SKP IFZ ***** BEGIN DMS CODE ***** * * SET RELOCATION BASE AT FIRST PAGE FOLLOWING SYSTEM * OR, IF USED, COMMON. THIS ROUTINE IS CALLED BEFORE * RELOCATION OF EACH DISK RESIDENT PROGRAM SPC 1 SETRB NOP LDB SSGA. GET LWA OF SYS/LIB + 1 LDA ID6,I GET PROG TYPE AND M20 ISOLATE SSGA BIT IN TYPE, IOR ID4,I MERGE IN COMMON LENGTH, SZA AND IF HE USES EITHER LDB FWMRP SET RELOC BASE ABOVE COMMON. CCA ADA B GET LWA OF SYS OR COMMON, AND M1760 KEEP JUST PAGE NUMBER, ADA M2000 BUMP TO START OF NEXT PAGE STA PPREL AND SAVE AS RELOCATION BASE. CLA RESET BASE PAGE ALLOCATION STA BPMAX HIGH-WATER-MARK JMP SETRB,I RETURN * M1760 OCT 176000 SPC 5 * * DPRW - READ AND REWRITE A WORD FROM THE ABSOLUTE SYSTEM * STORED ON THE DISK * * CALL A-IGNORED * B- ABS TARGET SYSTEM ADDR * RETURN: B SET TO B+1 * A=CONTENTS OF DESIRED WORD SPC 1 DPRW NOP JSB LABDO READ AND DESTROY WORD STA DPRWT SAVE IN TEMP ADB M1 BACK UP ADDR JSB LABDO RESTORE WORD LDA DPRWT BACK TO A JMP DPRW,I AND RETURN SPC 1 DPRWT BSS 1 ****** END DMS CODE ****** XIF SKP * * SCAN IDENTS FOR PROGRAM TYPE * * THE IDSCN SUBROUTINE SCANS IDENT FOR A PROGRAM OF THE * CURRENT TYPE (SET IN PTYPE). * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB IDSCN * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * E = M/S FLAG FOR CURRENT PROGRAM. * IDSCN NOP LDA CIDNT GET NEXT IDENT IN SCAN STA TIDNT SET IDENT INDEX FOR IDX JSB IDX SET IDENT ADDRESSES JMP IDSCN,I RETURN - END OF IDENTS CCA ADA TIDNT GET CURRENT MAIN IDENT INDEX STA IMAIN SAVE CURRENT MAIN IDENT INDEX LDA TIDNT GET NEXT IDENT INDEX STA CIDNT SAVE ADDR FOR NEXT IDENT SCAN LDA ID6,I GET TYPE RAL,CLE,ERA SET E = M/S AND TYPMS ISOLATE PROGRAM TYPE CPA PTYPE CURRENT TYPE? RSS YES - CONTINUE JMP IDSCN+3 IGNORE IDENT - TRY NEXT IDENT ISZ IDSCN INCR RETURN ADDRESS JMP IDSCN,I RETURN SKP * * TEST FOR SOME PROGRAMS LOADED * * THE NOTST SUBROUTINE CHECKS FOR PROGRAMS OF THE CURRENT * TYPE LOADED. IT IS EXECUTED FOLLOWING COMPLETION OF THE * LOADING SEQUENCE FOR EACH PROGRAM TYPE. IF NO PROGRAMS OF * THIS TYPE HAVE BEEN LOADED, IT PRINTS THE MESSAGE * (NONE) ON THE TELEPRINTER. * OTHERWISE IT REPORTS THE CURRENT BASE PAGE LINKAGE ADDRESS. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB NOTST * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * NOTST NOP LDA BPMAX GET CURRENT TOP OF LINKAGE ISZ LFLAG IF NO PROGRAMS LOADED JMP BPRPT SEND: (NONE) LDA P6 LDB MES22 MES22 = ADDR: (NONE) JSB DRKEY PRINT: (NONE) IFN JMP NOTST,I RETURN * BPRPT JSB BPLNR SEND BP LINKAGE MESSAGE JMP NOTST,I RETURN XIF IFZ BPRPT JMP NOTST,I XIF SPC 2 MES02 DEF MS02 MES03 DEF MS02+5 SPC 2 BPLNR NOP SEND MESSAGE 'BP LINKAGE XXXXX' LDB MES03 XXXXX IS IN A ON ENTRY *JSB CONVD CONVERT TO MESSAGE LDA P16 GET LENGTH LDB MES02 AND ADDRESS JSB DRKEY SEND MESSAGE JMP BPLNR,I RETURN SKP * * CLEAR LOCAL LST ENTRIES * * CLRLT CLEARS THE CURRENT BP LINKAGE ADDRESSES IN THE BASE PAGE * IMAGE. (CLEARS B-A WORDS). * * CALLING SEQUENCE: * A = CURRENT LOW BP ADDRESS * B = CURRENT HIGH BP ADDRESS PLUS ONE * JSB CLRLT * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * CLRLT NOP IFZ ***** BEGIN DMS CODE ***** STA CLRTM SAVE PARM IN TEMP LDA BPINC AND PICK UP BP INCREMENT ELA AND SAVE SIGN (<0 = DOWN) LDA CLRTM THEN RESTORE PARM. SEZ IF BP LINKS GO DOWNWARD, SWP THEN SWAP PARMS. ****** END DMS CODE ****** XIF CMB,INB SET HIGH BOUND NEGATIVE ADB A SET A = TOTAL WORD COUNT SSB,RSS SKIP - SOME BP SECTION TO CLEAR JMP CLRLT,I RETURN - NO BP SECTION STB WDCNT SET COUNT FOR CLEARING ADA ADBP ADJUST FOR BP ADDRESS LDB CLWRD GET THE CLEARING WORD STB A,I CLEAR BP WORD INA ISZ WDCNT SKIP - ALL BP CLEAR JMP *-3 JMP CLRLT,I END OF CLEARING IFZ ***** BEGIN DMS CODE ***** CLRTM BSS 1 ****** END DMS CODE ****** XIF * CLWRD NOP SKP * * OUTPUT ABSOLUTE BASE PAGE CODE * * BPOUT OUTPUTS THE BASE PAGE SECTION OF CODE FOLLOWING LOADING OF * EACH DISK RESIDENT PROGRAM, BEGINNING WITH THE DISK * ADDRESS SPECIFIED IN DSKAD. * * CALLING SEQUENCE: * A = UPPER BP ADDRESS PLUS ONE * B = LOWER BP ADDRESS * JSB BPOUT * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * BPOUT NOP CMA,INA COMPLEMENT UPPER ADDRESS ADA B ADD LOWER ADDRESS STA TCNT SAVE BP LENGTH ADB ADBP ADJUST FOR BP ADDRES=HFBS STB CURAT SAVE CURRENT LOWER CORE ADDR SSA,RSS SKIP - SOME CODE IN BP JMP BPOUT,I RETURN - ALL CODE OUT LDA DSKAD GET CURRENT DISK ADDRESS BPSYO JSB DISKO OUTPUT CURRENT BP SECTOR LDA DSKAD GET CURRENT DISK ADDRESS JSB DISKA INCR DISK ADDRESS STA DSKAD SAVE NEXT DISK ADDRESS LDB TCNT GET CURRENT LENGTH ADB P64 STB TCNT SAVE COUNT FOR NEXT PASS SSB,RSS SKIP - MORE CODE TO PUT OUT JMP BPOUT,I RETURN - ALL CODE OUT LDB CURAT GET CURRENT LOW CORE ADDRESS ADB P64 STB CURAT SET NEXT CORE ADDRESS JMP BPSYO OUTPUT NEXT SECTOR TO DISK * P64 DEC 64 SKP * CLEAR PROGRAMS-LOADED FLAGS * * CLID3 CLEARS THE USAGE FLAGS TO ENSURE THAT PROGRAMS WILL BE * RE-LOADED AGAIN IF CALLED MORE THAN ONCE. THIS IS ESSENTIAL * FOR ALL UTILITY PROGRAMS AND USER SUBROUTINES, BUT MUST NOT * BE DONE FOR SYSTEM PROGRAMS, LIBRARY PROGRAMS, OR MAIN USER * PROGRAMS. BOTH THE USAGE FLAG IN THE IDENT ENTRY AND THE * SYMBOL VALUES FOR ALL ENTRY POINTS IN THE PROGRAM ARE CLEARED. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB CLID3 * RETURN: CONTENTS OF A AND B ARE DESTROYED. * CLID3 NOP LDB P3 GET THE STANDARD FLAG LDA P5 CPA PTYPE PROG = BG SEGMENT? LDB P7 YES - GET BS FLAG BITS /dH STB CURAP SET CURRENT PROG FLAG BITS JSB INIDX INITILIZE THE IDENT SCANNER TRID3 JSB IDX GET THE NEXT IDENT. JMP CLID3,I IF NONE THEN EXIT - DONE * LDA ID6,I GET M/S,TYPE RAL,CLE,ERA SET E IF MAIN AND M177 ISOLATE TYPE SZA,RSS IF SYSTEM JMP TRID3 FORGET IT * AND M7 ISOLATE FURTHER CPA P6 TYPE = LIBRARY? JMP TRID3 THEN - DO NOT CHANGE FLAG * CCB PRESET B TO IMPOSSIBLE TYPE CPA P7 IF LIB TYPE CLB,CLE SET NOT MAIN FLAG(B=SYS TYPE) CPB PTYPE IF SYS REF TO LIB JMP TRID3 DON'T CLEAR IT (ONE COPY FOR SYS) * SEZ IF MAIN JMP TRID3 FORGET IT * LDA ID3,I GET USAGE FLAG AND P7 ISOLATE THE USAGE FLAG CPA CURAP IF ONE THAT WE ARE AFTER RSS SKIP JMP TRID3 ELSE TRY THE NEXT ONE * XOR ID3,I ZAP THE USAGE FLAGS STA ID3,I AND RESTORE THE WORD JSB INLST INITIALIZE LSTX CLSUT JSB LSTX SET CURRENT LST ADDRESSES JMP TRID3 TRY NEXT IDENT * CCA ADA TIDNT GET IDENT INDEX CPA .LST4,I ENT/EXT BELONGS TO CURRENT PROG? CLB,RSS YES - CONTINUE JMP CLSUT TRY NEXT LST ENTRY * STB .LST5,I CLEAR SYMBOL VALUE JMP CLSUT CONTINUE CLEARING BP LINK ADDR. SKP * * PACK THE CP LINK AREA * * CCPLK PACKS THE CURRENT PAGE LINK AREA TO GET RID OF LINK * AREAS THAT ARE NO LONGER ACTIVE. * * CALLING SEQUENCE: * * LDA CURRENT PAGE ADDRESS * JSB CCPLK * * RETURN REGISTERS MEANING LESS * * CCPLK WILL DELETE ALL LINK AREAS THAT ARE ABOVE * CPLS AND REFER TO AN AREA ON A PAGE BELOW THE PAGE * ADDRESS IN A ON ENTRY. IT WILL ALSO DELETE ALL * ENTRIES FOR ZERO LENGTH AREAS. * CCPLK NOP AND M0760 SA&VE THE CMA,INA PAGE STA CPAG ADDRESS LDA CPLS GET THE LOWEST ENTRY TO SAVE STA TCCP4 SAVE FOR LAST VALID ENTRY JSB LNKS SET UP THE LNK AREA JSB LNK GET THE FIRST POSSIBLE PURGE AREA JMP CCPLK,I IF NONE THEN EXIT * LDA LNK1,I IF THIS AREA CPA LNK2,I IS OF ZERO LENGTH JMP CCPL0 GO SET UP * AND M0760 ELSE IF AREA IS ABOVE OR EQUAL ADA CPAG TO THE SAVE PAGE AREA SSA,RSS THEN JMP CCPLK,I EXIT - NO PACK NEEDED * CCPL0 LDA LNK1 SET UP THE NEXT AVAILABLE CCPL1 STA TCCP1 POINTER CCPL5 JSB LNK GET THE NEXT ENTRY JMP CCPL3 IF NONE GO HANDLE * LDA LNK1,I IF STILL CPA LNK2,I A ZERO ENTRY JMP CCPL5 REJECT THE ENTRY AND M0760 ISOLATE THE PAGE ADDRESS ADA CPAG IF STILL SSA BELOW THE SPECIFIED PAGE JMP CCPL5 REJECT THE ENTRY * LDA TCCP1 KEEP THE AREA STA TCCP4 SET LAST AREA POINTER STA TCCP2 SET MOVE POINTER LDA LNK2,I SET UP THE CMA,INA ADA LNK1,I MOVE STA TCCP3 COUNT LDA LNK1,I SET WORDS STA TCCP2,I ONE ISZ TCCP2 LDA LNK2,I TWO STA TCCP2,I ISZ TCCP2 LDA TCCP2 AND INA STA TCCP2,I THREE LDB LNK3,I MOVE CCPL2 ISZ TCCP2 THE LDA B,I IMAGE STA TCCP2,I TO THE NEW LOCATION INB ISZ TCCP3 JMP CCPL2 * LDA LNK1 AND CPA CPL2 CPL2 JMP CCPL3 IF END GO DO SPECIAL * LDA TCCP2 UPDATE INA FOR THE NEXT ENTRY JMP CCPL1 AND GO DO IT * CCPL3 LDB TCCP4 SET UP STB CPL2 CPL2, THE UPPER LIMIT JMP CCPLK,I AND EXIT SPC 2 TCCP1 NOP TCCP2 NOP TCCP3 NOP TCCP4 NOP CPAG NOP M0760 OCT 076000 SKP * * H GENERATE INT ENTRY,KEYWD,ID SEG * * GENID GENERATES THE CURRENT ID SEGMENT AND KEYWORD * FOR THE PROGRAM LOADED. IN ADDITION, IT GENERATES THE * LINKAGE REQUIRED IN THE INTERRUPT TABLE FOR THOSE PROGRAMS * WHICH ARE TO BE SCHEDULED UPON RECEIPT OF AN INTERRUPT. * * CALLING SEQUENCE: * A = 0 (GENERATE SHORT ID SEGMENT) * -1 (GENERATE LONG ID SEGMENT) * -2 (GENERATE BLANK LONG ID SEGMENT) * B = IGNORED * JSB GENID * * RETURN: CONTENTS OF A AND B ARE DESTROYED * * NOTE: CHANGED FOR RTE-III, BUT COMPATIBLE WITH RTE-II. * ABS ADDR OF ID SEGMENT IN TARGET SYSTEM IS SAVED * IN IDENT WORD 8 FOR LATER ACCESS TO ID-SEG. * GENID NOP STA PLFLG SAVE ID SEGMENT LENGTH FLAG CPA N2 IF BLANK GEN JMP BLID GO SEND THE KEY WORD SPC 1 ****************** NEW FOR RTE-III ******************** LDB SYSAD GET START ADDR FOR ID-SEG LDA PLFLG IS THIS A SHORT SZA,RSS ID-SEGMENT? ADB #IREG YES, ADD OFFSET FOR I-REGS STB SCH3 SAVE START ADDR IN A TEMP STB SYSAD AND UPDATE BASE STB CURAI UPDATE OUTID PTR TOO. ************************************************************** SPC 1 * * GENERATE INT ENTRY FOR USER SYS * LDA AILST GET THE ADDRESS OF INT IMAGE STA CURAL SET CURRENT INT ADDRESS LDA CINT GET NO. OF INT ENTRIES CMA,INA,SZA,RSS SKIP - INT NOT EMPTY JMP STKEY GENERATE KEYWORD, ID SEGMENT STA TCNT SAVE TOTAL INT COUNT GETIT LDA CURAL,I GET CURRENT WORD IN INT CMA,INA TEST NEGATIVE ENTRIES FOR ILIST CPA IMAIN EQUAL TO MAIN IDENT INDEX? RSS YES - CONTINUE JMP NOTPN IGNORE REF IF NOT CURRENT MAIN * LDA SYSAD GET ID SEG ADDRESS CMA,INA GET 2'S COMPLEMENT FOR INT ENTRY LDB AILST COMPUTE THE INT CORE CMB,INB ADDRRESS ADB CURAL = ILST OFFSET PLUS ADB AINT ACTUAL CORE ADDRESS JSB LABDO SENT THE ENTRY TO THE DISC NOTPN ISZ CURAL STEP TO THE NEXT ENTRY ISZ TCNT SKIP - INT EXHAUSTED JMP GETIT ANALYZE NEXT INT ENTRY * * GENERATE KEYWORD STKEY LDA IMAIN GET MAIN IDENT INDEX STA TIDNT SET ADDRESS FOR IDX JSB IDX SET IDENT ADDRESSES JSB ABORT NO IDENT FOUND SPC 1 LDB SYSAD CCA ADA TIDNT GET IDENT POINTER CPA SCH1 SCHEDULE PGM? STB SCH4 YES - SAVE ITS ID ADDRESS BLID LDA SYSAD GET THE ID-ADDRESS TO A LDB CURAK AND THE CURRENT CORE ADDRESS JSB LABDO TO B AND OUTPUT TO THE DISC STB CURAK SET THE NEW ADDRESS LDB SYSAD GET THE ADDRESS LDA PLFLG GET THE ID SEGMENT LENGTH FLAG ADB P22 ADJUST FOR NEXT ID SEGMENT ADDR SZA SKIP - SHORT ID SEGMENT ADB P6 ADJUST FOR LONG ID SEGMENT STB SYSAD SET NEXT ID SEGMENT ADDRESS * * GENERATE ID SEGMENT * LDA PLFLG IF FLAG = -2 FOR CPA N2 BLANK OUTPUT, JMP GENID,I EXIT SPC 1 ************************* NEW FOR RTE-III ******************** LDA KEYAD SAVE KEYWORD CMA OFFSET FOR ADA CURAK LATER ACCESS TO ID-SEG. STA ID8,I (TEMP SAVE) ************************************************************** LDB N6 JSB ZOUT OUTPUT ZEROES TO ID SEGMENT LDA CUPRI GET THE CURRENT PRIORITY JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA PRENT GET PRIMARY ENTRY POINT JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDB N2 JSB ZOUT OUTPUT ZEROES TO ID SEGMENT LDA SCH3 GET ADDRESS OF CURRENT ID SEG INA STEP TO PRAM LIST JSB OUTID OUTPUT B REG TO ID SEGMENT  CLA SEND E/O REGS TO JSB OUTID THE ID SEGMENT LDA ID1,I GET NAME 1,2 JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA ID2,I GET NAME 3,4 JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA ID6,I GET TYPE AND M7 ISOLATE TYPE STA B SAVE TYPE IN B LDA ID3,I GET NAME 5 AND M7400 ISOLATE NAME 5 IOR B ADD TYPE TO NAME 5 JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER CLA PRESET FOR DORMANT CCB ADB TIDNT IF THIS PGM TO BE CPB SCH1 SCHEDULED CLA,INA SET SCHEDULED FLAG JSB OUTID SET WORD IN ID CLA SET TIME LINK JSB OUTID TO ZERO AND OUTPUT LDA MULR GET RESOLUTION CODE, EXEC MULT JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA TTIME GET LOW PART OF TIME JSB OUTID OUTPUT LS TO ID SEG LDA TIME1 GET HIGH HALF JSB OUTID OUT MS HALF TO ID SEG LDB N2 ZEROS TO JSB ZOUT ID SEG 21 AND 22 ISZ PLFLG SKIP - PUTOUT LONG ID SEGMENT JMP GENID,I RETURN - SHORT ID SEGMENT * LDA PPREL GET CURRENT PROG RELOC ADDRESS ADA BSSDP ADD INITIAL PROG DISPLACEMENT IFZ **** BEGIN DMS CODE **** LDB ID1,I LOOK FOR FMGR ID-SEG CPB "FM" RSS JMP WRD23 LDB ID2,I CPB "GR" RSS JMP WRD23 STA B SAVE A-REG LDA ID3,I AND M1774 ISOLATE UPPER HALF SWP RESORE A-REG CPB LBLNK RSS JMP WRD23 * STA MEM12 LATER USED TO SET BKDRA ADA M1 STA MEM6 " " " " RTDRA STA SYMAD " " " " AVMEM INA RESTORE ***** END DMS CODE ***** XIF WRD23 JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA TPREL GET CURRENT RELOCATION ADDRESS CMA,INA ; CHECK ADA LWASM MEMORY OVERFLOW SSA,INA,SZA OK IF POS OR -1 JMP ER18 YES GO SEND THE BITCH * LDA TPREL NO SEND THE UPPER LIMIT GENI9 JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA PBREL GET LOW BP RELOCATION ADDR JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA TBREL GET HIGH BP RELOCATION ADDR JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER LDA DSKMN GET INITIAL MAIN DISK ADDRESS JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER CLA JSB OUTID OUTPUT WORD TO ID SEGMENT BUFFER JMP GENID,I RETURN - ID SEGMENT OUT * SPC 1 ER18 LDA ERR18 SEND ERROR 18 JSB GN.ER MEMORY OVERFLOW LDA LWASM USE LAST WORD OF MEMORY INSTEAD JMP GENI9 GO FINISH THE ID-SEGMENT * ERR18 ASC 1,18 IFZ **** BEGIN DMS CODE **** "FM" ASC 1,FM "GR" ASC 1,GR LBLNK OCT 020000 M1774 OCT 177400 ***** END DMS CODE ***** XIF SKP * * OUTPUT ZERO TO IDBUF * * ZOUT PUTS OUT ZEROES TO THE ID SEGMENT BUFFER. * * CALLING SEQUENCE: * A = IGNORED * B = NO. OF ZEROES TO GO OUT (NEG.). * JSB ZOUT * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * ZOUT NOP STB TCNT SAVE NO. OF ZEROES TO GO OUT CLA JSB OUTID OUTPUT ZERO TO IDBUF ISZ TCNT SKIP - ALL ZEROES OUT JMP *-3 CONTINUE ZERO OUTPUT TO IBUF JMP ZOUT,I RETURN SPC 2 GNSID NOP GENERATE SHORT SEGMENT ID-SEGMENTS STA PLFLG SAVE THE FLAG LDB SKEYA GET THE KEYWORD LDA SISDA ADDRESS AND ITS CONTENTS JSB LABDO SEND THE KEY WORD TO THE DISC STB SKEYA SET THE NEW KEYWORD ADDRESS LDB SISDA GET THE ID- ADDRESS ADB P9 ADDJUST FOR NEXT TIME STB SISDA AND SAVE ADB P2 ADDJUST FOR ADDRESS OF CURRENT ID LDA PLFLG THIS A CPA N2 BLANK SHORTY? JMP BLSID YES GO DO BLANK THING * LDA PRENT NO GET THE PRYMARY ENTRY POINT JSB LABDO SEND IT TO THE DISC LDA IMAIN GET THE IDENT INDEX STA TIDNT TO CURRENT JSB IDX JSB ABORT BETTER BE ONE LDA ID1,I GET NAME 1,2 JSB LABDO SEND TO THE DISC LDA ID2,I GET NAME 3,4 JSB LABDO SEND IT LDA ID3,I GET NAME 5 AND M7400 MASK IOR P21 SET TYPE AND SHORT FLAG JSB LABDO SEND IT TO THE DISC LDA BSPAD GET THE MEMORY ADDRESS ADA BSSDP ADDJUST FOR LEADING BSS JSB LABDO SEND MAIN 1 LDA TPREL GET AND CMA,INA CHECK FOR MAIN MEMORY ADA LWASM OVER FLOW SSA,INA,SZA IF OVER FLOW JMP BLSI3 GO REPORT IT * LDA TPREL OK SO PUT IT OUT BLSI0 JSB LABDO SEND MAIN 2 LDA BSBAD GET AND JSB LABDO SEND BP 1 LDA TBREL GET AND JSB LABDO SEND BP 2 LDA DSKMN GET DISC ADDRESS BLSI2 JSB LABDO JMP GNSID,I RETURN * BLSID ADB P3 FOR BLANK LDA P16 SET THE SHORT BIT ONLY JMP BLSI2 GO SEND IT. * BLSI3 LDA ERR18 SEND ERROR MESSAGE STB SIDS2 SAVE POINTER TO ID SEG JSB GN.ER LDB SIDS2 LDA LWASM USE LAST WORD OF MEMORY INSTEAD JMP BLSI0 GO FINISH THE ID-SEGMENT * SIDS2 BSS 1 SKP * * OUTPUT ID SEGMENT WORD TO IBUF * * OUTID PACKS THE WORDS FOR THE ID SEGMENTS IN THE ID SEGMENT * BUFFER AND WRITES THE BUFFER ON THE DISK WHEN IT CONTAINS * 64 WORDS. * * CALLING SEQUENCE: * A = CURRENT ID SEGMENT WORD * B = IGNORED * JSB OUTID * * RETURN: CONTENTS OF A AND B ARE DESTROYED * OUTID NOP LDB CURAI GET THE CURRENT ID-SEGMENT ADDRESS JSB LABDO SEND THE WORD TO THE DISC STB CURAI SET THE ADDRESS FOR NEXT TIME JMP OUTID,I RETURN SKP * * OUTPUT REST (IF ANY) OF ABS. REC * * REMDO PUTS OUT THE CURRENT SECTOR IF IT CONTAINS ANY WORDS OF * ABSOLUTE CODE. THIS IS NORMALLY DONE ONLY AT THE END OF THE GEN * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB REMDO * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * REMDO NOP LDA OLDDA GET THE CURRENT DISC ADDRESS LDB ADBUF AND THE BUFFER ADDRESS SSA IF A GOOD ADDRESS JSB DISKO OUTPUT THE CODE JSB BPDSA UPDATE THE DISC ADDRESS JMP REMDO,I RETURN SPC 3 * BPDSA ADVANCES THE DISK ADDRESS TO THE NEXT EVEN * DISC ADDRESS ASSUMING THE CURRENT DISC ADDRESS * IS NOT AVAILABLE. THIS IS NORMALLY DONE * AFTER EACH MAIN IS LOADED AND BEFORE THE BASE * PAGE IS OUTPUT. * * CALLING SEQUENCE: * * JSB BPDSA DOES NOT USE A/B RETURNS A=CURRENT DISC ADDRESS * BPDSA NOP LDA DSKAD BUMP JSB DISKA THE DISC ADDRESS STA DSKAD AND RESET IT JSB DSKEV MAKE SURE IT IS EVEN JMP BPDSA,I RETURN SKP * CHBND IS A ROUTINE TO ASK THE OPERATOR IF HE WANTS TO CHANGE * A BOUNDRY, GET HIS ANSWER AND CHECK IT FOR LEGALITY. * THE MESSAGES SENT ARE: * * XXXXXXXXXX YYYYY AND * CHANGE XXXXXXXXXX? WHERE XXXXXXXXXX IS A 10 CHARACTER * MESSAGE SUPPLIED AS PART OF THE CALL * AND YYYYY IS THE CURRENT BOUND IN OCTAL * OR DECIMAL. * LEGAL RESPONSES ARE: * * 0 NO CHANGE. * N WHERE N>YYYYY AND LESS THAN OR EQUAL TO * THE SUPPLIED LIMIT. * * CALLING SEQUENCE: * A = CURRENT YYYYY A > 0 MEANS OCTAL * JSB CHBND A < 0 MEANS DECIMAL(ONE'S COMPLEMENT) * DEF ADDRESS OF XXXXXXXXXX (5 WORD MESSAGE) * DEF UPPER LIMIT OF RESPONSE * * RETURN (ALWAYS P+3) A = NEW BOUND. * CHBND NOP STA CBFLG SAVE DECIMAL FLAG SSA SKIP IF OCTAL REQUEST,ELSE INA MAKE DEC, REQUEST 2'S COMPLMNT STA TMPX SAVE DEFAULT VALUE LDB CHBND,I GET THE MESSAGE ADDRESS AND STB TMPL SET UP TO MOVE LDA N5 FIVE WORDS STA GN.ER TO FORM THE MESSAGE: LDB DMES " CHANGE XXXXXXXXXX YYYYY" CHNX LDA TMPL,I MOVE STA B,I 5 INB WORDS ISZ TMPL TO ISZ GN.ER THE JMP CHNX MESSAGE * ISZ CHBND INDEX TO THE UPPER LIMIT STB TMPL SAVE THE ADDRESS FOR RETRY IN CASE CHOVR LDB TMPL OF ERROR LDA TMPX CONVERT THE NUMBER JSB CONVD TO THE BUFFER JSB SPACE SEND A SPACE LDB DMES GET THE ADDRESS LDA P16 AND SEND MESSAGE JSB DRKEY "XXXXXXXXXX YYYYY" TO THE TTY LDA "?" PUT A "?" AFTER THE XXXXXXXXXX STA ME11S SET IT LDA P19 SEND MESSAGE AND GET LDB ADMES RESPONSE FOR JSB READ " CHANGE XXXXXXXXXX?" LDA P5 CONVERT RESPONSE LDB CBFLG LOAD FLAG SSB DECIMAL REQUEST?? CMA,INA YES, ASK GETOC FOR DECIMAL JSB GETOC GET BINARY EQUIVALENT JMP CBERR ERROR - REPEAT * JSB GETAL END OF BUFFER? SZA,RSS JMP CHOK YES OK- * CBERR LDA ERR14 SEND ERROR 14 JSB GN.ER JMP CHOVR AND REPEAT * CHOK LDA OCTNO GET VALUE SZA,RSS IF ZERO USE LDA TMPX SUPPLIED VALUE LDB TMPX GET -ABS VALUE SSB,RSS OF UPPER LIMIT. CMB,INB SSA GET ABS VALUE OF CMA,INA CURRENT TOO. ADB A IF LIMIT LESS THAN SSB CURRENT THEN JMP CBERR ERROR * LDB CHBND,I GET UPPER BOUND LDB B,I TO B CMB IF GREATER THAN ADB A i MAX SSB,RSS THEN JMP CBERR ERROR * ISZ CHBND ELSE EXIT JMP CHBND,I RETURN VALUE IN A SPC 2 ERR14 ASC 1,14 BG BOUNDARY ERROR CBFLG BSS 1 DECIMAL/OCTAL FLAG TMPX NOP TMPL NOP DMES DEF .XXX ADMES DEF *+1 ASC 4, CHANGE .XXX BSS 5 ME11S NOP BSS 3 "?" ASC 1,? P19 DEC 19 SKP IFZ **** BEGIN DMS CODE **** * * ALIGN - PRINT CURRENT BOUNDARY THEN ASK USER * IF HE WANTS TO ALIGN AT A PAGE BOUNDARY * * FORM OF MESSAGE: XXXXX * ALIGN AT NEXT PAGE? * * CALLING SEQUENCE: * LDA XXXXX (BINARY...A<0 MEANS DECIMAL) * LDB ADDR TO INSERT XXXXX IN * JSB ALIGN * DEF * * NOTE: IS CHARACTER LENGTH FOLLOWED * BY ASCII TEXT. * * RETURN: AT N+2 * B IS DESTROYED * A IS OLD OR UPDATED VALUE OF XXXXX. * SPC 1 ALIGN NOP STA ATMP1 SAVE ORIGINAL BOUND STB ATMP2 AND SPOT IN MESSAGE BUFF JSB SPACE SKIP A LINE JSB APRNT AND PRINT OLD BOUNDARY. ALIG1 LDB MSAL. LDA P19 SEND ALIGN QUESTION JSB READ AND READ ANSWER. JSB YE/NO JMP ALIG1 REPEAT QUERY IF BAD RESPONSE. JMP ALNO JUMP IF HE SAID NO. SPC 1 * USER SAID ALIGN SPC 1 LDA ATMP1 PICK UP ORIG BOUNDARY, IOR M1777 ROUND TO PAGE END, STA ATMP1 AND SAVE, LDB ATMP2 THEN GO PRINT NEW JSB APRNT BOUNDARY. SPC 1 * USER SAID DON'T ALIGN SPC 1 ALNO LDA ATMP1 PASS BACK BOUNDARY ISZ ALIGN AND RETURN JMP ALIGN,I TO CALLER. SPC 1 * SEND MESSAGE ROUTINE SPC 1 APRNT NOP LDA ATMP1 PICK UP XXXXX IN BINARY LDB ATMP2 AND ADDR FOR INSERT,  JSB CONVD STUFF XXXXX IN MSG LDB ALIGN,I POINT TO MESSAGE, LDA B,I GET LEN TO A, INB AND TEXT ADDR TO A, JSB DRKEY AND PRINT IT JMP APRNT,I RETURN SPC 2 ATMP1 BSS 1 ATMP2 BSS 1 SPC 1 MSAL. DEF *+1 ASC 10,ALIGN AT NEXT PAGE? M1777 OCT 1777 SPC 1 MSMR DEC 32 ASC 16,LWA MEM RESIDENT PROG AREA XXXXX MSMRX DEF MSMR+14 SPC 1 MSBG DEC 20 ASC 10,LWA BG COMMON XXXXX MSBGX DEF MSBG+8 SPC 1 ***** END DMS CODE ***** XIF SKP * THIS ROUTINE IS CALLED AFTER THE SYSTEM IS LOADED BUT BEFORE THE * LIBRARY. SPC 1 * CLEAR LOAD FLAGS FOR TYPE 6 PGMS * CLRT6 NOP * SET LIBRARY RESIDENT FLAGS JSB INIDX INITIALIZE IDX SETLX JSB IDX SET IDENT ADDRESSES JMP CLRT6,I END OF IDENTS LDA ID6,I GET TYPE AND M177 ISOLATE TYPE CPA P14 IF FOURCED CORE RES. RSS PROCESS CPA P6 TYPE = LIBRARY? RSS YES - CONTINUE JMP SETLX PROCESS NEXT IDENT * LDA ID3,I TYPE = 6 - GET LOAD FLAG RAR,CLE,ELA LOAD BIT TO E - AND CLEARED STA ID3,I RESET CLEARED FLAG SEZ,RSS WAS IT LOADED? JMP SETLX NO - CONTINUE LDA ERR39 YES - ILLEGAL SYSTEM REFERENCE JSB GN.ER GN.ER 39 LDA P5 NOW SEND THE NAME LDB ID1 OF THE CALLED PGM JSB DRKEY SPC 1 JSB INLST INITIALIZE LSTX SETUX JSB LSTX SET CURRENT LST ADDRESSES JMP SETLX END - CONTINUE ID SCAN CCA ADA TIDNT GET IDENT ADDRESS CPA .LST4,I ENT BELONGS TO CURRENT PROG? CLA,RSS YES - CONTINUE JMP SETUX NO - TRY NEXT ENT STA .LST5,I SET LINK TO ZERO. JMP SETUX CONTINUE SEARCH SPC 2 * DEMOTES UNCALLED TYPE 6 PHFBROGRAMS TO TYPE 7 * DEMTL NOP DEMOTE UNCALLED TYPE 6 TO TYPE 7 LDA P10 SET UP THE SCAN STA CIDNT PARAMETERS LDA P6 FOR TYPE 6 STA PTYPE SCAN DEMS JSB IDSCN GO SET ID ADDRESSES JMP DEMTL,I END - SO RETURN LDB ID3,I WAS PGM SLB,RSS LOADED? ISZ ID6,I NO; CHANGE TO TYPE 7. JMP DEMS YES/NO CONTINUE SCAN * ERR39 ASC 1,39 * * END LABS HASMB,N,R,L,C HED RTGN4 - LOADER SEGMENT. IFN ASSEMBLY OPTION "N" FOR RTE-II NAM RT2G4,5,90 92001-16031 REV.1826 780508 XIF IFZ ASSEMBLY OPTION "Z" FOR RTE-III NAM RT3G4,5,90 92060-16037 REV.1826 780508 XIF SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ****************************************************** * * NAME: RT2G4/RT3G4 * SOURCE PART #: 92001-18031/92060-18037 * REL PART #: 92001-16031/92060-16037 * WRITTEN BY: KFH, JH, GAA * ****************************************************** SPC 1 * * ENTRY POINT NAMES * ENT NLOAD,LODER * * EXTERNAL REFERENCE NAMES * EXT INLST,LSTX,LSTS,TLST EXT .NM. EXT .LST1,.LST2,.LST3,.LST4,.LST5 EXT INIDX,IDX,TIDNT EXT ID1,ID2,ID3,ID4,ID5,ID6,ID7 EXT FIXX,FIX,PFIX,TFIX EXT FIX1,FIX2,FIX3,FIX4 EXT LNKX,LNK,LNKS EXT LNK1,LNK2,LNK3 EXT FMRR,CHFIL * EXT CPLIM,ADBP,EOBP,LWSBP,#IREG EXT LBUF,TBUF,CURAL,CPL2,PPREL EXT $RNT,$PRV EXT CONVD,SPACE,RDBIN,DRKEY,GN.ER,ABORT EXT LABDO,SWRET EXT OPEN,READF,CLOSE,NMDCB,RDNAM EXT PTYPE,DSKAD,ABCOR,MXABC,TTIME,MULR * A EQU 0 B EQU 1 SUP ************************************************************************ * SKP * THE FOLLOWING BLOCK OF STORAGE FOR VARIABLES PRECEEDS, * AND IS REFERENCED BY, EACH SEGMENT. IT IS NOT OVERLAID * AS EACH NEW SEGMENT IS LOADED INTO CORE. * * THE LOCATION OF EACH VARIABLE MUST BE THE SAME IN * ALL SEGMENTS. IF A CHANGE IS MADE, MAKE THE SAME * CHANGE IN THE REST OF THE SEGMENTS. * * * SYSCH BSS 1 SUBCHANNEL OF SYSTEM UNIT. AUXCH BSS 1 SUBCHANNEL OF AUX UNIT. DSIZE BSS 1 DISK SIZE -NO. OF TRACKS. DAUXN BSS 1 AUXILIARY DISK SIZE. ADS# BSS 1 AUX DISC SECTORS/TRACK. * * RELOCATION BASE TABLE. RBTA BSS 1 ABSOLUTE PROGRAM BASE. TPREL BSS 1 CURRENT PROGRAM BASE ADDRESS. TPBRE BSS 1 BASE PAGE RELOCATION ADDRESS. COMAD BSS 1 CURRENT COMMON RELOCATION BASE. BSS 1 ABS PROGRAM BASE FOR MR CODE. * WDCNT BSS 1 TEMPORARY WORD COUNTER. DSKSY BSS 1 INITIAL ID SEGMENT DISK ADDRESS IDSP BSS 1 POSITION OF 1ST ID SEG. IN SECT TTYCH BSS 1 SYSTEM TTY CHANNEL NO. * PLFLG BSS 1 PROGRAM LOAD. FLAG = -1/0 = L/NL DSCNT BSS 1 DISK SEGMENT SECTOR COUNT * NXFLG BSS 1 ENT/EXT FLAG = -1/0 EXCNT BSS 1 SYMBOL COUNTER * LCNT BSS 1 CURRENT LBUF COUNT DCNT BSS 1 CURRENT DBUF COUNT CURAI BSS 1 CURRENT IBUF COUNT * CPLS BSS 1 ADDRESS OF TOP OF FIXED CP LINK IMAGE CPL1 BSS 1 ADDRESS OF LOW CURRENT PAGE LINK SPECS. CPL1H BSS 1 NUMBER OF CURRENT PAGE LINKS ASSIGNED CPL2H BSS 1 IN LOW AND HIGH AREA RESPECTIVELY URBP1 BSS 1 LWA R/T DISC RES BP LINK AREA BPMAX BSS 1 MAX USED BASE PAGE LINKAGE +1 CURAK BSS 1 CURRENT KBUF ADDRESS * CURAT BSS 1 CURRENT TBUF ADDRESS TCNT BSS 1 CURRENT TBUF COUNT * CURAP BSS 1 CURRENT PLIST ADDRESS * AMAD BSS 1 CURRENT MLIST ADDRESS * LICNT BSS 1 LONG ID SEGMENT COUNT SICNT BSS 1 SHORT ID SEGMENT COUNT SSCNT BSS 1 BG. SEG ID COUNT COMRT BSS 1 MAXIMUM RT COM LENGTH COMBG BSS 1 MAX BG COM LENGTH * DSKEY BSS 1 CURRENT KEYWORD DISK ADDRESS DSKID BSS 1 DISK ID SEGMENT ADDRESS KEYCN BSS 1 =? TOTAL KEYWORD COUNT KEYCT BSS 1 CURRENT KEYWORD COUNT * MLIST BSS 11 MEMORY MAP BUFFER * TEMP1 BSS 1 TEMP2 BSS 1 LWH1 BSS 1 LWH2 BSS 1 LWH3 BSS 1 LWH4 BSS 1 L01 BSS 1 * FSYBP BSS 1 FIRST WORD SYS BP LINKAGE SYSAD BSS 1 CURRENT ID SEGMENT ADDRESS * TBREL BSS 1 CURRENT BP RELOC ADDR PBREL BSS 1 INITIAL BP RELOC ADDR * RELAD BSS 1 CURRENT CORE RELOCATION ADDRESS * BSBAD BSS 1 BG SEGMENT BP RELOC ADDR BSPAD BSS 1 BG SEGMENT PROG RELOC ADDR * LFLAG BSS 1 PROGRAMS-LOADED FLAG IMAIN BSS 1 CURRENT MAIN IDENT INDEX. HDFLG BSS 1 HEADING FORMAT FLAG CIDNT BSS 1 CURRENT MAIN IDENT INDEX. * AEQT BSS 1 ADDRESS OF EQUIPMENT TABLE CEQT BSS 1 NO. ENTRIES IN EQUIPMENT TABLE * ASQT BSS 1 ADDR OF DEVICE REFERENCE TABLE CSQT BSS 1 NO. ENTRIES IN DEV. REF. TABLE * AINT BSS 1 ADDRESS OF INTERRUPT TABLE CINT BSS 1 NO. ENTRIES IN INTERRUPT TABLE * DSKIN BSS 1 DISK ADDR OF INT CODE RECORD INTCN BSS 1 RECORD COUNT OF INT CODE * CURIL BSS 1 CURRENT ILIST ADDRESS ILIST BSS 64 USER SYSTEM PROG IDENT ADDR LIST * IDSAV BSS 1 INDEX OF CURRENT IDENT. DSKMN BSS 1 INITIAL MAIN DISK ADDRESS BSSDP BSS 1 INITIAL DISK RES MAIN BSS DISP PRENT BSS 1 PRIMARY ENTRY POINT DBLAD BSS 1 CURRENT DBL ADDRESS REKEY BSS 1 INSTRUCTION TYPE BYTE INSCN BSS 1 INSTRUCTION TYPE COUNTER INSTR BSS 1 CURRENT INSTRUCTION PAGNO BSS 1 CURRENT PAGE NO. OPRND BSS 1 CURRENT OPERAND PLGTH BSS 1 PROGRAM LENGTH DRT2 BSS 1 DISK DRT ENTRY ( SYSTEM) DRT3 BSS 1 AUX DISK DRT ENTRY LIBFG BSS 1 LDTYP BSS 1 SCH1 BSS 1 INDEX OF IDENT OF PGM TO BE SCHEDULED SCH3 BSS 1 ADDRESS OF CURRENT ID SEGMENT SCH4 BSS 1 ADDRESS OF THE SCHEDULED PGM ID SEG FGBGC BSS 1 v BACKGROUND USING FG COMMON FLAG $LIBR BSS 1 INDEX OF $LIBR ENT $LIBX BSS 1 INDEX OF $LIBX ENT CUPRI BSS 1 * MEM1 BSS 1 MEM2 BSS 1 MEM3 BSS 1 MEM4 BSS 1 MEM5 BSS 1 MEM6 BSS 1 MEM7 BSS 1 MEM8 BSS 1 MEM9 BSS 1 MEM10 BSS 1 MEM11 BSS 1 MEM12 BSS 1 * IFZ ***** BEGIN MEU CODE ***** COMSZ BSS 1 #WORDS COMMON DECLARED FOR * CURRENT MAIN LPCOM BSS 1 LAST PAGE CONTAINING ANY COMMON FPSAM BSS 1 1ST PAGE CONTAINING S.A.M. FWSAM BSS 1 1ST WORD CONTAINING S.A.M. LPSYS BSS 1 LAST PAGE CONTAINING SYS OR LIB FPDSK BSS 1 1ST PAGE DISK PART AREA LOLNK BSS 1 LOW LINK FOR SSGA,LIB, OR SYS HILNK BSS 1 HI LINK USED BY MEM RES PRG BPINC BSS 1 CURR DIRECTION FOR BP LINK * ALLOCATION. +1=UP,-1=DOWN BPLMT BSS 1 WORD AFTER LAST WORD AVAIL * FOR BP LINK ALLOCATION TPMAX BSS 1 HWM FOR RELOCATION OF BG * MAINS AND SEGS MAXPT BSS 1 NUM PARTS. ALLOWED MAT. BSS 1 ADR OF LENGTH WORD * BEFORE MEM ALLOC TABLE (MAT) SSGA. BSS 1 FWA SSGA (LAST WORD SYS * OR LIB +1) FWMRP BSS 1 FWA MEM RES PROG AREA * (NEXT WORD AFTER COMMONS) MAP. BSS 1 PTR TO MEU RES MAP MPFT. BSS 1 PTR TO MPFT ****** END MEU CODE ****** XIF * SECTR BSS 0 BOOTSTRAP BUFFER FORMAT * LBPSY BSS 1 LOWER SYSTEM BP ADDRESS UBPSY BSS 1 UPPER SYSTEM BP ADDRESS DSKBP BSS 1 SYS BP DISK ADDRESS * LRMAN BSS 1 MAIN RESIDENT LOWER ADDRESS URMAN BSS 1 MAIN RESIDENT UPPER ADDRESS DSKRR BSS 1 MAIN RESIDENT DISK ADDRESS * LBMAN BSS 1 MAIN BG LOWER ADDRESS UBMAN BSS 1 MAIN BG UPPER ADDRESS DSKBG BSS 1 MAIN BAC5KGROUND DISK ADDRESS * SYMAD BSS 1 AVAIL SYS MEM ADDR BGBND BSS 1 BACKGROUND BOUNDARY * DSKAV BSS 1 NEXT AVAILABLE DISK ADDRESS DSKLC BSS 1 DISK ADDRESS OF LIBRARY CODE DSKLB BSS 1 DISK ADDR OF LIBRARY ENTRY PTS DSKUT BSS 1 UTILITY PROG DISK ADDRESS DSKBS BSS 1 DISK ADDR OF MAIN BG DISK RES BP DSKBR BSS 1 CURRENT MAIN BG DISK RES DISK AD ADICT BSS 1 ADDR OF DISK DICTIONARY LBCNT BSS 1 RESIDENT LIBR ENTRY PT COUNT UTCNT BSS 1 UTILITY LIBRARY COUNT KEYAD BSS 1 CURRENT KEYWORD ADDRESS RTCAD BSS 1 RT COM CORE ADDRESS LBCAD BSS 1 LIBRARY CODE ADDRESS SYBAD BSS 1 ADDR OF FIRST BP LINK FOR BG IDSAD BSS 1 ADDR OF FIRST ID SEGMENT ABSID BSS 1 IDENT ADDR FOR NEXT BG SEG SCAN MAXRP BSS 1 MAXIMUM RT DISK RESIDENT PROG MAXRB BSS 1 MAXIMUM RT DISK RESIDENT BP IDMBS BSS 1 BG MAIN ADDRESS FOR BS REF * TB30 BSS 128 TRACK MAP TABLE #SUBC BSS 1 # SUBCHANNELS DEFINED(7905) SPC 2 ********************************************************* * * * END OF COMMON STORAGE BLOCK FOR ALL SEGMENTS. * * * ********************************************************* SPC 2 MRTAD DEF TPREL RBTAD DEF RBTA AMLST DEF MLIST AMEM5 DEF MLIST+5 AMEM8 DEF MLIST+8 SKP * * PROGRAM CONSTANT FACTORS N1 DEC -1 N3 DEC -3 N5 DEC -5 N8 DEC -8 N11 DEC -11 NDAY OCT 177574,025000 P1 DEC 1 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P11 DEC 11 P12 DEC 12 P13 DEC 13 P14 DEC 14 P15 DEC 15 P16 DEC 16 P60 DEC 60 P99 DEC 99 P100 DEC 100 P6K DEC 6000 M7 EQU P7 M17 EQU P15 M20 EQU P16 M1760 OCT 176000 M1777 OCT 1777 M7400 OCT 177400 * BLANK OCT 040 BLANK MSIGN OCT 100000 NEGATIVE SIGN SKP LODR NOP * * NOTE THE FOLLOWING RESOLVES ARITHMETIC DEF'S TO EXTERNALS * LDA N GET LOOP COUNTER STA TEMP1 SAVE IN TEMP LOCATION LDB LSTAA GET ADDRESS OF WHERE LIST ROUTINE LOCATED LOOP LDA B,I HERE WE CHASE DOWN OUR OWN RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 STA B,I AND SAVE IT AGAIN INB ISZ TEMP1 DONE? JMP LOOP NO JMP SWRET RETURN TO MAIN FOR CALL * TO NLOAD OR LODER. * SPC 1 N DEC -3 LSTAA DEF *+1 ATBUF DEF TBUF LBUF5 DEF LBUF+5 ALBUF DEF LBUF SKP SKP * * INITIATE MAIN PROGRAM LOADING * * NLOAD IS THE SUBROUTINE FOR ENTRY TO LODER FOR THOSE * PROGRAMS WHICH REQUIRE USE OF A NEW BP AND PROGRAM BASE. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB LOAD (FROM ANOTHER SEGMENT) * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * NLOAD NOP (WAS "LOAD") IFZ **** BEGIN MEU CODE **** * INDICATE VALIDITY OF SSGA REFERENCES SPC 1 LDA ID6,I TYPE AND M20 LOOK AT SSGA BIT STA SSGAF SET SSGA FLAG (0=NO SSGA USE) ****** END MEU CODE ****** XIF CCB STB HDFLG SET HEADING FLAG LDA ID6,I GET TYPE AGAIN AND M7 JUST PRIMARY BITS LDB PPREL PICK UP BASE ADDR CPA P2 AND IF PROG IS DISK RESIDENT RSS CPA P3 (EITHER RT OR BG) ADB #IREG BUMP BY ENOUGH FOR * INDEX REG STORAGE STB TPREL LDA PBREL GET BP RELOCATION ADDRESS STA TBREL SET CURRENT BP RELOC ADDRESS JSB LODER LOAD PROGRAM LDA LIBFG IF NOT LIB LOAD SZA,RSS THEN JSB SPACE NEW LINE JMP NLOAD,I RETURN IFZ **** BEGIN MEU CODE **** bSSGAF BSS 1 ***** END MEU CODE ***** XIF SKP * * LOAD, LINK MAIN PROG & SUBS. * * LODER IS THE MAIN LOADING SUBROUTINE FOR GENERATING THE ABSOLUTE * CODE AND LINKING ALL CALLED SUBROUTINES. IT IS USED BY EACH * PROGRAM TYPE FOR LOADING. IT READS THE RELOCATABLE RECORDS FROM * THE DESIGNATED FILE, AND WRITES THE ABSOLUTE CODE * INTO THE CORE-IMAGE OUTPUT FILE. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB LOADS (FROM ANOTHER SEGMENT) * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * LODER NOP (WAS "LOADS") JSB SFIX SET UP A FIX UP ENTRY CCA STA PLFLG SET FLAG = NO DBL RECS IN * LOADN LDA TPREL CLEAR THE CP LINK IMAGE JSB CCPLK AREA LDA TPREL SAVE FOR RESET STA LWH4 FOR NEXT PASS LDA TBREL STA LWH3 CLA LOADX STA L01 0 IF 1/2 PASSES, -1 IF 1/1 PASS, 1 IF 2/2 PASSES * LDA LWH3 BP LINK LDB TBREL ADDRESSES JSB CLRLT LDA LWH3 STA TBREL RESTORE TBREL JSB CLIST BLANK MEMORY MAP BUFFER CLA CLEAR THE LIBRARY TRAP STA ADTRP WORDS STA LIBTP LDA AMLST AMLST = ADDR OF MEM MAP BUFFER STA AMAD SET CURRENT MEMORY MAP ADDRESS LDA HDFLG GET HEADING FORMAT FLAG STA TEMP2 SSA,RSS SKIP IF NEGATIVE (MAIN) ISZ AMAD INCR CURRENT MEM MAP ADDR LDA ID1,I GET NAME 1,2 STA AMAD,I SET NAME 1,2 IN MEMORY MAP ISZ AMAD INCR CURRENT MEMORY MAP ADDRESS LDA ID2,I GET NAME 3 4 STA AMAD,I SET NAME 3,4 IN MEMORY MAP ISZ AMAD INCR CURRENT MEMORY MAP ADDRESS LDA ID3,I GET NAME 5 AND M7400 ISOLATE UPPER CHAR IOR BLANK ADD BLANK (OCT 40) STA AMAD,I SET NAME 5 IN MEMORY MAP LDA ID6,I PICK UP TYPE AND M7 MASK TO ACTUAL TYPE.  STA LDTYP * * READ NAM RECORD. * LDA ALBUF READ NAM RECORD FROM FILE. STA CURAL CCB JSB RDNAM JSB ABORT ERROR ON READ. SZA,RSS JSB ABORT END OF FILE. CMA,INA SET COUNT WORD. STA LCNT * LDA ID5,I CHECK IF NAM RECORD HAS RAL A MODIFIED VERSION. SSA,RSS JMP LOADC NO. * JSB OPEN YES. SEARCH NEW NAM FILE DEF *+4 FOR REPLACEMENT RECORD. DEF NMDCB DEF FMRR DEF .NM. FILE NAME = "@.NM.@" * JSB CHFIL JSB ABORT * CREAD JSB READF DEF *+6 DEF NMDCB DEF FMRR DEF LBUF DEF P60 DEF LEN * JSB CHFIL JSB ABORT * LDA LEN BETTER BE THERE! CPA N1 JSB ABORT * LDB ALBUF COMPARE NAM IN LBUF ADB P3 LDA B,I AGAINST CPA ID1,I NAM IN IDENT. INB,RSS JMP CREAD NO MATCH. LDA B,I CPA ID2,I INB,RSS JMP CREAD NO MATCH. LDA B,I XOR ID3,I AND M7400 SZA JMP CREAD NO MATCH. * JSB CLOSE MATCH. DEF *+3 DEF NMDCB DEF FMRR * LOADC JSB ZLOAD LOADING? JMP LH7 NO * LDA L01 SZA 1ST PASS? JMP LH7 YES * ISZ TEMP2 NO - TEST TEMPORARY HDFLG JMP SUBHD * JMP LH8 * LPAR OCT 50 LEFT PAREN. * LH7 ISZ HDFLG TEST REAL THING JMP SUBHD SKIP PRIORITY OUTPUT FOR SUB * LH8 LDA ID6,I SET CURRENT LOAD TYPE AND M17 LOOK AT PRIMARY & REV BITS IFZ ***** BEGIN MEU CODE ***** CPA P5 DON'T CHANGE COMMON JMP COMOK FOR SEGMENTS (USE MAIN'S) LDB ID4,I THIS IS A MAIN STB COMSZ SET HIS COM SIZE AS LIMIT. ****** END MEU CODE ****** XIF + LDB BGBND GET BACKGROUND COMMON BOUND CPA P1 IF FORGROUND RSS CPA P2 RSS CPA P11 OR BACKGROUND USING FORGROUND COMMON IFN *** BEGIN NON-MEU CODE *** RSS CPA P12 RSS CPA P13 NO TYPE 13'S IN RTE-III **** END NON-MEU CODE **** XIF LDB RTCAD USE FORGROUND COMMON ADDRESS STB COMAD SET THE COMMON BASE ADDRESS COMOK LDA DSKAD GET CURRENT DISK ADDRESS LDB L01 SZB,RSS IF 1ST PASS, STA DSKMN SAVE INITIAL MAIN DISK ADDRESS LDA PTYPE IF FOURCED SUBROUTINE AND M17 OR SSGA ROUTINE CPA P14 LOAD JMP SUBHD SEND SUB HEAD MAP * LDA LPAR GET LEFT PAREN (OCT 50) IOR AMAD,I CHANGE NAME 5, BLANK TO NAME 5,( STA AMAD,I SET NAME 5, LEFT PAREN IN MAP LDA LBUF+10 GET PRIORITY FROM THE NAM RECORD SZA,RSS IF ZERO SET LDA P99 TO 99 SZB,RSS UNLESS SYSTEM WHICH CLA SET TO ZERO STA CUPRI SET FOR THE ID-SEG GENERATION CMA,INA SET TO NEGATIVE FOR DECIMAL CONV LDB ATBUF GET MESSAGE ADDRESS JSB CONVD CONVERT TO DECIMAL/OCTAL LDA TBUF+1 GET HIGH TWO CHARACTERS STA MLIST+3 SET IN MAP LDA TBUF+2 GET 2 LEAST SIGNIFICANT DIGITS STA MLIST+4 SET PRIORITY IN MEMORY MAP LDA LBUF+12 SET UP THE TIME PARAMETERS ASL 4 FIRST THE RESOLUTION LDB LBUF+11 AND MULTIPLE BLS ASR 4 COMBINE STA MULR SET FOR ID SEG GENERATOR LDA LBUF+15 GET THE SECONDS MPY P100 CONVERT TO 10'S OF MS. ADA LBUF+16 ADD 10'S OF MS. STA TEMP1 SAVE TEMP * LDA LBUF+13 GET THE HOURS MPY P60 CONVERT TO MIN. ADA LBUF+14 ADD MIN. MPY P6K CONVERT TO 10'MS CLE PREPARE FOR ADD ADA TEMP1 ADD 10'S MS. SEZ,CLE IF OVERFLOW INB STEP HIGH ORDER PART ADA NDAY+1 SUBTRACT ONE DAY OF 10'S MS. SEZ,CLE IF OVER FLOW INB STEP HIGH ORDER DIGIT ADB NDAY DST TTIME SAVE DOUBLE WORD TTIME FOR ID-SEG. * SUBHD LDA TPREL GET CURRENT PROG RELOC ADDR LDB AMEM5 SET B = ADDR OF MEMORY MAP + 5 JSB CONVD CONVERT TO DECIMAL/OCTAL LDA MLIST PUT A ")" IN THE CPA BLNKS HIGH PART OF THE JMP SUBH2 ADDRESS IF NOT A SUBHEAD * LDA MLIST+5 I.E. IF MAIN ADA B4400 CONVERT BLANK TO ) STA MLIST+5 RESTORE IT. SUBH2 LDA LBUF+1 GET RIC ALF,RAR ROTATE TO LOW A AND M7 ISOLATE RIC CPA P1 NAM RECORD? RSS YES - CONTINUE JSB ABORT INVALID DISK RECORD LDA LBUF+6 GET PROGRAM LENGTH STA PLGTH SAVE PROGRAM LENGTH RAL,CLE,ERA REMOVE POSSIBLE SIGN BIT ADA TPREL COMPUTE THE LAST WORD ADDRESS ADA N1 LDB AMEM8 AND JSB CONVD CONVERT TO THE MAP IFN *** BEGIN NON-MEU CODE *** LDA TBREL GET THE CURRENT BP ADDRESS STA TPBRE AND SET FOR BP CODE JSB ZLOAD IF THIS MODULE IS NOT BEING LOADED CLB,RSS THEN IGNORE ANY ORB'S FOR NOW LDB LBUF+7 ADVANCE LINK AREA ADB TBREL BEYOND THE PROGRAM STB A TEST FOR BP OVERFLOW ADA EOBP SUBTRACT LAST WORD +1 SSA,RSS IF NOT NEGATIVE JMP E16RR GO SEND MESSAGE **** END NON-MEU CODE **** XIF IFZ ***** BEGIN MEU CODE ***** * * SET RELOCATION BASE FOR ORB STUFF SPC 1 JSB ZLOAD IF THIS MODULE IS NOT BEING LOADED CLB,RSS THEN IGNORE ANY ORB'S FOR NOW LDB LBUF+7 GET SIZE OF BASE PAGE CODE LDA BPINC AND FIGURE OUT IF WE'RE GOING SSA UP OR DOWN IN BASE JMP SUBH3 PAGE.e SPC 1 LDA TBREL GOING UP, SET STA TPBRE ORB BASE AT TBREL ADB TBREL INCREMENT LINK BASE LDA BPLMT SUBTRACT LIMIT CMA,INA FROM ADA B NEXT ADDR TO CHECK FOR JMP SUBH4 BASE PAGE OVERFLOW. SPC 1 SUBH3 CMB,INB GOING DOWN...SUBTRACT ORB LENGTH ADB TBREL FROM LINK BASE INB ADD ONE STB TPBRE TO GET ORB BASE. ADB N1 GET NEXT AVAILABLE LINK ADDR. LDA B CMA,INA SUBTRACT NEW BASE FROM LIMIT ADA BPLMT TO CHECK FOR OVERFLOW. SPC 1 SUBH4 SSA,RSS IF LIMIT IS EXCEEDED, WE JMP E16RR HAVE AN ERROR. ****** END MEU CODE ****** XIF CONLD STB TBREL BASE PAGE LDA TPBRE JSB SETBP SET PROGRAM BASE PAGE IMAGE TO -1 LDA LBUF GET RECORD SIZE ALF,ALF LOW ORDER A STA LBUF SAVE IN RIGHT HALF JSB ZLOAD LOADING? JMP NOLD NO, SKIP * LDA L01 FIRST PASS? SZA,RSS NO, DO MAP JMP NOMP YES, NO MAP * ISZ LFLAG BUMP THE LOADED FLAG NOP IN CASE OF LEAP LDA ID5,I CHECK FOR "MAP MODULES". RAR SLA,RSS JMP NOMP NO. BIT 1 NOT SET. * LDB LBUF5 THE SIXTH WORD IN LBUF LDA N11 NUMBER OF WORDS STA TCNT TO MOVE TO LBUF LDA AMLST ADDRESS OF NAME BUFFER STA WDCNT SAVE FOR POINTER LH1 LDA WDCNT,I GET NAME WORD, AND ADDRESS STA B,I STORE IN LBUF INB BUMP B ISZ WDCNT BUMP NAME ADDRESS ISZ TCNT ALL DONE? JMP LH1 NO, DO MORE * LDA BLNKS GET TWO BLANKS STA B,I PUT THEM IN LBUF BEFORE THE COMMENTS LDA LBUF GET RECORD SIZE ADA N5 REDUCE TO MAP LENGTH ALS TIMES 2 FOR CHARACTER COUNT LDB LBUF5 ADDRESS OF MAP AND COMfHFBMENTS JSB DRKEY PRINT ALL * * THE FOLLOWING ROUTINES LINK A PROGRAM THROUGH CURRENT PAGE * LINKS WHEN POSSIBLE. THIS IS POSSIBLE WHEN THE LENGTH * OF THE PROGRAM IS KNOWN AND WHEN THE PROGRAM IS NOT AN * ASSEMBLED TYPE 3 OR 5 PROGRAM. SPC 3 2HNOMP EQU * IFZ ***** BEGIN MEU CODE ***** LDA ID4,I COMPARE CMA,INA THIS MODULE'S COMMON ADA COMSZ DECLARATION TO MAIN'S SSA,RSS ERROR IF GREATER. JMP NOM2 LDA ERR54 JSB ..GNR ****** END MEU CODE ****** XIF NOM2 LDA L01 1ST OF 2 PASSES? SSA JMP NOLD NO - 1 PASS ONLY * SZA,RSS IF PASS ONE JMP LH12 GO CHECK FOR OPTION SPC 1 LDA CPL1 PASS TWO SO SET UP THE NOW STA CPL2 KILL THE UPPER AREA JSB LNKS SET FOR DEFINING CODE JMP LH10 GO SET THE BOUNDRYS SPC 1 LH12 JSB GETCP SET UP A CURRENT PAGE LINK AREA STA CPL1 USE FOR BOTH CLA AREAS STA CPL1H CLEAR THE COUNT WORDS STA CPL2H LDB ID5,I DOES OPERATOR WANT CURRENT PAGE SSB LINKS IF POSSIBLE? IF YES - JMP LH222 GO SET UP * LH2 CCA JMP LOADX RESTART SPC 1 LH222 LDA PLGTH SSA,RSS NO CURRENT PAGE LINKS LDA LDTYP IF ASSEMBLED TYPE 3 OR 5 CPA P3 RSS CPA P5 JMP LH2 * LDA TPREL GET ADDR STA B OF LAST WD IOR M1777 OF PAGE SPC 1 CMB,INB COMPUTE # WDS INB REMAINING ADB A ON PAGE STB TEMP2 SPC 1 LDA PLGTH COMPUTE # WDS RAL,CLE,ERA OF PROGRAM CMB,INB THAT FALL ADB A BEYOND THIS STB TEMP1 PAGE SPC 1 SSB PROGRAM FIT ON RSS THIS PAGE? SZB,RSS NO - SKIP JMP NOLOW YES GO SET UP THE HIGH AREA SPC 1 LDA TEMP2 COMPUTE MINIMUM OF: ARS HALF # WDS OF PROG CMB,INB ON CURRENT PAGE-OR- ADB A # WDS OF PROG ON SSB,RSS NEXT PAGE SPC 1 LDA TEMP1 q DIVIDE THIS CLB MINIMUM BY DIV P4 FOUR SZA,RSS IF NON-ZERO, USE AS SIZE JMP NOLOW OF LOW CURRENT PG LINK BUFF RSS SPC 1 LH10 LDA CPL1H GET PASS ONE DEFINED LENGTH LDB LWH4 SET NEW STB LNK1,I LOWER LINK ADDRESS ADB A AND UPPER LIMIT STB TPREL OF LINK BUFFER STB LNK2,I (ALSO PROGRAM LOAD ADDRESS) JSB CLRCP CLEAR THE CURRENT PAGE IMAGE SPC 1 JSB GETCP GET ANOTHER CP LINK AREA LDA PLGTH GET PROGRAM LENGTH RAL,CLE,ERA STRIP POSSIBLE SIGN BIT ADA TPREL ADD THE BASE ADDRESS STA LNK1,I SET ORGION OF HIGH LINK AREA IOR M1777 TOP IS INA FIRST WORD OF STA LNK2,I NEXT PAGE JSB CLRCP GO CLEAR THE ALLOCATED AREA CLA CLEAR THE UPPER COUNT WORD STA CPL2H * NOLD LDB TPREL GET PROGRAM RELOCATION BASE STB RELAD SET CURRENT RELOCATION ADDRESS * * CLASSIFY ENT, EXT, DBL, END RECS * CCA FORCE FILE READ. STA LCNT JSB DBSET GET FIRST WORD IN RECORD. CLSRC LDA CURAL,I SAVE THE RECORD LENGTH FOR STA TBUF DBL SKIP ROUTINE JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDA CURAL,I GET SECOND WORD IN RECORD LDB A SAVE WORD IN B ALF,RAR ROTATE RIC TO LOW A AND M7 ISOLATE RIC CPA P2 ENT RECORD? JMP DENTR PROCESS ENT RECORD CPA P3 DBL RECORD? JMP DDBLR PROCESS DBL RECORD CPA P4 EXT RECORD? JMP DEXTR PROCESS EXT RECORD CPA P5 END RECORD? RSS YES - PROCESS END RECORD JSB ABORT INVALID DISK RECORD * JSB ZLOAD LOADING? JMP CLSTX NO * NOLOW LDA L01 IF FIRST OF SSA,INA IF NOT CURRENT PAGE LINKING JMP PEND JUST GO END spIT * CPA P1 IF PASS ONE JMP CPRST GO DO PASS TWO * * PASS TWO OUTPUT THE CP LINK AREAS AND UPDATE. * LDA CPL1 OUTPUT THE JSB OUTCP LOW AREA LDA CPL2 SET UP FOR THE JSB LNKS HIGH AREA LDA CPL2H GET THE NUMBER ALLOCATED ADA LNK1,I AND COMPUTE THE UPPER LIMIT STA LNK2,I SET THE ACTUAL VALUE LDA CPL2 NOW JSB OUTCP OUTPUT THE LINKS * PEND JSB DBSET GET ADDR OF NEXT WORD IN LBUF JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDA TPREL GET CURRENT PROG RELOCATION BASE ADA CURAL,I ADD RELOCATION ADDRESS LDB HDFLG GET HEADING FLAG SZB,RSS SKIP UNLESS MAIN STA PRENT SAVE PRIMARY ENTRY POINT FOR ID CLSTX JSB INLST INITIATE LSTX CLST JSB LSTX SET LST ADDRESSES JMP LSTCR END OF LST * LDA .LST3,I GET WORD 3 OF .LST (ORDINAL) AND M7400 ISOLATE UPPER CHAR - CLEAR ORD STA .LST3,I SET NAME 5 IN .LST JMP CLST CONTINUE CLEARING ORDINALS * LSTCR JSB ZLOAD WAS CURRENT PGM LOADED? JMP PLSCM NO SKIP ADDRESS UP DATE * LDA PLGTH GET PROGRAM LENGTH RAL,CLE,ERA SET E = SIGN ADA TPREL ADD PROGRAM RELOCATION BASE ADA CPL2H REFLECT ANY CURRENT PAGE LINKS STA TPREL ALLOCATED LDB ID5,I CHECK FOR "MAP LINKS" LDA TBREL CURRENT BP ADDRESS. RBR,RBR IF BIT 2 SLB IS SET JSB BPLNR REPORT THE BP LINKAGE PLSCM JSB INIDX SCAN THE PLSCN JSB IDX IDENTS FOR MODULES JMP CLFLG LEFT TO LOAD NONE SO GO EXIT * LDA ID3,I GET THE FLAG WORD SLA,INA IF ALREADY LOADED JMP PLSCN TRY THE NEXT ONE * RAR,SLA,RAL IF MUST LOAD FLAG SET JMP ENTID GO LOAD IT * JMP PLSCN ELSE GO TRY NEXT IDENT. * * ENTID STA ID3,I SET THE LOADED FLAG AND GO LOAD. JMP LOADN (RDNAM WILL CLOSE THE OLD FILE) * CLFLG CCA HANDLE ZERO LENGTH PROGRAMS. ADA TPREL FILL FINAL BSS. STA TEMP1 CMA,INA LDB MXABC ADA B,I SSA,RSS JMP CLF2 CLA LDB TEMP1 JSB LABDO CLF2 LDA TBREL UPDATE LDB A THE MAX BP CMB,INB ADDRESS IF ADB BPMAX NEEDED IFN *** BEGIN NON-MEU CODE *** SSB STA BPMAX **** END NON-MEU CODE **** XIF IFZ ***** BEGIN MEU CODE ***** * SET BASE PAGE HIGH WATER MARK SPC 1 LDA BPINC A=BP INCREMENT SSA UP OR DOWN?? JMP BPDEC DOWN, SEE IF LOWER SSB UP, SEE IF HIGHER JMP UPDAT YES, HIGHER SO UPDATE JMP BPCNT LOWER, CONTINUE BPDEC SSB DOWN, SEE IF LOWER JMP BPCNT NO, JUST CONTINUE UPDAT LDA TBREL YES, UPDATE STA BPMAX BPCNT EQU * ****** END MEU CODE ****** XIF LDA PTYPE GET CURRENT PROGRAM TYPE CPA P3 TYPE = BG DISK RESIDENT? JMP LODER,I YES - DO NOT CLEAR LOADED FLAGS * JSB CLID3 CLEAR PROG-LOADED FLAGS JMP LODER,I RETURN - ALL FLAGS CLEARED * E16RR EQU * IFN *** BEGIN NON-MEU CODE *** LDA ERR16 GET BP OVERFLOW JSB ..GNR MESSAGE ON THE TTY CCB ADB LWSBP USE MAX WE HAVE JMP CONLD AND CONTINUE LOAD **** END NON-MEU CODE **** XIF IFZ ***** BEGIN MEU CODE ***** LDA ERR16 PRINT BP OVFLOW JSB ..GNR MESSAGE LDB BPINC USE LIMIT CMB,INB +1 OR -1 AS BASE ADB BPLMT PAGE BASE (DEPENDS ON WHETHER * WE'RE GOING UP OR DOWN * ALLOCATING LINKS JMP CONLD ****** END MEU CODE ****** XIF CPRST LDB CPL1H SET UP THE NEW TPREL ADB LWH4 USE SUM OF OLD1i AND USED LINKS STB TPREL SET NEW ADDRESS JMP LOADX GO START THE FINAL PASS SPC 1 ERR54 ASC 1,54 ERR16 ASC 1,16 LEN NOP P30 DEC 30 M37 OCT 37 M77 OCT 77 M100 OCT 100 M177 OCT 177 M377 OCT 377 M0760 OCT 076000 M2000 OCT 2000 M1177 OCT 101777 SKP * PROCESS ENT/EXT RECORDS DENTR CCA,RSS SET ENT FLAG AND SKIP DEXTR CLA SET EXT FLAG STA NXFLG SAVE ENT/EXT FLAG LDA B GET NO. ENTRIES IN EXT/ENT AND M37 ISOLATE SYMBOL COUNT CMA,INA STA EXCNT SET SYMBOL COUNTER JSB DBSET GET ADDR OF NEXT WORD IN LBUF JSB DBSET GET ADDR OF NEXT WORD IN LBUF NXSYM LDA CURAL,I GET NAME 1,2 STA TBUF SAVE NAME 1,2 IN TEMP BUFF JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDA CURAL,I GET NAME 3,4 STA TBUF+1 SAVE NAME IN TEMP BUFF JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDA CURAL,I GET NAME 5 STA TBUF+2 SAVE NAME IN TEMP BUFF JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDB ATBUF GET ADDRESS OF SYMBOL JSB LSTS SET LST ADDRESSES JSB ABORT ENT/EXT NOT FOUND IN LST * LDA NXFLG GET ENT/EXT FLAG SZA,RSS SKIP IF ENTRY JMP EXT1 PROCESS EXT * JSB ZLOAD IF NOT LOADING CURRENT PGM JMP NLENT SKIP LINK AND MAP * LDA .LST4,I IF THIS ENT IS SELF DEFINING ADA N5 SKIP IF PROGRAM SSA OR BASE PAGE RELOCATABLE JMP NLENT GO DO SELF DEFINING THING * LDA TBUF+2 GET THE RELOCATION AND P7 INDICATOR ADA MRTAD RELOCATE THE LDB A,I SYMBOL ADB CURAL,I ADD CURRENT RELOCATION VALUE STB OPRND SAVE ABS ENTRY PT. ADDRESS STB .LST5,I SET VALUE IN THE .LST LDA L01 IF 1ST OF TWO SZA,RSS PASSES, SKIP JMP NLENT THE MAP AND FIX UP * LDA ID5,I CHECK FOR "MAP GLOBALS". SLA,RSS SKIP - BIT 0 SET (LIST ENTS). JMP MLENT SUPPRESS PRINTING OF ENTS. * JSB CLIST CLEAR MEMORY MAP BUFFER LDA BLAST GET BLANK, ASTERISK STA MLIST+1 SET IN MAP LDA .LST1,I GET NAME 1,2 STA MLIST+2 SET IN MEMORY MAP LDA .LST2,I GET NAME 3,4 STA MLIST+3 SET IN MEMORY MAP BUFFER LDA .LST3,I GET NAME 5 AND M7400 ISOLATE UPPER CHAR IOR BLANK SET LOWER CHARACTER = BLANK STA MLIST+4 SET NAME 5 IN MEM MAP LDA .LST5,I GET ABSOLUTE ENTRY PT. ADDRESS LDB AMEM5 GET ADDRESS OF MESSAGE JSB CONVD CONVERT TO DECIMAL/OCTAL LDA P16 LDB AMLST GET ADDRESS OF MEM MAP BUFFER JSB DRKEY PRINT ENTRY POINT MLENT JSB DAFIX FIX UP ALL REFERENCES TO THIS SYMBOL NLENT JSB DBSET GET ADDR OF NEXT WORD IN LBUF JMP EXEND PROCESS NEXT SYMBOL * EXT1 LDA TIDNT SAVE CURRENT IDENT INDEX. ADA N1 STA TBUF LDA TBUF+2 GET ORDINAL STA .LST3,I SET ORDINAL IN .LST * LDA .LST4,I GET IDENT INDEX SZA IF ENTRY NOT DEFINED CPA P2 RSS CPA P3 OR SELF-DEFINING RSS THEN CPA P4 SKIP THE LOAD JMP LIBTS AND JUST CONTINUE * STA TIDNT SET ID INDEX FOR IDX STA TBUF+3 SAVE FOR LATER. JSB IDX SET IDENT ADDRESSES JSB ABORT IDENT NOT FOUND IN LIST LDA ID6,I GET M/S, TYPE STA TBUF+1 SAVE M/S, TYPE LDA ID3,I GET PROGRAM USAGE FLAG STA TBUF+2 SAVE USAGE FLAG LDA TBUF GET CURRENT IDENT INDEX STA TIDNT SET CURRENT IDENT INDEX. JSB IDX SET IDENT ADDRESSES JSB ABORT CURRENT IDENT NOT FOUND IN LIST LDA TBUF+1 GET M/S, TYPE FOR EXT RAL,CLE,ERA SET E = M/S AND M177 ISOLATE TYPE IFZ ***** BEGIN MEU CODE ***** CPA P30 JUMP IF SSGA MODULE JMP CKSSC ****** END MEU CODE ****** XIF SZA,RSS IF SYSTEM REFERENCE JMP EXT23 CONTINUE * AND M7 KEEP JUST THE LOW TYPE CPA P6 TYPE = LIBRARY? JMP LIBUT YES - TEST FOR LOADING * LDB P6 ELSE IF CURRENT TYPE CPB LDTYP IS 6 THEN JMP CALER ERROR, TYPES 6,14,30 MAY * ONLY CALL TYPES 0,6,14,30 * EXT23 CPA P7 TYPE = UTILITY? JMP LIBUT YES - TEST FOR LOADING * SEZ SKIP - NOT MAIN PROGRAM JMP EXEND IGNORE PROGRAM CALL LIBUT LDA TBUF+2 GET PROGRAM USAGE FLAG SLA SKIP - PROGRAM NOT LOADED JMP EXEND OMIT PROGRAM LIST ENTRY * LDA TIDNT SAVE CURRENT IDENT INDEX. ADA N1 STA TBUF LDA TBUF+3 GET BACK TO REFERENCED IDENT. STA TIDNT JSB IDX JSB ABORT LDA TBUF+2 LDB PTYPE IF BACK GROUND SEGMENT CPB P5 THEN IOR P4 SET THE BS FLAG IOR P2 SET THE MUST LOAD FLAG STA ID3,I RESTORE THE FLAG TO THE IDENT LDA TBUF RESTORE CURRENT IDENT STA TIDNT INDEX JSB IDX AND ADDRESSES. JSB ABORT MUST BE THERE. * EXEND ISZ EXCNT SKIP - ALL SYMBOLS PROCESSED JMP NXSYM NO - PROCESS NEXT SYMBOL * JMP CLSRC NO - CLASSIFY NEXT RECORD * CALER LDA ERR15 SET ERROR CODE - ILLEGAL CALL JSB ..GNR PRINT THE NO-NO JMP EXEND TEST FOR ANOTHER IFZ ***** BEGIN MEU CODE ***** * MAKE SURE PROGRAM HAS SSGA PRIVILEGES CKSSC LDB SSGAF GET FLAG SZB IF SET, THEN JMP EXEND JUST CONTINUE LDA ERR52 ELSE SEND ERROR MSG JSB ..GNR JMP EXEND ERR52 ASC 1,52 ****** END MEU CODE ****** XIF LIBTS LDA LIBFG LOADING CORE RESo. LIB? CLE,SZA,RSS JMP EXEND NO SO SKIP * LDA TLST YES,SET UP LIB REPLACE CODE. ADA N1 CLB,CLE CPA $PRV REFERENCE TO .ZPRV? CLB,CCE,INB YES SET FLAGS CPA $RNT REFERENCE TO .ZRNT? CCB,CCE YES SET FLAGS SEZ,RSS IF NEITHER JMP EXEND TREAT NORMALLY * STB LIBTP ELSE SET THE TRAP FLAG STA TRPLB AND LST INDEX JMP EXEND AND CONTINUE * * SKIPR LDA TBUF SKIP A DBL RECORD ALF,ALF GET SAVED RECORD LENGTH CMA,INA AND SET NEGATIVE INA SKIP THE LENGTH STA TBUF SET FOR COUNTER SKIPX JSB DBSET SKIP A WORD ISZ TBUF DONE? JMP SKIPX NO DO NEXT ONE. * JMP CLSRC YES GO GET NEXT RECORD * * * * PROCESS DBL RECORDS * DDBLR JSB ZLOAD IF NOT LOADING JMP SKIPR SKIP TO END * LDA B GET COUNT AND M77 ISOLATE COUNT CMA,INA STA EXCNT SET INSTRUCTION COUNT LDA B COMPUTE THE RECORDS AND M100 RELOCATION LDB TPREL GET THE MAIN RELOCATION BASE SZA,RSS IF BASE PAGE LDB TPBRE REPLACE WITH BP BASE STB DBLAD AND SET THE RECORD BASE ADDRESS JSB DBSET GET ADDR OF NEXT WORD IN LBUF JSB DBSET GET ADDR OF NEXT WORD IN LBUF * LDB CURAL,I GET RELOCATION ADDRESS ADB DBLAD RELOCATE THE RECORD ADDRESS STB DBLAD SAVE RELOCATION ADDRESS LDB ID7,I GET FIRST DBL ADDRESS ISZ PLFLG SKIP - FIRST DBL RECORD JMP DBL0 IGNORE SUBSEQUENT RECORDS IFN *** BEGIN NON-MEU CODE *** CLA CLEAR THE BSS FLAG STA BSSDP LDA L01 IF CURRENT PAGE LINKING THEN SZA MUST NOT SKIP OR WE LOSE THE LINKS LDA ID6,I GET TYPE AND M7 ISOLATE TYPE CPA P2 TYPE = RT DIBSK RESIDENT? RSS CPA P3 TYPE = BG DISK RESIDENT? RSS CPA P5 TYPE = BG SEGMENT? RSS JMP DBL0 SET PGMAD = 0 FOR RESIDENTS **** END NON-MEU CODE **** XIF IFZ ***** BEGIN MEU CODE ***** * COME HERE ON FIRST BSS OF MODULE * IF MODULE IS A SEGMENT THEN DON'T * STORE BSS ON DISK SINCE IT ONLY * INDICATES ADDRESSES SHARED WITH THE MAIN SPC 1 CLA STA BSSDP ZERO LOAD POINT OFFSET LDA ID6,I AND M7 GET PRIMARY MODULE TYPE CPA P5 RSS ADJUST LOAD PT FOR SEG JMP DBL0 START FROM REL LOC 0 * FOR ALL OTHERS ****** END MEU CODE ****** XIF STB BSSDP SAVE INITIAL PROG DISPLACEMENT LDA ABCOR ADB A,I DISC /CORE STB A,I BASE ADDRESS LDA MXABC STB A,I AND THE MAX ADDRESS DBL0 JSB DBSET GET ADDR OF NEXT WORD IN LBUF DBL1 LDB CURAL,I GET RELOCATION BYTES STB REKEY SAVE FOR RELOCATION TYPE LDA N5 STA INSCN SET RELOCATION BYTE COUNT JSB DBSET GET ADDR OF NEXT WORD IN LBUF * DBL2 LDA REKEY GET RELOCATION BYTES ALF,RAR ROTATE TO LOW A STA REKEY SAVE FOR NEXT INSTRUCTION WORD AND M7 ISOLATE CURRENT BYTE CPA P4 EXTERNAL REFERENCE? JMP DBL4 YES - GET LINK ADDRESS * CPA P5 MEMORY REFERENCE? JMP DBL5 YES - CHECK FOR INDIRECT LINK * CPA P6 BYTE ADDRESS? JMP DBL6 YES - GO CACULATE THE ADDRESS. * ADA RBTAD ADD RELOCATION BASE TABLE ADDR LDB A,I GET RELOCATION BASE ADB CURAL,I ADD CURRENT INSTRUCTION WORD CLA CLEAR THE INSTRUCTION JMP DBL42 AND GO JOIN THE TYPE 4 PROCESSOR * DBL33 JSB DBSET GET ADDR OF NEXT WORD IN LBUF ISZ EXCNT SKIP - LAST INSTRUCTION OUT RSS NO - C&ONTINUE JMP CLSRC YES - CLASSIFY NEXT RECORD ISZ DBLAD INCR DBL RELOCATION ADDRESS ISZ INSCN SKIP IF NEW RELOCATION BYTE JMP DBL2 NO - PROCESS NEXT INSTRUCTION JMP DBL1 YES - GET NEXT RELOCATION BYTE * * * PROCESS DBL EXT RECORD * DBL4 LDA CURAL,I GET CURRENT DBL WORD AND NT2K CLEAR THE CURRENT PAGE BIT CLB SET OFFSET TO ZERO DBL42 STA INSTR SAVE THE INSTRUCTION WORD JMP DBL54 GO TO TYPE 5 RECORD HANDLER * DBL5 LDA CURAL,I GET CURRENT DBL WORD AND NT2K CLEAR THE CURRENT PAGE BIT DBL56 STA INSTR SAVE INSTRUCTION CODE JSB DBSET GET ADDR OF NEXT WORD IN LBUF LDB CURAL,I GET ADDRESS TO B LDA INSTR GET THE INSTRUCTION ALF,RAL SET E ELA IF A BYTE ADDRESS LDA INSTR GET INSTRUCTION CODE AND P3 ISOLATE THE MR FIELD ADA MRTAD INDEX INTO THE BASE TABLE ADB A,I RELOCATE THE ADDRESS SEZ IF BYTE ADDRESS THEN ADB A,I DOUBLE THE ADDRESS LDA INSTR GET THE INSTRUCTION WORD AGAIN ARS,ARS MOVE ORDINAL TO LOW A. * * DBL TYPE 4 JOINS HERE * DBL54 AND M377 ISOLATE THE ORDINAL STA FIX4,I SAVE ORD IN FIX UP TBL (TEMP). STB FIX3,I SAVE THE OFFSET/ ADDRESS LDA INSTR GET THE INSTRUCTION AGAIN AND M1760 ISOLATE THE OP CODE AND STA FIX2,I PUT IT IN THE FIXUP TABLE LDA DBLAD GET THE RECORD ADDRESS STA FIX1,I SET THE CORE ADDRESS IN THE TABLE LDA FIX4,I GET THE ORDINAL SZA,RSS IF NONE JMP DBL57 GO OUTPUT THE INSTRUCTION * JSB LSTOS LOOK FOR ORDINAL IN LST'S JSB ABORT HALT IF NOT THERE * LDA TLST GET THE LST ENTRY INDEX ADA N1 LDB LIBFG GET THE LIB FLAG SZB,RSS IF NOT LOADING CORE RES LIB JMP DBL45 JUST CONTINUE * }  CPA TRPLB ELSE IS THIS A REFERENCE TO .ZRNT,.ZPRV ? RSS YES SKIP JMP DBL45 NO, CONTINUE * LDA $LIBR YES USE $LIBR INDEX INSTEAD STA TLST JSB LSTX JSB ABORT LDA FIX1,I GET THE CORE ADDRESS INA AND SET THE ADDRESS STA ADTRP TRAP LDA N3 STA ADTPF SET FOR FIRST ADDRESS DBL44 LDA TLST GET NEW LST ENTRY AND CONTINUE DBL45 SZA,RSS 0 MEANS .ZRNT INDEX CCA SO SET A SPECIAL, DONT WANT 0 STA FIX4,I FIX UP TABLE LDA .LST4,I GET THE DEFINITION ADDRESS CPA P3 IF PREDEFINED RSS THEN GO CPA P4 SEND JMP DBL57 THE INSTRUCTION * CPA P2 IF SYMBOL IS IN COMMAN JMP DBL58 GO ADDJUST FOR COMMAN * LDA .LST5,I ELSE IF SYMBOL CCE,SZA IS DEFINED JMP DBL57 GO SEND IT * DBL60 LDA L01 IF NOT LOADING SZA SKIP THE FIX ENTRY JSB SFIX UNDEFINED SYMBOL MAKE FIX ENTRY CCA MAKE SURE FIX ENTRY IS STA FIX1,I FLAGED PROPERLY JMP DBL33 GO GET NEXT ENTRY * DBL57 LDA FIX1,I GET THE ADDRESS CPA ADTRP THIS A TRAP ADDRESS RSS YES SKIP JMP DBL61 NO, DO NORMAL LOAD * LDA ADTPF GET TRAP REASON FLAG INA,SZA,RSS LAST TRAP OF THREE? JMP ADDX1 YES GO DO X+1 THING * INA,SZA,RSS X ADDRESS? JMP ADDX YES GO DO X ADDRESS THING * LDA TFIX SAVE INDEX OF ADA N1 THIS FIX-UP STA TBUF+3 ENTRY. CLA MUST BE P+1 TRAP STA FIX4,I SET LST FIX INDEX TO ZERO ISZ ADTPF SET FOR X ADDRESS NEXT TRAP LDB FIX3,I GET ADDRESS FROM FIX LST STB ADTRP SET FOR NEXT STA FIX3,I SET TO NOP INCASE NOT RENT LDA LIBTP GET FLAG THAT TELLS INA,SZA,RSS IF .ZRNT JMP DBL60 HFB GO MAKE FIX ENTRY * DBL61 JSB DFIX SEND THE INSTRUCTION JMP DBL33 GO GET THE NEXT ENTRY * DBL58 LDA COMAD ENTRY POINT IS IN COMMON ADA FIX3,I SO FIX THE STA FIX3,I THE OFFSET JMP DBL57 AND OUTPUT THE INSTRUCTION * DBL6 LDA CURAL,I GET THE INSTRUCTION WORD IOR M2000 SET THE INTERNAL BYTE FLAG BIT JMP DBL56 JOIN THE DBL 5 CODE * ADDX STA FIX3,I ZAP THE OFFSET ISZ ADTRP SET FOR NEXT TRAP ISZ ADTPF TRAP NEXT ADDRESS (X+1) LDA $LIBX REPLACE THIS ONE WITH STA TLST $LIBX INDEX. JSB LSTX SET IT UP JSB ABORT LDA JSB SET INSTRUCTION STA FIX2,I TO A JSB JMP DBL44 GO SEND IT * NT2K OCT 175777 JSB JSB 0 * ADDX1 STA ADTRP CLEAR ALL TRAPS STA ADTPF LDB LIBTP GET TYPE FLAG INB,SZB IF .ZPRV JMP DBL61 JUST SEND THE WORD * INA SET TO FORCE A FIX IN DAFIX STA TLST WHERE FIX4,I = 0 LDA FIX3,I GET THIS DEF STA FIXTP SAVE FOR OTHER ENTRY. LDA TBUF+3 GET BACK TO THE STA TFIX JSB FIX OTHER FIX-UP ENTRY. JSB ABORT LDA FIXTP SET DEF IN THAT ENTRY. STA FIX3,I JSB DAFIX GO SEND BOTH INSTRUCTIONS JMP DBL33 GET THE NEXT INSTRUCTION SPC 4 xH* * ZLOAD NOP TEST FOR LOADING CURRENT PGM LDA LIBFG LIB LOADING? SZA,RSS JMP *+3 NO; THEN LOADING - GO STEP ADDRESS LDA P6 YES; CURRENT PGM TYPE=6? CPA LDTYP ISZ ZLOAD LIB AND SIX OR NOT LIB STEP ADDRESS JMP ZLOAD,I RETURN SPC 4 * ..GNR NOP LDB L01 IF THIS IS THE FIRST OF TWO SZB PASSES THEN SKIP THE ERROR PRINTOUT JSB GN.ER ELSE DO IT JMP ..GNR,I SPC 4 FIXTP NOP TRPLB NOP LIBTP NOP ADTRP NOP ADTPF NOP BLAST ASC 1, * BLANK,ASTERISK ERR15 ASC 1,15 HED RTGN4 - LOADER SEGMENT SUBROUTINES. * * LSTOS - SEARCHES LST'S FOR ONE WITH ORDINAL MATCHING * FIX4,I * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * * RETURN SEQUENCE: CONTENTS OF A AND B DESTROYED. * (N+1): CURRENT LST POINTERS SET UP FOR LAST LST. * ORDINAL NOT FOUND. * (N+2): CURRENT LST POINTERS SET TO LST CONTAINING * DESIRED ORDINAL. * LSTOS NOP JSB INLST RESET TO START OF LST. LSTO2 JSB LSTX SET ADDRS FOR NEXT ENTRY. JMP LSTOS,I IF AT END, TAKE FAILURE EXIT. * LDA FIX4,I COMPARE ORDINALS. XOR .LST3,I AND M377 SZA JMP LSTO2 NO MATCH: TRY NEXT ENTRY. ISZ LSTOS NATCH: TAKE SUCCESS EXIT. JMP LSTOS,I SKP * DFIX DOES THE FIX UP POINTED TO BY THE CURRENT FIX UP * TABLE AND LST ENTRYS. DFIX IS USED FOR ALL * INSTRUCTIONS AND MAY BE CALLED ONLY * AFTER THE SYMBOL (IF ANY) IS DEFINED. * * CALLING SEQUENCE: * * SET UP FIX1-4 AND LST1-5 FOR THE ENTRY * * JSB FIX * * RETURN THE FIX ENTRY IS FREE, A/B MEANINGLESS * DFIX NOP CCB,CLE SET THE NOT BP LINK STB BPONL FLAG LDA FIX4,I IF NO SZA,RSS LST INDEX JMP VFIX USE ZERO VALUE * WILL BE -1 FOR .ZRNT INDEX *  BUT NO PROBLEM SINCE IT IS * A REPLACE OPERATION * LDA .LST5,I GET THE SYMBOL VALUE LDB .LST4,I GET THE SYMBOL TYPE CPB P4 IS REPLACEMENT SYMBOL JMP ZFIX GO DO REPLACEMENT * VFIX LDB FIX2,I GET THE BYTE BLF,RBL BIT TO RBL,CLE,SLB,ERB E AND ADA A DOUBLE THE ADDRESS IF SET BLF,BLF RESTORE B BLF,RBR WITHOUT THE BYTE BIT STB FIX2,I AND RESET IN THE TABLE ADA FIX3,I COMPUTE THE MEMORY ADDRESS STA OPRND AND SAVE AND M0760 EXTRACT THE PAGE NUMBER STA PAGNO AND SAVE SZA,RSS IF BASE PAGE OP JMP CPFIX GO TREAT AS CURRENT PAGE * LDA FIX1,I GET THE INSTR. ADDRESS AND M0760 EXTRACT THE PAGE STA OPPAG SAVE IT LDB FIX4,I GET THE LIST INDEX SZB IF EXT REFERENCE JMP WFIX USE A BP LINK * CPA PAGNO IF SAME PAGE AS OPERAND JMP CPFIX GO DO CURRENT PAGE TRICK * WFIX LDA FIX2,I GET THE INSTRUCTION CLE,ELA ZAP THE INDIRECT BIT SZB IF EXT REFERENCE JMP IDEF GO USE A LINK * SZA,RSS IF NOT A MRF INSTRUCTION JMP CPFIX THEN DO THE DEF TRICK * IDEF LDB OPRND GET THE OPERAND SEZ IF INDIRECT REFERENCE ADB MSIGN ADD THE SIGN BIT STB OPRND RESET IT LDA FIX4,I IF EXTERNAL REFERENCE SZA THEN STA BPONL SET FOR BASE PAGE LINK ONLY JSB BPSCN GET A LINK ADDRESS IOR MSIGN A = ADDRESS, SET INDIRECT BIT * XFIX STA B SAVE THE ADDRESS AND M1177 =B101777 PURGE THE PAGE BITS CPA B IF THERE WERE SOME RSS THEN IT'S A CP LINK SO IOR M2000 SET THE CP BIT * YFIX IOR FIX2,I INCLUDE THE INSTRUCTION ZFIX LDB L01 IF NOT LOADING SZB,RSS qz THEN JMP AFIX SKIP THE DISC WRITE * LDB FIX1,I GET THE CORE ADDRESS JSB LABDO OUTPUT THE WORD AFIX CCA FREE THE FIX UP TABLE ENTRY STA FIX1,I JMP DFIX,I AND EXIT * CPFIX LDA OPRND CP/BP/DEF - GET OP ADDRESS LDB FIX2,I IF CLE,ELB DEF SZB,RSS THEN JMP YFIX JUST PICK UP THE INDIRECT. * LDB PAGNO IF A BASE PAGE REFERENCE SZB OR IF LDB FIX4,I NOT AN EXT SZB THEN DO DIRECT LINK ISZ BPONL ELSE SET TO USE BP LINK (SKIPS) JMP XFIX USE STANDARD LINK * JMP WFIX USE BP LINK * OPPAG NOP BPONL NOP SKP * SFIX FINDS THE FIRST FREE FIX UP TABLE ENTRY. * * CALLING SEQUENCE: * * JSB SFIX * SFIX NOP JSB FIXX INITILIZE THE FIX UP TABLE SFIX1 JSB FIX SET ADDRESSES JMP SFIX2 EXIT NEW ENTRY * LDA FIX1,I THIS ENTRY FREE? SSA,RSS FREE IF NEGATIVE JMP SFIX1 NO KEEP LOOKING * JMP SFIX,I EXIT * SFIX2 ISZ PFIX IF NEW ENTRY, COUNT IT. CCB STB FIX1,I AND CLEAR THE ENTRY JMP SFIX,I EXIT SKP * DAFIX DOES ALL FIX UP FOR THE CURRENT LST ENTRY * * CALLING SEQUENCE: * * SET UP THE LST ENTRY * * JSB DAFIX * DAFIX NOP JSB FIXX SET UP THE SCAN DAFI1 JSB FIX SET ADDRESSES JMP DAFI2 END OF LIST GO TO EXIT CODE * LDA FIX1,I IF NULL ENTRY SSA THEN JMP DAFI1 IGNOR IT * LDA TLST GET LST INDEX. ADA N1 CPA FIX4,I THIS ENTRY? JSB DFIX YES DO THE FIX JMP DAFI1 GET NEXT FIX UP * DAFI2 JSB SFIX SET UP A FREE FIX UP ENTRY JMP DAFIX,I AND EXIT SKP * CLEAR PROGRAMS-LOADED FLAGS * * CLID3 CLEARS THE USAGE FLAGS TO ENSURE THAT PROGRAMS WILL BE * RE-LOADED AGAIN IF CALLED MOR?E THAN ONCE. THIS IS ESSENTIAL * FOR ALL UTILITY PROGRAMS AND USER SUBROUTINES, BUT MUST NOT * BE DONE FOR SYSTEM PROGRAMS, LIBRARY PROGRAMS, OR MAIN USER * PROGRAMS. BOTH THE USAGE FLAG IN THE IDENT ENTRY AND THE * SYMBOL VALUES FOR ALL ENTRY POINTS IN THE PROGRAM ARE CLEARED. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB CLID3 * RETURN: CONTENTS OF A AND B ARE DESTROYED. * CLID3 NOP LDB P3 GET THE STANDARD FLAG LDA P5 CPA PTYPE PROG = BG SEGMENT? LDB P7 YES - GET BS FLAG BITS STB CURAP SET CURRENT PROG FLAG BITS JSB INIDX INITILIZE THE IDENT SCANNER TRID3 JSB IDX GET THE NEXT IDENT. JMP CLID3,I IF NONE THEN EXIT - DONE * LDA ID6,I GET M/S,TYPE RAL,CLE,ERA SET E IF MAIN AND M177 ISOLATE TYPE SZA,RSS IF SYSTEM JMP TRID3 FORGET IT * AND M7 ISOLATE FURTHER CPA P6 TYPE = LIBRARY? JMP TRID3 THEN - DO NOT CHANGE FLAG * CCB PRESET B FOR IMPOSSIBLE TYPE CPA P7 IF LIB TYPE CLB,CLE SET NOT MAIN FLAG (B=SYS TYPE) CPB PTYPE IF SYS REF TO LIB JMP TRID3 DON'T CLEAR IT (ONE COPY IN SYSTEM) * SEZ IF MAIN JMP TRID3 FORGET IT * LDA ID3,I GET USAGE FLAG AND P7 ISOLATE THE USAGE FLAG CPA CURAP IF ONE THAT WE ARE AFTER RSS SKIP JMP TRID3 ELSE TRY THE NEXT ONE * XOR ID3,I ZAP THE USAGE FLAGS STA ID3,I AND RESTORE THE WORD JSB INLST INITIALIZE LSTX CLSUT JSB LSTX SET CURRENT LST ADDRESSES JMP TRID3 TRY NEXT IDENT * LDA TIDNT GET IDENT INDEX ADA N1 CPA .LST4,I ENT-EXT BELONGS TO CURRENT PROG? CLB,RSS YES - CONTINUE JMP CLSUT TRY NEXT LST ENTRY * STB .LST5,I CLEAR SYMBOL VALUE JMP CLSUT CONTINUE CLEAR>ING BP LINK ADDR. SPC 2 * THE GETCP ROUTINE SETS UP AND INITILIZES A NEW CP LINK AREA * * CALLING SEQUENCE: * * JSB GETCP * * RETURN A = LNK1,CPL2 ADDRESS * GETCP NOP LDA CPL2 USE CURRENT TOP JSB LNKS SET ADDRESSES CLA FOOL THE LINK ROUTINE STA CPL2 JSB LNK SET ADDRESS FOR NEXT AREA CLA SET AREA TO ZERO SIZE STA LNK1,I STA LNK2,I LDA LNK3 SET THE IMAGE ADDRESS INA STA LNK3,I LDA LNK1 SET NEW TOP AND A FOR EXIT STA CPL2 JMP GETCP,I RETURN SKP * * GET BP LINK ADDR, SET BP VALUE * * BPSCN SCANS THE CURRENT ALLOCATED LINKS * FOR A VALUE EQUAL TO THE CURRENT OPERAND. IF SUCH A VALUE * IS FOUND, THE ADDRESS OF THE OPERAND IS RETURNED * IN THE A-REGISTER. OTHERWISE, A NEW LINK WORD IS * RESERVED AND THE ADDRESS OF THIS WORD RETURNED IN A. * IN THIS CASE THE OPERAND WORD IS SET IN THE ALLOCATION * IMAGE AREA. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB BPSCN * * RETURN: * A = BP LINK ADDRESS FOR CURRENT OPERAND * B = DESTOYED * BPSCN NOP * JSB LNKX INITILIZE THE LINK MAPPER BPSC2 JSB LNK SET UP THE FIRST AREA JMP BPSC4 IF NON LEFT GO ALLOCATE * JSB SCN SCAN THE AREA FOR A LINK JMP BPSC2 IF NON FOUND TRY NEXT AREA * JMP BPSCN,I ELSE RETURN THE LINK * BPSC4 JSB ALLOC NON ALLOCATED SO ALLOCATE ONE JMP BPSCN,I AND RETURN SKP * * SCAN AREA FOR SAME OPERAND * * THE SCN SUBROUTINE CONTROLS THE SCAN FOR A GIVEN OPERAND * IN THE CURRENT LINK SECTION. * * CALLING SEQUENCE: * SET UP LNK1, LNK2, LNK3 TO POINT TO THE CURRENT LINK AREA * SET OPRND TO THE VALUE DESIRED, AND BPONL TO -1 FOR ANY AREA * AND TO 0 FOR BASE PAGE ONLY. * * JSB SCNBP * * RETURN: * P+1Q: LINK NOT FOUND * P+2: LINK FOUND (A = ADDR OF OPERAND) * SCN NOP LDA LNK1,I GET THE LOWER ADDRESS STA LNK AND SAVE IT LDB BPONL GET THE BASE PAGE ONLY FLAG AND M0760 ISOLATE THE PAGE OF CURRENT AREA SZA,RSS IF BP THEN CCB SET B FOR OK SSB,RSS IF BP ONLY AND NOT BP JMP SCN,I RETURN NOT FOUND * SZA CHECK IF RIGHT PAGE (BP IS ALWAYS RIGHT) CPA OPPAG RSS GOOD LINK AREA JMP SCN,I NOT RIGHT PAGE, EXIT * LDB LNK3,I GET THE IMAGE ADDRESS TO B SCN1 LDA LNK GET THE ACTUAL ADDRESS TO A CPA LNK2,I END OF AREA? JMP SCN,I YES, EXIT NOT FOUND * LDA B,I NO, GET THE VALUE CPA OPRND THIS IT? JMP SCN2 YES, GO RETURN IT * INB NO SET FOR NEXT ENTRY ISZ LNK JMP SCN1 * SCN2 LDA LNK GET THE CORE ADDRESS ISZ SCN STEP TO THE RETURN ADDRESS JMP SCN,I RETURN, LINK FOUND, ADDRESS IN A SKP * * ALLOCATE NEW LINK WORD * * THE ALLOC SUBROUTINE ESTABLISHES ALL THE LINKAGE ADDRESSES. * IF THE ALLOCATED LINK WORD FALLS IN THE SYSTEM COMMUNICATION AREA, * A DISGNOSTIC IS PRINTED. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB ALLOC * * RETURN: * A = ALLOCATED BP LINK ADDRESS * B = DESTROYED * ALLOC NOP LDB OPRND SAVE THE OPERAND STB ALSAV LOCALLY CLB SET OPERAND STB OPRND TO ZERO TO CALL SCN LDA CPL1 SET UP TO SCAN THE LOW CP LINK AREA JSB LNKS JSB SCN SCAN THE AREA RSS IF NOT ALLOCATED SKIP JMP ALLO1 ELSE GO SET UP * LDA CPL2 TRY THE HIGH AREA JSB LNKS SET IT UP JSB SCN SCAN IT CLA,INA,RSS IF NOT FOUND SKIP JMP ALLO1 ELSE GO SET IT UP IFN *** BEGIN NON-MEU CODE *** STA LNK1 FOOL THE COUNTER LDA TBREL CHECK FOR OVER FLOW CPA LWSBP TOO MUCH? JMP ER16 YES GO SEND MESSAGE * ISZ TBREL STEP FOR NEXT TIME LDB A COMPUTE THE ADB ADBP IMAGE OF THE BASE PAGE **** END NON-MEU CODE **** XIF IFZ ***** BEGIN MEU CODE ***** * SET UP NEW LINK IN BASE PAGE AREA SPC 1 STA LNK1 SKIP FLAG = 1 LDA TBREL DOES NEW LINK CPA BPLMT EQUAL LIMIT ADDR JMP ER16 YES,ERROR LDB A NO, SAVE LINK ADDR ADA BPINC UPDATE TO NEXT STA TBREL SET NEXT LINK ADDR LDA B GET REAL ADDR OF NEW LINK ADB ADBP AND IMAGE ADDR OF NEW LINK SPC 1 * TBREL CONTAINS POINTER TO NEXT FREE BPLINK (STARTS * AT 2 FOR DR'S, FSYBP FOR MR'S, AND LWSBP FOR SYS, * LIB, AND SSGA MODULES). BPINC SET TO -1 WHEN * LOADING SYS, TABLES, LIB, & SSGA, AND TO +1 * OTHERWISE. BPLMT SET TO FSYBP (ABOVE TRAP CELLS) * FOR SYS,LIB,TABLES,AND SSGA, AND TO LOWEST * SYSTEM LINK FOR OTHERS. ****** END MEU CODE ****** XIF ALLO1 STA TCHR SET THE ADDRESS LDA ALSAV GET THE OPERAND STA OPRND RESTORE IT STA B,I SET IT IN THE IMAGE AREA LDA LNK1 IF ALLOCATION FROM CPA CPL1 CP LOW AREA ISZ CPL1H STEP THE COUNT CPA CPL2 IF FORM THE HIGH AREA ISZ CPL2H STEP ITS COUNT LDA TCHR SET THE ADDRESS IN A JMP ALLOC,I AND RETURN * ER16 LDA ERR16 GET THE ERROR CODE JSB ..GNR SEND IT CLA RETURN ZERO AS THE LINK JMP ALLOC,I * ALSAV NOP TCHR NOP SKP * * PACK THE CP LINK AREA * * CCPLK PACKS THE CURRENT PAGE LINK AREA TO GET RID OF LINK * AREAS THAT ARE NO LONGER ACTIVE. * * CALLING SEQUENCE: * * LDA CURRENT PAGE ADDRESS * JSB CCPLK * * RETURN REGISTERS MEANING LESS * * CCPLK WILL DELETE ALL LINK AREAS THAT ARE ABOVE * CPLS AND REFER TO AN AREA ON A PAGE BELOW THE PAGE * ADDRESS IN A ON ENTRY. IT WILL ALSO DELETE ALL * ENTRIES FOR ZERO LENGTH AREAS. * CCPLK NOP AND M0760 SAVE THE CMA,INA PAGE STA CPAG ADDRESS LDA CPLS GET THE LOWEST ENTRY TO SAVE STA TCCP4 SAVE FOR LAST VALID ENTRY JSB LNKS SET UP THE LNK AREA JSB LNK GET THE FIRST POSSIBLE PURGE AREA JMP CCPLK,I IF NONE THEN EXIT * LDA LNK1,I IF THIS AREA CPA LNK2,I IS OF ZERO LENGTH JMP CCPL0 GO SET UP * AND M0760 ELSE IF AREA IS ABOVE OR EQUAL ADA CPAG TO THE SAVE PAGE AREA SSA,RSS THEN JMP CCPLK,I EXIT - NO PACK NEEDED * CCPL0 LDA LNK1 SET UP THE NEXT AVAILABLE CCPL1 STA TCCP1 POINTER CCPL5 JSB LNK GET THE NEXT ENTRY JMP CCPL3 IF NONE GO HANDLE * LDA LNK1,I IF STILL CPA LNK2,I A ZERO ENTRY JMP CCPL5 REJECT THE ENTRY AND M0760 ISOLATE THE PAGE ADDRESS ADA CPAG IF STILL SSA BELOW THE SPECIFIED PAGE JMP CCPL5 REJECT THE ENTRY * LDA TCCP1 KEEP THE AREA STA TCCP4 SET LAST AREA POINTER STA TCCP2 SET MOVE POINTER LDA LNK2,I SET UP THE CMA,INA ADA LNK1,I MOVE STA TCCP3 COUNT LDA LNK1,I SET WORDS STA TCCP2,I ONE ISZ TCCP2 LDA LNK2,I TWO STA TCCP2,I ISZ TCCP2 LDA TCCP2 AND INA STA TCCP2,I THREE LDB LNK3,I MOVE CCPL2 ISZ TCCP2 THE LDA B,I IMAGE STA TCCP2,I TO THE NEW LOCATION INB ISZ TCCP3 JMP CCPL2 * LDA LNK1 AND CPA CPL2 CPL2 JMP CCPL3 IF END GO DO SPECIAL * LDA TCCP2 UPDATE t3 INA FOR THE NEXT ENTRY JMP CCPL1 AND GO DO IT * CCPL3 LDB TCCP4 SET UP STB CPL2 CPL2, THE UPPER LIMIT JMP CCPLK,I AND EXIT SPC 2 TCCP1 NOP TCCP2 NOP TCCP3 NOP TCCP4 NOP CPAG NOP SKP * * CLEAR THE CURRENT PAGE * * CLRCP CLEARS THE CURRENT PAGE LINKING IMAGE POINTED AT BY * THE CURRENT LNK ENTRY. * CLRCP NOP LDA LNK2,I COMPUTE CMA,INA NUMBER ADA LNK1,I OF STA LNK WORDS TO CLEAR SZA,RSS IF ZERO THEN JMP CLRCP,I EXIT * LDA LNK3,I STA LNKX GET ADDRESS OF AREA CLRC1 CLA CLEAR STA LNKX,I A WORD ISZ LNKX STEP TO NEXT ONE LDA LNKX CHECK FOR ADA CPLIM OVERFLOW OF SSA,RSS IMAGE AREA JMP TRUN GO SHORTEN IF OVERFLOW * ISZ LNK STEP COUNTER JMP CLRC1 IF NOT DONE DO NEXT ONE * JMP CLRCP,I RETURN * TRUN LDA LNK3,I CACULATE MAX ADA CPLIM AREA SIZE CMA,SSA,INA IF NEGATIVE CLA SET TO ZERO ADA LNK1,I ADD BASE ADDRESS STA LNK2,I SET NEW UPPER END JMP CLRCP,I AND RETURN SKP * * OUTPUT CURRENT CURRENT PAGE * * OUTCP OUTPUTS THE AREA SPECIFIED BY LNK1, LNK2, AND LNK3 * TO THE DISC. * * CALLING SEQUENCE: * * SET UP LNK1, LNK2, LNK3 * JSB OUTCP * * RETURN REGISTERS MEANINGLESS * OUTCP NOP JSB LNKS SET UP THE LNK AREA LDA LNK1,I GET THE CMA,INA NUMBER OF ADA LNK2,I WORDS TO OUTPUT TO CMA,INA,SZA,RSS A AND IF ZERO JMP OUTCP,I RETURN * STA WDCNT SET THE COUNT LDA LNK3,I GET THE ADDRESS OF THE FIRST WORD STA TBUF AND SET IT LDB LNK1,I GET THE CORE ADDRESS TO BE USED OUTC2 LDA TBUF,I GET A WORD JSB LABDO SEND IT TO THE DISC ISZ TBUF STEP THE WORD ADDRESS ISZ WDCNT AND THE COUNT DONE? JMP OUTC2 NO DO THE NEXT WORD * JMP OUTCP,I YES RETURN SKP * * READ RELOCATABLE RECORD CONTROL * * DBSET ESTABLISHES THE ADDRESS OF THE NEXT WORD OF THE RELOCATABLE * RECORD IN LBUF. IF LBUF HAS BEEN PROCESSED, IT ISSUES A CALL TO * RDBIN TO READ ANOTHER RELOCATABLE RECORD. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB DBSET * * RETURN: CONTENTS OF A AND B ARE DESTROYED * DBSET NOP ISZ CURAL INCR CURRENT LBUF ADDRESS ISZ LCNT SKIP - END OF LBUF JMP DBSET,I RETURN LDA ALBUF READ NEXT RELOC RECORD. STA CURAL CLB JSB RDBIN JSB ABORT ERROR (MSG ALREADY DISPLAYED). SZA,RSS JSB ABORT EOF. CMA,INA SET COUNT. STA LCNT JMP DBSET,I RETURN. SPC 3 SPC 1 * SEND MESSAGE "BP LINKAGE XXXX" ROUTINE. SPC 1 BPLNR NOP LDB MES03 XXX IS IN A ON ENTRY. JSB CONVD LDA P16 LDB MES02 JSB DRKEY JMP BPLNR,I * MES02 DEF MS02 MS02 ASC 8,BP LINKAGE XXXXX MES03 DEF MS02+5 SKP * CLEAR LOCAL LST ENTRIES * * CLRLT CLEARS THE CURRENT BP LINKAGE ADDRESSES IN THE BASE PAGE * IMAGE. (CLEARS B-A WORDS). * * CALLING SEQUENCE: * A = CURRENT LOW BP ADDRESS * B = CURRENT HIGH BP ADDRESS PLUS ONE * JSB CLRLT * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * CLRLT NOP IFZ ***** BEGIN MEU CODE ***** STA CLRTM SAVE PARM IN TEMP LDA BPINC AND PICK UP BP INCREMENT ELA AND SAVE SIGN (<0 = DOWN) LDA CLRTM THEN RESTORE PARM. SEZ IF BP LINKS GO DOWNWARD, SWP THEN SWAP PARMS. ****** END MEU CODE ****** XIF CMB,INB ZB@<,B><,T> * * N1 = CHANNEL NO. (2 OCTAL DIGITS) * N2 = DRIVER CLASS. CODE (2 OCTAL DIGITS) * D = DMA FLAG (OPTIONAL) * B = BUFFERING FLAG (OPTIONAL) * T = TIME-OUT VALUE TO BE ENTERED * * IF T IS ENTERED, A VALUE FOR THE DEVICE'S TIME-OUT * CLOCK MUST BE NEXT ENTERED IN RESPONSE TO: * ' T = ' * THE OPERATOR MUST ENTER A POSITIVE DECIMAL NUMBER * OF UP TO FIVE DIGITS. THIS IS THEN THE NUMBER OF * TIME BASE GENERATOR INTERRUPTS (10 MSEC INTERVALS) * BETWEEN THE TIME IO IS INITIATED ON THE DEVICE AND * THE TIME AFTER WHICH THE DEVICE SHOULD HAVE INTERRUPTED. * IF THE DEVICE HAS NOT INTERRUPTED BY THIS TIME, IT * IS CONSIDERED TO HAVE TIMED-OUT. * * * EACH DRT RECORD CONSISTS OF A 2-DIGIT NO. SPECIFYING THE * CORRESPONDING ENTRY IN THE EQUIPMENT TABLE * AND AN OPTIONAL 1-DIGIT NO. SPECIFYING A * SUBCHANNEL WITHIN THAT ENTRY. FOR EXAMPLE, IN * RESPONSE TO THE MESSAGE: 5 = ?, THE RESPONSE 6 INDICATES THAT * THE LOGICAL UNIT NO. 5 IS TO USE DEVICE 6 IN EQT. * WHEREAS THE RESPONSE 6,2 INDICATES THAT THE * LOGICAL UNIT NO. 5 IS TO USE SUBCHANNEL 2 OF * DEVICE 6 IN EQT. * * * THE INT RECORDS HAVE ONE OF THE FOLLOWING FORMATS: * * N1,EQT,N2 * N1,PRG,NAME * N1,ENT,ENTRY * N1,ABS,N3 * * N1 = CHANNEL NO. (2 OCTAL DIGITS - MUST BE IN INCREASING ORDER) * EXCEPTION: IF N1 = 04 (POWER - FAIL), * THIS ENTRY DOES NOT HAVE TO BE IN ORDER. ALSO, * ONLY AN ENT OR AN ABS TYPE ENTRY IS ACCEPTED * FOR N1 = 04. * N2 = EQT NO. * NAME = PROGRAM NAME TO BE SCHEDULED * ENTRY = ENTRY POINT TO WHICH TRANSFER IS TO BE MADE * N3 = ABSOLUTE VALUE (6 OCTAL DIGITS) * * * GNIO NOP LDA GNIO SAVE RETURN ADDRESS. STA IRERR *TEMP STORE* CLA SET FLAG *TEMP* tSTA .LST1 TO DETERMIN IF A TABLE GENERATED STA GN.ER CLEAR THE ERROR FLAG JSB DSTBL GO GENERATE A DISC MAP TABLE LDA IRERR RESTORE RETURN ADDR. STA GNIO LDA .LST1 IF A SZA TABLE GENERATED JSB DAFIX FIX UP THE REFERENCES * * GENERATE THE CLASS I/O TABLE * CLA STA SPLCO CLEAR THE SPOOL EQT COUNT. JSB RED2 SEND MESSAGE AND GET ANSWER DEC 18 18 CHARACTERS DEF MES04 '*# OF I/O CLASSES?' DEF $CLS ADDRESS OF ENT NAME ADB OCTNO RESERVE ROOM STB PPREL FOR IT (SETS IT TO ZERO) * * GENERATE THE LU MAP TABLE * JSB RED2 SEND MESSAGE AND GET ANSWER DEC 18 DEF MES05 '*# OF LU MAPPINGS?' DEF $LUMP ADDRESS OF ASC ENT NAME LDA OCTNO INITILIZE THE TABLE CMA,INA TO STA TBUF -1'S NXLUM CCA AND JSB LABDO THEN ISZ TBUF JMP NXLUM RESET * STB PPREL THE RELOCATION ADDRESS * * GENERATE THE RN TABLE * JSB RED2 SEND MESSAGE AND GET DEC 23 ANSWER DEF MES06 '*# OF RESOURCE NUMBERS?' DEF $RNTB ADDRESS OF ENT POINT NAME ADB OCTNO RESERVE THE TABLE AREA STB PPREL (SETS IT TO ZERO) STB AEQT SAVE ADDRESS OF EQT * * SET UP THE BUFFER LIMITS * BLGEN LDA D26 SEND MESSAGE 'BUFFER LIMITS (LOW,HIGH)?' LDB DMES7 AND GET ANSWER JSB READ JSB BLSET SET UP DEF $BLLO LOWER LIMIT JMP BLGEN IF ERROR TRY AGAIN * JSB BLSET NOW SET UP THE UPPER LIMIT DEF $BLHI JMP BLGEN IF ERROR TRY AGAIN * * * GENERATE EQUIPMENT TABLE (EQT) * JSB SPACE MAKE IT LOOK NICE. CLA STA CEQT CLEAR NO. OF EQT ENTRIES CCA SET DRT2 AND STA DRT2 DRT3 STA DRT3 TO IMPOSSIBL|E NUMBERS LDA ATB30 ADA P6 SET FOR HEADER RECORD STA TEMP3 STORAGE LDA P23 LDB MES25 MES25 = ADDR: * EQT TABLE ENTRY JSB DRKEY PRINT: * EQUIPMENT TABLE ENTRY * SEQT JSB SPACE SEND SPACE LDA CEQT CONVERT CMA LDB ATBUF THE CURRENT EQT JSB CONVD NUMBER TO ASCII LDA TBUF+2 SET IN THE STA MESEQ EQT MESSAGE BUFFER LDA P7 GET MESSAGE LENGTH LDB MESQE SEND MESSAGE "EQT XX?" AND JSB READ GET EQT RECORD FROM TTY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA "/E" CHARS = /E? JMP EQTFX YES - SET DEVICE REF TABLE (SQT) JSB GINIT RE-INITIALIZE LBUF SCAN LDA P2 JSB GETOC GET 2 OCTAL DIGITS, CONVERT JMP IOERR INVALID DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP CLDBU YES - SET CHNL NO., CLEAR D,B,U IOERR LDA ERR24 SET CODE = INVALID CHNL IN EQT JSB GN.ER PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * CLDBU LDB OCTNO GET I/O CHANNEL NO. STB IOADD SET I/O ADDRESS CLA STA IODMA CLEAR DMA FLAG STA IOBUF CLEAR AUTOMATIC BUFFERING FLAG STA FIX3,I CLEAR THE STA FIX4,I FLAG WORDS STA TVAL AND TIME OUT VALUE CCA STA TFLAG CLEAR TIME-OUT FLAG LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA "DV" CHAR = "DV"? CLA,INA,RSS YES - CONTINUE JMP DVERR INVALID DRIVER NAME JSB GETNA MOVE 1 CHAR TO TBUF (CHAR 3) JMP STYPE GET DRIVER TYPE * DVERR LDA ERR25 SET CODE = INVALID DRIVER NAME JSB GN.ER PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * STYPE STA X. SAVE KEY CHARACTER (R FOR STD.) LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF STA .YY SAVE 2 ASCII CHARS FOR I.XX,C.'XX CCA ADA CURAL ADJUST CURRENT LBUF ADDR STA CURAL RESET CURAL TO CONVERT TYPE LDA P2 JSB GETOC GET 2 OCTAL CHARS, CONVERT JMP DVERR INVALID DRIVER NAME * LDB OCTNO GET DRIVER TYPE BLF,BLF ROTATE TO UPPER B STB IOTYP SET DRIVER TYPE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP GENEQ SCAN FOR I.XX, C.XX CPA BLANK CHAR = COMMA? RSS YES - CONTINUE JMP DVERR NO - INVALID DRIVER NAME * CCA STA FIX1,I STA DFLAG SET DMA-IN FLAG STA BFLAG SET BUFFERING-IN FLAG STA XFLAG SET EQT EXTEND FLAG * INDBU CCA STA CMFLG SET COMMA FLAG = NO COMMA IN JSB GETAL GET NEXT CHAR FROM LBUF CPA "D" CHAR = D? JMP SEDMA YES - SET DMA CODE * CPA "B" CHAR = B? JMP SETBU YES - SET BUFFERING CODE * CPA "T" CHAR = T? JMP SETIM YES - SET TIME-OUT FLAG * CPA "X" CHAR = X? JMP SETEX YES GO SET UP EQT EXTENSION * UNERR LDA ERR26 SET CODE = INVALID D,B,T,X JSB GN.ER PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * SETIM ISZ TFLAG SKIP - FIRST T ENTERED JMP UNERR DUPLICATE T'S ENTERED * JMP TEQU GET THE TIME OUT VALUE * EQTST JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP GENEQ SCAN FOR I.XX, C.XX * CPA BLANK CHAR = COMMA? JMP INDBU YES - GET NEXT D,B,U, ENTRY * JMP UNERR NO - INVALID D,B,U CHARACTER * SEDMA ISZ DFLAG SKIP - FIRST D ENTERED JMP UNERR DUPLICATE D'S ENTERED * LDA MSIGN SET BIT 15 = 1 FOR DMA FLAG STA IODMA SET DMA CODE JMP EQTST TEST FOR NEXT OPERAND * SETBU ISZ BFLAG SKIP - FIRST B ENTERED JMP UNERR DUPLICATE B'S ENTERED * LDFA BIT14 SET BIT14 = 1 STA IOBUF SET AUTOMATIC BUFFERING CODE JMP EQTST TEST FOR NEXT OPERAND * SETEX ISZ FIX1,I SKIP FIRST X ENTERED JMP UNERR NO BITCH * TEQU STA I.XX SAVE THE TYPE FLAG JSB GETAL GET THE NEXT CHARACTER CPA EQU IF NOT "=" RSS JMP UNERR BITCH * LDA N5 GET DECIMAL NUMBER JSB GETOC JMP UNERR ILLEGAL NUMBER SO BITCH * LDB I.XX GET THE TYPE FLAG CPB "X" IF EXTENSION STA FIX3,I SAVE THE LENGTH OF THE EXTENSION CPB "T" IF TIME OUT STA TVAL SET THE TIME OUT VALUE JMP EQTST GO GET THE NEXT OPERAND * GENEQ LDA X. GET THE KEY CHARACTER CPA "R" IF R THEN USE LDA "." A PERIOD. IOR "INL" SET "I" IN UPPER HALF STA X. SET FOR LST SEARCH LDB ENT GET ADDRESS JSB LSTS LOOK FOR SYMBOL JMP DVERR ILLEGAL DRIVER ENT NOT FOUND. * LDA .LST5,I GET CORE ADDRESS STA I.XX SAVE DRIVER ENTRY POINT * LDA X. GET THE I. OR WHAT EVER XOR B5000 CHANGE IT TO C. OR WHAT EVER STA X. AND RESET LDB ENT SCAN THE LST JSB LSTS FOR THE "C.YY" ENTRY POINT. JMP NOCXX C.XX NOT FOUND IN LST * LDA .LST5,I GET CORE ADDRESS STCXX STA C.XX SAVE DRIVER EXIT POINT LDA X. IF THIS IS CPA "CS" DVS43 THEN LDA .YY COUNT CPA "43" A ISZ SPLCO SPOOL EQT * LDA IOADD SAVE THE CHANNEL AND AND M377 TYPE IN THE HEADER ALF,ALF RECORD LDB IOTYP BLF,BLF IOR B STA TEMP3,I ISZ TEMP3 * CLA LDB PPREL GET THE ADDRESS JSB LABDO PUT OUT I/O LIST POINTER LDA I.XX GET DRIVER ENTRY POINT JSB LABDO OUTPUT ABSOLUTE DVRXX ENT ADDR LDA C.XX B@< GET DRIVER EXIT POINT JSB LABDO OUTPUT ABSOLUTE DVRXX COMP. ADDR LDA IODMA GET DMA CODE IOR IOBUF ADD BUFFERING CODE IOR IOADD ADD CHANNEL NO. JSB LABDO OUTPUT D,B,U, CHANNEL * LDA IOTYP GET EQUIPMENT TYPE CODE AND M7000 ISOLATE UPPER 7 BITS SZA SKIP - TYPE = 0,I CLA,RSS SET STATUS = 0, SKIP LDA BLANK SET STATUS = 40(8) IOR IOTYP ADD EQUIPMENT TYPE CODE JSB LABDO OUTPUT EQUIPMENT TYPE, STATUS * LDA N8 ADB P6 INDEX TO EQT12 LDA FIX3,I GET EXTENSION SIZE JSB LABDO AND SEND IT TO THE DISC STB FIX2,I SAVE EQT13 ADDRESS FOR EXTENT ALLOCATION INB STEP TO EQT14 LDA TVAL GET THE TIME OUT VALUE SZA IF ZERO LEAVE IT CMA ELSE SET IT TO ONES COMPLEMENT JSB LABDO SEND TIME OUT TO EQT INB SET THE ADDRESS STB PPREL OF THE NEXT EQT * JSB SFIX GET A NEW FIXUP TABLE ENTRY IF NEEDED ISZ CEQT INCR EQT ENTRY COUNT JMP SEQT PROCESS NEXT EQT RECORD * NOCXX LDA I.XX C.XX NOT FOUND SO USE JMP STCXX I.XX ADDRESS cdB SPC 2 MESQE DEF *+1 ASC 2,EQT DO NOT REARANGE THESE MESEQ NOP THESE THREE ASC 1,? LINES "CS" ASC 1,CS "43" ASC 1,43 SPLCO NOP D26 DEC 26 "R" OCT 122 "X" OCT 130 EQU OCT 75 ASCII "=" XFLAG NOP TVAL NOP "DV" ASC 1,DV "." OCT 56 "INL" OCT 44400 ASCII I NULL B5000 OCT 5000 SPC 5 * THE BLSET ROUTINE SETS UP THE BUFFER LIMITS. * * CALLING SEQUENCE: * * JSB BLSET * DEF ENT NAME ENTRY POINT NAME ADDRESS * JMP RETRY ERROR RETURN * * --- NORMAL EXIT * BLSET NOP FIRST FIND LDB BLSET,I THE ENTRY POINT ISZ BLSET STEP RETURN ADDRESS JSB LSTS SEARCH FOR THE ENTRY JMP FGET IF NOT FOUND JUST EXIT * LDA N5 CONVERT A 5 DIGIT DECIMAL JSB GETOC LIMIT JMP BLSET,I ERROR TAKE ERROR EXIT * LDB .LST5,I GET THE LIST ADDRESS CMA,INA SET THE LIMIT NEGATIVE AND JSB LABDO GO OUTPUT THE LIMIT FGET ISZ BLSET STEP TO OK RETURN JMP BLSET,I AND RETURN SKP * * THE RED2 SUBROUTINE IS USED TO SET UP TABLES * WHICH START WITH THERE SIZE AS THE FIRST WORD * * CALLING SEQUENCE: * * JSB RED2 * DEC XX CHARACTER COUNT OF QUESTION. * DEF MESXX ADDRESS OF ASCII MESSAGE * DEF ENT ADDRESS OF ASCII ENTRY POINT NAME * RETURN B=NEXT AVAILABLE CORE LOCATION * REERR JSB INERR SEND ERROR 01 AND RSS RETRY * RED2 NOP ENTRY POINT RERED DLD RED2,I GET THE MESSAGE PRAMETERS JSB READ GO SEND MESSAGE AND GET RESPONCE LDA N3 CONVERT 3 ASCII DIGITS JSB DOCON AS DECIMAL JMP RERED IF ERROR RETRY * AND M7400 IF NOT LESS THAN SZA 256 JMP REERR THEN ERROR * LDA OCTNO GET THE ANSWER AGAIN SZA,RSS IF ZERO INA SET TO ONE STA OCTNO AND RESET ISZ RED2 STEP ISZ RED2 TO THE SYMBOL ADDRESS LDB RED2,I FIND JSB LSTS THE SYMBOL IN THE LST JSB ABORT MUST BE THERE LDB PPREL DEFINE THE SYMBOL STB .LST5,I LDA OCTNO OUTPUT THE FIRST JSB LABDO WORD STB PPREL UPDATE THE ADDRESS JSB DAFIX FIX UP ALL REFERENCES JSB SPACE MAKE IT LOOK NICE. LDB PPREL SET B FOR RETURN ISZ RED2 SET RETURN ADDRESS JMP RED2,I RETURN * MES04 ASC 9,*# OF I/O CLASSES? MES05 ASC 9,*# OF LU MAPPINGS? MES06 ASC 12,*# OF RESOURCE NUMBERS? DMES7 DEF MES07 MES07 ASC 13,BUFFER LIMITS (LOW, HIGH)? $CLS ASC 3,$CLAS $RNTB ASC 3,$RNTB $LUMP ASC 3,$LUSW $BLLO ASC 3,$BLLO $BLHI ASC 3,$BLUP $LUAV DEF *+1 ASC 3,$LUAV SPC 2 EQTFX JSB FIXX ALLOCATE AND SET UP NXEQF JSB FIX EXTENDED EQTS JMP SSQT END OF FIXUPS GO DO SQT * LDA FIX1,I GET THE TYPE FLAG SZA IF NOT ZERO THEN NOT JMP NXEQF AN EQT PATCH ENTRY * LDB FIX2,I GET EQT12 ADDRESS LDA PPREL AND CURRENT CORE ADDRESS JSB LABDO OUTPUT THE ADDRESS LDA PPREL RESERVE THE ADA FIX3,I CORE STA PPREL CCA CLEAR THE FIX STA FIX1,I ENTRY JMP NXEQF AND TRY THE NEXT ONE * SSQT LDB $LUAV MAKE THE LUAV TABEL JSB LSTS FIRST SET UP THE ENTRY JSB ABORT IT BETTER BE THERE LDB PPREL GET THE CORE ADDRESS STB .LST5,I SET THE ADDRESS LDA SPLCO GET THE NUMBER OF ENTRYS CMA,INA,SZA IF ZERO SKIP THE TABEL GEN. JSB LABDO SEND THE TABEL HEAD (IF NONE ZERO) ADB SPLCO ADJUST FOR THE TABLE SIZE ADB SPLCO (TWO WORD ENTRYS) STB PPREL SET THE NEW ADDRESS JSB DAFIX GO FIX UP ANY REFERENCES SKP * * SET DEVICE REFERENCE TABLE (DRT) * JSB SPACE NEW LINE JSB SPACE NEW LINE LDA PPREL GET CURRENT RELOCATION ADDRESS STA ASQT SAVE SQT ADDRESS CLA,INA STA CSQT SET SQT COUNT = 1 CCA STA LFLAG SET 1ST DEV REF INPUT FLAG = -1 LDA P24 LDB MES26 MES26 = ADDR: *DEV REF TABLE JSB DRKEY PRINT: * DEVICE REFERENCE TABLE * DEVRE LDA CSQT GET CURRENT DEV REF NO. CMA,INA SET TO NEG. FOR DECIMAL CONV LDB ATBUF GET ADDRESS OF TBUF JSB CONVD CONVERT TO DECIMAL AT TBUF LDA TBUF+2 GET 2 LEAST SIGNIFICANT DIGITS AND M7400 ISOLATE UPPER CHAR CPA UASCZ CHAR = ASCII ZERO? LDA UBLNK YES - REPLACE WITH BLANK STA B SAVE UPPER CHAR LDA TBUF+2 GET 2-DIGIT DEV REF NO. AND M177 ISOLATE LOWER CHAR IOR B SET A = DEV REF CODE STA MES28,I PUT DEV REF CODE IN MESSAGE JSB SPACE NEW LINE LDA P11 LDB MES28 MES28 = ADDR: XX = EQT #? JSB READ GET SQT RECORD FROM TTY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA "/E" CHARS = /E? JMP SINTT YES - SET INTERRUPT TABLE JSB GINIT RE-INITIALIZE LBUF SCAN LDA N2 JSB GETOC GET 2 DECIMAL DIGITS, CONVERT JMP DRERR INVALID DIGIT ENTERED STA TEMPL SAVE DEV. REF. NO. SZA,RSS IF NO CHANNEL JMP SUBCH IGNOR SUBCHANNEL JSB GETAL COMMA ENCOUNTERED? SZA,RSS YES - GO GET SUBCHANNEL JMP SUBCH NO - DEFAULT IT TO ZERO * LDA N2 JSB GETOC GET TWO DECIMAL DIGITS JMP DRERR AND M37 KEEP MAX SIZE CPA OCTNO IF NOT SAME RSS JMP DRERR THEN ERROR * SUBCH STA TEMPS SAVE SUB CHANNEL ALF,ALF SET SUBCHANNEL NO. ALF,RAR INTO BITS 13 - 11 STA TEMPH SAVE SUBCHANNEL NO. LDA TEMPL GET DEV. REF. NO. CMA,INA COMPLEMENT ADA CEQT ADD NO. EQT ENTRIES SSA SKIP IF VALID DEV. REF NO. JMP DRERR INVALID DEV. REF. NO. (NO EQT) LDA TEMPL GET DEV. REF NO. LDB CSQT GET CURRENT SQT NO. CPB P1 FIRST ENTRY? RSS YES - CONTINUE CPB P2 SECOND ENTRY? RSS YES - CONTINUE JMP SESQT PUT OUT DEV REF NO. TO SQT SZA,RSS SKIP IF DEV REF IS NOT ZERO JMP DRERR INVALID DEV. REF. NO. CPB P1 FIRST SQT ENTRY? RSS YES - CONTINUE (SET TTY CHANNEL) JMP SESQT PUT OUT DEV. REF. NO. TO SQT CMA,INA COMPLEMENT CURRENT DEV. REF. NO. LDB AEQT GET ADDRESS OF EQT INA,SZA,RSS SKIP - DEV. REF. NOT 1 JMP *+4 SET TTY CHANNEL NO. = FIRST EQT ADB P15 ADJUST CURRENT EQT ADDRESS INA,SZA SKIP - EQT FOUND JMP *-2 CONTINUE CURRENT EQT SEARCH STB TTYCH SET EQT ADDR IN TTY CHANNEL * ADB P3 RETRIEVE THE CHANNEL NO. JSB LABDO TO INSERT IN THE HEADER RECORD STA TB30+127 PLACE IN LAST WORD FOR NOW ADB N1 RESTORE THE WORD JSB LABDO * SESQT LDB CSQT SET UP TO TEST LDA TEMPS FOR PROPER SUB CHANNEL REFERENCES CPB P2 DEV. REF = 2? CPA SYSCH YES - SYSTEM SUB CHANNEL? RSS YES - YES OR NO -X SKIP JMP DRERR YES - NO - ERROR CPB P3 DEV. REF =3? CPA AUXCH YES - AUX SUB CHANNEL? JMP SETQT YES - YES OR NO - X - GO SETUP * LDA AUXCH GET THE CHANNEL SSA IF DISC ON DIFFERENT CONTROLER JMP SETQT GO SET IT UP * LDA TEMPL YES - NO - TEST FOR AUX UNIT DEFINED LDB DAUXN SZB SKIP IF NO AUX UNIT JMP DRERR AUX DEFINED SO ERROR * SZA NO AUX-UNIT WAS REF = 0? JMP DRERR NO - SO ERROR * SETQT LDA TEMPL GET DEV. REF. NO. IOR TEMPH SET IN SUBCHANNEL NO. LDB CSQT SET UP TO TEST FOR ILLEGAL DISC REF. CPA DRT2 IF SAME AS SYSTEM DISC JMP DRERR ERROR CPB P2 IF SYSTEM DISC ENTRY STA DRT2 SET FOR FUTURE TESTING CPA DRT3 IF SAME AS AUX DISC JMP DRERR ERROR SZA,RSS IF ZERO SKIP JMP *+3 TEST FOR AUX ENTRY CPB P3 IF AUX ENTRY STA DRT3 SET FOR FUTURE TESTING LDB PPREL SET CORE ADDRESS JSB LABDO OUTPUT SQT ENTRY ISZ PPREL INCR CURRENT RELOC ADDRESS ISZ CSQT INCR CURRENT SQT COUNT JMP DEVRE GET NEXT SQT ENTRY DRERR LDA ERR27 SET CODE = INVALID DEV. REF. NO. JSB GN.ER PRINT DIAGNOSTIC JMP DEVRE REPEAT INPUT * TEMPL NOP TEMPH NOP TEMPS NOP TEMP3 NOP D$CIC DEF $CIC SKP SINTT JSB SPACE NEW LINE JSB SPACE NEW LINE CCB ADB CSQT SUBTRACT 1 FROM SQT COUNT STB CSQT SET SQT COUNT * ADB PPREL THE FOLLOWING ALLOWS FOR TWO WORDS STB PPREL PER DRT ENTRY CLA ZERO THEM OUT JSB LABDO * * SET INTERRUPT TABLE (INT) * LDA PPREL GET CURRENT RELOCATION ADDR STA AINT SAVE INTERRUPT TABLE ADDRESS LDA DSKAD GET CURRENT ABS. CODE DISK ADDR STA DSKIN SAVE INT CODE DISK ADDR LDA DCNT GET CURRENT ABS. CODE DBUF COUNT STA INTCN SAVE INT CODE DISK RECORD COUNT LDA P17 LDB MES29 MES29 = ADDR. * INT TABLE JSB DRKEY PRINT: * INTERRUPT TABLE LDB AILST GET ADDRESS OF ILIST STB CURIL GET CURRENT ILIST ADDRESS JSB BUFCL CLEAR ILIST * LDB D$CIC GET ADDRESS OF CIC JSB LSTS GET LST ADDRESS JMP NOCIC CIC NOT FOUND IN LST LDA .LST5,I GET CORE ADDRESS STA OPRND SET FOR BP SCAN  CLA SET BP ONLY STA BPONL FLAG JSB BPSCN GO GET THE LINK ADDRESS IOR IJSB ADD JSB 0,I CODE STA JSCIC SET JSB CIC,I CODE LDB FSYBP GET FWA BP LINKAGE CMB,INB COMPLEMENT STB TCNT SET TEMPORARY COUNT LDB ADBP ADJUST FOR FIRST BP ADDRESS STA B,I PUT JSB CIC,I IN BP LOCATION INB INCR CURRENT BP ADDRESS ISZ TCNT SKIP - ALL INT LOCATIONS FILLED JMP *-3 CONTINUE FILLING INT LOCATIONS * LDB P4 INITIALIZE TRAP CELL FOUR ADB ADBP ADJUST TO PSEUDO BASE PAGE LDA HLTB4 TO HALT(B) 4 STA B,I ADB P2 GET ADDR OF FIRST INT LOCATION STB MEM12 SET CURRENT BP ADDRESS * SETIN CLA,INA NEW LINE LDB HYADD JSB READ GET INT RECORD FROM TTY LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA "/E" CHARS = /E? JMP ENDIO YES - I/O TABLES COMPLETE JSB GINIT RE-INITIALIZE LBUF SCAN LDA P2 JSB GETOC GET 2 OCTAL DIGITS, CONVERT JMP CHERR INVALID INT CHANNEL NO. DIGIT JSB GETAL GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP SETCH SAVE INT CHANNEL NO. CHERR LDA ERR28 SET CODE = INVALID INT CHNL NO. JSB GN.ER PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * NOCIC LDA ERR21 SET CODE = CIC NOT FOUND IN LST JSB IRERR IRRECOVERABLE ERROR * SETCH LDA OCTNO GET INT CHANNEL NO. STA INTCH SAVE CHANNEL NO. * LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA "EQ" CHARS = EQ? JMP INTEQ YES - PROCESS INT EQT RECORD * CPA "PR" CHARS = PR? JMP INTPR YES - PROCESS INT PRG RECORD * CPA "EN" CHARS = EN? JMP INTEN YES - PROCESS INT ENT RECORD * CPA "AB" CHARS = AB? JMP INTAB YES - PROCESS INT ABS RE"XCORD * IMNEM LDA ERR30 SET CODE = INVALID INT MNEMONIC JSB GN.ER PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * INTEQ LDA N2 JSB GETNA MOVE NEXT 2 CHARS TO TBUF CPA UTCHR CHARS = T,BLANK? RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA N2 JSB GETOC GET 2 DECIMAL DIGITS, CONVERT JMP EQUER INVALID EQT NO. IN INT REC LDB OCTNO GET EQT TABLE ENTRY NO. CMB,INB,SZB,RSS SKIP - VALID LOWER LIMIT JMP EQUER INVALID EQT REFERENCE STB TCHR SAVE EQT NO. ADB CEQT ADD UPPER EQT REF. NO. SSB,RSS SKIP - INVALID UPPER LIMIT JMP TSTIQ TEST FOR FIRST EQT REFERENCE * EQUER LDA ERR31 SET CODE = INVALID EQT NO. JSB GN.ER PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * TSTIQ LDB TCHR GET EQT REF. NO. LDA AEQT GET ADDR OF EQT INB,SZB,RSS SKIP - NOT FIRST EQT REFERENCE JMP SEQTI SET EQT ADDR IN INT TABLE * ADA P15 ADJUST FOR NEXT EQT ENTRY ADDR INB,SZB SKIP - EQT ADDRESS FOUND JMP *-2 CONTINUE EQT SEARCH * SEQTI LDB JSCIC GET JSB CIC CODE JMP COMIN SET INTERRUPT TABLE, LOCATION * INTPR LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA UGCHR CHARS = G,BLANK? RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA N5 JSB GETNA MOVE 5 CHARS TO TBUF * LDB ATBUF FIND THE PROGRAM JSB IDXS IN THE IDENT LIST JMP PRERR INVALID PROGRAM NAME LDB JSCIC GET JSB CIC CODE LDA TIDNT GET CURRENT IDENT INDEX ADA N1 CMA,INA SET NEGATIVE JMP COMIN SET INTERRUPT TABLE, LOCATION * PRERR LDA ERR32 SET CODE = INVALID PROGRAM NAME JSB GN.ER PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * * INTEN LDA N2 JSB GETNA MOVE_ 2 CHARS TO TBUF CPA UTCHR CHARS = T, BLANK RSS YES - CONTINUE JMP IMNEM INVALID INT MNEMONIC LDA N5 JSB GETNA MOVE 5 CHARS TO TBUF * LDB ATBUF FIND THE ENTRY JSB LSTS IN THE LST JMP ENERR INVALID ENTRY POINT LDA .LST4,I GET IDENT INDEX SZA,RSS SKIP - ENT IS DEFINED JMP ENERR INVALID ENTRY POINT STA TIDNT SET IDENT INDEX OF PROGRAM JSB IDX SET IDENT ADDRESSES JSB ABORT END OF IDENT LIST LDA ID6,I GET PROGRAM TYPE AND M177 ISOLATE TYPE SZA,RSS SKIP - NOT SYSTEM PROGRAM JMP SETEN SET ENTRY POINT ADDRESS * ENERR LDA ERR33 SET CODE = INVALID ENTRY POINT JSB GN.ER PRINT DIAGNOSTIC JMP SETIN REPEAT INT RECORD INPUT * SETEN LDA .LST5,I GET CORE ADDRESS STA OPRND SET THE OPERAND ADDRESS JSB BPSCN GET THE LINK ADDRESS IOR IJSB ADD JSB 0,I CODE STA B CLA SET INT ENTRY = ZERO JMP COMIN SET INTERRUPT TABLE, LOCATION * INTAB LDA N2 JSB GETNA MOVE 2 CHARS TO TBUF CPA USCHR CHARS = U,BLANK RSS YES - CONTINUE JMP IMNEM NO - INVALID INT MNEMONIC LDA P6 JSB GETOC GET 6 OCTAL DIGITS, CONVERT JMP ABERR INVALID ABS DIGIT CLA LDB OCTNO GET ABSOLUTE VALUE * COMIN STA TBUF SAVE INT TABLE CODE STB TBUF+1 SAVE INT LOCATION CODE JSB GETAL GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP *+4 YES - CONTINUE * LDA ERR36 SET CODE = INVALID FINAL OPRND JSB GN.ER PRINT DIAGNOSTIC JMP SETIN GET NEXT INT RECORD * LDA INTCH GET INT CHANNEL NO. CPA P4 SPECIAL PROCESSING JMP PFINT IF TRAP CELL FOUR CMA,INA ADA NADBP ADJUST FOR BP LOCATION ADDR ADA MEM12 ADD CURRENT BP ADDRESS SZA,RSS SKIP - NOT NEXT LOCATION JMP STINT SET INTERRUPT TABLES, LOCATION * SSA SKIP - INVALID CHANNEL NO. ORDER JMP FILLI FILL IN SKIPPED VALUES LDA ERR29 SET CODE = INVALID INT CHNL ORDR JSB GN.ER PRINT DIAGNOSTIC JMP SETIN GET NEXT INTERRUPT RECORD * PFINT LDA TBUF IF TRAP CELL FOUR, SZA ENTRY MUST BE AN JMP CHERR 'ABS' OR AN 'ENT' * LDA ADBP ADA P4 ADJUST LDB TBUF+1 STORE INTO STB A,I TRAP CELL FOUR JMP SETIN GET NEXT INTERRUPT RECORD * HLTB4 OCT 103004 TRAP CELL DEFAULT VALUE * FILLI STA TCNT SET NO. OF FILL-INS REQUIRED FILLJ CLA SET INTERRUPT TABLE ENTRY = ZERO LDB PPREL GET ADDRESS JSB LABDO OUTPUT ZERO TO INTERRUPT TABLE ISZ PPREL INCR CURRENT INT TABLE ADDRESS LDA JSCIC GET JSB CIC CODE STA MEM12,I PUT JSB CIC IN INT LOCATION ISZ MEM12 INCR CURRENT INT LOCATION ADDR ISZ CURIL STEP THE INT IMAGE ADDRESS ISZ TCNT SKIP - ALL FILL-INS COMPLETE JMP FILLJ CONTINUE INT FILL-IN * STINT LDB TBUF+1 GET INT LOCATION CODE STB MEM12,I PUT INT LOCATION CODE IN INT LOC ISZ MEM12 INCR CURRENT BP LOCATION ADDR LDB MEM12 GET INT LOCATION ADDR ADB NADBP ADJUST FOR BP ADDR CMB,INB ADB FSYBP ADD ADDR OF FIRST SYS LINK SSB,RSS SKIP - INT LOCATION OVERFLOW JMP NOBPO SET INT TABLE ENTRY * LDA ERR35 SET CODE = BP INT LOC OVERFLOW JSB GN.ER PRINT DIAGNOSTIC JSB SPACE NEW LINE JMP FWBPL GET FWA BP LINKAGE * ABERR LDA ERR34 SET CODE = INVALID ABS DIGIT JSB GN.ER PRINT DIAGNOSTIC JMP SETIN REPEAT INT REC INPUT * NOBPO LDA TBUF GET INT TABLE CODE STA CURIL,I SET WORD IN INT IMAGE ISZ CURIL STEP IMAGE ADDRESS F*<:6OR NEXT TIME LDB PPREL GET CORE ADDRESS JSB LABDO OUTPUT INT TABLE ENTRY ISZ PPREL INCR CURRENT RELOCATION ADDR JMP SETIN GET NEXT INT TABLE RECORD * ENDIO LDA AINT GET ADDRESS OF INT CMA,INA ADA PPREL ADD CURRENT RELOCATION ADDR STA CINT SAVE NO. INT ENTRIES JSB SPACE NEW LINE JSB SPACE NEW LINE JMP GNIO,I RETURN - CONTINUE LOADING < SKP * IOADD BSS 1 I/O ADDR (CHANNEL NO.) IN EQT IODMA BSS 1 I/O DMA FLAG IN EQT IOBUF BSS 1 I/O BUFFERING FLAG IN EQT IOTYP BSS 1 I/O DRIVER TYPE IN EQT (OCTAL) DFLAG BSS 1 DMA-IN FLAG FOR EQT BFLAG BSS 1 BUFFERING-IN FLAG FOR EQT TFLAG BSS 1 TIME-OUT ENTRY FLAG FOR EQT INTCH BSS 1 INT RECORD CHANNEL NO. JSCIC BSS 1 JSB CIC,I CODE FOR INTERRUPT LOC I.XX BSS 1 DRIVER ENTRY POINT C.XX BSS 1 DRIVER EXIT POINT * MS28 ASC 6, = EQT #? MS29 ASC 9,* INTERRUPT TABLE ENT DEF *+1 X. ASC 1,I. .YY NOP ASC 1, SPC 1 MES25 DEF *+1 ASC 12,* EQUIPMENT TABLE ENTRY SPC 1 MES26 DEF *+1 ASC 12,* DEVICE REFERENCE TABLE SKP ERR21 ASC 1,21 $CIC NOT FOUND IN LST ERR24 ASC 1,24 INVALID CHANNEL NO. IN EQT REC ERR25 ASC 1,25 INVALID DRIVER NAME ERR26 ASC 1,26 INVALID D,B, OR T OPERAND ERR27 ASC 1,27 INVALID DEVICE REF. NO. ERR28 ASC 1,28 INVALID INT REC CHANNEL NO. ERR29 ASC 1,29 INVALID INT CHANNEL NO. ORDER ERR30 ASC 1,30 INVALID INT REC MNEMONIC ERR31 ASC 1,31 INVALID EQT NO. IN INT RECORD ERR32 ASC 1,32 INVALID PROGRAM NAME IN INT REC ERR33 ASC 1,33 INVALID ENTRY POINT IN INT RECORD ERR34 ASC 1,34 INVALID ABS VALUE IN INT REC ERR35 ASC 1,35 BP INTERRUPT LOCATION OVERFLOW ERR36 ASC 1,36 INVALID FINAL OPERAND IN INT REC "/E" ASC 1,/E IJSB JSB 0,I I-JSB CODE FOR INTERRUPT LOCS UASCZ OCT 30000 UPPER ASCII ZERO CHAR "D" OCT 104 ASCII CHAR D "B" OCT 102 ASCII CHAR B "T" OCT 124 ASCII CHAR T BIT14 OCT 40000 BIT 14=1 $CIC ASC 3,$CIC "EQ" ASC 1,EQ "PR" ASC 1,PR "EN" ASC 1,EN "AB" ASC 1,AB UTCHR ASC 1,T UGCHR ASC 1,G USCHR ASC 1,S MES28 DEF MS28 MES29 DEF MS29 SPC 2 ZERO DEC 0 P1 DEC 1 P2 DEC 2 P3 DEC 3 P4 DEC 4 P6 DEC 6 P7 DEC 7 P11 DEC 11 P15 DEC 15 fP17 DEC 17 P23 DEC 23 P24 DEC 24 N2 DEC -2 N3 DEC -3 N5 DEC -5 N8 DEC -8 M37 OCT 37 M377 OCT 377 M177 OCT 177 M7000 OCT 177000 M7400 OCT 177400 MSIGN OCT 100000 BLANK OCT 40 HYADD DEF *+1 ASC 1,- UBLNK OCT 20000 SKP * DFIX DOES THE FIX UP POINTED TO BY THE CURRENT FIX UP * TABLE AND LST ENTRYS. DFIX IS USED FOR ALL * INSTRUCTIONS AND MAY BE CALLED ONLY * AFTER THE SYMBOL (IF ANY) IS DEFINED. * * CALLING SEQUENCE: * * SET UP FIX1-4 AND LST1-5 FOR THE ENTRY * * JSB FIX * * RETURN THE FIX ENTRY IS FREE, A/B MEANING LESS * DFIX NOP CCB,CLE SET THE NOT BP LINK STB BPONL FLAG LDA FIX4,I IF NO SZA,RSS LST INDEX JMP VFIX USE ZERO VALUE * LDA .LST5,I GET THE SYMBOL VALUE LDB .LST4,I GET THE SYMBOL TYPE CPB P4 IS REPLACEMENT SYMBOL JMP ZFIX GO DO REPLACEMENT * VFIX LDB FIX2,I GET THE BYTE BLF,RBL BIT TO RBL,CLE,SLB,ERB E AND ADA A DOUBLE THE ADDRESS IF SET BLF,BLF RESTORE B BLF,RBR WITHOUT THE BYTE BIT STB FIX2,I AND RESET IN THE TABLE ADA FIX3,I COMPUTE THE MEMORY ADDRESS STA OPRND AND SAVE AND M0760 EXTRACT THE PAGE NUMBER STA PAGNO AND SAVE SZA,RSS IF BASE PAGE OP JMP CPFIX GO TREAT AS CURRENT PAGE * LDA FIX1,I GET THE INSTR. ADDRESS AND M0760 EXTRACT THE PAGE STA OPPAG SAVE IT LDB FIX4,I GET THE LIST INDEX SZB IF EXT REFERENCE JMP WFIX USE A BP LINK * CPA PAGNO IF SAME PAGE AS OPERAND JMP CPFIX GO DO CURRENT PAGE TRICK * WFIX LDA FIX2,I GET THE INSTRUCTION CLE,ELA ZAP THE INDIRECT BIT SZB IF EXT REFERENCE JMP IDEF GO USE A LINK * SZA,RSS IF NOT A MRF INSTRUCTION JMP CPFIX THEN_ DO THE DEF TRICK * IDEF LDB OPRND GET THE OPERAND SEZ IF INDIRECT REFERENCE ADB MSIGN ADD THE SIGN BIT STB OPRND RESET IT LDA FIX4,I IF EXTERNAL REFERENCE SZA THEN STA BPONL SET FOR BASE PAGE LINK ONLY JSB BPSCN GET A LINK ADDRESS IOR MSIGN A = ADDRESS, SET INDIRECT BIT * XFIX STA B SAVE THE ADDRESS AND M1177 =B101777 PURGE THE PAGE BITS CPA B IF THERE WERE SOME RSS THEN IT'S A CP LINK SO IOR M2000 SET THE CP BIT * YFIX IOR FIX2,I INCLUDE THE INSTRUCTION ZFIX LDB L01 IF NOT LOADING SZB,RSS THEN JMP AFIX SKIP THE DISC WRITE * LDB FIX1,I GET THE CORE ADDRESS JSB LABDO OUTPUT THE WORD AFIX CCA FREE THE FIX UP TABLE ENTRY STA FIX1,I JMP DFIX,I AND EXIT * CPFIX LDA OPRND CP/BP/DEF - GET OP ADDRESS LDB FIX2,I IF CLE,ELB DEF SZB,RSS THEN JMP YFIX JUST PICK UP THE INDIRECT. * LDB PAGNO IF A BASE PAGE REFERENCE SZB OR IF LDB FIX4,I NOT AN EXT SZB THEN DO DIRECT LINK ISZ BPONL ELSE SET TO USE BP LINK (SKIPS) JMP XFIX USE STANDARD LINK * JMP WFIX USE BP LINK * OPPAG NOP BPONL NOP SKP * SFIX FINDS THE FIRST FREE FIX UP TABLE ENTRY. * * CALLING SEQUENCE: * * JSB SFIX * SFIX NOP JSB FIXX INITILIZE THE FIX UP TABLE SFIX1 JSB FIX SET ADDRESSES JMP SFIX2 EXIT NEW ENTRY * LDA FIX1,I THIS ENTRY FREE? SSA,RSS FREE IF NEGATIVE JMP SFIX1 NO KEEP LOOKING * JMP SFIX,I EXIT * SFIX2 ISZ PFIX IF NEW ENTRY, COUNT IT. CCB STB FIX1,I AND CLEAR THE ENTRY JMP SFIX,I EXIT SPC 3 * DAFIX DOES ALL FIX UP FOR THE CURRENT LST ENTRY * * CALLING SEQUENCE: * * S.ET UP THE LST ENTRY * * JSB DAFIX * DAFIX NOP JSB FIXX SET UP THE SCAN DAFI1 JSB FIX SET ADDRESSES JMP DAFI2 END OF LIST GO TO EXIT CODE * LDA FIX1,I IF NULL ENTRY SSA THEN JMP DAFI1 IGNOR IT * LDA TLST GET LST INDEX. ADA N1 CPA FIX4,I THIS ENTRY? JSB DFIX YES DO THE FIX JMP DAFI1 GET NEXT FIX UP * DAFI2 JSB SFIX SET UP A FREE FIX UP ENTRY JMP DAFIX,I AND EXIT SKP * * GET BP LINK ADDR, SET BP VALUE * * BPSCN SCANS THE CURRENT ALLOCATED LINKS * FOR A VALUE EQUAL TO THE CURRENT OPERAND. IF SUCH A VALUE * IS FOUND, THE ADDRESS OF THE OPERAND IS RETURNED * IN THE A-REGISTER. OTHERWISE, A NEW LINK WORD IS * RESERVED AND THE ADDRESS OF THIS WORD RETURNED IN A. * IN THIS CASE THE OPERAND WORD IS SET IN THE ALLOCATION * IMAGE AREA. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB BPSCN * * RETURN: * A = BP LINK ADDRESS FOR CURRENT OPERAND * B = DESTOYED * BPSCN NOP * JSB LNKX INITILIZE THE LINK MAPPER BPSC2 JSB LNK SET UP THE FIRST AREA JMP BPSC4 IF NON LEFT GO ALLOCATE * JSB SCN SCAN THE AREA FOR A LINK JMP BPSC2 IF NON FOUND TRY NEXT AREA * JMP BPSCN,I ELSE RETURN THE LINK * BPSC4 JSB ALLOC NON ALLOCATED SO ALLOCATE ONE JMP BPSCN,I AND RETURN SKP * * SCAN AREA FOR SAME OPERAND * * THE SCN SUBROUTINE CONTROLS THE SCAN FOR A GIVEN OPERAND * IN THE CURRENT LINK SECTION. * * CALLING SEQUENCE: * SET UP LNK1, LNK2, LNK3 TO POINT TO THE CURRENT LINK AREA * SET OPRND TO THE VALUE DESIRED, AND BPONL TO -1 FOR ANY AREA * AND TO 0 FOR BASE PAGE ONLY. * * JSB SCNBP * * RETURN: * P+1: LINK NOT FOUND * P+2: LINK FOUND (A = ADDR OF OPERAND) * SCN NOP LDA LNK1,I GET THE LOWER ADDRESSS STA LNK AND SAVE IT LDB BPONL GET THE BASE PAGE ONLY FLAG AND M0760 ISOLATE THE PAGE OF CURRENT AREA SZA,RSS IF BP THEN CCB SET B FOR OK SSB,RSS IF BP ONLY AND NOT BP JMP SCN,I RETURN NOT FOUND * SZA CHECK IF RIGHT PAGE (BP IS ALWAYS RIGHT) CPA OPPAG RSS GOOD LINK AREA JMP SCN,I NOT RIGHT PAGE, EXIT * LDB LNK3,I GET THE IMAGE ADDRESS TO B SCN1 LDA LNK GET THE ACTUAL ADDRESS TO A CPA LNK2,I END OF AREA? JMP SCN,I YES, EXIT NOT FOUND * LDA B,I NO, GET THE VALUE CPA OPRND THIS IT? JMP SCN2 YES, GO RETURN IT * INB NO SET FOR NEXT ENTRY ISZ LNK JMP SCN1 * SCN2 LDA LNK GET THE CORE ADDRESS ISZ SCN STEP TO THE RETURN ADDRESS JMP SCN,I RETURN, LINK FOUND, ADDRESS IN A SKP * * ALLOCATE NEW LINK WORD * * THE ALLOC SUBROUTINE ESTABLISHES ALL THE LINKAGE ADDRESSES. * IF THE ALLOCATED LINK WORD FALLS IN THE SYSTEM COMMUNICATION AREA, * A DISGNOSTIC IS PRINTED. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB ALLOC * * RETURN: * A = ALLOCATED BP LINK ADDRESS * B = DESTROYED * ALLOC NOP LDB OPRND SAVE THE OPERAND STB ALSAV LOCALLY CLB SET OPERAND STB OPRND TO ZERO TO CALL SCN LDA CPL1 SET UP TO SCAN THE LOW CP LINK AREA JSB LNKS JSB SCN SCAN THE AREA RSS IF NOT ALLOCATED SKIP JMP ALLO1 ELSE GO SET UP * LDA CPL2 TRY THE HIGH AREA JSB LNKS SET IT UP JSB SCN SCAN IT CLA,INA,RSS IF NOT FOUND SKIP JMP ALLO1 ELSE GO SET IT UP IFN *** BEGIN NON-MEU CODE *** STA LNK1 FOOL THE COUNTER LDA TBREL CHECK FOR OVER FLOW CPA LWSBP  TOO MUCH? JMP ER16 YES GO SEND MESSAGE * ISZ TBREL STEP FOR NEXT TIME LDB A COMPUTE THE ADB ADBP IMAGE OF THE BASE PAGE **** END NON-MEU CODE **** XIF IFZ ***** BEGIN MEU CODE ***** * SET UP NEW LINK IN BASE PAGE AREA SPC 1 STA LNK1 SKIP FLAG = 1 LDA TBREL DOES NEW LINK CPA BPLMT EQUAL LIMIT ADDR JMP ER16 YES,ERROR LDB A NO, SAVE LINK ADDR ADA BPINC UPDATE TO NEXT STA TBREL SET NEXT LINK ADDR LDA B GET REAL ADDR OF NEW LINK ADB ADBP AND IMAGE ADDR OF NEW LINK SPC 1 * TBREL CONTAINS POINTER TO NEXT FREE BPLINK (STARTS * AT 2 FOR DR'S, FSYBP FOR MR'S, AND LWSBP FOR SYS, * LIB, AND SSGA MODULES). BPINC SET TO -1 WHEN * LOADING SYS, TABLES, LIB, & SSGA, AND TO +1 * OTHERWISE. BPLMT SET TO FSYBP (ABOVE TRAP CELLS) * FOR SYS,LIB,TABLES,AND SSGA, AND TO LOWEST * SYSTEM LINK FOR OTHERS. ****** END MEU CODE ****** XIF ALLO1 STA TCHR SET THE ADDRESS LDA ALSAV GET THE OPERAND STA OPRND RESTORE IT STA B,I SET IT IN THE IMAGE AREA LDA LNK1 IF ALLOCATION FROM CPA CPL1 CP LOW AREA ISZ CPL1H STEP THE COUNT CPA CPL2 IF FORM THE HIGH AREA ISZ CPL2H STEP ITS COUNT LDA TCHR SET THE ADDRESS IN A JMP ALLOC,I AND RETURN * ER16 LDA ERR16 GET THE ERROR CODE JSB GN.ER SEND IT CLA RETURN ZERO AS THE LINK JMP ALLOC,I * ALSAV NOP TCHR NOP SKP * * CLEAR BUFFER WITH OCTAL ZEROES * * THE BUFCL SUBROUTINE CLEARS A 64-WORD BUFFER WITH ZEROES. * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF BUFFER * JSB BUFCL * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * BUFCL NOP LDA N64 STA WDCNT SET BUFFER LENGTH = 64 CLe'*($A STA B,I CLEAR BUFFER WORD INB ISZ WDCNT ALL WORDS CLEAR? JMP *-3 NO - CONTINUE CLEARING JMP BUFCL,I RETURN SPC 5 * M0760 OCT 76000 M1177 OCT 101777 M2000 OCT 2000 N1 DEC -1 N64 DEC -64 ERR16 ASC 1,16 BP LINKAGE AREA FULL. * * END GIO *ASMB,N,R,L,C HED RTGN7 - 7905 RTGEN SUBROUTINE SEGMENT. IFN ASSEMBLY OPTION "N" FOR RTE-II NAM RT2G7,5,90 92001-16031 771216 XIF IFZ ASSEMBLY OPTION "Z" FOR RTE-III NAM RT3G7,5,90 92060-16037 771216 XIF * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** SPC 3 ****************************************************************** * * NAME: RT2G7/RT3G7 * SOURCE: 92001-18031/92060-18037 * REL: 92001-16031/92060-16037 * WRITTEN BY:K.HAHN, G. ANZINGER * ****************************************************************** SPC 3 * * 7905 SUBROUTINE ENTRY POINTS: * ENT DSET5 ENTRY FOR DSETU ENT PTBT5 ENTRY FOR PTBOT ENT DSTB5 ENTRY FOR DSTBL. ENT FSEC5 ENTRY FOR FSECT. ENT DLRM7 * * * * * EXTERNAL UTILITY SUBROUTINES: * EXT CRETF,WRITF,CLOSF,FMRR,CHFIL,DISKD EXT DRKEY,SWRET,RNAME,CONVD EXT DOCON,SPACE,READ,GETNA,GINIT,GETOC,GETAL EXT INERR,YE/NO,LSTE,LSTS,ABORT,LABDO EXT PIOC,TBCHN * * EXT .LST5,OUBUF EXT LWASM, TBUF, SDS#, PPREL * A EQU 0 B EQU 1 SUP SKP * THE FOLLOWING BLOCK OF STORAGE FOR VARIABLES PRECEEDS, * AND IS REFERENCED BY, EACH SEGMENT. IT IS NOT OVERLAID * AS EACH NEW SEGMENT IS LOADED INTO CORE. * * THE LOCATION OF EACH VARIABLE MUST BE THE SAME IN * ALL SEGMENTS. IF A CHANGE IS MADE, MAKE THE SAME * CHANGE IN THE REST OF THE SEGMENTS. * * * SYSCH BSS 1 SUBCHANNEL OF SYSTEM UNIT. AUXCH BSS 1 SUBCHANNEL OF AUX UNIT. _k DSIZE BSS 1 DISK SIZE -NO. OF TRACKS. DAUXN BSS 1 AUXILIARY DISK SIZE. ADS# BSS 1 AUX DISC SECTORS/TRACK. * * RELOCATION BASE TABLE. RBTA BSS 1 ABSOLUTE PROGRAM BASE. TPREL BSS 1 CURRENT PROGRAM BASE ADDRESS. TPBRE BSS 1 BASE PAGE RELOCATION ADDRESS. COMAD BSS 1 CURRENT COMMON RELOCATION BASE. BSS 1 ABS PROGRAM BASE FOR MR CODE. * WDCNT BSS 1 TEMPORARY WORD COUNTER. DSKSY BSS 1 INITIAL ID SEGMENT DISK ADDRESS IDSP BSS 1 POSITION OF 1ST ID SEG. IN SECT TTYCH BSS 1 SYSTEM TTY CHANNEL NO. * PLFLG BSS 1 PROGRAM LOAD. FLAG = -1/0 = L/NL DSCNT BSS 1 DISK SEGMENT SECTOR COUNT * NXFLG BSS 1 ENT/EXT FLAG = -1/0 EXCNT BSS 1 SYMBOL COUNTER * LCNT BSS 1 CURRENT LBUF COUNT DCNT BSS 1 CURRENT DBUF COUNT CURAI BSS 1 CURRENT IBUF COUNT * CPLS BSS 1 ADDRESS OF TOP OF FIXED CP LINK IMAGE CPL1 BSS 1 ADDRESS OF LOW CURRENT PAGE LINK SPECS. CPL1H BSS 1 NUMBER OF CURRENT PAGE LINKS ASSIGNED CPL2H BSS 1 IN LOW AND HIGH AREA RESPECTIVELY URBP1 BSS 1 LWA R/T DISC RES BP LINK AREA BPMAX BSS 1 MAX USED BASE PAGE LINKAGE +1 CURAK BSS 1 CURRENT KBUF ADDRESS * CURAT BSS 1 CURRENT TBUF ADDRESS TCNT BSS 1 CURRENT TBUF COUNT * CURAP BSS 1 CURRENT PLIST ADDRESS * AMAD BSS 1 CURRENT MLIST ADDRESS * LICNT BSS 1 LONG ID SEGMENT COUNT SICNT BSS 1 SHORT ID SEGMENT COUNT SSCNT BSS 1 BG. SEG ID COUNT COMRT BSS 1 MAXIMUM RT COM LENGTH COMBG BSS 1 MAX BG COM LENGTH * DSKEY BSS 1 CURRENT KEYWORD DISK ADDRESS DSKID BSS 1 DISK ID SEGMENT ADDRESS KEYCN BSS 1 TOTAL KEYWORD COUNT KEYCT BSS 1 CURRENT KEYWORD COUNT * * MLIST BSS 11 MEMORY MAP BUFFER * TEMP1 BSS 1 TEMP2 BSS 1 LWH1 BSS 1 LWH2 BSS 1 LWH3 BSS 1 LWH4 BSS 1 L01 BSS 1 * FSYBP BSS 1 FIRST WORD SYS BP LINKAGE SYSAD BSS 1 CURRENT ID SEGMENT ADDRESS * TBREL BSS 1 CURRENT BP RELOC ADDR PBREL BSS 1 INITIAL BP RELOC ADDR * RELAD BSS 1 CURRENT CORE RELOCATION ADDRESS * BSBAD BSS 1 BG SEGMENT BP RELOC ADDR BSPAD BSS 1 BG SEGMENT PROG RELOC ADDR * LFLAG BSS 1 PROGRAMS-LOADED FLAG IMAIN BSS 1 CURRENT MAIN IDENT INDEX. HDFLG BSS 1 HEADING FORMAT FLAG CIDNT BSS 1 CURRENT MAIN IDENT INDEX. * AEQT BSS 1 ADDRESS OF EQUIPMENT TABLE CEQT BSS 1 NO. ENTRIES IN EQUIPMENT TABLE * ASQT BSS 1 ADDR OF DEVICE REFERENCE TABLE CSQT BSS 1 NO. ENTRIES IN DEV. REF. TABLE * AINT BSS 1 ADDRESS OF INTERRUPT TABLE CINT BSS 1 NO. ENTRIES IN INTERRUPT TABLE * DSKIN BSS 1 DISK ADDR OF INT CODE RECORD INTCN BSS 1 RECORD COUNT OF INT CODE * CURIL BSS 1 CURRENT ILIST ADDRESS ILIST BSS 64 USER SYSTEM PROG IDENT ADDR LIST * IDSAV BSS 1 INDEX OF CURRENT IDENT. DSKMN BSS 1 INITIAL MAIN DISK ADDRESS BSSDP BSS 1 INITIAL DISK RES MAIN BSS DISP PRENT BSS 1 PRIMARY ENTRY POINT DBLAD BSS 1 CURRENT DBL ADDRESS REKEY BSS 1 INSTRUCTION TYPE BYTE INSCN BSS 1 INSTRUCTION TYPE COUNTER INSTR BSS 1 CURRENT INSTRUCTION PAGNO BSS 1 CURRENT PAGE NO. OPRND BSS 1 CURRENT OPERAND PLGTH BSS 1 PROGRAM LENGTH DRT2 BSS 1 DISK DRT ENTRY ( SYSTEM) DRT3 BSS 1 AUX DISK DRT ENTRY LIBFG BSS 1 LDTYP BSS 1 SCH1 BSS 1 INDEX OF IDENT OF PGM TO BE SCHEDULED SCH3 BSS 1 ADDRESS OF CURRENT ID SEGMENT SCH4 BSS 1 ADDRESS OF THE SCHEDULED PGM ID SEG FGBGC BSS 1 BACKGROUND USING FG COMMON FLAG $LIBR BSS 1 INDEX OF $LIBR ENT $LIBX BSS 1 INDEX OF $LIBX ENT CUPRI BSS 1 * MEM1 BSS 1 MEM2 BSS 1 MEM3 BSS vC1 MEM4 BSS 1 MEM5 BSS 1 MEM6 BSS 1 MEM7 BSS 1 MEM8 BSS 1 MEM9 BSS 1 MEM10 BSS 1 MEM11 BSS 1 MEM12 BSS 1 * * IFZ ***** BEGIN MEU CODE ***** COMSZ BSS 1 #WORDS COMMON DECLARED FOR * CURRENT MAIN LPCOM BSS 1 LAST PAGE CONTAINING ANY COMMON FPSAM BSS 1 1ST PAGE CONTAINING S.A.M. FWSAM BSS 1 1ST WORD CONTAINING S.A.M. LPSYS BSS 1 LAST PAGE CONTAINING SYS OR LIB FPDSK BSS 1 1ST PAGE DISK PART AREA LOLNK BSS 1 LOW LINK FOR SSGA,LIB, OR SYS HILNK BSS 1 HI LINK USED BY MEM RES PRG BPINC BSS 1 CURR DIRECTION FOR BP LINK * ALLOCATION. +1=UP,-1=DOWN BPLMT BSS 1 WORD AFTER LAST WORD AVAIL * FOR BP LINK ALLOCATION TPMAX BSS 1 HWM FOR RELOCATION OF BG * MAINS AND SEGS MAXPT BSS 1 NUM PARTS. ALLOWED MAT. BSS 1 ADR OF LENGTH WORD * BEFORE MEM ALLOC TABLE (MAT) SSGA. BSS 1 FWA SSGA (LAST WORD SYS * OR LIB +1) FWMRP BSS 1 FWA MEM RES PROG AREA * (NEXT WORD AFTER COMMONS) MAP. BSS 1 PTR TO MEU RES MAP MPFT. BSS 1 PTR TO MPFT ****** END MEU CODE ****** XIF * SECTR BSS 0 BOOTSTRAP BUFFER FORMAT * LBPSY BSS 1 LOWER SYSTEM BP ADDRESS UBPSY BSS 1 UPPER SYSTEM BP ADDRESS DSKBP BSS 1 SYS BP DISK ADDRESS * LRMAN BSS 1 MAIN RESIDENT LOWER ADDRESS URMAN BSS 1 MAIN RESIDENT UPPER ADDRESS DSKRR BSS 1 MAIN RESIDENT DISK ADDRESS * LBMAN BSS 1 MAIN BG LOWER ADDRESS UBMAN BSS 1 MAIN BG UPPER ADDRESS DSKBG BSS 1 MAIN BACKGROUND DISK ADDRESS * SYMAD BSS 1 AVAIL SYS MEM ADDR BGBND BSS 1 BACKGROUND BOUNDARY * DSKAV BSS 1 NEXT AVAILABLE DISK ADDRESS DSKLC BSS 1 - DISK ADDRESS OF LIBRARY CODE DSKLB BSS 1 DISK ADDR OF LIBRARY ENTRY PTS DSKUT BSS 1 UTILITY PROG DISK ADDRESS DSKBS BSS 1 DISK ADDR OF MAIN BG DISK RES BP DSKBR BSS 1 CURRENT MAIN BG DISK RES DISK AD ADICT BSS 1 ADDR OF DISK DICTIONARY LBCNT BSS 1 RESIDENT LIBR ENTRY PT COUNT UTCNT BSS 1 UTILITY LIBRARY COUNT KEYAD BSS 1 CURRENT KEYWORD ADDRESS RTCAD BSS 1 RT COM CORE ADDRESS LBCAD BSS 1 LIBRARY CODE ADDRESS SYBAD BSS 1 ADDR OF FIRST BP LINK FOR BG IDSAD BSS 1 ADDR OF FIRST ID SEGMENT ABSID BSS 1 IDENT ADDR FOR NEXT BG SEG SCAN MAXRP BSS 1 MAXIMUM RT DISK RESIDENT PROG MAXRB BSS 1 MAXIMUM RT DISK RESIDENT BP IDMBS BSS 1 BG MAIN ADDRESS FOR BS REF * TB30 BSS 128 TRACK MAP TABLE #SUBC BSS 1 # SUBCHANNELS DEFINED SPC 5 ********************************************************* * * * END OF COMMON STORAGE BLOCK FOR ALL SEGMENTS. * * * ********************************************************* SPC 2 DLRM7 DEF LRMAN SKP * * * THIS SEGMENT CONTAINS THE DISC DEPENDENT SUBROUTINES * FROM THE MH RTGEN DRIVER SECTION. THE FOLLOWING ARE * THE MODIFICATIONS MADE TO THE OFF-LINE VERSIONS. * * * DSET5 - IN RTGN7: CALLED BY MAIN. * --MODIFICATIONS: SCRATCH DISC OMITTED. * * DSSIZ - IN RTGN7; CALLED BY DSET5. * * TSTCH - IN RTGN7; CALLED BY DSET5. * --MODIFICATIONS: INIT1 FLAG OMITTED. * * STDSK - IN RTGN7; CALLED BY PTBT5. * * PTBT5 - IN RTGN7; CALLED BY MAIN. * --MODIFICATIONS: INITS CALL OMITTED, * PAPER TAPE BOOT WRITTEN ON FMP FILE. * * INITS - OMITTED. * * INIER - OMITTED. * * DSTB5 - IN RTGN7; CALLED BY RTGN5 VIA MAIN. * --SLIGHT MODIFICATION. * * DISKA - IN MAIN; CHANGE REQ'D FOR FH GEN * --MODIFICATION: NO TEST FOR DEFECTIVE TRACKS. * * TRTST - OMITTED. * * DISKI - IN MAIN; CHANGE REQ'D FOR FH GEN * * DISKO - IN MAIN; CHANGE REQ'D FOR FH GEN * * DTSE5 - OMITTED. * * FSEC5 - IN RTGN7; CALLED BY RTGN3 VIA MAIN. * --MODIFICATIONS: OUBUF IS AN ENT IN MAIN. * * DISKD - IN MAIN; CHANGE REQ'D FOR FH GEN * --MODIFICATIONS: TRANSLATES DISC ADDR TO RECORD * NUMBER, USES FMP WRITF/READF CALLS FOR ACCESS * TO CORE-IMAGE RTE SYSTEM OUTPUT FILE. * * ATB30 - TRACK MAP TABLE - DIFFERENT SIZES FOR 7900 OR * 7905 HED MH RTGEN - CONSTANTS AND ADDRESSES * BEG05 JMP SWRET SEGMENT ENTRY POINT * DC EQU 0 ASBUF DEF ASPBF+1 ADDRESS OF 9-WORD BUFFER IN BOOT ABOOT DEF START ADDRESS OF BOOTSTRAP LOADR ATB30 DEF TB30 * #DATA ABS I/OTB-I/OTC NO. OF DATA I/O INSTRUCTIONS INTMP BSS 1 TEMP FOR INITILIZATION ROUTINES MS3 DEF *+1 SUBCHANNEL NUMBER MESAGE ASC 3, 00? MES1 DEF *+1 ASC 20,# TRKS, FIRST CYL #, HEAD #, # SURFACES, ASC 14, UNIT, # SPARES FOR SUBCHNL: P68 DEC 68 LENGTH OF MESSAGE * MES4 DEF MES04 MES04 ASC 8,BOOT FILE NAME? MES05 ASC 8,SYSTEM SUBCHNL? MES07 ASC 9,AUX DISC SUBCHNL? MES40 DEF *+1 ASC 13,# 128 WORD SECTORS/TRACK? "/E" ASC 1,/E SBUF BSS 3 DSBUF DEF SBUF MES5 DEF MES05 MES7 DEF MES07 * L2000 OCT -2000 M0760 OCT 76000 M77 OCT 77 M377 OCT 377 M1177 OCT 101777 M1777 OCT 1777 M74C OCT 7400 M7400 OCT 177400 M7600 OCT 177600 M7700 OCT 177700 N2 DEC -2 N3 DEC -3 N4 DEC -4 N5 DEC -5 N6 DEC -6 P1 DEC 1 P2 DEC 2 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P15 DEC 15 P16 DEC 16 P17 DEC 17 P25 DEC 25 P31 DEC 31 BLANK OCT 40 STEMP NOP TTEMP NOP HED INTERACTIVE DISC SET UP SECTION * * THE FOLLOWING MESSAGES ARE PRINTED DURING THE INITIALIZATION * PHASE, WITH THE SPECIFICATIONS FOR EACH VALID RESONSE. * * * MESSAGE  RESPONSE * * CONTROLLER CHANNEL? ENTER 2 OCTAL DIGITS * * # TRKS, FIRST CYL #, HEAD #, # SURFACES, UNIT, # SPARES FOR SUBCHNL? * 0? * . * . * . * . * 32? * * SYSTEM SUBCHNL? ENTER 1 OCTAL DIGIT * * AUX DISC (YES OR NO)? ENTER YES OR NO * * AUX DISC SUBCHNL? ENTER 1 OCTAL DIGIT * * # 128 WORD SECTORS/TRACK? ENTER 3 DECIMAL DIGITS $$ SPC 3 DSET5 EQU * **ENTRY POINT FOR DSETU** DSETU NOP ENTRY POINT FOR QUESTION SECESSION. LDB $TB32 PUT TB32 IN THE LST JSB LSTE NOP IGNOR ALREADY THERE RETURN CHNLD LDA P16 LDB MESS2 MESS2 = ADDR: CONTROLLER CHNL? JSB READ PRINT MESSAGE, GET REPLY LDA P2 SET FOR 2 OCTAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP CHNLD REPEAT INPUT * STA DCHNL SET DISK CHANNEL NUMBER ADA N8 MUST BE >=10 SSA,RSS JMP STB30-1 JSB INERR IT WAS'T JMP CHNLD TRY AGAIN * JSB SPACE SET UP TRACK MAP STB30 LDA P68 SEND MESSAGE: LDB MES1 # TRKS, FIRST CYL #, HEAD #, # SURFACES, JSB DRKEY UNIT, # SPARES FOR SUBCHNL: LDA ATB30 SET ADDRESSES STA STEMP FOR INPUT STA INTMP AND CLEAR LOOPS LDB M7600 =-128 CLEAR CLA THE TB30. STA INTMP,I TRACK ISZ INTMP MAP INB,SZB STEP COUNT - DONE? JMP TB30. NO - CLEAR NEXT WORD * STA #SUBC SET 0 DEFINED SUBCHANNELS TB30A STB INTMP SAVE CURRENT UNIT LDA B CONVERT FOR THE MESSAGE CMA,INA LDB DSBUF JSB CONVD LDA SBUF+2 STA MS3+2 SET IN THE MESSAGE LDB MS3 GET MESSAGE ADDRESS LDA P5 AND LENGTH JSB READ GO GET THE ANSWER LDA N2 GET FIRST JSB GETNA TWO CHARACTERS CPA "/E" /E? JMP TB30X YES - GO CHECK FURTHER * JSB mGINIT NO - REINITIALIZE LBUF SCAN LDA N4 CONVERT 4 DIGITS JSB GETOC DECIMAL JMP TB30E ERROR - * STA TTEMP SET # TRACKS IN TEMP SZA,RSS IF ZERO JMP TB30B GO UPDATE POINTERS * JSB GETAL NOT ZERO - GET NEXT CHARACTER CPA BLANK COMMA IN? RSS YES - SKIP JMP TB30E NO - ERROR * LDA N3 SET FOR JSB GET 3 DECIMAL DIGITS AND CONVERT STA STEMP,I THE CYL # FOR TRACK 0. CCA GET 1 DIGIT JSB GET HEAD NUMBER STA B SAVE ADA N5 MUST BE LESS THAN 5. SSA,RSS WELL? JMP TB30E NO - BITCH * BLF,BLF PUT IN ITS PLACE STB BSHED AND SAVE CCA NOW GET # SURFACES JSB GET MUST BE 1 TO 5. STA B SZA ADA N6 SSA,RSS WELL? JMP TB30E NOT GOOD! BITCH BLF,BLF MOVE TO HIGH BLF END AND ADB BSHED COMBINE WITH HEAD STB BSHED CLA,INA NOW GET UNIT JSB GET MUST BE 0 TO 7. ADA BSHED GOOD - ADD THE HEAD WORD STA BSHED AND SAVE IT. CLA PREPARE FOR DEFAULT # SPARES STA TBUF+1 NAMELY 0. JSB GETAL TEST FOR SPARES CPA BLANK WELL? RSS YES, SO SET TO CONVERT 2 DIGITS JMP TB30C NO, USE DEFAULT * LDA N2 JSB GET CONVERT THE # SPARES STA TBUF+1 SAVE THE NUMBER JSB GETAL END OF LINE? SZA WELL? JMP TB30E NO - TOO BAD - AND YOU ALMOST * MADE IT TOO. TB30C ISZ STEMP STEP TO HEAD/UNIT WORD. LDA BSHED AND STA STEMP,I SALT IT AWAY. ISZ STEMP NOW THE # TRACKS LDA TTEMP WORD STA STEMP,I SALT IT AWAY. STA DSIZE SET ALSO FOR ASSUMPTION ISZ STEMP STEP ThO SPARES LDA TBUF+1 AND STA STEMP,I SALT THAT AWAY TOO. LDA INTMP TO THIS SUBCHANNEL STA SYSCH FOR DEFAULT ISZ #SUBC STEP TOTAL SUBCHANNEL COUNT TB30B ISZ STEMP STEP TABLE ISZ INTMP STEP SUBCHANNEL TB30F LDB INTMP IF CURRENT SUBCHANNEL CPB P32 IS 32 THEN JMP TB30Y DONE SO GO EXIT * JMP TB30A NOT 32 - GO ASK FOR NEXT ONE * SPC 1 TB30E JSB INERR TELL HIM THERE WAS AN ERROR JMP TB30F GO ASK AGAIN * SPC 1 TB30X JSB GETAL /E ENTERED SZA ANY THING ELSE? JMP TB30E YES - ERROR * TB30Y LDA #SUBC NO - GET NUMBER OF CHANNELS CMA,INA,SZA DEFINED - IS IT ZERO? JMP TB30Z NO - SKIP * JSB INERR YES - TELL HIM JMP STB30 AND RESTART * TB30Z JSB DSSIZ GET THE SYSTEM DISC # SECT./TRK. STA SDS# AND SET IT. * SPC 1 JSB SPACE ISYSC LDA P15 SEND MESSAGE: LDB MES5 SYSTEM SUBCHNL? JSB READ GET ANSWER LDA N5 JSB DOCON GO CONVERT JMP ISYSC ERROR - TRY AGAIN * JSB TSTCH TEST FOR LEGAL SUBCHANNEL STB DSIZE SET SYSTEM SIZE STA SYSCH SET SYSTEM SUBCHANNEL ADB M7400 TEST FOR TOO MANY TRACKS CMB,SSB,INB,SZB OK? JMP SYSER NO GO BITCH * * SET VALUES FOR THE BOOT * RSS SETEM CLA SUBCHANNEL IN A MPY P4 LDB ATB30 POSITION WITHIN TMT FOR INFO ADB A LDA B,I GET FIRST CYLINDER # STA PT#TR INB LDA B,I LDB A AND M74C STA H#AD SET HEAD # FOR COMMANDS LDA B AND M377 GOT THE UNIT LDB WA#KE NOW INCORPORATE IT ADB A IT INTO THE WAKEUP, STB WA#KE SEEK,AND READ COMMANDS LDB PT#SK ADB A STB PT#SK LDB PT#AD ADB A STB PT#AD LDB 'R#DCM ADB A STB R#DCM LDB P#EN ADB A STB P#EN * SPC 1 AUXIN CLA PRESET TO SHOW NO AUX DISC STA DAUXN SET CHANNEL TO ZERO STA ADS# #SECT PER TRACK TO ZERO, CCA AND SUBCHANNEL STA AUXCH TO -1. JSB SPACE AUXDS LDA P31 SEND MESSAGE LDB MES6 AUX DISC (YES OR NO OR # TRKS)? JSB READ GO GET ANSWER LDA N3 FIRST TRY FOR A DECIMAL JSB GETOC NUMBER JMP AUX0 NO TRY FOR YES OR NO * STA TBUF SAVE THE NUMBER JSB GETAL END OF INPUT? SZA JMP AUX0 NO LET YE/NO SEND ERROR * LDA TBUF GET BACK THE SIZE STA DAUXN SET THE AUX DISC SIZE JSB DSSIZ GET ITS # SECTORS / TRACK JMP AUX3 GO SET IT * AUX0 JSB GINIT RESET THE SCANNER JSB YE/NO TRY FOR YES OR NO JMP AUXDS NO MUST BE BAD ANSWER * JMP STSCR NO - SKIP * CLA,INA YES - IF ONLY ONE CPA #SUBC DISC SUBCHANNEL THEN JMP AUX4 THEN WRONG ANSWER TRY AGAIN * JSB SPACE YES - SET UP AUX UNIT AUXUN LDA P17 SEND QUESTION: LDB MES7 AUX DISC SUBCHNL? JSB READ GO SEND AND GET ANSWER LDA N5 JSB DOCON JMP AUXUN ERROR - TRY AGAIN * JSB TSTCH TEST FOR LEGAL UNIT AUX1 STB DAUXN SET SIZE OF AUX UNIT CPA SYSCH SAME AS SYSTEM? RSS YES - ERROR SKIP JMP AUX2 NO - GO SET UP * AUX4 JSB INERR SEND ERROR MESSAGE JMP AUXIN AND TRY AGAIN * SYSER JSB INERR SEND ERROR MESSAGE JMP ISYSC TRY AGAIN * AUX2 ADB M7400 TOO MANY TRACKS FOR AUX CMB,SSB,INB,SZB DISC? JMP AUX4 YES GO BITCH * SPC 1 STA AUXCH SET AUX CHANNEL LDA SDS# SET AUX TRK SIZE TO SAME AS SYS DISC AUX3 STA ADS# SET AUX DISC # SECT. TRACK e+B@< SPC 1 * NOTE: THE FACT THAT ANY GIVEN DISC * ADDRESS IS ON A UNIT OTHER THAN * THE SYSTEM UNIT IS FLAGGED BY * ITS TRACK ADDRESS BEING GREATER THAN * 400 BY THE AMOUNT OF THE DESIRED * TRACK. STSCR JMP DSETU,I RETURN TO MAIN LINE CODE SPC 1 P32 DEC 32 BSHED NOP SPC 1 * * GET # SECTORS FOR DISC * DSSIZ NOP JSB SPACE NEW LINE #SEC1 LDA P25 LDB MES40 MES40 = ADDR: # 128 WORD SECTORS/TRACK?$$ JSB READ PRINT MESSAGE, GET REPLY LDA N3 SET FOR 3 DECIMAL DIGITS INPUT JSB DOCON GET DIGITS, RETURN OCTAL JMP #SEC1 REPEAT INPUT * ALS DOUBLE FOR 64 WORD SECTORS JMP DSSIZ,I RETURN SPC 2 GET NOP GET SUBROUTINE CHECKS FOR EXISTANCE STA TBUF AND GETS NEXT JSB GETAL INPUT NUMBER CPA BLANK PASS NUMBER TYPE ECT FLAG IN A RSS LINE NOT EMPTY SO SKIP JMP TB30E EMPTY LINE SO ERROR * LDA TBUF GET TYPE/ # DIGITS JSB GETOC GET NUMBER JMP TB30E CONVERSION ERROR BITCH * JMP GET,I ELSE RETURN cB SKP SPC 3 * SUBROUTINE TO TEST LEGALITY OF * A SUBCHANNEL. THE TEST CONSISTS * OF LOOKING FOR THE DESIRED * CHANNEL IN THE TRACK MAP. * CALLING SEQUENCE * * P-1 ERROR RETURN * P JSB TSTCH * P+2 NORMAL RETURN CHANNEL IN A SIZE IN B SPC 1 * A ON ENTRY IS ASSUMED TO BE THE SUBCHANNEL TO BE CHECKED. * ERROR EXIT IS P-1 * IF THE SUBCHANNEL IS LEGAL IT IS RETURNED IN A * AND B IS THE NUMBER OF TRACKS ON THAT CHANNEL SPC 1 TSTCH NOP LDB A SUBCHANNEL SPECIFIED MUST BE <=31 ADB N32 SSB,RSS JMP TSTER IT WASN'T * LDB A NUMBER TO B BLS,BLS INDEX INTO THE ADB ATB30 MAP TABLE ADDRESS ADB P2 STEP TO # TRACKS LDB B,I GET # TRACKS IN B SZB IF ZERO - ERROR - SKIP JMP TSTCH,I ELSE OK - RETURN B= # TRACKS * TSTER JSB INERR SEND ERROR MESSAGE LDA TSTCH GET RETURN ADDRESS ADA N2 ADJUST FOR P-1 JMP A,I AND RETURN * N8 DEC -8 N32 DEC -32 SKP * * INSERT CHNL NO. IN INSTRUCTION * * THE STDSK SUBROUTINE SETS THE CURRENT DISK CHANNEL * NOS. IN THE I/O INSTRUCTIONS. * * CALLING SEQUENCE: * A = NO. WORDS TO BE CONFIGURED (NEG.) * B = ADDRESS OF INSTRUCTION ADDR LIST * JSB STDSK * * RETURN: * A = DESTROYED * B = NEXT INSTRUCTION ADDRESS * STDSK NOP STA TBUF SAVE NO. OF INSTRUCTIONS STDS1 LDA B,I GET INSTRUCTION AND M7700 ISOLATE INSTRUCTION CODE IOR DCHNL INSERT CHANNEL NO. STA B,I SET INSTRUCTION IN CODE INB INCR INSTRUCTION ADDRESS ISZ TBUF SKIP - ALL INSTRUCTIONS CONFIG. JMP STDS1 CONFIGURE NEXT INSTRUCTION JMP STDSK,cI RETURN * SPC 2 HED MH RTGEN CONFIGURE AND COMPLETE INITILIZATION PTBT5 EQU * **ENTRY POINT FOR PTBOT** PTBOT NOP CONFIGURE/PUNCH BOOT ENTRY POINT LDA #DATA GET THE NUMBER OF DATA CHANNEL INSTRUCTIONS LDB HPDSK GET THE ADDRESS OF THE DISK ADDRESSES JSB STDSK GO SET DATA CHANNEL ADDRESSES * LDB DP#RM GET THE TABLE ADDRESS IN BOOT LDA PL#ST AND ADDRESS IN PARER BOOT JSB MOVW MOVE THE WORDS DEC -10 LDB D#HDS GET ADDRESS OF REST OF PRAMS LDA SYSCH GET ADDRESS OF SYSTEM PARAMTERS RAL,RAL POSITION TO SYSTEM SUBCH ADA ATB30 INA STEP TO THE HEAD/UNIT WORD LDA A,I GET THE WORD ALF ROTATE TO LOW A AND M17 AND ISOLATE THE #HEADS PER CYL. STA B,I SET FOR BOOT INB STEP THE ADDRESS LDA H#AD GET THE BASE HEAD ADDRESS STA PT#H2 SET IN SECOND ADDRESS FOR PT ALF,ALF AND SET BASE HEAD FOR STA B,I AND SET IT FOR THE BOOT INB STEP TO NEXT ADDRESS LDA PT#TR STA PT#T2 SET FOR ADDRESS RECORD STA B,I SET FOR THE BOOT INB STEP TO NEXT ADDRESS LDA SDS# SET ALF,RAL THE RAL NUMBER OF WORDS STA B,I PER TRACK LDA LWASM GET LWAM AND M0760 MASK TO PAGE STA TBUF SAVE LDA BADD GET THE BOOT ADDRESS AND M1177 MASK TO PAGE BITS AND IOR TBUF ADD PAGE BITS AND STA BADD SET FOR THE PAPER BOOT RAL,CLE,ERA CLEAR THE SIGN BIT INB STA B,I SET THE ADDRESS INB FOR BOOTING STA B,I AND STA BADDD FOR THE PAPER BOOT INB LDA B,I GET THE TABLE ADDRESS AND M1777 AND MASK TO PAGE OFFSET IOR TBUF ADD THE PAGE BITS STA B,I I AND RESTORE INB STEP THE THE NEXT ONE LDA B,I GET THE DEF AND M1777 SAVE THE OFFSET IOR TBUF SET THE PAGE STA B,I AND RESET INB AND YET ANOTHER LDA B,I AND M1777 IOR TBUF STA B,I LDA DDIV CONFIGURE THE DIVIDE AND M1777 IOR TBUF STA DDIV AND RESET IT INB ONE MORE TIME LDA B,I AND M1777 IOR TBUF STA B,I DONE SO * LDB ABOOT OUTPUT THE BOOTSTRAP CLA,CLE TO THE DISC JSB DISKD TRACK ZERO SECT ZERO SPC 3 BOOT0 JSB SPACE NEW LINE LDA P15 SEND MESSAGE LDB MES4 BOOT FILE NAME? JSB RNAME GET THE NAME * JSB GINIT IF A 0 WAS ENTERED, THEN CLA,INA SKIP THE BOOT JSB GETNA CPA ZERO JMP PTBOT,I * JSB CRETF CREAT BOOT FILE DEF *+5 DEF BTDCB DEF P1 DEF P7 DEF M2300 * JSB CHFIL CHECK FILE STATUS JMP BOOT0 ERROR-TRY AGAIN * LDA NBLC GET BOOT LENGTH STA TBUF SET FOR CHECK SUM CACULATION LDA STRAP GET LOAD ADDRESS CLB,RSS INITIALIZE CHECKSUM BOOT1 ADB A,I COMPUTE CHECKSUM INA STEP ADDRESS ISZ TBUF DONE? JMP BOOT1 NO - GET NEXT WORD * STB A,I YES - SET CHECKSUM * JSB WRITF OUTPUT THE BOOTSTRAP FILE DEF *+5 DEF BTDCB DEF FMRR DEF STRAP+1 DEF BOOTL * LDA BTDCB+2 SZA IF ITS A TYPE 0 FILE JMP BOOTC THEN WRITE AN EOF JSB WRITF DEF *+5 DEF BTDCB DEF FMRR DEF STRAP+1 DEF N1 * BOOTC JSB CLOSF CLOSE BOOT FILE DEF *+2 DEF BTDCB * JMP PTBOT,I RETURN TO MAIN SPC 2 N1 DEC -1 BTDCB BSS 144 M2300 OCT 2300 MESS2 DEF *+1  ASC 8,CONTROLLER CHNL? MES6 DEF *+1 ASC 16,AUX DISC (YES OR NO OR # TRKS)? HPDSK DEF I/OTB,I ADDRESS OF I/O INSTRUCTION LIST DCHNL BSS 1 DISK I/O CHANNEL NO. (OCTAL) ZERO OCT 60 DP#RM DEF WAK PL#ST DEF WA#KE D#HDS DEF #HDS * HED MH RTGEN DISC DRIVE I/O INSTRUCTION ADDRESSES I/OTB DEF DSK1 DATA CHANNEL DEF DSK2 DEF DSK3 DEF DSK4 DEF DSK5 DEF DSK6 DEF DSK7 DEF DSK10 DEF DSK11 DEF DSK12 DEF DSK13 DEF DSK14 DEF DSK15 DEF DSK16 DEF DSKDR I/OTC EQU * HED MH RTGEN ** SECT. 0 TRK 0 BOOTSTRAP ** * * THE FOLLOWING LOADER PERMITS LOADING OF THE RESIDENT PORTIONS * OF THE REAL TIME MONITOR. THE LOADER IS LOCATED ON SECTOR 0/1, * TRACK 0 OF THE SYSTEM DISC. IT IS GENERATED BY THE SYSTEM * GENERATOR AND CONSISTS OF: * * (1) THE INSTRUCTIONS REQUIRED FOR LOADING THE SYSTEM * (2) THE DISK AND CORE ADDRESSES SPECIFYING LOADING * * * THE ADDRESSES REQUIRED FOR LOADING ARE THE FOLLOWING: * * (A) BASE PAGE LINKAGES * (1) LOW CORE ADDRESS * (2) HIGH CORE ADDRESS * (3) DISK ADDRESS OF ABSOLUTE CODE * * (B) SYSTEM, RT RESIDENT MAIN * (1) LOW CORE ADDRESS * (2) HIGH CORE ADDRESS * (3) DISK ADDRESS OF ABSOLUTE CODE * * (C) BG RESIDENT MAIN * (1) LOW CORE ADDRESS * (2) HIGH CORE ADDRESS * (3) DISK ADDRESS OF ABSOLUTE CODE * * THE PROGRAM IS ASSUMED TO BE LOADED IN THE AREA JUST PRECEDING * THE PROTECTED LOADER. * START ABS LDB-O+ASPBF GET ADDRESS OF DISK SPEC. BUFFER ABS STB-O+SPCAD SET CURRENT SPBUF ADDRESS ABS JSB-O+PLOAD LOAD MAIN SYSTEM, RT RESIDENTS ABS JSB-O+PLOAD LOAD MAIN BG RESIDENTS ABS JSB-O+PLOAD LOAD BP LINKAGES JMP 3B,I TRANSFER TO RT MONITOR ENTRY PT. * PLOAD ABS 2000B-OO+START ADDRESS OR BOOT WHEN BBDL'ED ABS LDB-O+SPCAD+I+I GET LOW CORE ADRESS ABS ISZ-O+SPCAD #f INCR CURRENT SPBUF ADDRESS ABS LDA-O+SPCAD+I+I GET HIGH CORE ADRESS ABS ISZ-O+SPCAD INCR CURRENT SPBUF ADDRESS CMA,CCE,INA COMPLEMENT, SET DIRECTION BIT ADA B SET A = TOTAL WORD COUNT RBL,ERB SET DIRECTION BIT IN CORE ADDR CLC 2 OTB 2 SET MEMORY ADDRESS REGISTER ABS STA-O+RECNT INITIALIZE REMAINING COUNT ABS LDB-O+SPCAD+I+I GET THE DISK ADRESS ABS ISZ-O+SPCAD BUMP THE ADDRESS FOR NEXT LSR 7 TRACK IN B, SECTOR IN HIGH A ABS STB-O+T#ACK SAVE THE TRACK FOR LOOP SLOAD CLB LSR 10 PUT SECTOR IN LOW ABS STA-O+BENT SAVE THE SECTOR ABS LDA-O+T#ACK GET THE TRACK DIV -O+#HDS GET RELATIVE TRACK/HEAD DDIV EQU *-1 ABS ADA-O+TBASE ADD TRACK ZERO TO GET ABS. TRACK ABS STA-O+CYLA1 SAVE FOR ADDRESSING ABS STA-O+CYLA3 SAVE FOR ADDRESSING ABS ADB-O+BHD# ADD THE BASE HEAD ADDRESS ABS LDA-O+BENT GET SECTOR TO A BLF,BLF PUT HEAD IN HIGH B AND ABS ADB-O+BENT ADD THE SECTOR ABS STB-O+HDA SET THE HEAD/SECTOR ADDRESSES RSS SKIP OVER THE BBDL ADDRESS DEF ABS 2000B+BENT-OO DEFINE ADDRESS OF BENT ABS STB-O+HDA3 SET THE HEAD/SECTOR ADDRESSES LSL 7 SECTOR TIMES 128 CMA,INA AND SUBTRACT FROM ABS ADA-O+#WDTK NUMBER OF WORDS PER TRACK ABS STA-O+P#WDS SET POSITIVE # WORDS CMA,INA AND ABS STA-O+N#WDS NEGATIVE # WORDS THIS TRACK ABS LDA-O+RECNT GET NUMBER LEFT SSA,RSS IF POSITIVE ABS JMP-O+PLOAD+I+I DONE - SO EXIT * ABS ADA-O+P#WDS ELSE SET TO READ ABS STA-O+RECNT SAVE REMANING COUNT SSA NEXT TRACK CLA USE MIN. OF NUMBER ON TRACK OR ABS ADA-O+CN#WDS NUMBER LEFT STC 2 SET DMA FOR WORD COUNT OTA 2 AND SEND IT ABS LDB-O+D#PRM GET THE COMMAND SLOOP INB ADDRESS LDA B,I GET A COMMAND RAL,CLE,SLA,ERA IF SIGN BIT SET DSK10 CLC DC SEND COMMAND IS COMMING DSK11 OTA DC,C SEND THE COMMAND ABS CPB-O+A#DMA IF DMA STC 6,C START IT DSK12 STC DC ALLOW ATTENTION SEZ,RSS IF NOT A COMMAND ABS JMP-O+STDMA DON'T WAIT FOR FLAG * DSK13 SFS DC WAIT FOR THE FLAG ABS JMP-O+*-1 STDMA STF 6 STOP DMA IF NEEDED ABS CPB-O+A#END END OF LOOP? RSS SKIP IF END ABS JMP-O+SLOOP NOT END AROUND WE GO * DSK14 LIA DC,C GET STATUS 1 DSK15 SFS DC WAIT FOR FLAG ABS JMP-O+*-1 DSK16 LIB DC,C GET STATUS 2 ABS AND-O+C174B ISOLATE SZA,RSS IF NO ERRORS ABS JMP-O+OK CONTINUE * ABS CPA-O+C174B IF ATTENTION RSS SKIP HLT 31B ELSE HALT ABS JMP-O+START TRY AGAIN * OK ABS ISZ-O+T#ACK STEP THE TRACK ADDRESS ABS JMP-O+SLOAD GO LOAD (A=0=SECTOR ADDRESS) * * DATA AREA C174B OCT 17400 P#WDS DEC -128 N#WDS NOP WAK OCT 113000 SKCMD OCT 101200 CYLA1 NOP HDA NOP AD#RC OCT 106000 CYLA3 NOP HDA3 NOP FILM# OCT 107404 R#CMD OCT 102400 S#TAC OCT 101400 #HDS OCT 2 BHD# NOP TBASE NOP #WDTK DEC 6144 RECNT OCT 1500 CONFIGURED TO BBL ADDRESS SPCAD OCT 1500 CONFIGURED TO BBL ADDRESS D#PRM ABS WAK-O-1 A#DMA ABS R#CMD-O A#END ABS S#TAC-O ASPBF ABS ASPBF+1-O BSS 9 SYSTEM LOADING SPECIFICATIONS BENT NOP JSB HERE FROM BBDL T#ACK STF 6 CLEAN UP DMA CLC 0,C AND THE I/O SYSTEM HLT 77B DISABLbE THE LOADR ENABLE SWITCH AND RUN * DRBOT ABS LDA-OO+PLOAD+I+I MOVE 128 WORDS TO BBL-128 ABS STA-OO+RECNT+I+I ABS ISZ-OO+PLOAD ABS ISZ-OO+RECNT ABS ISZ-OO+P#WDS DONE? ABS JMP-OO+DRBOT NO GET NEXT WORD * ABS JMP-OO+SPCAD+I+I YES GO EXECUTE THE BOOT SKP * * * * THE FOLLOWING EQU SECTION ALLOWS THE BOOTSTRAP * TO BE LOCATED ANYWHERE IN CORE WHEN OUTPUT TO * DISK, BUT EXECUTABLE FROM THE LAST PAGE OF CORE. * * * O EQU START-1500B SET FOR START AT 1500 PAGE RELATIVE * CPB EQU 056000B CPB CPA EQU 052000B CPA LDB EQU 066000B LDB STB EQU 076000B STB ADB EQU 046000B ADB JSB EQU 016000B JSB ISZ EQU 036000B ISZ LDA EQU 062000B LDA STA EQU 072000B STA ADA EQU 042000B ADA AND EQU 012000B AND XOR EQU 022000B XOR JMP EQU 026000B JMP I EQU 040000B INDIRECT BIT (CODE AS I+I) * * THE FOLLOWING EQU ARE USE TO SET UP THE BBDL MOVE CODE * WHEN BOOTED BY THE BBDL THE LOADR IS LOADED TO 2011 * AND JSB'ED TO AT 2055,I (44 RELATIVE) * OO EQU START-11B RELATIVE PAGE LOCATION OF START HED MOVING HEAD PAPER TAPE BOOT STRAP * MOVING HEAD BOOTSTRAP * THIS BOOTSTRAP IS CONFIGURED AND PUNCHED BY THE GENERATOR AND IS * USED TO LOAD THE DISC RESIDENT BOOTSTRAP FROM SYSTEM TRACK * 0 SECTOR 0. SPC 2 STRAP DEF *+1 ADDRESS OF THE BOOT STRAP ABS BL256 LENGTH OF LOADR IN HIGH HALF OF WORD ABS BORG LOAD ADDRESS S#ART CLC 0,C STOP EVERTHING - RTE IS COMMING! LDA DSKDR-ADCON SET OTA 6 UP CLC 2 DMA LDB BADD-ADCON BUFFER ADDRESS OTB 2 LDA DM128-ADCON 128 WORDS STC 2 OTA 2 LDB P#LST-ADCON N#XT INB STEP ADDRESS N#XT1 LDA B,I GET THE COMMAND RAL,CLE,SLA,ERA IF A CLC IS NEEDED DSK1 CLC DC DO IT DSK2 OTA DC,C SEND THE WORD CPB P#DMA-ADCON DMA NOW? STC 6,C YES DSK3 STC DC ALLOW ATTENTION SEZ,RSS IF NOT A COMMAND JMP DMAST-ADCON DON'T WAIT FOR FLAG * DSK4 SFS DC WAIT FOR FLAG JMP *-1-ADCON * DMAST STF 6 CLEAR DMA CPB P#END-ADCON END OF LOOP RSS YES SKIP OUT JMP N#XT-ADCON NO DO NEXT WORD * DSK5 LIA DC,C GET THE STATUS 1 WORD DSK6 SFS DC WAIT FOR 2 JMP *-1-ADCON * DSK7 LIB DC,C GET STATUS 2 AND B174C-ADCON ISOLATE THE IMPORTANT BITS SZA,RSS IF OK JMP BADDD-ADCON,I GO EXECUTE THE BOOT * RBR,SLB,RBL TEST READY BIT JMP ATN#-ADCON NOT READY GO WAIT FOR ATTN. * CPA B174C-ADCON IF ATTENTION RSS JUST TRY AGAIN HLT 11B ELSE HALT JMS#A JMP S#ART-ADCON TRY AGAIN * ATN# LDB P#LST-ADCON GET 'END' COMMAND ADDRESS AND JMP N#XT1-ADCON GO SEND IT AND WAIT FOR ATTN. P#LST DEF *+1-ADCON ADDRESS OF COMMAND LIST OCT 112400 END COMMAND (WAITS FOR ATTN.) WA#KE OCT 113000 PT#SK OCT 101200 PT#TR NOP H#AD NOP PT#AD OCT 106000 PT#T2 NOP PT#H2 NOP OCT 107404 FILE MASK R#DCM OCT 102400 P#EN OCT 101400 STATUS COMMAND BADD ABS START-O+I+I THESE DSKDR ABS DC DMA CON WORD DM128 DEC -128 BADDD ABS START-O B174C OCT 17400 P#END ABS P#EN-ADCON P#DMA ABS R#DCM-ADCON SPC 1 HNDR JMP S#ART-ADCON MUST BE AT 100B WHEN LOADED * NOP LOCATION FOR CHECK SUM SPC 2 BORG EQU 100B+S#ART-HNDR RUN TIME ORG OF PAPER BOOT ADCON EQU HNDR-100B ADDRESS ADJUSTING CONSTANT. BL EQU HNDR-S#ART+1 BOOT LENGTH BL4 EQU BL+BL+BL+BL BOOT LENGTH TIMES 4 BL16 EQU BL4+BL4+BL4+BL4 TIMES 16 BL64 EQU BL16+BL16+BL16+BL16 TIMES 64 BL256 EQU BL64+BL64+BL64+BL64 TIMES 256 BOOTL ABS BL+3 LENGTH FOR PUNCHING NBLC ABS -BL-2 BOOT LENGTH FOR CHECK SUM CACULATION HED GENERATE $TB31 TRACKl8 MAP TABLE DSTB5 EQU * **ENTRY POINT FOR DSTBL** DSTBL NOP * GENERATE TB32 SPC 2 LDA ATB30 GET THE TABLE ADDRESS STA TBUF SET FOR INDEXING LDA #SUBC GET NUMBER OF WORDS CMA,INA SET NEGATIVE STA TBUF+1 SET COUNT LDB $TB32 GET THE LST ENTRY JSB LSTS FOR $TB32 JSB ABORT BAD NEWS NO $TB32 ????? LDB PPREL GET THE CORE ADDRESS FOR TABLE STB .LST5,I SET IN THE SYMBOL TABLE LDA TBUF+1 SEND THE SUBCHANNEL COUNT JSB LABDO FIRST * DSTB1 LDA TBUF,I GET WORD FROM TABLE JSB LABDO SEND TO DISC ISZ TBUF STEP TABLE ADDRESS LDA TBUF,I GET THE HEAD/UNIT WORD JSB LABDO SEND IT ISZ TBUF STEP TO THE # OF TRACKS WORD LDA TBUF,I AND JSB LABDO SEND IT ISZ TBUF STEP OVER THE SPARE WORD ISZ TBUF ISZ TBUF+1 STEP COUNT - DONE? JMP DSTB1 NO - GET NEXT ENTRY * STB PPREL RESET NEW CORE ADDRESS * * THE FOLLOWING REUSES THE TMT FOR BUILDING THE * GENERATOR HEADER RECORD, OVERLAYING $TB30. * HENCE, THE SYSTEM SUBCHANNEL DEFINITION IS FIRST * OBTAINED FROM IT, AND THAT INFO STORED IN THE FIRST * 6 WORDS (TO BE MOVED BY FSECT). * LDA SYSCH GET THE SYSTEM SUBCHANNEL MPY P4 POSITION TO ITS TB30 ENTRY ADA ATB30 STA TTEMP AND SAVE IT LDB A,I STB TB30 FIRST CYLINDER INA LDB A,I STB STEMP SAVE FOR LATER INA LDB A,I STB TB30+1 # TRACKS INA LDB A,I STB TB30+2 # SPARES LDA STEMP ALF AND M17 STA TB30+3 # SURFACES LDA STEMP ALF,ALF AND M17 STA TB30+4 STARTING HEAD LDA STEMP AND M17 STA TB30+5 UNIT # * JMP DSTBL,I RETURN SPC 3 $TB32 DEF *+1 ASC 3,$TB32 * HED 7905 RTGEN SUBROUTINE SEGMENT * * FSECT IS A ROUTINE TO SET LOAD SPECS IN THE LOAD SPEC. * TABLE IN THE DISC RESIDENT BOOT EXTENSION AND TO * FLUSH THE FINAL SECTOR FROM CORE AT THE END OF * GENERATION. * * CALLING SEQUENCE: * * LDA SPEC BUFFER ADDRESS I.E. ADDRESS OF THE NINE WORDS * JSB FSECT * RETURN REGS. MEANINGLESS * FSEC5 EQU * **ENTRY POINT FOR FSECT** FSECT NOP STA DSTBL SAVE THE ADDRESS FOR A BIT LDB ABOOT GET THE CLA,CCE BOOT FROM JSB DISKD THE DISC LDA DSTBL GET THE FROM ADDRESS LDB ASBUF AND THE TO ADDRESS JSB MOVW AND MOVE THE WORDS DEC -9 LDB ABOOT NOW WRITE CLA,CLE THE BOOT JSB DISKD BACK TO THE DISC CLE DLD OUBUF FLUSH THE FINAL BUFFER ELA,CLE FROM CORE JSB DISKD * * WRITE THE GENERATOR HEADER RECORD, STORED IN THE TMT BUFFER. * THE FIRST 6 WORDS MUST BE MOVED TO THEIR APPROPRIATE PLACE * FOLLOWING THE EQT DEF'S, AND THE SYSTEM CHANNEL INFO STORED * IN THESE FIRST 6 WORDS. * LDB ATB30 POSITION WITHIN HEADER RECORD LDA B ADB P6 ADB CEQT FOLLOWS THE EQT DEFS JSB MOVW MOVE THE 6 WORDS DEC -6 * LDA SYSCH STA TB30 THE SYSTEM SUBCHANNEL LDA DRT2 AND M77 STA TB30+1 " " EQT # LDA CEQT STA TB30+2 # EQT'S LDA PIOC STA TB30+3 PRIVILEGED INTERRUPT CHANNEL LDA TBCHN STA TB30+4 TBG CHANNEL LDA TB30+127 RETRIEVE FROM TEMP. STORAGE AND M77 STA TB30+5 TTY CHANNEL LDB ATB30 CMB,INB NEGATE IT SO DISKD WILL KNOW CLA,CLE JSB DISKD JMP FSECT,I SKP * * THE MOVW SUBROUTINE MOVES WORDS FROM ONE CORE LOCATION * TO ANOTHER * * CALLING SEQUENCE: * * LDA FROMyB@< ADDRESS * LDB TO ADDRESS * JSB MOVW * DEC -WORD COUNT * MOVW NOP STA TBUF LDA MOVW,I GET THE COUNT STA TBUF+1 SET IN COUNTER * MOVW2 LDA TBUF,I GET A WORD STA B,I SET IT INB ISZ TBUF STEP THE ADDRESSES ISZ TBUF+1 DONE? JMP MOVW2 NO DO THE NEXT ONE * ISZ MOVW STEP TO RETURN POINT JMP MOVW,I YES- RETURN M17 OCT 17 END EQU * * END BEG05 HB 9&` 92001-18033 1642 S 0122 &AN2F0 RTE-II 7900 DISC ANSWERS             H0101 &LISTF,,32767, * LIST FILE YES 30 * EST # TRACKS !SYSTM,,32767, * 9-14-76 7900 * TARGET DISC 11 203,0 * SUBCHANNEL 0 203,0 * SUBCHANNEL 1 /E 48 1 * SYSTEM SUBCHANNEL NO * AUX 10 * TBG 0 * PI YE * FG SWAPPING YE * BG SWAPPING YE * FG CORE LOCK YE * BG CORE LOCK 50 * SWAP DELAY 57677 * LWA MEM !BOOT,,32767, * BOOT FILE LINKS IN CURRENT MAP ALL REL,%CR2SY,,32767 REL,%SYLIB,,32767 REL,%LDR2,,32767 REL,%BMPG1,,32767 REL,%BMPG2,,32767 REL,%BMPG3,,32767 REL,%BMLIB,,32767 REL,%$CMD2,,32767 REL,%EDITR,,32767 REL,%DVR00,,32767 REL,%4DV05,,32767 REL,%DVR12,,32767 REL,%DVA12,,32767 REL,%DVR23,,32767 REL,%DVR31,,32767 REL,%ASMB,,32767 REL,%XREF,,32767 REL,%WHZT2,,32767 REL,%RT2G1,,32767 REL,%RT2G2,,32767 REL,%SWTCH,,32767 REL,%SAVE,,32767 REL,%RESTR,,32767 REL,%COPY,,32767 REL,%VERFY,,32767 REL,%DBKLB,,32767 REL,%RLIB1,,32767 REL,%RLIB2,,32767 REL,%FF4.N,,32767 /E D.RTR,3,1 WHZAT,3,1 ASMB,3,95 XREF,3,96 LOADR,3,97 EDITR,3,50 $$CMD,3 /E .MPY,RP,100200 .DIV,RP,100400 .DLD,RP,104200 .DST,RP,104400 /E 5 * BLANK ID SEGS 10 * BLANK BG SEG ID SEGS 100 * FWA BP 5 * I-O CLASSES 5 * LU MAPPINGS 5 * RN'S 100,400 * BUFFER LIMITS 11,DVR31,D * EQT 1 - 7900 13,DVR05,B,X=13,T=12000 * EQT 2 - 2644 16,DVR23,D,B,T=9999 * EQT 3 - 7970 MT 22,DVR02,B,T=50 ^  * EQT 4 - PUNCH 21,DVR12,B,T=100 * EQT 5 - 2767 LP 14,DVR00,B * EQT 6 - 2600 TTY 15,DVR01,T=50 * EQT 7 - PHOTOREADER 20,DVA12,B,T=100 * EQT 8 - 2607 LP /E 2,0 * LU 1 - 2644 CONSOLE 1,1 * LU 2 - 7900, UPPER 0 * LU 3 2,1 * LU 4 - CTU, LEFT 2,2 * LU 5 - CTU, RIGHT 8 * LU 6 - 2607 LP 6,0 * LU 7 - 2600 TERMINAL 3 * LU 8 - MT 7 * LU 9 - PHOTOREADER 1 * LU 10 - 7900, LOWER 4,4 * LU 11 - PUNCH 5,0 * LU 12 - 2767 LINE PRINTER /E 11,EQT,1 * 7900 DISC 12,EQT,1 * 7900 DISC 13,EQT,2 * 2644 CONSOLE 14,EQT,6 * 2600 CONSOLE 15,EQT,7 * PHOTOREADER 16,EQT,3 * 7970 MAG TAPE 17,EQT,3 * 7970 MAG TAPE 20,EQT,8 * 2607 LP 21,EQT,5 * 2767 LP 22,EQT,4 * PUNCH 77,EQT,5 * DUMMY !! /E 0 * LIBRARY ADDR 0 * FG COMMON 0 * FG RES ADDR 0 * FG DISC RES ADDR 720 * BP LINKAGE 0 * SYS AVMEM 32000 * BG BOUNDARY 0 * BG COMMON 0 * BG RES ADDR 0 * BG DISC RES ADDR e  :A 92001-18034 1805 S 0122 &AN2F5 RTE-II 7905/7920 DISC ANSWERS             H0101  &LISTF,,32767, * LIST FILE YES 30 * EST # TRACKS !SYSTM,,32767, * 02-1-78 7905 * TARGET DISC(7905\7920) 11 203,0,0,2,0,3 * SUBCHANNEL 0 203,103,0,2,0,3 * SUBCHANNEL 1 203,206,0,2,0,3 * SUBCHANNEL 2 203,309,0,2,0,1 * SUBCHANNEL 3 203,0,2,1,0,3 * SUBCHANNEL 4 203,206,2,1,0,2 * SUBCHANNEL 5 203,0,3,1,0,3 * SUBCHANNEL 6 203,206,3,1,0,2 * SUBCHANNEL 7 203,0,4,1,0,3 * SUBCHANNEL 8 203,206,4,1,0,2 * SUBCHANNEL 9 1024,411,0,5,0,6 * SUBCHANNEL 10 1024,617,0,5,0,6 * SUBCHANNEL 11 /E 48 0 * SYSTEM SUBCHANNEL NO * AUX DISC 10 * TBG 0 * PI YE * FG SWAPPING YE * BG SWAPPING YE * FG CORE LOCK YE * BG CORE LOCK 50 * SWAP DELAY 57677 * LWA MEM !BOOT,,32767, * BOOT FILE LINKS IN CURRENT MAP ALL REL,%CR2SY,,32767 REL,%SYLIB,,32767 REL,%LDR2,,32767 REL,%BMPG1,,32767 REL,%BMPG2,,32767 REL,%BMPG3,,32767 REL,%BMLIB,,32767 REL,%$CMD2,,32767 REL,%EDITR,,32767 REL,%DVR00,,32767 REL,%4DV05,,32767 REL,%DVR12,,32767 REL,%DVA12,,32767 REL,%DVR23,,32767 REL,%DVR32,,32767 REL,%ASMB,,32767 REL,%XREF,,32767 REL,%WHZT2,,32767 REL,%RT2G1,,32767 REL,%RT2G2,,32767 REL,%SWTCH,,32767 REL,%SAVE,,32767 REL,%RESTR,,32767 REL,%COPY,,32767 REL,%VERFY,,32767 REL,%DBKLB,,32767 REL,%RLIB1,,32767 REL,%RLIB2,,32767 REL,%FF4.N,,32767 /E D.RTR,3,1 WHZAT,3,1 ASMB,3,95 XREF,3,96 LOADR,3,97 EDITR,3,50 $$CMD,3 /E .MPY,RP,100200 .DIV,RP,100400 .DLD,RP,104200 .DST,RP,104400 /E 5 * BLANK ID SEGS 10 * BLANK BG SEG ID SEGS 100 * FWA BP 5 * I-O CLASSES 5 * LU MAPPINGS 5 * RN'S 100,400 * BUFFER LIMITS 11,DVR32,D * EQT 1 - 7905\7920 13,DVR05,B,X=13,T=12000 * EQT 2 - 2644 16,DVR23,D,B,T=9999 * EQT 3 - 7970 MT 22,DVR02,B,T=50 * EQT 4 - PUNCH 21,DVR12,B,T=100 * EQT 5 - 2767 LP 14,DVR00,B * EQT 6 - 2600 TTY 15,DVR01,T=50 * EQT 7 - PHOTOREADER 20,DVA12,B,T=100 * EQT 8 - 2607 LP /E 2,0 * LU 1 - 2644 CONSOLE 1,0 * LU 2 - 7905\7920, SUBCHANNEL 0 0 * LU 3 2,1 * LU 4 - CTU, LEFT 2,2 * LU 5 - CTU, RIGHT 8,0 * LU 6 - 2607 LP 6,0 * LU 7 - 2600 TERMINAL 3 * LU 8 - MT 7 * LU 9 - PHOTOREADER 1,1 * LU 10 - 7905\7920, SUBCHANNEL 1 4,4 * LU 11 - PUNCH 5,0 * LU 12 - 2767 LINE PRINTER 1,2 * LU 13 - 7905\7920, SUBCHANNEL 2 1,3 * LU 14 - 7905\7920, SUBCHANNEL 3 1,4 * LU 15 - 7905\7920, SUBCHANNEL 4 1,5 * LU 16 - 7905\7920, SUBCHANNEL 5 1,6 * LU 17 - 7905\7920, SUBCHANNEL 6 1,7 * LU 18 - 7905\7920, SUBCHANNEL 7 1,8 * LU 19 - 7905\7920, SUBCHANNEL 8 1,9 * LU 20 - 7905\7920, SUBCHANNEL 9 1,10 * LU 21 - 7905\7920, SUBCHANNEL 10 1,11 * LU 22 - 7905\7920, SUBCHANNEL 11 /E 11,EQT,1 * 7905\7920 DISC 13,EQT,2 * 2644 CONSOLE 14,EQT,6 * 2600 CONSOLE 15,EQT,7 * PHOTOREADER 16,EQT,3 [ * 7970 MAG TAPE 17,EQT,3 * 7970 MAG TAPE 20,EQT,8 * 2607 LP 21,EQT,5 * 2767 LP 22,EQT,4 * PUNCH 77,EQT,5 * DUMMY!! /E 0 * LIBRARY ADDR 0 * FG COMMON 0 * FG RES ADDR 0 * FG DISC RES ADDR 720 * BP LINKAGE 0 * SYS AVMEM 34000 * BG BOUNDARY 0 * BG COMMON 0 * BG RES ADDR 0 * BG DISC RES ADDR  ;C 92001-18035 1806 S C0422 &DVA05 RTE DVR 264X MODEM             H0104 ASMB ***RTE 264X MODEM TERMINAL DRIVER*** * NAME: DVA05 * SOURCE: HP 2640 \2645 RTE DVA05 92001-18035 * RELOC.: HP 26Xx RTE DVA05 92001-16035 * * PRMR: B.B. * * SOURCE FILE &DVA05 * RELOC. FILE %DVA05 * ***************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSALATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ***************************************************************** * ****DVA05 WILL WORK WITH 2640A,B\2644\2645\2648 * * *2.1 INPUT/OUTPUT INTERFACE * * DVA 05 WILL COMMUNICATE WITH THE 26XX VIA THE 12966 BUFFERED * ASYNCHRONOUS DATA COMMUNICATION INTERFACE CARD. DVA 05 WILL ALSO * FUNCTION WITH A 2640A FOR THOSE APPLICATIONS WHERE THE CTU IS * NOT REQUIRED. COMMUNICATION FROM THE 2644A/2640A KEYBOARD MAY BE * IN EITHER CHARACTER OR BLOCK MODE. THE TERMINAL CAN BE USED WITH * "LINE STRAPPING", OR "PAGE STRAPPING" AND HENCE A SINGLE LINE OR * THE ENTIRE DISPLAY MEMORY CAN BE TRANSMITTED AFTER BEING ENABLED. * * *2.2 MAJOR FUNCTIONS * * DVA 05 PROVIDES THE FOLLOWING MAJOR FUNCTIONS: * 1. I/O CONTROL OF CARTRIDGE TAPE UNIT (CTU),CRT,AND TERMINAL PRINTER. * 2. READ OR WRITE REQUEST TO CTU WITH BINARY OR ASCII DATA. * 3. READ OR WRITE REQUEST TO KEYBOARD AND DISPLAY. * 4. STATUS REQUEST TO CTU AND KEYBOARD. * 5. CONSOLE OR TERMINAL USE. * 6. WRITE REQUEST TO TERMINAL PRINTER (2644 2645 ONLY) * 7. MODEM INITIALIZATION * * *2.2.1 CTU CONTROL REQUEST * *ICNWD (CONTROL LEFT OR RIGHT CTU AS SELECTED BY LOGICAL UNIT NUMBER) * 01-WRITE END OF FILE * 02-BACKSPACE 1 RECORD * 03-FORWARD SPACE 1 RECORD * 06-DYNAMIC STATUS * 14-BACKSPACE 1 FILE * 13-FORWARD SPACE 1 FILE * v" 4,5-REWIND * 27-LOCATE FILE. THIS IS AN ABSOLUTE FILE NUMBER. * 26-WRITE END OF VALID DATA (EOV) * 10-WRITE EOF IF NOT JUST WRITTEN OR NOT AT BOT * * *NOTES ON CTU CONTROL REQUEST * * A. A REWIND, BACKSPACE RECORD, OR BACKSPACE FILE WILL PERFORM * NO ACTION IF THE TAPE UNIT IS AT LOAD POINT. THIS CONDITION * WILL BE SET IN THE STATUS WORD (BIT 6 SET). * B. IF THE END-OF-TAPE MARK IS SENSED DURING A WRITE OPERATION, * AN END OF VALID DATA MARK WILL BE RECORDED AUTOMATICALLY. IF * A WRITE REQUEST WAS BEING PROCESSED, THE CURRENT RECORD WILL * BE RECORDED. IF A READ REQUEST WAS IN PROCESS THE CURRENT * RECORD WILL BE READ. THIS CONDITION WILL BE SET IN THE STATUS * WORD. * C. FOR FILE MOTION COMMANDS THE TAPE IS POSITIONED AFTER THE * FILE MARK. * D. READ REQUESTS WILL BE REJECTED IF THE TAPE IS AT EOV. THE * EOV MAY BE OVERWRITTEN WITH DATA OR A FILE MARK UNLESS THE * TAPE IS AT END-OF-TAPE. * E. AN INVALID FUNCTION CODE WILL CAUSE THE DRIVER TO EXIT WITH * A REG.=2 THRU IA05. IF THE FUNCTION CODE IS VALID, EXIT IS * THRU CA05 WITH A REG.=0. * * F. DYNAMIC STATUS PUTS THE STATUS OF THE LAST LEFT OR RIGHT * CTU OPERATION IN EQT 5. * * *2.2.2 CRT CONTROL REQUEST * *ICNWD * 11-SPACE "IPRM" LINES -IPRM PG. EJECT 9871 ONLY * 20-ENABLE TERMINAL. ALLOWS TERMINAL TO SCHEDULE PROGRAM WHEN KEY IS * STRUCK. * 21-DISABLE TERMINAL. INHIBIT SCHEDULING OF TERMINAL'S PROGRAM. * 22-SET NEW TIME OUT (IN OPTIONAL PARAMETER) * 23-CLEAR THE OUTPUT QUEUE (BUFFER FLUSH). * 24-RESTORE OUTPUT PROCESSING. REQUIRED ONLY IF SOME OF BUFFER IS * TO BE SAVED. * 25-UPDATE TERMINAL STATUS * 30-TERMINAL MODEM CONTROL * 31-LINE CONTROL FOR MODEMS * 32-AUTOANSWER FOR MODEMS *2.2.3 CTU READ/WRITE REQUEST * * -READ/WRITE FROM LEFT OR RIGHT CTU AS SELECTED BY LOGICAL UNIT * NUMBER. * -IF T7HE OPERATION FAILED, RETURN WILL BE THROUGH CA05 WITH A=1 * AND B=O. *ICNWD * * 6 -0/1 IS ASCII/BINARY * 10-0/1 IS NOT HONEST/HONEST * * -BINARY INPUT IS A STRING OF CHARACTERS SPECIFIED BY THE BUFFER * LENGTH PARAMETER IN THE REQUEST. IF THE REQUIRED LENGTH IS FILLED * BEFORE A END-OF-RECORD (EOR) IS ENCOUNTERED, THE REMAINING DATA * IS IGNORED AND THE CTU WILL STOP AT THE NEXT EOR. IF A EOR IS * ENCOUNTERED BEFORE THE REQUIRED LENGTH IS FILLED THE CTU WILL * HALT IN THE EOR. BINARY EOR IS DETECTED BY THE REQUEST TO SEND * LINE MOMENTARILY GOING NOT READY. IF BUFFER LENGTH=0, THEN SKIP * ONE RECORD. * -BINARY OUTPUT IS A STRING OF CHARACTERS SPECIFIED BY THE BUFFER * LENGTH PARAMETER IN THE REQUEST. MAXIMUM RECORD LENGTH IS 128 * WORDS. THIS LIMIT IS SET BY THE CTU DATA BUFFER. IF THIS LENGTH * IS EXCEEDED, OR IF BUFFER LENGTH=0, RETURN IS A REG.=1 THRU IA05. * -ASCII INPUT IS A STRING OF CHARACTERS TERMINATED BY A CARRIAGE * RETURN (CR). IF THE REQUIRED LENGTH IS FULFILLED BEFORE A CR * IS INPUT, THE REMAINING CHARACTERS ARE IGNORED. IN ANY CASE, A * CR CODE MUST BE INPUT. * -ASCII OUTPUT IS A STRING OF CHARACTERS SET BY THE BUFFER LENGTH. * MAXIMUM RECORD LENGTH IS 127 WORDS (CR IS SENT BY DVA 05). THE * DRIVER WILL TERMINATE THE REQUEST IF IT SEES A "CR", "LF" OR "RS". * THE DRIVER USES THE "CR" AS A RECORD TERMINATOR ON INPUT * AND THE 26XX USES THE "LF" AS RECORD TERMINATOR ON OUTPUT.A "RS" * IS PASSED TO THE DRIVER WHEN THE CTU ENCOUNTERS A FILE GAP. * * *2.2.4 ASCII OUT TO DISPLAY * * -ASCII OUTPUT IS A STRING OF CHARACTERS, THE NUMBER OF WHICH IS * DESIGNATED BY THE BUFFER LENGTH. THE STRING IS TERMINATED BY A * CARRIAGE RETURN AND LINE FEED (BOTH SUPPLIED BY DRIVER). * -IF AN UNDERSCORE (ASCII 137) IS THE LAST CHARACTER IN THE NEW * BUFFER, THE CARRIAGE RETURN, Lc<INE FEED AND UNDERSCORE CODES ARE * NOT OUTPUT TO THE CRT. * -BUFFER LENGTH SHOULD BE LIMITED TO 80 DISPLAYABLE CHARACTERS. * -THE CURSOR WILL REMAIN IN COLUMN 80 IF CURSOR END-OF-LINE WRAP * AROUND STRAP IS NOT IN. OTHERWISE AN AUTOMATIC CR LF ARE GENERATED. * -HONEST MODE WRITE THE CR AND LF ARE NOT OUTPUT. AN UNDERSCORE * WILL ALWAY BE OUTPUT TO DISPLAY IF IN BUFFER. * * -BINARY WILL STRIP "ESC" * *2.2.5 ASCII INPUT FROM KEYBOARD CHARACTER MODE * * THE DRIVER DETECTS WHETHER A CHARACTER MODE OR BLOCK MODE REQUEST * WILL FOLLOW BY EXAMINING THE FIRST CHARACTER. IF IT IS A DC2 * THEN THE DRIVER ASSUMES THE ENTER KEY HAS BEEN PRESSED AND A * BLOCK TRANSMISSION IS PENDING. THE DRIVER RESPONDS WITH A DC1 TO * TRIGGER THE BLOCK TRANSFERS. IF THE FIRST CHARACTER IS NOT A DC1 * THEN THE DRIVER ASSUMES A CHARACTER TRANSFER IS PENDING. * IN CHARACTER MODE THE TERMINAL TRANSMITS A CHARACTER AT A TIME AS * THE KEY IS DEPRESSED. THE RECORD TERMINATION IS A CR OR RS. THE * DRIVER ECHOS A LF. * A RECORD TERMINATOR MUST BE ENTERED TO COMPLETE REQUEST, EVEN IF THE * USERS BUFFER IS FULL. TRANSMISSION LOG IS RETURNED IN B REG. * THERE ARE TWO TYPES OF CHARACTER MODE PROCESSING: HONEST AND NON-HONEST * A. HONEST * ALL CHARACTERS EXCEPT CR AND RS SENT TO USERS BUFFER. * B. NON-HONEST * THE DRIVER WILL PROCESS THE BELOW SPECIAL CHARACTERS: * *DEL (RUBOUT) ASCII 177 * ENTERING DEL WILL DELETE THE CURRENT RECORD AND CAUSE (\, * CRLF)TO BE OUTPUT. THIS IS USED TO DELETE THE CURRENT LINE * AND START A NEW LINE. * *BACKSPACE ASCII 10 * ENTERING BACKSPACE WILL DELETE THE LAST CHARACTER. THE * TERMINAL WILL LOCALLY MOVE THE CURSOR BACK ONE POSITION. * *LINEFEED ASCII 12 * THIS WILL NOT BE SENT TO USER'S BUFFER. * * CNTROL D ASCII 40 * ENTERING CONTROL D WILL CAUSE BIT 5 TO BE xPSET IN TERMINAL * STATUS WORD AND TRANSMISSION TERMINATED WITH B REG. = 0. THIS * BIT WILL BE CLEARED UPON NEXT ENTRY. * * *2.2.6 ASCII INPUT FROM KEYBOARD BLOCK MODE * * IN BLOCK MODE THE TERMINAL TRANSMITS EITHER A LINE AT A TIME (LINE * STRAPPING) ON A PAGE (PAGE STRAPPING). THE DRIVER DETERMINES TYPE * OF STRAPPING BY A TERMINAL STATUS REQUEST. * A. LINE STRAPPING * THE TERMINATOR IS A CR WHICH IS NOT PASSED TO USER'S * BUFFER. IMBEDDED RS'S ARE NOT PASSED. * B. PAGE STRAPPING * THE TERMINATOR IS A RS WHICH IS NOT PASSED TO USER'S BUFFER. THE * LINE SEPARATORS CR, LF ARE PASSED TO USER'S BUFFER. * C. A "US"OR "RS" IS NEVER PASSED TO BUFFER UNLESS TRANS. READ * D. BLOCK READS ARE OF 2 TYPES: * 1. TERMINAL ENABLED (ENTER PRESSED) * 2. USER ENABLED ("ESC" SMALL "D" SENT BY USER) * * *2.2.7 CTU STATUS REQUEST (RETURNED IN EQT5) * * BIT * 7 -END OF FILE SENSED. A FILE MARK HAS BEEN DETECTED DURING A PRIOR * READ OPERATION OR A FILE MARK HAS JUST BEEN RECORDED. * 6 -LOAD POINT SENSED. CARTRIDGE TAPE IS AT OR BEFORE LOAD * POINT MARKER. MEANINFUL ONLY IF CARTRIDGE IS INSERTED. * 5 -END OF TAPE SENSED. THE CARTRIDGE TAPE HAS PASED OVER EARLY * WARNING MARKER IN THE TAPE AND AN END-OF-VALID DATA MARK HAS BEEN * RECORDED AUTOMATICALLY. COMMANDS DIRECTING FORWARD MOTION OF TAPE * WILL BE REJECTED. THIS STATUS ONLY HAS MEANING IF A CARTRIDGE IS * INSERTED. * 4 -READ\WRITE ERROR.WRITE 2645 ONLY * A READ ERROR EXISTS IF THREE SUCCESSIVE ATTEMPTS FAILED TO READ * THE DATA IN THE RECORD. THE TAPE IS POSITIONED AFTER THE BAD * RECORD. * 3 -LAST COMMAND ABORTED. THE LAST COMMAND INITIATED FROM THE CPU OR * KEYBOARD WAS UNSUCCESSFULLY PERFORMED. OTHER STATUS CONDITIONS * MAY BE CHECKED FOR CAUSE. * 2 -WRITE PROTECTED. THE FILE PROTECT TAB ON THE CARTRIDGE IS IN THE * POSITION TO PROHIBIT RECORDING OF DATA. THIS STATUS ONLY HAS * MEANING IF A CARTRIDGE IS INSERTED AND A RECORDING OPERATION HAS * BEEN ATTEMPTED. * 1 -END OF VALID DATA. THE CARTRIDGE TAPE DETECTED AN END-OF-VALID * DATA MARK DURING A PRIOR READ OR SEARCH OPERATION OR HAS JUST * COMPLETED RECORDING AN END-OF VALID DATA MARK. IN EITHER CASE, * THE TAPE IS POSITIONED BEFORE THE END-OF VALID DATA MARK. RECORDING * OPERATIONS MAY BE EXECUTED TO OVERWRITE THIS MARK WITH DATA * OR A FILE MARK, UNLESS THE TAPE IS AT END OF TAPE. * 0 -CARTRIDGE NOT INSERTED OR UNIT BUSY. * * *2.2.8 CRT STATUS REQUEST (RETURNED IN EQT5) * * BIT * 1 -TERMINAL ENABLED. IF THE STATUS WORD IS FOR A TERMINAL (NOT A * SYSTEM CONSOLE) TYPING ANY KEY WILL SCHEDULE THE TERMINAL'S * PROGRAM (IF IT HAS ONE). * 5 -CONTROL D ENTERED. THE USER HAS HIT THIS KEY. * 7 -BUFFER FLUSH IN PROGRESS * 3 -PARITY ERROR * 4 -DATA SET N.R. * * * *2.2.9 CONSOLE OR TERMINAL USAGE. * * IF AT GENERATAION THE 26XX IS IDENTIFIED AS A TERMINAL (VIA THE * INTERRUPT TABLE) THEN STRIKING A KEY WILL SCHEDULE THE PROGRAM * ASSOCIATED WITH THAT TERMINAL IF THE TERMINAL HAS BEEN ENABLED * VIA A CONTROL REQUEST. * IF THE 26XX IS A CONSOLE THEN STRIKING A KEY WILL GET THE SYSTEM'S * ATTENTION AND A "*" PROMPT WILL BE WRITTEN. * * REV.1805 FIXED SPURIOUS INT. ON POWER UP * REV.1806 FIXED T BIT KEYBOARD ENTRY * AND CHANGED WRITE T.O. TO 4 SEC ****************************************** * SUBROUTINE IS ALWAYS ENTERED TO * * INITIALIZE A SYSTEM OR USER REQUEST TO * * ANY 264X SUBSYSTEM. * ****************************************** * * NAM DVA05 92001-16035 REV. CODE 1806 1-17-78 ENT IA05,CA05 EXT $LIST,$UPIO,$OPSY IA05 NOP STA TEM12 SAVE SELECT CODE CLB STB TEMP5 SET IA05 CA05 POINTER JSB SETIO CONFIGURE IO CLB DO NOT MOVE STB EQT20,I * ** DVA STB EQT25,I RESET CN31 FLAG LDA EQT28,I CLR PARITY AND DATA SET ERROR BITS AND BN51 IN TERMINAL STATUS STA EQT28,I ** SFS01 SFS CARD IF FLAG SET THEN POWER FAIL JMP IA055 FLAG NOT SET IA054 JSB XMIT SET UP TO CLR INTERRUPT LDA BN5 CLR ALL CARD INTERRUPTS IA053 JSB OUT2 (0-377) CPA BN7 IS THIS ALL? JMP IA055 YES! FINISHED INA JMP IA053 DO IT AGAIN IA055 LDA EQT16,I FOR BINARY CTU READ AND BN1 CLR SELECTED BITS STA EQT16,I BIT 0 (0\1=TERM.STAT. READ NO\YES) * * * LDA EQT17,I GET THE SCHEDULE FLAG. SZA IS IT DEFINED? JMP IA051 YES, CONTINUE LDA TEM12 SET UP SCHEDULE FLAG . ADA B.6 INDEX INTO INTERRUPT TABLE ADA INTBA GET SCHEDULE WORD.IF WORD NEG. LDB A,I THEN ID SEG. OF PROG. TO SCHED. CMB,SSB,INB CHANGE SIGN OF WORD. CCB NO PROG. TO BE SCHED. (INT. POINTS TO EQT) STB EQT17,I SAVE FOR FURTURE REFERENCE. LDB EQT1 SET EQT ADDRESS IN INTERRUPT STB A,I TABLE LDA EQT4,I SET THE "I WILL HANDLE IOR BN4 TIME OUT" BIT IN STA EQT4,I EQT4.RESTORE WORD. JMP IA054 GO CLEAR ALL SPECIAL INTERRUPTS * * ***************************************************** * "B.X" IS NEG. BINARY NO., "D.X" IS NEG. DECIMAL NO* * "BN" IS SOME BINARY NO. * * SEE BELOW. * ***************************************************** * BN1 OCT 137767 BN4 OCT 10000 BN7 OCT 60377 BN5 OCT 60000 * BN51 OCT 177747 DVA05 BN70 OCT 173777 B32 OCT 32 DVA05 B100 OCT 100 B.6 OCT 177772 * * TEM13 NOP CARD STATUS ON INTERRUPT TEM12 NOP SELECT CODE * * IA051 JSB CDINT ************************************************ ************************************************ * * SWH1A NOP SWITCH CRT \CTU ,LP= RSS\NOP * JMP I.251 YES! A CTU OR LP REQUEST LDA TEMP4 GET REQUEST TYPE RAR THIS IS A CRT REQUEST SSA,SLA JMP IA05C THIS IS A CONTROL REQUEST. ** DVA JSB LINCK CHECK MODEM STATUS LINES ** LDA TEMP4 GET REQUEST TYPE SLA,RSS JMP IA05W THIS IS A WRITE REQUEST JMP IA05R THIS IS A READ REQUEST * ****************************************************************** * SUBROUTINE INITIALIZES THE COMPLETION SECTION * * FOR ALL COMPLETION INTERRUPTS. * * ****************************************************************** * * CA05 NOP STA TEM12 SAVE SELECT CODE DVA05 ISZ TEMP5 SET CONT. FLAG JSB SETIO CONFIGURE IO ** LDA EQT20,I CHECK FOR $UPIO ENTRY CPA BN71 FROM LINCK JMP $UPIO ** CLC01 CLC CARD GET CARD STATUS LIA01 LIA CARD STA TEM13 STORE CARD STATUS AND B40 CHECK FOR BUFFER OVERFLOW ** SZA,RSS HAS IT OVER FLOWED? JMP *+3 IT HAS NOT SWH2E NOP HARD \ MODEM = 0\RSS ** JMP EOOP9 HARD OVERFLOW (B=3,XMISSON ERROR) *** LDA TEM13 CHECK FOR SPURIOUS BRK. INT. AND B100 SZA JMP EXIT5 SPURRIOUS INTERRUPT *** LDA EQT1,I GET QUE WORD SZA IS A REQUEST IN PROCESS? JMP *+3 YES! JSB SCHED NO REQUEST IN PROCESS.FIND OUT JMP EXIT5 WHAT HAPPENED AND EXIT LDA EQT4,I ALF CHECK FOR TIME OUT ENTRY SSA IS THIS TIME OUT (BIT 11) ? JMP TIMOT YES! LDB EQT11,I GET INTERRUPT ADDRESS JMP B,I GOTO IT * ********************************************* J* IS CALLED FOR ALL TIMEOUT * * PROCESSING * ********************************************* * ** DVA ** TIMOT LDA EQT25,I CHECK FOR CN31 ENTRY CPA B32 JMP CN31B YES IT IS JSB CDINT REINITIALIZE IO CARD JSB SETEM GO ENABLE CONSOLE *** LDA B4 LDB TEM10 GET DEVICE TYPE. IF CRT/GRAPHICS ADB B.60 CHECK FOR CRT SZB,RSS CLA THIS IS A CRT DO NOT DOWN JMP CA05,I *** * ***************************************************** * IS CALLED WHENEVER AN INTERRUPT OCCURS AND* * NO PROGRAM IS SCHEDULED (I.E. USER HITS A KEY TO * * GET THE SYSTEM'S ATTENTION * ***************************************************** * * SCHED NOP JSB CLRCD GET CHAR. OFF CARD CLA STA EQT15,I SET T.O. TO 0 LDB EQT1 IS THIS THE SYSTEM CONSOLE? CPB SYSTY JMP OPFLG YES! GO SET OPERATOR FLAG LDB EQT17,I GET TERMINAL ID ADD. LDA EQT28,I IS TERMINAL ENABLED? RAR,SLA SSB YES! IT IS ENABLED JMP SCHED,I IT IS NOT STB TEMP1 *** LDB EQT4 GET ADDRESS OF THIS TERMINAL'S EQT4 STB TEM7 JSB $LIST GO SCHEDULE IF POSSIBLE OCT 601 SCHEDULE PARAMAETER TEMP1 NOP TEM7 NOP JMP SCHED,I RETURN *** * OPFLG ISZ OPATN SET OPER. ATTN. FLAG JMP SCHED,I EXIT * ************************************************* * DOES CONTROL REQUEST PROCESSING FOR * * THE KEYBOARD\DISPLAY. * ************************************************* * *******TERMINAL STATUS****************************** * BIT STATUS * * 1 TERMIAL ENABLED * * 3 PARITY ERROR * BLOCK READ ONLY * 5 "CONTROL D" ENTERED * * 7 BUFFER FLUSH ENABLED * * * **************************************************** * * *******CRT CONTROL********************************** * EXEC CODE CRT CONTROL REQUEST * * 11 SPACE LINES * 20 ENABEL TERMINAL * * 21 DISABLE TERMINAL * * 22 SET TIME OUT * * 23 SET BUFFER FLUSH * * 24 REMOVE BUFFER FLUSH * * 25 UPDATE TERM. STATUS * 30 TERMINAL MODEM CONTROL * 31 MODEM LINE * * 32 AUTO ANSWER FOR MODEM * * **************************************************** * IA05C LDA EQT6,I GET CONTROL WORD LSR 6 SHIFT LDB EQT7,I SSB,RSS CMB,INB COMPLEMENT OPTIONAL PARAMETER AND B37 ISOLATE CON TROL PARAMETER * CPA B11 JMP CN11 GO SPACE LINES CPA B20 JMP CN20 GO ENABLE TERMINAL CPA B21 JMP CN21 GO DISABLE TERMINAL CPA B22 JMP CN22 GO SET TIME OUT CPA B23 JMP CN23 GO SET BUFFER FLUSH CPA B24 JMP CN24 GO REMOVE BUFFER FLUSH ** DVA *** CPA B25 GET TERMINAL STATUS JMP CN25 *** CPA B30 JMP CN30 GO SET TERMINAL MODEM CONTROL CPA B31 JMP CN31 GO SET MODEM LINE OPEN/CLOSE CPA B32 JMP CN32 * ********************REJECT REQUEST****************** CLA JMP IOR19 ** * * B11 OCT 11 LF OCT 12 B37 OCT 37 B20 OCT 20 B21 OCT 21 B22 OCT 22 B23 OCT 23 B24 OCT 24 B25 OCT 25 B2 OCT 2 B.3 OCT 177775 B200 OCT 200 B17 OCT 17 B70 OCT 70 B30 OCT 30 DVA05 B31 OCT 31qB@< DVA05 B.60 OCT -60 DVA05 BN61 OCT 14000 DVA05 BN67 OCT 174037 DVA05 BN68 OCT 163777 DVA05 BN73 OCT 77776 * **SPACE LINES***** **MAX NO. IS 55** * CN11 SZB,RSS CHECK FOR 0 VALUE CCB CHANGE TO -1 STB EQT7,I ADB B70 MAX NO. OF (CR,LF'S) IS 55 SSB BECAUSE CARD BUFFER IS 128 JMP REJ2 JSB CDINT MASTER RESET JSB EORP OUTPUT (CR,LF) JSB EXIT1 !!!!!!!!!!!!!!!!! JSB ENAK GIVE TERM. TIME TO PROCESS ISZ EQT7,I JMP *-5 * CN11B CLA STA EQT19,I SET A REG. EXIT JMP EOOP4 JMP EOOP4 DVA * * DVA * CN11C CLA MODEM LINE EXIT JMP CA05,I * * * **GO ENABLE TERMINAL(BIT 1 OF EQT 19)** * CN20 LDA EQT17,I IF -1 THEN NO PROG. TO SCHED. INA,SZA OR "0" INTO EQT28 IF NO PROG. LDA B2 SET BIT 1 (TERM. ENABLED) IOR19 IOR EQT28,I CONSTRUCT NEW STATUS WORD ST19 STA TEM8 STA EQT28,I RESTORE JSB STPUT PUT IT IN EQT5 JMP REJ2 GO EXIT A=2 * **GO DISABLE TERMINAL** * CN21 LDA B.3 AND19 AND EQT28,I REMOVE BIT 1 JMP ST19 * **GO SET NEW TIME OUT** * CN22 STB EQT14,I B REG. HAS NEW TIME OUT.STORE IT. JMP REJ2 * **GO SET BUFFER FLUSH (BIT 7 OF EQT28)** * CN23 LDA B200 SET BIT7 IN EQT28 JMP IOR19 * **GO REMOVE BUFFER FLUSH** * CN24 LDA BN27 REMOVE BIT 7 JMP AND19 *** UPDATE TERMINAL STATUS CN25 LDA EQT16,I AND BN73 CLEAR BIT0 AND 15 STA EQT16,I mB*^^^^FIRST LINE OF TAPE 2^^^** JSB TERST GET STATUS JMP CN11B *** ** DVA ** TERMINAL MODEM CONTROL** * * BITS MEANING * 0-3 BAUD RATE * 4 PARITY EVEN\ODD =1\0 * 5 PARITY ON\OFF =1\0 * 8 LINE TYPE MODEM\HARD = 1\0 * CN30 CMB,INB BLF,BLS MAKE POS. AGAIN AND SHIFT LEFT 5 TO BITS 5-10,13 LDA EQT16,I AND BN67 CLR OLD INFO. IOR B STA EQT16,I JMP REJ2 * ** LINE OPEN\CLOSE ** * CN31 SZB LINE OPEN (OPT. PARM. NON ZERO) CN31C LDB BN61 LINE OPEN. BN61 IS OCT 14000 (11,12) LDA EQT16,I LINE OPEN SET CA AND CD AND BN68 CLR OLD INFO. IOR B STA EQT16,I LDA B32 SET LINE CONTROL FLAG IN EQT25 STA EQT25,I B32 IS CB,CC,CF SZB,RSS SET LINE CONTROL REF. IN CLA IN EQT 24 STA EQT24,I JSB SETIO CONFIGURE CARD CONTROL WORD 4 JSB CDSET SET CONTROL WORD 4 CN31A LDA BN31 SET TIMEOUT 2 SEC AND EXIT STA EQT15,I JSB EXIT1 JSB EXIT1 DVA * * CN31B JSB CHRIN GET MODEM LINE STATUS.IF OPEN WAIT FOR LDB EQT7,I CHECK FOR LINE CLOSE LDA TEMP9 GET CARD STATUS SZB,RSS IF LINE CLOSE MASK CC FOR 202T MODEM AND BN55 AND B32 IF OPEN LOOK FOR CB,CC,CF CPA EQT24,I JMP CN11C GOTO LINE EXIT JMP CN31A IN NOT O.K. TRY AGAIN * * CN32 LDA BN69 SET CE REF. =0 JSB OUT2 LDA ENCE ENABLE RING INT. JSB OUT2 ENABLE RING INTERRUPT STA EQT7,I SET LINE OPEN CLA CLR TIMEOUT STA EQT15,I JSB EXIT1 WAIT FOR RING CLB,INB SET FOR LINE OPEN JMP CN31C GO CHECK STATUS LINES ** * **********EQT6 FOR READ\WRITE***************** * * EQT6 FOR READ\WRITE OPERATIONS IS: * * BIT MEANING K * * 6 0\1 IS ASCII\BINARY * * 8 0\1 IS OFF\ON ECHO * * 10 0\1 OFF\ON HONEST MODE * * 9 AND 10 SET USER ENABLED BLOCK READ * * ********************************************** * * IA05W CLB,RSS SETUP EQT9(RUNNING CHAR. ADD.) AND I05W1 NOP EQT 10 (LAST CHAR. ADD.) LDA EQT7,I GET BUFFER STARTING ADDRESS RAL,CLE MULTIPLY S.A. BY TWO STA EQT9,I STORE AT EQT9 LDA EQT8,I GET BUFFER LENGTH CMA,SSA,INA,RSS COMPLEMENT,ARE THEY CHAR.? JMP I.W1 YES! CMA,INA MAKE POS AGAIN RAL MULTIPLY WORDS X 2 AND * I.W1 ADA EQT9,I STA EQT10,I STORE LAST CHAR. ADD. AT EQT10,I CMA,INA MAKE LAST CHAR. ADD. NEG. ADA EQT9,I - NO. OF CHAR. ARE NOW IN A REG. SZB JMP I05W1,I SZA,RSS IS IT 0 ? JMP I.W32 YES! IT IS ZERO * *** LDA TEM11 IS THIS GRAPHICS? CPA B3 SUBCHANNEL 3 JSB GRAPH *** JSB TRAN1 GOTO OUTPUT SUBROUTINE * LDA TEMP2 IS THIS HONEST MODE? SZA,RSS * I.W32 JSB EORP THIS IS NOT HONEST JSB EXIT1 !!!!!!!!!!!!!!!!! JSB ENAK JMP EOOP2 ABOVE NEEDED FOR INTERRUPT * * ********************************************** * WRITES TO THE DISPLAY,CTU AND PRINTER. * STARTING ADDRESS OF DATA IS EQT9,I * * "TEMP1" COUNTS THE NUMBER OF CHAR. IN ONE * * TRANSMISSION AND IS USED TO LIMIT THE TIME * * IN THE DRIVER FOR A SINGLE INTERRUPT. * * IF BUFFER IS NOT EMPTIED IN 1 CALL TO WE* * WILL WAIT FOR A BUFFER EMPTY INTERRUPT AND * * COMPLETE THE TRANSMISSION. * ************************************************** * * TRAN1 NOP LDA TRAN1 SAVE RETURN ADDRESS STA EQT19,I TRAN4 JSB XMIT SET CARD FOR XMIT LDB BN2 SET FOR 33 CHAR.MAX STB 6TEMP1 IN ONE TRANSMISSION * TRAN2 LDB EQT9,I GET BUFFER ADDRESS X 2 CLE,ERB DIVIDE BY TWO TO GET TRUE ADD. * LDA B,I GET WORD SEZ,RSS DO WE WANT UPPER OR LOWER CHAR.? ALF,ALF UPPER! SHIFT TO LOWER AND B377 LOWER! MASK WORD * SWH1B NOP CRT\CTU=RSS\NOP JMP TRAN3 YES! IGNORE BELOW CHECKS * * LDB FILL DO NOT SEND "ESC" TO CRT ON SZB BINARY WRITE. JMP ON1 CPA ESC IS THIS AN ESCAPE? JMP OUT6B * ON1 CLB,INB SET B REG TO 1 ADB EQT9,I ADD 1 TO EQT9 CPB EQT10,I IS THIS THE LAST WORD? RSS JMP OTA18 NO! CONTINUE LDB TEMP2 IS THIS HONEST? SZB JMP OTA18 THIS IS HONEST,IGNORE UNDERSCORE CPA B137 IS THIS A "_" UNDERSCORE? JMP EOOP8 YES! GO TO END OF OUTPUT PROCESSING JMP OTA18 TRAN3 LDB FILL IS THIS BINARY? SZB,RSS JMP OTA18 THIS IS BINARY,OUTPUT CHARACTER CPA CR IS IT A ? RSS CPA LF IS IT A LINEFEED? RSS IT IS A CPA RS IS IT A JMP TRAN5 YES,TERMINATE ON OROR * OTA18 OTA CARD OUT6B ISZ EQT9,I INCREMENT CHAR. COUNT LDB EQT9,I GET CURRENT CHAR. ADD.R CPB EQT10,I HAVE WE SENT LAST WORD? JMP TRAN5 THIS IS THE LAST CHARACTER ISZ TEMP1 INCREMENT CHAR. COUNT. JMP TRAN2 WE HAVE NOT SENT 33 CHAR. JSB EXIT1 WE HAVE SENT 40 CHAR. *** LDA FILL CHECK FOR BINARY SZA JSB ENAK IT IS NOT JSB CDINT !!!!!! *** JMP TRAN4 NOW THAT CARD BUFFER IS EMPTY,RESTART TRAN5 LDA EQT19,I GET RETURN ADDRESS JMP A,I RETURN * * *************************************************** * DOES KEYBOARD READ. IF FIRST CHARACTER * * A "DC2" THE DRIVER EXPECTS A BLOCK TRANSFER AND * * WILL SEND A DC1 TO TRIGGER IT. IF THE FIRST * * CHAR. IS NOT A "DC2" THE DRIVER ASSUMES A CHAR. * * TRANSFER. *************************************************** * * IA05R CLB,INB JSB I05W1 GO SETUP EQT9 AND EQT10 JSB TERST GO CHECK TERMINAL STATUS LDA EQT6,I CHECK IF ECHO SET AND B400 ISOLATE BIT 8 (SET ECHO) RAR,RAR MOVE TO BIT 4 RAR,RAR JSB ECHO SET/CLR = 20/0 ECHO JSB SPCH1 SET CR AND RS INT. LDB BN9 SET RUBOUT INT. JSB CDSET LDB BN40 SET CONTROL "D" INT. JSB CDSET LDA EQT6,I CHECK FOR USER ENABLED BLOCK READ AND B3000 BITS 9,10 WILL BE SET CPA B3000 JMP C05R3 THIS IS ENABLED BLOCK READ JSB DC1OT ENABLE TRANSFER CLB,INB JSB CDSET SET CARD FOR RECEIVE,CHAR.MODE JSB EXIT1 WAIT FOR INTERRUPT * JSB CHRIN GET CHARACTER CPA B22 IS IT A DC2? JMP C05R3 FIRST CHAR. IS A DC2 * * *******THIS IS A CHARACTER TRANSFER********* * * LDA TEMP2 IS THIS HONEST? SZA JSB CLRNT CLB LDA FILL IF BINARY KEYBOARD SET FOR CHAR. REC. SZA,RSS INB IT IS BINARY KEYBOARD JSB CDSET SET BLOCK OR CHAR RECEIVE (B=0\1) LDB BN2 SET CHAR. PROCESS COUNT. FOR 33 CHAR. STB TEM9 FOR ONE INTERRUPT. JMP CHPR8 * * CLRNT NOP LDB BN56 CLR. RUBOUT INT. JSB CDSET LDB B412 CLR. CONTROL "D" INT. JSB CDSET JMP CLRNT,I * B6 OCT 6 RS OCT 36 B377 OCT 377 B137 OCT 137 CR OCT 15 BN9 OCT 57712 BN10 OCT 40000 BN13 OCT 140000 BN40 OCT 40412 B177 OCT 177 B4 OCT 4 B1400 OCT 1400 B3000 OCT 3000 B1512 OCT 1512 B3612 OCT 3612 BN56 OCT 17712 B412 OCT 412 * * ***********THIS IS A BLOCK TRANSFER********* * * C05R3 LDA EQT16,I THIS IS A BLOCK ^TRANSFER IOR BN10 SET BIT 14 =0/1 CHAR/BLK STA EQT16,I RESTORE SSA IS TERMINAL LINE STRAPPED? JMP C05R4 NO! IT IS PAGE STRAPPED * LDA EQT6,I CHECK FOR USER ENABLED BLOCK READ AND B3000 CPA B3000 JMP C05R5 *** LDA TEM14 GET CHAR. COUNT +1 AND B1400 IF 3 CR HAS ARRIVED CPA B1400 RSS JSB EXIT1 WAIT FOR CR JSB CHRIN GET CR *** JMP C05R5 * C05R4 LDB B1512 REMOVE CR INT. FOR PAGE (RS ONLY) JSB CDSET STRAP AND BLOCK MODE JMP C05R6 * * * WAS ADDED FOR THE 2645 * C05R8 LDB CHPC2 STB EQT11,I SAVE RETURN ADDRESS LDB FILL IF BINARY CLR ALL INTERRUPTS LDA BN20 IF ASCII DO NOT CLR SPEC. CHAR. INTERRUPT SZB LDA BN30 DO NOT CLR. SPEC. CHAR. INT. JSB OUT2 JMP STC04 * * C05R5 LDB B3612 REMOVE "RS" INT. ("CR" ONLY FOR LINE) JSB CDSET FOR ASCII CTU, LINE STRAP AND BLOCK * C05R6 JSB CLRNT CLA JSB ECHO TURN OFF ECHO JSB DC1OT TRIGGER TRANSFER C05R7 JSB EXIT1 AND WAIT FOR INTERRUPT * * ********************************************** * PROCESSES DATA ON KEYBOARD AND CTU * * READ REQUESTS. "TEM9" COUNTS THE NUMBER * * OF CHARACTERS WE HAVE PROCESSED AND IS USED* * TO LIMIT THE TIME WE ARE IN THE DRIVER. * * FOR ASCII READS THE EOR IS DETECTED BY * * LOOKING FOR THE SPECIAL CHAR. BIT SET ON * * THE 12966 CARD. * FOR BINARY EOR IS DETECTED BY THE CHAR. * * COUNT READ FROM THE TAPE. * ********************************************** * * CHPRC LDA BN2 SET CHARACTER PROCESS. COUNT TO -33 STA TEM9 CHPCC JSB CHRIN GET CHARACTER ** LDB TEM14 GET COMPLETE DATA WORD CPB B400 IF BUFFER EMPTY WAIT FOR MORE DATA JMP C05R8 SSB,RSS IF NON VALID WAIT FOR MORE JMP C05R8 ** CHPR8 LDB FILL SZB,RSS IS THIS BINARY? JMP CHPR9 YES,THIS IS BINARY * ********THIS IS ASCII******* * * * LDA TEM14 GET DATA WORD AND BN10 ISOLATE SPEC. CHAR. BIT SZA,RSS IS IT SPECIAL? JMP CHPR2 NO * SWH1C NOP SWITCH NOP\RSS =CTU\CRT JMP EOOP5 THIS IS CTU ASCII TRANSFER LDA EQT16,I GET TERMINAL STATUS AND BN13 ISOLATE PAGE(15) AND BLK(14) CPA BN13 ARE THEY BOTH SET? JMP EOOP2 YES,TERMINATE REQUEST LDA TEMP8 GET CHARACTER CPA B177 IS IT A RUBOUT? JMP RUB01 YES! GO PROCESS RUBOUT CPA B4 IS IT A CONTROL "D" (SET EOT) JMP CNTLD YES! GO SET EOT CHP9 JSB CDINT !!!!!!!!!!! JSB EORP FOR CHAR. OR LINE STRAP BLK REQUES !!!!!!! JMP EOOP1 FIRST SEND * * CHPR2 LDA EQT16,I * ** DVA LDB TEMP9 CHECK STATUS WORD FOR PARITY BLF,BLF RBL,RBL MOVE TO SIGN POSITION ** AND BN10 ISOLATE CHAR\BLK BIT SZA IS IT BLOCK MODE? JMP CHPRA YES! SKIP BELOW CHECKS ** DVA SWH1D NOP CRT\CTU=RSS\NOP JMP CHPRA GOTO CHPRA FOR CTU SSB CHECK FOR PARITY ERROR JMP RUB01 ERROR ** * LDA TEMP2 IS THIS HONEST MODE? SZA JMP CHPR9 THIS IS HONEST MODE LDA TEMP8 GET CHARACTER JMP LINFD CHAR. TRANSFER AND NOT HONEST ******************************************** * IS CALLED IF RUBOUT INTERRUPT IS * * DETECTED. IT DELETES THE CURRENT RECORD * * AND OUTPUTS (/,CR,LF). * ******************************************** * * RUB01 JSB CDINT !!!!!!!!!!!!!!! LDA B134 JSB OUT1 SEND A "\" JSB EORP GO OUTPUT JSB EXIT1 EXIT WAITING FOR BUFFER EMPTY INTERRUPT JMP IA051 RE START INPUT * LINFD CPA LF IS THIS A LINEFEED? JMP CHPRC YES,GO GET NEXT CHARACTER CPA CR IS THIS A CR ? JMP CHP9 YES! IT IS A CR,EXIT CPA B4 IS FIRST CHAR. A CONTROL "D" ? JMP CNTLD YES! * CPA B10 IS THIS A BACKSPACE RSS RSS JMP CHPR9 NO! CONTINUE LDA EQT7,I GET STARTING ADDRESS OF BUFFER RAL MULTIPLY BY 2 CPA EQT9,I ARE WE AT STARTING ADDRESS? JMP RUB01 YES! PROCESS AS RUBOUT CCB ADB EQT9,I DECREMENT CURRENT ADDRESS STB EQT9,I CLE,ERB DIVIDE BY TWO TO GET TRUE ADDRESS LDA B,I GET ADDRESS IS A REG. AND BN31 MASK HIGH END ADA FILL ADD ASCII FILL CHARACTER STA B,I RESTORE JMP CHPR6 GO GET NEXT CHARACTER * * TEMP2 NOP HONEST MODE =2000 TEMP8 NOP ASCII DATA WORD TEMP9 NOP CARD STATUS FILL NOP BINARY\ASCII = 0\40 TEM9 NOP CHAR COUNT TEM14 NOP COMPLETE DATA WORD B134 OCT 134 BN30 OCT 50037 B40 OCT 40 B60 OCT 60 OENCE OCT 10000 BN2 OCT 177737 * CNTLD LDA B40 SET BIT 5 (EOT) IOR EQT28,I IN TERMINAL STATUS STA TEM8 CLA STA EQT19,I SET AREG. EXIT JMP EOOP4 GO SET B REG. TO 0 AND EXIT * * CHPRA SSB JSB P.ERR *** *** LDA TEMP8 ** CPA B37 REMOVE "US" RSS CPA RS REMOVE "RS" JMP CHPR6 CHPR9 LDB EQT9,I GET CURRENT CHAR. ADD. CPB EQT10,I IS BUFFER FULL? JMP CHPR6 YES BUFFER FULL LDA TEMP8 GET CHARACTER LDB EQT9,I GET CHARACTER ADDRESS ISZ EQT9,I INCREMENT CLE,ERB CONVERT TO WORD ADDRESS. SEZ,RSS IF E=0 THEN EVEN AND ALF,SLA,ALF HENCE SHIFT CHAR. TO UPPER 8.SKIP XOR B,I IF ODD ADDRESS XOR WITH CHAR. XOR FILL XOR FILL TO ADD FILL IF EVEN STA B,I REPLACE FULL WORD  LDB EQT9,I IS THIS THE LAST WORD? CPB EQT10,I RSS YES IT IS JMP *+5 LDA FILL IF BINARY KEYBOARD REQUEST AND BUFFER ADA TEM10 FULL THEN EXIT CPA B60 JMP EOOP2 YES! EXIT ** ** CHPR6 ISZ EQT20,I INCREMENT RECORD LENGTH COUNT.FOR RSS CTU BINARY READ ONLY. *** JMP CHPR5 THIS IS ALL FOR BINARY READ *** ISZ TEM9 INCREMENT BUFFER COUNT JMP CHPCC IF NOT ZERO GET ANOTHER CHAR. LDB CHPC2 SETUP INTERRUPT RETURN STB EQT11,I STF01 STF CARD SET FLAG FOR IMMEDIATE INTERRUPT JMP EXIT4 THIS IS ALL WE CAN PROCESS,EXIT * CHPC2 DEF CHPRC * CHPR5 LDA OENCE KILL CE INTERRUPT JSB OUT2 JMP EOOP5 *************************************************** * DOES CTU AND PRINTER REQUEST PROCESSING * *************************************************** * * * * DVA I.251 JSB LINCK * LDA TEMP4 RAR SSA,SLA JMP I.25C THIS IS CTU OR LP A CONTROL REQUEST SSA JMP I.25R THIS IS CTU A READ REQUEST * *********CTU OR PRINTER WRITE REQUEST********** * CLB,INB JSB I05W1 GO SET EQT9 AND EQT10 LDB FILL SZA IS CHARACTER COUNT ZERO? JMP I25W6 NO! IT IS NOT ZERO SZB,RSS IS IT BINARY JMP REJ1 EXIT WITH A=1 I25W6 SZB IF BINARY MAX LENGTH IS D 256 JMP *+3 FOR ASCII MAX LENTH IS D 254 (NEDED CR,LF) ADA B400 RSS ADA D254 THIS IS ASCII SSA LESS THAN 254 CHARACTERS JMP REJ1 IT IS NOT,THEREFORE EXIT * * JSB CTPRP GO PREP. TERMINAL FOR TRANSFER LDA B144 JSB OUT1 OUTPUT LDA FILL GET FILL CHARACTER SZA IS IT BINARY? JMP I25W2 NO! THIS IS ASCII * ***********CTU BINARY WRITE******** * LDA EQT8,I GET BUFFER LENGTuH SSA,RSS IF WORDS MULTIPLY X2 RAL SSA IF CHARACTERS (-) MAKE POS. CMA,INA JSB BINAS GO CONVERT TO ASCII AND SEND * * I25W2 LDA B127 OUTPUT TO INITIALIZE CTU TRANSFER JSB OUT1 * JSB EXIT1 GO EXIT AND WAIT FOR INTERRUPT * LDA FILL IS THIS BINARY SZA,RSS JSB ENAK THIS IS BINARY,GO HANDSHAKE JSB CDINT LDB EQT8,I GET WORD COUNT SZB IS IT ZERO?(ASCII ONLY,BINARY CHECKED * JSB TRAN1 ALREADY).IT IS NOT ZERO LDA FILL GET FILL CHAR. SZA IS IT BINARY JSB EORP NO! THIS IS ASCII,WRITE A "CR,LF" I25W5 JSB EXIT1 &&&&FOR INTERRUPT JSB CDINT JSB SPCH1 JSB DC1OT GO TRIGGER STATUS REPORT JSB EXIT1 WAIT FOR INTERRUT * * JSB CHRIN GET STATUS CHARACTER * STA TEM7 JSB CLRCD GET THE "CR" LDA TEM7 CPA B106 FAILURE? JMP I25W7 YES CLA RSS I25W7 LDA B10 SET BIT 3 IN EQT5 FOR PRINT FAIL LDB TEM10 IS THIS A PRINTER? CPB B64 JMP EOOP6 THIS IS A PRINTER JMP EOOP7 THIS IS A CTU * * D254 DEC 254 B144 OCT 144 B127 OCT 127 B163 OCT 163 B122 OCT 122 B62 OCT 62 B106 OCT 106 * * ***********THIS IS A CTU READ REQUEST******** * * CONTROL CODE FUNCTION I.25R LDB TEM10 IF READ FROM PRINTER REJECT CPB B64 JMP REJ1 LDB EQT8,I GET BUFFER LENGTH SZB,RSS IS IT ZERO? JMP CN3C YES --GO SKIP ONE RECORD CLB,INB NO!, IT IS NOT ZERO JSB I05W1 GO SET UP EQT9,EQT10 JSB CTPRP GO PREP. TERM. FOR CTU TRANSFER LDA B163 STA TEMP2 SET HONEST FLAG I25R1 JSB OUT1 OUTPUT LDA FILL IS THIS BINARY? SZA,RSS IS THIS BINARY? JMP I25R2 YES! THIS IS BINARY I25R3 LDA AB122 OUTPUT JSB OUT1 JSB EXIT1 * * THIS IS ASCII JSB SPCH1 SET AND INTERRUPTS JMP C05R6 GO TRIGGER TRANSFER FOR ASCII * * ****THIS IS BINARY READ***** * I25R2 LDA B62 OUTPUT <2> I25R6 JSB OUT1 LDA B122 OUTPUT JSB OUT1 JSB EXIT1 #### JSB CDINT #### JSB SPCH1 SET FOR INTERRUPT JSB DC1OT TRIGGER BYTE COUNT JSB EXIT1 EXIT AND WAIT FOR INTERRUPT * LDA B.4 INITIALIZE TO READ 4 BYTES STA TEM9 CLA I25R5 ALF SHIFT UP STA TEMP1 AND STORE JSB CHRIN GET CHARACTER CPA RS IS IT A" RS"? JMP EOOP5 YES,THIS IS ALL AND B17 ISOLATE DATA IOR TEMP1 "OR" WITH LAST BYTE ISZ TEM9 IS THIS ALL?? JMP I25R5 NO! GET NEXT BYTE CMA,INA THIS IS ALL,COMPLEMENT STA EQT20,I STORE BINARY RECORD LENGTH. JSB CLRCD JSB CDINT !!!!!!!!!!!!!! JSB DC1OT TRIGGER TRANSFER ** DVA SWH2B NOP NOP\RSS = HARD\MODEM JMP I25R7 LDB B5 SET CHAR. RECEIVE JSB CDSET JMP C05R7 DVA * I25R7 LDA ENCE ENABLE RING INTERRUPT JSB OUT2 FOR BINARY EOR DETECTION JMP C05R7 * * * ***************************************************** * * * * * PRINTER * * 11 SPACE