I have been looking into what it would take to run Atari 2600 games on our Tiny FPGA BX Games Console.
Most of the work is in the TIA (Television Interface Adapter) which uses a small number of registers to generate a TV picture on the fly. It supports the playfield (background), 2 sprites (players), a ball and 2 missiles using a palette of 16 colours and 8 luminosity levels, using less than 64 bytes of registers.
The screen is 160 x 192 which we could map onto 320 x 192 on our display. We would need to allow a small amount of code to be executed between every horizontal line.
There are VHDL implementations of the TIA, but I haven’t seen a Verilog one. We would need a custom implementation of it anyway to fit in with our display and with PicoSoC.
There is a good description of the TIA and programming the Atari 2600 in the Stella Programming Guide.
As the Atari 2600 uses very little RAM and not much ROM, we could fit it in my RAM version of PicoSoC.
I have been looking at the Source code of Adventure, to see how the games were programmed.
I was thinking that we could reimplement some games in C, but using the same register API that the original uses. The audio output and button input doesn’t look very hard to do.
Once we have a working TIA, it also looks quite feasible to replace picorv32 with a 6502 CPU and run the original games.
I also quite like the idea of running the Deepmind AI software that learns to play a selection of these games, in real time using our console. Again, that looks as if it might be feasible to me. The Deepmind software is on Github. We could send the keystrokes over the uart and perhaps send the screen back over the uart or the usb connection. Or we might be able to send back the register set and use the PC emulator to reconstruct the screen.