|
|
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: 67410 (0x10752)
Notes: pts_type(SC)
Names: »DRSU01.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/DRSU01.SC«
IDENT DRSU01 REL 11.0 81-05-25 870105041100 =4, LOOPT & POW-ON CORR;NEW COND ASS REL 11.0 81-02-17 =3, HANG UP ON REMOTE RECOVERY REL 11.0 81-02-16 =2, STATUS HANDLING FOR TP CHANGED REL 11.0 81-01-26 =1, REMOTE RECOVERY PROBLEM PRR 11.0 80-12-02 * ************************************************ * * PHILIPS TERMINAL SYSTEM PTS * * DRSU01 = DRIVER CHANNEL UNIT FOR LOCAL * AND REMOTE TERMINALS * CONNECTED TO SUM * * * * ************************************************ * * THIS IS THE DRIVER TO CHANNEL UNITS FOR LOCAL AND REMOTE TERMINALS * CONNECTED TO SELECTOR UNIT (SUM). * * THE DRIVER IS CALLED FROM TERMINAL DEVICE DRIVERS. * * THE DRIVER HAS SEPARATED ENTRIES FOR LOCAL AND FOR * REMOTE TERMINALS. * * AT OUTPUT A WORD WITH DEVICE ADDRESS AND CHARACTER IS * SENT TO CHANNEL UNIT. * * AT INTERRUPT AN INPUT WORD IS READ TO REGISTER A2. * THE WORD IS EXAMINED AND SUITABLE ACTIONS ARE CARRIED OUT. * * CONTROL WORK TABLES FOR THE CHANNELS ARE * INCLUDED IN THE DRIVER. EJECT * * * * NORMAL REGISTER USAGE IN THE DRIVER:- * * A1 = RETURN CODE * A2 = INPUT WORD * A3 = LINE NUMBER * 2 * A4 = DEVICE NUMBER * 2 * A5 = CWT-ADDRESS * A6 = DWT-ADDRESS * A7 = LOCAL/REMOTE INDICATION: * 0 IF LOCAL CONNECTION * ADJUSTED CWT-ADDRESS IF REMOTE CONNECTION * A8 = ECB-ADDRESS * * * EJECT * *************** * ENTRIES * *************** * * ENTRY CHLT1 INTERRUPT FROM FIRST CHANNEL UNIT LOCAL ENTRY CHLT2 INTERRUPT FROM SECOND CHANNEL UNIT LOCAL ENTRY CHLT3 INTERRUPT FROM THIRD CHANNEL LOCAL ENTRY CHLT4 INTERRUPT FROM FOURTH CHANNEL LOCAL ENTRY CHRT1 INTERRUPT FROM FIRST CHANNEL UNIT REMOTE ENTRY CHRT2 INTERRUPT FROM SECOND CHANNEL UNIT REMOTE ENTRY CHRT3 INTERRUPT FROM THIRD CHANNEL REMOTE ENTRY CHRT4 INTERRUPT FROM FOURTH CHANNEL REMOTE ENTRY CHLTON START OF CHLT AND CHRT ENTRY CHTAB CHANNEL TABLE ENTRY DWREMU DWT-DUMMY FOR LOOP-TESTING OF REMOTE CHANNELS ENTRY LOCHAN NUMBER OF LOCAL CHANNEL UNITS ENTRY RECHAN NUMBER OF REMOTE CHANNEL UNITS ENTRY REMFC REMOTE TEST FILE CODE ENTRY SUMLOG LOGG AREA FOR LOCAL AND REMOTE TERM. * ENTRY LTCHRI CHARACTER INPUT (LOCAL) ENTRY LTSTBL START OF OUTPUT BLOCK (LOCAL) ENTRY LTCHRO CHARACTER OUTPUT (LOCAL) ENTRY LTENBL END OF OUTPUT BLOCK (LOCAL) ENTRY LTDISP LOCAL DISPATCHER (LOCAL) * ENTRY RTCHRI CHARACTER INPUT (REMOTE) ENTRY RTSTBL START OF OUTPUT BLOCK (REM0TE) ENTRY RTCHRO CHARACTER OUTPUT (REMOTE) ENTRY RTENBL END OF OUTPUT BLOCK (REMOTE) ENTRY RTDISP LOCAL DISPATCHER (REMOTE) * EJECT * * ************************************** * EXTERNAL TOSS MODULE ENTRIES * ************************************** * * EXTRN SAVE8 SAVE REGISTERS A1-A8 EXTRN TDISP DISPATCHER EXTRN SETIMP SET TIME * EXTRN INTLT1 INTERRUPT TABLE FOR LOCAL CHANNEL 1 EXTRN INTLT2 INTERRUPT TABLE FOR LOCAL CHANNEL 2 EXTRN INTLT3 INTERRUPT TABLE FOR LOCAL CHANNEL 3 EXTRN INTLT4 INTERRUPT TABLE FOR LOCAL CHANNEL 4 EXTRN INTRT1 INTERRUPT TABLE FOR REMOTE CHANNEL 1 EXTRN INTRT2 INTERRUPT TABLE FOR REMOTE CHANNEL 2 EXTRN INTRT3 INTERRUPT TABLE FOR REMOTE CHANNEL 3 EXTRN INTRT4 INTERRUPT TABLE FOR REMOTE CHANNEL 4 * EXTRN LENDER I/O REQUEST ERROR EXTRN LENDIS END I/O AND DISPATCH EXTRN INTSAV SAVE AREA LAST INTERRUPT EXTRN IHRET8 RESTORE A1-A8 WITHOUT ENABLE * EXTRN NDSAV8 SAVE A3-A5, A7-A8 IN DWT EXTRN NDGET8 GET A3-A5, A7-A8 IN DWT EXTRN NDREDW CALL RECOVERY FOR DEVICE EXTRN NDRETO SET OK & RETURN TO DEVICE DRIVER EXTRN NDREP GET REGISTERS & RETURN TO DEV. DRIVER * EJECT * * *********************** * DWT PARAMETERS * *********************** * EXTRN DWTOR ORDER EXTRN DWTOCH LAST OUTPUT CHARACTER EXTRN DWTECB ECB-ADDRESS EXTRN DWTADR ADDRESS TO ADDRESS-BLOCK EXTRN DWTST STATUS EXTRN DWTOTQ OUTPUT QUEUE EXTRN DWTSB2 STACK BASE 2 IN DWT EXTRN DWTLD1 TIMER POINTER EXTRN DWTCP2 CHANNEL PARAMETERS 2 EXTRN DWTDEV TERMINAL DEVICE STATUS EXTRN INTADR INTERRUPT ADDRESS DISPLACEMENT EXTRN RECADR RECOVERY ADDRESS DISPLACEMENT * EJECT * * ******************** * CONSTANTS * ******************** * * NOERR EQU 1 RETURN CODE NOT OPERABLE LRCERR EQU /02 RETURN CODE LRC-ERROR TIMERR EQU /08 RETURN CODE SOFTWARE TIME-OUT OUTERR EQU /10 RETURN CODE OUTPUT ERROR DEVECH EQU /2000 MASK ECHO MODE DEWDRQ EQU /80 MASK DEVICE WITHOUT DATA REQUEST DEVINP EQU /40 MASK INPUT DEVICE INDARQ EQU /20 MASK INPUT DATA REQUESTED RECTRI EQU /10 FLAG RECOVERY TRIAL LRCSEN EQU /08 FLAG LRC-SENDING LMPQUE EQU /04 FLAG LAMP CODE QUEUED KBLAMP EQU /08 MASK KB-LAMPS ON VDU OUTPUT TIME EQU 5 TIME BEFORE TIME-OUT FOR SYNC STX EQU /82 START OF TEXT ETB EQU /97 END OF TRANSMISSION BLOCK ETX EQU /03 END OF TEXT ESCKB EQU /1C ESCAPE CODE DATA TO KB DUMMSP EQU /3 SPECIAL DUMMY TO GET DATA REQUEST FIRST WHEN PRINTERBUFFER IS EMPTY DRQTIM EQU 30 TIME TO NEXT ACK FOR PRINTERS EJECT * *************************************** * CONDITIONAL ASSEMBLY * *************************************** * * * A LOGG FUNCTION OF EVERY INPUT AND OUTPUT CHARACTER * MAY BE INCLUDED TO THE DRIVER BY SETTING X:A=1 * X:A EQU 1 LOGING EQU X:A * * * BY SETTING X:B TO 0,1,2,3 OR 4 THIS DRIVER HANDLES * UP TO FOUR LOCAL CHANNELS. * X:B EQU 1 LOCHAN EQU X:B * * * ACKUMULATORS FOR NAK, RETRANSMISSION FAULT AND * UNDEFINED CONTROL CHARACTERS ARE UPDATED IN * THE DRIVER. THIS FUNCTION CAN BE EXCLUDED FROM * DRIVER BY SETTING X:C = 0. * X:C EQU 1 ACKMUL EQU X:C * * * BY SETTING X:D TO 0,1,2,3 OR 4 THIS DRIVER HANDLES * UP TO FOUR REMOTE CHANNEL CARDS. * X:D EQU 0 RECHAN EQU X:D * * EJECT * * REMFC IS " REMOTE TEST FILE CODE " * STANDARD IS /15 * X:E EQU /15 REMFC EQU X:E * * * BY SETTING X:F = 0 THE SOFTWARE TIME-OUT HANDLING * FOR MISSING DATA REQUESTS FROM PRINTERS CAN BE EXCLUDED. * THE EXCLUSION IS ONLY POSSIBLE IF THE DRIVER IS ADAPTED * FOR ONLY LOCAL TERMINALS (RECHAN=0). * X:F EQU 1 U =4 SOFTIM EQU X:F U =4 * * * IF X:G = 1 THE DRIVER CAN HANDLE OUTPUT TO KEYBOARD LAMPS * WHEN KEYBOARD IS CONNECTED DIRECTLY TO VDU. * X:G EQU 1 U =4 KBDIR EQU X:G U =4 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 1 * * * THIS DRIVER CAN BE ADAPTED TO MEMORY MANAGEMENT UNIT * BY SETTING MMUPAG TO 1. * MMUPAG EQU 0 U =4 * EJECT * *************************** * CWT-DISPLACEMENTS * *************************** * * LOCAL AND REMOTE TERMINALS * * CWTLDW EQU 0 LAST OUTPUT DWT CWTLOW EQU 2 LAST OUTPUT WORD CWTITA EQU 4 ADDRESS TO INTERRUPT TABLE CWTINR EQU 6 INR CWTOTR EQU 8 OTR CWTCIS EQU 10 CIO-START CWTRTC EQU 12 RETRANSMISSION COUNTER CWTEQ EQU 14 QUEUE IFT ACKMUL=1 CWTADD EQU 18 ACKUMULATORS ACKTIM EQU 24 PRINTER TIME-OUT ACKUMULATOR CWTTP EQU 26 TIMER POINTER XIF IFT ACKMUL=0 CWTTP EQU 18 TIMER POINTER XIF * * ONLY REMOTE TERMINALS * * CWSYNC EQU CWTTP+2 SYNC CHARACTER LRCDWT EQU CWTTP+4 DWT-S OF GOING LRC-PROCESSES LRCACK EQU CWTTP+8 LRC-ACKUMULATORS CWTRST EQU CWTTP+12 CHANNEL STATUS WORD (LOOP-TESTS) CWTBLK EQU CWTTP+14 BLOCK SENDING INDICATOR * EJECT ***************************************************** * C W T L T 1 * ***************************************************** * * CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 1 * DWA1 EQU /03 DEVICEADDRESS * CWTLT1 EQU * TABLE ENTRY * IFF LOCHAN=0 * DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTLT1 ADDRESS TO INTERRUPT TABLE INR A2,0,DWA1 INR OTR A2,0,DWA1 OTR CIO A2,1,DWA1 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE DATA 0 QUEUE 2 * IFT ACKMUL=1 * DATA 0 NAK-ACKUMULATOR DATA 0 RETR. FAULT-ACKUMULATOR DATA 0 UNDEFINED-INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR * XIF * EJECT * * ***************************************************** * C W T L T 2 * ***************************************************** * * CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 2 * CWTLT2 EQU * * IFF LOCHAN=0 IFF LOCHAN=1 * * * DWA2 EQU /13 DEVICE ADDRESS * DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTLT2 INTERRUPT TABLE INR A2,0,DWA2 INR OTR A2,0,DWA2 OTR CIO A2,1,DWA2 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE DATA 0 SECOND QUEUE * IFT ACKMUL=1 * DATA 0 NAK-ACKUMULATOR DATA 0 RETR. FAULT-ACKUMULATOR DATA 0 UNDEFINED- INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR * XIF * EJECT * * ***************************************************** * C W T L T 3 * ***************************************************** * * CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 3 * CWTLT3 EQU * * IFF LOCHAN=0 IFF LOCHAN=1 IFF LOCHAN=2 * * * DWA3 EQU /23 DEVICE ADDRESS * DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTLT3 INTERRUPT TABLE INR A2,0,DWA3 INR OTR A2,0,DWA3 OTR CIO A2,1,DWA3 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE DATA 0 SECOND QUEUE * IFT ACKMUL=1 * DATA 0 NAK-ACKUMULATOR DATA 0 RETR. FAULT-ACKUMULATOR DATA 0 UNDEFINED- INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR * XIF * EJECT * * ***************************************************** * C W T L T 4 * ***************************************************** * * CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 4 * CWTLT4 EQU * * IFT LOCHAN=4 * * * DWA4 EQU /33 * DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTLT4 INTERRUPT TABLE INR A2,0,DWA4 INR OTR A2,0,DWA4 OTR CIO A2,1,DWA4 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE DATA 0 SECOND QUEUE * IFT ACKMUL=1 * DATA 0 NAK-ACKUMULATOR DATA 0 RETR. FAULT-ACKUMULATOR DATA 0 UNDEFINED- INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR * XIF * EJECT ******************************* * C W T R T 1 * ******************************* * CONTROL WORK TABLE FOR REMOTE CHANNEL NO. 1 * CONNECTED TO FIRST CHRT * CWTRT1 EQU * * IFF RECHAN=0 * DWA5 EQU /1 DEVICE ADDRESS * DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTRT1 INTERRUPT TABLE INR A2,0,DWA5 INR OTR A2,0,DWA5 OTR CIO A2,1,DWA5 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE TERMINAL 1 DATA 0 QUEUE TERMINAL 2 * IFT ACKMUL=1 * DATA 0 NAK-ACKUMULATOR DATA 0 BLOCK ERROR ACKUMULATOR DATA 0 UNDEFINED-INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR * XIF * IFF RECHAN=0 DATA 0 TIMER POINTER DATA /7055 SYNC CHARACTER DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 1 DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 2 DATA 0 LRC-ACKUMULATOR TERMINAL 1 DATA 0 LRC-ACKUMULATOR TERMINAL 2 DATA 0 CHANNEL STATUS WORD (LOOP-TESTS) DATA 1 BIT 0: BLOCKSENDING RUNNING BIT 15: BLOCKSENDING ALLOWED XIF EJECT ******************************** * C W T R T 2 * ******************************** * CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 2 * CONNECTED TO FIRST CHRT * CWTRT2 EQU * * IFF RECHAN=0 * DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTRT1 INTERRUPT TABLE INR A2,0,DWA5 INR OTR A2,1,DWA5 OTR CIO A2,1,DWA5 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE TERMINAL 1 DATA 0 QUEUE TERMINAL 2 * IFT ACKMUL=1 * DATA 0 NAK-ACKUMULATOR DATA 0 BLOCK ERROR ACKUMULATOR DATA 0 UNDEFINED-INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR * XIF * IFF RECHAN=0 DATA 0 TIMER POINTER DATA /7255 SYNC-CHARACTER DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 1 DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 2 DATA 0 LRC-ACKUMULATOR TERMINAL 1 DATA 0 LRC-ACKUMULATOR TERMINAL 2 DATA 0 CHANNEL STATUS WORD (LOOP-TESTS) DATA 1 BLOCK SENDING INDICATOR XIF EJECT ******************************** * C W T R T 3 * ******************************** * * CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 1 * CONNECTED TO SECOND CHRT * CWTRT3 EQU * * IFF RECHAN=0 IFF RECHAN=1 * DWA6 EQU /11 DEVICE ADDRESS * DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTRT2 INTERRUPT TABLE INR A2,0,DWA6 INR OTR A2,0,DWA6 OTR CIO A2,1,DWA6 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE TERMINAL 1 DATA 0 QUEUE TERMINAL 2 * IFT ACKMUL=1 DATA 0 NAK-ACKUMULATOR DATA 0 BLOCK ERROR ACKUMULATOR DATA 0 UNDEFINED-INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR * XIF IFF RECHAN=0 IFF RECHAN=1 DATA 0 TIMER POINTER DATA /7055 SYNC-CHARACTER DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 1 DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 2 DATA 0 LRC-ACKUMULATOR TERMINAL 1 DATA 0 LRC-ACKUMULATOR TERMINAL 2 DATA 0 CHANNEL STATUS WORD (LOOP-TESTS) DATA 1 BLOCK SENDING INDICATOR XIF EJECT ******************************** * C W T R T 4 * ******************************** * * CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 2 * CONNECTED TO SECOND CHRT * CWTRT4 EQU * * IFF RECHAN=0 IFF RECHAN=1 DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTRT2 INTERRUPT TABLE INR A2,0,DWA6 INR OTR A2,1,DWA6 OTR CIO A2,1,DWA6 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE TERMINAL 1 DATA 0 QUEUE TERMINAL 2 * IFT ACKMUL=1 DATA 0 NAK-ACKUMULATOR DATA 0 BLOCK ERROR ACKUMULATOR DATA 0 UNDEFINED-INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR XIF IFF RECHAN=0 IFF RECHAN=1 DATA 0 TIMER POINTER DATA /7255 SYNC-CHARACTER DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 1 DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 2 DATA 0 LRC-ACKUMULATOR TERMINAL 1 DATA 0 LRC-ACKUMULATOR TERMINAL 2 DATA 0 CHANNEL STATUS WORD (LOOP-TESTS) DATA 1 BLOCK SENDING INDICATOR * XIF EJECT ******************************** * C W T R T 5 * ******************************** * * CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 1 * CONNECTED TO THIRD CHRT * CWTRT5 EQU * * IFF RECHAN=0 IFF RECHAN=1 IFF RECHAN=2 * DWA7 EQU /21 DEVICE ADDRESS * DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTRT3 INTERRUPT TABLE INR A2,0,DWA7 INR OTR A2,0,DWA7 OTR CIO A2,1,DWA7 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE TERMINAL 1 DATA 0 QUEUE TERMINAL 2 * IFT ACKMUL=1 DATA 0 NAK-ACKUMULATOR DATA 0 BLOCK ERROR ACKUMULATOR DATA 0 UNDEFINED-INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR * XIF IFF RECHAN=0 IFF RECHAN=1 IFF RECHAN=2 DATA 0 TIMER POINTER DATA /7055 SYNC-CHARACTER DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 1 DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 2 DATA 0 LRC-ACKUMULATOR TERMINAL 1 DATA 0 LRC-ACKUMULATOR TERMINAL 2 DATA 0 CHANNEL STATUS WORD (LOOP-TESTS) DATA 1 BLOCK SENDING INDICATOR XIF EJECT ******************************** * C W T R T 6 * ******************************** * * CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 2 * CONNECTED TO THIRD CHRT * CWTRT6 EQU * * IFF RECHAN=0 IFF RECHAN=1 IFF RECHAN=2 DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTRT3 INTERRUPT TABLE INR A2,0,DWA7 INR OTR A2,1,DWA7 OTR CIO A2,1,DWA7 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE TERMINAL 1 DATA 0 QUEUE TERMINAL 2 * IFT ACKMUL=1 DATA 0 NAK-ACKUMULATOR DATA 0 BLOCK ERROR ACKUMULATOR DATA 0 UNDEFINED-INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR XIF * IFF RECHAN=0 IFF RECHAN=1 IFF RECHAN=2 DATA 0 TIMER POINTER DATA /7255 SYNC-CHARACTER DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 1 DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 2 DATA 0 LRC-ACKUMULATOR TERMINAL 1 DATA 0 LRC-ACKUMULATOR TERMINAL 2 DATA 0 CHANNEL STATUS WORD (LOOP-TESTS) DATA 1 BLOCK SENDING INDICATOR XIF EJECT ******************************** * C W T R T 7 * ******************************** * CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 1 * CONNECTED TO FOURTH CHRT * CWTRT7 EQU * * IFT RECHAN=4 * DWA8 EQU /31 DEVICE ADDRESS * DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTRT4 INTERRUPT TABLE INR A2,0,DWA8 INR OTR A2,0,DWA8 OTR CIO A2,1,DWA8 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE TERMINAL 1 DATA 0 QUEUE TERMINAL 2 * IFT ACKMUL=1 DATA 0 NAK-ACKUMULATOR DATA 0 BLOCK ERROR ACKUMULATOR DATA 0 UNDEFINED-INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR XIF * IFT RECHAN=4 DATA 0 TIMER POINTER DATA /7055 SYNC-CHARACTER DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 1 DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 2 DATA 0 LRC-ACKUMULATOR TERMINAL 1 DATA 0 LRC-ACKUMULATOR TERMINAL 2 DATA 0 CHANNEL STATUS WORD (LOOP-TESTS) DATA 1 BLOCK SENDING INDICATOR XIF EJECT ******************************** * C W T R T 8 * ******************************** * * CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 2 * CONNECTED TO FOURTH CHRT * CWTRT8 EQU * * IFT RECHAN=4 DATA 0 LAST OUTPUT DWT DATA 0 LAST OUTPUT WORD DATA INTRT4 INTERRUPT TABLE INR A2,0,DWA8 INR OTR A2,1,DWA8 OTR CIO A2,1,DWA8 CIO-START DATA 0 RETRANSMISSION COUNTER DATA 0 QUEUE TERMINAL 1 DATA 0 QUEUE TERMINAL 2 * IFT ACKMUL=1 DATA 0 NAK-ACKUMULATOR DATA 0 BLOCK ERROR ACKUMULATOR DATA 0 UNDEFINED-INTERRUPT-ACKUMULATOR DATA 0 PRINTER TIMEOUT ACKUMULATOR XIF * IFT RECHAN=4 DATA 0 TIMER POINTER DATA /7255 SYNC-CHARACTER DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 1 DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 2 DATA 0 LRC-ACKUMULATOR TERMINAL 1 DATA 0 LRC-ACKUMULATOR TERMINAL 2 DATA 0 CHANNEL STATUS WORD (LOOP-TESTS) DATA 1 BLOCK SENDING INDICATOR * XIF * EJECT ************************************************* * C H T A B * ************************************************* * * THIS TABLE HOLDS ADDRESSES OF CONTROLLER WORK * TABLES CWT TO CHANNEL UNITS FOR LOCAL OR REMOTE * TERMINALS. * * * CHTAB EQU * DATA CHTABE-* TABLE LENGTH * IFT LOCHAN=0 DATA 0 DATA 0 DATA 0 DATA 0 XIF * IFT LOCHAN=1 DATA CWTLT1 DATA 0 DATA 0 DATA 0 XIF * IFT LOCHAN=2 DATA CWTLT1 DATA CWTLT2 DATA 0 DATA 0 XIF * IFT LOCHAN=3 DATA CWTLT1 DATA CWTLT2 DATA CWTLT3 DATA 0 XIF IFT LOCHAN=4 DATA CWTLT1 DATA CWTLT2 DATA CWTLT3 DATA CWTLT4 XIF * IFT RECHAN=1 DATA CWTRT1 DATA CWTRT2 XIF * IFT RECHAN=2 DATA CWTRT1 DATA CWTRT2 DATA CWTRT3 DATA CWTRT4 XIF * IFT RECHAN=3 DATA CWTRT1 DATA CWTRT2 DATA CWTRT3 DATA CWTRT4 DATA CWTRT5 DATA CWTRT6 XIF * IFT RECHAN=4 DATA CWTRT1 DATA CWTRT2 DATA CWTRT3 DATA CWTRT4 DATA CWTRT5 DATA CWTRT6 DATA CWTRT7 DATA CWTRT8 XIF CHTABE EQU * END OF TABLE * EJECT * * ************************************ * D W R E M U * ************************************ * * DUMMY TABLE USED WHEN LOOP-TESTING OF * REMOTE CHANNELS ARE NEEDED. * DWREMU EQU * IFF RECHAN=0 DATA 0 DATA /8000 STATUS DATA 0,0 DATA AREM POINTER TO ADDRESS-BLOCK DATA 0,0,0 IFT MMUPAG=1 U =4 DATA 0 SAVE AREA USER ECB ADDRESS =4 DATA DEVECB MMU ECB ADDRESS =4 DEVECB DATA 0,0,0,0,0,0 MMU ECB =4 XIF U =4 IFF RECHAN=0 U =4 EJECT * * * L O O P - T E S T S E C T I O N * * * ORDER /00: TEST REMOTE CHANNEL CONNECTION * * CHANNEL TO TEST IS GIVEN IN CONTROL WORD OF ECB. * THE REQUEST IS COMPLETED WITH FOLLOWING BITS * IN RETURN CODE OF ECB: * * BIT 9: CHANNEL UNIT NOT IN ACTIVE STATUS * * * BIT 14: ACK NOT RECEIVED AFTER OUTPUT * * BIT 15: SYNC NOT RECEIVED AFTER OUTPUT IFT MMUPAG=1 U =4 DATA -2 DEVICE INDEX =4 XIF U =4 IFF RECHAN=0 U =4 AREM DATA LOPTST DATA 0 ABORT ROUTINE ADDRESS DATA IHLOP INTERRUPT HANDLER LOPTST EQU * LD A2,10,A8 GET CHANNEL NUMBER ANK A2,/FF RF(E) DISIIE CWK A2,RECHAN+RECHAN CHANNEL 1-8 ? RF(G) DISIIE SLL A2,1 LD A2,CHTAB+8,A2 GET CWT-ADDRESS RF(E) DISIIE LDR A7,A7 WRONG ORDER ? RF(E) LOPT10 NO DISIIE ABL LENDER I/O REQUEST ERROR LOPT10 EQU * LD A1,CWTRST,A2 GET CHANNEL LOOP STATUS LDR A5,A2 CWT-ADDRESS ANK A1,/40 RF(NE) IHLP20 CHANNEL UNIT NOT BUSY =4 LDK A5,/E0 INDICATE REQUEST GOING ST A5,CWTRST,A2 INDICATE LOOP-TESTING ABL TDISP * * * END OF LOOP-TEST * IHLOP EQU * LDR A5,A1 GET CWT-ADDRESS LD A1,CWTRST,A5 GET CHANNEL LOOP STATUS ANK A1,3 XRK A1,3 IHLP10 EQU * LDK A2,0 SC A2,CWTRST+1,A5 RESET RIGHT BYTE IN CHANNEL STATUS IHLP20 EQU * U =4 ABL LENDIS XIF EJECT * * * C H L T 1 / C H L T 2 * * C H R T 1 / C H R T 2 * * THIS IS THE INTERRUPT HANDLER FOR CHLT AND CHRT * * WHEN INTERRUPT FROM A CHANNEL UNIT OCCURS * DRIVER FIRST RELATES INTERRUPT TO A CWT. * THEN DRIVER GETS THE INTERRUPT MESSAGE, * LOGGS IT AND DETERMINES INPUT WORD TO GET * DEVICE NUMBER , LINE NUMBER AND TYPE OF * INTERRUPT. * * FOLLOWING TYPES OF INTERRUPT ARE RELEVANT * * D = DEVICE ADDRESS C = CHARACTER * * ACK OUTPUT ACKNOWLEDGED D = 0 C = 7 * NAK OUTPUT ERROR D = 0 C = 5 * OER TIME OUT D = 0 C = 0 * SER POWER ON D = 0 C = 3 * DRI DATA REQUEST IMMEDIATE SIGN BIT SET * ABC+ BLOCK TR. ACKNOWLEDGED D = 0 C = 8 * ABC-L LRC ERROR IN BLOCK D = 0 C = A * ABC-V VRC ERROR IN BLOCK D = 0 C = C * ABC-LV LRC O VRC ERROR IN BLOCK D = 0 C = E * DRD DATA REQUEST DELAYED D # 0 C = 0 * LOCAL CHAR. MAY BE DIFFERENT FROM ZERO * STD STATUS MESSAGE D # 0 C # 0 * DIN DATA INPUT D # 0 EJECT * * C H L T 1 * * INTERRUPT FROM CHLT1 * CHLT1 EQU * IFF LOCHAN=0 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFF LOCHAN=0 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFF LOCHAN=0 LDK A7,2 INDICATE CHLT1 RF CLT010 XIF * * * C H L T 2 * * INTERRUPT FROM CHLT2 * CHLT2 EQU * IFF LOCHAN=0 IFF LOCHAN=1 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFF LOCHAN=0 IFF LOCHAN=1 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFF LOCHAN=0 IFF LOCHAN=1 LDK A7,4 INDICATE CHLT2 RF CLT010 XIF * * * C H L T 3 * * INTERRUPT FROM CHLT3 * CHLT3 EQU * IFF LOCHAN=0 IFF LOCHAN=1 IFF LOCHAN=2 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFF LOCHAN=0 IFF LOCHAN=1 IFF LOCHAN=2 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFF LOCHAN=0 IFF LOCHAN=1 IFF LOCHAN=2 LDK A7,6 INDICATE CHLT3 RF CLT010 XIF * * * C H L T 4 * * INTERRUPT FROM CHLT4 * CHLT4 EQU * IFT LOCHAN=4 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT LOCHAN=4 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT LOCHAN=4 LDK A7,8 INDICATE CHLT4 RF CLT010 * XIF * EJECT * * * C H R T 1 * INTERRUPT FROM CHRT1 * CHRT1 EQU * IFF RECHAN=0 ST P,INTSAV * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFF RECHAN=0 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFF RECHAN=0 LDK A7,10 INDICATE CHRT1 RF CLT010 XIF * * C H R T 2 * * INTERRUPT FROM CHRT2 * CHRT2 EQU * IFF RECHAN=0 IFF RECHAN=1 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFF RECHAN=0 IFF RECHAN=1 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFF RECHAN=0 IFF RECHAN=1 LDK A7,14 INDICATE CHRT2 RF CLT010 XIF * * * C H R T 3 * * INTERRUPT FROM CHRT3 * CHRT3 EQU * IFF RECHAN=0 IFF RECHAN=1 IFF RECHAN=2 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFF RECHAN=0 IFF RECHAN=1 IFF RECHAN=2 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFF RECHAN=0 IFF RECHAN=1 IFF RECHAN=2 LDK A7,18 INDICATE CHRT3 RF CLT010 XIF * * * C H R T 4 * * INTERRUPT FROM CHRT4 * CHRT4 EQU * IFT RECHAN=4 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT RECHAN=4 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT RECHAN=4 LDK A7,22 INDICATE CHRT4 XIF * EJECT * * COMMON PART FOR ALL INTERRUPTS * CLT010 LD A5,CHTAB,A7 GET CWT-ADDRESS * * EX CWTINR,A5 EXECUTE INR-INSTRUCTION IFF RECHAN=0 U =4 ABL(NA) TDISP XIF U =4 * IFT LOGING=1 * CLT012 CF A15,LOGG ** LOGG OF INPUT CHARACTER ** * XIF EJECT * * DETERMINE TYPE OF INTERRUPT. * MOREOVER, IF REMOTE, GET THE RIGHT CHANNEL * OF CHRT AND START OR RESTART SYNC-TIMER. * IFF RECHAN=0 U =4 SUK A7,10 U =4 IFF LOCHAN=0 RF(NN) CLT014 REMOTE INTERRUPT LDK A7,0 INDICATE LOCAL INTERRUPT RF CLT018 CLT014 EQU * XIF IFF RECHAN=0 LDR A3,A2 SLC A3,6 REMOTE FIRST OR SECOND CHANNEL ? RF(NN) CLT015 FIRST LD A5,CHTAB+12,A7 GET CWT-ADDRESS SECOND CHANNEL OF CHRT CLT015 CF A15,RESTSY START OR RESTART SYNC-TIMER ANK A3,/2 FIRST OR SECOND TERMINAL ? LDR A7,A5 ADR A7,A3 LD A3,CWTRST,A5 LOOP TEST MODE ? ABL(N) CLT170 YES XIF CLT018 LDK A1,0 RESET RETURN CODE LDR A3,A2 DATA REQUEST IMMEDIATE ? IFF RECHAN=0 ABL(N) CLT050 XIF ANKL A3,/7000 DEVICE ADDRESS ? ABL(NE) CLT100 YES, DIN, STD OR DRD EJECT * * * DETERMINE TYPE OF CONTROL CHARACTER * LDR A3,A2 ANK A3,/FF DELETE DEVICE AND LINE NUMBER RF(E) CLT030 OER SUK A3,7 RF(E) CLT050 ACK ADK A3,2 ABL(E) CLT080 NAK ADK A3,2 ABL(E) CLT100 POWER ON IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 LOCAL ? RF(NZ) CLT022 NO XIF IFF LOCHAN=0 SUK A3,/18 RETRANSMISSION FAULT ? RF(NE) CLT025 NO, UNDEFINED INTERRUPT * IFT ACKMUL=1 IM CWTADD+2,A5 UPDATE RETRANSM. FAULT ACKUMULATOR XIF IFF LOCHAN=0 RF EXIIT XIF * IFF RECHAN=0 CLT022 EQU * LC A4,LRCACK,A7 LDK A6,/80 ABC-ANSWER ALLOWED ? TM A6,A4 RF(E) EXIIT NO XRK A4,/80 YES, RESET BIT SC A4,LRCACK,A7 AND STORE LD A6,LRCDWT,A7 LRC-DEVICE ? RF(E) EXIIT ANK A4,/7F RF(Z) CLT046 YES CF A15,RESLRC RESET LRC- AND BLOCKSEND. INDICATORS LDR A4,A6 DWT-ADDRESS CF A15,QUESEC CHECK QUEUE SUK A3,5 RF(E) CLT033 ABC+ , GO TO DRIVER IFT ACKMUL=1 * IM CWTADD+2,A5 UPDATE ERROR ACKUMULATOR XIF IFF RECHAN=0 * SUK A3,4 VRC-ERROR ? RF(E) CLT042 YES LDK A1,LRCERR INDICATE LRC-ERROR SUK A3,2 LRC-ERROR IN BLOCK ? RF(E) CLT033 YES ADK A3,4 RF(E) CLT033 LRC- OR VRC-ERROR IN BLOCK XIF CLT025 EQU * IFT ACKMUL=1 IM CWTADD+4,A5 UPDATE UNDEF. INTERRUPT ACKUMULATOR XIF EJECT * * RESOLVE QUEUE AND EXAMINE RECOVERY BIT. * RETURN TO DEVICE DRIVER WITH RETURN CODE : * NOT OPERABLE IF SEVEN NAK OR ECHO OR * OUTPUT ERROR (OER) TWO TIMES * OUTPUT ERROR IF FIRST OER OR UNDEFINED * INTERRUPT * CLT030 EQU * IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 REMOTE ? RF(Z) CLTQUE NO XIF IFF RECHAN=0 LD A6,LRCDWT,A7 CWR* A6,A5 LRC-DEVICE ? =3 RF(NE) CLTQUE CF A15,RESLRC RESET LRC- AND BLOCKSEND. INDICATORS XIF CLTQUE CF A15,QUEUE RESOLVE QUEUE SUK A2,5 SEVEN NAK ? RF(Z) CLT045 YES CLT031 LD A2,DWTST,A6 GET STATUS WORD LDR A3,A2 ANKL A2,DEVECH+RECTRI ECHO AND RECOVERY BIT RF(NE) CLT045 ORK A3,RECTRI INDICATE RECOVERY TRIAL DONE ST A3,DWTST,A6 STORE CLT032 LDK A1,OUTERR INDICATE OUTPUT ERROR CLT033 EQU * ABL CLT107 RETURN TO DEVICE DRIVER IFF RECHAN=0 EJECT * * ABC- VRC-ERROR * * IF BLOCKSENDING SAME PROCEDURE AS FOR THE OTHER * ERRORS OF TYPE ABC-. * IF OUTPUT TO PRINTERS WITH LRC-CONTROL SAME * PROCEDURE AS FOR ABC+. * CLT042 EQU * LD A4,DWTST,A6 STATUS WORD ANK A4,DEWDRQ BLOCK SENDING ? RB(NZ) CLT031 YES CLT043 RB CLT033 RETURN TO DEVICE DRIVER XIF EJECT * * POWER ON * * RECOVERY ROUTINES ARE STARTED FOR EVERY DEVICE * ON ACTUAL LINE EXCEPT THOSE OCCUPYING CHANNEL UNIT * OR THOSE IN ECHO MODE. * CHPOWO EQU * LDR* A2,A5 GET CHANNEL OCCUPYING DEVICE CM CWTRTC,A5 RESET RETRANSMISSION COUNTER IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 REMOTE ? RF(Z) CPO010 NO XIF IFF RECHAN=0 U =1 CM LRCDWT,A7 RESET LRC-DEVICE POINTER =1 LDK A7,1 U =1 ANS A7,CWTBLK,A5 RESET BLOCKSENDING RUN. IND. =1 XIF CPO010 LDR A3,A6 DEVICE COUNTER U =4 LDR A1,A8 SET ADDRESS POINTER CPO020 EQU * LDR* A6,A1 GET DWT-ADDRESS RF(E) CPO030 SRC A6,1 RF(N) CPO030 SLC A6,1 U =4 LDKL A7,/FFFF-RECTRI-LRCSEN ANS A7,DWTST,A6 RESET RECOVERY BIT AND LRC-BIT =1 LD A7,DWTST,A6 STATUS WORD =4 ANK A7,DEVINP INPUT DEVICE ? =4 RF(NE) CPO023 YES =4 LC A7,DWTST,A6 ANK A7,/20 ECHO MODE ? RF(NE) CPO030 YES CPO023 EQU * U =4 CWR A6,A2 DEVICE WAITING FOR CHANNEL ANSWER RF(E) CPO030 YES CPO025 EQU * LDK A4,3 RECOVERY CAUSE: POWER ON CF A15,NDREDW CALL RECOVERY ROUTINE CPO030 EQU * ADK A1,2 SUK A3,2 ALL DEVICES THREATED? RB(NE) CPO020 NO TAKE NEXT EXIIT RF EXIT EJECT * * INDICATE NOT OPERABLE BEFORE GOING TO DRIVER * CLT045 EQU * LDKL A1,/FFFF-RECTRI ANS A1,DWTST,A6 RESET RECOVERY BIT LDK A1,NOERR INDICATE NOT OPERABLE ABL CLT107 RESET TIMER AND FINISH CLT046 EQU * ABL CLT110 EJECT * * A C K , D R I * FIRST RESOLVE QUEUE AND THEN EXAMINE LAST * OUTPUT DWT. IF NOT DEFINED UPDATE ERROR * ACKUMULATOR AND GO TO DISPATCHER. IF SYNC-ACK * DROP IT. * NORMAL ACK OR DRI WILL RESULT IN A RESETTING OF * RECOVERY BIT IN DWT. THEN A SIMULATION OF DATA * REQUEST FOR DEVICES WITHOUT DATA REQUEST IS CARRIED * OUT. FOR DEVICES WITH DATA REQUEST FUNCTION A TIMER * HANDLING ANSWERS FROM DEVICE IS AFFECTED AND THEN * IF DRI A BRANCH IS MADE TO THE DATA REQUEST SECTION. * IF ACK WE HAVE TO WAIT FOR A DRD. CLT050 EQU * IFF RECHAN=0 LC A3,CWTLOW,A5 LAST OUTPUT WORD ANK A3,/F0 KEEP DEVICE NUMBER XIF CF A15,QUEUE RESOLVE QUEUE LDKL A4,/FFFF-RECTRI ANS A4,DWTST,A6 RESET RECOVERY BIT IN STATUS WORD IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 REMOTE ? RF(Z) CLT052 NO XIF IFF RECHAN=0 LDK A4,2 ORS A4,CWTRST,A5 INDICATE ACK IN CHANNEL STATUS LDR A8,A3 OBC-ACK ? RF(NE) CLT052 NO LDKL A3,/8000 ORS A3,LRCACK,A7 INDICATE ABC ALLOWED RF CLT055 XIF CLT052 EQU * LD A3,DWTST,A6 DEVICE STATUS ANK A3,DEWDRQ DEVICE WITHOUT DATA REQUEST ? RF(Z) CLT055 NO IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 REMOTE ? RB(Z) CLT046 NO, RETURN TO DEV. DRIVER XIF IFF RECHAN=0 CW A6,LRCDWT,A7 ABL(NE) CLT110 XIF IFT RECHAN=0 RB CLT046 RETURN TO DEVICE DRIVER XIF EJECT * * * PRINTER TIMING AND TIMING FOR MISSING BLOCK CONTROL CHARACTERS * CLT055 EQU * IFF SOFTIM+RECHAN=0 U =4 INH LD A3,DWTLD1,A6 ADDRESS TO TIMER BLOCK RF(E) CLT060 * * RESTART TIMER * LDKL A3,-DRQTIM RESTART TIMER ST* A3,DWTLD1,A6 RF CLT068 * * START TIMER * CLT060 EQU * LDR A1,A6 PARAMETER LDKL A4,DWTLD1 TIMER POINTER ADR A4,A6 ADD DWT-ADDRESS CF A15,SETIMP GET TIMER BLOCK DATA DRQTUT,DRQTIM ADDRESS TO TIME-OUT ROUTINE AND DELAY CLT068 EQU * IFF RECHAN=0 LDR A8,A8 OBC-ACK ? RF(E) EXIT YES LDK A1,0 LD A4,DWTST,A6 DEVICE STATUS ANK A4,DEWDRQ DEVICE WITHOUT DATA REQUEST ? RB(NZ) CLT046 YES, RETURN TO DEVICE DRIVER LDR A2,A2 DATA REQUEST IMMEDIATE ? ABL(N) CLT110 YES =2 XIF EXIT ABL TDISP DISPATCHER EXIT IFF SOFTIM+RECHAN=0 U =4 EJECT * * TIME-OUT ROUTINE HANDLING MISSING DATA REQUESTS * FROM PRINTERS AND , FOR REMOTLY CONNECTED DEVICES * USING THE LRC-FUNCTION , MISSING BLOCK CONTROL * CHARACTERS (ABC) FROM SELECTOR UNIT. * DRQTUT EQU * LDR A6,A1 GET DWT-ADDRESS CM DWTLD1,A6 RESET POINTER TO TIMER BLOCK LD A3,DWTST,A6 RB(N) EXIT SLL A3,2 ECHO MODE ? RF(N) DRQT10 YES LDK A2,/83 CC A2,DWTOCH,A6 RB(E) EXIT U =2 U =2 DRQT10 EQU * * IFT ACKMUL=1 CF A15,GETCWT GET CWT-ADDRESS IM ACKTIM,A5 INCREMENT ACKUMULATOR XIF * IFF SOFTIM+RECHAN=0 U =4 LDK A1,TIMERR INDICATE SOFTWARE TIME-OUT IFF RECHAN=0 SLL A3,6 DEVICE STATUS RF(NN) DRQT20 DEVICE WITH DATA REQUEST LDK A1,LRCERR INDICATE LRC-ERROR DRQT20 EQU * XIF IFF SOFTIM+RECHAN=0 U =4 ABL CLT107 RETURN TO DEVICE DRIVER XIF U =4 EJECT * * N A K * * ERROR ACKUMULATOR AND RETRANSMISSION COUNTER IS * UPDATED. LAST OUTPUT CHARACTER IS RETRANSMITTED * BY CHANNEL DRIVER SIX TIMES AND IF STILL NO SUCCESS * RETURN CODE NOT OPERABLE IS SENT TO DEVICE DRIVER. * CLT080 EQU * LDR* A6,A5 GET LAST OUTPUT DWT RB(E) EXIT * IFT ACKMUL=1 * IM CWTADD,A5 UPDATE ERROR ACKUMULATOR * XIF * IFF RECHAN=0 CWK A6,1 SYNC BEFORE NAK? RB(E) EXIT YES XIF IM CWTRTC,A5 INCREMENT RETRANSMISSION COUNTER LD A4,CWTRTC,A5 GET COUNTER SUK A4,7 SEVEN TIMES ? ABL(E) CLT030 LD A2,CWTLOW,A5 GET LAST OUTPUT WORD EX CWTOTR,A5 EXECUTE OTR-INSTR. IFT LOGING=1 CF A15,LOGG ** LOGG INPUT CHARACTER ** XIF U =4 IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 REMOTE? RF(Z) CLT090 NO XIF IFF RECHAN=0 ANK A2,/FF XRS A2,LRCACK,A7 UPDATE LRC-ACKUMULATOR CF A15,RESTSY START OR RESTART SYNC-TIMER XIF CLT090 ABL TDISP EJECT * * * DATA INPUT AND DATA REQUEST * * ALWAYS: GET DWT-ADDRESS FROM INTERRUPT TABLE * * DATA INPUT: IF INPUT REQUESTED FROM DEVICE, RETURN TO * DEVICE DRIVER. * IF INPUT NOT REQUESTED, GO TO INTERRUPT * ROUTINE OF DEVICE DRIVER. * * DATA REQUEST: * * LOCAL DEVICES: STORE PRINTER STATUS IN DWTDEV AND * RETURN TO DEVICE DRIVER. * REMOTE DEVICES: RETURN TO DEVICE DRIVER. * * STATUS MESSAGE (ONLY FOR REMOTE DEVICES): * GO TO INTERRUPT ROUTINE OF DEVICE DRIVER. * * CLT100 EQU * LDR A3,A2 SRL A3,8 LDR A4,A3 ANK A3,/E 2 * LINE NUMBER FOR LOCAL CONN. IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 LOCAL ? RF(Z) CLT103 YES XIF IFF RECHAN=0 ANK A3,/02 MASK CHANNEL NUMBER SLL A3,1 TO CORRECT POSITION CWR A7,A5 TERMINAL 2 ON CHANNEL ? RF(E) CLT103 NO ADK A3,2 YES, ADD TERMINAL NUMBER XIF CLT103 EQU * SRL A4,3 ANK A4,/E 2 * DEVICE NUMBER IFF RECHAN=0 CWK A4,/E SYNC-INPUT ? RF(E) CLT150 YES LOOP SWITCH SET XIF LD* A8,CWTITA,A5 ADDRESS TO INTERRUPT TABLE RB(Z) EXIT CW A3,-2,A8 WITHIN TABLE ? RB(NL) EXIT NO ADR A8,A3 LDR* A8,A8 ADDRESS TO TERMINAL SECTION RB(Z) EXIT NOT DEFINED LD A6,-2,A8 GET ID-WORD SUR A6,A4 RB(NP) EXIT UNDEFINED INTERRUPT LDR A4,A4 NO DEVICE NUMBER ? ABL(E) CHPOWO POWER ON ADR A8,A4 ADDRESS TO DWT-ADDRESS LDR* A6,A8 GET DWT-ADDRESS RB(E) EXIT ANK A2,/FF CLEAN CHARACTER LD A3,DWTST,A6 DEVICE STATUS ANK A3,DEVINP+INDARQ MASK INPUT DEV. AND INPUT REQ. SUK A3,DEVINP RF(Z) CLT115 INPUT DEV. BUT NO INPUT REQUESTED RF(P) CLT108 INPUT DEV. WITH INPUT REQUESTED LD A3,DWTST,A6 DEVICE STATUS ANK A3,DEWDRQ DEVICE WITHOUT DATA REQUEST ? RB(NZ) EXIT YES IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 REMOTE ? RF(NZ) CLT120 YES XIF IFT LOCHAN=0 RF CLT120 XIF IFF LOCHAN=0 SC A2,DWTDEV+1,A6 SAVE PRINTER STATUS =2 RF CLT110 XIF * * CLT107 EQU * IFF SOFTIM+RECHAN=0 U =4 CF A15,RESTIM RESET TIMER XIF U =4 RF CLT110 CLT108 EQU * LDKL A7,/FFFF-INDARQ ANS A7,DWTST,A6 RESET FLAG 'INPUT REQUESTED' * * RETURN TO DEVICE DRIVER * (USED BY ALL DEVICES FOR RETURN) * CLT110 EQU * ABL NDREP RETURN TO DEVICE DRIVER * * GO TO INTERRUPT ROUTINE OF DEVICE DRIVER * CLT115 EQU * LD A1,DWTADR,A6 ADDRESS BLOCK LD A1,INTADR,A1 INTERRUPT ENTRY DEFINED ? RB(Z) CLT090 NO, SKIP CHARACTER LDR A5,A6 DWT ADDRESS ADKL A5,DWTSB2 STACK BASE ABR A1 DEVICE DRIVER INTERRUPT ENTRY * IFF RECHAN=0 EJECT * * REMOTE DATA REQUEST AND STATUS MESSAGE * CLT120 LDR A7,A2 REMOTE DATA REQUEST ? ANK A7,/FF U =2 RB(NZ) CLT115 NO, STATUS MESSAGE =2 CWR* A6,A5 DRD BEFORE ANSWER ? ABL(E) EXIT YES U =2 RB CLT110 U =2 EJECT * * * TFU IN LOOP MODE * CLT150 EQU * LDK A4,1 CWR* A4,A5 SYNC SENT ? RF(NE) CLT154 LDKL A4,/8001 INDICATE LOOP MODE AND SYNC-ACK RECEIVED CLT152 EQU * ORS A4,CWTRST,A5 CLT154 ABL EXIT EJECT * * LOOP MODE * CLT170 EQU * LDR A3,A2 ANK A3,/FF SUK A3,3 POWER ON ? RF(E) CLT179 YES LDR* A4,A5 GET LAST OUTPUT DWT LDR* A6,A5 SUK A4,1 SYNC ? RF(E) CLT178 YES LDK A1,NOERR INDICATE NOT OPERABLE CLT177 RB CLT110 CLT178 EQU * SUK A3,4 ACK ? RF(NE) EXITA NO LDK A4,2 INDICATE ACK RECEIVED RB CLT152 * * POWER ON * CLT179 EQU * LDK A3,/E3 ANS A3,CWTRST,A5 RESET LOOP TEST BIT ABL CLT100 XIF EJECT * * QUEUE * * GET LAST OUTPUT DWT AND SET CHANNEL FREE. * IF LOCAL DEVICE CHECK OUTPUT QUEUE AND SEND * IF SOMETHING THERE. * IF REMOTE DEVICE CHECK QUEUE OF CHANNEL'S OTHER * TERMINAL AND SEND IF SOMETHING THERE. IF NOTHING I * IN THAT QUEUE, CHECK QUEUE OF INTERRUPTING TERMINAL * AND SEND IF SOMETHING THERE. * QUEUE EQU * LDR* A4,A5 GET LAST OUTPUT DWT CM CWTRTC,A5 RESET RETRANSMISSION COUNTER CMR A5 SET CHANNEL FREE * QUESEC EQU * SECOND ENTRY IN SUBROUTINE STR A2,A15 SAVE A2 ON STACK U =4 IFF RECHAN=0 IFF LOCHAN=0 LDK A1,0 INDICATE READY FOR LOCAL =4 LDR A7,A7 LOCAL ? RF(Z) QUEU01 YES XIF IFF RECHAN=0 LDK A1,1 INDICATE FIRST TRIAL CWR A7,A5 REMOTE TERMINAL 2 ? RF(E) QUEU20 NO XIF QUEU01 LDKL A8,CWTEQ QUEUE FIRST TERMINAL QUEU03 ADR A8,A5 ADD CWT-TABLE-ADDRESS QUEU04 EQU * LDR* A6,A8 QUEUE EMPTY ? U =4 IFT RECHAN=0 U =4 RF(E) QUEU05 YES =4 XIF U =4 IFF RECHAN=0 RF(E) QUEU10 YES =4 IFF LOCHAN=0 LDR A7,A7 RF(Z) QUEU06 PREVENT HANG UP XIF IFF RECHAN=0 CWR A6,A4 SAME DEVICE IN QUEUE ? RF(E) QUEU06 YES LD A2,CWTBLK,A5 RF(N) QUEU05 BLOCK SENDING RUNNING XIF QUEU06 EQU * LD A2,DWTOTQ,A6 TAKE DWT OUT OF QUEUE STR A2,A8 SET NEXT DWT FIRST IN QUEUE LC A2,DWTOCH,A6 GET LAST OUTPUT CHARACTER CF A15,OUTLIN SEND IT QUEU05 LDR* A2,A15 RELOAD A2 CWR A6,A4 DEVICE ALREADY IN OUTPUT QUEUE ? RF(E) QUEU30 LDR A6,A4 GET LAST OUTPUT DWT RF(E) QUEU30 UNDEFINED INTERRUPT IFF RECHAN=0 CWK A6,1 SYNC ANSWER ? RF(E) QUEU30 YES U =4 LDK A1,0 XIF U =4 ABL RTNA15 IFF RECHAN=0 U =4 QUEU10 LDR A1,A1 READY ? RB(E) QUEU05 LDK A1,0 U =4 CWR A7,A5 TERMINAL 2 REMOTE ? RB(E) QUEU01 NO QUEU20 LDKL A8,CWTEQ+2 NEXT QUEUE RB QUEU03 XIF QUEU30 ADKL A15,4 RF LTDISP IFF RECHAN=0 EJECT * * * RESTSY = SUBROUTINE TO START OR RESTART * A TIMER FOR SYNC-SENDING * RESTSY EQU * STR A4,A15 LD A4,CWTTP,A5 TIMER POINTER ZERO? RF(NE) RESY20 LDR A1,A5 LDK A4,CWTTP TIMER POINTER ADR A4,A5 ADD CWT-ADDRESS CF A15,SETIMP SET TIMER DATA SYNCUT,TIME RF RESY30 RESY20 LDKL A4,-TIME ST* A4,CWTTP,A5 RESTART TIME RESY30 LDR* A4,A15 RELOAD A4 ADKL A15,2 LDR* P,A15 EJECT * * * TIME-OUT ROUTINE FOR SYNC-SENDING * IF NOTHING HAPPENS ON A LINE IN 500 MS * SYNC-CHARACTER IS SENT. * SYNCUT EQU * CM CWTTP,A1 RESET TIMER POINTER LDR A5,A1 LD A2,CWSYNC,A1 GET SYNC CHARACTER XRKL A2,/800 CHANGE TERMINAL NUMBER ST A2,CWSYNC,A1 STORE LDK A6,1 SYNC02 EX CWTOTR,A1 OUTPUT RF(A) SYNC04 ACCEPTED RF(U) EXITA CF A15,RESTSY RESTART SYNC TIMER RF EXITA SYNC04 EQU * STR A6,A1 STORE "1" AS LAST OUTPUT DWT * IFT LOGING=1 * CF A15,LOGG LOGG OF OUTPUT CHARACTER XIF * IFF RECHAN=0 LDR A3,A2 SLL A3,4 RF(NN) SYNC05 ADK A5,2 SYNC05 EQU * ANK A2,/FF XRS A2,LRCACK,A5 UPDATE LRC-ACKUMULATOR LD A4,CWTRST,A1 LOOP MODE ? LDR A3,A4 ANK A4,/80 RF(E) EXITA NO ANK A3,/60 RF(E) SYNC20 THIRD SYNC SUK A3,/20 RF(NE) SYNC10 FIRST SYNC LDK A3,/20 SECOND SYNC SYNC10 XRS A3,CWTRST,A1 CHANGE COUNTER EXITA ABL TDISP DISPATCH SYNC20 LDKL A6,DWREMU SET DWT-ADDRESS LD A7,DWTOR,A6 ORDER ANK A7,/FF LD A8,DWTECB,A6 ECB-ADDRESS LD A3,DWTADR,A6 ADDRESS TO ADDRESSBLOCK ENB ABI INTADR,A3 GO TO INTERRUPT HANDLER XIF EJECT * * CHARACTER INPUT * LTCHRI EQU * RTCHRI EQU * LDK A2,INDARQ ORS A2,DWTST,A6 SET INPUT REQUESTED IN DWT CF A15,NDSAV8 SAVE A3-A5, A7-A8 IN DWT RF LTDISP LOCAL DISPATCHER * * CHARACTER OUTPUT * LTCHRO EQU * RTCHRO EQU * CF A15,NDSAV8 SAVE A3-A5, A7-A8 IN DWT CF A15,OUTLIN SEND CHARACTER * * LOCAL DISPATCHER * LTDISP EQU * RTDISP EQU * ABL TDISP GO TO DISPATCHER * * START OF A BLOCK (REMOTE) * RTSTBL EQU * IFF RECHAN=0 SUK A2,/03 BLOCK LENGTH < 3 RF(N) LTSTBL YES, SEND WITHOUT LRC LD A2,DWTST,A6 DEVICE STATUS ANKL A2,DEVECH+LRCSEN ECHO MODE OR LRC RUNNING ? RF(NZ) LTSTBL YES, SEND WITHOUT LRC LDK A2,STX LOAD STX RB RTCHRO SEND XIF * * END OF A BLOCK (REMOTE) * RTENBL EQU * IFF RECHAN=0 LD A2,DWTST,A6 DEVICE STATUS ANK A2,LRCSEN LRC-SENDING ? RF(Z) LTENBL NO LDK A2,ETB LOAD ETB RB RTCHRO SEND XIF * * END OF A BLOCK (LOCAL) * LTENBL EQU * IFF SOFTIM+RECHAN=0 U =4 LD A2,DWTST,A6 DEVICE STATUS ANK A2,DEWDRQ DEVICE WITHOUT DATA REQUEST ? RF(NZ) LTEN20 YES CF A15,RESTIM RESET PRINTER TIMING LTEN20 EQU * XIF U =4 * * START OF A BLOCK (LOCAL) * LTSTBL EQU * ABL NDRETO SET OK & RETURN TO DEVICE DRIVER * EJECT * * G E T C W T * * SUBROUTINE TO GET CWT-ADDRESS * AND INDICATION OF LOCAL/REMOTE-CONNECTION * IF BOTH CONNECTION TYPES ARE USED * * ON ENTRY: * A6 = DWT-ADDRESS * * ON EXIT: * A5 = CWT-ADDRESS * A7 = 0 IF LOCAL CONNECTION * GETCWT EQU * LDR* A5,A6 CHANNEL PARAMETERS ANK A5,/F SLL A5,1 DOUBLE INDEX IFF RECHAN=0 IFF LOCHAN=0 LDR* A7,A6 CHANNEL PARAMETERS ANKL A7,/0100 REMOTE CONNECTION ? RF(Z) GET010 NO XIF IFF RECHAN=0 LC A7,DWTCP2,A6 CHANNEL PARAMETERS 2 SRL A7,1 ANK A7,1 CHANNEL NUMBER ORR A5,A7 COMBINE WITH CH. UNIT INDEX ADK A5,4 ADJUST FOR LOCAL SLL A5,1 GET CHTAB DISPLACEMENT LDR A7,A5 INDICATE REMOTE CONNECTION XIF GET010 LD A5,CHTAB+2,A5 GET CWT-ADDRESS GETRTN ADKL A15,2 ADJUST STACK POINTER =4 LDR* P,A15 RETURN =4 IFF SOFTIM+RECHAN=0 U =4 EJECT * * * R E S T I M * * SUBROUTINE TO RESET TIMER FOR SUPERVISION * OF MISSING DATA REQUESTS AND MISSING BLOCK * CONTROL CHARACTERS. * * ON ENTRY: * A6=DWT-ADDRESS * RESTIM EQU * INH STR A7,A15 SAVE A7 ON STACK LD A7,DWTLD1,A6 GET TIMER POINTER RF(Z) REST20 TIMER ALREADY RESET CM* DWTLD1,A6 RESET TIMER CM DWTLD1,A6 RESET TIMER POINTER REST20 LDR* A7,A15 RELOAD A7 U =4 RB GETRTN RETURN =4 XIF U =4 IFF RECHAN=0 EJECT * * * R E S L R C * * SUBROUTINE TO RESET LRC-DEVICE POINTER, * BLOCKSENDING RUNNING INDICATOR AND LRC-SENDING BIT. * * ON ENTRY: * A5 = CWT-ADDRESS * A6 = DWT-ADDRESS * A7 = TERMINAL ADJUSTED CWT-ADDRESS * RESLRC EQU * STR A4,A15 SAVE A4 ON STACK CM LRCDWT,A7 RESET LRC-DEVICE POINTER LDKL A4,/FFFF-LRCSEN ANS A4,DWTST,A6 RESET LRC-SENDING BIT LDK A4,1 ANS A4,CWTBLK,A5 RESET BLOCKSENDING RUNNING IND. LDR* A4,A15 RELOAD A4 RB GETRTN RETURN =4 XIF EJECT * * O U T L I N * * OUTLIN = SUBROUTINE TO SEND ONE CHARACTER VIA * CHANNEL UNIT * * * GET CWT-ADDRESS AND IF CHANNEL UNIT FREE SEND CHARACTER. * RUNNING LRC-PROCESS CAN STOP OUTPUT FROM OTHER * DEVICES ON SAME LINE. IF CHANNEL UNIT NOT FREE * QUEUE OUTPUT * OUTLIN EQU * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT KBDIR=1 U =4 LDKL A8,0 RESET REG FOR INDICATION XIF U =4 ANK A2,/FF CF A15,GETCWT GET CWT-ADDRESS IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 LOCAL ? RF(Z) OUL100 YES XIF IFF RECHAN=0 LC A3,DWTCP2,A6 CHANNEL PARAMETERS 2 ANK A3,1 SECOND TERMINAL IN CHANNEL SLL A3,1 LDR A7,A5 GET CWT-ADDRESS ADR A7,A3 TERMINAL ADJUSTED CWT-ADDRESS XIF EJECT * * IF UNIT NOT FREE QUEUE OUTPUT. * IF REMOTE DEVICE AND LRC-PROCESS ALREADY * RUNNING ON TERMINAL FOR ANOTHER DEVICE, * QUEUE THIS NEW OUTPUT IF LRC-CONTROL ON * IT IS WANTED. * ELSE SEND CHARACTER. * OUL100 INH LDR* A3,A5 CHANNEL UNIT FREE ? RF(NE) OUL800 NO IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 REMOTE ? RF(Z) OUL400 NO XIF IFF RECHAN=0 LDR A3,A2 SUK A3,/82 STX ? RF(NE) OUL200 NO EJECT * * S T X * LD A3,LRCDWT,A7 LRC-PROCESS RUNNING ? RF(NE) OUL175 YES LDK A2,LRCSEN ORS A2,DWTST,A6 INDICATE LRC-SENDING LDK A2,0 ST A6,LRCDWT,A7 SET LRC-DEVICE CM LRCACK,A7 RESET LRC-ACKUMULATOR AND INDICATE FIRST OBC OUL150 LD A4,DWTCP2,A6 CHANNEL PARAMETERS 2 LDK A3,0 SET DEVICE NUMBER TO ZER0 RF OUL505 OUL175 CWR A3,A6 SAME LRC-DEVICE ? RF(NE) OUL800 QUEUE OUTPUT RF OUL350 OUL200 SUK A3,/15 ETB ? RF(NE) OUL300 NO EJECT * * E T B * SC A2,LRCACK,A7 INDICATE LAST OBC LC A2,LRCACK+1,A7 GET LRC-ACKUMULATOR RB OUL150 * * OTHER OUTPUT * OUL300 LD A8,DWTCP2,A6 CHANNEL PARAMETERS 2 CW A6,LRCDWT,A7 SAME DEVICE SENDING WITH LRC RF(Z) OUL350 YES LD A3,CWTBLK,A5 RF(NN) OUL500 BLOCKSENDING NOT RUNNING RF OUL800 BLOCKSENDING RUNNING, QUEUE OUL350 LD A3,DWTST,A6 DEVICE STATUS ANK A3,DEWDRQ DEVICE WITHOUT DATA REQUEST ? RF(Z) OUL500 DEVICE WITH DRD LD A3,CWTBLK,A5 RF(Z) OUL500 ORKL A2,/8000 INDICATE BLOCKSENDING RF OUL500 XIF EJECT * * * GET DEVICE ADDRESS AND WORK STATION ADDRESS * FROM CHANNEL PARAMETERS AND PUT INTO OUTPUT WORD * OUL400 EQU * U =4 IFT KBDIR=1 U =4 LD A8,DWTCP2,A6 CHANNEL PARAMETERS 2 =4 XIF U =4 OUL500 EQU * LD A3,DWTCP2,A6 CHANNEL PARAMETERS 2 LDR A4,A3 ANK A3,/7 DEVICE ADDRESS SRC A3,4 TO CORRECT PLACE IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 LOCAL ? RF(NZ) OUL505 NO XIF IFF LOCHAN=0 ANKL A4,/0700 WS-ADDRESS SLC A4,1 TO CORRECT PLACE IFF RECHAN=0 RF OUL508 XIF IFF RECHAN=0 OUL505 EQU * ANKL A4,/0200 REMOTE CHANNEL NUMBER ORR A3,A4 COMBINE WITH DEVICE ADDRESS LC A4,DWTCP2,A6 LEFT BYTE OF CH. PAR. 2 ANK A4,1 REMOTE TERMINAL NUMBER SRC A4,5 TO CORRECT PLACE XIF OUL508 EQU * ORR A3,A4 COMBINE DEV.ADDR. AND WS-ADDR. IFT KBDIR=1 U =4 ANKL A8,KBLAMP KB-LAMPS ON VDU-OUTPUT ? RF(NZ) OUL900 YES, PUT LAMP CODE FIRST IN QUEUE XIF U =4 OUL510 ORR A2,A3 OUTPUT WORD IN A2 EJECT * * SEND CHARACTER AND SET CHANNEL BUSY * IFF RECHAN=0 U =4 LDK A1,25 LOOP COUNTER FOR OTR XIF U =4 OUL515 EX CWTOTR,A5 OTR RF(A) OUL520 ACCEPTED IFT RECHAN=0 U =4 RF(R) OUL800 QUEUE =4 XIF U =4 IFF RECHAN=0 U =4 RF(U) OUL518 UNKNOWN SUK A1,1 MORE TRIES ? RB(NZ) OUL515 YES RF OUL800 QUEUE XIF U =4 OUL518 ADKL A15,20 RESET STACK LDK A1,NOERR SET NOT OPERABLE ABL NDREP GET REGISTERS AND RETURN TO DEV.DRIVER OUL520 EQU * * IFT LOGING=1 * CF A15,LOGG ** LOGG OF OUTPUT CHARACTER ** * XIF * STR A6,A5 SET CHANNEL BUSY ST A2,CWTLOW,A5 STORE LAST OUTPUT WORD IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 REMOTE ? RF(Z) OUL550 NO XIF IFF RECHAN=0 EJECT * * INDICATE BLOCKSENDING RUNNING IF STX TO DEVICE WITHOUT DATA REQUEST. * UPDATE LRC-ACKUMULATOR AND SYNC-TIMER * ANKL A3,/7000 MASK DEVICE ADDRESS RF(NZ) OUL540 NORMAL CHARACTER LD A3,DWTST,A6 DEVICE STATUS ANK A3,DEWDRQ DEVICE WITHOUT DATA REQUEST ? RF(Z) OUL540 DEVICE WITH DRD LD A3,CWTBLK,A5 BLOCK SENDING INDICATOR RF(Z) OUL540 BLOCKSENDING NOT ALLOWED LDK A3,/80 SC A3,CWTBLK,A5 INDICATE BLOCKSENDING RUNNING OUL540 EQU * ANK A2,/FF XRS A2,LRCACK,A7 UPDATE LRC-ACKUMULATOR CF A15,RESTSY START OR RESTART SYNC-TIMER XIF * * SAVE LAST OUTPUT CHARACTER IN DWT AND RETURN * OUL550 EQU * U =4 IFT KBDIR=1 U =4 LDR A8,A8 KB-LAMPS ON VDU-OUTPUT ? =4 RF(NZ) OUL700 YES XIF U =4 OUL600 SC A2,DWTOCH,A6 SET LAST OUTPUT CHARACTER OUL700 EQU * IFT CPU852=1 ABL IHRET8 RESTORE A1-A8 AND RETURN XIF * IFT CPU852=0 MLR 8,A15 RESTORE A1-A8 FROM STACK... INH ADKL A15,2 ...ADJUST STACK POINTER... LDR* P,A15 ...AND RETURN XIF * EJECT * * NORMALLY DWT-ADDRESS IS PUT LAST IN OUTPUT QUEUE * OUL800 EQU * IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 REMOTE ? RF(NZ) OUL805 YES XIF IFF LOCHAN=0 LDR A7,A5 CWT-ADDRESS XIF OUL805 LD A4,CWTEQ,A7 GET QUEUE POINTER RF(E) OUL820 OUL810 CWR A6,A4 RB(E) OUL600 DWT ALREADY IN QUEUE LD A3,DWTOTQ,A4 RF(E) OUL830 LDR A4,A3 FOLLOW THE THREAD RB OUL810 OUL820 ST A6,CWTEQ,A7 QUEUE DWT RF OUL840 OUL830 ST A6,DWTOTQ,A4 QUEUE DWT OUL840 CM DWTOTQ,A6 SET END OF THREAD RB OUL600 IFT KBDIR=1 U =4 EJECT * * KEYBOARD LAMPS ON VDU OUTPUT * (KEYBOARD CONNECTED TO VDU INSTEAD OF SUM) * * PUT LAMP CODE FIRST IN OUTPUT QUEUE * LOAD ESCAPE CODE FOR DATA TO KEYBOARD * IN OUTPUT REGISTER * OUL900 EQU * LD A4,DWTST,A6 DEVICE STATUS LDKL A1,/FFFF-LMPQUE ANS A1,DWTST,A6 RESET BIT 'LAMP CODE QUEUED' ANK A4,LMPQUE RB(NZ) OUL510 LAMP CODE ALREADY QUEUED LDR A1,A5 CWT-ADDRESS IFF RECHAN=0 IFF LOCHAN=0 LDR A7,A7 REMOTE ? RF(Z) OUL910 NO XIF IFT KBDIR=1 U =4 IFF RECHAN=0 LDR A1,A7 TERMINAL ADJUSTED CWT-ADDRESS XIF IFT KBDIR=1 U =4 OUL910 LD A4,CWTEQ,A1 OUTPUT QUEUE RF(Z) OUL920 QUEUE EMPTY CWR A6,A4 RB(E) OUL600 THIS DWT ALREADY IN QUEUE OUL920 ST A4,DWTOTQ,A6 MOVE QUEUE LINK ST A6,CWTEQ,A1 QUEUE LAMP CODE SC A2,DWTOCH,A6 STORE LAMP CODE IN DWT LDK A1,LMPQUE ORS A1,DWTST,A6 SET BIT 'LAMP CODE QUEUED' LDK A2,ESCKB ESCAPE CODE FOR DATA TO KB RB OUL510 XIF U =4 EJECT * * * C H L T O N * * SUBROUTINE TO RESET CWT AND PERFORM CIO-START OF EVERY * CHLT IN SYSTEM. THE SUBROUTINE IS ENTERED FROM 'PFINIT' * * * CHLTON EQU * LD A4,CHTAB CON010 SUK A4,2 ALL TREATED ? RF(NZ) CON020 NO TAKE NEXT RTNA15 ADKL A15,2 RETURN AND ENABLE ENB LDR* P,A15 CON020 EQU * INH LD A5,CHTAB,A4 LOAD CWT-ADDRESS RB(Z) CON010 IFF RECHAN=0 IFF LOCHAN=0 CWK A4,/A LOCAL ? RF(L) CON030 YES XIF IFF RECHAN=0 CON025 EQU * LDK A3,/40 INDICATE CHANNEL NOT BUSY EX CWTCIS,A5 EXECUTE CIO-START RF(U) CON027 LDK A3,0 INDICATE CHANNEL BUSY CF A15,RESTSY START OR RESTART SYNC-TIMER CON027 EQU * ST A3,CWTRST,A5 INDICATE C.U. PRESENT OR NOT RF CON035 XIF CON030 EQU * EX CWTCIS,A5 EXECUTE CIO-START CON035 EQU * LDR* A6,A5 GET LAST DWT RB(Z) CON010 IFF RECHAN=0 CWK A6,1 SYNC ? RB(E) CON010 XIF CMR A5 RESET LAST OUTPUT LDK A2,/00 DUMMY CF A15,OUTLIN SEND IT RB CON010 EJECT * * L O G G * * IF CONDITIONALY ASSEMBLY IS SET EVERY INPUT AND * OUTPUT CHARACTER ARE LOGGED * * IFT LOGING=1 * LOGG STR A1,A15 LD A1,POINT ADK A1,2 CWK A1,BUFE BUFE IS MAX LOGG AREA RF(NE) L1 LDKL A1,BUF SET FIRST LOGG ADDRESS L1 ST A1,POINT STR A2,A1 LOGG OF INR OR OTR WORD LDR* A1,A15 ADKL A15,2 LDR* P,A15 RETURN * * XIF SUMLOG EQU * IFT LOGING=1 POINT DATA BUF-2 LOGG POINTER * IFT RECHAN=0 BUF RES 200 LOGG AREA XIF IFT LOGING=1 IFF RECHAN=0 BUF RES 1000 LOGG AREA XIF BUFE EQU * * END