DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦97cc1546a⟧

    Length: 20624 (0x5090)
    Notes: pts_type(SC)
    Names: »DCSTAT.SC«

Derivation

└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
    └─⟦this⟧ »TOSSWORK/DCSTAT.SC« 
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
    └─⟦this⟧ »TOSSWORK/DCSTAT.SC« 

PTS(SC)

	IDENT	DCSTAT	REL 11.0 81-01-26 870105041100
* 
************************************************************* 
* 
*	PHILIPS TERMINAL SYSTEM, P T S
* 
*	DCSTAT  STATISTIC DATA COLLECTION ROUTINE FOR 
*	        DATA COMMUNICATION SOFTWARE 
* 
**************************************************************
	EJECT
*.	PROGRAM DESCRIPTION
*.	FUNCTIONS: 
*.	DCSTAT SUPPLIES THE DATA COMMUNICATION DRIVERS/PACKAGES
*.	WITH A SET OF ROUTINES TO MAINTAIN STATISTICAL COUNTERS
*.	FOR A DWT OR A DWT AND ITS HEAD DWT. 
*.	THE FUNCTIONS ARE CONFIGURABLE BY THE PARAMETER STAT AND 
*.	A  CALL WHEN NOT CONFIGURED IS REJECTED WITH STATUS. 
*.	THE ROUTINES ARE REENTRANT USING THE SYSTEM STACK IN 
*.	INHIBIT MODE. THEY CAN BE USED SIMULTANEOUSLY BY 
*.	DIFFERENT TYPES OF DRIVERS/PACKAGES. 
*.	THE COUNTERS ARE MAINTAINED IN A BUFFER LINKED FROM THE
*.	DWT. EACH BUFFER CONTAINS A CONTROL WORD INDICATING
*.	STATUS OF THE COUNTERS AND MAX COUNTER VALUE DEFINED 
*	FOR THE BUFFER
* 
*	FUNCTIONS AND ENTRY POINTS: 
*	-CLEAR COUNTERS    ENTRY:  DCSRST AND DCSRLL
*	-UPDATE COUNTERS   ENTRY:  DCSUPR AND DCSUPD
*	-READ COUNTERS     ENTRY:  DCSRED 
* 
* 
*	ACTIONS TO INCLUDE STATISTICS IN A DRIVER/PACKAGE 
*	1. DEFINE EVENTS IN THE DRIVER TO CALL RESP ENTRY 
*	   THE COUNTERS POSSIBLE ARE DEFINED BY THE EQU:S 
*	   CSSRBL - CSCXC3 AS DESRIBED BELOW
*	2. DEFINE COUNTER AREA IN THE DWT AND ITS LINK(OFFSET)
*	   THE LAYOUT DESCRIBED BELOW MUST BE APPLIED AS REQ
*	   BY DCSTAT
	EJECT
*.	TABLE STRUCTURE: 
*.	THE DWT HAS THE FOLLOWING LAYOUT 
*.
*		.................. 
*		.                . 
*		/                / 
*		.                . 
*		.................. 
*		. LINK STAT BUFF .  -- 
*		..................   ! 
*		. LINK HEAD DWT  . --!---->
*		..................   ! 
*		. LINK NEXT DWT  . --!---->
*		..................   ! 
*		.                . 
*		/                /   ! 
*		/                /   ! 
*		..................   ! 
*		. CONTROL WORD   .  <- 
*		.................. 
*		. COUNTER AREA    .
*		.................. 
*		.                . 
*		/                / 
*		.................. 
	EJECT
* 
*	ENTRY POINTS
* 
	ENTRY	DCSRST	REST COUNTERS IN SPEC DWT 
	ENTRY	DCSRLL	RESET COUNTERS IN ALL DWT:S 
	ENTRY	DCSUPR	UPDATE COUNTER SPEC IN A1, (A2) 
	ENTRY	DCSUPS	UPDATE COUNTER SPEC IN A1, (A2) A7=DTETAB 
	ENTRY	DCSUPD	UPDATE COUNTER SPEC IN PKT, (A2)
	ENTRY	DCSRED	READ STATISTIC COUNTERS TO USER BUFF
