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

⟦fc3204cfa⟧

    Length: 20458 (0x4fea)
    Notes: pts_type(SC)
    Names: »DCADDR.SC«

Derivation

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

PTS(SC)

	IDENT	DCADDR	REL 11.0 81-04-15 870105041100

			=1, DEFDTE 
			810126 
* 
*********************************************** 
* 
*	PHILIPS TERMINAL SYSTEM PTS 
* 
*	DC:ADR : ADDRESS TRANSLATION ROUTINES FOR 
*	         DATA COMMUNICATION SOFTWARE
* 
************************************************
* 
	EJECT
* 
*********************************************** 
* 
*	PROGRAM DESCRIPTION 
* 
*	FOLLOWING SUBROUTINES CAN BE FOUND IN THIS MODULE : 
* 
*	FNDDNA : FINDS A DTE NETWORK ADDRESS FROM A 
*	         SYMBOLIC DTE ADDRESS 
* 
*	FNDDNT : FINDS A DTE NETWORK ADDRESS FROM A 
*	         SYMBOLIC DTE ADDRESS OF A SPECIFIED TYPE 
* 
*	GETDNA : TRANSLATES A SYMBOLIC DTE ADDRESS INTO A 
*	         DTE NETWORK ADDRESS
* 
*	GETDNT : TRANSLATES A SYMBOLIC DTE ADDRESS OF A 
*	         SPECIFIED TYPE INTO A DTE NETWORK ADDRESS
* 
*	GETDSA : TRANSLATES A DTE NETWORK ADDRESS INTO A
*	         SYMBOLIC DTE ADDRESS 
* 
	EJECT
* 
*	GETDST : TRANSLATES A DTE NETWORK ADDRESS OF A SPECIFIED
*	         TYPE INTO A SYMBOLIC DTE ADDRESS 
* 
*	GETSNA : TRANSLATES A SYMBOLIC DTE ADDRESS AND A
*	         SYMBOLIC SUB-ADDRESS INTO A NETWORK SUB-ADDRESS
* 
*	GETSNT : TRANSLATES A SYMBOLIC DTE ADDRESS OF A 
*	         SPECIFIED TYPE AND A SYMBOLIC SUB-ADDRESS
*	         INTO A NETWORK SUB-ADDRESS 
* 
*	GETSSA : TRANSLATES A SYMBOLIC DTE ADDRESS AND A
*	         NETWORK SUB-ADDRESS INTO A SYMBOLIC SUB-ADDRESS
* 
*	GETSST : TRANSLATES A SYMBOLIC DTE ADDRESS OF A SPECIFIED 
*	         TYPE AND A NETWORK SUB-ADDRESS INTO A SYMBOLIC 
*	         SUB-ADDRESS
* 
*        DEFDTE : RE-DEFINES ALREADY EXISTING DTE-NUMBERS IN THE	=1 
*                DC DTE-TABLE POINTED TO BY  S C T D C T  (AKAN)	=1 
*			=1
**********************************************************
* 
	EJECT
* 
*	ENTRIES 
* 
	ENTRY	FNDDNA 
	ENTRY	FNDDNT 
	ENTRY	GETDNA 
	ENTRY	GETDNT 
	ENTRY	GETDSA 
	ENTRY	GETDST 
	ENTRY	GETSNA 
	ENTRY	GETSNT 
	ENTRY	GETSSA 
	ENTRY	GETSST 
	ENTRY	DEFDTE	.	=1
* 
* 
*	EXTERNALS 
* 
	EXTRN	SCTDCT	DC TABLE DISP. IN SYSTEM CONTROL TABLE
	EXTRN	SAVE8	SAVE REG. A1-A8 ON SYSTEM STACK
	EXTRN	RETUR8	RELOAD A1-A8 AND RETURN 
	EXTRN	IHRET8	RELOAD A1-A8 AND RETURN INHIBIT 
	EXTRN	MOVUS	MOVE USERDATA TO SYSTEM-AREA	=1
	EXTRN	DWTTAB	TTAB OFFSET IN DWT'S	=1 
* 
	EJECT
