Jump to content

- - - - -

Cheat Table in CPC amstrad version of JSW2


  • Please log in to reply
15 replies to this topic

#1 Norman Sword

Norman Sword

    Advanced Member

  • Member
  • PipPipPip
  • 239 posts

Posted 19 January 2019 - 02:51 PM

The original version of Jet set Willy written for the Amstrad, and was subtitled "the final frontier". It was only at a later date that this was reduced back into Jet Set Willy. (e.g. removal of around 77 rooms from the 137 rooms. And the reduction to the mere 60 of the original) The reason for the re-write was that is was going to be included in a compilation tape, and the original 60 room (short version) was deemed to be more in line with the original spectrum version.

The original Amstrad version was undertaken on a 464 and at that time the 664 and all the subsequent versions were not known about.

Weeks (perhaps days)  before the release of the Amstrad version of JET SET WILLY the 664 was released. A version of the 664 was obtained and the game was checked to see if it would run. It was found that Amstrad had moved the location of data concerning the keyboard. This change made the keyboard inoperative from a games perspective. This was easily solved by modifications to the games code made from basic. This is the reason that the question is asked before the game is run.    

The above is the time frame of the game game in relation to its release onto the market. The point of interest is the statement that the 664 was not available at the time of writing the game. This shows that discs and disc drives were not considered in the games writing.

*** The above (two paragraphs) was edited to be crossed out. The reason it was crossed out was the assumption I was incorrectly thinking about Manic Miner. Since then I have loaded the game and it does indeed ask for the machine type. 

The game, loads from tape and the tape version (original) has a full cheat code and cheat routine built into the game. When a disc drive is added to the operating system, The disc drive is allocated a chunk of memory just for disc operation. The allocation of the disc drives and the memory allocation of the game clash. The memory allocation that is overwritten by the disc drives and the disc routines (especially the loading from disc) is crucial to the cheat code and the way it works.

Unfortunately the memory overwritten seems to have no effect on the game. So every copy since the original tape version seems to work fine with the data missing. However the very extensive cheat code relies on the missing data, and it seems that for many the cheat code was a mystery, and therefore it's omission was not noticed.

The cheat data is a small table of values (around 150), whose purpose is to index into the data from the cartography room. Since this data is ommited from all disc and subsequent versions, when the cheat is invoked the translation from a position on the cartography room map into a real room number does not happen. This makes invoking of the cheat pointless. ( another reason most people do not know of its existence- once cheat is invoked, it does not seem to do anything worth having)

Anyone familiar with the Tandy and its operating system will be aware that a similar problem was occurring on that machine. Through its evolution and need to be backward compatible, the machine also needed to allow programs to load via tape, and run. But be able to load the same programs from Disc. The conflict in memory was overcome by the simple addition of another routine to the games loading routine. This routine would load the game into memory that was NOT occupied by the disc system. Once the game had loaded it would, shut the disc system down and then move the game into the area used by the disc system and then run the game.

The game Jet Set Willy could be fixed in a similar way. In this case it does not need the whole game moving, It needs just the data from the area that is missing from all the games since the original. 

If the game is loaded (as normal) from disc, and at the point of normally entering the machine code from basic, we instead load the missing data to the screen. The missing data around 150 bytes can have a very simple LDIR routine appended. The procedure then is to run the code and move the data over the area used by the disc operating routines and directly enter the game. The area overwritten by the LDIR copy will be corrupted by the game anyway, and doing this will have no impact on the machine. But it will fix the cheat. Loading such a small amount of data should be so rapid that it would hardly noticeable. 

In JSW Amstrad the cheat code is Invoked by typing   hiemmraidnaprrrtt. This will bring up the cartography room and from there you can select a room. Then you can select a position to start the room.

The finer details of the cheat invocation and usage are not listed here. It is such a long time since I have looked at the CPC Amstrad version, I can not even remember what exactly is done to invoke cheat, (it might be pressing the break key)   

It is a shame no has looked into doing this. At present I do not have the CPC set up and Emulated. (deleted many years ago) and the set up. emulation , modification, save etc needed to do this modification is not something I plan on doing.  


Edited by Norman Sword, 23 January 2019 - 10:51 AM.

#2 Spider


    DEC (HL)

  • Administrator
  • 3,996 posts

