         TITLE    '** FP SYMULATOR **'                                          
*                                                                               
* CATALOG NO. 704363 SIGMA 5/7 FLOATING INSTRUCTION SIMULATOR                   
*                                                                               
* REVISION D00 (11-10-69) COMPLETE REWRITE FOR NEW MONITOR XFACE                
*                                                                               
         SYSTEM   SIG5P                                                         
*                                                                               
* REGISTER ASSIGNMENTS                                                          
*                                                                               
FL       EQU      0                 OPERAND SIGN FLAGS                          
OP       EQU      FL                INSTRUCTION OP CODE                         
R1       EQU      1                 POINTER TO TRAP CONTEXT TABLE               
RA       EQU      2                 WORD ADDRESS OF R FIELD REG STRG            
TF       EQU      RA+1              INSTRUCTION TAG FIELD                       
MX       EQU      4                 MEMORY OPERAND EXPONENT                     
MA       EQU      4                 WORD ADDRESS OF MEMORY OPERAND              
SL       EQU      5                 INDEX FOR SHORT(-2) OR LONG(-1) OPN.        
RX       EQU      6                 REGISTER OPERAND EXPONENT                   
SC       EQU      7                 SHIFT COUNT FOR DIVIDE OPNS.                
PSW      EQU      8                 PROGRAM STATUS WORD                         
RM       EQU      10                REGISTER MANTISSA(MUST BE EVEN)             
MM       EQU      12                MEMORY MANTISSA(MUST BE EVEN)               
T        EQU      14                TEMPORARY(MUST BE EVEN)                     
PCBPOINT EQU      X'4E'                                                 INSDR170
*                                                                               
R0       EQU      0                                                     INSDR170
R2       EQU      2                                                     INSDR170
R3       EQU      3                                                     INSDR170
R4       EQU      4                                                     INSDR170
R5       EQU      5                                                     INSDR170
R6       EQU      6                                                     INSDR170
R7       EQU      7                                                     INSDR170
R8       EQU      8                                                     INSDR170
R9       EQU      9                                                     INSDR170
R10      EQU      10                                                    INSDR170
R11      EQU      11                                                    INSDR170
R12      EQU      12                                                    INSDR170
R13      EQU      13                                                    INSDR170
R14      EQU      14                                                    INSDR170
R15      EQU      15                                                    INSDR170
         PAGE                                                                   
         DEF      FPSIM                                                         
FPSIM    B        U:FPSIM           RBM ENTRY                                   
U:XITSIM EQU      X'1E6'            NORMAL TRAP RETURN                          
U:TRPSIM EQU      X'1E7'            SIMULATE TRAP RETURN (DEC & FP)             
M31      DATA     X'7FFFFFFF'                                                   
YE       DATA     X'E0000000'                                                   
M24      DATA     X'00FFFFFF'                                                   
Y4       DATA     X'40000000'                                                   
Y2       DATA     X'20000000'                                                   
Y1       DATA     X'10000000'                                                   
YF       DATA     X'F0000000'                                                   
Y8       DATA     X'80000000'                                                   
Y04      DATA     X'04000000'                                                   
Y02      DATA     X'02000000'                                                   
YC       DATA     X'C0000000'                                                   
XN2      DATA     -2                                                            
XFE      DATA     X'FE'                                                         
Y07      DATA     X'07000000'                                                   
Y0FFE    DATA     X'0FFE0000'                                           INSDR170
         PAGE                                                                   
* CONSTANTS                                                                     
         BOUND    8                                                             
NORMCHK  DATA     X'100000',X'1000000'                                          
ZERO     DATA     0                                                     INSDR170
         PAGE                                                                   
