Amiga Demomaking - Story of a coder in 100 steps

Hello. My name is Christophe KOHLER. I'm 39 year old (in 2012) and working as video game creator till 12 years now. When I was yuong, I've been involved in the Amiga demo scene during 9 years (from 1989 to 1998). I was 16 years old at the time and had really lot of fun using Amiga computers.

I took much pleasure writing these pages. First because it reminded some good memories. And secondly because I wanted to explain how the amiga computer worked and what have been our work on them.


Step1: Definition of a "demo"

Wikipedia says: A demo (demonstration) is a non-interactive multimedia presentation made within the computer subculture known as the demoscene. Demogroups create demos to demonstrate their abilities in programming, music, drawing, and 3D modeling. The key difference between a classical animation and a demo is that the display of a demo is computed in real time, making computing power considerations the biggest challenge. Demos are mostly composed of 3D animations mixed with 2D effects and full screen effects.

That is a good definition. A "demo" is something artistic and technical that you simply watch. The same way you watch a painting or you listen to music. The main advantage of using computer is that all arts (drawing, music, programming) can be merged to create something beautiful and useless.

One of my A500. Photo taken in 2012. I've bought two A500 this year (because I did not had one before this. My A500 had died around 1990).

Step2: How I discovered "demos"

I discovered computer at the age of 12. There were some computers in my school ("mo5" computer from Thomson). I was enjoying playing games but I also started programming. That was very funny. Some time later I got my first computer at home. That was the faboulous C64. I was 13. I played lot of games but also looked at "intros" added before games and later full "demos". I wanted also to created some. I also wanted to create game. I bought a book about programming (assembler), but I never succeded to do something because I was missing the tool for programming. That was a frustration for me.

At 14-15 I bought another great computer: The Amiga 500. I had much contacts (no internet at that time, hard to get help) and this time I got the right tool to program:  seka (or "kseka").

Then I started creating demos.

When I saw the game "Hybris" in end 1988, I decided to buy an Amiga. Music and arts were so impressive.

I've also been really impressed by "Sword of Sodan". The size of the characters and the audio were unbelivable for that time. The stage in the cemetary is my favorite (5'00 on the video).

And some of the classics of the Amiga demos

The juggler (1986)

The demo is an animation, contain on one full disk. The animation have been rendered using a raytracing software. The images are displayed using the "HAM" special mode ("Hold and Modify" each pixel color is relative to the previous one, that allow to display up to 4096 colors).

Walker demo (1988) Animation
 

Step3: Choosing a nickname

When you are an "artist", you always choose a nickname. That the same for programmer (which are also kind of "artists" right ? :) ). Before the Amiga 500, I choosed "Alex Pix" as nickname. surely because I already loved pixels. When I started using the Amiga 500 I decided to choose another one. I decided to create one group with a friend and his brother (remember, demos are make by demo group). He proposed names around satanism (yeah youngs people like strange and forbid things). So we created "Satan Crack Band" and his name was "Belial" and mine "Oriens". "Oriens" sounded nice so I said ok.

"Oriens" is the name if a demon. I that time, I did not know anything about demons (neither today). Searching the internet give this info: "Oriens" is the "demon of the east". And sadly he is also one of the forgotten demons in the official lists!! So you will not find much about this poor little "Oriens". Anyway, a name is just a name, so I keep this one.

Here is one picture I've drawn on Amiga 500. Inspired from "Choose Your Own Adventure" book illustrations.


 

  

Step4: Programming on an Amiga 500 - 1989

In 1988, I started programming stuffs on my amiga 500. I was 15 years old. I had one book called "The bible of the amiga" (in fact I got it later, this was the reference) and some assembly courses published into a game magazine called "Gen 4". The lesson were written by one demomaker François Fleuret ("MajorFatal" for his nickname, not sure about this). There was one article about scrolling. So I typed it and managed to make it worked. That was the start point of the first demo I've done (see next step). (In fact the original code is for a sinus scroll, I changed the wave to be flat :) )

