* O$AA - O$AI - O$GA - O$AS FEB 4 2006 - VERSION 1 * * PRINT/PUNCH ASCII RECORD FROM TELETYPE / PAPERTAPE PUNCH * * HONEYWELL X16 16 BIT COMPUTER SOFTWARE * * PROGRAM LENGTH: 122 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) * * O$AI INITIALIZES O$AA * CALL O$AI * DEC NUMBER OF WORDS IN DATA BUFFER * DEC NUMBER OF TABS IN THE FOLLOWING TABLE (IF ANY) * DEC TAB1 * DEC TAB2 * ... ... * * CALL O$AA (PRINT/PUNCH BINARY RECORD) * DAC DATA BUFFER ADDRESS * ... NORMAL RETURN * * CALL O$AS (PUNCH END OF MESSAGE) * ... NORMAL RETURN * * SUBR O$AA SUBR O$AI * ALTERNATIVE ENTRY POINT FOR O$AA SUBR O$GA SUBR O$AS * REL O$AI DAC *-* INIT DRIVER LDA* O$AI LGL 1 *2= NBR OF CHARS STA BL IRS O$AI LDA* O$AI NBR OF TABS STA NTAB LDA O$AI AOA STA TTAB PTR TO TAB TABLE ADD NTAB STA O$AI RETURN ADDRESS JMP* O$AI * O$GA EQU * O$AA DAC *-* STX SVX LDA* O$AA PTR TO BUFFER IRS O$AA LGL 1 *2 STA CPTR = CHAR POINTER LDA TAPE JST OUT START PUNCHER LDA RUB OUT RECORD START JST OUT LDA LF JST OUT CRA STA AL ACTUAL LENGTH = 0 STA TRS SPACE COUNTER = 0 NEXT LDA AL IRS AL ACTUAL RECORD LENGTH ADD CPTR + CHAR POINTER LGR 1 \2 => SET C STA WPTR = WORD POINTER LDA* WPTR LOAD WORD TO OUTPUT SSC WHERE TO START? ICA C=0 EVEN, PRINT LEFT FIRST CAL C=1 ODD, PRINT RIGTH FIRST CAS SPAC SPACE ? SKP NO JMP SKTP YES; MORE SPACES? LRL '010 A=0 B-LEFT IS CHAR TO OUTPUT SUB TRS PENDING COUNTED SPACES STA TRS TRS = - TRS SNZ JMP P1 ZERO PENDING SPACES LDA SPAC PRINT COUNTED PENDING SPACES JST OUT IRS TRS JMP *-2 P1 LLL '010 GET CHAR TO OUTPUT FROM B JST OUT AND OUTPUT P2 LDA BL BUFFER COMPLETE ? CAS AL JMP NEXT BL>ACTUAL => OUTPUT NEXT CHAR LDA CR BL=ACTUAL => BUFFER COMPLETE JST OUT OUTPUT CLOSING RECORD CHARS LDA XOFF JST OUT LDA RUB JST OUT LDX SVX RESTORE X JMP* O$AA SKTP IRS TRS CRA ON TAB POSITION ? SUB NTAB NUMBER OF TABS SNZ JMP P2 NO TABS AT ALL STA 0 X = - NBR OF TABS LDA TTAB A = PTR TO TAB TABLE STA WPTR SAVE LDA AL IS ACTUAL LENGTH + 1 AOA ON THIS TAB POSITION ? P3 CAS* WPTR SKP AL+1 > TAB POS JMP P4 AL+1 = TAB POS => OUTPUT TAB IRS WPTR CHECK NEXT TAB POS IRS 0 JMP P3 JMP P2 NO TABS ANYMORE P4 LDA TAB OUTPUT A TAB JST OUT CRA RESET SPACE COUNTER JMP NEXT-1 THEN NEXT CHAR * OUT DAC *-* OUTPUT CHAR SKS '0104 JMP *-1 OCP '0104 OTA 4 JMP *-1 JMP* OUT * O$AS DAC *-* PUNCH END OF MESSAGE LDA TAPE START TAPE PUNCHER JST OUT LDA RUB JST OUT LDA EOM JST OUT LDA XOFF JST OUT LDA RUB JST OUT JMP* O$AS * * WORKSPACE * SVX OCT 0 SAVE X CPTR OCT 0 ACTUAL BUFFER PTR *2 (CHARPTR) AL OCT 0 ACTUAL BUFFER LENGTH TRS OCT 0 NBR OF TRAILING SPACES COUNTED WPTR OCT 0 ACTUAL WORD PTR IN BUFFER BL OCT 120 BUFFER LENGTH (CHARS) * NTAB OCT 4 NBR OF TABS (DEFAULT TAB TABLE) TTAB DAC *+1 PTR TO TAB TABLE OCT 6 TAB TABLE OCT 14 OCT 36 OCT 111 * EOM OCT 203 TAB OCT 334 XOFF OCT 223 CR OCT 215 SPAC OCT 240 LF OCT 212 RUB OCT 377 TAPE OCT 222 END