         TITLE    '** DECIMAL INSTRUCTION SIMULATOR **'                         
*                                                                               
* CATALOG NO. 704364 SIGMA 7 DECIMAL INSTRUCTION SIMULATOR FOR SIGMA 5/7        
*                                                                               
* REVISION D00 (11-10-69) COMPLETE REWRITE FOR NEW MONITOR XFACE                
*                                                                               
*                                                                               
         SYSTEM   SIG5P                                                         
*                                                                               
* REGISTER ASSIGNMENTS                                                          
*                                                                               
R0       EQU      0                                                             
R1       EQU      1                                                             
R2       EQU      2                                                             
R3       EQU      3                                                             
R4       EQU      4                                                             
R5       EQU      5                                                             
R6       EQU      6                                                             
R7       EQU      7                                                             
R8       EQU      8                                                             
R9       EQU      9                                                             
R10      EQU      10                                                            
R11      EQU      11                                                            
R12      EQU      12                                                            
R13      EQU      13                                                            
R14      EQU      14                                                            
R15      EQU      15                                                            
PCBPOINT EQU      X'4E'                                                 INSDR170
*                                                                               
         PAGE                                                                   
*                                                                               
         DEF      DECSIM                                                        
DECSIM   B        U:DECSIM          RBM ENTRY                                   
U:XITSIM EQU      X'1E6'            NORMAL TRAP RETURN                          
U:TRPSIM EQU      X'1E7'            SIMULATE TRAP RETURN (DEC & FP)             
NOPPGMOT EQU      X'1E8'            ERROR RETURN                        INSDR170
XE       DATA     X'E'                                                          
         BOUND    8                                                             
X1       DATA     1,1                                                           
X20      DATA     X'20'                                                         
XF       DATA     X'F'                                                          
X2       DATA     2                                                             
M19      DATA     X'7FFFF'                                                      
YF       DATA     X'F0000000'                                                   
Y4       DATA     X'40000000'                                                   
Y2       DATA     X'20000000'                                                   
Y1       DATA     X'10000000'                                                   
Y3       DATA     X'30000000'                                                   
Y8       DATA     X'80000000'                                                   
YC       DATA     X'C0000000'                                                   
Y002     DATA     X'00200000'                                                   
X4       DATA     4                                                             
M16      DATA     X'FFFF'                                                       
YFFFE    DATA     X'FFFE0000'                                           INSDR170
ZEROS    DATA     0                                                     INSDR170
         PAGE                                                                   
U:DECSIM RES      0                 ENTRY                                       
         STD,R4   R6                OLD PSD TO R6-R7                    INSDR170
         LCI      2                 PULL OLD REGS 4-5                   INSDR170
         PLM,R4   *PCBPOINT                                             INSDR170
         LCI      2                                                     INSDR170
         PSM,R6   *PCBPOINT         PUSH MONITORS PSD                   INSDR170
         LB,R6    R4                OP CODE                             INSDR171
         LH,R2    R4                R&X                                         
         LI,R8    0                 ASSUME NO MARK                              
         AI,R6    -X'63'            IS IT EBS                           INSDR171
         BNEZ     DEC01             NO                                          
         SPACE    3                                                             
         SLS,R2   -4                ALIGN                                       
         AND,R2   XE                FORCE EVEN                                  
         AW,R2    R1                POINT TO REGISTER STORAGE                   
         LW,R12   0,R2              R                                           
         LW,R13   1,R2              RU1                                         
         AW,R4    R12               D+SA                                        
         LW,R5    R13                                                           
         SLS,R1   2                 BYTE ALIGN                                  
         CI,R5    X'7FFC0'          CHK REGISTER                                
         BANZ     1A1               SKIP IF NOT                                 
         AW,R5    R1                PT TO REG STORAGE                           
1A1      CI,R4    X'7FFC0'          CHK AGAIN                                   
         BANZ     %+2                AND AGAIN                                  
         AW,R4    R1                  AND AGAIN                                 
         SLS,R1   -2                RESTORE                                     
         LB,R3    R12               FILL                                INSDR171
         LW,R15   -2,R1             GET &                                       
         SCS,R15  4                  ALIGN CC                                   
         LB,R14   R13               COUNT                                       
         BEZ      EDONE             TO GET OUT                                  
         AND,R13  M19               EXTRACT DESTINATION                         
         LW,R7    R13               OBTAIN                                      
         AW,R7    R14                LAST BYTE + 1                              
         CI,R13   X'7FFC0'          CHK REGISTER                                
         BANZ     %+3               NOPE                                        
         CI,R7    X'40'             CHK OVERRUN                                 
         BG       GOOF                                                          
         AI,R7    X'80000'          CHK WRAPAROUND                              
         BGZ      GOOF                                                          
         LI,R7    X'FC'             MASK                                        
