|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 97262 (0x17bee)
Notes: pts_type(SC)
Names: »DRDC22.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/DRDC22.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/DRDC22.SC«
IDENT DRDC22 REL 11.0 81-01-26 870105041100 ********************************************* * * PHILIPS TERMINAL SYSTEM PTS * * * DRDC22 : UNISCOPE 100 SYNCHRONOUS PROTOCOL * ON PTS 6800 * * ********************************************* * * EJECT * * * ENTRY POINTS * * ENTRY DC22AD ADDRESS BLOCK TERMINAL REQUESTS ENTRY IH2201 INPUT INTERRUPT ENTRY IH2202 OUTPUT INTERRUPT ENTRY DC22ON POWER ON ROUTINE * * * EXTERNAL REFERENCES * * EXTRN TDISP DISPATCHER ENTRY EXTRN SAVE8 SAVE A1-A8 ON A15 STACK EXTRN TENDIO COMPLETE I/O EVENT EXTRN SETIME SET TIMER EXTRN DWTCHP TERMINAL ADDRESS EXTRN DWTST DWT STATUS EXTRN DWTOR DWT ORDER EXTRN DWTECB DWT ECB EXTRN DC:MIN MOVE DATA TO USER BUFFER EXTRN DC:MOT MOVE DATA FROM USER BUFFER EXTRN DISEND COMPLETE REQUEST AND DISPATCH EXTRN INTSAV LAST INTERRUPT ADDRESS EXTRN PFPOST WAIT FOR POWER UP IF SET EXTRN DCSRED READ STATISTICS ENTRY POINT EXTRN DCSRLL RESET ALL STATISTICS BUFFERS ENTRY POINT EXTRN DCSUPS UPDATE STATISTICS ENTRY POINT IN DCSTAT EXTRN GETDNA VALIDATE AND CONVERT SYMBOLIC DTE ADDR EXTRN GETSNA VALIDATE AND CONVERT SYMBOLIC SUB ADDR EJECT ********************************************************************** * * REGISTER USAGE: * * A1 WORK (RETURN CODE) * A2 WORK * A3 WORK (BUFFER LENGTH) * A4 WORK (BUFFER POINTER) * A5 DRIVER STACK POINTER * A6 DWT ADDRESS * A7 ORDER CODE, DTETAB ADDRESS * A8 ECB ADDRESS * ************************************************************************ EJECT **************************************************************** * * CONDITIONAL ASSEMBLY * *************************************************************** * * A PROGRAM VERSION USING TOSS PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1 * MMUPAG EQU 0 * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0 * CPU852 EQU 0 * * * RECEIVE BUFFER LENGTH * X:A EQU 128 RECEIVE BUFFER LENGTH RBUFL EQU X:A * * * NUMBER OF RECEIVE BUFFERS * X:B EQU 4 RBUFNR EQU X:B NUMBER RECEIVE BUFFER * * INTERRUPT LOGGING * 0 = NO LOGGING * 1 = LOGGING * X:C EQU 0 LOGG EQU X:C * * POLL TIMEOUT VALUE IN NO OF 100 MS * X:D EQU 600 TIMPOL EQU X:D POLL TIME-OUT * * SUPPRESS NULL CHARACTERS * 0 = NO SUPPRESS * 1 = SUPPRESS * X:E EQU 1 SUPPRESS NULL NULTST EQU X:E * * UNIT TYPE * 0 = UNIT TYPE 6834 * 1 = UNIT TYPE 6857/SALCUZ * X:F EQU 0 SALCUZ EQU X:F * * INPUT DEVICE ADDRESS * IFT SALCUZ=0 X:G EQU /02 INPUT DEV ADDR DCDEVI EQU X:G INPUT ADDR DCDEVO EQU DCDEVI+/10 OUTPUT ADDR XIF IFT SALCUZ=1 X:G EQU /0A INPUT DEV ADDR DCDEVI EQU /0A INPUT ADDR DCDEVO EQU DCDEVI+1 OUTPUT ADDR XIF * AUXILIARY DEVICE HANDLING * 0 = NO AUXILIARY * 1 = AUXILIARY * X:H EQU 0 AUX EQU X:H AUXILIARY DEVICE HANDLING * * UNISCOPE 100/200 EMULATION * 0 = NO EMULATION * 1 = EMULATION X:I EQU 0 EMU100 EQU X:I * * STATISTICS * 0 = NO STATISTICS * 1 = STATISTICS * X:J EQU 0 STATISTICS STAT EQU X:J * * MMU BUFFER LENGTH * X:K EQU 1000 TBUFL EQU X:K MMU BUFFER LENGTH * EJECT * * BUFFER SUPERVISION TIMER * BUFTIM EQU 0 TIMBUF EQU 1800 TIMEOUT 180 S ON BUFF SUPERVISION * * * DEVIND EQU 0 DEVICE INDEX DATA COMMUNICATION BUFLEN EQU TBUFL+TBUFL * * * INTERNAL SPECIAL CONDITIONAL PARAMS * BFBUSY EQU 0 BUFFER BUSY HANDLING =0 STANDARD =1 AUX-TYPE SBS EQU 0 SPARBANKEN STOCKHOLM =0 NO SBS CODE =1 SBS CODE IFT SBS=1 EJECT **************************************************** * * SPECIAL WHEN SBS = 1 * * - ONLY SID 50 AND 51 ACCEPTED * * - RECEIVE TEXT: * THE 7TH CHAR AFTER STX ID USED AS TERMINAL ID * * - TRANSMIT TEXT: * SID 51 IS USED * * - SPECIFIC POLL IS HANDLED AS A GENERAL POLL * EXEPT IN BUSY SITUATIONS * *********************************************************** XIF EJECT ************************************************************************** ************************************************************************** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** D R D C 2 2 - U N I S C O P E 1 0 0 / 2 0 0 D R I V E R ** ** ** ** ** ** D A T A D E F I N I T I O N S E Q U A T E S ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ************************************************************************** ************************************************************************** EJECT * ************************************** * * DCDEFS COMMON DEFS FOR DC DRIVERS/PACKAGES * ************************************** *************************************** * * TABLE AND PACKET LAYOUTS * *************************************** * * ECB, EVENT CONTROL BLOCK * ECBFC EQU 0 FILE CODE WORD ECBBA EQU 2 BUFFER ADDRESS ECBRL EQU 4 REQUESTED LENGTH IN BYTES ECBEL EQU 6 EFFECTIVE LENGTH IN BYTES ECBRC EQU 8 RETURN CODE ECBCW EQU 10 CONTROL WORD ECBCW1 EQU ECBCW CONTROL WORD 1 ECBCW2 EQU 12 CONTROL WORD 2 * * EJECT * * DWT, DEVICE WORK TABLE * * * ................... * 0 . DWTCHP . * ................... * 2 . DWTST . * ................... * 4 . DWTECB . * ................... * 6 . DWTOPT . DWTOR . * ................... * 8 . DWTADR . * ................... * 10 . DWTTAB . * ................... * 12 . DWTWAT . * ................... * 14 . DWTTQ . * ................... * (16). DWTUEC . IF MMUPAG * ................... * (18). DWTMEC . IF MMUPAG * ................... * DWTDRD +2 . DWTSTB . * ................... * +4 . DWTCHD . * ................... * +6 . DWTCHN . * ................... * +8 . DWTLAD . * ................... * +10 . DWTRAD . * ................... * +12 . DWTDR1/SUB . * ................... * +14 . DWTRCL . * ................... * +16 . DWTRTV . * ................... * +18 . DWTRTP . * ................... * +20 . DWTOPE . * ................... * +22 . DWTOPN . * ................... * +24 . DWTIPC . * ................... * +26 . DWTIPT . * ................... * +28 . . * / DRIVER DEPEND / * / / * / / * ................... * . STATISTIC . IF STAT AND DWTSTB /=0 * / BUFFER / * ................... * DWTTQ EQU 14 DWTUEC EQU DWTTQ+2 DWTMEC EQU DWTUEC+2 IFT MMUPAG=0 DWTDRD EQU DWTTQ+2 START OF DC DEPENDENT AREA XIF IFT MMUPAG=1 DWTDRD EQU DWTMEC+2 START OF DC DEPENDENT AREA XIF DWTSTB EQU DWTDRD OFFSET REL START DWT TO STATISTIC BUFF IF ANY DWTCHD EQU DWTDRD+2 CONFIG CHAIN LINK HEAD DWT DWTCHN EQU DWTDRD+4 CONFIG CHAIN LINK NEXT DWT DWTLAD EQU DWTDRD+6 LOCAL SYMBOLIC DTE ADDRESS DWTRAD EQU DWTDRD+8 REMOTE SYMBOLIC DTE ADDRESS DWTDR1 EQU DWTDRD+10 DRIVER DEP WORD 1 DWTSUB EQU DWTDR1 SYMBOLIC SUBADDRESS DWTRCL EQU DWTDRD+12 REQUEST CONTROL WORD DWTRTV EQU DWTDRD+14 REQUEST TIMER VALUE DWTRTP EQU DWTDRD+16 REQUEST TIMER POINTER DWTOPE EQU DWTDRD+18 O/P DATA Q EXPEDITED/STATUS LINK NXT DWT DWTOPN EQU DWTDRD+20 O/P DATA Q NORMAL LINK NXT DWT DWTIPC EQU DWTDRD+22 I/P DATA Q LINK TO BUFFER DWTIPT EQU DWTDRD+24 I/P DATA TIMER POINTER DWTDID EQU DWTDRD+26 LAST AI DEVICE FOR THIS TERMINAL DWTPRT EQU DWTDRD+28 PRINT MODE INDICATOR DWTLST EQU DWTDRD+30 DEVICE LIST (8) DWTSTA EQU DWTDRD+46 DWT STATUS EJECT * * DTE, DTE CONTROL TABLE * * * ................... * 0 . DTECHP . * ................... * 2 . DTEST . * ................... * 4 . DTEECB . * ................... * 6 . DTEOPT . DTEOR . * ................... * 8 . DTEADR . * ................... * 10 . DTETAB . * ................... * 12 . DTEWAT . * ................... * 14 . DTETQ . * ................... * (16). DTEUEC . IF MMUPAG * ................... * (18). DTEMEC . IF MMUPAG * ................... * DTEDRD +2 . DTESTB . * ................... * +4 . DTECHD . * ................... * +6 . DTECHN . * ................... * +8 . DTELAD . * ................... * +10 . . * / DRIVER DEPEND / * / / * / / * ................... * . STATISTIC . IF STAT AND DTESTB /=0 * / BUFFER / * ................... * DTECHP EQU 0 DTE ADDRESS DTETQ EQU 14 DTEUEC EQU DTETQ+2 DTEMEC EQU DTEUEC+2 IFT MMUPAG=0 DTEDRD EQU DTETQ+2 START OF DC DEPENDENT AREA XIF IFT MMUPAG=1 DTEDRD EQU DTEMEC+2 START OF DC DEPENDENT AREA XIF DTESTB EQU DTEDRD OFFSET REL START DTE TO STATISTIC BUFF IF ANY DTECHD EQU DTEDRD+2 CONFIG CHAIN LINK HEAD DTE DTECHN EQU DTEDRD+4 CONFIG CHAIN LINK NEXT DTE DTELAD EQU DTEDRD+6 LOCAL SYMBOLIC DTE ADDRESS * DRIVER DEPENDENT DTEPLS EQU DTEDRD+8 PHYSICAL LINK STATUS DTEDLS EQU DTEDRD+10 DATA LINK STATUS DTESTA EQU DTEDRD+12 DTE STATUS DTEWRQ EQU DTEDRD+14 WRITE REQUEST QUEUE * STATITICS BUFFER STWSID EQU DTEDRD+18 RESERVED FOR SYMBOLIC ID STWCST EQU DTEDRD+20 COUNTER STATUS INDEX STWMIX EQU DTEDRD+26 MAX COUNTER INDEX STWCTA EQU DTEDRD+28 COUNTERS EJECT * * COUNTER INDECES - PARAMETER-1 EQUATES * * REQUEST LEVEL COUNTERS: * CSRCON EQU /01 CONNECTIONS ESTABLISHED CSRCBY EQU /02 CONNECTION NOT ESTABLISHED - BUSY CSRMSR EQU /03 MESSAGES RECEIVED CSRCHR EQU /C5 CHARACTERS RECEIVED CSRMST EQU /06 MESSAGES TRANSMITTED CSRCHT EQU /C8 CHARACTERS TRANSMITTED CSRTOP EQU /09 TIMEOUT CSRABT EQU /0A ABORTED CSRERR EQU /0B ERROR CSRTRE EQU /0C TRANSMISSION ERROR CSRXC1 EQU /0D PROTOCOL DEPENDENT * * LINK LEVEL COUNTERS CSSRBL EQU /10 SYNCH DATA BLOCKS RECEIVED CSSRBY EQU /11 " DATA BLOCKS REJECTED BUFFER BUSY CSSRBO EQU /12 " DATA BLOCKS REJECTED BUFFER OVERFLOW CSSRAB EQU /13 " DATA BLOCKS REJECTED ABORTED CSSRPE EQU /14 " DATA BLOCKS REJECTED PARITY ERROR CSSTBL EQU /15 " DATA BLOCKS TRANSMITTED CSSTRT EQU /16 " DATA BLOCKS RETRANSMITTED CSSTAB EQU /17 " DATA BLOCKS ABORTED CSSXC1 EQU /18 NBR OF REPLY REQUESTS TRANSMITTED CSSXC2 EQU /19 NBR OF DATA BLOCKS WITH INCORRECT HEADER CSSXC3 EQU /1A NBR OF TIMES POLL TIMEOUT HAS OCCURED * DTE/DCE LEVEL COUNTERS CSCDTE EQU /28 DTE NOT OPERABLE CSCDIT EQU /29 I/P THROUGHPUT ERROR CSCDOT EQU /2A O/P THROUGHPUT ERROR CSCDCE EQU /2B DCE NOT OPERABLE CSCXC1 EQU /2C CONTROL UNIT DEPENDENT CSCXC2 EQU /2D " CSCXC3 EQU /2E " EJECT * * * REQUEST HANDLING * * * ORDER CODE (A7) * OPEN EQU /21 OPEN CLOSE EQU /22 CLOSE CONPAS EQU /27 CONNECT PASSIVE DISCO EQU /2F DISCONNECT RECEIVE EQU /02 RECEIVE SEND EQU /06 SEND RSTAT EQU /00 READ STATUS SSTAT EQU /38 SET STATUS STATIS EQU /2D READ/RESET STATISTICS STIMOT EQU /39 SET TIMEOUT VALUE * * OPTIONS: * TYPRR EQU /43 RESET STATISTICS AFTER READ * * RETURN CODE EQUATES (A1) * RCREQ EQU /8000 REQUEST ERROR RCABRT EQU /4000 REQUEST ABORTED RCBELL EQU /0400 BELL MESSAGE RCTIME EQU /0040 TIMEOUT RCSEQ EQU /0010 SEQUENCE ERROR RCLGTH EQU /0008 ILLEGAL LENGTH RCLOGC EQU /0002 LOGICAL CONNECTION ERROR RCPHYC EQU /0001 PHYSICAL CONNECTION ERROR * * * EJECT ********************************************************** * * LINE CONTROL CHAR EQU:S * ********************************************************** * SYN EQU /16 SOH EQU /01 STX EQU /02 ETX EQU /03 SID EQU /50 DID EQU /70 GRID EQU /20 DLE EQU /10 ACK1 EQU /31 WABT EQU /3F DC2 EQU /12 CHDSL EQU /72 IFT SALCUZ=0 PAD EQU /FF PAD CHAR XIF IFT SALCUZ=1 PAD EQU /7F XIF * BIT0 EQU /8000 STATUS AI NBIT0 EQU /7FFF STATUS AI EJECT ************************************************************* * * LINE CONTROL UNIT FUNCTION CONTROL EQU:S * ************************************************************* * IFT SALCUZ=1 CBBREK EQU /80 CIO START BREAK CBECHO EQU /10 ECHO CBNPAR EQU /0 NO CHAR PARITY CBEPAR EQU /4 EVEN CHAR PARITY CBOPAR EQU /C ODD CHAR PARITY * CBSTOP EQU /0 CIO STOP INPUT/OUTPUT * CBDISC EQU /1 CIO DISCONNECT MODEM FROM LINE XIF IFF SALCUZ=1 CBCARR EQU /100 CARRIER ON XIF * * IFT SALCUZ=1 PARITY EQU CBOPAR ODD PARITY FOR ASCII XIF EJECT *************************************************** * * LINE CONTROL UNIT SST STATUS BITS * *************************************************** * SBNOOP EQU /1 SST STATUS MODEM NOT OPERABLE SBTHRU EQU /02 THROUGHPUT ERROR IFT SALCUZ=1 SBPARI EQU /04 CHAR PARITY ERROR XIF SBCARR EQU /20 CARRIER OFF SBCALL EQU /40 INCOMING CALL * IFT SALCUZ=1 SBERR EQU /27 SBNOOP,SBTHRU,SBPARI,SBCARR XIF IFF SALCUZ=1 SBERR EQU /23 SBNOOP,SBTHRU,SBCARR XIF EJECT ************************************************************************** ************************************************************************** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** D R D C 2 2 - U N I S C O P E 1 0 0 / 2 0 0 D R I V E R ** ** ** ** ** ** A P P L I C A T I O N R E Q U E S T H A N D L I N G ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ************************************************************************** ************************************************************************** EJECT * * DRIVER ADDRESS BLOCK * DATA BUFLEN MMU BUFFER SIZE DATA DEVIND DEVICE INDEX DC22AD DATA DCACT ADDRESS BLOCK DATA ABORT ABORT ROUTINE ADDRESS DATA DCRBUF RECEIVE BUFFER ANCHOR DATA 6 HEADER LENGTH * RES 15 SUBROUTINE STACK FOR INTERRUPTS STB RES 1 EJECT ********************************************************************** ********************************************************************** * * * REQUEST HANDLER/APPLICATION INTERFACE * * ********************************************************************** ********************************************************************** * * ACTIVATION FROM TERMINAL TASKS * DCACT EQU * LDK A1,0 PRESET RETURN CODE LDR A2,A7 ORDER CODE AS PARAMETER LDKL A7,DTETAB DTE TAB ADDR LD A8,DWTECB,A6 ECB ADDRESS ANK A2,/FF STRIP OFF OPTION BITS CF A15,LOOKUP BRANCH ON CODES, TABLE ADDRESS TO STACK DATA TREQX,RTREQ LAST ENTRY; ERROR ADDRESS DATA RECEIVE,RQRECE RECEIVE REQUEST DATA SEND,RQSEND SEND REQUEST DATA OPEN,RQOPEN OPEN REQUEST DATA CLOSE,RQCLOS CLOSE REQUEST DATA CONPAS,RQCON CONNECT PASSIVE REQUEST DATA DISCO,RQDIS DISCONNECT REQUEST DATA RSTAT,RQRSTS READ STATUS REQUEST DATA SSTAT,RQSST SET STATUS REQUEST DATA STIMOT,RQTIME SET REQUEST TIMEOUT TREQX DATA STATIS,RQSTAT READ/RESET STATISTICS REQUEST EJECT ************************************************************ * * ABORT ROUTINE * ************************ ABORT LD A1,DWTRTP,A6 TIMER POINTER RF(Z) AB:10 NO TIMER RUNNING CM* DWTRTP,A6 KILL TIMER CM DWTRTP,A6 AB:10 LD A2,DWTOR,A6 ORDER CODE ANK A2,/7F REMOVE OPTIONS SUK A2,6 IS IT A SEND REQUEST RF(NZ) AB:RTN NO AB:20 EQU * CF A15,REMOVW REMOVE DWT FROM WRITE QUEUE LD A2,FDWTUT WRITING DWT ADDRESS CWR A2,A6 RF(NE) AB:RTN NOT THIS DWT CM FDWTUT RESET SENDING DWT CM XACK RESET ACK EXPECTED AB:RTN EQU * ABL RTABRT COMPLETE WITH RC = ABORTED EJECT * * * OPEN REQUEST * * ACTIVATION PARAMETERS: * SYMBOLIC DTE-ADDRESS (ECBCW2) * * FUNCTIONS: * 1. CHECK IF ALREADY OPEN & IF SO SAME DTE-ADDRESS * 2. CONVERT & VERIFY DTE ADDRESS * 3. CONNECT MODEM * * COMPLETION PARAMETERS: * RETURN CODE (A1) * RQOPEN EQU * LD A2,DTESTA,A7 GET DTE STATUS ADR A2,A2 WORD ALIGNED INDEX VALUE ABI RQOPTB,A2 BRANCH ON INDEX IN TABLE RQOPTB DATA RQOP20 CLOSED/INACTIVE DATA RQOP15 OPEN IN PROGRESS DATA RQOP10 OPEN DATA RQOP15 CLOSE IN PROGRESS RQOP10 EQU * LD A2,ECBCW2,A8 GET SYMBOLIC DTE-ADDRESS CW A2,DTELAD,A7 SAME AS THE ONE WHO OPENED ? RF(E) RQOP85 YES - OK RQOP15 EQU * ABL RTSEQ RETURN: SEQUENCE ERROR * RQOP20 EQU * IM DTESTA,A7 SET OPEN IN PROGRESS LD A1,ECBCW2,A8 GET SYMBOLIC DTE ADDRESS ST A1,DTELAD,A7 SAVE SYMBOLIC DTE ADDRESS LDKL A2,DTECHP+1 POINTER TO CHP IN DTETAB ADR A2,A7 ADDR TO RID IN DTE TAB CF A15,GETDNA CONVERT AND VALIDATE DTE ADDR LDR A1,A1 SET CONDITION REGISTER RF(NN) RQOP80 OK CM DTELAD,A7 RESET DTE ADDRESS CM DTESTA,A7 SET STATUS CLOSET ABL RTREQ RETURN: REQUEST ERROR * RQOP80 EQU * IM DTESTA,A7 SET OPEN STATUS RQOP85 EQU * LD A2,DTEPLS,A7 PHYSICAL CONNECTION ERROR ? ABL(NZ) RTOK NO ABL RTPHYC RETURN: PHYSICAL CONNECTION ERROR EJECT * * CLOSE REQUEST * * ACTIVATION PARAMETERS: * OPTION /00 = UNCONDITIONAL * /80 = CONDITIONAL * FUNCTIONS: * 1. IF CONDITIONAL, CHECK IF ANY LOGICAL CONNECTIONS (DWTS) ARE ACTIVE * ACTIVE. * 2. IF UNCONDITIONAL, DISCONNECT ALL DWT:S * 3. DISCONNECT MODEM * * COMPLETION PARAMETERS: * RETURN CODE (A1) * RQCLOS EQU * LD A2,ECBCW2,A8 GET SYMBOLIC DTE - ADDR RF(Z) RQCL20 ZERO, UNCONDITIONAL CLOSE CW A2,DTELAD,A7 CORRECT DTE ? RF(E) RQCL30 YES ABL RTREQ RETURN: REQUEST ERROR RQCL20 EQU * LD A2,DTECHN,A7 ANY DWT CONNECTED ? RF(NZ) RQCL30 YES ABL RTSEQ RETURN: SEQUENCE ERROR RQCL30 EQU * LD A2,DTESTA,A7 GET DTE STATUS RF(NZ) RQCL50 NOT CLOSED ABL RTOK RETURN: OK RQCL50 EQU * CWK A2,2 DTE OPENED ? ABL(NE) RTSEQ RETURN: SEQUENCE ERROR LDR A8,A6 A8 =DWT ADDR REQUESTING DWT LD A6,DTECHN,A7 ANY DWT CONNECTED RF(Z) RQCL90 NO LD A2,DWTOR,A6 UNCONDITIONAL CLOSE ? ABL(N) RTSEQ RETURN: SEQUENCE ERROR LDK A2,3 ST A2,DTESTA,A7 DTE STATUS = CLOSE IN PROGRESS RQCL60 EQU * LD A2,DWTCHN,A6 GET NEXT DWT IN CHAIN ST A2,DTECHN,A7 REMOVE DWT FROM CONNECTED CHAIN CF A15,RELBUF RELEASE ALL BUFFERS QUEUED ON DWT CM DWTSTA,A6 SET DWT STATUS = DISCONNECTED CWR A8,A6 REQUESTING DWT ? RF(E) RQCL80 YES LDKL A1,RCSEQ RC: SEQUENCE ERROR CF A15,TENDIO COMPLETE REQUEST RQCL80 EQU * LD A6,DTECHN,A7 ANY MORE DWT TO DISCONNECT RB(NZ) RQCL60 YES RQCL90 EQU * LDK A2,3 ST A2,DTESTA,A7 DTE STATUS = CLOSE IN PROGRESS CM DTESTA,A7 DTE STATUS = CLOSED CM DTECHP,A7 CLEAR NETWORK ADDR LDR A6,A8 REQUESTING DWT LD A8,DWTECB,A6 RESTORE ECB ADDR ABL RTOK RETURN: OK EJECT * * CONNECT PASSIVE REQUEST * * ACTIVATION PARAMETERS: * - SYMBOLIC SUBADDRESS (LEFTMOST BYTE IN ECBBA-BFR) * - DEVICE ADDRESSES IN ECBBA-BFR * - LENGTH OF BUFFER (ECBRL) * - SYMBOLIC DTE-ADDRESS (ECBCW2) * * FUNCTIONS: * 1. VERIFY DTE-ADDRESS AS PER OPEN REQUEST * 2. VERIFY & CONVERT SUBTERMINAL ADDRESS * 3. VERIFY AND STORE DEVICE ADDRESSES * 4. LINK CALLING DWT TO QUEUE * * COMPLETION PARAMETERS: * RETURN CODE (A1) * RQCON EQU * LD A2,DTELAD,A7 SYMBOLIC DTE-ADDR CW A2,ECBCW2,A8 CORRECT DTE ? ABL(NE) RTREQ NO, RETURN: REQUEST ERROR LD A2,DTESTA,A7 GET DTE STATUS SUK A2,2 OPEN ? ABL(NZ) RTSEQ NO, RETURN: SEQUENCE ERROR LD A2,DWTSTA,A6 GET DWT STATUS SUK A2,2 ALREADY CONNECTED ? ABL(Z) RTSEQ YES, RETURN: SEQUENCE ERROR IFF MMUPAG=0 LDKL A4,MMUBUF MMU BUFFER ADDRESS ST A4,ECBBA,A8 TO ECB CF A15,DC:MOT MOVE DATA TO MMU BUFFER XIF LD A4,ECBBA,A8 ECB BUFFER ADDR LDK A2,0 RESET A2 LCR A2,A4 GET SUB-ADDRESS ST A2,DWTSUB,A6 SAVE SUB-ADDR LD A1,ECBCW2,A8 GET SYMBOLIC DTE ADDR ST A1,DWTLAD,A6 SAVE SYMBOLIC DTE ADDRESS CF A15,GETSNA VALIDATE AND CONVERT SUB ADDR LDR A1,A1 SET CONDITION REGISTER RF(NN) RQCN20 SUB ADDR OK CM DWTLAD,A6 CLEAR SYM DTE ADDR CM DWTSUB,A6 CLEAR SUB ADDR ABL RTREQ RETURN: REQUEST ERROR RQCN20 EQU * ST A1,DWTCHP,A6 SAVE NETWORK ADDR (CHP) IFT AUX=1 LD A3,ECBRL,A8 BUFFER LENGTH CWK A3,9 MORE THAN 9 ADDRESSES ? ABL(G) RTREQ YES, RETURN: REQUEST ERROR SUK A3,1 ONLY SUB-ADDRESS RF(Z) RQCN80 YES, NO DID:S LDKL A1,DWTLST DEVICE LIST POINTER ADR A1,A6 DEVICE LIST ADDR ADK A4,1 BUFER ADDRESS LDK A2,0 RQCN30 EQU * LCR A2,A4 GET DID FROM USER BUFFER CWK A2,/73 LESS THAN FIRST DID RF(L) RQCN40 YES CWK A2,/7A GREATER THAN LAST DID RF(NG) RQCN50 NO RQCN40 EQU * ABL RTREQ RETURN: REQUEST ERROR RQCN50 EQU * STR A2,A1 STORE DID IN DEVICE LIST SUK A3,1 ANY MORE ? RF(Z) RQCN80 NO ADK A4,1 BUFFER ADDR ADK A1,2 DEVICE LIST ADDR RB RQCN30 GET NEXT DID XIF RQCN80 EQU * CF A15,DCLINK LINK DWT TO CHAIN LDK A2,2 ST A2,DWTSTA,A6 SET STATUS: CONNECTED ABL RTOK RETURN: OK EJECT * * DISCONNECT REQUEST * * ACTIVATION PARAMETERS: * DWT-ADDRESS (A6) * * FUNCTIONS: * 1. CHECK IF IN CONNECTED STATE * 2. DROP DWT-ADDRESS FROM CONFIGURATION CHAIN * 3. RELEASE BUFFERS QUEUED * 4. SET DWT STATUS DISCONNECTED * * COMPLETION PARAMETERS: * RETURN CODE (A1) * RQDIS EQU * LD A2,DWTSTA,A6 DWT STATUS = DISCONNECTED ? ABL(Z) RTOK YES, RETURN: OK CF A15,DCREMV REMOVE DWT FROM CONNECTED CHAIN CF A15,RELBUF RELEASE BUFFERS QUEUED ON DWT CM DWTSTA,A6 SET DWT STATUS = DISCONNECTED ABL RTOK RETURN: OK EJECT * * READ STATUS REQUEST * * * ACTIVATION PARAMETERS: * DWT - ADDRESS (A6) * * FUNCTIONS: * 1. TRANSFER LOGICAL CONNECTION STATUS TO APPLICATION * * COMPLETION PARAMETERS: * LOGICAL CONNECTION STATUS (ECBCW1) * RETURN CODE (A1) * * 0 3 4 7 8 11 12 15 * ........................................ * . DWT . DTE . DATA . PHYS . * . STATE . STATE . LINK . LINK . * . . . STATUS . STATUS . * ........................................ * RQRSTS EQU * LD A2,DWTSTA,A6 DWT STATUS SLL A2,4 BITS 0-3 AD A2,DTESTA,A7 DTE STATUS SLL A2,4 BITS 4-7 AD A2,DTEDLS,A7 DATA LINK STATUS SLL A2,4 BITS 8-11 AD A2,DTEPLS,A7 PHYSICAL LINK STATUS (BITS 12 - 15) ST A2,ECBCW1,A8 STATUS TO ECB CONTROL WORD 1 ABL RTOK RETURN: OK EJECT * * SET STATUS REQUEST * * * ACTIVATION PARAMETERS * DWT ADDRESS (A6) * * FUNCTIONS: * SET A DEVEICE (DID) NOT OPERABLE (ONLY IF AUX=1) * * COMPLETION PARAMETERS: * RETURN CODE (A1) RQSST EQU * IFT AUX=1 LDKL A3,DWTLST POINTER TO DEVICE LIST IN DWT ADR A3,A6 ADDR TO DEVICE LIST LDK A4,8 DEVICE COUNTER RQSS10 EQU * LDR* A2,A3 GET DID FROM DEVICE LIST ABL(Z) RTREQ NOT FOUND, RETURN: REQUEST ERROR CW A2,ECBCW1,A8 COMPARE DID RF(E) RQSS20 FOUND SUK A4,1 END OF DEVICE LIST ? ABL(Z) RTREQ YES, RETURN: REQUEST ERROR ADK A3,2 DEVICE LIST ADDR RB RQSS10 TRY NEXT DID RQSS20 EQU * ORKL A2,BIT0 SET DEVICE NOT OPERABLE STR A2,A3 BACK TO DEVICE LIST ABL RTOK RETURN: OK XIF IFF AUX=1 ABL RTREQ REQUEST: REQUEST ERROR XIF EJECT * * READ/RESET STATISTICS REQUEST * * ACTIVATION PARAMETERS: * TYPE = BITS 0-7 OF ECBCW1 * ECB-ADDRESS (A8) * DWT-ADDRESS OF LOW-LEVEL DWT (A6) * * FUNCTIONS: * 1. READ STATISTICS TO USER AREA * 2. RESET ALL STATISTICS BUFFERS * * COMPLETION PARAMETERS: * NUMBER OF BYTES TRANSFERRED (ECBEL) * RETURN CODE (A1) * RQSTAT EQU * IFT STAT=0 ABL RTREQ COMPLETE REQUEST RC=REQUEST ERROR XIF IFF STAT=0 CF A15,DCSRED READ STATISTICS LDR A1,A1 OK? ABL(NZ) RTREQ NO, RETURN: REQUEST ERROR * RQST30 EQU * LD A1,ECBCW1,A8 GET TYPE SRL A1,8 TYPE FIELD TO LEFT BYTE CWK A1,TYPRR CORRECT TYPE? RF(NE) RQST40 CF A15,DCSRLL RESET ALL STATISTICS BUFFERS LDR A1,A1 LUCKY AGAIN? ABL(NZ) RTREQ NO, RETURN: REQUEST ERROR RQST40 EQU * ABL RTOK RETURN: OK XIF EJECT * * SET REQUEST TIMEOUT * * ACTIVATION PARAMETERS: * ECBCW1 >= 0 : ACTIVATE TIMING CONTROL * TIMEOUT VALUE IN MULTIPLES OF 100 MS; * 0 = IMMEDIATE TIMEOUT. * < 0: DE-ACTIVATE TIMING CONTROL * * FUNCTIONS: * STORE VALUE DIRECTLY IN CALLER'S DWT * * COMPLETION PARAMETERS: * DWTRTV = TIMEOUT VALUE = ECBCW1 * RETURN CODE (A1) * RQTIME EQU * LD A2,ECBCW1,A8 GET TIMEOUT VALUE FROM ECB ST A2,DWTRTV,A6 STORE IN DWT ABL RTOK RETURN: OK EJECT * * SEND REQUEST * * ACTIVATION PARAMETERS: * BUFFER ADDRESS (ECBBA) * BUFFER LENGTH (ECBRL) * ECB CONTROL WORD 1 * * OPTIONS: * /80 = PROGRAM FUNCTION KEY * /81 = THRU * * FUNCTIONS: * 1. VERIFY THAT LOGICAL & PHYSICAL CONNECTIONS EXIST. * 2. VERIFY BUFFER SIZE IF MMU * 3. HANDLING OF PF KEYS * 4. HANDLING OF THRU * 5. QUEUE REQUESTING DWT * 6. COMPLETE WHEN ACK'D OR TIMEOUT. * * COMPLETION PARAMETERS: * RETURN CODE (A1) * RQSEND EQU * LD A2,DWTSTA,A6 GET DWT STATUS SUK A2,2 CONNECTED ? ABL(NZ) RTSEQ NO, RETURN: SEQUENCE ERROR LD A2,DTEPLS,A7 PHYSICAL CONNECTION ACTICE ? ABL(Z) RTPHYC NO, RETURN: PHYSICAL CONNECTION ERROR LD A2,DTEDLS,A7 LOGICAL CONNECTION ACTIVE ? ABL(Z) RTLOGC NO, RETURN: LOGICAL CONNECTION ERROR LD A2,DWTOR,A6 GET ORDER CODE RF(NN) RQSE30 NO OPTION, NORMAL SEND SRL A2,8 RIGHT JUSTIFIE OPTION SUK A2,/80 PROGRAM FUNCTION ? RF(Z) RQSE20 YES IFT AUX=1 SUK A2,/81-/80 THRU ? ABL(NZ) RTREQ NO, RETURN: REQUEST ERROR LD A1,DWTST,A6 GET STATUS ANKL A1,BUSYFL IS DEVICE BUSY ? ABL(Z) RTOK NO, RETURN: OK LDK A1,/FE ANS A1,DWTST,A6 SET DEVICE READY LDKL A2,DCSTQ GET THRU QUEUE ANCHOR CF A15,INSWQ1 INSERT DWT IN THRU QUEUE CM ECBRL,A8 CLEAR REQUESTED LENGTH RF RQSE40 XIF RQSE20 EQU * CM ECBRL,A8 CLEAR REQUESTED LENGTH RQSE30 EQU * IFT MMUPAG=1 LD A2,ECBRL,A8 REQUESTED LENGTH CWK A2,BUFLEN ILLEGAL LENGTH ? ABL(G) RTLGTH YES, RETURN: ILLEGAL BUFFER LENGTH XIF CF A15,TIMEWR START TIMER CF A15,INSWQ QUEUE SEND REQUEST RQSE40 EQU * ABL TDISP * EJECT * * * COMPLETION OF SEND REQUEST * * A1 CONTAINS RETURN CODE * * RQSE50 EQU * LD A2,XACK IS ACK EXPECTED ? RF(Z) RQSE90 NO CM XACK NO ACK EXPECTED LD A6,FDWTUT ANY SEND GOING ON ? RF(Z) RQSE90 NO LD A2,DWTST,A6 ANY REQUEST FOR THIS DWT ? RF(N) RQSE80 NO LD A2,DWTOR,A6 GET ORDER CODE ANK A2,/FF REMOVE OPTIONS SUK A2,SEND IS IT A SEND ORDER ? RF(NZ) RQSE80 NO CF A5,CTIME STOP TIMER CF A15,TENDIO COMPLETE REQUEST LD A2,DCSTQ THRU IN QUEUE RF(Z) RQSE60 NO LDKL A2,DCSTQ ADDR TO THRU ANCHOR CF A15,REM05 REMOVE DWT FROM THRU QUEUE RF RQSE80 RQSE60 EQU * CF A15,REMOVW REMOVE DWT FROM SEND QUEUE RQSE80 EQU * CM FDWTUT INDICATE, NO SEND GOING ON RQSE90 EQU * RTN A5 RETURN TO PROTOCOL HANDLER EJECT * * RECEIVE REQUEST * * ACTIVATION PARAMETERS: * BUFFER ADDRESS (ECBBA) * * FUNCTIONS: * 1. VERIFY THAT LOGICAL & PHYSICAL CONNECTIONS EXIST. * 2. TRANSFER TO THE APPLICATION ANY MESSAGE QUEUED FOR THE DWT, * 3. COMPLETE WHEN TRANSFER PERFORMED OR NO MESSAGE RECEIVED * WITHIN TIMEOUT PERIOD. * * COMPLETION PARAMETERS: * ACTUAL LENGTH OF RECEIVED MESSAGE (ECBEL) * RETURN CODE (A1) * RQRECE EQU * LD A2,DWTSTA,A6 GET DWT STATUS SUK A2,2 CONNECTED ? ABL(NZ) RTSEQ NO, RETURN: SEQUENCE ERROR LD A2,DTEPLS,A7 PHYSICAL CONNECTION ACTIVE ? ABL(Z) RTPHYC NO, RETURN: PHYSICAL CONNECTION ERROR LD A2,DTEDLS,A7 LOGICAL CONNECTION ACTIVE ? ABL(Z) RTLOGC NO, RETURN: LOGICAL CONNECTION ERROR LD A4,DWTIPC,A6 ANY BUFFER ON QUEUE ? RF(NZ) RQRE10 YES CF A15,TIMERE START TIMER RF RQRE40 GO TO DISPATCHER RQRE10 EQU * IFT EMU100=1 LD A2,DWTOR,A6 GET ORDER CODE SRL A2,8 ISOLATE OPTIONS SUK A2,/81 ANY MESSAGE REQUEST RF(NZ) RQRE20 NO LD A2,2,A4 GET BUFFER LENGTH ST A2,ECBEL,A8 TO ECB ABL RTOK RETURN: OK XIF RQRE20 EQU * LDR* A2,A4 GET NEXT BUFFER IN QUEUE ST A2,DWTIPC,A6 STORE AS FIRST IN QUEUE RF(NZ) RQRE30 MORE BUFFERS IN QUEUE CF A15,SBTIME STOP BUFFER SUPERVISIOR TIMER RQRE30 EQU * ADK A4,6 ADJUST BUFFER ADDRESS CF A15,RQRE60 COMPLETE RECEIVE REQUEST RQRE40 EQU * ABL TDISP GO TO DISPATCHER EJECT * * COMPLETION OF RECEIVE REQUEST * RQRE50 EQU * LD A6,FDWTIN GET INPUT DWT ST A6,DWTTXT SAVE IT LD A2,DWTST,A6 ANY REQUEST ON RF(N) RQRE80 NO, QUEUE BUFFER LD A2,DWTOR,A6 GET ORDER CODE ANK A2,/FF REMOVE OPTIONS SUK A2,RECEIVE RECEIVE ORDER ? RF(NZ) RQRE80 NO, QUEUE BUFFER LD A8,DWTECB,A6 ECB ADDR CF A5,CTIME STOP TIMER ST A2,ECBCW,A8 STORE REMANING TIME RQRE60 EQU * LDK A1,0 COMPLETE REQUEST WITH RC=0 LD A3,-4,A4 GET BUFFER LENGTH ST A3,ECBEL,A8 TO ECB EFFECTIVE LENGTH LD A2,DWTOR,A6 GET ORDER CODE SRL A2,8 ISOLATE OPTION IFT EMU100=1 CWK A2,/81 ANY MESSAGE REQUEST ? RF(NE) RQRE65 NO CF A15,TENDIO COMPLETE REQUEST RF RQRE80 QUEUE BUFFER XIF RQRE65 EQU * CWK A2,/80 RECEIVE ADDRESSED ? RF(NE) RQRE70 NO LD A2,-2,A4 GET SID+DID ST A2,ECBCW2,A8 TO ECB CONTROL WORD 2 RQRE70 EQU * LDR A3,A3 LENGTH ZERO ? RF(Z) RQRE75 YES, BELL MESSAGE CF A15,DC:MIN MOVE DATA TO USER BUFFER, COMPLETE REQUEST RF RQRE90 RQRE75 EQU * SUK A4,6 ADJUST ADDR CF A15,RRBUF RELEASE RECEIVE BUFFER LDKL A1,RCBELL BELL IN RETURN CODE CF A15,TENDIO COMPLETE REQUEST RF RQRE90 RETURN * * NO RECEIVE REQUEST ON, QUEUE BUFFER * RQRE80 EQU * SUK A4,6 BASE OF BUFFER LDK A2,DWTIPC POINTER TO BUFFER QUEUE ANCHOR ADR A2,A6 ADDR TO BUFFER QUEUE ANCHOR CF A5,QR100 QUEUE BUFFER IFT BUFTIM=1 LD A1,DWTIPC,A6 BUFFER QUEUE ANCHOR LDR* A2,A1 GET FIRST IN QUEUE RF(NZ) RQRE90 TIMER ALREADY STARTED LDR A1,A6 DWT ADDR CF A15,SETIME START BUFFER SUPERVISOR TIMER DATA RQRETO,TIMBUF ST A4,DWTIPT,A6 TIMER POINTER XIF RQRE90 EQU * RTN A15 RETURN TO CALLER IFT BUFTIM=1 * * BUFFER TIMEOUT * RQRETO EQU * LDR A6,A1 DWT ADDR CF A15,RELBUF RELEASE BUFFERS QUEUE ON DWT ABL TDISP RETURN TO DISPATCHER XIF EJECT * * COMPLETE APPLICATION REQUEST * RTREQ EQU * LDKL A1,RCREQ RC = REQUEST ERROR RF RQRTN RTABRT EQU * LDKL A1,RCABRT RC = ABORTED RF RQRTN RTBELL EQU * LDKL A1,RCBELL RC = BELL MESSAGE RF RQRTN RTTIME EQU * LDKL A1,RCTIME RC = TIME OUT RF RQRTN RTSEQ EQU * LDKL A1,RCSEQ RC = SEQUENCE ERROR RF RQRTN RTLGTH EQU * LDKL A1,RCLGTH RC = ILLEGAL LENGTH RF RQRTN RTLOGC EQU * LDKL A1,RCLOGC RC = LOGICAL CONNECTION ERROR RF RQRTN RTPHYC EQU * LDKL A1,RCPHYC RC = PHYSICAL CONNECTION ERROR RF RQRTN RTOK EQU * LDK A1,0 RC = OK RQRTN EQU * CF A15,TENDIO COMPLETE REQUEST ABL TDISP GO TO DISPATCHER EJECT ************************************************************************** ************************************************************************** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** D R D C 2 2 - U N I S C O P E 1 0 0 / 2 0 0 D R I V E R ** ** ** ** ** ** S U B R O U T I N E S ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ************************************************************************** ************************************************************************** EJECT * * * * TIMER HANDLING PART * * * * RECEICE TIMER=TIMERR * TIMERE EQU * LDR A1,A6 LD A2,DWTRTV,A6 GET TIMEOUT VALUE RF(N) TIME10 NO TIMING RF(Z) TOUTR2 TIMER=0 => IMMEDIATE TIMEOUT ST A2,TIMERR CF A15,SETIME DATA TOUTRE TIMERR DATA 0 ST A4,DWTRTP,A6 STORE TIMER POINTER TIME10 EQU * RF GBUF10 RETURN * * TIMEOUT READ TIMER * TOUTRE EQU * LDR A6,A1 FETCH DWT CM DWTRTP,A6 TOUTR1 EQU * ABL RTTIME COMPLETE REQUEST RC=TIMEOUT TOUTR2 EQU * ADKL A15,4 RESET STACK POINTER ABL RTTIME RETURN: TIMEOUT EJECT * * SEND TIMER=TIMWR * TIMEWR LDR A1,A6 LD A2,DWTRTV,A6 GET TIMEOUT VALUE RB(N) TIME10 NO TIMING RB(Z) TOUTR2 TIMER=0 => IMMEDIATE TIMEOUT ST A2,TIMWR CF A15,SETIME DATA TOUTWR TIMWR DATA 0 ST A4,DWTRTP,A6 RB TIME10 * * TIMEOUT WRITE TIMER * TOUTWR EQU * LDR A6,A1 FETCH DWT CM DWTRTP,A6 LD A1,DWTOR,A6 GET ORDER SUK A1,SEND RB(NZ) TOUTR1 NOT SEND LD A2,DWTECB,A6 GET DWT CW A6,FDWTUT SAME AS PRESENT DWT RF(NE) TOUTW1 NO,REMOVE AND TENDIO CM XACK YES,CLEAR WAIT FOR ACK AND GO ON PROCESSING CM FDWTUT NO WRITE GOING ON TOUTW1 EQU * LD A4,ECBBA,A2 GET ECB CF A15,REMOVW REMOVE FROM WRITE QUEUE ABL RTTIME COMPLETE REQUEST RC=TIMEOUT EJECT * * * STOP REQUEST TIMING * * REMAINING TIME IS RETURNED IN A2 * * CTIME EQU * LD A2,DWTRTP,A6 GET TIMER POINTER RF(Z) CTIM10 NOT RUNNING LDR* A2,A2 NGR A2,A2 GET REMAINING TIME CM* DWTRTP,A6 STOP TIMER CM DWTRTP,A6 CTIM10 EQU * RTN A5 EJECT * * STOP BUFFER SUPERVISIOR TIMER * * A6 = DWT ADDR * A2 = DESTROYED SBTIME EQU * LD A2,DWTIPT,A6 GET TIMER POINTER RF(Z) SBTI10 NOT RUNNING CM* DWTIPT,A6 STOP TIMER CM DWTIPT,A6 SBTI10 EQU * RTN A15 EJECT * * FIND DWT CONTAINING SUBTERMINAL ADDRESS AS GIVEN IN A2 * * CALLING SEQUENCE: CF A5,FINTER * A2=SUBTERMINAL ADDRESS * A4 DESTROYED * A3: NOT = 0 = DWT FOUND * = 0 = DWT NOT FOUND * = -1 = GENERAL SID * FINTER EQU * * * SEARCH IF GENERAL SID * LDR A1,A2 SUK A1,SID RF(NZ) FINT05 SPECIFIC LDKL A3,-1 INIT GENERAL SID RTN A5 * FINT05 EQU * LDK A3,0 DEFAULT VALUE, NOT FOUND LD A4,DTECHN,A7 ADDR TO FIRST IN CHAIN RF(Z) FINT20 CHAIN EMPTY FINT10 EQU * CW A2,DWTCHP,A4 CHECK CHP RF(E) FINT15 DWT WITH CORRESPONDING SID FOUND LD A4,DWTCHN,A4 NEXT DWT RF(Z) FINT20 END OF CHAIN, NOT FOUND RB FINT10 TRY NEXT FINT15 EQU * LDR A3,A4 DWT ADDR FINT20 RTN A5 EJECT * * GET RECEIVE BUFFER * * CALLING SEQUENCE: CF A15,GRBUF * A4=0 IF NO BUFFER IS FREE * ELSE A4 CONTAINS BUFFER ADDRESS * A2 AND A3 ARE DESTROYED * * GRBUF LDKL A2,DCRBUF RECEIVE BUFFERS GBUF INH LDR* A4,A2 RF(Z) GBUF10 NO BUFFER FREE LDR* A3,A4 REMOVE BUFFER FROM FREE CHAIN STR A3,A2 GBUF10 ADKL A15,4 ADJUST STACK POINTER ABR* A15 RETURN TO CALLER EJECT * * * RELEASE RECEIVE BUFFER * * A4 CONTAINS BUFFER ADDRESS * CALLING SEQUENCE: CF A15,RRBUF * A2 AND A3 ARE DESTROYED * * RRBUF LDKL A2,DCRBUF RECEIVE BUFFERS RBUF INH RBUF10 EQU * LDR* A3,A2 RF(Z) RBUF20 LDR A2,A3 RB RBUF10 RBUF20 EQU * STR A4,A2 CMR A4 RB GBUF10 RETURN TO CALLER EJECT * * RELEASE ALL RECEIVE BUFFERS QUEUE ON DWT * * A6 - DWT ADDR * A1 AND A4 ARE DESTROYED * CALLING SEQUENCE: CF A15,RELBUF * * RELBUF EQU * CF A15,SBTIME STOP BUFFER TIMER LD A4,DWTIPC,A6 FIRST IN BUFFER QUEUE RF(Z) RLBU20 QUEUE EMPTY RLBU10 EQU * LDR* A1,A4 NEXT IN BUFFER QUEUE CF A15,RRBUF RELEASE BUFFER LDR A4,A1 ANY MORE TO RELEASE RB(NZ) RLBU10 YES RLBU20 EQU * CM DWTIPC,A6 RESET BUFFER POINTER RB GBUF10 EJECT * * * INSERT DWT IN WRITE REQUEST QUEUE * * A2,A3,A4 DESTROYED * A6=DWT * INSWQ LDKL A2,DCWRQ GET QUEUE ANCHOR INSWQ1 LDK A4,DWTOPN INSWQ2 LDR* A3,A2 RF(Z) INSWQ3 END OF QUEUE FOUND LDR A2,A3 RB INSWQ2 INSWQ3 ADR A4,A6 STR A4,A2 INSERT IN QUEUE CMR A4 INDICATE END OF QUEUE RB GBUF10 RETURN * * * REMOVE DWT FROM WRITE REQUEST QUEUE * * A2,A3,A4 DESTROYED * A6=DWT * REMOVW LDKL A2,DCWRQ GET QUEUE ANCHOR REM05 LDK A4,DWTOPN GET DWT-LINK TO BE REMOVED ADR A4,A6 REM10 LDR* A3,A2 RB(Z) GBUF10 NOT ON QUEUE: RETURN CWR A3,A4 RF(E) REM15 LDR A2,A3 GET NEXT RB REM10 REM15 LDR* A3,A4 REMOVE STR A3,A2 RB GBUF10 RETURN EJECT * * * QUEUE ALLOCATED RECEIVE BUFFER * * A4=BUFFER ADDR * A2,A3 DESTROYED * QR100 EQU * LDR* A3,A2 RF(Z) QR200 END OF QUEUE FOUND LDR A2,A3 RB QR100 QR200 STR A4,A2 INSERT INTO QUEUE CMR A4 INDICATE END OF QUEUE RTN A5 EJECT * * LOOKUP - LOOK UP KEY IN TABLE & BRANCH ON ADDRESS * * CALL: * CF A15,LOOKUP TABLE ADDRESS TO STACK * DATA LAST,ADDRE LAST ENTRY; ERROR ADDRESS * DATA KEY1,ADDR1 KEY (A2); ADDRESS FOR BRANCH * " " " * LAST DATA KEYN,ADDRN * * ENTRY: A2 = KEY VALUE * EXIT: A3 & A4 DESTROYED * LOOKUP EQU * LDR A1,A15 STACK ADDR ADK A1,4 TABLE ADDRESS LDR* A3,A1 GET CONTENTS = TABLE ADDRESS LDR* A4,A3 GET LAST LEGAL ADDRESS * LOOK50 EQU * LOOP ENTRY ADK A3,4 GET NEXT TABLE ENTRY ADDRESS CWR A3,A4 PAST THE END? RF(G) LOOK90 YES = NOT FOUND CWR* A2,A3 KEY = VALUE IN TABLE? RB(NE) LOOK50 NO - CHECK NEXT ENTRY RF LOOK95 BRANCH TO TABLE ADDRESS * KEY NOT FOUND LOOK90 EQU * LDR* A3,A1 GET TABLE ADDRESS AGAIN LOOK95 EQU * ADKL A15,4 RESET STACK ABI 2,A3 BRANCH TO TABLE ADDRESS EJECT ********************************************************************** * * DCLINK - LINK DWT ADDRESS TO CONFIGURATION CHAIN * * ENTRY: A6 = DWT-ADDRESS * * EXIT: DCDWA = A(FIRST DWT IN CHAIN) * DWTCHD = A(DTE) * A2, A3 DESTROYED * ********************************************************************** * DCLINK EQU * LDR A3,A7 DTE TAB ADDR DCLK20 EQU * LDR A2,A3 PREVIOUS POINTER LD A3,DWTCHN,A2 GET POINTER TO NEXT IN CHAIN RB(NZ) DCLK20 KEEP ON UNTIL LAST IN CURRENT CHAIN ST A6,DWTCHN,A2 ADD NEW DWT TO CHAIN CM DWTCHN,A6 END OF CHAIN MARKER * DCLK50 EQU * ST A7,DWTCHD,A6 * BACKWARD LINK TO ANCHOR ADKL A15,4 ABR* A15 RETURN EJECT ********************************************************************** * * DCREMV - REMOVE DWT-ADDRESS FROM CONFIGURATION CHAIN * * ENTRY: A6 = DWT-ADDRESS TO BE REMOVED * * EXIT: CC = 0 = CHAIN NOW EMPTY; ANCHOR = 0 * POS = DWT FOUND & REMOVED * NEG = DWT NOT FOUND OR CHAIN EMPTY ON ENTRY * A2 & A3 DESTROYED * ********************************************************************** * DCREMV EQU * LDR A3,A7 DTE TAB ADDR DCRM20 EQU * LDR A2,A3 PREVIOUS DWT-POINTER LD A3,DWTCHN,A2 GET DWT OF NEXT (OR 1ST) ENTRY IN CHAIN RF(NZ) DCRM30 NOT AT END SUK A3,1 AT END & NOT FOUND; SET FOR CC = NEGATIVE RF DCRM80 RETURN * DCRM30 EQU * CWR A3,A6 IS THIS OUR DWT? RB(NE) DCRM20 NO - LOOK AT NEXT LD A3,DWTCHN,A6 GET LINK TO NEXT IN DWT TO BE REMOVED ST A3,DWTCHN,A2 MOVE IT TO THE PREVIOUS ONE LDK A3,0 SET FOR CC = 0 LD A2,DTECHN,A7 GET ANCHOR RF(Z) DCRM80 LAST DWT NOW REMOVED ADK A3,1 SET CC = POS. * DCRM80 EQU * ADKL A15,4 UPDATE STACK LDR A3,A3 SET PROPER CC ABR* A15 RETURN EJECT * * * STORE REGISTER A3-A8 * CALLING SEQUENSE: CF A15,STREG * * RESTORE * CALLING SEQUENCE: CF A15,LDREG * * STREG ST A3,LCA3 ST A4,LCA4 ST A5,LCA5 ST A6,LCA6 ST A7,LCA7 ST A8,LCA8 RF RTNA15 RETURN EJECT LDREG LDKL A3,0 LCA3 EQU *-2 LDKL A4,0 LCA4 EQU *-2 LDKL A5,0 LCA5 EQU *-2 LDKL A6,0 LCA6 EQU *-2 LDKL A7,0 LCA7 EQU *-2 LDKL A8,0 LCA8 EQU *-2 RTNA15 EQU * ADKL A15,4 ABR* A15 EJECT * * POLL TIME OUT * PTOUT LDKL A5,STB LOAD A5 STACK BASE LDKL A7,DTETAB DTE TAB ADDR CM DTEDLS,A7 DATA LINK DOWN IFT STAT=1 LDK A1,CSSXC3 POLL TIMEOUT CF A15,DCSUPS UPDATE STATISTICS XIF CF A15,SPOTIM ABL TDISP * * RESTART POLL TIMER WHEN POLL HAS BEEN RECEIVED * CPTIM EQU * LDK A2,1 ST A2,DTEDLS,A7 DATA LINK UP LDKL A2,-TIMPOL ST* A2,DCTPGP RESTART TIMER RTN A5 * * START POLL TIMER * SPOTIM EQU * CF A15,SETIME DATA PTOUT,TIMPOL ST A4,DCTPGP ADKL A15,4 ABR* A15 EJECT ************************************************************************** ************************************************************************** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** D R D C 2 2 - U N I S C O P E 1 0 0 / 2 0 0 D R I V E R ** ** ** ** ** ** P R O T O C O L H A N D L I N G ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ************************************************************************** ************************************************************************** EJECT * * * RECEIVE A FRAME AND DECODE IT * * BRM EQU * LDKL A5,STB LOAD STACK BASE FOR A5 CF A5,CSYNCI START I/P WITH SYNC DEF BRM100 CF A5,READ READ CHARACTER SUK A2,SOH RF(E) BRM200 SOH SUK A2,PAD-SOH PAD ? RB(NE) BRM100 NOT /FF CF A5,READ READ CHARACTER CWK A2,PAD PAD ? RB(NE) BRM100 NOT ANOTHER /FF ABL BRM910 HALT INPUT AND RESYNCHRONIZE * * SOH RECEIVED * BRM200 LDKL A8,0 CLEAR BCC CF A5,READP READ RID=TC ABL(NZ) BRM920 PARITY ERROR CW A2,DTECHP,A7 CHECK IF THIS CHP RF(E) BRM201 CWK A2,GRID GENERAL RID ? ABL(NE) BRM900 NOT THIS TC: RESYNCHRONIZE BRM201 EQU * CF A5,READP READ SID=SUBTERMINAL ADDRESS ABL(NZ) BRM920 PARITY ERROR ST A2,FSID SAVE SUBTERMINAL ADDRESS IFT SBS=1 CWK A2,SID GENERAL SID ? RF(E) BRM210 YES, OK CWK A2,/51 SID 51 ? RF(E) BRM210 YES, OK ABL BRM900 INVALID SID XIF CF A5,FINTER FIND SUBTERMINAL ADDRESS CWK A3,-1 GENERAL SID ? RF(E) BRM205 YES,DONT INIT DWT INPUT ST A3,FDWTIN AND STORE IT BRM205 EQU * SUK A2,SID RF(Z) BRM210 GENERAL SID LDR A3,A3 ABL(Z) BRM900 SID UNKNOWN BRM210 EQU * CF A5,READP ABL(NZ) BRM920 PARITY ERROR ST A2,FDID SAVE DID IFT AUX=0 CWK A2,DID GENERAL DID ? ABL(NE) BRM900 NO, NOT ACCEPTED XIF CM HEADER CLEAR HEADER CONTENTS CM HEADER+2 LDK A3,0 RESET CHARACTER COUNTER BRM220 CF A5,READP READ CHARACTER ABL(NZ) BRM920 PARITY ERROR CWK A2,STX RF(E) BRM300 STX: TEXT FRAME CWK A2,ETX RF(E) BRM250 ETX: ANALYZE HEADER CWK A3,4 ABL(G) BRM930 HEADER OVEABLLOW SC A2,HEADER,A3 STORE CHARACTER ADK A3,1 INCREMENT POINTER RB BRM220 BRM250 CF A5,READP READ BCC ABL(NZ) BRM910 PARITY ERROR ANKL A8,/7F MASK BCC PARITY BIT ABL(NZ) BRM910 BCC ERROR CF A5,CHALTI HALT INPUT EJECT * * * ANALYZE CONTROL SEQUENCE * * LD A1,HEADER GET HEADER LD A2,HEADER+2 LDK A3,0 FIND HEADER TYPE LDKL A4,STRING BRM260 CWR* A1,A4 RF(NE) BRM270 CW A2,2,A4 ABI(E) FRAME,A3 TYPE FOUND: BRANCH TO HANDLER BRM270 ADK A3,2 ADK A4,4 INCREMENT STRING POINTER CWK A4,STRINE RB(NE) BRM260 TRY NEXT IFT STAT=1 LDK A1,CSSXC2 INCORRECT HEADER CF A15,DCSUPS UPDATE STATISTICS XIF RB BRM INVALID HEADER EJECT * * * RECEIVE TEXT * * BRM300 EQU * IFT SBS=1 CM SBSTID RESET INDEX FOR TERMINAL ID RF(Z) BRM305 XIF LD A6,FDWTIN GET DWT ADDR RF(Z) BRM900 INVALID SUBTERMINAL ADDRESS BRM305 EQU * LD A4,DCRBUF ABL(Z) BRM940 NO BUFFER AVAILABLE LD A1,WPOLL RF(NZ) BRM900 MUST BE A POLL LD A1,DWTST,A6 ANK A1,BUSYFL RF(NZ) BRM900 DONT ACCEPT TEXT IF BUSY ADK A4,6 RESERVE 3 WORDS AT BEGIN LDK A3,0 RESET BUFFER INDEX BRM310 CF A5,READP READ CHARACTER RF(NZ) BRM920 PARITY ERROR IFT AUX=1 CWK A2,DC2 PRINT COMMAND ? RF(E) BRM315 YES XIF CWK A2,ETX RF(E) BRM350 ETX RECEIVED CWK A2,SYN RF(NE) BRM320 NOT SYN, NOT TO BE SKIPPED XRR A8,A2 ADJUST BCC RB BRM310 EJECT IFT AUX=1 * * PRINT COMMAND DETECTED * BRM315 EQU * IM SPRINT INIT PRINT FLAG FOR FOLLOWING POLL LDK A1,BUSYFL ORS A1,DWTST,A6 SET BUSY SUB-TRMNL * * TAKE CARE OF FAST SELECTION * LD A1,FDID SUK A1,DID RF(Z) BRM318 LD A1,FDID ST A1,DWTDID,A6 INIT AI DEVICE BRM318 EQU * XIF * * STORE INCOMMING CHARACTER IN BUFFER * BRM320 EQU * IFT NULTST=1 CWK A2,0 NULL ? RB(E) BRM310 YES,SUPPRESS IT XIF CWK A3,RBUFL+RBUFL RF(G) BRM950 BUFFER OVERFLOW IFT SBS=1 IM SBSTID INCREMENT INDEX LD A1,SBSTID CWK A1,SBSSTA ON POSITION 7 ? RF(NE) BRM330 NO ST A3,SBSA3 SAVE A3 ST A4,SBSA4 SAVE A4 CF A5,FINT05 FIND SUBTERMINAL ADDRESS LDR A3,A3 IS A3 ZERO RF(Z) BRM900 YES, TERMINAL NOT FOUND ST A3,FDWTIN SAVE DWT ADDR LD A3,SBSA3 RESTORE A3 LD A4,SBSA4 RESTORE A4 LD A6,FDWTIN DWT ADDR TO A6 BRM330 EQU * XIF LDR A1,A4 ADR A1,A3 COMPUTE BUFFER ADDRESS SCR A2,A1 STORE CHARACTER ADK A3,1 INCREMENT INDEX RB BRM310 EJECT * * ETX DETECTED * BRM350 EQU * CF A5,READP READ BCC IFT SALCUZ=0 RF(NZ) BRM910 PARITY ERROR XIF ANKL A8,/7F MASK BCC PARITY BIT RF(NZ) BRM960 BCC ERROR IFT SALCUZ=1 CF A5,CHALTI STOP I/P TO CHECK CHAR PAR ANK A2,SBPARI CHAR PARITY ERROR ? RF(NZ) BRM970 YES XIF IFT STAT=1 LDK A1,CSSRBL DATA BLOCKS RECEIVED CF A15,DCSUPS UPDATE STATISTICS XIF IM WPOLL SET WAIT FOR POLL ST A3,-4,A4 STORE LENGTH LDK A2,DID GENERAL DID LD A3,SPRINT PRIN ASKED (DC2) ? RF(Z) BRM358 NO LD A2,DWTDID,A6 YES, GET SELECTED DID BRM358 EQU * SC A2,-1,A4 STORE DID IN BUFFER LD A2,FSID SID SC A2,-2,A4 STORE SID IN BUFFER CF A5,CHALTI HALT INPUT CF A15,GRBUF ALLOCATE RECEIVE BUFFER IFT AUX=1 LD A1,SPRINT RF(NZ) BRM370 SET WABT XIF IM TACK ACK TO BE SENT BRM360 EQU * ADK A4,6 ADJUST BUFFER POINTER RF TEXT PROCESS TEXT IFT AUX=1 * * PRINT COMMAND, SET TRANSMIT WABT * BRM370 EQU * IM TWABT RB BRM360 XIF EJECT * * * ERROR: WAIT FOR TWO /FF CONSECUTIVE * * BRM800 EQU * LDKL A5,STB CF A5,CSYNCI START I/P WITH SYNC DEF BRM900 CF A5,READ LD A1,DCSTCU ANY STATUS FROM CONTROL UNIT ? RF(NZ) BRM910 YES HALT AND RESYNC SUK A2,PAD PAD ? RB(NZ) BRM900 NOT /FF BRM910 CF A5,CHALTI HALT INPUT AND RESYNCHRONIZE BRM915 EQU * ABL BRM * * PARITY ERROR * BRM920 EQU * IFT STAT=1 LDK A1,CSSRPE PARITY ERROR CF A15,DCSUPS UPDATE STATISTICS XIF RB BRM900 * * INCORRECT HEADER * BRM930 EQU * IFT STAT=1 LDK A1,CSSXC2 INCORRECT HEADER CF A15,DCSUPS UPDATE STATISTICS XIF RB BRM900 * * BUFFER BUSY * BRM940 EQU * IFT STAT=1 LDK A1,CSSRBY BUFFER BUSY CF A15,DCSUPS UPDATE STATISTICS XIF RB BRM900 * * BUFFER OVERFLOW * BRM950 EQU * IFT STAT=1 LDK A1,CSSRBO BUFFER OVERFLOW CF A15,DCSUPS UPDATE STATISTICS XIF RB BRM900 * * BCC ERROR * BRM960 EQU * IFT STAT=1 LDK A1,CSSRPE PARITY ERROR CF A15,DCSUPS UPDATE STATISTICS XIF RB BRM910 * * CHAR PARITY ERROR * BRM970 EQU * IFT STAT=1 LDK A1,CSSRPE PARITY ERROR CF A15,DCSUPS UPDATE STATISTICS XIF RB BRM915 EJECT * * * TEXT RECEIVED * * TEXT EQU * LD A2,FSID ST A2,DCSTRX SAVE SID TEXT CF A15,RQRE50 COMPLETE RECEIVE REQUEST TEX205 EQU * IFT AUX=1 LD A1,FDID SUK A1,DID RF(Z) TEX206 * * FORCE SELECT ANSWER * IF DC2,FORCE WABT * LD A1,SPRINT RF(NZ) TEX206 PRINT WITH FAST SELECTION IM SREADY FORCE SELECT ANSWER LD A1,FDID ST A1,DIDREA TEX206 EQU * XIF ABL BRM EJECT * * * STATUS POLL: GENERAL AND SPECIFIC * * SP EQU * CM WPOLL CLEAR WAIT FOR POLL LD A2,XACK STATUS POLL WITHOUT ACK RF(Z) SPA200 ACK NOT EXPECTED CF A5,TRRPRQ SEND REPLY REQUEST SP100 ABL BRM SPA EQU * STATUS POLL WITH ACK CM WPOLL CLEAR WAIT FOR POLL LDK A1,0 RETURN CODE = 0 CF A5,RQSE50 CHECK IF WRITE REQUEST IS TO BE COMPLETED SPA200 EQU * CF A5,CPTIM RESET POLL TIMER IFF AUX+BFBUSY=0 LD A2,DCRBUF CHECK IF BUSY RF(Z) SPA800 BUSY, NO RECEIVE BUFFER LD A2,XBUSY WAS PREVIOUS BUSY RF(NZ) SPA850 YES, SEND THRU XIF SPA300 EQU * IFT SBS=0 LD A2,FSID GET SID SUK A2,SID GENERAL SID ? RF(NZ) SPA350 NO,SPECIFIC CHECK IT XIF EJECT * * SEND TRAFFIC ON GENERAL STATUS POLL IF REQUIRED * IFT AUX=1 LD A1,SREADY RF(Z) SPA301 CF A5,SETREA ABL TPA400 SELECT DEVICE SPA301 EQU * LD A1,SPRINT RF(Z) SPA302 CF A5,FRWABT PRINT MODE SPA302 EQU * LD A6,DCSTQ ABL(NZ) TPA305 SEND THRU XIF SPA305 EQU * LD A6,DCWRQ GET QUEUE ANCHOR RF(Z) SPA500 NO TRAFFIC SUK A6,DWTOPN GET DWT ADDRESS SPA330 EQU * LDR* A2,A6 GET SUBTERMINAL ST A2,FSID STORE SID LDK A2,DID ST A2,FDID RESTORE DID CF A5,TRTRAF SEND TRAFFIC RB SP100 * EJECT * SPECIFIC STATUS POLL * SPA350 EQU * LD A6,FDWTIN RESTORE DWT IFT AUX=1 LD A1,SREADY RF(NZ) SPA700 SELECT DEVICE LD A1,SPRINT RF(NZ) SPA600 PRINT STATEMENT LD A1,DWTPRT,A6 PRINT IN PROGRESS ? RF(NZ) TPA201 YES SPA360 EQU * LD A1,FDID SUK A1,DID SELECTION OR DESELECTION ? ABL(NZ) TPA400 YES XIF LD A1,DWTST,A6 GET STATUS RF(N) SPA500 NO ORDER ON LD A1,DWTOR,A6 GET ORDER ANK A1,/FF REMOVE OPTIONS SUK A1,/06 WRITE ? RF(NZ) SPA500 NO,NO TRAFFIC RB SPA330 TRAFFIC FOR THIS DWT SPA500 CF A5,TRNOTR SEND NO TRAFFIC RB SP100 IFT AUX=1 SPA600 EQU * LD A1,DWTTXT CW A1,FDWTIN ABL(NE) BRM MUST BE FOR THE SAME TERMINAL CF A5,FRWABT SET WABT RB SPA360 * SPA700 EQU * LD A1,DWTTXT CW A1,FDWTIN ABL(NE) BRM CF A5,SETREA ABL TPA400 XIF IFF AUX+BFBUSY=0 EJECT * * RECEIVE BUFFER NOT AVAIABLE, SEND BUSY SPA800 EQU * CM TACK NO ACK TO BE SENT LD A2,XBUSY WAS PREVIOUS BUSY RF(Z) SPA810 NO LD A2,FSID GET SID CWK A2,SID IS IT A GENERAL POLL RF(E) SPA820 YES, SEND NO TRAFFIC SPA810 EQU * IM TWABT INDICATE WABT TO BE SENT SPA820 EQU * CF A5,TRNOTR TRANSMIT WABT OR NO TRAFFIC CM TWABT IM XBUSY INDICATE PREVIOUS BUSY ABL SP100 RETURN * * NOT BUSY ANY MORE, SEND THRU * SPA850 EQU * CM XBUSY INDICATE NOT BUSY CF A5,TRTHRU TRANSMIT THRU ABL SP100 RETURN XIF EJECT * * * TRAFFIC POLL * * TP EQU * TRAFFIC POLL WITHOUT ACK IFT SBS=1 CM TPAX CLEAR TR.POLL+ACK INDICATOR XIF CM WPOLL CLEAR WAIT FOR POLL LD A2,XACK RF(Z) TPA200 NO ACK EXPECTED CF A5,TRRPRQ SEND REPLY REQUEST ABL SP100 TPA EQU * TRAFFIC POLL WITH ACK CM WPOLL CLEAR WAIT FOR POLL LDK A1,0 RETURN CODE = 0 CF A5,RQSE50 CHECK IF WRITE IS TO BE COMPLETED IFT SBS=1 IM TPAX SET TR.POLL+ACK INDICATOR XIF TPA200 EQU * CF A5,CPTIM RESET POLL TIMER IFF AUX+BFBUSY=0 LD A2,DCRBUF CHECK IF BUSY RB(Z) SPA800 BUSY LD A2,XBUSY WAS PREVIOUS BUSY RB(NZ) SPA850 YES SEND THRU XIF IFT SBS=0 * * CHECK IF SPECIFIC OR GENERAL SID * LD A2,FSID GET SID SUK A2,SID GENERAL SID ? RF(Z) TPA300 YES XIF IFT SBS=1 RF TPA300 TREAT AS GENERAL POLL XIF * * HERE ON SPECIFIC SID * LD A6,FDWTIN GET DWT-ADDR IFT AUX=1 * TEST SPECIFIC DID LD A1,FDID GET DID SUK A1,DID GENERAL DID ? ABL(NZ) TPA400 NO,SELECT AI DEVICE EJECT * * SPECIFIC TRAFFIC POLL * TEST IF PRINT MODE * LD A1,SREADY RF(NZ) TPA207 SELECT DEVICE LD A1,SPRINT RF(NZ) TPA206 PRINT STATEMENT LD A1,DWTPRT,A6 RF(Z) TPA203 NO PRINT MODE TPA201 EQU * LD A1,DWTDID,A6 ST A1,FDID INIT AI DEVICE ADDRESS LD A1,DWTST,A6 ANK A1,BUSYFL RF(Z) TPA306 NOT BUSY IM TWABT CF A5,TRNOTR ABL SP100 RETURN AFTER TRANSMIT BUSY TPA203 EQU * XIF LD A1,DWTST,A6 GET STATUS RB(N) SPA500 NO ORDER ON LD A1,DWTOR,A6 GET ORDER ANK A1,/FF REMOVE OPTIONS SUK A1,/06 WRITE ORDER ? RB(NZ) SPA500 NOTHING TO SEND,NO TRAFFIC EJECT * * SEND TEXT ON SPECIFIC TRAFFIC POLL * TPA205 EQU * IFT SBS=1 LDK A2,/51 SBS SID ST A2,FSID XIF ST A6,FDWTUT WRITING DWT LD A8,DWTECB,A6 GET ECB ADDRESS ST A8,FECB IFF MMUPAG=0 LDKL A4,MMUBUF GET BUFFER ADDRESS ST A4,ECBBA,A8 CF A15,DC:MOT MOVE DATA TO OUTPUT BUFFER XIF IFT STAT=1 LDK A1,CSSTBL DATA BLOCKS TRANSMITTED CF A15,DCSUPS UPDATE STATISTICS XIF LD A2,ECBBA,A8 GET BUFFER ADDRESS ADK A2,2 DUMMY WORD ST A2,FECBBA LD A2,ECBRL,A8 GET REQUESTED LENGTH RF(Z) TPA210 PROCESS KEY SUK A2,2 RESTORE CORRECT LENGTH ST A2,FECBRL CM NAKCNT CLEAR NAK COUNTER CF A5,TRTEXT TRANSMIT TEXT IM XACK ACK EXPECTED ABL SP100 IFT AUX=1 TPA206 EQU * LD A1,DWTTXT CW A1,FDWTIN ABL(NE) BRM MUST BE FOR THE SAME TERMINAL CF A5,FRWABT SET WABT RB TPA203 TPA207 EQU * LD A1,DWTTXT CW A1,FDWTIN ABL(NE) BRM CF A5,SETREA RF TPA400 XIF TPA210 EQU * LD A1,ECBCW,A8 GET FUNCTION CODE ANKL A1,/FF SC A1,DCSTR9 INIT TRANSFER FIELD CF A5,TRSFCN TRANSFER FUNCTION KEY ABL SP100 EJECT * * GENERAL TRAFFIC POLL DETECTED * TPA300 EQU * IFT AUX=1 * * TEST IF PRINT SEQUENCE INITIATED * LD A1,SREADY RF(Z) TPA301 CF A5,SETREA ABL TPA400 TPA301 EQU * LD A1,SPRINT RF(Z) TPA302 CF A5,FRWABT INIT WABT TPA302 EQU * LD A6,DCSTQ RF(Z) TPA315 NO PENDING THRU TPA305 EQU * SUK A6,DWTOPN LD A1,DWTDID,A6 GET DID ST A1,FDID LDR* A1,A6 ST A1,FSID TPA306 EQU * ST A6,FDWTUT INIT OUTPUT DWT CF A5,TRTHRU SEND THRU CM DWTPRT,A6 ABL SP100 TPA315 EQU * XIF IFT SBS=1 LD A6,TPAX WAS PREVIOUS TR.POLL + ACK ? ABL(NZ) SPA500 YES, SEND NO TRAFFIC XIF LD A6,DCWRQ GET QUEUE ANCHOR ABL(Z) SPA500 NO TRAFFIC SUK A6,DWTOPN GET DWT ADDRESS LDR* A2,A6 INIT SID ST A2,FSID LDK A2,DID ST A2,FDID RESTORE GENERAL DID RB TPA205 SEND FIRST TEXT IN QUEUE IFT AUX=1 EJECT * * FORCE WABT ANSWER(WITH SPECIFIC DID) * ON POLL FOLLOWING TEXT+DC2 (PRINT) * FRWABT EQU * LD A6,FDWTIN RESTORE LAST DWT CM SPRINT RESTORE PRINT FLAG LD A1,DWTDID,A6 GET SPECIFIC DID ST A1,FDID STORE IT TO BE SEND IM DWTPRT,A6 INIT WABT-THRU INDICATOR RTN A5 * * INIT DEVICE (SID,DID) * SETREA EQU * LD A1,DIDREA ST A1,FDID LD A1,DCSTRX ST A1,FSID RTN A5 EJECT * * SELECT AI DEVICE * TPA400 EQU * * * TEST IF DID IS VALID * CF A5,DESEL EXAMINE EVENTUAL DESELECTION CM SREADY CLEAR READY TO SEND LD A6,FDWTIN GET DWT LD A1,DWTST,A6 TERMINAL BUSY ? ANKL A1,BUSYFL ABL(NZ) BRM YES,DONT ACCEPT ANY SELECT LD A1,FDID GET RECEIVED DID LDK A3,DWTLST GET DEVICE LIST ADR A3,A6 TPA403 EQU * LDR* A2,A3 GET DID IN LIST ABL(Z) BRM END OF LIST ANKL A2,NBIT0 IGNORE STATUS CWR A1,A2 OK ? RF(E) TPA405 YES,DID RECOGNIZED ADK A3,2 RB TPA403 EJECT * * DID OK,FETCH APPROPRIATE DEVICE STATUS * TPA405 EQU * ST A1,DWTDID,A6 SAVE AI ADDRESS LDR* A2,A3 GET AI STATUS ANKL A2,BIT0 AI OPERABLE ? RF(NZ) TPA500 NO * * DEVICE READY * CF A5,TREADY ABL SP100 * * DEVICE NOT OPERABLE * TPA500 EQU * CF A5,TRNOP ABL SP100 EJECT * * DESELECT DEVICE IF REQUIRED * RECOVERY DID=/72 * RELEASE TERMINAL BY RESETTING STATUS BUSY * DESEL EQU * LD A1,FDID CWK A1,CHDSL DESELECTION ? RF(E) DESEL1 RTN A5 NO DESEL1 EQU * DESELECTION,RESTORE TERMINAL CM DWTPRT,A6 RESET WABT-THRU INDICATOR LDK A1,/FE ANS A1,DWTST,A6 RESET TERMINAL BUSY CF A5,TRNOP SEND NO TRAFFIC RTN A5 XIF EJECT * * * RETRANSMIT REQUEST * * RT EQU * LD A1,XACK RF(Z) RT110 SEND NO TRAFFIC IF ACK NOT EXP LD A1,ZRECOV+4 CW A1,FSID ABL(NE) BRM NOT PROPER SID LD A6,FDWTUT RF(Z) RT150 NO TEXT TO RETRANSMIT LD A8,DWTECB,A6 RESTORE ECB ADDRESS LD A1,ECBRL,A8 THRU,FKEY ? RF(Z) RT150 YES IM NAKCNT COUNT NAK:S LD A2,NAKCNT SUK A2,4 RF(Z) RT100 4 NAK:S RECEIVED IM TSTENQ CF A5,TRTEXT RETRANSMIT TEXT IFT STAT=1 LDK A1,CSSTRT DATA BLOCKS RETRANSMITTED CF A15,DCSUPS UPDATE STATISTICS XIF ABL SP100 RT100 LDK A1,2 4 NAK:S: THROUGHPUT ERROR CF A5,RQSE50 COMPLETE WRITE REQUEST IF ANY ABL SP100 RT110 EQU * CF A5,TRNOTR SEND NO TRAFFIC ABL SP100 EJECT * * HERE RECOVERY ON LAST MESSAGE * TEXT EXCLUDED * RT150 EQU * IM TSTENQ CFI A5,LSEND RETURN TO LAST STATUS IFT STAT=1 LDK A1,CSSTRT DATA BLOCKS RETRANSMITTED CF A15,DCSUPS UPDATE STATISTICS XIF ABL BRM EJECT * * * TRANSMIT PROCEDURE RESPONSES * * TRACK EQU * LDKL A4,DCSTR1 NO TRAFFIC WITH ACK IM XACK LDKL A1,TRACK ST A1,LSEND RF TRCTRL * * ACK NOT RECEIVED SEND ENQ * TRRPRQ EQU * IFT STAT=1 LDK A1,CSSXC1 REPLY REQUESTS TRANSMITTED CF A15,DCSUPS UPDATE STATISTICS XIF CF A5,TRSYNC LDK A2,SOH CF A5,WRITE LDKL A8,0 BCC LD A2,DTECHP,A7 CHP CF A5,WRITEP LD A2,ZRECOV+4 CF A5,WRITEP LAST SID LD A2,ZRECOV+6 LAST DID CF A5,WRITEP DID LDKL A4,DCSTR4 ENQ RF TRC100 * TRTRAF EQU * LDKL A4,DCSTR3 TRAFFIC IM XACK LDKL A1,TRTRAF ST A1,LSEND RF TRCTRL EJECT * * SEND NO TRAFFIC * IF ACK OR WABT HAVE TO BE INCLUDED * TAKE CARE ABOUT SID,DID * * TRNOTR EQU * LD A1,DCSTRX RESTORE SID TO BE ACKNOWLEDGED ST A1,FSID LD A1,TACK TRANSMIT ACK ? RF(Z) TRNOT1 NO RB TRACK YES TRNOT1 EQU * LD A1,TWABT TRANSMIT WABT ? RF(Z) TRNOT2 NO RB TRACK YES TRNOT2 EQU * LDKL A4,DCSTR5 CF A5,TRSYNC LDKL A8,0 BCC RF TRC100 EJECT * * * DEVICE HANDLING * IFT AUX=1 TREADY EQU * LDKL A4,DCSTR6 IM XACK LDKL A1,TREADY ST A1,LSEND RF TRCTRL XIF TRTHRU EQU * LDKL A4,DCSTR7 IM XACK LDKL A1,TRTHRU ST A1,LSEND RF TRCTRL IFT AUX=1 TRNOP EQU * LDKL A4,DCSTR8 IM XACK LDKL A1,TRNOP ST A1,LSEND RF TRCTRL XIF TRSFCN EQU * LDKL A4,DCSTR9 IM XACK LDKL A1,TRSFCN ST A1,LSEND RF TRCTRL EJECT * TRCTRL EQU * * * HERE TO TEST ON RETRANSMISSION CASE OR NOT * IF YES RESTORE PREVIOUS HEADER * LD A1,TSTENQ RF(NZ) RETRAX RETRANSMISSION CF A5,TRHEAD TRC100 LCR A2,A4 GET CHARACTER ADK A4,1 INCREMENT POINTER ANK A2,/7F RF(Z) TRC200 END OF STRING CF A5,WRITEP WRITE CHARACTER RB TRC100 TRC200 LDK A2,ETX CF A5,WRITEP SEND ETX LDR A2,A8 CF A5,WRITEP SEND BCC LDK A3,3 TRC210 EQU * LDK A2,PAD PAD CHAR CF A5,WRITE SEND PAD SUK A3,1 RB(NZ) TRC210 CF A5,CHALTO STOP O/P RTN A5 * * RESTORE LAST PARAMETERS: * RID SID DID (DLE 1 OR DLE ?) * RETRAX EQU * CM TSTENQ LC A3,ZRECOV ST A3,COUNT INIT PARAMETERS COUNT LDK A3,/FF ANS A3,ZRECOV DESTROY FIRST CHARACTER COUNTER CF A5,TRSYNC LD A2,ZRECOV CF A5,WRITE SEND SOH LDK A3,2 INIT INDEX COUNTING LDKL A8,0 BCC LOOP EQU * LD A2,ZRECOV,A3 CF A5,WRITEP SEND CHARACTER ADK A3,2 COUNTER IN PROGRESS CC A3,COUNT+1 END OF SAVE AREA ? RB(NE) LOOP NO,GO ON WRITING LD A1,COUNT SC A1,ZRECOV RESTORE COUNTER LD A1,FDWTUT RECOGNIZE RETURN RB(Z) TRC100 STATUS LD A2,DWTECB,A1 RESTORE ECB ADDRESS LD A1,ECBRL,A2 THRU OR FKEY ? RB(Z) TRC100 YES RF TRT010 TEXT RECOVERY EJECT * * * TRANSMIT HEADER : * SOH RID SID DID * DLE 1 (ACK),DLE ? (WABT=ACK+BUSY) IF REQUIRED * SAVE IT FOR RECOVERY PURPOSES * * TRHEAD EQU * CF A5,TRSYNC TRANSMIT SYNC LDK A2,SOH LDK A3,0 INIT INDEX ST A2,ZRECOV,A3 CF A5,WRITE SEND SOH ADK A3,2 LDKL A8,0 BCC LD A2,DTECHP,A7 CHP ST A2,ZRECOV,A3 CF A5,WRITEP SEND RID ADK A3,2 LD A2,FSID ST A2,ZRECOV,A3 CF A5,WRITEP SEND SID ADK A3,2 LD A2,FDID ST A2,ZRECOV,A3 SEND DID CF A5,WRITEP ADK A3,2 * * HERE TO TEST IF ACK OR WABT HAVE TO BE INCLUDED IN HEADER * LD A1,TACK TRANSMIT ACK ? RF(Z) HEAD10 NO,TEST TRANSMIT WABT CM TACK LDK A2,DLE ST A2,ZRECOV,A3 CF A5,WRITEP SEND DLE ADK A3,2 LDK A2,ACK1 ST A2,ZRECOV,A3 CF A5,WRITEP SEND 1 ADK A3,2 RF HEAD20 RETURN HEAD10 EQU * LD A1,TWABT RF(Z) HEAD20 NO PENDING WABT * CM TWABT NO REJECT TRANSMIT WABT LDK A2,DLE ST A2,ZRECOV,A3 CF A5,WRITEP SEND DLE ADK A3,2 LDK A2,WABT ST A2,ZRECOV,A3 CF A5,WRITEP SEND WABT ADK A3,2 HEAD20 EQU * SC A3,ZRECOV SAVE PARAMETERS COUNTER IN FIRST POSITION RTN A5 EJECT * * * TEST IF TRANSMIT OR RETRANSMIT TEXT * INCLUDE PENDING ACK,PENDING WABT EVENTUALLY * TRTEXT EQU * LD A1,TSTENQ RB(NZ) RETRAX RETRANSMISSION EJECT * * TRANSMIT TEXT * * CF A5,TRHEAD TRT010 EQU * LDK A2,STX CF A5,WRITEP SEND STX LD A3,FECBRL GET REQUESTED LENGTH LD A4,FECBBA AND BUFFER ADDRESS TRT100 LCR A2,A4 GET CHARACTER ADK A4,1 INCREMENT POINTER CF A5,WRITEP SEND CHARACTER TRT120 EQU * SUK A3,1 RB(NZ) TRT100 NEXT CHARACTER ABL TRC200 ALL TRANSMITTED. SEND ETX AND BCC EJECT * * * TRANSMIT SYNC SEQUENCE * * TRSYNC EQU * CF A5,CSYNCO START O/P WITH SYNC DEF CF A5,READ WAIT FOR OUTPUT INTERRUPT LDK A3,4 4 SYNS TRS100 LDK A2,SYN CF A5,WRITE SEND SYN SUK A3,1 RB(NZ) TRS100 RTN A5 EJECT ************************************************************************** ************************************************************************** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** D R D C 2 2 - U N I S C O P E 1 0 0 / 2 0 0 D R I V E R ** ** ** ** ** ** H A R D W A R E I N T E R F A C E H A N D L I N G ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ************************************************************************** ************************************************************************** EJECT * * * CINIT : INITIALIZE LINE CONTROL UNIT INFO * CINIT EQU * CM DCLCI CLEAR I/P ACTIVE IND ADKL A15,4 INCREMENT STACK POINTER ABR* A15 RETURN TO CALLER EJECT * * CSYNCI : SEND SYNC PATTERN FOR INPUT DATA * * CSYNCI EQU * LD A2,PFPOST RF(NZ) CSYN:I WAIT FOR POWER UP CF A5,CHALTI STOP I/P ST A5,DCLCI SET I/P ACTIVE FLAG ADK A5,4 ADD RETURN OFFSET FOR ABR IFT SALCUZ=1 LDK A2,PARITY CHAR PARITY FUNCTION FOR LC CIO A2,1,DCDEVI STARTY I/O LDK A2,SYN SYNC PATTERN OTR A2,1,DCDEVI SEND I/P SYNC PATTERN TO LC XIF IFF SALCUZ=1 LDKL A2,CBCARR+SYN SYNC PATTERN CIO A2,1,DCDEVI SEND I/P SYNC PATTERN TO LC XIF CSYN:I EQU * ABR* A5 RETURN TO CALLER WITH CR SET * * * CSYNCO : START TRANSMITTER WITH SYNC DEF * CSYNCO EQU * LD A2,PFPOST RF(NZ) CSYN:O WAIT FOR POWER UP IFT SALCUZ=1 LDK A2,PARITY CHAR PARITY TYPE CHECK BY CU CIO A2,1,DCDEVO CIO START RF(A) CSYNC2 ACCEPTED -> SST A2,DCDEVO TRY TO READ STATUS THEN RF(A) CSYNC1 ACCEPTED -> ABL BRM NOT ACCEPTED TIMEOUT REQUEST CSYNC1 EQU * LDK A2,PARITY RETRY CIO CIO A2,1,DCDEVO DO IT CSYNC2 EQU * LDK A2,SYN SYNC PATTERN OTR A2,1,DCDEVO DEFINE SYNC XIF IFF SALCUZ=1 CIO A2,1,DCDEVO START TRANSMITTER XIF CSYN:O EQU * RTN A5 EJECT * * CHALTI : HALT INPUT CHANNEL * * CHALTI EQU * IFT SALCUZ=1 LDK A2,CBSTOP STOP FUNCTION BIT XIF CIO A2,0,DCDEVI HALT I/P CM DCLCI CLEAR I/P ACTIVE IND SST A2,DCDEVI READ STATUS IFF LOGG=0 CF A5,LOGSST LOGG I/P SST XIF ADK A5,4 INCR STACK POINTE ABR* A5 RETURN TO CALLER * * * CHALTO : HALT O/P CHANNNEL * CHALTO EQU * IFT SALCUZ=1 LDK A2,CBSTOP STOP FUNCTION CIO A2,0,DCDEVO STOP CU CF A5,READ WAIT FOR INTERRUPT XIF IFF SALCUZ=1 CIO A2,0,DCDEVO HALT CU XIF ADK A5,4 INCREMENT STACK POINTER SST A2,DCDEVO GET STATUS ABR* A5 RETURN TO CALLER EJECT * * * RECEIVER INTERRUPT * * IH2201 EQU * ST P,INTSAV SAVE INTERRUPT ROUTINE ADDRESS IFT CPU852=1 CF A15,SAVE8 XIF IFF CPU852=1 MSR 8,A15 XIF CF A15,LDREG RESTORE DC REGS A3 - A8 INR A2,0,DCDEVI READ CHAR RF(NA) IHIN20 NOT ACCEPTED,CHECK STATUS IFF LOGG=0 CF A5,LOGIN LOG RECEIVED CHARACTER XIF XRR A8,A2 CALCULATE BCC LDR A1,A2 MOVE CHAR TO FORM FLAG ORKL A1,/FF00 SET FLAG FOR CARRIER ON ST A1,DCLCI SET I/P CARR FLAG CM DCSTCU CLEAR SST SAVE LDK A1,1 ST A1,DTEPLS,A7 CU OPERABLE IHIN10 RTN A5 IHIN20 CF A5,SST PERFORM SST ABL BRM * * * TRANSMITTER INTERRUPT * * IH2202 EQU * ST P,INTSAV SAVE INTERRUPT ROUTINE ADDRESS IFT CPU852=1 CF A15,SAVE8 XIF IFF CPU852=1 MSR 8,A15 XIF CF A15,LDREG RESTORE DC REGS A3 - A8 RB IHIN10 EJECT * * * SST INSTRUCTION AND STATUS CHECK * * CHLC STATUS : BIT 10=CARRIER OFF * BIT 14=THROUGHPUT ERROR * CONTROL UNIT STATUS: SEE EQU:S ABOVE * SST EQU * SST A2,DCDEVI READ STATUS LDR A3,A2 MOVE STATUS IFF LOGG=0 CF A5,LOGSST LOG SST INFORMATION XIF ANK A2,SBERR ERROR BIT SET ? RF(NZ) SST050 YES IFT SALCUZ=0 LD A2,DCLCI I/P STATUS ? RF(Z) EXDISP I/P NOT ACTIVE IGNORE RF(N) SST100 I/P ACTIVE WITH DATA LDKL A2,CBCARR+SYN CARRIER ON RESYNC CIO A2,1,DCDEVI START I/P AGAIN RF EXDISP RETURN TO DISP XIF IFT SALCUZ=1 RF SST100 XIF SST050 EQU * CM DTEPLS,A7 CU NOT OPERABLE ANK A2,SBCARR CARRIER OFF RF(Z) SST052 NO LD A2,DCLCI I/P STATUS RF(Z) EXDISP NOT ACTIVE IGNORE CARRIER OFF RF SST100 EXIT SST052 EQU * LDR A2,A3 MOVE STATUS ANK A2,SBTHRU THROUGHPUT ERROR ? RF(Z) SST100 NO IFT STAT=1 LDK A1,CSCDIT THROUGHPUT ERROR CF A15,DCSUPS UPDATE STATISTICS XIF ABL BRM800 THROUGHPUT ERROR SST100 EQU * LDR A2,A3 ANK A2,1 NOT OPERABLE ? RF(Z) SST200 NO IFT STAT=1 LDK A1,CSCDTE NOT OPERABLE CF A15,DCSUPS UPDATE STATISTICS XIF CF A15,STREG SAVE REGISTERS CF A15,SETIME DELAY 1 SEC DATA SST150,10 ABL TDISP DISPATCH SST150 EQU * CF A15,LDREG LOAD REGISTERS SST200 EQU * ST A1,DCSTCU RTN A5 EJECT * * * WRITE FROM OR READ ONE CHARACTER TO A2 * * WRITE EQU * OTR A2,0,DCDEVO SEND CHAR RF(A) WRIT10 RF READ THROUGPUT ERROR WRIT10 XRR A8,A2 ACCUMULATE BCC IFF LOGG=0 CF A5,LOGOUT LOG OUTPUT CHARACTER XIF * READ CF A15,STREG EXDISP EQU * ABL TDISP EJECT * * *** WRITEP * * WRITE A2 WITH PARITY * * WRITEP EQU * IFT SALCUZ=0 ANK A2,/FF ECR A1,A2 ORK A2,/80 WRI100 SLL A1,1 RB(P) WRI100 RB(Z) WRITE WRITE XRK A2,/80 RB WRI100 XIF IFT SALCUZ=1 RB WRITE WRITE CHAR XIF * * * *** READP * * READ CHARACTER TO A2 AND CHECK PARITY * * READP CF A5,READ IFT SALCUZ=0 ECR A1,A2 RE100 SLL A1,1 RF(Z) RE110 RB(NN) RE100 XRK A2,/80 RB RE100 RE110 LDR A1,A2 ANK A2,/7F XIF IFT SALCUZ=1 LDK A1,/80 XIF ADK A5,4 ANK A1,/80 XRK A1,/80 ABR* A5 * * EJECT * * * POWER ON FUNCTIONS * * DC22ON EQU * IFT CPU852=1 CF A15,SAVE8 XIF IFF CPU852=1 MSR 8,A15 XIF LDKL A7,DTETAB DTE TAB ADDRESS CF A15,CINIT INIT LINE CONTROL UNIT INFO LD A2,DCTPGP GET POLL TIMER POINTER RF(NZ) DRDC20 ALREADY STARTED CF A15,SPOTIM START POLL TIMER DRDC20 ABL BRM EJECT ************************************************************************** ************************************************************************** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** D R D C 2 2 - U N I S C O P E 1 0 0 / 2 0 0 D R I V E R ** ** ** ** ** ** W O R K A R E A S ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ************************************************************************** ************************************************************************** * * * DC RECEIVE BUFFER POOL * * RLINK EQU RBUFL+RBUFL+8 DCRBUF EQU * POINTER TO FIRST FREE BUFFER DATA *+2 IFT RBUFNR=14 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=13 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=12 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=11 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=10 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=9 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=8 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=7 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=6 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=5 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=4 DATA *+RLINK RES RBUFL+3 DATA *+RLINK RES RBUFL+3 XIF IFT RBUFNR=3 DATA *+RLINK RES RBUFL+3 XIF DATA *+RLINK RES RBUFL+3 DATA 0 RES RBUFL+3 EJECT * * MMU WORK BUFFER * IFF MMUPAG=0 MMUBUF RES TBUFL+1 MMU WORK BUFFER XIF EJECT * * * INTERRUPT LOGGING ROUTINE * * IFF LOGG=0 LOGSST ST A2,SAVE2 ORKL A2,/F000 RF LOG10 LOGOUT ST A2,SAVE2 ORKL A2,/0F00 RF LOG10 LOGIN CWK A2,/FF RF(E) LOGE10 ST A2,SAVE2 LOG10 ST A3,SAVE3 LD A3,LOGPNT STR A2,A3 ADK A3,2 CWK A3,LOGEND RF(L) LOGEXI LDKL A3,LOGSTA LOGEXI ST A3,LOGPNT LD A2,SAVE2 LD A3,SAVE3 LOGE10 RTN A5 EJECT * * LOGPNT DATA LOGSTA LOGSTA EQU * RES 1000 LOGEND EQU *-4 SAVE2 DATA 0 SAVE3 DATA 0 XIF * * * EJECT * * DTETAB * * FIXED PART DTETAB EQU * DATA 0,0,0,0,0,0 DATA 0,0 IFT MMUPAG=1 DATA 0,0 XIF DATA DTSTAT-DTETAB DATA 0,0,0 * DRIVER DEPENDENT PART DATA 0,0,0,0 * STATISTICAL BUFFER DTSTAT EQU * DATA 0 SYMBOLIC ID DATA 0 COUNTER STATUS INDEX DATA CSCXC3 MAX COUNTER INDEX DATA 0,0 COUNTERS DATA 0,0,0,0,0,0 DATA 0,0,0,0,0,0 * DATA 0,0,0,0,0,0 * DATA 0,0,0,0,0,0 * COUNTER AREA DATA 0,0,0,0,0,0 * DATA 0,0,0,0,0,0 * DATA 0,0,0,0,0,0 * DATA 0 * * EJECT * * * PROCEDURE WORK AREAS * * FDWTIN DATA 0 CURRENT DWT FOR RECECEION FDWTUT DATA 0 CURRENT DWT FOR TRANSMISSION XACK DATA 0 ACK EXPECTED TACK DATA 0 ACK TO BE TRANSMITTED WPOLL DATA 0 WAIT FOR POLL TWABT DATA 0 WABT TO BE TRANSMITTED XBUSY DATA 0 BUSY ANSWER ON PREVIOUS POLL HEADER DATA 0,0 HEADER STORAGE AREA * FECB DATA 0 WRITING ECB FECBBA DATA 0 WRITING BUFFER ADDRESS FECBRL DATA 0 WRITING BUFFER LENGTH FSID DATA 0 RESPONDING SID FDID DATA 0 RESPONDING DID NAKCNT DATA 0 NAK COUNTER * TSTENQ DATA 0 RECOVERY FLAG COUNT DATA 0 CHARACTERS TO BE SAVED * ZRECOV DATA 0,0,0,0,0,0 SAVE TRANSMIT HEADER LSEND DATA 0 LAST TRANSMIT ADDRESS * BUSYFL EQU 1 BUSY FLAG (BIT 15 IN DWT) * SPRINT DATA 0 PRINT STATEMENT DWTTXT DATA 0 LAST DWT FOR TEXT SREADY DATA 0 SELECTION+TEXT DIDREA DATA 0 SELECTED DID IFT SBS=1 SBSSTA EQU 7 POSITION OF TERMINAL ID SBSTID DATA 0 INDEX TO FOUND TERMINAL ID SBSA3 DATA 0 SAVE AREA A3 SBSA4 DATA 0 SAVE AREA A4 TPAX DATA 0 1 IF TR.POLL+ACK RECEIVED XIF * EJECT * * STRING EQU * FRAME STRINGS DATA 0,0 TRAFFIC POLL WITHOUT ACK DATA /1031,0 TRAFFIC POLL WITH ACK DATA /0500,0 STATUS POLL WITHOUT ACK DATA /1031,/0500 STATUS POLL WITH ACK DATA /0510,/3100 STATUS POLL WITH ACK DATA /1015,0 RETRANSMIT REQUEST STRINE EQU * END OF STRINGS * * FRAME EQU * BRANCH TABLE FOR FRAMES DATA TP TRAFFIC POLL WITHOUT ACK DATA TPA TRAFFIC POLL WITH ACK DATA SP STATUS POLL WITHOUT ACK DATA SPA STATUS POLL WITH ACK DATA SPA STATUS POLL WITH ACK DATA RT RETRANSMIT REQUEST EJECT * * OUTPUT SOFTWARE MESSAGES * * DCSTR1 DATA 0 WORK AREA FOR NO TRAFFIC+ACK DCSTRX DATA 0 SAVE LAST SID TEXT DCSTR3 DATA /1030,0 TRAFFIC DCSTR4 DATA /1005,0 REPLY REQUEST DCSTR5 DATA /0404,0 NO TRAFFIC DCSTR6 DATA /103E,0 DEVICE READY DCSTR7 DATA /103B,0 THRU DCSTR8 DATA /103D,0 DEVICE NOT OPERABLE DCSTR9 DATA 0 REQUEST PROCESSOR MESSAGE EJECT * * * CONSTANTS AND WORK AREAS * * DCONOF DATA 0 ON- / OFFLINESWITCH DCSTOL DATA 0 OLD DC EQUIPMENT STATUS DCSTCU DATA 0 CURRENT STATUS DCWRQ DATA 0 WRITE REQUEST QUEUE DCSTQ DATA 0 THRU REQUEST QUEUE DCTPGP DATA 0 TIMER POINTER GENERAL POLL DCLCI DATA 0 DC UNIT I/P STATUS END