Small Beginnings: The development of Homogenic


Homogenic was my first tiny intro that I released. It won first prize in the Rsync 2020 tiny intro competition. Its been a little while since the creation of the intro and the writing of this article, but I try to remember as best I can ;-)


The main effect is based on some algorithm that i've used at work to simulate spots on a film strip, but upon implementing this i'd realised this could work for a 256byte intro, so I made an attempt at recreating this effect in 256 bytes.

The effect itself is a small interative loop that does a simple transform on the input coordinates, scaling it each step of the loop.

Looking back at it, the code was far from optimised, with an inefficient palette and many bytes wasted on the FPU side by swapping fpu registers in and out of temporary memory variables.

I wouldn't recommend anyone using this to base your own stuff, but it might be interested for some of you to look at, as if watching a baby take its first steps.

Music Routine:

The music routine is a routine that loops and retriggers a low kind of midi bass sound, whilst playing a few drum notes every now and then. I'd put the drum data at the end of the code, so that the first one or two drum notes are always triggered as planned, but the other sound will depend on the data in memory, giving it more variation.

mov dx,331h ; set midi to uart mode (3f)
mov al,3fh
out dx,al
dec dx
inc si
inc byte [si] ; increase music counter
mov bl,byte[si]
jnz nosound
mov si,musicdata ; play note
mov cl,6
rep outsb
mov al,bl ; play every 4th tick
and al,3
jnz nodrum
mov al,099h ; play drum sound
out dx,al
mov al,bl
mov bx,drumdata
and al,31
xlat ; ode to ile/aarbei (his favorite instruction)
out dx,al
mov al,127
out dx,al
mov al,20h ; end of irq
out 20h,al
db 35,35,35,42
db 0c3h,95,93h,28,127


Looking back on this intro, i can see many things i would approach differently. But all things considered, i'm still proud of how the final product ended up given my skill level at the time.

For more information, you can down the intro complete with sourcecode at:

Return to blog overview