Marko Mäkelä’s old computers: Veni vidi Vic!

Commodore VIC-20, Commodore’s first microcomputer designed for the home consumer market, introduced in 1981 or maybe already in 1980, was quite a success, in spite of the poor quality of the software available for it. When the Commodore 64 was introduced in late 1982, nobody wanted to buy its older brother any more, and proud Commodore 64 owners laughed at the VIC-20’s poor technical capabilities:

The Commodore 264 series can be considered the successor of the VIC-20. It was also based on an integrated video and sound chip, which also offered high-resolution graphics and some timer functions, but produced poor sound and lacked sprites.

Anyway, the Commodore VIC-20 was not as poor as the Commodore 64 users believed. Game ports like Atlantis showed that you can do raster effects with it. Unfortunately most programmers never made use of all the features the VIC-20 has. The VIC-20 market died before the microcomputer scene really started, with all those cool intros and demos that pushed the Commodore 64 hardware into new limits.

In addition to the more advanced machine language demos, there were quite a lot of demos written in BASIC.

Veni vidi Vic!

You can download the demo for PAL-B or NTSC-M computers. In order to view the whole demo, you will need an 8 kB memory expansion and a 1541 compatible disk drive.

Update (October 23, 2004): The demo was re-released with full source code (including the previously closed-source music by Jonas Hultén that was not part of the original source code package, and including support for the Commodore 1581 disk drive contributed by Pasi Albert Ojala). Download the updated PAL-B or NTSC-M multi-part executables. The stand-alone executables for those parts that can be run on an unexpanded VIC-20 are not included in the new packages.

In 1995, I began to think that it is time to show the Commodore users two things:

  1. The VIC-20 is capable of much more than people think
  2. You do not need to belong to the 31i+3 ScEnE and to jealously hide your secrets in order to write a good demo

I developed a stable raster routine for the VIC-20 and wrote an article for the C=Hacking net magazine, issue 10: Making stable raster interrupts (C64 and VIC-20). At that time, I did not have enough interest to write a whole demo, but I decided to start coding later, as I got some e-mail from some VIC-20 users in the autumn of 1995, and as I needed some project to prevent the boredom in military service, which I was doing at that time.


Veni vidi Vic! was mainly created in 1996 by me, Marko Mäkelä. I wrote the raster interrupt macros (remember, the 6560/6561 VIC-I videochip does not support raster interrupts) for DASM and coded two effects that I had planned a long time, a checkerboard zoomer and a copper scroller with colour bars rotating around it. The term copper scroller refers to the Amiga, which has a special chip for modifying the video chip registers depending on the raster beam position. In this copper part, the 6502 is busy changing the screen colour for more than half of the screen area, and the whole part with graphics updates and music takes almost all processing power.

Later, in May 1996, as I got long holidays from the military service, I designed a fully timing-independent protocol for the serial bus and wrote a timing-independent loader for drives with 1541-compatible serial bus hardware and for all Commodore computers with serial bus. This protocol is described in the prlink package (later cbmlink), and the source code is also separately available from Stephen Judd’s The Fridge. As you might guess, I used the VIC-20 version in the demo. The demo got two new parts: a huge bitmap scroller that scrolls the demo name over the screen, and a vector rotation part, which was based on the code in the C=Hacking 10 article by Stephen Judd and George Taylor. The code was adapted for the VIC-20 and optimized by me.

Originally we planned to have the demo finished by Tribute ’96. It was originally announced to be in June, and most of the demo was actually finished by late May, including some music by Anders Carlsson with Adam Bergström’s music routines. Adam contributed two demo parts for the project: a 2D bitmap rotator and a plasma effect. All we needed was a reasonable end part, and some time for finishing the demo.

In the summer, there was a long pause, because I went to Germany and had no TV or monitor for my VIC-20. (Yes, I was optimistic enough to take my VIC-20 with me.) When I visited Asger Alstrup’s place in Denmark, I took my equipment with me, and we went a bit nostalgic. Asger coded a skeleton of a good music routine for the VIC-20.

In the autumn, it seemed like everyone had lost interest in the project. Not much happened; I corrected some slight bugs in the effects and Anders wrote some new music. After the autumn term was over, I finally decided to finish the demo for The Party ’96. I got some music from Jonas Hultén, who had refused to publish the source code for his music, even for us, even though he and Adam suggested that we would use his music in the demo. I restructured and optimized Adam’s demo parts and NTSC fixed Jonas’ music, and included my IRQ loader in Adam’s parts. I also wrote an end part with 8 scrollers and a Morse code blinker for the floppy drive. I spent about 10 days with the demo, and finally got it finished in the Christmas evening. This demo has some unique properties:


I uploaded the demo to FUNET’s VIC-20 demo collection and e-mailed it to other members and to Jens Schönfeld, our fake member, because The Party rules required that the coder must be present. Jens was going to The Party anyway, and he took the demo to the WiLD Compo, which had no hardware restrictions for the entries. As you might guess, none of the 5 prizes were awarded to the VIC-20 demo with its whopping hardware requirements: 13½ kB of memory (yes, the demo requires an 8-kilobyte memory expansion, although some parts run on an unexpanded VIC-20), 40 kB of disk usage and 300 kIPS of processing power. No, there were too many entries that featured minutes of precalculated ray-tracing animations that were calculated on a network of powerful workstations, and other cruel things. It’s funny to see that the winning entry, which must have used thousands of times more computing power, main memory and disk space than our Veni vidi Vic! demo, only got 3272 votes, 7 times more votes than our entry, which was ranked 6th with 442 votes. Thanks to all our voters! There were 30 entries for the WiLD compo according to Jens Schönfeld; 22 of them were displayed.


You might wonder why I chose the title Veni vidi Vic!. If you are familiar with history, you might know that Caius Julius Caesar, the famous Roman Emperor, used to say veni, vidi, vici, meaning I came, I saw, I conquered (thanks to Miguel Gordillo for the correction). When the VIC-20 was introduced in Finland, there were stupid television commercials that said Veni vidi VIC! Build the city of Rome in two days with the VIC-20!. (As you might know, an old rumour has it that Rome was built in two days.) This commercial was so stupid and childish that I had to pick that name.

What you might not know is that I bought my first VIC-20 in 1991, five years after I got my first computer, the Commodore 64. I wanted to create something own on the VIC-20. As you see, it took another five years to reach this goal. Hmm, I got my Commodore 16 in 1994; maybe you should wait for a C16 demo around 2000. No, maybe you will have to wait until my retirement.