* ENTRY                                                                         
U:FPSIM  RES      0                                                             
         STD,R4   R6                OLD PSD TO REG 6-7                  INSDR170
         LCI      2                 PULL OLD REGS 4-5                   INSDR170
         PLM,R4   *PCBPOINT                                             INSDR170
         LCI      2                                                     INSDR170
         PSM,R6   *PCBPOINT         PUSH MONITORS PSD                   INSDR170
         LW,PSW   -2,R1             1ST WORD OF PSD                             
         LW,PSW+1 YF                MASK                                        
         LI,MM+1  0                 CLEAR LSH MEM OP MANTISSA                   
         LI,RM+1  0                 CLEAR LSH REG OP MANTISSA                   
         AND,PSW  Y07 07000000      EXTRACT FF, RESET CC                        
         LB,OP    MA                OP CODE BYTE                                
         LH,RA    MA                OBTAIN,                                     
         LCW,SL   RA                FOR LENGTH INDICATOR                        
         AND,RA   XFE 000000FE      EXTRACT R & X FIELDS                        
         SLD,RA   -4                RIGHT JUSTIFY R FIELD                       
         AND,R1   M24 00FFFFFF      CLEAR GARBAGE                               
FP01     AI,SL    X'3000'           + FOR LONG, - FOR SHORT                     
         BLZ      FP02              SKIP IF SHORT                               
FP02A    AND,MA   XN2 FFFFFFFE      FORCE EVEN                                  
         CI,RA    1                 SKIP                                        
         BAZ      FP02               IF ODD                                     
         OR,RA    YE E0000000       FORCE NEGATIVE                              
FP02     SCS,TF   3                 RIGHT JUSTIFY X FIELD                       
         BNOV     FP05              SKIP IF NO INDEX                            
         BIR,SL   FP03A             SKIP IF SHORT                               
         AW,MA    *TF,R1            ADD INDEX FOR EFFECTIVE ADDRESS             
FP03A    AW,MA    *TF,R1            ADD INDEX FOR EFFECTIVE ADDRESS             
FP05     CI,MA    X'1FFF0'          CHK FOR REGISTER LOC                        
         BANZ     %+2               SKIP IF NOT                                 
         AW,MA    R1                POINT TO REGISTER STORAGE                   
         AW,RA    R1                POINT TO REGISTER STORAGE                   
         BIR,SL   FP06A             SKIP IF SHORT                               
FP06     LW,RM+1  1,RA              LOAD LSH REGISTER OPERAND                   
         AI,RA    0                 SKIP                                        
         BGEZ     %+2                IF EVEN                                    
         LW,RM+1  0,RA              IT'S SCREWY, BUT DO IT AGAIN                
         LW,MM+1  1,MA              LOAD LSH MEMORY OPERAND                     
FP06A    LW,RM    0,RA              LOAD REGISTER OPERAND                       
         BGEZ     %+3               SKIP IF NOT NEGATIVE                        
         LCD,RM   RM                ABS VALUE                                   
         AI,FL    X'1100'           NEG REG OPD, ASSUME - RSLT FOR */           
         LW,MM    0,MA              LOAD MEMORY OPERAND                         
         BGEZ     FP10              SKIP IF NOT NEGATIVE                        
         LCD,MM   MM                ABS VALUE                                   
FP09     AI,FL    X'10100'          NEG MEM OPD, INVERT RSLT FOR */             
FP10     LB,RX    RM                REG OPD EXPONENT                            
         LB,MX    MM                MEM OPD EXPONENT                            
         AND,RM   M24 00FFFFFF      EXTRACT MANTISSA                            
         AND,MM   M24 00FFFFFF      DITTO                                       
         CLR,MM   ZERO              CHK MEM OPD FOR ZERO                        
         BCS,15   FP11              SKIP IF NOT                                 
         CI,FL    X'10000'          CHK FOR -1                                  
         BANZ     2A                IT'S A DIRTY ONE                            
         CI,OP    2                 CHK OP CODE                                 
         BAZ      FP11              BRANCH IF ADD/SUB                           
FP15     CI,OP    1                 CHK OP CODE                                 
         BAZ      OVERFLOW          DIVIDE BY ZERO                              
         INT,RM   ZERO              CLEAR RESULT                                
         B        ADD71             STORE                                       
