|
|
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: 30278 (0x7646)
Notes: pts_type(SC)
Names: »ADMTSK.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/ADMTSK.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/ADMTSK.SC«
IDENT ADMTSK REL 11.0 81-02-12 870105041100 =2, WRONG STATUS INFORMATION RETURNED REL 11.0 81-02-06 =1, LOCAL FILE CODES NOT WORKING REL 11.0 81-01-26 * * ******************************************** * * ADMTSK = ABRIDGED DATA MANAGEMENT TASKS * ******************************************** * * * ENTRY ADMTSK * EJECT ADMTSK * ******************* * * * EXTERNALS * * * ******************* * * EXTRN PRUN PROGRAM RUNNING EXTRN DWTECB USER ECB ADDRESS EXTRN DWTTAB USER TTAB ADDRESS EXTRN DWTOR ORDER AND OPTION EXTRN FWTFNR FILE NUMBER EXTRN FWTPAR NUMBER OF USERS EXTRN ECBRL REQUESTED LENGTH EXTRN ECBBA BUFFER ADDRESS EXTRN ECBCW1 1ST CONTROLL WORD EXTRN ECBCW2 2ND CONTROLL WORD EXTRN MOV:US MOVE ROUTINE EXTRN MOV:SU EXTRN DIVMOD DIVIDE ROUTINE EXTRN MPYMOD MULTIPLY ROUTINE EXTRN FPB:BF BLOCKING FACTOR EXTRN FPB:EL ENLARGE EXTRN FPB:FO FILE ORGANISATION EXTRN FPB:S1 SIZE EXTRN FPB:RP RETENTION PERIOD EXTRN ECBRC RETURN CODE EXTRN ECBEL EFFECTIVE LENGTH EXTRN FPB:RL RECORD LENGTH EXTRN FPB:FR FILE RECORD NUMBER EXTRN ADDMOD DOUBLE ADD ROUTINE EXTRN SCTFWT ROOT OF FDB:S EXTRN FNDFDB FIND FILE CODE ENTRY * EJECT ADMTSK * * EXTRN DMXACD EXIT TASK AND ACTIVATE #D EXTRN DMACTD ACTIVATE ADMINISTRATION ADM TASK EXTRN DV3RST REST AFTER DIV 3 EXTRN TENDIO EXTRN DMTTSB STACK BASE DISPLACEMENT EXTRN FDBECB ADM ECB EXTRN FDBOMD OPEN MODE EXTRN FDBLRN LAST RECORD NUMBER EXTRN FDBRLE RECORD LENGTH EXTRN FDBENL ENLARGE EXTRN FDBEXC EXCLUSIVE ACCESS INDICATOR EXTRN FPB:NO FILE NUMBER EXTRN FPB:DT DEVICE TYPE EXTRN TTB:MT USER MMU TABLE EXTRN FPB:SH SHAREABILITY EXTRN MONMMU MONITOR MMU TABLE EXTRN ENLFAC CONVERT ENLARGE TO NO OF SECTORS EXTRN CONENL CONVERT ENLARGE TO PERCENTAGE EXTRN RTNA14 RETURN AND SET CR EXTRN SETCRO RETURN AND SET CR OVERFLOW * * * * ********** * FORM * ********** * * BYTE FORM 8,8 * * EJECT ADMTSK * * ************************************** * * * CONDITIONAL ASSEMBLY * * * ************************************** * * * A VERSION LEAVING OUT OPEN MODES: * OPEN OUTPUT,OPEN EXTEND AND CLOSE DISCARD * IS OBTAINED BY SETTING X:A EQU 0 * * X:A EQU 0 CRDEEX EQU X:A * * MMUPAG EQU 0 * EJECT ADMTSK * * ******************** * * * CONSTANTS * * * ******************** * * ******************** * * * RETURN STATUS * * * ******************** * RSTWFO EQU 6 WRONG FUNCTION OPTION =2 RSTUKF EQU 9 UNKNOWN FILE RSTOFL EQU 3 OVERFLOW RSTWFP EQU 4 WRONG FD PARAMETER * RC:NOD EQU /800 RETURN CODE NO DATA FPBLLE EQU 88 LENGTH OF FPB L-FILE FPBSLE EQU 66 LENGTH OF FPB S-FILE LFILEN EQU 256 L-FILE RECORD LENGTH * EJECT ADMTSK * * ******************* * * * TABLES * * * ******************* * * * EJECT ADMTSK * * * ********** * EXEORD * ********** * * TABLE FOR ORDER LABELS * * EXEORD EQU * DATA OPENFI OPENFI DATA OPENFI DATA OPENFI DATA OPENFI DATA OPENFI IFT CRDEEX=1 EXEOOR EQU *-EXEORD OPEN OUTPUT RANDOM DATA OPENOR OUTPUT RANDOM DATA OPENEX EXTEND DATA OPENOS OUTPUT SEQUENTIAL DATA CLODIS XIF DATA CLOLCK DATA REFIPA DATA SEQWRI DATA REWRIT DATA DELETE DATA RANWRI DATA DIREAD IFT CRDEEX=1 EXEEXT EQU *-EXEORD EXTEND DISPLACEMENT IN TABLE DATA EXTEND XIF * EJECT ADMTSK * ********** * STAMAP * ********** * * STATUS BYTES * CHANGE SOME FM ERROR BITS TO STATUS INFORMATION * BIT: * * STAMAP EQU * BYTE RSTWFO,0 1,2 BYTE 0,RSTUKF 3,4 BYTE RSTOFL,RSTWFP 5,6 BYTE 0,0 7,8 BYTE RSTWFO,0 9,10 BYTE RSTOFL,0 11,12 * EJECT ADMTSK * * ********** * FILORG * ********** * * TABLE OVER ALLOWED FILE ORGANIZATIONS * BUFFNU EQU *-/100 BUFFER INDICATING RECORD NOT USED FILORG EQU * DATA /5300 S,0 DATA 'LX' * ADMBUF RES 40 EJECT ADMTSK * * A1 = 0 , RETURN CODE * A4 = NUMBER OF SECTORS PER RECORD (NOT OPEN ORDER) * SET A8 = ADM ECB ADDRESS * A9 = USER ECB ADDRESS * A10= FILE DESCRIPTOR ADDRESS * A12= ADDRESS TO FILE PARAMETER BLOCK (ADMBUF) * A11= FILE DESCRIPTOR ADDRESS * * ADMTSK EQU * LD A14,PRUN ADKL A14,DMTTSB STACK BASE LDR A10,A1 FDB ADDRESS LD A9,DWTECB,A10 USER ECB ADDRESS LDR A8,A10 ADKL A8,FDBECB ADM ECB ADDRESS LC A1,FWTFNR,A1 FILE NUMBER ANK A1,/FF STR A1,A8 FILL ADM ECB LD A4,FDBRLE,A10 REQUESTED LENGTH ADK A4,1 IN CASE OF S FILE ANKL A4,/FF00 ST A4,ECBRL,A8 REQUESTED LENGTH CM ECBRC,A8 RESET RETURN CODE LDR A13,A8 GET ADDRESS TO ECBCW ADKL A13,ECBCW1 * EJECT ADMTSK * * LD A1,ECBCW1,A9 GET RECORD NUMBER LD A2,ECBCW2,A9 RF(P) ADMT10 DOUBLE SUBTRACT ONE LDKL A2,/8000 CARRY BIT SUK A1,1 ADMT10 EQU * SUK A2,1 STR A1,A13 FILL ADM ECBCW ST A2,2,A13 LDR A11,A10 FDB ADDRESS SRL A4,8 NUMBER OF SECTORS PER RECORD CF A14,DBLMUL CONVERT TO SECTOR ADDRESS IM 2,A13 DOUBLE ADD ONE RF(P) ADMT20 NO CARRY CM 2,A13 IMR A13 ADMT20 EQU * LDKL A12,ADMBUF ADM BUFFER ADDRESS LDK A1,0 RESET RETURN CODE LC A3,DWTOR+1,A10 ORDER ANK A3,/FF ABI EXEORD,A3 EXECUTE ORDER * EJECT ADMTSK * * ********** * DIREAD * ********** * * READ RECORD DIRECT * * DIREAD EQU * LDK A7,/91 PHYSICAL READ CF A14,ADM:BA TO USER BUFFER RF(NZ) ADMEXI ERROR LD A2,FDBOMD,A10 RF(N) DIR100 X OR L FILE LD A2,ECBBA,A9 BUFFER ADDRESS AD A2,ECBRL,A8 END OF BUFFER IFT MMUPAG=0 LC A1,-1,A2 XIF IFT MMUPAG=1 LD A1,DWTTAB,A10 USER TTAB ADDRESS TL TTB:MT,A1 USER MMU TABLE EL A1,-2,A2 STATUS ANK A1,/FF TL MONMMU MONITOR MMU TABLE XIF SUK A1,/FF STATUS OF RECORD RF(Z) DIR100 OK LDKL A1,RC:NOD RC: NO DATA RF ADMEX2 END IO DIR100 EQU * LD A1,FDBRLE,A10 RECORD LENGTH ST A1,ECBEL,A9 RF ADMEXI END IO * IFT CRDEEX=1 EJECT ADMTSK * * ********** * EXTEND * ********** * * EXTEND FILE AND CONTINUE SEQUENTIAL WRITE * * EXTEND EQU * CF A14,ADMRFP READ FILE PARAMETERS LD A1,FDBENL,A10 GET ENLARGE FACTOR ST A1,FPB:EL,A12 FILL IN ENLARGE LDKL A7,/1A1 EXTEND CF A14,ADM:AF EXTEND RF(NZ) ADMEXI ERROR LD A3,FDBOMD,A11 OPEN MODE ANK A3,/7F SUK A3,EXEOOR RF(NZ) SEQWRI NOT OPENED OUTPUT RANDOM CF A14,FORFIL FORMAT EXTENDED FILE RF(NZ) ADMEXI ERROR XIF EJECT ADMTSK * * ********** * SEQWRI * ********** * * SEQUENTIAL WRITE * INPUT : A4 = NUMBER OF SECTORS PER RECORD * * SEQWRI EQU * CF A14,GETLRN GET LAST RECORD NUMBER IM ECBCW2,A8 DOUBLE ADD ONE TO ECBCW RF(P) SEQW05 NO OVERFLOW IM ECBCW1,A8 INCREMENT CM ECBCW2,A8 SEQW05 EQU * LC A1,FDBLRN,A10 GET LRN ANK A1,/FF LD A2,FDBLRN+1,A10 ADK A2,1 LRN+1 RF(P) SEQW06 NOT OVERFLOW LDK A2,0 ADK A1,1 SEQW06 EQU * ST A1,ECBCW1,A9 LRN TO USER ECB ST A2,ECBCW2,A9 * EJECT ADMTSK * * CF A14,ADMWRI WRITE IFT CRDEEX=0 RF(NZ) ADMEXI ERROR XIF IFT CRDEEX=1 RF(Z) SEQW10 WRITE OK SLL A1,2 RF(NN) ADMEXI NOT END OF FILE LD A2,FDBENL,A10 ENLARGE FACTOR RF(Z) ADMEXI NO ENLARGE FACTOR DECLARED LDK A1,EXEEXT EXTEND FILE SC A1,DWTOR+1,A10 LDKL A8,ADMTSK DISPATCH ADDRESS LDR A6,A10 FPB ADDRESS ABL DMXACD ACTIVATE #D AFTER EXIT * XIF SEQW10 EQU * LC A1,ECBCW1+1,A9 UPDATE LRN SC A1,FDBLRN,A10 LD A2,ECBCW2,A9 ST A2,FDBLRN+1,A10 RF ADMEXI * EJECT ADMTSK * * ********** * REWRIT * * RANWRI * ********** * * REWRITE RECORD * RANDOM WRITE * * REWRIT EQU * RANWRI EQU * CF A14,ADMWRI WRITE RF ADMEXI END IO * EJECT ADMTSK * * ********** * DELETE * ********** * * DELETE RECORD * * DELETE EQU * SUK A4,1 GET LAST SECTOR IN RECORD ADS A4,2,A13 RF(P) DEL:10 NO CARRY IMR A13 LDK A4,/FF ANS A4,2,A13 NOT BIT 0 DEL:10 EQU * CF A14,ADMWFO WRITE EJECT ADMTSK * * ********** * ADMEXI * ********** * * * EXIT ADM TASK * * ADMEXI EQU * LD A1,ECBRC,A8 RETURN CODE ANKL A1,/4E50 BITS TO STATUS RF(Z) ADMEX2 NO BITS TO STATUS SLN A1,A6 LC A6,STAMAP,A6 STATUS INFORMATION CF A14,GETFDB FILE CODE ENTRY =1 SCR A6,A4 SAVE STATUS LDKL A1,/8080 REQUEST ERROR MORE INFORMATION =2 RF ADMEX3 ADMEX2 EQU * OR A1,ECBRC,A8 GET TOTAL RC ADMEX3 EQU * LDR A6,A10 FDB ADDRESS FOR TENDIO INH CF A15,TENDIO PERFORM TENDIO ENB LKM EXIT DATA 3 * IFT CRDEEX=1 EJECT * * ********** * OPENOR * ********** * * OPEN OUTPUT RANDOM * OPENOR EQU * CF A14,CREFIL CREATE FILE RF(NZ) CLODIS DELETE FILE CF A14,FORFIL FORMAT FILE RF(NZ) CLODIS DELETE FILE RF EXIOPE EXIT TASK * EJECT ADMTSK * * ********** * OPENEX * ********** * * * OPEN EXTEND * * OPENEX EQU * CF A14,OPFILE RF(NZ) CLO450 CLOSE IF OPENED CF A14,ENLFAC RF(O) CLO450 CLOSE ST A3,FDBENL,A11 ENLARGE RF EXIOPE EXIT * XIF EJECT ADMTSK * * ********** * OPENFI * ********** * * OPEN EXISTING FILE * * OPENFI EQU * CF A14,OPFILE OPEN FILE RF(NZ) CLO450 ERROR:CLOSE FILE EXIOPE EQU * CF A14,CONPAR CONVERT PARAMETERS CF A14,GETFDB FILE CODE ENTRY =1 ST A11,2,A4 CONNECT FILE CODE TO FDB RB ADMEXI * IFT CRDEEX=1 EJECT ADMTSK * * ********** * OPENOS * ********** * * OPEN OUTPUT SEQUENTIAL * * OPENOS EQU * CF A14,CREFIL CREATE FILE RB(Z) EXIOPE NO ERROR * XIF EJECT ADMTSK * * ********** * CLODIS * * CLOLCK * ********** * * CLOSE DISCARD * CLOSE LOCK * * IFT CRDEEX=1 CLODIS EQU * LDKL A7,/2A2 DELETE FILE RF CLO500 * * XIF CLOLCK EQU * IFT CRDEEX=1 LC A3,FDBOMD,A11 OPEN MODE ANK A3,/7F SUK A3,EXEOOR RF(NP) CLO400 OPENED OUTPUT SEQ OR EXTEND CF A14,FORFIL FORMAT REST OF FILE XIF * EJECT ADMTSK * * CLO400 EQU * CLOSE FILE LC A2,FDBLRN,A11 LAST RECORD NUMBER TO FPB ANK A2,/FF ST A2,FPB:FR,A12 LD A2,FDBLRN+1,A11 ST A2,FPB:FR+2,A12 CLO450 EQU * CLOSE WITHOUT SETTING LRN LDK A7,/A2 CLOSE FILE CLO500 EQU * LDR A3,A1 SAVE RETURN CODE LDR A11,A11 RB(Z) ADMEXI FILE NOT OPENED CF A14,ADM:AF CLOSE FILE ORS A3,ECBRC,A8 UPDATE RETURN CODE RB ADMEXI * EJECT ADMTSK * * ********** * REFIPA * ********** * * READ FILE PARAMETERS * REFIPA EQU * CF A14,ADMRFP READ FILE PARAMETERS RB(NZ) ADMEXI READ ERROR CF A14,CONPAR ST A5,ECBEL,A9 FPB LENGTH CM ECBCW1,A9 SET CRN CM ECBCW2,A9 RB ADMEXI EXIT * EJECT * * ******************* * * * SUBROUTINES * * * ******************* * ********** * GETFDB * ********** * * GET FILE CODE ENTRY IN USER TTAB OR CDTAB * GETFDB EQU * LD A1,DWTTAB,A10 TTAB ADDRESS OF USER =1 LDR* A2,A9 FILE CODE =1 ANK A2,/FF =1 LDK A5,0 SEARCH BOTH TABLES =1 CF A14,FNDFDB =1 RTN A14 =1 * EJECT ADMTSK * ********** * GETFPB * ********** * * GET FILE PARAMETER BLOCK TO ADM BUFFER * * INPUT : A9 = USER ECB ADDRESS * A10= FDB ADDRESS * A12= FPB ADDRESS * OUTPUT: A5=TTAB ADDRESS USER TASK * A4=NUMBER OF SECTORS PER RECORD * A1,A2,A3 ARE USED * GETFPB EQU * LD A4,DWTTAB,A10 GET USER TTAB ADDRESS LD A1,ECBBA,A9 FPB ADDRESS LDR A2,A12 ADM BUFFER ADDRESS LDK A3,FPBLLE-8 LENGTH OF FPB ADK A1,8 NOT FIRST PART CF A14,MOV:US FILE DESCRIPTOR TO WORK AREA LC A3,FPB:FO,A12 CONVERT FILE ORGANISATION TO ASCII LC A1,FILORG,A3 SC A1,FPB:FO,A12 ASCII * EJECT ADMTSK * * ANK A3,/FF RF(NZ) GETF20 L- OR X-FILE LDK A1,FPBLLE-FPBSLE REST OF FPB ADK A2,FPBLLE-8 END OF BUFFER GETF10 EQU * CLEAR REST OF FPB SUK A2,2 ADDRESS CMR A2 SUK A1,2 RB(P) GETF10 NEXT WORD LDKL A2,'00' ZEROIZE RETENTION PERIOD ST A2,FPB:RP,A12 SC A2,FPB:RP+2,A12 GETF20 EQU * LDK A4,0 SHAREABILITY = 0 SC A4,FPB:SH,A12 LD A4,FPB:RL,A12 RECORD LENGTH ADK A4,1 IN CASE OF S-FILE SRL A4,8 NUMBER OF SECTORS PER RECORD SUK A3,2 FILE ORGANIZATION RF(NZ) GETF30 NOT L-FILE CM FPB:RL,A12 RL=0 GETF30 EQU * RTN A14 * EJECT ADMTSK * * ********** * CONPAR * ********** * * * CONVERT PARAMETERS IN FILE PARAMETER BLOCK * * INPUT : A12 = FPB ADDRESS * A10 = FDB ADDRESS * A11=FDB ADDRESS OPENED FILE * OUTPUT: A5 = FPB LENGTH * A4 IS USED * A1,A2,A3,A6,A7,A13 ARE USED * CONPAR EQU * LDK A2,FPBSLE FPB LENGTH OF S-FILE LC A1,FPB:FO,A12 FILE ORGANIZATION SUK A1,'S' CONVERT TO NUMBER RF(Z) CON100 LDK A2,FPBLLE FPB LENGTH OF L-OR X-FILE LDK A1,2 L-FILE RF(L) CON100 LDK A1,3 X-FILE CON100 EQU * * EJECT ADMTSK * * ST A2,ECBRL,A8 SAVE LENGTH SC A1,FPB:FO,A12 FILE ORGANIZATION NUMBER ANK A1,2 L OR X FILE SRC A1,2 ORS A1,FDBOMD,A11 INDICATE FILE TYPE LDK A1,1 DEVICE TYPE SC A1,FPB:DT,A12 LC A1,FWTFNR,A11 FILE NUMBER SLL A1,8 ST A1,FPB:NO,A12 DATA FILE,INDEX FILE NUMBER IFT CRDEEX=1 CF A14,CONENL ENLARGE IN PERCENTAGE XIF IFT CRDEEX=0 CM FPB:EL,A12 XIF LD A4,FDBRLE,A11 RECORD LENGTH ST A4,FPB:RL,A12 RECORD LENGTH ADK A4,1 IN CASE OF S-FILE SRL A4,8 NUMBER OF SECTORS * EJECT ADMTSK * * LDR A13,A12 ADKL A13,FPB:S1 ADDRESS TO SIZE LDK A5,4 COUNTER CON500 EQU * LDK A1,0 LDR* A2,A13 RF(Z) CON600 LDR A6,A4 SECTORS PER RECORD CF A14,DIVMOD STR A2,A13 MOST SIGN PART CON600 EQU * LD A2,2,A13 KEEP REST LDR A6,A4 NUMBER OF SECTORS PER RECORD CF A14,DIVMOD ST A2,2,A13 ADKL A13,10 NEXT SIZE SUK A5,1 RB(NZ) CON500 MORE SIZES TO CONVERT LD A3,ECBRL,A8 FPB LENGTH LDR A5,A3 SAVE LENGTH LDR A1,A12 ADM BUFFER ADDRESS LD A2,ECBBA,A9 ADK A2,8 NOT FIRST PART SUK A3,8 LD A4,DWTTAB,A10 USER TTAB ADDRESS CF A14,MOV:SU FPB TO USER AREA RTN A14 * EJECT ADMTSK * * ********** * GETLRN * ********** * * CONVERT LAST RECORD NUMBER * * INPUT : A8=ECB ADDRESS * A11=FDB ADDRESS * * OUTPUT: A4=NUMBER OF SECTORS PER RECORD * A13=ADDRESS TO CONTROLL WORDS IN ECB * A1,A2=LRN SECTOR NUMBER-1 * ECBCW1,ECBCW2=LRN CONVERTED TO SECTOR NUMBER-1 * A6,A7 ARE USED * GETLRN EQU * LD A4,FDBRLE,A11 RECORD LENGTH ADK A4,1 SRL A4,8 NUMBER OF SECTORS LC A1,FDBLRN,A11 ANK A1,/FF LD A2,FDBLRN+1,A11 LDR A13,A8 ADDRESS TO CONTROLL WORDS ADKL A13,ECBCW1 STR A1,A13 LAST RECORD NUMBER ST A2,ECBCW2,A8 CF A14,DBLMUL CONVERT TO SECTOR ADDRESS RF RETA14 * EJECT ADMTSK * * ********** * OPFILE * ********** * * OPEN EXISTING FILE AND CHECH SHAREBILITY * * INPUT : A8=ECB ADDRESS * * OUTPUT : A11 = NEW FPB ADDRESS * A4=NUMBER OF SECTORS PER RECORD * A1,A2,A3,A5,A7 ARE USED * * OPFILE EQU * CF A14,GETFPB LDK A7,/A1 OPEN FILE CF A14,ADMOPE OPEN RF(NZ) RETA14 ERROR LDKL A1,/8000 RC: REQUEST ERROR LDK A2,1 LC A3,FPB:FO,A12 CHECK FILE ORGANIZATION CCK A3,'SS' RF(E) OPE100 S-FILE LDK A2,0 CCK A3,'LL' RF(E) OPE100 L-FILE CCK A3,'XX' RF(NE) RETA14 NOT L-,S- OR X-FILE * EJECT ADMTSK * * OPE100 EQU * AD A2,FPB:RL,A12 RECORD LENGTH ANK A2,/FF RF(NZ) RETA14 ILLEGAL RECORD LENGTH LC A2,FPB:BF,A12 BLOCKING FACTOR SUK A2,1 RF(NZ) RETA14 ILLEGAL BLOCKING FACTOR LDK A3,0 ENLARGE FACTOR LC A1,FWTPAR,A11 GET NUMBER OF USERS ANK A1,/3F 6 BITS SUK A1,1 RF(Z) SETFDB 1ST OPEN LD A1,FDBEXC,A11 RF(NZ) OPE900 FILE OPENED EXCLUSIVE LC A2,FDBOMD,A11 OPEN MODE ANK A2,/7F NOT FILE TYPE CC A2,DWTOR+1,A10 RF(E) RETA14 NO VIOLATION OF SHARABILITY ROULES OPE900 EQU * LDK A1,/40 INDICATE VIOLATION OF SHAREBILITY ROULES RF RETA14 * EJECT ADMTSK * * ********** * DBLMUL * ********** * * DOUBLE MULTIPLY * * INPUT : A4 = ARG1 * A13= ADDRESS TO ARG2 * * OUTPUT: CR SET ACCORDING TO RESULT * A6,A7 ARE USED * A1,A2 = RESULT * DBLMUL EQU * LDR A6,A4 ARG1 LDR* A7,A13 1ST PART OF ARG2 RF(Z) DBLM10 CF A14,MPYMOD ADK A1,0 RF(NZ) SETOVE OVERFLOW STR A2,A13 DBLM10 EQU * LDK A1,0 LDK A2,0 LD A7,2,A13 ARG2 RF(Z) DBLM30 LDR A6,A4 ARG1 CF A14,MPYMOD ADR* A1,A13 RF(O) SETOVE OVERFLOW * EJECT ADMTSK * * DBLM30 EQU * ST A2,2,A13 STR A1,A13 SAVE RESULT RETA14 EQU * ABL RTNA14 RTN A14 SETOVE EQU * ABL SETCRO RTN A14 (SET OVERFLOW) * IFT CRDEEX=1 * EJECT ADMTSK * * ********** * CREFIL * ********** * * CREATE FILE FORE OPEN OUTPUT * * INPUT : A8=ECB ADDRESS * OUTPUT: A1=RC FROM OPEN CR SET ACCORDING TO A1 * A4=NUMBER OF SECTORS PER RECORD * A2,A3,A4,A5,A6,A7,A13,A12 ARE USED * A11=FDB ADDRESS OF OPENED FILE * CREFIL EQU * CF A14,GETFPB GET FPB LDK A5,4 NUMBER OF VOLUMES LDR A13,A12 FDB ADDRESS ADKL A13,FPB:S1 ADDRESS TO SIZE CREF10 EQU * CF A14,DBLMUL NUMBER OF SECTTORS RB(N) SETOVE OVERBLOW CREF15 EQU * LDR A6,A1 NUMBER OF SECTORS LDR A7,A2 CF A14,DV3RST REST AFTER DIV 3 RF(Z) CREF18 NO REST LDR A2,A4 ONE MORE BLOCK CF A14,ADDMOD NUMBER OF SECTORS RB(O) SETOVE OVERBLOW STR A1,A13 INTO FPB ST A2,2,A13 RB CREF15 CHECK IF MULTIPLE OF 3 * EJECT ADMTSK * * CREF18 EQU * ADKL A13,10 SUK A5,1 RB(P) CREF10 NEXT SIZE CF A14,ENLFAC ENLARGE RB(NZ) SETOVE OVERBLOW LDKL A7,/2A1 CREATE FILE CF A14,ADMOPE CREATE FILE RB(NZ) RETA14 ERROR LDR* A2,A8 DATA FILE NUMBER SC A2,FPB:NO,A12 XIF * EJECT ADMTSK * * ********** * SETFDB * ********** * * SET FDB PARAMETERS FDBENL,FDBOMD,FDBEXC,FDBLRN AND FDBRLE * INPUT : A3 = ENLARGE IN NUMBER OF SECTORS * A11=FDB ADDRESS OF OPENED FILE * * SETFDB EQU * ST A3,FDBENL,A11 ENLARGE LD A2,DWTOR,A10 OPEN MODE AND OPTION SC A2,FDBOMD,A11 INDICATE OPEN MODE SLL A2,6 EXCLUSIVE ACCES WANTED RF(NN) SETF25 NO LD A1,DWTTAB,A10 SETF25 EQU * ST A1,FDBEXC,A11 INDICATE EXCLUSIVE OR NOT LD A2,FPB:FR,A12 MOVE LRN SC A2,FDBLRN,A11 LD A2,FPB:FR+2,A12 ST A2,FDBLRN+1,A11 LD A2,FPB:RL,A12 GET RECORD LENGTH RF(NZ) SETF30 NOT L-FILE LDKL A2,LFILEN L-FILE RECORD LENGTH SETF30 EQU * ST A2,FDBRLE,A11 LDK A1,0 RETUR EQU * RB RETA14 * IFT CRDEEX=1 EJECT ADMTSK * * ********** * FORFIL * ********** * * * FORMAT FILE * * INPUT : A8 = ECB ADDRESS * A11= FDB ADDRESS * * OUTPUT: * A1,A2,A4,A5,A6,A7,A13 ARE USED * FORFIL EQU * CF A14,GETLRN GET LAST RECORD NUMBER LDR A5,A1 SAVE LRN LDR A6,A2 FORF10 EQU * ADR A6,A4 NEXT RECORD RF(P) FORF20 NOT OVERFLOW ANK A6,/FF A4</FF ADK A5,1 FORF20 EQU * STR A5,A13 TO ECBCW ST A6,2,A13 CF A14,ADMWFO RB(Z) FORF10 FILE NOT READY ANKL A1,/1FF NOT END OF FILE BITS ST A1,ECBRC,A8 RF ADMI10 * XIF EJECT ADMTSK * * ********** * ADM:IO * * ADMWRI * ********** * * IO ROUTINES * * OUTPUT: CR SET ACCORDING TO RC EXCEPT RETRY BIT * * INPUT : A8= ECB ADDRESS * (A10 = FDB ADDRESS) * A1,A2,A7 ARE USED * ADMWFO EQU * FORMAT FILE LDK A7,/95 ORDER CODE LDKL A2,BUFFNU INDICATE RECORD NOT USED LDK A1,1 ONE SECTOR IO SC A1,ECBRL,A8 ADMI00 EQU * IFT MMUPAG=1 LDK A1,0 BIT 0,1 OF 18 BIT ADDRESS XIF RF ADM:IO * ADMWRI EQU * LD A7,FDBOMD,A10 FILE TYPE RF(N) ADMW10 L OR X FILE LD A7,ECBBA,A9 BUFFER ADDRESS AD A7,ECBRL,A8 END OF BUFFER * EJECT ADMTSK * * IFT MMUPAG=0 LDK A2,/FF SC A2,-1,A7 INDICATE RECORD USED XIF IFT MMUPAG=1 LD A2,DWTTAB,A10 USER TTAB ADDRESS TL TTB:MT,A2 USER MMU TABLE EL A2,-2,A7 GET LAST WORD OF BUFFER ORK A2,/FF SET RECORD BUSY ES A2,-2,A7 TL MONMMU MONITOR MMU TABLE XIF ADMW10 EQU * LDK A7,/95 WRITE * EJECT ADMTSK * * ********** * ADM:BA * ********** * * INPUT : A8 = ADM ECB ADDRESS * A9 = USER ECB ADDRESS * A10 = FDB ADDRESS * * OUTPUT: A1 = RC CR SET ACCORDING T A1 * A2,A7 ARE USED * ADM:BA EQU * IFT MMUPAG=0 LD A2,ECBBA,A9 BUFFER ADDRESS XIF IFT MMUPAG=1 LDK A2,0 LD A1,ECBBA,A9 16 BIT BUFFER ADDRESS DRL 12 SLL A1,1 PAGE ADDRESS AD A1,DWTTAB,A10 LD A1,TTB:MT,A1 MOST SIGNIFICANT BITS SRL A1,10 DRL 4 SLL A1,4 * EJECT ADMTSK * ********** * ADM:IO * ********** * * INPUT : A1,A2 = BUFFER ADDRESS * A7 = ORDER CODE * A8 = ADM ECB ADDRESS * XIF ADM:IO EQU * ST A2,ECBBA,A8 ADM ECB IFT MMUPAG=1 SCR A1,A8 BIT 0,1 XIF LKM DATA 15 ADMI10 EQU * LD A1,ECBRC,A8 RETURN CODE ANKL A1,/FEFF NOT RETRY BIT IFT CRDEEX=1 RB RETUR XIF IFT CRDEEX=0 RB RETA14 XIF * EJECT ADMTSK * ********** * ADMOPE * * ADMRFP * * ADM:AF * ********** * * OPEN FILE AND READ FILE PARAMETERS * * OUTPUT: A1= ERROR CODE CR SET ACCORDING TO A1 * A2,A7 ARE USED * A11= FWT ADDRESS * IF A11 = 0 NO OPEN HAS BEEN DONE * ADMOPE EQU * SUR A11,A11 INDICATE NO OPEN DONE CF A14,ADM:AF IFT CRDEEX=1 RB(NZ) RETUR ERROR XIF IFT CRDEEX=0 RB(NZ) RETA14 XIF LDR* A1,A8 FILE NUMBER ANK A1,/FF LDKL A11,SCTFWT ROOT TO FWT:S AOPE10 EQU * SEARCH FWT ADDRESS LDR* A11,A11 FWT ADDRESS SUK A1,1 RB(P) AOPE10 NEXT FWT ANKL A11,/FFFE BIT 15 USED BY FILE MANAGEMENT ADMRFP EQU * READ FILE PARAMETERS TO ADMBUF LDK A7,/83 ADM:AF EQU * LDR A2,A12 ADM BUFFER ADDRESS + 8 RB ADMI00 * EJECT ADMTSK * * END