“The marvellous thing about a singing horse is not that it sings well but that it can sing at all. To accomplish speech synthesis on a Spectrum with no additional hardware is a marvel of a similar order”.

Spectrum Computing issue 01

Screenshot of a CRT television set. Text on screen reads: The marvellous thing about a singing horse is not that it sings well but that it can sing at all. To accomplish speech synthesis on a Spectrum with no additional hardware is a marvel of a similar order.Spectrum Computing title screen. May/June issue (c) 1983

ZX Spectrum PlusD (clone) disk interface. The last of the parts arrived today so I blew the EPROM and programmed the GALs. And it worked!

An almost fully populated PlusD interface circuit board with three ICs missing. Using a GUI on an ancient Windows laptop to operate a USB programmer (a cheap TL-866-II clone) to program a GAL. Picture shows the programmer device sitting on the open laptop with the GUI on screen. A slim 20 pin IC is inserted in the programmer, and the device has a brightly glowing red LED.PlusD interface connected to a 48K ZX Spectrum. Floppy disks, drives and ribbon cables are strewn around. Yellow and red LEDs are brightly glowing on the PlusD. It has no casing, so the circuit board is visible.

Tell you what, going back to 1206 SMT components after working with 0805 scale devices is like moving paving slabs around. (Strawberry Chuppa Chupp for scale)

Detail of a partially assembled circuit board. Small SMT components on millimetres in size have been soldered to the board. A strawberry Chuppa Chupp lolly has been put into the photograph to give a sense of scale.

Well. Time to learn how to blow a GAL. 👨🏻‍🏭

Two DIP IC chips in plastic storage tubes, and several transistors in a small plastic bag.

I thought something was wrong with my PlusD disk interface so I took it apart for inspection… and who would’ve guessed it, the problem was just a duff floppy disk! 😩🥴😛💾💾💾

PlusDLite disk interface without its casing, plugged into a ZX Spectrum +2A. A couple of disks are scattered around with labels “Zeus Assembler” and Beta DOS”.

It’s never given me any trouble to be honest, it’s easily one of my favourite Spectrum accessories.

(I’ve no idea why I didn’t immediately suspect the well-used second-hand disk I got in a job lot from eBay!)

I quite often replay the original Tomb Raider around Christmas time, but I really associate it with the new year. Anyway this year I was looking up some of the secrets I’ve never found, and discovered a bug(?) in the PAL version: the third secret in The Cistern is inaccessible!

Screenshot of PAL version of Tomb Raider, the Cistern level. Lara Croft is standing on a stone balcony looking at a disguised moveable block that’s hiding a secret area. The texture of the block is slightly different to the surrounding walls.Screenshot of PAL version of Tomb Raider, the Cistern level. Lara Croft has moved the disguised moveable block but there’s a wall behind it blocking access to the secret area.Screenshot of NTSC version of Tomb Raider, the Cistern level. Lara Croft is standing on a stone balcony looking at a disguised moveable block that’s hiding a secret area. Unlike the PAL version the texture of the block is the same as the surrounding walls so it’s harder to find. (Note the screen borders as this is running on my 50Hz PAL Saturn!)Screenshot of NTSC version of Tomb Raider, the Cistern level. Lara Croft has moved the disguised moveable block revealing the secret area behind.

Well it might be the twelfth night but it’s not too late to post about my ADVANCED CHRISTMAS JUMPER SIMULATOR for ZX Spectrum. And do check out the rest of the latest W00t! tapemag for loads more laughs and games.

ZX Spectrum screenshot. Image shows two people wearing ugly Christmas jumpers. The text reads Advanced Christmas Jumper Simulator.

Moley Christmas, dudes. Cowabunga.

“Moley Christmas” game for ZX Spectrum on cassette tape being held by Leonardo (Teenage Mutant Ninja Turtles) action figure, standing in front of a ZX Spectrum. Fairy lights in the background.

ZX Spectrum Next

The glossy spot-varnished box of a ZX Spectrum Next along with some wrapped Christmas presents underneath a Christmas tree.

It’s important to stay organised in the hectic modern world of Information Technology.

A small red notebook with a Tip-ex’d label that now reads “Computer tapes log book”. In the margin are ball-point pen doodles, it appears to read “1992”First page of a notebook, reads “Saracen Paint piccys” and lists the tape positions of the picture-files named “Ferrari” and “Duck”. Underneath is written “Hungry Horrace Works on B side”

