:ST,S,$TC01,5 
ASMB,R,L,C
      NAM TCS,7 
      HED ***TCS - 4/75***
      EXT EXEC
      ENT ENTR,.PQ,.CQ,.LU
      ENT TCS 
      ENT .TB,TB
      ENT .MORS,.RST
      ENT .LOGP,.PRR
A     EQU 0 
B     EQU 1 
      SPC 5 
* 
* 
* TERMINAL CONTROL SYSTEM 
* 
*     THIS IS A SCHEDULER FOR PROCESSING I/O REQUESTS IN
*     A FAST, EFFICIENT MANNER.  I/O CALLS WHICH WOULD
*     NORMALLY GO TO THE EXEC IN DOS-M WILL COME HERE 
*     INSTEAD.  THE SCHEDULER CALLS ARE PATTERNED AFTER 
*     DOS-M EXEC CALLS, I.E., THE PARAMETERS ARE SIMILAR. 
* 
* 
      HED ***EQUATE TABLES*** 
* 
* 
* LOGICAL UNIT TABLE.   THIS IS AN INTERNAL TABLE WITH A 3
* -------------------   WORD ENTRY FOR EACH I/O DEVICE. 
* 
*   WORD  CONTENTS OF ONE TABLE ENTRY.
*   ----  ----------------------------
*     1   0 (FREE), -1 (LOCKED,FREE), CALLER RETURN ADDR. (BUSY)
*     2   PARAMETER (15-8)   LOCK BIT (7)   SEGMENT # (6-0) 
*     3   MAIN RETURN ADDRESS 
* 
LUL   EQU 3          LENGTH OF ONE ENTRY. 
LUMR  EQU LUL-1      OFFSET TO MAIN RETURN ADDRESS. 
LUSN  EQU LUMR-1     OFFSET TO PARAM & SEG #. 
LULM  OCT 200        LOCK FLAG SET MASK.
LULC  OCT 177577     LOCK FLAG CLEAR MASK.
LUTL  EQU 48
*               LU    BSS 144        INITIALIZED TO ZERO BY REPS
      UNL 
LU    REP 144 
      OCT 0 
      LST 
.LU   DEF LU         ADDRESS OF LU TABLE. 
.CLU  OCT 0          ADDRESS OF CURRENT LU ENTRY. 
      SPC 2 
* 
* PENDING QUEUE.        A BUFFER SUPPLIED BY THE USER, LARGE
*                ENOUGH FOR HIS APPLICATION.  OVERFLOW WILL 
*                CAUSE AN ERROR RETURN TO THE USER. THE 
*                USER SHOULD ESTABLISH SENSITIVITY CRITERIA TO
*                AVOID OVERFLOW CONDITIONS.  FOR EXAMPLE, PRIOR 
*                TO MAKING A BLOCK OF REQUESTS, THE CURRENT ENTRY 
*                POINTER COULD BE COMPARED TO THE 3/4 FULL
*                ADDRESS.  IF THE QUEUE IS THAT FULL, THEN WAIT 
*                UNTIL THE SYSTEM IS LESS BUSY. 
* 
*   WORD  CONTENTS OF ONE PENDING QUEUE ENTRY.
*   ----  ------------------------------------
* 
* SEE USER MANUAL FOR QUEUE ENTRY FORMAT
* 
* 
PQL   EQU 9          LENGTH OF PENDING QUEUE ENTRY. 
PQLM  DEC -9        DECREMENT VALUE = -PQL. 
MAXPQ BSS 1          MAXIMUM # OF PQ ENTRIES. 
PQC   BSS 1          ADDRESS OF CURRENT PQ COUNT. 
.PQ   BSS 1          ADDRESS OF PQ TABLE (INIT. SEG.).
CPQE  BSS 1          ADDRESS OF THE CURRENT PQ ENTRY
PRIOR OCT 0       FOR PRIORITY LEVEL
*                                  ADDRESS. 
.PRR  EQU PRIOR 
      SPC 2 
