|
|
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: 17440 (0x4420)
Notes: pts_type(SC)
Names: »TPAGAL.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/TPAGAL.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/TPAGAL.SC«
IDENT TPAGAL REL 11.0 81-01-26 870105041100 ************************************************************* * * * PHILIPS TERMINAL SYSTEM PTS * * * * TPAGAL - PAGE HANDLING PROCESSOR * * * * THIS MODULE CONTAINS THE LKM PROCESSOR USED IN TOSS * * MEMORY MANAGEMENT SYSTEMS FOR DYNAMICAL ALLOCATION OF * * LOGICAL CORE MEMORY. * * * * THE FOLLOWING REQUESTS ARE SUPPORTED: * * * * -GET PAGE * * -ATTACH PAGE * * -RELEASE PAGE * * * ************************************************************** EJECT * ************* * ENTRIES * ************* * ENTRY TPAGAL COMMON ENTRY FOR: -GET PAGE -ATTACH PAGE -RELEASE PAGE EJECT * *************** * EXTERNALS * *************** * EXTRN RELPA2 INSERT PAGE IN FREE QUEUE * EXTRN LKMQDI QUEUE TASK AND DISPATCH EXTRN LKMRQE PAGE ERROR ENTRY IN LRPINT EXTRN TTB:AM DISPLACEMENT TO ALLOCATION TABLE EXTRN TTB:MT DISPLACEMENT TO START OF MMU EXTRN TTB:ID DISPLACEMENT TO TASK IDENTIFICATION EXTRN TTB:SA DISPLACEMENT TO TTAB SAVE AREA EXTRN SCTPAG POINTER TO START OF PAGE TABLE EXTRN SCTNOP NUMBER OF PAGES EXTRN PAGQUE ADDRESS TO POINTER TO FREE QUEUE EXTRN PAG:PA DISPLACEMENT TO PAGE ADDRESS EXTRN PAG:QB DISPLACEMENT TO QUEUE LINK BACKWARD EXTRN PAG:SB DISPLACEMENT TO SEGMENT BLOCK ADDRESS EJECT * *************** * CONSTANTS * *************** * LPGSIZ EQU /100 LOGICAL PAGE SIZE MAXATT EQU 100 MAXIMAL NUMBER OF ATTACH REQUEST ON SAME PAGE EJECT * *************************** * CONDITIONAL ASSEMBLY * *************************** * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1 * MMUPAG EQU 0 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION SET * IS OBTAINED BY SETTING CPU852 EQU 0 * CPU852 EQU 0 * * EJECT * * **************************** * FUNCTIONAL DESCRIPTION * **************************** * * * ************** * * GET PAGE * * ************** * * REQUEST: LKM * DATA 26 * * REQUEST PARAMETERS: A7=0 * * RETURN PARAMETERS: A1=PAGE NUMBER * A7=UNCHANGED OR -1 IF NO PAGE IN QUEUE * A8=LOGICAL ADDRESS TO PAGE * * FUNCTION: IF NUMBER OF FREE PAGES IS LESS THAN TWO, * PAGE ERROR IS INDICATED AND THE REQUEST * IS TERMINATED. * IFT MMUPAG=1 * THE MMU TABLE BIT MAP IS EXAMINED FOR FREE SUBENTRIES. * WHEN ONE IS FOUND, THE FREE QUEUE IS SCANNED FOR A FREE * PAGE THAT FITS IN THE FREE SUBENTRY. * IF SUCH A PAGE IS FOUND, IT IS REMOVED FROM THE FREE * QUEUE AND INCLUDED IN THE USER AREA. * THE CORRESPONDING BIT IN THE MMU TABLE BIT MAP * IS SET AS TO INDICATE THAT THE SUBENTRY IS OCCUPIED. * IF NONE OF THE FREE PAGES FITS IN CURRENT SUBENTRY, * THE NEXT FREE SUBENTRY IS TRIED. THIS WILL CONTINUE * UNTIL ALL FREE SUBENTRIES HAS BEEN SCANNED. * EJECT * IF NO PAGE IS FOUND THAT FITS IN ANY SUBENTRY, * OR IF THERE ARE NO FREE PAGES OR FREE SUBENTRIES * AT ALL, PAGE ERROR IS INDICATED AND THE REQUEST * IS TERMINATED. * IFF MMUPAG=1 * THE LAST PAGE IS TAKEN OUT FROM FREE QUEUE * * * FUNCTION: THE LAST PAGE IN FREE QUEUE IS REMOVED. * * IF THERE IS NO FREE PAGES, PAGE ERROR * IS INDICATED AND THE REQUEST IS TERMINATED. * XIF IFF MMUPAG=1 * * THE LAST PAGE IS REMOVED FROM FREE QUEUE XIF * * THE CALLING TASKS ID IS STORED IN FIRST WORD * IN PAGE BLOCK. * THE LOGICAL ADDRESS TO PAGE IS STORED IN * SECOND WORD IN PAGE BLOCK * IF A SEGMENT IS ATTACHED TO THE PAGE,BIT 0 * (SEGMENT LOADED IN CORE) IN STATUS WORD IN * SEGMENT BLOCK IS CLEARED. * THE FOURTH WORD IN PAGE BLOCK IS SUBSEQUENTLY * USED AS COUNTER FOR NUMBER OF TASKS THE PAGE * IS ATTACHED TO. IT IS INITIALLY SET TO ONE. * EJECT * * * ****************** * * RELEASE PAGE * * ****************** * * * REQUEST: LKM * DATA 26 * * REQUEST PARAMETERS: A7=1 * A1=PAGE NUMBER * * RETURN PARAMETERS: A7=UNCHANGED OR -1 IF ILLEGAL PAGE * A8=NUMBER OF REMAINING USERS * * * FUNCTION: PAGE NUMBER IS CHECKED - IF NEGATIVE OR IF * GREATER THAN NUMBER OF AVALIABLE PAGES PAGE * ERROR IS INDICATED AND THE REQUEST IS TERMINATED. * * ATTACH COUNTER (FOURTH WORD IN PAGE BLOCK) IS * DECREMENTED BY ONE. IF IT BECOMES ZERO THE PAGE * THE PAGE IS INSERTED IN THE FREE QUEUE. * IFT MMUPAG=1 * THE CORRESPONDING BIT IN THE MMU TABLE BIT MAP * IS CLEARED. IF NO OTHER BITS CORRESPONDING TO * THE SAME MMU ENTRY ARE SET, THE ADDRESS /FC00 * IS STORED IN THE MMU ENTRY. XIF EJECT * * * ***************** * * ATTACH PAGE * * ***************** * * * REQUEST: LKM * DATA 26 * * REQUEST PARAMETERS: A7=2 * A1=PAGE NUMBER * * RETURN PARAMETERS: A7=UNCHANGED OR -1 IF ILLEGAL PAGE * A8=LOGICAL ADDRESS TO PAGE * * * FUNCTION: PAGE NUMBER IS CHECKED - IF NEGATIVE OR IF * GREATER THAN NUMBER OF AVALIABLE PAGES ERROR * IS INDICATED AND THE REQUEST IS TERMINATED. * IFT MMUPAG=1 * IF PAGE NUMBER IS OK, THE LOGICAL ADDRESS * TO CORRESPONDING PAGE IS FETCHED. * IF THE CORRESPONDING SUBENTRY IN THE MMU TABLE IS FREE, * THE PAGE IS INCLUDED IN THE USER AREA ON THE SAME * LOGICAL ADDRESS.. * THE CORRESPONDING BIT IN THE MMU TABLE BIT MAP * IS SET TO INDICATE THAT THE SUBENTRY IS OCCUPIED. * * IF THE SUBENTRY CORRESPONDING TO THE LOGICAL ADDRESS * IS OCCUPIED, PAGE ERROR IS INDICATED AND THE REQUEST * IS TERMINATED. * XIF * * THE ATTACH COUNTER (FOURTH WORD IN PAGE BLOCK) * IS INCREMENTED BY ONE. * EJECT TPAGAL EQU * ADK A7,0 GET PAGE REQUEST? ABL(NZ) RAPAG NO! * * CHECK NUMBER OF FREE PAGES - IF NOT ENOUGTH, TERMINATE * THE REQUEST WITH A8=0 * LD A6,PAGQUE+2 GET END OF FREE QUEUE CW A6,PAGQUE SAME AS START OF FREE QUEUE? RF(E) PAGERR NOT ENOUGTH FREE PAGES EJECT GETPAG EQU * IFF MMUPAG=1 LDR A1,A6 GET PAGE BLOCK ADDRESS XIF IFT MMUPAG=1 LDR A3,A5 GET TTAB ADDRESS LDR A8,A3 SAVE ADKL A3,TTB:AM START OF ALLOCATION TABLE ADKL A8,TTB:MT END OF ALLOCATION TABLE LDR A10,A8 SAVE GET:10 LDKL A6,/8000 INIT OCCUPATION BIT LDR* A4,A3 GET 16 ALLOCATION BITS XRKL A4,/FFFF ANY FREE SUBENTRY? RF(NZ) GET:40 YES GET:20 ADKL A10,8 INCREMENT MMU TABLE POINTER GET:25 ADK A3,2 INCREMENT ALLOCATION TABLE POINTER CWR A3,A8 END OF ALLOCATION TABLE? RF(E) PAGERR YES! RB GET:10 EJECT GET:40 LDR A2,A4 GET ALLOCATION WORD ANKL A2,/F000 ANY FREE SUBENTRY IN THIS ENTRY? RF(NZ) GET:60 YES GET:50 SLL A4,4 NEXT ENTRY ADKL 10,2 INCREMENT MMU ENTRY POINTER SRL A6,4 ALL ENTRIES CHECKED? RB(E) GET:25 YES RB GET:40 GET:60 LDR* A13,A10 GET CONTENT IN MMU TABLE ENTRY ANKL A13,/FC00 ISOLATE ADDRESS BITS GET:70 ADK A2,0 ENTRY FREE? RF(N) SFQFFP YES RB(Z) GET:50 GET:80 ADKL A13,LPGSIZ NEXT PAGE SLL A2,1 CHECK IF NEXT SUBENTRY FREE RB GET:70 EJECT SFQFFP EQU * * * SEARCH FREE QUEUE FOR PAGE TO FIT IN CURRENT MMU SUBENTRY * * BIT SET IN A1 CORRESPOND TO CURRENT SUBENTRY * A3 - POINTER TO CURRENT ENTRY IN MMU ALLOCATION TABLE * A10 - POINTER TO CURRENT MMU ENTRY * A11 - PHYSICAL PAGE ADDRESS * A13 - LOGICAL PAGE ADDRESS * * PAGQUE CONTAINS POINTER TO FIRST FREE PAGE BLOCK IN QUEUE * PAGQUE+2 CONTAINS POINTER TO LAST FREE PAGE BLOCK IN QUEUE * LD A1,PAGQUE+2 GET POINTER TO LAST PAGE IFT MMUPAG=1 SFQ:10 CWK A1,PAGQUE ANY MOORE PAGE IN QUEUE? RB(E) GET:80 NO! SFQ:20 LD A11,PAG:PA,A1 GET PHYSICAL PAGE ADDRESS SFQ:25 CWK A2,/F000 ALL SUBENTRIES FREE? RF(NE) SFQ:30 NO! LDR A13,A11 GET PHYSICAL PAGE ADDRESS SFQ:30 LDR A12,A13 GET PHYS. PAGE ADDRESS TO FIT IN SUBENTRY XRR A12,A11 SAME PHYSICAL ADDRESS RF(Z) SFQ:45 YES LD A1,PAG:QB,A1 GET BACKWARD POINTER RB SFQ:10 TRY NEXT PAGE XIF EJECT SFQ:45 LD A4,TTB:ID,A5 GET CALLING TASKS ID LD A12,PAG:QB,A1 GET BACKWARD POINTER LDR* A9,A1 GET FORWARD POINTER STR A9,A12 CHANGE FORWARD POINTER ST A12,PAG:QB,A9 CHANGE BACKWARD POINTER STR A4,A1 STORE TASK IDENTIFICATION LD A4,PAG:SB,A1 ANY SEGMENT ATTACHED? RF(Z) SFQ:55 NO! LDKL A2,/7FFF INDICATE NOT LOADED IN CORE ANRS A2,A4 STORE NEW STATUS CM PAG:SB,A1 CLEAR SEGMENT BLOCK ADDRESS EJECT SFQ:55 EQU * IFT MMUPAG=1 ECR A4,A13 GET PAGE ADDRESS ANK A4,3 ISOLATE 1K-DISPLACEMENT SFQ:60 SUK A4,1 MOORE DISPLACEMENT? RF(N) SFQ:70 SRL A6,1 RB SFQ:60 SFQ:70 ADK A7,0 GET PAGE REQUEST? RF(Z) SFQ:80 YES! LDR A4,A6 GET OCCUPATION BIT ANR* A4,A3 SUBENTRY ALREADY OCCUPIED? RF(NZ) PAGERR YES! SFQ:80 ORRS A6,A3 * * INCLUDE PAGE IN USER AREA * LDR A6,A13 GET LOGICAL PAGE ADDRESS ANKL A6,/300 ISOLATE DISPLACEMENT SLA A6,2 PHYSICAL DISPLACEMENT LDR A11,A6 SAVE ANKL A13,/FC00 PHYSICAL 4K-PAGE ADDRESS STR A13,A10 STORE IN MMU TABLE EJECT * * COMPUTE LOGICAL PAGE ADDRESS * SUR A10,A8 BYTE DISPLACEMENT TO CURRENT ENTRY LDR A6,A10 SAVE SLA A6,11 MMU ENTRY IN BITS 0-3 ADR A6,A11 ADD DISPLACEMENT XIF IFF MMUPAG=1 LD A6,PAG:PA,A1 XIF ST A6,TTB:SA+16,A5 SAVE IN TTAB SAVE AREA XIF SUK A7,2 ATTACH PAGE REQUEST? RF(E) SFQ:90 YES! ST A6,PAG:QB,A1 SAVE LOGICAL ADDRESS TO PAGE SFQ:90 IM PAG:SB,A1 INCREMENT ATTACH COUNTER * * COMPUTE PAGE NUMBER * RET:30 SU A1,SCTPAG COMPUTE DISPLACEMENT SRL A1,3 CONVERT TO BLOCK NUMBER RET:40 ST A1,TTB:SA+2,A5 SAVE RET:50 EQU * EJECT * * RESTORE REGISTER A1-A14 * ABL LKMQDI QUEUE TASK AND DISPATCH * * ERROR ENTRY * PAGERR EQU * ABL LKMRQE ERROR ENTRY INLRPINT EJECT RAPAG EQU * LDR A4,A1 NEGATIVE PAGE NUMBER RB(N) PAGERR YES! ERROR! ADK A4,1 ADJUST PAGE NUMBER FOR COMPARE CW A4,SCTNOP PAGE NUMBER > NUMBER OF PAGES? RB(G) PAGERR YES! * * GET PAGE BLOCK ADDRESS * SLL A1,3 MULTIPLY PAGE NUMBER BY EIGHT AD A1,SCTPAG ADD ADDRESS START OF PAGE TABLE LD A11,PAG:PA,A1 GET PHYSICAL PAGE ADDRESS LD A4,PAG:SB,A1 GET ATTACH COUNTER RB(NP) PAGERR NO PREVIOUS GET REQUEST ISSUED! SUK A4,MAXATT SEGMENT BLOCK ADDRESS? RB(G) PAGERR YES;NO GET REQUEST ISSUED! CWK A7,1 RELEASE PAGE REQUEST? RF(E) REL:00 YES! LD A4,TTB:ID,A5 GET CALLING TASKS ID CWR* A4,A1 PAGE ALREADY ATTACHED? RB(E) PAGERR YES! IFF MMUPAG=1 RB SFQ:55 XIF IFT MMUPAG=1 EJECT LD A4,PAG:QB,A1 GET LOGICAL ADDRESS LDR A13,A4 SAVE SRL A4,11 2*(BIT 0-3 OF LOGICAL ADDRESS) LDR A8,A5 GET TTAB ADDRESS ADKL A8,TTB:MT START OF MMU TABLE LDR A10,A8 SAVE ADR A10,A4 SELECT MMU ENTRY XRR* A11,A10 CHECK IF SAME PHYSICAL PAGE ANKL A11,/FC00 ISOLATE PHYSICAL PAGE ADDRESS RB(NE) PAGERR NO;PAGE CANNOT BE ATTACHED! ATT:10 LDR A3,A4 GET BITS 0-1 ANK A3,24 OF LOGICAL ADDRESS SRL A3,2 2*(BIT 0-1 OF LOGICAL ADDRESS) ADR A3,A5 ADD TTAB ADDRESS ADKL A3,TTB:AM SELECT BIT MAP ENTRY ANK A4,6 GET BIT 2-3 OF LOGICAL ADDRESS SRL A4,1 LDKL A6,/8000 INIT OCCUPATION BIT ATT:20 SUK A4,1 SUBENTRY FOUND? RB(N) SFQ:55 YES! SRL A6,4 NEXT SUBENTRY RB ATT:20 EJECT XIF REL:00 EQU * IFT MMUPAG=1 ECR A4,A11 GET PAGE ADDRESS ANK A4,3 ISOLATE DISPLACEMENT IN 4K-PAGE LDR A9,A5 GET TTAB ADDRESS LDR A10,A9 SAVE ADKL A9,TTB:AM START OF MMU ALLOCATION TABLE ADKL A10,TTB:MT START OF MMU TABLE LDR A8,A10 SAVE REL:10 LDKL A2,/8000 INIT SUBENTRY OCCUPATION BIT LDKL A6,/F000 INIT NIBBLE MASK REL:20 LDR A12,A11 GET PHYSICAL 4K-PAGE ADDRESS ANKL A12,/FC00 ISOLATE 4K-PAGE ADDRESS XRR* A12,A10 SAME PHYSICAL PAGE ADDRESS ANKL A12,/FC00 ISOLATE ADDRESS BITS RF(E) REL:40 YES REL:30 ADKL A10,2 NEXT MMU TABLE ENTRY SRL A2,4 NEXT MMU ALLOCATION TABLE ENTRY SRL A6,4 RB(NE) REL:20 CHECK NEXT ADKL A9,2 NEXT WORD IN MMU ALLOCATION TABLE CWR A9,A8 END OF MMU ALLOCATION TABLE? RB(E) PAGERR YES:ERROR! RB REL:10 CHECK NEXT FOUR ENTRIES EJECT REL:40 SUK A4,1 MOORE 1K-DISPLACEMENTS RF(N) REL:50 NO:SUBENTRY FOUND SRL A2,1 NEXT SUBENTRY RB REL:40 REL:50 LDR A3,A2 GET SUBENTRY OCCUPATION BIT ANR* A3,A9 SUBENTRY OCCUPIED? RB(Z) REL:30 NO: TRY NEXT ENTRY C1R A2,A2 COMPLEMENT BITS ANRS A2,A9 CLEAR OCCUPATION BIT ANR* A6,A9 ANY OTHER SUBENTRY IN THIS ENTRY OCCUPIED? RF(NE) REL:60 YES LDKL A6,/FC00 ADDRESS TO LAST 4K-PAGE IN 256 KB MEMORY STR A6,A10 STORE IN FREE MMU TABLE ENTRY XIF REL:60 LD A4,TTB:ID,A5 GET CALLING TASKS ID CWR* A4,A1 GET REQUEST ISSUED BY THIS TASK? RF(NE) REL:70 NO! CMR A1 EXTINGUISH TRACK TO THIS TASK REL:70 SUK A7,2 A7:=-1 ADS A7,PAG:SB,A1 DECREMENT ATTACH COUNTER LD A7,PAG:SB,A1 GET REMAINING NUMBER OF USERS ST A7,TTB:SA+16,A5 SAVE RETURN-PARAMETER RF(NZ) REL:80 * * INSERT PAGE BLOCK IN FREE QUEUE * LDR A3,A1 INH CF A15,RELPA2 INSERT RELEASED PAGE ENB REL:80 ABL RET:50 END