.MCALL .MODULE .MODULE SYSTEM,VERSION=75,COMMENT=,LIB=YES .SbTtl ...CM. -- Copyright statement .MACRO ...CM. .REM % Copyright (c) 1998 by Mentec, Inc., Nashua, NH. All rights reserved This software is furnished under a license for use only on a single computer system and may be copied only with the inclusion of the above copyright notice. This software, or any other copies thereof, may not be provided or otherwise made available to any other person except for use on such system and to one who agrees to these license terms. Title to and ownership of the software shall at all times remain in Mentec, Inc. The information in this document is subject to change without notice and should not be construed as a commitment by Digital Equipment Corporation, or Mentec, Inc. Digital and Mentec assume no responsibility for the use or reliability of its software on equipment which is not supplied by Digital or Mentec, and listed in the Software Product Description. % .ENDM .MDelete ...CM. .SbTtl WHY DOES THIS FILE EXIST? .Rem % This file is the centralized place for symbol definition for the RT-11 Operating System. Any location, structure, or value referenced by 2 or more system components which are not assembled or linked should be defined here. Eventually the definition of these cross component values should come from this library. This will prevent errors due to misdefinition or changes. It also serves as a reference document for understanding the system data structures. It is the registry for some system "resorces" such as handler device codes (.DEVDF). % .SbTtl . Conditional summary ;+ ;COND ; DOC$UN = 0 -- generate only documented interfaces ; ; DOC$UN = 1 -- generate undocumented interfaces too ; ; FIX$ED = 0 -- generate all symbols according to other ; conditional symbol settings (or defaults) ; FIX$ED = 1 -- generate only symbols defined for all ; conditional symbol settings. ; ; MAC$ER = 0 -- if this library is ASSEMBLED generate no ; test error messages. ; MAC$ER = 1 -- if this library is ASSEMBLED generate test ; error messages. ; ; ONE$DO = 0 -- generate all macro calls ; ; ONE$DO = n -- generate just nth macro call ; and MCALL defn from lib ; ; ONE$DO = -1 -- test all support macros ; ; ONE$DO = -2 -- test all ..%%%% ; ; ONE$DO = -3 -- test first half of .%%%DF ; ; ONE$DO = -4 -- test second half of .%%%DF ; ; ONE$DO = 30000 -- indicate last valid ONE$DO positive number ; ; ; internal conditional, controlled externally by ONE$DO ; ; Note "negative logic" ; ; GP1$DO = 0 -- if all or test group 1 ; ; GP1$DO = -1 -- if not all and not test group 1 ; ; GP2$DO = 0 -- if all or test group 2 ; ; GP2$DO = -1 -- if not all and not test group 2 ; ; GP3$DO = 0 -- if all or test group 3 ; ; GP3$DO = -1 -- if not all and not test group 3 ; ; GP4$DO = 0 -- if all or test group 4 ; ; GP4$DO = -1 -- if not all and not test group 4 ; ; Other conditional symbols are used within definitions: ; ; DHMD$M ; DLMD$M ; DZMD$M ; FPU$11 ; MAT$S ; MMG$T ; MTI$M ; MTT$Y ; R.BLGH ; R.GNUM ; R.GWSZ ; SB ; SPC$PS ; SYT$K ; TTBF$I ; TTBF$O ; W.BLGH ; W.NNUM ; WN.WSZ ;- DOC$UN=1 ;allow generation of undocumented interfaces FIX$ED=0 ;allow generation of non-fixed areas too .IIF NDF MAC$ER MAC$ER=0 ;default to no error message testing .IIF NDF ONE$DO ONE$DO=0 ;default to test all macro calls ONE.DO=0 ;initialize definition counter GP1$DO=-1 ;assume not group 1 GP2$DO=-1 ;assume not group 2 GP3$DO=-1 ;assume not group 3 GP4$DO=-1 ;assume not group 4 .IF EQ ONE$DO GP1$DO=0 ;test group 1 GP2$DO=0 ;test group 2 GP3$DO=0 ;test group 3 GP4$DO=0 ;test group 4 .ENDC ;EQ ONE$DO .IF EQ ONE$DO+1 GP1$DO=0 ;test group 1 .Enabl MCL .ENDC ;EQ ONE$DO+1 .IF EQ ONE$DO+2 GP2$DO=0 ;test group 2 .Enabl MCL .ENDC ;EQ ONE$DO+2 .IF EQ ONE$DO+3 GP3$DO=0 ;test group 3 .Enabl MCL .ENDC ;EQ ONE$DO+3 .IF EQ ONE$DO+4 GP4$DO=0 ;test group 4 .Enabl MCL .ENDC ;EQ ONE$DO+4 .IF EQ ONE$DO-30000 .NList .NList SEQ,SYM,TOC .ENDC; EQ ONE$DO-30000 .NList CND .MCall .Assume ;+ ;ERROR ;?SYSTEM-E-.BS overflow, 'NAME' assigned 0; ; .BS ; More bits defined than fit in a 16 bit word ; ;^b;?SYSTEM-E-.BSECT 'OFFSET' not a single bit quantity; ; .BSECT ; The value specified must be a single bit set in a 16 bit word ; ;?SYSTEM-E-.BSECT 'OFFSET' is zero; ; .BSECT ; The value specified must not be 0 ; ;?SYSTEM-E-Unexpected argument value, use =,==,=: or ==: ; ; .LIST., hence almost all macros ; The E argument is used as the equate operator ; ;;?SYSTEM-E-.LB 'SYM' is zero; ; .LB ; The value specified must not be 0 ;- .SbTtl General information about SYSTEM.MAC .REM ~ Information about allocation policy for flags bits and words is found herein. In addition, it also contains definitions of macros that are currently defined in SYSGEN.COM(!) EDTGBL.MAC and some other system components (in V5.5). A broad outline of this file is as follows: (01) Copyright (02) Conditional summary and cross checks (03) This outline (04) Change log (05) Reserved symbol names (06) Reserved macro names (07) (08) General use structure macros (.LIST. .BSECT .BS .LB .DSECT .DS .EQU) (09) Memory Spaghetti Chart (10) Fixed Area Spaghetti Chart (11) Impure Area Spaghetti Chart (12) Disk Data Spaghetti Chart (13) Image File Data Layout (14) Handler word and bit policy (15) EMT request summary (16) ...CMA and ...CMT support macros for ..%%%% macros (17) Generic information about all macros of the form ..%%%% (18) Macros defining the request blocks used by EMT requests. (19) Generic information about all macros of the form .%%%DF (20) Macros defining control blocks and data structures. ~ .SbTtl Documentation conventions .Rem ~ `xxxxxx` labels found in RMON%% and other modules related to the structure being described. c(xxxxxx) Contents of location o(xxxxxx) See xxxxxx for offsets or address v(xxxxxx) See xxxxxx for values ov(xxxxxx) See xxxxxx for values, offsets or addresses ~ .SbTtl CHANGE LOG ;+CHANGES ;00 JFW Summer, 1986 Jim Williams ; Original type-in (and in ...) ; ;01 JFW Minor changes lost in the dim dark past ; ;02 JFW Major changes, adding many new structures, ; forcing all symbols to contain . or $ ; ;03 JFW Add (this) change history ; Delete H.1LTR and H.UMR from .HANDF & change .HUMDF. ; Change associated diagrams. ; This is a change to the support for UMR and 64UNIT ; Add Handler block 1 to "Image file block 0 formats" ; Add Handler word and flag bit allocation policy statement ; Change .DATDF to use AGE rather than EPOch and name ages. ; Change .DRFMT for newest layout ; Add HS2.KU bit to H.STS2 which prevents KMON $Unload ; Change SF.CTL to be 365 ; Add registry of single letter handler names (.DSTDF) ; Add DEV.(CA,KK,KS,KX,MB,MP,QD,UB,VP,VT,XS,YK) ; ;04 JFW Add .BSRDF, add RONLY$ to .CSWDF, Add No date and do not ; set to .DATDF, Add new devices and retirement notes to ; .DEVDF, add new status bits to .DIEDF, add reference to ; .DNTDF, changes in .FIXDF and add $DECNT offset, changes ; to .HANDF, add .HSRDF, changes to .JSXDF, changes to ; .SFCDF, added new function codes to .SPFDF (mostly DAEMON) ; added .U64DF, changed .UEBDF, changed .XEDDF, added .XTEDF, ; changed .ZDUDF and added .ZMUDF. ; ;05 JFW Change ..READ and ..WRIT to docu "special directory hack" ; Change .DIEDF for omitted test case. ; Change .SPFDF to add more DAEMON codes and add a generic ; section as an aid in future assignments. ; Change .UEBDF to include NONE$ definition. ; Add .XCRDF and .YCRDF to document CREF interfaces. ; Add validation information to .DATDF ; Add .MLBDF, .MNTDF, .OLBDF, .EPTDF, and .FLBDF to document ; LIBR interfaces. ; Add .LDADF to document absolute loader format. ; Add .OBJDF to document object file format. ; Add (GP(1,2,3),ONE)$DO conditionals to check individual macros ; ;06 JFW changes from review and pre-review. ; added .X%%DF generic chain definitions ; added .Y%%DF generic structure definitions ; added .YSPDF SP / SPOOL common structure ; added .Z%%DF generic data table definitions ; revisions too numerous to mention from review ; ;11 JRG Add ..BICO/..BICV/..BISO/..BISV subcodes (.POKE/.PVAL/.EMTDF) ; Add .ER%DF SPFUN error code macros ; Add .ESBDF magtape SPFUN error status block format macro ; Add .N%%DF Ethernet SPFUN argument format macros ; Add ER.BAD/ER.DEA/ER.RAL codes to .ERRDF ; Add .SF%DF SPFUN argument format macros (.SFBDF used for ; SF.BYP instead of SF.BBR, since SF.BBR needed no args) ; Add XED.OU bit flag definition to .XEDDF ; Add EMTER4/EMTER5 macros (for MTTY EMT errors) ; Update .SP%DF (SPFUN code/subcode) macros ; Add fixed offsets $RQTOF/$FRK22/$SLOT2 to .FIXDF ; Remove .SPUDF (unimplemented - error codes defined in .ERRDF) ; Misc. minor spelling/formatting corrections ; ;23 JFW Change definitions in .USSDF to match reality ; ;25 JFW Add HF2.SR, change $FRK22 and $RQTOF to $XTTPS and $XTTPB, ; changed CF3.US to CF3.UI, added CF3.US and CF3.1S, ; added HF2.LD, added H1.LDT, revised .SPLDF, ; added .EL(D,I,M,S)DF [these still need test code and docu]. ; ;26 LB Added $PNAM2 table generation to DEV for extended units ; ;29 MSS Fix .EL(D,M,S,I)DF macros ; ;31 LB Added def of UB.NUM to DEV ; ;33 JFW ;>>>fill in ;39 JFW Added .FPBDF (File prefix block) ; ;40 LB Changed second occurrence of HF2.SD to HF2.ND in .HF2DF ;>>>fill in ;46 JFW Added PUT and GET ; ;47 JFW Added definitions to IMPDF to match those in EDTL ; Fixed IMPDF test code ; Fixed error in FH.xxx crosscheck ; Added definition to .RDBDF ; Fixed errors in .GTJDF ; ;(048) MBG Added DH definitions to allow DH builds, $GENDH and ; related definitions have yet to be added, after review ; by JFW ; ;(049) MBG Added definitions for $GENHM, $GENHN and $GENDH. ; Corrected some errors in internal documentation as ; well as a few definitions. ; ;50 JFW Delete definitions that should be in EDTL.MLB ; Minor misc changes per many action items and QARs ; Repair one definition at a time testing (ONE$DO=+num) ; ;52 JFW Remove minor change to ELDDF macro definition ; ;53 JFW Allow substitution for leading $ in .FIXDF to fix ; name clashes in BSTRAP ; ;55 DBB added .MCADF ; ;56 JFW Add symbols to .EMTDF from other ..%%%% that were ; omitted by error. Pulled .SIOT references. added ; .OWNDF ; ;57 WFG Fix values of symbols ..BICF,..BISF in various macros ; ;(058) MBG For multiterminal handler hooks support, added new ; error code for MTATC/MTDTC. ; ;58 JFW Add ER.ATH to comments in .ERRDF. Delete new ..M* and ; change old ..* to use the "function" word to code mapping ; info. Add SV.NID/RL.NID block 0 indicators that preclude ; loading in separated I/D space ; ;59 ??? ??? ; ;60 DBB Add ER.IMS to .ERRDF. Add I.PLSP to .IMPDF. Add WS.DSI ; and WS.IDD to .WDBDF ; ;61 DBB Add I.SSP to .IMPDF. Change .MCADF layout of M.APR ; ;62 JFW Add CF3.VB to .CF3DF, define .CVHDF, cleanup cmap ; ;63 JFW Add NOVBG$ to .JSXDF ; ;64 DBB Add I.VSTP to .IMPDF ; ;65 JFW Add $VBGTO to .SYCDF ; ;66 DBB Add CF3.IM to .CF3DF ; ;67 JFW Fixes from SML manual review: ; .ERRDF SERR error codes wrong ; .ERRDF other error codes wrong ; remove "fut"s that are now present ; ;68 JFW Move CMPDF, QELDF, RDBDF, and WDBDF to SYSMAC, but ; test them in SYSTEM and retain descriptive comments ; about them. ; Add new fixed offset $XOFF for address/offset of ; XOFF flag. ; ;69 MBG Added bit to TCB for handler hooks disabling of ; monitor controlled modem control ; ;70 JFW added H1.NDF to .HBGDF comments and "block 0" chart; ; fixed comment on WRWT$ in .TSTDF; added WS.DEF to .WDBDF; ; fixed comments in .MCADF (some RCBs are WCBs); ; fixed comments and added M.VHI to .RAMDF; ; fixed comment on P1$EXT in FIXDF. ; ;71 DBB fixed .JSWDF usage diagram ; added description for R.GID offset in .RDBDF comment block ; ;72 JFW added .SLBDF which defines the supervisor library ID structure ; also changes to comments in other areas to support .SLBDF ; ;73 DBB deleted ALL64$ from .ISTDF ; ;74 JFW changed some of the .SLBDF info in the referencing .SAV to ; be pointed to by $SLB (.SYCDF) rather than in fixed locations ; changed $TT2RM to be $XTTNR in fixed area ; added DEV.CI to DEVDF ; ;75 DBB added I.TRPS and I.FPPS to impure area for supy monitors ;- ;++ ; RESERVED SYMBOL NAMES ; --------------------- ; ; NOTE: these must be co-ordinated between SYSMAC and SYSTEM ; so that there are NO global symbol clashes. ; SYSTEM allocates globals from ...V99 and down, ; SYSMAC allocates globals from ...V1 and up. ; ; ...V2 LOCAL -- reusable in macro def'ns as local symbols ; ...V3 LOCAL -- reusable in macro def'ns as local symbols ; ...V4 LOCAL -- reusable in macro def'ns as local symbols ; ...V10 LOCAL -- reusable in macro def'ns as local symbols ; ...V11 LOCAL -- reusable in macro def'ns as local symbols ; ; ...V99 GLOBAL -- If defined, indicates that the .LIST. macro ; and its friends have been MCALLed. ; -1 -- indicates nlist ; +1 -- indicates list ; ; ...V98 GLOBAL -- communicates bit value between .BSECT & .BS ; ...V97 GLOBAL -- communicates location value between .DSECT & .DS ; ; DOC$UN GLOBAL -- conditional symbol ; FIX$ED GLOBAL -- conditional symbol ; MAC$ER GLOBAL -- conditional symbol ;-- ;++ ; RESERVED MACRO NAMES ; -------------------- ; ; ...CM. -- copyright notice ; ...CMA -- EMT375 series request block dsect gen ; ...CME -- used to pass the equate type among .BSECT, ; .DSECT, .LIST., .BS, .DS, .LB, and .EQU ; ...CMT -- .MT* series request block dsect gen ;-- .Page ;++ ; Error Messages ; ;-- .NLIST LOC,CND .IF EQ GP1$DO .SbTtl .LIST. -- Listing control for .DS, .BS, .EQU, .LB ;+ ; .LIST. ; ; This macro generates the definition of ...CME. ; The ...CME macro is used to generate an equate. ; The type of equate is passed in to the .LIST. macro. ; The .LIST. macro also generates defaults for FIX$ED ; and DOC$UN. ; ; .LIST. list, e ; ; list (NO) do not list equate ; YES list equate ; ; e (=:) normal equate ; = changable equate ; == changable global equate ; ==: normal global equate ; ;- .SbTtl ...CME -- defined by .LIST. meta-macro .SbTtl . generate a equate ;+ ; ...CME ; ; Generate an equate and optionally force it to be listed. ; ; ...CME SYM VAL ; ; SYM symbol to be defined ; ; VAL value to set symbol to ;- .MACRO .LIST. LIST=NO,EE=<=:> .IIF NDF ...V99 .MCALL .DSECT, .DS, .BSECT, .BS, .EQU, .LB ...V2=0 .IRP x,<=,==,=:,==:> .IIF IDN , ...V2=1 .ENDR .IIF EQ ...V2 .ERROR;?SYSTEM-E-Unexpected argument value, use =,==,=: or ==: ; .IIF NDF FIX$ED FIX$ED=1 .IIF NDF DOC$UN DOC$UN=0 .IF IDN ...V99=1 .MACRO ...CME SYM,VAL .LIST SYM EE VAL .NLIST .ENDM .MEXIT .ENDC ...V99=-1 .MACRO ...CME SYM,VAL SYM EE VAL .ENDM .ENDM .LIST. .SbTtl .BSECT -- initialize definition of bits ;+ ; .BSECT OFFSET,LIST,E ; ; This macro defines the first bit to be generated by the ; following .BS macros. It can also control the listing ; of the assignment statements in the the following macros. ; ; OFFSET (1) bit value to begin with. ; must be a single bit pattern ; ; LIST listing control. ; If not specified, leaves listing setting ; unchanged. ; If specified as YES, turns listing on ; If specified as NO, turns listing off ; ; E (=:) Type of assignment ; = changable local ; =: fixed local ; == changable global ; ==: fixed global ;- .MACRO .BSECT OFFSET=1,LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E .IIF EQ .ERROR ^b;?SYSTEM-E-.BSECT 'OFFSET' is zero; .IIF NE &^c- .ERROR ^b;?SYSTEM-E-.BSECT 'OFFSET' not a single bit quantity; ...V98 = OFFSET .ENDM .BSECT .SbTtl .BS -- define 1 or more bits ;+ ; .BS NAME,BITS ; ; This macro allocates 1 or more bits and optionally defines a ; symbol which contains the mask value for the defined bit(s). ; The definition may be any of the four equates supported by ; MACRO. ; ; NAME Optional name to assign the mask value to ; ; BITS (1) Number of bits in the mask ;- .MACRO .BS NAME,BITS=1 ...V2=...V98 .REPT BITS-1 ...V98 = ...V98*2. ...V2=...V2+...V98 .ENDR ...V98 = ...V98*2. .IIF EQ ...V2 .ERROR;?SYSTEM-E-.BS overflow, 'NAME' assigned 0; .IF NB NAME .IRP N,\...V2 ...CME NAME <^o'N> .ENDR .ENDC .ENDM .BS .SbTtl .LB -- Find low bit in bit pattern ;+ ; .LB SYM,POSITION,SHIFT ; ; .LB will scan a symbols (SYM) value for the lowest order bit and ; set POSITION to a bit pattern corresponding to that low bit. It ; will also set SHIFT to the number of shifts needed to move the SYM ; value right so that the low order bit of SYM's value will be in ; bit position 0. ; ; SYM Input bit pattern to be scanned ; ; POSITION A mask value with one bit set in it. The bit that ; is set is the lowest bit set in SYM. ; ; SHIFT A value which is the number of right shifts required ; to shift the lowest set bit in SYM to the 0 bit ; position (or left shifts, from the bit 0 position to ; the lowest bit position in SYM). ; ; ;MASK =: 000300 ; .LB MASK,LMASK,SMASK ; sets: ;LMASK =: 000100 ;SMASK =: 6 ; ; See also .DATDF for for more uses ; ; .LB uses ...V2 and ...V3 as internal symbols ;- .MACRO .LB SYM,POSITION,SHIFT ...V2 = 1 ...V3 = 0 .IF NE .REPT 16. .IF NE &...V2 .IF NB .IRP N,\...V2 ...CME POSITION <^o'N> .ENDR .ENDC .IF NB .IRP N,\...V3 ...CME SHIFT <^o'N> .ENDR .ENDC .MEXIT .ENDC ...V2 = ...V2+...V2 ...V3 = ...V3+1 .ENDR .IFF .ERROR ;?SYSTEM-E-.LB 'SYM' is zero; .ENDC .ENDM .Page .LIST. YES .LB <^o177777>,L1,S0 .Assume L1 EQ 1 .Assume S0 EQ 0 .LB <^o177776>,L2,S1 .Assume L2 EQ <^o2> .Assume S1 EQ 1 .LB <^o177774>,L4,S2 .Assume L4 EQ <^o4> .Assume S2 EQ <^o2> .LB <^o177770>,L10,S3 .Assume L10 EQ <^o10> .Assume S3 EQ <^o3> .LB <^o177760>,L20,S4 .Assume L20 EQ <^o20> .Assume S4 EQ <^o4> .LB <^o177740>,L40,S5 .Assume L40 EQ <^o40> .Assume S5 EQ <^o5> .LB <^o177700>,L100,S6 .Assume L100 EQ <^o100> .Assume S6 EQ <^o6> .LB <^o100000>,L10000,S15 .Assume L10000 EQ <^o100000> .Assume S15 EQ 15. .IF NE MAC$ER .LB 0,LX,SX .ENDC;NE MAC$ER .SbTtl .DSECT -- initialize definition of storage area ;+ ; .DSECT N,LIST,E ; ; Start a storage layout definition block at 'n' (default is 0) ; Define symbols as global if GLOBAL=YES ; List assignment values if LIST=YES ; ; N (0) is the optional base value of the dsect. ; ; LIST controls listing of the equates ; YES means list ; NO means no list ; omitted means use previous setting ; ; E (=:) type of equate ; = variable local ; =: fixed local ; == variable global ; ==: fixed global ;- .MACRO .DSECT N=0,LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E ...V97 = N .ENDM .DSECT ...V97=^o52525 ;junk in "location counter" .DSECT .Assume ...V99 EQ -1 ;listing control should be set to nlist .Assume ...V97 EQ 0 ;"Location counter" should be 0 .SbTtl .DS -- define 1 or more storage locations ;+ ; .DS NAME,SIZE,UNIT ; ; Define storage in a storage layout ; 'NAME' is a symbol that is equated to the current offset in the layout ; if blank, no symbol is defined but space is reserved ; 'SIZE' is the size of the entity in units of bytes or words (default 1) ; 'UNIT' is non-blank to define bytes, blank to define words. typical uses: ; ; .DS FOO Reserve 1 word for FOO ; .DS FOO,3 Reserve 3 words for FOO ; .DS FOO,1 BYTE Reserve 1 byte for FOO ; .DS FOO,0 Define FOO here, but reserve nothing ; .DS ,3 Reserve 3 words ;- .MACRO .DS NAME,SIZE=1,UNIT .IF NB NAME .IRP N,\...V97 ...CME NAME N .ENDR .ENDC .IF NB UNIT ...V97 = ...V97+SIZE .IFF ...V97 = 2.*+...V97 .ENDC .ENDM .DS .SbTtl .EQU -- generic (=!=:!==!==:) equate ;+ ; .EQU NAME,VALUE ; ; This macro generates an equate statement. The ; type of equate is determined by the previous setting of "E" ; in a .DSECT, .BSECT, or .LIST. macro ; ; NAME name of symbol to be assigned ; VALUE Value to assign. ;- .MACRO .EQU NAME,VALUE ...CME NAME .ENDM .EQU .NLIST SEQ,LOC,BIN .ENDC ;EQ GP1$DO .SbTtl . MEMORY RESIDENT DATA STRUCTURES DIAGRAM .REM % S Y S C O M A R E A ===================== 000040: o(.SYCDF) ... $JSW v(.JSWDF) ... $ERRBY v(.ERRDF) $USRRB v(.UEBDF) $SYPTR ----------------+ ===================== | v v | +---------------------------------------+ | F I X E D A R E A | ===================== +------->$RMON: o(.FIXDF) JMP `$INTEN` Interrupt declaration $CSW o(.CHNDF)<----------+ BG channel control blocks $SYSCH o(.CHNDF)<----------)---+ System channel cont. blks. $BLKEY | | Dir segment # in `USRBUF` $CHKEY | | Dev index & unit for above $DATE v(.DATDF) | | Current date $DLFG | | non-zero, delay abort $USRLC | | normal addr of USR $QCOMP c(`COMPLT`) | | I/O completion routine $SPUSR v(.ERRDF) | | Special USR request err word $SYUNI | | SY unit # in high byte $SYSVE byte | | major system version # $SYSUP byte | | minor system update # $CNFG1 v(.CF1DF) | | first config word $SCROL | | link word for GT ON $TTKS v(.DLxHD) | | Console recv CSR $TTKB v(.DLxHD) | | Console recv DAT $TTPS v(.DLxHD) | | Console xmit CSR $TTPB v(.DLxHD) | | Console xmit DAT $MAXBL | | Largest open w/-1 blksize $E16LS [offset]-----------)---)--------------------------------------->LST16: o(.E16DF) $CNTXT ----------------+ | | Ptr to current job impure $JOBNU | | | Current job number `$TIME` 2 words (SJ) | | | overlays prev 2 words $SYNCH c(`$SYNCH`) | | | .SYNCH routine $LOWMA ov(.LOWDF) 10 W | | | System vector prot bitmap $USRLO | | | USR current entry point $GTVEC | | | Ptr stop display vector $ERRCN | | | Used by BA $MTPS c(`PUTPSW`) | | | CPU independent MTPS $MFPS c(`GETPSW`) | | | CPU independent MFPS $SYIND c(000002) | | | index value for SY device $STATW v(.STWDF) | | | DCL and IND status $CNFG2 v(.CF2DF) | | | second config word $SYSGE v(.SGNDF) | | | sysgen word $USRAR c(`USRSIZ`) | | | USR size $ERRLE v(.UEBDF) byte | | | error level to abort @ files $IFMXN byte | | | max file nest level $EMTRT c(`EMTRTI`-$RMON)| | | EMT exit routine $FORK c(`$FORK`-$RMON) | | | Fork routine $PNPTR c(`$PNAME`-$RMON)| | | Handler name table offset $MONAM c(monitor name)2W| | | RAD50 monitor name $HSUFF c(handler suffix)| | | RAD50 handler suffix $SPSTA v(.SPLDF) | | | SPOOL status word $EXTIN v(.UEBDF) byte | | | Saved user error byte $INDST v(.INDDF) byte | | | IND status byte $MEMSZ | | | Total memory size / 64 $ELTIM c(`GTIHOK`-$RMON)| | | ptr to get time routine v v v v v v $TCFIG }-(non-mtty)----)---)---)------------------------------------->`TTCNFG`: ov(.TTCDF) }-----(mtty)----)---)---)-------+ ===================== $INDDV o(.CLDDF) | | | | ASCII IND device and CLI info pointer | | | | ===================== | | | | `$RAMSZ`: $MEMPT ---------------)---)---)-------)----------------------------->`CORPTR`: o(.MEMDF)<---+ | | | | `CORPTR`------+ | | | | (xm) `$XMSIZ`-`$RMON` | | | | (xm) [offset]----------------+ | | | | (xm) R.GNUM (byte) | | | | | (xm) 3*SUP$Y+1*W.NNUM (byte) | | | | | (xm) [offset to M.RGN] | | | | | (xm) [offset to M.WCB] | | | | | (xm) [offset to M.APR] | | | | | (xm) [offset to I.VHI] | | | | | ===================== | P1$EXT ----------------)---)---)-------)---+-(XM)--------------------->`$P1EXT`: o(.P1XDF) | | | | | +-(NONXM)------------------>0 | $TRPLS------------------)---)---)-------)---+-(XM)--------------------->`TRPLST`: o(.???DF) | | | | | +-(NONXM)------------------>0 | $GETVE ----------------)---)---)-------)---+-(PRO)---------------------->??????: o(.PRODF) | $DWTYP v(.DWTDF) | | | | +-(NOPRO)------------------>`ERRRTN`: o(.RTSDF) | $TRPSE c(I.TRAP) | | | | Offset value in IMPURE | $NULJB ----------------)---)---)-------)------------------------------>`..NULJ`: o(.NULDF) | $IMPLO ----------------)---)---)-------)--------------------->`$IMPUR+MXJBNM+2`: o(.IMPDF) | $KMONI | | | | 0=KMON out, <>KMON in | $DEDIT v(.PGMDF) byte | | | | Current default editor | $DFORT v(.PGMDF) byte | | | | Current default FORTRAN | $WILDD byte | | | | 0=Explicit, 1=Implicit | $JOBS byte | | | | Number of job slots (1-8) | $QHOOK ----------------)---)---)-------)------------------------------>`Q2CAHK`: o(.QHKDF) | | | | | `C2CAHK`:------+ | | | | | =================== | | $H2UB ----------------)---)---)-------)---+-(UB active)--------------->??????: o(.UBVDF) | | | | | | +-(UB inactive)------------>`ERRRTN`: o(.RTSDF) | | $XOFF ----------------)---)---)-------)---+-(not MTTY)--------------->`XEDOFF`: XonOff byte | | | | | | +-(MTTY)------------------->`T.STAT`offset " " | | $RTSPC ----------------)---)---)-------)------------------------------>`ERRRTN`: o(.RTSDF) | | $CNFG3 v(.CF3DF) | | | | | | $XTTNR | | | | Called if no room for next input char | | $THKPT ----------------)---)---)-------)------------------------------>`THOOKS`: o(.THKDF) | | $DECNT v(.DNTDF) | | | | | | $XTTPS | | | | Called before read of @TTPS and after change of @TTPS | | $XTTPB | | | | Called after change of @TTPB +-----------------------+ | $SLOT2 | | | | Max handler table index | | $SPSIZ | | | | | =========================== | ===================== | | | | | =========================== | | | | | +------->`C2CAHK`: o(.CHKDF) | | | | +---)---------------------------------------------------------------+ $IMPUR:-------------------------+ | | | | BCNTXT: ------------------------+ | | | | ... | | | | | FCNTXT: ------------------------+ | | | | TTOUSR: ------------------------+ | | | | TTIUSR: ------------------------+ | | | | | | | | | FRKQUE:---------------------+---)---)---)---)---)------------------------------>element o(.QFKDF) FRKLQE:---------------------+ | | | | | F.BLNK ->[next element] | | | | | ... v ^ ^ v v v ^ ^ v v | | | | | +---------------------------------------+---)---)---)---)-------+ | I M P U R E A R E A | | | | | | ===================== | | | | | +------> I.BASE o(.IMPDF) | | | | | 'BKGND':I.STAT v(.ISTDF) | | | | | job state word ===================== `BKGND1`:I.QHDR --------------------)---)---)---)---+---)----------------------->element o(.QELDF) | | | | | | Q.LINK ->[next element] | | | | | | Q.CSW ->[CCB] | | | | | | ... | | | | | | ===================== | | | | | | ===================== I.CMPE ---------------------)---)---)---)---+---)----------------------->element o(.QCMDF) | | | | | | QC.LNK ->[next element] | | | | | | ... | | | | | | QC.OFS [offset]->[CCB] | | | | | | ... | | | | | | ===================== | | | | | | ===================== I.CMPL ---------------------)---)---)---)---)---)----------------------->element o(.QSYDF) | | | | | | QS.LNK ->[next element] | | | | | | ... | | | | | | ===================== I.CHWT ----------------+---)---)---)---)---)---)----------------------->CCB o(.CHNDF) I.PCHW ----------------+ | | | | | | channel and prev chan waited on I.PERR v(.ERBDF) | | | | | | previous error byte I.TTLC (nonMTTY) | | | | | | input line count I.PTTI (nonMTTY) | | | | | | previous input char `BKCNSL`:I.CNSL ---(MTTY)-----------)---)---)---+ | | Addr console term TCB c(0) (MTTY) | | | | | | reserved I.TID ----------------+ | | | | | | addr of prompt string I.JNUM c(Job*2) | | | | | | | job number (constant) I.CNUM | | | | | | | number of channels for this job `BKGND3`:I.CSW ----------------)---+ | | | | | addr of channel status blocks I.IOCT | | | | | | count of outstanding I/Os I.SCTR | | | | | | suspend /resume count I.BLOK v(.IBKDF) | | | | | | blocking bits for job `BKGID`:I.JID<------------------+ | | | | | job prompt (8 bytes for non sysjob, 12. for sysjob) I.LNAM 6 bytes | | | | | job logical name (sysjob only) `BNAME`:I.NAME o(.DBKDF) | | | | | file the job was run from I.SPLS ------------------------)---)---)---)---)----------------------->list o(.DVLDF) I.TRAP | | | | | addr of 4/10 trap routine I.FPP (FPU only) | | | | | addr of FPU trap routine I.SPSV (XM only) | | | | | kernal SP save area I.SWAP 2 words-----------------)---)---)---)---)----------------------->list o(.SWPDF) I.SP | | | | | SP save area I.BITM ? bytes | | | | | job low memory bit map I.CLUN (MTTY only) | | | | | unit number of console I.TTLC (MTTY only) | | | | | input line count `TTIBUF`:I.IRNG------------------+ | | | | | input ring low limit I.IPUT------------------+ | | | | | input ring interrupt pointer I.ICTR | | | | | | input ring char count I.IGET------------------+ | | | | | input ring EMT pointer I.ITOP------------------+ | | | | | input ring high limit `IBUFR`:[buffer]<---------------+ | | | | | input ring buffer ^ v v v ^ ^ v v v ^ `TTOBUF`:I.OPUT------------------+ | | | | | output ring EMT pointer I.OCTR | | | | | | output ring char count I.OGET------------------+ | | | | | output ring interrupt pointer I.OTOP------------------+ | | | | | output ring high limit `OBUFR`:[buffer]<---------------+ | | | | | output ring buffer `BAVAIL`:I.QUE o(.QELDF)<--------------)---)---)---+ | initial queue element I.MSG o(.CHNDF) | | | | c(ACTIV$!<`MSGENT`-`$ENTRY`) Message channel ccb " | | | | Message channel ccb " | | | | " " " I.SERR | | | | .SERR / .HERR flag word (in msg CCB) " BYTE | | | | Message channel ccb " BYTE | | | | c(`MXJBNM`) FG job number I.TERM v(.TSTDF) | | | | first terminal status word I.TRM2 v(.TS2DF) | | | | second terminal status word I.SCCA ------------------------)---)---)-------)----------------------->flag o(.TASDF) I.SCC1 (XM only) | | | | PAR1 bias for above I.SCCV (XM only) | | | | original virt address for above I.DEVL ------------------------)---)---)-------)----------------------->list o(.DVLDF) `BGFPPT`:I.FPSA--(FPU and XM only)---+ | | | | addr FPU save ?????? ->[next list] I.SCOM (XM only) 15. words | | | | | SYSCOM and vec save ===================== (XM & MTTY only) +1 | | | | | more if MTTY I.RSAV 8 words (XM only) | | | | | register save area `BGMPTR`:I.MPTR (XM only)<-----------)---)---+ --)-------)----------------------->block o(.MCADF) I.MPB 7 WORDS (XM only) | | | | parameter block for PLAS requests I.PLSP (XM only) | | | | PLAS request I-D space pass flag I.CMAP (ZM only) | | | | Mode/Space mapping context I.SSP (ZM only) | | | | Supervisor mode SP save area `BJFPSV`:I.FSAV<-(FPU and XM only)---+ | | | FPU save area W.BRCB ->RCB `BGVHI`:I.VHI (XM only) | | | Virtual high limit value I.VSTP (XM only) | | | VBGEXE hi limit value for .SETTOP I.ECTR (SPCPS only) | | | EMT depth counter I.SPCP (SPCPS only)------------)-------)-------)----------------------->block o(.SPCDF) I.SPC1 (SPCPS and XM only) | | | PAR1 offset for above `PBSYCH`:I.SCHP ------------------------+ | | addr of system channel I.SYCH o(.CHNDF)<-(non BG job)-+ | | CCB for system channel ===================== | | V ^ ;>>>to here V ^ +-------------------------------------------------------+ | | T E R M I N A L C B | | ===================== | +------->DLTCB: o(.TCBDF) | T.CNFG v(.TCFDF) | T.CNF2 v(.TC2DF) | ... | T.OWNR------------------------------------------+ T.STAT v(.TSTDF) ... T.IRNG------------------+ T.IPUT------------------+ ... | T.IGET------------------+ T.ITOP------------------+ [buffer]<---------------+ T.OPUT------------------+ ... | T.OGET------------------+ T.OTOP------------------+ [buffer]<---------------+ ... T.TBLK o(.QTIDF) ... T.AST ---------------------------------------------------------------->flag v(.TASDF) ... % .NLIST SEQ,LOC,BIN .SbTtl . Memory Data Structure .REM % [000000].VECHD (in HARDWA) [000040].SYCDF ($SYPTR)----------------+ [000060].VECHD (cont.) | (in HARDWA) [000500].CHADF | [000510].CCLDF | | +---------------------------------------+ | +------>.FIXDF [IOPAGE].CPUHD (in HARDWA) [IOPAGE].MMUHD (in HARDWA) % .NLIST SEQ,LOC,BIN .SbTtl . DISK DATA STRUCTURE .REM % .DSKDF disk layout by blocks [0] DK.BOT: o(.BOTDF) boot block ov(.BBSDF) boot block "standard" info [1] DK.HOM: o(.HOMDF) home block HB.BAD: o(.BBRDF) bad block replacement HB.INI: o(.HINDF)*2 Initialize/Restore info HB.BUP: o(.BUPDF) BUP volume info HB.USE: o(.HUSDF) user area HB.DIR:-+ -> directory | +--------------------------+ | HB.VER: v(.HSVDF) file system version [2] | DK.BT2: secondary boot blocks [6] +->DK.DIR: directory blocks ov(.DIHDF) directory header layout ov(.DIEDF) directory entry layout % .NLIST SEQ,LOC,BIN .SbTtl Image file block 0 (& handler block 1) formats .REM ~ .HANDF (H.xxxx) .SAVDF (xx=SV) .RELDF (xx=RL) .SYCDF ($xxxxx) .MONDF (M.xxxx,$GEN%%) .SLBDF (SL.xxx) *.SAV *.REL xxs.SYS *.SLB RTxxxx.SYS +-------+-------+ +-------+-------+ +-------+-------+ $VIRT: | 0 or RAD50 VIR|[000] M.MON: | RAD50 "MON" | H.HAN: | RAD50 "HAN" | +-------+-------+ +-------+-------+ +-------+-------+ $VIRTO: |Virt settop val|[002] H.FETC: | -> FETCH Rout | +-------+-------+ +-------+-------+ +-------+-------+ $JSX: | |[004]v(.JSXDF) $JSX: | | v(.JSXDF) H.RELE: |-> RELEASE Rout| +-------+-------+ +-------+-------+ +-------+-------+ $VBGTO: | value |[006] $VBGTO: | value | [006] H.LOAD: | -> LOAD Rout |[006] +-------+-------+ +-------+-------+ +-------+-------+ $SLB: |-> .SLB ID |[010] | | H.UNLO: | -> UNLOAD Rout| SL.VEC: |CSM vec in .SLB| | | | | +-------+-------+ +-------+-------+ +-------+-------+ SL.DAT: | date in .SLB |[012] | | H.FORM: | -> FORMAT Data| o(.FMTDF) +-------+-------+ +-------+-------+ +-------+-------+ SL.TIM: | time in .SLB |[014] | | | | xx.BPT: | -> BPT AST | xx.BPT: | -> BPT AST | H.BOOT: | -> BOOT Rout | o(.BSRDF) +-------+-------+ +-------+-------+ +-------+-------+ SL.TIM+2| .SLB (cont) |[016] | | | | | BPT PS | | BPT PS | | | +-------+-------+ +-------+-------+ +-------+-------+ xx.IOT: | -> IOT AST |[020] xx.IOT: | -> IOT AST | H.CLAS: | Class |[020] v(.DVCDF) | | | | +-------+-------+ SL.NAM: | name in .SLB | | | H.MOD: | Flags | [021] v(.DVMDF) +-------+-------+ +-------+-------+ +-------+-------+ SL.NAM+2| .SLB (cont) |[022] | | | | | IOT PS | | IOT PS | H.SPF1: | Nxx | xNN | v(.DSPDF) +-------+-------+ +-------+-------+ +-------+-------+ SL.BLK: |SLB block # |[024] | | H.SPF2: | Nxx | xNN | v(.DSPDF) SL.FLG: |SLB option flag| o(.SLBDF) | | | | | +-------+-------+ +-------+-------+ +-------+-------+ | |[026] | | H.SPF3: | Nxx | xNN | v(.DSPDF) +-------+-------+ +-------+-------+ +-------+-------+ xx.NID: |<>0 no sep I/D |[030] xx.NID: |<>0 no sep I/D | H.SPFX: | -> more SPFUNs| +-------+-------+ +-------+-------+ +-------+-------+ SV.CVH: |overlay config |[032] RL.CVH: |overlay config | H.REPL | -> Repl Data | o(.RGTDF) +-------+-------+ +-------+-------+ +-------+-------+ xx.TRP: | -> TRAP AST |[034] xx.TRP: | -> TRAP AST | | | +-------+-------+ +-------+-------+ +-------+-------+ | TRAP PS |[036] | TRAP PS | H.STS2: |2nd Status Word| v(.HS2DF) $SYCOM: +-------+-------+ +-------+-------+ +-------+-------+ $USRPC: | starting PC |[040] $USRPC: | starting PC | SV.BLK: |blk#*2+1 Ispace| | | +-------+-------+ +-------+-------+ $USRSP: | starting SP |[042] $USRSP: | starting SP | +-------+-------+ +-------+-------+ $JSW: |job status word|[044] v(.JSWDF)$JSW: |job status word| v(.JSWDF) +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ $UFLOA: |USR float addr |[046] $UFLOA: |USR float addr | +-------+-------+ +-------+-------+ $USRTO: |User high addr |[050] $USRTO: |User high addr | +-------+-------+ +-------+-------+ +-------+-------+ | | RL.RSZ: | Root Size |[052] H.SIZ: | Handler Size | +-------+-------+ +-------+-------+ +-------+-------+ | | RL.SSZ: | Stack Size |[054] H.DSIZ: |Dev Size Blocks| +-------+-------+ +-------+-------+ +-------+-------+ SV.KWD: | value from /K |[056] RL.OSZ: | Overlay Size | H.DSTS: | Device Status | v(.DSTDF) +-------+-------+ +-------+-------+ +-------+-------+ v(.DEVDF) SV.SID |SV.IDS if IDjob|[060] RL.RID: | RAD50 REL | H.GEN: |Sysgen |[060] v(.SGNDF) | (RAD50 IDS) | | | +-------+-------+ | | | | | | [061] +-------+-------+ +-------+-------+ +-------+-------+ | |[062] RL.RDB: |first REL block| H.BPTR: | -> Pri BootStr| v(.BOTDF) +-------+-------+ +-------+-------+ +-------+-------+ xx.OVR: | -> overlay tab|[064] o(.OTBDF)xx.OVR: | -> overlay tab| o(.OTBDF) H.BLEN: | BootStrap Size| +-------+-------+ +-------+-------+ +-------+-------+ SV.SEG: | -> virt seg tb|[066] o(.VRTDF) H.READ: | -> Boot Read | +-------+-------+ +-------+-------+ H.TYPE: | RAD50 "???" |[070] +-------+-------+ H.DATA: |-> Data or List|[072] o(.DUSDF) +-------+-------+ H.DLEN: | Data size |[074] +-------+-------+ H.UNIT: | -> 64 Owner |[076] o(.U64DF) +-------+-------+ H.64UM: |letter & flags |[100] v(.HUMDF) +-------+-------+ | |[102] +-------+-------+ | |[104] +-------+-------+ H.USER: | -> User Table |[106] o(.DUSDF) +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ : :[110] o(.MODDF) : : o(.MODDF) : : o(.MODDF) | see .MODDF | | see .MODDF | | see .MODDF | : : : : : : +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ | 0 |list terminator +-------+-------+ : : +-------+-------+ H.DCSR: | Display CSR |[174] +-------+-------+ +-------+-------+ H.ICSR: | 0 |[176] H.ICSR: | Install CSR | +-------+-------+ +-------+-------+ H.IDK: | NOP |[200] H.IDK: |Code Data Inst.| +-------+-------+ +-------+-------+ H.ISY: | SEC |[202] H.ISY: |Code SY Install| +-------+-------+ +-------+-------+ +-------+-------+ | RETURN |[204] +-------+-------+ $GENUS: | USR gen opts |[300] +-------+-------+ $GENIN: |Ins set & other|[302] +-------+-------+ $GENCD: | Cmnd gen opts |[304] +-------+-------+ $GENMS: |Misc. gen opts |[306] +-------+-------+ $GENXM: | XM gen opts |[310] +-------+-------+ $GENTT: | Term gen opts |[312] +-------+-------+ $GENLM: |Rmt DL |[314] +-------+-------+ $GENLN: |Tot DL | [315] +-------+-------+ $GENZM: |Rmt DZ |[316] +-------+-------+ $GENZN: |Tot DZ | [317] +-------+-------+ $GENDZ: | DZ11 hdw opts |[320] +-------+-------+ $GENTM: | DL Xmt CSR |[322] +-------+-------+ $GENTI: | TTYIN buf size|[324] +-------+-------+ $GENTO: |TTYOUT buf size|[326] +-------+-------+ $GENKB: | V.TKB vector |[330] +-------+-------+ $GENPS: | V.TPS vector |[332] +-------+-------+ $GENVC: | VT.CSR value |[334] +-------+-------+ $GENVV: | VT.VEC vector |[336] +-------+-------+ $GENLR: |$LRLPZ |[340] +-------+-------+ $GENRR: |$RMLSZ | [341] +-------+-------+ $GENPT: |Patch area size|[342] +-------+-------+ $GENSP: |Sys Stack Size |[344] +-------+-------+ $GENSS: |STARTx |[346] +-------+-------+ $GENRC: |# GRCBs| [347] +-------+-------+ $GEND1: | DCL cmnds |[350] +-------+-------+ $GEND2: | DCL cmnds |[352] +-------+-------+ +-------+-------+ $GEND3: | DCL cmnds |[354] +-------+-------+ $GEND4: | DCL cmnds |[356] +-------+-------+ $GENHM: |Rmt DH |[360] +-------+-------+ $GENHN: |Tot DH | [361] +-------+-------+ $GENDH: | DH11 hdw opts |[362] +-------+-------+ +-------+-------+ +-------+-------+ xx.BIT NOT used in handlers xx.BIT: | |[360] xx.BIT: | | + File useage + + File useage + | bit map | | bit map | : : : : | 8 words | | 8 words | +-------+-------+ +-------+-------+ +-------+-------+--//---+-------+-------+ H.SET: | |[400] ov(.DSEDF) +-------+-------+--//---+-------+-------+ : : +-------+-------+--//---+-------+-------+ | | ov(.DSEDF) +-------+-------+--//---+-------+-------+ +-------+-------+ H.SET: | -1 |[400] dummy new SET form +-------+-------+ M.RMON: | `$RMON` |[402] file address of fixed area +-------+-------+ H.???: | 0 |[404] no SETs (for now) +-------+-------+ H.???: | 1000 |[406] magic number +-------+-------+ .HBGDF (H1.xxx) +-------+-------+ H1.VEC: |Vector -> table| [1000] ov(.DVTDF) +-------+-------+ H1.ABT: |offset to DRAST| [1002] +-------+-------+ H1.HLD: | 34x in file | [1004] +-------+-------+ H1.LQE: |-> Last Qel | [1006] +-------+-------+ H1.CQE: |-> First Qel | [1010] ov(.QELDF) H1.FLG: +-------+-------+ v(.HBFDF) H1.NOP: | NOP!Flags | [1012] v(.HNPDF) +-------+-------+ H1.BR: | BR xxx | [1014] +-------+-------+if 20 in H1.NOP H1.FG2: |2nd flag word | [1016]v(.HF2DF) +-------+-------+ if 20 in H1.NOP H1.SCK: |-> Addr Check | [1020] +-------+-------+ if 1!2!4!10 in H1.FG2 H1.SDF: |->SPFUN DMA tab| [1022] v(.DSPDF) +-------+-------+ if 2!4!10 in H1.FG2 H1.LDT: |->LD table | [1024] ov(.ZLDDF) +-------+-------+ if 4!10 in H1.FG2 H1.NDF: |->NonSTD SPF | [1026] ov(.DSPDF) +-------+-------+ if 10 in H1.FG2 +-------+-------+ B$RTEV: |RTEM version # |[4714] RTEM-11 only +-------+-------+ B$DEVN: |RAD50 dev name |[4716] Booted device name +-------+-------+ B$DEVS: |RAD50 dev name |[4720] Booted device name w/o suffix +-------+-------+ B$DEVN: |^RBOT or ^RRTE |[4722] "Bootable" indicator in file | booted unit # | unit number in memory +-------+-------+-------+-------+ B$FNAM: | RAD50 monitor name |[4724] Booted monitor name +-------+-------+-------+-------+ B$READ: | -> Boot READ |[4730] Address of boot read routine +-------+-------+ +-------+-------+ B$SUFF: |Handler suffix |[4774] suffix value from monitor +-------+-------+ B$SYOP: | |[4776] monitor sysgen options v(.SYGDF) +-------+-------+ | | [4777] +-------+-------+-------+-------+ B$TIME: | previous time |[5000] previous time o(.TIMDF) +-------+-------+-------+-------+ B$DATE: | prev date |[5004] previous date v(.DATDF) +-------+-------+ B$HIME: | high memory |[5006] RTEM-11 only +-------+-------+ B$SVTK: |-> RTEM routine|[5010] RTEM-11 only +-------+-------+ B$LK50: | 50/60 HZ flag |[5012] RTEM-11 only +-------+-------+ B$LKGR: | clock exists? |[5014] RTEM-11 only +-------+-------+ B$FPU: | FPU exists |[5016] RTEM-11 only +-------+-------+ ~ .NLIST SEQ,LOC,BIN .SbTtl Handler Word and bit allocation policy .REM ~ Handler files have space constraints both in block 0 and in the memory resident portion (block 1 +). The following is an explanation of the word allocation strategy, followed by the same for bit flags. Block 0 and 1 Word strategy: 1) Word at 000 is used to indicate a "new format" block 0. 2) Words in the 002 -- 016 are used as pointers to executable code that is not contained in the memory resident part of the handler. SYSTEM (edit 06) has 016 available for allocation. 3) Words (and bytes) 020 -- 036 are used to contain flags and to point to data areas not contained in the memory resident part of the handler. SYSTEM (edit 03) has 034 available for allocation. 4) Words 040 -- 050 are used as SYSCOM area for a handler that is also runnable as a job. 5) Words 052 -- 056 contain .DSTATUS information. 6) Byte 060 contains the SYSGEN bits. 061 should be used for "don't care" bits related to the SYSGEN. 7) Words 062 -- 066 are used to describe the boot code (if present). 8) Words 070 -- 074 are used to point to the "DEC" data table or indirectly to a list of multiple tables. 9) Word 076 and part of 100 are used for 64 unit support. 10) The rest of Word 100 is used for UMR support. 11) Words 102 and 104 are reserved for future expansion. If all the other words below 104 are allocated, 104 should not be used for additional "block 0" information, rather it should point to an area outside block 0 that will contain overflow "block 0" information. 12) Word 106 points to a list of "user" data table(s). 13) Word 110 and following (ascending) words contain .MODULE and .AUDIT information. This list is terminated by a word containing -1. 14) Word 174 and preceeding (descending) words contain Display CSRs. This list is terminated by a word containing 0. 15) Word 176 contains the Install CSR. 16) Words 200 and following (ascending) words contain the Install code. This code must not go above 377. Note that the bitmap is supposed to be suppressed for handler links. 17) Words 400 and following ascending words contain the SET tables and set code. This code must not go above 777. 18) Words 1000 -- 1012 are the "fixed" .DRBEG structure. Note that 1012 is not really fixed in that the system will ignore its contents if it is not in the range 240 -- 277. 19) Words 1014 and following ascending words are the "variable" .DRBEG structure. For information on allocation within this structure see the policy note under .HBGDF. Flag bit (and other less than byte) allocation policy: Use (Mode de employ) classification: A) Needed for access from the memory-resident portion of the handler. B) Needed for access from the non-memory resident portion, preferably in block 0. C) Needed for access from the non-memory resident portion, preferably in block 1. The Class A flags are allocated as follows: 1) NOP word (filled at SYSTEM edit 03) 2) H1.FG2 beginning with lower bits to moving to upper bits for flags that imply data words in the "variable" .DRBEG area. H1.FG2 from 040000 and descending for flags that do not imply data words in the "variable" .DRBEG area. When all other bits are assigned, 100000 is set and H1.FG3 is defined as the last word in the "variable" area. Repeat the same rules for H1.FG3. NOTE: The 040000 bit in H1.FG2 indicates that the handler supports 64 unit. By coincidence the extended OWNER table is contained in the "variable" area, but it is not meant to be accessed by information in block 1 (there is a pointer in block 0 for that purpose), so it was assigned a high bit in the flag word. The Class B flags are allocated as follows: i) Generic information 1) Assign added DVC.%% codes if the meaning is a broad generic handler grouping. 2) Assign high to low bit in DVM.%% if the meaning modifies more than 1 DVC.%% and is of "general" interest (something that multiple utilities or applications would need to know). 3) Assign low to high bit in DVM.%% if the meaning modifies just 1 DVC.%% class and is of "general" interest (something that multiple utilities or applications would need to know). Be sparing of the above three methods. ii) Bad block replacement information 1) Assign low to high bits in RGT.FG (.RGTDF) if the information is of interest to a utility doing bad block replacement. iii) General interest 1) Assign to H.DSTS (filled, long time now) iv) Installation restriction 1) Assign low to high bits in H.GEN if the information is of interest in rejecting installation. v) UMR (IO mapping) 1) Assign low to high bits in H.64UM. In SYSTEM edit 03 1 bit is available. vi) General and overflow from i-v above 1) Assign bits low to high in H.STS2 (.HS2DF). 2) On overflow allocate H.STS3 if space available, else allocate a flag word in the block 0 overflow area pointed to by 104. The Class C flags are allocated as follows: 1) H1.FLG High bit to low bit (for no good reason). 2) Use bits in block 0 or bits in H1.FGn depending on the expense of having block 0 accessed against the "waste" of using memory resident bits when not needed for memory-resident purposes. ~ .SbTtl EMT REQUESTS -- request block formats and response areas .REM ~ Request Input Name Output Errors (ER.%%%) ------- ------- -------- -------- ------ ..ABTI channel .ABTIO ..ASTX ? .ASTX ? ? ..CALL dest .CALLK ..CDFN buffer .CDFN CHN ..CHAI o(.CHADF) .CHAIN o(.CHADF) ..CHCO channels .CHCOPY CHN OCH ..CLOS channel .CLOSE PRO ..CLOZ channel .CLOSZ EXT NEN PRO ..CMKT id .CMKT o(.TIMDF) INF ..CNTX list||0 .CNTXSW ADR ..CMAP v(.CMPDF) .CMAP v(.CMPDF) ??? v(.CMPDF) .GCMAP v(.CMPDF) ??? v(.CMPDF) .MSDS v(.CMPDF) ??? ..CRAW ov(.WDBDF) .CRAW ov(.WDBDF) WAL PAR RID OVR ..CRRG ov(.RDBDF) .CRRG ov(.RDBDF) NRC MEM RSZ GNF NGC PVT ..CSIG o(.DFXDF) .CSIGEN ov(.OPTDF) CMD DNC PRE FUC FNC ..CSIS o(.DFXDF) .CSISPC ov(.OPTDF) CMD DNC o(.CSIDF) ..CSTA channel .CSTATUS o(.CSTDF) CHN ..DATE .DATE o(.DATDF) ..DELE o(.DBKDF) .DELETE CHN FNF OPE PRO ..DEVI o(.DVLDF) .DEVICE ..DSTA device .DSTATUS o(.DSTDF) DEV ..ELAW ov(.WDBDF) .ELAW ov(.WDBDF) WID ..ELRG ov(.RDBDF) .ELRG ov(.RDBDF) RID GIU ..ENTE o(.DBKDF) .ENTER CHN FUL SHR PRO NNF ISN ..EXIT o(.XITDF) .EXIT ..FETC .FETCH DEV ..FPRO o(.DBKDF) .FPROT CHN FNF OPE IPV ..GFDA o(.DBKDF) .GFDAT value CHN FNF OPE DOF ..GFIN o(.DBKDF) .GFINF value CHN FNF OPE DOF ..GFST o(.DBKDF) .GFSTA value CHN FNF OPE DOF ..GMCX ov(.WDBDF) .GMCX ov(.WDBDF) WID ..GTIM .GTIM o(.TIMDF) ..GTJB Jobname .GTJB o(.GTJDF) NJB ..GTLI Asciz .GTLIN Asciz CMD ..GVAL .FIXDF .GVAL value HI ..HERR .HERR ..HRES .HRESET ..LOCK .LOCK ..LOOK o(.DBKDF) .LOOKUP CHN FNF SHR ISN ..MAP ov(.WDBDF) .MAP ov(.WDBDF) RID WID OVR ..MRKT o(.TIMDF) .MRKT NQL Request Input Name Output Errors (ER.%%%) ------- ------- -------- -------- ------ ..MTAT lun,tas .MTATCH v(.TASDF) LUN IFC ATT TAD ..MTDT lun .MTDTCH NAT LUN IFC ..MTGE lun .MTGET ov(.MGTDF) NAT LUN IFC ATT TAD ..MTIN lun,count .MTIN Ascii INP NAT LUN IFC TAD ..MTOU lun,ascii,count .MTOUT OUT NAT LUN IFC TAD ..MTPR lun,asciz .MTPRNT NAT LUN IFC TAD ..MTRC lun .MTRCTO NAT LUN IFC ..MTSE ov(.MGTDF) .MTSET NAT LUN IFC TAD ..MTST .MTSTAT o(.MSTDF) IFC TAD ..MWAI .MWAIT ..PEEK addr .PEEK value ..POKE addr,value .POKE value ..PRIN Asciz .PRINT ..PROT vector .PROTECT VUI VEC ..PURG channel .PURGE ..PVAL .FIXDF,value .PVAL value HI ..QSET buffer,count .QSET ..RCTR .RCTRLO ..RCVD count,routine .RCVD{|C|W} Buffer NJB ..READ block,cnt,rout .READ{|C|W} Buffer EOF HRD CHC ..RELE device .RELEASE DEV ..RENA o(.DBKDF)*2 .RENAME CHN FNF OPE PRO ..REOP o(.CHNDF) .REOPEN CHN ..RSUM .RSUM ..SAVE channel .SAVESTATUS o(.CHNDF) CHN ENT ..SCCA .SCCA o(.TASDF) ..SDAT buffer,cnt,rout .SDAT{|C|W} NJB ..SDTT o(.DTMDF) .SDTTM v(.DATDF) ..SERR .SERR UNL DIO FET OVE DFU IAD ICH EMT DIR XFE (- values) ..SETT addr .SETTOP o(.SYCDF) ..SFDA o(.DBKDF) .SFDAT CHN FNF OPE v(.DATDF) ..SFIN o(.DBKDF) .SFINF value CHN FNF OPE DOF ..SFPA routine .SFPA ..SFST o(.DBKDF) .SFSTA value CHN FNF OPE DOF ..SPCP o(.SPCDF) .SPCPS o(.SPCDF) MAI SIU ..SPND .SPND ..SPFU v(.SPFDF) .SPFUN ov(.Z%%DF) EOF HRD CHC ov(.Z%%DF) ..SRES .SRESET ..TLOC .TLOCK UIU ..TRPS routine .TRPSET ..TTIN .TTINR char INP ..TTIN .TTYIN char ..TTOU char .TTOUR OUT ..TTOU char .TTYOUT ..TWAI o(.TIMDF) .TWAIT NQL Request Input Name Output Errors (ER.%%%) ------- ------- -------- -------- ------ ..UNLO .UNLOCK ..UNMA ov(.WDBDF) .UNMAP ov(.WDBDF) WID MAP ..UNPR vector .UNPROTECT VEC ..WAIT channel .WAIT CHN HRD ..WRIT blk,buf,cnt,rout.WRIT{C|E|W} EOF HRD CHC ~ .NLIST LOC .LIST SEQ,BIN .IF EQ GP2$DO .SbTtl ...CMA -- Support macro for areas for EMT375 requests ;+ ; ...CMA ; ; This macro is used to generate most of the definitions ; for the ..%%%% macros. ; ; LIST the LIST argument from the calling macro ; E the E argument from the calling macro ; NAME the first 5 characters of request name ; CODE the request code in octal ; SUBCODE the request subcode name [optional] ; SUBVALUE the request subcode value [optional] ; REST a list of the additional word arguments [optional] ; LEN if non-blank, generate the len value ; ; If SUBCODE is omitted, SUBVALUE will be ignored. ;- .MACRO ...CMA LIST,E,NAME,CODE,SUBCODE,SUBVALUE,REST,LEN .IIF NDF ...V99 .MCALL .DSECT .DSECT ,LIST,E .EQU ...'NAME <^o375> .IF B .DS ,,B .IFF .DS A.'SUBCODE ,,B .IF NB .EQU ..'NAME <^o'SUBVALUE> .ENDC .ENDC .DS A.CODE ,,B .EQU .'NAME <^o'CODE> .IRP X, .IF NB .DS A.'X .IFF .DS .ENDC .ENDR .IF NB .DS L.'NAME 0 .ENDC .ENDM ...CMA .SbTtl ...CMT -- Support macro for areas for .MT* macros ;+ ; ...CMT ; ; This macro is used to generate most of the definitions ; for the ..MT%% macros. ; ; LIST the LIST argument from the calling macro ; E the E argument from the calling macro ; NAME the first 5 characters of request name ; SUBVALUE the request subcode value [optional] ; WORD the word argument [optional] ; BYTE1 the first byte argument [optional] ; BYTE2 the second byte argument [optional] ;- .MACRO ...CMT LIST,E,NAME,SUBVALUE,WORD,BYTE1,BYTE2 .IIF NDF ...V99 .MCALL .DSECT .DSECT ,LIST,E .EQU ...'NAME <^o375> .DS A.SUBC ,,B .EQU ..'NAME <^o'SUBVALUE> .DS A.CODE ,,B .EQU .'NAME <^o37> .IF NB .DS A.'WORD .IFF .DS .ENDC .IF NB .DS A.'BYTE1 ,,B .IFF .DS ,,B .ENDC .IF NB .DS A.'BYTE2 ,,B .IFF .DS ,,B .ENDC .IF NB .DS L.'NAME 0 .ENDC .ENDM ...CMT .ENDC; EQ GP2$DO .SbTtl ..%%%% -- Generic information about definition macros ;+ ; ..%%%% ; ; All the ..%%%% macros have two arguments, the first argument ; can be specified to generate a list of the definition equates ; The second argument can be used to override the type of equate ; being done. ; ; ..%%%% LIST=NO,E=<=:> ; ; LIST=NO do not list equates ; LIST=YES do list equates ; ; E=<=> do x = value ; E=<=:> do x =: value ; E=<==> do x == value ; E=<==:> do x ==: value ; ; These macros generate definitions of the values ; and offsets used to issue these requests. ; The definitions generated follow one of the following ; patterns: ; ; 340-341 pattern (..TTIN, ..TTOU): ; ; ...TTI, ...TTO = emt number ; ; 342-343 pattern (..DSTA, ..RELE, ..FETC): ; ; ...DST, ...REL, ...FET = emt number ; ..PHYS = physical (not logical) device name ; ; 344-345 pattern (..CSIG, ..CSIS, ..GTLI): ; ; ...CSG, ..CSS, ...GTL = emt number ; S.CSTR | S.ZERO = top arg offset ; S.DEFX | S.PROM = next arg ; S.DEVS | S.OUTS | S.FLAG = next arg ; S.LBUF = last arg ; ..LBUF = S.LBUF present flag ; ..GTIS = is a .GTLIN value ; ..GTAT = get from command file flag ; ..GTTT = get from terminal flag ; ; 346-357 pattern (..LOCK, ..UNLO, ..EXIT, ..PRIN, ; ..SRES, ..QSET, ..SETT, ..RCTR, ..ASTX, ..HRES): ; ; ...xxx = emt number ; ..HXIT = hard exit flag ; ; 373 pattern (..CALL) ; ; ...xxx = emt number ;- .page ;+ ; 374 pattern (..WAIT, ..SPND, ..RSUM, ..PURG, ..SERR, ; ..HERR, ..CLOS, ..TLOC, ..CHAI, ..MWAI, ..DATE, ; ..ABTI): ; ; .xxxxx = high byte code ; ..xxxx = low byte reserved value (0) ; omitted if channel number in low byte ; ...xxx = emt number (374) ; ;- .page ;+ ; 375 pattern (..DELE, ..LOOK, ..ENTE, ..RENA, ; ..SAVE, ..REOP, ..READ, ..WRIT, ..CHCO, ..DEVI, ..CDFN, ..GTJB, ; ..GTIM, ..MRKT, ..CMKT, ..TWAI, ..SDAT, ..RCVD, ..CSTA, ..SFPA, ; ..PROT, ..UNPR, ..SPFU, ..CNTX, ..GVAL, ..PEEK, ..PVAL, ..POKE, ; ..SCCA, ..CRRG, ..ELRG, ..CRAW, ..ELAW, ..MAP, ..UNMA, ..GMCX, ; ..MTSE, ..MTGE, ..MTIN, ..MTOU, ..MTRC, ..MTAT, ..MTDT, ..MTPR, ; ..MTST, ..SDTT, ..SPCP, ..SFDA, ..FPRO, ..GFDA, ..GFIN, ..GFST, ; ..SFIN, ..SFST, ..CLOZ, ..CMAP): ; ; .xxxxx = high byte code ; ..xxxx = low byte code or reserved value ; omitted if channel number in low byte ; ...xxx = emt number (375) ; ; --0- --1- --2- --3- --4- --5- --6- --7- -10- -11- -12- -13- -14- -15- -16- -17- ;CDFN SUBC CODE CCB NUM L.CDFN ;CHCO CHAN CODE OCHN JOB L.CHCO ;CLOZ CHAN CODE SIZE L.CLOZ ;CMAP SUBC CODE CMAP L.CMAP ;CMKT SUBC CODE CID CTIM L.CMKT ;CNTX SUBC CODE SWAP L.CNTX ;CRAW SUBC CODE WDB L.CRAW ;CRRG SUBC CODE RDB L.CRRG ;CSTA SUBC CODE CST L.CSTA ;DELE CHAN CODE DBLK DSEQ L.DELE ;DELE*CHAN CODE DBLK DSEQ RDEL URTN L.DELU ;DEVI LINK CODE EXIT L.DEVI ;ELAW SUBC CODE WDB L.ELAW ;ELRG SUBC CODE RDB L.ELRG ;ENTE CHAN CODE DBLK LEN ESEQ L.ENTE ;ENTE*CHAN CODE DBLK LEN ESEQ URTN L.ENTU ;FPRO CHAN CODE DBLK PROT L.FPRO ; --0- --1- --2- --3- --4- --5- --6- --7- -10- -11- -12- -13- -14- -15- -16- -17- ;GFDA CHAN CODE DBLK VALU OPER DOFS L.GFDA ;GFDA*CHAN CODE DBLK VALU OPER DOFS URTN L.GFDU ;GFIN CHAN CODE DBLK VALU OPER DOFS L.GFIN ;GFIN*CHAN CODE DBLK VALU OPER DOFS URTN L.GFIU ;GFST CHAN CODE DBLK VALU OPER DOFS L.GFST ;GFST*CHAN CODE DBLK VALU OPER DOFS URTN L.GFSU ;GMCX SUBC CODE WDB L.GMCX ;GTIM SUBC CODE TIME L.GTIM ;GTJB GTJT CODE GTJB JOB L.GTJB ;GVAL SUBC CODE OFST L.GVAL ;LOOK CHAN CODE DBLK LSEQ L.LOOK ;LOOK*CHAN CODE DBLK LSEQ RLOO URTN L.LOOU ; --0- --1- --2- --3- --4- --5- --6- --7- -10- -11- -12- -13- -14- -15- -16- -17- ;MAP SUBC CODE WDB L.MAP ;MRKT SUBC CODE TIME TRTN MID L.MRKT ;MTAT SUBC CODE AST UNIT RMTB L.MTAT ;MTDT SUBC CODE RMT UNIT RMTB L.MTDT ;MTGE SUBC CODE MGET UNIT RMTB L.MTGE ;MTIN SUBC CODE SBUF UNIT SCNT L.MTIN ;MTOU SUBC CODE SBUF UNIT SCNT L.MTOU ;MTPR SUBC CODE SBUF UNIT RMTB L.MTPR ;MTRC SUBC CODE RMT UNIT RMTB L.MTRC ;MTSE SUBC CODE MGET UNIT RMTB L.MTSE ;MTST SUBC CODE MSTA RMT2 L.MTST ; --0- --1- --2- --3- --4- --5- --6- --7- -10- -11- -12- -13- -14- -15- -16- -17- ;PEEK SUBC CODE ADDR L.PEEK ;POKE SUBC CODE ADDR VALU L.POKE ;PROT SUBC CODE ADDR L.PROT ;PVAL SUBC CODE OFST VALU L.PVAL ;RCVD SUBC CODE RRCV BUF WCNT CRTN/TYPE L.RCVD ;RCVD*SUBC CODE RRCV BUF WCNT SPFU FUNC SRTN L.RCVU ;READ CHAN CODE BLK BUF WCNT CRTN/TYPE L.READ ;READ*CHAN CODE BLK BUF WCNT SPFU FUNC SRTN L.REAU ;RENA CHAN CODE DBK2 L.RENA ;RENA CHAN CODE DBK2 RRE1 RRE2 URTN L.RENU ;REOP CHAN CODE CBLK L.REOP ; --0- --1- --2- --3- --4- --5- --6- --7- -10- -11- -12- -13- -14- -15- -16- -17- ;SAVE CHAN CODE CBLK L.SAVE ;SCCA SCOP CODE AST L.SCCA ;SDAT SUBC CODE RSDA BUF WCNT CRTN/TYPE L.SDAT ;SDAT*SUBC CODE RSDA BUF WCNT SPFU FUNC SRTN L.SDAU ;SDTT SUBC CODE DTTM L.SDTT ;SFDA CHAN CODE DBLK DATE L.SFDA ;SFIN CHAN CODE DBLK VALU OPER DOFS L.SFIN ;SFIN*CHAN CODE DBLK VALU OPER DOFS URTN L.SFIU ;SFPA SUBC CODE ADDR L.SFPA ;SFST CHAN CODE DBLK VALU OPER DOFS L.SFST ;SFST*CHAN CODE DBLK VALU OPER DOFS URTN L.SFSU ;SPCP SUBC CODE PCPS L.SPCP ;SPFU SUBC CODE BLK BUF WCNT SPFU FUNC SRTN/TYPE L.SPFU ;TRPS SUBC CODE TRPS L.TRPS ;TWAI SUBC CODE TIME L.TWAI ;UNMA SUBC CODE WDB L.UNMA ;UNPR SUBC CODE ADDR L.UNPR ;WRIT CHAN CODE BLK BUF WCNT CRTN/TYPE L.WRIT ;WRIT*CHAN CODE BLK BUF WCNT SPFU FUNC SRTN L.WRIU ;- .page ;+ ; flags and value ; ..URTN = user subroutine flag value ; ..RESV = 0 reserved area filler value ; ..PHYS = physical (not logical) device name ; ..ISIO = issue I/O w/o wait ; ..WTIO = issue I/O, wait for completion ; ..DRIO = issue special directory operation ; ..DNLK = non-linking request ; ..DLNK = linking request ; ..GTNO = no job parameter ; ..GTJB = yes job parameter ; ..GTME = info about this job ; ..GTV3 = V3 answer area ; ..SWFP = swap context only ; ..SPFV = SPFUN flag value ; ..FUNV = required bit in S.FUNC ; ..SCLC = local scca ; ..SCGB = global scca ; ..FUNP = file unprotect ; ..FPRO = file protect ; ; Error codes returned by EMT requests are defined in ; .ERRDF ; ; Error codes returned by SPFUN EMT requests are defined in ; .ERMDF (Magtape) ; .ERNDF (Ethernet) ; .ERSDF (Disk:DU/DM) ;- .IF EQ GP2$DO .SbTtl ..ABTI -- .ABTIO EMT request layout / values ;+ ; ..ABTI ; ; +-------+-------+ ;R0: | 13 | chan | .ABTIO = 13 ; +-------+-------+ ; ; EMT ...ABT = 374 ;- .MACRO ..ABTI LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E .EQU ...ABT <^o374> .EQU .ABTIO <^o13> .ENDM ..ABTI .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..ABTI .Print ;..ABTI ..ABTI YES,==: .Assume ...ABT EQ <^o374> .Assume .ABTIO EQ <^o13> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..ASTX -- .ASTX EMT request layout / values ;+ ; ..ASTX ; ; +-------+-------+ ;R0: | | ; +-------+-------+ ; ; If from completion routine, R0 = 0 ; ; If from KMON and R0 = -1 just start program ; ; If from KMON and R0 <> 0, r0 is number of blocks ; to read of program ; EMT ...AST = 356 ;- .MACRO ..ASTX LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E .EQU ...AST <^o356> .ENDM ..ASTX .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..ASTX .Print ;..ASTX ..ASTX YES,==: .Assume ...AST EQ <^o356> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CALL -- .CALLK EMT request layout / values ;+ ; ..CALL ; ; EMT ...CAL = 373 ; ; +-------+-------+ ;@SP: | dest | ; +-------+-------+ ;- .MACRO ..CALL LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E .EQU ...CAL <^o373> .ENDM ..CALL .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CALL .Print ;..CALL ..CALL YES,==: .Assume ...CAL EQ <^o373> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CDFN -- .CDFN EMT request layout / values ;+ ; ..CDFN ; ; +-------+ ;A.SUBC: | 0 |[0] ..CFDN = 0 ; +-------+-------+ ;A.CODE:| 15 | [1] .CFDN = 15 ; +-------+-------+ ;A.CCB: |-> Chan Ctrl Bk|[2] o(.CHNDF)*n ; +-------+-------+ ;A.NUM: | number of CCBs|[4] ; +-------+-------+ ;L.CDFN: [6] ; ; EMT ...CDF = 375 ;- .MACRO ..CDFN LIST,E .MCALL ...CMA ...CMA LIST,E,CDFN,15,SUBC,0,,L .ENDM ..CDFN .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CDFN .Print ;..CDFN ..CDFN YES,==: .Assume A.SUBC EQ 0 .Assume A.CODE EQ 1 .Assume A.CCB EQ <^o2> .Assume A.NUM EQ <^o4> .Assume L.CDFN EQ <^o6> .Assume ...CDF EQ <^o375> .Assume ..CDFN EQ <^o0> .Assume .CDFN EQ <^o15> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CHAI -- .CHAIN EMT request layout / values ;+ ; ..CHAI ; ; +-------+-------+ ;R0: | 10 | 0 | .CHAIN = 10 ; +-------+-------+ ..CHAI = 0 ; ; Arguments also in 500+ o(.CHADF) ; ; EMT ...CHA = 374 ;- .MACRO ..CHAI LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E .EQU ...CHA <^o374> .EQU ..CHAI <^o0> .EQU .CHAIN <^o10> .ENDM ..CHAI .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CHAI .Print ;..CHAI ..CHAI YES,==: .Assume ...CHA EQ <^o374> .Assume ..CHAI EQ <^o0> .Assume .CHAIN EQ <^o10> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CHCO -- .CHCOPY EMT request layout / values ;+ ; ..CHCO ; ; +-------+ ;A.CHAN: |channel|[0] ; +-------+-------+ ;A.CODE:| 13 | [1] .CHCOP = 13 ; +-------+-------+ ;A.OCHN:|other job's chn|[2] ; +-------+-------+ ;A.JOB: | -> Job block |[4] 6 chars ASCII ; +-------+-------+ ;L.CHCO: [6] ; ; EMT ...CHC = 375 ;- .MACRO ..CHCO LIST,E .MCALL ...CMA ...CMA LIST,E,CHCOP,13,CHAN,,,L .ENDM ..CHCO .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CHCO .Print ;..CHCO ..CHCO YES,==: .Assume A.CHAN EQ 0 .Assume A.CODE EQ 1 .Assume A.OCHN EQ <^o2> .Assume A.JOB EQ <^o4> .Assume L.CHCO EQ <^o6> .Assume ...CHC EQ <^o375> .Assume .CHCOP EQ <^o13> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CLOS -- .CLOSE EMT request layout / values ;+ ; ..CLOS ; ; +-------+-------+ ;R0: | 6 | Chan | .CLOSE = 6 ; +-------+-------+ ; ; EMT ...CLO = 374 ;- .MACRO ..CLOS LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E .EQU ...CLO <^o374> .EQU .CLOSE <^o6> .ENDM ..CLOS .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CLOS .Print ;..CLOS ..CLOS YES,==: .Assume ...CLO EQ <^o374> .Assume .CLOSE EQ <^o6> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CLOZ -- .CLOSZ EMT request layout / values ;+ ; ..CLOZ ; ; +-------+ ;A.CHAN: |channel|[0] ; +-------+-------+ ;A.CODE:| 45 | [1] .CLOSZ = 45 ; +-------+-------+ ;A.SIZE:|Forced file siz|[2] ; +-------+-------+ ;L.CLOZ: [4] ; ; EMT ...CLZ = 375 ;- .MACRO ..CLOZ LIST,E .IIF NDF ...V99 .MCALL .DSECT .DSECT ,LIST,E .DS A.CHAN ,,B ;channel number .DS A.CODE ,,B ;request code .EQU .CLOSZ <^o45> ;request code value .DS A.SIZE ;forced file size .DS L.CLOZ ,0 ;length of request block .EQU ...CLZ <^o375> ;EMT value .ENDM ..CLOZ .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CLOZ .Print ;..CLOZ ..CLOZ YES,==: .Assume A.CHAN EQ 0 .Assume A.CODE EQ 1 .Assume A.SIZE EQ <^o2> .Assume L.CLOZ EQ <^o4> .Assume ...CLZ EQ <^o375> .Assume .CLOSZ EQ <^o45> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CMAP -- .CMAP/.GCMAP/.MSDS EMT request layout / values ;+ ; ..CMAP ; ; +-------+ ;A.SUBC: | 0 |[0] ..CMAP = 0 ; +-------+-------+ ;A.CODE:| 46 | [1] .CMAP = 46 ; +-------+-------+ ;A.CMAP:| Request mask |[2] v(.CMPDF) ; +-------+-------+ ;L.CMAP: [4] ; ; EMT ...CMA = 375 ;- .MACRO ..CMAP LIST,E .MCALL ...CMA ...CMA LIST,E,CMAP,46,SUBC,0,,L .ENDM ..CMAP .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CMAP .Print ;..CMAP ..CMAP YES,==: .Assume A.SUBC EQ 0 .Assume A.CODE EQ 1 .Assume A.CMAP EQ <^o2> .Assume L.CMAP EQ <^o4> .Assume ...CMA EQ <^o375> .Assume ..CMAP EQ <^o0> .Assume .CMAP EQ <^o46> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CMKT -- .CMKT EMT request layout / values ;+ ; ..CMKT ; ; +-------+ ;A.SUBC: | 0 |[0] ..CMKT = 0 ; +-------+-------+ ;A.CODE:| 23 | [1] .CMKT = 23 ; +-------+-------+ ;A.CID: | ID to cancel |[2] v(.QTIDF) ; +-------+-------+ ;A.CTIM:| -> remain time|[4] o(.TIMDF) ; +-------+-------+ ;L.CMKT: [6] ; ; EMT ...CMK = 375 ;- .MACRO ..CMKT LIST,E .MCALL ...CMA ...CMA LIST,E,CMKT,23,SUBC,0,,L .ENDM ..CMKT .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CMKT .Print ;..CMKT ..CMKT YES,==: .Assume A.SUBC EQ 0 .Assume A.CODE EQ 1 .Assume A.CID EQ <^o2> .Assume A.CTIM EQ <^o4> .Assume L.CMKT EQ <^o6> .Assume ...CMK EQ <^o375> .Assume ..CMKT EQ <^o0> .Assume .CMKT EQ <^o23> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CNTX -- .CNTXSW EMT request layout / values ;+ ; ..CNTX ; ; +-------+ ;A.SUBC: | 0 |[0] ..CNTX = 0 ; +-------+-------+ ;A.CODE:| 33 | [1] .CNTXS = 33 ; +-------+-------+ ;A.SWAP:| -> swap loc'ns|[2] list terminated by 0 ; +-------+-------+ ;L.CNTX: [4] ; ; EMT ...CNT = 375 ;- .MACRO ..CNTX LIST,E .MCALL ...CMA ...CMA LIST,E,CNTXS,33,SUBC,0,,L .ENDM ..CNTX .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CNTX .Print ;..CNTX ..CNTX YES,==: .Assume A.SUBC EQ 0 .Assume A.CODE EQ 1 .Assume A.SWAP EQ <^o2> .Assume L.CNTX EQ <^o4> .Assume ...CNT EQ <^o375> .Assume ..CNTX EQ <^o0> .Assume .CNTXS EQ <^o33> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CRAW -- .CRAW EMT request layout / values ;+ ; ..CRAW ; ; +-------+ ;A.SUBC: | 2 |[0] ..CRAW = 2 ; +-------+-------+ ;A.CODE:| 36 | [1] .CRAW = 36 ; +-------+-------+ ;A.WDB: | -> window DB |[2] ov(.WDBDF) ; +-------+-------+ ;L.CRAW: [4] ; ; EMT ...CRA = 375 ;- .MACRO ..CRAW LIST,E .MCALL ...CMA ...CMA LIST,E,CRAW,36,SUBC,2,,L .ENDM ..CRAW .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CRAW .Print ;..CRAW ..CRAW YES,==: .Assume A.SUBC EQ 0 .Assume A.CODE EQ 1 .Assume A.WDB EQ <^o2> .Assume L.CRAW EQ <^o4> .Assume ...CRA EQ <^o375> .Assume ..CRAW EQ <^o2> .Assume .CRAW EQ <^o36> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CRRG -- .CRRG EMT request layout / values ;+ ; ..CRRG ; ; +-------+ ;A.SUBC: | 0 |[0] ..CRRG = 0 ; +-------+-------+ ;A.CODE:| 36 | [1] .CRRG = 36 ; +-------+-------+ ;A.RDB: | -> region DB |[2] ov(.RDBDF) ; +-------+-------+ ;L.CRRG: [4] ; ; EMT ...CRR = 375 ;- .MACRO ..CRRG LIST,E .MCALL ...CMA ...CMA LIST,E,CRRG,36,SUBC,0,,L .ENDM ..CRRG .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CRRG .Print ;..CRRG ..CRRG YES,==: .Assume A.SUBC EQ 0 .Assume A.CODE EQ 1 .Assume A.RDB EQ <^o2> .Assume L.CRRG EQ <^o4> .Assume ...CRR EQ <^o375> .Assume ..CRRG EQ 0 .Assume .CRRG EQ <^o36> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CSIG -- .CSIGEN EMT request layout / values ;+ ; ..CSIG ; ; +-------+-------+ ;@SP+0: | -> C string | S.CSTR ; +-------+-------+ ;@SP+2: | -> Default Ext| S.DEFX o(.DFXDF) ; +-------+-----+-+ ;@SP+4: | -> Dev Space|F| S.DEVS S.FLAG F=1 S.LBUF (..LBUF) ; +-------+-------+ ;@SP+6: | -> Line buffer| S.LBUF ; +-------+-------+ ; ; EMT ...CSG = 344 ; ;On return: ; ; +-------+-------+ ;@SP+0: |Num of switches| ; +-------+-------+ ;@SP+2: | Switch data | (if @SP not 0) ; : : ov(.OPTDF) ;- .MACRO ..CSIG LIST,E .IIF NDF ...V99 .MCALL .DSECT .DSECT ,LIST,E .EQU ...CSG <^o344> .DS S.CSTR .DS S.DEFX .DS S.DEVS .EQU ..LBUF 1 .DS S.LBUF .ENDM ..CSIG .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CSIG .Print ;..CSIG ..CSIG YES,==: .Assume ...CSG EQ <^o344> .Assume S.CSTR EQ 0 .Assume S.DEFX EQ <^o2> .Assume S.DEVS EQ <^o4> .Assume S.LBUF EQ <^o6> .Assume ..LBUF EQ 1 .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CSIS -- .CSISPC EMT request layout / values ;+ ; ..CSIS ; ; +-------+-------+ ;@SP+0: | -> C string | S.CSTR ; +-------+-------+ ;@SP+2: | -> Default Ext| S.DEFX o(.DFXDF) ; +-------+-----+-+ ;@SP+4: | -> Out Spec |F| S.OUTS S.FLAG o(.CSIDF) ; +-------+-------+ F=1 S.LBUF (..LBUF) ;@SP+6: | -> Line buffer| S.LBUF ; +-------+-------+ ; ; EMT ...CSS = 345 ; ;On return: ; ; +-------+-------+ ;@SP+0: |Num of switches| ; +-------+-------+ ;@SP+2: | Switch data | (if @SP not 0) ; : : ov(.OPTDF) ;- .MACRO ..CSIS LIST,E .IIF NDF ...V99 .MCALL .DSECT .DSECT ,LIST,E .EQU ...CSS <^o345> .DS S.CSTR .DS S.DEFX .DS S.OUTS .EQU ..LBUF 1 .DS S.LBUF .ENDM ..CSIS .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CSIS .Print ;..CSIS ..CSIS YES,==: .Assume ...CSS EQ <^o345> .Assume S.CSTR EQ 0 .Assume S.DEFX EQ <^o2> .Assume S.OUTS EQ <^o4> .Assume S.LBUF EQ <^o6> .Assume ..LBUF EQ 1 .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..CSTA -- .CSTAT EMT request layout / values ;+ ; ..CSTA ; ; +-------+ ;A.CHAN: |channel|[0] ; +-------+-------+ ;A.CODE:| 27 | [1] .CSTAT = 27 ; +-------+-------+ ;A.CST: |-> reply area |[2] o(.CSTDF) ; +-------+-------+ ;L.CSTA: [4] ; ; EMT ...CST = 375 ;- .MACRO ..CSTA LIST,E .MCALL ...CMA ...CMA LIST,E,CSTAT,27,CHAN,,,L .ENDM ..CSTA .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..CSTA .Print ;..CSTA ..CSTA YES,==: .Assume ...CST EQ <^o375> .Assume A.CHAN EQ 0 .Assume A.CODE EQ 1 .Assume .CSTAT EQ <^o27> .Assume A.CST EQ <^o2> .Assume L.CSTA EQ <^o4> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..DATE -- .DATE EMT request layout / values ;+ ; ..DATE ; ; +-------+-------+ ;R0: | 12 | 0 | .DATE = 12 ; +-------+-------+ ..DATE = 0 ; ; v(.DATDF) ; ; EMT ...DAT = 374 ;- .MACRO ..DATE LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E .EQU ...DAT <^o374> .EQU ..DATE <^o0> .EQU .DATE <^o12> .ENDM ..DATE .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..DATE .Print ;..DATE ..DATE YES,==: .Assume ...DAT EQ <^o374> .Assume ..DATE EQ <^o0> .Assume .DATE EQ <^o12> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..DELE -- .DELETE EMT request layout / values ;+ ; ..DELE ; ; +-------+ ;A.CHAN: |channel|[0] ; +-------+-------+ ;A.CODE:| 0 | [1] .DELET = 0 ; +-------+-----+-+ ;A.DBLK:| -> D block |F|[2] o(.DBKDF) ..URTN = 1 for user routine ; +-------+-----+-+ ;A.DSEQ:| File seq num |[4] ; +-------+-------+ ;L.DELE: [6] ; ; +-------+-------+ ;A.RDEL:| 0 |[6] ..RESV = 0 reserved ; +-------+-----+-+ ;A.URTN:| -> user rtn |F|[10] (undocumented) ..PHYS = 1 for physical only ; +-------+-----+-+ ;L.DELU: [12] ; ; EMT ...DEL = 375 ;- .MACRO ..DELE LIST,E .MCALL ...CMA ...CMA LIST,E,DELET,0,CHAN,,,L .IF NE DOC$UN .DS A.RDEL .EQU ..RESV 0 .DS A.URTN .EQU ..URTN 1 .EQU ..PHYS 1 .DS L.DELU 0 .ENDC .ENDM ..DELE .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..DELE .Print ;..DELE ..DELE YES,==: .Page .Assume ...DEL EQ <^o375> .Assume A.CHAN EQ 0 .Assume A.CODE EQ 1 .Assume .DELET EQ 0 .Assume A.DBLK EQ <^o2> .Assume A.DSEQ EQ <^o4> .Assume L.DELE EQ <^o6> .IF NE DOC$UN .Assume A.RDEL EQ <^o6> .Assume ..RESV EQ 0 .Assume A.URTN EQ <^o10> .Assume L.DELU EQ <^o12> .Assume ..URTN EQ 1 .Assume ..PHYS EQ 1 .ENDC .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..DEVI -- .DEVICE EMT request layout / values ;+ ; ..DEVI ; ; +-------+ {non-linking = 0 (..DNLK) ;A.LINK: | flag |[0] { ; +-------+-------+ {linking = 1 (..DLNK) ;A.CODE:| 14 | [1] .DEVIC = 14 ; +-------+-------+ ;A.EXIT:| -> exit list |[2] o(.DVLDF) ; +-------+-------+ ;L.DEVI: [4] ; ; EMT ...DEV = 375 ;- .MACRO ..DEVI LIST,E .MCALL ...CMA ...CMA LIST,E,DEVIC,14,LINK,,,L .EQU ..DNLK 0 ;not linking .EQU ..DLNK 1 ;linking .ENDM ..DEVI .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..DEVI .Print ;..DEVI ..DEVI YES,==: .Assume ...DEV EQ <^o375> .Assume A.LINK EQ 0 .Assume ..DNLK EQ 0 .Assume ..DLNK EQ 1 .Assume A.CODE EQ 1 .Assume .DEVIC EQ <^o14> .Assume A.EXIT EQ <^o2> .Assume L.DEVI EQ <^o4> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..DSTA -- .DSTATUS EMT request layout / values ;+ ; ..DSTA ; ; +-------+-------+ ;R0: | -> Device name| ; +-------+-------+ ; ; +-------+-----+-+ ;@SP | ->Reply area|F|..PHYS = 1 if physical only o(.DSTDF) ; +-------+-----+-+ ; ; EMT ...DST = 342 ;- .MACRO ..DSTA LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E .EQU ...DST <^O342> .IF NE DOC$UN .EQU ..PHYS 1 .ENDC .ENDM ..DSTA .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..DSTA .Print ;..DSTA ..DSTA YES,==: .Assume ...DST EQ <^o342> .IF NE DOC$UN .Assume ..PHYS EQ 1 .ENDC .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..ELAW -- .ELAW EMT request layout / values ;+ ; ..ELAW ; ; +-------+ ;A.SUBC: | 3 |[0] ..ELAW = 3 ; +-------+-------+ ;A.CODE:| 36 | [1] .ELAW = 36 ; +-------+-------+ ;A.WDB: | -> window DB |[2] ov(.WDBDF) ; +-------+-------+ ;L.ELAW: [4] ; ; EMT ...ELA = 375 ;- .MACRO ..ELAW LIST,E .MCALL ...CMA ...CMA LIST,E,ELAW,36,SUBC,3,,L .ENDM ..ELAW .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..ELAW .Print ;..ELAW ..ELAW YES,==: .Assume A.SUBC EQ 0 .Assume A.CODE EQ 1 .Assume A.WDB EQ <^o2> .Assume L.ELAW EQ <^o4> .Assume ...ELA EQ <^o375> .Assume ..ELAW EQ <^o3> .Assume .ELAW EQ <^o36> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..ELRG -- .ELRG EMT request layout / values ;+ ; ..ELRG ; ; +-------+ ;A.SUBC: | 1 |[0] ..ELRG = 1 ; +-------+-------+ ;A.CODE:| 36 | [1] .ELRG = 36 ; +-------+-------+ ;A.RDB: | -> region DB |[2] ov(.RDBDF) ; +-------+-------+ ;L.ELRG: [4] ; ; EMT ...ELR = 375 ;- .MACRO ..ELRG LIST,E .MCALL ...CMA ...CMA LIST,E,ELRG,36,SUBC,1,,L .ENDM ..ELRG .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..ELRG .Print ;..ELRG ..ELRG YES,==: .Assume A.SUBC EQ 0 .Assume A.CODE EQ 1 .Assume A.RDB EQ <^o2> .Assume L.ELRG EQ <^o4> .Assume ...ELR EQ <^o375> .Assume ..ELRG EQ 1 .Assume .ELRG EQ <^o36> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..ENTE -- .ENTER EMT request layout / values ;+ ; ..ENTE ; ; +-------+ ;A.CHAN: |channel|[0] ; +-------+-------+ ;A.CODE:| 2 | [1] .ENTER = 2 ; +-------+-----+-+ ;A.DBLK:| -> D block |F|[2] o(.DBKDF) ..URTN = 1 for user routine call ; +-------+-----+-+ ;A.LEN | File len |[4] ; +-------+-------+ ;A.ESEQ:| File seq num |[6] ; +-------+-------+ ;L.ENTE: [10] ; +-------+-----+-+ ;A.URTN:| -> user rtn |F|[10] (undocumented) ..PHYS = 1 for physical only ; +-------+-----+-+ ;L.ENTU: [12] ; ; EMT ..ENT = 375 ;- .MACRO ..ENTE LIST,E .MCALL ...CMA ...CMA LIST,E,ENTER,2,CHAN,,,L .IF NE DOC$UN .DS A.URTN .EQU ..URTN 1 .EQU ..PHYS 1 .DS L.ENTU 0 .ENDC .ENDM ..ENTE .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..ENTE .Print ;..ENTE ..ENTE YES,==: .Page .Assume ...ENT EQ <^o375> .Assume A.CHAN EQ 0 .Assume A.CODE EQ 1 .Assume .ENTER EQ <^o2> .Assume A.DBLK EQ <^o2> .Assume A.LEN EQ <^o4> .Assume A.ESEQ EQ <^o6> .Assume L.ENTE EQ <^o10> .IF NE DOC$UN .Assume A.URTN EQ <^o10> .Assume L.ENTU EQ <^o12> .Assume ..URTN EQ 1 .Assume ..PHYS EQ 1 .ENDC .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..EXIT -- .EXIT EMT request layout / values ;+ ; ..EXIT ; ; EMT ...EXI = 350 ; ; R0 = 0 ..HXIT (hard exit) ; R0 <> 0 (soft exit) ; ; Arguments o(.XITDF) ;- .MACRO ..EXIT LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E .EQU ...EXI <^o350> .EQU ..HXIT 0 .ENDM ..EXIT .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..EXIT .Print ;..EXIT ..EXIT YES,==: .Assume ...EXI EQ <^o350> .Assume ..HXIT EQ 0 .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..FETC -- .FETCH EMT request layout / values ;+ ; ..FETC ; ; +-------+-------+ ;R0: | -> Device name| ; +-------+-------+ ; ; +-------+-----+-+ ;@SP | ->Fetch area|F| ..PHYS = 1 if physical only ; +-------+-----+-+ ; ; EMT ...FET = 343 ;- .MACRO ..FETC LIST,E .IIF NDF ...V99 .MCALL .LIST. .LIST. LIST,E .EQU ...FET <^o343> .IF NE DOC$UN .EQU ..PHYS 1 .ENDC .ENDM ..FETC .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..FETC .Print ;..FETC ..FETC YES,==: .Assume ...FET EQ <^o343> .IF NE DOC$UN .Assume ..PHYS EQ 1 .ENDC .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..FPRO -- .FPROT EMT request layout / values ;+ ; ..FPRO ; ; +-------+ ;A.CHAN: |channel|[0] ; +-------+-------+ ;A.CODE:| 43 | [1] .FPROT = 43 ; +-------+-------+ ;A.DBLK:| -> D block |[2] o(.DBKDF) ; +-------+-------+ {..FUNP = 0 unprotect ;A.PROT | Set / Clear |[4] { ; +-------+-------+ {..FPRO = 1 protect ;L.FPRO: [6] ; ; EMT ...FPR = 375 ;- .MACRO ..FPRO LIST,E .MCALL ...CMA ...CMA LIST,E,FPROT,43,CHAN,,,L .EQU ..FUNP 0 ;unprotect .EQU ..FPRO 1 ;protect .ENDM ..FPRO .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..FPRO .Print ;..FPRO ..FPRO YES,==: .Assume ...FPR EQ <^o375> .Assume A.CHAN EQ 0 .Assume A.CODE EQ 1 .Assume .FPROT EQ <^o43> .Assume A.DBLK EQ <^o2> .Assume A.PROT EQ <^o4> .Assume ..FUNP EQ 0 .Assume ..FPRO EQ 1 .Assume L.FPRO EQ <^o6> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..GFDA -- .GFDAT EMT request layout / values ;+ ; ..GFDA ; ; +-------+ ;A.CHAN: |channel|[0] ; +-------+-------+ ;A.CODE:| 44 | [1] .GFDAT = 44 ; +-------+-------+ ;A.DBLK:| -> D block |F|[2] o(.DBKDF) ..URTN = 1 for flag word ; +-------+-------+ ;A.VALU:| value |[4] reserved ; +-------+-------+ ;A.OPER: | 0 |[6] operation ..GETF ; +-------+-------+ ;A.DOFS:| 14 | [7] directory entry offset E.DATE ; +-------+ ;L.GFDA: [10] ; +-------+-----+-+ ;A.URTN:| reserved |F|[10] (undocumented) ..PHYS = 1 for physical only ; +-------+-----+-+ ;L.GFDU: [12] ; ; EMT ...GFD = 375 ;- .MACRO ..GFDA LIST,E .MCALL ...CMA ...CMA LIST,E,GFDAT,44,CHAN,, .EQU ..GETF 0 ;get operation .EQU A.DOFS <^o7> ;offset byte .EQU L.GFDA <^o10> ;length of request block .IF NE DOC$UN .EQU ..URTN 1 ;flag word exists .EQU A.URTN <^o10> ;flag word for physical only flag .EQU ..PHYS 1 ;bypass logical translation .EQU L.GFDU <^o12> ;length with undocumented area .ENDC ;NE DOC$UN .ENDM ..GFDA .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..GFDA .Print ;..GFDA ..GFDA YES,==: .Assume A.CHAN EQ 0 .Assume A.CODE EQ 1 .Assume .GFDAT EQ <^o44> .Assume A.DBLK EQ <^o2> .Assume ..URTN EQ 1 .Assume A.VALU EQ <^o4> .Assume A.OPER EQ <^o6> .Assume ..GETF EQ 0 .Assume A.DOFS EQ <^o7> .Assume L.GFDA EQ <^o10> .Assume ...GFD EQ <^o375> .IF NE DOC$UN .Assume A.URTN EQ <^o10> .Assume ..PHYS EQ 1 .Assume L.GFDU EQ <^o12> .ENDC ;NE DOC$UN .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..GFIN -- .GFINF EMT request layout / values ;+ ; ..GFIN ; ; +-------+ ;A.CHAN: |channel|[0] ; +-------+-------+ ;A.CODE:| 44 | [1] .GFINF = 44 ; +-------+-------+ ;A.DBLK:| -> D block |F|[2] o(.DBKDF) ..URTN = 1 for flag word ; +-------+-------+ ;A.VALU:| value |[4] reserved ; +-------+-------+ ;A.OPER: | 0 |[6] operation ..GETF ; +-------+-------+ ;A.DOFS:| | [7] directory entry offset ; +-------+ ;L.GFIN: [10] ; +-------+-----+-+ ;A.URTN:| reserved |F|[10] (undocumented) ..PHYS = 1 for physical only ; +-------+-----+-+ ;L.GFIU: [12] ; ; EMT ...GFI = 375 ;- .MACRO ..GFIN LIST,E .MCALL ...CMA ...CMA LIST,E,GFINF,44,CHAN,, .EQU ..GETF 0 ;get operation .EQU A.DOFS <^o7> ;offset byte .EQU L.GFIN <^o10> ;length of request block .IF NE DOC$UN .EQU ..URTN 1 ;flag word exists .EQU A.URTN <^o10> ;flag word for physical only flag .EQU ..PHYS 1 ;bypass logical translation .EQU L.GFIU <^o12> ;length with undocumented area .ENDC ;NE DOC$UN .ENDM ..GFIN .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..GFIN .Print ;..GFIN ..GFIN YES,==: .Assume A.CHAN EQ 0 .Assume A.CODE EQ 1 .Assume .GFINF EQ <^o44> .Assume A.DBLK EQ <^o2> .Assume ..URTN EQ 1 .Assume A.VALU EQ <^o4> .Assume A.OPER EQ <^o6> .Assume ..GETF EQ 0 .Assume A.DOFS EQ <^o7> .Assume L.GFIN EQ <^o10> .Assume ...GFI EQ <^o375> .IF NE DOC$UN .Assume A.URTN EQ <^o10> .Assume ..PHYS EQ 1 .Assume L.GFIU EQ <^o12> .ENDC ;NE DOC$UN .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..GFST -- .GFSTA EMT request layout / values ;+ ; ..GFST ; ; +-------+ ;A.CHAN: |channel|[0] ; +-------+-------+ ;A.CODE:| 44 | [1] .GFSTA = 44 ; +-------+-------+ ;A.DBLK:| -> D block |F|[2] o(.DBKDF) ..URTN = 1 for flag word ; +-------+-------+ ;A.VALU:| value |[4] reserved ; +-------+-------+ ;A.OPER: | 0 |[6] operation ..GETF ; +-------+-------+ ;A.DOFS:| 0 | [7] directory entry offset E.STAT ; +-------+ ;L.GFST: [10] ; +-------+-----+-+ ;A.URTN:| reserved |F|[10] (undocumented) ..PHYS = 1 for physical only ; +-------+-----+-+ ;L.GFSU: [12] ; ; EMT ...GFS = 375 ;- .MACRO ..GFST LIST,E .MCALL ...CMA ...CMA LIST,E,GFSTA,44,CHAN,, .EQU ..GETF 0 ;get operation .EQU A.DOFS <^o7> ;offset byte .EQU L.GFST <^o10> ;length of request block .IF NE DOC$UN .EQU ..URTN 1 ;flag word exists .EQU A.URTN <^o10> ;flag word for physical only flag .EQU ..PHYS 1 ;bypass logical translation .EQU L.GFSU <^o12> ;length with undocumented area .ENDC ;NE DOC$UN .ENDM ..GFST .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..GFST .Print ;..GFST ..GFST YES,==: .Assume A.CHAN EQ 0 .Assume A.CODE EQ 1 .Assume .GFSTA EQ <^o44> .Assume A.DBLK EQ <^o2> .Assume ..URTN EQ 1 .Assume A.VALU EQ <^o4> .Assume A.OPER EQ <^o6> .Assume ..GETF EQ 0 .Assume A.DOFS EQ <^o7> .Assume L.GFST EQ <^o10> .Assume ...GFS EQ <^o375> .IF NE DOC$UN .Assume A.URTN EQ <^o10> .Assume ..PHYS EQ 1 .Assume L.GFSU EQ <^o12> .ENDC ;NE DOC$UN .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..GMCX -- .GMCX EMT request layout / values ;+ ; ..GMCX ; ; +-------+ ;A.SUBC: | 6 |[0] ..GMCX = 6 ; +-------+-------+ ;A.CODE:| 36 | [1] .GMCX = 36 ; +-------+-------+ ;A.WDB: | -> window DB |[2] ov(.WDBDF) ; +-------+-------+ ;L.GMCX: [4] ; ; EMT ...GMC = 375 ;- .MACRO ..GMCX LIST,E .MCALL ...CMA ...CMA LIST,E,GMCX,36,SUBC,6,,L .ENDM ..GMCX .ENDC ;EQ GP2$DO .IIF EQ ONE$DO-ONE.DO .END ONE.DO=ONE.DO+1 .IF EQ GP2$DO& .IIF EQ .MCALL ..GMCX .Print ;..GMCX ..GMCX YES,==: .Assume A.SUBC EQ 0 .Assume A.CODE EQ 1 .Assume A.WDB EQ <^o2> .Assume L.GMCX EQ <^o4> .Assume ...GMC EQ <^o375> .Assume ..GMCX EQ <^o6> .Assume .GMCX EQ <^o36> .ENDC ;EQ GP2$DO& .IF EQ GP2$DO .SbTtl ..GTIM -- .GTIM EMT request layout / values ;+ ; ..GTIM ; ; +-------+ ;A.SUBC: | 0 |[0] ..GTIM = 0 ; +-------+-------+ ;A.CODE:| 21 | [1] .GTIM = 21 ; +-------+-------+ ;A.TIME:| -> time reply |[2] o(.TIMDF) ; +-------+-------+ ;L.GTIM: [4] ; ; EMT ...GTI = 375 ;- .MACRO ..GTIM LIST,E .MCALL ...CMA ...CMA LIST,E,GTIM,21,SUBC,0,