* I$AA - I$AI - I$GA - C$ASR DEC 13 2006 - VERSION 1-01 * * READ ASCII RECORD FROM TELETYPE (PAPERTAPE READER) * * HONEYWELL X16 16 BIT COMPUTER SOFTWARE * * PROGRAM LENGTH: 141 WORDS * * THIS SOURCE IS RECREATED FROM THE EXISTING OBJECT FILE (WHICH ORIGINATES * FROM HONEYWELL) * * THE SOURCE IS RECREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL) * * I$AI INITIALIZES I$AA; IF NOT INITIALIZED, I$AA READS WITH DEFAULT SETTING * CALLING SEQUENCE: * * CALL I$AI * DEC NUMBER OF WORDS IN DATABUFFER * DEC NUMBER OF TABS IN FOLLOWING TABLE (IF ANY) * DEC TAB1 * DEC TAB2 * ... .... * (RETURN LOCATION) * * DEFAULTS FOR I$AA: * BUFFER IS 40 WORDS LONG (CARD IMAGE) * 3 TABS AT: 6, 12 AND 30 (DAP16 FORMAT) * SUBR I$AA SUBR I$AI SUBR I$GA SUBR C$ASR,ASR REL I$AI DAC *-* INIT LDA* I$AI LGL 1 *2 STA LIM BUFFER LENGTH(CHARS) IRS I$AI LDA* I$AI STA NTAB NUMBER OF TABS ADD I$AI AOA STA I$AI NEW RETURN ADDRESS ADD IBIT SET INDEX BIT STA TABL JMP* I$AI * * I$AA (ISGA IS 2ND NAME FOR SAME ENTRY POINT) * READ ASCII RECORD FROM TELETYPE (PAPERTAPE READER) * I$AI INITIALIZES I$AA; IF NOT INITIALIZED, I$AA READS WITH DEFAULT SETTING * * CALLING SEQUENCE: * CALL I$AA (I$GA) * DAC ADDRESS DATABUFFER * (END OF MESSAGE RETURN) * (NORMAL RETURN) * * DEFAULTS FOR I$AA-I$GA: * BUFFER IS 40 WORDS LONG (CARD IMAGE) * 3 TABS AT: 6, 12 AND 30 (DAP16 FORMAT) * I$GA EQU * I$AA EQU * DAC *-* LDA 0 STA XSV SAVE X LDA* I$AA ADD IBIT STA BUFF SET BUFFER ADDR, INDEXED STR SKS '0104 START READER JMP *-1 OCP '0104 LDA XON OTA '4 JMP *-1 LDA ONE STA CP CHAR COUNTER = 1 LDA SPAC BLANK BUFFER JST NSRT JMP *-2 LDA ONE STCP STA CP CHAR COUNTER = 1 RD SKS '0104 JMP *-1 OCP '4 INPUT MODE C0 LDA M4 STA 0 INA '1004 INPUT AN ASCII CHAR JMP *-1 CAS DEL JMP C1 JMP IKEY IGNORE LINE C1 CAS EOM,1 JMP C2 JMP C0 C2 IRS 0 JMP C1 CAS CR JMP C3 JMP EXIT NORMAL EXIT C3 CAS TAB JMP C4 JMP T1 TAB C4 CAS EOM JMP C5 JMP EXIT+1 EOM EXIT C5 JST NSRT JMP RD JMP RD T1 LDA NTAB HANDLE TABS SNZ JMP T3 0 TABS TCA STA 0 T2 LDA* TABL CAS CP JMP STCP NOP IRS 0 JMP T2 T3 LDA SPAC JMP C5 NSRT DAC *-* CP ODD=>STORE LEFT CP EVEN=>STORE RIGHT LRR '010 B=NEWCH ???? LDA CP CAS LIM JMP N1 BUFFER COMPLETE NOP SUB ONE LGR 1 \2 -> WORD COUNT C=ODD/EVEN STA 0 X=WORD COUNT LDA* BUFF LOAD WORD TO INSERT CHAR SSC IAB EVEN (A=NEWCH ???? B=SPACE SPACE) LGR '010 LLR '010 LEFT BYTE B INTO RIGHT BYTE A STA* BUFF IRS CP JMP* NSRT NORMAL RETURN N1 IRS NSRT JMP* NSRT BUFFER COMPLETE RETURN * IKEY INA '1004 IGNORE LINE UNTIL CR JMP IKEY ERA CR SZE JMP IKEY JST ASR AND RECOVER BY READING NEXT LINE JMP STR * * CONTINUE READING NEXT RECORD AFTER IGNORING THE PREVIOUS ONE * I$AI INITIALIZES I$AA; IF NOT INITIALIZED, I$AA READS WITH DEFAULT SETTING * * CALLING SEQUENCE: * JPM OR JST C$ASR * (WILL NOT RETURN) * ASR DAC *-* JMP STR * EXIT IRS I$AA NORMAL EXIT IRS I$AA EOM EXIT LDA ZERO DELAY STA TE3 STA TE2 STA TE1 IRS TE3 JMP *-1 IRS TE2 JMP *-1 IRS TE1 JMP *-1 LDA XSV RESTORE X STA 0 JMP* I$AA * * WORKSPACE * LIM OCT 120 BUFFER LENGTH (CHARS) NTAB OCT 3 3 TABS TABL DAC TABS+3,1 TABS OCT 6 TABS TABLE OCT 14 OCT 36 XSV BSS 1 SAVE X BUFF BSS 1 POINTER TO BUFFER, INDEXED CP BSS 1 ZERO OCT 0 TE1 BSS 1 TE2 BSS 1 TE3 BSS 1 NULL OCT 0 LF OCT 212 XOFF OCT 223 RUB OCT 377 EOM OCT 203 TAB OCT 334 CR OCT 215 DEL OCT 337 M4 OCT 177774 SPAC OCT 240 ONE OCT 1 XON OCT 221 IBIT OCT 40000 END