Date : Fri, 31 Jan 1997 12:19:03 +0000
From : "David Ralph Stacey" <drs1@...>
Subject: Re: BBC emulation (what else...)/coding help offer/etc.
Hi.
Chris wrote
> Made a zero length file ADFS with execute address 8023 and placed it in
> $.ADFS. The game now boots(!) but water flashes all over the ship, the
> doors open and close randomnly regardless of the button state, and
> touching doors/scenery causes you to richochet around like a pinball and
> get hurt.
>
> What work needs doing? I'm interested in assisting.
Ok - I've downloaded your version of Exile and had a little look at it.
Basically the loader resets the vector table (thus switching out XDFS) and
then attempts to relaunch ADFS. Since the file wasn't there, EFS just dies,
and XDFS can't save the day because it's been switched out.
As for your ADFS file, you'd be better off entering the OS than any paged
ROM that happened to be around at that time. If you're using OS 1.20, try
setting the execution address to C461 instead.
Better still, why not modify the file? Try this from within xbeeb:
> *Load ExileL
> $&550F="DISC"
> CALL &74D8
This should get things working properly.
Now as for the man getting thrown around the screen, this is _probably_
due to
the V flag being set incorrectly when an addition is performed. In src/Ops.h
change the non-Decimal case if the if statement to look like this:
else \
{ \
int Anew, VTest; \
\
Anew = Accumulator + (v) + CarryFlag; \
Accumulator = Anew & 0xff; \
ResetZeroFlag ( Accumulator == 0x0 ); \
NegativeFlag = Accumulator & 0x80; \
VTest = (( Aold & 0x7f ) + ( (v) & 0x7f ) + CarryFlag ) & 0x80; \
CarryFlag = Anew >> 8; \
ResetOverflowFlag (( CarryFlag && ! VTest ) || ( VTest && ! CarryFlag
)); \
} \
As for the timers... well that's a little more complicated. I wont post any
patches here yet since my sources are still a little buggy - you'll just have
to suffer the flashing blue background, but at least the game will be
playable now.
Hope this helps,
Dave.