.TITLE VIRABS - ROUTINE TO CONVERT VIRT # TO ABS INTEGER .IDENT 'VITA00' .PSECT VIRABS ; KEN DEMERS ; UTRC ; NOVEMBER 1979 ; THIS ROUTINE CONVERTS A F.P. VIRTUAL NUMBER ; TO A ABSOLUTE INTEGER SCREEN COORDINATE. THE ; CONVERSION IS DONE USING THE COORDINATE SYSTEM ; (WINDOW) ESTABLISHED BY GRID ; EDIT HISTORY ; 5-MAY-80 ++01 RESULT IS ROUNDED ; ON ENTRY FOR FLOATING POINT VERSION; ; AC0 = F.P. OF ABSOLUTE INTEGER MAX ; AC1 = F.P. OF MAX RANGE ; R0 = A(VIRTUAL F.P. # TO BE CONVERTED) ; ON ENTRY FOR NON-FLOATING POINT VERSION; ; A$IMAX = F.P. OF ABSOLUTE INTEGER MAX ; M$XRAN = F.P. OF MAX RANGE ; R0 = A(VIRTUAL F.P. # TO BE CONVERTED) ; INTERNAL GLOBALS .GLOBL V$IRABS ; EXTERNAL GLOBALS .GLOBL S$AVARG,R$STARG ; ASSIGNMENTS AC0 = %0 ;FPP ACCUMULATOR 0 AC1 = %1 AC2 = %2 AC3 = %3 AC4 = %4 V$IRABS: CALL S$AVARG ;SAVE REGS .IF DF FP$ STF AC0,AC3 ;SAVE AC0 STF AC1,AC4 ;SAVE AC1 MULF (R0),AC3 ;VIRT # * MAX OF AXIS TSTF AC4 ;TST RANGE CFCC ;GET COND CODES BGE VIR10 ;RANGE WAS POS NEGF AC4 ;MAKE IT POS VIR10: DIVF AC4,AC3 ;GET ABS # ADDF HALF,AC3 ;++01 ROUND THE # UP .IFF MOV R0,(PC)+ ;STORE ADDR OF VIRT F.P. # TO BE CONVERTED VNPTR: .WORD 0 CALL S$AVARG ;SAVE REGS JSR R4,P$OLISH ;ENTER OTS FOR THREADED F.P. CODE .WORD MOF$MM,M$XRAN,TEMP ;SAVE MAX RANGE .WORD MOF$MS,A$IMAX ;GET ABS INT MAX .WORD MUF$PS,VNPTR ;VIRT F.P. # * MAX OF AXIS .WORD TSF$M,TEMP ;IS RANGE POSITIVE? .WORD BGE$,VIR10 ;YES .WORD NGF$M,TEMP ;MAKE IT POS VIR10: .WORD DIF$MS,TEMP ;GET ABS # .WORD ADF$MS,HALF ;ROUND THE # UP .WORD MOF$SM,TEMP ;SAVE RESULT .WORD .+2 ;RETURN FROM OTS CALL R$STARG ;RESTORE REGS .ENDC CALL R$STARG ;RESTORE REGS .IF DF FP$ STCFI AC3,R0 ;ON EXIT R0= INT OF RESULT .IFF CALL S$AVARG ;SAVE REGS JSR R4,P$OLISH ;ENTER OTS .WORD MOF$MS,TEMP ;GET RESULT .WORD CIF$ ;CONVERT IT TO INTEGER .WORD MOI$SM,TEMP ;GET RESULT .WORD .+2 ;EXIT FROM OTS CALL R$STARG ;RESTORE REGS MOV TEMP,R0 ;ON EXIT, R0= INT OF RESULT .ENDC RETURN HALF: .FLT2 .5 ;CONSTANT USED TO ROUND UP A$IMAX:: .BLKW 2 ;ABS INT MAX M$XRAN:: .BLKW 2 ;MAX RANGE TEMP: .BLKW 2 ;F.P. TEMP STORAGE .END