gen4_-_n10_-_avril_1989_page_074_et_075.jpg
gen4_-_n10_-_avril_1989_page_076_et_077.jpg
gen4_-_n10_-_avril_1989_page_078_et_079.jpg
gen4_-_n10_-_avril_1989_page_080_et_081.jpg
gen4_-_n10_-_avril_1989_page_082_et_083.jpg
gen4_-_n10_-_avril_1989_page_084_et_085.jpg
gen4_-_n10_-_avril_1989_page_086_et_087.jpg
gen4_-_n10_-_avril_1989_page_088_et_089.jpg

(Full magazines at http://www.abandonware-magazines.org/ )

In order to create executable on Amiga, you need a "compiler". This is a tool that convert your program (called "source code") into an executable binary. The source code I used are files with the ".s" extension.
There were two main compiler on amiga. Kseka / AsmOne in one hand and devpack in another hand. I mainly used the first ones.

AsmOne (was called Kseka before, this is quite the same program) is a real nice program. It is what we call now an "IDE" (Integrated Development Environement). That means you can everything when launching AsmOne.

Here is one picture:

The tool is mainly divided into two parts: The command part, and the text editor. You can switch from one to another by pressing the "esc" key.

I've recorded a video showing how to create one very simple program. On the video you can can these steps:
1/ Launch AsmOne
2/ Choose memory type and amount of memory to allocate for our text and program. "Chip" memory is the base memory of Amiga 500. "Fast" memory is the extra memory you can add by plugin a memory extension. Video buffers can not be in fast memory.
3/ Press 'esc' to go into text editor.
4/ Type the following code:
loop:
        move.w $dff106,$dff180
        bra loop
(in fact this is the dummy version of the program, because this is infinite loop and never end. In the video it is a clever version that exit using a counter).
5/ Exit the text editor window by pressing 'esc'
6/ Assemble (or compile) the source code with command 'a'
7/ Execute with command 'j' (jump).
You can see some colors appearing on screen. This is because the program is a very fast loop where the value of the electron beam (changing very quickly) is put into the color 0 (the back colors). So you can see lot of colors (each 8 pixels a new color). The D0 register is used to loop 65000 times, which is equivalent to 2 second approximatively.



So now you have done your first program!
Let's see something more complicated

Step5: HAWK "First demo" November 1989


















At my school, I met Philippe ("Johnny-B") who was also using an Amiga 500 to create arts and musics. We decided to create something together. We spend many nights creating this demo. The text is in french but I can explain what is said inside: This is the story of 4 characters: Johnny-B, Me (Oriens), the computer (Amiga), and the manufacturer (Commodore). during the demo, the computer is taking control of the demo and add some text. It is a 4 characters dialogue.


 

I can not remember why we decided to called ourself "Hawk". I guess this was because a hawk looks nice. The logo with the colored hawk is really nice. The starting text said: "Once uppon a time. In a land of confusion. A band was reborned from dust. And it was called: Hawk". This was surely a reference to Genesis. The dust is something linked to the pheonix (close to hawk :) ). So we were reborned and born at same time. Nice shot.

As the text have many special characters, we typed it into a basic programme (should be gfa basic) and then convert it to asm table.

Demo can be downloaed there: Hawk_1989_FirstDemo.dms

Source code and data are there: Sources

Sadly some data are corrupted but the source code is complete (see commented version HERE).

Here is the full video of the demo: (12 mins)


 

 

 

 

 

 

 

 







About Music:

Music is a cover of Alba - Only Music Survives (1985).

Intro of music features voices from "Dragnet" (radio or TV serie, I do not know). "(Their job...) to enforce the laws, and preserve the safety of decent citizens."

Music module can be downloaded here (109 Kb)

About Arts:

The first messages are in "hi res", that means 640x512 pixels resolution.

The main screen is composed of 4 parts:

1/ The running mens (3 plans, 8 colors, 1 transparent)


2/ Small scrolling. 1 plan (means 1 color)


3/ Big scrolling. 1 plan (means 1 color)


4/ The "Hawk" logo (4 planes, 22 colors).


A bit of technical infos:

Check the commented source code : DEMO.S

