|
|
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: 11176 (0x2ba8)
Notes: pts_type(SC)
Names: »LDTASK.SC«
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
└─⟦this⟧ »TOSSWORK/LDTASK.SC«
IDENT LDTASK REL 8.2 78-09-15 870105040820 * ******************************* * * PHILIPS TERMINAL SYSTEM PTS * * LDTASK = LOAD TASK * * * * * * ******************************* * * ENTRY LDTASK ENTRY ECBRED LOAD TASK READ ECB * * EXTRN QTJOB TASK QUEUE EXTRN FREPAR FREE COREMEMORY PARTITION EXTRN PARLEN LENGTH OF PARTITION EXTRN PARNUM NUMBER OF PARTITION EXTRN GETBLK MONITOR FREE BLOCK EXTRN FREBLK PARAM. FROM MON.BLOCK EXTRN TTB:SA NAME OF THE 5W IN TTAB EXTRN TTB:SP SEGMENT POINTER EXTRN TTB:SS SEGMENT START EXTRN LRUQUE POINTER TO FIRST SEGMENT IN QUEUE EXTRN PARTEN ADDRESS TO FREE PARTITION EXTRN LDPEND LOAD PENDING. LDTASK IN PAUSE EXTRN CVTINP SUBROUTINE TABLE ADDRESS EXTRN CVTDK START UP DISC EJECT * * * * ECBRED DATA /F0,0,410,0,0,0 SEGMNO RES 1 SEGMENT NUMBER * * EJECT LDTASK EQU * * * * MONBLK = GET PARAMETERS FROM A MONITOR BLOCK * * MONBLK EQU * LDKL A14,STBLD LOAD STACK BASE LD A4,CVTDK GET START DISC ST A4,ECBRED LDR A4,A1 CF A15,FREBLK --GET MON.BLOCK LDR A9,A1 SAVE TTAB-ADDRESS ST A3,SEGMNO SAVE SEGMENT POINTER LDR A12,A2 * * TEST IF SEGMENT ALREADY IS LOADED * LDTEST EQU * LDR* A1,A3 LOADED ? RF(N) PART NO LD A10,2,A3 NEW LOAD ADDRESS ABL ACTIV * * PART = SEEK FREE PARTTION IN CORE MEMORY * PART EQU * LD A10,FREPAR GET PARTITION POINTER RF(NZ) UPDFRE LD A8,LRUQUE ZERO ? RF(NE) SEEK * * MEMORY SPACE NOT AVAILABLE * INDICATE LOADING PENDING AND PAUSE LDTASK * PAUSE EQU * IM LDPEND ENB LKM PAUSE LDTASK DATA 5 INH RB LDTEST * UPDFRE LDR* A7,A10 NEXT FREE PARTITION ST A7,FREPAR UPDATE PARTITION POINTER RF FINITO SEEK LDR* A7,A8 RF(E) READY LDR A8,A7 RB SEEK READY LD A10,-8,A8 LOAD ADDR. TO FREE PARTITION * * UPLSBT = UPDATE LSBT SEGMENT STATUS * UPLSBT EQU * LDK A7,/80 SC A7,-10,A8 UNLOADED LD A6,-2,A8 PRECEDENT RF(Z) FIN CM 2,A6 UPDATE END OF QUEUE RF FINO FIN CM LRUQUE NO LRUQUE FINO LDK A6,0 SET CONST. STR A6,A8 PRECEDENT=0 ST A6,-2,A8 SUCCEDENT=0 FINITO EQU * LDK A7,/C0 SCR A7,A3 SET NEW SEGMENT STATUS=UNDER LOADING ST A10,2,A3 LOAD ADDRESS * * SAVE AND LOAD REGISTERS FOR * READ AND RELOCATION ROUTINE * ENB SUKL A10,10 ST A10,ECBRED+2 READ BUFFER ADDRESS ADKL A10,2 RELOCATION BASE=PARTITION START ADDR.-8 LDR A13,A10 LOAD ADDRESS POINTER LD A6,4,A3 SECTOR ADDRESS LDK A7,/F8 LOWEST FLEX.DISC FILE CODE CW A7,CVTDK RF(G) CONT NOT FLEXIBLE DISC * * LOCK FLEXIBLE DISC (IF UNLOCKED) * LDK A7,/A6 LOCK ORDER LDKL A8,ECBRED LKM DATA 1 LD A7,8,A8 RETURN CODE ANK A7,/27 FAULTY FORMAT,SEEK- CRC ERROR,NOT OPER. RF(Z) CONT OK ,ALREADY LOCKED ANK A7,1 RF(NZ) ERRLOD NOT OPERABLE LDK A7,2 I/O ERROR RF ERRLOD CONT EQU * EJECT ************************************************************ * * READ AND RELOCATION ROUTINE * * ENTRY PARAMETERS: * A10= RELOCATION BASE * A13= MEMORY ADDRESS POINTER * * REGISTER USAGE: * A1 = LAST WORD TO RELOCATE * A2 = RELOCATION BITS CHECK REG * A3 = ADDRESS OF RELOCATION TABLE * A4 = RELOCATION BIT COUNTER * A5 = * A7 = CODE WORD COUNTER * A8 = CODE WORD * ************************************************************ * * READ FIRST SECTOR FOR RELOCATION AND GET RELOC. PARAMETERS * CF A14,IOSUBS --READ SECTOR LDR A7,A7 READ ERROR? RF(NZ) ERRLOD LD A1,4,A10 LOAD MODULE LENGTH IN BYTES ADR A1,A10 ADD RELOCATION BASE TO GET END ADDRESS * * RELOCATE SECTOR * RELSEC LDKL A7,376 NUMBER OF BYTES IN NORMAL SECTOR LDR A3,A13 ADR A3,A7 ADDRESS TO RELOCATION WORDS * * GET RELOCATION WORD * RELWRD LDK A4,16 INITIATE RELOCATION BIT COUNTER LDR* A2,A3 GET RELOCATION WORD RF(NZ) REL200 IF NOT ZERO JMP AND RELOCATE * * NO MORE RELOCATION BY THIS WORD * RENONE ADR A4,A4 NUMBER OF BYTES TO ADD ADR A13,A4 SRL A1,1 LDR A5,A13 SRL A5,1 CWR A5,A1 MODULE END? RF(NL) RELEND YES SLL A1,1 SUR A7,A4 SECTOR ENDED? RF(P) REL100 JMP IF NOT ADR A13,A7 RF SECEND REL100 ADK A3,2 UPDATE RELOCATION WORD POINTER RB RELWRD GET NEXT WORD * * PERFORM RELOCATION * RELNXT SLL A2,1 RELOCATE THIS MODULE WORD? RB(Z) RENONE NO MORE TO RELOCATE BY THIS WORD! REL200 RF(N) REL300 YES RELOCATE MODULE WORD SLN A2,A5 NOT THIS WORD - GET NEXT SUR A4,A5 ADR A5,A5 SUR A7,A5 ADR A13,A5 RF REL400 * * RELOCATE ONE MODULE WORD * REL300 LDR* A8,A13 GET WORD ADR A8,A10 ADD BASE STR A8,A13 RESTORE WORD REL400 EQU * ADKL A13,2 CWR A13,A1 RELOCATION ENDED? RF(E) RELEND YES SUK A7,2 RF(Z) SECEND JMP IF END OF SECTOR SUK A4,1 GET NEXT RELOCATION BIT RB(P) RELNXT RELOCATE NEXT MODULE WORD RB REL100 * * GET NEXT SECTOR FOR RELOCATION * SECEND ADK A6,1 UPDATE SECTOR POINTER SUKL A13,2 LDR* A5,A13 SAVE LAST WORD ST A13,ECBRED+2 SET READ BUFFER ADDRESS CF A14,IOSUBS READ SECTOR LDR A7,A7 READ ERROR? RF(NZ) ERRLOD STR A5,A13 RESTORE LAST WORD ADKL A13,2 UPDATE MEMORY POINTER RB RELSEC RELOCATE NEXT SECTOR * * SAVE START OF BUFFER POOL AND INDICATE LOADING ENDED * RELEND EQU * ADKL A10,8 PARTITION STARTADDR. LD A3,SEGMNO GET SEGMENT ADDRESS LDK A7,/00 SCR A7,A3 STATUS= LOADED , READY * * GET START ADDRESS IN SEGMENT * ACTIV EQU * LDR A12,A12 DISPATCHER RF(N) DSPFOR AVTIVATION ADR A12,A10 LDR* A12,A12 ABSOLUTE ADDRESS RF UPDTTB DSPFOR NGR A12,A12 ADR A12,A10 UPDTTB ST A12,TTB:SA,A9 ST A10,TTB:SS,A9 SEGMENT START ADDRESS ST A3,TTB:SP,A9 SEGMENT POINTER DIRECT LDR A5,A9 CF A15,QTJOB --START CALLING TASK ENB LKM DATA 3 EXIT ERRLOD LD A5,CVTINP SUK A5,2 LDR* A5,A5 ST A5,TTB:SA,A9 ST A7,TTB:SA+14,A9 ERROR RETURN CODE LDK A5,/80 SC* A5,SEGMNO LD A5,FREPAR ADKL A10,8 ST A10,FREPAR STR A5,A10 CM TTB:SP,A9 RB DIRECT EJECT * * IOSUBS = READ SECTOR SUBROUTINE * * THIS ROUTINE READS ONE SECTOR FROM DISC * AND ALSO CHECKS THE RETURN CODE CONDITION * IOSUBS EQU * LDK A7,/91 LDKL A8,ECBRED ST A6,10,A8 STORE SECTOR NUMBER IN ECB-WORD LKM DATA 1 * * * RETCOD CHECKS AND TRANSLATES RETURNCODE AFTER READ. * * INPUT:8,A8 = RETURN CODE AFTER READ * * OUTPUT:A7 = 0 NO ERROR * 1 DISC. IO ERROR * 2 DISC. INOPERABLE * 3 NEW VOLUME LOADED * * RETCOD EQU * LD A7,8,A8 GET RETURN CODE ANKL A7,/FEFF BIT 7 ONLY RETRIES RF(Z) UT NO ERROR ANK A7,/83 RF(Z) DISCIO BIT 0-6,9-13 ANK A7,/3 RB(Z) IOSUBS BIT 8 NEW VOLUME LOADED LDK A7,1 DISC INOPERABLE DISCIO ADK A7,1 DISC IO ERROR UT RTN A14 * RES 10 STBLD EQU *-2 * END