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.