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

⟦63ff10d0e⟧

    Length: 19802 (0x4d5a)
    Notes: pts_type(SC)
    Names: »RECASM.SC«

Derivation

└─⟦cd4bbebb4⟧ Bits:30009680 Philips computer tape "600221"
    └─⟦this⟧ »ATM/RECASM.SC« 
    └─⟦this⟧ »ATM6601/RECASM.SC« 
    └─⟦this⟧ »BEBATM/RECASM.SC« 

PTS(SC)

	IDENT	RECASM	TABS REL. 1.0.  80/12/08  B.T 
	ENTRY	RECASM	ENTRY TO THE ROUTINE
	ENTRY	RECBUF	SET UP A CHAIN OF BUFFER
	ENTRY	RECITO	COPY DATA OR QUEUE
	ENTRY	RECOPY	ENTRY TO COPY DATA
	ENTRY	RECTCK 
	EXTRN	I:RT1	RETURN TO THE CREDIT 
	EXTRN	T:FDSP	GET ECB IN REG A8 
	EXTRN	I:EVA0	GET DATA POINTER
* 
* 
* 
* 
*       EQUATES 
* 
* 
MODNOP	EQU	X'0001'	MODEM NOT OPERABLE 
NORESP	EQU	X'0002'	NO RESPONSE,NOT IN POLL LIST 
INVATC	EQU	X'0004'	INVALID TC 
PLOVER	EQU	X'0008'	POL LIST OVERFLOW
LIOPEN	EQU	X'0010'	LINE OPEN
LICLOS	EQU	X'0010'	LINE CLOSE 
INACTC	EQU	X'0020'	TC NOT ACTIVE
NOTCPL	EQU	X'0040'	NO TC IN POL LIST
* 
* 
* 
* 
	EJECT
*********************************************************************** 
*     THIS SUBROUTINE ALLOWS THE FOLLOWING FACILITIES ON A            * 
*     REMOTE LINE:                                                    * 
*     ORDER CODE /22:  OPEN LINE                                      * 
*                /24:  CLOSE LINE                                     * 
*                /26:  HALT POLLING                                   * 
*                /27:  START POLLING                                  * 
*                /00:  TEST LINE                                      * 
*                /37:  OPEN TERMINAL COMPUTER                         * 
*                /38:  CLOSE TERMINAL COMPUTER                        * 
*     ENTRY TO THE SUBROUTINE FROM CREDIT APPLICATION PROGRAM         * 
*     IS AS FOLLOWS                                                   * 
*     	CALL	RECASM,DSET,CONTRL VALUE,BINARY VALUE,INDEX         * 
*     RECASM: NAME OF THE SUBROUTINE                                  * 
*     DSET:   DATASET NAME                                            * 
*     CVAL:   X'24'  : CLOSE LINE                                     * 
*             X'26'  : HALT POLLING                                   * 
*             X'00'  : TEST LINE                                      * 
*             X'B7'  : OPEN TERMINAL COMPUTER                         * 
*             X'B8'  : CLOSE TERMINAL COMPUTER                        * 
*             X'27'  * START POLLING	                             * 
*     BINARY ITEM  MUST CONTAIN ONE OF THE FOLLOWING VALUES FOR       * 
*     VARIOUS ORDER CODES                                             * 
*      INDEX: IS BINARY VALUE,UPON THE EXIT OF THE SUBROUTINE ONE     * 
*      OF THE FOLLOWING VALUES IS SET BY THE SUBROUTINE               * 
*		1= COMPLETION OK	ALL ORDER CODES               * 
*		2= MODEM INOPERABLE	ALL ORDER CODES               *
*		OR LINE CLOSED	START POLL, OPEN/CLOSE TC     * 
*		OR POLL LIST OVERFLOW OPEN TC                       *
*		3= LINE OPEN	OPEN LINE                     * 
*		   LINE CLOSED	CLOSE LINE,HALT POLLING       * 
*		   TC INACTIVE	OPEN TC                       * 
*		   NOT IN POLL LIST	CLOSE TC                      *
*		0= OTHER ERROR	TEST LINE,START POLL,OPEN TC  * 
*********************************************************************** 
	EJECT
