1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-20 08:28:43 +00:00

WIP: Add Ethernet support and Unibus DEUNA/DELNA driver.

This commit is contained in:
Adam Sampson
2018-08-08 14:28:32 +01:00
parent 14cab6253b
commit e91eafb7ba
9 changed files with 524 additions and 6 deletions

View File

@@ -2,6 +2,11 @@ set console wru=034
set cpu its
set cpu idle
set tim y2k
set debug stderr
set xu enable
set xu type=delua
set xu debug=eth;trace;reg;warn;packet;data
attach xu nat:tcp=9523:10.0.2.15:23,tcp=9595:10.0.2.15:95
set rp0 rp06
at rp0 out/simh/rp0.dsk
b rp0

View File

@@ -959,6 +959,13 @@ IFN DBRM80, DEFOPT RM80P==1 ; with one RM80
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
DEFOPT INETP==1 ; Include Internet code
DEFOPT TCPP==1 ; Include TCP code
DEFOPT XBL==30. ; # TCP network channels
DEFOPT ETHERP==1 ; Uses Ethernet
DEFOPT UNAP==1 ; Has a DEUNA/DELNA
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
DEFOPT DZ11NB==1 ; 1 of them
DEFSYM DZ0BA=:760010
@@ -978,6 +985,10 @@ DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
; addresses.)
DEFSYM PMUNSD==146000 ;Unused bits
DEFOPT ETHUS==<IPADDR %IP%> ; IP address
DEFOPT NM%ETH==<IPADDR %NETMASK%> ; Subnet mask
DEFOPT PKTTRC==-1 ;Packet tracing code enabled
DEFINE ITSIRP BODY
IRPS ITS,,[DB]
BODY
@@ -1049,7 +1060,7 @@ 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
IFE IPUNCP,IFNDEF IMPUS3,IFNDEF ETHUS,.ERR Internet host addr must be defined
IFN IPUNCP,IFE CHAOSP,.ERR Chaosnet must exist for IP encapsulation scheme
]
@@ -1076,8 +1087,12 @@ DEFOPT SSIMP==0 ;1= Has "Simulated Simple IMP", similar to KSIMP
IFN IMPP,IFE DMIMP+KAIMP+KSIMP+SSIMP,.ERR IMPP requires an interface type
IFN IMPP,IFN IPUNCP,.ERR IPUNCP and IMPP are incompatible
;Ethernet specific parameters
DEFOPT ETHERP==0 ;1= Has Ethernet interface to ARPAnet
DEFOPT UNAP==0 ;1= Has DEUNA/DELNA on KS10
; Generic network interface parameters
DEFOPT NNIFS==<IMPP+CHAOSP> ; # of network interfaces
DEFOPT NNIFS==<IMPP+CHAOSP+ETHERP> ; # of network interfaces
; TTY line parameters

View File

@@ -87,6 +87,7 @@
.SEE %UB ;BITS IS KS10 UNIBUS STATUS REGISTER (UBASTA)
.SEE %UC ;FOR KL AND KS, BITS IN LH OF RESULT OF APRID
.SEE %UM ;BITS IN UMAPS VARIABLE, AND ARGS TO PGLD, MPLD1, PLD1.
.SEE %UN ;DEUNA/DELNA bits and constants
.SEE %UP ;BITS IN KS10 UNIBUS PAGE MAP (WHEN MAP IS READ) (UBAPAG)
.SEE %UQ ;BITS IN KS10 UNIBUS PAGE MAP (WHEN MAP IS WRITTEN) (UBAPAG)
.SEE %UST ;BITS IN USTP VARIABLE.

View File

@@ -2772,8 +2772,9 @@ MUR==360500 ;4.4-4.8 USAGE CODE
MU23FB==24 .SEE QSFBT ;DISK FREED-BLOCKS TABLES
MUPKT==25 ; Net packet buffers
MUDVB==26 ;Semi-static device IO buffer page
MUETH==27 ;Ethernet buffers
;ADD NEW MUR TYPES HERE ^
MURMAX==27 ;HIGHEST VALID CODE + 1
MURMAX==30 ;HIGHEST VALID CODE + 1
MWC==221400 ;3.1-4.3 WORD COUNT IN I/O BUFFERS

