durgadas311
Veteran Member
Let me try to explain once more. Here are the cycles being executed:
The issue is that the ASIC only sees the Z80 cycles and it must decide what to assert on the data bus during the reads. Cycle 9 is the key one, where it looks the same as cycles 3, 5, 6, 12, 13, and 15 but it must do something different: get the next byte from ROM instead of insert the byte stream for boot. In order to do that, it must be "aware" of the fact that it is doing an LDI vs. the other instructions and arrange for the correct thing to appear on the data bus ("D").
Code:
----- Z80 ----- ASIC Printer-ROM DRAM
1. M1 MREQ RD AF D=AF
2. M1 MREQ RD D3 D=D3
3. MREQ RD F0 D=F0
4. M1 MREQ RD 11 D=11
5. MREQ RD 02 D=02
6. MREQ RD 00 D=00
// repeats 256 times...
7. M1 MREQ RD ED D=ED
8. M1 MREQ RD A0 D=A0
9. MREQ RD D=(ROM++)
10. MREQ WR (ADR)=D
11.M1 MREQ RD C3 D=C3
12. MREQ RD 00 D=00
13. MREQ RD 00 D=00
14.M1 MREQ RD D3 D=D3
15. MREQ RD F8 D=F8
16.M1 MREQ RD XX D=(ADR)
... bootstrap ...
The issue is that the ASIC only sees the Z80 cycles and it must decide what to assert on the data bus during the reads. Cycle 9 is the key one, where it looks the same as cycles 3, 5, 6, 12, 13, and 15 but it must do something different: get the next byte from ROM instead of insert the byte stream for boot. In order to do that, it must be "aware" of the fact that it is doing an LDI vs. the other instructions and arrange for the correct thing to appear on the data bus ("D").
Last edited: