.TITLE ABSGRD - ROUTINE TO CONVRT ABSOLUTE INT COORD TO GRID F.P. COORD .IDENT 'ABSGRD' .PSECT ABSGRD ; KEN DEMERS ; UTRC ; NOVEMBER 1979 ; THIS ROUTINE CONVERTS AN ABSOLUTE INTEGER ; X,Y COORDINATE TO A FLOATING POINT SCALED ; COORDINATE AS DETERMINED BY THE GRID COORDINATE ; SYSTEM. ; [ (XACOR-RIDGX ) ] ; XVALUE = [ (----------- ) * XRANGE ] + XMIN ; [ ( XABMAX ) ] ; ON ENTRY: ; R1 = A(ABSOLUTE X COORDINATE) ; R2 = A(ABSOLUTE Y COORDINATE) ; ASSIGNMENTS AC0 = %0 ;FPP ACCUMULATOR 0 ; INTERNAL GLOBALS .GLOBL A$BSGRD ; EXTERNAL GLOBALS .GLOBL X$ABMAX,Y$ABMAX,X$RANGE,Y$RANGE,X$MIN,Y$MIN .GLOBL R$IDGX,R$IDGY .IF NDF FP$ ;NO FLOATING POINT AVAILABLE A$BSGRD: CALL S$AVARG MOV R1,(PC)+ ARG1: 0 ;A(X) MOV R2,(PC)+ ;A(Y) ARG2: 0 SUB #R$IDGY,(R2) ;INTEGER SUBRACT SUB #R$IDGX,(R1) MOV (R2),-(SP) ;DO R2 LAST MOV (R1),-(SP) JSR R4,P$OLISH ;ENTER RPN .WORD CFI$ ;FLOAT (R1) .WORD DIF$MS,X$ABMAX ;DIVIDE BY XABMAX .WORD MUF$MS,X$RANGE ;MULT BY XRANGE .WORD ADF$MS,X$MIN ;+XMIN .WORD MOF$SP,ARG1 ;STORE FLOATING .WORD CFI$ ;FLOAT Y NOW,LEFT ON STACK FROM .WORD DIF$MS,Y$ABMAX .WORD MUF$MS,Y$RANGE ;DO SAME THING FOR Y .WORD ADF$MS,Y$MIN .WORD MOF$SP,ARG2 .WORD .+2 ;EXIT RPN CALL R$STARG .IFF ;FLOATING POINT AVAILABLE A$BSGRD: SETF ;SET FPP INTO S.P. MODE SETI ;SET FPP INTO SHORT INTEGER MODE SUB #R$IDGX,(R1) ;SUB R$IDGX FROM ABS COORD LDCIF (R1),AC0 ;GET ABSOLUTE INT X COORD DIVF X$ABMAX,AC0 ;DIVIDE BY X$ABMAX MULF X$RANGE,AC0 ;MULT * X$RANGE ADDF X$MIN,AC0 ;ADD X$MIN STF AC0,(R1) ;STORE GRID SCALED F.P. X COORD SUB #R$IDGY,(R2) ;SUB R$IDGY FROM ABS COORD LDCIF (R2),AC0 ;GET ABSOLUTE INT Y COORD DIVF Y$ABMAX,AC0 ;DIVIDE BY Y$ABMAX MULF Y$RANGE,AC0 ;MULT * Y$RANGE ADDF Y$MIN,AC0 ;ADD Y$MIN STF AC0,(R2) ;STORE GRID SCALED F.P. Y COORD .ENDC RETURN .END