* 
*	ENTRY EQU:S 
* 
	ENTRY	CSMAXL	MAX INDEX FOR LINK DWT
	ENTRY	DWTCHD	EQU DWT OFFSET HEAD DWT 
	ENTRY	DWTCHN	EQU DWT OFFSET NEXT DWT 
* 
*	EXTERNALS 
* 
	EXTRN	DWTTAB 
	EXTRN	MOVSU
	EJECT
* 
****************************************************
* 
*	CONDITIONAL ASSEMBLY PARAMETERS 
* 
********************************************* 
* 
	 
MMUPAG	EQU	0	MMU SWITCH 
	 
* 
*	CONDITIONAL ASSEMBLY PARAM TO INCLUD MORE FEATURES
* 
			STATISTIC FUNCTIONS
STAT	EQU	1	IF 0= NO   1=YES 
	 
			STATISTIC ON SUBUNITS
STUNIT	EQU	1	IF 0= NO 1= YES
	 
			DOUBLE WORD COUNTERS 
STDBLE	EQU	0	IF 0=NO, 1=YES 
	 
	 
	 
**********************************************
* 
*	EXTERNAL TABLE OFFSETS
* 
**********************************************
* 
ECBBA	EQU	2	ECB BUFFER ADDRESS
ECBRL	EQU	4	 "  REQ LENGTH
ECBEL	EQU	6	 "  EFF LENGTH
	 
	 
	IFT	MMUPAG=0 
DWTDRD	EQU	/10	DRIVER DEP AREA START
	XIF
	IFT	MMUPAG=1 
DWTDRD	EQU	/14	DRIVER DEP AREA START
	XIF
	 
DWTSTB	EQU	DWTDRD	DWT DC REL OFFSET TO STATISTIC BUFFER 
DWTCHD	EQU	DWTSTB+2	 "             LINK TO HEAD DWT 
DWTCHN	EQU	DWTCHD+2	 "            LINK TO NEXT DWT
DWTLAD	EQU	DWTCHN+2	 "    LOCAL DTE ADDRESS 
DWTSUB	EQU	DWTLAD+4	 POSSIBLE SUB ADDRESS 
	EJECT
************************************************************* 
* 
*	STATISTIC EQU:S 
*	USED IN CALLS FOR UPDATE OF COUNTERS
*	THE FOLLOWING EQU:S MUST BE INCLUDED IN 
*	EACH DRIVER/PACKAGE USING DCSTAT FUNCTIONS
* 
*	THE FORMAT OF THE PARAMETER-1 IN CALL TO DCSUPR/DCSUPD
*	IS: 
*	BITS   XYZZZZZZ  WHERE X=1IF PARAMETER-2 USED AS INCREMENT
*	                           ELSE INCREMENT WITH +1 
*	                       Y=1 IF DOUBLE WORD COUNTER 
*	                       ZZZZZZ= COUNTER INDEX AS LISTED BELOW
* 
************************************************************* 
	 
* 
*	LINK LEVEL COUNTERS 
	 
