|
|
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: 4488 (0x1188)
Notes: pts_type(SC)
Names: »CDVRUT.SC«
└─⟦5c22ed822⟧ Bits:30009675 Philips computer tape "600209"
└─⟦this⟧ »DEN10/CDVRUT.SC«
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
└─⟦this⟧ »DEN10/CDVRUT.SC«
IDENT CDVRUT REL 10.0 80-04-11 81-07-10,EV DK1 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 * 4. CALL CDVDK,STRING,BIN DK1 * * '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 CDVDK DK1 * * MAX FOR RESTART OF WEIGHT 2 11 10 7 DK1 * DIVIDEND FOR TOTAL SUM 10 11 11 11 DK1 EJECT ENTRY CDV10 ENTRY CDV110 ENTRY CDV111 ENTRY CDVDK DK1 * EXTRN I:EVA0 EXTRN I:RT1 * * CALL FORM 16=/F6A1,16 EJECT CDVDK EQU * CDV 11 CHECK, DENMARK DK1 LDK A6,7 RESTART LIMIT DK1 LDK A7,11 DIVIDEND DK1 RF CDV20 DK1 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 CWK A6,7 IF CDVDK DK1 RF(E) CDV45 YES DK1 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 CWK A6,7 IF CDVDK DK1 RF(NE) CDV48 NO, RESTART WEIGHT=1 DK1 LDK A2,2 YES, RESTART WEIGHT=2 DK1 RF CDV50 DK1 CDV48 EQU * DK1 LDK A2,1 RESTART WEIGHT 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