* 
*   CURRENT QUEUE DEFINTION.
* 
CQL   EQU LUTL       # OF ENTRIES IN CURRENT QUEUE. 
*               CQ    BSS 48         INITIALIZED TO ZERO BY REPS
      UNL 
CQ    REP 48
      OCT 0 
      LST 
.CQ   DEF CQ         ADDRESS OF CQ TABLE. 
.CCQ  OCT 0          ADDRESS OF CURRENT CQ ENTRY. 
CCQE  DEF CQ         FIRST FREE ENTRY IN CQ.
      SPC 2 
* 
*   CURRENT CORE ALLOCATION DESCRIPTORS.
* 
MORS  DEC -1         MAIN(-1) OR SEGMENT(0) EXECUTING.
SEG   OCT 0          # OF SEGMENT NOW IN CORE.
CSEG  OCT 0          SEGMENT DIRECTORY ADDRESS FOR SEG. 
CMR   OCT 0          MAIN RETURN ADDRESS FRO SEG. 
CEC   OCT 0          CURRENT EXEC CALL REQUEST CODE.
CREQ  OCT 0          REQUEST CODE.
.MORS EQU MORS
      SPC 2 
* 
*   RETURN DESCRIPTORS. 
* 
RFLG  OCT 0          RETURN FLAG.  0 => NO RETURN.
FRET  OCT 0          FINAL RETURN ADDRESS.
RS#   OCT 0          RETURN SEGMENT #.
RSDA  OCT 0          RETURN SEG. DIRECTORY ADDRESS. 
RPAR  OCT 0             "   PARAMETER.
RST   OCT 0             "   STATUS. 
RLOG  OCT 0          TRANSMISSION LOG FOR XFER. 
.RST  DEF RST 
      SPC 1 
* 
*   USER TABLE DESCRIPTION. 
* 
.SD   OCT 0          SEG DIRECTORY ADRESS.
SDL   EQU 11          SEGMENT DIRECTORY ENTRY LENGTH
UFDS  EQU 3     FILE DIRECTORY ENTRY LENGTH 
.FD   DEF FD        FILE DIRECTORY ADDR.
* 
*  IN CORE DIRECTORY DEFINITION 
* FOR FILES 
*  WORD 1 - TRACK/SECTOR (8/8)
*  WORD 2 - USER DISC SUBCHANNEL
* WORD 3 - FILE LENGTH IN SECTORS 
* 
* 
* THE FOLLOWING ARE SET UP AFTER INITIALISATION.
* 
NSEG  OCT 0          NUMBER OF USER SEGMENTS. 
      UNL 
FD    REP 48
      OCT 0 
      LST 
*             FD    BSS 48
      HED ***CALLING SEQUENCES*** 
* VALID REQUEST CALLS 
* ------------------- 
* 
*   NOTE:  FOR ASSEMBLY LANGUAGE PROGRAMS, THE ADDRESSES OF THE 
*          VARIABLES MUST BE PASSED, NOT THE VARIABLES THEMSELVES.
*          THIS CONFORMS TO HP FORTRAN FORMAT.
* 
      SPC 1 
