File FMP.SB (8k SABR macro assembler source file)

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

/ EAE MULT FOR FORTRAN (8K)
/ WRITTEN BY DON PARKER
/ DEPT. OF CHEMISTRY
/ CLARKSON COLLEGE OF TECHNOLOGY
/ POTSDAM, NEW YORK 13676  3/7/73
/ DECUS NO. 8-615
	LAP		/LEAVE AUTOMATIC PAGING
/ TEMP STORAGE ON PAGE ZERO OF CURRENT FIELD
	ABSYM AC1 100
	ABSYM AC2 101
	ABSYM AC3 102
	ABSYM ACEXP 103
	ABSYM ACSIGN 104
	ABSYM OP1 105
	ABSYM OP2 106
	ABSYM OP3 107
	ABSYM OPEXP 110
	ABSYM OPSIGN 111
	ABSYM HOLD1 112
	ABSYM HOLD2 113
	ABSYM HOLD3 114
	ABSYM HOLD4 115
	ABSYM MULT20 116
	ABSYM MULT00 117
	ABSYM MULT 120
/ ADD THESE SYMBOLS TO SABR
	OPDEF LSR 7417
	OPDEF MUY 7405
	OPDEF MQL 7421
	OPDEF MQA 7501
	OPDEF TADI 1400		/FAKE INDIRECT ADD
	OPDEF DCAI 3400
	OPDEF JMSI 4400
	OPDEF JMPI 5400
	OPDEF CDF10 6211	/=CDF 10
	OPDEF RIF 6224
C7,	7
M201,	-201
C377,	377
C6201,	6201
MUL00,	MULT0
XSET,	SETUP
MUL,	MULTA
ZERO,	DCA AC3
	DCA AC1
	DCA AC2
	JMPI MEXIT		/TO SAVE SPACE
MEXIT,	MUEXIT
IARG,	0			/TEMP STORAGE
	ENTRY FMP
FMP,	BLOCK 2
	TAD FMP			/GET FIELD
	DCA X1
X1,	HLT
	TADI FMP#		/ACCESS CALL IN FIELD
	DCA X2
	INC FMP#
	TADI FMP#		/GET ADDRESS OF ARG
	DCA IARG