2A       LW,MM    NORMCHK+1 01000000INSERT THE 1                                
         AI,MX    -1                CORRECT EXPONENT                            
FP11     CLR,RM   ZERO              CHK REG OPD FOR ZERO                        
         BCS,15   3A                BRANCH IF NOT                               
         CI,FL    X'1000'           CHK FOR -1                                  
         BANZ     4A                IT'S A DIRTY ONE                            
         CI,OP    2                 CHK OP CODE                                 
         BANZ     ADD71             STORE IF MULTIPLY OR DIVIDE                 
         SPACE    3                                                             
ADD02    AH,OP    FL                MEM OPD SIGN INVERTED BY ADD                
         SW,MX    RX                CHK EXPONENTS                               
         BE       ADD04             SKIP IF =                                   
         BL       ADD03             BRANCH IF MEM<REG                           
         AW,RX    MX                GREATEST EXPONENT                           
         LCW,MX   MX                FOR RIGHT SHIFT                             
         AI,MX    15                CHK OVERSHIFT                               
         BGE      %+2               SKIP IF OK                                  
         LI,MX    0                 ENOUGH'S ENOUGH                             
         SAS,MX   2                 FOR HEX SHIFT                               
         SAD,RM   -60,MX            PREALIGN                                    
         BDR,SL   ADD04             BRANCH IF LONG                              
         AND,RM+1 YF F0000000       1 GUARD                                     
         B        ADD04             LONG                                        
         PAGE                                                                   
4A       LW,RM    NORMCHK+1 01000000INSERT THE 1                                
         AI,RX    -1                CORRECT EXPONENT                            
3A       CI,OP    2                 CHK OP CODE                                 
         BAZ      ADD02             BRANCH IF ADD/SUB                           
         AI,MX    -X'40'            REMOVE BIAS                                 
FP12     CW,RM    NORMCHK 00100000  CHK NORMALIZED REG OPD                      
         BGE      FP13              BRANCH IF OK                                
         SLD,RM   4                 SHIFT 1 HEX                                 
         BDR,RX   FP12              DECREMENT EXPONENT                          
         B        FP12              UNDERFLOW IMPOSSIBLE                        
FP13A    SLD,MM   4                 SHIFT 1 HEX                                 
         AI,MX    -1                DECREMENT EXPONENT                          
FP13     CW,MM    NORMCHK 00100000  CHK NORMALIZED MEM OPD                      
         BL       FP13A             BRANCH IF  NOT OK                           
         SLD,MM   6                 LEFT JUSTIFY                                
         SLD,RM   6                  BOTH OPERANDS                              
FP14     CI,OP    1                 CHK OP CODE                                 
         BANZ     MUL               *                                           
         SPACE    3                                                             
         SLD,RM   -2                INHIBIT OVERFLOW                            
         LI,SC    -6                INITIALIZE THE SHIFT COUNT                  
         CW,MM    Y4 40000000       CHK BINARY NORMALIZATION                    
         BANZ     DIV               /                                           
         SLD,MM   1                 SHIFT 1 BIT                                 
         BIR,SC   %-3               BUMP SHIFT COUNT & LOOP                     
DIV      BDR,SL   DIVL              BRANCH IF LONG                              
DIVS     DW,RM    MM                X/Y                                         
         LW,RM    RM+1              PLACE QUOTIENT                              
         B        DIV02             JOIN                                        
DIVL     DW,RM    MM                X/MSH(Y)                                    
         LW,T     RM+1              SAVE QUOTIENT                               
         LI,RM+1  0                 CLEAR                                       
         SLD,RM   -2                INHIBIT OVERFLOW                            
         DW,RM    MM                REMAINDER/MSH(Y)                            
         LI,RM    0                 CLEAR 2ND ORDER REMAINDER                   
         SLD,RM   2                 SCALE                                       
         AW,RM    T                 X/MSH(Y) TO EXTENDED PRECISION              
         LW,T     MM+1              LSH(Y)                                      
         SLD,T    -3                INHIBIT OVERFLOW                            
         DW,T     MM                LSH(Y)/MSH(Y)                               
         MW,T     RM                *MSH(X)/MSH(Y)                              
         SLD,T    -29               SCALE                                       
         SD,RM    T                 RESULT                                      