CSSRBL	EQU	/10	SYNCH DATA BLOCKS RECEIVED 
CSSRBY	EQU	/11	  "   DATA BLOCKS REJECTED BUFFER BUSY 
CSSRBO	EQU	/12	  "   DATA BLOCKS REJECTED BUFFER OVERFLOW 
CSSRAB	EQU	/13	  "   DATA BLOCKS REJECTED ABORTED 
CSSRPE	EQU	/14	  "   DATA BLOCKS REJECTED PARITY ERROR
CSSTBL	EQU	/15	  "   DATA BLOCKS TRANSMITTED
CSSTRT	EQU	/16	  "   DATA BLOCKS RETRANSMITTED
CSSTAB	EQU	/17	  "   DATA BLOCKS ABORTED
CSSXC1	EQU	/18	  "   PROTOCOL DEPENDENT 
CSSXC2	EQU	/19	  "   PROTOCOL DEPENDENT 
CSSXC3	EQU	/1A	  "   PROTOCOL DEPENDENT 
	 
	 
CSBRIF	EQU	/10	BITOR I-FRAMES RECEIVED
CSBRBY	EQU	/11	  "   I-FRAMES REJECTED BUFFER BUSY
CSBRBO	EQU	/12	  "   I-FRAMES REJECTED BUFFER OVERFLOW
CSBRAB	EQU	/13	  "   I-FRAMES REJECTED ABORTED
CSBRPE	EQU	/14	  "   I-FRAMES REJECTED FCS ERROR
CSBTIF	EQU	/15	  "   I-FRAMES TRANSMITTED 
CSBTRT	EQU	/16	  "   I-FRAMES RETRANSMITTED 
CSBRSM	EQU	/17	  "   SNRM/SARM/SABM RECEIVED
CSBRDI	EQU	/18	  "   DISC RECEIVED
CSBRDM	EQU	/19	  "   DM RECEIVED
CSBRFR	EQU	/1A	  "   FRMR RECEIVED
CSBRUA	EQU	/1B	  "   UA RECEIVED
CSBRRJ	EQU	/1C	  "   REJ RECEIVED 
CSBRNR	EQU	/1D	  "   RNR RECEIVED 
CSBTSM	EQU	/1E	  "   SNRM/SARM/SABM TRANSMITTED 
CSBTDI	EQU	/1F	  "   DISC TRANSMITTED 
CSBTDM	EQU	/20	  "   DM TRANSMITTED 
CSBTFR	EQU	/21	  "   FRMR TRANSMITTED 
CSBTUA	EQU	/22	  "   UA TRANSMITTED 
CSBTRJ	EQU	/23	  "   REJ TRANSMITTED
CSBTNR	EQU	/24	  "   RNR TRANSMITTED
CSBXC1	EQU	/25	  "   PROTOCOL DEPENDENT 
CSBXC2	EQU	/26	  "       "        " 
CSBXC3	EQU	/27	  "       "        " 
	 
	 
*	DTE/DCE LEVEL COUNTERS
	 
CSCDTE	EQU	/28	DTE NOT OPERABLE 
CSCDIT	EQU	/29	I/P THROUGHPUT ERROR 
CSCDOT	EQU	/2A	O/P THROUGHPUT ERROR 
CSCDCE	EQU	/2B	DCE NOT OPERABLE 
CSCXC1	EQU	/2C	CONTROL UNIT DEPENDENT 
CSCXC2	EQU	/2D	    "
CSCXC3	EQU	/2E	    "
	 
	 
CSINIV	EQU	/10 	1ST IMPL COUNTER CSSRBL AND CSBRBL
CSMAXL	EQU	CSCXC3-/F	MAX IMPL SIZE OF LINK STAT BUFF
	EJECT
	 
******************************************************* 
* 
* 
*	STATISTIC BUFFER LAYOUT 
* 
******************************************************* 
	 
*	................... 
*	.                 .   STWSID
*	..................
*	.                 .   STWCST
*	................... 
*	.                 .   STWMIX
*	................... 
*	.                 .   STWCTA
*	/                 / 
*	/                 / 
*	................... 
STWSID	EQU	0	RESERV FOR SYMBOLIC ID 
STWCST	EQU	STWSID+2	COUNTER STATUS
			=0, RESET
			/=0, OVERFLOW IN COUNTER WITH BIT 0=1
STWMIX	EQU	STWCST+2	MAX COUNTER INDEX IN AREA STWCTA
	 
	 
STWCTA	EQU	STWMIX+2	COUNTER AREA START
			SIZE MUST BE ADJUSTED TO VALUE IN STWMIX 
	EJECT
* 
*********************************************************** 
* 
*	DCSRST  -   RESET STATISTIC COUNTERS FOR SPECIFIED DWT
* 
*	THE FOLLOWING ACTIONS ARE TAKEN 
*	-CHECK IF FUNCTION IS CONFIGURED. IF NOT EXIT 
*	-LOCATE STATISTIC BUFFER IN DWT. IF NOENE EXIT
*	-EXTRACT MAX COUNTER FOR BUFFER  AND CLEAR COUNTERS 
* 
*	ENTRY:     CF     A15,DCSRST      A6=DWT
*	EXIT:      ABR*   A15             A1=STATUS 
*	                                     0=COMPLETED -1= NOT CONFIG 
* 
*********************************************************** 
	 
