Your Spectrum
Issue 3, May 1984 - Basicare Hardware Add-ons
Home Contents KwikPik
Y S   H A R D W A R E   R E V I E W :
The early adverts for the mould- breaking ZX81 suggested that the Cambridge minuscule miracle was capable of controlling a power station. While others choked, turned purple, or rolled chortling in the aisles between the card sorters of their doomed main- frames, Basicare quietly designed a powerhouse that the ZX81 could run - a modular one, limited only by the height of your ceilings. And now it's available for the Spectrum.
The ceiling height is significant because the expansion modules stack neatly on top of each other, and because the accompanying literature gives several different figures for the maximum memory that can be added to your ZX, ranging from 256K to a gigabyte (this last from a reprint of a review by another magazine and hence, highly suspect). At just under an inch and 64K per module, a one megabyte memory will stand about a foot and a half high, counting the two modules needed for interface and paging. Personally, I'd stop there, but a real maniac with six feet of clearance between desk and ceiling, or who is willing to compute in a stairwell will be pleased to know that the Basicare documentation definitely says that four megabytes of address space is possible. Not all of this is available for RAM, however, as the paging system devotes some areas to other uses.
Non-maniacs who have not yet left us may well be more interested in these other options: such as the eight-channel A/D converter; the non-volatile, auto- start CMOS memory module; Centronics interface; EPROM module; and more. There are even hints of a 16-bit add-on processor to come, but at that point you'd probably sling out the original computer as a drag on the system, and run the expansion on its own!
Basicare stack

Towering above competitive add-on units for the Spectrum, the Basicare system offers a wealth of new applications for the 'professional' user. SQ Factor finds out whether the system measures up ...


Us aged duffers, hands crippled with solder burns and minds cluttered with the characteristics of thermionic valves, nevertheless possess one clear advantage over most whizzkids when it comes to coping with new toys. Endless and repeated experience has taught us to read the instructions before doing anything else. Basicare's literature is nostalgia reborn. I love it. Phrases like "Connections to the aluminium strips can be made with small crocodile clips" brings small crocodile tears to my eyes. Before computers became consumer products we enthusiasts drooled for hours over documents like these in search of enlightenment. It does eventually come, provided you are sufficiently enthusiastic. The information is all there, but it's not too well presented.
What you get is a flock of photo- copied 'technical sheets', the mix depending on which modules you have acquired. Most of them were originally written from the ZX81 and are accompanied by an update sheet for the Spectrum, to be read in conjunction. The business of memory paging, without which no eight-bit micro can address more than 64K, is not beyond the understanding of anyone - but it's beyond the patience of lots of people, I reckon, especially if they have to work from this documentation. Some of the confusion arises from uncertainty about whether the piece of paper you're reading is meant to apply to the Spectrum or the ZX81 or both, particularly where addresses are concerned. These and other numbers are also given sometimes in Hex and sometimes in decimal, with no indication of which is which. However, most of the complexity is in the concept itself and, therefore, these products
should be regarded as not for beginners, unless the beginner is determined to become an expert the hard way.


The 'Organic Bus' is a marvel of tidiness compared to the breadboard tangle that this sort of equipment usually results in. Stacking the modules chains them onto the bus via a 64-way plug/ socket out of the top and bottom of each module. Once plugged together, they stay put very firmly and the stack can be handled as a unit.
All the modules have pins sticking out the back which are used for various purposes. On the memory modules, pins are linked together to select appropriate positions in the memory maps, while the in/out modules also use them for guess what? Linking clips are supplied, placed in 'get-you-going' positions. The Centronics port has a proper 26-pin connector with grips.
The edge connector that plugs into the Spectrum has something of a home-made look, being held together
mostly by a large dollop of cold-pour rubber compound; but it is serviceable.
Further Spectrum add-ons are not catered for, as there's no carry-through of the edge connector. However; Basicare says the system is completely compatible with the Microdrive, and it did indeed work with ours. The two would seem to be good companions, with the Network and RS232 of the Microdrive filling a gap in Basicare's range.
I asked whether the Prism VTX5000 Prestel adapter was compatible but Basicare has yet to investigate the idea, and I am too chicken to just plug it all together and see if it melts. For the moment I access Prestel with an unadorned Spectrum plus VTX5000.
Two further modules which we did not review are Sonus, a three-channel sound generator, and Toolkit, which can house 8K of your own utilities in EPROM. Other developments are promised for the future.