Posted 20 January 2019 - 09:45 AM

Thanks Norman.


I was vaguely aware of this erm 'feature' in that version, but not the actual specifics of it other than a comment 'back then' I think that third party authors had gone to the trouble of writing teleporter type code when something already existed***


I was aware of the fact it started as 'Final Frontier' rather than 'JSW' and then was ported across to the Spectrum. Indeed there is no such thing (afaik) as an Amstrad *tape* version of JSW, rather than 'Final Frontier' , I managed to build one actually in the downloads here but that's another story in itself.


Regarding the model difference, this also explains why some variants ask if you're using a 464 or not. I am aware earlier (first release) of Manic Miner had a bug / concern in it too if it was loaded on a 6128 (not tried on the 664) although it loaded up fine M.W would constantly jump. Later releases did not have this, as far as I can tell all Amsoft releases of MM are 'all version' and its about a 50/50 on the SoftwareProjects release being OK or not. The manual fix is not complicated though just two pokes if I recall correctly. I may have them somewhere.



*** This is slightly related to TechTed MegaMix as that has a well hidden built in Teleporter too although again afaik no 'poke authors' back then noted it and wrote their own. The built in one in this is quite crude but it did work with care, it was certainly adequate for its purpose during game development I expect.


EDIT... I have the original tapes: JSW-FF and later re-released JSW-FF versions here , V1 requires keypad code entry whereas V2 does not, this actually mirrors in a way the re-release of JSW2 (aka FF) on the Spectrum as the re-release versions did not ask for a keycode either. There are a few more details in the link I provided, along with the rather large code sheet too.

Edited by Spider, 20 January 2019 - 09:53 AM.

Changing order to chaos since 1984

#3 Norman Sword

Norman Sword

    Advanced Member

  • Member
  • PipPipPip
  • 239 posts

Posted 21 January 2019 - 10:51 AM

The versions of Jet set Willy available. (CPC Amstrad) 

S.Wetherill left Software Projects just after completion of writing the game, D.P.Rowson stayed on at Software Projects long enough to reduce the game to 60 rooms for the "they sold a million" compilations.

The MASTER GAME tapes used at software projects were not just copies of the game, they were versions of the game that saved the game. For both Manic Miner and Jet Set Willy on the Amstrad, a version of the game was provided that saved itself, or more specifically the game from within its data. The MASTER GAME version was used by the duplicators to generate a clean copy of the game to duplicate.

The above MASTER GAME tape version  is used every time a new batch of tapes is duplicated.

Since D.P.Rowson and S.Wetherill had left Software projects the creation of any new MASTER GAME tapes (the one that saves itself) is a problem. The programmers that created the originals have left the firm.

So any decisions from that point onward, that forces a need to change how the game works or its environment, creates a need for the creation of a new MASTER GAME tape, or if the media is changed the creation of a MASTER GAME disc

Looking at the versions that have been released by Software Projects we are presented with slight changes in how the game loads. These changes can only be achieved by creating a new MASTER GAME tape or disc. 

Problems created by the master tape - I assume software projects decided at some stage to release the game via the budget software labels, or it was decided to put the game on disc or perhaps just remove the colour code entry part.  What ever the reason this decision involves the creation of a new MASTER GAME tape or disc. The problems presented to anyone who has tried to copy or break into the original game are now presented to the actual software house who want to do a re-release, any change needs to have a new MASTER GAME available. So someone is tasked with hacking into the game and changing it. I would assume that since the colour code entry part and the part that scrambles the data are the same. It was necessary to invoke that code and unscramble the game. Thus removing the protection and the code entry part. The person who managed to remove the protection (possibly) also casually removed the cheat code table. The in house hacker is perhaps not aware of its existence and so its removal seems to do no harm. (assumption) Without reloading all the various versions I believe that any commercial version that does not have the code input question are derived from the in-house hacked version. The programmer who created the new MASTER GAME version had (possibly) destroyed the cheat table. From that point onwards it becomes easy to save the game to disc minus the code input. While I had an emulator for the CPC running, I could not find a version that allowed the full usage of the cheat code. And that is the basis of this assumption. 

The cheat code has two variations. The first as mentioned EMMRAIDNAPRRRTT and the second is the same code with the addition of the letters HI before it. This by logic must be the cheat code for the 60 room version of JSW on the Amstrad, and this means the 60 room version has the cartography room in it. The cheat code was extended for the other version of JSW, and I only know of two versions on the Amstrad CPC 