DCSRST	EQU	*
	IFT	STAT=1 
	STR	A2,A15	SAVE REG ON SYSTEM STACK
	CF	A15,DCLEAR	CLEAR BUFFER IF ANY
	LDR*	A2,A15	RELOAD REG	
	XIF
	RF	DCSEXI	COMMON EXIT
	EJECT
	 
*********************************************************** 
* 
*	DCSRLL  -   RESET STATISTIC COUNTERS FOR ALL DWT:S IN CHAIN 
* 
*	THE FOLLOWING ACTIONS ARE TAKEN 
*	-CHECK IF FUNCTION IS CONFIGURED. IF NOT EXIT WITH STATUS 
*	-FIND ADDRESS OF HEAD DWT IF ANY. IF NOT START WITH CURRENT 
*	-LOCATE LINK TO STATISTIC BUFFER. IF 0 GO TO NEXT DWT 
*	-CLEAR COUNTERS IN THE BUFFER 
* 
*	ENTRY:        CF      A15,DCSRLL     A6=DWT 
*	EXIT:         ABR*    A15            A1=STATUS
*                                      0=COMPLETED -1=NOT CONFIG
* 
************************************************************
	 
DCSRLL	EQU	*
	IFT	STAT=1 
	IFT	STUNIT=1	SUBUNIT STATISTICS
	STR	A2,A15	SAVE REGS ON SYSTEM STACK 
	STR	A6,A15 
	LDR	A1,A6	TEMP SAVE OF SPEC DWT
	LD	A6,DWTCHD,A6	LINK TO HEAD 
	RF(NZ)	DCSR10	YES START FROM HEAD
	LDR	A6,A1	NO, START FROM CURRENT 
DCSR10	EQU	*
	CF	A15,DCLEAR	CLEAR BUFFER 
	LD	A6,DWTCHN,A6	LINK TO NEXT DWT IN CHAIN
	RB(NZ)	DCSR10	NOT LAST CONTINUE TO CLEAR 
	LDR*	A6,A15	RELOAD REGS
	LDR*	A2,A15
	XIF
	IFT	STAT=1 
	IFF	STUNIT=1 
	RB	DCSRST
	XIF
	RF	DCSEXI	COMMON EXIT
	EJECT
	 
********************************************************
* 
*	DCSUPR    -     UPDATE COUNTER SPEC WITH PARAMETERS IN
*	                REGS A1 AND POSSIBLY A2 
*	DCSUPS    -    UPDATE COUNTER SPEC WITH PARAMETERS IN 
*	               REGS A1 AND POSSIBLY A2. A7 = DTETAB 
*	DCSUPD    -     UPDATE COUNTER SPEC WITH PARAMETERS IN
*	                PACKET AND POSSIBLY A2
* 
*	THE FOLLOWING ACTIONS ARE TAKEN 
*	-CHECK IF FUNCTION IS CONFIGURED. IF NOT EXIT WITH STATUS 
*	-IF ENTRY DCSUPD USED FETCH PARAMETER-1 FROM PACKET 
*	-UPDATE COUNTER IN SPEC DWT IF PARAMETER WITHIN RANGE 
*	 OF MAX VALUE KEPT IN THE CONTROL WORD OF THE 
*	 STATISTIC BUFFER 
*	IF SUBUNIT STATISTICS IS CONFIGURED 
*	-LOCATE HEAD DWT AND IF EXISTING REPEAT PREVIOUS ACTION 
* 
*	ENTRY:          CF      A15,DCSUPR    A6=DWT A1=PARAM-1 (A2=PARAM-2)
*	         OR 
*	                CF      A15,DCSUPD    A6=DWT
*	                DATA    PARAM-1       (A2=PARAM-2)
* 
*	EXIT:           ABR*    A15           A1=STATUS 
*	                                      0=COMPLETED -1=NOT CONFIG 
*	                                      -2=INDEX ERROR -3=BUFFER ERROR
*	                                      +1=COUNTER OVERFLOWED 
* 
************::************************************************* 
	 
