|
|
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: 7846 (0x1ea6)
Notes: pts_type(SC)
Names: »TLDSEG.SC«
└─⟦4358b8014⟧ Bits:30009669 Philips computer tape "600124"
└─⟦this⟧ »MON10/TLDSEG.SC«
└─⟦79fbed147⟧ Bits:30009697 Philips computer tape "600414"
└─⟦this⟧ »M:DECE/TLDSEG.SC«
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
└─⟦this⟧ »MON10/TLDSEG.SC«
IDENT TLDSEG REL 10.0 80-03-14 870105041000 * * ************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * TLDSEG = LOAD SEGMENT * * * * ************************************************** * * * THIS MODULE CONTAINS THE LOAD SEGMENT LKM PROCESSOR, * USED IN TOSS MEMORY MANAGEMENT SYSTEMS. * * EJECT TLDSEG * * *********** * ENTRIES * *********** * * ENTRY TLDSEG LOAD SEGMENT ENTRY TLDS15 ENTRY USED BY LDTASK ENTRY TLDS20 ENTRY USED BY LDTASK EJECT TLDSEG * * ************* * EXTERNALS * ************* * * EXTRN PRUN TTAB ADDRESS OF RUNNING PROGRAM EXTRN TDISP DISPATCHER EXTRN LKM030 LKM REQUEST ERROR EXTRN PAG:QB QUEUE LINK BACKWARDS EXTRN SEG:NS NUMBER OF SEGMENTS EXTRN PAG:PA PAGE ADDRESS EXTRN SEG:DS DISC SECTOR ADDRESS EXTRN SEG:PB PAGE BLOCK ADDRESS EXTRN TTB:SA TTAB SAVE AREA EXTRN TTB:MT MMU TABLE EXTRN TTB:CB CURRENT SEGMENT BASE EXTRN TTB:SP SEGMENT TABLE ADDRESS EXTRN TTB:SB SEGMENT BLOCK ADDRESS EXTRN QLTDSK ACTIVATE LDTASK AT ENTRY LT:DSK EXTRN SCTMMP MMU TABLE PAGE ENTRY EXTRN SCTNPE NUMBER OF PAGE ENTRIES EXTRN SCTLAP LOGICAL ADDRESS OF PAGES EJECT TLDSEG * * ***************************************** * * CONDITIONAL ASSEMBLY * ***************************************** * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 1 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 0 * * * A PROGRAM VERSION USING TOSS DISC PAGING * IS OBTAINED BY SETTING DSKPAG EQU 1. * DSKPAG EQU 1 * EJECT TLDSEG * * ********** * TLDSEG * ********** * * * THIS IS THE LOAD SEGMENT LKM PROCESSOR. * * IT IS ENTERED FROM THE LKM HANDLER * WITH THE FOLLOWING PARAMETERS: * * A2 = DISPATCH ADDRESS (NOT UPDATED BY IHLKM) * A5 = TTAB ADDRESS * A7 = SEGMENT NUMBER * * IT RETURNS TO CALLING TASK WITH * THE FOLLOWING PARAMETERS: * * A7 = UNCHANGED IF SEGMENT LOADING IS SUCCESSFUL, ELSE * A7 = -1 IF REQUEST ERROR, ELSE * A7 = -2 IF DISC I/O ERROR, ELSE * A7 = -3 IF DISC NOT OPERABLE * * WHEN REQUESTED SEGMENT IS ALREADY IN CORE: * THE REQUEST WILL NOT GO THROUGH THE DISPATCHER AFTER * COMPLETION, THUS NO TASK SWITCHING WILL BE PERFORMED, * IN PURPOSE TO MAKE THE REQUEST AS FAST AS POSSIBLE. * * WHEN REQUESTED SEGMENT IS NOT IN CORE TLDSEG WILL * ACTIVATE LDTASK WHICH WILL LOAD SEGMENT INTO CORE. * * EJECT TLDSEG * * CHECK VALIDITY OF SEGMENT NUMBER * TLDSEG EQU * LOAD SEGMENT LD A3,TTB:SP,A5 SEGTAB ADDRESS LDR A1,A7 CHECK IF SEGMENT NUMBER < 0 RF(N) TLDERR REQUEST ERROR CW A1,SEG:NS,A3 CHECK IF SEGMENT NUMBER TOO BIG RF(NG) TLDS00 OK * TLDERR LDK A6,/FF INDICATE ERROR ABL LKM030 BRANCH TO LKM REQUEST ERROR * * GET SEGMENT BLOCK ADDRESS. * UPDATE RETURN ADDRESS * TLDS00 EQU * SLL A1,3 ADJUST FOR INDEXING IN SEGTAB ADR A1,A3 ADD SEGTAB ADDRESS ADK A2,2 UPDATE DISPATCH ADDRESS LDR A3,A5 GET TTAB ADDRESS * IFT DSKPAG=0 SUKL A15,4 ADJUST STACKPOINTER ST A2,4,A15 SET DISPATCH ADDRESS ON STACK XIF * ADK A7,0 CHECK SEGMENT NUMBER RF(NZ) TLDS05 NOT SEGMENT 0 ST A7,TTB:SB,A3 RESET SEGMENT BLOCK ADDRESS LD A1,SEG:DS,A1 GET LOGICAL ADDRESS OF SEGMENT 0 * IFT DSKPAG=1 SUKL A15,4 ADJUST STACKPOINTER ST A2,4,A15 SET DISPATCH ADDRESS ON STACK XIF RF TLDS40 * EJECT TLDSEG * * TLDS05 EQU * IFT DSKPAG=1 ST A1,TTB:SB,A3 UPDATE SEGMENT BLOCK ADDRESS LDR* A4,A1 GET SEGMENT STATUS RF(N) TLDS10 SEGMENT LOADED IN CORE ST A2,TTB:SA,A3 CM PRUN * * ACTIVATE LOAD TASK * CF A15,QLTDSK ACTIVATE LOAD TASK AT ENTRY LT:DSK ABL TDISP GO TO DISPATCHER * TLDS10 EQU * SUKL A15,4 ADJUST STACKPOINTER ST A2,4,A15 SET DISPATCH ADDRESS ON STACK XIF * TLDS15 EQU * ENTRY USED BY LDTASK LD A1,SEG:PB,A1 PAGE BLOCK ADDRESS IFT DSKPAG=1 * * REMOVE PAGE BLOCK FROM PAGE QUEUE * LDR* A2,A1 GET QUEUE LINK FORWARD RF(Z) TLDS20 PAGE BLOCK NOT IN QUEUE LD A4,PAG:QB,A1 GET QUEUE LINK BACKWARD CMR A1 RESET QUEUE LINK FORWARD OF REMOVED BLK STR A2,A4 UPDATE QUEUE LINKS ST A4,PAG:QB,A2 XIF * EJECT TLDSEG * * GET PAGE ADDRESS OF REQUESTED SEGMENT * TLDS20 EQU * ENTRY USED BY LDTASK LD A1,PAG:PA,A1 GET PAGE ADDRESS * IFT MMUPAG=1 ECR A2,A1 ANK A2,/FC * * GET PAGE ENTRY/ENTRIES TO UPDATE IN MMU TABLE * AD A3,SCTMMP POINT TO FIRST USED PAGE ENTRY LD A4,SCTNPE GET NUMBER OF PAGE ENTRIES * * UPDATE PAGE ENTRY/ENTRIES * TLDS25 EQU * SCR A2,A3 UPDATE PAGE ENTRY SUK A4,1 RF(NP) TLDS30 NO MORE PAGE ENTRIES ADK A3,2 POINT TO NEXT PAGE ENTRY ADK A2,4 UPDATE PAGE ADDRESS RB TLDS25 * EJECT TLDSEG * * TLDS30 ANKL A1,/300 COMPUTE CURRENT SEGMENT BASE SLL A1,2 OR A1,SCTLAP TL TTB:MT,A5 LOAD MMU REGISTERS * TLDS40 EQU * ES* A1,TTB:CB,A5 UPDATE CURRENT SEGMENT BASE XIF * IFT MMUPAG=0 TLDS40 EQU * ST* A1,TTB:CB,A5 UPDATE CURRENT SEGMENT BASE XIF * IFT CPU852=0 LDR A6,A5 ML 6,TTB:SA+2,A6 RESTORE A1-A6 RTN A15 RETURN TO CALLING TASK XIF * IFT CPU852=1 LD A1,TTB:SA+2,A5 RESTORE A1-A6 LD A2,TTB:SA+4,A5 LD A3,TTB:SA+6,A5 LD A4,TTB:SA+8,A5 LD A6,TTB:SA+12,A5 LD A5,TTB:SA+10,A5 RTN A15 RETURN TO CALLING TASK XIF * * * END