https://www.eevblog.com/forum/programming/virtual-blinky-68000-assembler-learning-lab/https://www.eevblog.com/forum/beginners/designing-a-uart-register-file/https://www.eevblog.com/forum/eda/bus-and-higher-density-ic-routing/Just some cross links, apologies for the clutter.
I especially like these projects when they start to "fork" into more and more sub-projects and branches with their own only elastically coupled timelines.
In no particular order:
DTACK master flip-flop working on the breadboard, at least at 140kHz with an arduinno driving.
Shared DTACK trigger (protocol)- in progress - probably making it an open drain with an inverter to get CLK edge.
That unblocks the Arduino CPU puppet breadboard test. Over-thinking says it will run into many problems asides DTACK and the slow arduino will force me into hardware-izing the data bus drive too.
If the CPU fetches a "write to RAM" instruction from the puppet... The DTACK flip flop will 100% clear DTACK before the next bus trans starts. However, that bus trans will not wait and it will drive the databus for that write in about 450ns, (needed reverified on the AC graphs). The ATMega2560 is probably not completely capable of tri-stating two 8 bit ports that quickly. It might be. I'll find out.
If a databus transceiver
is required, then the choice is .. a basic 245 or a 'latching one' like the 573? That would allow the Arduino to be effectively async, not tied to address strobe 'transactionally'. It write the port data, pulses the latch and immediately tristates the data and moves back to being ready in it's hot loop on address strobe. UDS+LDS determine the latch OE drive effectively "close" the transaction in hardware for it.
It depends on how "fun" that is. The 'real' CPU board will have SRAM and NorFlash which will spend most of it's time waiting on the CPU. They will (still in design review), "ROM EN | RAM EN->Set DTACK trigger" async, combinational. The memory ICs have < 100ns read times.
The bit that needs design review is the possibility of having a "supervisor" on board. Not a FSB or MMU, nothing that heavy, yet, but just a "Bus spy with authority". A potential use case is, as a bus spy. If it is enabled to "log the bus for N insructions and halt" it needs to "over-rule" the DTACK trigger.... while assuming responsibility to issue DTACK when it as captured the bus. "DTACK interception bus stepping" basically. Classic breadboard style.
The "supervisor" MCU idea. It has gravity. While not "in step" upto speed with the CPU, like an FPGA would be, it can still take a LOT of the less time critical functions internally ... its what MCUs where made for literally. The "control unit" used to be a cabinet and it controlled the other cabinets around it, including, memory, printers, disks, punch tap reader machines. Handling basic IO/serial/interconnects/back plane coms etc.
Just that origin in in "Mainframe" and "Mini-computer" architecture, not typically in "Home micro-processor systems of the 80s".
For one example. Power on. An STM32 already inherently follows a supervised boot process internally. So it with barely any extra circuitry take "precise" control over the RESET and HALT lines. Immediately freeing me from fiddling around with OR gating the open drains. Why use a RC latching RESET/HALT with OR/NOR mechanics and sprawl 2 or 3 74 series chips on the board, when i tiny little MCU can do that, or just two pins on a larger central MCU.
The CPU is effectively a "client" not the master. That provide some immediately advantages. In circuit rom Flash, with the classic styles supported. "Flash on reset" or "Flash under HALT" or even "Flash over DMA in-flight".
The programmer board is also in PCB routing stage. The BOM arrived in the mail. All accounted for, foot prints locked in. Just effort and my own acceptance gates remain for that to go to fab.
In the mean time I threw together a breadboard break out board for the LVC16T245 IC just to get my feet back into the water. And end to end project which should total about 3 hours. Shit... I should NOT have said that!