E1       LB,R6    0,R5              PATTERN BYTE                                
         CS,R6    X20               CHK FOR SPECIAL                             
         BNE      E2                SKIP IF NOT                                 
         CI,R6    X'22'             CHK FS                                      
         BE       EFS               YUP                                         
         LB,R10   0,R4              DIGIT                               INSDR171
         CI,R10   X'9F'             CHK SIGN                            INSDR171
         BG       ETRAP             ERROR                                       
         CI,R15   4                 CHK CC2                                     
         BANZ     E4                SKIP IF ON                                  
E3       SLD,R10  -4                GET LEFT DIGIT                      INSDR171
E4       CI,R15   1                 CHK CC4                                     
         AND,R10  XF                CHK ZERO                            INSDR171
         BEZ      E12M1             IT IS                                       
         CI,R10   9                 CHK SIGN                            INSDR171
         BLE      E4X               SKIP IF OK                                  
ETRAP    STB,R14  R13               INSERT COUNT                                
         BAL,R7   EBSEND            WRAP UP                                     
EXITM1   LI,R0    U:TRPSIM          SET FOR SIMULATED TRAP              INSDR170
EXIT     EQU      %                                                     INSDR170
         LCI      2                                                     INSDR170
         PLM,R6   *PCBPOINT         PULL OLD PSD (MONITORS)             INSDR170
         AND,R6   YFFFE             GET RID OF ADDRESS                  INSDR170
         OR,R6    R0                PUT IN RETURN ADDR                  INSDR170
         LPSD,0   R6                EXIT                                INSDR170
E4X      OR,R15   X2                SET CC3                                     
         CI,R15   1                 CHK CC4                                     
         BAZ      ESIG              BRANCH IF OFF                               
E12M1    BAZ      EVEC-X'20',R6     VECTOR ON PATTERN                           
E12      CI,R6    X'23'             CHK SI                                      
         BNE      ESTORE            NO                                          
         B        EMARK             YES                                         
EVEC     B        EFILL             DS                                          
         B        ESS               SS                                          
M7       DATA     X'FFFFFFF9'                                                   
ESIG     AI,R15   1                 SET CC4                                     
EMARK    LW,R8    R13               SET SIG START                               
ESTORE   AI,R10   X'F0'             INSERT ZONES                        INSDR171
         STB,R10  0,R5              STORE DIGIT                         INSDR171
ENEXT    EOR,R15  X4                INVERT CC2                                  
         CI,R15   4                 CHK CC2                                     
         BAZ      E11               SKIP IF OFF                                 
E6       LI,R10   0                 CLEAR                               INSDR171
         SLD,R10  4                 RIGHT DIGIT                         INSDR171
         CI,R10   9                 CHK SIGN                            INSDR171
         BLE      ELOOP             NO SIGN                                     
         CI,R10   X'F'              CHK SPECIAL +                       INSDR171
         BNE      E8                SKIP IF NOT                                 
         LI,R10   8                 MAKE +                              INSDR171
E8       LI,R11   9                 MASK                                INSDR171
         STS,R10  R15               ADJUST CC                           INSDR171
         AI,R15   -4                TURN OFF CC2                                
E11      AI,R12   1                 AD-                                         
         AI,R4    1                  VANCE                                      
ELOOP    AI,R13   1                 AD-                                         
         AI,R5    1                  VANCE                                      
         BDR,R14  E1                LOOP                                        
EDONE    LI,R0    U:XITSIM          SET FOR NORMAL RETURN               INSDR170
         LI,R7    EXIT              SET FOR DONE                        INSDR170
