OK, I worked out how browse my (short) private message history, the post I mentioned was to "Paul" who created the brilliant "against the elements" and "celebration" ZX81 demos, partly based on my own display routine (and kindly mentioned on his site)
http://www.fruitcake.plus.com/Sinclair/ ... ration.htm
I think it's good if the the correct history of even an obscure game for a very old home computer is in the public domain, so I will repost this here.
====================================================================
Hi Paul,
thanks for your many comments and questions, I can only recall things from memory now, all the way back in 1982/1983, when I was a 15-year old studying for O-levels (in fact we were either the last or penultimate year of 'O'-levels before they switched to GCSEs).
I was one of five children growing up in a working-class family (my dad was a self-employed builder, my mum a housewife) in North London, but was very good academically getting many As and eventually going on to University two years later (out of the five of us only my older brother also did A-levels but didn't go on to University). Since my other brothers and sisters were out with friends all time I had space at home to become obsessed with digital electronics especially Casio watches and calculators. I could bare afford anything though, only earning about £5 a week from a paper-round job, so when I did make a purchase I would obsess over it for months. I remember having small 32 byte math routines published in a monthly computing magazine with a calculator section for likes of the Casio FX-180p.
After dozens of submissions I received a letter saying they weren't going to be covering calculators so much and could I stop sending in so much code! I was a bit upset at the time, but decided I needed to get a "proper" computer. I would spend hours looking through the pages of the computer magazines dreaming of getting something like a Commodore PET which some of my schoolfriends had, but I knew a ZX81 was the only realistic option. The price had come down to £69.99 for the fully built model, and that meant at least 14 weeks of savings for me. I think it took me about five months in the end, but I managed to get my hands on one, and amazingly my dad had managed to get a deal on two mini black and white tvs which he gave to my older brother and me (so we could watch our own tv programmes upstairs). So it was really the most thrilling day of my life coming home on the bus and unpacking the ZX81 and plugging it into MY OWN TV.
From that moment on, I obsessed over the little computer (so much so I nearly failed some of my mock exams that winter) and managed to get a 16k Ram pack off a friend for cheap (£10 I think). Our local public library had quite a good computer section since it was very popular at the time, and I borrowed "Mastering Machine Code on Your ZX81" by Toni Baker (formerly Tony Baker in the early editions I later discovered), and pretty much did master that in a few weeks (just loved scrolling big black rectangles really fast all over the screen, and even wrote a rubbish Pac-Man clone)
However, I was amazed at adverts appearing in the magazines for "HI-RES on the ZX81", and I was determined to understand how that was possible. I just read something about a "custom display routine" replacing the one in ROM, and after quite a lot of effort found Dr Ian Logan's book with the ROM Disassembly. This was only available by mail order, even though I pleaded with my library to order it. It was quite expensive at the time for me, so i really treasured it when it arrived, especially the description of the display routine on the first few pages.
I initially played with just copying the same routine into ram and experimenting with altering code to see what happened, one of the first things I discovered was that TIMING was crucial, so if you replaced any of the instructions, you had to take up exactly the same number of cpu cycles (this is why Z-Xtricator routine has seemingly meaningless instructions which are not NOPs but achieve nothing apart from a delay (which I couldn't exactly match with NOPs)).
After much experimenting I eventually found I could use IM2 in a neat way to enable each of the eight lines for a character, on a particular scan line, to come from ANY OTHER character in the charset, this really is much more limited than true UDGs of course but allows some neat effects straight away, like the fast scrolling mountain landscape, which of course had never been seen on a ZX81 before.
Now I didn't really know much about the ULA and how it was used in creating the display, I just knew that this small display routine enabled you to control the display output. So I had no idea why I couldn't point to an area in RAM for the user-defined graphics, but just found it didn't work (Eventually my brother helped my solder a 1K SRAM chip under the keyboard which did allow this, but rather butchered the poor machine lol)
So slightly frustrated I accepted that I was stuck with ROM patterns only, and after experimenting with random areas I really thought the standard charset was by far the most useful for my initial purposes - especially since using different lines from the graphics chars enables "hi-res" diagonal lines, and I also could display all the usual characters like letters and numbers as well.
I had become aware of the Software Farm through their adverts, screenshots and reviews, and decided they were the company to contact about publishing a game (I wanted to deal with someone reputable after I had failed to get my rubbish Pac-Man game published previously and got hung-up on the phone after telling a company from Manchester I didn't own the copyright (don't remember the name))
And this is where it all goes a bit wrong...
I REALLY RUSHED making a Defender like clone, I was so impressed with the little characters on the screen and amazing scrolling hi-res landscape that I didn't bother with gameplay, just setting two fixed patterns for the aliens and increasing the (already too difficult) difficulty by adding one alien each level. Now I assumed this amazing company would be impressed enough to give my advice on how to improve the game or suggest other companies that might be interested. So I was quite amazed when just over a week later I received a letter from Software Farm (Julian Chappell's name was definitely on some letters but also a woman whose name I don't recall) full of great praise especially since my hi-res routine "used far less memory" (and as I have pointed out it is only recently I understood what they meant by that - my routine only needed the standard 32x24 display file not the larger 6K 192x24 file) and that a group of schoolkids who tried the game out found it quite good fun (I wonder if they ever really did try it out on a group of schoolkids lol)
But the only "improvements" they asked for was adding a screen to choose which keys are used for controls (good) and adding in a huge loading screen with the cosmic cockerel (bad). This later demand was ridiculous since it took twice as long to load the screen as the actual game, and I had to use their old hi-res routine since my routine didn't enable the cockerel to be displayed the same way - so after several minutes loading that screen, once you press a key the 6K display file and old hi-res routine are dumped and the game switches over to Z-Xtricator and the more economical IM2 routine.
Anyway, they published the game and even sent me a copy (which i no longer have sadly) - the artwork was amazing, the screenshots were cool, shame about the actual game. Things were ok for about 3 months I received 3 monthly cheques for royalties, total just over £600, which I was happy enough with at the time.
And then the letter about the game crashing on a new rom version of the ZX81 appeared, and a rather harsh tone in the letter criticising the game for not being that good anyway, and demanding I immediately fix the code and send a replacement. I did this, but I still feel at the time they were too harsh on me, of course I never received another penny, and was even worried that my royalties would be claimed back due to some comments in the letter about legal issues.
I have always been confused about this ROM error, as I definitely didn't have the early ROM with the arithmetic bug, so I can only assume it was a third Rom which SInclair sneakily snuck out without telling anyone, as has been discovered recently (in a thread I linked to on my forum post). In which case this was such bad luck, yes it was just one ROM address that had changed which caused my game to crash, I don't remember exactly which address, but the fix was just a couple of bytes in the code and I sent a tape off the same day.
So there you go, the sorry tale of Z-Xtricator. I didn't have any contact with any other companies or developers, so have no connection with any of the other pseudo hi-res routines available at the time. I really was pretty isolated and the whole ordeal was not too good for my health to be honest. After creating the game "Bugs" and getting a pretty sympathetic letter from Software Farm this enabled some closure. I never really touched a real ZX81 again for ~40 years, as I got a ZX Spectrum, then an Acorn Electron, an Oric Atmos and while at University, an Acorn Archimedes with some scholarship money.
After a failed attempt at PhD research I started a career in IT at various companies and had no interest in retro computing, until I discovered the emulator scene in recent years.
It was while searching for a Zx81 emulator and images for Z-Xtricator that I found your "Celebration" page, which was a fascinating read and I was amazed at Against the Elements. I suggested an attract mode since it would look so good as a demo - you said there is no memory left, but (for example) you could just play the game for a minute or so, record the keystrokes in sequence and then replace the input routine with a routine to read those bytes in sequence.
I must admit that I tried really hard to get 192 line resolution working, but couldn't manage it, so I was very impressed to see your modified routine manages that, people don't appreciate how good an effect smooth horizontal scrolling of the standard charset is on an unmodified ZX81. I did think about lower-case characters at the time, but never got round to designing a full set, I did enough for Chess Board notation, and got some reasonable looking chess pieces too, but that project never got much further.
Incidentally, the reason Julian's name appears as the author of of Z-Xtricator is (as far as I remember) that I sold the UK copyright to The Software Farm, or something similar - it was probably for legal reason regarding royalties etc. In fact I got a telephone call from a guy in Switzerland a few months after the game was withdrawn from sale in the UK and he offered me £100 for the Swiss Copyright, after a short discussion he had eventually got me down to £50! I received a weird looking postal order a few weeks later for £50 which I had trouble getting my local Post Office to cash (but the Manger eventually relented)) - So there may be ultra-rare versions of the game in Switzerland...
Sorry to have rambled on so long, I haven't spoken about those days in so long, I'm not sure how much is of interest but I agree it is good to get the real history even for minor things. If there's anything I missed or you'd like to know more about feel free to ask.
Kind regards
James (age 55 and suffering in the current heat wave in London!)
"Quaracter"-display, how it actually works.
Re: "Quaracter"-display, how it actually works.
I like this report and wondering what kind of strange peoples there are, especially when it comes to money.
OK, I own an original ZX-81 V3, several clones from Martin ZX81plus38v1.9 and an emulator VB81XUR from France.
Used original ROM 0-8191, then 4 charsets with 200h each until 27FFh...
RAMTOP is set to 32000 and poked with:
32032 3E 20 ld a, 32 ; (32*256=8192)
32034 ED 47 ld i, a
32036 C9 ret
If I call RAND USR 32032, the charset1 should be loaded instead of the original set, or?
I got three different results.
Original show a black screen, the clone show different vertical bars and the EMU show pixeled screen.
Then 32033 changed back to 1Eh and start again with 32032, all three run normal again.
Probably I misunderstand something about charset setting.
Hopefully you can help me on this issue?
Thanks in advance.
OK, I own an original ZX-81 V3, several clones from Martin ZX81plus38v1.9 and an emulator VB81XUR from France.
Used original ROM 0-8191, then 4 charsets with 200h each until 27FFh...
RAMTOP is set to 32000 and poked with:
32032 3E 20 ld a, 32 ; (32*256=8192)
32034 ED 47 ld i, a
32036 C9 ret
If I call RAND USR 32032, the charset1 should be loaded instead of the original set, or?
I got three different results.
Original show a black screen, the clone show different vertical bars and the EMU show pixeled screen.
Then 32033 changed back to 1Eh and start again with 32032, all three run normal again.
Probably I misunderstand something about charset setting.
Hopefully you can help me on this issue?
Thanks in advance.
Re: "Quaracter"-display, how it actually works.
Now it is clear, I forgot to disable the NMI (FAST) and renable after to get the selected charset.
I create a 16k ROM for AT28C256 and placed it into the clone plus38v1.9:
ROM DEC HEX DEC file
0000h 0 00h 0 ZX812004.rom
1E00h 7680 1Eh 30 original
----------------------------------------------------------------
2000h 8192 20h 32 ZX_Set1.chr
2200h 8704 22h 34 ZX_Set2.chr
2400h 9216 24h 36 ZX_Set3.chr
2600h 9728 26h 38 ZX_Set4.chr
2800h 10240 28h 40 ZX_Set5.chr
2A00h 10752 2Ah 42 ZX_Set6.chr
2C00h 11264 2Ch 44 ZX81orig.chr
2E00h 11776 2Eh 46 ChrGen1.chr
3000h 12288 2Eh 48 ChrGen2.chr
3200h 12800 2Eh 50 ChrGen3.chr
3400h 13312 2Eh 52 ChrGen4.chr
3600h 13824 2Eh 56 ChrGen5.chr
3800h 14336 2Eh 58 ChrGen6.chr
3A00h 14848 2Eh 60 ChrGen7.chr
3C00h 15360 2Eh 62 Gothic.chr
3E00h 15872 30h 64 ZEDRAGON.chr
-----------------------------------------------------------------
4000h 16384 32k RAM until 49151
ASM ; ADR HEX ; DEC ;
call FAST ; 16514 CD E7 02 ; 205 231 2 ; NMI disable
ld a, 20h ; 16517 3E 20 ; 62 32 ;(16518) POKE this with above DEC to change the charset
ld i, a ; 16519 ED 47 ; 237 71
call SHOW ; 16521 CD 07 02 ; 205 7 2 ; NMI enable
ret ; 16524 C9 ; 201
Then I wrote the BASIC prog:
1 REM xxxxxxxxxxx
2 FOR A=16514 TO 16524
3 INPUT L
4 POKE A,L
5 PRINT A;"=";L
6 NEXT A
Enter RUN then enter the above DEC values.
Start with RAND USR 16514 and it will work normally.
I create a 16k ROM for AT28C256 and placed it into the clone plus38v1.9:
ROM DEC HEX DEC file
0000h 0 00h 0 ZX812004.rom
1E00h 7680 1Eh 30 original
----------------------------------------------------------------
2000h 8192 20h 32 ZX_Set1.chr
2200h 8704 22h 34 ZX_Set2.chr
2400h 9216 24h 36 ZX_Set3.chr
2600h 9728 26h 38 ZX_Set4.chr
2800h 10240 28h 40 ZX_Set5.chr
2A00h 10752 2Ah 42 ZX_Set6.chr
2C00h 11264 2Ch 44 ZX81orig.chr
2E00h 11776 2Eh 46 ChrGen1.chr
3000h 12288 2Eh 48 ChrGen2.chr
3200h 12800 2Eh 50 ChrGen3.chr
3400h 13312 2Eh 52 ChrGen4.chr
3600h 13824 2Eh 56 ChrGen5.chr
3800h 14336 2Eh 58 ChrGen6.chr
3A00h 14848 2Eh 60 ChrGen7.chr
3C00h 15360 2Eh 62 Gothic.chr
3E00h 15872 30h 64 ZEDRAGON.chr
-----------------------------------------------------------------
4000h 16384 32k RAM until 49151
ASM ; ADR HEX ; DEC ;
call FAST ; 16514 CD E7 02 ; 205 231 2 ; NMI disable
ld a, 20h ; 16517 3E 20 ; 62 32 ;(16518) POKE this with above DEC to change the charset
ld i, a ; 16519 ED 47 ; 237 71
call SHOW ; 16521 CD 07 02 ; 205 7 2 ; NMI enable
ret ; 16524 C9 ; 201
Then I wrote the BASIC prog:
1 REM xxxxxxxxxxx
2 FOR A=16514 TO 16524
3 INPUT L
4 POKE A,L
5 PRINT A;"=";L
6 NEXT A
Enter RUN then enter the above DEC values.
Start with RAND USR 16514 and it will work normally.