File F1093.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/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



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search