Jump to content


Member Since 09 Apr 2015
Offline Last Active Oct 23 2018 09:34 PM

#7966 Pokes for Fixing the Cell Graphics Bug in JSW

Posted by SkoolKid on 19 November 2017 - 01:55 PM

Have you checked whether the Cell-Graphics Bug affects any cavern elements in Manic Miner?


I have, and the answer is no, it doesn't.

#7932 Pokes for Fixing the Cell Graphics Bug in JSW

Posted by SkoolKid on 17 November 2017 - 08:16 PM

Has anyone noticed the instance of the Cell Graphics Bug affecting the Fire cells in 'A Bit of Tree' in the original JSW?


Can't say I have - time to update my JSW disassembly TODO list. :)


By the way, I checked and this is the only instance of a non-conveyor tile being affected by the Cell-Graphics bug.

#6880 Sources

Posted by SkoolKid on 15 August 2017 - 07:26 PM

One advantage of generating an ASM file from the SkoolKit source files is that it retains all the annotations. You can also generate an ASM file that includes several bugfixes:

skool2asm.py -f 2 jsw.skool > jsw-bugfixes.asm

#6878 Sources

Posted by SkoolKid on 15 August 2017 - 05:06 PM

Did you mean it should be possible to generate an as from the skoolkit files?


Yes, you can generate an assembler-friendly ASM file from the SkoolKit source files for MM or JSW. In fact, that's one of the main points of SkoolKit - you can use the same source files to generate both the HTML disassembly and an ASM file.


You will need to download SkoolKit - for which you'll also need Python, version 3.4 or later - and use skool2asm.py to convert jsw.skool into jsw.asm (for example):

skool2asm.py jsw.skool > jsw.asm

I've successfully tested the output of skool2asm.py with pasmo, SjASMPlus and z80asm (the assembler that comes with z88dk), but it might work with other assemblers too.

#5299 The AND instruction

Posted by SkoolKid on 12 November 2016 - 03:01 PM

Is there any good reason (e.g. in terms of the effect on the Flags, perhaps?) why the original game engine uses an XOR command at #91FB, instead of an OR?


It's the instruction which merges a guardian's INK colour and BRIGHT value (Bits 0-2 and 6) with the PAPER colour (Bits 3-5) of its host cells.

No, there's particular reason to use XOR instead of OR here. As you've noted, there's no difference in the resulting value in the A register, and there's also no difference in the effect on the flags (which are not checked anyway).

#5101 Willy disassemblies in hexadecimal

Posted by SkoolKid on 06 September 2016 - 06:46 PM

This bug just got more interesting! :)


I think I know why Willy is relocated further down the rope on your first attempt: in the section of code that handles Willy's movement along the rope, the rope status indicator is reset to 12 if it's found to be 11 or less. How you then manage to circumvent that code in your second attempt, I have no idea yet.

#4919 MM/JSW disassemblies: 20160511

Posted by SkoolKid on 28 July 2016 - 05:01 PM

N.B. The Cyan 'Kong caverns' guardians are present when you play the game!


Oh, I know that - what I meant was that they are erroneously skipped by my cavern-drawing code.


I don't know if I've mentioned this before, but none of the images in my disassemblies are derived from in-game screenshots - they are all programmatically generated.

  • IRF likes this

#4917 MM/JSW disassemblies: 20160511

Posted by SkoolKid on 28 July 2016 - 04:51 PM

Also, you might be able to answer a query I had a while ago about the area of the 'contended memory' #5B00-5BFF.  The 'top end' of it seems to be used for the stack addresses in JSW (starting at #5BFE-FF), but does it have any other use than that?  #4000-#57FF is the display file, #5800-#5AFF is the attribute file, and the JSW buffers begin at #5C00 - so 'page' #5B fits in between those.


As far as I know, the printer buffer (5B00-5BFF) is used only by the stack - the stack pointer being 5C00 when the game starts.


Richard, I've just noticed that neither of the two 'Kong Beast' screenshots in the MM disassembly display the Cyan horizontal guardian!?


Also, the comment at #91EE caused me momentary confusion; perhaps it should read: "The Kong Beast is drawn with Yellow Ink when he is falling"?


Regarding the cyan guardians in the Kong Beast caverns: well, well, well! My first thought is that because the third horizontal guardian in those caverns is unused, the fourth one (the cyan one) is erroneously skipped. I will look into it...


