1
0
mirror of https://github.com/PDP-10/its.git synced 2026-04-11 07:17:22 +00:00

Build ITS monitor from source code.

This commit is contained in:
Lars Brinkhoff
2016-10-29 12:46:05 +02:00
parent 0ae963dd21
commit c7c4e2b9dd
97 changed files with 96244 additions and 2 deletions

1111
src/system/bits.117 Executable file

File diff suppressed because it is too large Load Diff

26
src/system/ch10.defs1 Executable file
View File

@@ -0,0 +1,26 @@
;Hardware definitions for CH10 PDP-10 CHAOSNET interface
CHX==470 ;I/O Device number
;CONI/CONO BITS
;1.1-1.3 PIA
CHXTEN==10 ;1.4 Transmit interrupt enable
CHXREN==20 ;1.5 Receive interrupt enable
CHXSPY==40 ;1.6 Match any destination (on receive)
CHXLUP==100 ;1.7 Loop back
CHXSWB==200 ;1.8 Swap bytes
CHXHLF==400 ;1.9 Halfword DATAO
CHXXMT==1000 ;2.1 Transmit done (CONI)
; Transmit or retransmit packet (CONO)
CHXRCV==2000 ;2.2 Receive done (CONI)
; Enable to receive next packet (CONO)
CHXABT==4000 ;2.3 Transmit aborted (CONI)
; Reset transmitter (CONO)
$CHXLC==140400 ;2.4-2.7 Lost count (CONI)
CHXRST==10000 ;2.4 Reset (CONO)
CHXCRC==200000 ;2.8 CRC error (CONI)
CHXWLE==400000 ;2.9 Word length error (CONI)
CHXPLE==1,, ;3.1 Packet length error (CONI)
CHXOVR==2,, ;3.2 Overrun (CONI)
$CHXAD==242000 ;3.3-4.9 Chaosnet address (CONI)

58
src/system/ch11.defs1 Executable file
View File

@@ -0,0 +1,58 @@
;; CH11 Unibus Chaosnet Interface definitions
CAICSR=3,,764140 ;COMMAND STATUS REG
CH%CSR==0
%CABSY==1 ;0 XMT BUSY (RO)
%CALUP==2 ;1 LOOP BACK (R/W)
%CASPY==4 ;2 RECIEVE MSGS FOR ANY DESTINATION (R/W)
%CARCL==10 ;3 CLEAR THE RECEIVER, IT CAN NOW GOBBLE ANOTHER MSG (WO)
%CAREN==20 ;4 RCV INT ENB (R/W)
%CATEN==40 ;5 XMT INT ENB (R/W)
%CATAB==100 ;6 TRANSMIT ABORTED BY ETHER CONFLICT (RO)
%CATDN==200 ;7 TRANSMIT DONE. SET WHEN TRANSMITTER IS DONE
%CATCL==400 ;8 CLEAR THE TRANSMITTER, MAKING IT READY (WO)
$CALOS==110400 ;9-12 LOST COUNT (RO) [# MSGS RCVED WITH RCV BFR FULL]
; WHEN MSG IS WAITING IN BUFFER, THIS COUNTS
; THE MESSAGES THAT MATCHED OUR DESTINATION OR
; WERE BROADCAST, BUT COULDN'T BE RECIEVED.
; WHEN RECEIVER IS RE-ENABLED (WRITE 1 INTO %CARDN)
; THE COUNT IS THEN CLEARED.
; WHEN A MESSAGE IS LOST, RECEIVER ZAPS ETHER
; SO TRANSMITTER WILL ABORT (IF MESSAGE WAS DESTINED
; TO US.)
%CARST==20000 ;13 I/O RESET (WO)
%CAERR==40000 ;14 CRC ERROR (RO)
%CARDN==100000 ;15 RCV DONE.
CAIMYN==3,,764142 ;MY # (READ ONLY)
CH%MYN==2 ;RETURNS THE [SOURCE] HOST# OF THIS INTERFACE.
CAIWBF=3,,764142 ;WRITE BUFFER (WRITE ONLY)
CH%WBF==2 ;FIRST WAIT FOR TDONE. (OR SET IT VIA CSR)
;FIRST WORD IN RESETS TRANSMITTER AND CLEARS TDONE.
;STORE INTO THIS REGISTER TO WRITE WORDS OF MESSAGE,
;LAST WORD IN IS DESTINATION ADDRESS, THEN READ CAIXMT.
;SOURCE ADDRESS AND CHECK WORD PUT IN BY HARDWARE.
CAIRBF=3,,764144 ;READ BUFFER (READ ONLY)
CH%RBF==4 ;THE FIRST WORD READ WILL BE FILLED TO THE LEFT
;TO MAKE THE MESSAGE RECIEVED A MULTIPLE OF 16 BITS.
;IF THE NUMBER OF DATA BITS IN THE MESSAGE WAS A
;MULTIPLE OF 16, THIS WORD WILL BE THE FIRST WORD PUT
;INTO THE BUFFER BY THE TRANSMITTING HOST.
;THE LAST 3 WORDS READ ARE DESTINATION, SOURCE, CHECK.
CAIRBC=3,,764146 ;RECEIVE BIT COUNTER (READ ONLY)
CH%RBC==6 ;WHEN A MESSAGE HAS BEEN RECEIVED THIS IS ONE LESS THAN
;THE NUMBER OF BITS IN THE MESSAGE (16 X THE
;NUMBER OF WORDS INCLUDING THE THREE OVERHEAD WORDS.)
;AFTER THE LAST WORD (THE CRC WORD) HAS BEEN READ, IT IS 7777
;BITS 10 AND 11 ARE THE HIGH ORDER BITS, AND IF THEY ARE ONE,
;THEN THERE WAS A BUFFER OVERFLOW
CAIXMT=3,,764152 ;READING THIS INITIATES TRANSMISSION (!!)
CH%XMT==12 ;THE VALUE READ IS ONE'S OWN HOST#.
;REFERENCING ADDRESSES IN THE GROUP OF 8 WORDS NOT LISTED HERE, OR
;USING COMBINATIONS OF READ/WRITE NOT LISTED HERE, WILL TYPICALLY CAUSE
;STRANGE AND BIZARRE EFFECTS.

2782
src/system/chaos.288 Executable file

File diff suppressed because it is too large Load Diff

68
src/system/chsdef.15 Executable file
View File

@@ -0,0 +1,68 @@
;;; CHAOS NET PACKET DEFINITION
;NOTE, IF YOU MAKE CHANGES TO OPCODES OR CONNECTION STATE SYMBOLS,
;ALSO CHANGE AI:MAINT;CHS DEFS.
;THIS FILE IS FOR PDP-10'S - CHS DEFS IS FOR PDP-11'S.
;PACKET HEADER
;NOTE THESE ARE FULL WORD BYTE POINTERS, INCLUDING A WORD OFFSET
$CPKOP==341000,,0 ;OPCODE
%CO==,,-1
%CORFC==1 ;REQUEST FOR CONNECTION
%COOPN==2 ;OPEN
%COCLS==3 ;CLOSE
%COFWD==4 ;FORWARD
%COANS==5 ;ANSWER
%COSNS==6 ;SENSE STATUS
%COSTS==7 ;REPORT STATUS
%CORUT==10 ;ROUTING INFO (NOT YET USED)
%COLOS==11 ;REPORT LOSSAGE
%COLSN==12 ;LISTEN FOR RFC
%COMNT==13 ;MAINTENANCE USE, IGNORED BY NORMAL NCPS
%COEOF==14 ;END OF FILE
%COUNC==15 ;UNCONTROLLED USER PACKET
%COBRD==16 ;Software broadcast packet
%COMAX==17 ;HIGHEST NON-DATA OPCODE +1
%CODAT==200 ;NORMAL DATA OPCODE (NOTE SIGN BIT OF WORD IS SET)
%CODWD==300 ;16-BIT DATA
$CPKMV==241000,,0 ;"MUPPET" VERSION (MUST BE ZERO, NO MUPPETS EXIST!)
$CPKFC==200400,,0 ;FORWARDING COUNT
$CPKNB==041400,,0 ;NUMBER OF BYTES
$CPKDA==242000,,1 ;DESTINATION ADDRESS
$CPKDN==341000,,1 ;DESTINATION SUBNET
$CPKDH==241000,,1 ;DESTINATION HOST
$CPKDI==042000,,1 ;DESTINATION INDEX
%CPKD==1 ;DESTINATION ADDRESS WORD
$CPKSA==242000,,2 ;SOURCE ADDRESS
$CPKSN==341000,,2 ;SOURCE SUBNET
$CPKSH==241000,,2 ;SOURCE HOST
$CPKSI==042000,,2 ;SOURCE INDEX
%CPKS==2 ;SOURCE ADDRESS WORD
$CPKPN==242000,,3 ;PACKET NUMBER
$CPKAN==042000,,3 ;ACKNOWLEDGE NUMBER
%CPKDT==4 ;FIRST WORD OF DATA
;PACKET SIZE
;THESE NUMBERS ARE FOR 1K PACKET BUFFERS
;%CPMXW==30. ;MAXIMUM NUMBER OF PDP10 WORDS IN WHOLE PACKET
;%CPMXC==104. ;MAXIMUM NUMBER OF CHARACTERS OF DATA
;THESE NUMBERS ARE FOR 4K PACKET BUFFERS
%CPMXW==126. ;MAXIMUM NUMBER OF PDP10 WORDS IN WHOLE PACKET
%CPMXC==488. ;MAXIMUM NUMBER OF CHARACTERS OF DATA
;CONNECTION STATES
%CS==,,-1
%CSCLS==0 ;CLOSED
%CSLSN==1 ;LISTENING
%CSRFC==2 ;RFC RECEIVED
%CSRFS==3 ;RFC SENT
%CSOPN==4 ;OPEN
%CSLOS==5 ;BROKEN BY RECEIPT OF "LOS"
%CSINC==6 ;BROKEN BY INCOMPLETE TRANSMISSION (NO RESPONSE TO SNS)
%CSFRN==7 ;OPEN IN FOREIGN PROTOCOL MODE
%CSBRS==10 ;BRD sent state

926
src/system/config.196 Executable file
View File

@@ -0,0 +1,926 @@
.AUXIL
;;; "INSTALLATION" RELATED SWITCHES
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [
$$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
.MLLIT==1
$$TEMP==1
]
.ELSE $$TEMP==0
IFNDEF DEFOPT,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
;BUT NORMALLY, DEFOPT FOO==BAR DOES IT UNLESS FOO ALREADY DEFINED
DEFINE DEFOPT X/
IRPS Z,,[X]
IFNDEF Z, X
.ISTOP
TERMIN TERMIN
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
.MLLIT==1
$$TEM2==1
]
.ELSE $$TEM2==0
IFE MCOND AIKA,[
DEFOPT KA10P==1 ;AI-KA HAS KA10 PROCESSOR
DEFOPT MAXJ==85. ;MAX NUMBER OF JOBS ALLOWED
DEFOPT SWBLK==1 ;1=> SWAP BLOCKING, 0=> PRIVILEGED USER
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
DEFOPT PAGPRE==1 ;PAGE-IN PREEMPTION
DEFOPT SCHBLN==10. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
DEFOPT NQS==8. ;# 2314 UNITS
DEFOPT NTUTBL==2 ;TUTS ARE 2 BLOCKS LONG (THIS DEFN BETTER AGREE WITH DC10 DEFS)
DEFSYM NUDSL==440. ;# USER DIRECTORIES ON DISK. NOTE: JUST CHANGING THIS
; IS NOT SUFFICIENT!!
DEFOPT NQCHN==40. ;NUMBER 2314 CHNLS
DEFOPT DC10P==1 ;HAS SYSTEMS CONCEPTS DISK CONTROL
DEFOPT DMDSK==0 ;DOES NOT USE DM DSK FORMAT (I.E. HAS EXTRA WORDS)
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS (SECONDARY PACK)
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
DEFOPT C1MXP==1 ;CHNL 1 MPX FEATURE
DEFOPT NMTCS==1 ;NUMBER MAG TAPE UNITS
DEFOPT TM10A==1 ;IO-BUS MAG TAPE
DEFOPT PTRP==1 ;HAS PAPER TAPE
DEFOPT PTPP==0 ; But punch doesn't work!
DEFOPT PDCLKP==1 ;"DeCoriolis" CLOCK
DEFOPT DPKPP==1 ;DATA POINT KLUDGE (TTY mux)
DEFOPT NETP==1 ; Connected to a network
DEFOPT IMPP==1 ; Has IMP interface
DEFOPT KAIMP==1
DEFOPT IMPUS==206 ; ARPA net host number
DEFOPT IMPUS3==<1200,,400006> ; Internet host number
DEFOPT NCPP==1 ; Include NCP code
DEFOPT NNETCH==30. ; # NCP network channels
DEFOPT INETP==1 ; Include Internet code
DEFOPT TCPP==1 ; Include TCP code
DEFOPT XBL==20. ; # TCP network channels
DEFOPT TK10P==1 ;HAS TK10 TTY SCANNER (NO MORE, BUT LEAVE IT SO TTY#S DON'T CHANGE)
DEFOPT NOTYS==1 ;# KA-10 CONSOLE 0 TTYS
DEFOPT NNTYS==16. ;# TTYS ON KNIGHT KLUDGE
DEFOPT NDPTYS==9. ;# TTYS ON DATAPOINT KLUDGE
DEFOPT NSTTYS==16. ;# OF STY'S (PSEUDO-TTY'S)
DEFOPT APL==10 ;AP TTY # (really?)
DEFOPT CODP==1 ; Has Morse code output device (no antenna though)
; The following AI-KA stuff is broken since the 10-11 interface doesn't work,
; but is retained in case it gets fixed.
DEFOPT TEN11P==0 ; Rubin 10-11 interface
IFN TEN11P,[
DEFOPT XGP==1 ; Has XGP
DEFOPT CHAOSP==1 ; Has CHAOS net
DEFOPT MYCHAD==2026 ; CHAOS net address
DEFOPT NINDX==50. ; Number of Chaosnet indices
DEFOPT T11CHP==1 ; CHAOS net goes through TEN-11 interface
DEFOPT CH11NM==7 ; # of 10-11 PDP11 handling CHAOS net.
DEFOPT TT11NM==0 ; # of 10-11 PDP11 that handles TV TTYs.
DEFOPT N11TYS==16. ; # PDP11 TV TTYS
DEFOPT MXVBN==40 ; Max video bfr # for assignment purposes.
] ;TEN11P ; These actually correspond to video switch inputs.
; The following stuff used to be on AI-KA and is unlikely to ever
; come back.
;DEFOPT PDP6P==0 ;HAS PDP6 (ALAS, NO MORE)
;DEFOPT 340P==0 ;HAS 340 DISPLAY (ALAS, NO MORE)
;DEFOPT TABP==0 ;DOESN'T HAVE SYLVANIA TABLET ANY MORE
;DEFOPT DSDP==0 ;HAS DESELECTION DEVICE (ALAS, NO MORE)
;DEFOPT NEWDTP==0 ;HAD OLD DECTAPE CONTROLLER
;DEFOPT RBTCP==0 ;ROBOT CONSOLE
;DEFOPT HCLKP==0 ;HOLLOWAY CLOCK (ALAS, NO MORE)
;DEFOPT ARMP==0 ;HAS NO ARM (AMF MOSTLY) (R.I.P.)
;DEFOPT OMXP==0 ;HAS OMX (OUTPUT MULTIPLEXOR) (ALAS, NO MORE)
;DEFOPT IMXP==0 ;HAS IMX (INPUT MULTIPLEXOR) (ALAS, NO MORE)
;DEFOPT VIDP==0 ;HAD VIDI (R.I.P.)
;DEFOPT CCLKP==0 ;NO CHESS TOURN CLOCK STUFF
;DEFOPT NDAP==0 ;NEW D/A CONVERTERS (ALAS, NO MORE)
; Physical memory variables
DEFOPT TSYSM==768. ;TOTAL PDP10 1K MEM BLOCKS
DEFOPT ECCMEM==1 ;HAS HIC'S ERROR CORRECTING MEMORY
DEFOPT NMMP==4 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.);
DEFSYM PMRCM==1777 ;CORE ADR FIELD IN PAGE MAP (AI-KA HAS 10 BITS)
DEFSYM PMAGEM==16000 ;AI-KA HAS ONE LESS AGE BITS
DEFSYM PMCSHM==0 ;NO CACHE BIT
DEFSYM PMUNSD==160000 ;UNUSED BITS
IFDEF TEN11P,IFN TEN11P,DEFSYM T11CPA==3776000 ;ADRS OF TEN-11 CONTROL PAGE
IFDEF PDP6P,IFN PDP6P,DEFSYM PDP6BM==3000000 ;BASE ADR OF PDP6 MEM AS SEEN FROM 10
IFDEF PDP6P,IFN PDP6P,DEFSYM LPDP6M==16. ;LENGTH OF PDP6 MEM IN PAGES
] ;AIKA
IFE MCOND MLKA,[
DEFOPT KA10P==1 ;ML-KA HAS KA PROCESSOR
DEFOPT MAXJ==60. ;MAX NUMBER OF JOBS ALLOWED
DEFOPT SWBLK==1 ;1 => SWAP BLOCKING, 0 => PRIV USER
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
DEFOPT PAGPRE==1 ; Page-in preemption
DEFOPT SCHBLN==10. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
DEFOPT NQCHN==30. ;NUMBER 2314 CHNLS
DEFOPT NQS==7 ;# DISK UNITS
DEFOPT NTUTBL==1 ;TUTS ARE ONE BLOCK LONG
DEFSYM NUDSL==250. ;# USER DIRECTORIES ON DISK
DEFOPT RP10P==1 ;HAS DEC RP10 DISK CONTROL (RP02)
DEFOPT QRDCMP==1 ;SOFTWARE READ-COMPARE
DEFOPT DMDSK==1 ;USES DM DISK FORMAT
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS (SECONDARY PACK)
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
DEFOPT C1MXP==1 ;CHANNEL 1 MPX FEATURE
DEFOPT NEWDTP==1 ;HAS NEW DECTAPE CONTROLLER
;DEFOPT NUNITS==4 ; Number of utape units (R.I.P.)
DEFOPT NMTCS==1 ;NUMBER OF MAG TAPE UNITS
DEFOPT TM10A==1 ;IO-BUS MAG TAPE
DEFOPT NLPTP==1 ;HAS NEW LPT (ODEC)
DEFOPT TPLP==1 ;PSEUDO LPT
DEFOPT PTRP==1 ;HAS PAPER TAPE
DEFOPT PTPP==1 ; And punch works.
DEFOPT MTYP==1 ;HAS MORTON MULTIPLEX BOX
DEFOPT PDCLKP==1 ;"DeCoriolis" CLOCK
DEFOPT NETP==1 ; Has net connection
DEFOPT IMPP==1 ; Has IMP interface
DEFOPT KAIMP==1
DEFOPT IMPUS==306 ; ARPA net host number
DEFOPT IMPUS3==<1200,,600006> ; Internet host number
DEFOPT NCPP==0 ; Flush NCP code
DEFOPT NNETCH==20. ; # NCP net channels
DEFOPT INETP==1 ; Include Internet code
DEFOPT TCPP==1 ; Include TCP code
DEFOPT XBL==20. ; # TCP network channels
DEFOPT CHAOSP==1 ;CHAOS NET
DEFOPT MYCHAD==3114 ;CHAOS NET ADDRESS
DEFOPT NINDX==30. ;NUMBER OF INDICES
DEFOPT CH10P==1 ;CHAOS NET VIA PDP-10 I/O BUS, NOT FRONT-END
DEFOPT NOTYS==1 ;# KA-10 CONSOLE 0 TTYS
;DEFOPT NNVTTS==0 ;# NOVA TTYS (used to have?)
DEFOPT NMTYS==33 ;# TTYS ON MORTON BOX
DEFOPT NSTTYS==8 ;# STY'S (PSEUDO-TTY'S)
DEFOPT TSYSM==512. ;TOTAL PDP10 1K MEM BLOCKS
DEFOPT NMMP==4 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.)
DEFSYM PMRCM==777 ;9 BIT REAL CORE ADR
DEFSYM PMAGEM==17000 ;4 BIT AGE
DEFSYM PMCSHM==0 ;NO CACHE BIT
DEFSYM PMUNSD==160000 ;UNUSED BITS
] ;MLKA
IFE MCOND DM,[
DEFOPT KA10P==1 ;DM HAS KA10 PROCESSOR
DEFOPT MAXJ==63. ;MAX NUMBER OF JOBS ALLOWED
DEFOPT SWBLK==0 ;1 => SWAP BLOCKING, 0 => PRIVILEGED USER
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
DEFOPT PAGPRE==0 ;NO PAGE-IN PREEMPTION
DEFOPT SCHBLN==10. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
DEFOPT NQS==6 ;# OF DISK UNITS
DEFOPT NTUTBL==1 ;TUTS ARE ONE BLOCK LONG
DEFSYM NUDSL==200. ;# USER DIRECTORIES ON DISK
DEFOPT NQCHN==30. ;NUMBER 2314 CHNLS
DEFOPT RP10P==1 ;HAS DEC RP10 DISK CONTROL (RP02)
DEFOPT DMDSK==1 ;USES DM DISK FORMAT
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
DEFOPT C1MXP==1 ;HAS CHANNEL 1 MPX FEATURE
DEFOPT NMTCS==1 ;NUMBER MAG TAPE UNITS
DEFOPT TM10B==1 ;DF10-BASED CONTROLLER
DEFOPT TTLPTP==1 ;LPT IS A TTY (I.E. ON A TTY LINE) VALUE IS LINE #.
DEFOPT PTRP==1 ;HAS PAPER TAPE
DEFOPT PTPP==1 ;PUNCH DOES WORK.
DEFOPT MTYP==1 ;HAS MORTON MULTIPLEX BOX
;DEFOPT CODP==0 ;NO COD DEVICE (used to?)
DEFOPT PDCLKP==1 ;"DeCoriolis" CLOCK
DEFOPT NETP==1 ; Has net connection
DEFOPT IMPP==1 ; Has IMP interface
DEFOPT DMIMP==1 ; This is a DM IMP interface
DEFOPT IMPUS==106 ; ARPA net host number
DEFOPT IMPUS3==<1200,,200006> ; Internet host number
DEFOPT NCPP==0 ; Flush NCP code
DEFOPT NNETCH==30. ; # NCP network channels
DEFOPT INETP==1 ; Include Internet code
DEFOPT TCPP==1 ; Include TCP code
DEFOPT XBL==20. ; # TCP network channels
DEFOPT MSPP==1 ;HAS MESSAGE SLURPER
DEFOPT DEMON==1 ;HAS DEMON ROUTINES
DEFOPT NOTYS==1 ;# KA-10 CONSOLE 0 TTYS
DEFOPT NMTYS==12. ;# TTYS ON MORTON BOX
DEFOPT NSTTYS==16. ;# OF STY'S (PSEUDO-TTY'S)
DEFOPT TSYSM==512. ;TOTAL PDP10 1K MEM BLOCKS
DEFOPT NMMP==4 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.)
DEFSYM PMRCM==777 ;9 BIT REAL CORE ADR
DEFSYM PMAGEM==17000 ;4 BIT AGE
DEFSYM PMCSHM==0 ;NO CACHE BIT
DEFSYM PMUNSD==160000 ;UNUSED BITS
] ;DM
IFE MCOND MX,[
DEFOPT KL10P==1 ;MX IS WHAT WE CALL THE KL10 NOW
DEFOPT MAXJ==120. ;MAX NUMBER OF JOBS ALLOWED
DEFOPT SWBLK==1 ;1 => SWAP BLOCKING, 0 => PRIVILEGED USER
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
DEFOPT PAGPRE==1 ;PAGE-IN PREEMPTION
DEFOPT SCHBLN==20. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
DEFOPT NQS==6 ;# OF DISK UNITS (3 RP04'S AND 3 T-300'S)
DEFOPT NTUTBL==2 ;TUTS ARE TWO BLOCKS LONG
DEFSYM NUDSL==500. ;# USER DIRECTORIES ON DISK
DEFOPT NQCHN==50. ;NUMBER 2314 CHNLS
DEFOPT RH10P==1 ;HAS DEC RH10 DISK CONTROL (RP04)
DEFOPT T300P==3 ;TRIDENT T-300S VIA PDP-11 START AT DRIVE 3
DEFOPT QRDCMP==0 ;SOFTWARE READ-COMPARE, HARDWARE IS PINING FOR THE
; FJORDS (But this isn't debugged yet.)
DEFOPT DMDSK==1 ;USES DM DISK FORMAT
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
DEFOPT NMTCS==1 ;NUMBER MAG TAPE UNITS
DEFOPT TM10B==1 ;DF10-BASED TAPE CONTROLLER
DEFOPT DL10P==1 ;HAS DL10/DC76 TTY CONTROLLER
DEFOPT PDCLKP==1 ;HAS "DeCoriolis" CLOCK
DEFOPT NETP==1 ; Has net connection
DEFOPT INETP==1 ; Include Internet IP code
DEFOPT TCPP==1 ; Include Internet TCP code
DEFOPT XBL==25. ; # TCP connections
DEFOPT IMPP==1 ; Has IMP interface
DEFOPT KAIMP==1
DEFOPT IMPUS==106 ; ARPA net host number
DEFOPT IMPUS3==<1200,,200006> ; Internet host number
DEFOPT NCPP==0 ; Flush NCP code
DEFOPT NNETCH==30. ; # NCP network channels
DEFOPT CHAOSP==1 ;HAS CHAOS NET
DEFOPT MYCHAD==1440 ;CHAOS NET ADDRESS
DEFOPT NINDX==50. ;NUMBER OF INDICES
DEFOPT DLCP==1 ;CHAOS NET GOES THROUGH DL10
DEFOPT NOTYS==0 ;# KA-10 CONSOLE 0 TTYS
DEFOPT NETYS==33. ;# KL-10 DTE20 TTYS
NEWDTE==1 ;TEMPORARY CONDITIONAL TO ENABLE NEW DTE20 PROTOCOL
DEFOPT NDLTYS==4. ;# TTYS ON DL10/DC76
;Note: 3d TTY on DL10 is VT52 by console.
DEFOPT NSTTYS==25. ;# OF STY'S (PSEUDO-TTY'S)
DEFOPT TSYSM==2048. ;TOTAL PDP10 1K MEM BLOCKS
DEFOPT NMMP==7 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.)
DEFSYM PMRCM==7777 ;12 BIT REAL CORE ADDR
DEFSYM PMCSHM==10000 ;CACHE ENABLE BIT
DEFSYM PMAGEM==160000 ;3 BIT AGE
DEFSYM PMUNSD==0 ;NO UNUSED BITS
DEFINE ITSIRP BODY
IRPS ITS,,[MX]
BODY
TERMIN
TERMIN
] ;MX
IFE MCOND AI,[
DEFOPT KS10P==1 ;The new AI has a KS10 processor.
DEFOPT MAXJ==60. ;Max number of jobs allowed
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
DEFOPT PAGPRE==1 ;1= Use page-in preemption
DEFOPT DMDSK==1 ;1= Use DM DSK format
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
DEFOPT QAUTHP==1 ;1= Keep track of file authors
DEFOPT NQS==2 ;# of disk drive units
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
DEFSYM NUDSL==500. ;# directories in file system (better agree with
; SALV and DSKDMP)
DEFOPT RH11P==1 ; Has RH11 controller
DEFOPT RP06P==1 ; with two RP06s
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
DEFOPT NETP==1 ;Has one kind of network anyway
;AI's IMP is gone 5/5/89
;DEFOPT INETP==1 ; Include Internet code
;DEFOPT TCPP==1 ; Include TCP code
;DEFOPT XBL==30. ; # TCP network channels
;DEFOPT IMPP==1 ; Has an IMP interface
;DEFOPT KSIMP==1 ; ACC LH/DH interface on KS unibus
;DEFOPT IMPUS==206 ; ARPA net host number
;DEFOPT IMPUS3==<1200,,400006> ; Internet host number of IMP
;DEFOPT PKTTRC==-1 ;Packet tracing code enabled
DEFOPT CHAOSP==1 ;Has CHAOS net
DEFOPT MYCHAD==3130 ;CHAOS net address
DEFOPT NINDX==50. ;Number of indices
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
DEFOPT DZ11NB==1 ; 1 of them
DEFSYM DZ0BA=:760010
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
DEFOPT NDZTYS==8. ;# DZ-11 TTYs
DEFOPT NSTTYS==12. ;# of STY's (Pseudo-TTY's)
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
;;; Next four better agree with SYSTEM;KSDEFS:
DEFSYM PMAGEM==020000 ;2.5 Age bit
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
; (The page table supports 20 bit physical
; addresses.)
DEFSYM PMUNSD==146000 ;Unused bits
DEFINE ITSIRP BODY
IRPS ITS,,[AI MC]
BODY
TERMIN
TERMIN
] ;AI
IFE MCOND MC,[
DEFOPT KS10P==1 ;MC is now a KS10.
DEFOPT MAXJ==60. ;Max number of jobs allowed
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
DEFOPT PAGPRE==1 ;1= Use page-in preemption
DEFOPT DMDSK==1 ;1= Use DM DSK format
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
DEFOPT QAUTHP==1 ;1= Keep track of file authors
DEFOPT NQS==1 ;# of disk drive units
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
DEFSYM NUDSL==500. ;# directories in file system (better agree with
; SALV and DSKDMP)
DEFOPT RH11P==1 ; Has RH11 controller
DEFOPT RP06P==1 ; with one RP06
DEFOPT NETP==1 ;Has one kind of network anyway
DEFOPT INETP==1 ; Include Internet code
DEFOPT TCPP==1 ; Include TCP code
DEFOPT XBL==30. ; # TCP network channels
;MC's IMP is gone 5/18/89
;DEFOPT IMPP==1 ; Has an IMP interface
;DEFOPT KSIMP==1 ; ACC LH/DH interface on KS unibus
;DEFOPT IMPUS==354 ; ARPA net host number
;DEFOPT IMPUS3==<1200,,600054> ; Internet host number of IMP
DEFOPT IPUNCP==1 ; IP in Chaos UNC is our only Internet address
DEFOPT PKTTRC==-1 ;Packet tracing code enabled
DEFOPT CHAOSP==1 ;Has CHAOS net
DEFOPT MYCHAD==3131 ;CHAOS net address
DEFOPT NINDX==50. ;Number of indices
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
DEFOPT DZ11NB==1 ; 1 of them
DEFSYM DZ0BA=:760010
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
DEFOPT NDZTYS==6. ;# DZ-11 TTYs
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
;;; Next four better agree with SYSTEM;KSDEFS:
DEFSYM PMAGEM==020000 ;2.5 Age bit
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
; (The page table supports 20 bit physical
; addresses.)
DEFSYM PMUNSD==146000 ;Unused bits
DEFINE ITSIRP BODY
IRPS ITS,,[AI MC]
BODY
TERMIN
TERMIN
] ;MC
IFE MCOND ML,[
DEFOPT KS10P==1 ;ML is now a KS10.
DEFOPT MAXJ==60. ;Max number of jobs allowed
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
DEFOPT PAGPRE==1 ;1= Use page-in preemption
DEFOPT DMDSK==1 ;1= Use DM DSK format
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
DEFOPT QAUTHP==1 ;1= Keep track of file authors
DEFOPT NQS==1 ;# of disk drive units
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
DEFSYM NUDSL==500. ;# directories in file system (better agree with
; SALV and DSKDMP)
DEFOPT RH11P==1 ; Has RH11 controller
DEFOPT RP06P==1 ; with one RP06
DEFOPT NETP==1 ;Has one kind of network anyway
DEFOPT CHAOSP==1 ;Has CHAOS net
DEFOPT MYCHAD==3133 ;CHAOS net address
DEFOPT NINDX==50. ;Number of indices
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
DEFOPT DZ11NB==4 ; 4 of them
DEFSYM DZ0BA=:760010
DEFSYM DZ1BA=:760020
DEFSYM DZ2BA=:760030
DEFSYM DZ3BA=:760040
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
DEFOPT NDZTYS==4. ;# DZ-11 TTYs
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
;;; Next four better agree with SYSTEM;KSDEFS:
DEFSYM PMAGEM==020000 ;2.5 Age bit
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
; (The page table supports 20 bit physical
; addresses.)
DEFSYM PMUNSD==146000 ;Unused bits
DEFINE ITSIRP BODY
IRPS ITS,,[AI MC ML]
BODY
TERMIN
TERMIN
] ;ML
IFE MCOND MD,[
DEFOPT KS10P==1 ;MD is a KS10.
DEFOPT MAXJ==60. ;Max number of jobs allowed
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
DEFOPT PAGPRE==1 ;1= Use page-in preemption
DEFOPT DMDSK==1 ;1= Use DM DSK format
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
DEFOPT QAUTHP==1 ;1= Keep track of file authors
DEFOPT NQS==1 ;# of disk drive units
DEFOPT NTUTBL==3 ;# 1K blocks in a TUT (better agree with disk DEFS)
DEFSYM NUDSL==500. ;# directories in file system (better agree with
; SALV and DSKDMP)
DEFOPT RH11P==1 ; Has RH11 controller
DEFOPT RM80P==1 ; with one RM80
DEFOPT NETP==1 ;Has one kind of network anyway
DEFOPT CHAOSP==1 ;Has CHAOS net
DEFOPT MYCHAD==3132 ;CHAOS net address
DEFOPT NINDX==50. ;Number of indices
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
DEFOPT DZ11NB==4 ; 4 of them
DEFSYM DZ0BA=:760010
DEFSYM DZ1BA=:760020
DEFSYM DZ2BA=:760030
DEFSYM DZ3BA=:760040
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
DEFOPT NDZTYS==4. ;# DZ-11 TTYs
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
;;; Next four better agree with SYSTEM;KSDEFS:
DEFSYM PMAGEM==020000 ;2.5 Age bit
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
; (The page table supports 20 bit physical
; addresses.)
DEFSYM PMUNSD==146000 ;Unused bits
DEFINE ITSIRP BODY
IRPS ITS,,[AI MC ML MD]
BODY
TERMIN
TERMIN
] ;MD
IFE MCOND SI,[ ;Stacken ITS
DEFOPT KS10P==1 ;SI is a KS10
DEFOPT MAXJ==60. ;Max number of jobs allowed
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
DEFOPT PAGPRE==1 ;1= Use page-in preemption
DEFOPT DMDSK==1 ;1= Use DM DSK format
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
DEFOPT QAUTHP==1 ;1= Keep track of file authors
DEFOPT NQS==1 ;# of disk drive units
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
DEFSYM NUDSL==500. ;# directories in file system (better agree with
; SALV and DSKDMP)
DEFOPT RH11P==1 ; Has RH11 controller
DEFOPT RP06P==1 ; with one RP06
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
DEFOPT DZ11NB==2 ; 2 of them
DEFSYM DZ0BA=:760010
DEFSYM DZ1BA=:760020
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
DEFOPT NDZTYS==16. ;# DZ-11 TTYs
DEFOPT NSTTYS==8. ;# of STY's (Pseudo-TTY's)
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
;;; Next four better agree with SYSTEM;KSDEFS:
DEFSYM PMAGEM==020000 ;2.5 Age bit
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
; (The page table supports 20 bit physical
; addresses.)
DEFSYM PMUNSD==146000 ;Unused bits
DEFINE ITSIRP BODY
IRPS ITS,,[SI]
BODY
TERMIN
TERMIN
] ;SI
IFE MCOND FU,[ ;Australian KS10
DEFOPT KS10P==1 ;FU is a KS10
DEFOPT MAXJ==60. ;Max number of jobs allowed
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
DEFOPT PAGPRE==1 ;1= Use page-in preemption
DEFOPT DMDSK==1 ;1= Use DM DSK format
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
DEFOPT QAUTHP==1 ;1= Keep track of file authors
DEFOPT NQS==1 ;# of disk drive units
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
DEFSYM NUDSL==500. ;# directories in file system (better agree with
; SALV and DSKDMP)
DEFOPT RH11P==1 ; Has RH11 controller
DEFOPT RP06P==1 ; with one RP06
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
DEFOPT DZ11NB==1 ; 1 of them
DEFSYM DZ0BA=:760010
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
DEFOPT NDZTYS==8. ;# DZ-11 TTYs
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
;;; Next four better agree with SYSTEM;KSDEFS:
DEFSYM PMAGEM==020000 ;2.5 Age bit
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
; (The page table supports 20 bit physical
; addresses.)
DEFSYM PMUNSD==146000 ;Unused bits
DEFINE ITSIRP BODY
IRPS ITS,,[FU]
BODY
TERMIN
TERMIN
] ;FU
IFE MCOND PM,[ ;MRC's KS10 (PandaMonium)
DEFOPT KS10P==1 ;PM is a KS10
DEFOPT MAXJ==60. ;Max number of jobs allowed
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
DEFOPT PAGPRE==1 ;1= Use page-in preemption
DEFOPT DMDSK==1 ;1= Use DM DSK format
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
DEFOPT QAUTHP==1 ;1= Keep track of file authors
DEFOPT NQS==1 ;# of disk drive units
DEFOPT NTUTBL==2 ;# 1K blocks in a TUT (better agree with RM03 DEFS)
DEFSYM NUDSL==500. ;# directories in file system (better agree with
; SALV and DSKDMP)
DEFOPT RH11P==1 ; Has RH11 controller
DEFOPT RM03P==1 ; with one RM03
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
DEFOPT DZ11NB==1 ; 1 of them
DEFSYM DZ0BA=:760010
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
DEFOPT NDZTYS==5. ;# DZ-11 TTYs
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
;;; Next four better agree with SYSTEM;KSDEFS:
DEFSYM PMAGEM==020000 ;2.5 Age bit
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
; (The page table supports 20 bit physical
; addresses.)
DEFSYM PMUNSD==146000 ;Unused bits
DEFINE ITSIRP BODY
IRPS ITS,,[PM]
BODY
TERMIN
TERMIN
] ;PM
IFE MCOND DX,[ ;Digex's KS10
DEFOPT KS10P==1 ;DX is a KS10
DEFOPT MAXJ==60. ;Max number of jobs allowed
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
DEFOPT PAGPRE==1 ;1= Use page-in preemption
DEFOPT DMDSK==1 ;1= Use DM DSK format
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
DEFOPT QAUTHP==1 ;1= Keep track of file authors
DEFOPT NQS==1 ;# of disk drive units
DEFOPT NTUTBL==2 ;# 1K blocks in a TUT (better agree with RM03 DEFS)
DEFSYM NUDSL==500. ;# directories in file system (better agree with
; SALV and DSKDMP)
DEFOPT RH11P==1 ; Has RH11 controller
DEFOPT RM03P==1 ; with one RM02/3
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
DEFOPT DZ11NB==1 ; 1 of them
DEFSYM DZ0BA=:760010
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
DEFOPT NDZTYS==8. ;# DZ-11 TTYs
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
;;; Next four better agree with SYSTEM;KSDEFS:
DEFSYM PMAGEM==020000 ;2.5 Age bit
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
; (The page table supports 20 bit physical
; addresses.)
DEFSYM PMUNSD==146000 ;Unused bits
DEFINE ITSIRP BODY
IRPS ITS,,[DX]
BODY
TERMIN
TERMIN
] ;DX
; Default settings for all configuration-dependent assembly parameters.
; If a system definition has already set a value for a parameter, the
; default here will NOT be used.
DEFOPT KL10P==0 ;1= KL10 processor
DEFOPT KS10P==0 ;1= KS10 processor
DEFOPT KA10P==0 ;1= KA10 processor
IFE KL10P\KS10P\KA10P, .ERR Processor type required - KL10P, KS10P or KA10P
IFN KS10P, DEFOPT KSFREQ==4100000./60. ; KS-ticks per PD-tick.
DEFOPT C1MXP==0 ;1= Has PI channel 1 MPX feature
DEFOPT MAXJ==63. ; Max number of jobs allowed
DEFOPT NQCHN==30. ; Max number of user disk channels open in system
DEFOPT SCHBLN==10. ; Number of runnable jobs to remember
DEFOPT SWBLK==0 ;1= 1=> swap blocking, 0=> privileged user
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
DEFOPT PAGPRE==0 ;1= Use page-in preemption
; Disk parameters
IFNDEF NQS, .ERR NQS required - # of disk drive units
IFNDEF NTUTBL,.ERR NTUTBL required - # 1K blocks in a TUT
; (This defn better agree with DC/RP/RH/T3 defs)
IFNDEF NUDSL, .ERR NUDSL required - # directories in file system
; Just changing this will not work!!
DEFOPT DC10P==0 ;1= Has Systems Concepts disk control
DEFOPT RP10P==0 ;1= DEC RP10 disk control (RP02)
DEFOPT RH10P==0 ;1= DEC RH10 disk control (RP04)
DEFOPT RH11P==0 ;1= DEC RH11 disk control
DEFOPT RP06P==0 ;1= RH11 with RP06's
DEFOPT RM03P==0 ;1= RH11 with RM03's
DEFOPT RM80P==0 ;1= RH11 with RM80's
DEFOPT T300P==0 ;1= Trident T-300 via PDP-11
DEFOPT QRDCMP==0 ;1= Software read-compare
DEFOPT DMDSK==0 ;1= Use DM DSK format
DEFOPT QRSRVP==0 ;1= Has reserved disk packs (Secondary pack)
DEFOPT QAUTHP==0 ;1= Keep track of file authors
; Magtape parameters
DEFOPT NMTCS==0 ; # Mag tape units
DEFOPT TM10A==0 ;1= IO-bus TM10 Mag tape
DEFOPT TM10B==0 ;1= DF10/TM10 Magtape
DEFOPT TM03S==0 ;1= TM03/RH11 KS Magtape
IFN NMTCS,IFE TM10A\TM10B\TM03S,.ERR No Magtape Controller type specified?
; Network parameters
DEFOPT NETP==0 ;1= Connected to some network, include net code.
DEFOPT CHAOSP==0 ;1= Has CHAOS net (Must have some interface def'd)
DEFOPT NCPP==0 ;1= Include NCP code (must have IMPP)
DEFOPT INETP==0 ;1= Include Internet Protocol code
DEFOPT TCPP==0 ;1= Include TCP code (must have INETP)
DEFOPT IPUNCP==0 ;1= IP in Chaos UNC is our only Internet address
;NCP-specific parameters
DEFOPT NNETCH==30. ; # of NCP network channels system supports
;IP-specific paramters
IFN INETP,[
IFE IPUNCP,IFNDEF IMPUS3,.ERR IMPUS3 must be defined as Internet host addr
IFN IPUNCP,IFE CHAOSP,.ERR Chaosnet must exist for IP encapsulation scheme
]
;Chaos-specific parameters
IFN CHAOSP,IFNDEF MYCHAD, .ERR MYCHAD must be defined as CHAOSnet host addr
DEFOPT NINDX==0 ; Number of indices for CHAOS connections
DEFOPT CH10P==0 ;1= CHAOS net via PDP-10 I/O bus
DEFOPT CH11P==0 ;1= CHAOS net via Unibus Chaos board on KS10
DEFOPT DLCP==0 ;1= CHAOS net via DL10
DEFOPT T11CHP==0 ;1= CHAOS net via Rubin 10-11 interface
IFN T11CHP,DEFOPT CH11NM==7 ; CHAOS net is on PDP-11 #7 of 10-11 interface
;IMP interface specific parameters
DEFOPT IMPP==0 ;1= Has IMP interface to ARPAnet
IFN IMPP,IFNDEF IMPUS, .ERR IMPUS must be defined as ARPAnet host #
DEFOPT DMIMP==0 ;1= Has DM IMP interface
DEFOPT KAIMP==0 ;1= Has AI-KA/ML-KA/MX-KL IMP interface
DEFOPT KSIMP==0 ;1= Has KS10 UNIBUS ACC LH-DH IMP interface
IFN IMPP,IFE DMIMP+KAIMP+KSIMP,.ERR IMPP requires an interface type
IFN IMPP,IFN IPUNCP,.ERR IPUNCP and IMPP are incompatible
; TTY line parameters
DEFOPT MTYP==0 ;1= Has Morton box multiplexor
DEFOPT DL10P==0 ;1= Has DL10/DC76 TTY controller
DEFOPT TK10P==0 ;1= Has TK10 TTY scanner
DEFOPT DPKPP==0 ;1= Has Datapoint kludge TTY mpxr
DEFOPT DZ11P==0 ;1= Has DZ11 Multiplexors
IFN DZ11P, IFNDEF DZ11NB, .ERR DZ11P requires a value for DZ11NB
IFE DZ11P, DEFSYM DZ11NB==0 ; # DZ11s
DEFOPT NOTYS==0 ; # KA-10 console 0 TTYs
DEFOPT NETYS==0 ; # KL-10 DTE20 console 0 TTYs
DEFOPT NKSTYS==0 ; # KS-10 8080 console 0 TTYs
DEFOPT NNVTTS==0 ; # Nova TTYs
DEFOPT NNTYS==0 ; # TTYs on Knight kludge
DEFOPT NDZTYS==0 ; # TTYs on DZ11s
DEFOPT NDPTYS==0 ; # TTYs on Datapoint kludge
DEFOPT NMTYS==0 ; # TTYs on Morton box
DEFOPT NDLTYS==0 ; # TTYs on DL10/DC76
DEFOPT NSTTYS==0 ; # of STY's (Pseudo-TTY's)
DEFOPT N11TYS==0 ; # PDP11 TV TTYs (formerly 16. of them)
IFN N11TYS,[
DEFOPT TT11NM==0 ; # of PDP11 that handles TTYs.
DEFOPT MXVBN==40 ; Max video buffer # for assignment purposes.
] ; These actually correspond to video switch inputs.
DEFOPT NF2741==0 ; First 2741 console #
DEFOPT N2741==0 ; # 2741's (formerly 3; flushed 3/21/76)
DEFOPT SYSCON==0 ; TTY # of system job console
DEFOPT APL==0 ; AP TTY #
; Miscellaneous devices
DEFOPT TEN11P==0 ;1= Rubin 10-11 interface (late of AI-KA)
DEFOPT XGP==0 ;1= Has XGP
DEFOPT NEWDTP==0 ;1= Has new dectape controller
DEFOPT NUNITS==0 ; # Utape (DECtape) units
DEFOPT OLPTP==0 ;1= Has old LPT (Data Products)
DEFOPT NLPTP==0 ;1= Has new LPT (ODEC)
DEFOPT GLPTP==0 ;1= Has Gould LPT
DEFOPT TTLPTP==0 ;1= LPT is on a TTY line (value = line #)
DEFOPT PTRP==0 ;1= Has paper tape reader/punch
DEFOPT PTPP==0 ;1= Paper tape punch works
DEFOPT PDCLKP==0 ;1= Has "DeCoriolis" clock
DEFOPT HCLKP==0 ;1= Has Holloway clock (device 710, 714)
DEFOPT CCLKP==0 ;1= Hack chess tournament clock stuff (device 374)
DEFOPT 340P==0 ;1= Has 340 display
DEFOPT TABP==0 ;1= Has Sylvania tablet
DEFOPT PLTP==0 ;1= Has Calcomp plotter
DEFOPT DSDP==0 ;1= Has deselection device
DEFOPT ARMP==0 ;1= Has arm (AMF mostly) (R.I.P.)
DEFOPT IMXP==0 ;1= Has IMX (input A/D multiplexor) (alas, no more)
DEFOPT OMXP==0 ;1= Has OMX (output D/A multiplexor) (alas, no more)
DEFOPT VIDP==0 ;1= Has VIDI (R.I.P.)
DEFOPT NTYP==0 ;1= Has DM kludge for talking to 11
DEFOPT CODP==0 ;1= Has Morse code F1 92Mhz broadcast output device
DEFOPT PDP6P==0 ;1= Has PDP-6 (alas, no more)
; (turning this on probably won't work)
DEFOPT RBTCP==0 ;1= Has Robot console
DEFOPT NDAP==0 ;1= Has "new" D/A converters (alas, no more)
DEFOPT STKP==0 ;1= Has Stanford keyboard (not any more)
DEFOPT E.SP==0 ;1= Has E&S LDS-1 display
; Some software options
DEFOPT MSPP==0 ;1= Want message slurper
DEFOPT DEMON==0 ;1= Want crufty DM demon facility
DEFOPT TPLP==0 ;1= Want pseudo LPT
; Physical memory parameters
DEFOPT ECCMEM==0 ;1= Has HIC's error correcting memory
DEFOPT NMMP==4 ; # exec pages for MMP table (# vir pgs/512.)
IFNDEF TSYSM, .ERR TSYSM required - Total PDP10 1K mem blocks
IFNDEF PMRCM, .ERR PMRCM required - Mem addr field in page map
IFNDEF PMAGEM,.ERR PMAGEM required - Age bits in page map
IFNDEF PMCSHM,.ERR PMCSHM required - Cache bit
IFNDEF PMUNSD,.ERR PMUNSD required - Unused bits
IFNDEF ITSIRP,.ERR ITSIRP required - Names of local ITS machines
; Any parameter conflict checks can be made here.
IFN DZ11P,[
IFG NDZTYS-<DZ11NB*8>, .ERR More DZ11 TTYs than controllers?
REPEAT DZ11NB,[
IFNDEF CONC DZ,\.RPCNT,BA, .ERR DZ11 bus address not specified.
]
]
IFN $$TEMP,EXPUNGE DEFSYM
IFN $$TEM2,EXPUNGE DEFOPT

2989
src/system/core.82 Executable file

File diff suppressed because it is too large Load Diff

270
src/system/dc10.defs27 Executable file
View File

@@ -0,0 +1,270 @@
.AUXIL
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [
$$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
.MLLIT==1
$$TEMP==1
]
.ELSE $$TEMP==0
;SYSTEMS CONCEPTS DC10 PHYSICAL CHARACTERISTICS
DEFSYM NCYLS==400. ;# CYLINDERS NORMALLY USED
DEFSYM XCYLS==6 ;# EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
DEFSYM NHEDS==20. ;# TRACKS/CYLINDER
DEFSYM NSECS==2 ;# BLKS/TRK
DEFSYM SECBLK==1 ;# SECTORS/BLOCK
DEFSYM NBLKSC==NHEDS*NSECS ;# BLKS/CYL
DEFSYM NBLKS==NCYLS*NBLKSC ;TOTAL # REG BLKS
DEFSYM XBLKS==XCYLS*NBLKSC ;# XTRA BLKS
DEFSYM TBLKS==NBLKS+XBLKS ;TOTAL BLOCKS
DEFSYM NTUTBL==2 ;2 BLOCKS PER TUT (DUAL-DENSITY CALCOMPS THESE DAYS)
DEFSYM DECADE==20. ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS
;EXTRA WORDS IN BLOCK
DEFSYM XWBWC==0
DEFSYM XWBLK==1700,, ;BP TO PREV BLK # IN FILE FLD
DEFSYM XWAWC==171200,, ;BP TO ACTIVE WD CNT
DEFSYM XWSYSN==1
DEFSYM XWFN1==2
DEFSYM XWFN2==3
DEFSYM NXWDS==4 ;NUMBER OF EXTRA WORDS
DEFSYM DC0==610 ;MAIN DEVICE CODE
DEFSYM DC1==614 ;READS ERR STATUS ETC, SETS TIMER DRIVER # ON CONO
;FIELDS IN HEADER WORD 0
DEFSYM DPKID==240700,, ;PACK ID FIELD
DEFSYM DCYL==131100,, ;CYLINDER CHECK FIELD
DEFSYM DSURF==60500,, ;SURFACE CHECK FIELD
DEFSYM DSECT==600,, ;SECTOR FIELD
;WORD 1 HEADER
DEFSYM DHIND==1000,, ;4.1 INDIRECT IF 1, CYL, SURF, SECTOR SAME AS ABOVE
DEFSYM DHSPRT==400,, ;BIT 3.9 SOFTWARE PROTECT
DEFSYM DHHPRT==200,, ;3.8 HARDWARE PROTECT
DEFSYM DHNXAD==270200,, ;3.7, 3.6 HOW TO COMPUTE NEXT DISK ADR
;=00 ADD 1 TO SECTOR
;01 SET SECTOR TO 0, ADD 1 TO SURF
;10 SET SECTOR AND SURFACE TO 0, ADD 1 TO CYL
;11 END OF DISK
DEFSYM DHEPB==10,, ;PARITY BIT FOR EVEN BITS OF 56 BIT HEADER
DEFSYM DHOPB==4,, ;PARITY BIT FOR ODD BITS OF 56 BIT HEADER
DEFSYM DHSLNG==1600,, ;-LENGTH OF SECTOR FIELD
;DISK ADDRESS DATA COMMANDS (OP CODES)
DEFSYM DRC==400000,, ;READ COMPARE
DEFSYM DWRITE==440000,, ;WRITE
DEFSYM DREAD==500000,, ;READ
DEFSYM DSEEK==540000,, ;SEEK
DEFSYM DRCC==600000,, ;READ COMPARE CONTINUOUS
DEFSYM DWRITC==640000,, ;WRITE CONTINUOUS
DEFSYM DREADC==700000,, ;READ CONTINUOUS
DEFSYM DUNENB==20000,, ;ENABLE LOAD UNIT FIELD
DEFSYM DUNFLD==330400,, ;UNIT FIELD
;PKID, CYL, SURF, AND SECTOR SAME AS ABOVE
;COPY / COMPARE / SKIP COMMAND
DEFSYM DCOPY==40000,, ;COPY
DEFSYM DCCOMP==100000,, ;COMPARE
DEFSYM DCSKIP==140000,, ;SKIP
DEFSYM DCWC==241400,, ;-WC FIELD
DEFSYM DCCA==2400,, ;CORE ADDRES
DEFSYM DCBN==121200,, ;BLOCK NUMBER
;JUMP COMMANDS
DEFSYM DHLT==0 ;0 IN 4.9-4.5 = JUMP AND IN 3.5,3.6 = HALT
DEFSYM DXCT==20,, ;XCT
DEFSYM DJMP==40,, ;JUMP
DEFSYM DJSR==60,, ;JSR
;"B" COMMAND BITS 3.3, 3.4
;0 ALWAYS
DEFSYM DAOJNC==4,, ;AOJN THE CONTROL COUNTER
DEFSYM DDOK==10,, ;ON NO DATA ERROR
DEFSYM DSRQF==14,, ;IF SEEK RQ FLAG ON
;STORE REGISTER COMMAND
DEFSYM DSREG==240400,, ;STORE REG
;USE, UNIT BITS SAME
DEFSYM DSREGS==240300,, ;SOURCE REGISTER SELECT FIELD
DEFSYM DSRDB==0 ;STORE DATA BUFFER
DEFSYM DSRDL==4,, ;STORE DISK LOCATION
DEFSYM DSRCC==10,, ;STORE COMMAND COUNT
DEFSYM DSRPC==24,, ;STORE PC (IN FORM OF JMP INST.)
DEFSYM DSRWC==30,, ;STORE WORD COUNT
DEFSYM DSRCA==34,, ;STORE CORE ADDRESS (TO XFER DATA TO OR FROM)
;ALU COMMAND
DEFSYM DALU==300000,, ;BASIC ALU OP CODE
DEFSYM DALUX==40000,, ;INDEX BIT (ADD CC TO ADR)
DEFSYM DALUD==40,, ;DIRECT BIT IF 1, REF MEM OT GET B OP
DEFSYM DASL==4000,, ;SKIP ON <0
DEFSYM DASE==10000,, ;SKIP ON = 0
DEFSYM DASLE==14000,, ;SKIP ON < OR = 0
DEFSYM DASA==20000,, ;ALWAYS SKIP
DEFSYM DASGE==24000,, ;SKIP ON > OR = 0
DEFSYM DASN==30000,, ;SKIP ON NOT = 0
DEFSYM DASG==34000,, ;SKIP ON > 0
;DESTINATION SUB OP (ALSO SPECIFIES SOURCE A)
DEFSYM DLDB==0 ;OP A FROM DB, STORE IN DB
DEFSYM DLDL==4,, ;OP FROM DL, STORE IN DL
DEFSYM DLCC==10,, ;OP FROM CC, STORE IN CC
DEFSYM DLCA==14,, ;OP A =0, STORE IN CA
DEFSYM DLTDB==20,, ;TEST DB (OP A FROM DB, NO STORE)
DEFSYM DLDBPC==24,, ;OP A FROM DB, STORE IN PC
DEFSYM DLDBWC==30,, ;OP A FROM DB, STORE IN WC
DEFSYM DLDBM==34,, ;OP A FROM DB, STORE IN MEM (DIRECT MUST BE ONE TO REALLY MAKE IT)
;SOME USEFUL (?) OPS
DEFSYM DLADD==100,, ;A+B
DEFSYM DLSOS==200,, ;B-1
DEFSYM DLLB==300,, ;B
DEFSYM DLSUB==400,, ;B-A
DEFSYM DLAND==2300,, ;A&B
DEFSYM DLIOR==2500,, ;A IOR B
DEFSYM DLLA==3100,, ;LOAD A
DEFSYM DLSETO==3200,, ;-1
DEFSYM DLSETZ==3300,, ;0
;OPR COMMAND
DEFSYM DOPR==200000,, ;BASIC OPR
DEFSYM DOHXFR==400,, ;HALT DURING XFER (SO MB WILL BE SAFE)
DEFSYM DOCSRQ==200,, ;CLEAR SEEK RQ
DEFSYM DOSSRQ==100,, ;SET SEEK RQ
DEFSYM DOSCFL==40,, ;SET C FLAG
;STORE DRIVE STATUS
DEFSYM DSDRST==240000,, ;STORE DRIVE STATUS
;UNIT ENABLE, UNIT FIELD SAME
DEFSYM DSDCNT==240400,, ;COUNT-1 FIELD
;BITS IN DRIVE STATUS STORED
DEFSYM DDSWC==40,, ;WRITE CURRENT SENSED
DEFSYM DDSUNS==20,, ;DRIVE UNSAFE
DEFSYM DDSRDO==10,, ;READ ONLY
DEFSYM DDSSIC==4,, ;SEEK INCOMPLETE
DEFSYM DDSRDY==2,, ;DRIVE READY
DEFSYM DDSONL==1,, ;DRIVE ON LINE
DEFSYM DDSSEL==400000 ;DRIVE SELECTED
DEFSYM DDSCYL==101000,, ;PRESENT CYLINDER
DEFSYM DDSLAT==1000,, ;LATENCY TIMER
;DISK ADR "SPECIAL COMMAND"
DEFSYM DSPC==740000,, ;BASIC OP CODE
;USE, UNIT FIELDS AS NORMAL
; E CONDITION (WAIT)
;0 NONE
DEFSYM DSWIDX==20,, ;WAIT UNTIL INDEX PULSE
DEFSYM DSWSEC==40,, ;WAIT UNTIL SECTOR PULSE
DEFSYM DSWINF==60,, ;NEVER (USE WITH G=3 OR 7)
; F CONDITION (OTHER WAIT)
DEFSYM DSWHDM==0 ;WAIT FOR MATCHING HEADER
DEFSYM DSWAGH==4,, ;ANY GOOD HEADER
DEFSYM DSWAH==10,, ;ANY HEADER
DEFSYM DSWNUL==14,, ;NO WAIT
;G OPERATION
DEFSYM DSCRDC==0 ;READ DATA THRU DECODERS
DEFSYM DSCRIM==100,, ;READ DATA IMAGE
DEFSYM DSCRHD==200,, ;READ HEADER WORDS
DEFSYM DSRCAL==300,, ;(RECALIBRATE)
DEFSYM DSCWDC==400,, ;WRITE THRU DECODERS
DEFSYM DSCWIM==500,, ;WRITE IMAGE
DEFSYM DSMAIT==700,, ;MAINTENANCE (PUT CYL FIELD ON BUS LINES WITH CONTROL TAG)
;BITS IN CONI DC0,
DEFSYM DASSGN==400000,, ;ASSIGNED TO PROC (WITH SWITCH)
DEFSYM DPIRQC==400000 ;PI REQ BEING GENERATED
DEFSYM DSSRQ==200000 ;SEEK REQUEST
DEFSYM DSDEEB==10000 ;ENABLE INTERRUPT ON DATA ERROR OR READ/ COMP ERROR
DEFSYM DSSERR==4000 ;ERROR FLAG
DEFSYM DSSAEB==2000 ;ATTENTION ENABLE FLAG
DEFSYM DSSATT==1000 ;ATTENTION FLAG
DEFSYM DSIENB==400 ;IDLE FLAG ENABLE
DEFSYM DSSRUN==200 ;RUN
DEFSYM DSSACT==100 ;ACTIVE
DEFSYM DSSCEB==40 ;CHANNEL ENABLE
DEFSYM DSSCHF==20 ;CHANNEL FLAG
DEFSYM DSSCFL==10 ;CPU FLAG
;PIA 1.3-1.1
;DATAO DC0, SENDS COMMAND TO DISK
; (IGNORED IF EXECUTING COMMANDS FROM MEMORY)
;CONO DC0,
DEFSYM DCSET==400000 ;SET SELECTED
DEFSYM DCCLR==200000 ;CLEAR SELECTED
DEFSYM DCCSET==600000 ;RESET CONTROLLER THEN SET SELECTED
DEFSYM DCDENB==10000 ;DATA ERROR ENABLE
DEFSYM DCERR==4000 ;SET ERROR FLAG OR CLEAR ALL ERRORS
DEFSYM DCATEB==2000 ;ATTENTION ENABLE
DEFSYM DCCATT==1000 ;CLEAR ATTENTION
DEFSYM DCSSRQ==1000 ;SET SEEK REQUEST
DEFSYM DCIENB==400 ;IDLE ENABLE
DEFSYM DCSTAR==200 ;START (SET)
DEFSYM DCSSTP==200 ;STOP (CLEAR)
DEFSYM DCSGL==100 ;DO SINGLE COMMAND
DEFSYM DCCENB==40 ;CHANNEL ENABLE
DEFSYM DCCFLG==20 ;CHANNEL FLAG
DEFSYM DCCPUF==10 ;CPU FLAG
;1.1-1.3 PIA
;CONO DC1,
;SET TIMER DRIVE # FROM 1.1-1.3
;CONI DC1,
;LH
DEFSYM DSATDN==360400,, ;ATTENTION DRIVE #
DEFSYM DSTMDN==320400,, ;TIMER DRIVE #
DEFSYM DSLAT==221000,, ;LATENCY TIMER FOR DRIVE ABOVE
;RH (ERROR FLAGS)
DEFSYM DIPE==4000 ;INTERNAL PARITY ERROR
DEFSYM DRLNER==2000 ;RECORD LENGTH
DEFSYM DRCER==1000 ;READ COMPARE ERROR
DEFSYM DOVRRN==400 ;OVERRUN
DEFSYM DCKSER==200 ;CKSUM OR DECODER ERR
DEFSYM DWTHER==100 ;WATCHDOG TIMER
DEFSYM DFUNSF==40 ;FILE UNSAFE, SEEK INCOMPLETE OR END OR DSK
DEFSYM DOFFL==20 ;OFF LINE OR MULT SEL
DEFSYM DPROT==10 ;WRT KEY OR RD ONLY OR PROTECT
DEFSYM DDOBSY==4 ;DATAO WHEN BSY
DEFSYM DNXM==2 ;NON-EX MEM
DEFSYM DCPERR==1 ;CORE PARITY ERR
DEFSYM LRIBLK==16 ;CONSISTENCY CHECK DSKDMP VS MARK
IFN $$TEMP,EXPUNG DEFSYM

BIN
src/system/ddt.68 Executable file

Binary file not shown.

BIN
src/system/ddtdsk.31 Executable file

Binary file not shown.

6412
src/system/disk.1224 Executable file

File diff suppressed because it is too large Load Diff

153
src/system/dmpcpy.11 Executable file
View File

@@ -0,0 +1,153 @@
; -*- MIDAS -*-
TITLE DMPCPY - COPY DUMPS FROM SWAP AREA TO FILE AREA
A=1
B=2
C=3
D=4
E=5
T=6
TT=7
P=17
CHDIRI=10
CHDSKI=11
CHDSKO=12
.INSRT SYSENG;FSDEFS >
PDL: -20,,.
BLOCK 20
;DIRECTORIES WHERE STUFF MIGHT GET DUMPED OUT OF TIMESHARING
DIRLST: SIXBIT/./
SIXBIT/CRASH/
SIXBIT/CRASH2/
NDIRS==.-DIRLST
DIR: BLOCK 2000
BUF: BLOCK 2000
USRVAR: SIXBIT /OPTION/ ? TLO %OPINT\%OPOPC
SIXBIT /MASK/ ? MOVE [%PIIOC\%PIPDL]
LUSRVAR==:.-USRVAR
GO: .CLOSE 1, ;RUNS AS DAEMON
MOVE P,PDL
MOVE TT,[-LUSRVAR,,USRVAR]
.CALL [ SETZ ? SIXBIT /USRVAR/
MOVEI %JSELF
SETZ TT ]
.LOSE %LSSYS
CHKTIM: .CALL [ SETZ ? SIXBIT /RQDATE/ ; don't frob with files
SETZM A ] ; if system doesn't know the time
.LOSE %LSSYS
AOJN A,KNOTIM
MOVEI A,30.*15. ; 15 seconds
.SLEEP A,
JRST CHKTIM
KNOTIM: MOVSI E,-NDIRS
CHKDIR: .CALL [ SETZ ? SIXBIT/OPEN/
[.BII,,CHDIRI]
[SIXBIT/DSK/]
[SIXBIT/.FILE./]
[SIXBIT/(DIR)/]
SETZ DIRLST(E)]
JRST NXTDIR ; Hey, there might not -be- such a directory!
MOVE TT,[-2000,,DIR]
.IOT CHDIRI,TT
.CLOSE CHDIRI,
MOVE D,UDNAMP+DIR
CHKFIL: CAIL D,2000
JRST NXTDIR
MOVE TT,UNRNDM+DIR(D)
SKIPGE UNDATE+DIR(D)
TLNE TT,UNDUMP\UNIGFL\UNREAP\UNLINK ; Don't screw with files
JRST NXTFIL ; you don't understand.
;HERE WE HAVE FOUND A FILE WRITTEN OUT OF TIMESHARING
;COPY IT SO AS TO (1) SET THE FILE DATE AND (2) GET IT OUT
; OF THE SWAPPING AREA. NTS FILES ARE WRITTEN IN THE SWAPPING
; AREA TO DECREASE THE PROBABILITY OF CLOBBERING SOME OTHER FILE.
.CALL [ SETZ ? SIXBIT/OPEN/
MOVES TT
[.BII,,CHDSKI]
[SIXBIT/DSK/]
UNFN1+DIR(D)
UNFN2+DIR(D)
SETZ DIRLST(E) ]
JSP T,[ CAIE TT,%ENSFL ; perhaps a hacker deleted it
CAIN TT,%ENAPK ; perhaps that pack had to go offline
JRST NXTFIL
JRST LOSE ]
.CALL [ SETZ ? SIXBIT/OPEN/
MOVES TT
[.BIO,,CHDSKO]
[SIXBIT/DSK/]
[SIXBIT/_DMPCP/]
[SIXBIT/OUTPUT/]
SETZ DIRLST(E) ]
JSP T,[ CAIE TT,%EFLDR
JRST LOSE
MOVEI TT,30.*60.*5 ; 5 minutes
.SLEEP TT,
JRST .-1 ]
CPYFIL: MOVE TT,[-2000,,BUF]
.IOT CHDSKI,TT
MOVEI T,-BUF(TT)
JUMPE T,ENDFIL
MOVNS T
MOVSS T
HRRI T,BUF
.IOT CHDSKO,T
JRST CPYFIL
ENDFIL: .CLOSE CHDSKI,
.CALL [ SETZ ? 'RENMWO
MOVEI CHDSKO
UNFN1+DIR(D)
SETZ UNFN2+DIR(D) ]
.LOSE %LSSYS
.CLOSE CHDSKO,
NXTFIL: ADDI D,LUNBLK
JRST CHKFIL
NXTDIR: AOBJN E,CHKDIR
.LOGOUT 1,
.VALUE
; JSP T,LOSE is like .LOSE %LSFIL(TT)
LOSE: .CALL [ SETZ ? SIXBIT /LOSE/
MOVEI %LSFIL(TT)
SETZI -2(T) ]
.LOSE %LSSYS
TSINT:
LOC 42
-LTSINT,,TSINT
LOC TSINT
P
%PIIOC ? 0 ? %PIIOC ? 0 ? IOCINT
LTSINT==:.-TSINT
; If there is a disk or directory full problem, wait for someone to notice.
IOCINT: PUSH P,T
.SUSET [.RBCHN,,T]
CAIE T,CHDSKO
.LOSE
.STATUS CHDSKO,T
LDB T,[330500,,T]
CAIE T,11 ; DEVICE FULL
CAIN T,14 ; DIRECTORY FULL
JRST WAIT
.VALUE
WAIT: MOVEI T,30.*60.*5 ; 5 minutes
.SLEEP T,
POP P,T
.CALL [ SETZ ? SIXBIT /DISMIS/
SETZ P ]
.LOSE %LSSYS
END GO

1882
src/system/dskdmp.215 Executable file

File diff suppressed because it is too large Load Diff

56
src/system/dz11.10 Executable file
View File

@@ -0,0 +1,56 @@
;-*-MIDAS-*-
; DZ11 definitions
DZLNLN==3
DZNLN==1_DZLNLN ;Number of DZ terminal lines per board
DZLNM==DZNLN-1 ;Line number mask given DZ number of TTY
%DZLM==3400 ;Line Number Mask
%DZLS==8. ;Line number shift
%DZRCS==0 ;Control & Status register
; CSR Bits and fields
%DZCMN==10 ;Maintenance
%DZCCL==20 ;Clear
%DZCMS==40 ;Master Scan Enable
%DZCRE==100 ;Receiver Interrupt Enable
%DZCRD==200 ;Receiver Done
%DZCSE==10000 ;Silo Alarm Enable
%DZCSA==20000 ;Silo Alarm
%DZCTE==40000 ;Transmitter Interrupt Enable
%DZCTR==100000 ;Transmitter Ready
%DZRLP==2 ;Line Parameter register
; LPR Bits and fields
%DZLLM==7 ;Line number mask
%DZLCL==10 ;Character Length position
%DZLSC==40 ;Stop code bit
%DZLPY==100 ;Parity bit
%DZLOP==200 ;Odd parity
%DZLSP==400 ;Speed code position
%DZLSS==8. ;Speed code shift
%DZLRO==10000 ;Receiver on
%DZRDR==2 ;Read Data register
; RDR Bits and fields
%DZDCM==377 ;Character mask
%DZDPE==10000 ;Parity Error
%DZDFE==20000 ;Frame Error (break key)
%DZDOR==40000 ;Overrun
%DZDDV==100000 ;Data valid
%DZRTC==4 ;Transmitter Control & Data Terminal registers
%DZRTD==6 ;Transmitter Buffer & Break registers
; TDR and BR fields
%DZTCM==377 ;Character mask
%DZTBM==177400 ;Break mask
%DZRMS==6 ;Modem status
; MSR fields
%DZMRI==377 ;Ring detect
%DZMCD==177400 ;Carrier detect
; To do:
; - Add modem control.

160
src/system/ept.defs16 Executable file
View File

@@ -0,0 +1,160 @@
IFN 0,[
.AUXIL
]
IF1,[
.TYO6 .IFNM1
.TYO 40
.TYO6 .IFNM2
PRINTX / included in this assembly.
/
];IF1
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [
$$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
.MLLIT==1
$$TEMP==1
]
.ELSE $$TEMP==0
IFNDEF EPT, EPT=1000 ;ABSOLUTE LOCATION OF EPT
;LOCS 0-1777 UNCACHED
;BUT THE HARDWARE CACHES EPT REFERENCES ANYWAY
DEFSYM PI0LOC=EPT+40 ;PI0LOC+2*PICHN = ADDRESS OF INSTR PAIR FOR PICHN
DEFSYM DTEBPO=EPT+140 ;DTE20 OUTPUT (BYTE TRANSFER) BYTE POINTER
DEFSYM DTEBPI=EPT+141 ;DTE20 INPUT (BYTE TRANSFER) BYTE POINTER
DEFSYM DTELOC=EPT+142 ;DTE20 INTERRUPT INSTRUCTION
DEFSYM DTEPRO=EPT+144 ;DTE20 OUTPUT (EXAMINE) PROTECTION WORD
DEFSYM DTERLO=EPT+145 ;DTE20 OUTPUT (EXAMINE) RELOCATION WORD
DEFSYM DTEPRI=EPT+146 ;DTE20 INPUT (DEPOSIT) PROTECTION WORD
DEFSYM DTERLI=EPT+147 ;DTE20 INPUT (DEPOSIT) RELOCATION WORD
DEFSYM EPTCLK=EPT+510 ;DOUBLE WORD FOR CALENDAR CLOCK (TIME BASE)
DEFSYM EPTPRF=EPT+512 ;DOUBLE WORD FOR PERFORMANCE COUNTER
DEFSYM EPTEBC==EPT+504 ;DOUBLE WORD EBOX COUNT WHEN UPT=EPT
DEFSYM EPTMBC==EPT+506 ;DOUBLE WORD MBOX COUNT WHEN UPT=EPT
DEFSYM TIMLOC=EPT+514 ;INTERRUPT INSTRUCTION FOR INTERVAL TIMER
DEFSYM EPTTR1=EPT+421 ;EXEC MODE ARITH OVFL TRAP
DEFSYM EPTTR2=EPT+422 ;EXEC MODE PDL OV TRAP
DEFSYM EPTTR3=EPT+423 ;EXEC MODE TRAP 3 (1 PROCEED)
;UPT LOCATIONS - IN NON-TIME SHARING AND AT CLOCK LEVEL IN ITS UPT=EPT
;424 MUUO STORED HERE
;425 MUUO PC STORED HERE
;426 MUUO DATAI PAG, HERE
;430 MUUO NEW PC KERNEL NO TRAP
;431 . . K T
;432 . . S N T
;433 . . S T
;434 . . C N T
;435 . . C T
;436 . . P N T
;437 . . P T
;500 PAGE FAIL WORD STORED HERE IN DEC PAGING MODE
;501 PAGE FAIL PC STORED HERE IN DEC PAGING MODE
;502 PAGE FAIL NEW PC FROM HERE IN DEC PAGING MODE
;504-5 EBOX COUNT
;506-7 MBOX COUNT
DEFSYM EPTPFW=EPT+500 ;PAGE FAIL WORD STORED HERE IN ITS PAGING MODE
DEFSYM PFOPC=EPT+501 ;PAGE FAIL OLD PC STORED HERE IN ITS PAGING MODE
DEFSYM PFNPC=EPT+502 ;PAGE FAIL NEW PC OBTAINED FROM HERE IN ITS PAGING MODE
;LOW CORE
;0-200 DF10S CHANNEL PROGRAMS, INTERRUPT LOCATIONS FOR IMP INTERFACE
;400-500 DTE20 COMMUNICATION AREA (COMMUNICATE WITH KLDCP AND IOELEV)
;500-1000 DL10 COMMUNICATION AREA AND BUFFERS (COMMUNICATE WITH IOELEV)
DEFSYM QICWA=32 ;ITS DISK ICWA
DEFSYM QIOWD=160 ;ITS DISK IOWD AREA
DEFSYM RCIOWD=162 ;.. FOR READ COMPARE
DEFSYM MICWA=30 ;ITS TAPE ICWA
DEFSYM MIOWD=170 ;ITS TAPE IOWD AREA
;LUUO IN EXEC MODE LOCATIONS 40,41
DEFSYM SLVICW=60 ;SALVAGER ICWA
DEFSYM SLVIOW=62 ;SALVAGER IOWD AREA
;EXEC DDT'S DISK ROUTINES USE LOCATIONS 20 AND 21, BUT THEY SAVE AND RESTORE THEM
DEFSYM IMPILC=70 ;IMPTERFACE INPUT INTERRUPT INSTRUCTION PAIR
DEFSYM IMPOLC=72 ;IMPTERFACE OUTPUT INTERRUPT INSTRUCTION PAIR
;DTE20 STUFF AS DEFINED BY KLDCP, ETC.
;THE DOCUMENTATION CLAIMS THIS STUFF IS IN THE EPT, BUT ACTUALLY
;IT'S IN FIXED LOCATIONS IN LOW CORE.
DEFSYM EPTDIA=440 ;DIAGNOSTIC (SALV) START ADDRESS
DEFSYM EPTDDT=441 ;DDT START ADDRESS
DEFSYM EPTSTL=442 ;LOADER (DSKDMP) START ADDRESS
DEFSYM EPTITS=443 ;MONITOR (ITS) START ADDRESS
DEFSYM DTEFLG=444 ;DTE20 OPERATION COMPLETE FLAG (SET BY 11, CLEARED BY 10)
DEFSYM DTECLK=445 ;DTE20 CLOCK INTERRUPT FLAG (SET BY 11, CLEARED BY 10)
;DEFSYM DTECI=446 ;DTE20 CLOCK INTERRUPT INSTRUCTION (USED BY 10 SOFTWARE)
DEFSYM DTET11=447 ;DTE20 10->11 ARGUMENT (SET BY 10) (NOT USED?)
DEFSYM DTEF11=450 ;DTE20 11->10 ARGUMENT (SET BY 11)
DEFSYM DTECMD=451 ;DTE20 10->11 COMMAND WORD (SET BY 10)
DEFSYM DTESEQ=452 ;DTE20 OPERATION SEQUENCE NUMBER (AOS BY 10)
DEFSYM DTEOPR=453 ;DTE20 OPERATION IN PROGRESS FLAG (SET/CLEARED BY 10)
DEFSYM DTECHR=454 ;DTE20 LAST TYPED CHARACTER (SET BY 11, CLEARED BY 10)
DEFSYM DTEMTO=455 ;DTE20 MONITOR-MODE TYPEOUT DONE FLAG (SET BY 11, CLEARED BY 10)
DEFSYM DTEMTI=456 ;DTE20 MONITOR-MODE TYPEIN DONE FLAG (SET BY 11, CLEARED BY 10)
DEFSYM DTESWR=457 ;DTE20 SIMULATED SWITCH REGISTER (SET BY 11 ON START)
DEFSYM DTE==200 ;DTE20 #0 DEVICE CODE
DEFSYM %DBL11==20000 ;CONO BIT TO "DOORBELL" 11
DEFSYM %DBL10==1000 ;CONI BIT FOR DOORBEL FROM 11. CONO BIT TO CLEAR.
;1.1-1.3 DTE20 PIA
;WORDS STORED IN DTECMD
DEFSYM %DTTTI==2400 ;BUFFERED INPUT. CHAR RETURNED IN DTEF11 AFTER LINE TYPED.
;NUMBER 0-377 IS CHAR TO BE TYPED OUT (FLUSHES INPUT. BUFFER NOT PRINTED UNTIL LF/^G/^@)
DEFSYM %DTTTO==2000 ;THIS + CHAR ALSO = TTY OUTPUT
DEFSYM %DTTYI==3400 ;"DDT" INPUT, CHAR RETURNED IN DTEF11, ZERO IF NO CHAR TYPED
DEFSYM %DTTYO==4000 ;THIS + CHAR = ITS (MONITOR) TTY OUTPUT.
;WHEN TYPEOUT DONE, INTERRUPT WITH DTEMTO SET.
;TYPEIN CAUSES INTERRUPT WITH DTEMTI SET, CHAR IN DTEF11.
DEFSYM %DTMMN==4400 ;MONITOR MODE ON (DEFAULT WHEN START)
DEFSYM %DTMMF==5000 ;MONITOR MODE OFF (TYPEIN OF A ^X DOES THIS ALSO)
DEFSYM %DTMMS==5400 ;RETURN MONITOR MODE STATE IN DTEF11
;DEFSYM %DTNRM==3000 ;NORMAL PRINT MODE
;DEFSYM %DTFRC==3001 ;FORCED PRINT MODE
DEFSYM %DTCLN==1001 ;CLOCK ON (60 CYCLE SIMULATED CLOCK)
DEFSYM %DTCLF==1000 ;CLOCK OFF
;DEFSYM %DTCLW==1002 ;"CLOCK WAIT" DTET11 HAS COUNT (? WHAT THE HECK IS THIS?)
;DEFSYM %DTCLR==1003 ;RETURN "CLOCK COUNT" IN DTEF11 (? WHAT THE HECK IS THIS?)
DEFSYM %DTHLT==400 ;HALT
;DEFSYM %DTFTL==401 ;DIAG FATAL ERROR (ACTUALLY JUST TURNS OFF CLOCK)
;DEFSYM %DTERR==402 ;DIAG ERROR HALT (ACTUALLY JUST TURNS OFF CLOCK)
;DEFSYM %DTEPG==403 ;END OF DIAGNOSTIC PROGRAM
;DEFSYM %DTEOP==404 ;END OF DIAGNOSTIC PASS
;DEFSYM %DTCLK==405 ;GET "CLOCK DEFAULT WORD"
;DEFSYM %DTFSL==406 ;DIAMON FILE SELECT (NAME.EXT MUST HAVE BEEN %DTTTO'ED)
;DEFSYM %DTFRD==407 ;DIAMON FILE READ (5 CHARS OR -1 (EOF) RETURNED IN DTEF11)
;DEFSYM %DTCMD==410 ;KLDCP COMMAND EXECUTED FROM OUTPUT BUFFER (%DTTTO IT)
;DEFSYM %DTRSW==1400 ;RETURN SIMULATED SWITCHES IN DTEF11. 10 SHOULD THEN STORE IN DTESWR
IFN $$TEMP,EXPUNG DEFSYM

278
src/system/evsyms.21 Executable file
View File

@@ -0,0 +1,278 @@
;This purports to be a table of all ITS symbols
;referenced by user programs, not counting sys$j in DDT.
;to sort in TECO, do J6FXA 12U0 <:S0; -DK> CS;$:LL :FWLFWLL J<50L .-Z; 12I 13I 10I> JGA
;The "5" is chosen to count these 4 comment lines, and the blank line.
;Commented-out symbols are those for obsolete devices, used from PEEK/FIDO but not essential.
%QAACC ;used by PEEK
%QACTH ;used by PEEK
%QADEL ;used by PEEK
%QAEFR ;used by PEEK
%QAEFW ;used by PEEK
%QAFUL ;used by PEEK
%QAPAR ;used by PEEK
%QAWOV ;used by PEEK
%QMMDR ;used by PEEK
%QMMDW ;used by PEEK
%QMTTR ;used by PEEK
%QMTTW ;used by PEEK
%QMUDR ;used by PEEK
%QMUDW ;used by PEEK
AC0S ;used by PEEK
APRC ;used by PEEK
AUSOPG ;used by PEEK
BADBTS ;used by DDT
CALSXB ;used by PEEK
CLSTB ;used by PEEK
CUSER ;used by PEEK
DCHSTB ;used by FIDO (.EVAL and core mapping)
DCHSTB ;used by PEEK
DEDTIM ;used by PFTHMG DRAGON
DEVTAB ;used by PEEK
;DG2 ;used by PEEK
DIRCHN ;used by PEEK
;DISUSR ;used by FIDO (.EVAL and core mapping)
;DISUSR ;used by PEEK
DMNBC ;used by PFTHMG DRAGON
DMNBD ;used by NAMDRG
DMNBD ;used by PFTHMG DRAGON
DMNBEL ;used by NAMDRG
DMNBEL ;used by PFTHMG DRAGON
DMNBF ;used by NAMDRG
DMNBF ;used by PFTHMG DRAGON
DMNBFE ;used by PFTHMG DRAGON
DMNSZ ;used by NAMDRG
DPKBAS ;used by LOCK
;DRTM ;used by PEEK
EDEVS ;used by PEEK
;EUPOS ;used by PEEK
FLSINS ;used by PEEK
HUSRAD ;used by PEEK
IDF1 ;used by PEEK
IDF2 ;used by PEEK
IDLRCE ;used by PEEK
IFPIR ;used by PEEK
IMPBPQ ;used by PEEK
IMPSTL ;used by PEEK
IMPUP ;used by FIDO (.EVAL and core mapping)
IMPUP ;used by PEEK
IMPUP ;used by TELNET (and by other network programs I think - MRC)
IMPUS ;used by COMSAT (.EVAL)
IMPUS ;used by DDT
IMPUS ;used by NAMDRG
IMPUS ;used by NAME
IMPUS ;used by QMAIL (.EVAL)
IMSOC1 ;used by PEEK
IMSOC2 ;used by PEEK
IMSOC3 ;used by PEEK
IMSOC4 ;used by PEEK
IMSOC4 ;used by NAME and NAMDRG
IMSOC5 ;used by PEEK
IMSOC6 ;used by PEEK
IMSOC7 ;used by PEEK
IMSOC8 ;used by PEEK
IOCHNM ;used by FIDO (.EVAL and core mapping)
IOCHNM ;used by PEEK
IOCHNM ;used by NAME and NAMDRG
IOCHST ;used by FIDO (.EVAL and core mapping)
IOCHST ;used by PEEK
IOTLSR ;used by PEEK
IOTTB ;used by PEEK
JBDEV ;used by PEEK
JNAME ;used by FIDO (.EVAL and core mapping)
JNAME ;used by NAMDRG
JNAME ;used by NAME
JNAME ;used by PEEK
JNAME ;used by PFTHMG DRAGON
JTMU ;used by PEEK
LIOBLK ;used by PFTHMG DRAGON
LOSRCE ;used by PEEK
LOUTIM ;used by PEEK
LPTUSR ;used by FIDO (.EVAL and core mapping)
LPTUSR ;used by PEEK
LSCALL ;used by PEEK
LUBLK ;used by COMSAT
LUBLK ;used by FIDO (.EVAL)
LUBLK ;used by NAMDRG
LUBLK ;used by NAME
LUBLK ;used by PEEK
LUBLK ;used by PFTHMG DRAGON
LUBLK ;used by CLU
LUIOP ;used by PEEK
MAXJ ;used by COMSAT
MEMBLT ;used by PEEK
MEMFR ;used by PEEK
MEMPNT ;used by PEEK
MMMPG ;used by PEEK
MMPNP ;used by PEEK
MMSWP ;used by PEEK
;MPXBUF ;used by PEEK
MSKST ;used by PEEK
MSKST2 ;used by PEEK
MTUSR ;used by PEEK
MUR ;used by PEEK
MURUSR ;used by PEEK
N11TYS ;used by FIDO (.EVAL)
N11TYS ;used by NAMDRG
N11TYS ;used by NAME
NCBCOM ;used by PEEK
NCT ;used by FIDO (.EVAL)
NCT ;used by LOCK
NCT ;used by NAMDRG
NCT ;used by NAME
NCT ;used by PEEK
NDPTYS ;used by LOCK
NETDBO ;used by NAME and NAMDRG
NETDUI ;used by NAME and NAMDRG
NETP ;used by COMSAT (.EVAL)
NETP ;used by QMAIL (.EVAL)
NF11TY ;used by FIDO (.EVAL)
NF11TY ;used by NAMDRG
NF11TY ;used by NAME
NFDPTY ;used by LOCK
NFSTTY ;used by NAMDRG
NFSTTY ;used by NAME
NFSTTY ;used by PEEK
NIOCHN ;used by NAME and NAMDRG
NMPGS ;used by PEEK
NNTYS ;used by LOCK
NPGSWO ;used by PEEK
NQCHN ;used by PEEK
NQMFWR ;used by COMSAT (.EVAL and core mapping)
NQS ;used by PEEK
NSTTYS ;used by NAMDRG
NSTTYS ;used by NAME
NSTTYS ;used by PEEK
NSWPGS ;used by PEEK
NULTIM ;used by PEEK
NUNITS ;used by PEEK
NUTIC ;used by PEEK
NUTOC ;used by PEEK
;NVDUSR ;used by PEEK
NXGPFW ;used by XGPSPL
OIPBIT ;used by DDT
OPRSXB ;used by PEEK
PARERR ;used by PEEK
;PDPUSR ;used by FIDO (.EVAL and core mapping)
;PDPUSR ;used by PEEK
PICLR ;used by PEEK
PIRQC ;used by PEEK
PLTUSR ;used by PEEK
PRVUSR ;used by PEEK
PSWOUS ;used by PEEK
PTPUSR ;used by PEEK
PTRUSR ;used by PEEK
QFBLNO ;used by PEEK
QIRRCV ;used by PEEK
QSCRW ;used by PEEK
QSMDN ;used by PEEK
QSMPRP ;used by PEEK
QSNLCN ;used by PEEK
QSNUD ;used by PEEK
QSRAC ;used by PEEK
QUDFPR ;used by PEEK
QUDPR ;used by PEEK
QUSR ;used by PEEK
RNABLU ;used by PEEK
RPCL ;used by PEEK
SCHHB ;used by PEEK
SCLNET ;used by LOCK
SHUTDN ;used by NAMDRG
SHUTDN ;used by NAME
SILNG ;used by PEEK
SLOADU ;used by DDT
SLOADU ;used by PEEK
SOLNG ;used by PEEK
SSCHDB ;used by PEEK
STYSTS ;used by NAMDRG
STYSTS ;used by NAME
STYSTS ;used by PEEK
SUEXIT ;used by PEEK
SUPCOR ;used by LOCK
SUPPRO ;used by COMSAT
SUPPRO ;used by FIDO (.EVAL and core mapping)
SUPPRO ;used by NAMDRG
SUPPRO ;used by NAME
SUPPRO ;used by PEEK
SUPPRO ;used by PFTHMG DRAGON
SUUOH ;used by PEEK
SV40 ;used by PEEK
SWPOPR ;used by PEEK
SWRCE ;used by PEEK
SYSUSB ;used by DDT
SYSUSE ;used by DDT
SYSYMB ;used by DDT
SYSYME ;used by DDT
;TABUSR ;used by PEEK
TCTYP ;used by FIDO (.EVAL and core mapping)
TIME ;used by NAMDRG
TIME ;used by NAME
TIME ;used by PEEK
TIME ;used by PFTHMG DRAGON
TRNLS1 ;used by PEEK
TRNLST ;used by PEEK
TRUMM ;used by PEEK
TRUNTM ;used by PEEK
TRUNTM ;used by PFTHMG DRAGON
TSIPRQ ;used by PFTHMG DRAGON
TSYSM ;used by PEEK
TT11P ;used by NAMDRG
TT11P ;used by NAME
TTITM ;used by NAMDRG
TTITM ;used by NAME
TTYCHN ;used by LOCK
TTYSTS ;used by FIDO (.EVAL and core mapping)
TTYSTS ;used by NAMDRG
TTYSTS ;used by NAME
TTYTBL ;used by FIDO (.EVAL and core mapping)
TTYTBL ;used by NAMDRG
TTYTBL ;used by NAME
TTYTBL ;used by PEEK
TTYTYP ;used by FIDO (.EVAL and core mapping)
TTYTYP ;used by LOCK
TTYTYP ;used by NAMDRG
TTYTYP ;used by NAME
;UDIR ;used by PEEK
;UDIRO ;used by PEEK
;UGOAL ;used by PEEK
;ULCTM ;used by PEEK
UMASTER ;used by FIDO (.EVAL and core mapping)
UMASTER ;used by PEEK
UMNTR ;used by PEEK
UNAME ;used by COMSAT
UNAME ;used by FIDO (.EVAL and core mapping)
UNAME ;used by NAMDRG
UNAME ;used by NAME
UNAME ;used by PEEK
UNAME ;used by PFTHMG DRAGON
UPC ;used by PEEK
UPGCP ;used by PEEK
UPGSEC ;used by PEEK
UREALT ;used by PEEK
USRSTG ;used by COMSAT
USIPRQ ;used by PEEK
USIPRQ ;used by PFTHMG DRAGON
USIPRQ ;used by CLU
USRHI ;used by COMSAT
USRHI ;used by FIDO (.EVAL and core mapping)
USRHI ;used by PEEK
USRHI ;used by PFTHMG DRAGON
USRRCE ;used by PEEK
USTP ;used by PEEK
USWPRI ;used by PEEK
USWSCD ;used by PEEK
USWST ;used by PEEK
USYSN1 ;used by PEEK
USYSNM ;used by PEEK
;UTASS ;used by PEEK
;UTBFS ;used by PEEK
UTMPTR ;used by NAMDRG
UTMPTR ;used by NAME
UTMPTR ;used by PEEK
UTRNTM ;used by PEEK
UTRNTM ;used by PFTHMG DRAGON
;UTTNO ;used by PEEK
;UTUSR ;used by PEEK
UUAC ;used by PEEK
XJNAME ;used by COMSAT
XUNAME ;used by COMSAT

216
src/system/fsdefs.43 Executable file
View File

@@ -0,0 +1,216 @@
.AUXIL
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [
$$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
.MLLIT==1
$$TEMP==1
]
.ELSE $$TEMP==0
;FILE SYSTEM PARAMETERS - APPLIES TO ALL ITS MACHINES
;9/5/79 - tut format changed!
;8/19/90 - DM "funny" bit flushed
;MFD INFO
IFDEF NBLKS,[ ;MFDBLK KNOWN ONLY IF .INSRT APPROPRIATE PHYSICAL PARAMS FILE
DEFSYM MFDBLK==NBLKS/2-1 ;LOC ON DISK
DEFSYM MFDCYL==MFDBLK/NBLKSC
DEFSYM MFDSRF==<MFDBLK-MFDCYL*NBLKSC>*SECBLK/NSECS
DEFSYM MFDSEC==<MFDBLK-MFDCYL*NBLKSC>*SECBLK-MFDSRF*NSECS
]
;RANDOM INFO IN MFD
DEFSYM MDNUM==0 ;ASCENDING DIR NUM
DEFSYM MDNAMP==1 ;PNTR TO ORG OF USER NAME BLOCK AREA
DEFSYM MDYEAR==2 ;CURRENT YEAR
DEFSYM MPDOFF==3 ;DE-CORIOLIS CLOCK OFFSET
DEFSYM MPDWDK==4 ;PREFERRED WRITING DISK (PHYSICAL DRIVE #)
DEFSYM MDCHK==5 ;THIS WORD MUST BE M.F.D. (FOR CHECKING)
DEFSYM MDNUDS==6 ;NUMBER USER DIRECTORIES (FOR CHECKING ONLY)
DEFSYM LMIBLK==7 ;TOTAL STG USED BY HACKS LIKE THIS
;USER NAME BLKS FROM C(MDNAMP) TO END
DEFSYM LMNBLK==2 ;# WDS/BLK
DEFSYM MNUNAM==0 ;6BIT USER NAME
;SECOND WORD OF A USER-NAME BLOCK IS ZERO.
;DECUUO CONTAINS A KLUDGE WHICH DEPENDS ON THIS,
;PLEASE NOTIFY BUG-DECUUO BEFORE CHANGING IT.
;TUT INFO
IFDEF NBLKS,[
DEFSYM TUTBLK==MFDBLK-NTUTBL ;LOC ON DISK
DEFSYM TUTCYL==TUTBLK/NBLKSC
DEFSYM TUTSRF==<TUTBLK-TUTCYL*NBLKSC>*SECBLK/NSECS
DEFSYM TUTSEC==<TUTBLK-TUTCYL*NBLKSC>*SECBLK-TUTSRF*NSECS
]
DEFSYM TUTBYT==3 ;SIZE OF BYTES (USED TO BE 4)
DEFSYM TUTBP==<440000+TUTBYT_6>,,
DEFSYM TUTEPW==36./TUTBYT ;NUMBER OF ENTRIES PER WORD
DEFSYM TUTMAX==1_TUTBYT
DEFSYM TUTLK==TUTMAX-1 ;HIGHEST CODE MEANS LOCKED OUT
DEFSYM TUTMNY==TUTLK-1 ;TUT MANY OR MORE REFS
;RANDOM INFO IN TUT (AT THE FRONT)
DEFSYM QPKNUM==0 ;PACK #
DEFSYM QPAKID==1 ;PACK ID
DEFSYM QTUTP==2 ;FREE SPACE POINTER TO TRACK AREA. ADVANCE BY CYLINDERS
DEFSYM QSWAPA==3 ;SWAPPING AREA. FIRST TRACK OF NON-SWAPPING AREA
;NEW FILES WILL NOT BE WRITTEN LOWER THAN THIS.
DEFSYM QFRSTB==4 ;FIRST BLOCK TUT'ED
DEFSYM QLASTB==5 ;LAST BLOCK TUT'ED
DEFSYM QTRSRV==6 ;-1 IF ONLY ALLOCATED DIRS CAN HAVE FILES ON THIS PACK
;IF NOT 0 AND NOT -1, SIXBIT NAME OF "SECONDARY" PACK
;STG FOR RANDOM INFO ^
DEFSYM LTIBLK==20 ;BYTES MAPPING THE DISK START HERE
;UFD INFO
;IF A IS RELATIVE LOCATION OF MFD ENTRY, USER DIR IS LOCATED IN
;TRACK NUMBERED <A-2000+2*MDNUDS>/2 (SEE QFL2)
DEFSYM UFDBYT==6 ;SIZE OF BYTES (Do not change!)
DEFSYM UFDBPW==36./UFDBYT ;NUMBER OF BYTES PER WORD
;RANDOM INFO IN UFD
DEFSYM UDESCP==0 ;FS PNTR TO DESC AREA
DEFSYM UDNAMP==1 ;PNTR TO ORG OF NAME AREA
DEFSYM UDNAME==2 ;USER NAME (FOR CHECKING)
DEFSYM UDBLKS==3 ;LEFT HALF HAS AMOUNT OF SPACE ALLOCATED (NOT USED
; CURRENTLY BY SYSTEM), RIGHT HALF HAS NUMBER OF BLOCKS USED.
DEFSYM UDALLO==4 ;IF NONZERO, LEFT HALF HAS DISK NUMBER, RIGHT
; HALF HAS AMOUNT OF SPACE ALLOCATED
DEFSYM UDDESC==11. ;FIRST LOC AVAIL FOR DESC
; 8/19/90 Due to the larger size of RP07s it was necessary to officially
; flush the DM "funny" bit. This change only changes the comments in this
; file, but any program that interprets UFD descriptors needs to be fixed
; to not mask that bit out (as most of them currently do). Fortunately all
; the known ITS filesystems have zeros in all their "funny" bits, so the
; change is upward compatible.
; UFD descriptor format described:
;
; Each 6-bit byte is taken in turn and used to compute a sequence of block
; numbers. If N is the current descriptor byte, and B is the current block
; number (initially undefined), then N is interpreted as follows:
;
; 0 Marks the end of the file description.
;
; 1 to UDTKMX (1 to 14) "Take" N blocks.
; Blocks B through B + N - 1 are the next N blocks of the file.
; Set B := B + N .
;
; UDTKMX+1 to UDWPH-1 (15 to 36) "Skip" B - UDTKMX blocks.
; Set N := N + B - UDTKMX .
; (ITS has been broken for years such that it never uses this
; UFD descriptor code!)
;
; UDWPH (37) Write Place Holder
; A noop. Used to reserve space in directories for files that are
; being written. Just skip over it and read the next byte.
;
; 40 - 77 Load address and take 1.
; Read the next NXLBYT descriptor bytes (NXLBYT=2), N2 and N3.
; Set B := LSH(AND(N, 37), 12.) + LSH(N2, 6) + N3 .
; Block B is the next block in the file.
; Set B := B + 1 .
;
; A zero length file is described as two bytes: UDWPH then 0. UDWPH does
; not otherwise normally appear in UFD descriptions for closed files.
; Note that a legal description must use codes 40 - 77 before it can use
; any code other than UDWPH.
; Links are described as a sequence of SIXBIT characters terminated with a
; 0 byte. The directory, first and second name are stored in order.
; The first two components are terminated with a ";" if they are less than
; 6 characters long. ";" (73), ":" (72) and " " (0) are quoted by
; preceding them with a ":". Some examples:
;
; Link target names: Bytes stored in directory:
;
; 123456 123456 123456 "123456123456123456 "
; ALAN FOO BAR "ALAN;FOO;BAR "
; .MAIL. NAMES > ".MAIL.NAMES;> "
; .MAIL. LISTS MSGS ".MAIL.: LISTS: : MSGS "
; MOON LUNAR :EJ "MOON;LUNAR;::EJ "
;
; There are a lot of illegal or wasteful possibilities for link descriptors
; ("A;B ", "A;B;C;D ", ":A;:B;:C ", etc.), which is suprising since
; somebody was clearly trying to compress them into as few bytes as
; possible.
; Here is the pre 8/19/90 comment describing UFD descriptors:
;
; ;UFD DESCRIPTORS
; ;0 => FREE 1-UDTKMX => TAKE NEXT N
; ;UDTKMX+1 THRU UDWPH-1 => SKIP N-UDTKMX AND TAKE ONE
; ;UDWPH => WRITE-PLACE-HOLDER
; ;40 BIT SET => LOAD ADDRESS. LOWER 5 BITS PLUS NEXT NXLBYT (2)
; ; CHARS (17 BITS IN ALL)
; ;40 BIT & 20 BIT => "FUNNY" BLOCK IF DMDSK. WHAT IS THIS, ANYWAY?
; ;END BY 0
;
; ;IF LINK DESCR
; ;6 CHAR OR UNTIL ; = SYS NAME. MUST HAVE NO CHAR = 0 IN THIS OR
; ; NEXT 2 NAMES
; ;NEXT CHAR QUOTED BY : (FOR NAMES WITH : OR ;)
; ;NEXT CHAR N1
; ;NEXT CHAR N2
; ;END BY 0
DEFSYM UDTKMX==12. ;HIGHEST "TAKE N" CODE
DEFSYM UDWPH==31. ;PLACE HOLDER ON WRITE (OR NULL FILE)
DEFSYM UDSKMX==UDWPH-UDTKMX-1 ;# BLOCKS THAT CAN BE SKIPPED
DEFSYM NXLBYT==2 ;# ADDITIONAL BYTES FOR LOAD ADDR
;IN SYSTEM THIS IS DEFINED AT FRONT OF FILE
;NAME AREA DATA
DEFSYM LUNBLK==5 ;WDS/NAME BLK
DEFSYM UNFN1==0 ;FIRST FN
DEFSYM UNFN2==1 ;SECOND FN
DEFSYM UNRNDM==2 ;ALL KINDS OF RANDOM INFO
DEFSYM UNDSCP==1500,, ;PNTR TO DESC
DEFSYM UNPKN==150500,, ;PACK #
DEFSYM UNLINK==1 ;LINK BIT
DEFSYM UNLNKB==220100,,
DEFSYM UNREAP==2 ;IF 1, DONT REAP FILE
DEFSYM UNWRIT==4 ;OPEN FOR WRITING
DEFSYM UNMARK==10 ;GC MARK BIT
DEFSYM UNCDEL==20 ;DEL WHEN CLOSED
DEFSYM DELBTS==20 ;DELETED -- IGNORE
DEFSYM UNIGFL==24 ;BITS TO IGNORE FILE
DEFSYM UNWRDC==301200,, ;WORD COUNT OF LAST BLOCK MOD 2000
DEFSYM UNDUMP==400000 ;HAS BEEN DUMPED
DEFSYM UNDATE==3 ;DATE ETC.
DEFSYM UNTIM==2200,, ;COMPACTED TIME OF CREATION
DEFSYM UNYMD==222000,, ;Y,M,D OF CREATION
DEFSYM UNMON==270400,, ;MONTH
DEFSYM UNDAY==220500,, ;DAY
DEFSYM UNYRB==330700,, ;YEAR
DEFSYM UNREF==4 ;REFERENCE DATE SAME AS LEFT HALF OF UNDATE
DEFSYM UNREFD==222000,, ;REFERENCE DATE BYTE POINTER
DEFSYM UNAUTH==111100,, ;MFD INDEX OF AUTHOR, ALL 1=> NO DIRECTORY
DEFSYM UNBYTE==001100,, ;FILE BYTE SIZE AND LENGTH INFO.
;LET S=BITS PER BYTE, C=COUNT OF UNUSED BYTES IN LAST WD
;400+100xS+C S=1 TO 3 C=0 TO 35.
;200+20xS+C S=4 TO 7 C=0 TO 8
;44+4xS+C S=8 TO 18. C=0 TO 3
;44-S S=19. TO 36. C=0
;NOTE THAT OLD FILES HAVE UNBYTE=0 => S=36.
IF1 IFDEF NUDSL, IFG NUDSL*LMNBLK+LMIBLK-2000,.ERR MFD LOSES
IFN $$TEMP,EXPUNG DEFSYM

931
src/system/imp.365 Executable file
View File

@@ -0,0 +1,931 @@
;;; -*- Mode:MIDAS -*-
IMPVRS==.IFNM2 ; Version of IMP code
IFN NCPP,.FATAL IMP Code doesn't support NCP any more!
IFE KSIMP,.FATAL Wrong IMP driver file included!
OVHMTR IMP ;Charge all this stuff to the IMP
$INSRT LHDH
; IMP 1822 PROTOCOL INFORMATION (EXTENDED-LEADER VERSION)
; The IMP leader is 96 bits long, usually organized as 3 words of 32 bits.
; For further details, these documents are available from the Network
; Information Center:
; IMP-HOST protocol: BBN Report No. 1822
; NCP protocol: NIC 8246, Host-to-Host Protocol for the ARPANET
; IP, TCP: Internet Protocol Transition Workbook, and
; Internet Protocol Implementor's Guide
;
; Here is the leader format used by the IMP code. This format uses
; no IMP padding, assumes IP only, and expects all IMP<->HOST data
; transfers in 32-bit mode.
;
; Previous versions of this code which supported NCP used a much more
; complicated leader formatting scheme based on 36 bit transfers and
; IMP padding. That scheme is dead, see SYSTEM;IMPOLD WTHNCP for details.
;
; All data from the IMP interface ends up in the -10 as left-justified
; 32-bit words. Objects of less than 32 bits length, such as IP octets,
; are stored in PDP10 ILDB byte order.
;
;------------------------------------------------------------------------
;1: 4.9-4.6 not used (0)
; 4.5-4.2 all 1's for new format, else old msg type (4=old nop)
; 4.1-3.3 network number (0)
; 3.2-2.8 not used (0)
; 2.7 trace (ignored)
; 2.6-2.4 leader flags (2.6 is to be ignored, 2.5-2.4 are not used!)
; 2.3-1.5 message type
;
;2: 4.9-4.2 Handling type (7 for big buffers, 4 for small buffers,
; 0 for the control link)
; 4.1-3.3 Host number on IMP
; 3.2-1.5 IMP number
;
;3: 4.9-4.2 Link Number (High 8 bits of Message ID)
; 4.1-3.7 Low 4 bits of Message ID (0)
; 3.6-3.3 Sub-type
; 3.2-1.5 Message length
;------------------------------------------------------------------------
;4: 4.9-1.5 First word of IP datagram
; ....
;------------------------------------------------------------------------
;
;In message types 2 and 6, the going-down status 16-bit word is
;in word 3 bits 4.9-3.3.
;3.6-3.3 of word 3 are the padding count for type 4 (nop) from host.
;This is currently 0 (none). Padding is only put on type-0 messages.
IMPLDS==3 ;IMP local leader size
;Byte pointers to fields of input leader
IMOTBP: 340400,,IMPILB+0 ;Message format type
IMTBP: 041000,,IMPILB+0 ;Message type field
IMSABP: 043000,,IMPILB+1 ;Source address field (host+IMP)
IMSHBP: 241000,,IMPILB+1 ;Source host field
IMSIBP: 042000,,IMPILB+1 ;Source IMP field
IMLNBP: 341000,,IMPILB+2 ;Link number field
IMSTBP: 240400,,IMPILB+2 ;Subtype field
IMMLBP: 042000,,IMPILB+2 ;Message length field
SUBTTL ARPANET VARIABLES AND TABLES
EBLK
%IMXLN==:<<8159.-96.>+31.>/32. ; Max # of 32-bit words in IMP regular msg,
; exclusive of leader and leader padding. = 252.
%IMMTU==:251.*4 ; Used by IP/TCP. Driver currently rounds to PDP10 words,
; forcing this to be 1004 instead of 1007.
; ACTIVE HOST TABLE. Entries herein are allocated as needed, using garbage
; collection. Most "host number" fields are really indices into this table.
;
LIMPHT==<XBL+10.> ; TCP conns plus a few extra
IMPHTF: -1 ;Host table free list, threaded through IMPHTB, end with -1
IMPHTS: ;Start of table area
IMPHTN: BLOCK LIMPHT ; Host number. 1.1-1.8 HOST, 2.1-3.7 IMP
IMPHTB: BLOCK LIMPHT ;Bits:
;4.9 UNUSED
;4.8 GC MARK BIT
;4.7-4.3 UNUSED
;4.2-4.1 STATUS OF HOST 0 DOWN, 1 RST SENT, 2 UP
;3.9-3.1 UNUSED
.SEE IMPHDS ;RH Last message from IMP about "host dead status"
IMPHTC: BLOCK LIMPHT ; # active messages outstanding for host (8 max)
IMPHTT: BLOCK LIMPHT ; Time of last RFNM received
IMPHTE==.-1 ;Last location in table
;Status variables
;
IMPUP: -1 ;0 => IMP up ;-1 => down ;-2 => coming up, PI still off
;1 => down for good, until next time IMP ready line changes
IMPTCU: 0 ;0 IMP up/down status not changing
;>0 Trying to reinitialize, SYSJOB hasn't done so yet
;-1 Has been reinitialized, haven't exchanged NOPs yet
IMPUCT: 0 ;IMP coming up timeout, if 4 NOPs don't go through promptly.
IMPDWN: BLOCK 3 ;Last message from IMP that it is going down
;WD0: "Reason" claimed by IMP (see ch 3 of BBN report 1822)
;WD1: Time when expected down
;WD2: Time when expected up (SYS time=1/30 sec since up)
IMERCN: -1 ;CONI into here when net goes down
BBLK
EBLK
;Input side variables
;
IMPILB: BLOCK IMPLDS ;Input leader buffer
IMPCSH: -1 ;Current source host (IMPHTB index). -1 when idle.
IMPCLN: 0 ;Current link number
IMIFLS: 0 ;Flushing output at interrupt handler
IMPIEC: 0 ;Count of input errors while down.
IMPIBC: 0 ;Count of words available in DMA input buffer
IMPIBP: 0 ;Pointer into DMA input buffer
;Output side variables
;
;Output leader buffer
IMOLDR: <17_10.>,,0 ;Regular new-format message
IMOLAD: 0 ;Filled in with destination IMP address
<233_10.>,,0 ;IP link field
IMNOPC: 0 ;< 0 => Send NOPs
IMPOAC: -1 ;>= 0 => Output active, don't restart
IMPBZY: 0 ;-1 == Waiting for output interrupt
IMPODP: 0 ;Pointer to IP datagram being output at PI level
IMPOS: 0 ;Output state
%ISODL==:0 ; Not expecting output done (i.e. between messages)
%ISONP==:1 ; Sending NOP
%ISOID==:2 ; Sending IP Datagram
;Meters
;IP meters
IMNIPI: 0 ; # of IP datagrams input (rcvd)
IMNIPF: 0 ; # of IP datagrams flushed (input threw away)
IMNIPO: 0 ; # of IP datagrams output (sent)
IMNIPR: 0 ; # of IP RFNMs received
IMNIP7: 0 ; # of IP Type 7 (Dest Host Dead) messages received
IMNIP8: 0 ; # of IP Type 8 (Error) msgs rcvd
IMNIP9: 0 ; # of IP Type 9 (Incomplete Transmission) msgs rcvd
IMNWIG: 0 ; # words ignored by "Ignore" state (%ISIGN)
IMNWIF: 0 ; # words flushed by IMPRM5
;IMP meters
IMNSRF: 0 ;Number of spurious RFNMs on non-IP links
IMNBLK: 0 ;Number of times blockage avoided (output held up by ITS)
IMPMSR: BLOCK 20;Count of IMP messages rcvd
IMPM1S: BLOCK 4 ; # Type 1 (Error in Leader) subtype msgs
IMPM9S: BLOCK 2 ; # Type 9 (Incomplete Transmission) subtype msgs
IMPMSS: BLOCK 1 ;Count of IMP msg sent (we only send regular msgs)
IMCT1: 0 ;# Unvectored interrupts
IMCT2: 0 ;# Valid input interrupts
IMCT3: 0 ;# Valid output interrupts
BBLK
SUBTTL ARPANET MAIN-PROGRAM LEVEL
;IMPIBF, IMPOBF defined as low-memory buffer page in ITS
IF2,IFN IMPIBF&777,.FATAL IMPIBF not on DEC page boundary
;(Re)Start IMP. Called from SYSJOB to start IMP, or on error or
; user requested cycle through LOCK
;
IMPINI: SETOM IMPUP ;Not up yet,
SETOM IMPTCU ; but thinking about it.
MOVEI A,IMPIBF_-9. ;DEC page # of IMP buffer page
TRO A,%UQ16B\%UQVAL ;Valid mapping, 16 bit device
IOWRI A,UBAPAG+IUIMPG_1 ;Set up 1 DEC page of UBA mapping. Note that
; the second half of IUIMPG isn't mapped at all
CONO PI,NETOFF ;Freeze things while IMP bashing occurs
MOVEI A,%LHRST
IOWRI A,%LHOCS ;Reset output side
IOWRI A,%LHICS ;Reset Input side
;IMP now shut down. Reset variables
SKIPE A,IMPODP ;Have an output datagram ?
PUSHJ P,IPIODN ;Yep, release it.
SETZM IMPODP ;No output datagram
SETZM IMPOS ;Output idle
SETOM IMPOAC ;Output interrupt level inactive
SETZM IMPBZY ;No pending output interrupt
SETZM IMPIBC ;No input available
SETZM IMPIEC ;No input errors yet
SETZM IMIFLS ;Not flushing input at interrupt level
SETOM IMPCSH ;No current host table index
SETOM IMPDWN+1 ;Time for IMP to go down, not known
CONO PI,NETON ;Allow interrupts again
;Wait one sec for IMP to notice rdy line drop
MOVE T,TIME
ADDI T,30.
CAMLE T,TIME
PUSHJ P,UFLS
MOVNI A,30. ;Allow 15 seconds to come up
MOVEM A,IMPUCT
MOVE T,TIME ;Note when we last started IMP
MOVEM T,LNETIM
PUSHJ P,IMPHRS ;Set host ready
PUSHJ P,IMPIST ;Start input
MOVE T,TIME
ADDI T,15. ;Wait 1/2 sec before we try to output
CAMLE T,TIME
PUSHJ P,UFLS
MOVNI A,4
MOVEM A,IMNOPC ;Send 4 NOPs to start
;Falls through to start output
;Start IMP output
;
IMPOST:
IMPIOS: CONO PI,PIOFF ;Freeze.
AOSE IMPOAC ;Do nothing if output already active.
JRST PIONJ
SETOM IMPBZY ;Note we want an IMP interrupt
CONO PI,NETRQ ;Force nonvectored IMP interrupt
JRST PIONJ
;Check if IMP ready line is set
; Called from SYSJOB.
; Return +1 if IMP not ready, +2 if so
;
IMPCKR: IORDI A,%LHICS ;Get input CSR
TRNN A,%LHINR ;Skip if IMP not ready
AOS (P) ;Return +2 if ready
POPJ P, ;That's all
;Set HOST READY. From SYS job only, please, loops waiting.
;
IMPHRS: IORDI T,%LHICS
TRNN T,%LHRDY ;Can we mung?
BUG
IORI T,%LHHRC\%LHSE ;Turn on HR. SE prevents dropping messages
IOWRI T,%LHICS
MOVEI A,777777 ;I don't know why this takes so long.
IMPHR1: IORDI T,%LHICS ;Get the bits back
TRNE T,%LHHR ;LHDH thinks host ready is ready
RET ;HR line set
SOJG A,IMPHR1 ;Timed out yet?
BUG CHECK,[IMP: Timed out setting Host Ready]
RET
SUBTTL HOST-TABLE MANAGEMENT
;IMPHTI - Initialize host table
; Performed whenever IMP announces that it has been reset
;
IMPHTI: SETOM IMPHTF ;Force GC of IMPHTB on first reference
SETZM IMPHTS ;Clear table of old information
MOVE A,[IMPHTS,,IMPHTS+1]
BLT A,IMPHTE
POPJ P,
; FNDHST - Look up host-table index for a given IMP host address.
; Call with NETOFF or NETCHN PI in progress.
; T/ IMP host address (maybe someday other nets?)
; Returns .+1 if failed (no room in table)
; Returns .+2
; H/ host-table index
; Smashes W.
FNDHST: MOVEI H,LIMPHT-1 ;Search for an entry for this host
CAME T,IMPHTN(H)
SOJGE H,.-1
JUMPGE H,POPJ1 ;Found
SKIPGE H,IMPHTF ;Not found, cons one off free list
JRST FNDHS1 ;Oops, must garbage collect
MOVE W,IMPHTB(H)
CAIGE H,LIMPHT ;Make sure H is valid idx
CAIL W,LIMPHT ;ditto W
BUG HALT,[NET: FNDHST idx clobbered!!!]
MOVEM W,IMPHTF
MOVEM T,IMPHTN(H)
SETZM IMPHTB(H) ;Nothing is known about this host
SETZM IMPHTC(H) ;Assume no RFNMs outstanding
SETZM IMPHTT(H) ;Clear out time of last RFNM.
JRST POPJ1
; Host-Table full, attempt to GC it and flush unused entries, by
; scanning all possible pointers into table.
; IMP pointers are IMPCSH and IMPHTC(H)
; TCP pointers are XBNADR(I)
; GC mark phase - mark entries in use
FNDHS1: PUSH P,I
MOVSI W,200000 ;Mark bit
MOVEI H,LIMPHT-1 ;Clear all mark bits
ANDCAM W,IMPHTB(H)
SOJGE H,.-1
SKIPL H,IMPCSH ;Mark from IMPCSH
IORM W,IMPHTB(H)
IFN TCPP,[
MOVEI I,XBL-1
SKIPL H,XBNADR(I) ; See if TCP conn has a net addr specified
IORM W,IMPHTB(H) ; Yes, set the mark bit.
SOJGE I,.-2
] ;IFN TCPP
; GC sweep phase - free all unmarked entries
SETO I, ;Free pointer
MOVEI H,LIMPHT-1
MOVSI W,601000 ;Protect if RFNM-WAIT, RST-WAIT, or marked
FNDHS4:
SKIPG IMPHTC(H) ;Also protect if any outstanding RFNMs
TDNE W,IMPHTB(H)
SOJGE H,FNDHS4
JUMPL H,FNDHS5
SETZM IMPHTN(H) ;Don't belong to any host
MOVEM I,IMPHTB(H) ;Cons onto free list
MOVE I,H
SOJGE H,FNDHS4
FNDHS5: MOVEM I,IMPHTF ;Free list
POP P,I
SKIPGE IMPHTF
POPJ P, ;GC-overflow
JRST FNDHST ;Try again, should win
;See if IMP code is willing to handle a particular datagram right now.
; A/ IP DGM pointer
; C/ Immediate destination address
; Returns +1, can't send right now, +2, OK to send
;
IMPCTS: MOVE T,C ;Set up for FNDHST
AND T,[<377_16.>+377] ;Mask out all but host and IMP field
CALL FNDHST ;Get host index in H
POPJ P, ;No host entry, don't send
JSP T,IMPBLI ;See if OK to send
POPJ P, ;IMP wants to block, no send
JRST POPJ1 ;Skip return if OK to send.
;;; IMP Blockage avoidance
; The current IMP software will not accept more than 8 active
; messages to a single host; attempting to send a 9th message will block
; ALL output to the interface, until the first message has been ack'd
; by means of one of the following message types:
; Type 5, RFNM - Message delivered OK
; Type 7, Host dead - transmit failed ("permanent")
; Type 8, Error in data - interface spazzed
; Type 9, Incomplete Transmission - temporary failure
; If for some reason the first message simply becomes lost, the IMP timeout
; (and blockage) can last for up to 30-45 seconds.
; More details in BBN Report 1822.
; ITS attempts to fix this by keeping a count of active un-ACKed
; messages for each host it is communicating with. A timeout is also
; associated with each host; if output to a given host is blocked by ITS
; because there are 8 active messages, trying to send a 9th message
; will check the last-RFNM-received time and if this was more than
; 30 or so seconds then the IMP is probably not giving us what it should
; and we should reset things for that host.
%IMPMA==:8. ; # of maximum active IMP messages allowed
; IMPBLI, IMPBLD - routines to hack active-message counts, called via JSP T,
; IMPBLD decrements count.
; IMPBLI increments count and skips if successful (else failed,
; and must NOT output another message to this host!)
; Also clobbers Q.
;
IMPBLI: AOS Q,IMPHTC(H)
CAIGE Q,%IMPMA ;Trying to send max or more messages?
JRST 1(T) ;No, can return safely.
CAIG Q,%IMPMA ;Is this the maximum # allowed?
JRST [ MOVE Q,TIME ;Yes, set up blockage timeout
ADDI Q,60.*30. ; for one minute.
MOVEM Q,IMPHTT(H)
JRST 1(T)] ;And allow this one to be sent
; Trying to send too many messages, block it (check for timeout though)
SOS IMPHTC(H) ;Restore original count
AOS IMNBLK ;Increment # of times softwarily blocked.
MOVE Q,IMPHTT(H)
CAML Q,TIME ;See if timeout still in the future
JRST (T) ;Yes, just take failure-return to block.
BUG INFO,[IMP: RFNM-wait timeout! Hst=],OCT,IMPHTN(H)
SETZM IMPHTC(H) ;This may be dangerous... oh well.
SETZM IMPHTT(H)
JRST (T) ;Block one last time, next try will win.
;Decrement block count on receipt of any kind of ACK
;
IMPBLD: SOSL Q,IMPHTC(H)
JRST IMPBL2
BUG INFO,[IMP: negative RFNM-wait cnt, Hst=],OCT,IMPHTN(H)
SETZB Q,IMPHTC(H)
IMPBL2: CAIL Q,%IMPMA-1 ;If we were blocking on this host,
PUSHJ P,IMPIOS ;Ensure IMP output started up so blocked stuff
JRST (T) ; gets sent promptly.
SUBTTL ARPANET INPUT INTERRUPT LEVEL
;First level interrupt handling for input side. Here from UBA vector hardware.
IFN NETCHN-UTCCHN,.ERR NETCHN assumed == UTCCHN at IMPIBK
EBLK
IMPIBK: 0
BBLK
JSR UTCSAV ;Save AC's, get a stack
AOS IMCT2 ;Count input interrupts
IORDI TT,%LHICS ;Get CS register
TRNE TT,%LHERR\%LHNXM
JRST IMPRST ;Try resetting the IMP
TRNE TT,%LHMRE ;Ready line flapped
JRST IMPIER ;Go directly to error routine
TRNN TT,%LHRDY ;Device ready for new operation?
JRST IMPRST ;Try resetting.
TRNN TT,%LHEOM ;Saw EOM from IMP?
JRST IMPIB1 ;No, word count ran out before message
SKIPGE IMIFLS ;Flushing output?
JRST [ SETZM IMIFLS ;Not any more!
JRST IMPIRT ] ;But flush last piece by queueing new request
IORDI A,%LHIWC ;End of message. Get remaining UB word count
SKIPE A ;This would be a surprise, really
TDO A,[-1,,600000] ;36bit number of UBA words remaining in bfr
IDIVI A,2 ;Number of PDP10 words (cleverly rounded)
ADDI A,IMPBFS ;Number of PDP10 words of message
MOVEM A,IMPIBC ;Set current count of available data words
MOVEI A,IMPIBF
MOVEM A,IMPIBP ;Set pointer to available data words
JRST IMPLDD ;Go process input message
;Here when finished processing current message.
IMPIRT: SETOM IMPCSH ;Note no current host
PUSHJ P,IMPIST ;Restart input listener
JRST IMPEX
;Message didn't fit in input buffer. Shouldn't ever get here, but
;might if messages concatenated due to ready line randomness
;
IMPIB1: BUG INFO,[IMP: Huge message]
SETOM IMIFLS ;Say we are flushing output
JRST IMPIRT ;And go queue up another read
;Here if error during IMP message transfer
; Currently the only error handled is the IMP going non-ready
IMPIER: SKIPE IMPUP ;Is the IMP supposed to be up?
JRST IMPIE1 ;No, handle errors differently
BUG INFO,[IMP: Input Ready Error]
JRST IMPRST ;Ready line flapped while up, cycle interface
IMPIE1: AOS T,IMPIEC
CAIG T,10. ;Huge number of errors while down?
JRST IMPIRT ;No, just ignore this input and start another
SETZM IMPIEC ;Reset
BUG INFO,[IMP: Excessive input errors while down]
JRST IMPRST ;Cycle the interface
IMPRST: IORDI T,%LHICS ;Record IMP status for sysjob
HRLZM T,IMERCN
IORDI T,%LHOCS
HRRM T,IMERCN
MOVEI A,%LHRST ;Avoid randomness by resetting HW now.
IOWRI A,%LHOCS ;Reset output side
IOWRI A,%LHICS ;Reset Input side
SETOM IMPUP ;IMP is down
MOVEI T,1
MOVEM T,IMPTCU ;But trying to come up (sysjob poked)
MOVSI J,SCLNET ;Ask SYSJOB to cycle the IMP
IORM J,SUPCOR
JRST IMPEX
SUBTTL IMP leader dispatch handling
IMPLDD: SKIPG B,IMPIBC ;Get count of available data
POPJ P, ;None, nothing to do.
CAILE B,IMPLDS ;More than a leader worth?
MOVEI B,IMPLDS ;Yep, only want leader now
MOVS A,IMPIBP ;Copy and reformat leader to IMPILB
HRRI A,IMPILB
BLTUB A,IMPILB-1(B)
ADDM B,IMPIBP ;Increment buffer pointer,
MOVN C,B
ADDM C,IMPIBC ; and decrement count
LDB T,IMOTBP ;Examine new-format flag bits of leader
CAIL B,IMPLDS ;Large enough to be a valid leader?
CAIE T,17 ;Verify that leader is "new" 96-bit fmt.
JRST IMPLDE ;Go process error in leader
LDB T,IMLNBP ;Extract link number (high 8 bits of msg-id)
MOVEM T,IMPCLN ;Save link message arrived on
LDB T,IMSABP ;Get arpanet address (source host+imp)
IFN 0,[
LDB T,IMSHBP ;Source host
LDB A,IMSIBP ;Source imp
DPB A,[112000,,T] ;Form host address
];IFN 0
PUSHJ P,FNDHST ;H gets host table index
JRST IMPLHE ;Host table full
MOVEM H,IMPCSH ;Save current host
LDB A,IMTBP ;Get message type in A
CAIL A,IMTDTS
JRST IMPUN ;Unknown type?
AOS IMPMSR(A) ;Count IMP msgs rcvd
JRST @IMTDT(A) ;Dispatch
IMTDT: IMPRM ; 0 Regular Message
IMPBE1 ; 1 Error in Leader (no msg-id)
IMPGD ; 2 IMP Going Down
IMPUN ; 3 -
IMPIN ; 4 NOP
IMPRFN ; 5 RFNM - Ready For Next Message (transmit succeeded)
IMPHDS ; 6 Host Dead Status (general info)
IMPDHD ; 7 Destination Host Dead (transmit failed)
IMPBE8 ; 8 Error in Data (has msg-id)
IMPINC ; 9 Incomplete Transmission (transmit failed temporarily)
IMPIRS ;10 Interface Reset - IMP dropped its ready line
IMTDTS==.-IMTDT
IMPLHE: BUG INFO,[IMP: Message discarded due to host table full],OCT,IMPILB,OCT,IMPILB+1,OCT,IMPILB+2
JRST IMPIRT
;Here if leader is too short or of wrong format.
; B/ Leader length
IMPLDE: SKIPE IMPUP ;If IMP is not up, we'll take anything.
JRST IMPIRT
CAIGE B,IMPLDS ;Announce short leader if so.
BUG INFO,[IMP: Short leader, ],DEC,B,[wds. WD1=],OCT,IMPILB,[WD2=],OCT,IMPILB+1
LDB A,IMOTBP ;Get message format type
CAIN A,4 ;Old-type NOP?
JRST IMPIRT ; Just ignore it.
IFN 0,[ ;;For the moment this is a problem because the IMP is marked
;;up too soon, before all incoming NOPS are received.
CAIN A,16 ;Is it 1822L format?
BUG INFO,[IMP: 1822L leader],OCT,IMPILB
CAIE A,17 ;Is it not the long-leader format?
BUG INFO,[IMP: Old-type leader],OCT,IMPILB
]
JRST IMPIRT ;Ignore rest of message, if any
;;; IMP->Host Type X (e.g. 3, 11-255) - bad type
IMPUN: BUG INFO,[IMP: Unknown msg type ],OCT,A,[ leader ],OCT,IMPILB,OCT,IMPILB+1,OCT,IMPILB+2
JRST IMPIRT
;;; IMP->Host Type 1 - Error in leader (msg-id not given)
;;; IMP->Host Type 8 - Error in data (msg-id given)
IMPBE1: LDB T,IMSTBP ;Get subtype (4 bits)
ANDI T,3 ;Only 2 bits should be used
AOS IMPM1S(T) ;Increment count of Type 1 subtype messages
IMPBE8: SKIPN IMPUP ;Ignore error during initial syncronization
BUG INFO,[IMP: Type ],DEC,A,[err msg, leader],OCT,IMPILB,OCT,IMPILB+1,OCT,IMPILB+2
MOVE B,IMPCLN ;Get link msg came in on
CAIN B,233 ;Internet link?
AOS IMNIP8 ;Yes, count IP meter
CAIN A,8. ;Error identified with a particular message?
JSP T,IMPBLD ;Decrement count of active messages
JRST IMPIRT
;;; IMP->Host Type 2 - IMP going down
IMPGD: LDB B,[420200,,IMPILB+2] ;Reason (see 1822)
MOVEM B,IMPDWN
LDB B,[360400,,IMPILB+2] ;How soon going down * 5 mins
MOVE H,B
IMULI B,5*60.*30. ;Ticks in 5 mins
ADD B,TIME
MOVEM B,IMPDWN+1
LDB C,[241200,,IMPILB+2] ;How long to be down * 5 minutes
MOVE Q,C
IMULI C,5*60.*30. ;Downtime in ticks
ADD C,B ;Add to time down
MOVEM C,IMPDWN+2 ;Store time when will be up
IMULI H,5 ;Minutes
IMULI Q,5
BUG INFO,[IMP: Going down in ],DEC,H,[mins for ],DEC,Q,[mins, reason],DEC,IMPDWN
JRST IMPIRT
;;; IMP->Host Type 4 - NOP
IMPIN: JRST IMPIRT ;One more NOP from IMP
;;; IMP->Host Type 5 - RFNM (Ready For Next Message)
IMPRFN: JSP T,IMPBLD ;Decrement outstanding message count for host
MOVE A,IMPCLN ;Get link #
CAIE A,233 ;IP link number?
JRST IMRFNX ;No, skip IP code
AOS IMNIPR ;Bump count of IP RFNMs received
JRST IMPIRT ; and do nothing else about it, ugh.
IMRFNX: BUG INFO,[IMP: Spurious RFNM from ],OCT,IMPHTN(H),[link],OCT,IMPCLN
AOS IMNSRF
JRST IMPIRT
;;; IMP->Host Type 6 - Host Down Status
; H/ host index
IMPHDS: LDB A,[301400,,IMPILB+2];Bits 65-76 of leader, 4.9-3.7 3rd word
HRRM A,IMPHTB(H) ;Store, hope user read RFC 611
JRST IMPIRT
;;; IMP->Host Type 7 - Destination Host Dead
IMPDHD: MOVEI E,%NCDED
JRST IMPHNR
;;; IMP->Host Type 9 - Incomplete Transmission
IMPINC: LDB T,IMSTBP ;Get subtype field (4 bit reason for failure)
AOS IMPM9S(T) ;Bump count of subtypes
MOVEI E,%NCINC ;This is an incomplete msg response
IMPHNR: JSP T,IMPBLD ;Decrement active IMP msg count for this host
MOVE A,IMPCLN ;Link for this message?
CAIE A,233 ;IP Link?
JRST IMPHN1
CAIN E,%NCINC ;Yes, count IP meters
AOS IMNIP9
CAIN E,%NCDED
AOS IMNIP7
JRST IMPIRT
IMPHN1: BUG INFO,[IMP: DHD or IT msg rcvd on non-IP link]
JRST IMPIRT
;;; IMP->Host Type 10 - Interface Reset
IMPIRS: PUSHJ P,IMPHTI ;Initialize host table
BUG INFO,[IMP: Interface reset]
JRST IMPIRT
;;; IMP->Host Type 0 - Regular Host-Host message
; Unless the source host screwed up and sent a dataless message,
; there is at least one word waiting to be read in the buffer.
;
IMPRM: SKIPG A,IMPIBC ;Get available input word count
JRST IMPIRT ;None left, just ignore message
MOVE B,IMPCLN ;Is link number the magic cookie for IP?
CAIE B,233
JRST IMPIRT ;No, ignore it
;IP datagram. Copy into IP buffer and pass it up.
;
AOS IMNIPI ;Bump count of IP datagrams received
PUSHJ P,IPGIPT ;Ask IP for buffer of size (A)
JRST [ AOS IMNIPF ;Punted, bump cnt of datagrams lost
JRST IMPIRT ] ;Flush this message (err msg already printed)
MOVE B,PK.BUF(A) ;Destination
HRL B,IMPIBP ;Source
MOVE C,IMPIBC ;Input words available
ADDI C,-1(B) ;Last destination address
BLTUB B,(C) ;Copy and reformat data to IP buffer
MOVE B,IMPIBC ;Get word count back to B
SETZB C,IMPIBC ;Say zero offset to IP header, and clear count.
MOVE J,IMPCSH ;Set idx to host-table entry dgm received from.
PUSHJ P,IPRDGM ;Hand off rcvd datagram to IP
JRST IMPIRT ;Return from PI level, setting up for next msg
;Start listening for new input from IMP
;
IMPIST: HRREI T,-IMPBFS*2
IOWRI T,%LHIWC ;Read up to a buffer full of data
MOVEI T,<IUIMPG_12.>+<4*<IMPIBF&777>>
IOWRI T,%LHICA ;Read data to here
MOVEI T,%LHIE\%LHHRC\%LHSE\%LHGO ;Interrupt, store data, go
IOWRI T,%LHICS ;Start read
RET
SUBTTL ARPANET OUTPUT INTERRUPT LEVEL
;Here on unvectored interrupt caused by call to IMPIOS
IMPINT: AOS IMCT1 ;Count unvectored interrupts
JRST IMPOBZ ;Go try to start output
;Returns directly to interrupt dispatcher
;First-level interrupt handling, from hardware dispatch.
; Crash on severe interface errors
; Restart IMP on ready line flappage.
; Else, go look for more output to send.
IFN NETCHN-UTCCHN,.ERR NETCHN assumed == UTCCHN at IMPOBK
EBLK
IMPOBK: 0
BBLK
JSR UTCSAV ;Save AC's, get a stack
AOS IMCT3 ;Count output interrupts
IORDI TT,%LHOCS ;Get CS register
TRNE TT,%LHERR\%LHNXM ;Interface lost?
JRST IMPOEC ;Try cycling
TRNE TT,%LHMRE ;Somebody bounce a ready line?
JRST IMPOER
IMPOBE: TRNN TT,%LHRDY ;Device ready for new operation?
JRST IMPOEC ;Try cycling
PUSHJ P,IMPOBZ ;No IMP error. Perform planned action.
JRST IMPEX ;Dismiss interrupt.
;Error while outputting datagram. Currently, just means ready line flapped.
; If IMP was up, finish up IP output if necessary to free buffer, then
; cycle the interface.
; If trying to send NOPS to come up, just send a few more to resynch.
;
IMPOER: SKIPE IMPUP ;IMP up?
JRST IMPOE1 ;Not running normally, maybe OK.
BUG INFO,[IMP: Output RDY error]
IMPOEC: SKIPE A,IMPODP ;Have an output datagram ?
PUSHJ P,IPIODN ;Yep, release it.
SETZM IMPOS ;Doing nothing useful
JRST IMPRST ;Go poke SYSJOB to cycle the IMP
;Here if interface wasn't fully up.
IMPOE1: MOVE T,IMPOS
CAIE T,%ISONP ;Were we sending a NOP?
BUG CHECK,[IMP: Confusing output error]
SOS IMNOPC ;Add another NOP to make up for this one
SETZM IMPOS ;NOt doing anything anymore
JRST IMPOBE ;Go continue processing.
;IMPOBZ - Toplevel output processing routing.
; Called from output done interrupt handler or from MP/CLOCK level with
; NETOFF to start output.
IMPOBZ: SKIPL B,IMPOS
CAIL B,IMPODL
BUG HALT,[IMP: Bad output state]
JRST @IMPODT(B)
IMPODT: OFFSET -.
%ISODL:: IMPOB0 ; 0 Idle, look for something to send
%ISONP:: IMPOB1 ; 1 Finished NOP
%ISOID:: IMPOB2 ; 2 Finished IP datagram messge
IMPODL::OFFSET 0
;Here when interrupt has finished processing a complete message.
; Attempt to find something else to do.
;
IMORET:
;JRST IMPOB0 ;Fall through to try for more
; Idle - Look for output to send. First ensure we can send stuff,
; then try things in the order:
; (1) Send NOP if net coming up
; (2) Check IP datagram queue
;
IMPOB0: HRRZ T,IMPUP ;Get current IMP state.
CAIE T,-2 ;Don't say it's up when it's still going down
CAIN T,1 ;or when it is broken
JRST IMPOBN
; First check to see if NOP needs to be sent.
AOSG IMNOPC ;Check to see if sending NOPs
JRST IMONOP ;Output a NOP
SETZM IMPUP ;Say IMP is up
SETZM IMPTCU ;Say no longer trying to come up
; Now see if there is any real traffic to send
PUSHJ P,IPGIOQ ;Check IP. Get IP IMP output queue entry if any
JRST IMPOBN ;Nothing there, we're done.
; Returns A/ ptr to IP dgm struct
; B/ BLKO pointer to 32-bit words (unused)
; C/ Arpanet address
;
;Build an IMP-format datagram at IMPOBF.
; Set correct address in prototype leader.
; BLT and reformat leader to IMPOBF.
; BLT and reformat datagram to IMPOBF + leader size.
MOVEM A,IMPODP ;Save ptr to datagram being output
AOS IMNIPO ;# of IP datagrams sent
;Put together the IMP leader in IMOLDR.
IFN 0,[ ;First and third word initialized at assembly time
MOVE B,[17_10.,,0] ;Regular message
MOVEM B,IMOLDR
MOVSI B,233_10. ;IP link # in left 8 bits
MOVEM B,IMOLDR+2 ;Set up third word
]
AND C,[<377_16.>+377] ;Mask out all but host and IMP field
LSH C,4. ;Move net address to correct field
MOVEM C,IMOLAD ;set up second word of leader
;Copy leader and datagram to IMPOBF
MOVE B,[IMOLDR,,IMPOBF]
BLTBU B,IMPOBF+IMPLDS-1 ;Move IMP leader into place
MOVS B,PK.BUF(A) ;SOURCE,,COUNT
MOVEI A,IMPLDS(B) ;Size including leader to A
HRRI B,IMPOBF+IMPLDS ;Put d'gram immediately after leader.
BLTBU B,IMPOBF-1(A)
PUSHJ P,IMPSOH ;Go start hardware
MOVEI C,%ISOID ;Remember we are outputting IP leader
MOVEM C,IMPOS
POPJ P,
;Here if nothing to output.
; Flag output inactive and disable interface
;
IMPOBN: SETOM IMPOAC ;No more output
IORDI TT,%LHOCS
TRZ TT,%LHIE\%LHGO ;Deactivate interface for a bit
IOWRI TT,%LHOCS
POPJ P,
;IMONOP - Send a NOP, here from IMPOBZ only.
;
IMONOP: MOVEI A,IMPNOS ;Length of NOP message
MOVE B,[IMPNOP,,IMPOBF] ;BLT (and reformat) NOP to output buffer
BLTBU B,IMPOBF-1(A)
PUSHJ P,IMPSOH ;Start output of (A) words from IMPOBF to IMP
MOVEI C,%ISONP ;Set correct output FSM state
MOVEM C,IMPOS
POPJ P,
;Prefabricated NOP Host-IMP leader
IMPNOP: 17_10.,,4_4 ;New format, type 4 = NOP
0
0 ;No padding required on regular messages
IMPNOS==.-IMPNOP
;Finished sending NOP, from IMPOBZ
;
IMPOB1: SETZM IMPOS ;Reset state
JRST IMORET ;Go look for something else to do.
;Was sending IP datagram, from IMPOBZ
;
IMPOB2: SETZB A,IMPOS ;Reset output state.
EXCH A,IMPODP ;Get active datagram and reset pointer
PUSHJ P,IPIODN ;Tell IP level that datagram was output
JRST IMORET ;Go see if there is anything else to do.
;Start output hardware.
; A/ Count of PDP10 words to write to net.
; Data to output in IMPOBF.
; Must be NETOFF or at NETCHN interrupt level. Bashes A only.
IMPSOH: ASH A,1 ;Convert PDP10 word count to...
MOVNS A ; negative unibus word count.
IOWRI A,%LHOWC ;Tell the interface
MOVEI A,<IUIMPG_12.>+<4*<IMPOBF&777>>
IOWRI A,%LHOCA ;Unibus address of output buffer
MOVEI A,%LHIE\%LHELB\%LHGO ;Enable interrupts, send EOM, GO
IOWRI A,%LHOCS ;Start DMA transfer
POPJ P, ;And forget it.
SUBTTL ARPANET CLOCK LEVEL
IMRSTO: RET ;Nothing to do any more?
OVHMTR UUO
;NETHST (HOST INFO)
; ARG 1 - HOST => VAL 1 - STATUS, VAL 2 - HOST NUMBER
; ARG 1 - -1 => VAL 1 - (STATUS), VAL 2 - OUR HOST NUMBER
;NOT CURRENTLY IMPLEMENTED- ARG 1 - -1, ARG 2 - OUR GOING-DOWN REASON
;
ANETHST:HRRE T,A ;Let immediate -1 win (777777 not a valid host)
AOJE T,ANETH2 ;Jump if want local status and host number
MOVE T,A
JSP J,STDHST ;Standardize and error-check host number
MOVE B,T ;Return new format
TLO B,(NW%ARP)
MOVEI H,LIMPHT-1
CONO PI,NETOFF ;Do we have status for this host?
CAME T,IMPHTN(H) ;Scan table
SOJGE H,.-1
JUMPGE H,ANETH1 ;Yes, return it
CONO PI,NETON ;No, have to go get it
MOVEM T,SRN3(U)
POPJ P, ;Oh, too bad
;Here to return status of foreign ARPAnet host
ANETH1: MOVE A,IMPHTB(H) ;Get status
CONO PI,NETON
EXCH A,B
CALL CVH2NA ;Convert to HOSTS2 for compat
EXCH A,B
JRST LSWCJ1 ;Return IMSOC, NETLST if not done already
;Here to return our status, host
ANETH2:
REPEAT 0,[
CAIL W,2 ;(This is a crock)
MOVEM B,NTHDSW ;If 2 args, set our reason for going down.
]
SKIPE IMPUP ;Fake up our status
TDZA A,A ;We're down
MOVSI A,2000 ;We are up
MOVEI B,IMPUS ;And our host umber
JRST POPJ1
;NETIMP (REASON,TIMEDOWN,TIMEUP) READ/SET
;
ANETIM: JUMPLE W,ANETM1 ;No args, return current data
CAIGE W,3 ;Must have 3 args if any
JRST OPNL30
MOVEM A,IMPDWN ;Set data
MOVEM B,IMPDWN+1
MOVEM C,IMPDWN+2
JRST POPJ1
ANETM1: MOVE A,IMPDWN ;Get data to return
MOVE B,IMPDWN+1
MOVE C,IMPDWN+2
SKIPE IMPUP ;Note current condition of IMP, too
TLO A,400000
JRST POPJ1

1974
src/system/impold.wthncp Executable file

File diff suppressed because it is too large Load Diff

1430
src/system/inet.138 Executable file

File diff suppressed because it is too large Load Diff

4944
src/system/ioelev.432 Executable file

File diff suppressed because it is too large Load Diff

21930
src/system/its.1644 Executable file

File diff suppressed because it is too large Load Diff

5321
src/system/itsdev.974 Executable file

File diff suppressed because it is too large Load Diff

320
src/system/itsdis.50 Executable file
View File

@@ -0,0 +1,320 @@
;DEVICE CODES
DIS==130 ;DISPLAY PROCESSOR
DISMAP==134 ;MEM PROT & REL
LIPSH==(040000)
NWSTK==LIPSH 3,
ADSTAR: CONO PI,CLKOFF ;TURN OFF CLOCK TO PREVENT POSSIBLE GOBBLING BY ANOTHER USER
PUSHJ P,DISCHK ;CHECK IF THIS USER OWNS THE DISPLAY
JRST CLKONJ ;RESTART THE CLOCK
SETZM E.SPGH ; QSWI1 switch
SETZM E.SCLS ; clear clobber switch
SKIPL DISUSR ; no user
CAMN U,DISUSR ; skips if different index
JRST NOCLBR ; dont untie pages
MOVEM U,E.SCLS ; else remember to untie
SKIPA ; and dont hack disusr
NOCLBR: MOVEM U,DISUSR ;GIVE IT TO HIM IF NO ONE ELSE OWNS IT
CONO PI,CLKON ;RESTORE THE CLOCK
CONO DIS,5010 ;SET STOP, CLEAR PIA
XCTR XR,[HRRZ A,(C)] ; causes pg ld, fetches droot
HRRM A,DSTADD ; remember for restarts
XCTR XR,[MOVE B,(A)] ; load display page
PUSHJ P,SWTL ; circular switch gobble
CIRPSW
LSH A,-10. ; page number
SKIPN E.SCLS ; clobbering old user index ?
JRST RDSCLB ; if not, skip it
MOVE U,DISUSR ; old useri
PUSHJ P,E.SCLB ; untie pages
MOVEI U,0
EXCH U,E.SCLS ; clear switch, fetch new usri
MOVEM U,DISUSR
RDSCLB: PUSHJ P,UPLC ; users pg n into circular pointer
PUSHJ P,CHACK ; go in circles
SKIPL C ; 4.9 implies real core in loop
JRST NOTIED ; if not, dont tie down -- still swapped out
MOVE T,J ; MEMPNT INDEX
MOVE E,D ; MMP INDEX
PUSHJ P,E.SPG1 ; go tie it down
NOTIED: PUSHJ P,LSWPOP ; clear switch
; now set up E&S dbrs
MOVEI T,UDBR1A(U)
HRLI T,<NUVPG/2>_1 ;DBL left 1 relative to 10
MOVEM T,E.SPM+2
HRRI T,UDBR2A(U)
MOVEM T,E.SPM+3
; now start (or restart if from E.SPGI) E&S
RDSTAR: CONO DIS,515330 ;RESET THE WORLD
SETOM E.SSYS ;FLAG=MAP ON (USER MODE)
CONO DIS,515330 ;CLEAR 3D CLIPPER
MOVEI I,1000 ;SET COUNT FOR TIMEOUT
MOVE H,DSTADD ; fetch c(0)
MOVEM H,E.SPM ; store in status block
MOVSI H,140000 ; status bits -- map high and low
MOVEM H,E.SPM+1 ; set status
SKIPA H,[-ADSTN,,ADSTL-1]
BLKO DIS,H
CONSO DIS,604000 ;SKIP IF DONE OR ERROR
SOJG I,.-1
JUMPL H,.-3
JUMPE I,CPOPJ ;FAIL IF TIME OUT ON START
CONSZ DIS,600000 ;CHECK FOR EXECUTIVE ERRORS
JRST ADXIT ;GIVE INTERRUPT, NO SKIP
AOS (P)
ADCON1: CONO DIS,400 ;RUN
ADXIT: CONO DIS,222010+DISCHN ;ALARM+MPV+STOP+PIA
POPJ P,
ADSTPX: CONSZ DIS,1040 ;FAIL TO SKIP IF MEM OR SEL STOP
JRST ILUUO ;ERROR IF STOP
ADSTOP: CAME U,DISUSR ;SKIP IF USER OF SCOPE
JRST URET ;EXIT IF NOT SCOPE USER
ADSTPY: CONO DIS,5000 ; IOSTOP+STOP.INT.OFF
CONO DIS,300 ;LR.PROG+CLR.HIT
CONSO DIS,640000 ;SKIP IF PARITY, NXM, MPV ON
JRST E.SUSM ;MAP IS STILL ON
CONO DIS,400000 ;CLEAR MASTER STUFF (TURNS OFF MAP)
CONO DIS,400000 ;CLEAR 3D CLIPPER
AOS E.SSYS ;REMEMBER PAGING IS OFF
E.SUSM: CONSO DIS,4000 ;SKIP IF STOPPED AND READY
PUSHJ P,UFLS ;ELSE WAIT UNTIL READY
POPJ P,
ADCONT: PUSHJ P,ADSTPX ;ILLEGAL IF MEM OR SEL STOP
PUSHJ P,E.SFU ; force user mode if necessary
POPJ P,0 ; gross lossage (hardware)
JRST ADCON1
ADSTEP: PUSHJ P,ADSTPX ;ILLEGAL IF MEM OR SEL STOP
PUSHJ P,E.SFU ; Force User mode (reloads map and skips)
POPJ P,0 ; lossage if here
CONO DIS,40
POPJ P,
ADWORD: XCTR XR,[MOVE J,(J)] ; fetch c(AC)
PUSHJ P,ADSTOP ;MAKE SURE IT IS STOPPED
PUSHJ P,E.SFU ;RELOAD MAP IF NECESSARY
POPJ P,0 ;MAP NOT IN USER MODE
DATAO DIS,J
POPJ P,
ADCLOS: CAME U,DISUSR
POPJ P,
CONO DIS,5010 ;STOP, PI OFF
SETZM E.SPGW ;CLEAR PAGE WAIT
PUSHJ P,SWTL ;LOCK CIRCULAR SWITCH
CIRPSW
PUSHJ P,E.SCLB
PUSHJ P,LSWPOP ;RESTORE SWITCH
SETOM DISUSR
POPJ P,
DISCHK: MOVE B,UNAME(U)
SKIPL T,DISUSR
CAMN B,UNAME(T)
AOS (P)
ADRSTA: ;READ STATE, WRITE STATE NOT IN.
ADSSTA: POPJ P,
;E&S PAGER HAS TO REFERENCE 0 TO INITIALLIZE MAP.
;E&S FORCE USER MODE
E.SFU: SKIPGE E.SSYS
JRST POPJ1 ;SKIP IF MAP OFF
E.SFU2: MOVSI T,140000 ;ENTRY FOR DCRRST
MOVEM T,E.SPM+1 ;RESETS STATUS
DATAO DIS,[NWSTK 1] ;STORE SP AT 0
PUSHJ P,E.SWT ;CANNOT UFLS -- NWSTK MIGHT BE REISSUED
POPJ P,0 ;HARDWARE LOSSAGE
DATAO DIS,E.SPM ;OUTPUTS C(0) (RELOADS SP)
PUSHJ P,E.SWT
POPJ P,0 ;LOST
SETOM E.SSYS ;REMEMBER MAP ON
JRST POPJ1
E.SWT: PUSH P,J
MOVEI J,100 ;COUNT FOR TIMEOUT
CONSZ DIS,4000 ;STOPPED AND READY? ELSE SKIP
JRST POPJJ1 ;SKIP RET IF READY
CONSO DIS,640000 ;OTHER FLAVORS OF LOSSAGE
SOJG J,E.SWT+2 ;COUNT IF STILL OK
CONO DIS,10 ;STOP FOR GOOD
JRST POPJJ ;LOSES, NO SKIP RETURN
ADSTL: 000501052405 ;LI DIR,052405(PROGM)
300541,,[-1,,] ;LOCLA SELINT,[-1,,](1)
300441,,[102521,,] ;LOCLA CDIR,[102521,,](1)
302641,,[3777,,3777] ;LOCLSA VIEW,[3777,,3777](1)
302701,,[377777377777] ;LOCLSA WIND,[377777377777](1)
100,,0 ; (JMP 0) load page map and go
ADSTN==.-ADSTL
EBLK
DSTADD: 000100,, ;JMP TO CODE (FILL IN ADDRESS)
; E&S PAGE MAP STATUS BLOCK
E.SPM: 0 ; c(0)
0 ; status word
0 ; dbr low
0 ; dbr high
MXDISP==16. ; maximum number of tied pages
DISPGP: -MXDISP,,0 ; page pointer for mmp pages
DISSWP: BLOCK MXDISP ; MMSWP INDICES TIED
E.SPGW: 0 ; if non zero, E&S page wait page
E.SPGH: 0 ; flag for QSWI1
E.SCLS: 0 ; if non zero, new userI flushing disusr
E.SSYS: 0 ; flag for pager on/off
E.SIST: 0 ; ststus word at last interrupt
; counts for debugging
E.SNTI: 0 ; # pages tied down (total during system run)
E.SNUT: 0 ; # pages untied (should = .-1 after dclose)
E.SREL: 0 ; # times pages in DISSWP table were relocated
; end of debug counts
DSTPCT: -1 ; STOP COUNT TO HANDLE REDUNDANT STOPS
DSCONI: 0 ;LAST CONI FROM DISPLAY
EBRKA: 0 ;INTERRUPT SAVE AC
EBRKU: 0 ; DITTO
ESBRK: 0 ;HANDLE E&S INTERRUPT
BBLK
CONSO DIS,7 ;PI CHAN ASSIGNED?
JRST 12,@ESBRK ;NO, CANNOT INTERRUPT
CONI DIS,DSCONI
CONO DIS,10 ;DEASSIGN PI CHANNEL
MOVEM U,EBRKU ;SAVE AC'S
MOVEM A,EBRKA
MOVEI A,%PILTP ;GIVE "LTPEN" INT (CLASS 3)
CONSZ DIS,640040 ;PAR, NXM, MPV, SELECT
JRST E.SFLT ; check page fault
E.SUIN: SKIPL U,DISUSR
IORM A,PIRQC(U)
E.SPFR: MOVE A,EBRKA ;UNSAVE AC'S
MOVE U,EBRKU
JRST 12,@ESBRK ;RETURN
E.SFLT: CONSZ DIS,200000 ; skip if not NXM (ie not fault)
SKIPL E.SPM+1 ; error bit set in status word ?
JRST E.SILM ; if not, real illegal mem
LDB U,[121000,,E.SPM+1] ; get page #
HRROM U,E.SPGW ; save for loading (LH is flag)
MOVE U,E.SPM+1 ; get status
MOVEM U,E.SIST ; save status for later (debugging)
LDB U,[330300,,U] ; access and pgerr
CAIE U,2 ; read write/first error
SKIPN U ; no access -- page fault
JRST E.SPFR ; gives a page fault
E.SILM: SETZM E.SPGW ; if not page fault, don't rq load
MOVEI A,%PIDIS; mem fault bits
JRST E.SUINT ; give user interrupt
DCRSTP: CAMN U,DISUSR ;IS THIS U ON DIS
AOSE DSTPCT ; HERE IF THIS USER, SKIP IF FIRST CALL TO STOP
POPJ P, ;RETURN IF NOT
CONSO DIS,7 ; SKIP IF CURRENTLY RUNNING
POPJ P, ; RETURN IF NOT RUNNING NOW
CONI DIS,DSCONI ;SAVE STATE FOR RESTART
CONO DIS,5000 ;OTHERWISE STOP IT
DISSTQ: MOVEI TT,100
CONSO DIS,4000 ;SKIP IF STOP ACTUALLY TAKES HOLD
SOJG TT,.-1 ;TIME-OUT LOOP
JUMPG TT,CPOPJ ;DID NOT TIME OUT, OK
CONO DIS,10 ;DISABLE DISPLAY (CLEAR PIA)
AOS DISSTQ ;CAUSE "SYSTEM CLOBBERED" ... ON SYS CONSOLE
POPJ P,
E.SLPM: PUSHJ P,DCRSTP ; stop before loading page map
DCRRST: CAMN U,DISUSR ;IS THE CURRENT U ON DISPLAY?
SOSL T,DSTPCT ; SKIP IF LAST START CALL, (FROM MORE THAN 1 STOP)
POPJ P, ;NO
AOSE T ;SKIP IF ONLY ONE STOP
JRST 4,. ;SOME ONE IS OUT OF PHASE!
MOVE T,DSCONI
CONSZ DIS,7 ;SKIP IF NOT RUNNABLE
TRNE T,4000 ;1=> WAS STOPPED
POPJ P, ;SO QUIT
PUSHJ P,E.SFU2 ; load E&S page map
POPJ P,0 ; lost somehow
CONO DIS,400 ;ELSE SET RUN
CONO DIS,2000 ;THEN ALLOW STOP INT
POPJ P,
; tie down hacks
;E.SPCH checks MMSWP ind in T against DISSWP
; R0 if already there, R1 if not. ret index in H
E.SPCH: MOVSI H,-MXDISP
CAMN T,DISSWP(H)
POPJ P,0 ; found
AOBJN H,.-2 ; look some more
JRST POPJ1 ; not found, skip
E.SCLB: MOVSI H,-MXDISP
SKIPE T,DISSWP(H) ; VALID IF NON-ZERO
PUSHJ P,UNTIE ; UNTIE PAGE IN T (MMSWP INDEX)
AOBJN H,E.SCLB+1
POPJ P,0
; UNTIE PG T/ MMSWP index
; H/ display table index
UNTIE: AOS E.SNUT ; count unties
PUSH P,H
MOVSI H,-1
ADDB H,MMSWP(T) ; sos # exec pgs
SKIPGE H ; if less than zero, untied an untied page
JRST 4,. ; exec pg count < 0
POP P,H
SETZM DISSWP(H) ; clear table entries
POPJ P,0
; ties down page. T/ MMSWP ind.
E.SPG1: SKIPL MEMBLT(T) ; frozen, so dont tie
PUSHJ P,E.SPCH ; skips if not there
POPJ P,0 ; dont tie
AOS E.SNTI ; count number of ties.
MOVSI H,1
ADDM H,MMSWP(T) ; aos # exec pgs
MOVE H,DISPGP ; fetch dis pg pointer
AOBJN H,.+2
MOVSI H,-MXDISP ; reset pointer if table full
MOVEM H,DISPGP ; update pointer
PUSH P,T ; now checks if slot in use
SKIPE T,DISSWP(H)
PUSHJ P,UNTIE ; untie page in T
POP P,T
MOVEM T,DISSWP(H) ; remember mmswp ind
POPJ P,0
; E.SPGI called from CFHPI on page in core after fault
E.SPGI: SKIPGE U,DISUSR
JRST 4,. ; why here ?
HRRO I,CFHUVP ; user virtul page from CFH...
CAME I,E.SPGW ; is the sam as E&S rq ?
POPJ P,0 ; no, return
SETOM E.SPGH ; set flag for QSWI1 (read/write/first hack)
PUSHJ P,E.SPG1 ; tie down
SETZM E.SPGW ; clear page wait
PUSHJ P,RDSTART ; restart display
POPJ P,0
POPJ P,0 ; skip return from rdstart if wins

315
src/system/itsmsp.30 Executable file
View File

@@ -0,0 +1,315 @@
;.OPEN CHNL,PNTR1
;PNTR1: MODE,,(SIXBIT /NET/)
; PNTR2
; MYNAME1
; MYNAME2
;PNTR2: HISNAME1
; HISNAME2
; COUNT
; buffer
;MODES=> BITS 3.1== READ FROM ANY
; 3.2== READ FROM SPECIFIC
; 3.3== SEND AND HANG
; 3.4== SEND IMMEDIATE
; 3.5== USE UNAME JNAME AS MY1 AND MY2
; 3.6== USE UNAME AS HIS1
;OPEN FAILURES:
; 4 HIS NAME 1 & HIS NAME 2 WERE ZERO
; 6 TABLE FULL
; 7 ON WRITE, RELOCATION OF READ BUFFER FAILED
; 11 ATTEMPT TO SEND TO SELF
; 12 NOT A LEGAL MODE
; 20 SEND IMMEDIATE, GUY WASN'T THERE
; 22 BUFFER NOT IN YOUR CORE IMAGE
EBLK
MSENTS==40 ;# OF ENTRIES IN THE TABLE
MSUSER: BLOCK MSENTS ;USER INDEX
MSCHNL: BLOCK MSENTS ;USERS CHANNEL
MSBADR: BLOCK MSENTS ;RELATIVE ADDRR OF USER'S BUFR
MSBCNT: BLOCK MSENTS ;SIZE OF USERS BUFFER
MSWRIT: BLOCK MSENTS ;SENDING NAME 1
MSWRT2: BLOCK MSENTS ;SENDING NAME 2
MSREAD: BLOCK MSENTS ;READING NAME 1
MSRED2: BLOCK MSENTS ;READING NAME 2
MSPSW: -1 ;SWITCH FOR MSP VARIABLES
0 ;EXTRA WORD, FOR SWTL ROUTINE
BBLK
IPCO: PUSHJ P,SWTL ;LOCK THE MSP SWITCH
MSPSW
TLNE C,1 ; read from any?
JRST MSRA ; yes
TLNE C,2 ; read from specific?
JRST MSRS ; yes
TLNE C,4 ; send and hang?
JRST MSSH ; yes
TLNE C,8 ; send immediate?
JRST MSSI ; yes
JRST OPNL12 ; none of the above
; read from any (RA) and read from specific (RS)
MSRA: SETOM H ; H/-1 =>RA 0=>RS
SKIPA
MSRS: SETZM H
; find first free user slot
MOVSI W,-MSENTS ; W/ slot index
MSR1: SKIPG MSUSER(W) ; is this slot free?
JRST MSR2 ; yes
AOBJN W,MSR1
JRST OPNL6 ; no free slots, device full
; W/ slot index of a free slot
MSR2: MOVEM U,MSUSER(W) ; occupies this slot
; make sure we have a legal buffer
HRRZ D,A ; relative address of second buffer
MOVEI E,3(D) ; E/ relative address of data area
XCTR XRW,[MOVES (D)] ;CHECK COUNT FETCH?
XCTR XRW,[MOVES TT,2(D)] ;CHECK ACTUAL COUNT PLACE
; bufr ok, now put data in table
MOVEM E,MSBADR(W) ; stores buffer address
MOVEM TT,MSBCNT(W)
; store sender name only if RS
JUMPL H,MSR3
XCTR XR,[MOVE TT,(D)] ; his name 1
XCTR XR,[MOVE I,1(D)] ; his name 2
TLNE C,40 ; his1 = UNAME?
MOVE TT,UNAME(U) ; yes
SKIPA
MSR3: SETZB TT,I ; zero if RA
MOVEM TT,MSWRIT(W)
MOVEM I,MSWRT2(W)
; 3.5 bit in C means use UNAME JNAME as myname1 and myname2
TLNN C,20 ; skips if want default
JRST .+4
MOVE TT,UNAME(U)
MOVE I,JNAME(U)
JRST .+3
; else me1 is in B and me2 is in SRN3(U)
MOVE TT,B
MOVE I,SRN3(U)
MOVEM TT,MSREAD(W)
MOVEM I,MSRED2(W)
MOVEI TT,(R) ;GET CHANNEL
SUBI TT,IOCHNM(U)
MOVEM TT,MSCHNL(W) ;STORE FOR LATER INTERRUPT
PUSHJ P,LSWPOP ;UNLOCK MSP SWITCH
; now put tabl index in lh of IOCHNM(U)(R)
HRLZ A,W
JSP Q,OPSLD1
MSPIO,,MSPIO ; attempted IOT will get IOCER 10.
; send and hang (SH) and send immediate (SI)
MSSI: SETOM H ; H/-1=>SI 0=>SH
SKIPA
MSSH: SETZM H
; validate his buffer specs
HRRZ D,A ; relative buffer address
MOVEI E,3(D) ; E/ relative data addr
XCTR XRW,[MOVES (D)] ;CHECK NAME
XCTR XRW,[MOVES Q,2(D)] ;CHECK COUNT
; other data
; E/ absolute data addr
; Q/ count
XCTR XR,[MOVE T,(D)] ; T/ his name 1
TLNE C,40 ; 3.6 bit means use UNAME
MOVE T,UNAME(U) ; yes
XCTR XR,[MOVE TT,1(D)] ; TT/ his name 2
JUMPN T,.+3 ; T and TT can not both be zero
SKIPN TT
JRST OPNL4
MOVEM TT,EPDL(U) ; EPDL(U)/ hisname2
; 3.5 bit in C means use UNAME JNAME as myname1 and myname2
TLNN C,20 ; skips if wants default
JRST .+4
MOVE TT,UNAME(U)
MOVE I,JNAME(U)
JRST .+3
; else myname1 is in B and myname2 is in SRN(U)
MOVE TT,B
MOVE I,SRN3(U)
MOVEM TT,EPDL3(U) ; EPDL3/ myname1
MOVEM I,SRN4(U) ; SRN4/ myname2
; see if entry is in the table
PUSHJ P,MSSTBL
SKIPA ; no, will havee to wait
JRST MSS2 ; yes, service the transfer
JUMPL H,OPNL20 ; was an SI, lose
MSS1: XCTR XR,[MOVE T,(D)] ; in case it got munged
TLNE C,40 ; 3.6 bit means use UNAME
MOVE T,UNAME(U)
; wait for entry to appear in table
MSDM3: PUSH P,T ;LSWPOP CLOBBERS T
PUSHJ P,LSWPOP ;UNLOCK MSPSW FOR WAITING
MOVE T,(P) ;RESTOR T
SKIPA ; forces a call to ufls
PUSHJ P,MSSTBL
PUSHJ P,UFLS ; hang . . . .
PUSHJ P,SWTL ;RELOCK SWITCH NOW
MSPSW
POP P,T ;RESTORE T AFTER CLOBBERING BY SWTL
PUSHJ P,MSSTBL ; read has been done, get details
JRST MSS1 ; oops, must have been aborted
; FALLS THRU IF MSSTBL SKIPS
; table index of the user is now in T
MSS2: MOVE H,T ; H/ table index
MOVE A,MSUSER(H) ; A/ user index
CAMN A,U
JRST [PUSHJ P,LSWPOP ;POP MSPSW
JRST OPNL11]
PUSHJ P,RPCLSR ; stop or i'll shoot
PUSHJ P,SOSSET ;SET TO SOS USTP(A) ON PCLSR
USTP(A)
; get the absolute address of the read data buffer
MSS3: MOVE A,MSBADR(H) ; relative
;SET UP PAGE MAP FOR RECEIVER (USER IN MSUSER(H))
PUSH P,R
MOVE J,MSUSER(H) ;USER TO RECEIVE
PUSHJ P,MPLDJ ;LOAD MAP
; fix count (sender cnt in Q, receiver cnt in MSBCNT(H))
CAMG Q,MSBCNT(H) ; will it fit?
JRST MSS4 ; yes
XCTRI XRW,[SETOM -1(A)] ; no, indicate overflow will be lost
CAIA ;REFERENCE WORKED, SKIP
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
MOVE B,MSBCNT(H) ; B/ count
JRST MSS5
MSS4: MOVE B,Q ; B/ count
MOVE TT,MSBCNT(H)
SUB TT,B
XCTRI XRW,[MOVEM TT,-1(A)] ; amount that will be xfered
CAIA ;REFERENCE WORKED, SKIP
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
; if MSWRIT was zero (RA), fill it in
MSS5: SKIPN MSWRIT(H)
SKIPE MSWRT2(H)
JRST MSS6
MOVE TT,EPDL3(U)
XCTRI XRW,[MOVEM TT,-3(A)] ; read's him1
CAIA ;REFERENCE WORKED, SKIP
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
MOVE TT,SRN4(U) ;
XCTRI XRW,[MOVEM TT,-2(A)] ; read's him2
CAIA ;REFERENCE WORKED, SKIP
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
; RESTORE USER MAP TO CURRENT USER
MSS6: PUSHJ P,MPLDZ
POP P,R
; XFER => B/ CNT A/READ BUFR E/WRIT BUFR J/UNRELOCATED BUFFER (READ)
HRRM A,IOCHST-IOCHNM(R) ;STORE RECEIVER ADDRESS FOR UBO
MOVN W,B ;-COUNT
MOVSS W ;-COUNT,,
HRR W,E ;-COUNT,,ADR
MOVE C,[SETZ W] ;POINTER FOR UBO
MOVE A,MSUSER(H) ;GET OTHER USERS NUMBER FOR UBO
PUSHJ P,UBO ;USER BLOCK OUTPUT - DO WRITE TRANSFER
; RESTART THE LOSER
PUSHJ P,LSWPOP ;UNDO RPCLSR (SOS USTP(MSUSR(H)))
MOVE A,MSUSER(H) ;GET TARGET USER
MOVE B,MSCHNL(H) ;CHANNEL HE OPENED
MOVE B,CHNBIT(B) ;BIT CORRESPONDING TO CHAN
TDNE B,MSKST2(A) ;SKIP IF NOT ENABLED
IORM B,IFPIR(A) ;SET HIS INTERRUPT
; flush read entry from the table
SETZM MSCHNL(H)
SETZM MSREAD(H)
SETZM MSRED2(H)
SETZM MSWRIT(H)
SETZM MSWRT2(H)
SETZM MSBADR(H)
SETZM MSBCNT(H)
SETZM MSUSER(H)
PUSHJ P,LSWPOP ;UNLOCK MSPSW
; end open
SETOM A ; LH IOCHNM==-1 MEANS SEND (FOR CLOS)
JSP Q,OPSLD1 ;DOES POPJ BACK TO UUOH
MSPIO,,MSPIO
; (DOES NOT COME BACK)
;HERE FOR FAILURE OF XCTRI WHILE MAP SET TO RECEIVER
MSS7: POP P,R ;RESTORE STACK
PUSHJ P,LSWPOP ;RESTART USER (SOS USTP)
PUSHJ P,TPFLT ;TAKE PAGE FAULT, CAUSE PAGE LOAD
PUSHJ P,MPLDZ ;RESTORE MY PAGE MAP
JRST MSS1 ;TRY AGAIN
; FIND LOSER IN TABLE SKIP IF WINS
; IN => T/READ1 EPDL/READ2 EPDL3/WRITE1 SRN4/WRITE2
; OUT => IF WINS, T/TABLE OFFSET
MSSTBL: PUSH P,A
PUSH P,B
PUSH P,C
PUSH P,D
MOVSI A,-MSENTS
MOVE B,EPDL(U) ; B/ READ2
MOVE C,EPDL3(U) ; C/ WRITE1
MOVE D,SRN4(U) ; D/ WRITE2
MSSTB1: CAMN T,MSREAD(A)
CAME B,MSRED2(A)
JRST MSSTB2
SKIPN MSWRIT(A) ; if it was read from any
SKIPE MSWRT2(A) ; win if WRIT and WRT2 are both zero
JRST .+2
JRST MSSTB3
CAMN C,MSWRIT(A)
CAME D,MSWRT2(A)
JRST MSSTB2
MSSTB3: HRRZ T,A
AOSA -4(P)
MSSTB2: AOBJN A,MSSTB1
POP P,D
POP P,C
JRST POPBAJ
; close routine
; A/ lf IOCHNM
; R/ addr of IOCHNM(USER)(CHNL)
MSCLOS: TRNE A,400000 ; -1 means write
POPJ P,
CAIL A,MSENTS ; in bounds of table?
POPJ P, ; no
CAME U,MSUSER(A) ; is this still me?
POPJ P,
; yes, make this a free slot
SETZM MSCHNL(A)
SETZM MSREAD(A)
SETZM MSRED2(A)
SETZM MSWRIT(A)
SETZM MSWRT2(A)
SETZM MSBADR(A)
SETZM MSBCNT(A)
SETZM MSUSER(A)
POPJ P,


63
src/system/kaimp.defs1 Executable file
View File

@@ -0,0 +1,63 @@
;;; -*- Mode: Midas -*-
.AUXIL
;;; Canonical symbol definition macro, FOO==BAR with error check.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [ $$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
$$TEMP==1
] ;IFNDEF DEFSYM
.ELSE, $$TEMP==0
; Hardware description of AI-KA/ML/MC IMP interface, device "IMP".
; For a more detailed description, see AI Hardware Memo #10,
; "ARPA Network Interface".
; In particular, the "channel 1 multiplexing" feature of the ITS KA's
; is used, so that:
; When PI level 2 (NETCHN) is assigned, the IMP interface takes
; all interrupts on the normal channel (goes to IMPINT).
; When PI level 1 (IMPCHN) is assigned,
; IMPID+(-IMPLIW) => Pseudo channel 4, location 70 (IMPILC)-> various
; IMPOD => Pseudo channel 5, location 72 (IMPOLC)-> various
; else normal PI channel 1 (PI0LOC+2)-> IMPBRK
; CONI bits - starred items cause interrupt on PIA channel
; 1.1-1.3 => PIA
DEFSYM IMPID==10 ;* INPUT DONE - on when word avail for DATAI
DEFSYM IMPI32==20 ; Input in 32 bit mode
;DEFSYM IMPIB==40 ; Input Busy
DEFSYM IMPOD==100 ;* OUTPUT DONE - Word sent to IMP
;DEFSYM IMPO32==200 ; Output in 32 bit mode
;DEFSYM IMPOB==400 ; Output Busy
DEFSYM IMPERR==1000 ;* Imp Error (interrupt if IMPIC zero)
DEFSYM IMPR==2000 ;* Imp Ready (interrupt if IMPIC set)
;DEFSYM IMPIC==4000 ; Imp interrupt condition
; (0 = int on IMPERR, 1= int on IMPR)
DEFSYM IMPHER==10000 ;* Host Error (interrupt if IMPIHE zero)
;DEFSYM IMPHR==20000 ; Host Ready
;DEFSYM IMPIHE==40000 ; Inhibit interrupt on Host Error (IMPHER)
DEFSYM IMPLW==100000 ;* Last Imp Word
; CONO bits - starred flags are always copied directly to set states
;* 1.1-1.3 => PIA set from these bits
DEFSYM IMPIDC==10 ; Clear Input Done
DEFSYM IMI32S==20 ; Set input to 32 bit mode
DEFSYM IMI32C==40 ; Clear input in 32 bit mode
DEFSYM IMPODC==100 ; Clear Output Done
DEFSYM IMO32S==200 ; Set output to 32 bit mode
DEFSYM IMO32C==400 ; Clear output in 32 bit mode
DEFSYM IMPODS==1000 ; Set Output Done
DEFSYM IMPIR==4000 ;* Copied to IMPIC; 1= Enable int on imp ready
DEFSYM IMPHEC==10000 ; Clear Host Error
;DEFSYM IMIIHE==40000 ;* Copied to IMPIHE
; 1= Inhibit int on host error
DEFSYM IMPLHW==200000 ; Set Last Host Word
; (do this before last DATAO of msg)
IFN $$TEMP,EXPUNG DEFSYM

561
src/system/ksdefs.193 Executable file
View File

@@ -0,0 +1,561 @@
; -*- Midas -*- This is the file AI:KSHACK;KSDEFS >
;;; "Devices"
PI==:4 ;Interrupts
PAG==:10 ;Paging
..D010==:0 ;(For DDT)
.RD.==:20 ;Read various kludges.
..D020==:0
.WR.==:24 ;Write various kludges.
..D024==:0
;;; XCTR and paging instructions
UMOVE=:704^9 ;"BLKI 40,"
;Same as XCTR XR,[MOVE ...]
UMOVEM=:705^9 ;"BLKI 50,"
;Same as XCTR XW,[MOVEM ...]
XCTR=:103^9 ;XCT with mapping.
XCTRI=:102^9 ;Same, but page fails cause it to skip. Done by
;software as on the KL.
;;XCTR bits for the KS are theoretically the same as those on the KL.
;;These values were generated by reading the documentation rather
;;than by copying the bits for XCTR on MC.
XR==:4
XW==:4
XRW==:4
XBYTE==:7 ;On MC-KL this is 5. The manual don't list 5 as a
;reasonable value at all. The 2 bit causes the EA
;calculation for the byte pointer to take place in
;the user's context. Since ITS does the EA
;calculation for byte pointers it XCTRs ahead of
;time, perhaps it doesn't matter?
XBR==:1
XBW==:4
XBRW==:5
XEA==:10 ; On MC-KL this is #o16. The processor manual for
; the KL contains some waffling about how 10 won't
; work and you should use 14 instead. The KS
; manual is silent on this point. Seemingly no
; bits other than 10 can effect an immediate
; instruction. This option doesn't exist on the KA
; and is used by ITS in only two places, both in
; the KL-specific page fail code. One occurance is
; commented out with the claim that it is buggy.
; For the moment let us assume that this value will
; just work on the KS.
;;; Traditional instructions.
RDAPR==:CONI 0, ;= 700240,, C(E) <- System flags
;4.3 - 3.5 Flags enabled
; (on KL 2.8 says the cache is being swept)
;2.3 - 1.5 Flags set
;1.4 Some flag is interrupting
;1.3 - 1.1 PI level
WRAPR==:CONO 0, ;= 700200,, System flags <- E
; (on KL 2.8 Clears all IO devices)
;2.7 - 2.4 Function to perform on flags:
; 2.7 Enable
; 2.6 Disable
; 2.5 Clear
; 2.4 Set
;2.3 - 1.5 Flags to perform function upon:
; 2.3 "Flag 24"
; 2.2 KS interrupting the 8080
; 2.1 Power failure
; 1.9 No memory
; 1.8 Bad memory data
; 1.7 Corrected memory data
; 1.6 Interval done
; 1.5 8080 interrupting the KS
; (on KL flags are:
; 2.3 S bus error
; 2.2 No memory
; 2.1 IO page failure
; 1.9 MB parity
; 1.8 Cache directory parity
; 1.7 Address parity
; 1.6 Power failure
; 1.5 Cache sweep done)
;1.3 - 1.1 PI level
80INT==:12000 ;Interrupt 8080 from KS.
RDPI==:CONI PI, ;= 700640,, C(E) <- PI status
;3.7 - 3.1 interrupts requested with CONO PI,
; (on KL 2.9 - 2.7 control parity)
;2.6 - 1.9 Interrupt in progress
;1.8 PI system is on
;1.7 - 1.1 Levels turned on
WRPI==:CONO PI, ;= 700600,, PI status <- E
; (on KL 2.9 - 2.7 control parity)
;2.5 Drop requests on selected levels
;2.4 Clear PI system
;2.3 Initiate interrupts on selected levels
;2.2 Turn on selected levels
;2.1 Turn off selected levels
;1.9 Turn off PI system
;1.8 Turn on PI system
;1.7 - 1.1 Select level
;;; More traditional looking instructions, sort of...
APRID==:BLKI 0, ;= 700000,, C(E) <- Processor ID
;4.9 - 4.1 Microcode options:
; 4.5 ITS microcode
; (on KL options are:
; 4.9 Tops-20 Paging
; 4.8 Extended addressing
; 4.7 Exotic microcode
; 4.5 ITS microcode)
;3.9 - 3.1 Microcode version number
;2.9 - 2.7 Hardware options:
; None defined.
; (on KL options are:
; 2.9 50 Hz line frequency
; 2.8 Cache
; 2.7 Channel
; 2.6 Extended KL10
; 2.5 Master Oscillator)
;2.6 - 1.1 Processor serial number
RDEBR=:CONI PAG, ;= 701240,, C(E) <- EBR
WREBR=:CONO PAG, ;= 701200,, EBR <- E
;2.6 Tops-20 style
;2.5 Enable pager (and traps)
;2.2 - 1.1 EBR physical DEC page number
;WREBR resets the cache and page table.
;
; In the ITS microcode setting bit 2.6 only effects
; the style in which MUUOs are trapped. It should
; never be set.
RDUBR=:DATAI PAG, ;= 701040,, C(E) <- UBR
WRUBR=:DATAO PAG, ;= 701140,, UBR <- C(E)
;4.9 Set AC blocks
;4.7 Set UBR
;4.3 - 4.1 Current ACs
;3.9 - 3.7 Previous ACs
;3.2 - 1.1 UBR physical base address
;RDUBR always returns a word with 4.9 and 4.7 set.
;WRUBR resets the cache and page table.
CLRPT=:BLKO PAG, ;= 701100,, Clear page table entry
;Invalidate the page table entry for the page
;referenced by E and reset the cache.
;
;In the ITS microcode this will only invalidate the
;page table entry for half page referenced by E.
CLRCSH=:BLKI PAG, ;= 701000,, Clear Cache
;In the ITS microcode only.
;Resets the cache.
;;; Instructions for maintaining the DBRs. LPMR and SPM.
LDBR1=:BLKI .WR., ;= 702400,, DBR1 <- E
SDBR1=:BLKI .RD., ;= 702000,, C(E) <- DBR1
LDBR2=:DATAI .WR., ;= 702440,, DBR2 <- E
SDBR2=:DATAI .RD., ;= 702040,, C(E) <- DBR2
LDBR3=:BLKO .WR., ;= 702500,, DBR3 <- E
SDBR3=:BLKO .RD., ;= 702100,, C(E) <- DBR3
LDBR4=:DATAO .WR., ;= 702540,, DBR4 <- E
SDBR4=:DATAO .RD., ;= 702140,, C(E) <- DBR4
;LDBR1, LDBR2, LDBR3 and LDBR4 all reset the cache
;and page table. someday they may be careful and
;not reset the half of the page table they don't
;effect.
;;; And there is also the traditional:
LPMR=:CONSO .WR., ;702740,, DBR1, DBR2, ... <- C(E, E+1, ...)
SPM=:CONSO .RD., ;702340,, C(E, E+1, ...) <- DBR1, DBR2, ...
;The format of the block read and written by these
;two instructions is:
; (E) DBR1
; (E+1) DBR2
; (E+2) Quantum timer
; (E+3) U.JPC (If this ucode supports it)
; (E+4) E.JPC ( " " )
;LPMR resets the cache and page table.
RDTIM=:CONO .RD., ;= 702200,, C(E, E+1) <- Time
WRTIM=:CONO .WR., ;= 702600,, Time <- C(E, E+1)
; The time is a 71. bit unsigned number. The bottom
; 12. bits cannot be set. The bottom 2 bits cannot
; even be read. It increments at 4.1 MHz. The top
; 59. bits (the ones you can set) thus measure
; (almost) milliseconds. The top 69. bits (the
; ones you can read) thus measure "short"
; microseconds. The time wraps around every 18.
; million years. To make the top 59. bits actually
; measure milliseconds, the clock would have to run
; at 4.096 MHz. However it -really- -does- run at
; exactly 4.1 MHz!
RDINT=:CONI .RD., ;= 702240,, C(E) <- Interval
WRINT=:CONI .WR., ;= 702640,, Interval <- C(E)
;The interval is a 35. bit number in the same units
;as the time. At the end of every interval the
;interval done interrupt occurs (CONI APR, bit
;1.5). The biggest interval you can set is about 2
;hours and 20 minutes. In the DEC microcode the
;interval is effectively rounded up to the next
;millisecond, so it is really only worth your while
;to set the top 23. bits. In the ITS microcode all
;bits of the interval are signifigant. Although
;the length of a -single- interval cannot be
;controlled more accurately than under the DEC
;microcode, the average time between interval done
;interrupts should converge to the full 35. bit
;value.
RDHSB=:CONSZ .RD., ;= 702300,, C(E) <- HSB base address
WRHSB=:CONSZ .WR., ;= 702700,, HSB base address <- C(E)
;4.9 Base address is invalid. If this is set
; nothing will be written anywhere when the
; machine halts.
;3.1 - 1.1 Physical address of first location in
; which to store debugging info when the
; machine halts.
;In the ITS microcode, the initial HSB base address
; is #o500.
;When the machine halts it stores a halt code in
; physical location 0 and the PC in location 1.
; Then if 4.9 is not set (and the machine has not
; just powered on) the contents of the 2901's
; registers are dumped in the halt status block,
; followed by the VMA.
;;; Halt Codes
;CODES 0 TO 77 ARE "NORMAL" HALTS
; POWER=0 ;POWER UP
; HALT=1 ;HALT INSTRUCTION
; CSL=2 ;CONSOLE HALT
;CODES 100 TO 777 ARE SOFTWARE ERRORS
; IOPF=100 ;I/O PAGE FAIL
; ILLII=101 ;ILLEGAL INTERRUPT INSTRUCTION
; ILLINT=102 ;BAD POINTER TO UNIBUS INTERRUPT VECTOR
;CODES 1000 TO 1777 ARE HARDWARE ERRORS
; BW14=1000 ;ILLEGAL BWRITE FUNCTION (BAD DROM)
; NICOND 5=1004 ;ILLEGAL NICOND DISPATCH
; MULERR=1005 ;VALUE COMPUTED FOR 10**21 WAS WRONG
;;; Halt Status Block definition
IFNDEF HSB, HSB==:500
HSBMAG=:HSB+0
HSBPC=:HSB+1
HSBHR=:HSB+2
HSBAR=:HSB+3
HSBARX=:HSB+4
HSBBR=:HSB+5
HSBBRX=:HSB+6
HSBONE=:HSB+7
HSBEBR=:HSB+10
HSBUBR=:HSB+11
HSBMASK=:HSB+12
HSBFLG=:HSB+13
HSBPI=:HSB+14
HSBXWD1=:HSB+15
HSBT0=:HSB+16
HSBT1=:HSB+17
HSBVMA=:HSB+20
;;; ITS I/O instructions.
UBAQ==:1 ; QSK is on Unibus #1
UBAI==:3 ; Everything else is on Unibus #3
IORDI=:710^9 ; C(AC) <- IO(UBAI,,E)
IORDQ=:711^9 ; C(AC) <- IO(UBAQ,,E)
IORD=:712^9 ; C(AC) <- IO(C(E))
IOWR=:713^9 ; IO(C(E)) <- C(AC)
IOWRI=:714^9 ; IO(UBAI,,E) <- C(AC)
IOWRQ=:715^9 ; IO(UBAQ,,E) <- C(AC)
IORDBI=:720^9
IORDBQ=:721^9
IORDB=:722^9
IOWRB=:723^9
IOWRBI=:724^9
IOWRBQ=:725^9
;;; Byte packing and unpacking instructions.
;;; These are new with microcode 262, but came from DEC.
;;; Variations of BLT that the convert format of each word moved.
;;; These are legal in user mode, too. Good thing DECUUO doesn't use them.
BLTBU=:716^9 ;Source 8-bit bytes, Destination Unibus format
BLTUB=:717^9 ;Source Unibus format, Destination 8-bit bytes
;;; Future byte packing and unpacking instructions
;;; =:730^9
;;; =:731^9
;;; =:732^9
;;; =:733^9
;;; =:734^9
;;; =:735^9
;;; =:736^9
;;; =:737^9
;;; Format of ITS page fail word:
%PF==:1,,525252 ;Left handed bits.
%PFUSR==:400000 ;4.9 Indicates user address space.
%PFNXI==:200000 ;4.8 Nonexistent IO register.
%PFNXM==:100000 ;4.7 Nonexistent memory.
%PFPAR==:040000 ;4.6 Uncorrectable memory error.
; (AC0 in block 7 has the word unless 4.7 is
; also set.)
;4.5
%PFWRT==:010000 ;4.4 Soft fault reference called for writing.
%PF2.9==:004000 ;4.3 - 4.2 Access bits for referenced page in soft
%PF2.8==:002000 ; fault.
%PFPHY==:001000 ;4.1 Address given was physical.
;3.9
%PFIO==:000200 ;3.8 Indicates an IO operation.
;3.7
;3.6
%PFBYT==:000020 ;3.5 Indicates a byte IO operation.
;3.4 - 1.1 IO address
; or
;3.1 - 1.1 Memory address
$PFPNO==:121000 ;2.9 - 2.2 Virtual page number
;;; Format of ITS page table entry:
;2.9 - 2.8 Access bits
; 00 Inaccessible
; 01 Read only
; 10 Read/Write/First
; 11 Read/Write
PMAGEM==:020000 ;2.5 Age bit
PMCSHM==:010000 ;2.4 Cache enable bit
PMRCM==:001777 ;2.1 - 1.1 Physical page number
; (The page table supports 20 bit physical
; addresses.)
PMUNSD==:146000 ;Unused bits
;;; UPT Offsets
;;; In non-time sharing and at clock level in ITS UPT=EPT.
UPTTR1==:421 ;Exec mode arith ovfl trap.
UPTTR2==:422 ;Exec mode pdl ov trap.
UPTTR3==:423 ;Exec mode trap 3 in non-one-proceed microcode.
UPTUUO==:424 ;MUUO stored here.
UPTUPC==:425 ;MUUO old PC stored here.
UPTUCX==:426 ;MUUO context (from RDUBR (= DATAI PAG,)) stored here.
;;; 427 ;Unused.
UPTUEN==:430 ;MUUO new PC obtained from here in exec mode when
;traps are not enabled. (MUUO as a trap
;instruction for example.)
UPTUET==:431 ;MUUO new PC obtained from here in exec mode when
;traps are enabled.
UPT1PO==:432 ;One-proceed old PC stored here in one-proceed
;microcode.
UPT1PN==:433 ;One-proceed new PC obtained from here in
;one-proceed microcode.
UPTUUN==:434 ;MUUO new PC obtained from here in user mode when
;traps are not enabled.
UPTUUT==:435 ;MUUO new PC obtained from here in user mode when
;traps are enabled.
;;; 436 ;Unused.
;;; 437 ;Unused.
;;; EPT Locations
IFNDEF EPT, EPT==:0 ;Absolute location of EPT.
PI0LOC=:EPT+40 ;PI0LOC+2*PICHN = Address of instr pair for PICHN.
IRP I,,[1,2,3,4,5,6,7]
PI!I!LOC=:PI0LOC+<2*I>
TERMIN
EPTUIT=:EPT+100 ;EPTUIT+I contains address of the interrupt table
; for unibus adapter I. Only adapters 1 and 3 ever
; exist.
EPTTR1=:EPT+421 ;Exec mode arith ovfl trap.
EPTTR2=:EPT+422 ;Exec mode pdl ov trap.
EPTTR3=:EPT+423 ;Exec mode trap 3 (1 proceed?).
;;; When EPT = UPT the following are useful to have defined:
EPTUUO=:EPT+UPTUUO
EPTUPC=:EPT+UPTUPC
EPTUCX=:EPT+UPTUCX
EPTUEN=:EPT+UPTUEN
EPTUET=:EPT+UPTUET
EPT1PO=:EPT+UPT1PO
EPT1PN=:EPT+UPT1PN
EPTUUN=:EPT+UPTUUN
EPTUUT=:EPT+UPTUUT
;;; In the ITS microcode the three words used to deliver a page fail are
;;; determined from the current interrupt level. At level I, the page fail
;;; word is stored in EPTPFW+<3*I>, the old PC is stored in EPTPFO+<3*I>,
;;; and the new PC is obtained from EPTPFN+<3*I>. If no interrupts are in
;;; progress we just use EPTPFW, EPTPFO and EPTPFN.
EPTPFW=:EPT+440 ;Page fail word stored here.
EPTPFO=:EPT+441 ;Page fail old PC stored here.
EPTPFN=:EPT+442 ;Page fail new PC obtained from here.
IRP I,,[1,2,3,4,5,6,7]
EPTP!I!W=:EPTPFW+<3*I>
EPTP!I!O=:EPTPFO+<3*I>
EPTP!I!N=:EPTPFN+<3*I>
TERMIN
;;; 8080 communication area
8SWIT0=:30 ;Simulated switch 0. Set by 8080 SH command.
8KALIV=:31 ;Keep Alive & Status.
8CTYIN=:32 ;CTY input.
8CTYOT=:33 ;CTY output.
8KLKIN=:34 ;KLINIK user input word (from 8080).
8KLKOT=:35 ;KLINIK user output word (to 8080).
8RHBAS=:36 ;BOOT RH11 base address.
8QNUM=:37 ;BOOT Unit Number.
8BOOTP=:40 ;Magtape Boot Format and Slave Number.
;;; 8080 front end (FE) filesystem format
;;; Disk addresses for the 8080 are stored in 36-bit words in "FE format":
;;; (These fields are larger than those given in the DEC document because
;;; the cylinder field given there is too small! These numbers reflect the
;;; way that the 8080 manipulates 8 bit quantities instead.)
%88==:777700,,177400
%88CYL==:100,,
$88CYL==:301400,, ; 4.9 - 3.7 Cylinder
%88TRK==:400
$88TRK==:101000,, ; 2.7 - 1.9 Track
%88SEC==:1
$88SEC==:001000,, ; 1.8 - 1.1 Sector
;;; The 8080 looks for the "home sector" on cylinder 0, track 0, sector 1.
;;; If it fails to find it there it tries sector 10. The home sector is
;;; recognized by having SIXBIT /HOM/ in location 0. Location 103 of the
;;; home sector contains an FE format address of the first sector of the
;;; "FE directory", which is 1000 words (4 sectors) long. Odd numbered
;;; locations in the FE directory are not looked at by the 8080. Even
;;; numbered locations contain FE format addresses of the first sector of
;;; the various "FE files". The following are apparently the only FE files
;;; used by the 8080:
88RAM==:2 ; Microcode. Always 6 blocks long.
; The rest are always 1000 words long. (1/2 block)
88BT==:4 ; Bootstrap used by BT command and autoboot.
88BT1==:6 ; Bootstrap used by BT1 command.
88B2==:12 ; Bootstrap used by B2 command.
88FI0==:22 ; First indirect file. Contains a sequence of
; 8-bit bytes containing ASCII characters packed
; backwards and right justified:
; -------------------------------
; | 0's | 4th | 3rd | 2nd | 1st |
; -------------------------------
; The 8080 stops on a zero byte (or perhaps 377?).
; Lines must be no longer than 80 characters.
; Lines are separated by a single ^M.
;
; Additional indirect files follow. FIn either
; runs the file at 88FI0+n or at 88FI0+2*n, I can't
; tell which.
;;; Note that the only thing described here that doesn't fit inside a
;;; single ITS block is the microcode. All we need from the filesystem are
;;; the first 2 blocks (for the home sector and the alternate home sectors)
;;; and 6 contiguous blocks elsewhere (for the microcode).
;;; External register addresses
KSECCS==:100000 ;Memory Status Register (Controller 0)
%KE==:1,,520040 ; Left half bits. Right half unnamed.
; [R=Read, W=Write, C=Cleared by writing a 1]
%KEHLD==:400000 ; 4.9 Error currently being held [R/C]
%KEUNC==:200000 ; 4.8 Uncorrectable error [R]
%KEREF==:100000 ; 4.7 Refresh error [R/C]
%KEPAR==:040000 ; 4.6 Parity error [R/W]
%KEENA==:020000 ; 4.5 ECC enabled [R]
%KEECC==:017700 ; 4.4 - 3.7 ECC bits [R]
%KEPWR==:000040 ; 3.6 Memory backup power is low [R/C]
; 3.4 - 1.1 Error address [R]
; 1.8 - 1.2 Force ECC bits if non-zero [W]
; 1.1 Disable ECC [W]
;; The 7 ECC bits are decoded as follows: The top bit is a parity bit for
;; the bottom 6. The bottom 6 are decoded:
;;
;; ECC code: Location of failing bit:
;;
;; 01 ECC 01 bit
;; 02 ECC 02 bit
;; 04 ECC 04 bit
;; 10 ECC 10 bit
;; 20 ECC 20 bit
;; 40 ECC 40 bit
;; 11 - 16 4.9 - 4.4
;; 21 - 26 4.3 - 3.7
;; 31 - 36 3.6 - 3.1
;; 41 - 46 2.9 - 2.4
;; 51 - 56 2.3 - 1.7
;; 61 - 66 1.6 - 1.1
UBAPAG==:763000 ;(to 763077) UBA Paging RAM (One per Unibus)
UBALEN==:64. ;Length of UBA Paging RAM
;When read:
%UP==:1,,525377 ; Left half bits.
%UPPAR==:020000 ; 4.5 RAM parity bit
%UPRPW==:010000 ; 4.4 Force read-pause-write
%UP16B==:004000 ; 4.3 Disable upper two bits on Unibus transfers
%UPFST==:002000 ; 4.2 Fast mode enable
%UPVAL==:001000 ; 4.1 Entry is valid
%UPPVL==:000400 ; 3.9 Parity is valid
$UPPAG==:121200,, ; 3.2 - 2.2 ITS page number
; 2.1 ITS half page
; 3.2 - 2.1 DEC page number
;When written:
%UQ==:0,,537777 ; Right half bits
%UQRPW==:400000 ; 2.9 Force read-pause-write
%UQ16B==:200000 ; 2.8 Disable upper two bits on Unibus transfers
%UQFST==:100000 ; 2.7 Fast mode enable
%UQVAL==:040000 ; 2.6 Entry is valid
; 2.2 - 1.2 ITS page number
; 1.1 ITS half page
; 2.2 - 1.1 DEC page number
UBASTA==:763100 ;UBA Status Register (One per Unibus)
; [R=Read, W=Write, C=Cleared by writing a 1,
; *=Cleared by any write]
%UB==:0,,525270 ; Right half bits.
%UBTIM==:400000 ; 2.9 Unibus timeout [R/C]
%UBBAD==:200000 ; 2.8 Bad mem data (on NPR transfer) [R/C]
; (Master will timeout instead if %UBDXF set)
%UBPAR==:100000 ; 2.7 KS10 bus parity error [R/C]
%UBNXD==:040000 ; 2.6 CPU addressed non-ex device [R/C]
%UBHIG==:004000 ; 2.3 Interrupt request on BR7 or BR6 (high) [R]
%UBLOW==:002000 ; 2.2 Interrupt request on BR5 or BR4 (low) [R]
%UBPWR==:001000 ; 2.1 Power low [R/*]
%UBDXF==:000200 ; 1.8 Disable tranfer on uncorrectable data [R/W]
%UBINI==:000100 ; 1.7 Issue Unibus init [W]
%UBPIH==:000070 ; 1.6 - 1.4 PI level for BR7 or BR6 (high) [R/W]
%UBPIL==:000007 ; 1.3 - 1.1 PI level for BR5 or BR4 (low) [R/W]
UBAMNT==:763101 ;UBA Maintenance (One per Unibus)
; 1.2 Spare maintenance bit (?)
; 1.1 Change NPR address (?)

58
src/system/ksnet.1 Executable file
View File

@@ -0,0 +1,58 @@
;;; Chaosnet interface on Unibus
CAICSR=3,,764140 ;COMMAND STATUS REG
CH%CSR==0
%CABSY==1 ;0 XMT BUSY (RO)
%CALUP==2 ;1 LOOP BACK (R/W)
%CASPY==4 ;2 RECIEVE MSGS FOR ANY DESTINATION (R/W)
%CARCL==10 ;3 CLEAR THE RECEIVER, IT CAN NOW GOBBLE ANOTHER MSG (WO)
%CAREN==20 ;4 RCV INT ENB (R/W)
%CATEN==40 ;5 XMT INT ENB (R/W)
%CATAB==100 ;6 TRANSMIT ABORTED BY ETHER CONFLICT (RO)
%CATDN==200 ;7 TRANSMIT DONE. SET WHEN TRANSMITTER IS DONE
%CATCL==400 ;8 CLEAR THE TRANSMITTER, MAKING IT READY (WO)
$CALOS==110400 ;9-12 LOST COUNT (RO) [# MSGS RCVED WITH RCV BFR FULL]
; WHEN MSG IS WAITING IN BUFFER, THIS COUNTS
; THE MESSAGES THAT MATCHED OUR DESTINATION OR
; WERE BROADCAST, BUT COULDN'T BE RECIEVED.
; WHEN RECEIVER IS RE-ENABLED (WRITE 1 INTO %CARDN)
; THE COUNT IS THEN CLEARED.
; WHEN A MESSAGE IS LOST, RECEIVER ZAPS ETHER
; SO TRANSMITTER WILL ABORT (IF MESSAGE WAS DESTINED
; TO US.)
%CARST==20000 ;13 I/O RESET (WO)
%CAERR==40000 ;14 CRC ERROR (RO)
%CARDN==100000 ;15 RCV DONE.
CAIMYN==3,,764142 ;MY # (READ ONLY)
CH%MYN==2 ;RETURNS THE [SOURCE] HOST# OF THIS INTERFACE.
CAIWBF=3,,764142 ;WRITE BUFFER (WRITE ONLY)
CH%WBF==2 ;FIRST WAIT FOR TDONE. (OR SET IT VIA CSR)
;FIRST WORD IN RESETS TRANSMITTER AND CLEARS TDONE.
;STORE INTO THIS REGISTER TO WRITE WORDS OF MESSAGE,
;LAST WORD IN IS DESTINATION ADDRESS, THEN READ CAIXMT.
;SOURCE ADDRESS AND CHECK WORD PUT IN BY HARDWARE.
CAIRBF=3,,764144 ;READ BUFFER (READ ONLY)
CH%RBF==4 ;THE FIRST WORD READ WILL BE FILLED TO THE LEFT
;TO MAKE THE MESSAGE RECIEVED A MULTIPLE OF 16 BITS.
;IF THE NUMBER OF DATA BITS IN THE MESSAGE WAS A
;MULTIPLE OF 16, THIS WORD WILL BE THE FIRST WORD PUT
;INTO THE BUFFER BY THE TRANSMITTING HOST.
;THE LAST 3 WORDS READ ARE DESTINATION, SOURCE, CHECK.
CAIRBC=3,,764146 ;RECEIVE BIT COUNTER (READ ONLY)
CH%RBC==6 ;WHEN A MESSAGE HAS BEEN RECEIVED THIS IS ONE LESS THAN
;THE NUMBER OF BITS IN THE MESSAGE (16 X THE
;NUMBER OF WORDS INCLUDING THE THREE OVERHEAD WORDS.)
;AFTER THE LAST WORD (THE CRC WORD) HAS BEEN READ, IT IS 7777
;BITS 10 AND 11 ARE THE HIGH ORDER BITS, AND IF THEY ARE ONE,
;THEN THERE WAS A BUFFER OVERFLOW
CAIXMT=3,,764152 ;READING THIS INITIATES TRANSMISSION (!!)
CH%XMT==12 ;THE VALUE READ IS ONE'S OWN HOST#.
;REFERENCING ADDRESSES IN THE GROUP OF 8 WORDS NOT LISTED HERE, OR
;USING COMBINATIONS OF READ/WRITE NOT LISTED HERE, WILL TYPICALLY CAUSE
;STRANGE AND BIZARRE EFFECTS.

80
src/system/lhdh.defs5 Executable file
View File

@@ -0,0 +1,80 @@
;;; -*- Mode: Midas -*-
.AUXIL
;;; Canonical symbol definition macro, FOO==BAR with error check.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [ $$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
$$TEMP==1
] ;IFNDEF DEFSYM
.ELSE, $$TEMP==0
; The ACC IMP interface on the KS implements two separate Unibus IO
; devices, for input and output. Both of these devices transfer data in
; 32-bit mode only over the Unibus via DMA. Because of the DMA data
; transfer the interrupt structure is trivial, and uses NETCHN only.
;
; Apparently the reset bits in the two CSRs are wired together, so
; resetting one side of the machine resets both. This action also drops
; the HOST READY line to the IMP.
;
; You must set %LHSE whenever hte HOST READY line is high, or the IMP
; will be allowed to freely throw away data. This is true across IMP
; message boundaries, and even if no input request is active.
;
;ACC LH-DH IMP Interface Bits
;Interrupt information
DEFSYM %LHVEC==250 ;Input side interrupt vector (non-standard)
;Output side assumed to be %LHVEC+4
DEFSYM %LHPRI==6 ;Interrupt priority (non-standard)
DEFSYM %LHBAS==767600 ;Base of LH/DH Unibus register address space
;Unibus Registers
DEFSYM %LHICS=:%LHBAS ;Control and Status, Input side
DEFSYM %LHIDB=:%LHBAS+2 ;Data Buffer, Input
DEFSYM %LHICA=:%LHBAS+4 ;Current Word Address, Input
DEFSYM %LHIWC=:%LHBAS+6 ;Word Count, Input
DEFSYM %LHOCS=:%LHBAS+10 ;Control and Status, Output side
DEFSYM %LHODB=:%LHBAS+12 ;Data Buffer, Output
DEFSYM %LHOCA=:%LHBAS+14 ;Current Word Address, Output
DEFSYM %LHOWC=:%LHBAS+16 ;Word Count, Output
;Bits in CSRs
; Bits common to input and output
DEFSYM %LHERR==1_15. ;Error present
DEFSYM %LHNXM==1_14. ;Non Existant Memory on DMA
DEFSYM %LHMRE==1_9. ;Master Ready Error (ready bounce during xfr)
DEFSYM %LHRDY==1_7. ;Device Ready (modifying LHDH regs allowed)
DEFSYM %LHIE==1_6. ;Interrupt Enable
DEFSYM %LHA17==1_5. ;Address bit 17 for extended unibus xfrs
DEFSYM %LHA16==1_4. ;Address bit 16 for extended unibus xfrs
DEFSYM %LHRST==1_1. ;Interface Reset
DEFSYM %LHGO==1 ;GO - Start DMA Transfer
; Input side
DEFSYM %LHEOM==1_13. ;End-of-Message received from IMP
DEFSYM %LHHR==1_11. ;Host Ready (ACC's relay closed, debounced)
DEFSYM %LHINR==1_10. ;IMP not ready
DEFSYM %LHIBF==1_8. ;Input Buffer Full
DEFSYM %LHSE==1_3. ;Store Enable (0 == flush data instead)
DEFSYM %LHHRC==1_2. ;Host Ready Relay Control (1 to close relay)
; Output side
DEFSYM %LHWC0==1_13. ;Output Word Count is zero
DEFSYM %LHOBE==1_8. ;Output Buffer Empty
DEFSYM %LHBB==1_3. ;Bus Back (loopback enable for testing)
DEFSYM %LHELB==1_2. ;Send EOM indication to IMP at end of xfr
; (enable Last Bit Flag)
IFN $$TEMP,EXPUNG DEFSYM

1461
src/system/mtape.197 Executable file

File diff suppressed because it is too large Load Diff

2761
src/system/ncp.9 Executable file

File diff suppressed because it is too large Load Diff

501
src/system/net.32 Executable file
View File

@@ -0,0 +1,501 @@
;; For ITS network stuff, the following parameters are defined:
;
; NETP - General network code (net independent, both CHAOS, NCP, TCP, etc)
; INETP - Internet Protocol code. Must have IMPP or some other device.
; NCPP - Include NCP code (IMPP must be on)
; TCPP - Include TCP code (INETP must be on)
; CHAOSP - Include CHAOS net code
; - other CHAOS stuff, all independent of internet stuff.
NE%UNT==:<1_32.> ; Escape bit indicating non-Internet address
NW$BYT==:301400 ; Byte pointer to network number (approx!)
NE%STR==:<1_33.> ; Escape bit indicating string-type address
DEFINE HOSTN A,B,C,D
.RADIX 10.,<<<<<A_8>+B>_8>+C>_8>+D,!TERMIN
; HOSTS3 full word network # values for certain networks
NW%CHS==:<NE%UNT+<7_24.>>
NW%ARP==:<12_24.>
NW%LCS==:<22_24.>
NW%AI==:HOSTN 128,52,0,0
DEFINE GETNET AC,(ADDR) ; Macro to extract net number
IFNB [ADDR] MOVE AC,ADDR
TLNN AC,(17_32.) ; Check for non-Internet type addrs
TLNN AC,(1_31.) ; Internet address, see if class A net
TDZA AC,[77,,-1] ; Unternet or class A, zap low 3 octets
TLNN AC,(1_30.) ; Class B or C, see which.
TRZA AC,177777 ; Class B network, zap low 2 octets
TRZ AC,377 ; Class C net, only zap 1 low octet
TERMIN
;;; Misc defs
CALL==<PUSHJ P,>
RET==<POPJ P,>
CALRET==<JRST>
OVHMTR NET
IFN IMPP,[ ; ARPAnet IMP interface code
IFN KAIMP,[
$INSRT IMPOLD
]
IFN KSIMP,[
$INSRT IMP
]
]
OVHMTR NET
IFN NCPP,[ ; Old Arpanet NCP protocol code
$INSRT NCP
]
OVHMTR NET
IFN INETP,[ ; Internet Protocol code
$INSRT INET
]
OVHMTR NET
IFN TCPP,[ ; Transmission Control Protocol code
$INSRT TCP
]
OVHMTR UUO
IFN CHAOSP,[ ; CHAOSnet interface and protocol code
$INSRT CHAOS
]
OVHMTR UUO
SUBTTL General Network System Calls
; .CALL NETRFC - Get a pending Request For Connection for a specific network
; Arg 1 - SIXBIT name of network
; Arg 2 - optional network-dependent arg
; (for CHAOS, points to packet buffer)
; Val 1 - network-dependent value
; For TCP and ARPNCP, this is <id>,,<port/socket #>
; Control bits:
%NQREF==:1 ; Arg 2 is previously returned identifier,
; refuse connection and flush from queue.
NETRFC: MOVE C,CTLBTS(U) ; Set up control bits in C
IFN TCPP,[
CAMN A,[SIXBIT /TCP/]
JRST TCPRQ
]
IFN CHAOSP,[
CAMN A,[SIXBIT /CHAOS/]
JRST [ TRNE C,%NQREF ; If refusing conn,
JRST OPNL12 ; Ignore, can't handle yet. "Mode not avail"
CAIGE W,2 ; Must have a 2nd arg
JRST OPNL30 ; "Too few args"
MOVE A,B ; Fake out old CHAOSQ call
JRST CHAOSQ]
]
IFN NCPP,[ ; NOP for now
; CAMN A,[SIXBIT /ARPNCP/]
; JRST IMPRQ
]
JRST OPNL33 ; No match, say "meaningless args".
; .CALL NETBLK - Wait for net channel state to change, or time out.
; Arg 1 - Channel (comes in R)
; Arg 2 - Undesired state
; Arg 3 - Optional timeout (as in .SLEEP), written back unless immediate
; Val 1 - New state
; Val 2 - Time left
NETBLK: HRRZ T,(R) ; Get IOCHNM RH = device index
HLRZ I,(R) ; Get LH = often connection index
IFN NCPP,[
CAIL T,NETDUI
CAILE T,NETDBO
CAIA
JRST [MOVE T,[HRRZ A,IMSOC4]
JRST NETBLI]
] ;NCPP
IFN CHAOSP,[
CAIE T,CHAIDN
CAIN T,CHAODN
JRST [MOVE T,[HRRZ A,CHSSTA]
JRST NETBLI]
] ;CHAOSP
IFN TCPP,[
CAIN T,TCPDUI
JRST [ MOVE T,[HLRZ A,XBSTAU]
JRST NETBLI]
CAIN T,TCPDUO
JRST [ MOVE T,[HRRZ A,XBSTAU]
JRST NETBLI]
] ;TCP
JRST OPNL34 ; Not a net chan, say "Wrong Type Device".
; T/ Instruction to XCT (not indexed) to get state in A
; Entry at NETBLI adds (I) to the instruction.
NETBLI: ADDI T,(I) ; Provide "index" for instruction.
NETBL0: CAIGE W,3
JRST [ HRLOI D,377777 ; No time given, use infinity
JRST NETBL4 ]
TLNE C,1000 ; Skip if pointer rather than immediate
JRST [ HRRZ D,C ; Get immediate time
ADD D,TIME
JRST NETBL4 ]
XCTR XRW,[MOVES D,(C)] ; Get time, check writeability
JUMPGE D,[ MOVNS D ; Relative time, make negative absolute
SUB D,TIME
JRST .+1 ]
UMOVEM D,(C) ; Store back absolute time
MOVNS D ; Make positive
NETBL4: MOVEM D,AC0S+D(U) ; Save absolute time to wait until
MOVEM B,AC0S+B(U) ; Save undesired state
PUSHJ P,NETBL2 ; Skip if state change or timeout
PUSHJ P,UFLS
MOVE B,D
SUB B,TIME ; How much used?
XCT T ; Return new state
JRST POPJ1
NETBL2: XCT T ; Get current state
CAME A,AC0S+B(U) ; Skip if still match
JRST POPJ1
MOVE A,AC0S+D(U) ; Timeout time
CAMG A,TIME
AOS (P)
POPJ P,
SUBTTL Utilities - CVTH2A, CVTH3A
; CVH2NA - Convert network host address in A to HOSTS2 format.
; A/ net address (any format)
; Returns A
CVH2NA: PUSH P,B
LDB B,[301400,,A] ; Get high 12 bits of net address
CAIGE B,70 ; If less than lowest HOSTS2-fmt value
JUMPN B,CVH2N3 ; then must be HOSTS3, go convert.
CAIL B,1000 ; If any of high 3 bits set,
JRST CVH2N3 ; then it's a HOSTS3 strange-fmt number.
JUMPN B,CVH2N2
CAILE A,377 ; Zero network, so must be ARPA net
JRST CVH2N1 ; Not just 8 bits, just add net number.
; Old-style 8-bit Arpanet host number
LSHC A,-6.
ROT B,6.
DPB B,[112000,,A]
CVH2N1: TLO A,(12_33)
JRST POPBJ
; Probably HOSTS2 format number
CVH2N2: JRST POPBJ ; For now, that's good enough.
; HOSTS3 format number, convert it.
CVH2N3: CAIN B,12 ; Arpa net?
JRST [ LSHC A,-16.
ANDI A,377
ROT B,16.
DPB B,[112000,,A]
TLO A,(12_33)
JRST POPBJ]
CAIN B,7+<NE%UNT_-24.> ; Chaos net?
JRST [ ANDI A,177777 ; Yup, fix it up.
TLO A,(7_33)
JRST POPBJ]
CAIN B,22 ; LCS net?
JRST [ LSHC A,-8.
ANDI A,-1
LSH A,2
LSHC A,8.
TLO A,(22_33)
JRST POPBJ]
; Not a known net, but try to do something plausible.
ANDCM A,[-1_24.] ; Preserve low 24 bits
DPB B,[331100,,A] ; put net # into HOSTS2 field.
POP P,B
RET
; CVH3NA - Convert network host address in A to HOSTS3 (Internet) format.
; A/ net address (any format)
; Returns A
CVH3NA: PUSH P,B
LDB B,[301400,,A] ; Get high 12 bits of net address
CAIGE B,70 ; If less than lowest HOSTS2 value,
JUMPN B,CVH3N3 ; it's already HOSTS3 format! (unless zero)
CAIL B,1000 ; If any of high 3 bits were set,
JRST CVH3N3 ; it must be a HOSTS3 strange-fmt addr.
JUMPN B,CVH3N2 ; If not zero, then must assume HOSTS2 fmt.
; Old-format 8-bit Arpanet host number, or HOSTS2 with zero net.
CAILE A,377
JRST CVH3N6 ; If greater than 8 bits, assume HOSTS2, zero net.
LSHC A,-6 ; Put 10 bits spacing between host/imp #s.
LSH B,-<2+8.>
LSHC A,<2+8.+6>
TLO A,(12_24.) ; and add ARPA network number.
JRST CVH3N3
; HOSTS2 format number
CVH3N2: TRZE B,7 ; Zap low 3 bits to ensure correct comparison
JRST CVH3N5 ; If any were set, can't be Chaosnet.
CAIN B,7_3 ; Chaos net?
JRST [ ANDI A,177777 ; Yes, kill all but bottom 16 bits
TLO A,(NE%UNT+<7_24.>) ; Add Chaos net #
JRST CVH3N3]
CVH3N5: CAIN B,12_3 ; Arpa net?
CVH3N6: JRST [ LSHC A,-9.
ANDI A,177777
ROT B,9.
DPB B,[201000,,A]
TLO A,(12_24.)
JRST CVH3N3]
CAIN B,22_3 ; LCS net?
JRST [ LSHC A,-8.
LSH A,-2
ANDI A,377
LSHC A,-8.
TLO A,(22_24.)
JRST CVH3N3]
; No match, assume it's HOSTS3.
CVH3N3: POP P,B
RET
;.CALL STYNET
;ARG 1 - STY CHANNEL
;ARG 2 - NET INPUT CHANNEL TO CONNECT STY OUTPUT TO, OR -1 TO DISCONNECT
;ARG 3 - NET OUTPUT CHANNEL TO CONNECT STY INPUT TO
;ARG 4 - CHARS TO SEND WHEN OUTPUT .RESET HAPPENS ON STY'S TTY
; UP TO 3 8-BIT CHARACTERS, LEFT JUSTIFIED.
NSTYNT: TLNN R,%CLSST
JRST OPNL34 ;1ST ARG NOT A STY CHANNEL.
HLRZ I,(R) ;GET TTY # OF STY
HRRES B ;ALLOW IMMEDIATE -1
JUMPGE B,NSTYN2 ;JUMP IF CONNECTING.
PUSHJ P,NSTYN0 ;DISCONNECT
JRST OPNL41 ;WASN'T CONNECTED
JRST POPJ1
;VARIOUS ROUTINES CALL HERE WITH THE TTY# OF A STY IN I, TO DISCONNECT THE
; STY FROM THE NETWORK. NOTE THIS ROUTINE MUST NOT CHANGE U AND MUST NOT
; LSWCLR, SINCE IT COULD BE CALLED FROM IODCL VIA STYCLS OR NETCLS.
NSTYN0: MOVSI B,%SSNET ;DISCONNECTING BOTH SIDES.
CONO PI,NETOFF
TDNN B,STYSTS-NFSTTY(I)
POPJ P, ;THIS STY NOT CONNECTED?
ANDCAB B,STYSTS-NFSTTY(I) ;MARK AS NO LONGER CONNECTED
MOVE C,STYNTL-NFSTTY(I) ;REMOVE THIS STY FROM ACTIVATION LIST
MOVEI D,STYNTA-STYNTL+NFSTTY
NSTYN1: CAMN I,STYNTL-NFSTTY(D) ;FIND THE STY THAT POINTS TO THIS ONE,
MOVEM C,STYNTL-NFSTTY(D) ;AND PATCH US OUT OF THE LIST.
SKIPE D,STYNTL-NFSTTY(D) ;SEARCH WHOLE LIST TILL FIND WHO POINTS TO US.
JRST NSTYN1
SETOB C,STYNTL-NFSTTY(I)
EXCH C,STYNTI-NFSTTY(I) ;MARK THIS STY AS HAVING NO CONNECTION, GET SOCKET INDICES
IFN CHAOSP,[
TLNE B,%SSCHA
JRST [ MOVSI B,%SSCHA ;DISCONNECT FROM CHAOS NET
ANDCAM B,STYSTS-NFSTTY(I)
MOVSI B,%CFSTY
TDNN B,CHSSTA(C)
JRST 4,. ;CHAOS DOESN'T THINK IT WAS CONNECTED?
ANDCAM B,CHSSTA(C)
JRST NETOJ1 ]
];CHAOSP
IFN TCPP,[
TLNE B,%SSTCP
JRST [ MOVSI B,%SSTCP ; Disconnect from TCP connection
ANDCAM B,STYSTS-NFSTTY(I) ; Flush STY's "connect" bit
MOVSI B,(XB%STY)
TDNN B,XBUSER(C) ; Make sure TCP thinks connected
BUG ; It isn't??
ANDCAM B,XBUSER(C)
JRST NETOJ1]
] ;TCPP
IFN NCPP,[
MOVE B,[40000,,777]
TDNN B,IMSOC5(C)
JRST 4,. ;SOCKET DOESN'T THINK IT WAS CONNECTED?
ANDCAM B,IMSOC5(C) ;AND MARK SOCKETS WE WERE CONNECTED TO AS DISCONNECTED
MOVSS C
TDNN B,IMSOC5(C)
JRST 4,. ;SOCKET DOESN'T THINK IT WAS CONNECTED?
ANDCAM B,IMSOC5(C)
JRST NETOJ1
] ;NCPP
.ELSE BUG
; Here to set up STY connection.
NSTYN2: MOVE Q,I ;SAVE TTY # OF STY
MOVEI E,1
MOVE A,B ;DECODE THE NETWORK INPUT CHANNEL
JSP T,CHNDCD
HRRZ A,(R)
IFN CHAOSP,[
CAIE A,CHAIDN
CAIN A,CHAODN
JRST [ HLRZ I,(R) ;CONNECT TO CHAOS NET
CONO PI,NETOFF
MOVSI B,%CFSTY
TDNE B,CHSSTA(I)
JRST OPNL23 ;ALREADY CONNECTED, FILE LOCKED
MOVSI C,%SSNET+%SSCHA
TDNE C,STYSTS-NFSTTY(Q)
JRST OPNL23 ;ALREADY CONNECTED, FILE LOCKED
IORM B,CHSSTA(I) ;OK, HOOK UP
DPB Q,[$CFTTN,,CHSSTA(I)]
JRST NSTYN3 ]
];CHAOSP
IFN TCPP,[
CAIE A,TCPDUI
CAIN A,TCPDUO
JRST [HLRZ I,(R) ; Connect to TCP, get TCB index
CONO PI,NETOFF
MOVSI B,(XB%STY)
TDNE B,XBUSER(I)
JRST OPNL23 ; TCB Already connected, say "File Locked"
MOVSI C,%SSNET+%SSTCP
TDNE C,STYSTS-NFSTTY(Q)
JRST OPNL23 ; STY already connected, say "File Locked"
DPB Q,[XB$STY (I)] ; Store TTY # to connect TCB.
JRST NSTYN3]
] ;TCPP
IFN NCPP,[
JSP T,NETCHK ;TEST LEGALITY; OPNL IF LOSES
TDNE E,IMSOC2(I)
JRST OPNL2 ;WRONG DIRECTION IF IT'S AN OUTPUT CHANNEL
MOVE B,I ;SAVE INPUT IMSOC INDEX
MOVE A,C ;DECODE OUTPUT CHANNEL
JSP T,CHNDCD
JSP T,NETCHK
TDNN E,IMSOC2(I)
JRST OPNL2 ;WRONG DIRECTION IF INPUT SOCKET
CONO PI,NETOFF
MOVE E,[40000,,777]
TDNN E,IMSOC5(B) ;ERROR IF EITHER CHANNEL ALREADY CONNECTED
TDNE E,IMSOC5(I)
JRST OPNL23 ;"FILE LOCKED"
MOVSI C,%SSNET
TDNE C,STYSTS-NFSTTY(Q)
JRST OPNL23 ;SIMILAR ERROR IF STY ALREADY CONNECTED
HRR E,Q ;GET 40000,,TTY #
IORM E,IMSOC5(I)
IORM E,IMSOC5(B) ;MARK SOCKETS AS CONNECTED
] ;NCPP
NSTYN3: SKIPGE STYNTL-NFSTTY(Q) ;HALT IF STY'S VARS ARE NOT CORRECT FOR A
SKIPL STYNTI-NFSTTY(Q) ;NON-CONNECTED STY.
JRST 4,.
IORM C,STYSTS-NFSTTY(Q) ;ALL ERROR CAUGHT, SO MARK STY CONNECTED.
HRL B,I ;PUT INPUT IMSOC IDX,, OUTPUT IMSOC IDX
MOVSM B,STYNTI-NFSTTY(Q) ;INTO THE STY
TRZ D,7777 ;STORE THE OUTPUT RESET CHARACTERS - AT MOST 3
MOVEM D,STYORC-NFSTTY(Q)
;ACTIVATE IN CASE HAS UNREAD INPUT
IFN NCPP,[
TLNN C,%SSCHA+%SSTCP
PUSHJ P,IMPUIN
] ;NCPP
IFN CHAOSP,[
TLNE C,%SSCHA
PUSHJ P,CHINTI
];CHAOSP
IFN TCPP,[
TLNE C,%SSTCP
PUSHJ P,TCPUII
] ;TCPP
JRST NETOJ1
SUBTTL Clock interrupt level code
; NETCLK - Slow net clock. Called at clock level every 1/2 sec.
; Can clobber all ACs
NETCLK:
IFN CHAOSP, PUSHJ P,CHACLK ; Run Chaos net 1/2-second clock
IFN TCPP, PUSHJ P,TCPCLK ; Run TCP 1/2-sec clock
SETCMB A,NETCL1 ; Flip the 1 sec switch
JUMPE A,CPOPJ ; Return unless time for 1-sec clock
IFN INETP,CALL IPFCLK ; Run IP reassembly timeout every 1 sec
RET
EBLK
NETCL1: 0 ; Flip-flop to get 1-sec ticks
BBLK
; STYNTC - Called at clock level every 1/60 sec to process all
; necessary transfers of data between STYs and associated
; net connections
STYNTC: CONO PI,NETOFF
SKIPN I,STYNTA ;GET HEAD OF ACTIVATE LIST
JRST NETONJ ;EMPTY
SETZM STYNTA ;COPY LIST IN CASE A STY IS PUT BACK ON
CONO PI,NETON
STYNT7: MOVE A,STYNTL-NFSTTY(I) ;GET NEXT ON LIST
MOVEM A,STYNTB ;SAVE FOR NEXT TIME AROUND LOOP
SETOM STYNTL-NFSTTY(I) ;THIS ONE IS NO LONGER ON ACTIVATE LIST
MOVE A,STYSTS-NFSTTY(I)
TLNN A,%SSNET
JRST 4,. ;STY CLAIMS NOT TO BE CONNECTED??
MOVE R,I ;SAVE TTY #
IFN CHAOSP,[
TLNE A,%SSCHA
JRST STYCHA ;CONNECTED TO CHAOS NET
];CHAOSP
IFN TCPP,[
TLNE A,%SSTCP
JRST STYTCP
] ;TCPP
IFN NCPP,[
JRST STYNCP
];NCPP
STYNT8: SKIPE I,STYNTB ;GET NEXT STY FROM COPIED ACTIVATION LIST
JRST STYNT7
POPJ P,
;SUBROUTINE TO STANDARDIZE HOST NUMBER, OPNL25 IF NO GOOD
;PROCESSES HOST NUMBER IN T, MUNGS H, CALLED BY JSP J,STDHST
STDHST:
IFN 1,[
EXCH A,T
CALL CVH3NA ; Convert # to HOSTS3 fmt
EXCH A,T
LDB H,[301400,,T] ; Get high 12 bits (net #)
CAIE H,12 ; Should be ARPA net
JRST OPNL25
TDZ T,[NW%ARP+<377_8.>] ; Flush the net # and logical host field
JRST (J)
] ;IFN 1
IFN 0,[
LDB H,[331000,,T] ;GET NETWORK-NUMBER FIELD
CAIE H,12 ;ONLY 12 OR 0 IS ACCEPTABLE
JUMPN H,OPNL25
TDNE T,[400600,,400] ;MAKE SURE OTHER RANDOM BITS AREN'T ON
JRST OPNL25
TLZ T,777000 ;CLEAR NETWORK NUMBER
JUMPE T,OPNL25 ;0 IS NOT ACCEPTABLE
CAIL T,400 ;SKIP IF OLD-STYLE HOST NUMBER
JRST (J)
LDB H,[060200,,T] ;GET HOST FIELD
ANDI T,77 ;GET IMP FIELD
EXCH H,T
DPB H,[112000,,T] ;RECOMBINE
JRST (J)
] ;IFN 0

98
src/system/ni1010.defs2 Executable file
View File

@@ -0,0 +1,98 @@
;;; -*- Mode: Midas -*-
.AUXIL
;;; Canonical symbol definition macro, FOO==BAR with error check.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [ $$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
$$TEMP==1
] ;IFNDEF DEFSYM
.ELSE, $$TEMP==0
; Junk for Interlan NI1010A Unibus Ethernet Interface
;Interrupt information
DEFSYM %ILVEC==300 ;Input side interrupt vector (non-standard)
;Output side assumed to be %LHVEC+4
DEFSYM %ILPRI==5 ;Interrupt priority (should be 6, but
; hard to change to anything but 4!)
DEFSYM %ILBAS==764000 ;Base of NI1010A Registers in UB space
;Unibus Registers
DEFSYM %ILCSR=:%ILBAS ;Control and Status Register
DEFSYM %ILBAR=:%ILBAS+2 ;Buffer Address Register
DEFSYM %ILBCR=:%ILBAS+4 ;Byte COunt Register
;Bitz
;CSR bits
DEFSYM %ILEUA==:140000 ;Extended UB address field
DEFSYM %ILCMD==:37400 ;Command Function Code
DEFSYM %ILCD==:200 ;Command Done
DEFSYM %ILCIE==:100 ;Command Interrupt Enable
DEFSYM %ILRD==:40 ;Receive DMA done
DEFSYM %ILRIE==:20 ;Receive Interrupt Enable
DEFSYM %ILSTS==:17 ;Command Status Code
;Commands (in %ILCMD field of CSR)
DEFSYM %ILSML==400 ;Module Loopback (through interface)
DEFSYM %ILSIL==1000 ;Set Internal Loopback
DEFSYM %ILCLM==1400 ;Clear loopback mode
DEFSYM %ILSPR==2000 ;Promiscuous Receive Mode
DEFSYM %ILCPR==2400 ;Clear Promiscuous Receive Mode
DEFSYM %ILSRE==3000 ;Set Receive-on-error bit
DEFSYM %ILCRE==3400 ;Clear Receive-on-error bit
DEFSYM %ILOFL==4000 ;Go Offline
DEFSYM %ILONL==4400 ;Go Online
DEFSYM %ILROD==5000 ;Run onboard diagnostics
DEFSYM %ILSIS==6000 ;Set Insert-source-address mode
DEFSYM %ILCIS==7000 ;Clear Insert-source-address mode
DEFSYM %ILDPA==7400 ;Set physical address to default
DEFSYM %ILSRM==10000 ;Receive all multicast packets
DEFSYM %ILCRM==10400 ;Clear Receive all multicast packets
DEFSYM %ILRRS==14000 ;Report and reset statistics
DEFSYM %ILRCD==14400 ;Report Collision Delay Times
DEFSYM %ILRCV==20000 ;Supply Receive Buffer
DEFSYM %ILLXD==24000 ;Load Transmit Data
DEFSYM %ILLXS==24400 ;Load Transmit Data and Send
DEFSYM %ILLGA==25000 ;Load Group Addreses
DEFSYM %ILDGA==25400 ;Delete Group Adresses
DEFSYM %ILLPA==26000
DEFSYM %ILFRQ==30000 ;Flush Receive BAR/BCR Queue
DEFSYM %ILRST==37400 ;Reset
;Error codes. Found in %ILSTS field of CSR
DEFSYM %ILEOK==0 ;Success
DEFSYM %ILERT==1 ;Success, with retries
DEFSYM %ILEBC==2 ;Illegal Command
DEFSYM %ILEIC==3 ;Invalid Command
DEFSYM %ILERE==4 ;Receiver Error
DEFSYM %ILEBB==5 ;Buffer Size Too Big
DEFSYM %ILEFS==6 ;Frams Size Too Small
DEFSYM %ILEEC==10 ;Excessive Collisions
DEFSYM %ILEBA==12 ;Buffer Not Word Aligned
DEFSYM %ILENX==17 ;Non-eXistant Memory
;Diagnostic codes. Results from %ILROD command
DEFSYM %ILDOK==0 ;No Problem
DEFSYM %ILDCE==1 ;ROM/RAM Checksum Error
DEFSYM %ILDDE==2 ;DMA Circuitry Failed
DEFSYM %ILDXE==3 ;Transmit Circuitry Failed
DEFSYM %ILDRE==4 ;Receive Circuitry Failed
DEFSYM %ILDLE==5 ;Loopback checks failed
;Frame status bits, returned in frame status byte
; at the top of each received packet.
DEFSYM %ILFCE==1 ;CRC Error in packet
DEFSYM %ILFAE==2 ;Alignment Error
DEFSYM %ILFFL==4 ;1+ frames lost just before
IFN $$TEMP,EXPUNG DEFSYM

2432
src/system/nmtape.30 Executable file

File diff suppressed because it is too large Load Diff

230
src/system/rh10.defs26 Executable file
View File

@@ -0,0 +1,230 @@
.AUXIL
;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [
$$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
.MLLIT==1
$$TEMP==1
];IF Not DEFined DEFSYM
.ELSE $$TEMP==0
;DISK PHYSICAL PARAMETERS (RH10 CONTROLLER)
DEFSYM NCYLS==406. ;# CYLINDERS NORMALLY USED
DEFSYM XCYLS==411.-NCYLS ;# CYLINDERS FOR SPARES, HACKS, ETC.
DEFSYM NHEDS==19. ;# TRACKS/CYLINDER
DEFSYM NSECS==20. ;# SECTORS/TRACK
DEFSYM SECBLK==8 ;# SECTORS/BLOCK
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ;# BLOCKS/CYLINDER
DEFSYM NBLKS==NCYLS*NBLKSC ;# BLOCKS NORMALLY USED
DEFSYM XBLKS==XCYLS*NBLKSC ;# BLOCKS FOR HACKS
DEFSYM TBLKS==NBLKS+XBLKS ;TOTAL BLOCKS
DEFSYM NTUTBL==2 ;2 BLOCKS PER TUT
DEFSYM DECADE==NBLKSC ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
;DECADE SIZE = CYLINDER SIZE FOR KLFEDR'S SAKE
DEFSYM DSK=270 ;I/O DEVICE NUMBER OF RH10
;CONI - LEFT HALF (ERROR BITS ONLY)
DEFSYM %HID22==4000,, ;4.3 1=>22-BIT DATA CHANNEL, 0=>18-BIT
DEFSYM %HIILF==400,, ;3.9 ILLEGAL FUNCTION CODE IN CONTROL REGISTER
DEFSYM %HISDE==200,, ;3.8 SELECTED DRIVE PREVIOUS ERROR NOT RESET
DEFSYM %HIDPE==4,, ;3.3 CHANNEL DATA PARITY ERROR
DEFSYM %HICPE==2,, ;3.2 CHANNEL CONTROL WORD PARITY ERROR
DEFSYM %HINXM==1,, ;3.1 CHANNEL NXM ERROR
;CONI - RIGHT HALF
DEFSYM %HIBPE==400000 ;2.9 DATA BUSS PARITY ERROR
DEFSYM %HIEXC==200000 ;2.8 "EXCEPTION" IN DRIVE DURING DATA TRANSFER
DEFSYM %HICER==100000 ;2.7 CHANNEL ERROR (OR OF 3 BITS IN LH)
DEFSYM %HICWW==040000 ;2.6 CONTROL WORD HAS BEEN WRITTEN
DEFSYM %HIOVR==020000 ;2.5 OVER-RUN (MEMORY DATA LATE)
DEFSYM %HIDRE==010000 ;2.4 DRIVE RESPONSE ERROR - NO RESPONSE FROM DRIVE
DEFSYM %HIILC==004000 ;2.3 ILLEGAL COMMAND OR REGISTER ACCESS ERROR
DEFSYM %HIPWR==002000 ;2.2 POWER FAIL
DEFSYM %HICOV==000200 ;1.8 CONTROL BUS OVER-RUN
DEFSYM %HIRAE==000100 ;1.7 REGISTER ACCESS ERROR (ONLY IF INTR ENB)
DEFSYM %HIATN==000040 ;1.6 ATTENTION (INTERRUPTS)
DEFSYM %HIBSY==000020 ;1.5 CONTROL BUSY WITH DATA TRANSFER
DEFSYM %HIDON==000010 ;1.4 DATA TRANSFER DONE, NORMAL OR ERROR
;1.1-1.3 PIA AS USUAL
DEFSYM %HIERR==736300 ;CONI ERROR BITS
;CONO
;2.7-2.9 CLEAR CORRESPONDING ERROR BITS
DEFSYM %HOWCW==040000 ;2.6 WRITE CONTROL WORD
;2.3-2.5 CLEAR CORRESPONDING ERROR BITS
DEFSYM %HORST==002000 ;2.2 RESET THE CONTROLLER
;1.8 CLEARS CORRESPONDING ERROR BIT
DEFSYM %HORAE==000100 ;1.7 ENABLE RAE TO INTERRUPT
DEFSYM %HOATN==000040 ;1.6 ENABLE ATTENTION TO INTERRUPT
DEFSYM %HOSTP==000020 ;1.5 STOP DATA TRANSFER, CLR BSY, SET DONE
;1.4 CLEARS CORRESP BIT (DONE)
;1.1-1.3 SET PIA
DEFSYM %HOCLR==734210 ;CONO TO CLEAR ALL ERROR BITS
;CONTROLLER REGISTER NUMBERS (LH OF DATAO)
DEFSYM %HRLOD==1_13 ;4.3 BIT TO SAY "LOAD SELECTED REGISTER"
DEFSYM %HRCTL==40_14 ;CONTROL REGISTER
DEFSYM $HCDRV==.BP <7,,> ;3.1-3.3 DRIVE SELECT FIELD
DEFSYM $HCICWA==.BP 077700 ;1.7-2.6 INITIAL CONTROL WORD ADDR
;AS USUAL, 1.7 IS REALLY THE WRITE EVEN PARITY BIT
;1.1-1.6 FUNCTION CODE (%HMxxx) AND GO BIT
DEFSYM %HRBUF==50_14 ;DATA BUFFER REGISTER (MAINTENANCE)
DEFSYM %HRIAD==44_14 ;INTERRUPT ADDRESS REGISTER
;3.2 1=>KI-10 MODE, 0=>KA-10 MODE
;1.1-1.9 9-BIT VECTOR ADDRESS (KI)
DEFSYM %HRRAE==54_14 ;REGISTER ACCESS ERROR REGISTER
;DATAI 1.1-1.8 RAE DRIVE 0-7
;DATAO 1.1-1.8 CLEAR THAT BIT
DEFSYM %HRCBF==74_14 ;CHANNEL BUFFER
;COMMANDS
; COMMANDS THAT DO I/O ARE PUT IN %HRCTL ALONG WITH $HCICWA
; OTHER COMMANDS ARE STORED INTO %HRDCL
; IN EITHER CASE $HCDRV SAYS WHICH DRIVE
DEFSYM %HMNOP==0 ;NO OPERATION
DEFSYM %HMUNL==3 ;UNLOAD (DOES PACK FLY OFF?)
DEFSYM %HMREC==7 ;RECALIBRATE
DEFSYM %HMCLR==11 ;DRIVE CLEAR (RESET ERRORS ETC.)
DEFSYM %HMRLS==13 ;DRIVE RELEASE (DUAL PORT)
DEFSYM %HMSRC==31 ;SEARCH (FOR R.P.S.)
DEFSYM %HMWCH==51 ;WRITE CHECK -- DOESN'T WORK (DEC BRAIN DAMAGE)
DEFSYM %HMWCF==53 ;WRITE CHECK FORMAT (HEADER AND DATA) -- DOESN'T WORK
DEFSYM %HMWRT==61 ;WRITE DATA
DEFSYM %HMWHD==63 ;WRITE HEADER AND DATA (FORMAT THE PACK)
DEFSYM %HMRED==71 ;READ DATA
DEFSYM %HMRHD==73 ;READ HEADER AND DATA
DEFSYM %HMSEK==5 ;SEEK TO CYLINDER
DEFSYM %HMOFS==15 ;OFFSET HEADS SLIGHTLY
DEFSYM %HMCEN==17 ;RETURN HEADS TO CENTERLINE
DEFSYM %HMACK==23 ;ACKNOWLEDGE MOUNTING OF PACK (REQUIRED BEFORE I/O)
DEFSYM %HMRDP==21 ;"READ-IN PRESET"
;STANDARD FIELDS IN DRIVE REGISTERS
;3.1-3.3 DRIVE NUMBER ($HCDRV)
DEFSYM %HDCBT==002000 ;4.2 CONTROL BUS TIMEOUT
DEFSYM %HDPAR==001000 ;4.1 MASS BUS CONTROL PARITY ERROR
DEFSYM %HDDLT==000400 ;3.9 DATA LATE (NEED 3 US BETWEEN DATAO AND DATAI)
DEFSYM %HDILC==000200 ;3.8 ILLEGAL COMMAND
DEFSYM %HDERR==003600 ;ALL BITS FOR ERRORS IN TALKING TO DRIVE
;DRIVE-DEPENDENT DATA IS IN LOW 16 BITS (1.1-2.7)
;DRIVE REGISTERS (NUMBER IN LH OF DATAO)
DEFSYM %HRDCL==0_14 ;DRIVE CONTROL REGISTER
;1.1-1.6 COMMAND (%HMxxx) 1.1=GO BIT
DEFSYM %HCDVA==1_11. ;2.3 DRIVE AVAILABLE
DEFSYM %HRSTS==1_14 ;STATUS REGISTER
;1.1-1.6 BITS ON DURING HEAD LOAD SEQUENCE
DEFSYM %HSVV==100 ;1.7 VOLUME VALID. SET BY %HMACK, CLEARED BY
; DRIVE TURN ON. 0 => PACK MAY HAVE BEEN CHANGED
DEFSYM %HSRDY==200 ;1.8 DRIVE READY
DEFSYM %HSDPR==400 ;1.9 "DRIVE PRESET" = CONNECTED TO THIS CONTROLLER
DEFSYM %HSPGM==1000 ;2.1 "PROGRAMMABLE" = EITHER CTRLR CAN CONNECT
DEFSYM %HSLST==2000 ;2.2 LAST SECTOR TRANSFERRED
DEFSYM %HSWRL==4000 ;2.3 WRITE LOCK
DEFSYM %HSMOL==10000 ;2.4 MEDIUM ON-LINE
DEFSYM %HSPIP==20000 ;2.5 POSITIONING IN PROGRESS
DEFSYM %HSERR==40000 ;2.6 BIT ON %HRER1, %HRER2, OR %HRER3
DEFSYM %HSATN==100000 ;2.7 ATTENTION - ERROR, POSITIONING COMPLETE,
; STARTUP COMPLETE, OR DRIVE AVAILABLE
DEFSYM %HRER1==2_14 ;ERROR REGISTER 1
;GENERALLY THESE BITS ARE ONLY RESET BY %HMCLR
;1.1 ILLEGAL COMMAND IN %HRDCL
;1.2 ATTEMPT TO ACCESS NON-EXISTENT DRIVE REGISTER
;1.3 ATTEMPT TO WRITE IN DRIVE REGISTER WHILE DRIVE BUSY
;1.4 PARITY ERROR ON MASSBUS
;1.5 FORMAT ERROR (PACK & CPU NOT BOTH 16- OR BOTH 18-BIT)
;1.6 WRITE CLOCK FAIL
DEFSYM %H1ECH==100 ;1.7 ECC HARD ERROR (NOT 11-BIT BURST)
;1.8 HEADER COMPARE ERROR
;1.9 HEADER CRC ERROR
;2.1 ADDRESS OVERFLOW
;2.2 INVALID ADDRESS
DEFSYM %H1WLK==4000 ;2.3 ATTEMPT TO WRITE WHILE WRITE-LOCKED
;2.4 DRIVE TIMING ERROR. MAY DE-FORMAT THE TRACK.
;2.5 OPERATION NOT COMPLETE (3 REVS NO ACTION)
;2.6 DRIVE UNSAFE - WRITE LOCK OR FIELD SERVICE
DEFSYM %H1ECC==100000 ;2.7 DATA CHECK, ECC COMPUTATION INITIATED
DEFSYM %H1SOF==110730 ;SOFT ERRORS
DEFSYM %HRMNT==3_14 ;MAINTENANCE REGISTER (SEE RP04 MAINT MANUAL)
DEFSYM %HRATN==4_14 ;ATTENTION SUMMARY REGISTER (NOT REALLY PER-DRIVE)
;1.1-1.8 %HSATN DRIVES 0-7
;CLEARED BY ACCESSING DRIVE OR WRITING A 1
DEFSYM %HRADR==5_14 ;DESIRED SECTOR/TRACK ADDRESS
DEFSYM $HATRK==.BP 17400 ;TRACK 0-22 OCTAL
DEFSYM $HASEC==.BP 37 ;SECTOR 0-23 OCTAL (128 WORDS EACH)
;NOTE THESE FIELDS ARE 8-BITS EACH
DEFSYM %HRLAH==7_14 ;LOOK AHEAD (READ ONLY)
;NUMBER OF 64'THS OF A SECTOR
DEFSYM %HRTYP==6_14 ;DRIVE TYPE (RO)
;1.1-1.9 DRIVE TYPE NUMBER (20 FOR "RP04")
;2.3 DUAL-PORT DRIVE
;2.5 MOVING HEAD
;2.6 TAPE
;2.7 NOT BLOCK ADDRESSED
DEFSYM %HRSER==10_14 ;DRIVE SERIAL NUMBER (RO)
DEFSYM %HROFS==11_14 ;HEAD OFFSET
;1.1-1.8 OFFSET CODE
;1.9-2.7 MISC CRUFTIES
DEFSYM %HRCYL==12_14 ;DESIRED CYLINDER ADDRESS
; 0 TO 410 DECIMAL
DEFSYM %HRCCY==13_14 ;CURRENT CYLINDER ADDRESS
DEFSYM %HRER2==14_14 ;ERROR REGISTER 2
;MISC UNSAFE CONDITIONS IN DRIVE
DEFSYM %HRER3==15_14 ;ERROR REGISTER 3
;1.1-1.7 MORE MISC UNSAFES IN DRIVE
DEFSYM %H3SKI==40000 ;2.6 SEEK INCOMPLETE
DEFSYM %H3OFC==100000 ;2.7 OFF CYLINDER
DEFSYM %HRPOS==16_14 ;ECC POSITION
;LOCATION OF ERROR BURST WITHIN SECTOR
DEFSYM %HRPAT==17_14 ;ECC PATTERN
;11-BIT ERROR BURST
;DF10-C CHANNEL DEFINITIONS (22-BIT- (KI-) MODE)
DEFSYM $DFCAD==002600,, ;CURRENT ADDRESS - 1 (IN CONTROL WORD)
DEFSYM $DFWC==261600,, ;- WORD COUNT (IN CONTROL WORD)
DEFSYM $DFLAD==002600,, ;LAST DATA ADDRESS (IN STORED CONTROL WD)
DEFSYM $DFCWA==261600,, ;LAST CONTROL WORD ADDRESS (IN STORED CONTROL WORD)
IFN $$TEMP,EXPUNG DEFSYM

289
src/system/rh11.defs48 Executable file
View File

@@ -0,0 +1,289 @@
; -*- Midas -*-
.AUXIL
; Canonical symbol definition macro, FOO==BAR with error check.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [ $$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
$$TEMP==1
] ;IFNDEF DEFSYM
.ELSE, $$TEMP==0
; For now, must have a disk type defined to get the correct register
; definitions.
IFNDEF RP06P,RP06P==0
IFNDEF RP07P,RP07P==0
IFNDEF RM03P,RM03P==0
IFNDEF RM80P,RM80P==0
IFN RP06P+RP07P+RM03P+RM80P-1,.FATAL Only one disk type allowed in RH11 DEFS
;;; Disk RH11 Interrupt vector:
DEFSYM PHVEC==254 ; Interrupts occur on level 6
; (high priority) on UBA #1.
;;; Disk RH11 Unibus register addresses:
DEFSYM %HRCS1=:776700 ;CTRL AND STATUS 1.
DEFSYM %HXSC== 1_15. ; Special Condition
DEFSYM %HXTRE==1_14. ; Transfer Error
DEFSYM %HXMCP==1_13. ; Mass I/O Control Bus Parity Error
DEFSYM %HXDVA==1_11. ; Drive Available
DEFSYM %HXPSE==1_10. ; Port Select
DEFSYM %HXA17==1_9. ; UB Address Extension Bit 17
DEFSYM %HXA16==1_8. ; UB Address Extension Bit 16
DEFSYM %HXRDY==1_7. ; Ready
DEFSYM %HXIE== 1_6. ; Interrupt Enable
DEFSYM $HXCMD==.BP 77 ; Bits 1-5 specify commands.
DEFSYM %HXGO== 1_0. ; GO bit
;;; Commands with bit 0 (GO) included:
DEFSYM %HMNOP==0 ; No Operation
DEFSYM %HMUNL==3 ; Unload ("Standby" -- the pack doesn't fly off).
DEFSYM %HMREC==7 ; Recalibrate
DEFSYM %HMCLR==11 ; Drive clear (reset errors etc.)
DEFSYM %HMRLS==13 ; Drive release (dual port)
DEFSYM %HMSRC==31 ; Search (for r.p.s.)
DEFSYM %HMWCH==51 ; Write Check (?doesn't work)
DEFSYM %HMWCF==53 ; Write Check Format, Header and Data (?doesn't work)
DEFSYM %HMWRT==61 ; Write Data
DEFSYM %HMRED==71 ; Read Data
DEFSYM %HMWHD==63 ; Write Header And Data (format the pack)
DEFSYM %HMRHD==73 ; Read Header and Data
IFN RP07P,[
DEFSYM %HMWTD==65 ; Write Track Descriptor
DEFSYM %HMRTD==75 ; Read Track Descriptor
]
DEFSYM %HMSEK==5 ; Seek to Cylinder
DEFSYM %HMOFS==15 ; Offset Heads Slightly
; Just sets %HSOFS on RP07
DEFSYM %HMCEN==17 ; Return Heads To Centerline
; Just clears %HSOFS on RP07
DEFSYM %HMACK==23 ; Acknowledge mounting of pack (required before I/O)
; No-op on RP07
DEFSYM %HMRDP==21 ; Read-In Preset
DEFSYM %HRWC=:776702 ;WORD COUNT.
DEFSYM %HRBA=:776704 ;UNIBUS ADDRESS.
DEFSYM %HRADR=:776706 ;DESIRED ADDRESS.
DEFSYM $HATRK==.BP 37400 ; Track
DEFSYM $HASEC==.BP 00177 ; Sector
;; These are the sizes on the RP07 -- other drives are smaller.
;; This is OK, as most places calculate this as Track_8+Sector
DEFSYM %HRCS2=:776710 ;CTRL AND STATUS 2.
DEFSYM %HYDLT==1_15. ; Data Late
DEFSYM %HYWCE==1_14. ; Write Check Error
DEFSYM %HYPE== 1_13. ; Parity Error
DEFSYM %HYNED==1_12. ; Non-existant Drive
DEFSYM %HYNEM==1_11. ; %HRBA is NXM during DMA
DEFSYM %HYPGE==1_10. ; Program Error
DEFSYM %HYMXF==1_9. ; Missed Transfer
DEFSYM %HYMDP==1_8. ; Mass Data Bus Parity Error
DEFSYM %HYOR== 1_7. ; Output Ready (for Silo buffer diag.)
DEFSYM %HYIR== 1_6. ; Input Ready (for Silo buffer diag.)
DEFSYM %HYCLR==1_5. ; Controller Clear
DEFSYM %HYPAT==1_4. ; Parity Test
DEFSYM %HYBAI==1_3. ; Unibus Address Increment Inhibit
DEFSYM $HYDSK==.BP 7 ; Bits 2-0 are the Unit Select.
DEFSYM %HRSTS=:776712 ;DRIVE STATUS.
DEFSYM %HSATN==1_15. ; Attention Active
DEFSYM %HSERR==1_14. ; Error
DEFSYM %HSPIP==1_13. ; Positioning In Progress
DEFSYM %HSMOL==1_12. ; Medium On-Line
DEFSYM %HSWRL==1_11. ; Write Locked
DEFSYM %HSLST==1_10. ; Last Sector Transferred
DEFSYM %HSPGM==1_9. ; Programmable
DEFSYM %HSDPR==1_8. ; Drive Present
DEFSYM %HSRDY==1_7. ; Drive Ready
DEFSYM %HSVV== 1_6. ; Volume Valid
; These are RP04-only bits in %HRSTS
; DEFSYM %HSDE1==1_5. ; Difference Equals 1
; DEFSYM %HSL64==1_4. ; Difference Less Than 64
; DEFSYM %HSGRV==1_3. ; Go Reverse
; DEFSYM %HSDIG==1_2. ; Drive To Inner Guard Band
; DEFSYM %HSF20==1_1. ; Drive Forward 20in/sec
; DEFSYM %HSF5== 1_0. ; Drive Forward 5in/sec
IFN RP07P,[
DEFSYM %HSILS==1_2. ; Interleaved Sectors
DEFSYM %HSWRN==1_1. ; Early Warning
DEFSYM %HSOFS==1_0. ; Offset Mode
]
DEFSYM %HRER1=:776714 ;ERROR 1.
DEFSYM %H1ECC==1_15. ; Data Check
DEFSYM %H1UNS==1_14. ; Unsafe
DEFSYM %H1OPI==1_13. ; Operation Incomplete
DEFSYM %H1DTE==1_12. ; Drive Timing Error
DEFSYM %H1WLK==1_11. ; Write Lock Error
DEFSYM %H1IAE==1_10. ; Invalid Address Error
DEFSYM %H1AOE==1_9. ; Address Overflow Error
DEFSYM %H1CRC==1_8. ; Header CRC Error
DEFSYM %H1HCE==1_7. ; Header Compare Error
DEFSYM %H1ECH==1_6. ; ECC Hard Error
DEFSYM %H1WCF==1_5. ; Write Clock Fail
DEFSYM %H1FER==1_4. ; Format Error
DEFSYM %H1PAR==1_3. ; Parity Error
DEFSYM %H1RMR==1_2. ; Register Modification Refused
DEFSYM %H1ILR==1_1. ; Illegal Register
DEFSYM %H1ILF==1_0. ; Illegal Function
DEFSYM %HRATN=:776716 ;ATTENTION SUMMARY.
; Each bit 7-0 corresponds to a drive asserting ATA.
DEFSYM %HRLAH=:776720 ;LOOK AHEAD.
; 2.2 - 1.7 Sector Count.
; 1.6 - 1.5 Encoded Extension Field.
DEFSYM %HRBUF=:776722 ;DATA BUFFER.
DEFSYM %HRMNT=:776724 ;MAINTENANCE.
DEFSYM %HRTYP=:776726 ;DRIVE TYPE.
; 2.7 NOT BLOCK ADDRESSED
; 2.6 TAPE
; 2.5 Moving Head (better be a 1!!)
; 2.3 Drive Request Required
; 1.9 - 1.1 Drive Type Number:
; RP04 = 20, RP05 = 21,
; RP06 = 22, RM03 = 24,
; RM80 = 26, RP07 = 42
DEFSYM %HRSER=:776730 ;SERIAL NUMBER.
DEFSYM %HROFS=:776732 ;OFFSET.
; 2.9-2.8 Unused
; 2.7 Sign Change (RP06 only)
; 2.7 Command Modifier (RP07 only)
; Must be set before %HMWHD, %HMWTD or %HMRTD
; 2.6 Move Track Descriptor (RP07 only)
; 0 = 128. bit track descriptor
; 1 = 344. bit track descriptor
; 2.4 Format Bit (1=16, 0=18)
; 2.3 ECC Inhibit
; 2.2 Header Compare Inhibit
; 2.1 Skip Sector Inhibit (RM 16bit only)
; 1.9 Unused
;
; 1.8 - 1.1 Unused on RP07
; RP07 doesn't support offsets
;
; RP06 Offsets
; 1.8 - 1.1 Offset Info
; +400 u" 00010000
; -400 u" 10010000
; +800 u" 00100000
; -800 u" 10100000
; +1200 u" 00110000
; -1200 u" 10110000
; Centerline 00000000
;
; RMxx Offsets
; 1.1-1.7 Unused
; 1.8 Offset Direction
; 0 - Away from spindle
; 1 - Towards spindle
DEFSYM %HRCYL=:776734 ;DESIRED CYLINDER.
IFN RP06P,[
DEFSYM %HRCCY=:776736 ;CURRENT CYLINDER.
DEFSYM %HRER2=:776740 ;ERROR 2.
DEFSYM %H2NHS==1_10. ; No Head Selection
DEFSYM %H2WRU==1_8. ; Write Ready Unsafe
DEFSYM %HRER3=:776742 ;ERROR 3.
DEFSYM %H3OFC==1_15. ; Off Cylinder
DEFSYM %H3SKI==1_14. ; Seek Incomplete (also sets UNS+ATA+PIP+RDY)
DEFSYM %H3DCL==1_6. ; DC power low (or perhaps AC?)
DEFSYM %H3ACL==1_5. ; AC power low (or perhaps DC?)
; (the documentation is confused about
; which is which.)
];RP06P
IFN RP07P,[
DEFSYM %HRCCY=:776736 ;CURRENT CYLINDER.
DEFSYM %HRER2=:776740 ;ERROR 2.
DEFSYM %H2PRG==1_15. ; Program Error
DEFSYM %H2CRM==1_14. ; Control ROM parity error
DEFSYM %H2H88==1_13. ; 8080 in drive is hung
;; DEC unimaginatively calls the following three bits
;; READ/WRITE UNSAFE 1, 2 and 3.
DEFSYM %H2WU3==1_12. ; Write current when no write in progress
DEFSYM %H2WU2==1_11. ; More than one head selected
DEFSYM %H2WU1==1_10. ; No write transitions during a write
DEFSYM %H2WOV==1_9. ; Write Overrun
DEFSYM %H2WRU==1_8. ; Write Ready Unsafe
DEFSYM $H2COD==.BP 377 ; Error Code
;; Error codes are:
;; 012 Seek operation too long.
;; 013 Guard band detected during seek operation.
;; 014 Seek operation overshoot.
;; 104 Guard band detection failure during recalibrate operation.
;; 105 Reference gap or guard band pattern detection failure during
;; recalibrate operation.
;; 106 Seek error during recalibrate operation.
;; 112 Heads have attempted to land on guard band during recalibrate
;; operation.
DEFSYM %HRER3=:776742 ;ERROR 3.
DEFSYM %H3BDS==1_15. ; Bad Sector
DEFSYM %H3SKI==1_14. ; Seek Incomplete (see error code in ER2)
DEFSYM %H3DSE==1_13. ; Defect Skip Error
DEFSYM %H3WCF==1_12. ; Write Current Failure
DEFSYM %H3LCF==1_11. ; Logic Control Failure
DEFSYM %H3LBC==1_10. ; Loss of Bit Clock
DEFSYM %H3LCE==1_9. ; Loss of Cylinder Error
DEFSYM %H3X88==1_8. ; 8080 in drive failed to respond to a command
DEFSYM %H3DCK==1_7. ; Device Check
DEFSYM %H3WHD==1_6. ; Index Unsafe (Bad %HMWHD)
DEFSYM %H3DCL==1_5. ; DC Low voltage
DEFSYM %H3SDF==1_4. ; Serdes Data (data buffer timing) Failure
DEFSYM %H3PAR==1_3. ; Data Parity Error during write operation
DEFSYM %H3SYB==1_2. ; Sync Byte error
DEFSYM %H3SYC==1_1. ; Sync Clock failure
DEFSYM %H3RTM==1_0. ; Run timeout
];RP07P
IFN RM03P\RM80P,[
; RM has no Current Cylinder Register, the Error 2 Register is
; in a different place with different bits, and there is no
; Error 3 register
DEFSYM %HRER2=:776742 ;ERROR 2.
DEFSYM %H2BSE==1_15. ; Bad Sector (sector marked bad on disk)
DEFSYM %H2SKI==1_14. ; Seek Incomplete (also sets UNS+ATA+PIP+RDY)
DEFSYM %H2OPE==1_13. ; Drive address plug was removed
DEFSYM %H2IVC==1_12. ; Invalid Command (really drive not valid)
DEFSYM %H2LSC==1_11. ; LSC Sucks
DEFSYM %H2LBC==1_10. ; Loss of Bitcheck (hardware lossage)
DEFSYM %H2DVC==1_7 ; Device Check (generic hardware lossage)
DEFSYM %H2SSE==1_5 ; Skip Sector found (can't happen in 18bit)
DEFSYM %H2DPE==1_3 ; Data Parity Error in controller
];RM03P\RM80P
DEFSYM %HRPOS=:776744 ;ECC POSITION.
DEFSYM %HRPAT=:776746 ;ECC PATTERN.
IFN $$TEMP,EXPUNG DEFSYM

41
src/system/rm03.defs5 Executable file
View File

@@ -0,0 +1,41 @@
; -*- Midas -*-
.AUXIL
; Canonical symbol definition macro, FOO==BAR with error check.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [ $$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
$$TEMP==1
] ;IFNDEF DEFSYM
.ELSE, $$TEMP==0
; Disk Physical Parameters for RM03
DEFSYM NCYLS==820. ; # CYLINDERS NORMALLY USED
DEFSYM XCYLS==823.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
DEFSYM NHEDS==5 ; # TRACKS/CYLINDER
DEFSYM NSECS==30. ; # SECTORS/TRK
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
; block. TBLKS works out to be 14814, so it takes 2 blocks to TUT an
; RM03. This leaves plenty of room for the extra words at the beginning of
; the TUT.
DEFSYM NTUTBL==2 ; 2 BLOCKS PER TUT
; Allocate whole cylinders at a time.
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
IFN $$TEMP,EXPUNG DEFSYM

45
src/system/rm80.defs4 Executable file
View File

@@ -0,0 +1,45 @@
; -*- Midas -*-
.AUXIL
; Canonical symbol definition macro, FOO==BAR with error check.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [ $$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
$$TEMP==1
] ;IFNDEF DEFSYM
.ELSE, $$TEMP==0
; Disk Physical Parameters for RM80
; The RM80 actually has 561 cylinders, but it appears that the onboard
; microprocessor diagnostics may scribble on the last two cylinders, so
; we just leave them out of this.
DEFSYM NCYLS==556. ; # CYLINDERS NORMALLY USED
DEFSYM XCYLS==559.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
DEFSYM NHEDS==14. ; # TRACKS/CYLINDER
DEFSYM NSECS==30. ; # SECTORS/TRK
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
; block. TBLKS works out to be 29172, so it takes 3 blocks to TUT an
; RM80. This leaves plenty of room for the extra words at the beginning of
; the TUT.
DEFSYM NTUTBL==3 ; 3 BLOCKS PER TUT
; Allocate whole cylinders at a time.
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
IFN $$TEMP,EXPUNG DEFSYM

41
src/system/rp06.defs1 Executable file
View File

@@ -0,0 +1,41 @@
; -*- Midas -*-
.AUXIL
; Canonical symbol definition macro, FOO==BAR with error check.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [ $$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
$$TEMP==1
] ;IFNDEF DEFSYM
.ELSE, $$TEMP==0
; Disk Physical Parameters for RP06
DEFSYM NCYLS==812. ; # CYLINDERS NORMALLY USED
DEFSYM XCYLS==815.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
DEFSYM NHEDS==19. ; # TRACKS/CYLINDER
DEFSYM NSECS==20. ; # SECTORS/TRK
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
; block. TBLKS works out to be 38305, so it takes a little more than 3
; blocks to TUT an RP06. This leaves plenty of room for the extra words at
; the beginning of the TUT.
DEFSYM NTUTBL==4 ; 4 BLOCKS PER TUT
; Allocate whole cylinders at a time.
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
IFN $$TEMP,EXPUNG DEFSYM

41
src/system/rp07.defs1 Executable file
View File

@@ -0,0 +1,41 @@
; -*- Midas -*-
.AUXIL
; Canonical symbol definition macro, FOO==BAR with error check.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [ $$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
$$TEMP==1
] ;IFNDEF DEFSYM
.ELSE, $$TEMP==0
; Disk Physical Parameters for RP07
DEFSYM NCYLS==627. ; # CYLINDERS NORMALLY USED
DEFSYM XCYLS==630.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
DEFSYM NHEDS==32. ; # TRACKS/CYLINDER
DEFSYM NSECS==43. ; # SECTORS/TRK
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
; block. TBLKS works out to be 108360, so it takes 9 blocks to TUT an
; RP07. This leaves plenty of room for the extra words at the beginning of
; the TUT.
DEFSYM NTUTBL==9 ; 9 BLOCKS PER TUT
; Allocate whole cylinders at a time.
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
IFN $$TEMP,EXPUNG DEFSYM

106
src/system/rp10.defs16 Executable file
View File

@@ -0,0 +1,106 @@
.AUXIL
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [
$$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
.MLLIT==1
$$TEMP==1
]
.ELSE $$TEMP==0
;DISK PHYSICAL PARAMETERS
DEFSYM NCYLS==200. ;# CYLINDERS NORMALLY USED (RP02)
DEFSYM MCYLS==400. ;# CYLINDERS NORMALLY USED (RP03)
DEFSYM XCYLS==3 ;# EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
DEFSYM NHEDS==20. ;# TRACKS/CYLINDER
DEFSYM NSECS==10. ;# SECTORS/TRK
DEFSYM SECBLK==8 ;# SECTORS/BLOCK
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ;# BLKS/CYL
DEFSYM NBLKS==NCYLS*NBLKSC ;TOTAL # REG BLKS (RP02)
DEFSYM MBLKS==MCYLS*NBLKSC ;TOTAL # REG BLKS (RP03)
DEFSYM XBLKS==XCYLS*NBLKSC ;# XTRA BLKS
DEFSYM TBLKS==MBLKS+XBLKS ;TOTAL BLKS
DEFSYM NTUTBL==1 ;1 BLOCK PER TUT
DEFSYM DECADE==20. ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS
DEFSYM DPC==250 ;I/O DEVICE NUMBER
;DISK COMMANDS
DEFSYM DREADC==000000,, ;READ DATA
DEFSYM DWRITC==100000,, ;WRITE DATA
;OP CODE 2 UNUSED
DEFSYM DWRITH==300000,, ;WRITE HEADER AND DATA (FORMAT PACK)
DEFSYM DSEEKC==400000,, ;POSITION HEADS
DEFSYM DEASEC==500000,, ;CLEAR ATTENTIONS
DEFSYM DNOOPC==600000,, ;SELECT DRIVE
DEFSYM DRCALC==700000,, ;RECALIBRATE DRIVE
;BYTE POINTERS FOR ABOVE COMMANDS
DEFSYM DUNFLD==360300,, ;UNIT FIELD (ALL COMMANDS)
DEFSYM DCYL==261000,, ;CYLINDER FIELD (READ,WRIT,WRITH,SEEK)
DEFSYM DCYLXB==200100,, ;EXTRA BIT OF CYLINDER FIELD FOR RP03
DEFSYM DSURF==210500,, ;SURFACE FIELD (READ,WRIT,WRITH)
DEFSYM DSECT==140400,, ;SECTOR FIELD (READ,WRIT,WRITH)
;DATAI FIELDS
DEFSYM DUNFLI==410300,, ;UNIT FIELD
DEFSYM DCYLI==311000,, ;CYLINDER FIELD
DEFSYM DCYLXI==130100,, ;EXTRA BIT OF CYLINDER FIELD
DEFSYM SKINC==100,, ;SEEK INCOMPLETE
DEFSYM ONCYL==40,, ;ON CYLINDER
DEFSYM ONLINE==20,, ;ON LINE
DEFSYM FUNSAF==10,, ;FILE UNSAFE
DEFSYM NSCHDR==4,, ;NO SUCH DRIVE
DEFSYM RDONLY==2,, ;READ ONLY
DEFSYM NOWRIH==1, ;WRITE HEADER LOCKOUT
DEFSYM RP03BT==2000 ;SELECTED DRIVE IS AN RP03
DEFSYM SECTI==140500,,
DEFSYM ALLATT==776
;CONO INFORMATION
DEFSYM DCLEAR==175710 ;CLEAR ALL ERROR CONDITIONS
;CONI INFORMATION
DEFSYM PARER== 4000
DEFSYM SRCER== 40000
DEFSYM HRDER==130000
DEFSYM PROER==402300
DEFSYM WRTER== 1000
DEFSYM ALLER==577300
DEFSYM DONE==10
DEFSYM BUSY==20
;DF10 CHANNEL INFORMATION
DEFSYM $DFCAD==002600,, ;CURRENT ADDRESS - 1 (IN CONTROL WORD)
;ALSO BITS 4.7-4.9 HAVE 1'S COMPLEMENT OF MA 3.1-3.3
DEFSYM $DFWC==261600,, ;- WORD COUNT (IN CONTROL WORD)
DEFSYM $DFLAD==002600,, ;LAST DATA ADDRESS (IN STORED CONTROL WD)
DEFSYM $DFCWA==261600,, ;LAST CONTROL WORD ADDRESS (IN STORED CONTROL WORD)
IFN $$TEMP,EXPUNG DEFSYM

6685
src/system/salv.311 Executable file

File diff suppressed because it is too large Load Diff

2796
src/system/sysjob.117 Executable file

File diff suppressed because it is too large Load Diff

345
src/system/t20mac.1 Executable file
View File

@@ -0,0 +1,345 @@
;Random useful coding macros. GZ@OZ developed MACSYM.MID based on the
;Twenex monitor macro collection MACSYM.MAC - this is a non-Twenex-specific
;subset of that.
;Stuff supported (will add more stuff as need arises):
; FLD(VAL,MSK) & BIT(n) & POINT SIZE,ADDR,OFFSET
; MOVX AC,MASK & TXxx AC,MASK & JXx AC,MASK,ADDR & LOAD/STOR AC,MASK,ADDR
; DO./ENDDO. macros (and related stuff)
; IFxxx/ANxxx macros
; SAVEACS [A,B,C,D] & SAVE. [LOC,LOC,LOC]
.KILL ..XX,..TXZ,..TXO,..TXC,..X0,..X1,..X2,..X3,TOP.
.XCREF ..XX,..TXZ,..TXO,..TXC,..X0,..X1,..X2,..X3
.XCREF ..DX,..IX,..EX,.SAVX1,.SAVX2
IF2,.INEOF ;Don't bother if no code
;.NSTGW ;No storage words in this part
DEFINE FLD (VAL,MASK)
<.DPB <VAL>,<.BP <MASK>,>,0>TERMIN
DEFINE BIT (N)
<1_<35.-<N>>>TERMIN
DEFINE POINT SIZE=7,ADDR=0,COUNT=0
RADIX 8+2
..X1==SIZE
..X2==COUNT
RADIX 8
..XX==<..X2-1>/<36./..X1>
..X2==..X2-..XX*<36./..X1>
<<<36.-<..X1*..X2>>_30.>+<..X1_24.>+<ADDR>+..X1>
TERMIN
;MOVX - LOAD AC WITH CONSTANT
DEFINE MOVX AC,#MSK
IFE <-1,,0>&MSK,[MOVEI AC,MSK]
.ELSE [IFE <0,,-1>&MSK,[MOVSI AC,(MSK)]
.ELSE [IFE <<-1,,0>&MSK>-<-1,,0>,[HRROI AC,MSK]
.ELSE [IFE <<0,,-1>&MSK>-<0,,-1>,[HRLOI AC,(MSK&.LHALF)]
.ELSE [MOVE AC,[MSK]]]]]
TERMIN
;TX - TEST MASK
IRP OP,,[N,NA,OE,ON,OA,ZE,ZN,ZA,CE,CN,CA]
DEFINE TX!OP AC,#MSK
IFE <-1,,0>&MSK,[TR!OP AC,MSK]
.ELSE [IFE <0,,-1>&MSK,[TL!OP AC,(MSK)]
.ELSE [TD!OP AC,[MSK]]]
TERMIN
TERMIN
IRP OP,,[N,E]
DEFINE TXN!OP AC,#MSK
IFE <-1,,0>&MSK,[TRN!OP AC,MSK]
.ELSE [IFE <0,,-1>&MSK,[TLN!OP AC,(MSK)]
.ELSE [IFE MSK+1,[CAI!OP AC,0]
.ELSE [TDN!OP AC,[MSK]]]]
TERMIN
TERMIN
..TXZ==ANDI
..TXO==ORCMI
..TXC==EQVI
IRP OP,,[Z,O,C]
DEFINE TX!OP AC,#MSK
IFE <-1,,0>&MSK,[TR!OP AC,MSK]
.ELSE [IFE <0,,-1>&MSK,[TL!OP AC,(MSK)]
.ELSE [IFE <<-1,,0>&MSK>-<-1,,0>,[..TX!OP AC,-1#MSK]
.ELSE [TD!OP AC,[MSK]]]]
TERMIN
TERMIN
EQUALS IORX,TXO
EQUALS XORX,TXC
DEFINE ANDX AC,#MSK
TXZ AC,-1#MSK
TERMIN
SUBTTL JX -- JUMP ON MASK
;JXE -- JUMP IF MASKED BITS ARE EQUAL TO 0
;JXN -- JUMP IF MASKED BITS ARE NOT EQUAL TO 0
;JXO -- JUMP IF MASKED BITS ARE ALL ONES
;JXF -- JUMP IF MASKED BITS ARE NOT ALL ONES (FALSE)
DEFINE JXE AC,#MSK,?ADR
IFE MSK-.MINFI,[JUMPGE AC,ADR]
.ELSE [IFE MSK+1,[JUMPE AC,ADR]
.ELSE [TXNN AC,MSK
JRST ADR]]
TERMIN
DEFINE JXN AC,#MSK,?ADR
IFE MSK-.MINFI,[JUMPL AC,ADR]
.ELSE [IFE MSK+1,[JUMPN AC,ADR]
.ELSE [TXNE AC,MSK
JRST ADR]]
TERMIN
DEFINE JXO AC,#MSK,?ADR
IFE <.LZ MSK,>+<.TZ MSK,>-35.,[JXN AC,MSK,ADR]
.ELSE [TXC AC,MSK
TXCN AC,MSK
JRST ADR]
TERMIN
DEFINE JXF AC,#MSK,?ADR
IFE <.LZ MSK,>+<.TZ MSK,>-35.,[JXE AC,MSK,ADR]
.ELSE [TXC AC,MSK
TXCE AC,MSK
JRST ADR]
TERMIN
;LOAD, STOR
DEFINE LOAD AC,#MSK,?LOCN
IFE MSK+1,[MOVE AC,LOCN]
.ELSE [IFE MSK-777777,[HRRZ AC,LOCN]
.ELSE [IFE MSK-<-1,,0>,[HLRZ AC,LOCN]
.ELSE [LDB AC,[.BP MSK,LOCN]]]]
TERMIN
DEFINE STOR AC,#MSK,?LOCN
IFE MSK+1,[MOVEM AC,LOCN]
.ELSE [IFE MSK-777777,[HRRM AC,LOCN]
.ELSE [IFE MSK-<-1,,0>,[HRLM AC,LOCN]
.ELSE [DPB AC,[.BP MSK,LOCN]]]]
TERMIN
SUBTTL BLOCK MACROS
;MACROS TO PROVIDE SOME BLOCK HANDLING OF CODE
;DO. - LOOP STRUCTURE, DECLARES TOP OF LOOP
; LOOP. - JUMPS TO TOP OF LOOP
; EXIT. - EXITS LOOP
; TOP. - TAG AT TOP OF LOOP FOR JUMPS, E.G. SOJG T4,TOP.
; ENDLP. - TAG AT END OF LOOP FOR JUMPS, E.G. SOJL T4,ENDLP.
DEFINE DO.
..DX
TERMIN
DEFINE ..DX \%TGE,%SV1,%SV2,%SV3
EQUALS %SV1,TOP. ? EQUALS %SV2,ENDDO. ? EQUALS %SV3,ENDLP.
.KILL %SV1
TOP.==.
DEFINE ENDDO.
%TGE::EQUALS TOP.,%SV1 ? EQUALS ENDDO.,%SV2 ? EQUALS ENDLP.,%SV3
.KILL %TGE
TERMIN
DEFINE ENDLP.
%TGE!!TERMIN
TERMIN
DEFINE ENDDO.
.ERR ENDDO. outside loop
TERMIN
DEFINE ENDLP.
.ERR ENDLP. outside loop
TERMIN
TOP.==-1
DEFINE OD.
ENDDO.!TERMIN
DEFINE LOOP.
JRST TOP.!TERMIN
DEFINE EXIT.
JRST ENDLP.!TERMIN
;Conditionals
DEFINE IFSKP.
..IX [JRST ]
TERMIN
DEFINE IFNSK.
TRNA
..IX [JRST ]
TERMIN
DEFINE IFXN. AC,#MASK
IFE 1_35.-MASK,..IX [JUMPGE AC,]
.ELSE [IFE MASK+1,..IX [JUMPE AC,]
.ELSE [TXNN AC,MASK
..IX [JRST ]
]]
TERMIN
DEFINE IFXE. AC,#MASK
IFE 1_35.-MASK,..IX [JUMPL AC,]
.ELSE [IFE MASK+1,..IX [JUMPN AC,]
.ELSE [TXNE AC,MASK
..IX [JRST ]
]]
TERMIN
DEFINE IFE. AC
..IX [JUMPN AC,]
TERMIN
DEFINE IFN. AC
..IX [JUMPE AC,]
TERMIN
DEFINE IFG. AC
..IX [JUMPLE AC,]
TERMIN
DEFINE IFGE. AC
..IX [JUMPL AC,]
TERMIN
DEFINE IFLE. AC
..IX [JUMPG AC,]
TERMIN
DEFINE IFL. AC
..IX [JUMPGE AC,]
TERMIN
DEFINE ..IX OP,\%TAG,%SV1,%SV2
OP!%TAG
EQUALS %SV1,..TG ? EQUALS %SV2,ENDIF.
DEFINE ..TG LBL
%TAG!!LBL!TERMIN
DEFINE ENDIF.
..TG [::]
.KILL ..TG
EQUALS ..TG,%SV1 ? EQUALS ENDIF.,%SV2
TERMIN
TERMIN
DEFINE ELSE.
..EX
TERMIN
DEFINE ..EX \%TAG
JRST %TAG
..TG [::]
DEFINE ..TG LBL
%TAG!!LBL!TERMIN
TERMIN
DEFINE ..TG LBL
.ERR Conditional construct outside a conditional
TERMIN
DEFINE ENDIF.
.ERR ENDIF. outside a conditional
TERMIN
;GENERAL CASES WITHIN CONDITIONALS
DEFINE ANSKP.
JRST ..TG
TERMIN
DEFINE ANNSK.
TRNA
JRST ..TG
TERMIN
DEFINE ANDXN. AC,#MASK
IFE 1_35.-MASK,JUMPGE AC,..TG
.ELSE [IFE MASK+1,JUMPE AC,..TG
.ELSE [TXNN AC,MASK
JRST ..TG
]]
TERMIN
DEFINE ANDXE. AC,#MASK
IFE 1_35.-MASK,JUMPL AC,..TG
.ELSE [IFE MASK+1,JUMPN AC,..TG
.ELSE [TXNE AC,MASK
JRST ..TG
]]
TERMIN
DEFINE ANDE. AC
JUMPN AC,..TG
TERMIN
DEFINE ANDN. AC
JUMPE AC,..TG
TERMIN
DEFINE ANDG. AC
JUMPLE AC,..TG
TERMIN
DEFINE ANDGE. AC
JUMPL AC,..TG
TERMIN
DEFINE ANDLE. AC
JUMPG AC,..TG
TERMIN
DEFINE ANDL. AC
JUMPGE AC,..TG
TERMIN
; SAVEAC [A,B,C]
; Supports +1/+2 returns.
; Unlike macro version, supports arbitrary locations (not just AC's)
; and doesn't clobber AC16. Assumes stack in P, though.
DEFINE SAVEAC ACS
IRP AC,,[ACS]
PUSH P,AC
..XX==.IRPCNT
TERMIN
.SAVX1 ..XX+1,[ACS]
TERMIN
EQUALS SAVE.,SAVEAC ;Not in MACRO version...
DEFINE .SAVX1 #N#,ACS
PUSH P,[[CAIA
AOS -N(P)
.SAVX2 [ACS]
POPJ P,
]]
TERMIN
DEFINE .SAVX2 ACS
IRP AC,REST,[ACS]
.SAVX2 [REST]
POP P,AC
.ISTOP
TERMIN
TERMIN

92
src/system/t300.defs7 Executable file
View File

@@ -0,0 +1,92 @@
.AUXIL
;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [
$$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
.MLLIT==1
$$TEMP==1
];IF Not DEFined DEFSYM
.ELSE $$TEMP==0
;DISK PHYSICAL PARAMETERS (CENTURY DATA T-300 AND 2561 CONTROLLER)
;SINCE WE HAVE ALSO AN RH10 CONTROLLER, THESE ARE SUFFIXED WITH A 1
DEFSYM NCYLS1==812. ;# CYLINDERS NORMALLY USED
DEFSYM XCYLS1==815.-NCYLS1 ;# CYLINDERS FOR SPARES, HACKS, ETC.
DEFSYM NHEDS1==19. ;# TRACKS/CYLINDER
DEFSYM NSECS1==32. ;# SECTORS/TRACK (256. 16-BIT WORDS)
DEFSYM SECBL1==12. ;# SECTORS/BLOCK
DEFSYM NBLKC1==NHEDS1*NSECS1/SECBL1 ;# BLOCKS/CYLINDER
DEFSYM NBLKS1==NCYLS1*NBLKC1 ;# BLOCKS NORMALLY USED
DEFSYM XBLKS1==XCYLS1*NBLKC1 ;# BLOCKS FOR HACKS
DEFSYM TBLKS1==NBLKS1+XBLKS1 ;TOTAL BLOCKS
DEFSYM NTUTB1==4 ;4 BLOCKS PER TUT HERE
DEFSYM TUTBL1==MFDBLK-NTUTB1 ;TUT ALSO STARTS AT A DIFFERENT PLACE
;TAKE DECADE FROM RH1O DEFS
;DEFSYM DECADE==NBLKSC ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
; ;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
; ;DECADE SIZE = CYLINDER SIZE FOR KLFEDR'S SAKE
;10/11 COMMUNICATION AREA IS 14. WORDS STARTING 48. WORDS INTO THE 64.-WORD DL10 AREA
DEFSYM DSCCHK=DL10AR+60 ;MUST BE 2561 OCTAL
DEFSYM DSCREQ=DL10AR+61 ;SET NON-ZERO BY 10 TO SIGNAL REQUEST TO 11
DEFSYM DSCDON=DL10AR+62 ;SET NON-ZERO BY 11 TO SIGNAL DONE TO 10
DEFSYM DSCFLT=DL10AR+63 ;0 NO FAULT
DEFSYM %DFRST==100000 ;POWER CYCLED OR BROKEN, SO CONTROLLER WAS RESET
DEFSYM %DFCQE==10000 ;CONSISTENCY ERROR IN COMMAND QUEUE
DEFSYM %DFNXM==4000 ;NXM ERROR IN COMMAND QUEUE
DEFSYM %DFPAR==2000 ;PARITY ERROR IN COMMAND QUEUE
; IF ONE OF THESE BITS IS ON, BITS 1-0 AND DSCSTS
; ARE THE ERROR ADDRESS
;BITS 7-0 SYSTEM FAULT CODE IF LEFT BYTE IS ZERO
; SEE THE 2561 OEM MANUAL FOR MEANING OF FAULT CODES
DEFSYM DSCSTS=DL10AR+64 ;STATUS BITS AS FOLLOWS
DEFSYM %DSRTR==100000 ;COMMAND WAS RETRIED
DEFSYM %DSECH==40000 ;UNCORRECTABLE DATA ERROR (ECC HARD)
DEFSYM %DSECC==20000 ;CORRECTED DATA ERROR
DEFSYM %DSIDE==10000 ;ID ERROR
DEFSYM %DSHCE==4000 ;ADDRESS ERROR (HEADER COMPARE ERROR)
DEFSYM %DSPRT==2000 ;WRITE-PROTECT STATUS OF SECTOR (ABORTS WRITE COMMAND)
DEFSYM %DSALT==1000 ;ALTERNATE-SECTOR STATUS (ABORTS READ, WRITE, AND CHECK)
DEFSYM %DSOVR==400 ;FIFO OVER-RUN, NOT CORRECTED BY 1 RETRY
DEFSYM %DSSKE==200 ;SEEK ERROR FROM DRIVE
DEFSYM %DSOFL==100 ;DRIVE OFF-LINE OR FAULT
DEFSYM %DSFLT==20 ;DRIVE FAULT
DEFSYM %DSNXM==10 ;NXM ON PDP11 MEMORY
DEFSYM %DSPAR==4 ;PARITY ERROR IN PDP11 MEMORY
DEFSYM %DSSFL==2 ;SYSTEM FAULT, SEE LOW BYTE OF DSCFLT
DEFSYM %DSWLK==1 ;DRIVE WRITE-LOCKED, WRITE ABORTED
DEFSYM DSCCMD=DL10AR+65 ;COMMAND CODE AS FOLLOWS
DEFSYM %DMSNS==2 ;SENSE DRIVE STATE. DSCSTS GETS CODE FOR DRIVE TYPE IN
; BITS 14-8 (10 FOR T-300), AND %DSWLK, %DSFLT, %DSOFL, %DSSKE
DEFSYM %DMTST==3 ;TEST SPECIFIED DRIVE (RUNS DIAGNOSTICS)
DEFSYM %DMREC==4 ;RECALIBRATE
DEFSYM %DMSEK==5 ;SEEK
DEFSYM %DMWRT==6 ;WRITE DATA
DEFSYM %DMRED==20 ;READ DATA. ADD 1-10 FOR VARIOUS RECOVERY FEATURES AS
; DOCUMENTED IN THE 2561 OEM MANUAL.
DEFSYM DSCDRV=DL10AR+66 ;DRIVE NUMBER (0 IS FIRST DRIVE ON 11)
DEFSYM DSCCYL=DL10AR+67 ;CYLINDER NUMBER
DEFSYM DSCHED=DL10AR+70 ;HEAD NUMBER
DEFSYM DSCSEC=DL10AR+71 ;SECTOR NUMBER
DEFSYM DSCPNT=DL10AR+72 ;4 12-BIT BYTE POINTERS TO DATA TO TRANSFER
IFN $$TEMP,EXPUNG DEFSYM

3629
src/system/tcp.275 Executable file

File diff suppressed because it is too large Load Diff

575
src/system/tcpbuf.58 Executable file
View File

@@ -0,0 +1,575 @@
COMMENT |
Notes on TCP input and output buffers
Ideally the TCP segment queues should be logically separate from the IP
datagram queues, but for efficiency it should be possible to have them
both together.
Input buffers are expected to be lists of datagrams/segments.
This is reasonably simple, since pointers (in known places) can just be
set up to the data (whereever it is in the datagram/segment).
There is a problem with allocation/windows in this scheme, since it
is possible to run out of datagram buffers before running out of window,
if the remote site becomes cretinous about it and sends only a few
bytes per dgram very fast. But in that case re-transmission can just
force it to buffer up its output, so that future dgrams will be somewhat
more filled, so it is probably OK. If this does become a screw, can
add code to do compaction at clock level.
Output buffers are a little more uncertain. Could have simple
circular buffer, with appropriate pointers set up so that IMP output
message is read directly from the buffer (same as NCP). Alternatively
could have queue of segments/datagrams all ready to go. Guess I'd
like to try doing the latter, to keep things "simple" by minimizing
the number of kinds of things floating around.
Problem with putting output datagram together: can't always predict
ahead of time how big the leaders are going to be! Especially true
for IP level, which TCP is not supposed to know too much about. Thus
if not careful, it could happen that output is put into a segment too
close to the start of the buffer, so that there is not enough room for
the TCP and IP headers to fit in. Have to look at this; may need to
give up notion of keeping all the packet internals nicely contiguous.
Maximum IP header length is set at 60 bytes (15 words). The maximum
TCP header length is also 15 words.
Looking at the currently defined options, it seems unlikely that ITS
will use any of them, and if so, they can be predicted fairly easily on
a per-connection basis, so things should work out okay. Note that
the IP level can always simply fragment stuff if it really wants to be
that complex.
It would be nice to be able to keep track of stuff which is on the
device (IMP) output queue but hasn't yet gone out, in order to add
last-minute bits (like ACK) or even some more data. Idea: output "queue"
is just a list of TCP connections that need attention, so can always
go in and mung stuff (even change mind about outputting) just by playing
with connection flags/lists. This is basically how NCP does it.
Re packet buffer design:
Somewhat more hypothetical is the notion of keeping a "usage
count" for each buffer, so that pointers from the packet table entries
can point to several different buffers and not just one. When a usage
count hits zero, put the buffer on the freelist. Actually this is not
really needed for the case of a table entry pointing to more than one
buffer, but it IS needed for the case of more than one table entry
pointing to the same buffer. This might happen, for example, if
an internet bypass were set up so that datagrams going to ourselves
were simply vectored directly to the input queues. But for the
time being, it probably isn't too outrageous to simply re-copy the
datagram in question. (Also better emulates a fake network device).
Suggest that lists point directly to themselves rather than
to start of entry; this allows low-level list routines to be used
on all lists. The higher-level routines of course have to know what
offsets to use for a specific list. Alternatively provide different routines
for each offset needed, and equate references to the appropriate routine
for each use. (This is what I'm trying at the moment, hence the IRPS)
May want to use format <head>,,<list ptr> where <head> is the addr
of the initial pointer (not initial node). This allows backtracking
to figure out what TCP connection or IP queue a packet belongs to.
Brute force approach is to simply have another word for the TCB index, etc.
If this stuff is general enough it could be used for CHAOS packets also.
|
COMMENT |
-- Lots of this is wrong now... --
Buffers are all 256 (400 octal) words long, and 4 of them fit on one
ITS page. This size was chosen because the maximum length of an IMP
message (not counting IMP-Host padding) is 255 words of 4 8-bit bytes
per word. This allows one extra word; not much. Taking away the
3 IMP leader words (which has to be done anyway for NCP to continue
working) gives us 4 spare words per buffer.
This still may not be enough. Rather than shoe-horn some clever stuff
into each buffer header, I am opting to maintain "Packet Entries" in a
"Packet Table" separate from the "Packet Buffers" themselves. All
messages/datagrams/segments/packets are identified by a pointer
into the table. (Could use index, as for sockets/TCBs, but this is
awkward for lists). The entry identified by the pointer will contain
the actual pointers into the buffer associated with that packet.
[NOTE: may want to have these pointers point into various places, not
necessarily all the same buffer. Must think about this.]
Free buffers are linked by a freelist pointer in their first word,
with an identifier in the second word to help GC. The only design
issue for the buffers themselves is how to set things up so that it is
easy to GC a large freelist, i.e. identify pages that have nothing
but free buffers in them and thus can be removed from the system's
address space. Currently I have simply adopted the strategem used for
CHAOS buffers (at CHCLN) to have the core job snuffle over the freelist.
Note that the low-level routines for manipulating lists are actually
referenced via macros which are given an offset as argument. This
offset refers to the offset between the node pointer and the location
of the "next" pointer in the node; the macro will assemble into a
call to the right routine for that offset. Currently only offsets
up to 2 are supported; any lists that the packet is put on must
be threaded through the first 3 words of the node, and the macros check
for this.
|
SUBTTL Packet Tracing Code
IFNDEF PKTTRC,PKTTRC==:0 ; Nonzero turns tracing code on
IF1,IFN PKTTRC,.ERR IP packet tracing code included.
COMMENT |
This code can be used to keep a history of what happens to a packet.
The history is stored in the packet buffer as a series of indexes
into a table of named events.
To trace a particular event use the TRCPKT macro.
TRCPKT(REG,"String")
REG is the register which currently contains an index to the packet
buffer table. The code is more efficient if the register is R. String
is the description of the event.
To generate the event table, you must call the TRCCOD macro somewhere
after the last call to TRCPKT.
|
%NTRCE==:77 ; Allow this many trace events. Value must be a bit mask (all
; ones) to work right. If you make it bigger than 77
; you have to change the "TRC%" in the macros to something
; shorter, too.
%%%TRC==1
; TRCCOD generates TRCTBL, which holds <code address,,address of event string>
; for each trace event.
DEFINE TRCCOD
IFN PKTTRC,[
TRC%0==:<0,,[ASCIZ /Null event/]>
TRCTBL: REPEAT %%%TRC,CONC TRC%,\.RPCNT
IF2, REPEAT %%%TRC,CONC EXPUNGE TRC%,\.RPCNT
]
TERMIN
DEFINE TRCPKT REG,&(EVENT)
IFN PKTTRC,[
IFG %%%TRC-%NTRCE,.ERR Too many packet trace events!
CONC TRC%,\%%%TRC,==:<.,,[ASCIZ EVENT]>
IFN REG-R,[
PUSH P,R
MOVE R,REG
]
PUSH P,TT
MOVEI TT,%%%TRC
PUSHJ P,PKTPTS
POP P,TT
IFN REG-R,[
POP P,R
]
%%%TRC==%%%TRC+1
]
TERMIN
IFN PKTTRC,[
; Store information in the packet history data buffer
; "Information" is a 6-bit quantity which indexes into a table
; of strings.
; TT/ Reason index
; R/ Pkt Buffer index
PKTPTS: CONO PI,PIOFF ; Freeze machine
DPB TT,PK.HSP(R) ; Store trace info
IBP PK.HSP(R) ; Bump BP
HRRZ TT,PK.HSP(R) ; Pick up history byte ref (address only)
CAIL TT,PK.HSP(R) ; If we've gotten to the bottom,
JRST [ MOVEI TT,PK.HST(R) ;Wrap around
HRLI TT,(<.BP %NTRCE_30.>) ; BP to left 6 bits
MOVEM TT,PK.HSP(R) ;Reset it to top
JRST .+1 ]
CONO PI,PION
POPJ P,
]
;;; Packet Table Entries
EBLK
IFNDEF PKBSIZ,PKBSIZ==1000 ; 512. words per packet buffer (2048 byte MTU)
IFNDEF NPKPGS,NPKPGS==40. ; # pages OK to use for packet buffers
NPKB==:<NPKPGS*<2000/PKBSIZ>> ; # packet buffers available
NPKE==:NPKB ; # packet entry nodes.
IFN NPKB-NPKE,.ERR You must fix the UFLS at PKTGF.
PKETBL: OFFSET -.
; General (device driver, etc)
PK.FLG:: 1,,PKETBL+PK.L ; General - <flags>,,<PE freelist or dev driver list>
%PKPIL==:<SETZ> ; Packet locked at PI level, being output
%PKODN==:<1000,,> ; Packet has been output (else not yet)
;;; %PKNOF==:<2000,,> ; Packet should not be freed when output done.
%PKFLS==:<4000,,> ; Flush pkt if seen on output queue (ie dont output)
%PKRTR==:<10000,,> ; Packet is being re-transmitted by TCP
.SEE %PQFLX ; Low bits of LH used for on-list flags.
PK.IP:: 0 ; IP Datagram - <IP Header ptr>,,<IP Datagram list>
; May be strung on Internet Queue, IP output queue
PK.TCP:: 0 ; TCP Segment - <TCP Header pointer>,,<TCP Segment list>
; May be strung on TCB input Q, output retransmit Q
PK.TCI:: 0 ; TCP Segment - <# bytes data><# bytes offset><TCB index>
PK%TDL==:<777700,,0> ; # octets of data in TCP segment
PK%TDO==:< 77,,770000> ; # octets data is offset from TCP header
PK%TCB==:< ,,007777> ; TCB connection index
PK$TDL==:<.BP PK%TDL,PK.TCI>
PK$TDO==:<.BP PK%TDO,PK.TCI>
PK$TCB==:<.BP PK%TCB,PK.TCI>
PK.BUF:: 0 ; General - <# wds>,,<addr of buffer>
PK.TIM:: 0 ; General - Time sent or received, int level (Sys time)
PK.DST:: 0 ; Immediate destination address if on output queue
PK.HWI:: 0 ; Hardware Information - currently KS Unibus address
IFN PKTTRC,[
PK.HST:: BLOCK 3 ; Packet trace history buffer
PK.HSP:: 0 ; Packet trace history pointer
]
PK.L:: OFFSET 0 ; Length of a Packet-Entry (PE) node
REPEAT <NPKE-1>,[
IFN .RPCNT-<NPKE-2>, 1,,.+PK.L ; Build initial freelist
.ELSE 1,,0
BLOCK PK.L-1
]
PKETBE==:.-PK.L ; Last legal PE pointer value
PKEQHF: PKETBE,,PKETBL ; Header for Packet-Entry node freelist
BBLK
; A "queue" is a list of nodes pointed to by a "queue header" word
; of format <last node>,,<first node>. Each node pointer points to
; the next node pointer (or zero if no more).
; There is a set of flags in the LH of a certain word, at offset
; PQ.FLG, that indicate which lists a node is currently on.
PQ.FLG==:PK.FLG ; Offset of word list-flags are in.
%PQFLX==0 ; Initial val
IFNDEF %%%QOF,%%%QOF==0 ; This gets set to highest offset supported
IRPS PKQGF,,[PKQGF0:PKQGF1:PKQGF2:]PKQPL,,[PKQPL0:PKQPL1:PKQPL2:]PKQPF,,[PKQPF0:PKQPF1:PKQPF2:]%PQFL,,[%PQFL0:%PQFL1:%PQFL2:]
IFG .IRPCNT-%%%QOF,%%%QOF==.IRPCNT
%PQFL==:<1_.IRPCNT,,> ; Def a flag in LH at offset PQ.FLG
%PQFLX==%PQFLX\%PQFL ; Mask of all list-flags def'd.
; PKQGF - Get first node from queue
; Q/ addr of queue header
; A/ addr of node (zero if none)
PKQGF: CONO PI,PIOFF ; Work at all levels
HRRZ A,(Q) ; Get 1st from queue header word
JUMPE A,PIONJ ; None, so return zero.
MOVSI T,(%PQFL) ; Now clear appropriate flag for list
XORB T,PQ.FLG(A) ; to indicate it's not on it any more.
TLNE T,(%PQFL) ; Paranoia plus
BUG HALT,[PK: GF node wasnt on list]
HRRZ T,.IRPCNT(A) ; Get 2nd
HRRM T,(Q) ; Make it 1st
CAIN T, ; If all's well, done.
SETZM (Q) ; Else must clear whole header
IFNDEF PIONJ,PIONJ:
CONO PI,PION
POPJ P,
; PKQPL - Put node on queue as last thing.
; Q/ addr of queue header
; A/ addr of node
PKQPL: TRNN A,-1 ; More paranoia
BUG HALT,[PK: zero node ptr]
HLLZS .IRPCNT(A) ; Say this node is last one
CONO PI,PIOFF ; Work at all levels
MOVSI T,(%PQFL) ; Paranoia: Set appropriate flag for list
XORB T,PQ.FLG(A) ; to indicate it's on it now.
TLNN T,(%PQFL) ; plus check...
BUG HALT,[PK: node already on list]
HLRZ T,(Q) ; Get last node
HRLM A,(Q) ; Point to new last node
JUMPN T,[HRRM A,.IRPCNT(T) ; Make prev last node point to new last
JRST .+2] ; Skip over next instr!!
HRRM A,(Q) ; Queue was empty, make this the new first too
CONO PI,PION
POPJ P,
; PKQPF - Put node on queue as first thing.
; Q/ addr of queue header
; A/ addr of node
PKQPF: TRNN A,-1 ; Yes more paranoia
BUG HALT,[PK: zero node ptr]
CONO PI,PIOFF
MOVSI T,(%PQFL) ; Paranoia: Set appropriate flag for list
XORB T,PQ.FLG(A) ; to indicate it's on it now.
TLNN T,(%PQFL) ; check...
BUG HALT,[PK: node already on list]
HRRZ T,(Q) ; Get first thing
CAIN A,(T) ; paranoia, avoid loops to self
BUG
HRRM T,.IRPCNT(A) ; Make it second thing
HRRM A,(Q) ; Make new first thing
CAIN T,
HRLM A,(Q) ; Was empty, also make it last thing.
CONO PI,PION
POPJ P,
TERMIN
; Define PKQGF, etc so that they actually reference PKQGF0, etc as
; appropriate for the given offset.
IRP RTN,,[PKQGF,PKQPF,PKQPL]
DEFINE RTN ?OFFST=0,
CONC RTN,\OFFST
IFG OFFST-%%%QOF,.ERR RTN used with bad offset
TERMIN
TERMIN
; PKEGF - Get a free Packet-Entry node
; Clears node contents.
; Clobbers Q,T
; Returns A/ PE ptr (0 if none)
PKEGF: MOVEI Q,PKEQHF
IFE PKTTRC,[
CALRET PKQGF ; Get a node
]
IFN PKTTRC,[
CALL PKQGF
JUMPE A,CPOPJ ; No packet
SETZM PK.HST(A)
SETZM PK.HST+1(A)
SETZM PK.HST+2(A)
MOVEI Q,PK.HST(A) ; Build byte ref to history trail
HRLI Q,(<.BP %NTRCE_30.>) ; (dpb ref)
MOVEM Q,PK.HSP(A) ; save ref
POPJ P,
]
; PKERT - Return a Packet-Entry node to freelist
; A/ PE ptr to node
; Clobbers Q,T
PKERT: MOVEI Q,PKEQHF ; Use Packet-Entry freelist
CALRET PKQPF ; Put back on start of list.
; Note that all MP calls to the routines below which allocate or free
; entries/buffers must be sure not to block (page fault or UFLS)
; while any "loose" entries/buffers exist (not pointed to by any list)
; unless there something on the PCLSR locked-switch list which will return the
; currently "loose" entry/buffer to its freelist -- otherwise
; it is possible for "loose" stuff to slowly accumulate.
; PKTGF - Get a free Packet-Entry node and Packet Buffer. Hangs until
; it wins. Note that it depends on fact there is one PE node
; for every packet buffer, and vice versa! If this becomes untrue
; then the way it UFLSes should be fixed up.
; PKTGFI - version that skips if wins, doesn't hang.
; Returns A/ PE ptr Clobbers Q,T
PKTGF: SKIPN PKEQHF ; Fast check, see if any packet entries/buffers free
CALL UFLS ; Nope, hang until something turns up.
CALL PKTGFI ; Get a entry/buffer!
JRST PKTGF ; None? Sigh, go hang.
RET
PKTGFI: CALL PKEGF ; Get a free node
JUMPE A,CPOPJ
PUSH P,A ; Save pointer to it
PKTGF1: CALL PKBGF ; Get a free buffer
JUMPN A,PKTGF8 ; Jump if found one right away!
CALL PKBAL ; None left on freelist, try to allocate more.
CAIA ; Sigh, failed.
JRST PKTGF1 ; Won, go pluck a buffer from freelist.
; Lost, can't get any more buffers.
POP P,A ; None available, take non-skip return
CALRET PKERT ; Put PE node back on its freelist.
; Won, store buffer pointer in PE.
PKTGF8: MOVE T,A
POP P,A ; Restore PE ptr
MOVEM T,PK.BUF(A)
MOVE T,PQ.FLG(A) ; Paranoia dept, verify not on any lists.
TLNE T,(%PQFLX)
BUG HALT,[PK: Freelist node not free!]
SETZM PK.FLG(A) ; Zap all other entries in packet node.
SETZM PK.IP(A)
SETZM PK.TCP(A)
SETZM PK.TCI(A)
SETZM PK.TIM(A)
AOS (P) ; Win, skip on return!
RET
; PKTRT - Return both a Packet-Entry and its associated buffer to freelist
; only if check shows that it doesn't belong to any lists.
; PKTRTA - Always return to freelist. If check shows that it is still
; on some list, bad error!
; Clobbers A,Q,T
; A/ PE ptr (must be off all lists)
PKTRTA: CAIL A,PKETBL ; Paranoia check for legal pointers
CAILE A,PKETBE
BUG HALT,[PK: Bad PE pointer]
MOVE T,PQ.FLG(A)
TLNE T,(%PQFLX\%PKPIL) ; On list or locked at I/O PI level?
BUG HALT,[PK: Freeing packet still in use!]
JRST PKTRTX ; Nope, can proceed to put on freelist.
PKTRT: CAIL A,PKETBL ; Paranoia check for legal pointers
CAILE A,PKETBE
BUG HALT,[PK: Bad PE pointer]
MOVE T,PQ.FLG(A)
TLNE T,(%PQFLX\%PKPIL) ; On a list or locked by interface PI level?
RET ; Yes, don't return to freelist yet.
PKTRTX: PUSH P,A ; Save PE ptr
SKIPE A,PK.BUF(A) ; Get buffer pointer associated with PE
CALL PKBRT ; Return the buffer
POP P,A
SETZM PK.BUF(A) ; Ensure buffer pointer zapped.
CALRET PKERT ; Then return the packet entry
; PKTPCL - Return a packet entry/buffer while PCLSR'ing.
; This is the standard LOSSET routine to use.
; A must hold the PE ptr at time of the block (which we are backing
; out of).
; Must only clobber A and T!!
PKTPCL: MOVE A,AC0S+A(U) ; Get ac A at time of the block
PUSH P,Q ; Mustn't clobber Q
CALL PKTRT ; Return the entry/buffer (clobbers Q,T)
JRST POPQJ
EBLK
PKBNF: 0 ; # free Packet Buffers
PKBNT: 0 ; # total Packet Buffers
PKBCTM: 0 ; Time of last no-more-core complaint
PKBQHF: 0 ; Queue Header for buffer freelist
PKBQHC: 0 ; Queue Header for core job cleanup
BBLK
; PKBGF - Get a free Packet Buffer
; Clobbers Q,T
; Returns A/ PB ptr (0 if none)
PKBGF: MOVEI Q,PKBQHF ; Point to buffer freelist
CALL PKQGF ; Get first thing off it
JUMPE A,CPOPJ ; If got nothing, just return.
SETZM 1(A) ; Aha, got it! Flush free-buffer identifier.
SOS PKBNF ; Decrement # free packet buffers.
RET
; PKBRT - Return a Packet Buffer to freelist. Puts back at END of freelist,
; as PKBCLN clean-up depends on this.
; Clobbers Q,T
PKBRT: SETZM (A) ; Paranoia aid - clear "flags" in LH of 1st wd.
; Otherwise PKQ routines complain.
MOVE T,[SIXBIT /BRUNCH/]
MOVEM T,1(A) ; Set up free-buffer identifier
AOS PKBNF ; Increment # free packet buffers.
MOVEI Q,PKBQHF ; Point to buffer freelist
CALRET PKQPL ; Put it back on, at end.
; PKBRTL - Return a list of Packet Buffers to freelist
; Q/ ptr to queue header of list
; Clobbers A,T
PKBRTL: CALL PKQGF ; Get first thing off list
JUMPE A,CPOPJ
PUSH P,Q
CALL PKBRT ; Return it to buffer freelist
POP P,Q
JRST PKBRTL
; PKBAL - Allocate more Packet Buffers
; Clobbers A,Q,T
; Returns .+1 if lost
; .+2 if won (must still call PKBGF to get a buffer from list)
PKBAL: PUSH P,B
CONI PI,Q ; Save PI channel-on status
ANDI Q,177
CONO PI,UTCOFF ; Make the world safe for IOMQ
MOVE B,PKBNT ; Check total # of buffers so far
CAIL B,NPKB ; Make sure we're not already using max allowed
JRST PKBAL4 ; Ugh, already at max! Go complain.
PUSHJ P,IOMQ ; Get 1K of memory
JRST PKBAL3 ; Mem not available, fail
CONO PI,PICON(Q) ; Won, restore PI status
MOVEI B,MUPKT ; Set page type = packet
DPB B,[MUR,,MEMBLT(A)]
LSH A,10. ; Turn allocated page # into mem address
HRLI A,-<2000/PKBSIZ> ; Make AOBJN into page (# buffers per page)
PKBAL2: PUSHJ P,PKBRT ; Put them all on free list
ADDI A,PKBSIZ-1
AOBJN A,PKBAL2
MOVEI B,<2000/PKBSIZ> ; This many more buffers have been created
ADDM B,PKBNT ; Increase total (PKBNF bumped by PKBRT)
POP P,B
AOS (P) ; Take win return.
RET
; Here if packet stuff trying to use up too much core
PKBAL4: MOVE B,PKBCTM ; Don't complain too often
ADDI B,60.*30. ; Just once a minute
CAMLE B,TIME
JRST PKBAL3
BUG CHECK,[PACKET NET ATTEMPTING TO USE TOO MUCH CORE]
MOVE B,TIME
MOVEM B,PKBCTM
PKBAL3: CONO PI,PICON(Q) ; Lost, restore PI status
POP P,B
POPJ P, ; and take error return.
; PKBCLN - Called only by core job, to clean up packet buffers.
; Smashes all ACs.
PKBCLN: SKIPE A,PKBNT ; See if 2/3 or more of buffers free
SKIPN B,PKBNF
POPJ P, ; No buffers or none free, nothing to do
SUBM A,B
IDIV A,B ; Get ratio of total to used
CAIGE A,3 ; Note if B is zero, A is unchanged
POPJ P, ; and at least 32.
IFL TSYSM-256., MOVEI D,TSYSM-1 ; Scan memory for packet buffer pages
.ELSE MOVEI D,255.
PKBCL0: LDB A,[MUR,,MEMBLT(D)]
CAIE A,MUPKT
PKBCL4: SOJGE D,PKBCL0
JUMPL D,CPOPJ
MOVE A,D ; Quickly determine if any non-free buffers
LSH A,10. ; on this page
HRLI A,-<2000/PKBSIZ>
MOVE T,[SIXBIT/BRUNCH/]
PKBCL5: CAME T,1(A)
JRST PKBCL4 ; Not free, don't bother with slow stuff
ADDI A,PKBSIZ-1
AOBJN A,PKBCL5
SETZB C,PKBQHC ; Collect all free buffers on this page
MOVE E,PKBNF ; Loop about as many times as there are free buffers
PKBCL1: PUSHJ P,PKBGF ; Get next free buffer
JUMPE A,PKBCL2
LDB B,[121000,,A]
CAMN B,D
JRST [ MOVEI Q,PKBQHC ; This one's on the page, save it
PUSHJ P,PKQPL
AOJA C,.+2 ] ; Count them
PUSHJ P,PKBRT ; Not on the page, put back. This depends on
; the fact PKBRT puts back at END of list!
SOJG E,PKBCL1
PKBCL2: CAIE C,<2000/PKBSIZ> ; Did we get the whole page?
JRST [ MOVEI Q,PKBQHC ; No, must punt this one, and
PUSHJ P,PKBRTL ; return all the buffers we saved up.
JRST PKBCL4]
MOVNS C ; Yes, get rid of these buffers
ADDM C,PKBNT ; Decrement total # of buffers in use
MOVE A,D
PUSHJ P,MEMR ; Flush the page from addr space
JRST PKBCLN ; Back to flush more, until quota done.

343
src/system/time.950 Executable file
View File

@@ -0,0 +1,343 @@
;I T S .OPERS RELEVANT TO REAL TIME
;.PDTIME AC, ;RETURNS PDUPS*<# SECS SINCE BEGINNING OF YEAR>
APDTIM: PUSHJ P,GPDTIM
JRST RETM1 ;-1 IF NOT KNOWN
JRST APTUAJ
;.RDATE AC, ;RETURNS SIXBIT YYMMDD IN AC
ARDATE: PUSHJ P,GLPDTM ;GET LOCALIZED PDTIME
JRST RETM1 ;NOT AVAILABLE
IDIVI A,SPD ;GET # DAYS SINCE BEGINNING OF YEAR
PUSHJ P,RDATE ;GET THE ANSWER
JRST APTUAJ ;RETURN IT
;.RTIME AC, ;RETURNS SIXBIT HHMMSS (24 HOUR TIME) IN AC
ARTIME: PUSHJ P,GLPDTM ;GET LOCALIZED PDTIME
JRST RETM1 ;NOT AVAILABLE
IDIVI A,SPD ;GET # SECS SINCE MIDNIGHT IN B
PUSHJ P,RTIME ;CONVERT TO SIXBIT HHMMSS
JRST APTUAJ ;RETURN IT
;.RDATIM AC, ;DOES .RTIME TO AC, .RDATE TO AC+1
ARDATI: PUSHJ P,GLPDTM ;GET CRUD
JRST RETM1 ;NO LUCK (THIS IS GETTING BORING)
IDIVI A,SPD ;CONVERT TO DAYS AND SECONDS
HRLM A,(P) ;SAVE DAYS ON PDL
PUSHJ P,RTIME ;GET TIME (HHMMSS)
UMOVEM A,(J) ;GIVE TO USER
HLRZ A,(P) ;GET DAYS AGAIN
PUSHJ P,RDATE ;CONVERT TO SIXBIT
AOJA J,APTUAJ ;GIVE TO USER AND RETURN
;.RYEAR AC, ;PUSHJ'S TO RYEAR AND MOVEM'S E TO AC
ARYEAR: PUSHJ P,RYEAR ;GET THE CRUFT
UMOVEM E,(J) ;STORE YEAR AND CRUD
POPJ P,
;.RLPDT AC, ;DOES .RYEAR AC+1, AND ALSO MOVEM'S A TO AC
ARLPDT: PUSHJ P,RYEAR ;GET THE CRUFT
UMOVEM E,1(J) ;STORE YEAR AND CRUD
JRST APTUAJ ;STORE TIME AND RETURN
;ROUTINE TO RETURN -1 ON AN OPER
RETM1: XCTR XRW,[SETOM (J)]
POPJ P,
;GET THE CORRECTED PDUPS*<# SECS SINCE BEGINNING OF YEAR> IN A
;SKIP IF OFFSET AVAILABLE AND CLOCK ON
GPDTIM:
IFN PDCLKP,[
SKIPN A,PDTIME ;GET THE OFFSET
JRST GPDTM2 ;NOT AVAILABLE
DATAI PDCLK,B ;GET WHAT THE CLOCK IS SAYING
TLZ B,600000
JUMPE B,GPDTM2 ;POWER PROBABLY (BUT NOT NECESSARILY) TURNED OFF
SUBM B,A ;DO THE CORRECTION
JUMPL A,CPOPJ ;LOST, DON'T RETURN A NEGATIVE NUMBER!
JRST POPJ1 ;EXIT SKIPPING (SUCCESS)
] ;PDCLKP
IFN KS10P,[
SKIPN PDTIME ; Offset available?
JRST GPDTM2 ; No: Try backup
RDTIM A ; Read clock into A!B
TLC A,1729. ; "A most interesting number"
TLNE A,-1 ; Does the clock look like it has been set?
JRST GPDTM2 ; Must have been reset
DIVI A,KSFREQ ; Convert to 60ths
SUB A,PDTIME ; Subtract offset
JUMPL A,CPOPJ ; Wooops, don't return a negative number! (Why
; don't we use the backup in this case?)
JRST POPJ1
] ;KS10P
GPDTM2: SKIPGE A,PDYTIM ;CLOCK NOT ON, TRY BACKUP
POPJ P, ;SORRY, NOT AVAILABLE
IMULI A,30. ;CONVERT TO SIXTIETHS OF A SECOND
JRST POPJ1 ;CALL IT CORRECT AND AVAILABLE
;GET SIXBIT YYMMDD (DATE) IN A (LOCALIZED PDTIME/SPD IN A, YEAR IN RH(E))
RDATE: PUSHJ P,RDATE1 ;GET DAY IN C, MONTH IN B
MOVE T,[1400,,A];SET UP BYTE POINTER FOR OUTPUT
PUSHJ P,RDATM1 ;DEPOSIT DAY
MOVE C,B ;GET MONTH
PUSHJ P,RDATM1 ;DEPOSIT MONTH
MOVEI B,(E) ;GET YEAR
IDIVI B,100. ;GET LAST TWO DIGITS IN C
ARTIMX: PUSHJ P,RDATM1 ;DEPOSIT YEAR (ENTRY FROM RTIME TO DEPOSIT HOUR)
IOR A,[SIXBIT /000000/] ;CONVERT TO REAL SIXBIT
POPJ P,
;GET MONTH (1 => JAN) IN B, DAY (1 => THE FIRST) IN C
RDATE1: AOS C,A ;GET DAY OF YEAR (LOCALIZED) (1 => THE FIRST)
MOVEI B,12. ;INITIALLY ASSUME DECEMBER FOR MONTH
CAMG C,LMNTBL-1(B) ;IF DAY IN YEAR .LE. DAY IN YEAR AT BEGINNING OF THIS MONTH,
SOJA B,.-1 ;THEN DECREMENT TO PREVIOUS MONTH AND TRY AGAIN
SUB C,LMNTBL-1(B) ;C(C) := DAY OF MONTH
POPJ P,
LMNTBL: MNIRP [<M 1>] ;TABLE OF DAYS GONE BY AT BEGINNING OF MONTH
;GET THE SIXBIT TIME IN A (# SECS SINCE MIDNIGHT IN B)
RTIME: MOVE T,[1400,,A];SET UP BYTE POINTER FOR OUTPUT
IDIVI B,60. ;GET SECONDS IN C
PUSHJ P,RDATM1 ;DEPOSIT INTO A
IDIVI B,60. ;GET HOURS IN B, MINUTES IN C
PUSHJ P,RDATM1 ;DEPOSIT MINUTES
MOVE C,B ;GET HOURS IN C
JRST ARTIMX ;DEPOSIT HOURS, CONVERT TO SIXBIT, AND RETURN
;DEPOSIT C(C) AS TWO SIX BIT (AS OPPOSED TO SIXBIT) DECIMAL DIGITS
; VIA T (INTO A) THEN DECREMENT T
RDATM1: IDIVI C,10. ;SEPARATE DIGITS
DPB C,[60600,,D] ;DEPOSIT FIRST DIGIT TO GIVE 12 BITS
DPB D,T ;OUTPUT BYTE
ADD T,[140000,,] ;DECREMENT BYTE POINTER
POPJ P, ;THAT'S ALL
;DO A PUSHJ P,GLPDTM THEN HACK AROUND
;DO THOSE THINGS TO E COMMENTED IN GLPDTM AS BEING DONE BY RYEAR
;TRY TO GET YEAR EVEN IF GLPDTM DOESN'T SKIP, BUT IN THAT CASE CLOBBER A TO -1
RYEAR: PUSHJ P,GLPDTM ;GET THE CRUFT
JRST RYEAR2 ;DIDN'T SKIP, SEE WHAT CAN BE SALVAGED
RYEAR1: PUSH P,A ;PROTECT A FROM FUTURE CLOBBERAGE
IDIVI A,SPD ;GET LOCALIZED # DAYS SINCE BEGINNING OF YEAR
JUMPL E,[SOJA A,.+1] ;DE-LOCALIZE
LDB B,[270300,,E] ;DAY OF WEEK OF BEGINNING OF YEAR
ADD A,B ;ADD IN
IDIVI A,7 ;GET TODAY'S DAY OF WEEK (0 => SUNDAY) IN B
DPB B,[320300,,E] ;DEPOSIT IN E
TLO E,40000 ;DOCUMENT FACT THAT TIME OF YEAR KNOWN
JRST POPAJ ;RESTORE A AND RETURN
RYEAR2: PUSHJ P,GDWOBY ;GLPDTM DIDN'T SKIP, TRY TO SALVAGE CRUFT: FIRST DOWOBY
MOVNI A,1 ;DOCUMENT FACT THAT TIME OF YEAR NOT KNOWN
JUMPE E,CPOPJ ;RETURN IF YEAR NOT KNOWN EITHER
DPB B,[270300,,E] ;DAY OF WEEK OF BEGINNING OF YEAR
JRST CMPF29 ;SEE IF LEAP YEAR, AND RETURN
;NOTE: THE SYMS JAN, FEB, MAR, ETC. ARE DEFINED AFTER (AND BY) MNIRP (A MACRO)
;INCREMENT YEAR
NUPDT: TLNN E,200000 ;SEE IF LEAP YEAR
SKIPA A,[<365.*SPD*PDUPS>] ;NORMAL YEAR
MOVE A,[<366.*SPD*PDUPS>] ;LEAP YEAR
ADDM A,PDTIME ;UPDATE PDCLK OFFSET
IDIVI A,30. ;CONVERT TO HALF-SECONDS
EXCH A,PDYTIM ;ALSO UPDATE BACKUP SYSTEM
SUBM A,PDYTIM
AOS FYEAR ;INCREMENT YEAR
;INSERT OTHER CRUFT HERE IF DESIRED
;DROPS THROUGH
;CODING DROPS THROUGH FROM PREVIOUS PAGE
;GET "LOCALIZED" NUMBER OF SECONDS SINCE BEGINNING OF YEAR IN A
;IF DIVIDED BY # SECONDS IN A DAY,
;GIVES REMAINDER OF # SECONDS SINCE MIDNIGHT LOCAL TIME
;QUOTIENT WHEN FED TO DATE GENERATOR ROUTINE ASSUMING LEAP YEAR GIVES CORRECT DATE
;ALSO GET YEAR AND FLAGS (AS RETURNED BY .RYEAR) IN E
;1.1-2.9 => YEAR (E.G. 1969.)
;3.1-3.5 ZERO
;3.6-3.8 => DAY OF WEEK OF BEGINNING OF YEAR (0 => SUNDAY)
;3.9-4.2 ZERO (RYEAR SETS THIS BYTE TO TODAY'S DAY OF WEEK IF TIME OF YEAR KNOWN)
;4.6 ZERO (RYEAR SETS IT TO 1 IF TIME OF YEAR KNOWN)
;4.7 ONE => DAYLIGHT SAVINGS TIME IN EFFECT
;4.8 ONE => LEAP YEAR
;4.9 ONE => 365 DAY YEAR AND AFTER FEB 28
;SKIPS IF PDCLK ON AND BOTH PDTIME AND FYEAR NON-ZERO (IN OTHER WORDS IF SUCCESSFUL)
;PREVIOUS CODING DROPS THROUGH ON YEAR INCREMENT
GLPDTM: CONO PI,CLKOFF ;AVOID DOUBLE YEAR INCREMENT
SKIPE E,FYEAR ;GET YEAR IN E, SKIP IF NOT AVAILABLE
PUSHJ P,GPDTIM ;GET PDTIME, SHOULD SKIP
JRST CLKONJ ;SOMETHING NOT AVAILABLE, DON'T SKIP
IDIVI A,60. ;CONVERT TO SECONDS
PUSHJ P,CMPF29 ;MAYBE SET BIT 4.8 OR 4.9 OF E, IF 4.9 SET THEN ADD SPD TO A
CAML A,[366.*SPD] ;IF MORE THAN A YEAR HAS GONE,
JRST NUPDT ;THEN INCREMENT YEAR
CONO PI,CLKON ;TIMIMG ERROR PROBLEM GONE
PUSH P,A ;SAVE # SECONDS DURING NEXT CALL
PUSHJ P,GDWOBY ;GET DAY OF WEEK OF BEGINNING OF YEAR (0 => SUNDAY)
DPB B,[270300,,E] ;DEPOSIT IN RIGHT PLACE
POP P,A ;RESTORE A
AOS (P) ;CAUSE RETURN TO SKIP
;IF DAYLIGHT SAVINGS TIME THEN ADD 3600. TO A AND SET BIT 4.7 IN E
GLPDT2: JFCL ;POPJ FOR STD TIME
;JRST CRDDST FOR DAY LIGHT TIME
;JFCL "NORMAL"
CAML A,[<APR 1>*SPD+7200.] ;IF BEFORE 2AM APR 1,
CAML A,[<OCT 31.>*SPD+3600.] ;OR IF AFTER 1AM STANDARD TIME OCT 31,
POPJ P, ;THEN OBVIOUSLY STANDARD TIME IS IN EFFECT
CAML A,[<APR 7>*SPD+7200.] ;IF BEFORE 2AM APR 7 STANDARD TIME,
CAML A,[<OCT 25.>*SPD+3600.] ;OR IF AFTER 1AM STANDARD TIME OCTOBER 25,
JRST GLPDT3 ;THEN NOT OBVIOUS
CRDDST: TLO E,100000 ;DAYLIGHT SAVINGS TIME, SET BIT IN E
ADDI A,3600. ;CONTINUE TO LOCALIZE THE TIME THAT WILL BE RETURNED
POPJ P,
;IT IS NOW SOMETIME DURING THE WEEKS IN APR AND OCTOBER
;WHEN IT MAY BE EITHER STANDARD OR DAYLIGHT SAVINGS TIME
GLPDT3: PUSH P,A ;SAVE # SECS
CAMG A,[JUL*SPD] ;IF NOT YET JULY,
TDZA D,D ;THEN IT MUST BE APR, SET INDEX
MOVEI D,1 ;OCTOBER, SET INDEX
SUB A,CRDSB(D) ;COMPENSATE FOR 2AM OR 1AM
IDIVI A,SPD ;FLUSH SECONDS, LEAVE ONLY DAYS (IT LOOKS LIKE A LEAP YEAR, REMEMBER)
LDB C,[270300,,E] ;GET DAY OF WEEK OF BEGINNING OF YEAR IN C
JUMPGE E,.+3 ;IF REGULAR YEAR,
SOJGE C,.+2 ;THEN DE-LOCALIZE SO IT WILL RE-LOCALIZE LATER...
MOVEI C,6 ;MOD 7
ADD A,C ;ADD TO NUMBER OF DAYS
IDIVI A,7
IMULI A,7
SUB A,C ;C(A) := NUMBER OF DAYS IN YEAR BEFORE LAST SUNDAY (MAYBE TODAY)
;IF LAST SUNDAY (AS DEFINED ABOVE) IS BELOW THE "REGION OF AMBIGUITY",
;THEN IT HAS NOT YET CHANGED TO THE LATER TIME
XCT CRDTST(D) ;SKIP IF DAYLIGHT SAVINGS TIME
JRST POPAJ ;STANDARD TIME, NO CHANGES NECESSARY
POP P,A ;DAYLIGHT SAVINGS TIME, RESTORE A
JRST CRDDST ;MUNG A AND E AND RETURN
CRDSB: 7200. ;IN APR CHANGES AT 2AM EST
3600. ;IN OCTOBER CHANGES AT 1AM EST
CRDTST: CAIGE A,<APR 1>
CAIL A,<OCT 25.>
;IF LEAP YEAR THEN SET BIT 4.8 OF E
;IF NOT LEAP YEAR THEN IF AFTER FEB 28 THEN SET BIT 4.9 OF E AND ADD SPD TO A
CMPF29: TRNN E,3 ;IF LEAP YEAR, (HOPEFULLY THIS ONLY PLACE WHERE DIRECTLY CHECKED FOR LEAP YEAR)
TLOA E,200000 ;THEN SET BIT 4.8 OF E AND RETURN
CAMGE A,[<<MAR 1>-1>*SPD] ;365 DAY YEAR, IF BEFORE MARCH FIRST,
POPJ P, ;THEN RETURN
TLO E,400000 ;365 DAY YEAR AFTER FEB 28, SET BIT 4.9 OF E
ADDI A,SPD ;INCREMENT A ONE DAY
POPJ P,
;GET DAY OF WEEK OF BEGINNING OF YEAR (IN E) (0 => SUNDAY) IN B
;FOLLOWING ROUTINE HAS BEEN EXHAUSTIVELY CHECKED
GDWOBY: MOVEI A,-1(E)
IDIVI A,400.
MOVEI A,1(B)
IDIVI B,4
ADD A,B
IDIVI B,25.
SUB A,B
IDIVI A,7
POPJ P,
;SLOW CLOCK ROUTINE TO CHECK ON REAL-TIME CLOCK SYSTEM
PDCCHK: SKIPL PDYTIM ;IF BACKUP TIME (SINCE BEGINNING OF YEAR) CALCULATED,
AOS PDYTIM ;THEN UPDATE IT
SKIPGE TIMOFF ;IF TIMOFF NOT CALCULATED,
POPJ P, ;THEN RETURN
AOS A,TIMOFF ;UPDATE TIMOFF
CAMGE A,[2*SPD] ;Incremented beyond length of day?
JRST PDCCH1
SETZB A,TIMOFF ;Yes - reset it.
MOVEM A,RSWTIM ;Also reset last-resource-warning timestamp.
PDCCH1: TRNE A,64.*2-1 ;Is this a 64. second (based on TIMOFF) clock break?
POPJ P, ; No, so return.
INITIM:
IFN PDCLKP,[
SKIPN A,PDTIME ;MAYBE UPDATE BACKUP SYSTEM
JRST INITM2 ;PDTIME NOT AVAILABLE, DON'T
DATAI PDCLK,B
TLZ B,600000
JUMPE B,INITM2 ;JUMP IF CLOCK OFF
SUBM B,A
JUMPL A,CPOPJ
IDIVI A,30. ;CONVERT TO HALF-SECONDS SINCE BEGINNING OF YEAR
MOVEM A,PDYTIM ;STORE RE-CALCULATED BACKUP TIME
] ;PDCLKP
IFN KS10P,[
SKIPN PDTIME ; Update backup system?
JRST INITM2 ; Not without offset
RDTIM A
TLC A,1729.
TLNE A,-1
JRST INITM2 ; Not if clock reset
DIVI A,KSFREQ
SUB A,PDTIME ; 60ths since Jan 1
JUMPL A,CPOPJ
IDIVI A,30. ; halfs since Jan 1
MOVEM A,PDYTIM ; Store backup
] ;KS10P
INITM2: PUSHJ P,GLPDTM ;GET LOCALIZED PDTIME
POPJ P, ;SOMETHING'S MISSING
IDIVI A,SPD ;SEPARATE INTO DAYS AND SECONDS
LSH B,1 ;CONVERT TIME SINCE MIDNIGHT TO HALF-SECONDS
MOVEM B,TIMOFF ;STORE RE-CALCULATED NUMBER OF HALF-SECONDS SINCE MIDNIGHT
PUSHJ P,CLCQDT ;GET QDATE,,TIMOFF IN A
CONO PI,UTCOFF ;INHIBIT INTERRUPTS DURING THIS RITUAL
SKIPGE A,QMDRO ;GET ORIGIN OF MASTER DSK DIRECTORY
JRST UTCONJ ;DIRECTORY LOCKED
MOVE B,QACTB ;DIRECTORY CHANGED BIT FOR DSK DIRECTORY
SKIPE T,PDTIME ;GET OFFSET FOR DECORIOLIS CLOCK
CAMN T,MPDOFF(A) ;SEE IF IT MATCHES RELEVANT WORD IN DSKDIR
JRST .+3 ;MATCHES OR PDTIME NOT AVAILABLE
MOVEM T,MPDOFF(A) ;NO MATCH, CORRECT THE DSKDIR ONE
IORM B,QMDRO ;SET DIRECTORY CHANGED BIT
SKIPE T,FYEAR ;NOW DO THE SAME FOR THE YEAR,
CAMN T,MDYEAR(A) ;AND THE RELEVANT WORD IN DSKDIR
JRST .+3
MOVEM T,MDYEAR(A)
IORM B,QMDRO
JRST UTCONJ ;THAT'S ALL
CLCQDT: PUSHJ P,RDATE1 ;GET DAY OF MONTH IN C, MONTH IN B
SETZM QDATE ;INITIALIZE FOR FOLLOWING
PUSH P,E-1
PUSH P,E
MOVE E-1,FYEAR
IDIVI E-1,100.
DPB E,[330700,,QDATE] ;YEAR
POP P,E
POP P,E-1
DPB B,[270400,,QDATE] ;MONTH
DPB C,[220500,,QDATE] ;DAY
MOVE C,QDATE ;THE FIRST TIME QDATE IS SET UP,
HRR C,TIMOFF ;SET UP QDATEI = TIME SYSTEM CAME UP.
SKIPGE QDATEI
MOVEM C,QDATEI ;MECHANISM IS, SET QDATEI UNLESS ALREADY SET.
POPJ P,

151
src/system/tm03s.defs4 Executable file
View File

@@ -0,0 +1,151 @@
;;; -*- Mode: Midas -*-
.AUXIL
;;; Canonical symbol definition macro, FOO==BAR with error check.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [ $$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
$$TEMP==1
] ;IFNDEF DEFSYM
.ELSE, $$TEMP==0
;;; RH11/TM03 Interrupt vector:
DEFSYM %TMVEC==224 ;(224/4 = 45) Interrupts occur on level 6
; (high priority) on UBA #1.
DEFSYM %TMBAS==772400 ;Unibus address of first register
;;; RH11/TM03 Unibus register addresses:
DEFSYM %TMCS1=:%TMBAS ;CONTROL AND STATUS 1
DEFSYM %TM1SC==1_15. ; Special Condition
DEFSYM %TM1TE==1_14. ; Transfer Error
DEFSYM %TM1MP==1_13. ; Massbus Control Bus Parity Error
DEFSYM %TM1DA==1_11. ; Drive Available
DEFSYM %TM1A7==1_9. ; UB Address Extension Bit 17
DEFSYM %TM1A6==1_8. ; UB Address Extension Bit 16
DEFSYM %TM1RY==1_7. ; Ready
DEFSYM %TM1IE==1_6. ; Interrupt Enable
DEFSYM $TM1CM==.BP 77 ; Bits 0-5 specify commands.
DEFSYM %TM1GO==1_0. ; GO bit
;;; Commands with bit 0 (GO) included:
DEFSYM %TMNOP==1 ;No Operation
DEFSYM %TMUNL==3 ;Unload
DEFSYM %TMREW==7 ;Rewind
DEFSYM %TMCLR==11 ;Formatter clear (reset errors etc.)
DEFSYM %TMER3==25 ;Erase three inch gap
DEFSYM %TMWTM==27 ;Write Tape Mark
DEFSYM %TMSPF==31 ;Space Forward
DEFSYM %TMSPR==33 ;Space Reverse
DEFSYM %TMWCF==51 ;Write Check FOrward
DEFSYM %TMWCR==57 ;Write Check Reverse
DEFSYM %TMWRT==61 ;Write Forward
DEFSYM %TMRDF==71 ;Read Forward
DEFSYM %TMRDR==77 ;Read Data Reverse
DEFSYM %TMWC=:%TMBAS+2 ;WORD COUNT.
DEFSYM %TMBA=:%TMBAS+4 ;UNIBUS ADDRESS.
DEFSYM %TMFC=:%TMBAS+6 ;TAPE FRAME COUNT
DEFSYM %TMCS2=:%TMBAS+10 ;CONTROL AND STATUS 2.
DEFSYM %TM2DL==1_15. ; Data Late
DEFSYM %TM2UP==1_13. ; Unibus Parity Error
DEFSYM %TM2NF==1_12. ; Non-existant Formatter
DEFSYM %TM2NM==1_11. ; %TMBA is NXM during DMA
DEFSYM %TM2PE==1_10. ; Program Error
DEFSYM %TM2MT==1_9. ; Missed Transfer
DEFSYM %TM2MP==1_8. ; Massbus Data Bus Parity Error
DEFSYM %TM2OR==1_7. ; Output Ready (for Silo buffer diag.)
DEFSYM %TM2IR==1_6. ; Input Ready (for Silo buffer diag.)
DEFSYM %TM2CC==1_5. ; Controller Clear
DEFSYM %TM2PT==1_4. ; Parity Test
DEFSYM %TM2AI==1_3. ; Unibus Address Increment Inhibit
DEFSYM %TMFS=:%TMBAS+12 ;FORMATTER STATUS
DEFSYM %TMSAA==1_15. ; Attention Active
DEFSYM %TMSES==1_14. ; Error Summary
DEFSYM %TMSPP==1_13. ; Positioning in Progress
DEFSYM %TMSOL==1_12. ; Medium On-Line
DEFSYM %TMSWL==1_11. ; Write Locked
DEFSYM %TMSET==1_10. ; End of Tape
DEFSYM %TMSFP==1_8. ; Formatter Present
DEFSYM %TMSFR==1_7. ; Formatter Ready
DEFSYM %TMSSC==1_6 ; Slave Status Change
DEFSYM %TMSPE==1_5. ; Phase Encoded (1600BPI) Mode
DEFSYM %TMSSD==1_4. ; Slowing Down
DEFSYM %TMSIB==1_3. ; PE Identification Burst Detected
DEFSYM %TMSTM==1_2. ; Tape Mark detected
DEFSYM %TMSBT==1_1. ; Beginning of Tape
DEFSYM %TMSSA==1_0. ; Slave Attention (on-line)
DEFSYM %TMERR=:%TMBAS+14 ;ERROR REGISTER
DEFSYM %TMECE==1_15. ; Correctable Data/CRC Error
DEFSYM %TMEUS==1_14. ; Unsafe
DEFSYM %TMEOI==1_13. ; Operation Incomplete
DEFSYM %TMECT==1_12. ; Controller Timing Error
DEFSYM %TMENX==1_11. ; Non Executable Function
DEFSYM %TMECS==1_10. ; Correctable Skew/Illegal Tape Mark Error
DEFSYM %TMEFC==1_9. ; Frame Count Error
DEFSYM %TMENG==1_8. ; Non-standard Gap
DEFSYM %TMEFL==1_7. ; PE Format/LRC Error
DEFSYM %TMEIC==1_6. ; Incorrectable Data/Hard Error
DEFSYM %TMEMD==1_5. ; Massbus Data Parity Error
DEFSYM %TMEFS==1_4. ; Format Select Error
DEFSYM %TMEMC==1_3. ; Massbus Control Parity Error
DEFSYM %TMERM==1_2. ; Register Modification Refused
DEFSYM %TMEIR==1_1. ; Illegal Register
DEFSYM %TMEIF==1_0. ; Illegal Function
DEFSYM %TMEHD==44077 ; Hard errors - US,NX,MD,FS,MC,RM,IR,IF
DEFSYM %TMASN=:%TMBAS+16 ;ATTENTION SUMMARY.
;Each bit 7-0 corresponds to a formatter asserting ATA.
DEFSYM %TMCCR=:%TMBAS+20 ;CHECK CHARACTER REGISTER
DEFSYM %TMCDP==1_8. ; Dead Track Parity/CRC Parity
DEFSYM $TMCEI==.BP 177 ; Error Information
DEFSYM %TMBUF=:%TMBAS+22 ;DATA BUFFER REGISTER
DEFSYM %TMMNT=:%TMBAS+24 ;MAINTENANCE.
DEFSYM %TMTYP=:%TMBAS+26 ;DRIVE TYPE.
;2.7 Not Sector addressed
;2.6 Tape
;2.5 Moving Head
;2.3 Dual controller option available
;1.9 - 1.1 Drive Type Number.
; TU77=14, TU45=12, TE16=11 Nothing=10
DEFSYM %TMSER=:%TMBAS+30 ;SERIAL NUMBER
DEFSYM %TMTC=:%TMBAS+32 ;TAPE CONTROL REGISTER
DEFSYM %TMTAC==1_15. ; Acceleration (not up to speed)
DEFSYM %TMTFC==1_14. ; Frame Count non-zero
DEFSYM %TMTSA==1_13. ; Slave Address (selected slave) Changed
DEFSYM %TMTEA==1_12. ; Enable Abort on data transfer error
DEFSYM %TMTDS==7_8. ; Density Select Field
DEFSYM $TMTDS==.BP %TMTDS
DEFSYM %TMD08==3 ; 800 BPI NRZI
DEFSYM %TMD16==4 ; 1600 BPI PE
DEFSYM %TMTFS==17_4. ; Format Select
DEFSYM $TMTFS==.BP %TMTFS
DEFSYM %TMFCD==0 ; PDP10 Core Dump
DEFSYM %TMFIC==3 ; Industry Compatible (32 bit mode)
DEFSYM %TMTEP==1_3. ; Even Parity
DEFSYM %TMTTS==7 ; Transport Select
DEFSYM $TMTTS==.BP %TMTTS
IFN $$TEMP,EXPUNG DEFSYM

178
src/system/tm78s.defs2 Executable file
View File

@@ -0,0 +1,178 @@
;;; -*- Mode: Midas -*-
.AUXIL
;;; Canonical symbol definition macro, FOO==BAR with error check.
IFNDEF DEFSYM,[
DEFINE DEFSYM X/
IRPS Z,,[X]
IFNDEF Z,X
.ELSE [ $$TEM1==Z
X
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
]
.ISTOP
TERMIN TERMIN
$$TEMP==1
] ;IFNDEF DEFSYM
.ELSE, $$TEMP==0
;;; RH11/TM78 Interrupt vector:
DEFSYM %ARVEC==224 ;(224/4 = 45) Interrupts occur on level 6
; (high priority) on UBA #1.
DEFSYM %ARBAS==772400 ;Unibus address of first register
;;; RH11/TM78 Unibus register addresses:
DEFSYM %ARCS1==%ARBAS ;CONTROL AND STATUS 1 (RH11 and MB Reg 00)
DEFSYM %A1SC==1_15. ; Special Condition
DEFSYM %A1TE==1_14. ; Transfer Error
DEFSYM %A1MCP==1_13. ; Massbus Control Bus Parity Error
DEFSYM %A1DA==1_11. ; Drive (TM78) Available
DEFSYM %A1A7==1_9. ; UB Address Extension Bit 17
DEFSYM %A1A6==1_8. ; UB Address Extension Bit 16
DEFSYM %A1RDY==1_7. ; Ready
DEFSYM %A1IE==1_6. ; Interrupt Enable
DEFSYM %A1CMD==77 ; Bits 0-5 specify commands.
DEFSYM %A1GO==1_0. ; GO bit
;;; Commands, with GO bit or'd in.
;;; --NOTE--
;;; Commands are passed to the controller in two ways. Data transfer
;;; command get written into the CS1 register, as usual. Non-data-transfer
;;; commands are written to the %ARNDC register for the desired drive
;;; unit (see below). Non-data-transfer commands are marked with a '*'.
DEFSYM %ACNOP==3 ;(*) No Operation
DEFSYM %ACUNL==5 ;(*) Unload
DEFSYM %ACREW==7 ;(*) Rewind
DEFSYM %ACSNS==11 ;(*) Sense (Get status from TM)
DEFSYM %ACDSE==13 ;(*) Data Security Erase! (Erase rest of tape)
DEFSYM %ACWPM==15 ;(*) Write Phase Encoded (1600bpi) Tape Mark
DEFSYM %ACWGM==17 ;(*) Write GCR (6250bpi Tape Mark
DEFSYM %ACSFR==21 ;(*) Space Forward Record
DEFSYM %ACSRR==23 ;(*) Space Reverse Record
DEFSYM %ACSFF==25 ;(*) Space Forward File
DEFSYM %ACSRF==27 ;(*) Space Reverse File
DEFSYM %ACSFE==31 ;(*) Space Forward Either (record or file)
DEFSYM %ACSRE==33 ;(*) Space Reverse Either
DEFSYM %ACE3P==35 ;(*) Erase Three-inch gap, set PE
DEFSYM %ACE3G==37 ;(*) Erase Three-inch gap, set GCR
DEFSYM %ACCFP==41 ;(*) Close File PE (write two marks, back one)
DEFSYM %ACCFG==43 ;(*) Close File GCR
DEFSYM %ACEOT==45 ;(*) Space to Logical EOT
DEFSYM %ACSFU==47 ;(*) Space forward usefully (to file or EOT)
DEFSYM %ACWCF==51 ;Write Check Forward
DEFSYM %ACWCR==57 ;Write Check Reverse
DEFSYM %ACWRP==61 ;Write Forward PE
DEFSYM %ACWRG==63 ;Write Forward GCR
DEFSYM %ACRDF==71 ;Read Forward
DEFSYM %ACRES==73 ;Read Extended Sense Information
DEFSYM %ACRDR==77 ;Read Data Reverse
DEFSYM %ARWC==%ARBAS+2 ;UNIBUS DMA WORD COUNT. (RH11)
; Negative count of the number of PDP11 (18-bit) words to DMA
DEFSYM %ARBA==%ARBAS+4 ;UNIBUS ADDRESS. (RH11)
; Unibus address of start of DMA transfer
DEFSYM %ARFC==%ARBAS+6 ;TAPE FRAME BYTE COUNT (MB Reg 05)
DEFSYM %ARCS2==%ARBAS+10 ;CONTROL AND STATUS 2. (RH11)
DEFSYM %A2DL==1_15. ; Data Late
DEFSYM %A2UPE==1_13. ; Unibus Parity Error
DEFSYM %A2NF==1_12. ; Non-existant Formatter (TM78)
DEFSYM %A2NM==1_11. ; Unibus mem NXM during DMA
DEFSYM %A2PE==1_10. ; Program Error
DEFSYM %A2MT==1_9. ; Missed Transfer
DEFSYM %A2MDP==1_8. ; Massbus Data Bus Parity Error
DEFSYM %A2OR==1_7. ; Output Ready (for Silo buffer diag.)
DEFSYM %A2IR==1_6. ; Input Ready (for Silo buffer diag.)
DEFSYM %A2CC==1_5. ; Controller Clear
DEFSYM %A2PT==1_4. ; Parity Test
DEFSYM %A2UAI==1_3. ; Unibus Address Increment Inhibit
DEFSYM %ARDER==%ARBAS+12 ;DATA TRANSFER ERROR REPORT (MB Reg 01)
DEFSYM %ADEIC==77 ; Interrupt Code
DEFSYM %ADEDP==1_8. ; DPR ???
DEFSYM %ADEFC==77_10. ; Failure Code
DEFSYM %ARDCA==%ARBAS+14 ;DATA COMMAND ARGUMENTS (MB Reg 02)
DEFSYM %ADACA==3 ; Command Address (TU78 unit number)
DEFSYM %ADARC==77_2. ; Record Count
DEFSYM %ADASC==17_8. ; Skip Count
DEFSYM %ADAFT==7_12. ; Format
DEFSYM %ADASR==1_15. ; Supress Repositioning on error
DEFSYM %ARASN==%ARBAS+16 ;ATTENTION SUMMARY. (MB Reg 04)
;Each bit 3-0 corresponds to a drive wanting attention
; You must explicitly -RESET- an attention bit by writing a
; one into it before the controller can interrupt you again.
DEFSYM %ARDS==%ARBAS+20 ;DRIVE STATUS (MB Reg 07)
;;; This register is valid only after a SENSE command
;;; (or possibly an unsolicited ONLINE interrupt)
DEFSYM %ASRDY==1_15. ; Tape Ready
DEFSYM %ASPRE==1_14. ; Present (TM78 powered up)
DEFSYM %ASONL==1_13. ; Online
DEFSYM %ASREW==1_12. ; Tape Rewinding
DEFSYM %ASPE==1_11. ; Tape is Phase Encoded
DEFSYM %ASBOT==1_10. ; Tape at BOT
DEFSYM %ASEOT==1_9. ; Tape at EOT
DEFSYM %ASWPT==1_8. ; Tape is Write Protected
DEFSYM %ASUA==1_7. ; Unit Available
DEFSYM %ASUS==1_6. ; Unit is shared
DEFSYM %ASMMD==1_5. ; Unit is in Maintainance mode
DEFSYM %ASDSE==1_4. ; Data Security Erase in progress.
DEFSYM %ARBUF==%ARBAS+22 ;DATA BUFFER REGISTER (RH11)
DEFSYM %ARMR1==%ARBAS+24 ;MAINTENANCE REGISTER 1 (MB Reg 03)
DEFSYM %ARTYP==%ARBAS+26 ;DRIVE TYPE. (MB Reg 06)
;;; This register is valid only after a SENSE command
;2.7 Not Sector addressed
;2.6 Tape
;2.5 Moving Head (always 0)
;2.4 7 track (always 0)
;2.3 Dual port (must do arbitration)
;2.2 Slave present (always 1)
;2.1 Writable Control Store (always 0)
;1.9 - 1.1 Drive Type Number.
; TU78=101
DEFSYM %ARSER==%ARBAS+30 ;SERIAL NUMBER (MB Reg 010)
;;; This register is valid only after a SENSE command
;0-3 SN digit 0, in BCD
;4-7 SN digit 1
;8-11 SN digit 2
;12-15 SN digit 3
DEFSYM %ARMR2==%ARBAS+32 ;MAINTAINANCE REGISTER 2 (MB Reg 011)
DEFSYM %ARMR3==%ARBAS+34 ;MAINTAINANCE REGISTER 3 (MB Reg 012)
DEFSYM %ARNDE==%ARBAS+36 ;NON-DATA CMD ERROR REGISTER (MB Reg 013)
DEFSYM %ANEIC==77 ; NDT Interrupt code
DEFSYM %ANEAA==3_8. ; Attention Address (drive that caused this)
DEFSYM %ANEFC==77_10. ; NDT Failure Code
DEFSYM %ARNDA==%ARBAS+40 ;NON-DATA CMD ARG REGISTERS (MB Reg 014 - 017)
;;; There are four of these, one for each of the possible slave TU78
;;; units on the TM78. This is where you write commands that don't
;;; move data over the massbus.
DEFSYM %ANCMD==77 ; Command to execute
DEFSYM %ANCNT==377_8. ; Count
DEFSYM %ARIA==%ARBAS+50 ;INTERNAL ADDRESS (MB Reg 020)
DEFSYM %ARID==%ARBAS+52 ;HARDWARE CONTROL (MB Reg 021)
DEFSYM %AHRDY==1_15. ; Set when controller is ready. (read only)
DEFSYM %AHCLR==1_14. ; Write 1 here to reset controller.
;;; And a bunch of other stuff
IFN $$TEMP,EXPUNG DEFSYM

8214
src/system/ts3tty.400 Executable file

File diff suppressed because it is too large Load Diff

400
src/system/ttytyp.314 Executable file
View File

@@ -0,0 +1,400 @@
;THE MASTER COPY OF THIS FILE IS KEPT ON AI:SYSTEM;TTYTYP >
;DUPLICATES ARE KEPT ON OTHER ITS MACHINES BUT THEY SHOULD
;NEVER BE EDITED. IF YOU'RE NOT TOTALLY SURE OF WHAT YOU'RE DOING
;DON'T EDIT THIS FILE; ASK A HACKER FOR ASSISTANCE.
;HOW TO DESCRIBE EACH TTY. IT ASSUMES THE FOLLOWING:
;EACH MACHINE MUST HAVE A BLOCK OF ENTRIES, WHICH STARTS WITH
;THREE SEMICOLONS, A SPACE , AND THE NAME OF THE MACHINE.
;THEN MUST COME EXACTLY ONE COMMENT PER TTY, STARTING WITH
;"TNM ". THERE MAY BE OTHER COMMENTS NOT STARTING WITH A "TNM ".
;THOSE OTHER COMMENTS WILL BE IGNORED BY "NAME".
;THIS FILE IS ARRANGED SO THAT IT CAN BE ASSEMBLED BY EITHER MIDAS OR PALX
;THE FOLLOWING MACROS ARE USED IN THIS FILE
;
;SEPARATORS:
; MCONDX CONDITIONAL FOR WHICH MACHINE
; .ENDC TERMINATE ...
;
;TERMINAL TYPES:
;FIRST ARGUMENT TO TTDXXX MACRO IS THE LINE NUMBER
;FOLLOWING THAT CAN BE SEVERAL OPTIONS, SELECTED BY THE FOLLOWING KEYWORD PARAMETERS:
;TT LH(TTYTYP) ADDED TO SPEED CODE
;TY RH(TTYTYP) ADDED TO CONTROLLER-SELECT BIT
;TO LH(TTYOPT) ADDED TO DEFAULT BITS FOR DEVICE
;TP RH(TTYOPT) ADDED TO PAD CODES, DEFAULT IS DEFAULT %TPORS AND %TPCBS
;TCT TCTYP DEFAULT IS APPROPRIATE FOR TERMINAL BEING DEFINED
;HOR SCREEN WIDTH DEFAULT ..
;VER SCREEN HEIGHT DEFAULT ..
;ROL LINES/GLITCH DEFAULT ..
;SPEED OUTPUT SPEED IN BAUDS DEFAULT IS APPROPRIATE..
;ISPEED INPUT SPEED IN BAUDS (IF DIFFERENT)
;SOME TERMINAL TYPES DON'T ACCEPT SOME OF THESE OPTIONS WHICH WOULD BE MEANINGLESS.
.XCREF TT,TY,TO,TP,TCT,HOR,VER,ROL,SPEED,ISPEED ;FOOL @
; TTDPRT PRINTING TERMINAL (SPEED=110 => TTY35). DEFAULT SPEED IS 300.
; TTDMRX MEMOREX 1240
; TTDTRM TERMINET 1200
; TTDLPT BRIGHT (OR ODEC OR GOULD) LINE PRINTER ON TTY LINE
; TTDLA36 LA 36
; TTDIML IMLAC
; TTDVT VT-52
; TTDH19 H19
; TTDTEK TEKTRONIX
; TTDLSR LOSING DATAPOINT
; TTDDPT DATAPOINT
; TTDGT40 GT-40
; TTD11 PDP-11 (LOOKS LIKE PRINTING TERMINAL)
; TTDRAN RANDOM TYPE, YOU BETTER SPECIFY EVERYTHING
; TTDTV PDP-11 TV "LINE" VIA TEN-11 INTERFACE
; TTDGRN PDP-11 TV (OR GRINNELL TV) ON NORMAL TTY LINE
; TTD2741 N,CODE 2741 CODE=0 => EBCDIC, CODE=1 => CORRESPONDENCE
; TTDSTY SOFTWARE PSEUDO-TTY
; TTDC100 CONCEPT-100
; TTDAAA Ann Arbor Ambassador
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX AIKA,{ ;;; AI-KA
TTDLA36 0,TT=%TTLCL,HOR=80.,SPEED=110 ;T00 System Console (9th)
TTDPRT 1,SPEED=150,TY=%TYDIL ;T01 Dialup 15CPS *
; 8-7874 15CPS
TTDPRT 2,SPEED=110,TY=%TYDIL ;T02 Dialup 10CPS *
; 258-8794 10CPS
TTDPRT 3,SPEED=110,TT=%TTLCL ;T03 XGP TTY (9TH)
TTDPRT 4,SPEED=110,TT=%TTLCL+%TT340+%TT3HP ;T04 PDP6 TTY (9th)
TTDPRT 5,SPEED=110,TT=%TTLCL ;T05 TTY Near LPT (9th)
TTDPRT 6,SPEED=150,TY=%TYDIL ;T06 Dialup 15CPS *
; 258-8795 15CPS
TTDPRT 7,SPEED=110,TT=%TTLCL+%TT340 ;T07 Little Robot TTY (9th)
TTDPRT 10,SPEED=134 ;T10 Baudot AP *
;NEXT 3 USED TO BE 2741S, BUT WERE FLUSHED
TTDPRT 11,SPEED=134 ;T11 TSTC (9th) *
TTDPRT 12,SPEED=134 ;T12 2741 (9th) *
TTDPRT 13,SPEED=134,TY=%TYDIL ;T13 2741 Dialup *
TTDPRT 14 ;T14 Unused *
TTDPRT 15,SPEED=300,TY=%TYDIL ;T15 Dialup 30CPS
TTDPRT 16,SPEED=300,TY=%TYDIL ;T16 Dialup 30CPS
TTDPRT 17,SPEED=300,TY=%TYDIL ;T17 Dialup 30CPS
TTDPRT 20,SPEED=300,TY=%TYDIL ;T20 Dialup 30CPS
TTDVT 21,SPEED=4800,TT=%TTLCL ;T21 814 x7881 Barton,Berwick,Brotsky,Sjoberg
TTDTRM 22,TT=%TTLCL ;T22 Terminet in 813 (Hewitt)
TTDVT 23,SPEED=4800,TT=%TTLCL ;T23 926 Under the Miro x6765
TTDDPT 24,TT=%TTLCL+%TT340,HOR=71. ;T24 Datapoint Near XGP (9th)
TTDAAA 25,TT=%TTLCL,SPEED=4800,TP=%TPMTA ;T25 810 Marty, Toto, Kansas x7836
TTDDPT 26 ;T26 Datapoint in 822 (Stansfield)
TTDAAA 27,TT=%TTLCL,SPEED=4800 ;T27 926 Under ee cummings x6765
TTDTRM 30,ISPEED=150,TY=%TYDIL ;T30 Dialup 120/15 CPS
; 258-6091 150 IN, 1200 OUT TERMINET
TTDAAA 31,TT=%TTLCL,SPEED=4800,TP=%TPMTA ;T31 936 Lisp Machine Factory x6703
TTDTRM 32,ISPEED=150,TY=%TYDIL ;T32 Dialup 120/15 CPS
; 258-6090 150 IN, 1200 OUT TERMINET
TTDAAA 33,SPEED=4800,TT=%TTLCL ;T33 336 Sobalvarro, Delatizky x5834
TTDVT 34,SPEED=4800,TT=%TTLCL ;T34 908 Oro
TTDDTM 35,SPEED=4800 ;T35 Poggio, Ullman x5781 (Bldg E10)
TTDRAY 36,SPEED=4800,TP=%TPMTA,TT=%TTLCL ;T36 812 Attardi, Barber, Koton (x7891)
TTDRAY 37,SPEED=4800,TP=%TPMTA,TT=%TTLCL ;T37 939 Kornfeld x5835
TTDGT40 40,VER=29.,HOR=68.,TO=-%TOOVR ;T40 Micro-Automation PDP-11 (9th)
.ENDC ;}
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX MLKA,{ ;;; ML-KA
TTDLA36 0,TT=%TTLCL,HOR=80.,SPEED=110 ;T00 System Console
TTDPRT 1,SPEED=1200,TY=%TYDIL ;T01 Dial-up 1.2KB Vadic
;258-6756
TTDPRT 2,SPEED=300,TY=%TYDIL ;T02 Dial-up line 30CPS
;258-6742
TTDPRT 3,SPEED=300,TY=%TYDIL ;T03 Dial-up line 30CPS
;258-6743
TTDPRT 4,SPEED=1200,TY=%TYDIL ;T04 Dial-up 1.2KB Vadic
;258-7894
TTDVT 5 ;T05 350 Waters x6037
TTDDPT 6,TT=%TTLCL ;T06 9th flr near console
TTDLA36 7 ;T07 800D DECwriter
TTDVT 10 ;T10 3rd flr VT52 #833
TTDPRT 11,SPEED=1200,TY=%TYDIL ;T11 Dial-up 1.2KB Vadic
;258-6757
TTDVT 12 ;T12 8th flr VT52
TTDVT 13 ;T13 8th flr VT52 #433
TTDVT 14 ;T14 8th flr VT52
TTDVT 15 ;T15 8th flr VT52
TTDVT 16 ;T16 3rd flr VT52 #517
TTDVT 17 ;T17 3rd flr VT52 #256
TTDVT 20 ;T20 3rd flr VT52 #342
TTDVT 21 ;T21 3rd flr VT52 #1224
TTDVT 22 ;T22 3rd flr VT52 #8462
TTDVT 23 ;T23 3rd flr VT52 #8453
TTDVT 24 ;T24 3rd flr VT52 #7559
TTDVT 25 ;T25 3rd flr VT52 #8379
TTDVT 26 ;T26 3rd flr VT52 #7320
TTDVT 27 ;T27 3rd flr VT52 #8437
TTDVT 30 ;T30 VT52 in Library
TTDVT 31 ;T31 5th flr VT52
;This is now plugged into the right-hand 4-prong in 512A. That is in
;parallel with Ann Rubin (Liskov-Dennis's secretary), so she'd
;need to be asked if someone wanted to do an - ahem - demo.
TTDPRT 32,SPEED=1200,TY=%TYDIL ;T32 Dial-up 1.2KB Vadic
;258-6733
TTDC100 33 ;T33 317 Burke x3546
.ENDC ;}
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX DM,{ ;;; DM
TTDLA36 0,TT=%TTLCL,HOR=80.,SPEED=110 ;T00 930 x2910 CPU
TTDLPT 1 ;T01 215 ODEC LPT
TTDVT 2 ;T02 205 x1440 Lebling
TTDVT 3 ;T03 219 x1450 Vezza
TTDVT 4 ;T04 203 x1429 Sangal
TTDVT 5 ;T05 214A x1410 Apollo Room
TTDIML 6 ;T06 [not in use]
TTDPRT 7 ;T07 214A x1410 APOLLO
TTDVT 10 ;T10 204 x1418 Galley
TTDVT 11 ;T11 801/A x6025/4 Faris/Meyer
TTDVT 12 ;T12 218 x7706 Venckus
TTDVT 13 ;T13 222 x5800 Niamir
TTDPRT 14,SPEED=110,TT=%TTLCL ;T14 [not in use]
TTDIML 15 ;T15 [not in use]
TTDVT 16 ;T16 209 x1430 Ilson
TTDIML 17 ;T17 [not in use]
TTDVT 20 ;T20 218A x7705 Licklider
.ENDC ;}
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX MX,{ ;;; MX
TTDLA36 0,TT=%TTLCL,HOR=110. ;T00 System Console
TTDPRT 1,SPEED=1200,TY=%TYDIL+%TYMDM ;T01 Vadic Dialup
;253-6045
TTDVT 2,SPEED=9600 ;T02 TRANTOR Math Dept 2-366 x3-6598
TTDPRT 3,TY=%TYDIL+%TYMDM ;T03 Dialup
TTDPRT 4,TY=%TYDIL+%TYMDM ;T04 Dialup
;253-7985
TTDPRT 5,TY=%TYDIL+%TYMDM ;T05 Dialup
;253-7986
TTDPRT 6,TY=%TYDIL+%TYMDM ;T06 Dialup
;253-7987
TTDPRT 7,TY=%TYDIL+%TYMDM ;T07 Dialup
;253-7988
TTDPRT 10,TY=%TYDIL+%TYMDM ;T10 Vadic Dialup
;253-6985
TTDPRT 11,TY=%TYDIL+%TYMDM ;T11 Vadic Dialup
;253-6986
TTDPRT 12,TY=%TYDIL+%TYMDM ;T12 Vadic Dialup
;253-6987
TTDPRT 13,TY=%TYDIL+%TYMDM ;T13 Vadic Dialup
;253-6988
TTDPRT 14,TY=%TYDIL+%TYMDM ;T14 Vadic Dialup
;253-6989
TTDPRT 15,TY=%TYDIL+%TYMDM ;T15 Vadic Dialup
;253-6990
TTDPRT 16,TY=%TYDIL+%TYMDM ;T16 Vadic Dialup
;Draper Lab
TTDPRT 17,TY=%TYDIL+%TYMDM ;T17 Vadic Dialup
TTDDPT 20 ;T20 not connected
TTDPRT 21,TY=%TYRLM,SPEED=9600 ;T21 ROLM Data Feature
; #4997
TTDPRT 22,TY=%TYRLM,SPEED=9600 ;T22 ROLM Data Feature
; #4996
TTDPRT 23,TY=%TYRLM,SPEED=9600 ;T23 ROLM Data Feature
; #4601
TTDPRT 24,TY=%TYRLM,SPEED=9600 ;T24 ROLM Data Feature
; #4999
TTDPRT 25,TY=%TYRLM,SPEED=9600 ;T25 ROLM Data Feature
TTDPRT 26,TY=%TYRLM,SPEED=9600 ;T26 ROLM Data Feature
; #4603
TTDPRT 27,TY=%TYRLM,SPEED=9600 ;T27 ROLM Data Feature
TTDPRT 30,TY=%TYRLM,SPEED=9600 ;T30 ROLM Data Feature
TTDPRT 31,TY=%TYRLM,SPEED=9600 ;T31 ROLM Data Feature
; #4991
TTDPRT 32,TY=%TYRLM,SPEED=9600 ;T32 ROLM Data Feature
; #4992
TTDPRT 33,TY=%TYRLM,SPEED=9600 ;T33 ROLM Data Feature
TTDPRT 34,TY=%TYRLM,SPEED=9600 ;T34 ROLM Data Feature
TTDPRT 35,TY=%TYRLM,SPEED=9600 ;T35 ROLM Data Feature
TTDPRT 36,TY=%TYRLM,SPEED=9600 ;T36 ROLM Data Frobozz
; #4990
TTDPRT 37,TY=%TYRLM,SPEED=9600 ;T37 ROLM Data Feature
TTDPRT 40,TY=%TYRLM,SPEED=9600 ;T40 ROLM Data Feature
TTDPRT 41,TY=%TYRLM,SPEED=300 ;T41 ROLM slow
TTDPRT 42,TY=%TYRLM,SPEED=9600 ;T42 ROLM Data Feature
TTDVT 43,TT=%TTLCL ;T43 9th Floor VT52
TTDPRT 44,SPEED=110,TT=%TTLCL ;T44 DC76 TTY
.ENDC ;}
REPEAT NSTTYS,[
TTDSTY \NFSTTY+.RPCNT
.ENDR ;]
REPEAT N11TYS,[
TTDTV \NF11TY+.RPCNT
.ENDR ;]
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX AI,{ ;;; AI
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
TTDPRT 1,SPEED=1200 ;T01 Chronograph
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
TTDPRT 3,SPEED=2400,TY=%TYDIL ;T03 Dialup
;258-7814
TTDPRT 4,SPEED=2400,TY=%TYDIL ;T04 Dialup
;258-7815
TTDVT 5,SPEED=9600 ;T05 DZ Line 5 (VT52)
TTDVT 6,SPEED=9600,TT=%TTLCL ;T06 9th Floor VT52 by AI x6765
TTDVT 7,SPEED=9600 ;T07 DZ Line 7 (VT52)
TTDAAA 10,SPEED=9600 ;T10 DZ Line 8 (AAA)
.ENDC ;}
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX MC,{ ;;; MC
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
TTDPRT 1,SPEED=2400,TY=%TYDIL ;T01 Dialup
;258-7585
TTDPRT 2,SPEED=2400,TY=%TYDIL ;T02 Dialup
;258-7586
TTDVT 3,SPEED=9600,TT=%TTLCL ;T03 9th Floor VT52 by MC x6765
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
TTDAAA 6,SPEED=9600 ;T06 DZ Line 6 (AAA)
.ENDC ;}
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX ML,{ ;;; ML
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
TTDPRT 1,SPEED=2400,TY=%TYDIL ;T01 Dialup
;258-7832
TTDPRT 2,SPEED=2400,TY=%TYDIL ;T02 Dialup
;258-7833
TTDVT 3,SPEED=9600,TT=%TTLCL ;T03 9th Floor VT52 by ML x6765
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
TTDAAA 6,SPEED=9600 ;T06 DZ Line 6 (AAA)
.ENDC ;}
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX MD,{ ;;; MD
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
TTDVT 1,SPEED=9600,TT=%TTLCL ;T01 9th Floor VT52 by MD x6765
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
TTDPRT 3,SPEED=9600 ;T03 DZ Line 3
TTDAAA 4,SPEED=9600 ;T04 DZ Line 4 (AAA)
.ENDC ;}
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX SI,{ ;;; SI
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
TTDPRT 1,SPEED=9600 ;T01 DZ Line 1
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
TTDPRT 3,SPEED=9600 ;T03 DZ Line 3
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
TTDPRT 6,SPEED=9600 ;T06 DZ Line 6
TTDPRT 7,SPEED=9600 ;T07 DZ Line 7
TTDPRT 10,SPEED=9600 ;T10 DZ Line 10
TTDPRT 11,SPEED=9600 ;T11 DZ Line 11
TTDPRT 12,SPEED=9600 ;T12 DZ Line 12
TTDPRT 13,SPEED=9600 ;T13 DZ Line 13
TTDPRT 14,SPEED=9600 ;T14 DZ Line 14
TTDPRT 15,SPEED=9600 ;T15 DZ Line 15
TTDPRT 16,SPEED=9600 ;T16 DZ Line 16
TTDPRT 17,SPEED=9600 ;T17 DZ Line 17
TTDPRT 20,SPEED=9600 ;T20 DZ Line 20
TTDPRT 21,SPEED=9600 ;T21 DZ Line 21
TTDPRT 22,SPEED=9600 ;T22 DZ Line 22
TTDPRT 23,SPEED=9600 ;T23 DZ Line 23
TTDPRT 24,SPEED=9600 ;T24 DZ Line 24
TTDPRT 25,SPEED=9600 ;T25 DZ Line 25
TTDPRT 26,SPEED=9600 ;T26 DZ Line 26
TTDPRT 27,SPEED=9600 ;T27 DZ Line 27
TTDPRT 30,SPEED=9600 ;T30 DZ Line 30
TTDPRT 31,SPEED=9600 ;T31 DZ Line 31
TTDPRT 32,SPEED=9600 ;T32 DZ Line 32
TTDPRT 33,SPEED=9600 ;T33 DZ Line 33
TTDPRT 34,SPEED=9600 ;T34 DZ Line 34
TTDPRT 35,SPEED=9600 ;T35 DZ Line 35
TTDPRT 36,SPEED=9600 ;T36 DZ Line 36
TTDPRT 37,SPEED=9600 ;T37 DZ Line 37
TTDPRT 40,SPEED=9600 ;T40 DZ Line 40
.ENDC ;}
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX FU,{ ;;; FU
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
TTDPRT 1,SPEED=9600 ;T01 DZ Line 1
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
TTDPRT 3,SPEED=9600 ;T03 DZ Line 3
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
TTDPRT 6,SPEED=9600 ;T06 DZ Line 6
TTDPRT 7,SPEED=9600 ;T07 DZ Line 7
TTDPRT 10,SPEED=9600 ;T10 DZ Line 10
.ENDC ;}
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX PM,{ ;;; PM
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
TTDPRT 1,SPEED=9600 ;T01 (9600 baud)
TTDPRT 2,SPEED=9600 ;T02 (9600 baud)
TTDPRT 3,SPEED=1200,TY=%TYDIL ;T03 Dialup (1200 baud)
TTDPRT 4,SPEED=1200,TY=%TYDIL ;T04 Dialup (1200 baud)
TTDPRT 5,SPEED=9600 ;T05 (9600 baud)
.ENDC ;}
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
;CHARACTERS MAY BE PRESENT IN THEM.
MCONDX DX,{ ;;; DX
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
TTDPRT 1,SPEED=300 ;T01 DZ Line 1 (300 baud)
TTDPRT 2,SPEED=1200 ;T02 DZ Line 2 (1200 baud)
TTDPRT 3,SPEED=2400 ;T03 DZ Line 3 (2400 baud)
TTDPRT 4,SPEED=4800 ;T04 DZ Line 4 (4800 baud)
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
TTDPRT 6,SPEED=9600 ;T06 DZ Line 6
TTDPRT 7,SPEED=9600 ;T07 DZ Line 7
TTDPRT 10,SPEED=9600 ;T10 DZ Line 10
.ENDC ;}

5995
src/system/tv.132 Executable file

File diff suppressed because it is too large Load Diff

2009
src/system/utape.952 Executable file

File diff suppressed because it is too large Load Diff

158
src/system/whovar.5 Executable file
View File

@@ -0,0 +1,158 @@
;channel header pointer (location 40, read only)
;
; ADDRESS(channel header area)
; ADDRESS(pointer area)
; I/O version number
; source file version number
; 0 always 0
; INITED non-zero indicates PDP-11 is running ok(can be cleared by PDP-10)
; 0 always 0
; GDOWN used as flag by PDP-10 to acknowledge clear of INITED
;
;channel header area (aligned on PDP-10 word)
;
; KBD channel:
; KBDFLG cleared by 10/set by 11 (chain of activated KBD buffers)
; 0 allows PDP-10 to do SKIPN for activation test
; DPY channel: (1 per console)
; DPYCHN buffer assigned to channel, if zero then DPY channel is closed
; DPYKBD .BYTE KBD#, DPY# (377 for either implies not assigned)
; KBD flags: (1 per console)
; ECOFLG Set by PDP-10. Next time DPYBUF is empty clear ECOFLG
; and put flag on KBD ring to signal this condition
; CHNCLS if -1, log this guy out!!!!
; WHO flags: (1 per console)
; WHOLIN who line variables for this console
; WHOUSR -1=>do system line, 0=>user who line
;
;format of KBD buffer (aligned on PDP-10 word)
;
; KBDSTS negative=>-(data byte count), 0=>free
; 0
; KBDRNG next KBD buffer associated with this KBD
; KBDLST next buffer on activated list (0=>end of chain)
; KBDCHN keyboard channel
; 0 not used
; KBDATA key board data area (1 PDP-11 word/character)
;
;format of DPY buffer (aligned on PDP-10 word)
;
; DPY10B word PDP-10 is hacking (used only for initailization)
; DPY11B word PDP-11 is hacking
; DPYPP page printer variables
; DPYLGL last legal address in this buffer
; DPYSIZ size of data area in bytes
; 0 not used
; DPYATA display data area (1 PDP-11 word/character)
;
;format of pointer area (aligned on PDP-10 word)
;
; ADDRESS(system who line variables)
; ADDRESS(PDP-10/PDP-11 communication area)
; TENWHO (SET TO -1 WHENEVER ANYONE TYPES WHO LINE COMMAND, RESET TO 0 WHEN 10
; UPDATES WHO LINES
; TENWH1 PADDING
;
;Notes:
;
;1. All addresses and pointers are in PDP-11 address space.
;
;2. KBD buffers are ringed two per channel. While the PDP-10 is
; emptying one, the PDP-11 can fill the other.
;
;3. There is only one DPY buffer per channel. When the buffer is filled
; with negative numbers, it is free. When the PDP-10 writes a positive
; number in the current word: then the PDP-11 processes the data in that
; word, sets that word to a negative number, and advances to the next word.
; WHO LINE VARIABLES
;
;SYSTEM WHO LINE (one PDP-11 word/line unless otherwise indicated)
; ITSTCH # total # 10/11 dpy channels (read only for PDP-10)
; ITSCHN # 10/11 dpy channels in use (read only for PDP-10)
; ITSVER ITS version #
; ITSJOB total jobs
; ITSCOR total core
; ITSRU runnable users
; ITSWBJ # jobs swap blocked
; ITSJWP # jobs waiting for pages
; ITSTRC total runable core
; ITSCFU core available for users
; ITSDAT date [byte (7) year (4) month (5) day]
; ITSDBG system debug flag
; ITSTIM time of day (# half seconds since midnight) aligned on PDP-10 word
; ITSTI1 low order of time
; ITSUSR total number of users
;
;USER WHO LINE (One PDP-11 word per line unless otherwise noted)
WHJOB==0 ;job #, -1=>who line not in use
; WHJOB1 ;pads WHJOB
WHMODE==1 ;mode 0=>follow keyboard
; 1=>freeze
; 2=>next higher (when PDP-10 sees this state, it searches
; user variables for next higher job index number with same
; uname. When it finds it, it stores the number in job #
; and changes mode to 1
; 3=>next lower
; WHMOD1 ;pads WHMODE
WHUNAM==2 ;uname in sixbit (left 18 bits in first two words, right in next two)
; WHUNM1
WHUNM2==3
; WHUNM3
WHJNAM==4 ;jname in sixbit
; WHJNM1
WHJNM2==5
; WHJNM3
WHSNAM==6 ;sname in sixbit
; WHSNM1
WHSNM2==7
; WHSNM3
WHSTAT==10 ;status in sixbit, 0=>job does not exist
; WHSTA1
WHSTA2==11
; WHSTA3
WHJ%RT==12 ;job % run time
; WHJTRT job total run time (one millisec units)
; WHRPAG job number of pages real mem assigned
; WHPAG job number of pages virtual mem assigned
; WHO1 user who line control word
; WHO1A
; WHO2 first user who line variable
; WHO2A
; WHO2B
; WHO2C
; WHO3 second user who line variable
; WHO3A
; WHO3B
; WHO3C
;
;
;NOTE: The PDP-11 will not update who lines until it sees that ITSTIM
; has changed.
;
;PDP-10/PDP-11 COMMAND CHANNEL
;
; CMDFLG aligned on PDP-10
; 0=>buffer is free (PDP-10 can write CMDBUF)
; positive=>command # from PDP-10 (PDP-11 can write CMDBUF)
; negative=>affirmative reply from PDP-11 (0=>command failed)
; PDP-10 can read CMDBUF, then must zero CMDFLG
; CMDFL1 always 0
; CMDBUF each arg takes 4 bytes (1 PDP-10 word)
;
; PDP-10/PDP-11 COMMANDS
;
; 1 video switch
; arg1: video switch input # (set by PDP-10)
; arg2: video switch output # ( " " " " )
;
; 2 reserve DPY
; arg1: DPY reserved (set by PDP-11)
;
; 3 free DPY
; arg1: DPY to free (set by PDP-10)
;
;;other 10-11 commuincation issues ..
;
;;go down resetting video switch vs not
;;PDP-11 indicates it has reset video switch
; ;(PDP-10 then detaches all jobs with tv ttys)