Some updates:
____________________________
Since the last post I have written some programs:
-Simple PONG game in BASIC.
-An Apple II-like assembler and disassembler. It's pretty limited, it can only handle hexadecimal values and it's quite unforgiving with syntax and such (an absolute address has to be 4 characters long, for example). I have used lookup tables for opcodes and addressing modes, so it takes up a lot more space than the Apple one (which used patterns in opcodes to its advantage), but it does work.
-A simple version of Asteroids. No particular reason to do it apart from it being an interesting challenge. First time I have played anything similar was after I was done programming.
I have also done a summary/demo video with some photos and video fragments I had collected:
https://www.youtube.com/watch?v=bMZuDuWTcAI&t=1sAll schematics and code have been uploaded to the gitHub repository I've mentioned above.
So I think that I can call this project finished. I have done much more than I originally planned, and I must thank each and everyone of you who have helped along the way.
But...
I don't really like the way the control logic and microcode is implemented. There is 64 K worth of microcode in this CPU. Just by using some logic to reset the micro instruction counter conditionally based on flags (for branches), I could have easily cut microcode by half. And having shared micro-instructions for things like addressing modes would have reduced it even further. I have quite a lot to learn in this respect.
The way the internal buses are structured result in a slow and inefficient implementation, as most operations have to wait because of the shared bus. Some instruction take up to 14 clock cycles.
The fact that control signals come directly from control ROMs, and those being unstable after their addresses change causes contention in the internal buses as some registers may output at the same time. Which results in ugly signals, though they stabilize long before they take effect.
However some of these things have resulted in a compact CPU, with minimal interconnects between cards, and easily modifiable in terms of functionality.
Anyway, some thing to keep in mind for a future project. I think I have not done enough research for this one, but definitely learned a lot.
Next project will probably be a 65C816 based SBC... We'll see.
Juan