I know 2 developers on the board here, maybe have more.
Wilf Rigter has a very good tutorial but think he maybe wrong in the point of timing.
http://www.user.dccnet.com/wrigter/inde ... torial.htmThe detailed sequence of operations for each character byte is shown in FIG 6 and described as follows:
1. Each character code (CHR$) byte in DFILE is addressed by the CPU PC, on the rising edge T2 data is loaded from DFILE into the ULA: bits 0-5 into a 6 bit ULA address latch while bit 7 is loaded into 1 bit ULA video invert latch
2. On the falling edge of T2, the ULA forces all CPU data lines to zero.
3. On the rising edge of T3 the low data lines are interpreted by the CPU as a NOP instruction.
4. During T3/4, the CPU executes the Refresh cycle and ROM address lines are generated with I register on A9-A15, the ULA 6 bit character code register on A3-A8, and the ULA modulo 8 line counter on line A0-A2.
5. On the falling edge of T4, pattern data from the ROM is loaded into ULA video shift register and 8 video pixels are shifted out at 6.5MHz
My ZX81 has memory chip uPD2114LC-1 which is compatible to the uPD2114L-1 which I found a datasheet in the internet.
Guess C comes from the CMOS version. 2114 series has 4 parts with different (maximum) access times.
2114L 450ns
2114L-1 300ns
2114L-2 250ns
2114L-3 200ns
2114L-5 150ns
So in my ZX81 Issue 3 board I have RAM with 300ns.
The datasheet of Zilog has a timing with valid address data on the address bus with maximum 110ns.
So data at RAM could not be expected safely before 410ns after rise of T1.
In this case it is not recommended (if you are on the safe site) to read data with rising edge of T2 which Wilf is writing about because its just about 300ns.
So I would say, data is catched by the ULA with falling edge of T2 (after 450ns). Maybe the offered NOPs to CPU are done with the same edge or with in the half of between falling edge of T2 and rising edge of T3. This could be done on the half easily as clock for CPU is generated by ULA from double 6.5 MHz clock.
I wonder how could Wilf find out when ULA reads the data. I think he can only guess when it's clocked into ULA register.
Just wondering how it could work with 300ns memory chips.
So as you spend many days and nights with this stuff (Andy and RetroTechie) I think you know an answer.