ASMB,R,L,C,N HED << RTE ASYNCHRONOUS MULTIPLEXER DRIVER - 12920A/B >> IFN * NAM DVS00,0 91731-16001 REV. 1926 790424 XIF * IFZ NAM DVS00,0 91731-16004 REV. 1926 790424 XIF * **************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978,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. * **************************************************************** * NAME: DVS00 * SOURCE: 91731-18001 * RELOC: 91731-16001 *** SINGLE MUX *** * RELOC: 91731-16004 *** DUAL MUX *** * MANUAL: 91731-90001 * AUTHOR: BILL RAGIN * UPDATES (RXX) BY GREG DOLKAS * LAST UPDATE: (R10) 4/24/79 LINE DROP BUG * (R09) 4/3/79 SET DVR TYPE TO 00 ON DETACH (C 25B) * (R08) 3/22/79 HW VS MODEM BUG, TIMEOUT BUG * (R07) 1/30/79 LINE DROP/BUFFR FLUSH CLEANUP * (R06) 12/17/78 MISSING LINE IN ERTN * (R05) 10/23/78 * (R04) 10/6/78 * (R03) 9/11/78 * (R02) 9/7/78 * (R01) 8/21/78 * SPC 2 * USE Z OPTION FOR DUAL MUX (32 PORT) SPC 2 * ENT IS00,CS00 ENT P00D1 ENT P00C1,P00C2 IFZ ENT P00D2,P00C3,P00C4 XIF EXT $LIST,$PVMP,$OPSY * * NOTE! YOU WILL HAVE $PVMP AS AN UNDEFINED EXTERNAL SYMBOL * DURING AN RTE-II GENERATION. * IGNORE IT, SINCE IT WILL NOT BE CALLED IF THIS IS USED * IN AN RTE-II SYSTEM. * * * ****** PROGRAM DESCRIPTION ****** * * DRIVER 00 OPERATES UNDER THE CONTROL OF THE * I/O CONTROL MODULE OF THE REAL-TIME EXECUTIVE. * THIS DRIVER IS RESPONSIBLE FOR CONTROLLING DATA * TRANSMISSION WITH ANY EIA RS232 COMPATIBLE * 103A OR 202C BELL TYPE MODEMS, AND HARDWIRED * TERMINALS CONNECTED TO THE 12920A ASYNCHRONOUS * MULTIPLEXOR PANEL. TERMINAL SPEED IS PROGRAMMABLE * AND CAN BE DIFFERENT FOR TRANSMIT AND RECEIVE. * THIS DRIVER CAN SENSE SPEED OF TERMINALS OPERATING * AT 10,15,30,60,120 AND 240 CHARACTERS PER SECOND. * THIS DRIVER CAN PROVIDE STALL CHARACTERS FOR * THOSE TERMINALS REQUIRING THIS DELAY * IS00 IS THE ENTRY POINT FOR THE *INITIATION* * SECTION AND CS00 FOR THE *COMPLETION* SECTION. * P00XX IS THE INTERRUPT ENTRY POINT AND HANDLES ALL * TERMINAL SERVICING. TIMEOUT AND PROGRAM SCHEDULING * ARE THE ONLY REASONS FOR ENTERING THE *COMPLETION* * SECTION. * * - THE INITIATION SECTION IS CALLED FROM I/O * CONTROL TO INITIALIZE A DEVICE AND INITIATE * A DATA TRANSFER OR CONTROL FUNCTION. * * CALLING SEQUENCE: * * - ADDRESSES OF DEVICE EQT ENTRY * SET IN "EQT1-EQT15" * * (A) = I/O ADDRESS OF DEVICE * * (P) JSB IS00 * (P+1) - RETURN - * * (A) = 0, OPERATION INITIATED, OR * (A) = REJECT CODE: * * 2, ILLEGAL CONTROL REQUEST, * OR CONTROL FUNCTION HAS * BEEN DONE (E.G., SET EOT * STATUS). * * 3, EQUIPMENT MALFUNCTION OR * NOT READY. * * - THE COMPLETION SECTION IS CALLED BY CENTRAL * INTERRUPT CONTROL TO CONTINUE OR COMPLETE * AN OPERATION. * * CALLING SEQUENCE: * * - ADDRESSES OF DEVICE EQT ENTRY * SET IN "EQT1-EQT15" - * * (A) = I/O ADDRESS OF DEVICE * * (P) JSB CS00 * (P+1) -- COMPLETION RETURN -- * (P+2) -- CONTINUATION RETURN -- * * - COMPLETION RETURN: * (A) = 0, SUCCESSFUL COMPLETION WITH * (B) = # WORDS OR CHARS. TRANSFERRED * * - CONTINUATION RETURN: REGISTERS * MEANINGLESS. * * * - RECORD FORMATS,FOR THE DEFAULT TTY DRIVER: * * ASCII (INPUT): A STRING OF CHARACTERS TERMIN- * ----- ATED BY A CARRIAGE RETURN. IF THE * REQUESTED LENGTH IS FULFILLED * BEFORE A CARRIAGE RETURN, THE RE- * MAINING CHARACTERS ARE IGNORED * UNTIL A CARRIAGE RETURN IS INPUT. * * SPECIAL CHARACTER PROCESSING: * * LINE-FEED ALWAYS IGNORED AND IS NOT * TRANSMITTED TO USER BUFFER * RETURN - RECORD TERMINATOR AT END OF * A RECORD AND IS NOT TRANSMITTED * TO USER BUFFER OR COUNTED. * SYSTEM RESPONDS WITH A LINE-FEED * TO ACKNOWLEDGE END OF INPUT. * CNTRL-A,CNTRL-H,CNTRL-Y,OR BACKSPACE, DELETES * PREVIOUS CHARACTER AND OUTPUTS A BACK ARROW * IF TTY, OR UNDERBAR FOR MOST CRT'S. * RUB-OUT(DEL)-DELETES CURRENT RECORD; * OUTPUTS '/' THEN RETURN/LINE-FEED * NEXT RECORD IS READ. * CONTROL/D - FOURCES EOT IF ENTERED AT ANY TIME * * ASCII (OUTPUT): A STRING OF CHARACTERS, THE * ----- NUMBER DESIGNATED BY THE * "BUFFER LENGTH" IN THE REQUEST, * TERMINATED BY A RETURN AND * LINE-FEED (SUPPLIED BY THE * DRIVER). * * SPECIAL CHARACTER PROCESSING: * * LEFT-ARROW: IF A LEFT-ARROW IS THE * LAST CHARACTER IN THE USER * BUFFER, THE RETURN/LINE-FEED * AND ARROW CODES ARE NOT OUTPUT. * - PROGRAM SCHEDULING SPC 1 * IF A PROGRAM IS LINKED TO THE TRAP CELL FOR ONE OR * MORE OF THE EQT ENTRIES FOR THIS DRIVER THEN THAT * TTY IS A TERMINAL. * * A TERMINAL, WHEN ENABLED, MAY SCHEDULE THE SO LINKED * PROGRAM (MAY BE A DIFFERENT PROGRAM FOR EACH TERMINAL) * BY STRIKING ANY KEY ANY TIME THAT THE TTY IS NOT DOING * INPUT( THE SAME AS GETTING SYSTEM ATTENTION). IF THE * TERMINAL IS THE SYSTEM TTY THE SYSTEM ATTENTION FLAG * IS SET AND THE PROGRAM IS NOT SCHEDULED. * WHEN THE PROGRAM RUNS A CALL TO RMPAR WILL RECOVER * WORDS 4 THRU 8 OF THE EQT OF THE INTERRUPTING * TTY, THAT IS EQT4 IS SET IN THE PROGRAMS B REG. * WORD 3 IS THE SPEED PARAMETER ,FOR RECEIVE ONLY * AND WORD 4 IS THE CHARACTER WHICH * CAUSED THE ATTENTION INTERRUPT. * - BUFFER FLUSHING SPC 1 * AFTER A BUFFER FLUSH CALL ALL WRITES AND * CONTROL REQUESTS ARE IGNORED UNTIL EITHER: * 1.) THE QUE IS EMPTY OR * 2.) AN INPUT REQUEST IS PROCESSED. * * LEGAL SUBFUNCTION VALUES IN CONTROL REQUEST: * * 5 - SET RECEIVE SPEED PARAMETER * - SEE BELOW * 7 - SET END-OF-TAPE STATUS * 12 - R/LF DELAY * - SEE BELOW * 16 - SET SEND SPEED PARAMETER * - SEE BELOW * 17 - SPEED SENSE MODE * - SEE BELOW * 20 - ENABLE TERMINAL * - SEE BELOW * 21 - DISABLE TERMINAL * 23 - FLUSH BUFFER * 24 - REMOVE BUFFER FLUSH * 25 - SET LOGICAL DRIVER ADRESS IN EQT17 * - SEE BELOW * 30 - CLOSE LINE-FOR MODEM USE * 31 - OPEN LINE -FOR MODEM USE * * - THE SPEED PARAMETERS SHOULD BE CALCULATED IN THE * FOLLOWING MANNER: * * PARAMETER = (14,400/BAUD RATE)-1 * * FOR EXAMPLE A 2400 BAUD TERMINAL WOULD HAVE A * SPEED PARAMETER OF (14,400/2,400)-1 OR A VALUE * OF FIVE (5), NUMBERS ENTERED ARE IN OCTAL. * * - THE RETURN/LINE FEED DELAY PARAMETER SHOULD BE CON- * STRUCTED AS FOLLOWS: * * 15 8 7 4 3 0 * *************************** * * * CR * LF * * *************************** * * THE VALUES SHOULD BE THE NUMBER OF STALL CHARACTERS * REQUIRED IN ADDITION TO THE NORMAL SINGLE CHARACTER * DELAY. * * - SET SPEED SENSE MODE: * * PRAM1 CONTAINS THE "SEARCH FOR" CHARACTER * RIGHT JUSTIFED IE. "CR"=15B,"DC1"=21B. * - THE ENABLE PARAMETER IS DEFINED AS FOLLOWS: * * 15!14 13 12!11 10 9! 8 7 6! 5 4 3! 2 1 0 * ************************************************* * *L !S D ! ! S E ! P P CHAR * * *P !C N ! ! B ! SIZE * * ************************************************* * * BITS: USE: * * 15 LINE PLEX - 0=HALF DUPLEX;1=FULL DUPLEX * 14 SECONDRY CHANEL - 0=NO SEC.CHNL;1=SEC.CHNL. * 13 DON'T DOWN LU ON ERROR, =1. DO DOWN =0. * 8 STOP BITS - 0=1 STOP BIT;1=2 STOP BITS. * 7 ECHO - 0= ECHO OFF;1= ECHO ON. * 5-4 PARITY - 0= PARITY OFF,BIT 7 =0. 1 = PARITY * ODD. 2 = EVEN PARITY. 3 = BIT 7 = 1. * 3-0 CHARACTER SIZE - SIZE,NOT INCL.STOP BIT AND PARITY. * * NOTE: IF PRAM1 =0 THE TERMINAL IS ENABLED TO THE LAST * SET OF PARAMETERS GIVEN, OR THE DEFAULT PARAMETERS * IF NONE WERE GIVEN. * * - SET LOGICAL DRIVER ADDRESS: * PRAM1 IS THE ADDRESS OF THE LOGICAL DRIVER * IF PRAM1=0 THEN THE INTERNAL TTY LOGICAL DRIVER * IS SET AS THE LOGICAL DRIVER. * * * * - GENERATION INTO RTE SYSTEM * * THIS IS A PRIVILEGED DRIVER AND REQUIRES USE OF * THE 12936A PRIVILEGED I/O CONTROL CARD, OR A 12620A CARD. * * THE SELECT CODE OF THE HIGHEST PRIORITY MUX CARD * - THAT IS THE LOWEST SELECT CODE - MUST BE INDICATED * IN THE FIRST EQT ENTRY FOR PORT #0. * * * THE FOLLOWING PROCEDURE MUST BE FOLLOWED AT SYSTEM * GENERATION TIME: * * 1.) EQUIPMENT TABLE ENTRIES MUST BE MADE FOR * EVERY PORT USED. THE SELECT CODE MUST * BEGIN WITH XX (S.C.OF DATA LSC) FOR PORT #0 AND INCREASE * CONSECUTIVELY STARTING FROM PORT #1 WHICH IS S.C.41,I.E.: * * USE "M" BIT IN RTE-IV!!! XX,DVS00,B,M,X=11, ETC. * * XX,DVS00,B,X=11 (PORT #0) * 41,DVS00,B,X=11 (PORT #1) * 42,DVS00,B,X=11 (PORT #2) * . . * . . * * NOTE: THESE ARE SIMULATED SELECT CODES -EXECPT FOR XX- * ONE FOR EACH PORT. THIS ALLOWS THE NECESSARY EQT * TABLE SPACE TO KEEP TRACK OF THE I/O FOR THE PORTS. * EACH EQT REQUIRES A 11 WORD EXTENSION. * * 2.) MAKE INTERRUPT TABLE FOR ACTUAL SELECT CODE * OF MUX. FOR EXAMPLE, WITH CARDS IN 10,11,12 AND 13 * * 10,ENT,P00D1(D2) (P00D1(D2) IS PRIV. ENTRY POINT) * 12,ENT,P00C1(C3) (P00C1(C3) IS ENTRY POINT 1ST CONTROL) * 13,ENT,P00C2(C4) (P00C2(C4) IS ENTRY POINT 2ND CONTROL, * IF USED) * * NOTE: D2,C3, AND C4 ARE FOR THE SECOND MUTIPLEXER. * * 3.) MAKE INTERRUPT TABLE ENTRY FOR EACH PORT IN USE. * A PROGRAM MAY BE LINKED TO HANDLE INTERRUPTS. * * 40,PRG,PRMPT -NOTE, THIS IS PSEUDO FOR XX- * 41,PRG,PRMPT * . * . * * * IF YOU DESIRE TO USE A SECOND MULTIPLEXER, THEN THE SELECT * FROM 60 TO 77(OCTAL) MUST BE USED AS ABOVE FOR THE SECOND * 12920B MULTIPLEXER. AGAIN, 'XX' MUST REPLACE THE FIRST CHAN. * * THEN USE 60,61,62 ... FOR EQT. & INT. TABLE ENTRIES * * THE DRIVER HAS INCORPORATED WITHIN IT A TTY DRIVER WHICH * IS DEFAULTED TO AT THE FIRST INITIALAZATION. THIS DRIVER * HAS THE CHARACTERISTICS MENTIONED ABOVE IN THE 'RECORD * FORMAT' DISCUSSION. THE USER MAY ATTACH A UNIQUE LOGICAL * DRIVER BY EXECUTING A CONTROL EXEC. CALL WITH A SUBFUNCTION * OF 25B WITH THE FIRST PARAMETER THE ADDRESS OF THE INIT. * ENTRY. THIS PROGRAM WILL BE EXECUTED DURING INITIALIZATION * AND UPON RECEPT OF EACH DATA INTERRUPT. THE INTERFACE * BETWEEN THE PHYSICAL AND LOGICAL DRIVER IS DISCUSSED * IN THE DVS00 PHYSICAL DRIVER MANUAL 12920-94001. * SKP * * THE DRIVER SAVES STATUS INFORMATION IN EQT5 AND EQT19 * TO KEEP UP WITH THE DATA TRANSMISSIONS. THE FOLLOWING * INFORMATION IS PROVIDED TO ASSIST IN UNDERSTANDING * * EQT5 * * BIT 7 BUFFER FLUSH * BIT 6 BREAK KEY HIT * BIT 5 END-OF-TAPE STATUS * BIT 4 TIME OUT * BIT 3 SPEED SENSE MODE - IN PROGRESS * BIT 2 BAD COMM LINE * BIT 1 PAUSE MODE (USER INTERRUPTED OUTPUT) * BIT 0 TERMINAL IS - ENABLED(1),DISABLED(0). SPC 2 * EQT19 * * BIT 7 READ STALL MODE * BIT 6 NOT USED * BIT 5 TIME OUT CAUSED BY GOOD COMPLETION * BIT 4 1=READ, 0=WRITE IN PROGRESS (USER REQUEST) * BIT 3 0=HARDWIRED, 1=MODEMS ENABLED * BIT 2 BACKSPACE MODE * BIT 1 LINE FEED DELAY MODE * BIT 0 CARRIAGE RETURN DELAY MODE HED 12920B INITIATION SECTION CTABL EQU * CONTROL JUMP TABLE DEF EXINT - EXIT DEF EXINT - WRITE EOF DEF EXINT - BACKSPACE RECORD DEF EXINT - FORWARD SPACE RECORD DEF EXINT - REWIND DEF STREC - SET RECEIVE PARAMETERS DEF EXINT - DYNAMIC STATUS DEF SEOT - SET END-OF-TAPE STATUS DEF EXINT - WRITE EOF DEF EXINT - CLOSE LINE - DOWN THE MODEM DEF CLDLY - R.LF DELAY DEF EXINT - FORWARD SPACE FILE DEF EXINT - BACKSPACE FILE DEF EXINT - FORM FEED DEF STTRM - SET SEND PARAMETERS DEF SSM - SPEED SENSE MODE DEF ENAB - GO ENABLE TERMINAL DEF DISAB - GO DISABLE TERMINAL DEF EXINT - GO SET TIMEOUT - NON MODEM ONLY DEF KAO - GO SET BUFFER FLUSH DEF UKAO - REMOVE BUFFER FLUSH DEF SETLG - SET LOGICAL DRIVER ADDRESS DEF EXINT - WRITE END OF VALID DATA DEF EXINT - LOCATE ABS. FILE/SPACE N LINES DEF LCLOS - CLOSE LINE - DOWN THE MODEM DEF LOPEN - LINE OPEN - UP THE MODEM DEF EXINT - UPDATE THE TERMINAL STATUS * * INITIATION SECTION * DEC 1926 (R04) REVISION CODE FOR CURIOUS FE'S, SE'S & CE'S * IS00 NOP ENTRY FROM IOC SFS 0 SAVE INT SYS. STATUS (SPECIAL CASE CCA,RSS OF FIRST ENTRY WITH INT OFF. FROM START-UP ROUTINE) CLA STA CS00 SAVE FOR EXIT CLF 0 DISABLE INTERRUPTS RTE39 JSB RTE3E (R02) ENABLE SYSTEM MAP INCASE RTE 3 I.0 JMP I.00 OVERLAYED AFTER FIRST EXECUTION BY "NOP" * * I.004 LDB EQT1 GET EQT ADDRESS 1805 JSB SETP SET UP INTERNAL EQT'S 1805 JSB TIMSB GO SET UNIT,DUNIT,NDUNT, AND CONFG. RTE31 JSB RTE3B COULD BE NOP, IF NOT SAVE STATUS RTE37 JSB RTE3A SET UP FOR MAP SWAP. LDB EQ18,I FIRST SZB ENTRY FOR THIS PORT? JMP CONT NO LDA EQT12,I CHECK FOR ADA DM11 AT LEAST ELEVEN EQT EXTENTIONS SSA 1805 JMP ERROR NOT ELEVEN, SOMETHINGS WRONG, ABORT.. LDA EQT4,I GET PORT NUMBER AND B77 ADA DM6 YES SET UP FOR PROGRAM SCHED ADA INTBA INTBA EQU 1654B INTERRUPT TABLE POINTER LDB A,I GET INTERRUPT TABLE ENTRY A EQU 0 B EQU 1 CMB,CLE,SSB,INB ID SEG ADDRESS OR EQT ADDRESS CCB,CCE MUST BE EQT ADDRESS STB EQ18,I SAVE FOR LATER ENTRY LDB EQT1 PUT EQT ADDRESS STB A,I INTO INTERRUPT TABLE LDA EQT4,I IOR BIT12 INDICATE WE HANDLE TIMEOUT STA EQT4,I * LDA DSPD SET DEFAULT SPEEDS STA EQT11,I SET FOR 110 BAUD LDA DLCH SET DEFAULT CHAR STA EQ22,I ECHO,FULL DUPLEX JSB CF920 GO SET IN EQT TABLE LDA LOADR DEFAULT LOGICAL DVR STA EQ17,I PUT INTO EQT TABLE LDA B1201 STA EQ26,I * CONT LDA EQT5,I GET STATUS AND ECLM CLEAR OLD FIELD STA EQT5,I LDA EQT6,I LDB EQ17,I TTY DVR? CPB LOADR ? RAL,CLE,SLA,ERA YES STA EQT6,I CLR SYS REQ. AND B3 CPA B3 CONTROL REQUEST ? JMP CNTRL YES * JMP R.W PREPARE FOR READ/WRITE * DSPD OCT 101202 DEFAULT XMIT-RCV 110 BAUD DM11 DEC -11 1805 SKP HED CONTROL REQUEST PROCESSING ************************************************* * DOES CONTROL REQUEST PROCESSING * ************************************************* * * CNTRL EQU * LDA EQT6,I GET CONTROL WORD LSR 6 SHIFT AND B37 MASK IT STA COUNT SAVE FOR LOG DVR LDB A SAVE IT CPA B24 IS THIS REMOVE FLUSH? JMP CNTR1 YES CPA B31 (R08) LINE OPEN? JMP CNTR1 (R08) YES, ALLOW TO EXECUTE ALWAYS LDA EQT5,I NOW CHECK FOR BUFFER FLUSH AND BIT7 IN BIT 7 SZA,RSS JMP CNTR1 NO, PROCESS COMMAMND JSB NXQU YES, GO CHECK 'Q' JMP EXIT IS FLUSH, IGNORE REQUEST CNTR1 LDA COUNT ADB NB33 CHECK THE RANGE FOR < 33B SSB,RSS JMP ERROR EXIT ADA TBLAD DO TABLE LOOKUP LDA A,I JMP A,I AND GO THERE TBLAD DEF CTABL JUMP ADDRESS TABLE * EXINT LDA EQ17,I GET INIT ADDRESS STA LOGR SAVE LDA COUNT RETRIVE EXEC SUB FUNCTION LDB EQT1 ADDRESS OF THE EQT JSB LOGR,I GO TO INIT OF LOGICAL DVR JMP EXIT IMMEDIATE RETURN STA DADIR SAVE DATA AND DIRECTIVE JSB SRTIM SET LOG TIME IF ANY RAL READ OR WRITE? SSA,RSS WRITE?? JMP ERROR UNLEGAL RESPONSE JMP SWRIT START WRITE * * ERROR LDA B2 ILLEGAL REQUEST JMP EXIT0 AND RETURN * * SET RECEIVE SPEED * STREC LDA EQT7,I GET USER PARAMETER SZA,RSS SUPPLIED ? JMP ERROR NO AND B377 USE BAUD RATE ONLY ALF,ALF POSITION STA EQ11,I PUT INTO TEMP LOC. JSB CF92B GO SET SPEED LDA EQ24,I (R05) SEND TO CARD JSB OUT (R05) JMP EXIT RETURN * * SET TRANSMIT SPEED * STTRM LDA EQT7,I GET USER PARAMETER SZA,RSS VALUE SUPPLIED ? JMP ERROR NO STA EQ11,I PUT IN TEMP LOCATION JSB CF92B GO UPDATE SPEED LDA EQ25,I (R05) SEND TO CARD JSB OUT (R05) JMP EXIT RETURN * * KILL OUTPUT * KAO LDA EQT5,I GET STATUS WORD IOR BIT7 SET IGNORE BIT(7) STA EQT5,I JSB NXQU SEE IF ANYONE ELSE WAITING JMP EXIT THEN RETURN * * REMOVE BUFFER FLUSH * UKAO LDA EQT5,I GET STATUS AND CMB7 REMOVE BIT 7 STA EQT5,I AND RESTORE EQT5 JMP EXIT RETURN * NXQU NOP RTE36 JMP GTDMS NOP IF NOT MAPPED 1805 (1740 RTE) CLDSY LDA EQT1,I ANYONE SUSPENDED? 1740 RTE RAL,CLE,ERA CLEAR SIGN 1805 TPARI LDA A,I CONST. 160000B TRANS. WITH PARITY 1805 CHECK SZA 1740 RTE JMP NXQU,I YES; RETURN LDA EQT5,I NO; CLEAR AND NBIT7 IGNORE BIT 7 STA EQT5,I JMP NXQU,I AND RETURN * * NBIT7 OCT 177577 NOT BIT 7 B1201 OCT 10001 B24 OCT 24 B31 OCT 31 (R08) DTMSK OCT 140377 (R09) DRIVER TYPE MASK CMB05 OCT 177700 CMASK OCT 177710 CMB13 OCT 157777 CMB7 EQU NBIT7 DCLM OCT 177600 DLCH OCT 100210 TERM. DEFAULT LP=1,SC=0,SB=0,E=1,P=0,CZ=8 DM6K DEC -6000 1805 * * * IF IT GETS HERE IT IS MAPPED III/MIII/IV SYSTEM * GTDMS RSA 1740 RTE GET DMS STATUS REG. ALF,SLA 1740 RTE BIT 12 0\1 SYSTEM\USER RSS 1740 RTE JMP CLDSY 1740 RTE SYSTEM MAP XLA EQT1,I 1740 RTE USER MAP CROSS LOAD RAL,CLE,ERA CLEAR SIGN 1805 OCT 101724 1740 RTE XLA A,I IN 2 WORDS 1805 BIT15 DEF A,I OCTAL 100000 1805 JMP CHECK 1740 RTE * * THE ABOVE WORKS ONLY IN 1740 OR LATER RTE SYSTEMS * * * SET END-OF-TAPE * SEOT LDA EQT5,I FETCH STATUS IOR B40 MERGE EOT STA EQT5,I JMP EXIT * * SPEED SENSE MODE * SSM LDA EQT7,I GET SEARCH FOR CHAR. STA EQ21,I SAVE IN EQT LDA B2405 (R05) SET REC&XMIT SPEED TO 2400 STA EQ11,I PUT IN EQT JSB CF92B SET SPEEDS LDA EQ24,I GET INPUT PRAM IOR BIT11 TURN ON AUTO SPEED AND CMB12 TURN EHCO OFF JSB OUT SEND TO MUX LDA EQ25,I FETCH TRANS PRAM AND CMB13 CLEAR INT. ENABLE JSB OUT DISABLE CHANNEL FOR TRANS LDA EQ26,I GET STATE WORD IOR BIT15 TURN ON 'AS' STA EQ26,I RESTORE LDA EQT5,I SET IOR B10 STATUS FOR STA EQT5,I SPEED SENSE LDB DM6K WAIT FOR UP TO 60 1805 STB EQ16,I SECONDS FOR CHARACTER 1805 JMP EXIT1 AND RETURN * * ENABLE TERMINAL * ENAB LDA EQ7,I GET ENABLE PRAM. SZA,RSS PRAM OF ZERO? JMP ENAB1 YES,DEFAULT TO 100210B,OR PREVIOUS STA EQ22,I SAVE FOR SETUP LDA EQ24,I GET REC PRAMS AND RHALF GET SPEED ALF,ALF PUT IN LEFT HALF STA B SAVE LDA EQ25,I GET TRANS PRAMS AND RHALF GET SPEED IOR B REC. AND TRANS SPEED STA EQ11,I SAVE FOR NEW EQ24 AND EQ25 JSB CF920 GO SET UP EQT ENAB1 LDA EQ26,I DEFAULT (R03) AND DM4 TO INA READ STA EQ26,I RESTORE LDA EQ24,I RECEIVE PRAMATERS JSB OUT SEND TO MUX LDA EQ25,I TRANS PRAM JSB OUT TO BOARD LDA EQT5,I SET THE IOR B1 ENABLE BIT NO. 0 STA EQT5,I IN STATUS JMP EXIT (R07) * * DISABLE TERMINAL * DISAB LDA EQT1 IS THS THE CPA SYSTY SYSTEM TTY?? JMP EXIT YES,CAN'T DOWN THE SYS TTY, IGNORE LDA EQT5,I TAKE OUT THE AND DCLM THE ENABLE BIT NO. 0 STA EQT5,I RESTORE LDA BIT15 NO, DISABLE PORT JSB OUT JMP EXIT * * SET THE LOGICAL DRIVER ADDRESS INTO EQ17 * SETLG LDA EQ22,I (R02) COPY ECHO BIT TO EQ24 AND BIT7 (R02) ...FROM EQ 22 ALF,RAL (R02) STA B (R02) SAVE ECHO BIT LDA EQ24,I (R02) FETCH... AND NBT12 (R02) ...CLEAR BIT 12 IOR B (R02) ...SET UP STA EQ24,I (R02) ...& STUFF LDA EQ7,I GET ADDRESS SZA,RSS IS IT ZERO? LDA LOADR DEFAULT OR RESET TO INTEG. - LOG DVR STA EQ17,I NO, SET IN EQ17 CPA LOADR (R09) DEFAULT LDVR? RSS (R09) JMP EXIT NO, RETURN AS IS LDA EQT5,I (R09) YES, SET DRIVER TYPE TO 00 AND DTMSK (R09) STA EQT5,I (R09) JMP EXIT (R09) NOW RETURN * * SET R/LF DELAY TIMES * CLDLY LDA EQT7,I GET PARAMETER AND B377 ALF,ALF POSITION & SAVE STA B LDA EQ19,I GET OLD VALUE AND B377 IOR B AND UPDATE STA EQ19,I YES SPC 1 EXIT LDA B4 SHOW IMMED COMPL. EXIT0 STA ASAVE SAVE A LDA EQ1 CHECK IF THE SSA,RSS MAPS WERE SWAPPED JMP EXIT3 NO LDA MAPAD YES, SWAP BACK USA EXIT3 LDA ASAVE ISZ CS00 SKIP IF INT SYS OFF ON ENTRY STF 0 ENABLE INTERRUPTS JMP IS00,I AND RETURN SPC 1 * * CLOSE LINE - DISCONNECT MODEM * LCLOS EQU * JSB LCS1 GO CLOSE THE LINE LDA B40 SHOW A GOOD (BIT 5) IOR EQ19,I 1840 DON'T WIPE OUT EQT19 STA EQ19,I COMPLETION JMP EXIT1 RETURN * LCS1 NOP LDA BIT15 DISABLE JSB OUT FOR DISCONNECT LDA SCDBS DISCONNECT. JSB COUT LDA EQ22,I HALF-DUPLEX? SSA JMP LCS1F NO, FULL LDA SCDBS YES, DROP SA, DISABLE JSB COUT2 INTERRUPTS ON SECOND CONT BOARD LCS1F LDA BIT12 SIGNAL LINE CLOSE TO TIMPH STA EQ26,I LINE STATUS = 0; DOWN. LDB DM500 DELAY 5 SECONDS FOR MODEM HANGUP, 1805 STB EQ16,I THEN COMPLETE LINE CLOSE REQ. 1805 JMP LCS1,I * * PROCESS LINE OPEN REQ. * SPC 1 LOPEN EQU * LDA EQ26,I IS THE LINE IN AND BIT12 USE? SZA,RSS JMP ERROR YES,ERROR RETURN LDA BIT3 (R08) SET ENABLED IOR EQ19,I (R08) ..BIT IN STATUS STA EQ19,I (R08) LDA BIT15 DISABLE JSB OUT DURING LINE UP CLA SET LINE STA EQ21,I FLAG TO ZERO JMP RECOP YES ALWAYS SPC 1 * RECEIVE OPTIONS SPC 1 RECOP EQU * LDA DM4 (R05) SET HDX TURN-AROUND COUNTER STA EQT8,I (R05) JSB RECX1 LDA EQ7,I (R02) SET LOGICAL TIMER... SSA (R02) .. IF PARAM1 IS NEG. STA EQ12,I (R02) JMP EXIT1 * RECX1 NOP LDA B20 SET TRANSITION STATE TO RECEIVE IOR BIT12 SIGNAL LINE OPEN TO TIMPH STA EQ26,I LDA EQ22,I SSA 103 MODEM-HW JMP RECO1 YES LDA SCDAB NO, 202 MODEM HALF DUPLEX JSB COUT A=CD UP AND CA DOWN LDA SSAF RAISE SA AND ENABLE FOR CB JSB COUT2 EQUAL TO ZERO JMP RECX1,I CONTROL REQ. INITIATED RECO1 EQU * ECHO PLEX LDA SCDCA A= CD & CA UP (ECHOPLEX) JSB COUT OUTPUT TO CONTROL BOARD JMP RECX1,I CONTROL REQ. INITIATED. SPC 1 * SEND OPTION SPC 1 * SENXP NOP LDA B40 SET TRANSITION STATE TO TRANSMIT IOR BIT12 SIGNAL LINE OPEN TO TIMPH STA EQ26,I LDB EQ22,I SSB,RSS FULL DUPLEX? (103 MODEM) JMP SENXQ NO LDA SCDCA YES, CD,CA=1 ENAB CC,CF=0 JSB COUT JMP SENXP,I SENXQ LDA SCDAS RAISE CD,CA, DIS. CF,ENABL CC JSB COUT OUT TO MUX CONT #1 LDA SSAB NO. 202 MODEM JSB COUT2 OUTPUT SA DOWN TO MUX BOARD # 2 JMP SENXP,I * SCDBS OCT 140300 LOWER CD,CA & INH. ALL INTERRUPTS SCDCA OCT 140374 RAISE CD,CA (ECHOPLEX 103,HALF DUX SEND 202) SPC 1 HED 12920A-B READ WRITE REQUEST PROCESSING * READ/WRITE REQUEST PROCESSOR * R.W LDB EQT5,I GET STATUS BLF,BLF CHECK BIT 7 SSB IGNORE ? B10 SLA ONLY IF WRITE 1805 ALSO CONSTANT (10B) JMP R.1 CAN'T IGNORE JSB NXQU SEE IF ANYONE ELSE WAITING JMP EXIT * R.1 EQU * LDA EQT5,I SINCE THIS IS AN INPUT REQUEST, AND CMB7 CLEAR THE BUFFER FLUSH BIT STA EQT5,I IN CASE IT MIGHT BE SET LDA EQ19,I CLEAR STATUS AND AND CMASK (R08) COMPLETION BITS LDB EQT6,I (R04) SET R/W FLAG SLB (R04) IOR BIT4 (R04) FOR PAUSE CODE STA EQ19,I RESTORE LDA EQT7,I GET BUFFER ADDRESS CLE,ELA MAKE BYTE POINTER STA EQT9,I LDA EQT8,I GET BUFFER LENGTH SSA WORDS OR CHARS? JMP CHARS CLE,ALS WORDS TO CHARS CMA,INA CHARS STA EQT10,I SAVE AS COUNTER * LDA EQT6,I GET REQUEST LDB EQ17,I GET LOG DVR ADRESS ADB B2 BUMP SLA,RSS ADB B2 GO TO WRITE STB LOGR SAVE RTE38 JSB RTE3C SWAP MAPS CCA LDB EQ1 ADDRESS OF EQT JSB LOGR,I GO GET FIRST CHAR JMP ERROR UNACCEPTABLE RESPONSE STA DADIR SAVE CHAR JSB SRTIM GO SET TIMER, IF ANY RAL,SLA BIT 15 ON JMP SREAD FOR START READ SSA BIT 15 FOR JMP SWRIT START WRITE JMP ERROR NOT LEGAL HERE * EXIT1 JSB E15ST SET EQT 15 TO RIGHT VALUE EXIT2 CLA FOR CONT, RETURN JMP EXIT0 SKP * * * RTE3A NOP LDX DUNIT SAVE PORT # IN "X" REGISTER CLA OK TO USE X-REG. SINCE RTE-III IS SAVING IT SAX MAPTB CLEAR PORT# ENTRY IN CASE USER MAP IS NOT USED LDB EQT1,I GET LINKAGE TO SUSPENDED PROCESS RBL,CLE,ERB CLEAR SIGN 1805 INB POINT TO CONWD LDA B,I GET CONWD RAL SAVE "T-FIELD"IN BIT 15 AND 0 CMA,SSA,SLA,RSS I/O TYPE = CLASS,BUFFERED, OR SYSTEM JMP RTE3A,I YES! THEN USE SYSTEM MAP INB POINT TO BUFFER ADDRESS IN CALLER'S QUEUE LDA B,I NOTE! NOT BUFFER ADDRESS IN EQT 7 SSA IS THIS REIO REQUEST, OR OTHER BUFFER IN "SAM" JMP RTE3A,I YES THEN USE SYSTEM MAP * * NOTE THAT USING SYSTEM MAP (REIO ETC.) WILL BE MORE * EFFICIENT IN THE PRIVILEGED SECTION OF THIS DRIVER * LDA EQT1,I GET CURRENT USERS ID SEGMENT ADDRESS RAL,CLE,ERA CLEAR SIGN 1805 SAX MAPTB AND SAVE AS NON-ZERO ENTRY IN MAP-TABLE JMP RTE3A,I * * RTE3E: ENABLE SYSTEM MAP. IF RTE-III SYSTEM AND USER TERM. IS * NOT BUFFERED, SYSTEM WILL ENTER IS00 & CS00 WITH USER * MAP ENABLED. IF USER HAS NOT DECLARED SSGA DURING PGM LOAD, * LOGICAL DRIVERS RESIDING IN SSGA CANNOT BE ACCESSED WITH * USER MAP ENABLED. (SYSTEM GOES SPLAT) ENABLING SYSTEM MAP * SIMULATES "M" BIT (RTE-IV) SO EVERYTHING WILL EXIST. * THIS ROUTINE IS (R02) * RTE3E NOP (R02) ENABLE SYSTEM MAP SJP RTE3E,I (R02) ..AND RETURN * * * CONFG - CONFIGURES THE OUTPUT INSTRUCTIONS FOR THE * OUTPUT SUBROUTINES. * * CALLING SEQUENCE: JSB CONFG SPC 1 CONFG EQU * NOP LDA SAVSC IOR OTACC CONFIGURE 1805 CPA OTA10 SEE IF CONFIGURED 1805 JMP CONFG,I RETURN 1805 STA OTA10 ALL INA OTA STA OTA20 INSTRUCTIONS. INA STA OTA30 INA STA OTA40 * LDA SAVSC CONFIGURE IOR STCAC STC 1027XX 1805 STA STC10 INST. ADA B3601 LIB 1065XX+1 1805 STA LIB20 CONFIGURE STA LIB21 LIB INSTRUCTIONS XOR B5200 FORM STC,C 1037XX+1 1805 INA BUMP IT 1 1805 STA STCF3 INA STA STCF4 JMP CONFG,I RETURN. SPC 2 SPC 1 OTACC OTA 0 STCAC STC 0 B3601 OCT 3601 1805 B5200 OCT 5200 1805 B2405 OCT 2405 (R05) SKP SPC 2 920,I RETURN. CHAR.R S.OMPLETED. ITS.A WAY T ENTRY TS. REQ.) * COUT2 OUTPUTS CONTROL PARAMETERS TO THE 2ND CONTROL BOARD. SPC 1 COUT2 EQU * NOP IOR UNIT INSERT UNIT # OTA40 OTA SC+3 4TH BOARD (2ND CONTROL BOARD) STCF4 STC SC+3,C JMP COUT2,I SPC 2 * COUT OUTPUTS CONTROL PARAMETERS TO THE 1ST CONTROL BOARD. SPC 1 COUT EQU * NOP IOR UNIT OTA30 OTA SC+2 CONTROL BOARD # 1 STCF3 STC SC+2,C JMP COUT,I SPC 2 * OUT - TRANSMITS 16 BITS TO THE MUX BOARD. SPC 1 OUT EQU * NOP LIB20 LIB SC+1 CHK SEEKING. SSB OK TO SEND? JMP LIB20 NO. WAIT. OTA10 OTA SC OUTPUT DATA/PARAMETERS. LDA UNIT OTA20 OTA SC+1 SEND UNIT #. STC10 STC SC INITIATE TRANSFER. JMP OUT,I SPC 2 * CHAR - TRANSMIT A CHARACTER SPC 1 CHAR EQU * NOP IOR EQ20,I ADD STOP BITS. JSB OUT SEND CHAR TO MUX BOARD. JMP CHAR,I SPC 2 * THIS SUBR OUTPUTS THE A-REGISTER TO THE CONTROL * BOARD CURRENTLY INTERRUPTING. ALLOWS INHIBITING INTERRUPTS. SPC 1 OUTCC EQU * NOP OCCSC OTA SC STCSC STC SC,C JMP OUTCC,I SPC 2 CISUB EQU * NOP JSB SRSCU LDA SAVSC IOR OTACC STA OCCSC IOR STCF0 1805 1037XX STA STCSC LDA DUNIT JMP CISUB,I * STCF0 STC 0,C 1805 SPC 2 SKP * *** CONTINUATION SECTION *** * * AT THIS POINT A TIMEOUT HAS OCCURED ON THE BASE EQT15 * CLOCK. EITHER THE LOGICAL OR PHYSICAL TIME VALUES ARE BUMPED * IF ENABLED. IF EITHER TIMES OUT, CONTROL IS PASSED TO THE * RESPECTIVE TIMEOUT PROCESSOR. IF NEITHER IS ENABLED, THEN * THE NORMAL TIMEOUT PROCESSING OCCURS. THE PHYSICAL TIMER * TAKES PRECEDENCE OVER THE LOGICAL TIMER. THE LOGICAL TIMER * WILL BE STARTED IF THE PHYSICAL TIMER IS NOT ENABLED. * TIMEOUT IS THE METHOD PRIVILEGED ROUTINE * HANDLES I/O COMPLETION. * CS00 NOP INTERRUPT ENTRY CLF 0 RTE40 JSB RTE3E (R02) ENABLE SYSTEM MAP LDB EQT1 SET UP THE INTERNAL EQTS 1805 JSB SETP 1805 LDA EQT1,I IS A RAL,CLE,ERA CLEAR SIGN 1805 SZA PROGRAM WAITING ? JMP C.1 YES STA EQT15,I DISALLOW TO LDA EQ24,I PASS SPEED TO AND B377 STA EQT6,I SCHEDULED PROGRAM LDA EQ21,I GET CAUSING STA EQT7,I CHAR AND SAVE JSB SCHED GO SCHEDULE JMP C.2 AND EXIT * C.05 EQU * LDB EQ16,I LOOK AT PHYSICAL TIMER 1805 SZB ENABLED 1805 ISZ EQ16,I YES - BUMP 1805 RSS NOT TIMED OUT YET 1805 JMP TIMPH YES - TIMED OUT 1805 * LDA EQT12,I IS LOGICAL TIME ENABLED SZA ISZ EQT12,I YES, BUMP, IS IT TIMED OUT?? RSS NO CONTINUE JMP TIMRT YES PROCESS LOG. T.O. LDA EQT12,I IS EITHER 1805 IOR EQ16,I TIMER ENABLED? 1805 SZA JMP C.2B (R07) YES, CONTINUE 1805 STA EQT15,I CLEAR BASE CLOCK JMP C.11 C.2B LDA EQ19,I (R08) MODEMS ENABLED? AND BIT3 (R08) SZA,RSS (R08) WELL? JMP C.2A (R08) NO, LINE CONSIDERED GOOD LDB EQ21,I (R07) CHECK FOR BAD LINE RBL (R07) SSB,RSS (R07) JMP C.2A (R07) LINE OK. CONTINUE JSB E15ST (R07) LINE BAD. ABORT JMP TMOUT (R07) C.1 LDA EQT5,I GET STATUS AND B100 CHECK FOR SZA,RSS BREAK KEY HIT JMP C.05 NO CONTINUE JSB SCHED GO SCHEDULE JMP C.12 COMPLETE * C.11 EQU * LDA EQ19,I GET STATUS AND B40 SZA,RSS END OF RECORD? JMP TMOUT NO * * I/O COMPLETION PROCESSOR * C.12 EQU * LDA EQ19,I CLEAR AND NBIT5 OLD STA EQ19,I STATUS LDB EQT6,I GET TLOG LDA EQT5,I GET STATUS AND ECLM CLEAR OLD STUFF SZB,RSS ZERO TLOG ? IOR B40 YES SET EOT STA EQT5,I SAVE IN EQT CLA SHOW COMPLETION CEX.2 STF 0 JMP CS00,I AND RETURN * TMOUT EQU * LDA EQ21,I LOOK FOR LINE AND BIT14 STATE IN BIT 14 ALF PUT INTO BIT 2 SZA (R08) BAD? IOR BIT7 (R08) YES, SET FLUSH STA B SAVE IN B LDA EQT5,I GET STATUS AND ECLM CLEAR IT IOR B BIT 2/7 -BAD LINE IF ON IOR B20 BIT 4 -TIME OUT STA EQT5,I RESTORE CLB ZERO TRANSMISSION LOG LDA EQ22,I LOOK AT THE DON'T AND BIT13 DOWN BIT SZA DOWN OR NOT? CLA,RSS NO LDA B4 NOTIFY OPR AND PROGRAM JMP CEX.2 RETURN * NBIT5 OCT 177737 SKP * * SCHEDULER * SCHED NOP LDB EQT1 CPB SYSTY CHECK FOR SYSTEM CONSOLE SYSTY EQU 1675B RSS JMP C.13 NO WE ARE NOT ISZ OPATN SET OPERATOR ATTN FLAG OPATN EQU 1734B JMP SCHED,I AND RETURN C.13 EQU * LDA EQT5,I IS TERMINAL ENABLED? SLA,RSS JMP SCHED,I NO,IGNORE LDB EQ18,I GET ID SEG ADDR SZB INITIALIZED ? SSB IS IT SET UP? JMP SCHED,I CAN'T SCHEDULE STB SCH YES, PUT IN CALL LDB EQT4 SET POINTER TO EQT4 STB SCH1 FOR PROGRAM TO DETERMINE PORT CAUSING SCHEDULE JSB $LIST MAKE SCHEDULE CALL OCT 601 1740 RTE SCH NOP ID SEGMENT ADDRESS SCH1 NOP 1740 RTE EQT4 ADDRESS JMP SCHED,I * * CONTINUATOR RETURN * C.2A JSB E15ST SET UP EQT15 1805 C.2 ISZ CS00 INCREMENT EXIT STF 0 ENABLE INTERRUPTS JMP CS00,I AND RETURN * HED LOGICAL TTY DRIVER - READ * * THIS IS A DEFAULT TTY DRIVER * AND IS USED IF NO OTHER WAS SET UP * LODVR NOP JMP LINIT INITIALIZE SPC 1 LRRET NOP LOGICAL READ JMP LREAD SPC 1 LWRET NOP LOGICAL WRITE JMP LWRTE SPC 1 LINIT CLA CLEAR A FOR RETURN CLB JMP LODVR,I THIS DVR DOSEN'T HANDLE SUB FUNCT. * * * LREAD EQU * STA ASAVE SAVE A CPA DM1 FIRST TIME?? RSS YES JMP LREDC NO PROCESS CHAR LDA BIT15 START READ JMP RTNR LREDC AND B177 MASK CHARACTER STA CH SAVE IT LDA ASAVE LOOK FOR BAD LINE SSA LOGICAL TIME OUT? JMP RTNR1 YES AND B60T OR DATA ERROR. SZA OR LINE ERROR JMP RTNR1 LOOKS BAD, EXIT TELL OPR. PRG LDA EQ19,I (R04) GET STATUS AND BIT4 (R04) CHECK R/W FLAG SZA,RSS (R04) SKIP IF NOT WRITE JMP PAUSE CHECK FOR PAUSE LDA CH GET CURRENT CHARACTER SZA NULL ? JMP P.55 NO LDB EQ7,I CHECK FOR CLE,ELB FIRST CPB EQ9,I CHARACTER JMP RTNR0 YES , IGNORE P.55 EQU * CPA RETN CARRIAGE RETURN ? JMP EOL YES; GO PROCESS END OF RECORD * CPA RUB RUBOUT? JMP P.61 CPA LF LINE FEED? JMP RTNR0 YES IGNORE CPA B10 BACKSPACE??(10)? 1805 JMP P.7 CPA BS CNTRL-H??(31) JMP P.7 CPA CA CONTROL/A(1)? JMP P.7 CPA CONTD CONTROL/D??(4)? JMP P.80 CLB CHECK FOR CPB EQ10,I BUFFER FULL JMP RTNR0 ITS FULL; IGNORE * * STORE CHARACTER IN USER BUFFER * LDB EQ9,I GET CURRENT POSITION CLE,ERB MAKE BYTE POINTER ISZ EQ9,I BUMP TO NEXT SEZ,RSS LEFT OR RIGHT? ALF,ALF LEFT STA CH SAVE LDA B377 GET MASK SEZ ALF,ALF STA BSAVE SAVE TEMP JSB MAPRD CROSS MAP I-O AND BSAVE FROM BUFFER IOR CH NEW CHAR JSB MAPWR TO BUFFER ISZ EQ10,I BUMP BYTE COUNT JMP RTNR0 * * READ RETURN TO PHYSCIAL DRIVER * RTNR0 CLA RTNR LDB EQ14,I ISZ LRRET BUMP FOR GOOD RET RTNR1 JMP LRRET,I RETURN * CH BSS 1 CURRENT CHAR. ASAVE NOP BSAVE NOP * * THIS IS A TABLE - DO NOT REARRANGE * SPNTR DEF *+1 SPEED POINTER FOR DIAG. CHANNELS(16-20) OCT 13 1200 BAUD OCT 27 600 BAUD B300 OCT 57 300 BAUD B150 OCT 137 150 BAUD B110 OCT 202 110 BAUD * * END OF BAUD TABLE * EQT0 NOP ADDRESS OF EQT FOR PORT #0 EQTA EQU 1650B ADDRESS OF FIRST SYSTEM EQT ENTRY RETN OCT 15 CARRIAGE RETURN LF OCT 12 LINE FEED D10 EQU LF RUB OCT 177 RUBOUT B177 EQU RUB B17 OCT 17 1805 BA EQU B150 BACK ARROW (137B) 1805 BS OCT 31 BACKSPACE B1 OCT 1 1805 CA EQU B1 CONTROL/A B4 OCT 4 1805 CONTD EQU B4 CONTROL/D SLASH EQU B300 / B60T OCT 60000 BIT4 OCT 20 (R04) BIT3 OCT 10 (R08) * * CROSS MAP READ IF EQ1 IS NEG, ADDRESS IN B. * MAPRD NOP LDA EQ1 CHECK FOR NEG SSA JMP *+3 DO CROSS LOAD LDA B,I STANDARD LOAD JMP MAPRD,I XLA B,I FROM USER MAP JMP MAPRD,I * * WRITE TO USER MAP IF EQ1 NEG. ADDRESS IN B. * MAPWR NOP STA BSAVE LDA EQ1 WERE MAPS SWAPPED? SSA JMP *+4 YES LDA BSAVE NO STA B,I JMP MAPWR,I LDA BSAVE XSA B,I CROSS STORE JMP MAPWR,I HED LOGICAL TTY DRIVER - WRITE * * RUBOUT PROCESSOR * P.6 EQU * STB EQ6,I CLEAR RUBOUT FLAG LDA EQ7,I RESET CURRENT BUFFER ADDRESS RAL FOR RE-INPUT STA EQ9,I LDA EQ8,I RESET SSA JMP P.60 BUFFER B60 CLE,ALS 1805 USED AS CONSTANT (60B) CMA,INA LENGTH P.60 STA EQ10,I LDA BIT15 START READING JMP RTNW AGAIN * P.61 LDA EQ6,I SET FLAG TO IOR BIT15 SHOW RUBOUT IN STA EQ6,I PROCESS CLA CLEAR CHAR COUNT STA EQ10,I TO DUMMY OUTPUT LDA SLASH GET SLASH IOR BIT14 START WRITE JMP RTNR RET TO P.D. * * BACKSPACE PROCESSOR * P.7 LDA EQ7,I IF BUFFER EMPTY RAL IGNORE CPA EQ9,I BACKSPACE JMP P.61 * CCA ADA EQ9,I DECREMENT BYTE STA EQ9,I POINTER CCA ADA EQ10,I DECREMENT STA EQ10,I LENGTH LDA EQ22,I (R03) SMART BACKSPACE? ALF,SLA (R03) JMP P.71 (R03) YES, BS ALREADY ECHO'D, RETURN LDA EQ19,I BACKSPACE MODE IOR B4 SET BIT 2 STA EQ19,I LDA BA OUTPUT A BACK ARROW OR UNDERBAR IOR BIT14 START WRITE JMP RTNR AND RETURN TO P.D. P.71 CLA (R03) WAIT FOR NEXT CHAR JMP RTNR (R03) * * * END OF INPUT PROCESSOR * EOL EQU * LDB EQ9,I IF ODD CLE,ERB # OF JSB MAPRD CHARACTERS AND B1774 INPUT, SET IOR B40 BLANK IN SEZ LOWER HALF JSB MAPWR OF LAST WORD * LDA EQ10,I GET INPUT COUNT LDB EQ8,I AND REQUESTED LENGTH SSB JMP P.8 REQUESTED CHARACTERS BLS ADB A SLB,BRS INB JMP P.8A P.8 CMB,INB ADB A P.8A STB EQ6,I STORE TRANSMISSION LOG LDB B200 (R03) READ FLAG JSB CD SET CR DELAY MODE LDA BIT14 SET START WRITE IOR B177 OUT DEL TO TURN LINE AROUND JMP RTNR RETURN TO PHYSICAL DVR * P.80 EQU * JSB GEND GOOD END CLA ZERO STA EQ6,I TLOG JMP RTNR1 RETURN TO P.D. FOR COMPLETION * * INDICATE A GOOD COMPLETION, SET BIT * 5 OF EQT 19, FOR PHYSICAL DRIVER. * GEND NOP LDA EQ19,I GET EQT 19 IOR B40 SET BIT 5 STA EQ19,I RESTOTR JMP GEND,I RETURN * * B1774 OCT 177400 NBT12 OCT 167777 (R02) NOT-BIT-12 LHALF EQU B1774 B200 OCT 200 B400 OCT 400 DMASK OCT 177574 (R02) BIT8 EQU B400 SKP * * OUTPUT SECTION * LWRTE EQU * STA SAVEA SAVE FOR INIT. CHECK CPA DM1 FIRST TIME?? CLA YES ALF,SLA IS IT BREAK?? JMP BREAK BIT-12, YES. BREAK JMP P.92 STATUS OK?.YES; CONTINUE BREAK LDA EQ5,I STA B AND DM3 CLEAR PAUSE BIT IOR B100 SET BREAK STATUS STA EQ5,I LDA EQ21,I CLEAR THE AND CMB12 BREAK FLAG STA EQ21,I AND RESTORE RBR,SLB PAUSE MODE ? JMP P.92 YES RESTART OUTPUT JMP PAUS1 RETURN FOR CONT TO P.D. * PAUSE LDA EQ5,I GET STATUS XOR B2 INVERT PAUSE FLAG STA EQ5,I RAR,SLA ALREADY WAITING ? JMP RTNR0 NO-WE WILL WAIT NOW LDA BIT14 YES,START WRITE AGAIN JMP RTNR WITH A SYNC CHAR PAUS1 LDA BIT13 THIS IS A NOP JMP RTNW0 UNTIL THE NEXT REC INT P.92 EQU * LDA SAVEA RESTORE A CPA DM1 IS THIS THE FIRST TIME?? JMP P.93 YEP.. IGNORE LINE CHECK RAL,SLA LOGICAL TIME-OUT? JMP RTNW1 YES SSA LOOK FOR BAD LINE JMP RTNW1 RETURN TO SYSTEM AND TELL THEM. P.93 LDA EQ5,I (R02) PAUSE MODE? RAR,SLA (R02) RSS (R02) JMP *+4 (R02) NO LDA BIT13 (R03) YES, IGNORE INT. CLB (R03) JMP RTNW (R02) WAIT FOR "GO" FROM READ INT. LDA EQ19,I BACKSPACE MODE? AND B4 LOOK FOR SZA,RSS JMP P.94 NO, CONTINUE XOR EQ19,I YES,BACKSPACE MODE STA EQ19,I KNOCK OUT BIT 2 LDA BIT15 START READ JMP RTNW UPON RETURN P.94 LDA EQ19,I CHECK FOR R/LF DELAY MODE AND B3 CHECK FOR STALL SZA JMP STALL WE MUST DELAY CPA EQ10,I BUFFER EMPTY ? JMP EOR YES; OUTPUT END OF RECORD P.95 LDB EQ9,I GET BYTE POINTER ISZ EQ9,I CLE,ERB JSB MAPRD GET NEXT CHARACTER SEZ,RSS ALF,ALF AND B177 ISZ EQ10,I END OF BUFFER JMP RTNW NO, CONTINUE CPA BA YES; BACK ARROW? RSS YES OMIT R/LF JMP RTNW OUTPUT CHARACTER LDA EQ8,I GET TRANSMISSION SSA LOG AND CMA,INA MAKE POSITIVE IF NEEDED STA EQ6,I JSB GEND TELL P GOOD END JMP RTNW1 FORCE TIMEOUT * CD NOP LDA EQ19,I GET CR DELAY ALF (R02) COUNT AND B17 CMA STA EQ10,I LDA EQ19,I SET AND DMASK (R02) CR DELAY IOR B (R02) PUT IN FLAG INA MODE STA EQ19,I IN STATUS JMP CD,I * * END OF OUTPUT PROCESSOR * EOR CLB (R02) WRITE FLAG JSB CD SET UP EQT FOR STALL LDA RETN SEND CR RTNW LDB SAVEA IS THIS INIT.?? CPB DM1 IOR BIT14 YES, START WRITE RTNW0 LDB EQ14,I ISZ LWRET RET TO P.D. RTNW1 JMP LWRET,I * SKP * * STALL PROCESSING * STALL ISZ EQ10,I BUMP STALL COUNT JMP P.14 CONTINUE STALL LDA EQ19,I GET STATUS SLA,RSS JMP P.13 LINE FEED DELAY SO FINISHED INA SWITCH STA EQ19,I TO LINE ALF,ALF (R02) DELAY ELA,RAR (R03) SET E=READ/WRITE FLAG AND B17 CMA LF DELAY COUNT STA EQ10,I AND SET COUNTER LDA EQ24,I IS THE ECHO CMA BIT, BIT 12 OFF? AND BIT12 SZA,RSS (R03) JMP *+3 (R03) ECHO ON LDA BIT12 (R03) DOING READ? SEZ,RSS (R03) LDA LF (R03) NO, OUTPUT LF JMP RTNW RETURN TO P.D. * P.13 EQU * LDA EQ19,I AND DM4 CLEAR DELAY MODES STA EQ19,I LDB EQ6,I CHECK RUBOUT FLAG RBL,CLE,SLB,ERB JMP P.6 WE GOT RUBOUT JSB GEND TELL P. GOOD END JMP RTNW1 WRITE; FORCE T/O P.14 EQU * LDA BIT12 SEND NULL JMP RTNW RETURN TO WRITE HED 12920A-B TABLES AND CONSTANTS * * TABLES AND CONSTANTS * UNIT BSS 1 CURRENT PORT SAVSC BSS 1 SELECT CODE LOADR DEF LODVR IS00A DEF IS00 SC EQU 10B DUMMY SC, RE-DONE BY CONFG AND A INTER. SPEED NOP SENSED SPEED OF CURRENT PORT COUNT OCT 0 GENERAL COUNTER B20 OCT 20 CMB12 OCT 167777 BIT7 OCT 200 BIT11 OCT 4000 BIT12 OCT 10000 BIT13 OCT 20000 BIT14 OCT 40000 B2 OCT 2 B3 OCT 3 B5 OCT 5 B7 OCT 7 1805 B37 OCT 37 B40 OCT 40 B77 OCT 77 B100 OCT 100 B377 OCT 377 RHALF EQU B377 ECLM OCT 177601 NB33 OCT -33 DM1 DEC -1 DM4 DEC -4 DM500 DEC -500 1805 SPC 2 SSAB OCT 140114 LOWER SA FOR HALF DUPLEX SEND. SCDAB OCT 140334 RAISE CD & LOWER CA - 202 RECEIVE. SCDAS OCT 140365 SUPPRESS CF INTERRUPTS. SSAF OCT 140134 RAISE SA ENABLE FOR CB AND SB=0. * RPARI OCT 120000 1805 SBITP DEF *+1 STOP BIT ADDRESS 1805 OCT 43400 1805 EVEN OR NO PARITY OCT 43600 1805 ODD PARITY SPC 2 * * SET UP THE EQT FOR 12920A-B * CF920 EQU * NOP LDB SBITP ADDR OF STOP BITS LDA EQ22,I AND B60 STA SAVEX SAVE PARITY ITEM CPA B20 ODD PARITY? INB YES BUMP TO S.B. OF 43600B CPA B60 PAD BIT 7 ?? INB YES LDA B,I GET S.B. WORD STA EQ20,I SAVE DEVICES STOP BITS. LDA EQ22,I AND B17 CALC. ADA B2 1 START AND 1 STOP BIT. STA B LDA EQ22,I AND BIT8 LOOK FOR STOP BITS SZA 2 STOP BITS? INB YES. LDA SAVEX NO. ONE. CHK PARITY. SZA PARITY ON? INB YES. STB A ADA DM1 AND B7 SAVE 3 BITS ONLY. ALF,ALF LENGTH STA EQ24,I SAVE CHAR LENGTH LDB SAVEX CPB B60 JMP *+3 SZB PARITY ON ? IOR BIT12 YES. PARITY PARAMETER. IOR TPARI SET TRANSMIT AND PARAMETER BITS. STA EQ25,I SAVE PARTIAL TRANS/PARM NO. LDB EQ22,I GET DIRECTOR LDA EQ24,I GET REC PRAM BLF,BLF LOOK AT SIGN SSB FOR ECHO?? IOR BIT12 YES IOR RPARI PUT IN REC ENAB BITS STA EQ24,I RESTOR TO EQT JSB CF92B GO SET SPEED * OUTPUT PARAMETERS COMPLETED. CLA STA EQ21,I STA EQ23,I STA EQ16,I INITIALIZE OTHER STA EQ12,I COUNTERS JMP CF920,I RETURN. * * SET THE SPEED PRAMETERS AND ECHO * CF92B EQU * NOP LDA EQ11,I FIND TRANSMIT AND B377 SPEED SZA,RSS ANYTHING THERE? JMP CF92C NO, LEAVE UNCHANGED CPA B110 110 BAUD?? IOR BIT8 YES,BUMP CHAR COUNT FOR 2 STOP BITS STA B YES, SAVE LDA EQ25,I GET CURRENT JSB SZCK CHECK SIZE ADA B PUT IN NEW STA EQ25,I RESTORE CF92C LDA EQ11,I FIND THE ALF,ALF RECEIVE AND B377 PARAMETER SZA,RSS ANYTHING THERE? JMP CF92D NOPE,CONTINUE CPA B110 110 BAUD?? IOR BIT8 YES, BUMP CHAR SIZE STA B SAVE TEMP LDA EQ24,I GET OLD JSB SZCK CHECK SIZE ADA B AND IN NEW STA EQ24,I SAVE CF92D CLA CLEAR STA EQ11,I LOC FOR TO ROUTINE JMP CF92B,I RETURN * * SZCK NOP STA COUNT SAVE TEMP AND RHALF LOOK AT BAUD RATE CPA B110 IS IT 110BAUD?? JMP SZCK0 YES, DEC. CHAR COUNT LDA COUNT NO, MASK FOR NEW SPEED AND LHALF JMP SZCK,I RETURN SZCK0 LDA COUNT GET PRAM AND LHALF MASK OUT SPEED ALF,ALF MOVE TO LOWER ADA DM1 DEC. CHAR SIZE BY 1 ALF,ALF MOVE BACK TO UPPER JMP SZCK,I RETURN * SPC 2 B36K OCT 36000 B76K OCT 76000 * * SRSCU - SAVES RETURN ADDR, SC, CONFIGURES OUTPUT ROUTINE FOR * OUTCC SUBROUTINE AND ACKNOWLEDGEMENT INSTRUCTION. * * CALLING SEQUENCE: LDB X00YZ INTERRUPT ENTRY ADDR. * JSB SRSCU SPC 1 SRSCU EQU * NOP STB RTADD SAVE RETURN ADDR. LIA 4 STA SAVSC SAVE SELECT CODE. IOR CLFAC CONFIGURE INTERRUPT STA CLFSC ACKNOWLEDGEMENT INST 1031XX XOR B1400 CONFIGURE LIA INST. 1025XX 1805 (R01) STA *+1 NOP STA DATA AND B76K STRIP OUT LDB SAVSC SEE IF EITHER CPB SAVS1 MUX DATA #1 RSS YES IFZ CPB SAVS2 MUX DATA #2 RSS YES XIF 1805 AND B36K NO KNOCK OUT BIT 14 STA UNIT UNIT AND RT. ALF JUSTIFY UNIT #. RAL,RAL IFZ 1805 LDB SAVS2 WHICH MUX CAUSED CMB,INB,SZB,RSS JMP MUX1 MUX #1 ,NO MUX#2 ADB SAVSC SSB,RSS ADA B20 MUST BE MUX #2, BUMP 16 XIF 1805 MUX1 STA DUNIT CMA,INA STA NDUNT JMP SRSCU,I * * * SETP SETS POINTERS TO CURRENT ENTRY PLUS ITS EXTENSIONS * * CALLING SEQUENCE: LDB ADEQT ADDR OF CURRENT EQT ENTRY * JSB SETP SPC 1 SETP EQU * NOP RBL,CLE,ERB CPB EQ1 ALREADY SET UP? JMP SETP,I YES, DON'T SET EQT'S STB EQ1 NO, UPDATE EQ'S ADB B4 1805 LDA WORK LOOP1 STB A,I INB INA CPA E16A LAST+1 1805 RSS DONE 1805 JMP LOOP1 * LDB EQ13,I LOOP2 STB A,I CPA E26A SEE IF LAST ONE 1805 JMP SETP,I RETURN 1805 INB INA JMP LOOP2 * WORK DEF EQ5 WORKING BUFFER ADDRESS 1805 E16A DEF EQ16 POINTS TO EQ16 1805 E26A DEF EQ26 POINTS TO EQ26 1805 DM16 DEC -16 HED PRIVILEGED INTERRUPT PROCESSING * * P00D1 - PROCESSES DATA INTERRUPTS FROM MUX # 1. * P00D1 EQU * NOP CLF 0 JSB SAVAL SAVE A,B,E, AND O. LDB P00D1 JSB P00DA 1805 ADA DM16 ADD -16 BASE 10 SSA UNIT # < 16 ? JMP P00D0 YES. LDB LASM1 IGNORE SPURIOUS INTERRUPTS IN SETUP 1805 P00DB EQU * 1805 ADA SPNTR FIND RIGHT SPEED FROM TABLE 1805 LDA A,I 1805 STA SPEED DIAG. SPEED 1805 SZB,RSS IF LASMX = 0, RETURN 1805 JMP RTN 1805 JSB SETP SET EQT POINTERS 1805 LDB EQ26,I 1805 SSB,RSS AUTO SPEED ACTIVE FOR THIS DEVICE? 1805 JMP RTN NO 1805 JMP P.00D GO PROCESS CHAR FOR AUX CHNLS * P00D0 ADA B20 ADD +16 JSB P00DC FIX UP EQT STUFF 1805 SSA AUTO SPEED REQUIRED FOR THIS MAIN? 1805 STB LASM1 NO - UPDATE LAST MAIN. 1805 JMP P.00D * * P00DC NOP FIX UP EQT'S IN AUTO SPEED 1805 ALF ADA NDUNT ADA EQT0 TO FIND THE LDB A,I PROPER EQT. SZB,RSS EQT ENTRY = 0 ? JMP P00DD YES. LDB A GET EQT ADDRESS JSB SETP LDB EQ1 LDA EQ26,I JMP P00DC,I RETURN 1805 * * P00DA NOP SET DEFAULT SPEED & SAVE ADDRESSES 1805 JSB SRSCU SAVE RTN ADDR,SC,ETC. 1805 LDA B5 MAIN SPEED 1805 STA SPEED SAVE IF THIS IS IT 1805 LDA DUNIT GET UNIT 1805 JMP P00DA,I RETURN 1805 * * * B14 OCT 14 1805 * P00DD ADA B14 FIND LDB A,I ADDR OF EXTENT ADB B5 AND SAVE ADA B2 BUMP TO STA COUNT EQT15 ADDRESS FOR TO 1805 LDA DATA CAUSED THE INT AND RHALF MASK OUT UPPER STA TSAVE (R10) SAVE CHAR LDA B,I (R10) GET EQ21 WORD AND LHALF (R10) SAVE STATUS IOR TSAVE (R10) MERGE WITH CHAR STA B,I SAVE IN EQ21 FOR SCHED CCA TIME OUT RETURN STA COUNT,I ON NEXT CLOCK 1805 JMP RTN TSAVE NOP (R10) SKP * * P00D2 PROCESSES DATA INTERRUPTS FROM MUX # 2. * IFZ DM32 DEC -32 1805 SPC 1 P00D2 EQU * NOP CLF 0 JSB SAVAL SAVE A,B,E, AND O. LDB P00D2 JSB P00DA SET STUFF UP 1805 ADA DM32 ADD -32 BASE 10 SSA UNIT # < 16 ? JMP P00DR YES. LDB LASM2 IGNORE SPURIOUS INTERRUPTS DURING SETUP JMP P00DB USE COMMON CODE 1805 * P00DR EQU * ADA B40 RESTORE UNIT #. JSB P00DC FIX UP EQT'S, ETC. 1805 SSA STB LASM2 JMP P.00D LASM2 NOP LAST MAIN TO INT. FOR MUX#2 1805 SAVS2 NOP MUX#2 S.C. 1805 XIF LASM1 NOP LAST MAIN TO INT. FOR MUX#1 1805 SAVS1 NOP MUX#1 S.C. 1805 SKP * * P00C1 - PROCESSING INTERRUPT FROM MUX #1 CONTROL BOARD # 1. * P00C1 EQU * NOP CLF 0 JSB SAVAL SAVE ENVIRONMENT LDB P00C1 P00CA EQU * JSB CISUB SAVE RETURN ADDR,SC, CONFIG. ETC. ALF ADA NDUNT ADA EQT0 ADDR OF EQT TBL JMP P.00C SKP * * P00C2 - PROCESSES INTERRUPTS FROM MUX # 1, CONTROL BOARD # 2. * P00C2 EQU * NOP CLFAC CLF 0 1805 JSB SAVAL SAVE ENVIRONMENT LDB P00C2 JMP P00CA SKP * * P00C3 - PROCESSES INTERRUPTS FROM MUX # 2. CONTROL BOARD # 1. * IFZ SPC 1 P00C3 EQU * NOP CLF 0 JSB SAVAL LDB P00C3 STB P00C1 FLAG FOR CONTROL BOARD 1 JMP P00CA 1805 SKP SPC 1 * * P00C4 - PROCESSES INTERRUPTS FROM MUX # 2, CONTROL BOARD # 2. * P00C4 EQU * NOP CLF 0 JSB SAVAL LDB P00C4 JMP P00CA 1805 XIF SKP * * P.00C IS CALLED BY P00C1-4 TO COMPLETE CONTROL BOARD * INTERRUPT PROCESSING. * SPC 2 P.00C EQU * LDB A EQT ADDRESS JSB SETP SET POINTERS LDA DATA JSB OUTCC JSB UPD23 UPDATE EQT23. (CURRENT LINE STATUS. LDB EQ22,I WHICH CONTROL SIGNAL CHANGED ? SSB FULL DUPLEX TERM? JMP P00C9 YES. LDA EQ26,I AND B60 SZA,RSS XFLG = 0 ? JMP ERTN YES. EXIT. CPA B20 TRANSITION STATE = RECEIVE ? JMP PC1 YES. CHK LINE OPEN STATUS. JSB FCL12 NO. TRANSITIONING TO SEND STATE. CPA B1 CC UP AND CF DOWN? RSS YES JMP RTN NO LDA EQ26,I LOOK FOR LINE TURN AND B3 TO FROM READ TO WRITE-FIRST TIME SZA,RSS JMP P00C8 NOT FIRST TIME XOR EQ26,I REMOVE FIRST TIME STA EQ26,I FLAG LDA EQ22,I IS THIS HALF DUPLEX AND BIT14 WITH SECONDARY SZA,RSS CHANNEL? JMP P00C8 NO THE NEXT COMMANDS ALREADY GIVEN LDA SCDAS DIS CF, CC,CA=1, ENAB CD=0 JSB COUT TO MUX CONT. #1 JMP RTN P00C8 STB A YES. CHKCB AND SB. AND B3 CPA B3 "CB AND SB" UP ? JMP PC2 YES. JMP RTN NO. WAIT FOR THEM. * * PROCESS FULL DUPLEX INTERRUPTS HERE. * SPC 1 P00C9 EQU * LDA EQ26,I AND B60 SZA,RSS DO WE EXPECT THIS INTERRUPT? JMP ERTN NO JSB CLINE GO CHECK THE LINE SSB,RSS CC AND CF UP? JMP PC2 YES. COMPLETE LINE OPEN. JMP RTN NO. EXIT. * * PROCESS LINE OPEN RECEIVE/AUTO SPEED FOR HALF DUPLEX DEVICES. * SPC 1 PC1 EQU * JSB CLINE SSB LINE STATUS = RECEIVE? JMP PC5 PC2 LDA EQ26,I SSA AUTO-SPEED IN PROGRESS? JMP RTN YES. WAIT FOR DATA INTERRUPTS. ALF,SLA IS THIS LINE OPEN - BIT 12 ON? RSS JMP PC3A NO,LINE TURNAROUND PC3 LDA DM200 YES, WAIT 2 SECONDS 1805 9/30/77 JMP COM06 EXIT AND WAIT FOR TIMEOUT. 1805 PC3A SSA SPECIAL XFER TO READ? JMP PC4 YES, LET T.O. DO WORK LDA EQ26,I IS THIS A WRITE AND B60 CPA B40 OR A READ JMP PC4 WRITE, LET T.O.DO WORK IFZ 1805 LDB SAVS1 GET MUX #1 SC LDA SAVS2 MUX #2 SC CMA,INA,SZA,RSS JMP PC3B USE MUX #1 SC ADA SAVSC IS THIS MUX #2? SSA,RSS LDB SAVS2 YES USE #2 PC3B STB SAVSC SAVE SC JSB CONFG GO CONFIGURE XIF 1805 CLA,INA SET STATE READ STA EQ26,I RESTORE LDA EQ24,I RE-ENABLE FOR JSB OUT READ CLA CLEAR TIMERS JMP COM06 AND EXIT 1805 PC4 CCA STA EQ15,I SET SYSTEM AND STA EQ16,I PHYSICAL FOR NEXT TICK. JMP RTN RETURN PC5 LDA EQ26,I LINE OPEN OR TURN ALF,SLA BIT 12 ON IF OPEN JMP PC3 OPEN, WAIT 2 SEC MORE. LET T.O. DO WORK JMP RTN LINE TURN * DM200 DEC -200 1805 FSTAT NOP * * * LINE ERROR DURING READ OR WRITE * ERTN EQU * IFZ LDB SAVS1 GET 1ST MUX S.C. LDA DUNIT SEE IF REQ FOR AND B20 1ST OR 2ND MUX (BIT 4) SZA WELL??? LDB SAVS2 2ND MUX STB SAVSC (R06) SET BASE SELECT CODE JSB CONFG GO CONGIGURE XIF LDA EQ21,I FIND OUT AND BIT14 WHAT HAPPENED SZA,RSS IS SOMETHING IS WRONG JMP ERT1 NO MUST BE BREAK JSB LCS1 YES, CLOSE THAT LINE...NOW. CLA NOW RESET THE PHYSICAL STA EQ16,I TIME-OUT CLOCK CCA TIMEOUT TO TELL STA EQ15,I OPERATOR OR SYSTEM ERT1 LDA EQ1,I IS THERE A PROGRAM WAITING?? SZA,RSS JMP RTN RETURN TO SYSTEM CLA NOW SEE IF THE LINE WAS IN LDB EQ6,I READ OR WRITE SLB,RSS JMP P00WR TRYING TO DO WRITE JMP P00RR TRYING TO DO READ SKP * P.00D IS USED TO PROCESS ALL DATA INTERRUPTS. * BOTH P00D1 AND P00D2 CALL P.00D TO COMPLETE DATA INTERRUPT * PROCESSING. * SPC 1 P.00D EQU * LDA EQ26,I AND B60 SZA DROP DATA INTER. DURING TRANSITION. JMP RTN LDA EQ19,I (R02) TRYING TO COMPLETE? AND B40 (R02) SZA (R02) JMP RTN (R02) YES, IGNORE ALL INTS! IFZ 1805 JSB CONFG CONFIGURE I/O INSTRUCTIONS. XIF 1805 LIB21 LIB SC+1 = CURRENT DATA STATUS. 1805 STB FSTAT SPC 1 LDB EQ26,I SSB AUTO-SPEED IN PROGRESS? JMP P00CR YES. SLB,RBR LINE STATE = RECEIVE ? JMP RDSTA YES. SLB,RSS NO. LINE STATE = SEND ? JMP RTN ERROR. SPC 2 * CHECK STATUS FOR WRITE REQ. DATA BOARD INTERRUPT. SPC 1 LDA EQ22,I SSA,RSS FULL DUPLEX ? JMP CWST1 NO. SKIP DATA STATUS TEST. LDB FSTAT GET DATA STAUTS. SLB,RSS INTERRUPT DUE TO DATA XMIT ? JMP BKCHK NO. RECEIVED DATA. CHK BREAK. CWST1 CLA YES. JMP P00WR CONTINUE WRITE. SPC 1 * CHECK DATA FOR BREAK CHAR (10 ZEROS IN LSB) SPC 1 BKCHK EQU * LDA DATA IF 10 LSB OF AND B1777 DATA = 0, THEN SZA BREAK. JMP RDSTA NO BREAK DETECTED. PAUSE? LDA BIT12 SET BREAK STATUS BIT. JMP P00WR CALL LOGICAL DVR. * B1777 OCT 1777 B50T OCT 50000 1805 SPC 1 * CHECK STATUS FOR READ REQUEST DATA BOARD INTERRUPT. SPC 1 RDSTA EQU * LDB FSTAT GET DATA STATUS. SLB IF X-MIT INTERRUPT RETURN. JMP RTN LDA DATA (R02) CHECK FOR BRK ON READ AND B1777 (R02) SZA,RSS (R03) TEN ZEROS ??? JMP RTN (R02) YES, IGNORE BREAK CLA RBR,SLB LOST CHAR INDICATED ? IOR BIT13 YES. DATA ERROR. STA SAVEX LDB EQ22,I BLF,BLF BLF,SLB ODD PARITY ? JMP RDOPC YES. CHK PARITY BIT. RBR,SLB EVEN PARITY ? JMP RDEPC YES. RDST1 LDA DATA PARITY OFF !!! AND RHALF MERGE STATUS IOR SAVEX WITH CHAR AND JMP P00RR CALL LOGICAL DVR. RDOPC EQU * ODD PARITY CHECKING ROUTINE. LDB DATA SSB,RSS ODD PARITY INDICATED? RDOPE IOR BIT13 NO. EVEN. ERROR!!!! RDOKP STA SAVEX YES. - PARITY OK JMP RDST1 SPC 1 RDEPC EQU * EVEN PARITY CHECKING ROUTINE. LDB DATA SSB EVEN PARITY INDICATED ? JMP RDOPE NO. ODD. ERROR !!!! JMP RDOKP YES. - OK SPC 1 * CALL LOGICAL DVR WITH CHARACTER AND STATUS FROM PHYSICAL DVR. (READ REQ.) SPC 1 P00RR EQU * LDB EQ17,I LOGR DVR ADDR ADB B2 STB LOGR SAVE STA SAVEX SAVE A RTE33 JSB RTE3C SWAP MAP IF USER AREA LDA EQ21,I GET LINE STATE AND B50T SAVE BITS 12 AND 14 IOR SAVEX RESTORE FOR LOGICAL DRIVER STA EQ21,I LDB EQ1 JSB LOGR,I INDICATING CONTINUATION JMP COM00 COMPLETION RETURN 1805 STA DADIR JSB SRTIM RAL,SLA START READ DIRECTIVE ? JMP P00SR YES. RAL,SLA START WRITE DIRECTIVE ? JMP P00SW YES, START WRITE RAL,SLA BIT 13? JMP COM05 YES, CONTINUE SSA BIT 12?? JMP NOOP YES, WRITE NULL JMP COM05 CONTINUE SPC 2 * START A READ OPERATION DIRECTIVE ISSUED BY LOGICAL * DRIVER IN RESPONSE TO BEING CALLED FROM P00D(PRIVILEDGED * INTERRUPT DATA PROCESSOR. SPC 1 P00SR EQU * JSB LNCK GO CHECK THE LINE JMP COM01 BAD LINE LDA DADIR IS IT AND BT152 START READ WITH CPA BT152 ECHO? JMP P00S1 YES LDA EQ22,I FIND OUT IF AND BIT7 IF ECHO IS REQUESTED ALF,RAL MOVE TO POS 12 STA B SAVE LDA EQ24,I GET REC PRAM. AND CMB12 CLEAR ECHO IF ON IOR B UPDATE STA EQ24,I AND RESTORE JMP P00S2 P00S1 LDA EQ24,I GET REC PRAM. AND CMB12 TAKE OUT ECHO STA EQ24,I RESTORE P00S2 JSB SR202 TURN LINE AROUND TO READ STATE. JMP COM05 EXIT. BT152 OCT 104000 1805 SPC 1 * START A WRITE OPERATION DIRECTIVE ISSUED BY LOGICAL * DRIVER IN RESPONSE TO BEING CALLED FROM P00D. SPC 1 P00SW EQU * JSB LNCK GO CHECK THE LINE JMP COM01 BAD LINE JSB SW202 JMP P00SX LINE ALREADY = SEND STATE. JMP COM05 TURNING LINE TO SEND STATE. P00SX LDA DADIR AND RHALF JSB CHAR OUTPUT CHAR JMP COM05 SPC 2 * CALL LOGICAL DVR WITH STATUS FROM PHYSICAL DVR. (WRITE REQ.) SPC 1 P00WR EQU * LDB EQ17,I LOG ADDR ADB B4 STB LOGR SAVE STA SAVEX SAVE A RTE35 JSB RTE3C SWAP MAP IF USER AREA LDA EQ21,I GET LINE STATE AND B50T SAVE BITS 12 AND 14 IOR SAVEX RESTOR FOR LOGICAL DRIVER STA EQ21,I LDB EQ1 JSB LOGR,I CALL TO LOGICAL DVR. JMP COM00 COMPLETION RETURN 1805 STA DADIR TO BE OUTPUT & DIRECTIVES. JSB SRTIM RAL,SLA START READ DIRECTIVE ? JMP P00SR YES. RAL,SLA NO. DIRECTIVE = START WRITE? JMP P00SW YES. RAL,SLA NOP? JMP COM05 RETURN, IGNORE INTERRUPT SSA NULL REQUESTED? JMP NOOP YES. SEND NULL JMP P00SX NO. CONTINUATION. SPC 1 * PROCESS AUTO SPEED SPC 1 P00CR EQU * LDA DATA GET INPUT AND RHALF CHAR. AND STA B LDA EQ21,I AND RHALF MASK CPA B LOOK LIKE EQ21 ENTRY? RSS YES JMP RTN NO, RETURN FOR NEXT LDA EQ26,I GET LINE STATE WORD IOR BIT8 TURN ON AC COMPLETE STA EQ26,I RESTORE LDA SPEED THIS IS IT ALF,ALF GET THAT SPEED IOR SPEED AND ADJUST IT STA EQ11,I SAVE FOR THE JSB CF92B SPEED SET ROUTINE JMP COM04 COMPLETE RETURN * * * * SEND NULL CHAR FOR STALL * NOOP LDA EQ20,I GET STOP BITS IOR B4377 TURN ON SYNC BIT JSB OUT SEND OUT JMP COM05 RETURN * B4377 OCT 4377 * * HED ASYNC MUX UTILITY ROUTINES * * COMMON RETURN * RTN EQU * LDA SAVEO CLO SLA,ELA STF 1 REGISTERS CLA STA P00C1 LDB SAVB RESTORE B CLFSC CLF SC ACKNOWLEDGE INTERRUPT RTE34 JMP RTE3D OVERLAID IF RTE-II LDA MPFSV LOOK AT MP FLAG SZA,RSS SYSTEM; WAS IT ON? JMP RTN2 YES LDA SAVA RESTORE A REG STF 0 ENABLE INTERRUPTS JMP RTADD,I AND RETURN RTN2 LDA SAVA RESTORE A REG STF 0 ENABLE SYSTEM STC 5 AND MP JMP RTADD,I EXIT * * RTE3D LDX XSV RESTORE PREVIOUS STATE OF CPU LDY YSV LDA UMPFL WERE USER MAPS SWAPPED? SZA,RSS JMP *+3 NO NEED TO RESTORE USER MAP LDA MAPAD YES POINT TO OLD MAP SAVE AREA USA RELOAD THE OLD MAP LDA MPFSV WAS MP FLAG ON?? SZA,RSS JMP RTN3 YES TURN ON MP LDA SAVA RESTORE A STF 0 TURN ON INT SYS. JRS DMSTS RTADD,I RELOAD STATUS, OLD MAP &RETURN RTN3 LDA SAVA RESTORE A STF 0 INT. SYS. ON STC 5 MP ON JRS DMSTS RTADD,I RELOAD STATUS, OLD MAP & RETURN * * RTE3B NOP SSM DMSTS SAVE STATUS OF MEMORY MAPPING SYSTEM CLA STA UMPFL CLEAR USER MAP SWAP FLAG JUST IN CASE STX XSV SAVE X&Y STY YSV JMP RTE3B,I * * RTE3C NOP MAP SWAP SUBROUTINE LDX DUNIT GET PORT # LBX MAPTB GET USER ID ADDRESS ( 0 FOR NO USER MAP) SZB,RSS NEED TO SWAP USER MAP? JMP RTE3C,I NO! STB UMPFL SET USER MAP RESTORE FLAG TO NON-ZERO LDA MAPAD POINT TO TEMPORARY STORAGE AREA FOR CRNT IOR BIT15 USER MAP, AND SET SIGN BIT TO USA UNLOAD OLD USER'S MAP. RESTORE ON EXIT LDA B GET ID SEGMENT ADDRESS JSB $PVMP ATTEMPT TO LOAD MAP OF CURRENT USER ID. SZA,RSS IF A#0 THEN MAP LOADED OK. JMP RTN FATAL ERROR (USER NOT IN MEMORY). * THEN DO NOT TRANSFER A CHARACTER, BUT MERELY IGNORE * THIS INTERRUPT. RTE-3 WILL HOUSEKEEP THE EQT FOR YOU * LDA EQ1 SET EQ1 NEG CMA,INA AS A FLAG STA EQ1 JMP RTE3C,I RETURN WITH USER MAP ENABLED MAPAD DEF MAPSV * SPC 2 * LOGR ISSUED A "START WRITE" DIRECTIVE WHEN CALLED FROM I.73 TO * INITIATE A WRITE I/O REQ. SPC 1 SWRIT EQU * JSB LNCK LINE STATUS = DOWN ? JMP BADLN YES JSB SW202 NO. LINE IN SEND STATE ? RSS YES. SKIP NEXT INSTRUCTION. JMP EXIT1 NO. LINE BEING TURNED TO SEND LDA DADIR GOOD LINE STATUS: AND RHALF JSB CHAR OUTPUT CHAR JMP EXIT1 SPC 1 * START WRITE ON A HALF DUPLEX LINE (202 MODEM). * RETURN: P+1 = LINE IN SEND DIRECTION (READY). * P+2 = LINE NOT IN SEND DIRECTION. SPC 1 SW202 EQU * NOP LDA EQ25,I GET TRANS PRAM JSB OUT SEND TO MUX LDB EQ22,I SSB,RSS FULL DUPLEX LINE? JMP SW20A NO. HALF DUPLEX. LDA EQ24,I YES. AND CMB12 INHIBIT ECHO JSB OUT ENABLE INTERRUPTS ON READ CHNL. LDA EQ19,I (R08) MODEM ENABLED? AND BIT3 (R08) SZA (R08) LDA DM4 (R08) STA B (R08) SET MASK 0=HW, -4=MODEM LDA EQ26,I (R07) SET TO SEND STATE.. AND B (R08) ..BUT DON'T CLEAR MODEM BIT UNLESS HARDWIRED ADA B2 (R07) STATE = SEND. STA EQ26,I SW20A EQU * LDA EQ26,I CPA B2 LINE ALREADY IN SEND STATE? JMP SW202,I YES. RETURN. SPC 1 * TURN OFF READ CHANNEL INTERRUPTS DURING WRITES !!!!! SPC 1 LDA BIT15 INHIBIT INTS. DURING T.A. JSB OUT OUTPUT NEW PARMS. TO MUX . SPC 1 LDA SSAB AND LOWER SA JSB COUT2 LDA EQ22,I IS THIS HALF-DUPLEX AND BIT14 WITHOUT SECONDARY SZA CHANNEL? JMP SW20B NO, COMMANDS TO BE GIVEN LATER LDA SCDAS DISABLE CF,CD=1,CA=1,ENABLE CC=0 JSB COUT OUT TO MUX SW20B LDA DADIR GET DATA AND DIREC. AND RHALF KEEP DATA STA B SAVE LDA EQ21,I EQT ENTRY AND LHALF SAVE STATUS IOR B BUILD NEW STATUS AND DATA FOR STA EQ21,I LINE TURN AROUND LDA EQ26,I SET IOR B40 STATE FLAG STA EQ26,I = SEND (2). LDB DM500 DELAY UP TO 5 SECONDS 1805 STB EQ16,I 1805 ISZ SW202 JMP SW202,I * * CHECK LINE AND * REPORT BAD LINE TO SYSTEM * LNCK NOP LDA EQ26,I SEE IF LINE IS AND B3 IN TRANS, OR REC. SZA,RSS JMP LNCK,I NO, LOOKS BAD LDA EQ21,I LOOK FOR BAD LINE AND BIT14 IN THE LINE STATUS SZA JMP LNCK,I LOOKS BAD RETURN ISZ LNCK LOOK OK BUMP FOR JMP LNCK,I RETURN * * REPORT BAD LINE TO SYSTEM * BADLN CCA STA EQ15,I TIME OUT TO JMP EXIT2 TELL OPERATOR OR SYSTEM * * SPC 1 * READ SPC 1 SREAD EQU * JSB LNCK LINE DOWN ? JMP BADLN YES JSB SR202 NO. TURN LINE TO RECEIVE STATE. JMP EXIT1 RETURN TO RTE. SPC 1 * THIS SUBROUTINE TURNS HALF DUPLEX LINES TO THE RECEIVE DIRECTION * * RETURN: * A=1 = LINE ALREADY IN RECEIVE DIRECTION. 1805 * A=0 = LINE IN PROCESS OF BEING TURNED TO RECEIVE DIRECTION. SPC 1 SR202 EQU * NOP LDB EQ22,I SSB,RSS FULL DUPLEX? JMP SR20A NO. HALF DUPLEX. LDA EQ19,I (R08) MODEM ENABLED? AND BIT3 (R08) SZA (R08) CONFIGURE MASK LDA DM4 (R08) STA B (R08) SAVE LDA EQ26,I (R07) SET LINE TO RECEIVE.. AND B (R08) WITHOUT TOUCHING MODEM BIT UNLESS HARDWIRED INA (R07) SET LINE STATE TO READ STA EQ26,I LDA EQ24,I JSB OUT SPC 1 * TURN ON READ CHANNEL INTERRUPTS DURING READS !!!!! SR20A EQU * LDA EQ26,I CPA B1 ALREADY THERE? JMP SR202,I LDA BIT15 INHIBIT INTS. DURING T.A. JSB OUT INHIBIT INT THIS PORT DURING LINE T.A. LDA SSAF SA=1, ENAB SB=0,CB=0 JSB COUT2 TO MUX CONT. #2 LDA SCDAB NO. TURN LINE AROUND JSB COUT KEEP CD AND LOWER CA LDA EQ26,I SET ITEM SR (START READ IOR B20 LINE STATE = RECEIVE STA EQ26,I LDB DM500 DELAY UP TO 5 SECONDS 1805 STB EQ16,I 1805 CLA CLEAR A FOR RETURN 1805 JMP SR202,I RETURN SPC 2 * SPC 2 * THIS SUBR UPDATES THE STATI OF BOTH CONTROL BOARDS. SPC 1 UPD23 EQU * NOP LDA DATA AND B3 STRIP UPPER BITS LDB RTADD CPB P00C1 BOARD # 1 INT. JMP P003 YES. LDB EQ22,I NO. BOARD # 2. SSB FULL DUPLEX? JMP RTN YES. ERROR. EXIT. P003 LDB EQ22,I UPDATE EQT23 SSB FULL DUPLEX? JMP P005 YES. LDB RTADD NO. CPB P00C1 CONTROL BOARD # 1 INT? JMP P004 YES. ALF,ALF NO. STA B BOARD # 2. LDA EQ23,I AND B3 KEEP BOARD # 1'S STATUS. JMP P005A P004 EQU * STA B LDA EQ23,I AND B1400 KEEP BOARD # 2'S STATUS. P005A IOR B P005 EQU * LDB EQ22,I RBL SSB,RSS IS SEC. CH. AVAILABLE ? IOR BIT8 NO. SET SEC. REC. (SB) ON. STA EQ23,I SET BOARD STATUS. SLB DEVICE HALF DUPLEX ? JMP TIMD1 NO. FULL DUPLEX. CLB YES. LDA EQ26,I AND B77 CPA B1 LINE IN RECEIVE STATE ? JMP P006R YES. CPA B2 LINE IN SEND STATE ? JMP P007W YES. JMP TIMD2 NO. GOOD STATUS. LET TIMPH TURN * THE LINE AROUND AND CHECK STATUS. P006R EQU * LDA EQ23,I CHK LINE STATUS SIGNALS. AND B1003 KEEP "CB,CF, AND CC". CPA B3 "CF AND CC" UP ? JMP TIMD2 YES. GOOD RECEIVE STATUS. JMP TIMD0 NO. BAD RECEIVE STATUS. SPC 1 P007W EQU * LDA EQ23,I CHK LINE STATUS AND B1401 KEEP "CB,SB, AND CC" . CPA B1401 "CB,SB, AND CC" UP ? JMP TIMD2 YES. GOOD SEND STATUS. SLA,RSS IS "CC" UP?? JMP TIMD0 NO,DATA SET IS DOWN ALF,ALF SLA "SB" DOWN ? 1805 USED AS CONSTANT (8) JMP TIMD0 NO. LINE ERROR. LDB BIT12 YES. BREAK. JMP TIMD2 TIMD1 EQU * FULL DUPLEX. CLB LDA EQ23,I AND B3 103 ,S SHOULD ALWAYS = B3. CPA B3 BOTH CF AND CC UP???? RSS TIMD0 LDB BIT14 LINE ERROR !!!!!!!!!! TIMD2 EQU * LDA EQ21,I SAVE LINE STATUS IN EQ21, LEFT HALF AND RHALF MASK IOR B PUT IN STATUS STA EQ21,I SAVE JMP UPD23,I RETURN. SPC 2 * CHECK LINE STATUS TO SEE IF HALF DUPLEX LINE HAS * COMPLETED LINE TURNAROUND FROM SEND TO RECEIVE * * CLINE EQU * NOP * FETCH CONTROL STATUS AND FORMAT * I EXPECT THE FOLLOWING STATUS: * * * 1. CC (DATA SET READY) - UP * 2. CF (CARRIER) - UP * 3. CB (CLEAR TO SEND) - DOWN * JSB FCL12 AND B3 CPA B3 CC AND CF UP? JMP CLENY YES CLENX CCB NO JMP CLINE,I RETURN INDICATING BAD LINE CLENY LDA B AND B2 SZA CB DOWN? AND SB DON'T CARE JMP CLENX NO CLB INDICATE LINE IN READ STATE JMP CLINE,I RETURN * * B1003 OCT 1003 B1401 OCT 1401 B1400 OCT 1400 B7717 OCT 77717 1805 DM3 DEC -3 1805 DM30 DEC -30 1805 SPC 2 * * GET CONTROL LINE STATUS FOR HALF DUPLEX LINE * FCL12 EQU * NOP LDA EQ23,I AND LHALF ALF,ALF STA B LDA EQ23,I AND RHALF JMP FCL12,I * SPC 2 * INITIATE LOGICAL TIMER SPC 1 SRTIM EQU * NOP SSB,RSS INITIATE/RESET TIMING ? JMP SRTM1 AND RETURN. STB EQ12,I SET TIME OUT VALUE JMP SRTRN RETURN SRTM1 SZB,RSS LOOK FOR LEAVE SAME STB EQ12,I CLEAR LOG TIMER SRTRN LDB EQ21,I CLEAR ANY ELB,CLE,ERB TIME OUT STB EQ21,I FROM PAST JMP SRTIM,I RETURN. SPC 2 * * SETUP SUBROUTINE * SPC 1 TIMSB EQU * NOP CLA STA EQT15,I CLEAR CLOCK LDA EQT4,I FIND PORT NUMBER AND B37 GET 5 BIT PORT NUMBER JSB UNSET GO SET DUNIT,UNIT ETC. IFZ LDA DUNIT IS THIS MUX#1 OR MUX#2? AND B20 LOOK FOR THAT IN BIT 4 OF DUNIT LDB SAVS1 MUX#1 SELECT CODE SZA WELL?? LDB SAVS2 MUX#2 STB SAVSC SAVE FOR CONFIG. JSB CONFG CONFIGURE I/O INST. XIF 1805 JMP TIMSB,I RETURN * * SET DUNIT,NDUNT AND UNIT * * ENTER A=LOG. CHAN(SC) OR PORT NUMBER * UNSET NOP STA DUNIT CMA,INA STA NDUNT NEG OF DUNIT FOR EQT SEARCH CMA,INA MAKE POS AGAIN AND B17 TAKE ONLY LAST 4 BITS ALF,ALF SHIFT INTO HIGH ORDER RAL,RAL BITS 10-13 STA UNIT SAVE FOR OUTPUT JMP UNSET,I RETURN * * TIMRT HANDLES LOGICAL TIMEOUT * TIMRT JSB TIMSB LDA EQ21,I GET STATE FLAG IOR BIT15 SET LOGICAL TIME OUT STA EQ21,I FLAG TIMRX LDA EQ17,I ADDR OF LOG DVR LDB EQ6,I LOOK AT REQUEST SLB,RSS ADA B2 WRITE BUMP 4 ADA B2 STA LOGR SAVE IT LDA EQ21,I GET LAST LINE STAT+CHAR LDB EQ1 EQT ADDRESS IN B JSB LOGR,I THAT IT HAS TIMED OUT JMP C.11 ALLOW TIME OUT STA DADIR SAVE DATA-DIR. JSB SRTIM TRY AGAIN SSA,RSS START READ? BIT 15 JMP TWRIT NO JSB LNCK GO CHECK LINE RSS LOOKS BAD JMP TIMRG LOOKS GOOD JSB RECX1 OPEN LINE TO READ JMP TCONT FINISH UP TIMRG JSB SR202 START READ JMP TIMR1 MUST BE TURNED TWRIT RAL LOOK FOR SSA,RSS START WRITE. BIT 14 JMP TIMR1 ASSUME NOP, IGNORE JSB LNCK GO CHECK LINE RSS LOOKS BAD JMP TIMRH LOOKS GOOD JSB SENXP OPEN LINE TO WRITE JMP TCONT TIMRH JSB SW202 START WRITE RSS LINE IN WRITE JMP TIMR1 MUST TURN TO WRITE LDA DADIR GET DATA AND DIR. JMP TIMR4 OUTPUT LOWER 8 BITS TCONT LDA DADIR GET DATA AND RHALF KEEP RIGHT HALF STA EQ21,I SAVE AND CLEAR BAD LINE FLAG LDA EQ26,I TAKE OUT THE XOR BIT12 OPEN LINE FLAG STA EQ26,I JMP TIMR1 RETURN * * TIMPH HANDLES PHYSICAL TIMEOUTS * TIMPH EQU * JSB TIMSB LDA EQ26,I AND B60 SZA TRANSITION STATE NE 0? JMP TIMR2 YES 9/30/77 LDA EQ26,I CHECK TO SEE IF AND BIT8 TIME OUT IS FROM AUTO SPEED SZA,RSS COMPLETION JMP C.11 NO,LAST CHANCE,SOMETHING WRONG XOR EQ26,I YES,COMPLETE AUTO SPEED STA EQ26,I UPDATE EQ26 JMP C.12 COMPLETION RETURN TIMR1 JSB E15ST SET UP EQT 15 JMP C.2 RETURN THROUGH CONT. * * CHECK LINE OPEN BIT-12 * TIMP1 NOP LDA EQ26,I LOOK FOR AND BIT12 LINE OPEN-CLOSE???? SZA JMP TIMP2 (R05) NO, CHECK LINE TURN AROUND COUNT ISZ TIMP1 BUMP FOR ZERO IN BIT 12 JMP TIMP1,I RETURN * TIMP2 ISZ EQT8,I (R05) INC TURN COUNTER JMP TIMP1,I (R05) STILL OK, RETURN JMP XOFF (R05) BAD LINE, ABORT * TIMR2 CPA B20 RECEIVE? 9/30/77 RSS CK STATUS 9/30/77 JMP TIMWR NO,CONTINUE 9/30/77 * * WE HAVE HAD A TIME OUT IN RECEIVE. CHECK STATUS IF NO CF TURN LINE * JSB CLINE GO CHECK LINE FOR READ SSB,RSS IS IT READ? JMP TIMR3 YES,WE ARE OK 9/30/77 JSB TIMP1 IS THIS A LINE OPEN? RSS YES GO TO SEND JMP XOFF NO. THEN CAN'T TURN LINE JSB SENXP NO,TURN THE LINE TO SEND 9/30/77 JMP TIMR1 EXIT 9/30/77 * TIMR3 EQU * LDA EQ24,I ENABLE READ PORT JSB OUT CLA,INA LINE STATE TO STA EQ26,I RECEIVE STATE. JMP C.12 COMPLETION RETURN * TURNING LINE TO SEND STATE. TIMWR EQU * LDA EQ22,I IS THIS FULL DUPLEX? SSA,RSS JMP TIMW1 NO, HALF-DULPLEX JSB CLINE YES, CHECK LINE SSB LINE OK. IF B IS POS JMP XOFF SOMETHING WRONG, TIMEOUT JMP TIMW2 LOOKS OK. CONTINUE TIMW1 JSB FCL12 SLA,RSS CC UP ? JMP XOFF NO. TIMEOUT STB A YES. AND B3 CPA B3 CB AND SB UP ? RSS YES. LINE IN WRITE STATE. SKIP. JMP XOFF TIME OUT TIMW2 LDA EQ26,I SET AND B1177 LINE STATE IOR B2 TO SEND. STA EQ26,I JSB TIMP1 LOOK FOR LINE OPEN JMP TIMR5 IT IS LINE OPEN, COMPLETE LDA EQ21,I TIMR4 AND RHALF OUTPUT CHAR JSB CHAR FROM LOGICAL DVR. JMP TIMR1 EXIT. TIMR5 JSB SR202 LINE OPEN READ AFTER JMP TIMR1 ANY LINE OPEN * B1177 OCT 117000 * * DOWN THE LINE, CAN'T TURN. * XOFF JSB LCS1 CLOSE THAT LINE. LDA EQ21,I NOW SET THE IOR BIT14 BAD LINE FLAG STA EQ21,I CLA CLEAR THE STA EQ16,I PHY COUNTER JMP TIMRX GO TELL LOGICAL-BAD LINE * * COMPLETION HOUSEKEEPING * COM00 EQU * JSB LNCK GO CHECK LINE JMP COM01 LOOKS BAD LDA EQ5,I SPECIAL CASE... BREAK... AND B100 LOOK FOR IT SZA IF ZERO (NOT BREAK) SET TO RECEIVE JMP COM01 YES, IS BREAK SKIP SETTING TO REC. JSB SR202 LEAVE WITH LINE IN RECEIVE SZA 1805 JMP COM01 ALREADY THERE LDA EQ26,I SET PSEUDO IOR BIT11 LINE OPEN MODE STA EQ26,I IN STATE FLAG JMP COM05 CONTINUE TILL LINE TURN COM01 CLA STA EQ12,I CLEAR LOGICAL TIMER STA EQ16,I CLEAR PHYSICAL TIMER CCA STA EQ15,I INT ON NEXT CLOCK JMP RTN SPC 1 COM04 EQU * LDA EQ26,I AND B7717 CLEAR BITS 5&4(TRANS STATE) 4-15-75 STA EQ26,I LDA DM30 AUTO SPEED COMPLETE 1805 COM06 STA EQ16,I WAIT 300 MS TO CLEAR DIAG. PORTS 1805 COM05 JSB E15ST SET UP EQT15 1805 JMP RTN RETURN * * SET UP EQT15 SUBROUTINE * E15ST NOP SET EQT15 1805 CCB SET B TO -1 1805 LDA EQ16,I CHECK PHYSICAL 1805 SZA,RSS IS PHYSICAL SET? 1805 JMP E15L NO - CHECK LOGICAL 1805 STB EQ16,I FIX UP EQT16 FOR 1 TICK 1805 JMP E15X AND EXIT 1805 E15L LDA EQ12,I GET PHYSICAL TIMER 1805 SZA,RSS ACTIVE? 1805 JMP E15X NO - CLEAR EQT15 1805 STB EQ12,I -1 TO EQT12 1805 MPY D10 CHANGE FROM 100MS TO 10MS 1805 SSA,RSS IS IT POSITIVE? LDA BIT15 YES - MAKE BIG NEG. NUMBER 1805 E15X STA EQ15,I SET UP THE EQT AND EXIT 1805 JMP E15ST,I 1805 * * SAVAL - SAVES THE A,B,E,O, AND MPTFL DATA. SPC 1 SAVAL EQU * NOP DST SAVA SAVE A-AND B-REG. 1805 ERA,ALS SAVE E SOC INA STA SAVEO SAVE O LDA MPTFL STA MPFSV RTE32 JSB RTE3B JMP SAVAL,I * ************************************************************** * THIS AREA WILL BE USED ONLY AT STARTUP. * IT WILL THEN BE USED BY THE MAP SAVE TABLE * AND THE 16 OR 32 WORD MAP POINTER TABLE * DEPENDING ON THE NUMBER OF MULTIPLEXERS. * * *************CAUTION******************** * DO NOT USE CONSTANTS WHICH ARE DEFINED IN * THIS 48 OR 64 WORD AREA FOR ANYTHING ELSE, * AS THEY MAY BE WIPED OUT. * *************CAUTION******************** * ************************************************************* I.00 EQU * 1805 CLB BUILD "NOP" STB I.0 OVERLAY ENTRY TO PREVENT ANY REUSE LDA $OPSY RAR,SLA IS THE DMS FLAG ON? JMP I.01 YES! THEN THIS IS RTE-III STB RTE31 NO! ONLY RTE-II. KILL RTE-III CODE ENTRY POINTS STB RTE32 DITTO! STB RTE33 DITTO! STB RTE34 DITTO! STB RTE35 DITTO! STB RTE36 DITTO! 1805 STB RTE37 DITTO STB RTE38 DITTO STB RTE39 (R02) ..TWO MORE.. STB RTE40 (R02) SKP * I.01 EQU * LDA EQT# SET UP COUNT CMA,INA OF THE TOTAL NUMBER STA COUNT OF EQT ENTRIES * LDB EQTA SEARCH ADB B4 ALL I.001 LDA B,I ENTRIES UNTIL AND M374 DVS00 SZA,RSS EQT TYPE FOUND JMP I.002 NEXT1 ADB B17 MOVE TO NEXT ONE ISZ COUNT END OF EQT'S? JMP I.001 NO RETRY JMP ERROR YES,ERROR-NOT CONFIGURED RIGHT I.002 LDA B CHECK FOR THIS ADA DM3 DRIVER OR LDA A,I THE OTHER DVR00 CPA IS00A WELL?? RSS YES THIS IS THE RIGHT ONE JMP NEXT1 NOPE NOT IT CONTINUE ADB DM4 GET START ADDRESS STB EQT0 AND SAVE ADDR OF MUX#1 EQT'S ADB B3 BUMB TO CHANNEL SELECT CODE LDA B,I GET S.C. AND B77 MASK STA SAVS1 MUX#1 S.C. LDA B,I FIRST EQT WD 4 AND CMB05 MASK S.C. (PORT 0) TO 0 IOR B40 SELECT CODE 40 FOR PORT 0 STA B,I AND RESTORE * CHECK FOR 2ND MUX IFZ ADB D241 LOOK WHERE THE EQT LDA B,I SHOULD BE AND M374 MASK FOR TYPE SZA IS IT THERE? JMP I.003 NO,CONTINUE LDA B LOOK FOR THE ADA DM3 RIGHT DRIVER LDA A,I IN THE EQT CPA IS00A DVS00?? RSS YES JMP I.003 NO,NOT THERE ADB DM1 DROP BACK ONE LDA B,I GET MUX#2 CHANNEL AND B77 SELECT CODE STA SAVS2 SAVE IT LDA B,I RESTORE THE FIRST AND CMB05 EQT TO 0 IOR B60 MAKE ADDRESS 16 STA B,I FOR PORT NUMBER 0 ON MUX#2 ADB DM3 BUILD EQT ADDERSS STB EQMX2 SAVE ADDR XIF * SET THE AUTO SPEEDS I.003 LDA SAVS1 GET MUX#1 S.C. STA SAVSC MUX#1 S.C. JSB CONFG CONFIGURE FOR MUX#1 LDA BIT14 SET DIAG. SPEEDS AND CLEAR ALL PORTS STA UNIT INTO UNIT ADDRESS JSB SPSET SPEED FOR AUTO SPEED DETECT IFZ LDA SAVS2 DO WE HAVE THE MUX#2? SZA,RSS JMP I.004 NO,DO NOT SET SPEED MUX#2 STA SAVSC YES,CONFIGURE MUX#2 JSB CONFG CONFG ALL I-O LDA BIT14 SET FIRST DIAG CHANNEL STA UNIT INTO UNIT ADDRESS JSB SPSET OUTPUT AUTO SPEEDS LDA EQMX2 IS THERE A MUX#2? SZA,RSS WELL? JMP I.004 NOPE,CONTINUE CMA,INA YES,MAKE NEG. ADA EQT1 REQUEST FOR MUX#2? SSA,RSS JMP I.004 YES,DON'T RE-CONFG LDA SAVS1 NO,A MUX#1 REQUEST STA SAVSC RE-CONFG I-O INST. JSB CONFG FOR MUX#1 XIF JMP I.004 SKIP CONSTANTS, ETC. 1805 * * SET AUTO SPEEDS AND INHIBIT * INTERRUPTS ON ALL PORTS * SPSET EQU * NOP LDA SAVSC GET SELECT CODE 1805 IOR CLFAC SET UP CLF INSTR. 1805 STA CLFSE 1805 LDA DM5 SET COUNTER STA COUNT FOR 5 SPEEDS LDB SPNTR ADDR SPEED BUFFER STB SPEED SAVE FOR INDEX SPSE1 LDA SPEED,I GET SPEED CPA B110 110 BAUD ?? ADA B400 YES BUMP CHAR SIZE ADA B1204 JSB OUT OUTPUT TO MUX LDA UNIT GET UNIT ADDRESS ADA BIT10 BUMP TO NEXT STA UNIT RESTORE CHANNEL ADDRESS ISZ SPEED BUMP B TO NEXT SPEED ISZ COUNT ALL DONE? JMP SPSE1 NO,GO TO NEXT * INHIBIT INTERRUPTS CLA SET UNIT ADDRESS STA UNIT TO FIRST PORT LDB DM16 16 PORTS STB COUNT COUNTER SPSE2 LDA BIT15 ENABLE FOR READ PRAM JSB OUT SEND TO MUX LDB UNIT BUMP UNIT ADB BIT10 TO NEXT PORT STB UNIT AND SAVE ISZ COUNT THROUGH?? JMP SPSE2 NO CLFSE CLF SC CLEAR FLAG CAUSE ITS ON. JMP SPSET,I ALL DONE,RETURN * IFZ EQMX2 NOP ADDR OF MUX 2 EQT (R05) XIF * B1204 OCT 120400 BIT10 OCT 2000 DM5 DEC -5 * M374 OCT 37400 EXPENDABLE CONSTANT 1805 D241 DEC 241 EXPENDABLE CONSTANT 1805 DM6 DEC -6 EXPENDABLE CONSTANT 1805 ************************************************************* * THE DEFINITIONS BELOW ARE FOR VARIABLES AND TABLES * WHICH OVERLAY THE AREA FROM I.00 TO JUST BEFORE I.004 * BECAUSE THIS CODE IS USED ONLY ONCE AT STARTUP. * THIS ALLOWS SOME SAVINGS IN MEMORY USAGE. * ************************************************************* * MAPSV EQU I.00 SAVE AREA FOR ALTERNATE MAP 1805 MAPTB EQU MAPSV+32 ID SEGMENT ADDRESSES (1 PER PORT) 1805 IFN ### EQU MAPTB+16 SINGLE MUX 16 WORD MAPSV 1805 XIF IFZ ### EQU MAPTB+32 DUAL MUX 32 WORD MAPSV 1805 XIF EQ5 EQU ### 1805 EQ6 EQU ###+1 1805 EQ7 EQU ###+2 1805 EQ8 EQU ###+3 1805 EQ9 EQU ###+4 1805 EQ10 EQU ###+5 1805 EQ11 EQU ###+6 1805 EQ12 EQU ###+7 1805 EQ13 EQU ###+8 1805 EQ14 EQU ###+9 1805 EQ15 EQU ###+10 1805 EQ16 EQU ###+11 1805 EQ17 EQU ###+12 1805 EQ18 EQU ###+13 1805 EQ19 EQU ###+14 1805 EQ20 EQU ###+15 1805 EQ21 EQU ###+16 1805 EQ22 EQU ###+17 1805 EQ23 EQU ###+18 1805 EQ24 EQU ###+19 1805 EQ25 EQU ###+20 1805 EQ26 EQU ###+21 1805 DUNIT EQU ###+22 1805 RIGHT JUSTIFIED UNIT NO. NDUNT EQU ###+23 1805 NEGATIVE DUNIT EQ1 EQU ###+24 1805 FIRST ADDRESS OF EQT LOGR EQU ###+25 1805 POINTS TO LOGICAL DRIVER DATA EQU ###+26 1805 TEMP. DATA STORAGE DADIR EQU ###+27 1805 DATA AND DIRECTIVE SAVEX EQU ###+28 1805 TEMP. STORAGE SAVA EQU ###+29 1805 A REG. SAVE SAVB EQU ###+30 1805 B REG. SAVE MUST FOLLOW SAVA SAVEO EQU ###+31 1805 E & O REG. SAVE DMSTS EQU ###+32 1805 DMS STATUS SAVE XSV EQU ###+33 1805 X REG. SAVE YSV EQU ###+34 1805 Y REG. SAVE UMPFL EQU ###+35 1805 USER MAP RESTORE FLAG RTADD EQU ###+36 1805 RETURN ADDR. AFTER INTERRUPT SAVEA EQU ###+37 1805 DIFFERENT A REG. SAVERERRUPT MPFSV EQU ###+38 1805 MEM. PROTECT FLAG SAVE * * * END OF EXPENDABLE CODE * * . EQU 1650B EQT# EQU .+1 MPTFL EQU .+80 EQT1 EQU .+8 EQT4 EQU .+11 EQT5 EQU .+12 EQT6 EQU .+13 EQT7 EQU .+14 EQT8 EQU .+15 EQT9 EQU .+16 EQT10 EQU .+17 EQT11 EQU .+18 EQT12 EQU .+81 EQT15 EQU .+84 ORG * DRIVER LENGTH END