         PAGE
.*******************************************************************
.
.        osi$c170_cmu_emulation
.
.******************************************************************
.
.
.        ADDRESS REGISTER ASSIGNMENTS
.
.        a_psa  = PVA OF TRAPPED STACK FRAME SAVE AREA
.        a_wrk = PVA OF EI DATA AREA
.        a_rac = RA OF JOB IN SFSA.
.        a_nos = PVA OF OPERATING SYSTEM
         PAGE
...
.        AOR        - ADDRESS OUT OF RANGE.
.
.        THIS SUBROUTINE IS CALLED WHEN ONE OR  MORE  CMU  INSTRUCTION
.        PARAMETERS  ARE  OUT-OF-RANGE.   THE EXIT MODE SELECTION BITS
.        ARE INTERROGATED TO DETERMINE WHETHER THE AOR  CONDITION  HAS
.        BEEN  SELECTED BY THE USER.  IF NOT, A BRANCH IS MADE BACK TO
.        THE TRAP INTERRUPT PROCESSOR AT TAG trap3 WHERE A  RETURN  TO
.        THE  USER  IS  MADE.   IF THE AOR CONDITION IS SELECTED, THIS
.        SUBROUTINE  SETS  A  REQUEST  CODE  INTO  X0,  THE  AOR  EXIT
.        CONDITION IN X2, AND EXECUTES A C180 EXCHANGE  TO  THE  ERROR
.        INTERFACE.   THE  ERROR  INTERFACE  WILL THEN SIMULATE A C170
.        ERROR EXCHANGE.
.
.        ENTRY-     (a_psa) = PVA OF TRAPPED PROCESS STACK FRAME SAVE AREA.
.
.        EXIT-      IF AOR NOT SELECTED, NONE.
.
.                   IF AOR SELECTED, (X0) =1, (X2) = 1.
.
.
AOR1     LX        X0,a_psa,xp_cx0     .RESTORE X0=C170 X0
AOR      LBYTS,2   X1,a_psa,X0,xp_em   .GET EXIT MODE SELECTION BITS
         SHFC      X1,X1,X0,63         .POSITION AOR SELECTION BIT
         BRXGE     X1,X0,trap3         .IF AOR NOT SELECTED
         EIMTRCAL  EIRQC,1             .ABORT JOB WITH MODE 1
         PAGE
...
.        IIP        - ILLEGAL INSTRUCTION PROCESSOR.
.
.        THIS SUBROUTINE GAINS CONTROL WHEN  A  CMU  INSTRUCTION  TRAP
.        OCCURS  BUT  THE INSTRUCTION DOES NOT OCCUR ON A WORD BOUNDRY
.        OR WHEN THE OPERATION CODE IS NOT CORRECT.   THIS  SUBROUTINE
.        SETS  A  REQUEST  CODE  IN  X0,  THE ILLEGAL INSTRUCTION EXIT
.        CONDITION IN X2, AND EXECUTES A C180 EXCHANGE  TO  THE  ERROR
.        INTERFACE.   THE  ERROR  INTERFACE  WILL THEN SIMULATE A C170
.        ERROR EXCHANGE.
.
.        ENTRY-     NONE.
.
.        EXIT-      (X0) = 1.
.                   (X2) = 0.
.
.
IIP      BSS       0
         EIMTRCAL  EIRQC,0             .ABORT JOB WITH MODE 0
         PAGE
...
.        PII        - PROCESS INSTRUCTION INTERRUPT.
.
.        THIS SUBROUTINE IS CALLED WHEN A C170 PPU EXCHANGE  INTERRUPT
.        MUST  BE  HONORED DURING THE SIMULATION OF A CMU INSTRUCTION.
.        PII SAVES THE POSITION OF  THE  SIMULATION  IN  THE  C170  X0
.        REGISTER  AND  RETURNS TO THE TRAP INTERRUPT PROCESSOR AT TAG
.        trap5.  WHEN THE INSTRUCTION IS SUBSEQUENTLY RE-EXECUTED  THE
.        SIMULATION WILL BE RESUMED AT THE POINT OF INTERRUPTION.
.
.        ENTRY-     (a_psa) = PVA OF TRAPPED PROCESS STACK FRAME SAVE AREA.
.                   (X1) = FIELD 1 NEXT BIT POSITION.
.                   (X7) = FIELD 1  RELATIVE WORD OFFSET.
.                   (X8) = FIELD 2 RELATIVE WORD OFFSET.
.
.        EXIT-      (       9) = FIELD 1 RELATIVE WORD OFFSET.
.                   (X0,50-53) = NEXT RELATIVE CHARACTER POSITION IN
.                                FIELD 1 RELATIVE WORD.
.                   (X0,54,63) = FIELD 2 RELATIVE WORD OFFSET.
.
.
PII      ENTP      X0,6
         DIVR      X1,X0               .C1 FOR RE-ENTRY
         ENTP      X2,10
         BRRNE     X1,X2,PII01         .IF NOT CHARACTER 10
         ENTP      X1,0                .C1 IS CHARACTER
         INCR      X7,1                .ADJUST FIELD 1 TO NEXT WORD
