[stella] Qb: v0.03

Subject: [stella] Qb: v0.03
From: "Andrew Davie" <adavie@xxxxxxxxxxxxx>
Date: Thu, 15 Feb 2001 16:58:21 +1100
Attached, latest version of Qb (v0.03).

This has been a consolidation period, where I've optimised routines and
timing.  It has also been very tiring and frustrating.  There is something
very strange going on regarding the speed and line-count according to Z26 -
but I think I've standardised it down to 262 lines.  Put in another WSYNC
and it shoots to 278.  Bizarre.  Anyway, thanks to Eckhard Stolberg for
writing and telling me how it behaves on a real machine.  I've upped the
speed of everything so it looks reasonably OK on my version of Z26.  Runs
like the devil on my (old) PCAE.

I'll be interested to hear how this version works for others on various
platforms/emulators/hardware.  Comments PLEASE, anyone?

If you 'ride' a pair of cubes up to the top line, and jump left and right
between the cubes, you'll see that the score is turned off whilst the jump
is in-progress.  Looks pretty good, and cost me mmmh... about 60 bytes.
I'll see if I can afford to keep it in later versions, but right now I'm
pretty happy with how it works.

I still have a bug where occasionally you get a phantom cube lower right
corner (after you slide one out).  If that happens, you're buggered.  That's
about the only real bug I'm aware of... I'll fix that, and optimise some,
then get down to installing a few creatures.  Not much space left, but what
the heck!

You might notice the dual 6-digit displays (top/bottom).  These are done
using the one routine (including the colouring).  You pass a colour modifier
to the routine, and it shades the digits with that.  Works well.  Look at
the routine "ScoreLine"...  source is included in the qb003.zip file.  I was
just a few cycles short of making it into a dual-purpose
double-height/single-height routine, but I ran into a situation where I
really DID need to waste just one cycle, and couldn't do it.

Something like this...

    sty loop                ; 3
   bcs SingleLine    ; 2(3)
   >> need to waste ONLY ONE cycle here
        lda (S0),y ;5
        sta GRP0                ; 3 = 15
...etc

Can't change the sty to a sty.w, as there's no free cycles when you branch
to SingleLine (that is, you can only use 5 cycles before THAT section has to
start, and they're taken with the sty).  Furthermore, you HAVE to have the
sty first, as it's buggered pretty much immediately.  Anyway, this is an
example where a single-cycle delay is needed.  I tried, and failed :)

On the subject of the poll, and what everyone's working on... come on guys,
post your binaries!  I can't believe so many are lurking in the wings with
pet projects, but who aren't game to post anything.  Doesn't matter if its
great or not... sharing is what its all about.

FINALLY, the use of overlays for my variables are what have REALLY made
things a lot simpler for me.  I'd strongly suggest that anyone interested in
coding shoud have a look at the overlay use and definitions in my source
code, and consider using something similar.  It lets you use meaningful
variable names throughout your code, and also be confident that you won't be
clashing with temporary variable usage.

As usual, comments and suggestions most welcome.

Cheers
A

--
 _  _  _| _ _        _| _    * _                               _  ,
(_|| )(_|( (/_\/\/  (_|(_|\/(_(/_                           ,~' L_|\
                                                         ,-'        \
see my Museum of Soviet Calculators at                  (            \
http://www.taswegian.com/MOSCOW/soviet.html              \    __     /
                                                          L,~'  "\__/
                                                              @--> v

Attachment: push.bin
Description: Binary data

Attachment: qb003.zip
Description: Zip compressed data

Current Thread