New on the blog: my last post specifically on Amiga hardware for awhile, I suspect. This works multiplexed sprites into the little shooting gallery game I've been developing as an example, and gives us a reasonable look into the division of labor between hardware and software on the system.

https://bumbershootsoft.wordpress.com/2024/12/21/amiga-500-finishing-the-shooting-gallery-project/

#retrocomputing #amiga #amiga500

Amiga 500: Finishing the Shooting Gallery Project

This week we’ll finish the little Amiga 500 shooting gallery game we’ve been writing. The last step, as it was in its Atari parallels, is to expand the animation and simulation systems …

Bumbershoot Software
Since I'm now at the end, this is also where I end up having to grapple properly with a couple of @TomF 's offhand comments months ago about how the the OCS's sprite system is only redeemable because of the Copper. With one exception from two weeks ago, I never touched the Copper in sprite logic, and even there it was so that I could manage one of my sprites act more like the simpler Atari 2600 logic than like the Atari 800 logic.

I don't think that's what he meant. So instead I sat down and sketched out how far you could get by making every aspect of the system as dynamic as possible, and got a vision of a system that basically erases its existence from the end user's perspective.

If you push everything absolutely as hard as you can, you can end up in a world that looks like a slightly more powerful bob-based system than the full system you actually have.

Which feels like a letdown, but I also think it's inevitable.

@mcmartin So to clarify - I do not consider the built-in "autoincrement" sprite DMA reuse to be very useful. Because they have to be contiguous lists, as soon as sprites start moving, you end up copying a lot of data around very frame - either rearranging sprites in a single DMA channel, more moving sprite data from one DMA channel to another.

It gets even worse if you want 15-colour and/or wider sprites.

At that point, might as well just blit them :-)

@mcmartin The way you solve this is to have the Copper feed the sprite hardware. So each frame the CPU's setting up command lists, but the data stays where it is.

I think comparing the Amiga to the 8-bit Ataris is... sure. Same designers, after all. But its actual contemporaries were the Megadrive and SNES which had vastly better sprite tech. Without the Copper, it can't keep up.

@mcmartin So maybe that's the fundamental disagreement. You decided you'd try to push the thing to its limit without using the Copper.

I long ago decided the Copper is the heart of the machine, and of course I'd be using it! So I never really tried NOT to use it.

@TomF Going back to check, the restriction I set myself was "keep chip memory as static as possible during ordinary operation."

But just to make sure: do I understand you correctly that you'd be fabricating a fresh Copper list every frame, ending each one with a write to COP1LC to flip to the next frame's list? And that this list would include the necessary palette and SPRnPT writes to reset the sprite DMA state for each instance of each sprite?

@mcmartin Correct. Every frame, I would be constructing a whole new Copper list (to be executed on the following frame) that commanded the sprites, the blitter, the framebuffer scroll/distort, and the various colour palette changes on the appropriate scanlines.

So I take that as a fixed assumption. Once you start with that mind-set, you slot all the other pieces of the machine in around that assumption.

...

@mcmartin Specifically for the sprites, I would have each sprite be directly updated by the Copper, and the pixel data for the sprite just sit in the same place it was loaded from disk. If I need a sprite multiple times, the Copper points it at the same data multiple times as we go down the scanlines.
@TomF Checks out. I had to invent some terminology so that I could split hairs as necessary between these cases, but I update parts of the Copper list in place to handle facing changes on the player's blaster.

@TomF And that's the real disagreement, spawned, I think, by me coming to the system late. Once I consider that workflow, it *quenches* rather than kindles any passion for the platform. It puts me back in the place I reached swiftly with the other 16-bits: "oh, it's a modern system, but worse and more inconvenient."

Now, sometimes that's what I want - I plan to play with m68k coding idioms a bit next year and the A1200 will be ideal - but UAE ends up becoming DosBox in a way Mesen just doesn't.

@mcmartin Part of this is why I helped invent my own, called #Mega68k. It's the A500 as I would have liked it to have been built, with the lessons learned 20 years later. No bitplanes. Make the Copper the center of everything. Make it better. Make the Blitter simpler, but more flexible. Put some decent sprites in it. It's the spirit of Amiga without all the annoying stuff.

One day we'll ship it. One day.

@TomF I'm almost positive the first discussion I'm remembering was *about* the Mega68k, but I never found anything about it besides a category on eniko's blog. Does it have some kind for formal home?
@mcmartin Sadly no. The whole thing got parked because both of us had other Real Life things taking our time. One Day (TM) we'll dust it off again.

@TomF I'm harsher than that; the Amiga sprites are noticeably weaker than the not only the Mega Drive and SNES but *the NES and arguably even the MSX1* - having the hardware remove the need for scene-sorting is just that important.

My obsession with the Ataris here is less as a parallel and more as a gesture as to where all this came from; the story from 2600 to 800 to OCS struck me as one of *cumulative* and *incremental* improvements, on a path never imitated.

For a reason, it turns out...

@mcmartin Absolutely - I love the continuity of people involved in that series of machines! And in my fanfic version of history they looked at the competition and thought "should we build this really complex hardware?" and then someone pointed at the Copper and they went "oh, ha, nevermind". It's a genius little unit.
@TomF I recall my question at the time was "Copper? Surely the Blitter is what gets you out of this mess?" so that checks out.
@mcmartin Well yes, but the Copper commanding the Blitter :-)
@TomF I have complicated feelings about the fact that to do this on the OCS you have to flip off a safety that they specifically call THE DANGER BIT to let Copper command the blitter.
@mcmartin Pffft. People go on about the Amiga OS being so great. First thing I did was cripple the OS to get it out of my hair. ALL YOUR BYTES AND CYCLES ARE MINE.

@TomF I was never impressed by Apple's "Windows 95 is Apple 84" campaign, and the more I learned about Classic Mac OS over the years the more contemptuous I got of it.

Workbench 1.3, though, absolutely *can* claim to be Win95 class with a straight face.

The A1200 is competing with "install Linux on a simulated Atari ST" here, and yeah, I'll take WB3 over that.

@mcmartin The concept of a games machine having an OS was always funny to me. Especially one without virtual memory. It was just goofy.