PII01    SHFX      X1,X1,X0,10         .C1 TO BITS 50 - 53
         SHFX      X7,X7,X0,14         .FIELD 1 OFFSET TO BITS 40 - 49
         IORX      X8,X1               .FIELD 2 OFFSET TO BITS 54 - 63
         IORX      X8,X7               .COMBINE EVERYTHING
         SX        X8,a_psa,xp_cx0     .STORE C170 X0 REGISTER
PII02    ENTP      X1,1
         ENTL      X0,BSCIF
         SBIT      X1,a_psa,xp_em+1,x0 .SET CMU INTERRUPTED FLAG
         BRREQ     X0,X0,trap5         .RETURN
         PAGE
...
.        CIS        - CMU INSTRUCTION SIMULATOR.
.
.        THIS  ROUTINE  SIMULATES THE EXECUTION OF CYBER 170 COMPARE /
.        MOVE INSTRUCTIONS.  CONTROL IS PASSED TO CIS  FROM  THE  TRAP
.        INTERRUPT  PROCESSOR  WHEN AN UNIMPLEMENETED INSTRUCTION TRAP
.        FROM C170 STATE OCCURS.  THIS ROUTINE AQUIRES THE P  REGISTER
.        OF  THE  TRAPPED  C170  PROCESS  AND ASSURES THAT THE TRAPPED
.        INSTRUCTION IS A CMU INSTRUCTION AND THAT IT OCCURS ON A C170
.        WORD BOUNDRY.  IF THE INSTRUCTION IS  AN  INDIRECT  MOVE  THE
.        ADDRESS  OF  THE DESCRIPTOR WORD IS CHECKED TO ASSURE THAT IT
.        IS IN RANGE AND THE DESCRIPTOR IS AQUIRED FROM THE C170  USER
.        FIELD  LENGTH.   OTHERWISE  THE DESCRIPTOR IS INCLUDED IN THE
.        INSTRUCTION WORD.  THE LENGTH DESCRIPTOR IS THEN ISOLATED AND
.        TESTED FOR A ZERO VALUE.  IF LENGTH IS ZERO, THE  INSTRUCTION
.        IS  A  NO-OP  AND  AN IMMEDIATE RETURN TO CALLER IS MADE.  IF
.        CHARACTER POSITIONS C1 OR C2 ARE GREATER THAN 9 OR IF  EITHER
.        FIELD  EXCEEDS  THE USER FIELD LENGTH AN ADDRESS-OUT-OF-RANGE
.        EXIT IS MADE.  IF THE INSTRUCTION IS A COLLATED  COMPARE  THE
.        COLLATING TABLE ADDRESS IS VERIFIED AS IN-RANGE.
.
.
.        IT  IS  THEN  DETERMINED  IF  THIS INSTRUCTION WAS PREVIOUSLY
.        INTERRUPTED AND IF SO THE PARAMETERS SAVED IN THE  C170  USER
.        X0 REGISTER AT THE TIME THE INTERRUPT WAS HONORED ARE USED AS
.        INPUT  PARAMETERS  TO  THE  PARTICULAR  INSTRUCTION SIMULATOR
.        SUBROUTINE.  IF THE  INSTRUCTION  WAS  NOT  PREVIOUSLY  BEING
.        SIMULATED THE INPUT PARAMETERS ARE THOSE FROM THE INSTRUCTION
.        DESCRIPTOR FIELD.
.
.        ANY RANGE ERRORS NOTED WILL CAUSE A BRANCH TO THE ROUTINE AOR
.        FOR  PROCESSING BASED ON THE USER EXIT MODE SELECTIONS.  IF A
.        CMU  INSTRUCTION  IS  NOT  ON  A  WORD  BOUNDRY  OR  IF   THE
.        INSTRUCTION  IS  NOT  RECOGNIZED AS A CMU OP-CODE A BRANCH IS
.        MADE TO IIP TO BE PROCESSED AS AN ILLEGAL INSTRUCTION.
.
.        IF  NO  ERRORS  ARE  ENCOUNTERED  THE  SIMULATION  SUBROUTINE
.        APPROPRIATE TO THE INSTRUCTION TYPE IS GIVEN  CONTROL.   WHEN
.        CONTROL  IS  RETURNED TO THIS ROUTINE AFTER THE SIMULATION IS
.        COMPLETE THE RETURN PARAMETER FROM THE SIMULATION  SUBROUTINE
.        IS  TRANSFERRED INTO THE C170 USER X0 REGISTER.  THIS ROUTINE
.        THEN RETURNS TO THE TRAP INTERRUPT PROCESSOR.
.
.        ENTRY-     (a_psa) = PVA OF TRAPPED PROCESS STACK FRAME SAVE AREA.
.                   (a_nos) = C170 SEGMENT PVA.
.                   (a_rac) = C170 job pva.
.                   (x_flc) = C170 USER FIELD LENGTH.
.
.        EXIT-      NONE.
.
.
CIS      lbyts,6   x1,a_psa,x0,xp_p    .PVA of trapped instruction
         ISOB      X2,X1,X0,7502(8)    .ISOLATE PARCEL DESCRIPTORS
         BRRNE     X2,X0,IIP           .IF NOT ON WORD BOUNDRY
         CPYXA     a9,X1
         LX        X1,a9,0             .GET TRAPPED INSTRUCTION
         ISOB      XC,X1,X0,0410(8)    .ISOLATE OPCODE
         ENTE      X3,464(8)
         SUBR      XC,X3               .INSTRUCTION TYPE
         ENTP      X3,3
         BRRGT     X0,XC,IIP           .IF NOT CMU INSTRUCTION
         BRRGT     XC,X3,IIP           .IF NOT CMU INSTRUCTION
         ENTE      X3,1502(8)
         BRRGT     XC,X0,CIS01         .IF NOT INDIRECT MOVE
         ISOB      X3,X1,X0,1502(8)    .B REGISTER DESIGNATOR
         ISOB      X4,X1,X0,2021(8)    .K FIELD FROM INSTRUCTION
         ISOM      XD,X0,5621(8)
         LXI       X3,a_psa,X3,xp_cb0/8*8 .B REGISTER CONTENTS
         ANDX      X3,XD
         SHFX      XE,X4,X0,-17
         SHFX      xa,X3,X0,-17
         ADDR      X4,XE               .FORM 2-S COMPLEMENT NUMBER
         ADDR      X3,xa
         ADDR      X3,X4
         ANDX      X3,XD               .TRIM ANY CARRY
         BRRGE     X3,x_flc,AOR        .IF DESCRIPTOR ADDRESS ERROR
         LXI       X1,a_rac,X3,0       .INDIRECT MOVE DESCRIPTOR WORD
         ENTE      X3,0710(8)