* 
* 
* 
* 
*        EVENT CONTROL BLOCKS EQUATES 
* 
* 
* 
* 
* 
ECBBA	EQU	2	ECB BUFFER ADDRESS
ECBRL	EQU	4	ECB REQUESTED LENGTH
ECBBL	EQU	6	ECB EFFECTIVE LENGTH
ECBRC	EQU	8	ECB CONTROL WORD
ECBCW	EQU	10	ECB RETURN CODE
* 
* 
* 
* 
* 
* 
* 
*         ORDER CODE EQUATES
* 
* 
ORTEST	EQU	/00	TEST LINE
OROPEN	EQU	/22	OPEN LINE
ORCLOS	EQU	/24	CLOSE LINE 
ORHALT	EQU	/26	HALT POLLING 
ORSTRT	EQU	/27	START POLLING
OROPTC	EQU	/37	OPEN TC
ORCLTC	EQU	/38	CLOSE TC 
* 
* 
* 
	EJECT
* 
RECASM	EQU	*	ENTRY TO THE MODULE
	CF	A14,T:FDSP	GET DATA SET (ECB IN A8) 
	CF	A14,I:EVA0	GET ORDER CODE ADDRESS 
	LDR*	A7,A9	LOAD ORDER CODE IN A7 
	CF	A14,I:EVA0	GET CONTROL VALUE ADDRESS
	LDR*	A9,A9	LOAD CONTROL VALUE
	ST	A9,ECBCW,A8	STORE CONTROL VALUE IN ECB
	LKM
	DATA	1	LINK TO THE MONITOR 
	LD	A2,ECBRC,A8	LOAD RETURN CODE
	RF(Z)	REC105	REQUEST O.K.
	ANK	A7,/7F	TEST LINE 
	RF(Z)	RECW30	TESTLINE
	SUK	A7,OROPEN
	RF(Z)	RECW00	OPEN LINE 
	SUK	A7,ORCLOS-OROPEN 
	RF(Z)	RECW10	CLOSE LINE
	SUK	A7,ORHALT-ORCLOS 
	RF(Z)	RECW20	HALT POLLING
	SUK	A7,ORSTRT-ORHALT 
	RF(Z)	RETCOP	START POLLING 
	RF	RETCCL
REC100	EQU	*
	CF	A14,I:EVA0	GET INDEX POINTER
	LD	A2,ECBCW,A8	LOAD INDEX
	ADK	A2,1 
	STR	A2,A9
	ABL	I:RT1	RETURN TO THE CREDIT INTERPRETER 
REC105	EQU	*
	ST	A2,ECBCW,A8	STORE IN CONTROL
	RB	REC100
	EJECT
* 
* 
* 
RECW00	EQU	*	CONTROL WORD =0, OPEN LINE 
	LDK	A3,1	SET INDEX TO 1
	SUK	A2,MODNOP
	RF(Z)	RECW05	MODEM NOT OPERABLE
	ADK	A3,1	ADD 1 TO INDEX
	SUK	A2,LIOPEN-MODNOP 
	RF(Z)	RECW05	LINE ALREADY OPEN 
	LDKL	A3,-1	SET INDEX TO NEGATIVE 
RECW05	EQU	*
	ST	A3,ECBCW,A8 
	RB	REC100
* 
* 
* 
	EJECT
* 
* 
* 
RECW20	EQU	*	HALT POLLING 
RECW10	EQU	*	CLOSE LINE ERROR ROUTINE 
	LDK	A3,1	SET INDEX TO 1
	SUK	A2,MODNOP
	RB(Z)	RECW05	MODEM NOPERABLE 
	ADK	A3,1 
	SUK	A2,LICLOS-MODNOP 
	RB(Z)	RECW05	LINE ALREADY CLOSED 
	LDKL	A3,-1	SET NEGATIVE INDEX
	RB	RECW05
* 
* 
* 
RECW30	EQU	*	TEST LINE
	RB	RECW00
* 
* 
* 
	EJECT
RETCCL	EQU	*	CLOSE LINE 
RETCOP	EQU	*	OPEN LINE
	LD	A2,ECBRC,A8	GET RETURN CODE 
	LDK	A3,1	SET INDEX TO 1
	SUK	A2,MODNOP	MODEM NOT OPERABLE 
	RF(Z)	RETC10 
	SUK	A2,PLOVER-MODNOP 
	RF(Z)	RETC10	POLL LIST OVERFLOW
	SUK	A2,LICLOS-PLOVER 
	RF(Z)	RETC10	LINE CLOSE
	ADK	A3,1 
	SUK	A2,INACTC-LICLOS 
	RF(Z)	RETC10 
	SUK	A2,NOTCPL-INACTC	NOT IN POLL LIST
	RF(Z)	RETC10 
	LDKL	A3,-1	SET INDEX TO NEGATIVE 
