* (I$PA) * * * COMPUTER: H316 * * PROGRAM CATEGORY: I/O LIBRARY * * PROGRAM TITLE: I$PA (I$PI) * * * REVISIONS: * 0.1 (2005-02.04) * 0.2 (2006-12.14) - ADDED REGISTER SAVE INSTRUCTIONS * * AUTHOR * * PHILIPP HACHTMANN * * * PURPOSE * * TO READ ASCII SOURCE TEXT FROM HIGH SPEED PAPER TAPE READER * * * RESTRICTIONS * * NOT ALL FUNCTIONALITY MAY BE COMPLETELY RECOVERED BECAUSE * OF MISSING INFORMATION. * * STORAGE * * 176 (OCTAL) * 126 (DECIMAL) * * * USE * * I$PA - READ LINE OF SOURCE CODE USING TAB CHARACTERS * CALL I$PA * DAC (BUFFER ADDRESS) * * I$PI - CONFIGURE I$PA * CALL I$PI * DEC (NUMBER OF WORDS IN DATA BUFFER) * DEC (NUMBER OF TABS IN FOLLOWING TABLE, IF ANY) * DEC TAB (1) * DEC TAB (2) * . . * . . * . . * DEC TAB (N) * * NOTICE * * THE CHARACTER SEQUENCE 'ABS' HAS BEEN REPLACED BY 'DBS' BECAUSE THE * ASSEMBLER SHOWED STRANGE BEHAVIOUR * ******************************************************************************** * * EXPORTED LABELS SUBR I$PA SUBR I$PI * * * REL RELOCATEABLE MODE * * * SETUP READ ROUTINE * I$PI DAC ** SETUP READ ROUTINE STA SRA SAVE A REGISTER * LDA* I$PI WORD COUNT PARAMETER LGL 1 LEFT SHIFT 1 STA LIM BUFFER LIMIT * IRS I$PI TALLY RETURN ADDRESS LDA* I$PI TAB COUNT PARAMETER STA NTAB TAB COUNT * LDA I$PI RETURN ADDRESS AOA TALLY BY 1 STA TABL TAB TABLE LINK * ADD NTAB TAB COUNT STA I$PI RETURN ADDRESS LDA SRA JMP* I$PI EXIT * * * READ ROUTINE * I$PA DAC ** READ ROUTINE STA SRA SAVE A REGISTER IAB STA SRB SAVE B REGISTER STX SRI SAVE INDEX REGISTER * LDA* I$PA BUFFER ADDRESS PARAMETER LGL 1 LEFT SHIFT 1 STA BUFL BUFFER LINK * RSTR LDA =1 POSITION 1 STA CP CHARACTER POSITION * STSP LDA ='240 SPACE JST NSRT INSERT IN CHARACTER POSITION JMP STSP LOOP AGAIN * LDA =1 POSITION 1 SCP STA CP CHARACTER POSITION * * INPUT AND TEST FOR SPECIAL CODES READ NOP RES LDX =-4 INDEX REGISTER = -4 JST INPT READ ONE CHARACTER * CAS ='337 LEFT ARROW? SKP NO, SKIP JMP DLT YES, DELETE LINE * ISIT CAS IGNT+4,1 IGNORE TABLE SKP NO, SKIP JMP RES YES, IGNORE IT * IRS 0 TALLY INDEX REGISTER JMP ISIT LOOP AGAIN * CAS ='215 CARRIAGE RETURN? SKP NO, SKIP JMP EXIT YES, END-OF-RECORD * CAS ='334 BACKSLASH? SKP NO, SKIP JMP TAB YES, TAB * CAS ='203 END-OF-TEXT? SKP NO, SKP JMP EXIT+1 YES, ETX * * NO ACTION CHARACTER NAC JST NSRT INSERT IN CHARACTER POSITION JMP READ BUFFER NOT FULL, LOOP AGAIN JMP READ BUFFER NOW FULL, LOOP AGAIN * * TAB ROUTINE TAB CRA CLEAR A-REGISTER SUB NTAB TAB COUNT SNZ NZ, SKIP JMP NOTB Z, NO TABS * STA 0 INDEX REGISTER LDA TABL TAB TABLE LINK STA TABI TABLE POINTER * ITAB LDA* TABI TABLE POINTER IRS TABI TALLY TABLE POINTER CAS CP CHARACTER POSITION JMP SCP GR, SET NEW CHARACTER POSITION NOP EQ, LOOP AGAIN IRS 0 LE, TALLY INDEX REGISTER JMP ITAB LOOP AGAIN * NOTB LDA ='240 SPACE JMP NAC RETURN TO INSERT CHARACTER * * INSERT IN CHARACTER POSITION NSRT DAC ** INSERT IN CHARACTER POSITION LRR 8 RIGHT ROTATE BOTH 8 LDA CP CHARACTER POSITION CAS LIM BUFFER LIMIT JMP DNA GR, DO NOT ACCEPT NOP EQ, ACCEPT AND PACK * LE, ACCEPT AND PACK SUB =1 SUBSTRACT 1 ADD BUFL BUFFER LINK LGR 1 RIGHT SHIFT 1 STA TABI TABLE POINTER * LDA* TABI TABLE POINTER SSC C SET, SKIP IAB C RESET, INTERCHANGE A AND B LGR 8 SHIFT RIGHT 8 LLR 8 LEFT ROTATE BOTH 8 STA* TABI TABLE POINTER IRS CP TALLY CHARACTER POSITION JMP* NSRT EXIT * DNA IRS NSRT TALLY RETURN ADDRESS JMP* NSRT EXIT * * LEFT-ARROW ROUTINE DLT JST INPT READ ONE CHARACTER ERA ='215 CARRIAGE RETURN SZE Z, SKIP JMP DLT NZ, LOOP AGAIN * JMP RSTR RESTART * * RETURN TO CALLING PROGRAM EXIT IRS I$PA TALLY RETURN ADDRESS IRS I$PA TALLY RETURN ADDRESS * LDX SRI SAVED INDEX REGISTER LDA SRB RESTORE B REGISTER IAB LDA SRA RESTORE A REGISTER JMP* I$PA EXIT * * CHARACTER INPUT ROUTINE INPT DAC ** OCP 1 START READER INA '1001 READ ONE CHARACTER JMP *-1 WAIT FOR FINISH OCP '101 TURN OFF READER * ANA ='177 BITS 10-16 ERA ='200 TOGGLE BIT 9 JMP* INPT RETURN * * * VARIABLES AND CONSTANTS * SRI BSZ 1 SAVED INDEX REGISTER SRA BSZ 1 SAVED A REGISTER SRB BSZ 1 SAVED B REGISTER BUFL BSZ 1 BUFFER LINK CP BSZ 1 CHARACTER POSITION TABI BSZ 1 TABLE POINTER * * CHANGEABLE PARAMETERS LIM DEC 80 BUFFER LIMIT (DEFAULT IS 80) NTAB DEC 4 TAB COUNT (DEFAULT IS 4) TABL DAC TABS TAB TABLE LINK (DEFAULT IS TABS) * * DAP-16 TAB SETTINGS TABS DEC 6 OPERATION FIELD DEC 12 VARIABLE FIELD DEC 30 COMMENTS FIELD DEC 73 IDENTIFICATION FIELD * * IGNORABLE CHARACTERS IGNT OCT 200 BLANK TAPE OCT 212 LINE FEED OCT 223 X-OFF OCT 377 RUB-OUT * * LITERALS FIN * * END END OF I$PA 4.2.2005