From: fachat (afachat_at_gmx.de)
Date: 2004-09-29 22:48:43
Hi Jim,
I know I should read this list more often,,,
but did you have a look at the VICE implementation of the
IEEE488? It is a state engine that is triggered by the
VIA/CIA/PIO/TPI I/O pin changes. At the appropriate
places the emulated drive callbacks are called.
Andre
On Mon, Sep 20, 2004 at 05:26:55PM -0500, Jim Brain wrote:
> As Marko asked, I have created a graph of the IEC routines. On Marko's
> suggestion, I utilized GraphViz, though I need help in both taming the
> graph and adding information to each state (When I wrote state diagrams, I
> usually put the changes made during that state in the state bubble...)
>
> This only shows IEC routines from peripheral point of view (slave mode, as
> it were), and I still need to work on it (I need to add timeouts and
> such). But, it's short, sweet, and maybe someone else can help me in
> this. And, I need help, since all I know about GraphViz is from this
> afternoon...
>
> Here it is:
>
> iec_states.dot
>
> // Jim Brain (brain@jbrain.com) 2004-09-20 version 0.1
> // TALK var is set to 1 when IEC TALK command is sent.
> // LISTEN var is set to 1 when ATN device matches our device number
>
> digraph iec_states {
> rankdir=LR;
> //orientation=land;
> center=1;
> ratio=auto;
> node [shape = doublecircle,width="2",height="2"]; IDLE CMD_IDLE;
> node [height=1.5, shape = circle, width="1.5", fixedsize=1];
> IDLE -> CHK_EOI [ label = "LISTEN=1,CLK=1->0" ];
> CMD_IDLE -> CHK_EOI [ label = "CLK=1->0" ];
> CMD_IDLE -> TALK_PREP [ label = "ATN=0->1,TALK=1" ];
> subgraph idle {
> IDLE -> CMD_IDLE [ label = "ATN=1->0" ];
> CMD_IDLE -> IDLE [ label = "TALK=0,ATN=0->1" ];
> }
> subgraph cluster_0 {
> rank=same;
> CHK_EOI -> EOI_TO [ label = "255uS passed" ];
> CHK_EOI -> WAIT_ACK [ label = "CLK=0->1" ];
> EOI_TO -> WAIT_ACK [ label = "CLK=0->1" ];
> WAIT_ACK -> WAIT_BIT [ label = "CLK=1->0" ];
> WAIT_BIT -> WAIT_BIT [ label = "CLK=1->0,bits<8" ];
> label = "receive";
> }
> WAIT_BIT -> IDLE [ label = "CLK=1->0,bits=8,ATN=1" ];
> WAIT_BIT -> CMD_IDLE [ label = "CLK=1->0,bits=8,ATN=0" ];
> subgraph cluster_1 {
> rank=same;
> TALK_PREP-> BUS_RELEASE [ label = "CLK=0->1" ];
> BUS_RELEASE -> BUS_ACK [ label = "80uS passed" ];
> BUS_ACK -> PREP_SEND [ label = "DATA=0->1,Not last byte" ];
> BUS_ACK -> EOI [ label = "DATA=0->1,last byte" ];
> EOI -> EOI2 [ label = "DATA=1->0" ];
> EOI2 -> PREP_SEND [ label = "DATA=0->1" ];
> PREP_SEND -> PREP_BIT [ label = "40uS passed" ];
> PREP_BIT -> SEND_BIT [ label = "60uS passed" ];
> SEND_BIT -> PREP_BIT [ label = "bits<8,60uS passed" ];
> SEND_BIT -> ACK [ label = "bits=8" ];
> ACK -> ACK_WAIT [ label = "60uS passed" ];
> ACK_WAIT-> BUS_ACK [ label = "DATA=1->0,not last byte" ];
> label = "send";
> }
> ACK_WAIT-> IDLE [ label = "DATA=1->0,last byte" ];
> ACK_WAIT-> IDLE [ label = "1000uS passed" ];
> }
>
>
> --
> Jim Brain
> brain@jbrain.com
>
>
>
> Message was sent through the cbm-hackers mailing list
>
Message was sent through the cbm-hackers mailing list
Archive generated by hypermail pre-2.1.8.