@Wouter, how would you explain, if I alter the SAT address within the line, it alters the spites. That is a fact, tested!
Allow me:
@wouter_, how many times is the SAT read per line, even when SAT address changes over and over per line?
You misunderstood. The sprite attribute table is read just once per line...
... Well, different parts are read at different moments in time, and by changing R5 you could obtain a mix between different tables. But that's nothing that can't also be achieved by a single SAT.
Please (re-)read the article.
In summary:
- The sprite attribute table is read just once per line;
- by changing R5 you could obtain a mix between different tables;
- But that's nothing that can't also be achieved by a single SAT.
Please (re-)read the article.
Otherwise:
As the VDP is min. 4 times faster than the CPU, I would assume reading SAT at least 4 times per line. (CPU 3.5Mhz, VDP 21Mhz).
...
I have read and re-read te article, but cannot find anything that states the above. What am I mssing?
The article doesn't state that the VDP inexplicably and pointlessly wastes its limited memory bandwidth budget rereading data four times because... it doesn't. As it turns out, things you make up in your head are not always accurate.
@Accumulator I was wondering if you had any success yet with that "many sprites on one line" code. Not trying to push, but if this works that would be great.
If this works then:
- Grauw is wrong, despite having attached a logic analyser and spent considerable time on it;
- all empirical results which had pointed in that direction were wrong;
- as a result, all existing emulators and everything else is wrong; and
- the staff at Yamaha weren't very smart.
In that scenario I guess the conversation at Yamaha might have gone something like this:
"Hey, shall we use all of the available memory bandwidth to offer more colours and/or pixels of output?"
"No, let's just read the sprite attribute table four times"
"Oh, cool, so if we've enough time to read 128 entries from the sprite attribute table, shall we offer a 128-entry sprite attribute table?"
"No, we'll just reread the same entries several times."
"Umm, okay. Then shall we allow for reuse of sprite output shifters opportunistically, sometimes to break the eight-a-line barrier?"
"No."
EDIT: courtesy of Grauw, Wouter, et al's very hard and generous work, here's the access timing for both the Yamaha VDPs and the TMS, per line from a follow-up article:
So, same comment as before:
See Grauw's timing documentation. If you're in a bitmap mode and have reached cycle 130 then sprite locations and contents have been locked in for the line that is about to be serialised. There is no means to change any aspect of sprite output for that line after that point. You are going to get at most eight sprites displayed on your line, full stop.
There seems to be a disconnect here; people that achieve great things on 8-bit hardware by pushing boundaries do so by understanding how the hardware works and using it ingeniously. This is very different from just denying reality.
- the sprite attribute table is read only once per line;
- you cannot get more than eight hardware sprites on a line, because:
- the sprite attribute table is read only once per line.
Note I didn't write the VDP timings article, I just host it on the MAP to give exposure to this great resource. The real research was done by the openMSX team and wouterv in particular.
About more than 8 sprites per line, I don't think it is possible, you can see in the chart when exactly when each sprite coordinate is read (in advance for the next line). With my understanding of the VDP I see no way to surpass it. However by all means give it a shot, you either make a fantastic new discovery or you expand your knowledge, both are good things .
Note I didn't write the VDP timings article, I just host it on the MAP to give exposure to this great resource. The real research was done by the openMSX team and wouterv in particular.
About more than 8 sprites per line, I don't think it is possible, you can see in the chart when exactly when each sprite coordinate is read (in advance for the next line). With my understanding of the VDP I see no way to surpass it. However by all means give it a shot, you either make a fantastic new discovery or you expand your knowledge, both are good things .
Obviuously there is no way just because of the reasons you pointed.
But let TomH to try hard. Everyone has the right to believe in fairy tales. ;-)
While techincally it is impossible it is always worth to try. It has a few advantages. It aids in the process of learning and puts even more evidence in the current stand of matters. If it succeeds, the theory was wrong and a new quirck is found, if it fails we all know that trying is just not worth the time.
We have to remember that many things where deemed impossible. But yes the current knowledge on the matter makes me about 100% skeptical about success.
It would however be very nice if anyone who tries shares the failure or success.
I am not gonna try. Have tried enough and when grauw said it cannot be done it could not be done, thats how simple it is for me, yet my skills are limited.
I fully agree. Deciding in advance that something is impossible deprives you of the opportunity to discover something new. Extensive knowledge of a subject can certainly show that it is very unlikely, but experimentation often produces unexpected results.
Some one might have said scrolling the screen in 2 directions at once is impossible because he didn't think of that one thing that was documented wrong. And all that blindly trust that experience wouldn't even have tried it.
So keep experimenting! And except to be very wrong very often!
Nobody has decided in advance what is impossible; the openMSX team decided to use a scientific instrument to measure objective reality and then documented it. From this we know — not in advance, but after rigorous investigation — what is and isn’t possible.
Denying scientifically-observed objective fact isn’t bravely searching for a new frontier, it’s flat earth stuff. It’s insisting that your doctor give you ivermectin for COVID.
Trying is not denying. We all know it is not going to succeed but if someone has a theory and wants to try its not flat earth stuff. The reasons spread wide.
We all know how the experiment is going to end sure but 100% does not exsist. Science is the search for indefinete truth about the theory. So yes the measurements prove that it is impossible to do it but we must always remain carefull in denying the counter theories as well.
Now I shall patiently wait for a rom that hopefully comes up with a solution. Its bitter hope I know but who knows.
Ohw and yes people did use all sorts of stuff and we know how it ended. Good now we know that invermecin is not effective.
Trying is not denying.
Then I think that's our point of disagreement. For me: the means applied and effect being sought require denial of the previous hard-won knowledge.
We know that the sprite attribute table is read once per line. We therefore know that there is no way to have the VDP parse two separate sprite attribute tables within one line.
There is no compatibility between those facts and trying to get the VDP to read more than one sprite attribute table per line.