*start*
01303 00024 US 
Date: 8 Oct. 1981 9:48 am PDT (Thursday)
From: Swinehart.PA
Subject: telephone trivia (suggestion from Paxton)
To: VoiceProject↑

---------------------------

Date: 8 Oct. 1981 8:11 am PDT (Thursday)
From: Paxton.PA
Subject: telephone trivia
To: Swinehart

Dan,

Please add this to your list of features if it's not already there --
I keep forgetting to cancel call forwarding and would really like to say "forward
my calls to x1234 for the next 3 hours" and have it automatically time out. 
Trivial feature, but it would sure help me.

Bill


---------------------------

Date: 8 Oct. 1981 8:45 am PDT (Thursday)
From: Swinehart.PA
Subject: Re: telephone trivia
In-reply-to: Your message of 8 Oct. 1981 8:11 am PDT (Thursday)
To: Paxton
cc: Swinehart

Sure.  Most systems cancel forwarding every midnight anyhow.  We intend to have phones follow your "login" around, which will help sometimes.  Ultimately, they may follow YOU around -- which will either be good or bad -- just call us Pandora.  In any case, (Motherhood coming, watch out) all these features will be programmable by clients outside the boundaries of our servers and terminals -- e.g., from the workstation.  If anything's the main idea, that's it.

------------------------------------------------------------

*start*
03088 00024 US 
Date: 7 Oct. 1981 9:27 pm PDT (Wednesday)
Sender: Owicki.PA
Subject: Minutes of meeting on EtherPhone Smarts, 10-7-81
To: VoiceProject↑
cc:  Owicki
From: Owicki, Swinehart
Reply-To: Owicki

We now have a rough idea of the state-structure of the Etherphone Smarts.  I
hope to start coding next week.

States

Idle
Parsing   (interpreting an event sequence from the etherphone)
Initiating   (trying to place an outgoing call)
Incoming   (an incoming call has arrived and Etherphone is ringing)
Conversing   (connection has been established)
DisconnectInitiate  (Etherphone has signalled termination)
DisconnectIncoming   (Other end of call has signalled termination)

These might be called the "major" states.  There will be substates in many cases
-- parsing is the most obvious example.  The last two states might disappear, but
we're leaving them in for the time being.

Events that cause a state transition may come from the etherphone or from the
server.  Events from the etherphone include offhook, onhook, and some set of
digits, letters, and special characters.  Events from the network include 
   canconnect -- requests information only.  Legal in any state, but causes
			no state changes, so not listed in transitions below.
   alert         -- announces an incoming call
   abort 	 -- cancel current conversation or connect attempt
   converse    -- informs of sockets for conversing
   {rejected, busy, accepted, OKBut} -- returns from CanConnect and Alert 
   


State transitions

Where an event is not mentioned as a transition from a state, it causes no state
change.  It may cause some sort of error report to the initiator of the event.

    Event		New State		Actions

Idle
   Off-hook   -->   Parsing
   Alert        -->   Incoming		Send ring to EP  (Done by setting up
						a process, which is killed when leaving
						Incoming state)

Parsing
    EP-events -->	Parsing		Silence to EP
    EP-end    --> 	Initiating		
    On-Hook	 -->  	Idle

Initiating
    On entry					Create conversation
						CanConnect
						Send RingBack to EP
    						Alert
    rejected   -->     disconnectIncoming Send error sound to EP
    busy      -->     disconnectIncoming	Send busy signal to EP
    On-Hook	-->     disconnectInitiated	send abort to server
    accepted  --> 	conversing		conversation.join
    OKBut    --> 	parsing (to be done later!)
Note -- we ultimately plan a work station which is much smarter here.  In
particular, a rejected or busy may cause further parsing or may remain in the
Initiating state.  The state transitions above should be sufficient for the first cut. 
 
Incoming
    Off-hook  -->	Conversing		conversation.join
						kill ringing process
    Abort      -->    Idle			kill ringing process

Conversing
    Abort      -->	DisconnectIncoming  Send dial tone to EP
    On-hook   -->	DisconnectInitiated	 Send silence to EP
						 conversation.leave

DisconnectInitiate
    At entry					conversation.leave
		-->  	Idle

DisconnnectIncoming
    Time-expired -->  Parsing		dialtone to EP
    On-hook	-->	Idle			silence to EP



*start*
03979 00024 US 
Date: 8 Oct. 1981 12:08 pm PDT (Thursday)
From: Swinehart.PA
Subject: Minutes of an RPC-related conversation with Andrew Birrell
To: VoiceProject↑, Birrell
cc: Swinehart

Susan and I talked with Andrew on Monday 10/5.  We clarified our intended use of the RPC.  It looks quite doable, although in places a little strange at first.

Basic idea:  If a program module wants to use some procedures from (a single or fixed number of instances of) an interface that is to be implemented remotely, the program module just imports the interface and calls the procedures.  When the system is configured, a "stub" module is included to export the interface.  The stub in turn knows how to turn procedure calls into network communications and to turn network communications into return records.

At run time you have to "bind" the stub to some remote implementation, I think through specific calls.  The normal way to do this is to communicate with Grapevine, which associates very specific bindings with very specific names.  When a "server" (provider of remote binding) comes up, it enters its net location in this data base.  I think the general notion is that such bindings should last a long time, but there's no real problem with their coming and going as various things come on line, etc.  Once the bindings are known, they need not be consulted again in order to perform the RPCs; the RPC implementation will use the binding info to create/destroy sequenced connections, etc.

First problem and solution:  The Lark program won't be powerful or big enough to crank up a full Pup byte stream for contacting this binding service on Grapevine.  So we'll implement a simple packet-exchange thing on a Thrush which will do the binding for its client and return the results.

Second problem and solution: Each Fone will have to initiate communications with time-varying numbers of Smarts (usually 0, 1, or 2), as the Smarts register with it.  This kind of thing is not readily doable in Mesa, remote or not, at the "interface record" level -- that's why various object-oriented kludges were invented.  In addition, the standard ways of generating "objects" -- as records of procedures and data -- need to be modified a bit in the absence of a shared address space or something known in the language trade as persistent closures of local frames (next time you want to impress your grandmother ...).  Our approach: The remote Smarts can use the standard Grapevine means (actually a tuned version that we will provide in Thrush via the Net object -- to which the Smarts WILL bind via Grapevine) to bind to and communicate with its (single) Fone.  The first communication will be a Register procedure, whose argument will be a record of other (remote) procedures, bound to that Smart's environment, that the Fone can use to initiate actions later.  As long as the Registration procedure is in progress, the record of procedures will remain valid.  So the Smarts will have to FORK a process to call the registration procedure.  The procedure will not return until a Deregister procedure is called later to destroy the "connection".  The Register procedure could return right away when called from a local Smarts -- to save PSB's -- but whether/how to detect the difference is problematical.

