|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 4784 (0x12b0)
Notes: pts_type(SC)
Names: »CDVRUT.SC«
└─⟦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«
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