What we have here is a failure to communicate. The Basicare gear is tidy, powerful, robust and complex. It can give Sinclair users access to advanced techniques for specialised applications which they would be unable to find elsewhere, and all in an integrated system - provided they are able to understand how to use it, that is! What it needs most is a complete re-write of the documentation, with separate versions for ZX81 and Spectrum, preferably written by someone who doesn't do Hex to decimal conversion in their head.
Anyone who merely wants to bump the 16K Speccy up to the full 48K and no more, would be well advised to go for a simpler and cheaper alternative. This route is for the user with an application in mind, and the ability to implement it alone. Commercial programs for the Spectrum that use more than 48K and can cope with paging are not noticeably available.
If you want to turn your Spectrum into a sophisticated tool you'll find the necessary building blocks in this system. The rest is up to you.


Persona SP
This is the main module whereupon all others are stacked - the foundation of the tower block. By itself, it does nothing. Its function is to provide a buffered 6-way bus, regulated power supply (using the unregulated power from the Spectrum's supply, via the edge connector), and various decoding and paging signals for the other modules.
The buffering is a good idea from a safety point of view. I accidentally plugged the expansion into my 48K Spectrum without having previously made an essential modification to the innards (of the Spectrum) and got away with having two different lots of memory chips trying to control the data bus at the same time. Not recommended, but not a disaster either.
The 16K Spectrum mates up to the Basicare system with no hardware mods but the 48K version has to have a connection made internally between one pin of a decoder chip and the edge connector. The purpose of this is to turn off the top 32K of memory whenever the Persona is attached. Unfortunately, this part of the memory can not be used with the Basicare system; it does seem a little odd to start an expansion by removing 32K of RAM and then presumably replacing it externally, and this feature will make the system rather less attractive to users of the larger model.
The Persona can power up to five modules, using the power pinched from the Spectrum supply. Larger expansions will
require an additional power pack to be attached to the Persona.
Pericon A
Control applications requiring a lot of TTL in/out can be implemented with this module, or for heavier use, the buffered version, Pericon B. There are three eight-bit ports which can be either input or output at your option, giving 24 in/out lines. If you want any more, you just slap on another module, up to a limit of perhaps four. Well, at least four, say. It would seem that more might possibly be managed using paging, which requires a Minimap module.
The technical sheets on this one are technical indeed. Suffice to say that the inputs and outputs are low power Schottky TTL equivalent (can't be bad), and
that up to 2mA can be had on output for driving a transistor, LED, or whatever if you don't mind the voltage dropping below TTL levels. A few circuit examples are included to get you started, driving relays or the like. There is even a fairly ambitious project for making yourself a membrane keyboard out of kitchen foil and Sellotape (plus small crocodile clips). This is the kind of experiment that I prefer to conduct mentally, a la Einstein, but it would not be out of place in a classroom.
From the computer end, the ports appear as simple memory locations and are accessed by PEEKs and POKEs. Complexity appears in the shape of the control port which is used to set the others to input, output or modes beyond, strobing and even bi- directional modes being available with a reduction in the number of lines. At this point I moved on to ...
Pericon C
This is the Centronics interface module for use primarily with proper size printers. I was unable to test it as I have no Centronics equipment about the place (we're RS232, we are). However, I'm forced to recommend it anyway, as you'll be unable to use the cheap and cheerful Sinclair printer with any of this gear. Nothing exotic like the clash of mismatched memory maps, merely the fact that the Persona module does not have a carry-through edge connector for the attachment of further Sinclair stuff; also, the one on the Sinclair printer, which does allow chaining, is not the full width, so the Persona can't plug into it. Right daft, but who to blame? Both companies seem to have goofed here. You won't be able to fit your joystick, either.
You get a cassette with the Pericon C which when loaded allows you to specify width (maximum 80 columns) and lines per page (maximum 66 lines) and then sets up a machine code driver to run the Centronics printer directly from LLIST and LPRINT. This driver is placed at address 32300 decimal, and I have no idea if it can be moved as the cassette seems to supplant any technical sheet concerned with this module, and there are no REMs in the program. I would have thought this was an ideal candidate for inclusion in the non-volatile memory of the Autostart Drom. As it stands it would seem to limit one to a 16K Basic program, however much more memory you might have. (See also the RAM section on this point.)
Whatever niggles a conscientious (or contentious) reviewer might feel the need to grub up, real black-on-white listings instead of the standard 'silver streak' are a
heartfelt need long denied to magazine editors and the like, and any piece of kit that can bring about this Jerusalem cannot be decried.
Link A
Eight channels of analog input can be handled by this module, and you can, again, have up to four modules at least. The analog voltages must be between zero and plus five volts, and while a simple resistive divider will bring larger voltages into the module's range, other techniques are recommended for accuracy and safety. In particular, the inputs must never be allowed to go negative or over five volts. This is not a problem with resistive probes such as thermistors or strain gauges, but if you're thinking of spectro-analysing your Hi-Fi then it's a point to watch.
Unfortunately, what seems to be a diagram of a ratiometric input arrangement in the 'tech' sheet only had the labels printed, with the drawing itself left out. I would expect that anyone having a use for this module would probably already be familiar with instrumentation electronics, buffer amps and the like, so maybe it doesn't matter.
The computer reads the module with PEEKs and selects the required input with POKEs. Accuracy is stated to be one bit, working out to 0.4 per cent, which is better than any probe is likely to give. This one would seem to be suited to genuine scientific monitoring purposes.
Autostart DROM
This is the point where the Basicare system came alive for me. Not only does this module give you up to 8K of non- volatile memory for your own routines, but it can actually cut out the Spectrum ROM at power-up, run its own initialisation routine, and leave you with a bunch of extra interrupt driven functions. It came supplied with resident software providing an auto- number routine for Basic lines, a machine code reset (derived from Toni Baker's article in YS issue one), and a routine to read the Clock module in a convenient way. I've added my own bit of code to give an instant reference 'free memory' function (see Listing 1 )just to show that anyone who wants to re-write Sinclair's operating system can do it with this module.
However, I must confess (having gone on a bit about us old hands always reading the instructions) that I switched off the write protection before I knew what I was doing, and somehow wiped the supplied program.
Basicare kindly sent me a cassette with which to restore the code, if not my aplomb. As to why it wiped, either I was reading the wrong piece of paper (there were three lots for this module), or I was attempting to alter code which was actually running at the time, once every interrupt; on the other hand, just possibly my 'reviewer mode' simulation of the new user, a necessary ability for an article like this, is more advanced (read 'naive') than I thought.
The module is supplied with internal sockets for four CMOS 2K RAM chips, but you needn't pay for more memory than you need. Ours had 4K fitted and two empty sockets. Write protection is selected for each chip by its own diddy switch at the back of the module, and the autostart feature can be enabled or disabled by the positioning of a link nearby. The write enables should only ever be switched on when you are entering or LOADing in code, and I would personally never touch them without SAVEing the relevant section of memory to tape first.
The obvious appeal of having your own idiosyncratic printer routines, utilities, or alternative character sets all ready on-board and operative at power-up needs no further elaboration, and makes this the most interesting module in the system.
The only snag I found was that the autostart routine that reads the Clock module places the time and date info into the Basic variable, t$. This means that a simple PRINT t$ command will put the time and date on the screen. However, it also means that a RUN or CLEAR command, which clears the variables area, confuses the interrupt routine and drops you into a sort of semi-crash. Furthermore, LOADing in a Basic program also seems to mess up, with the program apparently unable to recognise its own variables. But you can write a program while the feature is active, using t$ to PRINT the time if you want, without any trouble, so I should think the debugging of this feature did not progress much past the EDIT mode. Too bad, because it will stop you using the autostart software unless Basicare fix it.
However, I can exclusively reveal that if you POKE 57866,24, then the t$ update is bypassed and you don't get any more trouble. You don't get the time, either (there are other ways to read the clock),
but you can still use the other added features, auto-number, reset, and my own mem bit. This POKE replaces a conditional relative jump (20 Hex or 32 decimal) with an unconditional one (18 Hex), so you know how to put it back. Don't forget the write enable switches. This dodge is not needed unless the clock module is in place, as all it does is tell the software that there is no clock to read.
This is a proper real time clock with battery back-up and its own timing circuitry. It's therefore much more accurate than the Spectrum's internal 50-cycle counter, and it doesn't lose time during BEEP, etc. Besides the time, down to tenths of a second, it also keeps track of the day, day of the week, month and year, with the appropriate software. A cassette is supplied with two programs, one to set the clock and one to read it.
The internal nicad battery will keep the clock going for three months on a full charge, and it charges automatically.
Our module didn't work at first, in fact the whole system hung, but it only needed setting. We couldn't load the setting program because it hung on power-up, as we were using the autostart module, which accesses the clock every 50th of a second - said clock being hung up because it needed setting. Get the picture? No problem at all in fact, and a line of text in the documentation would have saved us having to phone
Basicare (again) and do our increasingly familiar moron act. If it happens to you, just ditch the autostart long enough to use the setting program. The other problem with the autostart and clock we have already discussed.
We got the smaller RAM module, the 16K. A 64K version is available, but requires paging which would require a Minimap module. Unless you are prepared to get involved in such techniques, you're limited to a 16K RAM expansion (not counting the additional 8K of the DROM). This would seem to be a hangover from the ZX81, which had a very different memory map to the Spectrum.
The major limitation here is that paging is only possible with a RAMTOP of 32768 or lower, which is to say within the Spectrum's own on-board RAM. You obviously cannot page the stack in and out of the memory map without giving yourself problems! This plainly means that the mucho memory craziness with which we opened this piece applies only to machine code programs and data that can be stored above RAMTOP. Basic programs longer than the normal 16K versions (which are really restricted to about 9K) cannot be run if you are going to use paging.
However, if you eschew paging for the duration, you can CLEAR to 48983 and still have room for the UDGs. In fact, the ROM does
this automatically on power-up. You can then write or LOAD about l5K of Basic. This is short of the standard 48K machine's capability, and you'll not be able to LOAD commercial 48K software. To be fair, that is not what the Basicare system is about, but it does seem a little perverse to have a Megabyte of memory, but still not enough room for The Hobbit.
The reason a further 16K cannot be simply added on top is that the last l6K of addresses is set aside for the DROM and in/out modules. And that is what Basicare is all about. Perhaps there is a way to get a RAM module to sit in that slot. There are, after all, scads of pins sticking out the backs of all these boxes, with which to play all kinds of memory swapping tricks, but I can't find it in the docs, and it's beside the point anyway. For The Hobbit you just carefully remove the Basicare equipment and hide it somewhere where it won't get smashed up by adventure loonies.
If you don't quite see what a lot of separate 16K pages that can't be used for Basic are good for, how about storing, say, 24 Hi-res screens and zapping them into the real screen memory in turn to produce a second of Disney quality animation? That would need three 64K modules.

0000           ;MEMCHECK
0000           ;
0000           ;
5C3B =         FLAGS   EQU     23611
5CB2 =         RAMTOP  EQU     23730
5C65 =         STKEND  EQU     23653
0000           ;
E2C5 =                 ORG     58053
E2C5 C326E3            JP      58150   ;REPLACES RETURN
E2C8                                   ; INSTRUCTION
E2C8   ;
E2C8   ;*******************************************
E2C8   ;* ABOVE AND THE ADDRESSES).               *
E2C8   ;*******************************************
E2C8   ;
E326 =                 ORG     58150
E326 F3                DI
E327 F5                PUSH    AF
E328 E5                PUSH    HL      ;YOU KNOW IT
E329 D5                PUSH    DE      ; MAKES SENSE
E32A C5                PUSH    BC
E32B 3A3B5C            LD      A,(FLAGS)
E32E CB5F              BIT     3,A     ;K CURSOR?
E330 201F              JR      NZ,SKIP
E332 3EBF              LD      A,0BFH
E334 DBFE              IN      A,(0FEH)
E336 1F                RRA             ;ENTER PRESSED?
E337 3818              JR      C,SKIP
E339 ED5B655C          LD      DE,(STKEND)
E33D 2AB25C            LD      HL,(RAMTOP)
E340 ED52              SBC     HL,DE   ;CALCULATE MEM
E342 44                LD      B,H
E343 4D                LD      C,L
E344 CD2B2D            CALL    02D2BH  ;STACKBC    USEFUL
E347 CDE32D            CALL    02DE3H  ;PRINTFP  ROM ROUTES
E34A 3EBF      LOOP    LD      A,0BFH
E34C DBFE              IN      A,(0FEH)
E34E 1F                RRA             ;ENTER STILL PRESSED?
E34F 30F9              JR      NC,LOOP
E351 C1        SKIP    POP     BC      ;IT ALL COMES BACK
E352 D1                POP     DE      ; TO ME NOW
E353 E1                POP     HL
E354 F1                POP     AF
E355 FB                EI
E356 ED4D              RETI
E358 =                 END
10 CLEAR 32330
20 FOR i=32334 TO 32398: READ a: POKE i,a: NEXT i
30 DATA 62, 40, 237, 71, 237, 94, 201, 62, 63, 237, 71, 237, 86, 201, 255, 243, 245, 229, 213, 197, 58, 59
40 DATA 92, 203, 95, 32, 31, 62, 191, 219, 254, 31, 56, 24, 237, 91, 101, 92, 42, 178, 92, 237, 82, 68
50 DATA 77, 205, 43, 45, 205, 227, 45, 62, 191, 219, 254, 31, 48, 249, 193, 209, 225, 241, 251, 237, 77
60 SAVE "mem16k"CODE 32334,66
70 REM LET on=USR 32334
80 REM LET off=32341
90 REM Delete REM from one of the lines above to activate it

A BASIC program giving an interrupt driven MEM function, in answer to Toni Baker's request for a method of using interrupt 2 on 16K machines. Opaque, isn't it?
Home Contents KwikPik