4 / UNFORMATTED TTY INPUT & OUTPUT FOR FRTS
6 / SUBROUTINE PUTTY (BYTECNT,FRACTIONAL INTEGER VECTOR) FOR OUTPUT
7 / INT FUNC GETTY (BYTECNT,FRACTIONAL INTEGER VECTOR) FOR INPUT
9 / DESIGNED FOR USE WITH OS/8 F4 RUNNING UNDER FRTS VERSION V 5 A
12 / PDP 8 WITH MQ REGISTER, HARD/SOFT FPP 12, 8K MEMORY AT LEAST
14 / RESTRICTIONS FOR USE:
15 / BYTECNT MAY BE ZERO BUT BYTECNT MUST BE LESS THAN 4096.
16 / A NEGATIVE BYTECNT CAUSES #ARGER ABORT.
17 / THE INPUT AND OUTPUT BYTES ARE FORTRAN 4 INTEGER NUMBERS AND TRANSLATED
18 / BY PGTTY INTO THE CORRECT CODE.
19 / ON INPUT CNTRL B OR CNTRL C CAUSE NORMAL FRTS ACTION (ABORT).
21 / IF THE ROUTINES ARE WAITING FOR I/O THEY ACTIVATE THE FRTS
24 / ORIGINAL RELEASE VER 1.0 14-NOV-80 J.J. ANDRES UNIVERSITY OF GOETTINGEN
32 THREE, 0;3 / A CONSTANT 3
33 TWO, 0;2 / A LOT OF CONSTANTS!
35 WBW, TEXT 'WALKBK' / WALK BACK WORD
38 BAS, ORG .+3 / RETURN ADR. FOR INTERNAL JSR
39 T0, ORG .+3 / POINTER TO PARAMETER LIST
40 T1, ORG .+3 / FIRST PARAMETER (WORD COUNT)
41 T2, ORG .+3 / ADR. OF THE SECOND PARAMETER (STRING)
45 ORG .+1 / FORCE THREE WORD INSTRUCTION
46 RETURN, JA . / RETURN ADR.
55 FLDA 3*10 / SAVE RETURN ADR.
57 FLDA 0 / SAVE ARGUMENT POINTER
63 LDX 1,X1 / LOAD THE ADDRESSES OF THE ARGUMENTS
65 FSTA T1 / ADR. OF WORD COUNT --> T1
68 FSTA T2 / ADR. OF STRING --> T2
70 FLDA% T1 / WORD COUNT --> FAC
71 FSTA T1 / WORD COUNT --> T1
72 FNEG / MAKE A COUNTER TO ZERO
73 ATX X6 / SET THE REPEAT COUNT REGISTER
74 LDX 0,X3 / SET UP THE POINTER TO T2
76 JGT NXTPUT / IF NO WORDS TO TYPE THEN RETURN
77 JEQ RETURN / ELSE TYPE THE FIRST CHARACTER
82 FLDA% T2,X3+ / X6 IS THE REPEAT COUNTER
83 ATX X4 / X3 INDEX INTO STRING
84 ATX X0 / TO MAKE A PRETTY OUTPUT AT ^B ABORTS.
85 TRAP4 PUT8 / X4 CONTAINS THE CHARACTER TO TYPE
86 JXN NXTPUT,X6+ / TYPE THE NEXT CHARACTER
107 FSTA T1 / ADR OF BYTE COUNT --> T1
109 FSTA T2 / ADR. OF INPUT BUFFER --> T2
110 FADD TWO / MAKE A PDP POINTER: POINTING TO THE LAST WORD OF 36 BITS
111 FSUB CJAD / STRIP OF SOME BITS TO MASK OUT THE DATA FIELD
112 FSTA X2+XR / DF --> X2; ADR --> X3
114 LDX -3,X2 / SHIFT 3 BITS TO THE LEFT
115 ALN X2 / TO PREP THE DATA FIELD
116 ATX X2 / CORRECT DF --> X2
118 FLDA% T1 / BYTE COUNT --> FAC
119 JEQ RETURN / NO INPUT DESIRED, RETURN
124 FNEG / MAKE A COUNTER
125 ATX X6 / BYTE COUNTER --> X6
126 FLDA BIAS / CLEAR THE FIRST WORD OF THE BUFFER TO 27;0;0
127 FSTA% T2 / TO MAKE CONVERSION EASY
128 LDX 0,X5 / CLEAR THE INPUT BYTE COUNTER
129 TRAP4 GET8 / READ THE BYTES
131 FSTA T1 / THE NUMBER OF BYTES READ --> T1
132 FNEG / AND MAKE A COUNTER FOR THE CONVERSION
134 LDX 7777,X3 / SET THE INDEX INTO THE INPUT BUFFER
135 JXN NORM,X5 / IF THERE IS NO INPUT THEN RETURN
138 FLDA% T2,X3+ / GET THE CHARACTER
139 FNORM / CONVERT TO FRACTIONAL
140 FSTA% T2,X3 / AND STORE BACK INTO THE BUFFER
142 FLDA T1 / RETURN THE INPUT BYTE COUNT
143 JA RETURN / WORK DONE
147 MQL= 7421 / MQ MICROINSTRUCTIONS REQUIRED
149 PTTY= 075 / FRTS PAGE 0 PTTY
150 XR, ORG .+7 / FPP --> PDP COMMUNICATION AREA
152 X1= X0+1 / INDEX TO ARGUMENT POINTER
153 X2= X1+1 / DATA FIELD OF INPUT STRING (GETTY)
154 X3= X2+1 / INDEX TO THE STRING
155 X4= X3+1 / CHARACTER TO TYPE OR READ FROM TTY
156 X5= X4+1 / GETTY INPUT BYTE COUNTER
157 X6= X5+1 / REPEAT COUNTER (PUTTY)
158 TEN, 010 / NICE CONSTANT ISN'T IT?
159 CRTN, -15 / NEGATIVE CR
160 CCDF, CDF 0 / INSERTED INTO GETDF
162 BIAS, 27;0;0 / TO NORMALIZE FIX NUMBER INTO FRACTIONAL
163 C120, 0120 / HERE WE CHANGE FIELD 0 PAGE 0 !
166 IF0P0, JMSZ% PTTY / CODE TRANSFERED INTO FIELD 0 PAGE 0 LOC 120
169 TRANS, 07777 / TRANS MAY NOT BE LOCATED INTO AN AUTO INDEX LOCATION!
170 TEMP, ORG .+4 / HERE WE SAVE PAGE 0 ENTRIES
172 / PREPARE FIELD 0 PAGE 0 LOC 120 - 123
200 RESZRO, ORG .+1 / RESTORE PAGE ZERO
220 SWIDF, ORG .+1 / SWITCHES TO DF OF INPUT STRING
221 GETDF, ORG .+1 / HERE WE INSERT THE CDF N
225 PUT8, ORG .+1 / TYPE CHARACTER FROM X4 ONTO THE TTY
226 JMS MAKZRO / PREPARE FIELD 0 PAGE 0 AND CLEAR AC
227 TAD XR+X4 / CHARACTER TO PRINT --> AC
228 AND C177 / TRUNCATE TO SEVEN BIT BYTE
229 TAD C200 / OR THE PARITY BIT TO INHIBIT ZERO AC CAUSING TTY INPUT
230 CDF CIF 00 / TRY IN GOD & CARTER
231 JMSZ 120 / FRTS PAGE ZERO
232 JMS RESZRO / RESTORE PAGE ZERO
233 CDF CIF / HOME TO TYPE THE NEXT CHARACTER
238 JMS MAKZRO / PREP PAGE ZERO AND CLEAR AC
239 TAD CCDF / SET UP DATA FIELD FOR INPUT STRING
245 JMSZ 120 / TRY IN DEC & REAGAN
247 ISZ X5+XR / INCREMENT INPUT BYTE COUNTER
249 AND C177 / STRIP OFF PARITY BIT
250 DCA X4+XR / SAVE CHARACTER INTO X4
252 DCA X0+XR / SAVE CHARACTER INTO X0 FOR ^B ABORT
254 JMS SWIDF / SET UP CORRECT DATA FIELD
255 DCA% X3+XR / AND STORE CHARACTER INTO OUTPUT
256 CDF 10 / HOME TO MY DATA FIELD
257 ISZ X6+XR / IF WE REACHED THE END OF THE BUFFER THEN
259 JMP GETRTN / WE RETURN
261 / CLEAR THE NEXT FPP WORD TO 27;0;0 FOR NORMALIZATION. INCREMENT POINTER X3
263 CLA CLL CMA RTL / -3 --> AC
264 DCA TRANS / MAKE A COUNTER TO STEP 3 WORDS
265 TAD BIAS / INSERT 27 INTO THE EXPONENT AND CLEAR MANTISSA
267 ISZ X3+XR / INCREMENT STRING POINTER
268 JMP DFOK / WE DID NOT PASS A FIELD
270 TAD GETDF / POINTER PASSED A FIELD, SO GET NEW CDF
271 TAD TEN / ADD NEXT DATA FIELD
275 JMS SWIDF / SET UP CORRECT DATA FIELD
276 DCA% X3+XR / CLEAR THE NEXT 36 BIT FPP WORD
281 TAD X4+XR / CHARACTER --> AC AND TEST FOR A CR
282 TAD CRTN / SUBTRACT CR
283 SZA / IF INPUT WAS A CR THEN WE GO TO GETRTN
284 JMP NXTONE / ELSE READ THE NEXT BYTE
286 JMS RESZRO / RESTORE PAGE ZERO
288 JMP% GET8 / HOME TO TCS