|
|
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: 71450 (0x1171a)
Notes: pts_type(SC)
Names: »DRRT01.SC«
└─⟦025d39960⟧ Bits:30009672 Philips computer tape "600133"
└─⟦this⟧ »M:DSB/DRRT01.SC«
IDENT DRRT01 REL 9.2 80-11-24 870105040920 =13,8000,CURT,BLK TRANSM. PR REL 9.2 80-04-23 =12,PRINTER RECOVERY ERROR REL 9.2 80-03-14 =11,DISPLAY RECOVERY ERROR REL 9.2 80-02-19 =10,RMT TST MISS,RST OF INT ALL REL 9.2 79-11-16 =9,TIMER RESET,TEST ORDER,INH-A15 REL 9.1 79-06-26 =8, INTERRUPT ADDRESS DISPLACEMENT REL 9.1 79-05-23 =7,CLT100 CORRECTED REL 9.1 79-04-06 =1-6,GEN UPDATE TO 8.2+ STATUS REL 8.2 79-03-22 =6,C.U. PRESENT CHECK ERROR REL 8.2 79-03-20 =5,HANG UP PREVENT REL 8.2 79-03-19 =4,TIME OUT ROUTINE ERROR REL 8.2 79-03-18 =3,DISPL. RECOVERY REL 8.2 79-03-17 =2,LOOP TEST ERROR REL 8.2 79-03-16 =1,IMPROV. OF TEST ORDER REL 8.2 78-09-15 * ************************************************ * * PHILIPS TERMINAL SYSTEM PTS * * DRRT01 = DRIVER CHANNEL UNIT FOR LOCAL * AND REMOTE TERMINALS * * * * * ************************************************ * * THIS IS THE DRIVER TO CHANNEL UNITS FOR LOCAL AND REMOTE TERMINALS. * AT INTERRUPT AN INPUT WORD IS READ TO REGISTER A2. IF DATA * INPUT OR DATA REQUEST A BRANCH IS MADE TO INTERRUPT HANDLER * FOR ACTUAL DEVICE. * IF CONTROL CHARACTER, THIS IS EXAMINED AND NECESSARY ACTIONS * ARE CARRIED OUT. * * * THE DRIVER ALSO INCLUDES THE FOLLOWING SUBROUTINES:- * * - OUTLIN SEND ONE CHARACTER VIA CHLT * * - CHLTON EXECUTE CIO-START ON EVERY CHLT IN SYSTEM * * - GETCHR GET ONE CHARACTER FROM ECB-BUFFER * * CONTROL WORK TABLES FOR THE CHANNELS ARE * INCLUDED IN THE DRIVER. EJECT * * * * THE FOLLOWING FUNCTIONS ARE ALSO INCLUDED IN THE DRIVER:- * * - OUTPUT SEND ONE CHARACTER, SAVE A3-A5 AND RETURN TO DISPATCHER * * - STREG SAVE A3-A5 AND RETURN TO DISPATCHER * * - LDREG IF INTERRUPT IS ALLOWED, RESTORE A3-A5 AND RETURN * TO USER VIA A5 * * - LDREGE RESTORE A3-A5 AND RETURN TO USER VIA A5 * * * * 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 = ORDER * A8 = ECB-ADDRESS * * * EJECT * *************** * ENTRIES * *************** * * ENTRY CHLT1 INTERRUPT FROM FIRST CHANNEL UNIT ENTRY CHLT2 INTERRUPT FROM SECOND CHANNEL UNIT LOCAL ENTRY CHLT3 INTERRUPT FROM THIRD CHANEL LOCAL ENTRY CHLT4 INTERRUPT FROM FOURtH CHANEL LOCAL ENTRY CHRT1 INTERRUPT FROM FIRST CHANNEL UNIT REMOTE ENTRY CHRT2 INTERRUPT FROM SECOND CHANNEL UNIT REMOTE ENTRY CHRT3 INTERRUPT FROM THIRD CHANEL REMOT ENTRY CHRT4 INTERRUPT FROM FOURTH CHANEL REMOTE ENTRY OUTLIN SEND ONE CHARACTER ENTRY CHLTON START OF CHLT ENTRY OUTPUT SAVE REGISTERS, SEND CHARACTER ENTRY CHTAB CHANNEL TABLE AND GO TO DISPATCHER ENTRY LDREG RELOAD REGISTERS AND RETURN ENTRY LDREGE RETURN FROM ECHO HANDLING ENTRY LDREGF RETURN ENTRY STREG SAVE REGISTERS IN DWT AND DISPATCHER ENTRY GETCHR GET ONE CHARACTER FROM ECB-BUFFER 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 ECHRTN RETURN FROM ECHO ENTRY ECHO ECHO ROUTINE ENTRY ECHEND END OF ECHO EJECT * * ************************************** * EXTERNAL TOSS MODULE ENTRIES * ************************************** * * EXTRN SAVE8 SAVE REGISTERS A1-A8 EXTRN TDISP DISPATCHER EXTRN RETUR4 RESTORE A1-A4 EXTRN RETUR8 RESTORE A1-A8 EXTRN SETIME SET TIMER EXTRN SETIMP SET TIME EXTRN INTLT1 INTERRUPT TABLE FOR LOCAL TERMINALS EXTRN INTLT2 INTERRUPT TABLE FOR CHLT2 EXTRN INTLT3 INTERRUPT FROM CHLT3 EXTRN INTLT4 INTERRUPT FROM CHLT4 EXTRN INTRT1 INTERRUPT TABLE FOR REMOTE TERMINALS EXTRN INTRT2 INTERRUPT TABLE REMOTE CHANNEL 2 EXTRN INTRT3 INTERRUPT TABLE FOR REMOTE CHANEL 3 EXTRN INTRT4 INTERRUPT TABLE FOR REMOTE CHANEL 4 EXTRN DISIOE I/O REQUEST ERROR EXTRN DISEND END I/O AND DISPATCH EXTRN INTSAV SAVE AREA LAST INTERRUPT EXTRN TENDIO EXTRN IHRET8 RESTORE A1-A8 WITHOUT ENABLE * * * * *********************** * DWT PARAMETERS * *********************** * EXTRN DWTOR ORDER EXTRN DWTOCH LAST OUTPUT CHARACTER EXTRN DWTECB ECB-ADDRESS EXTRN DWTADR ADDRESS TO ADDRESS-BLOCK EXTRN DWTST STATUS EXTRN DWTWAT EXTRN DWTOTQ OUTPUT QUEUE EXTRN DWTA3 SAVE AREA A3 EXTRN DWTA4 SAVE AREA A4 EXTRN DWTA5 SAVE AREA A5 EXTRN DWTSB2 STACK BASE 2 IN DWT EXTRN DWTTP TIMER POINTER EXTRN DWTECH ECHO DEVICE DWT EXTRN INTADR INTERRUPT ADDRESS DISPLACEMENT EXTRN RECADR RECOVERY ADDRESS DISPLACEMENT EXTRN ECHADR ECHO ADDRESS DISPLACEMENT * EJECT * * ******************** * CONSTANTS * ******************** * * NOERR EQU 1 RETURN CODE NOT OPERABLE TIME EQU 5 TIME BEFORE TIME-OUT FOR SYNC 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 0 * * * BY SETTING X:B TO 1,2,3 OR 4 THIS DRIVER HANDLES ONE * OR UP TO FOUR LOCAL CHANNELS. * X:B EQU 1 LOCHAN EQU 3 * * * 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 0 * * * BY SETTING X:D TO 1,2,3 OR 4 THIS DRIVER HANDLES ONE * OR UP TO FOUR REMOTE CHANNEL CARDS. * X:D EQU 2 RECHAN EQU 1 * * * * REMFC IS " REMOTE TEST FILE CODE " * STANDARD IS /15 * X:E EQU /15 REMFC EQU /15 * * ECHO FUNCTION CAN BE EXCLUDED BY * SETTING X:F = 0 * X:F EQU 1 CECHO EQU 1 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 0 * EJECT ***************************************************** * C W T L T 1 * ***************************************************** * * CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 1 * DWA1 EQU /03 DEVICEADDRESS * CWTLT1 EQU * TABLE ENTRY CWTLDW EQU *-CWTLT1 DATA 0 LAST OUTPUT DWT CWTLOW EQU *-CWTLT1 DATA 0 LAST OUTPUT WORD CWTITA EQU *-CWTLT1 DATA INTLT1 ADDRESS TO INTERRUPT TABLE CWTINR EQU *-CWTLT1 INR A2,0,DWA1 INR CWTOTR EQU *-CWTLT1 OTR A2,0,DWA1 OTR CWTCIS EQU *-CWTLT1 CIO A2,1,DWA1 CIO-START CWTRTC EQU *-CWTLT1 DATA 0 RETRANSMISSION COUNTER CWTEQ EQU *-CWTLT1 DATA 0 QUEUE DATA 0 QUEUE 2 CWTADD EQU *-CWTLT1 * IFT ACKMUL=1 * DATA 0 NAK-ACKUMULATOR DATA 0 RETR. FAULT-ACKUMULATOR DATA 0 UNDEFINED-INTERRUPT-ACKUMULATOR ACKTIM EQU *-CWTLT1 DATA 0 PRINTER TIMEOUT ACKUMULATOR * XIF * EJECT * * ***************************************************** * C W T L T 2 * ***************************************************** * * CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 2 * CWTLT2 EQU * * IFT LOCHAN=2 * * * 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 * IFT LOCHAN=3 * * * 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 * IFT LOCHAN=4 * * * 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 * * IFT LOCHAN=3 * * * 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 * IFT LOCHAN=4 * * * 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 * DWA5 EQU /1 DEVICE ADDRESS CWTRT1 EQU * 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 * CWTTP EQU *-CWTRT1 DATA 0 TIMER POINTER CWSYNC EQU *-CWTRT1 DATA /7055 SYNC CHARACTER LRCDWT EQU *-CWTRT1 DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 1 DATA 0 DWT OF GOING LRC-PROCESS TERMINAL 2 LRCACK EQU *-CWTRT1 DATA 0 LRC-ACKUMULATOR TERMINAL 1 DATA 0 LRC-ACKUMULATOR TERMINAL 2 CWTRST EQU *-CWTRT1 DATA 0 CHANNEL STATUS WORD (LOOP-TESTS) CWTBLK EQU *-CWTRT1 BLOCK SENDING INDICATOR DATA 0 BIT 0: BLOCKSENDING RUNNING BIT 15: BLOCKSENDING ALLOWED EJECT ******************************** * C W T R T 2 * ******************************** * CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 2 * CONNECTED TO FIRST CHRT * CWTRT2 EQU * 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 * 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 0 BLOCK SENDING INDICATOR EJECT ******************************** * C W T R T 3 * ******************************** * * CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 1 * CONNECTED TO SECOND CHRT * CWTRT3 EQU * * IFT RECHAN=2 * 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 IFT RECHAN=3 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 IFT RECHAN=4 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 IFT 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 0 BLOCK SENDING INDICATOR XIF IFT RECHAN=3 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 0 BLOCK SENDING INDICATOR 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 0 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 * * IFT RECHAN=2 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 IFT RECHAN=3 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 IFT RECHAN=4 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 IFT 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 0 BLOCK SENDING INDICATOR * XIF * IFT RECHAN=3 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 0 BLOCK SENDING INDICATOR * 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 0 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 * * IFT RECHAN=3 * 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 IFT RECHAN=4 * 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 IFT RECHAN=3 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 0 BLOCK SENDING INDICATOR 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 0 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 * * IFT RECHAN=3 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 IFT RECHAN=4 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 * IFT RECHAN=3 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 0 BLOCK SENDING INDICATOR * 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 0 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 0 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 0 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=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 * DATA CWTRT1 DATA CWTRT2 * IFT RECHAN=3 DATA CWTRT3 DATA CWTRT4 DATA CWTRT5 DATA CWTRT6 * XIF * IFT RECHAN=2 DATA CWTRT3 DATA CWTRT4 XIF * IFT RECHAN=4 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 * DATA 0 DATA /8000 STATUS DATA 0,0 DATA AREM POINTER TO ADDRESS-BLOCK DATA 0,0,0 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 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 ? =2 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 DISIOE I/O REQUEST ERROR LOPT10 EQU * LD A1,CWTRST,A2 GET CHANNEL LOOP STATUS LDR A5,A2 CWT-ADDRESS =13 ANK A1,/40 RF(NE) IHLP10 CHANNEL UNIT NOT BUSY LDK A5,/E0 INDICATE REQUEST GOING ST A5,CWTRST,A2 INDICATE LOOP-TESTING ABL TDISP EJECT * * * 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 ABL DISEND 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 * * ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * LDK A7,2 INDICATE CHLT1 RF CLT010 * CHLT2 EQU * * * * * * C H L T 2 * * INTERRUPT FROM CHLT2 * IFT LOCHAN=2 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT LOCHAN=2 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT LOCHAN=2 LDK A7,4 INDICATE CHLT2 RF CLT010 * XIF * IFT LOCHAN=3 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT LOCHAN=3 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT LOCHAN=3 LDK A7,4 INDICATE CHLT2 RF CLT010 * XIF * 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,4 INDICATE CHLT2 RF CLT010 * XIF * CHLT3 EQU * * * * * C H L T 3 * * INTERRUPT FROM CHLT3 * 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,6 INDICATE CHLT3 RF CLT010 XIF * * IFT LOCHAN=3 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT LOCHAN=3 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT LOCHAN=3 LDK A7,6 INDICATE CHLT3 RF CLT010 * XIF * CHLT4 EQU * * * * * C H L T 4 * * INTERRUPT FROM CHLT4 * 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 * ST P,INTSAV * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * LDK A7,10 INDICATE CHRT1 RF CLT010 * * C H R T 2 * * INTERRUPT FROM CHRT2 * CHRT2 EQU * IFT RECHAN=2 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT RECHAN=2 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT RECHAN=2 LDK A7,14 INDICATE CHRT2 RF CLT010 XIF * IFT RECHAN=3 ST P,INTSAV STORE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT RECHAN=3 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT RECHAN=3 LDK A7,14 INDICATE CHRT2 RF CLT010 XIF * 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,14 INDICATE CHRT2 RF CLT010 XIF * * * C H R T 3 * * INTERRUPT FROM CHRT3 * CHRT3 EQU * IFT RECHAN=3 ST P,INTSAV SAVE LAST INTERRUPT * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT RECHAN=3 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT RECHAN=3 LDK A7,18 INDICATE CHRT3 RF CLT010 XIF * 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,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 * CLT010 LD A5,CHTAB,A7 GET CWT-ADDRESS * XIF * EX CWTINR,A5 EXECUTE INR-INSTRUCTION ABL(NA) TDISP WAIT FOR ACCEPTED INT (8000) =13 * 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. * SUK A7,10 RF(N) CLT018 LOCAL INTERRUPT 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 CLT018 LDK A1,0 RESET RETURN CODE LDR A3,A2 DATA REQUEST IMMEDIATE ? ABL(N) CLT050 =10 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 ABL(E) CLT050 U =13 ADK A3,2 ABL(E) CLT080 NAK ADK A3,2 ABL(E) CLT100 POWER ON LDR A7,A7 LOCAL ? RF(N) CLTQUE YES 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 CM LRCDWT,A7 RESET LRC-DEVICE POINTER LDK A4,1 RESET BLOCKSENDING RUNNING ANS A4,CWTBLK,A5 LDR A4,A6 DWT-ADDRESS =13 CF A15,QUESEC CHECK QUEUE =13 SUK A3,5 RF(E) CLT043 ABC+ , GO TO DRIVER IFT ACKMUL=1 * IM CWTADD+2,A5 UPDATE ERROR ACKUMULATOR XIF * SUK A3,4 VRC-ERROR ? RF(E) CLT042 YES LDK A4,1 SUK A3,2 RF(E) CLT033 ADK A3,4 RF(E) CLT033 EJECT * * RESOLVE QUEUE AND EXAMINE RECOVERY BIT. * ONE RECOVERY ATTEMPT IS MADE AND THEN * RETURN CODE NOT OPERABLE IS SENT TO * DEVICE DRIVER. CLT030 LDR A7,A7 REMOTE ? RF(N) CLTQUE NO LD A6,LRCDWT,A7 SUR* A6,A5 LRC-DEVICE ? RF(NE) CLTQUE CM LRCDWT,A7 RESET LRC-DEVICE POINTER LDK A4,1 ANS A4,CWTBLK,A5 RESET BLOCKSENDING RUNNNING CLTQUE CF A15,QUEUE RESOLVE QUEUE CLT031 LC A2,DWTST,A6 GET LEFT BYTE OF STATUS WORD LDR A3,A2 ANK A2,/30 ECHO AND RECOVERY BIT RF(NE) CLT045 ORK A3,/10 INDICATE RECOVERY TRIAL DONE SC A3,DWTST,A6 STORE CLT032 LDK A4,0 CLT033 LDK A3,2 INDICATE RECOVERY OF DEVICE U =11(=3) RF CPO025 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 LDR* A4,A6 BLOCK SENDING ? RB(N) CLT031 CLT043 ABL CLT107 EJECT * * POWER ON * * RECOVERY ROUTINES ARE STARTED FOR EVERY DEVICE * ON ACTUAL LINE EXCEPT THOSE OCCUPYING CHANNEL UNIT * OR THOSE IN ECHO MODE. * * ON EXIT TO RECOVERY ROUTINE: * * A5 = STACKBASE * A6 = DWT-ADDRESS * CHPOWO EQU * LDR* A2,A5 GET CHANNEL OCCUPYING DEVICE CM CWTRTC,A5 RESET RETRANSMISSION COUNTER LDR A7,A7 REMOTE ? RF(N) CPO010 NO CM LRCDWT,A7 RESET LRC-DEVICE POINTER LDK A7,1 ANS A7,CWTBLK,A5 RESET BLOCKSENDING RUNNING CPO010 LDR A3,A6 DEVICE COUNTER ANK A3,/FF LDR A1,A8 SET ADDRESS POINTER CPO020 ADK A1,2 LDR* A6,A1 GET DWT-ADDRESS RF(E) CPO030 SRC A6,1 RF(N) CPO030 SLC A6,1 LCR A7,A6 GET LEFT OF CHANNEL PAR. ANK A7,1 INPUT DEVICE ? RF(NE) CPO025 YES LDKL A7,/EFFF RESET RECOVERY BIT ANS A7,DWTST,A6 LC A7,DWTST,A6 ANK A7,/20 ECHO MODE ? RF(NE) CPO030 YES CWR A6,A2 DEVICE WAITING FOR CHANNEL ANSWER RF(E) CPO030 YES CPO025 LD A7,DWTADR,A6 ADDRESS TO ADDRESS-BLOCK IN A7 LD A7,RECADR,A7 ADDRESS TO RECOVERY ROUTINE IN A7 RF(E) CPO030 LDKL A5,DWTSB2 STACK BASE ADR A5,A6 INH CFR A15,A7 GO TO RECOVERY ROUTINE CPO030 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 * LD A1,DWTST,A6 GET STATUS =10 SLL A1,2 ECHO ? =10 RF(N) CLT047 YES =10 LDKL A1,/EEFF NO, RESET INT ALL AND RECOV =10 RF CLT048 =10 CLT047 LDKL A1,/EFFF YES, RESET ONLY RECOV BIT =10 CLT048 ANS A1,DWTST,A6 =10 LDK A1,NOERR INDICATE NOT OPERABLE ABL CLT107 RESET TIMER AND FINISH =10 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 * LC A3,CWTLOW,A5 LAST OUTPUT WORD ANK A3,/F0 KEEP DEVICE NUMBER CF A15,QUEUE RESOLVE QUEUE LDKL A4,/EFFF ANS A4,DWTST,A6 RESET RECOVERY BIT IN STATUS WORD LDR A7,A7 REMOTE ? =10 RF(N) CLT052 N0 =10 LDK A4,2 ORS A4,CWTRST,A5 INDICATE ACK IN CHANNEL STATUS LDR A8,A3 OBC-ACK ? RF(NE) CLT052 LDKL A3,/8000 ORS A3,LRCACK,A7 INDICATE ABC ALLOWED RF CLT055 CLT052 EQU * LDR* A3,A6 DEVICE WITHOUT DATA REQUEST ? RF(NN) CLT055 CW A6,LRCDWT,A7 ABL(NE) CLT110 EJECT * * * PRINTER TIMING * CLT055 EQU * INH LD A3,DWTTP,A6 ADDRESS TO TIMER BLOCK RF(E) CLT060 * * RESTART TIMER * LDKL A3,-DRQTIM RESTART TIMER ST* A3,DWTTP,A6 RF CLT068 * * START TIMER * CLT060 EQU * LDR A1,A6 PARAMETER LDKL A4,DWTTP 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 * LDR A8,A8 OBC-ACK ? RF(E) EXIT YES LDK A1,0 LDR* A4,A6 GET CHANNEL PARAMETER RF(N) CLT110 DEVICE WITHOUT DATA REQUEST LDR A2,A2 DATA REQUEST IMMEDIATE ? ABL(N) CLT125 YES =11 EXIT ABL TDISP DISPATCHER EXIT 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 DWTTP,A6 RESET POINTER TO TIMER BLOCK LD A3,DWTST,A6 RB(N) EXIT SLL A3,2 ECHO MODE ? RF(N) CLT110 YES LDR* A5,A6 CHANNEL PARAMETER ANK A5,/F SLL A5,1 2 * INDEX LDK A2,/83 CC A2,DWTOCH,A6 RF(NE) DRQT10 SUK A5,8 LOCAL DEVICE ? =4 RB(N) EXIT CF A15,OUTLIN RB EXIT DRQT10 EQU * * IFT ACKMUL=1 * LD A5,CHTAB+2,A5 GET CWT-ADDRESS IM ACKTIM,A5 INCREMENT ACKUMULATOR * XIF * LD A7,DWTOR,A6 TEST ORDER ? =1 ANK A7,/FE U =9(=1) RB(E) CLT045 YES, GO TO DEV. INT. HANDLER =1 LDR* A1,A6 CHANNEL PARAMETER =12 RF(NN) DRQT20 DEVICE WITHOUT DATA REQUEST =12 LDK A4,1 SIMULATE LRC-ERROR =11 DRQT20 EQU * U =12 ABL CLT033 EXECUTE DEVICE RECOVERY =12(=1) 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 * CWK A6,1 SYNC BEFORE NAK? RB(E) EXIT YES 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 STR A6,A5 SET CHANEL BUSY ST A2,CWTLOW,A5 STORE LAST OUTPUT WORD LDR A7,A7 REMOTE? RF(N) CLT090 NO ANK A2,/FF XRS A2,LRCACK,A7 UPDATE LRC-ACKUMULATOR CF A15,RESTSY START OR RESTART SYNC-TIMER CLT090 ABL TDISP EJECT * * * DATA INPUT AND DATA REQUEST * * LOCAL DEVICES: GET DWT-ADDRESS, GET ORDER AND * ECB-ADDRESS AND GO TO DEVICE-DEPENDENT INTERRUPT * HANDLER. * * REMOTE DEVICES: * * DATA INPUT: SAME PROCEDURE AS FOR LOCAL DEVICES * DATA REQUEST: INPUT WORD IS COMPLEMENTED WITH * STATUS FROM CHANNEL PARAMETER. * STATUS MESSAGE: NEW STATUS IS STORED IN CHANNEL * PARAMETER. THEN WAIT-STATUS-INDICATOR * IS CHECKED TO SEE IF THE DEVICE IS * WAITING FOR A STATUS CHANGE. IF SO * GET ORDER AND ECB-ADDRESS AND GO TO * DEVICE WITH THE NEW STATUS. IF NO * WAITING FOR STATUS, CONTROL IS GIVEN * TO DISPATCHER. * * CLT100 EQU * LDR A3,A2 SRL A3,8 LDR A4,A3 ANK A3,/E 2 * LINE NUMBER SRL A4,3 ANK A4,/E 2 * DEVICE NUMBER CWK A4,/E SYNC-INPUT ? RF(E) CLT150 YES LOOP SWITCH SET LD* A8,CWTITA,A5 ADDRESS TO INTERRUPT TABLE RB(Z) EXIT =7 ADR A8,A3 LDR* A8,A8 ADDRESS TO TERMINAL SECTION RB(Z) EXIT NOT DEFINED LDR* A6,A8 GET ID-WORD SUR A6,A4 RB(N) 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 ANKL A6,/FFFE LCR A3,A6 GET FIRST BYTE IN CHANNEL PARAMETER ANK A3,1 DATA INPUT ? RF(NE) CLT110 YES LDR* A4,A6 GET CHANNEL PARAMETER RB(N) EXIT LDR A7,A7 REMOTE ? RF(NN) CLT120 YES CLT105 LC A3,DWTOCH,A6 ANK A3,/7F SUK A3,DUMMSP RF(NE) CLT110 LDR* A3,A6 DEVICE WITHOUT DATA REQUEST =9 RF(N) CLT110 YES, DO NOT TOUCH TIMER POINTER =9 * ************************* * CLT107 EQU * INH LD A7,DWTTP,A6 GET TIMER POINTER RF(E) CLT110 TIMER ALREADY RESET * ************************* * CM* DWTTP,A6 CM DWTTP,A6 CLT110 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 * CLT120 LDR A7,A2 REMOTE DATA REQUEST ? ANK A7,/FF RF(NE) CLT130 CWR* A6,A5 DRD BEFORE ANSWER ? ABL(E) EXIT YES =11 CLT125 SRL A4,4 ANK A4,/C ORR A2,A4 STATUS IN A2 RB CLT105 CLT130 EQU * LDR A3,A4 SAVE OLD STATUS ANK A4,/3F RESET OLD STATUS SLL A2,4 ANK A2,/C0 ORR A4,A2 SC A4,1,A6 STORE NEW STATUS IN DWT LD A4,DWTST,A6 GET STATUS WORD ANKL A4,/200 STATUS CHANGE ALLOWED ? RF(E) CLT154 EG. EXIT XRS A4,DWTST,A6 RESET BIT XRR A3,A2 VOUCHER STATUS CHANGED ? ANK A3,/80 RF(E) CLT154 EG. EXIT ABL CLT033 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 EJECT * * POWER ON * CLT179 EQU * LDK A3,/E3 ANS A3,CWTRST,A5 RESET LOOP TEST BIT RB CLT100 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 * U =13 LDR* A4,A5 GET LAST OUTPUT DWT CM CWTRTC,A5 RESET RETRANSMISSION COUNTER CMR A5 SET CHANNEL FREE QUESEC EQU * SECOND ENTRY IN SUBROUTINE =13 STR A2,A15 SAVE A2 ON STACK =13 LDK A1,0 LDR A7,A7 LOCAL ? RF(N) QUEU01 YES LDK A1,1 INDICATE FIRST TRIAL CWR A7,A5 REMOTE TERMINAL 2 ? RF(E) QUEU20 NO QUEU01 LDKL A8,CWTEQ QUEUE FIRST TERMINAL QUEU03 ADR A8,A5 ADD CWT-TABLE-ADDRESS QUEU04 EQU * LDR* A6,A8 QUEUE EMPTY ? RF(E) QUEU10 YES LDR A7,A7 =5 RF(N) QUEU06 PREVENT HANG UP =5 LD A2,CWTBLK,A5 LD A2,CWTBLK,A5 RF(N) QUEU05 BLOCK SENDING RUNNING QUEU06 EQU * =5 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 CWK A6,1 SYNC ANSWER ? RF(E) QUEU30 YES LDK A1,0 ABL RTNA15 QUEU10 LDR A1,A1 READY ? RB(E) QUEU05 LDK A1,0 CWR A7,A5 TERMINAL 2 REMOTE ? RB(E) QUEU01 NO QUEU20 LDKL A8,CWTEQ+2 NEXT QUEUE RB QUEU03 QUEU30 ADKL A15,4 RF EXITA 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 EX CWTOTR,A1 OUTPUT RF(A) SYNC04 ACCEPTED =13 RF(U) EXITA CF A15,RESTSY RESTART SYNC TIMER =13 RF EXITA U =13 SYNC04 EQU * U =13 STR A6,A1 STORE "1" AS LAST OUTPUT DWT * IFT LOGING=1 * CF A15,LOGG LOGG OF OUTPUT CHARACTER XIF * 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 RB CLT177 EJECT * * O U T P U T * * SEND ONE CHARACTER VIA 'OUTLIN' INDICATE INTERRUPTS * ALLOWED AND SAVE A3-A5 IN DWT. * OUTPUT EQU * ANK A2,/FF LDR A1,A2 SUK A1,/82 STX ? RF(E) OUTP05 SUK A1,/15 ETB ? RF(NE) OUTP10 OUTP05 LDR* A1,A6 CHANNEL PARAMETER ANK A1,/C REMOTE ? RF(E) LDRE10 NO OUTP10 CF A15,OUTLIN SEND ONE CHARACTER VIA CHANNEL UNIT EJECT * * S T R E G * * INDICATE INTERRUPTS ALLOWED AND SAVE A3-A5 IN DWT * STREG EQU * INH LDKL A1,/100 ORS A1,DWTST,A6 INDICATE INTERRUPTS ALLOWED ST A3,DWTA3,A6 SAVE REGISTER A3 ST A4,DWTA4,A6 A4 ST A5,DWTA5,A6 A5 RB EXITA EJECT * * L D R E G * * * IF INTERRUPT ALLOWED RESTORE A3-A5 FROM DWT AND RETURN * VIA A5. ELSE GO TO DISPATCHER. * * LDREG EQU * LD A3,DWTST,A6 ANKL A3,/100 RB(Z) EXITA XRS A3,DWTST,A6 * * * L D R E G E * * RESTORE S3-S5 FROM DWT AND RETURN TO USER VIA A5 LDREGF EQU * LD A5,DWTA5,A6 A5 LDREGE EQU * LD A3,DWTA3,A6 RELOAD REGISTER A3 LD A4,DWTA4,A6 A4 LDRE10 LD A7,DWTOR,A6 GET ORDER ANK A7,/FF LD A8,DWTECB,A6 RTN A5 RETURN VIA A5-STACK EJECT * * * G E T C H R * * SUBROUTINE TO GET ONE CHARACTER FROM ECB-BUFFER * * ON ENTRY: * * A3 = BUFFER INDEX * A8 = ECB-ADDRESS * * ON EXIT: * * A2 = CHARACTER * A1 = 0 IF LAST CHARACTER ELSE # 0 * * IF LAST CHARACTER IS REACHED A3 IS STORED IN ECB EFFECTIVE LENGTH * * GETCHR EQU * LD A1,4,A8 REQUESTED LENGTH SUR A1,A3 RF(NP) GCH010 LAST CHARACTER REACHED LD A2,2,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 ST A3,6,A8 STORE EFFECTIVE LENGTH GCH020 EQU * RTNA15 ADKL A15,2 RETURN AND ENABLE ENB LDR* P,A15 EJECT * * * 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 * ANK A2,/FF LDR* A7,A6 CHANNEL PARAMETER ANK A7,/F SLL A7,1 DOUBLE INDEX LD A5,CHTAB+2,A7 GET CWT-ADDRESS SUK A7,8 REMOTE ? RF(N) OUL100 NO LCR A3,A6 LEFT BYTE IN CHANNEL PARAMETER SRL A3,2 SECOND TERMINAL IN CHANNEL ? ANK A3,/2 LDR A7,A5 GET CWT-ADDRESS ADR A7,A3 TERMINAL ADJUSTED CWT-ADDRESS EJECT OUL100 INH * * IF UNIT NOT FREE QUEUE OUTPUT. * IF REMOTE DEVICE AND LRC-PROCESS ALREADY * RUNNINGON TERMINAL FOR ANOTHER DEVICE, * QUEUE THIS NEW OUTPUT IF LRC-CONTROL ON * IT IS WANTED. * ELSE SEND CHARACTER. * LDR* A3,A5 CHANNEL UNIT FREE ? RF(NE) OUL800 NO LDR A7,A7 REMOTE ? RF(N) OUL500 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,0 ST A6,LRCDWT,A7 SET LRC-DEVICE CM LRCACK,A7 RESET LRC-ACKUMULATOR AND INDICATE FIRST OBC OUL150 LDR* A3,A6 GET CHANNEL PARAMETER ANKL A3,/E00 SET DEVICE NUMBER TO ZERO RF OUL510 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 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 LDR* A3,A6 DEVICE WITH DATA REQUEST ? RF(NN) OUL500 DEVICE WITH DRD LD A3,CWTBLK,A5 RF(Z) OUL500 ORKL A2,/8000 INDICATE BLOCKSENDING LDK A3,/80 SC A3,CWTBLK,A5 INDICATE BLOCKSENDING RUNNING EJECT * * * SEND CHARACTER SECTION. * CHARACTER IS SENT,SYNC-TIMER UPDATED * LAST OUTPUT DWT AND LAST OUTPUT CHARACTER * IS SAVED. IF OLRC-CHAR LRC-POINTERS FOR * DWT AND ACKUMULATOR IS UPDATED. OUL500 EQU * LDR* A3,A6 CHANNEL PARAMETER ANKL A3,/7E00 OUL510 ORR A2,A3 OUTPUT WORD IN A2 * * * LDK A1,25 LOOP COUNTER FOR OTR =13 OUL515 EX CWTOTR,A5 OTR U =13 RF(A) OUL520 ACCEPTED RF(U) OUL518 UNKNOWN =13 SUK A1,1 MORE TRIES ? =13 RB(NZ) OUL515 YES =13 RF OUL800 QUEUE =13 OUL518 EQU * U =13 ADKL A15,20 RESET STACK LDK A1,1 LD A2,DWTADR,A6 ADDRESS TO ADDRESSBLOCK ABI INTADR,A2 GO TO INTERRUPT HANDLER =8 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 LDR A7,A7 REMOTE ? RF(N) OUL600 LDR A3,A2 GET OUTPUT WORD =13 ANKL A3,/F000 TEST DEVICE ADDRESS =13 RF(NZ) OUL540 DEVICEADDRESS NOT ZERO =13 LDR* A3,A6 GET CHANNEL PARAMETERS =13 RF(NN) OUL540 DEVICE WITH DATA REQUEST =13 LD A3,CWTBLK,A5 TEST BLOCK TRANSMISSION =13 RF(Z) OUL540 NO BLOCK TRANSMISSION ALLOWED =13 LDK A3,/80 SET UP BLK TRANSM. RUNNING =13 SC A3,CWTBLK,A5 U =13 OUL540 EQU * U =13 ANK A2,/FF XRS A2,LRCACK,A7 UPDATE LRC-ACKUMULATOR CF A15,RESTSY START OR RESTART SYNC-TIMER 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 U =9 ADKL A15,2 ...AND =9 LDR* P,A15 RETURN =9 XIF * EJECT * * NORMALLY DWT-ADDRESS IS PUT LAST IN OUTPUT QUEUE * OUL800 EQU * LDR A7,A7 REMOTE ? RF(NN) OUL805 YES LDR A7,A5 CWT-ADDRESS 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 LDK A4,0 OUL840 ST A4,DWTOTQ,A6 SET OR RESET OUTPUT QUEUE LINK RB OUL600 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 ABL RTNA15 CON020 EQU * INH LD A5,CHTAB,A4 LOAD CWT-ADDRESS RB(Z) CON010 CWK A4,/A LOCAL ? RF(L) CON030 YES 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 =6 LD* A1,CWTITA,A5 LDR A2,A4 ANK A2,2 SUR A1,A2 LD A2,2,A1 ANY DEVICE ON TERMINAL 1 RF(Z) CON028 NO,BLOCK SENDING ALLOWED LD A2,10,A1 ANY DEVICE ON SECOND TERMONAL RF(NZ) CON029 YES BLOCK SENDING NOT ALLOWED CON028 LDK A2,1 INDICATE BLOCK SENDING PERMITTED CONRET ST A2,CWTBLK,A5 RF CON035 CON029 LDK A2,0 RB CONRET INDICATE BLOCK SENDING NOT PREMITTED CON030 EQU * EX CWTCIS,A5 EXECUTE CIO-START CON035 EQU * LDR* A6,A5 GET LAST DWT RB(Z) CON010 CWK A6,1 SYNC ? RB(E) CON010 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 * * POINT DATA BUF LOGG POINTER * BUF RES 500 LOGG AREA BUFE EQU * * XIF * EJECT * * * E C H O , E C H E N D * * 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 * * RESTRICTIONS IN DEVICE DEPENDENT ECHO DRIVER * * A7 MUST NOT BE DESTROYED * THE ECHO-ROUTINE SHOULD BE TERMINATED WITH A * JUMP TO 'ECHRTN'. * ECHEND EQU * * IFT CECHO=1 * LDKL A7,/8000 INDICATE END I/O XIF ECHO EQU * IFT CECHO=1 ST A3,DWTA3,A6 SAVE A3-A5 IN DWT ST A4,DWTA4,A6 ST A5,DWTA5,A6 LD A1,DWTST,A6 STATUS SLL A1,2 RF(NN) RETUR NO ECHO REQUESTED 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 LD A1,DWTADR,A6 ADDRESS TO ADDRESS-BLOCK ABI ECHADR,A1 GO TO ECHO-ROUTINE DEVICE-DEPENDENT XIF ECHRTN EQU * IFT CECHO=1 LDR A7,A7 END? RF(NN) ERETUR NO CF A15,TENDIO END I/O OUTPUT DEVICE ERETUR LD A6,DWTWAT,A6 RELOAD DWT-ADDRESS OF INPUT DEVICE RETUR ABL LDREGF RELOAD A3-A5 AND RETURN VIA A5 END