|
|
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: 7764 (0x1e54)
Notes: pts_type(SC)
Names: »ASOINT.SC«
└─⟦110b7ed5e⟧ Bits:30009664 Philips computer tape "600106"
└─⟦this⟧ »TOSSWORK/ASOINT.SC«
IDENT ASOINT REL 9.2 79-11-16 870105040920 * ************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * ASOINT = SUBROUTINE INTERPRETER * FOR ASSEMBLY OVERLAY AND * MMU PAGING * * ************************************************** * * * A14 STACK CONTENTS AT SUBROUTINE CALLS * * 1: PROGRAM STATUS WORD * 2: RETURN ADDRESS * 3: CURRENT SEGMENT POINTER (=0 IF ROOT) * 4: PARAMETER= 2ND WORD AFTER USER TRAP CODE * 5: PARAMETER= 1ST WORD AFTER USER TRAP CODE * * ************************************************** * * * USED TRAP CODES: * * /6001-/61FF EXCEPT /60FF FOR SUBROUTINE CALLS * /60FF FOR RETURN FROM SUBROUTINE * /6401-/65FF FOR JUMP REQUESTS * * THE LAST 9 BITS POINTS INTO THE SUBROUTINE TABLE * ************************************************** EJECT INPREO * * ********* * ENTRY * ********* * * ENTRY IHINPT TRAP INTERRUPT ADDRESS * * * ************* * EXTERNALS * ************* * * EXTRN UPDLRI UPDATE LRU QUEUE EXTRN SCTLAC LOGICAL ADDRESS OF THE ROOT EXTRN PRUN EXTRN TTB:PW PROGRAM STATUS WORD EXTRN TTB:SB SEGMENT BLOCK ADDRESS EXTRN TTB:LA LAST SEGENT LOAD ADDRESS EXTRN TTB:SA EXTRN TTB:ST EXTRN TTB:MT MMU TABLE ENTRY EXTRN SCTLAP LOGICAL ADDRESS OF PAGES EXTRN SCTSEG ADDRESS TO SEGMENT TABLE EXTRN MONMMU MMU TABLE FOR MONITOR * * CONSTANTS * FUNCTB EQU 0 RELATIVE ADDRESS OF FUNCTION TABLE IN ROOT EJECT INPREO ******************************************************* * * I H I N P T * * INTERPRETER TRAP HANDLER * ******************************************************* * IHINPT EQU * MS 8,-14,A15 SAVE A1 TO A8 ON USER STACK LD A6,4,A15 GET TRAP ADDRESS ELR A5,A6 AND TRAP CODE CWK A5,/60FF RF(E) IHIN10 RETURN REQUEST LDR A1,A5 *** SAVE TRAP CODE IN A5 ANKL A1,/400 RF(NZ) IHIN10 JUMP REQUEST SUKL A14,10 IHIN10 EQU * LDR A1,A15 LDR A2,A14 LDK A3,16 SUK A1,14 SUK A2,14 MVSU A3 SUKL A14,16 ADK A6,2 RETURN ADDRESS EJECT INPREO ****************************************************** * * EXAMINE TRAP CODE * ******************************************************* * LD A4,PRUN TTAB-ADDRESS OF RUNNING PROGRAM LD A8,TTB:LA,A4 *** SAVE CURRENT SEGMENT IN A8 LDR A2,A5 TRAP CODE LDR A1,A2 ANKL A2,/1FF GET INDEX ANKL A1,/400 RF(NE) INT600 EXECUTE JUMP CWK A2,/FF RF(E) INT400 EXECUTE RETURN EJECT ******************************************************* * * EXECUTE SUBROUTINE CALL/ JUMP * ******************************************************* * LD A3,2,A15 GET PROGRAM STATUS WORD ES A3,16+2,A14 SAVE IT ES A6,16+4,A14 STORE RETURN ADDRESS ON STACK ES A8,16+6,A14 STORE SP ON STACK ELR A1,A6 GET PARAMETER 1 ES A1,16+10,A14 SAVE IT ON USER STACK EL A1,2,A6 GET PARAMETER 2 ES A1,16+8,A14 SAVE IT ON USE STACK INT600 EQU * SUK A2,1 ADR A2,A2 DOUBLE INDEX LD A3,SCTLAC LOG ADDRESS OF COMMON PART ADKL A3,FUNCTB ELR A3,A3 FUNCTION TABLE START ADR A2,A3 ELR A2,A2 SUBROUTINE POINTER LDR A3,A2 ANK A2,/FF SUK A2,1 ADR A2,A2 SRL A3,8 RF(Z) INT250 SEGMENT 0 LDR A6,A3 *** SAVE WANTED SEGMENT IN A6 SLL A3,3 AD A3,SCTSEG SEG TABLE POINTER CW A3,TTB:SB,A4 SAME SEG? RF(NE) NEWSEG NO - GET NEW SEGMENT * INT220 EQU * LD A1,SCTLAP LOGICAL ADDRESS OF PAGES ADK A1,8 INT230 EQU * ADR A2,A1 ELR A2,A2 LDR A1,A14 ADKL A14,16 RF RETTUR CONTINUE USER PROGRAM * INT250 EQU * LD A1,SCTLAC LOGICAL ADDRESS OF COMMON PART ADK A2,2 EXCLUDE FIRST WORD OF ROOT RB INT230 * EJECT INPREO ******************************************************* * * EXECUTE RETURN TRAP * ******************************************************* * INT400 EQU * EL A2,16+4,A14 UNMODIFIED RETURN ADRESS EL A3,16+6,A14 GET CURRENT SEGMENT RF(Z) INT500 ROOT SEGMENT CW A3,TTB:SB,A4 SAME SEG ? RF(E) INT500 LDR A6,A3 SU A6,SCTSEG SRL A6,3 *** SAVE WANTED SEGMENT IN A6 RF NEWSEG GET NEW SEGMENT * INT500 EQU * EL A1,16+2,A14 GET PSW FROM USER STACK ST A1,2,A15 LDR A1,A14 ADKL A14,16+10 UPDATE STACK POINTER FOR RETURN RF RETTUR EJECT ******************************************************* * * CONTINUE USER PROGRAM * * A1= POINTER TO SAVE AREA ON A14 STACK * A2= RETURN ADDRESS * A3= CURRENT SEGMENT POINTER * ******************************************************* * RETTUR EQU * ST A2,4,A15 ST A2,TTB:SA,A4 DISPATCH ADDRESS ST A3,TTB:LA,A4 STORE CURRENT SEGM =TTB:SB OR 0 LDR A2,A15 RESTORE A1-A8 ADK A1,2 SUK A2,14 LDK A3,16 MVUS A3 ML 8,-14,A15 RTN A15 RETURN TO USER PROGRAM * EJECT ******************************************************* * * GET REQUESTED SEGMENT * * A5= TRAP CODE * A6= REQUESTED SEGMENT NBR * ******************************************************* * NEWSEG EQU * ADKL A15,4 LDR A7,A6 ENB LKM DATA 9 INH SUKL A15,4 LD A1,TTB:PW,A4 ORK A1,1 SET USER MODE ST A1,2,A15 SET USER MODE ST A1,TTB:PW,A4 CWR A7,A6 SEGMENT CORRECTLY LOADED RF(NE) ERROR NO - ERROR CWK A5,/60FF RB(NE) INT220 END SUBROUTINE CALL/ JUMP RB INT500 END RETURN REQUEST EJECT ******************************************************* * * ERROR HANDLING * * AT ENTRY: * A7= -1. REQUEST ERROR * A7= -2. DISC I/O ERROR * A7= -3. DISC NOT OPERABLE * * A3= SEGMENT POINTER OF REQUESTED SEGMENT * A4= TTAB ADDRESS OF CALLING TASK * A5= TRAP CODE * A6= EXPECTED SEGMENT NBR * A8= SEGMENT POINTER AT CALL * ******************************************************* * ERROR EQU * LD A2,SCTLAC CALCULATE DISPATCH ADDRESS OF ERROR ROUTINE ADKL A2,FUNCTB ELR A2,A2 SUK A2,2 ELR A2,A2 DISPATCH ADDRESS ES A7,14,A14 SET RETURN CODE IN A7 LDR A1,A14 ADKL A14,16+10 DATA /6300 *** JUMP TO DEBUGGER *** LDK A3,0 RB RETTUR * * END