Why can't the MSX display more than 4 sprites in a row?

Pagina 1/2
| 2

Door LeandroCorreia

Paladin (955)

afbeelding van LeandroCorreia

23-11-2004, 13:32

Yes, the MSX has hardware built-in sprites, but why can't it display more than 4 sprites in a row?
This problem also appears in other systems with sprites, such as Capcom CPS1 arcade games... Why does this limitation exists? Tongue

Aangemeld of registreer om reacties te plaatsen

Van AuroraMSX

Paragon (1902)

afbeelding van AuroraMSX

23-11-2004, 13:50

My guess would be that it's a matter of calculation power: the VDP just isn't fast enough to process more sprite data within the time it has to calculate one video line (or frame)

Van PalmPal

Supporter (5)

afbeelding van PalmPal

23-11-2004, 14:28

In a newsgroup posting by Paul Urbanus, he showed a nice calculation about the timings: it seemed that 8 cycles were not enough for a 5 th sprite.
The exact calculations can be found here:
groups.google.com/groups?safe=images&ie=UTF-8&as_umsgid=32F28691.2ADC@onramp.net&lr=&hl=en

Van LeandroCorreia

Paladin (955)

afbeelding van LeandroCorreia

23-11-2004, 15:13

So the VDP tries to display the fifth sprite. It's just not fast enough to display it in time?

Van Grauw

Ascended (10577)

afbeelding van Grauw

23-11-2004, 16:25

Leandro: no, it knows it is not fast enough to display a 5th sprite, so it will not attempt to and instead set a bit in the status register that it reached its max.

Van LeandroCorreia

Paladin (955)

afbeelding van LeandroCorreia

23-11-2004, 16:50

And how the sprites mechanism works? The VDP verifies line by line if there's a sprite in that row and then draws it?

Van flyguille

Prophet (3028)

afbeelding van flyguille

23-11-2004, 17:53

that way, the VDP has a line buffer, idd TWO, so it draws all the line before to send. So, when it fills one line buffer, the other line is sending.

Van LeandroCorreia

Paladin (955)

afbeelding van LeandroCorreia

23-11-2004, 18:28

And in games like Golvellius, Gulkave or Final Zone, for example... I don't know Assembly, but I am sure that the program keeps swapping sprites priority numbers on the fly, and when there are more then 4 sprites in a row, they flicker (flickering is better than vanishing). Grauw said that the VDP sets a status bit to remind that it already reached its maximum number of sprites. Can the programmer check this bit status, allowing him to swap priority sprite numbers only when there are more than 4 sprites in a row?

Van flyguille

Prophet (3028)

afbeelding van flyguille

23-11-2004, 18:30

yeah, it can, it is in the status register, and not only that, also gives the first sprited that didn't fit.

Van LeandroCorreia

Paladin (955)

afbeelding van LeandroCorreia

23-11-2004, 18:42

Interesting, Flyguille.

Many years ago, I pressed some cheat keys in Wonderboy, and the game started without collision detection. Very useful to avoid enemies, but also nasty because you had no way to recharge your energy with items. Anyway, when I stepped over an item, I noticed that the game kept swapping sprites priority numbers. Probably the programmers were not aware of the VDP "reached 4 sprites" bit. Smile

P.S.: If I remember it right, you must press H+U+D+S+O+N at the opening screen.

Van Sonic_aka_T

Enlighted (4130)

afbeelding van Sonic_aka_T

23-11-2004, 20:18

Well, the 'reached 4 sprites' bit is pretty common. I would guess that any programmer, especially back then, would've know about it. If you read up on sprites, it's probably one of the first things you'll learn. With MSX2 this got increased to 8 sprites, but that unfortunately is still to little for sprite modes to be truly useful... *Sigh* If only they had been full-color sprites... *sigh*

Pagina 1/2
| 2