mirror of
https://github.com/PDP-10/stacken.git
synced 2026-01-31 05:42:03 +00:00
3857 lines
112 KiB
Plaintext
3857 lines
112 KiB
Plaintext
TITLE COMDEV - MONITOR DEVICE DEPENDENT CODE, SYMBOLS, AND DATA - V1500
|
||
SUBTTL T. HASTINGS/PH/TWE/DAL/JBS/EGF 30-AUGUST-88
|
||
|
||
SEARCH F,S,DEVPRM
|
||
IFN FTNET!M.ANF,<SEARCH NETPRM>
|
||
IFN M.KL10,<SEARCH DTEPRM>
|
||
IFN FTDECNET!M.DECN,<SEARCH D36PAR>
|
||
|
||
$RELOC
|
||
$LOW
|
||
|
||
|
||
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED
|
||
; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
|
||
;
|
||
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION
|
||
; 1973,1974,1975,1976,1977,1978,1979,1980,1982,1984,1986,1988.
|
||
;ALL RIGHTS RESERVED.
|
||
|
||
.CPYRT<1973,1988>
|
||
|
||
|
||
XP VCOMDV,1500 ;PUT VERSION NUMBER IN GLOB AND LOADER STORAGE MAP
|
||
SUBTTL TABLE OF CONTENTS
|
||
|
||
; TABLE OF CONTENTS FOR COMDEV
|
||
;
|
||
;
|
||
; SECTION PAGE
|
||
; 1. TABLE OF CONTENTS......................................... 2
|
||
; 2. CONVERT MONGEN SYMBOLS.................................... 5
|
||
; 3. DEFAULT SYMBOLS........................................... 8
|
||
; 4. TERMINAL DATA BASE........................................ 10
|
||
; 5. TERMINAL DATA BASE
|
||
; 5.1 TERMINAL CHARACTERISTICS DEFINITION............... 22
|
||
; 5.2 POINTERS FOR CURSOR SEQUENCES..................... 23
|
||
; 5.3 CURSOR CONTROL SEQUENCES.......................... 24
|
||
; 6. NETWORK SYMBOLS FOR NON-NETWORK SYSTEMS................... 25
|
||
; 7. HARDWARE DEVICES
|
||
; 7.1 CARD PUCHES....................................... 26
|
||
; 7.2 CARD READERS...................................... 27
|
||
; 7.3 DECTAPES.......................................... 29
|
||
; 7.4 DISKS............................................. 30
|
||
; 7.5 DEC TEN-ELEVEN INTERFACE.......................... 31
|
||
; 7.6 ETHERNET.......................................... 32
|
||
; 7.7 LINE PRINTERS..................................... 33
|
||
; 7.8 MAGTAPES.......................................... 34
|
||
; 7.9 PAPER TAPE PUNCHES................................ 35
|
||
; 7.10 PAPER TAPE READERS................................ 36
|
||
; 7.11 PLOTTERS.......................................... 37
|
||
; 7.12 SYSTEM COMMUNICATIONS ARCHITECTURE................ 38
|
||
; 8. SOFTWARE DEVICES/FUNCTIONS/PROTOCOLS
|
||
; 8.1 LOCAL AREA TERMINALS.............................. 39
|
||
; 8.2 PSEUDO TERMINALS.................................. 40
|
||
; 9. GLOBAL NETWORK DEFINITIONS................................ 41
|
||
; 10. ANF-10 NETWORK DATA BASE
|
||
; 10.1 FEATURE TEST CHECK................................ 43
|
||
; 10.2 PROTOTYPE DDB..................................... 44
|
||
; 10.3 PROTOTYPE NDB..................................... 45
|
||
; 10.4 NDT GENERATION.................................... 46
|
||
; 10.5 CARD READERS...................................... 47
|
||
; 10.6 DDCMP DEVICE...................................... 48
|
||
; 10.7 LINE PRINTERS..................................... 49
|
||
; 10.8 MCR............................................... 50
|
||
; 10.9 REMOTE DATA ENTRY TERMINALS....................... 51
|
||
; 10.10 PAPER TAPE PUNCH.................................. 52
|
||
; 10.11 PAPER TAPE READER................................. 53
|
||
; 10.12 PLOTTER........................................... 54
|
||
; 10.13 TASKS............................................. 55
|
||
; 10.14 VIRTUAL TERMINALS................................. 56
|
||
; 10.15 ETHERNET SUPPORT.................................. 57
|
||
; 10.16 MONGEN PARAMETERS................................. 58
|
||
; 10.17 OBJECT TABLES..................................... 60
|
||
; 10.18 MISCELLANEOUS STORAGE............................. 61
|
||
; 10.19 DUMMY GLOBALS..................................... 62
|
||
; 11. DECNET NETWORK DATA BASE
|
||
; 11.1 FEATURE TEST CHECK................................ 63
|
||
; 11.2 MONGEN PARAMETERS................................. 64
|
||
; 11.3 NOTES ON MONGEN PARAMETER SELECTION............... 66
|
||
; 11.4 INTERLOCKS........................................ 67
|
||
; 11.5 LINE INITIALIZATION............................... 68
|
||
; 11.6 THE "NOBODY" KONTROLLER........................... 69
|
||
; 11.7 DUMMY GLOBALS..................................... 70
|
||
; 12. DECTAPE DATA BASE FOR DTASER.............................. 71
|
||
; 13. INTERRUPT HEAD FOR DT'X................................... 72
|
||
; 14. DA28 DATA BASE (XTCSER)................................... 78
|
||
; 15. Database for RX20s on 2020s............................... 79
|
||
; 16. DEFINITIONS FOR DISPLAY AND LIGHT PEN..................... 80
|
||
; 17. ROUTINES COMMON TO PDP11 COMM FRONT-END'S ON DL10'S....... 83
|
||
SUBTTL CONVERT TO OLD-STYLE MONGEN SYMBOLS
|
||
|
||
IFNDEF MONORG,<EXTERN MONORG> ;MAY APPEAR IN SYSCNF.MAC
|
||
|
||
XP JOBN,M.JOB+1
|
||
|
||
IFE M.XTC,<XP M.XTL,0>
|
||
|
||
DEFINE TDMAC(X),<
|
||
XP DT'X'N,M.DT'X
|
||
M.DTXN==M.DTXN+M.DT'X
|
||
>
|
||
ZZ=="A"
|
||
M.DTXN==0
|
||
REPEAT M.TD10,<
|
||
TDMAC(\"ZZ)
|
||
ZZ==ZZ+1
|
||
>
|
||
|
||
IFN FTKS10,<
|
||
DEFINE RX2MAC(X),<
|
||
XP RX'X'N,M.RX'X
|
||
M.RXXN==M.RXXN+M.RX'X
|
||
>
|
||
ZZ=="A"
|
||
M.RXXN==0
|
||
REPEAT M.RX20,<
|
||
RX2MAC(\"ZZ)
|
||
ZZ==ZZ+1
|
||
>
|
||
>;End FTKS10
|
||
ND TTXTRA,0
|
||
XP TTD28N,M.XTL
|
||
ND M.TTDN,0
|
||
IFN M.KS10,<
|
||
XP KLILIN,M.TLTL+M.RTTY ;LINE NO. FOR KS10 KLINIK
|
||
>
|
||
XP CTYLIN,<M.TLTL+M.RTTY+M.XTL+M.CPU+IFN M.KS10,<1>>
|
||
XP FRCLIN,CTYLIN-M.CPU
|
||
DEFINE OPRL(LINE),<
|
||
IFIDN <LINE> <CTY>,<SIXBIT /CTY/>
|
||
IFDIF <LINE> <CTY>,<SIXBIT /TTY'LINE/>
|
||
>
|
||
|
||
DEFINE DSASOC,<
|
||
XLIST
|
||
|
||
DEFINE L(M,N,P),<
|
||
IFIDN <M> <CTY>,<
|
||
ZZBEG==CTYLIN
|
||
ZZDATA==CTYLIN
|
||
>
|
||
IFDIF <M> <CTY>,<
|
||
ZZBEG==M
|
||
ZZDATA==M
|
||
>
|
||
IFB <P>,<
|
||
ZZEND==ZZBEG
|
||
ZZLINE==N
|
||
>
|
||
IFNB <P>,<
|
||
ZZEND==N
|
||
ZZLINE==P
|
||
>
|
||
|
||
REPEAT ZZEND-ZZBEG+1,<
|
||
GENLIN (\ZZDATA,ZZLINE)
|
||
ZZDATA==ZZDATA+1
|
||
ZZLINE==ZZLINE+1
|
||
>> ;END REPEAT AND DEFINITION OF L
|
||
|
||
LIST
|
||
> ;END DEFINITION OF DSASOC
|
||
SUBTTL DEFAULT SYMBOLS
|
||
;THE FOLLOWING STANDARD SYMBOLS CAN BE SUPERSEDED BY A CUSTOMER HAVING
|
||
; PREVIOUSLY DEFINED THEM ON THE HDWGEN.MAC FILE USING THE MONGEN PROGRAM....
|
||
;**********************************************************************
|
||
;ADD NEW SYMBOLS AT END SO EASY TO UPDATE MONGEN APPENDIX *
|
||
;**********************************************************************
|
||
ND FLCDEF,1 ;FILLER CLASS CODE TO USE IF NOT SPECIFIED
|
||
;FOR A TTY LINE
|
||
ND TTYWID,^D80 ;DEFAULT SETTING OF TTY WIDTH IS 80.
|
||
ND TTYRMT,1 ;DEFAULT SETTING OF TTY REMOTE IS ON
|
||
ND TTYLCT,1 ;DEFAULT SETTING OF TTY LC IS OFF
|
||
ND CTYLCT,TTYLCT ;MATCH DEFAULT SETTING OF CTY LC WITH TTY LC
|
||
XP CTYLTB,<FLCDEF*TTVFLC+CTYLCT*TTVLCT+0*TTVRMT> ;CTY 'LINTAB' BITS
|
||
XP TTYLTB,<FLCDEF*TTVFLC+TTYLCT*TTVLCT+TTYRMT*TTVRMT> ;TTY 'LINTAB' BITS
|
||
|
||
;PARAMETERS THAT CONTROL THE AUTO-DISCONNECT FEATURE.
|
||
|
||
ND IDLSEC,^D90 ;ANY TERMINAL IDLE THIS LONG GETS DISCONNECTED
|
||
ND M.AIDL,IDLSEC ;ANF-10 DEFAULT IDLE TIME
|
||
ND M.NIDL,IDLSEC ;NRT/CTERM DEFAULT IDLE TIME
|
||
ND M.DIDL,IDLSEC ;DATASET MAXIMUM IDLE TIME
|
||
ND M.LIDL,IDLSEC ;LAT TERMINAL IDLE-MAX
|
||
SUBTTL TERMINAL DATA BASE
|
||
;THE FOLLOWING SECTION DESCRIBES THE TELETYPE LINES,GLOBALS, AND
|
||
;DATA STRUCTURES OF THE MONITOR.
|
||
|
||
;THE FOLLOWING ARE SUPPLIED BY MONGEN
|
||
|
||
|
||
;M.DC10 =NUMBER OF DC10'S
|
||
;M.DC68 =NUMBER OF DC68'S
|
||
;M.DC76 =NUMBER OF DC76'S
|
||
|
||
;M.D7KN =NUMBER OF LINES ON DC76 K
|
||
;M.68LK =NUMBER OF LINES ON DC68 K
|
||
;M.TTGK =NUMBER OF LINES ON DC10 K
|
||
;M.DSGK =NUMBER OF DC10E'S ON DC10 K
|
||
;M.TLTL =TOTAL LOCAL TTY LINES
|
||
|
||
ND M.LCST,0 ;DEFAULT TO NO CUSTOMER WORDS
|
||
IFG M.LCST,<
|
||
LDBCST==:LDBLEN##-M.LCST ;DEFINE START OF CUSTOMER AREA
|
||
>
|
||
|
||
;DEFINE SYMBOLS FOR CPUS OTHER THAN 0 UNTIL WE GET MONGEN WORKING
|
||
|
||
DEFINE CXDEF(SYM)<
|
||
IRP SYM,<
|
||
IFNDEF M0'SYM,<M0'SYM==M.'SYM>
|
||
IFNDEF M1'SYM,<M1'SYM==0>
|
||
IFNDEF M2'SYM,<M2'SYM==0>
|
||
IFNDEF M3'SYM,<M3'SYM==0>
|
||
IFNDEF M4'SYM,<M4'SYM==0>
|
||
IFNDEF M5'SYM,<M5'SYM==0>
|
||
>>
|
||
|
||
CXDEF(<TTG0,TTG1,68L0,68L1,D70N,D71N,D72N,D73N>)
|
||
CXDEF(<D74N,D75N,D76N,D77N,DZNL,TTDN>)
|
||
|
||
;THE FOLLOWING MAY BE SUPPLIED FOR LINTAB, WHERE THE LINE NUMBER
|
||
; IS CONCATENATED ON THE END (0 IN THIS CASE):
|
||
|
||
;DSD0 MEANS LINE 0 IS A DATASET LINE
|
||
|
||
|
||
;ALSO A MACRO IS DEFINED FOR DC10E-CONTROLLED DATASETS, WHICH
|
||
;DEFINES THE CORRESPONDENCE BETWEEN THE DC10E CONTROL LINE NUMBER
|
||
;(WHICH CONTROLS THE DATASET ENABLES, RINGING, ETC) AND THE
|
||
;CORRESPONDING DC10B LINE NUMBER (I.E., TTYN AS THE SYSTEM SEES
|
||
;IT). FOR EXAMPLE, FOR A SYSTEM WITH TWO DATASETS CONTROLLED
|
||
;BY DC10E LINES 27 AND 26, AND WITH DATA ON TTY17 AND TTY16 RESPECTIVELY,
|
||
; DEFINE DSASOC <
|
||
; GENLIN 27,17
|
||
; GENLIN 26,16
|
||
; >
|
||
|
||
|
||
;THE FOLLOWING ARE USED IN THE PREDEFINED LINE TABLES
|
||
|
||
DEFINE LINMAC (BITS) <
|
||
IRP BITS,<
|
||
LINMC1 (BITS,\LIN)
|
||
>
|
||
LIN==LIN+1
|
||
>
|
||
DEFINE LINMC1 (B,N) <
|
||
B'N==:1
|
||
>
|
||
;THE FOLLOWING GLOBALS ARE USED IN VARIOUS ROUTINES SUCH AS
|
||
;ONCE,SCNSER,DLSINT,BTHINT,ETC.
|
||
|
||
|
||
ND M.DTEN,0
|
||
XP HGHLIN,M.TLTL+M.XTL ;HIGHEST LINE ON SCANNERS, BEFORE TCONLN
|
||
XP TCONLN,CTYLIN ;LINE NUMBER FOR CTY (NOT ON SCANNER)
|
||
|
||
XP DL0MXD,<10*M.TTG0>-1 ;HIGHEST DC10 LINE WHICH IS REAL DATA
|
||
XP DL0MXL,<10*M.DSG0>+DL0MXD ;HIGHEST LINE ON DC10 (MAY BE DC10E)
|
||
XP DL0OFS,0 ;OFFSET FROM LINTAB TO HARDWARE
|
||
XP DL1MXD,<10*M.TTG1>-1 ;NUMBER OF DATA LINES ON DC10 #1
|
||
XP DL1MXL,<10*M.DSG1>+DL1MXD ;HIGHEST LINE ON DC10 #1
|
||
XP DL1OFS,<10*M.TTG0> ;ADD TO GO FROM HARDWARE TO LINTAB
|
||
XP CC0OFS,DL1OFS+<M.TTG1*10> ;OFFSET TO GET TO CCI0
|
||
XP CC1OFS,CC0OFS+M.68L0 ;OFFSET TO GET TO CCI1
|
||
XP D70OFS,CC1OFS+M.68L1 ;OFFSET FOR FIRST DC76
|
||
XP D71OFS,D70OFS+M.D70N ;OFFSET FOR SECOND DC76
|
||
XP D72OFS,D71OFS+M.D71N ;OFFSET FOR THIRD DC76
|
||
XP D73OFS,D72OFS+M.D72N ;OFFSET FOR FOURTH DC76
|
||
XP D74OFS,D73OFS+M.D73N ;OFFSET FOR FIFTH DC76
|
||
XP D75OFS,D74OFS+M.D74N ;OFFSET FOR SIXTH DC76
|
||
XP D76OFS,D75OFS+M.D75N ;OFFSET FOR SEVENTH DC76
|
||
XP D77OFS,D76OFS+M.D76N ;OFFSET FOR EIGHT DC76
|
||
XP DZOFS,D77OFS+M.D77N ;OFFSET FOR DZ11 TTY'S
|
||
XP TTDLAL,DZOFS+M.DZNL ;OFFSET FOR ALL TTD (RSX-20F) LINES
|
||
XP NETOFS,TTDLAL+M.TTDN ;OFFSET TO NETWORK TTY'S
|
||
XP D28OFS,NETOFS+M.RTTY ;OFFSET FOR DA28 LINES
|
||
XP DSCOF0,DL0MXD+1 ;NUMBER TO SUBTRACT FROM LINE # TO
|
||
; GET DCSTAB INDEX FOR DC10#0
|
||
XP DSCOF1,DL1MXD+1-<DL0MXL-DL0MXD> ;DITTO FOR DC10 #1
|
||
|
||
IFG <M.PTY-^D512>,<PRINTX ?512 OR MORE PTY'S EXCEEDS FIELD OF DDB>
|
||
XP TTPLEN,TCONLN+M.PTY+1 ;LENGTH OF TRANSLATOR TABLE
|
||
;INCLUDES ALL SCNANNERS, CTY, AND PTY'S
|
||
IFG <TTPLEN-^D512>,<PRINTX ?MORE THAN 512. TTYS+PTYS EXCEEDS FIELD OF DDB>
|
||
IFN M.DZNL,<
|
||
|
||
EXTERN DZINT ;LOAD SERVICE ROUTINE
|
||
|
||
;TABLE OF OUTPUT CHARACTERS FOR EACH DZ11 LINE
|
||
DZCHTB::BLOCK M.DZNL
|
||
|
||
;TABLE OF DATASET STATUS FOR EACH DZ11
|
||
DZDSTB::BLOCK <<M.DZNL+7>/10>
|
||
|
||
;TABLE OF LINE STATUS FOR AUTOBAUD FRONT END
|
||
|
||
DZTTQN::EXP 0
|
||
DZMSTS::BLOCK M.DZNL
|
||
|
||
DEFINE X (N) <
|
||
DZ'N'VA::EXP 0 ;JSR HERE ON INTERRUPT
|
||
EXP 0,IC.UOU,.+1
|
||
|
||
EXCH T1,DZ'N'VA ;GET PC WE CAME FROM
|
||
MOVEM T1,SCNCHL## ;SAVE IT FOR SCNSAV
|
||
MOVE T1,DZ'N'VA+1 ;SECOND WORD
|
||
MOVEM T1,SCNCHL##+1
|
||
|
||
MOVE T1,DZ'N'VA ;RESTORE T1
|
||
JSR SCNSAV## ;SAVE REGISTERS
|
||
MOVE P1,[DZ11BA+<N*10>]
|
||
JRST DZVECA##
|
||
DZ'N'VB::EXP 0 ;JSR HERE ON INTERRUPT
|
||
EXP 0,IC.UOU,.+1
|
||
|
||
EXCH T1,DZ'N'VB ;GET PC WE CAME FROM
|
||
MOVEM T1,SCNCHL## ;SAVE IT FOR SCNSAV
|
||
MOVE T1,DZ'N'VB+1 ;SECOND WORD
|
||
MOVEM T1,SCNCHL##+1
|
||
|
||
MOVE T1,DZ'N'VB ;RESTORE REGISTER
|
||
JSR SCNSAV## ;SAVE REGISTERS
|
||
MOVE P1,[DZ11BA+<N*10>]
|
||
JRST DZVECB##
|
||
>
|
||
ZZ=0
|
||
REPEAT <<M.DZNL+7>/10>,<
|
||
X \ZZ
|
||
ZZ=ZZ+1
|
||
>
|
||
>;IFN M.DZNL
|
||
;DEFINE ALL DL10 SYMBOLS
|
||
|
||
DLX.CK(0) ;MACRO DEFINED IN S.MAC
|
||
INTERN DL10XI ;FOR UUOCON
|
||
|
||
|
||
ND M.DN6S,0
|
||
;TELETYPE LINE CHARACTERISTICS (FORMER LH OF LINTAB)
|
||
;USED BY SCNSER
|
||
|
||
XP TTVRMT,1 ;REMOTE LINE
|
||
XP TTVHLF,2 ;HALF DUPLEX LINE (DC10C OR TWX)
|
||
XP TTVINI,4 ;RUN INITIAL CUSP
|
||
XP TTVDSD,10 ;DATASET DATA LINE
|
||
XP TTVDIS,20 ;2741 ON DC10 (OBSOLETE)
|
||
XP TTVNFC,40 ;NO FREE CRLF AT 72 COLUMNS
|
||
XP TTVFRM,100 ;FORM FEED IN HARDWARE
|
||
XP TTVLCP,200 ;LOCAL COPY, BUT NOT HALF DUPLEX
|
||
XP TTVTAB,400 ;TAB HARDWARE (8 COLUMNS PER)
|
||
XP TTVLCT,1000 ;LOWER CASE TRANSLATE TO UPPER
|
||
XP TTVSLV,2000 ;SLAVE TTY
|
||
XP TTVFLC,4000 ;TWO BITS OF FILLER CLASS CODE
|
||
|
||
DEFINE CALLM(NAME,LINE),<
|
||
NDL NAME'LINE,1
|
||
>
|
||
|
||
DEFINE TTYMAC(TYPE),<
|
||
XLIST
|
||
|
||
DEFINE L(A,B),<
|
||
IFB <B>,<IFE <SIXBIT/A/>-<SIXBIT/CTY/>,<
|
||
ZZBEG==FRCLIN+1
|
||
ZZEND==TCONLN>
|
||
IFN <SIXBIT/A/>-<SIXBIT/CTY/>,<ZZBEG==<ZZEND==A>>
|
||
>
|
||
IFNB <B>,<
|
||
ZZBEG==A
|
||
ZZEND==B
|
||
>
|
||
ZZLINE==ZZBEG
|
||
IFGE ZZEND-FRCLIN,<ZZEND==FRCLIN-1> ;DON'T NEED TO INCLUDE PTYS
|
||
IFG ZZEND-ZZBEG+1,<
|
||
REPEAT ZZEND-ZZBEG+1,<
|
||
CALLM (TYPE,\ZZLINE)
|
||
ZZLINE==ZZLINE+1
|
||
>>> ;END IFG, REPEAT AND DEFINITION OF L
|
||
MAC'TYPE
|
||
LIST
|
||
> ;END DEFINITION OF TTYMAC
|
||
.XCREF
|
||
TTYMAC DSD
|
||
.CREF
|
||
;NOW DEFINE THE LINE TABLE FOR STORING LDB ADDRESSES.
|
||
|
||
$HIGH
|
||
LINTAB::
|
||
REPEAT TTPLEN,<
|
||
EXP 0
|
||
XLIST>
|
||
LIST
|
||
$LOW
|
||
|
||
;NOW THE DATASET CONTROLLER INFO FOR ANY DC10E'S
|
||
|
||
|
||
;CONSTRUCT THE DATASET CONTROLLER TABLE
|
||
|
||
DEFINE GENLIN(CON,DATA)<
|
||
|
||
ZZ==0
|
||
IFLE <CON-DL0MXD>,<ZZ==1>
|
||
IFG <CON-DL0MXL>,<ZZ==1>
|
||
IFG <DATA-DL0MXD>,<ZZ==1> ;CHECK RANGE OF ARGUMENT
|
||
|
||
IFN ZZ,<PRINTX ? SPECIFICATION ERROR - DSCTAB>
|
||
IFE ZZ,<
|
||
DSA'CON==1
|
||
DSB'CON==DATA
|
||
>
|
||
>
|
||
|
||
IFG M.DSG0,<
|
||
DSASOC
|
||
MACCR0 ;INVOKE THE MACRO
|
||
>
|
||
DSCTAB::.INDEX==DL0MXD+1
|
||
DEFINE GENLIN(N)<
|
||
ZZ==0
|
||
IFDEF DSA'N,<IFN DSA'N,<ZZ==DL0OFS+DSB'N>>
|
||
EXP ZZ ;DATA SET N
|
||
.INDEX==.INDEX+1
|
||
>
|
||
REPEAT <DL0MXL-DL0MXD>,<GENLIN(\.INDEX)>
|
||
|
||
IFDEF MACCR1,< ;ONLY IF 2 DC10'S
|
||
|
||
DEFINE GENLIN(CON,DATA)<
|
||
|
||
ZZ==0
|
||
IFLE <CON-DL1MXD>,<ZZ==1>
|
||
IFG <CON-DL1MXL>,<ZZ==1>
|
||
IFG <DATA-DL1MXD>,<ZZ==1> ;CHECK RANGE OF ARGUMENT
|
||
|
||
IFN ZZ,<PRINTX ? SPECIFICATION ERROR - DSCTAB>
|
||
IFE ZZ,<
|
||
DSA'CON==1
|
||
DSB'CON==DATA
|
||
>
|
||
>
|
||
|
||
DSASOC
|
||
MACCR1 ;INVOKE THE MACRO
|
||
.INDEX==DL1MXD+1
|
||
DEFINE GENLIN(N)<
|
||
ZZ==0
|
||
IFDEF DSA'N,<IFN DSA'N,<ZZ==DL1OFS+DSB'N>>
|
||
EXP ZZ ;DATA SET N
|
||
.INDEX==.INDEX+1
|
||
>
|
||
XALL
|
||
DSCTB1:REPEAT <DL1MXL-DL1MXD>,<GENLIN(\.INDEX)>
|
||
> ;END IFDEF MACCR1
|
||
|
||
ZZ==CC0OFS
|
||
XP DSCNDX,<.-DSCTAB>
|
||
XP CC0DSO,CC0OFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP CC1DSO,CC1OFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP D70DSO,D70OFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP D71DSO,D71OFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP D72DSO,D72OFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP D73DSO,D73OFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP D74DSO,D74OFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP D75DSO,D75OFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP D76DSO,D76OFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP D77DSO,D77OFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP DZDSO,DZOFS-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
XP TTDDAL,TTDLAL-<<M.TTG0+M.TTG1>*10>+DSCNDX
|
||
REPEAT M.68L0+M.68L1+M.D70N+M.D71N+M.D72N+M.D73N+M.D74N+M.D75N+M.D76N+M.D77N+M.DZNL+M.TTDN,< EXP ZZ
|
||
ZZ==ZZ+1
|
||
|
||
>
|
||
MDSLN==:DSCTAB-.
|
||
|
||
;DEFINE SOME CHUNK SIZE PARAMETERS AND MASKS
|
||
|
||
ND TTCHKS,8 ;DEFAULT SIZE IN WORDS OF A TTY CHUNK
|
||
IFL TTCHKS-4,<TTCHKS==4> ;MUST BE AT LEAST 4
|
||
XP TTCHKS,<1B<^L<TTCHKS>>> ;WORDS IN A CHUNK (MUST BE POWER OF TWO)
|
||
XP CK.BDY,TTCHKS-1 ;MASK FOR END OF CHUNK
|
||
XP CK.BTH,-CK.BDY ;OFFSET FOR START OF CHUNK
|
||
XP CK.CPC,CK.BDY*CK.CPW ;CHARACTERS PER CHUNK
|
||
|
||
;THE FOLLOWING SLIDING SCALE DEFINES THE LENGTH OF THE TTY FREE LIST
|
||
|
||
IFNDEF TTCHKN,<
|
||
IFNDEF TTCHKK,<
|
||
XP TTCHKK,<<TTYWID-1>/CK.CPC>+5 ;ENSURE AT LEAST TTYWID CHARACTERS PER LDB
|
||
IFL TTPLEN-40,<XP TTCHKK,TTCHKK+1> ;MORE IF FEW LINES
|
||
IFL TTPLEN-20,<XP TTCHKK,TTCHKK+1> ;DITTO
|
||
IFL TTPLEN-10,<XP TTCHKK,TTCHKK+1> ;AND DITTO
|
||
> ;END OF IFNDEF TTCHKK
|
||
|
||
XP TTCHKN,TTCHKK*TTPLEN ;AT LAST, USE THIS CONSTANT TO GET TTCHKN
|
||
|
||
> ;END OF IFNDEF TTCHKN
|
||
|
||
TTCHKN==:TTCHKN ;MAKE SURE THIS SHOWS IN THE LISTING
|
||
TTCHKK==:TTCHKN/TTPLEN ;THIS ONE, TOO
|
||
|
||
|
||
;SCNSER'S INPUT WARNING/LIMIT LEVELS
|
||
|
||
ND TTYMIC,^D60 ;MAXIMUM INPUT CHARS/MESSAGE
|
||
;*** SHOULD MATCH DN8X DNCNFG.P11 ***
|
||
|
||
ND TTIBRK,^D132 ;DEFAULT ASCII/IMAGE LINE "BREAK" LEVEL
|
||
ND TTIWRN,^D200 ;DEFAULT ASCII/IMAGE XOFF WARNING LEVEL
|
||
ND TTIMAX,<TTIWRN+<5*TTYMIC>> ;DEFAULT ASCII/IMAGE MAXIMUM LEVEL
|
||
ND TTPBRK,^D132 ;DEFAULT PIM MODE LINE "BREAK" LEVEL
|
||
ND TTPWRN,^D500 ;DEFAULT PIM MODE XOFF WARNING LEVEL
|
||
ND TTPMAX,<TTPWRN+<5*TTYMIC>> ;DEFAULT PIM MODE MAXIMUM LEVEL
|
||
|
||
|
||
IFG M.XTC,< ;GENERATE TABLE FOR DA28 POOL
|
||
TTLTAB::BLOCK TTD28N ;KON,,UNIT
|
||
XP MTTD28,-TTD28N ;MINUS # OF DA28 LINES
|
||
>
|
||
|
||
;DEFINE A BIT TABLE SHOWING WHICH LINES WERE MONGEN'ED AS DATASETS
|
||
DSDTAB::
|
||
SALL
|
||
DEFINE GENLIN(N),<
|
||
.XCREF
|
||
IFDEF DSD'N,<IFN DSD'N,<DSDW==DSDW!ZZZ>>
|
||
.CREF
|
||
> ;END DEFINE GENLIN
|
||
ZZ==0 ;STARTING LINE NUMBER
|
||
REPEAT <M.TLTL+^D31>/^D32,<
|
||
ZZZ==1B0
|
||
DSDW==0
|
||
REPEAT ^D32,<
|
||
GENLIN(\ZZ)
|
||
ZZZ==ZZZ_-1
|
||
ZZ==ZZ+1
|
||
>
|
||
EXP DSDW
|
||
> ;END OF BUILDING DSDTAB
|
||
;SCNSER QUEUED PROTOCOL HEADERS
|
||
DEFINE QHED(N)<
|
||
IFN M'N'TTG0,<DL0TQ'N::EXP 0,0>
|
||
IFN M'N'TTG1,<DL1TQ'N::EXP 0,0>
|
||
IFN M'N'68L0,<CC0TQ'N::EXP 0,0>
|
||
IFN M'N'68L1,<CC1TQ'N::EXP 0,0>
|
||
IFN M'N'D70N,<D70TQ'N::EXP 0,0>
|
||
IFN M'N'D71N,<D71TQ'N::EXP 0,0>
|
||
IFN M'N'D72N,<D72TQ'N::EXP 0,0>
|
||
IFN M'N'D73N,<D73TQ'N::EXP 0,0>
|
||
IFN M'N'D74N,<D74TQ'N::EXP 0,0>
|
||
IFN M'N'D75N,<D75TQ'N::EXP 0,0>
|
||
IFN M'N'D76N,<D76TQ'N::EXP 0,0>
|
||
IFN M'N'D77N,<D77TQ'N::EXP 0,0>
|
||
IFN M'N'DZNL,<DZTQ'N::EXP 0,0>
|
||
>
|
||
IFN M.XTL,<XTTQUE::EXP 0,0>
|
||
|
||
ZZ=0
|
||
REPEAT M.CPU,<
|
||
QHED(\ZZ)
|
||
ZZ==ZZ+1
|
||
>
|
||
|
||
IFN M.RMCR,<MCRRTQ::EXP 0,0> ;NETWORK TERMINALS CAN RUN ON ANY CPU
|
||
; HENCE THEY HAVE A QUEUE OF THEIR OWN.
|
||
IFN M.RVTM,<VTMQUE::EXP 0,0> ;SPECIAL QUEUE FOR NETWORK VIRTUAL TERMINALS
|
||
NULQUE:: ;RANDOM QUEUE FOR UNUSED ALLOCATABLE LINES.
|
||
IFN M.RTTY,<EXP 0,0>
|
||
FRCQUE::EXP 0,0 ;FORCE COMMAND LDB FAKE OUTPUT HEADER
|
||
;HERE ONCE A TICK TO START TERMINAL OUTPUT
|
||
|
||
DEFINE TTSTRT(FT,QH,RT),<
|
||
IFN FT,<
|
||
IFNB <QH>,<
|
||
MOVEI T1,QH
|
||
>
|
||
PUSHJ P,RT##
|
||
>>
|
||
DEFINE STRG(N),<
|
||
|
||
SC'N'TIC::SE1ENT
|
||
TTSTRT(M'N'TTG0,DL0TQ'N,DL0STO)
|
||
TTSTRT(M'N'TTG1,DL1TQ'N,DL1STO)
|
||
TTSTRT(M'N'68L0,CC0TQ'N,CC0STO)
|
||
TTSTRT(M'N'68L1,CC1TQ'N,CC1STO)
|
||
TTSTRT(M'N'D70N,D70TQ'N,D76STO)
|
||
TTSTRT(M'N'D71N,D71TQ'N,D76STO)
|
||
TTSTRT(M'N'D72N,D72TQ'N,D76STO)
|
||
TTSTRT(M'N'D73N,D73TQ'N,D76STO)
|
||
TTSTRT(M'N'D74N,D74TQ'N,D76STO)
|
||
TTSTRT(M'N'D75N,D75TQ'N,D76STO)
|
||
TTSTRT(M'N'D76N,D76TQ'N,D76STO)
|
||
TTSTRT(M'N'D77N,D77TQ'N,D76STO)
|
||
TTSTRT(M'N'DZNL,DZTQ'N,DZSTO)
|
||
TTSTRT(FTKS10,,CTYSTO)
|
||
TTSTRT(FTKL10,,TTDSTO)
|
||
TTSTRT(M.RMCR,,NETSTO)
|
||
TTSTRT(M.DNVT,,NRTSTO)
|
||
TTSTRT(M.LAT,,LATSTO)
|
||
POPJ P,
|
||
>
|
||
$HIGH
|
||
ZZ==0
|
||
REPEAT M.CPU,<
|
||
STRG(\ZZ)
|
||
ZZ==ZZ+1
|
||
>
|
||
;HERE ONCE A SECOND FROM SCNSER
|
||
;ONLY ENTRIES HERE ARE ONES WHOSE ISR DISPATCH DOES SOMETHING
|
||
|
||
DEFINE TTSECN(FT,DSP),<
|
||
IFN FT,<PUSHJ P,DSP##+ISRCHK>
|
||
>
|
||
|
||
DEFINE STRG(N),<
|
||
SC'N'SEC::SE1ENT
|
||
TTSECN(M'N'TTG0,DL0DSP)
|
||
TTSECN(M'N'TTG1,DL1DSP)
|
||
TTSECN(M'N'68L0,CC0DSP)
|
||
TTSECN(M'N'68L1,CC1DSP)
|
||
TTSECN(M'N'DZNL,DZDSP)
|
||
TTSECN(FTKL10,CTYDSP)
|
||
TTSECN(M.DNVT,NRTDSP)
|
||
TTSECN(M.LAT,LATDSP)
|
||
POPJ P,
|
||
>
|
||
ZZ==0
|
||
REPEAT M.CPU,<
|
||
STRG(\ZZ)
|
||
ZZ==ZZ+1
|
||
>
|
||
;THE TTY COMMAND MAP HAS 1 BIT PER LINE ARRANGED 32 BITS PER WORD
|
||
;THUS LINE 0 IS BIT 0 OF WORD 0, LINE 37(8) IS BIT 31 OF WORD 0,
|
||
; LINE 40(8) IS BIT 0 OF WORD 1, AND SO ON.
|
||
$LOW
|
||
TTMAPN==:<TTPLEN/^D32>+1
|
||
CMDMAP::BLOCK TTMAPN ;TTY COMMAND BIT MAP
|
||
$HIGH
|
||
|
||
REPEAT 0,< ;FOR HISTORICAL REASONS
|
||
;TTYCMD IS CALLED ON EVERY CLOCK TICK TO LOOK FOR A COMMAND. IF THERE
|
||
; IS A COMMAND WAITING IT CALLS COMCON TO PROCESS IT. COMCON IN TURN
|
||
; CALLS TTFCOM WHICH SCANS CMDMAP TO FIND THE COMMAND. THE ENTIRE
|
||
; PROCESS IS VERY FAST AND IS NOT ERROR PRONE.
|
||
TTYCMD:: ;HERE TO TEST FOR A COMMAND
|
||
ZZ==0
|
||
REPEAT TTMAPN,<
|
||
SKIPE CMDMAP+ZZ ;ANY COMMANDS IN THIS GROUP?
|
||
PJRST COMMAND## ;YES--CALL COMCON
|
||
ZZ==ZZ+1
|
||
XLIST
|
||
>;END REPEAT
|
||
LIST
|
||
POPJ P,0
|
||
> ;END REPEAT 0
|
||
SUBTTL TERMINAL DATA BASE -- TERMINAL CHARACTERISTICS DEFINITION
|
||
|
||
DEFINE CUSTRM,< ;CUSTOMER TERMINAL TYPES
|
||
SPCCLS ;MONGEN CUSTOMER TERMINAL TYPES
|
||
SPCCLX ;MONGEN CUSTOMER TERMINAL EXTENSIONS
|
||
TERMCR (LA34,LA34,<OVR>,,132,0,0,1,0,0,0,<TAB,LC,XON>)
|
||
>
|
||
|
||
DEFINE DECTRM,< ;DEC TERMINAL TYPES
|
||
TERMCR (.FORCE,.FORCE,<8BT>,,255,0,0,0,0,0,0,<TAB,FF,LC>) ;;MUST BE FIRST!!**
|
||
TERMCR (LT33,LT33,,,72,0,1,0,0,0,0,<ALT,CRLF,XON>)
|
||
TERMCR (TTY33,LT33)
|
||
TERMCR (TTY,LT33)
|
||
TERMCR (LT35,LT35,,,72,0,1,0,0,0,0,<FF,TAB,ALT,CRLF,XON>)
|
||
TERMCR (TTY35,LT35)
|
||
TERMCR (VT05,VT05,<DIS>,,72,20,2,0,0,VT06EP,VTXXBP,<TAB,DIS,CRLF,XON>)
|
||
TERMCR (VT06,VT06,<DIS>,,72,25,1,0,0,VT06EP,VT06BP,<DIS,CRLF,XON>)
|
||
TERMCR (VT50,VT50,<DIS,V52>,,80,12,0,0,0,VTXXEP,VTXXBP,<TAB,XON,CRLF>)
|
||
TERMCR (VT52,VT52,<DIS,V52>,,80,24,0,0,0,VTXXEP,VTXXBP,<TAB,LC,XON,CRLF>)
|
||
TERMCR (VT61,VT52,<LID,CID>)
|
||
TERMCR (DAS21,VT52)
|
||
TERMCR (LA30,LA30,<OVR>,,72,0,1,0,0,0,0,<CRLF,XON>)
|
||
TERMCR (LA36,LA36,<OVR>,,132,0,0,0,0,0,0,<XON,LC>)
|
||
TERMCR (LA38,LA38,<OVR>,,132,0,0,1,1,0,0,<XON,LC,TAB>)
|
||
TERMCR (LA120,LA120,<OVR>,,132,0,0,1,1,0,0,<XON,LC,TAB,FF>)
|
||
TERMCR (LA180,LA180,<OVR,NKB>,,132,0,0,1,1,0,0,<XON,TAB,FF>)
|
||
TERMCR (VT100,VT100,<SRM,DIS,AVO,VFW,V52>,,80,24,0,1,1,V100EP,VTXXBP,<TAB,LC,XON,CRLF>)
|
||
TERMCR (VT101,VT100,,<AVO>)
|
||
TERMCR (VT102,VT100,<LID,CID,PPO>)
|
||
TERMCR (VT131,VT100,<BMT>)
|
||
TERMCR (VT125,VT100,<GPO,SXL>)
|
||
TERMCR (VT180,VT100)
|
||
TERMCR (VT185,VT100,<GPO,SXL>)
|
||
TERMCR (VT103,VT100)
|
||
TERMCR (VK100,VT100,<GPO>,<SRM>)
|
||
TERMCR (GIGI,VT100,<GPO>,<SRM>)
|
||
TERMCR (VT200,VT200,<DIS,SEM,8BA,LID,CID,SRM,AVO,PPO,VFW,V52,NRC>,,80,24,0,2,2,V100EP,VTXXBP,<TAB,LC,XON,CRLF>)
|
||
TERMCR (VT220,VT200)
|
||
TERMCR (VT240,VT200,<GPO,SXL,UDK,RCS,TEK>)
|
||
TERMCR (VT241,VT200,<GPO,SXL,UDK,RCS,TEK,CLR>)
|
||
TERMCR (LN01S,LN01S,<NKB>,,80,66,0,1,1,0,0,<FF,TAB,LC,XON>)
|
||
TERMCR (LN03,LN03,<NKB,8BA>,,80,66,0,2,1,0,0,<FF,TAB,LC,XON>)
|
||
TERMCR (VT300,VT300,<DIS,8BA,LID,CID,SRM,AVO,PPO,VFW,VFL,V52,BMT,BTA,ESL,GAT,HSR,NRC,ISO,SEM,SRM,SSU,SXL,GPO,TCS,TSI,UDK,RCS,UWN,TEK>,,80,24,0,3,3,V100EP,VTXXBP,<TAB,LC,XON,CRLF>)
|
||
TERMCR (VT320,VT300,,<SXL,GPO,TEK,BMT,BTA,GAT>)
|
||
TERMCR (VT330,VT300)
|
||
TERMCR (VT340,VT300,<CLR>)
|
||
>
|
||
|
||
DEFINE TERMCR(NAME,CLASS,ATRON,ATROFF,WIDTH,LENGTH,FILL,ANSLVL,DECLVL,BPERAS,BPRUBO,CHARS),<
|
||
IFIDN<NAME><CLASS>,<.'CLASS:!EXP SIXBIT |CLASS|>
|
||
>
|
||
|
||
;EXPAND TERMINAL CLASS NAMES
|
||
|
||
CCNTAB::CUSTRM
|
||
TCNTAB::DECTRM
|
||
TCNLIM==:.-1 ;FOR GETTAB
|
||
|
||
DEFINE TERMCR(NAME,CLASS,ATRON,ATROFF,WIDTH,LENGTH,FILL,ANSLVL,DECLVL,BPERAS,BPRUBO,CHARS),<
|
||
IFIDN<NAME><CLASS>,<
|
||
ZZ==0
|
||
IRP ATRON,<ZZ==ZZ!TA.'ATRON>
|
||
IRP ATROFF,<ZZ==ZZ&<^-<TA.'ATROFF>>>
|
||
EXP <%'CLASS==ZZ>
|
||
>>
|
||
|
||
;EXPAND TERMINAL CLASS ATTRIBUTES
|
||
|
||
CCATAB::CUSTRM
|
||
TCATAB::DECTRM
|
||
|
||
DEFINE TERMCR(NAME,CLASS,ATRON,ATROFF,WIDTH,LENGTH,FILL,ANSLVL,DECLVL,BPERAS,BPRUBO,CHARS),<
|
||
IFIDN<NAME><CLASS>,<
|
||
ZZ==0
|
||
IRP CHARS,<
|
||
IFE <SIXBIT/FF/>-<SIXBIT/CHARS/>,<ZZ==ZZ!<1_9>>
|
||
IFE <SIXBIT/TAB/>-<SIXBIT/CHARS/>,<ZZ==ZZ!<1_8>>
|
||
IFE <SIXBIT/LC/>-<SIXBIT/CHARS/>,<ZZ==ZZ!<1_7>>
|
||
IFE <SIXBIT/XON/>-<SIXBIT/CHARS/>,<ZZ==ZZ!<1_6>>
|
||
IFE <SIXBIT/ALT/>-<SIXBIT/CHARS/>,<ZZ==ZZ!<1_5>>
|
||
IFE <SIXBIT/CRLF/>-<SIXBIT/CHARS/>,<ZZ==ZZ!<1_4>>
|
||
>
|
||
ZZ==ZZ^!<<1_7>!<1_5>!<1_4>> ;;LCT, ALT, AND NFC ARE BACKWARDS
|
||
BYTE (8)^D'WIDTH,^D'LENGTH(2)FILL(4)^D'ANSLVL,^D'DECLVL(10)ZZ
|
||
>>
|
||
|
||
;EXPAND TERMINAL CLASS CHARACTERISTICS
|
||
|
||
CCCTAB::CUSTRM
|
||
TCCTAB::DECTRM
|
||
|
||
DEFINE TERMCR(NAME,CLASS,ATRON,ATROFF,WIDTH,LENGTH,FILL,ANSLVL,DECLVL,BPERAS,BPRUBO,CHARS),<
|
||
IFIDN<NAME><CLASS>,<
|
||
IF2,< .IF BPRUBO,NEEDED,<EXTERN BPRUBO>
|
||
.IF BPERAS,NEEDED,<EXTERN BPERAS>
|
||
>
|
||
XWD BPRUBO,BPERAS
|
||
>>
|
||
|
||
;EXPAND TERMINAL CLASS BYTE POINTER TABLES
|
||
|
||
CCBTAB::CUSTRM
|
||
TCBTAB::DECTRM
|
||
|
||
DEFINE TERMCR(NAME,CLASS,ATRON,ATROFF,WIDTH,LENGTH,FILL,ANSLVL,DECLVL,BPERAS,BPRUBO,CHARS),<
|
||
EXP SIXBIT |NAME|
|
||
>
|
||
|
||
;EXPAND TERMINAL TYPES (FOR COMCON)
|
||
|
||
CTTWDT::CUSTRM
|
||
TTTWDT::DECTRM
|
||
TTTWDN==:.-CTTWDT
|
||
|
||
DEFINE TERMCR(NAME,CLASS,ATRON,ATROFF,WIDTH,LENGTH,FILL,ANSLVL,DECLVL,BPERAS,BPRUBO,CHARS),<
|
||
ZZ==%'CLASS
|
||
IRP ATRON,<ZZ==ZZ!TA.'ATRON>
|
||
IRP ATROFF,<ZZ==ZZ&<^-<TA.'ATROFF>>>
|
||
ZZ==%'CLASS^!ZZ
|
||
IFN ZZ,<XWD .'CLASS-CCNTAB,[ZZ]>
|
||
IFE ZZ,<XWD .'CLASS-CCNTAB,0>
|
||
>
|
||
|
||
;EXPAND TERMINAL TYPE ATTRIBUTES
|
||
|
||
CTATAB::CUSTRM
|
||
TTATAB::DECTRM
|
||
|
||
PURGE ZZ
|
||
SUBTTL TERMINAL DATA BASE -- POINTERS FOR CURSOR SEQUENCES
|
||
|
||
VT06BP: POINT 9,VT06TB
|
||
POINT 9,VT06TB+2,8
|
||
POINT 9,VT06TB+4,17
|
||
POINT 9,VT06TB+6,26
|
||
POINT 9,VT06TB+10,35
|
||
POINT 9,VT06TB+13,8
|
||
POINT 9,VT06TB+15,17
|
||
POINT 9,VT06TB+17,26
|
||
|
||
VT06EP: POINT 9,VT06EL
|
||
POINT 9,VT06E1
|
||
POINT 9,VT06E2
|
||
POINT 9,VT06E3
|
||
|
||
VTXXBP: POINT 9,VTXXTB
|
||
POINT 9,VTXXTB,26
|
||
POINT 9,VTXXTB+1,17
|
||
POINT 9,VTXXTB+2,8
|
||
POINT 9,VTXXTB+2,35
|
||
POINT 9,VTXXTB+3,26
|
||
POINT 9,VTXXTB+4,17
|
||
POINT 9,VTXXTB+5,8
|
||
|
||
VTXXEP: POINT 9,VTXXEL
|
||
POINT 9,VTXXE1
|
||
POINT 9,VTXXE2
|
||
POINT 9,VTXXE2,17
|
||
|
||
V100EP: POINT 9,VTXXEL
|
||
POINT 9,V100E1
|
||
POINT 9,V100E2
|
||
POINT 9,V100E2,17
|
||
SUBTTL TERMINAL DATA BASE -- CURSOR CONTROL SEQUENCES
|
||
|
||
VT06TB: BYTE (9) 177,177,177,010,040,177,177,177
|
||
BYTE (9) 010,177,177,177,010,040,177,177
|
||
BYTE (9) 177,010,177,177,177,010,040,177
|
||
BYTE (9) 177,177,010,177,177,177,010,040
|
||
BYTE (9) 177,177,177,010,177,177,177,010
|
||
BYTE (9) 040,177,177,177,010,177,177,177
|
||
BYTE (9) 010,040,177,177,177,010,177,177
|
||
BYTE (9) 177,010,040,177,177,177,010,177
|
||
BYTE (9) 177,177,010,040,177,177,177,010
|
||
BYTE (9) 0
|
||
|
||
VT06EL: BYTE (9) 015,177,177,177,0
|
||
VT06E1: BYTE (9) 30,177,177,177,0
|
||
VT06E2: BYTE (9) 30,177,177,177
|
||
VT06E3: BYTE (9) 36,177,177,177,0
|
||
|
||
VTXXTB: BYTE (9) 010,040,010,010,040,010,010,040
|
||
BYTE (9) 010,010,040,010,010,040,010,010
|
||
BYTE (9) 040,010,010,040,010,010,040,010
|
||
BYTE (9) 0
|
||
|
||
VTXXEL: BYTE (9) 015,0
|
||
VTXXE1: BYTE (9) 33,103,0
|
||
VTXXE2: BYTE (9) 33,103,33,113,0
|
||
|
||
V100E1: BYTE (9) 233,103,0
|
||
V100E2: BYTE (9) 233,103,233,113,0
|
||
|
||
$LOW
|
||
SUBTTL NETWORK SYMBOLS FOR NON-NETWORK SYSTEMS
|
||
|
||
IFE M.DN6S,<
|
||
IFN M.KL10,<
|
||
D6SDDS==:EATDSP##
|
||
D6SUSR==:DFKUSR##
|
||
>
|
||
D60UP==:CPOPJ##
|
||
D60DWN==:CPOPJ##
|
||
>
|
||
IFN M.KL10,<
|
||
IFE M.DN6S,<
|
||
D6SED==:ECOD2##
|
||
D6SQ11==:ECOD2##
|
||
DWND6S==:STOTAC##
|
||
D6STMO==:CPOPJ##
|
||
>
|
||
IFE M.DN6D,<
|
||
D6DED==:ECOD2##
|
||
D6DQ11==:ECOD2##
|
||
>
|
||
>;END IFN M.KL10
|
||
|
||
IFN M.KL10,<
|
||
IFE <M.ANF*M.DN8S>,<
|
||
NCLDSP==:EATDSP##
|
||
D8SUSR==:DFKUSR##
|
||
> ;END IFE <M.ANF*M.DN8S>
|
||
> ;END IFN M.KL10
|
||
|
||
ND M.KDUP,0
|
||
ND M.DMRN,0
|
||
ND M.DN6K,0
|
||
ND M.DN6R,0
|
||
SUBTTL HARDWARE DEVICES -- CARD PUCHES
|
||
|
||
|
||
ND CDPSIZ,41 ;DEFAULT BUFFER SIZE
|
||
|
||
CDPMDT::MDCP10 ;CARD PUNCH PARAMETERS
|
||
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.CDP,<
|
||
> ;END IFE M.CDP
|
||
SUBTTL HARDWARE DEVICES -- CARD READERS
|
||
|
||
|
||
IFN M.CDR!M.RCDR,<
|
||
|
||
ND DCRMAX,1 ;MAXIMUM NUMBER OF CARD READERS PER DTE
|
||
|
||
PCDRAS==:700 ;ASCIZ BYTE POINTER
|
||
PCDRBI==:1400 ;BINARY AND IMAGE BYTE POINTER
|
||
PCDRSI==:4400 ;SUPER IMAGE BYTE POINTER
|
||
|
||
CR1MDT::MDCR10 ;I/O BUS CARD READER PARAMETERS
|
||
DCRMDT::MDDCR ;FRONT-END CARD READER PARAMETERS
|
||
CR2MDT::MDCR20 ;UNIBUS CARD READER PARAMETERS
|
||
|
||
> ;END IFN M.CDR!M.RCDR
|
||
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.CR10,<
|
||
> ;END IFE M.CR10
|
||
|
||
IFE M.DCR,<
|
||
IFN M.KL10,<EQUATE (GLOBAL,EATDSP##,<FCRDSP>)>
|
||
> ;END IFE M.DCR
|
||
|
||
IFE M.CR20,<
|
||
> ;END IFE M.CR20
|
||
IFN M.CDR!M.RCDR,< ;LOCAL OR REMOTE CARD READERS?
|
||
|
||
;THE CHARACTER TRANSLATION TABLES:
|
||
$HIGH
|
||
CRCVPT::XWD 350700+T2,CRCVTB
|
||
XWD 260700+T2,CRCVTB
|
||
XWD 170700+T2,CRCVTB
|
||
XWD 100700+T2,CRCVTB
|
||
|
||
;CODE CONVERSION FOR THE 029 KEYPUNCH
|
||
;THE FOLLOWING EQUIVALENCES ARE ARTIFICIALLY DEFINED
|
||
|
||
;029 KEYTOP ;ASCII 35 ;ASCII 37
|
||
;CENT [ [
|
||
;0-8-2 ] ]
|
||
;VERT BAR ^ HAT = L.C. VERT BAR
|
||
;UNDERBAR _ UNDERBAR
|
||
;NEGATION \ TILDE = L.C. NEGATION
|
||
|
||
;CHARACTERS ;ZONE/DIGITS
|
||
CRCVTB: ASCII / 123/ ;N/N-3
|
||
ASCII .0/ST. ;0/N-3
|
||
ASCII /-JKL/ ;11/N-3
|
||
ASCII /HI[./ ;12,8/N-3
|
||
ASCII /&ABC/ ;12/N-3
|
||
ASCII /QR]$/ ;11,8/N-3
|
||
ASCII /YZ\,/ ;0,8/N-3
|
||
ASCII /89:#/ ;8/N-3
|
||
ASCII /4567/ ;N/4-7
|
||
ASCII /UVWX/ ;0/4-7
|
||
ASCII /MNOP/ ;11/4-7
|
||
ASCII /<(+!/ ;12,8/4-7
|
||
ASCII /DEFG/ ;12/4-7
|
||
ASCII /*);^/ ;11,8/4-7
|
||
ASCII /%_>?/ ;0,8/4-7
|
||
ASCII /@'="/ ;8/4-7
|
||
|
||
;CODE FOR THE 026 KEYPUNCH A LA H HYMAN
|
||
|
||
ASCII / 123/ ;N/N-3
|
||
ASCII .0/ST. ;0/N-3
|
||
ASCII /-JKL/ ;11/N-3
|
||
ASCII /HI?./ ;12,8/N-3
|
||
ASCII /+ABC/ ;12/N-3
|
||
ASCII /QR:$/ ;11,8/N-3
|
||
ASCII /YZ;,/ ;0,8/N-3
|
||
ASCII /89_=/ ;8/N-3
|
||
ASCII /4567/ ;N/4-7
|
||
ASCII /UVWX/ ;0/4-7
|
||
ASCII /MNOP/ ;11/4-7
|
||
ASCII /)]<!/ ;12,8/4-7
|
||
ASCII /DEFG/ ;12/4-7
|
||
ASCII /*[>&/ ;11,8/4-7
|
||
ASCII /("#%/ ;0,8/4-7
|
||
ASCII /@^'\/ ;8/4-7
|
||
$LOW
|
||
> ;END OF IFN RCDRN+M.RCDR
|
||
SUBTTL HARDWARE DEVICES -- DECTAPES
|
||
|
||
|
||
REPEAT 0,<
|
||
IFN M.TD10,<
|
||
|
||
IFNDEF SAVDMP,<SAVDMP==:'SAV'> ;EXTENSION FOR SAVED FILES
|
||
|
||
TD1MDT::MDTD10 ;TD10 PARAMETERS
|
||
|
||
> ;END OF IFN M.TD10
|
||
|
||
|
||
IFE M.TD10,<
|
||
|
||
;DUMMY GLOBALS
|
||
EQUATE (GLOBAL,CPOPJ##,<DTADDB,DTASEC,DTXFRE,OWNDTC,SCDDT>)
|
||
EQUATE (GLOBAL,0,<DCONS,DSCON,DTADSP,DTXINI,LVFLAG,USEWRD>)
|
||
|
||
UNWDTC::SETZ T3,
|
||
POPJ P,
|
||
|
||
> ;END IFE M.TD10
|
||
> ;END REPEAT 0
|
||
SUBTTL HARDWARE DEVICES -- DISKS
|
||
|
||
|
||
EXTERN FILFND, FILIO, FILUUO ;LOAD DRIVER INTERFACE AND UUO SERVICE
|
||
|
||
;GENERATE MONGEN'ED DEVICE TABLES FOR DISKS
|
||
DPXMDT::MDDPX ;DP (RP10 MEMOREX)
|
||
DRXMDT::MDDRX ;DR (FUTURE DRUM)
|
||
FHXMDT::MDFHX ;FH (RC10/RM10B BURROUGHS DISK OR BRYANT DRUM)
|
||
FSXMDT::MDFSX ;FS (RH10)
|
||
MDXMDT::MDMDX ;MD (BRYANT MASS [MOBY] DISK)
|
||
RAXMDT::MDRAX ;RA (CI20/HSC)
|
||
RNXMDT::MDRNX ;RN (RH20/DX20/RP20CT)
|
||
RPXMDT::MDRPX ;RP (RH10/RH11/RH20)
|
||
;*** EXAMPLE OF CUSTOMER DEFINITION
|
||
DSXMDT::MDDSX ;DS (SA10/IBM 3330/3331)
|
||
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.DPX,<
|
||
> ;END IFE M.DPX
|
||
|
||
IFE M.DRX,<
|
||
> ;END IFE M.DRX
|
||
|
||
IFE M.FHX,<
|
||
> ;END IFE M.FHX
|
||
|
||
IFE M.FSX,<
|
||
> ;END IFE M.FSX
|
||
|
||
IFE M.MDX,<
|
||
> ;END IFE M.MDX
|
||
|
||
IFE M.RAX,<
|
||
EQUATE (GLOBAL,0,<RAKCTI,RAXDDT,RAXKON>)
|
||
> ;END IFE M.RAX
|
||
|
||
IFE M.RNX,<
|
||
EQUATE (GLOBAL,0,<RNVNMR,RNVSMR>)
|
||
> ;END IFE M.RNX
|
||
|
||
IFE M.RPX,<
|
||
> ;END IFE M.RPX
|
||
SUBTTL HARDWARE DEVICES -- DEC TEN-ELEVEN INTERFACE
|
||
|
||
|
||
IFN M.KL10,<
|
||
.XCREF
|
||
|
||
PRMMIN==65
|
||
IFL VDTPRM-PRMMIN,<PRINTX ?PLEASE USE LATEST VERSION OF DTEPRM
|
||
PASS2
|
||
END>
|
||
|
||
;GENERATE FRONT END DEVICE BLOCKS
|
||
FEDGEN
|
||
|
||
;GENERATE HEADER FOR COMM REGION
|
||
ETHEAD
|
||
|
||
;GENERATE COMM REGION ITSELF
|
||
ETREGN
|
||
|
||
;GENERATE DTE CONTROL BLOCKS
|
||
ETDGEN
|
||
|
||
;GENERATE TABLE OF CORRESPONDENCE BETWEEN CPU#,DTE# AND DTE CONTROL BLOCKS
|
||
.CREF
|
||
ETDTBX
|
||
|
||
;TABLE FOR MASTER DTE CONTROL BLOCK ADDRESS FOR EACH CPU
|
||
DEFINE DFLMAS (C),<EXP ETD'C'1B>
|
||
|
||
DTEMAS::
|
||
N10==0
|
||
REPEAT M.CPU,<
|
||
DFLMAS \N10
|
||
N10==N10+1
|
||
>
|
||
|
||
|
||
;MACROS FOR RSX-20F DEVICE SYMBOLS AND STORAGE
|
||
DEFINE RSX20F <
|
||
N10==0 ;;INDEX FOR -10 CPU #
|
||
REPEAT M.CPU,< ;;DO FOR EACH CPU ON SYSTEM
|
||
RSXCPU \N10 ;;CALL CPU MACRO
|
||
N10==N10+1 ;;STEP TO NEXT CPU
|
||
>
|
||
>
|
||
|
||
DEFINE RSXCPU (C) <
|
||
N11==0 ;;INDEX FOR -11 CPU (DTE) #
|
||
REPEAT 4,< ;;DO FOR ALL DTE'S
|
||
RSXDTE \C,\N11 ;;CALL CURRENT DTE MACRO
|
||
N11==N11+1 ;;STEP TO NEXT -11 (DTE)
|
||
>
|
||
>
|
||
> ;END M.KL10
|
||
SUBTTL HARDWARE DEVICES -- ETHERNET
|
||
|
||
|
||
IFN M.ENET,<
|
||
|
||
ND %ETUPQ,4 ;USER PORTAL JOB QUOTA
|
||
ND %ETBQT,<4,,10> ;USER PORTAL DATAGRAM BUFFER QUOTAS
|
||
; (LH=TRANSMIT QUOTA, RH=RECEIVE QUOTA)
|
||
ND M.ETSZ,3000 ;FREE CORE ALLOCATION POOL SIZE FOR ETHERNET
|
||
IFE M.LAT,<M.LASZ==0> ;ALLOWANCE IF NO LAT
|
||
IFN M.LAT,<ND M.LASZ,15000> ;ALLOWANCE IF LAT
|
||
ETHSIZ==M.ETSZ+M.LASZ ;TOTAL SIZE OF POOL
|
||
ETHSIZ==:<^D144*<<ETHSIZ+^D143>/^D144>>
|
||
ETHBTL==<ETHSIZ+^D143>/^D144 ;SIZE OF THE BIT MAP
|
||
|
||
IFN M.KL10,<
|
||
ND M.KNSZ,3000 ;FREE CORE ALLOCATION POOL SIZE FOR KLNI
|
||
KNISIZ==:<^D144*<<M.KNSZ+^D143>/^D144>>
|
||
KNIBTL==<KNISIZ+^D143>/^D144 ;SIZE OF THE BIT MAP
|
||
> ;END IFN M.KL10
|
||
|
||
EXTERN ETHUUO ;FORCE LOADING OF ETHERNET UUO SERVICE
|
||
IFN M.KL10,<
|
||
EXTERN KNISER ;FORCE LOADING OF KLNI DEVICE SERVICE
|
||
EXTERN LLMINI ;AND KLNI MAINTENANCE PROTOCOL SERVICE
|
||
> ;END IFN M.KL10
|
||
IFN M.KS10,<EXTERN UNASER> ;FORCE LOADING OF DEUNA DEVICE SERVICE
|
||
|
||
;GENERATE MONGEN'ED DEVICE TABLES FOR ETHERNET
|
||
IFN FTKL10,<KNIMDT::MDENET> ;NIA20 (KLNI)
|
||
IFN FTKS10,<UNAMDT::MDENET> ;DEUNA
|
||
|
||
IFN M.KS10,<
|
||
LLMPSI::!SETZ T2,
|
||
POPJ P,
|
||
> ;END IFN M.KS10
|
||
|
||
ETHLOC::EXP 0 ;STARTING ADDRESS OF ETHERNET FREE CORE
|
||
ETHPTR::XWD -ETHBTL,.+1 ;AOBJN POINTER TO ETHERNET FREE CORE BIT MAP
|
||
BLOCK ETHBTL ;THE MAP ITSELF
|
||
|
||
IFN M.KL10,<
|
||
KNILOC::EXP 0 ;STARTING ADDRESS OF KLNI FREE CORE
|
||
KNIPTR::XWD -KNIBTL,.+1 ;AOBJN POINTER TO KLNI FREE CORE BIT MAP
|
||
BLOCK KNIBTL ;THE MAP ITSELF
|
||
LLMACT::BLOCK 1 ;LLMOP IDENTIFY-SELF TIMER WORD
|
||
> ;END IFN M.KL10
|
||
> ;END IFN M.ENET
|
||
|
||
IFE M.ENET,<
|
||
EQUATE (GLOBAL,CPOPJ##,<ENTRST,ETHINI,UETHNT,ETHSEC,UKNIBT,ULLMOP,D8EINI>)
|
||
EQUATE (GLOBAL,0,<ETHLOC,ETHMXL,ETHPTR,ETHSIZ>)
|
||
EQUATE (GLOBAL,NULGTB##,<ETHGTB>)
|
||
EQUATE (GLOBAL,0,<KNISIZ>)
|
||
|
||
IFN M.KL10,<
|
||
EQUATE (GLOBAL,CPOPJ##,<KNISYS>)
|
||
EQUATE (GLOBAL,0,<KNILOC,KNIPTR>)
|
||
> ;END IFN M.KL10
|
||
|
||
ETHSER::!
|
||
DLLUNI::!MOVEI T1,1 ;RETURN ERROR UNIFC% (ILLEGAL FUNCTION)
|
||
POPJ P, ;...
|
||
LLMPSI::!
|
||
ENTPSI::!SETZ T2, ;RETURN DUMMY STATUS CODE
|
||
POPJ P, ;...
|
||
|
||
IFN M.KL10,<
|
||
EQUATE (GLOBAL,CPOPJ##,<KNIDED,KNILDR,KNIINI,KNIMOF,KNIMON,KNIRMV>)
|
||
EQUATE (GLOBAL,CPOPJ##,<KNIRST,KNISEC,KNITIC,LLMINI,LLMMIN,DAEINI>)
|
||
KNIDIA==:ECOD13## ;DIAG. UUO ERROR ILLEGAL FUNCTION
|
||
> ;END IFN M.KL10
|
||
|
||
> ;END IFE M.ENET
|
||
SUBTTL HARDWARE DEVICES -- LINE PRINTERS
|
||
|
||
|
||
IFN M.LPT,<
|
||
|
||
ND LPTSIZ,^D27+2 ;DEFAULT BUFFER SIZE
|
||
ND DLPMAX,2 ;MAXIMUM NUMBER OF PRINTERS PER DTE
|
||
|
||
LPTMDT::MDLP10 ;I/O BUS LINE PRINTER PARAMETERS
|
||
DLPMDT::MDDLP ;FRONT-END LINE PRINTER PARAMETERS
|
||
LP2MDT::MDLP20 ;UNIBUS LINE PRINTER PARAMETERS
|
||
|
||
> ;END OF IFN M.LPT
|
||
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.LP10,<
|
||
> ;END IFE M.LP10
|
||
|
||
IFE M.DLP,<
|
||
IFN M.KL10,<EQUATE (GLOBAL,EATDSP##,<DLPDSP>)>
|
||
> ;END IFE M.DLP
|
||
|
||
IFE M.LP20,<
|
||
> ;END IFE M.LP20
|
||
SUBTTL HARDWARE DEVICES -- MAGTAPES
|
||
|
||
|
||
IFN M.TAPE,<
|
||
|
||
ND DSETIM,^D320 ;MAXIMUM TIME TO DO A DATA SECURITY ERASE
|
||
ND MTSIZ,^D128 ;DEFAULT BUFFER SIZE
|
||
ND MTELOG,-1 ;LOG ERRORS THAT REQUIRED MORE THAN 1 RETRY
|
||
ND MTDAEM,10 ;NUMBER OF TIMES PER REEL TO CALL DAEMON
|
||
ND MTDLTP,LT.BLP ;DEFAULT LABEL TYPE
|
||
ND MTFILE,1 ;USE HARDWARE SKIP FILE FUNCTIONS
|
||
ND NOISE,^D12 ;NOISE RECORD LENGTH IN BYTES
|
||
ND MQUANT,^D10 ;CONSECUTIVE RECORDS
|
||
ND TAPTIM,^D60 ;MAXIMUM TIME TO SKIP 10 RECORDS
|
||
ND TKBICT,2 ;INITIAL FAIRNESS COUNT FOR QUEUED REQUEST
|
||
|
||
EXTERN TAPSER, TAPUUO ;LOAD DRIVER INTERFACE AND UUO SERVICE
|
||
|
||
;GENERATE MONGEN'ED DEVICE TABLES FOR MAGTAPES
|
||
TM2MDT::MDTM02 ;TM02/TM03
|
||
TX1MDT::MDTX01 ;DX10/TX01/TX02
|
||
TD2MDT::MDDX20 ;DX20/TX01/TX02
|
||
T78MDT::MDTM78 ;TM78
|
||
TMXMDT::MDTM10 ;TM10B
|
||
TCXMDT::MDTC10 ;TC10C
|
||
;*** EXAMPLE OF CUSTOMER DEFINITION
|
||
TS1MDT::MDTS10 ;SA10/IBM CHANNEL MAGTAPES
|
||
|
||
IFE M.TX01,<CCHJGO==:1B2+1B3> ;DX10 CHANNEL GO & JUMP BITS FOR MAKLST
|
||
|
||
> ;END OF IFN M.TAPE
|
||
|
||
|
||
IFE M.TAPE,<
|
||
|
||
;DUMMY GLOBALS
|
||
EQUATE (GLOBAL,CPOPJ##,<TAPMIN,TAPSEC,TAPTIC>)
|
||
EQUATE (GLOBAL,CPOPJ##,<TPMCTT,TPMREA,TPMRES,TPMDVS,TPDSIA>)
|
||
EQUATE (GLOBAL,CPOPJ##,<UTAPOP,MTARID,MTACHR,MTAPE0>)
|
||
EQUATE (GLOBAL,CPOPJ##,<TPCLSX,TPFREE,TPSTAT,TPSKPW>)
|
||
EQUATE (GLOBAL,CPOPJ1##,<TPMSIL>)
|
||
EQUATE (GLOBAL,0,<MTSIZ,TUYLTP,TDVUDB,TUBCRD>)
|
||
EQUATE (GLOBAL,ZPOPJ##,<TAPCPI>)
|
||
EQUATE (GLOBAL,COMERR##,<MTADEN,MTABLK,MTAMOD,MTARTY>)
|
||
CCHJGO==:1B2+1B3 ;DX10 CHANNEL GO & JUMP BITS FOR MAKLST
|
||
|
||
> ;END IFE M.TAPE
|
||
SUBTTL HARDWARE DEVICES -- PAPER TAPE PUNCHES
|
||
|
||
|
||
ND PTPSIZ,41 ;DEFAULT BUFFER SIZE
|
||
|
||
PTPMDT::MDPTP ;PAPER TAPE PUNCH PARAMETERS
|
||
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.PTP,<
|
||
> ;END IFE M.PTP
|
||
SUBTTL HARDWARE DEVICES -- PAPER TAPE READERS
|
||
|
||
|
||
ND PTRSIZ,41 ;DEFAULT BUFFER SIZE
|
||
|
||
PTRMDT::MDPTR ;PAPER TAPE READER PARAMETERS
|
||
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.PTR,<
|
||
> ;END IFE M.PTR
|
||
SUBTTL HARDWARE DEVICES -- PLOTTERS
|
||
|
||
|
||
IFN M.PLT,<
|
||
|
||
ND PLTSIZ,^D36 ;DEFAULT BUFFER SIZE
|
||
|
||
PLTMDT::MDXY10 ;I/O BUS PLOTTER PARAMETERS
|
||
|
||
> ;END OF IFN M.PLT
|
||
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.XY10,<
|
||
> ;END IFE M.XY10
|
||
SUBTTL HARDWARE DEVICES -- SYSTEM COMMUNICATIONS ARCHITECTURE
|
||
|
||
|
||
IFN M.SCA,<
|
||
|
||
EXTERN MSCCOM, KLPSER ;LOAD MSC AND CI20 DRIVERS
|
||
EXTERN SCSUUO ;LOAD UUO SERVICE
|
||
|
||
KLPMDT::MDSCA ;CI20 PARAMETERS
|
||
|
||
>; END IFN M.SCA
|
||
|
||
IFE M.SCA,<
|
||
|
||
;DUMMY GLOBALS
|
||
EQUATE (GLOBAL,CPOPJ##,<BHDINI,REVFUL>)
|
||
EQUATE (GLOBAL,CPOPJ##,<MSCCUS,MSCGBF,MSCINI,MSCUON>)
|
||
EQUATE (GLOBAL,CPOPJ##,<SC.INI,SC.SEC,SC.TIC>)
|
||
EQUATE (GLOBAL,CPOPJ##,<SCS,SCSCLK,SCSLGO,SCSPOP,SCSRST>)
|
||
EQUATE (GLOBAL,CPOPJ##,<PPDCLR,PPDINX,PPDMFL,PPDMOD,PPDRMV,PPDRHD>)
|
||
EQUATE (GLOBAL,CPOPJ##,<PPDSEC,PPDTIC,PPDMON>)
|
||
EQUATE (GLOBAL,DIAACI##,<DIACTR,DIAEDP,DIARMD,DIARRS,DIASRS,DIAWMD>)
|
||
EQUATE (GLOBAL,0,<BHDPGS,BSDPGS>)
|
||
|
||
SCSPSI::SETZ T2,
|
||
POPJ P,
|
||
|
||
BHDADR::
|
||
BSDADR::EXP 0
|
||
|
||
>; END IFE M.SCA
|
||
SUBTTL HARDWARE DEVICES -- SYSTEMS CONCEPTS IBM CHANNEL
|
||
|
||
|
||
IFN M.SA10,<
|
||
|
||
SAXMDT::MDSA10 ;SA10 PARAMETERS
|
||
|
||
>; END IFN M.SA10
|
||
|
||
IFE M.SA10,<
|
||
|
||
;DUMMY GLOBALS
|
||
|
||
>; END IFE M.SCA
|
||
SUBTTL SOFTWARE DEVICES/FUNCTIONS/PROTOCOLS -- LOCAL AREA TERMINALS
|
||
|
||
|
||
IFE M.ENET,<M.LAT==:0> ;DEPENDENT UPON ETHERNET SERVICE
|
||
ND M.LAT,0 ;DEFAULT IS OFF
|
||
IFN M.LAT,<EXTERN LATINI> ;FORCE LOADING OF LAT SERVICE ROUTINES
|
||
|
||
IFE M.LAT,<
|
||
EQUATE (GLOBAL,CPOPJ##,<LATINI,.LATOP,CWHLAT,LATRST>)
|
||
EQUATE (GLOBAL,NOPDNC##,<NETDIL>)
|
||
EQUATE (LOCAL,0,<M.LNAM>)
|
||
|
||
IFE M.ENET,<LATPSI==:ENTPSI> ;IF NO ETHERNET SERVICE AT ALL
|
||
IFN M.ENET,<LATPSI==:ENTPSI##> ;IF ETHERNET SERVICE, BUT NO LAT
|
||
|
||
> ;END IFE M.LAT
|
||
|
||
IFN M.LAT,< ;ONLY GENERATE IF WANT LATSER
|
||
;SOME SPACE FOR A SLOT ALLOCATION BIT TABLE FOR LAT TERMINALS
|
||
NTTLAH==:M.RTTY ;SAME AS NUMBER OF NETWORK TTYS
|
||
SBBWDS==:<NTTLAH+^D35>/^D36 ;ONE BIT FOR EACH SLOT WE COULD HAVE
|
||
SBBITS::BLOCK SBBWDS
|
||
MAXCIR==:M.LAMC ;MAXIMUM NUMBER OF CIRCUITS
|
||
|
||
;TABLE OF DESIRED INITIAL GROUPS FOR LAT SERVICE
|
||
|
||
DEFINE LATGRP(ARG),<IRP ARG,<LATGR1(ARG)>> ;STRIP OFF ANGLES
|
||
DEFINE LATGR1(ARG),<LATGR2(ARG,ARG)> ;MORE ANGLE BRACKETS
|
||
DEFINE LATGR2(LOGRP,HIGRP,XX,YY),<
|
||
.ZZ==^D'LOGRP
|
||
REPEAT ^D<HIGRP-LOGRP+1>,<
|
||
.ZZW==.ZZ/^D32 ;;WORD OFFSET IN BLOCK
|
||
.ZZB==1B<7-<.ZZ&7>>_-<8*<<.ZZ/8>&3>> ;;BIT TO SET
|
||
CONC(LATGW,\.ZZW,<==.ZZB!LATGW>,\.ZZW) ;;SET IT
|
||
.ZZ==.ZZ+1 ;;ADVANCE TO NEXT GROUP
|
||
> ;;REPEAT OVER GROUPS IN LIST
|
||
> ;END DEFINE LATGR?
|
||
|
||
LATGW7==<LATGW6==<LATGW5==<LATGW4==<LATGW3==<LATGW2==<LATGW1==<LATGW0==0>>>>>>>
|
||
SPCGRP ;GET MONGEN'ED LAT GROUPS
|
||
|
||
LATIGE::EXP LATGW0,LATGW1,LATGW2,LATGW3,LATGW4,LATGW5,LATGW6,LATGW7
|
||
|
||
IF2,<
|
||
PURGE .ZZ,.ZZW,.ZZB,LATGW0,LATGW1,LATGW2,LATGW3,LATGW4,LATGW5,LATGW6,LATGW7
|
||
>
|
||
|
||
> ;END IFN M.LAT
|
||
SUBTTL SOFTWARE DEVICES/FUNCTIONS/PROTOCOLS -- MULTIPLEXED CHANNELS
|
||
|
||
|
||
IFN M.MPX,<
|
||
EXTERN MPXSER ;FORCE LOADING OF MPX SERVICE
|
||
MPXMDT::MDCPUN (00,00,00,00,00,00) ;DUMMY MPX PARAMETERS
|
||
MDTERM
|
||
> ;END IFN M.MPX
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.MPX,<
|
||
EQUATE (GLOBAL,CPOPJ##,<CLRST,CONECT,ERLST,SENSE>)
|
||
EQUATE (GLOBAL,CPOPJ##,<DEVUDX,LGLMPX,MOVHDR,MSGBFE,MSGOUT,TSTMPX,ZAPMPX>)
|
||
EQUATE (GLOBAL,CPOPJ##,<MPXIOD,MPXIOS,MPXDIS,MPXWAT,MPXWAI>)
|
||
EQUATE (GLOBAL,CPOPJ1##,<CHKMPX,MPXACT>)
|
||
> ;END IFE M.MPX
|
||
SUBTTL SOFTWARE DEVICES/FUNCTIONS/PROTOCOLS -- PSEUDO TERMINALS
|
||
|
||
|
||
IFN M.PTY,<
|
||
ND PTYRMT,0 ;DEFAULT TO LOCAL
|
||
ND PTYLCT,0 ;NOT LOWER CASE
|
||
PTYLTB==:<0*TTVFLC+PTYLCT*TTVLCT+PTYRMT*TTVRMT> ;LINTAB BITS
|
||
PTYOFS==:TCONLN+1 ;OFFSET FOR PTY-DRIVEN TTY'S
|
||
|
||
EXTERN PTYSER ;FORCE LOADING OF PTY SERVICE
|
||
PTYMDT::MDCPUN (00,00,00,00,00,00) ;DUMMY PTY PARAMETERS
|
||
MDTERM
|
||
|
||
PTYTAB::BLOCK M.PTY ;ADDRESSES OF THE PTY DDBS
|
||
> ;END IFN M.PTY
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.PTY,<
|
||
EQUATE (GLOBAL,CPOPJ##,<CTLJOB,UJBSTS,PTYPE,PTMNMZ,PTYOW,PTMNMD>)
|
||
EQUATE (GLOBAL,CPOPJ1##,<PTPTCH>)
|
||
EQUATE (GLOBAL,0,<PTYLTB>)
|
||
|
||
CTLJBU::!SETZM U
|
||
CTLJB::!
|
||
CTLJBD::MOVNI T1,1
|
||
POPJ P,
|
||
> ;END IFE M.PTY
|
||
SUBTTL SOFTWARE DEVICES/FUNCTIONS/PROTOCOLS -- TERMINALS
|
||
|
||
|
||
SCNN==:JOBN+TTXTRA+M.DTEN ;NUMBER OF TTY DDBS TO BE BUILT
|
||
|
||
EXTERN SCNSER ;FORCE LOADING OF SCANNER SERVICE
|
||
SCNMDT::MDCPUN (00,00,00,00,00,00) ;DUMMY SCANNER PARAMETERS
|
||
MDTERM
|
||
SUBTTL GLOBAL NETWORK DEFINITIONS
|
||
|
||
|
||
IFE M.NET,<
|
||
EQUATE (GLOBAL,0,<M.ANF,M.DECN,M.LAT,M.RTTY>)
|
||
M.SNAM==:<SIXBIT/CENTRA/>
|
||
> ;END IFE M.NET
|
||
|
||
IFE M.RTTY,<
|
||
EQUATE (GLOBAL,0,<M.RMCR,M.RVTM,M.DNVT,M.LAT>)
|
||
>
|
||
|
||
IFE M.ANF,<
|
||
EQUATE (GLOBAL,0,<M.ANAM,M.ANUM>)
|
||
> ;END IFE M.ANF
|
||
|
||
IFE M.DECN,<
|
||
EQUATE (GLOBAL,0,<M.DNAM,M.DNUM,M.DHOM,M.DRTY,M.DNVT>)
|
||
> ;END IFE M.DECN
|
||
|
||
$LOW
|
||
|
||
STANAM::EXP M.SNAM ;SYSTEM-WIDE NODE NAME
|
||
ANFNAM::EXP M.ANAM ;ANF-10 STATION NAME
|
||
ANFNUM::EXP M.ANUM ;ANF-10 STATION NUMBER
|
||
DCNNAM::EXP M.DNAM ;DECNET NODE NAME
|
||
DCNNUM::EXP <%RTADR==:M.DNUM> ;DECNET NODE NUMBER
|
||
DCNHOM::EXP <%RTHOM==:M.DHOM> ;DECNET HOME AREA NUMBER
|
||
DCNRTY::EXP <%RTRTY==:M.DRTY> ;DECNET ROUTING TYPE
|
||
LATNAM::EXP M.LNAM ;LAT SERVICE NAME
|
||
IFE M.KS10,<
|
||
EQUATE (GLOBAL,0,<M.DMRN,M.KDUP>)
|
||
> ;END IFE M.KS10
|
||
|
||
IFE M.KDUP,<
|
||
EQUATE (GLOBAL,CPOPJ##,<KDPONC,UKDP,KDPLDR,KDPDSP>)
|
||
EQUATE (GLOBAL,0,<M.DN6K>)
|
||
> ;END IFE M.KDUP
|
||
|
||
IFE M.DMRN,<
|
||
EQUATE (GLOBAL,CPOPJ##,<DMRONC,DMRDSP>)
|
||
EQUATE (GLOBAL,0,<M.DN6R>)
|
||
> ;END IFE M.DMRN
|
||
|
||
IFE M.DN6K,<
|
||
EQUATE (GLOBAL,CPOPJ##,<D6KK2D>)
|
||
> ;END IFE M.DN6K
|
||
|
||
IFE M.DN6R,<
|
||
EQUATE (GLOBAL,CPOPJ##,<D6RK2U>)
|
||
> ;END IFE M.DN6R
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- FEATURE TEST CHECK
|
||
|
||
|
||
IFN M.ANF,<
|
||
IFE FTNET,<
|
||
PRINTX ? ANF-10 will not work with FTNET = 0
|
||
PRINTX ? ANF-10 will not be included in this monitor
|
||
M.ANF==:0
|
||
> ;END IFN FTNET
|
||
|
||
EXTERN NETSER ;LOAD NETWORK SERVICE
|
||
> ;END IFN M.ANF
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- PROTOTYPE DDB
|
||
|
||
|
||
IFN M.ANF,<
|
||
|
||
DEFINE X (OFFSET,EXPR),< ;;MACRO TO SET SELECTED LOCATIONS IN THE BLOCK
|
||
RELOC NETDDB+OFFSET ;;GO TO THE RIGHT WORD
|
||
EXPR ;;ASSEMBLE IN THE EXPRESSION
|
||
> ;END DEFINE X
|
||
|
||
$LOW
|
||
|
||
NETDDB::X DEVCHR,<XWD <6*HUNGST>+DVC2IO,0>
|
||
X DEVSER,<XWD 0,NETDSP##> ;DEFINE NETWORK DISPATCH VECTOR
|
||
X DEVSTA,<XWD .TYMCR*.TYEST+DEPLEN,DEPEVM> ;VAR LEN BUF, NO EVM
|
||
X DEVCPU,<EXP 707B8> ;SET DEYPCL SO WILL RUN ON ANY CPU.
|
||
X NETLEN, ;RESERVE ENOUGH SPACE FOR ENTIRE DDB
|
||
|
||
PURGE X ;FLUSH THE MACRO
|
||
|
||
$HIGH
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- PROTOTYPE NDB
|
||
|
||
|
||
DEFINE X (OFFSET,EXPR),< ;;MACRO TO SET SELECTED LOCATIONS IN THE BLOCK
|
||
RELOC NETNDB+OFFSET ;;GO TO THE RIGHT WORD
|
||
EXPR ;;ASSEMBLE IN THE EXPRESSION
|
||
> ;END DEFINE X
|
||
|
||
$LOW
|
||
NETNDB::X NDBSID,<XWD SYSDAT##,CONFIG##> ;CREATION DATE,LONG-NAME
|
||
X NDBSNM,<XWD NETNDB+NDBSN2,NCLVER> ;SHORT-NAME,VERSION
|
||
X NDBFLG,<XWD NDB.UP,0> ;MAKE SURE WE DON'T TRY A STARTUP SEQ
|
||
X NDBFEK,<XWD 0,NL0FEK##> ;POINT TO OUR "NULL" FEK (CPU 0)
|
||
X NDBMOM,<EXP 10> ;MAXIMUM OF 10 OUTSTANDING MSGS
|
||
X NDBDEV,<BYTE (9)1,M.TLTL,0,0,0,0,0,0,M.DTXN,M.RJOB,0,0>
|
||
X NDBLEN, ;RESERVE ENOUGH SPACE FOR THE ENTIRE NDB
|
||
|
||
PURGE X ;FLUSH THE MACRO
|
||
|
||
.GTNDA::BLOCK NODMAX+1 ;GETTAB TABLE=173 INDEXED BY NODE NUMBER
|
||
NDAMXL==:<.-.GTNDA-1>_^D9 ;LENGTH OF GETTAB TABLE
|
||
$HIGH
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- NDT GENERATION
|
||
|
||
|
||
DEFINE NDT (XDEV,XIDEV,BUFSZ,CHR,DCM,DVT,SPL)<
|
||
ND N'XIDEV'BSZ,<BUFSZ>
|
||
NDT'XDEV:
|
||
BYTE (18)<(SIXBIT /XDEV/)>,<(SIXBIT /XIDEV/)>
|
||
XWD CHR,XDEV'MOD
|
||
BYTE (10)DCM(8)OBJ.'XIDEV(2)0(16)DVT
|
||
BYTE (6).TY'XDEV(12)N'XIDEV'BSZ(8)SPL(10)0
|
||
IFIW N'XDEV'CI##
|
||
IFIW @NDEV'XIDEV##(T4)
|
||
IFIW @'XDEV'NDP##(T1)
|
||
|
||
.ORG NDTTBL+OBJ.'XIDEV
|
||
EXP NDT'XDEV
|
||
.ORG
|
||
> ;END DEFINE NDT
|
||
|
||
|
||
DEFINE X (A,B,C),<ZZ==ZZ+1>
|
||
ZZ==0 ;INIT COUNTER
|
||
OBJTYP ;COUNT UP THE OBJECT TYPES
|
||
NDTTBL::BLOCK ZZ ;RESERVE SPACE FOR NDT BLOCK POINTERS
|
||
NDTXWD::XWD -ZZ,NDTTBL ;AOBJN POINTER TO TABLE
|
||
> ;END IFN M.ANF
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- CARD READERS
|
||
|
||
|
||
IFE M.ANF,<M.RCDR==:0> ;NO CARD READER SERVICE IF NO ANF-10
|
||
|
||
IFN M.RCDR,<
|
||
EXTERN NETCDR
|
||
CDRMOD==1_A+1_AL+1_I+1_IB+1_B
|
||
NDT(CDR,CD,34,<DVIN!DVCDR>,<DCM.DI>,0,.SPCDR)
|
||
> ;END IFN M.RCDR
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.RCDR,<
|
||
> ;END IFE M.RCDR
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- DDCMP DEVICE
|
||
|
||
|
||
IFE M.ANF,<M.RDDP==:0> ;NO DDCMP DEVICE SERVICE IF NO ANF-10
|
||
|
||
IFN M.RDDP,<
|
||
EXTERN NETDDP
|
||
DDPMOD==1_BYTMOD
|
||
NDT(DDP,DP,<<MSGMAD+3>/4>,<DVIN!DVOUT>,<DCM.IM>,0,0)
|
||
> ;END IFN M.RDDP
|
||
|
||
IFE M.RDDP,<
|
||
EQUATE (GLOBAL,CPOPJ##,<DDPDSP,DDPUUO,TSTDDP,ZAPDDP>)
|
||
> ;END IFE M.RDDP
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- LINE PRINTERS
|
||
|
||
|
||
IFE M.ANF,<M.RLPT==:0> ;NO LINE PRINTER SERVICE IF NO ANF-10
|
||
|
||
IFN M.RLPT,<
|
||
EXTERN NETLPT
|
||
LPTMOD==1_A+1_AL+1_A8+1_I
|
||
NDT(LPT,LP,33,<DVOUT!DVLPT>,<DCM.CP!DCM.AS>,0,.SPLPT)
|
||
> ;END IFN M.RLPT
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.RLPT,<
|
||
> ;END IFE M.RLPT
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- MCR
|
||
|
||
|
||
IFE M.ANF,<M.RMCR==:0> ;NO MCR SERVICE IF NO ANF-10
|
||
|
||
IFN M.RMCR,<
|
||
EXTERN NETMCR
|
||
OBJ.MC==OBJ.TT ;DUMMY "MCR" OBJECT TYPE TO MATCH NAMES
|
||
MCRMOD==0 ;NOT AVAILABLE AS I/O DEVICE
|
||
NDT(MCR,MC,23,<DVIN!DVOUT>,<DCM.AS!DCM.IM>,0,0)
|
||
> ;END IFN M.RMCR
|
||
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.RMCR,<
|
||
EQUATE (GLOBAL,ECOD4##,<D85DSC>)
|
||
EQUATE (GLOBAL,NOPDNC##,<NETDIA>)
|
||
IFN M.ANF,<
|
||
EQUATE (GLOBAL,CPOPJ##,<NMCSEC,MCRJIF,HOST.U,ASGTTY,MCRCHK>)
|
||
EQUATE (GLOBAL,CPOPJ1##,<TRMXDC>)
|
||
EQUATE (GLOBAL,TTYNDP,<MCRNDP>)
|
||
> ;END IFN M.ANF
|
||
> ;END IFE M.RMCR
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- REMOTE DATA ENTRY TERMINALS
|
||
|
||
|
||
IFE M.ANF,<M.RDX==:0> ;NO REMOTE DATA ENTRY SERVICE IF NO ANF-10
|
||
|
||
IFN M.RDX,<
|
||
EXTERN NETRDX
|
||
RDAMOD==1_BYTMOD+1_PIMMOD+1_A+1_AL
|
||
NDT(RDA,RD,101,<DVIN!DVOUT>,<DCM.AS>,0,0)
|
||
> ;END IFN M.RDX
|
||
|
||
IFE M.RDX,<
|
||
EQUATE (GLOBAL,CPOPJ##,<TSTRDX>)
|
||
> ;END IFE M.RDX
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- PAPER TAPE PUNCH
|
||
|
||
|
||
IFE M.ANF,<M.RPTP==:0> ;NO PAPER TAPE PUNCH SERVICE IF NO ANF-10
|
||
|
||
IFN M.RPTP,<
|
||
EXTERN NETPTP
|
||
PTPMOD==1_B+1_AL+1_I+1_IB+1_A
|
||
NDT(PTP,PP,41,<DVOUT!DVPTP>,<DCM.AS!DCM.IM>,0,.SPPTP)
|
||
> ;END IFN M.RPTP
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.RPTP,<
|
||
> ;END IFE M.RPTP
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- PAPER TAPE READER
|
||
|
||
|
||
IFE M.ANF,<M.RPTR==:0> ;NO PAPER TAPE READER SERVICE IF NO ANF-10
|
||
|
||
IFN M.RPTR,<
|
||
EXTERN NETPTR
|
||
PTRMOD==1_B+1_AL+1_I+1_IB+1_A
|
||
NDT(PTR,PR,41,<DVIN!DVPTR>,<DCM.AS!DCM.IM>,0,0)
|
||
> ;END IFN M.RPTR
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.RPTR,<
|
||
> ;END IFE M.RPTR
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- PLOTTER
|
||
|
||
|
||
IFE M.ANF,<M.RPLT==:0> ;NO PLOTTER SERVICE IF NO ANF-10
|
||
|
||
IFN M.RPLT,<
|
||
EXTERN NETPLT
|
||
PLTMOD==1_B+1_AL+1_I+1_IB+1_A
|
||
NDT(PLT,PL,41,<DVOUT>,<DCM.AS!DCM.IM>,0,.SPPLT)
|
||
|
||
> ;END IFN M.RPLT
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.RPLT,<
|
||
> ;END IFE M.RPLT
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- TASKS
|
||
|
||
|
||
IFE M.ANF,<M.RJOB==:0> ;NO TASK SERVICE IF NO ANF-10
|
||
|
||
IFN M.RJOB,<
|
||
EXTERN NETTSK
|
||
TSKMOD==1_B+1_I+1_IB+1_A+1_AL+1_BYTMOD
|
||
NDT(TSK,TK,101,<DVIN!DVOUT!DVLNG!DVDIR>,<DCM.AS!DCM.IM>,0,0)
|
||
> ;END IFN M.RJOB
|
||
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.RJOB,<
|
||
EQUATE (GLOBAL,CPOPJ##,<UTSK,TSTTSK,TSKSEC>)
|
||
> ;END IFE M.RJOB
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- VIRTUAL TERMINALS
|
||
|
||
|
||
IFE M.ANF,<M.RVTM==:0> ;NO VIRTUAL TERMINALS IF NO ANF-10
|
||
|
||
IFN M.RVTM,<
|
||
EXTERN NETVTM
|
||
TTYMOD==1_A+1_AL+1_A8+1_PIMMOD+1_I
|
||
NDT(TTY,TY,23,<DVIN!DVOUT>,<DCM.AS!DCM.IM>,0,0)
|
||
> ;END IFN M.RVTM
|
||
|
||
;DUMMY GLOBALS
|
||
IFE M.RVTM,<
|
||
EQUATE (GLOBAL,CPOPJ##,<VTMREC,VTMJIF,VTMENQ,VTMSPD>)
|
||
EQUATE (GLOBAL,CPOPJ##,<VTMDSF,VTMDSO,VTMPRL,VTMFRE>)
|
||
IFN M.RMCR,<XP VTMHST,MCRCSH##>
|
||
IFN M.ANF,<
|
||
REPEAT 5,<POPJ P,>
|
||
TTYNDP::REPEAT 5,<POPJ P,>
|
||
> ;END IFN M.ANF
|
||
> ;END IFE M.RVTM
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- ETHERNET SUPPORT
|
||
|
||
|
||
;ANF ETHERNET PROTOCOL AND MULTICAST ADDRESS
|
||
;
|
||
; NOTE: THE ANF ETHERNET DRIVER (D8EINT) WILL BE LOADED IF AND ONLY IF
|
||
; THE SYMBOL ANFNIP IS DEFINED NON-ZERO (E.G., VIA MONGEN).
|
||
|
||
ND ANFNIP,NCLNIP ;DEFAULT TO EXCLUDE ANF-10 FROM THE ETHERNET
|
||
ND ANFNIM,<<<ANFNIP>B15>> ;DEFAULT MULTICAST ADDRESS
|
||
|
||
IFE ANFNIP!ANFNIM,< ;IF TO BE EXCLUDED,
|
||
D8EINI==:CPOPJ## ;NULL D8EINT SERVICE (SYSINI DUMMY)
|
||
> ;END IFE ANFNIP
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- MONGEN PARAMETERS
|
||
|
||
|
||
IFN M.ANF,<
|
||
|
||
;MAXIMUM MESSAGE SIZE TO BE SEEN FROM THE NETWORK
|
||
ND MSGMAX,^D512 ;WHAT IT USED TO BE IN TERMS OF PCBLMX
|
||
MSGMAW==:<MSGMAX+3>_-2 ;MAX MESSAGE SIZE MOD -10 WORD SIZE
|
||
IFN M.ENET,< ;ETHERNET?
|
||
MSGMAW==:MSGMAW+2 ;ALLOW FOR 2-BYTE COUNT + 4-BYTE CRC
|
||
> ;END IFN M.ENET
|
||
|
||
MSGMAD==:MSGMAX-20 ;MAX MESSAGE SIZE (DISCOUNTING NCL OVERHEAD)
|
||
; E.G., FOR DATA MESSAGES THIS IS HOW MUCH
|
||
; DATA CAN BE FIT IN A SINGLE MESSAGE
|
||
|
||
|
||
;MAXIMUM SIZE THE -10 WILL KNOWINGLY TRANSMIT
|
||
ND MSGXMX,MSGMAX ;MAKE AS BIG AS POSSIBLE
|
||
MSGXMW==:<MSGXMX+3>_-2 ;MAX TRANSMITTABLE MOD -10 WORD SIZE
|
||
|
||
IFG MSGXMX-MSGMAX,<
|
||
PRINTX ? MSGXMX greater than MSGMAX!
|
||
MSGXMX==:MSGMAX ;LIMIT MAXIMUM TRANSMITTABLE
|
||
> ;END IFG MSGXMX-MSGMAX
|
||
|
||
|
||
IFL NETLNH-<^D36-^L<MSGMAX>>+1,<
|
||
PRINTX % NETLNH too small for MSGMAX
|
||
PRINTX % Network message length histogram table won't be accurate
|
||
> ;END IFL NETLNH-<STUFF>
|
||
|
||
|
||
IFN M.KDUP,<
|
||
IFG MSGMAX-<4*KDLMMS>,<
|
||
PRINTX ? KDLMMS too small, incoming KMC/DUP messages won't fit!
|
||
> ;END IFN MSGMAX-<STUFF>
|
||
> ;END IFN M.KDUP
|
||
|
||
|
||
IFN M.DMRN,<
|
||
IFG MSGMAX-<4*DMRMMS>,<
|
||
PRINTX ? DMRMMS too small, incoming DMR messages won't fit!
|
||
> ;END IFN MSGMAX-<STUFF>
|
||
> ;END IFN M.DMRN
|
||
|
||
> ;END IFN M.ANF
|
||
IFN M.ANF,<
|
||
|
||
;ALLOCATION "GRANULARITY" (POWER OF TWO; USED FOR LSH'S)
|
||
ND MSGAGN,^D03 ;ALLOCATE BY 8-WORD BLOCKS
|
||
MSGAGW==:<1_MSGAGN> ;ALLOCATION GRANULARITY BY WORDS
|
||
MSGALN==:<MSGMAW+MSGAGW-1>_-MSGAGN ;ALLOCATION TABLE LENGTHS
|
||
|
||
|
||
;MAXIMUM NUMBER OF DATA-REQUESTS THAT MAY BE SENT (FOR INPUT DEVICES ONLY)
|
||
ND MAXODR,6 ;6 SEEMS LIKE ENOUGH...
|
||
|
||
|
||
;SIZE OF A "TERMINAL PCB" MUST BE A POWER OF 2, AND .LE. ^D32
|
||
ND NTTPLN,^D32 ;SIZE OF A TERMINAL PCB
|
||
|
||
|
||
> ;END IFN M.ANF
|
||
|
||
;LINK ADDRESS TABLE. ONE ENTRY FOR EACH NETWORK CONNECTION
|
||
IFE M.ANF,<M.CONN==:0> ;NO LINK ADDRESS IF NO ANF-10
|
||
IFE M.CONN,<LATLEN==:0> ;LINK ADDRESS TABLE LENGTH IF NO CONNECTS
|
||
IFN M.CONN,<LATLEN==:M.CONN+1> ;LENGTH OF TABLE (MAXIMUM NUMBER OF CONNECTS
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- OBJECT TABLES
|
||
|
||
|
||
IFN M.ANF,<
|
||
;TABLE INDEXED BY OBJECT TYPE. THE FORMAT OF THIS TABLE IS:
|
||
; BYTE (12)0 (6)TYPE (18)SIXBIT/NAME/
|
||
;
|
||
DEFINE X (A,B,C),< ;;MACRO CALLED BY OBJTYP
|
||
XWD C,SIXBIT / A/ ;;MAKE THE ENTRY
|
||
> ;END DEFINE X
|
||
|
||
OBJTAB::OBJTYP ;MAKE DEVICE DESCRIPTORS
|
||
AOTMXL==:<.-OBJTAB-1>_^D9 ;LENGTH OF ANF-10 OBJECT TRANSLATION TABLE
|
||
|
||
|
||
;A BYTE POINTER TO THE TYPE FIELD IN OBJTAB.
|
||
|
||
OB%TYP==:<POINT 6,0,17> ;POINT TO TYPE FIELD IN OBJTAB ENTRY
|
||
|
||
|
||
;A TABLE OF POINTERS INTO CONFIGURATION TABLE OF AN NDB.
|
||
; INDEXED BY W (THE STANDARD NDB POINTER)
|
||
|
||
DEFINE X (A,B,C),< ;;MACRO CALLED IN OBJTYP
|
||
POINT 9,NDBDEV+<B/4>(W),8+<<3&B>*9>
|
||
> ;END DEFINE X
|
||
NETCNF::OBJTYP ;MAKE THE BYTE POINTERS
|
||
|
||
|
||
|
||
;A TABLE OF NDTS BASED ON OBJECT TYPE
|
||
;ENTRIES ARE ADDRESS OF NDT FOR THAT OBJECT TYPE, OR 0 IF NOT SUPPORTED
|
||
|
||
DEFINE X (A,B,C),< ;;MACRO CALLED BY OBJTYP
|
||
IFDEF NDT'A,<Z NDT'A> ;;ADDRESS OF NDT FOR THIS OBJECT TYPE
|
||
IFNDEF NDT'A,<Z> ;;OR 0 IF UNKNOWN/UNSUPPORTED
|
||
> ;END DEFINE X
|
||
NDTTAB::OBJTYP ;MAKE NDT ADDRESSES
|
||
|
||
> ;END IFN M.ANF
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- MISCELLANEOUS STORAGE
|
||
|
||
|
||
$LOW
|
||
NETLAT::XWD 0,NETDDB ;POINT TO THE DDB (EXEC PROCESS)
|
||
BLOCK M.CONN ;REST OF THE TABLE
|
||
|
||
$HIGH
|
||
|
||
IFNDEF NETOFS,<NETOFS==0>
|
||
NETRTY::XWD -M.RTTY,NETOFS ;POINTER TO NETWORK SECTION OF LINTAB
|
||
|
||
;NETSER'S FREE-PCB MANAGEMENT LISTS (INDEXED BY BUFFER SIZE "MOD" MSGAGN)
|
||
$LOW
|
||
IFN M.ANF,<
|
||
NTFREC::BLOCK MSGALN+1 ;COUNT OF FREE PCB'S ON EACH FREE LIST
|
||
NTFREF::BLOCK MSGALN+1 ;POINTER TO FIRST FREE PCB ON EACH LIST
|
||
NTFREL::BLOCK MSGALN+1 ;POINTER TO LAST FREE PCB ON EACH LIST
|
||
> ;END IFN M.ANF
|
||
SUBTTL ANF-10 NETWORK DATA BASE -- DUMMY GLOBALS
|
||
|
||
|
||
$LOW
|
||
|
||
IFE M.ANF,<
|
||
|
||
EQUATE (GLOBAL,CPOPJ##,<NTLCKJ,NTCHCK,NTLERR,NETSEC,NTDSTP,CLRTTY,SRCNDB>)
|
||
EQUATE (GLOBAL,CPOPJ##,<NTDIDA,TSTNET,ZAPNET>)
|
||
EQUATE (GLOBAL,CPOPJ##,<NETINI,NETDEV,TYPNDB,D8EINI,KDP.>)
|
||
EQUATE (GLOBAL,CPOPJ##,<GENNET,NET2ND,NETCTC,STBSCA>)
|
||
EQUATE (GLOBAL,CPOPJ##,<BRKFEK,FEKINT,FEKCPS,FEKCPW>)
|
||
EQUATE (GLOBAL,CPOPJ##,<CWHANF,NODE.A,NODE.S,NODE.U,HOST.U>)
|
||
EQUATE (GLOBAL,CPOPJ1##,<NETOPR,NETASG>)
|
||
|
||
EQUATE (GLOBAL,0,<NETDDB,NETNDB,NDBMXL,NDBSNM,NDAMXL,AOTMXL>)
|
||
EQUATE (GLOBAL,0,<NETDSP,NETCHN,NTFCHN,NDBNNM,.NTMXL>)
|
||
|
||
EQUATE (GLOBAL,NULGTB##,<.GTNDA,OBJTAB,NETGTT,NDBTBL>)
|
||
|
||
STBOPR::PUSH P,U ;SAVE LDB
|
||
MOVE U,OPRLDB## ;GET CENTRAL (ONLY) OPR LDB
|
||
LDB T1,LDPLNO## ;GET LINE NUMBER
|
||
PJRST UPOPJ## ;RESTORE AC AND RETURN.
|
||
> ;END IFE M.ANF
|
||
|
||
;FLAG WHICH INDICATES A CATASTROPHIC ERROR HAS OCCURED (PAR ERR,
|
||
;NXM, ETC.) USED BY ERRCON AND ZAPNET TO PREVENT WEM STOPCODES
|
||
;MUST BE DEFINED AND USABLE IN ALL MONITORS
|
||
NETZAP::EXP 0
|
||
SUBTTL DECNET NETWORK DATA BASE -- FEATURE TEST CHECK
|
||
|
||
|
||
IFN M.DECN,<
|
||
|
||
IFE FTDECNET,<
|
||
PRINTX ? DECnet will not work with FTDECNET = 0
|
||
PRINTX ? DECnet will not be included in this monitor
|
||
M.DECN==:0
|
||
> ;END IFN FTDECNET
|
||
|
||
;FORCE LOADING DECNET
|
||
EXTERN D36INI, NTMAN, SCUUUO, SCTNSF
|
||
EXTERN RTRINI, DNDINI, NSPINI
|
||
|
||
IFN M.DNVT,<EXTERN NRTINI> ;FORCE LOADING NRT/CTERM
|
||
IFE M.DNVT,<
|
||
EQUATE (GLOBAL,CPOPJ##,<NRTLFC,NRTNFL,NRTINI>)
|
||
NETDID==:NOPDNC##
|
||
CWHNRT==:CWHNCN##
|
||
NRTCHP::!
|
||
NRTSJP::EXP 0
|
||
> ;END IFE M.DNVT
|
||
|
||
IFN FTCIDNET,<EXTERN CIDLL> ;FORCE LOADING DECNET/CI
|
||
> ;END IFN M.DECN
|
||
SUBTTL DECNET NETWORK DATA BASE -- MONGEN PARAMETERS
|
||
|
||
|
||
$LOW
|
||
|
||
IFN M.DECN,<
|
||
|
||
;EXTENSIBLE BITMAP MEMORY REQUIREMENTS FOR DECNET
|
||
|
||
ND M.DNCS,4 ;CHUNK SIZE IN WORDS
|
||
ND M.DNSZ,30000 ;INITIAL ALLOCATION AMOUNT IN WORDS
|
||
ND M.DNTH,4000 ;THRESHOLD ALLOCATION AMOUNT IN WORDS
|
||
ND M.DNIN,4000 ;INCREMENTAL ALLOCATION AMOUNT IN WORDS
|
||
ND M.DNMN,10000 ;MINIMUM ALLOCATION AMOUNT IN WORDS
|
||
ND M.DNMX,100000 ;MAXIMUM ALLOCATION AMOUNT IN WORDS
|
||
|
||
XP DCNSIZ,<PAGSIZ*<<M.DNSZ+PG.BDY>/PAGSIZ>>
|
||
XP DCNMAX,<PAGSIZ*<<M.DNMX+PG.BDY>/PAGSIZ>>
|
||
|
||
|
||
;DECNET ALLOCATION CONTROL BLOCK
|
||
|
||
.LINK .LKACB,DCNACB ;ADD TO SYSTEM-WIDE LINKED LIST
|
||
DCNACB::EXP 0 ;ADDRESS OF NEXT ALLOCATION CONTROL BLOCK
|
||
SIXBIT /DECNET/ ;ALLOCATION USER
|
||
EXP M.DNCS ;CHUNK SIZE IN WORDS
|
||
Z (MS.DCN) ;SECTION NUMBER OF ALLOCATION
|
||
EXP 0 ;CURRENT USED AMOUNT IN WORDS
|
||
EXP 0 ;HIGH WATER MARK IN WORDS
|
||
EXP DCNSIZ ;INITIAL ALLOCATION AMOUNT IN WORDS
|
||
EXP M.DNTH ;THRESHOLD ALLOCATION AMOUNT IN WORDS
|
||
EXP M.DNIN ;INCREMENTAL ALLOCATION AMOUNT IN WORDS
|
||
EXP M.DNMN ;MINIMUM ALLOCATION AMOUNT IN WORDS
|
||
EXP DCNMAX ;MAXIMUM ALLOCATION AMOUNT IN WORDS
|
||
EXP 0 ;ADDRESS OF ALLOCATION HEADER BLOCK
|
||
> ;END IFN M.DECN
|
||
IFN M.DECN,<
|
||
|
||
RADIX 10 ;NETWORK MANGLEMENT IS DECIMAL
|
||
|
||
ND %RTMXN,1023 ;MAXIMUM NODE NUMBER
|
||
ND %RTMX3,255 ;DEFAULT MAXIMUM NODE ADDRESS FOR ROUTER
|
||
ND %RTTM3,15*1000 ;DEFAULT HELLO FREQUENCY TIMER
|
||
ND %RTTM4,30*1000 ;DEFAULT NODE LISTENER TIMER
|
||
ND %RTITM,1*60*1000 ;INITIALIZATION TIMER
|
||
ND %RTT3M,2 ;HELLO TIMER MULTIPLIER FOR NON-BROADCAST
|
||
ND %RTB3M,3 ;HELLO TIMER MULTIPLIER - BROADCAST ADJACENCIES
|
||
ND %RTCST,1 ;DEFAULT COST FOR CIRCUIT
|
||
ND %RTMXR,16 ;DEFAULT MAXIMUM NUMBER OF ROUTERS ON AN NI
|
||
ND %RTBRA,32 ;MAXIMUM NUMBER OF BROADCAST ROUTER ADJACENCIES
|
||
ND %RTBEA,64 ;MAXIMUM NUMBER OF END NODE ADJACENCIES
|
||
ND %RTCTO,60*1000 ;ENDNODE CACHE TIMEOUT
|
||
ND %RTPRI,5 ;OUR PRIORITY TO BE THE DESIGNATED ROUTER
|
||
ND %RTMXC,100 ;MAXIMUM LINE COST
|
||
ND %RTMXH,16 ;MAXIMUM HOPS
|
||
ND %RTMXV,20 ;DEFAULT MAXIMUM VISITS
|
||
ND %RTTM1,10*60*1000 ;DEFAULT MAXIMUM ROUTING MSG INTERVAL (P-P)
|
||
ND %RTBT1,40*1000 ;DEFAULT MAXIMUM ROUTING MESSAGE INTERVAL (NI)
|
||
ND %RTBSZ,576 ;PUBLISHED EXECUTOR DEFAULT BLOCK SIZE (BYTES)
|
||
IFNDEF %RTXPW,<DEFINE %RTXPW,<RTRPW <DECNET20>>> ;DEFAULT ROUTER PASSWORD
|
||
|
||
|
||
DEFINE RTRPW(PW),<
|
||
.ZZN==0
|
||
IRPC PW,<.ZZN==.ZZN+1>;;COUNT CHARS IN PWD
|
||
IFG .ZZN-RTRXPM,<PRINTX ?ROUTER PASSWORD TOO LONG>
|
||
.ZZW==<.ZZN>B7;; LEADING BYTE COUNT
|
||
.ZZC==1;; CHAR POSITION OF NEXT CHAR
|
||
IRPC PW,<.ZZW==.ZZW!<"PW">B<7+<.ZZC*8>>
|
||
IFE .ZZC-3,<EXP .ZZW
|
||
.ZZW==0
|
||
.ZZC==-1>
|
||
.ZZC==.ZZC+1>
|
||
IFN .ZZC,<EXP .ZZW>
|
||
PURGE .ZZN,.ZZW,.ZZC
|
||
> ;END DEFINE RTRPW
|
||
|
||
RTRXPM==^D64 ;MAXIMUM NUMBER OF BYTES IN A VERIFICATION PSWD
|
||
RTRXPW::%RTXPW
|
||
BLOCK <<RTRXPM+1+3>/4>-<.-RTRXPW>;ALLOCATE FOR MAX
|
||
;THESE ARE LLINKS DEFAULT PARAMETER VALUES:
|
||
|
||
ND %NSDLY,3*16 ;DELAY FACTOR
|
||
ND %NSWGT,10 ;DELAY WEIGHT
|
||
ND %NSINA,120 ;INACTIVITY TIMER
|
||
ND %NSRTH,10 ;RETRANSMISSION THRESHOLD
|
||
ND %NSFLR,1000 ;DELAY FLOOR
|
||
ND %NSRUF,10000 ;DELAY ROOF
|
||
ND %NSADL,2 ;ACK DELAY IN SECONDS
|
||
|
||
|
||
;THESE ARE SESSION CONTROL DEFAULT PARAMETER VALUES:
|
||
|
||
ND %SCINT,30*1000 ;INCOMING TIMER VALUE
|
||
ND %SCOTT,1*60*1000 ;OUTGOING TIMER VALUE
|
||
|
||
|
||
;THESE ARE THE DATA LINK LAYER DEFAULT PARAMETER VALUES:
|
||
|
||
ND %DLBSZ,576 ;DEFAULT MAXIMUM BUFFER SIZE (BYTES)
|
||
|
||
|
||
RADIX 8 ;LCG IS OCTAL
|
||
SUBTTL DECNET NETWORK DATA BASE -- NOTES ON MONGEN PARAMETER SELECTION
|
||
|
||
|
||
COMMENT ~
|
||
|
||
This novel is intended in guiding network managers who want to fine tune
|
||
their networks for performance. A word of caution before we start: The
|
||
parameters as currently defaulted were what we had set during field
|
||
test. We know that in the majority of cases, these parameters work to
|
||
most DEC systems even though not with optimal performance. Modifying these
|
||
parameters can cause disaster, so understand what you are attempting
|
||
beforehand, and be conservative in modifying them. Be aware that DEC may
|
||
not agree with your settings, and will request them be set back to standard
|
||
values before debugging any problems in your network.
|
||
|
||
The critical timer in this case is the AVERAGE DELAY to a node. This is
|
||
kept by LLINKS by timestamping each data message it sends, and waiting
|
||
for the ACK to come back. When it has the ack, it has the delay for that
|
||
particular message, and it averages that delay into the average delay.
|
||
|
||
This delay time is used as a base in computing when to retransmit, and
|
||
when to decide that a link has gone sour, and as such is the single most
|
||
important timer as far as performance is concerned. Below is a description
|
||
of some parameters controlling how this delay is calculated.
|
||
|
||
%NSFLR - Changing this will probably only affect nodes which are relatively
|
||
close to this node. The desirable effect of lowering this is to
|
||
speed up recovery after a lost message, since the lost message will
|
||
be re-trasmitted much sooner. The undesirable effect is that links
|
||
will break if the delay changes much.
|
||
|
||
%NSRUF - Changing this will probably only affect problems involving congestion.
|
||
Lowering this will decrease the effect that congestion has on a link,
|
||
but will increase the number of messages sent, which can aggravate
|
||
the congestion. If congestion gets too bad, not enough messages get
|
||
through to keep the link alive, and it breaks.
|
||
|
||
%NSWGT - This affects how much a single delay will affect the average delay.
|
||
Increasing this causes the delay to change more slowly, lowering it
|
||
causes the delay to track reality more closely. Tremble before you
|
||
change this one - Lowering it can cause positive feedback in your
|
||
network with delay and retransmissions oscillating out of control,
|
||
while increasing it can cause links to be unable to adapt to changing
|
||
conditions.
|
||
|
||
%NSRTH - Retransmission threshold. This controls the number of times we
|
||
re-send a message before giving up. Increasing this will give the
|
||
other side a better chance of keeping your link alive, but can
|
||
aggravate congestion problems.
|
||
|
||
%NSDLY - Delay factor. This multiplied by the average delay to a node is
|
||
used as the retransmission timer. Note that this factor is kept in
|
||
1/16ths, so the default is 3 even though network management says
|
||
48.
|
||
|
||
The main theme throughout this novel is congestion. If congestion did not
|
||
exist, we would recommend lowering %NSFLR and %NSWGT, and increasing %NSRTH.
|
||
The term congestion, as used in this novel, indicates the situation where
|
||
some node, possibly an intermediate, possibly a destination, does not have
|
||
buffers for all the messages that he is receiving, and must discard some.
|
||
The destination does not receive these messages, the source does not receive
|
||
an ack for them, so must eventually retransmit them.
|
||
|
||
The reasons congestion can occurr are numerous; Some of the more common ones
|
||
are:
|
||
|
||
1) A node with a high speed line and a low speed line: Messages are coming
|
||
in the high speed line to be retransmitted on the low speed line faster
|
||
than the low speed line can handle. The messages pile up, and eventually
|
||
some of them are dropped.
|
||
|
||
2) A node with cross-traffic. Messages going from node A to node B through
|
||
node C have no trouble, until messages from node D going to node E also
|
||
through node C eat up buffers.
|
||
|
||
3) Many links to same node. Since flow control is managed on a per-link basis,
|
||
there is nothing to keep many links from transmitting their limit all at
|
||
the same time. If the source and destination are the same type of system,
|
||
often this isn't a problem since they both have the same limit on the number
|
||
of buffers. When they are of different type, and the source has more
|
||
buffers available than the destination, the destination cannot process them
|
||
all in time.
|
||
|
||
We cannot predict all situations in the field, but here are some suggested
|
||
scenarios, and suggestions as to ways of improving performance:
|
||
|
||
Scenario A: TOPS10 - DTE - DN20/MCB - DMR(56kb) - VAX
|
||
Continual file transfer activity, spurts of NRT (terminal)
|
||
activity. Occasional congestion loss caused by the spurts of
|
||
NRT activity (reason 3).
|
||
|
||
In this case, it could be possible to act as if congestion didn't
|
||
exist, and lower %NSFLR, %NSWGT, and %NSDLY. Since congestion is
|
||
fleeting, the retransmissions will occurr after the congestion
|
||
has gone away (the user has stopped banging away at his terminal)
|
||
and should not cause problems.
|
||
|
||
Scenario B: KL - DTE - DN20/MCB - DMR(56kb) - VAX
|
||
\ KDP(9600) - RSX
|
||
File transfer activity from KL to RSX and VAX. NRT activity, but
|
||
irrelevant. High congestion loss to RSX due to low speed line from
|
||
DN20 to RSX.
|
||
|
||
In this case, congestion is the dominant theme. The DN20's buffer
|
||
space is always going to be busy, since every time the RSX system
|
||
sends data requests (credits, permissions) the KL will be able to
|
||
fill the MCB before the MCB will have a chance to finish transmitting
|
||
a single message. Depending on the number of buffers in the MCB,
|
||
this will probably work fine until other network activity occurs.
|
||
When other network activity occurrs (such as file transfer to the
|
||
vax, or terminal activity), congestion loss will start up. In this
|
||
case, since the actual delay of messages isn't increasing, you want
|
||
to increase %NSWGT to avoid changing wildly every time a message is
|
||
retransmitted. You also want to set %NSRUF to provide an upper limit
|
||
on how high the delay can get. The danger here is setting it so low
|
||
that congestion hasn't been relieved by the time we retransmit, or
|
||
setting it so high that performance goes to zero.
|
||
|
||
Scenario C: TOPS10 - DTE - DN20/MCB - DMR(56kb) - DN20/MCB - TOPS20
|
||
File transfer activity from TOPS10 to TOPS20. Performance varies
|
||
wildly depending on load on TOPS20 system, including broken links
|
||
if the load gets too high on the TOPS20 system.
|
||
|
||
The dominant theme here is the fact that TOPS20 (5.1 and 6.0) will
|
||
vary the delay for message response. If the load is light, and the
|
||
job receiving messages is runnable, the turnaround will be fast. If
|
||
the job gets blocked or pages out, the acks will not be forthcoming
|
||
until the job unblocks and receives the messages, which can be a
|
||
long time. We have observed cases where the delay to a TOPS20 system
|
||
was less that 200 milliseconds, and suddenly a message didn't receive
|
||
an ack for over 20 seconds - Apparantley the job was paged out, and
|
||
there were other processes with higher priority running.
|
||
|
||
In this case, the only thing you can do is to protect yourself against
|
||
the delay changing drastically. We would suggest that you should limit
|
||
yourself to attempting to keep the link open and not worry about speed.
|
||
In this case, increase %NSFLR to something large, which will cause
|
||
retransmissions to take a long time, but will allow the link to survive
|
||
long periods with no activity. ALso increase %NSRTH, to increase even
|
||
further the odds of living through a drought of messages.
|
||
|
||
These scenarios provide idealized situations. Customers are likely to have
|
||
a combination of the above situations, or something else entirely, and
|
||
possibly the above mentioned controls are not enough. A situation where a
|
||
customer needs different controls over different nodes might occur, for
|
||
example. The routine in LLINKS is UPDELAY, and the location of interest
|
||
to anyone wanting to patch this is UPDLY1, where we have in T1 the new delay
|
||
to the node. At this point we are about to range check against NSPFLR and
|
||
NSPRUF, and then store it away. If you are attempting to insert some extra
|
||
site-dependant knowledge into this algorithm, this would be the place to
|
||
do it.
|
||
|
||
There are two tools supplied which should help you understand what is
|
||
happening in your network - DNSNUP/DNTATL and DCNSPY. DNSNUP will write out
|
||
to disk EVERY message that passes through ROUTER. This output can be later
|
||
be converted to readable form with DNTATL, so you can analyze where messages
|
||
got lost and possibly why. DCNSPY is a DPY tool which allows you to watch
|
||
links in real time. The fields displayed are defined in D36PAR, where the
|
||
convention is: Five character name, first two characters are the name of
|
||
the structure, last three characters are the name of the field. The structure
|
||
is found as "BEGSTR xx", and the field within is found as either "WORD xxx"
|
||
or "FIELD xxx", depending on its size.
|
||
|
||
There are a limited number of comments/detailed descriptions for the fields
|
||
available within DCNSPY with the COMMENT switch. Since these descriptions
|
||
are at least two years old, it may be possible to find a more up-to-date
|
||
or complete description in D36PAR itself.
|
||
|
||
END COMMENT ~
|
||
SUBTTL DECNET NETWORK DATA BASE -- INTERLOCKS
|
||
|
||
|
||
;D36PIN AND D36PIF - TAKE AND RELEASE THE DECNET INTERLOCK.
|
||
;CALL: JSP CX,D36PIF/D36PIN
|
||
; <RETURN> ;WITH/WITHOUT THE INTERLOCK
|
||
;
|
||
;PRESERVES ALL ACS EXCEPT CX
|
||
;NOTE - CX IS A DECNET SCRATCH AC WHICH IS HARDWIRED TO BE R
|
||
|
||
CX==R
|
||
|
||
D36PIF::CONO PI,NETPIF## ;MAKE SURE NOONE ON THIS CPU INTERRUPTS US
|
||
SKIPGE D36LCK ;GIVE OTHER CPUS A CHANCE
|
||
AOSE D36LCK ;MAKE SURE NOONE ON ANOTHER CPU GETS US
|
||
JRST .-2 ;WAIT
|
||
APRID D36AID ;RECORD WHO HAS THE INTERLOCK
|
||
MOVEM CX,D36PPC ;SAVE CALLING PC FOR TRACKING PURPOSES
|
||
JRST (CX) ;RETURN TO CALLER WITH INTERLOCK SET
|
||
|
||
D36PIN::SETZM D36AID ;WE NO LONGER OWN THE INTERLOCK
|
||
SETOM D36LCK ;ALLOW OTHER CPU IN
|
||
CONO PI,NETPIN## ;ALLOW PENDING INTERRUPTS ON THIS CPU IN
|
||
JRST (CX) ;RETURN
|
||
|
||
$LOW
|
||
|
||
D36LCK::-1 ;ACTUAL AOSED WORD
|
||
D36AID::-1 ;KEEPS TRACK OF WHICH CPU HAS THE INTERLOCK
|
||
D36PPC::-1 ;KEEPS TRACK OF WHERE WE GOT THE INTERLOCK
|
||
|
||
PURGE CX
|
||
SUBTTL DECNET NETWORK DATA BASE -- LINE INITIALIZATION
|
||
|
||
|
||
;ROUTINES TO INITIALIZE LINES, AND ASK ROUTER TO INTIALIZE DECNET LINES
|
||
|
||
DEFINE DEFLIN,<
|
||
IFN FTKS10,<
|
||
DEFKS
|
||
>
|
||
IFN FTKL10,<
|
||
CPUNN=0
|
||
REPEAT M.CPU,<
|
||
IFN FTKL10,DEFKL(\CPUNN)
|
||
CPUNN==CPUNN+1
|
||
> ;END OF REPEAT M.CPU
|
||
> ;END OF IFN FTKL10
|
||
> ;END OF DEFINE DEFLIN
|
||
|
||
DEFINE DEFKL(CPU),<
|
||
> ;END OF DEFINE DEFKL
|
||
|
||
DEFINE DEFKS,<
|
||
KDPNN==0
|
||
REPEAT M.KDUP,<
|
||
DEFKDP(\KDPNN)
|
||
KDPNN==KDPNN+1
|
||
>
|
||
DMRNN==0
|
||
REPEAT M.DMRN,<
|
||
DEFDMR(\DMRNN)
|
||
DMRNN==DMRNN+1
|
||
>
|
||
> ;END OF DEFINE DEFKS
|
||
|
||
DEFINE DEFKDP(KDPNO),<
|
||
IFE M.'KDPNO'KDP-DD.DEC,<
|
||
MOVEI T1,DC.IOC ;;FUNCTION INITIATIZE CIRCUIT BLOCK
|
||
SETZ T2, ;;NO DNADLL ID
|
||
MOVE T3,[1B0+<LD.KDP_9+0,,KDPNO_9+0>] ;;GET CURRENT LINE ID
|
||
SNCALL (KDIPPI##,MS.HGH) ;;TELL DNADLL ABOUT THIS LINE
|
||
JFCL ;;IGNORE ERROR
|
||
>
|
||
> ;END DEFINITION OF DEFKDP
|
||
|
||
DEFINE DEFDMR(DMRNO),<
|
||
IFE M.'DMRNO'DMR-DD.DEC,<
|
||
MOVEI T1,DC.IOC ;;FUNCTION INITIATIZE CIRCUIT BLOCK
|
||
SETZ T2, ;;NO DNADLL ID
|
||
MOVSI T3,(1B0+<LD.DMR_9+DMRNO,,0>) ;;GET CURRENT LINE ID
|
||
SNCALL (DMIPPI##,MS.HGH) ;;TELL DNADLL ABOUT THIS LINE
|
||
JFCL ;;IGNORE ERROR
|
||
>
|
||
> ;END DEFINITION OF DEFDMR
|
||
|
||
$XHIGH
|
||
|
||
D36LIN::DEFLIN ;DEFAULT THE LINES WHICH HAVE TO BE
|
||
POPJ P, ;RETURN
|
||
$HIGH
|
||
SUBTTL DECNET NETWORK DATA BASE -- THE "NOBODY" KONTROLLER
|
||
|
||
|
||
;NOBDSP SERVES BASICALLY AS A PLACE-HOLDER FOR THE VARIOUS LINE
|
||
;DRIVERS TO DISPATCH TO FOR USER "NOBODY".
|
||
|
||
NOBDSP::
|
||
NOBSTP: STOPCD CPOPJ##,DEBUG,NOB, ;++ "NOBODY" KONTROLLER DISPATCH GOT CALLED
|
||
>;END OF IFN M.DECN
|
||
SUBTTL DECNET NETWORK DATA BASE -- DUMMY GLOBALS
|
||
|
||
|
||
IFE M.DECN,<
|
||
|
||
EQUATE (GLOBAL,CPOPJ##,<DCNMOV,DCNSEC,DCNJIF,DDIPPI,DTIPPI,KDIPPI,DMIPPI>)
|
||
EQUATE (GLOBAL,CPOPJ##,<NTMAN,SCUUUO,SCTPSI,SCURST,SCUPOP,SCULGO,RTRDSP>)
|
||
EQUATE (GLOBAL,CPOPJ##,<DNET,D36INI,D36LIN,NETDID>)
|
||
EQUATE (GLOBAL,CPOPJ##,<CWHNRT,NODE.D>)
|
||
|
||
EQUATE (GLOBAL,0,<DCNGTL>)
|
||
EQUATE (GLOBAL,NULGTB##,<DCNGTB>)
|
||
EQUATE (GLOBAL,MONORG,<DCNLOC,DCNAEB>)
|
||
|
||
EQUATE (GLOBAL,S..NDL,<DNCPYW,DNLENG,RTNSLS,NOBDSP>)
|
||
EQUATE (GLOBAL,DCNZER,<RTRHOM,RTRADR,RTRHIO>)
|
||
|
||
;THIS STOPCODE CALLED IF WE TRY TO CALL A DECNET ROUTINE WITH NO DECNET
|
||
STOPCD .,STOP,NDL ;++ NO DECNET LOADED
|
||
|
||
DCNZER: EXP 0
|
||
|
||
> ;END IFE M.DECN
|
||
SUBTTL DECTAPE DATA BASE FOR DTASER
|
||
|
||
$LOW
|
||
|
||
;DECTAPE ENTRY POINT AND BIT DEFINITIONS
|
||
|
||
IFG M.DTXN,<
|
||
ND M.DTAE,0 ;DEFAULT TO NO DECTAPE ERROR LOGGING
|
||
EXTERN DTASER ;TD10 WITH NEW FORMAT
|
||
> ;END IFG M.DTXN
|
||
|
||
IFE M.DTXN,<
|
||
;IF NO DECTAPES, SATISFY GLOBALS BY DEFINING DUMMIES
|
||
DTASEC==:CPOPJ##
|
||
DTADDB==:CPOPJ## ;THIS WORKS BECAUSE SYSINI DOES A
|
||
; MOVEI W,DTADDB##
|
||
DTXINI==:0 ; FOLLOWED BY AN XCT DTXINI##(W)
|
||
DSCON==:0
|
||
LVFLAG==:0
|
||
USEWRD==:0
|
||
DCONS==:0
|
||
DTADSP==:0
|
||
|
||
OWNDTC==:CPOPJ##
|
||
SCDDT==:CPOPJ##
|
||
DTXFRE==:CPOPJ##
|
||
|
||
$HIGH
|
||
UNWDTC::
|
||
SETZ T3,
|
||
POPJ P,
|
||
$LOW
|
||
|
||
>
|
||
DEFINE DTDDB(X,Y,CPUN)<
|
||
|
||
SUBTTL INTERRUPT HEAD FOR DT'X
|
||
;FLAGS LEVEL CODE
|
||
;CONTROL DEPENDENT PORTION OF DECTAPE SERVICE
|
||
DEFINE CDC (C,B) <
|
||
|
||
C=:.-DT'X'DDB ;RELATIVE LOCATION WITHIN CONTROL BLOCK
|
||
B>
|
||
|
||
;MODEL DEVICE DATA BLOCK
|
||
DTXDDB=:.-DT'X'DDB
|
||
|
||
DT'X'DDB::SIXBIT /DT'X'0/ ;(0) - DEVNAM
|
||
XWD <^D6*HUNGST>,200 ;(1) - DEVCHR
|
||
0 ;(2) - DEVIOS
|
||
EXP DTADSP## ;(3) - DEVSER
|
||
XWD 1107,154403 ;(4) - DEVMOD
|
||
0 ;(5) - DEVLOG
|
||
0 ;(6) - DEVBUF
|
||
0 ;(7) - DEVIAD
|
||
0 ;(10) - DEVOAD
|
||
0 ;(11) - DEVSTS
|
||
XWD .TYDTA*.TYEST,0 ;(12) - DEVSTA
|
||
0 ;(13) - DEVXTR
|
||
0 ;(14) - DEVEVM
|
||
0 ;(15) - DEVPSI
|
||
0 ;(16) - DEVESE
|
||
0 ;(17) - DEVHCW
|
||
BYTE (3)CPUN(33)0 ;(20) - DEVCPU
|
||
0 ;(21) - DEVISN
|
||
0 ;(22) - DEVDRV
|
||
0 ;(23) - DEVJOB
|
||
0 ; - DEVFIL
|
||
0 ; - DEVEXT
|
||
0 ; - FSTBLK
|
||
DT'X'DIR+DT'X'DDB ; - DLOC
|
||
0 ; - IBLK
|
||
0 ; - OBLK
|
||
0 ; - DISPAD
|
||
0 ; - DMPLST
|
||
0 ; - SVDWRD
|
||
0 ; - DJOTOP
|
||
0 ; - DJOBOT
|
||
0 ; - BADCOM
|
||
0 ; - DTXBLK
|
||
0 ; - DTXRID
|
||
0 ; - DTXWRD
|
||
0 ; - DTXWWT
|
||
|
||
|
||
|
||
DT'X'DIR==:.-DT'X'DDB
|
||
BLOCK 200
|
||
XP DT'X'DDS,.-DT'X'DDB
|
||
;DATA LEVEL CODE...CHANNEL 1 OR 2 USUALLY
|
||
|
||
D'X'DINT::CONSO DAS,1 ;DATA INTERRUPT FOR THIS CONTROL?
|
||
JRST . ;NO- PROCEED DOWN CHAIN
|
||
SKIPN DT'X'USE ;EXPECTING AN INTERRUPT?
|
||
JRST D'X'DINT+1 ;NO, IGNORE IT
|
||
|
||
SKIPE D'X'DSRC ;ARE WE SEARCHING FOR BLOCK NUMBERS?
|
||
JRST D'X'SRCH ;YES
|
||
D'X'IOWD:BLKI DAC,DT'X'PNT ;EXECUTE BLKI OR BLKO FOR THIS UNIT
|
||
JRST D'X'DTHR ;POINTER RAN OUT
|
||
D'X'DCTN:JFCL ;GOING REVERSE?
|
||
XJEN D'X'DCHL##
|
||
|
||
SOS DT'X'PNT ;YES- DECREMENT POINTER
|
||
SOS DT'X'PNT ;TWICE
|
||
XJEN D'X'DCHL##
|
||
|
||
D'X'DTHR:SKIPE D'X'DDMP ;DUMP MODE POINTER RAN OUT?
|
||
JRST D'X'DMPA ;YES- ADVANCE POINTER
|
||
D'X'DFNS:CONO DAS,770001 ;SEND OUT FUNCTION STOP IF THROUGH
|
||
XJEN D'X'DCHL##
|
||
|
||
|
||
D'X'DSRC:CDC DTXSRC,0 ;SET NEGATIVE WHEN READING BLOCK NUMBERS
|
||
|
||
;HERE WHEN READING BLOCK NUMBERS AT DATA INTERRUPT LEVEL
|
||
|
||
D'X'SRCH:JSR D'X'DSAV## ;SAVE ACS
|
||
D'X'CCNC:CONI DAC,W ;READ FLAGS REGISTER
|
||
HRLZS W ;PUT MOST FLAGS INTO LEFT HALF
|
||
HRRI W,DT'X'DDB ;POINT TO THIS CONTROL BLOCK
|
||
JRST SRCH## ;DO THE SEARCH
|
||
|
||
D'X'DMPA:JSR D'X'DSAV## ;SAVE ACS
|
||
HRRZI W,DT'X'DDB ;POINT TO CONTROL A
|
||
JRST DMPADV## ;PROCESS THE EXHAUSTED BLKI/O
|
||
|
||
XP DTSFNS,D'X'DFNS-DT'X'DDB
|
||
XP DXDINT,D'X'DINT-DT'X'DDB
|
||
XP DXIOWD,D'X'IOWD-DT'X'DDB
|
||
XP DXDCTN,D'X'DCTN-DT'X'DDB
|
||
D'X'CNUM:CDC DXCNUM,<<DAC>B11>;CONTROL NUMBER
|
||
;FLAGS LEVEL INTERRUPT HEAD...
|
||
DT'X'INT::CONSO DAS,770000 ;INTERRUPT FOR THIS CONTROL?
|
||
JRST . ;NO- PROCEED DOWN CHAIN
|
||
SKIPN DT'X'USE
|
||
JRST DT'X'INT+1
|
||
JSR DT'X'SAV## ;YES- SAV ACCUMULATORS FOR THIS LEVEL
|
||
CDC DXCCNT,<CONI DAC,T1>;READ FLAGS INTO T1
|
||
CDC DTSCNI,<CONI DAS,T4>;READ STATUS INTO T4
|
||
HRLZI W,(T1) ;PUT FLAGS (RH) INTO W (LH)
|
||
HRRI W,DT'X'DDB ;ADDRESS OF CONTROL DEPENDANT BLOCK
|
||
JRST DTXINT## ;TO NON-CONTROL DEPENDANT SECTION
|
||
|
||
CDC DTSCN2,<CONI DAS,T1>;STATUS REGISTER INTO T1
|
||
|
||
;CONSTANTS REQUIRED FOR EACH CONTROL...
|
||
CDC BFPNTR,<IOWD 200,D'X'BUF+1>
|
||
DT'X'USE:CDC USEWRD,0
|
||
CDC ADRPRG,0
|
||
DT'X'PNT:CDC PNTR,0
|
||
CDC DISTNC,0
|
||
CDC BLOCK,0
|
||
CDC QUANTM,0
|
||
CDC DSCON,0
|
||
CDC RVERS,0
|
||
CDC ERRCNT,0
|
||
CDC FNDTMP,0
|
||
CDC IOWRIT,0
|
||
CDC TURNCT,0
|
||
CDC BLKWRD,0
|
||
CDC LVFLAG,0
|
||
CDC BLKCNT,0
|
||
CDC SVPNTR,0
|
||
CDC USPNTR,0
|
||
CDC DIRCTN,0
|
||
DT'X'BUF=.-DT'X'DDB
|
||
D'X'BUF:CDC BUF,<BLOCK 200> ;A CONTROL MONITOR BUFFER
|
||
CDC DTXCON,<CONO DAC,(T1)> ;CONDITIONS OUT - A CONTROL A
|
||
CDC DTXSTP,<CONO DAC,400000> ;STOP SELECTED TAPE
|
||
CDC DTXTRN,<CONO DAC,DTTURN##> ;TURN SELECTED TAPE AROUND
|
||
CDC DTSCO2,<CONO DAS,2(T4)>
|
||
CDC DTSENJ,<CONO DAS,670000> ;ENABLE JOB DONE
|
||
|
||
CDC DTXREQ,-1 ;# OF WAITERS
|
||
CDC DTXWAT,0 ;REQUEST INTERLOCK FOR THIS CONTROL
|
||
|
||
D'X'DDMP:CDC DTXDMP,0 ;SET TO -1 WHEN READING IN DUMP MODE
|
||
XP DTXIOG,.-DT'X'DDB
|
||
CONO DAC,DTBOTH##(T2) ;START UP DECTAPE
|
||
CONO DAS,770000 ;ENABLE INTERRUPT CONDITIONS
|
||
POPJ P, ;RETURN
|
||
CDC DTXSF,<CONSZ DAC,100000> ;SKIP IF GOING FORWARD
|
||
CDC DTXDSL,<CONO DAC,410000> ;STOP AND DESELECT TAPE
|
||
CDC DTXDST,<CONO DAC,10000> ;DESELECT TAPE
|
||
CDC DTXSTO,<CONO DAC,430000(T1)> ;STOP AND DESELECT
|
||
CDC DTXTR2,<CONO DAC,230200(T1)> ;TURN TAPE, SEARCH FOR BLOCKS
|
||
CDC DTXINI,<CONO DAC,0> ;SHUT DOWN CONTROL
|
||
CDC DTXDTI,<DATAI DAC,T1> ;READ A BLOCK NUMBER
|
||
|
||
XP DCONS,.-DT'X'DDB
|
||
>;END DEFINE DTDDB
|
||
|
||
DEFINE GENDTA(CPU,CPUN)<
|
||
ZZZZ==0
|
||
REPEAT M'CPU'TD10,<
|
||
IFE ZZZZ&1,<DAC==320>
|
||
IFN ZZZZ&1,<DAC==330>
|
||
DAS==DAC+4
|
||
DTDDB (\"ZZZ,\<ZZZ&7>,CPUN)
|
||
ZZZ==ZZZ+1
|
||
ZZZZ==ZZZZ+1
|
||
>;END REPEAT M'CPU'TD10
|
||
>;END DEFINE GENDTA
|
||
|
||
ZZ==0
|
||
ZZZ=="A"
|
||
REPEAT M.CPU,<
|
||
GENDTA (\ZZ,ZZ)
|
||
ZZ==ZZ+1
|
||
>;END REPEAT M.CPU
|
||
|
||
KONEND:: ;END OF KONTROLLER DATA BLOCKS
|
||
|
||
|
||
;DDB MAGIC CELLS
|
||
FSTBLK==:DEVPPN
|
||
DLOC==:FSTBLK+1 ;LH==BLOCK# DURING DEAD RECKONING,RH==ADDRESS OF DIR
|
||
IBLK==:FSTBLK+2 ;LH==INDEX OF INPUT FILE(1-27),RH==BLOCK# TO READ NEXT
|
||
OBLK==:FSTBLK+3
|
||
DISPAD==:FSTBLK+4
|
||
DMPLST==:FSTBLK+5
|
||
SVDWRD==:FSTBLK+6
|
||
DJOTOP==:FSTBLK+7
|
||
DJOBOT==:FSTBLK+10
|
||
BADCOM==:FSTBLK+11
|
||
DTXBLK==:BADCOM+1 ;NUMBER OF LAST I/O BLOCK,,CONI DTS BITS
|
||
DTXRID==:DTXBLK+1 ;SIXBIT REEL ID
|
||
DTXWRD==:DTXRID+1 ;WORDS READ
|
||
DTXWWT==:DTXWRD+1 ;WORDS WRITTEN
|
||
SUBTTL DA28 DATA BASE (XTCSER)
|
||
|
||
|
||
IFN M.XTC,<
|
||
|
||
|
||
XP MX11BF,^D129 ;MAXIMUM PDP-11 IMAGE BINARY BUFFER SIZE
|
||
DEFINE XTCDEF (X),<
|
||
IFNDEF XT'X'S,<XT'X'S==420+X*10>
|
||
IFNDEF XT'X'C,<XT'X'C==:424+X*10>
|
||
XP XKBSKP,400450
|
||
|
||
XT'X'INT:: CONSO XT'X'C,XKBSKP ;EXTERNAL PROCESSOR INTERRUPT?
|
||
JRST .-1 ;NO, GO DOWN THE SKIP CHAIN
|
||
JSR XT'X'SAV## ;SAVE ALL THE AC'S
|
||
PUSHJ P,SAVE4## ; ..
|
||
JSP W,XTCINT## ;CALL XTCSER
|
||
|
||
XP XTCCHN,XT'X'CHN##
|
||
|
||
DEFINE XTLNK (A) <
|
||
IFN A-M.XTC,<
|
||
XKBKDB::!EXP XKB'A' ;LINK TO NEXT KDB
|
||
>
|
||
IFE A-M.XTC,<
|
||
XKBKDB::!EXP 0 ;NO MORE KDB'S
|
||
>
|
||
>
|
||
XP XKBINT,<XT'X'INT-.>
|
||
|
||
Z=X+1
|
||
XKB'X:: PHASE 0 ;BEGIN CONTROLLER DATA BLOCK
|
||
XKBNAM::!XWD 'EPA'+X,0 ;EP NAME
|
||
XTLNK \Z ;LINK TO NEXT KDB
|
||
XKBUDB::!BLOCK 21 ;SPACE FOR LINKS TO UDBS
|
||
XTSCNO::!CONO XT'X'S,(T1)
|
||
XTCCNO::!CONO XT'X'C,(T1)
|
||
XTSCNI::!CONI XT'X'S,T1
|
||
XTCCNI::!CONI XT'X'C,T1
|
||
XTSDTI::!DATAI XT'X'S,T1
|
||
XTCDTI::!DATAI XT'X'C,T1
|
||
XTCDTO::!DATAO XT'X'C,T1
|
||
XTSDTO::!DATAO XT'X'S,T2
|
||
XTCBSY::!CONSZ XT'X'C,20
|
||
XKBLOK::!EXP -1 ;INTERLOCK
|
||
XKBDDB::!BLOCK 1 ;POINTER TO DDB WAITING FOR INTRPT
|
||
XKBIUN::!BLOCK 1 ;POINTER TO UDB WAITING FOR INTERRUPT
|
||
XKBDAC::!BLOCK 1 ;INFO FROM LAST CONI DAC
|
||
XKBDAS::!BLOCK 1 ;INFO FROM LAST CONI DAS
|
||
XKBTIM::!BLOCK 1 ;COUNTER FOR TIMEOUT
|
||
XKBIOW::!BLOCK 1 ;IOWD FOR DAC OR PNTR TO IOLIST
|
||
XKBCUR::!BLOCK 1 ;CUR PNTR TO IOLIST (KI10 ONLY)
|
||
XKBGRB::!Z ;0 IF FREE 1 IF GRABBING
|
||
;CONTROL -1 IF GRABBED
|
||
XKBPAC::!BLOCK 1 ;# OF PSEUDO ACTIVE DDB'S ON THIS
|
||
; CONTROLLER
|
||
XKBREQ::!BLOCK 1 ;OLDEST JOB # REQUESTING USE OF UDB
|
||
XKBMBF::!BLOCK <MX11BF*3>/2 ;MONITOR BUFFER
|
||
DEPHASE
|
||
|
||
>
|
||
ZZ=0
|
||
IFE M.XTC,<
|
||
XTUUO==:CPOPJ## ;NO XTUUO IF NO XTCSER
|
||
XTKLDB==:CPOPJ## ;ALSO NO DDB KILLER
|
||
XTCTTY::AOS (P) ;DOUBLE SKIP
|
||
JRST CPOPJ1##
|
||
XTCTYP==:CPOPJ##
|
||
>
|
||
|
||
IFN M.XTC,<EXTERN XTCSER> ;LOAD XTCSER IF NEEDED
|
||
|
||
REPEAT M.XTC,<
|
||
XTCDEF (\ZZ)
|
||
ZZ=ZZ+1
|
||
>
|
||
>
|
||
SUBTTL Database for RX20s on 2020s
|
||
|
||
IFE M.KS10,<M.RX20==:0>
|
||
IFN M.RX20,<
|
||
|
||
EXTERN RX2SER ;Load device driver
|
||
|
||
;Macro to define prototype DDB for each RX20 CTLlr (RXA,RXB,...)
|
||
|
||
DEFINE RX2DDB(x,CPU),<
|
||
|
||
RX'x'INT::EXP 0,0,IC.UOU,.+1 ;Vectored interrupts XPCW here
|
||
EXCH T1,RX'x'INT ;Get interrupt PC
|
||
MOVEM T1,RX'x'CHL## ;Save for RESn
|
||
MOVE T1,RX'x'INT+1 ;;Second word of PC
|
||
MOVEM T1,RX'x'CHL##+1 ;;...
|
||
MOVE T1,RX'x'INT ;Restore state
|
||
JSR RX'x'SAV## ;Save ACs
|
||
JSP F,RX2INT## ;Set up F and join RX2SER
|
||
RX'x'DDB::PHASE 0
|
||
EXP <SIXBIT/RX'x'0/> ;(0) DEVNAM for prototype DDB this CTL
|
||
XWD <^D5*HUNGST>,201 ;(1) DEVCHR
|
||
EXP 0 ;(2) DEVIOS
|
||
EXP RX2DSP## ;(3) DEVSER
|
||
XWD DVLNG!DVIN!DVOUT,^D<1B<35-I>> ;(4) DEVMOD
|
||
EXP 0 ;(5) DEVLOG
|
||
EXP 0 ;(6) DEVBUF
|
||
EXP 0 ;(7) DEVIAD
|
||
EXP 0 ;(10) DEVOAD
|
||
EXP 0 ;(11) DEVSTS
|
||
XWD DEPLEN!<.TYRX2*.TYEST>,DEPEVM ;(12) DEVSTA
|
||
EXP 0 ;(13) DEVXTR
|
||
EXP 0 ;(14) DEVEVM
|
||
EXP 0 ;(15) DEVPSI
|
||
EXP 0 ;(16) DEVESE
|
||
EXP 0 ;(17) DEVHCW - Hard errors,,Soft errors
|
||
BYTE (3)CPU(33)0 ;(20) DEVCPU
|
||
EXP 0 ;(21) DEVISN (Must leave space)
|
||
EXP 0 ;(22) DEVDRV
|
||
EXP 0 ;(23) DEVJOB
|
||
EXP 0 ;(24) DEVFIL
|
||
EXP 0 ;(25) DEVEXT
|
||
EXP 0 ;(26) DEVPPN
|
||
DEVRXO::!EXP 0 ;(27) DEVRXO
|
||
DEVRXI::!EXP 0 ;(30) DEVRXI
|
||
DEVRXQ::!EXP 0,0,0,0 ;(31) DDB and CSR queue element
|
||
RX'x'DDS::! ;End of device DDB
|
||
DEVRXS::!EXP 0 ;DEVRXS ;Start of CTL data
|
||
DEVRXV::!EXP RX21IV+<<"x"-"A">*4> ;Interrupt vector
|
||
DEVRXC::!EXP RX21BA+<<"x"-"A">*10> ;CSR address
|
||
DEVRXM::!EXP 0 ;UBA mapping reg addr (2 slots/RX)
|
||
DEVRXE::!EXP 0 ;11 address of mapped buffer
|
||
DEVRXJ::!XPCW RX'x'INT ;Instruction to set up vector table with
|
||
Dephase
|
||
>;End of define RX2DDB
|
||
DEFINE GENRX2(CPU,CPUN)<
|
||
ZZZZ==0
|
||
REPEAT M'CPU'RX20,<
|
||
RX2DDB (\"ZZZ,CPUN)
|
||
ZZZ==ZZZ+1
|
||
ZZZZ==ZZZZ+1
|
||
>;;End repeat
|
||
>;End define
|
||
|
||
ZZ==0
|
||
ZZZ=="A"
|
||
REPEAT M.CPU,<
|
||
GENRX2 (\ZZ,ZZ)
|
||
ZZ==ZZ+1
|
||
>;End repeat
|
||
>;End M.RX20
|
||
SUBTTL DEFINITIONS FOR DISPLAY AND LIGHT PEN
|
||
;DISPLAY AND LITE PEN
|
||
|
||
IFG M.DIS, <
|
||
IFN M.VP10, <DIS==134>
|
||
EXTERN DISSER
|
||
XP DISJSR,DISBLK##+1 ;DIS JSR LOCATION IN LOWER CORE
|
||
XP ONDIS,DISBTH##+100
|
||
XP NONDIS,DISBTH##
|
||
XP OFFDIS,0
|
||
XP DISPON,2000+DISBIT## ;CONO PI, TURNS DIS PI CHANNEL ON
|
||
XP DISPOF,1000+DISBIT## ;CONO PI, TURNS DIS PI CHANNEL OFF
|
||
|
||
|
||
DISCON:
|
||
|
||
IFN M.340, <EXP ONDIS
|
||
|
||
DISBSY==77
|
||
XP PENON,7400
|
||
|
||
SETCON::CONO DIS,100 ;PARAMETER MODE
|
||
JRST DISIN1##
|
||
|
||
PENINT::CONSO DIS,0 ;CHECK FOR CONI FLAGS
|
||
JRST PENINT ;THIS WILL BE PART OF THE LINKED INTERRUPT CHAIN.
|
||
CONSZ DIS,400 ;STOP FLAG UP
|
||
JRST STPFLG ;YES
|
||
CONSZ DIS,2000 ;PEN FLAG UP
|
||
DATAI DIS,PENLOC## ;YES-STORE CURRENT LITE PEN LOCATION
|
||
CONO DIS,NONDIS ;CLEAR FLAGS
|
||
XJEN PENCHL##
|
||
|
||
|
||
;"STPFLG" SERVICES STOP FLAGS (DISPLAY PROGRAMMED) BY DOING A CLOSE ON THE DISPLAY
|
||
|
||
STPFLG: JSR PENSAV
|
||
JRST DISDSP##+DCL ;DO A CLOSE
|
||
|
||
|
||
ENDCHK::TRNN T1,-1
|
||
JRST EXIT1##
|
||
JRST EXIT0##
|
||
> ;END OF IFN M.340
|
||
IFE M.340, <Z
|
||
|
||
DISBSY==20000
|
||
PENON==10000
|
||
|
||
SETCON::MOVEI T1,PENCHN## ;SET UP CONO WORD
|
||
ASH T1,3 ;WITH PROPER CHANNEL ASSIGNMENTS
|
||
ADDI T1,DISCHN##
|
||
IFN M.VP10, <TRO T1,4300> ;SET DISPLAY READY BIT & BRIGHTNESS = 3.
|
||
MOVEM T1,DISCON
|
||
JRST DISIN1##
|
||
|
||
PENINT::CONSO DIS,0 ;CHECK FOR CONI FLAGS
|
||
JRST PENINT ;THIS INSTRUCTION CHANGED TO LINK IN INTERRUPT CHAIN.
|
||
DATAI DIS,PENLOC## ;CLEAR PEN INTERRUPT
|
||
MOVEM T1,PENLOC## ;SAVE AC T1
|
||
MOVE T1,DISBKO## ;GET ABSOLUTE ADDRESS OF NEXT DATA ELEMENT
|
||
SUB T1,DISREL## ;MAKE RELATIVE
|
||
HRRZS T1 ;CLEAR OUT GARBAGE IN LH
|
||
EXCH T1,PENLOC## ;SAVE ADDRESS IN PENLOC
|
||
XJEN PENCHL##
|
||
|
||
|
||
|
||
ENDCHK::JUMPE T1,EXIT1## ;END OF LIST?
|
||
TRNE T1,-1 ;NO, CHANGE INTENSITY COMMAND?
|
||
JRST EXIT0## ;NO
|
||
MOVSS T1 ;YES, LH HAS USER CONO BITS
|
||
DPB T1,INPNT ;DEPOSIT FOR CONO
|
||
CONO DIS,@DISCON ;SET NEW INTENSITY
|
||
JRST DISNX1##
|
||
INPNT: IFN M.VP10, <POINT 2,DISCON,28>
|
||
> ;END OF IFE M.340
|
||
|
||
DISCNA::CONO DIS,@DISCON
|
||
DISCZA::CONSZ DIS,@DISCON
|
||
BLKLIT::BLKO DIS,DISBKO##
|
||
DISCNO::CONO DIS,OFFDIS
|
||
DISCNI::CONI DIS,DISSTS##
|
||
|
||
DISTST::CONO DIS,DISCHN##
|
||
> ;END OF IFG M.DIS
|
||
|
||
|
||
IFN M.VBXC,<EXTERN VBCSER>
|
||
IFN FTKL10,<;DO THIS STUFF ONLY FOR KL CPU'S
|
||
|
||
;DEFINE SYMBOLS AND STORAGE FOR RSX-20F ASYNC TERMINALS
|
||
|
||
$HIGH ;THIS PART INTO THE HIGH SEGMENT
|
||
|
||
DEFINE RSXDTE(C,D),<
|
||
IFE D,<
|
||
EXP $TTOFS
|
||
$TTOFS==$TTOFS+M'C'TTDN
|
||
>
|
||
>
|
||
|
||
$TTOFS==TTDLAL ;INITIALIZE SYMBOL USED IN FOLLOWING MACRO
|
||
TTDOFS::RSX20F ;TABLE OF TTD LINE TABLE OFFSETS
|
||
EXP $TTOFS ;FIRST LINE AFTER DTE DRIVEN LINES
|
||
TTDLOM==:TTDOFS+1 ;BASE OF RANGE CHECK TABLE
|
||
TTDDSO==:<TTDLAL-TTDDAL> ;TRANSLATION FOR DSCTAB ENTRIES
|
||
>;END IFN FTKL10
|
||
SUBTTL ROUTINES COMMON TO PDP11 COMM FRONT-END'S ON DL10'S
|
||
|
||
IFN PDP11N,<
|
||
DLMAP
|
||
$HIGH
|
||
|
||
;SUBROUTINE TO PROCESS THE COMMAND:
|
||
; .SET NOMESSAGE PDP11 N
|
||
;CALL WITH:
|
||
; PUSHJ P,D76SIL
|
||
; RETURN HERE OR JRST COMERA
|
||
D76SIL::PUSHJ P,DECIN## ;READ A DECIMAL NUMBER
|
||
JRST D76SIP ;NO NUMBER ASSUME ZERO
|
||
CAIA ;ILLEGAL CHARACTER MAYBE
|
||
JRST D76SIP ;OK GOT A DIGIT
|
||
CAIE T3,"*" ;WILD CARD
|
||
JRST COMERA## ;NO, ERROR
|
||
MOVEI T2,7 ;YES, SET SIL ON ALL PDP11'S
|
||
PUSHJ P,D76SIA ;CONTINUE
|
||
JFCL ;IGNORE IF NOT THERE
|
||
SOJGE T2,.-2 ;CONTINUE
|
||
POPJ P, ;RETURN
|
||
D76SIP: PUSHJ P,D76SIA ;GO SILENCE THIS 76
|
||
JRST COMERA## ;LOST, GIVE ERROR
|
||
POPJ P, ;RETURN
|
||
|
||
D76SIA: SKIPL T2 ;.LT. 0 IS WRONG.
|
||
CAIL T2,10 ;SKIP IF PORT .LT. 8
|
||
POPJ P, ;INVALID PORT #
|
||
IFN M.DAS78,<
|
||
CAILE T2,M78HPO## ;SEE IF THIS PORT EXISTS ON A DAS78
|
||
JRST D76SI1 ;NO, TRY OTHER 11S
|
||
SKIPE T1,M78BAT##(T2) ;IF A DAS78 THEN
|
||
JRST D76SI0 ; ALL SET
|
||
> ;END IFN M.DAS78
|
||
|
||
D76SI1: SKIPE T1,DLXBAT##(T2) ;IF NO KNOWN PORT OR
|
||
SKIPN T1,DLXWIN##(T1) ; NO WINDOW ASSIGNED THEN
|
||
POPJ P, ; COMPLAIN
|
||
D76SI0: SKIPG DWN(T1) ;IS THE PDP11 DOWN?
|
||
SETOM DWN(T1) ;YES--TURN OFF THE MESSAGE
|
||
JRST CPOPJ1## ;RETURN
|
||
$LOW
|
||
> ;END OF IFN PDP11N
|
||
IFN <PDP11N-DLX.78>,< ;IF ANY DL10 BASED 11S BUT NOT DAS78S
|
||
|
||
;ROUTINE TO GET ERROR STATUS AND CALL DAEMON FOR AN ERROR
|
||
;ON A DC76, DN85 OR DN60
|
||
;ARGUMENTS T1=PORT # OF 11 WITH ERROR
|
||
DLB==60 ;DEVICE CODE FOR DL10
|
||
DLC==64 ;DEVICE CODE FOR DL10
|
||
|
||
DLBREG==3 ;NUMBER OF HIGHEST CONI DLB, WE DO
|
||
DLBEDT==0 ;VALUE OF R FOR DATAI DLB, WE WANT TO SAVE
|
||
|
||
$HIGH
|
||
DL10EL::MOVEM T1,DLEPRT ;SAVE THE PORT OF THE 11 WITH ERROR
|
||
MOVE T2,DLXNMT##(P2) ;GET NAME
|
||
MOVEM T2,DLEPGM ;SAVE
|
||
HRLZ T2,DLXTYP##(P2)
|
||
MOVEM T2,DLESTS
|
||
MOVE T2,DLXWIN##(P2)
|
||
MOVE T2,HLT(T2)
|
||
HRRM T2,DLESTS
|
||
CONI DLC,DLCCNI ;GET THE DLC CONI
|
||
DATAI DLC,DLCDTI ; AND DATAI
|
||
MOVEI T1,DLBREG ;GET NUMBER OF REGS TO SAVE OF DLB
|
||
DLBLUP: DPB T1,[POINT 2,DLBDTO,5] ;PUT REG INTO DATAO
|
||
DATAO DLB,DLBDTO ;AND DO DATAO SO CONI GETS RIGHT REG
|
||
CONI DLB,DLBCNI(T1) ;GET THIS DLB CONI
|
||
CAIN T1,DLBEDT ;IS THIS THE DATAI WE WANT?
|
||
DATAI DLB,DLBDTI ;YES, GET IT
|
||
SOJGE T1,DLBLUP ;AND LOOP BACK FOR NEXT REG
|
||
MOVEI T1,.ERDLE ;GET CODE FOR ERROR RPT UUO
|
||
HRLI T1,DLEBLK ;AND ADDRESS FOR DAEMON TO LOOK AT
|
||
PJRST DAEEIM## ;AND GO WAKE DAEMON
|
||
|
||
$LOW
|
||
DLBDTO: XWD 1,0 ;BITS FOR DATAO DLB,
|
||
DLEBLK:-DLELEN,,DLEPRT ;AOBJN POINTER FOR ERROR BLOCK
|
||
DLEPRT: BLOCK 1 ;PORT OF 11 WITH ERROR
|
||
DLCCNI: BLOCK 1 ;CONI DLC AT ERROR
|
||
DLCDTI: BLOCK 1 ;DATAI DLC AT ERROR
|
||
DLBCNI: BLOCK 4 ;BLOCK FOR CONI DLB'S
|
||
DLBDTI: BLOCK 1 ;DATAI DLB WITH R=0 AT ERROR
|
||
DLEPGM: BLOCK 1 ;SIXBIT PROGRAM NAME
|
||
DLESTS: BLOCK 1 ;HALT STATUS
|
||
DLELEN==.-DLEPRT
|
||
|
||
|
||
|
||
> ;END IFN <PDP11N-DLX.78>
|
||
;COME HERE ONCE A SECOND.
|
||
|
||
IFN FTKS10*M.DN60,<
|
||
DLXSEC::PUSH P,P1 ;SAVE P1 FOR A BIT
|
||
IFN M.DN6K*M.KDUP,< ;IF ON A KS10 WITH IBM COMM
|
||
MOVE P1,[XWD -M.KDUP,KDPBAS] ;GET AN AOBJN POINTER TO THE BASE TABLE
|
||
DLXSE1: MOVE W,(P1) ;GET THE NEXT LINE
|
||
PUSHJ P,D6KSEC## ;SET DN60 TIME OUT THE CALL11 FUNCTIONS
|
||
AOBJN P1,DLXSE1 ;LOOP OVER ALL LINES
|
||
>;M.DN6K
|
||
IFN M.DN6R*M.DMRN,< ;IF ON A KS10 WITH IBM COMM
|
||
MOVE P1,[XWD -M.DMRN,DMRBAS] ;GET AN AOBJN POINTER TO THE BASE TABLE
|
||
DLXSE2: MOVE W,(P1) ;GET THE NEXT LINE
|
||
PUSHJ P,D6KSEC## ;SET DN60 TIME OUT THE CALL11 FUNCTIONS
|
||
AOBJN P1,DLXSE2 ;LOOP OVER ALL LINES
|
||
>;M.DN6R
|
||
POP P,P1 ;RESTORE P1
|
||
POPJ P, ; AND RETURN
|
||
>; END IFN FTKS10
|
||
IFE FTKS10*M.DN60,< ;IF NOT ON A KS10 WITH IBM COMM
|
||
IFE DL10XI,<DLXSEC==:CPOPJ##>
|
||
IFN DL10XI,<
|
||
DLXSEC::
|
||
IFN M.CPU-1,<
|
||
SKIPE .CPCPN## ;DL10'S CAN ONLY BE ON CPU0
|
||
POPJ P,
|
||
>
|
||
PUSHJ P,SAVE3## ;SAVE P1-P3
|
||
MOVSI P1,-10 ;AOBJN POINTER
|
||
D76SC1: SKIPN P2,DLXBAT##(P1) ;GET BASE ADDRESS OF THIS PDP11
|
||
JRST D76S1L ;NO.
|
||
SKIPN P3,DLXWIN##(P2) ;HAS IT A WINDOW?
|
||
JRST D76S1L ;NO WINDOW IS NO GOOD
|
||
SKIPG DLXDWN##(P3) ;IS THIS PDP11 UP?
|
||
JRST D76NTR ;NO.
|
||
SKIPN DLXHLT##(P3) ;YES, IS IT HALTED?
|
||
JRST D76S2L ;NO.
|
||
D76DWN: SKIPG DLXDWN##(P3) ;DO I THINK THE PDP11 IS UP?
|
||
JRST D76S1L ;NO.
|
||
XCT DLXCLR##(P2) ;YES, CLEAR ITS ENABLE.
|
||
SETZM DLXDWN##(P3) ;AND MARK IT DOWN.
|
||
XCT DLXPRG##(P2) ;DO ANY NECESSARY CLEAN UPS
|
||
MOVE T1,P1 ;GET PORT #
|
||
PUSHJ P,DL10EL ;LOG ERROR
|
||
|
||
MOVSI T1,(JFCL) ;DISABLE ITS SERVICE ROUTINE
|
||
MOVEM T1,DLXINI##(P2)
|
||
SETZM DLXCAL##(P2)
|
||
MOVEM T1,DLXPRG##(P2)
|
||
D76S1L: AOBJN P1,D76SC1 ;TRY NEXT PDP11.
|
||
POPJ P, ;NO MORE, ALL DONE.
|
||
|
||
D76S2L: AOS T1,DLXOK##(P3) ;COUNT THE "OK" COUNTER
|
||
CAIL T1,^D10 ;IS THE PDP11 STILL OK?
|
||
JRST D76DWN ;NO, IT HAS GONE DOWN.
|
||
JRST D76S1L ;YES, GO ON TO NEXT PDP11.
|
||
|
||
;COME HERE IF A PDP11 IS NOT RUNNING.
|
||
|
||
D76NTR: XCT DLXCNI##(P2) ;CONI DLC,T1
|
||
MOVEI T2,22220 ;PORT ENABLE BITS
|
||
ANDCM T2,T1 ;T2 GETS A 1 FOR EACH PDP11
|
||
; NOT ENABLED
|
||
LSH T2,-1 ;MOVE TO INTERRUPT BIT
|
||
AND T2,T1 ;1 FOR EACH PDP11 LOADED BUT NOT
|
||
; YET STARTED.
|
||
AND T2,DLXMSK##(P2) ;MASK OFF BITS FOR OTHER PDP11S
|
||
JUMPE T2,D76S1L ;JUMP IF NOT OUR PDP11
|
||
SETZM DLXOK##(P3) ;NOT CRASHED YET
|
||
SETZM DLXHLT##(P3) ;NOR HALTED
|
||
SETZM TTP(P3) ;CLEAR THE Q'S
|
||
SETZM TTG(P3) ;CLEAR THE Q'S
|
||
SETZM TEP(P3) ;CLEAR THE Q'S
|
||
SETZM TEG(P3) ;CLEAR THE Q'S
|
||
SETZM DLXCEU##(P2) ;NO CAL11. USER
|
||
MOVSI T1,767760 ;BUILD SIX BIT DL10 BYTE POINTER
|
||
HRRI T1,DLXNMT##(P2) ;INTO DL10 BASE TABLE
|
||
SETZM (T1) ;ZAP OLD NAME
|
||
MOVEM T1,DLXNAM##(P3) ;STORE POINTER TO NAME
|
||
MOVEI T1,2 ;KILL IF NO RESPONSE IN 2 SEC
|
||
MOVEM T1,DLXDWN##(P3) ; BY MARKING PDP11 AS UP
|
||
MOVE T1,[PUSHJ P,D76CKN] ;CHECK NAME ON INTERRUPT
|
||
MOVEM T1,DLXINI##(P2)
|
||
XCT DLXKAX##(P2) ;SPECIFY KA10 INTERRUPTS (IN CASE NOT DONE ALREADY)
|
||
XCT DLXSWA##(P2) ;SET WINDOW ADDRESS
|
||
XCT DLXENB##(P2) ;ENABLE PORT
|
||
JRST D76S1L ;WAIT FOR INTERRUPT
|
||
>; END IFN DL10XI CONDITIONAL
|
||
>; END IFE FTKS10*M.DN60
|
||
IFN PDP11N,<
|
||
;COME HERE ON NEXT DL10 INTERRUPT FOR THIS PDP11.
|
||
|
||
D76CKN: SKIPN T1,DLXNMT##(W) ;NAME SPECIFIED YET?
|
||
POPJ P, ;NO.
|
||
IFN M.DC75,<
|
||
CAMN T1,[SIXBIT /DC75/] ;YES, DC75?
|
||
JRST D75III## ;YES, START UP DC75.
|
||
>
|
||
IFN M.DC76,<
|
||
CAMN T1,[SIXBIT /DC76/] ;NO, DC76?
|
||
JRST D76III## ;YES, START UP DC76.
|
||
>
|
||
IFN DLX.60,<IFN M.DN6D,<
|
||
CAMN T1,[SIXBIT /DN60/] ;NO, DN60?
|
||
JRST D60III## ;YES, START UP DN60
|
||
>>
|
||
POPJ P, ;NO, IGNORE IT.
|
||
|
||
;COME HERE ONCE A MINUTE.
|
||
|
||
IFE DL10XI,<D76MIN==:CPOPJ##>
|
||
IFN DL10XI,<
|
||
D76MIN::SKIPGE DEBUGF## ;DEBUGGING
|
||
POPJ P, ;YES, NO MESSAGE
|
||
PUSHJ P,SAVE3## ;SAVE P1-P3
|
||
MOVE P1,SYSUPT## ;GET UPTIME
|
||
CAMGE P1,TICMIN## ;MORE THAN 1 MINUTE
|
||
POPJ P, ;NO--TOO EARLY
|
||
MOVSI P1,-10 ;MAXIMUM NUMBER OF PORTS
|
||
D76MLP: SKIPE P2,DLXBAT##(P1) ;IS THIS PDP11 DEFINED?
|
||
SKIPN P3,DLXWIN##(P2) ;YES, HAS IT A WINDOW?
|
||
JRST D76MNX ;NO, LOOK AT NEXT PDP11
|
||
SKIPE DLXDWN##(P3) ;IS IT UP OR SILENCED?
|
||
JRST D76MNX ;YES.
|
||
MOVE T1,STATES## ;SCHED SETTINGS
|
||
TRNE T1,ST.NOP ;IS THERE AN OPR IN ATTENDANCE?
|
||
SETOM DLXDWN##(P3) ;NO, ONLY REPORT THE ERROR ONCE
|
||
MOVE U,OPRLDB## ;NO, PRINT MESSAGE ON OPR'S TTY
|
||
PUSHJ P,INLMES##
|
||
ASCIZ /
|
||
%%PDP-11 number /
|
||
MOVE T1,DLXEPN##(P3) ;ELEVEN PORT NUMBER
|
||
PUSHJ P,RADX10## ;PRINT THAT OUT
|
||
SKIPE DLXHLT##(P3) ;HALTED?
|
||
JRST D76HLT ;YES.
|
||
PUSHJ P,INLMES## ;NO, JUST SAY NOT UP.
|
||
ASCIZ / is not running.
|
||
/
|
||
JRST D76MNX ;CHECK NEXT PDP11
|
||
|
||
;STILL IN IFN DL10XI AND IFN PDP11N CONDITIONALS
|
||
;COME HERE IF THE PDP11 IS ACTUALLY HALTED.
|
||
|
||
D76HLT: PUSHJ P,INLMES##
|
||
ASCIZ / halted at /
|
||
MOVE T1,DLXHLT##(P3) ;GET HALT PC (OR STOP CODE)
|
||
PUSHJ P,OCTPNT## ;TYPE IT OUT
|
||
PUSHJ P,INLMES## ;END WITH A DOT
|
||
ASCIZ /.
|
||
/
|
||
D76MNX: AOBJN P1,D76MLP ;CHECK THE REST OF THE PDP11S
|
||
POPJ P, ;DONE THEM ALL--RETURN.
|
||
|
||
$LOW
|
||
> ;END OF IFN DL10XI CONDITIONAL
|
||
> ;END OF IFN PDP11N
|
||
SUBTTL TTY INIT SETUP TABLE
|
||
|
||
$INIT
|
||
|
||
;THE FOLLOWING TABLE DESCRIBES FOR LINKTT (IN SCNSER) HOW TO SETUP
|
||
; THE LINE DATA BLOCKS FOR THEIR ASSOCIATED DRIVERS.
|
||
|
||
;FORMAT OF A TABLE ENTRY:
|
||
; -# OF LINES,,CPU #
|
||
; QUEUE HEADER,,ISR
|
||
; LDBISB BITS,,LTLUSE OR 0
|
||
|
||
EXTERN LIL7BT,LILCFE,LTLUSE ;DECLARE THE FLAGS WE CAN SET
|
||
|
||
LNKTTB::
|
||
DEFINE TTDSPX(DSP,ADDON,CLEVER,ALLOC,QUEUE,CPU,DUMB<Y>),<
|
||
IFN ADDON,<
|
||
IF2,< .IF DSP,NEEDED,<EXTERN DSP>
|
||
.IF QUEUE,NEEDED,<EXTERN QUEUE>
|
||
>
|
||
XWD -ADDON,CPU
|
||
XWD QUEUE,DSP
|
||
XXY==<XXZ==0>
|
||
IFIDN <CLEVER><Y>,<XXY=XXY!LILCFE> ;;DC76
|
||
IFIDN <DUMB><Y>,<XXY=XXY!LIL7BT> ;;TOO DUMB TO HANDLE 8-BIT ASCII
|
||
IFIDN <ALLOC><Y>,<XXZ=XXZ!LTLUSE> ;;NOT A REMOTE (ALLOCATABLE) LDB
|
||
XWD XXY,XXZ ;;FLAGS
|
||
>> ;END OF DEFINE TTDSPX
|
||
|
||
DEFINE TTSPCP(CPU),<
|
||
DC10N0==10*M'CPU'TTG0
|
||
DC10N1==10*M'CPU'TTG1
|
||
TTDSPX(DL0DSP,DC10N0,N,Y,DL0TQ'CPU,CPU)
|
||
TTDSPX(DL1DSP,DC10N1,N,Y,DL1TQ'CPU,CPU)
|
||
TTDSPX(CC0DSP,M'CPU'68L0,N,Y,CC0TQ'CPU,CPU)
|
||
TTDSPX(CC1DSP,M'CPU'68L1,N,Y,CC1TQ'CPU,CPU)
|
||
TTDSPX(DC760D,M'CPU'D70N,Y,Y,D70TQ'CPU,CPU)
|
||
TTDSPX(DC761D,M'CPU'D71N,Y,Y,D71TQ'CPU,CPU)
|
||
TTDSPX(DC762D,M'CPU'D72N,Y,Y,D72TQ'CPU,CPU)
|
||
TTDSPX(DC763D,M'CPU'D73N,Y,Y,D73TQ'CPU,CPU)
|
||
TTDSPX(DC764D,M'CPU'D74N,Y,Y,D74TQ'CPU,CPU)
|
||
TTDSPX(DC765D,M'CPU'D75N,Y,Y,D75TQ'CPU,CPU)
|
||
TTDSPX(DC766D,M'CPU'D76N,Y,Y,D76TQ'CPU,CPU)
|
||
TTDSPX(DC767D,M'CPU'D77N,Y,Y,D77TQ'CPU,CPU)
|
||
TTDSPX(DZDSP,M'CPU'DZNL,Y,Y,DZTQ'CPU,CPU,N)
|
||
TTDSPX(TTDDSP,M'CPU'TTDN,Y,Y,.C'CPU'CTQ,CPU)
|
||
>
|
||
;GENERATE LDB'S FOR LOCAL LINES
|
||
ZZ==0
|
||
REPEAT M.CPU,<
|
||
TTSPCP(\ZZ)
|
||
ZZ==ZZ+1
|
||
>
|
||
;NOW GENERATE A POOL OF LDB'S FOR NETWORK TTYS
|
||
;ASSUME ALL ARE ON CPU0 SINCE NETWORK LDB'S ARE DYNAMICALLY ALLOCATED
|
||
; FROM THE POOL AND THE CORRECT OUTPUT QUEUE, CPU NUMBER, AND DISPATCH
|
||
; ARE FILLED IN BY THE NETWORK MODULE WHEN THE LDB IS USED
|
||
|
||
TTDSPX(ERRDSP,M.RTTY,N,N,NULQUE,7,N)
|
||
|
||
;NOW GENERATE THE POOL FOR XTCSER
|
||
TTDSPX(XTTDSP,M.XTL,N,Y,XTTQUE,0)
|
||
|
||
;KS10 KLINIK LINE
|
||
IFN M.KS10,<
|
||
DEFINE TTSPCP(CPU),<
|
||
TTDSPX(CTYDSP,1,N,Y,.C'CPU'CTQ,CPU)
|
||
>
|
||
ZZ==M.CPU-1
|
||
REPEAT M.CPU,<
|
||
TTSPCP(\ZZ)
|
||
ZZ==ZZ-1
|
||
>
|
||
>;END IFN M.KS10
|
||
|
||
;NOW GENERATE AN LDB FOR INTERNAL FORCED COMMANDS
|
||
|
||
TTDSPX(ERRDSP,1,N,Y,FRCQUE,7,N)
|
||
|
||
;NOW GENERATE LDB'S FOR THE CTYS
|
||
|
||
DEFINE TTSPCP(CPU),<
|
||
CT'CPU'LIN==:CTYLIN-CPU
|
||
TTDSPX(CTYDSP,1,N,Y,.C'CPU'CTQ,CPU)
|
||
>
|
||
ZZ==M.CPU-1
|
||
REPEAT M.CPU,<
|
||
TTSPCP(\ZZ)
|
||
ZZ==ZZ-1
|
||
>
|
||
IFN TCONLN-CT0LIN,<PRINTX ?TTDSPX IS IN ERROR>
|
||
|
||
;NOW FOR THE PTYS
|
||
|
||
TTDSPX(ERRDSP,M.PTY,N,Y,FRCQUE,7,N)
|
||
|
||
;FINALLY, DEFINE THE TABLE LENGTH FOR SCNSER
|
||
LNKTTL==:.-LNKTTB
|
||
|
||
PURGE XXY,XXZ,ZZ
|
||
SUBTTL IPA20 CHANNEL I/O -- IPAICD - PROTOTYPE CONSO SKIP CHAIN CODE
|
||
|
||
|
||
$CSUB
|
||
|
||
IFN M.KL10&<M.SCA!M.ENET>,<
|
||
IPAICD::!PHASE 0
|
||
SKIPA IPABIT ;(00) A LITTLE TROUBLE TO CHECK FOR PI FLAGS
|
||
IPAJRS:!JRST . ;(01) TRY NEXT DEVICE ON CHAIN
|
||
MOVEM T1,IPAST1 ;(02) SAVE T1 A BIT
|
||
CONI 0,T1 ;(03) GET CONI BITS
|
||
TDNE T1,IPABIT ;(04) INTERRUPT FOR THIS DEVICE?
|
||
JRST IPAEXC ;(05) YES
|
||
MOVE T1,IPAST1 ;(06) GET SAVED T1
|
||
JRST IPAJRS ;(07) TRY NEXT DEVICE ON CHAIN
|
||
IPAEXC:!EXCH T1,IPAST1 ;(10) GET SAVED T1 BACK, SAVE CONI STATUS BITS
|
||
JSR PIERR## ;(11) SAVE AC'S, SET UP PDL
|
||
MOVE T1,IPAST1 ;(12) GET BACK CONI STATUS BITS
|
||
SKIPA W,.+1 ;(13) GET KDB ADDRESS
|
||
EXP 0 ;(14) KDB ADDRESS
|
||
XJRST .+1 ;(15) CALL INTERRUPT HANDLER
|
||
EXP 0 ;(16) INTERRUPT HANDLER ADDRESS
|
||
IPAST1:!EXP -1 ;(17) HOLDS T1 WHILE TESTING CONI BITS
|
||
IPABIT:!EXP -1 ;(20) CONI BITS
|
||
DEPHASE ;END OF PHASED CODE
|
||
IPAICL==:.-IPAICD ;LENGTH OF CONSO SKIP CHAIN CODE
|
||
|
||
> ;END IFN M.KL10&<M.SCA!M.ENET>
|
||
SUBTTL IPA20 CHANNEL I/O -- LDIPA - LOAD IPA20 CRAM
|
||
|
||
|
||
;ROUTINE TO LOAD AN IPA20 CRAM
|
||
;CALL: MOVE T1, ADDRESS OF MICROCODE STORAGE
|
||
; PUSHJ P,LDIPA
|
||
; <NON-SKIP> ;MICROPROCESSOR IS RUNNING
|
||
; <SKIP> ;CHANNEL LOADED
|
||
|
||
IFN M.KL10&<M.SCA!M.ENET>,<
|
||
$XSENT (LDIPA::)
|
||
PUSHJ P,SAVE3## ;SAVE SOME ACS
|
||
SETZ P1, ;INITIAL CRAM ADDRESS
|
||
MOVSI P2,(<POINT 12,,>!1B12) ;TWO-WORD BYTE POINTER
|
||
MOVE P3,T1 ;INCLUDE MICROCODE STORAGE ADDRESS
|
||
|
||
LDIPA1: MOVEI T1,5 ;5 BYTES PER CRAM MICROWORD
|
||
SETZB T2,T3 ;START WITH EMPTY WORDS
|
||
|
||
LDIPA2: ILDB T4,P2 ;GET A BYTE
|
||
LSHC T2,^D12 ;APPEND IT TO THE WORD
|
||
ADD T3,T4 ;...
|
||
SOJN T1,LDIPA2 ;LOOP BACK FOR ALL 5 BYTES
|
||
MOVE T1,P1 ;GET CRAM ADDRESS
|
||
LSHC T2,6 ;SEPARATE CRAM HALFWORDS
|
||
LSH T3,-6 ;...
|
||
PUSHJ P,WTIPA ;WRITE THIS WORD INTO CRAM
|
||
POPJ P, ;CHANNEL IS RUNNING
|
||
CAIE P1,MAXCRA ;AT END OF IPA20 CRAM?
|
||
AOJA P1,LDIPA1 ;NO, LOOP BACK FOR ENTIRE CRAM
|
||
JRST CPOPJ1## ;RETURN
|
||
|
||
$HIGH
|
||
> ;END IFN M.KL10&<M.SCA!M.ENET>
|
||
SUBTTL IPA20 CHANNEL I/O -- DMPIPA - DUMP IPA20 DRAM
|
||
|
||
|
||
;ROUTINE TO DUMP THE IPA20 DRAM.
|
||
;CALL:
|
||
; W/ KDB ADDRESS
|
||
; PUSHJ P,DMPIPA
|
||
;RETURN:
|
||
; <NON-SKIP> ;DUMP FAILED (MICROPROCESSOR RUNNING/NO BUFFER)
|
||
; <SKIP> ;DUMP SUCCEEDED
|
||
|
||
IFN M.KL10&<M.SCA!M.ENET>,<
|
||
$XSENT (DMPIPA::)
|
||
PUSHJ P,SAVE2## ;FREE UP P1 - P2
|
||
SETZ P1, ;INIT DRAM ADDRESS TO ZERO
|
||
SKIPN P2,IPKDDB(W) ;IS THERE A DUMP BUFFER?
|
||
POPJ P, ;NO, SORRY, WE TRIED
|
||
MOVEI T1,DRMSIZ-1 ;CLEAR THE BUFFER FIRST
|
||
AOS T3,P2 ;GET DESTINATION FOR XBLT
|
||
SOS T2,P2 ;GET SOURCE
|
||
SETZM (T2) ;CLEAR FIRST WORD
|
||
EXTEND T1,[XBLT] ;ZERO REST OF BUFFER
|
||
MOVEI T1,CO.CPT ;NOW FORCIBLY HALT THE CRITTER
|
||
XCT KDBCNO(W) ;...
|
||
DMPIP1: MOVE T1,P1 ;COPY DRAM ADDRESS
|
||
PUSHJ P,READRM ;READ DRAM CONTENTS
|
||
MOVEM T2,(P2) ;STORE IN BUFFER
|
||
ADDI P2,1 ;BUMP BUFFER ADDRESS
|
||
CAIGE P1,MAXDRA ;DONE ALL WORDS?
|
||
AOJA P1,DMPIP1 ;LOOP FOR REMAINDER
|
||
MOVEI T1,.ERICD ;CODE = IPA CHANNEL DUMP
|
||
HRL T1,W ;DATA = KDB ADDRESS
|
||
PUSH P,J ;SAVE J (NONSENSE)
|
||
SNCALL (DAEEIM##,MCSEC0) ;PROD THE DEVIL
|
||
JRST JPOPJ1## ;RESTORE J AND SKIP RETURN
|
||
> ;END IFN M.KL10&<M.SCA!M.ENET>
|
||
;ROUTINE TO READ A WORD OF THE IPA20 DRAM
|
||
;CALL:
|
||
; T1/ DRAM ADDRESS
|
||
; W/ KDB ADDRESS
|
||
; PUSHJ P,READRM
|
||
; <ONLY RETURN> ;T2/ DRAM CONTENTS
|
||
|
||
IFN M.KL10&<M.SCA!M.ENET>,<
|
||
READRM: MOVE T2,[000001,,400073] ;CREATE MICRO INSTRUCTION TO READ DRAM
|
||
MOVE T3,[002000,,220040] ;...
|
||
DPB T1,[POINT 10,T2,29] ;INSERT DRAM ADDRESS
|
||
SETZ T1, ;MAKE SURE RUN FLOP IS CLEAR
|
||
XCT KDBCNO(W) ;...
|
||
PUSHJ P,DRMPAR ;COMPUTE PARITY BIT
|
||
MOVEI T1,0 ;CRAM ADDRESS
|
||
PUSHJ P,WTIPA ;WRITE THE CRAM DATA
|
||
JFCL ;SHOULDN'T FAIL
|
||
MOVE T2,[000001,,600443] ;GET SECOND MICRO INSTRUCTION
|
||
MOVE T3,[001000,,005040] ;...
|
||
PUSHJ P,DRMPAR ;COMPUTE PARITY BIT
|
||
MOVEI T1,1 ;CRAM ADDRESS
|
||
PUSHJ P,WTIPA ;WRITE THE CRAM DATA
|
||
JFCL ;SHOULDN'T FAIL
|
||
MOVSI T2,(.DOLRA+<INSVL.(0,DO.RAR)>) ;SELECT MICROCODE START ADDRESS
|
||
XCT KDBDTO(W) ;...
|
||
MOVEI T1,CO.MRN ;START MICROCODE
|
||
XCT KDBCNO(W)
|
||
SETZ T1, ;STOP MICROCODE
|
||
XCT KDBCNO(W)
|
||
MOVEI T1,CO.DTE ;SET DIAG_TEST_EBUF
|
||
XCT KDBCNO(W)
|
||
XCT KDBDTI(W) ;READ RESULTING VALUE (DRAM CONTENTS)
|
||
POPJ P, ;RETURN
|
||
> ;END IFN M.KL10&<M.SCA!M.ENET>
|
||
;ROUTINE TO COMPUTE PARITY FOR A IPA20 MICROINSTRUCTION.
|
||
;CALL:
|
||
; T2&T3/ MICROINSTRUCTION
|
||
; PUSHJ P,DRMPAR
|
||
;ONLY RETURN
|
||
|
||
IFN M.KL10&<M.SCA!M.ENET>,<
|
||
DRMPAR: PUSHJ P,SAVE2## ;SAVE P1-P2
|
||
DMOVE P1,T2 ;SAVE ORIGINAL MICROWORD CONTENTS
|
||
TDZ P1,[000000,,400000] ;CLEAR PARITY BIT
|
||
SETZ T3, ;INITIALIZE BIT COUNT
|
||
MOVE T1,P1 ;GET FIRST MICROWORD
|
||
MOVN T2,T1 ;NEGATE
|
||
TDZE T1,T2 ;ANY ONE BITS LEFT?
|
||
AOJA T3,.-2 ;YES, LOOP BACK TO COUNT THEM UP
|
||
MOVE T1,P2 ;GET SECOND MICROWORD
|
||
MOVN T2,T1 ;NEGATE
|
||
TDZE T1,T2 ;ANY ONE BITS LEFT?
|
||
AOJA T3,.-2 ;YES, LOOP BACK TO COUNT THEM UP
|
||
TRNN T3,1 ;IS MICROWORD EVEN PARITY?
|
||
TDO P1,[000000,,400000] ;YES, SET PARITY BIT
|
||
DMOVE T2,P1 ;GET MICROWORD BACK WITH CORRECT PARITY
|
||
POPJ P, ;RETURN
|
||
> ;END IFN M.KL10&<M.SCA!M.ENET>
|
||
;ROUTINE TO ALLOCATE A DRAM DUMP BUFFER FOR AN IPA20 DEVICE. SINCE
|
||
;THE DRAM IS 2 PAGES LONG, WE NORMALLY *DON'T* ALLOCATE THE BUFFER.
|
||
;PATCHING THE POPJ BELOW TO A JFCL WILL ENABLE DUMP BUFFERS.
|
||
|
||
IFN M.KL10&<M.SCA!M.ENET>,<
|
||
$XSENT (IPAADB::)
|
||
POPJ P, ;***PATCH TO JFCL TO ALLOCATE DUMP BUFFER
|
||
MOVEI T1,(MS.MEM) ;PICK A SECTION, ANY SECTION
|
||
MOVEI T2,DRMSIZ ;NUMBER OF WORDS IN BUFFER
|
||
MOVEI T3,GFWNZN## ;ASSUME DONE DURING SYSTEM INITIALIZATION
|
||
SKIPN DINITF## ;GOOD GUESS?
|
||
MOVEI T3,GFWNZS## ;NOPE, WE DID OUR BEST
|
||
PUSHJ P,(T3) ;CALL THE ROUTINE
|
||
POPJ P, ;SORRY, COULDN'T HACK IT
|
||
MOVEM T1,IPKDDB(W) ;STUFF AWAY THE BUFFER
|
||
MOVE T2,T1
|
||
AOS T3,T1 ;BUILD A BLT WORD TO ZERO BUFFER
|
||
MOVEI T1,DRMSIZ-1 ;NUMBER OF WORDS TO MOVE
|
||
SETZM (T2) ;ZERO FIRST WORD
|
||
EXTEND T1,[XBLT] ;ZERO REMAINDER OF BUFFER
|
||
POPJ P, ;RETURN
|
||
|
||
$HIGH
|
||
>; END IFN FTKL10&<FTENET!FTSCA>
|
||
SUBTTL IPA20 CHANNEL I/O -- RDLAR - READ LATCHED ADDRESS REGISTER
|
||
|
||
|
||
;ROUTINE CALLED TO READ CONTENTS OF LATCHED ADDRESS REGISTER
|
||
;CALL: MOVE W, KDB ADDRESS
|
||
; PUSHJ P,RDLAR
|
||
; <NON-SKIP> ;CHANNEL IS RUNNING
|
||
; <SKIP> ;T1 CONTAINS CRAM ADDRESS
|
||
|
||
IFN M.KL10&<M.SCA!M.ENET>,<
|
||
$XSENT (RDLAR::)
|
||
PUSHJ P,AUTOWN## ;DO WE OWN THE DATA BASE INTERLOCK?
|
||
JRST RDLAR1 ;NO--DO NORMAL STUFF
|
||
PUSHJ P,SAVW## ;SAVE W
|
||
XMOVEI W,.CPCNI##-KDBCNI ;FAKE KDB I/O INSTRUCTIONS
|
||
|
||
RDLAR1: XCT KDBCNI(W) ;CONI DEV,T1
|
||
TRNE T1,CO.MRN ;CHANNEL RUNNING?
|
||
POPJ P, ;ERROR
|
||
MOVEI T1,CO.LAR ;SET LATCHED ADDRESS REGISTER FLAG
|
||
XCT KDBCNO(W) ;CONO DEV,(T1)
|
||
PUSH P,T2 ;SAVE T2
|
||
XCT KDBDTI(W) ;READ CONTENTS OF REGISTER
|
||
SETZ T1, ;MAKE SURE CO.LAR IS CLEAR
|
||
XCT KDBCNO(W) ;...
|
||
LDB T1,[POINTR (T2,DT.LAR)] ;GET CORRECT FIELD
|
||
POP P,T2 ;RESTORE T2
|
||
PJRST CPOPJ1## ;RETURN
|
||
|
||
$HIGH
|
||
> ;END IFN M.KL10&<M.SCA!M.ENET>
|
||
SUBTTL IPA20 CHANNEL I/O -- TYIPA - READ PORT TYPE
|
||
|
||
|
||
;IN THE IDEAL WORLD IT WOULD BE POSSIBLE TO INSTALL THE NIA20 OR
|
||
;CI20 IN EITHER OF THE MODIFIED INTERNAL CHANNEL BACKPLANE SLOTS
|
||
;IN THE KL10. UNFORTUNATELY, THERE IS NO EASY WAY TO TELL THE
|
||
;TWO TYPES OF DEVICES APART. THOSE WHO ARE FOOLISH ENOUGH TO
|
||
;BELIEVE THE DOCUMENTATION MIGHT DISAGREE, BUT THE ENGINEERS
|
||
;NEVER STRAPPED THE NIA20 AND CI20 TO RETURN DIFFERENT PORT TYPE
|
||
;FIELDS AS THE DOCUMENTATION LEADS ONE TO BELIEVE.
|
||
;
|
||
;DETERMINING THE PORT TYPE IS REALLY A FAIRLY STRIGHT FORWARD
|
||
;PROCESS. ON THE OFF BEAT CHANCE THAT THE PORT BOARDS ARE EVER
|
||
;ECO'ED, THE PORT TYPE FIELD IS THE FIRST THING CHECKED. IF THE
|
||
;VALUE RETURNED IS KNOWN, THEN THE APPROPRIATE CODE IS RETURNED.
|
||
;OTHERWISE, AN ATTEMPT TO FIGURE OUT THE PORT TYPE WILL BE MADE
|
||
;BASED ON THE BEHAVIOR OF THE DEVICE. IF THIS FAILS, THEN THE
|
||
;MONGEN'ED DEVICE TABLE IS USED TO INDICATE THE DEVICE CODE,
|
||
;THEREBY TELLING THE AUTOCONFIGURATION ROUTINES IF THEY HAVE
|
||
;FOUND THE RIGHT DEVICE.
|
||
;CALL: PUSHJ P,TYIPA
|
||
; <NON-SKIP> ;UNKNOWN
|
||
; <SKIP> ;KNOWN (T1 = TYPE CODE)
|
||
|
||
IFN M.KL10&<M.SCA!M.ENET>,<
|
||
$XSENT (TYIPA::)
|
||
XCT .CPCNI## ;READ CHANNEL STATUS
|
||
LDB T1,[POINTR (T1,CI.TYP)] ;GET PORT TYPE FIELD
|
||
CAIE T1,.CIKNI ;KLNI?
|
||
CAIN T1,.CIKLP ;KLIPA?
|
||
JRST CPOPJ1## ;YES
|
||
;*** ADD CODE TO FIGURE OUT PORT TYPE
|
||
POPJ P, ;RETURN
|
||
|
||
$HIGH
|
||
> ;END IFN M.KL10&<M.SCA!M.ENET>
|
||
SUBTTL IPA20 CHANNEL I/O -- RDIPA - READ CRAM
|
||
|
||
|
||
;READ THE CONTENTS OF A CRAM LOCATION
|
||
;CALL: MOVE W, KDB ADDRESS ;IF NORMAL TIMESHARING
|
||
; MOVE T1, CRAM ADDRESS
|
||
; PUSHJ P,RDIPA
|
||
; <NON-SKIP> ;CHANNEL IS RUNNING
|
||
; <SKIP> ;T2 & T3 HAS THE CRAM CONTENTS
|
||
;
|
||
;ALL ACS ARE PRESERVED
|
||
|
||
IFN M.KL10&<M.SCA!M.ENET>,<
|
||
$XSENT (RDIPA::)
|
||
PUSHJ P,AUTOWN## ;DO WE OWN THE DATA BASE INTERLOCK?
|
||
JRST RDIPA1 ;NO--DO NORMAL STUFF
|
||
PUSHJ P,SAVW## ;SAVE W
|
||
XMOVEI W,.CPCNI##-KDBCNI ;FAKE KDB I/O INSTRUCTIONS
|
||
|
||
RDIPA1: PUSH P,T1 ;SAVE CRAM ADDRESS
|
||
XCT KDBCNI(W) ;CONI DEV,T1
|
||
TRNN T1,CO.MRN ;CHANNEL RUNNING?
|
||
JRST RDIPA2 ;NO--ALL IS WELL
|
||
JRST TPOPJ## ;RETURN
|
||
|
||
RDIPA2: SETZB T1,T2 ;MAKE SURE CO.LAR IS CLEAR
|
||
XCT KDBCNO(W) ;CONO DEV,(T1)
|
||
MOVE T1,(P) ;GET CRAM ADDRESS BACK
|
||
DPB T1,[POINTR (T2,DO.RAR)] ;PUT ADDRESS INTO CORRECT FIELD
|
||
TLO T2,(.DOLRA!DO.LHW) ;SET UP TO READ LEFT HALF CRAM MICRO-WORD
|
||
PUSH P,T2 ;SAVE ARGUMENT
|
||
XCT KDBDTO(W) ;SELECT LH CRAM ADDRESS
|
||
XCT KDBDTI(W) ;READ LEFT HALF CRAM MICRO-WORD
|
||
AND T2,[DT.CRM] ;KEEP ONLY LH CRAM DATA WORD
|
||
EXCH T2,(P) ;SAVE LH CRAM MICRO-WORD & RETRIEVE ARGUMENT
|
||
TLZ T2,(DO.LHW) ;SET UP TO READ RIGHT HALF CRAM MICRO-WORD
|
||
XCT KDBDTO(W) ;SELECT RH CRAM ADDRESS
|
||
XCT KDBDTI(W) ;READ RIGHT HALF CRAM MICRO-WORD
|
||
AND T2,[DT.CRM] ;KEEP ONLY RH CRAM DATA WORD
|
||
MOVE T3,T2 ;COPY RH CRAM MICRO-WORD
|
||
POP P,T2 ;RETRIEVE LH CRAM MICRO-WORD
|
||
POP P,T1 ;RESTORE CRAM ADDRESS
|
||
PJRST CPOPJ1## ;AND RETURN
|
||
|
||
$HIGH
|
||
> ;END IFN M.KL10&<M.SCA!M.ENET>
|
||
SUBTTL IPA20 CHANNEL I/O -- WTIPA - WRITE CRAM
|
||
|
||
|
||
;WRITE THE CONTENTS OF A CRAM LOCATION
|
||
;CALL: MOVE W, KDB ADDRESS ;IF NORMAL TIMESHARING
|
||
; MOVE T1, CRAM ADDRESS
|
||
; MOVE T2, LEFT HALF CRAM MICRO-WORD
|
||
; MOVE T3, RIGHT HALF CRAM MICRO-WORD
|
||
; PUSHJ P,RDIPA
|
||
; <NON-SKIP> ;CHANNEL IS RUNNING
|
||
; <SKIP> ;CRAM WORD WRITTEN
|
||
;
|
||
;ALL ACS ARE PRESERVED
|
||
|
||
IFN M.KL10&<M.SCA!M.ENET>,<
|
||
$XSENT (WTIPA::)
|
||
PUSHJ P,AUTOWN## ;DO WE OWN THE DATA BASE INTERLOCK?
|
||
JRST WTIPA1 ;NO--DO NORMAL STUFF
|
||
PUSHJ P,SAVW## ;SAVE W
|
||
XMOVEI W,.CPCNI##-KDBCNI ;FAKE KDB I/O INSTRUCTIONS
|
||
|
||
WTIPA1: PUSH P,T1 ;SAVE CRAM ADDRESS
|
||
XCT KDBCNI(W) ;CONI DEV,T1
|
||
TRNN T1,CO.MRN ;CHANNEL RUNNING?
|
||
JRST WTIPA2 ;NO--ALL IS WELL
|
||
JRST TPOPJ## ;RETURN
|
||
|
||
WTIPA2: PUSH P,T2 ;SAVE LH CRAM MICRO-WORD
|
||
PUSH P,T3 ;SAVE RH CRAM MICRO-WORD
|
||
SETZB T1,T2 ;MAKE SURE CO.LAR IS CLEAR
|
||
XCT KDBCNO(W) ;CONO DEV,(T1)
|
||
MOVE T1,-2(P) ;GET CRAM ADDRESS BACK
|
||
DPB T1,[POINTR (T2,DO.RAR)] ;PUT ADDRESS INTO CORRECT FIELD
|
||
TLO T2,(.DOLRA!DO.LHW) ;SET UP TO WRITE LEFT HALF CRAM MICRO-WORD
|
||
PUSH P,T2 ;SAVE ARGUMENT
|
||
XCT KDBDTO(W) ;SELECT LH CRAM ADDRESS
|
||
MOVE T2,-2(P) ;GET LH CRAM MICRO-WORD
|
||
AND T2,[DT.CRM] ;KEEP ONLY RH CRAM DATA WORD
|
||
XCT KDBDTO(W) ;WRITE IT
|
||
POP P,T2 ;GET ARGUMENT BACK
|
||
TLZ T2,(DO.LHW) ;SET UP TO WRITE RIGHT HALF CRAM MICRO-WORD
|
||
XCT KDBDTO(W) ;SELECT RH CRAM ADDRESS
|
||
MOVE T2,(P) ;GET RH CRAM MICRO-WORD
|
||
AND T2,[DT.CRM] ;KEEP ONLY RH CRAM DATA WORD
|
||
XCT KDBDTO(W) ;WRITE IT
|
||
POP P,T3 ;RESTORE RH CRAM MICRO-WORD
|
||
POP P,T2 ;RESTORE LH CRAM MICRO-WORD
|
||
POP P,T1 ;RESTORE CRAM ADDRESS
|
||
JRST CPOPJ1## ;AND RETURN
|
||
|
||
$HIGH
|
||
> ;END IFN M.KL10&<M.SCA!M.ENET>
|
||
SUBTTL DX20 ADAPTER I/O -- DOCUMENTATION
|
||
|
||
;TECHNICAL INFORMATION AND TECHNIQUES FOR PROGRAMMING THE VARIOUS DEVICES
|
||
;MAY BE FOUND IN THE FOLLOWING DOCUMENTS:
|
||
;
|
||
; DX10 DATA CHANNEL MAINTENANCE MANUAL ADDENDUM, CHAPTERS 4-6,
|
||
; DOCUMENT NUMBER EK-DX10-AD-001, JUN 77
|
||
;
|
||
; DX20 PROGRAMMED DEVICE ADAPTER TECHNICAL MANUAL,
|
||
; DOCUMENT NUMBER EK-0DX20-TM-001, FEB 78
|
||
;
|
||
; DX20-V100 FUNCTIONAL SPECIFICATION MICROCODE,
|
||
; DOCUMENT NUMBER 105-220-001-00, MAR 78
|
||
;
|
||
; DX20-V100 MAGNETIC TAPE SUBSYSTEM MICRO-CODE,
|
||
; DOCUMENT NUMBER MAINDEC-10-DXMCA-A-D, SEP 77
|
||
;
|
||
; RH20 MASSBUS CONTROLLER UNIT DESCRIPTION,
|
||
; DOCUMENT NUMBER EK-RH20-UD-001, AUG 76
|
||
SUBTTL DX20 ADAPTER I/O -- REGISTER DEFINITIONS
|
||
|
||
IFN M.KL10&<M.RNX!M.DX20>,<
|
||
|
||
.DXMTR==03B5 ;MAINTENANCE REGISTER
|
||
MR.SCY==1B31 ;MICROPROCESSOR SINGLE CYCLE
|
||
MR.STR==1B33 ;MICROPROCESSOR START
|
||
MR.RES==1B34 ;MICROPROCESSOR RESET
|
||
|
||
.DXDTR==06B5 ;DRIVE TYPE REGISTER
|
||
|
||
.DXMIR==30B5 ;MICROCONTROLLER INSTRUCTION REGISTER
|
||
|
||
.DXPCR==31B5 ;MICROPROCESSOR PC REGISTER
|
||
PC.IRE==1B20 ;INSTRUCTION REGISTER ENABLE
|
||
PC.MSE==1B21 ;MICROSTORE ENABLE
|
||
PC.PCE==1B22 ;PC ENABLE
|
||
PC.PCI==1B23 ;PC AUTO INCREMENT
|
||
PC.MPC==7777B35 ;MICROPROCESSOR PC
|
||
|
||
.DXIBR==36B5 ;DIAGNOSTIC REGISTER 7
|
||
DX.IBR==377 ;CONTENTS OF THE BR REGISTER
|
||
|
||
.DXIPE==37B5 ;DIAGNOSTIC REGISTER 7
|
||
DX.IPE==1B22 ;INSTRUCTION REGISTER PARITY ERROR
|
||
|
||
.CRM10==10 ;LOCATION IN THE CRAM CONTAINING A CODE
|
||
; CHECKED BY THE DRIVERS TO SEE IF THE
|
||
; MICROCODE IS VALID
|
||
|
||
.DXSAD==1 ;FULL START ADDRESS FOR ALL VERSIONS
|
||
; OF THE DX20 MICROCODE
|
||
>; END IFN M.KL10&<M.RNX!M.DX20>
|
||
SUBTTL DX20 ADAPTER I/O -- DXLOAD - LOAD DX20 MICROCODE
|
||
|
||
IFN M.KL10&<M.RNX!M.DX20>,<
|
||
|
||
;ROUTINE TO CLEAR, LOAD, AND VERIFY, AND START THE MICROCODE FOR A DX20.
|
||
;CALL:
|
||
; T1/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,DXLOAD
|
||
;RETURN CPOPJ IF UNSUCCESSFUL
|
||
; CPOPJ1 WITH MICROCODE LOADED BUT NOT STARTED
|
||
|
||
DXLOAD::PUSHJ P,SAVE4## ;SAVE SOME ACS
|
||
PUSHJ P,SAVU## ;SAVE U
|
||
MOVE U,T1 ;COPY MICROCODE LOADER BLOCK ADDRESS
|
||
PUSHJ P,BTUCOD## ;FIND ADDRESS
|
||
JRST DXLOA1 ;NOT AVAILABLE
|
||
PUSHJ P,MPRES ;RESET THE MICROPROCESSOR
|
||
PUSHJ P,DXCLR ;CLEAR THE CRAM AND WORKING MEMORY
|
||
PUSHJ P,LOAD ;LOAD THE MICROCODE
|
||
JRST DXLOA1 ;FAILED
|
||
PUSHJ P,VERIFY ;VERIFY THE MICROCODE THAT WE JUST LOADED
|
||
JRST DXLOA1 ;FAILED
|
||
PUSHJ P,MPCHK ;DO A FINAL CHECK ON THE MICROSTORE
|
||
JRST DXLOA1 ;FAILED
|
||
PUSHJ P,RDCRM0 ;READ THE VERSION NUMBER FROM CRAM LOC 0
|
||
LDB T1,[POINT 6,T2,25] ;GET MAJOR VERSION
|
||
LSH T1,30 ;POSITION
|
||
TRZ T2,777600 ;ISOLATE EDIT LEVEL
|
||
IOR T2,T1 ;FORM STANDARD DEC-10 VERSION NUMBER
|
||
PUSH P,T2 ;SAVE IT
|
||
PUSHJ P,DXSTRT ;START THE DX20
|
||
POP P,.ULVER(U) ;SET VERSION IN MICROCODE LOADER BLOCK
|
||
MOVE T1,U ;POINT TO THE MICROCODE LOADER BLOCK ADDRESS
|
||
PUSHJ P,BTURPT## ;REPORT A SUCESSFUL LOAD
|
||
JRST CPOPJ1## ;GIVE SKIP RETURN
|
||
DXLOA1: MOVEI T2,.CRM10 ;WRITE A 0 INTO CRAM LOCATION 10
|
||
MOVEI T3,0 ; SO THAT ATTEMPTS TO START THIS DX20
|
||
PUSHJ P,WRCRAM ; WILL FAIL
|
||
MOVE T1,U ;COPY MICROCODE LOADER BLOCK ADDRESS
|
||
PJRST BTURPT## ;REPORT LOAD ERROR AND RETURN
|
||
|
||
|
||
;It might occur to someone to call BTURPT before DXSTRT to save the
|
||
;PUSH and POP of the microcode version number. It is done that way
|
||
;to waste enough KL CPU time to give the DX20 microprocessor enough
|
||
;time to get through its full initialization and get to the idle
|
||
;loop before a massbus init or a call to the reset routine stops
|
||
;it again. If the DX20 doesn't finish its initialization, the
|
||
;restart of the microprocessor (at a different start address than
|
||
;that used by DXSTRT) will cause strange things to happen.
|
||
;ROUTINE TO LOAD OR VERIFY THE MICROCODE IN A DX20.
|
||
;CALL:
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,LOAD/VERIFY
|
||
;RETURN CPOPJ IF ERROR
|
||
; CPOPJ1 WITH FUNCTION PERFORMED SUCCESSFULLY
|
||
|
||
LOAD: PUSH P,[.DXPCR!PC.MSE!PC.PCE] ;DATAO BITS TO WRITE CRAM
|
||
PUSH P,[IFIW LDCRAM] ;ROUTINE TO LOAD CRAM
|
||
PUSH P,[IFIW LDWM] ;ROUTINE TO LOAD DRAM
|
||
PUSH P,[.UEDRL,,.UECRL] ;DRAM,,CRAM ERROR CODES
|
||
JRST FUNC ;ENTER COMMON CODE
|
||
|
||
VERIFY: JRST CPOPJ1##
|
||
PUSH P,[.DXPCR!PC.IRE!PC.PCE] ;DATAO BITS TO READ CRAM
|
||
PUSH P,[IFIW VFCRAM] ;ROUTINE TO VERIFY CRAM
|
||
PUSH P,[IFIW VFWM] ;ROUTINE TO VERIFY DRAM
|
||
PUSH P,[.UEDRV,,.UECRV] ;DRAM,,CRAM ERROR CODES
|
||
|
||
FUNC: PUSH P,[EXP 0] ;RESERVE SPACE FOR CRAM LOCATION 0
|
||
MOVSI P2,-3777 ;AOBJN POINTER
|
||
MOVSI P3,(<POINT 18,,>!1B12) ;MAKE A TWO WORD BYTE POINTER
|
||
MOVE P4,.ULADR(U) ;GET UCODE ADDRESS
|
||
FUNC1: ILDB T1,P3 ;GET A BYTE OF DATA
|
||
HRRZ T2,P2 ;GET CRAM ADDRESS
|
||
SKIPE T3,.ULMAG(U) ;HAVE A MAGIC NUMBER TRANSLATION TABLE?
|
||
PUSHJ P,MAGIC ;YES--SEE IF A SUBSTITUTION IS NECESSARY
|
||
IOR T2,-4(P) ;INCLUDE DATAO BITS TO READ/WRITE CRAM
|
||
PUSHJ P,WTMBR## ;INITIALIZE ADDRESS OF CRAM LOCATIONS
|
||
PUSHJ P,@-3(P) ;DISPATCH TO CRAM FUNCTION ROUTINE
|
||
JRST FUNC3 ;ERROR
|
||
AOBJN P2,FUNC1 ;LOOP
|
||
PUSHJ P,RDCRM0 ;READ THE CONTENTS OF CRAM LOCATION 0
|
||
HRRZM T2,(P) ;SAVE ON STACK
|
||
MOVSI P2,-1777 ;AOBJN POINTER
|
||
MOVSI P3,(<POINT 8,,>!1B12) ;MAKE A TWO WORD BYTE POINTER
|
||
MOVE P4,.ULADR(U) ;GET ADDRESS OF UCODE STORAGE
|
||
ADDI P4,2000 ;OFFSET TO THE DRAM DATA
|
||
FUNC2: HRRZ T2,P2 ;GET WORKING MEMORY ADDRESS
|
||
PUSHJ P,LDMAR ;SET MAR/MARX TO THAT VALUE
|
||
ILDB T1,P3 ;GET A BYTE OF DATA
|
||
ANDI T1,377 ;KEEP ONLY 8 BITS
|
||
PUSHJ P,@-2(P) ;DISPATCH TO WORKING MEMORY FUNCTION ROUTINE
|
||
JRST FUNC4 ;ERROR
|
||
AOBJN P2,FUNC2 ;LOOP
|
||
MOVEI T2,0 ;RESTORE THE VALUE THAT WAS IN CRAM LOCATION
|
||
POP P,T3 ;GET PREVIOUS CONTENTS OF CRAM LOCATION 0
|
||
PUSHJ P,WRCRAM ; LOADING WORKING MEMORY
|
||
ADJSP P,-4 ;PHASE STACK
|
||
JRST CPOPJ1## ;RETURN
|
||
FUNC3: SKIPA T1,-1(P) ;CRAM LOAD/VERIFY ERROR
|
||
FUNC4: HLRZ T1,-1(P) ;DRAM LOAD/VERIFY ERROR
|
||
DPB T1,ULBEBP## ;STORE
|
||
ADJSP P,-5 ;PHASE STACK
|
||
POPJ P, ;RETURN
|
||
;ROUTINE TO CLEAR THE CRAM AND WORKING MEMORY OF A DX20.
|
||
;CALL:
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,DXCLR
|
||
;RETURN CPOPJ ALWAYS
|
||
|
||
DXCLR: POPJ P,
|
||
PUSH P,F ;SAVE F
|
||
MOVSI F,-4000 ;4000 LOCATIONS TO CLEAR IN THE CRAM
|
||
DXCLR1: HRRZ T2,F ;GET THE ADDRESS TO WRITE
|
||
MOVEI T3,0 ;PUT A ZERO IN IT
|
||
PUSHJ P,WRCRAM ;WRITE THE CRAM LOCATION
|
||
AOBJN F,DXCLR1 ;WRITE THEM ALL
|
||
|
||
MOVEI T2,0 ;SET THE MAR/MAR EXTENSION
|
||
PUSHJ P,LDMAR ; TO 0
|
||
MOVEI F,2000 ;2000 LOCATIONS IN THE WORKING MEMORY
|
||
DXCLR2: MOVEI T2,11400 ;LDMEM 0,I MICROINSTRUCTION
|
||
PUSHJ P,DXXCT ;CLEAR NEXT LOCATION IN WORKING MEMORY
|
||
SOJG F,DXCLR2 ;DO THEM ALL
|
||
JRST FPOPJ## ;RESTORE F AND RETURN
|
||
|
||
|
||
;ROUTINE TO START THE DX20 MICROPROCESSOR AT THE FULL START ENTRY
|
||
;POINT.
|
||
;CALL:
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,DXSTRT
|
||
;RETURN CPOPJ ALWAYS
|
||
|
||
DXSTRT: PUSHJ P,MPRES ;MAKE SURE THE PROCESSOR IS RESET
|
||
MOVE T2,[.DXPCR!PC.IRE!PC.PCE!PC.PCI!INSVL.(.DXSAD,PC.MPC)]
|
||
PUSHJ P,WTMBR## ;SET THE PC TO THE FULL START ADDRESS
|
||
MOVE T2,[.DXMTR!MR.STR] ;MAINTENANCE REGISTER+START BIT
|
||
PJRST WTMBR## ;START THE MICROPROCESSOR AND RETURN
|
||
;ROUTINE TO READ THE CONTENTS OF CRAM LOCATION 0.
|
||
;CALL:
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,RDCRM0
|
||
;RETURN CPOPJ ALWAYS WITH:
|
||
; T2/CONTENTS OF CRAM LOCATION 0
|
||
|
||
RDCRM0: MOVE T2,[.DXPCR!PC.IRE!PC.PCE!INSVL.(0,PC.MPC)] ;SET TO READ
|
||
PUSHJ P,WTMBR## ; CRAM LOCATION 0
|
||
MOVSI T2,(.DXMIR) ;READING THIS REGISTER RETURNS THE VALUE
|
||
PJRST RDMBR## ; THAT IS ADDRESSED BY THE PC REGISTER
|
||
|
||
|
||
;ROUTINE TO WRITE A WORD INTO A DX20 CRAM LOCATION.
|
||
;CALL:
|
||
; T2/ADDRESS OF LOCATION TO WRITE
|
||
; T3/DATA TO BE WRITTEN
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,WRCRAM
|
||
;RETURN CPOPJ ALWAYS
|
||
|
||
WRCRAM: PUSH P,T3 ;SAVE THE DATA TO BE WRITTEN
|
||
TDO T2,[.DXPCR!PC.MSE!PC.PCE] ;PC REGISTER+BITS TO ENABLE
|
||
PUSHJ P,WTMBR## ; MICROSTORE AND PC WRITES
|
||
POP P,T2 ;RESTORE THE DATA TO BE WRITTEN
|
||
HRLI T2,(.DXMIR) ;WRITES INTO THE IR GO INTO THE CRAM LOCATION
|
||
PJRST WTMBR## ; ADDRESSED BY THE PC REGISTER
|
||
|
||
|
||
;ROUTINE TO LOAD THE DX20 MEMORY ADDRESS AND ADDRESS EXTENSION REGISTERS
|
||
;(MAR AND MARX) WITH A VALUE.
|
||
;CALL:
|
||
; T2/ADDRESS TO LOAD
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,LDMAR
|
||
;RETURN CPOPJ ALWAYS
|
||
|
||
LDMAR: PUSH P,T2 ;SAVE THE ADDRESS TO LOAD
|
||
ANDI T2,377 ;KEEP LOW 8 BITS
|
||
TRO T2,1000 ;ADD A LDMAR MICROINSTRUCTION
|
||
PUSHJ P,DXXCT ;EXECUTE IT
|
||
POP P,T2 ;RESTORE THE ADDRESS TO LOAD
|
||
LSH T2,-^D8 ;GET 2 HIGH ORDER BITS
|
||
TRO T2,400 ;ADD A LDMARX MICROINSTRUCTION
|
||
PJRST DXXCT ;EXECUTE THAT AND RETURN
|
||
;ROUTINE TO CAUSE THE DX20 TO EXECUTE AN INSTRUCTION.
|
||
;CALL:
|
||
; T2/MICROINSTRUCTION TO EXECUTE
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,DXXCT
|
||
;RETURN CPOPJ ALWAYS
|
||
|
||
DXXCT: PUSH P,T2 ;SAVE THE INSTRUCTION TO EXECUTE
|
||
MOVE T2,[.DXMTR!MR.SCY] ;GET MAINTENANCE REGISTER AND SINGLE CYLCLE
|
||
PUSHJ P,WTMBR## ;FORCE THE DX20 INTO SINGLE CYCLE MODE
|
||
MOVEI T2,0 ;STORE THE INSTRUCTIN TO EXECTUTE IN CRAM LOC 0
|
||
POP P,T3 ;RESTORE THE INSTRUCTION TO EXECUTE
|
||
PUSHJ P,WRCRAM ;WRITE IT INTO THE CRAM
|
||
MOVE T2,[.DXPCR!PC.IRE!PC.PCI] ;PC REG+IR ENABLE+PC AUTO INCR
|
||
PUSHJ P,WTMBR## ;SETUP TO EXECUTE THE INSTRUCTION
|
||
MOVE T2,[.DXMTR!MR.SCY!MR.STR] ;MAINT REG+SINGLE CYCLE+START
|
||
PUSHJ P,WTMBR## ;EXECUTE THE INSTRUCTION
|
||
MOVSI T2,(.DXMTR) ;CLEAR SINGLE CYCLE AND LEAVE START OFF
|
||
PJRST WTMBR## ;CLEAR START AND RETURN
|
||
;ROUTINE TO LOAD DATA INTO A CRAM LOCATION.
|
||
;CALL:
|
||
; T1/16 BITS OF DATA TO WRITE
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,LDCRAM
|
||
;RETURN CPOPJ1 ALWAYS
|
||
|
||
LDCRAM: HRRZ T2,T1 ;MOVE DATA TO THE RIGHT AC
|
||
HRLI T2,(.DXMIR) ;ADD THE REGISTER THAT WE WANT
|
||
PUSHJ P,WTMBR## ;DO THE DATAO THAT CAUSES THE WRITE
|
||
JRST CPOPJ1## ;GIVE SKIP RETURN
|
||
|
||
|
||
;ROUTINE TO LOAD DATA INTO A WORKING MEMORY LOCATION.
|
||
;CALL:
|
||
; T1/8 BITS OF DATA TO WRITE
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,LDWM
|
||
;RETURN CPOPJ1 ALWAYS
|
||
|
||
LDWM: HRRZ T2,T1 ;GET DATA INTO THE WRITE AC
|
||
TRO T2,11400 ;ADD A LDMEM N,I MICROINSTRUCTION
|
||
PUSHJ P,DXXCT ;EXECUTE THE INSTRUCTION
|
||
JRST CPOPJ1## ;GIVE SKIP RETURN
|
||
;ROUTINE TO VERIFY THE DATA IN A CRAM LOCATION.
|
||
;CALL:
|
||
; T1/16 BITS OF CRAM DATA
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,VFCRAM
|
||
;RETURN CPOPJ IF NO MATCH
|
||
; CPOPJ1 IF MATCH
|
||
|
||
VFCRAM: MOVSI T2,(.DXMIR) ;READ THIS REGISTER TO GET THE DATA
|
||
PUSHJ P,RDMBR## ;READ THE DATA
|
||
CAIN T2,(T1) ;MATCH WITH WHAT IT SHOULD BE?
|
||
AOS (P) ;YES--SKIP
|
||
POPJ P, ;RETURN
|
||
|
||
|
||
;ROUTINE TO VERIFY THE DATA IN A WORKING MEMORY LOCATION
|
||
;CALL:
|
||
; T1/8 BITS OF DATA
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
; PUSHJ P,VFWM
|
||
;RETURN CPOPJ IF NO MATCH
|
||
; CPOPJ1 IF MATCH
|
||
|
||
VFWM: MOVEI T2,043411 ;GET A MOVMEM BR,I MICROINSTRUCTION
|
||
PUSHJ P,DXXCT ;EXECUTE IT
|
||
MOVSI T2,(.DXIBR) ;REGISTER TO READ THE BR
|
||
PUSHJ P,RDMBR## ;READ THE REGISTER
|
||
ANDI T2,DX.IBR ;KEEP ONLY THE BR OUTPUT
|
||
CAIE T2,(T1) ;MATCH?
|
||
POPJ P, ;NO
|
||
JRST CPOPJ1## ;YES, GIVE SKIP RETURN
|
||
|
||
|
||
;ROUTINE TO SUBSTITUTE A MAGIC NUMBER
|
||
;CALL:
|
||
; T2/LOAD ADDRESS
|
||
; T3/MAGIC TRANSLATION TABLE
|
||
; PUSHJ P,MAGIC
|
||
;RETURN CPOPJ ALWAYS WITH T1 CONTAINING POSSIBLY UPDATED DATA
|
||
|
||
MAGIC: MOVE T4,(T3) ;GET A WORD
|
||
AOJE T4,CPOPJ## ;RETURN IF END OF TABLE
|
||
HRRZ T4,(T3) ;GET AN ADDRESS
|
||
CAIE T4,(T2) ;MATCH?
|
||
AOJA T3,MAGIC ;LOOP
|
||
HLRZ T1,(T3) ;GET ASSOCIATED MAGIC VALUE
|
||
POPJ P, ;AND RETURN
|
||
;ROUTINE TO RESET THE DX20 MICROPROCESSOR
|
||
;CALL:
|
||
; U/ MICROCODE LOADER BLOCK ADDRESS
|
||
; PUSHJ P,MPRES
|
||
;RETURN CPOPJ ALWAYS
|
||
|
||
MPRES: MOVE T2,[.DXMTR!MR.RES] ;SET RESET BIT IN MAINT REG
|
||
PJRST WTMBR## ;RESET THE DX20
|
||
|
||
|
||
;ROUTINE TO CHECK THE STATUS OF THE MICROPROCESSOR
|
||
;CALL:
|
||
; U/ADDRESS OF MICROCODE LOADER BLOCK
|
||
;RETURNS CPOPJ IF CONSISTANCY CHECKS FAIL OR CPOPJ1 IF OK
|
||
|
||
MPCHK: MOVE T2,[.DXPCR!PC.IRE!PC.PCE!PC.PCI!7] ;REGISTER TO WRITE+
|
||
; IR ENABLE+PC ENABLE+PC AUTO INCR+PC TO READ
|
||
PUSHJ P,WTMBR## ;WRITE THE REGISTER
|
||
MOVSI T2,(.DXMIR) ;POINT AT DIAGNOSTIC REGISTER 0
|
||
PUSHJ P,RDMBR## ;READ THE CONTENTS
|
||
PUSH P,T2 ;SAVE FOR COMPARE
|
||
MOVSI T2,(.DXDTR) ;POINT AT DRIVE TYPE REGISTER
|
||
PUSHJ P,RDMBR## ;READ THAT
|
||
POP P,T3 ;RESTORE CRAM LOCATION 7
|
||
CAME T2,T3 ;HAVE TO BE THE SAME
|
||
POPJ P, ;ERROR IF NOT
|
||
MOVSI T2,(.DXIPE) ;POINT AT DIAGNOSTIC REGISTER 7
|
||
PUSHJ P,RDMBR## ;READ IT
|
||
TRNN T2,DX.IPE ;IR PARITY ERROR ON LAST READ?
|
||
AOS (P) ;NO, GIVE SKIP RETURN
|
||
POPJ P, ; AND RETURN
|
||
>; END IFN M.KL10&<M.RNX!M.DX20>
|
||
$LIT
|
||
|
||
COMEND: END
|