A remaining problem:  Suppose Smarts[i] calls a Fone action.  On occasion, the Fone will want to know which registered Smarts procedure record corresponds to Smarts[i], in order to initiate a later call to that Smarts in particular (it comes up).  We'll need some sort of unique identifier that forms a part of the Registered procedure record and is supplied in each Smarts=>Fone call.  In previous designs the object handle automatically provided this identifier, but in this design the procedure record is passed by value, so we'll have to make such an identifier explicit, or dredge it out of the RPC implementation.

Have I left anything crucial out, Andrew or Susan?

Dan

*start*
00455 00024 US 
Date: 8 Oct. 1981 2:48 pm PDT (Thursday)
From: Stewart.PA
Subject: 1.5 Mbps gateway
To: Boggs
cc: VoiceProject↑.pa

David,

My best guess for when we will need a gateway to 1.5 Mbps is November 10.
Severo will come up with an Alto I when needed.

Besides a gateway, I will want to run a version of Etherwatch and perhaps
Peekpup on the 1.5 net.  Given the microcode and an Ethernet controller, that
seems straightforward.
	-Larry

*start*
00679 00024 US 
Mail-from: Arpanet host SRI-UNIX rcvd at 20-OCT-81 1624-PDT
Date:      20 Oct 81 18:19:55-EDT (Tue)
From:      J C Pistritto <jcp.bmd70@BRL>
To:        unix-wizards at Sri-Unix
Subject:   8086 C Compiler
Via:  BMD70; 20 Oct 81 18:24-EDT
Via:  Brl.ArpaNet; 20 Oct 81 15:43-PDT


A group named Virtual Systems Inc.  (unsure of the address), will be
marketing a C compiler for the 8086 soon, for an undisclosed price.
This compiler is based on the Whitesmith's Code for the PDP-11, and
generates about 15% more instructions on the 8086 than the 11 version.
Exact availability date is unknown, but thought someone might be
interested.

					-Joe Pistritto-


*start*
01078 00024 US 
Date: 13 Oct. 1981 3:29 pm PDT (Tuesday)
From: Ornstein.PA
Subject: Memories
To: Stewart
cc: Ornstein

Did you ever get an answer from Thacker to:

- - - - -

Date: 21 Sept. 1981 2:11 pm PDT (Monday)
From: Stewart.PA
Subject: 16Kx1 Static memories
To: Thacker
cc: Ornstein, Stewart

We've been thinking about the Etherphone II memory system.  We had been
planning to use a few (e.g. 4) 2Kx8 statics for about 8K bytes.  That now seems
tight.  The next step is probably 8 16Kx1 statics with space for another row of 8
for up to 32 K bytes.  Above that, probably we would need to go to 8 64K
dynamic chips.

Questions:

Is this thinking right?
How hard is it to build a dynamic memory system using one of the new
controller devices?
What is the right 16Kx1 chip to use?  (I noticed that the D0 Map uses dynamic
memories).

	-Larry

- - - - -

I'm currently planning just for 16K bytes of Ram (eight of the 2K x 8). Should I
allow for more - twice that? It's easy at this stage so if there is any question in
your mind, we probably should- let me know.

S.
*start*
00313 00024 US 
Date: 13 Oct. 1981 4:08 pm PDT (Tuesday)
From: Stewart.PA
Subject: Re: Memories
In-reply-to: Your message of 13 Oct. 1981 3:29 pm PDT (Tuesday)
To: Ornstein
cc: Stewart

Plan for 32K for now.  Chuck didn't answer.  Have you heard from Joe Patti on
the search for slow 16K x 1's?

	-Larry

*start*
03408 00024 US 
Date: 13 Oct. 1981 6:01 pm PDT (Tuesday)
From: Ousterhout.PA
Subject: Conferencing revisited
To: VoiceProject↑.pa

Here are some thoughts about conferencing and recording of conversations.
The overall idea is to make the transmission protocols simple and uniform
by using multi-casting with a single packet size. Comments are invited, of
course.

1.  Dan informs me that it is possible to get Dorado microcode to respond
to multiple Ethernet addresses, so

2.  I propose that multi-casting should be used between Etherphones and the
VFS.  Each conversation is assigned (by Thrush) an address to be used,
and all Etherphones change their network address to that conversation
address for the duration of the conversation.   Thus all Etherphones will
get all packets related to a conversation.  Since the VFS may be taking
part in several conversations, it will have to be able to respond to several
addresses.

3.  A packet intended for just one element of a conversation will have to
be identified internally with the desired recipient, since all elements of
the conversation will receive it.  An example of such a packet is an RPC
from Thrush to make one of the Etherphones leave the conversation.  Dan
and Susan:  how much will this complicate Thrush and/or RPC?  Since
the VFS will respond to multiple addresses, only Thrush/Lark and Lark/Lark
communication will be complicated.

4.  Lark and Bluejay will receive their own transmissions, and will have to
throw them away.

5.  I think that multi-casting is the simplest way to (eventually) solve or
(initially) ignore the merging problem.  By using multi-casting it won't
be necessary to merge and retransmit 3-way conversations from some central
point.   I suggest that each element of a conversation be left to its own means
to handle merging.  For the VFS, I think it has enough horsepower to do
the merges.  For the Etherphones, if one Etherphone has enough horsepower,
then they all do, so it doesn't matter that all of the Etherphones in a
conversation are merging the same stuff at the same time (there's no good
reason for having one Etherphone merge for the others).

6.  It seems to me that the necessity for merging will be infrequent and
short-lived.  In most conversations, there will be only one active source
at a time.  If the Etherphones don't have enough grunts to do merging,
then it might work out OK to use some brute force technique like:
	-- bleep when two sources are active
	-- alternate back and forth between the various sources on a packet
	    by packet basis.
These are both pretty gross, but they would at least allow us to do simple
conferencing in the short run.  In the long run, there will (?) be faster
8088's that will (?) have enough horsepower.

6.  Lastly, I propose that the VFS should receive packets just like Etherphones,
i.e. small packets every 20 ms.  I don't know how this will affect its
performance, but I'm certain it will make life a lot simpler during the
initial implementation.

The overall goal behind these suggestions is to keep life as simple as possible
during the early implementation, while still leaving open general schemes
like 3-element conversations.  If we implement multiple packet sizes and
central merging, then we pay the implementation cost immediately.
The open question is whether there will be enough horsepower for the
simple implementation.
					-John-
*start*
01156 00024 US 
Date: 14 Oct. 1981 8:03 am PDT (Wednesday)
From: Owicki.PA
Subject: Re: Conferencing revisited
In-reply-to: Ousterhout's message of 13 Oct. 1981 6:01 pm PDT (Tuesday)
To: Ousterhout
cc: VoiceProject↑
Reply-To: Owicki

John,