CIS01    ISOB      X3,X1,X3,0          .GET LU FIELD
         ISOB      XD,X1,X0,4203(8)    .GET LL FIELD
         SHFX      X3,X3,X0,4
         ADDR      XD,X3               .CHARACTER FIELD LENGTH L
         ISOB      XE,X1,X0,4603(8)    .FIELD 1 CHARACTER POSITION C1
         ISOB      xa,X1,X0,5203(8)    .FIELD 2 CHARACTER POSITION C2
         ENTP      X3,9
         ENTL      X0,0
         BRREQ     XD,X0,trap3         .IF L = 0, PASS
         BRRGT     XE,X3,AOR           .IF C1 LENGTH ERROR
         BRRGT     xa,X3,AOR           .IF C2 LENGTH ERROR
         ENTP      X3,10
         ADDRQ     X4,XE,9
         ADDR      X4,XD
         DIVR      X4,X3               .N1 = (C1+L+9)/10
         ADDRQ     X5,xa,9
         ADDR      X5,XD
         DIVR      X5,X3               .N2 = (C2+L+9)/10
         ISOB      X2,X1,X0,2021(8)    .FIELD 1 RELATIVE ADDRESS
         ISOB      X3,X1,X0,5621(8)    .FIELD 2 RELATIVE ADDRESS
         ADDR      X4,X2
         ADDR      X5,X3
         brrgt     X4,x_flc,AOR        .IF FIELD 1 ADDRESS ERROR
         brrgt     X5,x_flc,AOR        .IF FIELD 2 ADDRESS ERROR
         SHFX      X2,X2,X0,3          .FIELD 1 BYTE ADDRESS
         SHFX      X3,X3,X0,3          .FIELD 2 BYTE ADDRESS
         CPYAA     AA,a_rac
         CPYAA     AB,a_rac
         ADDAX     AA,X2               .PVA OF FIELD 1
         ADDAX     AB,X3               .PVA OF FIELD 2
         ENTP      X3,2
         BRRNE     XC,X3,CIS02         .IF NOT COLLATED COMPARE
         lbyts,3   x9,a_psa,x0,xp_ca0
         DECR      x_flc,8
         BRRGT     X9,x_flc,AOR        .IF COLLATING TABLE OUT-OF-RANGE
         CPYAA     a8,a_rac
         SHFX      X9,X9,X0,3
         ADDAX     a8,X9               .PVA OF COLLATING TABLE
