Resource centre for ZX Spectrum games
      using Manic Miner and Jet Set Willy game engines

 

Archive of the

Manic Miner & Jet Set Willy Yahoo! Group

messages

 

 

 

Message: 6045

Author: andrewbroad

Date: 14/02/2007

Subject: Re: Needs vs. demands / SPECSAISIE Disassemble

 

Daniel wrote:

>
> Thanks A LOT, Andrew, for your immediate, thorough and extremely
> helpful reply to my question about the disappearing teleporter
> in "Jet Set Emily FE". Yes, evidently that was the problem
> (I tested the buggy version with and without letting it go into the
> attract mode) and it has been solved thanks to your help. Another
> example why the MM/JSW community needs you *at least as much as*
> the tennis community! :-)

It sure does! And I admit I got a huge thrill out of fixing your bug
as efficiently as I did.

But tennis is a more demanding mistress, as it moves on at a much
more rapid pace, and there are more and more nice players, doing
better and better than in the past - creating more and more work for
me, as demanded by my predefined criteria (including my vows of
Eternal Fanship).

And soon I may have a third community, making even greater demands of
my time, albeit for less need of my contributions. That would
be 'bad' news for tennis, just as tennis is 'bad' news for MM/JSW.
But nothing's confirmed yet...


> So I have just released the second bugfixed version, where the only
> change is one byte at the address Andrew indicated (#87A0). And
> I DO hope this will be the very final version (at least as far as I
> am concerned) and that no serious bugs will be discovered in the
> game any more! Will you be my Valentine, Jet Set Emily?
>
> So download the (hopefully) bug-free version and enjoy!
>
> Daniel
>
> P.S.
>
> Andrew wrote:
>
> > The obvious thing to try is disassembling JSE FE and then
> > searching for any references to #8B70 (snip).
>
> How do you disassemble a program file?

I (and probably I alone) use SPECSAISIE Disassemble, which is a
prototype Z80-disassembler that takes an SNA-file or a TAP-file as
input. It does not yet recognise the whole Z80 instruction-set
(yesterday, for example, I had to post-edit the output to
replace "unrecognised op-code #F1" with "POP AF").

The command-line I used was as follows:

java Disassemble -h "Jet Set Emily 2006 (Final Edition).tap" #8000
#FFFF > disassemble.asm

(-h: use hexadecimal in the output)

I'll be honest with you: this command-line tells it to interpret
everything in #8000-FFFF as code, so my claim for soundness is
invalid, since it is possible that the patterns one seeks may happen
to occur as data.

If no stop-address is given, then SPECSAISIE Disassemble stops when
it hits either a RET instruction or an unconditional jump (JP or JR).

The command-line flag -j tells it to continue disassembling at the
target of a jump-instruction, and the command-line flag -c tells it
to continue disassembling at the target of a CALL instruction (i.e.
to disassemble any called subroutines).

But I don't yet trust -j and -c to disassemble all the code that is
reachable from the start-address, because there could be indirect
jumps such as JP(HL), where the address in HL could be the result of
an arbitrary calculation (whose value may not even be computable
until runtime)...

...or the trick that the original, unhacked JSW entry-code (#8400-
841F) does in order to jump to #869F: it pushes #869F onto the stack,
and then uses a RET instruction to perform the jump!

Thus, using -j and -c is sound but incomplete: it will never
interpret data as code unless it is (syntactically) reachable as
code, but it's not guaranteed to disassemble all code that is
reachable from the start-address.

For this task, I'd rather be unsound and complete (and use my common
sense) than sound but incomplete.

Blimey - I didn't mean this to take until 1am! I expect to be seeing
the title-screen any minute now! ;-)

--
Dr. Andrew Broad
http://geocities.com/andrewbroad/
http://geocities.com/andrewbroad/spectrum/
http://geocities.com/andrewbroad/spectrum/willy/

 

 

arrowleft
arrowright