Jump to content
IGNORED

How was the object processor used?


jregel

Recommended Posts

The object processor is a very cool piece of hardware for its time, designed by some very smart people with no common sense.

I have to very strongly disagree. Designers of Atari jaguar actually pulled off an incredible engineering feat, considering the time they conceived it. Unfortunately, the market leaders pushed the technology elsewhere (towards texturing, which looked like shit for next half a decade). Jaguar is actually capable of creating very complex flatshaded 3D scenes, that totally beat any textured low-poly look. But, Sony went the way it did, so here we are...

 

 

Had they not tried to squish all the data together in the object list and just used an extra 4 bytes to allow things to be on 8 or 16 bit offsets

From performance standpoint, on a HW level, 256-bit alignment makes a lot of sense. This has reminded me of DirectX 8.1 era 3D coding, where such aligning of your vertex buffers would result in incredible performance boost. We're talking GeForce-3 era here, so quite a beast compared to jag, yet at the lowest level, the alignment plays right into caching, so if you organized your vertices according to the L2-cache split-way algorithm, you were rewarded very handsomely.

 

That's just how HW works, you can never get away from this. Not even on PS4 - doesn't matter how many layers of indirection (driver -> DirectX -> Unreal engine -> Your App) you put in between, the alignment will always have to be taken into account.

 

 

... , all the software building the object list would be so much more efficient, ...

Exactly, how much time are you spending on OP List ? If you're using the unmodified Atari-sample code, don't expect more than about 25-30 bitmaps updated during interrupt on 68000. With modifications, it is much more, but there's an obvious limit due to 68000's cycle throughput.

 

if you need more than that, you have 3 choices:

1. Prepare the list during frame-time on 68000 (zero complications), just takes away the cycle for game, though the resulting triple OP buffering requires some time to get right...

2. Prepare the list on DSP - thus GPU doesn't have to waste precious cache on such menial task

3. Prepare the list on GPU - easier to do than on DSP due to certain undocumented DSP HW bugs, but there goes your 4 KB cache...

 

Regardless, coding on Jaguar in Asm requires some upfront effort. If you're doing it in high-level language, like C, that's 2-3 pages of code, so that's not a big deal...

Link to comment
Share on other sites

Hmmmm, I wonder, why hasn't nobody, who might already be putzing around these 2D games on jag, attempted one ?

 

Oh, I know ! Nobody wrote one for Atari ST ! There's no pre-existing codebase to parasite on! Oh, shoot!

 

 

salty-as-fuckowpsj.png

Link to comment
Share on other sites

While I haven't looked into how exactly does Project-M do the rendering, but from my experience with my 6502 flatshader, the scanline filling approach on Atari 800 is very fast because of the following:

- unrolled STA takes just 4 cycles

- at Antic $0D mode, that's 4 pixels, e.g 1 cycle / pixel

- you have 24,954 cycles available per frame (at 60 fps) (after Antic is finished with its highway robbery), so it's quite a number of pixels you can fill and retain 60 fps

- of course, interlacing halves the number of scanlines, and pixels, and increases the available cycle budget for 6502 CPU

- since you can program Antic (a precursor to the OP in jaguar), you can align each scanline at a page boundary, thus allowing you to jump across scanlines via a simple INC vidptrHi, that takes just 5 cycles

 

- of course, even a non-unrolled code is still fast - an indexed STA addr, X takes just 5 cycles (and INX takes 2c), so you can fill the scanline very fast

 

 