RETC10	EQU	*
	ST	A3,ECBCW,A8 
	ABL	REC100 
	EJECT
************************************************************************* 
*                                                                       * 
*         THIS ROUTINE SETS UP A CHAIN OF 6 BUFFERS.                    * 
*                                                                       * 
*         ENTRY   :-                                                    * 
*                 CALL  RECBUFF,BUF1,BUF2,BUF3,BUF4,BUF5,BUF6           * 
*                                                                       * 
************************************************************************* 
* 
* 
RECBUF	EQU	*	ENTRY TO THE ROUTINE 
	CF	A14,I:EVA0	GET FIRST BUF POINTER
	CM	2,A9	CLEAR TASK ID
	CF	A14,STBUF	STORE BUFFER POINTER
	CF	A14,I:EVA0	GET SECOND BUFFER POINTER
	CM	2,A9	CLEAR TASK ID
	CF	A14,STBUF	STORE BUFFER POINTER
	ABL	I:RT1	RETURN TO THE CREDIT PROGFAM 
* 
* 
*         END OF ROTINE 
* 
* 
	EJECT
* 
*         A ROUTINE TO STORE BUFFER 
* 
*         ENTRY  :- 
*           REGISTER A9 MUST CONTAIN THE BUFFER POINTER 
* 
* 
* 
STBUF	EQU	* 
	LDKL	A2,BUFADR	LOAD BUFFER ANCHOR
STBUF0	EQU	*
	LDR*	A3,A2 
	RF(Z)	STBUF1	END OF CHAIN
	LDR	A2,A3
	RB	STBUF0	TRY AGAIN
STBUF1	EQU	*	END OF CHAIN 
	STR	A9,A2	STORE BUFFER POINTER 
	CMR	A9 
	RTN	A14	EXIT FROM THE ROUTINE
* 
* 
*         END OF THE ROUTINE
* 
* 
* 
	EJECT
************************************************************************
*                                                                      *
*         GET BUFFER FROM THE POOL AND CHECK TASK ID                   *
*                                                                      *
*           ENTRY   :-                                                 *
*                   CF A14,RECGET                                      *
*                                                                      *
*         EXIT    :-                                                   *
*                                                                      *
*                   A9 CONTAINS THE BUFFER ADDRESS OR ZER0             *
*                                                                      *
************************************************************************
* 
* 
RECGET	EQU	*	ENTRY TO THE ROUTINE 
	LDKL	A4,BUFADR	GET BUFFER ANCHOR 
RECG10	EQU	*
	LDR*	A9,A4 
	LD	A3,2,A9	LOAD TASK ID
	LD*	A2,BUF400	LOAD CURRENT TASK ID 
	CWR	A2,A3	CHECK FOR SAME TASK
	RF(E)	REC640	YES SAME TASK 
	SRL	A3,8 
	ANK	A3,/7F 
	ANK	A2,/7F 
	CWR	A2,A3
	RF(E)	RECG20	SAME ID 
	LDR	A4,A9
	RF(Z)	RECG30 
	RB	RECG10
RECG20	EQU	*
	LDR*	A3,A9	REMOVE FROM QUEUE 
	STR	A3,A4
	CMR	A9 
RECG30	EQU	*
	RTN	A14	RETURN TO THE CALLER 
REC640	EQU	*	SAME TASK
	LDKL	A2,/4B31	LOAD 'K1'TASK ID 
	ST	A2,2,A9	STORE IN TASK ID
	RB	RECG20	SEND IT
* 
* 
*         END OF THE ROUTINE
* 
* 
* 
BUFADR	DATA	0	BUFFER ANCHOR POINTER 
BUF100	DATA	0	SOURCE BUFFER ADDRESS 
BUF200	DATA	0	TARGET BUFFER ADDRESS 
BUF300	DATA	0	FLAG/INDEX ADDRESS
BUF400	DATA	0	TASK ID ADDRESS 
* 
* 
* 
	EJECT

