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