|
|
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: 10956 (0x2acc)
Notes: pts_type(SC)
Names: »DRIC01.SC«
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
└─⟦this⟧ »TOSSWORK/DRIC01.SC«
IDENT DRIC01 REL 8.2 78-09-15 870105040820 ABORT INTERTASK WRITE BUG REL 8.1 78-04-21 * ******************************************** * * PHILIPS TERMINAL SYSTEM PTS * * DRIC01 = INTERTASK COMMUNICATION HANDLER * * * * * * ********************************************** * * THIS MODULE HANDLES THE INTERTASK COMMUNICATION * **************** * * ORDERS: * * /02 READ * /0B WRITE * /39 SET TIMEOUT * **************** * * ENTRY PARAMETERS * * A5 STACK BASE * A6 DWT-ADDRESS * A7 ORDER * A8 ECB-ADDRESS EJECT * * E N T R I E S * ENTRY ITADI ACTIVATION ADDRESS READ ENTRY ITADO ACTIVATION ADDRESS WRITE ENTRY ITABRT ABORT INTERTASK REQUEST * * E X T E R N A L S * EXTRN TDISP DISPATCHER EXTRN TENDIO ENDIO EXTRN DISIOE REQUEST ERROR EXTRN DWTECB ECB ADDRESS EXTRN DWTST DWT STATUS EXTRN SETIMP TIMER EXTRN FNDTID FIND TTAB ADDRESS FROM TID EXTRN TTB:TD EXTRN TTB:ST TTAB STATUS EXTRN DWTTAB DWT TTAB ADDRESS EXTRN DWTADR ACTIVATION ADDRESS EXTRN IHRTN RTN A15 WITHOUT ENABLING EXTRN ECBBA ECB BUFFER ADDRESS EXTRN ECBRL ECB REQUESTED LENGTH EXTRN ECBEL ECB EFF. LENGTH EXTRN ECBRC ECB RETURN CODE EXTRN ECBCW ECB CONTROL WORD * * C O N S T A N T S * DWTTP EQU /10 TIMER POINTER DWSTB EQU /18 STACK BASE USED DWSTB2 EQU /1E STACK BASE 2 (NOT USED) DWTIM EQU /12 TIME DWQACH EQU /14 QUEUE ANCHOR EJECT * * A C T I V A T I O N * ITADI DATA ICAD ITADO DATA ICAD ICAD EQU * SUK A7,2 RF(Z) READ READ ORDER SUK A7,9 RF(Z) WRITE WRITE ORDER SUK A7,/2E RF(NZ) DIS:OE REQUEST ERROR * * S E T T I M E O U T * LD A1,10,A8 TIME ST A1,DWTIM,A6 LDK A1,0 RETURN CODE RF END:IO EJECT * * W R I T E * WRITE EQU * * * FIND INPUT DWT OF ADDRESSED TASK * LD A7,ECBCW,A8 TID CF A15,FNDTID TTAB ADDRESS TO A2 LDR A2,A2 RF(Z) DIS:OE NOT FOUND CW A2,DWTTAB,A6 RF(E) DIS:OE ILLEGAL TID ADKL A2,TTB:TD ADDRESS TO TERMINAL DEVICE TABLE LDR* A1,A2 TABLE LENGTH LDKL A3,ITADI READ ACTIV. ADDRESS WRI:20 ADK A2,4 ADDRESS TO NEXT DWT ADDR SUK A1,4 RF(N) DIS:OE NOT FOUND LDR* A4,A2 DWT ADDRESS CW A3,DWTADR,A4 INPUT DWT? RB(NE) WRI:20 NO, TRY NEXT LDR A2,A4 LD A1,DWTST,A2 ANY READ REQUEST? RF(N) WRI:50 NO! * * ABORT INPUT TIMER IF ANY CF A15,ABTIM ABORT TIMER * * MOVE BUFFER SUK A5,DWSTB2-DWSTB CF A5,MOVBUF WRI:45 CF A15,TENDIO END WRITE LDR A6,A2 END:IO CF A15,TENDIO END READ T:DISP ABL TDISP * * NO READ REQUEST, QUEUE WRITE REQUEST * WRI:50 LDK A1,/40 RETURN CODE LD A3,DWTIM,A6 TIME RB(Z) END:IO CWK A3,/FFFF RF(E) WRI:70 NO TIMING WANTED LDR A3,A3 RF(N) DIS:OE NEG. TIME LDR A1,A6 DWTOUT=PARAMETER LDK A4,DWTTP ADR A4,A6 TIMER POINTER ST A3,TIME CF A15,SETIMP SET TIMER DATA TIMOWR TIMEOUT ADDRESS TIME DATA 0 * * INSERT IN INPUT QUEUE WITHIN PRIORITY * WRI:70 EQU * ST A2,DWQACH,A6 STORE QUEUE ANCHOR IN DWT LD A5,DWTTAB,A6 TTAB ADDRESS LC A1,TTB:ST+1,A5 LEVEL WRI:80 LDR A4,A2 SAVE LDR* A2,A2 NEXT IN QUEUE RF(Z) WRI:90 END FOUND LD A5,DWTTAB,A2 TTAB ADDRESS CC A1,TTB:ST+1,A5 COMPARE LEVELS RB(NL) WRI:80 WRI:90 STR A2,A6 INSERT IN QUEUE STR A6,A4 RB T:DISP * * DIS:OE ABL DISIOE REQUEST ERROR EJECT * * R E A D * READ EQU * LDR* A2,A6 ANYTHING IN QUEUE RF(Z) REA:40 NO! LDR* A3,A2 REMOVE FROM QUEUE STR A3,A6 CF A15,ABTIM ABORT TIMER IF ANY * * MOVE BUFFER * LDR A4,A6 EXCHANGE A2 AND A6 LDR A6,A2 LDR A2,A4 SUK A5,DWSTB2-DWSTB CF A5,MOVBUF RB WRI:45 REA:40 LDK A1,/40 RETURN CODE LD A3,DWTIM,A6 TIME RB(Z) END:IO CWK A3,/FFFF RF(E) REA:70 NO TIMER WANTED LDR A3,A3 RB(N) DIS:OE NEG. TIME LDK A4,DWTTP ADR A4,A6 ST A3,TIMER LDR A1,A6 PARAMETER=DWT ADDRESS CF A15,SETIMP SET TIMER DATA TIMORE TIMEOUT ADDRESS TIMER DATA 0 REA:70 EQU * RB T:DISP EJECT * * WRITE REQUEST TIMEOUT * TIMOWR LDR A6,A1 DWT OUT ADDRESS LD A1,DWQACH,A6 QUEUE ANCHOR (READ DWT ADDR) * * REMOVE FROM QUEUE * TWR:10 LDR A4,A1 SAVE LDR* A1,A1 NEXT IN QUEUE CWR A1,A6 THIS DWT? RB(NE) TWR:10 NO! LDR* A3,A1 STR A3,A4 REMOVE FROM QUEUE TWR:20 CM* 0,A2 RESET TIMER POINTER LDK A1,/40 RETURN CODE RB END:IO * * READ REQUEST TIMEOUT * TIMORE EQU * LDR A6,A1 DWT ADDRESS RB TWR:20 EJECT * * I T A B R T = ABORT INTERTASK REQUEST * * THIS SUBROUTINE IS CALLED FROM TABORT. * THE ROUTINE FINDS IF REQUEST TO BE ABORTED IS A * INTERTASK REQUEST, AND IF SO IT WILL UPDATE * QUEUE AND ABORT TIMER (IF ANY) * * ENTRY PARAMETER: A6 DWT ADDRESS * REG. A1,A2,A3,A4 ARE CHANGED * ITABRT EQU * LDKL A3,ITADI ACTIVATION ADDRESS READ CW A3,DWTADR,A6 INTERTASK REQ.? RF(NE) ITAB20 NO! LDR A2,A6 DWT ADDRESS CF A15,ABTIM ABORT TIMER RF IH:RTN ITAB20 LDKL A3,ITADO ACTIVATION ADDRESS WRITE CW A3,DWTADR,A6 RF(NE) IH:RTN NOT INTERTASK * * ABORT WRITE REQUEST * LDR A2,A6 CF A15,ABTIM ABORT TIMER LD A1,DWQACH,A6 GET QUEUE ACHHOR * * REMOVE FROM QUEUE * IWR:10 LDR A4,A1 SAVE LDR* A1,A1 NEXT IN QUEUE CWR A1,A6 THIS DWT? RB(NE) IWR:10 NO! LDR* A3,A1 REMOVE STR A3,A4 FROM QUEUE RF IH:RTN EJECT * * A B T I M = SUBROUTINE FOR ABORTING TIMER IF ANY * * ENTRY PARAMETER: A2 DWT ADDRESS * * REG. A1,A3 ARE CHANGED * ABTIM LDK A1,DWTTP ADR A1,A2 TIMER POINTER ADDRESS LDR* A3,A1 RF(Z) ABT:10 NO TIMER ACTIVE CM* 0,A1 CMR A1 INDICATE NO TIMER SET ABT:10 EQU * IH:RTN ABL IHRTN EJECT * * M O V B U F * * SUBROUTINE TO MOVE BUFFER FROM SENDING TASK * TO ADDRESSED TASK * EFFECTIVE LENGTH IN BOTH INPUT AND OUTPUT ECB ARE SET * A1 WILL CONTAIN RETURN CODE /8 IF SENDING REQ. LEN * WAS GREATER THAN RECEIVING REQ. LEN. * * INPUT PARAMETERS: * A2 RECEIVING DWT * A5 STACK POINTER * A6 SENDING DWT * * REGISTER USAGE: * A1 ECB ADDRESS RECEIVING TASK * A2 DWT RECEIVING TASK * A3 WORK. REG. * A4 BUFFER POINTER * A5 STACK POINTER * A6 DWT SENDING TASK * A7 RECEIVING BUFFER POINTER * A8 ECB ADDRESS SENDING TASK * A9 RETURN CODE * MOVBUF EQU * LD A8,DWTECB,A6 SENDING ECB ENB LDKL A9,0 LD A1,DWTECB,A2 RECEIVING ECB LD A3,ECBRL,A8 REQ. LEN SEND. RB(N) DIS:OE CW A3,ECBRL,A1 RF(NG) MOV:05 LDKL A9,/8 RETURN CODE LD A3,ECBRL,A1 RB(N) DIS:OE MOV:05 EQU * ST A3,ECBEL,A8 EFF. LEN ST A3,ECBEL,A1 EFF. LEN MOV:10 EQU * LD A4,ECBBA,A8 SENDING BUFFER ADDRESS LD A7,ECBBA,A1 REC.BUFFER ADDR. ADR A3,A4 END OF BUFFER MOV:15 EQU * CWR A4,A3 RF(E) MOV:20 ALL CHAR. MOVED LCR A1,A4 SCR A1,A7 ADK A4,1 ADK A7,1 RB MOV:15 MOV:20 LDR A1,A9 RETURN CODE INH RTN A5 END