--=-eZ1x54ONZQqWtxeEFeGZ Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sat, 2004-08-21 at 02:54, Bob Barr wrote: > You don't need to execute very many multi-cycle instructions to burn > 200 clock cycles. > > Figuring timing budgets on a Z80 can be a real eye-opener. It would appear so. Thanks to all for the help. I have condensed my results so perhaps somebody here will be able to tell me with certainty if this is the best I can expect. I have the following code: while (1) { PC_DR |= (char)0x80; // MCLK high PC_DR &= (char)0x7f; // MCLK low } Which compiles to this: 53 while (1) 0000A9 A 134 L_12: A 135 ; 54 { A 136 ; 55 PC_DR |= (char)0x80; // MCLK high 0000A9 ED389E A 137 IN0 A,(158) 0000AC CBFF A 138 SET 7,A 0000AE ED399E A 139 OUT0 (158),A 61 PC_DR &= (char)0x7f; // MCLK low 0000B1 ED389E A 146 IN0 A,(158) 0000B4 CBBF A 147 RES 7,A 0000B6 ED399E A 148 OUT0 (158),A 0000B9 C3 A9 00 00 A 154 JMP L_12 Which looks reasonable to me, yet when I put a scope on the pin I get a 50kHz signal (please see attached image). Does this seem at all reasonable to anyone? I see nothing in the assembly that would take ANYWHERE near as long as that, could the IO accesses REALLY be burning that many clock cycles? I don't know how many cycles the JMP L_12 takes, but I can't imagine it's in the hundreds. FWIW the dev kit is SUPPOSED to run at 50MHz, so I'm seeing 1000 clock cycles needed to execute the above code. I REALLY hope I'm doing something wrong, otherwise this contest entry will be academic at best, I'll probably enter with a piss poor slow thing, and then rewrite everything for a PIC or AVR with a support CPLD to make things easier on me... Thanks again to all for your help. TTYL ----------------------------- Herbert's PIC Stuff: http://repatch.dyndns.org:8383/pic_stuff/ -- http://www.piclist.com#nomail Going offline? Don't AutoReply us! email listserv@mitvma.mit.edu with SET PICList DIGEST in the body --=-eZ1x54ONZQqWtxeEFeGZ Content-Description: Content-Type: image/jpeg Content-Disposition: inline; filename=aclaim.jpg Content-Transfer-Encoding: base64 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 --=-eZ1x54ONZQqWtxeEFeGZ--