|
|
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: 17522 (0x4472)
Notes: pts_type(SC)
Names: »LDTASK.SC«
└─⟦35fda6e03⟧ Bits:30009701 Philips computer tape "BARCLAY"
└─⟦this⟧ »M:DEMO/LDTASK.SC«
└─⟦5c22ed822⟧ Bits:30009675 Philips computer tape "600209"
└─⟦this⟧ »M:DENJ/LDTASK.SC«
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
└─⟦this⟧ »M:DENJ/LDTASK.SC«
IDENT LDTASK REL 10.0 80-03-14 870105041000 * ************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * LDTASK = LOAD TASK * * * * ************************************************** * * * THIS MODULE CONTAINS THE LOAD TASK * FOR TOSS MEMORY MANAGEMENT SYSTEMS. * * IT CONTAINS TWO ENTRY POINTS: * * - LT:DSK USED IN DISC PAGING SYSTEMS * - LT:SWB USED IN SWAPPABLE WORK BLOCK SYSTEMS * * EJECT LDTASK * * *********** * ENTRIES * *********** * * ENTRY LT:DSK DISC PAGING ENTRY ENTRY LT:SWB SWAPPABLE WORK BLOCK ENTRY ENTRY TTABLD LOAD TASK TTAB ENTRY QLTDSK ACTIVATE LDTASK AT ENTRY LT:DSK ENTRY QLTSWB ACTIVATE LDTASK AT ENTRY LT:SWB ENTRY QLTASK ACTIVATE LDTASK ENTRY LD:ECB LDTASK ECB AREA ENTRY LD:BUF LDTASK BUFFER ENTRY LD:BUE END OF BUFFER ENTRY PQEMTY PAGE QUEUE EMPTY FLAG ENTRY LD:STB LDTASK STACK BASE EJECT LDTASK * * ************* * EXTERNALS * ************* * * EXTRN TLDS15 ENTRY IN TLDSEG EXTRN TLDS20 ENTRY IN TLDSEG EXTRN QMEXIT QUEUE TASK AND EXIT MONITOR TASK EXTRN LKMERR HALT SYSTEM DUE TO FATAL LKM ERROR EXTRN ACTOT ACTIVATE TASK EXTRN RELPA2 RELEASE PAGE EXTRN PAGQUE FREE PAGE QUEUE EXTRN PAG:QB QUEUE LINK BACKWARDS EXTRN PAG:PA PAGE ADDRESS EXTRN PAG:SB SEGMENT BLOCK ADDRESS EXTRN SEG:FC FILE CODE EXTRN SEG:DS DISC SECTOR ADDRESS EXTRN SEG:EL SEGMENT LENGTH EXTRN SEG:PB PAGE BLOCK ADDRESS EXTRN SWB:DS DISC SECTOR ADDRESS OF FIRST COPY EXTRN SWB:EL SWB LENGTH (BYTES) EXTRN SWB:NS SWB LENGTH (SECTORS) EXTRN ECBBA ECB BUFFER ADDRESS EXTRN ECBRL ECB REQUESTED LENGTH EXTRN ECBEL ECB EFFECTIVE LENGTH EXTRN ECBRC ECB RETURN CODE EXTRN ECBCW1 ECB CONTROL WORD 1 EXTRN ECBCW2 ECB CONTROL WORD 2 EXTRN TTB:SA TTAB SAVE AREA EXTRN TTB:MT MMU TABLE EXTRN TTB:CB CURRENT SEGMENT BASE EXTRN TTB:SP SEGTAB ADDRESS * EJECT LDTASK * * EXTRN SCTIPL PROGRAM LOADING DEVICE EXTRN SCTIOE APPLICATION RESTART ADDRESS EXTRN SCTPSZ PAGE SIZE EXTRN SCTLAP LOGICAL ADDRESS OF PAGES EJECT LDTASK * * ***************************************** * * 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 INCLUDING TOSS SWAPPABLE WORK * BLOCKS IS OBTAINED BY SETTING SWPBLK EQU 1. * SWPBLK EQU 0 * EJECT LDTASK * * LDTASK ECB AND BUFFER AREAS * LD:ECB DATA 0,0,0,0,0,0,0 LDTASK ECB AREA * LD:BUF RES 128 INTERMEDIATE BUFFER FOR LOAD TASK LD:BUE EQU * END OF BUFFER * RES 4 LDTASK STACK (TWO LEVELS) LD:STB EQU *-2 LOAD TASK STACK BASE * EJECT LDTASK * * TTABLD (LOAD TASK TTAB) * IFT MMUPAG=1 RES 16 LDTASK MMU TABLE XIF * DATA 0 CURRENT SEGMENT BASE PQEMTY DATA 0 PAGE QUEUE EMPTY FLAG DATA 0 SEGMENT BLOCK ADDRESS * TTABLD EQU * TTABLD ENTRY DATA 0 DISPATCHER QUEUE LINK DATA '#L' TASK IDENTIFICATION DATA 49 PRIORITY LEVEL DATA 0 PENDING POINTER DATA /C4C0 PSW (PROGRAM STATUS WORD) DATA 0 DISPATCH ADDRESS DATA 0,0,0,0,0,0,0 REGISTER SAVE AREA, A1-A14 DATA 0,0,0,0,0,0,0 DATA 2 DEVICE TABLE LENGTH * EJECT LDTASK * * ********** * LT:DSK * ********** * * * LT:DSK PERFORMS LOADING OF DISC RESIDENT SEGMENTS INTO CORE. * * INPUT: A1 = SEGMENT BLOCK ADDRESS * A3 = TTAB ADDRESS OF CALLING TASK * * LT:DSK EQU * LDTASK DISC PAGING ENTRY LDR* A2,A1 SEGMENT STATUS RF(NN) LTD:05 SEGMENT NOT LOADED IN CORE * * UPDATE MMU TABLE FOR CALLING TASK (IF MMU) AND * REMOVE PAGE FROM PAGQUE * LDR A7,A3 SAVE A3 LDR A5,A3 INH CF A15,TLDS15 LDR A5,A7 TTAB ADDRESS OF CALLING TASK ABL QMEXIT QUEUE TASK AND EXIT LDTASK * EJECT LDTASK * * NO PAGE AVAILABLE. PAUSE LDTASK UNTIL RESTARTED * BY RELPAG WHEN PAGE AVAILABLE AGAIN. * LTD:00 EQU * IM PQEMTY INDICATE PAGE QUEUE EMPTY LKM DATA 5 PAUSE LDTASK * * TAKE FIRST PAGE FROM PAGQUE * LTD:05 EQU * LD A2,PAGQUE+2 CWK A2,PAGQUE RB(E) LTD:00 NO PAGE AVAILABLE * EJECT LDTASK * * TAKE FOUND PAGE OUT OF PAGQUE * INH LD A4,PAG:QB,A2 ADDRESS TO NEXT PAGE BLOCK ST A4,PAGQUE+2 UPDATE QUEUE ANCHOR LDR* A5,A2 PAGQUE ADDRESS STR A5,A4 UPDATE QUEUE LINK FORWARD NEXT BLOCK CMR A2 RESET QUEUE LINK FORWARD THIS BLOCK LDKL A6,/4000 SEGMENT UNDER LOADING BIT LD A4,PAG:SB,A2 OLD SEGMENT BLOCK ADDRESS RF(Z) LTD:10 SCR A6,A4 RESET STATUS * LTD:10 EQU * ORRS A6,A1 INDICATE SEGMENT UNDER LOADING ST A2,SEG:PB,A1 SET NEW PAGE BLOCK ADDRESS ST A1,PAG:SB,A2 SET NEW SEGMENT BLOCK ADDRESS * IFT MMUPAG=1 * * UPDATE MMU TABLE FOR CALLING TASK AND LDTASK * LDKL A5,TTABLD LDTASK TTAB ADDRESS MS 3,TTB:SA+2,A5 SAVE A1-A3 IN TTAB SAVE AREA TL TTB:MT,A3 LOAD MMU WITH CALLING TASK TS TTB:MT,A5 STORE IN LDTASK MMU TABLE LD A1,TTB:CB,A3 CURRENT SEGMENT BASE ADDRESS ST A1,TTB:CB,A5 LDR A1,A2 LDR A3,A5 TTAB ADDRESS OF LDTASK CF A15,TLDS20 UPDATE MMU TABLE FOR LDTASK TS TTB:MT,A3 STORE NEW MMU TABLE FOR CALLING TASK XIF * EJECT LDTASK * * PREPARE FOR READING OF SEGMENT * ENB LD A4,SCTPSZ PAGE SIZE SRL A4,1 CONVERT LENGTH TO WORDS LD A6,SEG:EL,A1 SEGMENT LENGTH SRL A6,1 CONVERT LENGTH TO WORDS LDR A5,A3 TTAB ADDRESS OF CALLING TASK LDR A9,A1 SAVE SEGMENT BLOCK ADDRESS * IFT SWPBLK=1 LDR A11,A5 INDICATE DISC PAGING (A11 <> 0) XIF * LD A12,TTB:SP,A5 SEGTAB ADDRESS LD A12,SEG:FC,A12 SEGMENT DISC FILE CODE LD A3,PAG:PA,A2 PAGE ADDRESS (PHYSICAL) LD A2,SEG:DS,A1 SEGMENT DISC ADDRESS LDR* A1,A1 ANK A1,/FF * IFT MMUPAG=0 ST* A3,TTB:CB,A5 UPDATE CURRENT SEGMENT BASE XIF * LTD:15 EQU * ENTRY USED BY LT:SWB LDK A7,/91 PHYSICAL READ * EJECT LDTASK * * SET ECB PARAMETERS * LTD:20 EQU * ENTRY USED BY LT:SWB LDKL A8,LD:ECB LD:ECB ADDRESS ST A1,ECBCW1,A8 SET SECTOR NUMBER IN ECB ST A2,ECBCW2,A8 STR A12,A8 SET DISC FILE CODE IN ECB LDR A12,A3 LDKL A14,LD:STB LDTASK STACK BASE * * CHECK IF ONE OR TWO LKM:S NECCESSARY * LDR A10,A6 ADKL A10,127 NEXT HIGHER MULTIPLE OF 128 ANKL A10,/7F80 SUR A4,A10 CHECK IF PAGE IS LARGE ENOUGH RF(NN) LTD:25 OK, JUST ONE LKM NEEDED LDR A10,A6 ANKL A10,/7F80 NEXT LOWER MULTIPLE OF 128 * LTD:25 EQU * SUR A6,A10 REMAINING LENGTH TO MOVE IN 2ND LKM ADR A10,A10 CONVERT LENGTH TO BYTES RF(Z) LTD:50 INTERMEDIATE BUFFER NEEDED ST A10,ECBRL,A8 SET REQUESTED LENGTH IN ECB * IFT MMUPAG=0 ST A3,ECBBA,A8 SET BUFFER ADDRESS XIF * EJECT LDTASK * * IFT MMUPAG=1 ECR A1,A3 * IFT SWPBLK=1 LDR A11,A11 CHECK DISC PAGING/SWB FLAG RF(NZ) LTD:30 DISC PAGING REQUEST * EJECT LDTASK * * SWB: CONVERT LOGICAL ADDRESS TO PHYSICAL * SRL A1,3 ANK A1,/1E MMUTAB INDEX (5 BITS) ADR A1,A5 ADD TTAB ADDRESS LC A1,TTB:MT,A1 PHYSICAL PAGE ADDRESS LDR A2,A1 ANK A2,/3C SRC A2,6 ANKL A3,/FFF ORR A3,A2 RF LTD:40 XIF * LTD:30 EQU * IFT MMUPAG=1 * * SEGMENT: CONVERT PHYSICAL ADDRESS TO LOGICAL * SLL A3,2 LDR A12,A3 ANKL A12,/FFF CONVERT PHYSICAL ADDRESS TO LOGICAL OR A12,SCTLAP * LTD:40 EQU * ST A3,ECBBA,A8 SET BUFFER ADDRESS SRL A1,2 ANK A1,/30 SCR A1,A8 XIF * CF A14,LTD:90 READ/WRITE SEGMENT/SWB ADK A6,0 CHECK IF ANYTHING LEFT TO READ/WRITE RF(NP) LTD:70 SEGMENT/SWB HANDLING FINISHED * EJECT LDTASK * * NOT ROOM ENOUGH IN PAGE FOR LAST SECTOR: * READ IT TO MEMORY VIA INTERMEDIATE BUFFER * LD A1,ECBEL,A8 EFFECTIVE LENGTH ADR A12,A1 UPDATE PAGE AREA POINTER * LTD:50 EQU * LDKL A1,LD:BUF LDTASK BUFFER ADDRESS ST A1,ECBBA,A8 LDK A2,/80 SCR A2,A8 INDICATE BUFFER NOW IN SYSTEM AREA ADK A2,/80 A2 := 256 ST A2,ECBRL,A8 SET REQUESTED LENGTH TO ONE SECTOR ECR A2,A10 ADS A2,ECBCW2,A8 UPDATE SECTOR NUMBER RF(O) LTD:85 OVERFLOW * LTD:60 EQU * CF A14,LTD:90 READ ONE SECTOR TO LD:BUF LDR A2,A12 PAGE POINTER ADR A6,A6 CONVERT LENGTH TO BYTES * IFT MMUPAG=1 MVSU A6 MOVE LAST PART OF SEGMENT/SWB TO PAGE XIF * IFT MMUPAG=0 LTD:65 EQU * LDR* A10,A1 MOVE ONE WORD STR A10,A2 ADK A1,2 INCREMENT BUFFER POINTERS ADK A2,2 SUK A6,2 DECREMENT COUNTER RB(P) LTD:65 XIF * EJECT LDTASK * * LTD:70 EQU * IFT SWPBLK=1 LDR A11,A11 CHECK DISC PAGING/SWB FLAG RF(Z) LTD:80 SWB HANDLING XIF * LDKL A4,/C000 INDICATE SEGMENT SUCCESSFULLY LOADED XRRS A4,A9 * LTD:80 EQU * ABL QMEXIT QUEUE TASK AND EXIT LDTASK * LTD:85 EQU * OVERFLOW CORRECTION IM ECBCW1,A8 LDKL A2,/7FFF ANS A2,ECBCW2,A8 RB LTD:60 * EJECT LDTASK * * READ ONE SECTOR FROM DISC * LTD:90 EQU * LKM DATA 1 LD A2,ECBRC,A8 RETURN CODE ANKL A2,/FEFF SKIP RETRY BIT RF(NZ) LTD:95 DISC ERROR RTN A14 NO, RETURN * * ERROR: INSERT PAGE IN PAGQUE AGAIN * LTD:95 ANK A2,1 NGR A2,A2 SUK A2,2 ERROR, SET RETURN CODE -2 OR -3 ST A2,TTB:SA+14,A5 SET RETURN CODE IN A7 * IFT SWPBLK=1 LDR A11,A11 CHECK DISC PAGING/SWB FLAG RB(Z) LTD:80 SWB HANDLING XIF * LD A3,SEG:PB,A9 PAGE BLOCK ADDRESS INH CF A15,RELPA2 RELEASE PAGE LDK A4,1 INDICATE SEGMENT ERROR SCR A4,A9 LD A4,SCTIOE APPLICATION RESTART ADDRESS ST A4,TTB:SA,A5 SET NEW DISPATCH ADDRESS RB LTD:80 * EJECT LDTASK * * ********** * LT:SWB * ********** * * * LT:SWB HANDLES THE LOADING/STORING OF SWAPPABLE WORK BLOCKS. * * INPUT: A1 = SWAPPABLE WORK BLOCK ADDRESS * A3 = TTAB ADDRESS OF CALLING TASK * A4 = LKM DATA DIRECTIVE * * LT:SWB EQU * LDTASK SWB HANDLING ENTRY IFT SWPBLK=1 IFT MMUPAG=1 INH LDKL A5,TTABLD LDTASK TTAB ADDRESS TL TTB:MT,A3 LOAD MMU WITH CALLING TASK TS TTB:MT,A5 STORE IN LDTASK MMU TABLE ENB XIF * IFT SWPBLK=1 LDR A5,A3 TTAB ADDRESS OF CALLING TASK LDR A7,A4 LKM DATA DIRECTIVE SUR A11,A11 INDICATE SWB HANDLING (A11 = 0) LDR* A3,A1 DISC ADDRESS OF FIRST COPY ANK A3,/FF LD A4,SWB:DS,A1 LD A6,SWB:EL,A1 SWB COPY LENGTH (BYTES) LD A2,SWB:NS,A1 SWB COPY LENGTH (SECTORS) * EJECT LDTASK * * LD A1,TTB:SA+14,A5 ANK A1,/FF SWB COPY INDEX * LTS:10 EQU * SUK A1,1 * IFT CPU852=1 RF(NP) LTS:20 ADR A4,A2 COMPUTE DISC ADDRESS OF REQUESTED SWB RF(O) LTS:15 OVERFLOW RB LTS:10 * LTS:15 EQU * OVERFLOW CORRECTION ADK A3,1 ANKL A4,/7FFF RB LTS:10 * LTS:20 EQU * LDR A1,A3 DISC ADDRESS OF REQUESTED SWB LDR A2,A4 XIF * IFT SWPBLK=1 IFT CPU852=0 MUR A1 COMPUTE DISC ADDRESS OF REQUESTED SWB DAR A3 XIF * EJECT LDTASK * * IFT SWPBLK=1 LD A3,TTB:SA+16,A5 MEMORY ADDRESS (LOGICAL) ADK A6,1 SRL A6,1 CONVERT SWB LENGTH TO WORDS LDR A4,A6 LD A12,SCTIPL SWB DISC FILE CODE SUK A7,19 CHECK LKM DATA DIRECTIVE ABL(Z) LTD:15 LOAD SWB REQUEST LDKL A4,/7FFF PARAMETER TO AVOID INTERMEDIATE BUFFER LDK A7,/95 PHYSICAL WRITE (STORE SWB REQUEST) ABL LTD:20 XIF * EJECT LDTASK * * ********** * QLTDSK * * QLTSWB * ********** * * * THIS ROUTINE PERFORMS ACTIVATION OF THE LOAD TASK. * * ACTIVATION IS AT LT:DSK WHEN DISC PAGING REQUEST. * ACTIVATION IS AT LT:SWB WHEN SWAPPABLE WORK BLOCK REQUEST. * * INPUT: A1 = SEGMENT BLOCK ADDRESS (LT:DSK) * = SWAPPABLE WORK BLOCK ADDRESS (LT:SWB) * A3 = TTAB ADDRESS OF CALLING TASK * A4 = LKM DATA DIRECTIVE (LT:SWB) * * OUTPUT: A2, A5 ARE DESTROYED * * QLTSWB EQU * ACTIVATE LDTASK AT ENTRY LT:SWB IFT SWPBLK=1 LDKL A2,LT:SWB DISPATCH ADDRESS RF QLTASK XIF * IFT SWPBLK=0 ABL LKMERR INDICATE SYSGEN ERROR AND HALT SYSTEM XIF * QLTDSK EQU * ACTIVATE LDTASK AT ENTRY LT:DSK LDKL A2,LT:DSK DISPATCH ADDRESS * EJECT LDTASK * * QLTASK EQU * LDKL A5,TTABLD LDTASK TTAB ADDRESS ABL ACTOT ACTIVATE LDTASK * * * END