|
|
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: 20458 (0x4fea)
Notes: pts_type(SC)
Names: »DCADDR.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/DCADDR.SC«
IDENT DCADDR REL 11.0 81-04-15 870105041100 =1, DEFDTE 810126 * *********************************************** * * PHILIPS TERMINAL SYSTEM PTS * * DC:ADR : ADDRESS TRANSLATION ROUTINES FOR * DATA COMMUNICATION SOFTWARE * ************************************************ * EJECT * *********************************************** * * PROGRAM DESCRIPTION * * FOLLOWING SUBROUTINES CAN BE FOUND IN THIS MODULE : * * FNDDNA : FINDS A DTE NETWORK ADDRESS FROM A * SYMBOLIC DTE ADDRESS * * FNDDNT : FINDS A DTE NETWORK ADDRESS FROM A * SYMBOLIC DTE ADDRESS OF A SPECIFIED TYPE * * GETDNA : TRANSLATES A SYMBOLIC DTE ADDRESS INTO A * DTE NETWORK ADDRESS * * GETDNT : TRANSLATES A SYMBOLIC DTE ADDRESS OF A * SPECIFIED TYPE INTO A DTE NETWORK ADDRESS * * GETDSA : TRANSLATES A DTE NETWORK ADDRESS INTO A * SYMBOLIC DTE ADDRESS * EJECT * * GETDST : TRANSLATES A DTE NETWORK ADDRESS OF A SPECIFIED * TYPE INTO A SYMBOLIC DTE ADDRESS * * GETSNA : TRANSLATES A SYMBOLIC DTE ADDRESS AND A * SYMBOLIC SUB-ADDRESS INTO A NETWORK SUB-ADDRESS * * GETSNT : TRANSLATES A SYMBOLIC DTE ADDRESS OF A * SPECIFIED TYPE AND A SYMBOLIC SUB-ADDRESS * INTO A NETWORK SUB-ADDRESS * * GETSSA : TRANSLATES A SYMBOLIC DTE ADDRESS AND A * NETWORK SUB-ADDRESS INTO A SYMBOLIC SUB-ADDRESS * * GETSST : TRANSLATES A SYMBOLIC DTE ADDRESS OF A SPECIFIED * TYPE AND A NETWORK SUB-ADDRESS INTO A SYMBOLIC * SUB-ADDRESS * * DEFDTE : RE-DEFINES ALREADY EXISTING DTE-NUMBERS IN THE =1 * DC DTE-TABLE POINTED TO BY S C T D C T (AKAN) =1 * =1 ********************************************************** * EJECT * * ENTRIES * ENTRY FNDDNA ENTRY FNDDNT ENTRY GETDNA ENTRY GETDNT ENTRY GETDSA ENTRY GETDST ENTRY GETSNA ENTRY GETSNT ENTRY GETSSA ENTRY GETSST ENTRY DEFDTE . =1 * * * EXTERNALS * EXTRN SCTDCT DC TABLE DISP. IN SYSTEM CONTROL TABLE EXTRN SAVE8 SAVE REG. A1-A8 ON SYSTEM STACK EXTRN RETUR8 RELOAD A1-A8 AND RETURN EXTRN IHRET8 RELOAD A1-A8 AND RETURN INHIBIT EXTRN MOVUS MOVE USERDATA TO SYSTEM-AREA =1 EXTRN DWTTAB TTAB OFFSET IN DWT'S =1 * EJECT * * CONDITIONAL ASSEMBLY PARAMETERS * X:A EQU 1 SUB-ADDRESSING SUPPORTED ? SUBADR EQU X:A 0=NO 1=YES * CPU852 EQU 1 EXTENDED INSTRUCTION SET IF ZERO * * * SYSTEM EQUATES * DS EQU 0 ENTRY INDICATORS DN EQU 1 SS EQU 2 SN EQU 3 * EJECT * . =1 * * EQUATES FOR D E F D T E =1 * . =1 NUME EQU 2 NUMBER OF ENTRIES =1 PCHAR EQU 4 PREVIOUS CHAR. & ELEN EQU 5 ENTRY LENGTH CODE EQU 6 ASCII/BCD CODE-FLAG BLEN EQU 8 BUFFER-LENGTH =1 EJECT * * * ROUTINES TO GET A SYMBOLIC DTE ADDRESS FROM A * DTE NETWORK ADDRESS (AND TYPE) * ************************************************* * * INPUT PARAMETERS : * A1 = LENGTH OF DTE NETWORK ADDRESS IN SEMI-OCTETS * A2 = BUFFER CONTAINING DTE NETWORK ADDRESS * A3 = TYPE (ONLY FOR GETDST ENTRY) * * CALLING SEQUENCES : * CF A15,GETDSA * CF A15,GETDST * * OUTPUT PARAMETERS : * A1 = SYMBOLIC DTE ADDRESS(OR -1 IF INVALID ADDRESS OR TYPE) * A3 = TYPE INDEX (IF GETDST ENTRY,OTHERWISE NOT CHANGED) * GETDSA EQU * IFT CPU852=0 MSR 8,A15 SAVE REG. A1-A8 XIF IFT CPU852=1 CF A15,SAVE8 SAVE REG. A1-A8 XIF SUR A3,A3 CLEAR TYPE INDICATOR RF GET090 GETDST EQU * IFT CPU852=0 MSR 8,A15 XIF IFT CPU852=1 CF A15,SAVE8 XIF EJECT * GET090 EQU * LDK A4,DS ENTRY INDICATOR GET100 EQU * LDKL A5,-1 RESET TYPE COUNTER LDKL A8,SCTDCT POINTER TO DC ADDRESS TABLE ENTRY GET110 EQU * LDR* A8,A8 MORE ENTRIES ? RF(Z) GET330 NO ADK A3,0 TYPE SPECIFIED ? RF(Z) GET120 NO CW A3,4,A8 TYPE FOUND ? RB(NE) GET110 NO ADK A5,1 STEP TYPE COUNTER * * TEST ON ENTRY * GET120 EQU * ADK A4,DS GETDSA/GETDST ENTRY ? RF(NZ) GET220 NO * * TEST ON ADDRESS LENGTH * CC A1,6,A8 SAME ? RB(NE) GET110 NO,TAKE NEXT * EJECT * * GET ADDRESS PARAMETERS * ADK A1,1 CONVERT.. SRC A1,1 ..LENGTH.. LDR A4,A1 ..INTO.. ANK A1,/7F ..OCTETS LDR A6,A8 GET ADDRESS WHERE TO.. ADK A6,7 ..FIND LAST OCTET OF.. ADR A6,A1 ..NETWORK ADDRESS ADR A2,A1 POINTER TO LAST OCTET IN BUFFER LDR A7,A1 SAVE LENGTH * * COMPARE DTE NETWORK ADDRESS * GET130 EQU * SUK A1,1 LAST ONE ? RF(N) GET160 YES SUK A2,1 NEXT OCTET SUK A6,1 POINTER TO NEXT OCTET LCR A4,A6 GET ONE DC ADDRESS TABLE OCTET CCR A4,A2 COMPARE WITH DRIVER BUFFER RB(E) GET130 EQUAL * EJECT * * COMPARED OCTETS NOT EQUAL * GET140 EQU * SUR A7,A1 FIRST ONE ? SUK A7,1 . RF(NZ) GET150 NO ADK A4,0 SEMI-OCTET BOUNDARY ? RF(N) GET150 NO ANK A4,/F0 MASK DRIVER SEMI-OCTET LCR A1,A2 GET DC ADDRESS TABLE OCTET ANK A1,/F0 MAKE IT SEMI-OCTET CWR A4,A1 EQUAL ? RF(E) GET160 YES GET150 EQU * LC A1,6,A8 RELOAD LENGTH LDK A4,DS RELOAD ENTRY INDICATOR RB GET110 TRY NEXT * * COMMON EXIT ROUTINE * GET160 EQU * LD A1,2,A8 GET SYMBOLIC DTE ADDRESS GET170 EQU * LDR A3,A3 TYPE TESTED ? RF(Z) GET180 NO ST A5,12,A15 SAVE TYPE COUNTER IN A3 GET180 EQU * ST A1,16,A15 SAVE A1 IFT CPU852=0 ABL RETUR8 RETURN TO CALLER XIF IFT CPU852=1 LD A1,18,A15 GET PSW ANK A1,/40 ENABLE MODE ? ABL(NZ) RETUR8 YES ABL IHRET8 RETURN INHIBIT TO CALLER XIF * EJECT * * * ROUTINES TO FIND OR GET A DTE NETWORK ADDRESS FROM A * SYMBOLIC NETWORK ADDRESS (AND TYPE) * ****************************************************** * * INPUT PARAMETERS : * A1 = SYMBOLIC DTE ADDRESS * A2 = BUFFER (ONLY IF GET... ENTRY) * A3 = TYPE (ONLY IF ...DNT ENTRY) * * CALLING SEQUENCES : * CF A15,FNDDNA * CF A15,FNDDNT * CF A15,GETDNA * CF A15,GETDNT * * OUTPUT PARAMETERS : * A1 = LENGTH OF DTE NETWORK ADDRESS IN SEMI-OCTETS * (OR -1 IF ILLEGAL SYMBOLIC DTE ADDRESS OR TYPE) * A2 = NEXT FREE ADDRESS IN BUFFER (IF GET... ENTRY) * A2 = POINTER TO NETWORK ADDRESS (IF FND... ENTRY) * A3 = TYPE INDEX (IF ...DNT ENTRY,OTHERWISE NOT CHANGED) * FNDDNT EQU * IFT CPU852=0 MSR 8,A15 SAVE REG. A1-A8 XIF IFT CPU852=1 CF A15,SAVE8 SAVE REG. A1-A8 XIF SUR A2,A2 CLEAR BUFFER ADDRESS RF GET210 * EJECT * FNDDNA EQU * IFT CPU852=0 MSR 8,A15 XIF IFT CPU852=1 CF A15,SAVE8 XIF SUR A2,A2 CLEAR BUFFER ADDRESS RF GET200 GETDNT EQU * IFT CPU852=0 MSR 8,A15 XIF IFT CPU852=1 CF A15,SAVE8 XIF RF GET210 GETDNA EQU * IFT CPU852=0 MSR 8,A15 XIF IFT CPU852=1 CF A15,SAVE8 XIF GET200 EQU * SUR A3,A3 CLEAR TYPE INDICATOR GET210 EQU * LDK A4,DN SET ENTRY INDICATOR RB GET100 RUN * EJECT * * TEST ON SYMBOLIC ADDRESS * GET220 EQU * CW A1,2,A8 FOUND ? RB(NE) GET110 NO * * GET ADDRESS PARAMETERS * LDK A1,0 LC A1,6,A8 GET DTE NETWORK ADDRESS LENGTH LDR A7,A1 GET LENGTH ADK A7,1 CONVERT LENGTH.. SRC A7,1 ..INTO.. ANK A7,/7F ..OCTETS LDR A6,A8 GET ADDRESS WHERE TO FIND.. ADK A6,7 ..NETWORK ADDRESS IFT SUBADR=1 * * TEST ON ENTRY * SUK A4,SS ...DNA/...DNT ENTRY ? RF(NN) GET310 NO XIF LDR A2,A2 NETWORK ADDRESS WANTED ? RF(NZ) GET240 YES LDR A2,A6 * EJECT * * SAVE PARAMETERS * GET230 EQU * ST A2,14,A15 SAVE NEXT ADDRESS RB GET170 EXIT * * GET NETWORK ADDRESS * GET240 EQU * SUK A7,1 READY ? RB(N) GET230 YES LCR A4,A6 MOVE ONE.. SCR A4,A2 ..OCTET ADK A2,1 ADK A6,1 RB GET240 TAKE NEXT * IFT SUBADR=1 EJECT * * * ROUTINES TO GET A SYMBOLIC SUB-ADDRESS FROM A * SYMBOLIC DTE ADDRESS (OF A SPECIFIED TYPE) AND A * NETWORK SUB-ADDRESS * **************************************************** * * INPUT PARAMETERS : * A1 = SYMBOLIC DTE ADDRESS * A2 = NETWORK SUB-ADDRESS * A3 = TYPE (ONLY IF GETSST ENTRY) * * CALLING SEQUENCE : * CF A15,GETSSA * CF A15,GETSST * * OUTPUT PARAMETERS : * A1 = SYMBOLIC SUB-ADDRESS(OR -1 IF ILLEGAL SYMBOLIC * DTE ADDRESS,TYPE OR NETWORK SUB-ADDRESS) * A3 = TYPE INDEX (ONLY IF GETSST ENTRY,OTHERWISE NOT CHANGED) * GETSST EQU * IFT CPU852=0 MSR 8,A15 XIF IFT SUBADR=1 IFT CPU852=1 CF A15,SAVE8 SAVE REG. A1-A8 XIF IFT SUBADR=1 RF GET300 * EJECT * GETSSA EQU * IFT CPU852=0 MSR 8,A15 XIF IFT SUBADR=1 IFT CPU852=1 CF A15,SAVE8 XIF IFT SUBADR=1 SUR A3,A3 CLEAR TYPE INDICATION GET300 EQU * LDK A4,SS SET ENTRY INDICATOR GET305 EQU * RB GET100 RUN * * TEST ON ENTRY * GET310 EQU * ADR A6,A7 GET # OF ENTRIES IN LCR A7,A6 ..SUB-ADDRESS TABLE LDR A4,A4 RF(NZ) GET410 NOT GETSSA/GETSST ENTRY * * GET SYMBOLIC SUB-ADDRESS * LDK A1,/30 RESET SYMBOLIC SUB-ADDRESS INDICATOR GET320 EQU * ADK A6,1 NEXT ENTRY CCR A2,A6 COMPARE NETWORK SUB-ADDRESSES RB(E) GET170 EXIT ! ADK A1,1 STEP SYMBOLIC SUB-ADDRESS SUK A7,1 MORE ENTRIES ? RB(P) GET320 YES XIF * EJECT * * INCORRECT PARAMETERS * IFT SUBADR=0 GETSNA EQU * DUMMY ENTRIES GETSNT EQU * GETSSA EQU * GETSST EQU * XIF GET330 EQU * LDKL A1,-1 ERROR INDICATION RB GET180 EXIT * IFT SUBADR=1 EJECT * * * ROUTINES TO GET A NETWORK SUB-ADDRESS FROM A * SYMBOLIC DTE ADDRESS (OF SPECIFIED TYPE) AND A * SYMBOLIC SUB-ADDRESS * *************************************************** * * INPUT PARAMETERS : * A1 = SYMBOLIC DTE ADDRESS * A2 = SYMBOLIC SUB-ADDRESS * A3 = TYPE (ONLY IF GETSNT ENTRY) * * CALLING SEQUENCES : * CF A15,GETSNA * CF A15,GETSNT * * OUTPUT PARAMETERS : * A1 = NETWORK SUB-ADDRESS(OR -1 IF ILLEGAL SYMBOLIC * DTE ADDRESS,TYPE OR SYMBOLIC SUB-ADDRESS) * A3 = TYPE INDEX (ONLY IF GETSNT ENTRY,OTHERWISE NOT CHANGED) * GETSNT EQU * IFT CPU852=0 MSR 8,A15 SAVE REG. A1-A8 XIF IFT SUBADR=1 IFT CPU852=1 CF A15,SAVE8 SAVE REG. A1-A8 XIF IFT SUBADR=1 RF GET400 * EJECT * GETSNA EQU * IFT CPU852=0 MSR 8,A15 XIF IFT SUBADR=1 IFT CPU852=1 CF A15,SAVE8 XIF IFT SUBADR=1 SUR A3,A3 CLEAR TYPE INDICATOR GET400 EQU * LDK A4,SN SET ENTRY INDICATOR RB GET305 RUN * * GET NETWORK SUB-ADDRESS * GET410 EQU * ANK A2,/FF ONLY ONE BYTE SIGNIFICANT SUK A2,/2F RB(NP) GET330 INVALID SYMBOLIC SUB-ADDRESS SUR A7,A2 SYMBOLIC SUB-ADDRESS WITHIN TABLE ? RB(N) GET330 NO ADR A6,A2 SET POINTER(INDEX STARTS WITH /30) LCR A1,A6 GET NETWORK SUB-ADDRESS RB GET170 EXIT * XIF EJECT * TO END =1 * * D E F D T E * * RE-DEFINES ALREADY EXISTING DTE-NUMBERS IN DC DTE-TABLE * IN THE SYSTEM-AREA POINTED TO BY S C T D C T. - * - THE OLD NETWORKADDRESS(ES) IS (ARE) SUBSTITUTED BY THE * NEW ONE(S) IN THE BUFFER GIVEN IN THE CALL TO D E F D T E * (AKAN) * *********************************************************************** * * CALLING SEQUENCE: * * CF A15,DEFDTE * * * INPUT PARAMETERS: * * A1 = ADDRESS TO USER-TASK NUMBERTABLE * A2 = USER BUFFER ADDR. (TEMP.) * A4 = BUFFER LENGTH * A6 = DWT ADDRESS * * OUTPUT PARAMETERS: * * A1 = 0 SUCCESSFUL REQUEST COMPLETION * A1 = 1 ENTRY LENGTH ERROR, BUFFER OVERFLOW * A1 =-1 INVALID SYMB DTE ADDR/TYPE * *********************************************************************** EJECT DEFDTE EQU * IFT CPU852=0 MSR 8,A15 SAVE 8-REG'S XIF IFT CPU852=1 CF A15,SAVE8 SAVE 8-REG'S XIF EJECT * * MOVE HEAD OF USER BUFFER TO WORKAREA (TEMP.) * LDK A3,6 LD A5,DWTTAB,A6 TTAB-ADDRESS OF TASK CF A15,MOVUS MOVE FROM USER- TO SYSTEM- AREA LDR A7,A1 SAVE USER BUFFER-ADDR SUK A2,6 LDR A8,A2 POINTER TO HEAD LDR* A1,A2 GET SYMB. DTE-ADDR LC A3,PCHAR,A8 ST A3,CODE,A8 MOVE ASCII/BCD-FLAG LDK A3,/FF ANS A3,ELEN,A8 STRIP FLAG FROM ENTRY LENGTH LDKL A3,'RC' CF A15,FNDDNT GET POINTER TO FIRST NETW NUMB ABL(N) GET180 INVALID SYMB DTE-ADDR OR TYPE CW A1,ELEN,A8 ABL(NE) DEFD90 ENTRY LENGTHS DIFFER ! STR A2,A8 SAVE DC-TABLE ADDR AT HEAD LD A2,NUME,A8 * NGR A2,A2 * NEGATE NO. OF ENTRIES ST A2,NUME,A8 * SUK A4,10 ST A4,BLEN,A8 SAVE LENGTH OF WORK-BUFFER LDR A3,A1 ENTRY LENGTH LDR A1,A7 USER BUFFER POINTER EJECT * * MOVE PORTION OF USER NUMBER-TABLE TO WORK-BUFFER * DEFD05 EQU * LDK A4,1 SET "FIRST NIBBLE"-FLAG DEFD10 EQU * LDR A3,A3 RF(P) DEFD15 OLD ENTRY IM NUME,A8 RF(Z) DEFD80 NO MORE ENTRIES LDK A2,7 * STEP POINTER TO ADR* A2,A8 * NEXT ENTRY ORK A2,1 STR A2,A8 REM. ENTRY ON WORD ADDR LDR* A7,A2 SRL A7,8 KEEP ENTRY LENGTH CC A7,ELEN,A8 RF(NE) DEFD90 ENTRY LENGTHS DIFFER LD A7,-7,A2 RF(Z) DEFD90 NO MORE ENTRIES IN DC DTE-TABLE DEFD15 EQU * LDR A7,A3 LDR A2,A8 ADK A2,10 FIX TO-ADDRESS FOR MOVE LD A3,BLEN,A8 LENGTH OF WORK-BUFFER LD A5,DWTTAB,A6 TTAB-ADDR CF A15,MOVUS MOVE FROM USER TO SYSTEM SU A2,BLEN,A8 POINT AT TOP OF WORK-BUFFER AGAIN LDR A3,A7 RF(NZ) DEFD20 STILL OLD ENTRY LC A3,ELEN,A8 ENTRY LENGTH DEFD20 EQU * LD A7,CODE,A8 RF(Z) DEFD50 BCD-NUMBERS TO MOVE LD A7,BLEN,A8 WORK-BUFFER LENGTH EJECT * * CONVERT ASCII-NUMBERS TO BCD WHILE MOVING INTO * DC DTE-TABLE ENTRIES * DEFD25 EQU * LCR A5,A2 GET ASCII CCK A5,/2000 RF(NE) DEFD30 NO "SPACE" LDK A5,/0F FIX PAD DEFD30 EQU * CCK A5,/2E00 RF(NE) DEFD35 NO "." LDK A5,/0E ABBR CALL PREFIX DEFD35 EQU * ANK A5,/0F MASK ONE NIBBLE ADK A2,1 * SUK A3,1 * BUMP POINTER AND COUNTERS SUK A7,1 * NGR A4,A4 LEFT/RIGHT NIBBLE FLIP-FLOP RF(P) DEFD45 SECOND NIBBLE SLL A5,4 SC A5,PCHAR,A8 SAVE NIBBLE TEMP LDR A7,A7 RB(Z) DEFD10 END OF BUFFER - MOVE AGAIN DEFD40 EQU * LDR A3,A3 RB(P) DEFD25 NOT END OF ENTRY EJECT DEFD45 EQU * SLL A5,8 * OR A5,PCHAR,A8 * MERGE LAST CHAR WITH PREVIOUS SRL A5,8 * SC* A5,0,A8 SAVE IN DC DTE-TABLE IMR A8 * LDR A7,A7 RB(Z) DEFD05 END OF BUFFER LDR A3,A3 RB(P) DEFD25 NOT END OF ENTRY * * END OF ENTRY * IM NUME,A8 RF(Z) DEFD80 NO MORE ENTRIES LDK A5,7 * STEP POINTER TO ADR* A5,A8 * NEXT ENTRY ORK A5,1 STR A5,A8 REM. ENTRY - WORD ADDR LDR* A3,A5 SRL A3,8 KEEP ENTRY LENGTH CC A3,ELEN,A8 RF(NE) DEFD90 LENGTHS DIFFER ! LD A5,-7,A5 RF(Z) DEFD90 NO MORE ENTRIES IN DC DTE-TABLE RB DEFD25 NEXT ENTRY MOVE EJECT * * MOVE BCD-NUMBER INTO DC DTE-TABLE * DEFD50 EQU * LD A7,BLEN,A8 WORK-BUFFER LENGTH DEFD55 EQU * LCR A5,A2 GET TWO BCD'S (NIBBLES) SC* A5,0,A8 SAVE'M IN DC DTE-TABLE IMR A8 * ADK A2,1 * SUK A3,2 * BUMP POINTER AND COUNTERS SUK A7,1 * RB(Z) DEFD10 END OF BUFFER LDR A3,A3 RB(P) DEFD55 NOT END OF ENTRY IM NUME,A8 RF(Z) DEFD80 NO MORE ENTRIES LDK A5,7 * STEP POINTER TO ADR* A5,A8 * NEXT ENTRY ORK A5,1 STR A5,A8 REM. ENTRY - WORD ADDR LDR* A3,A5 SRL A3,8 KEEP ENTRY LENGTH CC A3,ELEN,A8 RF(NE) DEFD90 LENGTHS DIFFER ! LD A5,-7,A5 RF(Z) DEFD90 NO MORE ENTRIES IN DC DTE-TABLE RB DEFD55 NEXT ENTRY MOVE EJECT DEFD80 EQU * SUR A1,A1 RETURN OK RF DEFD95 DEFD90 EQU * LDK A1,1 INVALID ENTRY LENGTH DEFD95 EQU * ABL GET180 EXIT TO CALLER END