I will post my progress on my homemade MMU and IOU here in this thread.
I just made my sources for the MMU publicly available here: https://github.com/frozen-signal/Apple_IIe_MMU_IOU
These sources are licensed under Creative Common Zero (public domain). I wanted to wait before releasing them until I did due diligence and identified the problem, but that may take a while so I made the repo public this morning.
The status is still the same as last week (I'm waiting for some 74HCT245s to arrive); the Apple IIe will boot and display the "Apple ][" logo; I can drop to the AppleSoft and write a program and it will run just fine. I can also drop to the monitor which also works and the soft switches works exactly as expected.
The problem is if I hit a key several times, the computer will eventually beep and drop in monitor. Trying to load a game will also fail; sometime it will drop to monitor, other times it will load a few sectors and then freeze and do nothing.
It's possible that it is a timing problem, but a 1MHz frequency should not really be a problem for the TTL and the FPGA. So, I haven't checked that possibility yet.
Another possibility is that the ton of wire and the added length introduce a delay or noise that crashes the computer. I could test this by using a similar breadboard with a similar wires setting, but use the real MMU instead of the FPGA to see if it works or not.
Also, my prototype is a bit of a sloppy work: there are floating pins on one of the 74LVC245 and there are no decoupling capacitors. I don't think it's the cause but it doesn't help for sure.
But my current hypothesis is that the output from the homemade MMU (3.3v) is too low for a logic HIGH. I have ordered a few 74HCT245 to level-shift them to 5v but, being in Canada, most of our nice things comes from the U.S. and takes forever to be cleared at the customs. I should receive them next week and then I will know if it's a voltage problem.
Finally, I could wire a real MMU and the homemade one side-by-side and look at the differences for each signal on an oscilloscope. That would be kind of a pain to do so, I will try doing this last.
In any cases, stay tuned for any progress.
Some pictures of the hardware and a video of it working would be a huge plus.
This is the paradigmatic symptom of ground/power bounce; when not too many outputs or inputs switch at any moment, the power lines are sort of okay, but if you roll over 0b01111 to 0b10000, suddenly there is too much power consumed by switching registers and the power dips enough to disturb the circuit.
You also are providing a huge inductance with your flying leads and this will cause signals to ring (oscillate over and over) from each state change. At 1 MHz clock, the ringing may have died down between cycles, but combinatorial components (like level shifters!) may trigger multiple times instead of once as predicted.
Picture is in his blog entry. Yes, the blog entries here are easily overlooked - though this one is currently linked on the front page! :)
Nice - I din't see the blog before!
At this point I would make a PCB with DIP sockets in order to get all the connections nice and tight and to exclude cross-talk and noise as a possibility. It can still be patched with wires here and there if something was omitted, but it will not be as bad as a breadboard. Even though I never use breadboards in my prototypes and opt out for grid prototyping boards with very tight direct connections, I have noticed that going to PCB improves things tremendously and very often automatically fixes a whole bunch of issues.
@robespierre is probably right. In the self-test, the homemade MMU always fail and always on the RAM test. But with the real MMU, the self-test always pass. According to this page: https://support.apple.com/kb/TA38047?locale=en_CA&viewlocale=en_US
And the self-test with the homemade MMU always fail with different RAM locations. Exactly what robespierre says.
I will do what you say, @CVT. I will keep everything as short and tight as possible like this:
On the botton, these pin headers will connect directly in the FPGA board. Above are 5x sockets; 3x for the 74LVC245 and 2x for the 74HCT245. And on top, 40 pins that will go in a ZIF socket that I installed on the MMU socket of the mainboard (the zif is not directly seated in the MMU socket; I used a spare 40pin socket in order not to damage the MMU socket with the round pins of the zif).
Sigh, wiring this thing will probably make me swear like a sailor who just found out the bar was closed for the night!
Actually I was suggesting going straight to Rev.0 of a two-layer PCB at this point (laying it out and having it made). What makes a huge difference by having a PCB is not only the tightness, but also all the traces being in the same horizontal plane. On an experimental board like this one you can achieve tightness, but not single plane for all the wires. Besides it's a lot of work to connect that many chips with wires. You might run out of space or you might make some connection mistakes that will be difficult to find.
Laying out the PCB takes time too, but it's not throwaway work.
I agree with the technique of making a prototype manufactured pcb. Somethignthat small is not terribly expensive given the small size of the board involved. Outfits like PCBWay make you that sort of thing five at time for peanuts.
However, even having all the traces on the same plane doesn't solve all issues. In particular is capacitance between traces which can affect timing. However you're right in that it is a world better than a free hanging wire prototype.