However, Cartridges have a nasty limitation, which is the hard coded limit to 16KBytes. In fact it's a limitation imposed by ZX Spectrum inner workings and how ROMCS control line works, which can be used to disable internal ZX Spectrum ROM, which has 16KBytes, hence the size limit.
This will allow this cartridge to work as a replacement for multiples of 16KB ROMs, or eventually, as a fast application snapshot loader, so that larger than 16KB applications can be loaded by using several 16KB Banks.
Another important factor in the design, is to be able to quickly switch banks, in order to use the cartridge as ROM data bank, for an application larger than 48KB or 128KB. This allows for larger games or levels to be included, without ever needing to use a tape deck or similar serial loading.
So after several brainstorming sessions, I developed a method to trigger these commands, by manipulating the address lines into a specific sequence, that is almost impossible for a regular program to generate in normal operation.
On the right is an example of a simulation to validate the bank mechanism with a few test cycles.
It tests, regular Reading of addresses from ROM and RAM, the trigger mechanism for setting a Bank and also a another mechanism to allow writing to the Flash Memory being used as Cartridge ROM.
All that was left to do was to implement a suitable PCB (last image).
To make this a reality, able to fit inside the very small ZX Spectrum original Cartridge case, all components had to be SMD and low profile variant (TSOP and TSSOP).