back to article Crowdfunded ZX Spectrum revival just days from shipment

The remake of the Sinclair Spectrum from Retro Computers is about to ship. Despite our suggestion that it was a rubbish idea 4,549 of the 7,193 Reg readers who voted in our poll disagreed and quite a few must have put their money where their mouse is - as the first 1,000 Vegas sold out shortly after our article appeared. The …

  1. This post has been deleted by its author

    1. AMBxx Silver badge
      Thumb Up

      Can't get out of the prison cell? You have to ask for help.

    2. Sarah Balfour

      The Hobbit…?!

      I NEVER finished that! Probably just extremely thick, but I NEVER fathomed what "A window is no obstacle to a thief with friends" meant (and why the fuck, over 30 years later, can I STILL recall that verbatim (at least I think it's verbatim…)…?!). Even reread the book, didn't help dumdum here…

      I must have tried every verb-noun combo I could think of. Still couldn't escape.

      1. ravenviz Silver badge
        Facepalm

        Re: The Hobbit…?!

        I think you had to climb on Thorin's shoulders.

  2. This post has been deleted by its author

    1. desht

      You call it a problem, but USR was a function for a reason; it returned the value of the BC register pair.

      1. This post has been deleted by its author

        1. Dan 55 Silver badge

          Vaguely remember there was a BASIC variable stack pointer which used ROM routines to push and pop or if you were feeling brave accessed directly by reading the pointer from the system variables area. The Spectrum's floating point numbers were stored with a higher precision than 32-bit C floats today, they were 5 bytes long.

          1. This post has been deleted by its author

            1. Dan 55 Silver badge

              There were ints, stored in such a way that would never be a legitimate floating point value...

              "Small integers have a special representation in which the first byte is 0, the second is a sign byte (0 or FFh) and the third and fourth are the integer in twos complement form, the less significant byte first."

              http://www.worldofspectrum.org/ZXBasicManual/zxmanappc.html

              So, that's ten minutes that I'll never get back looking that up.

              1. This post has been deleted by its author

                1. Dan 55 Silver badge

                  But within BASIC there was no explicit integer type for variables, which in other BASICs was normally achieved by suffixing the variable name with %.

                  You didn't need to tell it to, the interpreter picked the most appropriate format when storing number variables. If a variable needed type conversion (e.g. LET a=1 : LET a=a+0.1) then it was done automatically. I've never seen that done as well in any language since, the usual brain-dead scripting languages around these days are happy to let you do 1+1 but if you're not careful you can get 11 back as the answer.

        2. Guy Geens

          Function arguments

          But I can't remember how the values were stored

          In the DEF FN line, the Spectrum would insert an invisible value after each parameter.

          I don't remember how it would find the location of those.

    2. Dan 55 Silver badge
      Meh

      If only all problems in software now were like this.

      There was a ROM routine which made it save some memory to tape. You could run it on every Spectrum in Smiths to make it look like it was loading and come back later to find out how big the queues were getting. Bonus points for changing the screen colour to black and printing "Bytes: <name of latest blockbuster Ultimate game here>" before calling it.

      1. This post has been deleted by its author

        1. Oh Matron!

          Nearly as good as the BBC..

          10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10: 10 GOTO 10:

          Hit enter and run like hell, as white noise would ensue :-)

          1. This post has been deleted by its author

            1. J.G.Harston Silver badge

              *INSERT /enables/ ROMs. *UNPLUG is the command to disable a ROM.

              1. This post has been deleted by its author

          2. J.G.Harston Silver badge

            Note quite. It was:

            10 G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10:G.10

            the point being that the expansion of line number parameter of the GOTO always took four bytes. If you entered GOTO 10 the GOTO was compressed to a one-byte token, so 'GOTO 10' compresses from 7 bytes to 6 bytes, but 'G.10' compresses from four bytes to five bytes, so the input buffer overruns and crashes into the sound buffers. Fixed in later versions of BBC BASIC where an extra BCS err_NoLineSpace was put in.

        2. bowdie

          ZX nerd

          For correct yellow on blue loading colours, it's "randomise usr 1302"

          So,

          10 PRINT AT 2,0;"Program : BruceLee"

          20 RANDOMISE USR 1302

          Would keep the good people of boots / WHSmiths on tenderhooks for ages.

        3. Jamie Jones Silver badge

          "It was at address 1331 in the rom. RANDOMIZE USR 1331 would activate it.

          You could run it on every Spectrum in Smiths to make it look like it was loading and come back later to find out how big the queues were getting."

          Haha yeah, "Program: Manic Miner" was the one that got the most interest.

          I always used USR 1310, but looking at the code now, neither start at a sensible point in the code.

          "Yes, for some reason the routine never ended, which is odd. I'll have to disassemble it and have a look sometime..."

          Yeah... Not sure without looking why it never maxed out at 65536, but here's the disassembly, complete with notes!

          http://www.wearmouth.demon.co.uk/zx82.htm

          1. This post has been deleted by its author

            1. Dan 55 Silver badge

              Look at L34B3 (usr-no). It calls L1E99 (FIND-INT2) which then calls L2DA2 (FP-TO-BC). By the time it comes out of that, BC holds the address given in USR, DE holds STKEND, and the carry flag is not set so it returns back to usr-no.

              If you search for 'Part 6. EXECUTIVE ROUTINES', STKEND is 0x5CB6 (23734) or probably little a bit more when the computer starts up.

              Somebody else can test it...

      2. Anonymous Coward
        Anonymous Coward

        RANDOMIZE USR 1234 I think did this.

      3. Paul Westerman
        Pint

        Smiths

        Pah! We were happy with scrolling text saying 'Simon is a bender'.

    3. mickey mouse the fith

      Heh, I remember the old 10 print "fuck off" 20 randomize usr 1331 trick. Many happy lunch hours watching the staff at Menzies fiddling round the back of the display Speccys trying to yank the power cord out to shut the thing up.

      Anyone try running a 10p across the Amstrad 6128 edge connector?, amazingly, it didnt knacker it like it would have done on any other machine of the era, but produced all sorts of colourful displays and random sounds.

      The menzies near me was great, the display machines were far enough away from the checkout that you could get away with all sorts. I used to ask to try c64 games, which they would stick in the tape deck and leave you to it, then I would power off the machine, insert a freeze machine cartridge and copy the game onto a blank tape. Happy days indeed, although one guy got caught doing it and got quite a severe fine after being escorted away by plod.

  3. thomas k.

    WTF!?

    "Error loading YouTube: video ID is invalid"

    I want to see that cat video, dammit!

    1. Captain DaFt

      Re: WTF!?

      "I want to see that cat video, dammit!"

      Invalid syntax, does not parse. Try,"I kan haz haz Kat piktur, plz?", or,"I wonts Kat piktur NAOW!"

      1. This post has been deleted by its author

        1. Oh Matron!

          Re: WTF!?

          Nested loops.... Tut Tut Tut! :-)

          1. J.G.Harston Silver badge

            Re: WTF!?

            What's wrong with a nested loop? How else do you do multiple loops?

  4. Anonymous Coward
    Anonymous Coward

    "10 GOTO 10: 10 GOTO 10: ...."

    You're going to have to explain that one to this non BBC B owner I'm afraid.

    1. Peter Gathercole Silver badge

      As a BBC owner...

      I must admit that I'm a bit puzzled as well.

      This appears to be creating line 10, which contains the code "GOTO 10", and doing it repeatedly on a single line (the line parser allows multiple basic statements on a single line, separated by colons, and I think it also worked when entering lines of code).

      It looks weird, so I think that if it's doing something unusual, there must be a bug somewhere. I don't remember any sort of bug like this in the BEEB, but then again, I didn't do anything like this.

      Alternatively, he might be using the arrows and copy key, recursively copying the characters from the line until the maximum line length was reached, at which time the BEEB would sit there beeping at you for as many copy keystrokes as were buffered in the keyboard buffer. But that would not be white noise, which would not actually be that disruptive in a shop, even if it were at maximum volume.

      The sort of stupid things that people did were to reprogram F10 (the break key) to contain "OLD:RUN", so that it was more difficult to stop (especially if ESC was also trapped). [CTRL-Break got it back].

      My favourite was on a ZX81, writing about a 4 byte machine code program in a REM statement in the first line of the program (and thus a fixed address) that put a value in the Z80 I register (which was used to contain the high-byte of the address of the character generator table), which led to the screen becoming scrambled. You could tell something was there, everything worked OK, except that you could not read any of the characters,

      1. Anonymous Coward
        Anonymous Coward

        Re: As a BBC owner...

        "My favourite was on a ZX81, writing about a 4 byte machine code program in a REM statement in the first line of the program"

        There was a couple of pokes and a USR call you could do with the early ZX81s whereby it would crash but the crash would involve it playing random notes through the TV speaker and rubbish on screen. As crashes go it was pretty impressive. It also made me realise that it could actually generate sound through the TV so why didn't they implement it?

        On later versions of the ROM (or actual hardware?) this didn't work however which was a shame.

        1. This post has been deleted by its author

          1. Anonymous Coward
            Anonymous Coward

            Re: As a BBC owner...

            "probably an artifact of your particular TV reacting to a non-standard video signal during the crash."

            Quite possibly. But the TV never did it on anything else. I'm wondering if somehow the video modulator was over modulated which pushed part of the video signal into the audio band and caused it that way.

            1. Peter Gathercole Silver badge

              Re: As a BBC owner...

              There was nothing particularly cheap about the modulator (well, actually it was probably the cheapest Sinclair could source, but it was the same as fitted in any number of other home computers), but it was not unusual for audio crosstalk in any of the machines of this generation, especially when displaying 'busy' pictures on cheap black and white televisions.

              I bought an add-on (effectively a second modulator) which remodulated the signal to include sound, which I fed from a Quicksilver sound board (it has an AY-3-8910), controlled by a number of memory-mapped locations. I used it, along with a programmable character set mod (remember what I said about the I register) to get mine to display and play music. Unfortunately, in slow mode, ZX Basic was more than a bit slow, so there was an appreciable delay in displaying the notes and them playing. But it kept me occupied on dark nights back in 1981 while I waited for my BBC Micro to arrive.

              1. This post has been deleted by its author

                1. Peter Gathercole Silver badge

                  Re: As a BBC owner...

                  That's interesting. I knew about the data bus isolation resistors, but did not know what their real function was. I assumed that the Z80 was effectively idling or halted during the display cycle, and also that the ULA was driving the data bus address lines, but what you say makes a lot of sense, and would make the ULA much less complex.

                  Presumably at the beginning of every display frame or line, there was some form of context save so that the Z80 could resume where it left off after taking an excursion to walk through the display memory addresses.

                  I'm still a bit puzzled, though. The ZX81 display file was not bit-mapped, so it would have to read each character position 8 times (one for each row of the character), one for each of the 8 horizontal scan lines, so what was being addressed was the index into the character generator table, with an offset to get the correct line. The display hardware would then have to look up the line in the CG table to get the 8 bits to serialise out to the modulator. I suppose the ULA may have been able to buffer 32 characters and serialise them. I'll probably never know!

                  For any of you who didn't understand the bit of halting at the end of the line, when the ZX81 did not have a RAM pack, it used a collapsed display 'file' (this is what it was called) that only contained the characters that had been written on the screen. Any trailing whitespace (well, trailing unwritten character locations really) on a line did not have memory allocated, so the actual display could be held in as few as 25 bytes if there was nothing on the screen.

                  In this case, each line of characters on the display would be empty, with just the "end of line" character that Mr Coder mentions. As the cursor was always one character, at least one of the last two lines normally had a single character, leading to the 25 bytes (23 empty lines with just the EOL character, and one with a single character and the EOL character.

                  It was amusing to see a ZX81 without a RAM pack struggle to reorganise memory every time you added to the display.

                  Of course, with a RAM pack, the display file was always it's full size.

                  1. This post has been deleted by its author

                  2. ThomH

                    Re: As a BBC owner...

                    Only two years late...

                    The Z80's most primitive operations take four clock cycles to complete. The first two cycles fetch the opcode. The second two are the refresh cycle — the Z80 can refresh dynamic memory for you, and does it then.

                    So when the ZX80 and ZX81 are walking through display memory, the video output gets two memory accesses for each instruction, not one. It grabs the opcode during the first two cycles and (normally*) supplies a NOP to the processor. Then during the refresh cycle it puts the captured value back onto the bus along with an internal 3-bit counter to fetch the actual pixel byte. Then it outputs that.

                    There is only a one-byte latch, to preserve the character from the opcode fetch and reproduce it as part of the address during the refresh cycle. No 32-byte buffer. And the top part of the refresh address is unchanged during the refresh cycle. So that's how you can change the character set lookup location.

                    Both the ZX80 and ZX81 use static RAM. So they don't need a working refresh cycle.

                    * unless bit six is set. That ensures HALT gets through. It also explains why the ZX80 and ZX81 have only 64 characters in their character set.

          2. matthewdjb

            Re: As a BBC owner...

            By switching between FAST mode and SLOW modes in different combinations you could generate tones through the TV speaker, as noted here: http://forums.theregister.co.uk/forum/2/2011/03/04/sinclair_zx81_anniversary/#c_1003189

  5. Anonymous Coward
    Anonymous Coward

    I don't get the point of this thing

    Why not just buy an old speccy off ebay or gumtree rather than this hobbled effort? Or if they really must remake a 30 year old computer then why not do it properly and include a proper keyboard so at least people could use it properly? The novelty of playing the games on this will last about 5 minutes at a push I reckon and they won't even be as good as those all in one multigame joysticks that were popular for about 10 minutes 10 years ago.

    I just don't see the point - what am I missing here?

    1. This post has been deleted by its author

      1. Anonymous Coward
        Anonymous Coward

        Re: I don't get the point of this thing

        "If the keyboard is in the released product is authentic to the original, expect a lot of frustrated people. I did use the real machines back in the era, and I'm sorry to tell you, but they were really frustrating and a pain in the arse."

        Well yes, but you could say the same about classic cars. Authenticity trumps usability since if you want the latter just buy a modern car/computer.

      2. Haku

        Re: I don't get the point of this thing

        "The chances of getting a fully working one that stays working now is, err, somewhat low."

        Oh ye of little faith.

        My Speccy +2 still works perfectly fine, with the built-in tape deck it means no farting around with volume / tone levels either.

        But when I want a bit of nostalgia without digging the +2 out, connecting it to a screen and waiting for the tapes to load I have Marvin, it fits in my pocket, along with my Zeemote Bluetooth joystick :)

    2. DropBear
      Happy

      Re: I don't get the point of this thing

      Right - that's not how you retro-game with style! The proper way is digging up an actual Speccy then jacking the tape input to your smartphone's headphone output and have it play back whatever you want to load at crystal crisp quality - "tape loading error" is not invited to the party...

      1. Simon Harris

        Re: I don't get the point of this thing

        "tape loading error" is not invited to the party...

        Has anyone here tried loading cassettes from 30 years ago? Just wondering if I fire up my old computer whether the print-through from having all the tapes in storage since the 1980s will have rendered them unreadable.

        1. Mage Silver badge

          30 year old tapes

          It depends on the binder used on the oxide and the storage conditions. In the pre-cassette Reel to Reel era they produced a rubbish formulation. Earlier and later tapes are OK.

          With actual computer "tape backups", some tapes of entry level floppy interface drives could be unreadable a week later, or other tapes could be OK years later depending on maintenance of drive, atmosphere at the computer, make of tape and the tape storage.

        2. This post has been deleted by its author

    3. P. Lee

      Re: I don't get the point of this thing

      I occasionally fire up my Apple ][+ emulator.

      The problem is that the screen is so very small, or so very horrible when large. I'd love to see some of the games remastered for high-res. Someone re-created choplifter for the mac with fancy graphics and scenery. It was ok, but I'm thinking keep the same look, just smooth out the graphics - 320x240 just looks horrible these days.

      It does appear that gameplay hasn't changed much in 30 years. I saw "crossy-road" recently... why can't they just call it Frogger 2015? If you thought 1980's joysticks were rubbish, wait til you try using a touch-screen...

    4. Anonymous Coward
      Anonymous Coward

      Re: I don't get the point of this thing

      Probably because the "Elite" Bluetooth Keyboard has the official approval from Sky/Amstrad/Sinclair and they couldn't? I had heard it was possible to connect the two together. I don't know if this is true.

  6. Rob Crawford

    Rights holders

    Needless to say the list of games published in the Times at the weekend has several games which they do not have the rights to distribute.

    Basically the letters to the rights holders where told, contact us if you DON'T want us to use your software to make money (without paying you).

    Which is annoying (to say the least)

    1. This post has been deleted by its author

      1. Tromos

        Re: Rights holders @1980s_coder

        I was always under the impression that the whole point of shareware was that it was distributed free of charge. It was up to the author to include (within the software or as a separate file) a request for payment if you liked the software and intended to use it beyond some reasonable trial period.

        1. This post has been deleted by its author

  7. Haku
    FAIL

    "The builder has created a viral cat video too."

    I would hardly call a video that has gained less than a couple of thousand views "viral".

    1. Anonymous Coward
      Anonymous Coward

      Re: "The builder has created a viral cat video too."

      I would hardly call a video that has gained less than a couple of thousand views "viral".

      You'll never get a job at the Daily Mail or Evening Standard then.

      1. Haku
        Thumb Up

        Re: "The builder has created a viral cat video too."

        Thanks Anon! Best news I've heard all day!

    2. Just Enough
      Unhappy

      Re: "The builder has created a viral cat video too."

      I don't know. I watched it and already feel like I'm coming down with something.

  8. /dev/null
    WTF?

    Those keys...

    Still trying to think of ANY Spectrum game that could be played with just the keys 1, 2, F, R and S...

    I mean, you need J and P just to type LOAD "" for a start (hence the name of the original DOS-based ZX Spectrum simulator, "JPP").

    1. Phil55494

      Re: Those keys...

      QAOPM

      The only keys you needed for single player arcade type games

      Unless you were playing Daley Thompson's Decathlon which it was M & N that got a real hammering from memory.

      1. Wilseus

        Re: Those keys...

        Ironically, most games on the BBC and Electron used ZX"/ as left, right, up and down.

    2. Anonymous Coward
      Anonymous Coward

      Re: Those keys...

      Why they're not simply 1/2/A/B or something I don't know, but the controls are re-mapped for each game. And there are four more buttons added to the controller now, for games that need it.

  9. Anonymous Coward
    Anonymous Coward

    The computer that set me up for life

    Playing with the Speccy as a kid - bit of BASIC and machine code, building hardware connected to the expansion bus controlled by software, adding the Snapshot plus real 3.5" drive for instant game backup and loading, a hardware voice synth for use with the Chess game. EPIC times. All of this led me to a degree course and a very happy life in IT.

POST COMMENT House rules

Not a member of The Register? Create a new account here.

  • Enter your comment

  • Add an icon

Anonymous cowards cannot choose their icon