* INITIALIZE        (REQ. CODE = 82)
*     JSB TCS 
*     DEF *+9 
*     DEF RCODE     REQUEST CODE. 
*     DEF PQ        START OF PENDING QUEUE BUFFER.
*     DEF MAXPQ     MAX. NUMBER OF PQ ENTRIES.
*     DEF PQCNT     VARIABLE = CURRENT # OF PQ ENTRIES. 
*     DEF SNAM      SEGMENT NAME ARRAY (3 WORD NAMES).
*     DEF SNUM      NUMBER OF SEGMENTS. 
*     DEF SDIR      SEGMENT DIRECTORY (11 WORDS PER SEGMENT). 
* 
* 
* OPEN FILE REQUEST ( REQ. CODE = 84 DECIMAL) 
*     JSB TCS 
*     DEF *+4 
*     DEF RCODE 
*     DEF FNAM      ARRAY (3 WORDS) HOLDING FILE NAME 
*     DEF FNUM      RELATIVE NUMBER IN FILE DIRECTORY 
* 
* 
* PRIORITY LEVEL CHANGE REQUEST 
*     JSB TCS 
*     DEF *+3 
*     DEF RCODE      REQUEST CODE = 71(DECIMAL) 
*     DEF PRITY      PRIORITY ( RANGE= 0 TO 15) 
* 
* 
* READ/WRITE        (REQ. CODE = 1-READ/2-WRITE)
***NOTE: IN ALL I/O CALLS, BUFFER LENGTH MUST BE NON-ZERO***
*     JSB TCS 
*     DEF *+6 OR 7 OR 8 OR 9
*     DEF RCODE     ADDRESS OF REQUEST CODE.
*     DEF CONWD     ADDRESS OF CONTROL WORD (AS IN DOS-M BIT 15=1LOC) 
*     DEF BUFFR     ADDRESS OF USER BUFFR (IN COMMON CORE)
*     DEF BUFFL     ADDRESS OF TRASFER LENGTH(WORDS+ BYTES-)
*     DEF DTRAK     ADDRESS OF DISK TRACK VARIABLE (OPTIONAL) 
*     DEF DSECT     ADDRESS OF DISK SECTOR VARIABLE (OPTIONAL)
*     DEF IDENT     SEE LATER 
*     DEF IRET      SEE LATER 
* 
* 
* I/O CONTROL       (REQ. CODE = 3) 
*     JSB TCS 
*     DEF *+5 OR 6
*     DEF RCODE     ADDRESS OF REQUEST CODE.
*     DEF CONWD     ADDR.OF CONTROL WORD(AS DOS-M BUT BIT15=1 LOCK) 
*     DEF PARAM     ADDR OF OPTIONAL PARAM (AS IN DOS-M)
*     DEF IDENT     SEE LATER 
*     DEF IRET      SEE LATER 
* 
* SEGMENT LOAD      (REQ. CODE = 8) 
*     JSB TCS 
*     DEF *+3 OR 4
*     DEF RCODE     ADDRESS OF REQUEST CODE.
*     DEF SEGN      RELATIVE # OF SEG. DIR. ENTRY (1 TO N). 
*     DEF PRITY      PRIORITY TO BE ASSIGNED TO SEGMENT ( OPTIONAL) 
* 
* FILE READ/WRITE   (REQ. CODE = 14-READ/15-WRITE)
*     JSB TCS 
*     DEF *+8 OR 9
*     DEF RCODE     ADDRESS OF REQUEST CODE.
*     DEF CONWD     ADDRESS OF CONWD (AS DOS-M BUT BIT15=1 IS LOCK) 
*     DEF BUFFR     ADDRESS OF BUFFER 
*     DEF BUFFL     ADDRESS OF BUFFER LENGTH (WORDS+ BYTES-)
*     DEF FNUM       RELATIVE # OF FILE DIR. ENTRY (1 TO N).
*     DEF RSECT     ADDRESS OF VARIABLE HOLDING RELATIVE SECTOR 
*     DEF IDENT     SEE LATER 
*     DEF IRET      SEE LATER 
* 
* 
* UNLOCK I/O DEVICE (REQ. CODE = 52)
*     JSB TCS 
*     DEF *+3 
*     DEF RCODE     ADDRESS OF REQUEST CODE.
*     DEF LU        ADDRESS OF VARIABLE HOLDING LOG.UNIT #
* 
* 
* SUSPEND TILL I/O  (REQ. CODE = 53)
*     JSB TCS 
*     DEF *+2 
*     DEF RCODE      ADDRESS OF REQUEST CODE. 
* 
* IN-LINE RETURN TO MAIN   (REQ. CODE = 54) 
*     JSB TCS 
*     DEF *+2 
*     DEF RCODE     ADDRESS OF REQUEST CODE.
* 
* STATUS CALL       (REQ. CODE = 79)
*     JSB TCS 
*     DEF *+6 
*     DEF RCODE      ADDRESS OF REQUEST CODE. 
*     DEF STATS      FOR RETURNED STATUS. 
*     DEF PARAM      FOR ORIGINAL PARAM. IN USER CALL.
*     DEF LUN        FOR LOGICAL UNIT #.
*     DEF LOG        TRANSMISSION LOG (WORDS XMITTED).
* 
* PAUSE 
*     JSB TCS         REQUEST CODE =1 
*     DEF *+6 
*     DEF RCODE 
*     DEF ILU          ILU=77 OCTAL 
*     DEF 1 
*     DEF 1 
*     DEF IDENT        SEE LATER
* 
* 
* 
* "IDENT" IS THE VARIABLE HOLDING A PARAMETER (VALUE  0-256)
* WHICH IS AVAILABLE TO THE USER IN A STATUS CALL 
* 
*  "IRET" IS A VARIABLE USED WITH I/O WITHOUT WAIT CALLS, IT
* CONTAINS THE ADDRESS TO BE CALLED WHEN I/O IS COMPLETE
* 
      HED ***DEBUG TABLE*** 
