|
|
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: 48898 (0xbf02)
Notes: pts_type(SC)
Names: »DRDC07.SC«
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
└─⟦this⟧ »TOSSWORK/DRDC07.SC«
IDENT DRDC07 REL 8.2 78-09-15 870103240912 * ********************************************* * * PHILIPS TERMINAL SYSTEM PTS * * * DRDC07: DRIVER DATA COMMUNICATION * HDLC FULL DUPLEX PROCEDURE * * * * * * ********************************************* * * * * * EJECT * * * ENTRY POINTS * * ENTRY DC07AD ADDRESS BLOCK TERMINAL REQUESTS ENTRY IH0701 INPUT INTERRUPT ENTRY IH0702 OUTPUT INTERRUPT ENTRY DC07ON POWER ON ROUTINE ENTRY DW0700 DWT FOR DC TASK * * * EXTERNAL REFERENCES * * EXTRN TDISP DISPATCHER ENTRY EXTRN SAVE8 SAVE A1-A8 ON A15 STACK EXTRN TENDIO COMPLETE I/O EVENT EXTRN DISIOE REQUEST ERROR EXTRN SETIME SET TIMER EXTRN DWTST DWT STATUS EXTRN DWTOR DWT ORDER EXTRN DWTECB DWT ECB EXTRN QMJOB QUEUE MONITOR JOB EJECT * * * * * STANDARD INTERFACE PART FOR DATA COMMUNICATION * * * * * DWT CONTENTS * * DWTCHP TERMINAL ADDRESS AS GIVEN AT PARAMETER TRANSFER (BIT #08-#15) * DWTST BIT #00: NO REQUEST * * * ECB PARAMETERS * * ECBBA EQU 2 BUFFER ADDRESS ECBRL EQU 4 REQUESTED LENGTH ECBEL EQU 6 EFFECTIVE LENGTH ECBRC EQU 8 RETURN CODE ECBCW EQU 10 CONTROL WORD * * DWT DISPLACEMENTS * DWTTP EQU /10 TIMER POINTER ORDER PROCESS DWTWQ EQU /12 WRITE/GET BUFFER QUEUE DWTBQ EQU /14 BUFFER QUEUE ANCHOR DWTBTP EQU /16 TIMER POINTER FOR BUFFER QUEUE EJECT * * * PARAMETERS FOR CONDITIONAL ASSEMBLY * * X:A EQU 130 RECEIVE BUFFER LENGTH RBUFL EQU X:A X:B EQU 0 TBUFL EQU X:B X:C EQU 60 DCTASK FILE CODE DC07FC EQU X:C X:D EQU 1 IF 1 INTERRUPT LOGGING LOGG EQU X:D X:E EQU 300 POLL TIMEOUT VALUE TIMPOL EQU X:E X:F EQU 14 NUMBER OF RECEIVE BUFFERS RBUFNR EQU X:F VARIABLE BETWEEN 3 AND 14 X:G EQU 0 HFDUP EQU X:G FULL(=1),HALF(=0)DUPLEX X:H EQU /02 INPUT DEVICE ADDRESS CHLCIN EQU X:H CHLCUT EQU CHLCIN+/10 OUTPUT DEVICE ADDRESS EJECT * * * REQUEST HANDLING * * * * PARAMETERS * * A7=ORDER * * /02: READ * /06: WRITE * /08: EXCHANGE * /22: RELEASE READ BUFFER * /31: GET WRITE BUFFER * /37: TRANSFER PARAMETERS * EJECT * * * CONSTANTS AND WORK AREAS * * DCONOF DATA 0 ON- / OFFLINESWITCH DCSTOL DATA 0 OLD DC EQUIPMENT STATUS DCSTCU DATA 0 CURRENT STATUS DCWRQ DATA 0 WRITE REQUEST QUEUE IFF TBUFL=0 DCGWQ DATA 0 GET BUFFER REQUEST QUEUE XIF DCTPGP DATA 0 TIMER POINTER GENERAL POLL DC07DC DATA DCACTD ADDRESS BLOCK DC TASK DC07AD DATA DCACT ADDRESS BLOCK RES 15 SUBROUTINE STACK FOR INTERRUPTS STB RES 1 * * TIMBUF EQU 1800 180 SECONDS EJECT * * CIO START-IN COMMANDS * CICMO EQU /2 CONNECT MODEM CIDISC EQU /1 DISCONNECT MODEM CIWAIC EQU /3 WAIT FOR CALLL CIREPC EQU /5 RECEIVE ON PROG.CHANNEL CIAREP EQU /4 RECEIVE ON PROG.CHANNEL (2-WIRE) CIREMX EQU /B RECEIVE ON MUX CHANNEL CIAREM EQU /E RECEIVE ALARM ON MUX CHANNEL * * CIO START-OUT COMMANDS * CINRTS EQU 1 NO REQUEST TO SEND CIT4WP EQU 2 4-WIRE PROG.CHANNEL CIT2WP EQU 3 2-WIRE PROG.CHANNEL CIT4WM EQU /A 4-WIRE MUX.CHANNEL CIT2WM EQU /B 2-WIRE MUX.CHANNEL CIIDLE EQU 4 TRANSMIT IDLE 1 EJECT * * CHANNEL UNIT PARAMETRS * * * PROCEDURE WORK AREAS * STATUS DATA 0 (=1):N(S)FAIL,(=2):N(R) FAIL SWITCH DATA 0 OUTPUT BUFFER FLAG TESTCF DATA 0 INPUT BUFFER FLAG MODE DATA 0 MODE INDICATOR (0~=DISC,1=NRM,2=CMDR) QTRM DATA 0 COMMAND/RESPONSE QUEUE AREA FIELD1 DATA 0 ADDRESS + C-FIELD RECEPTION WRDWT DATA 0 WRITING DWT RES 15 STACK FOR INPUT PROCESS STBIN RES 1 INPUT STACK POINTER RES 15 STACK FOR OUTPUT PROCESS STBUT RES 1 OUTPUT STACK POINTER * * * PROCEDURE COUNTERS * * CPCNT DATA 0 CHECK POINT VSCNT DATA 0 SEND STATE VARIABLE VRCNT DATA 0 RECEIVE STATE VARIABLE NSCNT DATA 0 SEND COUNTER NRCNT DATA 0 RECEIVE COUNTER LNRCNT DATA 0 LAST ACCEPTED N(R) EJECT * * * PROCEDURE EQUATES * * * COMMANDS * SNRM EQU /93 SET NORMAL RESPONSE MODE DISC EQU /53 SET DISCONNECT MODE SIM EQU /7 SET INIT MODE * * MASKS ON RECEIVED FRAMES * RRMSK EQU 1 RECEIVE READY RNRMSK EQU 5 RECEIVE NOT READY REJMSK EQU 9 REJECT COMMAND IMSK EQU 1 INFORMATION FRAME UIMSK EQU 3 UNNUMBERED I-FRAME * * SENDING FRAMES * RNR EQU /15 RECEIVE NOT READY UA EQU /73 NON SEQUENCED ACK ROL EQU /1F REQUEST ON LINE RR EQU /11 READY TO RECEIVE CMDR EQU /97 INVALID COMMAND REJ EQU /19 FRAME REJECTION EJECT * * * ACTIVATION FROM TERMINAL TASKS * DCACT EQU * LDK A1,0 PRESET RETURN CODE SUK A7,/02 RF(Z) DCRD READ SPECIFIC SUK A7,/06-/02 RF(Z) DCWR SUK A7,/08-/06 RF(Z) DCEX EXCHANGE SUK A7,/22-/08 RF(Z) DCRR RELEASE READ BUFFER SUK A7,/37-/22 RF(Z) DCTP TRANSFER PARAMETERS IFF TBUFL=0 ADK A7,/37-/31 RF(Z) DCGW GET WRITE BUFFER XIF RF DCA100 EJECT * * * ACTIVATION FROM DCTASK * * DCACTD EQU * SUK A7,/02 RF(E) DCRDDC READ SUK A7,/22-/02 RF(E) DCRR RELEASE READ BUFFER SUK A7,/37-/22 RF(E) DCTP TRANSFER PARAMETERS DCA100 EQU * REQUEST ERROR ABL DISIOE INVALID ORDER EJECT * * * READ FROM DCTASK * * * REQUEST FROM DC-TASK * COMPLETE WHEN: * STATUS CHANGE ON DC EQUIPMENT * SPONTANOUS MESSAGE RECEPTION * DCRDDC EQU * CF A15,CKMESS CHECK IF MESSAGE RECEIVED DCRTN EQU * ABL TDISP GO TO DISPATCHER * * * TRANSFER PARAMETERS * * * REQUEST FROM DC-TASK: TRANSFER TERMINAL COMPUTER ADDRESS * FROM TERMINALS: TRANSFER TERMINAL ADDRESSES * * DCTP LD A2,ECBCW,A8 GET PARAMETER STR A2,A6 SAVE IN FIRST WORD OF DWT EJECT * * HERE TO INTRODUCE DWT IN DC-TAB * IF NOT DC-TASK CONCERNED * CWK A6,DW0700 DC-TASK ? RF(E) ENDIO YES LD A1,DC:IN GET DC:TAB INPUT POINTER CWK A1,DC:END TABLE ALREADY FULL ? ABL(E) DISIOE YES REQUEST ERROR STR A6,A1 INSERT DWT IN DC:TAB LDK A1,2 ADS A1,DC:IN UPDATE DC:TAB INPUT POINTER ADS A1,DC:TAB INCREMENT DC:TAB LENGTH SUR A1,A1 RETURN CODE=0 ENDIO EQU * CF A15,TENDIO COMPLETE REQUEST RB DCRTN EJECT * * * WRITE * * * COMPLETE WHEN: * SUCCESFUL TRANSMISSION * TIME OUT * * DCWR EQU * CF A15,TIMEWR SET TIMER CF A15,INSWQ QUEUE REQUEST RB DCRTN EJECT * * * * READ * * * COMPLETE WHEN: * MESSAGE RECEIVED * TIME OUT * * DCRD EQU * * * LD A1,DWTBQ,A6 CHECK BUFFER QUEUE RF(NZ) DCRD10 NOT EMPTY * * * CF A15,TIMERE START TIMER * * * RB DCRTN * * * BUFFER WAITING IN QUEUE * * DCRD10 EQU * LDR* A2,A1 GET NEXT ONE ST A2,DWTBQ,A6 STORE AS FIRST IN QUEUE ADK A1,7 ADJUST ADDRESS ST A1,ECBBA,A8 STORE IN ECB LD A4,-4,A1 GET LENGTH SUK A4,1 UPDATE LENGTH ST A4,ECBEL,A8 STORE IN ECB LDK A1,0 SET RC = 0 CF A15,TENDIO COMPLETE READ REQUEST LD A1,DWTBQ,A6 RB(NZ) DCRTN LD A1,DWTBTP,A6 QUEUE EMPTY, STOP TIMING RB(Z) DCRTN CM* DWTBTP,A6 CM DWTBTP,A6 RB DCRTN EJECT * * * GET WRITE BUFFER * * IFF TBUFL=0 * COMPLETE WHEN: * BUFFER BEEN ALOCATED * TIME OUT * * DCGW EQU * CF A15,GTBUF GET TRANSMIT BUFFER LDR A4,A4 RF(Z) DCGW10 NO FREE BUFFER ST A4,ECBBA,A8 LDKL A1,TBUFL+TBUFL ST A1,ECBEL,A8 STORE BUFFER LENGTH LDK A1,0 RB ENDIO COMPLETE REQUEST DCGW10 EQU * CF A15,TIMERE START TIMER CF A15,INSGWQ QUEUE REQUEST RB DCRTN XIF EJECT * * * RELEASE READ BUFFER * * DCRR LD A4,ECBBA,A8 SUK A4,7 CF A15,RRBUF LDK A1,0 CF A15,TENDIO COMPLETE RRBUF REQUEST RB DCRTN * * * EXCHANGE * * * * COMPLETE WHEN: * MESSAGE PASSED TO TERMINAL * TIME OUT * DCEX EQU * RB DCWR SAME INITIALIZATION AS WRITE EJECT * * * * TIMER HANDLING PART * * * * READ TIMER=TIMERR * TIMERE EQU * LDR A1,A6 LD A2,ECBCW,A8 GET TIMEOUT VALUE RF(Z) TIME10 NO TIMING ST A2,TIMERR CF A15,SETIME DATA TOUTRE TIMERR DATA 0 ST A4,DWTTP,A6 STORE TIMER POINTER TIME10 EQU * RF GBUF10 RETURN * * TIMEOUT READ TIMER * TOUTRE EQU * LDR A6,A1 FETCH DWT CM DWTTP,A6 * IFF TBUFL=0 CF A15,REMOVG REMOVE FROM QUEUE XIF EJECT TOUTR1 EQU * LDK A1,/40 INDICATE TIME OUT LD A2,DWTOR,A6 CHECK IF EXCHANGE ORDER SUK A2,8 RF(NZ) TOUTR2 NOT EXCHANGE ORK A1,2 RETURN CODE /42 AT EXCHANGE TIME OUT TOUTR2 RB ENDIO COMPLETE REQUEST * * WRITE TIMER=TIMWR * TIMEWR LDR A1,A6 LD A2,ECBCW,A8 GET TIMEOUT VALUE RB(Z) TIME10 NO TIMING ST A2,TIMWR CF A15,SETIME DATA TOUTWR TIMWR DATA 0 ST A4,DWTTP,A6 RB TIME10 EJECT * * TIMEOUT WRITE TIMER * TOUTWR EQU * LDR A6,A1 FETCH DWT CM DWTTP,A6 LD A1,DWTOR,A6 GET ORDER SUK A1,6 RF(Z) TOUT10 WRITE SUK A1,2 RB(NZ) TOUTR1 ORDER IS NOT EXCHANGE TOUT10 LD A2,DWTECB,A6 LD A4,ECBBA,A2 FETCH BUFFER IFF TBUFL=0 CF A15,RTBUF RELEASE TRANSMITBUFFER CF A15,CKGBQ CHECK GET BUFFER QUEUE XIF CF A15,REMOVW REMOVE FROM WRITE QUEUE RB TOUTR1 EJECT * * * STOP REQUEST TIMING * * REMAINING TIME IS RETURNED IN A2 * * CTIME EQU * LD A2,DWTTP,A6 GET TIMER POINTER RF(Z) CTIM10 NOT RUNNING LDR* A2,A2 NGR A2,A2 GET REMAINING TIME CM* DWTTP,A6 STOP TIMER CM DWTTP,A6 CTIM10 EQU * RTN A5 EJECT * * GET RECEIVE BUFFER * * CALLING SEQUENCE: CF A15,GRBUF * A4=0 IF NO BUFFER IS FREE * ELSE A4 CONTAINS BUFFER ADDRESS * A2 AND A3 ARE DESTROYED * * GRBUF LDKL A2,DCRBUF RECEIVE BUFFERS GBUF INH LDR* A4,A2 RF(Z) GBUF10 NO BUFFER FREE LDR* A3,A4 REMOVE BUFFER FROM FREE CHAIN STR A3,A2 GBUF10 ADKL A15,4 ADJUST STACK POINTER ABR* A15 RETURN TO CALLER * * * GET TRANSMIT BUFFER * IFF TBUFL=0 * CALLING SEQUENCE: CF A15,GTBUF * A4=0 IF NO BUFFER IS FREE * ELSE A4 CONTAINS BUFFER ADDRESS * A2 AND A3 ARE DESTROYED * * GTBUF LDKL A2,DCTBUF TRANSMIT BUFFERS RB GBUF EJECT * * * CHECK GET BUFFER QUEUE * * CKGBQ EQU * LDR A7,A6 SAVE A6 LD A6,DCGWQ GET QUEUE ANCHOR RF(Z) CKG110 NO ONE ON QUEUE SUK A6,DWTWQ LD A2,DWTST,A6 RF(N) CKG100 NO REQUEST LD A2,DWTOR,A6 SUK A2,/31 RF(NZ) CKG100 NO GET BUFFER REQUEST CF A15,GTBUF GET TRANSMIT BUFFER LDR A4,A4 RF(Z) CKG110 NO BUFFER FREE LD A3,DWTECB,A6 ST A4,ECBBA,A3 STORE BUFFER ADDRESS LDKL A1,TBUFL+TBUFL ST A1,ECBEL,A3 STORE BUFFER LENGTH LDK A1,0 CF A15,TENDIO COMPLETE REQUEST CKG100 EQU * CF A15,REMOVG REMOVE FROM QUEUE CKG110 LDR A6,A7 RESTORE A6 RB GBUF10 RETURN XIF EJECT * * * RELEASE RECEIVE BUFFER * * A4 CONTAINS BUFFER ADDRESS * CALLING SEQUENCE: CF A15,RRBUF * A2 AND A3 ARE DESTROYED * * RRBUF LDKL A2,DCRBUF RECEIVE BUFFERS RBUF INH RBUF10 EQU * LDR* A3,A2 RF(Z) RBUF20 LDR A2,A3 RB RBUF10 RBUF20 EQU * STR A4,A2 CMR A4 RB GBUF10 RETURN TO CALLER * * * RELEASE TRANSMIT BUFFER * IFF TBUFL=0 * A4 CONTAINS BUFFER ADDRESS * CALLING SEQUENCE: CF A15,RTBUF * A2 AND A3 ARE DESTROYED * * RTBUF LDKL A2,DCTBUF TRANSMIT BUFFERS RB RBUF XIF EJECT * * * INSERT DWT IN WRITE REQUEST QUEUE * * A2,A3,A4 DESTROYED * A6=DWT * INSWQ LDKL A2,DCWRQ GET QUEUE ANCHOR INSWQ1 LDK A4,DWTWQ INSWQ2 LDR* A3,A2 RF(Z) INSWQ3 END OF QUEUE FOUND LDR A2,A3 RB INSWQ2 INSWQ3 ADR A4,A6 STR A4,A2 INSERT IN QUEUE CMR A4 INDICATE END OF QUEUE RB GBUF10 RETURN * * * REMOVE DWT FROM WRITE REQUEST QUEUE * * A2,A3,A4 DESTROYED * A6=DWT * REMOVW LDKL A2,DCWRQ GET QUEUE ANCHOR REM05 LDK A4,DWTWQ GET DWT-LINK TO BE REMOVED REM06 ADR A4,A6 REM10 LDR* A3,A2 RB(Z) GBUF10 NOT ON QUEUE: RETURN CWR A3,A4 RF(E) REM15 LDR A2,A3 GET NEXT RB REM10 REM15 LDR* A3,A4 REMOVE STR A3,A2 RB GBUF10 RETURN EJECT * * * * INSERT DWT IN GET WRITE BUFFER QUEUE * IFF TBUFL=0 * A2,A3,A4 DESTROYED * A6=DWT * INSGWQ LDKL A2,DCGWQ GET QUEUE ANCHOR RB INSWQ1 * * * REMOVE DWT FROM GET WRITE BUFFER QUEUE * * A2,A3,A4 DESTROYED * A6=DWT * REMOVG LDKL A2,DCGWQ GET QUEUE ANCHOR RB REM05 XIF EJECT * * * QUEUE ALLOCATED RECEIVE BUFFER * * A4=BUFFER ADDR * A2,A3 DESTROYED * QRBUF EQU * LDKL A2,DW0700+DWTWQ BEGINNING OF RECEIVE QUEUE QR100 EQU * LDR* A3,A2 RF(Z) QR200 END OF QUEUE FOUND LDR A2,A3 RB QR100 QR200 STR A4,A2 INSERT INTO QUEUE CMR A4 INDICATE END OF QUEUE RTN A5 EJECT * * * CHECK IF UNEXPECTED MESSAGE OR STATUS CHANGE * * REGISTERS A1,A2,A3,A4,A6 AND A8 ARE DESTROYED * CKMESS LDKL A6,DW0700 LD A1,DWTST,A6 RF(N) CKM110 NO REQUEST LDK A1,2 READ REQUEST ? CW A1,DWTOR,A6 RF(NE) CKM110 NO LD A8,DWTECB,A6 ECB ADDR TO A8 LD A3,DWTWQ,A6 A3=ADDR TO READ QUEUE RF(Z) CKM200 NO READ IN QUEUE LDR* A2,A3 A2=ADDR TO NEXT READ BUFFER ST A2,DWTWQ,A6 STORE THIS ADDR INTO QUEUE ADK A3,7 MOVE POINTER TO TEXT ST A3,ECBBA,A8 SAVE THIS ADDR IN ECB LD A4,-5,A3 SUK A4,1 UPDATE LENGTH ST A4,ECBEL,A8 STORE NUMBERS OF CHARACTERS LD A4,-3,A3 ST A4,ECBCW,A8 STORE LINE DEVICE ADDRESS LDK A1,0 PARAMETER=OK CKM100 CF A15,TENDIO COMPLETE READ GENERAL REQUEST CKM110 ADKL A15,4 ADJUST STACK POINTER ABR* A15 RETURN CKM200 LD A1,DCSTCU NO MESSAGE RECEIVED,CHECK STATUS OR A1,DCONOF TAKE CARE OF POLL TIME OUT CW A1,DCSTOL ST A1,DCSTOL RB(E) CKM110 NO CHANGE OF STATUS ORKL A1,/2000 INDICATE STATUS CHANGE RB CKM100 EJECT * * * HDLC INPUT PROCESS * * READ ONE FRAME,ANALYZE IT * QUEUE RESPONSES FOR * OUTPUT PROCESS * * BRM EQU * BASIC RECEIVE MODE LDKL A5,STBIN LOAD INPUT STACK BASE CF A5,RDFRAM READ ONE FRAME RB(NZ) BRM INVALID FRAME LC A1,FIELD1 GET CLUSTER ADDRESS CC A1,DW0700+1 RB(NE) BRM NOT MENT FOR THIS CLUSTER LC A1,FIELD1+1 GET C-FIELD LDR A2,A1 SAVE IT XRK A2,SNRM RF(NZ) BRM100 * * * SNRM RECEIVED * * LDK A1,1 ST A1,MODE INDICATE NORMAL RESPONSE MODE CF A5,RESCON RESET COUNTERS BRM050 EQU * LDK A1,1 LOAD 'UA' CF A15,QMTRM QUEUE FOR TRANSMISSION RB BRM BRM100 EQU * LDR A2,A1 XRK A2,DISC DISCONNECT ? RF(NZ) BRM110 * * * DISC RECEIVED * * BRM105 EQU * CM MODE INDICATE DISCONNECT MODE RB BRM050 BRM110 EQU * LD A2,MODE RF(NZ) BRM120 NRM OR CMDR * * * DISCONNECT MODE, REQUEST FOR ONLINE * * LDK A1,2 LOAD 'ROL' CF A15,QMTRM QUEUE FOR TRANSMISSION RB BRM BRM120 EQU * SUK A2,2 RF(Z) BRM160 CMDR-MODE EJECT * * NORMAL RESPONSE MODE * TRANSACTIONS * ANK A1,/F IGNORE COUNTERS LDR A2,A1 GET C-FIELD XRK A2,RNRMSK RF(NZ) BRM130 * * RNR RECEIVED * * CF A5,UPDCON UPDATE COUNTERS AND CHECK OUTPUT QUEUE CF A5,TSTNR CMDR ? LDK A1,3 LOAD 'RR' CF A15,QMTRM QUEUE FOR TRANSMISSION RB BRM BRM130 EQU * LDR A2,A1 GET MASK XRK A2,RRMSK RF(Z) BRM140 LDR A2,A1 XRK A2,REJMSK RF(NZ) BRM150 * * RR OR REJ RECEIVED * BRM140 EQU * CF A5,UPDCON UPDATE COUNTERS AND CHECK OUTPUT QUEUE CF A5,TSTNR CMDR ? BRM145 EQU * LC A1,FIELD1+1 GET C-FIELD ANK A1,/10 CHECK POLL-BIT RB(Z) BRM P-BIT OFF LDK A1,0 INDICATE POLL-BIT RECEIVED CF A15,QMTRM QUEUE FOR TRANSMISSION RB BRM EJECT * * FETCH IF INVALID CONTROL FIELD * BRM150 EQU * LDR A2,A1 ANK A2,IMSK RF(Z) BRM170 I-FRAME LC A1,FIELD1+1 GET C-FIELD ANK A1,/EF EXCLUDE POLL-BIT LDR A2,A1 XRK A2,UIMSK UI ? RF(Z) BRM155 YES LDR A2,A1 XRK A2,SIM SIM ? RF(NZ) BRM156 NO BRM155 EQU * LC A1,FIELD1+1 ANK A1,/10 P-BIT ON ? RB(NZ) BRM050 YES RB BRM * * * INVALID COMMAND * * BRM156 EQU * LDK A2,0 PRESENT CONTERS LDK A3,/80 FAIL CODE (CMDR MODE SETTING) CF A5,PRCMDR INIT CMDR BRM160 EQU * LDK A2,2 ST A2,MODE INDICATE CMDR MODE LDK A1,4 LOAD 'CMDR' CF A15,QMTRM QUEUE FOR TRANSMISSION RB BRM EJECT * * * I-FRAME RECEIVED * * BRM170 CF A5,UPDCON UPDATE COUNTERS AND CHECK OUTPUT QUEUE LD A1,STATUS CHECK UNEXPECTED N(S) ANK A1,1 N(S) OK? RF(NZ) BRM185 NO CF A5,TSTNR CHECK UNEXPECTED N(R) CF A15,GRBUF ALLOCATE DATA LINK BUFFER LC A1,FIELD1+1 ANK A1,/10 CHECK POLL BIT RF(Z) BRM180 P-BIT OFF LDK A1,0 INDICATE POLL-BIT RECEIVED CF A15,QMTRM QUEUE FOR TRANSMISSION BRM180 EQU * * * HERE TO PROCESS AVAILABLE FRAME * A4=BUFFER * LC A2,+6,A4 GET STA ANK A2,/FF CF A5,FINTER FIND OUT DESTINATION LDR A6,A3 DWT FOUND RF(NZ) BRM190 YES EJECT * * SUBTERMINAL ADDRESS IS NOT CONTAINED * IN DCTAB SUBSET. * QUEUE INCOMMING MESSAGE TO DC-TASK * AND CHECK IF REQUEST PENDING * ST A2,+4,A4 SAVE WRONG SUB TRMNL. ADDRESS CF A5,QRBUF QUEUE IN DW0700 CF A15,CKMESS COMPLETE DC-REQUEST ABL BRM * * EXEPTION STATE:WRONG N(S) * FULL-DUPLEX:SEND REJ WITHOUT TESTING POLL-BIT * HALF-DUPLEX:WAIT POLL-BIT * BRM185 EQU * CM STATUS RESTORE STATUS LDKL A1,HFDUP GET FULL OR HALF DUPLEX RB(Z) BRM145 WAIT POLL LDK A1,/FF INDICATE REJ TOBE SENT CF A15,QMTRM QUEUE FOR TRANSMISSION ABL BRM EJECT * * COMPLETE READ OR EXCHANGE REQUEST * BRM190 EQU * LD A1,DWTST,A6 GET STATUS RF(N) COMP30 NO REQUEST LD A1,DWTOR,A6 GET ORDER SUK A1,2 RF(NZ) COMP30 NOT READING COMP25 EQU * LD A8,DWTECB,A6 GET ECB ADDRRESS LD A1,+2,A4 GET LENGTH SUK A1,1 UPDATE LENGTH ST A1,ECBEL,A8 SAVE IT LDR A1,A4 ADK A1,7 BUFFER DATA ST A1,ECBBA,A8 SAVE IT LDK A1,0 SET RC=0 CF A15,TENDIO COMPLETE READ REQUEST ABL BRM BASIS RECEIVE MODE EJECT * * QUEUE RECEIVED MESSAGE * COMP30 EQU * LDK A2,DWTBQ GET PROPER QUEUE ANCHOR ADR A2,A6 LC A1,+6,A4 GET TC IDENT ANK A1,/FF ST A1,+4,A4 SAVE IT CF A5,QR100 QUEUE RECEIVED BUFFER LD A1,DWTBQ,A6 LDR* A2,A1 FIRST IN QUEUE RF(NZ) COMP35 LDR A1,A6 CF A15,SETIME START BUF SUPERVISION TIMER DATA COMP40,TIMBUF ST A4,DWTBTP,A6 COMP35 ABL BRM * * TIME OUT ENTRY * COMP40 EQU * LDR A6,A1 GET DWT CM DWTBTP,A6 LD A1,DWTBQ,A6 GET ANCHOR RF(Z) COMP50 NOTHING IS QUEUED CM DWTBQ,A6 CLEAR QUEUE ANCHOR COMP42 EQU * LDKL A2,DW0700+DWTWQ GET DC-TASK QUEUE ANCHOR COMP43 EQU * LDR* A3,A2 RF(Z) COMP44 END OF QUEUE LDR A2,A3 RB COMP43 COMP44 EQU * STR A1,A2 INSERT BUFFERS IN DC TSSK QUEUE CF A15,CKMESS COMPLETE DC-TASK READ COMP50 EQU * ABL TDISP EJECT * * HERE TO TEST N(R) VALIDITY * TSTNR EQU * LD A1,STATUS GET STATUS ANK A1,2 WRONG N(R)? RF(NZ) TSTNRX YES RTN A5 ********** INIT CMDR PARAMETERS *********** TSTNRX EQU * CM STATUS RESTORE STATUS LD A1,VSCNT SLL A1,4 LD A2,VRCNT ORR A2,A1 PRESENT COUNTERS IN A2 LDK A3,/10 FAIL CODE IN A3 CF A5,PRCMDR INIT FIELDS ABL BRM160 EJECT * * HERE TO INITIALIZE CMDR OUTPUT FIELDS * PRCMDR EQU * LDK A1,CMDR LOAD 'CMDR'+F-BIT LDKL A4,DLOBUF GET BUFFER ADDRESS ADK A4,1 SCR A1,A4 STORE C-FIELD LC A1,FIELD1+1 GET WRONG RECEIVED C-FIELD ADK A4,1 SCR A1,A4 STORE IT ADK A4,1 SCR A2,A4 SAVE PRESENT COUNTERS ADK A4,1 SCR A3,A4 SAVE FAIL PARAMETERS RTN A5 EJECT * * * HDLC OUTPUT PROCESS * * QUEUED AS MONITOR JOB FROM INPUT PROCESS * * TRANSMIT FRAME IF ANY ON QUEUE * PRIORITY 1: COMMANDS/RESPONSES (UA,CMDR,ROL) * PRIORITY 2: RR-FRAMES WHEN NOTHING PENDING * * TRM EQU * INH SET INHIBIT LDKL A5,STBUT LOAD STACKBASE LDR A7,A1 SAVE PARAMETER CCK A1,/FF00 REJ ? RF(NE) TRM050 NO LDK A1,REJ LOAD 'REJ'+ F-BIT RF TRM110 TRM050 EQU * CF A5,CPTIM CHECK POLL TIMER LDR A1,A7 RESTORE PARAMETER RF(Z) TRM150 CHECK APPLICATION QUEUE SUK A1,1 RF(Z) TRM100 UA ON QUEUE SUK A1,1 RF(Z) TRM120 ROL ON QUEUE SUK A1,1 RF(Z) TRM130 RR ON QUEUE SUK A1,1 RF(Z) TRM140 CMDR ON QUEUE RF TRM150 CHECK APPLICATION QUEUE EJECT * * * UA SHOULD BE SENT * * TRM100 EQU * LDK A1,UA LOAD 'UA'+F TRM110 EQU * CF A5,TRSFR SEND SHORT FRAME ABL TDISP END OF JOB * * * ROL SHOULD BE SENT * * TRM120 EQU * LDK A1,ROL LOAD 'ROL'+F RB TRM110 * * * RR SHOULD BE SENT * * TRM130 EQU * LDK A1,RR LOAD 'RR'+F TRM135 EQU * LD A2,VRCNT GET NEXT EXPECTED SEND COUNTER SLL A2,5 ADJUST IT ORR A1,A2 INSERT IN RR RB TRM110 * * * CMDR SHOULD BE SENT * * TRM140 EQU * LDKL A4,DLOBUF GET BUFFER ADDRESS LDK A3,5 FRAME LENGTH TO A3 CF A5,WRFRAM SEND THE FRAME ABL TDISP * * * CHECK APPLICATION QUEUE AND SEND * I-FRAME OR RR-FRAME * * TRM150 EQU * LD A6,DCWRQ CHECK APPLICATION QUEUE RF(NZ) TRM300 SOMEONE ON QUEUE TRM170 EQU * LD A1,DCRBUF BUFFER SHORTAGE ? RB(NZ) TRM130 NO * * * RNR SHOULD BE SENT, BUFFER SHORTAGE * * LDK A1,RNR LOAD 'RNR'+F RB TRM135 EJECT * * * * HERE TO TRANSMIT AN IFRAME * TRM300 EQU * SUK A6,DWTWQ GET DWT ADDRESS LDKL A4,DLOBUF GET OUTPUT BUFFER ADDRESS CF A5,PRCFI PREPARE C-FIELD FORMAT LD A8,DWTECB,A6 GET ECB ADDRESS LD A3,ECBRL,A8 GET REQUESTED LENGTH ADK A3,1 ADJUST LENGTH ST A6,WRDWT SAVE WRITING DWT LDR* A1,A6 GET SUB-TERM ADDRESS ANK A1,/FF LD A7,ECBBA,A8 OUTPUT BUFFER ADDRESS ADK A7,1 USE FREE-WORD TO INSERT IT SCR A1,A7 SUK A7,2 INIT OUTPUT ADDRESSING ST A7,SWITCH