-
Notifications
You must be signed in to change notification settings - Fork 69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
z80: fetch opcode timing #61
Comments
Arguably yes, in the tracelog (from https://floooh.github.io/visualz80remix/) the instruction register (OP) is loaded between M1/T2 and M1/T3, but the data bus value already flips in M1/T2 (because the emulated memory system doesn't have any latency).
I'm loading the value in M1/T2 because that's the following clock cycle after the memory read was intiated, but moving it one clock cycle later wouldn't break anything (e.g. the Z80 emulation expects that the tick function doesn't modify the data bus pins if no requests must be handled, but it also expects that the data bus has been updated in the next clock cycle for read requests). But as I wrote in the blog post here, I took some liberties to allow a simpler and more performant system tick function. For a proper "Ben Eater syle breadboard emulator" it would be better if the pin timings would behave exactly as a real Z80. |
You load the opcode during the M1/T2 cycle but what happens if (for some reasons) the data from the data bus changes during that cycle? Shouldn't the opcode be loaded during M1/T3 so you're sure the value is the good one?
Thank you for your great work btw! ;)
The text was updated successfully, but these errors were encountered: