Initial revision
[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 PAPTER 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 O$PA
42 * CALL O$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 *
53 ********************************************************************************
54 *
55 * EXPORTED LABELS
56 SUBR I$PA
57 SUBR I$PI
58 *
59 *
60 *
61 REL RELOCATEABLE MODE
62 *
63 *
64 * SETUP READ ROUTINE
65 *
66 I$PI DAC ** SETUP READ ROUTINE
67 LDA* I$PI WORD COUNT PARAMETER
68 LGL 1 LEFT SHIFT 1
69 STA LIM BUFFER LIMIT
70 *
71 IRS I$PI TALLY RETURN ADDRESS
72 LDA* I$PI TAB COUNT PARAMETER
73 STA NTAB TAB COUNT
74 *
75 LDA I$PI RETURN ADDRESS
76 AOA TALLY BY 1
77 STA TABL TAB TABLE LINK
78 *
79 ADD NTAB TAB COUNT
80 STA I$PI RETURN ADDRESS
81 JMP* I$PI EXIT
82 *
83 *
84 * READ ROUTINE
85 *
86 I$PA DAC ** READ ROUTINE
87 STX SIR SAVED INDEX REGISTER
88 LDA* I$PA BUFFER ADDRESS PARAMETER
89 LGL 1 LEFT SHIFT 1
90 STA BUFL BUFFER LINK
91 *
92 RSTR LDA =1 POSITION 1
93 STA CP CHARACTER POSITION
94 *
95 STSP LDA ='240 SPACE
96 JST NSRT INSERT IN CHARACTER POSITION
97 JMP STSP LOOP AGAIN
98 *
99 LDA =1 POSITION 1
100 SCP STA CP CHARACTER POSITION
101 *
102 * INPUT AND TEST FOR SPECIAL CODES
103 READ NOP
104 RES LDX =-4 INDEX REGISTER = -4
105 JST INPT READ ONE CHARACTER
106 *
107 CAS ='337 LEFT ARROW?
108 SKP NO, SKIP
109 JMP DLT YES, DELETE LINE
110 *
111 ISIT CAS IGNT+4,1 IGNORE TABLE
112 SKP NO, SKIP
113 JMP RES YES, IGNORE IT
114 *
115 IRS 0 TALLY INDEX REGISTER
116 JMP ISIT LOOP AGAIN
117 *
118 CAS ='215 CARRIAGE RETURN?
119 SKP NO, SKIP
120 JMP EXIT YES, END-OF-RECORD
121 *
122 CAS ='334 BACKSLASH?
123 SKP NO, SKIP
124 JMP TAB YES, TAB
125 *
126 CAS ='203 END-OF-TEXT?
127 SKP NO, SKP
128 JMP EXIT+1 YES, ETX
129 *
130 * NO ACTION CHARACTER
131 NAC JST NSRT INSERT IN CHARACTER POSITION
132 JMP READ BUFFER NOT FULL, LOOP AGAIN
133 JMP READ BUFFER NOW FULL, LOOP AGAIN
134 *
135 * TAB ROUTINE
136 TAB CRA CLEAR A-REGISTER
137 SUB NTAB TAB COUNT
138 SNZ NZ, SKIP
139 JMP NOTB Z, NO TABS
140 *
141 STA 0 INDEX REGISTER
142 LDA TABL TAB TABLE LINK
143 STA TABI TABLE POINTER
144 *
145 ITAB LDA* TABI TABLE POINTER
146 IRS TABI TALLY TABLE POINTER
147 CAS CP CHARACTER POSITION
148 JMP SCP GR, SET NEW CHARACTER POSITION
149 NOP EQ, LOOP AGAIN
150 IRS 0 LE, TALLY INDEX REGISTER
151 JMP ITAB LOOP AGAIN
152 *
153 NOTB LDA ='240 SPACE
154 JMP NAC RETURN TO INSERT CHARACTER
155 *
156 * INSERT IN CHARACTER POSITION
157 NSRT DAC ** INSERT IN CHARACTER POSITION
158 LRR 8 RIGHT ROTATE BOTH 8
159 LDA CP CHARACTER POSITION
160 CAS LIM BUFFER LIMIT
161 JMP DNA GR, DO NOT ACCEPT
162 NOP EQ, ACCEPT AND PACK
163 * LE, ACCEPT AND PACK
164 SUB =1 SUBSTRACT 1
165 ADD BUFL BUFFER LINK
166 LGR 1 RIGHT SHIFT 1
167 STA TABI TABLE POINTER
168 *
169 LDA* TABI TABLE POINTER
170 SSC C SET, SKIP
171 IAB C RESET, INTERCHANGE A AND B
172 LGR 8 SHIFT RIGHT 8
173 LLR 8 LEFT ROTATE BOTH 8
174 STA* TABI TABLE POINTER
175 IRS CP TALLY CHARACTER POSITION
176 JMP* NSRT EXIT
177 *
178 DNA IRS NSRT TALLY RETURN ADDRESS
179 JMP* NSRT EXIT
180 *
181 * LEFT-ARROW ROUTINE
182 DLT JST INPT READ ONE CHARACTER
183 ERA ='215 CARRIAGE RETURN
184 SZE Z, SKIP
185 JMP DLT NZ, LOOP AGAIN
186 *
187 JMP RSTR RESTART
188 *
189 * RETURN TO CALLING PROGRAM
190 EXIT IRS I$PA TALLY RETURN ADDRESS
191 IRS I$PA TALLY RETURN ADDRESS
192 *
193 LDX SIR SAVED INDEX REGISTER
194 JMP* I$PA EXIT
195 *
196 * CHARACTER INPUT ROUTINE
197 INPT DAC **
198 OCP 1 START READER
199 INA '1001 READ ONE CHARACTER
200 JMP *-1 WAIT FOR FINISH
201 OCP '101 TURN OFF READER
202 *
203 ANA ='177 BITS 10-16
204 ERA ='200 TOGGLE BIT 9
205 JMP* INPT RETURN
206 *
207 *
208 * VARIABLES AND CONSTANTS
209 *
210 SIR BSZ 1 STORED INDEX REGISTER
211 BUFL BSZ 1 BUFFER LINK
212 CP BSZ 1 CHARACTER POSITION
213 TABI BSZ 1 TABLE POINTER
214 *
215 * CHANGEABLE PARAMETERS
216 LIM DEC 80 BUFFER LIMIT (DEFAULT IS 80)
217 NTAB DEC 4 TAB COUNT (DEFAULT IS 4)
218 TABL DAC TABS TAB TABLE LINK (DEFAULT IS TABS)
219 *
220 * DAP-16 TAB SETTINGS
221 TABS DEC 6 OPERATION FIELD
222 DEC 12 VARIABLE FIELD
223 DEC 30 COMMENTS FIELD
224 DEC 73 IDENTIFICATION FIELD
225 *
226 * IGNORABLE CHARACTERS
227 IGNT OCT 200 BLANK TAPE
228 OCT 212 LINE FEED
229 OCT 223 X-OFF
230 OCT 377 RUB-OUT
231 *
232 * LITERALS
233 FIN
234 *
235 *
236 END END OF I$PA 4.2.2005