* 
* THE FOLLOWING TABLE IS MERELY TO HELP USERS DEBUG PROGRAMS
* 
.TB   DEF TB
TB    NOP      # OF CALLS TO TCS
TB1   NOP      # OF I/O CALLS TO TCS
TB2   NOP      # OF DISK CALLS (INCL. FILE REQS BUT NOT SEG LOADS)
*                   NOT SEGMENT LOADS 
TB3   NOP      # OF FILE REQUESTS 
TB4   NOP      # OF USER SEGMENT LOADS
TB5   NOP      # OF SEGMENT LOADS (USER&SYSTEM) 
TB6   NOP      # OF FILE OPENS ATTEMPTED
TB7   NOP      # OF I/O REQUESTS STARTED
TB8   NOP      # OF I/O REQUESTS COMPLETED
      HED ***BASE PAGE*** 
* 
* BASE PAGE LOCATIONS USED
* 
#     EQU 53B 
N01$  EQU #-1 
N02$  EQU #-2 
N03$  EQU #-3 
N04$  EQU #-4 
N05$  EQU #-5 
N06$  EQU #-6 
N07$  EQU #-7 
N08$  EQU #-8 
N09$  EQU #-9 
* 
P00$  EQU # 
P01$  EQU #+1 
P02$  EQU #+2 
P03$  EQU #+3 
P04$  EQU #+4 
P05$  EQU #+5 
P06$  EQU #+6 
P07$  EQU #+7 
P08$  EQU #+8 
P09$  EQU #+9 
* 
M17$  EQU 70B 
M37$  EQU 71B                              (7905) 
M77$  EQU 72B 
M177$ EQU 73B 
M377$ EQU 74B 
* 
SYSBF EQU 115B
SECTR EQU 116B
UDNTS EQU 157B
CUDSC EQU 161B
CUDLA EQU 163B
DISCL EQU 200B
SYSSC EQU 155B
**************
* N09$ DEC -9 
* N07$ DEC -7 
* N06$ DEC -6 
* N05$ DEC -5 
* N04$ DEC -4 
* N03$ DEC -3 
* N02$ DEC -2 
* N01$ DEC -1 
* P02$ DEC 2  
* P03$ DEC 3  
* P04$ DEC 4  
* P05$ DEC 5  
* P06$ DEC 6  
* P08$ DEC 8  
* M17$ OCT 17 
* M77$ OCT 77 
* M177$ OCT 177 
* M377$ OCT 377 
* 
*SYSBF "SYSBF" SYSTEM BUFFER TRACK/SECTOR 
*SECTR "SECTR" NUMBER OF SECTORS/DISK TRACK 
*UDNTS "UDNTS" NEXT USER DISK TRACK/SECTOR  
*CUDSC "CUDSC" CURRENT USER DISK SUBCHANNEL 
*CUDLA "CUDLA" CURRENT USER DISK LAST ACCESS  
*DISCL "DISCL" USER LABEL TRACK/SECTOR  
* 
*     ERROR STATUS DEFINITIONS. 
* 
ERR1  EQU N01$
ERR2  EQU N02$
ERR3  EQU N03$
ERR4  EQU N04$
ERR5  EQU N05$
ERR6  EQU N06$
ERR7  EQU N07$
* 
      HED ***TCS MAIN CONTROL***
