On Fri, 18 Aug 2000, you wrote:

> 3. When JUMP should be used

The term "JUMP" is not introduced...
JUMP = Joynet Univeral Message Protocol?

> If a coder wants to make a program (probably a game) that should run on
> multiple computers, she may use any protocol she desires. If she has a way
> of knowing what the other side of the connection does, for example because
> it also runs her software, she does not need to follow JUMP. It is
> advisable however, to check if the computer is at that time in a JUMP
> network, because the network would be suffering from the (for JUMP) bogus
> packets that seem to keep coming in.

How can a node (single computer in the network) determine whether its 
neighbours use JUMP or not? Especially, how can it do so without causing 
problems with other protocols?

> 4. Why JUMP should be used
>
> The reason to have a standard protocol is simple. many coders can make many
> network programs and they all want to communicate with each other. If there
> is no standard protocol, every computer would need drivers for all
> protocols.

In the case where there is only 1 application running on the network, JUMP is 
not necessary. However, if you want to create a Joynet ring that really acts 
like a network, a protocol like JUMP is necessary. So JUMP is good for TCP/IP 
over Joynet, file serving and such.

> In the rest of this document, I shall address the lines by the letters A, B
> and C. A and B are the lines comping from the buttons. C is the line going
> to steer left. A and B are outgoing lines and C is an incoming line on one
> side. With the computer on the other side, A and B are incoming and C is
> outgoing.

What about naming them "dat0", "dat1" and "ack"? Those names are easier to 
remember. Also, it should be made explicit whether the link with the previous 
or next node is mentioned: prev.dat0, prev.dat1 and next.ack are inputs, 
next.dat0, next.dat1 and prev.ack are outputs.

> 6.1. General overview
>
> Jump is a protocol that works in packets. There are positive and negative
> sides to that. The most important negative point is that the sending
> computer has to wait for the receiving computer to be ready. The most
> important positive point is that the data flow can be bidirectional.

I don't understand: why are these properties consequences of using packets?

By the way, are there low-level network protocols that do not send data in 
packets? I can't remember seeing one.

> 6.2. Sending a packet
>
> Before sending, a send request (SR) should be given. After that, the
> sending computer has to wait for a reaction (and check for collisions, see
> below). When the client has seen a send request, it sends a clear to send
> (CTS). After that, the transmission begins. It works as follows:

In modem terminology, isn't SR called RTS (Request To Send)?

> Sender sends header
> Receiver sends CRC1 and packet size back for confirmation
> Sender sends confirmation
> While (packetlength >= 32) {
>     Sender sends 32 bytes of the packet
>     Receiver sends CRC0
>     Sender sends confirmation
>     first 32 bytes are cut off packet
> }
> Sender sends remaining bytes of packet
> Receiver sends CRC0
> Sender sends confirmation
> Receiver sends CRC1
> Sender sends confirmation

Why are packets split up into 32 byte chunks? Usually, packets are the 
"atoms" of network communication.

> This is the complete transmission of a packet. CRC0 is a 8 bit CRC on the
> data that has just been received. CRC1 is a 32 bit CRC of all received
> bytes*3.

I think we had this discussion before, but 32 bit CRC is overkill for small 
chunks of data. For example, MSX floppy uses 16 bit CRC for sectors (512 
bytes long).

> Sending of
> bytes is done by sending the bits on a timed basis, as is shown.

Timing has some serious disadvantages:
- it depends on how strong the joystick port drives the signals
  (probably not equal for all MSX types)
- it depends on cable length
  (actually capacity, but length is probably the most important factor)
- it means the interrupt must be disabled when doing JUMP transfers
- it is hard to program on PCs
  (file serving, internet connection, MSX emulators)

>         Both wait a time t1
>         Receiver reads bit [i;i+1|i] from [AB|C]
>         Both wait a time t2

While the receiver reads the bits, the sender is doing nothing. But they 
should remain in sync, so either the receive time must be substracted from t2 
or the sender must wait an amount of time equal to the receive time.

> 6.4 Control signals and collision detection

Are collisions possible? If there can be no collisions, collision detection 
is not necessary.

> Please let me know what you think of it. If anything is not clear or you
> want it different, let me know.

What is most unclear to me, is why the design decisions are made. The timing 
values, why are they chosen as they are? Why is the packet sent in 32-byte 
chunks instead of 16-byte or 256-byte?

One thing you haven't addressed, is how the protocol handles broken network 
links, like a disconnected cable or a neighbour that is powered down or 
doesn't run a JUMP implementation. You don't necessarily have to handle those 
situations, but at least say something like "in the case of no response, the 
protocol is allowed to hang". It's better to be explicit.

Another thing that is missing, is how different nodes are addressed. Assume 
that I want to send data from node 2 to node 5, how do I specify those 
addresses? How do nodes get their addresses in the first place? Are 
broadcasts possible?

Bye,
                Maarten


****
Problems? contact [EMAIL PROTECTED] See also http://www.faq.msxnet.org/
****

Reply via email to