|
Subject: Re: [stella] Death Derby, new build From: Manuel Polik <cybergoth@xxxxxxxx> Date: Sun, 07 Oct 2001 19:05:30 +0100 |
Hi Thomas!
> I agree, but here optimizations will make the explanations quite
> difficult.
IIRC You had to send everything in german, until I finally understood
everything - But now, knowing how it works, it reads quite clearly
explained... :-)
> The first step, you should try, is to use Y as THE universal rowcounter.
> Try not to use Y for anything else, and do all loading of the graphics
> (cars, later the pedestrians) with this rowcounter. That way you save a
> lot of cycles during the kernel and some RAM space. You have a two-line
> kernel, so let Y countdown every 2nd row.
Uhm... that's already the first point where the Gunfight kernel differs
:-)
(Thomas and I discussed that quite some time privately. The main reason
why I go different ways here is because I'd actually need two different
counters, since my sprites are done in 2LK way and the playfield is
drawn in a way a 4LK would do it, only without wasting the space for a
4LK. Another difference is that I can read the sprites with $$,X since
they're completely buffered in the RAM. I'm saving a lot of bytes here,
since I've stored the heads of the cowboys only once in the ROM, but
I've lots of different feets :-))
> And you have to arrange your data very carefully, if you want to avoid
> additional cycles for crossing a page. If your kernel is 180 lines tall,
> you countdown Y every 2nd line and the car can be displayed in every
> row, then your data must be inside 256*n+180/2 and 256*(n+1)-1.
> I hope, this makes sense to you. But my english is limited and here the
> kernel is starting to get complex. Maybe Manuel can explain this better.
I'll try doing it the simple way... :-)
The calculation of the object pointer (done outside the kernel, if
Thomas didnt make that clear enough) looks like this:
LDA #<CarRotation0
SEC
SBC #50
STA P0_CurrentFramePtr
LDA #>CarRotation0
SBC #0
STA P0_CurrentF
Where #50 represents the scanline, where the oject starts. In the given
exmple #50 might be replaced by any value between #0 and #90, and we're
subtracting it!
So it's as simple as: If we fall below zero here, we cross a page later,
so our data must start above #90 :-)
(Hm... uhm... Thomas: Why isn't the size of the displayed thing taken
into account here? Could it be... Oh my god... if one'd already let dasm
calculate it... that'd be LDA #<CarRotation0+size ... then... Oh-oh...
I've to quit now, there's probaly an optimisation run in gunfight
necessary...)
Greetings,
Manuel
-
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [stella] Death Derby, new build, Thomas Jentzsch | Thread | RE: [stella] Death Derby, new build, Nicolás Olhaberry |
| Re: [stella] Supercharger and the 7, KhrysSun | Date | [stella] Atari Logo playfield demo, Eric Ball/Markham/IB |
| Month |