DCSUPR	EQU	*
	IFT	STAT=1 
	STR	A3,A15	SAVE REGS ON SYSTEM STACK 
	STR	A4,A15 
	STR	A5,A15 
	STR	A6,A15 
	RF	DCSU00	CONTINUE AT COMMON POINT 
	XIF
	 
	 
DCSUPS	EQU	*
	IFT	STAT=1 
	STR	A3,A15	SAVE REGS ON SYSTEM STACK 
	STR	A4,A15 
	STR	A5,A15 
	STR	A6,A15 
	LDR	A6,A7	A6 = DTETAB ADDRESS
	RF	DCSU00
	XIF


DCSUPD	EQU	*
	IFT	STAT=1 
	STR	A3,A15	SAVE REGS ON SYSTEM STACK 
	STR	A4,A15 
	STR	A5,A15 
	STR	A6,A15 
	LD*	A1,+12,A15	LOAD PARAM-1 VIA STACK
	LDK	A4,2 
	ADS	A4,+12,A15	ADJUST RETURN POINT 
	 
	 
DCSU00	EQU	*	COMMON POINT FOR DCSUPR DCSUPD 
	LDK	A4,0	PRESET STATUS FOR EXIT
DCSU01	EQU	*
	CF	A15,DCOUNT	INCR COUNTER 
	IFT	STUNIT=1 
	LD	A6,DWTCHD,A6	LINK TO HEAD DWT 
	RF(Z)	DCSU04	NO LINK 
	LDR	A4,A4	CHECK STATUS SOFAR 
	RB(NN)	DCSU01	OVERBLOW KEEP IT 
	RB	DCSU00	CLEAR STATUS AND UPDATE FOR HEAD DWT 
DCSU04	EQU	*
	XIF
	IFT	STAT=1 
	LDR	A1,A4	MOVE STATUS FOR EXIT 
	LDR*	A6,A15	RELOAD REGS
	LDR*	A5,A15
	LDR*	A4,A15
	LDR*	A3,A15
	XIF
	RF	DCSEXI	COMMON EXIT
	EJECT
**********************************************
* 
*	DCSRED    -    READ STATISTIC COUNTERS INTO USER BUFFER 
* 
*	THE FOLLOWING ACTIONS ARE TAKEN 
*	-CHECK IF FUNCTION CONFIGURED. IF NOT EXIT WITH STATUS
*	-CHECK USER PARAMETERS IF NOT CORRECT EXIT
*	-FETCH SYMBOLIC ID FROM DWT AND MOV COUNTERS IF ANY 
*	 IF BUFFER OVERFLOWS EXIT WITH STATUS 
*	IF SUBUNIT STATISTICS IS CONFIGURED 
*	-LOCATE HEAD DWT AND REPEAT LST ACTION
* 
*	ENTRY:       CF        A15,DCSRED    A6=DWT   A8=ECB
* 
*	EXIT:        ABR*      A15           A1=STATUS
*	                                     0=COMPLETED -1=NOT CONFIG
*	                                     -3=BUFFER ERROR
*	                                     IF A1=0 THEN ECB (A8) UPDATED
*	                                     IN ECBEL AND (ECBBA)=COUNTERS
**********************************************************
	 
DCSRED	EQU	*
	IFT	STAT=1 
	STR	A2,A15	SAVE REGS ON SYSTEM STACK 
	STR	A3,A15 
	STR	A4,A15 
	STR	A5,A15 
	STR	A6,A15 
	STR	A7,A15 
	LDR	A8,A8	ANY ECB
	RF(Z)	DCSRER	NO
	LD	A2,ECBBA,A8	ANY BUFFER
	RF(Z)	DCSRER	NO
	LD	A5,ECBRL,A8	ANY LENGTH GIVEN
	RF(Z)	DCSRER	NO
	LD	A4,DWTTAB,A6	TTAB ADDR
	IFT	STUNIT=1 
	LD	A1,DWTCHD,A6	ANY HEAD DWT 
	RF(Z)	DCSR01	NO
	LD	A7,DWTSUB,A6	SYMBOLIC SUB ADDRESS IF ANY
	RF	DCSR02	MOVE COUNTERS
	XIF
	IFT	STAT=1 
