Belgian Amiga Club

Phew... I made it.

My first "production" for the Amiga is released.

It's Ordo - a visual story about the endless cycle of ORDER and CHAOS.

Soure is available on GitHub - video version is here.

The graphics are fine, but from a technical point of view, it isn't much.
It's 100% blitter , no sprites, no bobs, no copper.

Still so much to learn :-)

Some notes:

  • I'm puzzled with the memory management on the Amiga ... I know the audio and graphics chips can only access chip memory, but how do you copy from fast to chip mem?
    I would expect that just to be a "CopyMem" operation. This does work on kickstart 3.1 but not on kickstart 1.3. Why? To be investigated.
    This is why Ordo needs 1MB of chip ram to run - but the good part is: it does run on a Amiga 500, that was the goal.
  • I have no idea how to keep the audio and the video in sync. I guess there has to be a main loop dat waits for the VBL signal and that drives both the mod player and screen refreshes. to be investigated.
  • I have no idea how to integrate a decompression mechanism. Currently all data files are uncompressed raw data, hence the large filesizes and long loading time. A better approach would be to compress the data files, load those in fast ram and decompress them when needed to chip ram. To be investigated.
  • System Friendly C code is slow ... for example the "FillRect" function feels really sluggish, especially on kickstart 1.3. I guess at some point I do want to integrate some assembly into the mix. Maybe use C to orchestrate everything, but use assembly for the low level heavy lifting.
  • I'm wondering what the best way is to load graphical data and get it in a usable form: currently I load raw bitplanes into chip memory, create an "Image" with a pointer to that memory, draw that image on a RastPort so I can use it in a View.
    That feels like a lot of overhead. There must be a simpeler way.

Still, it was a great experience.

It was released at the RSync Demoparty in Leuven and won 1st place - yay!
The audience seemed to appreciate that is was "different than usual" and it was an actual concept, telling a story.

Of course, it's "different" because I have no idea how to do all those cool effects you see in other demos, haha.
But maybe that "soft area" of the demoscene is not a bad place to operate.

By the way - RSync was GREAT fun! I kind of already figured out I would like the demoscene, but sweet tangerines... it's really remarkable to find so many like minded spirits in one spot ...

Update 1:
Ah - I finally figured out why there are such timing differences between systems. On most of my machines I have fBlit installed, which patches soms system functions to use the CPU instead of the blitter.
Turns out I wasn't using the blitter after all on my development machines :-)
Doh!

Update 2:
Found a simpeler way to preload graphics data in FAST memory.
I didn't realize yet that AllocRaster is very similar to AllocMemory and returns a pointer to the allocated memory.
I can then just CopyMem to that pointer.
The only drawback is that I have to copy each plane separatly.
Example on -> https://github.com/steffest/amiga-c/blob/master/FastToChip/better.c

and for keeping the Audio and video in sync, this seems promising https://eab.abime.net/showthread.php?t=116663

Written on 08/01/2024 by Steffest

This article is part of the Wanderings in Amiga dev-land blog