EBSEND   EQU      %                                                     INSDR170
1A2      RES      0                                                             
         STW,R12  0,R2              STORE                                       
         STW,R13  1,R2               REGISTERS                                  
         SCS,R15  -4                ALIGN &                                     
         AND,R8   M19               EXTRACT                                     
         BEZ      %+2               SKIP IF NO MARK                             
         STW,R8   R1,R1             SIG START                                   
         LW,R8    R15               CC                                          
         LW,R9    YF                 MASK                                       
         B        0,R7              RETURN                                      
ESS      LW,R8    R13               SET                                         
         AI,R8    1                  SIG START                                  
         AI,R15   1                 SET CC4                                     
EFILL    STB,R3   0,R5              STORE FILL                          INSDR171
         B        ENEXT             JOIN                                        
EFS      AND,R15  X4                RESET CC 1,3,4                              
E10      STB,R3   0,R5              STORE FILL                          INSDR171
         B        ELOOP             JOIN                                        
E2       CI,R15   1                 CHK CC4                                     
         BANZ     ELOOP             ON                                          
         CI,R15   8                 CHK CC1                                     
         BAZ      E10               OFF - STORE FILL                            
         LI,R10   X'40'             BLANK                               INSDR171
         STB,R10  0,R5              STORE IT                            INSDR171
         B        ELOOP             JOIN                                        
         PAGE                                                                   
DEC01    SLS,R4   2                 BYTE ALIGNMENT                              
         LW,R0    R2                COPY                                        
         AND,R2   XE                 X FIELD                                    
         BEZ      %+3               SKIP IF NO INDEX                            
         SLS,R2   -1                ALIGN                                       
         AW,R4   *R2,R1             ACCUMULATE INDEX VALUE                      
         LI,R3    X'F'              MASK                                        
         AI,R6    X'63'-X'7C'       IS IT DSA                           INSDR171
         BNEZ     DEC02             NO                                          
         SPACE    3                                                             
         BAL,R7   DIGITS            LOAD DEC ACC & VERIFY                       
         SAS,R4   -2                ALIGN &                                     
         LAH,R0   R4-7,R3           ABS VAL OF COUNT                            
         BEZ      DSA5              NO SHIFT                                    
         LW,R10   R15               GET SIGN                            INSDR171
         CI,R0    32                MAX                                         
         BLE      %+2                IS                                         
         LI,R0    32                  32                                        
         CI,R4    X'8000'           CHK DIRECTION                               
         BANZ     DSA3              RIGHT                                       
         BAL,R4   LEFTM2            1ST LEFT                                    
         BDR,R0   LEFTM1            SUCCEEDING LEFTS                            
         CW,R6    YF                CHK CARRY                           INSDR171
         BAZ      DSA4              SKIP IF NOT                                 
         LW,R8    Y4                SET CC2                                     
         B        DSA4              JOIN                                        
DSA3     BAL,R4   RIGHT             1ST RIGHT                                   
         BDR,R0   RIGHT             SUCCEEDING RIGHTS                           
DSA4     LI,R11   X'F'              MASK                                INSDR171
         STS,R10  R15               INSERT SIGN                         INSDR171
DSA5     LD,R10   R14               CHK                                 INSDR171
         AND,R11  L(X'FFFFFFF0')     FOR                                INSDR171
         AD,R10   R12                 ZERO                              INSDR171
         BCR,15   DL5               YUP                                         
DSA6     AW,R8    Y2                ASSUME +                                    
        B        DA4+1             CHK ASSUMPTION                               
         PAGE                                                                   
DEC02    SLS,R0   -4                ALIGN &                                     
         AND,R0   XF                 EXTRACT L FIELD                            
         BNEZ     %+2               SKIP IF NOT 16                              
         LI,R0    16                IT'S 16                                     
         CI,R4    X'7FFC0'          CHK FOR REGISTER ADDRESS                    
         BANZ     1A4               SKIP IF NOT                                 
         LW,R8    R1                POINT                                       
         SLS,R8   2                  TO                                         
         AW,R4    R8                  REGISTER STORAGE                          
1A4      AND,R4   M19               EXTRACT ADDRESS                             
         AW,R4    R0                LST SIG                                     
         LI,R5    19                3 BYTE OFFSET                       INSDR171
         BDR,R4   VECTOR,R6         VECTOR ON OP CODE                   INSDR171
         BDR,R4   PACK                                                          
         BDR,R4   UNPACK                                                        
         BAL,R7   1A6               SUB                                         
