1 / -+-+-+-+-+
\ e H P S H F T . R A
\ e -+-+-+-+-+
3 / F4 INTEGER FUNCTION SHIFT (CNT,VAR)
5 / PERFORMS A LOGICAL LEFT OR RIGHT SHIFT WITH THE SECOND PARAMETER VAR.
6 / THE INTEGER CNT WITH -37<CNT<37 SPECIFIES THE NUMBER AND DIRECTION OF
7 / THE SHIFTS TO PERFORM.
8 / IF CNT IS LESS THAN 0 THEN SHIFT PERFORMS A LEFT SHIFT, ELSE A RIGHT ONE
9 / THE PARAMETERS CNT AND VAR REMAIN UNCHANGED.
11 / HARDWARE: LAB8/E, KE8-E, HARD/SOFT FPP12
13 / VER 0.0 20-AUG-80 HA *
18 / IF CNT > 0 THEN DO A LOGICAL RIGHT SHIFT ELSE
20 / VAR IS THE VARIABLE TO BE SHIFTED
31 FLDA 10*3 / GET RETURN ADR AND
32 FSTA GOBAK / STORE INTO GOBAK
40 FLDA% 3 / FIRST PARAM. --> FAC
42 ATX X1 / CONVERT INTO INTEGER AND STORE INTO CNT
52 TRAP4 SHIFT8 / KE8-E DOES THE WORK
58 X0, ORG .+2 / DEFINE THE X REG. BASE
61 REMAIN, ORG .+1 / NUMBER OF SHIFTS LESS THAN 12 (REMAINDER OF CNT/12 )
62 REP, ORG .+1 / NUMBER OF 12 BIT SHIFTS
84 SWAB / KE8-E --> MODE B, CLEAR AC!
86 SMA CLA / IF CNT > 0 THEN GO TO RIGHTSHIFT ELSE
90 DCA CNT / CONVERT TO POSITIVE NUMBER
91 JMS SHIFT0 / SET UP REPEAT COUNTERS
92 JMP LOOP1 / THERE ARE SOME 12 BIT SHIFTS TO DO
93 JMP LOOP2 / THERE ARE NO 12 BIT SHIFTS
95 DCA I1 / INSERT 12 BIT SHIFT INSTRUCTION
99 LOOP2, TAD REMAIN / SHIFT THE REMAINING BITS
100 SNA / IF THERE ARE NO SHIFT'S LEFT THEN WE GO HOME
108 RSHIFT, JMS SHIFT0 / SET UP REPEAT COUNTERS
117 SNA / TEST IF THERE ARE REMAINING BITS TO SHIFT
123 JMP% SHIFT8 / HOME TO MAMA
126 SHIFT0, .-. / SET UP REPEAT COUNTERS
128 SWBA / KE8E --> A, AC --> MQ
138 ISZ SHIFT0 / SECOND POINT OF RETURN
144 SHIFT1, .-. / LOGICAL LEFT SHIFT FOR I1 POSITIONS AC & MQ
151 SHIFT2, .-. / SHIFT VAR BY I1 POSITIONS TO THE LEFT
154 DCA TMP1 / SAVE OVERFLOW
156 DCA VAR+2 / STORE THIRD WORD OF RESULT
160 DCA TMP2 / SAVE OVERFLOW
162 MQA / INSERT OVERFLOW OF WORD # 3
163 DCA VAR+1 / STORE SECOND WORD OF RESULT
165
TAD VAR / SHIFT FIRST WORD
174 SHIFT3, .-. / LOGICAL SHIFT RIGHT BY I3 BITS
182 SHIFT4, .-. / LOGICAL SHIFT RIGHT VAR BY I3 BITS AC & MQ