An open hardware, open source project packing many features in a single interface.

https://codeberg.org/Retrostuff/SD81-Booster

FEATURES

What it doesn't do

We want to be open about what the interface doesn't do too. There are some limitations as to what it is capable of. Here's a list of some relevant ones:

Possible compatibility issues

Documentation

See MANUAL.md for the usage and technical manual. There's also extra documentation for the MCU commands and sound in the DOC folder

MC45

MC45 stands for Machine Code in blocks 4 and 5. By default, the ZX81 hardware only allows running machine code in addresses that are in the range 0-32767 (0000-7FFFh); out of this area, every instruction with an opcode in the range 0 to 63 (00h-3Fh) or in the range 128 to 191 (80h-BFh) will be replaced by a NOP by the internal hardware. It's possible to run some code in that area by restricting it to instructions with opcodes in the opposite range, i.e. the ones in the ranges 40h-7Fh and C0h-FFh, but working around the limitation generally takes more instructions than it would take without.

So, there's an MCU (and corresponding BASIC) command that allows activating a mode which allows any code, and not just the mentioned opcodes, to run in the area from 32768 to 49151 (8000-BFFF). It has the drawback that the display file can no longer be in that area, though, therefore BASIC programs larger than 16 Kbytes can't be loaded or written while this mode is active.

IMPORTANT: Note however that this is implemented by short-circuiting a Z80 pin, forcing it to 0. THIS MAY DAMAGE THE Z80 OR THE INTERFACE. If you know that your Z80 is CMOS, you're advised to either make an internal mod in your ZX81, by inserting a 680 ohm resistor between pin 18 of the CPU and the rest of the ZX81's PCB, or just disable the feature altogether by taking off the jumper in the interface. If it is NMOS, the feature will in principle work without the mod, though making the mod anyway is recommended.

Building the ZX81 ROM

The ROM listing for assembling that is used here is the disassembly work of Geoff Wearmouth, preserved by Tomaž Šolc, both of whom we're grateful to.

The ROM can be built using either GNU binutils for Z80Pasmo or MDL. Maybe other assemblers will work too.

To build with GNU binutils (package binutils-z80 in Debian-based systems), use the following commands:

z80-unknown-coff-as sdmodrom.asm -o sdmodrom.o
z80-unknown-coff-ld -Ttext 0 sdmodrom.o -o sdmodrom.bin

To build with Pasmo:

pasmo sdmodrom.asm sdmodrom.bin

To build with MDL, dialects pasmo and macro80 can be used, e.g.: 

java -jar mdl.jar -dialect macro80 -bin sdmodrom.bin sdmodrom.asm

...