The commodore Amiga 500 have been released in 1987.  The main cpu is a 68000 motorola at 7 Mhz. The fastest langage to programm is direcly 68000 assembly. There is 512 Ko of RAM. There are dedicated processors that make that machine very interesting. We'll see that later. The display can be 320x256 pixels up to 640x512 pixels. It can display 32 colors from a palette of 4096 colors.

Back to the demo. There are 4 running characters and two scrollings. Horizontal scrolling is done using the "blitter" processor (made for copying data). Once one character is out the screen on the left, another one is copied on the right. The interessant part is about the colors and reflect effet. It is using the processor called "Copper". This is surely one of the main technical faboulous thing of the Amiga. The "copper" is a processor that can execute "lists". The lists are synchronized with display. It can wait position on screen and then put value in registers. The registers are here.  You can change colors, scrolling values, video pointer, and many others.
For example, in this demo, you can see:

dc.l $300ffffe,$01800000
dc.l $310ffffe,$01800001
dc.l $320ffffe,$01800001
dc.l $330ffffe,$01800001
dc.l $340ffffe,$01800002
dc.l $350ffffe,$01800002
dc.l $360ffffe,$01800002
dc.l $370ffffe,$01800003
dc.l $380ffffe,$01800003
dc.l $390ffffe,$01800003
dc.l $3a0ffffe,$01800003
dc.l $3b0ffffe,$01800004
dc.l $3c0ffffe,$01800004
dc.l $3d0ffffe,$01800005
dc.l $3e0ffffe,$01800005
dc.l $3f0ffffe,$01800005
dc.l $400ffffe,$01800006
dc.l $410ffffe,$01800006
dc.l $420ffffe,$01800007
dc.l $430ffffe,$01800007
dc.l $440ffffe,$01800008
dc.l $450ffffe,$01800008
dc.l $460ffffe,$01800009
dc.l $470ffffe,$01800009
dc.l $480ffffe,$01800009
dc.l $490ffffe,$0180000a
dc.l $4a0ffffe,$0180000a
dc.l $4b0ffffe,$0180000a
dc.l $4c0ffffe,$0180000b
dc.l $4d0ffffe,$0180000b
dc.l $4e0ffffe,$0180000c
dc.l $4f0ffffe,$0180000c
dc.l $510ffffe,$0180000d
dc.l $520ffffe,$0180000d
dc.l $530ffffe,$0180000e
dc.l $540ffffe,$0180000e
dc.l $550ffffe,$0180000f
dc.l $560ffffe,$0180000f
dc.l $570ffffe,$0180000f
dc.l $580ffffe,$0180000e
dc.l $590ffffe,$0180000d
dc.l $5a0ffffe,$0180000c
dc.l $5b0ffffe,$0180000b
dc.l $5c0ffffe,$0180000a

Each line is composed of one wait instruction (from line 48 (0x30) to line 92 (0x5c) ) and one register change: 0xdff180 is the register for background color (color 0). The copper can only change register after adress 0xdff000, so only need to write "180" to acess 0xdff180. This is a nice vertical blue gradient. This is the gradient behind running character.


The "water" effect is also done using copper list. The video pointer can be changed so for each line, we change the video pointer to the previous lines. The wave effect is done using the scrolling register.
That means all gradient colors and water effect are not using any cpu.
That also mean that the number of colors is higher that is really displayed. There are 27 colors displayed with bitplanes. The total colors one screen is 88. The 61 extra colors are created using the copper.

The source code is complete. But some data are corrupted. Source code is a bit ugly and have some strange labels ("hihi" "superman"). All is written in assembly 68000.

After the demo have been finished:

The demo was sent to our contacts and it also have been added to one compilation (dms link above). One of my friend Laurent "GLG" (means "Gaston La Gaffe") added it into one of his compilation. I coded one small intro for this pack.

 

 

 

 

 

 

 

 

 







And here is the menu of that compilation

 

 

 

 

 

 

 

 

 







No idea if lot of people saw this demo but we were quite happy with it.

Some nice demos of that time:

Unit A - Crack Intro

DOC - Demons are forever

Ackerlight - Crack intro ("1, 2, 3, 4!")



If you want to see more demos of that period, check that nice youtube compilation: HERE

