* O$HH/O$LL -- MAY 24 2006 -- VERSION 1-01 * * TTY DRIVER FOR PRINTING THE ASSEMBLED LISTINGS OF DAP-16 * THIS IS THE FULL LISTING DRIVER ISO O$AH/O$AL, * WHICH IS A REDUCED VERSION * * HONEYWELL X16 16 BIT COMPUTER SOFTWARE * * PROGRAM LENGTH: 136 WORDS (INCLUDING BUFFER) * * THIS SOURCE IS RECREATED FROM THE EXISTING SLST FILE: * - SLST-DAP-16.IMG (WHICH ORIGINATES FROM HONEYWELL) * * THE SOURCE IS RECREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL) * SUBR O$HH SUBR HEAD SUBR O$LL SUBR LINE REL * * INIT THE HEADING BUFFER OF THE ASSEMBLY LISTING * FOR PRINTING THE LISTING ON THE TTY * THIS INITIALIZATION ROUTINE DOES NOT PRINT * THE HEADER * CALLING SEQUENCE: * CALL O$HH * DAC HEADER BUFFER (70 CHARS ARE MOVED) * THE X REGISTER IS UNCHANGED * HEAD EQU * O$HH DAC *-* TTY: INIT THE LISTING HEADER OUT LIST (FULL) LDA 0 STA SVX SAVE X LDA* O$HH EXTERNAL HEADER BUFFER ADDRESS ADD HIDX MAKE INDEXED STA PSB POINTER SOURCE BUFFER LDA MO43 ='-43 (35) STA 0 LDA* PSB MOVE WORD (35 WORDS TOTAL) STA HBUF,1 TO INTERNAL BUFFER IRS 0 JMP *-3 LDA O63 ='63 (51) = MAX PAGE LENGTH STA APL SET ACTUAL PAGE LENGTH LDA SVX RESTORE X STA 0 IRS O$HH SET RETURN ADDRESS JMP* O$HH RETURN * * -PRINT ONE LINE OF THE ASSEMBLED LISTING ON TTY * -SKIP TO NEW PAGE AND PRINT HEADER IN CASE OF PAGE COMPLETION * -TRAILING BLANKS OF THE LINE TO PRINT ARE REMOVED * -NO PAGE NUMBERS ARE PRINTED BY THIS VERSION * CALLING SEQUENCE: * CALL O$LL * DAC LINE BUFFER (MAX 34 WORDS/68 CHARS ARE PRINTED) * -THE X REGISTER IS UNCHANGED * LINE EQU * O$LL DAC *-* TTY: OUTPUT A LISTING LINE LDA 0 STA SVX SAVE X JST OMOD SET TTY IN OUTPUT MODE IRS APL ACTUAL PAGE LENGTH + 1 LDA O63 ='63 (MAX PAGE LENGTH) SUB APL APL > MAX PAGE LENGTH? SPL JMP NPAG YES; SKIP TO NEXT PAGE NP2 LDA* O$LL NO; GET LINE BUFFER ADDRESS JST PLIN PRINT A LISTING LINE IRS O$LL SET RETURN ADDRESS LDA SVX RESTORE X STA 0 JMP* O$LL RETURN * * PLINE: PRINT LISTING LINE ON TTY (A = LINE BUFFER ADDRESS) * PRINT 68 CHARS MAX, AND STRIP TRAILING BLANKS PLIN DAC *-* ADD IFL SET INDEX BIT IN BUFFER ADDRESS STA PSB INDEXED POINTER LINE BUFFER LDA O42 ='42 (34) P3 STA 0 TRAILING BLANKS ? LDA* PSB GET WORD (2 CHARS) FROM BUFFER END ERA SPSP ? SZE JMP P1 NO; PRINT THE LINE LDA 0 YES; BUFFER EXHAUSTED? SNZ JMP P2 YES; JUST PRINT CRLF SUB N1 X = X - 1 JMP P3 CONTINUE TO STRIP TRAILING BLANKS P1 IRS 0 CRA SUB 0 IMA 0 ADD PSB STA PSB P4 LDA* PSB GET WORD (2 CHARS) FROM BUFFER JST PRA AND PRINT IRS 0 JMP P4 P2 LDA CRLF JST PRA JMP* PLIN * * SKIP TO NEXT PAGE AND PRINT HEADER NPAG LDA MO12 ='-12 STA 0 NP1 LDA CRLF PRINT 10 * CRLF JST PRA IRS 0 JMP NP1 CRA STA APL ACTUAL PAGE LENGTH = 0 LDA PBF PRINT HEADER JST PLIN LDA CRLF PRINT 3 * CRLF JST PRA JST PRA JST PRA JMP NP2 * PRA DAC *-* PRINT 2 CHARS FROM A LRL '10 OTA 4 JMP *-1 LLL '10 OTA 4 JMP *-1 JMP* PRA * OMOD DAC *-* SET TTY IN OUTPUT MODE IF READY SKS '104 READY? JMP *-1 OCP '104 SET OUTPUT MODE JMP* OMOD * * WORKSPACE AND INTERNAL BUFFER * SVX OCT 0 SAVED X PSB OCT 0 INDEXED POINTER TO SOURCE BUFFER APL OCT 0 ACTUAL PAGE LENGTH PBF DAC *+1 POINTER TO HEADER BUFFER * INTERNAL HEADER BUFFER; 35 WORDS/70 CHARS BCI 18, BCI 17, HBUF EQU * END OF INTERNAL HEADER BUFFER O63 OCT 63 CRLF OCT 106612 MO12 OCT 177766 N1 OCT 1 SPSP BCI 1, O42 OCT 000042 IFL OCT 040000 INDEX FLAG MO43 OCT 177735 HIDX OCT 040043 HEADER INDEX SOURCE END