I've just pushed a new binary release of iCE40Atom to github (here).
Two new features have been added:
1) A "Schakelkaart" paged ROM system
Over the years several extension ROMs were released for the Atom, and certain games rely on one or more of these. In the archive, these games are flagged with a (R) in the title.
Back in the early 1980's Dutch Atom enthusiasts developed a way overlaying multiple 4K utility ROMs at #A000, and switching between them as needed. The hardward was called the Schakelkaart and the bank switching software was called Branquart.
Here's a picture of an original Schakelkaart:
I've added an implementation of this to iCE40Atom.
The following additional ROM images are boot loaded from the ARM:
- Bank 0 = AXR1
- Bank 1 = PCharme v1.73
- Bank 2 = Atomic Windows v1.1
- Bank 3 = GAGS v2.3
- Bank 4 = Program Power Toolkit
- Bank 5 = Watford Electronics ROM
- Bank 6 = FPGA Utils v0.28
- Bank 7 = configured as RAM initially empty
Each of these adds additional BASIC commands. Most of the manuals can be found here.
2) Atom SID
The second new feature is a implementation of the 6851 SID sound chip.
Although not original to the Atom, this is quite a popular modern extension, known as Atom SID:
There are quite a few titles in the archive that feature SID based music. Just select Chapter F and search for SID. Here's a couple of examples:
Atomic Flappy Bird:
Atom SID Compilation:
Space wise, things are now quite tight:
IOs 58 / 107
GBs 0 / 8
GB_IOs 0 / 8
LCs 6598 / 7680
CARRY, DFF 196
DFF PASS 920
CARRY PASS 65
BRAMs 23 / 32
WARMBOOTs 0 / 1
PLLs 0 / 2
PIOs 41 / 107
PLBs 953 / 960
BRAMs 23 / 32
I'm actually quite surprised the SID fitted, as it includes an 18x18 multiplier in the filter, and a 8x12 multiplier in each of the three voices. In a Xilinx these make use of the hard DSP blocks, but in an iCE40 they are implemented using logic gates.
There are many more SID music compilations in the archive, as I have a mechanical (i.e. automatic) way of porting Pitfall Jones's BeebSID compilations:
The audio output of iCE40 Atom is on PMOD 11/12 pin 9 (that's the top row). The signal is driven from a PWM DAC inside the FPGA, so ideally you need an external low pass filter. I'm using a 3.3K resistor followed by a 4.7nF capacitor to ground. The output to your amplifier should be taken from across the capacitor:
Enjoy the music!