Step6: What can I do with a computer ?

I remember one day in my early engineer carreer, a recruiter asked me "What is the function of a computer?".  As I did not gave the correct answer he said "A computer is used to outup the result of an operation". How to explain him that a computer can also be used for art ? I just said "ok" and did not get the job :)

In my early childhood I used computers to play games. That was the primiry function of it for me. Other people use computer to work. We are not going to deal with that here. Let's talk about underground scene.


On the creative part, computers can be used for:
- Visual art (pictures, animations)
- Audio (music, sounds fx)
- Programmation (real time)
This can be done for games or demos.
For game, there is also "game design" job, but this was not existing at that time. It was often the technical team that were also creating game mecanisms.

Around games, there were also lot of activities:
- Cracker (for programmers)
- Supplier (providing new original games)
- Swapper (send cracked game by snail mail)
- Board onwer (having server at home)

I've never been attracted by the cracking activity.  For me that was not interesting part of programming (that is intersting, but not for me). So I tried  the three first activity:  Drawing,  Composing musics and programming.

Drawing:

On Amiga drawing was done using software "Deluxe paint".  That was nice soft to draw and animate picture (the step by step animation system was really great). I realized some piec of art but result was quite average and I spent many time on it. Obviously I did not have any gift for that.

Here is on drawing I've made.


Music:

Since I was younger, I practised music. First drums, then organ. I really loved it (still today).  But I have a very bad ear and composing is painful to me. Although I made lot of tries composing musics, I've never reach satisfactory level of quality.

Programming:

This is the part were I naturally felt good. Programming was easy and fun to me. That's surely why I spent so much time in it. Programming on Amiga was hard but I really liked it. So I harldy studied the documents and learn step by step. In all following chapters I'll act as a programmer.




Step7: Intros for Dino, End 1989 to May 1990

Glg introduced me to one of  his friend Saer "Dino". He was a member of the C64 group "Yankees". For some reasons I can not remember, he asked me if I can code some intros for him. He was really nice, so I said yes of course. I coded three simple intros. You can see the videos after.

Intro1

Simple intro with scrolling



No idea where music and art came from. I do not have source code or data for this one.

Intro 2

Bouncing intro.

Arts done by me, so not very nice indeed.

Music from Pasi Liimatainen "Drucer". Name "loadermuzak".

The technical point here was to move big "bobs". A "bob" was the name for a moving element. You can also call it "sprite" (but on Amiga, they were hardware sprite, so can be confusing if not using them).

Sources & Data : 1990-05-Intro_DinoII.zip

Source code: INTRO.S

Intro 3

This is surely the best intro of the 3.

Arts:

Font have been done by a friend of mine, Jerome "Aragorn". He'll soon joined HAWK under the name of "Kreator". We'll see that later.


Music:

Music from Jochen Hippel ("Chambers of Shaolin" game), excellent song. Futur composer format. See next step for explanation about that format.

A bit of technic:

Source code and Data: 1990-05-Intro_DinoIII.zip

Source code: DINO3.6.s

The arts are all in 1 color. The intro heavily use the color changes using the copper. It also use the "decay" register (0 to 16 pixels) to create the wave effect.

The horizontal color scrolling is done using multiple color change on the same line.

The copper list is this one:

    DC.L    $2735FFFE
COLOR:   
DC.L $01800000,$01800000,$01800000,$01800000,$01800000,$01800000
DC.L $01800000,$01800000,$01800000,$01800000,  $01800000,$01800000
DC.L $01800000,$01800000,$01800000,$01800000,$01800000,$01800000
DC.L $01800000,$01800000,$01800000,$01800000,$01800000,$01800000,$01800000

You only have to fill that fill with color values to create the moving horizontal line effect. One wait instruction, and then 25 color changes. Changing a register takes some times. Roughly the display beam move 16 pixels while one register is beeing changed. Thats why you do not need any "wait" instruction. That also means that you can not modifiy register in less than 16 pixels width size. there are some tricks for that, we'll see that later.

I wrote nice header in the source code. Check it in the source code HERE.

The intro executables can be found into: Hawk_1990_OldIntros_Oriens.zip


