*** empty log message ***
[h316.git] / lib / iolib / src / i$pa.asm
1 * (I$PA)
2 *
3 *
4 * COMPUTER: H316
5 *
6 * PROGRAM CATEGORY: I/O LIBRARY
7 *
8 * PROGRAM TITLE: I$PA (I$PI)
9 *
10 *
11 * REVISIONS:
12 * 0.1 (2005-02.04)
13 *
14 * AUTHOR
15 *
16 * PHILIPP HACHTMANN
17 *
18 *
19 * PURPOSE
20 *
21 * TO READ ASCII SOURCE TEXT FROM HIGH SPEED PAPER TAPE READER
22 *
23 *
24 * RESTRICTIONS
25 *
26 * NOT ALL FUNCTIONALITY MAY BE COMPLETELY RECOVERED BECAUSE
27 * OF MISSING INFORMATION.
28 *
29 * STORAGE
30 *
31 * 176 (OCTAL)
32 * 126 (DECIMAL)
33 *
34 *
35 * USE
36 *
37 * I$PA - READ LINE OF SOURCE CODE USING TAB CHARACTERS
38 * CALL I$PA
39 * DAC (BUFFER ADDRESS)
40 *
41 * I$PI - CONFIGURE I$PA
42 * CALL I$PI
43 * DEC (NUMBER OF WORDS IN DATA BUFFER)
44 * DEC (NUMBER OF TABS IN FOLLOWING TABLE, IF ANY)
45 * DEC TAB (1)
46 * DEC TAB (2)
47 * . .
48 * . .
49 * . .
50 * DEC TAB (N)
51 *
52 * NOTICE
53 *
54 * THE CHARACTER SEQUENCE 'ABS' HAS BEEN REPLACED BY 'DBS' BECAUSE THE
55 * ASSEMBLER SHOWED STRANGE BEHAVIOUR
56 *
57 ********************************************************************************
58 *
59 * EXPORTED LABELS
60 SUBR I$PA
61 SUBR I$PI
62 *
63 *
64 *
65 REL RELOCATEABLE MODE
66 *
67 *
68 * SETUP READ ROUTINE
69 *
70 I$PI DAC ** SETUP READ ROUTINE
71 LDA* I$PI WORD COUNT PARAMETER
72 LGL 1 LEFT SHIFT 1
73 STA LIM BUFFER LIMIT
74 *
75 IRS I$PI TALLY RETURN ADDRESS
76 LDA* I$PI TAB COUNT PARAMETER
77 STA NTAB TAB COUNT
78 *
79 LDA I$PI RETURN ADDRESS
80 AOA TALLY BY 1
81 STA TABL TAB TABLE LINK
82 *
83 ADD NTAB TAB COUNT
84 STA I$PI RETURN ADDRESS
85 JMP* I$PI EXIT
86 *
87 *
88 * READ ROUTINE
89 *
90 I$PA DAC ** READ ROUTINE
91 STX SIR SAVED INDEX REGISTER
92 LDA* I$PA BUFFER ADDRESS PARAMETER
93 LGL 1 LEFT SHIFT 1
94 STA BUFL BUFFER LINK
95 *
96 RSTR LDA =1 POSITION 1
97 STA CP CHARACTER POSITION
98 *
99 STSP LDA ='240 SPACE
100 JST NSRT INSERT IN CHARACTER POSITION
101 JMP STSP LOOP AGAIN
102 *
103 LDA =1 POSITION 1
104 SCP STA CP CHARACTER POSITION
105 *
106 * INPUT AND TEST FOR SPECIAL CODES
107 READ NOP
108 RES LDX =-4 INDEX REGISTER = -4
109 JST INPT READ ONE CHARACTER
110 *
111 CAS ='337 LEFT ARROW?
112 SKP NO, SKIP
113 JMP DLT YES, DELETE LINE
114 *
115 ISIT CAS IGNT+4,1 IGNORE TABLE
116 SKP NO, SKIP
117 JMP RES YES, IGNORE IT
118 *
119 IRS 0 TALLY INDEX REGISTER
120 JMP ISIT LOOP AGAIN
121 *
122 CAS ='215 CARRIAGE RETURN?
123 SKP NO, SKIP
124 JMP EXIT YES, END-OF-RECORD
125 *
126 CAS ='334 BACKSLASH?
127 SKP NO, SKIP
128 JMP TAB YES, TAB
129 *
130 CAS ='203 END-OF-TEXT?
131 SKP NO, SKP
132 JMP EXIT+1 YES, ETX
133 *
134 * NO ACTION CHARACTER
135 NAC JST NSRT INSERT IN CHARACTER POSITION
136 JMP READ BUFFER NOT FULL, LOOP AGAIN
137 JMP READ BUFFER NOW FULL, LOOP AGAIN
138 *
139 * TAB ROUTINE
140 TAB CRA CLEAR A-REGISTER
141 SUB NTAB TAB COUNT
142 SNZ NZ, SKIP
143 JMP NOTB Z, NO TABS
144 *
145 STA 0 INDEX REGISTER
146 LDA TABL TAB TABLE LINK
147 STA TABI TABLE POINTER
148 *
149 ITAB LDA* TABI TABLE POINTER
150 IRS TABI TALLY TABLE POINTER
151 CAS CP CHARACTER POSITION
152 JMP SCP GR, SET NEW CHARACTER POSITION
153 NOP EQ, LOOP AGAIN
154 IRS 0 LE, TALLY INDEX REGISTER
155 JMP ITAB LOOP AGAIN
156 *
157 NOTB LDA ='240 SPACE
158 JMP NAC RETURN TO INSERT CHARACTER
159 *
160 * INSERT IN CHARACTER POSITION
161 NSRT DAC ** INSERT IN CHARACTER POSITION
162 LRR 8 RIGHT ROTATE BOTH 8
163 LDA CP CHARACTER POSITION
164 CAS LIM BUFFER LIMIT
165 JMP DNA GR, DO NOT ACCEPT
166 NOP EQ, ACCEPT AND PACK
167 * LE, ACCEPT AND PACK
168 SUB =1 SUBSTRACT 1
169 ADD BUFL BUFFER LINK
170 LGR 1 RIGHT SHIFT 1
171 STA TABI TABLE POINTER
172 *
173 LDA* TABI TABLE POINTER
174 SSC C SET, SKIP
175 IAB C RESET, INTERCHANGE A AND B
176 LGR 8 SHIFT RIGHT 8
177 LLR 8 LEFT ROTATE BOTH 8
178 STA* TABI TABLE POINTER
179 IRS CP TALLY CHARACTER POSITION
180 JMP* NSRT EXIT
181 *
182 DNA IRS NSRT TALLY RETURN ADDRESS
183 JMP* NSRT EXIT
184 *
185 * LEFT-ARROW ROUTINE
186 DLT JST INPT READ ONE CHARACTER
187 ERA ='215 CARRIAGE RETURN
188 SZE Z, SKIP
189 JMP DLT NZ, LOOP AGAIN
190 *
191 JMP RSTR RESTART
192 *
193 * RETURN TO CALLING PROGRAM
194 EXIT IRS I$PA TALLY RETURN ADDRESS
195 IRS I$PA TALLY RETURN ADDRESS
196 *
197 LDX SIR SAVED INDEX REGISTER
198 JMP* I$PA EXIT
199 *
200 * CHARACTER INPUT ROUTINE
201 INPT DAC **
202 OCP 1 START READER
203 INA '1001 READ ONE CHARACTER
204 JMP *-1 WAIT FOR FINISH
205 OCP '101 TURN OFF READER
206 *
207 ANA ='177 BITS 10-16
208 ERA ='200 TOGGLE BIT 9
209 JMP* INPT RETURN
210 *
211 *
212 * VARIABLES AND CONSTANTS
213 *
214 SIR BSZ 1 STORED INDEX REGISTER
215 BUFL BSZ 1 BUFFER LINK
216 CP BSZ 1 CHARACTER POSITION
217 TABI BSZ 1 TABLE POINTER
218 *
219 * CHANGEABLE PARAMETERS
220 LIM DEC 80 BUFFER LIMIT (DEFAULT IS 80)
221 NTAB DEC 4 TAB COUNT (DEFAULT IS 4)
222 TABL DAC TABS TAB TABLE LINK (DEFAULT IS TABS)
223 *
224 * DAP-16 TAB SETTINGS
225 TABS DEC 6 OPERATION FIELD
226 DEC 12 VARIABLE FIELD
227 DEC 30 COMMENTS FIELD
228 DEC 73 IDENTIFICATION FIELD
229 *
230 * IGNORABLE CHARACTERS
231 IGNT OCT 200 BLANK TAPE
232 OCT 212 LINE FEED
233 OCT 223 X-OFF
234 OCT 377 RUB-OUT
235 *
236 * LITERALS
237 FIN
238 *
239 *
240 END END OF I$PA 4.2.2005