Using multicasts makes sense, as long as the merging problem can be solved for
the etherphones.  As far as I can see, multicasts do not complicate the server
much if at all.  The particular example you mention, where Thrush asks an
Etherphone to leave the conversation, is not a problem because that is control
information, which is going to a different socket than voice information in any
case.  Given that control and voice always go to different sockets, I don't see any
case where a voice packet would need to go to just one host.  If that's right then
no internal destination id is needed.  

I'm assuming that we get some automatic message routing to processes on a
machine in Cedar.  Is that valid?  What I'm thinking of is that when Thrush and
BlueJay share a Dorado, we need to have incoming messages sent to the
appropriate place, and I have assumed the mechanism for that already exists.

Sue 

*start*
00642 00024 US 
Date: 14 Oct. 1981 8:13 am PDT (Wednesday)
From: Swinehart.PA
Subject: Re: Conferencing revisited
In-reply-to: Ousterhout's message of 13 Oct. 1981 6:01 pm PDT (Tuesday)
To: Ousterhout
cc: VoiceProject↑

I like this approach better than the other approaches, especially at the beginning, since it most closely approaches the ideal (personal opinion) for doing conferencing.  The hard part about the control business will probably not be at the Thrush end but at the Lark end, since it hairs up a hand-tuned Pup package.  We should probably get a two-party conversation going first, but aside from that, I'm with you.

*start*
01174 00024 US 
Date: 19 Oct. 1981 4:16 pm PDT (Monday)
From: Ornstein.PA
Subject: Frequencies
To: Boggs
cc: VoiceProject↑

There are several fundamental frequencies in the Etherphone:

1. The Processor clock - nominally 5 MHZ
2. The SLC clock for running the Ethernet - nominally 1.5 MHZ
3. A T1 clock for digitizing and re-analogizing voice - 1.536 MHZ
4. Clocks for 2400 and 300 baud asynchronous lines 

It would eliminate synchronizers and be quite motherhoody if we could run all
this stuff off one basic clock with various count-downs. Roughly it looks feasible
- say you took 9 x 1.536 as basic clock, that would be appropriate for the
processor (which divides it by three and would thus run the Proc. at 3 x 1.536).
Obviously the T1 line would love it (it was set for T1). You can get close
enough to 300 and 2400 baud by counting down (we were going to do that
anyway). So that leaves the Ethernet - the question being - would we be able to
talk to a divided-by-two 3 MB Alto Gateway if we ran at 1.536? Another form of
the question (I think) is - could we (at 2 x1.536 = 3.072 MB) talk to a regular
Alto "3 MB" ethernet (and could it talk to us)?

Severo
*start*
00366 00024 US 
Date: 19 Oct. 1981 11:42 am PDT (Monday)
From: Stewart.PA
Subject: Re: Files archived
To: VoiceProject↑.pa

I was annoyed over the weekend because [Indigo]<Voice> was out of space.  I
moved a bunch of stuff to [Maxc]<Voice> and archived it.  Mostly obsolete
Auburn stuff.  There are now around 900 free IFS pages on [Indigo]<Voice>.
	-Larry

*start*
00457 00024 US 
Date: 20 Oct. 1981 12:10 pm PDT (Tuesday)
From: Stewart.PA
Subject: Ethernet Voice soon, says Massaro
To: VoiceInterest↑.pa

According to the Oct. 19 Information Systems News, OPD will soon announce a
voice store and forward capability for attachment to STARs.  Massaro also notes
that the experimental Ethernet at the Palo Alto Research Center can handle 20
simultaneous telephone calls in addition to a normal data load.

	-Larry

*start*
04373 00024 US 
Date: 28 Sept. 1981 10:01 am PDT (Monday)
From: Deutsch.PA
Subject: Re: D0 LoadMb
In-reply-to: Your message of 27 Sept. 1981 1:52 pm PDT (Sunday)
To: Stewart

Actually, I have a program that converts Dolphin .MB files to .BR files in the
format that LRJ wants.  I'm sure you (or I) could easily modify it to load the
microcode directly.  The program is called D0PackMB.Run on my Phylum
directory.  The source file is d0packmb.bcpl and the command file for loading it
is loadd0packmb.cm.  (It uses several library packages which by now have
undoubtedly been tape-archived, but I can send them to you directly if you
want.)  The command line format is

	>D0PackMB xxx.MB xxx.BR [startlabel/startaddress [symbol]]

where startlabel/startaddress is the branch address for LRJ (defaults to 0) and
symbol is the external name for the first word of the data in the .BR file
(defaults to RamImage).  Since the program is quite short, I'm including a copy of
it with this message.  (Ignore the comment which implies that it allows multiple
.MB files.)  Good luck.

---------------------------------------------------------

// D0PackMB -- Pack a D0 .MB file for use with LRJ
// last edited August 6, 1980  9:46 AM

// Command line format is:
//	D0PackMB xxx.MB xxx.BR [startlabel/startaddress] (xxx.MB
startlabel/startaddress)* [symbol]

	get "streams.d"

external
[		// O.S.
	Closes
	Endofs
	MoveBlock
	Noop
	OpenFile
	SetBlock
	Wo; Ws; WriteBlock
	Zero
	fpComCm
		// GP
	SetupReadParam
	ReadParam
		// ReadMB
	ReadMB
		// WriteBR
	StartBRfile
	StartBRnames; BRname
	StartBRlabels; BRlabel
	StartBRcode; BRcode
	EndBRblock
	EndBRfile
]


structure BS: [ length byte; char↑1,255 byte ]

static
[	imx = -1
	imap
	imv
	ni
	sa
	sav
]


