ZX Computer thoughts

ZX Spectrum

This project escalated into its own page. I never saw the ZX Spectrum over here in Sweden, but I can understand its appeal. Cheap unit, cheap games, and booting right into a programming environment. As usual, I'd like to design my own, modern version based on the same philosophy... except it wouldn't be cheap because I'm obsessed by ASICs and nice injection moulded cases.

ZX Spectrum concepts.

Some initial sketches. Also some Macs. Some sort of mini printer, and a 2" floppy (nod at the micro drive).

The keyboard is a mix of the QL and ZX. I'm thinking it is a full ZX which can be slaved as a keyboard to a mini mini-computer/mainframe. The mainframe (only in name as it isn't all that powerful) can connect to several keyboards. I abandoned this concept.

A case design which I don't really like anymore.

Moving onto 2017. Quick and rather random case sketch.

A window manager doesn't really lose much functionality in tiled mode, if it just has to do the basic file stuff. 16:9 / 48:27 tiles. In a world of black-box OSes, even on (supposedly) learning oriented platforms, the computer accessibility (and ownership) philosophy of the '80s, augmented by modern advances, would be... ... *memories of having typed all this before*

I'd simplify the GPU. A bitmap/screen mode, and tile mode, both being 1-bit, with a 4+4 bit colour attribute byte per tile (rather than 3+3+1+1 bit). Tile mode has a name table. Scrolling? The GPU has a local line buffer to minimize redundant memory access (and make scanline doubling easier, as this might be aimed for modern displays). The Spectrum would apparently have to re-read attributes, which is why it can do MSX-style per-line colours with some work. Perhaps some of the RAM has video priority.

Palette here is WIP (v5.2). It was initially more graphical and saturated, but I decided to give more of a natural or photographic focus. By replacing the bright magenta with a brown it lost graphical width, but gained the ability to... do strip poker games.

Crash in-print palette

Honestly, I have mostly forgotten how graphics looked on old TVs. I know there's a problem with gamma in emulation (graphics looking pastel/washed out). Colour vibrancy might have been different too. Anyways, oftentimes, the first impression (and only impression) we got from games back then was in print, so I wanted to see how that palette looked. Photographing TVs with film, then printing, does introduce a lot of variance, but ultimately that's what we saw. Mind, the scans I used might be from yellowed magazines and I didn't use that many sample points. Also, it's hard to tell the brightness levels apart so I sorted coloors just by hue. Then I averaged together into a palette and used that to inform my own WIP palette, and then I made a bunch of haphazard feel-good changes.

35th! But, how would the original Speccy case look with the half-height keys of my Logitech K120 budget keyboard, which I quite like? I dunno... maybe? A bit tight/noisy/packed perhaps. I do like both the look and feel of these keys though. I changed the key layout (48 keys, incidentally) so it won't be legacy-friendly. Using the K120 keyboard as a base, the entire right side has been moved two keys in (no loss to a Swede as those are mostly our weirdo keys which are not used in programming). Gaming is now done with WASD, L-Shift and Spacebar. Actual character layout hasn't really been optimized. Tab and CapsLock are perhaps a waste.

I'm thinking this machine uses a custom BASIC dialect so all those labels are just placeholders. Function keys are shifted numericals I suppose. I ignored the convention of only placing shifted characters high on the key. A programming language would be automatically tokenized in RAM and textified on screen, saving a ton of memory and making block management/shuffling faster due to compactness.

Anyways, I can imagine this keyboard being quite usable even in a small format. Spacebar-ing with the right pinky does actually sort of work, but it does leave the thumbs a bit useless. Wait, "small"? In truth, if using the K120 keys, this case would have to be around ~29cm wide and not 23.3cm like the original. Still quite light and easy to plop in front of the tellie though, especially now when PSUs are so nimble for low power systems.

I wrote a keyboard mouse in BASIC for my HB-101 MSX. A hardware implementation of that could be fun, e.g. holding red shift and moving cursor with WASD, with some simple momentum to make it more analog. Should draw a little mouse arrow on red shift key.

The colour coding on this ZX joypad here matches the key colours above. Manic Miner robot is placeholder... should be some sort of thing there. A DIN 9-pin plug might work for 8 simple switches I think. Hmm, I wonder if joysticks ever used a keyboard matrix scanning method...? I've only seen one-wire-per-switch or shift registers, but I haven't looked that hard.

Aforementioned K120 keyboard - already looks a bit Speccy-like.

A ZX-81 redo based on the F1XD case. Metal toggle switches for RAM, ROM and whatever. Better not be wobbly switches! Snuck in some speaker holes. Drawing keyboard is like drawing hands - easy to come up one finger short. 70's orange! Couldn't make the red ZX-81 logo work against black, so white it is. Perhaps the same half-height keyboard as my Revenant above, but with an additional row.

Thinking about hardware design for this, the goal must be to design a primitive, consistent but also convenient learning/tinkering system. If too primitive, developing natively on it will be a hassle. Recently I've been using my Amiga 1200 a bit and it's surprisingly self-sufficient still, with AMOS and Deluxe paint still functioning well. Developing on the Speccy is a lot harder, but with a mouse, better keyboard, storage and some decent programs it doesn't have to be. I think most of the ZX identity springs from the graphics. Looking at the Z80 processors around still, they are around £3-5. My ideal fit for this project doesn't exist, but it would be a 8-20MHz in a cute 44-PLCC package, which has room for 4 extra address pins (64KB*2*2*2*2 = 512KB). Some onboard flash for booting might be nice too. There is a close fit, the eZ80 series which supports both 16 and 24-bit addressing and comes with flash. However, it's a bit cluttered by other things and doesn't come in PLCC form.