1A5      BAL,R7   1A6               ADD                                         
         B        DDIVMUL                                                       
         B        DDIVMUL                                                       
VECTOR   DATA     X'11111111'                                                   
         B        DCOMPARE                                                      
         B        LOAD                                                          
         SPACE    3                                                             
STORE    LI,R7    DST11             FORCE RETURN                                
PREDIGIT CI,R4    X'80000'          CHK WRAPAROUND                              
         BANZ     GOOF              BRANCH FOR TRAP RETURN              INSDR170
         AI,R8    0                 CHK                                         
         BEZ      DIGITS             NOT REGISTER                               
         SW,R8    R4                CHK                                         
         AI,R8    63                 OVERSHOOT                                  
         BGEZ     DIGITS            NO                                          
GOOF     EQU      %                                                     INSDR170
         LI,R0    NOPPGMOT          SET ERROR RETURN                    INSDR170
         B        EXIT                                                  INSDR170
         PAGE                                                                   
DCOMPARE BAL,R7   FETCH             LOAD OPD & DEC ACC & VERIFY                 
         AW,R0    R15               RESET CC1, CC2 &                            
         EOR,R0   R11                CHK FOR                                    
         CI,R0    1                   DIFFERENT                                 
         BAZ      COMPAREL          SAME SIGN                                   
         OR,R8    R12                 K                                         
         OR,R8    R13                                                           
         OR,R8    R14                E                                          
         OR,R11   R15                 R                                         
         AND,R11  L(X'FFFFFFF0')       O                                        
         AD,R8    R10               FINAL CHK                                   
         BCR,13   DC2               BRANCH IF ZERO OR +                         
         LCI      2                 ASSUME >                                    
DC2      STCF     R8                SAVE CC                                     
         BE       DL6               GET OUT                                     
         CI,R15   1                 CHK SIGN OF DEC ACC                         
         BAZ      DL6               IT'S +                                      
         EOR,R8   Y3                INVERT CC3 & CC4                            
         B        DL6               GET OUT                                     
         PAGE                                                                   
DDIV     RES 0                                                                  
         AI,R12   0                 1ST OVERFLOW CHECK                          
         BLZ      OVERFLOW                                                      
         CD,R8    R12               2ND OVERFLOW CHECK                          
         BLE      OVERFLOW          BAD NEWS, BABY                              
         BAL,R4   LEFTM2            1ST SHIFT ONLY                              
         LI,R7    %+1               FOR RETURN                                  
         AI,R12   0                 CHK HI BIT                                  
         BLZ      SUBM2             KNOCK IT OFF                                
         LI,R7    %+1               RESET RETURN                                
         CD,R8    R12               CHK DIVIDEND MAGNITUDE                      
         BLE      SUBM2             KNOCK IT DOWN                               
         BDR,R10  LEFT              LOOP                                        
         SLD,R12  4                 POSITION REMAINDER                          
         OR,R13   R5                INSERT SIGN                         INSDR171
         OR,R15   R11               INSERT SIGN                                 
         B        DA71-1            CHK FOR CC SETTING                          
         SPACE    3                                                             
LEFTM2   AND,R15  L(X'FFFFFFF0')    ELIMINATE SIGN                              
LEFTM1   OR,R6    R12               ACCUMULATE CARRY FOR DSA            INSDR171
LEFT     LW,R2    R14               GET 15TH DIGIT                              
        SLD,R14  4                 1ST SHIFT                                    
        LW,R3    YF                MASK                                         
        STS,R2   R12               16TH DIGIT                                   
        SCD,R12  4                 2ND SHIFT                                    
         B        0,R4              RETURN                                      
         PAGE                                                                   
         EOR,R11  X1                INVERT OPERAND SIGN                         
DADD1    LI,R6    4                 31 DIGIT OPERATION                  INSDR171
         LI,R3    X'F0'             MASK                                        
         LW,R2    R15               GET                                         
         AND,R2   XF                 SIGN                                       
         EOR,R11  R2                CHK FOR                                     
        CI,R11   1                  SAME                                        
         BAZ      DA7                  SIGNS                                    
COMPAREL LI,R5    -1                MASK                                INSDR171
         CD,R12   R8                SHORT CUT                                   
         BE       CO1               TAKE IT                                     
         LW,R4    R12               1ST                                 INSDR171
         CS,R4    R8                CHK                                 INSDR171
         BNE      CP2               DECISION                                    
         CD,R12   R8                DECISION                                    
         B        CP2               RETURN                                      