* 
*	CONDITIONAL ASSEMBLY PARAMETERS 
* 
X:A	EQU	1	SUB-ADDRESSING SUPPORTED ?
SUBADR	EQU	X:A	0=NO 1=YES 
* 
CPU852	EQU	1	EXTENDED INSTRUCTION SET IF ZERO 
* 
* 
*	SYSTEM EQUATES
* 
DS	EQU	0	ENTRY INDICATORS 
DN	EQU	1
SS	EQU	2
SN	EQU	3
* 
	EJECT
*			.	=1
* 
*       EQUATES FOR  D E F D T E	=1 
*			.	=1
NUME	EQU	2	NUMBER OF ENTRIES	=1 
PCHAR	EQU	4	PREVIOUS CHAR.	&
ELEN	EQU	5	ENTRY LENGTH 
CODE	EQU	6	ASCII/BCD CODE-FLAG
BLEN	EQU	8	BUFFER-LENGTH	=1 
	EJECT
* 
* 
*	ROUTINES TO GET A SYMBOLIC DTE ADDRESS FROM A 
*	DTE NETWORK ADDRESS (AND TYPE)
* 
************************************************* 
* 
*	INPUT PARAMETERS :
*		A1 = LENGTH OF DTE NETWORK ADDRESS IN SEMI-OCTETS
*		A2 = BUFFER CONTAINING DTE NETWORK ADDRESS 
*		A3 = TYPE (ONLY FOR GETDST ENTRY)
* 
*	CALLING SEQUENCES : 
*		CF A15,GETDSA
*		CF A15,GETDST
* 
*	OUTPUT PARAMETERS : 
*		A1 = SYMBOLIC DTE ADDRESS(OR -1 IF INVALID ADDRESS OR TYPE)
*		A3 = TYPE INDEX (IF GETDST ENTRY,OTHERWISE NOT CHANGED)
* 
GETDSA	EQU	*
	IFT	CPU852=0 
	MSR	8,A15	SAVE REG. A1-A8
	XIF
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE REG. A1-A8 
	XIF
	SUR	A3,A3	CLEAR TYPE INDICATOR 
	RF	GET090
GETDST	EQU	*
	IFT	CPU852=0 
	MSR	8,A15
	XIF
	IFT	CPU852=1 
	CF	A15,SAVE8 
	XIF
	EJECT
* 
GET090	EQU	*
	LDK	A4,DS	ENTRY INDICATOR
GET100	EQU	*
	LDKL	A5,-1	RESET TYPE COUNTER
	LDKL	A8,SCTDCT	POINTER TO DC ADDRESS TABLE ENTRY 
GET110	EQU	*
	LDR*	A8,A8	MORE ENTRIES ?
	RF(Z)	GET330	NO
	ADK	A3,0	TYPE SPECIFIED ?
	RF(Z)	GET120	NO
	CW	A3,4,A8	TYPE FOUND ?
	RB(NE)	GET110	NO 
	ADK	A5,1	STEP TYPE COUNTER 
* 
*	TEST ON ENTRY 
* 
GET120	EQU	*
	ADK	A4,DS	GETDSA/GETDST ENTRY ?
	RF(NZ)	GET220	NO 
* 
*	TEST ON ADDRESS LENGTH
* 
	CC	A1,6,A8	SAME ?
	RB(NE)	GET110	NO,TAKE NEXT 
* 
	EJECT
* 
*	GET ADDRESS PARAMETERS
* 
	ADK	A1,1	CONVERT.. 
	SRC	A1,1	..LENGTH..
	LDR	A4,A1	..INTO.. 
	ANK	A1,/7F	..OCTETS
	LDR	A6,A8	GET ADDRESS WHERE TO.. 
	ADK	A6,7	..FIND LAST OCTET OF..
	ADR	A6,A1	..NETWORK ADDRESS
	ADR	A2,A1	POINTER TO LAST OCTET IN BUFFER
	LDR	A7,A1	SAVE LENGTH
* 
*	COMPARE DTE NETWORK ADDRESS 
* 
GET130	EQU	*
	SUK	A1,1	LAST ONE ?
	RF(N)	GET160	YES 
	SUK	A2,1	NEXT OCTET
	SUK	A6,1	POINTER TO NEXT OCTET 
	LCR	A4,A6	GET ONE DC ADDRESS TABLE OCTET 
	CCR	A4,A2	COMPARE WITH DRIVER BUFFER 
	RB(E)	GET130	EQUAL 
