Time for another ambitious time constrained project: retrochallenge 2017/04 has just started. I enjoyed the last round, so it is time for another attempt. This time my plan is go and create the TMS9900 CPU core in VHDL. Naturally the project is an extension of my previous retrochallenge project, where I created a clone of the TI-99/4A using a TMS99105 CPU and a development board with an FPGA.
This project will be in some sense more ambitious personally as I have never created a CPU core before. Having said that I want to think that the creation of TMS9918, TMS9919, SAMS memory controller, GROM implementation etc. amounts to something. Plus I don't have to start from scratch, as I will try to shoehorn a new quick-and-dirty TMS9900 core into the previous design implementing rest of the console. There is a decent amount of debugging functionality available in the previous design. Still, I know I have very limited time and a lot of work in real life to get done, so I really do not know if this project will result in anything. Hopefully it will be a start at least.
My goal is not to create anything that is cycle exact, just to have a VHDL CPU core that can run TI Basic and at least some of the game cartridges. The TMS99105 project already thought quite a bit about compatibility, most games seemed to work fine despite vast timing differences.
I am sure quite a few people have done a core already in the past, so even if I somehow was successful I will not really be breaking new ground:
The F18A has an impressive TMS9900 core created by Matthew Hagerty, even if it is not completely compatible (in fact it is in many ways better).
Also I understand that Gary Smith has implemented a TMS9995 core in the past.
And there probably are others.
Well I do not care, it is time to reinvent the wheel! The goal ultimately is to have a TI-99/4A clone done entirely in FPGA. That would enable porting to many FPGA platforms, including the MIST. If I do the CPU core myself, I can come up with meaningful license terms. The plan is to open source the stuff at least at the end - with the assumption something useful comes out...