KEFSYS KEF11 FLOATING POINT AND ASCII CONVERSION ROUTINES ROBERT E. MARCUM OVERVIEW. THIS SET OF SOFTWARE PROVIDES ROUTINES WHICH EFFECT CONVENIENT FLOATING-POINT AND ASCII AND RAD50 DATA-TYPE CONVERSION IMPLEMENTATION. THESE ROUTINES HAVE BEEN DEVELOPED FOR USE ON THE LSI-11/23 PROCESSOR, USING THE KEF11 FLOATING-POINT CHIP. THE DEVELOPMENT ENVIRONMENT WAS RT-11/TSX, BUT I SEE NO REASON THIS SOFTWARE COULD NOT BE USED IN OTHER PDP-11 OPERATING SYSTEM ENVIRONMENTS. NOTE! THE DEVELOPERS OF THIS SOFTWARE MADE THE FUNDAMENTAL DECISION TO USE ONLY DOUBLE-PRECISION REPRESENTATION THROUGHOUT. ACCORDINGLY, ALL FLOATING-POINT SERVICES PROVIDED DEAL WITH DOUBLE-PRECISION ONLY. THE UNIQUE FEATURE OF THIS SOFTWARE IS ITS USE OF MACROS AND ADDRESSING MODE DETECTION SUCH THAT THE IMPLEMENTATION OF EACH OF THE SERVICES PROVIDED IS MADE TO LOOK, IN THE CODE, JUST LIKE AN ORDINARY MACRO-11 INSTRUCTION, THAT IS, IN THE FORM "INSTRUCTION SRC,DST". SEE "MTEST.MAC" FOR AN EXAMPLE IMPLEMENTATION OF EACH SERVICE PROVIDED BY THIS SOFTWAE SET. THIS SOFTWARE SET IS MADE UP OF TWO MAJOR MODULES: THE MACRO MODULE - WHICH IS A COLLECTION OF MACROS, EACH OF WHICH EITHER PROVIDES SOME SPECIFIC SERVICE OR INVOKES A SUBROUTINE WHICH PROVIDES SOME SERVICE. WHERE THE MACRO ISSUES A CALL TO A SUBROUTINE, THE MACRO GATHERS THE THE ARGUMENTS TO THE SUBROUTINE AND PREPARES THEM FOR THE CALL, ADJUSTING FOR VARIATIONS IN ADDRESSING MODES AS REQUIRED, THEREBY FEEDING THE SUBROUTINE THE SOURCE AND DESTINATION ADDRESS. THE OBJECT MODULE - WHICH IS AN OBJECT CODE COLLECTION OF THE SUBROUTINES WHICH ARE CALLED BY THE MACROS. THE MACRO MODULE. THE SOURCE LEVEL MACRO MODULE IS "MLIBRY.MAC". MLIBRY.MAC IS CONVERTED TO A MACRO LIBRARY FORM BY THE COMMAND FILE, "BLDMLB.COM". THE RESULTING MACRO LIBRARY - AS OF THIS DATE - IS CALLED "MLIBV5.MLB" (MACRO LIBRARY, VERSION 5. MACRO LIBRARY). MOST OF THE MACROS ACTUALLY IMPLEMENT A CALL TO A SUBROUTINE WHICH DOES THE ACTUAL WORK OF CONVERSION OR COMPUTATION. HOWEVER, SEVERAL OTHER MACROS DO PROVIDE SOME SERVICE WITHIN THEMSELVES, USING THE KEF11 INSTRUCTIONS. THESE INCLUDE: DTOI - DOUBLE TO INTEGER CONVERSION. DTOL - DOUBLE TO LONG CONVERSION. FADD - ADDITION OF TWO DOUBLE-PRECISION NUMBERS. FCMP - COMPARES TWO DOUBLE-PRECISION NUMBERS. FDIV - DIVIDES ONE DOUBLE-PRECISION NUMBER BY ANOTHER. FMOV - MOVES A DOUBLE-PRECISION NUMBER FROM SRC TO DST. FMUL - MULTIPLIES ONE DOUBLE-PRECISION NUMBER BY ANOTHER. FNEG - NEGATES A DOUBLE-PRECISION NUMBER. FSUB - SUBTRACTS ONE DOUBLE-PRECISION NUMBER FROM ANOTHER. ITOD - INTEGER TO DOUBLE-PRECISION CONVERSION. LTOD - LONG TO DOUBLE-PRECISION CONVERSION. THE OBJECT MODULE. THERE ARE SEVERAL INDIVIDUAL SOURCE MODULES WHICH MAKE UP INTO THE OBJECT LIBRARY. THEY ARE: LIBVER.MAC - USED TO FORCE THE VERSION NUMBER INTO THE LIBRARY LIST FILE AND TO FORCE THE .PSECT NAME INTO THE LINK MAP. ATODBL - CONVERTS ASCII TO DOUBLE-PRECISION FLOATING-POINT REPRE- SENTATION, PICKING UP THE ARGUMENTS AND PREPARING FOR THE CALL TO DCIRCI. DCIRCI - PROVIDES THE ACTUAL ASCII TO DOUBLE OR ASCII TO REAL CONVERSION. DTOASC - CONVERTS A DOUBLE-PRECISION FLOATING-POINT REPRESENTATION TO ASCII, PICKING UP THE ARGUMENTS AND PREPARING FOR THE CALL TO DEFGCO. DEFGCO - PROVIDES THE ACTUAL CONVERSION OF DOUBLE-PRECISION TO ASCII. COS - CALCULATES COSINE OF DOUBLE-PRECISION FLOATING-POINT NUMBER. SIN - CALCULATES SINE OF DOUBLE-PRECISION FLOATING-POINT NUMBER. SINCOS - PROVIDES THE ACTUAL CALCULATION OF SINE AND COSINE. FSQRT - SQUARE ROOT OF DOUBLE- PRECISION NUMBER. DSQRT - THE ACTUAL SQUARE ROOT CALCULATING ROUTINE. ATAN - DELIVERS ARCTANGENT OF DOUBLE-PRECISION NUMBER BY CALLING DATAN. DATAN - ARCTANGENT OF DOUBLE-PRECISION NUMBER. ASCR50 - ASCII TO RAD50 CONVERSION. R50ASC - RAD50 TO ASCII CONVERSION. ATOINT - ASCII TO INTEGER CONVERSION. ASCITO - DOES ACTUAL ASCII TO INTEGER CONVERSION. ITOASC - INTEGER TO ASCII. TOASCI - DOES ACTUAL INTEGER TO ASCII CONVERSION. FLTERR - HANDLES ANY FLOATING-POINT ERRORS ENCOUNTERED AT RUN-TIME. THESE SEVERAL ROUTINES ARE PROCESSED INTO THE OBJECT LIBRARY BY THE COMMAND FILE, "BLDUTL.COM". SEVERAL OF THESE ROUTINES HAVE BEEN EXTRACTED FROM THE FPMP (FLOATING-POINT & MATH PACKAGE) SET, AUTHORED AND DISTRIBUTED BY DIGITAL EQUIPMENT CORPORATION. ALTHOUGH THEY MAY, BY NOW, HAVE BEEN MODIFIED THEIR FUNDAMENTAL FUNCTION REMAINS AS IT WAS AND THE FPMP DOCUMENTATION USEFULLY DESCRIBES THE WAY THEY WORK. EXCEPTIONS AND FUNCTIONAL MODIFICATIONS WILL BE NOTED IN THE INDIVIDUAL SOURCE MODULES. THE ORIGINAL SOURCE OF THE INDIVIDUAL ROUTINES IS NOTED HERE: $DCI,$RCI ;FPMP $DCO,$ECO,$FCO,$GCO ;FPMP DSIN,DCOS ;FPMP DSQRT ;FPMP DATAN ;FPMP R50ASC ;FORTRAN OTS ASCOCT,ASCINT ;FPMP OCTASC,INTASC ;FPMP FLT PT DEFAULT ERROR HANDLER ;FPMP CERTAIN OF THE ROUTINES ARE INVOKED BY MACROS DEFINED IN THE MACRO LIBRARY, "MLIBRY.MAC". THE MACROS ARE CALLED BY THE SAME NAME AS THE ROUTINE THEY EACH INVOKE, AND THE MACROS ARE DESIGNED SUCH THAT THEIR FORMAT IN THE CODE APPEARS JUST LIKE A REGULAR INSTRUCTION. THESE ROUTINES DO THE WORK OF PREPARING TO CALL OTHER CONVERSION OR COMPUTATIONAL ROUTINES, AND DELIVER THE RESULTS TO THE DESIRED DESTINATION. THESE ROUTINES ARE: ROUTINE INVOKES ------- ------- ATAN DATAN ATODBL $DCI ATOINT ASCINT COS DCOS DTOASC $DCO FSQRT DSQRT ITOASC INTASC SIN DSIN ALL GLOBAL SYMBOLS DEFINED WITHIN ALL THESE MODULES ARE ESTABLISHED BY THE USE OF THE DOUBLE COLON (::). EXPLICIT ".GLOBL" STATEMENTS IDENTIFY SYMBOLS EXTERNAL TO AN INDIVIDUAL MODULE. CREATING BOTH MODULES. THE COMMAND FILE, "BLDLBS.COM" INVOKES EACH BLDUTL.COM AND BLDMLB.COM TO CREATE BOTH MAJOR MODULES. EXAMPLES AND TEST BASE. "MTEST.MAC" IS A PRACTICE AND TEST FILE WHEREIN I HAVE IMPLEMENTED AN EXAMPLE OF EACH OF THE SERVICES PROVIDED BY THIS SOFTWARE SET. MTEST.MAC IS SUBMITTED TO ASSEMBLY AND PRODUCES A LISTING BY EXECUTION OF THE COMMAND FILE, "MTEST.COM". FILES. SO YOU MAY CROSS-CHECK YOUR DISTRIBUTION OF THIS SOFTWARE, YOU SHOULD HAVE ALL OF THE FOLLOWING FILES WHICH MAKE UP THIS SOFTWARE SET: README.1ST DCIRCI.MAC DEFGCO.MAC TOASCI.MAC DATAN .MAC ASCR50.MAC R50ASC.MAC ASCITO.MAC FLTERR.MAC SINCOS.MAC ITOASC.MAC DTOASC.MAC COS .MAC SIN .MAC FSQRT .MAC ATAN .MAC ATOINT.MAC BLDUTL.COM BLDMLB.COM BLDLBS.COM MTEST .COM LIBVER.MAC DSQRT .MAC MTEST .MAC MLIBRY.MAC ATODBL.MAC 26 Files, 163 Blocks INSTALLATION. IF YOU ARE NOT IN AN RT-11 OR TSX ENVIRONMENT, YOU SHOULD FIRST RE-EXAMINE THE .COM FILES TO DETERMINE WHETHER THEY REQUIRE MODIFICATION TO ACCOMMODATE YOUR OPERATING SYSTEM ENVIRONMENT. ADDITIONALLY, YOU MAY WANT TO CHANGE THE .COM FILE EXTENSIONS TO .CMD, OR WHATEVER MAY BE APPROPRIATE FOR YOUR PDP-11 OPERATING SYSTEM. ALL TRANSACTIONS WITH THE KEF11 CHIP ASSUME THE KEF STATUS REGISTER IS SET TO INTEGER MODE AND DOUBLE-PRECISION MODE. ENSURE THAT YOU INITIALIZE THE KEF STATUS REGISTER TO THOSE MODES. IN AN RT-11/TSX ENVIRONMENT, * LOAD THE SOFTWARE ONTO YOUR SYSTEM ONTO SOME DEVICE WHICH CAN BE ASSIGNED AS DEVICE "DK:", SUCH AS THE SYSTEM DISK OR A DEDICATED DEVICE (LIKE A FLOPPY) OR A SUB-DISK. * ASSIGN THAT DEVICE TO BE "DK:". * ENTER "@BLDLBS" * WHEN THE LIBRARY BUILD PROCESS HAS FINISHED, ENTER "@MTEST" * EXAMINE THE RESULTING LIST FILE TO SEE EXAMPLES OF EACH OF THE SERVICES PROVIDED BY THIS SOFTWARE SET. IMPLEMENTATION WITH YOUR OWN MAIN PROGRAM SOURCE. MAKE A COPY OF MTEST.COM, RENAMING IT "MYPROG.COM" OR SOME OTHER APPROPRIATE NAME. USING YOUR EDITOR, SUBSTITUTE THE NAME OF YOUR PROGRAM AS A REPLACEMENT FOR "MTEST" IN MYPROG.COM. MAKING SURE YOUR PROGRAM IS ON DEVICE DK, EXECUTE THE COMMAND FILE MYPROG.COM BY ENTERING "@MYPROG". ADD ONE OF THE SOFWARE SERVICE CALLS PROVIDED BY THIS SOFTWARE, THEN EXECUTE YOUR ASSEMBLY COMMAND FILE AGAIN ...AND OVER ...AND OVER AGAIN. CODE EFFICIENCY. THE CODE GENERATED BY THESE SERVICE ROUTINES IS SOMEWHAT LARGER THAN WOULD BE GENERATED BY HARD-CODED CALLS TO THE RAW ROUTINES, PRIMARILY BECAUSE I HAVE MADED EACH SERVICE REPORT ITS PROCESSOR STATUS CONDITION FROM THE FLOATING-POINT PROCESSOR TO THE MAIN PROCESSOR STATUS WORD AFTER EVERY IMPLEMENTATION OF EACH SERVICE (BY THE INSTRUCTION "CFCC"). IN THIS WAY THESE ROUTINES ARE MADE TO ACT JUST LIKE STANDARD PDP-11 INSTRUCTIONS. HOWEVER, THE USE OF THESE SERVICE ROUTINES IMPLEMENTED USING THE APPROACH I HAVE USED RESULTS IN CLEANER LOOKING CODE WITH FEWER LINES OF CODE, MAKING CODE MAINTENANCE EASIER AND LESS COSTLY - A RESULT WHICH I HAVE JUDGED TO BE WOTHWHILE. CAUTION!! NOT ALL ADDRESSING MODES HAVE BEEN IMPLEMENTED IN EVERY FUNCTION! I HAVE ONLY IMPLEMENTED THE ADDRESSING MODES NECESSARY FOR MY USE IN THE SPECIFIC APPLICATION FOR WHICH THESE ROUTINES HAVE BEEN DEVELOPED. IF YOU TRY TO USE AN ADDRESSING MODE WHICH HAS NOT BEEN IMPLEMENTED, THAT ERROR WILL NOT NECESSARILY BE DETECTED BY THE SOFTWARE!! IF YOU EXPERIENCE STRANGE RESULTS, LOOK FIRST AT THE ADDRESSING MODES IMPLEMENTED IN THE CALLING MACRO (LOOK IN MLIBRY.MAC) TO CONFIRM WHETHER THE ADDRESSING MODE YOU HAVE USED HAS ACTUALLY BEEN IMPLEMENTED. IF IT HAS NOT, LOOK FOR AN EXAMPLE OF THE ADDRESSING MODE DETECTION YOU REQUIRE IN ONE OF THE OTHER MACROS IN MLIBRY AND INSTALL THAT SAME ADDRESSING MODE DETECTION SCHEME FOR THE SPECIFIC SERVICE YOU NEED. AUTHOR'S NOTES. THIS SOFTWARE IS OFFERED IN HOPES IT WILL BE SPECIFICALLY USEFUL TO YOU IN SOME IMPORTANT AND PROFITABLE APPLICATION, BUT ALSO TO STIMULATE YOUR IMAGINATION ABOUT NEW WAYS TO USE THESE WONDEROUS MACHINES WITH WHICH WE WORK. IT IS ALSO OFFERED WITH LOVE TO ALL THOSE KINDRED SOULS OUT THERE WHO TRY - AS WE ALL DO - TO MAKE THIS A BETTER WORLD IN SOME SMALL WAY AS A CONSEQUENCE OF THE WORK WE DO EVERY DAY. GOOD LUCK AND HAVE FUN! ROBERT E. MARCUM BUSINESSMAN'S COMPUTER STORE HOUSTON, TEXAS (713) 270-8124 JULY 1985