The Spectrum programs below were originally written for Your Sinclair magazine, with the first three published in the Program Pitstop section. The remaining programs were completed, but either unsubmitted or simply unused.
Sprite Editor
This was my first proper Z80 program, written when I was 15. Before that I'd not really done much more than small routines to bounce sprites around the screen.
On top of basic pixel editing the program provides mirror, invert, scroll and copying functions, for sprites up to 4 bytes wide. The code was based at 25000 to give a little room for BASIC, leaving most of memory for game graphics to examine/edit.
Published in Issue 32 (Aug '88), page 80.
Download Z80 Snapshot(4K)
Sound FX Generator
Spurred on by the £50 prize from the first, I immediately began work on another utility. The sound effects generator was my first stab at using the 128K sound chip, which was a huge improvement on the original 48K beeper.
The program was designed in 2 parts — an editor to create the sound effect, and a compiler to compress the raw data down to a more manageable size. Unfortunately, the compiler part was never completed, so the published program included only the editor and raw data playback utility.
Published in Issue 34 (Oct '88), page 97.
Download Z80 snapshot (8K)
Multi-Load
Multi-Load is a flexible screen loader, giving control of how the screen data and attributes are loaded. One completed, the new loader is saved out to tape ready to use.
A menu-driven wizard prompts for the following input:
- The SCREEN$ to load for the effect
- Loading order: data first, attrs first
- Data order: normal, backwards, top-down, bottom-up, left-right, right-left, random
- Attrs order: normal, backwards, left-right, right-left, spiral, diagonal, random
- Border style: normal, multi-coloured, masked
- Masked border colour: black, blue, red, magenta, green, cyan, yellow, white
- Loading speed: normal, medium, fast, aaaaaaargh!
To show it in action I've prepared an Exolon screenshot, loaded attrs first in a spiral, data in random order, using a multi-coloured border, and maximum loading speed. Load the TZX image below into your favourite Spectrum emulator, and don't forget to disable speed loading tapes or it'll load instantly!
Published in Issue 38 (Feb '89), page 85.
Download Z80 snapshot (43K)
Download TZX demo tape (244K)
128K Music
Despite being released as a music demo, this started life as a windowed menu utility aimed at Program Pitstop! I don't think it was ever submitted, perhaps because another window utility was published in the meantime.
A separate wizard utility (not included) prompts for the menu caption and items, as well as colours and position. A routine called from BASIC shows the menu and waits for the user to select something. The returned value indicates which option was selected, or 255 if the selection was cancelled. A second route is called to remove the menu, restoring what was under it previously.
I created a showcase demo with 128K music ripped from various games, and that's how the final program looks below.
Download Z80 snapshot (108K)
MultiMania
MultiMania is a poke database containing cheats for hundreds of Spectrum games. It's probably the closest thing I did to a traditional demo-scene demo. I submitted it to YS, but Spectrum magazines were already in decline and I never heard back.
The title screen includes a raster effect combining border+128K screen switching to give the bouncing yellow bars. The intro screen has a proportional font and strange bouncing logo letters. The main program has a large colour 50Hz scroller, with the top of the display used to scroll through pages of game names. A sub-screen on each shows the available pokes, which could be noted down for later use.
The biggest problem with this utility is that it takes a couple of minute to load from tape, so it was hardly a convenient reference! I loaded my own copy from +D disk (as featured on the title screen) in under 4 seconds, so it was still very useful.
Download Z80 snapshot (43K)
Secure
I submitted this for the password challenge set in Issue 33 (Sept '88), though it wasn't published.
The program uses some fiendish techniques to resist hacking the running program:
- SP points to a location in ROM during the entire execution. This prevents Multiface or +D snapshots being taken by destroying the AF and PC values if the device is activated.
- The running code is relocated to the bottom third of display memory, hidden under black-on-black attributes. In the event a Multiface is used, the invalid PC value forces the hacker to search for the code, and the display will probably be the last place they look.
- The contents of RAM are scrambled when program starts, to obfuscate the original contents. This makes it less likely the protected program can be extracted from a simple RAM dump.
- The input text and program strings are encoded to prevent a simple text search revealing their location.
You have two attempts to get the right numeric code before the machine is reset. The correct code for the demo snapshot below is 1236031769 (bonus points to anyone recognising that number!).
Download Z80 snapshot (27K)
Mega-Scroller
Regular scrolling messages had been done to death already, so I tried to make things a bit more interesting.
You can define your own scrolling message by replacing the REM statement at the start of the BASIC listing. The following symbol characters have special meanings, with some requiring a 2-digit numeric argument:
# — toggle upright characters
^ — scroll speed (nn)
@ — text height (nn)
_ — text width (nn)
$ — scroll position (nn)
£ — start of scroll loop
& — end of loop point
% — return to basic
The character set used is taken from the CHARS system variable, so you can use your own by poking a new address into 23606/7. Oddly, I didn't include a way to escape the symbols to use them in the message itself.
The snapshot below also includes the HiSoft Assembler and scroller source code. Press Space to terminate the scrolling message and use RANDOMIZE USR 26000 to enter the assembler.
Download Z80 snapshot (19K)
Etc.
That's all so far, but if I find anything else I'll add it here.