135
src/system/deuna.defs1 Normal file
View File

@@ -0,0 +1,135 @@
;;; DEUNA/DELUA definitions -*-MIDAS-*-
;;;
;;; Copyright (C) 1999 Massachusetts Institute of Technology
;;; Copyright (C) 2018 Adam Sampson <ats@offog.org>
;;;
;;; This program is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation, either version 2 of the License, or
;;; (at your option) any later version.
;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with this program. If not, see <https://www.gnu.org/licenses/>.
.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
; Information here is from EK-DELUA-UG-002.
DEFSYM %UNVEC==120 ;Interrupt vector
DEFSYM %UNBAS==3,,774510 ;Base of Unibus register address space
DEFSYM %UNR0==%UNBAS ;PCSR0
.BEGIN %UN0
;FIXME stop using DEFSYM
DEFSYM SERI==1_15. ;status error
DEFSYM PCEI==1_14. ;port command error
DEFSYM RXI==1_13. ;receive interrupt
DEFSYM TXI==1_12. ;transmit interrupt
DEFSYM DNI==1_11. ;done interrupt
DEFSYM RCBI==1_10. ;receive buffer unavailable interrupt
DEFSYM FATL==1_9. ;fatal internal error
DEFSYM USCI==1_8. ;unsolicited state change
DEFSYM ALLINT==<SERI+PCEI+RXI+TXI+DNI+RCBI+FATL+USCI>
DEFSYM INTR==1_7. ;or of bits 15-8
DEFSYM INTE==1_6. ;interrupt enable
DEFSYM RSET==1_5. ;reset
.END %UN0
.BEGIN %UNCMD
DEFSYM NOP==0
DEFSYM GETPCB==1
DEFSYM GETCMD==2
DEFSYM SLFTST==3
DEFSYM START==4
DEFSYM BOOT==5
DEFSYM PDMD==10 ;polling demand
DEFSYM HALT==16
DEFSYM STOP==17
.END %UNCMD
DEFSYM %UNR1==%UNBAS+2 ;PCSR1
DEFSYM %UNR2==%UNBAS+4 ;PCSR2
DEFSYM %UNR3==%UNBAS+6 ;PCSR3
.BEGIN %UNAF ;ancillary function codes in PCB
DEFSYM NOP==0
DEFSYM START==1 ;start microcode at
DEFSYM RDDPA==2 ;read default physical address
DEFSYM RDPA==4 ;read physical address
DEFSYM WRPA==5 ;write "
DEFSYM RDMAL==6 ;read multicast address list
DEFSYM WRMAL==7 ;write "
DEFSYM RDDRF==10 ;read descriptor ring format
DEFSYM WRDRF==11 ;write "
DEFSYM RDCTRS==12 ;read counters
DEFSYM RCCTRS==13 ;read and clear counters
DEFSYM RDMODE==14 ;read mode register
DEFSYM WRMODE==15 ;write "
DEFSYM RDSTAT==16 ;read status
DEFSYM RCSTAT==17 ;read and clear status
DEFSYM RDMEM==20 ;read internal memory
DEFSYM WRMEM==21 ;write "
DEFSYM RDSID==22 ;read system ID parameters
DEFSYM WRSID==23 ;write "
DEFSYM RDLSA==24 ;read load server address
DEFSYM WRLSA==25 ;write "
.END %UNAF
.BEGIN %UNTD ;bits in transmit/receive descriptors
DEFSYM OWN==<1_15.>
DEFSYM ERRS==<1_14.>
.END %UNTD
;Layout of memory shared with DEUNA.
;Each 1024. x 36-bit ITS page we allocate will be mapped to the Unibus as
;two 1024. x 16-bit Unibus pages.
DEFSYM %UNNTB==4 ;# transmit buffers (even)
DEFSYM %UNNRB==4 ;# receive buffers (>= 2, even)
;First page contains PCB, UDB, transmit/receive ring descriptors in its first
;half. The second half is currently unused.
;Offsets in bytes:
DEFSYM %UNPCB==0 ;Port control block (4 uwds)
DEFSYM %UNUDB==%UNPCB+<4*2> ;Unibus data block
;(max 153. words for system ID params,
;plus 1 to keep TDR 10-word-aligned)
DEFSYM %UNTDR==%UNUDB+<154.*2> ;Transmit descriptor ring (4 uwds each)
DEFSYM %UNRDR==%UNTDR+<%UNNTB*8> ;Receive descriptor ring (4 uwds each)
;(init code assumes R follows T)
IFG %UNRDR+<%UNNRB*8>-<1000*4>, .ERR DEUNA first half-page full
;Remaining pages contain buffers, with one buffer in the first half and one in
;the second half; all the transmit buffers come first, then all the receive
;buffers.
DEFSYM %UNNPG==1+<%UNNTB/2>+<%UNNRB/2>
DEFSYM %UNBSZ==2048.
DEFSYM %UNBOF==2 ;Padding at start, so the packet
;data starts on a PDP-10 word
IFN $$TEMP,EXPUNG DEFSYM