6502 is, indeed, for its time, a very fine technological achievement, as a lot of ops take just 2cycles (not easy to accomplish even on jag's RISCs with its pipelined architecture)

And to think I had a 1200XL and sold it... What was I thinking. It was the "Mr Wizard" Atari system of all systems. lol Well the info I got from the "M Project" came straight from the horses mouth/the guy who posted the YouTube in a comment some years back when he first posted it. At first I thought he was using some raycasting on the Atari 8 computer, which was done once before, but not quite the way this guy seemed to have pulled it off at that kind of resolution. I can't seem to find the actual quote, but no ray casting was used, it was full on scan-lines using interrupts to do all of the pseudo 3D effects; that much I do remember considering at that time I was looking at the Atari 7800 graphic chip able to use display-list, which is very different then the 130xl graphic chip, yet share some common ground with the Jaguar's OP able to display almost in similar manner. It seem like whatever the Jaguar OP lacks in comparison to the Atari 8s graphic ability, could be made up in speed, but then again, even the Atari 8bit computer had a little more ram to do more graphical things then the Jags GPU with only 4KB of internal.

 

My thing is this, the GPU is a 2D monster very capable of doing 2D display and manipulation in real-time without breaking a sweat, which I've always credited as the Jaguar's strength... If 3D can be done using the DSP or the M68K or both very minimally using low poly based 3D models, and I mean low poly to the bone for the sake of speed and broad view distance, the GPU can interpret 3D data and render fairly accurate pseudo 3D/2.5D based of real 3D math as a way to fake high polygon objects in a similar fashion a voxel height-map is used or 2D meta-balls are used to render high detailed 3D images to screen only in this case, pseudo 3D is faked to look like real 3D high poly objects when in reality no real polygon is used, it just looks that way. It doesn't have to be voxel or metaballs per-say; just a smarter way to convey high detailed 3D in a way that takes the polygon count out of the equation or "Limitless 3D" as I use to say back in the old JS2 days; only its a new day today, I have a better understanding on things today then I did back in the day. That's what I mean by faking the living daylights out of 3D if that make any since to anyone.

  • Like 1
Link to comment
Share on other sites

it was full on scan-lines using interrupts to do all of the pseudo 3D effects

Well, he has to use DLIs, as he's displaying 256 colors (well, 16 lumas per base color). Note that in that particular resolution (you gotta set bit 6 in the PRIOR register), 1 byte covers 2 framebuffer pixels, but they're the widest one (4x wider in terms of video clock), so there's just 80 of them per screen (in standard screen playfield width, for narrow or wide playfield, add/sub one quarter accordingly). This means, only 40 STAs per scanline (to fill). Of course, that's fast at 4-5 cycles per STA.

 

 

It seem like whatever the Jaguar OP lacks in comparison to the Atari 8s graphic ability, could be made up in speed, but then again, even the Atari 8bit computer had a little more ram to do more graphical things then the Jags GPU with only 4KB of internal.

Totally agree. I can't express the same enough, as while I was working on 6502 flatshader, the ability to unroll functions to more than 4 KB feels absolutely incredible, after having spent so much effort on jaguar. No penalty for unrolled code whatsoever! Even 8 KB (like we have for DSP) is allowing for drastic performance improvements. If we had 16 KB...

 

And, given the recent memory expansions of Atari 800, you can have up to 4 MB of RAM. What's really neat is that due to the HW requirement, all that memory must be available in next cycle, after you select request bank (via PORTB register).

So, that's basically full-speed code execution from 4 MB on Atari 800 vs 4 KB on Jaguar :lol:

 

 

My thing is this, the GPU is a 2D monster very capable of doing 2D display and manipulation in real-time without breaking a sweat, which I've always credited as the Jaguar's strength... If 3D can be done using the DSP or the M68K or both very minimally using low poly based 3D models, and I mean low poly to the bone for the sake of speed and broad view distance, the GPU can interpret 3D data and render fairly accurate pseudo 3D/2.5D based of real 3D math as a way to fake high polygon objects in a similar fashion a voxel height-map is used or 2D meta-balls are used to render high detailed 3D images to screen only in this case, pseudo 3D is faked to look like real 3D high poly objects when in reality no real polygon is used, it just looks that way. It doesn't have to be voxel or metaballs per-say; just a smarter way to convey high detailed 3D in a way that takes the polygon count out of the equation or "Limitless 3D" as I use to say back in the old JS2 days; only its a new day today, I have a better understanding on things today then I did back in the day. That's what I mean by faking the living daylights out of 3D if that make any since to anyone.

Well, what if I told you, that I already have [recently] done initial research&testing (on jag) on one such particular poly-faking technique, that was used very heavily as late as in the Xbox 360-era. It just so happens that it especially favors driving games (due to the nature of post-transform clip-space and associated very low "pop"-style visual errors) :)

Granted, the associated bandwidth cost is not free on Jaguar, but definitely beats doing full-blown 3D pipeline and hand-holding the Blitter every single damn scanline (which burns a lot of GPU cycles, though I improved in that particular era 2 weeks ago).

 

Basically, you transfer the performance equilibrium from the limited MIPS power into more available bandwidth power. There's a polygon threshold (it does not make sense to us low poly count for the technique - the higher the poly count the better, actually :) ), where it starts to pay off. I found the best results in roughly 5x - 10x polycount that I am using currently. Of course, still keeping the same performance :)

 

It's amazing what the machine was designed to do. Shame, it basically never got used for more than 10-15% of its potential...

  • Like 1
Link to comment
Share on other sites

Awwwww, you're so sweet ! I love you too, darling :lol: I wouldn't however waste my breath on such a synthetic benchmark ;)

 

That benchmark does, however, show that a bullet-hell-style game is totally doable on Jaguar. With one caveat - it requires a tiny little bit of a new-code effort, though !

 

 

 

 

