This pertains to what you are doing specifically, not what can be done.
As I think I understand it, the memory expansion is 64mb but it's mostly for storing cartridge images? So the ti still gets the standard 32k ram, the rest of the 64mb is for images?
And better video output and apparent cpu speeds (only because much of the processing happens on your board, not that the tms9900 is replaced or anything)
That's what I gather and it awesome. And that is your project summed up?
This probably is a good moment to summarize the project status. As a starter I'd just like to point out that it is a hobby project, so I did not really set some specific goals for myself, other than having fun with the TI, expanding it to a point that makes my configuration (the bare console) useful (as in having fun) - and hopefully resulting in something that can be easily replicated by others. That last step probably in practice means designing a custom board.
As of today, the following functionalities are implemented:
- SDRAM interface, allowing the entire 64MB of memory to be accessed by the TI.
- Memory paging unit, which breaks the processor's 64K address space to 4K pages. The location of each page in the 64MB memory can be independently set. In practice this relates to the 32K memory expansion portion of the address space visible to the CPU. But the entire 64MB is accessible. This unit is compatible with the SAMS extension system, with the exception that CRU support is not there yet and thus the banking registers are always visible in the processor's address space. Also the way in which memory paging is enabled is currently non-standard.
- Accesses to the cartridge ROM area (TI's address range 6000-7FFF, 8 kilobytes) are remapped to SDRAM. There is support for 74LS378 style non-inverted banking of the cartridge ROM area. Extended Basic uses this type of banking too. There are 128 banks overall, thus 1 MB of memory can be reached through the cartridge ROM window. In the SDRAM that area is from 16MB to 17MB. Note that this area is not specifically reserved for cartridge ROM, it just so happens that accesses to cartridge ROM get combined with the cartridge ROM page number and an offset of 16M is added. That same memory area can be also accessed through the memory paging unit, using addresses that belong to the 32K memory extension.
- The FPGA implements the GROMs of the extended basic cartridge internally. In other words, there is a 4*6K=24K GROM compatible memory, currently loaded with the extended basic GROM contents.
- There is a memory mapped SPI port, connected to the micro SD card on the pipistrello board. Thus support for SD cards (i.e. mass memory) is there, once I get around writing some software for the TI. This is still untested, but the SPI port design is mostly what I've used earlier in other projects. The port runs at 12MHz, which may be too much for some SD cards (I have earlier used the port at 6MHz).
- Finally there is a memory access state machine, connected to a USB port serial channel. This allows access to the 64MB SDRAM from a PC. The PC can read and write the RAM concurrently to the TI itself using the memory. I have mostly used this capability so far to load extended Basic ROMs, game ROMs or my own memory dumper ROM from memory location 16M onwards, making them look like the corresponding cartridge would have been plugged in.
- A bunch of debug registers, allowing the TI read from certain memory locations the status of the SDRAM (to for example find out that maximum SDRAM access cycles are about 28 cycles long at 100MHz).
Currently that's it. There is no speed up for anything yet. Speedup could be realized by also implementing the console GROMs in the FPGA, and then removing the original GROM chips from the console. The internal GROMs determine the speed of GROM accesses by delaying the CPU, making them horribly slow. The FPGA GROMs operate immediately, there is no need for any wait states.
There is no video circuitry implemented, although that could be done as the Pipistrello has a HDMI output port, and there are examples how to drive the HDMI port, so that could be done.
That's the overview. The short answer is that the entire 64MB of memory is available for programs.
Now, for what might be possible?
High speed high capacity storage maybe?
A way to add more than 32k of ram?
I'm really attempting to understand the full scope of this project.
I hope the above lengthy explanation of current specs answers the memory question. Note that to go over 32K of RAM, the programs need to support that specifically by modifying the paging registers as the program runs. You could for example keep 28K (7 pages) in fixed locations in the 64MB memory, and use the remaining 4K as a window to the rest of the memory. You could just change the page register for that 4K area as the program runs.
Already with the current hardware configuration a lot can be done. I think I want to enable the SD card support next, which means that I'll probably be spending time writing software rather than VHDL code for the FPGA. It is almost the case that the sky is the limit here, the FPGA has so much capacity left that it could implement graphics circuitry, coprocessors for various tasks, etc. Plus the entire circuitry of a TI-99/4A a few times over.