|
|
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: 17390 (0x43ee)
Notes: pts_type(SC)
Names: »TIOFM.SC«
└─⟦f350e1b7a⟧ Bits:30009678 Philips computer tape "600219"
└─⟦this⟧ »MONGEN/TIOFM.SC«
IDENT TIOFM REL 11.0 81-05-13 870105041100 * * ************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * * TIOFM = TOSS FILE MANAGEMENT LKM PROCESSOR * * * * * ************************************************** * * * TOSS FILE MANAGEMENT LKM PROCESSOR HANDLES * PREPARATIONS FOR DISC I/O, AND ACTIVATION OF * THE FILE MANAGEMENT TASK (FMTASK) FOR FILE * ADMINISTRATION FUNCTIONS. * * EJECT TIOFM * * *********** * ENTRIES * *********** * * ENTRY TIOFM TOSS FILE MANAGEMENT LKM PROCESSOR ENTRY DET:FM FILE MANAGEMENT DETACH ENTRY FCHECK CHECK ACCESS PAR. AND RETURN FWT ADDRESS ENTRY FCHEC2 FCHECK 2ND ENTRY EJECT TIOFM * * ************* * EXTERNALS * ************* * * EXTRN FMTASK FMTASK ACTIVATION ADDRESS EXTRN TTABFM FMTASK TTAB EXTRN QUEDEV QUEUE REQUEST IN DEVICE QUEUE EXTRN QUEFIL QUEUE FILE REQUEST IN DEVICE QUEUE EXTRN TIO:FM FM ENTRY IN TIO EXTRN ACTDIS ACTIVATE TASK AND DISPATCH EXTRN FNDDWD FIND DWT ADDRESS EXTRN QTJOB QUEUE TASK FOR DISPATCHING EXTRN GETBLK GET MONITOR BLOCK EXTRN TIOERR ERROR: QUEUE TASK AND DISPATCH EXTRN SCTFWT FWT CHAIN START ADDRESS EXTRN SCTNOF NUMBER OF FILES EXTRN FWTVTC VTOC SECTOR NO (FIRST EXTENT) EXTRN FWTPAR FILE ACCESS PARAMETERS EXTRN FWTTAB TTAB FOR TASK WITH ATTACH EXTRN FWTEW1 POINTER TO 2ND EWT BLOCK IN FWT EXTRN FWTQUE QUEUE ANCHOR FOR FILE I/O REQUESTS EXTRN EWTEXL EXTENT LENGTH EXTRN EWTEXB EXTENT BASE EXTRN EWTVOL VOLUME FILE CODE EXTRN ECBRL ECB REQUESTED LENGTH EXTRN ECBCW1 ECB CONTROL WORD 1 EXTRN ECBCW2 ECB CONTROL WORD 2 EXTRN DWTST DWT STATUS WORD EJECT TIOFM * * **************************************** * * 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 * * * THE ATTACH/DETACH FILE FUNCTION * IS OBTAINED BY SETTING ATTDET EQU 1. * ATTDET EQU 1 X:A EQU ATTDET * * * THE MULTIPLE EXTENT I/O FUNCTION * IS OBTAINED BY SETTING MULEXT EQU 1. * MULEXT EQU 1 X:B EQU MULEXT * EJECT TIOFM * * ********* * TIOFM * ********* * * * THIS IS THE TOSS FILE MANAGEMENT LKM PROCESSOR. * * IT IS ENTERED FROM THE LKM HANDLER * WITH THE FOLLOWING PARAMETERS: * * A4 = 0 * A5 = TTAB ADDRESS * A7 = ORDER CODE * A8 = ECB ADDRESS * * WHEN FILE ADMINISTRATION IS REQUESTED, * TIOFM WILL ACTIVATE THE FMTASK. * * WHEN I/O FUNCTION IS REQUESTED, TIOFM * WILL PREPARE FOR DISC I/O. THE I/O WILL * THEN RUN THE NORMAL WAY VIA TIO-DRIVER-TENDIO. * * EJECT TIOFM * * TIOFM EQU * FILE MANAGEMENT LKM PROCESSOR ENTRY * * CHECK ORDER CODE * LDR A2,A7 ORDER CODE ANK A2,/FF SKIP OPTION XRK A2,/80 WAIT BIT SUK A2,/01 RF(Z) FM:IO BASIC READ SUK A2,/03-/01 RF(Z) FMACT3 READ FILE PARAMETERS SUK A2,/05-/03 RF(Z) FM:IO BASIC WRITE SUK A2,/11-/05 RF(Z) FM:IO PHYSICAL READ SUK A2,/15-/11 RF(Z) FM:IO PHYSICAL WRITE SUK A2,/21-/15 RF(Z) FMACT2 OPEN/CREATE/EXTEND SUK A2,/22-/21 RF(Z) FMACT1 CLOSE/DELETE * IFT ATTDET=1 SUK A2,/3B-/22 RF(Z) ATTACH ATTACH SUK A2,/3C-/3B XIF * RF(NZ) FM:RQE REQUEST ERROR IF NOT DETACH * EJECT TIOFM * IFT ATTDET=1 * ********** * DETACH * ********** * * DETACH FILE * DETACH EQU * CF A15,FCHECK FIND FWT AND CHECK ACCESS PARAMETERS RF(NZ) T:DISP ERROR, RETURN CF A15,DET:FM DETACH FILE LDR A10,A10 CHECK IF FILE WAS ATTACHED RF(NZ) T:DISP YES, GO TO DISPATCHER XIF * * ERROR EXIT * FM:RQE EQU * FILE MANAGEMENT REQUEST ERROR EXIT LDK A3,/80 RETURN CODE * FM:ER1 EQU * ECR A3,A3 RF T:DIS2 * EJECT TIOFM * IFT ATTDET=1 * ********** * ATTACH * ********** * * ATTACH FILE * ATTACH EQU * CF A15,FCHECK FIND FWT AND CHECK ACCESS PARAMETERS RF(NZ) FM:030 NOT OK ST A5,FWTTAB,A6 SET ATTACH WORD XIF * T:DISP EQU * LDR A3,A4 RETURN CODE * T:DIS2 EQU * ABL TIOERR SET RETURN CODE, QUEUE TASK AND DISP. * EJECT TIOFM * * ********** * FMACTX * ********** * * * FILE ADMINISTRATION REQUESTED. * * ACTIVATE FMTASK WITH THE FOLLOWING PARAMETERS: * * A1 = ORDER CODE AND OPTION (RFP/OPEN/CLOSE) * = PARAMETER BLOCK ADDRESS (SPLIT I/O) * A3 = TTAB ADDRESS OF CALLING TASK * A4 = FUNCTION INDEX (0 = RFP, 2 = OPEN, 4 = CLOSE, 6 = SPLIT I/O) * FMACT1 EQU * ACTIVATE CLOSE FUNCTION ADK A4,2 FUNCTION INDEX * FMACT2 EQU * ACTIVATE OPEN FUNCTION ADK A4,2 FUNCTION INDEX * FMACT3 EQU * ACTIVATE READ FILE PARAMETERS FUNCTION ECR A1,A7 ORDER CODE AND OPTION * FMACT4 EQU * ACTIVATE SPLIT I/O FUNCTION LDKL A2,FMTASK DISPATCH ADDRESS LDR A3,A5 TTAB ADDRESS OF CALLING TASK LDKL A5,TTABFM FMTASK TTAB ADDRESS ABL ACTDIS ACTIVATE FMTASK AND DISPATCH * EJECT TIOFM * * ********** * FM I/O * ********** * * FILE MANAGEMENT I/O FUNCTIONS * FM:IO EQU * BASIC AND PHYSICAL READ/WRITE CF A15,FCHECK FIND FWT AND CHECK ACCESS PARAMETERS * IFT ATTDET=1 RF(Z) FM:050 OK * FM:030 EQU * CWK A4,/40 RB(NE) T:DISP ERROR, RETURN * * FILE ATTACHED, QUEUE REQUEST * ADKL A6,FWTQUE QUEUE ANCHOR ADDRESS LDK A4,0 NO ACT LABEL AT LKM ABL QUEFIL QUEUE REQUEST AND GO TO TDISP XIF * IFT ATTDET=0 RB(NZ) FM:RQE ERROR XIF * EJECT TIOFM * * CHECK RELATIVE SECTOR NUMBER * FM:050 EQU * IFT MMUPAG=0 IFT CPU852=1 LD A2,ECBCW2,A8 RELATIVE SECTOR NUMBER LD A1,ECBCW1,A8 XIF * IFT MMUPAG=0 IFT CPU852=0 ML 2,ECBCW1,A8 RELATIVE SECTOR NUMBER XIF * IFT MMUPAG=1 EL A2,ECBCW2,A8 RELATIVE SECTOR NUMBER EL A1,ECBCW1,A8 XIF * RF(NZ) FM:060 ADK A2,0 RF(Z) FM:ER2 RELATIVE SECTOR NUMBER = 0 * FM:060 EQU * LDR A3,A6 FWT ADDRESS ECR A6,A1 ANK A6,/FF RF(NZ) FM:ER2 ILLEGAL RELATIVE SECTOR NUMBER LDR A9,A7 SAVE ORDER CODE ADKL A3,FWTEW1 ADDRESS TO 1ST EWT STRUCTURE LDKL A14,/7FFF * EJECT TIOFM * * SEARCH THE FILE EXTENT THAT HOLDS * THE REQUESTED SECTORS * FM:070 EQU * LC A6,EWTEXL-1,A3 FILE EXTENT LENGTH LD A7,EWTEXL,A3 CWR A1,A6 CHECK EXTENT LENGTH RF(L) FM:100 EXTENT FOUND RF(G) FM:080 EXTENT NOT FOUND CWR A2,A7 RF(NG) FM:100 EXTENT FOUND * FM:080 EQU * IFT CPU852=0 DSR A6 SUBTRACT LENGTH FROM SECTOR NUMBER XIF * IFT CPU852=1 SUR A1,A6 SUBTRACT LENGTH FROM SECTOR NUMBER SUR A2,A7 RF(NN) FM:090 NOT UNDERFLOW SUK A1,1 UNDERFLOW CORRECTION ANR A2,A14 SKIP SIGN BIT XIF * FM:090 EQU * LDR* A3,A3 ADDRESS TO 2ND EWT BLOCK LDR* A3,A3 ADDRESS TO NEXT EWT STRUCTURE RB(NZ) FM:070 CHECK NEXT EXTENT * FM:ER2 EQU * FILE MANAGEMENT EXTENT ERROR EXIT LDK A3,/A0 RETURN CODE RB FM:ER1 RETURN * EJECT TIOFM * * EXTENT FOUND * FM:100 EQU * LDR* A4,A3 ADDRESS TO 2ND EWT BLOCK SUR A10,A10 LC A10,EWTEXB-1,A4 FILE EXTENT BASE LD A11,EWTEXB,A4 * IFT CPU852=0 DAR A10 COMPUTE SECTOR NUMBER DSK 0,1 XIF * IFT CPU852=1 ADR A1,A10 COMPUTE SECTOR NUMBER ADR A2,A11 RF(O) FM:140 OVERFLOW * FM:110 EQU * SUK A2,1 RF(NN) FM:115 NOT UNDERFLOW SUK A1,1 UNDERFLOW CORRECTION ANR A2,A14 SKIP SIGN BIT XIF * EJECT TIOFM * * FM:115 EQU * LDR A12,A1 SAVE SECTOR NUMBER LDR A13,A2 * IFT MMUPAG=0 LC A3,ECBRL,A8 REQUESTED LENGTH (SECTORS) ANK A3,/FF XIF * IFT MMUPAG=1 EL A3,ECBRL,A8 REQUESTED LENGTH (BYTES) SRL A3,8 SECTORS XIF * ADR A2,A3 COMPUTE LAST REQUESTED SECTOR+1 RF(O) FM:150 OVERFLOW * FM:120 EQU * ADR A6,A10 COMPUTE LAST SECTOR+1 IN EXTENT ADR A7,A11 RF(O) FM:160 OVERFLOW * FM:125 EQU * CWR A6,A1 RF(G) FM:130 ALL SECTORS WITHIN THIS EXTENT RF(L) FM:170 ALL SECTORS NOT WITHIN THIS EXTENT CWR A7,A2 RF(L) FM:170 ALL SECTORS NOT WITHIN THIS EXTENT * EJECT TIOFM * * PREPARE PARAMETERS FOR DISC I/O * * EXIT PARAMETERS: * * A2 = DISC INDEX (FROM FNDDWD) * A4 = 0 (INDICATES NO I/O-AND-ACTIVATION) * A5 = TTAB ADDRESS * A6 = DISC DWT ADDRESS (FROM FNDDWD) * A7 = ORDER CODE * A8 = ECB ADDRESS * FM:130 EQU * LC A2,EWTVOL,A4 FILE CODE DISC CF A15,FNDDWD FIND DISC DWT ADDRESS LDK A4,0 INDICATE NO I/O-AND-ACTIVATE LD A1,DWTST,A6 DWT STATUS ABL(NN) QUEDEV DISC BUSY, QUEUE REQUEST LDR A7,A9 RESTORE ORDER CODE * IFT MMUPAG=0 ST A12,ECBCW1,A8 SET SECTOR NUMBER IN ECB ST A13,ECBCW2,A8 XIF * IFT MMUPAG=1 ES A12,ECBCW1,A8 SET SECTOR NUMBER IN ECB ES A13,ECBCW2,A8 XIF * ABL TIO:FM BRANCH TO FM ENTRY IN TIO * EJECT TIOFM * * OVERFLOW CORRECTIONS FOR DOUBLE WORD ARITHMETICS * FM:140 EQU * IFT CPU852=1 ADK A1,1 ANR A2,A14 SKIP SIGN BIT RB FM:110 XIF * FM:150 EQU * ADK A1,1 ANR A2,A14 SKIP SIGN BIT RB FM:120 * FM:160 EQU * ADK A6,1 ANR A7,A14 SKIP SIGN BIT RB FM:125 * EJECT TIOFM * * REQUESTED SECTORS CONTINUE IN NEXT EXTENT. * * ACTIVATE FMTASK WITH THE FOLLOWING PARAMETERS: * * A1 = PARAMETER BLOCK ADDRESS * A3 = TTAB ADDRESS OF CALLING TASK * A4 = FUNCTION INDEX (=6) * FM:170 EQU * IFT MULEXT=1 IFT MMUPAG=0 ST A12,ECBCW1,A8 SET SECTOR NUMBER IN ECB ST A13,ECBCW2,A8 XIF * IFT MULEXT=1 IFT MMUPAG=1 ES A12,ECBCW1,A8 SET SECTOR NUMBER IN ECB ES A13,ECBCW2,A8 XIF * IFT MULEXT=1 SUR A7,A13 NO OF SECTORS IN FIRST I/O ANR A7,A14 SKIP SIGN BIT JUST IN CASE * * PREPARE PARAMETER BLOCKS FOR FMTASK * LDR A1,A9 ORDER CODE LDR A2,A4 2ND EWT BLOCK ECR A3,A7 NO OF BYTES IN FIRST I/O CF A15,GETBLK PARAMETER BLOCK LDR A1,A4 PARAMETER BLOCK ADDRESS LDK A4,6 FUNCTION INDEX FOR SPLIT I/O RB FMACT4 ACTIVATE FMTASK XIF * IFT MULEXT=0 RB FM:ER2 REQUEST ERROR XIF * EJECT TIOFM * * ********** * FCHECK * * FCHEC2 * ********** * * * FCHECK/FCHEC2 CONVERTS THE FILE NUMBER TO FWT * ADDRESS AND CHECKS THE ACCESS PARAMETERS. * * INPUT: A5 = TTAB ADDRESS * A7 = ORDER CODE * A8 = ECB ADDRESS (FCHECK ONLY) * A9 = ECB ADDRESS (FCHEC2 ONLY) * * OUTPUT: CR = 0 IF OK, ELSE * <> 0 IF ERROR * A4 = RETURN CODE * A6 = FWT ADDRESS (=0 IF REQUEST ERROR) * A7 = ORDER CODE (MODIFIED TO BASIC IF REQUESTED) * A9 = ECB ADDRESS * A2 IS DESTROYED * FCHECK EQU * FCHECK MAIN ENTRY LDR A9,A8 ECB ADDRESS * FCHEC2 EQU * FCHECK 2ND ENTRY IFT MMUPAG=0 LDR* A4,A9 FILE NUMBER XIF * IFT MMUPAG=1 ELR A4,A9 FILE NUMBER XIF * EJECT FMTASK * * CHECK FILE NUMBER AND FIND FWT * ADKL A15,4 ADJUST STACKPOINTER ANK A4,/FF RF(Z) FC:050 FILE NUMBER = 0 CW A4,SCTNOF RF(G) FC:050 FILE NUMBER TOO BIG LDKL A6,SCTFWT ADDRESS TO FWT CHAIN POINTER * FC:010 EQU * COMPUTE FWT ADDRESS LDR* A6,A6 NEXT FWT ADDRESS SUK A4,1 RB(P) FC:010 * * CHECK ACCESS PARAMETERS * ANKL A6,/FFFE CORRECT FWT ADDRESS JUST IN CASE LD A2,FWTVTC,A6 VTOC SECTOR NO (FIRST EXTENT) RF(Z) FC:050 FILE NOT OPENED LD A2,FWTPAR,A6 ACCESS PARAMETERS RF(N) FC:070 NEW VOLUME LOADED SLL A2,1 RF(NN) FC:020 PHYSICAL ORDERS ANK A7,/85 BASIC ORDER * FC:020 EQU * IFT ATTDET=1 LD A2,FWTTAB,A6 ATTACH WORD (TTAB ADDRESS) ABR(Z)* A15 NOT ATTACHED, RETURN CWR A2,A5 ATTACHED, CHECK IF THIS TASK RF(NE) FC:060 ATTACHED TO ANOTHER TASK XIF * IFT ATTDET=0 SUR A2,A2 SET CR = 0 XIF * ABR* A15 RETURN WITHOUT CHANGING CR * EJECT TIOFM * * ERROR RETURNS * FC:050 EQU * REQUEST ERROR EXIT LDKL A4,/7FC0 RETURN CODE = /8000 LDK A6,0 INDICATE NO FWT FOUND * FC:060 EQU * FILE ATTACHED EXIT ADK A4,/20 RETURN CODE = /40 * FC:070 EQU * NEW VOLUME LOADED EXIT ADK A4,/20 RETURN CODE = /20 ABR* A15 RETURN WITHOUT CHANGING CR * EJECT TIOFM * * ********** * DET:FM * ********** * * INPUT: A6 = FWT ADDRESS * * OUTPUT:A10 = TTAB ADDRESS OF ATTACHED TASK * A1 IS DESTROYED * DET:FM EQU * DETACH FILE IFT ATTDET=1 LD A10,FWTTAB,A6 TTAB ADDRESS OF ATTACHED TASK RF(Z) DET:30 NOT ATTACHED LD A5,FWTQUE,A6 QUEUE ANCHOR FOR FILE I/O REQUESTS RF(Z) DET:20 NO MORE TASKS IN QUEUE * * REPEAT ALL QUEUED REQUESTS FOR THIS FILE * DET:10 EQU * LDR* A1,A5 SAVE NEXT TTAB ADDRESS CF A15,QTJOB QUEUE TASK FOR DISPATCHING LDR A5,A1 RESTORE NEXT TTAB ADDRESS RB(NZ) DET:10 CM FWTQUE,A6 RESET QUEUE ANCHOR * DET:20 EQU * LDR A5,A10 RESTORE TTAB ADDRESS CM FWTTAB,A6 RESET ATTACH WORD * DET:30 EQU * RTN A15 XIF * END