Step8: 68000 Motorola Processor

The main component of the Amiga 500 is the CPU. It is a motorola processor 68000.


The speed is 7 Mhz (!)

The CPU is 16/32 bits (internal registers are 32 bits). There are 16 registers:

D0 to D8 : Data register

A0 to A8 : Adress register

SP (Stack pointer) is equivalent to A7.

There are 56 instructions. One instruction size can go from 16 bits to longer size.

For example:

Instruction "RTS" (Return from subroutine) is 0x4E75.

Instruction "NOP" (No operation) is 0x4E71.

Full list of instructions HERE.

The format for writing instruction is SOURCE,DEST. For example "Move #4,d0" will copy value 4 (source) to register D0 (destination). Some processor (like intel) used the inverse notation (Instruction Dest, source).

The CPU have 7 levels of "interuptions", we'll see that later.

Step9: Creating musics

SoundTracker:

In the end of the 8 bit generation, musics started using with audio samples. Before that music often used generated sounds, like sinus or triangle waves. These songs are also called "chip tunes". When 16 bits computers arrived, they had enough memory for audio samples to be used. The system of "Tracker" from 8 bits computers was reused and software like "SoundTracker" were created. Not sure it is the first one on Amiga, but it was the first I discovered. Over time, the principle also stayed the same.

Amiga have 4 audio channels.

Here is a video taken from internet, showing how SoundTracker run.

In fact, it is a step sequencer. For each step, you can specify a note played by one sample, and/or effect to be applied. There was volume effect, vibratos, speed, and lot of others.

The first version of SoundTracker also came with sample disk. They where called "ST-XX". ST-00 was the first. The music you are earing on the video surely use samples from the ST-00 disk.

The big advantage of using trackers is that software also came with Assembly "replay" routine. To play a music from your game/intro/demo you only had to include the source code of the player and call it from your program. It was magic!

Futur composer:

Waveforms trackers (chip music) also existed on Amiga. I was using "Futur composer". It looks the same as a wave tracker, but also use synthetic sounds.

Here is a video taken from net showing how futur composer runs:

You can listen to FC music on windows, using for example one software done by a friend of mine: ST-SOUND by Leonard/Oxygen. Web site here : http://leonard.oxg.free.fr/ You can also use winamp plugin "Oldsk00l MOD player".

The big advantage of these musics is that they were very small (in bytes size).

Some nice demos of that time:

The Red Sector Inc. Megademo

Ackerlight - The Last Sun (Love the music!)

Spreadpoint intro

Step10: M.A.D, cracking band, November 1989

With Johnny-B, we already started preparing another "Hawk" demo. Our friend Glg introduce us to Stinger, a friend of him which was on C64 scene before ("Transcom" group). He wanted to create a cracking band on Amiga and require some people to create the intros. As we were opened to new experience we accept working on intro for that new group.

The group was called "M.A.D". It is acronym for "Mutual assured destruction", which is a military philosophy. Later the group will become "Paradox" but we'll see that later.

We met Stinger several times and start working on two intros.

We choosed other nickname for that "extra" adventure. Jake and Elwood, reference to the Blues Brothers movie.

Stinger gave me the internal "MAD" magazine. I still got the paper version at home.


Intro 1

Nice font and scrolling. The logo have a bit weird pespective. The basic technic is the same as "Hawk" first demo.



Nice font (4 colors):

Source and data: 1989-11-Intro_MadTiny.zip
Source code: TINY-INTRO-MAD.S

Intro 2

This one was more technical. It displays a real time circular text scrolling.



The font used (each letter is in a vertical orientation, to easy the line drawing):

Sources and data: 1989-11-Intro_MadCirculaire.zip
Source code: INTRO.S

The music is cover of "Peter Gunn" theme from Blues Brother. You can listen to the original HERE. The intro voice is from Sigue Sigue Sputnik "M.A.D" music. Listen it HERE.

For real time scrolling, I use one special feature of the blitter processor.  The blitter can draw line using 16 pixels mask. So in that intro all letters in the circular part are displayed by drawing lines with the blitter (and using the letter pixels as mask). The theory was nice but when coding it, I realised that the number of lines was limited. That's why there are some bars in the circular part, to reduce the number of total lines.