* 
	EJECT
* 
*	COMPARED OCTETS NOT EQUAL 
* 
GET140	EQU	*
	SUR	A7,A1	FIRST ONE ?
	SUK	A7,1	. 
	RF(NZ)	GET150	NO 
	ADK	A4,0	SEMI-OCTET BOUNDARY ? 
	RF(N)	GET150	NO
	ANK	A4,/F0	MASK DRIVER SEMI-OCTET
	LCR	A1,A2	GET DC ADDRESS TABLE OCTET 
	ANK	A1,/F0	MAKE IT SEMI-OCTET
	CWR	A4,A1	EQUAL ?
	RF(E)	GET160	YES 
GET150	EQU	*
	LC	A1,6,A8	RELOAD LENGTH 
	LDK	A4,DS	RELOAD ENTRY INDICATOR 
	RB	GET110	TRY NEXT 
* 
*	COMMON EXIT ROUTINE 
* 
GET160	EQU	*
	LD	A1,2,A8	GET SYMBOLIC DTE ADDRESS
GET170	EQU	*
	LDR	A3,A3	TYPE TESTED ?
	RF(Z)	GET180	NO
	ST	A5,12,A15	SAVE TYPE COUNTER IN A3 
GET180	EQU	*
	ST	A1,16,A15	SAVE A1 
	IFT	CPU852=0 
	ABL	RETUR8	RETURN TO CALLER
	XIF
	IFT	CPU852=1 
	LD	A1,18,A15	GET PSW 
	ANK	A1,/40	ENABLE MODE ? 
	ABL(NZ)	RETUR8	YES 
	ABL	IHRET8	RETURN INHIBIT TO CALLER
	XIF
* 
	EJECT
* 
* 
*	ROUTINES TO FIND OR GET A DTE NETWORK ADDRESS FROM A
*	SYMBOLIC NETWORK ADDRESS (AND TYPE) 
* 
******************************************************
* 
*	INPUT PARAMETERS :
*		A1 = SYMBOLIC DTE ADDRESS
*		A2 = BUFFER (ONLY IF GET... ENTRY) 
*		A3 = TYPE (ONLY IF ...DNT ENTRY) 
* 
*	CALLING SEQUENCES : 
*		CF A15,FNDDNA
*		CF A15,FNDDNT
*		CF A15,GETDNA
*		CF A15,GETDNT
* 
*	OUTPUT PARAMETERS : 
*		A1 = LENGTH OF DTE NETWORK ADDRESS IN SEMI-OCTETS
*		     (OR -1 IF ILLEGAL SYMBOLIC DTE ADDRESS OR TYPE) 
*		A2 = NEXT FREE ADDRESS IN BUFFER (IF GET... ENTRY) 
*		A2 = POINTER TO NETWORK ADDRESS (IF FND... ENTRY)
*		A3 = TYPE INDEX (IF ...DNT ENTRY,OTHERWISE NOT CHANGED)
* 
FNDDNT	EQU	*
	IFT	CPU852=0 
	MSR	8,A15	SAVE REG. A1-A8
	XIF
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE REG. A1-A8 
	XIF
	SUR	A2,A2	CLEAR BUFFER ADDRESS 
	RF	GET210
* 
	EJECT
* 
FNDDNA	EQU	*
	IFT	CPU852=0 
	MSR	8,A15
	XIF
	IFT	CPU852=1 
	CF	A15,SAVE8 
	XIF
	SUR	A2,A2	CLEAR BUFFER ADDRESS 
	RF	GET200
GETDNT	EQU	*
	IFT	CPU852=0 
	MSR	8,A15
	XIF
	IFT	CPU852=1 
	CF	A15,SAVE8 
	XIF
	RF	GET210
GETDNA	EQU	*
	IFT	CPU852=0 
	MSR	8,A15
	XIF
	IFT	CPU852=1 
	CF	A15,SAVE8 
	XIF
