|
|
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: 33256 (0x81e8)
Notes: pts_type(SC)
Names: »TIODM.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/TIODM.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/TIODM.SC«
IDENT TIODM REL 11.0 81-02-23 870105041100 =5, REL 11.0 81-02-19 =5, WRONG TASK NBR WHEN COMMIT =4, REL 11.0 81-02-18 =4, ASS.ERR IN FINDTT WHEN TTAB>256 BYTES =3, REL 11.0 81-02-02 =3, RDSTAT DOUBLE DEFINED FOR ADM+EDM =2, REL 11.0 81-01-28 =2, A7 UNCHANGED AT COMMIT =1, REL 11.0 81-01-26 =1, COMMIT ERROR FOR EDM **************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * TIODM = DATA MANAGEMENT ACTIVATION PART * * DMTEND = DATA MANAGEMENT COMMIT (/ROLLBACK) * * * * * **************************************************** * * THIS MODULE IS ENTERED IN THE SAME WAY AS A DRIVER VIA TIO * AND THE DWTADR IN FDB FOR CURRENT FILE * * THE DM REQUEST IS PROCESSED HERE UP TO THE POINT WHERE A SECTOR * FROM A DISC MUST BE ACCESSED * * ENTRY TIODM AND TIODM HOLDS THE START ADDRESS * * * INPUT A6 = FWT ADDRESS * A7 = ORDER WORD WITH W BIT = 0 * A8 = ECB ADDRESS * * * * IN ALL DM MODULES FDB WILL BE THE SAME AS FWT * EJECT * ************** * ENTRIES * ************** * ENTRY TIODM REFERENCED IN DWTADR ENTRY DMTEND COMMIT ENTRY (SDM,ADM AND EDM) ENTRY DMTTSB DM TTAB STACK BASE ENTRY FDBOMD,FDBENL,FDBEXC,FDBECB,FDBSNR ENTRY FDBRRO,FDBRLE,FDBBLF,FDBTNR,FDBLRN ENTRY FDBNIF,FDBEAL,FDBCRL,FDBKA,FDBMIA,FDBADF ENTRY FDBAI1,CRNTID,CRNCDF,CRNSTA ENTRY FDBBLZ BLOCK SIZE ENTRY FDBDMI DMTASK IDENT ENTRY FDBDBR,FDBMRO ENTRY FDBMEC MMU ECB DISPLACEMENT ENTRY FDBKEY SAVE AREA FOR KEY IN INDEXED ACCESS ENTRY TASHLT,FDBSTA,DWDM01 ENTRY REQER2 ENTRY RETRIE,EOMERR,NOKEY,NXTKYS,EOFRC,NODERR ENTRY PROT,KEYERR,PROERR,REQERR,LGTERR ENTRY EOFERR,EDMERR ENTRY TTABD,TTABLN,TABEND ENTRY DMXACD EXIT TASK AND ACTIVATE TASK #D ENTRY DMACTI ENTRY DMACTD ENTRY DWTPAB EDB INITIALIZATION PARAMETER BLOCK ENTRY MOV:SU,MOV:US,FINDTT,FNDFDB ENTRY ENLFAC,TOTSIZ,RTNA14,SETCRO,CONENL ENTRY COSZEN,SIZDIF ENTRY SDMSTS,SDMTTD,SDMBF1,SDMBF2 ENTRY RECBFZ EJECT TIODM * *************** * EXTERNALS * *************** * * EXTRN SCTCDT EXTRN SCTTCT TASK CONTROLL TABLE EXTRN RELPRO RELEASE PROTECTION EXTRN QTJOB EXTRN ACTOT EXTRN EXIT EXTRN PRUN EXTRN DFTAB EXTRN DMTIDP EXTRN DMTIDS EXTRN ECBCW EXTRN FWTVOL EXTRN HALT EXTRN TIOSDM EXTRN TIOADM EXTRN TIOEDM EXTRN TDISP EXTRN DISEND EXTRN TTB:SA,TTB:TD,TTB:ID EXTRN DWTTAB EXTRN CRNGET EXTRN ECBBA EXTRN FPB:FO EXTRN ACTDIS EXTRN DFTABL EXTRN FNDTID EXTRN MPYMOD,DIVMOD,ADDMOD EXTRN FPB:EL,FPB:S1,FPB:BF,FPB:RL EXTRN DV3RST EXTRN CRRBL EXTRN LKMRQE EXTRN TIOECR EDM COMMIT ROLLBACK EXTRN PABORD,PABBA BASE PARAMETER BLOCK DISPLACEMENTS EJECT * ************************ * CONDITIONAL ASSEMBLY * ************************ * * * * IF ADM HANDLING WANTED PUT X:A EQU 1 * X:A EQU 0 ADM EQU X:A * * IF SDM HANDLING NOT WANTED PUT X:B EQU 0 * X:B EQU 0 SDM EQU X:B * * * IF EDM HANDLING WANTED PUT X:C EQU 1 * * X:C EQU 0 EDM EQU X:C * * EJECT TIODM * * * NUMBER OF DM TASKS IS DEFINED BY X:B. * ONLY VALUES BETWEEN 2 AND 6 ARE PERMITTED. * ALL OTHER VALUES WILL GIVE 2 TASKS. * X:D EQU 2 NTASKS EQU X:D * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 0 * * X:C = INDEX RECORD BUFFER SIZE IN WORDS * X:E EQU 0 RECBFZ EQU X:E * * AN ADM VERSION WITHOUT OPEN OUTPUT, OPEN EXTEND AND CLOSE DISCARD * IS OBTAINED BY SETTING X:F EQU 0 * X:F EQU 0 CRDEEX EQU X:F * EJECT TIODM * * ******************* * COMBINED * * CONDITIONS * ******************* * IFT ADM+CRDEEX=2 ADMCDE EQU 1 XIF IFF ADM+CRDEEX=2 ADMCDE EQU 0 XIF * IF ADM AND SDM IFT ADM+SDM=2 ADMSDM EQU 1 XIF IFF ADM+SDM=2 ADMSDM EQU 0 XIF * ADMEDM=1 IF ADM AND EDM IFT ADM+EDM=2 ADMEDM EQU 1 XIF IFF ADM+EDM=2 ADMEDM EQU 0 XIF * ADM000=1 IF NOT EDM OR SDM IFT SDM+EDM=0 ADM000 EQU 1 XIF IFF SDM+EDM=0 ADM000 EQU 0 XIF * SDM000=1 IF NOT ADM OR EDM IFT ADM+EDM=0 SDM000 EQU 1 XIF IFF ADM+EDM=0 SDM000 EQU 0 XIF * EDM000=1 IF NOT ADM OR SDM IFT ADM+SDM=0 EDM000 EQU 1 XIF IFF ADM+SDM=0 EDM000 EQU 0 XIF * EJECT * * ERROR CODES * EOMERR EQU /A000 OUTSIDE MEDIUM LIMITS PROT EQU /0040 THIS DATA PROTECTED NODERR EQU /8800 NO EXPECTED DATA KEYERR EQU /8400 EXPECTED KEY NOT FOUND PROERR EQU /0010 ROLLBACK FOR PROTECT REASONS REQERR EQU /8000 GENERAL REQUEST ERROR REQER2 EQU /FFFE REQUEST ERROR LGTERR EQU /0008 INCORRECT LENGTH EDMERR EQU /8080 DATA MANAGEMENT ERROR EOFERR EQU /9000 END OF FILE * * MESSAGES * RETRIE EQU /0100 DISC RETRIES NOKEY EQU /0400 NOT SEARCHED KEY NXTKYS EQU /0200 NEXT KEY SAME EOFRC EQU /1000 END OF FILE * MMTAB1 FORM 16=/0000,16=/0400,16=/0800,16=/0C00 MMTAB2 FORM 16=/1000,16=/1400,16=/1800,16=/1C00 MMTAB3 FORM 16=/2000,16=/2400,16=/2800,16=/2C00 MMTAB4 FORM 16=/3000,16=/3400,16=/3800,16=/3C00 * * CONSTANTS * SIZDIF EQU 10 STCRES EQU 14 TASK STACK SIZE EJECT IFF NTASKS=3 IFF NTASKS=4 IFF NTASKS=5 IFF NTASKS=6 F EQU 0 G EQU 0 H EQU 0 I EQU 0 XIF IFT NTASKS=3 F EQU 1 G EQU 0 H EQU 0 I EQU 0 XIF IFT NTASKS=4 F EQU 1 G EQU 1 H EQU 0 I EQU 0 XIF IFT NTASKS=5 F EQU 1 G EQU 1 H EQU 1 I EQU 0 XIF IFT NTASKS=6 F EQU 1 G EQU 1 H EQU 1 I EQU 1 XIF IFT MMUPAG=0 MMTABL EQU 32 XIF IFT MMUPAG=1 MMTABL EQU 0 XIF EJECT IFT ADM+SDM=0 TTABST EQU * TTABD EQU * TTABLN EQU *-TTABST TABEND EQU * DMTTSB EQU * SDMSTS EQU TTABLN SDMTTD EQU TTABLN SDMBF1 EQU * SDMBF2 EQU * XIF IFF ADM+SDM=0 * *************************** * TTAB:S FOR DM TASKS * ************************* * TTABST EQU * MMTAB1 MMTAB2 MMTAB3 MMTAB4 RORG *-MMTABL DATA 0 CURRENT SEGMENT BASE DATA 0 SEGMENT TABLE POINTER DATA 0 SEGMENT BLOCK POINTER DATA 0 APPLICATION CONTROL BLOCK POINTER TTABD EQU * DATA 0 DISPATCHER QUEUE LINK DATA '#D' TASK ID DATA 49 TASK LEVEL DATA 0 PENDING POINTER DATA /C4C0 PSW DATA 0 DISPATCH ADDRESS DATA 0,0,0,0,0,0,0 REGISTER SAVE AREA A1-A7 DATA 0,0,0,0,0,0,0 A8-A14 DATA TTABDE-* TERMINAL DEVICES TTABTD EQU *-TTABD DATA 0,0 MASTER INDEX ENTRY TTABDE EQU * RES STCRES TASK STACK SDMSTS EQU *-TTABDE-2 DMTTSB EQU *-2-TTABD TTBBF1 EQU *-TTABD RES RECBFZ BUFAR1 TTBBF2 EQU *-TTABD RES RECBFZ BUFAR2 TTABLN EQU *-TTABST SDMTTD EQU TTABTD-DMTTSB SDMBF1 EQU TTBBF1-DMTTSB SDMBF2 EQU TTBBF2-DMTTSB EJECT MMTAB1 MMTAB2 MMTAB3 MMTAB4 RORG *-MMTABL DATA 0 CURRENT SEGMENT BASE DATA 0 SEGMENT TABLE POINTER DATA 0 SEGMENT BLOCK POINTER DATA 0 APPLICATION CONTROL BLOCK POINTER TTABE EQU * DATA 0 DISPATCHER QUEUE LINK DATA '#E' TASK ID DATA 49 TASK LEVEL DATA 0 PENDING POINTER DATA /C4C0 PSW DATA 0 DISPATCH ADDRESS DATA 0,0,0,0,0,0,0 REGISTER SAVE AREA A1-A7 DATA 0,0,0,0,0,0,0 A8-A14 DATA TTABEE-* TERMINAL DEVICES DATA 0,0 MASTER INDEX ENTRY TTABEE EQU * RES STCRES TASK STACK RES RECBFZ+RECBFZ BUFAR1,BUFAR2 IFT F=1 EJECT MMTAB1 MMTAB2 MMTAB3 MMTAB4 RORG *-MMTABL DATA 0 CURRENT SEGMENT BASE DATA 0 SEGMENT TABLE POINTER DATA 0 SEGMENT BLOCK POINTER DATA 0 APPLICATION CONTROL BLOCK POINTER TTABF EQU * DATA 0 DISPATCHER QUEUE LINK DATA '#F' TASK ID DATA 49 TASK LEVEL DATA 0 PENDING POINTER DATA /C4C0 PSW DATA 0 DISPATCH ADDRESS DATA 0,0,0,0,0,0,0 REGISTER SAVE AREA A1-A7 DATA 0,0,0,0,0,0,0 A8-A14 DATA TTABFE-* TERMINAL DEVICES DATA 0,0 MASTER INDEX ENTRY TTABFE EQU * RES STCRES TASK STACK RES RECBFZ+RECBFZ BUFAR1,BUFAR2 IFT G=1 EJECT MMTAB1 MMTAB2 MMTAB3 MMTAB4 RORG *-MMTABL DATA 0 CURRENT SEGMENT BASE DATA 0 SEGMENT TABLE POINTER DATA 0 SEGMENT BLOCK POINTER DATA 0 APPLICATION CONTROL BLOCK POINTER TTABG EQU * DATA 0 DISPATCHER QUEUE LINK DATA '#G' TASK ID DATA 49 TASK LEVEL DATA 0 PENDING POINTER DATA /C4C0 PSW DATA 0 DISPATCH ADDRESS DATA 0,0,0,0,0,0,0 REGISTER SAVE AREA A1-A7 DATA 0,0,0,0,0,0,0 A8-A14 DATA TTABGE-* TERMINAL DEVICES DATA 0,0 MASTER INDEX ENTRY TTABGE EQU * RES STCRES TASK STACK RES RECBFZ+RECBFZ BUFAR1,BUFAR2 IFT H=1 EJECT MMTAB1 MMTAB2 MMTAB3 MMTAB4 RORG *-MMTABL DATA 0 CURRENT SEGMENT BASE DATA 0 SEGMENT TABLE POINTER DATA 0 SEGMENT BLOCK POINTER DATA 0 APPLICATION CONTROL BLOCK POINTER TTABH EQU * DATA 0 DISPATCHER QUEUE LINK DATA '#H' TASK ID DATA 49 TASK LEVEL DATA 0 PENDING POINTER DATA /C4C0 PSW DATA 0 DISPATCH ADDRESS DATA 0,0,0,0,0,0,0 REGISTER SAVE AREA A1-A7 DATA 0,0,0,0,0,0,0 A8-A14 DATA TTABHE-* TERMINAL DEVICES DATA 0,0 MASTER INDEX ENTRY TTABHE EQU * RES STCRES TASK STACK RES RECBFZ+RECBFZ BUFAR1,BUFAR2 IFT I=1 EJECT MMTAB1 MMTAB2 MMTAB3 MMTAB4 RORG *-MMTABL DATA 0 CURRENT SEGMENT BASE DATA 0 SEGMENT TABLE POINTER DATA 0 SEGMENT BLOCK POINTER DATA 0 APPLICATION CONTROL BLOCK POINTER TTABI EQU * DATA 0 DISPATCHER QUEUE LINK DATA '#I' TASK ID DATA 49 TASK LEVEL DATA 0 PENDING POINTER DATA /C4C0 PSW DATA 0 DISPATCH ADDRESS DATA 0,0,0,0,0,0,0 REGISTER SAVE AREA A1-A7 DATA 0,0,0,0,0,0,0 A8-A14 DATA TTABIE-* TERMINAL DEVICES DATA 0,0 MASTER INDEX ENTRY TTABIE EQU * RES STCRES TASK STACK RES RECBFZ+RECBFZ BUFAR1,BUFAR2 XIF IFF ADM+SDM=0 TPART1 EQU TTABD-TTABST TABEND EQU *+TPART1 XIF EJECT * * FDB OFFSET DEFINITIONS * FDBSTA EQU * DWDM01 EQU * DATA 0,/8000,0,0,TIODM,0,0,0 DWT STANDARD IFT MMUPAG=1 DATA 0,FDBMMU SPECIAL DWT ITEMS XIF DWTPAB EQU *-DWDM01 PARAMETER BLOCK FOR EDM INI DATA 0,0,0,0,0,0,0 IFT EDM000+MMUPAG=2 FDBMMU EQU * XIF * FWT PART DATA 0,0,0,0,0,0,0 IFF ADM+SDM=0 IFT MMUPAG=1 FDBMMU EQU * DATA 0,0,0,0,0,0,0 MMU ECB XIF IFF ADM+SDM=0 DATA 0,0,0,0,0,0,0 FDBECB DATA 0,0,0,0,0 IFT SDM=1 DATA 0,0,0,0,0,0,0 DATA 0,0,FDBSTA,0,0 DATA 0,0,0,0,0 XIF * EJECT * * IFT MMUPAG=0 START1 EQU 44 XIF IFT MMUPAG=1 START1 EQU 62 XIF FDBMEC EQU START1-14 FDBECB EQU START1 ECB START FDBOMD EQU START1+14 OPEN MODE FDBLRN EQU START1+15 LAST RECORD NUMBER FDBRLE EQU START1+18 RECORD LENGTH FDBENL EQU START1+20 ENLARGE FACTOR FDBEXC EQU START1+22 EXCLUSIVE ACCESS INDICATOR FDBSNR EQU START1+24 SECTOR NUMBER FDBRRO EQU START1+28 RELATIVE RECORD OFFSET FDBBLF EQU START1+30 BLOCKING FACTOR FDBTNR EQU START1+31 TASK NUMBER CALLING TASK FDBNIF EQU START1+32 NO OF INDEX FILES FDBBLZ EQU START1+33 NR OF SECTORS IN BLOCK FDBEAL EQU START1+34 EA LINK ROOT FDBCRL EQU START1+36 CRN LINK ROOT FDBKA EQU START1+38 KEY ADDRESS IN DATA FILE FDBMIA EQU START1+40 ADDRESS OF MASTER INDEX FDBADF EQU START1+42 ADDRESS OF DATA FILE FDB FDBAI1 EQU START1+44 ADDRESS OF INDEX FILE FDB FDBDBR EQU START1+52 DELAY,BASIC AND REL BUFFER FLAGS FDBDMI EQU START1+53 RELATIVE DMTASK ID FDBMRO EQU START1+54 MAX FDBRRO FDBKEY EQU START1+56 KEY AREA FOR INDEXED ACC * EJECT TIODM * * CRN BUFFER OFFSET DEFINITIONS * CRNTID EQU 2 TASK ID CRNSTA EQU 3 CURRENT STATUS CRNCDF EQU 4 CURRENT DATA FILE * * * * **************************** * * * DRIVER ADDRESS BLOCK * * * **************************** * * DATA 0 DATA MANAGEMENT DEVICE INDEX TIODM DATA TIODM0 ACTIVATION ADDRESS EJECT TIODM * * TIODM0 EQU * IFF ADM+SDM=0 LDKL A14,FDBECB ADKL A14,ECBCW ADR A14,A6 STACK BASE ADK A7,0 RF(NZ) TDM100 NOT READ STATUS IFT ADM=1 LD A1,DWTTAB,A6 USER TTAB ADDRESS LDR* A2,A8 ANK A2,/FF FILE CODE LDK A5,0 CF A14,FNDFDB GET FC ENTRY ADDRESS LCR A4,A4 GET STATUS XIF IFT ADM+SDM=2 CWK A6,FDBSTA RF(E) RDST10 FILE NOT OPENED LD A1,FDBOMD,A6 RF(NN) RDST50 S-FILE RF RDSTAT X,L-FILE RDST10 EQU * ANK A4,/FF RF(NZ) RDSTAT L,X-FILE RDST50 EQU * XIF IFT ADMEDM=1 CWK A6,FDBSTA RF(E) RDST10 OPEN LD A1,FDBOMD,A6 RF(NN) TDM150 S-FILE RF RDSTAT RDST10 EQU * ANK A4,/FF RF(Z) TDM150 NO STATUS * =3 XIF IFT SDM=1 LDR A11,A6 FDB ADDRESS CF A14,CRNGET GET CURRENCY LC A4,CRNSTA,A2 XIF RDSTAT EQU * =3 IFF ADM+SDM=0 EJECT * =3 ANK A4,/FF ST A4,ECBCW,A8 RETURN STATUS CM ECBCW+2,A8 LDK A1,0 RET CODE OK ABL DISEND END IO XIF * EJECT TIODM * TDM100 EQU * IFF ADMSDM+ADMEDM=0 CWK A6,FDBSTA RF(E) TDM200 OPEN LD A1,FDBOMD,A6 RF(N) TDM300 L,X-FILE XIF TDM150 EQU * IFT SDM=1 ABL TIOSDM S-FILE XIF IFT EDM=1 ABL TIOEDM S-FILE XIF IFF ADMSDM+ADMEDM=0 TDM200 EQU * LD A1,ECBBA,A8 GET FDB ADDRESS IFT MMUPAG=0 LC A1,FPB:FO,A1 FILE ORGANISATION XIF IFF ADMSDM+ADMEDM=0 IFT MMUPAG=1 EL A1,FPB:FO+7,A1 XIF IFF ADMSDM+ADMEDM=0 ANK A1,/FF SUK A1,1 RB(NP) TDM150 S-FILE,I-FILE TDM300 EQU * XIF IFT ADM=1 ABL TIOADM L,X-FILE XIF EJECT TIODM * * ********** * DMACTI * * DMACTD * ********** * * ACTIVATE ADM AND/OR SDM TASK * * INPUT : A2 = DISPATCH ADDRESS * A6 = FDB ADDRESS * DMACTI EQU * IFF ADM+SDM=0 LC A7,FWTVOL,A6 GET FILE CODE ANK A7,/FF LDK A3,0 DMAC10 EQU * ADK A3,1 CC A7,DFTAB-1,A3 RB(NE) DMAC10 CHECK NEXT FILE CODE LC A7,DMTIDP-1,A3 PRIMARY TASK NUMBER CF A15,FINDTT RF(Z) TASHLT TTAB NOT FOUND LD A1,TTB:SA,A5 RF(Z) DMAC50 TASK FREE LC A7,DMTIDS-1,A3 SECONDARY TASK ANK A7,/FF CF A15,FINDTT RF(Z) TASHLT TTAB NOT FOUND DMAC50 EQU * LDR A1,A6 FDB ADDRESS CF A15,ACTOT ACTIVATE DM TASK ABL TDISP EJECT TIODM * * DMACTD EQU * ACTIVATE DM TASK #D LDKL A5,TTABD RB DMAC50 XIF * * ABNORMAL SYSTEM ERROR * TASHLT EQU * LDK A1,/11 CF A15,HALT * EJECT TIODM * * ********** * DMXACD * ********** * * EXIT RUNNING TASK AND ACTIVATE DM TASK #D * * * INPUT: A8=DISPATCH ADDRESS * A6=FDB ADDRESS * DMXACD EQU * EXIT RUNNING TASK AND ACTIVATE #D IFF SDM+ADM=0 LD A5,PRUN RUNNING TASK ID INH CF A15,EXIT CM PRUN LDR A2,A8 DISPATCH ADDRESS RB DMACTD XIF * EJECT TIODM * * ********** * DMTEND * ********** * * COMMIT ENTRY * ENTERED BY * LKM * DATA 16 * * DMTEND EQU * IFT EDM=0 IFT SDM=1 LDR A6,A5 SAVE USER TTAB ADDRESS LDR A3,A7 ORDER CODE =2 ANK A3,/7F =2 RF(NZ) DMTERR ERROR: ORDER NOT ALLOWED LD A3,SCTTCT TCTAB ADDRESS DMTE10 EQU * ADK A3,2 POINTER CWR* A5,A3 ENTRY IN TABLE RB(NE) DMTE10 TRY NEXT SU A3,SCTTCT RELATIVE TASK NUMBER * SUK A3,2 =5 SRL A3,1 LDKL A14,STACK CF A14,RELPRO DMTE40 EQU * LDR A5,A6 TTAB USER ST A7,TTB:SA+14,A5 RET CODE IN A7 INH CF A15,QTJOB RESTART USER ABL TDISP DMTERR EQU * REQUEST ERROR LDKL A7,REQER2 RB DMTE40 RETURN * DATA 0,0,0 STACK DATA 0 4 WORDS * XIF IFT EDM=1 LDR A6,A5 SAVE TTAB USER =1 LDR A1,A5 GET BASE PARAMETER BLOCK ADDRESS =1 AD A1,TTB:TD,A1 DEVICE TABLE LENGTH ADKL A1,TTB:TD BASE PARAMETER BLOCK ADDRESS LDR* A2,A1 OR A2,2,A1 ORDER WORD ABL(NZ) LKMRQE OTHER REQUEST BUSY LDKL A2,/100 COMMIT ROLLBACK ACTIVATION STR A2,A1 ST A7,PABORD,A1 ORDER WORD ST A8,PABBA,A1 TRANSACTION CONTROL BLOCK ADDRESS LDKL A7,'$E' EDM TASK ID ABL TIOECR ACTIVATE EDM TASK * * XIF IFT ADM000=1 CM TTB:SA+14,A5 RETURN CODE INH CF A15,QTJOB ABL TDISP XIF EJECT *************************************************************************** * C O M M O N S U B R O U T I N E S F O R A D M A N D S D M * *************************************************************************** * * * * ********************************* * SUBROUTINES NOT IN SYSTEM * ******************************** * IFT ADM+SDM=0 DMACTD EQU * FNDFDB EQU * MOV:US EQU * MOV:SU EQU * FINDTT EQU * RTNA14 EQU * SETCRO EQU * XIF IFF SDM=1 CASZEN EQU * COSZEN EQU * XIF IFT SDM+ADMCDE=0 ENLFAC EQU * CONENL EQU * TOTSIZ EQU * XIF RB TASHLT SYSGEN ERROR * * * EJECT TIODM IFF ADM+SDM=0 ****DESCRIPTION************************************* * * FNDFDB WILL SEARCH TTAB AND SCTCDT FOR A FILE CODE * ****ENTRY PARAMETERS******************************** * * A1 = TTAB ADDR * A2 = FILE CODE TO SEARCH FOR * A5 NOT= 0 WHEN ONLY TTAB SHALL BE SEARCHED * ****EXIT PARAMETERS********************************* * * A1 = UNCHANGED * A2 = FILE CODE. = 0 WHEN NO CODE IS FOUND * A4 = TTAB/SCTCDT ENTRY ADDR WHEN CODE IS FOUND * A5 = 0 WHEN FOUND IN SCTCDT = 1 WHEN TTAB * ****USED REGISTERS********************************** * * A1-A5 * ****************************************************** EJECT ********** * FNDFDB * ********** FNDFDB EQU * LD A3,TTB:TD,A1 LENGTH DEV DESCR FND030 EQU * SUK A3,4 RF(NP) FND040 FILE CODE NOT IN TTAB LDR A4,A1 ADKL A4,TTB:TD ADR A4,A3 CC A2,1,A4 RB(NE) FND030 LDK A5,1 RF FND080 CODE FOUND IN TTAB EJECT * * SEARCH FILE CODE IN SCTCDT * FND040 EQU * LDR A5,A5 RF(NZ) FND060 ONLY TTAB IS SEACHED LD* A4,SCTCDT FND050 EQU * SUK A4,4 RF(NP) FND060 CODE NOT FOUND AT ALL LD A3,SCTCDT ADR A3,A4 CC A2,1,A3 RB(NE) FND050 AD A4,SCTCDT RF FND080 CODE FOUND FND060 EQU * LDK A2,0 NO CODE FND080 EQU * RTN A14 EJECT * * MOVE BLOCK AND MOVE CONSTANTS * MOVTIS EQU 0 TASK ID SENDING TASK MOVTIR EQU 2 TASK ID RECEIVING TASK MOVBAS EQU 4 BUFFER ADDRESS SENDING TASK MOVBAR EQU 6 BUFFER ADDRESS RECEIVING TASK MOVLEN EQU 8 NUMBER OF BYTES TO MOVE * MOVSAV EQU 10 SAVE AREA MOVBLK EQU * DATA 0,0 DATA 0,0 DATA 0 * DATA 0 EJECT ********** * MOV:US * ********** * * M O V : U S * * THIS ROUTINE MOVES DATA FROM THE USER AREA (SENDING BUFFER) TO * THE SYSTEM AREA (RECEIVING BUFFER). DIFFERENT WAYS OF MOVING THE DATA * ARE USED, DEPENDING ON WHETHER THE BUFFER ADDRESSES ARE EVEN OR NOT. * * INPUT: A1 = ADDRESS OF SENDING BUFFER (USER AREA) * A2 = ADDRESS OF RECEIVING BUFFER (SYSTEM AREA) * A3 = NUMBER OF BYTES TO BE MOVED * A4 = USER TTAB ADDRESS * * OUTPUT: A4=DESTROYED * MOV:US EQU * LD A4,TTB:ID,A4 TASK ID ST A4,MOVTIS+MOVBLK LDKL A4,'#M' DESTINATION TASK ID ST A4,MOVTIR+MOVBLK RF MOVCOM EJECT TIODM ********** * MOV:SU * ********** * * M O V : S U * * THIS ROUTINE MOVES DATA FROM THE SYSTEM AREA (SENDING BUFFER) TO * THE USER AREA (RECEIVING BUFFER). DIFFERENT WAYS OF MOVING THE DATA * ARE USED, DEPENDING ON WHETHER THE BUFFER ADDRESSES ARE EVEN OR NOT. * * INPUT: A1 = ADDRESS OF SENDING BUFFER (SYSTEM AREA) * A2 = ADDRESS OF RECEIVING BUFFER (USER AREA) * A3 = NUMBER OF BYTES TO BE MOVED * A4 = USER TTAB ADDRESS * * OUTPUT: A4=DESTROYED * MOV:SU EQU * LD A4,TTB:ID,A4 TASK ID DESTINATION TASK ST A4,MOVTIR+MOVBLK LDKL A4,'#M' TASK ID SOURCE TASK ST A4,MOVTIS+MOVBLK EJECT MOVCOM EQU * ENB ST A7,MOVSAV+MOVBLK SAVE A7 LDKL A7,MOVBLK ST A1,MOVBAS,A7 ST A2,MOVBAR,A7 DESTINATION ADDRESS ST A3,MOVLEN,A7 LENGTH TO MOVE LKM DATA 21 LD A7,MOVSAV,A7 SAVED REGISTER RTN A14 EJECT ********** * FINDTT * ********** * * FIND TTAB ADDRESS * * ENTRY: A7=TASK NUMBER 0-5 * * EXIT: A5=TTAB ADDRESS * A5=0 TTAB NOT FOUND CR=0 * A7=-1 * FINDTT EQU * LDR A7,A7 RF(N) NFOUND ILLEGAL TASK NUMBER LDKL A5,TTABD ADDRESS TO TASK 0 FIND10 EQU * SUK A7,1 RF(N) FINEND TASK FOUND ADKL A5,TTABLN POINTER TO NEXT TTAB =4 CWK A5,TABEND RB(NE) FIND10 NOT LAST TTAB NFOUND EQU * LDK A5,0 INDICATE TTAB NOT FOUND FINEND EQU * ADKL A15,4 LDR A5,A5 SET CR ABR* A15 XIF EJECT TIODM * IFF SDM+ADMCDE=0 * ********** * ENLFAC * ********** * * GET ENLARGE FACTOR AND CONVERT TO SECTORS * * INPUT : A12=FPB ADDRESS * A4=NUMBER OF SECTORS PER BLOCK * OUTPUT: A1= RC * A4=NUMBER OF SECTORS PER BLOCK * A3= ENLARGE IN NUMBER OF SECTORS * A2,A5,A6,A7 ARE USED * ENLFAC EQU * ST A13,-8,A14 SAVE A13 CF A14,TOTSIZ GET TOTAL LENGTH OF FILE RF(O) SETCRO OVERFLOW LDR A3,A2 CONVERT PERCENTAGE LD A6,FPB:EL,A12 ENLARGE RF(N) SETCRO OVERFLOW LDR A7,A1 RF(Z) ENLF30 CF A14,MPYMOD ADK A1,0 RF(NZ) SETCRO OVERFLOW LD A6,FPB:EL,A12 ENLARGE LDR A5,A2 * EJECT TIODM * * ENLF30 EQU * LDK A2,0 LDR A7,A3 RF(Z) ENLF40 ZERO CF A14,MPYMOD ENLF40 EQU * ADR A1,A5 RF(O) SETCRO OVERFLOW LDK A6,100 CF A14,DIVMOD NUMBER OF SECTORS RF(O) SETCRO OVERFLOW ADK A1,0 RF(Z) ENLF45 NO REST ADK A2,1 AT LEAST ONE BLOCK IN ENLARGE ENLF45 EQU * LDK A1,0 RESET REST LDR A3,A2 ENLARGE IN NUMBER OF SECTORS LDR A6,A4 NUMBER OF SECTORS PER RECORD CF A14,DIVMOD ADK A1,0 RF(Z) ENLF60 REST=0,INCLUDING ENLARGE=0 SUR A3,A1 MAKE ENLARGE INTEGER NUMBER OF BLOCKS ENLF50 EQU * ADR A3,A4 ONE MORE BLOCK RF(NP) SETCRO OVERFLOW ENLF60 EQU * LDR A2,A3 LDK A1,0 CF A14,DV3RST RB(NZ) ENLF50 NOT MULTIPLE OF 3 LD A13,-8,A14 SAVED REGISTER RF RTNA14 EJECT TIODM * * ********** * CONENL * ********** * * CONVERT ENLARGE FROM NUMBER OF SECTORS TO PERCENTAGE * * CONENL EQU * CF A14,TOTSIZ GET TOTAL SIZE OF FILE LDR A3,A1 SAVE TOTAL SIZE LDR A4,A2 LD A6,FDBENL,A11 ENLARGE IN SECTORS LDK A7,100 CF A14,MPYMOD SLN A3,A5 NORMALIZE BEFORE DIVIDE NGR A5,A5 ADK A5,15 RF(NP) CON400 NO NEED TO NORMALIZE CON200 EQU * SRL A4,1 DOUBLE SHIFT DIVISOR AND DIVIDENT SRL A2,1 SRC A1,1 RF(NN) CON300 BIT NOT SET ANKL A1,/7FFF ORKL A2,/4000 SET BIT CON300 EQU * SUK A5,1 RB(P) CON200 CONTINUE TO SHIFT EJECT CON400 EQU * ORR A3,A4 LDR A6,A3 CF A14,DIVMOD ENLARGE IN PERCENT ST A2,FPB:EL,A12 SAVE ENLARGE RTN A14 EJECT TIODM * * ********** * TOTSIZ * ********** * * CALCULATE TOTAL SIZE OF FILE * * INPUT : A12 = FPB ADDRESS * OUTPUT: A1,A2=TOTAL SIZE OF FILE * A13 = ADDRESS TO LAST SIZE + DIFFFERENCE IN SIZE DISPLACEMENT * A5 = 0 * A6,A7 ARE USED * TOTSIZ EQU * LDR A13,A12 ADKL A13,FPB:S1 ADDRESS TO SIZE LDK A5,4 COUNTER LDK A1,0 LDK A2,0 TOTS10 EQU * LDR* A6,A13 GET SIZE LD A7,2,A13 CF A14,ADDMOD SUM OF SIZES RF(O) SETCRO OVERFLOW ADKL A13,SIZDIF NEXT SIZE SUK A5,1 RB(P) TOTS10 ADD NEXT XIF EJECT IFF ADM+SDM=0 ********** * RTNA14 * ********** * * SET CONDITION AND RETURN * RTNA14 EQU * ADKL A14,4 NGR A1,A1 NGR A1,A1 ABR* A14 ********** * SETCRO * ********** * * SET OVERFLOW AND RETURN * SETCRO EQU * LDKL A1,/8000 RB RTNA14 XIF EJECT IFT SDM=1 ********** * COSZEN * ********** * * COSZEN=CONVERT SIZE TO NBR OF RECORS AND ENLARGE TO PERCENTAGE * * ENTRY: A12=FPB ADDRESS * A11=FDB ADDRESS * * EXIT : SIZE AND ENLARGE UPADTED IN FPB * A1,A2,A3,A4,A5,A6,A7,A13=USED * COSZEN EQU * CF A14,CONENL CONVERT ENLARGE FACTOR * * CONVERT SIZE * LDK A5,4 NUMBER OF VOLUMES LDR A13,A12 FPB ADDRESS ADKL A13,FPB:S1 POINTER TO SIZE 1 EJECT COS100 EQU * LDR* A1,A13 LD A2,2,A13 A1,A2=SIZE (SECTORS) LC A6,FDBBLZ,A11 BLOCK SIZE (SECTORS/BLOCK) ANK A6,/FF CF A14,DIVMOD A1,A2/A6=A2 REST IN A1 RB(O) SETCRO OVERFLOW LDR A6,A2 LC A7,FDBBLF,A11 BLOCK FACTOR (RECORDS/BLOCK) ANK A7,/FF CF A14,MPYMOD A6*A7=A1,A2 STR A1,A13 ST A2,2,A13 A1,A2=SIZE IN RECORDS ADKL A13,SIZDIF SUK A5,1 RB(P) COS100 NEXT SIZE RTN A14 XIF * * * END