Is the cheat table intact on the 60 room version ? Far less memory used and thus far easier to put on disc or re duplicate with the data intact. This version was not checked. 



The above is concerned with versions that were commercially sold, on top of that we have the versions that are hacked versions of the commercial versions. These could have the cheat code only if hacked from the original tape (I did not find any when I was looking)


The above is fragmented, just like a badly fragmented hard disc. So very difficult to discus a topic, when it is possible a sentence contains snippet of information that is open to misinterpretation or its details are unknown to the reader. 


Edited to be hopefully clearer.





Edited by Norman Sword, 31 January 2019 - 10:43 AM.

#4 Spider


    DEC (HL)

  • Administrator
  • 3,996 posts

Posted 22 January 2019 - 05:34 PM

Thanks Norman. What you say does make sense.


The Spectrum version (I'm not really familiar enough with the Amstrad hardware to be able to make many sensible comments unfortunately, although I do have a real CPC464 here now)


ZX: The original loader is an 'all in one' as you are aware, that being it starts at the screen memory and runs almost all the way to the end. There is a small JP instruction in the code in the Basic itself once its called the loader however this value is never used as the 'call the rom loader' code is overwritten with zero's during the initial loading. Without looking in detail it would be a reasonable guess once the loader has finished and executed a RET it will return to a value. I do note an EX 'AF in the actual 'loader code' and the call to the loader is not at the usual address and its a JP as well. I need to put a breakpoint into the ROM loader to stop it when its finished actually loading all the code in to see where it is really trying to go to.


Sidenote: Actually Turmoil (Bug Byte) also did this slight 'trick' too. Anyway back on topic:


The 're-release' versions are slightly different, I think J.E mentioned to me they were really loading a 'snapshot' as such rather than the whole original code perhaps. Certainly the loader itself is in three code sections although the header load addresses are incorrect as the Basic loads them elsewhere. The last section of 2048 bytes is loaded into the screen memory, which is then USR'ed into.



I'm not sure on the '60 room' version for the Amstrad having the Cartography Room although it would make quite logical sense to do this actually, even if it was only ever visible via the cheat code in this case.


I should mention regarding tape Amstrad versions, as far as I can tell there were tape and disk versions of JSW2/Final Frontier however there was never a 'stand alone' release of JSW1 on tape for the Amstrad, the version I have here I carefully extracted from the compilation you mention. This is SpeedLock protected which is a subject in itself actually. It is very likely indeed this SPL version would not have the cheat code given the way they are 'built and saved' at least going from memory on how early Spectrum Speedlocks were created.


It may be easier to look at JSW1 Amstrad tape or disk file via a hexeditor or similar as the room names are visible usually and see if there are any erm 'signs' of the cheat room, certainly searching for part of a text string would be initially quicker.


My thought here is if any research is done on JSW1 Amstrad it would be best to do this on the disk release not the tape re-release given the loader type. I do not know exactly how this was done on the Amstrad however given the actual loader code is near identical complete with clicking leader tones, I would suspect it is built in a similar way. Early SPL on the ZX were usually where space permitted 'built' from Basic in that the game code would be loaded into a lower address than intended, the appropriate saver code changed so it "knew" what was meant to be where then it was loaded (via microdrive) and the 'loader and code' would be saved out, unfortunately it never intentionally saved itself. You may note on most SPL1 and some SPL2 loaders once its actually done any decryption and finished loading one of the first instructions is an LDIR to actually put the 'game code' where it should be.



Last quick comment, if you would like me to post up some comments / images of the ZX versions for comparison with the loader types I can do this later, although a hexed or similar text search with an original JSW1 Amstrad release would be a quick initial check.


As time permits later during the week itself, I will go through my 'collection' to see what I actually have although it is likely only the disk based AMS JSW1 would of likely retained the Cartography room.

Changing order to chaos since 1984

#5 Spider


    DEC (HL)

  • Administrator
  • 3,996 posts

Posted 22 January 2019 - 05:58 PM

What I have, I'm excluding 'trained' or otherwise modified (or what I *know* to be modified) versions for the Amstrad:


JSW1 disk - Does not appear to be protected (no keypad) although I think this was actually normal for JSW1 Amstrad. No immediate sign of the Cartography Room


JSW1 tape - Only existed as part of the T.S.A.M compilation. Speedlock Protected rather than a standard AMS loader. No keypad again. I did actually rebuild this with some cheats and retained the loader but that's another story.



JSW2 tapes - V1 and V2. V1 being the original SoftwareProjects release and V2 being the Budget Re-Release. The latter does not ask for a keypad code, the former does. The latter also asks if one is using a 464 or not to no doubt correct the 'issue' otherwise seen. Both use a standard AMS type loader. These are both in the link I posted in my reply in post two.


JSW disk - There is afaik only one 'unaltered' image. This asks if you're using a 464 and has no keypad option.



To compound matters a little bit more I have a Mastertronic/M.A.D tape here, this is a 'dual format' one in that it has Spectrum one side and Amstrad the other, both are Final Frontier aka JSW2, but I know the ZX version on this is the 'three file' version. I'd have to find time at this upcoming weekend to try the tape out on real hardware to see which actual erm 'version' the Amstrad side of the tape is.


EDIT... The pic below shows what I belive to be original release tapes/disks, anything with any sign of tampering or otherwise (its not difficult to spot in most cases given they way they tend to 'sign' them) was excluded:



Edited by Spider, 22 January 2019 - 06:23 PM.

Changing order to chaos since 1984

#6 Norman Sword

Norman Sword

    Advanced Member

  • Member
  • PipPipPip
  • 239 posts

Posted 23 January 2019 - 11:24 AM

I delved briefly into the Amstrad world again. Just not welcoming enough to pursue further.

As shown I managed to get as far as invoking the cheat. To progress further I needed to move the cursor etc. This did not happen. Every time I ran the program on this particular emulator, it managed to place the interrupts in the wrong place (hence the yellow band across the screen)  

Five emulators later and several versions of JSW tried, I lost interest. The emulators and their presentation/interface does not inspire any interest to me. I will stick with an emulated spectrum.

The cartography room on the small 60 room version- Does not need to have the room name in memory, only the data for the rooms.  I would expect the data to be just tagged onto the end of the 60 rooms. On examining that area on the emulated Amstrad , all I found was a message saying "What's this then".....

Typing in the cheat on the 60 room version has no effect.

Derrick has stated that only two tape versions of JSW exist (master taped by him) and any other version was not mastered by him and must be an edited version- (scope of editing being how the game loads)

And I myself will not be looking any further into this.



Attached Thumbnails

  • 0001_1.jpg

Edited by Norman Sword, 31 January 2019 - 10:45 AM.

#7 Spider


    DEC (HL)

  • Administrator
  • 3,996 posts

Posted 23 January 2019 - 12:27 PM

Thanks Norman.


I've had that band effect too its more likely it seems in Manic Miner where the lower third can turn a shade of pink for some reason. WinApe is about the most sensible AMS one to use followed by CPE95 (it works OK on 64bit Windows7 at least) , the latter has much much better tape control if you're into your loaders etc.


In regard to your comment about only two tape versions exist, did you mean for the Amstrad platform ? If so that is correct then as there is the V1 and V2 , the tape re-release was completely remastered to use Speedlock so it is very likely any cheat version that did exist on that no longer does.


I'll try to find time to look into this a little bit more (the cheat on the Amstrad) in the coming few days however. :)


EDIT... Just this week my 'free online time' is extremely limited.

Edited by Spider, 23 January 2019 - 12:33 PM.

Changing order to chaos since 1984

#8 Spider


    DEC (HL)

  • Administrator
  • 3,996 posts

Posted 23 January 2019 - 12:36 PM

I wonder if one way of doing this might be to alter the starting room to 60 / #3C perhaps. I'd have to find it in the code first mind you although that should not be that difficult given the general similarities between the two versions. My handicap here is I know very little about the AMS 'generally'

Changing order to chaos since 1984

#9 Norman Sword

Norman Sword

    Advanced Member

  • Member
  • PipPipPip
  • 239 posts

Posted 23 January 2019 - 11:29 PM

The whole scope of this topic is the missing Cheat code table on the CPC Amstrad.


Information direct from Derrick.

The conversion from CPC Amstrad back to the spectrum, involved a game redesign. The CPC has an interrupt set for every 300th of a second. These are arranged to occur on frame flyback and five others per frame. This enables the screen to be recoloured on every screen frame. The top part of the screen has one set of four colours, and the lower part of the frame has another set of four colours. The interrupt is supposed to occur as the raster passes over the screen in the area of the room name. So the room name area has two colours that are common to both the upper part of the screen and the lower part of the screen. This enables the game to have six colours in some rooms. (in 4 colour mode)

The game uses xor on and xor off. One of the advantages of this method is that it is fast, another advantage is that the Amstrad game does not then need to have any copy screens.  This means that the sprite is erased on the visible screen and for a moment it is possible to see the difference between the new and old sprite. Think about the spectrum and the way It was pointed out the jagged finger effect. The visual affect of xor ing off a sprite and xor ing on a new sprite makes that effect look tame. You end up with a very visible jerking or tearing on the large sprites. The worst offender is the three sprites joined together to make the large skull. Drawing that looked a mess. What would normally happen in this type of update, would be the game waits for a specific interrupt and then tries to beat the raster before it overtakes the drawing routine. Instead of possibly waiting nearly a whole frame for a specific interrupt, Derrick decided to uses the interrupts as a screen position indicator. Then only wait then, if the raster would overtake the sprite while it was being xor'd on and xor'd off. A very slight change but a dramatic change in the visuals.

The point of part explaining the XOR on,  XOR off problem. Is to partially explain why that could not happen on a rewrite from the Amstrad back to the spectrum. The spectrum needed to have a copy screen to stop the problems of screen updates. A copy screen uses a big chunk of Ram, and this game was being converted from a 64k amstrad to a 48k spectrum. All un-needed code was immediately deleted. The first deletion was all the cheat code.

The 2nd problem of moving from the CPC to the spectrum was collision detection. The CPC has pixels with colour. This is changed to the spectrum having pixels that are coloured via an attribute overlay. The CPC used the colour of each pixel for its collision detection. In essence a white pixel under a sprite indicates a collision. The spectrum has to use a whole new logic to detect a collision. And that new logic made a need for a copy screen to be implemented

Collision detection moved from sprite drawing on the cpc, to sprite collision based only on Willy on the spectrum. This was a major change in collision detection. 


So any time I mention cheat code on an original from the CPC or the cheat code in JSW2 . You can immediately assume I am not including any spectrum version of JSW2. 

So only two tape versions written for the CPC. And only one tape version written for the spectrum.

Any spectrum version that does not include the colour code input question is also a hack of the original, in the same manor as the hacks generated for the Amstrad versions. But in the spectrums case, there was no mysterious data to worry about.



Edited by Norman Sword, 24 January 2019 - 12:22 AM.

#10 Spider


    DEC (HL)

  • Administrator
  • 3,996 posts

Posted 24 January 2019 - 03:28 PM

The SPL tape variant of JSW1 Amstrad on the T.S.A.M compilation does contain the "WHATS THIS THEN" text. That area appears identical to the 'correct' (so I am 99% sure) original disk based release of this title too.


Regarding any cheat string, well the only ones I can immediately see assuming they are not obfuscated are:





I've not yet had chance to look into the above any more as of yet.



Regarding the ZX version of JSW2, as previous the loader code is slightly not what you would expect given its call to ROM loader (at not exactly the usual start location of said code) To cut a long story short a suitable breakpoint at 1506 enabled me to catch it at the RET of each 'chunk' of data (three: 1xHeader / 1xBasic data / 1xGame data) to see where it really was going to go to, as the loader if you look at it suggests


whereas once it has loaded all the code in and then executes the RET it returns to 24317:


24317 DI

24321 LD SP , 24320

24324 JP 24384


The actual loader code in the Basic however says this (but the above is correct as its overwritten)




OUT (254) , A

LD HL 22528

LD DE 22529

LD BC 800

LD (HL) , A


^ Clear the screen to black etc no need to explain that

LD SP 63796 , put the stack up the top end out the way




LD IX,16384

LD DE, 47416

CALL 1378 (really this should usually read 1366) call the loader with in effect a LOAD "" CODE 16384,47416

JP NC,0 , reset if there was a loading error (if carry flag is set then something was amiss with the load)

JP 36846 , except this never gets executed

Changing order to chaos since 1984

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users