let D0PackMB() be
[	let com = OpenFile(0, ksTypeReadOnly, charItem, 0, fpComCm)
	let nv, swv = vec 100, vec 100
	SetupReadParam(nv, swv, com, swv)
	let inst = ReadParam("IW", ".MB file (input): ", nv, swv)
	let outst = ReadParam("OW", ".BR file (output): ", nv, swv)
	let svv = vec 100
	sav = svv
	test Endofs(com)
	 ifso sa = 0
	 ifnot
	[ ReadParam($P, 0, svv, swv)
	  sa = readSA(svv)
	]
	let name = vec 128
	MoveBlock(name, "RamImage", 5)
	unless Endofs(com) do ReadParam($P, 0, name, swv)
	Closes(com)
	StartBRfile(outst)
	StartBRcode()
	BRcode(0)	// Bldr zeros the first word!  But LRJ wants an extra word
on the front anyway
	let imp = vec 10000b	// Imaginary to real address map
	SetBlock(imp, -1, 10000b)
	imap = imp
	let imvec = vec 30000b	// Holds resulting IM data
	imv = imvec
	let r = ReadMB(inst, 20, pmemproc, (sa eq -1? psymproc, Noop))
	BRcode(imv, ni*3)
	let w0, w1, w2 = 7777b lshift 4, sa, sa	// Unclear whether word 1 or 2
is the starting address
	BRcode(lv w0, 3)
	EndBRblock()
	StartBRnames()
	BRname(#140, 0, name)	// entry label xxx
	let len = name>>BS.length+1
	for i = 0 to 4 do
	  name>>BS.char↑(len+i) = table[ $L; $a; $s; $t; 0]!i
	name>>BS.length = len+3
	BRname(#140, 0, name)	// entry label xxxLast
	EndBRblock()
	StartBRlabels()
	BRlabel(1, 0)	// initialize the initial label
	BRlabel(2, 1+ni*3)	// initialize the Last label
	EndBRblock()
	Closes(inst)
	EndBRfile()
	Closes(outst)
	test sa eq -1
	 ifso [ Ws("Error: starting address not found*N") ]
	 ifnot
	test r eq 0
	 ifso [ Wo(ni); Ws(" instructions*N") ]
	 ifnot [ Ws("Error: "); Ws(r); Ws("*N") ]
]

and readSA(sav) = valof
// Read starting address from string, return value if numeric or -1 if not
[	if sav>>BS.length eq 0 resultis -1	// null string
	let sa = 0
	for i = 1 to sav>>BS.length do
	[ let c = sav>>BS.char↑i
	  test (c ge $0) & (c le $7)
	   ifso sa = sa*10b+c-$0
	   ifnot resultis -1
	]
	resultis sa
]


and pmemproc(memx, width, name) = valof
[	test (name!0 eq 1000b+$I) & (name!1 eq $M*400b)
	 ifso [ imx = memx; resultis pimproc ]
	 ifnot resultis Noop
]

and pimproc(addr, data) be
[	let ima = data!3
	let p = imv+ni*3
	p!0, p!1, p!2 = (ima lshift 4) + (data!2 rshift 12), data!0, data!1
	imap!addr = ima
	ni = ni+1
]

and psymproc(memx, value, name) be
// Look up a symbolic starting address
if (sa eq -1) & (memx eq imx) then	// might have found it already
[	if name>>BS.length ne sav>>BS.length return
	for i = 1 to name>>BS.length do
	[ let c1 = name>>BS.char↑i
	  let c2 = sav>>BS.char↑i
	  if (c1 & not 40b) ne (c2 & not 40b) return	// case shift
	]
	sa = imap!value
	Ws(name); Ws(" ="); Wo(sa); Ws("*N")
]


*start*
00887 00024 US 
Date: 29 Sept. 1981 10:24 am PDT (Tuesday)
From: Deutsch.PA
Subject: Re: D0 LoadMb
In-reply-to: Your message of 29 Sept. 1981 10:08 am PDT (Tuesday)
To: Stewart

Here's the little program that we use to generate the loader for the Dolphin
Smalltalk-76 microcode.

--------------------------------------

// Load D0 microcode and boot
// last edited April 16, 1981  11:45 AM

// To load up the Smalltalk microcode, the command is:
//	>Bldr d0smalltalkmicrocode/s 30000/c d0ram smalltalk
// where smalltalk.BR is the file produced by D0PackMB

external [ RamImage; RamImageLast ]

structure [ blank word 2; blank bit 4; startAddr bit 12 ]

let D0Ram() be
[	let LRJ = table[ #61036 ]
	let SDP = table[ #61037; #1401 ]
	if SDP(0) ne 1 then	// change starting address for partition 2 boot
	  RamImageLast>>startAddr = RamImageLast>>startAddr + 2
	LRJ(RamImage, 1)
]


*start*
01659 00024 US 
Date: 15-Oct-81 10:16:14 PDT (Thursday)
From: Murray.PA
Subject: 8085 Assembler and Binder
To: Stewart
cc: Murray

Are you on one DLionMicrocoders↑?  Do you know Pat OLMSTEAD? .....

------------------------------
Date: 14 Oct. 1981 4:40 pm PDT (Wednesday)
From: OLMSTEAD.PA
Subject: 8085 Assembler and Binder
To: IOPUsers↑
cc: DLionMicrocoders↑, SDD-WSDes↑, SDD-Arch↑, SDD-Diag↑
Reply-To: OLMSTEAD

I have converted the 8085 assembler and binder to run under Tajo.  Along the
way, I plugged many minor and several major storage leaks; I now think I've got
them all.

The programs are I8085AssemblerDLion.bcd and I8085BinderDLion.bcd, stored on
directory [Iris]<Olmstead>8085>.

The interface to both programs is basically the same as it would have been on
the Alto if it had ever worked:  To the SimpleExec, type
	I8085AssemblerDLion src1 src2 src3...
	I8085BinderDLion cfg1 cfg2 cf3...
where the src's are .asm files and the cfg's are .cfg files.

Timing comparisons are difficult, since the Alto-based assembler will die if fed
more than 2 files at a time, or the disk doesn't have enough room for the .lst,
.sym, etc. files.  However:
	"I8085AssemblerDLion all-the-19-files-in-Domino" took 16 minutes the last
time I checked, and that was with NIL checking on, which I have since turned
off.
	"I8085BinderDLion Domino" takes 1 minute; on the Alto it takes from 15 to
20.

"If you use these programs, I would appreciate a message letting me know.  This
version has not been extensively tested, so be sure to let me know of any
problems you experience with it."

Pat

----------------------------------------------------------------
*start*
00823 00024 US 
Date: 17 Oct. 1981 3:00 pm PDT (Saturday)
Sender: Stewart.PA
Subject: Incoming call management
From: Gifford.PA
To: VoiceProject↑.pa
Reply-To: Stewart

Date: 17 Oct. 1981 12:17 pm PDT (Saturday)
From: Gifford.PA
Subject: Incoming call management
To: Stewart, Swinehart, Ornstein
cc: Gifford

Voice folks,

Although you may have thought of this already, I thought I would pass along
an idea I heard from Al Spector at CMU.

If an outside line is ringing (and not being answered), you may wish to forward
the incoming call to a phone within the Etherphone network.  In this case, you
do not have to answer the outside line.  Simply ring the Etherphone (or more
than one Etherphone, if you like the shotgun approach), and if it is answered,
pick up the outside line and establish the talk path.

Dave 
*start*
01511 00024 US 
Date: 19 Oct. 1981 9:55 am PDT (Monday)
From: Swinehart.PA
Subject: Re: Incoming call management
In-reply-to: Gifford's message of 17 Oct. 1981 12:17 pm PDT (Saturday)
To: Gifford
cc: VoiceProject↑
Reply-To: Swinehart

Yes.  In fact, once we have real trunks, we could "trip ringing" without actually signalling "answer" (that's done by doing a "reverse battery" operation), and provide various call progress signals -- even recorded announcements about what kinds of forwarding activities were taking place.  At present, this would be strictly proscribed by the telco regulations, but these days negotiation is the watchword, so it would be fun to toy with some of this stuff.

-------------------------------------------------------------------------------
Date: 17 Oct. 1981 12:17 pm PDT (Saturday)
From: Gifford.PA
Subject: Incoming call management
To: Stewart, Swinehart, Ornstein
cc: Gifford

Voice folks,

Although you may have thought of this already, I thought I would pass along
an idea I heard from Al Spector at CMU.

If an outside line is ringing (and not being answered), you may wish to forward
the incoming call to a phone within the Etherphone network.  In this case, you
do not have to answer the outside line.  Simply ring the Etherphone (or more
than one Etherphone, if you like the shotgun approach), and if it is answered,
pick up the outside line and establish the talk path.

Dave 

-------------------------------------------------------------------------------
*start*
01121 00024 US 
Date: 21 Oct. 1981 5:02 pm PDT (Wednesday)
From: Ornstein.PA
Subject: Hardware Questions
To: Ornstein, Stewart

1. Intel 8237

a. Does 8237 re-prioritize in single transfer mode after each byte transferred -
even if the lower priority guy holds onto his request (in case a higher priority
guy comes in)

b. Similarly - does it re-issue ADSTRB on each new byte (in single transfer
mode) in case the other DMA got in and polluted the latch.

c. on a write from memory to device, how long between stopping write-device
and stopping read-memory? (This gives us some part of the 80ns the 8068 needs
- the memory will give some more delay).

Larry Goss 496-7360


2. AMD 8068

a. is the data hold time really 80 ns. (and adress 60) ? Data Hold = TG1HD1X
and Address = TAHD1X (pgs 11 - 12)

b. what does "synchronous" mean under clocking ( pg 8 under clk pin
description)

c. is port config forced by reset (Master clear, Slave Encrypt) and unsettable in
Direct Control mode? (We'd really like single port)

Chuck Lytle 408-727 1300 applications guy 
real engineer is Subodh Banerjee - going to call us

*start*
04566 00024 US 
Date: 30 Oct. 1981 9:03 am PST (Friday)
From: Ornstein.PA
Subject: ETP QUESTIONS
To: Stewart

I haven't gotten much done I'm afraid. Other distractions plus now I'm sick. What
I've thought about mostly is the synchronizing of the 8068 and either I don't
understand or there are some serious problems. After thinking about just a few of
these I'm inclined to flick it in and live with the 20% degradation of 4 MHZ
everywhere. I'm afraid the synchronizing/handshaking problems are a bag of
worms - see below. Then let's talk.

1.  Is it true that with your scheme, wherein the Processor does the first input or
output from/to the 8068, we don't need the kind of address muxing shown in Fig
37 - because the chip only sees that one MAS? Do other devices need it (the
muxing)? (8274, 8251, 8259?)

2. I don't fully understand the need for the buffering of the AD bus to/from the
8068 (ENCAD) when it runs at 4 MHZ. Suppose, for example, the DMA is trying
to read something from the 8068 to memory. The 8068 stops the show (via
DMA0RDY) until it gets the IORD synced up to make MDS (or SDS) and has the
data ready. Presumably the DMA is giving the memory a giant long MWR while
it's waiting. When the DMA0RDY is finally given, it means the 8068 has its data
on the bus (the IORD got through the synchronizer and made an MDS at about
the same time DMA0RDY came on). So far presumably no problem, right? The
DMA will then shortly take away its MEMWR, and shortly after, the IORD, and
finally the DACK. I assume the problem is making sure the 8068 lets go of the
bus expeditiously for ensuing use? Presumably that's delayed because of the
synchronizing of the trailing edge of IORD to make the trailing edge of MDS
which then causes the 8068 to let go of the bus. In the meantime somebody else
might be trying to use the bus and the 8068n would be dumping onto it. For the
other way - DMA reading memory and writing to the 8068 - I assume the
equivalent problem is that the 8068 (because of the slownes in seeing IOWR go
away thanks to the synchronizing) might still be sucking data off the bus after
the memory quit sending (having more quickly seen the end of MEMRD)?

If these are really the problems, couldn't we fix them easier by making sure that
the trailing edge of IORD and IOWR somehow got around the synchronizers fast?
Anyway I don't understand how the flop enabling the 8282 outputs onto ENCAD
works. Presumably the latch is to hold the local (ENCAD) bus correct (for
writing into the 8068) - even after the rest of the world proceeds. Presumably the
IORD reset of the flop is to get such previously latched contents off the local
(ENCAD) bus for a later IORD of the 8068. But the IORD reset is unqualified.
What if the rest of the world goes on, following an IOWR to the 8068, to do some
other IORD. That'll kill the 8068's local ENCAD, which it maybe hasn't yet
finished putting away. 

And what about the chip selects? They aren't synchronized. What happens
when they go away? (N.B. they aren't latched by MAS in Direct Control mode).
In fact it doesn't look like they HAVE to be (synchronized) for their onset -
since they only determine whether or not the chip will respond to the later
arriving synchronized IORD/IOWR. And maybe by having them not
synchronized, the chip automatically falls off the bus immediately when the
DACK disappears - apparently solving the problem discussed above. 

3. In any case, I think we can't use ENCMASDACK or ENCSLVDACK just to DC
reset the DMA0RDY flop - since that will hold it reset despite efforts to turn it
back on once we've synchronized IORD (or IOWR). Not easy to fix. Might use a
JK flop and 4MHZ clock - turn it off (not RDY) when you see a
4MHZ-SYNCHRONIZED ENCMASDACK or ENCSLVDACK (must be synced or
will runt) But that syncing may be too slow a response to the DMA. In fact I
don't see any spec about how fast you have to have READY down (to the DMA)
after the IORD or IOWR. They just show set-up and hold times relative to the
DMA clock and it may be that if you take READY up or down asynchronously
with that clock, the DMA doesn't synchronize it.???    

4. How can we be sure with our synchronizer that in worst case we don't violate
the max allowable width of MDS? It's an IORD synchronized to 4 mhz but I don't
see any upper limit on how long the IORD might be and in fact with our saying
not Ready, it will stretch way out, no? Will the Z8068 maybe get confused and
think that we're giving another MDS???

From all this you can see my state of confusion.

Welcome home.

S.

*start*
00837 00024 US 
Date: 3 Nov. 1981 5:12 pm PST (Tuesday)
From: Swinehart.PA
Subject: Lark.GV
To: Birrell
cc: VoiceProject↑, Swinehart
Reply-To: Swinehart

I think I mentioned in passing once that it might be useful for the voice project to have a registry to play with.  Possibly it won't be necessary after things have settled down, but I think it would be a lot safer during the development if we could keep our stuff out of the main stream. 

So, would it be possible for you to create the registry Lark.GV, probably residing on Cabernet and Zinfandel, with owners Swinehart, Stewart, Owicki (and one of you ex-Officio, I imagine)?  I do not believe we will be sending any messages directly to names in this registry, at least at first -- we'll mainly be using the authentication and the connect-sites.

Thanks,
Dan Swinehart

*start*
00990 00024 US 
Date: 3 Nov. 1981 10:50 pm PST (Tuesday)
From: Stewart.PA
Subject: Memory bus data transceiver backwards
To: Ornstein
cc: Stewart

According to my 8286 data book, when the T (transmit) pin is HIGH, the A pins
are inputs and the B pins are outputs.  On page one, MWR' is driving T, but the
B pins are on the memory side.  We must either use MRD' for T or use the B
pins on the AD0-7 side.

Since the memories present less loading than all the junk we've got on the
processor bus, and since the B pins are beefier, i suggest we turn the transceiver
around, so that the A pins connect to BDATA and the B pins to AD0-7.

Incidently, if we do it that way, and we use the time difference between MEMR'
anmd IOW' on the DMA to provide the 8068 data  hopld time, the transceiver
will not be turned off "early", rather the data won't become invalid on the AD
bus until a transceiver propagation delay after MRD' going high disables the
outputs of the memory chips.

	-Larry

*start*
00628 00024 US 
Date: 3 Nov. 1981 11:55 pm PST (Tuesday)
From: Stewart.PA
Subject: Bugs on page 38
To: Ornstein
cc: Stewart

On page 38, all the control logic for this scheme could be generated by a  single
256 by 4 ROM.  That would save a couple chips.

page 38 corrections:

MCS' should be GND, not SELENCMAS'.  SELENCMAS' doesn't do anything
useful!

The gates generating ENCRDEN' and ENCWREN' have HLDA' as an input.  That
should be the bubble input AND of HLDA and SELECMAS'.

Otherwise, if the processor does IO to some OTHER device while an encryption is
in progress, the 8068 would become de-selected.

	-Larry

*start*
11236 00024 US 
Date: 5 Nov. 1981 11:10 am PST (Thursday)
From: Stewart.PA
Subject: 8068 + 9517
To: Ornstein
cc: Stewart

This message is a series of notes about the encryption chip and DMA controller. 
Some of them are copied from earlier messages

We want to use an 8068 encryption chip in an 8088 system.  We need to have
DMA driven memory to memory encrypt and decrypt, "Electronic Code Book"
(block ciphering) only.

We would like to run the processor as fast as possible.  Today that means 5 MHz,
limited by the 8237-5 (Intel version of AMD 9517.  Fastest 9517 is 4 MHz.) and
by the I8259 interrupt controller.  Someday, 8 MHz 8088's will be available too.  
We can probably live with running the processor at 4 MHz as we do not need
the bus bandwidth (today) and probably will not be running the software within
20 percent of flat out (I hope).

1. Intel 8237/ AM 9517

Since the 8068 is so fast, we would like to give it a bus cycle priority higher
than that of the processor, but lower than any other DMA device.  We plan to
encrypt blocks which are long enough to cause data-late errors on our other
DMA devices if the encryption ties up the bus.  We plan to run everything in
"single-transfer" mode, so that the processor gets every other bus cycle and (we
hope) the DMAs re-arbitrate DMA request priority between every cycle.

We want to use, then, the two lowest priority DMA channels, one for
memory-to-8068 and the other for 8068-to-memory.  The 9517 has a
"Single-transfer" mode that does a one byte DMA transfer each time the processor
grants the bus.  The intended purpose appears to be to assure the processor gets
half the cycles.  The 9517 data sheet does not say whether or not the 9517
re-prioritizes the DMA requests between such single transfers.  Since the 8068 is
so fast, it will always be requesting.  If the 9517 does not re-prioritize, the 8068
will lock out the higher priority DMA devices, causing data-late errors.

We have 7 DMA channels, 6 devices plus a cascaded 9517  (one of the other
devices also has built in DMA controllers, so that channel is also "cascade mode"
on the 9517).  We want to use the same 8-bit latch for the high order address bits
for both 9517s.  Does the 9517 assume that it has a private latch or does it
re-issue ADSTRB on each new byte (in single transfer mode) in case the other
DMA got in and changed the latch contents?  (The same question applies when
the 9517 re-arbitrates and switches channels - it must reload the external latch in
such cases.  The data sheet doesn't say.)

When you do a DMA transfer from memory to device, the 9517 says MEMR to
the memory and IOWR to the device, the data just flows down the bus.  The
9517 appears to hold MEMR active longer than IOWR, providing some data hold
time to the device.  How long?  The only way to tell seems to be to subtract
TDCTR-TDCTW.  I ask because the 8068 needs a very long hold time.

USE OF 8068

MAS':  There appear to be no specs relating MAS' to the clock.

								min	max
32	MAS' width						 80
34	MCS' low to MAS' high (CS setup)		  0
35	MAS' high to MCS' high (CS hold)		 60
36	Addr valid to MAS' high (address setup)	 55
37	MAS' high to address invalid (address hold)	 60

Ideally, we want to use the 8068 in single-port multiplexed control mode, so that
the processor could load the keys and set up the chip, then we could set up the
input and output dma channels for the actual ciphering operation. 
Unfortunately, multiplexed control mode requires that MAS' latch one of the bus
bits (and MCS') to select an internal register.

8088 running at 4 MHz

								min	max
TCLCL	clock period					250
TCLCH	clock low					152
TCHCL	clock high					 85 
TLHLL	ALE width	TCLCH-20			132
TLLAX	addr hold after ALE,  TCHCL-10		 75
TAVAL	addr setup to ALE low, TCLCH-60	 92

So for the 8088 controlling the cycle, ALE works fine.

Now what about the 8088 controlled RD' and WR' signals?  We would OR RD'
and WR' to create MDS' and use 8088 DT/R' for 8068 MR/W' (inverted)

8068 requirements on MR/W' and MDS':

42	MR/W' setup before MDS' low			100
43	MR/W' hold after MDS' high			 25
44	MDS' width						200	1000
45	clk low to MDS' high				 20	 70
47	data setup before MDS' high			125
48	data hold after MDS' high				 80
50	MDS' high to read data inval. (hold)		  5

8088 RD' and WR' timing

TCLRH	clk low to RD' high				 10	150	OOPS
TCVCTX	clk low to WR' high			 10	110	OOPS
TWHDX	data hold after WR'	TCLCH-30		122
TCLDX-TCLRX	data hold time for read		  0	-140
DT/R' becomes valid very early, so ok on setup
TCHCTV+TCLCH-TCLRH	ok if TCLRH and TCHCTV track	(DT/R' hold time)

(I think it is usually fair to assume that a given chip has fast signals or slow
signals, but not a mixture, so TCLRH and TCHCTV probably do track.  Should
ask Intel I guess.)

So it appears that the relationship between the 8088's RD' and WR' and the clock
is not strict enough to satisfy the 8068.

Now what about using the 9517A-4 to do DMA transfers with the 8068 in
multiplexed mode?

Problems:

There is no convenient source for MAS'.  Suppose for the moment that the 9517
can be forced to issue an ADSTB for every cycle (see discussion above on the
9517 external latch).  Since the 9517 is using the data bus for the high order
adress, we must provide a private copy of 8088 AD1 to 8068 pin MP1, which,
during ADSTB, we force LOW to address the data register.  We use the
Memory-to-8068 DMA DACK to provide MR/W'.

9517A-4 times:

MR/W' setup and hold are OK:
TDCL	DACK to RD' or WR' low				200
DACK appears to remain high after RD' or WR' high by a TCHCL time
	or 69 ns.  This is TAK+TCH-TDCTR

ADSTB timing   (for MAS')
TSTL	clk high to ADSTB start					150
TSTT	clk high to ADSTB end					110
	so ADSTB width is TCY-40 or about 210 ns
One thing to do would be to use the beginning of ADSTB to turn on the private
address going to 8068 MP1 and use the beginning of RD' or WR' to turn it off.
The hold time on the address for MAS' would then be TDCL-TSTT, or 90 ns

MDS' spec to CLK  (9517 timings for IOWR' and IORD')

TDCTR	clk high to RD' high				210   (127)	OOPS
TDCTW	clk high to WR' high				150   ( 67)
If the clock is high for exactly one third of 250 ns, then these times can
be referenced to clk low edge by subtracting 83  (in parens)  so that WR' is OK,
but RD' may not be.
IOWR'  width (extended) 2TCY-100			400
IORD'  width  (normal)	2TCY-50			450

(I am leery of subtracting specs.  Why is the 9517 referenced to CLK high, while
the 8068 is referenced to clock low?)

Data hold time on writes to the 8068:

In our system, we have a bus transceiver between the memory data bus and the
multiplexed address/data bus that the processor, DMAs, and 8068 are on.  In
DMA mode, the 9517 would say MEMR' to the  memories and IOWR' to the 8068. 
Since TDCTR is larger than TDCTW, the 9517 provides some data hold time.  If
we subtract:

TDCTR-TDCTW	data hold time			60		OOPS 

however, this time is extended slightly because the end of IORD' disables the
memory chips, and then the trailing end of valid data has to propagate through
to the 8068 via the bus transceiver.  According to Intel, the 8286 transceiver
might add 5 to 20 ns to the hold time, depending on loading.  So it might work if
the subtraction procedure is valid!

Data hold time on reads from the 8068:

This does not appear to be a problem, since the memories have essentially 0 hold
time requirement.


Summing up, multiplexed mode problems:

8088 has trouble meeting the MDS' clock sync requirement  (45).  DMA has the
same problem.  In addition, the data hold time on DMA writes to the 8068 may be
a problem.

The circuitry for creating the private address line is fairly ugly (see extra
page).  If we give up a requirement to read from the master port, (we would not
be able to read the status or mode registers, and we would have to use dual port
mode always, with master port input and slave port output, then the extra
circuits are simplified slightly, since the gate to allow reading is not needed and
the private "bus" need not be tristate.  (Actually, only bit 1 could not be read,
which would save some logic.)

Memory mapped 8068 does not seem feasible:

AMD made a suggestion that we operate the 8068 as a memory mapped device,
rather than as an IO device.  We would then use the DMAs to do BLTs into and
out of the 8068.  This would let the DMA provide the multiplexed address for the
8068, however, with the "private address line MP1" trick, we can do that with
the 8068 as an IO device.

1.   This would take up 4 DMA channels, as two are needed for input and two
for output. Also, only channels 0 and 1 of the 9517 can be used this way.

2.   There seems to be no way to hold the destination address fixed in such a
mode.  One slight possibility would be to set up the DMA channel for a one byte
transfer in auto-initialize mode...  (!!!)  This would permit the memory-to-8068
DMA to run past the end of the requested block, since the 8068 pipe would be
kept full and the length of the transfer would be controlled only by the byte
count of the 8068-to-memory DMA.

3.   Does single transfer mode work in memory-to-memory mode?   If not, is the
8068 fast enough to always be ready when the DMA gets there?  Also, if the
DMA must be in block mode, then our other DMA devices would be locked
out...

----------------------
Alternative Multiplexed control mode setup.  The idea here is that only the
procesor will issue MAS' to the 8068  (See page 38).  Thus the 8068 will be
permanently selected, with the selected register address being whatever the last
register addressed by the processor was.  MDS' and MAS' will be carefully
qualified by address information elsewhere, so that only IORD' and IOWR' signals
intended for the 8068 actually get through.  This idea requires that the processor
write the first byte of data to the 8068, to set up the register address, and the
"write" DMA handle the 2nd and later bytes.  This scheme seems ok, but it
would make a mess of the software.

On page 38, all the control logic for this scheme could be generated by a  single
256 by 4 ROM.  That would save a couple chips, given a fast ROM.

----------------------
Other stuff:

When reset of 8068 is done by simultaneous MAS' low and MDS' low, is there a
clock sync. requirement?  Time spec 6 implies that the reset must go away
syncronized to clk going high...

6	Clk high to (MAS' and MDS') high	min 0, max 50 ns

we will have to add more syncronizers to meet this one, as our reset is generated
by a capacitor...  (or is it synch'ed by the 8284?)

----------------------

As a parting comment, why does the 8068 have all these clock syncronization
requirements anyway?  I would be happier if the algorithm machine inside the
8068 were synchronous and the processor bus interface were asynchronous.  If
that were true, there would be no need to synchronize MAS', MDS' KEY/DATA,
and START to the clock.  There would have to be some internal synchronizers
(preferably double synchronizers!) inside the 8068 to make the transition accross
the boundary, but at least they are hidden from the poor user! (me)  It seems to
me that only a few signals, like "input register full" and "control register valid"
would need to be synchronized.

	Larry
*start*
01101 00024 US 
Subject: Re: AM 8068
PrintForm: WindowLetter
From: Stewart.pa
To: AMD
Date: 5 Nov. 1981 1:52 pm PST (Thursday)

Dan Fuller
Advanced Micro Devices
360 N. Sepulveda, Suite 2075
El Segundo, CA
90245									5 Nov. 1981



Dear Mr. Fuller:

Attached is the collection of notes I wrote about our problems with the 8068 and 9517.  The schematics may be vague, but I think the gist of our troubles are sufficiently described in the text.

I just spoke with Subodh Banerjee on the telephone and he told me a very nice way to handle the address latching problem in multiplexed control DMA mode.  The idea is to assign two I/O port addresses to the 8068.  One of them generates MAS' and the other MDS'.  This means that you must do an output to the "address" port to select the 8068 internal register for subsequent writes (reads) to the "data" address.  In this way, the DMA transfers do not need to generate an MAS', since the processor will have previously set up the right register.

						Sincerely,


						Lawrence C. Stewart
cc: Subodh Banerjee (AMD)
    Severo Ornstein (Xerox)
*start*
02148 00024 US 
Date: 6 Nov. 1981 2:24 pm PST (Friday)
From: Ornstein.PA
Subject: Lark (Etherphone) Hardware Update
To: VoiceProject↑, Lampson, Taylor, McCreight, Thacker, Taft, Levin, Dalal,
 Baskett, Schroeder
Reply-To: Ornstein

Larry and I have got the Lark hardware design beaten more or less into shape
and we're about ready to do layout. The DA system accepts (though not
gracefully!) the set of oddball chip shapes we've got. Within a week or so we
should be ready to have the board built - and then start debugging it.

The most apparently recalcitrant item in the design is the AMD encryption chip
which doesn't speak easily to the other stuff. (It's not clear they've ever hooked
it to ANY computer). We have surrounded it with a cloud of SSI which we hope
will make it happy (but may conceivably obscure problems). Our intention is to
charge ahead with this design in order to try to get at least the central items
working. Various chips (guess which) can be left unplugged until we're ready to
face them. That then will give us a Rev A board that will let Larry get started
on the software. 

It seems certain that we will need to rework, improve (maybe even finish parts
of) the design and try out the changes before proceeding to quantity production.
To let us do that without disturbing the software development, we are planning
to build a second (Rev B) prototype board. (We're trying to do both boards in
such a way that they can eventually be stripped and reclaimed since the
underlying boards are scarce and expensive).

We can report that even macro-design with LSI items is a challenging business.
E.g. the designer of AMD's DMA-chip (of which Intel's is a copy) and who
apparently also had a hand in the encryption chip design, is now a student at
Harvard. When you ask deep questions you often get a guess for an answer.
Generally the documentation is VERY spotty - though some is really excellent.
For instance there is a wonderful discussion of synchronizer glitching (warmed
the cockles of my heart) in one of the AMD application sheets - written, of
course, by the guy now at Harvard.

Severo and Larry        

*start*
00433 00024 US 
Date: 6 Nov. 1981 4:46 pm PST (Friday)
From: Birrell.pa
Subject: Re: Lark.GV
In-reply-to: Your message of 3 Nov. 1981 5:12 pm PST (Tuesday)
To: Swinehart
cc: VoiceProject↑, Schroeder

I've create a "Lark" registry for you, with owners Swinehart, Stewart, Owicki. 
The registry is on Cabernet and Zinfandel.  Please be careful with it, and ask
Mike or me before you try anything you don't understand.

Andrew

*start*
00816 00024 US 
Date:  8 NOV 1981 2109-PST
From: STEWART.PA
Subject: Auburntest help requested...
To:   Swinehart
cc:   Stewart

My program AITones, which I wrote because I didn't thing Auburntest
handled the DAA stuff, is capable of calling me on the
phone.  It goes offhook and feeps at the phone line (4461), making my phone,
(4477) ring.  When I answer, I can hear AITones feeping at me as I hit keys.

Auburntest can pick up the phone line, or answer it.  When I call auburntest, I
can hear, pretty loud, the feeps, but when I ask Auburntest to call me it doesn't
work.  As best I can tell, the tone tables are identical.  The feep
frequencies are different in the LSB.  I tried to make the clock rates
identical.  What is happening?  Does auburntest think there is an Alto crystal in 
there?  
	-Larry
*start*
02576 00024 US 
Date: 17 Nov. 1981 9:50 am PST (Tuesday)
From: Stewart.PA
Subject: Telephone switching
To: VoiceProject↑
Reply-To: Stewart

I thought this was a nicely written message.  I wonder if our system will get this
complicated.

---------------------------

Date: 16 Nov 1981 2046-EST
From: John R. Covert <RSX-DEV at DEC-MARLBORO>
To: Frankston at MIT-MULTICS
Subject: Newton No. 1 XBar, 110

The 969 exchange in Newton is No. 1 XBar.  There are no SXS exchanges
in the Boston Metro dialing area.  The acceptance of an infinite
string of 1s is a typical No. 1 and No. 5 XBar feature and has to do
with the early belief that an initial 1 pulse shouldn't do anything at
all.  From 1921 Telco documentation:

	The use of ... office codes starting with "1" is undesirable
	due to the liability of a subscriber causing a "preliminary
	pulse" when making a call.  A preliminary pulse may be pro-
	duced by an unintentional momentary interruption of the
	subscriber's line at the switchhook springs after the re-
	ceiver is lifted and before dialing is started, as might be
	caused by accidentally striking the hook with the receiver.

In No. 1 XBars in places where the "1" is not used (and those places
are disappearing rapidly) an initial "1" does not even make the dial
tone go away.

"1" became used as an access code from SxS areas because it provided
an inexpensive way to send all "1" level calls to the toll switcher.
The SxS exchanges in the Bay Area which do not require "1" have a huge
kludge attached to them to properly process calls.  This kludge is
quite unlike a director -- dialing "20" puts you right on a toll trunk
which takes the rest of what you dial.  Similar kludges exist for SxS
in areas that have 1+ dialing and also 113 information codes: Dialing
"1" puts you on the toll trunk; the second "1" tears down the
connection to the toll trunk and puts you through to the selector
level for the "11x" services.

In No. 2 ESS, no similar kludges exist because the machine translates
what you dial via one, three, and six digit translate tables.  "110"
does not get you the operator EXCEPT when you already have an operator
trunk active, flash for add-on dial-tone, and dial "110".  Under any
other circumstance, "110" is an error.  In No. 1 ESS, and probably in
No. 2 as well, it is a useful test to see if a trunk is the type trunk
which sends your number down the wire.  Operator trunks, number read-
back trunks, and, in some areas, "911" trunks have this property and
all get flashed upon when you flash for add-on and dial "*0" or "110".

*start*
00539 00024 US 
Mail-from: Arpanet host SU-AI rcvd at 20-NOV-81 1721-PST
Date: Friday, 20 Nov 1981 17:21-PST
To: Stewart at PARC-MAXC
Subject: 8086 hll
From: ly at ISL



------- Forwarded Message

Date: Friday, 20 Nov 1981 10:10-PST
To: ly at ISL
Cc: gill at ISL
Subject: 8086 HLL
From: gill at ISL

1. Pascal by Language Resources ($4800)
2. C cross compilers (Unix, RT-11, RSX, Unix 32/V, and VMS)
   Advanced Digital Products ($1750)
If you can find the addresses or other info, let me know.


------- End of Forwarded Message