README.md


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"<CR>

* WHEN THE LIBRARY BUILD PROCESS HAS FINISHED, ENTER "@MTEST"<CR>

* 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"<CR>. 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