| 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 |