* 
* 
* 
* MAIN ENTRY INTO  TCS
* 
* 
      SPC 3 
TCS   NOP        ENTRY POINT
      JSB ENTR        GO GET PARAMETERS 
      DEF *+11
ARG1  NOP           FOR ADDRESSES-
ARG2  NOP 
ARG3  NOP           OF PARAMETERS-
ARG4  NOP 
ARG5  NOP           TO BE PASSED -
ARG6  NOP 
ARG7  NOP           FROM CALLING -
ARG8  NOP 
ARG9  NOP        PROGRAM BY ENTR. 
ARG10 NOP 
* 
* 
* NOW SAVE THE REQUEST CODE 
* 
      LDA ARG1,I    GET THE REQUEST CODE
      STA CREQ      SAVE IT 
* 
* UPDATE DEBUG TABLE
* 
      ISZ TB        # OF TCS CALLS
      NOP      JUST IN CASE 
* 
* CHECK IF ITS AN INITIALISATION REQUEST. 
* 
      CPA =D82
      RSS              YES SO SKIP
      JMP ME            SEE IF ITS A STATUS REQ.
* 
      LDA ARG7     GET ADDR OF SEG. DIRECTORY 
      STA .SD 
      LDA ARG2       SET ACTUAL CPQE VARIABLE 
      STA .PQ          TO .PQ-9, AND SET THE
      ADA PQLM           LOCAL CPQE TO POINT
      STA CPQE             TO THE VARIABLE. 
      LDA ARG3,I     SAVE MAXIMUM 
      STA MAXPQ        # OF PQ ENTRIES. 
      LDA ARG4
      STA PQC        SET UP PQ COUNT ADDRESS. 
      SKP 
*   NOW INITIALIZE SEGMENT DIRECTORY. 
* 
      CLA 
      STA PQC,I     CLEAR PQ COUNT
      STA RST        CLEAR RETURN STATUS. 
      LDA ARG5
      STA NAMAD 
      LDA ARG6,I     GET # OF SEGS. 
      SZA,RSS 
      JMP MZ         EXIT IF NO SEGS. 
      STA NSEG
      CMA,INA        ARG7 := -# OF
      STA ARG6       SEGMENTS 
* 
*   SET UP THE IN-CORE SEGMENT DIRECTORY. 
* 
LOOP1 JSB EXEC       PERFORM A FILE 
      DEF *+4          NAME SEARCH. 
      DEF SERCH 
NAMAD BSS 1 
      DEF ARG1
      LDA ARG1       FILE 
      SZA              OK ? 
      JMP GON            YES. GO ON.
H1    LDA ERR1      GET ERROR 1 CODE
      STA RST 
      JMP MZ
      SPC 1 
GON   LDA NAMAD      INCREMENT
      ADA P03$          NAMAD 
      STA NAMAD          BY 3.
* 
* NOTE:  AT THIS POINT, THE BREG POINTS TO THE FOURTH 
*        WORD OF THE SYSTEM DIRECTORY ENTRY.
* 
      ADB N03$        (-3)  
      LDA M11        SET UP -11 IN
      STA ARG2         ARG2 FOR THE MOVE. 
