PAGE /TTY I/O PACKAGE /11MR68, 30NV69 / KTREAD, 00 JMS KTGET SPA JMP .-2 DCA KTNEXT STA DCA KTNEXT+1 TAD KTNEXT JMP I KTREAD KTNEXT, 00 00 / KTGET, 00 CLA DCA 0 KSF JMP .+4 TAD 0 SNA CLA JMS KTKSV TAD KTNEXT+1 JMP I KTGET / KTKCL, 00 KCC STA DCA KTNEXT+1 JMP I KTKCL / KTKSV, 00 KRB DCA KTNEXT+1 JMP I KTKSV / 00 00 00 00 KTWRTE, 00 SKP JMP I KTWRTE DCA KTWRTE-2 CLL STA RTL DCA KTWRTE-4 ISZ KTWRTE-3 SKP ISZ KTWRTE-4 TAD KTWRTE-1 SNA CLA JMP .+3 TSF JMP .-7 TAD KTWRTE-2 TLS STA DCA KTWRTE-1 JMP I KTWRTE / KTTSV, 00 TCF CLA DCA KTWRTE-1 JMP I KTTSV / 212 -215 KTACPT, 00 JMS KTKCL JMS KTREAD JMS KTWRTE TAD KTNEXT TAD KTACPT-1 SZA CLA JMP .+3 TAD KTACPT-2 JMS KTWRTE TAD KTNEXT JMP I KTACPT / 00 TYPOPN, 00 CLA TAD I TYPOPN DCA TYPOPN-1 ISZ TYPOPN TAD I TYPOPN-1 ISZ TYPOPN-1 SNA JMP I TYPOPN JMS KTWRTE JMP .-5 / 00 TYPPAK, 00 CLA TAD I TYPPAK DCA TYPPAK-1 ISZ TYPPAK TAD I TYPPAK-1 JMS KTPA TAD I TYPPAK-1 RTL RTL RTL JMS KTPA ISZ TYPPAK-1 JMP TYPPAK+5 245 215-245 243-245 212-243 -243 7700 KTPA, 00 AND KTPA-1 SNA JMP I TYPPAK CLL IAC SMA STL RTR RTR RTR TAD KTPA-2 SNA TAD KTPA-3 TAD KTPA-4 SNA TAD KTPA-5 TAD KTPA-6 JMS KTWRTE JMP I KTPA /END, TTY PKG $ PAGE /***************************** /TTY I/O PACKAGE /11MR68, 30NV69 / KTREAD, 00 /SUBR, READ KEYBOARD UNCONDITIONALLY JMS KTGET /GET INPUT CHARACTER, IF ANY SPA JMP .-2 /IF NONE, TRY AGAIN DCA KTNEXT /DEPOSIT INPUT CHARACTER STA DCA KTNEXT+1 /MARK BUFFER IN CORE EMPTY TAD KTNEXT JMP I KTREAD /RETURN WITH INPUT IN AC KTNEXT, 00 /+0 TELETYPE INPUT WORD 00 /+1 TELETYPE INPUT BUFFER / KTGET, 00 /SUBR, GET TELETYPE INPUT CHARACTER IF CLA / ANY DCA 0 /LOCATION 0 HOLDS RETURN ADDRESSES OF KSF / INTERRUPTS JMP .+4 /BRANCH IF NO FLAG, LOOK FOR CHARACTER TAD 0 / IN CORE SNA CLA /SKIP IF FLAG CAUSED INTERRUPT JMS KTKSV /READ HARDWARE BUFFER INTO CORE TAD KTNEXT+1 /GET BUFFER CHARACTER, AC= -1 IF NONE JMP I KTGET / KTKCL, 00 /SUBR, CLEAR OUT PREVIOUS KEYBOARD INPUT KCC /CLEAR HARDWARE FLAG WHEN INTERRUPT STA / DISABLED DCA KTNEXT+1 /MARK BUFFER IN CORE EMPTY JMP I KTKCL / KTKSV, 00 /KEYBOARD INPUT INTERRUPT & FLAG SERVICE KRB /CLEAR FLAG, READ BUFFER, ALLOW NEW CHAR DCA KTNEXT+1 /SAVE CHARACTER JMP I KTKSV / 00 /-4 HIGH-ORDER TIME COUNT 00 /-3 LOW-ORDER TIME COUNT 00 /-2 OUTPUT CHARACTER 00 /-1 BUSY LATCH, -1 = BUSY, 0 = NOT BUSY KTWRTE, 00 /SUBR, TELETYPE OUTPUT SKP /PATCH HERE TO DIVERT TO ANOTHER DEVICE JMP I KTWRTE DCA KTWRTE-2 /SAVE CHARACTER CLL STA RTL /AC = -3 DCA KTWRTE-4 /INITIALIZE TIME COUNT (140 MS MIN) ISZ KTWRTE-3 /BEGIN LOOP SKP ISZ KTWRTE-4 /SKIP IF TIME COUNT DONE, EXPECT NO FLAG TAD KTWRTE-1 /CHECK BUSY LATCH SNA CLA /SKIP IF LATCH ON AND COUNT NOT DONE JMP .+3 /BRANCH IF NOT BUSY TSF /SKIP IF FLAG, INTERRUPT MAY BE DISABLED JMP .-7 /PREVIOUS CHARACTER NOT DONE, TRY AGAIN TAD KTWRTE-2 /GET CHARACTER TLS /START TELETYPE STA DCA KTWRTE-1 /MARK BUSY JMP I KTWRTE / KTTSV, 00 /TELETYPE OUTPUT INTERRUPT SERVICE TCF /CLEAR FLAG CLA DCA KTWRTE-1 /MARK NOT BUSY JMP I KTTSV / 212 -215 KTACPT, 00 /ACCEPT (AND ECHO) KEYBOARD INPUT JMS KTKCL /CLEAR KEYBOARD BUFFER JMS KTREAD /READ KEYBOARD JMS KTWRTE /ECHO ON TELEPRINTER TAD KTNEXT TAD KTACPT-1 /CHECK FOR CARRIAGE RETURN SZA CLA JMP .+3 TAD KTACPT-2 /IF CARRIAGE RETURN, SUPPLY LINE FEED JMS KTWRTE TAD KTNEXT /GET CHARACTER JMP I KTACPT /RETURN / 00 TYPOPN, 00 /TYPE MESSAGE OF OPEN TEXT CLA / JMS TYPOPN (EFFECTIVE) TAD I TYPOPN / ADDRESS-OF-MESSAGE DCA TYPOPN-1 / (NEXT INSTRUCTION) ISZ TYPOPN TAD I TYPOPN-1 ISZ TYPOPN-1 SNA JMP I TYPOPN /ZERO WORD TERMINATES MESSAGE JMS KTWRTE /WRITE CHARACTER JMP .-5 / 00 / TEXT POINTER TYPPAK, 00 /TYPE PACKED TEXT CLA / JMS TYPPAK (EFFECTIVE) TAD I TYPPAK / AREA DCA TYPPAK-1 / (NEXT INSTRUCTION) ISZ TYPPAK TAD I TYPPAK-1 /GET FIRST CHAR IN WORD JMS KTPA TAD I TYPPAK-1 /GET SECOND CHAR IN WORD RTL RTL /LEFT-JUSTIFY RTL JMS KTPA ISZ TYPPAK-1 /INCREMENT POINTER JMP TYPPAK+5 245 /PER CENT 215-245 /CR - PER CENT 243-245 /POUND - PER CENT 212-243 /LF - POUND -243 / -POUND 7700 KTPA, 00 /SUBR, PRINT 6-BIT ASCII LEFT AND KTPA-1 /CLEAR RIGHT 6 BITS SNA JMP I TYPPAK /RETURN IF 00 CHAR (NO AT SIGN) CLL IAC /AC BIT 11 WILL GO TO CHANNEL 8 SMA /LINK WILL GO TO CH 7 (= COMPLEMENT OF STL / CH 6) RTR /AC 0-5 GO TO CHS 6-1 RTR RTR /AC HOLDS 8-BIT ASCII TAD KTPA-2 SNA TAD KTPA-3 /CHANGE POUND SIGN TO LINE FEED TAD KTPA-4 SNA TAD KTPA-5 /CHANGE PER CENT TO CARRIAGE RETURN TAD KTPA-6 JMS KTWRTE /WRITE CHARACTER JMP I KTPA /END, TTY PKG ****************************** $