Sunday: upgrading an already-modified (but still with with notoriously bad and unbalanced sound) ZX Spectrum +3 with a stereo modification from ByteDelight. It attaches directly to the AY-3-8912 (separating out the channels) and taps into the gate-array to pick up the classic beeper sound as well.

Close up photo of a back-lit printed circuit board. In the centre of the image a white adapter-board with very small components has been attached on top of a large microchip. Various wires are coming off the adaptor and out of sight.Television shows white text on black that reads “a short demo about jetpacks”. Below the tv, a weird-looking ZX Spectrum glows green.

Saturday: time to install a Word Processor onto Hard Disc Drive. (Not to mention the 70,000 word dictionary and a collection of “several” typefaces). #Tasword #zxspectrum #plus3e #yolo

Television showing text, listing the names of files. Also pictured: customised ZX Spectrum +3, a 3-inch floppy disk drive and the large clamshell box for “Tasword Plus Three”.

Midnight hackers club. Who wants to write a text scrolly? #ZXSpectrum #specasm #z80

Photograph of a TV screen showing a syntax-coloured machine-language program listing.

Piña colada / collida detecta (if you’ll indulge me one last #fomo toot xx) #Z80 #ASM

Piña colada in a tall glass with what looks like the world’s largest cocktail umbrella. The blue sea glints in the background.Screenshot of annotated Z80 assembly code that’s designed to detect collisions between game objects, “bullet” and “bug”. Some smug guy can be seen reflected in the glass surface of the computer screen. He might be holding a piña colada.

As cool as it’s possible to be in this heat. #SAMCoupé #ZXSpectrum #poolside

Literature by a swimming pool. “SAM Revival” magazine by Quazar, and “Super Charge Your Spectrum” by David Webb. Palm trees and steep mountains are in the background.

Keep cool at the pool. 😎 📚 ⛱️ #zxspectrum #asm #z80

Paperback book in the sunshine by a swimming pool. The title is Advanced Spectrum Machine Language, by David Web.

I’m travelling for work today so I’ve brought the laptop, an Amstrad NC100. For on-the-go connectivity all you need is an RC2014 connected via RS232 at 9600 baud.

P.s. don’t zoom in, I’m doing important Business Work™ not playing Zork.

Amstrad NC100 connected to RC2014 via RS232

This week I’ve been wrestling with SAM networking again! SAVEing works perfectly (Net and Tape format are almost the same so it’s easy to coerce the saved bytes into a .tap image). On the other hand bytes are being dropped on the way back; I’m not sure why. #SamCoupé #MIDI

Television, RC2014 on top, SAM Coupé to the side. Screen shows BASIC listing.Closeup of TV screen. Three columns of information: decimal numbers, hexadecimal numbers and ASCII textHandwritten hexadecimal numbers on a lined notepad. The notepad is on top of SAM CoupéSAM Coupé display showing the text “Code: NOTICE” implying it’s (trying to) load a code block.

Hmm. This feels like homework.

Right angled triangle sketched on feint ruled notepaper. The drawing is annotated with arcane symbols whose meanings have been lost to us, but suggest a high-school level understanding of trigonometry (maybe). Anyway a frog is firing a projectile up at an angle towards a fly, so this is probably about working out that trajectory.

I suppose it’s quite nice sometimes maybe to switch the computer off and go outside for a bit. We saw dolphins and it was lovely (not pictured because I was looking at them and enjoying it and not pointing my pocket computer at them).

Photograph of the coastal cliffs of Mull taken from a small boat on a clear sunny dayPhotograph of the wake behind our small boat. The sea and sky are deep blue, the sun flares on the camera lens highlights the faint whispy clouds. Chrome railings and a red lifebuoy.

Goin’ surfin’ 😎 🏄 #amstrad #nc100

Photograph of Amstrad NC100 computer in the sunshine by the harbour

SAM Coupé fun with images

I experimented a bit more with creating an image to deliberately exploit the effect that a 50Hz alternating image has on my TV (and other upscaler chipsets).

Since the TV seems to display all the even lines of one frame, and all the odd lines of the other I thought I’d create a double-height image of 256x384. The source image is scaled down horizontally (so that it looks stretched) but that will be corrected when displayed at 256x192 because the de-interlacing effect scales down the image by half vertically (each row of the display is half a pixel high).

Screenshot of an image editor application with an image of a space-walking astronaut in orbit above Earth

I exported the image as an (8-bit) 16-colour PNG, then ran it through my 8-bit to 4-bit conversion script that I’ve been using to convert sprites. I modified the script to export all the even lines to one file, and the odd lines to another file. (Each 128 bytes in the file represents one screen line, and the lines are ordered top to bottom).

I thought about just using one contiguous file and doing some processing on SAM but then I’d have to deal with a 48kb image file. The resulting files are basically a normal Mode 4 screen$ file, (just missing the palette data) so that keeps things straightforward.

Screenshot of a Python script

To help further with moving the image around SAM’s memory I compressed the data using zx0. In this case it took the 24kb file down to 7113 bytes. The Z80 implementation of the decompressor is really fast and I use it to dump the two images directly into the respective frame buffers when the program starts up.

I don’t yet have a way of automatically mapping the palette from the PNG index to SAM’s format, so I just opened up the 16-colour PNG in SCADM’s handy image importer and copied the palette entries from there. (The order was wrong; I’m not sure how my image editor assigns the colour indexes so I just reordered them by hand).

The astronaut image from above being reduced to 16 colours and the palette information extracted

I’ve started using Simon Owen’s pyz80 extension for VS Code which provides a wrapper around Andrew Collier’s pyz80 assembler as well as Simon’s samdisk tool for manipulating disk images. So now with a keyboard shortcut the code is assembled with pyz80, and samdisk creates an auto-booting disk image as well as broadcasting the assembled binary to my SAM listening on the local network. The TrinLoad softaware running on SAM recieves the code and launches it. Here’s how the resulting image looks on the TV:

Photograph of a tv screen showing the astronaut image Photograph of a tv screen showing Sonic the Hedgehog

It definitely works to smooth out certain things—like the curvature of the earth, the top of the space helmet or Sonic’s quills (compare that to the stair-stepping inside Sonic’s ear for example):

close-up of the astronaut image another close-up of Sonic, this time without the issues

I noticed I had to load the even lines in to the first buffer; the other way around incorrectly interlaces the images and results in visible comb artefacts:

closee-up of the Sonic image showing issues with the image

But otherwise I think it’s a neat effect. What do you think?

floppy disk icon Here’s a disk image if you’d like to try it out: image-fun.mgt

Denise #KeepingUp #Commodore

A microchip with the Commodore logo in foam on a wooden surface next to a small green circuit board

I had some success removing the yellowing from my SAM with “vapour brite” (works just like Retr0brite but the plastics don’t go directly in the solution). Compare the drive facias (before treatment) to the SAM top case (after half a day in the sun). 😎

a clear Perspex™ box in direct sunlight with a white plastic item inside. aluminium foil underneath, the clear liquid in the box is forming condensation on the walls and lida large clear Perspex™ box in direct sunlight with a SAM Coupé top case inside, aluminium foil underneath, clear lid clipped on tightlySAM Coupé computer with a SamCo card cage accessory. the floppy drive face plave on the SAM is noticeably more yellowed than the rest of the ostensibly white plasticclose up pictire of the SAM Coupé with the floppy drive pulled out slightly to emphasise the contrasting shades of white and yellowish plastic

Sam Coupé MIDI and Serial Networking

Tonight I’m mostly using @shieladixon’s wonderful MIDI interface for RC2014 to take a closer look at how serial Networking is implemented on the SAM Coupé. (TL;DR it’s MIDI).

SAM Coupé with MIDI cables connected

SAM uses DIN-7 connectors but the sockets are compatible with DIN-5 (MIDI).

RC2014 with MIDI cables connected with a laptop showing a serial terminal window

The RC2014 MIDI Interface Z80 Framework gives straightforward access to the raw bytes. I’ve noticed that my USB-MIDI adapter (also pictured but not in use here) automatically translates the bytes into “standard” two- or three-byte MIDI messages (usually by injecting extra control bytes in an attempt to try to make musical sense out of non-musical data).

Screen Shot of serial terminal showing raw data bytes

The data structure is similar to how ZX Spectrum BASIC programs are stored. Header bytes give file type and file name etc, the BASIC keywords are tokenised and variable names and values are tacked on at the end.

Screen Shot: hex view of a saved BASIC progam