Amiga
Demomaking - Story of a coder in 100 steps
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 demosThe 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) AnimationStep3: 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 (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)
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) 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)
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: 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 ? 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: 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
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 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". Some nice demos of that time: The Red Sector Inc. MegademoAckerlight - 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: 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 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
|
|