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

⟦182fe476d⟧

    Length: 4784 (0x12b0)
    Notes: pts_type(SC)
    Names: »CDVRUT.SC«

Derivation

└─⟦48601905a⟧ Bits:30009668 Philips computer tape "600121"
    └─⟦this⟧ »S:DE/CDVRUT.SC« 
└─⟦79fbed147⟧ Bits:30009697 Philips computer tape "600414"
    └─⟦this⟧ »S:DE/CDVRUT.SC« 
└─⟦d2a299635⟧ Bits:30009698 Philips computer tape "600415"
    └─⟦this⟧ »S:DE/CDVRUT.SC« 

PTS(SC)

	IDENT	CDVRUT	REL 10.0 80-04-11 
			79-03-12/PEEN
			UPD 79-01-18/PEEN
* 
* 
*  THIS ROUTINE MAKES CDV-CHECK ON A STRING ITEM. 
* 
*   NOTE: THE DIGIT(S) ZERO SHOULD BE INSERTED IN THE STRING
*         AS CHECK DIGIT(S) IF YOU WANT THE ROUTINE TO
*         CREATE CORRECT CHECK- DIGIT(S)
* 
*   INPUT CAN BE OF VARIABLE LENGTH 
* 
* 
*   CALLING FORMAT:  1.  CALL    CDV10,STRING,BIN 
*                    2.  CALL   CDV110,STRING,BIN 
*                    3.  CALL   CDV111,STRING,BIN 
* 
*                       'STRING' = A STRING VARIABLE HOLDING THE
*                                  INPUT TO MAKE CDV-CHECK ON 
*                                   (NOT NUMERIC CHARACTERS ARE SKIPPED)
*                          'BIN' = A BINARY ITEM HOLDING THE CHECK- 
*                                  DIGIT(S) AS OUTPUT IF THE CHECK
*                                  WAS UNSUCCESSFUL 
* 
*        OUTPUT:  CR = 0 OK 
*                 CR = 1 NOT OK 
* 
*                 'STRING' IS UNCHANGED 
*                 'BIN' HOLDS CHECK-DIGIT(S) IF CR=1 (ELSE BIN=0) 
	EJECT
*       USE OF REGISTERS
*    REGISTER  USE
*    A1        COUNTER FOR MULTIPLY 
*    A2        CURRENT WEIGHT 
*    A4        CHARACTER SAVE AREA
*    A5        POINTER TO INPUT STRING
*    A6        MAX VALUE FOR RESTART OF WEIGHT
*    A7        DIVIDEND FOR TOTAL SUM 
*    A10       SUM OF PRODUCTS
* 
* 
*    PARAMETERS FOR CDV 
*    USE                 CONTENTS AT CDV10 CDV110 CDV111
* 
*    MAX FOR RESTART OF WEIGHT         2     11     10
*    DIVIDEND FOR TOTAL SUM            10     11     11 
	EJECT
	ENTRY	CDV10
	ENTRY	CDV110 
	ENTRY	CDV111 
* 
	EXTRN	I:EVA0 
	EXTRN	I:RT1
* 
* 
CALL	FORM	16=/F6A1,16 
	EJECT
CDV110	EQU	*
	LDK	A6,11	LOAD RESTART LIMIT 
CD005	EQU	* 
	LDK	A7,11	LOAD DIVIDEND
	RF	CDV20 
* 
* 
CDV111	EQU	*
	LDK	A6,10	LOAD RESTART LIMIT 
	RB	CD005 
* 
* 
CDV10	EQU	* 
	LDK	A6,2	LOAD RESTART LIMIT
	LDK	A7,10	LOAD DIVIDEND
CDV20	EQU	* 
	CALL	I:EVA0	ADDRESS TO INPUT STRING
	LDK	A2,1	LOAD START WEIGHT 
	SUR	A10,A10	ZERO TO SUM
CDV30	EQU	* 
	CWR	A5,A9
	RF(E)	CDV60	IF FINISHED
	LC	A4,-1,A5	GET CHARACTER
	CCK	A4,'00'
	RF(L)	CDV50	IF NO DIGIT
	CCK	A4,'99'
	RF(G)	CDV50	IF NO DIGIT
	ANK	A4,/F	MASK OUT DIGIT 
* 
*   MULTIPLY AND ACCUMULATE ONE DIGIT 
	LDR	A1,A2	SET WEIGHT 
CDV40	EQU	* 
	ADR	A10,A4	ADD TO SUM
	SUK	A1,1	DECREMENT COUNTER 
	RB(P)	CDV40	IF MORE TO ADD 
	CWR	A2,A6	MULTIPLY BY 2 IN CDV10 
	RF(NE)	CDV45	NO
	SUK	A4,4 
	RF(NP)	CDV45	IF DIGIT SUM LESS THAN 10 
	SUKL	A10,9	ADJUST SUM
CDV45	EQU	* 
	ADK	A2,1	INCREMENT WEIGHT
	CWR	A2,A6
	RF(NG)	CDV50	IF NOT MAX LIMIT
	LDK	A2,1	RESTART WEIGTH
CDV50	EQU	* 
	SUK	A5,1	DECREMENT POINTER 
	RB	CDV30	CONTINUE
* 
CDV60	EQU	* 
	LDK	A6,0	INDICATE OK 
	CWK	A7,10
	RF(NE)	CDV70	IF NOT CDV10
	LDR	A10,A10
	RF(Z)	CDVOUT	IF SUM = 0
CDV70	EQU	* 
	SUR	A10,A7	SUBTRACT 10/11 FROM SUM 
	RB(P)	CDV70	SUM STILL > 0
	RF(Z)	CDVOUT	IF CDV-OK 
	NGR	A10,A10	GET CHECK DIGIT
	LDK	A6,1	INDICATE NOT OK 
CDVOUT	EQU	*
	CALL	I:EVA0	GET CHECK-DIGIT ITEM 
	STR	A10,A9	STORE CHECK-DIGIT IF ERROR
	LD	A1,2,A13	GET STACK BASE 
	SC	A6,-2,A1	STORE CR ON STACK
	ABL	I:RT1
	END

Full view