CO1      LW,R4    R14               2ND                                 INSDR171
         CS,R4    R10               CHK                                 INSDR171
         BNE      CP2               DECISION                                    
         LI,R5    -16               MASK TO EXCLUDE SIGNS               INSDR171
         LW,R4    R15               FINAL                               INSDR171
         CS,R4    R11                CHK                                INSDR171
CP2      BAZ      DC2               IT'S DC                                     
         BG       DA3               GO GO                                       
         BL       DA2               EXCHANGE OPERANDS                           
DA6      INT,R12  ZEROS             RESULT                                      
         LI,R14   0                  IS                                         
DA61     LI,R15   X'C'                PLUS                                      
DL00     LI,R8    0                 RESULT IS + OR - ZERO                       
         LCI      4                 SET CC                              INSDR170
         B        1A3               GET OUT                             INSDR170
DA2      XW,R8    R12               S                                           
         XW,R9    R13                W                                          
         XW,R10   R14                 A                                         
         XW,R11   R15                                                           
        AND,R11  L(X'FFFFFFF0')    ELIMINATE SIGN                               
         EOR,R2   X1                INVERT SIGN                                 
DA3      LI,R0    X'AF'             FOR 10'S COMPLEMENT                         
         BAL,R7   SB1               ENTER SUBTRACT LOOP                         
         B        DLXX              GET OUT                                     
DA7      LW,R0    R11               LEAST SIG AUGEND                            
         BAL,R7   AD11              ENTER ADD LOOP                              
DA72     LW,R10   R12               CHK                                         
         OR,R10   R13                FOR                                        
         OR,R10   R14                 ZERO                                      
DA71     BNEZ     DA4               NOPE                                        
         CW,R15   L(X'FFFFFFF0')    CHK AGAIN                                   
         BANZ     DA4               ALMOST, BUT NOT QUITE                       
         B        DA61              FORCE SIGN TO C FOR +                       
         PAGE                                                                   
DDIVMUL  LI,R5    11                3 BYTE OFFSET                       INSDR171
         CI,R0    9                 CHK FOR                                     
         BGE      DIGERR             OPD TOO LONG                               
         BAL,R7   FETCH             LOAD OPD & DEC ACC                          
         LW,R5    R15               COPY SIGN                           INSDR171
         AND,R5   XF                EXTRACT IT                          INSDR171
         LW,R11   R9                LOAD SIGN                                   
         AND,R11  X1                EXTRACT &                                   
         EOR,R11  R5                 SET IT                             INSDR171
         SLD,R8   -4                POSITION                                    
         LI,R10   15                LOOP COUNT                                  
         BIR,R6   DDIV              BRANCH IF DD                        INSDR171
         SPACE    3                                                             
         INT,R12  R11               CLEAR & INSERT SIGN                         
         BAL,R4   RIGHT             1ST SHIFT                                   
         LW,R5    R15               MULTIPLIER                          INSDR171
         AND,R5   XF                 DIGIT                              INSDR171
         BEZ      DM3               NO ACTION                                   
ADDM1    LI,R6    3                 SHORT OP                            INSDR171
         BAL,R7     AD21-1          JOIN ADD LOOP                               
         BDR,R5   ADDM1             AGAIN IF REQUIRED                   INSDR171
DM3      BDR,R10  RIGHT             OUTER LOOP                                  
         LI,R4    DA72              RETURN                                      
         SPACE    3                                                             
RIGHT    LW,R2    R13               GET 16TH DIGIT                              
         STS,R2   R15               INSERT FOR 15TH                             
         SCD,R14  -4                1ST SHIFT                                   
         SLD,R12  -4                2ND SHIFT                                   
         B        0,R4              RETURN                                      
         PAGE                                                                   
SUBM2    AI,R15   X'10'             ACCUMULATE QUOTIENT DIGIT                   
SUBM1    LI,R6    2                 15 DIGIT OPERATION                  INSDR171
         LI,R0    10                FOR 10'S COMPLEMENT                         
SB32     RES      0                                                             
         LW,R2    R7,R6             NEXT OPERAND WORD                   INSDR171
         BEZ      SB31              TRY AGAIN                                   