INC FMP# /BUMP SUBROUTINE RETURN X2, HLT /DATA FIELD OF ARG TADI IARG DCA OP1 /GET OP1 INC IARG TADI IARG /GET OP2 DCA OP2 INC IARG TADI IARG /GET OP3 DCA OP3 JMSI XSET /SET UP FLOATING AC RIF TAD C6201 DCA X3 /CHANGE DATA FIELD TO CUR? X3, HLT TAD AC1 /UNPACK AC EXPONENT CLL RTR RAR AND C377 DCA ACEXP TAD OP1 /UNPACK OP EXPONENT CLL RTR RAR AND C377 TAD ACEXP /FORM EXPONENT OF RESULT TAD M201 DCA ACEXP CLL CLA CML RAR /PUT 4000 IN AC AND AC1 /STRIP AC SIGN DCA ACSIGN CLL CLA CML RAR AND OP1 /STRIP OP SIGN TAD ACSIGN /FORM SIGN OF RESULT DCA ACSIGN TAD AC1 AND C7 /MASK MANTISSA SNA /SEE IF MULT. BY ZERO JMP ZERO /YES DCA AC1 TAD OP1 AND C7 SNA /CHECK AGAIN FOR ZERO JMP ZERO DCA OP1 TAD MUL00 /SET UP ADDRESSES ON PAGE 0 DCA MULT00 TAD MUL DCA MULT CONS, CLA CLL /START 27 BIT BY 27 BIT M? TAD OP3 DCAI MULT00 TAD AC2 JMSI MULT /LOW OPERAND BY MIDDLE AC CLA /DISREGARD LOW BITS TAD MULT20 DCA HOLD4 TAD OP2 DCAI MULT00 TAD AC3
JMSI MULT /MIDDLE OPERAND BY LOW AC CLA TAD MULT20 TAD HOLD4 /ADD TO PREVIOUS RESULT DCA HOLD4 RAL DCA HOLD3 /STORE CARRY OVER TAD AC2 DCAI MULT00 TAD OP2 JMSI MULT /MIDDLE AC BY MIDDLE OP TAD HOLD4 DCA HOLD4 RAL TAD HOLD3 DCA HOLD3 TAD MULT200 TAD HOLD3 DCA HOLD3 RAL DCA HOLD2 TAD OP3 DCAI MULT00 TAD AC1 JMSI MULT /LOW OPERAND BY HIGH AC TAD HOLD4 DCA HOLD 4 RAL TAD MULT20 TAD HOLD3 DCA HOLD3 RAL TAD HOLD2 DCA HOLD2 TAD OP1 DCAI MULT00 TAD AC3 JMSI MULT /HIGH OPERAND BY LOW AC TAD HOLD4 DCA AC3 /THIRD WORD FORMED NORUP, RAL TAD MULT20 TAD HOLD3 DCA HOLD3 RAL TAD HOLD2 DCA HOLD2 TAD OP2 DCAI MULT00 TAD AC1 JMSI MULT /MIDDLE OPERAND BY HIGH AC TAD HOLD3 DCA HOLD3 RAL TAD MULT20 TAD HOLD2 DCA HOLD2 RAL DCA HOLD1
TAD OP1 DCAI MULT00 TAD AC2 JMSI MULT /HIGH OPERAND BY MIDDLE AC TAD HOLD3 DCA AC2 /SECOND WORD FORMED RAL TAD MULT20 TAD HOLD2 DCA HOLD2 RAL TAD HOLD1 DCA HOLD1 TAD OP1 DCAI MULT00 TAD AC1 JMSI MULT /HIGH AC BY HIGH OPERAND TAD HOLD2 DCA AC1 TAD AC1 /NORMALIZE AND C0040 /IF THIS BIT IS SET ADD 1 /TO ACEXP AND SHIFT RIGHT 3 SZA CLA JMP NOR1 CLA IAC NOR, DCA SHFT /STORE # OF RIGHT SHIFTS -1 MQL TAD AC1 JMS ROT DCA AC1 /FIRST WORD NORMALIZED MQA MQL /LOAD AC AND CLEAR MQ DCA HOLD2 TAD AC2 JMS ROT TAD HOLD2 /SECOND WORD DCA AC2 MQA MQL DCA HOLD2 TAD AC3 JMS ROT TAD HOLD2 DCA AC3 /THIRD WORD CLA IAC /PUT 1 IN AC TAD AC3 SZA CLA /IF AC3=7777 SKIP JMS ROUND JMP UNDER NORRET, TAD ACEXP /FORM WORD 1 CLL RTL RAL TAD ACSIGN /ADD SIGN TAD AC1 DCA AC1 MUEXIT, CDF10 /STORE RESULTS IN FLOATING ? TAD AC1 DCAI A20 TAD AC2 DCAI A21 TAD AC3
DCAI A22 RETRN FMP MULTA, 0 /12 BY 12 BIT MULT. MQL MUY MULT0, 0 DCA MULT20 MQA /LEAVE MQ IN AC JMPI MULTA NOR1, ISZ ACEXP /BUMP ACEXP CLL CLA IAC RAL /PUT 2 IN AC JMP NOR OVER, TAD ACEXP /CHECK FOR OVERFLOW TAD M400 /377 IS LARGEST EXP SPA CLA JMP NORRET JMS MERR CALL 0,EXIT UNDER, TAD ACEXP SMA CLA /IF NEG. UNDERFLOW JMP OVER JMS MERR JMPI XZERO /ZERO AC MERR, 0 CALL 1,ERROR ARG ERR JMPI MERR XZERO, ZERO SETUP, 0 CDF10 /ACCESS FIELD 1 TADI A20 DCA AC1 TADI A21 DCA AC2 TADI A22 DCA AC3 JMPI SETUP ROT, 0 LSR SHFT, 0 JMPI ROT A20, 20 A21, 21 A22, 22 C0040, 0040 M400, -400 ROUND, 0 /CHECK FOR ROUNDING MQA SPA CLA /ROUND UP IF AC IS NEG. ISZ AC3 /AC3 CANNOT OVERFLOW JMPI ROUND ERR, 620 /FP 522 /ER END DCAI A22 RETRN FMP MULTA, 0 /12 BY 12 BIT MULT. MQL MUY MULT0, 0 DCA MULT20 MQA /LEAVE MQ IN AC JMPI MULTA NOR1, ISZ ACEXP /BUMP ACEXP CLL CLA IAC RAL /PUT 2 IN AC JMP NOR OVER, TAD ACEXP /CHECK FOR OVERFLOW TAD M400 /377 IS LARGEST EXP SPA CLA JMP NORRET JMS MERR CALL 0,EXIT UNDER, TAD ACEXP SMA CLA /IF NEG. UNDERFLOW JMP OVER JMS MERR JMPI XZERO /ZERO AC MERR, 0 CALL 1,ERROR ARG ERR JMPI MERR XZERO, ZERO SETUP, 0 CDF10 /ACCESS FIELD 1 TADI A20 DCA AC1 TADI A21 DCA AC2 TADI A22 DCA AC3 JMPI SETUP ROT, 0 LSR SHFT, 0 JMPI ROT A20, 20 A21, 21 A22, 22 C0040, 0040 M400, -400 ROUND, 0 /CHECK FOR ROUNDING MQA SPA CLA /ROUND UP IF AC IS NEG. ISZ AC3 /AC3 CANNOT OVERFLOW JMPI ROUND ERR, 620 /FP 522 /ER END



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