DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦810646d05⟧

    Length: 33268 (0x81f4)
    Notes: pts_type(SC)
    Names: »TIODM.SC«

Derivation

└─⟦f350e1b7a⟧ Bits:30009678 Philips computer tape "600219"
    └─⟦this⟧ »MONGEN/TIODM.SC« 

PTS(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	00000 
* 
*   IF SDM HANDLING NOT WANTED PUT X:B EQU 0
* 
X:B	EQU	0 
SDM	EQU	00001 
* 
* 
*   IF EDM HANDLING WANTED PUT X:C EQU 1
* 
* 
X:C	EQU	0 
EDM	EQU	00000 
* 
* 
	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	00004
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	1
* 
*      X:C = INDEX RECORD BUFFER SIZE IN WORDS
* 
X:E	EQU	0 
RECBFZ	EQU	00007
* 
*	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	00000
* 
	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

Full view