.TITLE SCALE - SFGL70 ROUTINE TO SCALE X & Y COORDINATES .IDENT 'SCAL00' .PSECT SCALE ; KEN DEMERS ; UTRC ; OCTOBER ; THIS ROUTINE IS PART OF THE SMALL FAST ; GRAPHIC LIBRARY ON THE 11/70(SFGL70), WHICH ; IS SIMILAR IN FUNCTION TO THE PDP-6 ; MEMO SCOPE LIBRARY. THIS ROUTINE SCALES ; THE X & Y COORDINATES TO THE SYSTEM SET UP ; BY THE USER'S CALL TO GRID. ; ON ENTRY: ; R1 = A(X FLOINTING POINT COORDINATE) ; R2 = A(Y FLOATING POINT COORDINATE) ; THIS ROUTINE WAS EDITED 3-19-81 ; TO ELIMINATE A FLOATING POINT TO ; INTERGER OVERFLOW ; INTERNAL GLOBALS .GLOBL S$CALE ; EXTERNAL GLOBALS .GLOBL X$MIN,X$ABMAX,X$RANGE,Y$MIN,Y$ABMAX,Y$RANGE .GLOBL A$RG21,X$MXCOR,Y$MXCOR,R$IDGX,R$IDGY ; ASSIGNMENTS AC0 = %0 ;FPP ACCUMULATOR 0 S$CALE: MOV R0,-(SP) ;SAVE R0 MOV R3,-(SP) ;;;SAVE R3 MOV #A$RG21,R0 ;R0= A(X COORD POSITION) SETF ;FPP MODE S.P. SETI ;FPP MODE SHORT INTEGER MOV #X$ABMAX,R3 ;;;R3=(MAX X IN FLT) LDF (R1),AC0 ;VALUE - X$MIN ABS COORD SUBF X$MIN,AC0 ;----------- = ----------- MULF X$ABMAX,AC0 ;XMAX - X$MIN 1023. - R$IDGX DIVF X$RANGE,AC0 CMPF (R3),AC0 ;;;IS IT > MAX X? CFCC ;;;GET CC'S BLT SCA05 ;;;YES,STORE MAX TSTF AC0 ;;;IS IT < XMIN? CFCC ;;;GET CC'S BGE SCA10 ;;;NO CLR (R0) ;;;SET IT TO X MIN BR SCA20 SCA05: MOV #X$MXCOR,(R0) ;SET X TO MAX BR SCA20 SCA10: STCFI AC0,(R0) ;STORE ABS X COORD SCA20: ADD #R$IDGX,(R0)+ ;ALLOW LABEL ON LEFT ;R0 NOW = A(ARG22 Y COORD POSIT) LDF (R2),AC0 ;VALUE - Y$MIN ABS COORD SUBF Y$MIN,AC0 ;----------- = ----------- MULF Y$ABMAX,AC0 ;YMAY - X$MIN 780. -R$IDGY DIVF Y$RANGE,AC0 MOV #Y$ABMAX,R3 ;;;GET Y MAX IN FLT CMPF (R3),AC0 ;;;IS IT > Y MAX? CFCC ;;;GET CC'S BLT SCA25 ;;;YES,STORE THE MAX TSTF AC0 ;;;IS IT < YMIN? CFCC ;;;GET CC'S BGE SCA30 ;;;NO CLR (R0) ;;;SET IT TO Y MIN BR SCA40 SCA25: MOV #Y$MXCOR,(R0) ;SET Y TO MAX BR SCA40 SCA30: STCFI AC0,(R0) ;STORE ABS X COORD SCA40: ADD #R$IDGY,(R0) ;ALLOW LABEL ON BOTTOM CMP (R1)+,(R1)+ ;BUMP PTR TO NEXT F.P. X COORD CMP (R2)+,(R2)+ ;BUMP PTR TO NEXT F.P. Y COORD MOV (SP)+,R3 ;;;RESTORE R3 MOV (SP)+,R0 ;RESTORE R0 RETURN .END