Re: [stella] vcs net play A0?=

Subject: Re: [stella] vcs net play A0?=
From: Erik Mooney <erik@xxxxxxxxxx>
Date: Wed, 08 Aug 2001 11:05:50 -0400
8/7/2001 8:24:14 PM, Julian Squires <tek@xxxxxxx> wrote:

>On Tue, Aug 07, 2001 at 06:18:09PM -0400, Erik Mooney wrote:
>> .. and that is, of course, precisely the killer issue... not even on a LAN
>> can you synchronize two emulators within 0.063 milliseconds (I was off by
>> a digit before).
>Well, there are a lot of tricks you can do to make it less sensitive to
>those issues, although none of them perfect, obviously. For example,

And it has to be absolutely perfect for peer-peer parallel emulation to work.  If
one paddle read is off by one scanline, the player misses the ball on one
machine and not the other; wham, the two emulators are in divergent states.

>caching machine state at each ``critical point'', and using a sliding
>window approach to communicating with the peer. It cause some undesirable
>``warping'', but it might not be as bad as you think depending on the
>frequency of input reads compared to graphics refresh rate and network

You just described client-server emulation in fact, with client-side prediction.
One machine is updating the other after-the-fact when necessary.  You can't
have peer-peer with both machines updating the other, because each machine
would be updating the other with divergent results.

You CAN do that in programs that are written to be peer-peer multi-machine, like
most multiplayer PC games prior to Quake's client-server model (Doom, Diablo 1,
some racing games, etc.)  The game is written so that one of the peers is
assigned as the highest authority on each game object and all the other peers
know it.  (The paper Piero posted the link to talks about that theory.)  But that
can't be done for an emulator that doesn't know such details about
the code it's emulating.  In, say, a Pong game, each machine could take
authority over the position of its player's paddle.  But, the emulator can't know
to assign authority over the ball to the player whose paddle the ball is nearest.
So eventually one machine will see the ball reflect off a paddle and the other
won't, and you have divergent states.  The only cure is to have one emulator
send a wholesale machine state update, and that's back into client-server.

Archives (includes files) at
Unsub & more at

Current Thread