This week has been busy and I caught a flu. That did not leave me much time for the project. I still have not figured out why the TI Basic system does not fully boot - the startup screen comes up but pressing a button does not bring the menu. I tried to play with timing and tested some logic changes, but those did not help. I also don't really know how closely the system has to match the original computer before I could get to the menu.
Since being stuck has been boring, I have added more functionality that I know I will need once I get further in the project. On that side I added more (although still partial) implementation of the TMS9901 interface chip. I also added video processor interrupts. On the TI-99/4A that touches both the TMS9918 VHDL implementation and the TMS9901 implementation. In my test program the interrupts work fine, and to my understanding that matches the original hardware. This part I cannot easily compare with the original, as my test requires a custom ROM at address zero. Hmm. Perhaps actually I could test that relatively easily without the emulator.
The video interrupt support required a bunch of things:
- TMS9918 status register MSB is set when the last scanline has been rendered.
- TMS9918 interrupt enable mask bit needed to be added.
- The interrupt output from the TMS9918 goes into the TMS9901 peripheral chip. Here the interrupt can be further masked, so I added a mask bit (bit 2 in the CRU space).
- In addition, the Basic ROM code checks for the interrupt source, by reading CRU bit 2 which returns the state of the VDP interrupt request.
- Finally the doubly maskable interrupt signal goes to the CPU chip via a buffer.
Speaking of the emulator, I have developed a test program which exercises various parts of the design. The problem is that all of the tests I have created work well with the TMS99105, so I cannot reproduce whatever the problem is with the original TI ROMs. I have compared the output of the test program to the results that I can get with the excellent Classic99 emulator. The things that I have tested all match the behaviour on classic99. My suspicion has been that the problem would be in the GROM subsystem, but the checksumming test code I created works properly, both for data reads and for address counter reads. Due to preloading system used by GROMs I suspected this might be broken, but it does seem to be.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.
I realised that I have written some log stuff quickly and carelessly. For example I wrote "I could test that relatively easily without the emulator" but my intention was to say "with the emulator"...
Are you sure? yes | no