Hmmmm, I wonder, why hasn't nobody, who might already be putzing around these 2D games on jag, attempted one ?

 

Oh, I know ! Nobody wrote one for Atari ST ! There's no pre-existing codebase to parasite on! Oh, shoot!

 

 

 

 

Because if there actually was such an Atari ST game,

attachicon.gifGpuAccelerated.gif

 

About 10 years ago we were looking into this. We only managed rather quite a lot of sprites and bullets, 3 layers parallax plus audio and, gosh, some game logic and joypad input... but couldn't quite get it below 60fps.

 

How time flies when you are releasing stuff.

 

post-11520-0-72377500-1526422289_thumb.jpg

 

PS, I love you too, hunnybunny.

  • Like 3
Link to comment
Share on other sites

Never thought it possible. Vlad memes orders of magnitude less effective than Vlad games.

 

At least they exist outside of the numberwang universe of theoretical nonsense.

 

I wonder why with all his apparent knowledge, skills and sheer awesome coderness, why have there been a total of 0 releases in public demonstrating his awesomeness?? It's almost like nothing has any actually ever been produced beyond walls and walls of text.

 

weird.

  • Like 1
Link to comment
Share on other sites

 

At least they exist outside of the numberwang universe of theoretical nonsense.

 

I wonder why with all his apparent knowledge, skills and sheer awesome coderness, why have there been a total of 0 releases in public demonstrating his awesomeness?? It's almost like nothing has any actually ever been produced beyond walls and walls of text.

 

weird.

 

There was that Hero binary that produced a stunning 60fps black screen.

  • Like 4
Link to comment
Share on other sites

Truth be told, unlike certain individuals here, I have much higher standards as to what I release to public ;)

 

Could I have initiated a code freeze on the engine a year ago ? Sure, it was plenty fast then and certainly a respectable 3D scene complexity would be delivered.

 

I'm glad I didn't, as I keep discovering new tricks and features jag's capable of. I'll just keep pushing the 3D scene complexity further for my first game.

 

Jag's not going anywhere, anyway.

 

 

 

Besides, I really, really enjoy how it pisses you off and it reeks off your all such posts (as much as you - totally unsuccessfully - try to disguise it in "irony" and "sarcasm") :lol:

So, please, by all means, continue doing so - thank you for the provided priceless entertainment :rolling:

Link to comment
Share on other sites

Truth be told, unlike certain individuals here, I have much higher standards as to what I release to public ;)

 

Could I have initiated a code freeze on the engine a year ago ? Sure, it was plenty fast then and certainly a respectable 3D scene complexity would be delivered.

 

I'm glad I didn't, as I keep discovering new tricks and features jag's capable of. I'll just keep pushing the 3D scene complexity further for my first game.

 

Jag's not going anywhere, anyway.

 

Neither are we (unless health steps in the way that is) ... at your current release pace we'll see a Jag game from you once hell freezes over .... with any luck by then we will have an FPGA Jag to admire it with.

  • Like 1
Link to comment
Share on other sites

Besides, I really, really enjoy how it pisses you off and it reeks off your all such posts (as much as you - totally unsuccessfully - try to disguise it in "irony" and "sarcasm") :lol:

So, please, by all means, continue doing so - thank you for the provided priceless entertainment :rolling:

 

You are confusing "pisses you off" and "makes me look like a bitter moron".

 

Please, carry on.

 

[edit]

 

I honestly don't know what your problem is, dude. Out of the blue, random attacks lately. I thought you just wanted to work on your 3D engine? Will you ever finish it? Who knows.. tbh, I hope you do, and I hope it will be all you claim it to be, and that you write a great game with it for the system. All I've done for the Jaguar for the last -nearly decade- is produce code, release code, release examples, games and now an API, in order to further development and improve the situation. If your 3D engine adds to that mix of possibilities for people, then all the better.

 

As stated -many- times: 3D for me holds no excitement. I love 2D arcade games. The Jaguar is a dream machine at that. I have no interest in making 3D games, and probably never will.

 

If you want to continue behaving like a 3 year old, do carry on. It has no impact on my life at all, but it does reflect on you.

  • Like 6
Link to comment
Share on other sites

 

You are confusing "pisses you off" and "makes me look like a bitter moron".

 

Please, carry on.

 

[edit]

 

I honestly don't know what your problem is, dude. Out of the blue, random attacks lately. I thought you just wanted to work on your 3D engine? Will you ever finish it? Who knows.. tbh, I hope you do, and I hope it will be all you claim it to be, and that you write a great game with it for the system. All I've done for the Jaguar for the last -nearly decade- is produce code, release code, release examples, games and now an API, in order to further development and improve the situation. If your 3D engine adds to that mix of possibilities for people, then all the better.

 