GET200	EQU	*
	SUR	A3,A3	CLEAR TYPE INDICATOR 
GET210	EQU	*
	LDK	A4,DN	SET ENTRY INDICATOR
	RB	GET100	RUN
* 
	EJECT
* 
*	TEST ON SYMBOLIC ADDRESS
* 
GET220	EQU	*
	CW	A1,2,A8	FOUND ? 
	RB(NE)	GET110	NO 
* 
*	GET ADDRESS PARAMETERS
* 
	LDK	A1,0 
	LC	A1,6,A8	GET DTE NETWORK ADDRESS LENGTH
	LDR	A7,A1	GET LENGTH 
	ADK	A7,1	CONVERT LENGTH..
	SRC	A7,1	..INTO..
	ANK	A7,/7F	..OCTETS
	LDR	A6,A8	GET ADDRESS WHERE TO FIND..
	ADK	A6,7	..NETWORK ADDRESS 
	IFT	SUBADR=1 
* 
*	TEST ON ENTRY 
* 
	SUK	A4,SS	...DNA/...DNT ENTRY ?
	RF(NN)	GET310	NO 
	XIF
	LDR	A2,A2	NETWORK ADDRESS WANTED ? 
	RF(NZ)	GET240	YES
	LDR	A2,A6
* 
	EJECT
* 
*	SAVE PARAMETERS 
* 
GET230	EQU	*
	ST	A2,14,A15	SAVE NEXT ADDRESS 
	RB	GET170	EXIT 
* 
*	GET NETWORK ADDRESS 
* 
GET240	EQU	*
	SUK	A7,1	READY ? 
	RB(N)	GET230	YES 
	LCR	A4,A6	MOVE ONE.. 
	SCR	A4,A2	..OCTET
	ADK	A2,1 
	ADK	A6,1 
	RB	GET240	TAKE NEXT
* 
	IFT	SUBADR=1 
	EJECT
* 
* 
*	ROUTINES TO GET A SYMBOLIC SUB-ADDRESS FROM A 
*	SYMBOLIC DTE ADDRESS (OF A SPECIFIED TYPE) AND A
*	NETWORK SUB-ADDRESS 
* 
****************************************************
* 
*	INPUT PARAMETERS :
*		A1 = SYMBOLIC DTE ADDRESS
*		A2 = NETWORK SUB-ADDRESS 
*		A3 = TYPE (ONLY IF GETSST ENTRY) 
* 
*	CALLING SEQUENCE :
*		CF A15,GETSSA
*		CF A15,GETSST
* 
*	OUTPUT PARAMETERS : 
*		A1 = SYMBOLIC SUB-ADDRESS(OR -1 IF ILLEGAL SYMBOLIC
*		     DTE ADDRESS,TYPE OR NETWORK SUB-ADDRESS)
*		A3 = TYPE INDEX (ONLY IF GETSST ENTRY,OTHERWISE NOT CHANGED) 
* 
GETSST	EQU	*
	IFT	CPU852=0 
	MSR	8,A15
	XIF
	IFT	SUBADR=1 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE REG. A1-A8 
	XIF
	IFT	SUBADR=1 
	RF	GET300
* 
	EJECT
* 
GETSSA	EQU	*
	IFT	CPU852=0 
	MSR	8,A15
	XIF
	IFT	SUBADR=1 
	IFT	CPU852=1 
	CF	A15,SAVE8 
	XIF
	IFT	SUBADR=1 
	SUR	A3,A3	CLEAR TYPE INDICATION
GET300	EQU	*
	LDK	A4,SS	SET ENTRY INDICATOR
GET305	EQU	*
	RB	GET100	RUN
* 
*	TEST ON ENTRY 
* 
GET310	EQU	*
	ADR	A6,A7	GET # OF ENTRIES IN
	LCR	A7,A6	..SUB-ADDRESS TABLE
	LDR	A4,A4
	RF(NZ)	GET410	NOT GETSSA/GETSST ENTRY
* 
*	GET SYMBOLIC SUB-ADDRESS
* 
	LDK	A1,/30	RESET SYMBOLIC SUB-ADDRESS INDICATOR
