|
|
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: 7984 (0x1f30)
Notes: pts_type(SC)
Names: »ASMRUT.SC«
└─⟦5c22ed822⟧ Bits:30009675 Philips computer tape "600209"
└─⟦this⟧ »TOOL/ASMRUT.SC«
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
└─⟦this⟧ »TOOL/ASMRUT.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