As stated -many- times: 3D for me holds no excitement. I love 2D arcade games. The Jaguar is a dream machine at that. I have no interest in making 3D games, and probably never will.

 

If you want to continue behaving like a 3 year old, do carry on. It has no impact on my life at all, but it does reflect on you.

Darling, I'm not confusing anything. Your post only confirmed that - you sure you read it before submitting ;) ?

 

 

As for the "3-year old" reference - it's incredibly ironic especially coming from you, as let me remind you that it was you crying to mommy (e.g. moderators) like 3-year old who banned me from the ST thread (when I posted something that didn't correspond with your version of perceived reality).

 

But, that's of course, to be expected, from somebody like you - there's no doubt in my mind about your absolute lack of integrity. But, it's not a capital offense, merely a character trait (or lack thereof), so...

 

 

 

I'm pretty sure this one thread is more mine than yours, as I'm exchanging ideas and experience about 3D algorithms. There's nothing you (or your minions who are spamming the shit out of this thread) can contribute here. Your recent 15-fps "GPU-accelerated" port more than sufficiently confirms that, anyway...

 

 

 

But, by all means, like you did recently (remember your "3-year old" reference?), go and execute your [friendly/intimate/dark/whatever/really don't care what kind of] relationship you have with mods and put an end to this creative brainstorming we're having here with philipj :!:

Link to comment
Share on other sites

  • 4 weeks later...

I originally posted this YouTube in another topic, but this video is so worth posting here. It really gives a good visual of how sprite works on the Neo Geo, but can be applied to the Atari Jaguar, which could possibly yield a better frame rate. It think it quite clever how SNK applied animated sprites in the way that they did.

 

Link to comment
Share on other sites

but can be applied to the Atari Jaguar, which could possibly yield a better frame rate.

No, that configuration on jag cannot result in better framerate. They have several layers which are mostly empty, yet they are fullscreen. Take my resolution that I use - 768x200 = 150 KB worth of bandwidth. 4 buffers would take 600 KB. Every single frame. Double it if you want to use 16bit colors.

 

It's much better utilization of resources to handle those few smaller transparent bitmaps, separately, in an OP list, even though you'd have to exert some work (branching, etc.) compared to just putting full-screen bitmaps there.

 

It think it quite clever how SNK applied animated sprites in the way that they did.

I don't think brute-force is smart. It's just, well, brute-force...

  • Like 1
Link to comment
Share on other sites

It really gives a good visual of how sprite works on the Neo Geo, but can be applied to the Atari Jaguar, which could possibly yield a better frame rate. It think it quite clever how SNK applied animated sprites in the way that they did.

It's an interesting video, but not really applicable to the Jaguar, the two machines have very different architecture. I think the video is designed to show how this game gets around NeoGeo hardware limitations - it has hard limits on the number of tiles both per scanline and per frame. Jaguar has its own limitations and advantages when it comes to handling sprites and is much more flexible by design. Branch objects are a path to success when you want more objects on screen than would otherwise be possible... but they're not going to be any use if your display consists of a number of full screen layers, there would be nothing to branch past. The OP is phenomenal - making use of what it does well is surely the best plan, no?

 

How do you see those concepts applying to Jaguar?. And what better frame rate do you envisage over the 60fps of Metal Slug 3? Maybe the real challenge of reproducing that game or something like it would be coming up with a system to real-time decompress bitmaps to RAM during game play, replacing old assets no longer needed as you progress further into the level with new stuff before it's required. You'd know more about this sort of stuff if you actually interacted with Jaguar with anything other than a joypad, and maybe did some code experimenting, even if it's just with raptor basic as I do - getting real first-hand experience of what the Jaguar is and does might clear some stuff up for you. Just making use of someone else's object handling routines via basic, you'd still be getting at least a feel of the hows and whys and for the limits of what is and isn't doable. Personally I love making stuff with fake a "3D" look like the rubber cube, twister, boingy platformer, bexagon, a new first person shmup I'm making, etc. etc. etc. all 60fps in basic. "2.5D" is something you've mentioned several times, it's rather a nebulous term, but go actually do something other than posting in forums about hypotheticals. You can even do "proper" 3D, I've done 60fps burning vector blitter stuff (thanks to SCPCD for helping me figure out why my lines were perforated :P ) - have a go, get stuck, ask for help - people will be more than willing to assist in my experience. It's fucking good fun!

Edited by sh3-rg
  • Like 8
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...