SUBTTL MACRO.MP V1 UWO 16-NOV-70 MULTIPLE PRECISION CALLING MACROS DEFINE CONST(X,Y) < MOVM AC1,X MOVEI AC0,0 LSHC AC0,11 SUBI AC0,200 ADD AC0,[200000000000] LSH AC1,-1 SKIPGE DX MOVNM AC0,AC0 MOVEM AC0,Y MOVEM AC1,Y+1 ZAP(Y,2) > DEFINE DCONST(DX,Y) < MOVM AC1,DX MOVEI AC0,0 LSHC AC0,11 SUBI AC0,200 ADD AC0,[200000000000] SKIPGE DX MOVNM AC0,AC0 MOVEM AC0,Y MOVE AC0,DX MOVE AC1,DX+1 SKIPGE AC0 DFN AC0,AC1 LSH AC1,11 LSHC AC0,10 TLZ AC0,400000 LSH AC1,-1 MOVEM AC0,Y+1 MOVEM AC1,Y+2 ZAP (Y,3) > DEFINE ZAP(A,B) < MOVE AC2,PREC MOVEI AC1,B AOS AC2 CAIG AC2,B JRST .+4 SOS AC2 SETZM A(AC2) JRST .-4 > DEFINE DPVAL(X,DY,%ODDERR,%ASS) < MOVM AC0,X SUB AC0,[200000000000] ADDI AC0,200 MOVEM AC0,EXP# TDZE AC0,[777777777400] JRST .+1 ; NOTE THIS IS AN ERROR AND SHOULD BE FIXED MOVE AC1,X+1 MOVE AC2,X+2 TRNE AC2,100000 ADDI AC2,200000 JUMPL AC2,%ODDERR %ASS: LSH AC2,1 LSHC AC1,1 LSHC AC0,33 LSH AC1,-33 LSHC AC1,^D18 MOVE AC2,EXP SUBI AC2,33 LSH AC2,^D27 IOR AC1,AC2 SKIPGE X DFN AC0,AC1 MOVEM AC0,DY MOVEM AC1,DY+1 JRST .+7 %ODDERR: AOS AC1 TLZN AC2,400000 JRST %ASS LSHC AC1,-1 JRST %ASS > DEFINE SPVAL(Y,X,%ODD,%ASS) < MOVE AC0,Y SKIPGE AC0 MOVNM AC0,AC0 SUB AC0,[200000000000] ADDI AC0,200 TDZE AC0,[777777777400] JRST .+1 ;ERROR,SHOULD NEVER GET HERE,HAHAHAHA MOVE AC1,Y+1 TRNE AC1,200 AOS AC1 JUMPL AC1,%ODD LSH AC1,1 %ASS: LSHC AC0,33 SKIPGE AC1 ADDI AC0,1 SKIPGE Y MOVNM AC0,AC0 MOVEM AC0,X JRST .+3 AOS AC0 JRST %ASS> XALL AC2=2 DEFINE SETPREC (N) < MOVEI AC0,N MOVEM AC0,PREC#> DEFINE CONI(Y,I) < MOVM AC2,Y SUB AC2,[200000000000] JUMPLE AC2,ZERO% CAILE AC2,^D35 JRST .+1 ; ERROR,FIXUP NEEDED MOVE AC1,Y+1 MOVEI AC0,0 LSHC AC0,2(AC2) SKIPGE Y MOVMM AC0,AC0 MOVEM AC0,I JRST FINI% ZERO%: SETZM I FINI%: > DEFINE ICON(I,Y) < MOVM AC1,I JFFO AC1,.+1 SOS AC2 LSH AC1,0(AC2) SUBI AC2,^D34 MOVNM AC2,AC2 ADD AC2,[200000000000] SKIPGE I MOVNM AC2,AC2 MOVEM AC2,Y MOVEM AC1,Y+1 ZAP (Y,2) > DEFINE COPY(X,Y) < IRP Y< HRLI AC2,X HRRI AC2,Y MOVE AC1,PREC ADDI AC1,Y HRRM AC1,.+1 BLT AC2,.>> DEFINE TEST(X,Y,AC,%AG,%EQUAL,%SIMP,%SMA,%FINI) < MOVE AC1,X CAME AC1,Y JRST %SIMP MOVE AC0,PREC MOVEI AC2,1 %AG: MOVE AC1,X(AC2) CAME AC1,Y(AC2) JRST %SIMP SOJE AC0,%SIMP AOJA AC2,%AG %EQUAL: MOVEM AC0,AC JRST %FINI %SIMP: CAMN AC1,Y(AC2) JRST %EQUAL CAMG AC1,Y(AC2) JRST %SMA MOVEI AC1,1 MOVEM AC1,AC JRST %FINI %SMA: SETOM AC %FINI: > DEFINE MADD(X,Y,Z) < JSA 16,MADD EXP X,Y,PREC,Z JRST .+1> DEFINE MSUB(X,Y,Z) < JSA 16,MSUB EXP X,Y,PREC,Z JRST .+1 ; ERROR,CAVEAT EMPTOR > DEFINE MMUL(X,Y,Z) < JSA 16,MMULT EXP X,Y,PREC,Z JRST .+1 ; ERROR,OVERFLOW.INTERESTED? FIXIT. > DEFINE MDIV(X,Y,Z) < JSA 16,MDIV EXP X,Y,PREC,Z JRST .+1> SUBTTL USER PROGRAM EXTERN MADD,MSUB,MMULT,MDIV