Pico Ice
The game has to run on some kind of hardware so I bought two Pico Ice boards. They were held-up in customs for a while but luckily they arrived in the end.
This is a really nice platform. It consists of a RaspberryPi Pico MCU and a Lattice iCE40UP5K FPGA. Both have good tool support and easily available documentation. All pins of the MCU and FPGA are available via the headers which will be helpful turning it into a game console.
Did some tests on the first board to see if it was alive.
$ lsusb
Bus 001 Device 007: ID 1209:b1c0 Generic pico-ice
It shows up as a drive, which can be used as one of the ways to program the FPGA.
$ cat /var/log/syslog
Sep 2 16:59:01 mungus kernel: [ 42.266458] scsi 2:0:0:0: Direct-Access Adafruit UF2 Bootloader 1.0 PQ: 0 ANSI: 2
Sep 2 16:59:01 mungus kernel: [ 42.267026] sd 2:0:0:0: Attached scsi generic sg2 type 0
Sep 2 16:59:01 mungus kernel: [ 42.267459] sd 2:0:0:0: [sdb] 65801 512-byte logical blocks: (33.7 MB/32.1 MiB)
Sep 2 16:59:01 mungus kernel: [ 42.267876] sd 2:0:0:0: [sdb] Write Protect is off
Sep 2 16:59:01 mungus kernel: [ 42.267885] sd 2:0:0:0: [sdb] Mode Sense: 03 00 00 00
Sep 2 16:59:01 mungus kernel: [ 42.268244] sd 2:0:0:0: [sdb] No Caching mode page found
Sep 2 16:59:01 mungus kernel: [ 42.268416] sd 2:0:0:0: [sdb] Assuming drive cache: write through
Sep 2 16:59:01 mungus kernel: [ 42.287676] sdb:
Sep 2 16:59:01 mungus kernel: [ 42.298387] sd 2:0:0:0: [sdb] Attached SCSI removable disk
And it adds two serial devices
$ ls /dev/ttyA*
crw-rw-rw-+ 1 root dialout 166, 1 Sep 2 16:59 ttyACM1
crw-rw-rw-+ 1 root dialout 166, 0 Sep 2 16:59 ttyACM0
One for communicating with the Pico, and one for communicating with the FPGA.
It also provides a dfu interface
$ ./dfu-util -l
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2020 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Found DFU: [1209:b1c0] ver=0100, devnum=7, cfg=1, intf=5, path="1-3", alt=1, name="iCE40 DFU (CRAM)", serial="DE62A43543271431"
Found DFU: [1209:b1c0] ver=0100, devnum=7, cfg=1, intf=5, path="1-3", alt=0, name="iCE40 DFU (flash)", serial="DE62A43543271431"
Which is the second way to program the FPGA.
Next: Top level design