| |
Nightlord
Registered: Jan 2003 Posts: 131 |
UFLI?
Hi everyone,
I tried to google around in order to learn how ufli works but could not find anything. I know how fli, afli, shfli, shifli and finally xfli works.
can someone please explain how ufli works and what are its limitations. i tried to look at the displayer code of that veronica picture. i see sprites involved. but i do not understand the code... |
|
... 131 posts hidden. Click here to view all posts.... |
| |
Graham Account closed
Registered: Dec 2002 Posts: 990 |
The magics of the code generator :) |
| |
WVL
Registered: Mar 2002 Posts: 886 |
Well, after 18 years we are almost there.. I managed 124 lines in 2006, but that was not good enough.. Finally I got to 166 lines in Halloweed 3. The main problem was keeping the sprite data unique as I thought way back.
So now.. how do we get to 200 lines? |
| |
Clarence
Registered: Mar 2004 Posts: 119 |
Congrats guys, well done pushing the limits. Must be a hell of a memory layout to accomodate the illegal opcode register manipulations (and finding a working combination). :) |
| |
WVL
Registered: Mar 2002 Posts: 886 |
Yes, the memory layout is completely fucked up. Actually there are 3 'solutions'. It starts with one, and has to switch to a second one in the end. There are some special lines in the middle to get the switching from solution 1 to solution 2 working. At the end of solution 3 I needed some special lines aswell to avoid problems with sprite uniqueness again.. |
| |
DeeKay
Registered: Nov 2002 Posts: 362 |
amazing work, WvL!... now make a converter so we can actually use it for GFX! ;-D
I remember Crossbow had a look at Ninja's code and was seriously impressed and guessed that he must have worked many months on solving this.. and apparently he did, he said that he spent about a year on the train to work and back on his 6 sprite routine!
Now, the only thing I wonder about, both with your and with Ninja's part: Why do you guys always use graphics that do not show off the full FLI coloring? ;-) Yours is better than JB's in Ninja's part, but it could still be a half- or even quarter-FLI pic!..
Just tested in VICE 3.1 - No worky, good job, Werner! ;-D You br0ke the emu, vice devs many headaches now... |
| |
WVL
Registered: Mar 2002 Posts: 886 |
We are at VICE 3.7 now and that works perfectly :-) |
| |
Oswald
Registered: Apr 2002 Posts: 5028 |
crazy code man, what do you mean by special lines? if there is no time for anything how can you even change dd00 ? :) |
| |
WVL
Registered: Mar 2002 Posts: 886 |
@Oswald : I mean lines that do not follow the 8-line repeating loop. To switch between loops, you have to switch dd02 and d018 to work in the new loop. I also found a good spot that didn't need a d018/dd00 write so I could refresh A and X.
I even found a solution with a repeating 16 line loop not needing a d018/dd00 write every 8th line, but couldn't make it work past 124 lines..
Also, I couldn't find a solution with good A,X,Y,A&X,A&Hibyte to multiplex the sprites for the last row. And even then you'd need a combination of a last loop that does not need d018/dd00 writes AND had proper register values for the multiplex.. |
| |
ChristopherJam
Registered: Aug 2004 Posts: 1381 |
UFLI?
Quoting WVLWell, after 18 years we are almost there.. I managed 124 lines in 2006, but that was not good enough.. Finally I got to 166 lines in Halloweed 3. The main problem was keeping the sprite data unique as I thought way back.
Congratulations!
Quote:So now.. how do we get to 200 lines?
Excellent question.
Back in 2019 I wrote a limited instruction simulator/search function that allowed me to find a few thousand solutions to "build a loop to display a 6 sprite 200 pixel high wall over FLI," but none of them managed to avoid reusing sprite data past the 168th line. I thought I'd make a bigger splash if I managed to solve the latter issue instead of just making a demo with what I had, but instead I just failed to beat you to the punch on the 168 line version (publish or perish!).
My approach was to search for 16 line loops that had a free instruction twice per loop (no need to change either of dd02 or d018 at the end of a char row), and I had a cunning way to use the free instruction to update one Y position every eight lines during the leadup to line 168
I think I took a few runs at using one loop above line 168 and a different loop below, but every combination of compatible loops from the solution set I found still had collisions in their sprite access patterns :-/
I got a little bit distracted with other projects after that, but I really should get back to it one of these days.
(my starting point was - Ninja did it, and while I didn't read his code I knew it was published in No More Secrets, so unintendeds must have played a part in his solution.. and the DMA burden says RMW instructions are necessary to be able to do the requisite two instructions per line in the cycles available..) |
| |
WVL
Registered: Mar 2002 Posts: 886 |
It sounds you ran into the same problems that I did. I tried to prove mathematically that you will always run into a collision above line 166, but I couldn't quite prove that.
So it might still be possible. I didn't restrict too much, maybe more restrictions help. I wonder how you wanted to do the sprite multiplexing. I couldn't find suitable solutions with correct values for a,x,y etc, but maybe I should have been more clever and also search for solutions in which you can multiplex with ASL $d001, or ROR $d001 or something, but that can't work: you need a 4 cycle instruction, so only sta/stx/sty/sax... |
Previous - 1 | ... | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 - Next |