A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / hpshft.ra
CommitLineData
81e70d48
PH
1/ -+-+-+-+-+ \ e H P S H F T . R A \ e -+-+-+-+-+\r
2/\r
3/ F4 INTEGER FUNCTION SHIFT (CNT,VAR)\r
4/\r
5/ PERFORMS A LOGICAL LEFT OR RIGHT SHIFT WITH THE SECOND PARAMETER VAR.\r
6/ THE INTEGER CNT WITH -37<CNT<37 SPECIFIES THE NUMBER AND DIRECTION OF\r
7/ THE SHIFTS TO PERFORM.\r
8/ IF CNT IS LESS THAN 0 THEN SHIFT PERFORMS A LEFT SHIFT, ELSE A RIGHT ONE\r
9/ THE PARAMETERS CNT AND VAR REMAIN UNCHANGED.\r
10/\r
11/ HARDWARE: LAB8/E, KE8-E, HARD/SOFT FPP12\r
12/\r
13/ VER 0.0 20-AUG-80 HA *\r
14/\r
15\r
16/ SHIFT ROUTINE\r
17/ I=SHIFT (CNT,VAR)\r
18/ IF CNT > 0 THEN DO A LOGICAL RIGHT SHIFT ELSE\r
19/ LOGICAL LEFT SHIFT\r
20/ VAR IS THE VARIABLE TO BE SHIFTED\r
21/\r
22 SECT #SHIFT\r
23 ENTRY SHIFT\r
24 BASE 0\r
25TWO, 0\r
26 2\r
27TMPX, ORG .+2\r
28/\r
29/\r
30SHIFT, STARTD\r
31 FLDA 10*3 / GET RETURN ADR AND\r
32 FSTA GOBAK / STORE INTO GOBAK\r
33 FLDA 0\r
34 FADD TWO\r
35 FSTA TMPX\r
36 FSTA 3\r
37 FLDA% 3\r
38 FSTA 3\r
39 STARTF\r
40 FLDA% 3 / FIRST PARAM. --> FAC\r
41 SETX X0\r
42 ATX X1 / CONVERT INTO INTEGER AND STORE INTO CNT\r
43 STARTD\r
44 FLDA TMPX\r
45 FADD TWO\r
46 FSTA 3\r
47 FLDA% 3\r
48 FSTA 3\r
49 STARTF\r
50 FLDA% 3\r
51 FSTA VAR\r
52 TRAP4 SHIFT8 / KE8-E DOES THE WORK\r
53 FLDA VAR\r
54GOBAK, JA .-.\r
55/\r
56/\r
57 SECT8 #SHIF8\r
58X0, ORG .+2 / DEFINE THE X REG. BASE\r
59X1= 1\r
60CNT= X0+X1\r
61REMAIN, ORG .+1 / NUMBER OF SHIFTS LESS THAN 12 (REMAINDER OF CNT/12 )\r
62REP, ORG .+1 / NUMBER OF 12 BIT SHIFTS\r
63VAR, ORG .+3\r
64TMP1, ORG .+1\r
65TMP2, ORG .+1\r
66C1, 014 / 12\r
67/\r
68/ KE8-E INSTRUCTIONS\r
69SHL= 07413\r
70CIA= 07041\r
71SWAB= 07431\r
72SWBA= 07447\r
73DST= 07445\r
74LSR= 07417\r
75CAM= 07621\r
76SWP= 07521\r
77DVI= 07407\r
78MQL= 07421\r
79MQA= 07501\r
80ACL= 07701\r
81CDI= 06203\r
82/\r
83SHIFT8, .-.\r
84 SWAB / KE8-E --> MODE B, CLEAR AC!\r
85 TAD CNT\r
86 SMA CLA / IF CNT > 0 THEN GO TO RIGHTSHIFT ELSE\r
87 JMP RSHIFT\r
88 TAD CNT\r
89 CIA\r
90 DCA CNT / CONVERT TO POSITIVE NUMBER\r
91 JMS SHIFT0 / SET UP REPEAT COUNTERS\r
92 JMP LOOP1 / THERE ARE SOME 12 BIT SHIFTS TO DO\r
93 JMP LOOP2 / THERE ARE NO 12 BIT SHIFTS\r
94LOOP1, TAD C1\r
95 DCA I1 / INSERT 12 BIT SHIFT INSTRUCTION\r
96 JMS SHIFT2\r
97 ISZ REP\r
98 JMP LOOP1\r
99LOOP2, TAD REMAIN / SHIFT THE REMAINING BITS\r
100 SNA / IF THERE ARE NO SHIFT'S LEFT THEN WE GO HOME\r
101 JMP HOME\r
102 DCA I1\r
103 JMS SHIFT2\r
104 CDI\r
105 JMP% SHIFT8\r
106/\r
107/\r
108RSHIFT, JMS SHIFT0 / SET UP REPEAT COUNTERS\r
109 JMP ROOP1\r
110 JMP ROOP2\r
111ROOP1, TAD C1\r
112 DCA I3\r
113 JMS SHIFT4\r
114 ISZ REP\r
115 JMP ROOP1\r
116ROOP2, TAD REMAIN\r
117 SNA / TEST IF THERE ARE REMAINING BITS TO SHIFT\r
118 JMP HOME\r
119 DCA I3\r
120 JMS SHIFT4\r
121HOME,\r
122 CDI\r
123 JMP% SHIFT8 / HOME TO MAMA\r
124/\r
125/\r
126SHIFT0, .-. / SET UP REPEAT COUNTERS\r
127 TAD CNT\r
128 SWBA / KE8E --> A, AC --> MQ\r
129 MQL\r
130 DVI\r
131 014\r
132 DCA REMAIN\r
133 ACL\r
134 DCA REP\r
135 SWAB / RESET KE8-E\r
136 TAD REP\r
137 SNA\r
138 ISZ SHIFT0 / SECOND POINT OF RETURN\r
139 CIA\r
140 DCA REP\r
141 JMP% SHIFT0\r
142/\r
143/\r
144SHIFT1, .-. / LOGICAL LEFT SHIFT FOR I1 POSITIONS AC & MQ\r
145 MQL\r
146 SHL\r
147I1, .-.\r
148 JMP% SHIFT1\r
149/\r
150/\r
151SHIFT2, .-. / SHIFT VAR BY I1 POSITIONS TO THE LEFT\r
152 TAD VAR+2\r
153 JMS SHIFT1\r
154 DCA TMP1 / SAVE OVERFLOW\r
155 MQA\r
156 DCA VAR+2 / STORE THIRD WORD OF RESULT\r
157/\r
158 TAD VAR+1\r
159 JMS SHIFT1\r
160 DCA TMP2 / SAVE OVERFLOW\r
161 TAD TMP1\r
162 MQA / INSERT OVERFLOW OF WORD # 3\r
163 DCA VAR+1 / STORE SECOND WORD OF RESULT\r
164/\r
165\r TAD VAR / SHIFT FIRST WORD\r
166 JMS SHIFT1\r
167 CLA\r
168 TAD TMP2\r
169 MQA\r
170 DCA VAR\r
171 JMP% SHIFT2\r
172/\r
173/\r
174SHIFT3, .-. / LOGICAL SHIFT RIGHT BY I3 BITS\r
175 SWP / CLEAR MQ\r
176 CLA SWP\r
177 LSR\r
178I3, .-.\r
179 JMP% SHIFT3\r
180/\r
181/\r
182SHIFT4, .-. / LOGICAL SHIFT RIGHT VAR BY I3 BITS AC & MQ\r
183 CAM\r
184 TAD VAR\r
185 JMS SHIFT3\r
186 DCA VAR\r
187 ACL\r
188 DCA TMP1\r
189/\r
190 TAD VAR+1\r
191 JMS SHIFT3\r
192 SWP\r
193 DCA TMP2\r
194 TAD TMP1\r
195 MQA\r
196 DCA VAR+1\r
197/\r
198 TAD VAR+2\r
199 JMS SHIFT3\r
200 MQL\r
201 TAD TMP2\r
202 MQA\r
203 DCA VAR+2\r
204 JMP% SHIFT4\r
205 END\r
206\1a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0