LOOP2 LDA B,I        GET A WORD AND 
      STA ARG7,I       STORE IT IN THE
      INB                SEGMENT DIRECTORY. 
      ISZ ARG7
      ISZ ARG2
      JMP LOOP2 
      LDB ARG7        INSERT THE UD INTO
      ADB N09$          (-9)  
      LDA B,I          THE BOTTOM 5 BITS    (7905)
      AND =B177740   OF THE 3RD WORD     (7905) 
      IOR CUDSC               (UD # ON BASE PAGE) 
      STA B,I 
      ISZ ARG6        DONE? 
      JMP LOOP1        NO. CHECK NEXT SEGMENT NAME. 
      JMP MZ           YES. 
* 
SERCH DEC 18         FILE NAME SEARCH CODE. 
M11   DEC -11 
      SKP 
* 
* SEE IF IT IS A STATUS REQUEST 
* 
ME    CPA =D79            IS A STATS REQ.?
      RSS                 YES SO SKIP 
      JMP MB              NO IT ISNT
* 
* 
*   PASS STATUS PARAMETERS AND EXIT.
* 
      LDA RST        PUT STATUS INTO
      STA ARG2,I       1ST USER PARAMETER.
      LDB ENUM
      CPB P02$    ONLY 1 PARAM(STATUS)
      JMP MZ       YES SO EXIT
      LDA RPAR       PUT THE USER IDENT PARAM 
      STA ARG3,I       INTO 2ND PARAMETER.
      LDA RLU        PUT LU # INTO
      STA ARG4,I       3RD USER PARAMETER.
      LDA RLOG       PUT TRANSMISSION LOG INTO
      STA ARG5,I       4TH USER PARAMETER.
      JMP MZ       GO TO EXIT 
      SPC 2 
* 
* 
* SEE IF ITS A PRIORITY REQUEST 
* 
MB    CPA =D71      IS IT?
      RSS           YES SO SKIP 
      JMP MT        NO SO CARRY ON CHECKING 
* 
      LDA ARG2,I    GET PRIORITY
      AND M17$     ENSURE CORRECT RANGE 
      STA PRIOR     STORE IT
* 
      JMP MZ        GO TO EXIT
* 
* 
* SEE IF ITS AN OPEN FILE REQUEST 
* 
MT    CPA =D84     IS AN OPEN FILE REQUEST? 
      JMP MY         YES
      CLA 
      STA RST          ETC. 
      STA RLU 
* 
* SEE IF ITS AN INCORE REQUEST
* 
      JSB ACOD
* 
* ON RETURN  A REG    IS ZERO IF REQUEST HAS BEEN DONE
* 
      SZA,RSS       IS DONE ? 
      JMP MOUT      YES 
* 
* CALL ROUTINE'B' TO SEE IF IT'S A SEGMENT LOAD 
* 
      JSB BCOD
* 
* ON RETURN   A REG   IS ZERO IF REQUEST HAS BEEN DONE
* 
      SZA,RSS       IS DONE 
      JMP MOUT      YES 
* 
* CALL ROUTINE'C' TO SEE IF IT'S AN I/O REQUEST 
* 
      JSB CCOD
* 
* ON RETURN   A REG   IS ZERO IF REQUEST HAS BEEN DONE
* 
      SZA,RSS       IS DONE 
      JMP MOUT      YES 
* 
* INVALID REQUEST. SET USER STATUS TO ERR3 AND RETURN.
* 
      LDA ERR3     GET ERROR CODE 
      STA RST      PUT IN STATUS
MZ    LDA TCS      GET RETURN ADDR. 
      STA FRET      STORE IT
* 
*   THIS IS THE ONLY RETURN FROM TCS. 
* 
MOUT  CLA 
      CLB 
      JMP FRET,I    RETURN TO USER. 
* 
.ARG1 DEF ARG1
      SPC 5 
* 
* PROCESS FILE OPEN REQUESTS
* 
MY    LDA ARG3,I     GET FILE # 
      ADA N01$          SUBTRACT 1  
      MPY =LUFDS     MULT BY ENTRY LENGTH 
      ADA .FD         ADD DIREC. ADDR.
      STA MET         SAVE
* 
      CLA 
      STA RST        CLEAR RETURN STATUS
* 
* UPDATE DEBUG TABLE
* 
      ISZ TB6 
      NOP 
* 
      LDA ARG2       ADDR OF FILE NAME
      STA FNME
      JSB EXEC       SEARCH FOR-
      DEF *+4        FILE-
      DEF SERCH      DIRECTORY. 
FNME  OCT 0 
      DEF ARG1
* 
      LDA ARG1       FILE-
      SZA,RSS        OK?
      JMP H1         NO 
* 
* BREG POINTS TO FOURTH WORD OF DIREC 
* ENTRY(EG TRACK AND SECTOR)
* 
      LDA B,I 
      STA MET,I    PUT IN DIRECTORY 
      LDA CUDSC     GET USER SUBCHAN. 
      ISZ MET 
      STA MET,I    PUT IN DIRECTORY 
      INB 
      LDA B,I       GET FILE LENGTH 
      ISZ MET 
      STA MET,I     PUT IN DIRECTORY
      LDB ARG2      GET ADDR OF FILE NAME.
      LDA ARG3,I    GET FILE NUMBER FOR LOG UTIL. 
      JSB .LOGP,I 
* 
* ALL DONE SO EXIT
* 
      JMP MZ
* 
* 
MET   NOP 
* 
.LOGP DEF LOGP      DUMMY LOGP TILL LOGGING 
LOGP  NOP            IS INITIATED 
      JMP LOGP,I
      HED ***FAST PARAMETER TRANSFER*** 
* 
* 
*  ENUM WILL HOLD THE # OF PARAMS TRANSFERRED AFTER COMPLETION
* 
* 
* 
*  EPAR  WILL HOLD THE ADDRESS OF THE FIRST USER PARAM (DEF*+N) 
* 
* 
* 
* 
**************************************
*                                    *
* ROUTINE TO TRANSFER PARAMETER ADDRESSES.
*                                    *
* CALLING  SEQUENCE                  *
*                                    *
*     JSB ENTR                       *
*     DEF *+N                        *
*     BSS N-1        FOR PARAMETERS  *
*                                    *
**************************************
      SPC 3 
* FIND # OF PARAS WE HAVE SPACE FOR 
ENTR  NOP           ENTRY POINT 
      LDB ENTR,I    GET DEF *?N PARAMETER 
      CMB,INB       MAKE -VE
      ADB ENTR
      STB TEMP      SAVE
* 
* NOW FIND # OF PARAMS IN USER CALL 
      LDA ENTR
      ADA =D-2
      STA TEMP2 
      LDB 0,I 
      LDA 1,I 
      CMB 
      ADA 1 
* 
* NOW FIND WHICH # OF PARAMS IS LEAST 
* 
      LDB 0 
      ADA TEMP
      SSA 
      JMP E1
      LDB TEMP
      CMB 
E1    STB ENUM
* 
* ENUM NOW CONTAINS THE # OF PARAMS 
* 
* SET UP SOURCE ADDR IN TEMP3 AND SET 
* 
* UP ADDR OF FIRST USER PARAM (DEF *+N) 
* 
* IN EPAR 
* 
      LDA TEMP2,I 
      STA EPAR
      LDB 0,I 
      STB TEMP2,I   SET UP USER RETURN
      INA 
      STA TEMP3 
* 
* NOW SEE IF THERE ARE ANY PARAMS TO TRANSFER 
* 
      LDA ENUM
      SZA,RSS       ANY 
      JMP E4        NO
* 
* SET UP FINAL DEST IN TEMP2
* 
      LDA ENTR                                                             2002 
      ADA ENUM                                                             2006 
      STA TEMP2                                                            2006 
                              