313
src/system/ether.1 Normal file
View File

@@ -0,0 +1,313 @@
;;; ITS Ethernet support -*-MIDAS-*-
;;;
;;; Copyright (C) 2018 Adam Sampson <ats@offog.org>
;;;
;;; This program is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation, either version 2 of the License, or
;;; (at your option) any later version.
;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;Check whether the interface is able to send a packet.
;Skip-return if it is.
ETHCTS:
;FIXME check if we have an ARP entry, and if not, send a request
AOS (P)
POPJ P,
IFN UNAP,[
;;; DEUNA/DELNA driver
$INSRT DEUNA
%ETMTU==1492. ;MTU (could be 1500, but be conservative)
%ETMXL==(1500./4) ;Maximum packet length in 32-bit words
EBLK
UNPAGS: BLOCK %UNNPG ;PDP-10 pages: 0,,addr
UNPAGU: BLOCK %UNNPG ;Unibus pages: first-addr,,second-addr
UNTXRP: BLOCK %UNNTB ;Transmit ring: descriptor addr,,buffer addr
UNRXRP: BLOCK %UNNRB ;As above for receive
;(setup code assumes those two are contiguous)
UNADNI: CPOPJ ;Call this after a DNI interrupt
UNARCB: 0 ;Have we seen an RCBI interrupt?
BBLK
;BUG INFO the UNA's registers.
UNREGS: PUSH P,A
PUSH P,B
PUSH P,C
PUSH P,D
IORDI A,%UNR0
IORDI B,%UNR1
IORDI C,%UNR2
IORDI D,%UNR3
BUG INFO,[UNA PCSR0=],OCT,A,[ PCSR1=],OCT,B,[ PCSR2=],OCT,C,[ PCSR3=],OCT,D
POP P,D
UNR3: POP P,C
POP P,B
POP P,A
POPJ P,
;BUG INFO the PCB.
UNDPCB: PUSH P,A
PUSH P,B
PUSH P,C
MOVE A,UNPAGS
MOVE B,0(A)
MOVE C,1(A)
BUG INFO,[UNA PCB:],OCT,B,[ ],OCT,C
JRST UNR3
;Initialise the DEUNA.
UNAINI: MOVEI D,%UNNPG-1
;FIXME This memory stuff would be simpler given a routine
;that allocated and mapped a page, returning the PDP-10
;address and the two Unibus addresses. We could then
;allocate on the fly while setting up the rings, and
;store the list of descriptor,,data pointers at the start
;of the first shared page.
UNAIN1: PUSHJ P,TCALL ;Allocate a page of unshuffleable low core
JRST IOMQ
BUG HALT,[Couldn't allocate page for UNA]
MOVEI B,MUETH ;Tag what it's being used for
DPB B,[MUR,,MEMBLT(A)]
LSH A,10. ;Save the pointer
MOVEM A,UNPAGS(D)
MOVE B,A
LSH B,-9. ;DEC page number
;FIXME Could we use %UQFST? (How do we know nobody else is?)
; Could have a word with either 0 or the MU in...
IORI B,%UQVAL
PUSHJ P,UBAASL ;Allocate first UBA paging slot
IOWRI B,UBAPAG(A)
HRLZ C,A
PUSHJ P,UBAASL ;Allocate second slot
AOS B
IOWRI B,UBAPAG(A)
HRR C,A
LSH C,11.
MOVEM C,UNPAGU(D)
MOVE A,UNPAGS(D)
;BUG INFO,[UNA block ],OCT,D,[ entry ],OCT,B,[ pdp10 ],OCT,A,[ unibus ],OCT,C
SOJGE D,UNAIN1
;Initialisation sequence from DELUA user guide, page 3-8 (42).
;This needs us to wait for an interrupt in several places, so
;UNACMD has magic interrupt-continuation behaviour.
;Enable interrupts.
MOVEI A,%UN0"INTE
IOWRI A,%UNR0
;Set the PCB address.
HLRZ A,UNPAGU ;Low bits
IOWRI A,%UNR2
LSH A,-16. ;High bits
IOWRI A,%UNR3
MOVEI A,%UN0"DNI+%UNCMD"GETPCB ;Ack DNI as it's on after reset
PUSHJ P,UNACMD ;We've really returned to the caller here
IFN 1,[
;Read, and display, the MAC address
MOVE A,UNPAGS
MOVSI TT,%UNAF"RDDPA
MOVEM TT,0(A)
MOVEI A,%UNCMD"GETCMD
PUSHJ P,UNACMD
PUSHJ P,UNDPCB ;Show results
]
;Set up transmit and receive rings
MOVE D,UNPAGS ;Point to TDR (RDR follows)
ADDI D,<%UNTDR/4>
SETZM C ;Buffer index
UNAIN2: MOVE TT,C ;Work out index into UNPAGS/UNPAGU
IDIVI TT,2
AOS TT
HLRZ B,UNPAGU(TT) ;Get Unibus addr. Even on the left...
TRNE C,1
HRRZ B,UNPAGU(TT) ;... and odd on the right
ADDI B,%UNBOF ;Add padding at start
;FIXME This bit for now, until I rewrite this whole section..
HRLM D,UNTXRP(C) ;Descriptor pointer
MOVE A,UNPAGS(TT)
TRNE C,1
ADDI A,1000
HRRM A,UNTXRP(C) ;Data pointer
MOVE A,UNTXRP(C)
BUG INFO,[ring],OCT,C,[ptr],OCT,A
MOVSI A,%UNBSZ ;SLEN (only useful for recv at this point)
HRR A,B ;SEGB low bits
MOVEM A,0(D)
;BUG INFO,[t/rdr ],OCT,C,[ at ],OCT,D,[ 0/1 = ],OCT,A
LSH B,-16. ;SEGB high bits
CAIL C,%UNNTB ;in the receive ring?
IORI B,%UNTD"OWN ; yes - give this buffer to DEUNA
HRLZS B ;zero other flags
MOVEM B,1(D)
;BUG INFO,[t/rdr ],OCT,C,[ at ],OCT,D,[ 2/3 = ],OCT,B
ADDI D,2 ;Next descriptor
AOS C ;Next buffer
CAIGE C,<%UNNTB+%UNNRB>
JRST UNAIN2
;Set ring descriptor format
MOVSI A,%UNAF"WRDRF ;Set up for UDB-using command
PUSHJ P,UNAPCB
HLRZ B,UNPAGU ;Get Unibus address of TDR
ADDI B,%UNTDR
HRLZ A,B ;TDRB low bits
IORI A,<4_8> ;TELEN
LSH B,-16.
IOR A,B ;TDRB high bits
MOVEM A,0(D) ;Store word 0/1
;BUG INFO,[rdf 0/1 =],OCT,A
MOVSI A,%UNNTB ;TRLEN
HLRZ B,UNPAGU ;Get Unibus address of RDR
ADDI B,%UNRDR
HRR A,B ;RDRB low bits
MOVEM A,1(D) ;Store word 2/3
;BUG INFO,[rdf 2/3 =],OCT,A
LSH B,-16. ;RDRB high bits
IORI B,<4_8> ;RELEN
HRLZS B
IORI B,%UNNRB ;RRLEN
MOVEM B,2(D) ;Store word 4/5
;BUG INFO,[rdf 4/5 =],OCT,B
MOVEI A,%UNCMD"GETCMD
PUSHJ P,UNACMD
;Start the interface
MOVEI A,%UNCMD"START
PUSHJ P,UNACMD
BUG INFO,[UNA setup done]
MOVEI A,CPOPJ ;Reset UNADNI behaviour
MOVEM A,UNADNI
POPJ P,
;Set up the PCB for a command that uses the UDB.
;A=Unibus word 0 (command),,LH of Unibus word 3 (0 for most commands).
;Returns: D pointing to UDB.
UNAPCB: HLRZ B,UNPAGU ;Get Unibus address of UDB
ADDI B,%UNUDB
MOVE D,UNPAGS ;Point to PCB
MOVE C,B ;UDBB low bits
HLL C,A ;Command
MOVEM C,0(D) ;Store word 0/1
HRRZS A ;(command-specific)
LSH A,8.
LSH B,-16. ;UDBB high bits
IOR A,B
HRLZS A ;Zero word 3
MOVEM A,1(D) ;Store word 2/3
MOVE D,UNPAGS ;Point to UDB
ADDI D,<%UNUDB/4>
POPJ P,
;Send a command (in A). Then set the next instruction in the caller as UNADNI,
;and return to the caller's caller -- this means that it'll appear to return
;(in interrupt context) when the command is done.
UNACMD: POP P,UNADNI ;Back to the caller when DNI is set
IORI A,%UN0"INTE ;Keep interrupts on
IOWRI A,%UNR0 ;Send command
POPJ P, ;Return to caller's caller
;Handle a DEUNA interrupt.
EBLK
UNABRK: 0
BBLK
JSR UTCSAV
IORDI H,%UNR0 ;Read status
BUG INFO,[DEUNA interrupt, PCSR0=],OCT,H,[ UNADNI=],OCT,UNADNI
TRNE H,%UN0"SERI+%UN0"PCEI+%UN0"FATL+%UN0"USCI
BUG HALT,[DEUNA error, PCSR0=],OCT,H ;FIXME do something better!
TRNE H,%UN0"RXI
PUSHJ P,UNARX
;FIXME %UN0"TXI
TRNE H,%UN0"RCBI
SETOM UNARCB ;Just remember for when a buffer is freed
MOVE A,H
ANDI A,%UN0"ALLINT+%UN0"INTE
IOWRI A,%UNR0 ;Acknowledge interrupts
TRNE H,%UN0"DNI ;DNI handler *after* acknowledgement
PUSHJ P,@UNADNI ;(because it will probably issue a new cmd)
JRST DSKEX ;Return from interrupt
;FIXME check in a ring - i.e. continue from the first empty slot found last time
;Check the receive ring for new packets, and process them.
UNARX: SETZM W ;Buffer index
UNARX1: HLRZ J,UNRXRP(W) ;Descriptor
HRRZ R,UNRXRP(W) ;Buffer
MOVE Q,1(J) ;OWN==0?
BUG INFO,[rx packet slot],OCT,W,[desc],OCT,J,[buf],OCT,R,[flags],OCT,Q
TLNE Q,%UNTD"OWN
JRST UNARX2 ; No
MOVE A,0(R)
MOVE B,1(R)
MOVE C,2(R)
BUG INFO,[got packet],OCT,W,[data],OCT,A,[ ],OCT,B,[ ],OCT,C
;FIXME process
TLO Q,%UNTD"OWN ;Set OWN to mark as free
MOVEM Q,1(J)
SKIPN UNARCB ;Have we had RCB?
JRST UNARX2 ; No
SETZM UNARCB
MOVEI A,%UN0"INTE+%UNCMD"PDMD
IOWRI A,%UNR0 ;Issue POLLING DEMAND command
UNARX2: AOS W ;Next buffer
CAIGE W,%UNNRB
JRST UNARX1
POPJ P,
;FIXME
;Stylewise, trying to match IMP...
;See:
;receive packet - IMPRM (uses IPGIPT, IPRDGM)
;send packet - IMPOB0 (uses IPGIOQ)
] ;UNAP

View File

@@ -534,11 +534,16 @@ IFE KS10P,[
]
MOVE C,PK.DST(A) ; Get destination address
; IMP-specific!!!
; Ask interface if it wants this particular datagram right now.
;
IFN IMPP,[
CALL IMPCTS
JRST IPGOQ5 ; Can't send, requeue
] ;IFN IMPP
IFN ETHERP,[
CALL ETHCTS
JRST IPGOQ5 ; Can't send, requeue
] ;IFN ETHERP
; Got valid dgm, must ensure that block queue is merged back
; onto beginning of output queue.
@@ -957,8 +962,15 @@ IPKIOT:
; C/ # of 32-bit words in buffer
TRZ E,%IPIQK ; Flush "keep" bit since won't be on any list!
CAIL C,5 ; Must have at least 5 words for IP
CAIL C,%IMXLN ; Must be less or eq to maximum datagram size
JRST OPNL33 ; Too big, say meaningless args.
JRST OPNL33 ; Too small, say meaningless args.
IFN IMPP,[
CAIL C,%IMXLN ; Must be less or eq to maximum datagram size
JRST OPNL33 ; Too big, say meaningless args.
] ;IFN IMPP
IFE IMPP,IFN ETHERP,[ ; (as IMP MTU < Ethernet MTU)
CAIL C,%ETMXL ; Must be less or eq to maximum datagram size
JRST OPNL33 ; Too big, say meaningless args.
] ;IFE IMPP,IFN ETHERP
CAIN J,%IPOUS ; Outputting back to self?
JRST POPJ1 ; Yeah, just turn into a NOP.
CALL PKTGF ; Get a free packet buffer (hangs until got it)
@@ -1096,6 +1108,7 @@ SUBN27==:<HOSTN 18,27,0,0> ; Damn macro generates an error inside literal
NW%CHW==:<HOSTN 128,31,0,0> ; Old CHAOS-wrapping scheme, probably unused
IPMTU:
IFN IMPP,[
IFE IPUNCP,[
PUSH P,A ; Save address for a bit
MOVEI T,576. ; Default value
@@ -1116,6 +1129,11 @@ IFE IPUNCP,[
IPMTU1: POP P,A
] ;IFE IPUNCP
IFN IPUNCP, MOVEI T,488.-40. ; This should be small enough...
]
IFN ETHERP,[
MOVEI T,%ETMTU ; Default value
]
IFE IMPP+ETHERP,.ERR Write IPMTU for your interface
RET
IF1,.ERR Amazing MIT-Specific crocks near IPMTU...
@@ -1232,26 +1250,31 @@ EBLK
NIFIPA: ; IP Address for network interface
IFN IMPP, IMPUS3 ; IP address on IMP interface
IFN CHAOSP, IMPUS4 ; IP address on CHAOS interface
IFN ETHERP, ETHUS ; IP address on Ethernet interface
IFN .-NIFIPA-NNIFS, .ERR Wrong size table - NIFIPA
NIFIPM: ; IP Network Mask for network interface
IFN IMPP, NM%IMP ; Netmask for IMP interface
IFN CHAOSP, NM%CHA ; Netmask for CHAOS interface
IFN ETHERP, NM%ETH ; Netmask for Ethernet interface
IFN .-NIFIPM-NNIFS, .ERR Wrong size table - NIFIPM
NIFIPN: ; IP Network # for network interface
IFN IMPP, <IMPUS3>&<NM%IMP>
IFN CHAOSP, <IMPUS4>&<NM%CHA>
IFN ETHERP, <ETHUS>&<NM%ETH>
IFN .-NIFIPN-NNIFS, .ERR Wrong size table - NIFIPN
NIFIPO: ; IP Output routine for network interface
IFN IMPP, IPKSNA ; Send IP dgm to IMP output
IFN CHAOSP, IPKSNC ; Send IP dgm to Chaos, may fragment
IFN ETHERP, IPKSNE ; Send IP dgm to Ethernet, may fragment
IFN .-NIFIPO-NNIFS, .ERR Wrong size table - NIFIPO
;NIFNAM: ; Interface name (in case of PEEKing someday?)
; IFN IMPP, SIXBIT /IMP/
; IFN CHAOSP, SIXBIT /CHA/
; IFN ETHERP, SIXBIT /ETH/
;IFN .-NIFNAM-NNIFS, .ERR Wrong size table - NIFNAM
@@ -1288,14 +1311,18 @@ IFE ITSMCH-SIXBIT/NX/,[
GWDEF 0,<HOSTN 139,185,5,1>,IPKSNA ; NPD cisco router, use for all.
NIPMGW==NIPPGW ; Number of prime gateways
].ELSE [
IFN IMPP,[
IFE IPUNCP,[
GWDEF NW%LCS,<HOSTN 10,0,0,77>,IPKSNA ; MIT-GW
GWDEF NW%AI, <HOSTN 10,3,0,6>, IPKSNA ; MIT-AI-GW
] ;IFE IPUNCP
] ;IFN IMPP
IFN CHAOSP,[
IFN IPUNCP,[
GWDEF NW%LCS,<HOSTN 128,31,6,1>,IPKSNC ; ???
GWDEF NW%AI, <HOSTN 128,31,6,2>,IPKSNC ; ???
] ;IFN IPUNCP
] ;IFN CHAOSP
NIPMGW==NIPPGW ; Number of prime gateways
] ; IF NOT NX
@@ -1407,6 +1434,13 @@ IPKSC9: MOVE A,J ; The PE
] ; IFN CHAOSP
IFN ETHERP,[
; FIXME write IPKSNE
; IFE CHAOSP,with IPOGO
] ; IFN ETHERP
IPKSN5: MOVEI Q,IPUQHD+1 ; Put on System Output queue
MOVE B,(Q) ; Save prev contents of header
CALL PKQPL(PK.IP)

View File

@@ -19512,6 +19512,7 @@ UBAIIT:
IF2, .BAS.==UBAIIB
IFE TM03S, UBIDV 224 ; Tape
;FIXME these should be conditional:
UBIDV 300 ; NI1010 In
UBIDV 304 ; NI1010 Out
IFL DZ11NB-4,[
@@ -19539,6 +19540,10 @@ UBINT 270, JSR CHXBKH ; Usual Chaosnet vector
UBINT 230, JSR CHXBKH ; Except some interrupt here instead
];CH11P
IFN UNAP,[
UBINT %UNVEC, JSR UNABRK ; DEUNA/DELNA
]
UBAIIB==:UBAIIT-.MIN.
LOC UBAIIB+.MAX.+1
@@ -21645,6 +21650,9 @@ IFN CHAOSP,[ IFN T11CHP,[
ADDI B,600000+<<T11CPA_-18.>_8>
DPB B,[.CHSPG+EXEUMP]
BEG8: ]] ;CHAOSP, T11CHP
IFN UNAP,[
PUSHJ P,UNAINI
] ;UNAP
IFN DL10P,[ ;INITIALIZE DL10
CONO DLC,400000 ;MR CLR
CONO DLB,1 ;TURN OFF EXCESS LIGHTS

View File

@@ -53,6 +53,12 @@ $INSRT IMP
OVHMTR NET
IFN ETHERP,[ ; Ethernet interface code
$INSRT ETHER
]
OVHMTR NET
IFN NCPP,[ ; Old Arpanet NCP protocol code
$INSRT NCP
]