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

⟦808b4c962⟧

    Length: 7984 (0x1f30)
    Notes: pts_type(SC)
    Names: »ASMRUT.SC«

Derivation

└─⟦5c22ed822⟧ Bits:30009675 Philips computer tape "600209"
    └─⟦this⟧ »TOOL/ASMRUT.SC« 
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
    └─⟦this⟧ »TOOL/ASMRUT.SC« 

PTS(SC)

	IDENT	ASMRUT	DATE:81-02-26 
* 
	ENTRY	ZASEB	CONVERT ASCII TO EBCDIC
	ENTRY	ZEBAS	CONVERT EBCDIC TO ASCII
	ENTRY	CDV10	CDV CHECK ON STRING ITEM 
	ENTRY	CDV110	"-
	ENTRY	CDV111	"-
* 
	EXTRN	I:EVA0 
	EXTRN	I:RT1
	EXTRN	TASCII 
	EXTRN	TEBCDIC
* 
CALL	FORM	16=/F6A1,16 
	EJECT
* 
* SUBROUTINE: ZASEB 
* 
* SHORT NAME: ZE
* 
* PURPOSE:    CONVERTS STRING FROM ASCII TO EBCDIC OR VICE VERSA
* 
* CALL:       CALL ZASEB,STR,START,NCH (ASCII->EBCDIC)
*             CALL ZEBAS,STR,START,NCH (EBCDIC->ASCII)
* 
* INPUT:      STR = CHARACTERSTRING TO BE CONVERTED.
*            START= STARTPOS FOR CONVERSION 
*                   FIRST CH.POS=0
*             NCH  = # CH:S TO BE CONVERTED.
*                   =0 -> REST OF STRING CONVERTED
* 
************************************************************************
* 
* 000  ZASEB 'SEQ'
*        GET PARAMETERADDRESSES 
*        CONVERT BYTE FOR BYTE
*      ZASEB 'END'
* 
************************************************************************
	EJECT
POS	EQU	A4	POINTER IN STRING
NCH	EQU	A7	#CH:S
CH	EQU	A5	CHARACTER 
CONVTB	EQU	A6	START OF CONV.TABLE 
WR	EQU	A8	WORK-REGISTER 
SAD	EQU	A9	PARAM.START ADDR.
EAD	EQU	A5	PARAM. END ADDR. 
* 
ZASEB	EQU	* 
	LDKL	CONVTB,TEBCDIC
	RF	ZE000S
* 
ZEBAS	EQU	* 
	LDKL	CONVTB,TASCII 
* 
ZE000S	EQU	*
* 
***   GET PARAMETERADDRESSES
* 
* 
	CALL	I:EVA0	1.PARAM: STRING
	LDR	POS,SAD	POS := START OF STRING 
	LDR	NCH,EAD	NCH := END OF STRING 
* 
	CALL	I:EVA0	2.PARAM: START 
	ADR*	POS,SAD	POS := 1.CH-POS 
	SUR	NCH,POS	NCH := #CH:S TO END-OF-STR 
* 
	CALL	I:EVA0	3.PARAM: NCH 
	LDR*	WR,SAD
	RF(NP)	ZE010	NCH=0?
	LDR	NCH,WR	NCH>0 
ZE010	EQU	* 
	LDK	CH,0	CLEAR CH
	CWK	CONVTB,TEBCDIC 
	RF(NE)	ZE050O
* 
***   CONVERT FROM ASCII TO EBCDIC
* 
ZE050V	EQU	*
	ST	CONVTB,CNVTB1 
ZE100I	EQU	*
	LCR	CH,POS	LOAD CH FROM STRING 
	LC	CH,0,CH	LOAD FROM CONV.TABLE
CNVTB1	EQU	*-1
	SCR	CH,POS	RESTORE NEW BYTE
	ADK	POS,1	STEP POINTER 
	SUK	NCH,1	NCH := NCH - 1 
	RB(P)	ZE100I 
ZE100E	EQU	*
	RF	ZE050E
* 
***   CONVERT FROM EBCDIC TO ASCII
* 
ZE050O	EQU	*
	ST	CONVTB,CNVTB2 
ZE200I	EQU	*
	LCR	CH,POS	LOAD CH FROM STRING 
	LC	CH,0,CH	LOAD FROM CONV.TABLE
CNVTB2	EQU	*-1
	SCR	CH,POS	RESTORE NEW BYTE
	ADK	POS,1	STEP POINTER 
	SUK	NCH,1	NCH := NCH - 1 
	RB(P)	ZE200I 
ZE200E	EQU	*
ZE050E	EQU	*
ZE000E	EQU	*
	ABL	I:RT1	RETURN 
	EJECT
*  790208 
* 
*  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
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 
	CWK	A6,2 
	RF(NE)	CDV45	RESTART LIMIT =/= 2 
	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 
	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
RETUR	ABL	I:RT1 
	END

Full view