100 BUFOFF, TAD LPTCHAR /GET LATEST CHARACTER 110 JMS I (LPOUT) /TRY TO OUTPUT IT 120 JMP LPFXIT /FORGET IT 130 TAD LPMODE /GET LATEST MODE 140 SPA /SKIP IF BUFFERING NOT ALLOWED 150 IAC /ELSE TRY TO END TEMPORARY PAUSE 160 DCA LPMODE /STORE BACK 170 JMP LPEXIT /TAKE SKIP RETURN FOR NOW 180 190 LPINIT, TAD [LPTBUFFER] /SETUP THE 200 DCA FILLPTR /FILL POINTER 210 TAD [LPTBUFFER] /SETUP THE 220 DCA EMPTPTR /EMPTYING POINTER 230 TAD LPMODE /GET BUFFERING MODE 240 SPA SNA CLA /SKIP IF BUFFERING NOT ALLOWED 250 TAD [7600] /ELSE SETUP TEMPORARY PAUSE VALUE 260 IAC /RESET NON-BUFFERING VALUE AT LEAST 270 DCA LPMODE /STORE NEW MODE 280 NL7777 /SET THE 290 DCA LPTFLAG /OUTPUT FLAG 300 NL7777 /GET A 310 JMS I (LPOUT) /TRY TO OUTPUT IT 320 SKP /SKIP IF UNSUCCESSFUL 330 LPEXIT, ISZ OUTLPT /BUMP TO SKIP RETURN 340 LPFXIT, TAD LPTAC /RESTORE ORIGINAL AC 350 JMP LPTRET /FINISH IT THERE 360 370 PAGE 380 EJECT 390 / CONSOLE INPUT ROUTINE. 400 410 CONIN, NL0002 /SET CIF BIT 420 RDF /GET CALLING FIELD 430 TAD [CDF] /TURN INTO CIF CDF CALLING FIELD 440 DCA INRET /STORE IN-LINE FOR EXIT LATER 450 JMS I (INTEST) /TEST FOR KEYBOARD INPUT 460 ISZ INCON /BUMP RETURN ADDRESS BECAUSE THERE WAS INPUT 470 TAD INCHAR /GET THE CHARACTER 480 JMP INRET /FINISH IT THERE 490 500 / INTERRUPT HANDLER. 510 520 INTCON, NL0002 /SET CIF BIT 530 RDF /GET CALLING FIELD 540 TAD [CDF] /TURN INTO CIF CDF CALLING FIELD 550 DCA INTRET /STORE IN-LINE FOR EXIT LATER 560 DCA INTFLGS /CLEAR INTERRUPT FLAGS 570 DKSFIOT /INPUT FLAG UP? 580 JMP LPRINT /NO, TRY OUTPUT 590 TAD INFLAG /GET CURRENT FLAG 600 SZA CLA /SKIP IF CLEAR 610 TAD (4400) /ELSE SET ERROR, OVERRUN ERROR BITS 620 DCA INFLAG /STORE FOR NOW 630 DKRBIOT /GET THE CHARACTER, CLEARING THE FLAG 640 DCA KEYTMP /SAVE IT 650 TAD INFLAG /GET THE FLAG 660 CMA /INVERT IT 670 AND KEYTMP /AND OFF NON-CONFLICTING BITS 680 TAD INFLAG /OR IN THE FLAG 690 SNA /SKIP IF SOMETHING SET 700 TAD (5000) /ELSE SET ERROR, FRAMING ERROR BITS 710 DCA INFLAG /STORE FINAL CHARACTER FLAG VALUE 720 ISZ INTFLGS /SET KEYBOARD INTERRUPT FLAG BIT 730 740 LPRINT, IFZERO ONEWAY < 750 760 LISFIOT /INPUT FLAG UP? 770 JMP OUTINT /NO, FORGET IT 780 LIRBIOT /YES, READ IT IN 790 SNA /SKIP IF SOMETHING THERE 800 TAD (5000) /ELSE SET ERROR, FRAMING ERROR BITS 810 DCA LINFLAG /STORE THE INPUT FLAG 820 NL0004 /SET LPT: INPUT INTERRUPT BIT 830 TAD INTFLGS /GET INTERRUPT FLAGS 840 DCA INTFLGS /STORE BACK 850 860 > 870 EJECT 880 OUTINT, NL7777 /SET THE 890 DCA OUTFLAG /EVENT FLAG 900 ISZ INTFLGS /SET ON THE 910 ISZ INTFLGS /OUTPUT INTERRUPT BIT 920 LPTINT, LSFIOT /LPT: FLAG UP? 930 JMP VTINT /NO, TRY VT-8/E KEYBOARD 940 LCFIOT /CLEAR THE FLAG 950 NL7777 /SET THE 960 DCA LPTFLAG /EVENT FLAG 970 TAD INTFLGS /GET INTERRUPT FLAGS 980 TAD (10) /SET LPT: INTERRUPT BIT 990 DCA INTFLGS /STORE BACK 1000 VTINT, DPCLIOT /VIDEO RETRACE FLAG UP? 1010 JMP VTLINT /NO, TRY DORMANT LPT: FLAG 1020 TAD VTMODE /YES, GET CURRENT MODE 1030 BSW /FLIP IT 1040 DCA VTMODE /STORE BACK 1050 TAD VTMODE /GET IT AGAIN 1060 AND (70) /JUST FIELD BITS 1070 DCA KEYTMP /STORE FOR NOW 1080 NL0006 /SETUP QUARTER MASK 1090 AND VTMODE /GET THE MEMORY QUARTER 1100 CLL RTR;RTR /MOVE UP 1110 TAD [VTOFFSET] /ADD ON IMPLIED OFFSET 1120 DPLAIOT /LOAD DISPLAY ADDRESS 1130 NL0001 /SET MODE MASK 1140 AND VTMODE /GET THE MODE BIT 1150 STL RAL /MOVE UP AND SET INTERRUPT ENABLE 1160 TAD KEYTMP /ADD ON FIELD BITS 1170 DPGOIOT /START IT UP 1180 TAD INTFLGS /GET INTERRUPT FLAGS 1190 TAD (20) /SET EXTRA FLAG BIT 1200 DCA INTFLGS /STORE BACK