Introduction:
Since me and Spkr/SMFX live relative close by, we talk to eachother with some regularity. In our talks he kept hyping Atari ST development as well as the Sommarhack party which he helps to organize. Problem was that I hadn't coded for the 68000 CPU before, so there was quite a steep learning curve for me trying to get to know the platform.
Learning 68000 Programming:
Luckily the register naming was pretty straight forward (D0..D7 and A0..A7) but I ran into lots of trouble with memory alignment and the Source->Dest way of writing assembler code.
To help me practise, I've written some tooling to generate an extremely small sinetable (also released at Sommarhack 2022) as well as a small tool to help generate color palettes from code.
Since the Atari ST is pretty bare-bones with no custom blitter chips. You can write color-lookups and bitplane data directly to memory or use the (extremely slow) built-in Line-A routines to plot some pixels.
Shiraz (256 Bytes, Atari ST):
From learning how to code for the Atari ST, I slowly moved to the development of my intro for Sommarhack 2022. The intro title is a reference to Shiraz Shivji, one of the engineers who developed the Commodore 64 and the primary designer of the Atari ST.
Visuals:
I wanted to create something that I could write using the built-in Line-A drawing routines, which are incredibly slow to use. Therefore I need to create some kind of setup where I could precalculate a couple of animation frames using code, and use those to playback realtime later with some color-animations on top for variation.
Reactor core using polar distortion
This intro uses something which i call a polar distort effect, squeezed down a bit to give it that 'reactor' type of shape.
U = (x-160)
V = (y-100) * 2
Z = (U*U+V*V) / constant
X = U / Z
Y = V / Z
color = X&Y
To keep the audience occupied during precalculation, as well as covering for the amount of precalculation that is happening, I wanted to keep the audience entertained with a simple visual effect with some minimal audio.
So after the main animation system and shape were working, it was time to code up the rest of the magic trick
Keeping the audience distracted while precalculation is happening
This was quite tricky to pull off, but after every horizontal line of precalculated data, I will swap the display buffer to a different area and use that to update and draw a fractalish line pattern to show to the viewer, and then switch back to precalculation the next line data.
Audio:
The Atari ST is known for its high quality built-in MIDI support. Therefore this intro features MIDI / MT-32 audio, but will work in theory with any MIDI synthesizer connected to the built-in MIDI-out port.
Venturo (128 Bytes + Header, Atari ST):
After the long development of Shiraz was completed, I started to wonder how small I could get the animation setup, completely skipping on any sound and progression. After a bunch of optimisations I ended up with something that came close to the 160 bytes that are allowed for a 128 byte ST intro + header.
Once I had some hope this could be done, I started to work to a more concrete production for the Silly Venture 2022 128 byte ST Intro Competition. I wanted to generate a shape that still had that 3D tunnel feel without the complex trigonometry and looked impressive enough on a smaller size budget.
* Calculate Absolute Centerpoint X/Y ( ax=abs(x-160) ay=abs(y-100)
)
* Calculate UZ space that is bended 45 degrees ( U=ax-ay Z=ax+ay
)
* Calculate Final UV values ( X=(U*4)/Z Y=255/Z
)
* Calculate Final Color Texture using binary operation( color = (X&Y)
)
On TOS Headers:
During my deepdive into the Atari ST sizecoding scene, I learned about the exclusion of the 32-byte TOS header in some of the tiny intro competitions, essentially resulting in a 288 byte intro.
These practices made little sense to me, as the platform is more than capable to deliver nice tiny intros in 256 bytes (header included) and I made sure that my 256 byte intros would include the TOS header. For some extra practise I also optimised a couple of existing Atari ST tiny intros to fit in the original 256 byte size limit.
Though it makes a little more sense to exclude the header for 128 byte intros, I'm hoping to adopt a similar approach for 128 byte intros. Venturo was a little bit too ambitious to have the header included, but in subsequent releases I tried to include a 128 byte on disk version as well as a 128+32 version with some extra stuff included like sound included.
Conclusion:
I was happy to see that both intros were received well and won their respective competitions. The only slight regret is that the pixel-skipping in combination with the blue-purple color scheme made the overall visuals appear a bit dark on some monitors.
For more information, you can check out the intros at demozoo: Shiraz (2022) / Venturo (2022)