# Building a SPI relay for the SMS

The I/O space on the SMS is, sadly, entirely taken. If you had
the idea of somehow plugging a SPI relay that is similar the one
on the RC2014, you can forget about it. Only A7, A6 and A0 are
considered by the 8 builtin peripherals on the SMS and trying to
do an IN or OUT to any address is going to end up conflicting
with one of them.

What we can do to achieve SPI communication with the SMS is to
use the B controller port. It can already do bit banging. It's
slow, but it works.

One problem we have, however, is that only 2 pins can be set as
output. We need 3. What I did, and it works with SD cards, is
to hard-wire CS to GND so that it's always turned on. The
downside of this is that if you go out-of-sync with the SPI
device, you have to physically disconnect it and reconnect it
to solve the sync problem.

The advantage of using port B is that the connector is really
simple, you don't even need a schematic:

* CLK to TH
* DI to TR
* DO to Up
* CS to GND

Add pull-downs to CLK and DI to avoid messing up with your
device (it's always on, remember).

# Building the binary

The SPI driver is in B622, which depends on controller port
routines at B625-B626. A ready-to-use xcomp unit is at
arch/z80/sms/xcompsdc.fs.

The SMS emulator has support for a SPI relay based on the B
controller port and can emulate a SD card plugged in it with the
"-c" argument. If it works in the emulator, it has good chances
of running on the real thing.