DIV02    SAD,RM   0,SC              SCALE                                       
         SW,RX    MX                EXPONENT DIFFERENCE                         
MUL03    OR,PSW   Y2 20000000       SET CC POSITIVE                             
         CI,FL    X'100'            CHK SIGN                                    
         BAZ      %+2               SKIP IF OK                                  
         SW,PSW   Y1 10000000       SET CC NEGATIVE                             
MUL04    CW,RM    M24 00FFFFFF      CHK NORMALIZED                              
         BLE      MUL05             JOIN IF OK                                  
         SLD,RM   -4                1 HEX                                       
         AI,RX    1                 BUMP EXPONENT                               
         B        MUL04             LOOP                                        
MUL05    CI,RX    X'80'             CHK OVER/UNDERFLOW                          
         BAZ      ADD70             BRANCH IF OK                                
         BL       UNDERFLW          YOU HAVE FLOWN UNDER                        
OVERFLOW OR,PSW   Y4 40000000       SET CC2                                     
TRAP     RES      0                                                             
         LCI      8                 INDICATE FLT PT FLT BY SETTING CC1          
EXIT2    EQU      %                                                     INSDR170
         STCF     R6                SAVE CONDITION CODES                INSDR170
         LI,R0    U:TRPSIM          SET FOR FLOAT TRAP                  INSDR170
         LC       R6                                                    INSDR170
         STCF     R0                PUT CCS IN WITH RETURN ADR.         INSDR170
EXIT3    EQU      %                                                     INSDR170
         LCI      2                                                     INSDR170
         PLM,R6   *PCBPOINT         GET MONITORS OLD PSD                INSDR170
         AND,R6   Y0FFE             CLEAR ADDR AND CC                   INSDR170
         OR,R6    R0                                                    INSDR170
         LPSD,0   R6                EXIT                                INSDR170
         PAGE                                                                   
MULS     LW,RM+1  RM                SCALE                                       
         MW,RM    MM                X*Y                                         
         B        MUL01             JOIN                                        
MUL      BIR,SL   MULS              BRANCH IF SHORT                             
         SLS,RM+1 -1                ABS VALUES                                  
         SLS,MM+1 -1                 OF LSH                                     
         LW,T+1   RM                MSH(X)                                      
         MW,RM    MM                LSH(X)*MSH(Y)                               
         LW,RM+1  RM                SCALE                                       
         LI,RM    0                 CLEAR                                       
         LW,T     MM                MSH(Y)                                      
         MW,MM    T+1               LSH(Y)*MSH(X)                               
         AW,RM+1  MM                ACCUMULATE PARTIALS                         
         SLD,RM   1                 SCALE                                       
         MW,T     T                 MSH(X)*MSH(Y)                               
         AD,RM    T                 RESULT                                      
MUL01    AW,RX    MX                ADD EXPONENTS                               
         BDR,RX   MUL03             ADJUST EXPONENT                             
         B        MUL03             CHK OVERNORMALIZATION                       
         PAGE                                                                   
ADD03    AI,MX    15                CHK OVERSHIFT                               
         BGE      %+2               SKIP IF OK                                  
         LI,MX    0                 SUFFICIENT                                  
         SAS,MX   2                 FOR HEX SHIFT                               
         SAD,MM   -60,MX            PREALIGN                                    
         BDR,SL   %+2               BRANCH IF LONG                              
         AND,MM+1 YF F0000000       1 GUARD                                     
ADD04    CI,FL    1                 CHK SIGN OF MEM OPD                         
         BANZ     %+2               SKIP IF +                                   
         LCD,MM   MM                CHANGE SIGN                                 
