Add README.md
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / pgtty.ra
CommitLineData
81e70d48
PH
1/ \ e PGTTY.RA\ e\r
2/\r
3/\r
4/ UNFORMATTED TTY INPUT & OUTPUT FOR FRTS \r
5/\r
6/ SUBROUTINE PUTTY (BYTECNT,FRACTIONAL INTEGER VECTOR) FOR OUTPUT\r
7/ INT FUNC GETTY (BYTECNT,FRACTIONAL INTEGER VECTOR) FOR INPUT\r
8/\r
9/ DESIGNED FOR USE WITH OS/8 F4 RUNNING UNDER FRTS VERSION V 5 A\r
10/\r
11/ REQUIRED HARDWARE:\r
12/ PDP 8 WITH MQ REGISTER, HARD/SOFT FPP 12, 8K MEMORY AT LEAST\r
13/\r
14/ RESTRICTIONS FOR USE:\r
15/ BYTECNT MAY BE ZERO BUT BYTECNT MUST BE LESS THAN 4096.\r
16/ A NEGATIVE BYTECNT CAUSES #ARGER ABORT.\r
17/ THE INPUT AND OUTPUT BYTES ARE FORTRAN 4 INTEGER NUMBERS AND TRANSLATED \r
18/ BY PGTTY INTO THE CORRECT CODE.\r
19/ ON INPUT CNTRL B OR CNTRL C CAUSE NORMAL FRTS ACTION (ABORT).\r
20/\r
21/ IF THE ROUTINES ARE WAITING FOR I/O THEY ACTIVATE THE FRTS\r
22/ BACKGROUND JOB.\r
23/\r
24/ ORIGINAL RELEASE VER 1.0 14-NOV-80 J.J. ANDRES UNIVERSITY OF GOETTINGEN\r
25/\r
26/\r
27 SECT #PGTTY\r
28 ENTRY PUTTY\r
29 EXTERN #ARGER\r
30/\r
31/\r
32THREE, 0;3 / A CONSTANT 3\r
33TWO, 0;2 / A LOT OF CONSTANTS!\r
34CJAD, JA 0\r
35WBW, TEXT 'WALKBK' / WALK BACK WORD\r
36TOME, SETX XR\r
37 SETB BAS\r
38BAS, ORG .+3 / RETURN ADR. FOR INTERNAL JSR\r
39T0, ORG .+3 / POINTER TO PARAMETER LIST\r
40T1, ORG .+3 / FIRST PARAMETER (WORD COUNT)\r
41T2, ORG .+3 / ADR. OF THE SECOND PARAMETER (STRING)\r
42 ORG 10*3+BAS\r
43 FNOP\r
44 JA TOME\r
45 ORG .+1 / FORCE THREE WORD INSTRUCTION\r
46RETURN, JA . / RETURN ADR.\r
47/\r
48/\r
49WB0, TEXT 'PUTTY '\r
50PUTTY,\r
51 FLDA# WB0\r
52 FSTA WBW\r
53 STARTD\r
54 BASE 0\r
55 FLDA 3*10 / SAVE RETURN ADR.\r
56 FSTA RETURN\r
57 FLDA 0 / SAVE ARGUMENT POINTER\r
58 SETX XR\r
59 SETB BAS\r
60 BASE BAS\r
61 FSTA T0\r
62 LDX 0,X0\r
63 LDX 1,X1 / LOAD THE ADDRESSES OF THE ARGUMENTS\r
64 FLDA% T0,X1\r
65 FSTA T1 / ADR. OF WORD COUNT --> T1\r
66 FLDA% T0,X1+\r
67 FSUB THREE\r
68 FSTA T2 / ADR. OF STRING --> T2\r
69 STARTF\r
70 FLDA% T1 / WORD COUNT --> FAC\r
71 FSTA T1 / WORD COUNT --> T1\r
72 FNEG / MAKE A COUNTER TO ZERO\r
73 ATX X6 / SET THE REPEAT COUNT REGISTER\r
74 LDX 0,X3 / SET UP THE POINTER TO T2\r
75 FNEG\r
76 JGT NXTPUT / IF NO WORDS TO TYPE THEN RETURN\r
77 JEQ RETURN / ELSE TYPE THE FIRST CHARACTER\r
78 TRAP4 #ARGER\r
79/\r
80/\r
81NXTPUT, \r
82 FLDA% T2,X3+ / X6 IS THE REPEAT COUNTER\r
83 ATX X4 / X3 INDEX INTO STRING\r
84 ATX X0 / TO MAKE A PRETTY OUTPUT AT ^B ABORTS.\r
85 TRAP4 PUT8 / X4 CONTAINS THE CHARACTER TO TYPE\r
86 JXN NXTPUT,X6+ / TYPE THE NEXT CHARACTER\r
87 JA RETURN\r
88/\r
89/\r
90 ENTRY GETTY\r
91WB1, TEXT 'GETTY '\r
92GETTY,\r
93 FLDA# WB1\r
94 FSTA WBW\r
95 STARTD\r
96 BASE 0\r
97 FLDA 3*10\r
98 FSTA RETURN\r
99 FLDA 0\r
100 SETX XR\r
101 SETB BAS\r
102 BASE BAS\r
103 FSTA T0\r
104 LDX 0,X0\r
105 LDX 1,X1\r
106 FLDA% T0,X1\r
107 FSTA T1 / ADR OF BYTE COUNT --> T1\r
108 FLDA% T0,X1+\r
109 FSTA T2 / ADR. OF INPUT BUFFER --> T2\r
110 FADD TWO / MAKE A PDP POINTER: POINTING TO THE LAST WORD OF 36 BITS\r
111 FSUB CJAD / STRIP OF SOME BITS TO MASK OUT THE DATA FIELD\r
112 FSTA X2+XR / DF --> X2; ADR --> X3\r
113 XTA X2\r
114 LDX -3,X2 / SHIFT 3 BITS TO THE LEFT\r
115 ALN X2 / TO PREP THE DATA FIELD\r
116 ATX X2 / CORRECT DF --> X2\r
117 STARTF\r
118 FLDA% T1 / BYTE COUNT --> FAC\r
119 JEQ RETURN / NO INPUT DESIRED, RETURN\r
120 JGT LB0 / \r
121 TRAP4 #ARGER\r
122LB0,\r
123 FSTA T1\r
124 FNEG / MAKE A COUNTER\r
125 ATX X6 / BYTE COUNTER --> X6\r
126 FLDA BIAS / CLEAR THE FIRST WORD OF THE BUFFER TO 27;0;0\r
127 FSTA% T2 / TO MAKE CONVERSION EASY\r
128 LDX 0,X5 / CLEAR THE INPUT BYTE COUNTER\r
129 TRAP4 GET8 / READ THE BYTES\r
130 XTA X5 / AND COMPUTE\r
131 FSTA T1 / THE NUMBER OF BYTES READ --> T1\r
132 FNEG / AND MAKE A COUNTER FOR THE CONVERSION\r
133 ATX X5\r
134 LDX 7777,X3 / SET THE INDEX INTO THE INPUT BUFFER\r
135 JXN NORM,X5 / IF THERE IS NO INPUT THEN RETURN\r
136 JA RETURN\r
137NORM,\r
138 FLDA% T2,X3+ / GET THE CHARACTER\r
139 FNORM / CONVERT TO FRACTIONAL\r
140 FSTA% T2,X3 / AND STORE BACK INTO THE BUFFER\r
141 JXN NORM,X5+\r
142 FLDA T1 / RETURN THE INPUT BYTE COUNT\r
143 JA RETURN / WORK DONE\r
144/\r
145/\r
146\f SECT8 #8PGTT\r
147MQL= 7421 / MQ MICROINSTRUCTIONS REQUIRED\r
148SWP= 7521\r
149PTTY= 075 / FRTS PAGE 0 PTTY\r
150XR, ORG .+7 / FPP --> PDP COMMUNICATION AREA\r
151X0= 0\r
152X1= X0+1 / INDEX TO ARGUMENT POINTER\r
153X2= X1+1 / DATA FIELD OF INPUT STRING (GETTY)\r
154X3= X2+1 / INDEX TO THE STRING\r
155X4= X3+1 / CHARACTER TO TYPE OR READ FROM TTY\r
156X5= X4+1 / GETTY INPUT BYTE COUNTER\r
157X6= X5+1 / REPEAT COUNTER (PUTTY)\r
158TEN, 010 / NICE CONSTANT ISN'T IT?\r
159CRTN, -15 / NEGATIVE CR\r
160CCDF, CDF 0 / INSERTED INTO GETDF\r
161/\r
162BIAS, 27;0;0 / TO NORMALIZE FIX NUMBER INTO FRACTIONAL\r
163C120, 0120 / HERE WE CHANGE FIELD 0 PAGE 0 !\r
164C177, 0177\r
165C200, 0200\r
166IF0P0, JMSZ% PTTY / CODE TRANSFERED INTO FIELD 0 PAGE 0 LOC 120\r
167 CIF 10\r
168 JMP% 120\r
169TRANS, 07777 / TRANS MAY NOT BE LOCATED INTO AN AUTO INDEX LOCATION!\r
170TEMP, ORG .+4 / HERE WE SAVE PAGE 0 ENTRIES\r
171/\r
172/ PREPARE FIELD 0 PAGE 0 LOC 120 - 123\r
173/\r
174MAKZRO, ORG .+1\r
175 CLA\r
176 TAD C120\r
177 DCA TRANS\r
178 CDF 0\r
179 TAD% TRANS\r
180 DCA TEMP\r
181 ISZ TRANS\r
182 TAD% TRANS\r
183 DCA TEMP+1\r
184 TAD IF0P0\r
185 DCA% TRANS\r
186 ISZ TRANS\r
187 TAD% TRANS\r
188 DCA TEMP+2\r
189 TAD IF0P0+1\r
190 DCA% TRANS\r
191 ISZ TRANS\r
192 TAD% TRANS\r
193 DCA TEMP+3\r
194 TAD IF0P0+2\r
195 DCA% TRANS\r
196 CDF 10\r
197 JMP% MAKZRO\r
198/\r
199/\r
200RESZRO, ORG .+1 / RESTORE PAGE ZERO\r
201 CLA\r
202 TAD C120\r
203 DCA TRANS\r
204 CDF 0\r
205 TAD TEMP\r
206 DCA% TRANS\r
207 ISZ TRANS\r
208 TAD TEMP+1\r
209 DCA% TRANS\r
210 ISZ TRANS\r
211 TAD TEMP+2\r
212 DCA% TRANS\r
213 ISZ TRANS\r
214 TAD TEMP+3\r
215 DCA% TRANS\r
216 CDF 10\r
217 JMP% RESZRO\r
218/\r
219/\r
220SWIDF, ORG .+1 / SWITCHES TO DF OF INPUT STRING\r
221GETDF, ORG .+1 / HERE WE INSERT THE CDF N\r
222 JMP% SWIDF\r
223/\r
224/\r
225PUT8, ORG .+1 / TYPE CHARACTER FROM X4 ONTO THE TTY\r
226 JMS MAKZRO / PREPARE FIELD 0 PAGE 0 AND CLEAR AC\r
227 TAD XR+X4 / CHARACTER TO PRINT --> AC\r
228 AND C177 / TRUNCATE TO SEVEN BIT BYTE\r
229 TAD C200 / OR THE PARITY BIT TO INHIBIT ZERO AC CAUSING TTY INPUT\r
230 CDF CIF 00 / TRY IN GOD & CARTER\r
231 JMSZ 120 / FRTS PAGE ZERO\r
232 JMS RESZRO / RESTORE PAGE ZERO\r
233 CDF CIF / HOME TO TYPE THE NEXT CHARACTER\r
234 JMP% PUT8\r
235/\r
236/\r
237GET8, ORG .+1\r
238 JMS MAKZRO / PREP PAGE ZERO AND CLEAR AC\r
239 TAD CCDF / SET UP DATA FIELD FOR INPUT STRING\r
240 TAD X2+XR\r
241 DCA GETDF\r
242NXTONE,\r
243 CLA\r
244 CDF CIF 00\r
245 JMSZ 120 / TRY IN DEC & REAGAN\r
246 CDF CIF 10\r
247 ISZ X5+XR / INCREMENT INPUT BYTE COUNTER\r
248 NOP\r
249 AND C177 / STRIP OFF PARITY BIT\r
250 DCA X4+XR / SAVE CHARACTER INTO X4\r
251 TAD X4+XR\r
252 DCA X0+XR / SAVE CHARACTER INTO X0 FOR ^B ABORT\r
253 TAD X0+XR\r
254 JMS SWIDF / SET UP CORRECT DATA FIELD\r
255 DCA% X3+XR / AND STORE CHARACTER INTO OUTPUT\r
256 CDF 10 / HOME TO MY DATA FIELD\r
257 ISZ X6+XR / IF WE REACHED THE END OF THE BUFFER THEN \r
258 JMP .+2 \r
259 JMP GETRTN / WE RETURN\r
260/\r
261/ CLEAR THE NEXT FPP WORD TO 27;0;0 FOR NORMALIZATION. INCREMENT POINTER X3\r
262/\r
263 CLA CLL CMA RTL / -3 --> AC\r
264 DCA TRANS / MAKE A COUNTER TO STEP 3 WORDS\r
265 TAD BIAS / INSERT 27 INTO THE EXPONENT AND CLEAR MANTISSA\r
266GL0,\r
267 ISZ X3+XR / INCREMENT STRING POINTER\r
268 JMP DFOK / WE DID NOT PASS A FIELD \r
269 MQL / SAVE AC --> MQ\r
270 TAD GETDF / POINTER PASSED A FIELD, SO GET NEW CDF\r
271 TAD TEN / ADD NEXT DATA FIELD\r
272 DCA GETDF\r
273 SWP / RESTORE AC\r
274DFOK,\r
275 JMS SWIDF / SET UP CORRECT DATA FIELD\r
276 DCA% X3+XR / CLEAR THE NEXT 36 BIT FPP WORD\r
277 CDF 10\r
278 ISZ TRANS\r
279 JMP GL0\r
280/\r
281 TAD X4+XR / CHARACTER --> AC AND TEST FOR A CR\r
282 TAD CRTN / SUBTRACT CR\r
283 SZA / IF INPUT WAS A CR THEN WE GO TO GETRTN\r
284 JMP NXTONE / ELSE READ THE NEXT BYTE\r
285GETRTN,\r
286 JMS RESZRO / RESTORE PAGE ZERO\r
287 CDF CIF\r
288 JMP% GET8 / HOME TO TCS\r
289/\r
290 END\r
291\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