DCSR01	EQU	*
	LD	A7,DWTLAD,A6	LOCAL SYMBOLIC DTE ADDRESS 
DCSR02	EQU	*
	RF(Z)	DCSR04	NO SYMBOLIC ID MOVE 0 
	LD	A1,DWTSTB,A6	ANY STAT BUFFER
	RF(Z)	DCSR04	NO MOVE 0 
	ADR	A1,A6	ADD BASE OF DWT
	LD	A3,STWMIX,A1	NO OF COUNTERS 
	RF(Z)	DCSR04	NOE MOVE 0
	SLL	A3,1	COUNTERS TO BYTES 
	ADK	A3,STWCTA	ADD BASE OF COUNTER AREA 
	STR	A7,A1	SAVE SYMBOLIC ID FOR MOVE
	RF	DCSR06	MOVE STAT BUFFER 
DCSR04	EQU	*	NO ID OR STAT BUFFER MOVE ZEROE
	LDK	A3,2	SIZE
	LDKL	A1,DCZERO	BUFFER ADDRESS
DCSR06	EQU	*
	SUR	A5,A3	ANY SPACE IN USER BUFF 
	RF(N)	DCSRER	NO
	CF	A15,MOVSU	MOVE STAT BUFFER TO USER BUFF 
	XIF
	IFT	STAT=1 
	IFT	STUNIT=1 
	LD	A1,DWTCHD,A6	ANY HEAD DWT 
	RF(Z)	DCSR08	NO
	LDR	A6,A1	YES USE IT 
	RB	DCSR01
	XIF	 
	IFT	STAT=1 
	 
DCSR08	EQU	*	ALL MOVE UPDATE ECB
	SU	A2,ECBBA,A8	START OF USER 
	ST	A2,ECBEL,A8	NO OF BYTES 
	LDK	A1,0	STATUS OK 
	RF	DCSREX	EXIT 
	 
DCSRER	EQU	*	BUFFER ERROR E.G NONE OR OVERFLOW
	LDKL	A1,-3	STATUS
DCSREX	EQU	*	EXIT 
	LDR*	A7,A15
	LDR*	A6,A15	RELOAD REGS
	LDR*	A5,A15
	LDR*	A4,A15
	LDR*	A3,A15
	LDR*	A2,A15
	XIF
	RF	DCSEXI	COMMON EXIT
* 
DCZERO	DATA	0	ZEROE BUFFER
	EJECT
********************************************************* 
* 
*	COMMON EXIT FROM FUNCTIONS
* 
********************************************************* 
	 
DCSEXI	EQU	*
	IFT	STAT=0 
	LDKL	A1,-1	STATUS NOT CONFIGURED 
	XIF
	ADKL	A15,4 
	ABR*	A15	RETURN
	EJECT
	IFT	STAT=1 
******************************************************
* 
*	COMMON INTERNAL SUBROUTINES 
* 
******************************************************
	 
	 
*	DCLEAR - CLEAR STATISTIC BUFFER IF LINKED FROM DWT
* 
*	ENTRY:  CF     A15,DCLEAR    A6=DWT 
*	EXIT:   ABR*   A15           A1=0   A6=DWT
DCLEAR	EQU	*
	LD	A2,DWTSTB,A6	ANY STATISTIC BUFFER LINKED
	RF(Z)	DCLEXI	NO
	ADR	A2,A6	ADD BASE OF DWT
	LD	A1,STWMIX,A2	GET MAX INDEX FOR THIS BUFFER
	RF(Z)	DCLEXI	ZEROE 
	CM	STWCST,A2	CLEAR STATUS WORD 
	SLL	A1,1	COUNTER INTO BYTES
	ADK	A2,STWMIX	ADD OFFSET 
	ADR	A2,A1	POINT AT LAST WORD+1 IN BUFF 
