this image contains text
Life Before Demos
or, Hobbyist Programming in the Early 1980s
by Trixter / Hornet trixter@mcs.com
Technical Notes: This article is a full multimedia hypertext document with
authentic video clips, sound clips, and screen shots from old computer
programs. The following is a table of what formats are included:
Type Format Comments
Video Microsoft Video Uses Microsoft Video 1 codec
for Windows
Graphics JPEG and GIF Support for GIF and JPEG is already built into
most graphical browsers
Sound Sun/NeXT .au Netscape has this built-in naplayer.exe
audio Sun Sparcs and NeXT boxes have native support
This document normally resides at
http://www.cdrom.com/pub/demos/ha/pages/lbd. If you are having problems
connecting to cdrom.com, feel free to check out this article at its mirror
site, at http://boxotrix.it-ias.depaul.edu/lbd.
This document recounts the early days of fun computer stuff on the IBM PC,
so whenever I refer to the computer or a similar generic term, Im talking
about an IBM. If I mention the Tandy sound chip, Im referring to the
sound chip that was present in both the IBM PC Jr. and the Tandy clones
its the same chip.
Introduction
Many demosceners go through changes in life that affect them
profoundly--changes that either bring them into or force them out of the
demo scene. I find myself in the latter, which saddens me a bit, as I have
not yet given back fully to the scene that has given me so much. I also
welcome the change, as it is time for me to pass the baton onward to the
newer generation of people who will redefine what demos are. I look forward
to what tomorrows enterprising youth with a love of computers can bring to
the demo scene, which enters its unofficial 11th year 7th year on the PC.
But the new blood probably has no idea what was interesting before demos
came around in 1990. Sure, everyone can download GR8 / Future Crew and have
a laugh or two, but thats the tail end of what I call the golden age of PC
fun. How did anything become interesting or cool on the PC--a machine with
no dedicated graphics or music hardware? What held our attention before
demos came along?
Good question. Well, this article will attempt to describe the changes in my
life that brought me into the scene--what was interesting to me as I grew up
with a PC, starting out in 1984 with a new 4.77 MHz processor and ending in
1990, the proper birth of the PC scene. It will be fascinating to some, and
only mildly interesting to others, but it needs to be remembered in the sea
of Pentium Pros, Windows 95, and accelerated hardware. Trust me, it used to
be nothing like it is now. :-
Also, I will try to cover some of the more eclectic technical information
unless I dont remember it clearly, so if you want more info on how
something was done, email me and theres a good chance I can find it
somewhere. Hope you can parse BASIC code. :-
So, if youve ever wondered what was interesting or demo-like on the PC
before demos came around, this article will probably explain it. Lets
journey backward, shall we?
The Wonderful World of Games
Lets start briefly with something that held my fascination long before
demos existed and probably what contributed to their birth: Games. Its
not too surprising that the most impressive stuff on any home computer is a
game. Games are, in fact, some of the hardest things in the world to
program, and in the early days, nothing was more true.
Think about it: You had to do many or all of the following: Accept input,
display graphics quickly, play sound effects, process artificial
intelligence and other game elements, and do it all quickly enough so that
the user didnt feel cheated out of a decent gaming experience. Of course,
there was a multitude of problems in doing this on the original PC:
* The CPU, an Intel 8088, was a 16-bit processor 8-bit bus running at
4.77 MHz.
* The sound hardware was a single-voice tone generator with no volume
control.
* The stock graphics hardware CGA was limited to 4 colors, and had an
interlaced memory organization not nice and linear like Mode 13h.
* The bus was so slow that video memory and port writes were
time-consuming simply reading the joystick port took up to 15 of the
CPUs time.
So its obvious that a well-written game that was fast and fun to play was
incredibly impressive, since things just simply werent fast on the PC. I
will mention games liberally in my musings. Just thought youd like to know.
Teaching An Old PC New Tricks
How do you make a bland, boring business computer do something impressive?
Good question. While newer 1984 versions of the PC IBMs PCjr, and Radio
Shacks clone, the Tandy 1000 had more sound and graphics capabilities, the
older PC did not, and that was what had the largest installed user base. So,
you had a couple of areas to improve on: Sound, Graphics, and anything that
would speed up the system. Since a programs first impression was usually
how it looked, many chose to improve the CGA graphics.
CGA Computer Graphics Adapter always struck me as finicky. The video
memory layout was interlaced, which means that the first 8K was every
even-numbered scanline and the last 8K was every odd-numbered scanline.
Plus, there were 192 bytes unused at the end of both 8K sections, so that
became annoying to skip as well. Finally, you had one of two fixed palettes
of nasty, ugly colors cyan, magenta, and white or red, green, and yellow
to choose from. While some of the best artists could deal with four colors
adequately, the crappy color set usually disgusted the user.
Well, I quickly found out that by fiddling with the video registers, I could
get an unadvertised to my manuals, anyway color palette that seemed to
combine the two palettes. The resulting 4-color palette had black, white,
cyan, and red--much nicer. Im sure this palette was advertised somewhere
because some game I had used it, which is what got me sending random bytes
to the video ports in the first place.
Sending random bytes to the video registers, by the way, was extremely
dangerous! If I had known that then, I wouldnt have even tried at all I
was lucky I didnt break anything. The monitors back then 1987 and earlier
were fixed frequency monitors, and ran at low frequencies. If you told the
video card to do something outside of those frequencies, you stood an
excellent chance of damaging the monitor. A friend of mine was trying to get
the rumored CGA 16-color mode to work more on this later and destroyed his
Compaqs built-in monitor, a small monochrome monitor that emulated color
with different shades of gray. He went to the nearest Compaq dealership to
get it replaced, and when they refused to fix it, he answered with something
like, Well, I could demonstrate how easy it is to break the monitor to your
customers by typing in a three-line BASIC program on, oh... this machine
over here, and pointed to their top-of-the-line machine that some customers
were huddled around. They quickly replaced his monitor to shut him up. :-
Lets face it: CGA was crap. The C64 blew it away in terms of speed, and
even an Apple + had more colors to choose from. Anything you could do
above what it was normally used for, quickly or differently, was neat. So, a
bit of experimentation exposed that you could change the background color,
usually black, to one of the 16 text colors. This allowed for a quick flash
possibly for an explosion in a game, which was slightly impressive since
nothing about CGA was quick. This trick was also commonly used to change the
black background to blue, which made it easier to draw bright and colorful
pictures if you didnt need the color black. This same technique could be
used to change the foreground and background color of the monochrome
graphics in CGAs 640x200 2-color mode. Love that 640x200 2.6:1 aspect
ratio--NOT! This wasnt useful for games, but was used to make
black-and-white pictures look less... ugly.
Other palette fun could be had by changing the border color, which was
largely an overscan hack. It was cute to have the border change colors and
not everything else. I didnt even know the border could be a different
color for a while--nothing bothered to change it. Another cute hack was to
write to the ports to change from 320x200x4 to 640x200x2 on the fly without
erasing video memory. This way, you essentially faked a color-to-mono toggle
switch.
The only game I ever ran that used some of the above tricks to do some
primitive copper effects was California Games 1987. Its video selection
menu had the normal CGA 4-color mode, but it also had a mysterious CGA
more-color mode. The more-color mode was only used in two places: The
title screen and the hackeysack portion. Why? Because those screens had a
clear horizontal division of a graphic on the top half of the screen and one
on the bottom half. The more-color mode would switch palettes at a certain
scanline to display one set of colors on the top graphic, and a different
set of colors on the bottom. As you can imagine, this was unnervingly
time-critical, and self-programming vertical-retrace interrupts took too
long hey, you needed all the speed you could get on a 4.77MHz machine, so
this trick only worked on the one machine that they could hard-code the
values into: The original IBM with an original CGA. I always used to think
that this mode didnt do anything until I brought it over to my friends
house and saw it work. It worked pretty well, oddly enough. Maybe I was just
easy to impress. :-
Heres a bit of trivia: Checking for Vertical Retrace has been the same
procedure since CGA on up--you simply monitor port 3dah. Until I discovered
that port, I always wondered why delaying 13 or 14 ms before updating the
screen made it nice and smooth, but thats because 1000 ms / 70 Hz the
screen refresh rate is about 14.2 ms. - Nobody ever bothered to monitor
the vertical retrace port unless they were trying to avoid snow on CGA
screens.
Snow, you ask? What, you dont know about snow? CGA boards, for a reason I
cant remember, displayed snow in text mode whenever you wrote to the
screen memory directly the BIOS writes avoided snow, but were terribly
slow. Since Im typing this article on a CGA PC right now Im not
kidding--my word processor runs in 384k! -, Ill describe what it looks
like: Every time video memory is touched, small horizontal white lines one
character cell wide appear and disappear all over the screen. It can get
really annoying after a while, so many people waited for vertical retrace
before writing to the screen. This was much slower, but reduced snow a great
deal, and was still faster than using the BIOS to output text.
ph@nocom.se had the following extra information to offer: If my memory
serves me right, the snow on the CGA was because when the CPU and the video
card both tried to access the one-ported video memory, the CPU would lock
out the video cards access until the read was completed.
Low Resolution equals More Color
16 colors in graphics mode with a stock CGA board? Believe it or not, there
was not one but two legitimate ways to get more than 4 colors on a CGA card:
An undocumented low res mode which Ill talk about later, and CGAs
Composite Color mode. Both had drawbacks, unfortunately:
* Since you only had 16K of video memory, your effective resolution went
down to accommodate the extra colors--160x200 in Composite mode, and
160x100 in lowres mode.
* Not all PCs had a CGA card with a composite color jack on the back of
their CGA card. The few PC owners that did have one most likely didnt
know how to turn it on if it needed special activation before the
program ran.
* Computer owners that had real monitors had little reason to keep a TV
close to the computer to hook it up for the extra video mode provided
by Composite Color.
But many game companies wanted to have every edge they could over the
competition, so many decided to use it. Starflight from Electronic Arts was
the first mainstream game I can remember 1986 that used it well. The only
drawback, with any sort of compatibility back then, was speed--if all your
graphics were in 16 colors, then you had two problems on your hands: You
either had to convert the 16-color pictures down to 4 on the fly, which was
slow, or you had to provide both sets of converted pictures on the disk,
which took up too much room and cost more money. Remember that back in the
first half of 1980, disks were still fairly expensive--I remember the best
price I could get on a 360K floppy in 1984 was a dollar a disk.
Still, some companies saw the light and did it, and the result was colorful
graphics on almost any system. Besides, you could use a lookup table to
quickly plot the low-res sprites, because a word two bytes plotted 8
pixels in CGA or 4 pixels in EGA/Tandy 16 colors. Plus, this gave
Tandy/PCjr owners some extra speed because they had a native 160x200 mode,
so they got more color without slowing down. California Games from Epyx
supported probably the most graphic options of any game in 1987 using this
technique, including CGA, EGA, CGA more-color see above copper trick,
CGA Composite color, Hercules Mono, MCGA/VGA 16-color, and Tandy/PCjr. All
the graphics and sprites except for the font were in 160x200. Mindscape
also did the same thing with BopnWrestle, Uridium, and Bad Street Brawler
hi Lord Blix!.
Many companies used the 160x200 trick even if they didnt have 16 colors to
store, simply because the sprites took up half the space. All the Maxx Out
games from Epyx like Rad Warrior used this even though the graphics were
mostly 4 colors.
Finally, some adventure game companies found a unique way to store over 200
or more full-screen pictures on a single 360K disk: Vectors. By Vectors,
Im referring to a series of points that define the beginning and end of a
line, outline of a polygon, etc. Regardless of how large or complex the
picture was, you could usually fit a decent-looking scene into about 2K,
because all you were storing were polygon outlines/definitions. A blue
circle with a radius of 100 pixels located at 100,130 could take up over
10K as a raw sprite/bitmap, but it only took up enough bytes to describe
circle, at 100,130, radius 100, color blue when you stored it as its
vector definition. The previous example could take up as little as 7 bytes,
if you did it haphazardly:
Data Size
Draw Element byte
X Coordinate word
Y Coordinate word
Radius byte
Fill Color/Pattern byte
Come to think of it, Im sure the game programmers were much more frugal
than that this was when games had to fit on a single 360K disk. The
previous structure wouldve probably been optimized even further:
Data Size Comments
Draw Element first 3 bits of Holds 8 different types: Square,
first byte Circle, Line, Pixel, Fill Point, etc.
Fill Color/Pattern last 5 bits of Allows for 32 different colors or
first byte patterns
X Coordinate word Must be a word, since the maximum
320 wouldnt fit in a byte 255
Y Coordinate byte Could be a byte, since the maximum
200 fits into a byte 255
Radius byte
So, even though 7 of the 16 bits in the xcoordinate word are wasted and
could be used for even more things, were down to five bytes for the
information required to draw a large circle on the screen. You can pack this
down even further, which Im sure they did, but I included the above merely
as an example into the thought process involved.
Another nice advantage to this system was that you could compose your
pictures with 16 colors and let the drawing algorithm pick the closest color
or dither pattern when it drew the vector objects on the screen at runtime.
But, as with all computer programs, there was the classic speed vs. size
tradeoff: Drawing the polygons took a lot of time, sometimes as much as six
seconds for the picture to assemble, which looked sloppy. There were other
drawbacks to this system as well the artist was forced to use an uncommon
vector-editing program, which usually had to be developed in-house, and the
nature of the whole vector format procedure made it hard to produce pictures
with a lot of fine detail. Still, Sierra used it in Kings Quest I 1983,
and the classic text/graphics adventure Transylvania 1983 from Polarware
used it as well. In fact, when Polarware was still called Penguin Software,
they marketed a vector drawing package specifically built for making small
graphics for games called The Graphics Magician.
Graphics Forged From Text Mode
Ah, now the fun part: 16 color graphics on a standard CGA card. IBM actually
announced this mode in January of 1982, when the second version of the IBM
PC came out its mentioned in their technical documentation, but they
evidently saw no need to provide any real documentation for it unless asked.
I guess nobody asked. :- By the time I finally figured out how to program
the mode, it was 1990 and I had a VGA card, so I never had a chance to use
it in anything. Some games did use it, though, including a good shareware
shoot-emup called Round 42 and two commercial adventure games, one from
Sir Tech remember Wizardry? and another from Macrocom called ICON 1984.
Heres how you program the mode:
The 160x100 graphics mode was actually a text mode. The video registers
were changed so that normal 80x25 color text mode squeezed four times as
many rows of text characters onto the screen to produce an 80x100 text
screen with the bottom 75 of the text characters chopped off. Then, the
screen was filled with ASCII 221, which is the left vertical bar. Each
character on the screen was used for a pair of two horizontally adjacent
pixels by adjusting the foreground and background color of that character.
The blink option on the video board had to be turned off so that pixels
didnt blink when the right-half pixels which use the text background
color had a color value greater than 7. Text characters normally blink if
the background color is in the 8...15 range, but who uses blinking any
more?
Okay, cute trick. You could make it work in todays world by modifing it for
EGA and VGA boards as well on VGA boards, the text character height is
normally 16, so it would be changed to 4. EGA boards, however, normally use
a text height of 14 pixels. There is no way to change the text height to
exactly one quarter of 14 pixels, so a text height of 3 would have to be
used, which is slightly too small, but thats what you get for using EGA
after 1990. :-
Technical details: Blink is suppressed on CGA boards by setting bit 5 of
port 3d8 hex to 0. On EGA and VGA cards, blink is suppressed by using
subfunction 3h, function 10h of interrupt 10h and setting BL to 0. Trivia:
The 160x100 mode uses 16000 bytes at b800:0000 hex to store 16000 4-bit
pixels, which is twice the amount of memory that would be required in a
normal graphics mode--so each even byte of video memory is wasted to store
the ASCII character 221. Moving blocks of video memory around was both fast
and annoying, since only the odd bytes storing the text foreground and
background colors had to be modified.
Well, thats enough about CGAs 16-color graphics mode. I was just so
happy when I figured it out that just had to spew somewhere. :- And ICON?
They added even more depth by using the entire ASCII character set--or, at
least, the top four scanlines of the entire ASCII character set. The bats
wings were the top four scanlines of ASCII 2, which was the smiley! Some
of the results were fantastic, but thats ANSI from hell that I dont think
anyone would want to ever attempt again.
If You Want Something Done, You Have To Do It Yourself
Demosceners are familiar with speeding up graphics with cute math and
hardware tricks. But what do you do when the machine is simply too slow?
Speed up your hardware. It sounds silly, but there were actually several
ways to make the machine run faster--via software--by modifying certain bits
of hardware. For example, the CPU spent time refreshing early DRAM so that
the RAM wouldnt lose its contents. This refresh rate was adjustable and
usually done way too often, so you could usually lower it a bit and gain
more speed for your programs. Speed increases of 5 to 10 were not
uncommon I got a 15 increase by lowering the DRAM refresh rate gradually
until the computer locked up. :- I then used the last setting that didnt
lock up the computer. Handy thing to have in your autoexec.bat, that.
But probably the most common method that game programmers used to speed up
the computer was to go for the guts and bypass the operating system in a big
way--by creating self-booting programs. This solved several problems at the
same time:
* Disk access and loading times were much faster. If you wanted data and
knew where you put it, you seek directly to the track and load the
entire track to somewhere in memory. If you were a real hotshot, you
could trackload manually by not using the BIOS and instead using DMA.
Very quick.
* You had more RAM. The operating system took up at least 32K of ram,
which your program could have used. Hey, PCs came with only 128K of
RAM until around 1985, so you really needed to save RAM. So, make your
entire program fit into 64K and write a little 446-byte bootloader and
you gain that RAM back.
* The machine was empty. There was no operating system to get in your
way, so you could reprogram timers, write obscene self-modifying code,
store data in unused portions of the BIOS or vector table--ACK!,
whatever you wanted to do. If the computer were a parking lot, it would
be an empty parking lot--you could drive like a maniac for hours and
not hit a thing.
Of course, you had to be a damn fine coder to do this. Being merely
proficient in assembler programming wasnt enough--remember all those
friendly DOS services you use? Gone. So, youd better be prepared to write
your own mini-DOS when you needed one.
Sometimes self-booting programs were mandatory it was the only way to have
any decent form of copy-protection. Stuff like that was really hard to
crack. In fact, I dont think anyone in todays world would have the stomach
to attempt it. Not only does the game boot hel-LO!, but it then proceeds
to stomp all over memory, usually obliterating the debugger. Your only
chance is to dump the boot sector and attempt to disassemble it manually.
While the game programmers were tough back then, so were the crackers, so
it got done somehow. The most common programs that come to mind are the
early Accolade and Electronic Arts games Pinball Construction Set and Music
Construction Set forever classics, for example. Of course, the classic
Wizardry did this as well, although it took them two tries to get it right:
The first version of Wizardry was not very friendly to non-perfect-100 IBM
compatibles, so the more you played the game, the less successful the disk
reads were. Odd... The second version played just fine, however. They even
took the time to improve the graphics.
Dont Copy That Floppy
Lets sidetrack for a minute or so on copy-protection schemes. Although they
had nothing to do with graphics or sound explicitly, I still found them
absolutely fascinating, since they were also very hardware-intensive.
Copy-protection, for those too young to remember, was a method of doing
something to the diskette the game came on that made writing a perfect
duplicate impossible, which in turn prevented you from copying the disk and
giving it to all your friends, robbing the software company of potential
sales. A typical method of checking went something like this: When the game
started, it checked to see if it was running on the original diskette by
looking for a specific piece of data stored in an extra sector hidden in a
specially formatted track. If it didnt find that data, it aborted. This
way, you could only make the program run by running it off of its original
diskette. Nowadays, copy-protection is usually as simple as the program
asking you to look up a word on a certain page in your software manual and
type it in, or for CDROM games, checking to see if it is running on the
CDROM device.
Copy-protection used to be included on everything, from games to business
software, simply because software was extremely expensive back then, and a
couple hundred copies of a program could actually make or break a software
company no, Im not kidding. People just didnt buy software all the time
because a typical game for example was 50. Thats normal in 1996, but
very expensive for 1984. Think about it: 50 in 1984 is like 95 today due
to inflation. I dont know about you, but Im not willing to pay 95 for a
computer game.
I wasnt any good at cracking back in 1984 I barely knew general
programming, let alone assembler, so I had to become good at figuring out
the copy protection scheme instead if I wanted to duplicate the program.
While many crackers learned DEBUG inside and out, I learned protection
schemes and how to duplicate diskettes. Heres some of the more interesting
methods that programmers used to prevent you from copying that floppy with
DOSs standard DISKCOPY:
* Simple trickery. Format a diskette as single-sided, but then store the
secret copy-protection information on a track formatted on the second
side. DISKCOPY would read the boot sector, determine that the disk was
single-sided, and only bother copying the first side.
* User stupidity. The program would simply try writing a dummy file to
the disk. Since most commercial software came on write-protected disks,
the write would fail, and the program would continue. But if youd just
made a copy, chances were high that youd forget to write-protect the
disk when you were finished, and the write would succeed, which then
aborted the program.
* Secret hardware information. Most disk drives could actually seek
beyond track 40 usually to 41. Some software companies formatted that
extra track DISKCOPY didnt go that high and stored secret info in
it.
* Wacko disk formats. This is when you go slightly beyond the obvious,
like formatting a normal 9-sector track with 10 or 11 sectors or less,
like 4 or 5. DISKCOPY didnt know how to handle stuff outside the norm
like this, so you usually needed a special program like CopyIIPC or
CopyWrite to analyze the diskette thoroughly, then attempt to duplicate
the format. This was about 66 successful the other 33 you had to do
yourself, usually. Electronic Arts had one of the best schemes in the
early 80s I couldnt figure it out until about 1985. They formatted
track 15 with over 90 sectors! :-D
* Damage. The most expensive method of copy protection was also the most
effective: Physically damage the disk. Using a laser, it was possible
to burn a small hole in the disk surface, and then all the program had
to do was check to see if there was a read error in that particular
sector, and if so, continue running the program. If you turned the disk
surface manually by grabbing the inside ring, you could actually see a
tiny hole in the disk surface!
If it was so easy relatively speaking to figure out these formats, then
why didnt everybody just write bitcopy or nibbler programs to analyze the
diskette and make perfect copies of everything except the laser hole, of
course? It wasnt quite that easy: While the IBM floppy controller could
read all of these formats, it did not have the ability to write all of them.
A third-party company usually the diskette duplication facility itself
specially prepared the diskettes using custom floppy controllers. To this
day I dont know if the read-all-but-not-write-all phenomenon was a decision
made on purpose by IBMs engineers or just a hardware glitch that software
companies took advantage of. Probably a hardware glitch. Either way, I
eventually broke down in 1987 and bought a Copy PC Option Board, which
went between the floppy drive and controller, allowing me to write those
special formats. Trivia: To this day, there is only one diskette I have
never been able to duplicate, even with the help of my Option Board: A Cops
Copylock demo diskette that I sent away for Cops was a third-party
copy-protection library you could purchase to copy-protect your own
programs. I never found any programs that actually used Cops as the copy
protection scheme, which was fortunate, since I couldnt copy it. :-
Your Computer Is Too Damn Loud
Ah, music. Certainly one of the most interesting things done with computers
today in the demoscene in fact, at least twenty times more MOD/S3M/IT/XM
music is being put out per year than demos, and that figure is steadily
increasing. Until Sami came out with Scream Tracker in 1990, there was no
native digital/multi-channel composition program. Heck, until 1986, there
wasnt even any sound hardware you could hook up to your PC. Sure, the PCjr
and Tandy had their own 3-voice sound chip built in, but I didnt have a
Tandy or PCjr.
That didnt stop me. :- Or anyone else, for that matter. People did the
best with what they had, with surprising results for the time and hardware.
Ladies and Gentlemen, I present to you the evolution of composed/tracked
personal computer music hardware and techniques, from the point of a
fledgling demoscener which means Ill conveniently ignore MIDI:
1981-1982
The PC speaker, driven by a chip that could only produce a simple tone
at a fixed volume, was the only thing that kept us company. If it
werent for BASICA, wed live in silence. BASICA had a PLAY statement
that took real notes and octaves you could bang out a melody
relatively quickly, although it was loud and harsh. You could fake a
chord by quickly alternating between different notes at the same time
an arpeggio, but this sounded artificial and bubbly. If you didnt
have a love for computer music, it would quickly drive you crazy.
Pianoman by Neil J. Rubenking was a music composition program that did
this you could compose each voice separately, and then combine them
into an arpeggio. A gentler trick was to adjust the pitch up and down
very finely, simulating vibrato. One voice, but at least it wasnt so
harsh.
1983
The PCjr is released, and Tandy follows suit a year later with the
Tandy 1000, which was a clone of the PCjr. One of the enhancements in
the PCjr was the addition of a 3-voice sound chip that gave multiple
channels, noise generation, tone envelopes, and volume control to the
built-in speaker. Now we had something to play with. The BASICA that
came with the PCjr and Tandy supported a 3-voice PLAY statement, which,
if you played your cards right, could produce some fairly nice sound.
One thing I discovered was that the Tandy chip had a hidden strength in
low chord layering.
1984
Music Construction Set, programmed by Will Harvey, came out for the PC
in 1984 from Electronic Arts. It had a real staff, with treble and bass
clefs, and had a neato construction set motif--you could dragndrop
notes onto the staff before dragndrop was a common catch phrase.
Best of all, not only did it support the native sound chip of the
PCjr/Tandy, but it could play four voices through the normal built-in
speaker! Granted, it was difficult to discern between the voices, but
it was possible to hear the overall chord you were going for. You
could even print out the staff on your printer, although it was one
long staff down the side of the page, and not nicely formatted sheet
music. :-
1986
Mindscape publishes Bank Street Music Writer, the first program I ever
bought that came with its own hardware if you didnt own a Tandy or
PCjr. The Mindscape Music Board was a 6 voice sound card which turned
out to be a sine or square wave generator with simple attack, sustain,
and delay parameters. Not exactly FastTracker 2 envelopes, but it was a
start. :- Plus, it attempted to print out real sheet music, and you
could follow your voices on-screen as they played. I went nuts with
this board, sometimes spending hours arranging the tunes my school
choir was practicing. Although it was very good at producing solid
chords it was a tone generator, right?, it never took off, because
the price was a bit high 110 and it did sound a bit... plinky.
Come to think of it, Music Construction Set for the Apple supported a
similar board called the Mockingboard, but that never took off either.
Im fairly certain that I saw the Covox Speech Thing around this time
as well. The Speech Thing was a simple digital-to-analog converter that
you could connect to your parallel port to hear digitized sound. It
sold for about 70, even though the parts cost about 15--including the
speaker. :-
1987
Adlib. :- This famous board used a chip from Yamaha that produced
Frequency-Modulated FM sound synthesis through 2 operators and a
variety of parameters. You could utilize 9 melodic voices, or 6 melodic
and 5 percussion. Armed with the odd Visual Composer, you could compose
on a piano roll instead of a musical staff. It wasnt bad at all in
fact, it sounded pretty damn good. If programmed correctly, it could
layer voices well, produce decent bass, and fairly full sounds. I still
believe that the Adlib was and still is underused by the majority of
people who composed for it.
While I didnt purchase my Adlib until 1989, the board was actually
selling in 1987, and games started supporting it in 1988. Taitos
arcade conversions done by Banana Development supported it passably,
but it wasnt until 1990 that I heard simply beautiful music through it
from a game called Continuum from Infogramme. The game consisted of
jumping from platform to platform to reach a certain object, but the
music was so good that I booted it up just for the music. It also
supported the Tandy sound chip, but since the music was composed for
the Adlib, it was nowhere near the same quality.
The great former C64 demogroup Vibrants also did some excellent music
composed specifically for the Adlib board, but this wasnt until much
later, in 1993, when they composed music for a few games. Their
composition program, Edlib, is still freely available. Ever hear techno
on an Adlib? :- Their true strength was jazz, which is what they
usually composed.
IBM Music Feature Card. This board was released from IBM in 1987 in an
effort to draw MIDI musicians and game programmers over to the IBM. It
cost about 250, and played 8 FM voices. The quality of the FM was much
better than the Adlib, presumably since it used a 4-operator FM chip
also from Yamaha instead of Adlibs 2-operator chip, and had over 100
built-in instrument parameters. It also had a MIDI port, of course.
Trivia: You could put two of these boards in your PC at the same time
to get a total of 16 simultaneous voices.
1988
Creative Music Systems the name they had before they changed it to
Creative Labs came out with the Game Blaster around this time, and it
offered 12 channels, with each channel producing either a single sine
wave of a given frequency and magnitude in stereo, or noise. The
sound quality was obviously worse than the Adlib--the board simply
couldnt do much of anything. You can still purchase CMS chips to put
inside your Sound Blaster 1.x and 2.0, but its really not worth it.
The only game I know of that supported the CMS Game Blaster with decent
music was was Times of Lore by Origin.
Digitized sound! Around this time, game companies had finally started
to use digitized sound for music. It had been used on the PC for sound
effects as early as 1983, in Castle Wolfenstein/Beyond Castle
Wolfenstein, and in 1987, in the PC version of Dark Castle. While I
had speculated that you could record bits of music and then rearrange
them cleverly, a French game company called Loriciels beat me to it,
with the excellent games Mach 3 1987 and Space Racer 1988 they
also did a then-popular Pong/Breakout/Arkanoid clone called PopCorn.
These games had a really cool for a PC at the time musical intro at
the beginning, which was pieced together from small sound snippets that
were arranged on the fly to form a longer piece of music. You can
think of this as a .MOD file with only one channel and all
instruments/samples played at C3. And it played through the PC
speaker! Coming from a PC that had a simple tone generator as a sound
device, this just blew me away. Crazy Cars by Titus also had a snippet
of digitized sound at the beginning, but this was just a 64K sample
that looped once. The same went for Wizball by Mindscape. Wizball was
a fabulous game, IMHO. Finally, games like BopnWrestle used it for
the counts and body-slamming noises.
1989
The Sound Blaster hits the scene, and game companies start supporting
it. Its essentially an Adlib clone, but it has the ability to record
and playback digitized sound, allowing for speech and decent sound
effects. This information was essentially provided for people who
dont know what a Sound Blaster is. I probably shouldnt have even
written this paragraph, since the infamous Sound Blaster doesnt need
mentioning, but Ive done it already, so... whatever. :-
1990
True Mixing. While many remember TrakBlaster being the first program to
play MOD files on the PC, a couple of people were mixing before then,
most notably PSI / Future Crew. He had created and marketed Scream
Tracker in 1990 as shareware, and it could mix and play up to four
voices in real-time on an 8MHz or faster computer. The early versions
of Scream Tracker supported a mode of operation similar to the old
SoundTracker on Amiga--you could save the song data and instruments
separately. This allowed you to compose over 20 songs and fit them on
the same disk, because you use the same set of instruments with each
song. EGA Megademo / SpacePigs did this--they had four different songs
that used the same instruments, so the whole thing fit onto a single
360K disk.
A Brief Early History of Demos
This has been covered many times before, so I wont rehash The Beginning Of
Demos excessively however, a few tangible examples would probably serve to
help you picture the transition.
Pirating games led to the birth of the demo scene. Its time everyone who is
in deep denial about this fact comes out and accepts it. You can see this in
the early loaders for pirated games as early as 1988 you can see some
demo-like effects in small loaders. The loader for Bad Street Brawler is a
perfect example of this: The screen starts as static then, like a TV pirate
intercepting a TV channel, the screen flickers with the title graphic, until
finally the title graphic is fully displayed. The entire program was only
128 bytes, and was tacked onto the front of a CGA screen dump.
This loader mentality took a while to grow, but it eventually did. Many
early intros were simply one effect, but to be impressive, it had to be an
effect never before seen on the PC. Never before seen meant one of two
things, actually:
* The effect was an Amiga or C64 effect that was translated to the PC
common, or
* The effect was an entirely new effect rare.
Many of the early Brain Slayer intros were good examples of the
Amiga-effect-to-PC trend, and until .MOD playing on the PC became popular,
most early intros had no sound at all.
Rose-colored Glasses
Well, our look back has ended, and not a moment too soon, since Ive taken
up valuable time that you couldve used to write the newest demos. All I ask
is that the next time you take a look at the demos today that contain
incredibly complex 3D objects, particle systems, and multi-channel digital
music, or the next time you compose music with 64 digital channels in
Inertia Tracker, you think about what it used to be like in the old days.
Who knows... Maybe some of you will be as innovative as us old-timers needed
to be in dealing with such limited, slow hardware.
Then again, the driving force behind demos is that the hardware is only as
limited as you think it is. -
Epilogue
It just wouldnt be fair for me to end this article without a list of old
demos that you should check out if you want to see the best of the best back
in the old days from 1990 to 1992. Keep in mind that these demos run at
the full framerate on a 386 running at 16 MHz:
Demo Group Video Sound Support
Chronologia Cascada VGA Sound Blaster, Internal speaker, LPT DAC
Dragnet DCE VGA Sound Blaster
Putre Faction Skull VGA Sound Blaster
Unreal vers. 1.1 Future CrewVGA Sound Blaster, Gravis Ultrasound, LPT
DAC
Vectdemo Ultraforce VGA Sound Blaster
Coldcut Ultraforce EGA Sound Blaster
EGA Megademo SpacePigs EGA Internal speaker, LPT DAC
And, as always, if youre interested about demos in general, please feel
free to free to check out PC Demos Explained or download the PC Demos FAQ
list.
Written by Jim Leonard. Completed September 25th, 1996. Special thanks to
Geoffrey Silverton for some low-level lowres information.
Jim Leonard Trixter / Hornet
trixter@mcs.com
or, Hobbyist Programming in the Early 1980s
by Trixter / Hornet trixter@mcs.com
Technical Notes: This article is a full multimedia hypertext document with
authentic video clips, sound clips, and screen shots from old computer
programs. The following is a table of what formats are included:
Type Format Comments
Video Microsoft Video Uses Microsoft Video 1 codec
for Windows
Graphics JPEG and GIF Support for GIF and JPEG is already built into
most graphical browsers
Sound Sun/NeXT .au Netscape has this built-in naplayer.exe
audio Sun Sparcs and NeXT boxes have native support
This document normally resides at
http://www.cdrom.com/pub/demos/ha/pages/lbd. If you are having problems
connecting to cdrom.com, feel free to check out this article at its mirror
site, at http://boxotrix.it-ias.depaul.edu/lbd.
This document recounts the early days of fun computer stuff on the IBM PC,
so whenever I refer to the computer or a similar generic term, Im talking
about an IBM. If I mention the Tandy sound chip, Im referring to the
sound chip that was present in both the IBM PC Jr. and the Tandy clones
its the same chip.
Introduction
Many demosceners go through changes in life that affect them
profoundly--changes that either bring them into or force them out of the
demo scene. I find myself in the latter, which saddens me a bit, as I have
not yet given back fully to the scene that has given me so much. I also
welcome the change, as it is time for me to pass the baton onward to the
newer generation of people who will redefine what demos are. I look forward
to what tomorrows enterprising youth with a love of computers can bring to
the demo scene, which enters its unofficial 11th year 7th year on the PC.
But the new blood probably has no idea what was interesting before demos
came around in 1990. Sure, everyone can download GR8 / Future Crew and have
a laugh or two, but thats the tail end of what I call the golden age of PC
fun. How did anything become interesting or cool on the PC--a machine with
no dedicated graphics or music hardware? What held our attention before
demos came along?
Good question. Well, this article will attempt to describe the changes in my
life that brought me into the scene--what was interesting to me as I grew up
with a PC, starting out in 1984 with a new 4.77 MHz processor and ending in
1990, the proper birth of the PC scene. It will be fascinating to some, and
only mildly interesting to others, but it needs to be remembered in the sea
of Pentium Pros, Windows 95, and accelerated hardware. Trust me, it used to
be nothing like it is now. :-
Also, I will try to cover some of the more eclectic technical information
unless I dont remember it clearly, so if you want more info on how
something was done, email me and theres a good chance I can find it
somewhere. Hope you can parse BASIC code. :-
So, if youve ever wondered what was interesting or demo-like on the PC
before demos came around, this article will probably explain it. Lets
journey backward, shall we?
The Wonderful World of Games
Lets start briefly with something that held my fascination long before
demos existed and probably what contributed to their birth: Games. Its
not too surprising that the most impressive stuff on any home computer is a
game. Games are, in fact, some of the hardest things in the world to
program, and in the early days, nothing was more true.
Think about it: You had to do many or all of the following: Accept input,
display graphics quickly, play sound effects, process artificial
intelligence and other game elements, and do it all quickly enough so that
the user didnt feel cheated out of a decent gaming experience. Of course,
there was a multitude of problems in doing this on the original PC:
* The CPU, an Intel 8088, was a 16-bit processor 8-bit bus running at
4.77 MHz.
* The sound hardware was a single-voice tone generator with no volume
control.
* The stock graphics hardware CGA was limited to 4 colors, and had an
interlaced memory organization not nice and linear like Mode 13h.
* The bus was so slow that video memory and port writes were
time-consuming simply reading the joystick port took up to 15 of the
CPUs time.
So its obvious that a well-written game that was fast and fun to play was
incredibly impressive, since things just simply werent fast on the PC. I
will mention games liberally in my musings. Just thought youd like to know.
Teaching An Old PC New Tricks
How do you make a bland, boring business computer do something impressive?
Good question. While newer 1984 versions of the PC IBMs PCjr, and Radio
Shacks clone, the Tandy 1000 had more sound and graphics capabilities, the
older PC did not, and that was what had the largest installed user base. So,
you had a couple of areas to improve on: Sound, Graphics, and anything that
would speed up the system. Since a programs first impression was usually
how it looked, many chose to improve the CGA graphics.
CGA Computer Graphics Adapter always struck me as finicky. The video
memory layout was interlaced, which means that the first 8K was every
even-numbered scanline and the last 8K was every odd-numbered scanline.
Plus, there were 192 bytes unused at the end of both 8K sections, so that
became annoying to skip as well. Finally, you had one of two fixed palettes
of nasty, ugly colors cyan, magenta, and white or red, green, and yellow
to choose from. While some of the best artists could deal with four colors
adequately, the crappy color set usually disgusted the user.
Well, I quickly found out that by fiddling with the video registers, I could
get an unadvertised to my manuals, anyway color palette that seemed to
combine the two palettes. The resulting 4-color palette had black, white,
cyan, and red--much nicer. Im sure this palette was advertised somewhere
because some game I had used it, which is what got me sending random bytes
to the video ports in the first place.
Sending random bytes to the video registers, by the way, was extremely
dangerous! If I had known that then, I wouldnt have even tried at all I
was lucky I didnt break anything. The monitors back then 1987 and earlier
were fixed frequency monitors, and ran at low frequencies. If you told the
video card to do something outside of those frequencies, you stood an
excellent chance of damaging the monitor. A friend of mine was trying to get
the rumored CGA 16-color mode to work more on this later and destroyed his
Compaqs built-in monitor, a small monochrome monitor that emulated color
with different shades of gray. He went to the nearest Compaq dealership to
get it replaced, and when they refused to fix it, he answered with something
like, Well, I could demonstrate how easy it is to break the monitor to your
customers by typing in a three-line BASIC program on, oh... this machine
over here, and pointed to their top-of-the-line machine that some customers
were huddled around. They quickly replaced his monitor to shut him up. :-
Lets face it: CGA was crap. The C64 blew it away in terms of speed, and
even an Apple + had more colors to choose from. Anything you could do
above what it was normally used for, quickly or differently, was neat. So, a
bit of experimentation exposed that you could change the background color,
usually black, to one of the 16 text colors. This allowed for a quick flash
possibly for an explosion in a game, which was slightly impressive since
nothing about CGA was quick. This trick was also commonly used to change the
black background to blue, which made it easier to draw bright and colorful
pictures if you didnt need the color black. This same technique could be
used to change the foreground and background color of the monochrome
graphics in CGAs 640x200 2-color mode. Love that 640x200 2.6:1 aspect
ratio--NOT! This wasnt useful for games, but was used to make
black-and-white pictures look less... ugly.
Other palette fun could be had by changing the border color, which was
largely an overscan hack. It was cute to have the border change colors and
not everything else. I didnt even know the border could be a different
color for a while--nothing bothered to change it. Another cute hack was to
write to the ports to change from 320x200x4 to 640x200x2 on the fly without
erasing video memory. This way, you essentially faked a color-to-mono toggle
switch.
The only game I ever ran that used some of the above tricks to do some
primitive copper effects was California Games 1987. Its video selection
menu had the normal CGA 4-color mode, but it also had a mysterious CGA
more-color mode. The more-color mode was only used in two places: The
title screen and the hackeysack portion. Why? Because those screens had a
clear horizontal division of a graphic on the top half of the screen and one
on the bottom half. The more-color mode would switch palettes at a certain
scanline to display one set of colors on the top graphic, and a different
set of colors on the bottom. As you can imagine, this was unnervingly
time-critical, and self-programming vertical-retrace interrupts took too
long hey, you needed all the speed you could get on a 4.77MHz machine, so
this trick only worked on the one machine that they could hard-code the
values into: The original IBM with an original CGA. I always used to think
that this mode didnt do anything until I brought it over to my friends
house and saw it work. It worked pretty well, oddly enough. Maybe I was just
easy to impress. :-
Heres a bit of trivia: Checking for Vertical Retrace has been the same
procedure since CGA on up--you simply monitor port 3dah. Until I discovered
that port, I always wondered why delaying 13 or 14 ms before updating the
screen made it nice and smooth, but thats because 1000 ms / 70 Hz the
screen refresh rate is about 14.2 ms. - Nobody ever bothered to monitor
the vertical retrace port unless they were trying to avoid snow on CGA
screens.
Snow, you ask? What, you dont know about snow? CGA boards, for a reason I
cant remember, displayed snow in text mode whenever you wrote to the
screen memory directly the BIOS writes avoided snow, but were terribly
slow. Since Im typing this article on a CGA PC right now Im not
kidding--my word processor runs in 384k! -, Ill describe what it looks
like: Every time video memory is touched, small horizontal white lines one
character cell wide appear and disappear all over the screen. It can get
really annoying after a while, so many people waited for vertical retrace
before writing to the screen. This was much slower, but reduced snow a great
deal, and was still faster than using the BIOS to output text.
ph@nocom.se had the following extra information to offer: If my memory
serves me right, the snow on the CGA was because when the CPU and the video
card both tried to access the one-ported video memory, the CPU would lock
out the video cards access until the read was completed.
Low Resolution equals More Color
16 colors in graphics mode with a stock CGA board? Believe it or not, there
was not one but two legitimate ways to get more than 4 colors on a CGA card:
An undocumented low res mode which Ill talk about later, and CGAs
Composite Color mode. Both had drawbacks, unfortunately:
* Since you only had 16K of video memory, your effective resolution went
down to accommodate the extra colors--160x200 in Composite mode, and
160x100 in lowres mode.
* Not all PCs had a CGA card with a composite color jack on the back of
their CGA card. The few PC owners that did have one most likely didnt
know how to turn it on if it needed special activation before the
program ran.
* Computer owners that had real monitors had little reason to keep a TV
close to the computer to hook it up for the extra video mode provided
by Composite Color.
But many game companies wanted to have every edge they could over the
competition, so many decided to use it. Starflight from Electronic Arts was
the first mainstream game I can remember 1986 that used it well. The only
drawback, with any sort of compatibility back then, was speed--if all your
graphics were in 16 colors, then you had two problems on your hands: You
either had to convert the 16-color pictures down to 4 on the fly, which was
slow, or you had to provide both sets of converted pictures on the disk,
which took up too much room and cost more money. Remember that back in the
first half of 1980, disks were still fairly expensive--I remember the best
price I could get on a 360K floppy in 1984 was a dollar a disk.
Still, some companies saw the light and did it, and the result was colorful
graphics on almost any system. Besides, you could use a lookup table to
quickly plot the low-res sprites, because a word two bytes plotted 8
pixels in CGA or 4 pixels in EGA/Tandy 16 colors. Plus, this gave
Tandy/PCjr owners some extra speed because they had a native 160x200 mode,
so they got more color without slowing down. California Games from Epyx
supported probably the most graphic options of any game in 1987 using this
technique, including CGA, EGA, CGA more-color see above copper trick,
CGA Composite color, Hercules Mono, MCGA/VGA 16-color, and Tandy/PCjr. All
the graphics and sprites except for the font were in 160x200. Mindscape
also did the same thing with BopnWrestle, Uridium, and Bad Street Brawler
hi Lord Blix!.
Many companies used the 160x200 trick even if they didnt have 16 colors to
store, simply because the sprites took up half the space. All the Maxx Out
games from Epyx like Rad Warrior used this even though the graphics were
mostly 4 colors.
Finally, some adventure game companies found a unique way to store over 200
or more full-screen pictures on a single 360K disk: Vectors. By Vectors,
Im referring to a series of points that define the beginning and end of a
line, outline of a polygon, etc. Regardless of how large or complex the
picture was, you could usually fit a decent-looking scene into about 2K,
because all you were storing were polygon outlines/definitions. A blue
circle with a radius of 100 pixels located at 100,130 could take up over
10K as a raw sprite/bitmap, but it only took up enough bytes to describe
circle, at 100,130, radius 100, color blue when you stored it as its
vector definition. The previous example could take up as little as 7 bytes,
if you did it haphazardly:
Data Size
Draw Element byte
X Coordinate word
Y Coordinate word
Radius byte
Fill Color/Pattern byte
Come to think of it, Im sure the game programmers were much more frugal
than that this was when games had to fit on a single 360K disk. The
previous structure wouldve probably been optimized even further:
Data Size Comments
Draw Element first 3 bits of Holds 8 different types: Square,
first byte Circle, Line, Pixel, Fill Point, etc.
Fill Color/Pattern last 5 bits of Allows for 32 different colors or
first byte patterns
X Coordinate word Must be a word, since the maximum
320 wouldnt fit in a byte 255
Y Coordinate byte Could be a byte, since the maximum
200 fits into a byte 255
Radius byte
So, even though 7 of the 16 bits in the xcoordinate word are wasted and
could be used for even more things, were down to five bytes for the
information required to draw a large circle on the screen. You can pack this
down even further, which Im sure they did, but I included the above merely
as an example into the thought process involved.
Another nice advantage to this system was that you could compose your
pictures with 16 colors and let the drawing algorithm pick the closest color
or dither pattern when it drew the vector objects on the screen at runtime.
But, as with all computer programs, there was the classic speed vs. size
tradeoff: Drawing the polygons took a lot of time, sometimes as much as six
seconds for the picture to assemble, which looked sloppy. There were other
drawbacks to this system as well the artist was forced to use an uncommon
vector-editing program, which usually had to be developed in-house, and the
nature of the whole vector format procedure made it hard to produce pictures
with a lot of fine detail. Still, Sierra used it in Kings Quest I 1983,
and the classic text/graphics adventure Transylvania 1983 from Polarware
used it as well. In fact, when Polarware was still called Penguin Software,
they marketed a vector drawing package specifically built for making small
graphics for games called The Graphics Magician.
Graphics Forged From Text Mode
Ah, now the fun part: 16 color graphics on a standard CGA card. IBM actually
announced this mode in January of 1982, when the second version of the IBM
PC came out its mentioned in their technical documentation, but they
evidently saw no need to provide any real documentation for it unless asked.
I guess nobody asked. :- By the time I finally figured out how to program
the mode, it was 1990 and I had a VGA card, so I never had a chance to use
it in anything. Some games did use it, though, including a good shareware
shoot-emup called Round 42 and two commercial adventure games, one from
Sir Tech remember Wizardry? and another from Macrocom called ICON 1984.
Heres how you program the mode:
The 160x100 graphics mode was actually a text mode. The video registers
were changed so that normal 80x25 color text mode squeezed four times as
many rows of text characters onto the screen to produce an 80x100 text
screen with the bottom 75 of the text characters chopped off. Then, the
screen was filled with ASCII 221, which is the left vertical bar. Each
character on the screen was used for a pair of two horizontally adjacent
pixels by adjusting the foreground and background color of that character.
The blink option on the video board had to be turned off so that pixels
didnt blink when the right-half pixels which use the text background
color had a color value greater than 7. Text characters normally blink if
the background color is in the 8...15 range, but who uses blinking any
more?
Okay, cute trick. You could make it work in todays world by modifing it for
EGA and VGA boards as well on VGA boards, the text character height is
normally 16, so it would be changed to 4. EGA boards, however, normally use
a text height of 14 pixels. There is no way to change the text height to
exactly one quarter of 14 pixels, so a text height of 3 would have to be
used, which is slightly too small, but thats what you get for using EGA
after 1990. :-
Technical details: Blink is suppressed on CGA boards by setting bit 5 of
port 3d8 hex to 0. On EGA and VGA cards, blink is suppressed by using
subfunction 3h, function 10h of interrupt 10h and setting BL to 0. Trivia:
The 160x100 mode uses 16000 bytes at b800:0000 hex to store 16000 4-bit
pixels, which is twice the amount of memory that would be required in a
normal graphics mode--so each even byte of video memory is wasted to store
the ASCII character 221. Moving blocks of video memory around was both fast
and annoying, since only the odd bytes storing the text foreground and
background colors had to be modified.
Well, thats enough about CGAs 16-color graphics mode. I was just so
happy when I figured it out that just had to spew somewhere. :- And ICON?
They added even more depth by using the entire ASCII character set--or, at
least, the top four scanlines of the entire ASCII character set. The bats
wings were the top four scanlines of ASCII 2, which was the smiley! Some
of the results were fantastic, but thats ANSI from hell that I dont think
anyone would want to ever attempt again.
If You Want Something Done, You Have To Do It Yourself
Demosceners are familiar with speeding up graphics with cute math and
hardware tricks. But what do you do when the machine is simply too slow?
Speed up your hardware. It sounds silly, but there were actually several
ways to make the machine run faster--via software--by modifying certain bits
of hardware. For example, the CPU spent time refreshing early DRAM so that
the RAM wouldnt lose its contents. This refresh rate was adjustable and
usually done way too often, so you could usually lower it a bit and gain
more speed for your programs. Speed increases of 5 to 10 were not
uncommon I got a 15 increase by lowering the DRAM refresh rate gradually
until the computer locked up. :- I then used the last setting that didnt
lock up the computer. Handy thing to have in your autoexec.bat, that.
But probably the most common method that game programmers used to speed up
the computer was to go for the guts and bypass the operating system in a big
way--by creating self-booting programs. This solved several problems at the
same time:
* Disk access and loading times were much faster. If you wanted data and
knew where you put it, you seek directly to the track and load the
entire track to somewhere in memory. If you were a real hotshot, you
could trackload manually by not using the BIOS and instead using DMA.
Very quick.
* You had more RAM. The operating system took up at least 32K of ram,
which your program could have used. Hey, PCs came with only 128K of
RAM until around 1985, so you really needed to save RAM. So, make your
entire program fit into 64K and write a little 446-byte bootloader and
you gain that RAM back.
* The machine was empty. There was no operating system to get in your
way, so you could reprogram timers, write obscene self-modifying code,
store data in unused portions of the BIOS or vector table--ACK!,
whatever you wanted to do. If the computer were a parking lot, it would
be an empty parking lot--you could drive like a maniac for hours and
not hit a thing.
Of course, you had to be a damn fine coder to do this. Being merely
proficient in assembler programming wasnt enough--remember all those
friendly DOS services you use? Gone. So, youd better be prepared to write
your own mini-DOS when you needed one.
Sometimes self-booting programs were mandatory it was the only way to have
any decent form of copy-protection. Stuff like that was really hard to
crack. In fact, I dont think anyone in todays world would have the stomach
to attempt it. Not only does the game boot hel-LO!, but it then proceeds
to stomp all over memory, usually obliterating the debugger. Your only
chance is to dump the boot sector and attempt to disassemble it manually.
While the game programmers were tough back then, so were the crackers, so
it got done somehow. The most common programs that come to mind are the
early Accolade and Electronic Arts games Pinball Construction Set and Music
Construction Set forever classics, for example. Of course, the classic
Wizardry did this as well, although it took them two tries to get it right:
The first version of Wizardry was not very friendly to non-perfect-100 IBM
compatibles, so the more you played the game, the less successful the disk
reads were. Odd... The second version played just fine, however. They even
took the time to improve the graphics.
Dont Copy That Floppy
Lets sidetrack for a minute or so on copy-protection schemes. Although they
had nothing to do with graphics or sound explicitly, I still found them
absolutely fascinating, since they were also very hardware-intensive.
Copy-protection, for those too young to remember, was a method of doing
something to the diskette the game came on that made writing a perfect
duplicate impossible, which in turn prevented you from copying the disk and
giving it to all your friends, robbing the software company of potential
sales. A typical method of checking went something like this: When the game
started, it checked to see if it was running on the original diskette by
looking for a specific piece of data stored in an extra sector hidden in a
specially formatted track. If it didnt find that data, it aborted. This
way, you could only make the program run by running it off of its original
diskette. Nowadays, copy-protection is usually as simple as the program
asking you to look up a word on a certain page in your software manual and
type it in, or for CDROM games, checking to see if it is running on the
CDROM device.
Copy-protection used to be included on everything, from games to business
software, simply because software was extremely expensive back then, and a
couple hundred copies of a program could actually make or break a software
company no, Im not kidding. People just didnt buy software all the time
because a typical game for example was 50. Thats normal in 1996, but
very expensive for 1984. Think about it: 50 in 1984 is like 95 today due
to inflation. I dont know about you, but Im not willing to pay 95 for a
computer game.
I wasnt any good at cracking back in 1984 I barely knew general
programming, let alone assembler, so I had to become good at figuring out
the copy protection scheme instead if I wanted to duplicate the program.
While many crackers learned DEBUG inside and out, I learned protection
schemes and how to duplicate diskettes. Heres some of the more interesting
methods that programmers used to prevent you from copying that floppy with
DOSs standard DISKCOPY:
* Simple trickery. Format a diskette as single-sided, but then store the
secret copy-protection information on a track formatted on the second
side. DISKCOPY would read the boot sector, determine that the disk was
single-sided, and only bother copying the first side.
* User stupidity. The program would simply try writing a dummy file to
the disk. Since most commercial software came on write-protected disks,
the write would fail, and the program would continue. But if youd just
made a copy, chances were high that youd forget to write-protect the
disk when you were finished, and the write would succeed, which then
aborted the program.
* Secret hardware information. Most disk drives could actually seek
beyond track 40 usually to 41. Some software companies formatted that
extra track DISKCOPY didnt go that high and stored secret info in
it.
* Wacko disk formats. This is when you go slightly beyond the obvious,
like formatting a normal 9-sector track with 10 or 11 sectors or less,
like 4 or 5. DISKCOPY didnt know how to handle stuff outside the norm
like this, so you usually needed a special program like CopyIIPC or
CopyWrite to analyze the diskette thoroughly, then attempt to duplicate
the format. This was about 66 successful the other 33 you had to do
yourself, usually. Electronic Arts had one of the best schemes in the
early 80s I couldnt figure it out until about 1985. They formatted
track 15 with over 90 sectors! :-D
* Damage. The most expensive method of copy protection was also the most
effective: Physically damage the disk. Using a laser, it was possible
to burn a small hole in the disk surface, and then all the program had
to do was check to see if there was a read error in that particular
sector, and if so, continue running the program. If you turned the disk
surface manually by grabbing the inside ring, you could actually see a
tiny hole in the disk surface!
If it was so easy relatively speaking to figure out these formats, then
why didnt everybody just write bitcopy or nibbler programs to analyze the
diskette and make perfect copies of everything except the laser hole, of
course? It wasnt quite that easy: While the IBM floppy controller could
read all of these formats, it did not have the ability to write all of them.
A third-party company usually the diskette duplication facility itself
specially prepared the diskettes using custom floppy controllers. To this
day I dont know if the read-all-but-not-write-all phenomenon was a decision
made on purpose by IBMs engineers or just a hardware glitch that software
companies took advantage of. Probably a hardware glitch. Either way, I
eventually broke down in 1987 and bought a Copy PC Option Board, which
went between the floppy drive and controller, allowing me to write those
special formats. Trivia: To this day, there is only one diskette I have
never been able to duplicate, even with the help of my Option Board: A Cops
Copylock demo diskette that I sent away for Cops was a third-party
copy-protection library you could purchase to copy-protect your own
programs. I never found any programs that actually used Cops as the copy
protection scheme, which was fortunate, since I couldnt copy it. :-
Your Computer Is Too Damn Loud
Ah, music. Certainly one of the most interesting things done with computers
today in the demoscene in fact, at least twenty times more MOD/S3M/IT/XM
music is being put out per year than demos, and that figure is steadily
increasing. Until Sami came out with Scream Tracker in 1990, there was no
native digital/multi-channel composition program. Heck, until 1986, there
wasnt even any sound hardware you could hook up to your PC. Sure, the PCjr
and Tandy had their own 3-voice sound chip built in, but I didnt have a
Tandy or PCjr.
That didnt stop me. :- Or anyone else, for that matter. People did the
best with what they had, with surprising results for the time and hardware.
Ladies and Gentlemen, I present to you the evolution of composed/tracked
personal computer music hardware and techniques, from the point of a
fledgling demoscener which means Ill conveniently ignore MIDI:
1981-1982
The PC speaker, driven by a chip that could only produce a simple tone
at a fixed volume, was the only thing that kept us company. If it
werent for BASICA, wed live in silence. BASICA had a PLAY statement
that took real notes and octaves you could bang out a melody
relatively quickly, although it was loud and harsh. You could fake a
chord by quickly alternating between different notes at the same time
an arpeggio, but this sounded artificial and bubbly. If you didnt
have a love for computer music, it would quickly drive you crazy.
Pianoman by Neil J. Rubenking was a music composition program that did
this you could compose each voice separately, and then combine them
into an arpeggio. A gentler trick was to adjust the pitch up and down
very finely, simulating vibrato. One voice, but at least it wasnt so
harsh.
1983
The PCjr is released, and Tandy follows suit a year later with the
Tandy 1000, which was a clone of the PCjr. One of the enhancements in
the PCjr was the addition of a 3-voice sound chip that gave multiple
channels, noise generation, tone envelopes, and volume control to the
built-in speaker. Now we had something to play with. The BASICA that
came with the PCjr and Tandy supported a 3-voice PLAY statement, which,
if you played your cards right, could produce some fairly nice sound.
One thing I discovered was that the Tandy chip had a hidden strength in
low chord layering.
1984
Music Construction Set, programmed by Will Harvey, came out for the PC
in 1984 from Electronic Arts. It had a real staff, with treble and bass
clefs, and had a neato construction set motif--you could dragndrop
notes onto the staff before dragndrop was a common catch phrase.
Best of all, not only did it support the native sound chip of the
PCjr/Tandy, but it could play four voices through the normal built-in
speaker! Granted, it was difficult to discern between the voices, but
it was possible to hear the overall chord you were going for. You
could even print out the staff on your printer, although it was one
long staff down the side of the page, and not nicely formatted sheet
music. :-
1986
Mindscape publishes Bank Street Music Writer, the first program I ever
bought that came with its own hardware if you didnt own a Tandy or
PCjr. The Mindscape Music Board was a 6 voice sound card which turned
out to be a sine or square wave generator with simple attack, sustain,
and delay parameters. Not exactly FastTracker 2 envelopes, but it was a
start. :- Plus, it attempted to print out real sheet music, and you
could follow your voices on-screen as they played. I went nuts with
this board, sometimes spending hours arranging the tunes my school
choir was practicing. Although it was very good at producing solid
chords it was a tone generator, right?, it never took off, because
the price was a bit high 110 and it did sound a bit... plinky.
Come to think of it, Music Construction Set for the Apple supported a
similar board called the Mockingboard, but that never took off either.
Im fairly certain that I saw the Covox Speech Thing around this time
as well. The Speech Thing was a simple digital-to-analog converter that
you could connect to your parallel port to hear digitized sound. It
sold for about 70, even though the parts cost about 15--including the
speaker. :-
1987
Adlib. :- This famous board used a chip from Yamaha that produced
Frequency-Modulated FM sound synthesis through 2 operators and a
variety of parameters. You could utilize 9 melodic voices, or 6 melodic
and 5 percussion. Armed with the odd Visual Composer, you could compose
on a piano roll instead of a musical staff. It wasnt bad at all in
fact, it sounded pretty damn good. If programmed correctly, it could
layer voices well, produce decent bass, and fairly full sounds. I still
believe that the Adlib was and still is underused by the majority of
people who composed for it.
While I didnt purchase my Adlib until 1989, the board was actually
selling in 1987, and games started supporting it in 1988. Taitos
arcade conversions done by Banana Development supported it passably,
but it wasnt until 1990 that I heard simply beautiful music through it
from a game called Continuum from Infogramme. The game consisted of
jumping from platform to platform to reach a certain object, but the
music was so good that I booted it up just for the music. It also
supported the Tandy sound chip, but since the music was composed for
the Adlib, it was nowhere near the same quality.
The great former C64 demogroup Vibrants also did some excellent music
composed specifically for the Adlib board, but this wasnt until much
later, in 1993, when they composed music for a few games. Their
composition program, Edlib, is still freely available. Ever hear techno
on an Adlib? :- Their true strength was jazz, which is what they
usually composed.
IBM Music Feature Card. This board was released from IBM in 1987 in an
effort to draw MIDI musicians and game programmers over to the IBM. It
cost about 250, and played 8 FM voices. The quality of the FM was much
better than the Adlib, presumably since it used a 4-operator FM chip
also from Yamaha instead of Adlibs 2-operator chip, and had over 100
built-in instrument parameters. It also had a MIDI port, of course.
Trivia: You could put two of these boards in your PC at the same time
to get a total of 16 simultaneous voices.
1988
Creative Music Systems the name they had before they changed it to
Creative Labs came out with the Game Blaster around this time, and it
offered 12 channels, with each channel producing either a single sine
wave of a given frequency and magnitude in stereo, or noise. The
sound quality was obviously worse than the Adlib--the board simply
couldnt do much of anything. You can still purchase CMS chips to put
inside your Sound Blaster 1.x and 2.0, but its really not worth it.
The only game I know of that supported the CMS Game Blaster with decent
music was was Times of Lore by Origin.
Digitized sound! Around this time, game companies had finally started
to use digitized sound for music. It had been used on the PC for sound
effects as early as 1983, in Castle Wolfenstein/Beyond Castle
Wolfenstein, and in 1987, in the PC version of Dark Castle. While I
had speculated that you could record bits of music and then rearrange
them cleverly, a French game company called Loriciels beat me to it,
with the excellent games Mach 3 1987 and Space Racer 1988 they
also did a then-popular Pong/Breakout/Arkanoid clone called PopCorn.
These games had a really cool for a PC at the time musical intro at
the beginning, which was pieced together from small sound snippets that
were arranged on the fly to form a longer piece of music. You can
think of this as a .MOD file with only one channel and all
instruments/samples played at C3. And it played through the PC
speaker! Coming from a PC that had a simple tone generator as a sound
device, this just blew me away. Crazy Cars by Titus also had a snippet
of digitized sound at the beginning, but this was just a 64K sample
that looped once. The same went for Wizball by Mindscape. Wizball was
a fabulous game, IMHO. Finally, games like BopnWrestle used it for
the counts and body-slamming noises.
1989
The Sound Blaster hits the scene, and game companies start supporting
it. Its essentially an Adlib clone, but it has the ability to record
and playback digitized sound, allowing for speech and decent sound
effects. This information was essentially provided for people who
dont know what a Sound Blaster is. I probably shouldnt have even
written this paragraph, since the infamous Sound Blaster doesnt need
mentioning, but Ive done it already, so... whatever. :-
1990
True Mixing. While many remember TrakBlaster being the first program to
play MOD files on the PC, a couple of people were mixing before then,
most notably PSI / Future Crew. He had created and marketed Scream
Tracker in 1990 as shareware, and it could mix and play up to four
voices in real-time on an 8MHz or faster computer. The early versions
of Scream Tracker supported a mode of operation similar to the old
SoundTracker on Amiga--you could save the song data and instruments
separately. This allowed you to compose over 20 songs and fit them on
the same disk, because you use the same set of instruments with each
song. EGA Megademo / SpacePigs did this--they had four different songs
that used the same instruments, so the whole thing fit onto a single
360K disk.
A Brief Early History of Demos
This has been covered many times before, so I wont rehash The Beginning Of
Demos excessively however, a few tangible examples would probably serve to
help you picture the transition.
Pirating games led to the birth of the demo scene. Its time everyone who is
in deep denial about this fact comes out and accepts it. You can see this in
the early loaders for pirated games as early as 1988 you can see some
demo-like effects in small loaders. The loader for Bad Street Brawler is a
perfect example of this: The screen starts as static then, like a TV pirate
intercepting a TV channel, the screen flickers with the title graphic, until
finally the title graphic is fully displayed. The entire program was only
128 bytes, and was tacked onto the front of a CGA screen dump.
This loader mentality took a while to grow, but it eventually did. Many
early intros were simply one effect, but to be impressive, it had to be an
effect never before seen on the PC. Never before seen meant one of two
things, actually:
* The effect was an Amiga or C64 effect that was translated to the PC
common, or
* The effect was an entirely new effect rare.
Many of the early Brain Slayer intros were good examples of the
Amiga-effect-to-PC trend, and until .MOD playing on the PC became popular,
most early intros had no sound at all.
Rose-colored Glasses
Well, our look back has ended, and not a moment too soon, since Ive taken
up valuable time that you couldve used to write the newest demos. All I ask
is that the next time you take a look at the demos today that contain
incredibly complex 3D objects, particle systems, and multi-channel digital
music, or the next time you compose music with 64 digital channels in
Inertia Tracker, you think about what it used to be like in the old days.
Who knows... Maybe some of you will be as innovative as us old-timers needed
to be in dealing with such limited, slow hardware.
Then again, the driving force behind demos is that the hardware is only as
limited as you think it is. -
Epilogue
It just wouldnt be fair for me to end this article without a list of old
demos that you should check out if you want to see the best of the best back
in the old days from 1990 to 1992. Keep in mind that these demos run at
the full framerate on a 386 running at 16 MHz:
Demo Group Video Sound Support
Chronologia Cascada VGA Sound Blaster, Internal speaker, LPT DAC
Dragnet DCE VGA Sound Blaster
Putre Faction Skull VGA Sound Blaster
Unreal vers. 1.1 Future CrewVGA Sound Blaster, Gravis Ultrasound, LPT
DAC
Vectdemo Ultraforce VGA Sound Blaster
Coldcut Ultraforce EGA Sound Blaster
EGA Megademo SpacePigs EGA Internal speaker, LPT DAC
And, as always, if youre interested about demos in general, please feel
free to free to check out PC Demos Explained or download the PC Demos FAQ
list.
Written by Jim Leonard. Completed September 25th, 1996. Special thanks to
Geoffrey Silverton for some low-level lowres information.
Jim Leonard Trixter / Hornet
trixter@mcs.com
log in to add a comment.