Regarding the comment at 91EE: the comment at the beginning of that section of code (at 91A3) says "The Kong Beast is falling", but I suppose you might have forgotten that by the time you reach 91EE. :)

  • IRF likes this

#4909 MM/JSW disassemblies: 20160511

Posted by SkoolKid on 28 July 2016 - 11:53 AM

Just checking in to acknowledge the comments and see what new stuff I should be adding to my MM/JSW disassembly TODO lists! :)


I've been preoccupied recently with SkoolKit 5.3 and the Spectrum ROM Disassembly, but I'm going to take a break from those and concentrate on MM and JSW for a bit. Now, where were we the last time I was here...

#4551 MM/JSW disassemblies: 20160511

Posted by SkoolKid on 02 June 2016 - 06:21 PM

By the way, I hope you don't mind these occasional comments and suggestions? Your disassemblies are fantastic resources, and hugely helpful in gaining an understanding of the code. If I come across as pedantic it's only because I believe that 'tweaks' such as this could help readers who follow after me to gain a similar level of understanding!


No, not at all - keep them coming! I want the disassemblies to be as accurate and comprehensive as possible, and I'm always happy to receive new trivia suggestions and bug reports.

#4437 Question for the technically-minded

Posted by SkoolKid on 27 May 2016 - 08:27 PM

I play files using an online emulator called QAOP.

I just click 'Open' and then browse for a file (sometimes they're .tap files, sometimes .z80).

The emulator seems to go straight to the Title Screen with no bother. Therefore, as far as I am aware, no 'loader' is involved in the process?

I was just wondering how the emulator knows where to begin?


My earlier answer covers snapshots, but for TAP files, there's always a loader, even if it doesn't look like it. Most emulators have the ability to 'fast load' TAP files, which means the USR command in the BASIC loader is executed almost immediately, without you having to wait for the tape to play in real time.

  • IRF likes this

#4434 Question for the technically-minded

Posted by SkoolKid on 27 May 2016 - 07:45 PM

But if I'm running game files on an emulator, with no loader, how does it know to start at #8400?


Are you asking how an emulator knows where to begin execution when loading a snapshot file?


If so, the answer is that the emulator takes the value of the program counter (PC) that is stored in the snapshot file. In a SNA file, PC is stored at the top of the stack (and must be popped off before execution begins). In a Z80 file, PC is stored in the header (like all the other register values). In an SZX snapshot, PC is stored in the ZXSTZ80REGS block (along with all the other register values).

#4432 MM/JSW disassemblies: 20160511

Posted by SkoolKid on 27 May 2016 - 07:34 PM



Sorry to be a pain, but I don't think your latest iteration of the 'Through the Wall' entry in your Manic Miner disassembly is quite accurate yet:




Phew! :)


I've just read the 'Through the wall' description a few times to get it straight in my head, and I must admit I'm not seeing the discrepancy between the text and the pictures.


When I say that there is a nasty tile below Willy's sprite in step 16, what I mean is that when the nasty tile check is made at the point when the jumping animation counter is 16, Willy's x-coordinate has not yet been updated from what it was in step 15 - at which point there is a nasty tile below Willy's sprite. (His x-coordinate is updated before he's drawn during step 16, though.)


Perhaps the wording doesn't make that clear enough. Would it help if I stated the actual x- and y-coordinate values when the nasty tile check is made?

#4241 MM/JSW disassemblies: 20160511

Posted by SkoolKid on 13 May 2016 - 06:44 PM

It's easily checked, especially with that POKE - which incidentally, will set the Screen Flash off (and increment the lives) every time an item is collected!  N.B. Care might be needed in case the remaining lives display runs off the edge of the screen and causes corruption elsewhere?


Actually, Willy gets an extra life only when the thousands digit is rolled over from 9 to 0, so that POKE won't give rise to a too-many-lives problem.

  • IRF likes this

#4238 MM/JSW disassemblies: 20160511

Posted by SkoolKid on 13 May 2016 - 04:56 PM

Regarding unused code: the table of unused blocks is generated automatically, and I can't add an entry for a section of code/data that's embedded in a block. I could add some intro text to the 'Unused addresses' page that lists such sections, though.


Regarding the item below the portal in The Sixteenth Cavern: after looking at the code, I'm sceptical that Willy doesn't get 100 points for collecting the item - the points are added at the same time as the item is collected. You could try POKE 36739,41 to check this - it would award 100,000 points per item collected, which is more obvious than 100. (Actually, that's a good candidate for the POKEs page.)

  • IRF likes this