/FLOAT1 -- 3PG FPP 8/I /OPERATIONS: FGET 0000 / FADD 1000 / FSUB 2000 / FMUL 3000 / FDIV 4000 / FJMP 5000 / FPUT 7000 / FNOR 6000 / FSKP 6600 / FSNE 6640 / FSEQ 6650 / FSGE 6700 / FSLT 6710 / FSGT 6740 / FSLE 6750 / FEXT 0000 /FORMAT OF THE THREE WORDS: /WORD 1: BIT 0 : SIGN OF MANTISSA. / BITS 1-8: EXCESS 200 EXPONENT. / BITS 9-11 TOP THREE BITS OF MANTISSA. /WORD 2: BITS 0-11 MANTISSA CONTINUED. /WORD 3: BITS 0-11 MANTISSA CONTINUED. / THE MANTISSA IS ALWAYS IN POSITIVE FORM. TO NEGATE SIMPLY /COMPLEMENT THE SIGN BIT. *50 /PAGE 0 LOCATIONS. /DO NOT DISTURB THE RELATIVE POSITIONS OF THESE /REGISTERS. THEIR POSITIONS ARE NESSERARY TO THE /PROPER FUNCTIONING OF THIS PACKAGE. OPSIGN, 0 /SIGN OF OPERAND. ACSIGN, 0 /SIGN OF FLAC. OPEXP, 0 /OPERAND EXPONENT. AC3, 0 AC2, 0 AC1, 0 OP3, 0 OP2, 0 OP1, 0 ACEXP, 0 OVER, 0 /OVER FLOW WORDS. FFLAG, 0 /FLOATING FLAG. FPCNTR, 0 L7777=CLL CLA CMA /-1 L0001=CLA CLL IAC L0002=CLL CLA IAC RAL L4000=CLL CML CLA RAR /4000 L7775=CLA CLL CMA RTL /-3 ERROR=HLT /HALT TILL ERROR ROUTINE WRITTEN. *5400 /FLOATING POINT INTERPERTER: 116 WORDS 6 LITERALS = 122 WORDS. FPNT, 0 P7600, 7600 /CLA JMP .+3 FLOOP, JMS I (FNORM /NORMALIZE FLAC. ISZ FPNT /GO ONTO NEXT OP. TAD I FPNT SNA /OP CODE=0000? JMP I FPNT /YES. EXIT. RTL /NO. GET OP CODE (BITS 0,1,2). RTL AND (7 DCA FGOTO TAD I FPNT /PAGE 0 MODE? AND (200 SNA CLA JMP FPNT1 /YES. TAD FPNT /NO. GET PAGE. AND P7600 FPNT1, DCA FADDR TAD I FPNT /ADD IN ADDRESS. AND (177 TAD FADDR DCA FADDR SNL JMP FPNT2 TAD I FADDR /GO INDIRECT. DCA FADDR FPNT2, TAD FGOTO /GET O P CODE. TAD (-6 /SPECIAL OPS? (CODE 6XXX) SNA JMP FPNT4 /YES. IAC SMA CLA /OPCODE<5? JMP FPNT3 /NO. OP IS A 5 OR 7. DON'T PICK UP ARG. L4000 /GENERATE 4000 AND I FADDR DCA OPSIGN /GET SIGN. TAD I FADDR /=0? SZA CLA L7777 /FFLAG=-1 IF NOT 0 DCA FFLAG /FFLAG=0 IF 0. TAD I FADDR RTR /GET EXPONENT. RAR AND (377 DCA OPEXP TAD I FADDR AND (7 /GET 3 BIT HIGH HIGH MANTISSA. DCA OP1 ISZ FADDR TAD I FADDR /GET NEXT WORD. DCA OP2 ISZ FADDR TAD I FADDR DCA OP3 FPNT3, TAD FGOTO /OP CODE IS 0,1,2,3,4,5,7 TAD (JMP I FJUMP /ADD IN OP CODE TO ADDRESS OF INST. DCA FGOTO FGOTO, 0 FJUMP, FPGET FPADD FPSUB FPMUL FPDIV FPJMP FADDR, 0 /BLANK BECAUSE NEVER GET A CODE 6. FPPUT FPNT4, TAD I FPNT RTL RTL SNL CLA /FNOR? JMP FLOOP /YES. TAD I FPNT TAD (1000 /ADD IN A 1000 TO MAKE A SKIP INST. DCA .+2 JMS HIGHWD /GET HIGHWD OF FLAC. 0 /SKIP IF FALSE. ISZ FPNT /TRUE. SKIP AN INSTRUCTION. JMP FLOOP+1 HIGHWD, 0 TAD ACEXP CLL RAL SMA /EXP TO BIG? CLL RTL SPA SZL ERROR /YES. EXPONENT OVERFLOW. TAD ACSIGN TAD AC1 JMP I HIGHWD FPJMP, TAD FADDR /FLOATING JUMP. DCA FPNT JMP FLOOP+2 FPPUT, JMS HIGHWD /GET HIGH WORD. DCA I FADDR ISZ FADDR TAD AC2 DCA I FADDR ISZ FADDR TAD AC3 DCA I FADDR JMP FLOOP+1 FPGET, TAD OPSIGN DCA ACSIGN TAD OPEXP DCA ACEXP TAD OP1 DCA AC1 TAD OP2 DCA AC2 TAD OP3 DCA AC3 DCA OVER JMP FLOOP /122 WORDS 4 LITERALS. PAGE /13 WORDS. AR1, 0 /SHIFT FLAC ONCE RIGHT. I.E. DIV BY TWO. TAD AC1 CLL RAR DCA AC1 TAD AC2 RAR DCA AC2 TAD AC3 RAR DCA AC3 RAR DCA OVER JMP I AR1 /14 WORDS. ACN, 0 /TRIPLE PRECISION NEGATION ROUTINE. TAD (OP3 DCA OADD L7775 /-3 DCA AR1 TAD I OADD CMA SZL CLL IAC DCA I OADD ISZ OADD ISZ AR1 JMP .-7 JMP I ACN /14 WORDS OADD, 0 CLA CLL TAD AC3 TAD OP3 DCA AC3 RAL TAD AC2 TAD OP2 DCA AC2 RAL TAD AC1 TAD OP1 DCA AC1 JMP I OADD /44 WORDS. FPSUB, L4000 TAD OPSIGN DCA OPSIGN FPADD, ISZ FFLAG JMP EOFAD TAD ACEXP CLL CIA TAD OPEXP SZL JMP BCKWDS DCA OADD ALGNLP, TAD OP1 /SHIFT OPERAND RIGHT. CLL RAR DCA OP1 TAD OP2 RAR DCA OP2 TAD OP3 RAR DCA OP3 ISZ OADD JMP ALGNLP SETSGN, TAD ACSIGN TAD OPSIGN SPA CLA JMS ACN JMS OADD TAD AC1 SMA CLA JMP EOFAD L7775 JMS ACN TAD OPSIGN DCA ACSIGN EOFAD, DCA OVER JMP I (FLOOP BCKWDS, CMA DCA OADD TAD OPEXP DCA ACEXP SKP JMS AR1 ISZ OADD JMP .-2 JMP SETSGN /37 WORDS. FPMUL, ISZ FFLAG JMP MULCLR TAD ACSIGN TAD OPSIGN DCA ACSIGN TAD ACEXP TAD OPEXP TAD (-201 DCA ACEXP TAD AC1 DCA OPSIGN TAD AC2 DCA OPEXP TAD AC3 DCA ACN TAD (-33 DCA FPCNTR MPYLUP, JMS AR1 TAD OPSIGN RAR DCA OPSIGN TAD OPEXP RAR DCA OPEXP TAD ACN RAR DCA ACN SZL JMS OADD ISZ FPCNTR JMP MPYLUP DCA OVER JMP I (FLOOP MULCLR, DCA AC1 JMS I (NFIX JMP I (FLOOP PAGE /40 WORDS. FNORM, 0 TAD AC1 TAD (-10 SPA CLA JMP NOTBIG JMS I (AR1 ISZ ACEXP JMP FNORM+1 NOTBIG, TAD OVER SNA CLA JMP NOBUMP ISZ AC3 JMP NOBUMP ISZ AC2 JMP NOBUMP ISZ AC1 DCA OVER JMP FNORM+1 L7777 NOBUMP, TAD ACEXP SPA JMP UNDERF DCA ACEXP L7775 TAD AC1 SMA SZA CLA JMP I FNORM JMS AL1 JMP NOBUMP-1 UNDERF, CLA DCA ACSIGN DCA ACEXP TAD AC1 SNA TAD AC2 SNA TAD AC3 SZA CLA ERROR /EXPONENT UNDERFLOW. JMP I FNORM /11 WORDS AL1, 0 /SHIFHT FLAC ONCE LEFT. TAD AC3 CLL RAL DCA AC3 TAD AC2 RAL DCA AC2 TAD AC1 RAL DCA AC1 JMP I AL1 /38 WORDS. FPDIV, ISZ FFLAG /FLOATING POINT DIVIDE. ERROR /DIVISION BY ZERO. TAD ACSIGN TAD OPSIGN DCA ACSIGN TAD OPEXP CIA TAD ACEXP TAD (177 DCA ACEXP DCA NFIX TAD (-35 DCA FNORM DIVLP, L4000 AND OP1 TAD AC1 SMA CLA JMS I (ACN JMS I (OADD TAD NFIX RAL DCA NFIX TAD OPEXP RAL DCA OPEXP TAD OPSIGN RAL DCA OPSIGN JMS AL1 ISZ FNORM JMP DIVLP TAD OPSIGN DCA AC1 TAD OPEXP DCA AC2 TAD NFIX DCA AC3 JMP I (FLOOP /18 WORDS. NFIX, 0 TAD AC1 SNA CLA JMP ZFIXEX FIXLUP, TAD ACEXP TAD (-233 SMA CLA JMP FIXEXT JMS I (AR1 ISZ ACEXP JMP FIXLUP ZFIXEX, DCA ACEXP DCA AC1 DCA AC2 DCA AC3 FIXEXT, DCA OVER TAD AC3 JMP I NFIX /12 WORDS. MULT10, 0 JMS AL1 TAD AC3 DCA OP3 TAD AC2 DCA OP2 TAD AC1 DCA OP1 JMS AL1 JMS AL1 JMS I (OADD JMP I MULT10 PAGE /FLOATING POINT I/O . THIS OUTPUT IS UNFORMATTED. /7 DIGITS ARE TYPED. THE FORMAT IS AS FOLLOWS: / X.XXXXXXE+XX OR X.XXXXXXE-XX PNTR=OVER FLOUTP, 0 TAD ACSIGN SPA CLA /AC POS? TAD (255-240 TAD (240 JMS PRINTC TAD AC1 /FAC=0? SNA CLA JMP FOGO3 /YES. PRINT A "0" FOGO1, JMS FIXUP /REDUCE FAC TO CORRECT RANGE. TAD (-7 DCA FPCNTR TAD (NUMBUF DCA PNTR JMP .+5 FOGO2, TAD AC1 AND (177 DCA AC1 JMS MULT10 TAD AC1 /BUFFER THE DIGITS FOR EASY INTERFACE CLL RTL /WITH A FORMATTING PROGRAM. RTL RTL AND (17 TAD (260 DCA I PNTR ISZ PNTR ISZ FPCNTR /7 DIGITS? JMP FOGO2 /NO. TAD (NUMBUF /YES. PRINT FIRST DIGIT. DCA PNTR TAD I PNTR JMS PRINTC TAD (256 JMS PRINTC TAD (-6 /PRINT THE NEXT 6 DIGITS. DCA FPCNTR ISZ PNTR TAD I PNTR JMS PRINTC ISZ FPCNTR JMP .-4 TAD (305 /PRINT "E" JMS PRINTC TAD DECEXP /DECIMAL EXPONENT + ? SPA CLA L0002 TAD (253 JMS PRINTC /PRINT "+" OR "-" TAD DECEXP SPA CIA DCA DECEXP DCA AC1 TAD DECEXP LOOP1, TAD (-12 /DO DECEXP/10 (DECIMAL) SPA JMP LOOP2 ISZ AC1 JMP LOOP1 LOOP2, TAD (12 DCA DECEXP TAD AC1 TAD (260 JMS PRINTC TAD DECEXP FOGO3, TAD (260 JMS PRINTC JMP I FLOUTP PRINTC, 0 TLS TSF JMP .-1 CLA CLL JMP I PRINTC FIXUP, 0 TAD ACEXP TAD (-170 DCA ACEXP SKP FIXUP4, TAD DECEXP DCA DECEXP FIXUP1, TAD AC1 RTL SZL CLA JMP FIXUP2 JMS AL1 L7777 TAD ACEXP DCA ACEXP JMP FIXUP1 FIXUP2, TAD ACEXP SMA SZA JMP FIXUP3 CLA JMS AR1 JMS AR1 JMS AR1 JMS AR1 JMS MULT10 TAD (4 TAD ACEXP DCA ACEXP L7777 JMP FIXUP4 FLTEXT, JMP I FIXUP DECEXP, 0 PAGE FIXUP3, TAD (-5 SPA JMP FIXUP5 CLA FIXUP7, JMS FIXUP6 L0001 JMP FIXUP4 FIXUP5, DCA FPCNTR SKP JMS AR1 ISZ FPCNTR JMP .-2 TAD AC1 TAD (5400 SMA CLA JMP FIXUP7 CLA CLL TAD (2166 TAD AC3 DCA AC3 RAL TAD AC2 DCA AC2 SZL ISZ AC1 TAD AC1 TAD (5400 SZA CLA JMP FLTEXT /EXIT FIXUP. TAD (200 DCA AC1 DCA AC2 DCA AC3 ISZ DECEXP NOP JMP FLTEXT FIXUP6, 0 TAD (-40 DCA FPCNTR CLL FIXUP8, TAD AC1 TAD (5400 SMA DCA AC1 CLA TAD AC3 RAL DCA AC3 TAD AC2 RAL DCA AC2 TAD AC1 RAL DCA AC1 ISZ FPCNTR JMP FIXUP8 TAD AC1 AND (377 DCA AC1 JMP I FIXUP6 NUMBUF, 0 0 0 0 0 0 0 $END$ $ DCA AC3 TAD AC2 RAL DCA AC2 TAD AC1 RAL DCA AC1 ISZ FPCNTR