CIS02    ENTL      X0,BSCIF
         cpyxx     xf,xa
         LBIT      XB,a_psa,xp_em+1,x0 .GET CMU INTERRUPTED FLAG
         BRREQ     XB,X0,CIS03         .IF NOT INSTRUCTION RESUME
         ENTP      XF,0                .C2 = 0
         SBIT      XF,a_psa,xp_em+1,x0 .CLEAR CIF
         CPYRR     X2,XE               .SAVE C1
         ISOB      XE,X8,X0,6203(8)    .C1 = P1
         ISOB      X7,X8,X0,5011(8)    .CURRENT FIELD 1 WORD = W1
         ISOB      X8,X8,X0,6611(8)    .CURRENT FIELD 2 WORD = W2
         MULRQ     X1,X7,10
         ADDR      X1,XE
         SUBR      X1,X2
         SUBR      XD,X1               .NUMBER OF CHARACTERS LEFT
         BRREQ     X0,X0,CIS04
.
CIS03    ENTP      X7,0
         ENTP      X8,0
CIS04    ENTP      X1,2
         BRRGE     XC,X1,SCI           .IF COMPARE INSTRUCTION
         BRREQ     X0,X0,SMI           .IF MOVE INSTRUCTION
         PAGE
...
.        SMI        - SIMULATE MOVE INSTRUCTION.
.
.        THIS SUBROUTINE SIMULATES THE EXECUTION OF THE CYBER 170  CMU
.        MOVE  INSTRUCTIONS DM AND IM.  THE MOVE PROCEEDS FROM LEFT TO
.        RIGHT  MOVING  CHARACTERS  FROM  THE  SOURCE  FIELD  TO   THE
.        DESTINATION  FIELD.   EACH TIME A BLOCK OF 260 CHARACTERS HAS
.        BEEN MOVED THIS SUBROUTINE WILL TEST THE CONDITION OF BIT  05
.        OF  THE  MONITOR  CONDITION REGISTER.  IF SET, THIS INDICATES
.        THAT A PPU HAS EXECUTED A CYBER 170 PPU EXCHANGE INSTRUCTION.
.        IN THIS CASE THE THE CPU MUST BE RELINQUISHED  TO  THE  CYBER
.        170  STATE ENVIRONMENT SO SMI EXITS TO ROUTINE PII.  WHEN THE
.        INSTRUCTION IS SUBSEQUENTLY RE-EXECUTED THE  SIMULATION  WILL
.        BE  RESUMED AT THE POINT OF INTERRUPTION.  WHEN COMPLETED THE
.        C180 X0 REGISTER WILL  BE  CLEARED  TO  ALL  ZEROS  AND  THIS
.        SUBROUTINE WILL RETURN TO ITS CALLER.
.
.        ENTRY-     (AA) = PVA OF SOURCE FIELD.
.                   (AB) = PVA OF DESTINATION FIELD.
.                   (a9) = PVA OF MOVE INSTRUCTION.
.                   (X7) = FIELD 1 RELATIVE WORD.
.                   (X8) = FIELD 2 RELATIVE WORD.
.                   (XD) = L, NUMBER OF CHARACTERS TO MOVE.
.                   (XE) = C1, FIRST CHARACTER POSITION IN WORD 1
.                              OF SOURCE FIELD.
.                   (XF) = C2, FIRST CHARACTER POSITION IN WORD 1
.                              OF DESTINATION FIELD.
.
.        EXIT-      IF THE SIMULATION HAS BEEN COMPLETED,
.                     (X0) = 0.
.                   IF THE MOVE WAS INTERRUPTED, SMI EXITS TO PII.
.
SMI      ENTE      X1,60
         ENTE      X0,600(8)
         MULR      XE,X0               .B1, FIRST SOURCE BIT
         MULR      XF,X0               .B2, FIRST DESTINATION BIT
         SHFX      X3,XF,X0,-6
