In 2015, the CRTC and Hornet demo groups redefined the capabilities of PC XT and CGA with a highly acclaimed demo). Years later, they gathered their strength and finally released their latest creation on the same topic – Area 5150. It was put up for demo Evoke 2022 and took first place there in the demo category for alternative platforms (where everything that was not a modern PC was piled up), bypassing even a very creative work 420 Years Of Teletext.
The demo runs on a 1981 IBM PC Model 5150, the very first personal computer from IBM, in a configuration better known as PC XT: 16-bit Intel 8088 processor at 4.77 MHz, 640 kilobytes of RAM, CGA graphics adapter, hard drive and PC Speaker . This platform was infamous for its poor graphics and audio capabilities, in particular, 4-color graphics in a flashy, usually black-and-white-violet-blue palette. This is what lies on the surface and what the software of those years was limited to, but, as it turned out, the CGA video adapter is fraught with many surprises, and the Area 5150 again changes the idea of its real capabilities.
I was fortunate enough to join the demo’s writers as a guest musician, tasked with curbing the hapless PC Speaker, whose single-channel square wave music plays throughout the bulk of the demo. The final part with credits also features a cool one-channel MOD-like digital track from cTrix.
High definition graphics
I was not involved in the development of effects, and the authors still have not rolled out the promised full-fledged making of, so I can only guess about many technical details along with the audience. Nevertheless, the authors explained the main points in the comments on various forums, and it is necessary to at least briefly answer the question that arises from the audience in the first place – how did you manage to combine high-resolution graphics and a 16-color palette on CGA.
The first part of the idea: the 16-color CGA palette is available only in text mode, and in 80×25 text mode the final image has a high pixel resolution of 640×200. It would seem that the solution lies on the surface: we simply load elements of our graphics instead of a font, and we get at least limited, but high-resolution graphics. This trick was sometimes used at EGA. However, on the CGA, the ability to programmatically load custom fonts is completely absent, you can only use the standard font flashed in ROM.
The second part of the idea: you can use pseudo-graphics symbols in which the left or right part of the familiarity is shaded, as well as reduce the height of the characters in the video controller registers to two or one pixel, and thus create a pseudo-graphics mode 160 by 100 pixels with a 16-color palette, in which each pseudo-pixel can be displayed with a different color. This technique was demonstrated in 2011 in a Pac-Man clone called paku paku for DOS/CGA. This mode requires 16,000 bytes of video memory to store a pixel image: 80 characters per line, 100 lines, two bytes per character (character code and color), which exhausts all 16 kilobytes of video memory available on the CGA.
And now the main ingredient, how to get both 16 colors and human-sized pixels, and not huge cubes. If we reduce the height of the character to two pixels, and display different characters on the screen, and not just pseudographic blocks, from them, which is logical, two pixel lines will be visible, with some content depending on the outlines of the character (the upper pieces of letters , numbers and other symbols). If we take a high-resolution image, split it into blocks of 8×2 pixels, and for each we select the visually most similar of 256 pieces of characters, we get a slightly noisy, but still high-resolution image. This is exactly what happens everywhere in the Area 5150, and this explains the somewhat specific kind of graphics in the demo.
Of course, this trick does not allow each pixel to have its own color, the coloring restrictions inherent in text modes – two colors per 8×2 block – are preserved, but they turn out to be very similar to the color restrictions of computers of those years (ZX Spectrum, MSX family), which means you can apply all the experience gained over the years of effective work with them.
The video memory consumption is the same as for the 160×100 pseudo-graphics mode, which leaves no room even for double buffering. In the final part of the demo, where digital music sounds, the “impossible” 160×200 mode is also implemented. For a full screen, it would have required 32 kilobytes of video memory, which is not available, but the creative design of this scene, containing a vertical reflection of the upper half, made it possible to keep within the standard 16 kilobytes, as well as to realize an interesting effect with waves on the water.
Music and my involvement
A few eras ago, namely in 2017, I developed a VST plugin called PCSPE, in which he implemented the idea of mixing several virtual music channels into one using a priority system similar to the main way of implementing sound effects in 8-bit games – a more important effect drowns out less important ones – which made it possible to create pseudo-polyphonic music for PC Speaker in a rather convenient way in any modern digital studios. I don’t remember exactly what prompted this idea at that time, probably one of the unrealized game projects, but I think that the 8088 MPH demo also had some attention.
In 2019, I developed the audio code for the MS-DOS game Planet X3 by The 8-bit Guy (David Murray), where a similar concept was implemented as a separate tracker also under MS-DOS. Around the same time I released a music album System Beeps, written with PCSPE. It so happened that one of the authors of 8088 MPH, Jim Leonard (trixter) also participated in the development of this game, and David and Jim were among the first listeners of my latest album.
In January 2020, Jim wrote to me with an offer to participate in a new XT demo project as a musician already familiar with PC Speaker. At that time, the demo did not yet have a name, it was expected that the development would take several months, and the release would take place at one of the large demo parties with the personal presence of the authors – this was an important point, the authors initially did not want to publish the work in the format of an online competition. But, in fact, 2020 happened, and live demopats were postponed for a long time. The demo has also been delayed.
I managed to forget about this project, but in 2022 Jim reminded me of himself, work finally resumed, and by July 18, the authors prepared a video of a rough build of the demo, which I could use as a reference. The problem was the extremely tight timeline, I had only six days to prepare a rough version of the music, to leave some more time to integrate the soundtrack with the demo itself and make appropriate edits to the demo and music. I had to drop everything and quickly get down to business.
Music for PC Speaker
The soundtrack was supposed to last a full seven minutes, which was also a problem, because the typical length of my compositions is 2-3 minutes, I rarely exceed this length. Also typically I write about a minute of music a day. At first, I did not imagine how I could master such a large volume in the available time. However, I remembered my experience with The Board (2011) by Alone Coder – if I’m not mistaken, historically this was the first demo with my music. While working on it, we were also very limited in time, and then Alone Coder suggested that I just take my old sketches and put them into a track. And so I did: I took three completely different tracks, wrote transitions between them, and the result worked quite well for myself, although according to my then criteria, I would not consider it a finished track.
Also, a few years ago I learned about the concept of theatrical, or event music, which was described in his videos by the well-known in narrow circles of music lovers Reverend Sasha “Boring Sound“Zilkov – an approach to composing, where music is structured according to the events of another work and may consist of rather musically strange, not the most logical and theoretically correct ideas that emphasize certain points. This is an alternative to the classical approach, which is based on a well-thought-out composition with certain harmonic evolutions.This alternative approach is unlikely to fit the composition into eternity, but nevertheless, the music will sound interesting and varied in the context of the accompanying work.
Since I still don’t know how to harmonic evolution, I decided to use the event approach. I didn’t have sketches in reserve, so I started by creating them – I sketched fragments for those demo scenes where I had an idea of \u200b\u200bwhat could sound there. I used the fastest approach: I wrote the bass and drums by hand, after which I played a relatively long improvisation to this fragment on a MIDI keyboard, and the recording was cut into pieces into a more or less intelligible melody and finalized by hand. There are a few video game references in the demo, notably Doom’s Cacodemon and Marble Madness, and I’ve added relevant music from those games. Further, all parts were more or less averaged into the same key. The tempo was initially averaged to 119 BPM for the entire duration (not exactly 120, to get an almost imperceptible tempo pulsation due to 1/120 second quantization), because when cutting fragments into the final composition, tempo changes would definitely add problems, and on them decision would require additional time.
When the parts for certain scenes and sound effects at the beginning and end of the demo took on a fairly clear form, I filled in the gaps by adding transitions and parts between fragments already arranged in the timeline, and added detail in various places, in particular, to emphasize the action – additional percussive cuts , sound effects. This way I was able to have a near-final soundtrack ready by July 23rd, which gave the demo writers some extra time to integrate. According to the general good old demoscene tradition of sawing everything until the very last minute, the authors managed to make synchronization with the scenes very approximately. Only three scenes coincide, and the music from some of the scenes generally crawled into others, although in my initial cut all the transitions between scenes were thought out and clearly framed in the composition. The final version, which will also improve the synchronization of music with scenes, is still in the promise stage.
From a technical point of view, the process of working on music was the same as for System Beeps – the track was written in Reaper, using the PCSPE plug-in, in 120 Hertz mode. In this case, the use of Reaper helped a lot to optimize the workflow. It has basic video editing capabilities, so I could see the action right away while composing snippets of the composition, with good synchronization. I also cut the rough video slightly, adjusting the lengths of some scenes to the music for smoother transitions, and the authors used this cut as a reference for synchronization. To improve synchronization, the use of the PCSPE event marker system was also provided, but in the party version it, apparently, is not really involved.
Music at the end
A few words about the cool sounding music in the credits part. It was written by cTrix for an engine written by Andrew. This unique engine outputs just one channel of 6-bit PCM at around 15 kHz, with the music refreshing at 60 hertz. There is no mixing, no volume, no resampling – all samples for all notes and volumes need to be prepared separately, and they must fit in a 64-kilobyte memory segment. But on the other hand, this makes it possible to do something else, besides playing music, even on the most modest 8088 at 4.77 MHz.
The rest, as they say, is history. I’m glad that I had the opportunity to participate in the creation of a great demo. Couldn’t have dreamed of it when I watched 8088 MPH in 2015.
Immediately after the release, Area 5150 was predicted to be in the demo of the year, and indeed, a year later it hit the lists Meteoriks 2023 is such a demoscene micro-Oscar, celebrating the best works of the year in many categories. Area 5150 was nominated in two categories at once: Best Oldschool Production (Best Demo for Retro Platforms) and Outstanding Technical Achievement (Outstanding Technical Achievement), and won the latter. It so happened that in the first category he had to fight for the first place with my own work (spoiler: it did not win either). But I will talk about this another time.