SB0      INT,R2   XF                CLEAR ACCUMULATOR   SET FLAG                
SB1      SW,R0    R7,R6             COMPLEMENT                          INSDR171
         AND,R0   R3                EXTRACT CURRENT OPERAND DIGIT(COMP)         
         LS,R2    R11,R6            CURRENT ACCUMULATOR DIGIT           INSDR171
         SCS,R3   1                 ADJUST MASK                                 
         AW,R2    R0                ACCUMULATE                                  
         BNC      SB2               SKIP IF NO CARRY                            
SB3      LW,R0    L(X'AAAAAAAA')    TO                                          
         AND,R0   R3                 COMPENSATE                                 
         SW,R2    R0                  FOR                                       
         LW,R0    L(X'AAAAAAAA')       CARRY                                    
         SCS,R3   3                 ADJUST MASK                                 
         BEV      SB1               NOT END OF WORD                             
         STW,R2   R11,R6            STORE RESULT                        INSDR171
SB31     BDR,R6   SB32              LOOP                                INSDR171
         B        0,R7              CARRY RETURN - NO BORROW                    
         SPACE    3                                                             
SB2      CS,R2    L(X'AAAAAAAA')    CHK FOR EXCESS OF 9                         
         BGE      SB3               YUP                                         
         LW,R0    L(X'99999999')    BORROW                                      
         SCS,R3   3                 ADJUST MASK                                 
         BEV      SB1               NOT END OF WORD                             
         STW,R2   R11,R6            STORE RESULT                        INSDR171
         BDR,R6   SB0               LOOP                                INSDR171
         PAGE                                                                   
AD1      AW,R0    R7,R6             CARRY + NXT OPT DIGIT               INSDR171
AD11     AND,R0   R3                EXTRACT IT                                  
         LS,R2    R11,R6            NXT ACCUMULATOR DIGIT               INSDR171
         SCS,R3   1                 ADJUST MASK                                 
         AW,R2    R0                ACCUMULATE                                  
         BNC      AD2               SKIP IF NO CARRY                            
AD3      LW,R0    L(X'AAAAAAAA')    TO                                          
         AND,R0   R3                 COMPENSATE                                 
         SW,R2    R0                  FOR                                       
         LW,R0    VECTOR               CARRY                                    
         SCS,R3   3                 ADJUST MASK                                 
         BEV      AD1               NOT END OF WORD                             
         STW,R2   R11,R6            STORE RESULT                        INSDR171
         LI,R2    0                 CLEAR                                       
         BDR,R6   AD1               LOOP                                INSDR171
OVERFLOW LW,R8    Y4                SET CC2                                     
         B        DIGERR+1          GET OUT                                     
AD2      CS,R2    L(X'AAAAAAAA')    CHK FOR EXCESS OF 9                         
         BGE      AD3               YUP                                         
         LW,R0    R7,R6             ADDEND                              INSDR171
         SCS,R3   3                 ADJUST MASK                                 
         BEV      AD11              NOT END OF WORD                             
         STW,R2   R11,R6            STORE RESULT                        INSDR171
         LI,R2    0                 CLEAR                                       
AD21     BDR,R6   %+2               LOOP                                INSDR171
         B        0,R7              RETURN                                      
         LW,R0    R7,R6             NXT OPD WD                          INSDR171
         BNEZ     AD11              ENTER LOOP IF SIGNIFICANT                   
         B        AD21              SKIP A WORD                                 
         PAGE                                                                   
1A6      AI,R7    DADD1-1A5-1       FOR RETURN TO ADD ROUTINE                   
FETCH    INT,R8   ZEROS             CLEAR                                       
         INT,R10  ZEROS              OPERAND ACCUMULATOR                        
         LB,R2    0,R4              LST SIG DIGIT & SIGN                        
         CS,R2    XF                CHK FOR ODD +                               
         BNE      %+2               SKIP IF NOT                                 
         BDR,R2   F2                CHANGE F TO E                               
         CS,R2    L(X'99999999')    CHK SIGN                                    
         BLE      DIGERR            ERROR                                       
F2       CI,R2    X'9F'             CHK DIGIT IN UPPER HALF BYTE                
         BG       DIGERR            GOOF                                        
F6       STB,R2   R7,R5             STASH                               INSDR171
         BDR,R0   F1                LOOP                                        
         SPACE    3                                                             