ADD05    CI,FL    X'1000'           CHK SIGN OF REG OPD                         
         BAZ      %+2               SKIP IF +                                   
         LCD,RM   RM                CHANGE SIGN                                 
         AD,RM    MM                ADD 'EM UP                                  
         BGZ      ADD07             +                                           
         BLZ      ADD06             -                                           
         CW,PSW   NORMCHK+1 01000000TEST FN                                     
         BANZ     ADD71             STORE IF ON                                 
         OR,PSW   Y8 80000000       SET CC1                                     
         CW,PSW   Y04 04000000      TEST FS                                     
         BAZ      ADD71             STORE IF OFF                                
         B        TRAP              TRAP IF ON                                  
ADD06    OR,PSW   Y1 10000000       SET CC4 FOR -                               
         LCD,RM   RM                ABS VALUE                                   
         B        ADD08             JOIN                                        
ADD07    OR,PSW   Y2 20000000       SET CC3 FOR +                               
ADD08    CLM,RM   NORMCHK 00100000  CHK NORMALIZED 01000000                     
         BGE      ADD13             BRANCH IF OK                                
         CW,PSW   NORMCHK+1 01000000CHK FN                                      
         BANZ     ADD70             BRANCH IF ON                                
         CI,RM    X'FFF'            CHK 3 POSTS                                 
         BG       ADD09             SKIP IF OK                                  
         OR,PSW   Y8 80000000       SET CC1                                     
ADD09    SLD,RM   4                 SHIFT 1 HEX                                 
         AI,RX    -1                DECREMENT EXPONENT                          
         CW,RM    NORMCHK 00100000  CHK NORMALIZED                              
         BL       ADD09             BRANCH IF NOT YET                           
ADD10    AI,RX    0                 CHK UNDERFLOW                               
         BGEZ     ADD12             BRANCH IF NOT                               
         AI,PSW   0                 CHK CC1                                     
         BGEZ     UNDERFLW          BRANCH IF LESS THAN 3 HEX POSTS             
         CW,PSW   Y02 02000000      CHK FZ                                      
         BANZ     UNDERFLW          PREFER UNDERFLOW TRAP                       
         CW,PSW   Y04 04000000      CHK FS                                      
         BANZ     TRAP              TRAP IF ON                                  
UNDERFLW OR,PSW   YC C0000000       SET CC1,CC2                                 
         CW,PSW   Y02 02000000      CHK FZ                                      
         BANZ     TRAP              YOU'RE IN THE SAND, BABY.                   
         INT,RM   ZERO              SET RESULT TO ZERO                          
         AND,PSW  YC C0000000       RESET CC3 & CC4                             
         B        ADD71             STORE RESULT                                
ADD12    AI,PSW   0                 CHK CC1                                     
         BGEZ     ADD70             BRANCH IF OK                                
         CW,PSW   Y04 04000000      CHK FS                                      
         BANZ     TRAP              TRAP IF ON                                  
         SPACE    3                                                             
ADD70    STB,RX   RM                INSERT EXPONENT                             
         CW,PSW   Y1 10000000       CHK SIGN                                    
         BAZ      ADD71             STORE NON-NEGATIVE                          
         AI,RA    0                 SKIP                                        
         BLZ      %+2                IF ODD                                     
         BDR,SL   %+2               SKIP IF LONG                                
         LI,RM+1  0                 TRUNCATE                                    
         LCD,RM   RM                NEGATE                                      
ADD71    BIR,SL   ADD83             SKIP IF SHORT                               
ADD82    AI,RA    0                 SKIP                                        
         BLZ      ADD83              IF ODD                                     
         STW,RM+1 1,RA              INSERT LSH                                  
ADD83    STW,RM   0,RA               STORE RESULT                               
EXIT1    EQU      %                                                     INSDR170
         LI,R0    U:XITSIM                                              INSDR170
         B        EXIT3             FOR NORMAL EXIT                     INSDR170
ADD13    BCS,4    ADD70             BRANCH IF NO OVERFLOW                       
         B        MUL04+2           TO SCALE & ADJUST EXPONENT                  
         END                                                                    