DCLOOP	EQU	*
	CMR	A2	CLEAR COUNTER 
	SUK	A2,2	POINTER -2
	SUK	A1,2	ALL CLEARED 
	RB(NZ)	DCLOOP	NO 
DCLEXI	EQU	*
	LDK	A1,0	STATUS
	RF	DCEXIT	COMMON RETURN
	EJECT
*	DCOUNT - INCREMENT COUNTER IN STATISTIC BUFFER IF ANY 
* 
*	ENTRY:  CF      A15,DCOUNT        A6=DWT
*	EXIT:     ABR*      A15         A4= 
DCOUNT	EQU	*
	STR	A1,A15	SAVE PARAM-1
	STR	A2,A15	SAVE PARAM-2 IF ANY 
	LD	A3,DWTSTB,A6	ANY STATISTIC BUFFER 
	RF(Z)	DCONOB	NO
	ADR	A3,A6	ADD BASE OF DWT
	LDR	A5,A1	MOVE PARAMETER-1 
	ANK	A5,/3F	LEAVE COUNTER INDEX 
	SUK	A5,CSINIV	SUBTRACT IMPL BASE VALUE 
	RF(N)	DCOMAX	ERROR PARAM-1 
	CW	A5,STWMIX,A3	PARAM-1 >MAX VALUE IN BUFF 
	RF(NL)	DCOMAX	YES
	ADK	A3,STWCTA	START AFTER CONTROL WORD 
	ADR	A3,A5	IN WORDS TO
	ADR	A3,A5	START OF BUFFER
	SLL	A1,8	CHECK IF PARAM-2 REQ
	RF(N)	DCO010	YES 
	LDK	A2,1	ELSE INCR WITH +1 
DCO010	EQU	*
	IFT	STDBLE=1	DOUBLE WORD COUNTERS
	SLL	A1,1	CHECK IF DOUBLE WORD ARITHM 
	RF(N)	DCODBL 
	XIF
	IFT	STAT=1 
	LDR*	A1,A3	CHECK COUNTER OVERFLOWED
	RF(N)	DCOVRE	YES NO UPDATE 
	ADR	A2,A1	INCREMENT

	RF(O)	DCOVRF	OVERFLOW
	STR	A2,A3	SAVE NEW VALUE 
	RF	DCOEXI
	IFT	STDBLE=1 
DCODBL	EQU	*	DOUBLE WORD ARITHM 
	SUK	A3,2	COUNTER IN WORD-2,WORD
	LDR	A1,A3	CHECK IF OVERFLOWED
	RF(N)	DCOVRE 
	LDK	A1,0	A1=0   A2=INCR VALUE
	DAR*	A3	ADD TO COUNTER 
	RF(O)	DCOVRF	OVERFLOW
	STR	A1,A3	SAVE COUNTER 1ST WRD 
	ST	A2,+2,A3	SAVE COUNTER 2ND WRD 
	RF	DCOEXI	 
	XIF
	IFT	STAT=1 
	 
DCOVRF	EQU	*
	C1RS	A3	SET COUNTER NEG
	LD	A3,DWTSTB,A6	 
	ADR	A3,A6	ADD BASE OF DWT
	ST	A5,STWCST,A3	SAVE INDEX OVERFLOW FLAG 
DCOVRE	EQU	*
	LDK	A4,+1	SET STATUS OVERFLOW
	 
	RF	DCOEXI
	 
DCOMAX	EQU	*	PARAM-1 >MAX INDEX 
	LDKL	A4,-2	SET STATUS
	RF	DCOEXI
DCONOB	EQU	*	NO BUFFER
	LDKL	A4,-3	SET STATUS BUFFER ERROR 
	 
DCOEXI	EQU	*
	LDR*	A2,A15	RELOAD PARAM-2 IF ANY
	LDR*	A1,A15	RELOAD PARAM-1 
	RF	DCEXIT	COMMON RETURN
	EJECT
* 
* 
*	COMMON RETURN FROM INTERNAL SUBS
* 
DCEXIT	EQU	*
	ADKL	A15,4	ADJUST STATUCK POS
	ABR*	A15 
	XIF
	END

Full view