ASMB,R,L,C,N HED GLASS TELETYPE DRIVER IFZ ## NAM DVT05,0 12966-16003 1944 791105 (MODEM) XIF ## IFN HARDWIRED VERSION NAM DVT05,0 12966-16002 1944 791105 (HARDWIRED) XIF * ENT IT05,CT05 EXT $LIST,.SBT,.LBT,$OPSY IFZ ## EXT $UPIO XIF ## * ****************************************** * * * NOTE: * * MODEM VERSION FEATURES ARE ENABLED * * USING THE "Z" ASSEMBLY OPTION. * * SUCH ITEMS ARE FLAGGED BY ##. * * THE HARDWIRED VERSION IS A SUBSET OF * * THE MODEM VERSION, AND IS ASSEMBLED * * USING THE "N" ASSEMBLY OPTION. * ****************************************** * SOURCE: HP RTE DVT05 12966-18006 (HARDWIRED) * RELOC.: HP RTE DVT05 12966-16002 (HARDWIRED) * MINI-CARTRIDGE: 12966-13301 (HARDWIRED) * * ##SOURCE: HP RTE DVT05 12966-18007 (MODEM) * ##RELOC.: HP RTE DVT05 12966-16003 (MODEM) * ##MINI-CARTRIDGE: 12966-13302 (MODEM) * MANUAL: HP RTE DVT05 12966-94010 (BOTH VERSIONS) * ##SUPPLEMENT: 12966-94015 (MODEM) * PRODUCT: 12966A-A04 OR A05 (HARDWIRED) * ## OR 12966A-A08 (MODEM) * * PRMR: B.B.,ARS * * ***************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ***************************************************************** SKP *2.1 INPUT/OUTPUT INTERFACE * * DVT05 WILL COMMUNICATE * VIA THE 12966A BUFFERED ASYNCHRONOUS DATA COMMUNICATION * INTERFACE CARD OVER A HARDWIRED LINE * OR A MODEM. ## * *2.2 MAJOR FUNCTIONS * * DVT05 PROVIDES THE FOLLOWING MAJOR FUNCTIONS: * 1. I/O CONTROL OF A CRT. * 2. READ OR WRITE REQUEST TO KEYBOARD AND DISPLAY. * 3. CONSOLE OR TERMINAL USE. *2.2.1 CRT CONTROL REQUEST * *ICNWD * 01-SET OPERATIONAL MODE, TIMEOUT HANDLING, AND * LINE TERMINATION MODE. * * BIT(S) FUNCTION * 15 1 = DO NOT DOWN DEVICE ON TIMEOUT * 0 = LET SYSTEM PROCESS TIMEOUT * 14 1 = ISSUE A PROMPT AT THE BEGINNING * OF EACH READ OPERATION. * 0 = PERFORM A NORMAL READ. * 13-9 DELAY IN STALL CHARACTERS (0 TO 31). * 8-4 DELAY IN STALL CHARACTERS (0 TO 31). * 3-0 NOT USED. * * 11-SPACE "IPRM" LINES (IPRM=1 TO 255) * 20-ENABLE TERMINAL. ALLOWS TERMINAL TO SCHEDULE PROGRAM WHEN KEY IS * STRUCK. * 21-DISABLE TERMINAL. INHIBIT SCHEDULING OF TERMINAL'S PROGRAM. * 22-SET NEW TIME OUT (IN OPTIONAL PARAMETER) * 23-CLEAR THE OUTPUT QUEUE (BUFFER FLUSH). * ALL BUFFERED REQUESTS IN THE QUEUE WILL * BE IGNORED UNTIL EITHER A READ REQUEST * OR A CONTROL 24 REQUEST IS RECEIVED. * 24-RESTORE OUTPUT PROCESSING. REQUIRED ONLY IF SOME OF BUFFER IS * TO BE SAVED. * 30-SET COMMUNICATION LINE PARAMETERS. * BITS FUNCTION * 15-9 NOT USED. * 8 1=MODEM ## * 0=HARDWIRED * 7-6 NOT USED. * 5 1=PARITY ON (GENERATES 7 BIT + PARITY CHAR. SIZE) * 0=PARITY OFF (GENERATES 8 BIT CHAR. SIZE) * 4 1=PARITY EVEN * 0=PARITY ODD * 3210 BAUD RATE * 0000 ==> EXTERNAL * 0001 ==> 50 * 0010 ==> 75 * 0011 ==> 110 * 0100 ==> 134.5 * 0101 ==> 150 * 0110 ==> 300 * 0111 ==> 600 * 1000 ==> 900 * 1001 ==> 1200 * 1010 ==> 1800 * 1011 ==> 2400 * 1100 ==> 3600 * 1101 ==> 4800 * 1110 ==> 7200 * 1111 ==> 9600 * * -ANY CONTROL REQUEST, VALID OR INVALID, WILL RESULT IN ENABLING * INTERRUPT ON A TERMINAL IF THE TERMINAL HAS BEEN ENABLED. SKP *2.2.2 COMMUNICATION LINE CONTROL * *ICNWD * 0-CLEAR OPERATION. * 31-LINE OPEN/CLOSE (MODEM OPERATION ONLY). ## * OPTIONAL PARAMETER NON-ZERO => LINE OPEN * OPTIONAL PARAMETER = 0 => LINE CLOSE. * SETS MODEM CONTROL LINES FOR COMMUNICATION * OVER A MODEM LINK, OR CAUSES THE TELEPHONE TO * DISCONNECT. * 32-AUTO ANSWER (MODEM OPERATION ONLY). ## * ALLOWS THE COMPUTER TO ANSWER INCOMING * TELEPHONE CALLS, IF THE MODEM IS SO EQUIPPED. * * *2.2.3 DATA OUT TO DISPLAY * * -FUNCTION BIT DEFINITIONS * BIT 6 = 1 BINARY OUTPUT MODE * BIT 10 = 1 HONEST OUTPUT MODE * IN THIS DRIVER, HONEST * OR BINARY MODES ARE * IDENTICAL. * * -ASCII OUTPUT IS A STRING OF CHARACTERS, THE NUMBER OF WHICH IS * DESIGNATED BY THE BUFFER LENGTH. THE STRING IS TERMINATED BY A * CARRIAGE RETURN AND LINE FEED (BOTH SUPPLIED BY DRIVER). * -IF AN UNDERSCORE (ASCII 137) IS THE LAST CHARACTER IN THE NEW * BUFFER, THE CARRIAGE RETURN, LINE FEED AND UNDERSCORE CODES ARE * NOT OUTPUT TO THE CRT. * -THE CURSOR WILL REMAIN IN COLUMN 80 IF CURSOR END-OF-LINE WRAP * AROUND STRAP IS NOT IN. OTHERWISE AN AUTOMATIC CR LF ARE GENERATED. * -HONEST MODE WRITE THE CR AND LF ARE NOT OUTPUT AUTOMATICALLY. * ANYTHING IN THE BUFFER IN HONEST MODE IS SENT TO THE TERMINAL. SKP *2.2.4 DATA INPUT FROM KEYBOARD CHARACTER MODE * * -FUNCTION BIT DEFINITIONS * BIT 6 = 0 ASCII INPUT MODE * BIT 6 = 1 BINARY INPUT MODE * BIT 8 = 1 ECHO INPUT TO THE TERMINAL * BIT 8 = 0 NOTHING ECHOS TO THE TERMINAL. * BIT 10 = 1 HONEST INPUT MODE * * IN CHARACTER MODE THE TERMINAL TRANSMITS A CHARACTER AT A TIME AS * THE KEY IS DEPRESSED. THE RECORD TERMINATION IS A CR. THE * DRIVER ECHOS A , IF ECHO IS ENABLED, OTHERWISE NO * TERMINATION CHARACTER IS ECHOED. * A RECORD TERMINATOR MUST BE ENTERED TO COMPLETE REQUEST, EVEN IF THE * USERS BUFFER IS FULL. TRANSMISSION LOG IS RETURNED IN B REG. * THERE ARE THREE TYPES OF CHARACTER MODE PROCESSING: HONEST, * ASCII NON-HONEST, AND BINARY. * A. HONEST ASCII, AND/OR BINARY * ALL CHARACTERS ARE SENT TO USERS BUFFER. IF AN ODD NUMBER OF * BYTES IS REQUESTED, THE LAST BYTE IN THE WORD IS STUFFED WITH * A SPACE (40B) IF ASCII, OR A NULL IF BINARY. THIS MAY RESULT IN * WRITING ONE BYTE PAST THE END OF THE REQUESTED BUFFER. * B. NON-HONEST ASCII * THE DRIVER WILL PROCESS THE BELOW SPECIAL CHARACTERS: * *DEL (RUBOUT) ASCII 177 * ENTERING DEL WILL DELETE THE CURRENT RECORD AND CAUSE (\, * CRLF)TO BE OUTPUT. THIS IS USED TO DELETE THE CURRENT LINE * AND START A NEW LINE. * *BACKSPACE ASCII 10 * ENTERING BACKSPACE WILL DELETE THE LAST CHARACTER. THE * TERMINAL WILL LOCALLY MOVE THE CURSOR BACK ONE POSITION. * *LINEFEED ASCII 12 * THIS WILL NOT BE SENT TO USER'S BUFFER. * *CNTROL D ASCII 4 * ENTERING CONTROL D WILL CAUSE BIT 5 TO BE SET IN TERMINAL * STATUS WORD AND TRANSMISSION TERMINATED WITH B REG. = 0. THIS * BIT WILL BE CLEARED UPON NEXT ENTRY. * *CARRIAGE RETURN ASCII 15 * ENTERING A TERMINATES THE LINE, AND CAUSES A * TO BE ECHOED TO THE TERMINAL IF THE ECHO BIT IS SET. SKP *2.2.5 CRT STATUS REQUEST (RETURNED IN EQT5) * * BIT * 1 -TERMINAL ENABLED. IF THE STATUS WORD IS FOR A TERMINAL (NOT A * SYSTEM CONSOLE) TYPING ANY KEY WILL SCHEDULE THE TERMINAL'S * PROGRAM (IF IT HAS ONE). * 2 -TIME OUT. THE LAST OPERATION RESULTED IN A TIME OUT. THE * DEVICE IS SET DOWN IF EQT18 BIT 15 IS ZERO. * 3 -PARITY ERROR. A PARITY ERROR WAS ENCOUNTERED ON THE LAST READ, * SO THE OPERATION WAS RETRIED. (A PARITY ERROR IS TREATED LIKE * A RUBOUT.) * 4 -MODEM LINE ERROR. ## INDICATES THAT THE LINE IS * CURRENTLY DOWN. * 5 -CONTROL D ENTERED. THE USER HAS HIT THIS KEY. * 6 -BREAK KEY HIT. THE DRIVER SCHEDULES THE TERMINAL * PROGRAM OR SETS OPERATOR ATTENTION, AND COMPLETES * IF THE BREAK KEY IS STRUCK * DURING AN OUTPUT OPERATION. A BREAK DURING INPUT IS * TREATED AS A RUBOUT, AND WILL DELETE THE CURRENT INPUT * LINE IN ALL MODES. IF ECHO IS ENABLED, A SLASH,(/), * IS OUTPUT TO THE TERMINAL. * AN UNEXPECTED BREAK CAUSES ANY ENABLED TERMINAL PROGRAM * TO BE SCHEDULED. * 7 -BUFFER FLUSH IN PROGRESS * THIS IS SET BY A CONTROL 23 CALL, AND STAYS SET UNTIL * A) A READ OPERATION IS ENCOUNTERED, * B) A CONTROL 24 (BUFFER UNFLUSH) CALL IS ENCOUNTERED, OR * C) THE QUEUE IS EMPTY. * * *2.2.6 CONSOLE OR TERMINAL USAGE. * * IF AT GENERATAION THE CRT IS IDENTIFIED AS A TERMINAL (VIA THE * INTERRUPT TABLE) THEN STRIKING A KEY WILL SCHEDULE THE PROGRAM * ASSOCIATED WITH THAT TERMINAL IF THE TERMINAL HAS BEEN ENABLED * VIA A CONTROL REQUEST. * STRIKING THE BREAK KEY DURING OUTPUT WILL DO THE SAME, * BUT WILL ALSO SET THE BREAK BIT IN EQT5. * A BREAK DURING INPUT WILL BE TREATED AS A RUBOUT. * IF THE CRT IS A CONSOLE THEN STRIKING A KEY WILL GET THE SYSTEM'S * ATTENTION AND A "*" PROMPT WILL BE WRITTEN. *2.2.7 GENERATION INTO THE SYSTEM. * * THE EQT SETUP MUST BE AS FOLLOWS: * SC,DVT05,X=6[,B][,T=XXXXX] * WHERE SC IS THE SELECT CODE, XXXXX IS THE * DESIRED TIME OUT VALUE [OPTIONAL], AND * B SPECIFIES BUFFERING [OPTIONAL]. HED ****************************************** * SUBROUTINE IS ALWAYS ENTERED TO * * INITIALIZE A SYSTEM OR USER REQUEST TO * * ANY CRT SUBSYSTEM. * ****************************************** IT05 NOP STA SCH SAVE SELECT CODE CLB STB INITF SET IT05 CT05 POINTER IFZ ## STB EQT19,I ## CLEAR $UPIO FLAG XIF ## LDA EQT5,I GET EQT5 AND NB620 CLEAR EOT,BRK,TO BITS STA EQT5,I PUT IT BACK JSB SETIO CONFIGURE IO SFS01 SFS CARD IF FLAG SET THEN POWER FAIL JMP IT051 FLAG NOT SET JSB XMIT4 LDA CW6 CLR ALL CARD INTERRUPTS IT053 JSB OUT2 (0-377) CPA LWRD6 IS THIS ALL? JMP IT051 YES! FINISHED INA JMP IT053 DO IT AGAIN IT051 EQU * JSB CDINT INITIALIZE CARD LDA REQTP GET REQUEST TYPE CPA B3 JMP IT05C THIS IS A CONTROL REQUEST. IFZ ## JSB LINCK ## CHECK THE MODEM LINES LDA REQTP ## GET BACK THE REQUEST XIF ## SLA JMP IT05R THIS IS A READ REQUEST JMP IT05W THIS IS A WRITE REQUEST SKP **************************************************** * TERMINAL STATUS * * BIT STATUS * * 1 TERMINAL ENABLED * * 2 TIME OUT * * 3 PARITY ERROR * * 4 LINE ERROR (MODEM) ## * * 5 "CONTROL D" ENTERED * * 6 BREAK FLAG SET * * 7 BUFFER FLUSH ENABLED * **************************************************** * **************************************************** * CRT CONTROL * * EXEC CODE CRT CONTROL REQUEST * * 01 SET DATA PARAMETERS * * OPTIONAL PARAMETER: * * BIT(S) FUNCTION * * 15 1 = DO NOT SET DOWN ON TIMEOUT * * 0 = LET SYSTEM PROCESS TIMEOUT * * 14 SEND A TO THE TERMINAL * * AT THE START OF A READ * * (LINE OR PROMPT MODE). * * TO TRIGGER THE TERMINAL. * * 13-9 DELAY IN STALL CHARACTERS * * (NUMBER OF NULLS TO OUTPUT * * AFTER A CARRIAGE RETURN.) * * 8-4 DELAY IN STALL CHARACTERS * * (NUMBER OF NULLS TO OUTPUT * * AFTER A LINE FEED.) * * 3-0 NOT USED. * * 11 SPACE LINES * * 20 ENABLE TERMINAL * * 21 DISABLE TERMINAL * * 22 SET TIME OUT * * 23 SET BUFFER FLUSH * * 24 REMOVE BUFFER FLUSH * * 30 SET UP LINE PARAMETERS * * BIT(S) FUNCTION * * 15-9 NOT USED * * 8 1=MODEM ## * * 0=HARD WIRED * * 7-6 NOT USED * * 5 1=PARITY ON (7 BIT CHAR. SIZE) * * 0=PARITY OFF (8 BIT CHAR. SIZE)* * 4 1=PARITY EVEN * * 0=PARITY ODD * * 3210 BAUD RATE * * 0000 EXTERNAL * * 0001 50 * * 0010 75 * * 0011 110 * * 0100 134.5 * * 0101 150 * * 0110 300 * * 0111 600 * * 1000 900 * * 1001 1200 * * 1010 1800 * * 1011 2400 * * 1100 3600 * * 1101 4800 * * 1110 7200 * * 1111 9600 * * 31 OPEN/CLOSE LINE (MODEM) ## * * OPTIONAL PARAMETER INDICATES * * OPEN IF NON-ZERO, CLOSE IF = 0.* * 32 AUTO ANSWER (MODEM) ## * **************************************************** HED **************************************************** * DOES CONTROL REQUEST PROCESSING FOR THE * * KEYBOARD/DISPLAY. * **************************************************** IT05C LDA FUNCT GET CONTROL WORD LDB EQT7,I GET OPTIONAL PARAMETER CPA B1 CHECK OPTIONAL PARAMETER JMP CN01 SET UP FUNCTIONAL MODE CPA B11 JMP CN11 GO SPACE LINES CPA B20 JMP CN20 GO ENABLE TERMINAL CPA B21 JMP CN21 GO DISABLE TERMINAL CPA B22 JMP CN22 GO SET TIME OUT CPA B23 JMP CN23 GO SET BUFFER FLUSH CPA B24 JMP CN24 GO REMOVE BUFFER FLUSH CPA B30 JMP CN30 GO SET LINE PARAMETERS IFZ ## CPA B31 MODEM LINE OPEN ## JMP CN31 RESERVED FOR MODEM ## CPA B32 MODEM LINE OPEN - AUTO ANSWER ## JMP CN32 RESERVED FOR MODEM ## XIF ## SZA CHECK FOR CLEAR REQUEST JMP REJ2 ILLEGAL CONTROL REQUEST * CN00 EQU * PROCESS CLEAR REQUEST JSB CLRCD CLEAN OFF CARD LDA EQT20,I GET LAST COMMAND RAR SLA,RSS IF WRITE OR CONTROL, SEND NULL JMP REJ2A KEEP INTERRUPTS ON IF MODEM CLB SEND A NULL JSB OUT1 JMP EOOP1 TO ALLOW CHAR. OUT OF UART * * SET FUNCTIONAL MODE * CN01 EQU * STB EQT18,I SAVE OPTIONAL PARAMETER JMP REJ2 EXIT * **SPACE LINES***** **MAX NO. IS 255** * CN11 EQU * IFZ ## JSB LINCK ## THIS CONT. REQ. NEEDS LINCK XIF ## LDA EQT7,I GET OPTIONAL PARAMETER SSA CHECK FOR NEG. VALUE CMA,INA INVERT IF NEGATIVE AND B377 LIMIT TO < 256 CMA,INA,SZA,RSS IF ZERO USE 1 CCA SET TO -1 STA EQT7,I PUT IT BACK CN11L JSB EORP OUTPUT (CR,LF) ISZ EQT7,I JMP CN11L CLA STA EQT19,I SET A REG. EXIT JMP EOOP4 * **GO ENABLE TERMINAL(BIT 1 OF EQT5)** * CN20 LDA EQT17,I IF -1 THEN NO PROG. TO SCHED. INA,SZA OR "0" INTO EQT5 IF NO PROG. LDA B2 SET BIT 1 (TERM. ENABLED) IOR5 IOR EQT5,I CONSTRUCT NEW STATUS WORD ST5 STA EQT5,I RESTORE EQT5 JMP REJ2 GO EXIT A=2 SKP * **GO DISABLE TERMINAL** * CN21 LDA B.3 AND5 AND EQT5,I REMOVE BIT 1 JMP ST5 * **GO SET NEW TIME OUT** * CN22 EQU * T.O. VALUE IN B SSB,RSS ONLY ZERO AND POSITIVE LEGAL CMB,INB NEGATE IT STB EQT14,I STORE NEW TIME OUT. JMP REJ2 * **GO SET BUFFER FLUSH (BIT 7 OF EQT5)** * CN23 LDA B200 SET BIT7 IN EQT5 JMP IOR5 * **GO REMOVE BUFFER FLUSH** * CN24 LDA NBIT7 REMOVE BIT 7 JMP AND5 * **GO SET LINE PARAMETERS** * CN30 BLF,BLS SHIFT LEFT 5 BITS LDA EQT21,I GET OLD INFO. AND BN67 CLEAR PART OF IT IOR B PUT IN THE NEW STA EQT21,I SAVE IT JMP REJ2 EXIT * **PERFORM OPEN LINE FUNCTION (MODEM) ## ** IFZ ## * CN31 EQU * ## SZB CHECK FOR OPEN OR CLOSE ## CN31C LDB B114K LINE OPEN (114000) CA & CD ## LDA EQT21,I AND OPEN FLAG (SIGN BIT) ## AND BN14K CLEAR OUT BITS 11,12,15 ## IOR B MAYBE PUT THEM BACK ## STA EQT21,I ## SZB ## LDB B32 SET LINE CONTROL REF. IN ## STB EQT10,I EQT10 ## JSB SETIO FIX UP CW4 ## JSB CDSET SET UP CARD ## CN31A LDB DM200 2 SECOND TIMEOUT ## JSB EXIT0 EXIT WITH SPECIFIED TIMEOUT## * CN31B JSB CHRIN GET MODEM LINE STATUS ## LDB EQT7,I CHECK FOR LINE CLOSE ## LDA BSTAT GET BOARD STATUS ## SZB,RSS IF LINE CLOSE MASK CC FOR 202T MODEM ## AND NBIT3 ## AND B32 IF OPEN LOOK FOR CB,CC,CF ## CPA EQT10,I IF CLOSE, SHOULD BE ALL ZEROS ## CLA,RSS EXIT ## JMP CN31A LINE STATUS INAPPROPRIATE - TRY AGAIN ## JMP CT05,I LINE EXIT ## * **PERFORM AUTO ANSWER FUNCTION (MODEM) ## ** * CN32 EQU * AUTO ANSWER ## LDA CW2 SET CE REF. = 0 ## JSB OUT2 ## LDA ENCE ENABLE CE INTERRUPT (RING) ## JSB OUT2 ## STA EQT7,I NON-ZERO FOR LINE OPEN ## CLB CLEAR TIME OUT ## JSB EXIT0 WAIT FOR RING INTERRUPT ## * JMP CN31C GO DO LINE OPEN ## XIF ## HED ********************************************** * EQT6 FOR READ\WRITE * * EQT6 FOR READ\WRITE OPERATIONS IS: * * BIT MEANING * * 6 0\1 IS ASCII\BINARY * * 8 0\1 IS OFF\ON ECHO * * 10 0\1 OFF\ON HONEST MODE * ********************************************** IT05W CLB,RSS SETUP EQT9(RUNNING CHAR. ADD.) AND I05W1 NOP EQT 10 (LAST CHAR. ADD.) LDA EQT7,I GET BUFFER STARTING ADDRESS RAL,CLE MULTIPLY S.A. BY TWO STA EQT9,I STORE AT EQT9 LDA EQT8,I GET BUFFER LENGTH CMA,SSA,INA,RSS COMPLEMENT,ARE THEY CHAR.? JMP ITW1 YES! CMA,INA MAKE POS AGAIN RAL MULTIPLY WORDS X 2 AND ITW1 ADA EQT9,I STA EQT10,I STORE LAST CHAR. ADD. AT EQT10,I CMA,INA MAKE LAST CHAR. ADD. NEG. ADA EQT9,I - NO. OF CHAR. ARE NOW IN A REG. SZB JMP I05W1,I SZA,RSS IS IT 0 ? JMP ITW31 YES! IT IS ZERO JSB TRAN1 GO TO OUTPUT SUBROUTINE ITW30 JSB EXIT1 WAIT B.E. INTERRUPT LDA BSTAT CHECK FOR BUFFER EMPTY ALF,ALF SSA,RSS JMP ITW30 NOT BUFFER EMPTY - WAIT ITW31 LDA HONST IS THIS HONEST MODE? SZA,RSS NO - SKIP CRLF 1909 JSB EORP THIS IS ASCII JMP EOOP2 DONE WITH OUTPUT. HED *************************************************** * DOES KEYBOARD READ. * * THE DRIVER ASSUMES A CHARACTER TRANSFER IF * * HONEST MODE IS SET. * *************************************************** IT05R CLB,INB JSB I05W1 GO SETUP EQT9 AND EQT10 LDA FUNCT CHECK IF ECHO SET JSB ECHO SET/CLR = 20/0 ECHO LDB HONST SEE IF HONEST MODE SZB JMP IT05H SET UP FOR HONEST MODE LDB BN1 SET RUBOUT INTERRUPT & XMIT JSB CDSET SETS UP BOARD TO ACCEPT SPEC. CHAR. LDA C6404 60404 CNTL-D INTERRUPT JSB OUT2 LDA C6410 60410 BACKSPACE INTERRUPT JSB OUT2 LDA C6415 60415 CR INTERRUPT JSB OUT2 IT05H LDA EQT18,I CHECK EQT18 RAL FOR BIT 14 SET SSA,RSS IF SO, SEND JMP IT05I NOT NEEDED LDA B21 JSB OUT2 SEND IT LDA N64 JSB TIMER WAIT AT LEAST 150 USEC. LDB B4 FOR CHAR. TO CLEAR UART ADB HONST RSS RSS IT05I LDB HONST GET HONEST FLAG JSB CDSET SET CARD FOR RECEIVE (BIT 0=1 FOR HONEST) JMP C05R8 * P.ERR NOP PROCESS PARITY ERRORS LDA EQT5,I IOR B10 SET PARITY ERROR BIT 3 STA EQT5,I JMP P.ERR,I RETURN * * TIMER NOP 2.5 USEC TIMER (XE) PER LOOP SSA,INA,RSS JMP TIMER,I JMP *-2 * HED ****************************************************************** * SUBROUTINE INITIALIZES THE COMPLETION SECTION * * FOR ALL COMPLETION INTERRUPTS. * ****************************************************************** CT05 NOP STA SCH SAVE SC LDB RSS SET CONT. FLAG STB INITF TO RSS JSB SETIO CONFIGURE IO IFZ ## LDA EQT19,I ## CHECK FOR $UPIO ENTRY SSA ## SET NEGATIVE BY LINCK - TRY AGAIN JMP $UPIO ## XIF ## JSB CDSTT GET CARD STATUS AND B40 CHECK FOR BUFFER OVERFLOW SZA,RSS HAS IT OVER FLOWED? JMP CT5A2 NO IFZ ## SWH01 NOP ## NOP/RSS HARD/MODEM XIF ## JMP EOOP9 YES,ERROR EXIT (B=3,XMISSON ERROR) CT5A2 LDA BSTAT GET BOARD STATUS BACK AND B100 MASK FOR BREAK SZA,RSS JMP CT5A0 IOR EQT5,I PUT IT INTO EQT5 STA EQT5,I CT5A0 LDA CW577 CLEAR ALL INTERRUPTS JSB OUT2 LDB EQT1,I GET QUE WORD SZB IS A REQUEST IN PROCESS? JMP CT5A1 YES! JSB SCHED NO REQUEST IN PROCESS.FIND OUT JMP EXIT5 WHAT HAPPENED AND EXIT CT5A1 EQU * LDA EQT4,I AND B4000 CHECK FOR TIME OUT ENTRY SZA IS THIS TIME OUT (BIT 11)? JMP TIMOT YES! LDB EQT11,I GET INTERRUPT ADDRESS JMP B,I GOTO IT HED CONSTANTS AND VARIABLES ***************************************************** * "B.X" IS NEG. BINARY NO., "D.X" IS NEG. DECIMAL NO* * "BN" IS SOME BINARY NO. * * SEE BELOW. * ***************************************************** * NB620 OCT 177602 LWRD6 OCT 60377 LAST SPECIAL CHARACTER CODE B11 OCT 11 CW6 OCT 60000 B20 OCT 20 B21 OCT 21 B22 OCT 22 B23 OCT 23 B24 OCT 24 B30 OCT 30 IFZ ## B31 OCT 31 ## B32 OCT 32 ## DM200 DEC -200 ## ENCE OCT 10004 ## B114K OCT 114000 ## BN14K OCT 63777 ## NBIT3 OCT 177767 ## CW2 OCT 20000 ## XIF ## BN67 OCT 54037 RETAIN BITS 14,12,11,4-0 B1 OCT 1 B2 OCT 2 B.3 OCT 177775 B100 OCT 100 B200 OCT 200 NBIT7 OCT 177577 C6404 OCT 60404 CONTROL-D INTERRUPT SET C6410 OCT 60410 BACKSPACE INTERRUPT SET C6415 OCT 60415 CR INTERRUPT SET B377 OCT 377 BN1 OCT 57712 B40 OCT 40 B10 OCT 10 BN6 OCT 120004 CW604 OCT 60004 CW610 OCT 60010 CW615 OCT 60015 CW677 OCT 60177 N64 DEC -64 B3 OCT 3 B4000 OCT 4000 FUNCT NOP CONTROL FUNCTION (EQT6 BITS 6-10) HONST NOP HONEST\ASCII (1\0) REQTP NOP REQUEST TYPE (1-3) BSTAT NOP CARD STATUS CDATA NOP COMPLETE DATA WORD ON CARD HED *************************************************** * SUBROUTINE INITIALIZES 12966 * * IO CARD. * * BELOW ARE THE INITIAL CONDITIONS FOR CONTROL: * * WORD 0 DO NOT SEND * * WORD 1 DO NOT SEND * * WORD 2 CE=1 STATUS REF. AND MASTER RESET * * WORD 3 CHARACTER FRAME CONTROL * * CHAR. SIZE=8 BITS * * NO PARITY * * ECHO PER EQT6 BIT 8 * * STOP BIT PER BAUD RATE * * * * WORD 4 INTERFACE CONTROL * * BAUD RATE PER SETUP CALL * * DMA CONTROL OFF * * SBA/SCA ON * * CD (DATA TERM. READY) OFF * * CA (REQUEST TO SEND) OFF * * TRANSMIT MODE ON * * * * WORD 5 CLEAR CARD INTERRUPTS * * * * WORD 6 SPECIAL CHARACTER * * ALL USED SPECIAL CHARACTERS * * ARE CLEARED. * *************************************************** CDINT NOP LDA BN6 JSB OUT2 SEND WORD 120004 LDA FUNCT GET ECHO BIT JSB ECHO (BIT 4) JSB XMIT4 PUT INTO XMIT LDA CW577 SEND WORD 50077 JSB OUT2 LDA CW604 SET A REG. = 60004 JSB OUT2 CLEAR CNTL-D INTERRUPT LDA CW610 CLEAR BACKSPACE INTERRUPT JSB OUT2 LDA CW615 CLEAR CR INTERRUPT 1909 JSB OUT2 1909 LDA CW677 CLEAR RUBOUT INTERRUPT JSB OUT2 JMP CDINT,I RETURN HED ****************************************************** * SUBROUTINE SETS UP THE IO CARD PER B REG. * * 1/0 IS CHARACTER/BLOCK * * 1/0 IS TRANSMIT/RECEIVE * * 1/0 IS CLEAR/NOT CLEAR INTERUPT FLAGS * * 1/0 SPECIAL CHARACTER IS/IS NOT TO BE * * ADDED OR DELETED.SPECIAL CHARACTER IS IN POSITION * * . 1/0 IS ADD/DELETE * * SPECIAL CHARACTER. * ****************************************************** CDSET NOP LDA BIT12 SET WORD1 IN A REG. SLB,BRS IOR B40 "OR" CHARACTER MODE BIT JSB OUT2 LDA CW4 SET WORD 4 IN A SLB,BRS IOR B400 SET XMIT JSB OUT2 LDA CW577 SET WORD 5 IN A REG. SLB,BRS JSB OUT2 MAY NOT GET SENT LDA CW6 SET WORD 6 IN A REG. SLB,RSS JMP CDSET,I RETURN BRS,BRS BRS IOR B "OR" SPECIAL CHARACTER JSB OUT2 JMP CDSET,I * CDSTT EQU * GET CARD STATUS AND PUT IT IN BSTAT NOP ENTRY POINT CLC01 CLC CARD LIA01 LIA CARD STA BSTAT JMP CDSTT,I RETURN WITH STATUS IN A REG. HED ********************************************** * PROCESSES DATA ON KEYBOARD * * READ REQUESTS. "CCNT" COUNTS THE NUMBER * * OF CHARACTERS WE HAVE PROCESSED AND IS USED* * TO LIMIT THE TIME WE ARE IN THE DRIVER. * * FOR ASCII READS THE EOR IS DETECTED BY * * LOOKING FOR THE SPECIAL CHAR. BIT SET ON * * THE 12966 CARD. * ********************************************** C05R8 JSB EXIT1 WAIT FOR INTERRUPT LDA BSTAT CHECK FOR PARITY ERROR AND B40 BIT 5 STA B SAVE IT SZA JSB P.ERR SET UP EQT5 TO INDICATE P.E. * * NOTES ON PARITY ERROR HANDLING: * CURRENTLY THE FACT THAT A PARITY ERROR OCCURRED IS NOTED * IN EQT5, AND THE OPERATION IS RESTARTED. IT IS POSSIBLE * THAT SOME USERS MAY PREFER THAT THE OPERATION COMPLETE * OR DOWN THE DEVICE. THESE ARE A MATTER OF PERSONAL PREFERENCE. * LDA BSTAT CHECK FOR BREAK AND B100 IOR B OR PARITY ERROR SZA JMP RUBOT TREAT IT LIKE A RUBOUT CHPRC LDA N64 SET CHARACTER PROCESS. COUNT TO -64 STA CCNT CHPCC JSB CHRIN GET CHARACTER LDA CDATA CONTROL IF VALID DATA SSA,RSS SKIP IF GOOD JMP C05R8 EXIT AND WAIT NEXT INTERRUPT LDB HONST SZB IS THIS HONEST? JMP CHPR9 YES,THIS IS HONEST LDA DATA THIS IS ASCII LDB CDATA GET DATA WORD RBL ISOLATE SPEC. CHAR. BIT SSB IS IT SPECIAL? JMP SPCHK YES - SEE WHAT IT IS CPA LF IS IT A LINE FEED? JMP CHPCC YES - IGNORE IT JMP CHPR9 PROCESS A NORMAL CHARACTER * SPCHK EQU * PROCESS SPECIAL CHARS. CPA B177 IS IT A RUBOUT? JMP RUBOT YES! GO PROCESS RUBOUT CPA B4 IS IT A CONTROL "D" (SET EOT) JMP CNTLD YES! GO SET EOT CPA B10 CHECK FOR BACKSPACE JMP BS1 IF IT FALLS THROUGH, IT WAS A LDB EQT9,I PROCESS ASCII END OF RECORD CHPR5 LDA FUNCT SEE IF ASCII OR NOT SLA BIT 0 = 0 =>ASCII CLA,RSS BIT 0 = 1 =>BINARY LDA B40 ASCII FILL CHARACTER (SPACE) SLB IF NEXT BYTE ODD, JSB .SBT THEN STUFF IT JSB CLRCD GET EXCESS CHARS. OFF THE BOARD LDA HONST IF HONEST, NO ECHO SZA,RSS LDA FUNCT GET FUNCTION BITS IF NOT HONEST RAR,RAR PUT ECHO OR 0 IN BIT 0 SLA CHECK FOR ECHO JSB EORP SEND IF ECHO IS ENABLED. JMP EOOP2 THEN EXIT. SKP CHPR9 LDB EQT9,I GET CURRENT CHAR. ADD. CPB EQT10,I IS BUFFER FULL? JMP CHPR5 YES BUFFER FULL LDA DATA GET CHARACTER JSB .SBT STORE IT 1909 STB EQT9,I STORE INCREMENTED ADDRESS CPB EQT10,I IS BUFFER FULL? JMP CHPR5 YES IT IS CHPR6 EQU * LDA BSTAT CHECK FOR BUFFER EMPTY ALF,ALF SSA IS BUFFER EMPTY? JMP C05R8 ISZ CCNT INCREMENT BUFFER COUNT JMP CHPCC IF NOT ZERO GET ANOTHER CHAR. LDB CHPC2 SETUP INTERRUPT RETURN STB EQT11,I STF01 STF CARD SET FLAG FOR IMMEDIATE INTERRUPT JMP EXIT4 THIS IS ALL WE CAN PROCESS,EXIT * CHPC2 DEF CHPRC RETURN POINTER * BS1 LDA EQT7,I GET STARTING ADDRESS OF BUFFER RAL MULTIPLY BY 2 CPA EQT9,I ARE WE AT STARTING ADDRESS? JMP RUBOT YES! PROCESS AS RUBOUT CCB ADB EQT9,I DECREMENT CURRENT ADDRESS STB EQT9,I JMP CHPR6 GO GET NEXT CHARACTER HED **************************************************** * SUBROUTINE READS 1 CHARACTER FROM IO CARD* * AND PLACES IT IN A REG. * * BOARD STATUS IS ALSO READ * * DATA = ASCII INPUT CHARACTER * * BSTAT=BOARD STATUS * **************************************************** CHRIN NOP STC02 STC CARD,C PUT CARD IN DATA MODE LIA02 LIA CARD GET DATA WORD STA CDATA STORE COMPLETE DATA WORD AT CDATA JSB CDSTT GET CARD STATUS LDA CDATA GET BACK COMPLETE DATA WORD AND B377 ISOLATE DATA CHAR.(0-7) STA DATA STORE IT STC03 STC CARD,C THIS IS NECESSARY JMP CHRIN,I INTERRUPT * *********************************************** * SUBROUTINE GETS DATA OFF CARD UNTIL * * BUFFER EMPTY. * *********************************************** CLRCD NOP LDB B4 SET CARD TO RECEIVE AND CLR. INT. JSB CDSET CLRC1 JSB CHRIN GET CHARACTER LDA BSTAT CHECK FOR BUFFER EMPTY ALF,ALF CMA,SSA MAKE SIGN 0 IF EMPTY LDA CDATA COMES HERE IF NOT EMPTY SSA A POSITIVE IF BUFFER EMPTY JMP CLRC1 NEG. FOR VALID CHAR. - YES IT IS JMP CLRCD,I RETURN - BUFFER EMPTY OR INVAL.CHAR. * CNTLD LDA B40 SET BIT 5 (EOT) IOR EQT5,I IN TERMINAL STATUS STA EQT5,I CLA STA EQT19,I SET AREG. EXIT JMP EOOP4 GO SET B REG. TO 0 AND EXIT * ECHO NOP SET ECHO ON CARD PER A REG. RAL,RAL MOVE BIT 2 TO BIT 4 AND B20 MASK FOR ECHO BIT IOR CW3 A =20/0 IS ECHO ON\OFF JSB OUT2 JMP ECHO,I HED ********************************************************* * AND ARE ENTRIES FOR COMPLETION (P+1) * * EXITS. * ********************************************************* EOOP8 LDB CCNT THIS EXIT IS USED IF UNDERSCORE CPB N128 IS ONLY CHAR. 1909 RSS EOOP1 JSB EXIT1 EOOP2 CLA STA EQT19,I SET A REG. EXIT JMP EOOP3 * EOOP9 LDB B3 SET B=3 FOR XMISSION ERROR STB EQT19,I A REG. EXIT *********************************************************** * IS ENTRY FOR B=0 (TRANS. LOG =0) EXIT. * *********************************************************** EOOP4 CLA STA EQT8,I SET UP FOR B REG. =0 EXIT ********************************************************** * SETS IO CARD FOR NEXT INTERRUPT * * OR REQUEST. * * IT ALSO SETS THE TRANSMISSION LOG IN B REG. (+CHAR. OR * * + WORDS). IF EQT8 =0 (VIA EOOP4) THEN B=0. * ********************************************************** EOOP3 EQU * CLA,INA 1 CPA REQTP IF READ, DON'T BOTHER CHECKING JMP EOP3B LDA EQT5,I CHECK FOR BREAK AND B100 IS IT SET? SZA JSB SCHED IF SO, SCHEDULE A PROGRAM EOP3B JSB CDINT CLR SPECIAL INTERRUPTS IFZ ## JSB LINCK ## SEE IF OPERATION COMPLETED XIF ## JSB CLRCD GET ALL DATA OFF CARD JSB SETEM LDB EQT9,I GET 2X LAST CHAR. ADDRESS CMB,INB MAKE NEG. ADB EQT7,I SUBTRACT TWO TIMES STARTING ADD. ADB EQT7,I CMB,INB LDA EQT8,I IF WORDS THEN DIV. BY 2 SSA JMP EOP3A THESE ARE CHARACTERS INB INCREMENT SO EVEN FOR DIVIDE BRS DIVIDE TO CONVERT TO WORDS EOP3A SZA,RSS IF EQT8 IS 0 THEN CLEAR B REG. CLB LDA INITF SEE IF WE EVER LEFT SZA,RSS IF A NOT=0, WE'RE OK JMP IMCOM IMMED. COMPLETION LDA EQT19,I SET A REG. EXIT JMP CT05,I HED ********************************************************* * DOES ASCII WRITE EOR PROCESSING * ********************************************************* EORP NOP LDA EORP SAVE RETURN ADDRESS STA EQT16,I LDB CR OUTPUT A JSB OUT1 LDA EQT18,I GET STALL COUNT RRR 9 MOVE BITS 13-9 TO LOW BITS AND B37 MASK IT CMA,INA,SZA,RSS CHECK FOR ZERO JMP EORP2 NO STALLS REQUIRED STA EORP STORE COUNTER CLA GENERATE THE NULL EORP1 JSB OUT2 SEND IT ISZ EORP COUNT IT JMP EORP1 GO DO IT AGAIN EORP2 LDA LF OUTPUT A JSB OUT2 LSR 11 MOVE LF COUNT TO BITS 0-4 IN B CMB,INB,SZB,RSS CHECK FOR ZERO JMP EORP4 WE ARE DONE CLA MAKE A NULL EORP3 JSB OUT2 SEND IT INB,SZB LOOP UNTIL DONE JMP EORP3 EORP4 JSB EXIT1 WAIT B.E. INTERRUPT LDA BSTAT SEE IF BUFFER EMPTY ALF,ALF SSA,RSS JMP EORP4 NO - TRY AGAIN LDA EQT16,I JMP A,I HED **************************************************** * IS USED FOR CONTINUATION EXITS WITH THE * * TIMEOUT VALUE SET IN THE B REGISTER. ## * * IS USED FOR INITIATOR OPERATION WITH * * INITIATED EXITS (A=0), AND COMPLETION * * CONTINUATION EXITS (P+2). "INITF" INDICATES * * WHICH EXIT TO TAKE. * **************************************************** IFZ ## EXIT0 NOP ## LDA EXIT0 SAVE RETURN ADDRESS ## STA EQT11,I FOR INTERRUPT ## JMP EXIT3 ## XIF ## * EXIT1 NOP LDB EXIT1 GET CALLING PROGRAMS ADDRESS+1 STB EQT11,I STORE AT EQT11,I FOR INTERRUPT LDA REQTP GET REQUEST TYPE LDB EQT14,I GET NORMAL TIMEOUT ARS,SLA,RAL CHECK FOR WRITE OR CONTROL LDB TO30 APPROX. > 30 SECONDS EXIT3 STB EQT15,I NORMAL OR DEFAULT TIMEOUT XOR CW577 IF WRITE, WILL BE 50075 JSB OUT2 CLEAR ALL BUT BREAK INTERRUPTS EXIT5 EQU * STC04 STC CARD,C RE-INITIALIZE CARD FOR INTERRUPT EXIT4 CLA INITF NOP INITIATION\COMPL. FLAG NOP\RSS JMP IT05,I INITIATION RETURN ISZ CT05 RETURN JMP CT05,I COMPLETION RETURN HED ***************************************************** * "B.X" IS NEG. BINARY NO., "D.X" IS NEG. DECIMAL NO* * "BN" IS SOME BINARY NO. * * SEE BELOW. * ***************************************************** * B.6 OCT 177772 BIT12 OCT 10000 LF OCT 12 B37 OCT 37 B17 OCT 17 B137 OCT 137 B317 OCT 317 CR OCT 15 B177 OCT 177 B4 OCT 4 B134 OCT 134 B5 OCT 5 CW577 OCT 50077 B400 OCT 400 CW3A OCT 30002 CW3 OCT 30003 THIS ONE GETS CHANGED FOR PARITY CW4 OCT 40440 CONTROL WORD 4 (DYNAMICALLY ALTERED) CW440 OCT 40040 CONTROL WORD 4 (BASE SITUATION) STF0 STF 0 N128 DEC -128 B1100 OCT 1100 B14 OCT 14 TO30 DEC -3000 B600 OCT 600 B500 OCT 500 EQT16 NOP EQT17 NOP EQT18 NOP EQT19 NOP EQT20 NOP EQT21 NOP DATA NOP ASCII DATA WORD IFZ ## CW132 OCT 10032 ## BIT15 OCT 100000 ## HED * LINCK NOP ## CHECK MODEM STATUS LINES SWH02 NOP ## HARD/MODEM NOP/RSS JMP LINCK,I ## HARD WIRED - DON'T BOTHER * LDB EQT1 ## CHECK FOR SYSTEM CONSOLE CPB SYSTY ## IF SO, DON'T DOWN IT JMP LINCK,I ## JSB CHRIN ## GET LINE STATUS LDA BSTAT ## AND B32 ## CHECK FOR CLR TO SEND (CB), CARRIER (CF), CPA B32 ## AND DATA SET READY (CC) JMP LINCK,I ## GO DO IT * IOR CW2 ## STUFF STATUS INTO CONWD 2 JSB OUT2 ## SET STATUS REFERENCE LDA CW132 ## ENABLE LINE CHANGE INTERRUPT JSB OUT2 ## LDA EQT19,I ## SET $UPIO FLAG IOR BIT15 ## INTO THE SIGN BIT STA EQT19,I ## LDA B20 ## SET "BAD LINE# STATUS IOR EQT5,I ## STA EQT5,I ## INTO EQT5. LDA B3 ## TRANSMISSION ERROR LDB INITF ## SEE IF WE EVER LEFT SZB ## CLA,INA,RSS ## CONTINUATOR EXIT JMP IT05,I ## RETURN JMP CT05,I ## NOT READY RETURN XIF ## HED *************************************************** * FOR ALL WRITE AND CONTROL REQUESTS * * THE BUFFER FLUSH BIT IS EXAMINED. * * IS CALLED BY ALL WRITE AND CONTROL * * REQUESTS IF THE BUFFER FLUSH BIT IS SET. * ************************************************** NXQU NOP IF LAST REQUEST IN QUE THEN STOP FLUSH LDA $OPSY GET SYSTEM TYPE RAR,SLA CHECK FOR DMS SYSTEM JMP GTDMS THIS IS A DMS SYSTEM OLDSY LDA EQT1,I CLEAR THE BUFFER FLUSH BIT7 SO LDA A,I THAT NEXT REQUEST WILL BE DONE. CHECK SZA IF NOT LAST REQUEST DO NOT CLR BIT7. JMP NXQU,I THIS IS NOT THE LAST REQUEST. LDA EQT5,I LAST REQUEST AND NBIT7 REMOVE BIT7 STA EQT5,I RESTORE EQT5 JMP NXQU,I AND RETURN * GTDMS RSA CHECK MAP. IF SYSTEM, NO CROSS LOAD ALF,SLA BIT12 = 0/1 FOR SYSTEM/USER RSS JMP OLDSY SYSTEM MAP XLA EQT1,I USER MAP CROSS LOAD XLA A,I JMP CHECK ************************************************* * SUBROUTINE IS GENERAL OUTPUT ROUTINE * * TO TERMINAL. CHAR. IS IN B REG. * ************************************************* OUT1 NOP GENERAL PURPOSE CHARACTER OUTPUT ROUTINE JSB XMIT4 SET CARD TO TRANSMIT LDA B GET DATA JSB OUT2 SEND TO TERMINAL JMP OUT1,I RETURN * OUT2 NOP GENERAL PURPOSE OUTPUT ROUTINE OTA10 OTA CARD FOR CARD COMMUNICATION JMP OUT2,I * RECIV NOP LDB B5 SET CARD UP FOR RECEIVE,CHAR. JSB CDSET CLA JSB ECHO TURN OFF ECHO STC05 STC CARD,C ENABLE INTERRUPT JMP RECIV,I HED ********************************************** * * * EXIT IS A=2 (ILLEGAL CONTROL REQUEST). * * (ALSO IMMEDIATE COMPLETION WITH B=0). * * * * * * EXIT CAUSES AN IO07 PROGRAM ABORT. * ********************************************** REJ2A EQU * IFZ ## JSB NXQU ## JSB LINCK ## SEE IF THE MODEM STAYED UP RSS ## DON'T DO NXQU AGAIN XIF ## REJ2 JSB NXQU CHECK QUE JSB SETEM SETUP CARD FOR EXIT IMCOM LDA B2 RSS REJ1 CLA,INA JMP IT05,I ******************************************** * IS CALLED IF RUBOUT INTERRUPT IS * * DETECTED. IT DELETES THE CURRENT RECORD * * AND OUTPUTS (/,CR,LF). * ******************************************** RUBOT JSB CLRCD GET RID OF GARBAGE ON THE BOARD LDA FUNCT RAR,RAR SLA,RSS CHECK FOR ECHO JMP IT05R NOT SET - DON'T SEND / LDB B134 OUTPUT A SLASH JSB OUT1 JSB EORP GO OUTPUT JMP IT05R RE START INPUT HED ***************************************************** * IS CALLED WHENEVER AN INTERRUPT OCCURS AND* * NO PROGRAM IS SCHEDULED (I.E. USER HITS A KEY TO * * GET THE SYSTEM'S ATTENTION. * ***************************************************** SCHED NOP JSB RECIV PUT INTO RECEIVE JSB CHRIN GET THE INPUT CHARACTER STA EQT6,I SAVE CHAR. FOR PROGRAM JSB CLRCD GET CHAR. OFF CARD CLA STA EQT15,I SET T.O. TO 0 LDB EQT1 IS THIS THE SYSTEM CONSOLE? CPB SYSTY JMP OPFLG YES! GO SET OPERATOR FLAG LDB EQT17,I GET TERMINAL ID ADD. LDA EQT5,I IS TERMINAL ENABLED? RAR,SLA SSB YES! IT IS ENABLED JMP SCHED,I IT IS NOT STB SCH1 1740 RTE LDB EQT4 1740 RTE STB SCH 1740 RTE JSB $LIST GO SCHEDULE TERM. PROG OCT 601 THIS IS CONTROL FOR $LIST SCH1 NOP ID SEGMENT ADDRESS SCH NOP EQT4 ADDRESS OR SELECT CODE JMP SCHED,I RETURN OPFLG ISZ OPATN SET OPER. ATTN. FLAG JMP SCHED,I EXIT HED *********************************************** * ENABLES IO CARD INTERRUPT IF TERM. * * HAS BEEN ENABLED OR IF TERMINAL IS A * * SYSTEM CONSOLE. * *********************************************** SETEM NOP SUBROUTINE TO SETUP IO CARD FOR RECEIVE JSB RECIV SET CARD TO RECEIVE LDA EQT5,I MODE PRIOR TO EXIT. GET TERM.STATUS RAR,SLA IS TERMINAL ENABLED? (BIT 1=1) JMP SETEM,I YES, IT IS - RETURN LDA SYSTY GET CONSOLE EQT CPA EQT1 IS THIS THE SYSTEM CONSOLE ? JMP SETEM,I YES, IT IS CLC02 CLC CARD NONE OF THE ABOVE - INHIBIT INTERRUPTS JMP SETEM,I RETURN * TIMOT EQU * TIME OUT PROCESSING XOR EQT4,I CLEAR T.O. BIT STA EQT4,I IFZ ## LDA EQT21,I CHECK CN32 FLAG ## SSA ## JMP CN31B ## XIF ## LDA EQT5,I IOR B4 SET TIME OUT STATUS STA EQT5,I LDA EQT18,I GET DEVICE PARAMETER LDB B4 SET FOR T.O. ERROR SSA IF SIGN SET DO NOT DOWN ON TIMEOUT CLB NO ERROR STB EQT19,I SET A REG. FOR EXIT JMP EOOP4 B REG. 0 EXIT HED ************************************************** * WRITES TO THE DEVICE. * * STARTING ADDRESS OF DATA IS EQT9,I * * "TRAN1" COUNTS THE NUMBER OF CHAR. IN ONE * * TRANSMISSION AND IS USED TO LIMIT THE TIME * * IN THE DRIVER FOR A SINGLE INTERRUPT. * * IF BUFFER IS NOT EMPTIED IN 1 CALL TO WE* * WILL WAIT FOR A BUFFER EMPTY INTERRUPT AND * * COMPLETE THE TRANSMISSION. * ************************************************** CCNT EQU * CHARACTER COUNT TRAN1 NOP LDA TRAN1 SAVE RETURN ADDRESS STA EQT16,I JSB XMIT4 SET CARD FOR XMIT TRAN4 LDB N128 GET READY TO SEND A FULL BUFFER STB CCNT IN ONE TRANSMISSION LDB EQT9,I GET BUFFER ADDRESS X 2 TRAN2 JSB .LBT GET BYTE (ADDR. IN B) 1909 CPB EQT10,I IS THIS THE LAST WORD? RSS PROCESS END OF RECORD JMP OUT6 NO - IGNORE CHECKS 1909 STB EQT9,I YES - RESTORE INCREMENTED EQT9 1909 LDB HONST IS IT HONEST? SZB 1909 JMP OUT5 YES - IGNORE CHECKS CPA B137 IS THIS A "_" UNDERSCORE? JMP EOOP8 YES! GO TO END OF OUTPUT PROCESSING OUT5 LDB EQT9,I RESTORE B REGISTER OUT6 OTA CARD OUTPUT CHAR. TO CARD CPB EQT10,I HAVE WE SENT LAST WORD? JMP TRAN5 THIS IS THE LAST CHARACTER ISZ CCNT INCREMENT CHAR. COUNT. JMP TRAN2 WE HAVE NOT SENT ALL THE CHARS. STB EQT9,I PUT BACK THE B REGISTER TRAN6 JSB EXIT1 WE HAVE SENT 128 CHAR. LDA BSTAT CHECK FOR BUFFER EMPTY ALF,ALF SSA JMP TRAN4 BUFFER IS EMPTY - CONTINUE JMP TRAN6 NO - GO WAIT FOR IT TRAN5 STB EQT9,I SAVE B REGISTER FOR TRANS. LOG LDA EQT16,I GET RETURN ADDRESS JMP A,I RETURN * XMIT4 NOP SET BOARD TO XMIT LDA CW4 GET CONTROL WORD IOR B400 PUT IN XMIT JSB OUT2 SEND IT JMP XMIT4,I RETURN HED ********************************************************** * CONFIGURES IO INSTRUCTIONS TO SELECT CODE SET * * IN A REG. * ********************************************************** * **************************************************** * SETUP EXTENSIONS ON EQT * * * * EQT NO. USE * * 1-8 STANDARD * * 9 RUNNING CHAR. ADDRESS * * 10 LAST CHAR. ADDRESS OR * * LINE CONTROL REFERENCE FOR * * LINE OPEN/CLOSE ## * * 11 ADDRESS TO GO ON INTERRUPT * * 12 NO. OF EQT EXTENSIONS * * 13 EQT EXTENSION STARTING ADD. * * 14-15 STD * * 16 RETURN ADDRESS * * 17 ID ADDRESS OF TERM. PROG. * * 18 MODE CONTROL PARAMETERS * * BIT(S) * * 15 1= DO NOT DOWN THE DEVICE ON * * TIME OUT. * * 0= LET THE SYSTEM HANDLE T.O. * * 14 1= SEND CHARACTER AT THE * * BEGINNING OF EACH READ. * * 0= NORMAL OPERATION. * * 13-9 DELAY IN STALL CHARACTERS * * (0 TO 31). * * 8-4 DELAY IN STALL CHARACTERS * * (0 TO 31). * * 3-0 NOT USED. * * 19 A-REG EXIT VALUE OR * * <$UPIO> FLAG (SIGN BIT) * * 20 LAST REQUEST CODE * * 21 LINE CONTROL PARAMETERS * * BIT(S) FUNCTION * * 15 CN32 FLAG ## * * 14 RESERVED * * 13 0= HARDWIRED * * 1= MODEM ## * * 12 "CA" (RTS) SET ## * * 11 "CD" (DTR) SET ## * * 10 1= PARITY ON * * 0= PARITY OFF * * 9 1= PARITY EVEN * * 0= PARITY ODD * * 8-5 BAUD RATE * * 4-0 RESERVED * **************************************************** SETIO NOP LDA SCH GET SELECT CODE IOR STF0 CONSTRUCT STF CPA STF01 ALREADY CONFIGURED? JMP SETI1 YES - SKIP SOME CODE. STA STF01 STF IS 1021XX IOR B400 CONSTRUCT LIA AND SAVE STA LIA01 LIA IS 1025XX STA LIA02 XOR B600 CONSTRUCT SFS STA SFS01 SFS IS 1023XX XOR B500 CONSTRUCT OTA AND SAVE STA OTA10 OTA IS 1026XX STA OUT6 IOR B1100 STC,C IS 1037XX STA STC02 STA STC03 STA STC04 STA STC05 IOR B4000 CONSTRUCT CLC,C AND SAVE STA CLC01 CLC,C IS 1077XX STA CLC02 SETI1 EQU * LDA EQT4,I CHECK FOR FIRST TIME THROUGH ALF,SLA "I WILL HANDLE TIME OUT" BIT JMP SETIA IF NOT FIRST TIME, SKIP CHECKS LDA EQT6,I CHECK FOR SYSTEM REQUEST SSA JMP SETIA IF SYSTEM REQUEST, SKIP CHECKS LDA EQT13,I CHECK FOR EXTENTS SET UP SZA ZERO + (-6) IS ERROR LDA EQT12,I CHECK FOR ENOUGH EXTENTS ADA B.6 IS IT =>6? SSA OK IF POSITIVE JMP REJ1 GO OUT WITH IO07 SETIA EQU * LDA EQT6,I GET CONTROL WORD LSR 6 SHIFT IT AND B37 MASK IT STA FUNCT SAVE IT AND B21 BIT6 OR 10 INDICATES HONEST MODE SZA MAKE IT A 1 OR ZERO FOR HONEST/ASCII CLA,INA GENERATE A 1 STA HONST LDA EQT6,I GET REQUEST TYPE AND B3 STA REQTP LDA EQT13,I GET STARTING ADDRESS OF EXT. CPA EQT16 SEE IF SET UP JMP SETI2 YES - SKIP SOME STUFF STA EQT16 SET ADD. OF EQT16 INA STA EQT17 INA STA EQT18 INA STA EQT19 INA STA EQT20 INA STA EQT21 LDA EQT4,I CHECK FOR FIRST TIME THROUGH ALF,SLA WITH BIT 12 JMP SETI2 NOT FIRST TIME CLA SET UP DEFAULT BAUD RATE STA EQT21,I LDA SCH SET UP SCHEDULE FLAG ADA B.6 ADA INTBA GET SCHEDULE WORD IF NEG. LDB A,I CMB,SSB,INB CHANGE SIGN OF WORD CCB NO PROG. TO SCHED. (INT. POINTS TO EQT) STB EQT17,I SAVE FOR FUTURE REF. LDB EQT1 PUT EQT ADDRESS INTO INT. TABLE STB A,I LDA EQT4,I DONE WITH INITIAL SETUP IOR BIT12 SET "I WILL HANDLE T.O." BIT STA EQT4,I PUT IT BACK SETI2 LDA EQT21,I GET ALL LINE PARAMETERS IFZ ## RAL,RAL ## CHECK BIT 13 SSA,RSS ## FOR HARDWIRED CLB,RSS ## HARDWIRED LDB RSS ## MODEM STB SWH01 ## STB SWH02 ## LSR 7 ## ADJUST A REG. XIF ## IFN LSR 5 SHIFT BITS TO RIGHT XIF AND B317 ISOLATE BAUD RATE & CONTROL BITS IOR CW440 STA CW4 SET UP CONTROL WORD 4 AND B17 ISOLATE BAUD RATE STA EXIT1 SAVE BAUD RATE LDA EQT21,I GET PARITY INFO. LSR 7 SHIFT INTO PLACE AND B14 MASK IT IOR CW3A PUT IN BASIC CW3 INFO. LDB EXIT1 CHECK FOR 110 BAUD CPB B3 IOR B40 IF SO,THEN 2 STOP BITS STA CW3 SAVE IT AND B10 CHECK FOR PARITY ON SZA,RSS IF NO PARITY CHAR. SIZE IS 8 ISZ CW3 LDA REQTP GET REQUEST TYPE CPA B1 IS IT READ? JMP OVER2 YES - SKIP THE CHECKS SLA WRITE? JMP CN024 CONTROL - CHECK IT OUT OVER1 LDB EQT5,I IF BUFFER FLUSH SET BLF,BLF THEN EXIT VIA REJ2 SSB SEE IF FLUSH JMP OVER8 YES - COMPLETE THE FLUSH OVER2 LDA EQT6,I NORMAL NON CNTL-0 REQUEST STA EQT20,I SAVE THE COMMAND JMP SETIO,I RETURN * CN024 EQU * CHECK FOR BUFFER UNFLUSH & SYST. CNTL 0 LDA FUNCT CHECK FUNCTION CODE CPA B24 IS IT UNFLUSH? JMP CN24 YES - UNFLUSH THE BUFFER SZA,RSS IS IT CNTROL 0? LDA EQT6,I YES - CHECK FOR SYSTEM REQUEST SSA JMP SETIO,I IS SYSTEM REQUEST - GO DO IT JMP OVER1 CHECK FOR FLUSH * * BUFFER FLUSH EXITS * OVER8 LDA INITF GET IT05/CT05 FLAG SZA JMP OVER2 CT05 EXIT JMP REJ2 * HED * EQU'S FOR VARIOUS ENTRIES A EQU 0 DEFINE A REG. B EQU 1 DEFINE B REG. CARD EQU 67B DEFINE CARD FOR IO INSTRUCTIONS * * SYSTEM BASE PAGE COMMUNICATION AREA * . EQU 1650B ESTABLISH ORIGIN OF * BASE PAGE EQT1 EQU .+8 EQT2 EQU .+9 ADDRESSES EQT3 EQU .+10 EQT4 EQU .+11 OF CURRENT EQT5 EQU .+12 EQT6 EQU .+13 EQT ENTRY EQT7 EQU .+14 EQT8 EQU .+15 EQT9 EQU .+16 EQT10 EQU .+17 EQT11 EQU .+18 EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * INTBA EQU .+4 SYSTY EQU .+21 EQT ENTRY ADDRESS OF SYSTEM CONSOLE * OPATN EQU .+52 OPERATOR KEYBOARD ATTN. FLAG * * * ORG * DRIVER LENGTH END