|
|
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: 30088 (0x7588)
Notes: pts_type(SC)
Names: »DRSL01.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/DRSL01.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/DRSL01.SC«
IDENT DRSL01 REL 11.0 81-01-26 870105041100 NEW DEVICE DRIVER INTERFACE PRR 10.0 79-12-07 =6, RTN FROM OUTSAL IN INH MODE PRR 10.1 79-11-20 =5, CHECK IF PFINIT PENDING; TIMER FOR INPUT NOT OPERABLE; NO SOFTWARE PARITY GENERATION PRR 10.1 79-11-09 =4, CHECK QUEUE AFTER SYNC SENDING PRR 10.1 79-10-16 =3, CORR. WHEN NOT OPER. MOVE OF STATUS BIT PRR 10.1 79-10-08 =2, IMPROV. OF REMOTE SENDING PRR 10.1 79-10-03 =1, CHECK IF OUTPUT CHAR.= ETX; CHANGE TO EVEN PARITY PRR 10.1 79-09-21 * * ********************************************************************* * * PHILIPS TERMINAL SYSTEM PTS * * DRSL01 = DRIVER CHANNEL UNIT * * SALCUZ * * * * * ********************************************************************** * * THIS IS A CHANNEL UNIT DRIVER FOR TERMINALS * CONNECTED TO CPU VIA SALCUZ. * TERMINALS MAY BE LOCAL OR REMOTE. * * AT INPUT INTERRUPT A CHARACTER IS READ TO REGISTER A2 * AND A BRANCH IS MADE TO INTERRUPT HANDLER FOR ACTUAL * DEVICE. * * AFTER AN OUTPUT IS ENDED AN OUTPUT INTERRUPT IS * GENERATED FROM SALCUZ. THE DRIVER CHECKS THE INTERRUPT * AND A BRANCH IS MADE TO INTERRUPT HANDLER. * * EJECT * * THE DRIVER ALSO INCLUDES THE FOLLOWING SUBROUTINES: * * -SLCUON EXECUTE CIO START ON EVERY SALCUZ AT POWER ON * * -OUTSAL SEND ONE CHARACTER * * CONTROL WORK TABLES ARE INCLUDED IN THE DRIVER * * NORMAL REGISTER USAGE IN THE DRIVER: * * A1 = RETURN CODE * A2 = INPUT CHARACTER * A3 = WORK REGISTER * A4 = DEVICE NUMBER * 2 * A5 = CWT-ADDRESS * A6 = DWT-ADDRESS * A7 = ORDER * A8 = ECB ADDRESS * * * EJECT * *********** * ENTRIES * *********** * * ENTRY ISLCI INPUT INTERRUPTS FROM SALCUZ ENTRY ISLCO OUTPUT INTERRUPTS FROM SALCUZ ENTRY SLCUON START AT POWER ON ENTRY CHAN NUMBER OF CHANNEL UNITS * ENTRY SLCHRI CHARACTER INPUT ENTRY SLSTBL DEFINE START OF OUTPUT BLOCK ENTRY SLCHRO CHARACTER OUTPUT ENTRY SLENBL DEFINE END OF OUTPUT BLOCK ENTRY SLDISP LOCAL DISPATCHER * EJECT * * ******************************** * EXTERNAL TOSS MODULE ENTRIES * ******************************** * EXTRN TDISP DISPATCHER EXTRN INTSAV SAVE AREA LAST INTERRUPT EXTRN SETIMP SET TIMER ROUTINE =2 EXTRN PFPOST PWF POST PROCESSING FLAG =5 * EXTRN INTSL1 WS TABLE ADDRESS SALCUZ 1 EXTRN INTSL2 WS TABLE ADDRESS SALCUZ 2 EXTRN INTSL3 WS TABLE ADDRESS SALCUZ 3 EXTRN INTSL4 WS TABLE ADDRESS SALCUZ 4 EXTRN INTSL5 WS TABLE ADDRESS SALCUZ 5 EXTRN INTSL6 WS TABLE ADDRESS SALCUZ 6 EXTRN INTSL7 WS TABLE ADDRESS SALCUZ 7 EXTRN INTSL8 WS TABLE ADDRESS SALCUZ 8 * EXTRN NDSAV8 SAVE A3-A5, A7-A8 IN DWT EXTRN NDGEDN GET HIGHEST DWT NUMBER ON WS EXTRN NDGEDW GET DWT-ADDRESS EXTRN NDREWS CALL RECOVERY FOR ALL DEV ON WS EXTRN NDRETO OK & RETURN EXTRN NDREP POP & RETURN * EJECT * ****************** * DWT PARAMETERS * ****************** * * EXTRN DWTST STATUS EXTRN DWTOR ORDER EXTRN DWTOCH LAST OUTPUT CHARACTER EXTRN DWTECB ECB-ADDRESS EXTRN DWTADR ADDRESS TO ADDRESSBLOCK EXTRN DWTOTQ OUTPUT QUEUE LINK EXTRN DWTSB2 STACK BASE 2 EXTRN DWTCP2 CHANNEL PARAMETERS 2 * EXTRN INTADR INTERRUPT ADDRESS DISPLACEMENT EXTRN RECADR RECOVERY ADDRESS DISPLACEMENT * EJECT * * ************* * CONSTANTS * ************* * * KB EQU 1 DEVICE ADDRESS FOR KEYBOARD DI EQU 2 DEVICE ADDRESS FOR KEYBOARD LAMPS TIME EQU 5 TIME BEFORE TIME-OUT FOR SYNC =2 INPTIM EQU 10 INPUT NOT OP. TIMER VALUE =5 * EJECT * ************************ * CONDITIONAL ASSEMBLY * ************************ * * A LOGG FUNCTION OF EVERY INPUT AND OUTPUT CHARACTER * AND STATUS MAY BE INCLUDED TO THE DRIVER BY SETTING X:A=1 * X:A EQU 1 LOGING EQU X:A * * THIS DRIVER HANDLES ONE OR UP TO EIGHT * CHANNELS BY SETTING X:B TO 1, 2, 3,..., 8 * X:B EQU 1 CHAN EQU X:B * EJECT * ******************* * C W T S A 1 * ******************* * * CONTROL WORK TABLE FOR SALCUZ 1 * CUAD1 EQU /1A CONTROL UNIT ADDRESS * CWTSA1 EQU * TABLE ENTRY CWTLDW EQU *-CWTSA1 DATA 0 LAST OUTPUT DWT CWTITA EQU *-CWTSA1 DATA INTSL1 WORK STATION ADDRESS CWTINR EQU *-CWTSA1 INR A2,0,CUAD1 INR CWTOTR EQU *-CWTSA1 OTR A2,0,CUAD1+1 OTR CWTCIS EQU *-CWTSA1 CIO A1,1,CUAD1+1 CIO START OUTPUT CWTTP EQU *-CWTSA1 * =2 DATA 0 TIMER POINTER =2 CWTEQ EQU *-CWTSA1 DATA 0 QUEUE CWTCIH EQU *-CWTSA1 CIO A1,0,CUAD1+1 CIO HALT OUTPUT CWTSST EQU *-CWTSA1 SST A2,CUAD1+1 SEND STATUS OUTPUT CWTST EQU *-CWTSA1 DATA 0 CHANNEL STATUS CWTCSI EQU *-CWTSA1 CIO A1,1,CUAD1 CIO START INPUT CWTSSI EQU *-CWTSA1 SST A2,CUAD1 SEND STATUS INPUT CWTTP2 EQU *-CWTSA1 * =5 DATA 0 TIMER POINTER FOR INP. NOT OP. =5 EJECT * * ******************* * C W T S A 2 * ******************* * * CONTROL WORK TABLE FOR SALCUZ 2 * CWTSA2 EQU * TABLE ENTRY * IFF CHAN=1 * CUAD2 EQU /2A CONTROL UNIT ADDRESS * DATA 0 LAST OUTPUT DWT DATA INTSL2 WORK STATION ADDRESS INR A2,0,CUAD2 INR OTR A2,0,CUAD2+1 OTR CIO A1,1,CUAD2+1 CIO START OUTPUT DATA 0 TIMER POINTER =2 DATA 0 QUEUE CIO A1,0,CUAD2+1 CIO HALT OUTPUT SST A2,CUAD2+1 SEND STATUS OUTPUT DATA 0 CHANNEL STATUS CIO A1,1,CUAD2 CIO START INPUT SST A2,CUAD2 SEND STATUS INPUT DATA 0 TIMER POINTER FOR INP. NOT OP. =5 * XIF EJECT * * ******************* * C W T S A 3 * ******************* * * CONTROL WORK TABLE FOR SALCUZ 3 * CWTSA3 EQU * TABLE ENTRY * IFF CHAN=1 IFF CHAN=2 * CUAD3 EQU /2C CONTROL UNIT ADDRESS * DATA 0 LAST OUTPUT DWT DATA INTSL3 WORK STATION ADDRESS INR A2,0,CUAD3 INR OTR A2,0,CUAD3+1 OTR CIO A1,1,CUAD3+1 CIO START OUTPUT DATA 0 TIMER POINTER =2 DATA 0 QUEUE CIO A1,0,CUAD3+1 CIO HALT OUTPUT SST A2,CUAD3+1 SEND STATUS OUTPUT DATA 0 CHANNEL STATUS CIO A1,1,CUAD3 CIO START INPUT SST A2,CUAD3 SEND STATUS INPUT DATA 0 TIMER POINTER FOR INP. NOT OP. =5 * XIF EJECT * * ******************* * C W T S A 4 * ******************* * * CONTROL WORK TABLE FOR SALCUZ 4 * CWTSA4 EQU * TABLE ENTRY * IFF CHAN=1 IFF CHAN=2 IFF CHAN=3 * CUAD4 EQU /3A CONTROL UNIT ADDRESS * DATA 0 LAST OUTPUT DWT DATA INTSL4 WORK STATION ADDRESS INR A2,0,CUAD4 INR OTR A2,0,CUAD4+1 OTR CIO A1,1,CUAD4+1 CIO START OUTPUT DATA 0 TIMER POINTER =2 DATA 0 QUEUE CIO A1,0,CUAD4+1 CIO HALT OUTPUT SST A2,CUAD4+1 SEND STATUS OUTPUT DATA 0 CHANNEL STATUS CIO A1,1,CUAD4 CIO START INPUT SST A2,CUAD4 SEND STATUS INPUT DATA 0 TIMER POINTER FOR INP. NOT OP. =5 * XIF EJECT * * ******************* * C W T S A 5 * ******************* * * CONTROL WORK TABLE FOR SALCUZ 5 * CWTSA5 EQU * TABLE ENTRY * IFF CHAN=1 IFF CHAN=2 IFF CHAN=3 IFF CHAN=4 * CUAD5 EQU NOTDEF CONTROL UNIT ADDRESS * ONLY DEFINED FOR FOUR SALCUZ CARDS ********** * DATA 0 LAST OUTPUT DWT DATA INTSL5 WORK STATION ADDRESS INR A2,0,CUAD5 INR OTR A2,0,CUAD5+1 OTR CIO A1,1,CUAD5+1 CIO START OUTPUT DATA 0 TIMER POINTER =2 DATA 0 QUEUE CIO A1,0,CUAD5+1 CIO HALT OUTPUT SST A2,CUAD5+1 SEND STATUS OUTPUT DATA 0 CHANNEL STATUS CIO A1,1,CUAD5 CIO START INPUT SST A2,CUAD5 SEND STATUS INPUT DATA 0 TIMER POINTER FOR INP. NOT OP. =5 * XIF EJECT * * ******************* * C W T S A 6 * ******************* * * CONTROL WORK TABLE FOR SALCUZ 6 * CWTSA6 EQU * TABLE ENTRY * IFF CHAN=1 IFF CHAN=2 IFF CHAN=3 IFF CHAN=4 IFF CHAN=5 * CUAD6 EQU NOTDEF CONTROL UNIT ADDRESS * ONLY DEFINED FOR FOUR SALCUZ CARDS ********** * DATA 0 LAST OUTPUT DWT DATA INTSL6 WORK STATION ADDRESS INR A2,0,CUAD6 INR OTR A2,0,CUAD6+1 OTR CIO A1,1,CUAD6+1 CIO START OUTPUT DATA 0 TIMER POINTER =2 DATA 0 QUEUE CIO A1,0,CUAD6+1 CIO HALT OUTPUT SST A2,CUAD6+1 SEND STATUS OUTPUT DATA 0 CHANNEL STATUS CIO A1,1,CUAD6 CIO START INPUT SST A2,CUAD6 SEND STATUS INPUT DATA 0 TIMER POINTER FOR INP. NOT OP. =5 * XIF EJECT * * ******************* * C W T S A 7 * ******************* * * CONTROL WORK TABLE FOR SALCUZ 7 * CWTSA7 EQU * TABLE ENTRY * IFF CHAN=1 IFF CHAN=2 IFF CHAN=3 IFF CHAN=4 IFF CHAN=5 IFF CHAN=6 * CUAD7 EQU NOTDEF CONTROL UNIT ADDRESS * ONLY DEFINED FOR FOUR SALCUZ CARDS ********** * DATA 0 LAST OUTPUT DWT DATA INTSL7 WORK STATION ADDRESS INR A2,0,CUAD7 INR OTR A2,0,CUAD7+1 OTR CIO A1,1,CUAD7+1 CIO START OUTPUT DATA 0 TIMER POINTER =2 DATA 0 QUEUE CIO A1,0,CUAD7+1 CIO HALT OUTPUT SST A2,CUAD7+1 SEND STATUS OUTPUT DATA 0 CHANNEL STATUS CIO A1,1,CUAD7 CIO START INPUT SST A2,CUAD7 SEND STATUS INPUT DATA 0 TIMER POINTER FOR INP. NOT OP. =5 * XIF EJECT * * ******************* * C W T S A 8 * ******************* * * CONTROL WORK TABLE FOR SALCUZ 8 * CWTSA8 EQU * TABLE ENTRY * IFF CHAN=1 IFF CHAN=2 IFF CHAN=3 IFF CHAN=4 IFF CHAN=5 IFF CHAN=6 IFF CHAN=7 * CUAD8 EQU NOTDEF CONTROL UNIT ADDRESS * ONLY DEFINED FOR FOUR SALCUZ CARDS ********** * DATA 0 LAST OUTPUT DWT DATA INTSL8 WORK STATION ADDRESS INR A2,0,CUAD8 INR OTR A2,0,CUAD8+1 OTR CIO A1,1,CUAD8+1 CIO START OUTPUT DATA 0 TIMER POINTER =2 DATA 0 QUEUE CIO A1,0,CUAD8+1 CIO HALT OUTPUT SST A2,CUAD8+1 SEND STATUS OUTPUT DATA 0 CHANNEL STATUS CIO A1,1,CUAD8 CIO START INPUT SST A2,CUAD8 SEND STATUS INPUT DATA 0 TIMER POINTER FOR INP. NOT OP. =5 * XIF EJECT * * ***************** * C H T A B * ***************** * * THIS TABLE HOLDS ADDRESSES OF CONTROL WORK * TABLES CWT TO CHANNEL UNITS. * * CHTAB EQU * DATA CHTABE-* TABLE LENGTH DATA CWTSA1 IFF CHAN=1 DATA CWTSA2 XIF IFF CHAN=1 IFF CHAN=2 DATA CWTSA3 XIF IFF CHAN=1 IFF CHAN=2 IFF CHAN=3 DATA CWTSA4 XIF IFF CHAN=1 IFF CHAN=2 IFF CHAN=3 IFF CHAN=4 DATA CWTSA5 XIF IFF CHAN=1 IFF CHAN=2 IFF CHAN=3 IFF CHAN=4 IFF CHAN=5 DATA CWTSA6 XIF IFF CHAN=1 IFF CHAN=2 IFF CHAN=3 IFF CHAN=4 IFF CHAN=5 IFF CHAN=6 DATA CWTSA7 XIF IFF CHAN=1 IFF CHAN=2 IFF CHAN=3 IFF CHAN=4 IFF CHAN=5 IFF CHAN=6 IFF CHAN=7 DATA CWTSA8 XIF CHTABE EQU * END OF TABLE * * EJECT * * * S L C U O N * * SUBROUTINE TO RESET CWT AND PERFORM CIO START * OF EVERY SALCUZ INPUT CHANNEL AT SYSTEM LOAD * * * SLCUON EQU * LD A4,CHTAB TABLE LENGTH SON010 SUK A4,2 ALL TREATED? ABL(Z) RTNA15 YES SON020 EQU * LD A5,CHTAB,A4 LOAD CWT-ADDRESS RB(Z) SON010 LDKL A1,/8000 ORS A1,CWTST,A5 SET INITIATION BIT CMR A5 RESET LAST OUTPUT =2 CM CWTEQ,A5 RESET OUTPUT QUEUE =5 INH LDK A1,/4 EVEN PARITY =1 EX CWTCIS,A5 CIO START OUTPUT EX CWTCSI,A5 EXECUTE CIO-START INPUT LDK A1,0 EX CWTCIH,A5 CIO STOP OUTPUT ENB RB SON010 EJECT * * ******************************************** * INTERRUPT ENTRY FROM SALCUZ INPUTS * ******************************************** * * * I S L C I * * INPUT INTERRUPT FROM SALCUZ * ISLCI EQU * ST P,INTSAV SAVE LAST INTERRUPT MSR 8,A15 SAVE A1-A8 ON STACK LDK A4,0 RESET SALCUZ-COUNTER LD A3,CHTAB SUK A3,2 NUMBER OF LINES RF IIS015 * * GET CWT-ADDRESS. EXECUTE INR. * IIS010 EQU * ADK A4,2 NEXT SALCUZ IIS015 EQU * CWR A4,A3 ABL(NL) EXIT NOT VALID INTERRUPT LD A5,CHTAB+2,A4 GET CWT-ADDRESS EX CWTINR,A5 INR RF(NA) IIS060 * EJECT * * GET DWT-ADDRESS FROM INTSL * IIS020 EQU * LD* A1,CWTITA,A5 ADDRESS OF WORK STATION TABLE LDK A6,0 WORK STATION NUMBER CF A15,NDGEDN GET HIGHEST DWT-NUMBER ADK A7,1 PREPARE FOR SUK IIS025 EQU * SUK A7,1 NEXT DWT RF(N) EXITL EXIT IF ALL CHECKED CF A15,NDGEDW GET DWT-ADDRESS LDR A6,A6 RB(Z) IIS025 DWT-ADDRESS NOT DEFINED LD A3,DWTST,A6 DEVICE STATUS ANK A3,/40 INPUT DEVICE? RF(NZ) IIS055 YES LDK A6,0 WORK STATION NUMBER RB IIS025 * EXITL EQU * IFT LOGING=1 SLL A4,8 LINE NR FOR LOGG ORR A2,A4 CF A15,LOGG ** LOGG OF INPUT CHARACTER ** XIF * RF EXIT * EJECT * * RETURN TO DEVICE DRIVER * IIS055 EQU * LDK A1,0 RESET RETURN CODE * IFT LOGING=1 CF A15,INFLOG GET LINE INFORMATION CF A15,LOGG ** LOGG OF INPUT CHARACTER ** XIF * IIS058 EQU * * =2 ANK A2,/FF CLEAN CHARACTER LD A7,DWTST,A6 DEVICE STATUS ANK A7,/20 INPUT REQUESTED? RF(Z) IIS059 NO * LDKL A7,/FFDF ANS A7,DWTST,A6 RESET FLAG 'INPUT REQUESTED' ABL NDREP RETURN TO DEVICE DRIVER * EJECT * * GO TO INTERRUPT ROUTINE OF DEVICE DRIVER * IIS059 EQU * LD A1,DWTADR,A6 ADDRESS BLOCK LD A1,INTADR,A1 INTERRUPT ENTRY DEFINED? RF(Z) EXIT NO, SKIP CHARACTER LDR A5,A6 DWT ADDRESS ADKL A5,DWTSB2 STACK BASE ABR A1 DEVICE DRIVER INTERRUPT ENTRY * EJECT * * EXECUTE SST INPUT * IIS060 EQU * EX CWTSSI,A5 SEND STATUS INPUT RB(NA) IIS010 CHECK NEXT SALCUZ ANK A2,1 STATUS =5 RF(NZ) IIS070 NOT OPERABLE =5 IIS065 EQU * * =5 LDK A1,/4 EVEN PARITY =1 EX CWTCSI,A5 CIO START INPUT =2 RF EXIT * =2 * * START TIMER IF INPUT NOT OPERABLE * IIS070 EQU * * =5 LDR A1,A5 SAVE CWT-ADDRESS AS PARAMETER =5 LDK A4,CWTTP2 * =5 ADR A4,A5 TIMER POINTER ADDRESS =5 CF A15,SETIMP START TIMER =5 DATA IIS080,INPTIM TIME-OUT ADDRESS AND VALUE =5 RF EXIT * =5 * * TIME-OUT ROUTINE FOR INPUT NOT OPERABLE * IIS080 EQU * * =5 LDR A5,A1 CWT-ADDRESS =5 CM CWTTP2,A5 RESET TIMER POINTER =5 RB IIS065 START INPUT =5 * EJECT * * ********************************************* * INTERRUPT ENTRY FROM SALCUZ OUTPUTS * ********************************************* * * * I S L C O * * OUTPUT INTERRUPT FROM SALCUZ * ISLCO EQU * ST P,INTSAV SAVE LAST INTERRUPT MSR 8,A15 SAVE A1-A8 ON STACK LDK A7,0 RESET SALCUZ-COUNTER LD A3,CHTAB SUK A3,2 NUMBER OF LINES RF OIS015 * EJECT * * GET CWT-ADDRESS. EXECUTE SST. * OIS010 EQU * ADK A7,2 NEXT SALCUZ OIS015 EQU * CWR A7,A3 RF(NL) EXIT NOT VALID INTERRUPT LD A5,CHTAB+2,A7 GET CWT-ADDRESS EX CWTSST,A5 SST RB(NA) OIS010 * IFT LOGING=1 LDR* A4,A5 LAST OUTPUT DWT CWK A4,DWTSYN SYNC-SENDING? RF(E) OIS017 YES SLL A7,8 LINE NR FOR LOGG =2 ORR A2,A7 * =2 CF A15,LOGG **LOGG STATUS** XIF * OIS017 EQU * LD A1,CWTST,A5 CHANNEL STATUS RF(N) OIS040 INITIATION ON CHANNEL =2 EJECT * * CHECK QUEUE AND SEND IF SOMETHING THERE * OIS020 EQU * LDR* A7,A5 LAST OUTPUT DWT CMR A5 SET CHANNEL FREE =3 =3 ANK A2,/FF CLEAN LC A4,CWTST,A5 CHANNEL STATUS LDR A1,A2 SET RETURN CODE =2 RF(NZ) OIS035 NOT OPERABLE =2 LD A3,CWTST,A5 CHANNEL STATUS =2 SLL A3,1 * =2 RF(N) OIS038 NOT OPERABLE BIT SET =2 * =4 * =4 LD A6,CWTEQ,A5 OUTPUT QUEUE RF(E) OIS030 QUEUE EMPTY =5 LD A2,DWTOTQ,A6 GET QUEUE LINK ST A2,CWTEQ,A5 STORE IT IN CWT LC A2,DWTOCH,A6 GET CHARACTER CF A15,OUTSAL SEND CHARACTER =5 EJECT * * RETURN TO DEVICE DRIVER * OIS030 EQU * CWK A7,DWTSYN SYNC-DWT? =4 RF(E) EXIT YES =4 ANK A4,/04 LAMP CODE QUEUED ? RF(NZ) EXIT YES, DON'T RETURN YET LDK A2,0 STATUS LDR A6,A7 GET LAST OUTPUT ABL(NZ) NDREP RETURN TO DEVICE DRIVER * EXIT EQU * ABL TDISP * * OUTPUT NOT OPERABLE * OIS035 EQU * * =2 CWK A7,DWTSYN SYNC-DWT? =2 RB(E) EXIT YES =2 LDKL A3,/4000 * =2 ORS A3,CWTST,A5 SET BIT 'NOT OPERABLE' =2 RB OIS030 * =2 * * OUTPUT OPERABLE AGAIN * OIS038 EQU * * =2 LDKL A3,/BFFF * =2 ANS A3,CWTST,A5 RESET BIT 'NOT OPERABLE' =2 EJECT * * RECOVERY ROUTINES ARE STARTED FOR EVERY DEVICE * ON ACTUAL LINE EXCEPT THOSE IN ECHO MODE * OIS040 EQU * LDKL A1,/7FFF ANS A1,CWTST,A5 RESET INITIATION BIT LD* A3,CWTITA,A5 ADDRESS OF WS TABLE LDK A6,0 WORK STATION NUMBER LDK A4,1 RECOVERY CAUSE CF A15,NDREWS CALL RECOVERY FOR ALL DEVICES ON WORK STATION RB EXIT EJECT * * O U T S A L * * SUBROUTINE TO SEND A CHARACTER VIA SALCUZ * ON ENTRY: * A2 = OUTPUT CHARACTER IN RIGHT BYTE * A6 = DWT ADDRESS * OUTSAL EQU * MSR 8,A15 SAVE A1-A8 ON STACK ANK A2,/FF INH CWK A6,DWTSYN SYNC SENDING? RF(E) OUS050 YES LDR* A1,A6 CHANNEL PARAMETERS ANK A1,/F CHANNEL UNIT INDEX SLL A1,1 MAKE INDEX FOR CHTAB LD A5,CHTAB+2,A1 GET CWT-ADDRESS * =6 LDR* A4,A5 CHANNEL UNIT FREE? RF(E) OUS050 YES EJECT * * QUEUE OUTPUT * OUS005 EQU * LD A4,CWTEQ,A5 OUTPUT QUEUE RF(E) OUS020 OUS010 EQU * CWR A6,A4 RF(E) OUS060 THIS DWT IS ALREADY IN QUEUE LD A3,DWTOTQ,A4 RF(E) OUS030 END OF THREAD FOUND LDR A4,A3 FOLLOW THE THREAD RB OUS010 OUS020 EQU * ST A6,CWTEQ,A5 QUEUE DWT RF OUS040 OUS030 EQU * ST A6,DWTOTQ,A4 QUEUE DWT OUS040 CM DWTOTQ,A6 SET END OF THREAD RF OUS060 EJECT * * START OUTPUT * OUS050 EQU * LD A1,PFPOST PWF POST PROCESSING FLAG =5 RF(NZ) OUS070 PFINIT PENDING =5 LDK A1,/4 EVEN PARITY =1 EX CWTCIS,A5 CIO START OUTPUT RF(NA) OUS070 * * SYNC TIMING * LD A3,CWTTP,A5 ADDRESS TO TIMER BLOCK =2 RF(Z) STTIM * =2 * * RESTART TIMER * LDKL A3,-TIME RESTART TIMER =2 ST* A3,CWTTP,A5 * =2 RF OUS052 * =5(=2) * * START TIMER * STTIM EQU * * =2 LDR A1,A5 SAVE CWT-ADDRESS AS PARAMETER =2 LDK A4,CWTTP * =2 ADR A4,A5 TIMER POINTER ADDRESS =2 CF A15,SETIMP START TIMER OF 0.5 S =2 DATA T:OUT,TIME TIME-OUT ADDRESS AND VALUE =2 EJECT * * CHECK IF OUTPUT TO KEYBOARD LAMPS * OUS052 EQU * * =5 LD A7,DWTCP2,A6 CHANNEL PARAMETERS 2 ANK A7,/3F DEVICE ADDRESS SUK A7,DI OUTPUT TO KEYBOARD LAMPS? RF(Z) OUS080 YES, QUEUE LAMP CODE EJECT * * SEND CHARACTER * OUS053 EX CWTOTR,A5 OTR =3 RF(A) OUS055 * =3 CWK A6,DWTSYN SYNC-SENDING? =3 RF(NE) OUS054 NO =3 STR A6,A5 STORE SYNC-DWT IN CWT =3 RF OUS070 * =3 OUS054 LD A1,CWTST,A5 CHANNEL STATUS =3 SLL A3,1 * =3 RF(N) OUS070 NOT OPERABLE BIT SET =3 RB OUS005 * =3 OUS055 EQU * LDK A1,0 EX CWTCIH,A5 CIO STOP OUTPUT STR A6,A5 STORE LAST DWT IN CWT CWK A6,DWTSYN SYNC-DWT? =2 RF(E) OUS070 YES =2 * IFT LOGING=1 CF A15,INFLOG GET LINE INFORMATION CF A15,LOGG **LOGG OF OUTPUT CHARACTER** XIF * LDR A7,A7 OUTPUT TO KEYBOARD LAMPS? RF(Z) OUS070 YES OUS060 SC A2,DWTOCH,A6 STORE OUTPUT CHARACTER IN DWT OUS070 EQU * MLR 8,A15 RESTORE A1-A8 FROM STACK * =6 INH * =6 ADKL A15,2 ADJUST STACK POINTER =6 LDR* P,A15 RETURN =6 EJECT * * PUT LAMPCODE FIRST IN QUEUE AND * LOAD /1C IN OUTPUT REGISTER * /1C = CODE FOR DATA TO KEYBOARD * OUS080 EQU * LC A4,CWTST,A5 LEFT BYTE OF CWT STATUS =3 LDKL A1,/FBFF ANS A1,CWTST,A5 RESET BIT 'LAMP CODE QUEUED' =3 ANK A4,/04 RB(NZ) OUS053 LAMP CODE ALREADY IN QUEUE LD A4,CWTEQ,A5 OUTPUT QUEUE RF(E) OUS090 CWR A6,A4 RB(E) OUS060 THIS DWT ALREADY IN QUEUE OUS090 EQU * ST A4,DWTOTQ,A6 MOVE QUEUE LINK ST A6,CWTEQ,A5 QUEUE LAMP CODE SC A2,DWTOCH,A6 STORE LAMP CODE IN DWT C1R A1,A1 ORS A1,CWTST,A5 SET BIT 'LAMP CODE QUEUED' =3 LDK A2,/1C RB OUS053 * EJECT * * TIME-OUT ROUTINE FOR SYNC-SENDING. * IF NOTHING HAPPENS ON A LINE IN 500 MS * SYNC-CHARACTER IS SENT. * * T:OUT EQU * * =2 LDR A5,A1 * =2 CM CWTTP,A5 RESET TIMER POINTER =2 LDR* A6,A5 LINE FREE? =2 RF(NZ) T:OUT2 NO =2 LDKL A6,DWTSYN SIMULATED DWT-ADDRESS =2 LDK A2,0 OUTPUT CHARACTER =2 CF A15,OUTSAL SEND '00' =2 T:OUT2 EQU * * =2 ABL TDISP * =2 * DWTSYN DATA /200 CHANNEL PARAMETER =2 EJECT * * CHARACTER INPUT * SLCHRI EQU * LDK A2,/20 ORS A2,DWTST,A6 SET INPUT REQUESTED IN DWT CF A15,NDSAV8 SAVE A3-A5, A7-A8 IN DWT RF SLDISP LOCAL DISPATCHER * * START OF A BLOCK * SLSTBL EQU * * * END OF A BLOCK * SLENBL EQU * ABL NDRETO RETURN TO DEVICE DRIVER * * CHARACTER OUTPUT * SLCHRO EQU * CF A15,NDSAV8 SAVE A3-A5, A7-A8 IN DWT CF A15,OUTSAL SEND CHARACTER * * LOCAL DISPATCHER * SLDISP EQU * ABL TDISP GO TO DISPATCHER * EJECT * * I N F L O G * * SUBROUTINE TO GET INFORMATION ABOUT CHANNEL UNIT INDEX * AND DEVICE ADDRESS FOR USE IN LOGG. * THE INFORMATION IS TAKEN FROM CHANNEL PARAMETERS AND * ADDED TO REGISTER A2. * * DEVICE ADDRESS IS STORED IN BITS 0-3 * CH. UNIT INDEX IS STORED IN BITS 4-6 * * ON ENTRY: * * A2 = INPUT CHARACTER * A6 = DWT ADDRESS * * ON EXIT: * * A2 = INPUT WORD WITH ADDED INFORMATION * A3,A4 ARE DESTROYED * IFT LOGING=1 * INFLOG EQU * LDR* A3,A6 GET CHANNEL PARAMETERS ANK A3,/7 CHANNEL UNIT INDEX LD A4,DWTCP2,A6 CHANNEL PARAMETERS 2 ANK A4,/7 DEVICE ADDRESS SLL A4,3 ORR A3,A4 COMBINE DEV.ADDR. AND CH. UNIT INDEX SLL A3,9 ORR A2,A3 COMBINE INFORMATION WITH CHARACTER RTN A15 * XIF 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 INSTRUCTION LDR* A1,A15 ADKL A15,2 LDR* P,A15 RETURN * * POINT DATA BUF LOGG POINTER * BUF RES 250 LOGG AREA BUFE EQU * * XIF EJECT * * RETURN AND ENABLE * RTNA15 EQU * ADKL A15,2 ENB LDR* P,A15 * END