GET320	EQU	*
	ADK	A6,1	NEXT ENTRY
	CCR	A2,A6	COMPARE NETWORK SUB-ADDRESSES
	RB(E)	GET170	EXIT !
	ADK	A1,1	STEP SYMBOLIC SUB-ADDRESS 
	SUK	A7,1	MORE ENTRIES ?
	RB(P)	GET320	YES 
	XIF
* 
	EJECT
* 
*	INCORRECT PARAMETERS
* 
	IFT	SUBADR=0 
GETSNA	EQU	*	DUMMY ENTRIES
GETSNT	EQU	*
GETSSA	EQU	*
GETSST	EQU	*
	XIF
GET330	EQU	*
	LDKL	A1,-1	ERROR INDICATION
	RB	GET180	EXIT 
* 
	IFT	SUBADR=1 
	EJECT
* 
* 
*	ROUTINES TO GET A NETWORK SUB-ADDRESS FROM A
*	SYMBOLIC DTE ADDRESS (OF SPECIFIED TYPE) AND A
*	SYMBOLIC SUB-ADDRESS
* 
*************************************************** 
* 
*	INPUT PARAMETERS :
*		A1 = SYMBOLIC DTE ADDRESS
*		A2 = SYMBOLIC SUB-ADDRESS
*		A3 = TYPE (ONLY IF GETSNT ENTRY) 
* 
*	CALLING SEQUENCES : 
*		CF A15,GETSNA
*		CF A15,GETSNT
* 
*	OUTPUT PARAMETERS : 
*		A1 = NETWORK SUB-ADDRESS(OR -1 IF ILLEGAL SYMBOLIC 
*		     DTE ADDRESS,TYPE OR SYMBOLIC SUB-ADDRESS) 
*		A3 = TYPE INDEX (ONLY IF GETSNT ENTRY,OTHERWISE NOT CHANGED) 
* 
GETSNT	EQU	*
	IFT	CPU852=0 
	MSR	8,A15	SAVE REG. A1-A8
	XIF
	IFT	SUBADR=1 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE REG. A1-A8 
	XIF
	IFT	SUBADR=1 
	RF	GET400
* 
	EJECT
* 
GETSNA	EQU	*
	IFT	CPU852=0 
	MSR	8,A15
	XIF
	IFT	SUBADR=1 
	IFT	CPU852=1 
	CF	A15,SAVE8 
	XIF
	IFT	SUBADR=1 
	SUR	A3,A3	CLEAR TYPE INDICATOR 
GET400	EQU	*
	LDK	A4,SN	SET ENTRY INDICATOR
	RB	GET305	RUN
* 
*	GET NETWORK SUB-ADDRESS 
* 
GET410	EQU	*
	ANK	A2,/FF	ONLY ONE BYTE SIGNIFICANT 
	SUK	A2,/2F 
	RB(NP)	GET330	INVALID SYMBOLIC SUB-ADDRESS 
	SUR	A7,A2	SYMBOLIC SUB-ADDRESS WITHIN TABLE ?
	RB(N)	GET330	NO
	ADR	A6,A2	SET POINTER(INDEX STARTS WITH /30) 
	LCR	A1,A6	GET NETWORK SUB-ADDRESS
	RB	GET170	EXIT 
* 
	XIF
	EJECT
*			TO END	=1 
* 
*  D E F D T E
* 
*  RE-DEFINES ALREADY EXISTING DTE-NUMBERS IN DC DTE-TABLE
*  IN THE SYSTEM-AREA POINTED TO BY  S C T D C T. - 
*  - THE OLD NETWORKADDRESS(ES) IS (ARE) SUBSTITUTED BY THE 
*  NEW ONE(S) IN THE BUFFER GIVEN IN THE CALL TO  D E F D T E 
*  (AKAN) 
* 
*********************************************************************** 
* 
* CALLING SEQUENCE: 
* 
*         CF   A15,DEFDTE 
* 
* 
* INPUT PARAMETERS: 
* 
*         A1 = ADDRESS TO USER-TASK NUMBERTABLE 
*         A2 = USER BUFFER ADDR. (TEMP.)
*         A4 = BUFFER LENGTH
*         A6 = DWT ADDRESS
* 
* OUTPUT PARAMETERS:
* 
*         A1 = 0 SUCCESSFUL REQUEST COMPLETION
*         A1 = 1 ENTRY LENGTH ERROR, BUFFER OVERFLOW
*         A1 =-1 INVALID SYMB DTE ADDR/TYPE 
* 
*********************************************************************** 
	EJECT

