Re: IEC state machine

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.