.
.        COMPUTE BM = MAX (B1,B2)
.
         CPYRR     XC,XE
         BRRGE     XE,XF,SMI01         .IF B1 .GE. B2
         CPYRR     XC,XF
.
.        COMPUTE SL = 60-BM/64, NUMBER OF BITS FROM FIRST SOURCE WORD
.
SMI01    SHFX      XC,XC,X0,-6         .BM/64
         SUBR      X1,XC               .60-BM/64
         MULRQ     XD,XD,6             .LENGTH OF MOVE IN BITS
         ADDR      XD,X3               .LAST BIT + 1 IN DESTINATION
SMI02    ADDR      XE,X1
         DECR      XE,1                .ISOLATION MODIFIER FOR SOURCE
         ADDR      XF,X1
         DECR      XF,1                .INSERT MODIFIER FOR DESTINATION
         LXI       X2,AA,X7,0          .GET FIRST SOURCE WORD
         LXI       X3,AB,X8,0          .GET FIRST DESTINATION WORD
         INCR      X7,1                .INCREMENT SOURCE INDEX
         ISOB      X4,X2,XE,0400(8)    .ISOLATE SOURCE DATA
         INSB      X3,X4,XF,0400(8)    .INSERT INTO DESTINATION WORD
         BRRGE     XF,XE,SMI04         .IF DESTINATION WORD IS COMPLETE
         SHFX      XF,XF,X0,-6
         ADDR      XF,X1               .NEXT BIT IN DESTINATION WORD
         ENTE      X1,60
         SUBR      X1,XF               .SL, BITS NEEDED FROM NEXT WORD
         SHFX      XF,XF,X0,6
         LXI       X2,AA,X7,0          .NEXT SOURCE WORD
         INCR      X7,1                .INCREMENT SOURCE INDEX
         ADDR      XF,X1
         DECR      XF,1                .INSERT MODIFIER FOR DESTINATION
         CPYRR     XE,X1
         DECR      XE,1                .ISOLATION MODIFIER FOR SOURCE
         ISOB      X4,X2,XE,0400(8)    .ISOLATE SL SOURCE DATA BITS
         INSB      X3,X4,XF,0400(8)    .INSERT INTO DESTINATION WORD
         BRREQ     X0,X0,SMI05
.
SMI04    SHFX      XE,XE,X0,-6         .CALCULATE NEW SOURCE BIT POSITION
         ADDR      XE,X1
         CPYXX     X1,XE               .CALCULATE SHIFT AMOUNT
         DECR      XE,1                .ISOLATE MODIFIER
SMI05    ENTE      XB,60
         ENTE      XC,25
         ENTP      XA,0                .INITIALIZE WORD COUNT
         BRRGE     XB,XD,SMI08         .IF MOVE IS 60 BITS OR LESS
         BRREQ     X0,X0,SMI07
.
SMI06    SHFX      X3,X5,X1,0          .SHIFT IN PREVIOUS SOURCE
         ISOB      X4,X2,XE,0400(8)    .ISOLATE SL BITS FROM SOURCE
         IORX      X3,X4               .FILL OUT DESTINATION WORD
         BRRGE     XB,XD,SMI08         .IF 60 BITS OR LESS LEFT