DEFDTE	EQU	*
	IFT	CPU852=0 
	MSR	8,A15	SAVE 8-REG'S 
	XIF
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE 8-REG'S
	XIF
	EJECT

* 
* MOVE HEAD OF USER BUFFER TO WORKAREA (TEMP.)
* 

	LDK	A3,6 
	LD	A5,DWTTAB,A6	TTAB-ADDRESS OF TASK 
	CF	A15,MOVUS	MOVE FROM USER- TO SYSTEM- AREA 
	LDR	A7,A1	SAVE USER BUFFER-ADDR
	SUK	A2,6 
	LDR	A8,A2	POINTER TO HEAD
	LDR*	A1,A2	GET SYMB. DTE-ADDR
	LC	A3,PCHAR,A8 
	ST	A3,CODE,A8	MOVE ASCII/BCD-FLAG
	LDK	A3,/FF 
	ANS	A3,ELEN,A8	STRIP FLAG FROM ENTRY LENGTH
	LDKL	A3,'RC' 
	CF	A15,FNDDNT	GET POINTER TO FIRST NETW NUMB 
	ABL(N)	GET180	INVALID SYMB DTE-ADDR OR TYPE
	CW	A1,ELEN,A8
	ABL(NE)	DEFD90	ENTRY LENGTHS DIFFER !
	STR	A2,A8	SAVE DC-TABLE ADDR AT HEAD 
	LD	A2,NUME,A8	*
	NGR	A2,A2	* NEGATE NO. OF ENTRIES
	ST	A2,NUME,A8	*
	SUK	A4,10
	ST	A4,BLEN,A8	SAVE LENGTH OF WORK-BUFFER 
	LDR	A3,A1	ENTRY LENGTH 
	LDR	A1,A7	USER BUFFER POINTER
	EJECT

* 
* MOVE PORTION OF USER NUMBER-TABLE TO WORK-BUFFER
* 

DEFD05	EQU	*
	LDK	A4,1	SET "FIRST NIBBLE"-FLAG 
DEFD10	EQU	*
	LDR	A3,A3
	RF(P)	DEFD15	OLD ENTRY 
	IM	NUME,A8 
	RF(Z)	DEFD80	NO MORE ENTRIES 
	LDK	A2,7	* STEP POINTER TO 
	ADR*	A2,A8	* NEXT ENTRY
	ORK	A2,1 
	STR	A2,A8	REM. ENTRY ON WORD ADDR
	LDR*	A7,A2 
	SRL	A7,8	KEEP ENTRY LENGTH 
	CC	A7,ELEN,A8
	RF(NE)	DEFD90	ENTRY LENGTHS DIFFER 
	LD	A7,-7,A2
	RF(Z)	DEFD90	NO MORE ENTRIES IN DC DTE-TABLE 

DEFD15	EQU	*
	LDR	A7,A3
	LDR	A2,A8
	ADK	A2,10	FIX TO-ADDRESS FOR MOVE
	LD	A3,BLEN,A8	LENGTH OF WORK-BUFFER
	LD	A5,DWTTAB,A6	TTAB-ADDR
	CF	A15,MOVUS	MOVE FROM USER TO SYSTEM
	SU	A2,BLEN,A8	POINT AT TOP OF WORK-BUFFER AGAIN
	LDR	A3,A7
	RF(NZ)	DEFD20	STILL OLD ENTRY
	LC	A3,ELEN,A8	ENTRY LENGTH 
DEFD20	EQU	*
	LD	A7,CODE,A8
	RF(Z)	DEFD50	BCD-NUMBERS TO MOVE 
	LD	A7,BLEN,A8	WORK-BUFFER LENGTH 
	EJECT

* 
* CONVERT ASCII-NUMBERS TO BCD WHILE MOVING INTO
* DC DTE-TABLE ENTRIES
* 