************************************************************************
*                                                                      *
*         COPY  DATA FROM  SOURCE  BUFFER  TO  TARGET  BUFFER          *
*                                                                      *
*         ENTRY   :-                                                   *
*                                                                      *
*                   CF  14,COPY                                        *
*                   REGISTER A9 = SOURCE BUFFER POINTER                *
*                   REGISTER A4 ~ TARGET BUFFER POINTER                *
*                                                                      *
*         EXIT     :-                                                  *
*                                                                      *
*                   DATA FROM SOURCE BUFFER ADDRESS WILL BE COPIED     *
*                   TO TARGET BUFFER ADDRESS                           *
*                                                                      *
************************************************************************
* 
* 
* 
COPY	EQU	*	ENTRY TO THE ROUTINE 
	ADKL	A9,2
	LDR	A3,A9	SAVE BUFFER ADDRESS
	LD	A2,2,A9	GET LENGTH
COPY10	EQU	*
	LDR	A2,A2
	RF(NP)	COPY20	END OF COPY
	LDR*	A1,A3 
	STR	A1,A4	STORE DATA 
	ADK	A3,2	UPDATE BUFFER POINTER 
	ADK	A4,2 
	SUK	A2,2	DECREMENT COUNTER 
	RB	COPY10
COPY20	EQU	*
	CMR	A9	CLEAR TASK ID 
	SUKL	A9,2	RESET BUFFER POINTER 
	RTN	A14	EXIT FROM THE ROUTINE
* 
* 
*         END OF COPY ROUTINE 
* 
* 
	EJECT
*********************************************************************** 
*                                                                     * 
*         G E T A N Y  B U F F E R  A D R R E S S                     * 
*                                                                     * 
*         ENTRY   :-                                                  * 
*                   CF A14 GETANY                                     * 
*                                                                     * 
*         EXIT    :-                                                  * 
*                                                                     * 
*                   A9 = BUFFER ADDRESS IF AVAILABLE OR ZERO          * 
*                                                                     * 
*********************************************************************** 
* 
* 
* 
GETANY	EQU	*	ENTRY TO THE ROUTINE 
	LDKL	A4,BUFADR	GET BUFFER ANCHOR 
GETA10	EQU	*
	LDR*	A9,A4 
	RF(Z)	GETA40	NO BUFFER AVAILABLE 
	LD	A2,2,A9	GET TASK ID 
	RF(Z)	GETA20	BUFFER AVAILABLE
	LDR	A4,A9
	RB	GETA10	TRY AGAIN
GETA20	EQU	*
	LDR*	A3,A9	REMOVE FROM THE QUEUE 
	STR	A3,A4
	CMR	A9 
GETA40	EQU	*
	RTN	A14
* 
* 
*         END OF GET FREE BUFFER
* 
* 
* 
	EJECT
* 
* 
* 
RECITO	EQU	*	ENTRY TO THE ROUTINE 
	CF	A14,I:EVA0	GET SOURCE BUFFER ADDRESS
	ST	A9,BUF100 
	CF	A14,I:EVA0	GET TARGET BUFFER ADDRESS
	ST	A9,BUF200 
	CF	A14,I:EVA0	GET BINARY FLAG/INDEX BUFFER ADDRESS 
	ST	A9,BUF300 
	CF	A14,I:EVA0	GET TASK ID ADDRESS
	ST	A9,BUF400 
	LD*	A4,BUF400	LOAD TASK ID 
	LD	A9,BUF100 
	LD*	A3,BUF100	LOAD TASK ID 
	CWR	A3,A4	CHECK IF EQUAL 
	RF(NE)	RECI05	NOT EQUAL
	LDKL	A3,/4B31	'K1' TASK ID 
	ST*	A3,BUF100
RECI05	EQU	*
	CF	A14,RECGET	GET MESSAGE BUFFER IF IN QUEUE 
	LDR	A1,A9
	RF(Z)	RECT20	NOTHING IN THE QUEUE
	LD	A4,BUF200	LOAD TARGET BUFFER ADDRESS
	CF	A14,COPY	COPY DATA
	CF	A14,STBUF	RELEASE BUFFER
	CF	A14,GETANY	GET SPARE BUFFER 
	LDR	A9,A9
	RF(Z)	RECT15	NO BUFFER AVAILABLE 
	LDR	A4,A9
	ADKL	A4,2	SET TARGET BUFFER ADDRESS
	LDR	A7,A9	SAVE BUFFER ADDRESS
	LD	A9,BUF100	LOAD TARGET BUFFER
	SUKL	A9,2	SET SOURCE BUFFER ADDRESS
	CF	A14,COPY
	LDR	A9,A7	RESTORE BUFFER ADDRESS 
	CF	A14,STBUF	RELEASE BUFFER
	LDK	A1,1 
	RF	RECT25