I found one module that was not used. It is Futur composer module from "Dr Gang" (also SML) : DR GANG.MAD.fc

   The intro executables can be found into: Hawk_1990_OldIntros_Oriens.zip

Step11: "The Strike Force", July 1990

I also met some nice people from another group called "The Strike Force" (TSF). I can not remember how I came to met them. Maybe with our french "Minitel" which was an early version of internet. They were one server for computer geek called "R-TEL". (One article in french)


One of the good side of the demo scene is that you often meet new people. And you learn a lot from each new people. So I met Martin "Striker" and Stephane "Annakin". They also introduced me to lot of people, we'll see that later.

From an old disk I get the list of T.S.F members:

STRIKE , ANNAKIN , MAC Z , CYBER , NIFAS , ACES , WOLLFY , MGS.

So I made one intro for them

Intro

The font is the same as into the Dino intro and logo was a bit ugly. The intro feel empty. The logo was "flying" and go between the scroll.

Source and Data: 1990-07-Intro_TSF.zip
Source code: INTRO3.S

I had a better logo made by Striker, but it was not used (maybe I received it after creating the intro). Here it is:


And guess what .....  I also cracked one game for them. What ?? a crack ?? me ????
In fact, it was not really a crack, because as I previously said I was not interested into cracking game. But when I first tried the game "Operation Stealth", I noticed that the developper forget to remove one feature: When pressing one key, you could switch to the empty workbench screen. Idea came to display there a picture with protection answer. That's how I "cracked" that game. I'm now very ashame of that because "Operation Stealth" is a very good french game (surely one of the best adventure game on Amiga) and later, I worked with some former people from Delphine Software. So big sorry for that. In another hand, they were others real cracks of the game that were quickly done later and mine was not the most swapped version. You can still find it on the internet.
I took another nickname for this : "Sai". (A sai is a traditionnal japanese small sword).
Here is a video of it, with intro at the beginning.



Music by ZZZAX "SpaceShip 505".
This music is a cover of "The droids" by "The force" in 1976.



There is also another version, with another intro done by Eureka (a very nice and good coder). You can find it there.

You can find the versions on internet under names:
Operation Stealth (1990)(Delphine)(Fr)(Disk 1 of 3)[cr Strike Force].adf
Operation Stealth (1990)(Delphine)(Fr)(Disk 1 of 3)[cr Strike Force][a].adf
...

Step12: Amiga Commercials in France

Here is the most commun advert that was shown in France:


Amiga was also associated to 2 tv presenters: Igor and Grichka Bogdanoff
They presented a show talking about science and future. The name was "Temps X". Here is the full Amiga 500 presentation video (sorry in french):


Before having an Amiga 500, I was very impressed by the adverts showing great arts. Once I've heard a real demonstration of the Amiga 500 playing music. That was great.

Step13: Vocabulary - Part 1

You've read many things until here. But did your understood everything ? Maybe you need some explanation of the most commun terms used in the Amiga demoscene.

Demo: Non interactive program, combining technical skills and artistic knowledge (art and audio).

Reel Time: Everything you see is computed by the computer

Pre-computed: Some data (or everything) may be computed before the demo start.

Intro: Small demo.

Cracktro: Intro used on a game that have been unprotected (=cracked)

Coder: Programmer. The person whe is in charge of the programmation part.

Source code: This is what a programmer write. Most common langage on Amiga is "Assembly".

Assembler: Tool used to write source code and convert into binary executable.

Gfx: Piece of art. Done by a Graphic Artist.

Module: Piece of music. Usually file named a "mod". Done by a musician.

Tracker: Software used to write music modules.

Demo group: Bunch of guy who are creating demos.

Scrolling: Text wich is moving on screen. Usually right to left, and can have any lenght.

Sinus scroll: Scrolling which ondulate.

Next steps

In the same time, our new HAWK production was finished. And it was HUGEEEEEEE!

See it in the next step : GOTO PART 2

You can send question/comments or things you would like to see here at my email: consolecoder@hotmail.com


 

r>