DIGITS   LCI      4                 LOAD THE                                    
         LM,R12   R12,R1             DECIMAL ACCUMULATOR                        
F        LW,R2    R15               LST SIG 7 DIGITS & SIGN                     
         CS,R2    XF                CHK FOR ODD +                               
         BNE      %+3               SKIP IF NOT                                 
         AI,R15   -3                CHANGE FROM F TO C                          
         B        0,R7              RETURN                                      
         CS,R2    L(X'99999999')    CHK SIGN                                    
         BLE      DIGERR            ERROR                                       
SIGN     AND,R15  M7                CHANGE TO                                   
         AI,R15   4                  C FOR + OR D FOR -                         
         B        0,R7              RETURN                                      
F1       SD,R4    X1                NEXT POSITION                               
         LB,R2    0,R4              LOAD 2 DIGITS                               
         CI,R2    X'88'             SHORT CHECK                                 
         BAZ      F6                BRANCH IF PASSED                            
         CS,R2    L(X'99999999')    CHK DIGIT IN LOWER HALF BYTE                
         BLE      F2                BRANCH IF OK                                
         B        DIGERR            ERROR                                       
         PAGE                                                                   
PACK     AW,R4    R0                2 DIGITS PER BYTE                           
LOAD     RES      0                                                             
         INT,R12  ZEROS             CLEAR                                       
         LI,R14   0                  THE DECIMAL ACCUMULATOR                    
         LB,R2    0,R4              LST SIG DIGIT & SIGN                        
         LW,R15   R2                COPY                                        
         BIR,R6   PKA               BANCH IF PACK                       INSDR171
         CS,R2    XF                CHK FOR ODD +                               
         BNE      DLA               BRANCH IF NOT                               
         BDR,R15  DL000             EVEN                                        
DLXY     SD,R4    X1                NEXT POSITION                               
         LB,R2    0,R4              GET 2 DIGITS                                
         BNEZ     DL20              BRANCH IF RESULT NOT ZERO                   
DL0      BDR,R0   DLXY              LOOP                                        
DL5X     BAL,R7   SIGN              FORCE C OR D                                
DL5      LCI      4                 SET CC                              INSDR170
1A3      STM,R12  R12,R1            STORE DECIMAL ACCUMULATOR                   
DL6      LW,R9    YF                MASK                                        
NORMAL   LI,R0    U:XITSIM          SET NORMAT RETURN                   INSDR170
         B        EXIT                                                  INSDR170
DLA      RES      0                                                             
         CS,R2    L(X'99999999')    CHK SIGN                                    
         BLE      DIGERR            ERROR                                       
DL000    RES      0                                                             
         CI,R2    X'F0'             CHK LST SIG DIGIT FOR ZERO                  
         BAZ      DL0               BRANCH IF ZERO                              
         CI,R2    X'9F'             CHK DIGIT                                   
         BLE      DLB               SKIP IF OK                                  
DL1      CI,R2    X'9F'             CHK HI ORDER DIGIT                          
         BG       DIGERR            GOOF                                        
DL111    RES      0                                                             
         STB,R2   R11,R5            STASH IT                            INSDR171
DLB      RES      0                                                             
         BDR,R0   DL2               LOOP                                        
DLXX     LW,R8    Y2                ASSUME +                                    
DA4      EQU      DLXX                                                          
         CI,R15   1                 CHK SIGN ASSUMPTION                         
         BAZ      DL5X              OK                                          
         BDR,R8   DL5X              SET PSEUDO CC -                             
DL2      SD,R4    X1                NEXT POSITION                               
         LB,R2    0,R4              GET 2 DIGITS                                
DL20     CI,R2    X'88'             SHORT CHECK                                 
         BAZ      DL111             BRANCK IF PASSED                            
         CS,R2    L(X'99999999')    CHK LO DIGIT                                
         BLE      DL1               BRANCH IF OK                                
         SPACE    5                                                             
DIGERR   LW,R8    Y8                SET                                         
         LW,R9    YC                 CONDITION                                  
         LW,R5    -2,R1             CHK                                 INSDR171
         CW,R5    Y002               TRAP BIT                           INSDR171
         BAZ      NORMAL            NOT ON                              INSDR170
         B        EXITM1            SIMULATE DEC TRAP                   INSDR170
         PAGE                                                                   