RECT15	EQU	*
	LDK	A1,2 
	RF	RECT25
RECT20	EQU	*
	LD	A9,BUF100 
	LDR*	A4,A9	LOAD TASK ID
	SRL	A4,8 
	ANK	A4,/7F 
	CCK	A4,/52 
	RF(NE)	RECT21
	LDKL	A4,/4B31	'K1'TASK 
	ST*	A4,BUF100	STORE TASK ID
RECT21	EQU	*
	SUKL	A9,2	SET BUFFER-2 
	LD	A4,BUF200	LOAD TARGET BUFFER
	CF	A14,COPY
	LDK	A1,0 
RECT25	EQU	*
	ADK	A1,1 
	ST*	A1,BUF300	ST*ORE INDEX 
	ABL	I:RT1	RETURN TO CREDIT PROGRAM 
* 
* 
* 
	EJECT
* 
* 
* 
RECTCK	EQU	*	ENTRY TO THE ROUTINE 
	CF	A14,I:EVA0	GET TARGET ADDRESS 
	ST	A9,BUF200 
	CF	A14,I:EVA0	GET BINARY INDEX 
	ST	A9,BUF300 
	CF	A14,I:EVA0	GET TASK ID
	ST	A9,BUF400 
	CF	A14,RECGET	GET MESSAGE
	LDK	A1,2 
	LDR	A9,A9
	RB(Z)	RECT25	NOTHING IN THE QUEUE
	LD	A4,BUF200	LOAD TARGET BUFFER
	CF	A14,COPY
	CF	A14,STBUF	RELEASE BUFFER
	LDK	A1,0 
	RB	RECT25	CREDIT PROGRAM 
* 
* 
*         END OF CHECK ROUTINE
*         0 = DATA COPIED FROM QUED BUFFER
*         1 = DATA COPIED FROM QUED BUFFER AND MORE 
*         2 = NO DATA IN QUEUE
* 
* 
	EJECT
************************************************************************* 
*                                                                       * 
*         FUNCTION  :-                                                  * 
*                     TO COPY DATA FROM SOURCE BUFFER TO ONE OF THE     * 
*                     COMMON BUFFERS.                                   * 
*                                                                       * 
*         ENTRY     :-                                                  * 
*                    	CALL	RECOPY,BUFFER,BINARYINDEX                    * 
*                    RECOPY   =  NAME OF THE ROUTINE                    * 
*                    BUFFER   =  DATA BUFFER                            * 
*                    BIN.INDEX=  BINARY ITEM                            * 
*                                                                       * 
*         EXIT      :-                                                  * 
*                    BINARY INDEX IS SET TO 1 IF DATA IS COPIED,        * 
*                    OTHERWISE IT WILL BE SET TO 2.                     * 
*                                                                       * 
************************************************************************* 
* 
* 
RECOPY	EQU	*	ENTRY TO THE ROUTINE 
	CF	A14,I:EVA0	GET SOURCE BUFFER ADDRESS
	ST	A9,BUF100 
	CF	A14,I:EVA0	GET BINARY INDEX 
	ST	A9,BUF300 
	CF	A14,GETANY	GET BUFFER 
	LDK	A1,1	SET INDEX TO 1
	LDR	A4,A9	CHECK FOR BUFFER AVAILABILITY
	RB(Z)	RECT25 
	LDR	A7,A4	SAVE BUFFER POINTER
	ADK	A4,2 
	LD	A9,BUF100	LOAD SOURCE BUFFER
	SUKL	A9,2
	CF	A14,COPY	COPY DATA
	LDR	A9,A7	RESET TARGET BUFFER
	CF	A14,STBUF	RELEASE BUFFER
	LDK	A1,0 
	RB	RECT25	RETURN TO THE CALLING PROGRAM
* 
* 
*        END OF THE ROUTINE 
* 
* 
* 
	END

Full view