|
|
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: 11174 (0x2ba6)
Notes: pts_type(SC)
Names: »TLDPGM.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/TLDPGM.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/TLDPGM.SC«
IDENT TLDPGM REL 11.0 81-01-26 870105041100 ************************************************************ * * * PHILIPS TERMINAL SYSTEM PTS * * =========================== * * * * TLDPGM - LOAD/UNLOAD PROGRAM PROCESSOR * * * * THIS MODULE CONTAINS THE LKM PROCESSOR USED IN TOSS * * DISC PAGING SYSTEMS FOR RUNTIME PROGRAM LOADING & * * UNLOADING. * * * * REQUEST: LKM * * DATA 25 * * * * REQUEST PARAMETERS: A1=0 - UNLOAD PROGRAM REQUEST * * A1<>0 - FILE NUMBER * * A7,A8 - SECTOR ADDRESS IN FILE * * * * RETURN PARAMETERS: A7 UNCHANGED IF OK * * A7=-1 IF ILLEGAL FILE NUMBER * * * ************************************************************ EJECT ************* * ENTRIES * ************* ENTRY TLDPGM LOAD PROGRAM ENTRY EJECT *************** * EXTERNALS * *************** EXTRN TDISP DISPATCHER ENTRY EXTRN QLTASK QUEUE LOAD TASK ENTRY IN LDTASK EXTRN LD:ECB LDTASK ECB AREA EXTRN LD:BUF LOAD TASK DISC BUFFER EXTRN LD:BUE DISC BUFFER END EXTRN LD:STB LOAD TASK STACK BASE EXTRN LKMQDI QUEUE TASK FOR DISPATCHING EXTRN QMEXIT QUEUE TASK FOR DISPATCHING EXTRN TTB:SP SEGMENT TABLE POINTER IN TTAB EXTRN TTB:SB SEGMENT BLOCK POINTER IN TTAB EXTRN TTB:AP APPL. CONTROL BLOCK ADDRESS EXTRN TTB:SA DISPATCH ADDRESS EXTRN SEG:NS NUMBER OF SEGMENTS IN SEGMENT TABLE EXTRN SEG:FC VOLUME FILE CODE FOR SEGMENTS EXTRN SEG:EL EFFECTIVE LENGTH EXTRN FWTVOL DISPL. TO VOLUME FILE CODE EXTRN FWTEXB FILE EXTENT BASE EXTRN SCTFWT START OF FILE WORK TABLE EXTRN SCTFWL FILE WORK TABLE LENGTH/TASK EXTRN SCTNOS MAXIMUM NUMBER OF FILES/TASK EXTRN SCTTCT ADDRESS TO TASK CONTROL TABLE EXTRN ACBSEG ADDRESS TO SEGMENT TABLE POOL EJECT ************* * EQUATES * ************* ECBFN EQU 1 FILE NUMBER ECBBA EQU 2 BUFFER ADDRESS ECBRL EQU 4 REQUESTED LENGTH ECBEL EQU 6 EFFECTIVE LENGTH ECBRC EQU 8 RETURN CODE ECBCW1 EQU 10 CONTROL WORD 1 ECBCW2 EQU 12 CONTROL WORD 2 * PHYRD EQU /91 PHYSICAL READ NUMSEG EQU 10 DISPL. TO NUMBER OF SEGMENTS EJECT TLDPGM EQU * * * SELECT LOAD/UNLOAD REQUEST * ADK A1,0 RF(NZ) LOAD LOAD PROGRAM REQUEST * * UNLOAD PROGRAM PROCESSING * ULD:10 EQU * LD A1,TTB:SP,A5 GET SEGMENT TABLE POINTER RF(Z) ULD:40 NO PROGRAM LOADED CM TTB:SP,A5 CLEAR SEGMENT TABLE POINTER CM TTB:SB,A5 CLEAR SEGMENT BLOCK POINTER LD A2,SCTTCT GET ADDRESS TO TCTAB LDR* A3,A2 GET LENGTH OF TCTAB ULD:20 EQU * SUK A3,2 DECREMENT LENGTH RF(Z) ULD:30 NO MOORE TASKS ADK A2,2 NEXT ENTRY IN TCTAB LDR* A4,A2 GET NEXT TTAB-ADDRESS LD A4,TTB:SP,A4 GET SEGMENT TABLE POINTER CWR A4,A1 SAME AS FOR CALLING TASK? RB(NE) ULD:20 NO RF ULD:40 ULD:30 EQU * CM SEG:NS,A1 CLEAR NUMBER OF SEGMENTS ULD:40 EQU * ABL LKMQDI QUEUE TASK AND DISPATCH EJECT LOAD EQU * * * ACTIVATE LOAD TASK AT ENTRY LP:LST DISPATCH ADDRESS * LDKL A2,LP:LST DISPATCH ADDRESS LDR A3,A5 SAVE CALLING TASK TTAB-ADDRESS INH CF A15,QLTASK ACTIVATE LOAD TASK ENB ABL TDISP GO TO DISPATCHER EJECT * * LOAD PROGRAM - RUNNING TASK IS LDTASK * LP:LST EQU * LDKL A14,LD:STB LOAD A14 STACK BASE LDR A5,A3 GET CALLING TASKS TTAB ST A1,LD:ECB+ECBFN STORE FILE NUMBER IN ECB LD A9,TTB:SA+14,A5 GET DISC ADDRESS BITS 0-15 LD A10,TTB:SA+16,A5 GET DISC ADDRESS BITS 16-30 LD A2,SCTFWT START OF FILE WORK TABLE AREA LP:100 SUK A1,1 FILE WORK TABLE FOUND? RF(Z) LP:200 YES AD A2,SCTFWL NEXT FILE WORK TABLE RB LP:100 LP:200 EQU * LDKL A1,LD:BUF GET BUFFER ADDRESS ST A1,LD:ECB+ECBBA STORE IN ECB LDKL A1,256 REQUESTED LENGTH ST A1,LD:ECB+ECBRL STORE IN ECB CF A14,RDSFM READ FIRST SECTOR LC A6,FWTEXB-1,A2 GET FILE EXTENT BASE (BITS 0-7) ANK A6,/FF ISOLATE ADDRESS LD A11,FWTEXB,A2 GET FILE EXTENT BASE (BITS 8-23) RF(NZ) LP:300 SUK A6,1 LP:300 SUKL A11,1 CF A14,CHIPLD CHECK IF PROGRAM LOADED ADK A1,0 A1=0 IF NO PROGRAM LOADED RF(NZ) LPMEND PROGRAM ALREADY LOADED CF A14,GETFST GET FREE SEGMENT TABLE ADK A1,0 A1=0 IF NO SEGMENT TABLE AVALIABLE RF(Z) REQERR IMPOSSIBLE TO LOAD PROGRAM LC A2,FWTVOL,A2 GET VOLUME FILE CODE SC A2,SEG:FC+1,A1 STORE IN SEGMENT TABLE LD A3,LD:BUF+NUMSEG GET NUMBER OF SEGMENTS RF(Z) REQERR NO SEGMENTS! CW A3,SCTNOS COMPARE TO MAXIMUM NUMBER/TASK RF(G) REQERR TOO MANY SEGMENTS ST A3,SEG:NS,A1 STORE CURRENT NUMBER OF SEGMENTS LDKL A2,LD:BUF+NUMSEG START OF SEGMENT BLOCKS * * STORE BLOCK 0 * LDKL A4,/8400 STATUS FOR SEGMENT 0 STR A4,A1 STORE STATUS CM 2,A1 CLEAR STATUS/DISC ADDRESS BIT 0-7 CM 6,A1 CLEAR PAGE BLOCK ADDRESS ADK A1,8 START OF SEGMENT ONE * * INIT SEGMENT BLOCKS * I:SBLK SUK A3,1 RF(N) LPMEND NO MOORE SEGMENTS! CF A14,GETWSG GET DISC ADDRESS ANK A4,/FF CLEAR STATUS BYTE ADR A4,A6 RELOCATE DISC ADDRESS STR A4,A1 STORE STATUS AND DISC ADDRESS ADK A1,2 DISC ADDRESS BIT 8-22 CF A14,GETWSG GET DISC ADDRESS BITS 8-22 ADR A4,A11 RELOCATE DISC ADDRESS STR A4,A1 STORE ADK A1,2 SEGMENT LENGTH CF A14,GETWSG GET SEGMENT LENGTH STR A4,A1 STORE CM 2,A1 CLEAR PAGE BLOCK ADDRESS ADK A1,4 NEXT SEGMENT BLOCK RB I:SBLK EJECT LPMEND EQU * ABL QMEXIT QUEUE TASK FOR DISPATCHING * * ERROR ENTRY * REQERR LDKL A7,-1 INDICATE REQUEST ERROR DSKERR ST A7,TTB:SA+14,A5 SET RETURN CODE IN A7 RB LPMEND EJECT ***************** INTERNAL SUBROUTINES ***************** * * GETWSG - GET WORD IN S:GTAB * * ENTRY: A2 - POINTER IN S:GTAB * * EXIT: A2 - ENTRY VALUE + 2 * A4 - CONTENTS IN LOCATION POINTED AT BY A2 * * SUBROUTINES: RDSFM * GETWSG ADK A2,2 INCREMENT S:GTAB POINTER CWK A2,LD:BUE END OF SECTOR? RF(NE) GETRTN NOT YET CF A14,RDSFM READ NEXT SECTOR LDKL A2,LD:BUF START OF BUFFER GETRTN LDR* A4,A2 GET CONTENT RTN A14 EJECT * * RDSFM - READ SECTOR VIA FILE MANAGEMENT * * ENTRY: ECB CONTAINING FILE NUMBER,BUFFER ADDRESS * REQUESTED LENGTH AND SECTOR ADDRESS * * EXIT: SECTOR ADDRESS IS INCREMENTED BY ONE * * WORK REGISTERS: A7,A8 * RDSFM LDK A7,PHYRD LOAD ORDER LDKL A8,LD:ECB LOAD ECB-ADDRESS ST A9,LD:ECB+ECBCW1 STORE DISC ADDRESS BITS 0-15 ST A10,LD:ECB+ECBCW2 STORE DISC ADDRESS BITS 16-30 LKM DATA 15 * * CHECK RETURN CODE * LD A7,LD:ECB+ECBRC GET RETURN CODE ANKL A7,/FEFF SKIP RETRY BIT RF(Z) RDSF10 OK! ANK A7,1 BIT 15=DISC NOT OPERABLE NGR A7,A7 TAKE 2'S COMPLEMENT SUK A7,2 SET ERROR RETURN CODE RB DSKERR * * INCREMENT SECTOR ADDRESS * RDSF10 ADKL A10,1 INCR. LEAST SIGN. PART RF(NN) RDSRET OVERFLOW? ADKL A9,1 INCR. MOST SIGN. PART RB(Z) REQERR ADDRESS OVERFLOW XRR A10,A10 RESET CARRY RDSRET RTN A14 EJECT * * * CHIPLD - CHECK IF PROGRAM LOADED * * ENTRY: A6 - FILE EXTENT BASE BITS 0-7 * A11 - FILE EXTENT BASE BITS 8-23 * LD:BUF CONTAINS FIRST SECTOR * * EXIT: A1=0 - PROGRAM NOT LOADED * A1<>0 - SEGMENT TABLE ADDRESS * * WORK REGISTERS: A1,A3,A4,A7,A8 * CHIPLD EQU * LD A7,SCTTCT GET ADDRESS TO TCTAB LDR* A8,A7 GET LENGTH OF TCTAB CHPL10 EQU * SUKL A8,2 MOORE TASKS? RF(Z) CHPL50 NO! ADK A7,2 NEXT ENTRY IN TCTAB LDR* A1,A7 GET NEXT TTAB-ADDRESS LD A1,TTB:SP,A1 GET SEGMENT TABLE POINTER RB(Z) CHPL10 NO SEGMENT TABLE ATTACHED LD A3,LD:BUF+12 GET DISC ADDRESS BITS 0-7 ANK A3,/FF ISOLATE ADDRESS ADR A3,A6 RELOCATE ADDRESS LD A4,8,A1 GET DISC ADDRESS IN SEGMENT TABLE ANK A4,/FF ISOLATE ADDRESS CWR A3,A4 MOST SIGNIFICANT BITS EQUAL? RB(NE) CHPL10 NO LD A3,LD:BUF+14 GET DISC ADDRESS BITS 8-23 ADR A3,A11 RELOCATE LD A4,10,A1 GET DISC ADDRES IN SEGMENT TABLE CWR A3,A4 LEAST SIGNIFICANT PART EQUAL? RB(NE) CHPL10 NO RF CHPL90 CHPL50 EQU * XRR A1,A1 CLEAR SEGMENT TABLE POINTER CHPL90 EQU * ST A1,TTB:SP,A5 STORE SEGMENT TABLE POINTER RTN A14 EJECT * * GETFST - GET FREE SEGMENT TABLE * * ENTRY: * * EXIT: A1 - SEGMENT TABLE POINTER * * WORK REGISTER: A1,A3 * GETFST EQU * LD A1,TTB:AP,A5 GET ADDRESS TO ACB LD A1,ACBSEG,A1 GET START OF SEGMENT TABLE POOL ADK A1,4 SEGMENT BLOCK 0 GFST10 EQU * LD A3,SEG:NS,A1 GET NUMBER OF SEGMENTS RF(Z) GFST30 NOT USED GFST20 EQU * LD A1,SEG:EL,A1 GET SEGMENT TABLE LINK RF(Z) GFST40 NO MORE SEGMENT TABLES SUK A1,4 ADJUST SEGMENT TABLE POINTER RB GFST10 CHECK NEXT SEGTAB GFST30 EQU * ST A1,TTB:SP,A5 STORE SEGMENT TABLE POINTER GFST40 EQU * RTN A14 RETURN END