|
|
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: 46016 (0xb3c0)
Notes: pts_type(SC)
Names: »DRND01.SC«
└─⟦7b35573c9⟧ Bits:30009690 Philips computer tape "600402"
└─⟦this⟧ »M:AF/DRND01.SC«
IDENT DRND01 REL 11.0 81-05-27 870105041100 =2, INTERRUPT TABLES INCLUDED REL 11.0 81-05-25 =1, COND. ASS. FOR ONLY SUM-CONN. REL 11.0 81-01-26 * * * ************************************************************ * * PHILIPS TERMINAL SYSTEM PTS * * DRND01 = TERMINAL NETWORK DISTRIBUTOR * * * ************************************************************ * * * THIS PROGRAM CONTAINS INPUT AND OUTPUT ENTRIES * CALLED BY TERMINAL DEVICE DRIVERS. AT CALL, IT * CHECKS CHANNEL PARAMETERS IN DWT, AND BRANCHES * TO THE APPROPRIATE LINE DRIVER FOR EXECUTION OF * THE I/O REQUEST. THIS CONSTRUCTION MAKES IT * POSSIBLE TO HAVE ONLY ONE TERMINAL DEVICE DRIVER * FOR EACH TERMINAL DEVICE, IRRESPECTIVE OF * CONNECTION TYPE. IT IS ALSO POSSIBLE TO USE * SEVERAL TERMINAL DEVICE CHANNEL UNITS TOGETHER * IN THE SAME SYSTEM. * * THE PROGRAM ALSO CONTAINS A NUMBER OF SERVICE * SUBROUTINES TO BE USED BY TERMINAL DEVICE DRIVERS * AND LINE DRIVERS. * EJECT * * THE PROGRAM IS DIVIDED INTO A NUMBER OF SECTIONS. * SECTIONS CONTAINING PROGRAM CODE ARE DIVIDED * INTO ROUTINES. THE ROUTINES ARE LISTED AT * BEGINNING OF EACH SECTION. THE SECTIONS, IN * ORDER OF APPEARANCE IN LIST, ARE: * * NAME FUNCTION * * ENTRIES DECLARE ENTRY POINTS * EXTERNALS DECLARE EXTERNAL REFERENCES * CONDITION SET CONDITIONAL ASSEMBLY PARAMETERS * CONSTANTS SET CONSTANT VALUES * DATA DATA AREAS * * DEVICE DR ROUTINES CALLED BY DEVICE DRIVERS * LINE DR ROUTINES CALLED BY LINE DRIVERS * EJECT * *********** * ENTRIES * *********** * * TERMINAL DEVICE DRIVER REQUESTS * ENTRY INPUT INPUT OF ONE CHARACTER ENTRY STABLK DEFINE START OF BLOCK ENTRY OUTPUT OUTPUT OF ONE CHARACTER ENTRY ENDBLK DEFINE END OF BLOCK ENTRY ECHRTN RETURN FROM ECHO ENTRY ECHO ECHO ROUTINE ENTRY ECHEND END OF ECHO ENTRY GETCHR GET ONE CHARACTER FROM ECB-BUFFER ENTRY ABORT ABORT INPUT REQUEST * * * TERMINAL DEVICE DRIVER EXIT ROUTINES * ENTRY LENDER REQUEST ERR, END I/O & DISPATCH ENTRY LENDIS END I/O & DISPATCH ENTRY LDISP DISPATCH * * * LINE DRIVER EXIT ROUTINES * ENTRY NDREPO POP, OK & RETURN ENTRY NDRETO OK & RETURN ENTRY NDREP POP & RETURN ENTRY NDRET RETURN * EJECT * * LINE DRIVER SERVICE ROUTINES * ENTRY NDSAV8 SAVE A3-A5, A7-A8 IN DWT ENTRY NDGET8 GET A3-A5, A7-A8 FROM DWT ENTRY NDREWS CALL RECOVERY FOR WORK STATION ENTRY NDREDW CALL RECOVERY FOR DEVICE ENTRY NDGEDN GET HIGEST DWT NUMBER ON WS ENTRY NDGEDW CALCULATE DWT ADDRESS * EJECT * * INTERRUPT TABLE FOR CHLT * ENTRY INTLT1,INTLT2,INTLT3,INTLT4 * * INTERRUPT TABLE FOR CHRT * ENTRY INTRT1,INTRT2,INTRT3,INTRT4 * * INTERRUPT TABLE FOR SALCUZ * ENTRY INTSL1,INTSL2,INTSL3,INTSL4 ENTRY INTSL5,INTSL6,INTSL7,INTSL8 * * INTERRUPT TABLE FOR ASCU4Z * ENTRY INTAS1,INTAS2,INTAS3,INTAS4 ENTRY INTAS5,INTAS6,INTAS7,INTAS8 * * INTERRUPT TABLE FOR PLC - LOCAL * ENTRY INTPL1,INTPL2,INTPL3,INTPL4 * * INTERRUPT TABLE FOR PLC - REMOTE * ENTRY INTPR1,INTPR2,INTPR3,INTPR4 * * INTERRUPT TABLE FOR VIDEO * ENTRY INTVU1,INTVU2,INTVU3,INTVU4 ENTRY INTVU5,INTVU6,INTVU7,INTVU8 * EJECT * ************* * EXTERNALS * ************* * * TOSS ROUTINES * EXTRN SAVE8 SAVE A1-A8 ON A15 STACK EXTRN TDISP TOSS DISPATCHER EXTRN DISEND END I/O & DISPATCH EXTRN TENDIO END I/O REQUEST * * * REQUEST ROUTINES IN LINE DRIVERS * * CHLT * EXTRN LTCHRI CHARACTER INPUT EXTRN LTSTBL START OF BLOCK EXTRN LTCHRO CHARACTER OUTPUT EXTRN LTENBL END OF BLOCK EXTRN LTDISP DISPATCH * * CHRT * EXTRN RTCHRI CHARACTER INPUT EXTRN RTSTBL START OF BLOCK EXTRN RTCHRO CHARACTER OUTPUT EXTRN RTENBL END OF BLOCK EXTRN RTDISP DISPATCH * EJECT * * SALCUZ * EXTRN SLCHRI CHARACTER INPUT EXTRN SLSTBL START OF BLOCK EXTRN SLCHRO CHARACTER OUTPUT EXTRN SLENBL END OF BLOCK EXTRN SLDISP DISPATCH * * ASCU4Z * EXTRN ASCHRI CHARACTER INPUT EXTRN ASSTBL START OF BLOCK EXTRN ASCHRO CHARACTER OUTPUT EXTRN ASENBL END OF BLOCK EXTRN ASDISP DISPATCH * * FT80 * EXTRN FTCHRI CHARACTER INPUT EXTRN FTSTBL START OF BLOCK EXTRN FTCHRO CHARACTER OUTPUT EXTRN FTENBL END OF BLOCK EXTRN FTDISP DISPATCH * * PLC - LOCAL * EXTRN PLCHRI CHARACTER INPUT EXTRN PLSTBL START OF BLOCK EXTRN PLCHRO CHARACTER OUTPUT EXTRN PLENBL END OF BLOCK EXTRN PLDISP DISPATCH * EJECT * * PLC - REMOTE * EXTRN PRCHRI CHARACTER INPUT EXTRN PRSTBL START OF BLOCK EXTRN PRCHRO CHARACTER OUTPUT EXTRN PRENBL END OF BLOCK EXTRN PRDISP DISPATCH * * VIDEO * EXTRN VUCHRI CHARACTER INPUT EXTRN VUSTBL START OF BLOCK EXTRN VUCHRO CHARACTER OUTPUT EXTRN VUENBL END OF BLOCK EXTRN VUDISP DISPATCH * EJECT * * DWT DISPLACEMENTS * EXTRN DWTCHP CHANNEL PARAMETERS EXTRN DWTST STATUS EXTRN DWTECB ECB ADDRESS EXTRN DWTOR INDEX AND ORDER EXTRN DWTADR DRIVER ADDRESS BLOCK ADDRESS EXTRN DWTWAT WAIT/ACTIVATE INDICATOR EXTRN DWTA3 SAVE AREA FOR A3 EXTRN DWTA4 SAVE AREA FOR A4 EXTRN DWTA5 SAVE AREA FOR A5 EXTRN DWTSB2 STACK BASE EXTRN DWTA7 SAVE AREA FOR A7 EXTRN DWTA8 SAVE AREA FOR A8 EXTRN DWTECH DWT ADDRESS OF ECHO OUTPUT DEVICE * * * ECB DISPLACEMENTS * EXTRN ECBBA BUFFER ADDRESS EXTRN ECBRL REQUESTED LENGTH EXTRN ECBEL EFFECTIVE LENGTH * * * MISCELLANEOUS * EXTRN RECADR RECOVERY ADDR IN DRIVER ADDR BLOCK EXTRN ECHADR ECHO ADDRESS IN DRIVER ADDRESS BLOCK * EJECT * ************************ * CONDITIONAL ASSEMBLY * ************************ * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 0 * * * THE FOLLOWING CONDITIONS DEFINE WHICH CHANNEL UNITS * FOR TERMINAL DEVICES THAT ARE USED IN THE SYSTEM. * 0 MEANS CHANNEL UNIT IS NOT USED. * 1 MEANS CHANNEL UNIT IS USED. * X:A EQU 0 LT EQU 01 CHLT * X:B EQU 0 RT EQU 01 CHRT * X:C EQU 0 SL EQU 00 SALCUZ * X:D EQU 0 AS EQU 00 ASCU4Z * X:E EQU 0 FT EQU 00 FT80 * X:F EQU 0 PL EQU 00 PLC - LOCAL * EJECT * X:G EQU 0 PR EQU 00 PLC - REMOTE * X:H EQU 0 VU EQU 00 VIDEO * * * ECHO FUNCTION IS INCLUDED IF CECHO=1 * X:I EQU 1 CECHO EQU 01 * * * CONDITIONAL ASSEMBLY PARAMETER FOR ONLY SUM-CONNECTION * NTONSU = 0 MEANS ONLY SUM-CONNECTION * S1 EQU SL+AS U =1 S2 EQU S1+FT U =1 S3 EQU S2+PL U =1 S4 EQU S3+PR U =1 S5 EQU S4+VU U =1 * NTONSU EQU S5 U =1 * EJECT * ************* * CONSTANTS * ************* * * DWT STATUS FLAGS (DWTST) * DWFBSY EQU /8000 DEVICE BUSY DWFECH EQU /2000 ECHO MODE DWFINP EQU /0020 INPUT REQUESTED * * * MISCELLANEOUS * NOTOPR EQU /0001 RETURN CODE "NOT OPERABLE" CONFER EQU /0001 RETURN CODE "CONFIGURATION ERROR" REQERR EQU /8000 RETURN CODE "REQUEST ERROR" MASKCT EQU /0F MASK FOR CONNECTION TYPE (DWTCHP) * EJECT * ************** * DATA AREAS * ************** * IFF NTONSU=0 U =1 * * DISPATCH TABLES * * CHARACTER INPUT INPTAB EQU * IFT LT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT LT=1 DATA LTCHRI XIF IFF NTONSU=0 U =1 * IFT RT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT RT=1 DATA RTCHRI XIF IFF NTONSU=0 U =1 * IFT SL=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT SL=1 DATA SLCHRI XIF IFF NTONSU=0 U =1 * IFT AS=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT AS=1 DATA ASCHRI XIF IFF NTONSU=0 U =1 * IFT FT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT FT=1 DATA FTCHRI XIF IFF NTONSU=0 U =1 * IFT PL=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT PL=1 DATA PLCHRI XIF IFF NTONSU=0 U =1 * IFT PR=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT PR=1 DATA PRCHRI XIF IFF NTONSU=0 U =1 * IFT VU=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT VU=1 DATA VUCHRI XIF IFF NTONSU=0 U =1 DTABLN EQU *-INPTAB * * * START OF BLOCK STBTAB EQU * IFT LT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT LT=1 DATA LTSTBL XIF IFF NTONSU=0 U =1 * IFT RT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT RT=1 DATA RTSTBL XIF IFF NTONSU=0 U =1 * IFT SL=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT SL=1 DATA SLSTBL XIF IFF NTONSU=0 U =1 * IFT AS=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT AS=1 DATA ASSTBL XIF IFF NTONSU=0 U =1 * IFT FT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT FT=1 DATA FTSTBL XIF IFF NTONSU=0 U =1 * IFT PL=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT PL=1 DATA PLSTBL XIF IFF NTONSU=0 U =1 * IFT PR=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT PR=1 DATA PRSTBL XIF IFF NTONSU=0 U =1 * IFT VU=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT VU=1 DATA VUSTBL XIF IFF NTONSU=0 U =1 * * * CHARACTER OUTPUT OUPTAB EQU * IFT LT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT LT=1 DATA LTCHRO XIF IFF NTONSU=0 U =1 * IFT RT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT RT=1 DATA RTCHRO XIF IFF NTONSU=0 U =1 * IFT SL=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT SL=1 DATA SLCHRO XIF IFF NTONSU=0 U =1 * IFT AS=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT AS=1 DATA ASCHRO XIF IFF NTONSU=0 U =1 * IFT FT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT FT=1 DATA FTCHRO XIF IFF NTONSU=0 U =1 * IFT PL=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT PL=1 DATA PLCHRO XIF IFF NTONSU=0 U =1 * IFT PR=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT PR=1 DATA PRCHRO XIF IFF NTONSU=0 U =1 * IFT VU=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT VU=1 DATA VUCHRO XIF IFF NTONSU=0 U =1 * * * END OF BLOCK ENBTAB EQU * IFT LT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT LT=1 DATA LTENBL XIF IFF NTONSU=0 U =1 * IFT RT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT RT=1 DATA RTENBL XIF IFF NTONSU=0 U =1 * IFT SL=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT SL=1 DATA SLENBL XIF IFF NTONSU=0 U =1 * IFT AS=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT AS=1 DATA ASENBL XIF IFF NTONSU=0 U =1 * IFT FT=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT FT=1 DATA FTENBL XIF IFF NTONSU=0 U =1 * IFT PL=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT PL=1 DATA PLENBL XIF IFF NTONSU=0 U =1 * IFT PR=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT PR=1 DATA PRENBL XIF IFF NTONSU=0 U =1 * IFT VU=0 DATA NDRETE XIF IFF NTONSU=0 U =1 IFT VU=1 DATA VUENBL XIF IFF NTONSU=0 U =1 * * * END OF REQUEST ENRTAB EQU * IFT LT=0 DATA TDISP XIF IFF NTONSU=0 U =1 IFT LT=1 DATA LTDISP XIF IFF NTONSU=0 U =1 * IFT RT=0 DATA TDISP XIF IFF NTONSU=0 U =1 IFT RT=1 DATA RTDISP XIF IFF NTONSU=0 U =1 * IFT SL=0 DATA TDISP XIF IFF NTONSU=0 U =1 IFT SL=1 DATA SLDISP XIF IFF NTONSU=0 U =1 * IFT AS=0 DATA TDISP XIF IFF NTONSU=0 U =1 IFT AS=1 DATA ASDISP XIF IFF NTONSU=0 U =1 * IFT FT=0 DATA TDISP XIF IFF NTONSU=0 U =1 IFT FT=1 DATA FTDISP XIF IFF NTONSU=0 U =1 * IFT PL=0 DATA TDISP XIF IFF NTONSU=0 U =1 IFT PL=1 DATA PLDISP XIF IFF NTONSU=0 U =1 * IFT PR=0 DATA TDISP XIF IFF NTONSU=0 U =1 IFT PR=1 DATA PRDISP XIF IFF NTONSU=0 U =1 * IFT VU=0 DATA TDISP XIF IFF NTONSU=0 U =1 IFT VU=1 DATA VUDISP XIF * EJECT * * INTERRUPT TABLES * IFT LT=0 U =2 * DUMMY ENTRIES CHLT INTLT1 EQU * U =2 INTLT2 EQU * U =2 INTLT3 EQU * U =2 INTLT4 EQU * U =2 XIF U =2 * IFT LT=1 U =2 * CHLT INTLT1 DATA 0 U =2 INTLT2 DATA 0 U =2 INTLT3 DATA 0 U =2 INTLT4 DATA 0 U =2 XIF U =2 * IFT RT=0 U =2 * DUMMY ENTRIES CHRT INTRT1 EQU * U =2 INTRT2 EQU * U =2 INTRT3 EQU * U =2 INTRT4 EQU * U =2 XIF U =2 * IFT RT=1 U =2 * CHRT INTRT1 DATA 0 U =2 INTRT2 DATA 0 U =2 INTRT3 DATA 0 U =2 INTRT4 DATA 0 U =2 XIF U =2 * IFT SL=0 U =2 * DUMMY ENTRIES SALCUZ INTSL1 EQU * INTSL2 EQU * U =2 INTSL3 EQU * U =2 INTSL4 EQU * U =2 INTSL5 EQU * U =2 INTSL6 EQU * U =2 INTSL7 EQU * U =2 INTSL8 EQU * U =2 XIF U =2 * IFT SL=1 U =2 * SALCUZ INTSL1 DATA 0 U =2 INTSL2 DATA 0 U =2 INTSL3 DATA 0 U =2 INTSL4 DATA 0 U =2 INTSL5 DATA 0 U =2 INTSL6 DATA 0 U =2 INTSL7 DATA 0 U =2 INTSL8 DATA 0 U =2 XIF U =2 * IFT AS=0 U =2 * DUMMY ENTRIES ASCU4Z INTAS1 EQU * U =2 INTAS2 EQU * U =2 INTAS3 EQU * U =2 INTAS4 EQU * U =2 INTAS5 EQU * U =2 INTAS6 EQU * U =2 INTAS7 EQU * U =2 INTAS8 EQU * U =2 XIF U =2 * IFT AS=1 U =2 * ASCU4Z INTAS1 DATA 0 U =2 INTAS2 DATA 0 U =2 INTAS3 DATA 0 U =2 INTAS4 DATA 0 U =2 INTAS5 DATA 0 U =2 INTAS6 DATA 0 U =2 INTAS7 DATA 0 U =2 INTAS8 DATA 0 U =2 XIF U =2 * IFT PL=0 U =2 * DUMMY ENTRIES PLC - LOCAL INTPL1 EQU * U =2 INTPL2 EQU * U =2 INTPL3 EQU * U =2 INTPL4 EQU * U =2 XIF U =2 * IFT PL=1 U =2 * PLC - LOCAL INTPL1 DATA 0 U =2 INTPL2 DATA 0 U =2 INTPL3 DATA 0 U =2 INTPL4 DATA 0 U =2 XIF U =2 * IFT PR=0 U =2 * DUMMY ENTRIES PLC - REMOTE INTPR1 EQU * U =2 INTPR2 EQU * U =2 INTPR3 EQU * U =2 INTPR4 EQU * U =2 XIF U =2 * IFT PR=1 U =2 * PLC - REMOTE INTPR1 DATA 0 U =2 INTPR2 DATA 0 U =2 INTPR3 DATA 0 U =2 INTPR4 DATA 0 U =2 XIF U =2 * IFT VU=0 U =2 * DUMMY ENTRIES VIDEO INTVU1 EQU * U =2 INTVU2 EQU * U =2 INTVU3 EQU * U =2 INTVU4 EQU * U =2 INTVU5 EQU * U =2 INTVU6 EQU * U =2 INTVU7 EQU * U =2 INTVU8 EQU * U =2 XIF U =2 * IFT VU=1 U =2 * VIDEO INTVU1 DATA 0 U =2 INTVU2 DATA 0 U =2 INTVU3 DATA 0 U =2 INTVU4 DATA 0 U =2 INTVU5 DATA 0 U =2 INTVU6 DATA 0 U =2 INTVU7 DATA 0 U =2 INTVU8 DATA 0 U =2 XIF U =2 * EJECT * ************************** * DEVICE DRIVER ROUTINES * ************************** * * THIS SECTION CONTAINS SUBROUTINES CALLED FROM THE TERMINAL * DEVICE DRIVERS. THE ROUTINE CAN EITHER PERFORM THE REQUESTED * ACTION ITSELF, OR SWITCH CONTROL TO THE LINE DRIVER TO WHICH * THE DEVICE IS CONNECTED. WHEN THE LINE DRIVER HAS PERFORMED * THE REQUESTED ACTIONS, IT WILL RETURN TO THE DEVICE DRIVER, * EITHER DIRECTLY OR THROUGH THE TERMINAL NETWORK DISTRIBUTOR * DRIVER. * THE SECTION ALSO CONTAINS AN EXIT ROUTINE FOR THE TERMINAL * DEVICE DRIVERS. IT WILL OF COURSE NOT RETURN TO THE DEVICE * DRIVER. * * * ROUTINES IN ORDER OF APPEARANCE IN CODE: * * NAME FUNCTION * * INPUT FETCH ONE CHARACTER FROM INPUT DEVICE * STABLK DEFINE START OF OUTPUT BLOCK * OUTPUT SEND ONE CHARACTER TO OUTPUT DEVICE * ENDBLK DEFINE END OF OUTPUT BLOCK * ECHO SWITCH CONTROL AT CHARACTER ECHO * ECHRTN RETURN FROM ECHO OUTPUT * GETCHR GET CHARACTER FROM ECB BUFFER * ABORT SET INPUT NO LONGER REQUESTED * LDISP DISPATCH AT I/O REQUEST COMPLETED * EJECT * ************************************************************ * * ROUTINE NAME: * INPUT * * FUNCTION: * THIS ROUTINE HANDLES INPUT OF ONE CHARACTER * FROM A DEVICE TO A TERMINAL DEVICE DRIVER. * * CALL: * CF A5,INPUT * * INPUT: * A5 = LOCAL STACK POINTER * A6 = DWT ADDRESS * * OUTPUT: * A1 = BITS 0-14 NOT SIGNIFICANT * BIT 15 1 IF MORE CHARACTERS * A2 = BITS 0-7 ZERO * BITS 8-15 CHARACTER * ************************************************************ * INPUT EQU * IFF NTONSU=0 U =1 LC A1,DWTCHP,A6 CHANNEL PARAMETER ANK A1,MASKCT CLEAN CONNECTION TYPE SLA A1,1 MAKE INDEX CWK A1,DTABLN INSIDE LIMIT? ABI(L) INPTAB,A1 YES, ACTIVATE LINE DRIVER RF NDRETE NO, ERROR XIF U =1 IFT NTONSU=0 U =1 ABL LTCHRI ACTIVATE SUM-DRIVER =1 XIF U =1 * EJECT * ************************************************************ * * ROUTINE NAME: * STABLK * * FUNCTION: * THIS ROUTINE IS CALLED FROM THE TERMINAL DEVICE * DRIVERS TO DEFINE START OF AN OUTPUT BLOCK. * THE ACTIONS TAKEN AT START OF BLOCK VARIES FOR * DIFFERENT LINE DRIVERS. * * CALL: * CF A5,STABLK * * INPUT: * A2 = MAXIMAL NR OF CHARACTERS IN BLOCK * A5 = LOCAL STACK POINTER * A6 = DWT ADDRESS * * OUTPUT: * A1 = RETURN CODE * 0 IF OK * NOT 0 IF ERROR * A2 = DEVICE STATUS (IF RELEVANT, IE A1=0) * CR = CONTENTS OF A1 * ************************************************************ * STABLK EQU * LC A1,DWTCHP,A6 CHANNEL PARAMETER IFF NTONSU=0 U =1 ANK A1,MASKCT CLEAN CONNECTION TYPE SLA A1,1 MAKE INDEX CWK A1,DTABLN INSIDE LIMIT? ABI(L) STBTAB,A1 YES, ACTIVATE LINE DRIVER RF NDRETE NO, ERROR XIF U =1 IFT NTONSU=0 U =1 ANK A1,1 LOCAL OR REMOTE ? =1 ABL(Z) LTSTBL LOCAL =1 ABL RTSTBL REMOTE =1 XIF U =1 EJECT * ************************************************************ * * ROUTINE NAME: * OUTPUT * * FUNCTION: * THIS ROUTINE HANDLES OUTPUT OF ONE CHARACTER * FROM A TERMINAL DEVICE DRIVER TO A DEVICE. * * CALL: * CF A5,OUTPUT * * INPUT: * A2 = BITS 0-7 IRRELEVANT * BITS 8-15 CHARACTER * A5 = LOCAL STACK POINTER * A6 = DWT ADDRESS * * OUTPUT: * A1 = RETURN CODE * 0 IF OK * NOT 0 IF ERROR * A2 = DEVICE STATUS (IF RELEVANT, IE A1=0) * CR = CONTENTS OF A1 * ************************************************************ * OUTPUT EQU * IFF NTONSU=0 U =1 LC A1,DWTCHP,A6 CHANNEL PARAMETER ANK A1,MASKCT CLEAN CONNECTION TYPE SLA A1,1 MAKE INDEX CWK A1,DTABLN INSIDE LIMIT? ABI(L) OUPTAB,A1 YES, ACTIVATE LINE DRIVER RF NDRETE NO, ERROR XIF U =1 IFT NTONSU=0 U =1 ABL LTCHRO ACTIVATE SUM-DRIVER =1 XIF U =1 * EJECT * ************************************************************ * * ROUTINE NAME: * ENDBLK * * FUNCTION: * THIS ROUTINE IS CALLED FROM THE TERMINAL DEVICE * DRIVERS TO DEFINE END OF AN OUTPUT BLOCK. * THE ACTIONS TAKEN AT END OF BLOCK VARIES FOR * DIFFERENT LINE DRIVERS. * * CALL: * CF A5,ENDBLK * * INPUT: * A5 = LOCAL STACK POINTER * A6 = DWT ADDRESS * * OUTPUT: * A1 = RETURN CODE * 0 IF OK * NOT 0 IF ERROR * A2 = DEVICE STATUS (IF RELEVANT, IE A1=0) * CR = CONTENTS OF A1 * ************************************************************ * ENDBLK EQU * LC A1,DWTCHP,A6 CHANNEL PARAMETER IFF NTONSU=0 U =1 ANK A1,MASKCT CLEAN CONNECTION TYPE SLA A1,1 MAKE INDEX CWK A1,DTABLN INSIDE LIMIT? ABI(L) ENBTAB,A1 YES, ACTIVATE LINE DRIVER RF NDRETE NO, ERROR XIF U =1 IFT NTONSU=0 U =1 ANK A1,1 LOCAL OR REMOTE ? =1 ABL(Z) LTENBL LOCAL =1 ABL RTENBL REMOTE =1 XIF U =1 * EJECT * ************************************************************ * * ROUTINE NAME: * ECHO * * FUNCTION: * SUBROUTINE TO ECHO CHARACTER CONTAINING TWO PARTS, * ONE GENERAL AND ONE DEVICE-DEPENDENT * PART ONE: FIND DWT-ADDRESS OF ECHO-DEVICE, * LOAD STACKBASE AND FIND ADDRESS * TO DEVICE-DEPENDENT ECHO-ROUTINE * PART TWO: ECHO ONE OR MORE CHARACTERS * CORRESPONDING TO ONE CHARACTER * TO BE STORED IN INPUT ECB-BUFFER * PART ONE FOLLOWS AND PART TWO CAN BE FOUND * IN THE DRIVER MODULE CORRESPONDING TO ECHO * OUTPUT DEVICE * * ECHO IS USED WHEN A CHARACTER SHOULD BE ECHOED * ECHEND IS USED AT END OF INPUT REQUEST * THE ECHO-ROUTINE SHOULD BE TERMINATED WITH A * JUMP TO 'ECHRTN'. * * CALL: * CF A5,ECHO * CF A5,ECHEND * * INPUT: * A1 = BITS 0-14 NOT SIGNIFICANT * BIT 15 1 IF MORE CHARACTERS * A2 = BITS 0-7 NOT SIGNIFICANT * BITS 8-17 CHARACTER (IF ECHO) * A5 = LOCAL STACK POINTER * A6 = DWT ADDRESS * EJECT * * OUTPUT: * AT ENTRY TO ECHO OUTPUT ROUTINE: * A1 = BITS 0-14 NOT SIGNIFICANT * BIT 15 1 IF MORE CHARACTERS * A2 = BITS 0-7 ZERO (IF ECHO) * BITS 8-15 CHARACTER (IF ECHO) * A5 = LOCAL STACK POINTER * A6 = ADDRESS OF OUTPUT DEVICE DWT * A7 = BIT 0 0 IF ECHO, 1 IF ECHEND * BITS 1-15 NOT SIGNIFICANT * AT SUBROUTINE RETURN: * A1 = CHANGED * A2 = CHANGED * CR = CHANGED * ************************************************************ * ECHEND EQU * * IFT CECHO=1 CF A15,NDSAV8 SAVE A3-A5, A7-A8 IN DWT LDKL A7,/8000 INDICATE END OF ECHO RF ECHO10 * EJECT * XIF * ECHO EQU * IFT CECHO=1 CF A15,NDSAV8 SAVE A3-A5, A7-A8 IN DWT LDK A7,0 INDICATE NOT END OF ECHO * * ECHO10 EQU * LD A3,DWTST,A6 STATUS ANKL A3,DWFECH ECHO REQUESTED? RF(Z) NDREP NO, RETURN * LDR A4,A6 SAVE DWT-ADDRESS OF INPUT DEVICE LD A6,DWTECH,A6 DWT-ADDRESS OF OUTPUT DEVICE ST A4,DWTWAT,A6 SAVE DWT-ADDRESS OF INPUT DEVICE LDKL A5,DWTSB2 ADR A5,A6 STACKBASE-ADDRESS IN A5 ANK A2,/FF CLEAN CHARACTER LD A3,DWTADR,A6 ADDRESS TO ADDRESS-BLOCK ABI ECHADR,A3 GO TO ECHO-ROUTINE DEVICE-DEPENDENT XIF * EJECT * ************************************************************ * * ROUTINE NAME: * ECHRTN * * FUNCTION: * THIS ROUTINE IS USED WHEN OUTPUT DEVICE ECHO ROUTINE * IS READY WITH ECHOING ACTIONS, AND WANTS TO LEAVE * CONTROL BACK TO INPUT DEVICE DRIVER. * * CALL: * ABL ECHRTN * * INPUT: * A6 = DWT ADDRESS OF OUTPUT DEVICE * * OUTPUT: * AT ENTRY TO INPUT DRIVER: * SEE ECHO ROUTINE * ************************************************************ * ECHRTN EQU * IFT CECHO=1 LD A6,DWTWAT,A6 DWT-ADDRESS OF INPUT DEVICE RF NDREP RELOAD A3-A5, A7-A8 AND RETURN XIF * EJECT * ************************************************************ * * ROUTINE NAME: * GETCHR * * FUNCTION: * THIS ROUTINE WILL FETCH ONE CHARACTER FROM THE * ECB BUFFER AND INCREMENT THE BUFFER INDEX. * IF NO CHARACTER IS LEFT, INDEX IS STORED IN * ECB REQUESTED LENGTH. * * CALL: * CF A15,GETCHR * * INPUT: * A3 = BUFFER INDEX * A8 = ECB ADDRESS * * OUTPUT: * A1 = >0 IF CHARACTER LEFT * =<0 IF NO CHARACTER LEFT * A2 = BITS 0-7 ZERO (IF A1>0) * BITS 8-15 CHARACTER (IF A1>0) * A3 = UPDATED BYTE INDEX (IF A1>0) * CR = CHANGED * INTERR. ENABLED * ************************************************************ * GETCHR EQU * LD A1,ECBRL,A8 REQUESTED LENGTH SUR A1,A3 RF(NP) GCH010 LAST CHARACTER REACHED * EJECT * LD A2,ECBBA,A8 GET BUFFER ADDRESS ADR A2,A3 LCR A2,A2 CHAR. TO A2 ANK A2,/FF ADK A3,1 INCREMENT BUFFER INDEX RF GCH020 * * GCH010 EQU * ST A3,ECBEL,A8 STORE EFFECTIVE LENGTH GCH020 EQU * ADKL A15,2 RETURN AND ENABLE ENB LDR* P,A15 * EJECT * ************************************************************ * * ROUTINE NAME: * ABORT * * FUNCTION: * THIS ROUTINE RESETS THE INPUT REQUESTED FLAG IN DWT. * IT IS USED AT ABORT REQUESTS, WHEN A REQUESTED INPUT * IS NO LONGER WANTED. * * CALL: * CF A15,ABORT * * INPUT: * A6 = DWT ADDRESS * * OUTPUT: * A1 = CHANGED * CR = CHANGED * ************************************************************ * ABORT EQU * LDKL A1,/FFFF-DWFINP MASK FOR INPUT REQUESTED ANS A1,DWTST,A6 RESET FLAG IFT CPU852=1 RF RTNP15 RETURN XIF IFF CPU852=1 RTN A15 XIF * EJECT * ************************************************************ * * ROUTINE NAME: * LDISP * * FUNCTION: * THIS ROUTINE PERFORMS DISPATCHING FOR THE TERMINAL * DEVICE DRIVERS. IT ALSO PROVIDES QUICK EXITS FROM * DEVICE DRIVERS THAT INCLUDES TENDIO CALL. * * CALL: * ABL LENDER * ABL LENDIS * ABL LDISP * * INPUT: * A1 = RETURN CODE (IF LENDIS) * A6 = DWT ADDRESS * * OUTPUT: * AT ENTRY TO LINE DRIVER DISPATCH ENTRY: * A6 = DWT ADDRESS * ************************************************************ * LENDER EQU * LDKL A1,REQERR REQUEST ERROR * LENDIS EQU * CF A15,TENDIO END I/O REQUEST * EJECT * LDISP EQU * IFF NTONSU=0 U =1 LC A1,DWTCHP,A6 CHANNEL PARAMETER ANK A1,MASKCT CLEAN CONNECTION TYPE SLA A1,1 MAKE INDEX CWK A1,DTABLN INSIDE LIMIT? ABI(L) ENRTAB,A1 YES, ACTIVATE LINE DRIVER XIF U =1 ABL TDISP NO, ERROR * EJECT * ************************ * LINE DRIVER ROUTINES * ************************ * * THIS SECTION CONTAINS AN EXIT ROUTINE THAT CAN BE USED BY THE * LINE DRIVERS WHEN RETURNING TO THE DEVICE DRIVER. * IT ALSO CONTAINES A NUMBER OF SERVICE SUBROUTINES THAT * CAN BE CALLED BY THE LINE DRIVERS. * * * ROUTINES IN ORDER OF APPEARANCE IN CODE: * * NAME FUNCTION * * NDRET RETURN TO DEVICE DRIVER * NDSAV8 SAVE A3-A5, A7-A8 IN DWT * NDGET8 GET A3-A5, A7-A8 FROM DWT * NDREWS CALL RECOVERY FOR ALL DWT:S ON WORK STATION * NDREDW CALL RECOVERY ROUTINE FOR DWT * NDGEDN GET HIGEST DWT NUMBER FOR WORK STATION * NDGEDW GET DWT ADDRESS * EJECT * ************************************************************ * * ROUTINE NAME: * NDRET * * FUNCTION: * THIS ROUTINE CONTAINS A NUMBER OF ENTRIES FOR * RETURNING TO THE TERMINAL DEVICE DRIVERS. * THEY CAN BE CALLED EITHER FROM OTHER ROUTINES * IN THE NETWORK DISTRIBUTOR, OR FROM THE LINE * DRIVERS. * FOR CPU 852 IT ALSO CONTAINS A "RTN A15" * SIMULATION THAT DOESN'T PERFORM ENABLE. * * CALL: * RF "NAME" * RB "NAME" * ABL "NAME" * * INPUT: * A5 = LOCAL STACK POINTER (IF NDRETX) * A6 = DWT ADDRESS (IF NDREPX) * * OUTPUT: * AT RETURN TO TERMINAL DEVICE DRIVER: * SEE HEADING OF CALLED REQUEST HANDLING ROUTINE * ************************************************************ * NDRETE EQU * LDK A1,CONFER CONFIGURATION ERROR RF NDRET RETURN * EJECT * NDREPO EQU * CF A15,NDGET8 GET A3-A5, A7-A8 FROM DWT NDRETO EQU * LDK A1,0 RETURN CODE OK LDK A2,0 DEVICE STATUS OK RF NDRET RETURN * NDREP EQU * CF A15,NDGET8 GET A3-A5, A7-A8 FROM DWT NDRET EQU * ENB ADK A5,4 ADJUST STACK FOR RETURN LDR A1,A1 SET CR ABR* A5 RETURN TO DEVICE DRIVER * * IFT CPU852=1 RTNP15 EQU * ADKL A15,2 ADJUST STACK LDR* P,A15 RETURN XIF EJECT * ************************************************************ * * ROUTINE NAME: * NDSAV8 * * FUNCTION: * THIS ROUTINE SAVES REGISTERS A3, A4, A5, A7 AND * A8 IN A SAVE AREA IN DWT. * * CALL: * CF A15,NDSAV8 * * INPUT: * A6 = DWT ADDRESS * * OUTPUT: * CR = CHANGED * ************************************************************ * NDSAV8 EQU * * SAVE A3-A5, A7-A8 IN DWT ST A3,DWTA3,A6 ST A4,DWTA4,A6 ST A5,DWTA5,A6 ST A7,DWTA7,A6 ST A8,DWTA8,A6 * IFT CPU852=1 RB RTNP15 RETURN XIF IFF CPU852=1 RTN A15 XIF * EJECT * ************************************************************ * * ROUTINE NAME: * NDGET8 * * FUNCTION: * THIS ROUTINE FETCHES REGISTERS A3, A4, A5, A7 AND * A8 FROM A SAVE AREA IN DWT. * * CALL: * CF A15,NDGET8 * * INPUT: * A6 = DWT ADDRESS * * OUTPUT: * CR = CHANGED * ************************************************************ * NDGET8 EQU * * GET A3-A5, A7-A8 FROM DWT LD A3,DWTA3,A6 LD A4,DWTA4,A6 LD A5,DWTA5,A6 LD A7,DWTA7,A6 LD A8,DWTA8,A6 * IFT CPU852=1 RB RTNP15 RETURN XIF IFF CPU852=1 RTN A15 XIF * EJECT * ************************************************************ * * ROUTINE NAME: * NDREWS * * FUNCTION: * THIS ROUTINE CALLS RECOVERY ROUTINES FOR ALL DWT:S * ON A WORK STATION, EXEPT FOR THOSE OF OUTPUT DEVICES * IN ECHO MODE. * * CALL: * CF A15,NDREWS * * INPUT: * A3 = WORK STATION TABLE ADDRESS * A4 = RECOVERY CAUSE * A6 = WORK STATION NUMBER * * OUTPUT: * AT ENTRY TO RECOVERY ROUTINE: * SEE NDREDW * AT SUBROUTINE RETURN: * CR = CHANGED * INTERR. CHANGED * ************************************************************ * NDREWS EQU * IFF NTONSU=0 U =1 IFT CPU852=1 CF A15,SAVE8 PUSH A1-A8 XIF IFF NTONSU=0 U =1 IFF CPU852=1 MSR 8,A15 PUSH A1-A8 XIF IFF NTONSU=0 U =1 * EJECT * LDR A8,A6 SAVE WS NUMBER LDR A1,A3 WORK STATION TABLE ADDRESS CF A15,NDGEDN GET HIGEST DWT NUMBER ADK A7,1 PREPARE FOR SUK * RW100 EQU * SUK A7,1 NEXT DWT RF(N) RW120 EXIT IF ALL DONE LDR A6,A8 WORK STATION NUMBER LDR A1,A3 WORK STATION TABLE ADDRESS CF A15,NDGEDW A6 := DWT ADDRESS * LDR A6,A6 DWT DEFINED? RB(Z) RW100 NO, TAKE NEXT LDK A1,1 TM A6,A1 DWT WITH >1 DEVICE ADDRESS? RB(NZ) RW100 YES, ONLY ONE CALL / DWT * * CHECK IF OUTPUT ECHO DEVICE LD A1,DWTST,A6 DWT STATUS LDR A2,A1 SAVE ANKL A1,DWFECH ECHO MODE? RF(Z) RW110 NO, CONTINUE ANKL A2,DWFINP INPUT DEVICE? RB(Z) RW100 NO, ECHO OUTPUT. TAKE NEXT * RW110 EQU * CF A15,NDREDW CALL RECOVERY ROUTINE RB RW100 NEXT DWT * * RW120 EQU * * ALL DWT:S HANDLED ABL TDISP RETURN XIF U =1 * EJECT * ************************************************************ * * ROUTINE NAME: * NDREDW * * FUNCTION: * THIS ROUTINE CALLS THE RECOVERY ROUTINE OF A TERMINAL * DEVICE DRIVER, IF THE RECOVERY ENTRY IS DEFINED. * IF NO RECOVERY IS DEFINED, DWT IS BUSY BUT NO REQUEST * IS ON, TENDIO IS CALLED TO ACTIVATE TERMINAL QUEUE. * * CALL: * CF A15,NDREDW * * INPUT: * A4 = RECOVERY CAUSE * A6 = DWT ADDRESS * * OUTPUT: * AT ENTRY TO RECOVERY ROUTINE: * A4 = RECOVERY CAUSE * A5 = DWT STACK BASE * A6 = DWT ADDRESS * A7 = BITS 0-9 ZERO * BITS 10-15 ORDER (IF REQUEST ON) * A8 = ECB ADDRESS IF REQUEST ON, * ELSE ZERO * INTERR. ENABLED * AT SUBROUTINE RETURN: * CR = CHANGED * INTERR. CHANGED * ************************************************************ * EJECT * NDREDW EQU * IFT CPU852=1 CF A15,SAVE8 PUSH A1-A8 XIF IFF CPU852=1 MSR 8,A15 PUSH A1-A8 XIF ENB * LDR A5,A6 DWT ADDRESS ADKL A5,DWTSB2 STACK BASE LC A7,DWTOR+1,A6 ORDER ANK A7,/3F CLEAN LD A8,DWTECB,A6 ECB ADDRESS * LD A1,DWTADR,A6 ADDRESS BLOCK LD A1,RECADR,A1 RECOVERY ENTRY ABR(NZ) A1 CALL RECOVERY IF DEFINED * * * NO RECOVERY. CALL TENDIO IF BUSY BUT NO REQUEST LD A2,DWTST,A6 DWT STATUS ANKL A2,DWFBSY BUSY? RF(NZ) RD100 NO, EXIT LDR A8,A8 REQUEST ON? ABL(Z) DISEND NO, TENDIO & RETURN RD100 EQU * ABL TDISP RETURN * EJECT * ************************************************************ * * ROUTINE NAME: * NDGEDN * * FUNCTION: * THIS ROUTINE CALCULATES THE HIGEST DWT NUMBER * (POSITION NUMBER IN DWT TABLE) FOR A WORK STATION. * * CALL: * CF A15,NDGEDN * * INPUT: * A1 = ADDRESS OF WORK STATION TABLE * A6 = WORK STATION NUMBER * * OUTPUT: * A7 = HIGEST DWT NUMBER (0-7) * -1 IF NO DWT:S FOUND * CR = CHANGED * ************************************************************ * NDGEDN EQU * IFF NTONSU=0 U =1 STR A6,A15 PUSH WS NUMBER LDR A1,A1 WS TABLE DEFINED? RF(Z) GN100 NO, EXIT SLL A6,1 MAKE INDEX CW A6,-2,A1 INDEX TOO HIGH? RF(NL) GN100 YES, EXIT * EJECT * ADR A6,A1 LDR* A6,A6 DWT ADDRESS TABLE RF(Z) GN100 NOT DEFINED, EXIT LD A7,-2,A6 TABLE LENGTH SUK A7,2 OFFSET TO LAST DWT SRA A7,1 NUMBER OF LAST DWT RF GN110 EXIT * GN100 EQU * LDKL A7,-1 NO DWT:S DEFINED GN110 EQU * LDR* A6,A15 POP WS NUMBER IFT CPU852=1 RB RTNP15 RETURN XIF IFF NTONSU=0 U =1 IFF CPU852=1 RTN A15 XIF * EJECT * ************************************************************ * * ROUTINE NAME: * NDGEDW * * FUNCTION: * THIS ROUTINE CALCULATES THE DWT ADDRESS FOR * A DEVICE. * * CALL: * CF A15,NDGEDW * * INPUT: * A1 = ADDRESS OF WORK STATION TABLE (INTXXN) * A6 = WORK STATION NUMBER * A7 = DEVICE ADDRESS * * OUTPUT: * A6 = DWT ADDRESS IF FOUND * ELSE 0 * CR = CHANGED * ************************************************************ * NDGEDW EQU * IFF NTONSU=0 U =1 SLL A7,1 MAKE INDEX OF DEVICE ADDRESS LDR A1,A1 WS TABLE DEFINED? RF(Z) GD100 NO, EXIT SLL A6,1 INDEX IN WORK STATION TABLE CW A6,-2,A1 INSIDE TABLE? RF(NL) GD100 NO, ERROR * EJECT * ADR A6,A1 LDR* A6,A6 DWT ADDRESS TABLE RF(Z) GD100 WS NOT DEFINED, EXIT CW A7,-2,A6 INDEX TOO HIGH? RF(NL) GD100 YES, EXIT ADR A6,A7 LDR* A6,A6 DWT ADDRESS OR 0 RF GD110 EXIT * GD100 EQU * LDK A6,0 DWT NOT FOUND GD110 EQU * SRL A7,1 RESTORE DEVICE ADDRESS IFT CPU852=1 RB RTNP15 RETURN XIF IFF NTONSU=0 U =1 IFF CPU852=1 RTN A15 XIF * * * END