SMI07    SXI       X3,AB,X8,0          .STORE DESTINATION WORD
         SUBR      XD,XB               .DECREMENT NUMBER OF BITS LEFT
         CPYXX     X5,X2
         INCR      X8,1                .INCREMENT DESTINATION INDEX
         LXI       X2,AA,X7,0          .GET NEXT SOURCE WORD
         INCR      X7,1                .INCREMENT SOURCE INDEX
         BRINC     XC,XA,SMI06         .IF 26 WORD BLOCK NOT DONE
         ENTP      XA,0                .RESET WORD COUNT
         BRCR      5,3,SMI06           .IF NOT C170 PP EXCHANGE
         DECR      X7,2
         BRREQ     X0,X0,PII
.
SMI08    LXI       X4,AB,X8,0          .GET LAST DESTINATION WORD
         ISOM      X5,XD,0300(8)       .MASK FOR LAST WORD
         ANDX      X3,X5
         INHX      X4,X5
         IORX      X3,X4               .LAST DESTINATION WORD
         SXI       X3,AB,X8,0
         ENTL      X0,0                .CLEAR X0 FOR RETURN
         BRREQ     X0,X0,trap3         .RETURN TO CALLER
         PAGE
...
.        SCI        - SIMULATE COMPARE INSTRUCTION.
.
.        THIS  SUBROUTINE SIMULATES THE EXECUTION OF THE CYBER 170 CMU
.        COMPARE  INSTRUCTIONS  CC  AND  CU.   THE  COMPARE   PROCEEDS
.        CHARACTER  BY  CHARACTER  FROM LEFT TO RIGHT THROUGH THE DATA
.        FIELDS TO BE COMPARED.  EACH TIME A BLOCK  OF  10  CHARACTERS
.        HAS BEEN COMPARED THIS ROUTINE WILL TEST THE CONDITION OF BIT
.        05  OF  THE MONITOR CONDITION REGISTER.  IF SET SCI WILL EXIT
.        TO  ROUTINE  PII.   WHEN  THE  INSTRUCTION  IS   SUBSEQUENTLY
.        RE-EXECUTED  THE  SIMULATION  WILL  RESUME  AT  THE  POINT OF
.        INTERRUPTION.  IN THE EVENT THAT A  PAIR  OF  CHARACTERS  ARE
.        FOUND   THAT  DO  NOT  COMPARE  THE  CORRESPONDING  COLLATING
.        CHARACTERS ARE AQUIRED  IF  THE  INSTRUCTION  IS  A  COLLATED
.        COMPARE.  IF THE INSTRUCTION IS NOT A COLLATED COMPARE, OR IF
.        THE  COLLATING  CHARACTERS  DO  NOT  COMPARE,  THE SIMULATION
.        TERMINATES AND THE STATUS OF THE COMPARE IS SET INTO THE C180
.        X0 REGISTER.  IF THE SIMULATION RUNS  TO  COMPLETION  WITHOUT
.        ENCOUNTERING  A  MIS-COMPARE, THE C180 X0 REGISTER IS CLEARED
.        TO ALL ZEROS.  IN EITHER CASE THIS SUBROUTINE THEN  EXITS  TO
.        ITS CALLER.
.
.        ENTRY-     (AA) = PVA OF DATA FIELD 1.
.                   (AB) = PVA OF DATA FIELD 2.
.                   (a8) = PVA OF COLLATING TABLE (IF COLLATED COMPARE).
.                   (a9) = PVA OF COMPARE INSTRUCTION.
.                   (X7) = FIELD 1 RELATIVE WORD.
.                   (X8) = FIELD 2 RELATIVE WORD.
.                   (XC) = INSTRUCTION TYPE.
.                          2 = COLLATED COMPARE, 3 = UNCOLLATED COMPARE.
.                   (XD) = L, LENGTH OF FIELDS TO COMPARE.
.                   (XE) = C1, FIRST CHARACTER IN WORD 1 OF FIELD 1.
.                   (XF) = C2, FIRST CHARACTER IN WORD 1 OF FIELD 2.
.
.        EXIT-      (X0) = STATUS OF COMPARE AS FOLLOWS-
.                          IF FIELD 1 .GT. FIELD 2,
.                             (X0) = L-CC.
.                          IF FIELD 1 .LT. FIELD 2,
.                             (X0) = ONES COMPLEMENT OF L-CC.
.                          IF ALL PAIRS COMPARE,
.                             (X0) = 0.
.                          IN THE ABOVE FORMULAS CC = NUMBER OF
.                          CHARACTER PAIRS COMPARING CORRECTLY BEFORE
.                          THE COMPARE FAILURE.
SCI      DECR      XC,2
         ENTP      X4,1
         ENTE      X0,600(8)           .INCREMENT VALUE
         MULR      XE,X0               .ISOLATION MODIFIER FOR FIELD 1
         MULR      XF,X0               .ISOLATION MODIFIER FOR FIELD 2
         ENTE      X1,7400(8)
         LXI       X2,AA,X7,0          .FIRST WORD OF FIELD 1
         LXI       X3,AB,X8,0          .FIRST WORD OF FIELD 2
         INCR      X7,1
         INCR      X8,1