A regular Z80 with bank switching would sort of work I guess, but I think in order to offer a nice development environment it will need extra RAM and it shouldn't be a (confusing) chore to keep track of the Program Counter. I had some idea of using different 64K banks for different programs... allowing a form of cooperative multitasking (or alt-tabbing) by moving between banks. This promotes a sort of clean/"nice" 64K limit, whilst allowing various development environments to persist in the background. It also offers a form of primitive memory protection (the OS hibernating in bank 1 would be pretty safe from the irresponsible user's wild poking in bank 2). Kind of kawaii to have programs running on discrete 64K chips, ~ne? SRAM would be cleaner than DRAM me thinks. Bit pricey though?

Branching off graphics and sound memory is another idea for freeing up memory for programs. Last option I can think of is the Z180, which has an onboard MMU and I settled on this one for my Famicube design. Hmm, apparently I sketched on another Z180 system a while back. Not much of a cartridge guy though.

Dumped and edited graphics from Dragon-Ninja. An idea here is to preserve the 1-bit look in 2-bit by setting one color to "clash" (the background). Also did a 4-bit thingy for fun.

Colour clashing is perhaps both the charm and curse of the ZX spectrum. Basically, game characters will blend into the background (tile) colours, as they have no colour themselves. For my PPU, I want to keep some of that effect. It'll be useful for transparency effects, like water, mist or tinted windows.

Normally I think the Speccy inverts the characters onto the backhround, but to make the graphics readable, some games erase the background with a mask that's often a bit larger than the character. This creates an outline effect. It also means that the graphics are basically 2-bit, like e.g. the NES, which has 3 colours plus transparency (4).

4 colour sprites isn't Speccy-like though, so I'm thinking of implementing the clash effect just for the outline, creating a sort of coloured halo around the characters if the designer chooses. Furthermore, background tiles have a flag for also colourizing the remaining two sprite colours.

Mostly random noise being interpreted by my PPU. QX? Maybe ZX Valkyrie, a play on the norse reference "Loki" Sinclair used?

I have begun working on a PPU emulator. Because of the colourized 1-bit look is the appeal here, it doesn't quite make sense to use e.g. a wasteful 4-bit nibble frame-buffer, as that would allow fancy 16-color footwork and eat up VRAM. I have other projects for that kind of stuff anyways. My PPU currently goes for the following architecture:

After seeing a bunch of "Kong" games for the ZX, gorillas all-alike, I wanted to design my own, different one. Thus, Prin-Kong was born.

Keen eyes will immediately spot this as a vary sloppy 'shop of the Atari 65XE from the Wikipedia page. I really like the butt & flanks of that case, despite missing the essential floppy drive. Speaking of floppies, I should do something with the CF2 format used by the ZX Spectrum +3.

Playing with colors. Sprite adapted from Backpacker's Guide to the Universe.

Creatures from Backpacker's Guide to the Universe.

Various ZX characters.

Sector LX-12 is under attack by pirates, upsetting the production schedules of Galpan Industries. Reclaim the goods!

Minor change to the palette here, the dark brown is now grey, which provides a less biased base for shadows. However, the plan for the dark brown was to provide skin-tone and nature support, so I'm on the fence. Having trouble keeping memory access down for the PPU. Maybe the PPU supports horizontal flipping. Maybe a foreground/background flag? Maybe a Color clash flag, for water and tinted window transparency effects? However, tile address needs at least a full byte, as does the color attribute, unless I use e.g. 32 palettes (5 bits) but that's a reference and possibly more memory access. In the NES, the color attribute is a 4-bit nibble (2 per byte), so that's one approach.

Home Taping is ...

...probably helping to sell machines, grow the platform and thus increase the amount people who buy legitimately, and it's also as we have learned, a way to preserve. It's a balance if you ask me. What? Home taping is no longer a controversy? Anyways... some time ago I was looking into old tape and wire tech. Always thought it would be cool with a sort of random access tape, but finding files is a problem. The Microdrive used a short loop and zipped through it. Pretty cool. My solution also involves custom hardware.

Single sided tape cartridge of unusual design. It's single-sided so flipping over doesn't make sense, meaning, backside could perhaps be full label. No need for holes there.

Two separate tapes can be controlled by the capstans. One tape is really short and contains the file allocation table. The longer tape contains the files, along with location marks made when formatting. This way the system can quickly figure out where it is at, and also has immediate access to a single FAT entry. The solution of using two separate cassette tapes requires two calibrated players and constant pairing with no mistakes. My tape cartridge would of course require an expensive custom datacorder. By Sony.

Another MoBo blurb. My not-speccy might have four 64K banks so I wanted those to be tidy. A large SRAM is simpler but looks kinda poop. Tilted PLCC! Sockets everywhere! Missing memory pulled to FF or whatever and detected as unwritable on boot. At first I was thinking 9-wire cables for joypads etc, but those can be a bit thick I guess. If going serial, 5 might be enough. I don't like USB, but the plug for USB-B is actually nice and chunky and plugs in cleanly... but anachronistic and nonstandard if I use with shift register communication. Hmmm. PS2? DE-9?

Hardware pages

Amiga HDD - Amiga cleanup - Amiga pixels - SBC - Assorted - MSX - Acorn project - Amstrad project - ZX project

Art by Arne Niklas Jansson