| |
Luke
Registered: Dec 2004 Posts: 19 |
Sprite Stretching or what? :>
So i found it on old disk:
Only screenshots here:
Sorry for Polish language in comments, but no time for explain all into English.
First screenshot - route sprite setting. 8 sprites, $54 y , x from 00 step $18++.
http://www.platine.fajnastacja.pl/IMG_0918.JPG
Second screenshot, old irq routine: set $ff in $d017, waiting some cycles and $00 -> $d017 + dec $3fff. And it's all.
http://www.platine.fajnastacja.pl/IMG_0917.JPG
Third screenshot : How is it works? $3fff used in sprite + extra multiplexer for free without any changes of $d001, and $00 in $d017 :) What is this?:D
http://www.platine.fajnastacja.pl/IMG_0919.JPG
Sry for crap screens, no time for it at all.
I'm wondering - multiplexer for free :)
Btw. If that change $d017 from $ff to $00 are in next line, then 2x multpilexer in Y :)
|
|
| |
pernod Account closed
Registered: Nov 2004 Posts: 25 |
Hey, it looks like you have re-invented "sprite crunching"! It is a kind of weird, but very useless trick. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
useless? not really =) |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
well I havent seen a use of it other than xbow being able to display more sprites.. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
well yes, its a nice trick everytime you want a spritelayer over some kind of fli routine. not terribly useful for most other stuff, ok =) |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
ah forgot about that =) |
| |
Luke
Registered: Dec 2004 Posts: 19 |
Is here any "sprite crunching" manual?:D |
| |
WVL
Registered: Mar 2002 Posts: 902 |
Quote: Is here any "sprite crunching" manual?:D
Xbow once wrote a complete list of what's happening in one of his demos. I guess it's this one :
Krestage press runstop in the multiplexer part to get the list ;) |
| |
Luke
Registered: Dec 2004 Posts: 19 |
thank you :) |
| |
ready.
Registered: Feb 2003 Posts: 441 |
just adding one question to this thread instead of opening a new one. I am trying to do a $d017 sprite stretch, but with bad lines active. I can repeat the same sprite line only until a bad line occurs. It seems to me that in order to repeat a sprite line n-times, $d017 must be set only at a certain x position within a raster line (corresponding to an x coord near the left part of the visible screen area). So setting $d017 when no bad line occurs is feasible, but when a bad line comes, the portion of the screen where $d017 must be changed is taken by the VIC and cannot be accessed by the CPU.
So, is this feasible or shall I remove bad lines? Of course I want badline in order to keep other gfx too. |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
I'm no expert, only thing I know you can steal back some cycles with inc / dec, try that. |
| |
Dano
Registered: Jul 2004 Posts: 234 |
pretty curious about that, too. have been running into the exact same problem the last days.. i'd be delighted if someone found a hint to make it work with 7 sprites enabled.. :) |
| |
ready.
Registered: Feb 2003 Posts: 441 |
after some more thinking, it seems to me rather impossible to expand a sprite with $d017 trick during a bad line, due to the fact that the $d017 must be set in the part of the visible area of the screen where the processor is stunned by the VIC access.
Without bad lines, it's feasible of course, there are tons of examples around. |
| |
HCL
Registered: Feb 2003 Posts: 728 |
You can of course still have graphics on the screen without badlines, as in the greetings part of Smart Girls Hate Booze. ..there you have a sprite stretcher (zoomer) with a badline-free picture behind.
I remember that i tried stretching sprites with badlines a long time ago (Royal Arte era..), but never got it to work. I didn't say it is impossible though, but it made me stop trying after a while :). |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
if HCL couldnt do it then its not possible :) can it be done if the sprite is not used whose DMA occurs at the magic-set-d017 cycle ? |
| |
ready.
Registered: Feb 2003 Posts: 441 |
sorry Oswald I don't get your question.
Anyhow, the magic cycle for clearing $d017 is cycle 16, reading the VIC article. If $d017 is cleared at cycle 15, we get sprite crunch instead.
I tested several code arrangements but I could not clear $d017 at cycle 16 during a bad line. I also tried to trigger the bad line in the middle of the line before (playing with $d011) and this allwoed me to write at cycle 16, but the sprite stretch did not work. I guess it has to do with the fact that the bad line triggering also moved the $d017 magic stretch point.
I guess there's no way out of this, at least for me. |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
guess the badline DMA itself occurs on the d017 cycle then. |
| |
Digger
Registered: Mar 2005 Posts: 437 |
Here's the link to the CodeBase64 article:
http://codebase64.org/doku.php?id=base:sprite-crunching |