SCI01    BRRGE     XE,X1,SCI05         .IF NO MORE DATA IN FIELD 1 WORD
SCI02    BRRGE     XF,X1,SCI06         .IF NO MORE DATA IN FIELD 2 WORD
SCI03    ISOB      X5,X2,XE,0405(8)    .GET CHARACTER OF FIELD 1
         ISOB      X6,X3,XF,0405(8)    .GET CHARACTER OF FIELD 2
         BRRNE     X5,X6,SCI08         .IF CHARACTERS NOT EQUAL
SCI04    ADDR      XE,X0               .INCREMENT ISOLATION MODIFIERS
         ADDR      XF,X0
         BRINC     XD,X4,SCI01         .IF MORE DATA TO COMPARE
         ENTP      X0,0                .FIELDS COMPARE
         BRREQ     X0,X0,trap3         .RETURN TO CALLER
.
SCI05    LXI       X2,AA,X7,0          .NEXT FIELD 1 WORD
         ENTP      XE,0                .RESET ISOLATION MODIFIER
         INCR      X7,1                .INCREMENT WORD INDEX
         BRREQ     X0,X0,SCI02
.
SCI06    BRCR      5,3,SCI07           .IF NO C170 PP EXCHANGE
         SHFX      X1,XE,X0,-6         .FIELD 1 BIT POSITION TO X1
         DECR      X7,1
         BRREQ     X0,X0,PII           .PROCESS INSTRUCTION INTERRUPT
.
SCI07    LXI       X3,AB,X8,0          .NEXT FIELD 2 WORD
         ENTP      XF,0                .RESET ISOLATION MODIFIER
         INCR      X8,1                .INCREMENT WORD INDEX
         BRREQ     X0,X0,SCI03
.
SCI08    BRRNE     XC,X0,SCI09         .IF NOT COLLATED COMPARE
         ENTP      X9,7
         ISOB      XA,X5,X0,7202(8)    .FIELD 1 COLLATING WORD OFFSET
         ANDX      X5,X9               .FIELD 1 COLLATING CHARACTER OFFSET
         ISOB      XB,X6,X0,7202(8)    .FIELD 2 COLLATING WORD OFFSET
         ANDX      X6,X9               .FIELD 2 COLLATING CHARACTER OFFSET
         MULR      X5,X0               .FIELD 1 ISOLATION MODIFIER
         MULR      X6,X0               .FIELD 2 ISOLATION MODIFIER
         LXI       XA,a8,XA,0          .FIELD 1 COLLATING WORD
         LXI       XB,a8,XB,0          .FIELD 2 COLLATING WORD
         ISOB      X5,XA,X5,0405(8)    .FIELD 1 COLLATING CHARACTER
         ISOB      X6,XB,X6,0405(8)    .FIELD 2 COLLATING CHARACTER
         BRREQ     X5,X6,SCI04         .IF COMPARE COLLATES
SCI09    SUBR      XD,X4
         ADDRQ     X0,XD,1             .COMPUTE L-CC
         BRRGT     X5,X6,SCI10         .IF FIELD 1 .GT. FIELD 2
         NOTX      X0,X0               .COMPLEMENT L-CC
SCI10    BRREQ     X0,X0,trap3         .RETURN TO CALLER
.
.***  End common deck OSI$C170_CMU_EMULATION