DEFD25	EQU	*
	LCR	A5,A2	GET ASCII
	CCK	A5,/2000 
	RF(NE)	DEFD30	NO "SPACE" 
	LDK	A5,/0F	FIX PAD 
DEFD30	EQU	*
	CCK	A5,/2E00 
	RF(NE)	DEFD35	NO "." 
	LDK	A5,/0E	ABBR CALL PREFIX
DEFD35	EQU	*
	ANK	A5,/0F	MASK ONE NIBBLE 
	ADK	A2,1	* 
	SUK	A3,1	* BUMP POINTER AND COUNTERS 
	SUK	A7,1	* 
	NGR	A4,A4	LEFT/RIGHT NIBBLE FLIP-FLOP
	RF(P)	DEFD45	SECOND NIBBLE 
	SLL	A5,4 
	SC	A5,PCHAR,A8	SAVE NIBBLE TEMP
	LDR	A7,A7
	RB(Z)	DEFD10	END OF BUFFER - MOVE AGAIN
DEFD40	EQU	*
	LDR	A3,A3
	RB(P)	DEFD25	NOT END OF ENTRY
	EJECT

DEFD45	EQU	*
	SLL	A5,8	* 
	OR	A5,PCHAR,A8	* MERGE LAST CHAR WITH PREVIOUS 
	SRL	A5,8	* 
	SC*	A5,0,A8	SAVE IN DC DTE-TABLE 
	IMR	A8	* 
	LDR	A7,A7
	RB(Z)	DEFD05	END OF BUFFER 
	LDR	A3,A3
	RB(P)	DEFD25	NOT END OF ENTRY
* 
* END OF ENTRY
* 

	IM	NUME,A8 
	RF(Z)	DEFD80	NO MORE ENTRIES 
	LDK	A5,7	* STEP POINTER TO 
	ADR*	A5,A8	* NEXT ENTRY
	ORK	A5,1 
	STR	A5,A8	REM. ENTRY - WORD ADDR 
	LDR*	A3,A5 
	SRL	A3,8	KEEP ENTRY LENGTH 
	CC	A3,ELEN,A8
	RF(NE)	DEFD90	LENGTHS DIFFER ! 
	LD	A5,-7,A5
	RF(Z)	DEFD90	NO MORE ENTRIES IN DC DTE-TABLE 
	RB	DEFD25	NEXT ENTRY MOVE
	EJECT

* 
* MOVE BCD-NUMBER INTO DC DTE-TABLE 
* 

DEFD50	EQU	*
	LD	A7,BLEN,A8	WORK-BUFFER LENGTH 
DEFD55	EQU	*
	LCR	A5,A2	GET TWO BCD'S (NIBBLES)
	SC*	A5,0,A8	SAVE'M IN DC DTE-TABLE 
	IMR	A8	* 
	ADK	A2,1	* 
	SUK	A3,2	* BUMP POINTER AND COUNTERS 
	SUK	A7,1	* 
	RB(Z)	DEFD10	END OF BUFFER 
	LDR	A3,A3
	RB(P)	DEFD55	NOT END OF ENTRY
	IM	NUME,A8 
	RF(Z)	DEFD80	NO MORE ENTRIES 
	LDK	A5,7	* STEP POINTER TO 
	ADR*	A5,A8	* NEXT ENTRY
	ORK	A5,1 
	STR	A5,A8	REM. ENTRY - WORD ADDR 
	LDR*	A3,A5 
	SRL	A3,8	KEEP ENTRY LENGTH 
	CC	A3,ELEN,A8
	RF(NE)	DEFD90	LENGTHS DIFFER ! 
	LD	A5,-7,A5
	RF(Z)	DEFD90	NO MORE ENTRIES IN DC DTE-TABLE 
	RB	DEFD55	NEXT ENTRY MOVE
	EJECT

DEFD80	EQU	*
	SUR	A1,A1	RETURN OK
	RF	DEFD95
DEFD90	EQU	*
	LDK	A1,1	INVALID ENTRY LENGTH
DEFD95	EQU	*
	ABL	GET180	EXIT TO CALLER
	END

Full view