I've been thinking about this project lately which I eventually got working, but wasn't completely satisfied with it since I didn't technically complete the project goals. Specifically, the 74181 chip is obsolete. My goal was not to use any obsolete chips. Not sure why I didn't see that from the start.
I've been reviewing other people's projects and have learned how to do ALU functions without an ALU. It comes down to implementing an 8-bit lookup table in ROM for adding one to a byte. Each memory location is just one more than the index. And if you can add one, then you can add any number. And if you can add any number, you can do multiplication. And if you add FF to a byte, then it's basically the same as subtracting one which will enable you to subtract any number which will enable division. Sure it will take a long time, but it is possible. So I could just remove the ALU.
Also, I could do branches more easily by using a RAM compare using indexed memory accessing. So if I want to do a BEQ then I could specify two bytes to compare JJ and KK and two memory locations to jump to PP (equal) and QQ (different).
- Write PP to the memory location 0x00JJ (yes they're backwards).
- Write QQ to memory location 0x00KK.
- Read the byte from memory location 0x00JJ and then branch to that value.
If JJ and KK are different, then I will read back PP. If they are the same, then QQ will overwrite PP and I'll read back QQ.
I may take another stab at the design for this given these techniques.