PKA      RES      0                                                             
         SLS,R15  -4                POSITION                                    
         CI,R15   X'F'              CHK ODD +                                   
         BNE      %+2               SKIP IF NOT                                 
         BDR,R15  PK00              EVEN                                        
         CI,R15   10                CHK SIGN                                    
         BL       DIGERR            ERROR                                       
PK00     CI,R2    X'F'              CHK DIGIT                                   
         BAZ      PK0               SKIP IF 0                                   
         LW,R10   R15               POSITION                                    
         B        PK3               ENTER LOOP                                  
PK11     SD,R4    X1                NEXT POSITION                               
         LB,R10   0,R4              GET IT                                      
         AND,R10  XF                ZAP ZONES                                   
         BNEZ     PK2               BRANCH IF NOT ZERO                          
         BDR,R4   %+1               NEXT BYTE                                   
         LB,R2    0,R4              GET IT                                      
         CI,R2    X'F'              BRANCH                                      
         BANZ     PK3                IF NOT ZERO                                
PK0      BDR,R0   PK11              LOOP                                        
         B        DL5X              GET OUT                                     
PK1      SD,R4    X1                NEXT POSITION                               
         LB,R10   0,R4              GET IT                                      
         AND,R10  XF                ZAP ZONES                                   
PK2      CI,R10   9                 CHK DIGIT                                   
         BLE      %+2               SKIP IF OK                                  
         B        DIGERR            ERROR                                       
         BDR,R4   %+1               NEXT BYTE                                   
         LB,R2    0,R4              GET IT                                      
PK3      CS,R2    L(X'99999999')    CHK DIGIT                                   
         BLE      %+2               SKIP IF OK                                  
         B        DIGERR            ERROR                                       
         SLS,R2   4                 ALIGN                                       
         OR,R2    R10               COLLECT DIGITS                              
         STB,R2   R11,R5            INSERT                              INSDR171
         BDR,R0   PK1               LOOP                                        
         B        DLXX              SET CC                                      
         PAGE                                                                   
DST1     SD,R4    X1                NEXT POSITION                               
DST11    LB,R2    R11,R5            GET IT                              INSDR171
         STB,R2   0,R4              STASH IT                                    
         BDR,R0   DST1              LOOP                                        
DST2     RES      0                                                             
         LW,R9    YC                 SIGNIFICANT INFO STORED                    
DST20    CI,R5    3                 MOD 4 CHK                           INSDR171
         BANZ     DST5              STILL BYTES                                 
         SLS,R5   -2                WORD ALLIGN                         INSDR171
DST3     BDR,R5   %+2               NEXT WORD                           INSDR171
         B        NORMAL            GET OUT                             INSDR170
         LW,R2    R11,R5            CHK A WORD                          INSDR171
         BEZ      DST3              OK                                          
DST4     LW,R8    Y4                SOME SIGNIFICANCE LOST                      
         B        NORMAL            GET OUT                             INSDR170
DST5     BDR,R5   %+1               NEXT POSITION                       INSDR171
         LB,R2    R11,R5            CHK A BYTE                          INSDR171
         BEZ      DST20             OK                                          
         B        DST4              NO NO                                       
         PAGE                                                                   
UNPACK   AW,R4    R0                2 DIGITS / BYTE                             
         BAL,R7   PREDIGIT          LOAD ACCUMULATOR                            
         LB,R2    R11,R5            LAST SIG BYTE                       INSDR171
         SLD,R2   -4                END                                         
         SCS,R3   8                  AROUND                                     
         OR,R2    R3                  PLAY                                      
         LI,R3    X'F0'             INITIALIZE                                  
UNPK02   STB,R2   0,R4              STASH IT                                    
         BDR,R0   UNPK01            LOOP                                        
         B        DST2              CHK FOR LOST SIGNIFICANCE                   
UNPK01   SD,R4    X1                NEXT POSITION                               
         LB,R2    R11,R5            GET IT                              INSDR171
         SLD,R2   -4                DECOMPOSE                                   
         SCS,R3   4                 LST SIG DIGIT                               
         STB,R3   0,R4              STASH IT                                    
         AI,R2    X'F0'             INSERT ZONES                                
         BDR,R4   UNPK02            NEXT BYTE                                   
         PAGE                                                                   
         END                                                                    
